diff --git a/README.md b/README.md index 4bc96e3..19394ad 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,17 @@ -# Default Module Template +# Random Dungeon Generator 9f [PRC8-PEPS-CEP3] -Repository for the development of the PRC8 version of ..... +Repository for the development of the PRC8 version of Random Dungeon Generator 9f. [Discussion Thread on Discord](https://discord.gg/ca2ru3KxYd) ## Requirements 1.) [Nasher](https://github.com/squattingmonk/nasher), installed in your system path. -2.) [Original module resources]() +2.) [Original module resources](https://neverwintervault.org/project/nwn1/module/elidrins-random-dungeon-generator-rdg9) 3.) [PRC8](https://gitea.raptio.us/Jaysyn/PRC8/releases) -3.) [CEP3](https://neverwintervault.org/project/nwnee/hakpak/combined/cep-3-community-expansion-pack) - -4.) [CEP2](https://neverwintervault.org/cep) +4.) [CEP3](https://neverwintervault.org/project/nwnee/hakpak/combined/cep-3-community-expansion-pack) ## Instructions diff --git a/nasher.cfg b/nasher.cfg index a53d5c7..467d5d3 100644 --- a/nasher.cfg +++ b/nasher.cfg @@ -1,9 +1,9 @@ [package] -name = "Default Module" -description = "PRC8 version of ..." -version = "1.01prc8" +name = "Random Dungeon Generator 9f [PRC8-PEPS-CEP3]" +description = "PRC8 version of Random Dungeon Generator." +version = "9.2prc8" url = "https://discord.gg/ca2ru3KxYd" -author = "Original Author" +author = "Elidrin" author = "Jaysyn904 <68194417+Jaysyn904@users.noreply.github.com>" [package.sources] @@ -15,8 +15,8 @@ author = "Jaysyn904 <68194417+Jaysyn904@users.noreply.github.com>" [target] name = "default" -file = "Default Module.mod" -description = "PRC8 version of ..." +file = "Random Dungeon Generator 9f [PRC8-PEPS-CEP3].mod" +description = "PRC8 version of Random Dungeon Generator." [target.sources] include = "src/module/**/*" include = "src/include/**/*" @@ -239,8 +239,8 @@ description = "PRC8 version of ..." [target] name = "tophak" -file = "HAKNAME.hak" -description = "PRC8 merge hakpak for PRC8 version of ..." +file = "rdg_prc8_top.hak" +description = "Merge hakpak for PRC8 version of Random Dungeon Generator 9f." [target.sources] include = "src/hakpak/HAKNAME/**/*" include = "src/include/**/*" @@ -459,4 +459,4 @@ description = "PRC8 merge hakpak for PRC8 version of ..." filter = "xchst_inc.nss" [target.rules] - "*" = "src/hakpak/HAKNAME/$ext" \ No newline at end of file + "*" = "src/hakpak/rdg_prc8_top/$ext" \ No newline at end of file diff --git a/src/_removed/nw_ch_acd.nss b/src/_removed/nw_ch_acd.nss new file mode 100644 index 0000000..4d6af54 --- /dev/null +++ b/src/_removed/nw_ch_acd.nss @@ -0,0 +1,29 @@ +//:://///////////////////////////////////////////// +//:: User Defined Henchmen Script +//:: NW_CH_ACD +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + The most complicated script in the game. + ... ever +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: March 18, 2002 +//::////////////////////////////////////////////// + +#include "x2_inc_spellhook" +void main() +{ + int nEvent = GetUserDefinedEventNumber(); + + // * If a creature has the integer variable X2_L_CREATURE_NEEDS_CONCENTRATION set to TRUE + // * it may receive this event. It will unsommon the creature immediately + if (nEvent == X2_EVENT_CONCENTRATION_BROKEN) + { + effect eVis = EffectVisualEffect(VFX_IMP_UNSUMMON); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVis,GetLocation(OBJECT_SELF)); + FloatingTextStrRefOnCreature(84481,GetMaster(OBJECT_SELF)); + DestroyObject(OBJECT_SELF,0.1f); + } +} diff --git a/src/_removed/nw_i0_generic.nss b/src/_removed/nw_i0_generic.nss new file mode 100644 index 0000000..67d73ad --- /dev/null +++ b/src/_removed/nw_i0_generic.nss @@ -0,0 +1,2021 @@ +//:://///////////////////////////////////////////// +//:: Generic Scripting Include v1.0 +//:: NW_I0_GENERIC +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + + December 7 2002, Naomi Novik + Many functions removed to separate libraries: + + x0_i0_anims + PlayMobileAmbientAnimations_NonAvian + PlayMobileAmbientAnimations_Avian + (with PlayMobileAmbientAnimations changed to + just a call to one of these two) + PlayImmobileAmbientAnimations + + x0_i0_assoc + associate constants (NW_ASC_...) + GetPercentageHPLoss (only used in GetAssociateHealMaster) + SetAssociateState + GetAssociateState + ResetHenchmenState + AssociateCheck + GetAssociateHealMaster + GetFollowDistance + SetAssociateStartLocation + GetAssociateStartLocation + + x0_i0_behavior + behavior constants + SetBehaviorState + GetBehaviorState + + x0_i0_spawncond + OnSpawn condition constants + SetSpawnInCondition + GetSpawnInCondition + SetSpawnInLocals + SetListeningPatterns + + x0_i0_walkway + WalkWayPoints + RunNextCircuit + RunCircuit + CheckWayPoints + GetIsPostOrWalking + + x0_i0_talent + ALL the talent functions + + x0_i0_equip + Equipping functions + + x0_i0_match + Matching functions + + x0_i0_debug + MyPrintString + DebugPrintTalentId + newdebug + + x0_inc_generic + Pretty much everything else + + ***********************************************' + CHANGE SUMMARY + + + February 6 2003: Commented out the Henchman RespondToShout because now using + the newer bkRespondToShout function in x0_i0_henchman + + + September 18 2002: DetermineCombatRound broken into smaller functions + 19 : Removed randomness from Talent system. You can't + have smart AI and random behavior. Only healing + has the possiblity of being random. + + I may want to add the possibility of getting a + random talent only in the Talent filter if + something fails (*) + + + ******************************************** + WARNING THIS SCRIPT IS CHANGED AT YOUR PERIL + ******************************************** + + This is the master generic script and currently + handles all combat and some plot behavior + within NWN. If this script is tampered + with there is a chance of introducing game + breaking bugs. But other than that enjoy. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Sept 20, 2001 +//::////////////////////////////////////////////// + +//#include "x0_i0_assoc" - included in x0_inc_generic +//#include "x0_inc_generic" - included in x0_i0_talent +//#include "x0_i0_talent" - included in x0_i0_combat + +//#include "x0_i0_combat" - include in x0_i0_anims + +//#include "x0_i0_walkway" - include in x0_i0_anims +#include "x0_i0_behavior" +#include "x0_i0_anims" + + +/********************************************************************** + * CONSTANTS + **********************************************************************/ + +/********************************************************************** + * Flee and move constants + **********************************************************************/ + +const int NW_GENERIC_FLEE_EXIT_FLEE = 0; +const int NW_GENERIC_FLEE_EXIT_RETURN = 1; +const int NW_GENERIC_FLEE_TELEPORT_FLEE = 2; +const int NW_GENERIC_FLEE_TELEPORT_RETURN = 3; + +/********************************************************************** + * Shout constants + **********************************************************************/ + +// NOT USED +const int NW_GENERIC_SHOUT_I_WAS_ATTACKED = 1; + +//IN OnDeath Script +const int NW_GENERIC_SHOUT_I_AM_DEAD = 12; + +//IN TalentMeleeAttacked +const int NW_GENERIC_SHOUT_BACK_UP_NEEDED = 13; + +const int NW_GENERIC_SHOUT_BLOCKER = 2; + +/********************************************************************** + * chooseTactics constants + **********************************************************************/ + +const int chooseTactics_MEMORY_OFFENSE_MELEE = 0; +const int chooseTactics_MEMORY_DEFENSE_OTHERS = 1; +const int chooseTactics_MEMORY_DEFENSE_SELF = 2; +const int chooseTactics_MEMORY_OFFENSE_SPELL = 3; + + +/********************************************************************** + * FUNCTION PROTOTYPES + **********************************************************************/ + +// * New Functions September - 2002 + + +// * The class-specific tactics have been broken out from DetermineCombatRound +// * for readability. This function determines the actual tactics each class +// * will use. +int chooseTactics(object oIntruder); + +// Adds all three of the class levels together. Used before +// GetHitDice became available +int GetCharacterLevel(object oTarget); + +//If using ambient sleep this will remove the effect +void RemoveAmbientSleep(); + +//Searches for the nearest locked object to the master +object GetLockedObject(object oMaster); + +/********************************************************************** + * DetermineCombatRound subfunctions + **********************************************************************/ + +// Used in DetermineCombatRound to keep a +// henchmen bashing doors. +int BashDoorCheck(object oIntruder = OBJECT_INVALID); + +// Determines which of a NPCs three classes to +// use in DetermineCombatRound +int DetermineClassToUse(); + + +/********************************************************************** + * Core AI Functions + **********************************************************************/ + +//:://///////////////////////////////////////////// +//:: DetermineCombatRound +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This function is the master function for the + generic include and is called from the main + script. This function is used in lieu of + any actual scripting. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Oct 16, 2001 +//::////////////////////////////////////////////// +void DetermineCombatRound(object oIntruder = OBJECT_INVALID, int nAI_Difficulty = 10); + +//:://///////////////////////////////////////////// +//:: Respond To Shouts +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +// Allows the listener to react in a manner +// consistant with the given shout but only to one +// combat shout per round +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Oct 25, 2001 +//::////////////////////////////////////////////// +//NOTE ABOUT COMMONERS +// Commoners are universal cowards. If you attack anyone +// they will flee for 4 seconds away from the attacker. +// However to make the commoners into a mob, make a single +// commoner at least 10th level of the same faction. +// If that higher level commoner is attacked or killed then +// the commoners will attack the attacker. They will disperse again +// after some of them are killed. Should NOT make multi-class +// creatures using commoners. +// +//NOTE ABOUT BLOCKERS +// It should be noted that the Generic Script for On Dialogue +// attempts to get a local set on the shouter by itself. +// This object represents the LastOpenedBy object. It is this +// object that becomes the oIntruder within this function. +// +//NOTE ABOUT INTRUDERS +// The intruder object is for cases where a placable needs to +// pass a LastOpenedBy Object or a AttackMyAttacker +// needs to make his attacker the enemy of everyone. +void RespondToShout(object oShouter, int nShoutIndex, object oIntruder = OBJECT_INVALID); + + +//******** PLOT FUNCTIONS + +// NPCs who have warning status set to TRUE will allow +// one 'free' attack by PCs from a non-hostile faction. +void SetNPCWarningStatus(int nStatus = TRUE); + +// NPCs who have warning status set to TRUE will allow +// one 'free' attack by PCs from a non-hostile faction. +int GetNPCWarningStatus(); + +// * Presently Does not work with the current implementation +// * of encounter triggers! +// +// This function works in tandem with an encounter +// to spawn in guards to fight for the attacked +// NPC. MAKE SURE THE ENCOUNTER TAG IS SET TO: +// +// "ENC_" + NPC TAG +//:: Created By: Preston Watamaniuk +//:: Created On: Oct 29, 2001 +void SetSummonHelpIfAttacked(); + +// The target object flees to the specified +// way point and then destroys itself, to be +// respawned at a later point. For unkillable +// sign post characters who are not meant to fight +// back. +// This function is used only because ActionDoCommand can +// only accept void functions. +void CreateSignPostNPC(string sTag, location lLocal); + +// The target object flees to the specified +// way point and then destroys itself, to be +// respawned at a later point. For unkillable +// sign post characters who are not meant to fight +// back. +void ActivateFleeToExit(); + +// The target object flees to the specified +// way point and then destroys itself, to be +// respawned at a later point. For unkillable +// sign post characters who are not meant to fight +// back. +int GetFleeToExit(); + +// Checks that an item was unlocked. +//:: Created By: Preston Watamaniuk +//:: Created On: Nov 19, 2001 +void CheckIsUnlocked(object oLastObject); + +// This function is now just a wrapper around the functions +// PlayMobileAmbientAnimations_Nonavian() and +// PlayMobileAmbientAnimations_Avian(), in x0_i0_anims +void PlayMobileAmbientAnimations(); + +// Determines the special behavior used by the NPC. +// Generally all NPCs who you want to behave differently +// than the defualt behavior. +// For these behaviors, passing in a valid object will +// cause the creature to become hostile the the attacker. +void DetermineSpecialBehavior(object oIntruder = OBJECT_INVALID); + +// * Am I in a invisible or stealth state or sanctuary? +int InvisibleTrue(object oSelf = OBJECT_SELF); + +/********************************************************************** + * FUNCTION DEFINITIONS + **********************************************************************/ + +//:://///////////////////////////////////////////// +//:: AdjustBehaviorVariable +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* +Overriding "behavior" variables. +If a variable has been stored on the creature it overrides the above +class defaults +*/ +//::////////////////////////////////////////////// +//:: Created By: +//:: Created On: +//::////////////////////////////////////////////// + +int AdjustBehaviorVariable(int nVar, string sVarName) +{ + int nPlace =GetLocalInt(OBJECT_SELF, sVarName); + if (nPlace > 0) + { + return nPlace; + } + //return nVar; // * return the original value + return 0; +} + +//:://///////////////////////////////////////////// +//:: InvisibleBecome +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + A more intelligent invisibility solution, + along the lines of the one used in + the various end-user AIs. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: June 14, 2003 +//::////////////////////////////////////////////// +int InvisibleBecome(object oSelf = OBJECT_SELF) +{ + int iDarkness = FALSE; + if(GetHasSpell(SPELL_DARKNESS) && GetHasSpell(SPELL_DARKVISION)) iDarkness = TRUE; + if(GetHasSpell(SPELL_IMPROVED_INVISIBILITY) || GetHasSpell(SPELL_INVISIBILITY) || + GetHasSpell(SPELL_INVISIBILITY_SPHERE) || (iDarkness) || GetHasSpell(SPELL_SANCTUARY) + || GetHasSpell(SPELL_ETHEREALNESS) + || GetHasFeat(FEAT_HIDE_IN_PLAIN_SIGHT, oSelf) == TRUE) + { + + // * cannot already be invisible, otherwise what is the point + if(InvisibleTrue(oSelf) == FALSE) + { + // * this bit ported directly from Jasperre + // Can anyone see me? (has spell effects of X) + // * The point of this is to see if its even worthwhile to go invisbile + // * or will it be immediately dispeled. + object oSeeMe = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_HAS_SPELL_EFFECT, SPELL_TRUE_SEEING); + if(!GetIsObjectValid(oSeeMe)) + { + oSeeMe = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_HAS_SPELL_EFFECT, SPELL_SEE_INVISIBILITY); + // if(!GetIsObjectValid(oSeeMe)) + // { + // oSeeMe = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_HAS_SPELL_EFFECT, SPELL_INVISIBILITY_PURGE); + // } + } + + + if(!GetIsObjectValid(oSeeMe)) + { + int nDiff = GetCombatDifficulty(oSelf, TRUE); + //SpeakString(IntToString(nDiff)); + if (nDiff > -1) + { + + ClearActions(1001); + if (iDarkness==TRUE) + { + ActionCastSpellAtObject(SPELL_DARKVISION, oSelf); + ActionCastSpellAtObject(SPELL_DARKNESS, oSelf); + return TRUE; + } +// if (GetHasSpell(SPELL_IMPROVED_INVISIBILITY, oSelf) == TRUE) + if (GetHasSpell(SPELL_IMPROVED_INVISIBILITY, oSelf)) + { + ActionCastSpellAtObject(SPELL_IMPROVED_INVISIBILITY, oSelf); + return TRUE; + } + else +// if (GetHasSpell(SPELL_INVISIBILITY, oSelf) == TRUE) + if (GetHasSpell(SPELL_INVISIBILITY, oSelf)) + { + ActionCastSpellAtObject(SPELL_INVISIBILITY, oSelf); + return TRUE; + } + else +// if (GetHasSpell(SPELL_INVISIBILITY_SPHERE, oSelf) == TRUE) + if (GetHasSpell(SPELL_INVISIBILITY_SPHERE, oSelf)) + { + ActionCastSpellAtObject(SPELL_INVISIBILITY_SPHERE, oSelf); + return TRUE; + } + else +// if (GetHasSpell(SPELL_ETHEREALNESS, oSelf) == TRUE) + if (GetHasSpell(SPELL_ETHEREALNESS, oSelf)) + { + ActionCastSpellAtObject(SPELL_ETHEREALNESS, oSelf); + return TRUE; + } + else +// if (GetHasSpell(SPELL_SANCTUARY, oSelf) == TRUE) + if (GetHasSpell(SPELL_SANCTUARY, oSelf)) + { + ActionCastSpellAtObject(SPELL_SANCTUARY, oSelf); + return TRUE; + } + else + if (GetHasFeat(FEAT_HIDE_IN_PLAIN_SIGHT, oSelf)) + // * go into stealth mode + { + // SpeakString("Attempting stealth mode"); + SetActionMode(OBJECT_SELF, ACTION_MODE_STEALTH, TRUE); + WrapperActionAttack(GetNearestEnemy()); + return TRUE; + } + + } + } + }// is NOT invisible + } + return FALSE; +} + +//:://///////////////////////////////////////////// +//:: InvisibleTrue +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + Returns TRUE if oSelf is hidden either + magically or via stealth + +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: July 14, 2003 +//::////////////////////////////////////////////// + +int InvisibleTrue(object oSelf =OBJECT_SELF) +{ + if(GetHasEffect(EFFECT_TYPE_INVISIBILITY, oSelf) || GetHasEffect(EFFECT_TYPE_IMPROVEDINVISIBILITY, oSelf) + || (GetHasSpellEffect(SPELL_DARKNESS, oSelf) && GetHasSpellEffect(SPELL_DARKVISION, oSelf)) + || GetActionMode(oSelf, ACTION_MODE_STEALTH) || GetHasEffect(EFFECT_TYPE_SANCTUARY, oSelf) + || GetHasEffect(EFFECT_TYPE_ETHEREAL, oSelf)) + { + return TRUE; + + } + return FALSE; +} + +// * Returns true if a wizard or sorcerer and wearing armor +int GetShouldNotCastSpellsBecauseofArmor(object oTarget, int nClass) +{ + + if (GetArcaneSpellFailure(oTarget) > 15 && (nClass == CLASS_TYPE_SORCERER || nClass == CLASS_TYPE_WIZARD)) + { + return TRUE; + } + return FALSE; +} + + +//:://///////////////////////////////////////////// +//:: chooseTactics +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Separated this function out from DetermineCombatRound + for readibility +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: September 2002 +//::////////////////////////////////////////////// + +int chooseTactics(object oIntruder) +{ + + // SELF PRESERVATION: Always attempt to heal self first + if(TalentHealingSelf() == TRUE) return 99; //Use spells and potions + + // Next, try the special tactics routines + // specific to XP1 + if (SpecialTactics(oIntruder)) return 99; + + // * These constants in ChooseTactics routine + // * remember previous rounds choices + + //moved to top of script, made into real constants + //int MEMORY_OFFENSE_MELEE = 0; + //int MEMORY_DEFENSE_OTHERS = 1; + //int MEMORY_DEFENSE_SELF = 2; + //int MEMORY_OFFENSE_SPELL = 3; + + // * If defensive last round, try to be offensive this round + // * this is to prevent wasting time on multiple protections + int nPreviousMemory = GetLocalInt(OBJECT_SELF, "NW_L_MEMORY"); + + int nClass = DetermineClassToUse(); + + //This does not seem to be used, so no point declaring it... + //int nCrazy = 0; + + // * Defaulted high so unspecified classes will not be cowards + int nOffense = 50; + + int nCompassion = 25; + + // * Defaulted this high because non standard creatures + // * with spells should try and use them. + int nMagic = 55; + + // * setup base BEHAVIOR + switch (nClass) + { + case CLASS_TYPE_COMMONER: + // Commoners should run away from fights + //SpawnScriptDebugger(); + nOffense = 0; nCompassion = 0; nMagic = 0; break; + case CLASS_TYPE_PALEMASTER: + case CLASS_TYPE_WIZARD: + case CLASS_TYPE_SORCERER: + // SpawnScriptDebugger(); + nOffense = 40; nCompassion = 40; nMagic = 100; break; + case CLASS_TYPE_BARD: + case CLASS_TYPE_HARPER: + case CLASS_TYPE_DRAGONDISCIPLE: + { + if(TalentBardSong() == TRUE) return 99; + nOffense = 40; nCompassion = 42; nMagic = 43; break; + } + case CLASS_TYPE_CLERIC: + case CLASS_TYPE_DRUID: + case CLASS_TYPE_SHIFTER: + { + nOffense = 40; + nCompassion = 45; + nMagic = 44; + // * Clerics shouldn't constantly cast spells + if (nPreviousMemory != chooseTactics_MEMORY_OFFENSE_MELEE) + nMagic = Random(50) + 1; + break; + } + case CLASS_TYPE_PALADIN : + case CLASS_TYPE_RANGER : + nOffense = 40; nCompassion = 25; nMagic = Random(50) + 1; break; + case CLASS_TYPE_BARBARIAN: + { + // SpawnScriptDebugger(); + // * GetHasFeat(...) does not work correctly with no-leveled up + // * characters. So for now, only Xanos gets to do this. + string sTag = GetTag(OBJECT_SELF); + if (sTag == "x0_hen_xan" || sTag == "x2_hen_daelan") + { + if (GetHasFeatEffect(FEAT_BARBARIAN_RAGE) == FALSE) + { + + if (GetHasFeat(FEAT_BARBARIAN_RAGE) == TRUE) + { + ActionUseFeat(FEAT_BARBARIAN_RAGE, OBJECT_SELF); + return 99; + } + } + } + nOffense = 50; nCompassion = 25; nMagic = 20; break; + // * set high magic to use rage + // * suggestion don't give barbarians lots of magic or else they will fight oddly + } + case CLASS_TYPE_WEAPON_MASTER: + case CLASS_TYPE_ARCANE_ARCHER: + case CLASS_TYPE_BLACKGUARD: + case CLASS_TYPE_SHADOWDANCER: + case CLASS_TYPE_DWARVENDEFENDER: + case CLASS_TYPE_ASSASSIN: + case CLASS_TYPE_FIGHTER: + case CLASS_TYPE_ROGUE : //SpawnScriptDebugger(); + case CLASS_TYPE_MONK : + nOffense = 40; nCompassion = 0; nMagic = 0; break; + case CLASS_TYPE_UNDEAD: + nOffense = 40; nCompassion = 40; nMagic = 40; break; + case CLASS_TYPE_OUTSIDER: + { + nOffense = 40; nMagic = 40; + if (GetAlignmentGoodEvil(OBJECT_SELF) == ALIGNMENT_GOOD) + { + nCompassion = 40; + } + else nCompassion = 0; + break; + } + case CLASS_TYPE_CONSTRUCT: + case CLASS_TYPE_ELEMENTAL: + nOffense = 40; nCompassion = 0; nMagic = 40; break; + case CLASS_TYPE_DRAGON: + nOffense = 40; nCompassion = 20; nMagic = 40; break; +// default: +// nOffense = 7; nCompassion = 7; nMagic = 7; break; + } + + //really minor optimization - since this bit doesn't rely on the variables set + //below, might as well check it before we do all those calculations + // * Dragon Disciple Breath + if (GetHasFeat(FEAT_DRAGON_DIS_BREATH) && Random(100) > 50) + { + ClearActions(2000); + ActionCastSpellAtObject(690, GetNearestEnemy(), METAMAGIC_ANY, TRUE); + DecrementRemainingFeatUses(OBJECT_SELF, FEAT_DRAGON_DIS_BREATH); + return 99; + } + + + // MyPrintString("Made it past the class-specific settings"); + + + // ************************************ + // * MODIFY BEHAVIOR FOR SPECIAL CASES + // ************************************ + if (GetRacialType(OBJECT_SELF) == RACIAL_TYPE_UNDEAD) + nCompassion = nCompassion - 20; + + // Randomize things a bit + //seems that nCrazy is always 0, so might as well comment them out + nOffense = Random(10 /*+ nCrazy*/) + nOffense; + nMagic = Random(10 /*+ nCrazy*/) + nMagic; + nCompassion = Random(10 /*+ nCrazy*/) + nCompassion; + + + + // * if your opponent is close to you, then increase offense + // * as casting defensive abilities when enemies are close + // * is generally not a good idea. + // * Dec 18 2002: If you have Combat Casting, you'll still be more + // * liable to use defensive abilities + if (GetIsObjectValid(oIntruder) && !GetHasFeat(FEAT_COMBAT_CASTING)) + { + if (GetDistanceToObject(oIntruder) <= 5.0) { + nOffense = nOffense + 20; + nMagic = nMagic - 20; + } + } + + // * If enemies are further away, more chance of doing magic + if (GetDistanceToObject(oIntruder) > 3.0) + nMagic = nMagic + 15; + + // * Dec 18 2002: Add your level to your magic rating + nMagic = nMagic + GetHitDice(OBJECT_SELF); + + + // ************************************** + // * CHOOSE TALENT TO USE + // ************************************** + + //SpawnScriptDebugger(); + + // * If defensive last round, try to be offensive this round + // * this is to prevent wasting time on multiple protections + if ((nPreviousMemory == chooseTactics_MEMORY_DEFENSE_OTHERS) + || (nPreviousMemory == chooseTactics_MEMORY_DEFENSE_SELF)) + { + nOffense = nOffense + 40; + } + + + // April 2003 + // If in rage should be almost no chance of doing magic + // * June 2003 + // * If has more than 5% chance of spell failure don't try casting + // 5% chance changed to 15% + if (GetHasFeatEffect(FEAT_BARBARIAN_RAGE)== TRUE || GetShouldNotCastSpellsBecauseofArmor(OBJECT_SELF, nClass) == TRUE + || GetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING") == 10) + { + nMagic = 0; + } + + + + + // ************** + // * JULY 12 2003 + // * Overriding "behavior" variables. + // * If a variable has been stored on the creature it overrides the above + // * class defaults + // * JULY 28 2003 + // * changed this so that its an additive process, not an overrwrite. + // * gives more flexiblity. + // ************** + nMagic = nMagic + AdjustBehaviorVariable(nMagic, "X2_L_BEH_MAGIC"); + nOffense = nOffense + AdjustBehaviorVariable(nOffense, "X2_L_BEH_OFFENSE"); + nCompassion = nCompassion + AdjustBehaviorVariable(nCompassion, "X2_L_BEH_COMPASSION"); + + + // * If invisbile of any sort, become Defensive and + // * magical to use any buffs you may have + // * This behavior variable setting should override all others + // * October 22 2003 - Lines 690 and 713 modified to only work if magic + // * setting has not been turned off. Nathyrra always going invisible + // * can be annoying. + if (InvisibleTrue(OBJECT_SELF) == TRUE && nMagic > 0) + { + // SpawnScriptDebugger(); + // * if wounded at all take this time to heal self + // * since I am invisible there is little danger from doing this + if (GetCurrentHitPoints(OBJECT_SELF) < GetMaxHitPoints(OBJECT_SELF)) + { + if(TalentHealingSelf(TRUE) == TRUE) return 99; + } + + nOffense = 7; + nMagic = 100; + + if (GetActionMode(OBJECT_SELF, ACTION_MODE_STEALTH) == TRUE) + { + nOffense = 100; // * if in stealth attempt sneak attacks + } + } + else + // ************** + // * JULY 14 2003 + // * Attempt To Go Invisible + // ************** + if (InvisibleBecome() == TRUE && nMagic > 0) + return 99; + + // PHYSICAL, NO OFFENSE + if (nOffense <= 5) + { + //SpawnScriptDebugger(); + //SpeakString("fleeing"); + if (TalentFlee(oIntruder) == TRUE) return 99; + } + + // protect others: MAGICAL, DEFENSE, COMPASSION + if ((nOffense<= 50) && (nMagic > 50) && (nCompassion > 50)) + { + SetLocalInt(OBJECT_SELF, "NW_L_MEMORY", chooseTactics_MEMORY_DEFENSE_OTHERS); + if (TalentHeal() == TRUE) return 99; + if (TalentCureCondition() == TRUE) return 99; + if (TalentUseProtectionOthers() == TRUE) return 99; + if (TalentEnhanceOthers() == TRUE) return 99; + + // * Temporarily be non-compassionate to buff self + // * if we got to this point. + nCompassion = 0; + } + + // protectself: MAGICAL, DEFENSE, NO COMPASSION + if ((nOffense<= 50) && (nMagic > 50) && (nCompassion <=50)) + { + SetLocalInt(OBJECT_SELF, "NW_L_MEMORY", chooseTactics_MEMORY_DEFENSE_SELF); + + /* Dec 19 2002: + Against spell-casters, cast protection spells more often + */ + int nClass = GetClassByPosition(1,oIntruder); + if (nClass == CLASS_TYPE_WIZARD || nClass == CLASS_TYPE_SORCERER + || nClass == CLASS_TYPE_CLERIC || nClass == CLASS_TYPE_DRUID) + { + if (TalentSelfProtectionMantleOrGlobe()) + return 99; + } + + if(TalentUseProtectionOnSelf() == TRUE) return 99; + if(TalentUseEnhancementOnSelf() == TRUE) return 99; + if(TalentPersistentAbilities() == TRUE) return 99; + // int TalentAdvancedBuff(float fDistance); + + //Used for Potions of Enhancement and Protection + if(TalentBuffSelf() == TRUE) return 99; + + if(TalentAdvancedProtectSelf() == TRUE) return 99; + if(TalentSummonAllies() == TRUE) return 99; + if(TalentSeeInvisible() == TRUE) return 99; + if(TalentMeleeAttacked(oIntruder) == TRUE) return 99; + if(TalentRangedAttackers(oIntruder) == TRUE) return 99; + if(TalentRangedEnemies(oIntruder) == TRUE) return 99; + + + } + + // MAGICAL, OFFENSE + if (nMagic > 50) + { + // // MyPrintString("in offensive spell"); + // SpawnScriptDebugger(); + SetLocalInt(OBJECT_SELF, "NW_L_MEMORY", chooseTactics_MEMORY_OFFENSE_SPELL); + if (TalentUseTurning() == TRUE) return 99; + if (TalentSpellAttack(oIntruder) == TRUE) return 99; + } + + // If we got here, we're going to melee offense + SetLocalInt(OBJECT_SELF, "NW_L_MEMORY", chooseTactics_MEMORY_OFFENSE_MELEE); + + // PHYSICAL, OFFENSE (if nothing else applies) + if (TryKiDamage(oIntruder) == TRUE) return 99; + if (TalentSneakAttack() == TRUE) return 99; + if (TalentDragonCombat(oIntruder)) {return 99;} + if (TalentMeleeAttack(oIntruder) == TRUE) return 99; + + + object oHostile = GetNearestSeenEnemy(); + + // * Feb 17 2003: This error could happen in the situation that someone + // * went into combat mode and their 'hostility' ended while going through ChooseTactics + if (GetIsObjectValid(oHostile) == TRUE) + { + + // * BK if it returns this it means the AI found nothing + // * Appropriate to do + //SpeakString("BUG!!!!!!!!!!!!!!!!!!!!!!!! (Let Brent Knowles know about this. Supply savegame) Nothing valid to do !!!!!!!!!!!!!!!!!!!!!"); + //SpeakString("BUG!! Magic " + IntToString(nMagic) + " Compassion " + IntToString(nCompassion) + " Offense " + IntToString(nOffense)); + } + return 1; + +} // * END of choosetactics + +//:://///////////////////////////////////////////// +//:: __InCombatRound +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Tests to see if already running a determine + combatround this round. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: July 11 2003 +//::////////////////////////////////////////////// +int __InCombatRound() +{ + + // * if just in attackaction, turn combat round off + // * if simply fighting it is okay to turn the combat round off + // * and try again because it doesn't hurt an attackaction + // * to be reiniated whereas it does break a spell + int nCurrentAction = GetCurrentAction(OBJECT_SELF); + if (nCurrentAction == ACTION_ATTACKOBJECT || nCurrentAction == ACTION_INVALID || nCurrentAction == ACTION_MOVETOPOINT) + { + return FALSE; + } + if (GetLocalInt(OBJECT_SELF, "X2_L_MUTEXCOMBATROUND") == TRUE) + { + //SpeakString("DEBUG:: In Combat Round, busy."); + return TRUE; + } + return FALSE; +} +//:://///////////////////////////////////////////// +//:: __TurnCombatRoundOn +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Will set the exclusion variable on whether + in combat or not. + This is to prevent multiple firings + of determinecombatround in one round +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: July 11 2003 +//::////////////////////////////////////////////// + +void __TurnCombatRoundOn(int bBool) +{ + if (bBool == TRUE) + { + SetLocalInt(OBJECT_SELF, "X2_L_MUTEXCOMBATROUND", TRUE); + } + else + { + // * delay it turning off like an action + ActionDoCommand(SetLocalInt(OBJECT_SELF, "X2_L_MUTEXCOMBATROUND", FALSE)); + } +} +//:://///////////////////////////////////////////// +//:: DetermineCombatRound +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This function is the master function for the + generic include and is called from the main + script. This function is used in lieu of + any actual scripting. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Oct 16, 2001 +//::////////////////////////////////////////////// + +void DetermineCombatRound(object oIntruder = OBJECT_INVALID, int nAI_Difficulty = 10) +{ + // MyPrintString("************** DETERMINE COMBAT ROUND START *************"); + // MyPrintString("************** " + GetTag(OBJECT_SELF) + " ************"); + + // ---------------------------------------------------------------------------------------- + // May 2003 + // Abort out of here, if petrified + // ---------------------------------------------------------------------------------------- + if (GetHasEffect(EFFECT_TYPE_PETRIFY, OBJECT_SELF) == TRUE) + { + return; + } + + // ---------------------------------------------------------------------------------------- + // Oct 06/2003 - Georg Zoeller, + // Fix for ActionRandomWalk blocking the action queue under certain circumstances + // ---------------------------------------------------------------------------------------- + if (GetCurrentAction() == ACTION_RANDOMWALK) + { + ClearAllActions(); + } + + // ---------------------------------------------------------------------------------------- + // July 27/2003 - Georg Zoeller, + // Added to allow a replacement for determine combat round + // If a creature has a local string variable named X2_SPECIAL_COMBAT_AI_SCRIPT + // set, the script name specified in the variable gets run instead + // see x2_ai_behold for details: + // ---------------------------------------------------------------------------------------- + string sSpecialAI = GetLocalString(OBJECT_SELF,"X2_SPECIAL_COMBAT_AI_SCRIPT"); + if (sSpecialAI != "") + { + SetLocalObject(OBJECT_SELF,"X2_NW_I0_GENERIC_INTRUDER", oIntruder); + ExecuteScript(sSpecialAI, OBJECT_SELF); + if (GetLocalInt(OBJECT_SELF,"X2_SPECIAL_COMBAT_AI_SCRIPT_OK")) + { + DeleteLocalInt(OBJECT_SELF,"X2_SPECIAL_COMBAT_AI_SCRIPT_OK"); + return; + } + } + + + // ---------------------------------------------------------------------------------------- + // DetermineCombatRound: EVALUATIONS + // ---------------------------------------------------------------------------------------- + if(GetAssociateState(NW_ASC_IS_BUSY)) + { + return; + } + + if(BashDoorCheck(oIntruder)) {return;} + + // ---------------------------------------------------------------------------------------- + // BK: stop fighting if something bizarre that shouldn't happen, happens + // ---------------------------------------------------------------------------------------- + + if (bkEvaluationSanityCheck(oIntruder, GetFollowDistance()) == TRUE) + return; + + // ** Store HOw Difficult the combat is for this round + int nDiff = GetCombatDifficulty(); + SetLocalInt(OBJECT_SELF, "NW_L_COMBATDIFF", nDiff); + + // MyPrintString("COMBAT: " + IntToString(nDiff)); + + // ---------------------------------------------------------------------------------------- + // If no special target has been passed into the function + // then choose an appropriate target + // ---------------------------------------------------------------------------------------- + if (GetIsObjectValid(oIntruder) == FALSE) + oIntruder = bkAcquireTarget(); + + + if (GetIsDead(oIntruder) == TRUE) + { + // ---------------------------------------------------------------------------------------- + // If for some reason my target is dead, then leave + // the poor guy alone. Jeez. What kind of monster am I? + // ---------------------------------------------------------------------------------------- + return; + } + + // ---------------------------------------------------------------------------------------- + /* + JULY 11 2003 + If in combat round already (variable set) do not enter it again. + This is meant to prevent multiple calls to DetermineCombatRound + from happening during the *same* round. + + This variable is turned on at the start of this function call. + It is turned off at each "return" point for this function + */ + // ---------------------------------------------------------------------------------------- + if (__InCombatRound() == TRUE) + { + return; + } + + __TurnCombatRoundOn(TRUE); + + // ---------------------------------------------------------------------------------------- + // DetermineCombatRound: ACTIONS + // ---------------------------------------------------------------------------------------- + if(GetIsObjectValid(oIntruder)) + { + + if(TalentPersistentAbilities()) // * Will put up things like Auras quickly + { + __TurnCombatRoundOn(FALSE); + return; + } + + // ---------------------------------------------------------------------------------------- + // BK September 2002 + // If a succesful tactic has been chosen then + // exit this function directly + // ---------------------------------------------------------------------------------------- + + if (chooseTactics(oIntruder) == 99) + { + __TurnCombatRoundOn(FALSE); + return; + } + + // ---------------------------------------------------------------------------------------- + // This check is to make sure that people do not drop out of + // combat before they are supposed to. + // ---------------------------------------------------------------------------------------- + + object oNearEnemy = GetNearestSeenEnemy(); + DetermineCombatRound(oNearEnemy); + + return; + } + __TurnCombatRoundOn(FALSE); + + // ---------------------------------------------------------------------------------------- + // This is a call to the function which determines which + // way point to go back to. + // ---------------------------------------------------------------------------------------- + ClearActions(CLEAR_NW_I0_GENERIC_658); + SetLocalObject(OBJECT_SELF, + "NW_GENERIC_LAST_ATTACK_TARGET", + OBJECT_INVALID); + WalkWayPoints(); +} + + + +//:://///////////////////////////////////////////// +//:: Respond To Shouts +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Allows the listener to react in a manner + consistant with the given shout but only to one + combat shout per round +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Oct 25, 2001 +//::////////////////////////////////////////////// + +//NOTE ABOUT COMMONERS +/* + Commoners are universal cowards. If you attack anyone they will flee for 4 seconds away from the attacker. + However to make the commoners into a mob, make a single commoner at least 10th level of the same faction. + If that higher level commoner is attacked or killed then the commoners will attack the attacker. They will disperse again + after some of them are killed. Should NOT make multi-class creatures using commoners. +*/ +//NOTE ABOUT BLOCKERS +/* + It should be noted that the Generic Script for On Dialogue attempts to get a local set on the shouter by itself. + This object represents the LastOpenedBy object. It is this object that becomes the oIntruder within this function. +*/ + +//NOTE ABOUT INTRUDERS +/* + The intruder object is for cases where a placable needs to pass a LastOpenedBy Object or a AttackMyAttacker + needs to make his attacker the enemy of everyone. +*/ + +void RespondToShout(object oShouter, int nShoutIndex, object oIntruder = OBJECT_INVALID) +{ + + // Pausanias: Do not respond to shouts if you've surrendered. + int iSurrendered = GetLocalInt(OBJECT_SELF,"Generic_Surrender"); + if (iSurrendered) return; + + switch (nShoutIndex) + { + case 1://NW_GENERIC_SHOUT_I_WAS_ATTACKED: + { + object oTarget = oIntruder; + if(!GetIsObjectValid(oTarget)) + { + oTarget = GetLastHostileActor(oShouter); + } + if(!GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) + { + if(!GetLevelByClass(CLASS_TYPE_COMMONER)) + { + if(!GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget())) + { + if(GetIsObjectValid(oTarget)) + { + if(!GetIsFriend(oTarget) && GetIsFriend(oShouter)) + { + RemoveAmbientSleep(); + //DetermineCombatRound(oTarget); + DetermineCombatRound(GetLastHostileActor(oShouter)); + } + } + } + } + else if (GetLevelByClass(CLASS_TYPE_COMMONER, oShouter) >= 10) + { + WrapperActionAttack(GetLastHostileActor(oShouter)); + } + else + { + DetermineCombatRound(oIntruder); + } + } + else + { + DetermineSpecialBehavior(); + } + } + break; + + case 2://NW_GENERIC_SHOUT_MOB_ATTACK: + { + if(!GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) + { + + //Is friendly check to make sure that only like minded commoners attack. + if(GetIsFriend(oShouter)) + { + WrapperActionAttack(GetLastHostileActor(oShouter)); + } + //if(TalentMeleeAttack()) {return;} + } + else + { + DetermineSpecialBehavior(); + } + } + break; + + case 3://NW_GENERIC_SHOUT_I_AM_DEAD: + { + if(!GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) + { + //Use I was attacked script above + if(!GetLevelByClass(CLASS_TYPE_COMMONER)) + { + if(!GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget())) + { + if(GetIsObjectValid(GetLastHostileActor(oShouter))) + { + if(!GetIsFriend(GetLastHostileActor(oShouter)) && GetIsFriend(oShouter)) + { + DetermineCombatRound(GetLastHostileActor(oShouter)); + } + } + } + } + else if (GetLevelByClass(CLASS_TYPE_COMMONER, oShouter) >= 10) + { + WrapperActionAttack(GetLastHostileActor(oShouter)); + } + else + { + DetermineCombatRound(); + } + + } + else + { + DetermineSpecialBehavior(); + } + } + break; + //For this shout to work the object must shout the following + //string sHelp = "NW_BLOCKER_BLK_" + GetTag(OBJECT_SELF); + case 4: //BLOCKER OBJECT HAS BEEN DISTURBED + { + if(!GetLevelByClass(CLASS_TYPE_COMMONER)) + { + if(!GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget())) + { + if(GetIsObjectValid(oIntruder)) + { + SetIsTemporaryEnemy(oIntruder); + DetermineCombatRound(oIntruder); + } + } + } + else if (GetLevelByClass(CLASS_TYPE_COMMONER, oShouter) >= 10) + { + WrapperActionAttack(oIntruder); + } + else + { + DetermineCombatRound(); + } + } + break; + + case 5: //ATTACK MY TARGET + { + AdjustReputation(oIntruder, OBJECT_SELF, -100); + if(GetIsFriend(oShouter)) + { + SetIsTemporaryEnemy(oIntruder); + ClearActions(CLEAR_NW_I0_GENERIC_834); + DetermineCombatRound(oIntruder); + } + } + break; + + case 6: //CALL_TO_ARMS + { + //This was once commented out. + DetermineCombatRound(); + } + break; + + //ASSOCIATE SHOUT RESPONSES ****************************************************************************** + + /* This was moved into X0_I0_HENCHMAN as bkRespondToHenchmenShout + case ASSOCIATE_COMMAND_ATTACKNEAREST: //Used to de-activate AGGRESSIVE DEFEND MODE + { + ResetHenchmenState(); + SetAssociateState(NW_ASC_MODE_DEFEND_MASTER, FALSE); + SetAssociateState(NW_ASC_MODE_STAND_GROUND, FALSE); + DetermineCombatRound(); + } + break; + + case ASSOCIATE_COMMAND_FOLLOWMASTER: //Only used to retreat, or break free from Stand Ground Mode + { + ResetHenchmenState(); + SetAssociateState(NW_ASC_MODE_STAND_GROUND, FALSE); + DelayCommand(2.5, VoiceCanDo()); + + if(GetAssociateState(NW_ASC_AGGRESSIVE_STEALTH)) + { + //ActionUseSkill(SKILL_HIDE, OBJECT_SELF); + } + if(GetAssociateState(NW_ASC_AGGRESSIVE_SEARCH)) + { + ActionUseSkill(SKILL_SEARCH, OBJECT_SELF); + } + ActionForceFollowObject(GetMaster(), GetFollowDistance()); + SetAssociateState(NW_ASC_IS_BUSY); + DelayCommand(5.0, SetAssociateState(NW_ASC_IS_BUSY, FALSE)); + } + break; + + case ASSOCIATE_COMMAND_GUARDMASTER: //Used to activate AGGRESSIVE DEFEND MODE + { + ResetHenchmenState(); + DelayCommand(2.5, VoiceCanDo()); + //Companions will only attack the Masters Last Attacker + SetAssociateState(NW_ASC_MODE_DEFEND_MASTER); + SetAssociateState(NW_ASC_MODE_STAND_GROUND, FALSE); + if(GetIsObjectValid(GetLastHostileActor(GetMaster()))) + { + DetermineCombatRound(GetLastHostileActor(GetMaster())); + } + } + break; + + case ASSOCIATE_COMMAND_HEALMASTER: //Ignore current healing settings and heal me now + { + ResetHenchmenState(); + //SetCommandable(TRUE); + if(TalentCureCondition()) {DelayCommand(2.0, VoiceCanDo()); return;} + if(TalentHeal(TRUE)) {DelayCommand(2.0, VoiceCanDo()); return;} + DelayCommand(2.5, VoiceCannotDo()); + } + break; + + case ASSOCIATE_COMMAND_MASTERFAILEDLOCKPICK: //Check local for Re-try locked doors and + { + if(!GetAssociateState(NW_ASC_MODE_STAND_GROUND)) + { + if(GetAssociateState(NW_ASC_RETRY_OPEN_LOCKS)) + { + int bValid = TRUE; + object oLastObject = GetLockedObject(GetMaster()); + int nSkill = GetSkillRank(SKILL_OPEN_LOCK) - GetAbilityModifier(ABILITY_DEXTERITY); + + if(GetIsObjectValid(oLastObject) && GetPlotFlag(oLastObject) == FALSE) + { + if(GetIsDoorActionPossible(oLastObject, DOOR_ACTION_KNOCK) || GetIsPlaceableObjectActionPossible(oLastObject, PLACEABLE_ACTION_KNOCK)) + { + ClarAllActions(); + VoiceCanDo(); + ActionCastSpellAtObject(SPELL_KNOCK, oLastObject); + ActionWait(1.0); + bValid = FALSE; + } + else if (GetIsDoorActionPossible(oLastObject, DOOR_ACTION_UNLOCK)|| GetIsPlaceableObjectActionPossible(oLastObject, PLACEABLE_ACTION_UNLOCK)) + { + ClarAllActions(); + VoicePicklock(); + ActionWait(1.0); + ActionUseSkill(SKILL_OPEN_LOCK,oLastObject); + bValid = FALSE; + } + else if(nSkill < 5 && GetAbilityScore(OBJECT_SELF, ABILITY_STRENGTH) >= 16 && GetSkillRank(SKILL_OPEN_LOCK) <= 0) + { + if(GetIsDoorActionPossible(oLastObject, DOOR_ACTION_BASH) || GetIsPlaceableObjectActionPossible(oLastObject, PLACEABLE_ACTION_BASH)) + { + ClarAllActions(); + VoiceCanDo(); + ActionEquipMostDamagingMelee(oLastObject); + WrapperActionAttack(oLastObject); + SetLocalObject(OBJECT_SELF, "NW_GENERIC_DOOR_TO_BASH", oLastObject); + bValid = FALSE; + } + } + if(bValid == TRUE) + { + //ClarAllActions(); + VoiceCannotDo(); + } + else + { + ActionDoCommand(VoiceTaskComplete()); + } + } + } + } + } + break; + + case ASSOCIATE_COMMAND_MASTERUNDERATTACK: //Check whether the master has you in AGGRESSIVE DEFEND MODE + { + if(!GetAssociateState(NW_ASC_MODE_STAND_GROUND)) + { + //Check the henchmens current target + object oTarget = GetAttemptedAttackTarget(); + if(!GetIsObjectValid(oTarget)) + { + oTarget = GetAttemptedSpellTarget(); + if(!GetIsObjectValid(oTarget)) + { + if(GetAssociateState(NW_ASC_MODE_DEFEND_MASTER)) + { + DetermineCombatRound(GetLastHostileActor(GetMaster())); + } + else + { + DetermineCombatRound(); + } + } + } + //Switch targets only if the target is not attacking the master and is greater than 6.0 from + //the master. + if(GetAttackTarget(oTarget) != GetMaster() && GetDistanceBetween(oTarget, GetMaster()) > 6.0) + { + if(GetAssociateState(NW_ASC_MODE_DEFEND_MASTER) && GetIsObjectValid(GetLastHostileActor(GetMaster()))) + { + DetermineCombatRound(GetLastHostileActor(GetMaster())); + } + } + } + } + break; + + case ASSOCIATE_COMMAND_STANDGROUND: //No longer follow the master or guard him + { + SetAssociateState(NW_ASC_MODE_STAND_GROUND); + SetAssociateState(NW_ASC_MODE_DEFEND_MASTER, FALSE); + DelayCommand(2.0, VoiceCanDo()); + WrapperActionAttack(OBJECT_INVALID); + ClarAllActions(); + } + break; + + case ASSOCIATE_COMMAND_MASTERSAWTRAP: + { + int nCheck = 0; + if(!GetIsInCombat()) + { + if(!GetAssociateState(NW_ASC_MODE_STAND_GROUND)) + { + object oTrap = GetLastTrapDetected(); + if(GetIsObjectValid(oTrap)) + { + int nTrapDC = GetTrapDisarmDC(oTrap); + int nSkill = GetSkillRank(SKILL_DISABLE_TRAP); + int nMod = GetAbilityModifier(ABILITY_DEXTERITY); + if((nSkill - nMod) > 0) + { + nSkill = nSkill + 20 - nTrapDC; + } + else + { + nSkill = 0; + nCheck = 1; + } + + if(GetCurrentAction(OBJECT_SELF) != ACTION_DISABLETRAP && nSkill > 0) + { + VoiceStop(); + if(GetHasSkill(SKILL_DISABLE_TRAP, OBJECT_SELF)) + { + ClarAllActions(); + ActionUseSkill(SKILL_DISABLE_TRAP, oTrap); + ActionDoCommand(SetCommandable(TRUE)); + ActionDoCommand(VoiceTaskComplete()); + SetCommandable(FALSE); + nCheck = 2; + } + } + else if(nCheck = 0 && + GetSkillRank(SKILL_DISABLE_TRAP) > 0 && + GetCurrentAction(OBJECT_SELF) != ACTION_DISABLETRAP) + { + VoiceCannotDo(); + } + } + } + } + } + break; + + case ASSOCIATE_COMMAND_MASTERATTACKEDOTHER: + { + if(!GetAssociateState(NW_ASC_MODE_STAND_GROUND)) + { + if(!GetAssociateState(NW_ASC_MODE_DEFEND_MASTER)) + { + if(!GetIsFighting(OBJECT_SELF)) + { + object oAttack = GetAttackTarget(GetMaster()); + if(GetIsObjectValid(oAttack) && GetObjectSeen(oAttack)) + { + ClarAllActions(); + DetermineCombatRound(oAttack); + } + } + } + } + } + break; + + case ASSOCIATE_COMMAND_MASTERGOINGTOBEATTACKED: + { + if(!GetAssociateState(NW_ASC_MODE_STAND_GROUND)) + { + if(!GetIsFighting(OBJECT_SELF)) + { + object oAttacker = GetGoingToBeAttackedBy(GetMaster()); + if(GetIsObjectValid(oAttacker) && GetObjectSeen(oAttacker)) + { + ClarAllActions(); + DetermineCombatRound(oAttacker); + } + } + } + } + break; + + case ASSOCIATE_COMMAND_LEAVEPARTY: + { + object oMaster = GetMaster(); + if(GetIsObjectValid(oMaster)) + { + ClarAllActions(); + if(GetAssociate(ASSOCIATE_TYPE_HENCHMAN, GetMaster()) == OBJECT_SELF) + { + AddJournalQuestEntry("Henchman",50,GetMaster(),FALSE,FALSE,TRUE); + } + SetLocalObject(OBJECT_SELF,"NW_L_FORMERMASTER", oMaster); + RemoveHenchman(oMaster, OBJECT_SELF); + } + + } + break; */ + } +} + +//:://///////////////////////////////////////////// +//:: Set and Get NPC Warning Status +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This function sets a local int on OBJECT_SELF + which will be checked in the On Attack, On + Damaged and On Disturbed scripts to check if + the offending party was a PC and was friendly. + The Get will return the status of the local. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Oct 29, 2001 +//::////////////////////////////////////////////// + +// NPCs who have warning status set to TRUE will allow +// one 'free' attack by PCs from a non-hostile faction. +void SetNPCWarningStatus(int nStatus = TRUE) +{ + SetLocalInt(OBJECT_SELF, "NW_GENERIC_WARNING_STATUS", nStatus); +} + +// NPCs who have warning status set to TRUE will allow +// one 'free' attack by PCs from a non-hostile faction. +int GetNPCWarningStatus() +{ + return GetLocalInt(OBJECT_SELF, "NW_GENERIC_WARNING_STATUS"); +} + +//:://///////////////////////////////////////////// +//:: Set SummonHelpIfAttacked +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This function works in tandem with an encounter + to spawn in guards to fight for the attacked + NPC. MAKE SURE THE ENCOUNTER TAG IS SET TO: + + "ENC_" + NPC TAG +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Oct 29, 2001 +//::////////////////////////////////////////////// + +//Presently Does not work with the current implementation of encounter trigger +void SetSummonHelpIfAttacked() +{ + string sEncounter = "ENC_" + GetTag(OBJECT_SELF); + object oTrigger = GetObjectByTag(sEncounter); + + if(GetIsObjectValid(oTrigger)) + { + SetEncounterActive(TRUE, oTrigger); + } +} + +//************************************************************************************************************************************ +//************************************************************************************************************************************ +// +// ESCAPE FUNCTIONS +// +//************************************************************************************************************************************ +//************************************************************************************************************************************ + +//:://///////////////////////////////////////////// +//:: Set, Get Activate,Flee to Exit +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + The target object flees to the specified + way point and then destroys itself, to be + respawned at a later point. For unkillable + sign post characters who are not meant to fight + back. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Oct 29, 2001 +//::////////////////////////////////////////////// + +//This function is used only because ActionDoCommand can only accept void functions +void CreateSignPostNPC(string sTag, location lLocal) +{ + CreateObject(OBJECT_TYPE_CREATURE, sTag, lLocal); +} + +void ActivateFleeToExit() +{ + //minor optimizations - only grab these variables when actually needed + //can make for larger code, but it's faster + //object oExitWay = GetWaypointByTag("EXIT_" + GetTag(OBJECT_SELF)); + //location lLocal = GetLocalLocation(OBJECT_SELF, "NW_GENERIC_START_POINT"); + //string sTag = GetTag(OBJECT_SELF); + + //I suppose having this as a variable made it easier to change at one point.... + //but it never changes, and is only used twice, so we don't need it + //float fDelay = 6.0; + + int nPlot = GetLocalInt(OBJECT_SELF, "NW_GENERIC_MASTER"); + + if(nPlot & NW_FLAG_TELEPORT_RETURN || nPlot & NW_FLAG_TELEPORT_LEAVE) + { + effect eVis = EffectVisualEffect(VFX_IMP_UNSUMMON); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); + if(nPlot & NW_FLAG_TELEPORT_RETURN) + { + location lLocal = GetLocalLocation(OBJECT_SELF, "NW_GENERIC_START_POINT"); + string sTag = GetTag(OBJECT_SELF); + DelayCommand(6.0, ActionDoCommand(CreateSignPostNPC(sTag, lLocal))); + } + ActionDoCommand(DestroyObject(OBJECT_SELF, 0.75)); + } + else + { + if(nPlot & NW_FLAG_ESCAPE_LEAVE) + { + object oExitWay = GetWaypointByTag("EXIT_" + GetTag(OBJECT_SELF)); + ActionMoveToObject(oExitWay, TRUE); + ActionDoCommand(DestroyObject(OBJECT_SELF, 1.0)); + } + else if(nPlot & NW_FLAG_ESCAPE_RETURN) + { + string sTag = GetTag(OBJECT_SELF); + object oExitWay = GetWaypointByTag("EXIT_" + sTag); + ActionMoveToObject(oExitWay, TRUE); + location lLocal = GetLocalLocation(OBJECT_SELF, "NW_GENERIC_START_POINT"); + DelayCommand(6.0, ActionDoCommand(CreateSignPostNPC(sTag, lLocal))); + ActionDoCommand(DestroyObject(OBJECT_SELF, 1.0)); + } + } +} + +int GetFleeToExit() +{ + int nPlot = GetLocalInt(OBJECT_SELF, "NW_GENERIC_MASTER"); + if(nPlot & NW_FLAG_ESCAPE_RETURN) + { + return TRUE; + } + else if(nPlot & NW_FLAG_ESCAPE_LEAVE) + { + return TRUE; + } + else if(nPlot & NW_FLAG_TELEPORT_RETURN) + { + return TRUE; + } + else if(nPlot & NW_FLAG_TELEPORT_LEAVE) + { + return TRUE; + } + return FALSE; +} + + + +//********************************** +//********************************** +//********************************** +// PRIVATE FUNCTIONS +//********************************** +//********************************** +//********************************** + +//This is experimental and has not been looked at closely. +void ExitAOESpellArea(object oAOEObject) +{ + ClearActions(CLEAR_NW_I0_GENERIC_ExitAOESpellArea); + ActionMoveAwayFromObject(oAOEObject, TRUE, 5.0); + AssignCommand(OBJECT_SELF, DetermineCombatRound()); +} + + +//:://///////////////////////////////////////////// +//:: Get Character Levels +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Returns the combined class levels of the + target. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Oct 22, 2001 +//::////////////////////////////////////////////// + +int GetCharacterLevel(object oTarget) +{ + return GetHitDice(oTarget); +} + + + + +//:://///////////////////////////////////////////// +//:: Remove Ambient Sleep +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Checks if the NPC has sleep on them because + of ambient animations. Sleeping creatures + must make a DC 15 listen check. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Feb 27, 2002 +//::////////////////////////////////////////////// + +void RemoveAmbientSleep() +{ + if(GetHasEffect(EFFECT_TYPE_SLEEP)) + { + effect eSleep = GetFirstEffect(OBJECT_SELF); + while(GetIsEffectValid(eSleep)) + { + if(GetEffectCreator(eSleep) == OBJECT_SELF) + { + int nRoll = d20(); + nRoll += GetSkillRank(SKILL_LISTEN); + nRoll += GetAbilityModifier(ABILITY_WISDOM); + if(nRoll > 15) + { + RemoveEffect(OBJECT_SELF, eSleep); + } + } + eSleep = GetNextEffect(OBJECT_SELF); + } + } +} + + +//:://///////////////////////////////////////////// +//:: Get Locked Object +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Finds the closest locked object to the object + passed in up to a maximum of 10 objects. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: March 15, 2002 +//::////////////////////////////////////////////// + +object GetLockedObject(object oMaster) +{ + int nCnt = 1; + int bValid = TRUE; + object oLastObject = GetNearestObjectToLocation(OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, GetLocation(oMaster), nCnt); + while (GetIsObjectValid(oLastObject) && bValid == TRUE) + { + //COMMENT THIS BACK IN WHEN DOOR ACTION WORKS ON PLACABLE. + + //object oItem = GetFirstItemInInventory(oLastObject); + if(GetLocked(oLastObject)) + { + return oLastObject; + } + nCnt++; + if(nCnt == 10) + { + bValid = FALSE; + } + oLastObject = GetNearestObjectToLocation(OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, GetLocation(oMaster), nCnt); + } + return OBJECT_INVALID; +} + + + + + +//:://///////////////////////////////////////////// +//:: Check if an item is locked +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Checks that an item was unlocked. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Nov 19, 2001 +//::////////////////////////////////////////////// + +void CheckIsUnlocked(object oLastObject) +{ + if(GetLocked(oLastObject)) + { + ActionDoCommand(VoiceCuss()); + } + else + { + ActionDoCommand(VoiceCanDo()); + } +} + + +//:://///////////////////////////////////////////// +//:: Play Mobile Ambient Animations +//:: This function is now just a wrapper around +//:: code from x0_i0_anims. +//::////////////////////////////////////////////// +void PlayMobileAmbientAnimations() +{ + if(!GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN)) { + // not a bird + PlayMobileAmbientAnimations_NonAvian(); + } else { + // a bird + PlayMobileAmbientAnimations_Avian(); + } +} + +//:://///////////////////////////////////////////// +//:: Determine Special Behavior +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Determines the special behavior used by the NPC. + Generally all NPCs who you want to behave differently + than the defualt behavior. + For these behaviors, passing in a valid object will + cause the creature to become hostile the the attacker. + + MODIFIED February 7 2003: + - Rearranged logic order a little so that the creatures + will actually randomwalk when not fighting +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Dec 14, 2001 +//::////////////////////////////////////////////// + +void DetermineSpecialBehavior(object oIntruder = OBJECT_INVALID) +{ + object oTarget = GetNearestSeenEnemy(); + if(GetBehaviorState(NW_FLAG_BEHAVIOR_OMNIVORE)) + { + int bAttack = FALSE; + if(!GetIsObjectValid(oIntruder)) + { + if(!GetIsObjectValid(GetAttemptedAttackTarget()) && + !GetIsObjectValid(GetAttemptedSpellTarget()) && + !GetIsObjectValid(GetAttackTarget())) + { + if(GetIsObjectValid(oTarget) && GetDistanceToObject(oTarget) <= 8.0) + { + if(!GetIsFriend(oTarget)) + { + if(GetLevelByClass(CLASS_TYPE_DRUID, oTarget) == 0 && GetLevelByClass(CLASS_TYPE_RANGER, oTarget) == 0) + { + SetIsTemporaryEnemy(oTarget, OBJECT_SELF, FALSE, 20.0); + bAttack = TRUE; + DetermineCombatRound(oTarget); + } + } + } + } + } + else if(!IsInConversation(OBJECT_SELF)) + { + bAttack = TRUE; + DetermineCombatRound(oIntruder); + } + + // * if not attacking, the wander + if (bAttack == FALSE) + { + ClearActions(CLEAR_NW_I0_GENERIC_DetermineSpecialBehavior1); + ActionRandomWalk(); + return; + } + } + else if(GetBehaviorState(NW_FLAG_BEHAVIOR_HERBIVORE)) + { + if(!GetIsObjectValid(GetAttemptedAttackTarget()) && + !GetIsObjectValid(GetAttemptedSpellTarget()) && + !GetIsObjectValid(GetAttackTarget())) + { + if(GetIsObjectValid(oTarget) && GetDistanceToObject(oTarget) <= 6.0) + { + if(!GetIsFriend(oTarget)) + { + if(GetLevelByClass(CLASS_TYPE_DRUID, oTarget) == 0 && GetLevelByClass(CLASS_TYPE_RANGER, oTarget) == 0) + { + TalentFlee(oTarget); + } + } + } + } + else if(!IsInConversation(OBJECT_SELF)) + { + ClearActions(CLEAR_NW_I0_GENERIC_DetermineSpecialBehavior2); + ActionRandomWalk(); + return; + } + } +} + +//:://///////////////////////////////////////////// +//:: Bash Doors +//:: Copyright (c) 2002 Bioware Corp. +//::////////////////////////////////////////////// +/* + Used in DetermineCombatRound to keep a + henchmen bashing doors. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: April 4, 2002 +//::////////////////////////////////////////////// + +int BashDoorCheck(object oIntruder = OBJECT_INVALID) +{ + int bDoor = FALSE; + //This code is here to make sure that henchmen keep bashing doors and placables. + object oDoor = GetLocalObject(OBJECT_SELF, "NW_GENERIC_DOOR_TO_BASH"); + + // * MODIFICATION February 7 2003 BK + // * don't bash trapped doors. + if (GetIsTrapped(oDoor) ) return FALSE; + + if(GetIsObjectValid(oDoor)) + { + int nDoorMax = GetMaxHitPoints(oDoor); + int nDoorNow = GetCurrentHitPoints(oDoor); + int nCnt = GetLocalInt(OBJECT_SELF,"NW_GENERIC_DOOR_TO_BASH_HP"); + if(!GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN)) + || (!GetIsObjectValid(oIntruder) && !GetIsObjectValid(GetMaster()))) + { + if(GetLocked(oDoor)) + { + if(nDoorMax == nDoorNow) + { + nCnt++; + SetLocalInt(OBJECT_SELF,"NW_GENERIC_DOOR_TO_BASH_HP", nCnt); + } + if(nCnt <= 0) + { + bDoor = TRUE; + if(GetHasFeat(FEAT_IMPROVED_POWER_ATTACK)) + { + ActionUseFeat(FEAT_IMPROVED_POWER_ATTACK, oDoor); + } + else if(GetHasFeat(FEAT_POWER_ATTACK)) + { + ActionUseFeat(FEAT_POWER_ATTACK, oDoor); + } + else + { + WrapperActionAttack(oDoor); + } + } + } + } + if(bDoor == FALSE) + { + VoiceCuss(); + DeleteLocalObject(OBJECT_SELF, "NW_GENERIC_DOOR_TO_BASH"); + DeleteLocalInt(OBJECT_SELF, "NW_GENERIC_DOOR_TO_BASH_HP"); + } + } + return bDoor; +} + +//:://///////////////////////////////////////////// +//:: Determine Class to Use +//:: Copyright (c) 2002 Bioware Corp. +//::////////////////////////////////////////////// +/* + Determines which of a NPCs three classes to + use in DetermineCombatRound +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: April 4, 2002 +//::////////////////////////////////////////////// + +int DetermineClassToUse() +{ + int nClass; + int nTotal = GetHitDice(OBJECT_SELF); + + //this is silly... +/* + float fTotal = IntToFloat(nTotal); + int nState1 = FloatToInt((IntToFloat(GetLevelByClass(GetClassByPosition(1))) / fTotal) * 100); + // MyPrintString(GetTag(OBJECT_SELF) + "Class: " + IntToString(GetClassByPosition(1)) + " %" + IntToString(nState1)); + + int nState2 = FloatToInt((IntToFloat(GetLevelByClass(GetClassByPosition(2))) / fTotal) * 100) + nState1; + // MyPrintString(GetTag(OBJECT_SELF) + "Class: " + IntToString(GetClassByPosition(2)) + " %" + IntToString(nState2)); + + int nState3 = FloatToInt((IntToFloat(GetLevelByClass(GetClassByPosition(3))) / fTotal) * 100) + nState2; + // MyPrintString(GetTag(OBJECT_SELF) + "Class: " + IntToString(GetClassByPosition(3)) + " %" + IntToString(nState3)); +*/ + int nClass1 = GetClassByPosition(1); + int nClass2 = GetClassByPosition(2); + + int nState1 = GetLevelByClass(nClass1) * 100 / nTotal; + int nState2 = GetLevelByClass(nClass2) * 100 / nTotal; +// int nState3 = GetLevelByClass(GetClassByPosition(3)) * 100 / nTotal; + + int nUseClass = d100(); + // MyPrintString("D100 Roll " + IntToString(nUseClass)); + + if(nUseClass <= nState1) + { + nClass = nClass1; + } + else if(nUseClass > nState1 && nUseClass <= nState2) + { + nClass = nClass2; + } + else + { + nClass = GetClassByPosition(3); + } + // MyPrintString(GetName(OBJECT_SELF) + " Return Class = " + IntToString(nClass)); + + return nClass; +} + + + +/* DO NOT CLOSE THIS TOP COMMENT! + This main() function is here only for compilation testing. +void main() {} +/* */ diff --git a/src/_removed/nw_s0_raisdead.nss b/src/_removed/nw_s0_raisdead.nss new file mode 100644 index 0000000..164641c --- /dev/null +++ b/src/_removed/nw_s0_raisdead.nss @@ -0,0 +1,54 @@ +//:://///////////////////////////////////////////// +//:: [Raise Dead] +//:: [NW_S0_RaisDead.nss] +//:: Copyright (c) 2000 Bioware Corp. +//::////////////////////////////////////////////// +//:: Brings a character back to life with 1 HP. +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 31, 2001 +//::////////////////////////////////////////////// +//:: Last Updated By: Preston Watamaniuk, On: April 11, 2001 +//:: VFX Pass By: Preston W, On: June 22, 2001 + +#include "x2_inc_spellhook" + +void main() +{ + +/* + Spellcast Hook Code + Added 2003-06-20 by Georg + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + + + //Declare major variables + object oTarget = GetSpellTargetObject(); + effect eRaise = EffectResurrection(); + effect eVis = EffectVisualEffect(VFX_IMP_RAISE_DEAD); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_RAISE_DEAD, FALSE)); + if(GetIsDead(oTarget)) + { + //Apply raise dead effect and VFX impact + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTarget)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eRaise, oTarget); + object oToken = GetItemPossessedBy(oTarget,"DeathToken"); + SetItemCursedFlag(oToken,FALSE); + DestroyObject(oToken); + return; + } +} + diff --git a/src/_removed/nw_s0_resserec.nss b/src/_removed/nw_s0_resserec.nss new file mode 100644 index 0000000..29d1bc1 --- /dev/null +++ b/src/_removed/nw_s0_resserec.nss @@ -0,0 +1,82 @@ +//:://///////////////////////////////////////////// +//:: [Ressurection] +//:: [NW_S0_Ressurec.nss] +//:: Copyright (c) 2000 Bioware Corp. +//::////////////////////////////////////////////// +//:: Brings a character back to life with full +//:: health. +//:: When cast on placeables, you get a default error message. +//:: * You can specify a different message in +//:: X2_L_RESURRECT_SPELL_MSG_RESREF +//:: * You can turn off the message by setting the variable +//:: to -1 +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 31, 2001 +//::////////////////////////////////////////////// +//:: Last Updated By: Georg Z on 2003-07-31 +//:: VFX Pass By: Preston W, On: June 22, 2001 + +#include "x2_inc_spellhook" + +void main() +{ + +/* + Spellcast Hook Code + Added 2003-06-20 by Georg + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + + + //Get the spell target + object oTarget = GetSpellTargetObject(); + //Check to make sure the target is dead first + //Fire cast spell at event for the specified target + if (GetIsObjectValid(oTarget)) + { + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_RESURRECTION, FALSE)); + if (GetIsDead(oTarget)) + { + //Declare major variables + int nHealed = GetMaxHitPoints(oTarget); + effect eRaise = EffectResurrection(); + effect eHeal = EffectHeal(nHealed + 10); + effect eVis = EffectVisualEffect(VFX_IMP_RAISE_DEAD); + //Apply the heal, raise dead and VFX impact effect + ApplyEffectToObject(DURATION_TYPE_INSTANT, eRaise, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTarget)); + object oToken = GetItemPossessedBy(oTarget,"DeathToken"); + SetItemCursedFlag(oToken,FALSE); + DestroyObject(oToken); + return; + } + else + { + if (GetObjectType(oTarget) == OBJECT_TYPE_PLACEABLE) + { + int nStrRef = GetLocalInt(oTarget,"X2_L_RESURRECT_SPELL_MSG_RESREF"); + if (nStrRef == 0) + { + nStrRef = 83861; + } + if (nStrRef != -1) + { + FloatingTextStrRefOnCreature(nStrRef,OBJECT_SELF); + } + } + } + } +} + diff --git a/src/_removed/nw_s0_summon.nss b/src/_removed/nw_s0_summon.nss new file mode 100644 index 0000000..d5ec727 --- /dev/null +++ b/src/_removed/nw_s0_summon.nss @@ -0,0 +1,259 @@ +//:://///////////////////////////////////////////// +//:: Summon Creature Series +//:: NW_S0_Summon +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Carries out the summoning of the appropriate + creature for the Summon Monster Series of spells + 1 to 9 +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 8, 2002 +//::////////////////////////////////////////////// + +effect SetSummonEffect(int nSpellID); + +#include "x2_inc_spellhook" + +void main() +{ + +/* + Spellcast Hook Code + Added 2003-06-23 by GeorgZ + If you want to make changes to all spells, + check x2_inc_spellhook.nss to find out more + +*/ + + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + +// End of Spell Cast Hook + + + //Declare major variables + int nSpellID = GetSpellId(); + int nDuration = GetCasterLevel(OBJECT_SELF); + //nDuration = 24; + if(nDuration == 1) + { + nDuration = 2; + } + effect eSummon = SetSummonEffect(nSpellID); + + //Make metamagic check for extend + int nMetaMagic = GetMetaMagicFeat(); + if (nMetaMagic == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + //Apply the VFX impact and summon effect + + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetSpellTargetLocation(), TurnsToSeconds(nDuration)); +} + + +effect SetSummonEffect(int nSpellID) +{ + int nFNF_Effect; + int nRoll = d3(); + string sSummon; + if(GetHasFeat(FEAT_ANIMAL_DOMAIN_POWER)) //WITH THE ANIMAL DOMAIN + { + if(nSpellID == SPELL_SUMMON_CREATURE_I) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; + sSummon = "NW_S_BOARDIRE"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_II) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; + sSummon = "NW_S_WOLFDIRE"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_III) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; + sSummon = "NW_S_SPIDDIRE"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_IV) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2; + sSummon = "NW_S_beardire"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_V) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2; + sSummon = "NW_S_diretiger"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_VI) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRHUGE"; + break; + + case 2: + sSummon = "NW_S_WATERHUGE"; + break; + + case 3: + sSummon = "NW_S_FIREHUGE"; + break; + } + } + else if(nSpellID == SPELL_SUMMON_CREATURE_VII) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRGREAT"; + break; + + case 2: + sSummon = "NW_S_WATERGREAT"; + break; + + case 3: + sSummon = "NW_S_FIREGREAT"; + break; + } + } + else if(nSpellID == SPELL_SUMMON_CREATURE_VIII) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRELDER"; + break; + + case 2: + sSummon = "NW_S_WATERELDER"; + break; + + case 3: + sSummon = "NW_S_FIREELDER"; + break; + } + } + else if(nSpellID == SPELL_SUMMON_CREATURE_IX) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRELDER"; + break; + + case 2: + sSummon = "NW_S_WATERELDER"; + break; + + case 3: + sSummon = "NW_S_FIREELDER"; + break; + } + } + } + else //WITOUT THE ANIMAL DOMAIN + { + if(nSpellID == SPELL_SUMMON_CREATURE_I) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; + sSummon = "NW_S_badgerdire"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_II) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; + sSummon = "NW_S_BOARDIRE"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_III) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1; + sSummon = "NW_S_WOLFDIRE"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_IV) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2; + sSummon = "NW_S_SPIDDIRE"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_V) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2; + sSummon = "NW_S_beardire"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_VI) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2; + sSummon = "NW_S_diretiger"; + } + else if(nSpellID == SPELL_SUMMON_CREATURE_VII) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRHUGE"; + break; + + case 2: + sSummon = "NW_S_WATERHUGE"; + break; + + case 3: + sSummon = "NW_S_FIREHUGE"; + break; + } + } + else if(nSpellID == SPELL_SUMMON_CREATURE_VIII) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRGREAT"; + break; + + case 2: + sSummon = "NW_S_WATERGREAT"; + break; + + case 3: + sSummon = "NW_S_FIREGREAT"; + break; + } + } + else if(nSpellID == SPELL_SUMMON_CREATURE_IX) + { + nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3; + switch (nRoll) + { + case 1: + sSummon = "NW_S_AIRELDER"; + break; + + case 2: + sSummon = "NW_S_WATERELDER"; + break; + + case 3: + sSummon = "NW_S_FIREELDER"; + break; + } + } + } + //effect eVis = EffectVisualEffect(nFNF_Effect); + //ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation()); + effect eSummonedMonster = EffectSummonCreature(sSummon, nFNF_Effect); + return eSummonedMonster; +} + diff --git a/src/_removed/nw_s2_familiar.nss b/src/_removed/nw_s2_familiar.nss new file mode 100644 index 0000000..aec8ec6 --- /dev/null +++ b/src/_removed/nw_s2_familiar.nss @@ -0,0 +1,22 @@ +#include "inc_misc_tools" +//:://///////////////////////////////////////////// +//:: Summon Familiar +//:: NW_S2_Familiar +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This spell summons an Arcane casters familiar +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Sept 27, 2001 +//::////////////////////////////////////////////// + +void main() + { + object oPC = OBJECT_SELF; + if (GetHasGem(3,oPC)) + SummonFamiliar(); + else + FloatingTextStringOnCreature("This power requires a gem worth at least 100 gold",oPC,FALSE); + } diff --git a/src/_removed/nw_s3_balordeth.nss b/src/_removed/nw_s3_balordeth.nss new file mode 100644 index 0000000..6d4cbec --- /dev/null +++ b/src/_removed/nw_s3_balordeth.nss @@ -0,0 +1,85 @@ +//:://///////////////////////////////////////////// +//:: Balor On Death +//:: NW_S3_BALORDETH +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Fireball explosion does 50 damage to all within + 20ft +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 9, 2002 +//::////////////////////////////////////////////// +#include "x0_i0_spawncond" +#include "x0_i0_corpses" +#include "inc_misc_tools" +#include "NW_I0_SPELLS" +void main() +{ + //Declare major variables + object oCaster = OBJECT_SELF; + int nMetaMagic = GetMetaMagicFeat(); + int nDamage; + float fDelay; + effect eExplode = EffectVisualEffect(VFX_FNF_FIREBALL); + effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M); + effect eDam; + //Get the spell target location as opposed to the spell target. + location lTarget = GetLocation(OBJECT_SELF); + //Limit Caster level for the purposes of damage + //Apply the fireball explosion at the location captured above. + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget); + //Declare the spell shape, size and the location. Capture the first target object in the shape. + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR); + //Cycle through the targets within the spell shape until an invalid object is captured. + while (GetIsObjectValid(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_FIREBALL)); + //Get the distance between the explosion and the target to calculate delay + fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20; + if (!MyResistSpell(OBJECT_SELF, oTarget, fDelay)) + { + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = GetReflexAdjustedDamage(50, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_FIRE); + //Set the damage effect + eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE); + if(nDamage > 0) + { + // Apply effects to the currently selected target. + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget)); + //This visual effect is applied to the target object not the location as above. This visual effect + //represents the flame that erupts on the target not on the ground. + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + //Select the next target within the spell shape. + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR); + } + if (GetLocalInt(OBJECT_SELF,"MirrorOfOppositionCopy")) + { + SetIsDestroyable(TRUE,FALSE,FALSE); + DestroyObject(OBJECT_SELF); + return; + } + else if (GetIsObjectValid(GetLocalObject(OBJECT_SELF,"MirrorOfOpposition"))) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),GetLocalObject(OBJECT_SELF,"MirrorOfOpposition")); + } + object oKiller = GetLastKiller(); + int iBoss = GetLocalInt(OBJECT_SELF,"Boss"); + if (!GetLocalInt(OBJECT_SELF,"Dead")) + { + if (SLOW_XP && iBoss) + AwardXPs(oKiller); + else + AwardXPs(oKiller); + SetLocalInt(OBJECT_SELF,"Dead",TRUE); + if (iBoss) + KillAndReplaceLootable(OBJECT_SELF,FALSE); + else + KillAndReplaceDecorative(OBJECT_SELF); + } +} + diff --git a/src/hakpak/rdg_prc8_top/2da/itempropdef.2da b/src/hakpak/rdg_prc8_top/2da/itempropdef.2da new file mode 100644 index 0000000..afee892 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/2da/itempropdef.2da @@ -0,0 +1,203 @@ +2DA V2.0 + + Name Label SubTypeResRef Cost CostTableResRef Param1ResRef GameStrRef Description +0 649 Ability IPRP_ABILITIES 1.2 1 **** 5476 **** +1 652 Armor **** 0.9 2 **** 5477 **** +2 653 ArmorAlignmentGroup IPRP_ALIGNGRP 0.5 2 **** 5478 1077 +3 654 ArmorDamageType IPRP_COMBATDAM 0.5 2 **** 5478 **** +4 651 ArmorRacialGroup racialtypes 0.5 2 **** 5478 **** +5 655 ArmorSpecificAlignment IPRP_ALIGNMENT 0.3 2 **** 5478 **** +6 659 Enhancement **** 1 2 **** 5479 1080 +7 656 EnhancementAlignmentGroup IPRP_ALIGNGRP 0.6 2 **** 5480 1084 +8 657 EnhancementRacialGroup racialtypes 0.35 2 **** 5480 1081 +9 658 EnhancementSpecificAlignment IPRP_ALIGNMENT 0.35 2 **** 5480 1083 +10 660 AttackPenalty **** 0 20 **** 5481 1460 +11 661 WeightReduction **** 1 10 **** 5482 1442 +12 662 BonusFeats IPRP_FEATS **** 0 **** 5483 1445 +13 663 SingleBonusSpellOfLevel classes 0.5 13 **** 5484 1444 +14 667 Boomerang **** 1 0 **** **** 1425 +15 668 CastSpell IPRP_SPELLS **** 3 **** 5485 1078 +16 650 Damage IPRP_DAMAGETYPE 3.5 4 **** 5486 1089 +17 670 DamageAlignmentGroup IPRP_ALIGNGRP 1.5 4 0 5487 1092 +18 673 DamageRacialGroup racialtypes 0.75 4 0 5487 1090 +19 675 DamageSpecificAlignment IPRP_ALIGNMENT 0.75 4 0 5487 1091 +20 680 DamageImmunity IPRP_DAMAGETYPE 2.3 5 **** 5488 1093 +21 672 DamagePenalty **** 0 20 **** 5489 1459 +22 674 DamageReduced IPRP_PROTECTION **** 6 **** 5490 1418 +23 681 DamageResist IPRP_DAMAGETYPE **** 7 **** 5491 1417 +24 696 Damage_Vulnerability IPRP_DAMAGETYPE 0 22 **** 5492 1457 +25 748 Dancing_Scimitar **** 1 8 **** **** 1453 +26 1493 Darkvision **** 1 0 **** 5493 84355 +27 677 DecreaseAbilityScore IPRP_ABILITIES 0 21 **** 5494 1454 +28 678 DecreaseAC IPRP_ACMODTYPE 0 20 **** 5495 1456 +29 679 DecreasedSkill Skills 0 21 **** 5496 1455 +30 676 DoubleStack **** 1 0 **** 5497 1423 +31 **** EnhancedContainer_BonusSlot **** **** **** **** **** 1438 +32 728 EnhancedContainer_Weight **** 1 15 **** 5498 1439 +33 669 DamageMelee IPRP_COMBATDAM 0.5 0 **** 5499 1420 +34 671 DamageRanged IPRP_COMBATDAM 0.5 0 **** 5500 1421 +35 704 Haste **** 3.5 0 **** 5501 1426 +36 1023 HolyAvenger **** 1.5 0 **** 5502 1436 +37 1022 Immunity IPRP_IMMUNITY **** 0 **** 5503 1449 +38 710 ImprovedEvasion **** 3 0 **** 5504 1429 +39 666 ImprovedMagicResist **** 2 11 **** 5505 1422 +40 711 ImprovedSavingThrows IPRP_SAVEELEMENT **** 2 **** 5506 1440 +41 712 ImprovedSavingThrowsSpecific IPRP_SAVINGTHROW 0.65 2 **** 5506 1441 +42 **** bio_reserved **** **** **** **** **** **** +43 713 Keen **** 1 0 **** 5507 1079 +44 714 Light **** 1 18 9 5508 1431 +45 1500 Mighty **** 0 2 **** 5509 **** +46 721 MindBlank **** 3 0 **** 5510 1430 +47 722 DamageNone **** 0 0 **** 5511 1419 +48 723 OnHit IPRP_ONHIT **** 24 **** 5512 1450 +49 726 ReducedSavingThrows IPRP_SAVEELEMENT 0 20 **** 5513 1461 +50 727 ReducedSpecificSavingThrow IPRP_SAVINGTHROW 0 20 **** 5513 1462 +51 729 Regeneration **** 2 2 **** 5515 1446 +52 731 Skill skills 0.12 25 **** 5516 **** +53 733 SpellImmunity_Specific **** 0.4 16 **** 5514 1447 +54 730 SpellSchool_Immunity IPRP_SPELLSHL 6.1 0 **** 5517 1448 +55 1492 ThievesTools **** 0.25 25 **** 5518 **** +56 735 AttackBonus **** 0.5 2 **** 5519 1085 +57 734 AttackBonusAlignmentGroup IPRP_ALIGNGRP 0.4 2 **** 5520 1088 +58 737 AttackBonusRacialGroup racialtypes 0.15 2 **** 5520 1086 +59 738 AttackBonusSpecificAlignment IPRP_ALIGNMENT 0.15 2 **** 5520 1087 +60 736 ToHitPenalty **** 0 20 **** 5521 1458 +61 739 UnlimitedAmmo IPRP_AMMOTYPE 1 14 **** 5522 1452 +62 715 UseLimitationAlignmentGroup IPRP_ALIGNGRP 0 0 **** 5523 1435 +63 716 UseLimitationClass Classes 0 0 **** 5523 1434 +64 724 UseLimitationRacial racialtypes 0 0 **** 5523 1432 +65 717 UseLimitationSpecificAlignment IPRP_ALIGNMENT 0 0 **** 5523 1437 +66 718 UseLimitationTerrain IPRP_TERRAINTYPE 0 0 **** 5524 1433 +67 732 VampiricRegeneration **** 0.5 2 **** 5525 1451 +68 **** Vorpal **** 5 0 **** 5526 1427 +69 **** Wounding **** 2 0 **** 5527 1428 +70 1663 Trap IPRP_TRAPS **** 17 **** 5528 **** +71 1775 True_Seeing **** 6.1 0 **** 5529 **** +72 1776 OnMonsterHit IPRP_MONSTERHIT **** 0 **** 5530 **** +73 1777 Turn_Resistance **** 0.5 25 **** 5531 **** +74 1778 Massive_Criticals **** 0.75 4 **** 5532 **** +75 1779 Freedom_of_Movement **** 4 0 **** 5533 **** +76 879 Poison poison **** 0 10 5534 **** +77 5060 Monster_damage **** 1 19 **** 5535 **** +78 5604 Immunity_To_Spell_By_Level **** 1.2 23 **** 5635 **** +79 6637 Special_Walk IPRP_WALK 0 0 **** **** **** +80 8338 Healers_Kit **** 0.035 25 **** 8338 **** +81 58325 Weight_Increase **** 0 0 11 **** **** +82 83400 OnHitCastSpell IPRP_ONHITSPELL **** 26 **** 5512 1450 +83 83392 VisualEffect IPRP_VISUALFX **** **** **** 5512 1450 +84 84321 ArcaneSpellFailure **** 2 27 **** 84346 1450 +85 111772 Material **** **** 28 **** 111773 111774 +86 111853 Quality **** **** 29 **** 111854 111855 +87 111871 Additional_Property **** **** 30 **** 111872 111873 +88 16825170 UseLimitationAllSpell **** 0 23 **** 16825174 **** +89 16825171 UseLimitationArcaneSpell **** 0 23 **** 16825175 **** +90 16825172 UseLimitationDivineSpell **** 0 23 **** 16825176 **** +91 16825173 UseLimitationSneak **** 0 31 **** 16825177 **** +92 16824992 ItemMetamagic IPRP_SPELLS 0 32 **** 16824993 16824994 +93 16824960 ItemDC IPRP_SPELLS 0 31 **** 16824961 16824962 +94 16824963 ItemCasterLevel IPRP_SPELLS 0 31 **** 16824964 16824965 +95 16825167 UseLimitationAbility iprp_abilities 0 31 **** 16825169 **** +96 16825168 UseLimitationSkill skills 0 31 **** 16825169 **** +97 **** bio_reserved **** **** **** **** **** **** +98 **** bio_reserved **** **** **** **** **** **** +99 **** bio_reserved **** **** **** **** **** **** +100 16826695 AreaEffect iprp_aoe 1 31 **** 16826695 **** +101 16832064 PnPHolyAvenger **** 1.5 0 **** 16832064 16832065 +102 16834273 Wizardry **** 4 13 **** 16834273 16834274 +103 16834275 Divinity **** 4 13 **** 16834275 16834276 +104 16834308 Echoblade **** 1 0 **** 16834308 16834309 +105 **** bio_reserved **** **** **** **** **** **** +106 **** bio_reserved **** **** **** **** **** **** +107 **** bio_reserved **** **** **** **** **** **** +108 **** bio_reserved **** **** **** **** **** **** +109 **** bio_reserved **** **** **** **** **** **** +110 **** bio_reserved **** **** **** **** **** **** +111 **** bio_reserved **** **** **** **** **** **** +112 **** bio_reserved **** **** **** **** **** **** +113 **** bio_reserved **** **** **** **** **** **** +114 **** bio_reserved **** **** **** **** **** **** +115 **** bio_reserved **** **** **** **** **** **** +116 **** bio_reserved **** **** **** **** **** **** +117 **** bio_reserved **** **** **** **** **** **** +118 **** bio_reserved **** **** **** **** **** **** +119 **** bio_reserved **** **** **** **** **** **** +120 16826696 Decrease_Value_A **** -0.01 34 **** **** **** +121 16826697 Decrease_Value_B **** -0.1 33 **** **** **** +122 16826698 Decrease_Value_c **** -0.1 34 **** **** **** +123 16826699 Decrease_Value_d **** -1 33 **** **** **** +124 16826700 Decrease_Value_e **** -1 34 **** **** **** +125 16826701 Decrease_Value_f **** -10 33 **** **** **** +126 16826702 Decrease_Value_g **** -10 34 **** **** **** +127 16826703 Decrease_Value_h **** -100 33 **** **** **** +128 16826704 Increase_Value_a **** 1 35 **** **** **** +129 16826705 Increase_Value_b **** 1 36 **** **** **** +130 16826706 Increase_Value_c **** 10 35 **** **** **** +131 16826707 Increase_Value_d **** 10 36 **** **** **** +132 16826708 Increase_Value_e **** 100 35 **** **** **** +133 16824949 Spd_Increase **** 3.5 37 **** 16824967 16824970 +134 16824969 Spd_Decrease **** -1.5 38 **** 16824968 16824971 +135 **** bio_reserved **** **** **** **** **** **** +136 **** bio_reserved **** **** **** **** **** **** +137 **** bio_reserved **** **** **** **** **** **** +138 **** bio_reserved **** **** **** **** **** **** +139 **** bio_reserved **** **** **** **** **** **** +140 **** bio_reserved **** **** **** **** **** **** +141 **** bio_reserved **** **** **** **** **** **** +142 **** bio_reserved **** **** **** **** **** **** +143 **** bio_reserved **** **** **** **** **** **** +144 **** bio_reserved **** **** **** **** **** **** +145 **** bio_reserved **** **** **** **** **** **** +146 **** bio_reserved **** **** **** **** **** **** +147 **** bio_reserved **** **** **** **** **** **** +148 **** bio_reserved **** **** **** **** **** **** +149 **** bio_reserved **** **** **** **** **** **** +150 16823546 UseLimitationGender gender **** **** **** 5523 16823547 +151 7531 GenericValueReduction **** 1.1 21 **** 5507 **** +152 7531 GenericValueReduction **** -1.5 21 **** 5507 **** +153 **** D20MODERN_RESERVED **** **** **** **** **** **** +154 **** D20MODERN_RESERVED **** **** **** **** **** **** +155 **** cep_reserved **** **** **** **** **** **** +156 **** cep_reserved **** **** **** **** **** **** +157 **** cep_reserved **** **** **** **** **** **** +158 **** cep_reserved **** **** **** **** **** **** +159 **** cep_reserved **** **** **** **** **** **** +160 **** cep_reserved **** **** **** **** **** **** +161 **** cep_reserved **** **** **** **** **** **** +162 **** cep_reserved **** **** **** **** **** **** +163 **** cep_reserved **** **** **** **** **** **** +164 **** cep_reserved **** **** **** **** **** **** +165 **** cep_reserved **** **** **** **** **** **** +166 **** cep_reserved **** **** **** **** **** **** +167 **** cep_reserved **** **** **** **** **** **** +168 **** cep_reserved **** **** **** **** **** **** +169 **** cep_reserved **** **** **** **** **** **** +170 **** cep_reserved **** **** **** **** **** **** +171 **** cep_reserved **** **** **** **** **** **** +172 **** cep_reserved **** **** **** **** **** **** +173 **** cep_reserved **** **** **** **** **** **** +174 **** cep_reserved **** **** **** **** **** **** +175 **** cep_reserved **** **** **** **** **** **** +176 **** cep_reserved **** **** **** **** **** **** +177 **** cep_reserved **** **** **** **** **** **** +178 **** cep_reserved **** **** **** **** **** **** +179 **** cep_reserved **** **** **** **** **** **** +180 **** cep_reserved **** **** **** **** **** **** +181 **** cep_reserved **** **** **** **** **** **** +182 **** cep_reserved **** **** **** **** **** **** +183 **** cep_reserved **** **** **** **** **** **** +184 **** cep_reserved **** **** **** **** **** **** +185 **** cep_reserved **** **** **** **** **** **** +186 **** cep_reserved **** **** **** **** **** **** +187 **** cep_reserved **** **** **** **** **** **** +188 **** cep_reserved **** **** **** **** **** **** +189 **** cep_reserved **** **** **** **** **** **** +190 **** cep_reserved **** **** **** **** **** **** +191 **** cep_reserved **** **** **** **** **** **** +192 **** cep_reserved **** **** **** **** **** **** +193 **** cep_reserved **** **** **** **** **** **** +194 **** cep_reserved **** **** **** **** **** **** +195 **** cep_reserved **** **** **** **** **** **** +196 **** cep_reserved **** **** **** **** **** **** +197 **** cep_reserved **** **** **** **** **** **** +198 **** cep_reserved **** **** **** **** **** **** +199 **** cep_reserved **** **** **** **** **** **** diff --git a/src/hakpak/rdg_prc8_top/2da/itemprops.2da b/src/hakpak/rdg_prc8_top/2da/itemprops.2da new file mode 100644 index 0000000..aa15d05 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/2da/itemprops.2da @@ -0,0 +1,203 @@ +2DA V2.0 + + 0_Melee 1_Ranged 2_Thrown 3_Staves 4_Rods 5_Ammo 6_Arm_Shld 7_Helm 8_Potions 9_Scrolls 10_Wands 11_Thieves 12_TrapKits 13_Hide 14_Claw 15_Misc_Uneq 16_Misc 17_No_Props 18_Containers 19_HealerKit 20_Torch 21_Glove StringRef Label +0 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 649 Ability_Bonus +1 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 652 AC_Bonus +2 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 653 AC_Bonus_vs_Alignment_Group +3 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 654 AC_Bonus_vs_Damage_Type +4 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 651 AC_Bonus_vs_Racial_Group +5 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 655 AC_Bonus_vs_Specific_Alignment +6 1 1 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 659 Enhancement_Bonus +7 1 1 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 656 Enhancement_Bonus_vs_Alignment_Group +8 1 1 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 657 Enchancement_Bonus_vs_Racial_Group +9 1 1 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 658 Enhancement_Bonus_vs_Specific_Alignement +10 1 **** 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 660 Attack_Penalty +11 1 1 1 1 1 1 1 1 **** **** 1 **** **** **** **** 1 1 **** 1 **** **** 1 661 Base_Item_Weight_Reduction +12 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 662 Bonus_Feat +13 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 663 Bonus_Spell_Slot_of_Level_n +14 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 667 Boomerang +15 1 1 **** 1 1 **** 1 1 1 1 1 **** **** 1 **** 1 1 1 **** **** **** 1 668 Cast_Spell +16 1 1 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 650 Damage_Bonus +17 1 1 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 670 Damage_Bonus_vs_Alignment_Group +18 1 1 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 673 Damage_Bonus_vs_Racial_Group +19 1 **** 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 675 Damage_Bonus_vs_Specific_Alignment +20 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 680 Damage_Immunity +21 1 **** 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 672 Damage_Penalty +22 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 674 Damage_Reduction +23 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 681 Damage_Resistance +24 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 696 Damage_Vulnerability +25 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 748 Dancing +26 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 1493 Darkvision +27 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 **** **** 1 **** **** **** **** 1 677 Decreased_Ability_Score +28 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 **** **** 1 **** **** **** **** 1 678 Decreased_AC +29 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 **** **** 1 **** **** **** **** 1 679 Decreased_Skill_Modifier +30 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 676 Double_Stack +31 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** Enhanced_Container:_Bonus_Slots +32 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** 728 Enhanced_Container:_Reduced_Weight +33 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 669 Extra_Melee_Damage_Type +34 **** 1 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 671 Extra_Ranged_Damage_Type +35 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 704 Haste +36 1 **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 1023 Holy_Avenger +37 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 1022 Immunity +38 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 710 Improved_Evasion +39 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 666 Improved_Magic_Resistance +40 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 711 Improved_Saving_Throws +41 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 712 Improved_Saving_Throws:_Specific +42 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +43 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 713 Keen_Blade +44 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** 1 1 714 Light +45 **** 1 1 **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 1500 Mighty +46 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 721 Mind_Blank +47 1 1 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 722 No_Damage +48 1 **** 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 723 On_Hit_Properties +49 1 1 1 1 **** 1 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 726 Reduced_Saving_Throws +50 1 1 1 1 **** 1 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 727 Reduced_Saving_Throws_Specific +51 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 729 Regeneration +52 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 731 Skill_Bonus +53 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 733 Spell_Immunity +54 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 730 Spell_School_Immunity +55 **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** 1492 Thieves_Tools +56 1 1 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** 1 **** **** **** **** 1 735 Attack_Bonus +57 1 1 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** 1 **** **** **** **** **** 734 Attack_Bonus_vs_Alignment_Group +58 1 1 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** 1 **** **** **** **** **** 737 Attack_Bonus_vs_Racial_Group +59 1 1 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** 1 **** **** **** **** **** 738 Attack_Bonus_vsSpecific_Alignment +60 1 1 1 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 736 To_Hit_Penalty +61 **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 739 Unlimited_Ammunition +62 1 1 1 1 1 1 1 1 **** **** 1 **** **** **** **** 1 1 **** **** **** **** 1 715 Use_Limitation_Alignment_Group +63 1 1 1 1 1 1 1 1 **** 1 1 **** **** **** **** 1 1 **** **** **** **** 1 716 Use_Limitation_Class +64 1 1 1 1 1 1 1 1 **** **** 1 **** **** **** **** 1 1 **** **** **** **** 1 724 Use_Limitation_Racial_Type +65 1 1 1 1 1 1 1 1 **** **** 1 **** **** **** **** 1 1 **** **** **** **** 1 717 Use_Limitation_Specific_Alignment +66 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 718 Use_Limitation_Tileset +67 1 **** 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 732 Vampiric_Regeneration +68 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** Vorpal_Blade +69 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** Wounding +70 **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** **** 1663 Trap +71 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 1775 TRUE_Seeing +72 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 1776 On_Monster_Hit +73 **** **** **** **** **** **** **** **** **** **** **** **** **** 1 1 **** **** **** **** **** **** **** 1777 Turn_Resistance +74 1 1 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 1778 Massive_Criticals +75 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 1779 Freedom_of_Movement +76 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 879 Poison +77 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 5060 Monster_Damage +78 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 5604 Immunity_to_Spells_by_Level +79 **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** 6637 Special_Walk +80 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** 8338 Healers_Kit +81 **** **** **** **** 1 **** **** **** **** **** 1 **** **** **** **** 1 **** **** **** **** **** **** 58325 Weight_Increase +82 1 **** 1 1 **** 1 1 **** **** **** **** **** **** 1 1 **** **** **** **** **** **** 1 723 On_Hit_Cast_Spell +83 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 723 Visual_Effect +84 **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** 84321 Arcane_Spell_Failure +85 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** 1 1 1 1 111772 Material +86 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** 1 1 1 1 111853 Quality +87 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** 1 1 1 1 111871 Additional_Property +88 1 1 1 1 1 1 1 1 **** 1 1 **** **** **** **** 1 1 **** **** **** **** 1 16825170 Use_Limitation_All_Spells +89 1 1 1 1 1 1 1 1 **** 1 1 **** **** **** **** 1 1 **** **** **** **** 1 16825171 Use_Limitation_Arcane_Spells +90 1 1 1 1 1 1 1 1 **** 1 1 **** **** **** **** 1 1 **** **** **** **** 1 16825172 Use_Limitation_Divine_Spells +91 1 1 1 1 1 1 1 1 **** 1 1 **** **** **** **** 1 1 **** **** **** **** 1 16825173 Use_Limitation_Sneak +92 1 1 **** 1 1 **** 1 1 1 1 1 **** **** 1 **** 1 1 1 **** **** **** 1 16824992 Spell_metamagic +93 1 1 **** 1 1 **** 1 1 1 1 1 **** **** 1 **** 1 1 1 **** **** **** 1 16824961 Spell_DC +94 1 1 **** 1 1 **** 1 1 1 1 1 **** **** 1 **** 1 1 1 **** **** **** 1 16824964 Spell_level +95 1 1 1 1 1 1 1 1 **** 1 1 **** **** **** **** 1 1 **** **** **** **** 1 16825167 Use_Limitation_Ability +96 1 1 1 1 1 1 1 1 **** 1 1 **** **** **** **** 1 1 **** **** **** **** 1 16825168 Use_Limitation_Skill +97 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +98 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +99 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +100 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 16826695 AreaEffect +101 1 **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 16832064 PnP_Holy_Avenger +102 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 663 Wizardry +103 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 663 Divinity +104 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 16834308 Echoblade +105 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +106 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +107 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +108 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +109 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +110 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +111 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +112 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +113 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +114 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +115 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +116 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +117 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +118 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +119 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +120 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Decrease_Value_1 +121 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Decrease_Value_10 +122 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Decrease_Value_100 +123 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Decrease_Value_1000 +124 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Decrease_Value_10000 +125 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Decrease_Value_100000 +126 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Decrease_Value_1000000 +127 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Decrease_Value_10000000 +128 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Increase_Value_1000 +129 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Increase_Value_10000 +130 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Increase_Value_100000 +131 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Increase_Value_1000000 +132 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Increase_Value_10000000 +133 1 1 **** 1 1 **** 1 1 **** **** 1 **** **** 1 1 **** 1 **** **** **** **** 1 16833551 Spd_Increase +134 1 1 **** 1 1 **** 1 1 **** **** 1 **** **** 1 1 **** 1 **** **** **** **** 1 16833552 Spd_Decrease +135 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +136 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +137 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +138 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +139 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +140 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +141 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +142 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +143 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +144 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +145 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +146 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +147 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +148 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +149 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +150 1 1 1 1 1 1 1 1 **** 1 1 **** **** **** **** 1 1 **** **** **** 1 1 716 Use_Limitation_Gender +151 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7531 Value +152 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7531 Value +153 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +154 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +155 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +156 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +157 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +158 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +159 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +160 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +161 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +162 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +163 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +164 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +165 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +166 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +167 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +168 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +169 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +170 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +171 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +172 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +173 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +174 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +175 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +176 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +177 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +178 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +179 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +180 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +181 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +182 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +183 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +184 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +185 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +186 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +187 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +188 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +189 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +190 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +191 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +192 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +193 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +194 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +195 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +196 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +197 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +198 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +199 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** diff --git a/src/hakpak/rdg_prc8_top/nss/inc_misc_tools.nss b/src/hakpak/rdg_prc8_top/nss/inc_misc_tools.nss new file mode 100644 index 0000000..949d66c --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/inc_misc_tools.nss @@ -0,0 +1,1417 @@ +#include "inc_mod_constant" +#include "inc_ecl" + +// Returns the ID code attached to the end of a Tag. +// Used in item functions. +string GetID(object oObject = OBJECT_SELF); +string GetID(object oObject) // Confirmed Working + { + string sTag = GetTag(oObject); + int iLen = GetStringLength(sTag)-iLen; + return GetStringRight(sTag,3); + } + +// Converts a positive integer 0 to 999 to a 3 digit string +string Convert(int iNumber); +string Convert(int iNumber) // Confirmed Working + { + string sNum = IntToString(iNumber); + if (iNumber < 1 || iNumber > 999) + return "000"; + if (iNumber < 10) + sNum = "00" + sNum; + else if (iNumber < 100) + sNum = "0" + sNum; + return sNum; + } + +// Checks to see if all PCs are in town. +// A variable "Town" must be set on all areas you wish to distinguish as town. +int AllPCsInTown(); +int AllPCsInTown() + { + object oPC = GetFirstPC(); + while(GetIsObjectValid(oPC)) + { + if (!GetLocalInt(GetArea(oPC),"Town")) + return FALSE; + oPC = GetNextPC(); + } + return TRUE; + } + +// Returns oPC or its master if is an associate. +object GetIsPartyMemberOrAssociate(object oPC); +object GetIsPartyMemberOrAssociate(object oPC) + { + if (!GetIsPC(oPC)) + { + if (GetIsObjectValid(GetMaster(oPC))) + oPC = GetMaster(oPC); + else + return OBJECT_INVALID; // Returns this if a non PC or PC Associate + } + return oPC; + } + +// Determines the number of people in the party oPC belongs too. +int NumberInParty(object oPC); +int NumberInParty(object oPC) + { + int i; + oPC = GetFirstFactionMember(oPC,TRUE); + while (GetIsObjectValid(oPC)) + { + i+=1; + oPC = GetNextFactionMember(oPC,TRUE); + } + return i; + } + +// Returns the average level of the party oPC belongs too +int PartyLevel(object oPC); +int PartyLevel(object oPC) + { + object oParty = GetFirstFactionMember(oPC,TRUE); + int iLevel,iNumber; + while (GetIsObjectValid(oParty)) + { +// iLevel += GetHitDice(oParty); + iLevel += GetECL(oParty); + iNumber+= 1; + oParty = GetNextFactionMember(oPC,TRUE); + } + if (iNumber) + return iLevel/iNumber; + else + return 1; // This should never happen! + } +// Returns a DC scaled to iPartyLevel. +int ScaledDC(int iPartyLevel); +int ScaledDC(int iPartyLevel) + { + int iScaler = iPartyLevel/2; + if (iScaler < 1) + iScaler = 1; + int i = (Random(iScaler*2) + 1) - iScaler; + return 20 + iPartyLevel + i; + } + +// Returns TRUE if oPC is in the same area as the caller. +// Areas must be tagged Area### in order to call this function. +// No tagging convention required for objects within an area. +int SameArea(object oPC); +int SameArea(object oPC) + { + object oArea; + if (GetStringLeft(GetTag(OBJECT_SELF),4) == "Area") + oArea = OBJECT_SELF; + else + oArea = GetArea(OBJECT_SELF); + if (GetArea(oPC) == oArea) + return TRUE; + return FALSE; + } +// Does a standard skill check vs iDC returning TRUE/FALSE. +// If iDC = 0 returns the skill check total. +int SkillCheck(int iSkill, int iDC, object oPC = OBJECT_SELF, int iFeedBack = FALSE, int iTake20 = FALSE); +int SkillCheck(int iSkill, int iDC, object oPC, int iFeedBack, int iTake20) + { + if (GetHasSkill(iSkill)) + { + if (iDC == 0) + return d20() + GetSkillRank(iSkill); + else if (iTake20) + { + if (20 + GetSkillRank(iSkill) >= iDC) + return TRUE; + } + else if (iFeedBack) + { + return GetIsSkillSuccessful(OBJECT_SELF,iSkill,iDC); + } + else if (d20() + GetSkillRank(iSkill) >= iDC) + return TRUE; + } + return FALSE; + } +// Generates a bag at the Dying/Dead PCs location. +// If iDead is FALSE the bag is only created if the PC has a healing kit the +// party may need and then moves the kit. +// iDead TRUE forces the bag to be created. +object GeneratePCLootBag(object oPC,int iDead = FALSE); +object GeneratePCLootBag(object oPC, int iDead) + { + object oBag; + object oItem = GetItemPossessedBy(oPC,"healerskit"); + if (GetIsObjectValid(oItem) || iDead) + oBag = CreateObject(OBJECT_TYPE_PLACEABLE,"pclootbag", GetLocation(oPC)); + else + return OBJECT_INVALID; + if (GetIsObjectValid(oItem)) + { + CopyItem(oItem,oBag); + DestroyObject(oItem); + } + SetLocalObject(oPC,"LootBag",oBag); + return oBag; + } + +// Moves every item in a PC's inventory to the oTarget. +void LootPC(object oPC, object oTarget); +void LootPC(object oPC, object oTarget) + { + int i; + object oItem; + for (i = 0; i <= 13; i ++) + { + oItem = GetItemInSlot(i,oPC); + AssignCommand(GetModule(),ActionUnequipItem(oItem)); + CopyItem(oItem,oTarget,TRUE); + DestroyObject(oItem); + } + oItem = GetFirstItemInInventory(oPC); + while (GetIsObjectValid(oItem)) + { + if (GetTag(oItem) != "DeathToken") + { + CopyItem(oItem,oTarget,TRUE); + DestroyObject(oItem); + } + oItem = GetNextItemInInventory(oPC); + } + AssignCommand(oTarget,TakeGoldFromCreature(GetGold(oPC),oPC,FALSE)); + } + +// Gives 3E Starting Gold. +void StartingGold(object oPC); +void StartingGold(object oPC) + { + int i; + object oNPC, oItem; + if (!GetXP(oPC)) + { + for (i = 0; i <= 14; i++) + { + oItem = GetItemInSlot(i); + DestroyObject(oItem); + } + oItem = GetFirstItemInInventory(oPC); + while (GetIsObjectValid(oItem)) + { + if(GetBaseItemType(oItem) != BASE_ITEM_CBLUDGWEAPON + && GetBaseItemType(oItem) != BASE_ITEM_CPIERCWEAPON + && GetBaseItemType(oItem) != BASE_ITEM_CREATUREITEM + && GetBaseItemType(oItem) != BASE_ITEM_CSLASHWEAPON + && GetBaseItemType(oItem) != BASE_ITEM_CSLSHPRCWEAP) + DestroyObject(oItem); + oItem = GetNextItemInInventory(oPC); + } + i = GetClassByPosition(1,oPC); + switch (i) + { + case CLASS_TYPE_BARBARIAN: {i = d4(4)*10;break;} + case CLASS_TYPE_BARD: {i = d4(4)*10;break;} + case CLASS_TYPE_CLERIC: {i = d4(5)*10;break;} + case CLASS_TYPE_DRUID: {i = d4(2)*10;break;} + case CLASS_TYPE_FIGHTER: {i = d4(6)*10;break;} + case CLASS_TYPE_MONK: {i = d4(5);break;} + case CLASS_TYPE_PALADIN: {i = d4(6)*10;break;} + case CLASS_TYPE_RANGER: {i = d4(6)*10;break;} + case CLASS_TYPE_ROGUE: {i = d4(5)*10;break;} + case CLASS_TYPE_SORCERER: {i = d4(3)*10;break;} + case CLASS_TYPE_WIZARD: {i = d4(3)*10;break;} + default: {i = d4(4)*10;break;} + }; + oNPC = GetObjectByTag("Merchant"); +// AssignCommand(oPC,ActionEquipItem(CreateItemOnObject("pcskin",oPC),INVENTORY_SLOT_CARMOUR)); + AssignCommand(oNPC,TakeGoldFromCreature(GetGold(oPC),oPC,TRUE)); + AssignCommand(oNPC,GiveGoldToCreature(oPC,i)); + AssignCommand(oNPC,GiveXPToCreature(oPC,1)); + } + } + +// Returns TRUE if oTarget has an iEffectType +// If oCreator is true then the effector will be checked for match. +// If iRemove is TRUE the effect will be removed. +// If iEffectType = EFFECT_TYPE_INVALID all effect types will be checked. Useful +// for finding any effect created by oCreator on oTarget. +int FindEffect(object oTarget, int iEffectType, object oCreator= OBJECT_INVALID, int iRemove = FALSE); +int FindEffect(object oTarget, int iEffectType, object oCreator, int iRemove) + { + effect eEffect = GetFirstEffect(oTarget); + while(GetIsEffectValid(eEffect)) + { + if (GetEffectType(eEffect) == iEffectType + || iEffectType == EFFECT_TYPE_INVALIDEFFECT) + { + if ((GetIsObjectValid(oCreator) + && oCreator == GetEffectCreator(eEffect)) + || !GetIsObjectValid(oCreator)) + { + if (iRemove) + RemoveEffect(oTarget,eEffect); + return TRUE; + } + } + eEffect = GetNextEffect(oTarget); + } + return FALSE; + } +// Generates a unique tag for the secret door. +string GetSecretDoorTag(); +string GetSecretDoorTag() + { + int i = GetLocalInt(GetModule(),"SecretDoor"); + SetLocalInt(GetModule(),"SecretDoor",i+=1); + return "SecretDoor"+IntToString (i); + } +// Modified version of CreateObject that can be used as a command. +void CreateObject2(int iObjectType,string sResRef,location lLoc, int iAnim = FALSE, string sTag = ""); +void CreateObject2(int iObjectType,string sResRef,location lLoc, int iAnim = FALSE, string sTag = "") + { + CreateObject(iObjectType,sResRef,lLoc,iAnim,sTag); + } +// Creates a hidden treasure. +void CreateHiddenTreasure(location lLoc); +void CreateHiddenTreasure(location lLoc) + { + int iLocked,iTrapped; + object oObject = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_chest",lLoc,FALSE); + if (d100() <= HIDDEN_TREASURE_LOCKED) + SetLocked(oObject,TRUE); + if (d100() > HIDDEN_TREASURE_TRAPPED) + SetTrapDisabled(oObject); + } + +// Determines if oPC has an effect of iEffectType. +int HasEffect(object oPC, int iEffectType); +int HasEffect(object oPC, int iEffectType) + { + effect eEffect = GetFirstEffect(oPC); + while(GetIsEffectValid(eEffect)) + { + if (GetEffectType(eEffect) == iEffectType) + return TRUE; + eEffect = GetNextEffect(oPC); + } + return FALSE; + } + +// Does a standard ability check vs iDC returning TRUE/FALSE. +// If iDC = 0 returns the skill check total. +int AbilityCheck(object oPC,int iAbility,int iDC); +int AbilityCheck(object oPC,int iAbility,int iDC) + { + int iRoll; + // GetAbility + int iRank = GetAbilityModifier(iAbility,oPC); + if (GetIsObjectValid(GetItemPossessedBy(oPC,"miscb031"))) + iRank+=1; + // Determine Roll + iRoll = d20()+iRank; + // Return Results + if (iDC == 0) + return iRoll; + else if (iDC != 0 && iRoll >= iDC) + return TRUE; + return FALSE; + } +// Returns an effect based Effect Type and Creator +effect GetEffect(object oTarget, int iEffectType, object oCreator = OBJECT_INVALID); +effect GetEffect(object oTarget, int iEffectType, object oCreator) + { + effect eEffect = GetFirstEffect(oTarget); + while(GetIsEffectValid(eEffect)) + { + if (GetEffectType(eEffect) == iEffectType) + { + if (!GetIsObjectValid(oCreator) + || GetEffectCreator(eEffect) == oCreator) + break; + } + eEffect = GetNextEffect(oTarget); + } + return eEffect; + } +// This function is used to add damage for a curse it should be used in a delayed loop. +void CurseDamage (object oCreator,effect eEffect, object oTarget); +void CurseDamage (object oCreator,effect eEffect, object oTarget) + { + effect eTemp = GetEffect(oTarget,EFFECT_TYPE_CURSE,oCreator); + if (GetIsEffectValid(eTemp)) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT,eEffect,oTarget); + } + } +// This command will return true if the pc has a gem of the appropriate type or +// better. It will then decrement the stack of gems by one then return to the +// calling function/script. +int GetHasGem(int iValue, object oPC); +int GetHasGem(int iValue, object oPC) + { + int iPassed; + int i; + string sTag,sResRef; + object oGem; + int iStack; + for (i = iValue; i<= 5; i+=1) + { + sResRef = "rdg_gem"+IntToString(i)+"01"; + sTag = "rdg_gem"+IntToString(i)+"01"; + oGem = GetItemPossessedBy(oPC,sTag); + if (GetIsObjectValid(oGem)) + { + iStack = GetNumStackedItems(oGem); + if (iStack > 1) + CreateItemOnObject(sResRef,oPC,iStack-1); + DestroyObject(oGem); + iPassed = TRUE; + break; + } + } + return iPassed; + } +// MUST be called by a PC. Handles the detection of hidden objects. +void DetectMode(); +void DetectMode() + { + int iDC,iSecretDoors; + int iCntr = 1; + object oDoor,oChest; + object oHidden = GetNearestObjectToLocation(OBJECT_TYPE_DOOR|OBJECT_TYPE_PLACEABLE|OBJECT_TYPE_TRIGGER|OBJECT_TYPE_WAYPOINT,GetLocation(OBJECT_SELF),iCntr); + while(GetIsObjectValid(oHidden)) + { + if (GetDistanceToObject(oHidden) > 10.0) + break; // Search has gone beyond allowed distance shut down loop. + if (LineOfSightObject(OBJECT_SELF,oHidden)) + { + string sTag = GetTag(oHidden); + //--------------------------DETECT TRAPS ------------------------------ + if (GetIsTrapped(oHidden)) + { + if (!GetTrapDetectedBy(oHidden,OBJECT_SELF)) // If trap not detected + { + iDC = GetLocalInt(oHidden,"DC"); + if (!iDC) // If no DC stored on trap make one. + iDC = ScaledDC(PartyLevel(OBJECT_SELF)); + if (!GetLevelByClass(CLASS_TYPE_ROGUE) + && GetLocalInt(oHidden,"TrapType") > 0 + && iDC >= 25) + iDC = 10000; // Only rogues can find non mechanical traps DC 25+ + if (SkillCheck(SKILL_SEARCH,iDC)) + { + SetTrapDetectedBy(oHidden,OBJECT_SELF); + PlayVoiceChat(VOICE_CHAT_SEARCH); + } + } + } + //---------------------------SECRET DOORS ------------------------- + else if (sTag == "SecretDoor") + { + if (GetLocalInt(oHidden,"Active")) + { + iDC = GetLocalInt(oHidden,"DC"); + if (!iDC) + iDC = ScaledDC(PartyLevel(OBJECT_SELF)); + if (SkillCheck(SKILL_SEARCH,iDC)) + { + oDoor = GetNearestObjectByTag("rdg_secret_door"); + if (GetIsObjectValid(oDoor)) + { + if (GetLocation(oDoor) != GetLocation(oHidden))//Attempt to stop double secret door spawning. + { + // CREATE SECRET DOOR AND UPDATE MODULE REGISTRY + oDoor = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_secret_door",GetLocation(oHidden),FALSE); + SetLocalInt(oHidden,"Active",FALSE);//Turn off checks + SetLocalObject(oHidden,"SecretDoor",oDoor); + PlayVoiceChat(VOICE_CHAT_LOOKHERE); + } + } + else + { + // CREATE SECRET DOOR AND UPDATE MODULE REGISTRY + oDoor = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_secret_door",GetLocation(oHidden),FALSE); + SetLocalInt(oHidden,"Active",FALSE);//Turn off checks + SetLocalObject(oHidden,"SecretDoor",oDoor); + PlayVoiceChat(VOICE_CHAT_LOOKHERE); + } + } + } + } + // ------------------------ HIDDEN TREASURE ----------------------- + else if (sTag == "HiddenChest") + { + if (GetLocalInt(oHidden,"Active")) + { + iDC = GetLocalInt(oHidden,"DC"); + if (!iDC) + iDC = ScaledDC(PartyLevel(OBJECT_SELF)); + if (SkillCheck(SKILL_SEARCH,iDC)) + { + oChest = GetNearestObjectByTag("RDG_CHEST");//Check this tag + if (GetIsObjectValid(oChest)) + { + if (GetLocation(oChest) != GetLocation(oHidden))//Attempt to stop double spawning. + { + // CREATE SECRET DOOR AND UPDATE MODULE REGISTRY + oChest = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_chest",GetLocation(oHidden),FALSE); + SetLocalInt(oHidden,"Active",FALSE);//Turn off checks + SetLocalObject(oHidden,"HiddenChest",oChest); + PlayVoiceChat(VOICE_CHAT_LOOKHERE); + } + } + else + { + // CREATE SECRET DOOR AND UPDATE MODULE REGISTRY + oChest = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_chest",GetLocation(oHidden),FALSE); + SetLocalInt(oHidden,"Active",FALSE);//Turn off checks + SetLocalObject(oHidden,"HiddenChest",oChest); + PlayVoiceChat(VOICE_CHAT_LOOKHERE); + } + } + } + } + } + oHidden = GetNearestObjectToLocation(OBJECT_TYPE_DOOR|OBJECT_TYPE_PLACEABLE|OBJECT_TYPE_TRIGGER|OBJECT_TYPE_WAYPOINT,GetLocation(OBJECT_SELF),iCntr+=1); + } + } +// Returns the effects of a poison trap. +effect GetPoisonType(int iDangerLevel,int iAOE); +effect GetPoisonType(int iDamage,int iAOE) + { + effect eDam; + if (iAOE) + { + switch (iDamage) + { + case TRAP_WEAK: {eDam = EffectPoison(POISON_UNGOL_DUST);break;} + case TRAP_AVERAGE: {eDam = EffectPoison(POISON_CHAOS_MIST);break;} + case TRAP_STRONG: {eDam = EffectPoison(POISON_BURNT_OTHUR_FUMES);break;} + case TRAP_DEADLY: {eDam = EffectPoison(POISON_DRAGON_BILE);break;} + case TRAP_FATAL: {eDam = EffectPoison(POISON_BLACK_LOTUS_EXTRACT);break;} + }; + } + else + { + switch (iDamage) + { + case TRAP_WEAK: {eDam = EffectPoison(POISON_GREENBLOOD_OIL);break;} + case TRAP_AVERAGE: {eDam = EffectPoison(POISON_PURPLE_WORM_POISON);break;} + case TRAP_STRONG: {eDam = EffectPoison(POISON_WYVERN_POISON);break;} + case TRAP_DEADLY: {eDam = EffectPoison(POISON_DRAGON_BILE);break;} + case TRAP_FATAL: {eDam = EffectPoison(POISON_BLACK_LOTUS_EXTRACT);break;} + }; + } + return eDam; + } + +// Returns the amount of damage a trap will do. +int GetTrapDamage(int iLevel,int iDangerLevel); +int GetTrapDamage(int iLevel,int iDangerLevel) + { + int iDam,i; + if (iLevel > 0) + { + for (i = 1; i <= iLevel; i++) + { + switch (iDangerLevel) + { + case TRAP_WEAK: {iDam += d6();break;} + case TRAP_AVERAGE: {iDam += d8();break;} + case TRAP_STRONG: {iDam += d10();break;} + case TRAP_DEADLY: {iDam += d12();break;} + case TRAP_FATAL: {iDam += d20();break;} + }; + } + } + return iDam; + } + +// Gets the visual effect for a trap. +effect GetVisualEffect(int iAOE, int iDamageType); +effect GetVisualEffect(int iAOE,int iType) + { + effect eVis; + if (iAOE) + { + switch(iType) + { + case DAMAGE_TYPE_BLUDGEONING: {eVis = EffectAreaOfEffect(AOE_PER_ENTANGLE," ", " ", " ");break;} + case DAMAGE_TYPE_PIERCING: {eVis = EffectVisualEffect(VFX_DUR_CALTROPS);break;} + case DAMAGE_TYPE_SLASHING: {eVis = EffectVisualEffect(VFX_DUR_CALTROPS);break;} + + case DAMAGE_TYPE_ACID: {eVis = EffectAreaOfEffect(AOE_PER_FOGACID," ", " ", " ");break;} + case DAMAGE_TYPE_COLD: {eVis = EffectAreaOfEffect(AOE_PER_FOGKILL," ", " ", " ");break;} + case DAMAGE_TYPE_ELECTRICAL: {eVis = EffectVisualEffect(VFX_BEAM_LIGHTNING);break;} + case DAMAGE_TYPE_FIRE: {eVis = EffectVisualEffect(VFX_FNF_FIREBALL);break;} + case DAMAGE_TYPE_SONIC: {eVis = EffectVisualEffect(VFX_FNF_SOUND_BURST);break;} + + case DAMAGE_TYPE_MAGICAL: {eVis = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_MIND);break;} + case DAMAGE_TYPE_NEGATIVE: {eVis = EffectAreaOfEffect(AOE_PER_GREASE," ", " ", " ");break;} + case DAMAGE_TYPE_POSITIVE: {eVis = EffectVisualEffect(VFX_FNF_STRIKE_HOLY);break;} + + case DAMAGE_TYPE_POISON: {eVis = EffectAreaOfEffect(AOE_PER_FOGSTINK," ", " ", " ");break;} + }; + } + else + { + switch(iType) + { + case DAMAGE_TYPE_BLUDGEONING: {eVis = EffectVisualEffect(VFX_IMP_WALLSPIKE);break;} + case DAMAGE_TYPE_PIERCING: {eVis = EffectVisualEffect(VFX_IMP_SPIKE_TRAP);break;} + case DAMAGE_TYPE_SLASHING: {eVis = EffectVisualEffect(VFX_FNF_SWINGING_BLADE);break;} + + case DAMAGE_TYPE_ACID: {eVis = EffectVisualEffect(VFX_COM_HIT_ACID);break;} + case DAMAGE_TYPE_COLD: {eVis = EffectVisualEffect(VFX_IMP_HEAD_COLD);break;} + case DAMAGE_TYPE_ELECTRICAL: {eVis = EffectVisualEffect(VFX_COM_HIT_ELECTRICAL);break;} + case DAMAGE_TYPE_FIRE: {eVis = EffectVisualEffect(VFX_COM_HIT_FIRE);break;} + case DAMAGE_TYPE_SONIC: {eVis = EffectVisualEffect(VFX_COM_HIT_SONIC);break;} + + case DAMAGE_TYPE_MAGICAL: {eVis = EffectVisualEffect(VFX_DUR_SMOKE);break;} + case DAMAGE_TYPE_NEGATIVE: {eVis = EffectVisualEffect(VFX_COM_HIT_NEGATIVE);break;} + case DAMAGE_TYPE_POSITIVE: {eVis = EffectVisualEffect(VFX_COM_HIT_DIVINE);break;} + + case DAMAGE_TYPE_POISON: {eVis = EffectVisualEffect(VFX_IMP_POISON_L);break;} + }; + } + return eVis; + } +// Returns the Reflex save needed to avoid a trap. +// Not used by poison traps. +int GetReflexSaveDC(int iLevel,int iDangerLevel); +int GetReflexSaveDC(int iLevel,int iDangerLevel) + { + int iDC = iLevel; + if (iDangerLevel == TRAP_WEAK) iDC += 5; + else if (iDangerLevel == TRAP_AVERAGE) iDC += 10; + else if (iDangerLevel == TRAP_STRONG) iDC += 15; + else if (iDangerLevel == TRAP_DEADLY) iDC += 20; + else if (iDangerLevel == TRAP_FATAL) iDC += 25; + if (iDC < 10) + iDC = 10; + return iDC; + } + +// This function will randomly return an unused door. +// If iPit is TRUE will return a "Fall" waypoint instead. +// This function attempts 10 times to find a destination. +// Failure returns OBJECT_INVALID. +object DetermineDestination(int iPit = FALSE, int iSecret = FALSE); +object DetermineDestination(int iPit, int iSecret = FALSE) + { + object oDest; + int iCntr; + int iDoors = GetLocalInt(GetModule(),"Doors"); + int iFalls = GetLocalInt(GetModule(),"Falls"); + int iSecrets = GetLocalInt(GetModule(),"SecretDoorWPs"); + int iType = GetObjectType(OBJECT_SELF); + for (iCntr = 1; iCntr <= 10; iCntr++)// Try 10 times to find a link + { + if (GetLocalInt(OBJECT_SELF,"Pit") || iPit) + oDest = GetLocalObject(GetModule(),"Fall"+IntToString(Random(iFalls)+1)); + else if (iSecret) + oDest = GetLocalObject(GetModule(),"SecretDoor"+IntToString(Random(iSecrets)+1)); + else if (iType == OBJECT_TYPE_DOOR) + oDest = GetLocalObject(GetModule(),"Door"+IntToString(Random(iDoors)+1)); + if (GetArea(OBJECT_SELF) == GetArea(oDest)) + oDest = OBJECT_INVALID; + if (GetIsObjectValid(GetLocalObject(oDest,"Dest"))) + oDest = OBJECT_INVALID; + if (GetIsObjectValid(oDest)) + break; + } + return oDest; + } + +// This function should be used in an AssignCommand to a PC. +// This function will transport the PC and his associates to a place determined +// by the DetermineDestination function. +void Transition(object oDest); +void Transition(object oDest) + { + location lLoc; + if (GetIsTrapped(oDest)) + SetTrapDisabled(oDest); + if (GetLocked(oDest)) + SetLocked(oDest,FALSE); + if (!GetIsOpen(oDest)) + AssignCommand(oDest,ActionOpenDoor(oDest)); + object oTrans = GetNearestObjectByTag("Transition",oDest); + if (GetIsObjectValid(oTrans) + && GetDistanceBetween(oDest,oTrans) < 5.0) + oDest = oTrans; + lLoc = GetLocation(oDest); + ClearAllActions(); + ActionJumpToLocation(lLoc); + // Transition the PCs familiars, henchmen, etc. + object oAssociate = GetFirstFactionMember(OBJECT_SELF,FALSE); + while (GetIsObjectValid(oAssociate)) + { + if (GetMaster(oAssociate) == OBJECT_SELF) + { + AssignCommand(oAssociate,ClearAllActions(TRUE)); + AssignCommand(oAssociate,ActionJumpToLocation(lLoc)); + } + oAssociate = GetNextFactionMember(OBJECT_SELF,FALSE); + } + DelayCommand(2.0,SetFacing(GetFacing(oDest))); + DelayCommand(2.0,SetCameraFacing(GetFacing(oDest))); + } + +// Used to link any 2 transtions. +// Is sometimes used to mark a Fall or Secret Door waypoint as used. +void LinkTransitions(object oDest, object oSelf =OBJECT_SELF); +void LinkTransitions(object oDest,object oSelf) + { + SetLocalObject(oDest,"Dest",oSelf); + SetLocalObject(oSelf,"Dest",oDest); + } + +// Used to create a randomly placed entrance to undermountain. +// iPit determiens if this should be a "Fall" waypoint. +// If set to FALSE this function will link and return a random door inside the +// dungeon. +// sTag is the Tag of the object you want the entrance to be. +// If sTag returns an invalid object the caller will be used. +object CreateDungeonEntrance(int iPit = TRUE, string sTag = "YawningPortalWell"); +object CreateDungeonEntrance(int iPit, string sTag) + { + object oTarget = GetObjectByTag(sTag); + if (!GetIsObjectValid(oTarget)) + oTarget = OBJECT_SELF; + object oDest = DetermineDestination(iPit); + if (iPit) + { + object oRope = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_rope_used",GetLocation(oDest),TRUE); + SetPlotFlag(oRope,TRUE); + LinkTransitions(oDest,oTarget);//Activates the waypoint to prevent reuse + LinkTransitions(oRope,oTarget);//Makes the actual link. + oDest = oRope; + } + else + LinkTransitions(oDest,oTarget); + return oDest; + } + +// This command will clear ALL transition links in the dungeon. +void ClearAllTransitions(); +void ClearAllTransitions() + { + int iDoors = GetLocalInt(GetModule(),"Doors"); + int iSecretDoors = GetLocalInt(GetModule(),"SecretDoorWPs"); + int iFalls = GetLocalInt(GetModule(),"Falls"); + int iDynamic = GetLocalInt(GetModule(),"SecretDoor"); + int i,j; + object oArea,oDoor,oWP,oTrap,oRope; + // Clear all door transitions. + for (i = 1; i <= iDoors; i+=1) + { + oDoor = GetLocalObject(GetModule(),"Door"+IntToString(i)); + DeleteLocalObject(oDoor,"Dest"); + } + // Reset all secret door waypoints to new values. + for (i = 1; i <= iSecretDoors; i += 1) + { + oWP = GetLocalObject(GetModule(),"SecretDoor"+IntToString(i)); + oDoor = GetLocalObject(oWP,"SecretDoor"); + if (d100() <= ROOM_SECRET_DOOR) + SetLocalInt(oWP,"Active",TRUE); + else + DeleteLocalInt(oWP,"Active"); + DeleteLocalObject(oWP,"Dest"); + if (GetIsObjectValid(oDoor)) + { + SetPlotFlag(oDoor,FALSE); + DestroyObject(oDoor); + } + } + // Destroy any player made doors. + for (i = 1; i <= iDynamic; i+=1) + { + oDoor = GetObjectByTag("SecretDoor"+IntToString (i)); + SetPlotFlag(oDoor,FALSE); + oWP = GetNearestObjectByTag("Transition",oDoor); + if (GetLocalString(oWP,"Tag") != "") + DestroyObject (oWP); + DestroyObject (oDoor); + } + // Reset all FALL Waypoints and destroy Ropes. + for (i = 1; i <= iFalls; i+=1) + { + oWP = GetLocalObject(GetModule(),"Fall"+IntToString(i)); + oDoor = GetLocalObject(oWP,"Dest"); + if (GetIsObjectValid(oDoor)) + { + // Find and destroy possible rope attached to trap door. + if (GetObjectType(oDoor) == OBJECT_TYPE_PLACEABLE) + { + oTrap = GetLocalObject(oDoor,"Dest"); + if (GetTag(oTrap) != "YawningPortalWell")// DONT KILL THE WELL! + { + SetPlotFlag(oTrap,FALSE); + DestroyObject(oTrap); + } + } + if (GetTag(oDoor) != "YawningPortalWell")// DONT KILL THE WELL! + { + //Destroy the trap door. + SetPlotFlag(oDoor,FALSE); + DestroyObject(oDoor); + } + } + DeleteLocalObject(oWP,"Dest"); + } + DeleteLocalInt(GetModule(),"AreasExplored"); + CreateDungeonEntrance(); + } + +// This function returns the danger level of a trap. +int GetTrapDangerLevel(); +int GetTrapDangerLevel() + { + int iRoll = d100(); + if (iRoll <= TRAP_WEAK) {return TRAP_WEAK;} + else if (iRoll <= TRAP_AVERAGE) {return TRAP_AVERAGE;} + else if (iRoll <= TRAP_STRONG) {return TRAP_STRONG;} + else if (iRoll <= TRAP_DEADLY) {return TRAP_DEADLY;} + else if (iRoll <= TRAP_FATAL) {return TRAP_FATAL;} + return TRAP_WEAK;//This should never happen. Added for compile reasons only. + } + +// Determines the type of trap. +// Only a rogue can detect traps over DC25 if not mechanical. +int SetTrapType(); +int SetTrapType() + { + int iRoll = d100(); + if (iRoll <= TRAP_MECHANICAL) + return TRAP_MECHANICAL; + else if (iRoll <= TRAP_ELEMENTAL) + return TRAP_ELEMENTAL; + else if (iRoll <= TRAP_SPECIAL) + return TRAP_SPECIAL; + return 1; //This should never happen included for compile reasons + } + +// Determines the damage type of a trap. +int GetDamageType(int iType); +int GetDamageType(int iType) + { + int iRoll,iSave; + if (iType == TRAP_MECHANICAL) // Mechanical Trap + iRoll = d4(); + else if (iType == TRAP_ELEMENTAL) // Elemental Magic Trap + iRoll = Random(5)+5; + else if (iType == TRAP_SPECIAL) // Special Magic Trap + iRoll = Random(3)+10; + // Determine Savign Throw Type + switch (iRoll) + { + //Mechanical + case 1: {iType = DAMAGE_TYPE_BLUDGEONING; iSave = SAVING_THROW_TYPE_TRAP;break;} + case 2: {iType = DAMAGE_TYPE_PIERCING; iSave = SAVING_THROW_TYPE_TRAP;break;} + case 3: {iType = DAMAGE_TYPE_SLASHING; iSave = SAVING_THROW_TYPE_TRAP;break;} + case 4: {iType = DAMAGE_TYPE_POISON; iSave = SAVING_THROW_TYPE_POISON;break;} + //Elemental + case 5: {iType = DAMAGE_TYPE_ACID; iSave = SAVING_THROW_TYPE_ACID;break;} + case 6: {iType = DAMAGE_TYPE_COLD; iSave = SAVING_THROW_TYPE_COLD;break;} + case 7: {iType = DAMAGE_TYPE_ELECTRICAL; iSave = SAVING_THROW_TYPE_ELECTRICITY;break;} + case 8: {iType = DAMAGE_TYPE_FIRE; iSave = SAVING_THROW_TYPE_FIRE;break;} + case 9: {iType = DAMAGE_TYPE_SONIC; iSave = SAVING_THROW_TYPE_SONIC;break;} + //Special + case 10: {iType = DAMAGE_TYPE_NEGATIVE; iSave = SAVING_THROW_TYPE_NEGATIVE;break;} + case 11: {iType = DAMAGE_TYPE_MAGICAL; iSave = SAVING_THROW_TYPE_SPELL;break;} + case 12: {iType = DAMAGE_TYPE_POSITIVE; iSave = SAVING_THROW_TYPE_POSITIVE;break;} + } + SetLocalInt(OBJECT_SELF,"SaveThrow",iSave); + return iType; + } +// This function is used to determine the basic properties of a trap. +void SetUpTrap(object oTrap); +void SetUpTrap(object oTrap) + { + // Determine weak to fatal trap type + int iDangerLevel = GetTrapDangerLevel(); + //Determine if Area of Effect Trap. + int iAOE; + if (d100() <= TRAP_AOE) + iAOE = TRUE; + // Determine if Trap is Mechanical or Magic + int iType = SetTrapType(); + if (iType == TRAP_MECHANICAL + && d100() <= TRAP_PIT) + SetLocalInt(oTrap,"Pit",TRUE);// All Pits are bludgeoning and use special rules. + else + SetLocalInt(oTrap,"DamageType",GetDamageType(iType)); + SetLocalInt(oTrap,"TrapType",iType); + SetLocalInt(oTrap,"AOE",iAOE); + SetLocalInt(oTrap,"Danger",iDangerLevel); + } + +// Sets up the traps in an area. +void SetUpTraps(object oArea); +void SetUpTraps(object oArea) + { + int iCntr,iRoll; + object oObject = GetFirstObjectInArea(oArea); + while (GetIsObjectValid(oObject)) + { + // IF A TRAP + if (GetIsTrapped(oObject)) + { + if (GetObjectType(oObject) == OBJECT_TYPE_TRIGGER) + iRoll = ROOM_TRAP_PERCENTAGE; + else if (GetObjectType(oObject) == OBJECT_TYPE_DOOR) + iRoll = DOOR_TRAPED_PERCENTAGE; + else if (GetObjectType(oObject) == OBJECT_TYPE_PLACEABLE) + iRoll = PLACEABLE_TRAP_PERCENTAGE; + if (d100() <= iRoll) + SetUpTrap(oObject); + else + SetTrapDisabled(oObject); + } + iRoll = 0; //Reset Variable for next object. + oObject = GetNextObjectInArea(oArea); + } + } + + +// This function awards the CR value of XPs to the party of oPC. +void AwardXPs(object oPC); +void AwardXPs(object oPC) + { + if (GetObjectType(oPC) == OBJECT_TYPE_AREA_OF_EFFECT) + { + oPC = GetAreaOfEffectCreator(oPC); + if (!GetIsPC(oPC)) + oPC = GetItemPossessor(oPC); + } + if (!GetIsPC(oPC) && !GetIsPC(GetMaster(oPC))) + return; + int iCR,iXP,iBase; + float fCR; + object oParty; + int iParty = PartyLevel(oPC); + if (!iParty) + return; + if (GetObjectType(OBJECT_SELF) == OBJECT_TYPE_CREATURE) + { + if (GetIsObjectValid(GetMaster())) // Prevent XPs for summoned monsters. + return; + else if (!GetIsObjectValid(oPC)) + return; + else + fCR = GetChallengeRating(OBJECT_SELF); + } + else + fCR = GetLocalFloat(OBJECT_SELF,"CR"); + if (fCR < 1.0) + iCR = 1; + else + iCR = FloatToInt(fCR); + int iStep = iParty - iCR; + if (iStep >= 8) + { + SendMessageToPC(oPC,"CR too low to be awarded XPs."); + return; + } + else if (iStep <= -8) + { + iStep = -7; + } + else if (iParty <=6 && iCR <=1) + iXP = 300; + else if (iParty <=4 && iCR ==2) + iXP = 600; + else + { + iBase = 300 * iParty; + switch(iStep) + { + case -7 : {iXP = iBase*12;break;} + case -6 : {iXP = iBase*8;break;} + case -5 : {iXP = iBase*6;break;} + case -4 : {iXP = iBase*4;break;} + case -3 : {iXP = iBase*3;break;} + case -2 : {iXP = iBase*2;break;} + case -1 : {iXP = iBase/2*3;break;} + case 0 : {iXP = iBase;break;} + case 1 : {iXP = iBase/3*2; break;} + case 2 : {iXP = iBase/2;break;} + case 3 : {iXP = iBase/3;break;} + case 4 : {iXP = iBase/4;break;} + case 5 : {iXP = iBase/6;break;} + case 6 : {iXP = iBase/8;break;} + case 7 : {iXP = iBase/12; break;} + }; + } + if (fCR < 1.0) + iXP = FloatToInt(IntToFloat(iXP)*fCR); + iXP = iXP/NumberInParty(oPC); + oParty = GetFirstFactionMember(oPC); + while(GetIsObjectValid(oParty)) + { + if (GetIsPC(oParty)) + GiveXPToCreature(oParty,iXP); + oParty = GetNextFactionMember(oPC); + } + } +//This function is what does the Rest Resets for the RDG. +// This function will reset the rests for the entire party belonging to oPC. +void CheckSafeRest(object oPC); +void CheckSafeRest(object oPC) + { + if (d100() <= SAFE_AREA_PERCENTAGE) + { + oPC = GetFirstFactionMember(oPC); + while (GetIsObjectValid(oPC)) + { + SetLocalInt(oPC,"Rest",TRUE); + DelayCommand(2.0,FloatingTextStringOnCreature("Rest Reset.",oPC,FALSE)); + SetPanelButtonFlash(oPC,PANEL_BUTTON_REST,FALSE); + oPC = GetNextFactionMember(oPC); + } + } + } +// Will return true if oPC has an item that grants feather fall effects. +int CheckFeatherFall(object oPC); +int CheckFeatherFall(object oPC) + { + object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC); + if (GetLocalInt(oSkin,"miscb036") + || GetLocalInt(oSkin,"miscb080") + || GetLocalInt(oSkin,"ring035") + || GetLocalInt(oSkin,"ring030")) + return TRUE; + return FALSE; + } + +//This function handles pit type transitions. +// The optional parameters can be used to change how a pit works. +void TransitionPit(object oPC,int iFallIn = TRUE,int iJump = FALSE,int iDC = 0,int iDepth = 0, object oPit = OBJECT_SELF, object oDest = OBJECT_INVALID); +void TransitionPit(object oPC,int iFallIn,int iJump,int iDC,int iDepth, object oPit, object oDest) + { + if (!iDC) + iDC = GetLocalInt(oPit,"Reflex"); + if (!iDepth) + iDepth = GetLocalInt(oPit,"Dice"); + if (!GetIsObjectValid(oDest)) + oDest = GetLocalObject(oPit,"Dest"); + if ((iFallIn && !ReflexSave(oPC,iDC)) + || iJump) + { + AssignCommand(oPC,ClearAllActions(TRUE)); + AssignCommand(oPC,Transition(oDest)); + if (!CheckFeatherFall(oPC))// If has feather fall they will never take damage. + { + int iMonk = GetLevelByClass(CLASS_TYPE_MONK,oPC);// Monks dont take as much damage from falls + if (iMonk >= 18) iDepth = 0; + else if (iMonk >= 8)iDepth -= 5; + else if (iMonk >= 6)iDepth -=3; + else if (iMonk >= 4)iDepth -=2; + if (iDepth > 0) + { + int iDam = d6(iDepth); + AssignCommand(oPC,ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(iDam,DAMAGE_TYPE_BLUDGEONING,DAMAGE_POWER_ENERGY),oPC))); + } + } + } + else if (!iFallIn && !iJump) + { + AssignCommand(oPC,ClearAllActions(TRUE)); + AssignCommand(oPC,Transition(oDest)); + } + } + +// Will spawn a pit and transition link it at the PCs feet. +// If iFallIn is TRUE he will fall thru it on a failed Reflex Save. +// If iJump is TRUE he will fall thru and take damage. +void CreatePit(object oPC,int iFallIn = TRUE, int iJump = FALSE, object oTrap = OBJECT_SELF); +void CreatePit(object oPC,int iFallIn, int iJump, object oTrap) + { + //--------------------------DETERMINE PIT SPECIFICS------------------------ + // Create top of pit + object oPit = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_pit" + IntToString(d4()),GetLocation(oPC)); + // Determine bottom of pit + object oDest = DetermineDestination(TRUE); + // Get Danger Level, This is used to determine how hard the pit is to avoid. + int iDanger = GetLocalInt(oTrap,"Danger"); + // Scale Fall Distance + int iDepth = 20 - ScaledDC(PartyLevel(oPC)); + if (iDepth < 1) iDepth = 1; // Pits are always at least 1d6 damage + if (iDepth > 20) iDepth = 20; //Pits are NEVER more than 20 d6 damage. + // -------------------------APPLY PIT SPECIFICS--------------------------- + int iDC = GetReflexSaveDC(PartyLevel(oPC),iDanger); + SetLocalInt(oPit,"Danger",iDanger); + SetLocalInt(oPit,"Reflex",iDC); + SetLocalInt(oPit,"Dice",iDepth); + LinkTransitions(oDest,oPit); // Marks Fall waypoint so not used by RDG again. Establishes a link the rope conversation can use. + if (iFallIn || iJump) + TransitionPit(oPC,iFallIn,iJump,iDC,iDepth,oPit,oDest); + SetTrapDisabled(oTrap); + } + +// Applies trap effects to oTarget. +void ApplyTrap(object oTarget); +void ApplyTrap(object oTarget) + { + //---------------------------- PITS --------------------------------------- + if (GetLocalInt(OBJECT_SELF,"Pit")) + { + DeleteLocalInt(OBJECT_SELF,"Pit");// Had to add this to prevent pit trapped doors from having odd transitions + CreatePit(oTarget,TRUE); + return; + } + //---------------------------- DETERMINE TRAP SPECIFICS ------------------- + object oTrap = OBJECT_SELF; + int iPartyLevel = PartyLevel(oTarget); + location lLoc = GetLocation(oTarget); + //Determine if Area of Effect Trap. + int iAOE = GetLocalInt(oTrap,"AOE"); + // Determine weak to fatal trap type + int iDangerLevel = GetLocalInt(oTrap,"Danger"); + // Determine DamageType + int iType = GetLocalInt(oTrap,"DamageType"); + // Get Saving Throw + int iSave = GetLocalInt(OBJECT_SELF,"SaveThrow"); + //Determine Trap Damage + effect eDam; + int iDam,iDC; + if (iType == DAMAGE_TYPE_POISON) + eDam = GetPoisonType(iDangerLevel,iAOE); + else + { + iDam = GetTrapDamage(iPartyLevel,iDangerLevel); + iDC = GetReflexSaveDC(iPartyLevel,iDangerLevel); + } + // Determine Trap Visual Effect + effect eVis = GetVisualEffect(iAOE,iType); + //--------------------------- APPLY THE TRAP EFFECTS----------------------- + object oObject; + if (iAOE)//----------------------BEGIN AREA EFFECT TRAPS------------------- + { + // ----------------------- APPLY TRAP TO PRIMARY TARGET---------------- + if (iType != DAMAGE_TYPE_ELECTRICAL) + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eVis,lLoc,3.0); + // Apply Trap effect to Target. + if (iType == DAMAGE_TYPE_POISON) // Poison Traps + ApplyEffectToObject(DURATION_TYPE_PERMANENT,eDam,oTarget); + else //Non Poison Traps + { + if (iType == DAMAGE_TYPE_ELECTRICAL) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oTarget,2.0); + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(GetReflexAdjustedDamage(iDam,oTarget,iDC,iSave,OBJECT_SELF),iType),oTarget); + } + // --------------------- APPLY TRAP TO SECONDARY TARGETS--------------- + // Added this due to primary target was getting hit twice by AE effects. + oObject = GetFirstObjectInShape(SHAPE_SPHERE,8.0,lLoc,TRUE); + if (iType == DAMAGE_TYPE_POISON) // Poison Traps + { + while(GetIsObjectValid(oObject)) + { + if (oObject != oTarget) + ApplyEffectToObject(DURATION_TYPE_PERMANENT,eDam,oObject); + oObject = GetNextObjectInShape(SHAPE_SPHERE,8.0,lLoc,TRUE); + } + } + else //Non Poison Traps + { + while(GetIsObjectValid(oObject)) + { + if (oObject != oTarget) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(GetReflexAdjustedDamage(iDam,oTarget,iDC,iSave,OBJECT_SELF),iType),oTarget); + if (iType == DAMAGE_TYPE_ELECTRICAL) + {AssignCommand(oTarget, ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oObject,2.0));} + } + oObject = GetNextObjectInShape(SHAPE_SPHERE,8.0,lLoc,FALSE); + } + } + }// ------------------------END AREA OF EFFECT TRAPS------------------- + else + {// ------------------------BEGIN PERSONAL TRAPS----------------------- + if (iType == DAMAGE_TYPE_POISON) // Poison Traps + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oTarget,2.0); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,eDam,oTarget); + } + else // Non Poison Traps + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oTarget,2.0); + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(GetReflexAdjustedDamage(iDam,oTarget,iDC,iSave,OBJECT_SELF),iType),oTarget); + } + }//-------------------------END PERSONAL TRAPS------------------------- + SetTrapDisabled(OBJECT_SELF); + } + +// This function will reactivate all monster spawns in the dungeon. +void ResetMonsterSpawns(); +void ResetMonsterSpawns() + { + int iMon = GetLocalInt(GetModule(),"RoomMonsterWPs"); + int i; + object oWP, oArea, oMonster, oItem; + for (i = 1; i<= iMon; i+=1) + { + oWP = GetLocalObject(GetModule(),"MonsterWP"+IntToString(i)); + oArea = GetArea(oWP); + oMonster = GetFirstObjectInArea(oArea); + while(GetIsObjectValid(oMonster)) + { + if (GetObjectType(oMonster) == OBJECT_TYPE_CREATURE + && !GetIsPC(oMonster) + && !GetIsPC(GetMaster(oMonster))) + { + AssignCommand(oMonster,SetIsDestroyable(TRUE)); + DestroyObject(oMonster); + } + else if (GetTag(oMonster) == "X0_CORPSE") + { + oItem = GetFirstItemInInventory(oMonster); + while(GetIsObjectValid(oItem)) + { + SetPlotFlag(oItem,FALSE); + DestroyObject(oItem); + oItem = GetNextItemInInventory(oMonster); + } + DestroyObject(oMonster); + } + oMonster = GetNextObjectInArea(oArea); + } + DeleteLocalInt(oWP,"DoOnce"); + DeleteLocalInt(GetArea(oWP),"DoOnce"); + } + } + +// This function will reset the hidden treasure waypoints. +void ResetHiddenWaypoints(); +void ResetHiddenWaypoints() + { + int iCntr; + int iHidden = GetLocalInt(GetModule(),"HiddenTreasureWPs"); + object oHidden, oChest, oItem; + for (iCntr = 1; iCntr <= iHidden; iCntr+=1) + { + oHidden = GetLocalObject(GetModule(),"HiddenTreasure"+IntToString(iCntr)); + oChest = GetLocalObject(oHidden,"HiddenChest"); + if (GetIsObjectValid(oChest)) + { + oItem = GetFirstItemInInventory(oChest); + while(GetIsObjectValid(oItem)) + { + SetPlotFlag(oItem,FALSE); + DestroyObject(oItem); + oItem = GetNextItemInInventory(oChest); + } + SetPlotFlag(oChest,FALSE); + DestroyObject(oChest); + } + if (d100() <= ROOM_HIDDEN_TREASURE) + SetLocalInt(oHidden,"Active",TRUE); + else + DeleteLocalInt(oHidden,"Active"); + } + } +// Returns the highest skill rank in the party. +// This only counts PCs. +// Also only works if teh PC is in the same area as the caller +int GetHighestPartySkill(object oPartyMember,int iSkill); +int GetHighestPartySkill(object oPartyMember,int iSkill) + { + object oPC = GetFirstFactionMember(oPartyMember); + int iRank,iHigh; + while(GetIsObjectValid(oPC)) + { + if (GetIsPC(oPC)) + { + if (GetArea(oPC) == GetArea(OBJECT_SELF)) + { + iRank = GetSkillRank(iSkill,oPC); + if (iRank > iHigh) + iHigh = iRank; + } + oPC = GetNextFactionMember(oPartyMember); + } + } + return iHigh; + } + +// Returns the party member with the highest skill rank. +// This only counts PCs. +// Also only works if teh PC is in the same area as the caller +object GetHighestPartySkillMember(object oPartyMember,int iSkill); +object GetHighestPartySkillMember(object oPartyMember,int iSkill) + { + object oPC = GetFirstFactionMember(oPartyMember); + int iRank,iHigh; + object oHigh; + while(GetIsObjectValid(oPC)) + { + if (GetIsPC(oPC)) + { + if (GetArea(oPC) == GetArea(OBJECT_SELF)) + { + iRank = GetSkillRank(iSkill,oPC); + if (iRank > iHigh) + { + iHigh = iRank; + oHigh = oPC; + } + } + oPC = GetNextFactionMember(oPartyMember); + } + } + return oHigh; + } +//Returns true is a PC has food or a magical replacement. +int GetHasFood(object oPC); +int GetHasFood(object oPC) + { + object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC); + if (GetIsObjectValid(GetItemPossessedBy(oPC,"food"))) + return TRUE; + else if (GetLocalInt(oSkin,"misca079")) + return TRUE; + else if (GetLocalInt(oSkin,"miscb047")) + return TRUE; + else if (GetLocalInt(oSkin,"ring002")) + return TRUE; + else if (GetLocalInt(oSkin,"ring036")) + return TRUE; + else if (GetLocalInt(oSkin,"ring033")) + return TRUE; + else if (GetLocalInt(oPC,"Food")) + return TRUE; + return FALSE; + } +// This script is used for creating LARGE amounts of gold. +// Up to 500,000 gold pieces. +void CreateGold(int iGold, object oBox = OBJECT_SELF); +void CreateGold(int iGold, object oBox) + { + while (iGold > 50000) + { + CreateItemOnObject("nw_it_gold001",oBox,50000); + iGold = iGold - 50000; + } + CreateItemOnObject("nw_it_gold001",oBox,iGold); + } +// Returns TRUE if oPC in in an area with the "Town" variable set to TRUE. +int GetIsInTown(object oPC = OBJECT_SELF); +int GetIsInTown(object oPC) + { + return GetLocalInt(GetArea(oPC),"Town"); + } +// Returns TRUE is oPC has a item activated that gives them a rest. +int HasRestGivingItem(object oPC); +int HasRestGivingItem(object oPC) + { + object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + if (GetLocalInt(oSkin,"miscb038")) return TRUE; + else if (GetLocalInt(oSkin,"miscb047")) return TRUE; + return FALSE; + } + +int HasAvailableRest(object oPC); +int HasAvailableRest(object oPC) + { + if (HasRestGivingItem(oPC)) return TRUE; + else if (GetLocalInt(oPC,"Rest")) return TRUE; + return FALSE; + } + +// Returns true if all the party has rested. +int GetHasAllPartyRested(object oPC); +int GetHasAllPartyRested(object oRester) + { + object oPC = GetFirstFactionMember(oRester); + while(GetIsObjectValid(oPC)) + { + if (!GetIsDead(oPC)) // Dead PC's dont count + { + if (!GetIsInTown(oPC)) // PC's in Town don't count + { + if (!HasRestGivingItem(oPC))// PCs with Free rest ability dont count. + { + if (GetLocalInt(oPC,"Rest")) + return FALSE; + } + } + } + oPC = GetNextFactionMember(oRester); + } + return TRUE; + } + +// Destroys food in a PC inventory if they have any. +void EatFood(object oPC); +void EatFood(object oPC) + { + if (GetLocalInt(oPC,"Food")) + DeleteLocalInt(oPC,"Food"); + else if (GetIsObjectValid(GetItemPossessedBy(oPC,"food"))) + DestroyObject(GetItemPossessedBy(oPC,"food")); + } + +// Resets the rest counter for the party. +void ResetPartyRests(object oRester); +void ResetPartyRests(object oRester) + { + object oPC = GetFirstFactionMember(oRester); + while(GetIsObjectValid(oPC)) + { + SetLocalInt(oPC,"Rest",TRUE); + SetPanelButtonFlash(oPC,PANEL_BUTTON_REST,FALSE); + oPC = GetNextFactionMember(oRester); + } + } + +// Determines if another party member is resting. +int IsAnotherPartyMemberResting(object oRester); +int IsAnotherPartyMemberResting(object oRester) + { + object oPC = GetFirstFactionMember(oRester); + while(GetIsObjectValid(oPC)) + { + if (GetIsResting(oPC)) + return TRUE; + oPC = GetNextFactionMember(oRester); + } + return FALSE; + } + +int GetRandomAbility(); +int GetRandomAbility() + { + int iRoll =d6(); + int iAbility; + switch (iRoll) + { + case 1:{iAbility = ABILITY_STRENGTH;break;} + case 2:{iAbility = ABILITY_DEXTERITY;break;} + case 3:{iAbility = ABILITY_CONSTITUTION;break;} + case 4:{iAbility = ABILITY_INTELLIGENCE;break;} + case 5:{iAbility = ABILITY_WISDOM;break;} + case 6:{iAbility = ABILITY_CHARISMA;break;} + } + return iAbility; + } + +void NotifyPartyAverageLevel(object oPC); +void NotifyPartyAverageLevel(object oPC) + { + object oLeader = GetFactionLeader(oPC); + int iAPL = PartyLevel(oPC); + SendMessageToPC(oLeader,"Average Party Level is: "+IntToString(iAPL)); + } + +int GetMinLevelXP(object oPC,int iLevel = 0); +int GetMinLevelXP(object oPC,int iLevel) + { + int nHD = GetHitDice(oPC) + iLevel; + int nMinXPForLevel = ((nHD * (nHD - 1)) / 2) * 1000; + return nMinXPForLevel; + } + +//::void main () {} \ No newline at end of file diff --git a/src/hakpak/rdg_prc8_top/nss/inc_mod_constant.nss b/src/hakpak/rdg_prc8_top/nss/inc_mod_constant.nss new file mode 100644 index 0000000..5df0736 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/inc_mod_constant.nss @@ -0,0 +1,88 @@ +// This file can be modified to change the over all properties of the dungeon to your taste. + +// This variable will determine if the characters should be exprted often. +// This variable should be set to FALSE if playing a local vault game. +// Variable should be set to TRUE if a Server Vault Game. +const int EXPORT_CHARACTERS = FALSE;//TRUE; + +//Number of Areas in the dungeon. +//Each time a new area is added this number must be changed. +const int NUMBER_OF_AREAS = 16; + +// This will force a module restart if all the party is in the dungeon and the number of explored rooms exceed this number. +// This is used to replentish the traps in the dungeon. +const int RESET_AFTER_X_ROOMS = 10; + +// Chance of the party having its rest cycle reset. +const int SAFE_AREA_PERCENTAGE = 10;// Obsolete as of RDG 9 + +// Database name. +const string CAMPAIGN = "RDG9"; + +// If this variable is set to false XP will be awarded for each monster killed. +// If this variable is set to TRUE only "Boss" monsters will give XPs. +const int SLOW_XP = FALSE; + +// Chances of a special effect on a door. +const int NO_DOOR_PERCENTAGE = 5; // Door is not present (Area transition exists) +const int DOOR_OPEN_PERCENTAGE = 5; // Chance door is standing open and untrapped +const int DOOR_LOCKED_PERCENTAGE = 10; // Chance door is closed and locked. +const int JAMMED_DOOR = 25; // Percentage of doors locked doors that are actually jammed (can not be picked) +const int DOOR_TRAPED_PERCENTAGE = 10; // Chance door is traped. + +// Chances of contents of a room. +const int ROOM_TRAP_PERCENTAGE = 10; //10 Chance a trap placed in a room with be active. +const int ROOM_SECRET_DOOR = 1; //1 Chance of a secret door in the room +const int ROOM_DECOR = 30; //30 Chance of a decor object per decor WP +const int ROOM_HIDDEN_TREASURE = 1; //1 Chance of hidden treasure +const int WANDER_MONSTER_CHANCE = 12; // Chance for wander monster spawn +const int WANDER_MONSTER_TIMER = 600; // Number of seconds between each wandering monster check. +const int ROOM_MONSTER_CHANCE = 90; // Chance for room monster spawn +const int PLACEABLE_TRAP_PERCENTAGE = 20; // Chance that a placeable in the dungeon will be trapped. +// Type of trap chances. +// Note ALL must be determined. +// To turn a trap chance off set to 0. +// Each value must otherwise be 1 to 100. +// A d100 roll will determine trap type. +// If the roll is less than the value that trap power will be use other wise the +// next power will be tested. +const int TRAP_WEAK = 25; // d6 damage per level +const int TRAP_AVERAGE = 65; // d8 damage per level +const int TRAP_STRONG = 85; // d10 damage per level +const int TRAP_DEADLY = 95; // d12 damage per level +const int TRAP_FATAL = 200; // d20 damage per level CHANGING THIS VALUE LESS THAN 100 CAN CAUSE TRAPS TO BREAK +// Determines how many traps are area of effect +const int TRAP_AOE = 5; +// Determines Trap type +const int TRAP_MECHANICAL = 60; //60 These traps can be detected and disarmed by anyone +const int TRAP_ELEMENTAL = 95; // Rogue Only +const int TRAP_SPECIAL = 200; // Most of these traps have no defense if they go off. Should be kept rare. Changing this value less than 100 will result in an error. +// Determines how many mechanical traps are by default Pit Traps +const int TRAP_PIT = 50;// 10 + +// Determines chances that a hidden treasure is locked or trapped. +const int HIDDEN_TREASURE_LOCKED = 95; +const int HIDDEN_TREASURE_TRAPPED = 50; +// Determines base chances of contents of special hidden treasure. +const int CHEST_MODIFY_BY_LEVEL = TRUE; // Determines if Party Level should be added to base chances of loot. +const int CHEST_COIN = 50; // Chance of coin loot. +const int CHEST_GOODS = 50; // Chance of Gems and Art. +const int CHEST_ITEMS = 25; // Chance of Magic Items. +const int GENERATE_COIN = TRUE; // Will generate coin loot if no loot is determined. + + + +// ----Following Constants are used by the game system do not touch---- +/*const int DECOR_RUBBISH = 0; +const int DECOR_BATTLEFIELD = 1; +const int DECOR_TORTURE = 2; +const int DECOR_WIZARD = 4;*/ + +const int MONSTER_PEON = 0; +const int MONSTER_BOSS = 1; + + +const int DAMAGE_TYPE_POISON = 12000; +const int POISON_DEADLY = 12001; + +//void main(){} diff --git a/src/hakpak/rdg_prc8_top/nss/inc_prc_ecl.nss b/src/hakpak/rdg_prc8_top/nss/inc_prc_ecl.nss new file mode 100644 index 0000000..3ab42f7 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/inc_prc_ecl.nss @@ -0,0 +1,54 @@ +#include "prc_racial_const" +int GetECL(object oPC) +{ + int nECL = 0; + int nRace = GetRacialType(oPC); + switch(nRace) + { + case RACIAL_TYPE_DUERGAR: + case RACIAL_TYPE_AASIMAR: + case RACIAL_TYPE_TIEFLING: + case RACIAL_TYPE_HOBGOBLIN: + case RACIAL_TYPE_HALFOGRE: + case RACIAL_TYPE_HALFDROW: + case RACIAL_TYPE_GRAYORC: + case RACIAL_TYPE_AIR_GEN: + case RACIAL_TYPE_EARTH_GEN: + case RACIAL_TYPE_FIRE_GEN: + case RACIAL_TYPE_WATER_GEN: + case RACIAL_TYPE_SHADOWSWYFT: + case RACIAL_TYPE_LIZARDFOLK: + case RACIAL_TYPE_GNOLL: + nECL = 1; + break; + case RACIAL_TYPE_DROW_FEMALE: + case RACIAL_TYPE_DROW_MALE: + case RACIAL_TYPE_GITHYANKI: + case RACIAL_TYPE_GITHZERAI: + case RACIAL_TYPE_OROG: + case RACIAL_TYPE_OGRE: + case RACIAL_TYPE_PURE_YUAN: + case RACIAL_TYPE_THRIKREEN: + nECL = 2; + break; + case RACIAL_TYPE_AVARIEL: + case RACIAL_TYPE_DEEP_GNOME: + case RACIAL_TYPE_FORMIAN: + nECL = 3; + break; + case RACIAL_TYPE_AZER: + case RACIAL_TYPE_PIXIE: + nECL = 4; + break; + case RACIAL_TYPE_TROLL: + nECL = 5; + break; + case RACIAL_TYPE_RAKSHASA: + case RACIAL_TYPE_ABOM_YUAN: + case RACIAL_TYPE_ILLITHID: + nECL = 7; + break; + } + nECL += GetHitDice(oPC); + return nECL; +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_aurablnda.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_aurablnda.nss new file mode 100644 index 0000000..0babfaa --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_aurablnda.nss @@ -0,0 +1,48 @@ +//:://///////////////////////////////////////////// +//:: Aura of Blinding On Enter +//:: NW_S1_AuraBlndA.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Upon entering the aura of the creature the player + must make a will save or be blinded because of the + sheer ugliness or beauty of the creature. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 25, 2001 +//::////////////////////////////////////////////// +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ +//:: Declare major variables + object oNPC = GetAreaOfEffectCreator(); + object oTarget = GetEnteringObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDuration = 1 + (nHD/3); + + effect eBlind = EffectBlindness(); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eVis = EffectVisualEffect(VFX_IMP_BLIND_DEAF_M); + effect eLink = EffectLinkEffects(eBlind, eDur); + + //if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) {return;} + + //Entering object must make a will save or be blinded for the duration. + if(GetIsEnemy(oTarget, GetAreaOfEffectCreator())) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_AURA_BLINDING)); + if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC)) + { + //Apply the blind effect and the VFX impact + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration))); + } + } +} \ No newline at end of file diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_auracoldc.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_auracoldc.nss new file mode 100644 index 0000000..49cd95e --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_auracoldc.nss @@ -0,0 +1,62 @@ +//:://///////////////////////////////////////////// +//:: Aura of Frost on Heartbeat +//:: NW_S1_AuraColdC.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Prolonged exposure to the aura of the creature + causes frost damage to all within the aura. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 25, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "prc_inc_spells" +void main() +{ +//:: Declare major variables + object oNPC = GetAreaOfEffectCreator(); + object oTarget = GetEnteringObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nFrost = 1 + (nHD/3); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDamage; + + effect eDam; + effect eVis = EffectVisualEffect(VFX_IMP_FROST_S); + + //Get the first target in the aura of cold + oTarget = GetFirstInPersistentObject(); + + while (GetIsObjectValid(oTarget)) + { +/* if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) + { + oTarget = GetNextInPersistentObject(OBJECT_SELF); + continue; + } */ + if(GetIsEnemy(oTarget, GetAreaOfEffectCreator())) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_AURA_COLD)); + //Roll damage based on the creatures HD + nDamage = d4(nFrost); + //Make a Fortitude save for half + if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_COLD)) + { + nDamage = nDamage / 2; + } + //Set the damage effect + eDam = EffectDamage(nDamage, DAMAGE_TYPE_COLD); + //Apply the VFX constant and damage effect + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } + //Get the next target in the aura of cold + oTarget = GetNextInPersistentObject(); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_auraelecc.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_auraelecc.nss new file mode 100644 index 0000000..06994f4 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_auraelecc.nss @@ -0,0 +1,58 @@ +//:://///////////////////////////////////////////// +//:: Aura of Electricity on Heartbeat +//:: NW_S1_AuraElecC.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Prolonged exposure to the aura of the creature + causes electrical damage to all within the aura. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 25, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ +//:: Declare major variables + object oNPC = GetAreaOfEffectCreator(); + int nHD = GetHitDice(oNPC); + int nZap = 1 + (nHD / 3); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 + nCHAMod + (nHD/2); + int nDamage; + + effect eDam; + effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_S); + + //Get first target in spell area + object oTarget = GetFirstInPersistentObject(); + while (GetIsObjectValid(oTarget)) + { +/* if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) + { + oTarget = GetNextInPersistentObject(OBJECT_SELF); + continue; + } */ + if(GetIsEnemy(oTarget, GetAreaOfEffectCreator())) + { + nDamage = d4(nZap); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_AURA_ELECTRICITY)); + //Make a saving throw check + if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_ELECTRICITY)) + { + nDamage = nDamage / 2; + } + eDam = EffectDamage(nDamage, DAMAGE_TYPE_ELECTRICAL); + //Apply the VFX impact and effects + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget)); + DelayCommand(0.0f, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + //Get next target in spell area + oTarget = GetNextInPersistentObject(); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_aurafirec.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_aurafirec.nss new file mode 100644 index 0000000..a6b9638 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_aurafirec.nss @@ -0,0 +1,59 @@ +//:://///////////////////////////////////////////// +//:: Aura of Fire on Heartbeat +//:: NW_S1_AuraFireC.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Prolonged exposure to the aura of the creature + causes fire damage to all within the aura. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 25, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "prc_inc_spells" +void main() +{ +//:: Declare major variables + object oNPC = GetAreaOfEffectCreator(); + object oTarget = GetFirstInPersistentObject(); //:: Get first target in spell area + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nBurn = 1 + (nHD/3); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDamage; + int nDamSave; + + effect eDam; + effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S); + + while(GetIsObjectValid(oTarget)) + { +/* if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) + { + oTarget = GetNextInPersistentObject(OBJECT_SELF); + continue; + } */ + if(GetIsEnemy(oTarget, GetAreaOfEffectCreator())) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(GetAreaOfEffectCreator(), SPELLABILITY_AURA_FIRE)); + //Roll damage + nDamage = d4(nBurn); + //Make a saving throw check + if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_FIRE)) + { + nDamage = nDamage / 2; + } + //Set the damage effect + eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); + } + //Get next target in spell area + oTarget = GetNextInPersistentObject(); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_auramenca.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_auramenca.nss new file mode 100644 index 0000000..38a0a94 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_auramenca.nss @@ -0,0 +1,46 @@ +//:://///////////////////////////////////////////// +//:: Aura of Menace On Enter +//:: NW_S1_AuraMencA.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Upon entering the aura all those that fail + a will save are stricken with Doom. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 25, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ +//:: Declare major variables + object oNPC = GetAreaOfEffectCreator(); + object oTarget = GetEnteringObject(); + + //if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) {return;} + + int nDuration = 1 + (GetHitDice(oNPC)/3); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (GetHitDice(oNPC)/2); + int nLevel = PRCGetCasterLevel(OBJECT_SELF); + int nMetaMagic = PRCGetMetaMagicFeat(); + + effect eVis = EffectVisualEffect(VFX_IMP_DOOM); + effect eLink = CreateDoomEffectsLink(); + + if(GetIsEnemy(oTarget, GetAreaOfEffectCreator())) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_AURA_MENACE)); + //Spell Resistance and Saving throw + if (!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC)) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink , oTarget, TurnsToSeconds(nDuration)); + } + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_auraprota.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_auraprota.nss new file mode 100644 index 0000000..548f284 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_auraprota.nss @@ -0,0 +1,35 @@ +//:://///////////////////////////////////////////// +//:: Aura of Protection: On Enter +//:: NW_S1_AuraProtA.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Acts as a double strength Magic Circle against + evil and a Minor Globe for those friends in + the area. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On:Jan 8, 2002, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +//#include "wm_include" +void main() +{ + //Declare major variables + effect eProt = CreateProtectionFromAlignmentLink(ALIGNMENT_EVIL); + effect eGlobe = EffectSpellLevelAbsorption(3, 0); + effect eDur = EffectVisualEffect(VFX_DUR_GLOBE_MINOR); + + effect eLink = EffectLinkEffects(eProt, eGlobe); + eLink = EffectLinkEffects(eLink, eDur); + + object oTarget = GetEnteringObject(); + //if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) {return;} + //Faction Check + if(GetIsFriend(oTarget, GetAreaOfEffectCreator())) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_aurastuna.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_aurastuna.nss new file mode 100644 index 0000000..03d0aae --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_aurastuna.nss @@ -0,0 +1,48 @@ +//:://///////////////////////////////////////////// +//:: Aura Stunning On Enter +//:: NW_S1_AuraStunA.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Upon entering the aura of the creature the player + must make a will save or be stunned. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 25, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "prc_inc_spells" +void main() +{ +//:: Declare major variables + object oNPC = GetAreaOfEffectCreator(); + object oTarget = GetEnteringObject(); + + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDuration = GetHitDice(oNPC); + int nDC = 10 + nCHAMod + (nDuration/2); + + //if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) {return;} + + effect eVis = EffectVisualEffect(VFX_IMP_STUN); + effect eVis2 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED); + effect eDeath = EffectStunned(); + effect eLink = EffectLinkEffects(eVis2, eDeath); + + nDuration = GetScaledDuration(nDuration, oTarget); + + if(!GetIsFriend(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_AURA_STUN)); + //Make a saving throw check + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } + } +} \ No newline at end of file diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_auraunata.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_auraunata.nss new file mode 100644 index 0000000..a597062 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_auraunata.nss @@ -0,0 +1,48 @@ +//:://///////////////////////////////////////////// +//:: Aura of the Unnatural On Enter +//:: NW_S1_AuraMencA.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Upon entering the aura all animals are struck with + fear. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 25, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "prc_inc_spells" +void main() +{ +//:: Declare major variables + object oNPC = GetAreaOfEffectCreator(); + effect eVis = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR); + effect eFear = EffectFrightened(); + effect eLink = EffectLinkEffects(eVis, eFear); + object oTarget = GetEnteringObject(); + + //if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) {return;} + + int nDuration = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nRacial = GetRacialType(oTarget); + int nDC = 10 + nCHAMod + (GetHitDice(oNPC)/2); + + if(GetIsEnemy(oTarget)) + { + nDuration = (nDuration / 3) + 1; + //Make a saving throw check + if(nRacial == RACIAL_TYPE_ANIMAL) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(GetAreaOfEffectCreator(), SPELLABILITY_AURA_UNNATURAL)); + //if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR)) //:: This ability only affects animals & they don't get a save. + //{ + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)); + //} + } + } +} \ No newline at end of file diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_aurauneaa.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_aurauneaa.nss new file mode 100644 index 0000000..6f4a75b --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_aurauneaa.nss @@ -0,0 +1,46 @@ +//:://///////////////////////////////////////////// +//:: Aura Unearthly Visage On Enter +//:: NW_S1_AuraUnEaA.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Upon entering the aura of the creature the player + must make a will save or be killed because of the + sheer ugliness or beauty of the creature. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 25, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ +//:: Declare major variables + object oNPC = GetAreaOfEffectCreator(); + object oTarget = GetEnteringObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + + //if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) {return;} + + effect eDeath = EffectDeath(); + effect eVis = EffectVisualEffect(VFX_IMP_DEATH); + + if(GetIsEnemy(oTarget, oNPC)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_AURA_UNEARTHLY_VISAGE)); + //Make a saving throw check + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_DEATH)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget); + //ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltacid.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltacid.nss new file mode 100644 index 0000000..ef53a16 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltacid.nss @@ -0,0 +1,66 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Acid +//:: NW_S1_BltAcid +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Reflex or Will save is + needed to halve damage or avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION, oNPC); + int nDC = 10 +nCONMod+ (nHD/2); + int nCount = nHD/2; + if (nCount == 0) { nCount = 1; } + int nDamage = d6(nCount); + + effect eVis = EffectVisualEffect(VFX_IMP_ACID_S); + effect eBolt; + + //ankheg + if(GetAppearanceType(oNPC) == APPEARANCE_TYPE_BEETLE_SLICER) + { + nDamage = d4(4); + } + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_ACID)); + + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC,SAVING_THROW_TYPE_ACID); + + //Make a ranged touch attack + int nTouch = TouchAttackRanged(oTarget); + if(nTouch > 0) + { + if(nTouch == 2) + { + nDamage *= 2; + } + //Set damage effect + eBolt = EffectDamage(nDamage, DAMAGE_TYPE_ACID); + if(nDamage > 0) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltcharm.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltcharm.nss new file mode 100644 index 0000000..df11d65 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltcharm.nss @@ -0,0 +1,47 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Charm +//:: NW_S1_BltCharm +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Reflex or Will save is + needed to halve damage or avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +//#include "wm_include" +#include "NW_I0_SPELLS" +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = (nHD + 1) / 2; + nCount = GetScaledDuration(nCount, oTarget); + + effect eVis = EffectVisualEffect(VFX_IMP_CHARM); + effect eBolt = EffectCharmed(); + eBolt = GetScaledEffect(eBolt, oTarget); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eLink = EffectLinkEffects(eBolt, eDur); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_CHARM)); + //Make a saving throw check + if (!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS) && TouchAttackRanged(oTarget)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } +} \ No newline at end of file diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltchrdr.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltchrdr.nss new file mode 100644 index 0000000..e734580 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltchrdr.nss @@ -0,0 +1,48 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Charisma Drain +//:: NW_S1_BltChrDr +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Fortitude save is + needed to avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = nHD / 3; + if (nCount == 0) { nCount = 1; } + int nDamage = d6(nCount); + + effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + effect eBolt; + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_BOLT_ABILITY_DRAIN_CHARISMA)); + //Make a saving throw check + if (!/*Fort Save*/ PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE) && TouchAttackRanged(oTarget)) + { + eBolt = EffectAbilityDecrease(ABILITY_CHARISMA, nCount); + eBolt = SupernaturalEffect(eBolt); + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBolt, oTarget, RoundsToSeconds(nHD)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltcold.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltcold.nss new file mode 100644 index 0000000..657f0fe --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltcold.nss @@ -0,0 +1,60 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Cold +//:: NW_S1_BltCold +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Reflex or Will save is + needed to halve damage or avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = nHD/2; + if (nCount == 0) { nCount = 1; } + int nDamage = d6(nCount); + + effect eVis = EffectVisualEffect(VFX_IMP_FROST_S); + effect eBolt; + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_COLD)); + + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC,SAVING_THROW_TYPE_COLD); + + //Make a ranged touch attack + int nTouch = TouchAttackRanged(oTarget); + if(nTouch > 0) + { + if(nTouch == 2) + { + nDamage *= 2; + } + //Set damage effect + eBolt = EffectDamage(nDamage, DAMAGE_TYPE_COLD); + if(nDamage > 0) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltcondr.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltcondr.nss new file mode 100644 index 0000000..9d85f04 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltcondr.nss @@ -0,0 +1,48 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Constitution Drain +//:: NW_S1_BltConDr +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Fort save is + needed to avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = (nHD /3); + if (nCount == 0) { nCount = 1; } + int nDamage = d6(nCount); + + effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + effect eBolt; + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_ABILITY_DRAIN_CONSTITUTION)); + //Make a saving throw check + if (!/*Fort Save*/ PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE) && TouchAttackRanged(oTarget)) + { + eBolt = EffectAbilityDecrease(ABILITY_CONSTITUTION, nCount); + eBolt = SupernaturalEffect(eBolt); + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBolt, oTarget, RoundsToSeconds(nHD)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltconf.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltconf.nss new file mode 100644 index 0000000..5bed7dc --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltconf.nss @@ -0,0 +1,48 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Confuse +//:: NW_S1_BltConf +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Reflex or Will save is + needed to halve damage or avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +//#include "wm_include" +#include "NW_I0_SPELLS" +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = (nHD + 1) / 2; + nCount = GetScaledDuration(nCount, oTarget); + + effect eVis2 = EffectVisualEffect(VFX_IMP_CONFUSION_S); + effect eVis = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED); + effect eBolt = EffectConfused(); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eLink = EffectLinkEffects(eBolt, eDur); + eLink = EffectLinkEffects(eLink, eVis); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_CONFUSE)); + //Make a saving throw check + if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS) && TouchAttackRanged(oTarget)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget); + } +} \ No newline at end of file diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltdaze.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltdaze.nss new file mode 100644 index 0000000..68d15c7 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltdaze.nss @@ -0,0 +1,47 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Daze +//:: NW_S1_BltDaze +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Reflex or Will save is + needed to halve damage or avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +//#include "wm_include" +#include "NW_I0_SPELLS" +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = (nHD + 1) / 2; + nCount = GetScaledDuration(nCount, oTarget); + + effect eVis = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED); + effect eBolt = EffectDazed(); + eBolt = GetScaledEffect(eBolt, oTarget); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eLink = EffectLinkEffects(eBolt, eDur); + eLink = EffectLinkEffects(eLink, eVis); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_DAZE)); + //Make a saving throw check + if (!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS) && TouchAttackRanged(oTarget)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount)); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltdeath.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltdeath.nss new file mode 100644 index 0000000..e2cbcd7 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltdeath.nss @@ -0,0 +1,47 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Death +//:: NW_S1_BltDeath +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Reflex or Will save is + needed to halve damage or avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + + effect eVis = EffectVisualEffect(VFX_IMP_DEATH); + effect eBolt = EffectDeath(); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_DEATH)); + //Make a saving throw check + if(TouchAttackRanged(oTarget)) + { + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_DEATH)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget); + //ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltdexdr.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltdexdr.nss new file mode 100644 index 0000000..4ef34d8 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltdexdr.nss @@ -0,0 +1,48 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Dexterity Drain +//:: NW_S1_BltDexDr +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Fort save is + needed to avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = (nHD + 1) / 2; + if (nCount == 0) { nCount = 1; } + int nDamage = d6(nCount); + + effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + effect eBolt; + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_ABILITY_DRAIN_DEXTERITY)); + //Make a saving throw check + if (!/*Fort Save*/ PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE) && TouchAttackRanged(oTarget)) + { + eBolt = EffectAbilityDecrease(ABILITY_DEXTERITY, nCount); + eBolt = SupernaturalEffect(eBolt); + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBolt, oTarget, RoundsToSeconds(nHD)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltdisese.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltdisese.nss new file mode 100644 index 0000000..6513a06 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltdisese.nss @@ -0,0 +1,73 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Disease +//:: NW_S1_BltDisease +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to infect + the target with a disease. The disease used + is chosen based upon the racial type of the + caster. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nRacial = MyPRCGetRacialType(oNPC); + int nDisease; + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_DISEASE)); + + //Here we use the racial type of the attacker to select an + //appropriate disease. + switch (nRacial) + { + case RACIAL_TYPE_VERMIN: + nDisease = DISEASE_VERMIN_MADNESS; + break; + case RACIAL_TYPE_UNDEAD: + nDisease = DISEASE_FILTH_FEVER; + break; + case RACIAL_TYPE_OUTSIDER: + if(GetTag(oNPC) == "NW_SLAADRED") + { + nDisease = DISEASE_RED_SLAAD_EGGS; + } + else + { + nDisease = DISEASE_DEMON_FEVER; + } + break; + case RACIAL_TYPE_MAGICAL_BEAST: + nDisease = DISEASE_SOLDIER_SHAKES; + break; + case RACIAL_TYPE_ABERRATION: + nDisease = DISEASE_BLINDING_SICKNESS; + break; + default: + nDisease = DISEASE_SOLDIER_SHAKES; + break; + } + //Assign effect and chosen disease + effect eBolt = EffectDisease(nDisease); + //Make the ranged touch attack. + if (TouchAttackRanged(oTarget)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBolt, oTarget); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltdomn.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltdomn.nss new file mode 100644 index 0000000..5027b45 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltdomn.nss @@ -0,0 +1,53 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Dominated +//:: NW_S1_BltDomn +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Reflex or Will save is + needed to halve damage or avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = (nHD + 1) / 2; + if (nCount == 0) { nCount = 1; } + nCount = GetScaledDuration(nCount, oTarget); + + effect eVis = EffectVisualEffect(VFX_IMP_DOMINATE_S); + effect eBolt = EffectDominated(); + eBolt = GetScaledEffect(eBolt, oTarget); + effect eVis2 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DOMINATED); + eBolt = GetScaledEffect(eBolt, oTarget); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eLink = EffectLinkEffects(eBolt, eDur); + eLink = EffectLinkEffects(eLink, eVis2); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_DOMINATE)); + + //Make a saving throw check + if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS) && TouchAttackRanged(oTarget)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltfire.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltfire.nss new file mode 100644 index 0000000..4f7a423 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltfire.nss @@ -0,0 +1,58 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Fire +//:: NW_S1_BoltFire +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Reflex or Will save is + needed to halve damage or avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = nHD/2; + if (nCount == 0) { nCount = 1; } + int nDamage = d6(nCount); + + effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S); + effect eBolt; + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_FIRE)); + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC,SAVING_THROW_TYPE_FIRE); + //Make a ranged touch attack + int nTouch = TouchAttackRanged(oTarget); + if(nTouch > 0) + { + if(nTouch == 2) + { + nDamage *= 2; + } + //Set damage effect + eBolt = EffectDamage(nDamage, DAMAGE_TYPE_FIRE); + if(nDamage > 0) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltintdr.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltintdr.nss new file mode 100644 index 0000000..f3ffbad --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltintdr.nss @@ -0,0 +1,48 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Intelligence Drain +//:: NW_S1_BltIntDr +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Reflex or Will save is + needed to halve damage or avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = (nHD + 1) / 2; + if (nCount == 0) { nCount = 1; } + int nDamage = d6(nCount); + + effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + effect eBolt; + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_ABILITY_DRAIN_INTELLIGENCE)); + //Make a saving throw check + if (!/*Fort Save*/ PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE) && TouchAttackRanged(oTarget)) + { + eBolt = EffectAbilityDecrease(ABILITY_INTELLIGENCE, nCount); + eBolt = SupernaturalEffect(eBolt); + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBolt, oTarget, RoundsToSeconds(nHD)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltknckd.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltknckd.nss new file mode 100644 index 0000000..6816964 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltknckd.nss @@ -0,0 +1,48 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Knockdown +//:: NW_S1_BltKnckD +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Reflex or Will save is + needed to halve damage or avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = nHD/2; + if (nCount == 0) { nCount = 1; } + + effect eVis = EffectVisualEffect(VFX_IMP_SONIC); + effect eBolt = EffectKnockdown(); + effect eDam = EffectDamage(d6(), DAMAGE_TYPE_BLUDGEONING); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_KNOCKDOWN)); + + //Make a saving throw check + if (!/*Reflex Save*/ PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC) && TouchAttackRanged(oTarget)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBolt, oTarget, RoundsToSeconds(3)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltlightn.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltlightn.nss new file mode 100644 index 0000000..024eafb --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltlightn.nss @@ -0,0 +1,59 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Lightning +//:: NW_S1_BltLightn +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Does 1d6 per level to a single target. Reflex + save for half +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Aug 10, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = nHD/2; + if (nCount == 0) { nCount = 1; } + int nDamage = d6(nCount); + + effect eLightning = EffectBeam(VFX_BEAM_LIGHTNING, OBJECT_SELF,BODY_NODE_HAND); + effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_S); + effect eBolt; + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_BOLT_LIGHTNING)); + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC,SAVING_THROW_TYPE_ELECTRICITY); + //Make a ranged touch attack + int nTouch = TouchAttackRanged(oTarget); + if(nTouch > 0) + { + if(nTouch == 2) + { + nDamage *= 2; + } + //Set damage effect + eBolt = EffectDamage(nDamage, DAMAGE_TYPE_ELECTRICAL); + if(nDamage > 0) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLightning, oTarget, 1.7); + } + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltlvldr.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltlvldr.nss new file mode 100644 index 0000000..e3f14ca --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltlvldr.nss @@ -0,0 +1,49 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Level Drain +//:: NW_S1_BltLvlDr +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Reflex or Will save is + needed to halve damage or avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = nHD/5; + if (nCount == 0) { nCount = 1; } + int nDamage = d6(nCount); + + effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + effect eBolt = EffectNegativeLevel(1); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_LEVEL_DRAIN)); + + //Make a saving throw check + if (!/*Fort Save*/ PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE) && TouchAttackRanged(oTarget)) + { + //eBolt = LEVEL DRAIN EFFECT + eBolt = SupernaturalEffect(eBolt); + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltparal.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltparal.nss new file mode 100644 index 0000000..e4a6b59 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltparal.nss @@ -0,0 +1,48 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Paralyze +//:: NW_S1_BltParal +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Reflex or Will save is + needed to halve damage or avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = (nHD + 1) / 2; + if (nCount == 0) { nCount = 1; } + nCount = GetScaledDuration(nCount, oTarget); + + effect eVis = EffectVisualEffect(VFX_DUR_PARALYZED); + effect eBolt = EffectParalyze(); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eLink = EffectLinkEffects(eBolt, eDur); + eLink = EffectLinkEffects(eLink, eVis); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_PARALYZE)); + //Make a saving throw check + if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC) && TouchAttackRanged(oTarget)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount)); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltpoison.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltpoison.nss new file mode 100644 index 0000000..8a34aca --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltpoison.nss @@ -0,0 +1,123 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Poison +//:: NW_S1_BltPoison.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Must make a ranged touch attack. If successful + the target is struck down with poison that + scales with level. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 22, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nRacial = MyPRCGetRacialType(OBJECT_SELF); + int nPoison; + + effect ePoison; + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_POISON)); + + //Determine the poison type based on the Racial Type and HD + switch (nRacial) + { + case RACIAL_TYPE_OUTSIDER: + if (nHD <= 9) + { + nPoison = POISON_QUASIT_VENOM; + } + else if (nHD > 9 && nHD < 13) + { + nPoison = POISON_BEBILITH_VENOM; + } + else if (nHD >= 13) + { + nPoison = POISON_PIT_FIEND_ICHOR; + } + break; + case RACIAL_TYPE_VERMIN: + if (nHD < 3) + { + nPoison = POISON_TINY_SPIDER_VENOM; + } + else if (nHD <= 3 && nHD < 6) + { + nPoison = POISON_SMALL_SPIDER_VENOM; + } + else if (nHD <= 6 && nHD < 9) + { + nPoison = POISON_MEDIUM_SPIDER_VENOM; + } + else if (nHD <= 9 && nHD < 12) + { + nPoison = POISON_LARGE_SPIDER_VENOM; + } + else if (nHD <= 12 && nHD < 15) + { + nPoison = POISON_HUGE_SPIDER_VENOM; + } + else if (nHD <= 15 && nHD < 18) + { + nPoison = POISON_GARGANTUAN_SPIDER_VENOM; + } + else if (nHD >= 18) + { + nPoison = POISON_COLOSSAL_SPIDER_VENOM; + } + break; + default: + if (nHD < 3) + { + nPoison = POISON_NIGHTSHADE; + } + else if (nHD <= 3 && nHD < 6) + { + nPoison = POISON_BLADE_BANE; + } + else if (nHD <= 6 && nHD < 9) + { + nPoison = POISON_BLOODROOT; + } + else if (nHD <= 9 && nHD < 12) + { + nPoison = POISON_LARGE_SPIDER_VENOM; + } + else if (nHD <= 12 && nHD < 15) + { + nPoison = POISON_LICH_DUST; + } + else if (nHD <= 15 && nHD < 18) + { + nPoison = POISON_DARK_REAVER_POWDER; + } + else if (nHD >= 18 ) + { + nPoison = POISON_BLACK_LOTUS_EXTRACT; + } + + break; + } + //Make a ranged touch attack + if (TouchAttackRanged (oTarget)) + { + ePoison = EffectPoison(nPoison); + //Apply effects + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoison, oTarget); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltshards.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltshards.nss new file mode 100644 index 0000000..1b96e2b --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltshards.nss @@ -0,0 +1,58 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Shards +//:: NW_S1_BltShard +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Reflex or Will save is + needed to halve damage or avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = (nHD + 1) / 2; + if (nCount == 0) { nCount = 1; } + int nDamage = d6(nCount); + + effect eBolt; + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_BOLT_SHARDS)); + + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC); + + //Make a ranged touch attack + int nTouch = TouchAttackRanged(oTarget); + if(nTouch > 0) + { + if(nTouch == 2) + { + nDamage *= 2; + } + //Set damage effect + eBolt = EffectDamage(nDamage, DAMAGE_TYPE_PIERCING, DAMAGE_POWER_PLUS_ONE); + if(nDamage > 0) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget); + } + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltslow.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltslow.nss new file mode 100644 index 0000000..bf4813a --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltslow.nss @@ -0,0 +1,47 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Slow +//:: NW_S1_BltSlow +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Reflex save is + needed to or avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: June 18 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = (nHD + 1) / 2; + if (nCount == 0) { nCount = 1; } + + effect eVis = EffectVisualEffect(VFX_IMP_SLOW); + effect eBolt = EffectSlow(); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eLink = EffectLinkEffects(eBolt, eDur); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_SLOW)); + //Make a saving throw check + if (!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS) && TouchAttackRanged(oTarget)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltstrdr.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltstrdr.nss new file mode 100644 index 0000000..dd03161 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltstrdr.nss @@ -0,0 +1,48 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Strength Drain +//:: NW_S1_BltStrDr +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Fort save is + needed to avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = (nHD + 1) / 2; + if (nCount == 0) { nCount = 1; } + int nDamage = d6(nCount); + + effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + effect eBolt; + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_BOLT_ABILITY_DRAIN_STRENGTH)); + //Make a saving throw check + if (!/*Fort Save*/ PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE) && TouchAttackRanged(oTarget)) + { + eBolt = EffectAbilityDecrease(ABILITY_STRENGTH, nCount); + eBolt = SupernaturalEffect(eBolt); + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBolt, oTarget, RoundsToSeconds(nHD)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } +} \ No newline at end of file diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltstun.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltstun.nss new file mode 100644 index 0000000..1d77008 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltstun.nss @@ -0,0 +1,50 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Stun +//:: NW_S1_BltStun +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Reflex or Will save is + needed to halve damage or avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = (nHD + 1) / 2; + if (nCount == 0) { nCount = 1; } + nCount = GetScaledDuration(nCount, oTarget); + int nDamage = d6(nCount); + + effect eVis = EffectVisualEffect(VFX_IMP_STUN); + effect eBolt = EffectStunned(); + eBolt = GetScaledEffect(eBolt, oTarget); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eLink = EffectLinkEffects(eBolt, eDur); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_STUN)); + //Make a saving throw check + if (!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS) && TouchAttackRanged(oTarget)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltweb.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltweb.nss new file mode 100644 index 0000000..9ed210a --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltweb.nss @@ -0,0 +1,44 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Web +//:: NW_S1_BltWeb +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Glues a single target to the ground with + sticky strands of webbing. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 28, 2002 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION, oNPC); + int nDC = 10 +nCONMod+ (nHD/2); + int nCount = 1 + (nHD /2); + if (nCount == 0) { nCount = 1; } + + effect eVis = EffectVisualEffect(VFX_DUR_WEB); + effect eStick = EffectEntangle(); + effect eLink = EffectLinkEffects(eVis, eStick); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_WEB)); + //Make a saving throw check + if (!PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC) && TouchAttackRanged(oTarget)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount)); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_bltwisdr.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltwisdr.nss new file mode 100644 index 0000000..49643c0 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_bltwisdr.nss @@ -0,0 +1,48 @@ +//:://///////////////////////////////////////////// +//:: Bolt: Wisdom Drain +//:: NW_S1_BltWisDr +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature must make a ranged touch attack to hit + the intended target. Fort save is + needed to avoid effect. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nCount = (nHD /3); + if (nCount == 0) { nCount = 1; } + int nDamage = d6(nCount); + + effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + effect eBolt; + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_BOLT_ABILITY_DRAIN_WISDOM)); + //Make a saving throw check + if (!/*Fort Save*/ PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE) && TouchAttackRanged(oTarget)) + { + eBolt = EffectAbilityDecrease(ABILITY_WISDOM, nCount); + eBolt = SupernaturalEffect(eBolt); + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBolt, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_coneacid.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_coneacid.nss new file mode 100644 index 0000000..97d9393 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_coneacid.nss @@ -0,0 +1,76 @@ +//:://///////////////////////////////////////////// +//:: Cone: Acid +//:: NW_S1_ConeAcid +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A cone of damage eminated from the monster. Does + a set amount of damage based upon the creatures HD + and can be halved with a Reflex Save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDamage; + int nLoop = nHD / 3; + + float fDelay; + + if(nLoop == 0) + { + nLoop = 1; + } + + //Calculate the damage + for (nLoop; nLoop > 0; nLoop--) + { + nDamage = nDamage + d6(2); + } + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eCone; + effect eVis = EffectVisualEffect(VFX_IMP_ACID_S); + + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + //Get first target in spell area + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_CONE_ACID)); + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_ACID); + //Set damage effect + eCone = EffectDamage(nDamage, DAMAGE_TYPE_ACID); + if(nDamage > 0) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eCone, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + } +} + + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_conecold.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_conecold.nss new file mode 100644 index 0000000..50f2a0c --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_conecold.nss @@ -0,0 +1,76 @@ +//:://///////////////////////////////////////////// +//:: Cone: Cold +//:: NW_S1_ConeCold +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A cone of damage eminated from the monster. Does + a set amount of damage based upon the creatures HD + and can be halved with a Reflex Save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDamage; + int nLoop = nHD / 3; + + float fDelay; + + if(nLoop == 0) + { + nLoop = 1; + } + + //Calculate the damage + for (nLoop; nLoop > 0; nLoop--) + { + nDamage = nDamage + d6(2); + } + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eCone; + effect eVis = EffectVisualEffect(VFX_IMP_FROST_S); + + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + //Get first target in spell area + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_CONE_COLD)); + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_COLD); + //Set damage effect + eCone = EffectDamage(nDamage, DAMAGE_TYPE_COLD); + if(nDamage > 0) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eCone, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE); + } +} + + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_conedisea.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_conedisea.nss new file mode 100644 index 0000000..a1eb9b1 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_conedisea.nss @@ -0,0 +1,99 @@ +//:://///////////////////////////////////////////// +//:: Cone: Disease +//:: NW_S1_ConeDisea +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creature spits out a cone of disease that cannot + be avoided unless a Reflex save is made. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 22, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nRacial = MyPRCGetRacialType(oNPC); + int nDisease; + + location lTargetLocation = PRCGetSpellTargetLocation(); + + float fDelay; + + effect eCone = EffectDisease(nDisease); + effect eVis = EffectVisualEffect(VFX_IMP_DISEASE_S); + + + //Determine the disease type based on the Racial Type and HD + switch (nRacial) + { + case RACIAL_TYPE_OUTSIDER: + nDisease = DISEASE_DEMON_FEVER; + break; + case RACIAL_TYPE_VERMIN: + nDisease = DISEASE_VERMIN_MADNESS; + break; + case RACIAL_TYPE_UNDEAD: + if(nHD <= 3) + { + nDisease = DISEASE_ZOMBIE_CREEP; + } + else if (nHD > 3 && nHD <= 10) + { + nDisease = DISEASE_GHOUL_ROT; + } + else if(nHD > 10) + { + nDisease = DISEASE_MUMMY_ROT; + } + default: + if(nHD <= 3) + { + nDisease = DISEASE_MINDFIRE; + } + else if (nHD > 3 && nHD <= 10) + { + nDisease = DISEASE_RED_ACHE; + } + else if(nHD > 10) + { + nDisease = DISEASE_SHAKES; + } + + + break; + } + + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + //Get first target in spell area + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != OBJECT_SELF) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_CONE_DISEASE)); + //Get the delay time + fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20; + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eCone, oTarget)); + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE); + + } +} + + + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_coneelec.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_coneelec.nss new file mode 100644 index 0000000..0dba225 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_coneelec.nss @@ -0,0 +1,78 @@ +//:://///////////////////////////////////////////// +//:: Cone: Lightning +//:: NW_S1_ConeElec +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A cone of damage eminates from the monster. Does + a set amount of damage based upon the creatures HD + and can be halved with a Reflex Save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDamage; + int nLoop = nHD / 3; + + float fDelay; + + if(nLoop == 0) + { + nLoop = 1; + } + + //Calculate the damage + for (nLoop; nLoop > 0; nLoop--) + { + nDamage = nDamage + d6(2); + } + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eLightning = EffectBeam(VFX_BEAM_LIGHTNING, oNPC, BODY_NODE_HAND); + effect eCone; + effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_S); + + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + //Get first target in spell area + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_CONE_LIGHTNING)); + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_ELECTRICITY); + //Set damage effect + eCone = EffectDamage(nDamage, DAMAGE_TYPE_ELECTRICAL); + if(nDamage > 0) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eLightning,oTarget,0.5)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eCone, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE); + } +} + + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_conesonic.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_conesonic.nss new file mode 100644 index 0000000..1ba25bf --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_conesonic.nss @@ -0,0 +1,75 @@ +//:://///////////////////////////////////////////// +//:: Cone: Sonic +//:: NW_S1_ConeSonic +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A cone of damage eminated from the monster. Does + a set amount of damage based upon the creatures HD + and can be halved with a Reflex Save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +#include "NW_I0_SPELLS" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDamage; + int nLoop = nHD / 3; + + float fDelay; + + if(nLoop == 0) + { + nLoop = 1; + } + + //Calculate the damage + for (nLoop; nLoop > 0; nLoop--) + { + nDamage = nDamage + d6(2); + } + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eCone; + effect eVis = EffectVisualEffect(VFX_IMP_SONIC); + + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + //Get first target in spell area + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != OBJECT_SELF) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_CONE_SONIC)); + //Determine effect delay + fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20; + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC,DAMAGE_TYPE_SONIC); + //Set damage effect + eCone = EffectDamage(nDamage, DAMAGE_TYPE_SONIC); + if(nDamage > 0) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eCone, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_dragfear.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_dragfear.nss new file mode 100644 index 0000000..0b5e882 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_dragfear.nss @@ -0,0 +1,119 @@ +//:://///////////////////////////////////////////// +//:: Dragon Breath Fear +//:: NW_S1_DragFear +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Calculates the proper DC Save for the + breath weapon based on the HD of the dragon. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 9, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" +void main() +{ + //if (WildMagicOverride()) { return; } + //Declare major variables + int nAge = GetHitDice(OBJECT_SELF); + int nCount; + int nDC; + float fDelay; + object oTarget; + effect eBreath = EffectFrightened(); + effect eFear = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR); + effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eLink = EffectLinkEffects(eBreath, eDur); + eLink = EffectLinkEffects(eLink, eFear); + + //Determine the duration and save DC + if (nAge <= 6) //Wyrmling + { + nDC = 13; + nCount = 1; + } + else if (nAge >= 7 && nAge <= 9) //Very Young + { + nDC = 15; + nCount = 2; + } + else if (nAge >= 10 && nAge <= 12) //Young + { + nDC = 17; + nCount = 3; + } + else if (nAge >= 13 && nAge <= 15) //Juvenile + { + nDC = 19; + nCount = 4; + } + else if (nAge >= 16 && nAge <= 18) //Young Adult + { + nDC = 21; + nCount = 5; + } + else if (nAge >= 19 && nAge <= 21) //Adult + { + nDC = 24; + nCount = 6; + } + else if (nAge >= 22 && nAge <= 24) //Mature Adult + { + nDC = 27; + nCount = 7; + } + else if (nAge >= 25 && nAge <= 27) //Old + { + nDC = 28; + nCount = 8; + } + else if (nAge >= 28 && nAge <= 30) //Very Old + { + nDC = 30; + nCount = 9; + } + else if (nAge >= 31 && nAge <= 33) //Ancient + { + nDC = 32; + nCount = 10; + } + else if (nAge >= 34 && nAge <= 37) //Wyrm + { + nDC = 34; + nCount = 11; + } + else if (nAge > 37) //Great Wyrm + { + nDC = 37; + nCount = 12; + } + PlayDragonBattleCry(); + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 14.0, PRCGetSpellTargetLocation(), TRUE); + //Get first target in spell area + while(GetIsObjectValid(oTarget)) + { + if(oTarget != OBJECT_SELF && !GetIsReactionTypeFriendly(oTarget)) + { + nCount = GetScaledDuration(nCount, oTarget); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_DRAGON_BREATH_FEAR)); + //Determine the effect delay time + fDelay = GetDistanceBetween(oTarget, OBJECT_SELF)/20; + //Make a saving throw check + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, OBJECT_SELF, fDelay)) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nCount))); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 14.0, PRCGetSpellTargetLocation(), TRUE); + } +} + + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_dragfeara.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_dragfeara.nss new file mode 100644 index 0000000..2bb5009 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_dragfeara.nss @@ -0,0 +1,45 @@ +//:://///////////////////////////////////////////// +//:: Aura of Fear On Enter +//:: NW_S1_DragFearA.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Upon entering the aura of the creature the player + must make a will save or be struck with fear because + of the creatures presence. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 25, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "prc_inc_spells" +void main() +{ + //Declare major variables + object oTarget = GetEnteringObject(); + //if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) {return;} + effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S); + effect eDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR); + effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eFear = EffectFrightened(); + effect eLink = EffectLinkEffects(eFear, eDur); + eLink = EffectLinkEffects(eLink, eDur2); + + int nHD = GetHitDice(GetAreaOfEffectCreator()); + int nDC = 10 + GetHitDice(GetAreaOfEffectCreator())/3; + int nDuration = GetScaledDuration(nHD, oTarget); + if(GetIsEnemy(oTarget, GetAreaOfEffectCreator())) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(GetAreaOfEffectCreator(), SPELLABILITY_AURA_FEAR)); + //Make a saving throw check + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_feroc3.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_feroc3.nss new file mode 100644 index 0000000..58a44cb --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_feroc3.nss @@ -0,0 +1,41 @@ +//:://///////////////////////////////////////////// +//:: Ferocity 3 +//:: NW_S1_Feroc3 +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + The Dex and Str of the target increases +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Aug 13, 2001 +//::////////////////////////////////////////////// + +void main() +{ +//:: Declare major variables + object oNPC = OBJECT_SELF; + + int nHD = GetHitDice(oNPC); + int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION); //:: Determine the duration by getting the con modifier + int nIncrease = 9; + int nDuration = 1 + nCONMod; + if(nDuration == 0) { nDuration = 1; } + + + effect eDex = EffectAbilityIncrease(ABILITY_DEXTERITY, nIncrease); + effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, nIncrease); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + effect eLink = EffectLinkEffects(eStr, eDex); + eLink = EffectLinkEffects(eLink, eDur); + eLink = ExtraordinaryEffect(eLink); //:: Make effect extraordinary + + //effect eVis = EffectVisualEffect(VFX_IMP_IMPROVE_ABILITY_SCORE); + SignalEvent(oNPC, EventSpellCastAt(oNPC, SPELLABILITY_FEROCITY_3, FALSE)); + if (nCONMod > 0) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oNPC, RoundsToSeconds(nDuration)); + //ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF) ; + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_gazechaos.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazechaos.nss new file mode 100644 index 0000000..7ac5727 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazechaos.nss @@ -0,0 +1,69 @@ +//:://///////////////////////////////////////////// +//:: Gaze: Destroy Law +//:: NW_S1_GazeChaos +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Cone shape that affects all within the AoE if they + fail a Will Save and are of Lawful alignment. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 13, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "x0_i0_match" + +void main() +{ +//-------------------------------------------------------------------------- +// Make sure we are not blind +//-------------------------------------------------------------------------- + if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF)) + { + FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE); + return; + } + + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eGaze = EffectDeath(); + effect eVis = EffectVisualEffect(VFX_IMP_DEATH); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC) + { + if(GetAlignmentLawChaos(oTarget) == ALIGNMENT_LAWFUL) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_DESTROY_LAW)); + //Determine effect delay + float fDelay = GetDistanceBetween(oNPC, oTarget)/20; + if(!/*WillSave*/PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_DEATH, oNPC, fDelay)) + { + //Apply the VFX impact and effects + //DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eGaze, oTarget)); + } + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_gazecharm.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazecharm.nss new file mode 100644 index 0000000..574800c --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazecharm.nss @@ -0,0 +1,76 @@ +//:://///////////////////////////////////////////// +//:: Gaze: Charm +//:: NW_S1_GazeCharm +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Cone shape that affects all within the AoE if they + fail a Will Save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 9, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "x0_i0_match" + +void main() +{ +//-------------------------------------------------------------------------- +// Make sure we are not blind +//-------------------------------------------------------------------------- + if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF)) + { + FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE); + return; + } + + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDuration = 1 + (nHD / 3); + if(nDuration == 0) { nDuration = 1; } + + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eGaze = EffectCharmed(); + + effect eVis = EffectVisualEffect(VFX_IMP_CHARM); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eVisDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE); + effect eLink = EffectLinkEffects(eDur, eVisDur); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != OBJECT_SELF) + { + nDuration = GetScaledDuration(nDuration, oTarget); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_CHARM)); + //Determine effect delay + float fDelay = GetDistanceBetween(oNPC, oTarget)/20; + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS, oNPC, fDelay)) + { + eGaze = GetScaledEffect(eGaze, oTarget); + eLink = EffectLinkEffects(eLink, eGaze); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration))); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + } +} + + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_gazeconfu.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazeconfu.nss new file mode 100644 index 0000000..26c6de5 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazeconfu.nss @@ -0,0 +1,77 @@ +//:://///////////////////////////////////////////// +//:: Gaze: Confusion +//:: NW_S1_GazeConfu +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Cone shape that affects all within the AoE if they + fail a Will Save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 9, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "x0_i0_match" + +void main() +{ +//-------------------------------------------------------------------------- +// Make sure we are not blind +//-------------------------------------------------------------------------- + if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF)) + { + FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE); + return; + } + + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDuration = 1 + (nHD / 3); + if(nDuration == 0) { nDuration = 1; } + + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eGaze = EffectConfused(); + effect eVis = EffectVisualEffect(VFX_IMP_CONFUSION_S); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eVisDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED); + effect eLink = EffectLinkEffects(eDur, eVisDur); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC) + { + if(oTarget != oNPC) + { + nDuration = GetScaledDuration(nDuration , oTarget); + //Determine effect delay + float fDelay = GetDistanceBetween(oNPC, oTarget)/20; + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_CONFUSION)); + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS, oNPC, fDelay)) + { + eGaze = GetScaledEffect(eGaze, oTarget); + eLink = EffectLinkEffects(eLink, eGaze); + + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration))); + } + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + } +} \ No newline at end of file diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_gazedaze.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazedaze.nss new file mode 100644 index 0000000..b42e54c --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazedaze.nss @@ -0,0 +1,74 @@ +//:://///////////////////////////////////////////// +//:: Gaze: Daze +//:: NW_S1_GazeDaze +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Cone shape that affects all within the AoE if they + fail a Will Save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "x0_i0_match" + +void main() +{ +//-------------------------------------------------------------------------- +// Make sure we are not blind +//-------------------------------------------------------------------------- + if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF)) + { + FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE); + return; + } + + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDuration = 1 + (nHD / 3); + if(nDuration == 0) { nDuration = 1; } + + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eGaze = EffectDazed(); + effect eVis = EffectVisualEffect(VFX_IMP_DAZED_S); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eVisDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED); + effect eLink = EffectLinkEffects(eGaze, eVisDur); + eLink = EffectLinkEffects(eLink, eDur); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC) + { + nDuration = GetScaledDuration(nDuration , oTarget); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_DAZE)); + + //Determine effect delay + float fDelay = GetDistanceBetween(oNPC, oTarget)/20; + if(!/*WillSave*/PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS, oNPC, fDelay)) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration))); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_gazedeath.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazedeath.nss new file mode 100644 index 0000000..0540310 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazedeath.nss @@ -0,0 +1,66 @@ +//:://///////////////////////////////////////////// +//:: Gaze: Death +//:: NW_S1_GazeDeath +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Cone shape that affects all within the AoE if they + fail a Will Save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 9, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "x0_i0_match" + +void main() +{ +//-------------------------------------------------------------------------- +// Make sure we are not blind +//-------------------------------------------------------------------------- + if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF)) + { + FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE); + return; + } + + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eGaze = EffectDeath(); + effect eVis = EffectVisualEffect(VFX_IMP_DEATH); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) || oTarget != oNPC) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_DEATH)); + //Determine effect delay + float fDelay = GetDistanceBetween(oNPC, oTarget)/20; + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_DEATH, oNPC, fDelay)) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eGaze, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_gazedomn.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazedomn.nss new file mode 100644 index 0000000..ffca7cb --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazedomn.nss @@ -0,0 +1,78 @@ +//:://///////////////////////////////////////////// +//:: Gaze: Dominate +//:: NW_S1_GazeDomn +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Cone shape that affects all within the AoE if they + fail a Will Save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 9, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "x0_i0_match" + +void main() +{ +//-------------------------------------------------------------------------- +// Make sure we are not blind +//-------------------------------------------------------------------------- + if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF)) + { + FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE); + return; + } + + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDuration = 1 + (nHD / 3); + if(nDuration == 0) { nDuration = 1; } + + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eGaze = EffectDominated(); + effect eVis = EffectVisualEffect(VFX_IMP_DOMINATE_S); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eVisDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DOMINATED); + effect eLink = EffectLinkEffects(eDur, eVisDur); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC) + { + nDuration = GetScaledDuration(nDuration , oTarget); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_DOMINATE)); + //Determine effect delay + float fDelay = GetDistanceBetween(oNPC, oTarget)/20; + if(GetIsEnemy(oTarget)) + { + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS, oNPC, fDelay)) + { + eGaze = GetScaledEffect(eGaze, oTarget); + eLink = EffectLinkEffects(eLink, eGaze); + + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration))); + } + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_gazedoom.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazedoom.nss new file mode 100644 index 0000000..adeed84 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazedoom.nss @@ -0,0 +1,74 @@ +//:://///////////////////////////////////////////// +//:: Gaze of Doom +//:: NW_S1_GazeDoom.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + If the target fails a save they recieve a -2 + penalty to all saves, attack rolls, damage and + skill checks for the duration of the spell. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Oct 22, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "x0_i0_match" + +void main() +{ +//-------------------------------------------------------------------------- +// Make sure we are not blind +//-------------------------------------------------------------------------- + if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF)) + { + FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE); + return; + } + + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDuration = 1 + (nHD / 3); + if(nDuration == 0) { nDuration = 1; } + + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eVis = EffectVisualEffect(VFX_IMP_DOOM); + effect eSaves = EffectSavingThrowDecrease(SAVING_THROW_ALL, 2); + effect eAttack = EffectAttackDecrease(2); + effect eDamage = EffectDamageDecrease(2); + effect eSkill = EffectSkillDecrease(SKILL_ALL_SKILLS, 2); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eLink = EffectLinkEffects(eAttack, eDamage); + eLink = EffectLinkEffects(eLink, eSaves); + eLink = EffectLinkEffects(eLink, eSkill); + eLink = EffectLinkEffects(eLink, eDur); + + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, PRCGetSpellTargetLocation()); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC) + { + if(oTarget != oNPC) + { + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_DOOM)); + //Spell Resistance and Saving throw + if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC)) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink , oTarget, RoundsToSeconds(nDuration)); + } + } + } + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, PRCGetSpellTargetLocation()); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_gazeevil.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazeevil.nss new file mode 100644 index 0000000..005d89d --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazeevil.nss @@ -0,0 +1,70 @@ +//:://///////////////////////////////////////////// +//:: Gaze: Deatroy Good +//:: NW_S1_GazeEvil +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Cone shape that affects all within the AoE if they + fail a Will Save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 13, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "x0_i0_match" + +void main() +{ +//-------------------------------------------------------------------------- +// Make sure we are not blind +//-------------------------------------------------------------------------- + if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF)) + { + FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE); + return; + } + + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDuration = 1 + (nHD / 3); + + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eGaze = EffectDeath(); + effect eVis = EffectVisualEffect(VFX_IMP_DEATH); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC) + { + if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_GOOD) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_DEATH)); + //Determine effect delay + float fDelay = GetDistanceBetween(oNPC, oTarget)/20; + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_DEATH, oNPC, fDelay)) + { + //Apply the VFX impact and effects + //DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eGaze, oTarget)); + } + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_gazefear.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazefear.nss new file mode 100644 index 0000000..534bb81 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazefear.nss @@ -0,0 +1,74 @@ +//:://///////////////////////////////////////////// +//:: Gaze: Fear +//:: NW_S1_GazeFear +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Cone shape that affects all within the AoE if they + fail a Will Save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 9, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "x0_i0_match" + +void main() +{ +//-------------------------------------------------------------------------- +// Make sure we are not blind +//-------------------------------------------------------------------------- + if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF)) + { + FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE); + return; + } + + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDuration = 1 + (nHD / 3); + if(nDuration == 0) { nDuration = 1; } + nDuration = GetScaledDuration(nDuration , oTarget); + + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eGaze = EffectFrightened(); + effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eVisDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR); + effect eLink = EffectLinkEffects(eGaze, eVisDur); + eLink = EffectLinkEffects(eLink, eDur); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + while(GetIsObjectValid(oTarget)) + { + nDuration = GetScaledDuration(nDuration , oTarget); + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_FEAR)); + //Determine effect delay + float fDelay = GetDistanceBetween(oNPC, oTarget)/20; + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, oNPC, fDelay)) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration))); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_gazegood.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazegood.nss new file mode 100644 index 0000000..3c55735 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazegood.nss @@ -0,0 +1,70 @@ +//:://///////////////////////////////////////////// +//:: Gaze: Deatroy Evil +//:: NW_S1_GazeGood +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Cone shape that affects all within the AoE if they + fail a Will Save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 13, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "x0_i0_match" + +void main() +{ +//-------------------------------------------------------------------------- +// Make sure we are not blind +//-------------------------------------------------------------------------- + if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF)) + { + FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE); + return; + } + + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDuration = 1 + (nHD / 3); + + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eGaze = EffectDeath(); + effect eVis = EffectVisualEffect(VFX_IMP_DEATH); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC) + { + if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_DEATH)); + //Determine effect delay + float fDelay = GetDistanceBetween(oNPC, oTarget)/20; + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_DEATH, oNPC, fDelay)) + { + //Apply the VFX impact and effects + //DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eGaze, oTarget)); + } + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_gazelaw.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazelaw.nss new file mode 100644 index 0000000..b79cf14 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazelaw.nss @@ -0,0 +1,71 @@ +//:://///////////////////////////////////////////// +//:: Gaze: Deatroy Chaos +//:: NW_S1_GazeLaw +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Cone shape that affects all within the AoE if they + fail a Will Save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 13, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "x0_i0_match" + +void main() +{ +//-------------------------------------------------------------------------- +// Make sure we are not blind +//-------------------------------------------------------------------------- + if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF)) + { + FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE); + return; + } + + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDuration = 1 + (nHD / 3); + if(nDuration == 0) { nDuration = 1; } + + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eGaze = EffectDeath(); + effect eVis = EffectVisualEffect(VFX_IMP_DEATH); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC) + { + if(GetAlignmentLawChaos(oTarget) == ALIGNMENT_CHAOTIC) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_DESTROY_LAW)); + //Determine effect delay + float fDelay = GetDistanceBetween(oNPC, oTarget)/20; + if(!/*WillSave*/PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_DEATH, oNPC, fDelay)) + { + //Apply the VFX impact and effects + //DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eGaze, oTarget)); + } + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_gazestun.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazestun.nss new file mode 100644 index 0000000..f1eb008 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_gazestun.nss @@ -0,0 +1,73 @@ +//:://///////////////////////////////////////////// +//:: Gaze: Stun +//:: NW_S1_GazeStun +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Cone shape that affects all within the AoE if they + fail a Will Save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 9, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "x0_i0_match" + +void main() +{ +//-------------------------------------------------------------------------- +// Make sure we are not blind +//-------------------------------------------------------------------------- + if (PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, OBJECT_SELF)) + { + FloatingTextStrRefOnCreature(84530, OBJECT_SELF, FALSE); + return; + } + + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDuration = 1 + (nHD / 3); + + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eGaze = EffectStunned(); + effect eVis = EffectVisualEffect(VFX_IMP_STUN); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eVisDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED); + effect eLink = EffectLinkEffects(eDur, eVisDur); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC) + { + nDuration = GetScaledDuration(nDuration , oTarget); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_GAZE_STUNNED)); + //Determine effect delay + float fDelay = GetDistanceBetween(oNPC, oTarget)/20; + if(!/*WillSave*/PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS, oNPC, fDelay)) + { + eGaze = GetScaledEffect(eGaze, oTarget); + eLink = EffectLinkEffects(eLink, eGaze); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration))); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_golemgas.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_golemgas.nss new file mode 100644 index 0000000..b9e4155 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_golemgas.nss @@ -0,0 +1,43 @@ +//:://///////////////////////////////////////////// +//:: Golem Breath +//:: NW_S1_GolemGas +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Iron Golem spits out a cone of poison. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 22, 2001 +//::////////////////////////////////////////////// + +#include "prc_inc_spells" + +//#include "wm_include" +void main() +{ + //if (WildMagicOverride()) { return; } + //Declare major variables + location lTargetLocation = PRCGetSpellTargetLocation(); + object oTarget; + effect eCone = EffectPoison(POISON_IRON_GOLEM); + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != OBJECT_SELF) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_GOLEM_BREATH_GAS)); + //Determine effect delay + float fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20; + //Apply poison effect + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eCone, oTarget)); + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE); + } +} + + + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_hndbreath.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_hndbreath.nss new file mode 100644 index 0000000..4851df7 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_hndbreath.nss @@ -0,0 +1,66 @@ +//:://///////////////////////////////////////////// +//:: Hell Hound Fire Breath +//:: NW_S1_HndBreath +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A cone of fire eminates from the hound. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION, oNPC); + int nDC = 10 +nCONMod+ (nHD/2); + int nDamage = d6(2); + + float fDelay; + + location lTargetLocation = PRCGetSpellTargetLocation(); + + effect eCone; + effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_HELL_HOUND_FIREBREATH)); + + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE); + + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + + //Set damage effect + eCone = EffectDamage(nDamage, DAMAGE_TYPE_FIRE); + if(nDamage > 0) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eCone, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE); + } +} + + + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_howlconf.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_howlconf.nss new file mode 100644 index 0000000..f9d770e --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_howlconf.nss @@ -0,0 +1,67 @@ +//:://///////////////////////////////////////////// +//:: Howl: Confuse +//:: NW_S1_HowlConf +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A howl emanates from the creature which affects + all within 20ft unless they make a save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/4); + int nDuration = 1 + (nHD/4); + if(nDuration == 0) { nDuration = 1; } + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_CONFUSION_S); + effect eHowl = EffectConfused(); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eDur2 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED); + effect eImpact = EffectVisualEffect(VFX_FNF_HOWL_MIND); + effect eLink = EffectLinkEffects(eHowl, eDur); + eLink = EffectLinkEffects(eLink, eDur2); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && !GetIsFriend(oTarget) && oTarget != oNPC) + { + nDuration = GetScaledDuration(nDuration , oTarget); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_HOWL_CONFUSE)); + fDelay = GetDistanceToObject(oTarget)/10; + //Make a saving throw check + if(!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS, oNPC, fDelay)) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration))); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC)); + } +} + + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_howldaze.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_howldaze.nss new file mode 100644 index 0000000..bd8e20c --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_howldaze.nss @@ -0,0 +1,65 @@ +//:://///////////////////////////////////////////// +//:: Howl: Daze +//:: NW_S1_HowlDaze +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A howl emanates from the creature which affects + all within 10ft unless they make a save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/4); + int nDuration = 1 + (nHD/4); + if(nDuration == 0) { nDuration = 1; } + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_DAZED_S); + effect eHowl = EffectDazed(); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eDur2 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED); + effect eImpact = EffectVisualEffect(VFX_FNF_HOWL_MIND); + effect eLink = EffectLinkEffects(eHowl, eDur); + eLink = EffectLinkEffects(eLink, eDur2); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && !GetIsFriend(oTarget) && oTarget != oNPC) + { + nDuration = GetScaledDuration(nDuration , oTarget); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_HOWL_DAZE)); + fDelay = GetDistanceToObject(oTarget)/10; + //Make a saving throw check + if(!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS, oNPC, fDelay)) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration))); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC)); + } +} \ No newline at end of file diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_howldeath.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_howldeath.nss new file mode 100644 index 0000000..5730647 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_howldeath.nss @@ -0,0 +1,59 @@ +//:://///////////////////////////////////////////// +//:: Howl: Death +//:: NW_S1_HowlDeath +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A howl emanates from the creature which affects + all within 10ft unless they make a save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/4); + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_DEATH); + effect eImpact = EffectVisualEffect(VFX_FNF_HOWL_ODD); + effect eHowl = EffectDeath(); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && !GetIsFriend(oTarget) && oTarget != oNPC) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_HOWL_DEATH)); + fDelay = GetDistanceToObject(oTarget)/10; + //Make a saving throw check + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_DEATH, oNPC, fDelay)) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget)); + //ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC)); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_howlfear.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_howlfear.nss new file mode 100644 index 0000000..13dcfaf --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_howlfear.nss @@ -0,0 +1,68 @@ +//:://///////////////////////////////////////////// +//:: Howl: Fear +//:: NW_S1_HowlFear +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A howl emanates from the creature which affects + all within 10ft unless they make a save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/4); + int nDuration = 1 + (nHD/4); + if(nDuration == 0) { nDuration = 1; } + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S); + effect eHowl = EffectFrightened(); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eDur2 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR); + effect eImpact = EffectVisualEffect(VFX_FNF_HOWL_MIND); + effect eLink = EffectLinkEffects(eHowl, eDur); + eLink = EffectLinkEffects(eLink, eDur2); + + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && !GetIsFriend(oTarget) && oTarget != oNPC) + { + fDelay = GetDistanceToObject(oTarget)/10; + nDuration = GetScaledDuration(nDuration , oTarget); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_HOWL_FEAR)); + + //Make a saving throw check + if(!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR)) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration))); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC)); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_howlparal.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_howlparal.nss new file mode 100644 index 0000000..b0ecd43 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_howlparal.nss @@ -0,0 +1,65 @@ +//:://///////////////////////////////////////////// +//:: Howl: Paralysis +//:: NW_S1_HowlParal +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A howl emanates from the creature which affects + all within 10ft unless they make a save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/4); + int nDuration = 1 + (nHD/4); + if(nDuration == 0) { nDuration = 1; } + + float fDelay; + + effect eHowl = EffectParalyze(); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eDur2 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD); + effect eImpact = EffectVisualEffect(VFX_FNF_HOWL_ODD); + effect eLink = EffectLinkEffects(eHowl, eDur); + eLink = EffectLinkEffects(eLink, eDur2); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && !GetIsFriend(oTarget) && oTarget != oNPC) + { + fDelay = GetDistanceToObject(oTarget)/10; + nDuration = GetScaledDuration(nDuration , oTarget); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_HOWL_PARALYSIS)); + + //Make a saving throw check + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_NONE, oNPC, fDelay)) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration))); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC)); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_howlsonic.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_howlsonic.nss new file mode 100644 index 0000000..4de9768 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_howlsonic.nss @@ -0,0 +1,65 @@ +//:://///////////////////////////////////////////// +//:: Howl: Sonic +//:: NW_S1_HowlSonic +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A howl emanates from the creature which affects + all within 10ft unless they make a save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/4); + int nDamage; + int nSonic = nHD/4; + if(nSonic == 0) { nSonic = 1; } + + effect eVis = EffectVisualEffect(VFX_IMP_SONIC); + effect eHowl; + effect eImpact = EffectVisualEffect(VFX_FNF_HOWL_WAR_CRY); + + float fDelay; + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsFriend(oTarget) && oTarget != oNPC) + { + fDelay = GetDistanceToObject(oTarget)/20; + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_HOWL_SONIC)); + nDamage = d6(nSonic); + //Make a saving throw check + if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_SONIC, oNPC, fDelay)) + { + nDamage = nDamage / 2; + } + //Set damage effect + eHowl = EffectDamage(nDamage, DAMAGE_TYPE_SONIC); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC)); + } +} \ No newline at end of file diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_howlstun.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_howlstun.nss new file mode 100644 index 0000000..962d9b9 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_howlstun.nss @@ -0,0 +1,66 @@ +//:://///////////////////////////////////////////// +//:: Howl: Stun +//:: NW_S1_HowlStun +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A howl emanates from the creature which affects + all within 10ft unless they make a save. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +//#include "wm_include" +#include "NW_I0_SPELLS" +#include "prc_inc_spells" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/4); + int nDuration = 1 + (nHD/4); + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_STUN); + effect eHowl = EffectStunned(); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eDur2 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED); + effect eImpact = EffectVisualEffect(VFX_FNF_HOWL_MIND); + effect eLink = EffectLinkEffects(eHowl, eDur); + eLink = EffectLinkEffects(eLink, eDur2); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && !GetIsFriend(oTarget) && oTarget != oNPC) + { + fDelay = GetDistanceToObject(oTarget)/10; + nDuration = GetScaledDuration(nDuration , oTarget); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_HOWL_STUN)); + + //Make a saving throw check + if(!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS)) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration))); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC)); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_krenscare.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_krenscare.nss new file mode 100644 index 0000000..738463e --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_krenscare.nss @@ -0,0 +1,61 @@ +//:://///////////////////////////////////////////// +//:: Krenshar Fear Stare +//:: NW_S1_KrenScare +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Causes those in the gaze to be struck with fear +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 8, 2002 +//::////////////////////////////////////////////// +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nMetaMagic = PRCGetMetaMagicFeat(); + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S); + effect eFear = EffectFrightened(); + effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + //Link the fear and mind effects + effect eLink = EffectLinkEffects(eFear, eMind); + eLink = EffectLinkEffects(eLink, eDur); + + + //Get first target in the spell cone + oTarget = GetFirstObjectInShape(SHAPE_CONE, 10.0, PRCGetSpellTargetLocation(), TRUE); + while(GetIsObjectValid(oTarget)) + { + //Make faction check + if(GetIsEnemy(oTarget)) + { + fDelay = GetDistanceToObject(oTarget)/20; + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_KRENSHAR_SCARE)); + //Make a will save + if(!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR)) + { + //Apply the linked effects and the VFX impact + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(3))); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + //Get next target in the spell cone + oTarget = GetNextObjectInShape(SHAPE_CONE, 10.0, PRCGetSpellTargetLocation(), TRUE); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_mephsalt.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_mephsalt.nss new file mode 100644 index 0000000..03b0b97 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_mephsalt.nss @@ -0,0 +1,63 @@ +//:://///////////////////////////////////////////// +//:: Salt Mephit Breath +//:: NW_S1_MephSalt +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Salt Mephit shoots out a bolt of corrosive material + that causes 1d4 damage and reduces AC and Attack by 2 + + This should be a cone - Jaysyn +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION, oNPC); + int nDC = 10 +nCONMod+ (nHD/2); + int nDamage = d4(); + + effect eVis = EffectVisualEffect(VFX_IMP_ACID_S); + effect eBolt, eAttack, eAC; + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_ACID); + + //Make a ranged touch attack + int nTouch = TouchAttackRanged(oTarget); + if(nDamage == 0) {nTouch = 0;} + if(nTouch > 0) + { + if(nTouch == 2) + { + nDamage *= 2; + } + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_MEPHIT_SALT_BREATH)); + + //Set damage, AC mod and attack mod effects + eBolt = EffectDamage(nDamage, DAMAGE_TYPE_ACID); + eAC = EffectACDecrease(2); + eAttack = EffectAttackDecrease(2); + effect eLink = EffectLinkEffects(eAttack, eAC); + eLink = EffectLinkEffects(eLink, eDur); + + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(3)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_mephsteam.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_mephsteam.nss new file mode 100644 index 0000000..9b46d89 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_mephsteam.nss @@ -0,0 +1,67 @@ +//:://///////////////////////////////////////////// +//:: Steam Mephit Breath +//:: NW_S1_MephSteam +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Steam Mephit shoots out a bolt of steam + that causes 1d4 damage and reduces AC by 4 + and Attack by 2 + + This should be a cone - Jaysyn +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 11, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION, oNPC); + int nDC = 10 +nCONMod+ (nHD/2); + int nDamage = d4(); + + + effect eVis = EffectVisualEffect(VFX_IMP_ACID_S); + effect eBolt, eAttack, eAC; + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + + + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE); + + //Make a ranged touch attack + int nTouch = TouchAttackRanged(oTarget); + if(nDamage == 0) {nTouch = 0;} + + if(nTouch > 0) + { + if(nTouch == 2) + { + nDamage *= 2; + } + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_MEPHIT_STEAM_BREATH)); + + //Set damage, AC mod and attack mod effects + eBolt = EffectDamage(nDamage, DAMAGE_TYPE_FIRE); + eAC = EffectACDecrease(4); + eAttack = EffectAttackDecrease(2); + effect eLink = EffectLinkEffects(eAC, eAttack); + eLink = EffectLinkEffects(eLink, eDur); + + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(3)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eBolt, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_mumundead.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_mumundead.nss new file mode 100644 index 0000000..f11db57 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_mumundead.nss @@ -0,0 +1,53 @@ +//:://///////////////////////////////////////////// +//:: Bolster Undead +//:: NW_S1_MumUndead +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This spell increases the Turn Resistance of + all undead around the caster by an amount + scaled with HD. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 22, 2002 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nScaling = nHD / 4; + + if(nScaling == 0) {nScaling = 1;} + + float fDelay; + + effect eTurn = EffectTurnResistanceIncrease(nScaling); + effect eVis = EffectVisualEffect(VFX_IMP_HEAD_EVIL); + effect eImpact = EffectVisualEffect(VFX_FNF_LOS_EVIL_30); + + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, GetLocation(oNPC)); + + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(GetIsFriend(oTarget)) + { + fDelay = GetRandomDelay(); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_MUMMY_BOLSTER_UNDEAD, FALSE)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eTurn, oTarget, RoundsToSeconds(10))); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oNPC)); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulschrdr.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulschrdr.nss new file mode 100644 index 0000000..b55902c --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulschrdr.nss @@ -0,0 +1,73 @@ +//:://///////////////////////////////////////////// +//:: Pulse: Charisma Drain +//:: NW_S1_PulsDeath +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A wave of energy emanates from the creature which affects + all within 10ft. Damage can be reduced by half for all + damaging variants. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + + int nDamage = nHD/5; + + if (nDamage == 0) {nDamage = 1;} + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + effect eHowl; + effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != oNPC) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_ABILITY_DRAIN_CHARISMA)); + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + //Make a saving throw check + if(!/*FortSave*/PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE, oNPC, fDelay)) + { + //Set the Ability mod and change to supernatural effect + eHowl = EffectAbilityDecrease(ABILITY_CHARISMA, nDamage); + eHowl = SupernaturalEffect(eHowl); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHowl, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + } + //Get first target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + } +} + + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulscold.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulscold.nss new file mode 100644 index 0000000..c5ff7d2 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulscold.nss @@ -0,0 +1,68 @@ +//:://///////////////////////////////////////////// +//:: Pulse: Cold +//:: NW_S1_PulsCold +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A wave of energy emanates from the creature which affects + all within 10ft. Damage can be reduced by half for all + damaging variants. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDamage = d6(nHD); + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_FROST_S); + effect eHowl; + effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_COLD); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != oNPC) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_COLD)); + + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_COLD); + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + eHowl = EffectDamage(nDamage, DAMAGE_TYPE_COLD); + if(nDamage > 0) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + } +} + + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulscondr.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulscondr.nss new file mode 100644 index 0000000..bfdbfcf --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulscondr.nss @@ -0,0 +1,71 @@ +//:://///////////////////////////////////////////// +//:: Pulse: Constitution Drain +//:: NW_S1_PulsDeath +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A wave of energy emanates from the creature which affects + all within 10ft. Damage can be reduced by half for all + damaging variants. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + + int nDamage = nHD/5; + + if (nDamage == 0) {nDamage = 1;} + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + effect eHowl; + effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != oNPC) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_ABILITY_DRAIN_CONSTITUTION)); + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + //Make a saving throw check + if(!/*FortSave*/PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE, oNPC, fDelay)) + { + //Set the Ability mod and change to supernatural effect + eHowl = EffectAbilityDecrease(ABILITY_CONSTITUTION, nDamage); + eHowl = SupernaturalEffect(eHowl); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHowl, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + } + //Get first target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsdeath.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsdeath.nss new file mode 100644 index 0000000..7c949d1 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsdeath.nss @@ -0,0 +1,68 @@ +//:://///////////////////////////////////////////// +//:: Pulse: Death +//:: NW_S1_PulsDeath +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A wave of energy emanates from the creature which affects + all within 10ft. Damage can be reduced by half for all + damaging variants. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + + int nDamage = nHD/5; + + if (nDamage == 0) {nDamage = 1;} + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_DEATH); + effect eHowl = EffectDeath(); + effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + if(oTarget != OBJECT_SELF) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_DEATH)); + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + if(!/*FortSave*/PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_DEATH, oNPC, fDelay)) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget)); + //DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + } +} + + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsdexdr.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsdexdr.nss new file mode 100644 index 0000000..d29872a --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsdexdr.nss @@ -0,0 +1,70 @@ +//:://///////////////////////////////////////////// +//:: Pulse: Dexterity Drain +//:: NW_S1_PulsDeath +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A wave of energy emanates from the creature which affects + all within 10ft. Damage can be reduced by half for all + damaging variants. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + + int nDamage = nHD/5; + + if (nDamage == 0) {nDamage = 1;} + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + effect eHowl; + effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != oNPC) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_ABILITY_DRAIN_DEXTERITY)); + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + //Make a saving throw check + if(!/*FortSave*/PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE, oNPC, fDelay)) + { + //Set the Ability mod and change to supernatural effect + eHowl = EffectAbilityDecrease(ABILITY_DEXTERITY, nDamage); + eHowl = SupernaturalEffect(eHowl); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHowl, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + } + //Get first target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsdis.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsdis.nss new file mode 100644 index 0000000..f81568c --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsdis.nss @@ -0,0 +1,85 @@ +//:://///////////////////////////////////////////// +//:: Pulse: Disease +//:: NW_S1_PulsDis +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A wave of disease spreads out from the creature + and infects all those within 10ft +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Aug 14, 2000 +//::////////////////////////////////////////////// +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nRacial = MyPRCGetRacialType(oNPC); + int nHD = GetHitDice(oNPC); + int nDamage = d6(nHD); + int nDisease; + + float fDelay; + + effect eDisease; + effect ePulse = EffectVisualEffect(266); + effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NATURE); + + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, ePulse, GetLocation(oNPC)); + + //Determine the disease type based on the Racial Type + switch (nRacial) + { + case RACIAL_TYPE_VERMIN: + nDisease = DISEASE_VERMIN_MADNESS; + break; + case RACIAL_TYPE_UNDEAD: + nDisease = DISEASE_FILTH_FEVER; + break; + case RACIAL_TYPE_OUTSIDER: + nDisease = DISEASE_DEMON_FEVER; + break; + case RACIAL_TYPE_MAGICAL_BEAST: + nDisease = DISEASE_SOLDIER_SHAKES; + break; + case RACIAL_TYPE_ABERRATION: + nDisease = DISEASE_BLINDING_SICKNESS; + break; + default: + nDisease = DISEASE_MINDFIRE; + break; + } + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != oNPC) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_PULSE_DISEASE)); + //Determine effect delay + fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20; + eDisease = EffectDisease(nDisease); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDisease, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + } +} + + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulselec.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulselec.nss new file mode 100644 index 0000000..2f85614 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulselec.nss @@ -0,0 +1,68 @@ +//:://///////////////////////////////////////////// +//:: Pulse: Lightning +//:: NW_S0_CallLghtn.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + All creatures within 10ft of the creature take + 1d6 per HD up to 10d6 +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 22, 2001 +//::////////////////////////////////////////////// +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDamage; + + effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_S); + effect eLightning = EffectBeam(VFX_BEAM_LIGHTNING, oNPC, BODY_NODE_CHEST); + effect eHowl = EffectVisualEffect(VFX_IMP_PULSE_COLD); + + DelayCommand(0.5, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eHowl, GetLocation(oNPC))); + + float fDelay; + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != oNPC) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_LIGHTNING)); + //Roll the damage + nDamage = d6(nHD); + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_ELECTRICITY); + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + eHowl = EffectDamage(nDamage, DAMAGE_TYPE_ELECTRICAL); + if(nDamage > 0) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eLightning,oTarget, 0.5)); + } + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsfire.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsfire.nss new file mode 100644 index 0000000..9270aa9 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsfire.nss @@ -0,0 +1,69 @@ +//:://///////////////////////////////////////////// +//:: Pulse: Fire +//:: NW_S1_PulsFire +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A wave of energy emanates from the creature which affects + all within 10ft. Damage can be reduced by half for all + damaging variants. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDamage; + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S); + effect eHowl; + effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_FIRE); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, OBJECT_SELF); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF)); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != OBJECT_SELF) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_PULSE_FIRE)); + //Roll the damage + nDamage = d6(nHD); + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE); + //Determine effect delay + fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20; + eHowl = EffectDamage(nDamage, DAMAGE_TYPE_FIRE); + if(nDamage > 0) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF)); + } +} + + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsholy.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsholy.nss new file mode 100644 index 0000000..20ae463 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsholy.nss @@ -0,0 +1,89 @@ +//:://///////////////////////////////////////////// +//:: Pulse: Holy +//:: NW_S1_PulsHoly +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A wave of energy emanates from the creature which affects + all within 10ft. Damage can be reduced by half for all + damaging variants. Undead are damaged, allies are healed. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDamage; + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_HEALING_M); + effect eVis2 = EffectVisualEffect(VFX_IMP_SUNSTRIKE); + effect eHowl; + effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_HOLY); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + //Roll the amount to heal or damage + nDamage = d4(nHD); + //If the target is not undead + if (MyPRCGetRacialType(oTarget) != RACIAL_TYPE_UNDEAD) + { + //Make a faction check + if(oTarget != oNPC) + { + if(GetIsFriend(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_HOLY, FALSE)); + //Set heal effect + eHowl = EffectHeal(nDamage); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + } + else + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_DIVINE); + //Set damage effect + eHowl = EffectDamage(nDamage, DAMAGE_TYPE_DIVINE) ; + if(nDamage > 0) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_HOLY)); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget)); + } + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsintdr.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsintdr.nss new file mode 100644 index 0000000..8558364 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsintdr.nss @@ -0,0 +1,72 @@ +//:://///////////////////////////////////////////// +//:: Pulse: Intelligence Drain +//:: NW_S1_PulsDeath +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A wave of energy emanates from the creature which affects + all within 10ft. Damage can be reduced by half for all + damaging variants. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + + int nDamage = nHD/5; + + if (nDamage == 0) {nDamage = 1;} + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + effect eHowl; + effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != oNPC) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_ABILITY_DRAIN_INTELLIGENCE)); + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + //Make a saving throw check + if(!/*FortSave*/PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE, oNPC, fDelay)) + { + //Set the Ability mod and change to supernatural effect + eHowl = EffectAbilityDecrease(ABILITY_INTELLIGENCE, nDamage); + eHowl = SupernaturalEffect(eHowl); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHowl, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + } + //Get first target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF)); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulslvldr.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulslvldr.nss new file mode 100644 index 0000000..f65e073 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulslvldr.nss @@ -0,0 +1,62 @@ +//:://///////////////////////////////////////////// +//:: Pulse: Level Drain +//:: NW_S1_PulsLvlDr +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A wave of energy emanates from the creature which affects + all within 10ft. Damage can be reduced by half for all + damaging variants. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = GetAreaOfEffectCreator(); + object oTarget = GetEnteringObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + effect eHowl; + effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE); + + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, GetLocation(oNPC)); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + + while(GetIsObjectValid(oTarget)) + { + if(oTarget != oNPC) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + fDelay = GetSpellEffectDelay(GetLocation(oNPC), oTarget)/20; + //Make a saving throw check + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE, oNPC, fDelay)) + { + //Apply the VFX impact and effects + eHowl = EffectNegativeLevel(1); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHowl, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsneg.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsneg.nss new file mode 100644 index 0000000..9bfa749 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsneg.nss @@ -0,0 +1,87 @@ +//:://///////////////////////////////////////////// +//:: Pulse: Negative +//:: NW_S1_PulsDeath +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A wave of energy emanates from the creature which affects + all within 10ft. Damage can be reduced by half for all + damaging variants. Undead are healed. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = GetAreaOfEffectCreator(); + object oTarget = GetEnteringObject(); + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + int nDamage; + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_HEALING_M); + effect eVis2 = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + effect eHowl; + effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != oNPC) + { + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + //Roll the amount to heal or damage + nDamage = d4(nHD); + //If the target is undead + if (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD) + { + //Make a faction check + if(GetIsFriend(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_HOLY, FALSE)); + //Set heal effect + eHowl = EffectHeal(nDamage); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + else + { + if(!GetIsReactionTypeFriendly(oTarget) && MyPRCGetRacialType(oTarget) != RACIAL_TYPE_UNDEAD) + { + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE); + //Set damage effect + eHowl = EffectDamage(nDamage, DAMAGE_TYPE_NEGATIVE); + if(nDamage > 0) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_HOLY)); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget)); + } + } + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulspois.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulspois.nss new file mode 100644 index 0000000..252ae3a --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulspois.nss @@ -0,0 +1,138 @@ +//:://///////////////////////////////////////////// +//:: Pulse: Poison +//:: NW_S1_PulsPois +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A wave of energy emanates from the creature which affects + all within 10ft. All who make a reflex save are not + poisoned. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 23, 2000 +//::////////////////////////////////////////////// +#include "prc_inc_racial" +//#include "wm_include" + +void main() +{ +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION, oNPC); + int nDC = 10 +nCONMod+ (nHD/2); + int nRacial = MyPRCGetRacialType(oNPC); + int nPoison; + + float fDelay; + + effect ePoison; + effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NATURE); + + //Determine the poison type based on the Racial Type and HD + switch (nRacial) + { + case RACIAL_TYPE_OUTSIDER: + if (nHD <= 9) + { + nPoison = POISON_QUASIT_VENOM; + } + else if (nHD > 9 && nHD < 13) + { + nPoison = POISON_BEBILITH_VENOM; + } + else if (nHD >= 13) + { + nPoison = POISON_PIT_FIEND_ICHOR; + } + break; + case RACIAL_TYPE_VERMIN: + if (nHD < 3) + { + nPoison = POISON_TINY_SPIDER_VENOM; + } + else if (nHD <= 3 && nHD < 6) + { + nPoison = POISON_SMALL_SPIDER_VENOM; + } + else if (nHD <= 6 && nHD < 9) + { + nPoison = POISON_MEDIUM_SPIDER_VENOM; + } + else if (nHD <= 9 && nHD < 12) + { + nPoison = POISON_LARGE_SPIDER_VENOM; + } + else if (nHD <= 12 && nHD < 15) + { + nPoison = POISON_HUGE_SPIDER_VENOM; + } + else if (nHD <= 15 && nHD < 18) + { + nPoison = POISON_GARGANTUAN_SPIDER_VENOM; + } + else if (nHD >= 18) + { + nPoison = POISON_COLOSSAL_SPIDER_VENOM; + } + break; + default: + if (nHD < 3) + { + nPoison = POISON_NIGHTSHADE; + } + else if (nHD <= 3 && nHD < 6) + { + nPoison = POISON_BLADE_BANE; + } + else if (nHD <= 6 && nHD < 9) + { + nPoison = POISON_BLOODROOT; + } + else if (nHD <= 9 && nHD < 12) + { + nPoison = POISON_LARGE_SPIDER_VENOM; + } + else if (nHD <= 12 && nHD < 15) + { + nPoison = POISON_LICH_DUST; + } + else if (nHD <= 15 && nHD < 18) + { + nPoison = POISON_DARK_REAVER_POWDER; + } + else if (nHD >= 18 ) + { + nPoison = POISON_BLACK_LOTUS_EXTRACT; + } + break; + } + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != oNPC) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_POISON)); + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + ePoison = EffectPoison(nPoison); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoison, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + } +} + + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsspore.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsspore.nss new file mode 100644 index 0000000..7e9e34d --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsspore.nss @@ -0,0 +1,50 @@ +//:://///////////////////////////////////////////// +//:: Vrock Spores +//:: NW_S1_PulsSpore +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A wave of disease spreads out from the creature + and infects all those within 10ft +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 8, 2002 +//::////////////////////////////////////////////// +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + float fDelay; + effect eDisease; + effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NATURE); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != oNPC) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_DISEASE)); + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + eDisease = EffectDisease(DISEASE_SOLDIER_SHAKES); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDisease, oTarget)); + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, GetLocation(oNPC)); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsstrdr.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsstrdr.nss new file mode 100644 index 0000000..5f88eab --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulsstrdr.nss @@ -0,0 +1,71 @@ +//:://///////////////////////////////////////////// +//:: Pulse: Strength Drain +//:: NW_S1_PulsDeath +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A wave of energy emanates from the creature which affects + all within 10ft. Damage can be reduced by half for all + damaging variants. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + + int nDamage = nHD/5; + + if (nDamage == 0) {nDamage = 1;} + + float fDelay; + + effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE); + effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + effect eHowl; + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != oNPC) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_ABILITY_DRAIN_STRENGTH)); + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + //Make a saving throw check + if(!/*FortSave*/PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE, oNPC, fDelay)) + { + //Set the Ability mod and change to supernatural effect + eHowl = EffectAbilityDecrease(ABILITY_STRENGTH, nDamage); + eHowl = SupernaturalEffect(eHowl); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHowl, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + } + //Get next target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulswind.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulswind.nss new file mode 100644 index 0000000..0572407 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulswind.nss @@ -0,0 +1,51 @@ +//:://///////////////////////////////////////////// +//:: Pulse Whirlwind +//:: NW_S1_PulsWind +//:: Copyright (c) 2001 Bioware Corp. +//:://///////////////////////////////////////////// +/* + All those that fail a save are knocked + down by the elemental whirlwind. +*/ +//:://///////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 8, 2002 +//:://///////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nSTRMod = GetAbilityModifier(ABILITY_STRENGTH, oNPC); + int nDC = 10 +nSTRMod+ (nHD/2); + + effect eDown = EffectKnockdown(); + effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_WIND); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oNPC); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != oNPC) + { + //Make a saving throw check + if(!PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDown, oTarget, 5.0); + } + //Get next target in spell area + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(oNPC)); + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_pulswisdr.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulswisdr.nss new file mode 100644 index 0000000..b1bf68c --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_pulswisdr.nss @@ -0,0 +1,68 @@ +//:://///////////////////////////////////////////// +//:: Pulse: Wisdom Drain +//:: NW_S1_PulsWisDr +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + A wave of energy emanates from the creature which affects + all within 10ft. Damage can be reduced by half for all + damaging variants. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 14, 2000 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget; + + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + + int nDamage = nHD/5; + + if (nDamage == 0) {nDamage = 1;} + + float fDelay; + + effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + effect eHowl; + effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, OBJECT_SELF); + + //Get first target in spell area + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, GetLocation(OBJECT_SELF)); + while(GetIsObjectValid(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget) && oTarget != OBJECT_SELF) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_PULSE_ABILITY_DRAIN_WISDOM)); + //Determine effect delay + fDelay = GetDistanceBetween(oNPC, oTarget)/20; + //Make a saving throw check + if(!/*FortSave*/PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE, oNPC, fDelay)) + { + //Set the Ability mod and change to supernatural effect + eHowl = EffectAbilityDecrease(ABILITY_WISDOM, nDamage); + eHowl = SupernaturalEffect(eHowl); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHowl, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + //Get first target in spell area + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, GetLocation(OBJECT_SELF)); + } +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_smokeclaw.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_smokeclaw.nss new file mode 100644 index 0000000..6db3666 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_smokeclaw.nss @@ -0,0 +1,64 @@ +//:://///////////////////////////////////////////// +//:: Smoke Claws +//:: NW_S1_SmokeClaw +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + If a Belker succeeds at a touch attack the + target breaths in part of the Belker and suffers + 3d4 damage per round until a Fortitude save is + made. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 23 , 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +//#include "wm_include" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + int nHD = GetHitDice(oNPC); + int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION, oNPC); + int nDC = 10 +nCONMod+ (nHD/2); + + int bSave = FALSE; + + effect eVis = EffectVisualEffect(VFX_COM_BLOOD_REG_RED); + effect eSmoke; + float fDelay = 0.0; + + //Make a touch attack + if(TouchAttackMelee(oTarget)) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + //Make a saving throw check + while (bSave == FALSE) + { + //Make a saving throw check + if(!/*FortSave*/PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE, oNPC, fDelay)) + { + bSave = TRUE; + } + else + { + //Set damage + eSmoke = EffectDamage(d4(3)); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eSmoke, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + //Increment the delay + fDelay = fDelay + 6.0; + } + } + } + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_smokeclawa.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_smokeclawa.nss new file mode 100644 index 0000000..1975f4a --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_smokeclawa.nss @@ -0,0 +1,42 @@ +/* + PROJECT Q IV + (c) 2022 by Pstemarie + + Belker Smoke Claws AOE OnEnter Event Script + + Creatures entering the AOE must make a Fort save or suffer 3d4 damage. + + Note: Uses the "nw_" prefix for name continuity with the OC spellscript + "nw_s1_smokeclaw". + + Version: 1.0 + Created: 7 June 2022 + Author: Pstemarie + +*/ +#include "prc_inc_spells" +#include "NW_I0_SPELLS" + +void main() +{ + //Declare major variables + object oTarget = GetEnteringObject(); + effect eDamage; + effect eHit = EffectVisualEffect(VFX_COM_BLOOD_REG_RED); + + if(GetIsEnemy(oTarget, GetAreaOfEffectCreator())) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_SMOKE_CLAW)); + + //Make a saving throw check + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, 14, SAVING_THROW_TYPE_POISON)) + { + eDamage = EffectDamage(d4(3)); + + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_INSTANT, eHit, oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget); + } + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_stink_a.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_stink_a.nss new file mode 100644 index 0000000..67652dd --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_stink_a.nss @@ -0,0 +1,57 @@ +//:://///////////////////////////////////////////// +//:: Stinking Cloud On Enter +//:: NW_S1_Stink_A.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Those within the area of effect must make a + fortitude save or be dazed. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 17, 2001 +//::////////////////////////////////////////////// + +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ +//:: Declare major variables + object oNPC = GetAreaOfEffectCreator(); + object oTarget = GetEnteringObject(); //Get the first object in the persistant area + + int nHD = GetHitDice(oNPC); + int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION, oNPC); + int nDC = 10 +nCONMod+ (nHD/2); + + effect eStink = EffectDazed(); + effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eLink = EffectLinkEffects(eMind, eStink); + eLink = EffectLinkEffects(eLink, eDur); + + effect eVis = EffectVisualEffect(VFX_IMP_DAZED_S); + + float fDelay; + + //if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) {return;} + + if(MyPRCGetRacialType(oTarget) != RACIAL_TYPE_VERMIN) + { + if(GetIsEnemy(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_STINKING_CLOUD)); + //Make a Fort Save + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_POISON)) + { + fDelay = GetRandomDelay(0.25, 1.0); + //Apply the VFX impact and linked effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(2))); + } + } + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_summmeph.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_summmeph.nss new file mode 100644 index 0000000..0cc7a62 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_summmeph.nss @@ -0,0 +1,82 @@ +//:://///////////////////////////////////////////// +//:: Summon Mephit +//:: NW_S1_SummMeph +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Summons a Mephit, type determined by caster +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Aug 14, 2001 +//::////////////////////////////////////////////// +#include "prc_inc_spells" + +// Applies a 1-hour cooldown to the summoned mephit +void WasteSummonSpell() +{ + object oSummoned = OBJECT_SELF; // The summoned creature + + location lSelf = GetLocation(oSummoned); + + effect eCooldown = EffectSpellFailure(100); + + eCooldown = EffectLinkEffects(SupernaturalEffect(eCooldown), TagEffect(eCooldown, "NO_SUMMON")); + + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCooldown, oSummoned, RoundsToSeconds(2)); + + AssignCommand(oSummoned, ActionCastSpellAtLocation(378/*SUMMON_MEPHIT*/, lSelf, METAMAGIC_ANY, FALSE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE)); + +} + + +void main() +{ + object oCaster = OBJECT_SELF; + string sCasterResRef = GetResRef(oCaster); + + // Roll d% for the 25% chance of summoning + int nRoll = d100(1); + if (nRoll > 25) + { + // Create a puff of smoke at the caster's location and play a fizzling sound + location lCaster = GetLocation(oCaster); + effect eSmoke = EffectVisualEffect(VFX_IMP_MAGIC_RESISTANCE_USE); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eSmoke, lCaster); + + // Play a sound effect to simulate the fizzle + PlaySound("sff_spellfail"); + + return; + } + + // Summon the mephit using the caster's ResRef + effect eSummon = EffectSummonCreature(sCasterResRef, VFX_FNF_SUMMON_MONSTER_2); + + // Handle metamagic: Extend Spell doubles the duration + int nMetaMagic = PRCGetMetaMagicFeat(); + float fDuration = HoursToSeconds(24); + if (nMetaMagic & METAMAGIC_EXTEND) fDuration *= 2; + + // Apply the summoning effect at the target location + location lTarget = PRCGetSpellTargetLocation(); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, lTarget, fDuration); + + // Find the summoned creature and apply a cooldown marker + DelayCommand(0.1, AssignCommand(GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCaster), WasteSummonSpell())); +} + + + + + +/* void main() +{ + //Declare major variables + int nMetaMagic = GetMetaMagicFeat(); + effect eSummon = EffectSummonCreature("NW_S_MEPSTEAM",VFX_FNF_SUMMON_MONSTER_1); + // effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_1); + //Apply the VFX impact and summon effect + //ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis, GetSpellTargetLocation()); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetSpellTargetLocation(), HoursToSeconds(24)); +} */ diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_trogstink.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_trogstink.nss new file mode 100644 index 0000000..38cfb7f --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_trogstink.nss @@ -0,0 +1,21 @@ +//:://///////////////////////////////////////////// +//:: Troglidyte Stench +//:: nw_s1_TrogStench.nss +//:: Copyright (c) 2004 Bioware Corp. +//::////////////////////////////////////////////// +/* + Objects entering the aura must make a fortitude saving + throw (DC 13) or suffer 1d6 points of Strength + Ability Damage +*/ +//::////////////////////////////////////////////// +//:: Created By: Craig Welburn +//:: Created On: Nov 6, 2004 +//::////////////////////////////////////////////// + +void main() +{ + effect eStench = EffectAreaOfEffect(AOE_MOB_TROGLODYTE_STENCH); + eStench = UnyieldingEffect(eStench); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStench, OBJECT_SELF); +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_trogstinka.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_trogstinka.nss new file mode 100644 index 0000000..108669c --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_trogstinka.nss @@ -0,0 +1,66 @@ +//:://///////////////////////////////////////////// +//:: Aura of Troglodyte Stench On Enter +//:: nw_s1_trogstinkA.nss +//:: Copyright (c) 2004 Bioware Corp. +//::////////////////////////////////////////////// +/* + Objects entering the Stench must make a fortitude + saving throw (DC 13) or suffer 1D6 points of + Strength Ability Damage. +*/ +//::////////////////////////////////////////////// +//:: Created By: Craig Welburn +//:: Created On: Nov 6, 2004 +//::////////////////////////////////////////////// +//#include "X0_I0_SPELLS" +#include "prc_inc_spells" + +//:: Modified to be CON based, like PnP - Jaysyn + +void main() +{ +//:: Declare major variables + object oTarget = GetEnteringObject(); + object oSource = GetAreaOfEffectCreator(); + + int nHD = GetHitDice(oSource); + int nCONMod = GetAbilityModifier(ABILITY_CONSTITUTION, oSource); + int nDC = 10 +nCONMod+ (nHD/2); + +//:: Declare all the required effects + effect eVis1; + effect eVis2; + effect eStrenghDrain; + + if(!GetHasSpellEffect(SPELLABILITY_TROGLODYTE_STENCH, oTarget)) + { + // Is the target a valid creature + if((GetIsEnemy(oTarget, oSource)) + && (GetIsReactionTypeFriendly(oTarget, oSource) != TRUE)) + { + // Notify the target that they are being attacked + SignalEvent(oTarget, EventSpellCastAt(oSource, AOE_MOB_TROGLODYTE_STENCH)); + + // Prepare the visual effect for the casting and saving throw + eVis1 = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE); + eVis2 = EffectVisualEffect(VFX_IMP_FORTITUDE_SAVING_THROW_USE); + + // Create the 1d6 strength reduction effect + // and make it supernatural so it can be dispelled + eStrenghDrain = EffectAbilityDecrease(ABILITY_STRENGTH, d6()); + eStrenghDrain = SupernaturalEffect(eStrenghDrain); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget); + + // Make a Fortitude saving throw, DC 13 and apply the effect if it fails + if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_POISON, oSource)) + { + if (GetIsImmune(oTarget, IMMUNITY_TYPE_POISON) == FALSE) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis1, oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eStrenghDrain, oTarget, RoundsToSeconds(10)); + } + } + } + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_tyrantfga.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_tyrantfga.nss new file mode 100644 index 0000000..a2752cb --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_tyrantfga.nss @@ -0,0 +1,56 @@ +//:://///////////////////////////////////////////// +//:: Tyrant Fog Zombie Mist Heartbeat +//:: NW_S1_TyrantFgA.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creatures entering the area around the zombie + must save or take 1 point of Constitution + damage. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 25, 2001 +//::////////////////////////////////////////////// +#include "NW_I0_SPELLS" +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = GetAreaOfEffectCreator(); + object oTarget = GetEnteringObject(); + //if (NullMagicOverride(GetArea(oTarget), oTarget, oTarget)) {return;} + + int bAbsent = TRUE; + int nHD = GetHitDice(oNPC); + int nCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oNPC); + int nDC = 10 +nCHAMod+ (nHD/2); + + effect eTest; + effect eCon = EffectAbilityDecrease(ABILITY_CONSTITUTION, 1); + eCon = ExtraordinaryEffect(eCon); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eLink = EffectLinkEffects(eCon, eDur); + + if(!GetHasSpellEffect(SPELLABILITY_TYRANT_FOG_MIST, oTarget)) + { + if(bAbsent == TRUE) + { + if(GetIsEnemy(oTarget, oNPC)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oNPC, SPELLABILITY_TYRANT_FOG_MIST)); + //Make a saving throw check + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_POISON)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(5)); + } + } + } + } +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s1_tyrantfog.nss b/src/hakpak/rdg_prc8_top/nss/nw_s1_tyrantfog.nss new file mode 100644 index 0000000..e3ab9e6 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s1_tyrantfog.nss @@ -0,0 +1,25 @@ +//:://///////////////////////////////////////////// +//:: Tyrant Fog Zombie Mist +//:: NW_S1_TyrantFog.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Creatures entering the area around the zombie + must save or take 1 point of Constitution + damage. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: May 25, 2001 +//::////////////////////////////////////////////// +//#include "wm_include" +#include "prc_inc_spells" + +void main() +{ + //if (WildMagicOverride()) { return; } + + //Declare and apply the AOE + effect eAOE = EffectAreaOfEffect(AOE_MOB_TYRANT_FOG); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAOE, OBJECT_SELF, HoursToSeconds(100)); +} diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s2_divprot.nss b/src/hakpak/rdg_prc8_top/nss/nw_s2_divprot.nss new file mode 100644 index 0000000..fff40ab --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s2_divprot.nss @@ -0,0 +1,45 @@ +//:://///////////////////////////////////////////// +//:: Divine Protection +//:: NW_S2_DivProt.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Makes the target creature invisible to hostile + creatures unless they make a Will Save to ignore + the Sanctuary Effect +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 8, 2002 +//::////////////////////////////////////////////// +#include "prc_inc_spells" +//#include "wm_include" +void main() +{ + //if (WildMagicOverride()) { return; } + +//:: Declare major variables + object oNPC = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + + effect eVis = EffectVisualEffect(VFX_DUR_SANCTUARY); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + int nDC = 10 + GetAbilityModifier(ABILITY_CHARISMA) + GetLevelByTypeDivine(oNPC); + effect eSanc = EffectSanctuary(nDC); + + effect eLink = EffectLinkEffects(eVis, eSanc); + eLink = EffectLinkEffects(eLink, eDur); + //Fire cast spell at event for the specified target + SignalEvent(OBJECT_SELF, EventSpellCastAt(oNPC, SPELLABILITY_DIVINE_PROTECTION, FALSE)); + + int nDuration = GetLevelByTypeDivine(oNPC); + //Enter Metamagic conditions + int nMetaMagic = PRCGetMetaMagicFeat(); + if (nMetaMagic == METAMAGIC_EXTEND) + { + nDuration = nDuration *2; //Duration is +100% + } + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)); +} + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s2_familiar.nss b/src/hakpak/rdg_prc8_top/nss/nw_s2_familiar.nss new file mode 100644 index 0000000..93d626e --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s2_familiar.nss @@ -0,0 +1,370 @@ +//:://///////////////////////////////////////////// +//:: Summon Familiar +//:: NW_S2_Familiar +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This spell summons an Arcane casters familiar +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Sept 27, 2001 +//::////////////////////////////////////////////// + +#include "inc_npc" +#include "prc_class_const" +#include "inc_misc_tools" +#include "inc_dynconv" +//#include "inc_dispel" +#include "prc_inc_assoc" +#include "prc_inc_template" + +const int PACKAGE_ELEMENTAL_STR = PACKAGE_ELEMENTAL; +const int PACKAGE_ELEMENTAL_DEX = PACKAGE_FEY; + +void BondedSummoner(object oPC); +void SummonPnPFamiliar(object oPC, int nType); +void SummonPRCFamiliar(object oPC); +void DreadNecro(object oPC); +void MasterShadow(object oPC); + + +void main() +{ + object oPC = OBJECT_SELF; + if (!GetHasGem(3,oPC)) + { + FloatingTextStringOnCreature("This power requires a gem worth at least 100 gold",oPC,FALSE); + return; + } + + if(GetLevelByClass(CLASS_TYPE_MASTER_OF_SHADOW, oPC)) + { + //handles summoning of shadow familiar + MasterShadow(oPC); + } + else if(GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oPC)) + { + //handles summoning of elemental familiar + BondedSummoner(oPC); + } + else if(GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oPC) > 6) + { + //handles dread necromancer familiar + DreadNecro(oPC); + } + else if(GetLevelByClass(CLASS_TYPE_CELEBRANT_SHARESS, oPC)) + { + //It's a PnP Cat familiar + SummonPnPFamiliar(oPC, 6); + } + else if(GetPRCSwitch(PRC_PNP_FAMILIARS)) + { + //handles summoning of pnp familiar + SummonPnPFamiliar(oPC, -1); + } + else if(GetPRCSwitch(PRC_FAMILIARS)//the switch is set + || (!GetLevelByClass(CLASS_TYPE_WIZARD, oPC) + && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC)))//or no bio-ware familiar + { + //handles summoning of familiars for PRC classes (witch, hexblade) + SummonPRCFamiliar(oPC); + } + else + //summon bio-ware familiar + SummonFamiliar(); + + object oFam; + int i; + int bDiabol = GetLevelByClass(CLASS_TYPE_DIABOLIST, oPC) >= 2; + int bPseudonat = GetHasFeat(FEAT_PSEUDONATURAL_FAMILIAR, oPC); + for(i = 1; i <= 5; i++) + { + oFam = GetAssociateNPC(ASSOCIATE_TYPE_FAMILIAR, oPC, i); + + if(bDiabol && GetAppearanceType(oFam) != APPEARANCE_TYPE_IMP) + DestroyAssociate(oFam); + + if(bPseudonat) + { + object oFamSkin = GetPCSkin(oFam); + ApplyPseudonatural(oFam, oFamSkin); + } + } +} + + + +void BondedSummoner(object oPC) +{ + object oFam = GetAssociateNPC(ASSOCIATE_TYPE_FAMILIAR, oPC, NPC_BONDED_FAMILIAR); + + //remove previously summoned familiar + if(GetIsObjectValid(oFam)) + DestroyAssociate(oFam); + + string sResRef, sElem; + int nPackage; + if(GetHasFeat(FEAT_BONDED_AIR, oPC)) + { + sElem = "air"; + nPackage = PACKAGE_ELEMENTAL_DEX; + } + else if(GetHasFeat(FEAT_BONDED_EARTH, oPC)) + { + sElem = "earth"; + nPackage = PACKAGE_ELEMENTAL_STR; + } + else if(GetHasFeat(FEAT_BONDED_FIRE, oPC)) + { + sElem = "fire"; + nPackage = PACKAGE_ELEMENTAL_DEX; + } + else if(GetHasFeat(FEAT_BONDED_WATER, oPC)) + { + sElem = "water"; + nPackage = PACKAGE_ELEMENTAL_STR; + } + + int nLevel = GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oPC); + + switch(nLevel) + { + case 1: + case 2: sResRef = "x1_s_"+sElem+"small"; break;//this is the 4HD version in the SRD, which is medium + case 3: + case 4: sResRef = "prc_s_"+sElem+"large"; break; + case 5: + case 6: sResRef = "nw_s_"+sElem+"huge"; break; + case 7: + case 8: sResRef = "nw_s_"+sElem+"great"; break; + case 9: + case 10: sResRef = "nw_s_"+sElem+"elder"; break; + } + + oFam = CreateLocalNPC(oPC, ASSOCIATE_TYPE_FAMILIAR, sResRef, PRCGetSpellTargetLocation(), NPC_BONDED_FAMILIAR); + AddAssociate(oPC, oFam); + + //set its name + string sName = GetFamiliarName(oPC); + if(sName == "") + sName = GetName(oPC)+ "'s Familiar"; + SetName(oFam, sName); + //apply bonus based on level + int nArcaneLevel = GetPrCAdjustedCasterLevelByType(TYPE_ARCANE) + nLevel/2; + object oSkin = GetPCSkin(oFam); + //in all cases + IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(ITEM_PROPERTY_IMPROVED_EVASION)); + //9+ levels + if(nArcaneLevel >= 9) + IPSafeAddItemProperty(oSkin, ItemPropertyBonusSpellResistance(GetSRByValue(nArcaneLevel+5))); + //11+ levels + if(nArcaneLevel >= 11) + ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(EffectMovementSpeedIncrease(30)), oFam); + //add their ondeath special + AddEventScript(oFam, EVENT_NPC_ONDEATH, "prc_bond_death"); + + /*int nAdjustLevel = nArcaneLevel - GetHitDice(oFam); + int n; + for(n = 1; nAdjustLevel >= n; n++) + LevelUpHenchman(oFam, CLASS_TYPE_INVALID, TRUE, nPackage);*/ + + //set it so the spell-share detects it + SetLocalObject(oPC, "Familiar", oFam); +} + +void DreadNecro(object oPC) +{ + object oFam = GetAssociateNPC(ASSOCIATE_TYPE_FAMILIAR, oPC, NPC_DN_FAMILIAR); + + //remove previously summoned familiar + if(GetIsObjectValid(oFam)) + DestroyAssociate(oFam); + + int bPnP = GetPRCSwitch(PRC_PNP_FAMILIARS); + int nAlign = GetAlignmentLawChaos(oPC); + string sResRef; + if(bPnP) + { + sResRef = nAlign == ALIGNMENT_LAWFUL ? "prc_pnpfam_imp" : nAlign == ALIGNMENT_CHAOTIC ? "prc_pnpfam_qust" : "prc_pnpfam_varg"; + } + else + { + int nDNLevel = GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oPC); + string sTemp = nDNLevel < 10 ? "0"+IntToString(nDNLevel) : IntToString(nDNLevel); + sResRef = nAlign == ALIGNMENT_LAWFUL ? "NW_FM_IMP"+sTemp : nAlign == ALIGNMENT_CHAOTIC ? "NW_FM_QUAS"+sTemp : "X2_FM_EYE0"+sTemp; + } + + oFam = CreateLocalNPC(oPC, ASSOCIATE_TYPE_FAMILIAR, sResRef, PRCGetSpellTargetLocation(), NPC_DN_FAMILIAR); + + //add the familiar as a henchman + AddAssociate(oPC, oFam); + + //set its name + string sName = GetFamiliarName(oPC); + if(sName == "") + sName = GetName(oPC)+ "'s Familiar"; + SetName(oFam, sName); + + if(bPnP) ApplyPnPFamiliarProperties(oPC, oFam); +} + +void SummonPnPFamiliar(object oPC, int nType) +{ + IncrementRemainingFeatUses(oPC, FEAT_SUMMON_FAMILIAR); + + //check if already has a familiar + object oFam = GetAssociateNPC(ASSOCIATE_TYPE_FAMILIAR, oPC, NPC_PNP_FAMILIAR); + object oFamToken = GetItemPossessedBy(oPC, "prc_pnp_familiar"); + + int nFamiliarType; + + if (nType > 0) + nFamiliarType = nType; + else + nFamiliarType = GetPersistantLocalInt(oPC, "PnPFamiliarType"); + if(!nFamiliarType) + { + StartDynamicConversation("prc_pnp_fam_conv", oPC, DYNCONV_EXIT_ALLOWED_SHOW_CHOICE, TRUE, TRUE, oPC); + return; + } + + if(GetIsObjectValid(oFam)) + { + //reapply familiar bonuses + PRCRemoveEffectsFromSpell(oFam, 318);//318 = summon familiar + } + else + { + if(GetIsObjectValid(oFamToken)) + { + DestroyObject(oFamToken, 0.1f); + } + //spawn the familiar + string sResRef = Get2DACache("prc_familiar", "BASERESREF", nFamiliarType); + oFam = CreateLocalNPC(oPC, ASSOCIATE_TYPE_FAMILIAR, sResRef, PRCGetSpellTargetLocation(), NPC_PNP_FAMILIAR); + + //set its name + string sName = GetFamiliarName(oPC); + if(sName == "") + sName = GetName(oPC)+ "'s Familiar"; + SetName(oFam, sName); + + //add the familiar as a henchman + AddAssociate(oPC, oFam); + } + + //this is the masters bonus + effect eBonus = GetMasterBonus(nFamiliarType); + eBonus = SupernaturalEffect(eBonus); + if(!GetHasFeatEffect(FEAT_SUMMON_FAMILIAR, oPC)) + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonus, oPC); + CheckIsValidFamiliar(oPC, eBonus); + } + + ApplyPnPFamiliarProperties(oPC, oFam); + if (GetHasFeat(FEAT_SHADOW_FAMILIAR, oPC)) ApplyTemplateToObject(TEMPLATE_DARK, oFam); +} + +void SummonPRCFamiliar(object oPC) +{ + object oFam = GetAssociateNPC(ASSOCIATE_TYPE_FAMILIAR, oPC, NPC_HENCHMAN_COMPANION); + + //remove previously summoned familiar + if(GetIsObjectValid(oFam)) + DestroyAssociate(oFam); + + int nFamiliarType = GetPersistantLocalInt(oPC, "FamiliarType"); + if(!nFamiliarType) + { + StartDynamicConversation("prc_pnp_fam_conv", oPC, DYNCONV_EXIT_ALLOWED_SHOW_CHOICE, TRUE, TRUE, oPC); + IncrementRemainingFeatUses(oPC, FEAT_SUMMON_FAMILIAR); + return; + } + else + nFamiliarType--; + + int nFamLevel = GetLevelByClass(CLASS_TYPE_WIZARD); + nFamLevel = PRCMax(nFamLevel, GetLevelByClass(CLASS_TYPE_SORCERER)); + nFamLevel = PRCMax(nFamLevel, GetLevelByClass(CLASS_TYPE_WITCH)); + nFamLevel = PRCMax(nFamLevel, GetLevelByClass(CLASS_TYPE_HEXBLADE)); + nFamLevel += GetLevelByClass(CLASS_TYPE_ALIENIST); + if (GetHasFeat(FEAT_SHADOW_FAMILIAR, oPC)) nFamLevel = GetLevelByTypeArcane(oPC) + GetShadowcasterLevel(oPC); // For the purpose of determining familiar abilities that depend on your arcane caster level, your levels in all classes that allow you to cast mysteries or arcane spells stack + + string sTemp = Get2DACache("hen_familiar", "BASERESREF", nFamiliarType); + string sResRef = nFamLevel < 10 ? sTemp+"0"+IntToString(nFamLevel) : sTemp+IntToString(nFamLevel); + + //spawn the familiar + oFam = CreateLocalNPC(oPC, ASSOCIATE_TYPE_FAMILIAR, sResRef, PRCGetSpellTargetLocation(), NPC_HENCHMAN_COMPANION); + AddAssociate(oPC, oFam); + + if (GetHasFeat(FEAT_SHADOW_FAMILIAR, oPC)) ApplyTemplateToObject(TEMPLATE_DARK, oFam); + + //set its name + string sName = GetFamiliarName(oPC); + if(sName == "") + sName = GetName(oPC)+ "'s Familiar"; + SetName(oFam, sName); +} + +void MasterShadow(object oPC) +{ + object oFam = GetAssociateNPC(ASSOCIATE_TYPE_FAMILIAR, oPC, NPC_MS_ELEMENTAL); + + //remove previously summoned familiar + if(GetIsObjectValid(oFam)) + DestroyAssociate(oFam); + + int nLevel = GetLevelByClass(CLASS_TYPE_MASTER_OF_SHADOW, oPC); + string sShadow = "shd_shdelem_med"; + if (nLevel >= 10) + sShadow = "shd_shdelem_med4"; + else if (nLevel >= 7) + sShadow = "shd_shdelem_med3"; + else if (nLevel >= 4) + sShadow = "shd_shdelem_med2"; + + oFam = CreateLocalNPC(oPC, ASSOCIATE_TYPE_FAMILIAR, sShadow, PRCGetSpellTargetLocation(), NPC_MS_ELEMENTAL); + AddAssociate(oPC, oFam); + //set its name + string sName = GetFamiliarName(oPC); + if(sName == "") + sName = GetName(oPC)+ "'s Shadow Elemental"; + SetName(oFam, sName); + + itemproperty ipIP; + object oSkin = GetPCSkin(oFam); + if (nLevel >= 10) + ipIP =ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEIMMUNITY_100_PERCENT); + else if (nLevel >= 6) + ipIP =ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD, IP_CONST_DAMAGERESIST_20); + else if (nLevel >= 4) + ipIP =ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD, IP_CONST_DAMAGERESIST_10); + else if (nLevel >= 2) + ipIP =ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD, IP_CONST_DAMAGERESIST_5); + + IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE); + + if (nLevel >= 3) // Grow to size large + SetCreatureAppearanceType(oFam, APPEARANCE_TYPE_SHADOW_FIEND); +} + +/* void main() +{ + object oPC = OBJECT_SELF; + if (!GetHasGem(3,oPC)) + { + FloatingTextStringOnCreature("This power requires a gem worth at least 100 gold",oPC,FALSE); + return; + } + SummonFamiliar(); + + if (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER)) + { + object oFam =GetAssociate(ASSOCIATE_TYPE_FAMILIAR); + DestroyObject(oFam, 0.5); + } + +} */ + diff --git a/src/hakpak/rdg_prc8_top/nss/nw_s3_balordeth.nss b/src/hakpak/rdg_prc8_top/nss/nw_s3_balordeth.nss new file mode 100644 index 0000000..db095f7 --- /dev/null +++ b/src/hakpak/rdg_prc8_top/nss/nw_s3_balordeth.nss @@ -0,0 +1,63 @@ +// HCR v3.2.0 - Execute default death script after fireball effects is complete. +//:://////////////////////////////////////////////////////////////////////////// +//:: FileName: NW_S3_BALORDETH +//:://////////////////////////////////////////////////////////////////////////// +/* + Fireball explosion does 50 damage to all within 20ft. +*/ +//:://////////////////////////////////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Jan 9, 2002 +//:://////////////////////////////////////////////////////////////////////////// +#include "NW_I0_SPELLS" +#include "prc_inc_spells" +#include "prc_add_spell_dc" +//:://////////////////////////////////////////////////////////////////////////// +void main() +{ + // Declare major variables. + int nMetaMagic = PRCGetMetaMagicFeat(); + int nDamage; + float fDelay; + effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M); + effect eDam; + + // Apply the fireball explosion. + effect eExplode = EffectVisualEffect(VFX_FNF_FIREBALL); + location lTarget = GetLocation(OBJECT_SELF); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget); + + // Cycle through the targets until an invalid object is captured. + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR); + while (GetIsObjectValid(oTarget)) + { + // Fire cast spell at event for the specified target. + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_FIREBALL)); + + // Calculate delay based on distance between explosion and the target. + fDelay = (GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20); + if (!PRCDoResistSpell(OBJECT_SELF, oTarget, FloatToInt(fDelay))) + { + // Adjust damage based on Reflex Save, Evasion and Improved Evasion. + nDamage = PRCGetReflexAdjustedDamage(50, oTarget, PRCGetSpellSaveDC(), SAVING_THROW_TYPE_FIRE); + if (nDamage > 0) + { + // Apply effects to the currently selected target. + eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget)); + + // This visual effect is applied to the target object not the + // location as above. This visual effect represents the flame that + // erupts on the target not on the ground. + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + + // Select the next target. + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR); + } + + // HCR 3.0 - Call default death script. + ExecuteScript("nw_c2_default7", OBJECT_SELF); +} +//:://////////////////////////////////////////////////////////////////////////// diff --git a/src/include/bnd_inc_bndfunc.nss b/src/include/bnd_inc_bndfunc.nss new file mode 100644 index 0000000..ec533de --- /dev/null +++ b/src/include/bnd_inc_bndfunc.nss @@ -0,0 +1,968 @@ +//:://///////////////////////////////////////////// +//:: Binding/Vestiges main include: Miscellaneous +//:: bnd_inc_bndfunc +//:://///////////////////////////////////////////// +/** @file + Defines various functions and other stuff that + do something related to Binding. + + @author Stratovarius + @date Created - 2021.02.02 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Determines the given creature's Binder level. + * The vestige is used for Favored Vestige + * + * @param oBinder The creature whose Binder level to determine + * @param nVestige The rowid of the vestige in spells.2da + * + * @return The Binder level + */ +int GetBinderLevel(object oBinder, int nVestige = -1); + +/** + * Determines whether a given class is a Binding-related class or not. + * + * @param nClass CLASS_TYPE_* of the class to test + * @return TRUE if the class is a Binding-related class, FALSE otherwise + */ +int GetIsBindingClass(int nClass); + +/** + * Calculates how many Binder levels are gained by a given creature from + * it's levels in prestige classes. + * + * @param oBinder Creature to calculate added Binder levels for + * @return The number of Binder levels gained + */ +int GetBindingPRCLevels(object oBinder); + +/** + * Returns the master 2da of all vestiges - "vestiges" + */ +string GetVestigeFile(); + +/** + * Returns the master 2da of binds and bind levels - "cls_bind_binder" + */ +string GetBindingClassFile(int nClass); + +/** + * Casts a particular vestige on the binder + * Should only ever be called via Contact Vestige + * + * @param oBinder The binder + * @param nVestige The vestige to attempt binding + */ +void ApplyVestige(object oBinder, int nVestige); + +/** + * Removes a particular vestige from the binder + * Should only ever be called via Contact Vestige + * + * @param oBinder The binder + * @param nVestige The vestige to expel + */ +void ExpelVestige(object oBinder, int nVestige); + +/** + * Rolls the check to see whether it is a good or bad pact + * Sets a local int to mark pact quality + * + * @param oBinder The binder attempting the check + * @param nVestige The rowid of the vestige in vestiges.2da + * + * @return The rowid of the vestige in spells.2da + */ +int DoBindingCheck(object oBinder, int nVestige); + +/** + * Does the animations and count down to bind a particular vestige + * + * @param oBinder The binder + * @param nTime Should always be 66 seconds + * @param nVestige The vestige to attempt binding + * @param nExpel Whether this is a usage of expel vestige or not + */ +void ContactVestige(object oBinder, int nTime, int nVestige, int nExpel = FALSE); + +/** + * Does the animations and count down to bind a particular vestige + * Should only ever be called via Contact Vestige + * + * @param oBinder The binder + * @param nTime Should always be 60 seconds + * @param nVestige The vestige to attempt binding + * @param nExpel Whether this is a usage of expel vestige or not + */ +void BindVestige(object oBinder, int nTime, int nVestige, int nExpel = FALSE); + +/** + * Checks to see whether an ability is off cooldown or not + * Sets the cooldown if the ability is usable + * Informs the player via floating text + * + * @param oBinder The binder + * @param nAbil The vestige ability (such as Amon's Fire Breath SpellId) + * @param nVestige The vestige the ability comes from (such as VESTIGE_AMON) + * + * @return TRUE/FALSE for off cooldown or not + */ +int BindAbilCooldown(object oBinder, int nAbil, int nVestige); + +/** + * How many vestiges can the binder have bound + * + * @param oBinder The binder + * + * @return A number between 1 and 4 + */ +int GetMaxVestigeCount(object oBinder); + +/** + * What is the highest level vestige the binder can bind? + * + * @param oBinder The binder + * + * @return A number between 1 and 8 + */ +int GetMaxVestigeLevel(object oBinder); + +/** + * What is the vestige's level? + * + * @param nVestige The vestige rowid in vestiges.2da + * + * @return A number between 1 and 8 + */ +int GetVestigeLevel(int nVestige); + +/** + * How many total binds are active on the binder? + * Checks via the spellid of the vestiges + * + * @param oBinder The binder + * + * @return 0 or higher + */ +int GetBindCount(object oBinder); + +/** + * How many uses of pact augmentation does the + * binder get when he binds a vestige? + * + * @param oBinder The binder + * + * @return 0 to 5 + */ +int GetPactAugmentCount(object oBinder); + +/** + * Returns the penalty to be applied if the + * binder made a bad pact with the vestige + * Should never be called directly + * + * @param oBinder The binder + * + * @return Linked effect + */ +effect EffectPact(object oBinder); + +/** + * Checks whether the binder has the rapid recovery + * feat for the named vestige + * + * @param oBinder The binder + * @param nVestige The vestige rowid in spells.2da + * + * @return TRUE/FALSE + */ +int RapidRecovery(object oBinder, int nVestige); + +/** + * Checks whether the binder has the favored vestige + * feat for the named vestige + * + * @param oBinder The binder + * @param nVestige The vestige rowid in spells.2da + * + * @return TRUE/FALSE + */ +int FavoredVestige(object oBinder, int nVestige); + +/** + * Checks whether the binder has the favored vestige + * focus feat for the named vestige + * + * @param oBinder The binder + * @param nVestige The vestige rowid in spells.2da + * + * @return TRUE/FALSE + */ +int FavoredVestigeFocus(object oBinder, int nVestige); + +/** + * Returns the DC for saving against a vestige's abilities + * 10 + 1/2 Binding level + Charisma Modifier + bonuses + * + * @param oBinder The binder + * @param nVestige The vestige rowid in spells.2da + * + * @return A number + */ +int GetBinderDC(object oBinder, int nVestige); + +/** + * Checks for the special requirements of each vestige + * or for the presence of the Ignore Special Requirements + * feat. True means passing requirements, False is a fail + * + * @param oBinder The binder + * @param nVestige The vestige rowid in spells.2da + * + * @return TRUE/FALSE + */ +int DoSpecialRequirements(object oBinder, int nVestige); + +/** + * Checks for the special requirements of each vestige + * or for the presence of the Ignore Special Requirements + * feat. True means passing requirements, False is a fail + * + * This is for requirements that apply during the summoning process + * due to having a cost that applies only after the user has selected + * which vestige they wish to bind + * + * @param oBinder The binder + * @param nVestige The vestige rowid in spells.2da + * + * @return TRUE/FALSE + */ +int DoSummonRequirements(object oBinder, int nVestige); + +/** + * Checks for whether the vestige ability was exploited (meaning not + * granted) by the Anima Mage class feature. + * + * @param oBinder The binder + * @param nVestige The vestige ability rowid in vestigeabil.2da + * + * @return TRUE if exploited/FALSE otherwise + */ +int GetIsVestigeExploited(object oBinder, int nVestigeAbil); + +/** + * Marks a vestige ability as exploited (meaning it will not be + * granted) by the Anima Mage class feature. + * + * @param oBinder The binder + * @param nVestige The vestige ability rowid in vestigeabil.2da + */ +void SetIsVestigeExploited(object oBinder, int nVestigeAbil); + +/** + * Checks whether the patron vestige is bound to a Knight of the Sacred Seal + * If not, the class loses all class features + * + * @param oBinder The binder + * + * @return TRUE if bound, FALSE otherwise + */ +int GetIsPatronVestigeBound(object oBinder); + +/** + * Checks who the patron vestige is for a Knight of the Sacred Seal + * Used to ensure they always have a good pact with their patron + * + * @param oBinder The binder + * + * @return The VESTIGE_* const if one exists, -1 otherwise + */ +int GetPatronVestige(object oBinder); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "prc_inc_spells" +#include "inc_dynconv" + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const int VESTIGE_CONTACT_TIME = 66; +const int VESTIGE_BINDING_TIME = 60; + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int GetBinderLevel(object oBinder, int nVestige = -1) +{ + int nLevel; + + if(GetLevelByClass(CLASS_TYPE_BINDER, oBinder)) + { + // Binder level is class level + prestige + nLevel = GetLevelByClass(CLASS_TYPE_BINDER, oBinder); + nLevel += GetBindingPRCLevels(oBinder); + } + // If you have no levels in binder, but you have Bind Vestige feat + else if (GetHasFeat(FEAT_BIND_VESTIGE, oBinder)) + { + nLevel = 1; + if (GetHasFeat(FEAT_BIND_VESTIGE_IMPROVED, oBinder)) nLevel += 4; + } + if (FavoredVestige(oBinder, nVestige)) nLevel += 1; + if (GetHasSpellEffect(VESTIGE_IPOS, oBinder) && !GetIsVestigeExploited(oBinder, VESTIGE_IPOS_INFLUENCE) && nVestige >= VESTIGE_AMON) nLevel += 1; + + if(DEBUG) DoDebug("Binder Level: " + IntToString(nLevel)); + + return nLevel; +} + +int GetIsBindingClass(int nClass) +{ + return nClass == CLASS_TYPE_BINDER; +} + +int GetBindingPRCLevels(object oBinder) +{ + int nLevel = GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oBinder); + nLevel += GetLevelByClass(CLASS_TYPE_KNIGHT_SACRED_SEAL, oBinder); + nLevel += GetLevelByClass(CLASS_TYPE_SCION_DANTALION, oBinder); + + // These don't add at 1st level + if (GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oBinder)) + nLevel += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oBinder) - 1; + + return nLevel; +} + +string GetVestigeFile() +{ + return "vestiges"; +} + +string GetBindingClassFile(int nClass) +{ + string sFile; + if (nClass == CLASS_TYPE_BINDER) sFile = "cls_bind_binder"; + + return sFile; +} + +void ApplyVestige(object oBinder, int nVestige) +{ + PRCRemoveSpellEffects(nVestige, oBinder, oBinder); + GZPRCRemoveSpellEffects(nVestige, oBinder, FALSE); + ActionCastSpellOnSelf(nVestige, METAMAGIC_NONE, oBinder); + if (GetLevelByClass(CLASS_TYPE_BINDER, oBinder) >= 2) + { + PRCRemoveSpellEffects(VESTIGE_PACT_AUGMENTATION, oBinder, oBinder); + GZPRCRemoveSpellEffects(VESTIGE_PACT_AUGMENTATION, oBinder, FALSE); + ActionCastSpellOnSelf(VESTIGE_PACT_AUGMENTATION, METAMAGIC_NONE, oBinder); + } + if (DEBUG) DoDebug("Applying Vestige "+IntToString(nVestige)+" on "+GetName(oBinder)); + + // If you have hosted one of these spirits within the last 24 hours, Amon refuses to answer your call. + if (nVestige == VESTIGE_LERAJE || + nVestige == VESTIGE_CHUPOCLOPS || + nVestige == VESTIGE_KARSUS || + nVestige == VESTIGE_EURYNOME) + { + SetLocalInt(oBinder, "AmonHater", TRUE); + DelayCommand(HoursToSeconds(48), DeleteLocalInt(oBinder, "AmonHater")); + } + + // Only good quality pacts get the bonus spell + if (GetLocalInt(oBinder, "PactQuality"+IntToString(nVestige)) && GetLocalInt(oBinder, "ExploitVestigeConv")) + { + DelayCommand(0.5, StartDynamicConversation("bnd_exploitcnv", oBinder, DYNCONV_EXIT_ALLOWED_SHOW_CHOICE, FALSE, TRUE, oBinder)); + DeleteLocalInt(oBinder, "ExploitVestigeConv"); + } +} + +void ExpelVestige(object oBinder, int nVestige) +{ + SetPersistantLocalInt(oBinder, "ExpelledVestige", TRUE); + SetPersistantLocalInt(oBinder, "ExpelledVestige"+IntToString(nVestige), TRUE); + // Here, making a good pack means we can unbind it + if (GetLocalInt(oBinder, "PactQuality"+IntToString(nVestige))) + { + PRCRemoveSpellEffects(nVestige, oBinder, oBinder); + GZPRCRemoveSpellEffects(nVestige, oBinder, FALSE); + FloatingTextStringOnCreature("Expelled "+GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nVestige)))+" successfully!", oBinder, FALSE); + } + else + FloatingTextStringOnCreature("Failed to expel "+GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nVestige))), oBinder, FALSE); +} + +int DoBindingCheck(object oBinder, int nVestige) +{ + int nApply = StringToInt(Get2DACache("vestiges", "SpellID", nVestige)); + + // Knights of the Sacred Seal always have a good pact with their Patron + if (GetPatronVestige(oBinder) == nApply) + { + SetLocalInt(oBinder, "PactQuality"+IntToString(nApply), TRUE); + return nApply; //We don't need the rest of the function here. + } + // Scions of Dantalion always have a good pact with Dantalion + if (GetLevelByClass(CLASS_TYPE_SCION_DANTALION, oBinder) && VESTIGE_DANTALION == nApply) + { + SetLocalInt(oBinder, "PactQuality"+IntToString(nApply), TRUE); + return nApply; //We don't need the rest of the function here. + } + + int nRoll = d20()+ GetBinderLevel(oBinder) + GetAbilityModifier(ABILITY_CHARISMA, oBinder); + if (GetHasFeat(FEAT_SKILLED_PACT_MAKING, oBinder)) nRoll += 4; + // -10 penalty on the check + if (GetLocalInt(oBinder, "RushedBinding")) + { + DeleteLocalInt(oBinder, "RushedBinding"); + nRoll -= 10; + } + // After expelling a vestige, take a -10 penalty on the check + if (GetPersistantLocalInt(oBinder, "ExpelledVestige")) + { + DeletePersistantLocalInt(oBinder, "ExpelledVestige"); + nRoll -= 10; + } + // Next time you rebind an expelled vestige, take a penalty on the check + if (GetPersistantLocalInt(oBinder, "ExpelledVestige"+IntToString(nApply))) + { + DeletePersistantLocalInt(oBinder, "ExpelledVestige"+IntToString(nApply)); + nRoll -= 10; + } + // Exploiting a vestige grants a -5 on the check + if (GetLocalInt(oBinder, "ExploitVestigeTemp")) + { + nRoll -= 5; + FloatingTextStringOnCreature("Exploiting vestige", oBinder); + // This int is only for this Binding check + DeleteLocalInt(oBinder, "ExploitVestigeTemp"); + } + int nDC = StringToInt(Get2DACache("vestiges", "BindDC", nVestige)); + SendMessageToPC(oBinder, "Binding Check: "+IntToString(nRoll)+" vs a DC of "+IntToString(nDC)); + DeleteLocalInt(oBinder, "PactQuality"+IntToString(nApply)); + // Mark a good pact + if (nRoll >= nDC) SetLocalInt(oBinder, "PactQuality"+IntToString(nApply), TRUE); + + return nApply; +} + +void BindVestige(object oBinder, int nTime, int nVestige, int nExpel = FALSE) +{ + if (0 >= nTime) + { + SetCutsceneMode(oBinder, FALSE); + // We're expelling a vestige, not binding one + if (nExpel) + ExpelVestige(oBinder, DoBindingCheck(oBinder, nVestige)); + // Make a check and apply the vestige + else + ApplyVestige(oBinder, DoBindingCheck(oBinder, nVestige)); + } + else if (!GetIsInCombat(oBinder)) // Being in combat causes this to fail + { + FloatingTextStringOnCreature("You must spend " + IntToString(nTime) +" more seconds to complete the binding", oBinder, FALSE); + DelayCommand(6.0, BindVestige(oBinder, nTime - 6, nVestige, nExpel)); + SetCutsceneMode(oBinder, TRUE); + AssignCommand(oBinder, ActionPlayAnimation(ANIMATION_LOOPING_TALK_PLEADING, 1.0, 6.0)); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_MAZE), GetLocation(oBinder), 6.0); + } + else + SetCutsceneMode(oBinder, FALSE); +} + +void ContactVestige(object oBinder, int nTime, int nVestige, int nExpel = FALSE) +{ + if (0 >= nTime) + { + SetCutsceneMode(oBinder, FALSE); + if (!DoSummonRequirements(oBinder, nVestige)) return; + int nBindTime = VESTIGE_BINDING_TIME; + if(GetPRCSwitch(PRC_BIND_VESTIGE_TIMER) >= 12) nBindTime = GetPRCSwitch(PRC_BIND_VESTIGE_TIMER); + if (GetLocalInt(oBinder, "RushedBinding") || GetLocalInt(oBinder, "RapidPactMaking")) nBindTime = 6; + BindVestige(oBinder, nBindTime, nVestige, nExpel); + } + else if (!GetIsInCombat(oBinder)) // Being in combat causes this to fail + { + FloatingTextStringOnCreature("You must draw the symbol for another " + IntToString(nTime) +" seconds", oBinder, FALSE); + DelayCommand(6.0, ContactVestige(oBinder, nTime - 6, nVestige, nExpel)); + SetCutsceneMode(oBinder, TRUE); + AssignCommand(oBinder, ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE, 1.0, 6.0)); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_SYMB_INSAN), GetLocation(oBinder), 6.0); + } + else + SetCutsceneMode(oBinder, FALSE); +} + +int BindAbilCooldown(object oBinder, int nAbil, int nVestige) +{ + int nCheck = GetLocalInt(oBinder, "Bind"+IntToString(nAbil)); + // On Cooldown + if (nCheck) + { + // Free use + if (GetLocalInt(oBinder, "KotSSSurge")) + { + DeleteLocalInt(oBinder, "KotSSSurge"); + FloatingTextStringOnCreature("Using Vestige's Surge on "+GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nAbil))), oBinder, FALSE); + return TRUE; + } + FloatingTextStringOnCreature(GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nAbil)))+" is still on cooldown!", oBinder, FALSE); + return FALSE; + } + else + { + SetLocalInt(oBinder, "Bind"+IntToString(nAbil), TRUE); + // Default number of rounds + int nDelay = 5; + // Makes it one round faster + if (RapidRecovery(oBinder, nVestige)) nDelay -= 1; + DelayCommand(RoundsToSeconds(nDelay), DeleteLocalInt(oBinder, "Bind"+IntToString(nAbil))); + DelayCommand(RoundsToSeconds(nDelay), FloatingTextStringOnCreature(GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nAbil)))+" is off cooldown", oBinder, FALSE)); + FloatingTextStringOnCreature("You must wait " + IntToString(nDelay) +" rounds before using "+GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nAbil)))+" again", oBinder, FALSE); + } + + return TRUE; +} + +int GetMaxVestigeCount(object oBinder) +{ + int nMax = StringToInt(Get2DACache(GetBindingClassFile(CLASS_TYPE_BINDER), "Vestiges", GetBinderLevel(oBinder))); + + if (DEBUG) DoDebug("GetMaxVestigeCount is "+IntToString(nMax)); + return nMax; +} + +int GetMaxVestigeLevel(object oBinder) +{ + int nLevel = GetBinderLevel(oBinder); + if (GetHasFeat(FEAT_IMPROVED_BINDING, oBinder)) nLevel += 2; + // Due to the 2da starting at row 0 + int nMax = StringToInt(Get2DACache(GetBindingClassFile(CLASS_TYPE_BINDER), "VestigeLvl", nLevel - 1)); + + if (DEBUG) DoDebug("GetMaxVestigeLevel is "+IntToString(nMax)); + return nMax; +} + +int GetVestigeLevel(int nVestige) +{ + int nMax = StringToInt(Get2DACache("Vestiges", "Level", nVestige)); + + if (DEBUG) DoDebug("GetVestigeLevel is "+IntToString(nMax)); + return nMax; +} + +int GetBindCount(object oBinder) +{ + int i, nCount; + for(i = VESTIGE_AMON; i <= VESTIGE_ABYSM; i++) + if(GetHasSpellEffect(i, oBinder)) nCount++; + + if (DEBUG) DoDebug("GetBindCount is "+IntToString(nCount)); + return nCount; +} + +int GetPactAugmentCount(object oBinder) +{ + int nClass = GetLevelByClass(CLASS_TYPE_BINDER, oBinder); + int nCount = 0; + + if (nClass >= 20) nCount = 5; + else if (nClass >= 16) nCount = 4; + else if (nClass >= 10) nCount = 3; + else if (nClass >= 5) nCount = 2; + else if (nClass >= 2) nCount = 1; + + if (DEBUG) DoDebug("GetPactAugmentCount is "+IntToString(nCount)); + return nCount; +} + +effect EffectPact(object oBinder) +{ + effect eEffect; + if (!GetLocalInt(oBinder, "PactQuality"+IntToString(GetSpellId()))) + { + // –1 penalty on attack rolls, saving throws, and skill checks + eEffect = EffectLinkEffects(EffectSkillDecrease(SKILL_ALL_SKILLS, 1), EffectSavingThrowDecrease(SAVING_THROW_ALL, 1)); + eEffect = EffectLinkEffects(eEffect, EffectAttackDecrease(1)); + } + else // NWN hates having a blank effect + eEffect = EffectLinkEffects(EffectSkillDecrease(SKILL_DISCIPLINE, 1), EffectSkillIncrease(SKILL_DISCIPLINE, 1)); + + return eEffect; +} + +int RapidRecovery(object oBinder, int nVestige) +{ + int nFavored; + + if (GetHasFeat(FEAT_RAPID_RECOVERY_AMON, oBinder) && nVestige == VESTIGE_AMON) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_AYM , oBinder) && nVestige == VESTIGE_AYM ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_LERAJE , oBinder) && nVestige == VESTIGE_LERAJE ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_NABERIUS , oBinder) && nVestige == VESTIGE_NABERIUS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_RONOVE , oBinder) && nVestige == VESTIGE_RONOVE ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_DAHLVERNAR , oBinder) && nVestige == VESTIGE_DAHLVERNAR ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_HAAGENTI , oBinder) && nVestige == VESTIGE_HAAGENTI ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_MALPHAS , oBinder) && nVestige == VESTIGE_MALPHAS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_SAVNOK , oBinder) && nVestige == VESTIGE_SAVNOK ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_ANDROMALIUS, oBinder) && nVestige == VESTIGE_ANDROMALIUS) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_FOCALOR , oBinder) && nVestige == VESTIGE_FOCALOR ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_KARSUS , oBinder) && nVestige == VESTIGE_KARSUS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_PAIMON , oBinder) && nVestige == VESTIGE_PAIMON ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_AGARES , oBinder) && nVestige == VESTIGE_AGARES ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_ANDRAS , oBinder) && nVestige == VESTIGE_ANDRAS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_BUER , oBinder) && nVestige == VESTIGE_BUER ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_EURYNOME , oBinder) && nVestige == VESTIGE_EURYNOME ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_TENEBROUS , oBinder) && nVestige == VESTIGE_TENEBROUS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_ARETE , oBinder) && nVestige == VESTIGE_ARETE ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_ASTAROTH , oBinder) && nVestige == VESTIGE_ASTAROTH ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_ACERERAK , oBinder) && nVestige == VESTIGE_ACERERAK ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_BALAM , oBinder) && nVestige == VESTIGE_BALAM ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_DANTALION , oBinder) && nVestige == VESTIGE_DANTALION ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_GERYON , oBinder) && nVestige == VESTIGE_GERYON ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_OTIAX , oBinder) && nVestige == VESTIGE_OTIAX ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_CHUPOCLOPS , oBinder) && nVestige == VESTIGE_CHUPOCLOPS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_HAURES , oBinder) && nVestige == VESTIGE_HAURES ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_IPOS , oBinder) && nVestige == VESTIGE_IPOS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_SHAX , oBinder) && nVestige == VESTIGE_SHAX ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_ZAGAN , oBinder) && nVestige == VESTIGE_ZAGAN ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_VANUS , oBinder) && nVestige == VESTIGE_VANUS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_THETRIAD , oBinder) && nVestige == VESTIGE_THETRIAD ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_DESHARIS , oBinder) && nVestige == VESTIGE_DESHARIS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_ZCERYLL , oBinder) && nVestige == VESTIGE_ZCERYLL ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_ELIGOR , oBinder) && nVestige == VESTIGE_ELIGOR ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_MARCHOSIAS , oBinder) && nVestige == VESTIGE_MARCHOSIAS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_ASHARDALON , oBinder) && nVestige == VESTIGE_ASHARDALON ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_HALPHAX , oBinder) && nVestige == VESTIGE_HALPHAX ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_ORTHOS , oBinder) && nVestige == VESTIGE_ORTHOS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_RAPID_RECOVERY_ABYSM , oBinder) && nVestige == VESTIGE_ABYSM ) nFavored = TRUE; + + if (DEBUG) DoDebug("RapidRecovery return value "+IntToString(nFavored)); + return nFavored; +} + +int FavoredVestige(object oBinder, int nVestige) +{ + int nFavored; + + if (GetHasFeat(FEAT_FAVORED_VESTIGE_AMON, oBinder) && nVestige == VESTIGE_AMON) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_AYM , oBinder) && nVestige == VESTIGE_AYM ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_LERAJE , oBinder) && nVestige == VESTIGE_LERAJE ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_NABERIUS , oBinder) && nVestige == VESTIGE_NABERIUS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_RONOVE , oBinder) && nVestige == VESTIGE_RONOVE ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_DAHLVERNAR , oBinder) && nVestige == VESTIGE_DAHLVERNAR ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_HAAGENTI , oBinder) && nVestige == VESTIGE_HAAGENTI ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_MALPHAS , oBinder) && nVestige == VESTIGE_MALPHAS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_SAVNOK , oBinder) && nVestige == VESTIGE_SAVNOK ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_ANDROMALIUS, oBinder) && nVestige == VESTIGE_ANDROMALIUS) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCALOR , oBinder) && nVestige == VESTIGE_FOCALOR ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_KARSUS , oBinder) && nVestige == VESTIGE_KARSUS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_PAIMON , oBinder) && nVestige == VESTIGE_PAIMON ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_AGARES , oBinder) && nVestige == VESTIGE_AGARES ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_ANDRAS , oBinder) && nVestige == VESTIGE_ANDRAS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_BUER , oBinder) && nVestige == VESTIGE_BUER ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_EURYNOME , oBinder) && nVestige == VESTIGE_EURYNOME ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_TENEBROUS , oBinder) && nVestige == VESTIGE_TENEBROUS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_ARETE , oBinder) && nVestige == VESTIGE_ARETE ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_ASTAROTH , oBinder) && nVestige == VESTIGE_ASTAROTH ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_ACERERAK , oBinder) && nVestige == VESTIGE_ACERERAK ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_BALAM , oBinder) && nVestige == VESTIGE_BALAM ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_DANTALION , oBinder) && nVestige == VESTIGE_DANTALION ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_GERYON , oBinder) && nVestige == VESTIGE_GERYON ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_OTIAX , oBinder) && nVestige == VESTIGE_OTIAX ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_CHUPOCLOPS , oBinder) && nVestige == VESTIGE_CHUPOCLOPS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_HAURES , oBinder) && nVestige == VESTIGE_HAURES ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_IPOS , oBinder) && nVestige == VESTIGE_IPOS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_SHAX , oBinder) && nVestige == VESTIGE_SHAX ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_ZAGAN , oBinder) && nVestige == VESTIGE_ZAGAN ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_VANUS , oBinder) && nVestige == VESTIGE_VANUS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_THETRIAD , oBinder) && nVestige == VESTIGE_THETRIAD ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_DESHARIS , oBinder) && nVestige == VESTIGE_DESHARIS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_ZCERYLL , oBinder) && nVestige == VESTIGE_ZCERYLL ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_ELIGOR , oBinder) && nVestige == VESTIGE_ELIGOR ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_MARCHOSIAS , oBinder) && nVestige == VESTIGE_MARCHOSIAS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_ASHARDALON , oBinder) && nVestige == VESTIGE_ASHARDALON ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_HALPHAX , oBinder) && nVestige == VESTIGE_HALPHAX ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_ORTHOS , oBinder) && nVestige == VESTIGE_ORTHOS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_ABYSM , oBinder) && nVestige == VESTIGE_ABYSM ) nFavored = TRUE; + + if (DEBUG) DoDebug("FavoredVestige return value "+IntToString(nFavored)); + return nFavored; +} + +int FavoredVestigeFocus(object oBinder, int nVestige) +{ + int nFavored; + + if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_AMON, oBinder) && nVestige == VESTIGE_AMON) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_AYM , oBinder) && nVestige == VESTIGE_AYM ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_LERAJE , oBinder) && nVestige == VESTIGE_LERAJE ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_NABERIUS , oBinder) && nVestige == VESTIGE_NABERIUS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_RONOVE , oBinder) && nVestige == VESTIGE_RONOVE ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_DAHLVERNAR , oBinder) && nVestige == VESTIGE_DAHLVERNAR ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_HAAGENTI , oBinder) && nVestige == VESTIGE_HAAGENTI ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_MALPHAS , oBinder) && nVestige == VESTIGE_MALPHAS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_SAVNOK , oBinder) && nVestige == VESTIGE_SAVNOK ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_ANDROMALIUS, oBinder) && nVestige == VESTIGE_ANDROMALIUS) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_FOCALOR , oBinder) && nVestige == VESTIGE_FOCALOR ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_KARSUS , oBinder) && nVestige == VESTIGE_KARSUS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_PAIMON , oBinder) && nVestige == VESTIGE_PAIMON ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_AGARES , oBinder) && nVestige == VESTIGE_AGARES ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_ANDRAS , oBinder) && nVestige == VESTIGE_ANDRAS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_BUER , oBinder) && nVestige == VESTIGE_BUER ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_EURYNOME , oBinder) && nVestige == VESTIGE_EURYNOME ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_TENEBROUS , oBinder) && nVestige == VESTIGE_TENEBROUS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_ARETE , oBinder) && nVestige == VESTIGE_ARETE ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_ASTAROTH , oBinder) && nVestige == VESTIGE_ASTAROTH ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_ACERERAK , oBinder) && nVestige == VESTIGE_ACERERAK ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_BALAM , oBinder) && nVestige == VESTIGE_BALAM ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_DANTALION , oBinder) && nVestige == VESTIGE_DANTALION ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_GERYON , oBinder) && nVestige == VESTIGE_GERYON ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_OTIAX , oBinder) && nVestige == VESTIGE_OTIAX ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_CHUPOCLOPS , oBinder) && nVestige == VESTIGE_CHUPOCLOPS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_HAURES , oBinder) && nVestige == VESTIGE_HAURES ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_IPOS , oBinder) && nVestige == VESTIGE_IPOS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_SHAX , oBinder) && nVestige == VESTIGE_SHAX ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_ZAGAN , oBinder) && nVestige == VESTIGE_ZAGAN ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_VANUS , oBinder) && nVestige == VESTIGE_VANUS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_THETRIAD , oBinder) && nVestige == VESTIGE_THETRIAD ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_DESHARIS , oBinder) && nVestige == VESTIGE_DESHARIS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_ZCERYLL , oBinder) && nVestige == VESTIGE_ZCERYLL ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_ELIGOR , oBinder) && nVestige == VESTIGE_ELIGOR ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_MARCHOSIAS , oBinder) && nVestige == VESTIGE_MARCHOSIAS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_ASHARDALON , oBinder) && nVestige == VESTIGE_ASHARDALON ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_HALPHAX , oBinder) && nVestige == VESTIGE_HALPHAX ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_ORTHOS , oBinder) && nVestige == VESTIGE_ORTHOS ) nFavored = TRUE; + else if (GetHasFeat(FEAT_FAVORED_VESTIGE_FOCUS_ABYSM , oBinder) && nVestige == VESTIGE_ABYSM ) nFavored = TRUE; + + if (DEBUG) DoDebug("FavoredVestigeFocus return value "+IntToString(nFavored)); + return nFavored; +} + +int GetBinderDC(object oBinder, int nVestige) +{ + int nDC = 10 + GetBinderLevel(oBinder, nVestige)/2 + GetAbilityModifier(ABILITY_CHARISMA, oBinder); + if (FavoredVestigeFocus(oBinder, nVestige)) nDC += 1; + if (GetHasSpellEffect(VESTIGE_IPOS, oBinder) && !GetIsVestigeExploited(oBinder, VESTIGE_IPOS_INFLUENCE)) nDC += 1; + + return nDC; +} + +int DoSpecialRequirements(object oBinder, int nVestige) +{ + if (GetHasFeat(FEAT_IGNORE_SPECIAL_REQUIREMENTS, oBinder)) return TRUE; + + if (nVestige == VESTIGE_AMON && (GetLocalInt(oBinder, "AmonHater") || + GetHasSpellEffect(VESTIGE_LERAJE, oBinder) || + GetHasSpellEffect(VESTIGE_EURYNOME, oBinder) || + GetHasSpellEffect(VESTIGE_KARSUS, oBinder) || + GetHasSpellEffect(VESTIGE_CHUPOCLOPS, oBinder))) + return FALSE; + if (nVestige == VESTIGE_LERAJE && GetHasSpellEffect(VESTIGE_AMON, oBinder)) + return FALSE; + if (nVestige == VESTIGE_NABERIUS && 4 > GetSkillRank(SKILL_LORE, oBinder, TRUE) && 4 > GetSkillRank(SKILL_BLUFF, oBinder, TRUE)) + return FALSE; + // Ronove’s seal must be drawn in the soil under the sky. + if (nVestige == VESTIGE_RONOVE && (GetIsAreaNatural(GetArea(oBinder)) != AREA_NATURAL || GetIsAreaAboveGround(GetArea(oBinder)) != AREA_ABOVEGROUND)) + return FALSE; + if (nVestige == VESTIGE_HAAGENTI && (CREATURE_SIZE_LARGE > PRCGetCreatureSize(oBinder) || (GetHasFeat(FEAT_RACE_POWERFUL_BUILD, oBinder) && CREATURE_SIZE_MEDIUM > PRCGetCreatureSize(oBinder)))) + return FALSE; + if (nVestige == VESTIGE_KARSUS && GetHasSpellEffect(VESTIGE_AMON, oBinder)) + return FALSE; + if (nVestige == VESTIGE_KARSUS && 5 > GetSkillRank(SKILL_LORE, oBinder, TRUE) && 5 > GetSkillRank(SKILL_SPELLCRAFT, oBinder, TRUE)) + return FALSE; + if (nVestige == VESTIGE_KARSUS) + { + effect eTest = GetFirstEffect(oBinder); + while(GetIsEffectValid(eTest)) + { + if(GetEffectType(eTest) == EFFECT_TYPE_AREA_OF_EFFECT) + return FALSE; + + eTest = GetNextEffect(oBinder); + } + } + // Agagres’s seal must be drawn in the soil + if (nVestige == VESTIGE_AGARES && GetIsAreaNatural(GetArea(oBinder)) != AREA_NATURAL) + return FALSE; + if (nVestige == VESTIGE_BUER && GetIsAreaInterior(GetArea(oBinder))) + return FALSE; + if (nVestige == VESTIGE_EURYNOME && GetHasSpellEffect(VESTIGE_AMON, oBinder)) + return FALSE; + if (nVestige == VESTIGE_TENEBROUS && !GetIsNight()) + return FALSE; + if (nVestige == VESTIGE_BALAM) + { + int nCur = GetCurrentHitPoints(oBinder); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1, DAMAGE_TYPE_SLASHING), oBinder); + if (nCur > GetCurrentHitPoints(oBinder)) + return FALSE; + } + if (nVestige == VESTIGE_GERYON && 5 > GetSkillRank(SKILL_LORE, oBinder, TRUE)) + return FALSE; + if (nVestige == VESTIGE_ARETE && (GetHasSpellEffect(VESTIGE_EURYNOME, oBinder) || GetHasSpellEffect(VESTIGE_CHUPOCLOPS, oBinder))) + return FALSE; + if (nVestige == VESTIGE_CHUPOCLOPS && GetHasSpellEffect(VESTIGE_AMON, oBinder)) + return FALSE; + if (nVestige == VESTIGE_IPOS && 5 > GetSkillRank(SKILL_LORE, oBinder, TRUE) && 5 > GetSkillRank(SKILL_SPELLCRAFT, oBinder, TRUE)) + return FALSE; + if (nVestige == VESTIGE_VANUS && GetIsAreaNatural(GetArea(oBinder)) != AREA_NATURAL) + return FALSE; + if (nVestige == VESTIGE_DESHARIS && GetIsAreaNatural(GetArea(oBinder)) == AREA_NATURAL) + return FALSE; + if (nVestige == VESTIGE_HALPHAX && !GetIsAreaInterior(GetArea(oBinder))) + return FALSE; + if (nVestige == VESTIGE_HALPHAX && GetIsAreaInterior(GetArea(oBinder)) && GetIsAreaAboveGround(GetArea(oBinder)) == AREA_UNDERGROUND) + return FALSE; + if (nVestige == VESTIGE_ORTHOS && GetTileMainLight1Color(GetLocation(oBinder)) != TILE_MAIN_LIGHT_COLOR_WHITE && GetTileMainLight1Color(GetLocation(oBinder)) != TILE_MAIN_LIGHT_COLOR_YELLOW) + return FALSE; + + return TRUE; +} + +int DoSummonRequirements(object oBinder, int nVestige) +{ + if (GetHasFeat(FEAT_IGNORE_SPECIAL_REQUIREMENTS, oBinder)) return TRUE; + + int nSpellId = StringToInt(Get2DACache(GetVestigeFile(), "SpellID", nVestige)); + + if (nSpellId == VESTIGE_LERAJE) + { + object oArrow = GetItemInSlot(INVENTORY_SLOT_ARROWS, oBinder); + int nStack = GetItemStackSize(oArrow); + if (nStack) + SetItemStackSize(oArrow, nStack-1); + else + { + FloatingTextStringOnCreature("You have failed to break an arrow for Leraje, and she refuses your call!", oBinder, FALSE); + return FALSE; + } + } + + return TRUE; +} + +int GetIsVestigeExploited(object oBinder, int nVestigeAbil) +{ + if (GetLocalInt(oBinder, "ExploitVestige") == nVestigeAbil) return TRUE; + + return FALSE; +} + +void SetIsVestigeExploited(object oBinder, int nVestigeAbil) +{ + SetLocalInt(oBinder, "ExploitVestige", nVestigeAbil); + SetLocalInt(oBinder, "ExploitVestigeTemp", TRUE); + SetLocalInt(oBinder, "ExploitVestigeConv", TRUE); +} + +int GetIsPatronVestigeBound(object oBinder) +{ + int nPatron; + + if (GetHasFeat(FEAT_PATRON_VESTIGE_AMON , oBinder)) nPatron = VESTIGE_AMON; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_AYM , oBinder)) nPatron = VESTIGE_AYM; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_LERAJE , oBinder)) nPatron = VESTIGE_LERAJE; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_NABERIUS , oBinder)) nPatron = VESTIGE_NABERIUS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_RONOVE , oBinder)) nPatron = VESTIGE_RONOVE; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_DAHLVERNAR , oBinder)) nPatron = VESTIGE_DAHLVERNAR; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_HAAGENTI , oBinder)) nPatron = VESTIGE_HAAGENTI; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_MALPHAS , oBinder)) nPatron = VESTIGE_MALPHAS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_SAVNOK , oBinder)) nPatron = VESTIGE_SAVNOK; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ANDROMALIUS, oBinder)) nPatron = VESTIGE_ANDROMALIUS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_FOCALOR , oBinder)) nPatron = VESTIGE_FOCALOR; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_KARSUS , oBinder)) nPatron = VESTIGE_KARSUS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_PAIMON , oBinder)) nPatron = VESTIGE_PAIMON; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_AGARES , oBinder)) nPatron = VESTIGE_AGARES; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ANDRAS , oBinder)) nPatron = VESTIGE_ANDRAS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_BUER , oBinder)) nPatron = VESTIGE_BUER; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_EURYNOME , oBinder)) nPatron = VESTIGE_EURYNOME; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_TENEBROUS , oBinder)) nPatron = VESTIGE_TENEBROUS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ARETE , oBinder)) nPatron = VESTIGE_ARETE; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ASTAROTH , oBinder)) nPatron = VESTIGE_ASTAROTH; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ACERERAK , oBinder)) nPatron = VESTIGE_ACERERAK; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_BALAM , oBinder)) nPatron = VESTIGE_BALAM; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_DANTALION , oBinder)) nPatron = VESTIGE_DANTALION; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_GERYON , oBinder)) nPatron = VESTIGE_GERYON; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_OTIAX , oBinder)) nPatron = VESTIGE_OTIAX; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_CHUPOCLOPS , oBinder)) nPatron = VESTIGE_CHUPOCLOPS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_HAURES , oBinder)) nPatron = VESTIGE_HAURES; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_IPOS , oBinder)) nPatron = VESTIGE_IPOS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_SHAX , oBinder)) nPatron = VESTIGE_SHAX; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ZAGAN , oBinder)) nPatron = VESTIGE_ZAGAN; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_VANUS , oBinder)) nPatron = VESTIGE_VANUS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_THETRIAD , oBinder)) nPatron = VESTIGE_THETRIAD; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_DESHARIS , oBinder)) nPatron = VESTIGE_DESHARIS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ZCERYLL , oBinder)) nPatron = VESTIGE_ZCERYLL; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ELIGOR , oBinder)) nPatron = VESTIGE_ELIGOR; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_MARCHOSIAS , oBinder)) nPatron = VESTIGE_MARCHOSIAS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ASHARDALON , oBinder)) nPatron = VESTIGE_ASHARDALON; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_HALPHAX , oBinder)) nPatron = VESTIGE_HALPHAX; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ORTHOS , oBinder)) nPatron = VESTIGE_ORTHOS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ABYSM , oBinder)) nPatron = VESTIGE_ABYSM; + + if(GetHasSpellEffect(nPatron, oBinder)) return TRUE; + + return FALSE; +} + +int GetPatronVestige(object oBinder) +{ + int nPatron = -1; + + if (GetHasFeat(FEAT_PATRON_VESTIGE_AMON , oBinder)) nPatron = VESTIGE_AMON; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_AYM , oBinder)) nPatron = VESTIGE_AYM; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_LERAJE , oBinder)) nPatron = VESTIGE_LERAJE; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_NABERIUS , oBinder)) nPatron = VESTIGE_NABERIUS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_RONOVE , oBinder)) nPatron = VESTIGE_RONOVE; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_DAHLVERNAR , oBinder)) nPatron = VESTIGE_DAHLVERNAR; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_HAAGENTI , oBinder)) nPatron = VESTIGE_HAAGENTI; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_MALPHAS , oBinder)) nPatron = VESTIGE_MALPHAS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_SAVNOK , oBinder)) nPatron = VESTIGE_SAVNOK; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ANDROMALIUS, oBinder)) nPatron = VESTIGE_ANDROMALIUS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_FOCALOR , oBinder)) nPatron = VESTIGE_FOCALOR; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_KARSUS , oBinder)) nPatron = VESTIGE_KARSUS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_PAIMON , oBinder)) nPatron = VESTIGE_PAIMON; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_AGARES , oBinder)) nPatron = VESTIGE_AGARES; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ANDRAS , oBinder)) nPatron = VESTIGE_ANDRAS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_BUER , oBinder)) nPatron = VESTIGE_BUER; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_EURYNOME , oBinder)) nPatron = VESTIGE_EURYNOME; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_TENEBROUS , oBinder)) nPatron = VESTIGE_TENEBROUS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ARETE , oBinder)) nPatron = VESTIGE_ARETE; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ASTAROTH , oBinder)) nPatron = VESTIGE_ASTAROTH; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ACERERAK , oBinder)) nPatron = VESTIGE_ACERERAK; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_BALAM , oBinder)) nPatron = VESTIGE_BALAM; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_DANTALION , oBinder)) nPatron = VESTIGE_DANTALION; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_GERYON , oBinder)) nPatron = VESTIGE_GERYON; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_OTIAX , oBinder)) nPatron = VESTIGE_OTIAX; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_CHUPOCLOPS , oBinder)) nPatron = VESTIGE_CHUPOCLOPS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_HAURES , oBinder)) nPatron = VESTIGE_HAURES; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_IPOS , oBinder)) nPatron = VESTIGE_IPOS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_SHAX , oBinder)) nPatron = VESTIGE_SHAX; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ZAGAN , oBinder)) nPatron = VESTIGE_ZAGAN; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_VANUS , oBinder)) nPatron = VESTIGE_VANUS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_THETRIAD , oBinder)) nPatron = VESTIGE_THETRIAD; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_DESHARIS , oBinder)) nPatron = VESTIGE_DESHARIS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ZCERYLL , oBinder)) nPatron = VESTIGE_ZCERYLL; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ELIGOR , oBinder)) nPatron = VESTIGE_ELIGOR; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_MARCHOSIAS , oBinder)) nPatron = VESTIGE_MARCHOSIAS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ASHARDALON , oBinder)) nPatron = VESTIGE_ASHARDALON; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_HALPHAX , oBinder)) nPatron = VESTIGE_HALPHAX; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ORTHOS , oBinder)) nPatron = VESTIGE_ORTHOS; + else if (GetHasFeat(FEAT_PATRON_VESTIGE_ABYSM , oBinder)) nPatron = VESTIGE_ABYSM; + + return nPatron; +} \ No newline at end of file diff --git a/src/include/bnd_vestig_const.nss b/src/include/bnd_vestig_const.nss new file mode 100644 index 0000000..4db3502 --- /dev/null +++ b/src/include/bnd_vestig_const.nss @@ -0,0 +1,321 @@ +// Vestige SpellId Constants +const int VESTIGE_AMON = 19020; +const int VESTIGE_AYM = 19021; +const int VESTIGE_LERAJE = 19022; +const int VESTIGE_NABERIUS = 19023; +const int VESTIGE_RONOVE = 19024; +const int VESTIGE_DAHLVERNAR = 19025; +const int VESTIGE_HAAGENTI = 19026; +const int VESTIGE_MALPHAS = 19027; +const int VESTIGE_SAVNOK = 19028; +const int VESTIGE_ANDROMALIUS = 19029; +const int VESTIGE_FOCALOR = 19030; +const int VESTIGE_KARSUS = 19031; +const int VESTIGE_PAIMON = 19032; +const int VESTIGE_AGARES = 19033; +const int VESTIGE_ANDRAS = 19034; +const int VESTIGE_BUER = 19035; +const int VESTIGE_EURYNOME = 19036; +const int VESTIGE_TENEBROUS = 19037; +const int VESTIGE_ARETE = 19038; +const int VESTIGE_ASTAROTH = 19039; +const int VESTIGE_ACERERAK = 19040; +const int VESTIGE_BALAM = 19041; +const int VESTIGE_DANTALION = 19042; +const int VESTIGE_GERYON = 19043; +const int VESTIGE_OTIAX = 19044; +const int VESTIGE_CHUPOCLOPS = 19045; +const int VESTIGE_HAURES = 19046; +const int VESTIGE_IPOS = 19047; +const int VESTIGE_SHAX = 19048; +const int VESTIGE_ZAGAN = 19049; +const int VESTIGE_VANUS = 19050; +const int VESTIGE_THETRIAD = 19051; +const int VESTIGE_DESHARIS = 19052; +const int VESTIGE_ZCERYLL = 19053; +const int VESTIGE_ELIGOR = 19054; +const int VESTIGE_MARCHOSIAS = 19055; +const int VESTIGE_ASHARDALON = 19056; +const int VESTIGE_HALPHAX = 19057; +const int VESTIGE_ORTHOS = 19058; +const int VESTIGE_ABYSM = 19059; + +// Vestige IPFeat Constants +const int IP_CONST_VESTIGE_AMON_BREATH = 13730; +const int IP_CONST_VESTIGE_AYM_HALO = 13731; +const int IP_CONST_VESTIGE_LERAJE_RICOCHET = 13732; +const int IP_CONST_VESTIGE_NABERIUS_DISGUISE = 13733; +const int IP_CONST_VESTIGE_NABERIUS_COMMAND = 13734; +const int IP_CONST_VESTIGE_RONOVE_FARHAND = 13735; +const int IP_CONST_VESTIGE_RONOVE_BULLRUSH = 13736; +const int IP_CONST_VESTIGE_DAHLVER_MOAN = 13737; +const int IP_CONST_VESTIGE_DAHLVER_SHARE = 13738; +const int IP_CONST_VESTIGE_HAAGENTI_TOUCH = 13739; +const int IP_CONST_VESTIGE_MALPHAS_EYE = 13740; +const int IP_CONST_VESTIGE_MALPHAS_INVIS_ST = 13741; +const int IP_CONST_VESTIGE_MALPHAS_INVIS_SW = 13742; +const int IP_CONST_VESTIGE_SAVNOK_CALL = 13743; +const int IP_CONST_VESTIGE_SAVNOK_MOVE_ST = 13744; +const int IP_CONST_VESTIGE_SAVNOK_MOVE_SW = 13745; +const int IP_CONST_VESTIGE_ANDRO_MIRTH = 13746; +const int IP_CONST_VESTIGE_ANDRO_LOCATE = 13747; +const int IP_CONST_VESTIGE_ANDRO_SEE = 13748; +const int IP_CONST_VESTIGE_FOCALOR_AURA = 13749; +const int IP_CONST_VESTIGE_FOCALOR_BOLT = 13750; +const int IP_CONST_VESTIGE_FOCALOR_BREATH = 13751; +const int IP_CONST_VESTIGE_KARSUS_SENSES = 13752; +const int IP_CONST_VESTIGE_KARSUS_TOUCH = 13753; +const int IP_CONST_VESTIGE_PAIMON_DANCE = 13754; +const int IP_CONST_VESTIGE_AGARES_STEP = 13755; +const int IP_CONST_VESTIGE_AGARES_ELEMENTAL = 13756; +const int IP_CONST_VESTIGE_ANDRAS_SMITE = 13757; +const int IP_CONST_VESTIGE_ANDRAS_DISCORD = 13758; +const int IP_CONST_VESTIGE_ANDRAS_MOUNT = 13759; +const int IP_CONST_VESTIGE_BUER_HEAL = 13760; +const int IP_CONST_VESTIGE_TENEBROUS_DARKNESS = 13761; +const int IP_CONST_VESTIGE_TENEBROUS_TOUCH_VOID = 13762; +const int IP_CONST_VESTIGE_TENEBROUS_TURN = 13763; +const int IP_CONST_VESTIGE_TENEBROUS_VESSEL = 13764; +const int IP_CONST_VESTIGE_ACERERAK_DETECT = 13765; +const int IP_CONST_VESTIGE_ACERERAK_HIDE = 13766; +const int IP_CONST_VESTIGE_ACERERAK_TOUCH = 13767; +const int IP_CONST_VESTIGE_BALAM_CUNNING = 13768; +const int IP_CONST_VESTIGE_BALAM_GLARE = 13769; +const int IP_CONST_VESTIGE_DANTALION_AWE = 13770; +const int IP_CONST_VESTIGE_DANTALION_READ = 13771; +const int IP_CONST_VESTIGE_DANTALION_TRAVEL = 13772; +const int IP_CONST_VESTIGE_GERYON_GAZE = 13773; +const int IP_CONST_VESTIGE_GERYON_FLIGHT = 13774; +const int IP_CONST_VESTIGE_OTIAX_AIR_BLAST = 13775; +const int IP_CONST_VESTIGE_OTIAX_OPEN = 13776; +const int IP_CONST_VESTIGE_OTIAX_UNLOCK = 13777; +const int IP_CONST_VESTIGE_ARETE_RESISTANCE = 13778; +const int IP_CONST_VESTIGE_ASTAROTH_BREATH = 13779; +const int IP_CONST_VESTIGE_ASTAROTH_WORD = 13780; +const int IP_CONST_VESTIGE_CHUPOCLOPS_DESPAIR = 13781; +const int IP_CONST_VESTIGE_CHUPOCLOPS_ETHEREAL = 13782; +const int IP_CONST_VESTIGE_HAURES_IMAGE = 13783; +const int IP_CONST_VESTIGE_HAURES_KILLER = 13784; +const int IP_CONST_VESTIGE_IPOS_INSIGHT = 13785; +const int IP_CONST_VESTIGE_SHAX_FREEDOM = 13786; +const int IP_CONST_VESTIGE_SHAX_STRIKE = 13787; +const int IP_CONST_VESTIGE_ZAGAN_AVERSION = 13788; +const int IP_CONST_VESTIGE_VANUS_FREE_ALLY = 13789; +const int IP_CONST_VESTIGE_THE_TRIAD_SMITE = 13790; +const int IP_CONST_VESTIGE_DESHARIS_TELEPORT = 13791; +const int IP_CONST_VESTIGE_DESHARIS_SMITE = 13792; +const int IP_CONST_VESTIGE_DESHARIS_ANIMATE = 13793; +const int IP_CONST_VESTIGE_ZCERYLL_BOLTS = 13794; +const int IP_CONST_VESTIGE_ZCERYLL_SUMMON = 13795; +const int IP_CONST_VESTIGE_ZCERYLL_TRUE_STRIKE = 13796; +const int IP_CONST_VESTIGE_ELIGOR_STRIKE = 13797; +const int IP_CONST_VESTIGE_MARCHOSIAS_SMOKE = 13798; +const int IP_CONST_VESTIGE_ASHARDALON_PRESENCE = 13799; +const int IP_CONST_VESTIGE_ASHARDALON_LOCATE = 13800; +const int IP_CONST_VESTIGE_HALPHAX_IMPRISON = 13801; +const int IP_CONST_VESTIGE_HALPHAX_BARRIER = 13802; +const int IP_CONST_VESTIGE_HALPHAX_SHELTER = 13803; +const int IP_CONST_VESTIGE_ORTHOS_BREATH = 13804; + +// Vestige Ability SpellId Constants +const int VESTIGE_NABERIUS_DISGUISE_SELF_LEARN = 19074; +const int VESTIGE_NABERIUS_DISGUISE_SELF_OPTIONS = 19075; +const int VESTIGE_NABERIUS_DISGUISE_SELF_QS1 = 19076; +const int VESTIGE_NABERIUS_DISGUISE_SELF_QS2 = 19077; +const int VESTIGE_NABERIUS_DISGUISE_SELF_QS3 = 19078; +const int VESTIGE_NABERIUS_COMMAND_APPROACH = 19080; +const int VESTIGE_NABERIUS_COMMAND_DROP = 19081; +const int VESTIGE_NABERIUS_COMMAND_FALL = 19082; +const int VESTIGE_NABERIUS_COMMAND_FLEE = 19083; +const int VESTIGE_NABERIUS_COMMAND_HALT = 19084; +const int VESTIGE_RONOVE_FARHAND = 19085; +const int VESTIGE_RONOVE_BULLRUSH = 19086; +const int VESTIGE_FOCALOR_AURA_SADNESS = 19097; +const int VESTIGE_KARSUS_SENSES = 19100; +const int VESTIGE_KARSUS_DISPEL = 19101; +const int VESTIGE_TENEBROUS_TURN = 19111; +const int VESTIGE_TENEBROUS_FLICKER = 19112; +const int VESTIGE_DANTALION_READ_THOUGHTS = 19119; +const int VESTIGE_DANTALION_TRAVEL_SPELL = 19120; +const int VESTIGE_ARETE_RESIST = 19126; +const int VESTIGE_CHUPOCLOPS_AURA_DESPAIR = 19129; +const int VESTIGE_CHUPOCLOPS_ETHEREAL_WATCHER = 19130; +const int VESTIGE_THE_TRIAD_SMITE = 19138; + +// General Binding SpellId Constants +const int VESTIGE_PACT_AUGMENTATION = 19171; + +// Vestige Ability Constants, matches line # in vestigeabil.2da +const int VESTIGE_AMON_DARKVISION = 1 ; +const int VESTIGE_AMON_FIREBREATH = 2 ; +const int VESTIGE_AMON_RAMATTACK = 3 ; +const int VESTIGE_AYM_DWARVEN_STEP = 4 ; +const int VESTIGE_AYM_HALO_FIRE = 5 ; +const int VESTIGE_AYM_IMP_DISARM = 6 ; +const int VESTIGE_AYM_MEDIUM_ARMOR = 7 ; +const int VESTIGE_AYM_RESIST_FIRE = 8 ; +const int VESTIGE_AYM_RUINOUS_ATTACK = 9 ; +const int VESTIGE_LERAJE_HIDE_BONUS = 10; +const int VESTIGE_LERAJE_LOW_LIGHT_VISION = 11; +const int VESTIGE_LERAJE_PBSHOT = 12; +const int VESTIGE_LERAJE_RICOCHET = 13; +const int VESTIGE_LERAJE_WEAPON_PROF = 14; +const int VESTIGE_NABERIUS_DISGUISE_SELF = 15; +const int VESTIGE_NABERIUS_ABILITY_HEALING = 16; +const int VESTIGE_NABERIUS_SKILLS = 17; +const int VESTIGE_NABERIUS_PERSUASIVE = 18; +const int VESTIGE_NABERIUS_SILVER_TONGUE = 19; +const int VESTIGE_RONOVE_COLD_IRON = 20; +const int VESTIGE_RONOVE_FAR_HAND = 21; +const int VESTIGE_RONOVE_FISTS = 22; +const int VESTIGE_RONOVE_SPRINT = 23; +const int VESTIGE_DAHLVERNAR_MAD_SOUL = 24; +const int VESTIGE_DAHLVERNAR_MADDENING_MOAN = 25; +const int VESTIGE_DAHLVERNAR_NATURAL_ARMOR = 26; +const int VESTIGE_DAHLVERNAR_SHIELD_SELF = 27; +const int VESTIGE_HAAGENTI_CONFUSE = 28; +const int VESTIGE_HAAGENTI_IMMUNE_TRANS = 29; +const int VESTIGE_HAAGENTI_SHIELD_PROF = 30; +const int VESTIGE_HAAGENTI_WEAPON_PROF = 31; +const int VESTIGE_MALPHAS_ARCANE_EYE = 32; +const int VESTIGE_MALPHAS_INVIS = 33; +const int VESTIGE_MALPHAS_POISON_USE = 34; +const int VESTIGE_MALPHAS_SNEAK_ATTACK = 35; +const int VESTIGE_SAVNOK_CALL_ARMOR = 36; +const int VESTIGE_SAVNOK_HEAVY_ARMOR_PROF = 37; +const int VESTIGE_SAVNOK_MOVE_ALLY = 38; +const int VESTIGE_SAVNOK_SAVNOKS_ARMOR = 39; +const int VESTIGE_ANDROMALIUS_JESTER = 40; +const int VESTIGE_ANDROMALIUS_LOCATE = 41; +const int VESTIGE_ANDROMALIUS_SEE = 42; +const int VESTIGE_ANDROMALIUS_SENSE = 43; +const int VESTIGE_ANDROMALIUS_SNEAK = 44; +const int VESTIGE_FOCALOR_AURA = 45; +const int VESTIGE_FOCALOR_BREATH = 46; +const int VESTIGE_FOCALOR_LIGHTNING = 47; +const int VESTIGE_FOCALOR_BREATHING = 48; +const int VESTIGE_KARSUS_HEAVY_MAGIC = 49; +const int VESTIGE_KARSUS_SENSES_ABIL = 50; +const int VESTIGE_KARSUS_TOUCH = 51; +const int VESTIGE_KARSUS_WILL = 52; +const int VESTIGE_PAIMON_BLADES = 53; +const int VESTIGE_PAIMON_DEX = 54; +const int VESTIGE_PAIMON_SKILLS = 55; +const int VESTIGE_PAIMON_DODGE = 56; +const int VESTIGE_PAIMON_WHIRLWIND = 57; +const int VESTIGE_PAIMON_DANCE = 58; +const int VESTIGE_AGARES_EARTH_MASTERY = 59; +const int VESTIGE_AGARES_EARTHSHAKING = 60; +const int VESTIGE_AGARES_COMPANION = 61; +const int VESTIGE_AGARES_FEAR = 62; +const int VESTIGE_ANDRAS_WEAPON_PROF = 63; +const int VESTIGE_ANDRAS_MOUNT = 64; +const int VESTIGE_ANDRAS_SADDLE_SURE = 65; +const int VESTIGE_ANDRAS_SMITE = 66; +const int VESTIGE_ANDRAS_DISCORD = 67; +const int VESTIGE_ANDRAS_SURE_BLOWS = 68; +const int VESTIGE_BUER_KNOWLEDGE = 69; +const int VESTIGE_BUER_PURITY = 70; +const int VESTIGE_BUER_DELAY_DISEASE = 71; +const int VESTIGE_BUER_FAST_HEALING = 72; +const int VESTIGE_BUER_HEALING_GIFT = 73; +const int VESTIGE_BUER_TRACK = 74; +const int VESTIGE_EURYNOME_ANIMAL_FRIEND = 75; +const int VESTIGE_EURYNOME_DR = 76; +const int VESTIGE_EURYNOME_MAUL = 77; +const int VESTIGE_EURYNOME_POISON = 78; +const int VESTIGE_TENEBROUS_DARKNESS = 79; +const int VESTIGE_TENEBROUS_SEE_DARKNESS = 80; +const int VESTIGE_TENEBROUS_TOUCH_VOID = 81; +const int VESTIGE_TENEBROUS_TURN_UNDEAD = 82; +const int VESTIGE_TENEBROUS_EMPTY_VESSEL = 83; +const int VESTIGE_ARETE_PSIONIC_BOON = 84; +const int VESTIGE_ARETE_RESISTANCE = 85; +const int VESTIGE_ARETE_DR = 86; +const int VESTIGE_ARETE_REPLETION = 87; +const int VESTIGE_ASTAROTH_LORE = 88; +const int VESTIGE_ASTAROTH_BREATH = 89; +const int VESTIGE_ASTAROTH_TONGUE = 90; +const int VESTIGE_ASTAROTH_CRAFT = 91; +const int VESTIGE_ASTAROTH_WORD = 92; +const int VESTIGE_ACERERAK_DETECT = 93; +const int VESTIGE_ACERERAK_HIDE = 94; +const int VESTIGE_ACERERAK_LICH = 95; +const int VESTIGE_ACERERAK_TOUCH = 96; +const int VESTIGE_ACERERAK_HEALING = 97; +const int VESTIGE_BALAM_CUNNING = 98; +const int VESTIGE_BALAM_GLARE = 99; +const int VESTIGE_BALAM_PRESCIENCE = 100; +const int VESTIGE_BALAM_FINESSE = 101; +const int VESTIGE_DANTALION_AWE = 102; +const int VESTIGE_DANTALION_KNOWS = 103; +const int VESTIGE_DANTALION_READ = 104; +const int VESTIGE_DANTALION_TRAVEL = 105; +const int VESTIGE_GERYON_GAZE = 106; +const int VESTIGE_GERYON_VISION = 107; +const int VESTIGE_GERYON_DARKNESS = 108; +const int VESTIGE_GERYON_FLIGHT = 109; +const int VESTIGE_OTIAX_AIR_BLAST = 110; +const int VESTIGE_OTIAX_MIST = 111; +const int VESTIGE_OTIAX_OPEN = 112; +const int VESTIGE_OTIAX_UNLOCK = 113; +const int VESTIGE_CHUPOCLOPS_DESPAIR = 114; +const int VESTIGE_CHUPOCLOPS_ETHEREAL = 115; +const int VESTIGE_CHUPOCLOPS_BITE = 116; +const int VESTIGE_CHUPOCLOPS_POUNCE = 117; +const int VESTIGE_CHUPOCLOPS_SOULSENSE = 118; +const int VESTIGE_HAURES_MIND = 119; +const int VESTIGE_HAURES_MOVE = 120; +const int VESTIGE_HAURES_IMAGE = 121; +const int VESTIGE_HAURES_KILLER = 122; +const int VESTIGE_IPOS_CLAWS = 123; +const int VESTIGE_IPOS_INSIGHT = 124; +const int VESTIGE_IPOS_INFLUENCE = 125; +const int VESTIGE_IPOS_REND = 126; +const int VESTIGE_SHAX_FREEDOM = 127; +const int VESTIGE_SHAX_IMMUNITY = 128; +const int VESTIGE_SHAX_STORM_STRIKE = 129; +const int VESTIGE_ZAGAN_AVERSION = 130; +const int VESTIGE_ZAGAN_GRAPPLE = 131; +const int VESTIGE_ZAGAN_SCENT = 132; +const int VESTIGE_ZAGAN_CONSTRICT = 133; +const int VESTIGE_ZAGAN_LIZARD_BANE = 134; +const int VESTIGE_VANUS_FEAR_AURA = 135; +const int VESTIGE_VANUS_FREE_ALLY = 136; +const int VESTIGE_VANUS_DISDAIN = 137; +const int VESTIGE_VANUS_EARS = 138; +const int VESTIGE_THE_TRIAD_PSIONIC_BOON = 139; +const int VESTIGE_THE_TRIAD_GORN = 140; +const int VESTIGE_THE_TRIAD_RUJSHA = 141; +const int VESTIGE_THE_TRIAD_MINTAR = 142; +const int VESTIGE_DESHARIS_CITY_DWELLER = 143; +const int VESTIGE_DESHARIS_TELEPORT = 144; +const int VESTIGE_DESHARIS_SMITE = 145; +const int VESTIGE_DESHARIS_ANIMATE = 146; +const int VESTIGE_ZCERYLL_ALIEN_FORM = 147; +const int VESTIGE_ZCERYLL_ALIEN_MIND = 148; +const int VESTIGE_ZCERYLL_BOLTS = 149; +const int VESTIGE_ZCERYLL_SUMMON = 150; +const int VESTIGE_ELIGOR_STRIKE = 151; +const int VESTIGE_ELIGOR_SADDLE = 152; +const int VESTIGE_ELIGOR_STRENGTH = 153; +const int VESTIGE_ELIGOR_RESILIENCE = 154; +const int VESTIGE_ELIGOR_ARMOR = 155; +const int VESTIGE_MARCHOSIAS_DEATH_ATTACK = 156; +const int VESTIGE_MARCHOSIAS_RETRIBUTION = 157; +const int VESTIGE_MARCHOSIAS_SMOKE = 158; +const int VESTIGE_MARCHOSIAS_SILENT = 159; +const int VESTIGE_ASHARDALON_CREED = 160; +const int VESTIGE_ASHARDALON_PRESENCE = 161; +const int VESTIGE_ASHARDALON_VIGOR = 162; +const int VESTIGE_ASHARDALON_HEART = 163; +const int VESTIGE_HALPHAX_DR = 164; +const int VESTIGE_HALPHAX_KNOWLEDGE = 165; +const int VESTIGE_HALPHAX_IMPRISON = 166; +const int VESTIGE_HALPHAX_BARRIER = 167; +const int VESTIGE_HALPHAX_SHELTER = 168; +const int VESTIGE_ORTHOS_SIGHT = 169; +const int VESTIGE_ORTHOS_DISPLACEMENT = 170; +const int VESTIGE_ORTHOS_BREATH = 171; +const int VESTIGE_ABYSM_PSIONIC_BOON = 172; +const int VESTIGE_ABYSM_OVERPOWER = 173; \ No newline at end of file diff --git a/src/include/inc_2dacache.nss b/src/include/inc_2dacache.nss new file mode 100644 index 0000000..7ef2c61 --- /dev/null +++ b/src/include/inc_2dacache.nss @@ -0,0 +1,190 @@ +/** @file + * Caching 2da read function and related. + * + * SQL/NWNx functions now in inc_sql + * @author Primogenitor + * + * @todo Document the constants and functions + */ + +const int DEBUG_GET2DACACHE = FALSE; + +string Get2DACache(string s2DA, string sColumn, int nRow); + +string GetBiowareDBName(); + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + +#include "inc_debug" +//#include "prc_inc_switch" + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +/* +This is fugly and long. Should maybe be refactored to multiple functions. But everything inline does give +a few less instructions used. + +Caching behaviour: Tokens in creature inventory +*/ +string Get2DACache(string s2DA, string sColumn, int nRow) +{ + //lower case the 2da and column + s2DA = GetStringLowerCase(s2DA); + sColumn = GetStringLowerCase(sColumn); + + /*//get the chest that contains the cache + object oCacheWP = GetObjectByTag("Bioware2DACache"); + //if no chest, use HEARTOFCHAOS in limbo as a location to make a new one + if (!GetIsObjectValid(oCacheWP)) + { + if(DEBUG_GET2DACACHE) DoDebug("Get2DACache: Cache container creature does not exist, creating new one"); + //oCacheWP = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_chest2", + // GetLocation(GetObjectByTag("HEARTOFCHAOS")), FALSE, "Bioware2DACache"); + //has to be a creature, placeables cant go through the DB + oCacheWP = CreateObject(OBJECT_TYPE_CREATURE, "prc_2da_cache", + GetLocation(GetObjectByTag("HEARTOFCHAOS")), FALSE, "Bioware2DACache"); + } + + //get the token for this file + string sFileWPName = s2DA + "_" + sColumn + "_" + IntToString(nRow / 1000); + //if(DEBUG_GET2DACACHE) DoDebug("Get2DACache: Token tag is " + sFileWPName); + object oFileWP = GetObjectByTag(sFileWPName); + //token doesnt exist make it + if(!GetIsObjectValid(oFileWP)) + { + if(DEBUG_GET2DACACHE) DoDebug("Get2DACache: Token does not exist, creating new one"); + + // Use containers to avoid running out of inventory space + int nContainer = 0; + string sContainerName = "Bio2DACacheTokenContainer_" + GetSubString(s2DA, 0, 1) + "_"; + object oContainer = GetObjectByTag(sContainerName + IntToString(nContainer)); + + // Find last existing container + if(GetIsObjectValid(oContainer)) + { + if(DEBUG_GET2DACACHE) DoDebug("Get2DACache: Seeking last container in series: " + sContainerName); + // find the last container + nContainer = GetLocalInt(oContainer, "ContainerCount"); + oContainer = GetObjectByTag(sContainerName + IntToString(nContainer)); + + if(DEBUG_GET2DACACHE) DoDebug("Get2DACache: Found: " + DebugObject2Str(oContainer)); + + // Make sure it's not full + if(GetLocalInt(oContainer, "NumTokensInside") >= 34) // Container has 35 slots. Attempt to not use them all, just in case + { + if(DEBUG_GET2DACACHE) DoDebug("Get2DACache: Container full: " + DebugObject2Str(oContainer)); + oContainer = OBJECT_INVALID; + ++nContainer; // new container is 1 higher than last one + } + } + // We need to create a container + if(!GetIsObjectValid(oContainer)) + { + if(DEBUG_GET2DACACHE) DoDebug("Get2DACache: Creating new container"); + + oContainer = CreateObject(OBJECT_TYPE_ITEM, "nw_it_contain001", GetLocation(oCacheWP), FALSE, sContainerName + IntToString(nContainer)); + DestroyObject(oContainer); + oContainer = CopyObject(oContainer, GetLocation(oCacheWP), oCacheWP, sContainerName + IntToString(nContainer)); + // store the new number of containers in this series + if (nContainer) + SetLocalInt( GetObjectByTag(sContainerName + "0"), "ContainerCount", nContainer); + // else this is the first container - do nothing as this is the same as storing 0 on it. + // Also here we still have 2 objects with the same tag so above code may get + // the object destroyed at the end of the function if this is the first container. + } + + if(DEBUG_GET2DACACHE) DoDebug("Get2DACache: Using container: " + DebugObject2Str(oContainer)); + + // Create the new token + //oFileWP = CreateObject(OBJECT_TYPE_ITEM, "hidetoken", GetLocation(oCacheWP), FALSE, sFileWPName); + //DestroyObject(oFileWP); + //oFileWP = CopyObject(oFileWP, GetLocation(oCacheWP), oCacheWP, sFileWPName); + oFileWP = CreateItemOnObject("hidetoken", oContainer, 1, sFileWPName); + + //SetName(oFileWP, "2da Cache - " + sFileWPName); + + // Increment token count tracking variable + SetLocalInt(oContainer, "NumTokensInside", GetLocalInt(oContainer, "NumTokensInside") + 1); + } + + // get the value from the cache + string s = GetLocalString(oFileWP, s2DA+"|"+sColumn+"|"+IntToString(nRow)); + //entry didnt exist in the cache + if(s == "") + { + //fetch from the 2da file + s = Get2DAString(s2DA, sColumn, nRow); + + // store it on the waypoint + SetLocalString(oFileWP, s2DA+"|"+sColumn+"|"+IntToString(nRow), + (s == "" ? "****" : s) ); // this sets the stored string to "****" if s is an empty string (else stores s) + if(DEBUG_GET2DACACHE) DoDebug("Get2DACache: Missing from cache: " + s2DA + "|" + sColumn + "|" + IntToString(nRow)); + } + //if(DEBUG_GET2DACACHE) PrintString("Get2DACache: Returned value is '" + s + "'");*/ + string s = Get2DAString(s2DA, sColumn, nRow); + return s == "****" ? "" : s; +} + +string GetBiowareDBName() +{ + string sReturn; + sReturn = "prc_data"; + //if(GetPRCSwitch(MARKER_PRC_COMPANION)) + // sReturn += "cp"; + if(GetPRCSwitch(MARKER_CEP1)) + sReturn += "c1"; + if(GetPRCSwitch(MARKER_CEP2)) + sReturn += "c2"; + if(GetPRCSwitch(MARKER_Q)) + sReturn += "q"; + return sReturn; + +} + +/** + * Gets the file end for the given 2da. + * + * @param sTable The 2da to get the file end for + * @return The file end value of the 2da. + */ +int PRCGetFileEnd(string sTable) +{ + sTable = GetStringLowerCase(sTable); + return GetPRCSwitch("PRC_FILE_END_" + sTable); +/* //check fileends.2da first + int nEnd = StringToInt(Get2DACache("fileends", sTable, 0)); + + //still nothing - check + if(!nEnd) nEnd = StringToInt(Get2DACache("fileends", GetStringLeft(sTable, 8)+"*", 0)); + + return nEnd;*/ +} + +/** + * Gets the file end for special PRC files - used in new spellbook system. + * + * cls_psipw_* + * cls_move_* + * cls_true_* + * cls_inv_* + * cls_spell_* + * + * @param sTable The 2da to get the file end for + * @return The file end value of the 2da. + */ +int PRCGetDynamicFileEnd(string sTable) +{ + int nRet = StringToInt(Get2DACache(sTable, "label", 0)); + if(!nRet) + { + if (DEBUG) DoDebug("FileEnd for "+sTable+" not found! Using default value."); + nRet = 2720; + } + return nRet; +} + +//Cache setup functions moved to inc_cache_setup diff --git a/src/include/inc_abil_damage.nss b/src/include/inc_abil_damage.nss new file mode 100644 index 0000000..8539950 --- /dev/null +++ b/src/include/inc_abil_damage.nss @@ -0,0 +1,215 @@ +//:://///////////////////////////////////////////// +//:: Ability Damage special effects include +//:: inc_abil_damage +//::////////////////////////////////////////////// +/** @file + Implements the special effects of an ability + score falling down to 0 as according to PnP. + + Strength: Lies helpless on ground (knockdown) + Dexterity: Paralyzed + Constitution: Death + Intelligence: Coma (knockdown) + Wisdom: Coma (knockdown) + Charisma: Coma (knockdown) + + + This can be turned off with a switch in + prc_inc_switches : PRC_NO_PNP_ABILITY_DAMAGE + + + NOTE: Due to BioOptimization (tm), Dex reaching + 0 from above 3 when any other stat is already + at 0 will result in Dex being considered + restored at the same time the other stat is. + + This might be workable around, but not + efficiently. +*/ +//::////////////////////////////////////////////// +//:: Created By: Ornedan +//:: Created On: 09.04.2005 +//:: Modified On: 25.06.2005 +//::////////////////////////////////////////////// + +/* +[00:55] yup +[00:56] well, something to add +[00:56] if KTTS reduces target to 0 (or would, i know NWN goes to 3) +[00:56] drop a cutscene paralyze on em +[00:56] and a long duration knockdown +[01:00] 'k. And spawn a pseudo-hb on them to do recovery if they ever regain the mental stat +[01:01] Also, test result: You lose spellcasting if your casting stat drops below the required, even if the reduction is a magical penalty +[01:03] you do? cool +*/ + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +// Internal function. Called by a threadscript. Handles checking if any ability that has reached 0 has been restored +void AbilityDamageMonitor(); + +// Dex needs special handling due to the way CutsceneParalyze works (sets Dex to 3) +void DoDexCheck(object oCreature, int bFirstPart = TRUE); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +//#include "prc_inc_spells" +#include "prc_inc_damage" //functions to apply damage + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +void AbilityDamageMonitor() +{ + object oCreature = OBJECT_SELF; + int nMonitoredAbilities = GetLocalInt(oCreature, ABILITY_DAMAGE_MONITOR); + int nEffects = GetLocalInt(oCreature, ABILITY_DAMAGE_SPECIALS); + + if (DEBUG) DoDebug("AbilityDamageMonitor running"); + + // Check each of the monitored abilities + if(nMonitoredAbilities & (1 << ABILITY_STRENGTH)) + { + if(GetAbilityScore(oCreature, ABILITY_STRENGTH) > 3) + { + DeleteLocalInt(oCreature, VIRTUAL_ABILITY_SCORE + IntToString(ABILITY_STRENGTH)); + SetLocalInt(oCreature, ABILITY_DAMAGE_MONITOR, GetLocalInt(oCreature, ABILITY_DAMAGE_MONITOR) ^ (1 << ABILITY_STRENGTH)); + if (DEBUG) DoDebug("AbilityDamageMonitor Strength healed"); + } + } + /*if(nMonitoredAbilities & (1 << ABILITY_DEXTERITY)) + { + if(GetAbilityScore(oCreature, ABILITY_DEXTERITY) > 3) + { + DeleteLocalInt(oCreature, VIRTUAL_ABILITY_SCORE + IntToString(ABILITY_DEXTERITY)); + SetLocalInt(oCreature, ABILITY_DAMAGE_MONITOR, GetLocalInt(oCreature, ABILITY_DAMAGE_MONITOR) ^ (1 << ABILITY_DEXTERITY)); + } + }*/ + if(nMonitoredAbilities & (1 << ABILITY_INTELLIGENCE)) + { + if(GetAbilityScore(oCreature, ABILITY_INTELLIGENCE) > 3) + { + DeleteLocalInt(oCreature, VIRTUAL_ABILITY_SCORE + IntToString(ABILITY_INTELLIGENCE)); + SetLocalInt(oCreature, ABILITY_DAMAGE_MONITOR, GetLocalInt(oCreature, ABILITY_DAMAGE_MONITOR) ^ (1 << ABILITY_INTELLIGENCE)); + if (DEBUG) DoDebug("AbilityDamageMonitor Int healed"); + } + } + if(nMonitoredAbilities & (1 << ABILITY_WISDOM)) + { + if(GetAbilityScore(oCreature, ABILITY_WISDOM) > 3) + { + DeleteLocalInt(oCreature, VIRTUAL_ABILITY_SCORE + IntToString(ABILITY_WISDOM)); + SetLocalInt(oCreature, ABILITY_DAMAGE_MONITOR, GetLocalInt(oCreature, ABILITY_DAMAGE_MONITOR) ^ (1 << ABILITY_WISDOM)); + if (DEBUG) DoDebug("AbilityDamageMonitor Wis healed"); + } + } + if(nMonitoredAbilities & (1 << ABILITY_CHARISMA)) + { + if(GetAbilityScore(oCreature, ABILITY_CHARISMA) > 3) + { + DeleteLocalInt(oCreature, VIRTUAL_ABILITY_SCORE + IntToString(ABILITY_CHARISMA)); + SetLocalInt(oCreature, ABILITY_DAMAGE_MONITOR, GetLocalInt(oCreature, ABILITY_DAMAGE_MONITOR) ^ (1 << ABILITY_CHARISMA)); + if (DEBUG) DoDebug("AbilityDamageMonitor Cha healed"); + } + } + + // Check which effects, if any, need to be removed + int bRemovePara, bRemoveKnock; + nMonitoredAbilities = GetLocalInt(oCreature, ABILITY_DAMAGE_MONITOR); + if(!(nMonitoredAbilities & (1 << ABILITY_STRENGTH) || + nMonitoredAbilities & (1 << ABILITY_INTELLIGENCE) || + nMonitoredAbilities & (1 << ABILITY_WISDOM) || + nMonitoredAbilities & (1 << ABILITY_CHARISMA) + ) ) + { + // Only remove effects if they are present + if(nEffects & ABILITY_DAMAGE_EFFECT_KNOCKDOWN) + { + bRemoveKnock = TRUE; + nEffects ^= ABILITY_DAMAGE_EFFECT_KNOCKDOWN; + } + if(!(nMonitoredAbilities & (1 << ABILITY_DEXTERITY))) + { + if(nEffects & ABILITY_DAMAGE_EFFECT_PARALYZE) + { + bRemovePara = TRUE; + nEffects ^= ABILITY_DAMAGE_EFFECT_KNOCKDOWN; + } + } + // Dex is the only remaining stat keeping CutscenePara on, so run the dexcheck + else + DelayCommand(0.1f, DoDexCheck(oCreature, TRUE)); + + SetLocalInt(oCreature, ABILITY_DAMAGE_SPECIALS, nEffects); + } + + if (DEBUG) DoDebug("AbilityDamageMonitor bRemovePara:" + IntToString(bRemovePara)); + if (DEBUG) DoDebug("AbilityDamageMonitor bRemoveKnock:" + IntToString(bRemoveKnock)); + + // Do effect removal + if(bRemovePara || bRemoveKnock) + { + effect eCheck = GetFirstEffect(oCreature); + while(GetIsEffectValid(eCheck)) + { + if(bRemovePara && GetEffectType(eCheck) == EFFECT_TYPE_CUTSCENE_PARALYZE){ + if (DEBUG) DoDebug("AbilityDamageMonitor Removed para"); + RemoveEffect(oCreature, eCheck); + } + else if(bRemoveKnock && GetEffectType(eCheck) == 0){ + RemoveEffect(oCreature, eCheck); + if (DEBUG) DoDebug("AbilityDamageMonitor Removed knock"); + } + eCheck = GetNextEffect(oCreature); + } + } + if (DEBUG) DoDebug("AbilityDamageMonitor Monitored abilities:" + IntToString(nMonitoredAbilities)); + + // Stop the thread if there is nothing to monitor anymore + if(!nMonitoredAbilities) + TerminateCurrentThread(); +} + +void DoDexCheck(object oCreature, int bFirstPart = TRUE) +{ + // Remove CutscenePara + if(bFirstPart) + { + effect eCheck = GetFirstEffect(oCreature); + while(GetIsEffectValid(eCheck)) + { + if(GetEffectType(eCheck) == EFFECT_TYPE_CUTSCENE_PARALYZE) + RemoveEffect(oCreature, eCheck); + eCheck = GetNextEffect(oCreature); + } + + DelayCommand(0.1f, DoDexCheck(oCreature, FALSE)); + if (DEBUG) DoDebug("First part ran"); + } + // Check if Dex is over 3 when it's gone + else + { + // It is, so remove Dex from the monitored list + if(GetAbilityScore(oCreature, ABILITY_DEXTERITY) > 3) + { + DeleteLocalInt(oCreature, VIRTUAL_ABILITY_SCORE + IntToString(ABILITY_DEXTERITY)); + SetLocalInt(oCreature, ABILITY_DAMAGE_MONITOR, GetLocalInt(oCreature, ABILITY_DAMAGE_MONITOR) ^ (1 << ABILITY_DEXTERITY)); + if (DEBUG) DoDebug("Dex check +"); + } + /*else + SendMessageToPC(GetFirstPC(), "Dex check -");*/ + + // Apply CutscenePara back in either case. Next monitor call will remove it if it's supposed to be gone + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectCutsceneParalyze(), oCreature); + } +} + + + +// Test main +//void main(){} diff --git a/src/include/inc_acp.nss b/src/include/inc_acp.nss new file mode 100644 index 0000000..a117a5e --- /dev/null +++ b/src/include/inc_acp.nss @@ -0,0 +1,98 @@ +#include "prc_inc_switch" + +const int PHENOTYPE_KENSAI = 49; +const int PHENOTYPE_ASSASSIN = 50; +const int PHENOTYPE_BARBARIAN = 51; +const int PHENOTYPE_FENCING = 52; +const int PHENOTYPE_ARCANE = 53; +const int PHENOTYPE_DEMONBLADE = 54; +const int PHENOTYPE_WARRIOR = 55; +const int PHENOTYPE_TIGERFANG = 56; +const int PHENOTYPE_SUNFIST = 57; +const int PHENOTYPE_DRAGONPALM = 58; +const int PHENOTYPE_BEARSCLAW = 59; + +string sLock = "acp_fightingstyle_lock"; + +/* This creates a LocalInt - a "lock" - ..we check further down if it exists... + * if it does, we don't allow phenotype changing. To prevent lag spam. */ +void LockThisFeat() +{ + SetLocalInt(OBJECT_SELF, sLock, TRUE); + float fDelay = IntToFloat(GetPRCSwitch(PRC_ACP_DELAY))*60.0; + if(fDelay == 0.0) + fDelay = 90.0; + if(fDelay == -60.0) + fDelay = 0.0; + DelayCommand(fDelay, DeleteLocalInt(OBJECT_SELF, sLock)); //Lock persists 1 min times switchval +} + +void ResetFightingStyle() //Resets the character phenotype to 0 +{ + int nCurrentPheno = GetPhenoType(OBJECT_SELF); + + //If we are at phenotype 0 or 2, we do nothing. Tell the player that. + if(nCurrentPheno == PHENOTYPE_NORMAL + || nCurrentPheno == PHENOTYPE_BIG) + SendMessageToPC(OBJECT_SELF, "You are already using the default combat style."); + + //else if we are at an ACP phenotype we want to reset it to neutral. + else if(nCurrentPheno == PHENOTYPE_KENSAI + || nCurrentPheno == PHENOTYPE_ASSASSIN + || nCurrentPheno == PHENOTYPE_BARBARIAN + || nCurrentPheno == PHENOTYPE_FENCING + || nCurrentPheno == PHENOTYPE_ARCANE + || nCurrentPheno == PHENOTYPE_DEMONBLADE + || nCurrentPheno == PHENOTYPE_WARRIOR + || nCurrentPheno == PHENOTYPE_TIGERFANG + || nCurrentPheno == PHENOTYPE_SUNFIST + || nCurrentPheno == PHENOTYPE_DRAGONPALM + || nCurrentPheno == PHENOTYPE_BEARSCLAW) + { + SetPhenoType(PHENOTYPE_NORMAL); + LockThisFeat(); // Lock use! + } + + //else, warn that the player doesn't have a phenotype which can be reset right now + else + SendMessageToPC(OBJECT_SELF, "Your phenotype is non-standard and cannot be reset this way."); +} + +void SetCustomFightingStyle(int iStyle) //Sets character phenotype to 5,6,7 or 8 +{ + int nCurrentPheno = GetPhenoType(OBJECT_SELF); + + //Maybe we're already using this fighting style? Just warn the player. + if(nCurrentPheno == iStyle) + SendMessageToPC(OBJECT_SELF, "You're already using this fighting style!"); + + //If we are at phenotype 0 or one of the styles themselves, we go ahead + //and set the creature's phenotype accordingly! (safe thanks to previous 'if') + else if(nCurrentPheno == PHENOTYPE_NORMAL + || nCurrentPheno == PHENOTYPE_KENSAI + || nCurrentPheno == PHENOTYPE_ASSASSIN + || nCurrentPheno == PHENOTYPE_FENCING + || nCurrentPheno == PHENOTYPE_ARCANE + || nCurrentPheno == PHENOTYPE_BARBARIAN + || nCurrentPheno == PHENOTYPE_DEMONBLADE + || nCurrentPheno == PHENOTYPE_WARRIOR + || nCurrentPheno == PHENOTYPE_TIGERFANG + || nCurrentPheno == PHENOTYPE_SUNFIST + || nCurrentPheno == PHENOTYPE_DRAGONPALM + || nCurrentPheno == PHENOTYPE_BEARSCLAW) + { + SetPhenoType(iStyle); + LockThisFeat(); // Lock use! + } + + //At phenotype 2? Tell the player they're too fat! + else if (nCurrentPheno == PHENOTYPE_BIG) + SendMessageToPC(OBJECT_SELF, "You're too fat to use a different fighting style!"); + + //...we didn't fulfil the above conditions? Warn the player. + else + SendMessageToPC(OBJECT_SELF, "Your phenotype is non-standard / Unable to change style"); +} + +// Test main +//void main(){} \ No newline at end of file diff --git a/src/include/inc_addragebonus.nss b/src/include/inc_addragebonus.nss new file mode 100644 index 0000000..e317590 --- /dev/null +++ b/src/include/inc_addragebonus.nss @@ -0,0 +1,202 @@ +#include "inc_utility" + +//:: Created by Mr. Bumpkin +//:: Include for all rages +//:: This function gets called right after the attribute bonuses are +//:: Applied. + +// Applies all the bonus damage, to hit, and temporary hp to barbarians who would go over their +// +12 attribute caps by raging. +void GiveExtraRageBonuses(int nDuration, int nStrBeforeRaging, int nConBeforeRaging, int strBonus, int conBonus, int nSave, int nDamageBonusType, object oRager = OBJECT_SELF); + +// Returns the damage type of the weapon held in nInventorySlot by oCreature. If they aren't +// holding a weapon, or the weapon they're holding is a x-bow, sling, shuriken, or dart, it returns +// either the damage type of slashing or bludgeoning, depending on whether they have a prc creature +// slashing weapon or not. It's bludgeoning if they don't have a prc creature slashing weapon. +int GetDamageTypeOfWeapon(int nInventorySlot, object oCreature = OBJECT_SELF); + +// Applies all the bonus damage, to hit, and temporary hp to barbarians who would go over their +// +12 attribute caps by raging. +void GiveExtraRageBonuses(int nDuration, int nStrBeforeRaging, int nConBeforeRaging, int strBonus, int conBonus, int nSave, int nDamageBonusType, object oRager = OBJECT_SELF) +{ + float nDelayed = 0.1; + + int nStrSinceRaging = GetAbilityScore(oRager, ABILITY_STRENGTH); + int nConSinceRaging = GetAbilityScore(oRager, ABILITY_CONSTITUTION); + + + int nStrAdded = nStrSinceRaging - nStrBeforeRaging; + // The amount that was added to the str + int nStrWeWouldAdd = strBonus - nStrAdded; + // The amount we would have to theorhetically add if we wanted to give them the full bonus. + effect eDamage; + effect eToHit; + + if(nStrAdded < strBonus) + { + //int nDamageBonusType = GetDamageTypeOfWeapon(INVENTORY_SLOT_RIGHTHAND, oRager); + + if((nStrSinceRaging/2) * 2 != nStrSinceRaging) + // determine if their current Str right now is odd + { + if((nStrWeWouldAdd/2) * 2 != nStrWeWouldAdd) + // determine if the amount we would theorhetically have to add is odd. + // If so, then we're adding 2 odd numbers together to get an even. Add one to the bonuses + { + //::::: in this event we add nStrWeWouldAdd/2 + 1 + //int nAmountToAdd = nStrWeWouldAdd/2 + 1; + + eDamage = EffectDamageIncrease(nStrWeWouldAdd/2 + 1, nDamageBonusType); + eToHit = EffectAttackIncrease(nStrWeWouldAdd/2 +1); + } + else + { + //::::: in this event we add nStrWeWouldAdd/2 + eDamage = EffectDamageIncrease(nStrWeWouldAdd/2, nDamageBonusType); + eToHit = EffectAttackIncrease(nStrWeWouldAdd/2); + } + } + else + { + //::::: in this event we add nStrWeWouldAdd/2 + eDamage = EffectDamageIncrease(nStrWeWouldAdd/2, nDamageBonusType); + eToHit = EffectAttackIncrease(nStrWeWouldAdd/2); + } + + effect eLink2 = ExtraordinaryEffect(EffectLinkEffects(eDamage, eToHit)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink2, oRager, RoundsToSeconds(nDuration) - nDelayed); + // Applies the damage and toHit effects. I couldn't help myself, so I made the damage type be fire. + + } + // If nStrAdded >= nStrBonus, then no need to add any special bonuses. :) + + int nConAdded = nConSinceRaging - nConBeforeRaging; + // The amount that was added to the Con + int nConWeWouldAdd = conBonus - nConAdded; + // The amount we would have to theorhetically add if we wanted to give them the full bonus. + + + if(nConAdded < conBonus) + { + effect eHitPoints; + effect eHPRemoved; + + int nCharacterLevel = GetHitDice(oRager); + + if((nConSinceRaging/2) * 2 != nConSinceRaging) + // determine if their current Con right now is odd + { + if((nConWeWouldAdd/2) * 2 != nConWeWouldAdd) + // determine if the amount we would theorhetically have to add is odd. + // If so, then we're adding 2 odd numbers together to get an even. Add one to the bonuses + { + //::::: in this event we add nConWeWouldAdd/2 + 1 + + eHitPoints = EffectTemporaryHitpoints((nConWeWouldAdd/2 +1) * nCharacterLevel); + eHPRemoved = EffectDamage(((nConWeWouldAdd/2 +1) * nCharacterLevel), DAMAGE_TYPE_MAGICAL); + // We have to remove the temporary HP at the end of the rage via a damage effect, hehe. + // The damage type will be magical, something to keep in mind of magical resistances exist + // on your module. :) If that's a problem, change the damage type. + + + } + else + { + //::::: in this event we add nConWeWouldAdd/2 + + eHitPoints = EffectTemporaryHitpoints((nConWeWouldAdd/2) * nCharacterLevel); + eHPRemoved = EffectDamage(((nConWeWouldAdd/2) * nCharacterLevel), DAMAGE_TYPE_MAGICAL); + // We have to remove the temporary HP at the end of the rage via a damage effect, hehe. + // The damage type will be magical, something to keep in mind of magical resistances exist + // on your module. :) If that's a problem, change the damage type. + + + } + } + else + { + //::::: in this event we add nConWeWouldAdd/2 + + eHitPoints = EffectTemporaryHitpoints((nConWeWouldAdd/2) * nCharacterLevel); + eHPRemoved = EffectDamage(((nConWeWouldAdd/2) * nCharacterLevel), DAMAGE_TYPE_MAGICAL); + // We have to remove the temporary HP at the end of the rage via a damage effect, hehe. + // The damage type will be magical, something to keep in mind of magical resistances exist + // on your module. :) If that's a problem, change the damage type. + + } + + eHitPoints = ExtraordinaryEffect(eHitPoints); + + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHitPoints, oRager, RoundsToSeconds(nDuration)- nDelayed); + + + //::: Had to ditch applying the damage effect, cause it would apply it even if they rested during their + //::: rage, and the resting was what ended it. Pretty Ironic. + //::: If you reactivate it, make sure to have the temporary HP effect last longer than the delay on the damage effect. 8j + + //DelayCommand(RoundsToSeconds(nDuration) - nDelayed, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHPRemoved, oRager)); + // This is really how the temporary hp are going to get removed. I just didn't want to take any chances, + // so I gave the temporary hp a temporary duration. + + } + +// If nConAdded >= nConBonus, then no need to add any special bonuses. :) + + + +}// End of the whole function. + + +// Returns the damage type of the weapon held in nInventorySlot by oCreature. If they aren't +// holding a weapon, or the weapon they're holding is a x-bow, sling, shuriken, or dart, it returns +// either the damage type of slashing or bludgeoning, depending on whether they have a prc creature +// slashing weapon or not. It's bludgeoning if they don't have a prc creature slashing weapon. + +int GetDamageTypeOfWeapon(int nInventorySlot, object oCreature = OBJECT_SELF) +{ + // 2da lookup to see what kind of damage it deals, then find the equivalent constant + int iDamageType = StringToInt(Get2DACache("baseitems","WeaponType",GetBaseItemType(GetItemInSlot(nInventorySlot, oCreature)))); + switch(iDamageType) + { + case 1: return DAMAGE_TYPE_PIERCING; + case 2: return DAMAGE_TYPE_BLUDGEONING; + case 3: return DAMAGE_TYPE_SLASHING; + case 4: return DAMAGE_TYPE_SLASHING; // slashing & piercing... slashing bonus. + case 5: return DAMAGE_TYPE_BLUDGEONING; // bludeoning & piercing... bludeoning bonus. + } + +// If none of the above types got a hit, we must assume the character is unarmed. + + if(GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oCreature)) == BASE_ITEM_CSLSHPRCWEAP + || GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oCreature)) == BASE_ITEM_CSLSHPRCWEAP + || GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oCreature)) == BASE_ITEM_CSLSHPRCWEAP) + { + return DAMAGE_TYPE_SLASHING; + } + // If they're unarmed and have no creature weapons from a prc, we must assume they are just using their fists. + return DAMAGE_TYPE_BLUDGEONING; + +} + +// function I typed out to add duration to the rage, only to realize happily that there is no need. +// the normal rage function calculates duration as being what it naturally should be, even if there +// were no +12 bonus cap. :) +/* + if(nBonusDuration) + { + effect eStr = EffectAbilityIncrease(ABILITY_CONSTITUTION, nBonus); + effect eCon = EffectAbilityIncrease(ABILITY_STRENGTH, nBonus); + effect eSave = EffectSavingThrowIncrease(SAVING_THROW_WILL, nSave); + effect eAC = EffectACDecrease(2, AC_DODGE_BONUS); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + + effect eLink = EffectLinkEffects(eCon, eStr); + eLink = EffectLinkEffects(eLink, eSave); + eLink = EffectLinkEffects(eLink, eAC); + eLink = EffectLinkEffects(eLink, eDur); + SignalEvent(OBJECT_SELF, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_BARBARIAN_RAGE, FALSE)); + //Make effect extraordinary + eLink = ExtraordinaryEffect(eLink); + DelayCommand(RoundsToSeconds(nDuration, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oRager, RoundsToSeconds(nBonusDuration))); + } +*/ \ No newline at end of file diff --git a/src/include/inc_area.nss b/src/include/inc_area.nss new file mode 100644 index 0000000..6eb86f4 --- /dev/null +++ b/src/include/inc_area.nss @@ -0,0 +1,83 @@ +// Moved to a seperate inc to prevent a circular dependency error + +/*********************\ +* Function Prototypes * +\*********************/ + +/** + * This function will get the width of the area passed in. + * + * Created By: Zaddix + * Created On: July 17, 2002 + * Optimized: March , 2003 by Knat + * + * @param oArea The area to get the width of. + * @return The width of oArea, as number of tiles. One tile = 10 meters. + */ +int GetAreaWidth(object oArea); + +/** + * This function will get the height of the area passed in. + * + * Created By: Zaddix + * Created On: July 17, 2002 + * Optimized: March , 2003 by Knat + * + * @param oArea The area to get the height of. + * @return The height of oArea, as number of tiles. One tile = 10 meters. + */ +int GetAreaHeight(object oArea); + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + + + +/**********************\ +* Function Definitions * +\**********************/ + +int GetAreaWidth(object oArea) +{ + int nX = GetLocalInt(oArea,"#WIDTH"); + if( nX == 0) + { + int nY = 0; int nColor; + for (nX = 0; nX < 32; ++nX) + { + nColor = GetTileMainLight1Color(Location(oArea, Vector(IntToFloat(nX), 0.0, 0.0), 0.0)); + if (nColor < 0 || nColor > 255) + { + SetLocalInt(oArea,"#WIDTH", nX); + return(nX); + } + } + SetLocalInt(oArea,"#WIDTH", 32); + return 32; + } + else + return nX; +} + +int GetAreaHeight(object oArea) +{ + int nY = GetLocalInt(oArea,"#HEIGHT"); + if( nY == 0) + { + int nX = 0; int nColor; + for (nY=0; nY<32; ++nY) + { + nColor = GetTileMainLight1Color(Location(oArea, Vector(0.0, IntToFloat(nY), 0.0),0.0)); + if (nColor < 0 || nColor > 255) + { + SetLocalInt(oArea,"#HEIGHT",nY); + return(nY); + } + } + SetLocalInt(oArea,"#HEIGHT",32); + return 32; + } + else + return nY; +} diff --git a/src/include/inc_array_sort.nss b/src/include/inc_array_sort.nss new file mode 100644 index 0000000..38ffd56 --- /dev/null +++ b/src/include/inc_array_sort.nss @@ -0,0 +1,380 @@ +//::////////////////////////////////////////////// +//:: Array sorting functions +//:: inc_array_sort +//::////////////////////////////////////////////// +/** @file + A bunch of sorting functions for different + data types. + + TMI may occur if attempting to sort too + large arrays. + For the quicksorts, 100 elements should always + be safe. TMI becomes almost certain past 150 elements. + The counting sort can handle 200 elements, with + 250 being near upper limit. + It is not recommended that one directly use the + insertion sort, but 50 elements are probably safe. + + Array implementation is assumed to follow + certain constraints: + - Array elements begin at index 0 + - The value returned by the function to get + array size returns the number of elements + in the array. + - The index of the last element in the array + is the number of elements - 1. + - Array reads change no stored data + - Array writes are allowed to write over + existing entries. + + @author Ornedan + @data Created 2006.05.27 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +/// At a certain point when the sort range is small enough, the overhead of quicksort exceeds +/// the higher order of efficiency in comparison to insertion sort, which has minimal overhead, +/// but still decent performance. At that point, switch to insertion sort. +const int QUICKSORT_TO_INSERTIONSORT_TRESHOLD = 6; // Anything betweem 4 - 10 seems to work. 6 was best in testing with randomly created arrays + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Implements a quicksort for integers. The array given for sorting should only contain + * integer elements. Sane results not guaranteed otherwise. + * + * @param oStore The object the array to sort is stored on + * @param sArrayName The name of the array to sort + * + * @param nLower The lower sort bound. Set by the function itself to 0 for recursive calls if + * left to default value (-1). + * @param nUpper The upper sort bound. Set by the function itself to array size - 1 for recursive + * calls if left to default value (-1). + */ +void QuickSortInt(object oStore, string sArrayName, int nLower = -1, int nUpper = -1); + +/** + * Implements a quicksort for floating point numbers. The array given for sorting should only contain + * float elements. Sane results not guaranteed otherwise. + * + * @param oStore The object the array to sort is stored on + * @param sArrayName The name of the array to sort + * + * @param nLower The lower sort bound. Set by the function itself to 0 for recursive calls if + * left to default value (-1). + * @param nUpper The upper sort bound. Set by the function itself to array size - 1 for recursive + * calls if left to default value (-1). + */ +void QuickSortFloat(object oStore, string sArrayName, int nLower = -1, int nUpper = -1); + +/** + * Implements an insertion sort for integers. The array given for sorting should only contain + * integer elements. Sane results not guaranteed otherwise. + * + * @param oStore The object the array to sort is stored on + * @param sArrayName The name of the array to sort + * + * @param nLower The lower sort bound. Set by the function itself to 0 for recursive calls if + * left to default value (-1). + * @param nUpper The upper sort bound. Set by the function itself to array size - 1 for recursive + * calls if left to default value (-1). + */ +void InsertionSortInt(object oStore, string sArrayName, int nLower = -1, int nUpper = -1); + +/** + * Implements an insertion sort for floating point numbers. The array given for sorting should only contain + * float elements. Sane results not guaranteed otherwise. + * + * @param oStore The object the array to sort is stored on + * @param sArrayName The name of the array to sort + * + * @param nLower The lower sort bound. Set by the function itself to 0 for recursive calls if + * left to default value (-1). + * @param nUpper The upper sort bound. Set by the function itself to array size - 1 for recursive + * calls if left to default value (-1). + */ +void InsertionSortFloat(object oStore, string sArrayName, int nLower = -1, int nUpper = -1); + +/** + * Implements counting sort for integers. The array given for sorting should only contain + * integer elements. Sane results not guaranteed otherwise. + * + * @param oStore The object the array to sort is stored on + * @param sArrayName The name of the array to sort + */ +void CountingSortInt(object oStore, string sArrayName); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "prc_inc_array" +#include "inc_debug" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +/** Internal function. + * Shuffles elements around until they are a bit more in order. + * + * @param oStore The object the array to sort is stored on + * @param sArrayName The name of the array to sort + * @param nLower The lower sort bound of the range to sort. + * @param nUpper The upper sort bound of the range to sort. + * @return The array index around which the array has been "sorted". + */ +int _inc_array_sort_PartitionInt(object oStore, string sArrayName, int nLower, int nUpper) +{ + int nDivider, nSwap; + + // Attempt to determine the median of the values in the array positions nLower, nMid and nUpper + int nLowerVal = array_get_int(oStore, sArrayName, nLower), + nMidVal = array_get_int(oStore, sArrayName, (nLower + nUpper) / 2), + nUpperVal = array_get_int(oStore, sArrayName, nUpper); + if(nLowerVal < nMidVal) + { + if(nLowerVal < nUpperVal) nDivider = (nMidVal < nUpperVal) ? nMidVal : nUpperVal; + else nDivider = nLowerVal; + } + else if(nLowerVal < nUpperVal) nDivider = nLowerVal; + else nDivider = (nMidVal > nUpperVal) ? nMidVal : nUpperVal; + + // Loop to sort the array around the median value + nLower -= 1; nUpper += 1; // Hack - The loops below need to be pre-increment, so we need to move the index variables to make the first elements examined be the ones at the original values + while(TRUE) + { + while(array_get_int(oStore, sArrayName, ++nLower) < nDivider) {} // Seek an element in the lower range of the array that is lesser than the divider + while(array_get_int(oStore, sArrayName, --nUpper) > nDivider) {} // Seek an element in the upper range of the array that is greater than the divider + // If the indexes haven't passed each other yet, swap the elements + if(nLower < nUpper) + { + nSwap = array_get_int(oStore, sArrayName, nLower); + array_set_int(oStore, sArrayName, nLower, array_get_int(oStore, sArrayName, nUpper)); + array_set_int(oStore, sArrayName, nUpper, nSwap); + } + // Otherwise, the array is now arranged so that all elements at positions nUpper and higher are greater than or equal to the + // elements lower in the array + else + return nUpper; + } + + // Never going to reach here, but compiler can't figure that out :P + Assert(FALSE, "FALSE", "Execution reached code that shouldn't be reachable", "inc_array_sort", "_inc_arrays_sort_PartitionInt"); + return -1; +} + +/** Internal function. + * Shuffles elements around until they are a bit more in order. + * + * @param oStore The object the array to sort is stored on + * @param sArrayName The name of the array to sort + * @param nLower The lower sort bound of the range to sort. + * @param nUpper The upper sort bound of the range to sort. + * @return The array index around which the array has been "sorted". + */ +int _inc_array_sort_PartitionFloat(object oStore, string sArrayName, int nLower, int nUpper) +{ + float fDivider, fSwap; + + // Attempt to determine the median of the values in the array positions nLower, nMid and nUpper + float fLowerVal = array_get_float(oStore, sArrayName, nLower), + fMidVal = array_get_float(oStore, sArrayName, (nLower + nUpper) / 2), + fUpperVal = array_get_float(oStore, sArrayName, nUpper); + if(fLowerVal < fMidVal) + { + if(fLowerVal < fUpperVal) fDivider = (fMidVal < fUpperVal) ? fMidVal : fUpperVal; + else fDivider = fLowerVal; + } + else if(fLowerVal < fUpperVal) fDivider = fLowerVal; + else fDivider = (fMidVal > fUpperVal) ? fMidVal : fUpperVal; + + // Loop to sort the array around the median value + nLower -= 1; nUpper += 1; // Hack - The loops below need to be pre-increment, so we need to move the index variables to make the first elements examined be the ones at the original values + while(TRUE) + { + while(array_get_float(oStore, sArrayName, ++nLower) < fDivider) {} // Seek an element in the lower range of the array that is lesser than the divider + while(array_get_float(oStore, sArrayName, --nUpper) > fDivider) {} // Seek an element in the upper range of the array that is greater than the divider + // If the indexes haven't passed each other yet, swap the elements + if(nLower < nUpper) + { + fSwap = array_get_float(oStore, sArrayName, nLower); + array_set_float(oStore, sArrayName, nLower, array_get_float(oStore, sArrayName, nUpper)); + array_set_float(oStore, sArrayName, nUpper, fSwap); + } + // Otherwise, the array is now arranged so that all elements at positions nUpper and higher are greater than or equal to the + // elements lower in the array + else + return nUpper; + } + + // Never going to reach here, but compiler can't figure that out :P + Assert(FALSE, "FALSE", "Execution reached code that shouldn't be reachable", "inc_array_sort", "_inc_array_sort_PartitionFloat"); + return -1; +} + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +void QuickSortInt(object oStore, string sArrayName, int nLower = -1, int nUpper = -1) +{ + // If range limits are not given, initialise them to defaults + if(nLower == -1) nLower = 0; + if(nUpper == -1) nUpper = array_get_size(oStore, sArrayName) - 1; + + // See if we have reached the point when quicksort becomes less efficient than insertion sort. + if((nUpper - nLower) <= QUICKSORT_TO_INSERTIONSORT_TRESHOLD) + InsertionSortInt(oStore, sArrayName, nLower, nUpper); + else + { + // Move entries into a slightly more sorted order by arranging them around a median value + // nDivider is the position of the beginning of the range where all the elements are + // greater or equal to the median used + int nDivider = _inc_array_sort_PartitionInt(oStore, sArrayName, nLower, nUpper); + + // Recurse into the halves of the array generated by the above sorting + QuickSortInt(oStore, sArrayName, nLower, nDivider); + QuickSortInt(oStore, sArrayName, nDivider + 1, nUpper); + } +} + +void QuickSortFloat(object oStore, string sArrayName, int nLower = -1, int nUpper = -1) +{ + // If range limits are not given, initialise them to defaults + if(nLower == -1) nLower = 0; + if(nUpper == -1) nUpper = array_get_size(oStore, sArrayName) - 1; + + // See if we have reached the point when quicksort becomes less efficient than insertion sort. + if((nUpper - nLower) <= QUICKSORT_TO_INSERTIONSORT_TRESHOLD) + InsertionSortFloat(oStore, sArrayName, nLower, nUpper); + else + { + // Move entries into a slightly more sorted order by arranging them around a median value + // nDivider is the position of the beginning of the range where all the elements are + // greater or equal to the median used + int nDivider = _inc_array_sort_PartitionFloat(oStore, sArrayName, nLower, nUpper); + + // Recurse into the halves of the array generated by the above sorting + QuickSortFloat(oStore, sArrayName, nLower, nDivider); + QuickSortFloat(oStore, sArrayName, nDivider + 1, nUpper); + } +} + +void InsertionSortInt(object oStore, string sArrayName, int nLower = -1, int nUpper = -1) +{ + // If range limits are not given, initialise them to defaults + if(nLower == -1) nLower = 0; + if(nUpper == -1) nUpper = array_get_size(oStore, sArrayName) - 1; + + // Some variables + int i, nSwap; + + // Run the insertion sort loop + for(nLower += 1; nLower <= nUpper; nLower++) + { + // Store current entry in temporary variable + nSwap = array_get_int(oStore, sArrayName, nLower); + + // Move preceding elements forward by one until we encounter index 0 or an element <= nSwap, + // whereupon we insert the swapped out element + i = nLower; + while(i > 0 && array_get_int(oStore, sArrayName, i - 1) > nSwap) + { + array_set_int(oStore, sArrayName, i, + array_get_int(oStore, sArrayName, i - 1) + ); + i--; + } + + // Insert the swapped out element at the position where all elements with index less than it's are lesser than or equal to it + array_set_int(oStore, sArrayName, i, nSwap); + } +} + +void InsertionSortFloat(object oStore, string sArrayName, int nLower = -1, int nUpper = -1) +{ + // If range limits are not given, initialise them to defaults + if(nLower == -1) nLower = 0; + if(nUpper == -1) nUpper = array_get_size(oStore, sArrayName) - 1; + + // Some variables + int i; + float fSwap; + + // Run the insertion sort loop + for(nLower += 1; nLower <= nUpper; nLower++) + { + // Store current entry in temporary variable + fSwap = array_get_float(oStore, sArrayName, nLower); + + // Move preceding elements forward by one until we encounter index 0 or an element <= nSwap, + // whereupon we insert the swapped out element + i = nLower; + while(i > 0 && array_get_float(oStore, sArrayName, i - 1) > fSwap) + { + array_set_float(oStore, sArrayName, i, + array_get_float(oStore, sArrayName, i - 1) + ); + i--; + } + + // Insert the swapped out element at the position where all elements with index less than it's are lesser than or equal to it + array_set_float(oStore, sArrayName, i, fSwap); + } +} + +void CountingSortInt(object oStore, string sArrayName) +{ + int nMin = 0, nMax = 0, + nCount = 0, + i, size = array_get_size(oStore, sArrayName), + nTemp; + + /* Find the least and greatest elements of the array */ + for(i = 0; i < size; i++) + { + nTemp = array_get_int(oStore, sArrayName, i); + if(nTemp < nMin) nMin = nTemp; + if(nTemp > nMax) nMax = nTemp; + } + + // Create temporary array + string sTempArray = "_CSort"; + while(array_exists(oStore, sTempArray)) sTempArray += "_"; + array_create(oStore, sTempArray); + + // Get the amount of each number in the array + for(i = 0; i < size; i++) + { + nTemp = array_get_int(oStore, sArrayName, i) - nMin; + array_set_int(oStore, sTempArray, nTemp, array_get_int(oStore, sTempArray, nTemp) + 1); + } + + // Set the values in the sortable array + size = array_get_size(oStore, sTempArray); + for(i = 0; i < size; i++) + { + while(array_get_int(oStore, sTempArray, i) > 0) + { + array_set_int(oStore, sArrayName, nCount++, i + nMin); + array_set_int(oStore, sTempArray, i, array_get_int(oStore, sTempArray, i) - 1); + } + } + + // Delete the temporary array + array_delete(oStore, sTempArray); +} + + +// Test main +//void main(){} diff --git a/src/include/inc_cache_setup.nss b/src/include/inc_cache_setup.nss new file mode 100644 index 0000000..a061fa2 --- /dev/null +++ b/src/include/inc_cache_setup.nss @@ -0,0 +1,362 @@ +//:://///////////////////////////////////////////// +//:: 2da cache creation include +//:: inc_cache_setup +//:://///////////////////////////////////////////// + +/** @file + * Creation and setting up of 2da caching databases + * Functions moved from inc_2dacache + * Removed SQL caching using the module, removed + * ability to use bioDB or nwnDB as cache (this is + * slow for single gets). + * + * @author Primogenitor + * moved by fluffyamoeba 2008-4-23 + * @todo Document the constants and functions + */ + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + +#include "inc_2dacache" + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +void Cache_Done() +{ + WriteTimestampedLogEntry("2da caching complete"); +} + +void Cache_Class_Feat(int nClass, int nRow = 0) +{ + string sFile = Get2DACache("classes", "FeatsTable", nClass); + if(sFile != "" + && sFile != "****" + && nRow < GetPRCSwitch(FILE_END_CLASS_FEAT)) + { + Get2DACache(sFile, "FeatLabel", nRow); + Get2DACache(sFile, "FeatIndex", nRow); + Get2DACache(sFile, "List", nRow); + Get2DACache(sFile, "GrantedOnLevel", nRow); + Get2DACache(sFile, "OnMenu", nRow); + nRow++; + DelayCommand(0.1, Cache_Class_Feat(nClass, nRow)); + } + else + { + if(nClass == 254) + Cache_Done(); + else + { + DelayCommand(0.1, Cache_Class_Feat(nClass+1)); //need to delay to prevent TMI + } + } +} + +void Cache_Classes(int nRow = 0) +{ + if(nRow < GetPRCSwitch(FILE_END_CLASSES)) + { + Get2DACache("classes", "Label", nRow); + Get2DACache("classes", "Name", nRow); + Get2DACache("classes", "Plural", nRow); + Get2DACache("classes", "Lower", nRow); + Get2DACache("classes", "Description", nRow); + Get2DACache("classes", "Icon", nRow); + Get2DACache("classes", "HitDie", nRow); + Get2DACache("classes", "AttackBonusTable", nRow); + Get2DACache("classes", "FeatsTable", nRow); + Get2DACache("classes", "SavingThrowTable", nRow); + Get2DACache("classes", "SkillsTable", nRow); + Get2DACache("classes", "BonusFeatsTable", nRow); + Get2DACache("classes", "SkillPointBase", nRow); + Get2DACache("classes", "SpellGainTable", nRow); + Get2DACache("classes", "SpellKnownTable", nRow); + Get2DACache("classes", "PlayerClass", nRow); + Get2DACache("classes", "SpellCaster", nRow); + Get2DACache("classes", "Str", nRow); + Get2DACache("classes", "Dex", nRow); + Get2DACache("classes", "Con", nRow); + Get2DACache("classes", "Wis", nRow); + Get2DACache("classes", "Int", nRow); + Get2DACache("classes", "Cha", nRow); + Get2DACache("classes", "PrimaryAbil", nRow); + Get2DACache("classes", "AlignRestrict", nRow); + Get2DACache("classes", "AlignRstrctType", nRow); + Get2DACache("classes", "InvertRestrict", nRow); + Get2DACache("classes", "Constant", nRow); + Get2DACache("classes", "EffCRLvl01", nRow); + Get2DACache("classes", "EffCRLvl02", nRow); + Get2DACache("classes", "EffCRLvl03", nRow); + Get2DACache("classes", "EffCRLvl04", nRow); + Get2DACache("classes", "EffCRLvl05", nRow); + Get2DACache("classes", "EffCRLvl06", nRow); + Get2DACache("classes", "EffCRLvl07", nRow); + Get2DACache("classes", "EffCRLvl08", nRow); + Get2DACache("classes", "EffCRLvl09", nRow); + Get2DACache("classes", "EffCRLvl10", nRow); + Get2DACache("classes", "EffCRLvl12", nRow); + Get2DACache("classes", "EffCRLvl13", nRow); + Get2DACache("classes", "EffCRLvl14", nRow); + Get2DACache("classes", "EffCRLvl15", nRow); + Get2DACache("classes", "EffCRLvl16", nRow); + Get2DACache("classes", "EffCRLvl17", nRow); + Get2DACache("classes", "EffCRLvl18", nRow); + Get2DACache("classes", "EffCRLvl19", nRow); + Get2DACache("classes", "EffCRLvl20", nRow); + Get2DACache("classes", "PreReqTable", nRow); + Get2DACache("classes", "MaxLevel", nRow); + Get2DACache("classes", "XPPenalty", nRow); + Get2DACache("classes", "ArcSpellLvlMod", nRow); + Get2DACache("classes", "DivSpellLvlMod", nRow); + Get2DACache("classes", "EpicLevel", nRow); + Get2DACache("classes", "Package", nRow); + nRow++; + DelayCommand(0.1, Cache_Classes(nRow)); + } + else + DelayCommand(1.0, Cache_Class_Feat(0)); +} + +void Cache_RacialTypes(int nRow = 0) +{ + if(nRow < GetPRCSwitch(FILE_END_RACIALTYPES)) + { + Get2DACache("racialtypes", "Label", nRow); + Get2DACache("racialtypes", "Abrev", nRow); + Get2DACache("racialtypes", "Name", nRow); + Get2DACache("racialtypes", "ConverName", nRow); + Get2DACache("racialtypes", "ConverNameLower", nRow); + Get2DACache("racialtypes", "NamePlural", nRow); + Get2DACache("racialtypes", "Description", nRow); + Get2DACache("racialtypes", "Appearance", nRow); + Get2DACache("racialtypes", "StrAdjust", nRow); + Get2DACache("racialtypes", "DexAdjust", nRow); + Get2DACache("racialtypes", "IntAdjust", nRow); + Get2DACache("racialtypes", "ChaAdjust", nRow); + Get2DACache("racialtypes", "WisAdjust", nRow); + Get2DACache("racialtypes", "ConAdjust", nRow); + Get2DACache("racialtypes", "Endurance", nRow); + Get2DACache("racialtypes", "Favored", nRow); + Get2DACache("racialtypes", "FeatsTable", nRow); + Get2DACache("racialtypes", "Biography", nRow); + Get2DACache("racialtypes", "PlayerRace", nRow); + Get2DACache("racialtypes", "Constant", nRow); + Get2DACache("racialtypes", "AGE", nRow); + Get2DACache("racialtypes", "ToolsetDefaultClass", nRow); + Get2DACache("racialtypes", "CRModifier", nRow); + + nRow++; + DelayCommand(0.1, Cache_RacialTypes(nRow)); + } + else + DelayCommand(1.0, Cache_Classes(0)); +} + + +void Cache_Feat(int nRow = 0) +{ + if(nRow < GetPRCSwitch(FILE_END_FEAT)) + { + Get2DACache("feat", "LABEL", nRow); + Get2DACache("feat", "FEAT", nRow); + Get2DACache("feat", "DESCRIPTION", nRow); + Get2DACache("feat", "MINATTACKBONUS", nRow); + Get2DACache("feat", "MINSTR", nRow); + Get2DACache("feat", "MINDEX", nRow); + Get2DACache("feat", "MININT", nRow); + Get2DACache("feat", "MINWIS", nRow); + Get2DACache("feat", "MINCON", nRow); + Get2DACache("feat", "MINCHA", nRow); + Get2DACache("feat", "MINSPELLLVL", nRow); + Get2DACache("feat", "PREREQFEAT1", nRow); + Get2DACache("feat", "PREREQFEAT2", nRow); + Get2DACache("feat", "GAINMULTIPLE", nRow); + Get2DACache("feat", "EFFECTSSTACK", nRow); + Get2DACache("feat", "ALLCLASSESCANUSE", nRow); + Get2DACache("feat", "CATEGORY", nRow); + Get2DACache("feat", "MAXCR", nRow); + Get2DACache("feat", "SPELLID", nRow); + Get2DACache("feat", "SUCCESSOR", nRow); + Get2DACache("feat", "CRValue", nRow); + Get2DACache("feat", "USESPERDAY", nRow); + Get2DACache("feat", "MASTERFEAT", nRow); + Get2DACache("feat", "TARGETSELF", nRow); + Get2DACache("feat", "OrReqFeat0", nRow); + Get2DACache("feat", "OrReqFeat1", nRow); + Get2DACache("feat", "OrReqFeat2", nRow); + Get2DACache("feat", "OrReqFeat3", nRow); + Get2DACache("feat", "OrReqFeat4", nRow); + Get2DACache("feat", "REQSKILL", nRow); + Get2DACache("feat", "ReqSkillMinRanks", nRow); + Get2DACache("feat", "REQSKILL2", nRow); + Get2DACache("feat", "ReqSkillMinRanks2", nRow); + Get2DACache("feat", "Constant", nRow); + Get2DACache("feat", "TOOLSCATEGORIES", nRow); + Get2DACache("feat", "HostileFeat", nRow); + Get2DACache("feat", "MinLevel", nRow); + Get2DACache("feat", "MinLevelClass", nRow); + Get2DACache("feat", "MaxLevel", nRow); + Get2DACache("feat", "MinFortSave", nRow); + Get2DACache("feat", "PreReqEpic", nRow); + Get2DACache("feat", "ReqAction", nRow); + nRow++; + DelayCommand(0.01, Cache_Feat(nRow)); + } + else + DelayCommand(1.0, Cache_RacialTypes()); +} + +void Cache_Spells(int nRow = 0) +{ + if(nRow < GetPRCSwitch(FILE_END_SPELLS)) + { + Get2DACache("spells", "Label", nRow); + Get2DACache("spells", "Name", nRow); + Get2DACache("spells", "IconResRef", nRow); + Get2DACache("spells", "School", nRow); + Get2DACache("spells", "Range", nRow); + Get2DACache("spells", "VS", nRow); + Get2DACache("spells", "MetaMagic", nRow); + Get2DACache("spells", "TargetType", nRow); + Get2DACache("spells", "ImpactScript", nRow); + Get2DACache("spells", "Bard", nRow); + Get2DACache("spells", "Cleric", nRow); + Get2DACache("spells", "Druid", nRow); + Get2DACache("spells", "Paladin", nRow); + Get2DACache("spells", "Ranger", nRow); + Get2DACache("spells", "Wiz_Sorc", nRow); + Get2DACache("spells", "Innate", nRow); + Get2DACache("spells", "ConjTime", nRow); + Get2DACache("spells", "ConjAnim", nRow); + Get2DACache("spells", "ConjHeadVisual", nRow); + Get2DACache("spells", "ConjHandVisual", nRow); + Get2DACache("spells", "ConjGrndVisual", nRow); + Get2DACache("spells", "ConjSoundVFX", nRow); + Get2DACache("spells", "ConjSoundMale", nRow); + Get2DACache("spells", "ConjSoundFemale", nRow); + Get2DACache("spells", "CastAnim", nRow); + Get2DACache("spells", "CastTime", nRow); + Get2DACache("spells", "CastHeadVisual", nRow); + Get2DACache("spells", "CastHandVisual", nRow); + Get2DACache("spells", "CastGrndVisual", nRow); + Get2DACache("spells", "CastSound", nRow); + Get2DACache("spells", "Proj", nRow); + Get2DACache("spells", "ProjModel", nRow); + Get2DACache("spells", "ProjType", nRow); + Get2DACache("spells", "ProjSpwnPoint", nRow); + Get2DACache("spells", "ProjSound", nRow); + Get2DACache("spells", "ProjOrientation", nRow); + Get2DACache("spells", "ImmunityType", nRow); + Get2DACache("spells", "ItemImmunity", nRow); + Get2DACache("spells", "SubRadSpell1", nRow); + Get2DACache("spells", "SubRadSpell2", nRow); + Get2DACache("spells", "SubRadSpell3", nRow); + Get2DACache("spells", "SubRadSpell4", nRow); + Get2DACache("spells", "SubRadSpell5", nRow); + Get2DACache("spells", "Category", nRow); + Get2DACache("spells", "Master", nRow); + Get2DACache("spells", "UserType", nRow); + Get2DACache("spells", "SpellDesc", nRow); + Get2DACache("spells", "UseConcentration", nRow); + Get2DACache("spells", "SpontaneouslyCast", nRow); + Get2DACache("spells", "AltMessage", nRow); + Get2DACache("spells", "HostileSetting", nRow); + Get2DACache("spells", "FeatID", nRow); + Get2DACache("spells", "Counter1", nRow); + Get2DACache("spells", "Counter2", nRow); + Get2DACache("spells", "HasProjectile", nRow); + nRow++; + DelayCommand(0.01, Cache_Spells(nRow)); + } + else + DelayCommand(0.1, Cache_Feat()); +} + +void Cache_Portraits(int nRow = 0) +{ + if(nRow < GetPRCSwitch(FILE_END_PORTRAITS)) + { + Get2DACache("portraits", "BaseResRef", nRow); + Get2DACache("portraits", "Sex", nRow); + Get2DACache("portraits", "Race", nRow); + Get2DACache("portraits", "InanimateType", nRow); + Get2DACache("portraits", "Plot", nRow); + Get2DACache("portraits", "LowGore", nRow); + nRow++; + DelayCommand(0.1, Cache_Portraits(nRow)); + } + else + DelayCommand(1.0, Cache_Spells()); +} + +void Cache_Soundset(int nRow = 0) +{ + if(nRow < GetPRCSwitch(FILE_END_SOUNDSET)) + { + Get2DACache("soundset", "LABEL", nRow); + Get2DACache("soundset", "RESREF", nRow); + Get2DACache("soundset", "STRREF", nRow); + Get2DACache("soundset", "GENDER", nRow); + Get2DACache("soundset", "TYPE", nRow); + nRow++; + DelayCommand(0.1, Cache_Soundset(nRow)); + } + else + DelayCommand(1.0, Cache_Portraits()); +} + +void Cache_Appearance(int nRow = 0) +{ + if(nRow < GetPRCSwitch(FILE_END_APPEARANCE)) + { + Get2DACache("appearance", "LABEL", nRow); + Get2DACache("appearance", "STRING_REF", nRow); + Get2DACache("appearance", "NAME", nRow); + Get2DACache("appearance", "RACE", nRow); + Get2DACache("appearance", "ENVMAP", nRow); + Get2DACache("appearance", "BLOODCOLR", nRow); + Get2DACache("appearance", "MODELTYPE", nRow); + Get2DACache("appearance", "WEAPONSCALE", nRow); + Get2DACache("appearance", "WING_TAIL_SCALE", nRow); + Get2DACache("appearance", "HELMET_SCALE_M", nRow); + Get2DACache("appearance", "HELMET_SCALE_F", nRow); + Get2DACache("appearance", "MOVERATE", nRow); + Get2DACache("appearance", "WALKDIST", nRow); + Get2DACache("appearance", "RUNDIST", nRow); + Get2DACache("appearance", "PERSPACE", nRow); + Get2DACache("appearance", "CREPERSPACE", nRow); + Get2DACache("appearance", "HEIGHT", nRow); + Get2DACache("appearance", "HITDIST", nRow); + Get2DACache("appearance", "PREFATCKDIST", nRow); + Get2DACache("appearance", "TARGETHEIGHT", nRow); + Get2DACache("appearance", "ABORTONPARRY", nRow); + Get2DACache("appearance", "RACIALTYPE", nRow); + Get2DACache("appearance", "HASLEGS", nRow); + Get2DACache("appearance", "HASARMS", nRow); + Get2DACache("appearance", "PORTRAIT", nRow); + Get2DACache("appearance", "SIZECATEGORY", nRow); + Get2DACache("appearance", "PERCEPTIONDIST", nRow); + Get2DACache("appearance", "FOOTSTEPTYPE", nRow); + Get2DACache("appearance", "SOUNDAPPTYPE", nRow); + Get2DACache("appearance", "HEADTRACK", nRow); + Get2DACache("appearance", "HEAD_ARC_H", nRow); + Get2DACache("appearance", "HEAD_ARC_V", nRow); + Get2DACache("appearance", "HEAD_NAME", nRow); + Get2DACache("appearance", "BODY_BAG", nRow); + Get2DACache("appearance", "TARGETABLE", nRow); + nRow++; + DelayCommand(0.1, Cache_Appearance(nRow)); + } + else + DelayCommand(1.0, Cache_Soundset()); +} + +void Cache_2da_data() +{ + Cache_Appearance(); +} + diff --git a/src/include/inc_debug.nss b/src/include/inc_debug.nss new file mode 100644 index 0000000..e7d7de0 --- /dev/null +++ b/src/include/inc_debug.nss @@ -0,0 +1,218 @@ +//::////////////////////////////////////////////// +//:: Debug include +//:: inc_debug +//::////////////////////////////////////////////// +/** @file + This file contains a debug printing function, the + purpose of which is to be leavable in place in code, + so that debug printing can be centrally turned off + by commenting out the contents of the function. + + Also, an assertion function and related function for + killing script execution. +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Globals */ +////////////////////////////////////////////////// + +/** + * Prefix all your debug calls with an if(DEBUG) so that they get stripped away + * during compilation as dead code when this is turned off. + */ +//const int DEBUG = FALSE; +#include "prc_inc_switch" +int DEBUG = GetPRCSwitch(PRC_DEBUG); + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * May print the given string, depending on whether debug printing is needed. + * + * Calls to this function should be guarded by an "if(DEBUG)" clause in order + * to be disableable. + * + * @param sString The string to print + */ +void DoDebug(string sString, object oAdditionalRecipient = OBJECT_INVALID); + +/** + * Kills script execution using the Die() function if the given assertion + * is false. If a message has been given, also prints it using DoDebug(). + * An assertion is something that should always be true if the program + * is functioning correctly. An assertion being false indicates a fatal error. + * + * The format of the string printed when an assertion fails is: + * "Assertion failed: sAssertion\nsMessage; At sScriptName: sFunction" + * + * Calls to this function should be guarded by an "if(DEBUG)" clause in order + * to be disableable. + * + * Example use: + * + * if(DEBUG) Assert(1 == 1, "1 == 1", "Oh noes! Arithmetic processing is b0rked.", "fooscript", "Baz()"); + * + * @param bAssertion The result of some evaluation that should always be true. + * @param sAssertion A string containing the statement evalueated for bAssertion. + * @param sMessage The message to print if bAssertion is FALSE. Will be + * prefixed with "Assertion failed: " when printed. + * If left to default (empty), the message printed will simply + * be "Assertion failed!". + * @param sFileName Name of the script file where the call to this function occurs. + * @param sFunction Name of the function where the call to this function occurs. + */ +void Assert(int bAssertion, string sAssertion, string sMessage = "", string sFileName = "", string sFunction = ""); + +/** + * Kills the execution of the current script by forcing a Too Many Instructions + * error. + * Not recommended for use outside of debugging purposes. Scripts should be able + * to handle expectable error conditions gracefully. + */ +void Die(); + +/** + * Converts data about a given object into a string of the following format: + * "'GetName' - 'GetTag' - 'GetResRef' - ObjectToString" + * + * @param o Object to convert into a string + * @return A string containing identifying data about o + */ +string DebugObject2Str(object o); + +/** + * Converts the given location into a string representation. + * + * @param loc Location to convert into a string + * @return A string representation of loc + */ +string DebugLocation2Str(location loc); + +/** + * Converts the given itemproperty into a string representation. + * + * @param iprop Itemproperty to convert into a string + * @return A string representation of iprop + */ +string DebugIProp2Str(itemproperty iprop); + +/** + * Converts a boolean to a string. Quick debug version. + * @see BooleanToString to use the tlkified one + * + * @param bool The boolean value to convert. 0 is considered false + * and everything else is true. + */ +string DebugBool2String(int bool); + +/** + * Converts the given effect into a string representation. + * + * @param eEffect effect to convert into a string + * @return A string representation of effect + */ +string DebugEffect2String(effect eEffect); + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +void DoDebug(string sString, object oAdditionalRecipient = OBJECT_INVALID) +{ + SendMessageToPC(GetFirstPC(), "" + sString + ""); + if(oAdditionalRecipient != OBJECT_INVALID) + SendMessageToPC(oAdditionalRecipient, "" + sString + ""); + WriteTimestampedLogEntry(sString); +} + +void Assert(int bAssertion, string sAssertion, string sMessage = "", string sFileName = "", string sFunction = "") +{ + if(bAssertion == FALSE) + { + //SpawnScriptDebugger(); + string sErr = "Assertion failed: " + sAssertion; + + if(sMessage != "" || sFileName != "" || sFunction != "") + { + sErr += "\n"; + + if(sMessage != "") + sErr += sMessage; + + if(sFileName != "" || sFunction != "") + { + if(sMessage != "") + sErr += "\n"; + + sErr += "At " + sFileName; + + if(sFileName != "" && sFunction != "") + sErr += ": "; + + sErr += sFunction; + } + } + + DoDebug(sErr); + Die(); + } +} + +void Die() +{ + while(TRUE) {;} +} + +string DebugObject2Str(object o) +{ + return o == OBJECT_INVALID ? + "OBJECT_INVALID" : // Special case + "'" + GetName(o) + "' - '" + GetTag(o) + "' - '" + GetResRef(o) + "' - " + ObjectToString(o); +} + +string DebugLocation2Str(location loc) +{ + object oArea = GetAreaFromLocation(loc); + vector vPos = GetPositionFromLocation(loc); + string sX, sY, sZ, sF; + // 3 decimal places and no leading whitespace + sX = FloatToString(vPos.x,0,3); + sY = FloatToString(vPos.y,0,3); + sZ = FloatToString(vPos.z,0,3); + sF = FloatToString(GetFacingFromLocation(loc),0,3); + + return "Area: Name = '" + GetName(oArea) + "', Tag = '" + GetTag(oArea) + "'; Position: (" + sX + ", " + sY + ", " + sZ + ",); Facing: " + sF; +} + +string DebugIProp2Str(itemproperty iprop) +{ + return "Type: " + IntToString(GetItemPropertyType(iprop)) + "; " + + "Subtype: " + IntToString(GetItemPropertySubType(iprop)) + "; " + + "Duration type: " + (GetItemPropertyDurationType(iprop) == DURATION_TYPE_INSTANT ? "DURATION_TYPE_INSTANT" : + GetItemPropertyDurationType(iprop) == DURATION_TYPE_TEMPORARY ? "DURATION_TYPE_TEMPORARY" : + GetItemPropertyDurationType(iprop) == DURATION_TYPE_PERMANENT ? "DURATION_TYPE_PERMANENT" : + IntToString(GetItemPropertyDurationType(iprop))) + "; " + + "Param1: " + IntToString(GetItemPropertyParam1(iprop)) + "; " + + "Param1 value: " + IntToString(GetItemPropertyParam1Value(iprop)) + "; " + + "Cost table: " + IntToString(GetItemPropertyCostTable(iprop)) + "; " + + "Cost table value: " + IntToString(GetItemPropertyCostTableValue(iprop)); +} + +string DebugBool2String(int bool) +{ + return bool ? "True" : "False"; +} + +string DebugEffect2String(effect eEffect) +{ + return "Effect; Type = " + IntToString(GetEffectType(eEffect)) + + ", SpellID: " + IntToString(GetEffectSpellId(eEffect)) + + ", Subtype: " + IntToString(GetEffectSubType(eEffect)) + + ", Duration: " + IntToString(GetEffectDurationType(eEffect)) + + ", Creator: " + GetName(GetEffectCreator(eEffect)); +} \ No newline at end of file diff --git a/src/include/inc_dispel.nss b/src/include/inc_dispel.nss new file mode 100644 index 0000000..6d09d8e --- /dev/null +++ b/src/include/inc_dispel.nss @@ -0,0 +1,1108 @@ +///////////////////////////////////////////////////////////////////////////////////////////////// +//:: This is the prc_dispel_magic functions declarations. The functions themselves are at the bottom +//:: of the file. I got tired of circular include statement errors and just decided to make +//:: these both be just one file by adding my text to theirs. +/////////////////////////////////////////////////////////////////////////////////////////////// + +// GZ: Number of spells in GetSpellBreachProtections +const int PRC_SPELLS_MAX_BREACH = 33; + +//:: This is my remake of the spellsDispelMagic found in x0_i0_spells. It's pretty much +//:: identical to the old one except instead of calling the EffectDispelMagicBest() and +//:: EffectDispelMagicAll() scripting functions it calls the ones I've specified in this +//:: file to replace them. +void spellsDispelMagicMod(object oTarget, int nCasterLevel, effect eVis, effect eImpac, int bAll = TRUE, int bBreachSpells = FALSE); + +//:: This is my remake of spellsDispelAoE(). It's very different, and very short. It +//:: takes advantage of the way I've reworked AoE's so that it can simply use the caster +//:: level stored in the AoE and do a proper dispel check against it. +void spellsDispelAoEMod(object oTargetAoE, object oCaster, int nCasterLevel); + +//:: This function is to replace EffectDispelMagicBest(). It goes through the references +//:: in the three arrays that store the caster levels and references to effects on oTarget, +//:: chooses the one with the highest caster level, and attempts to dispel it using the +//:: caster level entry in the array that corresponds to the spell itself. +void DispelMagicBestMod(object oTarget, int nCasterLevel); + +//:: This function is to replace EffectDispelMagicAll(). It goest through all the references +//:: in the three arrays that store the caster levels and references to effects on oTarget, and +//:: attempts a dispel on each of them. It only checks to dispel whole spells, not individual +//:: separate effects one spell may place on a person. +void DispelMagicAllMod(object oTarget, int nCasterLevel); + +//:: This function sorts the 3 arrays in descending order of caster level, so entry 0 is the +//:: highest, and the last entry is the lowest. It only gets called from inside DispelMagicBest() +void SortAll3Arrays(object oTarget); + +//:: This function is just a helper function to include Infestation of Maggots among the list +//:: of spells in effect on oTarget, so it can be sorted with the rest. It's only called by +//:: DispelMagicBest() +void HandleInfestationOfMaggots(object oTarget); + +// This is only meant to be called withing SetAllAoEInts() I've heard terrible stories that +// say if an object is destroyed, it's local variables may remain in place eating up memory +// so I decided I'd better mop up after setting all of these. +void DeleteAllAoEInts(object oAoE); + +// Returns the AoE's entire caster level, including any from prc's as stored in the local variable +int AoECasterLevel(object oAoE = OBJECT_SELF); + +// * Performs a spell breach up to nTotal spell are removed and +// * nSR spell resistance is lowered. nSpellId can be used to override +// * the originating spell ID. If not specified, SPELL_GREATER_SPELL_BREACH +// * is used +void PRCDoSpellBreach(object oTarget, int nTotal, int nSR, int nSpellId = -1); + +// * Performs a spell breach up to nTotal spells are removed and nSR spell +// * resistance is lowered. +int PRCGetSpellBreachProtection(int nLastChecked); + +// * Remove all spell protections of a specific type +int PRCRemoveProtections(int nSpell_ID, object oTarget, int nCount); + +// * Handle dispel magic of AoEs +void spellsDispelAoE(object oTargetAoE, object oCaster, int nCasterLevel); + +// * dispel magic on one or multiple targets. +// * if bAll is set to TRUE, all effects are dispelled from a creature +// * else it will only dispel the best effect from each creature (used for AoE) +// * Specify bBreachSpells to add Mord's Disjunction to the dispel +void spellsDispelMagic(object oTarget, int nCasterLevel, effect eVis, effect eImpac, int bAll = TRUE, int bBreachSpells = FALSE); + +// Mysteries have a -4 when dispelling spells and vice versa +int GetIsMystery(int nSpellId); + +#include "prc_effect_inc" +#include "lookup_2da_spell" +#include "spinc_remeffct" +#include "prcsp_engine" + +////////////////////////////////////////////////////////////////////////////////////////////////////// + + +//:: Copy of the original function with 1 minor change: calls DispelMagicAll() and +//:: DispelMagicBest() instead of EffectDispelMagicAll() and EffectDispelMagicBest() +//:: That is the only change. +//------------------------------------------------------------------------------ +// Attempts a dispel on one target, with all safety checks put in. +//------------------------------------------------------------------------------ +void spellsDispelMagicMod(object oTarget, int nCasterLevel, effect eVis, effect eImpac, int bAll = TRUE, int bBreachSpells = FALSE) +{ + //-------------------------------------------------------------------------- + // Don't dispel magic on petrified targets + // this change is in to prevent weird things from happening with 'statue' + // creatures. Also creature can be scripted to be immune to dispel + // magic as well. + //-------------------------------------------------------------------------- + if (PRCGetHasEffect(EFFECT_TYPE_PETRIFY, oTarget) == TRUE + || GetLocalInt(oTarget, "X1_L_IMMUNE_TO_DISPEL") == 10) + { + return; + } + + effect eDispel; + float fDelay = PRCGetRandomDelay(0.1, 0.3); + int nId = PRCGetSpellId(); + if (GetItemPossessedBy(OBJECT_SELF, "WOL_Aradros") == GetItemInSlot(INVENTORY_SLOT_NECK, OBJECT_SELF) && GetIsObjectValid(GetItemPossessedBy(OBJECT_SELF, "WOL_Aradros"))) nCasterLevel += 1; + + //-------------------------------------------------------------------------- + // Fire hostile event only if the target is hostile... + //-------------------------------------------------------------------------- + + if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF)) + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nId)); + else + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nId, FALSE)); + + //-------------------------------------------------------------------------- + // GZ: Bugfix. Was always dispelling all effects, even if used for AoE + //-------------------------------------------------------------------------- + if (bAll == TRUE ) + { + //:: This is the first of 2 changes I made. + DispelMagicAllMod(oTarget, nCasterLevel); + + // The way it used to get done. + //eDispel = EffectDispelMagicAll(nCasterLevel); + + //---------------------------------------------------------------------- + // GZ: Support for Mord's disjunction + //---------------------------------------------------------------------- + if (bBreachSpells) + { + PRCDoSpellBreach(oTarget, 6, 10, nId); + } + } + else + { + //:: This is the second of the 2 changes I made. + //:: There are no other changes. + DispelMagicBestMod(oTarget, nCasterLevel); + + // The way it used to get done + //eDispel = EffectDispelMagicBest(nCasterLevel); + + if (bBreachSpells) + { + PRCDoSpellBreach(oTarget, 2, 10, nId); + } + } + + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDispel, oTarget)); +} + +///////////////////////////////////////////////////////////////////////////////////// +//:: This one's so small I hope not to lose track of it. + +//:: Replaces the normal spellsDispelAoE +//:: I reworked all AoE's to store their caster level as a local int on themselves, +//:: so it's possible to just do a proper caster level check instead of doing +//:: something complicated. + +void spellsDispelAoEMod(object oTargetAoE, object oCaster, int nCasterLevel) +{ + int ModWeave; + int nBonus = 0; + string SchoolWeave = lookup_spell_school(GetLocalInt(oTargetAoE, "X2_AoE_SpellID")); + int Weave = GetHasFeat(FEAT_SHADOWWEAVE,oCaster)+ GetLocalInt(oCaster, "X2_AoE_SpecDispel"); + if (GetLocalInt(oTargetAoE, " X2_Effect_Weave_ID_") && !Weave) ModWeave = 4; + if (SchoolWeave=="V" ||SchoolWeave=="T" ) ModWeave = 0; + if (GetLocalInt(oTargetAoE, "PRC_Power_DispellingBuffer_Active")) nBonus += 5; + if (GetHasFeat(FEAT_SPELL_GIRDING, oTargetAoE)) nBonus += 2; + if (GetLevelByClass(CLASS_TYPE_SUEL_ARCHANAMACH, oTargetAoE) >= 1) nBonus += 6; + if (GetItemPossessedBy(oCaster, "WOL_Aradros") == GetItemInSlot(INVENTORY_SLOT_NECK, oCaster) && GetIsObjectValid(GetItemPossessedBy(oCaster, "WOL_Aradros"))) nCasterLevel += 1; + + int iDice = d20(1); +// SendMessageToPC(GetFirstPC(), "Spell :"+ IntToString(PRCGetSpellId())+" T "+GetName(oTargetAoE)); +// SendMessageToPC(GetFirstPC(), "Dispell :"+IntToString(iDice + nCasterLevel)+" vs DC :"+IntToString(11 + GetLocalInt(oTargetAoE, "X2_AoE_Caster_Level")+ModWeave)+" Weave :"+IntToString(ModWeave)+" "+SchoolWeave); + + if(iDice + nCasterLevel >= GetLocalInt(oTargetAoE, "X2_AoE_Caster_Level") + ModWeave + nBonus) + { + DestroyObject(oTargetAoE); + } +} + + /////////////////////////////////////////////////////////////////////////////////// + + +//:: Goes through all the references to effects stored in the 3 variable arrays, +//:: picks the one with the highest caster level (breaking ties by just keeping the +//:: first one it comes to) and then attempts a dispel check on it. +//:: It goes by spell, not spell effect, so a successful check removes all spell +//:: affects from that spell itself. + +void DispelMagicBestMod(object oTarget, int nCasterLevel) +{ + // I *really* want to rewrite this one so that it simply dispels the most useful effect + // instead of just the one with the highest caster level. + // Sure hate to dispel mage armor on somebody who's immune to necromancy. Difficult Decision, these. + + + //:: calls a function to determine whether infestation of maggots is in effect + //:: on the target. If so, it adds it to the 3 arrays so it can be sorted with them. + + HandleInfestationOfMaggots(oTarget); + + //:: calls a function to arrange the values in the 3 arrays in order of highest caster level to lowest + //:: Index 0 will be the highest, and nLastEntry will be the lowest. + + SortAll3Arrays(oTarget); + + int nCurrentEntry; + int nLastEntry = GetLocalInt(oTarget, "X2_Effects_Index_Number"); + + int nEffectSpellID, nEffectCastLevel; + object oEffectCaster = OBJECT_SELF; + int ModWeave; + int nBonus = 0; + + string sSelf = "Dispelled: "; + string sCast = "Dispelled on "+GetName(oTarget)+": "; + + int Weave = GetHasFeat(FEAT_SHADOWWEAVE,OBJECT_SELF)+ GetLocalInt(OBJECT_SELF, "X2_AoE_SpecDispel"); + if (GetLocalInt(oTarget, "PRC_Power_DispellingBuffer_Active")) nBonus += 5; + if (GetHasFeat(FEAT_SPELL_GIRDING, oTarget)) nBonus += 2; + if (GetLevelByClass(CLASS_TYPE_SUEL_ARCHANAMACH, oTarget) >= 1) nBonus += 6; + nCasterLevel += GetEssentiaInvestedFeat(oEffectCaster, FEAT_SOULTOUCHED_SPELLCASTING); + + for(nCurrentEntry = 0; nCurrentEntry <= nLastEntry; nCurrentEntry++) + { + nEffectSpellID = GetLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nCurrentEntry)); + oEffectCaster = GetLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nCurrentEntry)); + //:: Make sure the effect it refers to is still in place before making it + //:: number one. + if(IsStillRealEffect(nEffectSpellID, oEffectCaster, oTarget)) + { + ModWeave = 0; + string SchoolWeave = lookup_spell_school(nEffectSpellID); + string SpellName = GetStringByStrRef(StringToInt(lookup_spell_name(nEffectSpellID))); + nEffectCastLevel = GetLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nCurrentEntry)); + if (GetLocalInt(oTarget, " X2_Effect_Weave_ID_"+ IntToString(nCurrentEntry)) && !Weave) ModWeave = 4; + if (SchoolWeave=="V" ||SchoolWeave=="T" ) ModWeave = 0; + + // -4 for Mystery vs Spell and Spell vs Mystery + // If you have no Shadowcasting classes, you've got to be using another magic system to dispel + if ((!GetLevelByClass(CLASS_TYPE_SHADOWCASTER, OBJECT_SELF) && !GetLevelByClass(CLASS_TYPE_SHADOWSMITH, OBJECT_SELF)) && GetIsMystery(nEffectSpellID)) nCasterLevel -= 4; + // Likewise, if you're a Shadowcaster, you get a -4 penalty to dispel non-Mysteries. Magic number is MYST_SHADOWS_FADE + if (PRCGetSpellId() == 18386 && !GetIsMystery(nEffectSpellID)) nCasterLevel -= 4; + + int iDice = d20(1); +// SendMessageToPC(GetFirstPC(), "Spell :"+ IntToString(nEffectSpellID)+" T "+GetName(oTarget)+" C "+GetName(oEffectCaster)); +// SendMessageToPC(GetFirstPC(), "Dispell :"+ IntToString(iDice + nCasterLevel)+" vs DC :"+IntToString(11 + nEffectCastLevel+ModWeave)+" Mod Weave"+IntToString(ModWeave)+" "+SchoolWeave); + if(iDice + nCasterLevel >= 11 + nEffectCastLevel + ModWeave + nBonus) + { + if(nEffectSpellID != SPELL_INFESTATION_OF_MAGGOTS) + {// If it isn't infestation of maggots we remove it one way, if it is, we remove it another. + effect eToDispel = GetFirstEffect(oTarget); + while(GetIsEffectValid(eToDispel)) + { + if(GetEffectSpellId(eToDispel) == nEffectSpellID) + { + if(GetEffectCreator(eToDispel) == oEffectCaster) + { + if(GetEffectSpellId(eToDispel) == INVOKE_RETRIBUTIVE_INVISIBILITY && GetLocalInt(oTarget, "DangerousInvis")) + { + location lTarget = GetLocation(oTarget); + effect eRetrVis = EffectVisualEffect(VFX_IMP_SONIC); + effect eRetrPulse = EffectVisualEffect(VFX_IMP_PULSE_WIND); + effect eRetrStun = EffectStunned(); + effect eDam; + int nDamage; + int nDC; + float fDelay; + int RICasterLvl = GetLocalInt(oTarget, "DangerousInvis"); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eRetrPulse, oTarget); + DeleteLocalInt(oTarget, "DangerousInvis"); + + //Declare the spell shape, size and the location. Capture the first target object in the shape. + object oVictim = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(20.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + //Cycle through the targets within the spell shape until an invalid object is captured. + while (GetIsObjectValid(oVictim)) + { + if (spellsIsTarget(oVictim, SPELL_TARGET_STANDARDHOSTILE, oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oVictim, EventSpellCastAt(oTarget, INVOKE_RETRIBUTIVE_INVISIBILITY)); + //Get the distance between the explosion and the target to calculate delay + fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oVictim))/20; + if (!PRCDoResistSpell(oTarget, oVictim, RICasterLvl, fDelay)) + { + //Roll damage for each target + nDamage = d6(4); + //nDamage += ApplySpellBetrayalStrikeDamage(oVictim, oTarget, FALSE); + nDC = 16 + GetAbilityModifier(ABILITY_CHARISMA, oTarget); + + //save + if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_SPELL)) + { + nDamage = nDamage / 2; + if(GetHasMettle(oTarget, SAVING_THROW_FORT)) nDamage = 0; + } + else + DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eRetrStun, oVictim, RoundsToSeconds(1))); + + if(nDamage > 0) + { + //Set the damage effect + eDam = PRCEffectDamage(oVictim, nDamage, DAMAGE_TYPE_SONIC); + // Apply effects to the currently selected target. + DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oVictim)); + PRCBonusDamage(oVictim); + //This visual effect is applied to the target object not the location as above. This visual effect + //represents the flame that erupts on the target not on the ground. + DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eRetrVis, oVictim)); + } + } + + } + //Select the next target within the spell shape. + oVictim = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(20.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + } + } + else if(GetEffectSpellId(eToDispel) == INVOKE_PAINFUL_SLUMBER_OF_AGES && GetLocalInt(oTarget, "PainfulSleep")) + { + effect eSleepDam = EffectDamage(GetLocalInt(oTarget, "PainfulSleep"), DAMAGE_TYPE_MAGICAL); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eSleepDam, oTarget); + DeleteLocalInt(oTarget, "PainfulSleep"); + RemoveEventScript(oTarget, EVENT_VIRTUAL_ONDAMAGED, "inv_painsleep", FALSE, FALSE); + } + + RemoveEffect(oTarget, eToDispel); + + if (GetLevelByClass(CLASS_TYPE_NOCTUMANCER)) + { + int nExist = GetLocalInt(OBJECT_SELF, "CaptureMagic"); + int nSpellLevel = StringToInt(Get2DACache("spells", "Innate", nEffectSpellID)); + SetLocalInt(OBJECT_SELF, "CaptureMagic", PRCMax(nExist, nSpellLevel/2)); + if (GetLevelByClass(CLASS_TYPE_NOCTUMANCER) >= 10) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectSpellImmunity(nEffectSpellID)), OBJECT_SELF, 60.0); + } + + if(GetSpellId() == INVOKE_VORACIOUS_DISPELLING) + { + //Get spell level + int nEffectSpellLevel = StringToInt(Get2DACache("spells", "Innate", nEffectSpellID)); + //Damage = spell level + effect eSlashDam = EffectDamage(DAMAGE_TYPE_MAGICAL, nEffectSpellLevel); + + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eSlashDam, oTarget); + } + + else if(GetSpellId() == INVOKE_DEVOUR_MAGIC) + { + //Get spell level + int nEffectSpellLevel = StringToInt(Get2DACache("spells", "Innate", nEffectSpellID)); + //HP = 5 * spell level + effect eDracHP = EffectTemporaryHitpoints(5 * nEffectSpellLevel); + + //can't stack HP from multiple dispels + if (GetHasSpellEffect(GetSpellId(),OBJECT_SELF)) + { + PRCRemoveSpellEffects(GetSpellId(), OBJECT_SELF, OBJECT_SELF); + } + + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDracHP, OBJECT_SELF, 60.0); + } + + else if(GetSpellId() == SPELL_SLASHING_DISPEL) + { + //Get spell level + int nEffectSpellLevel = StringToInt(Get2DACache("spells", "Innate", nEffectSpellID)); + //Damage = 2 * spell level + effect eSlashDam = EffectDamage(DAMAGE_TYPE_MAGICAL, 2 * nEffectSpellLevel); + + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eSlashDam, oTarget); + } + + }// end if effect comes from this caster + }// end if effect comes from this spell + eToDispel = GetNextEffect(oTarget); + }// end of while loop + }// end if infestation is not the spell + else + { + DeleteLocalInt(oTarget, "XP2_L_SPELL_CASTER_LVL_" + IntToString (SPELL_INFESTATION_OF_MAGGOTS)); + // Deleting this variable is what actually ends the spell effect's damage. + DeleteLocalInt(oTarget,"XP2_L_SPELL_SAVE_DC_" + IntToString (SPELL_INFESTATION_OF_MAGGOTS)); + DeleteLocalInt(oTarget,"XP2_L_SPELL_WEAVE" + IntToString (SPELL_INFESTATION_OF_MAGGOTS)); + effect eToDispel = GetFirstEffect(oTarget); + while(GetIsEffectValid(eToDispel)) + { + //:: We don't worry about who cast it. A person can only really have one infestation + //:: going on at a time, I think. + if(GetEffectSpellId(eToDispel) == nEffectSpellID) + { + RemoveEffect(oTarget, eToDispel); + }// end if effect comes from this spell + eToDispel = GetNextEffect(oTarget); + }// end of while loop + }// end else + + //:: Since the effect has been removed, delete the references to it. + //:: This will help out the sweeping function when it gets called next (not now, though) + // These are stored for one round for Spell Rebirth + SetLocalInt(oTarget, "TrueSpellRebirthSpellId", GetLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nCurrentEntry))); + SetLocalInt(oTarget, "TrueSpellRebirthCasterLvl", GetLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nCurrentEntry))); + DelayCommand(6.0, DeleteLocalInt(oTarget, "TrueSpellRebirthSpellId")); + DelayCommand(6.0, DeleteLocalInt(oTarget, "TrueSpellRebirthCasterLvl")); + + DeleteLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nCurrentEntry)); + DeleteLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nCurrentEntry)); + DeleteLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nCurrentEntry)); + DeleteLocalInt(oTarget, " X2_Effect_Weave_ID_" + IntToString(nCurrentEntry)); + + //:: Display a message to all involved. + SendMessageToPC(OBJECT_SELF, sCast+SpellName); + if (oTarget != OBJECT_SELF) SendMessageToPC(oTarget, sSelf+SpellName); + + //:: If the check was successful, then we're done. + return; + }// end if check is successful. + }// end if is still a valid spell. + else + { + // These are stored for one round for Spell Rebirth + SetLocalInt(oTarget, "TrueSpellRebirthSpellId", GetLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nCurrentEntry))); + SetLocalInt(oTarget, "TrueSpellRebirthCasterLvl", GetLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nCurrentEntry))); + DelayCommand(6.0, DeleteLocalInt(oTarget, "TrueSpellRebirthSpellId")); + DelayCommand(6.0, DeleteLocalInt(oTarget, "TrueSpellRebirthCasterLvl")); + + // If it's not a real effect anymore, then delete the variables that refer to it. + DeleteLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nCurrentEntry)); + DeleteLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nCurrentEntry)); + DeleteLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nCurrentEntry)); + DeleteLocalInt(oTarget, " X2_Effect_Weave_ID_" + IntToString(nCurrentEntry)); + }// end of else statement. + + }// end of for loop + + // If we got here, the return function above never ran, so nothing got removed: + SendMessageToPC(OBJECT_SELF, sCast+"None"); + if (oTarget != OBJECT_SELF) SendMessageToPC(oTarget, sSelf+"None"); +} // End Of Function + +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +//:: Goes through and tries to remove each and every spell effect, doing a +//:: separate caster level check for each spell. It goes by spell, not spell +//:: effect, so a successful check removes all spell affects from that spell +//:: itself. + +void DispelMagicAllMod(object oTarget, int nCasterLevel) +{ + + int nIndex = 0; + int nEffectSpellID; + int nEffectCasterLevel; + object oEffectCaster = OBJECT_SELF; + int ModWeave; + int nBonus = 0; + + int nLastEntry = GetLocalInt(oTarget, "X2_Effects_Index_Number"); + effect eToDispel; + + string sList, SpellName; + string sSelf = "Dispelled: "; + string sCast = "Dispelled on "+GetName(oTarget)+": "; + + int Weave = GetHasFeat(FEAT_SHADOWWEAVE,OBJECT_SELF)+ GetLocalInt(OBJECT_SELF, "X2_AoE_SpecDispel"); + if (GetLocalInt(oTarget, "PRC_Power_DispellingBuffer_Active")) nBonus += 5; + if (GetHasFeat(FEAT_SPELL_GIRDING, oTarget)) nBonus += 2; + if (GetLevelByClass(CLASS_TYPE_SUEL_ARCHANAMACH, oTarget) >= 1) nBonus += 6; + nCasterLevel += GetEssentiaInvestedFeat(oEffectCaster, FEAT_SOULTOUCHED_SPELLCASTING); + + //:: Do the dispel check for each and every spell in effect on oTarget. + for(nIndex; nIndex <= nLastEntry; nIndex++) + { + nEffectSpellID = GetLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nIndex)); + if(GetHasSpellEffect(nEffectSpellID, oTarget)) + { + ModWeave = 0; + string SchoolWeave = lookup_spell_school(nEffectSpellID); + SpellName = GetStringByStrRef(StringToInt(lookup_spell_name(nEffectSpellID))); + nEffectCasterLevel = GetLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nIndex)); + if (GetLocalInt(oTarget, " X2_Effect_Weave_ID_"+ IntToString(nIndex)) && !Weave) ModWeave = 4; + if (SchoolWeave=="V" ||SchoolWeave=="T" ) ModWeave = 0; + + // -4 for Mystery vs Spell and Spell vs Mystery + // If you have no Shadowcasting classes, you've got to be using another magic system to dispel + if ((!GetLevelByClass(CLASS_TYPE_SHADOWCASTER, OBJECT_SELF) && !GetLevelByClass(CLASS_TYPE_SHADOWSMITH, OBJECT_SELF)) && GetIsMystery(nEffectSpellID)) nCasterLevel -= 4; + // Likewise, if you're a Shadowcaster, you get a -4 penalty to dispel non-Mysteries. Magic number is MYST_SHADOWS_FADE + if (PRCGetSpellId() == 18386 && !GetIsMystery(nEffectSpellID)) nCasterLevel -= 4; + + int iDice = d20(1); + // SendMessageToPC(GetFirstPC(), "Spell :"+ IntToString(nEffectSpellID)+" T "+GetName(oTarget)+" C "+GetName(GetLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nIndex)))); + // SendMessageToPC(GetFirstPC(), "Dispell :"+IntToString(iDice + nCasterLevel)+" vs DC :"+IntToString(11 + nEffectCasterLevel+ModWeave)+" Weave :"+IntToString(ModWeave)+" "+SchoolWeave); + + if(iDice + nCasterLevel >= 11 + nEffectCasterLevel + ModWeave + nBonus) + { + sList += SpellName+", "; + oEffectCaster = GetLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nIndex)); + + //:: Was going to use this function but upon reading it it became apparent it might not remove + //:: all of the given spells effects, but just one instead. + + //PRCRemoveSpellEffects(nEffectSpellID, oEffectCaster, oTarget); + + //:: If the check is successful, go through and remove all effects originating + //:: from that particular spell. + effect eToDispel = GetFirstEffect(oTarget); + while(GetIsEffectValid(eToDispel)) + { + if(GetEffectSpellId(eToDispel) == nEffectSpellID) + { + if(GetEffectCreator(eToDispel) == oEffectCaster) + { + + if(GetEffectSpellId(eToDispel) == INVOKE_RETRIBUTIVE_INVISIBILITY && GetLocalInt(oTarget, "DangerousInvis")) + { + location lTarget = GetLocation(oTarget); + effect eRetrVis = EffectVisualEffect(VFX_IMP_SONIC); + effect eRetrPulse = EffectVisualEffect(VFX_IMP_PULSE_WIND); + effect eRetrStun = EffectStunned(); + int RICasterLvl = GetLocalInt(oTarget, "DangerousInvis"); + effect eDam; + int nDamage; + float fDelay; + int nDC; + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eRetrPulse, oTarget); + DeleteLocalInt(oTarget, "DangerousInvis"); + + //Declare the spell shape, size and the location. Capture the first target object in the shape. + object oVictim = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(20.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + //Cycle through the targets within the spell shape until an invalid object is captured. + while (GetIsObjectValid(oVictim)) + { + if (spellsIsTarget(oVictim, SPELL_TARGET_STANDARDHOSTILE, oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oVictim, EventSpellCastAt(oTarget, INVOKE_RETRIBUTIVE_INVISIBILITY)); + //Get the distance between the explosion and the target to calculate delay + fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oVictim))/20; + if (!PRCDoResistSpell(oTarget, oVictim, RICasterLvl, fDelay)) + { + //Roll damage for each target + nDamage = d6(4); + nDamage += ApplySpellBetrayalStrikeDamage(oVictim, oTarget, FALSE); + nDC = 16 + GetAbilityModifier(ABILITY_CHARISMA, oTarget); + + //save + if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_SPELL)) + { + nDamage = nDamage / 2; + if(GetHasMettle(oTarget, SAVING_THROW_FORT)) nDamage = 0; + } + else + DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eRetrStun, oVictim, RoundsToSeconds(1))); + + if(nDamage > 0) + { + //Set the damage effect + eDam = PRCEffectDamage(oVictim, nDamage, DAMAGE_TYPE_SONIC); + // Apply effects to the currently selected target. + DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oVictim)); + PRCBonusDamage(oVictim); + //This visual effect is applied to the target object not the location as above. This visual effect + //represents the flame that erupts on the target not on the ground. + DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eRetrVis, oVictim)); + } + } + + } + //Select the next target within the spell shape. + oVictim = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(20.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + } + } + + else if(GetEffectSpellId(eToDispel) == INVOKE_PAINFUL_SLUMBER_OF_AGES && GetLocalInt(oTarget, "PainfulSleep")) + { + effect eSleepDam = EffectDamage(GetLocalInt(oTarget, "PainfulSleep"), DAMAGE_TYPE_MAGICAL); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eSleepDam, oTarget); + DeleteLocalInt(oTarget, "PainfulSleep"); + RemoveEventScript(oTarget, EVENT_VIRTUAL_ONDAMAGED, "inv_painsleep", FALSE, FALSE); + } + + RemoveEffect(oTarget, eToDispel); + + if (GetLevelByClass(CLASS_TYPE_NOCTUMANCER)) + { + int nExist = GetLocalInt(OBJECT_SELF, "CaptureMagic"); + int nSpellLevel = StringToInt(Get2DACache("spells", "Innate", nEffectSpellID)); + SetLocalInt(OBJECT_SELF, "CaptureMagic", PRCMax(nExist, nSpellLevel/2)); + if (GetLevelByClass(CLASS_TYPE_NOCTUMANCER) >= 10) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectSpellImmunity(nEffectSpellID)), OBJECT_SELF, 60.0); + } + + if(GetSpellId() == INVOKE_VORACIOUS_DISPELLING) + { + //Get spell level + int nEffectSpellLevel = StringToInt(Get2DACache("spells", "Innate", nEffectSpellID)); + //Damage = spell level + effect eSlashDam = EffectDamage(DAMAGE_TYPE_MAGICAL, nEffectSpellLevel); + + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eSlashDam, oTarget); + } + + else if(GetSpellId() == INVOKE_DEVOUR_MAGIC) + { + //Get spell level + int nEffectSpellLevel = StringToInt(Get2DACache("spells", "Innate", nEffectSpellID)); + //HP = 5 * spell level + effect eDracHP = EffectTemporaryHitpoints(5 * nEffectSpellLevel); + + //can't stack HP from multiple dispels + if (GetHasSpellEffect(GetSpellId(),OBJECT_SELF)) + { + PRCRemoveSpellEffects(GetSpellId(), OBJECT_SELF, OBJECT_SELF); + } + + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDracHP, OBJECT_SELF, 60.0); + } + + else if(GetSpellId() == SPELL_SLASHING_DISPEL) + { + //Get spell level + int nEffectSpellLevel = StringToInt(Get2DACache("spells", "Innate", nEffectSpellID)); + //Damage = 2 * spell level + effect eSlashDam = EffectDamage(DAMAGE_TYPE_MAGICAL, 2 * nEffectSpellLevel); + + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eSlashDam, oTarget); + } + + //Spell Removal Check + SpellRemovalCheck(oEffectCaster, oTarget); + + }// end if effect comes from this caster + }// end if effect comes from this spell + eToDispel = GetNextEffect(oTarget); + }// end of while loop + + + // These are stored for one round for Spell Rebirth + SetLocalInt(oTarget, "TrueSpellRebirthSpellId", GetLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nIndex))); + SetLocalInt(oTarget, "TrueSpellRebirthCasterLvl", GetLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nIndex))); + DelayCommand(6.0, DeleteLocalInt(oTarget, "TrueSpellRebirthSpellId")); + DelayCommand(6.0, DeleteLocalInt(oTarget, "TrueSpellRebirthCasterLvl")); + + // Delete the saved references to the spell's effects. + // This will save some time when reordering things a bit. + DeleteLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nIndex)); + DeleteLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nIndex)); + DeleteLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nIndex)); + DeleteLocalInt(oTarget, " X2_Effect_Weave_ID_" + IntToString(nIndex)); + + }// end of if caster check is sucessful + }// end of if oTarget has effects from this spell + }// end of for statement + + + // Additional Code to dispel any infestation of maggots effects. + + // If check to take care of infestation of maggots is in effect. + // with the highest caster level on it right now. + // If it is, we remove it instead of the other effect. + int bHasInfestationEffects = GetLocalInt(oTarget,"XP2_L_SPELL_CASTER_LVL_" + IntToString (SPELL_INFESTATION_OF_MAGGOTS)); + + if(bHasInfestationEffects) + { + ModWeave =0; + if (GetLocalInt(oTarget, " XP2_L_SPELL_WEAVE" +IntToString (SPELL_INFESTATION_OF_MAGGOTS)) && !Weave) ModWeave = 4; + + if(d20(1) + nCasterLevel >= bHasInfestationEffects + 11 + ModWeave + nBonus) + { + DeleteLocalInt(oTarget,"XP2_L_SPELL_SAVE_DC_" + IntToString (SPELL_INFESTATION_OF_MAGGOTS)); + DeleteLocalInt(oTarget,"XP2_L_SPELL_CASTER_LVL_" + IntToString (SPELL_INFESTATION_OF_MAGGOTS)); + effect eToDispel = GetFirstEffect(oTarget); + nEffectSpellID = SPELL_INFESTATION_OF_MAGGOTS; + + SpellName = GetStringByStrRef(StringToInt(lookup_spell_name(nEffectSpellID))); + sList += SpellName+", "; + + while(GetIsEffectValid(eToDispel)) + { + if(GetEffectSpellId(eToDispel) == nEffectSpellID) + { + RemoveEffect(oTarget, eToDispel); + }// end if effect comes from this spell + eToDispel = GetNextEffect(oTarget); + }// end of while loop + }// end if caster level check was a success. + }// end if infestation of maggots is in effect on oTarget/ + + // If the loop to rid the target of the effects of infestation of maggots + // runs at all, this next loop won't because eToDispel has to be invalid for this + // loop to terminate and the other to begin - but it won't begin if eToDispel is + // already invalid :) + + if (sList == "") sList = "None "; + sList = GetStringLeft(sList, GetStringLength(sList) - 2); // truncate the last ", " + + SendMessageToPC(OBJECT_SELF, sCast+sList); + if (oTarget != OBJECT_SELF) SendMessageToPC(oTarget, sSelf+sList); + +}// End of function. + +/////////////////////////////////////////////////////////////////////////////////////////// +//:: Sorts the 3 arrays in order of highest at index 0 on up to lowest at index nLastEntry +////////////////////////////////////////////////////////////////////////////////////////// + +void SortAll3Arrays(object oTarget) +{ + + int nLastEntry = GetLocalInt(oTarget, "X2_Effects_Index_Number"); + int nCurrEntry; + int nCurrEntry2; + int nSpellID, nSpellIDHigh, nCasterLvl, nCasterLvl2, nHighCastLvl, nHighestEntry,iWeave,iWeaveHigh; + object oMaker, oMakerHigh; + + for(nCurrEntry = 0; nCurrEntry <= nLastEntry; nCurrEntry++) + { + nCasterLvl = GetLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nCurrEntry)); + nHighCastLvl = nCasterLvl; + + for(nCurrEntry2 = nCurrEntry + 1; nCurrEntry2 <= nLastEntry; nCurrEntry2++) + { + nCasterLvl2 = GetLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nCurrEntry2)); + + if(nCasterLvl2 >= nHighCastLvl) + { + nHighestEntry = nCurrEntry2; + nHighCastLvl = nCasterLvl2; + } + }// End of second for statement. + if(nHighCastLvl != nCasterLvl) + // If the entry we're currently looking at already is the highest caster level left, + // we leave it there. Otherwise we swap the highest level entry with this one. + // nHighCastLvl will still be equal to nCasterLvl unless a higher level effect was found. + { + nSpellID = GetLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nCurrEntry)); + oMaker = GetLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nCurrEntry)); + iWeave = GetLocalInt(oTarget, " X2_Effect_Weave_ID_" + IntToString(nCurrEntry)); + + nSpellIDHigh = GetLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nHighestEntry)); + oMakerHigh = GetLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nHighestEntry)); + iWeaveHigh = GetLocalInt(oTarget, " X2_Effect_Weave_ID_" + IntToString(nHighestEntry)); + + DeleteLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nCurrEntry)); + DeleteLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nCurrEntry)); + DeleteLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nCurrEntry)); + DeleteLocalInt(oTarget, " X2_Effect_Weave_ID_" + IntToString(nCurrEntry)); + + DeleteLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nHighestEntry)); + DeleteLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nHighestEntry)); + DeleteLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nHighestEntry)); + DeleteLocalInt(oTarget, " X2_Effect_Weave_ID_" + IntToString(nHighestEntry)); + + /////////////////////////////////////////////////////////////////////////////// + SetLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nCurrEntry), nHighCastLvl); + SetLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nCurrEntry), nSpellIDHigh); + SetLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nCurrEntry), oMakerHigh); + SetLocalInt(oTarget, " X2_Effect_Weave_ID_" + IntToString(nCurrEntry), iWeaveHigh); + + // + SetLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nHighestEntry),nCasterLvl); + SetLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nHighestEntry), nSpellID); + SetLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nHighestEntry), oMaker); + SetLocalInt(oTarget, " X2_Effect_Weave_ID_" + IntToString(nHighestEntry), iWeave); + + } // End if the caster levels of the 2 entries are actually different. + }// End of first for statement. +} + +////////////////////////////////////////////////////////////////////////////////////////////// +//:: Finished sorting. +///////////////////////////////////////////////////////////////////////////////////////////// + + + +///////////////////////////////////////////////////////////////////////////////// +//:: Infestation of maggots is a special case because it won't end until a local +//:: int is deleted. It must be handled specially. +///////////////////////////////////////////////////////////////////////////////// +void HandleInfestationOfMaggots(object oTarget) +{ + //:: Special to trap an infestation of maggots effect. + int nHasInfestationEffect = GetLocalInt(oTarget, "XP2_L_SPELL_CASTER_LVL_" + IntToString (SPELL_INFESTATION_OF_MAGGOTS)); + + int nLastEntry = GetLocalInt(oTarget, "X2_Effects_Index_Number"); + if(nHasInfestationEffect) + { + // If they have infestation of maggots on them, then add it to the end of the list. + // I would add it during the spell script itself but it might get swept up before the spell has + // really ended, I fear. + nLastEntry++; + DeleteLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nLastEntry)); + DeleteLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nLastEntry)); + DeleteLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nLastEntry)); + DeleteLocalInt(oTarget, " X2_Effect_Weave_ID_" + IntToString(nLastEntry)); + DeleteLocalInt(oTarget, "X2_Effects_Index_Number"); + + SetLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nLastEntry), SPELL_INFESTATION_OF_MAGGOTS); + SetLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nLastEntry), nHasInfestationEffect); + SetLocalInt(oTarget, " X2_Effect_Weave_ID_" + IntToString(nLastEntry), GetLocalInt(oTarget, " XP2_L_SPELL_WEAVE" +IntToString (SPELL_INFESTATION_OF_MAGGOTS))); + //:: Won't bother with this one. I think a creature can only have one infestation at a time. + //SetLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nLastEntry)); + SetLocalInt(oTarget, "X2_Effects_Index_Number", nLastEntry); + } +} +////////////////////////////////////////////////////////////////////////////////////////////// +//:: End of section to trap infestation of maggots. +//////////////////////////////////////////////////////////////////////////////////////////// + +// Just returns the stored value. +int AoECasterLevel(object oAoE = OBJECT_SELF) +{ + int toReturn = GetLocalInt(oAoE, "X2_AoE_Caster_Level"); + return toReturn; +} + +void PRCDoSpellBreach(object oTarget, int nTotal, int nSR, int nSpellId = -1) +{ + if (nSpellId == -1) + { + nSpellId = SPELL_GREATER_SPELL_BREACH; + } + effect eSR = EffectSpellResistanceDecrease(nSR); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + + effect eVis = EffectVisualEffect(VFX_IMP_BREACH); + int nCnt, nIdx; + if(!GetIsReactionTypeFriendly(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nSpellId )); + //Search through and remove protections. + while(nCnt <= PRC_SPELLS_MAX_BREACH && nIdx < nTotal) + { + nIdx = nIdx + PRCRemoveProtections(PRCGetSpellBreachProtection(nCnt), oTarget, nCnt); + nCnt++; + } + effect eLink = EffectLinkEffects(eDur, eSR); + //-------------------------------------------------------------------------- + // This can not be dispelled + //-------------------------------------------------------------------------- + eLink = ExtraordinaryEffect(eLink); + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(10),TRUE); + } + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + +} + +//------------------------------------------------------------------------------ +// Returns the nLastChecked-nth highest spell on the creature for use in +// the spell breach routines +// Please modify the constatn PRC_SPELLS_MAX_BREACH at the top of this file +// if you change the number of spells. +//------------------------------------------------------------------------------ +int PRCGetSpellBreachProtection(int nLastChecked) +{ + //-------------------------------------------------------------------------- + // GZ: Protections are stripped in the order they appear here + //-------------------------------------------------------------------------- + if(nLastChecked == 1) {return SPELL_GREATER_SPELL_MANTLE;} + else if (nLastChecked == 2){return SPELL_PREMONITION;} + else if(nLastChecked == 3) {return SPELL_SPELL_MANTLE;} + else if(nLastChecked == 4) {return SPELL_SHADOW_SHIELD;} + else if(nLastChecked == 5) {return SPELL_GREATER_STONESKIN;} + else if(nLastChecked == 6) {return SPELL_ETHEREAL_VISAGE;} + else if(nLastChecked == 7) {return SPELL_GLOBE_OF_INVULNERABILITY;} + else if(nLastChecked == 8) {return SPELL_ENERGY_BUFFER;} + else if(nLastChecked == 9) {return 443;} // greater sanctuary + else if(nLastChecked == 10) {return SPELL_MINOR_GLOBE_OF_INVULNERABILITY;} + else if(nLastChecked == 11) {return SPELL_SPELL_RESISTANCE;} + else if(nLastChecked == 12) {return SPELL_STONESKIN;} + else if(nLastChecked == 13) {return SPELL_LESSER_SPELL_MANTLE;} + else if(nLastChecked == 14) {return SPELL_MESTILS_ACID_SHEATH;} + else if(nLastChecked == 15) {return SPELL_MIND_BLANK;} + else if(nLastChecked == 16) {return SPELL_ELEMENTAL_SHIELD;} + else if(nLastChecked == 17) {return SPELL_PROTECTION_FROM_SPELLS;} + else if(nLastChecked == 18) {return SPELL_PROTECTION_FROM_ELEMENTS;} + else if(nLastChecked == 19) {return SPELL_RESIST_ELEMENTS;} + else if(nLastChecked == 20) {return SPELL_DEATH_ARMOR;} + else if(nLastChecked == 21) {return SPELL_GHOSTLY_VISAGE;} + else if(nLastChecked == 22) {return SPELL_ENDURE_ELEMENTS;} + else if(nLastChecked == 23) {return SPELL_SHADOW_SHIELD;} + else if(nLastChecked == 24) {return SPELL_SHADOW_CONJURATION_MAGE_ARMOR;} + else if(nLastChecked == 25) {return SPELL_NEGATIVE_ENERGY_PROTECTION;} + else if(nLastChecked == 26) {return SPELL_SANCTUARY;} + else if(nLastChecked == 27) {return SPELL_MAGE_ARMOR;} + else if(nLastChecked == 28) {return SPELL_STONE_BONES;} + else if(nLastChecked == 29) {return SPELL_SHIELD;} + else if(nLastChecked == 30) {return SPELL_SHIELD_OF_FAITH;} + else if(nLastChecked == 31) {return SPELL_LESSER_MIND_BLANK;} + else if(nLastChecked == 32) {return SPELL_IRONGUTS;} + else if(nLastChecked == 33) {return SPELL_RESISTANCE;} + return nLastChecked; +} + +int PRCRemoveProtections(int nSpell_ID, object oTarget, int nCount) +{ + // Declare major variables + effect eProtection; + int nCnt = 0; + + // Check if the target has any effects from the specified spell ID + if (GetHasSpellEffect(nSpell_ID, oTarget)) + { + // Start looping through all effects on the target + eProtection = GetFirstEffect(oTarget); + while (GetIsEffectValid(eProtection)) + { + // Only remove effects that: + // - Match the given spell ID + // - Are Magical (to comply with Breach spell behavior) + if (GetEffectSpellId(eProtection) == nSpell_ID && + GetEffectSubType(eProtection) == SUBTYPE_MAGICAL) + { + RemoveEffect(oTarget, eProtection); + nCnt++; + } + + // Move to the next effect + eProtection = GetNextEffect(oTarget); + } + } + + // Return 1 if any effects were removed, otherwise 0 + if (nCnt > 0) + { + return 1; + } + else + { + return 0; + } +} + +// This was dispelling Extraordinary, Supernatural & Unyielding effects -Jaysyn + +/* int PRCRemoveProtections(int nSpell_ID, object oTarget, int nCount) +{ + //Declare major variables + effect eProtection; + int nCnt = 0; + if(GetHasSpellEffect(nSpell_ID, oTarget)) + { + //Search through the valid effects on the target. + eProtection = GetFirstEffect(oTarget); + while (GetIsEffectValid(eProtection)) + { + //If the effect was created by the spell then remove it + if(GetEffectSpellId(eProtection) == nSpell_ID) + { + RemoveEffect(oTarget, eProtection); + //return 1; + nCnt++; + } + //Get next effect on the target + eProtection = GetNextEffect(oTarget); + } + } + if(nCnt > 0) + { + return 1; + } + else + { + return 0; + } +} */ + +//------------------------------------------------------------------------------ +// Attempts a dispel on one target, with all safety checks put in. +//------------------------------------------------------------------------------ +void spellsDispelMagic(object oTarget, int nCasterLevel, effect eVis, effect eImpac, int bAll = TRUE, int bBreachSpells = FALSE) +{ + //-------------------------------------------------------------------------- + // Don't dispel magic on petrified targets + // this change is in to prevent weird things from happening with 'statue' + // creatures. Also creature can be scripted to be immune to dispel + // magic as well. + //-------------------------------------------------------------------------- + if (PRCGetHasEffect(EFFECT_TYPE_PETRIFY, oTarget) == TRUE || GetLocalInt(oTarget, "X1_L_IMMUNE_TO_DISPEL") == 10) + { + return; + } + + effect eDispel; + float fDelay = PRCGetRandomDelay(0.1, 0.3); + int nId = PRCGetSpellId(); + + //-------------------------------------------------------------------------- + // Fire hostile event only if the target is hostile... + //-------------------------------------------------------------------------- + if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF)) + { + + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nId)); + } + else + { + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nId, FALSE)); + } + + //-------------------------------------------------------------------------- + // GZ: Bugfix. Was always dispelling all effects, even if used for AoE + //-------------------------------------------------------------------------- + if (bAll == TRUE ) + { + eDispel = EffectDispelMagicAll(nCasterLevel); + //---------------------------------------------------------------------- + // GZ: Support for Mord's disjunction + //---------------------------------------------------------------------- + if (bBreachSpells) + { + PRCDoSpellBreach(oTarget, 6, 10, nId); + } + } + else + { + eDispel = EffectDispelMagicBest(nCasterLevel); + if (bBreachSpells) + { + PRCDoSpellBreach(oTarget, 2, 10, nId); + } + } + + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDispel, oTarget)); +} + +//------------------------------------------------------------------------------ +// Handle Dispelling Area of Effects +// Before adding this AoE's got automatically destroyed. Since NWN does not give +// the required information to do proper dispelling on AoEs, we do some simulated +// stuff here: +// - Base chance to dispel is 25, 50, 75 or 100% depending on the spell +// - Chance is modified positive by the caster level of the spellcaster as well +// - as the relevant ability score +// - Chance is modified negative by the highest spellcasting class level of the +// AoE creator and the releavant ability score. +// Its bad, but its not worse than just dispelling the AoE as the game did until +// now +//------------------------------------------------------------------------------ +void spellsDispelAoE(object oTargetAoE, object oCaster, int nCasterLevel) +{ + object oCreator = GetAreaOfEffectCreator(oTargetAoE); + int nChance; + int nId = PRCGetSpellId(); + int nClassCaster = PRCGetLastSpellCastClass(); + if ( nId == SPELL_LESSER_DISPEL ) + { + nChance = 25; + } + else if ( nId == SPELL_DISPEL_MAGIC) + { + nChance = 50; + } + else if ( nId == SPELL_GREATER_DISPELLING ) + { + nChance = 75; + } + else if ( nId == SPELL_MORDENKAINENS_DISJUNCTION ) + { + nChance = 100; + } + + + nChance += ((nCasterLevel + (GetAbilityScoreForClass(nClassCaster, oCaster)-10)/2) - (GetCasterLevel(oCreator))); // yes this is a sucky stupid hack + + //-------------------------------------------------------------------------- + // the AI does cheat here, because it can not react as well as a player to + // AoE effects. Also DMs are always successful + //-------------------------------------------------------------------------- + if (!GetIsPC(oCaster)) + { + nChance +=30; + } + + if (oCaster == oCreator) + { + nChance = 100; + } + + int nRand = Random(100); + + if ((nRand < nChance )|| GetIsDM(oCaster) || GetIsDMPossessed(oCaster)) + { + FloatingTextStrRefOnCreature(100929,oCaster); // "AoE dispelled" + DestroyObject (oTargetAoE); + } + else + { + FloatingTextStrRefOnCreature(100930,oCaster); // "AoE not dispelled" + } + +} + +int GetIsMystery(int nSpellId) +{ + // They're all next to one another in the 2da + if (nSpellId >= 18352 && nSpellId < 18450) + return TRUE; + return FALSE; +} + +// Test main +//void main(){} diff --git a/src/include/inc_draw.nss b/src/include/inc_draw.nss new file mode 100644 index 0000000..3df5982 --- /dev/null +++ b/src/include/inc_draw.nss @@ -0,0 +1,4241 @@ +/** @file + ============================================= + PENTAGRAMS & SUMMONING CIRCLES v1.45 + ============================================= + gaoneng January 17, 2005 + #include "inc_draw" + + last updated on August 8, 2005 + + modified by Ornedan of PRC to add new parameters: + fDirectionXZ and fDirectionYZ + + Draw geometric forms using a variety of media + ============================================= +*/ + +#include "inc_draw_tools" + +/* + ============================================= + DRAW* PLACE* AND BEAM* FUNCTIONS DECLARATIONS + ============================================= +*/ +// Draws a circle around lCenter +// ============================= +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadius = radius of circle in meters. (1 tile = 10.0m X 10.0m) +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the circle lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the circle. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawCircle(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a spiral around lCenter +// ============================= +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of spiral in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of spiral in meters. DEFAULT : 0.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the spiral lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spiral. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawSpiral(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a spring around lCenter +// ============================= +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of spring in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of spring in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the spring lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a line towards lCenter +// ============================ +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fLength = length of line in meters. (1 tile = 10.0m X 10.0m) +// fDirection = direction of line respective to normal. DEFAULT : 0.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the spring lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fTime = time in seconds taken to draw the line. DEFAULT : 6.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawLineToCenter(int nDurationType, int nVFX, location lCenter, float fLength, float fDirection=0.0f, float fDuration=0.0f, int nFrequency=90, float fTime=6.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a line from lCenter +// ========================= +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fLength = length of line in meters. (1 tile = 10.0m X 10.0m) +// fDirection = direction of line respective to normal. DEFAULT : 0.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the spring lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fTime = time in seconds taken to draw the line. DEFAULT : 6.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawLineFromCenter(int nDurationType, int nVFX, location lCenter, float fLength, float fDirection=0.0f, float fDuration=0.0f, int nFrequency=90, float fTime=6.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a polygonal spring around lCenter +// ======================================= +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of spring in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of spring in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// nSides = number of sides. nSides < 3 will default to 3. DEFAULT : 3 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the spring lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawPolygonalSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a polygonal spiral around lCenter +// ======================================= +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of spiral in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of spiral in meters. DEFAULT : 0.0 +// nSides = number of sides. nSides < 3 will default to 3. DEFAULT : 3 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the spiral lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spiral. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawPolygonalSpiral(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, int nSides=3, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a polygon around lCenter +// ============================== +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadius = radius of polygon in meters. (1 tile = 10.0m X 10.0m) +// nSides = number of sides. nSides < 3 will default to 3. DEFAULT : 3 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the polygon lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the polygon. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawPolygon(int nDurationType, int nVFX, location lCenter, float fRadius, int nSides=3, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a pentacle (five-pointed star) around lCenter +// =================================================== +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadius = radius of pentacle in meters. (1 tile = 10.0m X 10.0m) +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the pentacle lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the pentacle. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawPentacle(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a pentaclic spiral around lCenter +// ======================================= +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of spiral in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of spiral in meters. DEFAULT : 0.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the pentacle lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spiral. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawPentaclicSpiral(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a pentaclic spring around lCenter +// ======================================= +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of spring in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of spring in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the pentacle lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawPentaclicSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a star spring around lCenter +// ================================== +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusStartOuter = starting outer radius of spring in meters. +// fRadiusStartInner = starting inner radius of spring in meters. +// fRadiusEndOuter = ending outer radius of spring in meters. DEFAULT : 0.0 +// fRadiusEndInner = ending inner radius of spring in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// nSides = number of sides (or points) DEFAULT : 3 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the pentacle lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawStarSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a star spiral around lCenter +// ================================== +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusStartOuter = starting outer radius of spiral in meters. +// fRadiusStartInner = starting inner radius of spiral in meters. +// fRadiusEndOuter = ending outer radius of spring in meters. DEFAULT : 0.0 +// fRadiusEndInner = ending inner radius of spring in meters. DEFAULT : 0.0 +// nSides = number of sides (or points) DEFAULT : 3 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the pentacle lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawStarSpiral(int nDurationType, int nVFX, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, int nSides=3, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a star around lCenter +// =========================== +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusOuter = outer radius of star in meters. (1 tile = 10.0m X 10.0m) +// fRadiusInner = inner radius of star in meters. +// nSides = number of sides (or points) DEFAULT : 3 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the pentacle lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawStar(int nDurationType, int nVFX, location lCenter, float fRadiusOuter, float fRadiusInner, int nSides=3, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a hemisphere around lCenter +// ================================= +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of sphere in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of sphere in meters. DEFAULT : 0.0 +// fHeightStart = starting height of sphere in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of sphere in meters. DEFAULT : 5.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the sphere lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the sphere. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the central/normal axis. DEFAULT : "z" +void DrawHemisphere(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a perfect sphere around lCenter +// ===================================== +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadius = radius of sphere in meters. (1 tile = 10.0m X 10.0m) +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the sphere lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the sphere. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the central/normal axis. DEFAULT : "z" +void DrawSphere(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a polygonal hemisphere around lCenter +// =========================================== +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of sphere in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of sphere in meters. DEFAULT : 0.0 +// fHeightStart = starting height of sphere in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of sphere in meters. DEFAULT : 5.0 +// nSides = number of sides. nSides < 3 will default to 3. DEFAULT : 3 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the sphere lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the sphere. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the central/normal axis. DEFAULT : "z" +void DrawPolygonalHemisphere(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a toroidal spring around lCenter +// ====================================== +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusStartOuter = starting outer radius of the torus in meters. +// fRadiusStartInner = starting inner radius of the torus in meters. +// fRadiusEndOuter = ending outer radius of the torus in meters. DEFAULT : 0.0 +// fRadiusEndInner = ending inner radius of the torus in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the spring lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fLoopsPerRev = number of loops per revolution. DEFAULT : 36.0 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawToroidalSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fDuration=0.0f, int nFrequency=90, float fLoopsPerRev=36.0f, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a toroidal spiral around lCenter +// ====================================== +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusStartOuter = starting outer radius of the torus in meters. +// fRadiusStartInner = starting inner radius of the torus in meters. +// fRadiusEndOuter = ending outer radius of the torus in meters. DEFAULT : 0.0 +// fRadiusEndInner = ending inner radius of the torus in meters. DEFAULT : 0.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the spring lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fLoopsPerRev = number of loops per revolution. DEFAULT : 36.0 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spiral. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawToroidalSpiral(int nDurationType, int nVFX, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fDuration=0.0f, int nFrequency=90, float fLoopsPerRev=36.0f, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a standard torus around lCenter +// ===================================== +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusOuter = outer radius of the torus in meters. +// fRadiusInner = inner radius of the torus in meters. +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the spring lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fLoopsPerRev = number of loops per revolution. DEFAULT : 36.0 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the torus. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawTorus(int nDurationType, int nVFX, location lCenter, float fRadiusOuter, float fRadiusInner, float fDuration=0.0f, int nFrequency=90, float fLoopsPerRev=36.0f, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a sinusoidal curve from lCenter +// ===================================== +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadius = amplitude of curve in meters. +// fLength = horizontal length of curve in meters. (1 tile = 10.0m X 10.0m) +// fDirection = direction of line respective to normal. DEFAULT : 0.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the spring lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the torus. DEFAULT : 6.0 +// fRotate = the shift in phase in degrees. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawSinusoid(int nDurationType, int nVFX, location lCenter, float fRadius, float fLength, float fDirection=0.0f, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws an elliptical spring around lCenter +// ========================================= +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusStartOuter = starting outer radius of the ellipse in meters. +// fRadiusStartInner = starting inner radius of the ellipse in meters. +// fRadiusEndOuter = ending outer radius of the ellipse in meters.DEFAULT : 0.0 +// fRadiusEndInner = ending inner radius of the ellipse in meters.DEFAULT : 0.0 +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the VFX lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawEllipticalSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws an elliptical spiral around lCenter +// ========================================= +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusStartOuter = starting outer radius of the ellipse in meters. +// fRadiusStartInner = starting inner radius of the ellipse in meters. +// fRadiusEndOuter = ending outer radius of the ellipse in meters.DEFAULT : 0.0 +// fRadiusEndInner = ending inner radius of the ellipse in meters.DEFAULT : 0.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the VFX lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spiral. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawEllipticalSpiral(int nDurationType, int nVFX, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws an ellipse around lCenter +// =============================== +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadiusOuter = outer radius of the ellipse in meters. +// fRadiusInner = inner radius of the ellipse in meters. +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the VFX lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the ellipse. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawEllipse(int nDurationType, int nVFX, location lCenter, float fRadiusOuter, float fRadiusInner, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a rhodonea helix around lCenter +// ===================================== +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// fRoulette = arbitrary constant, affects number of petals. DEFAULT : 3.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the spring lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawRhodoneaSpring(int nDurationType, int nVFX, location lCenter, float fRadius, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fRoulette=3.0f, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a rhodonea around lCenter +// =============================== +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fRoulette = arbitrary constant, affects number of petals. DEFAULT : 3.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the spring lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawRhodonea(int nDurationType, int nVFX, location lCenter, float fRadius, float fRoulette=3.0f, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a hypocycloid helix around lCenter +// ======================================== +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// fRoulette = arbitrary constant, affects number of petals. DEFAULT : 3.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the spring lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawHypocycloidSpring(int nDurationType, int nVFX, location lCenter, float fRadius, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fRoulette=3.0f, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a hypocycloid around lCenter +// ================================== +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fRoulette = arbitrary constant, affects number of petals. DEFAULT : 3.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the spring lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawHypocycloid(int nDurationType, int nVFX, location lCenter, float fRadius, float fRoulette=3.0f, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a epicycloid helix around lCenter +// ======================================= +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// fRoulette = arbitrary constant, affects number of petals. DEFAULT : 3.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the spring lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawEpicycloidSpring(int nDurationType, int nVFX, location lCenter, float fRadius, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fRoulette=3.0f, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Draws a epicycloid around lCenter +// ================================= +// nDurationType = DURATION_TYPE_* constant +// nVFX = the VFX_* constant to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fRoulette = arbitrary constant, affects number of petals. DEFAULT : 3.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the spring lasts before fading. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more effects are +// generated and the closer they are to each other. DEFAULT : 90 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +void DrawEpicycloid(int nDurationType, int nVFX, location lCenter, float fRadius, float fRoulette=3.0f, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f); + +// Places a circle around lCenter +// ============================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadius = radius of circle in meters. (1 tile = 10.0m X 10.0m) +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the circle. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceCircle(string sTemplate, location lCenter, float fRadius, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a spiral around lCenter +// ============================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of spiral in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of spiral in meters. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spiral. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceSpiral(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a spring around lCenter +// ============================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of spring in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of spring in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceSpring(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a line towards lCenter +// ============================= +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fLength = length of line in meters. (1 tile = 10.0m X 10.0m) +// fDirection = direction of line respective to normal. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fTime = time in seconds taken to draw the line. DEFAULT : 12.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceLineToCenter(string sTemplate, location lCenter, float fLength, float fDirection=0.0f, int nFrequency=60, float fTime=12.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a line from lCenter +// ========================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fLength = length of line in meters. (1 tile = 10.0m X 10.0m) +// fDirection = direction of line respective to normal. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fTime = time in seconds taken to draw the line. DEFAULT : 12.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceLineFromCenter(string sTemplate, location lCenter, float fLength, float fDirection=0.0f, int nFrequency=60, float fTime=12.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a polygonal spring around lCenter +// ======================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of spring in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of spring in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// nSides = number of sides. nSides < 3 will default to 3. DEFAULT : 3 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlacePolygonalSpring(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a polygonal spiral around lCenter +// ======================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of spiral in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of spiral in meters. DEFAULT : 0.0 +// nSides = number of sides. nSides < 3 will default to 3. DEFAULT : 3 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spiral. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlacePolygonalSpiral(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, int nSides=3, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a polygon around lCenter +// =============================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadius = radius of polygon in meters. (1 tile = 10.0m X 10.0m) +// nSides = number of sides. nSides < 3 will default to 3. DEFAULT : 3 +// nFrequency = number of points, the higher the frequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the polygon. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlacePolygon(string sTemplate, location lCenter, float fRadius, int nSides=3, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a pentacle (five-pointed star) around lCenter +// ==================================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadius = radius of pentacle in meters. (1 tile = 10.0m X 10.0m) +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the pentacle. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlacePentacle(string sTemplate, location lCenter, float fRadius, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a pentaclic spiral around lCenter +// ======================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of spiral in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of spiral in meters. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spiral. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlacePentaclicSpiral(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a pentaclic spring around lCenter +// ======================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of spring in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of spring in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlacePentaclicSpring(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a star spring around lCenter +// =================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusStartOuter = starting outer radius of spring in meters. +// fRadiusStartInner = starting inner radius of spring in meters. +// fRadiusEndOuter = ending outer radius of spring in meters. DEFAULT : 0.0 +// fRadiusEndInner = ending inner radius of spring in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// nSides = number of sides (or points) DEFAULT : 3 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceStarSpring(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a star spiral around lCenter +// =================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusStartOuter = starting outer radius of spiral in meters. +// fRadiusStartInner = starting inner radius of spiral in meters. +// fRadiusEndOuter = ending outer radius of spring in meters. DEFAULT : 0.0 +// fRadiusEndInner = ending inner radius of spring in meters. DEFAULT : 0.0 +// nSides = number of sides (or points) DEFAULT : 3 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceStarSpiral(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, int nSides=3, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a star around lCenter +// ============================ +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusOuter = outer radius of star in meters. (1 tile = 10.0m X 10.0m) +// fRadiusInner = inner radius of star in meters. +// nSides = number of sides (or points) DEFAULT : 3 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceStar(string sTemplate, location lCenter, float fRadiusOuter, float fRadiusInner, int nSides=3, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a hemisphere around lCenter +// ================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of sphere in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of sphere in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the sphere in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the sphere in meters. DEFAULT : 5.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the sphere. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the central/normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceHemisphere(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a perfect sphere around lCenter +// ====================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadius = radius of sphere in meters. (1 tile = 10.0m X 10.0m) +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the sphere. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the central/normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceSphere(string sTemplate, location lCenter, float fRadius, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a polygonal hemisphere around lCenter +// ============================================ +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of sphere in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of sphere in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the sphere in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the sphere in meters. DEFAULT : 5.0 +// nSides = number of sides. nSides < 3 will default to 3. DEFAULT : 3 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the sphere. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the central/normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlacePolygonalHemisphere(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a toroidal spring around lCenter +// ======================================= +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusStartOuter = starting outer radius of the torus in meters. +// fRadiusStartInner = starting inner radius of the torus in meters. +// fRadiusEndOuter = ending outer radius of the torus in meters. DEFAULT : 0.0 +// fRadiusEndInner = ending inner radius of the torus in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fLoopsPerRev = number of loops per revolution. DEFAULT : 36.0 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceToroidalSpring(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fLoopsPerRev=36.0f, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a toroidal spiral around lCenter +// ======================================= +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusStartOuter = starting outer radius of the torus in meters. +// fRadiusStartInner = starting inner radius of the torus in meters. +// fRadiusEndOuter = ending outer radius of the torus in meters. DEFAULT : 0.0 +// fRadiusEndInner = ending inner radius of the torus in meters. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fLoopsPerRev = number of loops per revolution. DEFAULT : 36.0 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spiral. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceToroidalSpiral(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, int nFrequency=60, float fLoopsPerRev=36.0f, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a standard torus around lCenter +// ====================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusOuter = outer radius of the torus in meters. +// fRadiusInner = inner radius of the torus in meters. +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fLoopsPerRev = number of loops per revolution. DEFAULT : 36.0 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the torus. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceTorus(string sTemplate, location lCenter, float fRadiusOuter, float fRadiusInner, int nFrequency=60, float fLoopsPerRev=36.0f, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a sinusoidal curve from lCenter +// ====================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadius = amplitude of curve in meters. +// fLength = horizontal length of curve in meters. (1 tile = 10.0m X 10.0m) +// fDirection = direction of curve respective to normal. DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the torus. DEFAULT : 12.0 +// fRotate = the shift in phase in degrees. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceSinusoid(string sTemplate, location lCenter, float fRadius, float fLength, float fDirection=0.0f, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places an elliptical spring around lCenter +// ========================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusStartOuter = starting outer radius of the ellipse in meters. +// fRadiusStartInner = starting inner radius of the ellipse in meters. +// fRadiusEndOuter = ending outer radius of the ellipse in meters.DEFAULT : 0.0 +// fRadiusEndInner = ending inner radius of the ellipse in meters.DEFAULT : 0.0 +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceEllipticalSpring(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places an elliptical spiral around lCenter +// ========================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusStartOuter = starting outer radius of the ellipse in meters. +// fRadiusStartInner = starting inner radius of the ellipse in meters. +// fRadiusEndOuter = ending outer radius of the ellipse in meters.DEFAULT : 0.0 +// fRadiusEndInner = ending inner radius of the ellipse in meters.DEFAULT : 0.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spiral. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceEllipticalSpiral(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places an ellipse around lCenter +// ================================ +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadiusOuter = outer radius of the ellipse in meters. +// fRadiusInner = inner radius of the ellipse in meters. +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the ellipse. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceEllipse(string sTemplate, location lCenter, float fRadiusOuter, float fRadiusInner, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a stella octangula above lCenter +// ======================================= +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fTime = time in seconds taken to draw the polyhedron. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceStellaOctangula(string sTemplate, location lCenter, float fRadius, int nFrequency=60, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a regular icosahedron above lCenter +// ========================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fTime = time in seconds taken to draw the polyhedron. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceIcosahedron(string sTemplate, location lCenter, float fRadius, int nFrequency=60, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a rhodonea helix around lCenter +// ====================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// fRoulette = arbitrary constant, affects number of petals. DEFAULT : 3.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceRhodoneaSpring(string sTemplate, location lCenter, float fRadius, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fRoulette=3.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a rhodonea around lCenter +// ================================ +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fRoulette = arbitrary constant, affects number of petals. DEFAULT : 3.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceRhodonea(string sTemplate, location lCenter, float fRadius, float fRoulette=3.0f, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a hypocycloid helix around lCenter +// ========================================= +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// fRoulette = arbitrary constant, affects number of petals. DEFAULT : 3.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceHypocycloidSpring(string sTemplate, location lCenter, float fRadius, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fRoulette=3.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a hypocycloid around lCenter +// =================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fRoulette = arbitrary constant, affects number of petals. DEFAULT : 3.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceHypocycloid(string sTemplate, location lCenter, float fRadius, float fRoulette=3.0f, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a epicycloid helix around lCenter +// ======================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// fRoulette = arbitrary constant, affects number of petals. DEFAULT : 3.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceEpicycloidSpring(string sTemplate, location lCenter, float fRadius, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fRoulette=3.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Places a epicycloid around lCenter +// ================================== +// sTemplate = blueprint resref of placeable to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fRoulette = arbitrary constant, affects number of petals. DEFAULT : 3.0 +// nFrequency = number of points, the higher nFrequency, the more placeables +// are created and the closer they are to each other. DEFAULT : 60 +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 12.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeables. Default invalid effect. DEFAULT : -1 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait = time in seconds to wait before applying visual effect. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeables get destroyed. DEFAULT : 0.0 +void PlaceEpicycloid(string sTemplate, location lCenter, float fRadius, float fRoulette=3.0f, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f); + +// Beams a polygonal hemisphere around lCenter +// =========================================== +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of sphere in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of sphere in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the sphere in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the sphere in meters. DEFAULT : 5.0 +// nSides = number of sides. DEFAULT : 3 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the sphere. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the central/normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamPolygonalHemisphere(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a polygonal spring around lCenter +// ======================================= +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of spring in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of spring in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// nSides = number of sides. DEFAULT : 3 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamPolygonalSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a polygonal spiral around lCenter +// ======================================= +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of spiral in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of spiral in meters. DEFAULT : 0.0 +// nSides = number of sides. DEFAULT : 3 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spiral. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamPolygonalSpiral(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a polygon around lCenter +// ============================== +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadius = radius of polygon in meters. (1 tile = 10.0m X 10.0m) +// nSides = number of sides. DEFAULT : 3 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the polygon. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamPolygon(int nDurationType, int nVFX, location lCenter, float fRadius, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a star around lCenter +// =========================== +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadiusOuter = outer radius of star in meters. (1 tile = 10.0m X 10.0m) +// fRadiusInner = inner radius of star in meters. +// nSides = number of sides (or points) DEFAULT : 3 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the pentacle. DEFAULT : 6.0 +// fWait = time in seconds to wait before applying the beams. DEFAULT : 1.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamStar(int nDurationType, int nVFX, location lCenter, float fRadiusOuter, float fRadiusInner, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=1.0f, float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a star spring around lCenter +// ================================== +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadiusStartOuter = starting outer radius of spring in meters. +// fRadiusStartInner = starting inner radius of spring in meters. +// fRadiusEndOuter = ending outer radius of spring in meters. DEFAULT : 0.0 +// fRadiusEndInner = ending inner radius of spring in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// nSides = number of sides (or points) DEFAULT : 3 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the pentacle. DEFAULT : 6.0 +// fWait = time in seconds to wait before applying the beams. DEFAULT : 1.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamStarSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a star spiral around lCenter +// ================================== +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadiusStartOuter = starting outer radius of spring in meters. +// fRadiusStartInner = starting inner radius of spring in meters. +// fRadiusEndOuter = ending outer radius of spiral in meters. DEFAULT : 0.0 +// fRadiusEndInner = ending inner radius of spiral in meters. DEFAULT : 0.0 +// nSides = number of sides (or points) DEFAULT : 3 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the pentacle. DEFAULT : 6.0 +// fWait = time in seconds to wait before applying the beams. DEFAULT : 1.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamStarSpiral(int nDurationType, int nVFX, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a pentacle around lCenter +// =============================== +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadius = radius of pentacle in meters. (1 tile = 10.0m X 10.0m) +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the pentacle. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamPentacle(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a pentaclic spiral around lCenter +// ======================================= +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of spiral in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of spiral in meters. DEFAULT : 0.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fRev = number of revolutions. DEFAULT : 1.0 +// fTime = time in seconds taken to draw the spiral. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamPentaclicSpiral(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fDuration=0.0f, string sTemplate="", float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a pentaclic spring around lCenter +// ======================================= +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of spring in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of spring in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the spring in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the spring in meters. DEFAULT : 5.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fRev = number of revolutions. DEFAULT : 5.0 +// fTime = time in seconds taken to draw the spring. DEFAULT : 6.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamPentaclicSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a line from lCenter +// ========================= +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fLength = length of line in meters. (1 tile = 10.0m X 10.0m) +// fDirection = direction of line respective to normal. DEFAULT : 0.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beam lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use.. DEFAULT : "" +// fTime = time in seconds taken to draw the line. DEFAULT : 6.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamLineFromCenter(int nDurationType, int nVFX, location lCenter, float fLength, float fDirection=0.0f, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a line to lCenter +// ======================= +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fLength = length of line in meters. (1 tile = 10.0m X 10.0m) +// fDirection = direction of line respective to normal. DEFAULT : 0.0 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beam lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fTime = time in seconds taken to draw the line. DEFAULT : 6.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamLineToCenter(int nDurationType, int nVFX, location lCenter, float fLength, float fDirection=0.0f, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a stella octangula above lCenter +// ====================================== +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fTime = time in seconds taken to create the placeable nodes. DEFAULT : 6.0 +// fWait = time in seconds to wait before applying the beams. DEFAULT : 1.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamStellaOctangula(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a regular icosahedron above lCenter +// ========================================= +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fTime = time in seconds taken to create the placeable nodes. DEFAULT : 6.0 +// fWait = time in seconds to wait before applying the beams. DEFAULT : 1.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamIcosahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a regular dodecahedron above lCenter +// ========================================= +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fTime = time in seconds taken to create the placeable nodes. DEFAULT : 6.0 +// fWait = time in seconds to wait before applying the beams. DEFAULT : 1.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamDodecahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a rhombic triacontahedron above lCenter +// ============================================= +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fTime = time in seconds taken to create the placeable nodes. DEFAULT : 6.0 +// fWait = time in seconds to wait before applying the beams. DEFAULT : 1.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamTriacontahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a cuboctahedron above lCenter +// ============================================= +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fTime = time in seconds taken to create the placeable nodes. DEFAULT : 6.0 +// fWait = time in seconds to wait before applying the beams. DEFAULT : 1.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamCuboctahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a small rhombicuboctahedron above lCenter +// ============================================= +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadius = radius in meters. (1 tile = 10.0m X 10.0m) +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fTime = time in seconds taken to create the placeable nodes. DEFAULT : 6.0 +// fWait = time in seconds to wait before applying the beams. DEFAULT : 1.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamSmallRhombicuboctahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +// Beams a gengon above lCenter +// ============================ +// nDurationType = DURATION_TYPE_* constant. +// nVFX = the VFX_BEAM_* constant to use. +// lCenter = the location of the center. +// fRadiusStart = starting radius of gengon in meters. (1 tile = 10.0m X 10.0m) +// fRadiusEnd = ending radius of gengon in meters. DEFAULT : 0.0 +// fHeightStart = starting height of the gengon in meters. DEFAULT : 0.0 +// fHeightEnd = ending height of the gengon in meters. DEFAULT : 5.0 +// nSides = number of sides. DEFAULT : 3 +// fDuration = if nDurationType is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the beams lasts before fading. DEFAULT : 0.0 +// sTemplate = blueprint resref of placeable to use. DEFAULT : "" +// fTime = time in seconds taken to draw the gengon. DEFAULT : 6.0 +// fWait = time in seconds to wait before applying the beams. DEFAULT : 1.0 +// fRotate = the angle of rotation respective to normal. DEFAULT : 0.0 +// fTwist = rotational displacement of end polygon in degrees. DEFAULT : 0.0 +// sAxis = ("x", "y" or "z") the normal axis. DEFAULT : "z" +// nDurationType2 = DURATION_TYPE_* constant if an additional visual effect is +// to be applied. Default invalid duration. DEFAULT : -1 +// nVFX2 = the VFX_* constant to use if an additional visual effect is to be +// applied to the placeable nodes. Default invalid effect. DEFAULT : -1 +// fDuration2 = if nDurationType2 is DURATION_TYPE_TEMPORARY, this is the number +// of seconds the effect lasts before fading. DEFAULT : 0.0 +// fWait2 = time in seconds to wait before applying nVFX2. DEFAULT : 1.0 +// fLifetime = if fLifetime is not 0.0, then this is time in seconds before the +// placeable nodes get destroyed. DEFAULT : 0.0 +void BeamGengon(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, float fTwist=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f); + +/* + ============================================= + OBJECT-RETURNING FUNCTIONS DECLARATIONS + ============================================= +*/ +// Object-returning equivalent of the void-returning functions +// sTag = tag of oData (the data storage invisible object) + +object ObjectPlaceSpring(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_SPRING"); +object ObjectPlacePolygonalSpring(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_POLYGONALSPRING"); +object ObjectPlacePentaclicSpring(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_PENTACLICSPRING"); +object ObjectPlaceStarSpring(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_STARSPRING"); +object ObjectPlaceHemisphere(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_HEMISPHERE"); +object ObjectPlacePolygonalHemisphere(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_POLYGONALHEMISPHERE"); +object ObjectPlaceSinusoid(string sTemplate, location lCenter, float fRadius, float fLength, float fDirection=0.0f, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_SINUSOID"); +object ObjectPlaceToroidalSpring(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fLoopsPerRev=36.0f, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_TOROIDALSPRING"); +object ObjectPlaceEllipticalSpring(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_ELLIPTICALSPRING"); +object ObjectPlaceStellaOctangula(string sTemplate, location lCenter, float fRadius, int nFrequency=60, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_STELLAOCTANGULA"); +object ObjectPlaceIcosahedron(string sTemplate, location lCenter, float fRadius, int nFrequency=60, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_ICOSAHEDRON"); +object ObjectPlaceRhodoneaSpring(string sTemplate, location lCenter, float fRadius, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fRoulette=3.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_RHODONEASPRING"); +object ObjectPlaceHypocycloidSpring(string sTemplate, location lCenter, float fRadius, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fRoulette=3.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_HYPOCYCLOIDSPRING"); +object ObjectPlaceEpicycloidSpring(string sTemplate, location lCenter, float fRadius, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fRoulette=3.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_EPICYCLOIDSPRING"); +object ObjectBeamPolygonalHemisphere(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_POLYGONALHEMISPHERE"); +object ObjectBeamPolygonalSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_POLYGONALSPRING"); +object ObjectBeamPolygon(int nDurationType, int nVFX, location lCenter, float fRadius, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_POLYGON"); +object ObjectBeamStar(int nDurationType, int nVFX, location lCenter, float fRadiusOuter, float fRadiusInner, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=1.0f, float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_STAR"); +object ObjectBeamStarSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_STARSPRING"); +object ObjectBeamPentacle(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_PENTACLE"); +object ObjectBeamPentaclicSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_PENTACLICSPRING"); +object ObjectBeamLineFromCenter(int nDurationType, int nVFX, location lCenter, float fLength, float fDirection=0.0f, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_LINEFROM"); +object ObjectBeamLineToCenter(int nDurationType, int nVFX, location lCenter, float fLength, float fDirection=0.0f, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_LINETO"); +object ObjectBeamStellaOctangula(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_STELLAOCTANGULA"); +object ObjectBeamIcosahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_ICOSAHEDRON"); +object ObjectBeamDodecahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_DODECAHEDRON"); +object ObjectBeamTriacontahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_TRIACONTAHEDRON"); +object ObjectBeamCuboctahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_CUBOCTAHEDRON"); +object ObjectBeamSmallRhombicuboctahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_SMALLRHOMBICUBOCTAHEDRON"); +object ObjectBeamGengon(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, float fTwist=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_GENGON"); + +/* + ============================================= + PRIVATE FUNCTIONS DECLARATIONS + ============================================= +*/ +// Draws a straight line from vOne to vTwo +// void DrawLineFromVectorToVector(int nDurationType, int nVFX, object oArea, vector vOne, vector vTwo, float fDuration, int nFrequency, float fTime); + +// Places a straight line from vOne to vTwo, automatically applies VFX if any +// void PlaceLineFromVectorToVector(string sTemplate, object oArea, vector vOne, vector vTwo, int nFrequency, float fTime, int nDurationType, int nVFX, float fDuration, float fWait, float fLifetime, object oData); + +// Delayable CreateObject, automatically applies VFX if any, and sets created object as oData's local object using auto-generated number if fLifetime > 0.0 +// void gao_ActionCreateObject(string sTemplate, location lLocation, int nDurationType, int nVFX, float fDuration, float fWait, float fLifetime, object oData); + +// Delayable CreateObject, automatically sets created object as oData's local object and applies VFX if any +// void gao_ActionCreateLocalObject(string sTemplate, location lLocation, string sNumber, object oData, int nDurationType, int nVFX, float fDuration, float fWait, float fLifetime); + +// Apply EffectBeam between two of oData's local objects +// void gao_ActionApplyLocalBeamEffect(object oData, string sNumber1, string sNumber2, int nDurationType, int nVFX, float fDuration); + +// Return properly rotated vector +//vector gao_RotateVector(vector vCenter, string sAxis, float x, float y, float z, float fRotateXZ, float fRotateYZ); + +/* + ============================================= + FUNCTIONS IMPLEMENTATIONS + ============================================= +*/ + +/* + ============================================= + PRIVATE FUNCTIONS + ============================================= +*/ + +void gao_ActionCreateObject(string sTemplate, location lLocation, int nDurationType, int nVFX, float fDuration, float fWait, float fLifetime, object oData) +{ + object oPlaceable = CreateObject(OBJECT_TYPE_PLACEABLE, sTemplate, lLocation); + if (nDurationType >= 0 && nVFX >= 0) DelayCommand(fWait, ApplyEffectToObject(nDurationType, EffectVisualEffect(nVFX), oPlaceable, fDuration)); + if (fLifetime > 0.0) DestroyObject(oPlaceable, fLifetime); + else // if display is permanent, then start storing the objects as local to ease garbage collection later on. + { // code modified from Ornedan's modification of the original function + int i = GetLocalInt(oData, "storetotal"); + AssignCommand(oPlaceable, ActionDoCommand(SetLocalObject(oData, "store" + IntToString(i), oPlaceable))); + SetLocalInt(oData, "storetotal", i+1); + } +} + +void gao_ActionCreateLocalObject(string sTemplate, location lLocation, string sNumber, object oData, int nDurationType, int nVFX, float fDuration, float fWait, float fLifetime) +{ + object oObject = CreateObject(OBJECT_TYPE_PLACEABLE, sTemplate, lLocation); + AssignCommand(oObject, ActionDoCommand(SetLocalObject(oData, sNumber, oObject))); + if (nDurationType >= 0 && nVFX >= 0) DelayCommand(fWait, ApplyEffectToObject(nDurationType, EffectVisualEffect(nVFX), oObject, fDuration)); + if (fLifetime > 0.0) DestroyObject(oObject, fLifetime); +} + +void gao_ActionApplyLocalBeamEffect(object oData, string sNumber1, string sNumber2, int nDurationType, int nVFX, float fDuration) +{ + object oNode1 = GetLocalObject(oData, sNumber1); + object oNode2 = GetLocalObject(oData, sNumber2); + ApplyEffectToObject(nDurationType, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode2, fDuration); +} + +void DrawLineFromVectorToVector(int nDurationType, int nVFX, object oArea, vector vOne, vector vTwo, float fDuration, int nFrequency, float fTime) +{ + int i; + if (nFrequency < 1) nFrequency = 1; + vector vResultant = vTwo - vOne; + vector vUnit = VectorNormalize(vResultant); + float fDelay = fTime/IntToFloat(nFrequency); + float fLength = VectorMagnitude(vResultant); + float fDelta = fLength/IntToFloat(nFrequency); // distance between each node + float fAngle = VectorToAngle(vUnit); + location lPos; + float f; + for (i=0; i 0.0) ? 360.0/IntToFloat(nSides) : -360.0/IntToFloat(nSides); // angle of segment + float fSidesToDraw = (fRev > 0.0) ? fRev*IntToFloat(nSides) : -fRev*IntToFloat(nSides); // total number of sides to draw including revolutions as float value + int nSidesToDraw = FloatToInt(fSidesToDraw); // total number of sides to draw including revolutions as int value + int nFrequencyPerSide = FloatToInt(IntToFloat(nFrequency)/fSidesToDraw); + float fDecay = (fRadiusStart - fRadiusEnd)/fSidesToDraw; // change in radius per side + float fGrowth = (fHeightStart - fHeightEnd)/fSidesToDraw; // change in height per side + float fDelayPerSide = fTime/fSidesToDraw; + vector vCenter = GetPositionFromLocation(lCenter); + vector vPos1, vPos2; + object oArea = GetAreaFromLocation(lCenter); + float f, g, fAngle1, fAngle2; + for (i = 0; i < nSidesToDraw; i++) + { + f = IntToFloat(i); + g = IntToFloat(i+1); + fAngle1 = fEta*f + fRotate; + fAngle2 = fEta*g + fRotate; + vPos1 = gao_RotateVector(vCenter, sAxis, (fRadiusStart - fDecay*f)*cos(fAngle1), (fRadiusStart - fDecay*f)*sin(fAngle1), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ); + vPos2 = gao_RotateVector(vCenter, sAxis, (fRadiusStart - fDecay*g)*cos(fAngle2), (fRadiusStart - fDecay*g)*sin(fAngle2), fHeightStart - fGrowth*g, fDirectionXZ, fDirectionYZ); + DelayCommand(f*fDelayPerSide, DrawLineFromVectorToVector(nDurationType, nVFX, oArea, vPos1, vPos2, fDuration, nFrequencyPerSide, fDelayPerSide)); + } +} + +void DrawPolygonalSpiral(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, int nSides=3, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f) +{ + DrawPolygonalSpring(nDurationType, nVFX, lCenter, fRadiusStart, fRadiusEnd, 0.0, 0.0, nSides, fDuration, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ); +} + +void DrawPolygon(int nDurationType, int nVFX, location lCenter, float fRadius, int nSides=3, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f) +{ + DrawPolygonalSpring(nDurationType, nVFX, lCenter, fRadius, fRadius, 0.0, 0.0, nSides, fDuration, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ); +} + +void DrawPentaclicSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f) +{ + int i; + if (nFrequency < 1) nFrequency = 90; + if (fTime < 0.0) fTime = 6.0; + if (fRev == 0.0) fRev = 5.0; + float fSidesToDraw = (fRev > 0.0) ? fRev*5.0 : -fRev*5.0; + int nSidesToDraw = FloatToInt(fSidesToDraw); // total number of sides to draw including revolutions + int nFrequencyPerSide = FloatToInt(IntToFloat(nFrequency)/fSidesToDraw); + float fDecay = (fRadiusStart - fRadiusEnd)/fSidesToDraw; // change in radius per node + float fGrowth = (fHeightStart - fHeightEnd)/fSidesToDraw; // change in height per node + float fDelayPerSide = fTime/fSidesToDraw; + vector vCenter = GetPositionFromLocation(lCenter); + vector vPos1, vPos2; + object oArea = GetAreaFromLocation(lCenter); + float f, g, fAngle1, fAngle2; + float fStarangle = (fRev > 0.0) ? 144.0 : -144.0; + for (i = 0; i < nSidesToDraw; i++) + { + f = IntToFloat(i); + g = IntToFloat(i+1); + fAngle1 = fStarangle*f + fRotate; + fAngle2 = fStarangle*g + fRotate; + vPos1 = gao_RotateVector(vCenter, sAxis, (fRadiusStart - fDecay*f)*cos(fAngle1), (fRadiusStart - fDecay*f)*sin(fAngle1), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ); + vPos2 = gao_RotateVector(vCenter, sAxis, (fRadiusStart - fDecay*g)*cos(fAngle2), (fRadiusStart - fDecay*g)*sin(fAngle2), fHeightStart - fGrowth*g, fDirectionXZ, fDirectionYZ); + DelayCommand(f*fDelayPerSide, DrawLineFromVectorToVector(nDurationType, nVFX, oArea, vPos1, vPos2, fDuration, nFrequencyPerSide, fDelayPerSide)); + } +} + +void DrawPentaclicSpiral(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f) +{ + DrawPentaclicSpring(nDurationType, nVFX, lCenter, fRadiusStart, fRadiusEnd, 0.0, 0.0, fDuration, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ); +} + +void DrawPentacle(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f) +{ + DrawPentaclicSpring(nDurationType, nVFX, lCenter, fRadius, fRadius, 0.0, 0.0, fDuration, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ); +} + +void DrawStarSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f) +{ + int i, toggle; + if (nSides < 2) nSides = 3; + if (nFrequency < 1) nFrequency = 90; + if (fTime < 0.0) fTime = 6.0; + if (fRev == 0.0) fRev = 5.0; + float fSidesToDraw = (fRev > 0.0) ? fRev*IntToFloat(nSides*2) : -fRev*IntToFloat(nSides*2); + int nSidesToDraw = FloatToInt(fSidesToDraw); // total number of sides to draw including revolutions + int nFrequencyPerSide = FloatToInt(IntToFloat(nFrequency)/fSidesToDraw); + float fDecayInner = (fRadiusStartInner - fRadiusEndInner)/fSidesToDraw; // change in radius per node + float fDecayOuter = (fRadiusStartOuter - fRadiusEndOuter)/fSidesToDraw; // change in radius per node + float fGrowth = (fHeightStart - fHeightEnd)/fSidesToDraw; // change in height per node + float fDelayPerSide = fTime/fSidesToDraw; + vector vCenter = GetPositionFromLocation(lCenter); + vector vPos1, vPos2; + object oArea = GetAreaFromLocation(lCenter); + float f, g, fAngle1, fAngle2; + float fStarangle = (fRev > 0.0) ? 360.0/IntToFloat(nSides*2) : -360.0/IntToFloat(nSides*2); + for (i = 0; i < nSidesToDraw; i++) + { + toggle ^= 1; + f = IntToFloat(i); + g = IntToFloat(i+1); + fAngle1 = fStarangle*f + fRotate; + fAngle2 = fStarangle*g + fRotate; + if (!toggle) + { + vPos1 = gao_RotateVector(vCenter, sAxis, (fRadiusStartInner - fDecayInner*f)*cos(fAngle1), (fRadiusStartInner - fDecayInner*f)*sin(fAngle1), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ); + vPos2 = gao_RotateVector(vCenter, sAxis, (fRadiusStartOuter - fDecayOuter*g)*cos(fAngle2), (fRadiusStartOuter - fDecayOuter*g)*sin(fAngle2), fHeightStart - fGrowth*g, fDirectionXZ, fDirectionYZ); + } + else + { + vPos1 = gao_RotateVector(vCenter, sAxis, (fRadiusStartOuter - fDecayOuter*f)*cos(fAngle1), (fRadiusStartOuter - fDecayOuter*f)*sin(fAngle1), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ); + vPos2 = gao_RotateVector(vCenter, sAxis, (fRadiusStartInner - fDecayInner*g)*cos(fAngle2), (fRadiusStartInner - fDecayInner*g)*sin(fAngle2), fHeightStart - fGrowth*g, fDirectionXZ, fDirectionYZ); + } + DelayCommand(f*fDelayPerSide, DrawLineFromVectorToVector(nDurationType, nVFX, oArea, vPos1, vPos2, fDuration, nFrequencyPerSide, fDelayPerSide)); + } +} + +void DrawStarSpiral(int nDurationType, int nVFX, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, int nSides=3, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f) +{ + DrawStarSpring(nDurationType, nVFX, lCenter, fRadiusStartOuter, fRadiusStartInner, fRadiusEndOuter, fRadiusEndInner, 0.0, 0.0, nSides, fDuration, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ); +} + +void DrawStar(int nDurationType, int nVFX, location lCenter, float fRadiusOuter, float fRadiusInner, int nSides=3, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f) +{ + DrawStarSpring(nDurationType, nVFX, lCenter, fRadiusOuter, fRadiusInner, fRadiusOuter, fRadiusInner, 0.0, 0.0, nSides, fDuration, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ); +} + +void DrawHemisphere(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f) +{ + int i; + if (nFrequency < 1) nFrequency = 90; + if (fTime < 0.0) fTime = 6.0; + if (fRev == 0.0) fRev = 5.0; + float fTheta = 360.0*fRev/IntToFloat(nFrequency); // angle between each node + float fDelay = fTime/IntToFloat(nFrequency); + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + location lPos; + float f, fAngle, fSphereRadius, fSphereAngle; + float fEffectiveHeight = fHeightEnd - fHeightStart; + for (i = 0; i < nFrequency; i++) + { + f = IntToFloat(i); + fAngle = fTheta*f + fRotate; + fSphereAngle = fTheta*f*0.25/fRev; + fSphereRadius = fRadiusStart*cos(fSphereAngle) + fRadiusEnd*sin(fSphereAngle); + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fSphereRadius*cos(fAngle), fSphereRadius*sin(fAngle), fEffectiveHeight*sin(fSphereAngle) + fHeightStart, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelay, ApplyEffectAtLocation(nDurationType, EffectVisualEffect(nVFX), lPos, fDuration)); + } +} + +void DrawSphere(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f) +{ + if (nFrequency < 1) nFrequency = 90; + if (fRev == 0.0) fRev = 5.0; + DrawHemisphere(nDurationType, nVFX, lCenter, fRadius, 0.0, fRadius, 0.0, fDuration, nFrequency/2, fRev/2.0, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ); + DrawHemisphere(nDurationType, nVFX, lCenter, fRadius, 0.0, fRadius, 2.0*fRadius, fDuration, nFrequency/2, -fRev/2.0, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ); +} + +void DrawPolygonalHemisphere(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f) +{ + int i; + if (nSides < 3) nSides = 3; + if (nFrequency < 1) nFrequency = 90; + if (fTime < 0.0) fTime = 6.0; + if (fRev == 0.0) fRev = 5.0; + float fEta = (fRev > 0.0) ? 360.0/IntToFloat(nSides) : -360.0/IntToFloat(nSides); // angle of segment + float fSidesToDraw = (fRev > 0.0) ? fRev*IntToFloat(nSides) : -fRev*IntToFloat(nSides); // total number of sides to draw including revolutions as float value + int nSidesToDraw = FloatToInt(fSidesToDraw); // total number of sides to draw including revolutions as int value + int nFrequencyPerSide = FloatToInt(IntToFloat(nFrequency)/fSidesToDraw); + float fDelayPerSide = fTime/fSidesToDraw; + vector vCenter = GetPositionFromLocation(lCenter); + vector vPos1, vPos2; + object oArea = GetAreaFromLocation(lCenter); + float f, g, fAngle1, fAngle2, fSphereRadius1, fSphereAngle1, fSphereRadius2, fSphereAngle2; + float fEffectiveHeight = fHeightEnd - fHeightStart; + for (i = 0; i < nSidesToDraw; i++) + { + f = IntToFloat(i); + g = IntToFloat(i+1); + fAngle1 = fEta*f + fRotate; + fSphereAngle1 = fEta*f*0.25/fRev; + fSphereRadius1 = fRadiusStart*cos(fSphereAngle1) + fRadiusEnd*sin(fSphereAngle1); + fAngle2 = fEta*g + fRotate; + fSphereAngle2 = fEta*g*0.25/fRev; + fSphereRadius2 = fRadiusStart*cos(fSphereAngle2) + fRadiusEnd*sin(fSphereAngle2); + vPos1 = gao_RotateVector(vCenter, sAxis, fSphereRadius1*cos(fAngle1), fSphereRadius1*sin(fAngle1), fEffectiveHeight*sin(fSphereAngle1) + fHeightStart, fDirectionXZ, fDirectionYZ); + vPos2 = gao_RotateVector(vCenter, sAxis, fSphereRadius2*cos(fAngle2), fSphereRadius2*sin(fAngle2), fEffectiveHeight*sin(fSphereAngle2) + fHeightStart, fDirectionXZ, fDirectionYZ); + DelayCommand(f*fDelayPerSide, DrawLineFromVectorToVector(nDurationType, nVFX, oArea, vPos1, vPos2, fDuration, nFrequencyPerSide, fDelayPerSide)); + } +} + +void DrawToroidalSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fDuration=0.0f, int nFrequency=90, float fLoopsPerRev=36.0f, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f) +{ + int i; + if (nFrequency < 1) nFrequency = 90; + if (fTime < 0.0) fTime = 6.0; + float fRadiusStart = (fRadiusStartOuter + fRadiusStartInner)*0.5; + float fRadiusEnd = (fRadiusEndOuter + fRadiusEndInner)*0.5; + float fToricRadiusStart = (fRadiusStartOuter - fRadiusStartInner)*0.5; + float fToricRadiusEnd = (fRadiusEndOuter - fRadiusEndInner)*0.5; + float fTheta = 360.0*fRev/IntToFloat(nFrequency); // angle between each node + float fDecay = (fRadiusStart - fRadiusEnd)/IntToFloat(nFrequency); // change in radius per node + float fGrowth = (fHeightStart - fHeightEnd)/IntToFloat(nFrequency); // change in height per node + float fToricDecay = (fToricRadiusStart - fToricRadiusEnd)/IntToFloat(nFrequency); // change in radius of torus per node + float fDelay = fTime/IntToFloat(nFrequency); + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + location lPos; + float f, fAngle, fToricAngle, fToricRadius; + for (i=0; i 0; atan(y/x) -> 90; + fAngle = (x == 0.0 && y < 0.0) ? 270.0 + fRotate : (x==0.0) ? 90.0 + fRotate : (x < 0.0) ? 180.0 + atan(y/x) + fRotate : atan(y/x) + fRotate; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fDist*cos(fAngle), fDist*sin(fAngle), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelay, ApplyEffectAtLocation(nDurationType, EffectVisualEffect(nVFX), lPos, fDuration)); + } +} + +void DrawHypocycloid(int nDurationType, int nVFX, location lCenter, float fRadius, float fRoulette=3.0f, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f) +{ + DrawHypocycloidSpring(nDurationType, nVFX, lCenter, fRadius, 0.0, 0.0, fRoulette, fDuration, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ); +} + +void DrawEpicycloidSpring(int nDurationType, int nVFX, location lCenter, float fRadius, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fRoulette=3.0f, float fDuration=0.0f, int nFrequency=90, float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f) +{ + int i; + if (nFrequency < 1) nFrequency = 90; + if (fTime < 0.0) fTime = 6.0; + if (fRoulette == 0.0) fRoulette = 3.0; + float fTheta = 360.0*fRev/IntToFloat(nFrequency); // angle between each node + float fGrowth = (fHeightStart - fHeightEnd)/IntToFloat(nFrequency); // change in height per node + float fDelay = fTime/IntToFloat(nFrequency); + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + location lPos; + float fAlpha = fRadius + fRoulette; + float fBeta = fAlpha/fRoulette; + float f, x, y, fAngle, fDist; + + for (i = 0; i < nFrequency; i++) + { + f = IntToFloat(i); + fAngle = fTheta*f; + y = (fAlpha*sin(fAngle) - fRoulette*sin(fBeta*fAngle)); + x = (fAlpha*cos(fAngle) - fRoulette*cos(fBeta*fAngle)); + fDist = sqrt(pow(y, 2.0) + pow(x, 2.0)); + fAngle = (x == 0.0 && y < 0.0) ? 270.0 + fRotate : (x==0.0) ? 90.0 + fRotate : (x < 0.0) ? 180.0 + atan(y/x) + fRotate : atan(y/x) + fRotate; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fDist*cos(fAngle), fDist*sin(fAngle), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelay, ApplyEffectAtLocation(nDurationType, EffectVisualEffect(nVFX), lPos, fDuration)); + } +} + +void DrawEpicycloid(int nDurationType, int nVFX, location lCenter, float fRadius, float fRoulette=3.0f, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f) +{ + DrawEpicycloidSpring(nDurationType, nVFX, lCenter, fRadius, 0.0, 0.0, fRoulette, fDuration, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ); +} + +void DrawSinusoid(int nDurationType, int nVFX, location lCenter, float fRadius, float fLength, float fDirection=0.0f, float fDuration=0.0f, int nFrequency=90, float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f) +{ + int i; + if (nFrequency < 1) nFrequency = 90; + if (fTime < 0.0) fTime = 6.0; + float fTheta = 360.0*fRev/IntToFloat(nFrequency); // angle between each node + float fEta = fLength/IntToFloat(nFrequency); // horizontal distance between each node + float fDelay = fTime/IntToFloat(nFrequency); + vector vCenter = GetPositionFromLocation(lCenter); + vector v, vTemp; + object oArea = GetAreaFromLocation(lCenter); + location lPos; + float f, fAngle, fSine; + + for (i = 0; i < nFrequency; i++) + { + f = IntToFloat(i); + fAngle = fTheta*f + fRotate; + fSine = sin(fAngle); + v = Vector(fEta*f, fRadius*fSine, 0.0); + vTemp = VectorMagnitude(v)*AngleToVector(VectorToAngle(v) + fDirection); + fAngle = (fSine > 0.0) ? 360.0 - fAngle : fAngle ; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, vTemp.x, vTemp.y, 0.0, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelay, ApplyEffectAtLocation(nDurationType, EffectVisualEffect(nVFX), lPos, fDuration)); + } +} + +/* + ============================================= + PLACE* FUNCTIONS + ============================================= +*/ + +object ObjectPlaceEllipticalSpring(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_ELLIPTICALSPRING") +{ + int i; + if (nFrequency < 1) nFrequency = 60; + if (fTime < 0.0) fTime = 12.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fWait < 1.0) fWait = 1.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + fRadiusStartOuter = (fRadiusStartOuter == 0.0) ? 0.01 : (fRadiusStartOuter < 0.0) ? -fRadiusStartOuter : fRadiusStartOuter ; + fRadiusStartInner = (fRadiusStartInner == 0.0) ? 0.01 : (fRadiusStartInner < 0.0) ? -fRadiusStartInner : fRadiusStartInner ; + fRadiusEndOuter = (fRadiusEndOuter == 0.0) ? 0.01 : (fRadiusEndOuter < 0.0) ? -fRadiusEndOuter : fRadiusEndOuter ; + fRadiusEndInner = (fRadiusEndInner == 0.0) ? 0.01 : (fRadiusEndInner < 0.0) ? -fRadiusEndInner : fRadiusEndInner ; + float fTheta = 360.0*fRev/IntToFloat(nFrequency); // angle between each node + float fInnerDecay = (fRadiusStartInner - fRadiusEndInner)/IntToFloat(nFrequency); // change in radius per node + float fOuterDecay = (fRadiusStartOuter - fRadiusEndOuter)/IntToFloat(nFrequency); // change in radius per node + float fGrowth = (fHeightStart - fHeightEnd)/IntToFloat(nFrequency); // change in height per node + float fDelay = fTime/IntToFloat(nFrequency); + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + location lPos; + float f, fAngle, fElliRadius, fElliAngle, fRadiusOuter, fEccentric; + + object oData = (fLifetime > 0.0) ? OBJECT_INVALID : CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + + for (i = 0; i < nFrequency; i++) + { + f = IntToFloat(i); + fElliAngle = fTheta*f; + fAngle = fElliAngle + fRotate; + fRadiusOuter = fRadiusStartOuter - fOuterDecay*f; + fEccentric = 1 - (pow(fRadiusStartInner - fInnerDecay*f, 2.0)/pow(fRadiusOuter, 2.0)); + fElliRadius = fRadiusOuter*sqrt((1 - fEccentric)/(1 - fEccentric*pow(cos(fElliAngle), 2.0))); + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fElliRadius*cos(fAngle), fElliRadius*sin(fAngle), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelay, gao_ActionCreateObject(sTemplate, lPos, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + + return oData; +} + +void PlaceEllipticalSpring(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceEllipticalSpring(sTemplate, lCenter, fRadiusStartOuter, fRadiusStartInner, fRadiusEndOuter, fRadiusEndInner, fHeightStart, fHeightEnd, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime); +} + +void PlaceEllipticalSpiral(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceEllipticalSpring(sTemplate, lCenter, fRadiusStartOuter, fRadiusStartInner, fRadiusEndOuter, fRadiusEndInner, 0.0, 0.0, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_ELLIPTICALSPIRAL"); +} + +void PlaceEllipse(string sTemplate, location lCenter, float fRadiusOuter, float fRadiusInner, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceEllipticalSpring(sTemplate, lCenter, fRadiusOuter, fRadiusInner, fRadiusOuter, fRadiusInner, 0.0, 0.0, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_ELLIPSE"); +} + +object ObjectPlaceSpring(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_SPRING") +{ + int i; + if (nFrequency < 1) nFrequency = 60; + if (fTime < 0.0) fTime = 12.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fWait < 1.0) fWait = 1.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fTheta = 360.0*fRev/IntToFloat(nFrequency); // angle between each node + float fDecay = (fRadiusStart - fRadiusEnd)/IntToFloat(nFrequency); // change in radius per node + float fGrowth = (fHeightStart - fHeightEnd)/IntToFloat(nFrequency); // change in height per node + float fDelay = fTime/IntToFloat(nFrequency); + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + location lPos; + float f, fAngle; + + object oData = (fLifetime > 0.0) ? OBJECT_INVALID : CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + + for (i = 0; i < nFrequency; i++) + { + f = IntToFloat(i); + fAngle = fTheta*f + fRotate; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, (fRadiusStart - fDecay*f)*cos(fAngle), (fRadiusStart - fDecay*f)*sin(fAngle), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelay, gao_ActionCreateObject(sTemplate, lPos, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + + return oData; +} + +void PlaceSpring(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceSpring(sTemplate, lCenter, fRadiusStart, fRadiusEnd, fHeightStart, fHeightEnd, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime); +} + +void PlaceSpiral(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceSpring(sTemplate, lCenter, fRadiusStart, fRadiusEnd, 0.0, 0.0, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_SPIRAL"); +} + +void PlaceCircle(string sTemplate, location lCenter, float fRadius, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceSpring(sTemplate, lCenter, fRadius, fRadius, 0.0, 0.0, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_CIRCLE"); +} + +void PlaceLineToCenter(string sTemplate, location lCenter, float fLength, float fDirection=0.0f, int nFrequency=60, float fTime=12.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceSpring(sTemplate, lCenter, fLength, 0.0, 0.0, 0.0, nFrequency, 0.0, fTime, fDirection, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_LINETO"); +} + +void PlaceLineFromCenter(string sTemplate, location lCenter, float fLength, float fDirection=0.0f, int nFrequency=60, float fTime=12.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceSpring(sTemplate, lCenter, 0.0, fLength, 0.0, 0.0, nFrequency, 0.0, fTime, fDirection, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_LINEFROM"); +} + +object ObjectPlacePolygonalSpring(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_POLYGONALSPRING") +{ + int i; + if (nSides < 3) nSides = 3; + if (nFrequency < 1) nFrequency = 60; + if (fWait < 1.0) fWait = 1.0; + if (fTime < 0.0) fTime = 12.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fRev == 0.0) fRev = 5.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fEta = (fRev > 0.0) ? 360.0/IntToFloat(nSides) : -360.0/IntToFloat(nSides); // angle of segment + float fSidesToDraw = (fRev > 0.0) ? fRev*IntToFloat(nSides) : -fRev*IntToFloat(nSides); // total number of sides to draw including revolutions as float value + int nSidesToDraw = FloatToInt(fSidesToDraw); // total number of sides to draw including revolutions as int value + int nFrequencyPerSide = FloatToInt(IntToFloat(nFrequency)/fSidesToDraw); + float fDecay = (fRadiusStart - fRadiusEnd)/fSidesToDraw; // change in radius per side + float fGrowth = (fHeightStart - fHeightEnd)/fSidesToDraw; // change in height per side + float fDelayPerSide = fTime/fSidesToDraw; + vector vCenter = GetPositionFromLocation(lCenter); + vector vPos1, vPos2; + object oArea = GetAreaFromLocation(lCenter); + float f, g, fAngle1, fAngle2; + + object oData = (fLifetime > 0.0) ? OBJECT_INVALID : CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + + for (i = 0; i < nSidesToDraw; i++) + { + f = IntToFloat(i); + g = IntToFloat(i+1); + fAngle1 = fEta*f + fRotate; + fAngle2 = fEta*g + fRotate; + vPos1 = gao_RotateVector(vCenter, sAxis, (fRadiusStart - fDecay*f)*cos(fAngle1), (fRadiusStart - fDecay*f)*sin(fAngle1), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ); + vPos2 = gao_RotateVector(vCenter, sAxis, (fRadiusStart - fDecay*g)*cos(fAngle2), (fRadiusStart - fDecay*g)*sin(fAngle2), fHeightStart - fGrowth*g, fDirectionXZ, fDirectionYZ); + DelayCommand(f*fDelayPerSide, PlaceLineFromVectorToVector(sTemplate, oArea, vPos1, vPos2, nFrequencyPerSide, fDelayPerSide, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + + return oData; +} + +void PlacePolygonalSpring(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlacePolygonalSpring(sTemplate, lCenter, fRadiusStart, fRadiusEnd, fHeightStart, fHeightEnd, nSides, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime); +} + +void PlacePolygonalSpiral(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, int nSides=3, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlacePolygonalSpring(sTemplate, lCenter, fRadiusStart, fRadiusEnd, 0.0, 0.0, nSides, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_POLYGONALSPIRAL"); +} + +void PlacePolygon(string sTemplate, location lCenter, float fRadius, int nSides=3, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlacePolygonalSpring(sTemplate, lCenter, fRadius, fRadius, 0.0, 0.0, nSides, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_POLYGON"); +} + +object ObjectPlacePentaclicSpring(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_PENTACLICSPRING") +{ + int i; + if (nFrequency < 1) nFrequency = 60; + if (fWait < 1.0) fWait = 1.0; + if (fTime < 0.0) fTime = 12.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fRev == 0.0) fRev = 5.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fSidesToDraw = (fRev > 0.0) ? fRev*5.0 : -fRev*5.0; + int nSidesToDraw = FloatToInt(fSidesToDraw); // total number of sides to draw including revolutions + int nFrequencyPerSide = FloatToInt(IntToFloat(nFrequency)/fSidesToDraw); + float fDecay = (fRadiusStart - fRadiusEnd)/fSidesToDraw; // change in radius per side + float fGrowth = (fHeightStart - fHeightEnd)/fSidesToDraw; // change in height per side + float fDelayPerSide = fTime/fSidesToDraw; + vector vCenter = GetPositionFromLocation(lCenter); + vector vPos1, vPos2; + object oArea = GetAreaFromLocation(lCenter); + float f, g, fAngle1, fAngle2; + float fStarangle = (fRev > 0.0) ? 144.0 : -144.0; + + object oData = (fLifetime > 0.0) ? OBJECT_INVALID : CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + + for (i = 0; i < nSidesToDraw; i++) + { + f = IntToFloat(i); + g = IntToFloat(i+1); + fAngle1 = fStarangle*f + fRotate; + fAngle2 = fStarangle*g + fRotate; + vPos1 = gao_RotateVector(vCenter, sAxis, (fRadiusStart-fDecay*f)*cos(fAngle1), (fRadiusStart-fDecay*f)*sin(fAngle1), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ); + vPos2 = gao_RotateVector(vCenter, sAxis, (fRadiusStart-fDecay*g)*cos(fAngle2), (fRadiusStart-fDecay*g)*sin(fAngle2), fHeightStart - fGrowth*g, fDirectionXZ, fDirectionYZ); + DelayCommand(f*fDelayPerSide, PlaceLineFromVectorToVector(sTemplate, oArea, vPos1, vPos2, nFrequencyPerSide, fDelayPerSide, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + + return oData; +} + +void PlacePentaclicSpring(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlacePentaclicSpring(sTemplate, lCenter, fRadiusStart, fRadiusEnd, fHeightStart, fHeightEnd, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime); +} + +void PlacePentaclicSpiral(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlacePentaclicSpring(sTemplate, lCenter, fRadiusStart, fRadiusEnd, 0.0, 0.0, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_PENTACLICSPIRAL"); +} + +void PlacePentacle(string sTemplate, location lCenter, float fRadius, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlacePentaclicSpring(sTemplate, lCenter, fRadius, fRadius, 0.0, 0.0, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_PENTACLE"); +} + +object ObjectPlaceStarSpring(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_STARSPRING") +{ + int i, toggle; + if (nSides < 2) nSides = 3; + if (nFrequency < 1) nFrequency = 60; + if (fWait < 1.0) fWait = 1.0; + if (fTime < 0.0) fTime = 12.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fRev == 0.0) fRev = 5.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fSidesToDraw = (fRev > 0.0) ? fRev*IntToFloat(nSides*2) : -fRev*IntToFloat(nSides*2); + int nSidesToDraw = FloatToInt(fSidesToDraw); // total number of sides to draw including revolutions + int nFrequencyPerSide = FloatToInt(IntToFloat(nFrequency)/fSidesToDraw); + float fDecayInner = (fRadiusStartInner - fRadiusEndInner)/fSidesToDraw; // change in radius per side + float fDecayOuter = (fRadiusStartOuter - fRadiusEndOuter)/fSidesToDraw; // change in radius per side + float fGrowth = (fHeightStart - fHeightEnd)/fSidesToDraw; // change in height per side + float fDelayPerSide = fTime/fSidesToDraw; + vector vCenter = GetPositionFromLocation(lCenter); + vector vPos1, vPos2; + object oArea = GetAreaFromLocation(lCenter); + float f, g, fAngle1, fAngle2; + float fStarangle = (fRev > 0.0) ? 360.0/IntToFloat(nSides*2) : -360.0/IntToFloat(nSides*2); + + object oData = (fLifetime > 0.0) ? OBJECT_INVALID : CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + + for (i = 0; i < nSidesToDraw; i++) + { + toggle ^= 1; + f = IntToFloat(i); + g = IntToFloat(i+1); + fAngle1 = fStarangle*f + fRotate; + fAngle2 = fStarangle*g + fRotate; + if (!toggle) + { + vPos1 = gao_RotateVector(vCenter, sAxis, (fRadiusStartInner - fDecayInner*f)*cos(fAngle1), (fRadiusStartInner - fDecayInner*f)*sin(fAngle1), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ); + vPos2 = gao_RotateVector(vCenter, sAxis, (fRadiusStartOuter - fDecayOuter*g)*cos(fAngle2), (fRadiusStartOuter - fDecayOuter*g)*sin(fAngle2), fHeightStart - fGrowth*g, fDirectionXZ, fDirectionYZ); + } + else + { + vPos1 = gao_RotateVector(vCenter, sAxis, (fRadiusStartOuter - fDecayOuter*f)*cos(fAngle1), (fRadiusStartOuter - fDecayOuter*f)*sin(fAngle1), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ); + vPos2 = gao_RotateVector(vCenter, sAxis, (fRadiusStartInner - fDecayInner*g)*cos(fAngle2), (fRadiusStartInner - fDecayInner*g)*sin(fAngle2), fHeightStart - fGrowth*g, fDirectionXZ, fDirectionYZ); + } + DelayCommand(f*fDelayPerSide, PlaceLineFromVectorToVector(sTemplate, oArea, vPos1, vPos2, nFrequencyPerSide, fDelayPerSide, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + + return oData; +} + +void PlaceStarSpring(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceStarSpring(sTemplate, lCenter, fRadiusStartOuter, fRadiusStartInner, fRadiusEndOuter, fRadiusEndInner, fHeightStart, fHeightEnd, nSides, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime); +} + +void PlaceStarSpiral(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, int nSides=3, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceStarSpring(sTemplate, lCenter, fRadiusStartOuter, fRadiusStartInner, fRadiusEndOuter, fRadiusEndInner, 0.0, 0.0, nSides, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_STARSPIRAL"); +} + +void PlaceStar(string sTemplate, location lCenter, float fRadiusOuter, float fRadiusInner, int nSides=3, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceStarSpring(sTemplate, lCenter, fRadiusOuter, fRadiusInner, fRadiusOuter, fRadiusInner, 0.0, 0.0, nSides, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_STAR"); +} + +object ObjectPlaceHemisphere(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_HEMISPHERE") +{ + int i; + if (nFrequency < 1) nFrequency = 60; + if (fTime < 0.0) fTime = 12.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fRev == 0.0) fRev = 5.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fTheta = 360.0*fRev/IntToFloat(nFrequency); // angle between each node + float fDecay = (fRadiusStart - fRadiusEnd)/IntToFloat(nFrequency); // change in radius per node + float fDelay = fTime/IntToFloat(nFrequency); + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + location lPos; + float f, fAngle, fSphereRadius, fSphereAngle; + float fEffectiveHeight = fHeightEnd - fHeightStart; + + object oData = (fLifetime > 0.0) ? OBJECT_INVALID : CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + + for (i = 0; i < nFrequency; i++) + { + f = IntToFloat(i); + fAngle = fTheta*f + fRotate; + fSphereAngle = fTheta*f*0.25/fRev; + fSphereRadius = fRadiusStart*cos(fSphereAngle) + fRadiusEnd*sin(fSphereAngle); + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fSphereRadius*cos(fAngle), fSphereRadius*sin(fAngle), fEffectiveHeight*sin(fSphereAngle) + fHeightStart, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelay, gao_ActionCreateObject(sTemplate, lPos, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + + return oData; +} + +void PlaceHemisphere(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceHemisphere(sTemplate, lCenter, fRadiusStart, fRadiusEnd, fHeightStart, fHeightEnd, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime); +} + +void PlaceSphere(string sTemplate, location lCenter, float fRadius, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + if (nFrequency < 1) nFrequency = 60; + if (fRev == 0.0) fRev = 5.0; + ObjectPlaceHemisphere(sTemplate, lCenter, fRadius, 0.0, fRadius, 0.0, nFrequency/2, fRev/2.0, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime); + ObjectPlaceHemisphere(sTemplate, lCenter, fRadius, 0.0, fRadius, 2.0*fRadius, nFrequency/2, -fRev/2.0, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime); +} + +object ObjectPlacePolygonalHemisphere(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_POLYGONALHEMISPHERE") +{ + int i; + if (nSides < 3) nSides = 3; + if (nFrequency < 1) nFrequency = 90; + if (fTime < 0.0) fTime = 12.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fRev == 0.0) fRev = 5.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fEta = (fRev > 0.0) ? 360.0/IntToFloat(nSides) : -360.0/IntToFloat(nSides); // angle of segment + float fSidesToDraw = (fRev > 0.0) ? fRev*IntToFloat(nSides) : -fRev*IntToFloat(nSides); // total number of sides to draw including revolutions as float value + int nSidesToDraw = FloatToInt(fSidesToDraw); // total number of sides to draw including revolutions as int value + int nFrequencyPerSide = FloatToInt(IntToFloat(nFrequency)/fSidesToDraw); + float fDelayPerSide = fTime/fSidesToDraw; + vector vCenter = GetPositionFromLocation(lCenter); + vector vPos1, vPos2; + object oArea = GetAreaFromLocation(lCenter); + float f, g, fAngle1, fAngle2, fSphereRadius1, fSphereAngle1, fSphereRadius2, fSphereAngle2; + float fEffectiveHeight = fHeightEnd - fHeightStart; + + object oData = (fLifetime > 0.0) ? OBJECT_INVALID : CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + + for (i = 0; i < nSidesToDraw; i++) + { + f = IntToFloat(i); + g = IntToFloat(i+1); + fAngle1 = fEta*f + fRotate; + fSphereAngle1 = fEta*f*0.25/fRev; + fSphereRadius1 = fRadiusStart*cos(fSphereAngle1) + fRadiusEnd*sin(fSphereAngle1); + fAngle2 = fEta*g + fRotate; + fSphereAngle2 = fEta*g*0.25/fRev; + fSphereRadius2 = fRadiusStart*cos(fSphereAngle2) + fRadiusEnd*sin(fSphereAngle2); + vPos1 = gao_RotateVector(vCenter, sAxis, fSphereRadius1*cos(fAngle1), fSphereRadius1*sin(fAngle1), fEffectiveHeight*sin(fSphereAngle1) + fHeightStart, fDirectionXZ, fDirectionYZ); + vPos2 = gao_RotateVector(vCenter, sAxis, fSphereRadius2*cos(fAngle2), fSphereRadius2*sin(fAngle2), fEffectiveHeight*sin(fSphereAngle2) + fHeightStart, fDirectionXZ, fDirectionYZ); + DelayCommand(f*fDelayPerSide, PlaceLineFromVectorToVector(sTemplate, oArea, vPos1, vPos2, nFrequencyPerSide, fDelayPerSide, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + + return oData; +} + +void PlacePolygonalHemisphere(string sTemplate, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlacePolygonalHemisphere(sTemplate, lCenter, fRadiusStart, fRadiusEnd, fHeightStart, fHeightEnd, nSides, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime); +} + +object ObjectPlaceSinusoid(string sTemplate, location lCenter, float fRadius, float fLength, float fDirection=0.0f, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_SINUSOID") +{ + int i; + if (nFrequency < 1) nFrequency = 60; + if (fWait < 1.0) fWait = 1.0; + if (fTime < 0.0) fTime = 12.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fTheta = 360.0*fRev/IntToFloat(nFrequency); // angle between each node + float fEta = fLength/IntToFloat(nFrequency); // horizontal distance between each node + float fDelay = fTime/IntToFloat(nFrequency); + vector vCenter = GetPositionFromLocation(lCenter); + vector v, vTemp; + object oArea = GetAreaFromLocation(lCenter); + location lPos; + float f, fAngle, fSine; + + object oData = (fLifetime > 0.0) ? OBJECT_INVALID : CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + + for (i = 0; i < nFrequency; i++) + { + f = IntToFloat(i); + fAngle = fTheta*f + fRotate; + fSine = sin(fAngle); + v = Vector(fEta*f, fRadius*fSine, 0.0); + vTemp = VectorMagnitude(v)*AngleToVector(VectorToAngle(v) + fDirection); + fAngle = (fSine > 0.0) ? 360.0 - fAngle : fAngle ; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, vTemp.x, vTemp.y, 0.0, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelay, gao_ActionCreateObject(sTemplate, lPos, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + + return oData; +} + +void PlaceSinusoid(string sTemplate, location lCenter, float fRadius, float fLength, float fDirection=0.0f, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceSinusoid(sTemplate, lCenter, fRadius, fLength, fDirection, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime); +} + +object ObjectPlaceToroidalSpring(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fLoopsPerRev=36.0f, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_TOROIDALSPRING") +{ + int i; + if (nFrequency < 1) nFrequency = 60; + if (fWait < 1.0) fWait = 1.0; + if (fTime < 0.0) fTime = 12.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fRadiusStart = (fRadiusStartOuter + fRadiusStartInner)*0.5; + float fRadiusEnd = (fRadiusEndOuter + fRadiusEndInner)*0.5; + float fToricRadiusStart = (fRadiusStartOuter - fRadiusStartInner)*0.5; + float fToricRadiusEnd = (fRadiusEndOuter - fRadiusEndInner)*0.5; + float fTheta = 360.0*fRev/IntToFloat(nFrequency); // angle between each node + float fDecay = (fRadiusStart - fRadiusEnd)/IntToFloat(nFrequency); // change in radius per node + float fGrowth = (fHeightStart - fHeightEnd)/IntToFloat(nFrequency); // change in height per node + float fToricDecay = (fToricRadiusStart - fToricRadiusEnd)/IntToFloat(nFrequency); // change in radius of torus per node + float fDelay = fTime/IntToFloat(nFrequency); + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + location lPos; + float f, fAngle, fToricAngle, fToricRadius; + + object oData = (fLifetime > 0.0) ? OBJECT_INVALID : CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + + for (i = 0; i < nFrequency; i++) + { + f = IntToFloat(i); + fAngle = fTheta*f + fRotate; + fToricAngle = fLoopsPerRev*fAngle; + fToricRadius = fToricRadiusStart - fToricDecay*f; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, (fRadiusStart - fDecay*f)*cos(fAngle) + fToricRadius*cos(fToricAngle)*cos(fAngle), (fRadiusStart - fDecay*f)*sin(fAngle) + fToricRadius*cos(fToricAngle)*sin(fAngle), fHeightStart - fGrowth*f + fToricRadius*sin(fToricAngle), fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelay, gao_ActionCreateObject(sTemplate, lPos, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + + return oData; +} + +void PlaceToroidalSpring(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nFrequency=60, float fLoopsPerRev=36.0f, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceToroidalSpring(sTemplate, lCenter, fRadiusStartOuter, fRadiusStartInner, fRadiusEndOuter, fRadiusEndInner, fHeightStart, fHeightEnd, nFrequency, fLoopsPerRev, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime); +} + +void PlaceToroidalSpiral(string sTemplate, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, int nFrequency=60, float fLoopsPerRev=36.0f, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceToroidalSpring(sTemplate, lCenter, fRadiusStartOuter, fRadiusStartInner, fRadiusEndOuter, fRadiusEndInner, 0.0, 0.0, nFrequency, fLoopsPerRev, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_TOROIDALSPIRAL"); +} + +void PlaceTorus(string sTemplate, location lCenter, float fRadiusOuter, float fRadiusInner, int nFrequency=60, float fLoopsPerRev=36.0f, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceToroidalSpring(sTemplate, lCenter, fRadiusOuter, fRadiusInner, fRadiusOuter, fRadiusInner, 0.0, 0.0, nFrequency, fLoopsPerRev, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_TORUS"); +} + +object ObjectPlaceStellaOctangula(string sTemplate, location lCenter, float fRadius, int nFrequency=60, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_STELLAOCTANGULA") +{ + int i; + if (fWait < 1.0) fWait = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (nFrequency < 1) nFrequency = 60; + if (fLifetime < 0.0) fLifetime = 0.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + float fSigma = fRadius*2.0/3.0; + float fEpsilon = fSigma*4.0/3.0/cos(19.47122063449069136924599933997); + int nFrequencyPerSide = nFrequency/12; + float fDelayPerSide = fTime/12.0; + float f, z1, fAngle1, g, z2, fAngle2; + vector vPos1, vPos2, vTop; + vTop = gao_RotateVector(vCenter, sAxis, 0.0, 0.0, 3.0*fSigma, fDirectionXZ, fDirectionYZ); + + object oData = (fLifetime > 0.0) ? OBJECT_INVALID : CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + + for (i = 0; i < 6; i++) + { + f = IntToFloat(i); + g = IntToFloat(i+1); + if (i < 3) + { + fAngle1 = fRotate + 120.0*f; + fAngle2 = fRotate + 120.0*g; + z1 = 2.0*fSigma; + z2 = 2.0*fSigma; + } + else + { + fAngle1 = fRotate + 120.0*f + 60.0 ; + fAngle2 = fRotate + 120.0*g + 60.0 ; + z1 = fSigma; + z2 = fSigma; + } + vPos1 = gao_RotateVector(vCenter, sAxis, fEpsilon*cos(fAngle1), fEpsilon*sin(fAngle1), z1, fDirectionXZ, fDirectionYZ); + vPos2 = gao_RotateVector(vCenter, sAxis, fEpsilon*cos(fAngle2), fEpsilon*sin(fAngle2), z2, fDirectionXZ, fDirectionYZ); + + if (i<3) DelayCommand(fDelayPerSide*f, PlaceLineFromVectorToVector(sTemplate, oArea, vCenter, vPos1, nFrequencyPerSide, fDelayPerSide, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + else DelayCommand(fDelayPerSide*(f+6.0), PlaceLineFromVectorToVector(sTemplate, oArea, vTop, vPos1, nFrequencyPerSide, fDelayPerSide, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + DelayCommand(fDelayPerSide*(f+3.0), PlaceLineFromVectorToVector(sTemplate, oArea, vPos1, vPos2, nFrequencyPerSide, fDelayPerSide, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + + return oData; +} + +void PlaceStellaOctangula(string sTemplate, location lCenter, float fRadius, int nFrequency=60, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceStellaOctangula(sTemplate, lCenter, fRadius, nFrequency, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime); +} + +object ObjectPlaceIcosahedron(string sTemplate, location lCenter, float fRadius, int nFrequency=60, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_ICOSAHEDRON") +{ + int i; + if (fWait < 1.0) fWait = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (nFrequency < 1) nFrequency = 60; + if (fLifetime < 0.0) fLifetime = 0.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + float fSigma1 = fRadius*0.55278640450004206071816526625413; + float fSigma2 = fRadius*0.89442719099991587856366946749173; + float fEpsilon = fRadius*0.89442719099991587856366946749256; + int nFrequencyPerSide = nFrequency/30; + float fDelayPerSide = fTime/30.0; + float f, z1, fAngle1, g, z2, fAngle2; + vector vPos1, vPos2, vTop; + vTop = gao_RotateVector(vCenter, sAxis, 0.0, 0.0, 2.0*fSigma1 + fSigma2, fDirectionXZ, fDirectionYZ); + + object oData = (fLifetime > 0.0) ? OBJECT_INVALID : CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + + for (i = 0; i < 20; i++) + { + f = IntToFloat(i); + g = IntToFloat(i+1); + if (i < 5) + { + fAngle1 = fRotate + f*72.0; + fAngle2 = fRotate + g*72.0; + z1 = fSigma1; + z2 = fSigma1; + } + else if (i < 10) + { + fAngle1 = fRotate + f*72.0; + fAngle2 = fRotate + f*72.0 + 36.0; + z1 = fSigma1; + z2 = fSigma1 + fSigma2; + } + else if (i < 15) + { + fAngle1 = fRotate + f*72.0; + fAngle2 = fRotate + f*72.0 - 36.0; + z1 = fSigma1; + z2 = fSigma1 + fSigma2; + } + else + { + fAngle1 = fRotate + f*72.0 + 36.0; + fAngle2 = fRotate + g*72.0 + 36.0; + z1 = fSigma1 + fSigma2; + z2 = fSigma1 + fSigma2; + } + vPos1 = gao_RotateVector(vCenter, sAxis, fEpsilon*cos(fAngle1), fEpsilon*sin(fAngle1), z1, fDirectionXZ, fDirectionYZ); + vPos2 = gao_RotateVector(vCenter, sAxis, fEpsilon*cos(fAngle2), fEpsilon*sin(fAngle2), z2, fDirectionXZ, fDirectionYZ); + + if (i < 5) + { + DelayCommand(fDelayPerSide*f, PlaceLineFromVectorToVector(sTemplate, oArea, vCenter, vPos1, nFrequencyPerSide, fDelayPerSide, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + DelayCommand(fDelayPerSide*(f+5.0), PlaceLineFromVectorToVector(sTemplate, oArea, vPos1, vPos2, nFrequencyPerSide, fDelayPerSide, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + else if (i < 10) + { + DelayCommand(fDelayPerSide*(f+5.0), PlaceLineFromVectorToVector(sTemplate, oArea, vPos1, vPos2, nFrequencyPerSide, fDelayPerSide, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + else if (i < 15) + { + DelayCommand(fDelayPerSide*(f+5.0), PlaceLineFromVectorToVector(sTemplate, oArea, vPos2, vPos1, nFrequencyPerSide, fDelayPerSide, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + else + { + DelayCommand(fDelayPerSide*(f+10.0), PlaceLineFromVectorToVector(sTemplate, oArea, vTop, vPos1, nFrequencyPerSide, fDelayPerSide, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + DelayCommand(fDelayPerSide*(f+5.0), PlaceLineFromVectorToVector(sTemplate, oArea, vPos1, vPos2, nFrequencyPerSide, fDelayPerSide, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + } + + return oData; +} + +void PlaceIcosahedron(string sTemplate, location lCenter, float fRadius, int nFrequency=60, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceIcosahedron(sTemplate, lCenter, fRadius, nFrequency, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime); +} + +object ObjectPlaceRhodoneaSpring(string sTemplate, location lCenter, float fRadius, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fRoulette=3.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_RHODONEASPRING") +{ + int i; + if (nFrequency < 1) nFrequency = 60; + if (fTime < 0.0) fTime = 12.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fWait < 1.0) fWait = 1.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fTheta = 360.0*fRev/IntToFloat(nFrequency); // angle between each node + float fGrowth = (fHeightStart - fHeightEnd)/IntToFloat(nFrequency); // change in height per node + float fDelay = fTime/IntToFloat(nFrequency); + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + location lPos; + float f, fAngle, fDist; + + object oData = (fLifetime > 0.0) ? OBJECT_INVALID : CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + + for (i = 0; i < nFrequency; i++) + { + f = IntToFloat(i); + fAngle = fTheta*f; + fDist = fRadius*sin(fRoulette*fAngle); + fAngle += fRotate; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fDist*cos(fAngle), fDist*sin(fAngle), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelay, gao_ActionCreateObject(sTemplate, lPos, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + + return oData; +} + +void PlaceRhodoneaSpring(string sTemplate, location lCenter, float fRadius, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fRoulette=3.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceRhodoneaSpring(sTemplate, lCenter, fRadius, fHeightStart, fHeightEnd, fRoulette, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime); +} + +void PlaceRhodonea(string sTemplate, location lCenter, float fRadius, float fRoulette=3.0f, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceRhodoneaSpring(sTemplate, lCenter, fRadius, 0.0, 0.0, fRoulette, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_RHODONEA"); +} + +object ObjectPlaceHypocycloidSpring(string sTemplate, location lCenter, float fRadius, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fRoulette=3.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_HYPOCYCLOIDSPRING") +{ + int i; + if (nFrequency < 1) nFrequency = 60; + if (fTime < 0.0) fTime = 12.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fWait < 1.0) fWait = 1.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + if (fRoulette == 0.0) fRoulette = 3.0; + float fTheta = 360.0*fRev/IntToFloat(nFrequency); // angle between each node + float fGrowth = (fHeightStart - fHeightEnd)/IntToFloat(nFrequency); // change in height per node + float fDelay = fTime/IntToFloat(nFrequency); + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + location lPos; + float fAlpha = fRadius - fRoulette; + float fBeta = fAlpha/fRoulette; // DIVIDE BY ZERO + float f, x, y, fAngle, fDist; + + object oData = (fLifetime > 0.0) ? OBJECT_INVALID : CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + + for (i = 0; i < nFrequency; i++) + { + f = IntToFloat(i); + fAngle = fTheta*f; + y = (fAlpha*sin(fAngle) - fRoulette*sin(fBeta*fAngle)); + x = (fAlpha*cos(fAngle) + fRoulette*cos(fBeta*fAngle)); + fDist = sqrt(pow(y, 2.0) + pow(x, 2.0)); + fAngle = (x == 0.0 && y < 0.0) ? 270.0 + fRotate : (x==0.0) ? 90.0 + fRotate : (x < 0.0) ? 180.0 + atan(y/x) + fRotate : atan(y/x) + fRotate; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fDist*cos(fAngle), fDist*sin(fAngle), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelay, gao_ActionCreateObject(sTemplate, lPos, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + + return oData; +} + +void PlaceHypocycloidSpring(string sTemplate, location lCenter, float fRadius, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fRoulette=3.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceHypocycloidSpring(sTemplate, lCenter, fRadius, fHeightStart, fHeightEnd, fRoulette, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime); +} + +void PlaceHypocycloid(string sTemplate, location lCenter, float fRadius, float fRoulette=3.0f, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceHypocycloidSpring(sTemplate, lCenter, fRadius, 0.0, 0.0, fRoulette, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_HYPOCYCLOID"); +} + +object ObjectPlaceEpicycloidSpring(string sTemplate, location lCenter, float fRadius, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fRoulette=3.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f, string sTag="PSC_P_EPICYCLOIDSPRING") +{ + int i; + if (nFrequency < 1) nFrequency = 60; + if (fTime < 0.0) fTime = 12.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fWait < 1.0) fWait = 1.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + if (fRoulette == 0.0) fRoulette = 3.0; + float fTheta = 360.0*fRev/IntToFloat(nFrequency); // angle between each node + float fGrowth = (fHeightStart - fHeightEnd)/IntToFloat(nFrequency); // change in height per node + float fDelay = fTime/IntToFloat(nFrequency); + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + location lPos; + float fAlpha = fRadius + fRoulette; + float fBeta = fAlpha/fRoulette; + float f, x, y, fAngle, fDist; + + object oData = (fLifetime > 0.0) ? OBJECT_INVALID : CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + + for (i = 0; i < nFrequency; i++) + { + f = IntToFloat(i); + fAngle = fTheta*f; + y = (fAlpha*sin(fAngle) - fRoulette*sin(fBeta*fAngle)); + x = (fAlpha*cos(fAngle) - fRoulette*cos(fBeta*fAngle)); + fDist = sqrt(pow(y, 2.0) + pow(x, 2.0)); + fAngle = (x == 0.0 && y < 0.0) ? 270.0 + fRotate : (x==0.0) ? 90.0 + fRotate : (x < 0.0) ? 180.0 + atan(y/x) + fRotate : atan(y/x) + fRotate; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fDist*cos(fAngle), fDist*sin(fAngle), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelay, gao_ActionCreateObject(sTemplate, lPos, nDurationType, nVFX, fDuration, fWait, fLifetime, oData)); + } + + return oData; +} + +void PlaceEpicycloidSpring(string sTemplate, location lCenter, float fRadius, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fRoulette=3.0f, int nFrequency=60, float fRev=5.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceEpicycloidSpring(sTemplate, lCenter, fRadius, fHeightStart, fHeightEnd, fRoulette, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime); +} + +void PlaceEpicycloid(string sTemplate, location lCenter, float fRadius, float fRoulette=3.0f, int nFrequency=60, float fRev=1.0f, float fTime=12.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType=-1, int nVFX=-1, float fDuration=0.0f, float fWait=1.0f, float fLifetime=0.0f) +{ + ObjectPlaceEpicycloidSpring(sTemplate, lCenter, fRadius, 0.0, 0.0, fRoulette, nFrequency, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType, nVFX, fDuration, fWait, fLifetime, "PSC_P_EPICYCLOID"); +} + +/* + ============================================= + BEAM FUNCTIONS + ============================================= +*/ + +object ObjectBeamPolygonalSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_POLYGONALSPRING") +{ + int i; + if (nSides < 3) nSides = 3; + if (fWait2 < 1.0) fWait2 = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fRev == 0.0) fRev = 5.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fEta = (fRev > 0.0) ? 360.0/IntToFloat(nSides) : -360.0/IntToFloat(nSides); // angle of segment + float fSidesToDraw = (fRev > 0.0) ? fRev*IntToFloat(nSides) : -fRev*IntToFloat(nSides); // total number of sides to draw including revolutions as float value + int nSidesToDraw = FloatToInt(fSidesToDraw); // total number of sides to draw including revolutions as int value + float fDecay = (fRadiusStart - fRadiusEnd)/fSidesToDraw; // change in radius per side + float fGrowth = (fHeightStart - fHeightEnd)/fSidesToDraw; // change in height per side + float fDelayPerSide = fTime/fSidesToDraw; + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + float f, fAngle; + object oData; + location lPos; + float fWait = 1.0; + + oData = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + AssignCommand(oData, ActionDoCommand(SetLocalInt(oData, "storetotal", nSidesToDraw + 1))); + + for (i = 0; i <= nSidesToDraw; i++) + { + f = IntToFloat(i); + fAngle = fEta*f + fRotate; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, (fRadiusStart-fDecay*f)*cos(fAngle), (fRadiusStart-fDecay*f)*sin(fAngle), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelayPerSide, gao_ActionCreateLocalObject(sTemplate, lPos, "store" + IntToString(i), oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime)); + if (i > 0) DelayCommand(f*fDelayPerSide+fWait, gao_ActionApplyLocalBeamEffect(oData, "store" + IntToString(i-1), "store" + IntToString(i), nDurationType, nVFX, fDuration)); + } + + if (fLifetime > 0.0) + { + DestroyObject(oData, fLifetime + fTime + fWait + fWait2 + 5.0); + return OBJECT_INVALID; + } + return oData; +} + +void BeamPolygonalSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamPolygonalSpring(nDurationType, nVFX, lCenter, fRadiusStart, fRadiusEnd, fHeightStart, fHeightEnd, nSides, fDuration, sTemplate, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); +} + +void BeamPolygonalSpiral(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamPolygonalSpring(nDurationType, nVFX, lCenter, fRadiusStart, fRadiusEnd, 0.0, 0.0, nSides, fDuration, sTemplate, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime, "PSC_B_POLYGONALSPIRAL"); +} + +object ObjectBeamPolygon(int nDurationType, int nVFX, location lCenter, float fRadius, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_POLYGON") +{ + int i; + if (nSides < 3) nSides = 3; + if (fWait2 < 1.0) fWait2 = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fRev == 0.0) fRev = 1.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fEta = (fRev > 0.0) ? 360.0/IntToFloat(nSides) : -360.0/IntToFloat(nSides); // angle of segment + float fSidesToDraw = (fRev > 0.0) ? fRev*IntToFloat(nSides) : -fRev*IntToFloat(nSides); // total number of sides to draw including revolutions as float value + int nSidesToDraw = FloatToInt(fSidesToDraw); // total number of sides to draw including revolutions as int value + float fDelayPerSide = fTime/fSidesToDraw; + vector vCenter = GetPositionFromLocation(lCenter); + vector vPos; + object oArea = GetAreaFromLocation(lCenter); + float f, x, y, fAngle; + object oData; + location lPos; + float fWait = 1.0; + + oData = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + AssignCommand(oData, ActionDoCommand(SetLocalInt(oData, "storetotal", nSidesToDraw))); + + for (i = 0; i < nSidesToDraw; i++) + { + f = IntToFloat(i); + fAngle = fEta*f + fRotate; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fRadius*cos(fAngle), fRadius*sin(fAngle), 0.0, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelayPerSide, gao_ActionCreateLocalObject(sTemplate, lPos, "store" + IntToString(i), oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime)); + if (i>0) DelayCommand(f*fDelayPerSide+fWait, gao_ActionApplyLocalBeamEffect(oData, "store" + IntToString(i-1), "store" + IntToString(i), nDurationType, nVFX, fDuration)); + if (fRev == 1.0 && i == nSidesToDraw-1) DelayCommand(fSidesToDraw*fDelayPerSide+fWait, gao_ActionApplyLocalBeamEffect(oData, "store" + IntToString(i), "store0", nDurationType, nVFX, fDuration)); + } + + if (fLifetime > 0.0) + { + DestroyObject(oData, fLifetime + fTime + fWait + fWait2 + 5.0); + return OBJECT_INVALID; + } + return oData; +} + +void BeamPolygon(int nDurationType, int nVFX, location lCenter, float fRadius, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamPolygon(nDurationType, nVFX, lCenter, fRadius, nSides, fDuration, sTemplate, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); +} + +object ObjectBeamPentaclicSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_PENTACLICSPRING") +{ + int i; + if (fWait2 < 1.0) fWait2 = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fRev == 0.0) fRev = 5.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fSidesToDraw = (fRev > 0.0) ? fRev*5.0 : -fRev*5.0; + int nSidesToDraw = FloatToInt(fSidesToDraw); // total number of sides to draw including revolutions + float fDecay = (fRadiusStart - fRadiusEnd)/fSidesToDraw; // change in radius per side + float fGrowth = (fHeightStart - fHeightEnd)/fSidesToDraw; // change in height per side + float fDelayPerSide = fTime/fSidesToDraw; + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + float f, fAngle; + float fStarangle = (fRev > 0.0) ? 144.0 : -144.0; + object oData; + location lPos; + float fWait = 1.0; + + oData = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + AssignCommand(oData, ActionDoCommand(SetLocalInt(oData, "storetotal", nSidesToDraw+1))); + + for (i = 0; i <= nSidesToDraw; i++) + { + f = IntToFloat(i); + fAngle = fStarangle*f + fRotate; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, (fRadiusStart-fDecay*f)*cos(fAngle), (fRadiusStart-fDecay*f)*sin(fAngle), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelayPerSide, gao_ActionCreateLocalObject(sTemplate, lPos, "store" + IntToString(i), oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime)); + if (i > 0) DelayCommand(f*fDelayPerSide+fWait, gao_ActionApplyLocalBeamEffect(oData, "store" + IntToString(i-1), "store" + IntToString(i), nDurationType, nVFX, fDuration)); + } + + if (fLifetime > 0.0) + { + DestroyObject(oData, fLifetime + fTime + fWait + fWait2 + 5.0); + return OBJECT_INVALID; + } + return oData; +} + +void BeamPentaclicSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamPentaclicSpring(nDurationType, nVFX, lCenter, fRadiusStart, fRadiusEnd, fHeightStart, fHeightEnd, fDuration, sTemplate, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); +} + +void BeamPentaclicSpiral(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fDuration=0.0f, string sTemplate="", float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamPentaclicSpring(nDurationType, nVFX, lCenter, fRadiusStart, fRadiusEnd, 0.0, 0.0, fDuration, sTemplate, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime, "PSC_B_PENTACLICSPIRAL"); +} + +object ObjectBeamPentacle(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_PENTACLE") +{ + int i; + if (fWait2 < 1.0) fWait2 = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fRev == 0.0) fRev = 1.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fSidesToDraw = (fRev > 0.0) ? fRev*5.0 : -fRev*5.0; + int nSidesToDraw = FloatToInt(fSidesToDraw); // total number of sides to draw including revolutions + float fDelayPerSide = fTime/fSidesToDraw; + vector vCenter = GetPositionFromLocation(lCenter); + vector vPos; + object oArea = GetAreaFromLocation(lCenter); + float f, x, y, fAngle; + float fStarangle = (fRev > 0.0) ? 144.0 : -144.0; + object oData; + location lPos; + float fWait = 1.0; + + oData = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + AssignCommand(oData, ActionDoCommand(SetLocalInt(oData, "storetotal", nSidesToDraw))); + + for (i = 0; i < nSidesToDraw; i++) + { + f = IntToFloat(i); + fAngle = fStarangle*f + fRotate; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fRadius*cos(fAngle), fRadius*sin(fAngle), 0.0, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelayPerSide, gao_ActionCreateLocalObject(sTemplate, lPos, "store" + IntToString(i), oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime)); + if (i>0) DelayCommand(f*fDelayPerSide+fWait, gao_ActionApplyLocalBeamEffect(oData, "store" + IntToString(i-1), "store" + IntToString(i), nDurationType, nVFX, fDuration)); + if (fRev == 1.0 && i == nSidesToDraw-1) DelayCommand(fSidesToDraw*fDelayPerSide+fWait, gao_ActionApplyLocalBeamEffect(oData, "store" + IntToString(i), "store0", nDurationType, nVFX, fDuration)); + } + + if (fLifetime > 0.0) + { + DestroyObject(oData, fLifetime + fTime + fWait + fWait2 + 5.0); + return OBJECT_INVALID; + } + return oData; +} + +void BeamPentacle(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fRev=1.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamPentacle(nDurationType, nVFX, lCenter, fRadius, fDuration, sTemplate, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); +} + +object ObjectBeamStarSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_STARSPRING") +{ + int i, toggle; + if (nSides < 2) nSides = 3; + if (fWait < 1.0) fWait = 1.0; + if (fWait2 < 1.0) fWait2 = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fRev == 0.0) fRev = 5.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fSidesToDraw = (fRev > 0.0) ? fRev*IntToFloat(nSides*2) : -fRev*IntToFloat(nSides*2); + int nSidesToDraw = FloatToInt(fSidesToDraw); // total number of sides to draw including revolutions + float fDecayOuter = (fRadiusStartOuter - fRadiusEndOuter)/fSidesToDraw; // change in radius per side + float fDecayInner = (fRadiusStartInner - fRadiusEndInner)/fSidesToDraw; // change in radius per side + float fGrowth = (fHeightStart - fHeightEnd)/fSidesToDraw; // change in height per side + float fDelayPerSide = fTime/fSidesToDraw; + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + float f, fAngle; + float fStarangle = (fRev > 0.0) ? 360.0/IntToFloat(2*nSides) : -360.0/IntToFloat(2*nSides); + object oData; + location lPos; + + oData = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + AssignCommand(oData, ActionDoCommand(SetLocalInt(oData, "storetotal", nSidesToDraw+1))); + + for (i = 0; i <= nSidesToDraw; i++) + { + toggle ^= 1; + f = IntToFloat(i); + fAngle = fStarangle*f + fRotate; + if (!toggle) lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, (fRadiusStartInner - fDecayInner*f)*cos(fAngle), (fRadiusStartInner - fDecayInner*f)*sin(fAngle), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ), fAngle); + else lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, (fRadiusStartOuter - fDecayOuter*f)*cos(fAngle), (fRadiusStartOuter - fDecayOuter*f)*sin(fAngle), fHeightStart - fGrowth*f, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelayPerSide, gao_ActionCreateLocalObject(sTemplate, lPos, "store" + IntToString(i), oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime)); + if (i>0) DelayCommand(f*fDelayPerSide+fWait, gao_ActionApplyLocalBeamEffect(oData, "store" + IntToString(i-1), "store" + IntToString(i), nDurationType, nVFX, fDuration)); + } + + if (fLifetime > 0.0) + { + DestroyObject(oData, fLifetime + fTime + fWait + fWait2 + 5.0); + return OBJECT_INVALID; + } + return oData; +} + +void BeamStarSpring(int nDurationType, int nVFX, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamStarSpring(nDurationType, nVFX, lCenter, fRadiusStartOuter, fRadiusStartInner, fRadiusEndOuter, fRadiusEndInner, fHeightStart, fHeightEnd, nSides, fDuration, sTemplate, fRev, fTime, fWait, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); +} + +void BeamStarSpiral(int nDurationType, int nVFX, location lCenter, float fRadiusStartOuter, float fRadiusStartInner, float fRadiusEndOuter=0.0f, float fRadiusEndInner=0.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamStarSpring(nDurationType, nVFX, lCenter, fRadiusStartOuter, fRadiusStartInner, fRadiusEndOuter, fRadiusEndInner, 0.0, 0.0, nSides, fDuration, sTemplate, fRev, fTime, fWait, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime, "PSC_B_STARSPIRAL"); +} + +object ObjectBeamStar(int nDurationType, int nVFX, location lCenter, float fRadiusOuter, float fRadiusInner, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=1.0f, float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_STAR") +{ + int i, toggle; + if (nSides < 2) nSides = 3; + if (fWait < 1.0) fWait = 1.0; + if (fWait2 < 1.0) fWait2 = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fRev == 0.0) fRev = 1.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fSidesToDraw = (fRev > 0.0) ? fRev*IntToFloat(2*nSides) : -fRev*IntToFloat(2*nSides); + int nSidesToDraw = FloatToInt(fSidesToDraw); // total number of sides to draw including revolutions + float fDelayPerSide = fTime/fSidesToDraw; + vector vCenter = GetPositionFromLocation(lCenter); + vector vPos; + object oArea = GetAreaFromLocation(lCenter); + float f, x, y, fAngle; + float fStarangle = (fRev > 0.0) ? 360.0/IntToFloat(2*nSides) : -360.0/IntToFloat(2*nSides); + object oData; + location lPos; + + oData = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + AssignCommand(oData, ActionDoCommand(SetLocalInt(oData, "storetotal", nSidesToDraw))); + + for (i = 0; i < nSidesToDraw; i++) + { + f = IntToFloat(i); + toggle ^= 1; + fAngle = fStarangle*f + fRotate; + if (!toggle) lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fRadiusInner*cos(fAngle), fRadiusInner*sin(fAngle), 0.0, fDirectionXZ, fDirectionYZ), fAngle); + else lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fRadiusOuter*cos(fAngle), fRadiusOuter*sin(fAngle), 0.0, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelayPerSide, gao_ActionCreateLocalObject(sTemplate, lPos, "store" + IntToString(i), oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime)); + if (i > 0) DelayCommand(f*fDelayPerSide+fWait, gao_ActionApplyLocalBeamEffect(oData, "store" + IntToString(i-1), "store" + IntToString(i), nDurationType, nVFX, fDuration)); + if (fRev == 1.0 && i == nSidesToDraw-1) DelayCommand(fSidesToDraw*fDelayPerSide+fWait, gao_ActionApplyLocalBeamEffect(oData, "store" + IntToString(i), "store0", nDurationType, nVFX, fDuration)); + } + + if (fLifetime > 0.0) + { + DestroyObject(oData, fLifetime + fTime + fWait + fWait2 + 5.0); + return OBJECT_INVALID; + } + return oData; +} + +void BeamStar(int nDurationType, int nVFX, location lCenter, float fRadiusOuter, float fRadiusInner, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=1.0f, float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamStar(nDurationType, nVFX, lCenter, fRadiusOuter, fRadiusInner, nSides, fDuration, sTemplate, fRev, fTime, fWait, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); +} + +object ObjectBeamLineFromCenter(int nDurationType, int nVFX, location lCenter, float fLength, float fDirection=0.0f, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_LINEFROM") +{ + if (fWait2 < 1.0) fWait2 = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + object oArea = GetAreaFromLocation(lCenter); + vector vCenter = GetPositionFromLocation(lCenter); + vector vPos = fLength*AngleToVector(fDirection); + vector vPos2; + float fWait = 1.0; + + vPos2 = gao_RotateVector(vCenter, sAxis, vPos.x, vPos.y, vPos.z, fDirectionXZ, fDirectionYZ); + + object oData = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + AssignCommand(oData, ActionDoCommand(SetLocalInt(oData, "storetotal", 2))); + + gao_ActionCreateLocalObject(sTemplate, lCenter, "store0", oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); + DelayCommand(fTime, gao_ActionCreateLocalObject(sTemplate, Location(oArea, vPos2, fDirection), "store1", oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime)); + + DelayCommand(fTime+1.0, gao_ActionApplyLocalBeamEffect(oData, "store0", "store1", nDurationType, nVFX, fDuration)); + + if (fLifetime > 0.0) + { + DestroyObject(oData, fLifetime + fTime + fWait + fWait2 + 5.0); + return OBJECT_INVALID; + } + return oData; +} + +void BeamLineFromCenter(int nDurationType, int nVFX, location lCenter, float fLength, float fDirection=0.0f, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamLineFromCenter(nDurationType, nVFX, lCenter, fLength, fDirection, fDuration, sTemplate, fTime, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); +} + +object ObjectBeamLineToCenter(int nDurationType, int nVFX, location lCenter, float fLength, float fDirection=0.0f, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_LINETO") +{ + if (fWait2 < 1.0) fWait2 = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + object oArea = GetAreaFromLocation(lCenter); + vector vCenter = GetPositionFromLocation(lCenter); + vector vPos = fLength*AngleToVector(fDirection); + vector vPos2; + float fWait = 1.0; + + vPos2 = gao_RotateVector(vCenter, sAxis, vPos.x, vPos.y, vPos.z, fDirectionXZ, fDirectionYZ); + + object oData = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + AssignCommand(oData, ActionDoCommand(SetLocalInt(oData, "storetotal", 2))); + + DelayCommand(fTime, gao_ActionCreateLocalObject(sTemplate, lCenter, "store0", oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime)); + gao_ActionCreateLocalObject(sTemplate, Location(oArea, vPos2, fDirection), "store1", oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); + + DelayCommand(fTime+1.0, gao_ActionApplyLocalBeamEffect(oData, "store1", "store0", nDurationType, nVFX, fDuration)); + + if (fLifetime > 0.0) + { + DestroyObject(oData, fLifetime + fTime + fWait + fWait2 + 5.0); + return OBJECT_INVALID; + } + return oData; +} + +void BeamLineToCenter(int nDurationType, int nVFX, location lCenter, float fLength, float fDirection=0.0f, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamLineToCenter(nDurationType, nVFX, lCenter, fLength, fDirection, fDuration, sTemplate, fTime, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); +} + +object ObjectBeamPolygonalHemisphere(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_POLYGONALHEMISPHERE") +{ + int i; + if (nSides < 3) nSides = 3; + if (fWait2 < 1.0) fWait2 = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (fRev == 0.0) fRev = 5.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fEta = (fRev > 0.0) ? 360.0/IntToFloat(nSides) : -360.0/IntToFloat(nSides); // angle of segment + float fSidesToDraw = (fRev > 0.0) ? fRev*IntToFloat(nSides) : -fRev*IntToFloat(nSides); // total number of sides to draw including revolutions as float value + int nSidesToDraw = FloatToInt(fSidesToDraw); // total number of sides to draw including revolutions as int value + float fDelayPerSide = fTime/fSidesToDraw; + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + float f, fAngle, fSphereAngle, fSphereRadius; + float fEffectiveHeight = fHeightEnd - fHeightStart; + object oData; + location lPos; + float fWait = 1.0; + + oData = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + AssignCommand(oData, ActionDoCommand(SetLocalInt(oData, "storetotal", nSidesToDraw+1))); + + for (i = 0; i <= nSidesToDraw; i++) + { + f = IntToFloat(i); + fAngle = fEta*f + fRotate; + fSphereAngle = fEta*f*0.25/fRev; + fSphereRadius = fRadiusStart*cos(fSphereAngle) + fRadiusEnd*sin(fSphereAngle); + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fSphereRadius*cos(fAngle), fSphereRadius*sin(fAngle), fEffectiveHeight*sin(fSphereAngle) + fHeightStart, fDirectionXZ, fDirectionYZ), fAngle); + DelayCommand(f*fDelayPerSide, gao_ActionCreateLocalObject(sTemplate, lPos, "store" + IntToString(i), oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime)); + if (i > 0) DelayCommand(f*fDelayPerSide+fWait, gao_ActionApplyLocalBeamEffect(oData, "store" + IntToString(i-1), "store" + IntToString(i), nDurationType, nVFX, fDuration)); + } + + if (fLifetime > 0.0) + { + DestroyObject(oData, fLifetime + fTime + fWait + fWait2 + 5.0); + return OBJECT_INVALID; + } + return oData; +} + +void BeamPolygonalHemisphere(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fRev=5.0f, float fTime=6.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamPolygonalHemisphere(nDurationType, nVFX, lCenter, fRadiusStart, fRadiusEnd, fHeightStart, fHeightEnd, nSides, fDuration, sTemplate, fRev, fTime, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); +} + +object ObjectBeamStellaOctangula(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_STELLAOCTANGULA") +{ + int i; + if (fWait < 1.0) fWait = 1.0; + if (fWait2 < 1.0) fWait2 = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + float fSigma = fRadius*2.0/3.0; + float fEpsilon = fSigma*4.0/3.0/cos(19.47122063449069136924599933997); + float fDelay = fTime/8.0; + fWait += fDelay; + float f, z, fAngle; + location lPos; + string sNumber, sNumber1; + + object oData = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + AssignCommand(oData, ActionDoCommand(SetLocalInt(oData, "storetotal", 8))); + + gao_ActionCreateLocalObject(sTemplate, lCenter, "store7", oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); + + for (i = 0; i < 7; i++) + { + f = IntToFloat(i); + if (i < 3) + { + z = 2.0*fSigma; + fAngle = fRotate + 120.0*f; + } + else if (i < 6) + { + z = fSigma; + fAngle = fRotate + 120.0*f + 60.0; + } + else + { + z = 3.0*fSigma; + fEpsilon = 0.0; + } + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fEpsilon*cos(fAngle), fEpsilon*sin(fAngle), z, fDirectionXZ, fDirectionYZ), fAngle); + sNumber = "store"+IntToString(i); + DelayCommand(fDelay*(f+1.0), gao_ActionCreateLocalObject(sTemplate, lPos, sNumber, oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime)); + } + + for (i=0; i<3; i++) + { + f = IntToFloat(i); + sNumber = "store"+IntToString(i); + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, "store7", sNumber, nDurationType, nVFX, fDuration)); + } + for (i=0; i<6; i++) + { + f = IntToFloat(i+3); + sNumber = "store"+IntToString(i); + if (i==2) sNumber1 = "store0"; + else if (i==5) sNumber1 = "store3"; + else sNumber1 = "store"+IntToString(i+1); + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber, sNumber1, nDurationType, nVFX, fDuration)); + } + for (i=3; i<6; i++) + { + f = IntToFloat(i+6); + sNumber = "store"+IntToString(i); + sNumber1 = "store6"; + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber, sNumber1, nDurationType, nVFX, fDuration)); + } + + if (fLifetime > 0.0) + { + DestroyObject(oData, fLifetime + fTime + fWait + fWait2 + 5.0); + return OBJECT_INVALID; + } + return oData; +} + +void BeamStellaOctangula(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamStellaOctangula(nDurationType, nVFX, lCenter, fRadius, fDuration, sTemplate, fTime, fWait, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); +} + +object ObjectBeamIcosahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_ICOSAHEDRON") +{ + int i; + if (fWait < 1.0) fWait = 1.0; + if (fWait2 < 1.0) fWait2 = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + float fSigma1 = fRadius*0.55278640450004206071816526625413; + float fSigma2 = fRadius*0.89442719099991587856366946749173; + float fEpsilon = fRadius*0.89442719099991587856366946749256; + float fDelay = fTime/30.0; + fWait += fDelay; + float f, z, fAngle; + location lPos; + string sNumber, sNumber1; + + object oData = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + AssignCommand(oData, ActionDoCommand(SetLocalInt(oData, "storetotal", 12))); + + gao_ActionCreateLocalObject(sTemplate, lCenter, "store11", oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); + + for (i = 0; i < 11; i++) + { + f = IntToFloat(i); + if (i < 5) + { + fAngle = fRotate + f*72.0; + z = fSigma1; + } + else if (i < 10) + { + fAngle = fRotate + f*72.0 + 36.0; + z = fSigma1 + fSigma2; + } + else + { + fAngle = fRotate; + z = 2.0*fSigma1 + fSigma2; + fEpsilon = 0.0; + } + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fEpsilon*cos(fAngle), fEpsilon*sin(fAngle), z, fDirectionXZ, fDirectionYZ), fAngle); + sNumber = "store"+IntToString(i); + DelayCommand(fDelay*(f+1.0), gao_ActionCreateLocalObject(sTemplate, lPos, sNumber, oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime)); + } + + for (i=0; i<5; i++) + { + f = IntToFloat(i); + sNumber = "store"+IntToString(i); + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, "store11", sNumber, nDurationType, nVFX, fDuration)); + } + for (i=0; i<10; i++) + { + f = IntToFloat(i+5); + sNumber = "store"+IntToString(i); + if (i==4) sNumber1 = "store0"; + else if (i==9) sNumber1 = "store5"; + else sNumber1 = "store"+IntToString(i+1); + + if (i<5) DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber, sNumber1, nDurationType, nVFX, fDuration)); + else DelayCommand(fDelay*(f+10.0)+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber, sNumber1, nDurationType, nVFX, fDuration)); + } + for (i=0; i<10; i++) + { + f = IntToFloat(i+10); + sNumber = "store"+IntToString(i); + if (i<5) sNumber1 = "store"+IntToString(i+5); + else if (i==9) sNumber1 = "store0"; + else sNumber1 = "store"+IntToString(i-4); + + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber, sNumber1, nDurationType, nVFX, fDuration)); + } + for (i=5; i<10; i++) + { + f = IntToFloat(i+20); + sNumber = "store10"; + sNumber1 = "store"+IntToString(i); + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber, sNumber1, nDurationType, nVFX, fDuration)); + } + + if (fLifetime > 0.0) + { + DestroyObject(oData, fLifetime + fTime + fWait + fWait2 + 5.0); + return OBJECT_INVALID; + } + return oData; +} + +void BeamIcosahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamIcosahedron(nDurationType, nVFX, lCenter, fRadius, fDuration, sTemplate, fTime, fWait, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); +} + +object ObjectBeamDodecahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_DODECAHEDRON") +{ + int i; + if (fWait < 1.0) fWait = 1.0; + if (fWait2 < 1.0) fWait2 = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + float fSigma1 = fRadius*0.205345527708233877044469071674; // Rd - rd + float fSigma2 = fRadius*0.79465447229176612295553092832696; // rd + float fSigma3 = fRadius*0.60706199820668622309539158142001; // Rp + float fEpsilon = fRadius*0.98224694637684602281567027523513; //Rdisplace ~ Zdisplace, golden + float fDelay = fTime/30.0; + fWait += fDelay; + float f, fAngle; + location lPos; + string sNumber1, sNumber2; + + object oData = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + AssignCommand(oData, ActionDoCommand(SetLocalInt(oData, "storetotal", 20))); + + for (i = 0; i < 20; i++) + { + f = IntToFloat(i); + if (i<5) + { + fAngle = fRotate + f*72.0 - 36.0; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fSigma3*cos(fAngle), fSigma3*sin(fAngle), fSigma1, fDirectionXZ, fDirectionYZ), fAngle); + } + else if (i<10) + { + fAngle = fRotate + f*72.0 - 36.0; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fEpsilon*cos(fAngle), fEpsilon*sin(fAngle), fSigma1 + fSigma3, fDirectionXZ, fDirectionYZ), fAngle); + } + else if (i<15) + { + fAngle = fRotate + f*72.0; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fEpsilon*cos(fAngle), fEpsilon*sin(fAngle), fSigma1 + fEpsilon, fDirectionXZ, fDirectionYZ), fAngle); + } + else + { + fAngle = fRotate + f*72.0; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fSigma3*cos(fAngle), fSigma3*sin(fAngle), fSigma1 + 2.0*fSigma2, fDirectionXZ, fDirectionYZ), fAngle); + } + sNumber1 = "store"+IntToString(i); + DelayCommand(fDelay*f, gao_ActionCreateLocalObject(sTemplate, lPos, sNumber1, oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime)); + } + + for (i=0; i<5; i++) + { + f = IntToFloat(i); + sNumber1 = "store" + IntToString(i); + sNumber2 = (i<4) ? "store" + IntToString(i+1) : "store0"; + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber1, sNumber2, nDurationType, nVFX, fDuration)); + } + for (i=0; i<15; i++) + { + f = (i<10) ? IntToFloat(i+5) : IntToFloat(i+10); + sNumber1 = "store" + IntToString(i); + sNumber2 = "store" + IntToString(i+5); + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber1, sNumber2, nDurationType, nVFX, fDuration)); + } + for (i=10; i<15; i++) + { + f = IntToFloat(i+5); + sNumber1 = "store" + IntToString(i); + sNumber2 = (i<14) ? "store" + IntToString(i-4) : "store5"; + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber1, sNumber2, nDurationType, nVFX, fDuration)); + } + for (i=15; i<20; i++) + { + f = IntToFloat(i+10); + sNumber1 = "store" + IntToString(i); + sNumber2 = (i<19) ? "store" + IntToString(i+1) : "store15"; + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber1, sNumber2, nDurationType, nVFX, fDuration)); + } + + if (fLifetime > 0.0) + { + DestroyObject(oData, fLifetime + fTime + fWait + fWait2 + 5.0); + return OBJECT_INVALID; + } + return oData; +} + +void BeamDodecahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamDodecahedron(nDurationType, nVFX, lCenter, fRadius, fDuration, sTemplate, fTime, fWait, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); +} + +object ObjectBeamTriacontahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_TRIACONTAHEDRON") +{ + int i; + if (fWait < 1.0) fWait = 1.0; + if (fWait2 < 1.0) fWait2 = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + float fSigma1 = fRadius*0.55278640450004206071816526625413; + float fSigma2 = fRadius*0.89442719099991587856366946749173; + float fSigma3 = fRadius*0.205345527708233877044469071674; //1 Rd - rd + float fSigma4 = fRadius*0.79465447229176612295553092832696; //2 rd + float fSigma5 = fRadius*0.60706199820668622309539158142001; //3 Rp + float fEpsilon1 = fRadius*0.89442719099991587856366946749256; + float fEpsilon2 = fRadius*0.98224694637684602281567027523513; //Rdisplace ~ Zdisplace, golden + float fDelay = fTime/60.0; + fWait += fDelay; + float f, fAngle; + location lPos; + string sNumber1, sNumber2; + + object oData = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + AssignCommand(oData, ActionDoCommand(SetLocalInt(oData, "storetotal", 32))); + + gao_ActionCreateLocalObject(sTemplate, lCenter, "store31", oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); + + for (i = 0; i < 31; i++) + { + f = IntToFloat(i); + if (i<5) + { + fAngle = fRotate + f*72.0 + 36.0; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fSigma5*cos(fAngle), fSigma5*sin(fAngle), fSigma3, fDirectionXZ, fDirectionYZ), fAngle); + } + else if (i<10) + { + fAngle = fRotate + f*72.0; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fEpsilon1*cos(fAngle), fEpsilon1*sin(fAngle), fSigma1, fDirectionXZ, fDirectionYZ), fAngle); + } + else if (i<15) + { + fAngle = fRotate + f*72.0 + 36.0; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fEpsilon2*cos(fAngle), fEpsilon2*sin(fAngle), fSigma3 + fSigma5, fDirectionXZ, fDirectionYZ), fAngle); + } + else if (i<20) + { + fAngle = fRotate + f*72.0; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fEpsilon2*cos(fAngle), fEpsilon2*sin(fAngle), fSigma3 + fEpsilon2, fDirectionXZ, fDirectionYZ), fAngle); + } + else if (i<25) + { + fAngle = fRotate + f*72.0 + 36.0; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fEpsilon1*cos(fAngle), fEpsilon1*sin(fAngle), fSigma1 + fSigma2, fDirectionXZ, fDirectionYZ), fAngle); + } + else if (i<30) + { + fAngle = fRotate + f*72.0; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fSigma5*cos(fAngle), fSigma5*sin(fAngle), fSigma3 + 2.0*fSigma4, fDirectionXZ, fDirectionYZ), fAngle); + } + else + { + fAngle = fRotate; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, 0.0, 0.0, 2.0*fSigma1 + fSigma2, fDirectionXZ, fDirectionYZ), fAngle); + } + sNumber1 = "store"+IntToString(i); + DelayCommand(fDelay*(f+1.0), gao_ActionCreateLocalObject(sTemplate, lPos, sNumber1, oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime)); + } + + for (i=0; i<15; i++) + { + f = (i<10) ? IntToFloat(i) : IntToFloat(i+5); + sNumber1 = (i<5) ? "store31" : "store" + IntToString(i-5); + sNumber2 = "store" + IntToString(i); + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber1, sNumber2, nDurationType, nVFX, fDuration)); + } + for (i=5; i<15; i++) + { + f = (i<10) ? IntToFloat(i+5) : IntToFloat(i+10) ; + sNumber1 = "store" + IntToString(i); + sNumber2 = (i==5) ? "store4" : (i==14) ? "store5" : (i<10) ? "store" + IntToString(i-6) : "store" + IntToString(i-4); + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber1, sNumber2, nDurationType, nVFX, fDuration)); + } + for (i=5; i<15; i++) + { + f = IntToFloat(i+20); + sNumber1 = "store" + IntToString(i); + sNumber2 = "store" + IntToString(i+10); + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber1, sNumber2, nDurationType, nVFX, fDuration)); + } + for (i=15; i<30; i++) + { + f = (i<20) ? IntToFloat(i+20) : (i<25) ? IntToFloat(i+25) : IntToFloat(i+30); + sNumber1 = "store" + IntToString(i); + sNumber2 = (i<25) ? "store" + IntToString(i+5) : "store30" ; + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber1, sNumber2, nDurationType, nVFX, fDuration)); + } + for (i=20; i<30; i++) + { + f = (i<20) ? IntToFloat(i+20) : IntToFloat(i+25) ; + sNumber1 = "store" + IntToString(i); + sNumber2 = (i==24) ? "store15" : (i==25) ? "store24" : (i<25) ? "store" + IntToString(i-4) : "store" + IntToString(i-6); + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber1, sNumber2, nDurationType, nVFX, fDuration)); + } + + if (fLifetime > 0.0) + { + DestroyObject(oData, fLifetime + fTime + fWait + fWait2 + 5.0); + return OBJECT_INVALID; + } + return oData; +} + +void BeamTriacontahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamTriacontahedron(nDurationType, nVFX, lCenter, fRadius, fDuration, sTemplate, fTime, fWait, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); +} + +object ObjectBeamCuboctahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_CUBOCTAHEDRON") +{ + int i; + if (fWait < 1.0) fWait = 1.0; + if (fWait2 < 1.0) fWait2 = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + float fSigma = fRadius*0.70710678118654752440084436210485; + float fEpsilon = fRadius - fSigma ; + float fDelay = fTime/24.0; + fWait += fDelay; + float f, fAngle; + location lPos; + string sNumber1, sNumber2; + + object oData = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + AssignCommand(oData, ActionDoCommand(SetLocalInt(oData, "storetotal", 12))); + + for (i = 0; i < 12; i++) + { + f = IntToFloat(i); + if (i<4) + { + fAngle = fRotate + f*90.0; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fSigma*cos(fAngle), fSigma*sin(fAngle), fEpsilon, fDirectionXZ, fDirectionYZ), fAngle); + } + else if (i<8) + { + fAngle = fRotate + f*90.0 + 45.0; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fRadius*cos(fAngle), fRadius*sin(fAngle), fRadius, fDirectionXZ, fDirectionYZ), fAngle); + } + else + { + fAngle = fRotate + f*90.0; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fSigma*cos(fAngle), fSigma*sin(fAngle), fRadius + fSigma, fDirectionXZ, fDirectionYZ), fAngle); + } + sNumber1 = "store"+IntToString(i); + DelayCommand(fDelay*f, gao_ActionCreateLocalObject(sTemplate, lPos, sNumber1, oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime)); + } + + for (i=0; i<4; i++) + { + f = IntToFloat(i); + sNumber1 = "store" + IntToString(i); + sNumber2 = (i<3) ? "store" + IntToString(i+1) : "store0"; + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber1, sNumber2, nDurationType, nVFX, fDuration)); + } + for (i=0; i<8; i++) + { + f = (i<4) ? IntToFloat(i+4) : IntToFloat(i+8) ; + sNumber1 = "store" + IntToString(i); + sNumber2 = "store" + IntToString(i+4); + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber1, sNumber2, nDurationType, nVFX, fDuration)); + } + for (i=0; i<8; i++) + { + f = (i<4) ? IntToFloat(i+8) : IntToFloat(i+12); + sNumber1 = "store" + IntToString(i); + sNumber2 = (i==0) ? "store7" : (i<4) ? "store" + IntToString(i+3) : (i==7) ? "store8" : "store" + IntToString(i+5); + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber1, sNumber2, nDurationType, nVFX, fDuration)); + } + for (i=8; i<12; i++) + { + f = IntToFloat(i+12); + sNumber1 = "store" + IntToString(i); + sNumber2 = (i<11) ? "store" + IntToString(i+1) : "store8"; + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber1, sNumber2, nDurationType, nVFX, fDuration)); + } + + if (fLifetime > 0.0) + { + DestroyObject(oData, fLifetime + fTime + fWait + fWait2 + 5.0); + return OBJECT_INVALID; + } + return oData; +} + +void BeamCuboctahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamCuboctahedron(nDurationType, nVFX, lCenter, fRadius, fDuration, sTemplate, fTime, fWait, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); +} + +object ObjectBeamSmallRhombicuboctahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_SMALLRHOMBICUBOCTAHEDRON") +{ + int i; + if (fWait < 1.0) fWait = 1.0; + if (fWait2 < 1.0) fWait2 = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + float fSigma1 = fRadius*0.50544946512442356216037311029756; + float fSigma2 = fRadius*0.93394883109446475957738040414503; + float fEpsilon1 = fRadius*0.13714379053898318189115991804927; + float fEpsilon2 = fRadius*0.71481348867318651189693394330755; + float fDelay = fTime/48.0; + fWait += fDelay; + float f, z, fAngle; + location lPos; + string sNumber1, sNumber2; + + object oData = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + AssignCommand(oData, ActionDoCommand(SetLocalInt(oData, "storetotal", 24))); + + for (i = 0; i < 24; i++) + { + f = IntToFloat(i); + if (i<4) + { + fAngle = fRotate + f*90.0; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fSigma1*cos(fAngle), fSigma1*sin(fAngle), fEpsilon1, fDirectionXZ, fDirectionYZ), fAngle); + } + else if (i<20) + { + fAngle = fRotate + 27.5 + (f-4.0)*45.0; + z = (i<12) ? fEpsilon1 + fSigma1 : fEpsilon1 + fEpsilon2 + fSigma1; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fSigma2*cos(fAngle), fSigma2*sin(fAngle), z, fDirectionXZ, fDirectionYZ), fAngle); + } + else + { + fAngle = fRotate + f*90.0; + lPos = Location(oArea, gao_RotateVector(vCenter, sAxis, fSigma1*cos(fAngle), fSigma1*sin(fAngle), fEpsilon1 + 2.0*fSigma1 + fEpsilon2, fDirectionXZ, fDirectionYZ), fAngle); + } + sNumber1 = "store"+IntToString(i); + DelayCommand(fDelay*f, gao_ActionCreateLocalObject(sTemplate, lPos, sNumber1, oData, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime)); + } + + for (i=0; i<24; i++) + { + f = (i<4) ? IntToFloat(i) : (i<12) ? IntToFloat(i+8) : (i<20) ? IntToFloat(i+16) : IntToFloat(i+24) ; + sNumber1 = "store" + IntToString(i); + sNumber2 = (i==3) ? "store0" : (i==11) ? "store4" : (i==19) ? "store12" : (i==23) ? "store20" : "store" + IntToString(i+1) ; + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber1, sNumber2, nDurationType, nVFX, fDuration)); + } + for (i=0; i<20; i++) + { + f = (i<4) ? IntToFloat(i*2+4) : (i<12) ? IntToFloat(i+16) : IntToFloat(i+24); + sNumber1 = "store" + IntToString(i); + sNumber2 = (i<4) ? "store" + IntToString(i*2+4) : (i<12) ? "store" + IntToString(i+8) : (i==13||i== 15||i==17) ? "store" + IntToString(21+(i-13)/2) : (i==19) ? "store20" : (i==18) ? "store23" : "store" + IntToString(19+(i-10)/2); + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber1, sNumber2, nDurationType, nVFX, fDuration)); + } + for (i=0; i<4; i++) + { + f = (i==0) ? 11.0 : IntToFloat((i-1)*2+5); + sNumber1 = "store" + IntToString(i); + sNumber2 = (i==0) ? "store11" : "store" + IntToString(i*2+3); + DelayCommand(fDelay*f+fWait, gao_ActionApplyLocalBeamEffect(oData, sNumber1, sNumber2, nDurationType, nVFX, fDuration)); + } + + if (fLifetime > 0.0) + { + DestroyObject(oData, fLifetime + fTime + fWait + fWait2 + 5.0); + return OBJECT_INVALID; + } + return oData; +} + +void BeamSmallRhombicuboctahedron(int nDurationType, int nVFX, location lCenter, float fRadius, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamSmallRhombicuboctahedron(nDurationType, nVFX, lCenter, fRadius, fDuration, sTemplate, fTime, fWait, fRotate, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); +} + +object ObjectBeamGengon(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, float fTwist=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f, string sTag="PSC_B_GENGON") +{ + int i; + if (nSides < 3) nSides = 3; + if (fWait < 1.0) fWait = 1.0; + if (fWait2 < 1.0) fWait2 = 1.0; + if (fTime < 0.0) fTime = 6.0; + if (fLifetime < 0.0) fLifetime = 0.0; + if (sTemplate == "") sTemplate = "prc_invisobj"; + float fEta = 360.0/IntToFloat(nSides); // angle of segment + float fDelay = fTime/IntToFloat(3*nSides); // delay per edge + vector vCenter = GetPositionFromLocation(lCenter); + object oArea = GetAreaFromLocation(lCenter); + float f, fAngle; + object oData; + location lPos; + fTwist += fRotate; + fWait += fDelay; + string sNumber1, sNumber2; + + oData = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", lCenter, FALSE, sTag); + AssignCommand(oData, ActionDoCommand(SetLocalInt(oData, "storetotal", 2*nSides))); + + for (i = 0; i < 2*nSides; i++) + { + f = IntToFloat(i); + if (i 0.0) + { + DestroyObject(oData, fLifetime + fTime + fWait + fWait2 + 5.0); + return OBJECT_INVALID; + } + return oData; +} + +void BeamGengon(int nDurationType, int nVFX, location lCenter, float fRadiusStart, float fRadiusEnd=0.0f, float fHeightStart=0.0f, float fHeightEnd=5.0f, int nSides=3, float fDuration=0.0f, string sTemplate="", float fTime=6.0f, float fWait=1.0f, float fRotate=0.0f, float fTwist=0.0f, string sAxis="z", float fDirectionXZ = 0.0f, float fDirectionYZ = 0.0f, int nDurationType2=-1, int nVFX2=-1, float fDuration2=0.0f, float fWait2=1.0f, float fLifetime=0.0f) +{ + ObjectBeamGengon(nDurationType, nVFX, lCenter, fRadiusStart, fRadiusEnd, fHeightStart, fHeightEnd, nSides, fDuration, sTemplate, fTime, fWait, fRotate, fTwist, sAxis, fDirectionXZ, fDirectionYZ, nDurationType2, nVFX2, fDuration2, fWait2, fLifetime); +} diff --git a/src/include/inc_draw_prc.nss b/src/include/inc_draw_prc.nss new file mode 100644 index 0000000..b1823c1 --- /dev/null +++ b/src/include/inc_draw_prc.nss @@ -0,0 +1,65 @@ +//:://///////////////////////////////////////////// +//:: Drawing include - PRC-created functions +//:: inc_draw_prc +//:://///////////////////////////////////////////// +/** @file + PRC extensions and additions to gaoneng's + Pentagrams & Summoning Circles system. + + @author Ornedan + @date Created - 2005.12.05 +*/ +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * An attempt at conical VFX. Draws a bunch from the center towards the edge + * of a quarter-circle. + * + * @param nLines Number of lines to draw + * @param fLength Length of the cone + * @param lOrigin The origin of the cone + * @param fDirection The direction of the cone + * + * @param nDurationType The duration type of the applied VFX + * @param nVFX Visual effect to use + * @param fDuration Duration of the visualeffects, if temporary + * @param nFrequency How many VFX per line + * @param fTime How long it takes to draw the whole thing + */ +void DrawLinesInACone(int nLines, float fLength, location lOrigin, float fDirection, + int nDurationType, int nVFX, float fDuration, int nFrequency, float fTime); + + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "inc_draw" + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +void DrawLinesInACone(int nLines, float fLength, location lOrigin, float fDirection, + int nDurationType, int nVFX, float fDuration, int nFrequency, float fTime) +{ + float fTheta = 90.0f / nLines; + vector vCenter = GetPositionFromLocation(lOrigin); + object oArea = GetAreaFromLocation(lOrigin); + + int i; + float f, fAngle; + vector vTarget; + for(i = 0; i < nLines; i++) + { + f = IntToFloat(i); + fAngle = fTheta * f + (fDirection - 45.0); + vTarget = vCenter + Vector(cos(fAngle), sin(fAngle), 0.0f); + DrawLineFromVectorToVector(nDurationType, nVFX, oArea, vCenter, vTarget, fDuration, nFrequency, fTime); + } +} diff --git a/src/include/inc_draw_text.nss b/src/include/inc_draw_text.nss new file mode 100644 index 0000000..6464d78 --- /dev/null +++ b/src/include/inc_draw_text.nss @@ -0,0 +1,366 @@ +/* + ============================================= + PENTAGRAMS & SUMMONING CIRCLES - + BEAM-STYLE TEXT + ============================================= + gaoneng January 17, 2005 + #include "inc_draw_text" + + last updated on April 25, 2005 + + Extension library for PENTAGRAMS & SUMMONING + CIRCLES. Used for creating text display. + ============================================= +*/ + +/* + ================================== + FUNCTIONS DECLARATIONS + ================================== +*/ +// Assigns oData to display sMessage +// ================================= +// sMessage = message to display +// oData = target group +// fSpeed = second per letter +// fLifetime = seconds text lasts +// fFontHeight = height of font in meters +// fFontWidth = width of font in meters +// nVFX = VFX_BEAM_* constant +void TextMessage(string sMessage, object oData, float fSpeed=2.0f, float fLifetime=0.0f, float fFontHeight=0.5f, float fFontWidth=0.25f, int nVFX=VFX_BEAM_FIRE_W_SILENT); + +/* + ================================== + PRIVATE FUNCTIONS + ================================== +*/ + +// void gao_BeamLetter(object oNode, string sAlphabet, int nVFX, int nDurationType=2, float fFlashRate=0.0f); +// void gao_CreateTextGrid(object oNode, float fFontHeight, float fFontWidth); +// void gao_AlphabetBlink(object oNode, string sAlphabet, int nVFX, float fFlashRate, float fLifetime); +// void gao_AlphabetPermanent(object oNode, string sAlphabet, int nVFX, float fLifetime); +// void gao_AlphabetScroll(object oNode, string sMessage, int nVFX, float fFlashRate, float fLifetime=0.0f); +// string gao_ReverseMessage(string sMessage); + + +/* + ================================== + FUNCTIONS IMPLEMENTATIONS + ================================== +*/ +void gao_CreateTextGrid(object oNode, float fFontHeight, float fFontWidth, object oData, float fLifetime) +{ + object oArea = GetArea(oNode); + vector vPos = GetPosition(oNode); + float fFacing = GetFacing(oNode); + vector vFacing = AngleToVector(fFacing + 90.0); + vector vLedNode; + object oLedNode; + fFontWidth /= 2.0; + fFontHeight /= 2.0; + + int i, j, nTotal; + float f, g; + + for (i=0; i<3; i++) + { + f = IntToFloat(i); + + for (j=0; j<3; j++) + { + g = IntToFloat(j-1); + vLedNode = vPos - fFontWidth*g*vFacing + f*Vector(0.0, 0.0, fFontHeight); + oLedNode = CreateObject(OBJECT_TYPE_PLACEABLE, "prc_invisobj", Location(oArea, vLedNode, fFacing), FALSE, "PSC_X_TEXTMESSAGE"); + AssignCommand(oLedNode, ActionDoCommand(SetLocalObject(oNode, "led" + IntToString(j) + IntToString(i), oLedNode))); + if (fLifetime == 0.0) + { + nTotal = GetLocalInt(oData, "storetotal"); + AssignCommand(oLedNode, ActionDoCommand(SetLocalObject(oData, "store" + IntToString(nTotal), oLedNode))); + SetLocalInt(oData, "storetotal", nTotal + 1); + } + } + } +} + +void gao_DestroyTextGrid(object oNode) +{ + DestroyObject(GetLocalObject(oNode, "led00")); + DestroyObject(GetLocalObject(oNode, "led10")); + DestroyObject(GetLocalObject(oNode, "led20")); + DestroyObject(GetLocalObject(oNode, "led01")); + DestroyObject(GetLocalObject(oNode, "led11")); + DestroyObject(GetLocalObject(oNode, "led21")); + DestroyObject(GetLocalObject(oNode, "led02")); + DestroyObject(GetLocalObject(oNode, "led12")); + DestroyObject(GetLocalObject(oNode, "led22")); +} + +void gao_BeamLetter(object oNode, string sAlphabet, int nVFX) +{ + object oNode1 = GetLocalObject(oNode, "led00"); + object oNode2 = GetLocalObject(oNode, "led10"); + object oNode3 = GetLocalObject(oNode, "led20"); + object oNode4 = GetLocalObject(oNode, "led01"); + object oNode5 = GetLocalObject(oNode, "led11"); + object oNode6 = GetLocalObject(oNode, "led21"); + object oNode7 = GetLocalObject(oNode, "led02"); + object oNode8 = GetLocalObject(oNode, "led12"); + object oNode9 = GetLocalObject(oNode, "led22"); + + if (sAlphabet == "a") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode6); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "b") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode6); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode8); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode5, BODY_NODE_CHEST), oNode8); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode6); + } + else if (sAlphabet == "c") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "d") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode2); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode2, BODY_NODE_CHEST), oNode6); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode8, BODY_NODE_CHEST), oNode6); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode8); + } + else if (sAlphabet == "e") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode5); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "f") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode5); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "g") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode6); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode5, BODY_NODE_CHEST), oNode6); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "h") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode6); + } + else if (sAlphabet == "i") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode2, BODY_NODE_CHEST), oNode8); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "j") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode4); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "k") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode5); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode5); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode5, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "l") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + } + else if (sAlphabet == "m") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode5, BODY_NODE_CHEST), oNode8); + } + else if (sAlphabet == "n") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "o" || sAlphabet == "0") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "p") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode6); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode6, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "q") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode5, BODY_NODE_CHEST), oNode3); + } + else if (sAlphabet == "r") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode6); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode6, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode5); + } + else if (sAlphabet == "s" || sAlphabet == "5") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode6); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode6); + } + else if (sAlphabet == "t") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode2, BODY_NODE_CHEST), oNode8); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "u") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "v") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode2, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode2, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "w") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode2, BODY_NODE_CHEST), oNode5); + } + else if (sAlphabet == "x") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode7); + } + else if (sAlphabet == "y") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode5, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode5, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode2, BODY_NODE_CHEST), oNode5); + } + else if (sAlphabet == "z") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "1") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "2") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode6); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode4); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode6, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "3") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode6); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "4") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode6); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "6") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode6); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode6); + } + else if (sAlphabet == "7") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "8") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode6); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + } + else if (sAlphabet == "9") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode1, BODY_NODE_CHEST), oNode3); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode6); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode7, BODY_NODE_CHEST), oNode9); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode4, BODY_NODE_CHEST), oNode7); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(nVFX, oNode3, BODY_NODE_CHEST), oNode9); + } + else gao_DestroyTextGrid(oNode); +} + +void gao_AlphabetPermanent(object oNode, string sAlphabet, int nVFX, float fLifetime) +{ + gao_BeamLetter(oNode, sAlphabet, nVFX); + if (fLifetime > 0.0) DelayCommand(fLifetime, gao_DestroyTextGrid(oNode)); +} + +void TextMessage(string sMessage, object oData=OBJECT_SELF, float fSpeed=2.0f, float fLifetime=0.0f, float fFontHeight=0.5f, float fFontWidth=0.25f, int nVFX=VFX_BEAM_FIRE_W_SILENT) +{ + int i; + object oNode; + + sMessage = GetStringLowerCase(sMessage); + int nLength = GetStringLength(sMessage); + int nData = GetLocalInt(oData, "storetotal"); + + if (nLength > nData) nLength = nData; + + for (i=0; i-1; i--) + { + DelayCommand(fBreak*IntToFloat(j), ExecuteScript(sScript, GetLocalObject(oData, "store" + IntToString(i)))); + j++; + } + } + else + { + for (i=0; i-1; i--) + { + DelayCommand(fDelay + fBreak*IntToFloat(j), DestroyObject(GetLocalObject(oData, "store" + IntToString(i)))); + j++; + } + } + else + { + for (i=0; i-1; i--) + { + DelayCommand(fBreak*IntToFloat(j), ApplyEffectToObject(nDurationType, eEffect, GetLocalObject(oData, "store" + IntToString(i)), fDuration)); + j++; + } + } + else + { + for (i=0; i-1; i--) + { + oNode = GetLocalObject(oData, "store" + IntToString(i)); + DelayCommand(fBreak*IntToFloat(j), AssignCommand(oNode, SetFacing(GetFacing(oNode) + fDirection))); + j++; + } + } + else + { + for (i=nTotal-1; i>-1; i--) + { + DelayCommand(fBreak*IntToFloat(j), AssignCommand(GetLocalObject(oData, "store" + IntToString(i)), SetFacing(fDirection))); + j++; + } + } + } + else + { + if (bRelative) + { + object oNode; + for (i=0; i-1; i--) + { + DelayCommand(fBreak*IntToFloat(j), AssignCommand(GetLocalObject(oData, "store" + IntToString(i)), SetFacingPoint(vTarget))); + j++; + } + } + else + { + for (i=0; i-1; i--) + { + DelayCommand(fBreak*IntToFloat(j), AssignCommand(GetLocalObject(oData, "store" + IntToString(i)), PlayAnimation(nAnimation, fSpeed))); + j++; + } + } + else + { + for (i=0; i 0) SetLocalInt(oPC, "DynConv_Stack", nStack - 1); + else DeleteLocalInt(oPC, "DynConv_Stack"); + + // Store the date in the conversation variables + SetLocalInt(oPC, DYNCONV_STAGE, nStage); + SetLocalInt(oPC, "DynConv_AllowExit", nAllowExit); + SetLocalInt(oPC, "DynConv_AllowAbort", nAllowAbort); + SetLocalString(oPC, DYNCONV_SCRIPT, sScript); + + // Restart the conversation + AssignCommand(oPC, ClearAllActions(TRUE)); + AssignCommand(oPC, ActionStartConversation(oPC, "dyncov_base", TRUE, FALSE)); + } + // Fully exited the conversation. Clean up + else + { + if(DEBUG) DoDebug("_DynConvInternal_ExitedConvo(): Fully exited conversation"); + array_delete(oPC, "ChoiceTokens"); + array_delete(oPC, "ChoiceValues"); + array_delete(oPC, "StagesSetup"); + + DeleteLocalInt(oPC, "ChoiceOffset"); + DeleteLocalInt(oPC, "DynConv_AllowExit"); + DeleteLocalInt(oPC, "DynConv_AllowAbort"); + + DeleteLocalInt(oPC, DYNCONV_VARIABLE); + DeleteLocalInt(oPC, DYNCONV_STAGE); + DeleteLocalString(oPC, DYNCONV_SCRIPT); + DeleteLocalString(oPC, "DynConv_HeaderText"); + int i; + for(i = DYNCONV_MIN_TOKEN; i <= DYNCONV_MAX_TOKEN; i++) + DeleteLocalString(oPC, GetTokenIDString(i)); + } + } +} + +void _DynConvInternal_RunScript(object oPC, int nDynConvVar) +{ + if(!GetLocalInt(oPC, "DynConv_RestartMarker")) + { + _DynConvInternal_PreScript(oPC); + string sScript = GetLocalString(oPC, DYNCONV_SCRIPT); + SetLocalInt(oPC, DYNCONV_VARIABLE, nDynConvVar); + ExecuteScript(sScript, OBJECT_SELF); + _DynConvInternal_PostScript(oPC); + } + else + { + SetupTokens(oPC); + DeleteLocalInt(oPC, "DynConv_RestartMarker"); + } +} + +void _DynConvInternal_PreScript(object oPC) +{ + // Create the choice arrays + array_create(oPC, "ChoiceTokens"); + array_create(oPC, "ChoiceValues"); +} + +void _DynConvInternal_PostScript(object oPC) +{ + // If debugging is active, check that the conversations have at least one response node + // when exiting is off + if(DEBUG) + { + if(GetLocalInt(oPC, DYNCONV_VARIABLE) == DYNCONV_SETUP_STAGE && + GetLocalInt(oPC, "DynConv_AllowExit") == DYNCONV_EXIT_NOT_ALLOWED && + array_get_size(oPC, "ChoiceTokens") == 0 + ) + { + DoDebug("Dynconvo ERROR: No response tokens set up and exiting not allowed!"); + } + } +} + +object _DynConvInternal_ResolvePC(object oPC) +{ + return oPC == OBJECT_INVALID ? GetPCSpeaker() : oPC; // If no valid PC reference was passed, get it via GetPCSpeaker +} + +void SetStage(int nNewStage, object oPC = OBJECT_INVALID) +{ + oPC = _DynConvInternal_ResolvePC(oPC); + // No need to act if the stage wasn't changed + if(nNewStage != GetStage(oPC)) + { + + SetLocalInt(oPC, DYNCONV_STAGE, nNewStage); + + // Clear the choice data + array_delete(oPC, "ChoiceTokens"); + array_delete(oPC, "ChoiceValues"); + DeleteLocalInt(oPC, "ChoiceOffset"); + } +} + +int GetStage(object oPC = OBJECT_INVALID) +{ + oPC = _DynConvInternal_ResolvePC(oPC); + return GetLocalInt(oPC, DYNCONV_STAGE); +} + +int GetChoice(object oPC = OBJECT_INVALID) +{ + oPC = _DynConvInternal_ResolvePC(oPC); + return array_get_int(oPC, "ChoiceValues", GetLocalInt(oPC, DYNCONV_VARIABLE) // Number of choice + - 1 // Which begins at index 1 instead of the index 0 we need here + + GetLocalInt(oPC, "ChoiceOffset")); +} + +string GetChoiceText(object oPC = OBJECT_INVALID) +{ + oPC = _DynConvInternal_ResolvePC(oPC); + return array_get_string(oPC, "ChoiceTokens", GetLocalInt(oPC, DYNCONV_VARIABLE) // Number of choice + - 1 // Which begins at index 1 instead of the index 0 we need here + + GetLocalInt(oPC, "ChoiceOffset")); +} + +void StartDynamicConversation(string sConversationScript, object oPC, + int nAllowExit = DYNCONV_EXIT_ALLOWED_SHOW_CHOICE, int bAllowAbort = FALSE, + int bForceStart = FALSE, object oConverseWith = OBJECT_INVALID) +{ + if(IsInConversation(oPC)) + { + if(DEBUG) DoDebug("StartDynamicConversation(): Aborting--already in conversation"); + return; + } + + if(DEBUG) DoDebug("StartDynamicConversation(): Starting new dynamic conversation, parameters:\n" + + "sConversationScript = '" + sConversationScript + "'\n" + + "oPC = " + DebugObject2Str(oPC) + "\n" + + "nAllowExit = " + (nAllowExit == DYNCONV_EXIT_NOT_ALLOWED ? "DYNCONV_EXIT_NOT_ALLOWED" : + nAllowExit == DYNCONV_EXIT_FORCE_EXIT ? "DYNCONV_EXIT_FORCE_EXIT" : + nAllowExit == DYNCONV_EXIT_ALLOWED_SHOW_CHOICE ? "DYNCONV_EXIT_ALLOWED_SHOW_CHOICE" : + "ERROR: Unsupported value: " + IntToString(nAllowExit) + ) + "\n" + + "bAllowAbort = " + DebugBool2String(bAllowAbort) + "\n" + + "bForceStart = " + DebugBool2String(bForceStart) + "\n" + + "oConverseWith = " + DebugObject2Str(oConverseWith) + "\n" + ); + // By default, the PC converses with itself + oConverseWith = oConverseWith == OBJECT_INVALID ? oPC : oConverseWith; + if(DEBUG) if(!GetIsObjectValid(oConverseWith)) DoDebug("StartDynamicConversation(): ERROR: oConverseWith is not valid!"); + + // Store the exit control variables + SetLocalInt(oPC, "DynConv_AllowExit", nAllowExit); + SetLocalInt(oPC, "DynConv_AllowAbort", bAllowAbort); + + // Initiate conversation + if(bForceStart) AssignCommand(oPC, ClearAllActions(TRUE)); + SetLocalString(oPC, DYNCONV_SCRIPT, sConversationScript); + AssignCommand(oPC, ActionStartConversation(oConverseWith, "dyncov_base", TRUE, FALSE)); +} + +void BranchDynamicConversation(string sConversationToEnter, int nStageToReturnTo, + int nAllowExit = DYNCONV_EXIT_ALLOWED_SHOW_CHOICE, int bAllowAbort = FALSE, + object oPC = OBJECT_INVALID) +{ + if(DEBUG) DoDebug("BranchDynamicConversation(): Entering another dynamic conversation, parameters:\n" + + "sConversationToEnter = '" + sConversationToEnter + "'\n" + + "nStageToReturnTo = " + IntToString(nStageToReturnTo) + "\n" + + "nAllowExit = " + (nAllowExit == DYNCONV_EXIT_NOT_ALLOWED ? "DYNCONV_EXIT_NOT_ALLOWED" : + nAllowExit == DYNCONV_EXIT_FORCE_EXIT ? "DYNCONV_EXIT_FORCE_EXIT" : + nAllowExit == DYNCONV_EXIT_ALLOWED_SHOW_CHOICE ? "DYNCONV_EXIT_ALLOWED_SHOW_CHOICE" : + "ERROR: Unsupported value: " + IntToString(nAllowExit) + ) + "\n" + + "bAllowAbort = " + DebugBool2String(bAllowAbort) + "\n" + + "oPC = " + DebugObject2Str(oPC) + "\n " + ); + oPC = _DynConvInternal_ResolvePC(oPC); + // Get current stack level + int nStack = GetLocalInt(oPC, "DynConv_Stack") + 1; + + // Push the return data onto the stack + SetLocalInt(oPC, "DynConv_Stack_ReturnToStage_" + IntToString(nStack), nStageToReturnTo); + SetLocalInt(oPC, "DynConv_Stack_AllowExit_" + IntToString(nStack), + GetLocalInt(oPC, "DynConv_AllowExit")); + SetLocalInt(oPC, "DynConv_Stack_AllowAbort_" + IntToString(nStack), + GetLocalInt(oPC, "DynConv_AllowAbort")); + SetLocalString(oPC, "DynConv_Stack_Script_" + IntToString(nStack), + GetLocalString(oPC, DYNCONV_SCRIPT)); + SetLocalInt(oPC, "DynConv_Stack", nStack); + + // Clean the current conversation data + array_delete(oPC, "ChoiceTokens"); + array_delete(oPC, "ChoiceValues"); + array_delete(oPC, "StagesSetup"); + DeleteLocalInt(oPC, "ChoiceOffset"); + DeleteLocalInt(oPC, DYNCONV_STAGE); + + // Set the new conversation as active + SetLocalString(oPC, DYNCONV_SCRIPT, sConversationToEnter); + SetLocalInt(oPC, "DynConv_AllowExit", nAllowExit); + SetLocalInt(oPC, "DynConv_AllowAbort", bAllowAbort); +} + +/// @todo Rename to SetExitable +void AllowExit(int nNewValue = DYNCONV_EXIT_ALLOWED_SHOW_CHOICE, int bChangeExitTokenText = TRUE, object oPC = OBJECT_INVALID) +{ + if(DEBUG) DoDebug("AllowExit():\n" + + "nNewValue = " + (nNewValue == DYNCONV_EXIT_NOT_ALLOWED ? "DYNCONV_EXIT_NOT_ALLOWED" : + nNewValue == DYNCONV_EXIT_FORCE_EXIT ? "DYNCONV_EXIT_FORCE_EXIT" : + nNewValue == DYNCONV_EXIT_ALLOWED_SHOW_CHOICE ? "DYNCONV_EXIT_ALLOWED_SHOW_CHOICE" : + "ERROR: Unsupported value: " + IntToString(nNewValue) + ) + "\n" + + "bChangeExitTokenText = " + DebugBool2String(bChangeExitTokenText) + "\n" + + "oPC = " + DebugObject2Str(_DynConvInternal_ResolvePC(oPC)) + "\n" + ); + + SetLocalInt(_DynConvInternal_ResolvePC(oPC), "DynConv_AllowExit", nNewValue); + if(bChangeExitTokenText) + SetCustomToken(DYNCONV_TOKEN_EXIT, GetStringByStrRef(DYNCONV_STRREF_EXIT_CONVO)); +} + +/// @todo Replace with SetAbortable(int bAllow, object oPC = OBJECT_INVALID) +void AllowAbort(object oPC = OBJECT_INVALID) +{ + SetLocalInt(_DynConvInternal_ResolvePC(oPC), "DynConv_AllowAbort", TRUE); +} + +int GetIsStageSetUp(int nStage, object oPC = OBJECT_INVALID) +{ + oPC = _DynConvInternal_ResolvePC(oPC); + + if(!array_exists(oPC, "StagesSetup")) + return FALSE; + return array_get_int(oPC, "StagesSetup", nStage); +} + +void MarkStageSetUp(int nStage, object oPC = OBJECT_INVALID) +{ + oPC = _DynConvInternal_ResolvePC(oPC); + + if(!array_exists(oPC, "StagesSetup")) + array_create(oPC, "StagesSetup"); + array_set_int(oPC, "StagesSetup", nStage, TRUE); +} + +void MarkStageNotSetUp(int nStage, object oPC = OBJECT_INVALID) +{ + oPC = _DynConvInternal_ResolvePC(oPC); + + if(!array_exists(oPC, "StagesSetup")) + return; + array_set_int(oPC, "StagesSetup", nStage, FALSE); +} + +void ClearCurrentStage(object oPC = OBJECT_INVALID) +{ + oPC = _DynConvInternal_ResolvePC(oPC); + + // Clear the choice data + array_delete(oPC, "ChoiceTokens"); + array_delete(oPC, "ChoiceValues"); + DeleteLocalInt(oPC, "ChoiceOffset"); + + MarkStageNotSetUp(GetStage(oPC), oPC); +} diff --git a/src/include/inc_ecl.nss b/src/include/inc_ecl.nss new file mode 100644 index 0000000..541f9b9 --- /dev/null +++ b/src/include/inc_ecl.nss @@ -0,0 +1,371 @@ +/** @file + * ECL handling. + * + * @author Primogenitor + * + * @todo Primo, could you document this one? More details to header and comment function prototypes + */ + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +// returns oTarget's LA value, including their race and template(s) LA +int GetTotalLA(object oTarget); + +// returns oTarget's level adjusted by their LA +int GetECL(object oTarget); +void GiveXPReward(object oCreature, int nXP, int bIsPC = TRUE); +void GiveXPRewardToParty(object oKiller, object oDead, int nCR = 0); + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + +//#include "inc_utility" +//#include "prc_inc_template" +#include "inc_npc" + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int GetTotalLA(object oTarget) +{ + int nLA; + int nRace = GetRacialType(oTarget); + if(GetPRCSwitch(PRC_XP_USE_SIMPLE_LA)) + nLA += StringToInt(Get2DACache("ECL", "LA", nRace)); + if(GetPRCSwitch(PRC_XP_INCLUDE_RACIAL_HIT_DIE_IN_LA)) + nLA += StringToInt(Get2DACache("ECL", "RaceHD", nRace)); + nLA += GetPersistantLocalInt(oTarget, "template_LA"); + nLA -= GetPersistantLocalInt(oTarget, "LA_Buyoff"); + return nLA; +} + +int GetECL(object oTarget) +{ + int nLevel; + // we need to use a derivation of the base xp formular to compute the + // pc level based on total XP. + // + // base XP formula (x = pc level, t = total xp): + // + // t = x * (x-1) * 500 + // + // need to use some base math.. + // transform for pq formula use (remove brackets with x inside and zero right side) + // + // x^2 - x - (t / 500) = 0 + // + // use pq formula to solve it [ x^2 + px + q = 0, p = -1, q = -(t/500) ]... + // + // that's our new formula to get the level based on total xp: + // level = 0.5 + sqrt(0.25 + (t/500)) + // + if(GetPRCSwitch(PRC_ECL_USES_XP_NOT_HD) && GetIsPC(oTarget)) + nLevel = FloatToInt(0.5 + sqrt(0.25 + ( IntToFloat(GetXP(oTarget)) / 500 ))); + else + nLevel = GetHitDice(oTarget); + nLevel += GetTotalLA(oTarget); + return nLevel; +} + +int CheckDistance(object oDead, object oTest) +{ + if(GetPRCSwitch(PRC_XP_MUST_BE_IN_AREA)) + { + if(GetArea(oDead) != GetArea(oTest)) + return FALSE; + if(GetDistanceBetween(oDead, oTest) > IntToFloat(GetPRCSwitch(PRC_XP_MAX_PHYSICAL_DISTANCE))) + return FALSE; + } + return TRUE; +} + +float GetGroupBonusModifier(int nPartySize) +{ + return 1 + ((nPartySize-1) * IntToFloat(GetPRCSwitch(PRC_XP_GROUP_BONUS))/100.0); +} + +void GiveXPRewardToParty(object oKiller, object oDead, int nCR = 0) +{ + //get prc switches + int bSPAM = GetPRCSwitch(PRC_XP_DISABLE_SPAM); + float fPRC_XP_DIVISOR_PC = IntToFloat(GetPRCSwitch(PRC_XP_PC_PARTY_COUNT_x100))/100.0; + float fPRC_XP_DIVISOR_HENCHMAN = IntToFloat(GetPRCSwitch(PRC_XP_HENCHMAN_PARTY_COUNT_x100))/100.0; + float fPRC_XP_DIVISOR_ANIMALCOMPANION = IntToFloat(GetPRCSwitch(PRC_XP_ANIMALCOMPANION_PARTY_COUNT_x100))/100.0; + float fPRC_XP_DIVISOR_FAMILIAR = IntToFloat(GetPRCSwitch(PRC_XP_FAMILIAR_PARTY_COUNT_x100))/100.0; + float fPRC_XP_DIVISOR_DOMINATED = IntToFloat(GetPRCSwitch(PRC_XP_DOMINATED_PARTY_COUNT_x100))/100.0; + float fPRC_XP_DIVISOR_SUMMONED = IntToFloat(GetPRCSwitch(PRC_XP_SUMMONED_PARTY_COUNT_x100))/100.0; + float fPRC_XP_DIVISOR_UNKNOWN = IntToFloat(GetPRCSwitch(PRC_XP_UNKNOWN_PARTY_COUNT_x100))/100.0; + + //number of PCs in the party, average party level + int nPartySize, nAvgLevel; + //xp divisor + float fDivisor; + + //get some basic group data like average PC level , PC group size, and XP divisor + object oTest = GetFirstFactionMember(oKiller, FALSE); + while(GetIsObjectValid(oTest)) + { + if(CheckDistance(oDead, oTest)) + { + if(GetIsPC(oTest)) + { + nPartySize++; + nAvgLevel += GetECL(oTest); + fDivisor += fPRC_XP_DIVISOR_PC; + } + else + { + switch(GetAssociateTypeNPC(oTest)) + { + case ASSOCIATE_TYPE_HENCHMAN: fDivisor += fPRC_XP_DIVISOR_HENCHMAN; break; + case ASSOCIATE_TYPE_ANIMALCOMPANION: fDivisor += fPRC_XP_DIVISOR_ANIMALCOMPANION; break; + case ASSOCIATE_TYPE_FAMILIAR: fDivisor += fPRC_XP_DIVISOR_FAMILIAR; break; + case ASSOCIATE_TYPE_DOMINATED: fDivisor += fPRC_XP_DIVISOR_DOMINATED; break; + case ASSOCIATE_TYPE_SUMMONED: fDivisor += fPRC_XP_DIVISOR_SUMMONED; break; + default: fDivisor += fPRC_XP_DIVISOR_UNKNOWN; break; + } + } + } + else if(!bSPAM && GetIsPC(oTest)) + SendMessageToPC(oTest, "You are too far away from the combat to gain any experience."); + + oTest = GetNextFactionMember(oKiller, FALSE); + } + + //in case something weird is happenening + if(fDivisor == 0.0f) + return; + + //calculate average partylevel + nAvgLevel /= nPartySize; + + int nBaseXP; + if(!nCR) nCR = GetPRCSwitch(PRC_XP_USE_ECL_NOT_CR) ? GetECL(oDead) : FloatToInt(GetChallengeRating(oDead)); + if(nCR < 1) nCR = 1; + + if(GetPRCSwitch(PRC_XP_USE_BIOWARE_XPTABLE)) + { + if(nCR > 40) nCR = 40; + if(nAvgLevel > 40) nAvgLevel = 40; + nBaseXP = StringToInt(Get2DACache("xptable", "C"+IntToString(nCR), nAvgLevel-1)); + } + else + { + if(nCR > 70) nCR = 70; + if(nAvgLevel > 60) nAvgLevel = 60; + nBaseXP = StringToInt(Get2DACache("dmgxp", IntToString(nCR), nAvgLevel-1)); + } + + //average xp per party member + int nXPAward = FloatToInt(IntToFloat(nBaseXP)/fDivisor); + + //now the module slider + nXPAward = FloatToInt(IntToFloat(nXPAward) * IntToFloat(GetPRCSwitch(PRC_XP_SLIDER_x100))/100.0); + + //xp = 0, quit + if(!nXPAward) + return; + + //group bonus + nXPAward = FloatToInt(IntToFloat(nXPAward) * GetGroupBonusModifier(nPartySize)); + + int nKillerLevel = GetECL(oKiller); + //calculate xp for each party member individually + oTest = GetFirstFactionMember(oKiller, FALSE); + float fPCAdjust; + int nMbrLevel; + while(GetIsObjectValid(oTest)) + { + if(CheckDistance(oDead, oTest)) + { + if(GetIsPC(oTest)) + { + nMbrLevel = GetECL(oTest); + if(abs(nMbrLevel - nKillerLevel) <= GetPRCSwitch(PRC_XP_MAX_LEVEL_DIFF)) + { + //now the individual slider + fPCAdjust = IntToFloat(GetLocalInt(oTest, PRC_XP_SLIDER_x100))/100.0; + if(fPCAdjust == 0.0) fPCAdjust = 1.0; + nXPAward = FloatToInt(IntToFloat(nXPAward) * fPCAdjust); + + GiveXPReward(oTest, nXPAward); + } + else if(!bSPAM) + SendMessageToPC(oTest, "You are too high level to gain any experience."); + } + else + GiveXPReward(oTest, nXPAward, FALSE); + } + oTest = GetNextFactionMember(oKiller, FALSE); + } +} + +void GiveXPReward(object oCreature, int nXP, int bIsPC = TRUE) +{ + //actually give the XP + if(bIsPC) + { + if(GetPRCSwitch(PRC_XP_USE_SETXP)) + SetXP(oCreature, GetXP(oCreature)+nXP); + else + GiveXPToCreature(oCreature, nXP); + } + else if(GetPRCSwitch(PRC_XP_GIVE_XP_TO_NPCS)) + SetLocalInt(oCreature, "NPC_XP", GetLocalInt(oCreature, "NPC_XP")+nXP); +} + +//:://///////////////////////////////////////////// +//:: Effective Character Level Experience Script +//:: ecl_exp +//:: Copyright (c) 2004 Theo Brinkman +//::////////////////////////////////////////////// +/* +Call ApplyECLToXP() from applicable heartbeat script(s) +to cause experience to be adjusted according to ECL. +*/ +//::////////////////////////////////////////////// +//:: Created By: Theo Brinkman +//:: Last Updated On: 2004-07-28 +//::////////////////////////////////////////////// +// CONSTANTS +const string sLEVEL_ADJUSTMENT = "ecl_LevelAdjustment"; +const string sXP_AT_LAST_HEARTBEAT = "ecl_LastExperience"; + +int GetXPForLevel(int nLevel) +{ + return nLevel*(nLevel-1)*500; +} + +void ApplyECLToXP(object oPC) +{ + //abort if simple LA is disabled + if(!GetPRCSwitch(PRC_XP_USE_SIMPLE_LA)) + return; + + //abort if it's not valid, still loading, or a PC + if(!GetIsObjectValid(oPC) || GetLocalInt(oPC, "PRC_ECL_Delay") || !GetIsPC(oPC)) + return; + + // Abort if they are registering as a cohort + if(GetLocalInt(oPC, "OriginalXP") || GetPersistantLocalInt(oPC, "RegisteringAsCohort")) + return; + + // Let them make it to level 3 in peace + if(GetTag(GetModule()) == "Prelude") + return; + + // And start HotU in peace + if(GetTag(GetArea(oPC)) == "q2a_yprooms") + return; + + // Abort if they were just relevelled + if(GetLocalInt(oPC, "RelevelXP")) + { + DeleteLocalInt(oPC, "RelevelXP"); + return; + } + + //this is done first because leadership uses it too + int iCurXP = GetXP(oPC); + //if (DEBUG) DoDebug("ApplyECLToXP - iCurXP "+IntToString(iCurXP)); + + int iLastXP = GetPersistantLocalInt(oPC, sXP_AT_LAST_HEARTBEAT); + //if (DEBUG) DoDebug("ApplyECLToXP - iLastXP "+IntToString(iLastXP)); + if(iCurXP > iLastXP) + { + //if (DEBUG) DoDebug("ApplyECLToXP - gained XP"); + int iLvlAdj = GetTotalLA(oPC); + if(iLvlAdj) + { + //if (DEBUG) DoDebug("ApplyECLToXP - have LA"); + int iPCLvl = GetHitDice(oPC); + // Get XP Ratio (multiply new XP by this to see what to subtract) + float fRealXPToLevel = IntToFloat(GetXPForLevel(iPCLvl+1)); + float fECLXPToLevel = IntToFloat(GetXPForLevel(iPCLvl+1+iLvlAdj)); + float fXPRatio = 1.0 - (fRealXPToLevel/fECLXPToLevel); + //At this point the ratio is based on total XP + //This is not correct, it should be based on the XP required to reach + //the next level. + //fRealXPToLevel = IntToFloat(iPCLvl*1000); + //fECLXPToLevel = IntToFloat((iPCLvl+iLvlAdj)*1000); + //fXPRatio = 1.0 - (fRealXPToLevel/fECLXPToLevel); + + float fXPDif = IntToFloat(iCurXP - iLastXP); + int iXPDif = FloatToInt(fXPDif * fXPRatio); + int newXP = iCurXP - iXPDif; + SendMessageToPC(oPC, "XP gained since last heartbeat "+IntToString(FloatToInt(fXPDif))); + SendMessageToPC(oPC, "Real XP to level: "+IntToString(FloatToInt(fRealXPToLevel))); + SendMessageToPC(oPC, "ECL XP to level: "+IntToString(FloatToInt(fECLXPToLevel))); + SendMessageToPC(oPC, "Level Adjustment +"+IntToString(iLvlAdj)+". Reducing XP by " + IntToString(iXPDif)); + SetXP(oPC, newXP); + } + } + iCurXP = GetXP(oPC); + SetPersistantLocalInt(oPC, sXP_AT_LAST_HEARTBEAT, iCurXP); +} + +int GetBuyoffCost(object oPC) +{ + int nECL = GetECL(oPC); + int nXP = (nECL-1) * 1000; + return nXP; +} + +void BuyoffLevel(object oPC) +{ + int nECL = GetECL(oPC); + int nXP = (nECL-1) * 1000; + SetXP(oPC, GetXP(oPC)-nXP); + int nBuyoff = GetPersistantLocalInt(oPC, "LA_Buyoff"); + SetPersistantLocalInt(oPC, "LA_Buyoff", nBuyoff+1); +} + +int GetCanBuyoffLA(object oPC) +{ + int nReturn = FALSE; + int nBuyoff = GetPersistantLocalInt(oPC, "LA_Buyoff"); + int nChar = GetHitDice(oPC); + int nLA = StringToInt(Get2DACache("ECL", "LA", GetRacialType(oPC))) + GetPersistantLocalInt(oPC, "template_LA"); + int nCheck = nLA - nBuyoff; + if (DEBUG) DoDebug("PRE-LA nBuyoff "+IntToString(nBuyoff)+" nChar "+IntToString(nChar)+" nLA "+IntToString(nLA)+" nCheck "+IntToString(nCheck)); + if (0 >= nCheck) // no LA + return FALSE; + + if (!nBuyoff) // Not purchased anything yet + { + if (nChar >= StringToInt(Get2DACache("la_buyoff", "1st", nLA))) + nReturn = TRUE; + } + if (nBuyoff == 1) // Purchased first already + { + if (nChar >= StringToInt(Get2DACache("la_buyoff", "2nd", nLA))) + nReturn = TRUE; + } + if (nBuyoff == 2) // Purchased second already + { + if (nChar >= StringToInt(Get2DACache("la_buyoff", "3rd", nLA))) + nReturn = TRUE; + } + if (nBuyoff == 3) // Purchased third already + { + if (nChar >= StringToInt(Get2DACache("la_buyoff", "4th", nLA))) + nReturn = TRUE; + } + if (nBuyoff == 4) // Purchased fourth already + { + if (nChar >= StringToInt(Get2DACache("la_buyoff", "5th", nLA))) + nReturn = TRUE; + } + if (nBuyoff == 5) // Purchased fifth already + { + if (nChar >= StringToInt(Get2DACache("la_buyoff", "6th", nLA))) + nReturn = TRUE; + } + if (DEBUG) DoDebug("nReturn "+IntToString(nReturn)+" nBuyoff "+IntToString(nBuyoff)+" nChar "+IntToString(nChar)+" nLA "+IntToString(nLA)); + + return nReturn; +} \ No newline at end of file diff --git a/src/include/inc_epicspellai.nss b/src/include/inc_epicspellai.nss new file mode 100644 index 0000000..f2a72a0 --- /dev/null +++ b/src/include/inc_epicspellai.nss @@ -0,0 +1,708 @@ + +/* +for reference +SpellRngPers 0 +SpellRngTouch 2.25 +SpellRngShrt 8 +SpellRngMed 20 +SpellRngLng 40 +*/ + +void DoEpicSpellcasterSpawn(); +int DoEpicSpells(); +int TestConditions(int nSpellID); +object GetSuitableTaget(int nSpellID); +void MakeEpicSpellsKnownAIList(); + +#include "inc_epicspells" +//#include "inc_epicspelldef" +//#include "inc_epicspellfnc" +#include "inc_utility" + +//returns True if it casts something +int DoEpicSpells() +{ + //checks for able to cast anything epic + if(!GetIsEpicSpellcaster(OBJECT_SELF)) + return FALSE; + if(GetSpellSlots(OBJECT_SELF) < 1) + return FALSE; + +// DoDebug("Checking for EpicSpells"); + int nSpellID; + int bTest; + int i; + object oTarget; + + //sanity test + if(!array_exists(OBJECT_SELF,"AI_KnownEpicSpells")) + { + if(DEBUG) DoDebug("ERROR: DoEpicSpells: AI_KnownEpicSpells array does not exist, creating"); + MakeEpicSpellsKnownAIList(); + } + //do specific conditon tests first + //non implemented at moment + //test all spells in known spell array setup on spawn + for(i=0; i 25.0) + return TRUE; + else + return FALSE; + //Order Restored is alignment sensitive. Only castable by lawful + case SPELL_EPIC_ORDER_R: + if(GetAlignmentLawChaos(OBJECT_SELF) == ALIGNMENT_LAWFUL + && GetAlignmentLawChaos(GetNearestCreature( + CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY)) == ALIGNMENT_CHAOTIC) + return TRUE; + else + return FALSE; + + //Anarchy's Call is alignment sensitive. Only castable by Chaotic + case SPELL_EPIC_ANARCHY: + if(GetAlignmentLawChaos(OBJECT_SELF) == ALIGNMENT_CHAOTIC + && GetAlignmentLawChaos(GetNearestCreature( + CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY)) == ALIGNMENT_LAWFUL) + return TRUE; + else + return FALSE; + //touchbuffs pass automatically because of target selection checks + case SPELL_EPIC_HERCALL: + case SPELL_EPIC_CHAMP_V: + case SPELL_EPIC_DEADEYE: + case SPELL_EPIC_DULBLAD: + case SPELL_EPIC_EP_M_AR: + case SPELL_EPIC_EP_SP_R: + case SPELL_EPIC_ET_FREE: + case SPELL_EPIC_FLEETNS: + case SPELL_EPIC_GR_SP_RE: + case SPELL_EPIC_HERCEMP: + case SPELL_EPIC_IMPENET: + case SPELL_EPIC_TRANVIT: + case SPELL_EPIC_UNIMPIN: + case SPELL_EPIC_AL_MART: + return TRUE; + break; + //single hostile spells + case SPELL_EPIC_GR_RUIN: + case SPELL_EPIC_RUINN: + case SPELL_EPIC_GODSMIT: + case SPELL_EPIC_NAILSKY: + case SPELL_EPIC_ENSLAVE: + case SPELL_EPIC_MORI: + case SPELL_EPIC_THEWITH: + case SPELL_EPIC_PSION_S: + case SPELL_EPIC_DWEO_TH: + case SPELL_EPIC_SP_WORM: + case SPELL_EPIC_SINGSUN: + return TRUE; + break; + + //aoe hostile spells + case SPELL_EPIC_ANBLAST: + case SPELL_EPIC_ANBLIZZ: + case SPELL_EPIC_A_STONE: + case SPELL_EPIC_MASSPEN: + case SPELL_EPIC_HELBALL: + case SPELL_EPIC_MAGMA_B: + case SPELL_EPIC_TOLO_KW: + return TRUE; + break; + + //fail spells that tha AI cant work with anyway + case SPELL_EPIC_CELCOUN: + case SPELL_EPIC_CON_REU: + case SPELL_EPIC_DREAMSC: + case SPELL_EPIC_EP_RPLS: + case SPELL_EPIC_FIEND_W: + case SPELL_EPIC_HELSEND: + case SPELL_EPIC_LEG_ART: + case SPELL_EPIC_PIOUS_P: + case SPELL_EPIC_PLANCEL: + case SPELL_EPIC_RISEN_R: + case SPELL_EPIC_UNSEENW: + return FALSE; + + //fail spells that dont work at the moment + case SPELL_EPIC_BATTLEB: + case SPELL_EPIC_DTHMARK: +// case SPELL_EPIC_HELSEND: +// case SPELL_EPIC_EP_RPLS: +// case SPELL_EPIC_LEG_ART: + case SPELL_EPIC_LIFE_FT: + case SPELL_EPIC_NIGHTSU: + case SPELL_EPIC_PEERPEN: +// case SPELL_EPIC_RISEN_R: + case SPELL_EPIC_SYMRUST: + return FALSE; + } + return FALSE; +} +object GetSuitableTaget(int nSpellID) +{ + object oTarget; + object oTest; + int i; + float fDist; + int nRealSpellID = StringToInt(Get2DACache("feats", "SpellID", + StringToInt(Get2DACache("EpicSpells", "SpellFeatID", nSpellID)))); + switch(nSpellID) + { + //personal spells always target self + case SPELL_EPIC_ACHHEEL: + case SPELL_EPIC_ALLHOPE: + case SPELL_EPIC_ANARCHY: + case SPELL_EPIC_ARMY_UN: + case SPELL_EPIC_BATTLEB: + case SPELL_EPIC_CELCOUN: + case SPELL_EPIC_DIREWIN: + case SPELL_EPIC_DREAMSC: + case SPELL_EPIC_EP_WARD: + case SPELL_EPIC_FIEND_W: + case SPELL_EPIC_GR_TIME: + case SPELL_EPIC_HELSEND: + case SPELL_EPIC_LEG_ART: + case SPELL_EPIC_ORDER_R: + case SPELL_EPIC_PATHS_B: + case SPELL_EPIC_PEERPEN: + case SPELL_EPIC_PESTIL: + case SPELL_EPIC_PIOUS_P: + case SPELL_EPIC_RAINFIR: + case SPELL_EPIC_RISEN_R: + case SPELL_EPIC_WHIP_SH: + return OBJECT_SELF; + break; + //summons target nearest enemy, or self if enemies over short range + case SPELL_EPIC_UNHOLYD: + case SPELL_EPIC_SUMABER: + case SPELL_EPIC_TWINF: + case SPELL_EPIC_MUMDUST: + case SPELL_EPIC_DRG_KNI: + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); + if(GetDistanceToObject(oTarget) > RADIUS_SIZE_SMALL)//assuming radius size is the same as range + return OBJECT_SELF; + else + return oTarget; + break; + //touchbuffs target self, or nearest ally without the effect + //maximum 5m distance, dont want to wander too far + //will separate those best cast on others laters + case SPELL_EPIC_HERCALL: + case SPELL_EPIC_CHAMP_V: + case SPELL_EPIC_DEADEYE: + case SPELL_EPIC_DULBLAD: + case SPELL_EPIC_EP_M_AR: + case SPELL_EPIC_EP_RPLS: + case SPELL_EPIC_EP_SP_R: + case SPELL_EPIC_ET_FREE: + case SPELL_EPIC_FLEETNS: + case SPELL_EPIC_GR_SP_RE: + case SPELL_EPIC_HERCEMP: + case SPELL_EPIC_IMPENET: + case SPELL_EPIC_TRANVIT: + case SPELL_EPIC_UNIMPIN: + case SPELL_EPIC_UNSEENW: + case SPELL_EPIC_CON_RES: + fDist = 5.0; + if(!GetHasSpellEffect(nRealSpellID)) + return OBJECT_SELF; + else + { + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_FRIEND,OBJECT_SELF, i); + while(!GetHasSpellEffect(nRealSpellID, oTarget) + && GetDistanceToObject(oTarget) < fDist + && i < 10) + { + i++; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_FRIEND,OBJECT_SELF, i); + } + if(GetDistanceToObject(oTarget) >= fDist + || i >= 10) + return OBJECT_INVALID; //no suitable targets + else + return oTarget; + } + break; + + case SPELL_EPIC_AL_MART: + fDist = 5.0; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_FRIEND,OBJECT_SELF, i); + while(!GetHasSpellEffect(nRealSpellID, oTarget) + && GetCurrentHitPoints(oTarget) > GetCurrentHitPoints(OBJECT_SELF) + && GetDistanceToObject(oTarget) < fDist + && i < 10) + { + i++; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_FRIEND,OBJECT_SELF, i); + } + if(GetDistanceToObject(oTarget) >= fDist + || i >= 10) + return OBJECT_INVALID; //no suitable targets + else + { + oTest = GetLocalObject(OBJECT_SELF, "oAILastMart"); + if(GetIsObjectValid(oTest) + && !GetIsDead(oTest) + && GetCurrentHitPoints(oTest) > GetMaxHitPoints(oTest)/10) + return OBJECT_INVALID; + return oTarget; + } + break; + //hostile spells + //area effect descriminants + case SPELL_EPIC_ANBLAST: + fDist = 40.0; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + while(GetCurrentHitPoints(oTarget) > 35 + && GetDistanceToObject(oTarget) < fDist + && i < 10) + { + i++; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + } + if(GetDistanceToObject(oTarget) >= fDist + || i >= 10) + return OBJECT_INVALID; //no suitable targets + else + return oTarget; + break; + case SPELL_EPIC_ANBLIZZ: + fDist = 40.0; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + while(GetCurrentHitPoints(oTarget) > 70 + && GetDistanceToObject(oTarget) < fDist + && i < 10) + { + i++; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + } + if(GetDistanceToObject(oTarget) >= fDist + || i >= 10) + return OBJECT_INVALID; //no suitable targets + else + return oTarget; + break; + case SPELL_EPIC_A_STONE: + fDist = 20.0; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + while(GetFortitudeSavingThrow(oTarget)+10 > + GetEpicSpellSaveDC(OBJECT_SELF, oTarget, nSpellID) + && GetDistanceToObject(oTarget) < fDist + && i < 10) + { + i++; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + } + if(GetDistanceToObject(oTarget) >= fDist + || i >= 10) + return OBJECT_INVALID; //no suitable targets + else + return oTarget; + break; + + case SPELL_EPIC_MASSPEN: + fDist = 40.0; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + while(GetFortitudeSavingThrow(oTarget)+10 > + GetEpicSpellSaveDC(OBJECT_SELF, oTarget, nSpellID) + && GetDistanceToObject(oTarget) < fDist + && i < 10) + { + i++; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + } + if(GetDistanceToObject(oTarget) > fDist + || i >= 10) + return OBJECT_INVALID; + else + return oTarget; //no suitable targets + break; + //singe target + case SPELL_EPIC_ENSLAVE: + fDist = 80.0; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + while(GetWillSavingThrow(oTarget)+10 > + GetEpicSpellSaveDC(OBJECT_SELF, oTarget, nSpellID) + && GetDistanceToObject(oTarget) < fDist + && i < 10) + { + i++; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + } + if(GetDistanceToObject(oTarget) > fDist + || i >= 10) + return OBJECT_INVALID; + else + return oTarget; //no suitable targets + break; + case SPELL_EPIC_NAILSKY: + fDist = 20.0; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + while(GetWillSavingThrow(oTarget)+10 > + GetEpicSpellSaveDC(OBJECT_SELF, oTarget, nSpellID) + && GetDistanceToObject(oTarget) < fDist + && i < 10) + { + i++; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + } + if(GetDistanceToObject(oTarget) > fDist + || i >= 10) + return OBJECT_INVALID; + else + return oTarget; //no suitable targets + break; + case SPELL_EPIC_GR_RUIN: + case SPELL_EPIC_RUINN: + case SPELL_EPIC_DTHMARK: + case SPELL_EPIC_GODSMIT: + case SPELL_EPIC_SINGSUN: + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); + return oTarget; + break; + + //area effect indescriminants + case SPELL_EPIC_HELBALL: + case SPELL_EPIC_MAGMA_B: + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); + return oTarget; + break; + + case SPELL_EPIC_LEECH_F: + fDist = 40.0; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + while(GetWillSavingThrow(oTarget)+10 > + GetEpicSpellSaveDC(OBJECT_SELF, oTarget, nSpellID) + && GetDistanceToObject(oTarget) < fDist + && GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD + && i < 10) + { + i++; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + } + if(GetDistanceToObject(oTarget) > fDist + || i >= 10) + return OBJECT_INVALID; + else + return oTarget; //no suitable targets + break; + //check to not target those immune to insta-death + case SPELL_EPIC_TOLO_KW: + fDist = 40.0; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + while(GetIsImmune(oTarget,IMMUNITY_TYPE_DEATH) + && GetDistanceToObject(oTarget) < fDist + && i < 10) + { + i++; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + } + if(GetDistanceToObject(oTarget) >= fDist + || i >= 10) + return OBJECT_INVALID; //no suitable targets + else + return oTarget; + break; + case SPELL_EPIC_MORI: + fDist = 20.0; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + while(GetIsImmune(oTarget,IMMUNITY_TYPE_DEATH) + && GetDistanceToObject(oTarget) < fDist + && i < 10) + { + i++; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + } + if(GetDistanceToObject(oTarget) >= fDist + || i >= 10) + return OBJECT_INVALID; //no suitable targets + else + return oTarget; + break; + //check to not target those immune to ability lowering + case SPELL_EPIC_THEWITH: + fDist = 20.0; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + while(GetIsImmune(oTarget,IMMUNITY_TYPE_ABILITY_DECREASE) + && GetDistanceToObject(oTarget) < fDist + && i < 10 + && GetFortitudeSavingThrow(oTarget)+10 > + GetEpicSpellSaveDC(OBJECT_SELF, oTarget, nSpellID)) + { + i++; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + } + if(GetDistanceToObject(oTarget) > fDist + || i >= 10) + return OBJECT_INVALID; + else + return oTarget; //no suitable targets + break; + //aslo willcheck + case SPELL_EPIC_PSION_S: + fDist = 20.0; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + while(GetIsImmune(oTarget,IMMUNITY_TYPE_ABILITY_DECREASE) + && GetDistanceToObject(oTarget) < fDist + && i < 10 + && GetWillSavingThrow(oTarget)+10 > + GetEpicSpellSaveDC(OBJECT_SELF, oTarget, nSpellID)) + { + i++; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + } + if(GetDistanceToObject(oTarget) > fDist + || i >= 10) + return OBJECT_INVALID; + else + return oTarget; //no suitable targets + break; + //target spellcasters + //just gets last spellcaster + //or those with classes in spellcasting + case SPELL_EPIC_DWEO_TH: + fDist = 20.0; + + oTarget = GetLastSpellCaster(); + if(GetDistanceToObject(oTarget) < fDist + && i < 10 + && GetIsEnemy(oTarget)) + return oTarget; + else + { + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + while(GetLevelByClass(CLASS_TYPE_CLERIC) ==0 + && GetLevelByClass(CLASS_TYPE_DRUID) ==0 + && GetLevelByClass(CLASS_TYPE_WIZARD) ==0 + && GetLevelByClass(CLASS_TYPE_SORCERER) ==0 + && GetDistanceToObject(oTarget) < fDist + && i < 10) + { + i++; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + } + if(GetDistanceToObject(oTarget) > fDist + || i >= 10) + return OBJECT_INVALID; //no suitable targets + else + return oTarget; + } + break; + //target spellcasters + //just gets last spellcaster + //or those with classes in spellcasting + //also checks will fail will test + case SPELL_EPIC_SP_WORM: + fDist = 8.0; + oTarget = GetLastSpellCaster(); + if(GetDistanceToObject(oTarget) < fDist + && i < 10 + && GetIsEnemy(oTarget) + && GetWillSavingThrow(oTarget)+10 > + GetEpicSpellSaveDC(OBJECT_SELF) + + GetEpicSpellSaveDC(OBJECT_SELF, oTarget, nSpellID)) + return oTarget; + else + { + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + while(GetLevelByClass(CLASS_TYPE_CLERIC) ==0 + && GetLevelByClass(CLASS_TYPE_DRUID) ==0 + && GetLevelByClass(CLASS_TYPE_WIZARD) ==0 + && GetLevelByClass(CLASS_TYPE_SORCERER) ==0 + && GetDistanceToObject(oTarget) < fDist + && i < 10 + && GetWillSavingThrow(oTarget)+10 > + GetEpicSpellSaveDC(OBJECT_SELF, oTarget, nSpellID)) + { + i++; + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_ENEMY,OBJECT_SELF, i); + } + if(GetDistanceToObject(oTarget) > fDist + || i >= 10) + return OBJECT_INVALID; + else + return oTarget; //no suitable targets + } + break; + + } + return OBJECT_INVALID; +} + +void DoEpicSpellcasterSpawn() +{ + //checks for able to cast anything epic + if(!GetIsEpicSpellcaster(OBJECT_SELF)) + return; + int nLevel = GetHitDice(OBJECT_SELF); + //give pseudoXP if not already given + if(!GetXP(OBJECT_SELF)) + { + int nXP =(nLevel*(nLevel-1))*500; + nXP = nXP + FloatToInt(IntToFloat(nLevel)*1000.0*((IntToFloat(Random(51))+25.0)/100.0)); + SetXP(OBJECT_SELF, nXP); + } + //fill slots + ReplenishSlots(OBJECT_SELF); + //TEMP + //This stuff gives them some Epic Spells for free + if(!GetCastableFeatCount(OBJECT_SELF)) + { + int nSlots = GetEpicSpellSlotLimit(OBJECT_SELF)+3; + int i; + for(i=0;i nHighestDC) + { + nHighestDC = GetDCForSpell(array_get_int(OBJECT_SELF, "AI_KnownEpicSpells",i)); + nHighestDCID = i; + } + } + //once you have checked all spells lower, swap the top one with the highest DC + nTemp = array_get_int(OBJECT_SELF, "AI_KnownEpicSpells",j); + array_set_int(OBJECT_SELF, "AI_KnownEpicSpells",j,array_get_int(OBJECT_SELF, "AI_KnownEpicSpells",nHighestDCID)); + array_set_int(OBJECT_SELF, "AI_KnownEpicSpells",nHighestDCID, nTemp); + } +// DoDebug("Finished sorting known spells"); +} + +// Test main +//void main(){} diff --git a/src/include/inc_epicspelldef.nss b/src/include/inc_epicspelldef.nss new file mode 100644 index 0000000..78b89b4 --- /dev/null +++ b/src/include/inc_epicspelldef.nss @@ -0,0 +1,1216 @@ + +//CONSTANTS FOR MESSAGES. +//reesearch +const string MES_LEARN_SPELL = "has gained the knowledge and use of this epic spell!"; +const string MES_KNOW_SPELL = "has already researched this spell"; +const string MES_NOT_ENOUGH_GOLD = "does not have the required gold"; +const string MES_NOT_ENOUGH_XP = "does not have the required experience"; +const string MES_NOT_ENOUGH_SKILL = "does not have the required skill"; +const string MES_NOT_HAVE_REQ_FEATS = "does not have the required knowledge"; +const string MES_CANNOT_RESEARCH_HERE = "does not have the Epic Spellcasting feat or does not have enough levels in the appropriate classes."; +const string MES_RESEARCH_SUCCESS = "has successfully researched an Epic spell! Congratulations! "; +const string MES_RESEARCH_FAILURE = "has not found success in their research..."; +//seeds +const string MES_CLASS_NOT_ALLOWED = "Your magical teachings do not seem to allow the learning of this epic spell seed."; +const string MES_LEARN_SEED = "You have gained the knowledge of this epic spell seed!"; +const string MES_KNOW_SEED = "You already have knowledge of this epic spell seed."; +const string MES_BOOK_DESTROYED = "The handling of this book has caused it to disintegrate!"; +//spellcraft +const string MES_SPELLCRAFT_CHECK_PASS = "Spellcraft check: Success!"; +const string MES_SPELLCRAFT_CHECK_FAIL = "Spellcraft check: Failed!"; +//errors +const string MES_CANNOT_CAST_SLOTS = "Spell failed! You do not have any epic spell slots remaining."; +const string MES_CANNOT_CAST_XP = "Spell failed! You do not have enough experience to cast this spell."; +//contingencies +const string MES_CONTINGENCIES_YES1 = "You have contingencies active, therefore you do not have your full complement of spell slots."; +const string MES_CONTINGENCIES_YES2 = "The contingencies must expire to allow you to regain the spell slots."; +/* DEFAULTS +const string MES_LEARN_SEED = "You have gained the knowledge of this epic spell seed!"; +const string MES_KNOW_SEED = "You already have knowledge of this epic spell seed."; +const string MES_LEARN_SPELL = "You have gained the knowledge and use of this epic spell!"; +const string MES_KNOW_SPELL = "You have already researched this spell."; +const string MES_CLASS_NOT_ALLOWED = "Your magical teachings do not seem to allow the learning of this epic spell seed."; +const string MES_BOOK_DESTROYED = "The handling of this book has caused it to disintegrate!"; +const string MES_CANNOT_RESEARCH_HERE = "You are not allowed to pursue magical research here."; +const string MES_RESEARCH_SUCCESS = "Congratulations! You have successfully researched an Epic spell!"; +const string MES_RESEARCH_FAILURE = "Failure! You have not found success in your research..."; +const string MES_SPELLCRAFT_CHECK_PASS = "Spellcraft check: Success!"; +const string MES_SPELLCRAFT_CHECK_FAIL = "Spellcraft check: Failed!"; +const string MES_NOT_ENOUGH_GOLD = "You do not have the required gold."; +const string MES_NOT_ENOUGH_XP = "You do not have the required experience."; +const string MES_NOT_ENOUGH_SKILL = "You do not have the required skill."; +const string MES_NOT_HAVE_REQ_FEATS = "You cannot research this, since you do not have the required knowledge."; +const string MES_CANNOT_CAST_SLOTS = "Spell failed! You do not have any epic spell slots remaining."; +const string MES_CANNOT_CAST_XP = "Spell failed! You do not have enough experience to cast this spell."; +const string MES_CONTINGENCIES_YES1 = "You have contingencies active, therefore you do not have your full complement of spell slots."; +const string MES_CONTINGENCIES_YES2 = "The contingencies must expire to allow you to regain the spell slots."; +*/ + +//Primogenitors SpellID constants +const int SPELL_EPIC_A_STONE = 0;//4007; +const int SPELL_EPIC_ACHHEEL = 1;//4000; +const int SPELL_EPIC_AL_MART = 2;//4002; +const int SPELL_EPIC_ALLHOPE = 3;//4001; +const int SPELL_EPIC_ANARCHY = 4;//4003; +const int SPELL_EPIC_ANBLAST = 5;//4004; +const int SPELL_EPIC_ANBLIZZ = 6;//4005; +const int SPELL_EPIC_ARMY_UN = 7;//4006; +const int SPELL_EPIC_BATTLEB = 999;//4008; +const int SPELL_EPIC_CELCOUN = 8;//4009; +const int SPELL_EPIC_CHAMP_V = 9;//4010; +const int SPELL_EPIC_CON_RES =10;//4011; +const int SPELL_EPIC_CON_REU =11;//4012; +const int SPELL_EPIC_DEADEYE =12;//4013; +const int SPELL_EPIC_DIREWIN =13;//4015; +const int SPELL_EPIC_DREAMSC =14;//4017; +const int SPELL_EPIC_DRG_KNI =15;//4016; +const int SPELL_EPIC_DTHMARK =1000;//4014; +const int SPELL_EPIC_DULBLAD =16;//4018; +const int SPELL_EPIC_DWEO_TH =17;//4019; +const int SPELL_EPIC_ENSLAVE =18;//4020; +const int SPELL_EPIC_EP_M_AR =19;//4021; +const int SPELL_EPIC_EP_RPLS =20;//4022; +const int SPELL_EPIC_EP_SP_R =21;//4023; +const int SPELL_EPIC_EP_WARD =22;//4024; +const int SPELL_EPIC_ET_FREE =23;//4025; +const int SPELL_EPIC_FIEND_W =24;//4026; +const int SPELL_EPIC_FLEETNS =25;//4027; +const int SPELL_EPIC_GEMCAGE =26;//4028; +const int SPELL_EPIC_GODSMIT =27;//4029; +const int SPELL_EPIC_GR_RUIN =28;//4030; +const int SPELL_EPIC_GR_SP_RE=29;//4031; +const int SPELL_EPIC_GR_TIME =30;//4032; +const int SPELL_EPIC_HELBALL =31;//4034; +const int SPELL_EPIC_HELSEND =1001;//4033; +const int SPELL_EPIC_HERCALL =32;//4035; +const int SPELL_EPIC_HERCEMP =33;//4036; +const int SPELL_EPIC_IMPENET =34;//4037; +const int SPELL_EPIC_LEECH_F =35;//4038; +const int SPELL_EPIC_LEG_ART =1002;//4039; +const int SPELL_EPIC_LIFE_FT =1003;//4040; +const int SPELL_EPIC_MAGMA_B =36;//4041; +const int SPELL_EPIC_MASSPEN =37;//4042; +const int SPELL_EPIC_MORI = 38;//4043; +const int SPELL_EPIC_MUMDUST =39;//4044; +const int SPELL_EPIC_NAILSKY =40;//4045; +const int SPELL_EPIC_NIGHTSU =1004;//4046; +const int SPELL_EPIC_ORDER_R =41;//4047; +const int SPELL_EPIC_PATHS_B =42;//4048; +const int SPELL_EPIC_PEERPEN =43;//4049; +const int SPELL_EPIC_PESTIL = 44;//4050; +const int SPELL_EPIC_PIOUS_P =45;//4051; +const int SPELL_EPIC_PLANCEL =46;//4052; +const int SPELL_EPIC_PSION_S =47;//4053; +const int SPELL_EPIC_RAINFIR =48;//4054; +const int SPELL_EPIC_RISEN_R =1005;//4055; +const int SPELL_EPIC_RUINN = 49;//4056; //NON_STANDARD +const int SPELL_EPIC_SINGSUN =50;//4057; +const int SPELL_EPIC_SP_WORM =51;//4058; +const int SPELL_EPIC_STORM_M =52;//4059; +const int SPELL_EPIC_SUMABER =53;//4060; +const int SPELL_EPIC_SUP_DIS =54;//4061; +const int SPELL_EPIC_SYMRUST =1006;//4062; +const int SPELL_EPIC_THEWITH =55;//4063; +const int SPELL_EPIC_TOLO_KW =56;//4064; +const int SPELL_EPIC_TRANVIT =57;//4065; +const int SPELL_EPIC_TWINF = 58;//4066; +const int SPELL_EPIC_UNHOLYD =59;//4067; +const int SPELL_EPIC_UNIMPIN =60;//4068; +const int SPELL_EPIC_UNSEENW =61;//4069; +const int SPELL_EPIC_WHIP_SH =62;//4070; + + +/* +this stuff is no longer neeed as constants +instead its defined in epicspells.2da and epicspellseeds.2da +/////////////////////////////////////////////////////////////////////////////// +//CONSTANTS FOR THE SEEDS +/////////////////////////////////////////////////////////////////////////////// +// const int SEEDNAME_DC is the base DC for learning an Epic Spell Seed +// const int SEEDNAME_FE is for the line number in the feat.2da file +// const int SEEDNAME_IP is the line number of the seed in iprp_feats.2da. +// const int SEEDNAME_XX is for allowing levels of access to the seed... +// Use the following numbers for SEEDNAME_XX for different options: +// 0 <---- Zero allows NO ONE to learn the seed. +// 1 <---- One allows only clerics to learn the seed. +// 2 <---- Two allows only druids to learn the seed. +// 4 <---- Four allows only sorcerers to learn the seed. +// 8 <---- Eight allows only wizards to learn the seed. +// ?? <---- Add the previous four numbers together to have combinations +// of classes able to learn the seed. (15 for ALL) +/////////////////////////////////////////////////////////////////////////////// +const int AFFLICT_DC = 14; +const int AFFLICT_FE = 5000; +const int AFFLICT_IP = 400; +const int AFFLICT_XX = 15; +const int ANIMATE_DC = 25; +const int ANIMATE_FE = 5001; +const int ANIMATE_IP = 401; +const int ANIMATE_XX = 15; +const int ANIDEAD_DC = 23; +const int ANIDEAD_FE = 5002; +const int ANIDEAD_IP = 402; +const int ANIDEAD_XX = 15; +const int ARMOR_DC = 14; +const int ARMOR_FE = 5003; +const int ARMOR_IP = 403; +const int ARMOR_XX = 15; +const int BANISH_DC = 27; +const int BANISH_FE = 5004; +const int BANISH_IP = 404; +const int BANISH_XX = 15; +const int COMPEL_DC = 19; +const int COMPEL_FE = 5005; +const int COMPEL_IP = 405; +const int COMPEL_XX = 15; +const int CONCEAL_DC = 17; +const int CONCEAL_FE = 5006; +const int CONCEAL_IP = 406; +const int CONCEAL_XX = 15; +const int CONJURE_DC = 21; +const int CONJURE_FE = 5007; +const int CONJURE_IP = 407; +const int CONJURE_XX = 15; +const int CONTACT_DC = 23; +const int CONTACT_FE = 5008; +const int CONTACT_IP = 408; +const int CONTACT_XX = 15; +const int DELUDE_DC = 14; +const int DELUDE_FE = 5009; +const int DELUDE_IP = 409; +const int DELUDE_XX = 15; +const int DESTROY_DC = 29; +const int DESTROY_FE = 5010; +const int DESTROY_IP = 410; +const int DESTROY_XX = 15; +const int DISPEL_DC = 19; +const int DISPEL_FE = 5011; +const int DISPEL_IP = 411; +const int DISPEL_XX = 15; +const int ENERGY_DC = 19; +const int ENERGY_FE = 5012; +const int ENERGY_IP = 412; +const int ENERGY_XX = 15; +const int FORESEE_DC = 17; +const int FORESEE_FE = 5013; +const int FORESEE_IP = 413; +const int FORESEE_XX = 15; +const int FORTIFY_DC = 17; +const int FORTIFY_FE = 5014; +const int FORTIFY_IP = 414; +const int FORTIFY_XX = 15; +const int HEAL_DC = 25; +const int HEAL_FE = 5015; +const int HEAL_IP = 415; +const int HEAL_XX = 15; +const int LIFE_DC = 27; +const int LIFE_FE = 5016; +const int LIFE_IP = 416; +const int LIFE_XX = 15; +const int LIGHT_DC = 14; +const int LIGHT_FE = 5017; +const int LIGHT_IP = 417; +const int LIGHT_XX = 15; +const int OPPOSIT_DC = 14; +const int OPPOSIT_FE = 5018; +const int OPPOSIT_IP = 418; +const int OPPOSIT_XX = 15; +const int REFLECT_DC = 27; +const int REFLECT_FE = 5019; +const int REFLECT_IP = 419; +const int REFLECT_XX = 15; +const int REVEAL_DC = 19; +const int REVEAL_FE = 5020; +const int REVEAL_IP = 420; +const int REVEAL_XX = 15; +const int SHADOW_DC = 21; +const int SHADOW_FE = 5021; +const int SHADOW_IP = 421; +const int SHADOW_XX = 15; +const int SLAY_DC = 25; +const int SLAY_FE = 5022; +const int SLAY_IP = 422; +const int SLAY_XX = 15; +const int SUMMON_DC = 14; +const int SUMMON_FE = 5023; +const int SUMMON_IP = 423; +const int SUMMON_XX = 15; +const int TIME_DC = 19; +const int TIME_FE = 5024; +const int TIME_IP = 424; +const int TIME_XX = 15; +const int TRANSFO_DC = 21; +const int TRANSFO_FE = 5025; +const int TRANSFO_IP = 425; +const int TRANSFO_XX = 15; +const int TRANSPO_DC = 27; +const int TRANSPO_FE = 5026; +const int TRANSPO_IP = 426; +const int TRANSPO_XX = 15; +const int WARD_DC = 14; +const int WARD_FE = 5027; +const int WARD_IP = 427; +const int WARD_XX = 15; + +//CONSTANTS FOR EACH EPIC SPELL +/////////////////////////////////////////////////////////////////////////////// +// EXAMPLE EPIC SPELL: "BLAH" +// const int BLAH_DC is for the DC of the spell for casting and researching. +// NOTE! Changing the DC will affect the costs of researching it as well! +// const int BLAH_IP is the line number of the CASTABLE feat in iprp_feats.2da. +// const int R_BLAH_IP is for the line number of the RESEARCHED feat in +// iprp_feats.2da. +// const int BLAH_FE is the line number of the CASTABLE feat in feat.2da. +// const int R_BLAH_FE is the line number of the RESEARCHED feat in feat.2da. +// const int BLAH_XP is the experience point cost for CASTING the spell. +// +// You can have up to four required feats to be able to learn the spell. +// Use the desired SEED_FE constants, +// or even a SPELL_FE constant if you want a +// prerequisite to be another spell. +// You should use the BLAH_R#'s up in order, leaving any unused ones as 0. +// const int BLAH_R1 is the first prerequisite to learn the spell. +// const int BLAH_R2 is the second prerequisite to learn the spell. +// const int BLAH_R3 is the third prerequisite to learn the spell. +// const int BLAH_R4 is the fourth prerequisite to learn the spell. +// +// const string BLAH_S is the school the spell belongs to. +// A = Abjuration +// C = Conjuration +// D = Divination +// E = Enchantment +// V = Evocation +// I = Illusion +// N = Necromancy +// T = Transmutation +/////////////////////////////////////////////////////////////////////////////// + +// EPIC SPELL: Achilles Heel +const int ACHHEEL_DC = 54; +const int ACHHEEL_IP = 429; +const int R_ACHHEEL_IP = 500; +const int ACHHEEL_FE = 5030; +const int R_ACHHEEL_FE = 5031; +const int ACHHEEL_XP = 0; +const int ACHHEEL_R1 = AFFLICT_FE; // Afflict seed +const int ACHHEEL_R2 = WARD_FE; // Ward seed +const int ACHHEEL_R3 = 0; +const int ACHHEEL_R4 = 0; +const string ACHHEEL_S = "A"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: All Hope Lost +const int ALLHOPE_DC = 29; +const int ALLHOPE_IP = 430; +const int R_ALLHOPE_IP = 501; +const int ALLHOPE_FE = 5032; +const int R_ALLHOPE_FE = 5033; +const int ALLHOPE_XP = 0; +const int ALLHOPE_R1 = COMPEL_FE; // Compel seed +const int ALLHOPE_R2 = 0; +const int ALLHOPE_R3 = 0; +const int ALLHOPE_R4 = 0; +const string ALLHOPE_S = "E"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Allied Martyr +const int AL_MART_DC = 47; +const int AL_MART_IP = 431; +const int R_AL_MART_IP = 502; +const int AL_MART_FE = 5034; +const int R_AL_MART_FE = 5035; +const int AL_MART_XP = 0; +const int AL_MART_R1 = HEAL_FE; // Heal seed +const int AL_MART_R2 = FORESEE_FE; // Foresee seed +const int AL_MART_R3 = 0; +const int AL_MART_R4 = 0; +const string AL_MART_S = "D"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Anarchy's Call +const int ANARCHY_DC = 43; +const int ANARCHY_IP = 432; +const int R_ANARCHY_IP = 503; +const int ANARCHY_FE = 5036; +const int R_ANARCHY_FE = 5037; +const int ANARCHY_XP = 0; +const int ANARCHY_R1 = OPPOSIT_FE; // Opposition seed +const int ANARCHY_R2 = COMPEL_FE; // Compel seed +const int ANARCHY_R3 = 0; +const int ANARCHY_R4 = 0; +const string ANARCHY_S = "E"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Animus Blast +const int ANBLAST_DC = 30; +const int ANBLAST_IP = 433; +const int R_ANBLAST_IP = 504; +const int ANBLAST_FE = 5038; +const int R_ANBLAST_FE = 5039; +const int ANBLAST_XP = 0; +const int ANBLAST_R1 = ENERGY_FE; // Energy seed +const int ANBLAST_R2 = ANIDEAD_FE; // Animate Dead seed +const int ANBLAST_R3 = 0; +const int ANBLAST_R4 = 0; +const string ANBLAST_S = "V"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Animus Blizzard +const int ANBLIZZ_DC = 58; +const int ANBLIZZ_IP = 434; +const int R_ANBLIZZ_IP = 505; +const int ANBLIZZ_FE = 5040; +const int R_ANBLIZZ_FE = 5041; +const int ANBLIZZ_XP = 0; +const int ANBLIZZ_R1 = ENERGY_FE; // Energy seed +const int ANBLIZZ_R2 = ANIDEAD_FE; // Animate Dead seed +const int ANBLIZZ_R3 = 0; +const int ANBLIZZ_R4 = 0; +const string ANBLIZZ_S = "V"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Army Unfallen +const int ARMY_UN_DC = 66; +const int ARMY_UN_IP = 435; +const int R_ARMY_UN_IP = 506; +const int ARMY_UN_FE = 5042; +const int R_ARMY_UN_FE = 5043; +const int ARMY_UN_XP = 0; +const int ARMY_UN_R1 = LIFE_FE; // Life seed +const int ARMY_UN_R2 = HEAL_FE; // Heal seed +const int ARMY_UN_R3 = WARD_FE; // Ward seed +const int ARMY_UN_R4 = 0; +const string ARMY_UN_S = "C"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Audience of Stone +const int A_STONE_DC = 41; +const int A_STONE_IP = 436; +const int R_A_STONE_IP = 507; +const int A_STONE_FE = 5044; +const int R_A_STONE_FE = 5045; +const int A_STONE_XP = 0; +const int A_STONE_R1 = TRANSFO_FE; // Transform seed +const int A_STONE_R2 = 0; +const int A_STONE_R3 = 0; +const int A_STONE_R4 = 0; +const string A_STONE_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Battle Bounding +const int BATTLEB_DC = 41; +const int BATTLEB_IP = 437; +const int R_BATTLEB_IP = 508; +const int BATTLEB_FE = 5046; +const int R_BATTLEB_FE = 5047; +const int BATTLEB_XP = 0; +const int BATTLEB_R1 = WARD_FE; // Ward seed +const int BATTLEB_R2 = TRANSPO_FE; // Transport seed +const int BATTLEB_R3 = 0; +const int BATTLEB_R4 = 0; +const string BATTLEB_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Celestial Council +const int CELCOUN_DC = 27; +const int CELCOUN_IP = 438; +const int R_CELCOUN_IP = 509; +const int CELCOUN_FE = 5048; +const int R_CELCOUN_FE = 5049; +const int CELCOUN_XP = 0; +const int CELCOUN_R1 = CONTACT_FE; // Contact seed +const int CELCOUN_R2 = 0; +const int CELCOUN_R3 = 0; +const int CELCOUN_R4 = 0; +const string CELCOUN_S = "D"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Champion's Valor +const int CHAMP_V_DC = 45; +const int CHAMP_V_IP = 439; +const int R_CHAMP_V_IP = 510; +const int CHAMP_V_FE = 5050; +const int R_CHAMP_V_FE = 5051; +const int CHAMP_V_XP = 200; +const int CHAMP_V_R1 = FORTIFY_FE; // Fortify seed +const int CHAMP_V_R2 = 0; +const int CHAMP_V_R3 = 0; +const int CHAMP_V_R4 = 0; +const string CHAMP_V_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Contingent Resurrection +const int CON_RES_DC = 52; +const int CON_RES_IP = 440; +const int R_CON_RES_IP = 511; +const int CON_RES_FE = 5052; +const int R_CON_RES_FE = 5053; +const int CON_RES_XP = 0; +const int CON_RES_R1 = LIFE_FE; // Life seed +const int CON_RES_R2 = 0; +const int CON_RES_R3 = 0; +const int CON_RES_R4 = 0; +const string CON_RES_S = "C"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Contingent Reunion +const int CON_REU_DC = 44; +const int CON_REU_IP = 441; +const int R_CON_REU_IP = 512; +const int CON_REU_FE = 5054; +const int R_CON_REU_FE = 5055; +const int CON_REU_XP = 0; +const int CON_REU_R1 = TRANSPO_FE; // Transport seed +const int CON_REU_R2 = FORESEE_FE; // Foresee seed +const int CON_REU_R3 = 0; +const int CON_REU_R4 = 0; +const string CON_REU_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Deadeye Sense +const int DEADEYE_DC = 47; +const int DEADEYE_IP = 442; +const int R_DEADEYE_IP = 513; +const int DEADEYE_FE = 5056; +const int R_DEADEYE_FE = 5057; +const int DEADEYE_XP = 400; +const int DEADEYE_R1 = FORTIFY_FE; // Fortify seed +const int DEADEYE_R2 = 0; +const int DEADEYE_R3 = 0; +const int DEADEYE_R4 = 0; +const string DEADEYE_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Deathmark +const int DTHMARK_DC = 59; +const int DTHMARK_IP = 443; +const int R_DTHMARK_IP = 514; +const int DTHMARK_FE = 5058; +const int R_DTHMARK_FE = 5059; +const int DTHMARK_XP = 0; +const int DTHMARK_R1 = SLAY_FE; // Slay seed +const int DTHMARK_R2 = TIME_FE; // Time seed +const int DTHMARK_R3 = AFFLICT_FE; // Afflict seed +const int DTHMARK_R4 = 0; +const string DTHMARK_S = "N"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Dire Winter +const int DIREWIN_DC = 99; +const int DIREWIN_IP = 444; +const int R_DIREWIN_IP = 515; +const int DIREWIN_FE = 5060; +const int R_DIREWIN_FE = 5061; +const int DIREWIN_XP = 2000; +const int DIREWIN_R1 = ENERGY_FE; // Energy seed +const int DIREWIN_R2 = 0; +const int DIREWIN_R3 = 0; +const int DIREWIN_R4 = 0; +const string DIREWIN_S = "V"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Dragon Knight +const int DRG_KNI_DC = 48; +const int DRG_KNI_IP = 445; +const int R_DRG_KNI_IP = 516; +const int DRG_KNI_FE = 5062; +const int R_DRG_KNI_FE = 5063; +const int DRG_KNI_XP = 0; +const int DRG_KNI_R1 = SUMMON_FE; // Summon seed +const int DRG_KNI_R2 = 0; +const int DRG_KNI_R3 = 0; +const int DRG_KNI_R4 = 0; +const string DRG_KNI_S = "C"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Dreamscape +const int DREAMSC_DC = 29; +const int DREAMSC_IP = 446; +const int R_DREAMSC_IP = 517; +const int DREAMSC_FE = 5064; +const int R_DREAMSC_FE = 5065; +const int DREAMSC_XP = 0; +const int DREAMSC_R1 = TRANSPO_FE; // Transport seed +const int DREAMSC_R2 = 0; +const int DREAMSC_R3 = 0; +const int DREAMSC_R4 = 0; +const string DREAMSC_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Dullblades +const int DULBLAD_DC = 54; +const int DULBLAD_IP = 447; +const int R_DULBLAD_IP = 518; +const int DULBLAD_FE = 5066; +const int R_DULBLAD_FE = 5067; +const int DULBLAD_XP = 0; +const int DULBLAD_R1 = WARD_FE; // Ward seed +const int DULBLAD_R2 = 0; +const int DULBLAD_R3 = 0; +const int DULBLAD_R4 = 0; +const string DULBLAD_S = "A"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Dweomer Thief +const int DWEO_TH_DC = 65; +const int DWEO_TH_IP = 448; +const int R_DWEO_TH_IP = 519; +const int DWEO_TH_FE = 5068; +const int R_DWEO_TH_FE = 5069; +const int DWEO_TH_XP = 0; +const int DWEO_TH_R1 = REVEAL_FE; // Reveal seed +const int DWEO_TH_R2 = COMPEL_FE; // Compel seed +const int DWEO_TH_R3 = REFLECT_FE; // Reflect seed +const int DWEO_TH_R4 = 0; +const string DWEO_TH_S = "A"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Enslave +const int ENSLAVE_DC = 60; +const int ENSLAVE_IP = 449; +const int R_ENSLAVE_IP = 520; +const int ENSLAVE_FE = 5070; +const int R_ENSLAVE_FE = 5071; +const int ENSLAVE_XP = 3500; +const int ENSLAVE_R1 = COMPEL_FE; // Compel seed +const int ENSLAVE_R2 = 0; +const int ENSLAVE_R3 = 0; +const int ENSLAVE_R4 = 0; +const string ENSLAVE_S = "E"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Epic Mage Armor +const int EP_M_AR_DC = 46; +const int EP_M_AR_IP = 450; +const int R_EP_M_AR_IP = 521; +const int EP_M_AR_FE = 5072; +const int R_EP_M_AR_FE = 5073; +const int EP_M_AR_XP = 0; +const int EP_M_AR_R1 = ARMOR_FE; // Armor seed +const int EP_M_AR_R2 = 0; +const int EP_M_AR_R3 = 0; +const int EP_M_AR_R4 = 0; +const string EP_M_AR_S = "C"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Epic Repulsion +const int EP_RPLS_DC = 34; +const int EP_RPLS_IP = 451; +const int R_EP_RPLS_IP = 522; +const int EP_RPLS_FE = 5074; +const int R_EP_RPLS_FE = 5075; +const int EP_RPLS_XP = 0; +const int EP_RPLS_R1 = WARD_FE; // Ward seed +const int EP_RPLS_R2 = 0; +const int EP_RPLS_R3 = 0; +const int EP_RPLS_R4 = 0; +const string EP_RPLS_S = "A"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Epic Spell Reflection +const int EP_SP_R_DC = 52; +const int EP_SP_R_IP = 452; +const int R_EP_SP_R_IP = 523; +const int EP_SP_R_FE = 5076; +const int R_EP_SP_R_FE = 5077; +const int EP_SP_R_XP = 0; +const int EP_SP_R_R1 = REFLECT_FE; // Reflect seed +const int EP_SP_R_R2 = 0; +const int EP_SP_R_R3 = 0; +const int EP_SP_R_R4 = 0; +const string EP_SP_R_S = "A"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Epic Warding +const int EP_WARD_DC = 68; +const int EP_WARD_IP = 453; +const int R_EP_WARD_IP = 524; +const int EP_WARD_FE = 5078; +const int R_EP_WARD_FE = 5079; +const int EP_WARD_XP = 0; +const int EP_WARD_R1 = WARD_FE; // Ward seed +const int EP_WARD_R2 = 0; +const int EP_WARD_R3 = 0; +const int EP_WARD_R4 = 0; +const string EP_WARD_S = "A"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Eternal Freedom +const int ET_FREE_DC = 101; +const int ET_FREE_IP = 454; +const int R_ET_FREE_IP = 525; +const int ET_FREE_FE = 5080; +const int R_ET_FREE_FE = 5081; +const int ET_FREE_XP = 10000; +const int ET_FREE_R1 = WARD_FE; // Ward seed +const int ET_FREE_R2 = 0; +const int ET_FREE_R3 = 0; +const int ET_FREE_R4 = 0; +const string ET_FREE_S = "A"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Fiendish Words +const int FIEND_W_DC = 27; +const int FIEND_W_IP = 455; +const int R_FIEND_W_IP = 526; +const int FIEND_W_FE = 5082; +const int R_FIEND_W_FE = 5083; +const int FIEND_W_XP = 0; +const int FIEND_W_R1 = CONTACT_FE; // Contact seed +const int FIEND_W_R2 = 0; +const int FIEND_W_R3 = 0; +const int FIEND_W_R4 = 0; +const string FIEND_W_S = "D"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Fleetness of Foot +const int FLEETNS_DC = 32; +const int FLEETNS_IP = 456; +const int R_FLEETNS_IP = 527; +const int FLEETNS_FE = 5084; +const int R_FLEETNS_FE = 5085; +const int FLEETNS_XP = 0; +const int FLEETNS_R1 = FORTIFY_FE; // Fortify seed +const int FLEETNS_R2 = 0; +const int FLEETNS_R3 = 0; +const int FLEETNS_R4 = 0; +const string FLEETNS_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Gem Cage +const int GEMCAGE_DC = 48; +const int GEMCAGE_IP = 457; +const int R_GEMCAGE_IP = 528; +const int GEMCAGE_FE = 5086; +const int R_GEMCAGE_FE = 5087; +const int GEMCAGE_XP = 0; +const int GEMCAGE_R1 = TRANSFO_FE; // Transform seed +const int GEMCAGE_R2 = TRANSPO_FE; // Transport seed +const int GEMCAGE_R3 = 0; +const int GEMCAGE_R4 = 0; +const string GEMCAGE_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Godsmite +const int GODSMIT_DC = 63; +const int GODSMIT_IP = 458; +const int R_GODSMIT_IP = 529; +const int GODSMIT_FE = 5088; +const int R_GODSMIT_FE = 5089; +const int GODSMIT_XP = 0; +const int GODSMIT_R1 = DESTROY_FE; // Destroy seed +const int GODSMIT_R2 = OPPOSIT_FE; // Opposition seed +const int GODSMIT_R3 = 0; +const int GODSMIT_R4 = 0; +const string GODSMIT_S = "V"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Greater Ruin +const int GR_RUIN_DC = 59; +const int GR_RUIN_IP = 459; +const int R_GR_RUIN_IP = 530; +const int GR_RUIN_FE = 5090; +const int R_GR_RUIN_FE = 5091; +const int GR_RUIN_XP = 0; +const int GR_RUIN_R1 = DESTROY_FE; // Destroy seed +const int GR_RUIN_R2 = 0; +const int GR_RUIN_R3 = 0; +const int GR_RUIN_R4 = 0; +const string GR_RUIN_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Greater Spell Resistance +const int GR_SP_RE_DC = 67; +const int GR_SP_RE_IP = 460; +const int R_GR_SP_RE_IP = 531; +const int GR_SP_RE_FE = 5092; +const int R_GR_SP_RE_FE = 5093; +const int GR_SP_RE_XP = 0; +const int GR_SP_RE_R1 = FORTIFY_FE; // Fortify seed +const int GR_SP_RE_R2 = 0; +const int GR_SP_RE_R3 = 0; +const int GR_SP_RE_R4 = 0; +const string GR_SP_RE_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Greater Timestop +const int GR_TIME_DC = 27; +const int GR_TIME_IP = 461; +const int R_GR_TIME_IP = 532; +const int GR_TIME_FE = 5094; +const int R_GR_TIME_FE = 5095; +const int GR_TIME_XP = 0; +const int GR_TIME_R1 = TIME_FE; // Time seed +const int GR_TIME_R2 = 0; +const int GR_TIME_R3 = 0; +const int GR_TIME_R4 = 0; +const string GR_TIME_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Hell Send +const int HELSEND_DC = 34; +const int HELSEND_IP = 462; +const int R_HELSEND_IP = 533; +const int HELSEND_FE = 5096; +const int R_HELSEND_FE = 5097; +const int HELSEND_XP = 0; +const int HELSEND_R1 = TRANSPO_FE; // Transport seed +const int HELSEND_R2 = 0; +const int HELSEND_R3 = 0; +const int HELSEND_R4 = 0; +const string HELSEND_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Hellball +const int HELBALL_DC = 70; +const int HELBALL_IP = 463; +const int R_HELBALL_IP = 534; +const int HELBALL_FE = 5098; +const int R_HELBALL_FE = 5099; +const int HELBALL_XP = 400; +const int HELBALL_R1 = ENERGY_FE; // Energy seed +const int HELBALL_R2 = 0; +const int HELBALL_R3 = 0; +const int HELBALL_R4 = 0; +const string HELBALL_S = "V"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Herculean Alliance +const int HERCALL_DC = 61; +const int HERCALL_IP = 464; +const int R_HERCALL_IP = 535; +const int HERCALL_FE = 5100; +const int R_HERCALL_FE = 5101; +const int HERCALL_XP = 0; +const int HERCALL_R1 = FORTIFY_FE; // Fortify seed +const int HERCALL_R2 = 5103; // the Herculean Empowerment spell researched +const int HERCALL_R3 = 0; +const int HERCALL_R4 = 0; +const string HERCALL_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Herculean Empowerment +const int HERCEMP_DC = 51; +const int HERCEMP_IP = 465; +const int R_HERCEMP_IP = 536; +const int HERCEMP_FE = 5102; +const int R_HERCEMP_FE = 5103; +const int HERCEMP_XP = 0; +const int HERCEMP_R1 = FORTIFY_FE; // Fortify seed +const int HERCEMP_R2 = 0; +const int HERCEMP_R3 = 0; +const int HERCEMP_R4 = 0; +const string HERCEMP_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Impenetrability +const int IMPENET_DC = 54; +const int IMPENET_IP = 466; +const int R_IMPENET_IP = 537; +const int IMPENET_FE = 5104; +const int R_IMPENET_FE = 5105; +const int IMPENET_XP = 0; +const int IMPENET_R1 = WARD_FE; // Ward seed +const int IMPENET_R2 = 0; +const int IMPENET_R3 = 0; +const int IMPENET_R4 = 0; +const string IMPENET_S = "A"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Leech Field +const int LEECH_F_DC = 64; +const int LEECH_F_IP = 467; +const int R_LEECH_F_IP = 538; +const int LEECH_F_FE = 5106; +const int R_LEECH_F_FE = 5107; +const int LEECH_F_XP = 0; +const int LEECH_F_R1 = HEAL_FE; // Heal seed +const int LEECH_F_R2 = 0; +const int LEECH_F_R3 = 0; +const int LEECH_F_R4 = 0; +const string LEECH_F_S = "N"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Legendary Artisan +const int LEG_ART_DC = 78; +const int LEG_ART_IP = 468; +const int R_LEG_ART_IP = 539; +const int LEG_ART_FE = 5108; +const int R_LEG_ART_FE = 5109; +const int LEG_ART_XP = 0; +const int LEG_ART_R1 = TRANSFO_FE; // Transform seed +const int LEG_ART_R2 = FORTIFY_FE; // Fortify seed +const int LEG_ART_R3 = ENERGY_FE; // Energy seed +const int LEG_ART_R4 = CONJURE_FE; // Conjure seed +const string LEG_ART_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Life Force Transfer +const int LIFE_FT_DC = 0; +const int LIFE_FT_IP = 469; +const int R_LIFE_FT_IP = 540; +const int LIFE_FT_FE = 5110; +const int R_LIFE_FT_FE = 5111; +const int LIFE_FT_XP = 0; +const int LIFE_FT_R1 = 0; +const int LIFE_FT_R2 = 0; +const int LIFE_FT_R3 = 0; +const int LIFE_FT_R4 = 0; +const string LIFE_FT_S = "C"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Magma Burst +const int MAGMA_B_DC = 80; +const int MAGMA_B_IP = 470; +const int R_MAGMA_B_IP = 541; +const int MAGMA_B_FE = 5112; +const int R_MAGMA_B_FE = 5113; +const int MAGMA_B_XP = 0; +const int MAGMA_B_R1 = ENERGY_FE; // Energy seed +const int MAGMA_B_R2 = TRANSFO_FE; // Transform seed +const int MAGMA_B_R3 = 0; +const int MAGMA_B_R4 = 0; +const string MAGMA_B_S = "V"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Mass Penguin +const int MASSPEN_DC = 35; +const int MASSPEN_IP = 471; +const int R_MASSPEN_IP = 542; +const int MASSPEN_FE = 5114; +const int R_MASSPEN_FE = 5115; +const int MASSPEN_XP = 0; +const int MASSPEN_R1 = TRANSFO_FE; // Transform seed +const int MASSPEN_R2 = 0; +const int MASSPEN_R3 = 0; +const int MASSPEN_R4 = 0; +const string MASSPEN_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Momento Mori +const int MORI_DC = 78; +const int MORI_IP = 472; +const int R_MORI_IP = 543; +const int MORI_FE = 5116; +const int R_MORI_FE = 5117; +const int MORI_XP = 0; +const int MORI_R1 = SLAY_FE; // Slay seed. +const int MORI_R2 = 0; +const int MORI_R3 = 0; +const int MORI_R4 = 0; +const string MORI_S = "N"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Mummy Dust +const int MUMDUST_DC = 35; +const int MUMDUST_IP = 473; +const int R_MUMDUST_IP = 544; +const int MUMDUST_FE = 5118; +const int R_MUMDUST_FE = 5119; +const int MUMDUST_XP = 0; +const int MUMDUST_R1 = ANIDEAD_FE; // Animate Dead seed +const int MUMDUST_R2 = 0; +const int MUMDUST_R3 = 0; +const int MUMDUST_R4 = 0; +const string MUMDUST_S = "N"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Nailed to the Sky +const int NAILSKY_DC = 42; +const int NAILSKY_IP = 474; +const int R_NAILSKY_IP = 545; +const int NAILSKY_FE = 5120; +const int R_NAILSKY_FE = 5121; +const int NAILSKY_XP = 1000; +const int NAILSKY_R1 = FORESEE_FE; // Foresee seed +const int NAILSKY_R2 = TRANSPO_FE; // Transport seed +const int NAILSKY_R3 = 0; +const int NAILSKY_R4 = 0; +const string NAILSKY_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Night's Undoing +const int NIGHTSU_DC = 24; +const int NIGHTSU_IP = 475; +const int R_NIGHTSU_IP = 546; +const int NIGHTSU_FE = 5122; +const int R_NIGHTSU_FE = 5123; +const int NIGHTSU_XP = 0; +const int NIGHTSU_R1 = LIGHT_FE; // Light seed +const int NIGHTSU_R2 = 0; +const int NIGHTSU_R3 = 0; +const int NIGHTSU_R4 = 0; +const string NIGHTSU_S = "V"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Order Restored +const int ORDER_R_DC = 43; +const int ORDER_R_IP = 476; +const int R_ORDER_R_IP = 547; +const int ORDER_R_FE = 5124; +const int R_ORDER_R_FE = 5125; +const int ORDER_R_XP = 0; +const int ORDER_R_R1 = OPPOSIT_FE; // Opposition seed +const int ORDER_R_R2 = COMPEL_FE; // Compel seed +const int ORDER_R_R3 = 0; +const int ORDER_R_R4 = 0; +const string ORDER_R_S = "E"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Paths Become Known +const int PATHS_B_DC = 36; +const int PATHS_B_IP = 477; +const int R_PATHS_B_IP = 548; +const int PATHS_B_FE = 5126; +const int R_PATHS_B_FE = 5127; +const int PATHS_B_XP = 0; +const int PATHS_B_R1 = FORESEE_FE; // Foresee seed +const int PATHS_B_R2 = REVEAL_FE; // Reveal seed +const int PATHS_B_R3 = 0; +const int PATHS_B_R4 = 0; +const string PATHS_B_S = "D"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Peerless Penitence +const int PEERPEN_DC = 68; +const int PEERPEN_IP = 478; +const int R_PEERPEN_IP = 549; +const int PEERPEN_FE = 5128; +const int R_PEERPEN_FE = 5129; +const int PEERPEN_XP = 1000; +const int PEERPEN_R1 = HEAL_FE; // Heal seed +const int PEERPEN_R2 = OPPOSIT_FE; // Opposition seed +const int PEERPEN_R3 = DESTROY_FE; // Destroy seed +const int PEERPEN_R4 = 0; +const string PEERPEN_S = "V"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Pestilence +const int PESTIL_DC = 44; +const int PESTIL_IP = 479; +const int R_PESTIL_IP = 550; +const int PESTIL_FE = 5130; +const int R_PESTIL_FE = 5131; +const int PESTIL_XP = 600; +const int PESTIL_R1 = AFFLICT_FE; // Afflict seed +const int PESTIL_R2 = 0; +const int PESTIL_R3 = 0; +const int PESTIL_R4 = 0; +const string PESTIL_S = "N"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Pious Parley +const int PIOUS_P_DC = 36; +const int PIOUS_P_IP = 480; +const int R_PIOUS_P_IP = 551; +const int PIOUS_P_FE = 5132; +const int R_PIOUS_P_FE = 5133; +const int PIOUS_P_XP = 0; +const int PIOUS_P_R1 = CONTACT_FE; // Contact seed +const int PIOUS_P_R2 = 0; +const int PIOUS_P_R3 = 0; +const int PIOUS_P_R4 = 0; +const string PIOUS_P_S = "D"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Planar Cell +const int PLANCEL_DC = 51; +const int PLANCEL_IP = 481; +const int R_PLANCEL_IP = 552; +const int PLANCEL_FE = 5134; +const int R_PLANCEL_FE = 5135; +const int PLANCEL_XP = 0; +const int PLANCEL_R1 = TRANSPO_FE; // Transport seed +const int PLANCEL_R2 = 0; +const int PLANCEL_R3 = 0; +const int PLANCEL_R4 = 0; +const string PLANCEL_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Psionic Salvo +const int PSION_S_DC = 74; +const int PSION_S_IP = 482; +const int R_PSION_S_IP = 553; +const int PSION_S_FE = 5136; +const int R_PSION_S_FE = 5137; +const int PSION_S_XP = 0; +const int PSION_S_R1 = AFFLICT_FE; // Afflict seed +const int PSION_S_R2 = 0; +const int PSION_S_R3 = 0; +const int PSION_S_R4 = 0; +const string PSION_S_S = "E"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Rain of Fire +const int RAINFIR_DC = 75; +const int RAINFIR_IP = 483; +const int R_RAINFIR_IP = 554; +const int RAINFIR_FE = 5138; +const int R_RAINFIR_FE = 5139; +const int RAINFIR_XP = 500; +const int RAINFIR_R1 = ENERGY_FE; // Energy seed +const int RAINFIR_R2 = 0; +const int RAINFIR_R3 = 0; +const int RAINFIR_R4 = 0; +const string RAINFIR_S = "V"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Risen Reunited +const int RISEN_R_DC = 67; +const int RISEN_R_IP = 484; +const int R_RISEN_R_IP = 555; +const int RISEN_R_FE = 5140; +const int R_RISEN_R_FE = 5141; +const int RISEN_R_XP = 0; +const int RISEN_R_R1 = TRANSPO_FE; // Transport seed +const int RISEN_R_R2 = CONTACT_FE; // Contact seed +const int RISEN_R_R3 = LIFE_FE; // Life seed +const int RISEN_R_R4 = 0; +const string RISEN_R_S = "C"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Ruin +const int RUIN_DC = 29; +const int RUIN_IP = 485; +const int R_RUIN_IP = 556; +const int RUIN_FE = 5142; +const int R_RUIN_FE = 5143; +const int RUIN_XP = 0; +const int RUIN_R1 = DESTROY_FE; // Destroy seed +const int RUIN_R2 = 0; +const int RUIN_R3 = 0; +const int RUIN_R4 = 0; +const string RUIN_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Singular Sunder +const int SINGSUN_DC = 58; +const int SINGSUN_IP = 486; +const int R_SINGSUN_IP = 557; +const int SINGSUN_FE = 5144; +const int R_SINGSUN_FE = 5145; +const int SINGSUN_XP = 0; +const int SINGSUN_R1 = DESTROY_FE; // Destroy seed +const int SINGSUN_R2 = DISPEL_FE; // Dispel seed +const int SINGSUN_R3 = 0; +const int SINGSUN_R4 = 0; +const string SINGSUN_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Spell Worm +const int SP_WORM_DC = 25; +const int SP_WORM_IP = 487; +const int R_SP_WORM_IP = 558; +const int SP_WORM_FE = 5146; +const int R_SP_WORM_FE = 5147; +const int SP_WORM_XP = 0; +const int SP_WORM_R1 = COMPEL_FE; // Compel seed +const int SP_WORM_R2 = 0; +const int SP_WORM_R3 = 0; +const int SP_WORM_R4 = 0; +const string SP_WORM_S = "E"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Storm Mantle +const int STORM_M_DC = 74; +const int STORM_M_IP = 488; +const int R_STORM_M_IP = 559; +const int STORM_M_FE = 5148; +const int R_STORM_M_FE = 5149; +const int STORM_M_XP = 0; +const int STORM_M_R1 = WARD_FE; // Ward seed +const int STORM_M_R2 = 0; +const int STORM_M_R3 = 0; +const int STORM_M_R4 = 0; +const string STORM_M_S = "A"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Summon Aberration +const int SUMABER_DC = 42; +const int SUMABER_IP = 489; +const int R_SUMABER_IP = 560; +const int SUMABER_FE = 5150; +const int R_SUMABER_FE = 5151; +const int SUMABER_XP = 0; +const int SUMABER_R1 = SUMMON_FE; // Summon seed +const int SUMABER_R2 = 0; +const int SUMABER_R3 = 0; +const int SUMABER_R4 = 0; +const string SUMABER_S = "C"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Superb Dispelling +const int SUP_DIS_DC = 59; +const int SUP_DIS_IP = 490; +const int R_SUP_DIS_IP = 561; +const int SUP_DIS_FE = 5152; +const int R_SUP_DIS_FE = 5153; +const int SUP_DIS_XP = 0; +const int SUP_DIS_R1 = DISPEL_FE; // Dispel seed +const int SUP_DIS_R2 = 0; +const int SUP_DIS_R3 = 0; +const int SUP_DIS_R4 = 0; +const string SUP_DIS_S = "A"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Symrustar's Spellbinding +const int SYMRUST_DC = 0; +const int SYMRUST_IP = 491; +const int R_SYMRUST_IP = 562; +const int SYMRUST_FE = 5154; +const int R_SYMRUST_FE = 5155; +const int SYMRUST_XP = 0; +const int SYMRUST_R1 = 0; +const int SYMRUST_R2 = 0; +const int SYMRUST_R3 = 0; +const int SYMRUST_R4 = 0; +const string SYMRUST_S = "E"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: The Withering +const int THEWITH_DC = 69; +const int THEWITH_IP = 492; +const int R_THEWITH_IP = 563; +const int THEWITH_FE = 5156; +const int R_THEWITH_FE = 5157; +const int THEWITH_XP = 300; +const int THEWITH_R1 = AFFLICT_FE; // Afflict seed +const int THEWITH_R2 = 0; +const int THEWITH_R3 = 0; +const int THEWITH_R4 = 0; +const string THEWITH_S = "N"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Tolodine's Killing Wind +const int TOLO_KW_DC = 91; +const int TOLO_KW_IP = 493; +const int R_TOLO_KW_IP = 564; +const int TOLO_KW_FE = 5158; +const int R_TOLO_KW_FE = 5159; +const int TOLO_KW_XP = 400; +const int TOLO_KW_R1 = AFFLICT_FE; // Afflict seed +const int TOLO_KW_R2 = SLAY_FE; // Slay seed +const int TOLO_KW_R3 = 0; +const int TOLO_KW_R4 = 0; +const string TOLO_KW_S = "N"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Transcendent Vitality +const int TRANVIT_DC = 101; +const int TRANVIT_IP = 494; +const int R_TRANVIT_IP = 565; +const int TRANVIT_FE = 5160; +const int R_TRANVIT_FE = 5161; +const int TRANVIT_XP = 10000; +const int TRANVIT_R1 = FORTIFY_FE; // Fortify seed +const int TRANVIT_R2 = HEAL_FE; // Heal seed +const int TRANVIT_R3 = 0; +const int TRANVIT_R4 = 0; +const string TRANVIT_S = "T"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Twinfiend +const int TWINF_DC = 64; +const int TWINF_IP = 495; +const int R_TWINF_IP = 566; +const int TWINF_FE = 5162; +const int R_TWINF_FE = 5163; +const int TWINF_XP = 0; +const int TWINF_R1 = SUMMON_FE; // Summon seed +const int TWINF_R2 = 0; +const int TWINF_R3 = 0; +const int TWINF_R4 = 0; +const string TWINF_S = "C"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Unholy Disciple +const int UNHOLYD_DC = 47; +const int UNHOLYD_IP = 496; +const int R_UNHOLYD_IP = 567; +const int UNHOLYD_FE = 5164; +const int R_UNHOLYD_FE = 5165; +const int UNHOLYD_XP = 300; +const int UNHOLYD_R1 = SUMMON_FE; // Summon seed +const int UNHOLYD_R2 = 0; +const int UNHOLYD_R3 = 0; +const int UNHOLYD_R4 = 0; +const string UNHOLYD_S = "N"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Unimpinged +const int UNIMPIN_DC = 54; +const int UNIMPIN_IP = 497; +const int R_UNIMPIN_IP = 568; +const int UNIMPIN_FE = 5166; +const int R_UNIMPIN_FE = 5167; +const int UNIMPIN_XP = 0; +const int UNIMPIN_R1 = WARD_FE; // Ward seed +const int UNIMPIN_R2 = 0; +const int UNIMPIN_R3 = 0; +const int UNIMPIN_R4 = 0; +const string UNIMPIN_S = "A"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Unseen Wanderer +const int UNSEENW_DC = 101; +const int UNSEENW_IP = 498; +const int R_UNSEENW_IP = 569; +const int UNSEENW_FE = 5168; +const int R_UNSEENW_FE = 5169; +const int UNSEENW_XP = 10000; +const int UNSEENW_R1 = CONCEAL_FE; // Conceal seed +const int UNSEENW_R2 = 0; +const int UNSEENW_R3 = 0; +const int UNSEENW_R4 = 0; +const string UNSEENW_S = "I"; +/////////////////////////////////////////////////////////////////////////////// +// EPIC SPELL: Whip of Shar +const int WHIP_SH_DC = 73; +const int WHIP_SH_IP = 499; +const int R_WHIP_SH_IP = 570; +const int WHIP_SH_FE = 5170; +const int R_WHIP_SH_FE = 5171; +const int WHIP_SH_XP = 0; +const int WHIP_SH_R1 = SHADOW_FE; // Shadow seed +const int WHIP_SH_R2 = CONJURE_FE; // Conjure seed +const int WHIP_SH_R3 = TRANSFO_FE; // Transform seed +const int WHIP_SH_R4 = 0; +const string WHIP_SH_S = "V"; +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +*/ + + + diff --git a/src/include/inc_epicspellfnc.nss b/src/include/inc_epicspellfnc.nss new file mode 100644 index 0000000..7fb6054 --- /dev/null +++ b/src/include/inc_epicspellfnc.nss @@ -0,0 +1,273 @@ + +int GetFeatForSeed(int nSeedID); +int GetIPForSeed(int nSeedID); +int GetDCForSeed(int nSeedID); +int GetClassForSeed(int nSeedID); +int GetCanLearnSeed(object oPC, int nSeedID); +int GetSeedFromAbrev(string sAbrev); +string GetNameForSeed(int nSeedID); + +int GetDCForSpell(int nSpellID); +int GetFeatForSpell(int nSpellID); +int GetResearchFeatForSpell(int nSpellID); +int GetIPForSpell(int nSpellID); +int GetResearchIPForSpell(int nSpellID); +int GetCastXPForSpell(int nSpellID); +string GetSchoolForSpell(int nSpellID); +int GetR1ForSpell(int nSpellID); +int GetR2ForSpell(int nSpellID); +int GetR3ForSpell(int nSpellID); +int GetR4ForSpell(int nSpellID); +string GetNameForSpell(int nSpellID); +int GetSpellFromAbrev(string sAbrev); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "inc_utility" +//#include "inc_epicspelldef" + +// SEED FUNCTIONS + +int GetFeatForSeed(int nSeedID) +{ + return StringToInt(Get2DACache("epicspellseeds", "FeatID", nSeedID)); +} + +int GetIPForSeed(int nSeedID) +{ + return StringToInt(Get2DACache("epicspellseeds", "FeatIPID", nSeedID)); +} + +int GetDCForSeed(int nSeedID) +{ + return StringToInt(Get2DACache("epicspellseeds", "DC", nSeedID)); +} + +int GetClassForSeed(int nSeedID) +{ + return StringToInt(Get2DACache("epicspellseeds", "Class", nSeedID)); +} + +int GetSeedFromAbrev(string sAbrev) +{ + sAbrev = GetStringLowerCase(sAbrev); + if(GetStringLeft(sAbrev, 8) == "epic_sd_") + sAbrev = GetStringRight(sAbrev, GetStringLength(sAbrev)-8); + int i = 0; + string sLabel = GetStringLowerCase(Get2DACache("epicspellseeds", "LABEL", i)); + while(sLabel != "") + { + if(sAbrev == sLabel) + return i; + i++; + sLabel = GetStringLowerCase(Get2DACache("epicspellseeds", "LABEL", i)); + } + return -1; +} + +string GetNameForSeed(int nSeedID) +{ + int nFeat = GetFeatForSeed(nSeedID); + string sName = GetStringByStrRef(StringToInt(Get2DACache("feat", "FEAT", nFeat))); + return sName; +} + +/* +Bit-flags set in epicspellseeds.2da in Class column +used to restrict access to epic spell seeds for some classes +ie: 13 means that only clerics, sorcerers and wizards can learn that seed (1 + 4 + 8), +all classes can use == 32767 +*/ +int _Class2BitFlag(int nClass) +{ + switch(nClass) + { + case CLASS_TYPE_CLERIC: return 1; + case CLASS_TYPE_DRUID: return 2; + case CLASS_TYPE_SORCERER: return 4; + case CLASS_TYPE_WIZARD: return 8; + case CLASS_TYPE_HEALER: return 16; + case CLASS_TYPE_BEGUILER: return 32; + case CLASS_TYPE_SUBLIME_CHORD: return 64; + case CLASS_TYPE_DREAD_NECROMANCER: return 128; + case CLASS_TYPE_MYSTIC: return 256; + case CLASS_TYPE_ARCHIVIST: return 512; + case CLASS_TYPE_SHAMAN: return 4096; + case CLASS_TYPE_FAVOURED_SOUL: return 8192; + case CLASS_TYPE_WARMAGE: return 16384; + case CLASS_TYPE_UR_PRIEST: return 1; + case CLASS_TYPE_BLIGHTER: return 2; + } + return -1; +} + +int _CheckEpicSpellcastingForClass(object oPC, int nClass) +{ + if(GetHitDice(oPC) < 21) + return FALSE; + + switch(nClass) + { + case CLASS_TYPE_CLERIC: return GetIsEpicCleric(oPC); + case CLASS_TYPE_DRUID: return GetIsEpicDruid(oPC); + case CLASS_TYPE_SORCERER: return GetIsEpicSorcerer(oPC); + case CLASS_TYPE_WIZARD: return GetIsEpicWizard(oPC); + case CLASS_TYPE_HEALER: return GetIsEpicHealer(oPC); + case CLASS_TYPE_BEGUILER: return GetIsEpicBeguiler(oPC); + case CLASS_TYPE_SUBLIME_CHORD: return GetIsEpicSublimeChord(oPC); + case CLASS_TYPE_DREAD_NECROMANCER: return GetIsEpicDreadNecromancer(oPC); + case CLASS_TYPE_ARCHIVIST: return GetIsEpicArchivist(oPC); + case CLASS_TYPE_SHAMAN: return GetIsEpicShaman(oPC); + case CLASS_TYPE_FAVOURED_SOUL: return GetIsEpicFavSoul(oPC); + case CLASS_TYPE_WARMAGE: return GetIsEpicWarmage(oPC); + case CLASS_TYPE_BLIGHTER: return GetIsEpicBlighter(oPC); + case CLASS_TYPE_UR_PRIEST: return GetIsEpicUrPriest(oPC); + } + return FALSE; +} + +int GetCanLearnSeed(object oPC, int nSeedID) +{ + int nRestr = GetClassForSeed(nSeedID); + int i, nClass; + for(i = 1; i <= 8; i++) + { + nClass = GetClassByPosition(i, oPC); + if(_CheckEpicSpellcastingForClass(oPC, nClass)//this class has epic spellcasting + && (nRestr & _Class2BitFlag(nClass)))//and was added to class column in epicspellseeds.2da + { + return TRUE; + } + } + return FALSE; +} + +// SPELL FUNCTIONS + +int GetDCForSpell(int nSpellID) +{ + return StringToInt(Get2DACache("epicspells", "DC", nSpellID)); +} + +int GetFeatForSpell(int nSpellID) +{ + return StringToInt(Get2DACache("epicspells", "SpellFeatID", nSpellID)); +} + +int GetResearchFeatForSpell(int nSpellID) +{ + return StringToInt(Get2DACache("epicspells", "ResFeatID", nSpellID)); +} + +int GetIPForSpell(int nSpellID) +{ + return StringToInt(Get2DACache("epicspells", "SpellFeatIPID", nSpellID)); +} + +int GetResearchIPForSpell(int nSpellID) +{ + return StringToInt(Get2DACache("epicspells", "ResFeatIPID", nSpellID)); +} + +int GetCastXPForSpell(int nSpellID) +{ + return StringToInt(Get2DACache("epicspells", "CastingXP", nSpellID)); +} + +string GetSchoolForSpell(int nSpellID) +{ + return Get2DACache("epicspells", "School", nSpellID); +} + +int GetR1ForSpell(int nSpellID) +{ + return StringToInt(Get2DACache("epicspells", "Prereq1", nSpellID)); +} + +int GetR2ForSpell(int nSpellID) +{ + return StringToInt(Get2DACache("epicspells", "Prereq2", nSpellID)); +} + +int GetR3ForSpell(int nSpellID) +{ + return StringToInt(Get2DACache("epicspells", "Prereq3", nSpellID)); +} + +int GetR4ForSpell(int nSpellID) +{ + return StringToInt(Get2DACache("epicspells", "Prereq4", nSpellID)); +} + +int GetS1ForSpell(int nSpellID) +{ + string sSeed = Get2DACache("epicspells", "PrereqSeed1", nSpellID); + if(sSeed == "") + return -1; + return StringToInt(sSeed); +} + +int GetS2ForSpell(int nSpellID) +{ + string sSeed = Get2DACache("epicspells", "PrereqSeed2", nSpellID); + if(sSeed == "") + return -1; + return StringToInt(sSeed); +} + +int GetS3ForSpell(int nSpellID) +{ + string sSeed = Get2DACache("epicspells", "PrereqSeed3", nSpellID); + if(sSeed == "") + return -1; + return StringToInt(sSeed); +} + +int GetS4ForSpell(int nSpellID) +{ + string sSeed = Get2DACache("epicspells", "PrereqSeed4", nSpellID); + if(sSeed == "") + return -1; + return StringToInt(sSeed); +} + +int GetS5ForSpell(int nSpellID) +{ + string sSeed = Get2DACache("epicspells", "PrereqSeed5", nSpellID); + if(sSeed == "") + return -1; + return StringToInt(sSeed); +} + +int GetSpellFromAbrev(string sAbrev) +{ + sAbrev = GetStringLowerCase(sAbrev); + if(GetStringLeft(sAbrev, 8) == "epic_sp_") + sAbrev = GetStringRight(sAbrev, GetStringLength(sAbrev)-8); + if(DEBUG) DoDebug("sAbrev to check vs: " + sAbrev); + int i = 0; + string sLabel = GetStringLowerCase(Get2DACache("epicspells", "LABEL", i)); + while(sLabel != "") + { + if(DEBUG) DoDebug("sLabel to check vs: " + sLabel); + if(sAbrev == sLabel) + { + if(DEBUG) DoDebug("SpellID: " + IntToString(i)); + return i; + } + i++; + sLabel = GetStringLowerCase(Get2DACache("epicspells", "LABEL", i)); + } + return -1; +} + +string GetNameForSpell(int nSpellID) +{ + int nFeat = GetFeatForSpell(nSpellID); + string sName = GetStringByStrRef(StringToInt(Get2DACache("feat", "FEAT", nFeat))); + return sName; +} + +//:: void main (){} \ No newline at end of file diff --git a/src/include/inc_epicspells.nss b/src/include/inc_epicspells.nss new file mode 100644 index 0000000..ec3eac9 --- /dev/null +++ b/src/include/inc_epicspells.nss @@ -0,0 +1,857 @@ +//::////////////////////////////////////////////// +//:: FileName: "inc_epicspells" +/* Purpose: This is the #include file that contains all constants and + functions needed for the Epic Spellcasting System. +*/ +//::////////////////////////////////////////////// +//:: Created By: Boneshank (Don Armstrong) +//:: Last Updated On: March 18, 2004 +//::////////////////////////////////////////////// + +/* +CONSTANTS FOR OPTIONAL FEATURES +*/ +/* moved to prc_inc_switch as runtime switches rather than compiletime + +// Use the "XP Costs" option, making casters expend some experience when they +// cast certain spells? +const int XP_COSTS = TRUE; + +// Use the "Take 10" variant rule? +// If TRUE, all Spellcraft checks will be automatically equal to the caster's +// Spellcraft skill level, plus 10. The outcome is never a surprise. +// If FALSE, every Spellcraft check is a roll of the dice, being equal to the +// caster's Spellcraft skill level, plus 1d20. Risky, but more fun! +const int TAKE_TEN_RULE = FALSE; + +// Use the "Primary Ability Modifier Bonus to Skills" variant rule? +// If TRUE, caster's use their primary ability (WISDOM for clerics and druids, +// CHARISMA for sorcerers) instead of intelligence as a modifier on their +// Spellcraft checks for casting and researching epic spells, as well as +// their total Lore skill level for determining spell slots per day. +const int PRIMARY_ABILITY_MODIFIER_RULE = TRUE; + +// Enable BACKLASH damage on spells? TRUE for yes, FALSE for no. +const int BACKLASH_DAMAGE = TRUE; + +// Sets the DC adjustment active or inactive for researching spells. +// If TRUE, the player's spell foci feats are used to lower the spell's DC which +// lowers the overall costs of researching the spell. For example, if the +// spell is from the school of Necromancy, and the player has the feat Epic +// Spell Focus: Necromancy, then the DC for the rearch would be lowered by +// six. This would (under default ELHB settings) lower the gold cost by +// 54000 gold and 2160 exp. points, as well as makee the spell accessible +// to the player earlier and with a greater chance of success (due to the +// Spellcraft check). +// Setting this to FALSE will disable this feature. +const int FOCI_ADJUST_DC = TRUE; + +// This sets the multiplier for the cost, in gold, to a player for the +// researching of an epic spell. The number is multiplied by the DC of +// the spell to be researched. ELHB default is 9000. +const int GOLD_MULTIPLIER = 9000; + +// This sets the number to divide the gold cost by to determine the cost, +// in experience, to research an epic spell. The formula is as follows: +// XP Cost = Spell's DC x GOLD_MULTIPLIER / XP_FRACTION. The default from +// the ELHB is 25. +const int XP_FRACTION = 25; + +// Set the number you want to divide the gold cost by for research failures. +// Examples: 2 would result in half the loss of the researcher's gold. +// 3 would result in a third of the gold lost. +// 4 would result in a quarter, etc. +const int FAILURE_FRACTION_GOLD = 2; + +// Sets the percentage chance that a seed book is destroyed on a use of it. +// 0 = the book is never randomly destroyed from reading (using) it. +// 100 = the book is always destroyed from reading it. +// NOTE! This function is only ever called when the player actually acquires +// the seed feat. It is a way to control mass "gift-giving" amongst players +const int BOOK_DESTRUCTION = 50; +*/ + + +// Play cutscenes for learning Epic Spell Seeds and researching Epic Spells? +const int PLAY_RESEARCH_CUTS = FALSE; +const int PLAY_SPELLSEED_CUT = FALSE; + +// What school of magic does each spell belong to? (for research cutscenes) +// A = Abjuration +// C = Conjuration +// D = Divination +// E = Enchantment +// V = Evocation +// I = Illusion +// N = Necromancy +// T = Transmutation +// Between the quotation marks, enter the name of the cutscene script. +const string SCHOOL_A = ""; +const string SCHOOL_C = ""; +const string SCHOOL_D = ""; +const string SCHOOL_E = ""; +const string SCHOOL_V = ""; +const string SCHOOL_I = ""; +const string SCHOOL_N = ""; +const string SCHOOL_T = ""; +const string SPELLSEEDS_CUT = ""; + + + +/****************************************************************************** +FUNCTION DECLARATIONS +******************************************************************************/ + + + +// Returns the combined caster level of oPC. +int GetTotalCastingLevel(object oPC); + +// returns TRUE if oPC is an Epic level Dread Necromancer +int GetIsEpicDreadNecromancer(object oPC); + +// returns TRUE if oPC is an Epic level warmage +int GetIsEpicWarmage(object oPC); + +// returns TRUE if oPC is an Epic level healer. +int GetIsEpicHealer(object oPC); + +// returns TRUE if oPC is an Epic level favored soul. +int GetIsEpicFavSoul(object oPC); + +// Returns TRUE if oPC is an Epic level cleric. +int GetIsEpicCleric(object oPC); + +// Returns TRUE if oPC is an Epic level druid. +int GetIsEpicDruid(object oPC); + +// Returns TRUE if oPC is an Epic level sorcerer. +int GetIsEpicSorcerer(object oPC); + +// Returns TRUE if oPC is an Epic level wizard. +int GetIsEpicWizard(object oPC); + +// returns TRUE if oPC is an epic level shaman. +int GetIsEpicShaman(object oPC); + +// returns TRUE if oPC is an epic level witch. +int GetIsEpicWitch(object oPC); + +// returns TRUE if oPC is an epic level sublime chord. +int GetIsEpicSublimeChord(object oPC); + +// returns TRUE if oPC is an epic level archivist. +int GetIsEpicArchivist(object oPC); + +// returns TRUE if oPC is an epic level beguiler. +int GetIsEpicBeguiler(object oPC); + +// returns TRUE if oPC is an epic level ur-priest. +int GetIsEpicUrPriest(object oPC); + +// returns TRUE if oPC is an epic level blighter. +int GetIsEpicBlighter(object oPC); + +// returns TRUE if oPC is an Epic spellcaster +int GetIsEpicSpellcaster(object oPC); + +// Performs a check on the book to randomly destroy it or not when used. +void DoBookDecay(object oBook, object oPC); + +// Returns oPC's spell slot limit, based on Lore and on optional rules. +int GetEpicSpellSlotLimit(object oPC); + +// Returns the number of remaining unused spell slots for oPC. +int GetSpellSlots(object oPC); + +// Replenishes oPC's Epic spell slots. +void ReplenishSlots(object oPC); + +// Decrements oPC's Epic spell slots by one. +void DecrementSpellSlots(object oPC); + +// Lets oPC know how many Epic spell slots remain for use. +void MessageSpellSlots(object oPC); + +// Returns a Spellcraft check for oPC, based on optional rules. +int GetSpellcraftCheck(object oPC); + +// Returns the Spellcraft skill level of oPC, based on optional rules. +int GetSpellcraftSkill(object oPC); + +// Returns TRUE if oPC has enough gold to research the spell. +int GetHasEnoughGoldToResearch(object oPC, int nSpellDC); + +// Returns TRUE if oPC has enough excess experience to research the spell. +int GetHasEnoughExperienceToResearch(object oPC, int nSpellDC); + +// Returns TRUE if oPC has the passed in required feats (Seeds or other Epic spells)... needs BLAH_IP's +int GetHasRequiredFeatsForResearch(object oPC, int nReq1, int nReq2 = 0, int nReq3 = 0, int nReq4 = 0, + int nSeed1 = 0, int nSeed2 = 0, int nSeed3 = 0, int nSeed4 = 0, int nSeed5 = 0); + +// Returns success (TRUE) or failure (FALSE) in oPC's researching of a spell. +int GetResearchResult(object oPC, int nSpellDC); + +// Takes the gold & experience (depending on success) from oPC for researching. +void TakeResourcesFromPC(object oPC, int nSpellDC, int nSuccess); + +// Returns TRUE if oPC can cast the spell. +int GetCanCastSpell(object oPC, int nEpicSpell); + +// Returns the adjusted DC of a spell that takes into account oPC's Spell Foci. +int GetDCSchoolFocusAdjustment(object oPC, string sChool); + +// Checks to see if oPC has a creature hide. If not, create and equip one. +void EnsurePCHasSkin(object oPC); + +// Add nFeatIP to oPC's creature hide. +void GiveFeat(object oPC, int nFeatIP); + +// Remove nFeatIP from oPC's creature hide. +void TakeFeat(object oPC, int nFeatIP); + +// Checks to see how many castable epic spell feats oPC has ready to use. +// This is used for the control of the radial menu issue. +int GetCastableFeatCount(object oPC); + +// When a contingency spell is active, oCaster loses the use of one slot per day +void PenalizeSpellSlotForCaster(object oCaster); + +// When a contingecy expires, restore the spell slot for the caster. +void RestoreSpellSlotForCaster(object oCaster); + +// Researches an Epic Spell for the caster. +void DoSpellResearch(object oCaster, int nSpellDC, int nSpellIP, string sSchool, object oBook); + +// Cycles through equipped items on oTarget, and unequips any having nImmunityType +void UnequipAnyImmunityItems(object oTarget, int nImmType); + +// Finds a given spell's DC +int GetEpicSpellSaveDC(object oCaster = OBJECT_SELF, object oTarget = OBJECT_INVALID, int nSpellID = -1); + + +int GetHasEpicSpellKnown(int nEpicSpell, object oPC); +void SetEpicSpellKnown(int nEpicSpell, object oPC, int nState = TRUE); + +int GetHasEpicSeedKnown(int nEpicSeed, object oPC); +void SetEpicSeedKnown(int nEpicSeed, object oPC, int nState = TRUE); + +#include "prc_inc_spells" +#include "prc_class_const" +#include "inc_epicspelldef" +#include "inc_epicspellfnc" +#include "inc_utility" +#include "prc_add_spell_dc" +//#include "x2_inc_spellhook" + + +/****************************************************************************** +FUNCTION BODIES +******************************************************************************/ + +int GetIsEpicArchivist(object oPC) +{ + return GetPrCAdjustedCasterLevel(CLASS_TYPE_ARCHIVIST, oPC, FALSE) > 16 + && GetAbilityScore(oPC, ABILITY_INTELLIGENCE) > 18; +} + +int GetIsEpicBeguiler(object oPC) +{ + return GetPrCAdjustedCasterLevel(CLASS_TYPE_BEGUILER, oPC, FALSE) > 17 + && GetAbilityScore(oPC, ABILITY_INTELLIGENCE) > 18; +} + +int GetIsEpicCleric(object oPC) +{ + return GetPrCAdjustedCasterLevel(CLASS_TYPE_CLERIC, oPC, FALSE) > 16 + && GetAbilityScore(oPC, ABILITY_WISDOM) > 18; +} + +int GetIsEpicDreadNecromancer(object oPC) +{ + return GetPrCAdjustedCasterLevel(CLASS_TYPE_DREAD_NECROMANCER, oPC, FALSE) > 17 + && GetAbilityScore(oPC, ABILITY_CHARISMA) > 18; +} + +int GetIsEpicDruid(object oPC) +{ + return GetPrCAdjustedCasterLevel(CLASS_TYPE_DRUID, oPC, FALSE) > 16 + && GetAbilityScore(oPC, ABILITY_WISDOM) > 18; +} + +int GetIsEpicFavSoul(object oPC) +{ + return GetPrCAdjustedCasterLevel(CLASS_TYPE_FAVOURED_SOUL, oPC, FALSE) > 17 + && GetAbilityScore(oPC, ABILITY_CHARISMA) > 18; +} + +int GetIsEpicHealer(object oPC) +{ + return GetPrCAdjustedCasterLevel(CLASS_TYPE_HEALER, oPC, FALSE) > 16 + && GetAbilityScore(oPC, ABILITY_WISDOM) > 18; +} + +int GetIsEpicUrPriest(object oPC) +{ + return GetPrCAdjustedCasterLevel(CLASS_TYPE_UR_PRIEST, oPC, FALSE) > 8 + && GetAbilityScore(oPC, ABILITY_WISDOM) > 18; +} + +int GetIsEpicShaman(object oPC) +{ + return GetPrCAdjustedCasterLevel(CLASS_TYPE_SHAMAN, oPC, FALSE) > 16 + && GetAbilityScore(oPC, ABILITY_WISDOM) > 18; +} + +int GetIsEpicSorcerer(object oPC) +{ + return GetPrCAdjustedCasterLevel(CLASS_TYPE_SORCERER, oPC, FALSE) > 17 + && GetAbilityScore(oPC, ABILITY_CHARISMA) > 18; +} + +int GetIsEpicSublimeChord(object oPC) +{ + return GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oPC) > 8 + && GetAbilityScore(oPC, ABILITY_CHARISMA) > 18; +} + +int GetIsEpicBlighter(object oPC) +{ + return GetPrCAdjustedCasterLevel(CLASS_TYPE_BLIGHTER, oPC, FALSE) > 8 + && GetAbilityScore(oPC, ABILITY_WISDOM) > 18; +} + +int GetIsEpicWarmage(object oPC) +{ + return GetPrCAdjustedCasterLevel(CLASS_TYPE_WARMAGE, oPC, FALSE) > 17 + && GetAbilityScore(oPC, ABILITY_CHARISMA) > 18; +} + +int GetIsEpicWitch(object oPC) +{ + return GetPrCAdjustedCasterLevel(CLASS_TYPE_WITCH, oPC, FALSE) > 17 + && GetAbilityScore(oPC, ABILITY_WISDOM) > 18; +} + +int GetIsEpicWizard(object oPC) +{ + return GetPrCAdjustedCasterLevel(CLASS_TYPE_WIZARD, oPC, FALSE) >= 17 + && GetAbilityScore(oPC, ABILITY_INTELLIGENCE) > 18; +} + +int GetIsEpicSpellcaster(object oPC) +{ + if(GetHitDice(oPC) < 21) + return FALSE; + + if(GetIsEpicArchivist(oPC) + || GetIsEpicBeguiler(oPC) + || GetIsEpicCleric(oPC) + || GetIsEpicDreadNecromancer(oPC) + || GetIsEpicDruid(oPC) + || GetIsEpicFavSoul(oPC) + || GetIsEpicHealer(oPC) + || GetIsEpicUrPriest(oPC) + || GetIsEpicShaman(oPC) + || GetIsEpicSorcerer(oPC) + || GetIsEpicSublimeChord(oPC) + || GetIsEpicBlighter(oPC) + || GetIsEpicWarmage(oPC) + || GetIsEpicWitch(oPC) + || GetIsEpicWizard(oPC)) + return TRUE; + + return FALSE; +} + +void DoBookDecay(object oBook, object oPC) +{ + if (d100() >= GetPRCSwitch(PRC_EPIC_BOOK_DESTRUCTION)) + { + DestroyObject(oBook, 2.0); + SendMessageToPC(oPC, MES_BOOK_DESTROYED); + } +} + +int GetEpicSpellSlotLimit(object oPC) +{ + int nLimit; + int nPen = GetLocalInt(oPC, "nSpellSlotPenalty"); + int nBon = GetLocalInt(oPC, "nSpellSlotBonus"); + // What's oPC's Lore skill?. + nLimit = GetSkillRank(SKILL_LORE, oPC); + // Variant rule implementation. + if (GetPRCSwitch(PRC_EPIC_PRIMARY_ABILITY_MODIFIER_RULE) == TRUE) + { + if (GetIsEpicSorcerer(oPC) || GetIsEpicFavSoul(oPC) || GetIsEpicWarmage(oPC) || GetIsEpicDreadNecromancer(oPC)) + { + nLimit -= GetAbilityModifier(ABILITY_INTELLIGENCE, oPC); + nLimit += GetAbilityModifier(ABILITY_CHARISMA, oPC); + } + else if (GetIsEpicCleric(oPC) || GetIsEpicDruid(oPC) || GetIsEpicHealer(oPC) || GetIsEpicBlighter(oPC) || GetIsEpicShaman(oPC) || GetIsEpicUrPriest(oPC)) + { + nLimit -= GetAbilityModifier(ABILITY_INTELLIGENCE, oPC); + nLimit += GetAbilityModifier(ABILITY_WISDOM, oPC); + } + } + // Primary calculation of slots. + nLimit /= 10; + // Modified calculation (for contingencies, bonuses, etc) + nLimit = nLimit + nBon; + nLimit = nLimit - nPen; + return nLimit; +} + +int GetSpellSlots(object oPC) +{ + int nSlots = GetLocalInt(oPC, "nEpicSpellSlots"); + if(!GetIsPC(oPC) && !GetLocalInt(oPC, "EpicSpellSlotsReplenished")) + { + nSlots = GetEpicSpellSlotLimit(oPC); + SetLocalInt(oPC, "EpicSpellSlotsReplenished", TRUE); + SetLocalInt(oPC, "nEpicSpellSlots", nSlots); + } + return nSlots; +} + +void ReplenishSlots(object oPC) +{ + SetLocalInt(oPC, "nEpicSpellSlots", GetEpicSpellSlotLimit(oPC)); + MessageSpellSlots(oPC); +} + +void DecrementSpellSlots(object oPC) +{ + SetLocalInt(oPC, "nEpicSpellSlots", GetLocalInt(oPC, "nEpicSpellSlots")-1); + MessageSpellSlots(oPC); +} + +void MessageSpellSlots(object oPC) +{ + SendMessageToPC(oPC, "You now have " + + IntToString(GetSpellSlots(oPC)) + + " Epic spell slots available."); +} + +int GetHasEpicSpellKnown(int nEpicSpell, object oPC) +{ + int nReturn = GetPersistantLocalInt(oPC, "EpicSpellKnown_"+IntToString(nEpicSpell)); + if(!nReturn) + nReturn = GetHasFeat(GetResearchFeatForSpell(nEpicSpell), oPC); + return nReturn; +} + +void SetEpicSpellKnown(int nEpicSpell, object oPC, int nState = TRUE) +{ + SetPersistantLocalInt(oPC, "EpicSpellKnown_"+IntToString(nEpicSpell), nState); +} + +int GetHasEpicSeedKnown(int nEpicSeed, object oPC) +{ + int nReturn = GetPersistantLocalInt(oPC, "EpicSeedKnown_"+IntToString(nEpicSeed)); + if(!nReturn) + nReturn = GetHasFeat(GetFeatForSeed(nEpicSeed), oPC); + return nReturn; +} + +void SetEpicSeedKnown(int nEpicSeed, object oPC, int nState = TRUE) +{ + SetPersistantLocalInt(oPC, "EpicSeedKnown_"+IntToString(nEpicSeed), nState); +} + +int GetSpellcraftCheck(object oPC) +{ + // Get oPC's skill rank. + int nCheck = GetSpellcraftSkill(oPC); + // Do the check, dependant on "Take 10" variant rule. + if (GetPRCSwitch(PRC_EPIC_TAKE_TEN_RULE) == TRUE) + nCheck += 10; + else + nCheck += d20(); + return nCheck; +} + +int GetSpellcraftSkill(object oPC) +{ + // Determine initial Spellcraft skill. + int nSkill = GetSkillRank(SKILL_SPELLCRAFT, oPC); + // Variant rule implementation. + if (GetPRCSwitch(PRC_EPIC_PRIMARY_ABILITY_MODIFIER_RULE) == TRUE) + { + if (GetIsEpicSorcerer(oPC) || GetIsEpicFavSoul(oPC) || GetIsEpicWarmage(oPC) || GetIsEpicDreadNecromancer(oPC)) + { + nSkill -= GetAbilityModifier(ABILITY_INTELLIGENCE, oPC); + nSkill += GetAbilityModifier(ABILITY_CHARISMA, oPC); + } + else if (GetIsEpicCleric(oPC) || GetIsEpicDruid(oPC) || GetIsEpicHealer(oPC) || GetIsEpicBlighter(oPC) || GetIsEpicShaman(oPC) || GetIsEpicUrPriest(oPC)) + { + nSkill -= GetAbilityModifier(ABILITY_INTELLIGENCE, oPC); + nSkill += GetAbilityModifier(ABILITY_WISDOM, oPC); + } + } + return nSkill; +} + +int GetHasEnoughGoldToResearch(object oPC, int nSpellDC) +{ + int nCost = nSpellDC * GetPRCSwitch(PRC_EPIC_GOLD_MULTIPLIER); + if (GetHasGPToSpend(oPC, nCost)) + return TRUE; + return FALSE; +} + +int GetHasEnoughExperienceToResearch(object oPC, int nSpellDC) +{ + int nXPCost = nSpellDC * GetPRCSwitch(PRC_EPIC_GOLD_MULTIPLIER) / GetPRCSwitch(PRC_EPIC_XP_FRACTION); + if (GetHasXPToSpend(oPC, nXPCost)) + return TRUE; + return FALSE; +} + +int GetHasRequiredFeatsForResearch(object oPC, int nReq1, int nReq2 = 0, int nReq3 = 0, int nReq4 = 0, + int nSeed1 = 0, int nSeed2 = 0, int nSeed3 = 0, int nSeed4 = 0, int nSeed5 = 0) +{ + if(DEBUG) + { + DoDebug("Requirement #1: " + IntToString(nReq1)); + DoDebug("Requirement #2: " + IntToString(nReq2)); + DoDebug("Requirement #3: " + IntToString(nReq3)); + DoDebug("Requirement #4: " + IntToString(nReq4)); + DoDebug("Seed #1: " + IntToString(nSeed1)); + DoDebug("Seed #2: " + IntToString(nSeed2)); + DoDebug("Seed #3: " + IntToString(nSeed3)); + DoDebug("Seed #4: " + IntToString(nSeed4)); + DoDebug("Seed #4: " + IntToString(nSeed5)); + } + + if ((GetHasFeat(nReq1, oPC) || nReq1 == 0) + && (GetHasFeat(nReq2, oPC) || nReq2 == 0) + && (GetHasFeat(nReq3, oPC) || nReq3 == 0) + && (GetHasFeat(nReq4, oPC) || nReq4 == 0) + && (GetHasEpicSeedKnown(nSeed1, oPC) || nSeed1 == -1) + && (GetHasEpicSeedKnown(nSeed2, oPC) || nSeed2 == -1) + && (GetHasEpicSeedKnown(nSeed3, oPC) || nSeed3 == -1) + && (GetHasEpicSeedKnown(nSeed4, oPC) || nSeed4 == -1) + && (GetHasEpicSeedKnown(nSeed5, oPC) || nSeed5 == -1)) + { + return TRUE; + } + return FALSE; +} +int GetResearchResult(object oPC, int nSpellDC) +{ + int nCheck = GetSpellcraftCheck(oPC); + SendMessageToPC(oPC, "Your spellcraft check was a " + + IntToString(nCheck) + ", against a researching DC of " + + IntToString(nSpellDC)); + if (nCheck >= nSpellDC) + { + SendMessageToPC(oPC, MES_SPELLCRAFT_CHECK_PASS); + return TRUE; + } + else + { + SendMessageToPC(oPC, MES_SPELLCRAFT_CHECK_FAIL); + return FALSE; + } +} + +void TakeResourcesFromPC(object oPC, int nSpellDC, int nSuccess) +{ + if (nSuccess != TRUE) + { + int nGold = nSpellDC * + GetPRCSwitch(PRC_EPIC_GOLD_MULTIPLIER) / GetPRCSwitch(PRC_EPIC_FAILURE_FRACTION_GOLD); + SpendGP(oPC, nGold); + } + else + { + int nGold = nSpellDC * GetPRCSwitch(PRC_EPIC_GOLD_MULTIPLIER); + SpendGP(oPC, nGold); + int nXP = nSpellDC * GetPRCSwitch(PRC_EPIC_GOLD_MULTIPLIER) / GetPRCSwitch(PRC_EPIC_XP_FRACTION); + SpendXP(oPC, nXP); + } +} + +int GetCanCastSpell(object oPC, int nEpicSpell) +{ + int nSpellDC = GetDCForSpell(nEpicSpell); + string sChool = GetSchoolForSpell(nEpicSpell); + int nSpellXP =GetCastXPForSpell(nEpicSpell); + // Adjust the DC to account for Spell Foci feats. + nSpellDC -= GetDCSchoolFocusAdjustment(oPC, sChool); + int nCheck = GetSpellcraftCheck(oPC); + // Does oPC already know it + if (!GetHasEpicSpellKnown(nEpicSpell, oPC)) + { + return FALSE; + } + if (!(GetSpellSlots(oPC) >= 1)) + { // No? Cancel spell, then. + SendMessageToPC(oPC, MES_CANNOT_CAST_SLOTS); + return FALSE; + } + if (GetPRCSwitch(PRC_EPIC_XP_COSTS) == TRUE) + { + // Does oPC have the needed XP available to cast the spell? + if (!GetHasXPToSpend(oPC, nSpellXP)) + { // No? Cancel spell, then. + SendMessageToPC(oPC, MES_CANNOT_CAST_XP); + return FALSE; + } + } + // Does oPC pass the Spellcraft check for the spell's casting? + if (!(nCheck >= nSpellDC)) + { // No? + SendMessageToPC(oPC, MES_SPELLCRAFT_CHECK_FAIL); + SendMessageToPC(oPC, + IntToString(nCheck) + " against a DC of " + IntToString(nSpellDC)); + // Failing a Spellcraft check still costs a spell slot, so decrement... + DecrementSpellSlots(oPC); + return FALSE; + } + // If the answer is YES to all three, cast the spell! + SendMessageToPC(oPC, MES_SPELLCRAFT_CHECK_PASS); + SendMessageToPC(oPC, + IntToString(nCheck) + " against a DC of " + IntToString(nSpellDC)); + SpendXP(oPC, nSpellXP); // Only spends the XP on a successful casting. + DecrementSpellSlots(oPC); + return TRUE; +} + +void GiveFeat(object oPC, int nFeatIP) +{ + object oSkin = GetPCSkin(oPC); + if (oSkin != OBJECT_INVALID) + IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(nFeatIP), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); +} + +void TakeFeat(object oPC, int nFeatIP) +{ + object oSkin = GetPCSkin(oPC); + itemproperty ipX = GetFirstItemProperty(oSkin); + while (GetIsItemPropertyValid(ipX)) + { + if (GetItemPropertyType(ipX) == ITEM_PROPERTY_BONUS_FEAT) + { + if(GetItemPropertySubType(ipX) == nFeatIP) + { + RemoveItemProperty(oSkin, ipX); + break; + } + } + ipX = GetNextItemProperty(oSkin); + } +} + +int GetCastableFeatCount(object oPC) +{ + int nX = 0; + int i = 0; + int nFeat = GetFeatForSpell(i); + while(nFeat != 0) + { + //test for the castable feat + if(GetHasFeat(nFeat, oPC)) + nX += 1; + i++; + nFeat = GetFeatForSpell(i); + } + return nX; +} + +void PenalizeSpellSlotForCaster(object oCaster) +{ + int nMod = GetLocalInt(oCaster, "nSpellSlotPenalty"); + SetLocalInt(oCaster, "nSpellSlotPenalty", nMod + 1); + SendMessageToPC(oCaster, MES_CONTINGENCIES_YES1); + SendMessageToPC(oCaster, MES_CONTINGENCIES_YES2); + SendMessageToPC(oCaster, "Your epic spell slot limit is now " + + IntToString(GetEpicSpellSlotLimit(oCaster)) + "."); +} + +void RestoreSpellSlotForCaster(object oCaster) +{ + int nMod = GetLocalInt(oCaster, "nSpellSlotPenalty"); + if (nMod > 0) SetLocalInt(oCaster, "nSpellSlotPenalty", nMod - 1); + SendMessageToPC(oCaster, "Your epic spell slot limit is now " + + IntToString(GetEpicSpellSlotLimit(oCaster)) + "."); +} + +void DoSpellResearch(object oCaster, int nSpellDC, int nSpellIP, string sSchool, object oBook) +{ + float fDelay = 2.0; + string sCutScript; + int nResult = GetResearchResult(oCaster, nSpellDC); + if (PLAY_RESEARCH_CUTS == TRUE) + { + if (sSchool == "A") sCutScript = SCHOOL_A; + if (sSchool == "C") sCutScript = SCHOOL_C; + if (sSchool == "D") sCutScript = SCHOOL_D; + if (sSchool == "E") sCutScript = SCHOOL_E; + if (sSchool == "I") sCutScript = SCHOOL_I; + if (sSchool == "N") sCutScript = SCHOOL_N; + if (sSchool == "T") sCutScript = SCHOOL_T; + if (sSchool == "V") sCutScript = SCHOOL_V; + ExecuteScript(sCutScript, oCaster); + fDelay = 10.0; + } + DelayCommand(fDelay, TakeResourcesFromPC(oCaster, nSpellDC, nResult)); + if (nResult == TRUE) + { + DelayCommand(fDelay, SendMessageToPC(oCaster, GetName(oCaster) + " " + MES_RESEARCH_SUCCESS)); + //DelayCommand(fDelay, GiveFeat(oCaster, nSpellIP)); + DelayCommand(fDelay, SetEpicSpellKnown(nSpellIP, oCaster, TRUE)); + DelayCommand(fDelay, DestroyObject(oBook)); + //research time + //1 day per 50,000GP +1 + int nDays = (nSpellDC * GetPRCSwitch(PRC_EPIC_GOLD_MULTIPLIER))/50000; + nDays++; + float fSeconds = HoursToSeconds(24*nDays); + AdvanceTimeForPlayer(oCaster, fSeconds); + } + else + { + DelayCommand(fDelay, SendMessageToPC(oCaster, GetName(oCaster) + " " + MES_RESEARCH_FAILURE)); + } +} + +void UnequipAnyImmunityItems(object oTarget, int nImmType) +{ + object oItem; + int nX; + for (nX = 0; nX <= 13; nX++) // Does not include creature items in search. + { + oItem = GetItemInSlot(nX, oTarget); + // Debug. + //SendMessageToPC(oTarget, "Checking slot " + IntToString(nX)); + if (oItem != OBJECT_INVALID) + { + // Debug. + //SendMessageToPC(oTarget, "Valid item."); + itemproperty ipX = GetFirstItemProperty(oItem); + while (GetIsItemPropertyValid(ipX)) + { + // Debug. + //SendMessageToPC(oTarget, "Valid ip"); + if (GetItemPropertySubType(ipX) == nImmType) + { + // Debug. + //SendMessageToPC(oTarget, "ip match!!"); + SendMessageToPC(oTarget, GetName(oItem) + + " cannot be equipped at this time."); + AssignCommand(oTarget, ClearAllActions()); + AssignCommand(oTarget, ActionUnequipItem(oItem)); + break; + } + else + ipX = GetNextItemProperty(oItem); + } + } + } +} + +int GetTotalCastingLevel(object oCaster) +{ + int iBestArcane = GetLevelByTypeArcaneFeats(); + int iBestDivine = GetLevelByTypeDivineFeats(); + int iBest = (iBestDivine > iBestArcane) ? iBestDivine : iBestArcane; + + //SendMessageToPC(oCaster, "Epic casting at level " + IntToString(iBest)); + + return iBest; +} + +int GetDCSchoolFocusAdjustment(object oPC, string sChool) +{ + int nNewDC = 0; + if (sChool == "A") // Abjuration spell? + { + if (GetHasFeat(FEAT_EPIC_SPELL_FOCUS_ABJURATION, oPC)) nNewDC = 6; + else if (GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ABJURATION, oPC)) nNewDC = 4; + else if (GetHasFeat(FEAT_SPELL_FOCUS_ABJURATION, oPC)) nNewDC = 2; + } + if (sChool == "C") // Conjuration spell? + { + if (GetHasFeat(FEAT_EPIC_SPELL_FOCUS_CONJURATION, oPC)) nNewDC = 6; + else if (GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION, oPC)) nNewDC = 4; + else if (GetHasFeat(FEAT_SPELL_FOCUS_CONJURATION, oPC)) nNewDC = 2; + } + if (sChool == "D") // Divination spell? + { + if (GetHasFeat(FEAT_EPIC_SPELL_FOCUS_DIVINATION, oPC)) nNewDC = 6; + else if (GetHasFeat(FEAT_GREATER_SPELL_FOCUS_DIVINIATION, oPC)) nNewDC = 4; + else if (GetHasFeat(FEAT_SPELL_FOCUS_DIVINATION, oPC)) nNewDC = 2; + } + if (sChool == "E") // Enchantment spell? + { + if (GetHasFeat(FEAT_EPIC_SPELL_FOCUS_ENCHANTMENT, oPC)) nNewDC = 6; + else if (GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ENCHANTMENT, oPC)) nNewDC = 4; + else if (GetHasFeat(FEAT_SPELL_FOCUS_ENCHANTMENT, oPC)) nNewDC = 2; + } + if (sChool == "V") // Evocation spell? + { + if (GetHasFeat(FEAT_EPIC_SPELL_FOCUS_EVOCATION, oPC)) nNewDC = 6; + else if (GetHasFeat(FEAT_GREATER_SPELL_FOCUS_EVOCATION, oPC)) nNewDC = 4; + else if (GetHasFeat(FEAT_SPELL_FOCUS_EVOCATION, oPC)) nNewDC = 2; + } + if (sChool == "I") // Illusion spell? + { + if (GetHasFeat(FEAT_EPIC_SPELL_FOCUS_ILLUSION, oPC)) nNewDC = 6; + else if (GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ILLUSION, oPC)) nNewDC = 4; + else if (GetHasFeat(FEAT_SPELL_FOCUS_ILLUSION, oPC)) nNewDC = 2; + } + if (sChool == "N") // Necromancy spell? + { + if (GetHasFeat(FEAT_EPIC_SPELL_FOCUS_NECROMANCY, oPC)) nNewDC = 6; + else if (GetHasFeat(FEAT_GREATER_SPELL_FOCUS_NECROMANCY, oPC)) nNewDC = 4; + else if (GetHasFeat(FEAT_SPELL_FOCUS_NECROMANCY, oPC)) nNewDC = 2; + } + if (sChool == "T") // Transmutation spell? + { + if (GetHasFeat(FEAT_EPIC_SPELL_FOCUS_TRANSMUTATION, oPC)) nNewDC = 6; + else if (GetHasFeat(FEAT_GREATER_SPELL_FOCUS_TRANSMUTATION, oPC)) nNewDC = 4; + else if (GetHasFeat(FEAT_SPELL_FOCUS_TRANSMUTATION, oPC)) nNewDC = 2; + } + return nNewDC; +} + +int GetEpicSpellSaveDC(object oCaster = OBJECT_SELF, object oTarget = OBJECT_INVALID, int nSpellID = -1) +{ + int iDiv = GetPrCAdjustedCasterLevelByType(TYPE_DIVINE, oCaster); // ie. wisdom determines DC + int iWiz = GetPrCAdjustedCasterLevel(CLASS_TYPE_WIZARD, oCaster); // int determines DC + int iWMa = GetPrCAdjustedCasterLevel(CLASS_TYPE_WARMAGE, oCaster); // cha determines DC + int iDNc = GetPrCAdjustedCasterLevel(CLASS_TYPE_DREAD_NECROMANCER, oCaster); // cha determines DC + int iSor = GetPrCAdjustedCasterLevel(CLASS_TYPE_SORCERER, oCaster); // cha determines DC + int iWit = GetPrCAdjustedCasterLevel(CLASS_TYPE_WITCH, oCaster); // wis determines DC + int iArc = GetPrCAdjustedCasterLevel(CLASS_TYPE_ARCHIVIST, oCaster); // int determines DC + int iBeg = GetPrCAdjustedCasterLevel(CLASS_TYPE_BEGUILER, oCaster); // int determines DC + int iTpl = GetPrCAdjustedCasterLevel(CLASS_TYPE_TEMPLAR, oCaster); // cha determines DC + + int iBest = 0; + int iAbility; + if(nSpellID == -1) + nSpellID = PRCGetSpellId(); + + if (iArc > iBest) { iAbility = ABILITY_INTELLIGENCE; iBest = iWit; } + if (iTpl > iBest) { iAbility = ABILITY_CHARISMA; iBest = iTpl; } + if (iWiz > iBest) { iAbility = ABILITY_INTELLIGENCE; iBest = iWiz; } + if (iWMa > iBest) { iAbility = ABILITY_CHARISMA; iBest = iWMa; } + if (iDNc > iBest) { iAbility = ABILITY_CHARISMA; iBest = iDNc; } + if (iSor > iBest) { iAbility = ABILITY_CHARISMA; iBest = iSor; } + if (iWit > iBest) { iAbility = ABILITY_WISDOM; iBest = iWit; } + if (iBeg > iBest) { iAbility = ABILITY_INTELLIGENCE; iBest = iBeg; } + if (iDiv > iBest) { iAbility = ABILITY_WISDOM; iBest = iDiv; } + + int nDC; + if (iBest) nDC = 20 + GetAbilityModifier(iAbility, oCaster); + else nDC = 20; // DC = 20 if the epic spell is cast some other way. + + nDC += GetDCSchoolFocusAdjustment(oCaster, Get2DACache("spells", "school", nSpellID)); + nDC += GetChangesToSaveDC(oTarget, oCaster, nSpellID, GetSpellSchool(nSpellID)); + + return nDC; +} + +// Test main +//void main(){} diff --git a/src/include/inc_eventhook.nss b/src/include/inc_eventhook.nss new file mode 100644 index 0000000..f1cd511 --- /dev/null +++ b/src/include/inc_eventhook.nss @@ -0,0 +1,883 @@ +//:://///////////////////////////////////////////// +//:: Generic eventhook include +//:: inc_eventhook +//::////////////////////////////////////////////// +/** @file + A system for scheduling scripts to be run on + an arbitrary event during runtime (instead of + being hardcoded in compilation). + + Scheduling a script happens by calling + AddEventScript with the object the script is + to be run on (and on which the data about the + script is stored on), an EVENT_* constant + determining the event that the script is to be + run on and the name of the script to be run. + + In addition to these, there is a parameter to + control whether the script will be just during + the next invocation of the event, or during all + invocations from now on until the script is + explicitly descheduled. + This feature only automatically works when using + ExecuteAllScriptsHookedToEvent(). That is, merely + viewing the eventscript list does not trigger the + effect. + + See the comments in function prototype section for + more details. + + + Added event constants to be used with items. For + example, now you can define a script to be fired + for The Sword of Foo every time someone equips it. + + + NOTE: Persistence of scripts hooked to non-creatures + over module boundaries is not guaranteed. ie, if + the player takes abovementioned Sword of Foo to + another module, it most likely will lose the locals + defining the script hooked into it. + + + @author Ordedan + @date Created - 28.02.2005 + @date Modified - 26.05.2005 + @date Modified - 04.09.2005 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Constant defintions */ +////////////////////////////////////////////////// + +// Module events + +/// Module event - On Acquire Item +const int EVENT_ONACQUIREITEM = 1; +/// Module event - On Activate Item +const int EVENT_ONACTIVATEITEM = 2; +/// Module event - On Client Enter +const int EVENT_ONCLIENTENTER = 3; +/// Module event - On Client Leave +const int EVENT_ONCLIENTLEAVE = 4; +/// Module event - On Cutscene Abort +const int EVENT_ONCUTSCENEABORT = 5; +/// Module event - On Heartbeat +const int EVENT_ONHEARTBEAT = 6; +/// Module event - On Player Death +const int EVENT_ONPLAYERDEATH = 9; +/// Module event - On Player Dying +const int EVENT_ONPLAYERDYING = 10; +/// Module event - On Player Equip Item +const int EVENT_ONPLAYEREQUIPITEM = 11; +/// Module event - On Player Level Up +const int EVENT_ONPLAYERLEVELUP = 12; +/// Module event - On Player Rest Cancelled +const int EVENT_ONPLAYERREST_CANCELLED = 13; +/// Module event - On Player Rest Started +const int EVENT_ONPLAYERREST_STARTED = 14; +/// Module event - On Player Rest Finished +const int EVENT_ONPLAYERREST_FINISHED = 15; +/// Module event - On Player Unequip Item +const int EVENT_ONPLAYERUNEQUIPITEM = 16; +/// Module event - On Player Respawn +const int EVENT_ONPLAYERRESPAWN = 17; +/// Module event - On Unacquire Item +const int EVENT_ONUNAQUIREITEM = 18; +/// Module event - On Player Chat +const int EVENT_ONPLAYERCHAT = 49; + +/** + * Module Event - On Userdefined + * This has special handling + * @see prc_onuserdef.nss + */ +const int EVENT_ONUSERDEFINED = 19; + + +// Other events +/// Virtual event - On Hit +/// Requires OnHitCastSpell: Unique on the weapon used +const int EVENT_ONHIT = 20; +/// Virtual event - On Spell Cast +//const int EVENT_ONSPELLCAST = 21; +/// Virtual event - On Power Manifest +//const int EVENT_ONPOWERMANIFEST = 22; + + +/// Virtual event - On Player Level Down +/// WARNING: Event detection is slightly inaccurate +const int EVENT_ONPLAYERLEVELDOWN = 35; + +/// Virtual event - On Physically Attacked +/// WARNING: Event detection is highly inaccurate +const int EVENT_VIRTUAL_ONPHYSICALATTACKED = 36; + +/// Virtual event - On Blocked +/// WARNING: Event detection is inaccurate +const int EVENT_VIRTUAL_ONBLOCKED = 37; + +/// Virtual event - On Combat Round End +/// WARNING: Event detection is inaccurate +const int EVENT_VIRTUAL_ONCOMBATROUNDEND = 38; + +/// Virtual event - On Conversation +/// Does not work on PCs! +const int EVENT_VIRTUAL_ONCONVERSATION = 39; + +/// Virtual event - On Damaged +/// WARNING: Event detection is slightly inaccurate +const int EVENT_VIRTUAL_ONDAMAGED = 40; + +/// Virtual event - On Disturbed +/// WARNING: Event detection may be inaccurate +const int EVENT_VIRTUAL_ONDISTURBED = 41; + +/// Virtual event - On Perception +/// WARNING: Event detection may be inaccurate +const int EVENT_VIRTUAL_ONPERCEPTION = 42; + +/// Virtual event - On Spawned +const int EVENT_VIRTUAL_ONSPAWNED = 43; + +/// Virtual event - On Spell Cast At +/// WARNING: Event detection may be inaccurate +const int EVENT_VIRTUAL_ONSPELLCASTAT = 44; + +/// Virtual event - On Death +/// WARNING: Event detection may be inaccurate +const int EVENT_VIRTUAL_ONDEATH = 45; + +/// Virtual event - On Rested +/// WARNING: Event detection may be inaccurate +const int EVENT_VIRTUAL_ONRESTED = 46; + +/// Virtual event - On User Defined +/// WARNING: Event detection may be inaccurate +const int EVENT_VIRTUAL_ONUSERDEFINED = 47; + +/// Virtual event - On Heartbeat +/// WARNING: Event detection may be inaccurate +const int EVENT_VIRTUAL_ONHEARTBEAT = 48; + +/// Virtual event - On Player Chat +/// WARNING: Event detection may be inaccurate +const int EVENT_VIRTUAL_ONPLAYERCHAT = 50; + +// NPC events +/// NPC event - On Blocked +const int EVENT_NPC_ONBLOCKED = 23; +/// NPC event - On Combat Round End +const int EVENT_NPC_ONCOMBATROUNDEND = 24; +/// NPC event - On Conversation +const int EVENT_NPC_ONCONVERSATION = 25; +/// NPC event - On Damaged +const int EVENT_NPC_ONDAMAGED = 26; +/// NPC event - On Death +const int EVENT_NPC_ONDEATH = 27; +/// NPC event - On Disturbed +const int EVENT_NPC_ONDISTURBED = 28; +/// NPC event - On Heartbeat +const int EVENT_NPC_ONHEARTBEAT = 29; +/// NPC event - On Perception +const int EVENT_NPC_ONPERCEPTION = 30; +/// NPC event - On Physically Attacked +const int EVENT_NPC_ONPHYSICALATTACKED = 31; +/// NPC event - On Rested +const int EVENT_NPC_ONRESTED = 32; +/// NPC event - On Spell Cast At +const int EVENT_NPC_ONSPELLCASTAT = 34; + + +/* Item events */ +/// Virtual item event - On Acquire Item +const int EVENT_ITEM_ONACQUIREITEM = 1000; +/// Virtual item event - On Activate Item +const int EVENT_ITEM_ONACTIVATEITEM = 1001; +/// Virtual item event - On Player Equip Item +const int EVENT_ITEM_ONPLAYEREQUIPITEM = 1002; +/// Virtual item event - On Player Unequip Item +const int EVENT_ITEM_ONPLAYERUNEQUIPITEM = 1003; +/// Virtual item event - On Acquire Item +const int EVENT_ITEM_ONUNAQUIREITEM = 1004; +/// Virtual item event - On Hit +/// Requires OnHitCastSpell: Unique on the item used to hit +const int EVENT_ITEM_ONHIT = 1005; + +/* Placeable events */ +//Note these will only fire for placeables using the +//prc_plc_* scriptset + +// Placeable event - OnClick (1.67 or later only) +const int EVENT_PLACEABLE_ONCLICK = 3001; +// Placeable event - OnClose +const int EVENT_PLACEABLE_ONCLOSE = 3002; +// Placeable event - OnDamaged +const int EVENT_PLACEABLE_ONDAMAGED = 3003; +// Placeable event - OnDeath +const int EVENT_PLACEABLE_ONDEATH = 3004; +// Placeable event - OnHeartbeat +const int EVENT_PLACEABLE_ONHEARTBEAT = 3005; +// Placeable event - OnDisturbed +const int EVENT_PLACEABLE_ONDISTURBED = 3006; +// Placeable event - OnLock +const int EVENT_PLACEABLE_ONLOCK = 3007; +// Placeable event - OnPhysicalAttacked +const int EVENT_PLACEABLE_ONATTACKED = 3008; +// Placeable event - OnOpen +const int EVENT_PLACEABLE_ONOPEN = 3009; +// Placeable event - OnSpellCastAt +const int EVENT_PLACEABLE_ONSPELL = 3010; +// Placeable event - OnUnLock +const int EVENT_PLACEABLE_ONUNLOCK = 3011; +// Placeable event - OnUsed +const int EVENT_PLACEABLE_ONUSED = 3012; +// Placeable event - OnUserDefined +const int EVENT_PLACEABLE_ONUSERDEFINED = 3013; + +/* Door events */ +//Note these will only fire for doors using the +//Note that placeable doors use the placeable set +//prc_door_* scriptset +// Door event - OnAreaTransitionClick +const int EVENT_DOOR_ONTRANSITION = 4001; +// Door event - OnClose +const int EVENT_DOOR_ONCLOSE = 4002; +// Door event - OnDamaged +const int EVENT_DOOR_ONDAMAGED = 4003; +// Door event - OnDeath +const int EVENT_DOOR_ONDEATH = 4004; +// Door event - OnFailToOpen +const int EVENT_DOOR_ONFAILTOOPEN = 4005; +// Door event - OnHeartbeat +const int EVENT_DOOR_ONHEARTBEAT = 4006; +// Door event - OnLock +const int EVENT_DOOR_ONLOCK = 4007; +// Door event - OnPhysicalAttacked +const int EVENT_DOOR_ONATTACKED = 4008; +// Door event - OnOpen +const int EVENT_DOOR_ONOPEN = 4009; +// Door event - OnSpellCastAt +const int EVENT_DOOR_ONSPELL = 4010; +// Door event - OnUnLock +const int EVENT_DOOR_ONUNLOCK = 4011; +// Door event - OnUserDefined +const int EVENT_DOOR_ONUSERDEFINED = 4012; + + + +/* Callback hooks */ +/// Callback hook - Unarmed evaluation +const int CALLBACKHOOK_UNARMED = 2000; + + +/// When TRUE, ExecuteAllScriptsHookedToEvent() will print a list of the scripts it executes. +/// Disabling DEBUG will disablet this, too. +const int PRINT_EVENTHOOKS = FALSE; + +///////////////////////// +// Internal constants // +///////////////////////// + +const string PERMANENCY_SUFFIX = "_permanent"; + +// Unused events +//const int EVENT_ONMODULELOAD = 7; // Not included, since anything that would be hooked to this event +//const string NAME_ONMODULELOAD = "prc_event_array_onmoduleload"; // should be directly in the eventscript anyway. +//const int EVENT_NPC_ONSPAWN = 33; // No way to add script to the hook for a creature before this fires +//const string NAME_NPC_ONSPAWN = "prc_event_array_npc_onspawn"; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Adds the given script to be fired when the event next occurs for the given object. + * NOTE! Do not add a script that calls ExecuteAllScriptsHookedToEvent() to an eventhook. + * It will result in recursive infinite loop. + * + * @param oObject The object that the script is to be fired for + * @param nEvent One of the EVENT_* constants defined in "inc_eventhook", + * (or any number, but then need to be a bit more careful, since the system won't complain if you typo it) + * @param sScript The script to be fired on the event. Special case: "" will not be stored. + * @param bPermanent Unless this is set, the script will be only fired once, after which it + * is removed from the list + * + * @param bAllowDuplicate This being set makes the function first check if a script with + * the same name is already queued for the event and avoids adding a + * duplicate. This will not remove duplicates already present, though. + */ +int AddEventScript(object oObject, int nEvent, string sScript, int bPermanent = FALSE, int bAllowDuplicate = TRUE); + +/** + * Removes all instances of the given script from the given eventhook + * + * @param oObject The object that the script is to be removed from the list for. + * @param nEvent One of the EVENT_* constants defined in "inc_eventhook" + * @param sScript The script to be removed from the event + * + * @param bPermanent Depending on the state of this switch, the script is either removed + * from the one-shot or permanent list. + * + * @param bIgnorePermanency Setting this to true will make the function clear the script from + * both one-shot and permanent lists, regardless of the value of bPermanent + */ +void RemoveEventScript(object oObject, int nEvent, string sScript, int bPermanent = FALSE, int bIgnorePermanency = FALSE); + +/** + * Removes all scripts in the given eventhook + * + * @param oObject The object to clear script list for. + * @param nEvent One of the EVENT_* constants defined in "inc_eventhook" + * + * @param bPermanent Depending on the state of this switch, the scripts are either removed + * from the one-shot or permanent list. + * + * @param bIgnorePermanency Setting this to true will make the function clear both one-shot and + * permanent lists, regardless of the value of bPermanent + */ +void ClearEventScriptList(object oObject, int nEvent, int bPermanent = FALSE, int bIgnorePermanency = FALSE); + +/** + * Gets the first script hooked to the given event. + * This must be called before any calls to GetNextEventScript() are made. + * + * @param oObject The object to get a script for. + * @param nEvent One of the EVENT_* constants defined in "inc_eventhook" + * @param bPermanent Which list to get the first script from. + * + * @return The name of the first script stored, or "" if one was not found. + */ +string GetFirstEventScript(object oObject, int nEvent, int bPermanent); + +/** + * Gets the next script hooked to the given event. + * You should call GetFirstEventScript before calling this. + * + * @param oObject The object to get a script for. + * @param nEvent One of the EVENT_* constants defined in "inc_eventhook" + * @param bPermanent Which list to get the first script from. + * + * @return The name of the next script in the list, or "" if there are no more scripts + * left. Also returns "" if GetFirstEventScript hasn't been called. + */ +string GetNextEventScript(object oObject, int nEvent, int bPermanent); + +/** + * Executes all scripts in both the one-shot and permanent hooks and + * clears scripts off the one-shot hook afterwards. + * It is recommended this be used instead of manually going through + * the script lists with Get(First|Next)EventScript. + * + * All the scripts will be ExecuteScripted on OBJECT_SELF, so they will + * behave as if being in the script slot for that event. + * + * @param oObject The object to execute listed scripts for. + * @param nEvent One of the EVENT_* constants defined in "inc_eventhook" + */ +void ExecuteAllScriptsHookedToEvent(object oObject, int nEvent); + +/** + * Gets the event currently being run via ExecuteAllScriptsHookedToEvent + * + * @return One of the EVENT_* constants if an ExecuteAllScriptsHookedToEvent + * is being run, FALSE otherwise. + */ +int GetRunningEvent(); + + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + +//#include "inc_utility" +//#include "prc_inc_array" +#include "inc_pers_array" // link higher than prc_inc_array + + + +/////////////////////////////////////////////////////////////////////// +/* Private function prototypes - Move on people, nothing to see here */ +/////////////////////////////////////////////////////////////////////// + +/// Internal function. Returns the name matching the given integer constant +string EventTypeIdToName(int nEvent); + +string _GetMarkerLocalName(string sScript, string sArrayName); + +/// Internal function - Array wrapper +int wrap_array_create(object store, string name); +/// Internal function - Array wrapper +int wrap_array_set_string(object store, string name, int i, string entry); +/// Internal function - Array wrapper +string wrap_array_get_string(object store, string name, int i); +/// Internal function - Array wrapper +int wrap_array_shrink(object store, string name, int size_new); +/// Internal function - Array wrapper +int wrap_array_get_size(object store, string name); +/// Internal function - Array wrapper +int wrap_array_exists(object store, string name); + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + + +int AddEventScript(object oObject, int nEvent, string sScript, int bPermanent = FALSE, int bAllowDuplicate = TRUE){ + // If an eventhook is running, place the call into queue + if(GetLocalInt(GetModule(), "prc_eventhook_running")){ + int nQueue = GetLocalInt(GetModule(), "prc_eventhook_pending_queue") + 1; + SetLocalInt(GetModule(), "prc_eventhook_pending_queue", nQueue); + SetLocalInt(GetModule(), "prc_eventhook_pending_queue_" + IntToString(nQueue) + "_operation", 1); + SetLocalObject(GetModule(), "prc_eventhook_pending_queue_" + IntToString(nQueue) + "_target", oObject); + SetLocalInt(GetModule(), "prc_eventhook_pending_queue_" + IntToString(nQueue) + "_event", nEvent); + SetLocalString(GetModule(), "prc_eventhook_pending_queue_" + IntToString(nQueue) + "_script", sScript); + SetLocalInt(GetModule(), "prc_eventhook_pending_queue_" + IntToString(nQueue) + "_flags", ((!(!bPermanent)) << 1) | (!(!bAllowDuplicate))); + return FALSE; //TODO: What should this really be? + } + + string sArrayName = EventTypeIdToName(nEvent); + + // Abort if the object given / event / script isn't valid + if(!GetIsObjectValid(oObject) || sArrayName == "" || sScript == "") return FALSE; + + + sArrayName += bPermanent ? PERMANENCY_SUFFIX : ""; + + // Create the array if necessary + if(!wrap_array_exists(oObject, sArrayName)){ + wrap_array_create(oObject, sArrayName); + } + + // Check for duplicates if necessary + int bAdd = TRUE; + if(!bAllowDuplicate){ + // Check if a marker is present. + if(GetLocalInt(oObject, _GetMarkerLocalName(sScript, sArrayName))) + bAdd = FALSE; + // Since this might be the first time it is looked up, loop through the whole list anyway + else + { + int i, nMax = wrap_array_get_size(oObject, sArrayName); + for(i = 0; i < nMax; i++){ + if(wrap_array_get_string(oObject, sArrayName, i) == sScript){ + // Add a marker that the script is present + SetLocalInt(oObject, _GetMarkerLocalName(sScript, sArrayName), TRUE); + bAdd = FALSE; + break; + } } } } + // Add to the array if needed + if(bAdd) + { + wrap_array_set_string(oObject, sArrayName, wrap_array_get_size(oObject, sArrayName), sScript); + // Add a marker that the script is present + SetLocalInt(oObject, _GetMarkerLocalName(sScript, sArrayName), TRUE); + } + return bAdd; +} + + +void RemoveEventScript(object oObject, int nEvent, string sScript, int bPermanent = FALSE, int bIgnorePermanency = FALSE){ + // If an eventhook is running, place the call into queue + if(GetLocalInt(GetModule(), "prc_eventhook_running")){ + int nQueue = GetLocalInt(GetModule(), "prc_eventhook_pending_queue") + 1; + SetLocalInt(GetModule(), "prc_eventhook_pending_queue", nQueue); + SetLocalInt(GetModule(), "prc_eventhook_pending_queue_" + IntToString(nQueue) + "_operation", 2); + SetLocalObject(GetModule(), "prc_eventhook_pending_queue_" + IntToString(nQueue) + "_target", oObject); + SetLocalInt(GetModule(), "prc_eventhook_pending_queue_" + IntToString(nQueue) + "_event", nEvent); + SetLocalString(GetModule(), "prc_eventhook_pending_queue_" + IntToString(nQueue) + "_script", sScript); + SetLocalInt(GetModule(), "prc_eventhook_pending_queue_" + IntToString(nQueue) + "_flags", ((!(!bPermanent)) << 1) | (!(!bIgnorePermanency))); + return; + } + + string sArrayNameBase = EventTypeIdToName(nEvent), + sArrayName; + + // Abort if the object given / event / script isn't valid + if(!GetIsObjectValid(oObject) || sArrayNameBase == "" || sScript == "") return; + + // Go through one-shot array + if(!bPermanent || bIgnorePermanency){ + sArrayName = sArrayNameBase; + // First, check if there is an array to look through at all and that the script is in the array + if(wrap_array_exists(oObject, sArrayName)/* && + GetLocalInt(oObject, _GetMarkerLocalName(sScript, sArrayName))*/ + ){ + int nMoveBackBy = 0; + int i = 0; + int nArraySize = wrap_array_get_size(oObject, sArrayName); + // Loop through the array elements + for(; i < nArraySize; i++){ + // See if we have an entry to remove + if(wrap_array_get_string(oObject, sArrayName, i) == sScript){ + nMoveBackBy++; + } + // Move the entries in the array back by an amount great enough to overwrite entries containing sScript + else if(nMoveBackBy){ + wrap_array_set_string(oObject, sArrayName, i - nMoveBackBy, + wrap_array_get_string(oObject, sArrayName, i)); + } } + + // Shrink the array by the number of entries removed, if any + if(nMoveBackBy) + wrap_array_shrink(oObject, sArrayName, wrap_array_get_size(oObject, sArrayName) - nMoveBackBy); + + // Remove the script presence marker + DeleteLocalInt(oObject, _GetMarkerLocalName(sScript, sArrayName)); + } } + + // Go through the permanent array + if(bPermanent || bIgnorePermanency){ + sArrayName = sArrayNameBase + PERMANENCY_SUFFIX; + // First, check if there is an array to look through at all and that the script is in the array + if(wrap_array_exists(oObject, sArrayName)/* && + GetLocalInt(oObject, _GetMarkerLocalName(sScript, sArrayName))*/ + ){ + int nMoveBackBy = 0; + int i = 0; + int nArraySize = wrap_array_get_size(oObject, sArrayName); + // Loop through the array elements + for(; i < nArraySize; i++){ + // See if we have an entry to remove + if(wrap_array_get_string(oObject, sArrayName, i) == sScript){ + nMoveBackBy++; + } + // Move the entries in the array back by an amount great enough to overwrite entries containing sScript + else if(nMoveBackBy){ + wrap_array_set_string(oObject, sArrayName, i - nMoveBackBy, + wrap_array_get_string(oObject, sArrayName, i)); + } } + + // Shrink the array by the number of entries removed, if any + if(nMoveBackBy) + wrap_array_shrink(oObject, sArrayName, wrap_array_get_size(oObject, sArrayName) - nMoveBackBy); + + // Remove the script presence marker + DeleteLocalInt(oObject, _GetMarkerLocalName(sScript, sArrayName)); + } } +} + + +void ClearEventScriptList(object oObject, int nEvent, int bPermanent = FALSE, int bIgnorePermanency = FALSE){ + // If an eventhook is running, place the call into queue + if(GetLocalInt(GetModule(), "prc_eventhook_running")){ + int nQueue = GetLocalInt(GetModule(), "prc_eventhook_pending_queue") + 1; + SetLocalInt(GetModule(), "prc_eventhook_pending_queue", nQueue); + SetLocalInt(GetModule(), "prc_eventhook_pending_queue_" + IntToString(nQueue) + "_operation", 3); + SetLocalObject(GetModule(), "prc_eventhook_pending_queue_" + IntToString(nQueue) + "_target", oObject); + SetLocalInt(GetModule(), "prc_eventhook_pending_queue_" + IntToString(nQueue) + "_event", nEvent); + SetLocalInt(GetModule(), "prc_eventhook_pending_queue_" + IntToString(nQueue) + "_flags", ((!(!bPermanent)) << 1) | (!(!bIgnorePermanency))); + return; + } + + string sArrayNameBase = EventTypeIdToName(nEvent), + sArrayName; + + // Abort if the object given / event isn't valid + if(!GetIsObjectValid(oObject) || sArrayNameBase == "") return; + + // Go through one-shot array + if(!bPermanent || bIgnorePermanency){ + sArrayName = sArrayNameBase; + // First, check if there is an array present + if(wrap_array_exists(oObject, sArrayName)){ + // Remove all markers + int i = 0; + for(; i <= wrap_array_get_size(oObject, sArrayName); i++){ + DeleteLocalInt(oObject, _GetMarkerLocalName(wrap_array_get_string(oObject, sArrayName, i), sArrayName)); + } + // Shrink the array to 0 + wrap_array_shrink(oObject, sArrayName, 0); + } } + + // Go through the permanent array + if(bPermanent || bIgnorePermanency){ + sArrayName = sArrayNameBase + PERMANENCY_SUFFIX; + // First, check if there is an array present + if(wrap_array_exists(oObject, sArrayName)){ + // Remove all markers + int i = 0; + for(; i <= wrap_array_get_size(oObject, sArrayName); i++){ + DeleteLocalInt(oObject, _GetMarkerLocalName(wrap_array_get_string(oObject, sArrayName, i), sArrayName)); + } + // Shrink the array to 0 + wrap_array_shrink(oObject, sArrayName, 0); + } } +} + + +string GetFirstEventScript(object oObject, int nEvent, int bPermanent){ + string sArrayName = EventTypeIdToName(nEvent); + + // Abort if the object given / event isn't valid + if(!GetIsObjectValid(oObject) || sArrayName == "") return ""; + + sArrayName += bPermanent ? PERMANENCY_SUFFIX : ""; + + // DelayCommand is somewhat expensive, so do this bit only if there is actually an array to iterate over + if(wrap_array_exists(oObject, sArrayName)) { + SetLocalInt(oObject, sArrayName + "_index", 1); + DelayCommand(0.0f, DeleteLocalInt(oObject, sArrayName + "_index")); + } + + return wrap_array_get_string(oObject, sArrayName, 0); +} + + +string GetNextEventScript(object oObject, int nEvent, int bPermanent){ + string sArrayName = GetLocalInt(GetModule(), "prc_eventhook_running") ? + GetLocalString(GetModule(), "prc_eventhook_running_sArrayName") : + EventTypeIdToName(nEvent); + + // Abort if the object given / event isn't valid + if(!GetIsObjectValid(oObject) || sArrayName == "") return ""; + + sArrayName += bPermanent ? PERMANENCY_SUFFIX : ""; + + int nIndex = GetLocalInt(oObject, sArrayName + "_index"); + if(nIndex) + SetLocalInt(oObject, sArrayName + "_index", nIndex + 1); + else{ + WriteTimestampedLogEntry("GetNextEventScript called without first calling GetFirstEventScript"); + return ""; + } + + return wrap_array_get_string(oObject, sArrayName, nIndex); +} + + +void ExecuteAllScriptsHookedToEvent(object oObject, int nEvent){ + // Mark that an eventhook is being run, so calls to modify the + // scripts listed are delayd until the eventhook is done. + SetLocalInt(GetModule(), "prc_eventhook_running", nEvent); + SetLocalString(GetModule(), "prc_eventhook_running_sArrayName", EventTypeIdToName(nEvent)); + + if(PRINT_EVENTHOOKS && DEBUG) + DoDebug("Executing eventhook for event " + IntToString(nEvent) + "; object = " + DebugObject2Str(oObject) + ". Hooked scripts:"); + + // Loop through the scripts to be fired only once + string sScript = GetFirstEventScript(oObject, nEvent, FALSE); + int bNeedClearing = FALSE; + while(sScript != ""){ + bNeedClearing = TRUE; + + if(PRINT_EVENTHOOKS && DEBUG) + DoDebug("\nOneshot: '" + sScript + "'"); + ExecuteScript(sScript, OBJECT_SELF); + + sScript = GetNextEventScript(oObject, nEvent, FALSE); + } + + // Clear the one-shot script list + if(bNeedClearing) + ClearEventScriptList(oObject, nEvent, FALSE, FALSE); + + // Loop through the persistent scripts + sScript = GetFirstEventScript(oObject, nEvent, TRUE); + while(sScript != ""){ + if(PRINT_EVENTHOOKS && DEBUG) + DoDebug("\nPermanent: '" + sScript + "'"); + ExecuteScript(sScript, OBJECT_SELF); + + sScript = GetNextEventScript(oObject, nEvent, TRUE); + } + + // Remove the lock on modifying the script lists + DeleteLocalInt(GetModule(), "prc_eventhook_running"); + DeleteLocalString(GetModule(), "prc_eventhook_running_sArrayName"); + + // Run the delayed commands + int nQueued = GetLocalInt(GetModule(), "prc_eventhook_pending_queue"), + nOperation, nFlags, i; + object oTarget; + for(i = 1; i <= nQueued; i++){ + nOperation = GetLocalInt(GetModule(), "prc_eventhook_pending_queue_" + IntToString(i) + "_operation"); + oTarget = GetLocalObject(GetModule(), "prc_eventhook_pending_queue_" + IntToString(i) + "_target"); + nEvent = GetLocalInt(GetModule(), "prc_eventhook_pending_queue_" + IntToString(i) + "_event"); + sScript = GetLocalString(GetModule(), "prc_eventhook_pending_queue_" + IntToString(i) + "_script"); + nFlags = GetLocalInt(GetModule(), "prc_eventhook_pending_queue_" + IntToString(i) + "_flags"); + + switch(nOperation){ + case 1: + AddEventScript(oTarget, nEvent, sScript, nFlags >>> 1, nFlags & 1); + break; + case 2: + RemoveEventScript(oTarget, nEvent, sScript, nFlags >>> 1, nFlags & 1); + break; + case 3: + ClearEventScriptList(oTarget, nEvent, nFlags >>> 1, nFlags & 1); + break; + + default: + WriteTimestampedLogEntry("Invalid value in delayed eventhook manipulation operation queue"); + } + + DeleteLocalInt (GetModule(), "prc_eventhook_pending_queue_" + IntToString(i) + "_operation"); + DeleteLocalObject(GetModule(), "prc_eventhook_pending_queue_" + IntToString(i) + "_target"); + DeleteLocalInt (GetModule(), "prc_eventhook_pending_queue_" + IntToString(i) + "_event"); + DeleteLocalString(GetModule(), "prc_eventhook_pending_queue_" + IntToString(i) + "_script"); + DeleteLocalInt (GetModule(), "prc_eventhook_pending_queue_" + IntToString(i) + "_flags"); + } + + DeleteLocalInt(GetModule(), "prc_eventhook_pending_queue"); + +} + + +int GetRunningEvent(){ + return GetLocalInt(GetModule(), "prc_eventhook_running"); +} + + +string EventTypeIdToName(int nEvent){ + /* + switch(nEvent){ + // Module events + case EVENT_ONACQUIREITEM: + return NAME_ONACQUIREITEM; + case EVENT_ONACTIVATEITEM: + return NAME_ONACTIVATEITEM; + case EVENT_ONCLIENTENTER: + return NAME_ONCLIENTENTER; + case EVENT_ONCLIENTLEAVE: + return NAME_ONCLIENTLEAVE; + case EVENT_ONCUTSCENEABORT: + return NAME_ONCUTSCENEABORT; + case EVENT_ONHEARTBEAT: + return NAME_ONHEARTBEAT; +// case EVENT_ONMODULELOAD: +// return NAME_ONMODULELOAD; + case EVENT_ONPLAYERDEATH: + return NAME_ONPLAYERDEATH; + case EVENT_ONPLAYERDYING: + return NAME_ONPLAYERDYING; + case EVENT_ONPLAYEREQUIPITEM: + return NAME_ONPLAYEREQUIPITEM; + case EVENT_ONPLAYERLEVELUP: + return NAME_ONPLAYERLEVELUP; + case EVENT_ONPLAYERREST_CANCELLED: + return NAME_ONPLAYERREST_CANCELLED; + case EVENT_ONPLAYERREST_STARTED: + return NAME_ONPLAYERREST_STARTED; + case EVENT_ONPLAYERREST_FINISHED: + return NAME_ONPLAYERREST_FINISHED; + case EVENT_ONPLAYERUNEQUIPITEM: + return NAME_ONPLAYERUNEQUIPITEM; + case EVENT_ONPLAYERRESPAWN: + return NAME_ONPLAYERRESPAWN; + case EVENT_ONUNAQUIREITEM: + return NAME_ONUNAQUIREITEM; + case EVENT_ONUSERDEFINED: + return NAME_ONUSERDEFINED; + case EVENT_ONPLAYERLEVELDOWN: + return NAME_ONPLAYERLEVELDOWN; + + // NPC events + case EVENT_NPC_ONBLOCKED: + return NAME_NPC_ONBLOCKED; + case EVENT_NPC_ONCOMBATROUNDEND: + return NAME_NPC_ONCOMBATROUNDEND; + case EVENT_NPC_ONCONVERSATION: + return NAME_NPC_ONCONVERSATION; + case EVENT_NPC_ONDAMAGED: + return NAME_NPC_ONDAMAGED; + case EVENT_NPC_ONDEATH: + return NAME_NPC_ONDEATH; + case EVENT_NPC_ONDISTURBED: + return NAME_NPC_ONDISTURBED; + case EVENT_NPC_ONHEARTBEAT: + return NAME_NPC_ONHEARTBEAT; + case EVENT_NPC_ONPERCEPTION: + return NAME_NPC_ONPERCEPTION; + case EVENT_NPC_ONPHYSICALATTACKED: + return NAME_NPC_ONPHYSICALATTACKED; + case EVENT_NPC_ONRESTED: + return NAME_NPC_ONRESTED; +// case EVENT_NPC_ONSPAWN: +// return NAME_NPC_ONSPAWN; + case EVENT_NPC_ONSPELLCASTAT: + return NAME_NPC_ONSPELLCASTAT; + + // Other events + case EVENT_ONHIT: + return NAME_ONHIT; + case EVENT_ONSPELLCAST: + return NAME_ONSPELLCAST; + case EVENT_ONPOWERMANIFEST: + return NAME_ONPOWERMANIFEST; + + // Item events + case EVENT_ITEM_ONACQUIREITEM: + return NAME_ITEM_ONACQUIREITEM; + case EVENT_ITEM_ONACTIVATEITEM: + return NAME_ITEM_ONACTIVATEITEM; + case EVENT_ITEM_ONPLAYEREQUIPITEM: + return NAME_ITEM_ONPLAYEREQUIPITEM; + case EVENT_ITEM_ONPLAYERUNEQUIPITEM: + return NAME_ITEM_ONPLAYERUNEQUIPITEM; + case EVENT_ITEM_ONUNAQUIREITEM: + return NAME_ITEM_ONUNAQUIREITEM; + case EVENT_ITEM_ONHIT: + return NAME_ITEM_ONHIT; + + // Callbackhooks + case CALLBACKHOOK_UNARMED: + return NAME_CALLBACKHOOK_UNARMED; + + default: + WriteTimestampedLogEntry("Unknown event id passed to EventTypeIdToName: " + IntToString(nEvent) + "\nAdding a name constant for it recommended."); + return "prc_event_array_" + IntToString(nEvent); + } + */ + + return "prc_event_array_" + IntToString(nEvent); + + //return ""; // Never going to reach this, but the compiler doesn't realize that :P +} + +string _GetMarkerLocalName(string sScript, string sArrayName) +{ + return "prc_eventhook_script:" + sScript + ";array:" + sArrayName; +} + + +int wrap_array_create(object store, string name){ + if(GetIsPC(store)) + return persistant_array_create(store, name); + else + return array_create(store, name); +} +int wrap_array_set_string(object store, string name, int i, string entry){ + if(GetIsPC(store)) + return persistant_array_set_string(store, name, i, entry); + else + return array_set_string(store, name, i, entry); +} +string wrap_array_get_string(object store, string name, int i){ + if(GetIsPC(store)) + return persistant_array_get_string(store, name, i); + else + return array_get_string(store, name, i); +} +int wrap_array_shrink(object store, string name, int size_new){ + if(GetIsPC(store)) + return persistant_array_shrink(store, name, size_new); + else + return array_shrink(store, name, size_new); +} +int wrap_array_get_size(object store, string name){ + if(GetIsPC(store)) + return persistant_array_get_size(store, name); + else + return array_get_size(store, name); +} +int wrap_array_exists(object store, string name){ + if(GetIsPC(store)) + return persistant_array_exists(store, name); + else + return array_exists(store, name); +} diff --git a/src/include/inc_heap.nss b/src/include/inc_heap.nss new file mode 100644 index 0000000..6127072 --- /dev/null +++ b/src/include/inc_heap.nss @@ -0,0 +1,592 @@ +//:://///////////////////////////////////////////// +//:: Heap include +//:: inc_heap +//::////////////////////////////////////////////// +/** @file + A simple maxheap, backed by an array. + Insertion priority is determined by an interger + parameter, data stored may be anything. + + Heap element indices begin at one, for convenience. + + For optimization, I use binary search instead of + switches. Result: It's fugly + + Return values are similar to the ones in + Mr. Figglesworth's sdl_array + + @author Ornedan + @date Created - 16.03.2005 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Constant defintions */ +////////////////////////////////////////////////// +/* +const int SDL_SUCCESS = 1; +const int SDL_ERROR_ALREADY_EXISTS = 1001; +const int SDL_ERROR_DOES_NOT_EXIST = 1002; +const int SDL_ERROR_OUT_OF_BOUNDS = 1003; +const int SDL_ERROR_NO_ZERO_SIZE = 1004; +const int SDL_ERROR_NOT_VALID_OBJECT = 1005; +*/ + +/// Heap entity type - float +const int ENTITY_TYPE_FLOAT = 1; +/// Heap entity type - integer +const int ENTITY_TYPE_INTEGER = 2; +/// Heap entity type - object +const int ENTITY_TYPE_OBJECT = 3; +/// Heap entity type - string +const int ENTITY_TYPE_STRING = 4; + +// Internal constants +const string HEAP_PREFIX = "heap_"; +const string KEY_SUFFIX = "_key"; +const string ELEMENT_SUFFIX = "_element"; +const string TYPE_SUFFIX = "_type"; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Initializes heap variables on the storage object. + * + * @param oStore object that the heap will be stored as locals on + * @param sName the name of the heap + * @return SDL_* constant + */ +int heap_create(object oStore, string sName); + +/** + * Deletes the heap and all it's entries. + * + * @param oStore object the heap is stored on + * @param sName the name of the heap + * @return SDL_* constant + */ +int heap_delete(object oStore, string sName); + +/** + * Checks to see if a heap exists. + * + * @param oStore object the heap is stored on + * @param sName the name of the heap + * @return TRUE if a heap with the given name is stored on oStore. + * FALSE otherwise. + */ +int heap_exists(object oStore, string sName); + +/** + * Gets the number of elements in the heap + * + * @param oStore object the heap is stored on + * @param sName the name of the heap + * @return the number of elements in the heap, or -1 on error. + */ +int heap_get_size(object oStore, string sName); + + +/** + * Heap insertion functions - float. + * Inserts the given key & element pair at a location in the heap + * determined by the key. + * Return order of elements inserted with the same key is not defined. + * + * @param oStore object the heap to be used is stored on + * @param sName the name of the heap + * @param nKey integer value used to determine insertion location + * @param fEntry element to be insterted + * @return SDL_* constant + */ +int heap_put_float(object oStore, string sName, int nKey, float fEntry); + +/** + * Heap insertion functions - integer. + * Inserts the given key & element pair at a location in the heap + * determined by the key. + * Return order of elements inserted with the same key is not defined. + * + * @param oStore object the heap to be used is stored on + * @param sName the name of the heap + * @param nKey integer value used to determine insertion location + * @param nEntry element to be insterted + * @return SDL_* constant + */ +int heap_put_int(object oStore, string sName, int nKey, int nEntry); + +/** + * Heap insertion functions - object. + * Inserts the given key & element pair at a location in the heap + * determined by the key. + * Return order of elements inserted with the same key is not defined. + * + * @param oStore object the heap to be used is stored on + * @param sName the name of the heap + * @param nKey integer value used to determine insertion location + * @param oEntry element to be insterted + * @return SDL_* constant + */ +int heap_put_object(object oStore, string sName, int nKey, object oEntry); + +/** + * Heap insertion functions - string +. + * Inserts the given key & element pair at a location in the heap + * determined by the key. + * Return order of elements inserted with the same key is not defined. + * + * @param oStore object the heap to be used is stored on + * @param sName the name of the heap + * @param nKey integer value used to determine insertion location + * @param sEntry element to be insterted + * @return SDL_* constant + */ +int heap_put_string(object oStore, string sName, int nKey, string sEntry); + + +/** + * Checks the type of the element at the top of the heap. Errors if + * heap does not exist or is empty. + * + * @param oStore object the heap to be used is stored on + * @param sName the name of the heap + * @return one of the ENTITY_TYPE_* constants, or 0 on error. + */ +int heap_get_type(object oStore, string sName); + +/** + * Gets the top element of the heap as float. + * + * @param oStore object the heap to be used is stored on + * @param sName the name of the heap + * @return top element of the heap as float. If the type + * of the top element was not float, returns 0.0f + */ +float heap_get_float(object oStore, string sName); + +/** + * Gets the top element of the heap as integer. + * + * @param oStore object the heap to be used is stored on + * @param sName the name of the heap + * @return top element of the heap as integer. If the type + * of the top element was not integer, returns 0 + */ +int heap_get_int(object oStore, string sName); + +/** + * Gets the top element of the heap as object. + * + * @param oStore object the heap to be used is stored on + * @param sName the name of the heap + * @return top element of the heap as object. If the type + * of the top element was not object, returns OBJECT_INVALID + */ +object heap_get_object(object oStore, string sName); + +/** + * Gets the top element of the heap as string. + * + * @param oStore object the heap to be used is stored on + * @param sName the name of the heap + * @return top element of the heap as string. If the type + * of the top element was not string, returns "" + */ +string heap_get_string(object oStore, string sName); + +/** + * Deletes the top element of the heap and reorders the heap to + * preserve the heap conditions. + * + * @param oStore object the heap to be used is stored on + * @param sName the name of the heap + * @return one of the SDL_* constants + */ +int heap_remove(object oStore, string sName); + + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + +//#include "inc_utility" +#include "prc_inc_array" //The only part of inc_utility it needs + + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + + + +int heap_create(object oStore, string sName){ + // Validity checks + if(!GetIsObjectValid(oStore)) + return SDL_ERROR_NOT_VALID_OBJECT; + if(GetLocalInt(oStore, sName)) + return SDL_ERROR_ALREADY_EXISTS; + + // Initialize the size (always one greater than the actual size) + SetLocalInt(oStore, HEAP_PREFIX + sName, 1); + return SDL_SUCCESS; +} + + +int heap_delete(object oStore, string sName){ + // Validity checks + int nSize = GetLocalInt(oStore, HEAP_PREFIX + sName); + if(!nSize) + return SDL_ERROR_DOES_NOT_EXIST; + + nSize -= 1; + int nTempType; + for(; nSize >= 0; nSize--){ + // Delete the storage values + nTempType = GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nSize) + TYPE_SUFFIX); + DeleteLocalInt (oStore, HEAP_PREFIX + sName + "_" + IntToString(nSize) + TYPE_SUFFIX); + DeleteLocalInt (oStore, HEAP_PREFIX + sName + "_" + IntToString(nSize) + KEY_SUFFIX); + + if(nTempType > ENTITY_TYPE_INTEGER){ + if(nTempType > ENTITY_TYPE_OBJECT) + DeleteLocalString(oStore, HEAP_PREFIX + sName + "_" + IntToString(nSize) + ELEMENT_SUFFIX); + else + DeleteLocalObject(oStore, HEAP_PREFIX + sName + "_" + IntToString(nSize) + ELEMENT_SUFFIX); + }else{ + if(nTempType > ENTITY_TYPE_FLOAT) + DeleteLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nSize) + ELEMENT_SUFFIX); + else + DeleteLocalFloat(oStore, HEAP_PREFIX + sName + "_" + IntToString(nSize) + ELEMENT_SUFFIX); + } + } + + // Delete the size variable + DeleteLocalInt(oStore, HEAP_PREFIX + sName); + return SDL_SUCCESS; +} + + +int heap_exists(object oStore, string sName){ + if(GetLocalInt(oStore, HEAP_PREFIX + sName)) + return TRUE; + else + return FALSE; +} + + +int heap_get_size(object oStore, string sName){ + return GetLocalInt(oStore, HEAP_PREFIX + sName) - 1; +} + + +/* Some functions for simulating the element links */ +int heap_parent(int nIndex){ return (nIndex - 1) / 2; } +int heap_lchild(int nIndex){ return (nIndex * 2) + 1; } +int heap_rchild(int nIndex){ return (nIndex * 2) + 2; } +/* An element swapper */ +void heap_swap(object oStore, string sName, int nInd1, int nInd2){ + int nTempKey = GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd1) + KEY_SUFFIX); + int nTempType = GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd1) + TYPE_SUFFIX); + float fTemp; + int nTemp; + object oTemp; + string sTemp; + + // Grab the element from index1 + if(nTempType > ENTITY_TYPE_INTEGER){ + if(nTempType > ENTITY_TYPE_OBJECT){ + sTemp = GetLocalString(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd1) + ELEMENT_SUFFIX); + DeleteLocalString(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd1) + ELEMENT_SUFFIX); + }else{ + oTemp = GetLocalObject(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd1) + ELEMENT_SUFFIX); + DeleteLocalObject(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd1) + ELEMENT_SUFFIX); + }}else{ + if(nTempType > ENTITY_TYPE_FLOAT){ + nTemp = GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd1) + ELEMENT_SUFFIX); + DeleteLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd1) + ELEMENT_SUFFIX); + }else{ + fTemp = GetLocalFloat(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd1) + ELEMENT_SUFFIX); + DeleteLocalFloat(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd1) + ELEMENT_SUFFIX); + }} + + // Start moving from index2 + int nTempType2 = GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd2) + TYPE_SUFFIX); + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd1) + TYPE_SUFFIX, + nTempType2); + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd1) + KEY_SUFFIX, + GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd2) + KEY_SUFFIX)); + // Illegal use of enumerations. Don't do this at home :p + if(nTempType2 > ENTITY_TYPE_INTEGER){ + if(nTempType2 > ENTITY_TYPE_OBJECT){ + SetLocalString(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd1) + ELEMENT_SUFFIX, + GetLocalString(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd2) + ELEMENT_SUFFIX)); + DeleteLocalString(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd2) + ELEMENT_SUFFIX); + }else{ + SetLocalObject(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd1) + ELEMENT_SUFFIX, + GetLocalObject(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd2) + ELEMENT_SUFFIX)); + DeleteLocalObject(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd2) + ELEMENT_SUFFIX); + }}else{ + if(nTempType2 > ENTITY_TYPE_FLOAT){ + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd1) + ELEMENT_SUFFIX, + GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd2) + ELEMENT_SUFFIX)); + DeleteLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd2) + ELEMENT_SUFFIX); + }else{ + SetLocalFloat(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd1) + ELEMENT_SUFFIX, + GetLocalFloat(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd2) + ELEMENT_SUFFIX)); + DeleteLocalFloat(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd2) + ELEMENT_SUFFIX); + }} + + // Place the stuff copied to temporary variables to their new place + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd2) + TYPE_SUFFIX, + nTempType); + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd2) + KEY_SUFFIX, + nTempKey); + if(nTempType > ENTITY_TYPE_INTEGER){ + if(nTempType > ENTITY_TYPE_OBJECT) + SetLocalString(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd2) + ELEMENT_SUFFIX, + sTemp); + else + SetLocalObject(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd2) + ELEMENT_SUFFIX, + oTemp); + }else{ + if(nTempType > ENTITY_TYPE_FLOAT) + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd2) + ELEMENT_SUFFIX, + nTemp); + else + SetLocalFloat(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInd2) + ELEMENT_SUFFIX, + fTemp); + } +} + +/* A function that gets the location where the given + * key should be inserted. Moves other elements around + * to clear the location + */ +int heap_get_insert_location(object oStore, string sName, int nKey){ + // Insert into position just beyond the end of current elements + int nIndex = heap_get_size(oStore, sName); + int nTempType; + while(nIndex > 0 && GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(heap_parent(nIndex)) + KEY_SUFFIX) < nKey){ + // Move the parent entry down + nTempType = GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(heap_parent(nIndex)) + TYPE_SUFFIX); + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nIndex) + TYPE_SUFFIX, + nTempType); + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nIndex) + KEY_SUFFIX, + GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(heap_parent(nIndex)) + KEY_SUFFIX)); + // Illegal use of enumerations. Don't do this at home :p + // The old entry is deleted, since the entry to be inserted might not be of the same type + if(nTempType > ENTITY_TYPE_INTEGER){ + if(nTempType > ENTITY_TYPE_OBJECT){ + SetLocalString(oStore, HEAP_PREFIX + sName + "_" + IntToString(nIndex) + ELEMENT_SUFFIX, + GetLocalString(oStore, HEAP_PREFIX + sName + "_" + IntToString(heap_parent(nIndex)) + ELEMENT_SUFFIX)); + DeleteLocalString(oStore, HEAP_PREFIX + sName + "_" + IntToString(heap_parent(nIndex)) + ELEMENT_SUFFIX); + }else{ + SetLocalObject(oStore, HEAP_PREFIX + sName + "_" + IntToString(nIndex) + ELEMENT_SUFFIX, + GetLocalObject(oStore, HEAP_PREFIX + sName + "_" + IntToString(heap_parent(nIndex)) + ELEMENT_SUFFIX)); + DeleteLocalObject(oStore, HEAP_PREFIX + sName + "_" + IntToString(heap_parent(nIndex)) + ELEMENT_SUFFIX); + }}else{ + if(nTempType > ENTITY_TYPE_FLOAT){ + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nIndex) + ELEMENT_SUFFIX, + GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(heap_parent(nIndex)) + ELEMENT_SUFFIX)); + DeleteLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(heap_parent(nIndex)) + ELEMENT_SUFFIX); + }else{ + SetLocalFloat(oStore, HEAP_PREFIX + sName + "_" + IntToString(nIndex) + ELEMENT_SUFFIX, + GetLocalFloat(oStore, HEAP_PREFIX + sName + "_" + IntToString(heap_parent(nIndex)) + ELEMENT_SUFFIX)); + DeleteLocalFloat(oStore, HEAP_PREFIX + sName + "_" + IntToString(heap_parent(nIndex)) + ELEMENT_SUFFIX); + }} + + nIndex = heap_parent(nIndex); + } + + return nIndex; +} +/*if(a > 2){ + if(a > 3) + b = ENTITY_TYPE_STRING; + else + b = ENTITY_TYPE_OBJECT; +}else{ + if(a > 1) + b = ENTITY_TYPE_INTEGER; + else + b = ENTITY_TYPE_FLOAT; +}*/ + +int heap_put_float(object oStore, string sName, int nKey, float fEntry){ + // Validity checks + if(!GetLocalInt(oStore, HEAP_PREFIX + sName)) + return SDL_ERROR_DOES_NOT_EXIST; + + // Get the location to insert to + int nInsert = heap_get_insert_location(oStore, sName, nKey); + + // Insert the new element + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInsert) + TYPE_SUFFIX, ENTITY_TYPE_FLOAT); + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInsert) + KEY_SUFFIX, nKey); + SetLocalFloat(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInsert) + ELEMENT_SUFFIX, fEntry); + + // Mark the insertion + SetLocalInt(oStore, HEAP_PREFIX + sName, GetLocalInt(oStore, HEAP_PREFIX + sName) + 1); + return SDL_SUCCESS; +} + +int heap_put_int(object oStore, string sName, int nKey, int nEntry){ + // Validity checks + if(!GetLocalInt(oStore, HEAP_PREFIX + sName)) + return SDL_ERROR_DOES_NOT_EXIST; + + // Get the location to insert to + int nInsert = heap_get_insert_location(oStore, sName, nKey); + + // Insert the new element + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInsert) + KEY_SUFFIX, nKey); + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInsert) + TYPE_SUFFIX, ENTITY_TYPE_INTEGER); + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInsert) + ELEMENT_SUFFIX, nEntry); + + // Mark the insertion + SetLocalInt(oStore, HEAP_PREFIX + sName, GetLocalInt(oStore, HEAP_PREFIX + sName) + 1); + return SDL_SUCCESS; +} + +int heap_put_string(object oStore, string sName, int nKey, string sEntry){ + // Validity checks + if(!GetLocalInt(oStore, HEAP_PREFIX + sName)) + return SDL_ERROR_DOES_NOT_EXIST; + + // Get the location to insert to + int nInsert = heap_get_insert_location(oStore, sName, nKey); + + // Insert the new element + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInsert) + KEY_SUFFIX, nKey); + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInsert) + TYPE_SUFFIX, ENTITY_TYPE_STRING); + SetLocalString(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInsert) + ELEMENT_SUFFIX, sEntry); + + // Mark the insertion + SetLocalInt(oStore, HEAP_PREFIX + sName, GetLocalInt(oStore, HEAP_PREFIX + sName) + 1); + return SDL_SUCCESS; +} + +int heap_put_object(object oStore, string sName, int nKey, object oEntry){ + // Validity checks + if(!GetLocalInt(oStore, HEAP_PREFIX + sName)) + return SDL_ERROR_DOES_NOT_EXIST; + + // Get the location to insert to + int nInsert = heap_get_insert_location(oStore, sName, nKey); + + // Insert the new element + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInsert) + KEY_SUFFIX, nKey); + SetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInsert) + TYPE_SUFFIX, ENTITY_TYPE_OBJECT); + SetLocalObject(oStore, HEAP_PREFIX + sName + "_" + IntToString(nInsert) + ELEMENT_SUFFIX, oEntry); + + // Mark the insertion + SetLocalInt(oStore, HEAP_PREFIX + sName, GetLocalInt(oStore, HEAP_PREFIX + sName) + 1); + return SDL_SUCCESS; +} + + +int heap_remove(object oStore, string sName){ + // Validity checks + if(!GetLocalInt(oStore, HEAP_PREFIX + sName)) + return SDL_ERROR_DOES_NOT_EXIST; + + int nSize = heap_get_size(oStore, sName); + if(!nSize) + return SDL_ERROR_OUT_OF_BOUNDS; + + // Move the bottommost element over the max + nSize--; + heap_swap(oStore, sName, 0, nSize); + // Delete the bottommost element + int nTempType = GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nSize) + TYPE_SUFFIX); + DeleteLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nSize) + TYPE_SUFFIX); + DeleteLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nSize) + KEY_SUFFIX); + + if(nTempType > ENTITY_TYPE_INTEGER){ + if(nTempType > ENTITY_TYPE_OBJECT) + DeleteLocalString(oStore, HEAP_PREFIX + sName + "_" + IntToString(nSize) + ELEMENT_SUFFIX); + else + DeleteLocalObject(oStore, HEAP_PREFIX + sName + "_" + IntToString(nSize) + ELEMENT_SUFFIX); + }else{ + if(nTempType > ENTITY_TYPE_FLOAT) + DeleteLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nSize) + ELEMENT_SUFFIX); + else + DeleteLocalFloat(oStore, HEAP_PREFIX + sName + "_" + IntToString(nSize) + ELEMENT_SUFFIX); + } + // Mark the heapsize as reduced + SetLocalInt(oStore, HEAP_PREFIX + sName, nSize + 1); + // Move nSize to point at the new last entry + nSize--; + // Re-assert the heap conditions + int nLeft, nRight, nMax, nIndex = 0; + int bContinue = TRUE; + while(bContinue){ + bContinue = FALSE; + nLeft = heap_lchild(nIndex); + nRight = heap_rchild(nIndex); + + if(nRight <= nSize){ + if(GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nLeft) + KEY_SUFFIX) + > + GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nLeft) + KEY_SUFFIX)) + nMax = nLeft; + else + nMax = nRight; + + if(GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nIndex) + KEY_SUFFIX) + < + GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nMax) + KEY_SUFFIX)){ + heap_swap(oStore, sName, nIndex, nMax); + bContinue = TRUE; + } + } + else if(nLeft == nSize && + GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nIndex) + KEY_SUFFIX) + < + GetLocalInt(oStore, HEAP_PREFIX + sName + "_" + IntToString(nLeft) + KEY_SUFFIX)) + heap_swap(oStore, sName, nIndex, nLeft); + } + + return SDL_SUCCESS; +} + + +int heap_get_type(object oStore, string sName){ + // Validity checks + if(!GetLocalInt(oStore, HEAP_PREFIX + sName)) + return SDL_ERROR_DOES_NOT_EXIST; + + // Return the heap top element's type + return GetLocalInt(oStore, HEAP_PREFIX + sName + "_0" + TYPE_SUFFIX); +} + + +float heap_get_float(object oStore, string sName){ + return GetLocalInt(oStore, HEAP_PREFIX + sName + "_0" + TYPE_SUFFIX) == ENTITY_TYPE_FLOAT ? + GetLocalFloat(oStore, HEAP_PREFIX + sName + "_0" + ELEMENT_SUFFIX) : + 0.0f; +} + +int heap_get_int(object oStore, string sName){ + return GetLocalInt(oStore, HEAP_PREFIX + sName + "_0" + TYPE_SUFFIX) == ENTITY_TYPE_INTEGER ? + GetLocalInt(oStore, HEAP_PREFIX + sName + "_0" + ELEMENT_SUFFIX) : + 0; +} + +object heap_get_object(object oStore, string sName){ + return GetLocalInt(oStore, HEAP_PREFIX + sName + "_0" + TYPE_SUFFIX) == ENTITY_TYPE_OBJECT ? + GetLocalObject(oStore, HEAP_PREFIX + sName + "_0" + ELEMENT_SUFFIX) : + OBJECT_INVALID; +} + +string heap_get_string(object oStore, string sName){ + return GetLocalInt(oStore, HEAP_PREFIX + sName + "_0" + TYPE_SUFFIX) == ENTITY_TYPE_STRING ? + GetLocalString(oStore, HEAP_PREFIX + sName + "_0" + ELEMENT_SUFFIX) : + ""; +} + + +//void main(){} diff --git a/src/include/inc_item_props.nss b/src/include/inc_item_props.nss new file mode 100644 index 0000000..b1edfc2 --- /dev/null +++ b/src/include/inc_item_props.nss @@ -0,0 +1,1961 @@ +//:://///////////////////////////////////////////// +//:: [Item Property Function] +//:: [inc_item_props.nss] +//::////////////////////////////////////////////// +/** @file + This file defines several functions used to + manipulate item properties. In particular, + It defines functions used in the prc_* files + to apply passive feat bonuses. + + Take special note of SetCompositeBonus. This + function is crucial for allowing bonuses of the + same type from different PRCs to stack. +*/ +//::////////////////////////////////////////////// +//:: Created By: Aaon Graywolf +//:: Created On: Dec 19, 2003 +//::////////////////////////////////////////////// +//:: Update: Jan 4 2002 +//:: - Extended Composite bonus function to handle pretty much +//:: every property that can possibly be composited. + +////////////////////////////// +// Function Prototypes // +////////////////////////////// + +#include "prc_feat_const" +#include "prc_misc_const" + +//:: Test void +//:: void main (){} + +/** + * Checks oItem for all properties matching iType and iSubType. Removes all + * these properties and returns their total CostTableVal. + * This function should only be used for Item Properties that have simple + * integer CostTableVals, such as AC, Save/Skill Bonuses, etc. + * + * @param oItem The item on which to look for the itemproperties. Usually a + * skin object. + * @param iType ITEM_PROPERTY_* constant of the itemproperty to look for. + * @param iSubType IP_CONST_* constant of itemproperty SubType if applicable. + * @return The total CostTableValue of the itemproperties found + * matching iType and iSubType. + */ +int TotalAndRemoveProperty(object oItem, int iType, int iSubType = -1); + +/** + * Used to roll bonuses from multiple sources into a single property. + * Only supports properties which have simple integer CostTableVals. + * See the code for a list of supported types. Some important properties + * that CANNOT be composited are SpellResistance, DamageBonus, DamageReduction + * DamageResistance and MassiveCritical, as these use 2da-referencing constants + * instead of integers for CostTableVals. + * + * + * LocalInts from SetCompositeBonus() when applied to the skin need to be + * added to DeletePRCLocalInts() in prc_inc_function in order for the system to + * properly clear the properties when the itemproperties are removed using + * ScrubPCSkin(). + * When applied to equipment, the LocalInts need to be added to + * DeletePRCLocalIntsT() in inc_item_props. + * + * + * Use SetCompositeBonus() for the skin, SetCompositeBonusT() for other equipment. + * + * + * @param oPC Object wearing / using the item + * @param oItem Object to apply bonus to + * @param sBonus String name of the source for this bonus + * @param iVal Integer value to set this bonus to + * @param iType ITEM_PROPERTY_* constant of itemproperty to apply + * @param iSubType IP_CONST_* constant of itemproperty SubType if applicable + */ +void SetCompositeBonus(object oItem, string sBonus, int iVal, int iType, int iSubType = -1); + +/** + * See SetCompositeBonus(). This is an equivalent, except it applies the itemproperties as + * temporary ones with duration of 9999 seconds. + */ +void SetCompositeBonusT(object oItem, string sBonus, int iVal, int iType, int iSubType = -1); + +/** + * Calculates the total Bonus AC granted by itemproperties on an item. + * + * @param oItem The item to calculate AC bonus given by. + * @return The total of all AC bonus itemproperties on oItem. + */ +int GetACBonus(object oItem); + +/** + * Calculates the Base AC (i.e. AC without bonuses) of an item + * + * @param oItem The item to calculate base AC for. + * @return The base AC, as calculated by removing the value returned by + * GetACBonus() on the item from the value returned by GetItemACValue(). + */ +int GetBaseAC(object oItem); + +/** + * Gets the itemproperty number of a specific SR value + */ +int GetSRByValue(int nValue); + +/** + * Returns the opposite element from iElem or -1 if iElem is not valid + * Can be useful for determining elemental strengths and weaknesses + * + * @param iElem IP_CONST_DAMAGETYPE_* constant. + * @return IP_CONST_DAMAGETYPE_* constant of the opposing damage type. + */ +int GetOppositeElement(int iElem); + +/** + * Used to find the damage type done by any given weapon using 2da lookups. + * Only usable on weapon items. + * + * @param oWeapon The weapon whose damage type to examine. + * @return One of IP_CONST_DAMAGETYPE_BLUDGEONING, + * IP_CONST_DAMAGETYPE_PIERCING, + * IP_CONST_DAMAGETYPE_SLASHING + * if used on a weapon item. Otherwise -1. + */ +int GetItemPropertyDamageType(object oWeapon); + +/** + * Used to find the damage type done by any given weapon using 2da lookups. + * Only usable on weapon items. + * + * @param oWeapon The weapon whose damage type to examine. + * @return One of DAMAGE_TYPE_BLUDGEONING, + * DAMAGE_TYPE_PIERCING, + * DAMAGE_TYPE_SLASHING + * if used on a weapon item. Otherwise -1. + */ +int GetItemDamageType(object oWeapon); + +/** + * To ensure a damage bonus stacks with any existing enhancement bonus, + * create a temporary damage bonus on the weapon. You do not want to do this + * if the weapon is of the "slashing and piercing" type, because the + * enhancement bonus is considered "physical", not "slashing" or "piercing". + * + * Because of this strange Bioware behavior, you'll want to only call this code as such: + * + * if (StringToInt(Get2DACache("baseitems","WeaponType",GetBaseItemType(oWeapon))) != 4) + * { + * IPEnhancementBonusToDamageBonus(oWeapon); + * } + * + * + * @param oWeap The weapon to perform the operation on. + */ +void IPEnhancementBonusToDamageBonus(object oWeap); + +/** + * Used to roll bonuses from multiple sources into a single property + * Only supports damage bonuses in a linear fashion - +1 through +20. + * + * Note: If you do not define iSubType, the damage applied will most likely not + * stack with any enhancement bonus. See IPEnhancementBonusToDamageBonus() above. + * + * + * LocalInts from SetCompositeDamageBonus() need to be added to + * DeletePRCLocalInts() in prc_inc_function. + * LocalInts from SetCompositeDamageBonusT() need to be added to + * DeletePRCLocalIntsT() in inc_item_props. + * + * + * + * @param oItem Object to apply bonus to + * @param sBonus String name of the source for this bonus + * @param iVal Integer value to set this bonus to (damage +1 through +20) + * @param iSubType IP_CONST_DAMAGETYPE* constant -- leave blank to use the weapon's damage type. + */ +void SetCompositeDamageBonusT(object oItem, string sBonus, int iVal, int iSubType = -1); // for temporary bonuses + +/** + * Removes a number of itemproperties matching the parameters. + * + * @param oItem The item to remove itemproperties from. + * @param iType ITEM_PROPERTY_* constant. + * @param iSubType IP_CONST_* constant of the itemproperty subtype or -1 to + * match all possible subtypes. Also use -1 if the itemproperty + * has no subtypes. + * @param iCostVal CostTableValue of the itemproperty to remove. Again, -1 for + * any. + * @param iNum How many matching itemproperties to remove. -1 for all. Defaults + * to 1. + * @param sFlag Name of a local integer on the item to set to 0 when this is run. + * If anyone knows why the fuck this is done, please write here - Ornedan + * @param iParam1 Param1 value of the itemproperty to remove. Again, -1 for any. + * @param iDuration DURATION_TYPE_* constant. The duration type of the itemproperty. + * Again, -1 for any. + */ +void RemoveSpecificProperty(object oItem, int iType, int iSubType = -1, int iCostVal = -1, int iNum = 1, + string sFlag = "", int iParam1 = -1, int iDuration = DURATION_TYPE_PERMANENT); + +/** + * Finds the first itemproperty matching the parameters. + * Use GetIsItemPropertyValid() to check if an itemproperty exists. + * + * @param oItem The item to remove itemproperties from. + * @param iType ITEM_PROPERTY_* constant. + * @param iSubType IP_CONST_* constant of the itemproperty subtype or -1 to + * match all possible subtypes. Also use -1 if the itemproperty + * has no subtypes. + * @param iCostVal CostTableValue of the itemproperty to remove. Again, -1 for + * any. + * @param iParam1 Param1 value of the itemproperty to remove. Again, -1 for any. + * @param iDuration DURATION_TYPE_* constant. The duration type of the itemproperty. + * Again, -1 for any. + */ +itemproperty GetSpecificProperty(object oItem, int iType, int iSubType = -1, int iCostVal = -1, + int iParam1 = -1, int iDuration = DURATION_TYPE_PERMANENT); + +/** + * Keeps track of Attack Bonus effects and stacks them appropriately... you cannot set up + * "special" attack bonuses against races or alignments, but it will keep seperate tabs on + * on-hand attack bonuses and off-hand attack bonuses. + * + * NOTE: This attack bonus is an effect on the creature, not an item property. Item Property + * attacks have the downside that they pierce DR, whereas effects do not. + * + * NOTE: DO *NOT* USE THIS FUNCTION WITH SPELL/SLA EFFECTS. They stack fine on their own. + * + * + * LocalInts in and finally SetCompositeAttackBonus() need to be added to + * DeletePRCLocalInts() in prc_inc_function. + * + * + * + * @param oPC PC/NPC you wish to apply an attack bonus effect to + * @param sBonus The unique name you wish to give this attack bonus + * @param iVal The amount the attack bonus should be (there is a hardcoded limit of 20) + * @param iSubType ATTACK_BONUS_MISC applies to both hands, ATTACK_BONUS_ONHAND applies to the right (main) + * hand, and ATTACK_BONUS_OFFHAND applies to the left (off) hand + */ +void SetCompositeAttackBonus(object oPC, string sBonus, int iVal, int iSubType = ATTACK_BONUS_MISC); + +/** + * Internal function. + * Handles maintaining a list of composite itemproperty names for + * use when clearing the itemproperties away. + * + * @param oItem The item a composite bonus is being set on. + * @param sBase The base name for the local variables used. For differentiating between + * permanent and temporary lists. + * @param sComposite The name of a composite property being set. + */ +void UpdateUsedCompositeNamesList(object oItem, string sBase, string sComposite); + +/** + * Internal function. + * Deletes all the composite itemproperty names listed and deletes the list. + * + * @param oItem The item being cleaned of composite properties. + * @param sBase The base name for the local variables used. For differentiating between + * permanent and temporary lists. + */ +void DeleteNamedComposites(object oItem, string sBase); + +/** + * Determines if any of the given item's itemproperties would make it a + * magical item. + * + * @param oItem The item to test + * @return TRUE if the item is a magical item, FALSE otherwise + */ +int GetIsMagicItem(object oItem); + +/** + * Special function for adding ip feats to creatures hide. + * The hide is always equipped so it easier to use GetHasFeat() + * than to loop over all ips to check if given skin was already + * added. + * @param nFeat The ID of real feat we want to add (row number in feat.2da) + * @param IPFeat The ID of ip feat (row number in iprp_feats.2da) + * @param oSkin Target item to which we add the feat - should be an equipped + * creature skin (the script doesn't check it it's valid) + * @param oPC Owner of oSkin + */ +void AddSkinFeat(int nFeat, int IPFeat, object oSkin, object oPC = OBJECT_SELF, float fDuration = 0.0f); + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + +#include "inc_2dacache" +#include "inc_persist_loca" +#include "inc_prc_npc" +//#include "inc_utility" +#include "prc_ipfeat_const" +#include "prc_inc_array" + +////////////////////////////// +// Function Definitions // +////////////////////////////// + +int TotalAndRemoveProperty(object oItem, int iType, int iSubType = -1) +{ + itemproperty ip = GetFirstItemProperty(oItem); + int total = 0; + + while(GetIsItemPropertyValid(ip)){ + if(GetItemPropertyType(ip) == iType && (GetItemPropertySubType(ip) == iSubType || iSubType == -1)){ + total += GetItemPropertyCostTableValue(ip); + RemoveItemProperty(oItem, ip); + } + ip = GetNextItemProperty(oItem); + } + return total; +} + +itemproperty GetSpecificProperty(object oItem, int iType, int iSubType = -1, int iCostVal = -1, + int iParam1 = -1, int iDuration = DURATION_TYPE_PERMANENT) +{ + itemproperty ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip)){ + if(GetItemPropertyType(ip) == iType && + (GetItemPropertyDurationType(ip) == iDuration || iDuration == -1) && + (GetItemPropertySubType(ip) == iSubType || iSubType == -1) && + (GetItemPropertyCostTableValue(ip) == iCostVal || iCostVal == -1) && + (GetItemPropertyParam1Value(ip) == iParam1 || iParam1 == -1) + ) + { + return ip; + } + ip = GetNextItemProperty(oItem); + } + return ip; +} + +// Removes one or more item properties from an item that match the specified criteria. +// +// Parameters: +// oItem - The item object from which the property or properties will be removed. +// iType - The item property type (e.g., ITEM_PROPERTY_ENHANCEMENT_BONUS). +// iSubType - Optional. The property subtype to match. Use -1 to match any subtype. +// iCostVal - Optional. The cost table value to match. Use -1 to match any value. +// iNum - Optional. The number of matching properties to remove. Use -1 to remove all matches. Default is 1. +// sFlag - Optional. A local string/int flag name to clear on the item after removal. Default is "" (does nothing). +// iParam1 - Optional. Additional property-specific parameter to match (e.g., for saving throw bonuses). Use -1 to ignore. +// iDuration - Optional. Duration type of the property to match (e.g., DURATION_TYPE_PERMANENT). Use -1 to match any. +// +// Notes: +// - This function loops through item properties and removes the first `iNum` that match the given filters. +// - If iNum is -1, it removes all matching properties. +// - After removal, if sFlag is not an empty string, the local int with name sFlag is cleared on the item. + +void RemoveSpecificProperty(object oItem, int iType, int iSubType = -1, int iCostVal = -1, int iNum = 1, + string sFlag = "", int iParam1 = -1, int iDuration = DURATION_TYPE_PERMANENT) +{ + int iRemoved = 0; + itemproperty ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip) && (iRemoved < iNum || iNum == -1)){ + if(GetItemPropertyType(ip) == iType && + (GetItemPropertyDurationType(ip) == iDuration || iDuration == -1) && + (GetItemPropertySubType(ip) == iSubType || iSubType == -1) && + (GetItemPropertyCostTableValue(ip) == iCostVal || iCostVal == -1) && + (GetItemPropertyParam1Value(ip) == iParam1 || iParam1 == -1) + ) + { + RemoveItemProperty(oItem, ip); + iRemoved++; + } + ip = GetNextItemProperty(oItem); + } + SetLocalInt(oItem, sFlag, 0); +} + +//SetCompositeBonus is a special case that doesn't need to use DelayAddItemProperty because +//the property that is added is always different from the one that was deleted by TotalAndRemoveProperty. +void SetCompositeBonus(object oItem, string sBonus, int iVal, int iType, int iSubType = -1) +{ + int iOldVal = GetLocalInt(oItem, sBonus); + int iChange = iVal - iOldVal; + int iCurVal = 0; + + if(iChange == 0) return; + + // Store the bonus name for use during cleanup + UpdateUsedCompositeNamesList(oItem, "PRC_CBon", sBonus); + + //Moved TotalAndRemoveProperty into switch to prevent + //accidental deletion of unsupported property types + switch(iType) + { + case ITEM_PROPERTY_ABILITY_BONUS: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + iCurVal -= GetPersistantLocalInt(GetItemPossessor(oItem), "LetoAbility_"+IntToString(iSubType)); + if (DEBUG) DoDebug("Ability Decrease #1: oItem "+GetName(oItem)+" sBonus "+sBonus+" iChange "+IntToString(iChange)+" iCurVal "+IntToString(iCurVal)+" iSubType "+IntToString(iSubType)); + if ((iCurVal + iChange) > 50) + { + iVal -= iCurVal + iChange - 50; + iCurVal = 50; + iChange = 0; + } + if(iCurVal+iChange > 0) + { + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyAbilityBonus(iSubType, iCurVal + iChange), oItem); + if (DEBUG) DoDebug("Ability Increase"); + } + else if(iCurVal+iChange < 0) + { + if (DEBUG) DoDebug("Ability Decrease #2: oItem "+GetName(oItem)+" sBonus "+sBonus+" iChange "+IntToString(iChange)+" iSubType "+IntToString(iSubType)); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyDecreaseAbility(iSubType, -1*(iCurVal + iChange)), oItem); + } + break; + case ITEM_PROPERTY_AC_BONUS: + iCurVal = TotalAndRemoveProperty(oItem, iType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyACBonus(iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyACBonusVsAlign(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyACBonusVsDmgType(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyACBonusVsRace(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_AC_BONUS_VS_SPECIFIC_ALIGNMENT: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyACBonusVsSAlign(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_ATTACK_BONUS: + iCurVal = TotalAndRemoveProperty(oItem, iType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyAttackBonus(iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyAttackBonusVsAlign(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyAttackBonusVsRace(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyAttackBonusVsSAlign(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyDamageBonusVsRace(iSubType, DAMAGE_TYPE_SLASHING, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_DECREASED_ABILITY_SCORE: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 10) + { + iVal -= iCurVal + iChange - 10; + iCurVal = 10; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyDecreaseAbility(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_DECREASED_AC: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 5) + { + iVal -= iCurVal + iChange - 5; + iCurVal = 5; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyDecreaseAC(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER: + iCurVal = TotalAndRemoveProperty(oItem, iType); + if ((iCurVal + iChange) > 5) + { + iVal -= iCurVal + iChange - 5; + iCurVal = 5; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyAttackPenalty(iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER: + iCurVal = TotalAndRemoveProperty(oItem, iType); + if ((iCurVal + iChange) > 5) + { + iVal -= iCurVal + iChange - 5; + iCurVal = 5; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyEnhancementPenalty(iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_DECREASED_SAVING_THROWS: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyReducedSavingThrow(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyReducedSavingThrowVsX(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_DECREASED_SKILL_MODIFIER: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 10) + { + iVal -= iCurVal + iChange - 10; + iCurVal = 10; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyDecreaseSkill(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_ENHANCEMENT_BONUS: + iCurVal = TotalAndRemoveProperty(oItem, iType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyEnhancementBonus(iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyEnhancementBonusVsAlign(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP: + iCurVal = TotalAndRemoveProperty(oItem, iType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyEnhancementBonusVsRace(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyEnhancementBonusVsSAlign(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_MIGHTY: + iCurVal = TotalAndRemoveProperty(oItem, iType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyMaxRangeStrengthMod(iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_REGENERATION: + iCurVal = TotalAndRemoveProperty(oItem, iType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyRegeneration(iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_REGENERATION_VAMPIRIC: + iCurVal = TotalAndRemoveProperty(oItem, iType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyVampiricRegeneration(iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_SAVING_THROW_BONUS: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyBonusSavingThrowVsX(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyBonusSavingThrow(iSubType, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_SKILL_BONUS: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 50) + { + iVal -= iCurVal + iChange - 50; + iCurVal = 50; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertySkillBonus(iSubType, iCurVal + iChange), oItem); + break; + } + SetLocalInt(oItem, sBonus, iVal); +} + +int GetACBonus(object oItem) +{ + if(!GetIsObjectValid(oItem)) return 0; + + itemproperty ip = GetFirstItemProperty(oItem); + int iTotal = 0; + + while(GetIsItemPropertyValid(ip)){ + if(GetItemPropertyType(ip) == ITEM_PROPERTY_AC_BONUS) + iTotal += GetItemPropertyCostTableValue(ip); + ip = GetNextItemProperty(oItem); + } + return iTotal; +} + +int GetBaseAC(object oItem){ return GetItemACValue(oItem) - GetACBonus(oItem); } + +int GetOppositeElement(int iElem) +{ + switch(iElem){ + case IP_CONST_DAMAGETYPE_ACID: + return DAMAGE_TYPE_ELECTRICAL; + case IP_CONST_DAMAGETYPE_COLD: + return IP_CONST_DAMAGETYPE_FIRE; + case IP_CONST_DAMAGETYPE_DIVINE: + return IP_CONST_DAMAGETYPE_NEGATIVE; + case IP_CONST_DAMAGETYPE_ELECTRICAL: + return IP_CONST_DAMAGETYPE_ACID; + case IP_CONST_DAMAGETYPE_FIRE: + return IP_CONST_DAMAGETYPE_COLD; + case IP_CONST_DAMAGETYPE_NEGATIVE: + return IP_CONST_DAMAGETYPE_POSITIVE; + } + return -1; +} + +int TotalAndRemovePropertyT(object oItem, int iType, int iSubType = -1) +{ + itemproperty ip = GetFirstItemProperty(oItem); + int total = 0; + int iTemp; + + while(GetIsItemPropertyValid(ip)){ + if(GetItemPropertyType(ip) == iType && (GetItemPropertySubType(ip) == iSubType || iSubType == -1)){ + iTemp = GetItemPropertyCostTableValue(ip); + total = iTemp > total ? iTemp : total; + if (GetItemPropertyDurationType(ip)== DURATION_TYPE_TEMPORARY) RemoveItemProperty(oItem, ip); + } + ip = GetNextItemProperty(oItem); + } + return total; +} + +//SetCompositeBonusT is a special case that doesn't need to use DelayAddItemProperty because +//the property that is added is always different from the one that was deleted by TotalAndRemovePropertyT. +void SetCompositeBonusT(object oItem, string sBonus, int iVal, int iType, int iSubType = -1) +{ + int iOldVal = GetLocalInt(oItem, sBonus); + if (GetLocalInt(GetItemPossessor(oItem),"ONREST")) iOldVal =0; + int iChange = iVal - iOldVal; + int iCurVal = 0; + + if(iChange == 0) return; + + // Store the bonus name for use during cleanup + UpdateUsedCompositeNamesList(oItem, "PRC_CBonT", sBonus); + + //Moved TotalAndRemoveProperty into switch to prevent + //accidental deletion of unsupported property types + switch(iType) + { + case ITEM_PROPERTY_ABILITY_BONUS: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 50) + { + iVal -= iCurVal + iChange - 50; + iCurVal = 50; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyAbilityBonus(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_AC_BONUS: + iCurVal = TotalAndRemovePropertyT(oItem, iType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyACBonus(iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyACBonusVsAlign(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyACBonusVsDmgType(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyACBonusVsRace(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_AC_BONUS_VS_SPECIFIC_ALIGNMENT: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyACBonusVsSAlign(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_ATTACK_BONUS: + iCurVal = TotalAndRemovePropertyT(oItem, iType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyAttackBonus(iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyAttackBonusVsAlign(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyAttackBonusVsRace(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyAttackBonusVsSAlign(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP: + iCurVal = TotalAndRemoveProperty(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + if(iCurVal+iChange > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyDamageBonusVsRace(iSubType, DAMAGE_TYPE_SLASHING, iCurVal + iChange), oItem); + break; + case ITEM_PROPERTY_DECREASED_ABILITY_SCORE: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyDecreaseAbility(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_DECREASED_AC: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 5) + { + iVal -= iCurVal + iChange - 5; + iCurVal = 5; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyDecreaseAC(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER: + iCurVal = TotalAndRemovePropertyT(oItem, iType); + if ((iCurVal + iChange) > 5) + { + iVal -= iCurVal + iChange - 5; + iCurVal = 5; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyAttackPenalty(iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER: + iCurVal = TotalAndRemovePropertyT(oItem, iType); + if ((iCurVal + iChange) > 5) + { + iVal -= iCurVal + iChange - 5; + iCurVal = 5; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyEnhancementPenalty(iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_DECREASED_SAVING_THROWS: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyReducedSavingThrowVsX(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyReducedSavingThrow(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_DECREASED_SKILL_MODIFIER: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 10) + { + iVal -= iCurVal + iChange - 10; + iCurVal = 10; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyDecreaseSkill(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_ENHANCEMENT_BONUS: + iCurVal = TotalAndRemovePropertyT(oItem, iType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyEnhancementBonus(iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyEnhancementBonusVsAlign(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP: + iCurVal = TotalAndRemovePropertyT(oItem, iType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyEnhancementBonusVsRace(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyEnhancementBonusVsSAlign(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_MIGHTY: + iCurVal = TotalAndRemovePropertyT(oItem, iType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyMaxRangeStrengthMod(iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_REGENERATION: + iCurVal = TotalAndRemovePropertyT(oItem, iType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyRegeneration(iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_REGENERATION_VAMPIRIC: + iCurVal = TotalAndRemovePropertyT(oItem, iType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyVampiricRegeneration(iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_SAVING_THROW_BONUS: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyBonusSavingThrowVsX(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 20) + { + iVal -= iCurVal + iChange - 20; + iCurVal = 20; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyBonusSavingThrow(iSubType, iCurVal + iChange), oItem,9999.0); + break; + case ITEM_PROPERTY_SKILL_BONUS: + iCurVal = TotalAndRemovePropertyT(oItem, iType, iSubType); + if ((iCurVal + iChange) > 50) + { + iVal -= iCurVal + iChange - 50; + iCurVal = 50; + iChange = 0; + } + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertySkillBonus(iSubType, iCurVal + iChange), oItem,9999.0); + break; + } + SetLocalInt(oItem, sBonus, iVal); +} + +int GetItemPropertyDamageType(object oWeapon) +{ + if(GetObjectType(oWeapon) != OBJECT_TYPE_ITEM) + return -1; + + int iWeaponType = GetBaseItemType(oWeapon); + int iDamageType = StringToInt(Get2DACache("baseitems","WeaponType",iWeaponType)); + switch(iDamageType) + { + case 1: return IP_CONST_DAMAGETYPE_PIERCING; break; + case 2: return IP_CONST_DAMAGETYPE_BLUDGEONING; break; + case 3: return IP_CONST_DAMAGETYPE_SLASHING; break; + case 4: return IP_CONST_DAMAGETYPE_SLASHING; break; // slashing & piercing... slashing bonus. + + default: return -1; + } + return -1; +} + +int GetItemDamageType(object oWeapon) +{ + if(GetObjectType(oWeapon) != OBJECT_TYPE_ITEM) + return -1; + + int iWeaponType = GetBaseItemType(oWeapon); + int iDamageType = StringToInt( Get2DACache("baseitems","WeaponType",iWeaponType) ); + switch(iDamageType) + { + case 1: return DAMAGE_TYPE_PIERCING; break; + case 2: return DAMAGE_TYPE_BLUDGEONING; break; + case 3: return DAMAGE_TYPE_SLASHING; break; + case 4: return DAMAGE_TYPE_SLASHING; break; // slashing & piercing... slashing bonus. + + default: return -1; + } + return -1; +} + +// To ensure the damage bonus stacks with any existing enhancement bonus, +// we create a temporary damage bonus on the weapon. We do not want to do this +// if the weapon is of the "slashing and piercing" type, because the +// enhancement bonus is considered "physical", not "slashing" or "piercing". +// If you borrow this code, make sure to keep the "IPEnh" and realize that +// "slashing and piercing" weapons need a special case. +void IPEnhancementBonusToDamageBonus(object oWeap) +{ + int iBonus = 0; + int iTemp; + + if (GetLocalInt(oWeap, "IPEnh") || !GetIsObjectValid(oWeap)) return; + + itemproperty ip = GetFirstItemProperty(oWeap); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_ENHANCEMENT_BONUS) + iTemp = GetItemPropertyCostTableValue(ip); + iBonus = iTemp > iBonus ? iTemp : iBonus; + ip = GetNextItemProperty(oWeap); + } + + SetCompositeDamageBonusT(oWeap,"IPEnh",iBonus); +} + +int TotalAndRemoveDamagePropertyT(object oItem, int iSubType) +{ + itemproperty ip = GetFirstItemProperty(oItem); + int iPropertyValue; + int total = 0; + int iTemp; + + while(GetIsItemPropertyValid(ip)) + { + iPropertyValue = GetItemPropertyCostTableValue(ip); + + if((GetItemPropertyType(ip) == ITEM_PROPERTY_DAMAGE_BONUS) && + (GetItemPropertySubType(ip) == iSubType) && + ((iPropertyValue < 6) || (iPropertyValue > 15))) + { + total = iPropertyValue > total ? iPropertyValue : total; + if (GetItemPropertyDurationType(ip)== DURATION_TYPE_TEMPORARY) RemoveItemProperty(oItem, ip); + } + ip = GetNextItemProperty(oItem); + + } + return total; +} + +void SetCompositeDamageBonusT(object oItem, string sBonus, int iVal, int iSubType = -1) +{ + int iOldVal = GetLocalInt(oItem, sBonus); + int iChange = iVal - iOldVal; + int iLinearDamage = 0; + int iCurVal = 0; + + if(iChange == 0) return; + + // Store the bonus name for use during cleanup + UpdateUsedCompositeNamesList(oItem, "PRC_CBonT", sBonus); + + if (iSubType == -1) iSubType = GetItemPropertyDamageType(oItem); + if (iSubType == -1) return; // if it's still -1 we're not dealing with a weapon. + + iCurVal = TotalAndRemoveDamagePropertyT(oItem, iSubType); + + if (iCurVal > 15) iCurVal -= 10; // values 6-20 are in the 2da as lines 16-30 + iLinearDamage = iCurVal + iChange; + if (iLinearDamage > 20) + { + iVal = iLinearDamage - 20; // Change the stored value to reflect the fact that we overflowed + iLinearDamage = 20; // This is prior to adjustment due to non-linear values + } + if (iLinearDamage > 5) iLinearDamage += 10; // values 6-20 are in the 2da as lines 16-30 + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyDamageBonus(iSubType, iLinearDamage), oItem,9999.0); + + SetLocalInt(oItem, sBonus, iVal); +} + +void TotalRemovePropertyT(object oItem) +{ + itemproperty ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyDurationType(ip)== DURATION_TYPE_TEMPORARY) + RemoveItemProperty(oItem, ip); + ip = GetNextItemProperty(oItem); + } +} + +void DeletePRCLocalIntsT(object oPC, object oItem = OBJECT_INVALID) +{ + // See if we were given a valid item as parameter. If we were, we + // will be removing ints from it. + // Otherwise, we will take the item in each slot and removing the + // ints that should be on it. + int bGivenObject = GetIsObjectValid(oItem); + + // RIGHT HAND + if(!bGivenObject) + oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC); + + if(bGivenObject || GetIsObjectValid(oItem)) + { + // Clear composite bonuses + TotalRemovePropertyT(oItem); + DeleteNamedComposites(oItem, "PRC_CBonT"); + + /* Clear other stuff + * + * All the commented out values are the ones that didn't seem to be used anywhere anymore - Ornedan + */ + //Stormlord + DeleteLocalInt(oItem,"STShock"); /// @todo Rewrite the Stormlord not to directly manipulate values + DeleteLocalInt(oItem,"STThund"); + DeleteLocalInt(oItem,"ManArmsCore"); + //Vile/Sanctify & Un/Holy Martial Strike + DeleteLocalInt(oItem,"SanctMar"); + DeleteLocalInt(oItem,"MartialStrik"); + DeleteLocalInt(oItem,"UnholyStrik"); + DeleteLocalInt(oItem,"USanctMar"); + //Duelist Precise Strike + DeleteLocalInt(oItem,"DuelistPreciseSlash"); + //DeleteLocalInt(oItem,"DuelistPreciseSmash"); + // Dispater + DeleteLocalInt(oItem,"DispIronPowerA"); + DeleteLocalInt(oItem,"DispIronPowerD"); + // Dragonwrack + DeleteLocalInt(oItem,"DWright"); + } + + // LEFT HAND + if(!bGivenObject) + oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC); + + if(bGivenObject || GetIsObjectValid(oItem)) + { + if(!bGivenObject) + { + // Clear composite bonuses + TotalRemovePropertyT(oItem); + DeleteNamedComposites(oItem, "PRC_CBonT"); + } + + //Vile/Sanctify & Un/Holy Martial Strike + DeleteLocalInt(oItem,"SanctMar"); + DeleteLocalInt(oItem,"MartialStrik"); + DeleteLocalInt(oItem,"UnholyStrik"); + DeleteLocalInt(oItem,"USanctMar"); + // Dragonwrack + DeleteLocalInt(oItem,"DWleft"); + // Dispater + DeleteLocalInt(oItem,"DispIronPowerA"); + DeleteLocalInt(oItem,"DispIronPowerD"); + } + + // CHEST + if(!bGivenObject) + oItem = GetItemInSlot(INVENTORY_SLOT_CHEST,oPC); + + if(bGivenObject || GetIsObjectValid(oItem)) + { + if(!bGivenObject) + { + // Clear composite bonuses + TotalRemovePropertyT(oItem); + DeleteNamedComposites(oItem, "PRC_CBonT"); + } + // Frenzied Berzerker + DeleteLocalInt(oItem,"AFrenzy"); + // Shadowlord + DeleteLocalInt(oItem,"ShaDiscorp"); + // Dragonwrack + DeleteLocalInt(oItem,"Dragonwrack"); + } + + // LEFT RING + if(!bGivenObject) + oItem = GetItemInSlot(INVENTORY_SLOT_LEFTRING,oPC); + + if(bGivenObject || GetIsObjectValid(oItem)) + { + if(!bGivenObject) + { + // Clear composite bonuses + TotalRemovePropertyT(oItem); + DeleteNamedComposites(oItem, "PRC_CBonT"); + } + } + + // ARMS + if(!bGivenObject) + oItem = GetItemInSlot(INVENTORY_SLOT_ARMS,oPC); + + if(bGivenObject || GetIsObjectValid(oItem)) + { + if(!bGivenObject) + { + // Clear composite bonuses + TotalRemovePropertyT(oItem); + DeleteNamedComposites(oItem, "PRC_CBonT"); + } + + // Disciple of Mephistopheles + DeleteLocalInt(oItem,"DiscMephGlove"); + } +} + +void SetCompositeAttackBonus(object oPC, string sBonus, int iVal, int iSubType = ATTACK_BONUS_MISC) +{ + object oCastingObject = CreateObject(OBJECT_TYPE_PLACEABLE, "x0_rodwonder", GetLocation(oPC)); + + int iSpl = 2732; //SPELL_SET_COMPOSITE_ATTACK_BONUS; + + SetLocalString(oCastingObject, "SET_COMPOSITE_STRING", sBonus); + SetLocalInt(oCastingObject, "SET_COMPOSITE_VALUE", iVal); + SetLocalInt(oCastingObject, "SET_COMPOSITE_SUBTYPE", iSubType); + + DelayCommand(0.1, AssignCommand(oCastingObject, ActionCastSpellAtObject(iSpl, oPC, METAMAGIC_NONE, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE))); + + DestroyObject(oCastingObject, 6.0); +} + +int GetSRByValue(int nValue) +{ + switch(nValue) + { + case 1: return 52; + case 2: return 53; + case 3: return 54; + case 4: return 55; + case 5: return 56; + case 6: return 57; + case 7: return 58; + case 8: return 59; + case 9: return 60; + case 10: return 0; + case 12: return 1; + case 14: return 2; + case 16: return 3; + case 18: return 4; + case 20: return 5; + case 22: return 6; + case 24: return 7; + case 26: return 8; + case 28: return 9; + case 30: return 10; + case 32: return 11; + case 34: return 12; + case 36: return 13; + case 38: return 14; + case 40: return 15; + case 42: return 16; + case 44: return 17; + case 46: return 18; + case 48: return 19; + case 50: return 20; + case 52: return 21; + case 54: return 22; + case 56: return 23; + case 58: return 24; + case 60: return 25; + case 11: return 26; + case 13: return 27; + case 15: return 28; + case 17: return 29; + case 19: return 30; + case 21: return 31; + case 23: return 32; + case 25: return 33; + case 27: return 34; + case 29: return 35; + case 31: return 36; + case 33: return 37; + case 35: return 38; + case 37: return 39; + case 39: return 40; + case 41: return 41; + case 43: return 42; + case 45: return 43; + case 47: return 44; + case 49: return 45; + case 51: return 46; + case 53: return 47; + case 55: return 48; + case 57: return 49; + case 59: return 50; + case 61: return 51; + } + if(nValue < 1) + return -1; + if(nValue > 98) + return 61;//99 max + if(nValue > 61) + return 51;//61 flat cap + return -1; +} + +void UpdateUsedCompositeNamesList(object oItem, string sBase, string sComposite) +{ + // Add the bonus name to the list if it isn't there already + if(!GetLocalInt(oItem, sBase + "_Exist_" + sComposite)) + { + if(DEBUG) DoDebug("Storing the composite name '" + sComposite + "' for later deletion"); + + string sArrayName = sBase + "_Names"; + // Create the array if it doesn't exist already + if(!array_exists(oItem, sArrayName)) + array_create(oItem, sArrayName); + + // Store the bonus name in a list + array_set_string(oItem, sArrayName, array_get_size(oItem, sArrayName), sComposite); + + // Store a marker so we don't need to loop over the list to find out if the name has been stored already + SetLocalInt(oItem, sBase + "_Exist_" + sComposite, TRUE); + } +} + +void DeleteNamedComposites(object oItem, string sBase) +{ + if(DEBUG) DoDebug("Deleting composite bonus list '" + sBase + "' on " + DebugObject2Str(oItem)); + + string sArrayName = sBase + "_Names"; + string sComposite; + int nMax = array_get_size(oItem, sArrayName); + int i = 0; + + // Delete all composite values and markers + for(; i < nMax; i++) + { + sComposite = array_get_string(oItem, sArrayName, i); + if(DEBUG) DoDebug("Deleting bonus marker '" + sComposite + "'"); + DeleteLocalInt(oItem, sComposite); + DeleteLocalInt(oItem, sBase + "_Exist_" + sComposite); + } + + // Delete the array + array_delete(oItem, sArrayName); +} + +int GetIsMagicItem(object oItem) +{ + // Exclusion for specific item resrefs: if the item is one of these, it's non-magical. + string sResRef = GetResRef(oItem); + if(sResRef == "x1_wmgrenade001" || + sResRef == "prc_it_acidfire" || + sResRef == "prc_agony" || + sResRef == "prc_it_alcslpgas." || + sResRef == "x1_wmgrenade002" || + sResRef == "prc_it_alcfrost" || + sResRef == "prc_it_alcspark" || + sResRef == "prc_it_antitox" || + sResRef == "prc_baccaran" || + sResRef == "prc_it_biledrp" || + sResRef == "prc_it_blendcrm" || + sResRef == "prc_brittlebn" || + sResRef == "prc_it_crcklpdr" || + sResRef == "prc_devilweed" || + sResRef == "prc_it_emblmfr" || + sResRef == "prc_it_fareyeoil" || + sResRef == "prc_it_festerbmb" || + sResRef == "prc_it_flashplt" || + sResRef == "prc_it_healblm" || + sResRef == "prc_it_keenear" || + sResRef == "prc_it_lockslip" || + sResRef == "prc_luhix" || + sResRef == "prc_mshrm_pwdr" || + sResRef == "prc_it_natdrgt" || + sResRef == "prc_it_nerv" || + sResRef == "prc_sannish" || + sResRef == "prc_it_scrmflsk" || + sResRef == "prc_it_shedden" || + sResRef == "prc_it_shedden2" || + sResRef == "prc_it_shedden3" || + sResRef == "prc_it_shedden4" || + sResRef == "prc_it_shedden5" || + sResRef == "prc_it_softfoot" || + sResRef == "x1_wmgrenade006" || + sResRef == "prc_terran_brndy" || + sResRef == "x1_wmgrenade007" || + sResRef == "prc_vodare" || + sResRef == "prc_it_weepstn") + { + return 0; + } + + // Exception for torches: + // If the only permanent property is the Light property (44), it's not magical. + if(GetBaseItemType(oItem) == BASE_ITEM_TORCH) + { + int nCount = 0; + int nOnlyType = -1; + itemproperty ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT) + { + nCount++; + nOnlyType = GetItemPropertyType(ip); + } + ip = GetNextItemProperty(oItem); + } + if(nCount == 1 && nOnlyType == 44) + { + return 0; + } + } + + // Exception for healer's kits: + // If the only permanent property is type 80, it's not magical. + if(GetBaseItemType(oItem) == BASE_ITEM_HEALERSKIT) + { + int nCount = 0; + int nOnlyType = -1; + itemproperty ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT) + { + nCount++; + nOnlyType = GetItemPropertyType(ip); + } + ip = GetNextItemProperty(oItem); + } + if(nCount == 1 && nOnlyType == 80) + { + return 0; + } + } + + // Exception for thief's tools: + // If the only permanent property is type 55, it's not magical. + if(GetBaseItemType(oItem) == BASE_ITEM_THIEVESTOOLS) + { + int nCount = 0; + int nOnlyType = -1; + itemproperty ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT) + { + nCount++; + nOnlyType = GetItemPropertyType(ip); + } + ip = GetNextItemProperty(oItem); + } + if(nCount == 1 && nOnlyType == 55) + { + return 0; + } + } + + // Normal magic property checking + itemproperty ip = GetFirstItemProperty(oItem); + int nType; + int nSubtype; + while(GetIsItemPropertyValid(ip)) // loop through item properties looking for a magical one + { + if(GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT) + { // ignore temporary properties + nType = GetItemPropertyType(ip); + if((nType >= 0 && nType <= 9) || // read from itempropdef.2da + (nType >= 13 && nType <= 20) || + (nType == 26) || + (nType >= 32 && nType <= 44) || + (nType == 46) || + (nType >= 51 && nType <= 59) || + (nType == 61) || + (nType >= 67 && nType <= 69) || + (nType >= 71 && nType <= 80) || + (nType == 82) || + (nType == 84) || + (nType >= 100 && nType <= 105) || + (nType >= 133 && nType <= 134)) + { + return 1; // magical property found + } + nSubtype = GetItemPropertySubType(ip); + if(nType == ITEM_PROPERTY_BONUS_FEAT) + { + if(GetBaseItemType(oItem) == BASE_ITEM_WHIP) + { + if(nSubtype != IP_CONST_FEAT_DISARM_WHIP) + return 1; + } + else + return 1; + } + } + ip = GetNextItemProperty(oItem); + } + return 0; +} + +/* int GetIsMagicItem(object oItem) +{ + itemproperty ip = GetFirstItemProperty(oItem); + int nType; + int nSubtype; + while(GetIsItemPropertyValid(ip)) //loop through item properties looking for a magical one + { + if(GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT) + { //ignore temporary properties + nType = GetItemPropertyType(ip); + if((nType >= 0 && nType <= 9) || //read from itempropdef.2da + (nType >= 13 && nType <= 20) || + (nType == 26) || + (nType >= 32 && nType <= 44) || + (nType == 46) || + (nType >= 51 && nType <= 59) || + (nType == 61) || + (nType >= 67 && nType <= 69) || + (nType >= 71 && nType <= 80) || + (nType == 82) || + (nType == 84) || + (nType >= 100 && nType <= 105) || + (nType >= 133 && nType <= 134)) + { + return 1; //magical property + } + nSubtype = GetItemPropertySubType(ip); + + if(nType == ITEM_PROPERTY_BONUS_FEAT) + { + if(GetBaseItemType(oItem) == BASE_ITEM_WHIP) + { + if(nSubtype != IP_CONST_FEAT_DISARM_WHIP) + return 1; + } + else + return 1; + } + ip = GetNextItemProperty(oItem); + } + } + return 0; +} */ + +int FeatToIprop(int nFeat) +{ + switch(nFeat) + {//: Weapon Focus + case FEAT_WEAPON_FOCUS_BASTARD_SWORD: return IP_CONST_FEAT_WEAPON_FOCUS_BASTARD_SWORD; + case FEAT_WEAPON_FOCUS_BATTLE_AXE: return IP_CONST_FEAT_WEAPON_FOCUS_BATTLE_AXE; + case FEAT_WEAPON_FOCUS_CLUB: return IP_CONST_FEAT_WEAPON_FOCUS_CLUB; + case FEAT_WEAPON_FOCUS_DAGGER: return IP_CONST_FEAT_WEAPON_FOCUS_DAGGER; + case FEAT_WEAPON_FOCUS_DART: return IP_CONST_FEAT_WEAPON_FOCUS_DART; + case FEAT_WEAPON_FOCUS_DIRE_MACE: return IP_CONST_FEAT_WEAPON_FOCUS_DIRE_MACE; + case FEAT_WEAPON_FOCUS_DOUBLE_AXE: return IP_CONST_FEAT_WEAPON_FOCUS_DOUBLE_AXE; + case FEAT_WEAPON_FOCUS_DWAXE: return IP_CONST_FEAT_WEAPON_FOCUS_DWAXE; + case FEAT_WEAPON_FOCUS_GREAT_AXE: return IP_CONST_FEAT_WEAPON_FOCUS_GREAT_AXE; + case FEAT_WEAPON_FOCUS_GREAT_SWORD: return IP_CONST_FEAT_WEAPON_FOCUS_GREAT_SWORD; + case FEAT_WEAPON_FOCUS_HALBERD: return IP_CONST_FEAT_WEAPON_FOCUS_HALBERD; + case FEAT_WEAPON_FOCUS_HAND_AXE: return IP_CONST_FEAT_WEAPON_FOCUS_HAND_AXE; + case FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW: return IP_CONST_FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW; + case FEAT_WEAPON_FOCUS_HEAVY_FLAIL: return IP_CONST_FEAT_WEAPON_FOCUS_HEAVY_FLAIL; + case FEAT_WEAPON_FOCUS_KAMA: return IP_CONST_FEAT_WEAPON_FOCUS_KAMA; + case FEAT_WEAPON_FOCUS_KATANA: return IP_CONST_FEAT_WEAPON_FOCUS_KATANA; + case FEAT_WEAPON_FOCUS_KUKRI: return IP_CONST_FEAT_WEAPON_FOCUS_KUKRI; + case FEAT_WEAPON_FOCUS_LIGHT_CROSSBOW: return IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_CROSSBOW; + case FEAT_WEAPON_FOCUS_LIGHT_FLAIL: return IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_FLAIL; + case FEAT_WEAPON_FOCUS_LIGHT_HAMMER: return IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_HAMMER; + case FEAT_WEAPON_FOCUS_LIGHT_MACE: return IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_MACE; + case FEAT_WEAPON_FOCUS_LONG_SWORD: return IP_CONST_FEAT_WEAPON_FOCUS_LONG_SWORD; + case FEAT_WEAPON_FOCUS_LONGBOW: return IP_CONST_FEAT_WEAPON_FOCUS_LONGBOW; + case FEAT_WEAPON_FOCUS_MORNING_STAR: return IP_CONST_FEAT_WEAPON_FOCUS_MORNING_STAR; + case FEAT_WEAPON_FOCUS_STAFF: return IP_CONST_FEAT_WEAPON_FOCUS_STAFF; + case FEAT_WEAPON_FOCUS_RAPIER: return IP_CONST_FEAT_WEAPON_FOCUS_RAPIER; + case FEAT_WEAPON_FOCUS_SCIMITAR: return IP_CONST_FEAT_WEAPON_FOCUS_SCIMITAR; + case FEAT_WEAPON_FOCUS_SCYTHE: return IP_CONST_FEAT_WEAPON_FOCUS_SCYTHE; + case FEAT_WEAPON_FOCUS_SHORTBOW: return IP_CONST_FEAT_WEAPON_FOCUS_SHORTBOW; + case FEAT_WEAPON_FOCUS_SPEAR: return IP_CONST_FEAT_WEAPON_FOCUS_SPEAR; + case FEAT_WEAPON_FOCUS_SHORT_SWORD: return IP_CONST_FEAT_WEAPON_FOCUS_SHORT_SWORD; + case FEAT_WEAPON_FOCUS_SHURIKEN: return IP_CONST_FEAT_WEAPON_FOCUS_SHURIKEN; + case FEAT_WEAPON_FOCUS_SICKLE: return IP_CONST_FEAT_WEAPON_FOCUS_SICKLE; + case FEAT_WEAPON_FOCUS_SLING: return IP_CONST_FEAT_WEAPON_FOCUS_SLING; + case FEAT_WEAPON_FOCUS_THROWING_AXE: return IP_CONST_FEAT_WEAPON_FOCUS_THROWING_AXE; + case FEAT_WEAPON_FOCUS_TWO_BLADED_SWORD: return IP_CONST_FEAT_WEAPON_FOCUS_TWO_BLADED_SWORD; + case FEAT_WEAPON_FOCUS_WAR_HAMMER: return IP_CONST_FEAT_WEAPON_FOCUS_WAR_HAMMER; + case FEAT_WEAPON_FOCUS_WHIP: return IP_CONST_FEAT_WEAPON_FOCUS_WHIP; + case FEAT_WEAPON_FOCUS_EAGLE_CLAW: return IP_CONST_FEAT_WEAPON_FOCUS_EAGLE_CLAW; + case FEAT_WEAPON_FOCUS_FALCHION: return IP_CONST_FEAT_WEAPON_FOCUS_FALCHION; + case FEAT_WEAPON_FOCUS_HEAVY_MACE: return IP_CONST_FEAT_WEAPON_FOCUS_HEAVY_MACE; + case FEAT_WEAPON_FOCUS_LIGHT_PICK: return IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_PICK; + case FEAT_WEAPON_FOCUS_HEAVY_PICK: return IP_CONST_FEAT_WEAPON_FOCUS_HEAVY_PICK; + case FEAT_WEAPON_FOCUS_KATAR: return IP_CONST_FEAT_WEAPON_FOCUS_KATAR; + case FEAT_WEAPON_FOCUS_SAI: return IP_CONST_FEAT_WEAPON_FOCUS_SAI; + case FEAT_WEAPON_FOCUS_NUNCHAKU: return IP_CONST_FEAT_WEAPON_FOCUS_NUNCHAKU; + case FEAT_WEAPON_FOCUS_MAUL: return IP_CONST_FEAT_WEAPON_FOCUS_MAUL; + case FEAT_WEAPON_FOCUS_SAP: return IP_CONST_FEAT_WEAPON_FOCUS_SAP; + case FEAT_WEAPON_FOCUS_DOUBLE_SCIMITAR: return IP_CONST_FEAT_WEAPON_FOCUS_DOUBLE_SCIMITAR; + case FEAT_WEAPON_FOCUS_GOAD: return IP_CONST_FEAT_WEAPON_FOCUS_GOAD; + case FEAT_WEAPON_FOCUS_TRIDENT: return IP_CONST_FEAT_WEAPON_FOCUS_TRIDENT; + case FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE: return IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE; + case FEAT_WEAPON_FOCUS_ELVEN_THINBLADE: return IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_THINBLADE; + case FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE: return IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE; + + //:: Weapon Specialization + case FEAT_WEAPON_SPECIALIZATION_CLUB: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_CLUB; + case FEAT_WEAPON_SPECIALIZATION_DAGGER: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_DAGGER; + case FEAT_WEAPON_SPECIALIZATION_DART: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_DART; + case FEAT_WEAPON_SPECIALIZATION_HEAVY_CROSSBOW: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_HEAVY_CROSSBOW; + case FEAT_WEAPON_SPECIALIZATION_LIGHT_CROSSBOW: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_LIGHT_CROSSBOW; + case FEAT_WEAPON_SPECIALIZATION_LIGHT_MACE: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_LIGHT_MACE; + case FEAT_WEAPON_SPECIALIZATION_MORNING_STAR: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_MORNING_STAR; + case FEAT_WEAPON_SPECIALIZATION_STAFF: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_STAFF; + case FEAT_WEAPON_SPECIALIZATION_SPEAR: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_SPEAR; + case FEAT_WEAPON_SPECIALIZATION_SICKLE: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_SICKLE; + case FEAT_WEAPON_SPECIALIZATION_SLING: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_SLING; + case FEAT_WEAPON_SPECIALIZATION_UNARMED_STRIKE: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_UNARMED_STRIKE; + case FEAT_WEAPON_SPECIALIZATION_LONGBOW: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_LONGBOW; + case FEAT_WEAPON_SPECIALIZATION_SHORTBOW: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_SHORTBOW; + case FEAT_WEAPON_SPECIALIZATION_SHORT_SWORD: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_SHORT_SWORD; + case FEAT_WEAPON_SPECIALIZATION_RAPIER: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_RAPIER; + case FEAT_WEAPON_SPECIALIZATION_SCIMITAR: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_SCIMITAR; + case FEAT_WEAPON_SPECIALIZATION_LONG_SWORD: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_LONG_SWORD; + case FEAT_WEAPON_SPECIALIZATION_GREAT_SWORD: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_GREAT_SWORD; + case FEAT_WEAPON_SPECIALIZATION_HAND_AXE: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_HAND_AXE; + case FEAT_WEAPON_SPECIALIZATION_THROWING_AXE: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_THROWING_AXE; + case FEAT_WEAPON_SPECIALIZATION_BATTLE_AXE: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_BATTLE_AXE; + case FEAT_WEAPON_SPECIALIZATION_GREAT_AXE: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_GREAT_AXE; + case FEAT_WEAPON_SPECIALIZATION_HALBERD: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_HALBERD; + case FEAT_WEAPON_SPECIALIZATION_LIGHT_HAMMER: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_LIGHT_HAMMER; + case FEAT_WEAPON_SPECIALIZATION_LIGHT_FLAIL: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_LIGHT_FLAIL; + case FEAT_WEAPON_SPECIALIZATION_WAR_HAMMER: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_WAR_HAMMER; + case FEAT_WEAPON_SPECIALIZATION_HEAVY_FLAIL: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_HEAVY_FLAIL; + case FEAT_WEAPON_SPECIALIZATION_KAMA: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_KAMA; + case FEAT_WEAPON_SPECIALIZATION_KUKRI: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_KUKRI; + case FEAT_WEAPON_SPECIALIZATION_SHURIKEN: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_SHURIKEN; + case FEAT_WEAPON_SPECIALIZATION_SCYTHE: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_SCYTHE; + case FEAT_WEAPON_SPECIALIZATION_KATANA: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_KATANA; + case FEAT_WEAPON_SPECIALIZATION_BASTARD_SWORD: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_BASTARD_SWORD; + case FEAT_WEAPON_SPECIALIZATION_DIRE_MACE: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_DIRE_MACE; + case FEAT_WEAPON_SPECIALIZATION_DOUBLE_AXE: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_DOUBLE_AXE; + case FEAT_WEAPON_SPECIALIZATION_TWO_BLADED_SWORD: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_TWO_BLADED_SWORD; + case FEAT_WEAPON_SPECIALIZATION_DWAXE: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_DWAXE; + case FEAT_WEAPON_SPECIALIZATION_WHIP: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_WHIP; + + case FEAT_WEAPON_SPECIALIZATION_EAGLE_CLAW: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_EAGLE_CLAW; + case FEAT_WEAPON_SPECIALIZATION_FALCHION: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_FALCHION; + case FEAT_WEAPON_SPECIALIZATION_HEAVY_MACE: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_HEAVY_MACE; + case FEAT_WEAPON_SPECIALIZATION_LIGHT_PICK: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_LIGHT_PICK; + case FEAT_WEAPON_SPECIALIZATION_HEAVY_PICK: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_HEAVY_PICK; + case FEAT_WEAPON_SPECIALIZATION_KATAR: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_KATAR; + case FEAT_WEAPON_SPECIALIZATION_SAI: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_SAI; + case FEAT_WEAPON_SPECIALIZATION_NUNCHAKU: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_NUNCHAKU; + case FEAT_WEAPON_SPECIALIZATION_MAUL: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_MAUL; + case FEAT_WEAPON_SPECIALIZATION_SAP: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_SAP; + case FEAT_WEAPON_SPECIALIZATION_DBL_SCIMITAR: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_DBL_SCIMITAR; + case FEAT_WEAPON_SPECIALIZATION_GOAD: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_GOAD; + case FEAT_WEAPON_SPECIALIZATION_TRIDENT: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_TRIDENT; + + case FEAT_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE; + case FEAT_WEAPON_SPECIALIZATION_ELVEN_THINBLADE: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_ELVEN_THINBLADE; + case FEAT_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE: return IP_CONST_FEAT_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE; + + + //:: Sanctify Martial Strike + case FEAT_SANCTIFY_MARTIAL_CLUB: return IP_CONST_FEAT_SANCTIFY_MARTIAL_CLUB; + case FEAT_SANCTIFY_MARTIAL_DAGGER: return IP_CONST_FEAT_SANCTIFY_MARTIAL_DAGGER; + case FEAT_SANCTIFY_MARTIAL_DART: return IP_CONST_FEAT_SANCTIFY_MARTIAL_DART; + case FEAT_SANCTIFY_MARTIAL_HEAVYCROSSBOW: return IP_CONST_FEAT_SANCTIFY_MARTIAL_HEAVYCROSSBOW; + case FEAT_SANCTIFY_MARTIAL_LIGHTCROSSBOW: return IP_CONST_FEAT_SANCTIFY_MARTIAL_LIGHTCROSSBOW; + case FEAT_SANCTIFY_MARTIAL_LIGHTMACE: return IP_CONST_FEAT_SANCTIFY_MARTIAL_LIGHTMACE; + case FEAT_SANCTIFY_MARTIAL_MORNINGSTAR: return IP_CONST_FEAT_SANCTIFY_MARTIAL_MORNINGSTAR; + case FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF: return IP_CONST_FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF; + case FEAT_SANCTIFY_MARTIAL_SHORTSPEAR: return IP_CONST_FEAT_SANCTIFY_MARTIAL_SHORTSPEAR; + case FEAT_SANCTIFY_MARTIAL_SICKLE: return IP_CONST_FEAT_SANCTIFY_MARTIAL_SICKLE; + case FEAT_SANCTIFY_MARTIAL_SLING: return IP_CONST_FEAT_SANCTIFY_MARTIAL_SLING; + case FEAT_SANCTIFY_MARTIAL_LONGBOW: return IP_CONST_FEAT_SANCTIFY_MARTIAL_LONGBOW; + case FEAT_SANCTIFY_MARTIAL_SHORTBOW: return IP_CONST_FEAT_SANCTIFY_MARTIAL_SHORTBOW; + case FEAT_SANCTIFY_MARTIAL_SHORTSWORD: return IP_CONST_FEAT_SANCTIFY_MARTIAL_SHORTSWORD; + case FEAT_SANCTIFY_MARTIAL_RAPIER: return IP_CONST_FEAT_SANCTIFY_MARTIAL_RAPIER; + case FEAT_SANCTIFY_MARTIAL_SCIMITAR: return IP_CONST_FEAT_SANCTIFY_MARTIAL_SCIMITAR; + case FEAT_SANCTIFY_MARTIAL_LONGSWORD: return IP_CONST_FEAT_SANCTIFY_MARTIAL_LONGSWORD; + case FEAT_SANCTIFY_MARTIAL_GREATSWORD: return IP_CONST_FEAT_SANCTIFY_MARTIAL_GREATSWORD; + case FEAT_SANCTIFY_MARTIAL_HANDAXE: return IP_CONST_FEAT_SANCTIFY_MARTIAL_HANDAXE; + case FEAT_SANCTIFY_MARTIAL_BATTLEAXE: return IP_CONST_FEAT_SANCTIFY_MARTIAL_BATTLEAXE; + case FEAT_SANCTIFY_MARTIAL_GREATAXE: return IP_CONST_FEAT_SANCTIFY_MARTIAL_GREATAXE; + case FEAT_SANCTIFY_MARTIAL_HALBERD: return IP_CONST_FEAT_SANCTIFY_MARTIAL_HALBERD; + case FEAT_SANCTIFY_MARTIAL_LIGHTHAMMER: return IP_CONST_FEAT_SANCTIFY_MARTIAL_LIGHTHAMMER; + case FEAT_SANCTIFY_MARTIAL_LIGHTFLAIL: return IP_CONST_FEAT_SANCTIFY_MARTIAL_LIGHTFLAIL; + case FEAT_SANCTIFY_MARTIAL_WARHAMMER: return IP_CONST_FEAT_SANCTIFY_MARTIAL_WARHAMMER; + case FEAT_SANCTIFY_MARTIAL_HEAVYFLAIL: return IP_CONST_FEAT_SANCTIFY_MARTIAL_HEAVYFLAIL; + case FEAT_SANCTIFY_MARTIAL_KAMA: return IP_CONST_FEAT_SANCTIFY_MARTIAL_KAMA; + case FEAT_SANCTIFY_MARTIAL_KUKRI: return IP_CONST_FEAT_SANCTIFY_MARTIAL_KUKRI; + case FEAT_SANCTIFY_MARTIAL_SHURIKEN: return IP_CONST_FEAT_SANCTIFY_MARTIAL_SHURIKEN; + case FEAT_SANCTIFY_MARTIAL_SCYTHE: return IP_CONST_FEAT_SANCTIFY_MARTIAL_SCYTHE; + case FEAT_SANCTIFY_MARTIAL_KATANA: return IP_CONST_FEAT_SANCTIFY_MARTIAL_KATANA; + case FEAT_SANCTIFY_MARTIAL_BASTARDSWORD: return IP_CONST_FEAT_SANCTIFY_MARTIAL_BASTARDSWORD; + case FEAT_SANCTIFY_MARTIAL_DIREMACE: return IP_CONST_FEAT_SANCTIFY_MARTIAL_DIREMACE; + case FEAT_SANCTIFY_MARTIAL_DOUBLEAXE: return IP_CONST_FEAT_SANCTIFY_MARTIAL_DOUBLEAXE; + case FEAT_SANCTIFY_MARTIAL_TWOBLADED: return IP_CONST_FEAT_SANCTIFY_MARTIAL_TWOBLADEDSWORD; + case FEAT_SANCTIFY_MARTIAL_DWAXE: return IP_CONST_FEAT_SANCTIFY_MARTIAL_DWARVENAXE; + case FEAT_SANCTIFY_MARTIAL_WHIP: return IP_CONST_FEAT_SANCTIFY_MARTIAL_WHIP; + + case FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW: return IP_CONST_FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW; + case FEAT_SANCTIFY_MARTIAL_FALCHION: return IP_CONST_FEAT_SANCTIFY_MARTIAL_FALCHION; + case FEAT_SANCTIFY_MARTIAL_HEAVY_MACE: return IP_CONST_FEAT_SANCTIFY_MARTIAL_HEAVY_MACE; + case FEAT_SANCTIFY_MARTIAL_LIGHT_PICK: return IP_CONST_FEAT_SANCTIFY_MARTIAL_LIGHT_PICK; + case FEAT_SANCTIFY_MARTIAL_HEAVY_PICK: return IP_CONST_FEAT_SANCTIFY_MARTIAL_HEAVY_PICK; + case FEAT_SANCTIFY_MARTIAL_KATAR: return IP_CONST_FEAT_SANCTIFY_MARTIAL_KATAR; + case FEAT_SANCTIFY_MARTIAL_SAI: return IP_CONST_FEAT_SANCTIFY_MARTIAL_SAI; + case FEAT_SANCTIFY_MARTIAL_NUNCHAKU: return IP_CONST_FEAT_SANCTIFY_MARTIAL_NUNCHAKU; + case FEAT_SANCTIFY_MARTIAL_MAUL: return IP_CONST_FEAT_SANCTIFY_MARTIAL_MAUL; + case FEAT_SANCTIFY_MARTIAL_SAP: return IP_CONST_FEAT_SANCTIFY_MARTIAL_SAP; + case FEAT_SANCTIFY_MARTIAL_DBL_SCIMITAR: return IP_CONST_FEAT_SANCTIFY_MARTIAL_DBL_SCIMITAR; + case FEAT_SANCTIFY_MARTIAL_GOAD: return IP_CONST_FEAT_SANCTIFY_MARTIAL_GOAD; + case FEAT_SANCTIFY_MARTIAL_TRIDENT: return IP_CONST_FEAT_SANCTIFY_MARTIAL_TRIDENT; + + case FEAT_SANCTIFY_MARTIAL_ELVEN_LIGHTBLADE: return IP_CONST_FEAT_SANCTIFY_MARTIAL_ELVEN_LIGHTBLADE; + case FEAT_SANCTIFY_MARTIAL_ELVEN_THINBLADE: return IP_CONST_FEAT_SANCTIFY_MARTIAL_ELVEN_THINBLADE; + case FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE: return IP_CONST_FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE; + } + + return - 1; +} + +// This maps the Weapon Focus IPRP constants to actual Weapon Focus Feat constants +int WF_IpropToFeat(int nIPFeat) +{ + switch (nIPFeat) + { + case IP_CONST_FEAT_WEAPON_FOCUS_BASTARD_SWORD: return FEAT_WEAPON_FOCUS_BASTARD_SWORD; + case IP_CONST_FEAT_WEAPON_FOCUS_BATTLE_AXE: return FEAT_WEAPON_FOCUS_BATTLE_AXE; + case IP_CONST_FEAT_WEAPON_FOCUS_CLUB: return FEAT_WEAPON_FOCUS_CLUB; + case IP_CONST_FEAT_WEAPON_FOCUS_DAGGER: return FEAT_WEAPON_FOCUS_DAGGER; + case IP_CONST_FEAT_WEAPON_FOCUS_DART: return FEAT_WEAPON_FOCUS_DART; + case IP_CONST_FEAT_WEAPON_FOCUS_DIRE_MACE: return FEAT_WEAPON_FOCUS_DIRE_MACE; + case IP_CONST_FEAT_WEAPON_FOCUS_DOUBLE_AXE: return FEAT_WEAPON_FOCUS_DOUBLE_AXE; + case IP_CONST_FEAT_WEAPON_FOCUS_DOUBLE_SCIMITAR: return FEAT_WEAPON_FOCUS_DOUBLE_SCIMITAR; + case IP_CONST_FEAT_WEAPON_FOCUS_DWAXE: return FEAT_WEAPON_FOCUS_DWAXE; + case IP_CONST_FEAT_WEAPON_FOCUS_EAGLE_CLAW: return FEAT_WEAPON_FOCUS_EAGLE_CLAW; + case IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE: return FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE; + case IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE: return FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE; + case IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_THINBLADE: return FEAT_WEAPON_FOCUS_ELVEN_THINBLADE; + case IP_CONST_FEAT_WEAPON_FOCUS_FALCHION: return FEAT_WEAPON_FOCUS_FALCHION; + case IP_CONST_FEAT_WEAPON_FOCUS_GOAD: return FEAT_WEAPON_FOCUS_GOAD; + case IP_CONST_FEAT_WEAPON_FOCUS_GREAT_AXE: return FEAT_WEAPON_FOCUS_GREAT_AXE; + case IP_CONST_FEAT_WEAPON_FOCUS_GREAT_SWORD: return FEAT_WEAPON_FOCUS_GREAT_SWORD; + case IP_CONST_FEAT_WEAPON_FOCUS_HALBERD: return FEAT_WEAPON_FOCUS_HALBERD; + case IP_CONST_FEAT_WEAPON_FOCUS_HAND_AXE: return FEAT_WEAPON_FOCUS_HAND_AXE; + case IP_CONST_FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW: return FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW; + case IP_CONST_FEAT_WEAPON_FOCUS_HEAVY_FLAIL: return FEAT_WEAPON_FOCUS_HEAVY_FLAIL; + case IP_CONST_FEAT_WEAPON_FOCUS_HEAVY_MACE: return FEAT_WEAPON_FOCUS_HEAVY_MACE; + case IP_CONST_FEAT_WEAPON_FOCUS_HEAVY_PICK: return FEAT_WEAPON_FOCUS_HEAVY_PICK; + case IP_CONST_FEAT_WEAPON_FOCUS_KAMA: return FEAT_WEAPON_FOCUS_KAMA; + case IP_CONST_FEAT_WEAPON_FOCUS_KATANA: return FEAT_WEAPON_FOCUS_KATANA; + case IP_CONST_FEAT_WEAPON_FOCUS_KATAR: return FEAT_WEAPON_FOCUS_KATAR; + case IP_CONST_FEAT_WEAPON_FOCUS_KUKRI: return FEAT_WEAPON_FOCUS_KUKRI; + case IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_CROSSBOW: return FEAT_WEAPON_FOCUS_LIGHT_CROSSBOW; + case IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_FLAIL: return FEAT_WEAPON_FOCUS_LIGHT_FLAIL; + case IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_HAMMER: return FEAT_WEAPON_FOCUS_LIGHT_HAMMER; + case IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_LANCE: return FEAT_WEAPON_FOCUS_LIGHT_LANCE; + case IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_MACE: return FEAT_WEAPON_FOCUS_LIGHT_MACE; + case IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_PICK: return FEAT_WEAPON_FOCUS_LIGHT_PICK; + case IP_CONST_FEAT_WEAPON_FOCUS_LONGBOW: return FEAT_WEAPON_FOCUS_LONGBOW; + case IP_CONST_FEAT_WEAPON_FOCUS_LONG_SWORD: return FEAT_WEAPON_FOCUS_LONG_SWORD; + case IP_CONST_FEAT_WEAPON_FOCUS_MAUL: return FEAT_WEAPON_FOCUS_MAUL; + case IP_CONST_FEAT_WEAPON_FOCUS_MINDBLADE: return FEAT_WEAPON_FOCUS_MINDBLADE; + case IP_CONST_FEAT_WEAPON_FOCUS_MORNING_STAR: return FEAT_WEAPON_FOCUS_MORNING_STAR; + case IP_CONST_FEAT_WEAPON_FOCUS_NUNCHAKU: return FEAT_WEAPON_FOCUS_NUNCHAKU; + case IP_CONST_FEAT_WEAPON_FOCUS_RAPIER: return FEAT_WEAPON_FOCUS_RAPIER; + case IP_CONST_FEAT_WEAPON_FOCUS_RAY: return FEAT_WEAPON_FOCUS_RAY; + case IP_CONST_FEAT_WEAPON_FOCUS_SAI: return FEAT_WEAPON_FOCUS_SAI; + case IP_CONST_FEAT_WEAPON_FOCUS_SAP: return FEAT_WEAPON_FOCUS_SAP; + case IP_CONST_FEAT_WEAPON_FOCUS_SCIMITAR: return FEAT_WEAPON_FOCUS_SCIMITAR; + case IP_CONST_FEAT_WEAPON_FOCUS_SCYTHE: return FEAT_WEAPON_FOCUS_SCYTHE; + case IP_CONST_FEAT_WEAPON_FOCUS_SHORTBOW: return FEAT_WEAPON_FOCUS_SHORTBOW; + case IP_CONST_FEAT_WEAPON_FOCUS_SHORT_SWORD: return FEAT_WEAPON_FOCUS_SHORT_SWORD; + case IP_CONST_FEAT_WEAPON_FOCUS_SHURIKEN: return FEAT_WEAPON_FOCUS_SHURIKEN; + case IP_CONST_FEAT_WEAPON_FOCUS_SICKLE: return FEAT_WEAPON_FOCUS_SICKLE; + case IP_CONST_FEAT_WEAPON_FOCUS_SLING: return FEAT_WEAPON_FOCUS_SLING; + case IP_CONST_FEAT_WEAPON_FOCUS_SPEAR: return FEAT_WEAPON_FOCUS_SPEAR; + case IP_CONST_FEAT_WEAPON_FOCUS_STAFF: return FEAT_WEAPON_FOCUS_STAFF; + case IP_CONST_FEAT_WEAPON_FOCUS_THROWING_AXE: return FEAT_WEAPON_FOCUS_THROWING_AXE; + case IP_CONST_FEAT_WEAPON_FOCUS_TWO_BLADED_SWORD: return FEAT_WEAPON_FOCUS_TWO_BLADED_SWORD; + case IP_CONST_FEAT_WEAPON_FOCUS_UNARMED_STRIKE: return FEAT_WEAPON_FOCUS_UNARMED_STRIKE; + case IP_CONST_FEAT_WEAPON_FOCUS_WAR_HAMMER: return FEAT_WEAPON_FOCUS_WAR_HAMMER; + } + + return -1; // Invalid or unmapped +} + +int FocusToWeapProf(int nFeat) +{ + switch(nFeat) + { + case FEAT_WEAPON_FOCUS_CLUB: return BASE_ITEM_CLUB; + case FEAT_WEAPON_FOCUS_DAGGER: return BASE_ITEM_DAGGER; + case FEAT_WEAPON_FOCUS_DART: return BASE_ITEM_DART; + case FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW: return BASE_ITEM_HEAVYCROSSBOW; + case FEAT_WEAPON_FOCUS_LIGHT_CROSSBOW: return BASE_ITEM_LIGHTCROSSBOW; + case FEAT_WEAPON_FOCUS_LIGHT_MACE: return BASE_ITEM_LIGHTMACE; + case FEAT_WEAPON_FOCUS_MORNING_STAR: return BASE_ITEM_MORNINGSTAR; + case FEAT_WEAPON_FOCUS_STAFF: return BASE_ITEM_QUARTERSTAFF; + case FEAT_WEAPON_FOCUS_SPEAR: return BASE_ITEM_SHORTSPEAR; + case FEAT_WEAPON_FOCUS_SICKLE: return BASE_ITEM_SICKLE; + case FEAT_WEAPON_FOCUS_SLING: return BASE_ITEM_SLING; + case FEAT_WEAPON_FOCUS_LONGBOW: return BASE_ITEM_LONGBOW; + case FEAT_WEAPON_FOCUS_SHORTBOW: return BASE_ITEM_SHORTBOW; + case FEAT_WEAPON_FOCUS_SHORT_SWORD: return BASE_ITEM_SHORTSWORD; + case FEAT_WEAPON_FOCUS_RAPIER: return BASE_ITEM_RAPIER; + case FEAT_WEAPON_FOCUS_SCIMITAR: return BASE_ITEM_SCIMITAR; + case FEAT_WEAPON_FOCUS_LONG_SWORD: return BASE_ITEM_LONGSWORD; + case FEAT_WEAPON_FOCUS_GREAT_SWORD: return BASE_ITEM_GREATSWORD; + case FEAT_WEAPON_FOCUS_HAND_AXE: return BASE_ITEM_HANDAXE; + case FEAT_WEAPON_FOCUS_THROWING_AXE: return BASE_ITEM_THROWINGAXE; + case FEAT_WEAPON_FOCUS_BATTLE_AXE: return BASE_ITEM_BATTLEAXE; + case FEAT_WEAPON_FOCUS_GREAT_AXE: return BASE_ITEM_GREATAXE; + case FEAT_WEAPON_FOCUS_HALBERD: return BASE_ITEM_HALBERD; + case FEAT_WEAPON_FOCUS_LIGHT_HAMMER: return BASE_ITEM_LIGHTHAMMER; + case FEAT_WEAPON_FOCUS_LIGHT_FLAIL: return BASE_ITEM_LIGHTFLAIL; + case FEAT_WEAPON_FOCUS_WAR_HAMMER: return BASE_ITEM_WARHAMMER; + case FEAT_WEAPON_FOCUS_HEAVY_FLAIL: return BASE_ITEM_HEAVYFLAIL; + case FEAT_WEAPON_FOCUS_KAMA: return BASE_ITEM_KAMA; + case FEAT_WEAPON_FOCUS_KUKRI: return BASE_ITEM_KUKRI; + case FEAT_WEAPON_FOCUS_SHURIKEN: return BASE_ITEM_SHURIKEN; + case FEAT_WEAPON_FOCUS_SCYTHE: return BASE_ITEM_SCYTHE; + case FEAT_WEAPON_FOCUS_KATANA: return BASE_ITEM_KATANA; + case FEAT_WEAPON_FOCUS_BASTARD_SWORD: return BASE_ITEM_BASTARDSWORD; + case FEAT_WEAPON_FOCUS_DIRE_MACE: return BASE_ITEM_DIREMACE; + case FEAT_WEAPON_FOCUS_DOUBLE_AXE: return BASE_ITEM_DOUBLEAXE; + case FEAT_WEAPON_FOCUS_TWO_BLADED_SWORD: return BASE_ITEM_TWOBLADEDSWORD; + case FEAT_WEAPON_FOCUS_DWAXE: return BASE_ITEM_DWARVENWARAXE; + case FEAT_WEAPON_FOCUS_WHIP: return BASE_ITEM_WHIP; + case FEAT_WEAPON_FOCUS_EAGLE_CLAW: return BASE_ITEM_EAGLE_CLAW; + case FEAT_WEAPON_FOCUS_FALCHION: return BASE_ITEM_FALCHION; + case FEAT_WEAPON_FOCUS_GOAD: return BASE_ITEM_GOAD; + case FEAT_WEAPON_FOCUS_HEAVY_MACE: return BASE_ITEM_HEAVY_MACE; + case FEAT_WEAPON_FOCUS_LIGHT_PICK: return BASE_ITEM_LIGHT_PICK; + case FEAT_WEAPON_FOCUS_HEAVY_PICK: return BASE_ITEM_HEAVY_PICK; + case FEAT_WEAPON_FOCUS_KATAR: return BASE_ITEM_KATAR; + case FEAT_WEAPON_FOCUS_SAI: return BASE_ITEM_SAI; + case FEAT_WEAPON_FOCUS_NUNCHAKU: return BASE_ITEM_NUNCHAKU; + case FEAT_WEAPON_FOCUS_MAUL: return BASE_ITEM_MAUL; + case FEAT_WEAPON_FOCUS_SAP: return BASE_ITEM_SAP; + case FEAT_WEAPON_FOCUS_DOUBLE_SCIMITAR: return BASE_ITEM_DOUBLE_SCIMITAR; + case FEAT_WEAPON_FOCUS_TRIDENT: return BASE_ITEM_TRIDENT; + case FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE: return BASE_ITEM_ELVEN_LIGHTBLADE; + case FEAT_WEAPON_FOCUS_ELVEN_THINBLADE: return BASE_ITEM_ELVEN_THINBLADE; + case FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE: return BASE_ITEM_ELVEN_COURTBLADE; + + } + return - 1; +} + +void AddSkinFeat(int nFeat, int IPFeat, object oSkin, object oPC = OBJECT_SELF, float fDuration = 0.0f) +{ + // Already has that feat - do nothing + if(GetHasFeat(nFeat, oPC)) + return; + + int nDurType = fDuration == 0.0f ? DURATION_TYPE_PERMANENT : DURATION_TYPE_TEMPORARY; + + AddItemProperty(nDurType, ItemPropertyBonusFeat(IPFeat), oSkin, fDuration); +} \ No newline at end of file diff --git a/src/include/inc_logmessage.nss b/src/include/inc_logmessage.nss new file mode 100644 index 0000000..4729cc6 --- /dev/null +++ b/src/include/inc_logmessage.nss @@ -0,0 +1,689 @@ +/** @file +Log Message 1.06 - versatile send message wrapper function +by OldManWhistler + +This script is available as a individual download on NWN Vault: +http://nwvault.ign.com/Files/scripts/data/1057281729727.shtml + +Also check out my portfolio: +http://nwvault.ign.com/portfolios/data/1054937958.shtml + +It is easiest to think of it as a wrapper for SendMessageToPC, +SendMessageToAllDMs, FloatingTextStringOnCreature, ActionSpeakString, +PrintString, and WriteTimeStampedLogEntry. You can use log message instead +of any of those functions. + +The name is a misnomer, it is not a tool for "logging" text, rather a tool +for "sending" text. In retrospect I should have called it SendMessage instead +of LogMessage. My bad. + +LogMessage is a generic function for sending a message to a target (PC, DM, +Party, Server log file). There is a parameter that controls how the function +will behave. + +ie: +LogMessage (LOG_DISABLED, oPC, "Do nothing"); +LogMessage (LOG_PC, oPC, "Send only to the oPC who activated it (floating text)"); +LogMessage (LOG_PARTY, oPC, "Send to the oPC and all of their party members (floating text)"); +LogMessage (LOG_PC | LOG_DM_ALL, oPC, "Send only to the oPC who activated it (floating text) and the DM channel"); +LogMessage (LOG_DM_ALL, oPC, "Send to all the DMs on the server"); +LogMessage (LOG_DM_20, oPC, "Send to all DMs within distance 20' of oPC"); +LogMessage (LOG_TO_SERVER_LOG | LOG_PC, oPC, "Send only to the oPC who activated it (floating text) and the server log file"); +LogMessage (LOG_TO_SERVER_LOG, oPC, "Send only to the server log file"); +LogMessage (LOG_PARTY_PERC, oPC, "Send to oPC and all of their party members who can see them (floating text)"); +LogMessage (LOG_PC_ALL, oPC, "Send to all players who have a local variable called 'Filter' with value 3", "Filter", 3); + +I prefer using LogMessage because then I only have to remember one interface +for how to send a message instead of five. It is also useful because I can +make a message go multiple places just by bit wise ORing several constants +together. See more on bit wise operators: +http://www.reapers.org/nwn/reference/compiled/primer.BitwiseOperators.html + +Note: Through one LogMessage function call you can send a string in any +combination of 30 different ways. + +It is useful when you want to build a script that could either be used with a +persistent world or might be used with a single party and only one DM. + +Say you write a script with several lines sending messages to the PCs using +SendMessageToPC and copying it on the DM channel using SendMessageToAllDMs. +Modifying your script would be a really big headache for the person trying to +use it with their PW, since the DM channel would be flooded by the actions of +the various players. + +Instead of using SendMessageToPC and SendMessageToAllDMs you could write +your messages as: +LogMessage (MY_LOG, oPC, "blah blah blah"); + +and then have a section in your main include file that has: +#include "inc_LogMessage" +int MY_LOG = LOGPC | LOG_DM_40; + +That way the person who is running a persistent world could set +MY_LOG as LOG_PC | LOG_DM_20 while the person who is running a single +party DMed game could set MY_LOG as LOG_PC | LOG_DM_ALL. + +All they would have to do is change that value of the constant you used and +recompile the scripts and then it would work the way they wanted it to with +very little hassle. + +The other benefit is when the person modifying your script wants to find +a specific string to change. All they have to do is do a FindInFiles and +search for LogMessage. FindInFiles will then generate a complete list of all +your strings and the filename/line number the string is generated on. + +Using SetLocalInt to create filters: +There are optional parameters to the LogMessage function called sLocalFilter +and iLocalValue. The way these work is that they require the recipient of the +message to have a LocalInt called sLocalFilter with a value of iLocalValue. +ie: +I could put a local int on specific players with SetLocalInt(oPC, "Filter1", 4); +Then LogMessage(LOG_PC_ALL, "This is a filtered message.", "", "Filter1", 4) +would send that message only to the players who have +GetLocalInt(oPC, "Filter1") == 4. +The filter does not work for the following types of logs. They will always +work irregardless of the setting of the filter variable. +LOG_DM_ALL +LOG_TO_SERVER_LOG +LOG_TIME_SERVER_LOG +LOG_PARTY_30 + +Changelog: + 1.01 -> 1.02 + Changed LOG_TO_SERVER_LOG so it has no time stamp + Added LOG_PC_ALL, LOG_TIME_SERVER_LOG + Changed so that one LogMessage call could send several messages using + the bitwise OR operator. + 1.02 -> 1.03 + Added another parameter to LogMessage for a DM only message that is only + added to the DM channels and the server log channels. + 1.03 -> 1.04 + Fixed a bug with LOG_PARTY_SERVER that was sending all the messages to only + one player in the party instead of the entire party. + 1.04 -> 1.05 + Added local int filters to control who gets the message and who doesn't. + Added some more log types: + LOG_PARTY_10, LOG_PARTY_20, LOG_PARTY_40, LOG_PARTY_80 + - like LOG_PARTY_30 except floating text is over the head of the person + - receiving the message. + LOG_DM_10_SERVER, LOG_DM_20_SERVER, LOG_DM_40_SERVER, LOG_DM_80_SERVER + - like LOG_DM_XX but with server messages instead of floating text. + LOG_PARTY_PERC, LOG_PARTY_PERC_SERVER + - like LOG_PARTY except it does a perception check to see if the party + member can see oPC. + 1.05 -> 1.06 + Added LOG_DM_ALL_SERVER + - like LOG_DM_ALL except it is sent as a server message instead of on DM channel + Added LOG_PARTY_ONLY + - Sends a server message to everyone in the party EXCEPT for the person who + triggered the message (oPC) + Added LOG_PARTY_PERC_ONLY + - Sends a server message to everyone in the party EXCEPT for the person who + triggered the message (oPC) and the members of the party who cannot perceive oPC +*/ + +// **************************************************************************** +// ** CONSTANTS +// **************************************************************************** + +// Logging Level Constants - Do not change these values! +// Note: every constant is a multiple of 2. If you want to send something to +// multiple log locations then use the bitwise OR operator. +// ie: using "LOG_PC | LOG_DM_ALL" will send the message to the player and to +// the DM channel. + +/// Do not send a message. +const int LOG_DISABLED = 0x0; +/// Send only to the oPC who activated it (floating text) +const int LOG_PC = 0x1; +/// Send only to the oPC who activated it (server message window) +const int LOG_PC_SERVER = 0x2; +/// Send to all players on the server (server message window) +const int LOG_PC_ALL = 0x4; +/// Send to the oPC and all of their party members (floating text) +const int LOG_PARTY = 0x8; +/// Send to the oPC and all of their party members (server message window) +const int LOG_PARTY_SERVER = 0x10; +/// Send to the oPC and their nearby (30m) party members (floating text) +const int LOG_PARTY_30 = 0x20; +/// Send to the DM channel (DM channel) +const int LOG_DM_ALL = 0x40; +/// Send to all DMs within distance 10m of oPC (floating text) +const int LOG_DM_10 = 0x80; +/// Send to all DMs within distance 20m of oPC (floating text) +const int LOG_DM_20 = 0x100; +/// Send to all DMs within distance 40m of oPC (floating text) +const int LOG_DM_40 = 0x200; +/// Send to all DMs within distance 80m of oPC (floating text) +const int LOG_DM_80 = 0x400; +/// Make oPC whisper the message (chat message window) +const int LOG_WHISPER = 0x800; +/// Make oPC talk the message (chat message window) +const int LOG_TALK = 0x1000; +/// Make oPC shout the message (chat message window) +const int LOG_SHOUT = 0x2000; +/// Send to the server log file +const int LOG_TO_SERVER_LOG = 0x4000; +/// Send to the server log file with time stamp +const int LOG_TIME_SERVER_LOG = 0x8000; +/// Send to all DMs within distance 10m of oPC (server message window) +const int LOG_DM_10_SERVER = 0x10000; +/// Send to all DMs within distance 20m of oPC (server message window) +const int LOG_DM_20_SERVER = 0x20000; +/// Send to all DMs within distance 40m of oPC (server message window) +const int LOG_DM_40_SERVER = 0x40000; +/// Send to all DMs within distance 80m of oPC (server message window) +const int LOG_DM_80_SERVER = 0x80000; +/// Send to the oPC and all of their party members who percieve oPC (floating text) +const int LOG_PARTY_PERC = 0x100000; +/// Send to the oPC and all of their party members who percieve oPC (server message window) +const int LOG_PARTY_PERC_SERVER = 0x200000; +/// Send to the oPC and their nearby (10m) party members (floating text) +const int LOG_PARTY_10 = 0x400000; +/// Send to the oPC and their nearby (20m) party members (floating text) +const int LOG_PARTY_20 = 0x800000; +/// Send to the oPC and their nearby (40m) party members (floating text) +const int LOG_PARTY_40 = 0x1000000; +/// Send to the oPC and their nearby (80m) party members (floating text) +const int LOG_PARTY_80 = 0x2000000; +/// Send to all DMs as a server message +const int LOG_DM_ALL_SERVER = 0x4000000; +/// Send to all party EXCEPT for the player who triggered as a server message +const int LOG_PARTY_ONLY = 0x8000000; +/// Send to all party EXCEPT for the player *and people who can't see the player) who triggered as a server message +const int LOG_PARTY_PERC_ONLY = 0x10000000; + +// **************************************************************************** +// ** BACKWARDS COMPATIBILITY +// **************************************************************************** + +// These globals exist purely for backwards compatibility with older versions +// of LogMessage. They aren't recommended. + +/// Send only to the oPC who activated it (floating text) and the server log file +int LOG_FILE_PC = LOG_TO_SERVER_LOG | LOG_PC; +/// Send only to the oPC who activated it (server message window) and the server log file +int LOG_FILE_PC_SERVER = LOG_TO_SERVER_LOG | LOG_PC_SERVER; +/// Send to the oPC and all of their party members (floating text) and the server log file +int LOG_FILE_PARTY = LOG_TO_SERVER_LOG | LOG_PARTY; +/// Send to the oPC and all of their party members (server message window) and the server log file +int LOG_FILE_PARTY_SERVER = LOG_TO_SERVER_LOG | LOG_PARTY_SERVER; +/// Send to the oPC and their nearby (30m) faction members (floating text) and the server log file +int LOG_FILE_PARTY_30 = LOG_TO_SERVER_LOG | LOG_PARTY_30; +/// Send to the DM channel and the server log file +int LOG_FILE_DM_ALL = LOG_TO_SERVER_LOG | LOG_DM_ALL; +/// Send to all DMs within distance 10m of oPC and the server log file +int LOG_FILE_DM_10 = LOG_TO_SERVER_LOG | LOG_DM_10; +/// Send to all DMs within distance 20m of oPC and the server log file +int LOG_FILE_DM_20 = LOG_TO_SERVER_LOG | LOG_DM_20; +/// Send to all DMs within distance 40m of oPC and the server log file +int LOG_FILE_DM_40 = LOG_TO_SERVER_LOG | LOG_DM_40; +/// Send to all DMs within distance 80m of oPC and the server log file +int LOG_FILE_DM_80 = LOG_TO_SERVER_LOG | LOG_DM_80; +/// Make oPC whisper the message (chat message window) and the server log file +int LOG_FILE_WHISPER = LOG_TO_SERVER_LOG | LOG_WHISPER; +/// Make oPC talk the message (chat message window) and the server log file +int LOG_FILE_TALK = LOG_TO_SERVER_LOG | LOG_TALK; +/// Make oPC shout the message (chat message window) and the server log file +int LOG_FILE_SHOUT = LOG_TO_SERVER_LOG | LOG_SHOUT; + +// **************************************************************************** +// ** CONSTANTS +// **************************************************************************** + +// Set this to FALSE to include henchmen as part of the party for sending messages. +// Useful when trying to test MP messages when in SP. +const int LOG_MESSAGE_PARTY_PLAYERS_ONLY = TRUE; + +// Set this to TRUE to debug how messages are being decoded. +const int LOG_MESSAGE_DEBUG = FALSE; + +// Set this to TRUE to debug where messages are coming from. +const int LOG_MESSAGE_SOURCE_DEBUG = FALSE; + +// This can be used to display which version of LogMessage you are using. +const string LOG_MESSAGE_VERSION = "LogMessage v1.06"; + +// **************************************************************************** +// ** FUNCTION DECLARATIONS +// **************************************************************************** + +/** + * This function is used to a log a message in several different ways depending + * the value of iLogType. + * + * @param iLogType This is the level of logging to use. It should be one of the + * LOG_* constants. + * @param oPC This is the player who is triggering the log message. + * @param sMessage This is the message to be logged. + * @param sDMMessage This a message to be appended only for DM/log file messages. + * @param sLocalFilter The message will only be sent to people who have + * a LocalInt with this name and a specified value. + * @param iLocalValue The value the LocalInt must have. + */ +void LogMessage (int iLogType, object oPC, string sMessage, string sDMMessage = "", string sLocalFilter = "", int iLocalValue = 0); + +/** + * + * This function is used to send a message to every player on the server using the + * server message window. + * + * @param oPC A member of the party to send the message to. + * @param sMessage The message to send. + * @param sLocalFilter The message will only be sent to people who have + * a LocalInt with this name and a specified value. + * @param iLocalValue The value the LocalInt must have. + */ +void SendMessageToAllPCs (string sMessage, string sLocalFilter = "", int iLocalValue = 0); + +/** + * This function is used to send a message to every player in a party using the + * server message window. + * + * @param oPC A member of the party to send the message to. + * @param sMessage The message to send. + * @param bSkipOrigin Skip the player who originated the message. + * @param bPerceptionCheck If this is true, only send the message if the party member can see oPC. + * @param sLocalFilter The message will only be sent to people who have + * a LocalInt with this name and a specified value. + * @param iLocalValue The value the LocalInt must have. + */ +void SendMessageToParty (object oPC, string sMessage, int bSkipOrigin = FALSE, int bPerceptionCheck = FALSE, string sLocalFilter = "", int iLocalValue = 0); + +/** + * This function is used to send a message to every player in a party using + * floating text. + * + * @param oPC A member of the party to send the message to. + * @param sMessage The message to send. + * @param bPerceptionCheck If this is true, only send the message if the party member can see oPC. + * @param sLocalFilter The message will only be sent to people who have + * a LocalInt with this name and a specified value. + * @param iLocalValue The value the LocalInt must have. +void FloatingTextStringOnParty (object oPC, string sMessage, int bPerceptionCheck = FALSE, string sLocalFilter = "", int iLocalValue = 0); + +/** + * This function is used to send a message to every player in a party using + * floating text. + * + * @param oPC A member of the party to send the message to. + * @param iDistance The maximum distance the party member can be from oPC. + * @param sMessage The message to send. + * @param sLocalFilter The message will only be sent to people who have + * a LocalInt with this name and a specified value. + * @param iLocalValue The value the LocalInt must have. + */ +void FloatingTextStringOnPartyByDistance (object oPC, int iDistance, string sMessage, string sLocalFilter = "", int iLocalValue = 0); + +/** + * This function is used to send a message to all of the DMs near a particular + * location. + * + * @param lLocation The center of the sphere to search for DMs. + * @param iDistance The maximum distance the DM can be from lLocation. + * @param sMessage The message to send. + * @param bFloating If TRUE, send as a floating text string, if FALSE, send as a server message. + * @param sLocalFilter The message will only be sent to people who have + * a LocalInt with this name and a specified value. + * @param iLocalValue The value the LocalInt must have. + */ +void SendMessageToDMsByDistance (location lLocation, int iDistance, string sMessage, int bFloating = TRUE, string sLocalFilter = "", int iLocalValue = 0); + +// **************************************************************************** +// ** FUNCTION DEFINITIONS +// **************************************************************************** + +void SendMessageToAllPCs (string sMessage, string sLocalFilter = "", int iLocalValue = 0) +{ + object oPC = GetFirstPC(); + while (GetIsObjectValid(oPC)) + { + if ((sLocalFilter == "") || + (GetLocalInt(oPC, sLocalFilter) == iLocalValue)) + { + // Check for DM possessed NPCs. + if (!GetIsDM(GetMaster(oPC))) + SendMessageToPC(oPC, sMessage); + } + oPC = GetNextPC(); + } +} + +void SendMessageToParty (object oPC, string sMessage, int bSkipOrigin = FALSE, int bPerceptionCheck = FALSE, string sLocalFilter = "", int iLocalValue = 0) +{ + object oParty = GetFirstFactionMember(oPC, LOG_MESSAGE_PARTY_PLAYERS_ONLY); + while ( GetIsObjectValid(oParty) ) + { + if ( + // if filter is not set, or filter is true + ((sLocalFilter == "") || + (GetLocalInt(oParty, sLocalFilter) == iLocalValue)) && + // if perception check not set, or perception is true + ((bPerceptionCheck == FALSE) || + (GetObjectSeen(oPC, oParty) == TRUE)) && + // if bSkipOrigin is not set, or this is not the originating player + ((bSkipOrigin == FALSE) || + (oPC != oParty)) + ) + { + SendMessageToPC(oParty, sMessage); + } + oParty = GetNextFactionMember(oPC, LOG_MESSAGE_PARTY_PLAYERS_ONLY); + } + return; +} + +void FloatingTextStringOnParty (object oPC, string sMessage, int bPerceptionCheck = FALSE, string sLocalFilter = "", int iLocalValue = 0) +{ + object oParty = GetFirstFactionMember(oPC, LOG_MESSAGE_PARTY_PLAYERS_ONLY); + while ( GetIsObjectValid(oParty) ) + { + if ( + // if filter is not set, or filter is true + ((sLocalFilter == "") || + (GetLocalInt(oParty, sLocalFilter) == iLocalValue)) && + // if perception check not set, or perception is true + ((bPerceptionCheck == FALSE) || + (GetObjectSeen(oPC, oParty) == TRUE)) + ) { + FloatingTextStringOnCreature(sMessage, oParty, FALSE); + } + oParty = GetNextFactionMember(oPC, LOG_MESSAGE_PARTY_PLAYERS_ONLY); + } + return; +} + + +void FloatingTextStringOnPartyByDistance (object oPC, int iDistance, string sMessage, string sLocalFilter = "", int iLocalValue = 0) +{ + float fMaxDist = IntToFloat(iDistance); + object oParty = GetFirstFactionMember(oPC, LOG_MESSAGE_PARTY_PLAYERS_ONLY); + while ( GetIsObjectValid(oParty) ) + { + float fDistance = GetDistanceBetween(oPC, oParty); + if ( + // if filter is not set, or filter is true + ( (sLocalFilter == "") || + (GetLocalInt(oParty, sLocalFilter) == iLocalValue) ) && + // Check that the party member is close enough to the player + ( (oParty == oPC) || + ( (fDistance > 0.0) && (fDistance <= fMaxDist) ) ) + ) + { + FloatingTextStringOnCreature(sMessage, oParty, FALSE); + } + oParty = GetNextFactionMember(oPC, LOG_MESSAGE_PARTY_PLAYERS_ONLY); + } +} + +void SendMessageToDMsByDistance (location lLocation, int iDistance, string sMessage, int bFloating = TRUE, string sLocalFilter = "", int iLocalValue = 0) +{ + object oDM; + // If distance is zero, then send the message to all DMs on the server + if (iDistance == 0) + { + oDM = GetFirstPC(); + while (GetIsObjectValid(oDM)) + { + if ((sLocalFilter == "") || + (GetLocalInt(oDM, sLocalFilter) == iLocalValue)) + { + // Note: DM possessed NPCs do not return TRUE for GetIsPC anymore. + if ( GetIsDM(oDM) || GetIsDMPossessed(oDM) ) + { + if (bFloating) FloatingTextStringOnCreature(sMessage, oDM, FALSE); + else SendMessageToPC(oDM, sMessage); + } + } + oDM = GetNextPC(); + } + return; + } + // Normal operation + float fSize = IntToFloat(iDistance); + // Using ObjectInShape with CREATURE only catches DMs possessing NPCs but not DM avatars. + oDM = GetFirstObjectInShape (SHAPE_SPHERE, fSize, lLocation, FALSE, OBJECT_TYPE_ALL); + while ( GetIsObjectValid(oDM) ) + { + if ((sLocalFilter == "") || + (GetLocalInt(oDM, sLocalFilter) == iLocalValue)) + { + if ( GetIsDM(oDM) || GetIsDMPossessed(oDM) ) + { + if (bFloating) FloatingTextStringOnCreature(sMessage, oDM, FALSE); + else SendMessageToPC(oDM, sMessage); + } + } + oDM = GetNextObjectInShape (SHAPE_SPHERE, fSize, lLocation, FALSE, OBJECT_TYPE_ALL); + } + return; +} + +void LogMessage (int iLogType, object oPC, string sMessage, string sDMMessage = "", string sLocalFilter = "", int iLocalValue = 0) +{ + + object oParty; + object oArea; + object oDM; + int iDistance = 0; + + if (LOG_MESSAGE_SOURCE_DEBUG) SpeakString("Debug: "+GetName(OBJECT_SELF)+" in area: "+GetName(GetArea(OBJECT_SELF))+" is originating "+IntToHexString(iLogType)+" type log message: "+sMessage, TALKVOLUME_SHOUT); + + // Handle the various different types of log levels. + + // Messages that do not require oPC to be valid. + if (iLogType & LOG_DISABLED) + return; + + if (iLogType & LOG_PC_ALL) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_PC_ALL"); + // Does not use the sLocalFilter because oPC does not have to + // be valid. + SendMessageToAllPCs(sMessage, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_DM_ALL) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_DM_ALL"); + // Does not use the sLocalFilter because oPC does not have to + // be valid. + SendMessageToAllDMs(sMessage + " " + sDMMessage); + } + + if (iLogType & LOG_DM_ALL_SERVER) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_DM_ALL_SERVER"); + // Does not use the sLocalFilter because oPC does not have to + // be valid. + SendMessageToDMsByDistance (GetLocation(OBJECT_SELF), 0, sMessage + " " + sDMMessage, FALSE, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_TO_SERVER_LOG) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_TO_SERVER_LOG"); + // Does not use the sLocalFilter because oPC does not have to + // be valid. + PrintString(sMessage + " " + sDMMessage); + } + + if (iLogType & LOG_TIME_SERVER_LOG) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_TIME_SERVER_LOG"); + // Does not use the sLocalFilter because oPC does not have to + // be valid. + WriteTimestampedLogEntry(sMessage + " " + sDMMessage); + } + + // Messages that do require oPC to be valid. + if (GetIsObjectValid(oPC)) + { + if (iLogType & LOG_PC) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_PC"); + if ((sLocalFilter == "") || + (GetLocalInt(oPC, sLocalFilter) == iLocalValue)) + { + FloatingTextStringOnCreature(sMessage, oPC, FALSE); + } + } + + if (iLogType & LOG_PC_SERVER) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_PC_SERVER"); + if ((sLocalFilter == "") || + (GetLocalInt(oPC, sLocalFilter) == iLocalValue)) + { + SendMessageToPC(oPC, sMessage); + } + } + + if (iLogType & LOG_PARTY) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_PARTY"); + FloatingTextStringOnParty(oPC, sMessage, FALSE, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_PARTY_ONLY) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_PARTY_ONLY"); + SendMessageToParty(oPC, sMessage, TRUE, FALSE, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_PARTY_10) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_PARTY_10"); + FloatingTextStringOnPartyByDistance(oPC, 10, sMessage, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_PARTY_20) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_PARTY_20"); + FloatingTextStringOnPartyByDistance(oPC, 20, sMessage, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_PARTY_40) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_PARTY_40"); + FloatingTextStringOnPartyByDistance(oPC, 40, sMessage, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_PARTY_80) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_PARTY_80"); + FloatingTextStringOnPartyByDistance(oPC, 80, sMessage, sLocalFilter, iLocalValue); + } + + + if (iLogType & LOG_PARTY_SERVER) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_PARTY_SERVER"); + SendMessageToParty(oPC, sMessage, FALSE, FALSE, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_PARTY_PERC) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_PARTY_PERC"); + FloatingTextStringOnParty(oPC, sMessage, TRUE, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_PARTY_PERC_ONLY) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_PARTY_ONLY_PERC"); + SendMessageToParty(oPC, sMessage, TRUE, TRUE, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_PARTY_PERC_SERVER) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_PARTY_PERC_SERVER"); + SendMessageToParty(oPC, sMessage, FALSE, TRUE, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_PARTY_30) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_PARTY_30"); + // Note: does not use sLocalFilter + FloatingTextStringOnCreature(sMessage, oPC, TRUE); + } + + if (iLogType & LOG_DM_10) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_DM_10"); + SendMessageToDMsByDistance(GetLocation(oPC), 10, sMessage + " " + sDMMessage, TRUE, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_DM_20) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_DM_20"); + SendMessageToDMsByDistance(GetLocation(oPC), 20, sMessage + " " + sDMMessage, TRUE, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_DM_40) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_DM_40"); + SendMessageToDMsByDistance(GetLocation(oPC), 40, sMessage + " " + sDMMessage, TRUE, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_DM_80) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_DM_80"); + SendMessageToDMsByDistance(GetLocation(oPC), 80, sMessage + " " + sDMMessage, TRUE, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_DM_10_SERVER) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_DM_10_SERVER"); + SendMessageToDMsByDistance(GetLocation(oPC), 10, sMessage + " " + sDMMessage, FALSE, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_DM_20_SERVER) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_DM_20_SERVER"); + SendMessageToDMsByDistance(GetLocation(oPC), 20, sMessage + " " + sDMMessage, FALSE, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_DM_40_SERVER) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_DM_40_SERVER"); + SendMessageToDMsByDistance(GetLocation(oPC), 40, sMessage + " " + sDMMessage, FALSE, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_DM_80_SERVER) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_DM_80_SERVER"); + SendMessageToDMsByDistance(GetLocation(oPC), 80, sMessage + " " + sDMMessage, FALSE, sLocalFilter, iLocalValue); + } + + if (iLogType & LOG_WHISPER) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_WHISPER"); + if ((sLocalFilter == "") || + (GetLocalInt(oPC, sLocalFilter) == iLocalValue)) + { + AssignCommand(oPC, ActionSpeakString(sMessage, TALKVOLUME_WHISPER)); + } + } + + if (iLogType & LOG_TALK) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_TALK"); + if ((sLocalFilter == "") || + (GetLocalInt(oPC, sLocalFilter) == iLocalValue)) + { + AssignCommand(oPC, ActionSpeakString(sMessage, TALKVOLUME_TALK)); + } + } + + if (iLogType & LOG_SHOUT) + { + if (LOG_MESSAGE_DEBUG) SendMessageToPC(oPC, "LOG_SHOUT"); + if ((sLocalFilter == "") || + (GetLocalInt(oPC, sLocalFilter) == iLocalValue)) + { + AssignCommand(oPC, ActionSpeakString(sMessage, TALKVOLUME_SHOUT)); + } + } + } + return; +} + diff --git a/src/include/inc_lookups.nss b/src/include/inc_lookups.nss new file mode 100644 index 0000000..e5a5124 --- /dev/null +++ b/src/include/inc_lookups.nss @@ -0,0 +1,598 @@ +/* + + This file is used for lookup functions for psionics and newspellbooks + It is supposed to reduce the need for large loops that may result in + TMI errors. + It does this by creating arrays in advance and the using those as direct + lookups. +*/ + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + + +void MakeLookupLoop(int nClass, string sFile, int nMin, int nMax, int nLoopSize = 100, string sTemp = ""); +void SetupLookupStage(object oMod, int n); + + +//this returns the real SpellID of "wrapper" spells cast by psionic or the new spellbooks +int GetPowerFromSpellID(int nSpellID); + +/** + * Maps spells.2da rows of the class-specific entries to corresponding cls_psipw_*.2da rows. + * + * @param nSpellID Spells.2da row to determine cls_psipw_*.2da row for + * @return The mapped value + */ +int GetPowerfileIndexFromSpellID(int nSpellID); + +/** + * Maps spells.2da rows of the real entries to corresponding cls_psipw_*.2da rows. + * + * @param nSpellID Spells.2da row to determine cls_psipw_*.2da row for + * @return The mapped value + */ +int GetPowerfileIndexFromRealSpellID(int nRealSpellID); + +//this retuns the featID of the class-specific feat for a spellID +//useful for psionics GetHasPower function +int GetClassFeatFromPower(int nPowerID, int nClass); + +/** + * Determines cls_spell_*.2da index from a given new spellbook class-specific + * spell spells.2da index. + * + * @param nSpell The class-specific spell to find cls_spell_*.2da index for + * @return The cls_spell_*.2da index in whichever class's file that the + * given spell belongs to. + * If the spell at nSpell isn't a newspellbook class-specific spell, + * returns -1 instead. + */ +int SpellToSpellbookID(int nSpell); + +/** + * Determines cls_spell_*.2da index from a given spells.2da index. + * + * @param nClass The class in whose spellbook to search in + * @param nSpell The spell to search for + * @return The cls_spell_*.2da index in whichever class's file that the + * given spell belongs to. + * If nSpell does not exist within the spellbook, + * returns -1 instead. + */ +int RealSpellToSpellbookID(int nClass, int nSpell); + +/** + * Determines number of metamagics from a given spells.2da index. + * + * @param nClass The class in whose spellbook to search in + * @param nSpell The spell to search for + * @return The number of metamagics in cls_spell_*.2da + * for a particular spell. + */ +int RealSpellToSpellbookIDCount(int nClass, int nSpell); + +/** + * Determines the name of the 2da file that defines the number of alternate magic + * system powers/spells/whathaveyou known, maximum level of such known and + * number of uses at each level of the given class. And possibly related things + * that apply to that specific system. + * + * @param nClass CLASS_TYPE_* of the class to determine the powers known 2da name of + * @return The name of the given class's powers known 2da + */ +string GetAMSKnownFileName(int nClass); + +/** + * Determines the name of the 2da file that lists the powers/spells/whathaveyou + * on the given class's list of such. + * + * @param nClass CLASS_TYPE_* of the class to determine the power list 2da name of + * @return The name of the given class's power list 2da + */ +string GetAMSDefinitionFileName(int nClass); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "inc_2dacache" +#include "prc_inc_array" +#include "prc_class_const" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +object _inc_lookups_GetCacheObject(string sTag) +{ + object oWP = GetObjectByTag(sTag); + if(!GetIsObjectValid(oWP)) + { + object oChest = GetObjectByTag("Bioware2DACache"); + if(!GetIsObjectValid(oChest)) + { + //has to be an object, placeables cant go through the DB + oChest = CreateObject(OBJECT_TYPE_CREATURE, "prc_2da_cache", + GetLocation(GetObjectByTag("HEARTOFCHAOS")), FALSE, "Bioware2DACache"); + } + if(!GetIsObjectValid(oChest)) + { + //has to be an object, placeables cant go through the DB + oChest = CreateObject(OBJECT_TYPE_CREATURE, "prc_2da_cache", + GetStartingLocation(), FALSE, "Bioware2DACache"); + } + + int nContainer = 0; + string sContainerName = "Bio2DACacheTokenContainer_Lkup_"; + object oContainer = GetObjectByTag(sContainerName + IntToString(nContainer)); + + // Find last existing container + if(GetIsObjectValid(oContainer)) + { + nContainer = GetLocalInt(oContainer, "ContainerCount"); + oContainer = GetObjectByTag(sContainerName + IntToString(nContainer)); + + // Make sure it's not full + if(GetLocalInt(oContainer, "NumTokensInside") >= 34) // Container has 35 slots. Attempt to not use them all, just in case + { + oContainer = OBJECT_INVALID; + ++nContainer; // new container is 1 higher than last one + } + } + + // We need to create a container + if(!GetIsObjectValid(oContainer)) + { + oContainer = CreateObject(OBJECT_TYPE_ITEM, "nw_it_contain001", GetLocation(oChest), FALSE, sContainerName + IntToString(nContainer)); + DestroyObject(oContainer); + oContainer = CopyObject(oContainer, GetLocation(oChest), oChest, sContainerName + IntToString(nContainer)); + // store the new number of containers in this series + if(nContainer) + SetLocalInt(GetObjectByTag(sContainerName + "0"), "ContainerCount", nContainer); + // else this is the first container - do nothing as this is the same as storing 0 on it. + // Also here we still have 2 objects with the same tag so above code may get + // the object destroyed at the end of the function if this is the first container. + } + + // Create the new token + oWP = CreateItemOnObject("hidetoken", oContainer, 1, sTag); + + // Increment token count tracking variable + SetLocalInt(oContainer, "NumTokensInside", GetLocalInt(oContainer, "NumTokensInside") + 1); + } + + if(!GetIsObjectValid(oWP)) + { + DoDebug("ERROR: Failed to create lookup storage token for " + sTag); + return OBJECT_INVALID; + } + + return oWP; +} + +void SetLkupStage(int nStage, object oModule, int nClass, string sFile) +{ + SetLocalInt(oModule, "PRCLookup_Stage", nStage + 1); + SetLocalInt(oModule, "PRCLookup_Class", nClass); + SetLocalString(oModule, "PRCLookup_File", sFile); +} + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +void RunLookupLoop() +{ + // check if we run lookup before + if(GetXP(GetObjectByTag("Bioware2DACache")) & 0x01) + { + if (DEBUG) DoDebug("RunLookupLoop() - marker found - exiting"); + return; + } + + object oModule = GetModule(); + SetupLookupStage(oModule, 1); + int nClass = GetLocalInt(oModule, "PRCLookup_Class"); + string sFile = GetLocalString(oModule, "PRCLookup_File"); + if (DEBUG) DoDebug("RunLookupLoop(): Looking in "+sFile+" for nClass "+IntToString(nClass)); + MakeLookupLoop(nClass, sFile, 1, PRCGetDynamicFileEnd(sFile)); +} + +void RunNextLoop() +{ + object oModule = GetModule(); + int nStage = GetLocalInt(oModule, "PRCLookup_Stage"); + SetupLookupStage(oModule, nStage); + int nClass = GetLocalInt(oModule, "PRCLookup_Class"); + if(nClass) + { + string sFile = GetLocalString(oModule, "PRCLookup_File"); + if (DEBUG) DoDebug("RunNextLoop(): Looking in "+sFile+" for nClass "+IntToString(nClass)); + MakeLookupLoop(nClass, sFile, 1, PRCGetDynamicFileEnd(sFile)); + } + else + { + DeleteLocalInt(oModule, "PRCLookup_Stage"); + DeleteLocalInt(oModule, "PRCLookup_Class"); + DeleteLocalString(oModule, "PRCLookup_File"); + + //mark lookup as done, tell hb to save the DB + object oCache = GetObjectByTag("Bioware2DACache"); + SetXP(oCache, GetXP(oCache) | 0x01); + SetLocalInt(oModule, "Bioware2dacacheCount", GetPRCSwitch(PRC_USE_BIOWARE_DATABASE) - 5); + } +} + +void SetupLookupStage(object oMod, int n) +{ + switch(n) + { + case 1: SetLkupStage(n, oMod, CLASS_TYPE_PSION, "cls_psipw_psion"); break; + case 2: SetLkupStage(n, oMod, CLASS_TYPE_PSYWAR, "cls_psipw_psywar"); break; + case 3: SetLkupStage(n, oMod, CLASS_TYPE_WILDER, "cls_psipw_wilder"); break; + case 4: SetLkupStage(n, oMod, CLASS_TYPE_FIST_OF_ZUOKEN, "cls_psipw_foz"); break; + case 5: SetLkupStage(n, oMod, CLASS_TYPE_WARMIND, "cls_psipw_warmnd"); break; + case 6: SetLkupStage(n, oMod, CLASS_TYPE_TRUENAMER, "cls_true_utter"); break; + case 7: SetLkupStage(n, oMod, CLASS_TYPE_CRUSADER, "cls_move_crusdr"); break; + case 8: SetLkupStage(n, oMod, CLASS_TYPE_SWORDSAGE, "cls_move_swdsge"); break; + case 9: SetLkupStage(n, oMod, CLASS_TYPE_WARBLADE, "cls_move_warbld"); break; + case 10: SetLkupStage(n, oMod, CLASS_TYPE_DRAGONFIRE_ADEPT, "cls_inv_dfa"); break; + case 11: SetLkupStage(n, oMod, CLASS_TYPE_DRAGON_SHAMAN, "cls_inv_drgshm"); break; + case 12: SetLkupStage(n, oMod, CLASS_TYPE_WARLOCK, "cls_inv_warlok"); break; + case 13: SetLkupStage(n, oMod, CLASS_TYPE_ARCHIVIST, "cls_spell_archv"); break; + case 14: SetLkupStage(n, oMod, CLASS_TYPE_ASSASSIN, "cls_spell_asasin"); break; + case 15: SetLkupStage(n, oMod, CLASS_TYPE_BARD, "cls_spell_bard"); break; + case 16: SetLkupStage(n, oMod, CLASS_TYPE_BEGUILER, "cls_spell_beguil"); break; + case 17: SetLkupStage(n, oMod, CLASS_TYPE_DREAD_NECROMANCER, "cls_spell_dnecro"); break; + case 18: SetLkupStage(n, oMod, CLASS_TYPE_DUSKBLADE, "cls_spell_duskbl"); break; + case 19: SetLkupStage(n, oMod, CLASS_TYPE_FAVOURED_SOUL, "cls_spell_favsol"); break; + case 20: SetLkupStage(n, oMod, CLASS_TYPE_HARPER, "cls_spell_harper"); break; + case 21: SetLkupStage(n, oMod, CLASS_TYPE_HEXBLADE, "cls_spell_hexbl"); break; + case 22: SetLkupStage(n, oMod, CLASS_TYPE_JUSTICEWW, "cls_spell_justww"); break; + case 23: SetLkupStage(n, oMod, CLASS_TYPE_SORCERER, "cls_spell_sorc"); break; + case 24: SetLkupStage(n, oMod, CLASS_TYPE_SUBLIME_CHORD, "cls_spell_schord"); break; + case 25: SetLkupStage(n, oMod, CLASS_TYPE_SUEL_ARCHANAMACH, "cls_spell_suel"); break; + case 26: SetLkupStage(n, oMod, CLASS_TYPE_VIGILANT, "cls_spell_vigil"); break; + case 27: SetLkupStage(n, oMod, CLASS_TYPE_WARMAGE, "cls_spell_wrmage"); break; + case 28: SetLkupStage(n, oMod, CLASS_TYPE_KNIGHT_WEAVE, "cls_spell_kngtwv"); break; + case 29: SetLkupStage(n, oMod, CLASS_TYPE_PSYCHIC_ROGUE, "cls_psipw_psyrog"); break; + case 30: SetLkupStage(n, oMod, CLASS_TYPE_SHADOWCASTER, "cls_myst_shdcst"); break; + case 31: SetLkupStage(n, oMod, CLASS_TYPE_SHADOWSMITH, "cls_myst_shdsmt"); break; + case 32: SetLkupStage(n, oMod, CLASS_TYPE_CELEBRANT_SHARESS, "cls_spell_sharss"); break; + //case 46: SetLkupStage(n, oMod, CLASS_TYPE_CULTIST_SHATTERED_PEAK, "cls_spell_cultst"); break; + //case 40: SetLkupStage(n, oMod, CLASS_TYPE_NENTYAR_HUNTER, "cls_spell_hunter"); break; + //case 28: SetLkupStage(n, oMod, CLASS_TYPE_SHADOWLORD, "cls_spell_tfshad"); break; + //case 29: SetLkupStage(n, oMod, CLASS_TYPE_SLAYER_OF_DOMIEL, "cls_spell_sod"); break; + //case 29: SetLkupStage(n, oMod, CLASS_TYPE_SOHEI, "cls_spell_sohei"); break; + //case 33: SetLkupStage(n, oMod, CLASS_TYPE_VASSAL, "cls_spell_vassal"); break; + //case 17: SetLkupStage(n, oMod, CLASS_TYPE_BLACKGUARD, "cls_spell_blkgrd"); break; + //case 24: SetLkupStage(n, oMod, CLASS_TYPE_KNIGHT_CHALICE, "cls_spell_kchal"); break; + //case 25: SetLkupStage(n, oMod, CLASS_TYPE_KNIGHT_MIDDLECIRCLE, "cls_spell_kotmc"); break; + //case 26: SetLkupStage(n, oMod, CLASS_TYPE_SOLDIER_OF_LIGHT, "cls_spell_sol"); break; + //case 24: SetLkupStage(n, oMod, CLASS_TYPE_OCULAR, "cls_spell_ocu"); break; + //case 30: SetLkupStage(n, oMod, CLASS_TYPE_BLIGHTER, "cls_spell_blight"); break; + //case 21: SetLkupStage(n, oMod, CLASS_TYPE_HEALER, "cls_spell_healer"); break; + //case 23: SetLkupStage(n, oMod, CLASS_TYPE_SHAMAN, "cls_spell_shaman"); break; + + default: SetLkupStage(n, oMod, 0, ""); break; + } +} +/* +void LookupSpells(int nRealSpellID, string sClass, string sLevel); +{ + int nDescriptor = Get2DACache("prc_spells", "Descriptor", nRealSpellID);//should already be in cache, just read the value + +DESCRIPTOR_ACID +DESCRIPTOR_AIR +DESCRIPTOR_COLD +DESCRIPTOR_LIGHT +DESCRIPTOR_ELECTRICITY +DESCRIPTOR_DARKNESS +DESCRIPTOR_FIRE +DESCRIPTOR_SONIC + + +SUBSCHOOL_HEALING +SUBSCHOOL_SUMMONING +SUBSCHOOL_POLYMORPH + +SPELL_SCHOOL_ENCHANTMENT +SPELL_SCHOOL_NECROMANCY +SPELL_SCHOOL_ABJURATION + + string sLevel = Get2DACache("spells", "Cleric", nRealSpellID); + if(sLevel != "") + { + oLevelToken = _inc_lookups_GetCacheObject("SpellLvl_2_Level_"+sLevel); + // check if array exist, if not create one + if(!array_exists(oLevelToken, "Lkup")) + array_create(oLevelToken, "Lkup"); + array_set_int(oLevelToken, "Lkup", array_get_size(oLevelToken, "Lkup"), i); + } + sLevel = Get2DACache("spells", "Druid", nRealSpellID); + if(sLevel != "") + { + oLevelToken = _inc_lookups_GetCacheObject("SpellLvl_3_Level_"+sLevel); + // check if array exist, if not create one + if(!array_exists(oLevelToken, "Lkup")) + array_create(oLevelToken, "Lkup"); + array_set_int(oLevelToken, "Lkup", array_get_size(oLevelToken, "Lkup"), i); + } + sLevel = Get2DACache("spells", "Paladin", nRealSpellID); + if(sLevel != "") + { + oLevelToken = _inc_lookups_GetCacheObject("SpellLvl_6_Level_"+sLevel); + // check if array exist, if not create one + if(!array_exists(oLevelToken, "Lkup")) + array_create(oLevelToken, "Lkup"); + array_set_int(oLevelToken, "Lkup", array_get_size(oLevelToken, "Lkup"), i); + } + sLevel = Get2DACache("spells", "Ranger", nRealSpellID); + if(sLevel != "") + { + oLevelToken = _inc_lookups_GetCacheObject("SpellLvl_7_Level_"+sLevel); + // check if array exist, if not create one + if(!array_exists(oLevelToken, "Lkup")) + array_create(oLevelToken, "Lkup"); + array_set_int(oLevelToken, "Lkup", array_get_size(oLevelToken, "Lkup"), i); + } + sLevel = Get2DACache("spells", "Wiz_Sorc", nRealSpellID); + if(sLevel != "") + { + oLevelToken = _inc_lookups_GetCacheObject("SpellLvl_10_Level_"+sLevel); + // check if array exist, if not create one + if(!array_exists(oLevelToken, "Lkup")) + array_create(oLevelToken, "Lkup"); + array_set_int(oLevelToken, "Lkup", array_get_size(oLevelToken, "Lkup"), i); + } + +*/ + + +void MakeLookupLoop(int nClass, string sFile, int nMin, int nMax, int nLoopSize = 100, string sTemp = "") +{ + // Tell the function to skip before reaching nMax + int bSkipLoop = FALSE; + int i; + + if(DEBUG) DoDebug("MakeLookupLoop(" + +IntToString(nClass)+", " + +sFile+", " + +IntToString(nMin)+", " + +IntToString(nMax)+", " + +IntToString(nLoopSize)+", " + +") : sTemp = "+sTemp); + + // psionic, tob, truenameing and ivocation using classes have slightly different handling + // new AMS classes should be added here + int bAMS = FALSE; + + if(nClass == CLASS_TYPE_PSION + || nClass == CLASS_TYPE_PSYWAR + || nClass == CLASS_TYPE_PSYCHIC_ROGUE + || nClass == CLASS_TYPE_WILDER + || nClass == CLASS_TYPE_FIST_OF_ZUOKEN + || nClass == CLASS_TYPE_WARMIND + || nClass == CLASS_TYPE_CRUSADER + || nClass == CLASS_TYPE_SWORDSAGE + || nClass == CLASS_TYPE_WARBLADE + || nClass == CLASS_TYPE_TRUENAMER + || nClass == CLASS_TYPE_SHADOWCASTER + || nClass == CLASS_TYPE_SHADOWSMITH + || nClass == CLASS_TYPE_DRAGONFIRE_ADEPT + || nClass == CLASS_TYPE_DRAGON_SHAMAN + || nClass == CLASS_TYPE_WARLOCK) + bAMS = TRUE; + + object oSpellIDToken = bAMS ? _inc_lookups_GetCacheObject("PRC_SpellIDToClsPsipw"): + _inc_lookups_GetCacheObject("PRC_GetRowFromSpellID"); + + // Failed to obtain a valid token - nothing to store on + if(!GetIsObjectValid(oSpellIDToken)) + bSkipLoop = TRUE; + + // Starting a new run and the data is present already. Assume the whole thing is present and abort + if(nMin == 1 + && GetLocalInt(oSpellIDToken, Get2DACache(sFile, "SpellID", 1))) + { + if(DEBUG) DoDebug("MakeLookupLoop("+sFile+") restored from database"); + bSkipLoop = TRUE; + } + + if(!bSkipLoop) + { + string sClass = IntToString(nClass); + + object oLevelToken; + object oPowerToken = _inc_lookups_GetCacheObject("PRC_GetPowerFromSpellID"); + object oRealSpellIDToken = bAMS ? _inc_lookups_GetCacheObject("PRC_GetClassFeatFromPower_"+sClass): + _inc_lookups_GetCacheObject("PRC_GetRowFromRealSpellID"); + + int nRealSpellID, nFeatID, nCount; + string sSpellID, sRealSID; + for(i = nMin; i < nMin + nLoopSize; i++) + { + // None of the relevant 2da files have blank Label entries on rows other than 0. We can assume i is greater than 0 at this point + if(Get2DAString(sFile, "Label", i) == "") // Using Get2DAString() instead of Get2DACache() to avoid caching useless data + { + bSkipLoop = TRUE; + break;// exit the loop + } + + sSpellID = Get2DACache(sFile, "SpellID", i); + sRealSID = Get2DACache(sFile, "RealSpellID", i); + nRealSpellID = StringToInt(sRealSID); + + //GetPowerfileIndexFromSpellID + //SpellToSpellbookID + SetLocalInt(oSpellIDToken, sSpellID, i); + + //GetPowerfileIndexFromRealSpellID + SetLocalInt(oSpellIDToken, sRealSID, i); + + //GetPowerFromSpellID + SetLocalInt(oPowerToken, sSpellID, nRealSpellID); + + //Spell level lookup + if(!bAMS || nClass == CLASS_TYPE_WARLOCK) + { + string sReqFt = bAMS ? "" : Get2DACache(sFile, "ReqFeat", i);// Only new spellbooks have the ReqFeat column. No sense in caching it for other stuff + if(sReqFt == "") + { + string sLevel = Get2DACache(sFile, "Level", i); + oLevelToken = _inc_lookups_GetCacheObject("SpellLvl_"+sClass+"_Level_"+sLevel); + // check if array exist, if not create one + if(!array_exists(oLevelToken, "Lkup")) + array_create(oLevelToken, "Lkup"); + + array_set_int(oLevelToken, "Lkup", array_get_size(oLevelToken, "Lkup"), i); + + //LookupSpellDescriptor(nRealSpellID, sClass, sLevel); + } + } + + //GetClassFeatFromPower + if(bAMS) + { + nFeatID = StringToInt(Get2DACache(sFile, "FeatID", i)); + if(nFeatID != 0) + { + SetLocalInt(oRealSpellIDToken, sRealSID, nFeatID); + } + } + //RealSpellToSpellbookID + //RealSpellToSpellbookIDCount + else + { + if(sRealSID == sTemp) + { + nCount += 1; + continue; + } + else + { + SetLocalInt(oRealSpellIDToken, sClass+"_"+sTemp+"_Count", nCount); + SetLocalInt(oRealSpellIDToken, sClass+"_"+sRealSID+"_Start", i); + sTemp = sRealSID; + nCount = 0; + } + } + } + } + + // And delay continuation to avoid TMI + if(i < nMax && !bSkipLoop) + DelayCommand(0.0, MakeLookupLoop(nClass, sFile, i, nMax, nLoopSize, sTemp)); + else + DelayCommand(0.0, RunNextLoop()); +} + +int GetPowerFromSpellID(int nSpellID) +{ + object oWP = GetObjectByTag("PRC_GetPowerFromSpellID"); + int nPower = GetLocalInt(oWP, /*"PRC_GetPowerFromSpellID_" + */IntToString(nSpellID)); + if(nPower == 0) + nPower = -1; + return nPower; +} + +int GetPowerfileIndexFromSpellID(int nSpellID) +{ + object oWP = GetObjectByTag("PRC_SpellIDToClsPsipw"); + int nIndex = GetLocalInt(oWP, /*"PRC_SpellIDToClsPsipw_" + */IntToString(nSpellID)); + return nIndex; +} + +int GetPowerfileIndexFromRealSpellID(int nRealSpellID) +{ + object oWP = GetObjectByTag("PRC_SpellIDToClsPsipw"); + int nIndex = GetLocalInt(oWP, /*"PRC_SpellIDToClsPsipw_" + */IntToString(nRealSpellID)); + return nIndex; +} + +int GetClassFeatFromPower(int nPowerID, int nClass) +{ + string sLabel = "PRC_GetClassFeatFromPower_" + IntToString(nClass); + object oWP = GetObjectByTag(sLabel); + int nPower = GetLocalInt(oWP, /*sLabel+"_" + */IntToString(nPowerID)); + if(nPower == 0) + nPower = -1; + return nPower; +} + +int SpellToSpellbookID(int nSpell) +{ + object oWP = GetObjectByTag("PRC_GetRowFromSpellID"); + int nOutSpellID = GetLocalInt(oWP, /*"PRC_GetRowFromSpellID_" + */IntToString(nSpell)); + if(nOutSpellID == 0) + nOutSpellID = -1; + //if(DEBUG) DoDebug("SpellToSpellbookID(" + IntToString(nSpell) + ", " + sFile + ") = " + IntToString(nOutSpellID)); + return nOutSpellID; +} + +int RealSpellToSpellbookID(int nClass, int nSpell) +{ + object oWP = GetObjectByTag("PRC_GetRowFromRealSpellID"); + int nOutSpellID = GetLocalInt(oWP, IntToString(nClass) + "_" + IntToString(nSpell) + "_Start"); + if(nOutSpellID == 0) + nOutSpellID = -1; + return nOutSpellID; +} + +int RealSpellToSpellbookIDCount(int nClass, int nSpell) +{ + return GetLocalInt(GetObjectByTag("PRC_GetRowFromRealSpellID"), IntToString(nClass) + "_" + IntToString(nSpell) + "_Count"); +} + +string GetAMSKnownFileName(int nClass) +{ + // Get the class-specific base + string sFile = Get2DACache("classes", "FeatsTable", nClass); + + // Various naming schemes based on system + if(nClass == CLASS_TYPE_TRUENAMER) + sFile = "cls_true_known"; + // ToB + else if(nClass == CLASS_TYPE_CRUSADER || nClass == CLASS_TYPE_SWORDSAGE || nClass == CLASS_TYPE_WARBLADE) + sFile = "cls_mvkn" + GetStringRight(sFile, GetStringLength(sFile) - 8); // Hardcoded the cls_ part. It's not as if any class uses some other prefix - Ornedan, 20061210 + // Shadowcasting + else if(nClass == CLASS_TYPE_SHADOWCASTER || nClass == CLASS_TYPE_SHADOWSMITH) + sFile = "cls_mykn" + GetStringRight(sFile, GetStringLength(sFile) - 8); // Hardcoded the cls_ part. It's not as if any class uses some other prefix - Ornedan, 20061210 + // Invocations + else if(nClass == CLASS_TYPE_DRAGONFIRE_ADEPT || nClass == CLASS_TYPE_WARLOCK || nClass == CLASS_TYPE_DRAGON_SHAMAN) + sFile = "cls_invkn" + GetStringRight(sFile, GetStringLength(sFile) - 8); // Hardcoded the cls_ part. It's not as if any class uses some other prefix - Ornedan, 20061210 + // Assume psionics if no other match + else + sFile = "cls_psbk" + GetStringRight(sFile, GetStringLength(sFile) - 8); // Hardcoded the cls_ part. It's not as if any class uses some other prefix - Ornedan, 20061210 + + return sFile; +} + +string GetAMSDefinitionFileName(int nClass) +{ + // Get the class-specific base + string sFile = Get2DACache("classes", "FeatsTable", nClass); + + // Various naming schemes based on system + if(nClass == CLASS_TYPE_TRUENAMER) + sFile = "cls_true_utter"; + // ToB + else if(nClass == CLASS_TYPE_CRUSADER || nClass == CLASS_TYPE_SWORDSAGE || nClass == CLASS_TYPE_WARBLADE) + sFile = "cls_move" + GetStringRight(sFile, GetStringLength(sFile) - 8); // Hardcoded the cls_ part. It's not as if any class uses some other prefix - Ornedan, 20061210 + // Shadowcasting + else if(nClass == CLASS_TYPE_SHADOWCASTER || nClass == CLASS_TYPE_SHADOWSMITH) + sFile = "cls_myst" + GetStringRight(sFile, GetStringLength(sFile) - 8); // Hardcoded the cls_ part. It's not as if any class uses some other prefix - Ornedan, 20061210 + // Invoc + else if(nClass == CLASS_TYPE_DRAGONFIRE_ADEPT || nClass == CLASS_TYPE_WARLOCK || nClass == CLASS_TYPE_DRAGON_SHAMAN) + sFile = "cls_inv" + GetStringRight(sFile, GetStringLength(sFile) - 8); // Hardcoded the cls_ part. It's not as if any class uses some other prefix - Ornedan, 20061210 + // Assume psionics if no other match + else + sFile = "cls_psipw" + GetStringRight(sFile, GetStringLength(sFile) - 8); // Hardcoded the cls_ part. It's not as if any class uses some other prefix - Ornedan, 20061210 + + return sFile; +} + +// Test main +//void main(){} \ No newline at end of file diff --git a/src/include/inc_metalocation.nss b/src/include/inc_metalocation.nss new file mode 100644 index 0000000..15a9751 --- /dev/null +++ b/src/include/inc_metalocation.nss @@ -0,0 +1,618 @@ +//:://///////////////////////////////////////////// +//:: Metalocation include +//:: inc_metalocation +//::////////////////////////////////////////////// +/** @file + A metalocation is intended for reliable (independent + of object locations in memory) storage of location + data across module boundaries for possible eventual + re-entry to the same module. For example, to + carry location data over server resets. + + This file specifies the metalocation structure, + which contains data equivalent to a standard + location, and in addition name of the module the + metalocation resides in and, if defined, the name + of the metalocation. + The area reference is built of two strings and + two integers instead of a memory pointer. + First string specifies the tag of the area containing + the metalocation. The second string specifies the name + of the area and the integers specify it's height and + width. They are used obtain exact match in cases where + there are several areas with the same tag. + + The metalocation invariant: + All valid metalocations are such that they may be + uniquely matched to a location. + + That is, a valid metalocation is one where the area + can be identified will full certainty using the + tag, name, height and width of the area. + + + In addition, this file contains a group of functions + for abstracted handling of metalocation data. + + + @author Ornedan + @date Created - 23.05.2005 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * A dismantled version of location with some metadata attached. + * Intended for use of persistent storage of location data over + * module boundaries. For example over server resets + */ +struct metalocation{ + /// Tag of the area the location is in. + string sAreaTag; + /* + /// Resref of the area the location is in. Used to differentiate between + /// areas with the same tag. + string sAreaResRef; + */ + /// Name of the area. Used to differentiate between areas with the same tag. + string sAreaName; + /// Height of the area, in tiles. Used if tag and name are not enough to + /// uniquely identify an area. + int nAreaHeight; + /// Width of the area, in tiles. Used if tag and name are not enough to + /// uniquely identify an area. + int nAreaWidth; + /// The X coordinate of the location within the area. + float fX; + /// The Y coordinate of the location within the area. + float fY; + /// The Z coordinate of the location within the area. + float fZ; + /// The direction the location is facing. + float fFacing; + /// The metalocation may be named and the name is stored in this member. + string sName; + /// Name of the module containing the location. + string sModule; + }; + +/** + * Converts a standard location to equivalent metalocation. If area of the + * location cannot be uniquely identified using it's tag, name, height and + * width, a null metalocation is returned to preserve invariant of all + * valid metalocations being uniquely identifiable. + * + * @param locL The location to convert. + * @param sName The name of the created metalocation, if any. + * @return The metalocation created from locL. Or a null + * metalocation on failure. + */ +struct metalocation LocationToMetalocation(location locL, string sName = ""); + +/** + * Convert a metalocation to equivalent standard location. + * + * NOTE! + * If the metalocation is not in current module, the current module's starting + * location will be returned. As such, it is recommended that you run + * GetIsMetalocationInModule() on the metalocation before using this. + * + * If the metalocation is not valid, the returned location will also + * not be valid. + * + * @param mlocL The metalocation to convert. + * @return The location created from mlocL. + */ +location MetalocationToLocation(struct metalocation mlocL); + +/** + * Checks whether the given metalocation is in the module currently being run. + * + * @param mlocL The metalocation to test. + * @return TRUE if mlocL refers to a location within current module, + * FALSE otherwise. + */ +int GetIsMetalocationInModule(struct metalocation mlocL); + +/** + * Extracts an area reference from the given metalocation. If the metalocation + * is not in the current module, does not refere to a valid area, or the area + * cannot be uniquely identified, OBJECT_INVALID is returned. + * + * @param mlocL The metalocation from which to extract the area reference. + * @return An object reference to the area containing the metalocation or + * OBJECT_INVALID in case of error. + */ +object GetAreaFromMetalocation(struct metalocation mlocL); + +/** + * Stores the given metalocation on the given object. Behaves as other normal + * local variables do. + * + * @param oObject The object to store the metalocation on. + * @param sName The local variable name the metalocation will be stored as. + * @param mlocL The metalocation to store. + */ +void SetLocalMetalocation(object oObject, string sName, struct metalocation mlocL); + +/** + * Stores the given metalocation persistantly, so that it will remain in the + * character data over character exports. + * + * @param oCreature The creature to store the metalocation on. + * @param sName The local variable name the metalocation will be stored as. + * @param mlocL The metalocation to store. + * + * @see inc_persist_loca + */ +void SetPersistantLocalMetalocation(object oCreature, string sName, struct metalocation mlocL); + +/** + * Retrieves the metalocation stored on the given object under the given name. + * NOTE! If there was no metalocation stored with the given name, the returned + * value will have all it's fields contain null-equivalents. + * + * @param oObject The object the metalocation was stored on. + * @param sName The name the metalocation was stored under. + * @return A copy of the stored metalocation. + */ +struct metalocation GetLocalMetalocation(object oObject, string sName); + +/** + * Retrieves the metalocation persistantly stored on the given creature under + * the given name. + * NOTE! If there was no metalocation stored with the given name, the returned + * value will have all it's fields contain null-equivalents. + * + * @param oCreature The creature the metalocation was stored on. + * @param sName The name the metalocation was stored under. + * @return A copy of the stored metalocation. + * + * @see inc_persist_loca + */ +struct metalocation GetPersistantLocalMetalocation(object oCreature, string sName); + +/** + * Deletes the metalocation stored with the given name on the given object. + * + * @param oObject The object the metalocation was stored on. + * @param sName The name the metalocation was stored under. + */ +void DeleteLocalMetalocation(object oObject, string sName); + +/** + * Deletes the metalocation persistantly stored with the given name on + * the given creature. + * + * @param oCreature The creature the metalocation was stored on. + * @param sName The name the metalocation was stored under. + * + * @see inc_persist_loca + */ +void DeletePersistantLocalMetalocation(object oCreature, string sName); + +/** + * Creates a map pin based on the given metalocation. It will be created at the + * end of the map pin array, with name equal to the metalocation's. + * + * @param mlocL The metalocation to create a map pin from. + * @param oPC The player character in whose map pin array to create the map pin in. + */ +void CreateMapPinFromMetalocation(struct metalocation mlocL, object oPC); + +/** + * Creates a metalocation based on the given map pin. + * + * @param oPC The player character in whose map pin array to use + * @param nPinNo The position of the map pin to use + */ +struct metalocation CreateMetalocationFromMapPin(object oPC, int nPinNo); + +/** + * Creates a metalocation with all constituents having null-equivalent values. + * Used when there is a need to return an invalid metalocation. + * + * @return A metalocation that has a null-equivalent in each field. + */ +struct metalocation GetNullMetalocation(); + +/** + * Checks whether the given metalocation is valid. That is, not null and + * in the current module. + * + * @param mlocL The metalocation to test. + * @return TRUE if the metalocation is valid, FALSE otherwise. + */ +int GetIsMetalocationValid(struct metalocation mlocL); + +/** + * Gets the size of a players map pin array + * + * @param oPC The player character in whose map pin array to get the size of. + */ +int GetNumberOfMapPins(object oPC); + +/** + * Gets the area of a players specific map pin + * + * @param oPC The player character in whose map pin array to get the area of. + * @param nPinNo The number of the map pin to remove. + */ +object GetAreaOfMapPin(object oPC, int nPinNo); + +/** + * Deletes a players specific map pin + * + * @param oPC The player character in whose map pin array to get the size of. + */ +void DeleteMapPin(object oPC, int nPinNo); + +/** + * Creates a string from a metalocation that is of the following format: + * NameOfMetalocation - NameOfMetalocationArea (Xcoord, Ycoord) + * + * @param mlocL The metalocation to make a string from. + * @return The created string. + */ +string MetalocationToString(struct metalocation mlocL); + + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + +//#include "inc_utility" +#include "inc_area" // Area functions seperated from inc_itility +#include "inc_persist_loca" // changed include as these are the only other + // functions required from inc_utilities + + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +struct metalocation LocationToMetalocation(location locL, string sName = "") +{ + struct metalocation mlocL; + object oArea = GetAreaFromLocation(locL); + vector vCoords = GetPositionFromLocation(locL); + mlocL.sAreaTag = GetTag(oArea); + mlocL.sAreaName = GetName(oArea); + mlocL.nAreaHeight = GetAreaHeight(oArea); + mlocL.nAreaWidth = GetAreaWidth(oArea); + mlocL.fX = vCoords.x; + mlocL.fY = vCoords.y; + mlocL.fZ = vCoords.z; + mlocL.fFacing = GetFacingFromLocation(locL); + mlocL.sName = sName; + mlocL.sModule = GetName(GetModule()); + + // Check that the area can be uniquely identified. + if(GetAreaFromMetalocation(mlocL) == OBJECT_INVALID) + return GetNullMetalocation(); // It can't, return null. + + return mlocL; +} + +location MetalocationToLocation(struct metalocation mlocL) +{ + // Check whether the metalocation is in this module + if(!GetIsMetalocationInModule(mlocL)) + return GetStartingLocation(); // Must return a valid location, so return starting location. + + // Get the area + object oArea = GetAreaFromMetalocation(mlocL); + + // Construct and return the location + return Location(oArea, Vector(mlocL.fX, mlocL.fY, mlocL.fZ), mlocL.fFacing); +} + +int GetIsMetalocationInModule(struct metalocation mlocL) +{ + return GetName(GetModule()) == mlocL.sModule; +} + +object GetAreaFromMetalocation(struct metalocation mlocL) +{ + if(!GetIsMetalocationInModule(mlocL)) return OBJECT_INVALID; + + object oArea = GetObjectByTag(mlocL.sAreaTag, 0); + // Multiple areas with same tag? + if(GetName(oArea) != mlocL.sAreaName) + { + int i = 1; + oArea = GetObjectByTag(mlocL.sAreaTag, i); + while(GetIsObjectValid(oArea) && + GetName(oArea) != mlocL.sAreaName && + GetAreaHeight(oArea) != mlocL.nAreaHeight && + GetAreaWidth(oArea) != mlocL.nAreaWidth + ) + oArea = GetObjectByTag(mlocL.sAreaTag, ++i); + + // Make sure that if the object reference is not valid, it is OBJECT_INVALID + if(!GetIsObjectValid(oArea)) return OBJECT_INVALID; + + // We have a valid area reference. Now check that it is the only one matching the parameters. + object oAreaCheck = GetObjectByTag(mlocL.sAreaTag, ++i); + while(GetIsObjectValid(oAreaCheck)) + { + if(GetName(oAreaCheck) == mlocL.sAreaName && + GetAreaHeight(oAreaCheck) == mlocL.nAreaHeight && + GetAreaWidth(oAreaCheck) == mlocL.nAreaWidth + ) + return OBJECT_INVALID; // Found a second match, return OBJECT_INVALID to preserve invariant + } + } + + return oArea; +} + +void SetLocalMetalocation(object oObject, string sName, struct metalocation mlocL) +{ + SetLocalString(oObject, "Metalocation_" + sName + "_AreaTag", mlocL.sAreaTag); + //SetLocalString(oObject, "Metalocation_" + sName + "_AreaResRef", mlocL.sAreaResRef); + SetLocalString(oObject, "Metalocation_" + sName + "_AreaName", mlocL.sAreaName); + SetLocalInt (oObject, "Metalocation_" + sName + "_AreaHeight", mlocL.nAreaHeight); + SetLocalInt (oObject, "Metalocation_" + sName + "_AreaWidth", mlocL.nAreaWidth); + SetLocalFloat (oObject, "Metalocation_" + sName + "_X", mlocL.fX); + SetLocalFloat (oObject, "Metalocation_" + sName + "_Y", mlocL.fY); + SetLocalFloat (oObject, "Metalocation_" + sName + "_Z", mlocL.fZ); + SetLocalFloat (oObject, "Metalocation_" + sName + "_Facing", mlocL.fFacing); + SetLocalString(oObject, "Metalocation_" + sName + "_Name", mlocL.sName); + SetLocalString(oObject, "Metalocation_" + sName + "_Module", mlocL.sModule); +} + +void SetPersistantLocalMetalocation(object oCreature, string sName, struct metalocation mlocL) +{ + // Persistant operations fail on non-creatures. + if(GetObjectType(oCreature) != OBJECT_TYPE_CREATURE) return; + + SetPersistantLocalString(oCreature, "Metalocation_" + sName + "_AreaTag", mlocL.sAreaTag); + //SetPersistantLocalString(oCreature, "Metalocation_" + sName + "_AreaResRef", mlocL.sAreaResRef); + SetPersistantLocalString(oCreature, "Metalocation_" + sName + "_AreaName", mlocL.sAreaName); + SetPersistantLocalInt (oCreature, "Metalocation_" + sName + "_AreaHeight", mlocL.nAreaHeight); + SetPersistantLocalInt (oCreature, "Metalocation_" + sName + "_AreaWidth", mlocL.nAreaWidth); + SetPersistantLocalFloat (oCreature, "Metalocation_" + sName + "_X", mlocL.fX); + SetPersistantLocalFloat (oCreature, "Metalocation_" + sName + "_Y", mlocL.fY); + SetPersistantLocalFloat (oCreature, "Metalocation_" + sName + "_Z", mlocL.fZ); + SetPersistantLocalFloat (oCreature, "Metalocation_" + sName + "_Facing", mlocL.fFacing); + SetPersistantLocalString(oCreature, "Metalocation_" + sName + "_Name", mlocL.sName); + SetPersistantLocalString(oCreature, "Metalocation_" + sName + "_Module", mlocL.sModule); +} + +struct metalocation GetLocalMetalocation(object oObject, string sName) +{ + struct metalocation mlocL; + mlocL.sAreaTag = GetLocalString(oObject, "Metalocation_" + sName + "_AreaTag"); + //mlocL.sAreaResRef = GetLocalString(oObject, "Metalocation_" + sName + "_AreaResRef"); + mlocL.sAreaName = GetLocalString(oObject, "Metalocation_" + sName + "_AreaName"); + mlocL.nAreaHeight = GetLocalInt (oObject, "Metalocation_" + sName + "_AreaHeight"); + mlocL.nAreaWidth = GetLocalInt (oObject, "Metalocation_" + sName + "_AreaWidth"); + mlocL.fX = GetLocalFloat (oObject, "Metalocation_" + sName + "_X"); + mlocL.fY = GetLocalFloat (oObject, "Metalocation_" + sName + "_Y"); + mlocL.fZ = GetLocalFloat (oObject, "Metalocation_" + sName + "_Z"); + mlocL.fFacing = GetLocalFloat (oObject, "Metalocation_" + sName + "_Facing"); + mlocL.sName = GetLocalString(oObject, "Metalocation_" + sName + "_Name"); + mlocL.sModule = GetLocalString(oObject, "Metalocation_" + sName + "_Module"); + + return mlocL; +} + +struct metalocation GetPersistantLocalMetalocation(object oCreature, string sName) +{ + // Persistant operations fail on non-creatures. + if(GetObjectType(oCreature) != OBJECT_TYPE_CREATURE) return GetNullMetalocation(); + + struct metalocation mlocL; + mlocL.sAreaTag = GetPersistantLocalString(oCreature, "Metalocation_" + sName + "_AreaTag"); + //mlocL.sAreaResRef = GetPersistantLocalString(oCreature, "Metalocation_" + sName + "_AreaResRef"); + mlocL.sAreaName = GetPersistantLocalString(oCreature, "Metalocation_" + sName + "_AreaName"); + mlocL.nAreaHeight = GetPersistantLocalInt (oCreature, "Metalocation_" + sName + "_AreaHeight"); + mlocL.nAreaWidth = GetPersistantLocalInt (oCreature, "Metalocation_" + sName + "_AreaWidth"); + mlocL.fX = GetPersistantLocalFloat (oCreature, "Metalocation_" + sName + "_X"); + mlocL.fY = GetPersistantLocalFloat (oCreature, "Metalocation_" + sName + "_Y"); + mlocL.fZ = GetPersistantLocalFloat (oCreature, "Metalocation_" + sName + "_Z"); + mlocL.fFacing = GetPersistantLocalFloat (oCreature, "Metalocation_" + sName + "_Facing"); + mlocL.sName = GetPersistantLocalString(oCreature, "Metalocation_" + sName + "_Name"); + mlocL.sModule = GetPersistantLocalString(oCreature, "Metalocation_" + sName + "_Module"); + + return mlocL; +} + +void DeleteLocalMetalocation(object oObject, string sName) +{ + DeleteLocalString(oObject, "Metalocation_" + sName + "_AreaTag"); + //DeleteLocalString(oObject, "Metalocation_" + sName + "_AreaResRef"); + DeleteLocalString(oObject, "Metalocation_" + sName + "_AreaName"); + DeleteLocalInt (oObject, "Metalocation_" + sName + "_AreaHeight"); + DeleteLocalInt (oObject, "Metalocation_" + sName + "_AreaWidth"); + DeleteLocalFloat (oObject, "Metalocation_" + sName + "_X"); + DeleteLocalFloat (oObject, "Metalocation_" + sName + "_Y"); + DeleteLocalFloat (oObject, "Metalocation_" + sName + "_Z"); + DeleteLocalFloat (oObject, "Metalocation_" + sName + "_Facing"); + DeleteLocalString(oObject, "Metalocation_" + sName + "_Name"); + DeleteLocalString(oObject, "Metalocation_" + sName + "_Module"); +} + +void DeletePersistantLocalMetalocation(object oCreature, string sName) +{ + // Persistant operations fail on non-creatures. + if(GetObjectType(oCreature) != OBJECT_TYPE_CREATURE) return; + + DeletePersistantLocalString(oCreature, "Metalocation_" + sName + "_AreaTag"); + //DeletePersistantLocalString(oCreature, "Metalocation_" + sName + "_AreaResRef"); + DeletePersistantLocalString(oCreature, "Metalocation_" + sName + "_AreaName"); + DeletePersistantLocalInt (oCreature, "Metalocation_" + sName + "_AreaHeight"); + DeletePersistantLocalInt (oCreature, "Metalocation_" + sName + "_AreaWidth"); + DeletePersistantLocalFloat (oCreature, "Metalocation_" + sName + "_X"); + DeletePersistantLocalFloat (oCreature, "Metalocation_" + sName + "_Y"); + DeletePersistantLocalFloat (oCreature, "Metalocation_" + sName + "_Z"); + DeletePersistantLocalFloat (oCreature, "Metalocation_" + sName + "_Facing"); + DeletePersistantLocalString(oCreature, "Metalocation_" + sName + "_Name"); + DeletePersistantLocalString(oCreature, "Metalocation_" + sName + "_Module"); +} + + +/* +Map pin data: +Local int "NW_TOTAL_MAP_PINS" + - Number of existing map pins. + +Local string "NW_MAP_PIN_NRTY_#" + - Name of the nth map pin. + - # is string representation of the map pin's index number, base 1. + +Local float "NW_MAP_PIN_XPOS_#" + - The map pin's X coordinate in the area. + - # is string representation of the map pin's index number, base 1. + +Local float "NW_MAP_PIN_YPOS_#" + - The map pin's Y coordinate in the area. + - # is string representation of the map pin's index number, base 1. + +Local object "NW_MAP_PIN_AREA_#" + - Object reference to the area where the map pin is located. + - # is string representation of the map pin's index number, base 1. +*/ +void CreateMapPinFromMetalocation(struct metalocation mlocL, object oPC) +{ + if(!GetIsObjectValid(oPC)) + return; + //check no other map pins at that location + int nPinCount = GetNumberOfMapPins(oPC); + int i; + for(i=1;i*": "") + + (GetIsMetalocationInModule(mlocL) ? "" : (" " + GetStringByStrRef(16825269)/*" Not in module "*/)); +} + +//void main(){} // Test main diff --git a/src/include/inc_newspellbook.nss b/src/include/inc_newspellbook.nss new file mode 100644 index 0000000..a77365e --- /dev/null +++ b/src/include/inc_newspellbook.nss @@ -0,0 +1,1522 @@ + + +/* Steps for adding a new spellbook + +Prepared: +Make cls_spgn_*.2da +Make cls_spcr_*.2da +Make blank cls_spell_*.2da +Add cls_spgn_*.2da to classes.2da +Add class entry in prc_classes.2da +Add the spellbook feat (#1999) to cls_feat_*.2da at the appropriate level +Add class to PRCGetSpellSaveDC() in prc_add_spell_dc +Add class to GetSpellbookTypeForClass() below +Add class to GetAbilityScoreForClass() below +Add class to bKnowsAllClassSpells() below if necessary +Add class to GetIsArcaneClass() or GetIsDivineClass() in prc_inc_castlvl as appropriate +Add class to GetCasterLevelModifier() in prc_inc_castlvl if necessary +Add class to SetupLookupStage() in inc_lookups +Add class to GetCasterLvl() in prc_inc_spells +Add Practiced Spellcaster feat to feat.2da and to PracticedSpellcasting() in prc_inc_castlvl +Run the assemble_spellbooks.bat file +Make the prc_* scripts in newspellbook. The filenames can be found under the spell entries for the class in spells.2da. + +Spont: +Make cls_spgn_*.2da +Make cls_spkn_*.2da +Make cls_spcr_*.2da +Make blank cls_spell_*.2da +Add cls_spkn_*.2da and cls_spgn_*.2da to classes.2da +Add class entry in prc_classes.2da +Add class to PRCGetSpellSaveDC() in prc_add_spell_dc +Add class to GetSpellbookTypeForClass() below +Add class to GetAbilityScoreForClass() below +Add class to bKnowsAllClassSpells() below if necessary +Add class to GetIsArcaneClass() or GetIsDivineClass() in prc_inc_castlvl as appropriate +Add class to GetCasterLevelModifier() in prc_inc_castlvl if necessary +Add class to SetupLookupStage() in inc_lookups +Add class to GetCasterLvl() in prc_inc_spells +Add Practiced Spellcaster feat to feat.2da and to PracticedSpellcasting() in prc_inc_castlvl +Add class to prc_amagsys_gain if(CheckMissingSpells(oPC, CLASS_TYPE_SORCERER, MinimumSpellLevel, MaximumSpellLevel)) +Add class to ExecuteScript("prc_amagsys_gain", oPC) list in EvalPRCFeats in prc_inc_function +Run the assemble_spellbooks.bat file +Make the prc_* scripts in newspellbook + +prc_classes.2da entry: +Label - name for the class +Name - tlk file strref +SpellCaster - does the class cast spells? 0 = No, 1 = Yes (used for bonus spellslot item properties) +SBType - S = spontaneous, P = prepared +AL - does the class use Advanced Learning of any type? 0 = No, 1 = Yes +*/ + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +int GetSpellbookTypeForClass(int nClass); +int GetAbilityScoreForClass(int nClass, object oPC); + +/** + * Determines the given character's DC-modifying ability modifier for + * the given class' spells. Handles split-score casters. + * + * @param nClass The spellcasting class for whose spells to determine ability mod to DC for + * @param oPC The character whose abilities to examine + * @return The DC-modifying ability score's ability modifier value + */ +int GetDCAbilityModForClass(int nClass, object oPC); + +string GetFileForClass(int nClass); +int GetSpellslotLevel(int nClass, object oPC); +int GetItemBonusSlotCount(object oPC, int nClass, int nSpellLevel); +int GetSlotCount(int nLevel, int nSpellLevel, int nAbilityScore, int nClass, object oItemPosessor = OBJECT_INVALID); +int bKnowsAllClassSpells(int nClass); +int GetSpellKnownMaxCount(int nLevel, int nSpellLevel, int nClass, object oPC); +int GetSpellKnownCurrentCount(object oPC, int nSpellLevel, int nClass); +int GetSpellUnknownCurrentCount(object oPC, int nSpellLevel, int nClass); +void AddSpellUse(object oPC, int nSpellbookID, int nClass, string sFile, string sArrayName, int nSpellbookType, object oSkin, int nFeatID, int nIPFeatID, string sIDX = ""); +void RemoveSpellUse(object oPC, int nSpellID, int nClass); +// int GetSpellUses(object oPC, int nSpellID, int nClass); +int GetSpellLevel(int nSpellID, int nClass); +void SetupSpells(object oPC, int nClass); +void CheckAndRemoveFeat(object oHide, itemproperty ipFeat); +void WipeSpellbookHideFeats(object oPC); +void CheckNewSpellbooks(object oPC); +void NewSpellbookSpell(int nClass, int nSpellbookType, int nMetamagic = METAMAGIC_NONE, int bInstantSpell = FALSE); +void CastSpontaneousSpell(int nClass, int bInstantSpell = FALSE); +void CastPreparedSpell(int nClass, int nMetamagic = METAMAGIC_NONE, int bInstantSpell = FALSE); +void ProcessPreparedSpellLevel(object oPC, int nClass, int nSpellLevel, int nLevel, int nAbility, string sClass, string sFile, string sArrayName, int nSpellbookType, object oSkin); + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +/* stored in "prc_inc_sb_const" + Accessed via "prc_inc_core" */ + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +// ** THIS ORDER IS IMPORTANT ** + +//#include "prc_effect_inc" //access via prc_inc_core +//#include "inc_lookups" //access via prc_inc_core +#include "prc_inc_core" +#include "inc_sp_gain_mem" //providing child access to prc_inc_core + //Must load in this order. +//#include "prc_inc_castlvl" //access via prc_inc_core +//#include "prc_inc_descrptr" //access via prc_inc_core + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int GetSpellbookTypeForClass(int nClass) +{ + switch(nClass) + { + case CLASS_TYPE_ARCHIVIST: + case CLASS_TYPE_ASSASSIN: + case CLASS_TYPE_BLACKGUARD: + case CLASS_TYPE_BLIGHTER: + case CLASS_TYPE_CLERIC: + case CLASS_TYPE_CULTIST_SHATTERED_PEAK: + case CLASS_TYPE_DRUID: + case CLASS_TYPE_HEALER: + case CLASS_TYPE_KNIGHT_CHALICE: + case CLASS_TYPE_KNIGHT_MIDDLECIRCLE: + case CLASS_TYPE_NENTYAR_HUNTER: + case CLASS_TYPE_OCULAR: + case CLASS_TYPE_PALADIN: + case CLASS_TYPE_RANGER: + case CLASS_TYPE_SHADOWLORD: + case CLASS_TYPE_SHAMAN: + case CLASS_TYPE_SLAYER_OF_DOMIEL: + case CLASS_TYPE_SOHEI: + case CLASS_TYPE_SOLDIER_OF_LIGHT: + case CLASS_TYPE_UR_PRIEST: + case CLASS_TYPE_VASSAL: + case CLASS_TYPE_VIGILANT: + case CLASS_TYPE_WIZARD: + return SPELLBOOK_TYPE_PREPARED; + case CLASS_TYPE_BARD: + case CLASS_TYPE_BEGUILER: + case CLASS_TYPE_CELEBRANT_SHARESS: + case CLASS_TYPE_DREAD_NECROMANCER: + case CLASS_TYPE_DUSKBLADE: + case CLASS_TYPE_FAVOURED_SOUL: + case CLASS_TYPE_HARPER: + case CLASS_TYPE_HEXBLADE: + case CLASS_TYPE_JUSTICEWW: + case CLASS_TYPE_KNIGHT_WEAVE: + case CLASS_TYPE_SORCERER: + case CLASS_TYPE_SUBLIME_CHORD: + case CLASS_TYPE_SUEL_ARCHANAMACH: + case CLASS_TYPE_WARMAGE: + return SPELLBOOK_TYPE_SPONTANEOUS; + // shapechanger HD count as sorcerer for aranea. + case CLASS_TYPE_SHAPECHANGER: + return SPELLBOOK_TYPE_SPONTANEOUS; + // Multiple races + case CLASS_TYPE_MONSTROUS: + return SPELLBOOK_TYPE_SPONTANEOUS; + // Gloura as Bard + case CLASS_TYPE_FEY: + return SPELLBOOK_TYPE_SPONTANEOUS; + // Drider as Sorc + case CLASS_TYPE_ABERRATION: + return SPELLBOOK_TYPE_SPONTANEOUS; + //outsider HD count as sorc for raks + case CLASS_TYPE_OUTSIDER: { + /// @todo Will eventually need to add a check here to differentiate between races. Not all are sorcerers, just most + return SPELLBOOK_TYPE_SPONTANEOUS; + } + } + return SPELLBOOK_TYPE_INVALID; +} + +int GetAbilityScoreForClass(int nClass, object oPC) +{ + switch(nClass) + { + case CLASS_TYPE_BLACKGUARD: + case CLASS_TYPE_BLIGHTER: + case CLASS_TYPE_CLERIC: + case CLASS_TYPE_DRUID: + case CLASS_TYPE_FIST_OF_ZUOKEN: + case CLASS_TYPE_HEALER: + case CLASS_TYPE_JUSTICEWW: + case CLASS_TYPE_KNIGHT_CHALICE: + case CLASS_TYPE_KNIGHT_MIDDLECIRCLE: + case CLASS_TYPE_NENTYAR_HUNTER: + case CLASS_TYPE_OCULAR: + case CLASS_TYPE_PALADIN: + case CLASS_TYPE_PSYWAR: + case CLASS_TYPE_RANGER: + case CLASS_TYPE_SHAMAN: + case CLASS_TYPE_SLAYER_OF_DOMIEL: + case CLASS_TYPE_SOHEI: + case CLASS_TYPE_SOLDIER_OF_LIGHT: + case CLASS_TYPE_UR_PRIEST: + case CLASS_TYPE_VASSAL: + case CLASS_TYPE_VIGILANT: + case CLASS_TYPE_WARMIND: + return GetAbilityScore(oPC, ABILITY_WISDOM); + case CLASS_TYPE_ARCHIVIST: + case CLASS_TYPE_ASSASSIN: + case CLASS_TYPE_BEGUILER: + case CLASS_TYPE_CULTIST_SHATTERED_PEAK: + case CLASS_TYPE_DUSKBLADE: + case CLASS_TYPE_PSION: + case CLASS_TYPE_PSYCHIC_ROGUE: + case CLASS_TYPE_SHADOWCASTER: + case CLASS_TYPE_SHADOWLORD: + case CLASS_TYPE_WIZARD: + return GetAbilityScore(oPC, ABILITY_INTELLIGENCE); + case CLASS_TYPE_BARD: + case CLASS_TYPE_CELEBRANT_SHARESS: + case CLASS_TYPE_DREAD_NECROMANCER: + case CLASS_TYPE_FAVOURED_SOUL: + case CLASS_TYPE_HARPER: + case CLASS_TYPE_HEXBLADE: + case CLASS_TYPE_KNIGHT_WEAVE: + case CLASS_TYPE_SORCERER: + case CLASS_TYPE_SUBLIME_CHORD: + case CLASS_TYPE_SUEL_ARCHANAMACH: + case CLASS_TYPE_WARMAGE: + case CLASS_TYPE_WILDER: + return GetAbilityScore(oPC, ABILITY_CHARISMA); + //shapeshifter HD count as sorc for aranea + case CLASS_TYPE_SHAPECHANGER: + return GetAbilityScore(oPC, ABILITY_CHARISMA); + // Multiple races + case CLASS_TYPE_MONSTROUS: + return GetAbilityScore(oPC, ABILITY_CHARISMA); + // Gloura as Bard + case CLASS_TYPE_FEY: + return GetAbilityScore(oPC, ABILITY_CHARISMA); + // Drider as Sorc + case CLASS_TYPE_ABERRATION: + return GetAbilityScore(oPC, ABILITY_CHARISMA); + //outsider HD count as sorc for raks + case CLASS_TYPE_OUTSIDER: { + /// @todo Will eventually need to add a check here to differentiate between races. Not all are sorcerers, just most + return GetAbilityScore(oPC, ABILITY_CHARISMA); + } + } + return GetAbilityScore(oPC, ABILITY_CHARISMA); //default for SLAs? +} + +int GetDCAbilityModForClass(int nClass, object oPC) +{ + switch(nClass) + { + case CLASS_TYPE_BLACKGUARD: + case CLASS_TYPE_BLIGHTER: + case CLASS_TYPE_CLERIC: + case CLASS_TYPE_DRUID: + case CLASS_TYPE_FAVOURED_SOUL: + case CLASS_TYPE_FIST_OF_ZUOKEN: + case CLASS_TYPE_JUSTICEWW: + case CLASS_TYPE_KNIGHT_CHALICE: + case CLASS_TYPE_KNIGHT_MIDDLECIRCLE: + case CLASS_TYPE_OCULAR: + case CLASS_TYPE_NENTYAR_HUNTER: + case CLASS_TYPE_PALADIN: + case CLASS_TYPE_PSYWAR: + case CLASS_TYPE_RANGER: + case CLASS_TYPE_SHAMAN: + case CLASS_TYPE_SLAYER_OF_DOMIEL: + case CLASS_TYPE_SOHEI: + case CLASS_TYPE_SOLDIER_OF_LIGHT: + case CLASS_TYPE_UR_PRIEST: + case CLASS_TYPE_VASSAL: + case CLASS_TYPE_VIGILANT: + case CLASS_TYPE_WARMIND: + return GetAbilityModifier(ABILITY_WISDOM, oPC); + case CLASS_TYPE_ARCHIVIST: + case CLASS_TYPE_ASSASSIN: + case CLASS_TYPE_BEGUILER: + case CLASS_TYPE_CULTIST_SHATTERED_PEAK: + case CLASS_TYPE_DUSKBLADE: + case CLASS_TYPE_PSION: + case CLASS_TYPE_PSYCHIC_ROGUE: + case CLASS_TYPE_SHADOWLORD: + case CLASS_TYPE_WIZARD: + return GetAbilityModifier(ABILITY_INTELLIGENCE, oPC); + case CLASS_TYPE_BARD: + case CLASS_TYPE_CELEBRANT_SHARESS: + case CLASS_TYPE_DREAD_NECROMANCER: + case CLASS_TYPE_HARPER: + case CLASS_TYPE_HEALER: + case CLASS_TYPE_HEXBLADE: + case CLASS_TYPE_SHADOWCASTER: + case CLASS_TYPE_SORCERER: + case CLASS_TYPE_SUBLIME_CHORD: + case CLASS_TYPE_SUEL_ARCHANAMACH: + case CLASS_TYPE_WARMAGE: + case CLASS_TYPE_WILDER: + return GetAbilityModifier(ABILITY_CHARISMA, oPC); + //shapechanger HD count as sorc for aranea + case CLASS_TYPE_SHAPECHANGER: + return GetAbilityScore(oPC, ABILITY_CHARISMA); + // Multiple races + case CLASS_TYPE_MONSTROUS: + return GetAbilityScore(oPC, ABILITY_CHARISMA); + // Gloura as Bard + case CLASS_TYPE_FEY: + return GetAbilityScore(oPC, ABILITY_CHARISMA); + // Drider as Sorc + case CLASS_TYPE_ABERRATION: + return GetAbilityScore(oPC, ABILITY_CHARISMA); + //outsider HD count as sorc for raks + case CLASS_TYPE_OUTSIDER: { + // @todo Will eventually need to add a check here to differentiate between races. Not all are sorcerers, just most + return GetAbilityModifier(ABILITY_CHARISMA, oPC); + } + } + return GetAbilityModifier(ABILITY_CHARISMA, oPC); //default for SLAs? +} + +string GetFileForClass(int nClass) +{ + string sFile = Get2DACache("classes", "FeatsTable", nClass); + sFile = "cls_spell" + GetStringRight(sFile, GetStringLength(sFile) - 8); // Hardcoded the cls_ part. It's not as if any class uses some other prefix - Ornedan, 20061231 + //if(DEBUG) DoDebug("GetFileForClass(" + IntToString(nClass) + ") = " + sFile); + return sFile; +} + +int GetSpellslotLevel(int nClass, object oPC) +{ + int nBaseLevel = GetLevelByClass(nClass, oPC); + + // Custom racial casting + int nRacialLevel = 0; + int nRace = GetRacialType(oPC); + + if (nClass == CLASS_TYPE_SORCERER) + { + if(nRace == RACIAL_TYPE_RAKSHASA) + nRacialLevel = GetLevelByClass(CLASS_TYPE_OUTSIDER, oPC); + else if(nRace == RACIAL_TYPE_ARKAMOI) + nRacialLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC); + else if(nRace == RACIAL_TYPE_DRIDER) + nRacialLevel = GetLevelByClass(CLASS_TYPE_ABERRATION, oPC); + else if(nRace == RACIAL_TYPE_REDSPAWN_ARCANISS) + nRacialLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC) * 3 / 4; + else if(nRace == RACIAL_TYPE_MARRUTACT) + nRacialLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC) * 6 / 7; + else if(nRace == RACIAL_TYPE_HOBGOBLIN_WARSOUL) + nRacialLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC); + else if(nRace == RACIAL_TYPE_ARANEA) + nRacialLevel = GetLevelByClass(CLASS_TYPE_SHAPECHANGER, oPC); + } + else if (nClass == CLASS_TYPE_BARD && nRace == RACIAL_TYPE_GLOURA) + { + nRacialLevel = GetLevelByClass(CLASS_TYPE_FEY, oPC); + } + + // Add base and racial class levels + int nLevel = nBaseLevel + nRacialLevel; + + // Spellcasting PRC progression + int nArcSpellslotLevel = 0; + int nDivSpellslotLevel = 0; + int i; + for(i = 1; i <= 8; i++) + { + int nTempClass = GetClassByPosition(i, oPC); + int nArcSpellMod = StringToInt(Get2DACache("classes", "ArcSpellLvlMod", nTempClass)); + int nDivSpellMod = StringToInt(Get2DACache("classes", "DivSpellLvlMod", nTempClass)); + + if(nArcSpellMod > 0) + nArcSpellslotLevel += (GetLevelByClass(nTempClass, oPC) + (nArcSpellMod - 1)) / nArcSpellMod; + + if(nDivSpellMod > 0) + nDivSpellslotLevel += (GetLevelByClass(nTempClass, oPC) + (nDivSpellMod - 1)) / nDivSpellMod; + } + + // Add PRC spellcasting progression + if(GetPrimaryArcaneClass(oPC) == nClass) + nLevel += nArcSpellslotLevel; + if(GetPrimaryDivineClass(oPC) == nClass) + nLevel += nDivSpellslotLevel; + + // Ultimate Magus override (only include Sorcerer + UM) + if (nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oPC)) + { + nLevel = GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oPC) + GetLevelByClass(CLASS_TYPE_SORCERER, oPC); + } + + if(DEBUG) DoDebug("GetSpellslotLevel(" + IntToString(nClass) + ", " + GetName(oPC) + ") = " + IntToString(nLevel)); + return nLevel; +} + +/* int GetSpellslotLevel(int nClass, object oPC) +{ + int nLevel = GetLevelByClass(nClass, oPC); + +//:: Rakshasa cast as sorcerers + if(nClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_RAKSHASA) + nLevel = GetLevelByClass(CLASS_TYPE_OUTSIDER, oPC); + + if(nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_RAKSHASA) + nLevel = GetLevelByClass(CLASS_TYPE_OUTSIDER, oPC) + GetLevelByClass(CLASS_TYPE_SORCERER, oPC); + +//:: Arkamoi cast as sorcerers + else if(nClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_ARKAMOI) + nLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC); + + if(nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_ARKAMOI) + nLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC) + GetLevelByClass(CLASS_TYPE_SORCERER, oPC); + +//:: Driders cast as sorcerers + else if(nClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_DRIDER) + nLevel = GetLevelByClass(CLASS_TYPE_ABERRATION, oPC); + + if(nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_DRIDER) + nLevel = GetLevelByClass(CLASS_TYPE_ABERRATION, oPC) + GetLevelByClass(CLASS_TYPE_SORCERER, oPC); + +//:: Redspawn Arcaniss cast as 3/4 sorcerers + else if(nClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_REDSPAWN_ARCANISS) + nLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC)*3/4; + + else if(nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_REDSPAWN_ARCANISS) + nLevel = GetLevelByClass(CLASS_TYPE_SORCERER, oPC) + (GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC)*3/4); + +//:: Marrutact cast as 6/7 sorcerers + else if(nClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_MARRUTACT) + nLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC)*6/7; + + else if(nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_MARRUTACT) + nLevel = GetLevelByClass(CLASS_TYPE_SORCERER, oPC) + (GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC)*6/7); + +//:: Hobgoblin Warsouls cast as sorcerers + else if(nClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_HOBGOBLIN_WARSOUL) + nLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC); + + else if(nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_HOBGOBLIN_WARSOUL) + nLevel = GetLevelByClass(CLASS_TYPE_SORCERER, oPC) + GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC); + +//:: Aranea cast as sorcerers + else if(nClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_ARANEA) + nLevel = GetLevelByClass(CLASS_TYPE_SHAPECHANGER, oPC); + + else if(nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_ARANEA) + nLevel = GetLevelByClass(CLASS_TYPE_SHAPECHANGER, oPC) + GetLevelByClass(CLASS_TYPE_SORCERER, oPC); + +//:: Gloura cast as bards + else if(nClass == CLASS_TYPE_BARD && !GetLevelByClass(CLASS_TYPE_BARD, oPC) && GetRacialType(oPC) == RACIAL_TYPE_GLOURA) + nLevel = GetLevelByClass(CLASS_TYPE_FEY, oPC); + + else if(nClass == CLASS_TYPE_BARD && GetLevelByClass(CLASS_TYPE_BARD, oPC) && GetRacialType(oPC) == RACIAL_TYPE_GLOURA) + { + nLevel = GetLevelByClass(CLASS_TYPE_FEY, oPC) + GetLevelByClass(CLASS_TYPE_BARD, oPC); + } + + int nArcSpellslotLevel; + int nDivSpellslotLevel; + int i; + for(i = 1; i <= 8; i++) + { + int nTempClass = GetClassByPosition(i, oPC); + //spellcasting prc + int nArcSpellMod = StringToInt(Get2DACache("classes", "ArcSpellLvlMod", nTempClass)); + int nDivSpellMod = StringToInt(Get2DACache("classes", "DivSpellLvlMod", nTempClass)); + //special case for combat medic class + //if(nTempClass == CLASS_TYPE_COMBAT_MEDIC && (nClass == CLASS_TYPE_BARD || nClass == CLASS_TYPE_WITCH)) + // nArcSpellMod = 1; + + if(nArcSpellMod == 1) + nArcSpellslotLevel += GetLevelByClass(nTempClass, oPC); + else if(nArcSpellMod > 1) + nArcSpellslotLevel += (GetLevelByClass(nTempClass, oPC) + 1) / nArcSpellMod; + if(nDivSpellMod == 1) + nDivSpellslotLevel += GetLevelByClass(nTempClass, oPC); + else if(nDivSpellMod > 1) + nDivSpellslotLevel += (GetLevelByClass(nTempClass, oPC) + 1) / nDivSpellMod; + } + + if(GetPrimaryArcaneClass(oPC) == nClass) + nLevel += nArcSpellslotLevel; + if(GetPrimaryDivineClass(oPC) == nClass) + nLevel += nDivSpellslotLevel; + + // For this special instance, we know that this is the only prestige class + if (nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oPC)) + nLevel = GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oPC) + GetLevelByClass(CLASS_TYPE_SORCERER, oPC); + + if(DEBUG) DoDebug("GetSpellslotLevel(" + IntToString(nClass) + ", " + GetName(oPC) + ") = " + IntToString(nLevel)); + return nLevel; +} + */ + +int GetItemBonusSlotCount(object oPC, int nClass, int nSpellLevel) +{ + // Value maintained by CheckPRCLimitations() + return GetLocalInt(oPC, "PRC_IPRPBonSpellSlots_" + IntToString(nClass) + "_" + IntToString(nSpellLevel)); +} + +int GetSlotCount(int nLevel, int nSpellLevel, int nAbilityScore, int nClass, object oItemPosessor = OBJECT_INVALID) +{ + // Ability score limit rule: Must have casting ability score of at least 10 + spel level to be able to cast spells of that level at all + if(nAbilityScore < nSpellLevel + 10) + return 0; + int nSlots; + string sFile; + /*// Bioware casters use their classes.2da-specified tables + if( nClass == CLASS_TYPE_WIZARD + || nClass == CLASS_TYPE_SORCERER + || nClass == CLASS_TYPE_BARD + || nClass == CLASS_TYPE_CLERIC + || nClass == CLASS_TYPE_DRUID + || nClass == CLASS_TYPE_PALADIN + || nClass == CLASS_TYPE_RANGER) + {*/ + sFile = Get2DACache("classes", "SpellGainTable", nClass); + /*} + // New spellbook casters use the cls_spbk_* tables + else + { + sFile = Get2DACache("classes", "FeatsTable", nClass); + sFile = "cls_spbk" + GetStringRight(sFile, GetStringLength(sFile) - 8); // Hardcoded the cls_ part. It's not as if any class uses some other prefix - Ornedan, 20061231 + }*/ + + string sSlots = Get2DACache(sFile, "SpellLevel" + IntToString(nSpellLevel), nLevel - 1); + if(sSlots == "") + { + nSlots = -1; + //if(DEBUG) DoDebug("GetSlotCount: Problem getting slot numbers for " + IntToString(nSpellLevel) + " " + IntToString(nLevel) + " " + sFile); + } + else + nSlots = StringToInt(sSlots); + if(nSlots == -1) + return 0; + + // Add spell slots from items + if(GetIsObjectValid(oItemPosessor)) + nSlots += GetItemBonusSlotCount(oItemPosessor, nClass, nSpellLevel); + + // Add spell slots from high ability score. Level 0 spells are exempt + if(nSpellLevel == 0) + return nSlots; + else + { + int nAbilityMod = nClass == CLASS_TYPE_ARCHIVIST ? GetAbilityModifier(ABILITY_WISDOM, oItemPosessor) : (nAbilityScore - 10) / 2; + if(nAbilityMod >= nSpellLevel) // Need an ability modifier at least equal to the spell level to gain bonus slots + nSlots += ((nAbilityMod - nSpellLevel) / 4) + 1; + return nSlots; + } +} + +//if the class doesn't learn all available spells on level-up add it here +int bKnowsAllClassSpells(int nClass) +{ + switch(nClass) + { + //case CLASS_TYPE_WIZARD: + case CLASS_TYPE_ARCHIVIST: + case CLASS_TYPE_ASSASSIN: + case CLASS_TYPE_BARD: + case CLASS_TYPE_CELEBRANT_SHARESS: + case CLASS_TYPE_CULTIST_SHATTERED_PEAK: + case CLASS_TYPE_DUSKBLADE: + case CLASS_TYPE_FAVOURED_SOUL: + case CLASS_TYPE_HEXBLADE: + case CLASS_TYPE_JUSTICEWW: + case CLASS_TYPE_KNIGHT_WEAVE: + case CLASS_TYPE_SORCERER: + case CLASS_TYPE_SUBLIME_CHORD: + case CLASS_TYPE_SUEL_ARCHANAMACH: + return FALSE; + + // Everyone else + default: + return TRUE; + } + return TRUE; +} + +int GetSpellKnownMaxCount(int nLevel, int nSpellLevel, int nClass, object oPC) +{ + // If the character doesn't have any spell slots available on for this level, it can't know any spells of that level either + // @todo Check rules. There might be cases where this doesn't hold + if(!GetSlotCount(nLevel, nSpellLevel, GetAbilityScoreForClass(nClass, oPC), nClass)) + return 0; + int nKnown; + string sFile; + // Bioware casters use their classes.2da-specified tables + /*if( nClass == CLASS_TYPE_WIZARD + || nClass == CLASS_TYPE_SORCERER + || nClass == CLASS_TYPE_BARD + || nClass == CLASS_TYPE_CLERIC + || nClass == CLASS_TYPE_DRUID + || nClass == CLASS_TYPE_PALADIN + || nClass == CLASS_TYPE_RANGER) + {*/ + sFile = Get2DACache("classes", "SpellKnownTable", nClass); + /*} + else + { + sFile = Get2DACache("classes", "FeatsTable", nClass); + sFile = "cls_spkn" + GetStringRight(sFile, GetStringLength(sFile) - 8); // Hardcoded the cls_ part. It's not as if any class uses some other prefix - Ornedan, 20061231 + }*/ + + string sKnown = Get2DACache(sFile, "SpellLevel" + IntToString(nSpellLevel), nLevel - 1); + if(DEBUG) DoDebug("GetSpellKnownMaxCount(" + IntToString(nLevel) + ", " + IntToString(nSpellLevel) + ", " + IntToString(nClass) + ", " + GetName(oPC) + ") = " + sKnown); + if(sKnown == "") + { + nKnown = -1; + //if(DEBUG) DoDebug("GetSpellKnownMaxCount: Problem getting known numbers for " + IntToString(nSpellLevel) + " " + IntToString(nLevel) + " " + sFile); + } + else + nKnown = StringToInt(sKnown); + if(nKnown == -1) + return 0; + + // Bard and Sorcerer only have new spellbook spells known if they have taken prestige classes that increase spellcasting + if(nClass == CLASS_TYPE_SORCERER || nClass == CLASS_TYPE_BARD) + { + if((GetLevelByClass(nClass) == nLevel) //no PrC + && !(GetHasFeat(FEAT_DRACONIC_GRACE, oPC) || GetHasFeat(FEAT_DRACONIC_BREATH, oPC))) //no Draconic feats that apply + return 0; + } + return nKnown; +} + +int GetSpellKnownCurrentCount(object oPC, int nSpellLevel, int nClass) +{ + // Check short-term cache + string sClassNum = IntToString(nClass); + if(GetLocalInt(oPC, "GetSKCCCache_" + IntToString(nSpellLevel) + "_" + sClassNum)) + return GetLocalInt(oPC, "GetSKCCCache_" + IntToString(nSpellLevel) + "_" + sClassNum) - 1; + + // Loop over all spells known and count the number of spells of each level known + int i; + int nKnown; + int nKnown0, nKnown1, nKnown2, nKnown3, nKnown4; + int nKnown5, nKnown6, nKnown7, nKnown8, nKnown9; + string sFile = GetFileForClass(nClass); + for(i = 0; i < persistant_array_get_size(oPC, "Spellbook" + sClassNum); i++) + { + int nNewSpellbookID = persistant_array_get_int(oPC, "Spellbook" + sClassNum, i); + int nLevel = StringToInt(Get2DACache(sFile, "Level", nNewSpellbookID)); + switch(nLevel) + { + case 0: nKnown0++; break; case 1: nKnown1++; break; + case 2: nKnown2++; break; case 3: nKnown3++; break; + case 4: nKnown4++; break; case 5: nKnown5++; break; + case 6: nKnown6++; break; case 7: nKnown7++; break; + case 8: nKnown8++; break; case 9: nKnown9++; break; + } + } + + // Pick the level requested for returning + switch(nSpellLevel) + { + case 0: nKnown = nKnown0; break; case 1: nKnown = nKnown1; break; + case 2: nKnown = nKnown2; break; case 3: nKnown = nKnown3; break; + case 4: nKnown = nKnown4; break; case 5: nKnown = nKnown5; break; + case 6: nKnown = nKnown6; break; case 7: nKnown = nKnown7; break; + case 8: nKnown = nKnown8; break; case 9: nKnown = nKnown9; break; + } + if(DEBUG) DoDebug("GetSpellKnownCurrentCount(" + GetName(oPC) + ", " + IntToString(nSpellLevel) + ", " + sClassNum + ") = " + IntToString(nKnown)); + if(DEBUG) DoDebug("GetSpellKnownCurrentCount(i " + IntToString(i) + ", nKnown0 " + IntToString(nKnown0) + ", nKnown1 " + IntToString(nKnown1) + ", nKnown2 " + IntToString(nKnown2) + ", nKnown3 " + IntToString(nKnown3) + ", nKnown4 " + IntToString(nKnown4) + ", nKnown5 " + IntToString(nKnown5) + ", nKnown6 " + IntToString(nKnown6) + ", nKnown7 " + IntToString(nKnown7) + ", nKnown8 " + IntToString(nKnown8) + ", nKnown9 " + IntToString(nKnown9)); + if(DEBUG) DoDebug("GetSpellKnownCurrentCount(persistant_array_get_size "+IntToString(persistant_array_get_size(oPC, "Spellbook" + sClassNum))); + + // Cache the values for 1 second + SetLocalInt(oPC, "GetSKCCCache_0_" + sClassNum, nKnown0 + 1); + SetLocalInt(oPC, "GetSKCCCache_1_" + sClassNum, nKnown1 + 1); + SetLocalInt(oPC, "GetSKCCCache_2_" + sClassNum, nKnown2 + 1); + SetLocalInt(oPC, "GetSKCCCache_3_" + sClassNum, nKnown3 + 1); + SetLocalInt(oPC, "GetSKCCCache_4_" + sClassNum, nKnown4 + 1); + SetLocalInt(oPC, "GetSKCCCache_5_" + sClassNum, nKnown5 + 1); + SetLocalInt(oPC, "GetSKCCCache_6_" + sClassNum, nKnown6 + 1); + SetLocalInt(oPC, "GetSKCCCache_7_" + sClassNum, nKnown7 + 1); + SetLocalInt(oPC, "GetSKCCCache_8_" + sClassNum, nKnown8 + 1); + SetLocalInt(oPC, "GetSKCCCache_9_" + sClassNum, nKnown9 + 1); + DelayCommand(1.0, DeleteLocalInt(oPC, "GetSKCCCache_0_" + sClassNum)); + DelayCommand(1.0, DeleteLocalInt(oPC, "GetSKCCCache_1_" + sClassNum)); + DelayCommand(1.0, DeleteLocalInt(oPC, "GetSKCCCache_2_" + sClassNum)); + DelayCommand(1.0, DeleteLocalInt(oPC, "GetSKCCCache_3_" + sClassNum)); + DelayCommand(1.0, DeleteLocalInt(oPC, "GetSKCCCache_4_" + sClassNum)); + DelayCommand(1.0, DeleteLocalInt(oPC, "GetSKCCCache_5_" + sClassNum)); + DelayCommand(1.0, DeleteLocalInt(oPC, "GetSKCCCache_6_" + sClassNum)); + DelayCommand(1.0, DeleteLocalInt(oPC, "GetSKCCCache_7_" + sClassNum)); + DelayCommand(1.0, DeleteLocalInt(oPC, "GetSKCCCache_8_" + sClassNum)); + DelayCommand(1.0, DeleteLocalInt(oPC, "GetSKCCCache_9_" + sClassNum)); + + return nKnown; +} + +int GetSpellUnknownCurrentCount(object oPC, int nSpellLevel, int nClass) +{ + // Get the lookup token created by MakeSpellbookLevelLoop() + string sTag = "SpellLvl_" + IntToString(nClass) + "_Level_" + IntToString(nSpellLevel); + object oCache = GetObjectByTag(sTag); + if(!GetIsObjectValid(oCache)) + { + if(DEBUG) DoDebug("GetSpellUnknownCurrentCount: " + sTag + " is not valid"); + return 0; + } + // Read the total number of spells on the given level and determine how many are already known + int nTotal = array_get_size(oCache, "Lkup"); + int nKnown = GetSpellKnownCurrentCount(oPC, nSpellLevel, nClass); + int nUnknown = nTotal - nKnown; + + if(DEBUG) DoDebug("GetSpellUnknownCurrentCount(" + GetName(oPC) + ", " + IntToString(nSpellLevel) + ", " + IntToString(nClass) + ") = " + IntToString(nUnknown)); + return nUnknown; +} + +void AddSpellUse(object oPC, int nSpellbookID, int nClass, string sFile, string sArrayName, int nSpellbookType, object oSkin, int nFeatID, int nIPFeatID, string sIDX = "") +{ + /* + string sFile = GetFileForClass(nClass); + string sArrayName = "NewSpellbookMem_"+IntToString(nClass); + int nSpellbookType = GetSpellbookTypeForClass(nClass); + object oSkin = GetPCSkin(oPC); + int nFeatID = StringToInt(Get2DACache(sFile, "FeatID", nSpellbookID)); + //add the feat only if they dont already have it + int nIPFeatID = StringToInt(Get2DACache(sFile, "IPFeatID", nSpellbookID)); + */ + object oToken = GetHideToken(oPC); + + // Add the spell use feats and set a marker local that tells for CheckAndRemoveFeat() to skip removing this feat + string sIPFeatID = IntToString(nIPFeatID); + SetLocalInt(oSkin, "NewSpellbookTemp_" + sIPFeatID, TRUE); + AddSkinFeat(nFeatID, nIPFeatID, oSkin, oPC); + + // Increase the current number of uses + if(nSpellbookType == SPELLBOOK_TYPE_PREPARED) + { + //sanity test + if(!persistant_array_exists(oPC, sArrayName)) + { + if(DEBUG) DoDebug("ERROR: AddSpellUse: " + sArrayName + " array does not exist, creating"); + persistant_array_create(oPC, sArrayName); + } + + int nUses = persistant_array_get_int(oPC, sArrayName, nSpellbookID); + nUses++; + persistant_array_set_int(oPC, sArrayName, nSpellbookID, nUses); + if(DEBUG) DoDebug("AddSpellUse: " + sArrayName + "[" + IntToString(nSpellbookID) + "] = " + IntToString(array_get_int(oPC, sArrayName, nSpellbookID))); + + //Create index array - to avoid duplicates mark only 1st use of nSpellbookID + if(nUses == 1) + { + if(!persistant_array_exists(oPC, sIDX)) + persistant_array_create(oPC, sIDX); + + persistant_array_set_int(oPC, sIDX, array_get_size(oPC, sIDX), nSpellbookID); + } + } + else if(nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS) + { + //sanity test + if(!persistant_array_exists(oPC, sArrayName)) + { + if(DEBUG) DoDebug("ERROR: AddSpellUse: " + sArrayName + " array does not exist, creating"); + persistant_array_create(oPC, sArrayName); + } + /*int nSpellLevel = StringToInt(Get2DACache(sFile, "Level", nSpellbookID)); + int nCount = persistant_array_get_int(oPC, sArrayName, nSpellLevel); + if(nCount < 1) + { + int nLevel = GetSpellslotLevel(nClass, oPC); + int nAbility = GetAbilityScoreForClass(nClass, oPC); + nCount = GetSlotCount(nLevel, nSpellLevel, nAbility, nClass, oPC); + array_set_int(oPC, sArrayName, nSpellLevel, nCount); + }*/ + if(DEBUG) DoDebug("AddSpellUse() called on spontaneous spellbook. nIPFeatID = " + sIPFeatID); + } +} + +void RemoveSpellUse(object oPC, int nSpellID, int nClass) +{ + string sFile = GetFileForClass(nClass); + int nSpellbookID = SpellToSpellbookID(nSpellID); + if(nSpellbookID == -1) + { + if(DEBUG) DoDebug("ERROR: RemoveSpellUse: Unable to resolve spell to spellbookID: " + IntToString(nSpellID) + " in file " + sFile); + return; + } + if(!persistant_array_exists(oPC, "NewSpellbookMem_"+IntToString(nClass))) + { + if(DEBUG) DoDebug("RemoveSpellUse: NewSpellbookMem_" + IntToString(nClass) + " does not exist, creating."); + persistant_array_create(oPC, "NewSpellbookMem_"+IntToString(nClass)); + } + + // Reduce the remaining uses of the given spell by 1 (except never reduce uses below 0). + // Spontaneous spellbooks reduce the number of spells of the spell's level remaining + int nSpellbookType = GetSpellbookTypeForClass(nClass); + if(nSpellbookType == SPELLBOOK_TYPE_PREPARED) + { + int nCount = persistant_array_get_int(oPC, "NewSpellbookMem_" + IntToString(nClass), nSpellbookID); + if(nCount > 0) + persistant_array_set_int(oPC, "NewSpellbookMem_" + IntToString(nClass), nSpellbookID, nCount - 1); + } + else if(nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS) + { + int nSpellLevel = StringToInt(Get2DACache(sFile, "Level", nSpellbookID)); + int nCount = persistant_array_get_int(oPC, "NewSpellbookMem_" + IntToString(nClass), nSpellLevel); + if(nCount > 0) + persistant_array_set_int(oPC, "NewSpellbookMem_" + IntToString(nClass), nSpellLevel, nCount - 1); + } +} + +int GetSpellLevel(int nSpellID, int nClass) +{ + string sFile = GetFileForClass(nClass); + int nSpellbookID = SpellToSpellbookID(nSpellID); + if(nSpellbookID == -1) + { + if(DEBUG) DoDebug("ERROR: GetSpellLevel: Unable to resolve spell to spellbookID: "+IntToString(nSpellID)+" "+sFile); + return -1; + } + + // get spell level + int nSpellLevel = -1; + string sSpellLevel = Get2DACache(sFile, "Level", nSpellbookID); + + if (sSpellLevel != "") + nSpellLevel = StringToInt(sSpellLevel); + + return nSpellLevel; +} + +//called inside for loop in SetupSpells(), delayed to prevent TMI +void SpontaneousSpellSetupLoop(object oPC, int nClass, string sFile, object oSkin, int i) +{ + int nSpellbookID = persistant_array_get_int(oPC, "Spellbook" + IntToString(nClass), i); + string sIPFeatID = Get2DACache(sFile, "IPFeatID", nSpellbookID); + int nIPFeatID = StringToInt(sIPFeatID); + int nFeatID = StringToInt(Get2DACache(sFile, "FeatID", nSpellbookID)); + //int nRealSpellID = StringToInt(Get2DACache(sFile, "RealSpellID", nSpellbookID)); + SetLocalInt(oSkin, "NewSpellbookTemp_" + sIPFeatID, TRUE); + + AddSkinFeat(nFeatID, nIPFeatID, oSkin, oPC); +} + +void SetupSpells(object oPC, int nClass) +{ + string sFile = GetFileForClass(nClass); + string sClass = IntToString(nClass); + string sArrayName = "NewSpellbookMem_" + sClass; + object oSkin = GetPCSkin(oPC); + int nLevel = GetSpellslotLevel(nClass, oPC); + int nAbility = GetAbilityScoreForClass(nClass, oPC); + int nSpellbookType = GetSpellbookTypeForClass(nClass); + + if(DEBUG) DoDebug("SetupSpells\n" + + "nClass = " + IntToString(nClass) + "\n" + + "nSpellslotLevel = " + IntToString(nLevel) + "\n" + + "nAbility = " + IntToString(nAbility) + "\n" + + "nSpellbookType = " + IntToString(nSpellbookType) + "\n" + + "sFile = " + sFile + "\n" + ); + + // For spontaneous spellbooks, set up an array that tells how many spells of each level they can cast + // And add casting feats for each spell known to the caster's hide + if(nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS) //:: Fixed by TiredByFirelight + { + // Spell slots + int nSpellLevel, nSlots; + for(nSpellLevel = 0; nSpellLevel <= 9; nSpellLevel++) + { + nSlots = GetSlotCount(nLevel, nSpellLevel, nAbility, nClass, oPC); + persistant_array_set_int(oPC, sArrayName, nSpellLevel, nSlots); + } + + int i; + for(i = 0; i < persistant_array_get_size(oPC, "Spellbook" + sClass); i++) + { //adding feats + SpontaneousSpellSetupLoop(oPC, nClass, sFile, oSkin, i); + } + }// end if - Spontaneous spellbook + + // For prepared spellbooks, add spell uses and use feats according to spells memorised list + else if(nSpellbookType == SPELLBOOK_TYPE_PREPARED && !GetIsBioSpellCastClass(nClass)) + { + int nSpellLevel, nSlot, nSlots, nSpellbookID; + string sArrayName2, sIDX; + + // clearing existing spells + persistant_array_delete(oPC, sArrayName); + + for(nSpellLevel = 0; nSpellLevel <= 9; nSpellLevel++) + { + //Delay of 0.01, to ensure it runs after persistant_array_delete() which is a lot of 0.0 delay commands, but before other spellbook stuff + DelayCommand(0.01, ProcessPreparedSpellLevel(oPC, nClass, nSpellLevel, nLevel, nAbility, sClass, sFile, sArrayName, nSpellbookType, oSkin)); + } + } +} + +/* if(nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS) + { + // Spell slots + int nSpellLevel, nSlots; + for(nSpellLevel = 0; nSpellLevel <= 9; nSpellLevel++) + { + nSlots = GetSlotCount(nLevel, nSpellLevel, nAbility, nClass, oPC); + persistant_array_set_int(oPC, sArrayName, nSpellLevel, nSlots); + } + + int i; + for(i = 0; i < persistant_array_get_size(oPC, "Spellbook" + sClass); i++) + { //adding feats + SpontaneousSpellSetupLoop(oPC, nClass, sFile, oSkin, i); + } + }// end if - Spontaneous spellbook + + // For prepared spellbooks, add spell uses and use feats according to spells memorised list + else if(nSpellbookType == SPELLBOOK_TYPE_PREPARED && !GetIsBioSpellCastClass(nClass)) + { + int nSpellLevel, nSlot, nSlots, nSpellbookID; + string sArrayName2, sIDX; + + // clearing existing spells + int i; + for(i = 0; i < persistant_array_get_size(oPC, sArrayName); i++) + { + persistant_array_set_int(oPC, sArrayName, i, 0); + } + + for(nSpellLevel = 0; nSpellLevel <= 9; nSpellLevel++) + { + sArrayName2 = "Spellbook" + IntToString(nSpellLevel) + "_" + sClass; // Minor optimisation: cache the array name string for multiple uses + sIDX = "SpellbookIDX" + IntToString(nSpellLevel) + "_" + sClass; + nSlots = GetSlotCount(nLevel, nSpellLevel, nAbility, nClass, oPC); + nSlot; + for(nSlot = 0; nSlot < nSlots; nSlot++) + { + //done when spells are added to it + nSpellbookID = persistant_array_get_int(oPC, sArrayName2, nSlot); + if(nSpellbookID != 0) + { + AddSpellUse(oPC, nSpellbookID, nClass, sFile, sArrayName, nSpellbookType, oSkin, + StringToInt(Get2DACache(sFile, "FeatID", nSpellbookID)), + StringToInt(Get2DACache(sFile, "IPFeatID", nSpellbookID)), + sIDX); + } + } + } + } +} */ + +void ProcessPreparedSpellLevel(object oPC, int nClass, int nSpellLevel, int nLevel, int nAbility, string sClass, string sFile, string sArrayName, int nSpellbookType, object oSkin) +{ + string sArrayName2 = "Spellbook" + IntToString(nSpellLevel) + "_" + sClass; + string sIDX = "SpellbookIDX" + IntToString(nSpellLevel) + "_" + sClass; + int nSlots = GetSlotCount(nLevel, nSpellLevel, nAbility, nClass, oPC); + int nSlot; + for(nSlot = 0; nSlot < nSlots; nSlot++) + { + int nSpellbookID = persistant_array_get_int(oPC, sArrayName2, nSlot); + if(nSpellbookID != 0) + { + AddSpellUse(oPC, nSpellbookID, nClass, sFile, sArrayName, nSpellbookType, oSkin, + StringToInt(Get2DACache(sFile, "FeatID", nSpellbookID)), + StringToInt(Get2DACache(sFile, "IPFeatID", nSpellbookID)), + sIDX); + } + } +} + + +void CheckAndRemoveFeat(object oHide, itemproperty ipFeat) +{ + int nSubType = GetItemPropertySubType(ipFeat); + if(!GetLocalInt(oHide, "NewSpellbookTemp_" + IntToString(nSubType))) + { + RemoveItemProperty(oHide, ipFeat); + DeleteLocalInt(oHide, "NewSpellbookTemp_" + IntToString(nSubType)); + if(DEBUG) DoDebug("CheckAndRemoveFeat: DeleteLocalInt(oHide, NewSpellbookTemp_" + IntToString(nSubType) + ");"); + if(DEBUG) DoDebug("CheckAndRemoveFeat: Removing item property"); + } + else + { + DeleteLocalInt(oHide, "NewSpellbookTemp_" + IntToString(nSubType)); + if(DEBUG) DoDebug("CheckAndRemoveFeat: DeleteLocalInt(oHide, NewSpellbookTemp_" + IntToString(nSubType) + ");"); + } +} + +void WipeSpellbookHideFeats(object oPC) +{ + object oHide = GetPCSkin(oPC); + itemproperty ipTest = GetFirstItemProperty(oHide); + while(GetIsItemPropertyValid(ipTest)) + { + int nSubType = GetItemPropertySubType(ipTest); + if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_BONUS_FEAT && + ((nSubType > SPELLBOOK_IPRP_FEATS_START && nSubType < SPELLBOOK_IPRP_FEATS_END) || + (nSubType > SPELLBOOK_IPRP_FEATS_START2 && nSubType < SPELLBOOK_IPRP_FEATS_END2)) + ) + { + DelayCommand(1.0f, CheckAndRemoveFeat(oHide, ipTest)); + } + ipTest = GetNextItemProperty(oHide); + } +} + +void CheckNewSpellbooks(object oPC) +{ + WipeSpellbookHideFeats(oPC); + int i; + for(i = 1; i <= 8; i++) + { + int nClass = GetClassByPosition(i, oPC); + int nLevel = GetLevelByClass(nClass, oPC); + + if(DEBUG) DoDebug("CheckNewSpellbooks\n" + + "nClass = " + IntToString(nClass) + "\n" + + "nLevel = " + IntToString(nLevel) + "\n" + ); + //if bard/sorc newspellbook is disabled after selecting + //remove those from radial + if( (GetPRCSwitch(PRC_BARD_DISALLOW_NEWSPELLBOOK) && nClass == CLASS_TYPE_BARD) + ||(GetPRCSwitch(PRC_SORC_DISALLOW_NEWSPELLBOOK) && nClass == CLASS_TYPE_SORCERER)) + { + //do nothing + } + else if(nLevel) + { + //Aranea cast as sorcs + if(nClass == CLASS_TYPE_SHAPECHANGER + && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) + && GetRacialType(oPC) == RACIAL_TYPE_ARANEA) + nClass = CLASS_TYPE_SORCERER; + //raks cast as sorcs + if(nClass == CLASS_TYPE_OUTSIDER + && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) + && GetRacialType(oPC) == RACIAL_TYPE_RAKSHASA) + nClass = CLASS_TYPE_SORCERER; + + //Arkamoi cast as sorcs + if(nClass == CLASS_TYPE_MONSTROUS + && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) + && GetRacialType(oPC) == RACIAL_TYPE_ARKAMOI) + nClass = CLASS_TYPE_SORCERER; + + //Hobgoblin Warsouls cast as sorcs + if(nClass == CLASS_TYPE_MONSTROUS + && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) + && GetRacialType(oPC) == RACIAL_TYPE_HOBGOBLIN_WARSOUL) + nClass = CLASS_TYPE_SORCERER; + + //Redspawn cast as sorcs + if(nClass == CLASS_TYPE_MONSTROUS + && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) + && GetRacialType(oPC) == RACIAL_TYPE_REDSPAWN_ARCANISS) + nClass = CLASS_TYPE_SORCERER; + + //Marrutact cast as sorcs + if(nClass == CLASS_TYPE_MONSTROUS + && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) + && GetRacialType(oPC) == RACIAL_TYPE_MARRUTACT) + nClass = CLASS_TYPE_SORCERER; + + //Driders cast as sorcs + if(nClass == CLASS_TYPE_ABERRATION + && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) + && GetRacialType(oPC) == RACIAL_TYPE_DRIDER) + nClass = CLASS_TYPE_SORCERER; + + //Gloura cast as bards + if(nClass == CLASS_TYPE_FEY + && !GetLevelByClass(CLASS_TYPE_BARD, oPC) + && GetRacialType(oPC) == RACIAL_TYPE_GLOURA) + nClass = CLASS_TYPE_BARD; + //remove persistant locals used to track when all spells cast + string sArrayName = "NewSpellbookMem_"+IntToString(nClass); + if(persistant_array_exists(oPC, sArrayName)) + { + if(GetSpellbookTypeForClass(nClass) == SPELLBOOK_TYPE_PREPARED) + { + int nSpellLevel, i, Max; + string sIDX, sSpellbookID, sClass = IntToString(nClass); + for(nSpellLevel = 0; nSpellLevel <= 9; nSpellLevel++) + { + sIDX = "SpellbookIDX" + IntToString(nSpellLevel) + "_" + sClass; + Max = persistant_array_get_size(oPC, sIDX); + for(i = 0; i < Max; i++) + { + sSpellbookID = persistant_array_get_string(oPC, sIDX, i); + if(sSpellbookID != "") + { + DeletePersistantLocalString(oPC, sArrayName+"_"+sSpellbookID); + } + } + persistant_array_delete(oPC, sIDX); + } + } + else + { + persistant_array_delete(oPC, sArrayName); + persistant_array_create(oPC, sArrayName); + } + } + //delay it so wipespellbookhidefeats has time to start to run + //but before the deletes actually happen + DelayCommand(0.1, SetupSpells(oPC, nClass)); + } + } +} + +//NewSpellbookSpell() helper functions +int bTargetingAllowed(int nSpellID); +void CheckPrepSlots(int nClass, int nSpellID, int nSpellbookID, int bIsAction = FALSE); +void CheckSpontSlots(int nClass, int nSpellID, int nSpellSlotLevel, int bIsAction = FALSE); +void DoCleanUp(int nMetamagic); + +void CastSpontaneousSpell(int nClass, int bInstantSpell = FALSE) +{ + //get the spellbook ID + int nFakeSpellID = GetSpellId(); + int nSpellID = GetPowerFromSpellID(nFakeSpellID); + if(nSpellID == -1) nSpellID = 0; + + //Check the target first + if(!bTargetingAllowed(nSpellID)) + return; + + // if OBJECT_SELF is fighting - stop fighting and cast spell + if(GetCurrentAction() == ACTION_ATTACKOBJECT) + ClearAllActions(); + + //if its a subradial spell, get the master + int nMasterFakeSpellID = StringToInt(Get2DACache("spells", "Master", nFakeSpellID)); + if(!nMasterFakeSpellID) + nMasterFakeSpellID = nFakeSpellID; + + int nSpellbookID = SpellToSpellbookID(nMasterFakeSpellID); + + // Paranoia - It should not be possible to get here without having the spells available array existing + if(!persistant_array_exists(OBJECT_SELF, "NewSpellbookMem_" + IntToString(nClass))) + { + if(DEBUG) DoDebug("ERROR: NewSpellbookSpell: NewSpellbookMem_" + IntToString(nClass) + " array does not exist"); + persistant_array_create(OBJECT_SELF, "NewSpellbookMem_" + IntToString(nClass)); + } + + int nSpellLevel = StringToInt(Get2DACache(GetFileForClass(nClass), "Level", nSpellbookID)); + + // Make sure the caster has uses of this spell remaining + // 2009-9-20: Add metamagic feat abilities. -N-S + int nMetamagic = GetLocalInt(OBJECT_SELF, "MetamagicFeatAdjust"); + if(nMetamagic) + { + //Need to check if metamagic can be applied to a spell + int nMetaTest; + int nMetaType = HexToInt(Get2DACache("spells", "MetaMagic", nSpellID)); + + int nSpellSlotLevel = nSpellLevel; + switch(nMetamagic) + { + case METAMAGIC_NONE: nMetaTest = 1; break; //no need to change anything + case METAMAGIC_EMPOWER: nMetaTest = nMetaType & 1; nSpellLevel += 2; break; + case METAMAGIC_EXTEND: nMetaTest = nMetaType & 2; nSpellLevel += 1; break; + case METAMAGIC_MAXIMIZE: nMetaTest = nMetaType & 4; nSpellLevel += 3; break; + case METAMAGIC_QUICKEN: nMetaTest = nMetaType & 8; nSpellLevel += 4; break; + case METAMAGIC_SILENT: nMetaTest = nMetaType & 16; nSpellLevel += 1; break; + case METAMAGIC_STILL: nMetaTest = nMetaType & 32; nSpellLevel += 1; break; + } + + if(!nMetaTest)//can't use selected metamagic with this spell + { + nMetamagic = METAMAGIC_NONE; + ActionDoCommand(SendMessageToPC(OBJECT_SELF, "You can't use "+GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellID)))+"with selected metamagic.")); + nSpellLevel = nSpellSlotLevel; + } + else if(nSpellLevel > 9)//now test the spell level + { + nMetamagic = METAMAGIC_NONE; + ActionDoCommand(SendMessageToPC(OBJECT_SELF, "Modified spell level is to high! Casting spell without metamagic")); + nSpellLevel = nSpellSlotLevel; + } + else if(GetLocalInt(OBJECT_SELF, "PRC_metamagic_state") == 1) + SetLocalInt(OBJECT_SELF, "MetamagicFeatAdjust", 0); + } + + CheckSpontSlots(nClass, nSpellID, nSpellLevel); + if(GetLocalInt(OBJECT_SELF, "NSB_Cast")) + ActionDoCommand(CheckSpontSlots(nClass, nSpellID, nSpellLevel, TRUE)); + else + return; + + // Calculate DC. 10 + spell level on the casting class's list + DC increasing ability mod + //int nDC = 10 + nSpellLevel + GetDCAbilityModForClass(nClass, OBJECT_SELF); + // This is wrong and is breaking things, and is already calculated in the function it calls anyway - Strat + + //remove any old effects + //seems cheat-casting breaks hardcoded removal + //and cant remove effects because I dont know all the targets! + if(!bInstantSpell) + { + //Handle quicken metamagic and Duskblade's Quick Cast + if((nMetamagic & METAMAGIC_QUICKEN) || GetLocalInt(OBJECT_SELF, "QuickCast")) + { + //Adding Auto-Quicken III - deleted after casting has finished. + object oSkin = GetPCSkin(OBJECT_SELF); + int nCastDur = StringToInt(Get2DACache("spells", "ConjTime", nSpellID)) + StringToInt(Get2DACache("spells", "CastTime", nSpellID)); + itemproperty ipAutoQuicken = ItemPropertyBonusFeat(IP_CONST_NSB_AUTO_QUICKEN); + ActionDoCommand(AddItemProperty(DURATION_TYPE_TEMPORARY, ipAutoQuicken, oSkin, nCastDur/1000.0f)); + DeleteLocalInt(OBJECT_SELF, "QuickCast"); + } + } + + //cast the spell + //dont need to override level, the spellscript will calculate it + //class is read from "NSB_Class" + ActionCastSpell(nSpellID, 0, -1, 0, nMetamagic, CLASS_TYPE_INVALID, 0, 0, OBJECT_INVALID, bInstantSpell); + + //Clean up + ActionDoCommand(DoCleanUp(nMetamagic)); +} + +void CastPreparedSpell(int nClass, int nMetamagic = METAMAGIC_NONE, int bInstantSpell = FALSE) +{ + object oPC = OBJECT_SELF; + + //get the spellbook ID + int nFakeSpellID = GetSpellId(); + int nSpellID = GetPowerFromSpellID(nFakeSpellID); + if(nSpellID == -1) nSpellID = 0; + + //Check the target first + if(!bTargetingAllowed(nSpellID)) + return; + + // if OBJECT_SELF is fighting - stop fighting and cast spell + if(GetCurrentAction() == ACTION_ATTACKOBJECT) + ClearAllActions(); + + //if its a subradial spell, get the master + int nMasterFakeSpellID = StringToInt(Get2DACache("spells", "Master", nFakeSpellID)); + if(!nMasterFakeSpellID) + nMasterFakeSpellID = nFakeSpellID; + + int nSpellbookID = SpellToSpellbookID(nMasterFakeSpellID); + + // Paranoia - It should not be possible to get here without having the spells available array existing + if(!persistant_array_exists(OBJECT_SELF, "NewSpellbookMem_" + IntToString(nClass))) + { + if(DEBUG) DoDebug("ERROR: NewSpellbookSpell: NewSpellbookMem_" + IntToString(nClass) + " array does not exist"); + persistant_array_create(OBJECT_SELF, "NewSpellbookMem_" + IntToString(nClass)); + } + + int nSpellLevel = StringToInt(Get2DACache(GetFileForClass(nClass), "Level", nSpellbookID)); + + // Make sure the caster has uses of this spell remaining + CheckPrepSlots(nClass, nSpellID, nSpellbookID); + if(GetLocalInt(OBJECT_SELF, "NSB_Cast")) + ActionDoCommand(CheckPrepSlots(nClass, nSpellID, nSpellbookID, TRUE)); + else + return; + + // Calculate DC. 10 + spell level on the casting class's list + DC increasing ability mod + //int nDC = 10 + nSpellLevel + GetDCAbilityModForClass(nClass, OBJECT_SELF); + // This is wrong and is breaking things, and is already calculated in the function it calls anyway - Strat + + //remove any old effects + //seems cheat-casting breaks hardcoded removal + //and cant remove effects because I dont know all the targets! + if(!bInstantSpell) + { + //Handle quicken metamagic and Duskblade's Quick Cast + if((nMetamagic & METAMAGIC_QUICKEN) || GetLocalInt(OBJECT_SELF, "QuickCast")) + { + //Adding Auto-Quicken III - deleted after casting has finished. + object oSkin = GetPCSkin(OBJECT_SELF); + int nCastDur = StringToInt(Get2DACache("spells", "ConjTime", nSpellID)) + StringToInt(Get2DACache("spells", "CastTime", nSpellID)); + itemproperty ipAutoQuicken = ItemPropertyBonusFeat(IP_CONST_NSB_AUTO_QUICKEN); + ActionDoCommand(AddItemProperty(DURATION_TYPE_TEMPORARY, ipAutoQuicken, oSkin, nCastDur/1000.0f)); + DeleteLocalInt(OBJECT_SELF, "QuickCast"); + } + else if(nClass == CLASS_TYPE_HEALER) + { + if(GetHasFeat(FEAT_EFFORTLESS_HEALING) + && GetIsOfSubschool(nSpellID, SUBSCHOOL_HEALING)) + { + object oSkin = GetPCSkin(OBJECT_SELF); + //all spells from healing subschool except Close Wounds have casting time of 2.5s + float fCastDur = nSpellID == SPELL_CLOSE_WOUNDS ? 1.0f : 2.5f; + itemproperty ipImpCombatCast = ItemPropertyBonusFeat(IP_CONST_NSB_IMP_COMBAT_CAST); + ActionDoCommand(AddItemProperty(DURATION_TYPE_TEMPORARY, ipImpCombatCast, oSkin, fCastDur)); + } + } + } + + //cast the spell + //dont need to override level, the spellscript will calculate it + //class is read from "NSB_Class" + ActionCastSpell(nSpellID, 0, -1, 0, nMetamagic, CLASS_TYPE_INVALID, 0, 0, OBJECT_INVALID, bInstantSpell); + + //Clean up + ActionDoCommand(DoCleanUp(nMetamagic)); +} + +void NewSpellbookSpell(int nClass, int nSpellbookType, int nMetamagic = METAMAGIC_NONE, int bInstantSpell = FALSE) +{ + object oPC = OBJECT_SELF; + + // if oPC is fighting - stop fighting and cast spell + if(GetCurrentAction(oPC) == ACTION_ATTACKOBJECT) + ClearAllActions(); + + //get the spellbook ID + int nFakeSpellID = GetSpellId(); + int nSpellID = GetPowerFromSpellID(nFakeSpellID); + if(nSpellID == -1) nSpellID = 0; + + //Check the target first + if(!bTargetingAllowed(nSpellID)) + return; + + //if its a subradial spell, get the master + int nMasterFakeSpellID = StringToInt(Get2DACache("spells", "Master", nFakeSpellID)); + if(!nMasterFakeSpellID) + nMasterFakeSpellID = nFakeSpellID; + + int nSpellbookID = SpellToSpellbookID(nMasterFakeSpellID); + + // Paranoia - It should not be possible to get here without having the spells available array existing + if(!persistant_array_exists(oPC, "NewSpellbookMem_" + IntToString(nClass))) + { + if(DEBUG) DoDebug("ERROR: NewSpellbookSpell: NewSpellbookMem_" + IntToString(nClass) + " array does not exist"); + persistant_array_create(oPC, "NewSpellbookMem_" + IntToString(nClass)); + } + + string sFile = GetFileForClass(nClass); + int nSpellLevel = StringToInt(Get2DACache(sFile, "Level", nSpellbookID)); + + // Make sure the caster has uses of this spell remaining + // 2009-9-20: Add metamagic feat abilities. -N-S + if(nSpellbookType == SPELLBOOK_TYPE_PREPARED) + { + CheckPrepSlots(nClass, nSpellID, nSpellbookID); + if(GetLocalInt(oPC, "NSB_Cast")) + ActionDoCommand(CheckPrepSlots(nClass, nSpellID, nSpellbookID, TRUE)); + else + return; + } + else if(nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS) + { + nMetamagic = GetLocalInt(oPC, "MetamagicFeatAdjust"); + if(nMetamagic) + { + //Need to check if metamagic can be applied to a spell + int nMetaTest; + int nMetaType = HexToInt(Get2DACache("spells", "MetaMagic", nSpellID)); + + int nSpellSlotLevel = nSpellLevel; + switch(nMetamagic) + { + case METAMAGIC_NONE: nMetaTest = 1; break; //no need to change anything + case METAMAGIC_EMPOWER: nMetaTest = nMetaType & 1; nSpellLevel += 2; break; + case METAMAGIC_EXTEND: nMetaTest = nMetaType & 2; nSpellLevel += 1; break; + case METAMAGIC_MAXIMIZE: nMetaTest = nMetaType & 4; nSpellLevel += 3; break; + case METAMAGIC_QUICKEN: nMetaTest = nMetaType & 8; nSpellLevel += 4; break; + case METAMAGIC_SILENT: nMetaTest = nMetaType & 16; nSpellLevel += 1; break; + case METAMAGIC_STILL: nMetaTest = nMetaType & 32; nSpellLevel += 1; break; + } + + if(!nMetaTest)//can't use selected metamagic with this spell + { + nMetamagic = METAMAGIC_NONE; + ActionDoCommand(SendMessageToPC(oPC, "You can't use "+GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellID)))+"with selected metamagic.")); + nSpellLevel = nSpellSlotLevel; + } + else if(nSpellLevel > 9)//now test the spell level + { + nMetamagic = METAMAGIC_NONE; + ActionDoCommand(SendMessageToPC(oPC, "Modified spell level is to high! Casting spell without metamagic")); + nSpellLevel = nSpellSlotLevel; + } + else if(GetLocalInt(oPC, "PRC_metamagic_state") == 1) + SetLocalInt(oPC, "MetamagicFeatAdjust", 0); + } + + CheckSpontSlots(nClass, nSpellID, nSpellLevel); + if(GetLocalInt(oPC, "NSB_Cast")) + ActionDoCommand(CheckSpontSlots(nClass, nSpellID, nSpellLevel, TRUE)); + else + return; + } + + // Calculate DC. 10 + spell level on the casting class's list + DC increasing ability mod + //int nDC = 10 + nSpellLevel + GetDCAbilityModForClass(nClass, OBJECT_SELF); + // This is wrong and is breaking things, and is already calculated in the function it calls anyway - Strat + + //remove any old effects + //seems cheat-casting breaks hardcoded removal + //and cant remove effects because I dont know all the targets! + if(!bInstantSpell) + { + //Handle quicken metamagic and Duskblade's Quick Cast + if((nMetamagic & METAMAGIC_QUICKEN) || GetLocalInt(oPC, "QuickCast")) + { + //Adding Auto-Quicken III - deleted after casting has finished. + object oSkin = GetPCSkin(oPC); + int nCastDur = StringToInt(Get2DACache("spells", "ConjTime", nSpellID)) + StringToInt(Get2DACache("spells", "CastTime", nSpellID)); + itemproperty ipAutoQuicken = ItemPropertyBonusFeat(IP_CONST_NSB_AUTO_QUICKEN); + ActionDoCommand(AddItemProperty(DURATION_TYPE_TEMPORARY, ipAutoQuicken, oSkin, nCastDur/1000.0f)); + DeleteLocalInt(oPC, "QuickCast"); + } + else if(nClass == CLASS_TYPE_HEALER) + { + if(GetHasFeat(FEAT_EFFORTLESS_HEALING) + && GetIsOfSubschool(nSpellID, SUBSCHOOL_HEALING)) + { + object oSkin = GetPCSkin(oPC); + //all spells from healing subschool except Close Wounds have casting time of 2.5s + float fCastDur = nSpellID == SPELL_CLOSE_WOUNDS ? 1.0f : 2.5f; + itemproperty ipImpCombatCast = ItemPropertyBonusFeat(IP_CONST_NSB_IMP_COMBAT_CAST); + ActionDoCommand(AddItemProperty(DURATION_TYPE_TEMPORARY, ipImpCombatCast, oSkin, fCastDur)); + } + } + } + + //cast the spell + //dont need to override level, the spellscript will calculate it + //class is read from "NSB_Class" + ActionCastSpell(nSpellID, 0, -1, 0, nMetamagic, CLASS_TYPE_INVALID, 0, 0, OBJECT_INVALID, bInstantSpell); + + //Clean up + ActionDoCommand(DoCleanUp(nMetamagic)); +} + +int bTargetingAllowed(int nSpellID) +{ + object oTarget = GetSpellTargetObject(); + if(GetIsObjectValid(oTarget)) + { + int nTargetType = ~(HexToInt(Get2DACache("spells", "TargetType", nSpellID))); + + //test targetting self + if(oTarget == OBJECT_SELF) + { + if(nTargetType & 1) + { + if(DEBUG) DoDebug("bTargetingAllowed: You cannot target yourself."); + return FALSE; + } + } + //test targetting others + else if(GetObjectType(oTarget) == OBJECT_TYPE_CREATURE) + { + if(nTargetType & 2) + { + if(DEBUG) DoDebug("bTargetingAllowed: You cannot target creatures."); + return FALSE; + } + } + } + return TRUE; +} + +void CheckPrepSlots(int nClass, int nSpellID, int nSpellbookID, int bIsAction = FALSE) +{ + DeleteLocalInt(OBJECT_SELF, "NSB_Cast"); + int nCount = persistant_array_get_int(OBJECT_SELF, "NewSpellbookMem_" + IntToString(nClass), nSpellbookID); + if(DEBUG) DoDebug("NewSpellbookSpell: NewSpellbookMem_" + IntToString(nClass) + "[" + IntToString(nSpellbookID) + "] = " + IntToString(nCount)); + if(nCount < 1) + { + string sSpellName = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellID))); + // "You have no castings of " + sSpellName + " remaining" + string sMessage = ReplaceChars(GetStringByStrRef(16828411), "", sSpellName); + + FloatingTextStringOnCreature(sMessage, OBJECT_SELF, FALSE); + if(bIsAction) + ClearAllActions(); + } + else + { + SetLocalInt(OBJECT_SELF, "NSB_Cast", 1); + if(bIsAction) + { + SetLocalInt(OBJECT_SELF, "NSB_Class", nClass); + SetLocalInt(OBJECT_SELF, "NSB_SpellbookID", nSpellbookID); + } + } +} + +void CheckSpontSlots(int nClass, int nSpellID, int nSpellSlotLevel, int bIsAction = FALSE) +{ + DeleteLocalInt(OBJECT_SELF, "NSB_Cast"); + int nCount = persistant_array_get_int(OBJECT_SELF, "NewSpellbookMem_" + IntToString(nClass), nSpellSlotLevel); + if(DEBUG) DoDebug("NewSpellbookSpell: NewSpellbookMem_" + IntToString(nClass) + "[" + IntToString(nSpellSlotLevel) + "] = " + IntToString(nCount)); + if(nCount < 1) + { + // "You have no castings of spells of level " + IntToString(nSpellLevel) + " remaining" + string sMessage = ReplaceChars(GetStringByStrRef(16828409), "", IntToString(nSpellSlotLevel)); + FloatingTextStringOnCreature(sMessage, OBJECT_SELF, FALSE); + if(bIsAction) + ClearAllActions(); + } + else + { + SetLocalInt(OBJECT_SELF, "NSB_Cast", 1); + if(bIsAction) + { + SetLocalInt(OBJECT_SELF, "NSB_Class", nClass); + SetLocalInt(OBJECT_SELF, "NSB_SpellLevel", nSpellSlotLevel); + } + } +} + +void DoCleanUp(int nMetamagic) +{ + if(nMetamagic & METAMAGIC_QUICKEN) + { + object oSkin = GetPCSkin(OBJECT_SELF); + RemoveItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_NSB_AUTO_QUICKEN)); + } + DeleteLocalInt(OBJECT_SELF, "NSB_Class"); + DeleteLocalInt(OBJECT_SELF, "NSB_SpellLevel"); + DeleteLocalInt(OBJECT_SELF, "NSB_SpellbookID"); +} + +//:: Test Void +//:: void main (){} \ No newline at end of file diff --git a/src/include/inc_npc.nss b/src/include/inc_npc.nss new file mode 100644 index 0000000..6b99a4a --- /dev/null +++ b/src/include/inc_npc.nss @@ -0,0 +1,223 @@ +//:://///////////////////////////////////////////// +//:: NPC associate include +//:: inc_npc +//::////////////////////////////////////////////// +/* +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +// Get the master of oAssociate. +object GetMasterNPC(object oAssociate=OBJECT_SELF); + +// Returns the associate type of the specified creature. +// - Returns ASSOCIATE_TYPE_NONE if the creature is not the associate of anyone. +int GetAssociateTypeNPC( object oAssociate ); + +// Get the henchman belonging to oMaster. +// * Return OBJECT_INVALID if oMaster does not have a henchman. +// -nNth: Which henchman to return. +object GetHenchmanNPC(object oMaster=OBJECT_SELF,int nNth=1); + +// Get the associate of type nAssociateType belonging to oMaster. +// - nAssociateType: ASSOCIATE_TYPE_* +// - nMaster +// - nTh: Which associate of the specified type to return +// * Returns OBJECT_INVALID if no such associate exists. +object GetAssociateNPC(int nAssociateType, object oMaster=OBJECT_SELF, int nTh=1); + +// Returns TRUE if the specified condition flag is set on +// the associate. +int GetAssociateStateNPC(int nCondition, object oAssoc=OBJECT_SELF); + +// Determine if this henchman is currently dying +int GetIsHenchmanDyingNPC(object oHench=OBJECT_SELF); + +// Determine if Should I Heal My Master +int GetAssociateHealMasterNPC(); + +// Create the next AssociateType creature +object CreateLocalNextNPC(object oMaster,int nAssociateType,string sTemplate,location loc,string sTag=""); + +// Create a AssociateType creature +object CreateLocalNPC(object oMaster,int nAssociateType,string sTemplate,location loc,int Nth=1,string sTag=""); + + +#include "prc_inc_function" +#include "x0_i0_assoc" + +void SetLocalNPC(object oMaster,object oAssociate,int nAssociateType ,int nNth=1) +{ + SetLocalObject(oAssociate, "oMaster", oMaster); + SetLocalInt(oAssociate, "iAssocType", nAssociateType); + SetLocalObject(oMaster, IntToString(nAssociateType)+"oHench"+IntToString(nNth), oAssociate); + SetLocalInt(oAssociate, "iAssocNth", nNth); + +} + +void DeleteLocalNPC(object oAssociate=OBJECT_SELF) +{ + int nType = GetLocalInt(oAssociate, "iAssocType"); + object oMaster = GetMasterNPC(oAssociate); + int Nth = GetLocalInt(oAssociate, "iAssocNth"); + + DeleteLocalInt(oMaster, IntToString(nType)+"oHench"+IntToString(Nth)); + DeleteLocalInt(oAssociate, "iAssocNth"); + DeleteLocalObject(oAssociate, "oMaster"); + DeleteLocalInt(oAssociate, "iAssocType"); +} + +void DestroySummon(object oSummon) +{ + effect eVis = EffectVisualEffect(VFX_IMP_UNSUMMON); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis, GetLocation(oSummon)); + DeleteLocalNPC(oSummon); + DestroyObject(oSummon); +} + + +object CreateLocalNPC(object oMaster,int nAssociateType,string sTemplate,location loc,int Nth=1,string sTag="") +{ + object oSummon=CreateObject(OBJECT_TYPE_CREATURE,sTemplate,loc,FALSE,sTag); + + SetLocalNPC(oMaster,oSummon,nAssociateType ,Nth); + SetAssociateState(NW_ASC_HAVE_MASTER,TRUE,oSummon); + SetAssociateState(NW_ASC_DISTANCE_2_METERS); + SetAssociateState(NW_ASC_DISTANCE_4_METERS, FALSE); + SetAssociateState(NW_ASC_DISTANCE_6_METERS, FALSE); + + if (nAssociateType == ASSOCIATE_TYPE_FAMILIAR) SetLocalInt(oMaster, "FamiliarToTheDeath", 100); + if (nAssociateType == ASSOCIATE_TYPE_ANIMALCOMPANION) SetLocalInt(oMaster, "AniCompToTheDeath", 100); + + effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oSummon)); + + return oSummon; +} + +object CreateLocalNextNPC(object oMaster,int nAssociateType,string sTemplate,location loc,string sTag="") +{ + object oSummon=CreateObject(OBJECT_TYPE_CREATURE,sTemplate,loc,FALSE,sTag); + int nCount=1; + + while (GetIsObjectValid(GetAssociateNPC(ASSOCIATE_TYPE_SUMMONED,OBJECT_SELF,nCount))) + { + nCount++; + SendMessageToPC(OBJECT_SELF," nCount:"+IntToString(nCount)); + } + + SetLocalObject(oSummon, "oMaster", oMaster); + SetLocalInt(oSummon, "iAssocType", nAssociateType); + SetLocalObject(oMaster, IntToString(nAssociateType)+"oHench"+IntToString(nCount), oSummon); + SetLocalInt(oSummon, "iAssocNth", nCount); + + SetAssociateState(NW_ASC_HAVE_MASTER,TRUE,oSummon); + SetAssociateState(NW_ASC_DISTANCE_2_METERS); + SetAssociateState(NW_ASC_DISTANCE_4_METERS, FALSE); + SetAssociateState(NW_ASC_DISTANCE_6_METERS, FALSE); + + if (nAssociateType ==ASSOCIATE_TYPE_FAMILIAR) SetLocalInt(oMaster, "FamiliarToTheDeath", 100); + if (nAssociateType ==ASSOCIATE_TYPE_ANIMALCOMPANION) SetLocalInt(oMaster, "AniCompToTheDeath", 100); + + return oSummon; + +} +object GetMasterNPC(object oAssociate=OBJECT_SELF) +{ + object oMaster = GetLocalObject(oAssociate, "oMaster"); + + if (GetIsObjectValid(oMaster)) + return oMaster; + else + return GetMaster(oAssociate); +} + +int GetAssociateTypeNPC( object oAssociate ) +{ + int iType = GetLocalInt(oAssociate, "iAssocType"); + if (iType) + return iType; + else + return GetAssociateType(oAssociate); +} + +object GetHenchmanNPC(object oMaster=OBJECT_SELF,int nNth=1) +{ + object oAssociate = GetLocalObject(oMaster,IntToString(ASSOCIATE_TYPE_HENCHMAN)+"oHench"+IntToString(nNth)); + + if (GetIsObjectValid(oAssociate)) + return oAssociate; + else + return GetHenchman(oMaster,nNth); +} + +object GetAssociateNPC(int nAssociateType, object oMaster=OBJECT_SELF, int nTh=1) +{ + object oAssociate = GetLocalObject(oMaster,IntToString(nAssociateType)+"oHench"+IntToString(nTh)); + + if (GetIsObjectValid(oAssociate)) + return oAssociate; + else + return GetAssociate(nAssociateType,oMaster,nTh); +} + +int GetAssociateStateNPC(int nCondition, object oAssoc=OBJECT_SELF) +{ + //SpawnScriptDebugger(); + + if(nCondition == NW_ASC_HAVE_MASTER) + { + if(GetIsObjectValid(GetMasterNPC(oAssoc))) + return TRUE; + } + else + { + int nPlot = GetLocalInt(oAssoc, sAssociateMasterConditionVarname); + + if(nPlot & nCondition) + return TRUE; + } + return FALSE; +} + +int GetIsHenchmanDyingNPC(object oHench=OBJECT_SELF) +{ + int bHenchmanDying = GetAssociateStateNPC(NW_ASC_MODE_DYING, oHench); + + if (bHenchmanDying == TRUE) + { + return TRUE; + } + else + { + return FALSE; + } +} + +int GetAssociateHealMasterNPC() +{ + if(GetAssociateStateNPC(NW_ASC_HAVE_MASTER)) + { + object oMaster = GetMasterNPC(); + int nLoss = GetPercentageHPLoss(oMaster); + + if(!GetIsDead(oMaster)) + { + if(GetAssociateStateNPC(NW_ASC_HEAL_AT_75) && nLoss <= 75) + { + return TRUE; + } + else if(GetAssociateStateNPC(NW_ASC_HEAL_AT_50) && nLoss <= 50) + { + return TRUE; + } + else if(GetAssociateStateNPC(NW_ASC_HEAL_AT_25) && nLoss <= 25) + { + return TRUE; + } + } + } + return FALSE; +} + + diff --git a/src/include/inc_nwnx_funcs.nss b/src/include/inc_nwnx_funcs.nss new file mode 100644 index 0000000..ad48c0c --- /dev/null +++ b/src/include/inc_nwnx_funcs.nss @@ -0,0 +1,284 @@ +//////////////////////////////////////////////////////////////////////////////////// +/* Combined wrappers for both Win32 and Linux NWNX funcs */ +//////////////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +// Used in OnModuleLoad event to auto-detect if NWNX_Funcs plugin is enabled +void PRC_Funcs_Init(object oModule); + +// Sets the amount of hitpoints oObject has currently to nHP +void PRC_Funcs_SetCurrentHitPoints(object oCreature, int nHP); + +// Sets the amount of hitpoints oObject can maximally have to nHP +void PRC_Funcs_SetMaxHitPoints(object oCreature, int nHP); + +// Changes the skill ranks for nSkill on oObject by iValue +void PRC_Funcs_ModSkill(object oCreature, int nSkill, int nValue); + +// Sets a base ability score nAbility (ABILITY_STRENGTH, ABILITY_DEXTERITY, etc) to nValue +// The range of nValue is 3 to 255 +void PRC_Funcs_SetAbilityScore(object oCreature, int nAbility, int nValue); + +// Changes a base ability score nAbility (ABILITY_STRENGTH, ABILITY_DEXTERITY, etc) by nValue +void PRC_Funcs_ModAbilityScore(object oCreature, int nAbility, int nValue); + +// Adds a feat to oObject's general featlist +// If nLevel is greater than 0 the feat is also added to the featlist for that level +void PRC_Funcs_AddFeat(object oCreature, int nFeat, int nLevel=0); + +// Checks if oCreature inherently knows a feat (as opposed to a feat given from an equipped item) +// Returns FALSE if oCreature does not know the feat, TRUE if the feat is known +// The return value (if greater than 0) also denotes the position of the feat in the general feat list offset by +1 +int PRC_Funcs_GetFeatKnown(object oCreature, int nFeat); + +// Changes the saving throw bonus nSavingThrow of oObject by nValue; +void PRC_Funcs_ModSavingThrowBonus(object oCreature, int nSavingThrow, int nValue); + +// Sets the base natural AC +void PRC_Funcs_SetBaseNaturalAC(object oCreature, int nValue); + +// Returns the base natural AC +int PRC_Funcs_GetBaseNaturalAC(object oCreature); + +// Sets the specialist spell school of a Wizard +void PRC_Funcs_SetWizardSpecialization(object oCreature, int iSpecialization); + +// Returns the specialist spell school of a Wizard +int PRC_Funcs_GetWizardSpecialization(object oCreature); + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int _PRC_NWNXFuncsZero(object oObject, string sFunc) { + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1) + SetLocalString(oObject, sFunc, "-"); + else if (nVersion == 2) + SetLocalString(oObject, sFunc, " "); + int nResult = StringToInt(GetLocalString(oObject, sFunc)); + DeleteLocalString(oObject, sFunc); + return nResult; +} + +int _PRC_NWNXFuncsOne(object oObject, string sFunc, int nVal1) { + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1) + SetLocalString(oObject, sFunc, IntToString(nVal1)); + else if (nVersion == 2) + SetLocalString(oObject, sFunc, IntToString(nVal1) + " "); + int nResult = StringToInt(GetLocalString(oObject, sFunc)); + DeleteLocalString(oObject, sFunc); + return nResult; +} + +int _PRC_NWNXFuncsTwo(object oObject, string sFunc, int nVal1, int nVal2) { + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1) + SetLocalString(oObject, sFunc, IntToString(nVal1) + " " + IntToString(nVal2)); + else if (nVersion == 2) + SetLocalString(oObject, sFunc, IntToString(nVal1) + " " + IntToString(nVal2) + " "); + int nResult = StringToInt(GetLocalString(oObject, sFunc)); + DeleteLocalString(oObject, sFunc); + return nResult; +} + +int _PRC_NWNXFuncsThree(object oObject, string sFunc, int nVal1, int nVal2, int nVal3) { + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1) + SetLocalString(oObject, sFunc, IntToString(nVal1) + " " + IntToString(nVal2) + " " + IntToString(nVal3)); + else if (nVersion == 2) + SetLocalString(oObject, sFunc, IntToString(nVal1) + " " + IntToString(nVal2) + " " + IntToString(nVal3) + " "); + int nResult = StringToInt(GetLocalString(oObject, sFunc)); + DeleteLocalString(oObject, sFunc); + return nResult; +} + +int _PRC_NWNXFuncsFour(object oObject, string sFunc, int nVal1, int nVal2, int nVal3, int nVal4) { + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1) + SetLocalString(oObject, sFunc, IntToString(nVal1) + " " + IntToString(nVal2) + " " + IntToString(nVal3) + " " + IntToString(nVal4)); + else if (nVersion == 2) + SetLocalString(oObject, sFunc, IntToString(nVal1) + " " + IntToString(nVal2) + " " + IntToString(nVal3) + " " + IntToString(nVal4) + " "); + int nResult = StringToInt(GetLocalString(oObject, sFunc)); + DeleteLocalString(oObject, sFunc); + return nResult; +} + +void PRC_Funcs_Init(object oModule) +{ + //Only NWNX for Win32 implements GetHasLocalVariable, so if this succeeds, that's what we're using + string sTestVariable = "PRC_TEST_NWNX_FUNCS"; + SetLocalString(oModule, sTestVariable, "1"); + SetLocalString(oModule, "NWNX!FUNCS!GETHASLOCALVARIABLE", sTestVariable + " 3"); //3 is the variable type + //NOTE: don't use _PRC_NWNXFuncsX functions here; they depend on the PRC_NWNX_FUNCS that we haven't set yet + int iTest = StringToInt(GetLocalString(oModule, "NWNX!FUNCS!GETHASLOCALVARIABLE")); + DeleteLocalString(oModule, "NWNX!FUNCS!GETHASLOCALVARIABLE"); + DeleteLocalString(oModule, sTestVariable); + + if (iTest) + SetLocalInt(oModule, "PRC_NWNX_FUNCS", 1); //1 == win32 + else + { + //NWNX GetLocalVariableCount behaves differently for win32 and linux, + //but we know we're not using the win32 version (because the above check failed), + //so try the linux version of GetLocalVariableCount. + //Since PRC_VERSION is a module-level variable, and we know it's defined + //by OnLoad before it calls this function, the variable count will be at + //least 1 if we're using NWNX. If not, 0 will be returned to indicate that + //the call failed because NWNX funcs is not present. + string sFunc = "NWNX!FUNCS!GETLOCALVARIABLECOUNT"; + SetLocalString(oModule, sFunc, " "); + //NOTE: don't use _PRC_NWNXFuncsX functions here; they depend on the PRC_NWNX_FUNCS that we haven't set yet + //NOTE: the number being returned by GetLocalVariableCount() on Linux seems bogus to me (it's huge, e.g. 294,654,504), + //but it does seem to be reliably zero when NWNX funcs is not present, and so far has been reliably non-zero + //when it is present. That's all we need here. + //Info: on win32, GetLocalVariableCount() is returning much more reasonable numbers (e.g. 1707). + int nVariables = StringToInt(GetLocalString(oModule, sFunc)); + DeleteLocalString(oModule, sFunc); + if (nVariables) + SetLocalInt(oModule, "PRC_NWNX_FUNCS", 2); //2 == linux + } +} + +void PRC_Funcs_SetMaxHitPoints(object oCreature, int nHP) +{ + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1 || nVersion == 2) + { + _PRC_NWNXFuncsOne(oCreature, "NWNX!FUNCS!SETMAXHITPOINTS", nHP); + DeleteLocalString(oCreature, "NWNX!FUNCS!SETMAXHITPOINTS"); + } +} + +void PRC_Funcs_ModSkill(object oCreature, int nSkill, int nValue) +{ + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1) + _PRC_NWNXFuncsThree(oCreature, "NWNX!FUNCS!SETSKILL", nSkill, nValue, 1); //The 1 is a flag specifying modify instead of set + else if (nVersion == 2) + _PRC_NWNXFuncsTwo(oCreature, "NWNX!FUNCS!MODIFYSKILLRANK", nSkill, nValue); +} + +void PRC_Funcs_SetAbilityScore(object oCreature, int nAbility, int nValue) +{ + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1) + _PRC_NWNXFuncsFour(oCreature, "NWNX!FUNCS!SETABILITYSCORE", nAbility, nValue, 0, 0); //The first 0 is a flag specifying set instead of modify + else if (nVersion == 2) + _PRC_NWNXFuncsTwo(oCreature, "NWNX!FUNCS!SETABILITYSCORE", nAbility, nValue); +} + +void PRC_Funcs_ModAbilityScore(object oCreature, int nAbility, int nValue) +{ + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1) + _PRC_NWNXFuncsFour(oCreature, "NWNX!FUNCS!SETABILITYSCORE", nAbility, nValue, 1, 0); //The 1 is a flag specifying modify instead of set + else if (nVersion == 2) + _PRC_NWNXFuncsTwo(oCreature, "NWNX!FUNCS!MODIFYABILITYSCORE", nAbility, nValue); +} + +void PRC_Funcs_AddFeat(object oCreature, int nFeat, int nLevel=0) +{ + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1) + { + if (!nLevel) + _PRC_NWNXFuncsOne(oCreature, "NWNX!FUNCS!ADDFEAT", nFeat); + else if(nLevel > 0) + _PRC_NWNXFuncsTwo(oCreature, "NWNX!FUNCS!ADDFEATATLEVEL", nLevel, nFeat); + } + else if (nVersion == 2) + { + if (!nLevel) + _PRC_NWNXFuncsOne(oCreature, "NWNX!FUNCS!ADDKNOWNFEAT", nFeat); + else if(nLevel > 0) + _PRC_NWNXFuncsTwo(oCreature, "NWNX!FUNCS!ADDKNOWNFEATATLEVEL", nLevel, nFeat); + } +} + +int PRC_Funcs_GetFeatKnown(object oCreature, int nFeatIndex) +{ + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1) + return _PRC_NWNXFuncsOne(oCreature, "NWNX!FUNCS!GETFEATKNOWN", nFeatIndex); + else if (nVersion == 2) + return _PRC_NWNXFuncsOne(oCreature, "NWNX!FUNCS!GETKNOWNFEAT", nFeatIndex); + return 0; +} + +void PRC_Funcs_ModSavingThrowBonus(object oCreature, int nSavingThrow, int nValue) +{ + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1) + _PRC_NWNXFuncsThree(oCreature, "NWNX!FUNCS!SETSAVINGTHROWBONUS", nSavingThrow, nValue, 1); //The 1 is a flag specifying modify instead of set + else if (nVersion == 2) + { + int nNewValue = _PRC_NWNXFuncsOne(oCreature, "NWNX!FUNCS!GETSAVINGTHROWBONUS", nSavingThrow) + nValue; + if (nNewValue < 0) + nNewValue = 0; + else if (nNewValue > 127) + nNewValue = 127; + _PRC_NWNXFuncsTwo(oCreature, "NWNX!FUNCS!SETSAVINGTHROWBONUS", nSavingThrow, nNewValue); + } +} + +void PRC_Funcs_SetBaseNaturalAC(object oCreature, int nValue) +{ + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1) + _PRC_NWNXFuncsTwo(oCreature, "NWNX!FUNCS!SETBASEAC", nValue, AC_NATURAL_BONUS); + else if (nVersion == 2) + _PRC_NWNXFuncsOne(oCreature, "NWNX!FUNCS!SETACNATURALBASE", nValue); +} + +int PRC_Funcs_GetBaseNaturalAC(object oCreature) +{ + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1) + return _PRC_NWNXFuncsOne(oCreature, "NWNX!FUNCS!GETBASEAC", AC_NATURAL_BONUS); + else if (nVersion == 2) + return _PRC_NWNXFuncsZero(oCreature, "NWNX!FUNCS!GETACNATURALBASE"); + return 0; +} + +void PRC_Funcs_SetCurrentHitPoints(object oCreature, int nHP) +{ + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1 || nVersion == 2) + _PRC_NWNXFuncsOne(oCreature, "NWNX!FUNCS!SETCURRENTHITPOINTS", nHP); +} + +void PRC_Funcs_SetCreatureSize (object oCreature, int nSize) +{ + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1 || nVersion == 2) + _PRC_NWNXFuncsOne(oCreature, "NWNX!FUNCS!SETCREATURESIZE", nSize); +} + +void PRC_Funcs_SetRace(object oCreature, int nRace) +{ + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1) + _PRC_NWNXFuncsOne(oCreature, "NWNX!FUNCS!SETRACE", nRace); + else if (nVersion == 2) + _PRC_NWNXFuncsOne(oCreature, "NWNX!FUNCS!SETRACIALTYPE", nRace); +} + +void PRC_Funcs_SetWizardSpecialization(object oCreature, int iSpecialization) +{ + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1 || nVersion == 2) + _PRC_NWNXFuncsOne(oCreature, "NWNX!FUNCS!SETWIZARDSPECIALIZATION", iSpecialization); +} + +int PRC_Funcs_GetWizardSpecialization(object oCreature) +{ + int nVersion = GetLocalInt(GetModule(), "PRC_NWNX_FUNCS"); + if (nVersion == 1 || nVersion == 2) + return _PRC_NWNXFuncsZero(oCreature, "NWNX!FUNCS!GETWIZARDSPECIALIZATION"); + return 0; +} \ No newline at end of file diff --git a/src/include/inc_pers_array.nss b/src/include/inc_pers_array.nss new file mode 100644 index 0000000..3e4b5df --- /dev/null +++ b/src/include/inc_pers_array.nss @@ -0,0 +1,340 @@ +//:://///////////////////////////////////////////// +//:: Persistant array simulation include +//:: inc_pers_array +//::////////////////////////////////////////////// +/** @file + Persistant array simulation include + + This file defines a set of functions for creating + and manipulating persistant arrays, which are + implemented as persistant local variables on some + holder creature. + + + Notes: + + * Arrays are dynamic and may be increased in size by just _set_'ing a new + element + * There are no restrictions on what is in the array (can have multiple + types in the same array) + * Arrays start at index 0 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +///////////////////////////////////// +// Functions +///////////////////////////////////// + +/** + * Creates a new persistant array on the given storage creature. + * If an array with the same name already exists, the function + * errors. + * + * @param store The creature to use as holder for the array + * @param name The name of the array + * @return SDL_SUCCESS if the array was successfully created, + * one of SDL_ERROR_* on error. + */ +int persistant_array_create(object store, string name); + +/** + * Deletes a persistant array, erasing all it's entries. + * + * @param store The creature which holds the array to delete + * @param name The name of the array + * @return SDL_SUCCESS if the array was successfully deleted, + * one of SDL_ERROR_* on error + */ +int persistant_array_delete(object store, string name); + +/** + * Stores a string in a persistant array. + * + * @param store The creature holding the array + * @param name The name of the array + * @param i The index to store the string at + * @param entry The string to store + * @return SDL_SUCCESS if the store was successfull, SDL_ERROR_* on error. + */ +int persistant_array_set_string(object store, string name, int i, string entry); + +/** + * Stores an integer in a persistant array. + * + * @param store The creature holding the array + * @param name The name of the array + * @param i The index to store the integer at + * @param entry The integer to store + * @return SDL_SUCCESS if the store was successfull, SDL_ERROR_* on error. + */ +int persistant_array_set_int(object store, string name, int i, int entry); + +/** + * Stores a float in a persistant array. + * + * @param store The creature holding the array + * @param name The name of the array + * @param i The index to store the float at + * @param entry The float to store + * @return SDL_SUCCESS if the store was successfull, SDL_ERROR_* on error. + */ +int persistant_array_set_float(object store, string name, int i, float entry); + +/** + * Stores an object in a persistant array. + * + * @param store The creature holding the array + * @param name The name of the array + * @param i The index to store the object at + * @param entry The object to store + * @return SDL_SUCCESS if the store was successfull, SDL_ERROR_* on error. + */ +int persistant_array_set_object(object store, string name, int i, object entry); + +/** + * Gets a string from a persistant array. + * + * @param store The creature holding the array + * @param name The name of the array + * @param i The index to retrieve the string from + * @return The value contained at the index on success, + * "" on error + */ +string persistant_array_get_string(object store, string name, int i); + +/** + * Gets an integer from a persistant array. + * + * @param store The creature holding the array + * @param name The name of the array + * @param i The index to retrieve the integer from + * @return The value contained at the index on success, + * 0 on error + */ +int persistant_array_get_int(object store, string name, int i); + +/** + * Gets a float from a persistant array. + * + * @param store The creature holding the array + * @param name The name of the array + * @param i The index to retrieve the float from + * @return The value contained at the index on success, + * 0.0f on error + */ +float persistant_array_get_float(object store, string name, int i); + +/** + * Gets an object from a persistant array. + * + * @param store The creature holding the array + * @param name The name of the array + * @param i The index to retrieve the object from + * @return The value contained at the index on success, + * OBJECT_INVALID on error + */ +object persistant_array_get_object(object store, string name, int i); + +/** + * Removes all entries in the array with indexes greater than or equal to + * the new size and sets the array size to be equal to the new size. + * + * @param store The creature holding the array + * @param name The name of the array + * @param size_new The new number of entries in the array + * @return SDL_SUCCESS on successful resize, SDL_ERROR_* on + * error + */ +int persistant_array_shrink(object store, string name, int size_new); + +/** + * Gets the current size of the array. This is one greater + * than the index of highest indexed element the array + * has contained since the last array_shrink or the new size + * specified by the last array_shrink, whichever is greater. + * + * @param store The creature holding the array + * @param name The name of the array + * @return The size of the array, or -1 if the specified + * array does not exist. + */ +int persistant_array_get_size(object store, string name); + +/** + * Checks whether the given persistant array exists. + * + * @param store The creature holding the array + * @param name The name of the array + * @return TRUE if the array exists, FALSE otherwise. + */ +int persistant_array_exists(object store, string name); + +///////////////////////////////////// +// Includes +///////////////////////////////////// + +#include "inc_persist_loca" +#include "prc_inc_array" // yes this is also got via inc_persist_loca if rather indirectly + +///////////////////////////////////// +// Implementation +///////////////////////////////////// + +int persistant_array_create(object store, string name) +{ + // error checking + if(!GetIsObjectValid(store)) + return SDL_ERROR_NOT_VALID_OBJECT; + else if(persistant_array_exists(store,name)) + return SDL_ERROR_ALREADY_EXISTS; + else + { + // Initialize the size (always one greater than the actual size) + SetPersistantLocalInt(store,name,1); + return SDL_SUCCESS; + } +} + +void persistant_array_delete_loop(object store, string name, int nMin, int nMax) +{ + int i = nMin; + while(i < nMin + 250 && i < nMax) + { + DeletePersistantLocalString(store,name+"_"+IntToString(i)); + + // just in case, delete possible object names + DeletePersistantLocalObject(store,name+"_"+IntToString(i)+"_OBJECT"); + i++; + } + // delay continuation to avoid TMI + if(i < nMax) + DelayCommand(0.0, persistant_array_delete_loop(store, name, i, nMax)); +} + +int persistant_array_delete(object store, string name) +{ + // error checking + int size=GetPersistantLocalInt(store,name); + if (size==0) + return SDL_ERROR_DOES_NOT_EXIST; + + persistant_array_delete_loop(store, name, 0, size+5); + + DeletePersistantLocalInt(store,name); + + return SDL_SUCCESS; +} + +int persistant_array_set_string(object store, string name, int i, string entry) +{ + int size=GetPersistantLocalInt(store,name); + if(size == 0) + return SDL_ERROR_DOES_NOT_EXIST; + if(i < 0) + return SDL_ERROR_OUT_OF_BOUNDS; + + SetPersistantLocalString(store,name+"_"+IntToString(i),entry); + + // save size if we've enlarged it + if (i+2>size) + SetPersistantLocalInt(store,name,i+2); + + return SDL_SUCCESS; +} + +int persistant_array_set_int(object store, string name, int i, int entry) +{ + return persistant_array_set_string(store,name,i,IntToString(entry)); +} + +int persistant_array_set_float(object store, string name, int i, float entry) +{ + return persistant_array_set_string(store,name,i,FloatToString(entry)); +} + +int persistant_array_set_object(object store, string name, int i, object entry) +{ + // object is a little more complicated. + // we want to create an object as a local variable too + if (!GetIsObjectValid(entry)) + return SDL_ERROR_NOT_VALID_OBJECT; + + int results = persistant_array_set_string(store,name,i,"OBJECT"); + if (results==SDL_SUCCESS) + SetPersistantLocalObject(store,name+"_"+IntToString(i)+"_OBJECT",entry); + + return results; +} + +string persistant_array_get_string(object store, string name, int i) +{ + // error checking + int size=GetPersistantLocalInt(store,name); + if (size==0 || i>size || i < 0) + return ""; + + return GetPersistantLocalString(store,name+"_"+IntToString(i)); +} + +int persistant_array_get_int(object store, string name, int i) +{ + return StringToInt(persistant_array_get_string(store,name,i)); +} + +float persistant_array_get_float(object store, string name, int i) +{ + return StringToFloat(persistant_array_get_string(store,name,i)); +} + +object persistant_array_get_object(object store, string name, int i) +{ + if(persistant_array_get_string(store, name, i) == "OBJECT") + return GetPersistantLocalObject(store,name+"_"+IntToString(i)+"_OBJECT"); + else + return OBJECT_INVALID; +} + +int persistant_array_shrink(object store, string name, int size_new) +{ + // Get the current size value + int size = GetPersistantLocalInt(store, name); + // Error check - non-existent array + if(size == 0) + return SDL_ERROR_DOES_NOT_EXIST; + // If the new number of elements is equal to or greater than the current number of elements, autosuccess + if((size - 1) <= size_new) + return SDL_SUCCESS; + + // Delete entries that are outside the new array bounds + int i; + for(i = size_new; i < size; i++) + { + DeletePersistantLocalString(store, name+"_"+IntToString(i)); + + // just in case, delete possible object names + DeletePersistantLocalObject(store, name+"_"+IntToString(i)+"_OBJECT"); + } + + // Store the new size, with the +1 existence marker + SetPersistantLocalInt(store, name, size_new + 1); + + return SDL_SUCCESS; +} + +int persistant_array_get_size(object store, string name) +{ + return GetPersistantLocalInt(store,name)-1; +} + +int persistant_array_exists(object store, string name) +{ + if (GetPersistantLocalInt(store,name)) + return TRUE; + else + return FALSE; +} + +// Test main +//void main(){} diff --git a/src/include/inc_persist_loca.nss b/src/include/inc_persist_loca.nss new file mode 100644 index 0000000..6eddc6a --- /dev/null +++ b/src/include/inc_persist_loca.nss @@ -0,0 +1,436 @@ +//:://///////////////////////////////////////////// +//:: Persistant local variables include +//:: inc_persist_loca +//::////////////////////////////////////////////// +/** @file + A set of functions for storing local variables + on a token item stored in the creature's skin. + Since local variables on items within containers + are not stripped during serialization, these + variables persist across module changes and + server resets. + + These functions work on NPCs in addition to PCs, + but the persitence is mostly useless for them, + since NPCs are usually not serialized in a way + that would remove normal locals from them, if + they are serialized at all. +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// +//:: Adapted by ebonfowl to fix the Beamdog local variable bug +//:: Functions all still intuitively work the same way +//:: Only difference is the variables all run through SQL rather than via the hide token +//:: Dedicated to Edgar, the real Ebonfowl +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Gets the token item inside the given creature's hide, on which the persistant + * variables are stored on. + * If a token does not exist already, one is created. + * WARNING: If called on a non-creature object, returns the object itself. + * + * @param oPC The creature whose storage token to get + * @param bAMS - TRUE will return special token for alternate magic system buckup info + * @return The creature's storage token + * + * GetNSBToken - special token for New Spellbook System information + */ +//object GetHideToken(object oPC, int bAMS = FALSE); + +/** + * Set a local string variable on the creature's storage token. + * + * @param oPC The creature whose local variables to manipulate + * @param sName The name of the local variable to manipulate + * @param sValue The value to set the string local to + */ +void SetPersistantLocalString(object oPC, string sName, string sValue); + +/** + * Set a local integer variable on the creature's storage token. + * + * @param oPC The creature whose local variables to manipulate + * @param sName The name of the local variable to manipulate + * @param nValue The value to set the integer local to + */ +void SetPersistantLocalInt(object oPC, string sName, int nValue); + +/** + * Set a local float variable on the creature's storage token. + * + * @param oPC The creature whose local variables to manipulate + * @param sName The name of the local variable to manipulate + * @param nValue The value to set the float local to + */ +void SetPersistantLocalFloat(object oPC, string sName, float fValue); + +/** + * Set a local location variable on the creature's storage token. + * + * CAUTION! See note in SetPersistantLocalObject(). Location also contains an + * object reference, though it will only break across changes to the module, + * not across server resets. + * + * @param oPC The creature whose local variables to manipulate + * @param sName The name of the local variable to manipulate + * @param nValue The value to set the location local to + */ +void SetPersistantLocalLocation(object oPC, string sName, location lValue); + +/** + * Set a local object variable on the creature's storage token. + * + * CAUTION! Object references are likely (and in some cases, certain) to break + * when transferring across modules or upon server reset. This means that + * persistantly stored local objects may not refer to the same object after such + * a change, if they refer to a valid object at all. + * + * @param oPC The creature whose local variables to manipulate + * @param sName The name of the local variable to manipulate + * @param nValue The value to set the object local to + */ +void SetPersistantLocalObject(object oPC, string sName, object oValue); + +/** + * Get a local string variable from the creature's storage token. + * + * @param oPC The creature whose local variables to manipulate + * @param sName The name of the local variable to manipulate + * @return The string local specified. On error, returns "" + */ +string GetPersistantLocalString(object oPC, string sName); + +/** + * Get a local integer variable from the creature's storage token. + * + * @param oPC The creature whose local variables to manipulate + * @param sName The name of the local variable to manipulate + * @return The integer local specified. On error, returns 0 + */ +int GetPersistantLocalInt(object oPC, string sName); + +/** + * Get a local float variable from the creature's storage token. + * + * @param oPC The creature whose local variables to manipulate + * @param sName The name of the local variable to manipulate + * @return The float local specified. On error, returns 0.0 + */ +float GetPersistantLocalFloat(object oPC, string sName); + +/** + * Get a local location variable from the creature's storage token. + * + * CAUTION! See note in SetPersistantLocalLocation() + * + * @param oPC The creature whose local variables to manipulate + * @param sName The name of the local variable to manipulate + * @return The location local specified. Return value on error is unknown + */ +location GetPersistantLocalLocation(object oPC, string sName); + +/** + * Get a local object variable from the creature's storage token. + * + * CAUTION! See note in SetPersistantLocalObject() + * + * @param oPC The creature whose local variables to manipulate + * @param sName The name of the local variable to manipulate + * @return The object local specified. On error, returns OBJECT_INVALID + */ +object GetPersistantLocalObject(object oPC, string sName); + +/** + * Delete a local string variable on the creature's storage token. + * + * @param oPC The creature whose local variables to manipulate + * @param sName The name of the local variable to manipulate + */ +void DeletePersistantLocalString(object oPC, string sName); + +/** + * Delete a local integer variable on the creature's storage token. + * + * @param oPC The creature whose local variables to manipulate + * @param sName The name of the local variable to manipulate + */ +void DeletePersistantLocalInt(object oPC, string sName); + +/** + * Delete a local float variable on the creature's storage token. + * + * @param oPC The creature whose local variables to manipulate + * @param sName The name of the local variable to manipulate + */ +void DeletePersistantLocalFloat(object oPC, string sName); + +/** + * Delete a local location variable on the creature's storage token. + * + * @param oPC The creature whose local variables to manipulate + * @param sName The name of the local variable to manipulate + */ +void DeletePersistantLocalLocation(object oPC, string sName); + +/** + * Delete a local object variable on the creature's storage token. + * + * @param oPC The creature whose local variables to manipulate + * @param sName The name of the local variable to manipulate + */ +void DeletePersistantLocalObject(object oPC, string sName); + + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "prc_inc_skin" + +// SQL include +#include "inc_persistsql" + + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +object GetHideToken(object oPC, int bAMS = FALSE) +{ + string sCache = bAMS ? "PRC_AMSTokenCache" : "PRC_HideTokenCache"; + string sTag = bAMS ? "AMS_Token" : "HideToken"; + + // Creatureness check - non-creatures don't get persistent storage from here + if(!(GetObjectType(oPC) == OBJECT_TYPE_CREATURE)) + return oPC; // Just return a reference to the object itself + + object oHide = GetPCSkin(oPC); + object oToken = GetLocalObject(oPC, sCache); + + if(!GetIsObjectValid(oToken)) + { + object oTest = GetFirstItemInInventory(oHide); + while(GetIsObjectValid(oTest)) + { + if(GetTag(oTest) == sTag) + { + oToken = oTest; + break;//exit while loop + } + oTest = GetNextItemInInventory(oHide); + } + if(!GetIsObjectValid(oToken)) + { + oToken = GetItemPossessedBy(oPC, sTag); + + // Move the token to hide's inventory + if(GetIsObjectValid(oToken)) + AssignCommand(oHide, ActionTakeItem(oToken, oPC)); // Does this work? - Ornedan + else + { + //oToken = CreateItemOnObject("hidetoken", oPC); + //AssignCommand(oHide, ActionTakeItem(oToken, oPC)); + oToken = CreateItemOnObject("hidetoken", oHide, 1, sTag); + } + } + + AssignCommand(oToken, SetIsDestroyable(FALSE)); + // Cache the token so that there needn't be multiple loops over an inventory + SetLocalObject(oPC, sCache, oToken); + //- If the cache reference is found to break under any conditions, uncomment this. + //looks like logging off then back on without the server rebooting breaks it + //I guess because the token gets a new ID, but the local still points to the old one + //Ive changed it to delete the local in OnClientEnter. Primogenitor + //DelayCommand(1.0f, DeleteLocalObject(oPC, "PRC_HideTokenCache")); + } + return oToken; +} + +void SetPersistantLocalString(object oPC, string sName, string sValue) +{ + if(GetIsPC(oPC) == TRUE && GetMaster(oPC) == OBJECT_INVALID && !GetIsDMPossessed(oPC)) + { + SQLocalsPlayer_SetString(oPC, sName, sValue); + } + else + { + SetLocalString(oPC, sName, sValue); + } +} + +/* void SetPersistantLocalString(object oPC, string sName, string sValue) +{ + if(GetIsPC(oPC)) + { + SQLocalsPlayer_SetString(oPC, sName, sValue); + } + else + { + SetLocalString(oPC, sName, sValue); + } +} */ + +void SetPersistantLocalInt(object oPC, string sName, int nValue) +{ + if(GetIsPC(oPC) == TRUE && GetMaster(oPC) == OBJECT_INVALID && !GetIsDMPossessed(oPC)) + { + SQLocalsPlayer_SetInt(oPC, sName, nValue); + } + else + { + SetLocalInt(oPC, sName, nValue); + } +} + +void SetPersistantLocalFloat(object oPC, string sName, float fValue) +{ + if(GetIsPC(oPC) == TRUE && GetMaster(oPC) == OBJECT_INVALID && !GetIsDMPossessed(oPC)) + { + SQLocalsPlayer_SetFloat(oPC, sName, fValue); + } + else + { + SetLocalFloat(oPC, sName, fValue); + } +} + +void SetPersistantLocalLocation(object oPC, string sName, location lValue) +{ + if(GetIsPC(oPC) == TRUE && GetMaster(oPC) == OBJECT_INVALID && !GetIsDMPossessed(oPC)) + { + SQLocalsPlayer_SetLocation(oPC, sName, lValue); + } + else + { + SetLocalLocation(oPC, sName, lValue); + } +} + +void SetPersistantLocalObject(object oPC, string sName, object oValue) +{ + if(GetIsPC(oPC) == TRUE && GetMaster(oPC) == OBJECT_INVALID && !GetIsDMPossessed(oPC)) + { + SQLocalsPlayer_SetObject(oPC, sName, oValue); + } + else + { + SetLocalObject(oPC, sName, oValue); + } +} + +string GetPersistantLocalString(object oPC, string sName) +{ + if(GetIsPC(oPC) == TRUE && GetMaster(oPC) == OBJECT_INVALID && !GetIsDMPossessed(oPC)) + { + return SQLocalsPlayer_GetString(oPC, sName); + } + return GetLocalString(oPC, sName); +} + +int GetPersistantLocalInt(object oPC, string sName) +{ + if(GetIsPC(oPC) == TRUE && GetMaster(oPC) == OBJECT_INVALID && !GetIsDMPossessed(oPC)) + { + return SQLocalsPlayer_GetInt(oPC, sName); + } + return GetLocalInt(oPC, sName); +} + +float GetPersistantLocalFloat(object oPC, string sName) +{ + if(GetIsPC(oPC) == TRUE && GetMaster(oPC) == OBJECT_INVALID && !GetIsDMPossessed(oPC)) + { + return SQLocalsPlayer_GetFloat(oPC, sName); + } + return GetLocalFloat(oPC, sName); +} + +location GetPersistantLocalLocation(object oPC, string sName) +{ + if(GetIsPC(oPC) == TRUE && GetMaster(oPC) == OBJECT_INVALID && !GetIsDMPossessed(oPC)) + { + return SQLocalsPlayer_GetLocation(oPC, sName); + } + return GetLocalLocation(oPC, sName); +} + +object GetPersistantLocalObject(object oPC, string sName) +{ + if(GetIsPC(oPC) == TRUE && GetMaster(oPC) == OBJECT_INVALID && !GetIsDMPossessed(oPC)) + { + // Additional check since the OID returned may be invalid, but not actually OBJECT_INVALID + object oReturn = SQLocalsPlayer_GetObject(oPC, sName); + if(GetIsObjectValid(oReturn)) return oReturn; + return OBJECT_INVALID; + } + return GetLocalObject(oPC, sName); +} + +void DeletePersistantLocalString(object oPC, string sName) +{ + if(GetIsPC(oPC) == TRUE && GetMaster(oPC) == OBJECT_INVALID && !GetIsDMPossessed(oPC)) + { + SQLocalsPlayer_DeleteString(oPC, sName); + } + else + { + DeleteLocalString(oPC, sName); + } +} + +void DeletePersistantLocalInt(object oPC, string sName) +{ + if(GetIsPC(oPC) == TRUE && GetMaster(oPC) == OBJECT_INVALID && !GetIsDMPossessed(oPC)) + { + SQLocalsPlayer_DeleteInt(oPC, sName); + } + else + { + DeleteLocalInt(oPC, sName); + } +} + +void DeletePersistantLocalFloat(object oPC, string sName) +{ + if(GetIsPC(oPC) == TRUE && GetMaster(oPC) == OBJECT_INVALID && !GetIsDMPossessed(oPC)) + { + SQLocalsPlayer_DeleteFloat(oPC, sName); + } + else + { + DeleteLocalFloat(oPC, sName); + } +} + +void DeletePersistantLocalLocation(object oPC, string sName) +{ + if(GetIsPC(oPC) == TRUE && GetMaster(oPC) == OBJECT_INVALID && !GetIsDMPossessed(oPC)) + { + SQLocalsPlayer_DeleteLocation(oPC, sName); + } + else + { + DeleteLocalLocation(oPC, sName); + } +} + +void DeletePersistantLocalObject(object oPC, string sName) +{ + if(GetIsPC(oPC) == TRUE && GetMaster(oPC) == OBJECT_INVALID && !GetIsDMPossessed(oPC)) + { + SQLocalsPlayer_DeleteObject(oPC, sName); + } + else + { + DeleteLocalObject(oPC, sName); + } +} + +// Test main + +// void main() {} \ No newline at end of file diff --git a/src/include/inc_persistsql.nss b/src/include/inc_persistsql.nss new file mode 100644 index 0000000..3f642a0 --- /dev/null +++ b/src/include/inc_persistsql.nss @@ -0,0 +1,688 @@ +//:://///////////////////////////////////////////// +//:: Utility Include: SQLocalsPlayer +//:: inc_persistsql.nss +//::////////////////////////////////////////////// +/* + Daz wrote these library functions to act as replacements for the usual local + functions: + * GetLocalInt / SetLocalInt / DeleteLocalInt + * GetLocalFloat / SetLocalFloat / DeleteLocalFloat + * GetLocalString / SetLocalString / DeleteLocalString + * GetLocalObject / SetLocalObject / DeleteLocalObject (NB: remember these are references NOT serialised objects) + * GetLocalLocation / SetLocalLocation / DeleteLocalLocation + * Plus a new function for saving just a vector by itself. + Since sometimes iterating over many locals is slow, this might be an excellent way to + speed up large amounts of access, or for debugging, or using regex or whatever else. + + These are functions for PC Object persistence only. See utl_i_sqlocals.nss for + the module saved version. +*/ +//::////////////////////////////////////////////// +//:: Based off of the nwscript_utility_scripts project; see for dates/creator info +//:: https://github.com/Finaldeath/nwscript_utility_scripts +//::////////////////////////////////////////////// + +const string SQLOCALSPLAYER_TABLE_NAME = "sqlocalsplayer_table"; + +const int SQLOCALSPLAYER_TYPE_ALL = 0; +const int SQLOCALSPLAYER_TYPE_INT = 1; +const int SQLOCALSPLAYER_TYPE_FLOAT = 2; +const int SQLOCALSPLAYER_TYPE_STRING = 4; +const int SQLOCALSPLAYER_TYPE_OBJECT = 8; +const int SQLOCALSPLAYER_TYPE_VECTOR = 16; +const int SQLOCALSPLAYER_TYPE_LOCATION = 32; + +// Returns an integer stored on oPlayer, or 0 on error +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +int SQLocalsPlayer_GetInt(object oPlayer, string sVarName); +// Sets an integer stored on oPlayer to the given value +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * nValue - Value to store +void SQLocalsPlayer_SetInt(object oPlayer, string sVarName, int nValue); +// Deletes an integer stored on oPlayer +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to delete +void SQLocalsPlayer_DeleteInt(object oPlayer, string sVarName); + +// Returns a float stored on oPlayer, or 0.0 on error +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +float SQLocalsPlayer_GetFloat(object oPlayer, string sVarName); +// Sets a float stored on oPlayer to the given value +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * fValue - Value to store +void SQLocalsPlayer_SetFloat(object oPlayer, string sVarName, float fValue); +// Deletes a float stored on oPlayer +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to delete +void SQLocalsPlayer_DeleteFloat(object oPlayer, string sVarName); + +// Returns an string stored on oPlayer, or "" on error +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +string SQLocalsPlayer_GetString(object oPlayer, string sVarName); +// Sets a string stored on oPlayer to the given value +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * sValue - Value to store +void SQLocalsPlayer_SetString(object oPlayer, string sVarName, string sValue); +// Deletes a string stored on oPlayer +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to delete +void SQLocalsPlayer_DeleteString(object oPlayer, string sVarName); + +// Returns an object identifier stored on oPlayer +// If this is used on a player it might return a "once valid" OID, so check +// with GetIsObjectValid, do not compare to OBJECT_INVALID. +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +object SQLocalsPlayer_GetObject(object oPlayer, string sVarName); +// Sets an object identifier stored on oPlayer to the given value +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * oValue - Value to store +void SQLocalsPlayer_SetObject(object oPlayer, string sVarName, object oValue); +// Deletes an object identifier stored on oPlayer +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to delete +void SQLocalsPlayer_DeleteObject(object oPlayer, string sVarName); + +// Returns a vector stored on oPlayer, or [0.0, 0.0, 0.0] on error +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +vector SQLocalsPlayer_GetVector(object oPlayer, string sVarName); +// Sets a vector stored on oPlayer to the given value +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * vValue - Value to store +void SQLocalsPlayer_SetVector(object oPlayer, string sVarName, vector vValue); +// Deletes a vector stored on oPlayer +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to delete +void SQLocalsPlayer_DeleteVector(object oPlayer, string sVarName); + +// Returns a location stored on oPlayer, or the starting location of the module on error +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +location SQLocalsPlayer_GetLocation(object oPlayer, string sVarName); +// Sets a location stored on oPlayer to the given value +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * lValue - Value to store +void SQLocalsPlayer_SetLocation(object oPlayer, string sVarName, location lValue); +// Deletes a location stored on oPlayer +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to delete +void SQLocalsPlayer_DeleteLocation(object oPlayer, string sVarName); + +// Deletes a set of locals stored on oPlayer matching the given criteria +// * oPlayer - a player object to save the variable on +// * nType - The SQLOCALSPLAYER_TYPE_* you wish to remove (default: SQLOCALSPLAYER_TYPE_ALL) +// * sLike - The string to compare with the SQL "like" comparison +// * sEscape - The escape character to use with the SQL "escape" keyword +void SQLocalsPlayer_Delete(object oPlayer, int nType = SQLOCALSPLAYER_TYPE_ALL, string sLike = "", string sEscape = ""); +// Counts a set of locals stored on oPlayer matching the given criteria +// * oPlayer - a player object to save the variable on +// * nType - The SQLOCALSPLAYER_TYPE_* you wish to count (default: SQLOCALSPLAYER_TYPE_ALL) +// * sLike - The string to compare with the SQL "like" comparison +// * sEscape - The escape character to use with the SQL "escape" keyword +int SQLocalsPlayer_Count(object oPlayer, int nType = SQLOCALSPLAYER_TYPE_ALL, string sLike = "", string sEscape = ""); +// Checks a locals stored on oPlayer is set +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * nType - The SQLOCALSPLAYER_TYPE_* you wish to check +int SQLocalsPlayer_IsSet(object oPlayer, string sVarName, int nType); +// Returns the last Unix time the given variable was updated +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * nType - The SQLOCALSPLAYER_TYPE_* you wish to check +int SQLocalsPlayer_GetLastUpdated_UnixEpoch(object oPlayer, string sVarName, int nType); +// Returns the last UTC time the given variable was updated +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * nType - The SQLOCALSPLAYER_TYPE_* you wish to check +string SQLocalsPlayer_GetLastUpdated_UTC(object oPlayer, string sVarName, int nType); + + +/* INTERNAL */ +void SQLocalsPlayer_CreateTable(object oPlayer) +{ + sqlquery sql = SqlPrepareQueryObject(oPlayer, + "CREATE TABLE IF NOT EXISTS " + SQLOCALSPLAYER_TABLE_NAME + " (" + + "type INTEGER, " + + "varname TEXT, " + + "value TEXT, " + + "timestamp INTEGER, " + + "PRIMARY KEY(type, varname));"); + SqlStep(sql); +} + +sqlquery SQLocalsPlayer_PrepareSelect(object oPlayer, int nType, string sVarName) +{ + SQLocalsPlayer_CreateTable(oPlayer); + + sqlquery sql = SqlPrepareQueryObject(oPlayer, + "SELECT value FROM " + SQLOCALSPLAYER_TABLE_NAME + " " + + "WHERE type = @type AND varname = @varname;"); + + SqlBindInt(sql, "@type", nType); + SqlBindString(sql, "@varname", sVarName); + + return sql; +} + +sqlquery SQLocalsPlayer_PrepareInsert(object oPlayer, int nType, string sVarName) +{ + SQLocalsPlayer_CreateTable(oPlayer); + + sqlquery sql = SqlPrepareQueryObject(oPlayer, + "INSERT INTO " + SQLOCALSPLAYER_TABLE_NAME + " " + + "(type, varname, value, timestamp) VALUES (@type, @varname, @value, strftime('%s','now')) " + + "ON CONFLICT (type, varname) DO UPDATE SET value = @value, timestamp = strftime('%s','now');"); + + SqlBindInt(sql, "@type", nType); + SqlBindString(sql, "@varname", sVarName); + + return sql; +} + +sqlquery SQLocalsPlayer_PrepareDelete(object oPlayer, int nType, string sVarName) +{ + SQLocalsPlayer_CreateTable(oPlayer); + + sqlquery sql = SqlPrepareQueryObject(oPlayer, + "DELETE FROM " + SQLOCALSPLAYER_TABLE_NAME + " " + + "WHERE type = @type AND varname = @varname;"); + + SqlBindInt(sql, "@type", nType); + SqlBindString(sql, "@varname", sVarName); + + return sql; +} + +string SQLocalsPlayer_LocationToString(location locLocation) +{ + string sAreaId = ObjectToString(GetAreaFromLocation(locLocation)); + vector vPosition = GetPositionFromLocation(locLocation); + float fFacing = GetFacingFromLocation(locLocation); + + return "#A#" + sAreaId + + "#X#" + FloatToString(vPosition.x, 0, 5) + + "#Y#" + FloatToString(vPosition.y, 0, 5) + + "#Z#" + FloatToString(vPosition.z, 0, 5) + + "#F#" + FloatToString(fFacing, 0, 5) + "#"; +} + +location SQLocalsPlayer_StringToLocation(string sLocation) +{ + location locLocation; + + int nLength = GetStringLength(sLocation); + + if(nLength > 0) + { + int nPos, nCount; + + nPos = FindSubString(sLocation, "#A#") + 3; + nCount = FindSubString(GetSubString(sLocation, nPos, nLength - nPos), "#"); + object oArea = StringToObject(GetSubString(sLocation, nPos, nCount)); + + nPos = FindSubString(sLocation, "#X#") + 3; + nCount = FindSubString(GetSubString(sLocation, nPos, nLength - nPos), "#"); + float fX = StringToFloat(GetSubString(sLocation, nPos, nCount)); + + nPos = FindSubString(sLocation, "#Y#") + 3; + nCount = FindSubString(GetSubString(sLocation, nPos, nLength - nPos), "#"); + float fY = StringToFloat(GetSubString(sLocation, nPos, nCount)); + + nPos = FindSubString(sLocation, "#Z#") + 3; + nCount = FindSubString(GetSubString(sLocation, nPos, nLength - nPos), "#"); + float fZ = StringToFloat(GetSubString(sLocation, nPos, nCount)); + + vector vPosition = Vector(fX, fY, fZ); + + nPos = FindSubString(sLocation, "#F#") + 3; + nCount = FindSubString(GetSubString(sLocation, nPos, nLength - nPos), "#"); + float fOrientation = StringToFloat(GetSubString(sLocation, nPos, nCount)); + + if (GetIsObjectValid(oArea)) + locLocation = Location(oArea, vPosition, fOrientation); + else + locLocation = GetStartingLocation(); + } + + return locLocation; +} +/* **** */ + +/* INT */ + +// Returns an integer stored on oPlayer, or 0 on error +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +int SQLocalsPlayer_GetInt(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return 0; + + sqlquery sql = SQLocalsPlayer_PrepareSelect(oPlayer, SQLOCALSPLAYER_TYPE_INT, sVarName); + + if (SqlStep(sql)) + return SqlGetInt(sql, 0); + else + return 0; +} + +// Sets an integer stored on oPlayer to the given value +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * nValue - Value to store +void SQLocalsPlayer_SetInt(object oPlayer, string sVarName, int nValue) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsPlayer_PrepareInsert(oPlayer, SQLOCALSPLAYER_TYPE_INT, sVarName); + SqlBindInt(sql, "@value", nValue); + SqlStep(sql); +} + +// Deletes an integer stored on oPlayer +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to delete +void SQLocalsPlayer_DeleteInt(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsPlayer_PrepareDelete(oPlayer, SQLOCALSPLAYER_TYPE_INT, sVarName); + SqlStep(sql); +} +/* **** */ + +/* FLOAT */ + +// Returns a float stored on oPlayer, or 0.0 on error +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +float SQLocalsPlayer_GetFloat(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return 0.0f; + + sqlquery sql = SQLocalsPlayer_PrepareSelect(oPlayer, SQLOCALSPLAYER_TYPE_FLOAT, sVarName); + + if (SqlStep(sql)) + return SqlGetFloat(sql, 0); + else + return 0.0f; +} + +// Sets a float stored on oPlayer to the given value +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * fValue - Value to store +void SQLocalsPlayer_SetFloat(object oPlayer, string sVarName, float fValue) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsPlayer_PrepareInsert(oPlayer, SQLOCALSPLAYER_TYPE_FLOAT, sVarName); + SqlBindFloat(sql, "@value", fValue); + SqlStep(sql); +} + +// Deletes a float stored on oPlayer +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to delete +void SQLocalsPlayer_DeleteFloat(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsPlayer_PrepareDelete(oPlayer, SQLOCALSPLAYER_TYPE_FLOAT, sVarName); + SqlStep(sql); +} +/* **** */ + +/* STRING */ + +// Returns an string stored on oPlayer, or "" on error +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +string SQLocalsPlayer_GetString(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return ""; + + sqlquery sql = SQLocalsPlayer_PrepareSelect(oPlayer, SQLOCALSPLAYER_TYPE_STRING, sVarName); + + if (SqlStep(sql)) + return SqlGetString(sql, 0); + else + return ""; +} + +// Sets a string stored on oPlayer to the given value +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * sValue - Value to store +void SQLocalsPlayer_SetString(object oPlayer, string sVarName, string sValue) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsPlayer_PrepareInsert(oPlayer, SQLOCALSPLAYER_TYPE_STRING, sVarName); + SqlBindString(sql, "@value", sValue); + SqlStep(sql); +} + +// Deletes a string stored on oPlayer +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to delete +void SQLocalsPlayer_DeleteString(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsPlayer_PrepareDelete(oPlayer, SQLOCALSPLAYER_TYPE_STRING, sVarName); + SqlStep(sql); +} +/* **** */ + +/* OBJECT */ + + +// Returns an object identifier stored on oPlayer +// If this is used on a player it might return a "once valid" OID, so check +// with GetIsObjectValid, do not compare to OBJECT_INVALID. +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +object SQLocalsPlayer_GetObject(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return OBJECT_INVALID; + + sqlquery sql = SQLocalsPlayer_PrepareSelect(oPlayer, SQLOCALSPLAYER_TYPE_OBJECT, sVarName); + + if (SqlStep(sql)) + return StringToObject(SqlGetString(sql, 0)); + else + return OBJECT_INVALID; +} + +// Sets an object identifier stored on oPlayer to the given value +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * oValue - Value to store +void SQLocalsPlayer_SetObject(object oPlayer, string sVarName, object oValue) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsPlayer_PrepareInsert(oPlayer, SQLOCALSPLAYER_TYPE_OBJECT, sVarName); + SqlBindString(sql, "@value", ObjectToString(oValue)); + SqlStep(sql); +} + +// Deletes an object identifier stored on oPlayer +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to delete +void SQLocalsPlayer_DeleteObject(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsPlayer_PrepareDelete(oPlayer, SQLOCALSPLAYER_TYPE_OBJECT, sVarName); + SqlStep(sql); +} +/* **** */ + +/* VECTOR */ + +// Returns a vector stored on oPlayer, or [0.0, 0.0, 0.0] on error +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +vector SQLocalsPlayer_GetVector(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return [0.0f, 0.0f, 0.0f]; + + sqlquery sql = SQLocalsPlayer_PrepareSelect(oPlayer, SQLOCALSPLAYER_TYPE_VECTOR, sVarName); + + if (SqlStep(sql)) + return SqlGetVector(sql, 0); + else + return [0.0f, 0.0f, 0.0f]; +} + +// Sets a vector stored on oPlayer to the given value +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * vValue - Value to store +void SQLocalsPlayer_SetVector(object oPlayer, string sVarName, vector vValue) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsPlayer_PrepareInsert(oPlayer, SQLOCALSPLAYER_TYPE_VECTOR, sVarName); + SqlBindVector(sql, "@value", vValue); + SqlStep(sql); +} + +// Deletes a vector stored on oPlayer +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to delete +void SQLocalsPlayer_DeleteVector(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsPlayer_PrepareDelete(oPlayer, SQLOCALSPLAYER_TYPE_VECTOR, sVarName); + SqlStep(sql); +} +/* **** */ + +/* LOCATION */ + +// Returns a location stored on oPlayer, or the starting location of the module on error +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +location SQLocalsPlayer_GetLocation(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return GetStartingLocation(); + + sqlquery sql = SQLocalsPlayer_PrepareSelect(oPlayer, SQLOCALSPLAYER_TYPE_LOCATION, sVarName); + + if (SqlStep(sql)) + return SQLocalsPlayer_StringToLocation(SqlGetString(sql, 0)); + else + return GetStartingLocation(); +} + +// Sets a location stored on oPlayer to the given value +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * lValue - Value to store +void SQLocalsPlayer_SetLocation(object oPlayer, string sVarName, location lValue) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsPlayer_PrepareInsert(oPlayer, SQLOCALSPLAYER_TYPE_LOCATION, sVarName); + SqlBindString(sql, "@value", SQLocalsPlayer_LocationToString(lValue)); + SqlStep(sql); +} + +// Deletes a location stored on oPlayer +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to delete +void SQLocalsPlayer_DeleteLocation(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsPlayer_PrepareDelete(oPlayer, SQLOCALSPLAYER_TYPE_LOCATION, sVarName); + SqlStep(sql); +} +/* **** */ + +/* UTILITY */ + +// Deletes a set of locals stored on oPlayer matching the given criteria +// * oPlayer - a player object to save the variable on +// * nType - The SQLOCALSPLAYER_TYPE_* you wish to remove (default: SQLOCALSPLAYER_TYPE_ALL) +// * sLike - The string to compare with the SQL "like" comparison +// * sEscape - The escape character to use with the SQL "escape" keyword +// Note if it is TYPE_ALL and sLike is "" then it will delete all values +void SQLocalsPlayer_Delete(object oPlayer, int nType = SQLOCALSPLAYER_TYPE_ALL, string sLike = "", string sEscape = "") +{ + if (!GetIsPC(oPlayer) || nType < 0) return; + + SQLocalsPlayer_CreateTable(oPlayer); + + sqlquery sql; + if(nType == SQLOCALSPLAYER_TYPE_ALL && sLike == "") + { + sql = SqlPrepareQueryObject(oPlayer, + "DELETE FROM " + SQLOCALSPLAYER_TABLE_NAME + ";"); + } + else + { + sql = SqlPrepareQueryObject(oPlayer, + "DELETE FROM " + SQLOCALSPLAYER_TABLE_NAME + " " + + "WHERE TRUE " + + (nType != SQLOCALSPLAYER_TYPE_ALL ? "AND type & @type " : " ") + + (sLike != "" ? "AND varname LIKE @like " + (sEscape != "" ? "ESCAPE @escape" : "") : "") + + ";"); + + + if (nType != SQLOCALSPLAYER_TYPE_ALL) + SqlBindInt(sql, "@type", nType); + if (sLike != "") + { + SqlBindString(sql, "@like", sLike); + + if (sEscape != "") + SqlBindString(sql, "@escape", sEscape); + } + } + + + SqlStep(sql); +} + +// Counts a set of locals stored on oPlayer matching the given criteria +// * oPlayer - a player object to save the variable on +// * nType - The SQLOCALSPLAYER_TYPE_* you wish to count (default: SQLOCALSPLAYER_TYPE_ALL) +// * sLike - The string to compare with the SQL "like" comparison +// * sEscape - The escape character to use with the SQL "escape" keyword +int SQLocalsPlayer_Count(object oPlayer, int nType = SQLOCALSPLAYER_TYPE_ALL, string sLike = "", string sEscape = "") +{ + if (!GetIsPC(oPlayer) || nType < 0) return 0; + + SQLocalsPlayer_CreateTable(oPlayer); + + sqlquery sql; + if(nType == SQLOCALSPLAYER_TYPE_ALL && sLike == "") + { + sql = SqlPrepareQueryObject(oPlayer, + "SELECT COUNT(*) FROM " + SQLOCALSPLAYER_TABLE_NAME + ";"); + } + else if(nType != SQLOCALSPLAYER_TYPE_ALL && sLike == "") + { + sql = SqlPrepareQueryObject(oPlayer, + "SELECT COUNT(*) FROM " + SQLOCALSPLAYER_TABLE_NAME + " " + + "WHERE type & @type;"); + + SqlBindInt(sql, "@type", nType); + } + else if(nType == SQLOCALSPLAYER_TYPE_ALL && sLike != "") + { + sql = SqlPrepareQueryObject(oPlayer, + "SELECT COUNT(*) FROM " + SQLOCALSPLAYER_TABLE_NAME + " " + + "varname LIKE @like " + (sEscape != "" ? "ESCAPE @escape" : "") + + ";"); + + SqlBindString(sql, "@like", sLike); + + if (sEscape != "") + SqlBindString(sql, "@escape", sEscape); + } + else + { + sql = SqlPrepareQueryObject(oPlayer, + "SELECT COUNT(*) FROM " + SQLOCALSPLAYER_TABLE_NAME + " " + + "WHERE type & @type " + + "AND varname LIKE @like " + (sEscape != "" ? "ESCAPE @escape" : "") + + ";"); + + SqlBindInt(sql, "@type", nType); + SqlBindString(sql, "@like", sLike); + + if (sEscape != "") + SqlBindString(sql, "@escape", sEscape); + } + + if (SqlStep(sql)) + return SqlGetInt(sql, 0); + else + return 0; +} + +// Checks a locals stored on oPlayer is set +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * nType - The SQLOCALSPLAYER_TYPE_* you wish to check (default: SQLOCALSPLAYER_TYPE_ALL) +int SQLocalsPlayer_IsSet(object oPlayer, string sVarName, int nType) +{ + if (!GetIsPC(oPlayer) || nType < 0) return 0; + + SQLocalsPlayer_CreateTable(oPlayer); + + sqlquery sql = SqlPrepareQueryObject(oPlayer, + "SELECT * FROM " + SQLOCALSPLAYER_TABLE_NAME + " " + + "WHERE AND varname = @varname" + + (nType != SQLOCALSPLAYER_TYPE_ALL ? "AND type & @type " : " ") + + ";"); + + if (nType != SQLOCALSPLAYER_TYPE_ALL) + SqlBindInt(sql, "@type", nType); + SqlBindString(sql, "@varname", sVarName); + + return SqlStep(sql); +} + +// Returns the last Unix time the given variable was updated +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * nType - The SQLOCALSPLAYER_TYPE_* you wish to check (default: SQLOCALSPLAYER_TYPE_ALL) +int SQLocalsPlayer_GetLastUpdated_UnixEpoch(object oPlayer, string sVarName, int nType) +{ + if (!GetIsPC(oPlayer) || nType <= 0) return 0; + + SQLocalsPlayer_CreateTable(oPlayer); + + sqlquery sql = SqlPrepareQueryObject(oPlayer, + "SELECT timestamp FROM " + SQLOCALSPLAYER_TABLE_NAME + " " + + "WHERE type = @type " + + "AND varname = @varname;"); + + SqlBindInt(sql, "@type", nType); + SqlBindString(sql, "@varname", sVarName); + + if (SqlStep(sql)) + return SqlGetInt(sql, 0); + else + return 0; +} + +// Returns the last UTC time the given variable was updated +// * oPlayer - a player object to save the variable on +// * sVarName - name of the variable to retrieve +// * nType - The SQLOCALSPLAYER_TYPE_* you wish to check (default: SQLOCALSPLAYER_TYPE_ALL) +string SQLocalsPlayer_GetLastUpdated_UTC(object oPlayer, string sVarName, int nType) +{ + if (!GetIsPC(oPlayer) || nType <= 0) return ""; + + SQLocalsPlayer_CreateTable(oPlayer); + + sqlquery sql = SqlPrepareQueryObject(oPlayer, + "SELECT datetime(timestamp, 'unixepoch') FROM " + SQLOCALSPLAYER_TABLE_NAME + " " + + "WHERE type = @type " + + "AND varname = @varname;"); + + SqlBindInt(sql, "@type", nType); + SqlBindString(sql, "@varname", sVarName); + + if (SqlStep(sql)) + return SqlGetString(sql, 0); + else + return ""; +} \ No newline at end of file diff --git a/src/include/inc_poison.nss b/src/include/inc_poison.nss new file mode 100644 index 0000000..13d2c32 --- /dev/null +++ b/src/include/inc_poison.nss @@ -0,0 +1,113 @@ +//:://///////////////////////////////////////////// +//:: Poison System includes +//:: inc_poison +//:://///////////////////////////////////////////// +//::////////////////////////////////////////////// +//:: Created By: Ornedan +//:: Created On: 12.12.2004 +//:: Updated On: 09.01.2005 +//::////////////////////////////////////////////// + + +const int POISONED_WEAPON_CASTERLEVEL = 1; + +const int STRREF_POISON_WORN_OFF = 16826227; +const int STRREF_POISON_APPLY_SUCCESS = 16826228; +const int STRREF_POISON_APPLY_FAILURE = 16826230; +const int STRREF_POISON_CLEAN_OFF_WEAPON = 16826229; +const int STRREF_POISON_NOT_VALID_FOR_WEAPON = 16826231; +const int STRREF_SHATTER_HARMLESS = 16826234; +const int STRREF_POISON_ITEM_USE_1 = 16826236; +const int STRREF_POISON_ITEM_USE_2 = 16826237; +const int STRREF_POISON_FOOD_USE_1 = 16826239; +const int STRREF_POISON_FOOD_USE_2 = 16826240; +const int STRREF_CLEAN_ITEM_SUCCESS = 16826242; +const int STRREF_CLEAN_ITEM_FAIL_1 = 16826243; +const int STRREF_CLEAN_ITEM_FAIL_2 = 16826244; +const int STRREF_INVALID_TARGET = 16826245; +const int STRREF_NOT_CONTACT_POISON = 16826246; +const int STRREF_TARGET_ALREADY_POISONED = 16826247; +const int STRREF_NOT_INGESTED_POISON = 16826251; +const int STRREF_TARGET_NOT_FOOD = 16826252; +const int STRREF_ACQUIRE_SPOT_SUCCESS1 = 16826253; +const int STRREF_ACQUIRE_SPOT_SUCCESS2 = 16826254; +const int STRREF_ONEQUIP_CLEAN_ITEM = 16826255; + +const int POISON_TYPE_CONTACT = 0; +const int POISON_TYPE_INGESTED = 1; +const int POISON_TYPE_INHALED = 2; +const int POISON_TYPE_INJURY = 3; + +/** + * Gets the type of the given poison. + * + * @param nPoison POISON_* constant + * @return POISON_TYPE_* constant + */ +int GetPoisonType(int nPoison); + + +// Poison removal handlers +void DoPoisonRemovalFromWeapon(object oWeapon); +void DoPoisonRemovalFromItem(object oItem); + + +//#include "inc_utility" +//#include "inc_poison_const" +#include "prc_inc_spells" +#include "prc_ipfeat_const" + +/**************************************************** +************** The implementations ****************** +****************************************************/ + +int GetPoisonType(int nPoison) +{ + return StringToInt(Get2DACache("poison", "Poison_Type", nPoison)); +} + +// Handles removing of itemproperties and locals on a poisoned weapon +void DoPoisonRemovalFromWeapon(object oWeapon) +{ + DeleteLocalInt(oWeapon, "pois_wpn_idx"); + DeleteLocalInt(oWeapon, "pois_wpn_uses"); + RemoveEventScript(oWeapon, EVENT_ITEM_ONHIT, "poison_wpn_onhit", TRUE, TRUE); + + // Remove the UniquePower only if poisoning the weapon added it. + if(GetLocalInt(oWeapon, "PoisonedWeapon_DoDelete")) + RemoveSpecificProperty(oWeapon, + ITEM_PROPERTY_ONHITCASTSPELL, + IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, + 0, + 1, + "", + -1, + DURATION_TYPE_PERMANENT); +} + +// Handles removing of itemproperties and locals on a poisoned item +void DoPoisonRemovalFromItem(object oItem) +{ + DeleteLocalInt(oItem, "pois_itm_idx"); + DeleteLocalInt(oItem, "pois_itm_uses"); + DeleteLocalInt(oItem, "pois_itm_trap_dc"); + DeleteLocalObject(oItem, "pois_itm_poisoner"); + + int nSafeCount = GetLocalInt(oItem, "pois_itm_safecount"); + DeleteLocalInt(oItem, "pois_itm_safecount"); + int i; + for(i = 1; i <= nSafeCount; i++) + DeleteLocalObject(oItem, "pois_itm_safe_" + IntToString(i)); + + RemoveSpecificProperty(oItem, + ITEM_PROPERTY_CAST_SPELL, + IP_CONST_CASTSPELL_CLEAN_POISON_OFF, + IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE, + 1, + "", + -1, + DURATION_TYPE_PERMANENT); + + RemoveEventScript(oItem, EVENT_ITEM_ONACQUIREITEM, "poison_onaquire", TRUE, TRUE); + RemoveEventScript(oItem, EVENT_ITEM_ONPLAYEREQUIPITEM, "poison_onequip", TRUE, TRUE); +} diff --git a/src/include/inc_prc_npc.nss b/src/include/inc_prc_npc.nss new file mode 100644 index 0000000..f8d5286 --- /dev/null +++ b/src/include/inc_prc_npc.nss @@ -0,0 +1,181 @@ +//:://///////////////////////////////////////////// +//:: NPC event wrapper include +//:: inc_prc_npc +//::////////////////////////////////////////////// +/** @file + Wrapper functions for getters used in module + events. Used to make the PRC evaluations + happening in events to work for NPCs, too. + + Event currently supported: + OnEquip + OnUnequip + OnDeath + OnRest + +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * A heartbeat function for NPCs. Checks if their equipped items have changed. + * Simulates OnEquip / OnUnEquip firing + * Since this should be fired from an NPCs hearbeat, OBJECT_SELF is assumed to + * be the NPC. + */ +void DoEquipTest(); + + +/* On(Un)Equip wrappers */ + +/** + * Wrapper for GetPCItemLastEquipped + */ +object GetItemLastEquipped(); + +/** + * Wrapper for GetPCItemLastEquippedBy + */ +object GetItemLastEquippedBy(); + +/** + * Wrapper for GetItemLastUnequipped + */ +object GetItemLastUnequipped(); + +/** + * Wrapper for GetPCItemLastUnequippedBy + */ +object GetItemLastUnequippedBy(); + + +/* OnDeath wrappers */ + +/** + * Wrapper for GetLastHostileActor and GetLastKiller + */ +object MyGetLastKiller(); + +/** + * Wrapper for GetLastPlayerDied + */ +object GetLastBeingDied(); + + +/* OnRest wrapper */ + +/** + * Wrapper for GetLastPCRested + */ +object GetLastBeingRested(); + +/** + * Wrapper for GetLastRestEventType + */ +int MyGetLastRestEventType(); + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +object GetItemLastEquippedBy() +{ + if(GetModule() == OBJECT_SELF || GetIsPC(OBJECT_SELF)) // prc_inc_function runs the class scripts on the PC instead of the module + return GetPCItemLastEquippedBy(); + else + return OBJECT_SELF; +} + +object GetItemLastUnequippedBy() +{ + if(GetModule() == OBJECT_SELF || GetIsPC(OBJECT_SELF)) + return GetPCItemLastUnequippedBy(); + else + return OBJECT_SELF; +} + +object GetItemLastEquipped() +{ + if(GetModule() == OBJECT_SELF || GetIsPC(OBJECT_SELF)) + return GetPCItemLastEquipped(); + else + return GetLocalObject(OBJECT_SELF, "oLastEquipped"); +} + +object GetItemLastUnequipped() +{ + if(GetModule() == OBJECT_SELF || GetIsPC(OBJECT_SELF)) + return GetPCItemLastUnequipped(); + else + return GetLocalObject(OBJECT_SELF, "oLastUnequipped"); +} + +void DoEquipTest() +{ + int i; + object oTest; + object oItem; + for(i=1; i=2000) + { + oTarget = CreateObject(OBJECT_TYPE_CREATURE,sResRef,lLimbo); + } + else + { + oTarget = CreateObject(OBJECT_TYPE_CREATURE,sResRef,GetLocation(oPC)); + } + if (!GetIsObjectValid(oTarget)) + { + SendMessageToPC(oPC, "Not a valid creature."); + // Remove the temporary creature + AssignCommand(oTarget,SetIsDestroyable(TRUE,FALSE,FALSE)); + SetPlotFlag(oTarget,FALSE); + SetImmortal(oTarget,FALSE); + DestroyObject(oTarget); + return FALSE; + } + else + { + //get the appearance before changing it + SetLocalInt(oTarget,"Appearance",GetAppearanceType(oTarget)); + //set appearance to invis so it dont show up when scripts run thro + SetCreatureAppearanceType(oTarget,APPEARANCE_TYPE_INVISIBLE_HUMAN_MALE); + //set oTarget for deletion + SetLocalInt(oTarget,"pnp_shifter_deleteme",1); + //Shift the PC to it + if (iExtraAbilitys == TRUE) + SetShiftEpic(oPC, oTarget); + else + SetShift(oPC, oTarget); + return TRUE; + } +} + +int PRC_Polymorph_Object(object oPC, object oTarget, int iExtraAbilitys, int iDeleteTarget, int iUseClone) +{ + StoreAppearance(oPC); + if (!CanShift(oPC)) + { + return FALSE; + } + if (iUseClone == TRUE) + { + string sResRef = GetResRef(oTarget); + int i = 0; + object oLimbo = GetObjectByTag("Limbo", i); + location lLimbo; + while (i < 100) + { + if (GetIsObjectValid(oLimbo)) + { + if (GetName(oLimbo) == "Limbo") + { + i = 2000; + vector vLimbo = Vector(0.0f, 0.0f, 0.0f); + lLimbo = Location(oLimbo, vLimbo, 0.0f); + } + } + i++; + object oLimbo = GetObjectByTag("Limbo", i); + } + if (i>=2000) + { + oTarget = CreateObject(OBJECT_TYPE_CREATURE,sResRef,lLimbo); + } + else + { + oTarget = CreateObject(OBJECT_TYPE_CREATURE,sResRef,GetLocation(oPC)); + } + } + if (!GetIsObjectValid(oTarget)) + { + SendMessageToPC(oPC, "Not a valid creature."); + // Remove the temporary creature + AssignCommand(oTarget,SetIsDestroyable(TRUE,FALSE,FALSE)); + SetPlotFlag(oTarget,FALSE); + SetImmortal(oTarget,FALSE); + DestroyObject(oTarget); + return FALSE; + } + else + { + SetLocalInt(oTarget,"Appearance",GetAppearanceType(oTarget)); + if (iDeleteTarget == TRUE) + { + //set oTarget for deletion + SetLocalInt(oTarget,"pnp_shifter_deleteme",1); + } + //Shift the PC to it + if (iExtraAbilitys == TRUE) + SetShiftEpic(oPC, oTarget); + else + SetShift(oPC, oTarget); + return TRUE; + } +} + +int PRC_Polymorph_Check(object oPC) +{ + return GetPersistantLocalInt(oPC, "nPCShifted"); +} + +void PRC_UnPolymorph(object oPC) +{ + ExecuteScript("pnp_shft_true", oPC); +} + + +// Test main +//void main(){} diff --git a/src/include/inc_rand_equip.nss b/src/include/inc_rand_equip.nss new file mode 100644 index 0000000..814f533 --- /dev/null +++ b/src/include/inc_rand_equip.nss @@ -0,0 +1,4637 @@ +/** @file + Primogenitor's Random Equipment Functions + + This include file contains a group of functions that will create equipment + on the creatures they are called upon. + The equipment will be just the basic bioware defaults, so you will have to + add/replace with enchanted versions yourself. + If the target already has equipment, this will be created and equiped instead. + However, the AI may restore the other if it is better. + + To use, include this file in a script. + Then call EquipWeapon, EquipArmor, and/or EquipMisc from the OnSpawn + Best used if spawned out of combat, otherwise they may not equip + Aslo, call these after any levelling has been done to use gained feats + If used on creatures with claws/bites/slams then the handed weapons will be + used instead of the natural weapons, even if they are inferior. + + + @author Primogenitor + + @todo See what functions can be replaced with stuff from inc_utility (and linked files) +*/ + +#include "prc_misc_const" +#include "prc_feat_const" + + +//Major PREF function +//spawns a unenchanted weapon randomly picked from +//those most suitable. +//takes into acount feats such as martial proficiency, weapon focus, improved critical +//dual weilding, weapon of choice, and shield proficiency +void EquipWeapon(object oObject = OBJECT_SELF); + +//Major PREF function +//spawns a unenchanted armor randomly picked from +//those most suitable +//will spawn clothing as well so you shouldnt have any nudists! +//may not be visible on non-dynamic models such as many monsters +void EquipArmor(object oObject = OBJECT_SELF); + +//Major PREF function +//spawns unenchanted other equipment randomly picked +//also adds potions, modified by level +//also adds scrolls, modified by spellcaster level +//also adds healing kits, modified by heal skill +void EquipMisc(object oObject = OBJECT_SELF); + +object EquipLightArmor(object oObject); +object EquipMediumArmor(object oObject); +object EquipHeavyArmor(object oObject); +object EquipClothes(object oObject); + +void EquipAmmo(object oObject = OBJECT_SELF); +object EquipWeaponOfChoice(object oObject); +object EquipEpicWeaponSpecialization(object oObject); +object EquipWeaponSpecialization(object oObject); +object EquipDevastatingCritical(object oObject); +object EquipEpicWeaponFocus(object oObject); +object EquipOverwhelmingCritical(object oObject); +object EquipImprovedCritical(object oObject); +object EquipWeaponFocus(object oObject); +object EquipWeaponProfDruid(object oObject, int nHands = 1); +object EquipWeaponProfRogue(object oObject, int nHands = 1); +object EquipWeaponProfElf(object oObject, int nHands = 1); +object EquipWeaponProfWizard(object oObject, int nHands = 1); +object EquipWeaponProfSimple(object oObject, int nHands = 1); +object EquipWeaponProfMartial(object oObject, int nHands = 1); +object EquipWeaponProfExotic(object oObject, int nHands = 1); +object EquipShield(object oObject); +void EquipScroll(object oObject); + +int GetCanDualWeild(object oObject); +int GetIsLeftHandFree(object oObject, object oWeapon); + +int IsItemWeapon(object oItem); +int PrimoGetWeaponSize(object oItem); +string GetBaseResRef(int nBaseItemType); + +int EQUIPSPAWNDEBUG = FALSE;//TRUE; + +void EquipDebugString(string sDebug) +{ + if(EQUIPSPAWNDEBUG) + { + SendMessageToPC(GetFirstPC(), sDebug); + SendMessageToAllDMs(sDebug); + WriteTimestampedLogEntry(sDebug); + } +} + +void EquipAmmo(object oObject = OBJECT_SELF) +{ + object oWeapon = oObject; + oObject = GetItemPossessor(oWeapon); + int nBaseItemType = GetBaseItemType(oWeapon); + if (nBaseItemType == BASE_ITEM_DART + ||nBaseItemType == BASE_ITEM_SHURIKEN + ||nBaseItemType == BASE_ITEM_THROWINGAXE) + SetItemStackSize(oWeapon, 99); + else if (nBaseItemType == BASE_ITEM_HEAVYCROSSBOW + ||nBaseItemType ==BASE_ITEM_LIGHTCROSSBOW) + { + oWeapon = CreateItemOnObject("nw_wambo001", oObject, 99); + ActionEquipItem(oWeapon, INVENTORY_SLOT_BOLTS); + } + else if (nBaseItemType == BASE_ITEM_LONGBOW + ||nBaseItemType ==BASE_ITEM_SHORTBOW) + { + oWeapon = CreateItemOnObject("nw_wamar001", oObject, 99); + ActionEquipItem(oWeapon, INVENTORY_SLOT_ARROWS); + } + else if (nBaseItemType == BASE_ITEM_SLING) + { + oWeapon = CreateItemOnObject("nw_wambu001", oObject, 99); + ActionEquipItem(oWeapon, INVENTORY_SLOT_BULLETS); + } + return; +} + +string FilledIntToString2(int nX) +{ + string sReturn = ""; + if (nX < 100) + sReturn = sReturn + "0"; + if (nX < 10) + sReturn = sReturn + "0"; + sReturn = sReturn + IntToString(nX); + return sReturn; +} + +void EquipWeapon(object oObject = OBJECT_SELF) +{ + object oWeaponLH; + object oWeaponRH; + + if(GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK,oObject) == TRUE) + { + if(GetCanDualWeild(oObject) == TRUE) + { + //dual kamas + oWeaponRH = CreateItemOnObject("nw_wspka001", oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + oWeaponLH = CreateItemOnObject("nw_wspka001", oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + EquipDebugString(GetName(oObject) + "Is dual Kama monk"); + return; + } + EquipDebugString(GetName(oObject) + "is Barefist Monk"); + return;//use fists + //monk weapons + } + else if(GetLevelByClass(CLASS_TYPE_WEAPON_MASTER, oObject) > 0) + { + oWeaponRH = EquipWeaponOfChoice(oObject); + EquipAmmo(oWeaponRH); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)) + { + if(GetCanDualWeild(oObject)) + { + oWeaponLH = EquipWeaponOfChoice(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + return; + } + else if(GetHasFeat(FEAT_SHIELD_PROFICIENCY, oObject)) + { + oWeaponLH = EquipShield(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + return; + } + else + { + oWeaponLH = EquipWeaponOfChoice(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + return; + } + } + return; + } + else if(GetLevelByClass(CLASS_TYPE_FIGHTER, oObject) > 0) + { + oWeaponRH = EquipEpicWeaponSpecialization(oObject); + if(GetIsObjectValid(oWeaponRH)) + { + EquipAmmo(oWeaponRH); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)) + { + if(GetCanDualWeild(oObject)) + { + oWeaponLH = EquipEpicWeaponSpecialization(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + else if(GetHasFeat(FEAT_SHIELD_PROFICIENCY, oObject)) + { + oWeaponLH = EquipShield(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + else + { + oWeaponLH = EquipEpicWeaponSpecialization(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + } + return; + } + oWeaponRH = EquipWeaponSpecialization(oObject); + if(GetIsObjectValid(oWeaponRH)) + { + EquipAmmo(oWeaponRH); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)) + { + if(GetCanDualWeild(oObject)) + { + oWeaponLH = EquipWeaponSpecialization(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + else if(GetHasFeat(FEAT_SHIELD_PROFICIENCY, oObject)) + { + oWeaponLH = EquipShield(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + else + { + oWeaponLH = EquipWeaponSpecialization(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + } + return; + } + } + + oWeaponRH = EquipDevastatingCritical(oObject); + if(GetIsObjectValid(oWeaponRH)) + { + EquipAmmo(oWeaponRH); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)) + { + if(GetCanDualWeild(oObject)) + { + oWeaponLH = EquipDevastatingCritical(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + else if(GetHasFeat(FEAT_SHIELD_PROFICIENCY, oObject)) + { + oWeaponLH = EquipShield(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + else + { + oWeaponLH = EquipDevastatingCritical(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + } + return; + } + + oWeaponRH = EquipEpicWeaponFocus(oObject); + if(GetIsObjectValid(oWeaponRH)) + { + EquipAmmo(oWeaponRH); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)) + { + if(GetCanDualWeild(oObject)) + { + oWeaponLH = EquipEpicWeaponFocus(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + else if(GetHasFeat(FEAT_SHIELD_PROFICIENCY, oObject)) + { + oWeaponLH = EquipShield(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + else + { + oWeaponLH = EquipEpicWeaponFocus(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + } + return; + } + + + oWeaponRH = EquipOverwhelmingCritical(oObject); + if(GetIsObjectValid(oWeaponRH)) + { + EquipAmmo(oWeaponRH); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)) + { + if(GetCanDualWeild(oObject)) + { + oWeaponLH = EquipOverwhelmingCritical(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + else if(GetHasFeat(FEAT_SHIELD_PROFICIENCY, oObject)) + { + oWeaponLH = EquipShield(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + else + { + oWeaponLH = EquipOverwhelmingCritical(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + } + return; + } + + oWeaponRH = EquipImprovedCritical(oObject); + if(GetIsObjectValid(oWeaponRH)) + { + EquipAmmo(oWeaponRH); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)) + { + if(GetCanDualWeild(oObject)) + { + oWeaponLH = EquipImprovedCritical(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + else if(GetHasFeat(FEAT_SHIELD_PROFICIENCY, oObject)) + { + oWeaponLH = EquipShield(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + else + { + oWeaponLH = EquipImprovedCritical(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + } + return; + } + + oWeaponRH = EquipWeaponFocus(oObject); + if(GetIsObjectValid(oWeaponRH)) + { + EquipAmmo(oWeaponRH); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)) + { + if(GetCanDualWeild(oObject)) + { + oWeaponLH = EquipWeaponFocus(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + else if(GetHasFeat(FEAT_SHIELD_PROFICIENCY, oObject)) + { + oWeaponLH = EquipShield(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + else + { + oWeaponLH = EquipWeaponFocus(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + } + return; + } + + if(GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oObject) == TRUE) + { + if(GetCanDualWeild(oObject) == TRUE) + { + oWeaponRH = EquipWeaponProfDruid(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)==TRUE) + { + oWeaponLH = EquipWeaponProfDruid(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + return; + } + else if(GetHasFeat(FEAT_SHIELD_PROFICIENCY, oObject) == TRUE + && Random (2) == 1) + { + oWeaponRH = EquipWeaponProfDruid(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)==TRUE) + { + oWeaponLH = EquipShield(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + return; + } + else + { + oWeaponRH = EquipWeaponProfDruid(oObject,2); + EquipAmmo(oWeaponRH); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + } + return; + } + else if(GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oObject) == TRUE) + { + if(GetCanDualWeild(oObject) == TRUE) + { + oWeaponRH = EquipWeaponProfExotic(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)==TRUE) + { + oWeaponLH = EquipWeaponProfExotic(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + return; + } + else if(GetHasFeat(FEAT_SHIELD_PROFICIENCY, oObject) == TRUE + && Random (2) == 1) + { + oWeaponRH = EquipWeaponProfExotic(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)==TRUE) + { + oWeaponLH = EquipShield(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + return; + } + else + { + oWeaponRH = EquipWeaponProfExotic(oObject,2); + EquipAmmo(oWeaponRH); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + } + return; + } + else if(GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oObject) == TRUE) + { + if(GetCanDualWeild(oObject) == TRUE) + { + oWeaponRH = EquipWeaponProfMartial(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)==TRUE) + { + oWeaponLH = EquipWeaponProfMartial(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + } + else if(GetHasFeat(FEAT_SHIELD_PROFICIENCY, oObject) == TRUE + && Random (2) == 1) + { + oWeaponRH = EquipWeaponProfMartial(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)==TRUE) + { + oWeaponLH = EquipShield(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + } + else + { + oWeaponRH = EquipWeaponProfMartial(oObject,2); + EquipAmmo(oWeaponRH); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + } + return; + } + else if(GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oObject) == TRUE) + { + //elves only have accss to medium and large weapons + //two medium swords, short and long bows + if(GetCanDualWeild(oObject) == TRUE + && GetCreatureSize(oObject) >= CREATURE_SIZE_MEDIUM) + { + oWeaponRH = EquipWeaponProfElf(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)==TRUE) + { + oWeaponLH = EquipWeaponProfElf(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + return; + } + else if(GetHasFeat(FEAT_SHIELD_PROFICIENCY, oObject) == TRUE + && GetCreatureSize(oObject) >= CREATURE_SIZE_MEDIUM + && Random (2) == 1) + { + oWeaponRH = EquipWeaponProfElf(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)==TRUE) + { + oWeaponLH = EquipShield(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + return; + } + else if(GetCreatureSize(oObject) >= CREATURE_SIZE_MEDIUM) + { + oWeaponRH = EquipWeaponProfElf(oObject,2); + EquipAmmo(oWeaponRH); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + return; + } + else + { + //fall through + } + } + else if(GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oObject) == TRUE) + { + if(GetCanDualWeild(oObject) == TRUE) + { + oWeaponRH = EquipWeaponProfRogue(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)==TRUE) + { + oWeaponLH = EquipWeaponProfRogue(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + } + else if(GetHasFeat(FEAT_SHIELD_PROFICIENCY, oObject) == TRUE + && Random (2) == 1) + { + oWeaponRH = EquipWeaponProfRogue(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)==TRUE) + { + oWeaponLH = EquipShield(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + } + else + { + oWeaponRH = EquipWeaponProfRogue(oObject,2); + EquipAmmo(oWeaponRH); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + } + return; + } + else if(GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oObject) == TRUE) + { + if(GetCanDualWeild(oObject) == TRUE) + { + oWeaponRH = EquipWeaponProfSimple(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)==TRUE) + { + oWeaponLH = EquipWeaponProfSimple(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + } + else if(GetHasFeat(FEAT_SHIELD_PROFICIENCY, oObject) == TRUE + && Random (2) == 1) + { + oWeaponRH = EquipWeaponProfSimple(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)==TRUE) + { + oWeaponLH = EquipShield(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + } + else + { + oWeaponRH = EquipWeaponProfSimple(oObject,2); + EquipAmmo(oWeaponRH); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + } + return; + } + else if(GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oObject) == TRUE) + { + if(GetCanDualWeild(oObject) == TRUE) + { + oWeaponRH = EquipWeaponProfWizard(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)==TRUE) + { + oWeaponLH = EquipWeaponProfWizard(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + } + else if(GetHasFeat(FEAT_SHIELD_PROFICIENCY, oObject) == TRUE + && Random (2) == 1) + { + oWeaponRH = EquipWeaponProfWizard(oObject,1); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + if(GetIsLeftHandFree(oObject, oWeaponRH)==TRUE) + { + oWeaponLH = EquipShield(oObject); + AssignCommand(oObject, ActionEquipItem(oWeaponLH,INVENTORY_SLOT_LEFTHAND)); + } + } + else + { + oWeaponRH = EquipWeaponProfWizard(oObject,2); + EquipAmmo(oWeaponRH); + AssignCommand(oObject, ActionEquipItem(oWeaponRH,INVENTORY_SLOT_RIGHTHAND)); + } + return; + } +} + +object EquipWeaponProfSimple(object oObject, int nHands = 1) +{ + int nMaxSize; + object oItem; + int nLowNumber; + int nHighNumber; + + if(nHands < 1 || nHands > 2) + nHands = Random(2)+1; + + if(nHands == 1) + { + nMaxSize = GetCreatureSize(oObject); + switch (nMaxSize) + { + case CREATURE_SIZE_HUGE: + //fallthrough + case CREATURE_SIZE_LARGE: + nLowNumber = 8; + nHighNumber = 12; + break; + case CREATURE_SIZE_MEDIUM: + nLowNumber = 7; + nHighNumber = 9; + break; + case CREATURE_SIZE_SMALL: + nLowNumber = 0; + nHighNumber = 6; + break; + case CREATURE_SIZE_TINY: + nLowNumber = 0; + nHighNumber = 0; + break; + } + } + else if(nHands == 2) + { + nMaxSize = GetCreatureSize(oObject)+1; + switch (nMaxSize) + { + case CREATURE_SIZE_HUGE: + //fallthrough + case CREATURE_SIZE_LARGE: + nLowNumber = 7; + nHighNumber = 12; + break; + case CREATURE_SIZE_MEDIUM: + nLowNumber = 6; + nHighNumber = 12; + break; + case CREATURE_SIZE_SMALL: + nLowNumber = 1; + nHighNumber = 9; + break; + case CREATURE_SIZE_TINY: + nLowNumber = 0; + nHighNumber = 0; + break; + } + } + + int nRandom = nLowNumber+Random(nHighNumber-nLowNumber+1); + string sResRef; + switch(nRandom) + { + //:: Tiny size + case 0:// Dagger + sResRef = "nw_wswdg001"; + break; + + //:: Small size + case 1:// Spear + sResRef = "nw_wplss001"; + break; + case 2: // Mace + sResRef = "nw_wblml001"; + break; + case 3:// Sickle + sResRef = "nw_wspsc001"; + break; + case 4:// Goad + sResRef = "prc_wspgd001"; + break; + case 5:// Dart + sResRef = "nw_wthdt001"; + break; + case 6:// Sling + sResRef = "nw_wbwsl001"; + break; + case 7:// Light Xbow + sResRef = "nw_wbwxl001"; + break; + + //:: Medium size + case 8:// Club + sResRef = "nw_wblcl001"; + break; + case 9: // Morningstar + sResRef = "nw_wblms001"; + break; + case 10: // Heavy Mace + sResRef = "prc_wxblmh001"; + break; + case 11: // Heavy Xbow + sResRef = "nw_wbwxh001"; + break; + + //:: Large size + case 12:// Quarterstaff + sResRef = "nw_wdbqs001"; + break; + //none + } + oItem = CreateItemOnObject(sResRef,oObject); + return oItem; +} + +object EquipWeaponProfMartial(object oObject, int nHands = 1) +{ + int nMaxSize; + object oItem; + int nLowNumber; + int nHighNumber; + + if(nHands < 1 || nHands > 2) + nHands = Random(2)+1; + + if(nHands == 1) + { + nMaxSize = GetCreatureSize(oObject); + switch (nMaxSize) + { + case CREATURE_SIZE_HUGE: + //fallthrough + case CREATURE_SIZE_LARGE: + nLowNumber = 14; + nHighNumber = 20; + break; + case CREATURE_SIZE_MEDIUM: + nLowNumber = 0; + nHighNumber = 12; + break; + case CREATURE_SIZE_SMALL: + nLowNumber = 0; + nHighNumber = 5; + break; + case CREATURE_SIZE_TINY: + //no tiny martials + //use simple instead + oItem = EquipWeaponProfSimple(oObject, nHands); + return oItem; + break; + } + } + else if(nHands == 2) + { + nMaxSize = GetCreatureSize(oObject)+1; + switch (nMaxSize) + { + case CREATURE_SIZE_HUGE: + //fallthrough + case CREATURE_SIZE_LARGE: + nLowNumber = 13; + nHighNumber = 21; + break; + case CREATURE_SIZE_MEDIUM: + nLowNumber = 13; + nHighNumber = 21; + break; + case CREATURE_SIZE_SMALL: + nLowNumber = 0; + nHighNumber = 5; + break; + case CREATURE_SIZE_TINY: + //no tiny martials + //use simple instead + oItem = EquipWeaponProfSimple(oObject, nHands); + return oItem; + break; + } + } + + int nRandom = nLowNumber+Random(nHighNumber-nLowNumber+1); + string sResRef; + switch(nRandom) + { + //:: Tiny size + // no tiny martials + + //:: Small size + case 0:// Handaxe + sResRef = "nw_waxhn001"; + break; + case 1:// Light Hammer + sResRef = "nw_wblmhl001"; + break; + case 2:// Short Sword + sResRef = "nw_wswss001"; + break; + case 3:// Throwing Axe + sResRef = "nw_wthax001"; + break; + case 4:// Light Pick + sResRef = "prc_wblpl001"; + break; + case 5:// Sap + sResRef = "prc_wspsp001"; + break; + + //:: Medium size + case 6:// Battleaxe + sResRef = "nw_waxbt001"; + break; + case 7:// Light Flail + sResRef = "nw_wblfl001"; + break; + case 8:// Longsword + sResRef = "nw_wswls001"; + break; + case 9:// Rapier + sResRef = "nw_wswrp001"; + break; + case 10:// Scimitar + sResRef = "nw_wswsc001"; + break; + case 11:// Warhammer + sResRef = "nw_wblhw001"; + break; + case 12:// Heavy Pick + sResRef = "prc_wswhp001"; + break; + case 13:// Shortbow + sResRef = "nw_wbwsh001"; + break; + + //:: Large size + case 14:// Greataxe + sResRef = "nw_waxgr001"; + break; + case 15:// Greatsword + sResRef = "nw_wswgs001"; + break; + case 16:// Halberd + sResRef = "nw_wplhb001"; + break; + case 17:// Heavy Flail + sResRef = "nw_wblfh001"; + break; + case 18:// Falchion + sResRef = "prc_wswfa001"; + break; + case 19:// Maul + sResRef = "prc_wxblma001"; + break; + case 20:// Trident + sResRef = "nw_wpltr001"; + break; + case 21:// Longbow + sResRef = "nw_wbwln001"; + break; + //none + } + oItem = CreateItemOnObject(sResRef,oObject); + return oItem; +} + +object EquipWeaponProfExotic(object oObject, int nHands = 1) +{ + int nMaxSize; + object oItem; + int nLowNumber; + int nHighNumber; + + if(nHands < 1 || nHands > 2) + nHands = Random(2)+1; + + if(nHands == 1) + { + nMaxSize = GetCreatureSize(oObject); + switch (nMaxSize) + { + case CREATURE_SIZE_HUGE: + //fallthrough + case CREATURE_SIZE_LARGE: + nLowNumber = 6; + nHighNumber = 10; + break; + case CREATURE_SIZE_MEDIUM: + nLowNumber = 3; + nHighNumber = 5; + break; + case CREATURE_SIZE_SMALL: + nLowNumber = 0; + nHighNumber = 7; + break; + case CREATURE_SIZE_TINY: + nLowNumber = 0; + nHighNumber = 4; + break; + } + } + else if(nHands == 2) + { + nMaxSize = GetCreatureSize(oObject)+1; + switch (nMaxSize) + { + case CREATURE_SIZE_HUGE: + //fallthrough + case CREATURE_SIZE_LARGE: + nLowNumber = 15; + nHighNumber = 10; + break; + case CREATURE_SIZE_MEDIUM: + nLowNumber = 8; + nHighNumber = 18; + break; + case CREATURE_SIZE_SMALL: + nLowNumber = 5; + nHighNumber = 7; + break; + case CREATURE_SIZE_TINY: + nLowNumber = 0; + nHighNumber = 2; + break; + } + } + + int nRandom = nLowNumber+Random(nHighNumber-nLowNumber+1); + string sResRef; + switch(nRandom) + { + //:: Tiny size + case 0:// Kama + sResRef = "nw_wspka001"; + break; + case 1:// Kukri + sResRef = "nw_wspku001"; + break; + case 2:// Sai + sResRef = "prc_wswsi001"; + break; + case 3:// Katar + sResRef = "prc_wswdp001"; + break; + case 4:// Shuriken + sResRef = "nw_wthsh001"; + break; + + //:: Small size + case 5:// Nunchaku + sResRef = "prc_wspnn001"; + break; + case 6:// Elven Lightblade + sResRef = "prc_wspel001"; + break; + case 7:// Eagle Claw + sResRef = "prc_wswec001"; + break; + + //:: Medium size + case 8:// Dwarven Waraxe + sResRef = "x2_wdwraxe001"; + break; + case 9:// Katana + sResRef = "nw_wswka001"; + break; + case 10:// Elven Thinblade + sResRef = "prc_wspet001"; + break; + case 11:// Whip + sResRef = "x2_it_wpwhip"; + break; + + //:: Large size + case 12:// Bastard Sword + sResRef = "nw_wswbs001"; + break; + case 13:// Scythe + sResRef = "nw_wplsc001"; + break; + case 14:// Elven Courtblade + sResRef = "prc_wspec001"; + break; + case 15:// Diremace + sResRef = "nw_wdbma001"; + break; + case 16:// Double Axe + sResRef = "nw_wdbax001"; + break; + case 17:// Double Sword + sResRef = "nw_wdbsw001"; + break; + case 18:// Double Scimitar + sResRef = "prc_wxdbsc001"; + break; + //none + } + oItem = CreateItemOnObject(sResRef,oObject); + return oItem; +} + +void EquipArmor(object oObject = OBJECT_SELF) +{ + object oItem; + if(GetHasFeat(FEAT_ARMOR_PROFICIENCY_HEAVY, oObject) == TRUE + && GetLevelByClass(CLASS_TYPE_WIZARD, oObject) == 0 + && GetLevelByClass(CLASS_TYPE_SORCERER, oObject) == 0 + && GetLevelByClass(CLASS_TYPE_BARD, oObject) == 0) + oItem = EquipHeavyArmor(oObject); + else if(GetHasFeat(FEAT_ARMOR_PROFICIENCY_MEDIUM, oObject) == TRUE + && GetLevelByClass(CLASS_TYPE_WIZARD, oObject) == 0 + && GetLevelByClass(CLASS_TYPE_SORCERER, oObject) == 0) + oItem = EquipMediumArmor(oObject); + else if(GetHasFeat(FEAT_ARMOR_PROFICIENCY_LIGHT, oObject) == TRUE + && GetLevelByClass(CLASS_TYPE_WIZARD, oObject) == 0) + oItem = EquipLightArmor(oObject); + else + oItem = EquipClothes(oObject); + AssignCommand(oObject, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST)); +} + +void EquipMisc(object oObject = OBJECT_SELF) +{ + int nLevel = GetHitDice(oObject); + object oItem; + //other stuff + //belt + if((Random(10) + nLevel) > 14) + { + oItem = CreateItemOnObject("belt",oObject); + AssignCommand(oObject, ActionEquipItem(oItem, INVENTORY_SLOT_BELT)); + } + //boots + if((Random(10) + nLevel) > 10) + { + oItem = CreateItemOnObject("boots",oObject); + AssignCommand(oObject, ActionEquipItem(oItem, INVENTORY_SLOT_BOOTS)); + } + //bracers + if((Random(10) + nLevel) > 15) + { + oItem = CreateItemOnObject("bracers",oObject); + AssignCommand(oObject, ActionEquipItem(oItem, INVENTORY_SLOT_ARMS)); + } + //amulet + if((Random(10) + nLevel) > 20) + { + oItem = CreateItemOnObject("amulet",oObject); + AssignCommand(oObject, ActionEquipItem(oItem, INVENTORY_SLOT_NECK)); + } + //ring + if((Random(10) + nLevel) > 23) + { + oItem = CreateItemOnObject("ring",oObject); + AssignCommand(oObject, ActionEquipItem(oItem, INVENTORY_SLOT_RIGHTRING)); + } + if((Random(10) + nLevel) > 23) + { + oItem = CreateItemOnObject("ring",oObject); + AssignCommand(oObject, ActionEquipItem(oItem,INVENTORY_SLOT_LEFTRING)); + } + //potions + int nCount = nLevel + d6() - 3; + int i; + for (i=1;i<=nCount;i++) + { + oItem = CreateItemOnObject("NW_IT_MPOTION"+FilledIntToString2(Random(23)+1),oObject); + if(GetGoldPieceValue(oItem)>25*nLevel) + DestroyObject(oItem); + if(GetGoldPieceValue(oItem)<5*nLevel) + DestroyObject(oItem); + } + //scrolls + EquipScroll(oObject); + //healing kits + nCount = GetSkillRank(SKILL_HEAL, oObject)/5+d6()-3; + for (i=1;i<=nCount;i++) + { + oItem = CreateItemOnObject("nw_it_medkit"+FilledIntToString2(Random(4)+1),oObject); + } + //lock picks + +} + +object EquipShield(object oObject) +{ + int nRandom = Random(3); + object oItem; + if(GetCreatureSize(oObject) <=CREATURE_SIZE_SMALL) + oItem = CreateItemOnObject("nw_ashsw001",oObject); + else if(GetCreatureSize(oObject) == CREATURE_SIZE_MEDIUM) + oItem = CreateItemOnObject("nw_ashlw001",oObject); + else if(GetCreatureSize(oObject) >= CREATURE_SIZE_LARGE) + oItem = CreateItemOnObject("nw_ashto001",oObject); + return oItem; +} + +object EquipWeaponProfDruid(object oObject, int nHands = 1) +{ + int nMaxSize; + object oItem; + int nLowNumber; + int nHighNumber; + + if(nHands < 1 || nHands > 2) + nHands = Random(2)+1; + + if(nHands == 1) + { + nMaxSize = GetCreatureSize(oObject); + switch (nMaxSize) + { + case CREATURE_SIZE_HUGE: + //fallthrough + case CREATURE_SIZE_LARGE: + nLowNumber = 6; + nHighNumber = 6; + break; + case CREATURE_SIZE_MEDIUM: + nLowNumber = 5; + nHighNumber = 5; + break; + case CREATURE_SIZE_SMALL: + nLowNumber = 1; + nHighNumber = 2; + break; + case CREATURE_SIZE_TINY: + nLowNumber = 0; + nHighNumber = 0; + break; + } + } + else if(nHands == 2) + { + nMaxSize = GetCreatureSize(oObject)+1; + switch (nMaxSize) + { + case CREATURE_SIZE_HUGE: + //fallthrough + case CREATURE_SIZE_LARGE: + nLowNumber = 6; + nHighNumber = 6; + break; + case CREATURE_SIZE_MEDIUM: + nLowNumber = 5; + nHighNumber = 5; + break; + case CREATURE_SIZE_SMALL: + nLowNumber = 1; + nHighNumber = 4; + break; + case CREATURE_SIZE_TINY: + nLowNumber = 0; + nHighNumber = 0; + break; + } + } + + int nRandom = nLowNumber+Random(nHighNumber-nLowNumber+1); + string sResRef; + switch(nRandom) + { + //tiny size + case 0://dagger + sResRef = "nw_wswdg001"; + break; + //small size + case 1://short spear + sResRef = "nw_wplss001"; + break; + case 2://scicle + sResRef = "nw_wspsc001"; + break; + case 3://sling + sResRef = "nw_wbwsl001"; + break; + case 4://dart + sResRef = "nw_wthdt001"; + break; + //medium size + case 5://scimitar + sResRef = "nw_wswsc001"; + break; + //large size + case 6://quarterstaff + sResRef = "nw_wdbqs001"; + break; + //none + } + oItem = CreateItemOnObject(sResRef,oObject); + return oItem; +} + +object EquipWeaponProfRogue(object oObject, int nHands = 1) +{ + int nMaxSize; + object oItem; + int nLowNumber; + int nHighNumber; + + if(nHands < 1 || nHands > 2) + nHands = Random(2)+1; + + if(nHands == 1) + { + nMaxSize = GetCreatureSize(oObject); + switch (nMaxSize) + { + case CREATURE_SIZE_HUGE: + //fallthrough + case CREATURE_SIZE_LARGE: + nLowNumber = 13; + nHighNumber = 13; + break; + case CREATURE_SIZE_MEDIUM: + nLowNumber = 7; + nHighNumber = 12; + break; + case CREATURE_SIZE_SMALL: + nLowNumber = 1; + nHighNumber = 5; + break; + case CREATURE_SIZE_TINY: + nLowNumber = 0; + nHighNumber = 0; + break; + } + } + else if(nHands == 2) + { + nMaxSize = GetCreatureSize(oObject)+1; + switch (nMaxSize) + { + case CREATURE_SIZE_HUGE: + //fallthrough + case CREATURE_SIZE_LARGE: + nLowNumber = 13; + nHighNumber = 13; + break; + case CREATURE_SIZE_MEDIUM: + nLowNumber = 7; + nHighNumber = 12; + break; + case CREATURE_SIZE_SMALL: + nLowNumber = 1; + nHighNumber = 7; + break; + case CREATURE_SIZE_TINY: + nLowNumber = 0; + nHighNumber = 0; + break; + } + } + + int nRandom = nLowNumber+Random(nHighNumber-nLowNumber+1); + string sResRef; + switch(nRandom) + { + //:: Tiny size + case 0:// Dagger + sResRef = "nw_wswdg001"; + break; + + //:: Small size + case 1:// Light Mace + sResRef = "w_wblml001"; + break; + case 2:// Short Sword + sResRef = "nw_wswss001"; + break; + case 3:// Handaxe + sResRef = "nw_waxhn001"; + break; + case 4:// Sap + sResRef = "prc_wspsp001"; + break; + case 5:// Dart + sResRef = "nw_wthdt001"; + break; + case 6:// Sling + sResRef = "nw_wbwsl001"; + break; + case 7:// Light Xbow + sResRef = "nw_wbwxl001"; + break; + + //:: Medium size + case 8://club + sResRef = "nw_wblcl001"; + break; + case 9://morning star + sResRef = "nw_wblms001"; + break; + case 10://rapier + sResRef = "nw_wswrp001"; + break; + case 11://shorbow + sResRef = "nw_wbwsh001"; + break; + case 12://heavy xbow + sResRef = "w_wbwxh001"; + break; + + //:: Large size + case 13://quarterstaff + sResRef = "nw_wdbqs001"; + break; + } + oItem = CreateItemOnObject(sResRef,oObject); + return oItem; +} + +object EquipWeaponProfWizard(object oObject, int nHands = 1) +{ + int nMaxSize; + object oItem; + int nLowNumber; + int nHighNumber; + + if(nHands < 1 || nHands > 2) + nHands = Random(2)+1; + + if(nHands == 1) + { + nMaxSize = GetCreatureSize(oObject); + switch (nMaxSize) + { + case CREATURE_SIZE_HUGE: + //fallthrough + case CREATURE_SIZE_LARGE: + nLowNumber = 4; + nHighNumber = 4; + break; + case CREATURE_SIZE_MEDIUM: + nLowNumber = 2; + nHighNumber = 2; + break; + case CREATURE_SIZE_SMALL: + //no small onehanded wizard, fall through + case CREATURE_SIZE_TINY: + nLowNumber = 0; + nHighNumber = 0; + break; + } + } + else if(nHands == 2) + { + nMaxSize = GetCreatureSize(oObject)+1; + switch (nMaxSize) + { + case CREATURE_SIZE_HUGE: + //fallthrough + case CREATURE_SIZE_LARGE: + nLowNumber = 4; + nHighNumber = 4; + break; + case CREATURE_SIZE_MEDIUM: + nLowNumber = 2; + nHighNumber = 3; + break; + case CREATURE_SIZE_SMALL: + nLowNumber = 1; + nHighNumber = 1; + break; + case CREATURE_SIZE_TINY: + nLowNumber = 0; + nHighNumber = 0; + break; + } + } + + int nRandom = nLowNumber+Random(nHighNumber-nLowNumber+1); + string sResRef; + switch(nRandom) + { + //tiny size + case 0://dagger + sResRef = "nw_wswdg001"; + break; + //small size + case 1://light xbow + sResRef = "nw_wbwxl001"; + break; + //medium size + case 2://club + sResRef = "nw_wblcl001"; + break; + case 3://heavy xbow + sResRef = "w_wbwxh001"; + break; + //large size + case 4://quarterstaff + sResRef = "nw_wdbqs001"; + break; + } + oItem = CreateItemOnObject(sResRef,oObject); + return oItem; +} + +object EquipWeaponProfElf(object oObject, int nHands = 1) +{ + int nMaxSize; + object oItem; + int nLowNumber; + int nHighNumber; + + if(nHands < 1 || nHands > 2) + nHands = Random(2)+1; + + if(nHands == 1) + { + nMaxSize = GetCreatureSize(oObject); + switch (nMaxSize) + { + case CREATURE_SIZE_HUGE: + //fallthrough + case CREATURE_SIZE_LARGE: + //fallthrough + case CREATURE_SIZE_MEDIUM: + nLowNumber = 0; + nHighNumber = 1; + break; + //should never happen to be small or tiny + case CREATURE_SIZE_SMALL: + case CREATURE_SIZE_TINY: + return OBJECT_INVALID; + } + } + else if(nHands == 2) + { + nMaxSize = GetCreatureSize(oObject)+1; + switch (nMaxSize) + { + case CREATURE_SIZE_HUGE: + //fallthrough + case CREATURE_SIZE_LARGE: + nLowNumber = 3; + nHighNumber = 3; + break; + case CREATURE_SIZE_MEDIUM: + nLowNumber = 0; + nHighNumber = 2; + break; + case CREATURE_SIZE_SMALL: + case CREATURE_SIZE_TINY: + return OBJECT_INVALID; + } + } + + int nRandom = nLowNumber+Random(nHighNumber-nLowNumber+1); + string sResRef; + switch(nRandom) + { + //:: Tiny size + // No tiny + + //:: Small size + // No small + + //:: Medium size + case 0:// Rapier + sResRef = "nw_wswrp001"; + break; + case 1:// Longsword + sResRef = "nw_wswls001"; + break; + case 2:// Short Bow + sResRef = "nw_wbwsh001"; + break; + + //:: Large size + case 3:// Longbow + sResRef = "nw_wbwln001"; + break; + } + oItem = CreateItemOnObject(sResRef,oObject); + return oItem; + +} + +object EquipWeaponOfChoice(object oObject) +{ + string sResRef; + if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_BASTARDSWORD, oObject)) + sResRef = "nw_wswbs001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_BATTLEAXE, oObject)) + sResRef = "nw_waxbt001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_CLUB, oObject)) + sResRef = "nw_wblcl001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_DAGGER, oObject)) + sResRef = "nw_wswdg001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_DIREMACE, oObject)) + sResRef = "nw_wdbma001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_DOUBLEAXE, oObject)) + sResRef = "nw_wdbax001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_DWAXE, oObject)) + sResRef = "x2_wdwraxe001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_GREATAXE, oObject)) + sResRef = "nw_waxgr001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_GREATSWORD, oObject)) + sResRef = "nw_wswgs001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_HALBERD, oObject)) + sResRef = "nw_wplhb001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_HANDAXE, oObject)) + sResRef = "nw_waxhn001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_HEAVYFLAIL, oObject)) + sResRef = "nw_wblfh001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_KAMA, oObject)) + sResRef = "nw_wspka001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_KATANA, oObject)) + sResRef = "nw_wswka001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_KUKRI, oObject)) + sResRef = "nw_wspku001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTFLAIL, oObject)) + sResRef = "nw_wblfl001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTHAMMER, oObject)) + sResRef = "nw_wblmhl001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTMACE, oObject)) + sResRef = "w_wblml001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_LONGSWORD, oObject)) + sResRef = "nw_wswls001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_MORNINGSTAR, oObject)) + sResRef = "nw_wblms001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_QUARTERSTAFF, oObject)) + sResRef = "nw_wdbqs001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_RAPIER, oObject)) + sResRef = "nw_wswrp001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_SCIMITAR, oObject)) + sResRef = "nw_wswsc001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_SCYTHE, oObject)) + sResRef = "nw_wplsc001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_SHORTSPEAR, oObject)) + sResRef = "nw_wplss001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_SHORTSWORD, oObject)) + sResRef = "nw_wswss001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_SICKLE, oObject)) + sResRef = "nw_wspsc001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_TWOBLADEDSWORD, oObject)) + sResRef = "nw_wdbsw001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_WARHAMMER, oObject)) + sResRef = "nw_wblhw001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_DBL_SCIMITAR , oObject)) + sResRef = "prc_wxdbsc001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_EAGLE_CLAW , oObject)) + sResRef = "prc_wswec001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_ELVEN_COURTBLADE, oObject)) + sResRef = "prc_wspec001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_ELVEN_LIGHTBLADE, oObject)) + sResRef = "prc_wspel001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_ELVEN_THINBLADE, oObject)) + sResRef = "prc_wspet001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_FALCHION, oObject)) + sResRef = "prc_wswfa001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_GOAD, oObject)) + sResRef = "prc_wspgd001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_HEAVY_MACE, oObject)) + sResRef = "prc_wxblmh001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_HEAVY_PICK, oObject)) + sResRef = "prc_wswhp001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_KATAR, oObject)) + sResRef = "prc_wswdp001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHT_LANCE, oObject)) + sResRef = "prc_wpllc001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHT_PICK, oObject)) + sResRef = "prc_wblpl001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_MAUL, oObject)) + sResRef = "prc_wxblma001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_NUNCHAKU, oObject)) + sResRef = "prc_wspnn001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_SAI, oObject)) + sResRef = "prc_wswsi001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_SAP, oObject)) + sResRef = "prc_wswsi001"; + else if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_TRIDENT, oObject)) + sResRef = "nw_wpltr001"; + + if(sResRef == "") + return OBJECT_INVALID; + object oItem = CreateItemOnObject(sResRef,oObject); + EquipDebugString(GetName(oObject) + " has WeaponOfChoice "+GetName(oItem)); + return oItem; +} + +object EquipEpicWeaponSpecialization(object oObject) +{ + int nRandom = Random(55); + int nStartingPoint = nRandom; + int nBaseItemType = -1; + int bFirst = TRUE; + while(nBaseItemType == -1) + { + switch(nRandom) + { + case 0: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_BASTARDSWORD,oObject)) + nBaseItemType = BASE_ITEM_BASTARDSWORD; + break; + case 1: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_BATTLEAXE,oObject)) + nBaseItemType = BASE_ITEM_BATTLEAXE; + break; + case 2: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_CLUB,oObject)) + nBaseItemType = BASE_ITEM_CLUB; + break; + case 3: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_DAGGER,oObject)) + nBaseItemType = BASE_ITEM_DAGGER; + break; + case 4: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_DART,oObject)) + nBaseItemType = BASE_ITEM_DART; + break; + case 5: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_DIREMACE,oObject)) + nBaseItemType = BASE_ITEM_DIREMACE; + break; + case 6: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_DOUBLEAXE,oObject)) + nBaseItemType = BASE_ITEM_DOUBLEAXE; + break; + case 7: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_DWAXE,oObject)) + nBaseItemType = BASE_ITEM_DWARVENWARAXE; + break; + case 8: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_GREATAXE,oObject)) + nBaseItemType = BASE_ITEM_GREATAXE; + break; + case 9: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_GREATSWORD,oObject)) + nBaseItemType = BASE_ITEM_GREATSWORD; + break; + case 10: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_HALBERD,oObject)) + nBaseItemType = BASE_ITEM_HALBERD; + break; + case 11: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_HANDAXE,oObject)) + nBaseItemType = BASE_ITEM_HANDAXE; + break; + case 12: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVYCROSSBOW,oObject)) + nBaseItemType = BASE_ITEM_HEAVYCROSSBOW; + break; + case 13: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVYFLAIL,oObject)) + nBaseItemType = BASE_ITEM_HEAVYFLAIL; + break; + case 14: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_KAMA,oObject)) + nBaseItemType = BASE_ITEM_KAMA; + break; + case 15: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_KATANA,oObject)) + nBaseItemType = BASE_ITEM_KATANA; + break; + case 16: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_KUKRI,oObject)) + nBaseItemType = BASE_ITEM_KUKRI; + break; + case 17: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTCROSSBOW,oObject)) + nBaseItemType = BASE_ITEM_LIGHTCROSSBOW; + break; + case 18: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTFLAIL,oObject)) + nBaseItemType = BASE_ITEM_LIGHTFLAIL; + break; + case 19: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTHAMMER,oObject)) + nBaseItemType = BASE_ITEM_LIGHTHAMMER; + break; + case 20: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTMACE,oObject)) + nBaseItemType = BASE_ITEM_LIGHTMACE; + break; + case 21: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_LONGBOW,oObject)) + nBaseItemType = BASE_ITEM_LONGBOW; + break; + case 22: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD,oObject)) + nBaseItemType = BASE_ITEM_LONGSWORD; + break; + case 23: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_MORNINGSTAR,oObject)) + nBaseItemType = BASE_ITEM_MORNINGSTAR; + break; + case 24: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_QUARTERSTAFF,oObject)) + nBaseItemType = BASE_ITEM_QUARTERSTAFF; + break; + case 25: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_RAPIER,oObject)) + nBaseItemType = BASE_ITEM_RAPIER; + break; + case 26: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_SCIMITAR,oObject)) + nBaseItemType = BASE_ITEM_SCIMITAR; + break; + case 27: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_SCYTHE,oObject)) + nBaseItemType = BASE_ITEM_SCYTHE; + break; + case 28: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTBOW,oObject)) + nBaseItemType = BASE_ITEM_SHORTBOW; + break; + case 29: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTSPEAR,oObject)) + nBaseItemType = BASE_ITEM_SHORTSPEAR; + break; + case 30: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTSWORD,oObject)) + nBaseItemType = BASE_ITEM_SHORTSWORD; + break; + case 31: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_SHURIKEN,oObject)) + nBaseItemType = BASE_ITEM_SHURIKEN; + break; + case 32: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_SICKLE,oObject)) + nBaseItemType = BASE_ITEM_SICKLE; + break; + case 33: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_SLING,oObject)) + nBaseItemType = BASE_ITEM_SLING; + break; + case 34: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_THROWINGAXE,oObject)) + nBaseItemType = BASE_ITEM_THROWINGAXE; + break; + case 35: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_TWOBLADEDSWORD,oObject)) + nBaseItemType = BASE_ITEM_TWOBLADEDSWORD; + break; + case 36: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_WARHAMMER,oObject)) + nBaseItemType = BASE_ITEM_WARHAMMER; + break; + case 37: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_EAGLE_CLAW,oObject)) + nBaseItemType = BASE_ITEM_EAGLE_CLAW; + break; + case 38: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_LIGHTBLADE; + break; + case 39: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_THINBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_THINBLADE; + break; + case 40: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_KATAR,oObject)) + nBaseItemType = BASE_ITEM_KATAR; + break; + case 41: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_NUNCHAKU,oObject)) + nBaseItemType = BASE_ITEM_NUNCHAKU; + break; + case 42: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_SAI,oObject)) + nBaseItemType = BASE_ITEM_SAI; + break; + case 43: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_PICK,oObject)) + nBaseItemType = BASE_ITEM_LIGHT_PICK; + break; + case 44: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_SAP,oObject)) + nBaseItemType = BASE_ITEM_SAP; + break; + case 45: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_GOAD,oObject)) + nBaseItemType = BASE_ITEM_GOAD; + break; + case 46: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_PICK,oObject)) + nBaseItemType = BASE_ITEM_HEAVY_PICK; + break; + case 47: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_MACE,oObject)) + nBaseItemType = BASE_ITEM_HEAVY_MACE; + break; + case 48: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_COURTBLADE; + break; + case 49: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_DBL_SCIMITAR,oObject)) + nBaseItemType = BASE_ITEM_DOUBLE_SCIMITAR; + break; + case 60: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_FALCHION,oObject)) + nBaseItemType = BASE_ITEM_FALCHION; + break; + case 51: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_LANCE,oObject)) + nBaseItemType = BASE_ITEM_LIGHT_LANCE; + break; + case 52: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_MAUL,oObject)) + nBaseItemType = BASE_ITEM_MAUL; + break; + case 53: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_TRIDENT,oObject)) + nBaseItemType = BASE_ITEM_TRIDENT; + break; + case 54: + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_WHIP,oObject)) + nBaseItemType = BASE_ITEM_WHIP; + break; + + } + if(nBaseItemType == -1) + { + nRandom++; + if(nRandom >=55 ) + nRandom = 0; + if(nRandom == nStartingPoint + && bFirst == FALSE) + nBaseItemType = -2; + } + bFirst = FALSE; + } + if(nBaseItemType == -2) + return OBJECT_INVALID; + object oItem = CreateItemOnObject(GetBaseResRef(nBaseItemType),oObject); + EquipDebugString(GetName(oObject) + " has EpicWeaponSpec "+GetName(oItem)); + return oItem; +} + +object EquipWeaponSpecialization(object oObject) +{ + int nRandom = Random(55); + int nStartingPoint = nRandom; + int nBaseItemType = -1; + int bFirst = TRUE; + while(nBaseItemType == -1) + { + switch(nRandom) + { + case 0: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_BASTARD_SWORD,oObject)) + nBaseItemType = BASE_ITEM_BASTARDSWORD; + break; + case 1: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_BATTLE_AXE,oObject)) + nBaseItemType = BASE_ITEM_BATTLEAXE; + break; + case 2: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_CLUB,oObject)) + nBaseItemType = BASE_ITEM_CLUB; + break; + case 3: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_DAGGER,oObject)) + nBaseItemType = BASE_ITEM_DAGGER; + break; + case 4: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_DART,oObject)) + nBaseItemType = BASE_ITEM_DART; + break; + case 5: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_DIRE_MACE,oObject)) + nBaseItemType = BASE_ITEM_DIREMACE; + break; + case 6: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_DOUBLE_AXE,oObject)) + nBaseItemType = BASE_ITEM_DOUBLEAXE; + break; + case 7: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_DWAXE,oObject)) + nBaseItemType = BASE_ITEM_DWARVENWARAXE; + break; + case 8: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_GREAT_AXE,oObject)) + nBaseItemType = BASE_ITEM_GREATAXE; + break; + case 9: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_GREAT_SWORD,oObject)) + nBaseItemType = BASE_ITEM_GREATSWORD; + break; + case 10: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_HALBERD,oObject)) + nBaseItemType = BASE_ITEM_HALBERD; + break; + case 11: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_HAND_AXE,oObject)) + nBaseItemType = BASE_ITEM_HANDAXE; + break; + case 12: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_HEAVY_CROSSBOW,oObject)) + nBaseItemType = BASE_ITEM_HEAVYCROSSBOW; + break; + case 13: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_HEAVY_FLAIL,oObject)) + nBaseItemType = BASE_ITEM_HEAVYFLAIL; + break; + case 14: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_KAMA,oObject)) + nBaseItemType = BASE_ITEM_KAMA; + break; + case 15: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_KATANA,oObject)) + nBaseItemType = BASE_ITEM_KATANA; + break; + case 16: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_KUKRI,oObject)) + nBaseItemType = BASE_ITEM_KUKRI; + break; + case 17: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LIGHT_CROSSBOW,oObject)) + nBaseItemType = BASE_ITEM_LIGHTCROSSBOW; + break; + case 18: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LIGHT_FLAIL,oObject)) + nBaseItemType = BASE_ITEM_LIGHTFLAIL; + break; + case 19: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LIGHT_HAMMER,oObject)) + nBaseItemType = BASE_ITEM_LIGHTHAMMER; + break; + case 20: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LIGHT_MACE,oObject)) + nBaseItemType = BASE_ITEM_LIGHTMACE; + break; + case 21: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LONG_SWORD,oObject)) + nBaseItemType = BASE_ITEM_LONGSWORD; + break; + case 22: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LONGBOW,oObject)) + nBaseItemType = BASE_ITEM_LONGBOW; + break; + case 23: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_MORNING_STAR,oObject)) + nBaseItemType = BASE_ITEM_MORNINGSTAR; + break; + case 24: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_STAFF,oObject)) + nBaseItemType = BASE_ITEM_QUARTERSTAFF; + break; + case 25: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_RAPIER,oObject)) + nBaseItemType = BASE_ITEM_RAPIER; + break; + case 26: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SCIMITAR,oObject)) + nBaseItemType = BASE_ITEM_SCIMITAR; + break; + case 27: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SCYTHE,oObject)) + nBaseItemType = BASE_ITEM_SCYTHE; + break; + case 28: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SHORT_SWORD,oObject)) + nBaseItemType = BASE_ITEM_SHORTSWORD; + break; + case 29: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SHORTBOW,oObject)) + nBaseItemType = BASE_ITEM_SHORTBOW; + break; + case 30: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SHURIKEN,oObject)) + nBaseItemType = BASE_ITEM_SHURIKEN; + break; + case 31: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SICKLE,oObject)) + nBaseItemType = BASE_ITEM_SICKLE; + break; + case 32: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SLING,oObject)) + nBaseItemType = BASE_ITEM_SLING; + break; + case 33: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SPEAR,oObject)) + nBaseItemType = BASE_ITEM_SHORTSPEAR; + break; + case 34: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_THROWING_AXE,oObject)) + nBaseItemType = BASE_ITEM_THROWINGAXE; + break; + case 35: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_TWO_BLADED_SWORD,oObject)) + nBaseItemType = BASE_ITEM_TWOBLADEDSWORD; + break; + case 36: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_WAR_HAMMER,oObject)) + nBaseItemType = BASE_ITEM_WARHAMMER; + break; + case 37: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_EAGLE_CLAW,oObject)) + nBaseItemType = BASE_ITEM_EAGLE_CLAW; + break; + case 38: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_LIGHTBLADE; + break; + case 39: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_ELVEN_THINBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_THINBLADE; + break; + case 40: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_KATAR,oObject)) + nBaseItemType = BASE_ITEM_KATAR; + break; + case 41: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_NUNCHAKU,oObject)) + nBaseItemType = BASE_ITEM_NUNCHAKU; + break; + case 42: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SAI,oObject)) + nBaseItemType = BASE_ITEM_SAI; + break; + case 43: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LIGHT_PICK,oObject)) + nBaseItemType = BASE_ITEM_LIGHT_PICK; + break; + case 44: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SAP,oObject)) + nBaseItemType = BASE_ITEM_SAP; + break; + case 45: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_GOAD,oObject)) + nBaseItemType = BASE_ITEM_GOAD; + break; + case 46: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_HEAVY_PICK,oObject)) + nBaseItemType = BASE_ITEM_HEAVY_PICK; + break; + case 47: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_HEAVY_MACE,oObject)) + nBaseItemType = BASE_ITEM_HEAVY_MACE; + break; + case 48: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_COURTBLADE; + break; + case 49: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_DBL_SCIMITAR,oObject)) + nBaseItemType = BASE_ITEM_DOUBLE_SCIMITAR; + break; + case 50: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_FALCHION,oObject)) + nBaseItemType = BASE_ITEM_FALCHION; + break; + case 51: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LIGHT_LANCE,oObject)) + nBaseItemType = BASE_ITEM_LIGHT_LANCE; + break; + case 52: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_MAUL,oObject)) + nBaseItemType = BASE_ITEM_MAUL; + break; + case 53: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_TRIDENT,oObject)) + nBaseItemType = BASE_ITEM_TRIDENT; + break; + case 54: + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_WHIP,oObject)) + nBaseItemType = BASE_ITEM_WHIP; + break; + } + if(nBaseItemType == -1) + { + nRandom++; + if(nRandom >=55 ) + nRandom = 0; + if(nRandom == nStartingPoint + && bFirst == FALSE) + nBaseItemType = -2; + } + bFirst = FALSE; + } + if(nBaseItemType == -2) + return OBJECT_INVALID; + object oItem = CreateItemOnObject(GetBaseResRef(nBaseItemType),oObject); + EquipDebugString(GetName(oObject) + " has WeaponSpec "+GetName(oItem)); + return oItem; +} + +object EquipDevastatingCritical(object oObject) +{ + int nRandom = Random(55); + int nStartingPoint = nRandom; + int nBaseItemType = -1; + int bFirst = TRUE; + while(nBaseItemType == -1) + { + switch(nRandom) + { + case 0: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_BASTARDSWORD,oObject)) + nBaseItemType = BASE_ITEM_BASTARDSWORD; + break; + case 1: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_BATTLEAXE,oObject)) + nBaseItemType = BASE_ITEM_BATTLEAXE; + break; + case 2: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_CLUB,oObject)) + nBaseItemType = BASE_ITEM_CLUB; + break; + case 3: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_DAGGER,oObject)) + nBaseItemType = BASE_ITEM_DAGGER; + break; + case 4: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_DART,oObject)) + nBaseItemType = BASE_ITEM_DART; + break; + case 5: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_DIREMACE,oObject)) + nBaseItemType = BASE_ITEM_DIREMACE; + break; + case 6: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_DOUBLEAXE,oObject)) + nBaseItemType = BASE_ITEM_DOUBLEAXE; + break; + case 7: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_DWAXE,oObject)) + nBaseItemType = BASE_ITEM_DWARVENWARAXE; + break; + case 8: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_GREATAXE,oObject)) + nBaseItemType = BASE_ITEM_GREATAXE; + break; + case 9: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_GREATSWORD,oObject)) + nBaseItemType = BASE_ITEM_GREATSWORD; + break; + case 10: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_HALBERD,oObject)) + nBaseItemType = BASE_ITEM_HALBERD; + break; + case 11: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_HANDAXE,oObject)) + nBaseItemType = BASE_ITEM_HANDAXE; + break; + case 12: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_HEAVYCROSSBOW,oObject)) + nBaseItemType = BASE_ITEM_HEAVYCROSSBOW; + break; + case 13: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_HEAVYFLAIL,oObject)) + nBaseItemType = BASE_ITEM_HEAVYFLAIL; + break; + case 14: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_KAMA,oObject)) + nBaseItemType = BASE_ITEM_KAMA; + break; + case 15: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_KATANA,oObject)) + nBaseItemType = BASE_ITEM_KATANA; + break; + case 16: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_KUKRI,oObject)) + nBaseItemType = BASE_ITEM_KUKRI; + break; + case 17: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTCROSSBOW,oObject)) + nBaseItemType = BASE_ITEM_LIGHTCROSSBOW; + break; + case 18: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTFLAIL,oObject)) + nBaseItemType = BASE_ITEM_LIGHTFLAIL; + break; + case 19: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTHAMMER,oObject)) + nBaseItemType = BASE_ITEM_LIGHTHAMMER; + break; + case 20: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTMACE,oObject)) + nBaseItemType = BASE_ITEM_LIGHTMACE; + break; + case 21: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_LONGBOW,oObject)) + nBaseItemType = BASE_ITEM_LONGBOW; + break; + case 22: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_LONGSWORD,oObject)) + nBaseItemType = BASE_ITEM_LONGSWORD; + break; + case 23: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_MORNINGSTAR,oObject)) + nBaseItemType = BASE_ITEM_MORNINGSTAR; + break; + case 24: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_QUARTERSTAFF,oObject)) + nBaseItemType = BASE_ITEM_QUARTERSTAFF; + break; + case 25: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_RAPIER,oObject)) + nBaseItemType = BASE_ITEM_RAPIER; + break; + case 26: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_SCIMITAR,oObject)) + nBaseItemType = BASE_ITEM_SCIMITAR; + break; + case 27: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_SCYTHE,oObject)) + nBaseItemType = BASE_ITEM_SCYTHE; + break; + case 28: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_SHORTBOW,oObject)) + nBaseItemType = BASE_ITEM_SHORTBOW; + break; + case 29: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_SHORTSPEAR,oObject)) + nBaseItemType = BASE_ITEM_SHORTSPEAR; + break; + case 30: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_SHORTSWORD,oObject)) + nBaseItemType = BASE_ITEM_SHORTSWORD; + break; + case 31: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_SHURIKEN,oObject)) + nBaseItemType = BASE_ITEM_SHURIKEN; + break; + case 32: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_SICKLE,oObject)) + nBaseItemType = BASE_ITEM_SICKLE; + break; + case 33: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_SLING,oObject)) + nBaseItemType = BASE_ITEM_SLING; + break; + case 34: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_THROWINGAXE,oObject)) + nBaseItemType = BASE_ITEM_THROWINGAXE; + break; + case 35: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_TWOBLADEDSWORD,oObject)) + nBaseItemType = BASE_ITEM_TWOBLADEDSWORD; + break; + case 36: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_WARHAMMER,oObject)) + nBaseItemType = BASE_ITEM_WARHAMMER; + break; + case 37: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_EAGLE_CLAW,oObject)) + nBaseItemType = BASE_ITEM_EAGLE_CLAW; + break; + case 38: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_ELVEN_LIGHTBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_LIGHTBLADE; + break; + case 39: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_ELVEN_THINBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_THINBLADE; + break; + case 40: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_KATAR,oObject)) + nBaseItemType = BASE_ITEM_KATAR; + break; + case 41: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_NUNCHAKU,oObject)) + nBaseItemType = BASE_ITEM_NUNCHAKU; + break; + case 42: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_SAI,oObject)) + nBaseItemType = BASE_ITEM_SAI; + break; + case 43: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_LIGHT_PICK,oObject)) + nBaseItemType = BASE_ITEM_LIGHT_PICK; + break; + case 44: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_SAP,oObject)) + nBaseItemType = BASE_ITEM_SAP; + break; + case 45: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_GOAD,oObject)) + nBaseItemType = BASE_ITEM_GOAD; + break; + case 46: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_HEAVY_PICK,oObject)) + nBaseItemType = BASE_ITEM_HEAVY_PICK; + break; + case 47: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_HEAVY_MACE,oObject)) + nBaseItemType = BASE_ITEM_HEAVY_MACE; + break; + case 48: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_ELVEN_COURTBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_COURTBLADE; + break; + case 49: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_DBL_SCIMITAR,oObject)) + nBaseItemType = BASE_ITEM_DOUBLE_SCIMITAR; + break; + case 50: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_FALCHION,oObject)) + nBaseItemType = BASE_ITEM_FALCHION; + break; + case 51: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_LIGHT_LANCE,oObject)) + nBaseItemType = BASE_ITEM_LIGHT_LANCE; + break; + case 52: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_MAUL,oObject)) + nBaseItemType = BASE_ITEM_MAUL; + break; + case 53: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_TRIDENT,oObject)) + nBaseItemType = BASE_ITEM_TRIDENT; + break; + case 54: + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_WHIP,oObject)) + nBaseItemType = BASE_ITEM_WHIP; + break; + } + if(nBaseItemType == -1) + { + nRandom++; + if(nRandom >=55 ) + nRandom = 0; + if(nRandom == nStartingPoint + && bFirst == FALSE) + nBaseItemType = -2; + } + bFirst = FALSE; + } + if(nBaseItemType == -2) + return OBJECT_INVALID; + object oItem = CreateItemOnObject(GetBaseResRef(nBaseItemType),oObject); + EquipDebugString(GetName(oObject) + " has DevCrit "+GetName(oItem)); + return oItem; +} + +object EquipEpicWeaponFocus(object oObject) +{ + int nRandom = Random(55); + int nStartingPoint = nRandom; + int nBaseItemType = -1; + int bFirst = TRUE; + while(nBaseItemType == -1) + { + switch(nRandom) + { + case 0: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_BASTARDSWORD,oObject)) + nBaseItemType = BASE_ITEM_BASTARDSWORD; + break; + case 1: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_BATTLEAXE,oObject)) + nBaseItemType = BASE_ITEM_BATTLEAXE; + break; + case 2: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_CLUB,oObject)) + nBaseItemType = BASE_ITEM_CLUB; + break; + case 3: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_DAGGER,oObject)) + nBaseItemType = BASE_ITEM_DAGGER; + break; + case 4: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_DART,oObject)) + nBaseItemType = BASE_ITEM_DART; + break; + case 5: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_DIREMACE,oObject)) + nBaseItemType = BASE_ITEM_DIREMACE; + break; + case 6: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_DOUBLEAXE,oObject)) + nBaseItemType = BASE_ITEM_DOUBLEAXE; + break; + case 7: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_DWAXE,oObject)) + nBaseItemType = BASE_ITEM_DWARVENWARAXE; + break; + case 8: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_GREATAXE,oObject)) + nBaseItemType = BASE_ITEM_GREATAXE; + break; + case 9: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_GREATSWORD,oObject)) + nBaseItemType = BASE_ITEM_GREATSWORD; + break; + case 10: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_HALBERD,oObject)) + nBaseItemType = BASE_ITEM_HALBERD; + break; + case 11: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_HANDAXE,oObject)) + nBaseItemType = BASE_ITEM_HANDAXE; + break; + case 12: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_HEAVYCROSSBOW,oObject)) + nBaseItemType = BASE_ITEM_HEAVYCROSSBOW; + break; + case 13: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_HEAVYFLAIL,oObject)) + nBaseItemType = BASE_ITEM_HEAVYFLAIL; + break; + case 14: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_KAMA,oObject)) + nBaseItemType = BASE_ITEM_KAMA; + break; + case 15: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_KATANA,oObject)) + nBaseItemType = BASE_ITEM_KATANA; + break; + case 16: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_KUKRI,oObject)) + nBaseItemType = BASE_ITEM_KUKRI; + break; + case 17: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_LIGHTCROSSBOW,oObject)) + nBaseItemType = BASE_ITEM_LIGHTCROSSBOW; + break; + case 18: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_LIGHTFLAIL,oObject)) + nBaseItemType = BASE_ITEM_LIGHTFLAIL; + break; + case 19: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_LIGHTHAMMER,oObject)) + nBaseItemType = BASE_ITEM_LIGHTHAMMER; + break; + case 20: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_LIGHTMACE,oObject)) + nBaseItemType = BASE_ITEM_LIGHTMACE; + break; + case 21: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_LONGBOW,oObject)) + nBaseItemType = BASE_ITEM_LONGBOW; + break; + case 22: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_LONGSWORD,oObject)) + nBaseItemType = BASE_ITEM_LONGSWORD; + break; + case 23: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_MORNINGSTAR,oObject)) + nBaseItemType = BASE_ITEM_MORNINGSTAR; + break; + case 24: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_QUARTERSTAFF,oObject)) + nBaseItemType = BASE_ITEM_QUARTERSTAFF; + break; + case 25: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_RAPIER,oObject)) + nBaseItemType = BASE_ITEM_RAPIER; + break; + case 26: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_SCIMITAR,oObject)) + nBaseItemType = BASE_ITEM_SCIMITAR; + break; + case 27: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_SCYTHE,oObject)) + nBaseItemType = BASE_ITEM_SCYTHE; + break; + case 28: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_SHORTBOW,oObject)) + nBaseItemType = BASE_ITEM_SHORTBOW; + break; + case 29: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_SHORTSPEAR,oObject)) + nBaseItemType = BASE_ITEM_SHORTSPEAR; + break; + case 30: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_SHORTSWORD,oObject)) + nBaseItemType = BASE_ITEM_SHORTSWORD; + break; + case 31: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_SHURIKEN,oObject)) + nBaseItemType = BASE_ITEM_SHURIKEN; + break; + case 32: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_SICKLE,oObject)) + nBaseItemType = BASE_ITEM_SICKLE; + break; + case 33: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_SLING,oObject)) + nBaseItemType = BASE_ITEM_SLING; + break; + case 34: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_THROWINGAXE,oObject)) + nBaseItemType = BASE_ITEM_THROWINGAXE; + break; + case 35: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_TWOBLADEDSWORD,oObject)) + nBaseItemType = BASE_ITEM_TWOBLADEDSWORD; + break; + case 36: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_WARHAMMER,oObject)) + nBaseItemType = BASE_ITEM_WARHAMMER; + break; + case 37: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_EAGLE_CLAW,oObject)) + nBaseItemType = BASE_ITEM_EAGLE_CLAW; + break; + case 38: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_ELVEN_LIGHTBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_LIGHTBLADE; + break; + case 39: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_ELVEN_THINBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_THINBLADE; + break; + case 40: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_KATAR,oObject)) + nBaseItemType = BASE_ITEM_KATAR; + break; + case 41: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_NUNCHAKU,oObject)) + nBaseItemType = BASE_ITEM_NUNCHAKU; + break; + case 42: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_SAI,oObject)) + nBaseItemType = BASE_ITEM_SAI; + break; + case 43: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_LIGHT_PICK,oObject)) + nBaseItemType = BASE_ITEM_LIGHT_PICK; + break; + case 44: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_SAP,oObject)) + nBaseItemType = BASE_ITEM_SAP; + break; + case 45: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_GOAD,oObject)) + nBaseItemType = BASE_ITEM_GOAD; + break; + case 46: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_HEAVY_PICK,oObject)) + nBaseItemType = BASE_ITEM_HEAVY_PICK; + break; + case 47: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_HEAVY_MACE,oObject)) + nBaseItemType = BASE_ITEM_HEAVY_MACE; + break; + case 48: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_ELVEN_COURTBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_COURTBLADE; + break; + case 49: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_DBL_SCIMITAR,oObject)) + nBaseItemType = BASE_ITEM_DOUBLE_SCIMITAR; + break; + case 50: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_FALCHION,oObject)) + nBaseItemType = BASE_ITEM_FALCHION; + break; + case 51: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_LIGHT_LANCE,oObject)) + nBaseItemType = BASE_ITEM_LIGHT_LANCE; + break; + case 52: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_MAUL,oObject)) + nBaseItemType = BASE_ITEM_MAUL; + break; + case 53: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_TRIDENT,oObject)) + nBaseItemType = BASE_ITEM_TRIDENT; + break; + case 54: + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_WHIP,oObject)) + nBaseItemType = BASE_ITEM_WHIP; + break; + + } + if(nBaseItemType == -1) + { + nRandom++; + if(nRandom >=55 ) + nRandom = 0; + if(nRandom == nStartingPoint + && bFirst == FALSE) + nBaseItemType = -2; + } + bFirst = FALSE; + } + if(nBaseItemType == -2) + return OBJECT_INVALID; + object oItem = CreateItemOnObject(GetBaseResRef(nBaseItemType),oObject); + EquipDebugString(GetName(oObject) + " has EpicWeaponFocus "+GetName(oItem)); + return oItem; +} + +object EquipOverwhelmingCritical(object oObject) +{ + int nRandom = Random(55); + int nStartingPoint = nRandom; + int nBaseItemType = -1; + int bFirst = TRUE; + while(nBaseItemType == -1) + { + switch(nRandom) + { + case 0: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_BASTARDSWORD,oObject)) + nBaseItemType = BASE_ITEM_BASTARDSWORD; + break; + case 1: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_BATTLEAXE,oObject)) + nBaseItemType = BASE_ITEM_BATTLEAXE; + break; + case 2: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_CLUB,oObject)) + nBaseItemType = BASE_ITEM_CLUB; + break; + case 3: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_DAGGER,oObject)) + nBaseItemType = BASE_ITEM_DAGGER; + break; + case 4: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_DART,oObject)) + nBaseItemType = BASE_ITEM_DART; + break; + case 5: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_DIREMACE,oObject)) + nBaseItemType = BASE_ITEM_DIREMACE; + break; + case 6: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_DOUBLEAXE,oObject)) + nBaseItemType = BASE_ITEM_DOUBLEAXE; + break; + case 7: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_DWAXE,oObject)) + nBaseItemType = BASE_ITEM_DWARVENWARAXE; + break; + case 8: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_GREATAXE,oObject)) + nBaseItemType = BASE_ITEM_GREATAXE; + break; + case 9: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_GREATSWORD,oObject)) + nBaseItemType = BASE_ITEM_GREATSWORD; + break; + case 10: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_HALBERD,oObject)) + nBaseItemType = BASE_ITEM_HALBERD; + break; + case 11: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_HANDAXE,oObject)) + nBaseItemType = BASE_ITEM_HANDAXE; + break; + case 12: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVYCROSSBOW,oObject)) + nBaseItemType = BASE_ITEM_HEAVYCROSSBOW; + break; + case 13: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVYFLAIL,oObject)) + nBaseItemType = BASE_ITEM_HEAVYFLAIL; + break; + case 14: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_KAMA,oObject)) + nBaseItemType = BASE_ITEM_KAMA; + break; + case 15: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_KATANA,oObject)) + nBaseItemType = BASE_ITEM_KATANA; + break; + case 16: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_KUKRI,oObject)) + nBaseItemType = BASE_ITEM_KUKRI; + break; + case 17: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTCROSSBOW,oObject)) + nBaseItemType = BASE_ITEM_LIGHTCROSSBOW; + break; + case 18: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTFLAIL,oObject)) + nBaseItemType = BASE_ITEM_LIGHTFLAIL; + break; + case 19: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTHAMMER,oObject)) + nBaseItemType = BASE_ITEM_LIGHTHAMMER; + break; + case 20: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTMACE,oObject)) + nBaseItemType = BASE_ITEM_LIGHTMACE; + break; + case 21: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_LONGBOW,oObject)) + nBaseItemType = BASE_ITEM_LONGBOW; + break; + case 22: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_LONGSWORD,oObject)) + nBaseItemType = BASE_ITEM_LONGSWORD; + break; + case 23: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_MORNINGSTAR,oObject)) + nBaseItemType = BASE_ITEM_MORNINGSTAR; + break; + case 24: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_QUARTERSTAFF,oObject)) + nBaseItemType = BASE_ITEM_QUARTERSTAFF; + break; + case 25: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_RAPIER,oObject)) + nBaseItemType = BASE_ITEM_RAPIER; + break; + case 26: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_SCIMITAR,oObject)) + nBaseItemType = BASE_ITEM_SCIMITAR; + break; + case 27: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_SCYTHE,oObject)) + nBaseItemType = BASE_ITEM_SCYTHE; + break; + case 28: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTBOW,oObject)) + nBaseItemType = BASE_ITEM_SHORTBOW; + break; + case 29: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTSPEAR,oObject)) + nBaseItemType = BASE_ITEM_SHORTSPEAR; + break; + case 30: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTSWORD,oObject)) + nBaseItemType = BASE_ITEM_SHORTSWORD; + break; + case 31: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_SHURIKEN,oObject)) + nBaseItemType = BASE_ITEM_SHURIKEN; + break; + case 32: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_SICKLE,oObject)) + nBaseItemType = BASE_ITEM_SICKLE; + break; + case 33: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_SLING,oObject)) + nBaseItemType = BASE_ITEM_SLING; + break; + case 34: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_THROWINGAXE,oObject)) + nBaseItemType = BASE_ITEM_THROWINGAXE; + break; + case 35: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_TWOBLADEDSWORD,oObject)) + nBaseItemType = BASE_ITEM_TWOBLADEDSWORD; + break; + case 36: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_WARHAMMER,oObject)) + nBaseItemType = BASE_ITEM_WARHAMMER; + break; + case 37: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_EAGLE_CLAW,oObject)) + nBaseItemType = BASE_ITEM_EAGLE_CLAW; + break; + case 38: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_ELVEN_LIGHTBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_LIGHTBLADE; + break; + case 39: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_ELVEN_THINBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_THINBLADE; + break; + case 40: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_KATAR,oObject)) + nBaseItemType = BASE_ITEM_KATAR; + break; + case 41: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_NUNCHAKU,oObject)) + nBaseItemType = BASE_ITEM_NUNCHAKU; + break; + case 42: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_SAI,oObject)) + nBaseItemType = BASE_ITEM_SAI; + break; + case 43: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHT_PICK,oObject)) + nBaseItemType = BASE_ITEM_LIGHT_PICK; + break; + case 44: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_SAP,oObject)) + nBaseItemType = BASE_ITEM_SAP; + break; + case 45: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_GOAD,oObject)) + nBaseItemType = BASE_ITEM_GOAD; + break; + case 46: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVY_PICK,oObject)) + nBaseItemType = BASE_ITEM_HEAVY_PICK; + break; + case 47: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVY_MACE,oObject)) + nBaseItemType = BASE_ITEM_HEAVY_MACE; + break; + case 48: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_ELVEN_COURTBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_COURTBLADE; + break; + case 49: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_DBL_SCIMITAR,oObject)) + nBaseItemType = BASE_ITEM_DOUBLE_SCIMITAR; + break; + case 50: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_FALCHION,oObject)) + nBaseItemType = BASE_ITEM_FALCHION; + break; + case 51: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHT_LANCE,oObject)) + nBaseItemType = BASE_ITEM_LIGHT_LANCE; + break; + case 52: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_MAUL,oObject)) + nBaseItemType = BASE_ITEM_MAUL; + break; + case 53: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_TRIDENT,oObject)) + nBaseItemType = BASE_ITEM_TRIDENT; + break; + case 54: + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_WHIP,oObject)) + nBaseItemType = BASE_ITEM_WHIP; + break; + } + if(nBaseItemType == -1) + { + nRandom++; + if(nRandom >=55 ) + nRandom = 0; + if(nRandom == nStartingPoint + && bFirst == FALSE) + nBaseItemType = -2; + } + bFirst = FALSE; + } + if(nBaseItemType == -2) + return OBJECT_INVALID; + object oItem = CreateItemOnObject(GetBaseResRef(nBaseItemType),oObject); + EquipDebugString(GetName(oObject) + " has OverCrit "+GetName(oItem)); + return oItem; +} + +object EquipImprovedCritical(object oObject) +{ + int nRandom = Random(55); + int nStartingPoint = nRandom; + int nBaseItemType = -1; + int bFirst = TRUE; + while(nBaseItemType == -1) + { + switch(nRandom) + { + case 0: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_BASTARD_SWORD,oObject)) + nBaseItemType = BASE_ITEM_BASTARDSWORD; + break; + case 1: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_BATTLE_AXE,oObject)) + nBaseItemType = BASE_ITEM_BATTLEAXE; + break; + case 2: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_CLUB,oObject)) + nBaseItemType = BASE_ITEM_CLUB; + break; + case 3: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_DAGGER,oObject)) + nBaseItemType = BASE_ITEM_DAGGER; + break; + case 4: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_DART,oObject)) + nBaseItemType = BASE_ITEM_DART; + break; + case 5: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_DIRE_MACE,oObject)) + nBaseItemType = BASE_ITEM_DIREMACE; + break; + case 6: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_DOUBLE_AXE,oObject)) + nBaseItemType = BASE_ITEM_DOUBLEAXE; + break; + case 7: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_DWAXE,oObject)) + nBaseItemType = BASE_ITEM_DWARVENWARAXE; + break; + case 8: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_GREAT_AXE,oObject)) + nBaseItemType = BASE_ITEM_GREATAXE; + break; + case 9: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_GREAT_SWORD,oObject)) + nBaseItemType = BASE_ITEM_GREATSWORD; + break; + case 10: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_HALBERD,oObject)) + nBaseItemType = BASE_ITEM_HALBERD; + break; + case 11: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_HAND_AXE,oObject)) + nBaseItemType = BASE_ITEM_HANDAXE; + break; + case 12: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_HEAVY_CROSSBOW,oObject)) + nBaseItemType = BASE_ITEM_HEAVYCROSSBOW; + break; + case 13: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_HEAVY_FLAIL,oObject)) + nBaseItemType = BASE_ITEM_HEAVYFLAIL; + break; + case 14: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_KAMA,oObject)) + nBaseItemType = BASE_ITEM_KAMA; + break; + case 15: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_KATANA,oObject)) + nBaseItemType = BASE_ITEM_KATANA; + break; + case 16: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_KUKRI,oObject)) + nBaseItemType = BASE_ITEM_KUKRI; + break; + case 17: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_LIGHT_CROSSBOW,oObject)) + nBaseItemType = BASE_ITEM_LIGHTCROSSBOW; + break; + case 18: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_LIGHT_FLAIL,oObject)) + nBaseItemType = BASE_ITEM_LIGHTFLAIL; + break; + case 19: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_LIGHT_HAMMER,oObject)) + nBaseItemType = BASE_ITEM_LIGHTHAMMER; + break; + case 20: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_LIGHT_MACE,oObject)) + nBaseItemType = BASE_ITEM_LIGHTMACE; + break; + case 21: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_LONG_SWORD,oObject)) + nBaseItemType = BASE_ITEM_LONGSWORD; + break; + case 22: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_LONGBOW,oObject)) + nBaseItemType = BASE_ITEM_LONGBOW; + break; + case 23: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_MORNING_STAR,oObject)) + nBaseItemType = BASE_ITEM_MORNINGSTAR; + break; + case 24: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_STAFF,oObject)) + nBaseItemType = BASE_ITEM_QUARTERSTAFF; + break; + case 25: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_RAPIER,oObject)) + nBaseItemType = BASE_ITEM_RAPIER; + break; + case 26: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_SCIMITAR,oObject)) + nBaseItemType = BASE_ITEM_SCIMITAR; + break; + case 27: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_SCYTHE,oObject)) + nBaseItemType = BASE_ITEM_SCYTHE; + break; + case 28: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_SHORT_SWORD,oObject)) + nBaseItemType = BASE_ITEM_SHORTSWORD; + break; + case 29: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_SHORTBOW,oObject)) + nBaseItemType = BASE_ITEM_SHORTBOW; + break; + case 30: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_SHURIKEN,oObject)) + nBaseItemType = BASE_ITEM_SHURIKEN; + break; + case 31: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_SICKLE,oObject)) + nBaseItemType = BASE_ITEM_SICKLE; + break; + case 32: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_SLING,oObject)) + nBaseItemType = BASE_ITEM_SLING; + break; + case 33: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_SPEAR,oObject)) + nBaseItemType = BASE_ITEM_SHORTSPEAR; + break; + case 34: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_THROWING_AXE,oObject)) + nBaseItemType = BASE_ITEM_THROWINGAXE; + break; + case 35: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_TWO_BLADED_SWORD,oObject)) + nBaseItemType = BASE_ITEM_TWOBLADEDSWORD; + break; + case 36: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_WAR_HAMMER,oObject)) + nBaseItemType = BASE_ITEM_WARHAMMER; + case 37: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_EAGLE_CLAW,oObject)) + nBaseItemType = BASE_ITEM_EAGLE_CLAW; + case 38: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_ELVEN_LIGHTBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_LIGHTBLADE; + case 39: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_ELVEN_THINBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_THINBLADE; + case 40: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_KATAR,oObject)) + nBaseItemType = BASE_ITEM_KATAR; + case 41: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_NUNCHAKU,oObject)) + nBaseItemType = BASE_ITEM_NUNCHAKU; + case 42: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_SAI,oObject)) + nBaseItemType = BASE_ITEM_SAI; + case 43: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_LIGHT_PICK,oObject)) + nBaseItemType = BASE_ITEM_LIGHT_PICK; + case 44: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_SAP,oObject)) + nBaseItemType = BASE_ITEM_SAP; + case 45: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_GOAD,oObject)) + nBaseItemType = BASE_ITEM_GOAD; + case 46: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_HEAVY_PICK,oObject)) + nBaseItemType = BASE_ITEM_HEAVY_PICK; + case 47: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_HEAVY_MACE,oObject)) + nBaseItemType = BASE_ITEM_HEAVY_MACE; + case 48: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_ELVEN_COURTBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_COURTBLADE; + case 49: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_DBL_SCIMITAR,oObject)) + nBaseItemType = BASE_ITEM_DOUBLE_SCIMITAR; + case 50: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_FALCHION,oObject)) + nBaseItemType = BASE_ITEM_FALCHION; + case 51: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_LIGHT_LANCE,oObject)) + nBaseItemType = BASE_ITEM_LIGHT_LANCE; + case 52: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_MAUL,oObject)) + nBaseItemType = BASE_ITEM_MAUL; + case 53: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_TRIDENT,oObject)) + nBaseItemType = BASE_ITEM_TRIDENT; + case 54: + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_WHIP,oObject)) + nBaseItemType = BASE_ITEM_WHIP; + break; + } + if(nBaseItemType == -1) + { + nRandom++; + if(nRandom >=55 ) + nRandom = 0; + if(nRandom == nStartingPoint + && bFirst == FALSE) + nBaseItemType = -2; + } + bFirst = FALSE; + } + if(nBaseItemType == -2) + return OBJECT_INVALID; + object oItem = CreateItemOnObject(GetBaseResRef(nBaseItemType),oObject); + EquipDebugString(GetName(oObject) + " has ImpCrit "+GetName(oItem)); + return oItem; +} + +object EquipWeaponFocus(object oObject) +{ + int nRandom = Random(55); + int nStartingPoint = nRandom; + int nBaseItemType = -1; + int bFirst = TRUE; + while(nBaseItemType == -1) + { + switch(nRandom) + { + case 0: + if(GetHasFeat(FEAT_WEAPON_FOCUS_BASTARD_SWORD,oObject)) + nBaseItemType = BASE_ITEM_BASTARDSWORD; + break; + case 1: + if(GetHasFeat(FEAT_WEAPON_FOCUS_BATTLE_AXE,oObject)) + nBaseItemType = BASE_ITEM_BATTLEAXE; + break; + case 2: + if(GetHasFeat(FEAT_WEAPON_FOCUS_CLUB,oObject)) + nBaseItemType = BASE_ITEM_CLUB; + break; + case 3: + if(GetHasFeat(FEAT_WEAPON_FOCUS_DAGGER,oObject)) + nBaseItemType = BASE_ITEM_DAGGER; + break; + case 4: + if(GetHasFeat(FEAT_WEAPON_FOCUS_DART,oObject)) + nBaseItemType = BASE_ITEM_DART; + break; + case 5: + if(GetHasFeat(FEAT_WEAPON_FOCUS_DIRE_MACE,oObject)) + nBaseItemType = BASE_ITEM_DIREMACE; + break; + case 6: + if(GetHasFeat(FEAT_WEAPON_FOCUS_DOUBLE_AXE,oObject)) + nBaseItemType = BASE_ITEM_DOUBLEAXE; + break; + case 7: + if(GetHasFeat(FEAT_WEAPON_FOCUS_DWAXE,oObject)) + nBaseItemType = BASE_ITEM_DWARVENWARAXE; + break; + case 8: + if(GetHasFeat(FEAT_WEAPON_FOCUS_GREAT_AXE,oObject)) + nBaseItemType = BASE_ITEM_GREATAXE; + break; + case 9: + if(GetHasFeat(FEAT_WEAPON_FOCUS_GREAT_SWORD,oObject)) + nBaseItemType = BASE_ITEM_GREATSWORD; + break; + case 10: + if(GetHasFeat(FEAT_WEAPON_FOCUS_HALBERD,oObject)) + nBaseItemType = BASE_ITEM_HALBERD; + break; + case 11: + if(GetHasFeat(FEAT_WEAPON_FOCUS_HAND_AXE,oObject)) + nBaseItemType = BASE_ITEM_HANDAXE; + break; + case 12: + if(GetHasFeat(FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW,oObject)) + nBaseItemType = BASE_ITEM_HEAVYCROSSBOW; + break; + case 13: + if(GetHasFeat(FEAT_WEAPON_FOCUS_HEAVY_FLAIL,oObject)) + nBaseItemType = BASE_ITEM_HEAVYFLAIL; + break; + case 14: + if(GetHasFeat(FEAT_WEAPON_FOCUS_KAMA,oObject)) + nBaseItemType = BASE_ITEM_KAMA; + break; + case 15: + if(GetHasFeat(FEAT_WEAPON_FOCUS_KATANA,oObject)) + nBaseItemType = BASE_ITEM_KATANA; + break; + case 16: + if(GetHasFeat(FEAT_WEAPON_FOCUS_KUKRI,oObject)) + nBaseItemType = BASE_ITEM_KUKRI; + break; + case 17: + if(GetHasFeat(FEAT_WEAPON_FOCUS_LIGHT_CROSSBOW,oObject)) + nBaseItemType = BASE_ITEM_LIGHTCROSSBOW; + break; + case 18: + if(GetHasFeat(FEAT_WEAPON_FOCUS_LIGHT_FLAIL,oObject)) + nBaseItemType = BASE_ITEM_LIGHTFLAIL; + break; + case 19: + if(GetHasFeat(FEAT_WEAPON_FOCUS_LIGHT_HAMMER,oObject)) + nBaseItemType = BASE_ITEM_LIGHTHAMMER; + break; + case 20: + if(GetHasFeat(FEAT_WEAPON_FOCUS_LIGHT_MACE,oObject)) + nBaseItemType = BASE_ITEM_LIGHTMACE; + break; + case 21: + if(GetHasFeat(FEAT_WEAPON_FOCUS_LONG_SWORD,oObject)) + nBaseItemType = BASE_ITEM_LONGSWORD; + break; + case 22: + if(GetHasFeat(FEAT_WEAPON_FOCUS_LONGBOW,oObject)) + nBaseItemType = BASE_ITEM_LONGBOW; + break; + case 23: + if(GetHasFeat(FEAT_WEAPON_FOCUS_MORNING_STAR,oObject)) + nBaseItemType = BASE_ITEM_MORNINGSTAR; + break; + case 24: + if(GetHasFeat(FEAT_WEAPON_FOCUS_STAFF,oObject)) + nBaseItemType = BASE_ITEM_QUARTERSTAFF; + break; + case 25: + if(GetHasFeat(FEAT_WEAPON_FOCUS_RAPIER,oObject)) + nBaseItemType = BASE_ITEM_RAPIER; + break; + case 26: + if(GetHasFeat(FEAT_WEAPON_FOCUS_SCIMITAR,oObject)) + nBaseItemType = BASE_ITEM_SCIMITAR; + break; + case 27: + if(GetHasFeat(FEAT_WEAPON_FOCUS_SCYTHE,oObject)) + nBaseItemType = BASE_ITEM_SCYTHE; + break; + case 28: + if(GetHasFeat(FEAT_WEAPON_FOCUS_SHORT_SWORD,oObject)) + nBaseItemType = BASE_ITEM_SHORTSWORD; + break; + case 29: + if(GetHasFeat(FEAT_WEAPON_FOCUS_SHORTBOW,oObject)) + nBaseItemType = BASE_ITEM_SHORTBOW; + break; + case 30: + if(GetHasFeat(FEAT_WEAPON_FOCUS_SHURIKEN,oObject)) + nBaseItemType = BASE_ITEM_SHURIKEN; + break; + case 31: + if(GetHasFeat(FEAT_WEAPON_FOCUS_SICKLE,oObject)) + nBaseItemType = BASE_ITEM_SICKLE; + break; + case 32: + if(GetHasFeat(FEAT_WEAPON_FOCUS_SLING,oObject)) + nBaseItemType = BASE_ITEM_SLING; + break; + case 33: + if(GetHasFeat(FEAT_WEAPON_FOCUS_SPEAR,oObject)) + nBaseItemType = BASE_ITEM_SHORTSPEAR; + break; + case 34: + if(GetHasFeat(FEAT_WEAPON_FOCUS_THROWING_AXE,oObject)) + nBaseItemType = BASE_ITEM_THROWINGAXE; + break; + case 35: + if(GetHasFeat(FEAT_WEAPON_FOCUS_TWO_BLADED_SWORD,oObject)) + nBaseItemType = BASE_ITEM_TWOBLADEDSWORD; + break; + case 36: + if(GetHasFeat(FEAT_WEAPON_FOCUS_WAR_HAMMER,oObject)) + nBaseItemType = BASE_ITEM_WARHAMMER; + break; + case 37: + if(GetHasFeat(FEAT_WEAPON_FOCUS_WHIP,oObject)) + nBaseItemType = BASE_ITEM_WHIP; + break; + case 38: + if(GetHasFeat(FEAT_WEAPON_FOCUS_HEAVY_PICK,oObject)) + nBaseItemType = BASE_ITEM_HEAVY_PICK; + break; + case 39: + if(GetHasFeat(FEAT_WEAPON_FOCUS_LIGHT_PICK,oObject)) + nBaseItemType = BASE_ITEM_LIGHT_PICK; + break; + case 40: + if(GetHasFeat(FEAT_WEAPON_FOCUS_SAI,oObject)) + nBaseItemType = BASE_ITEM_SAI; + break; + case 41: + if(GetHasFeat(FEAT_WEAPON_FOCUS_NUNCHAKU,oObject)) + nBaseItemType = BASE_ITEM_NUNCHAKU; + break; + case 42: + if(GetHasFeat(FEAT_WEAPON_FOCUS_FALCHION,oObject)) + nBaseItemType = BASE_ITEM_FALCHION; + break; + case 43: + if(GetHasFeat(FEAT_WEAPON_FOCUS_SAP,oObject)) + nBaseItemType = BASE_ITEM_SAP; + break; + case 44: + if(GetHasFeat(FEAT_WEAPON_FOCUS_KATAR,oObject)) + nBaseItemType = BASE_ITEM_KATAR; + break; + case 45: + if(GetHasFeat(FEAT_WEAPON_FOCUS_HEAVY_MACE,oObject)) + nBaseItemType = BASE_ITEM_HEAVY_MACE; + break; + case 46: + if(GetHasFeat(FEAT_WEAPON_FOCUS_MAUL,oObject)) + nBaseItemType = BASE_ITEM_MAUL; + break; + case 47: + if(GetHasFeat(FEAT_WEAPON_FOCUS_DOUBLE_SCIMITAR,oObject)) + nBaseItemType = BASE_ITEM_DOUBLE_SCIMITAR; + break; + case 48: + if(GetHasFeat(FEAT_WEAPON_FOCUS_GOAD,oObject)) + nBaseItemType = BASE_ITEM_GOAD; + break; + case 49: + if(GetHasFeat(FEAT_WEAPON_FOCUS_EAGLE_CLAW,oObject)) + nBaseItemType = BASE_ITEM_EAGLE_CLAW; + break; + case 50: + if(GetHasFeat(FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_LIGHTBLADE; + break; + case 51: + if(GetHasFeat(FEAT_WEAPON_FOCUS_ELVEN_THINBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_THINBLADE; + break; + case 52: + if(GetHasFeat(FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE,oObject)) + nBaseItemType = BASE_ITEM_ELVEN_COURTBLADE; + break; + case 53: + if(GetHasFeat(FEAT_WEAPON_FOCUS_TRIDENT,oObject)) + nBaseItemType = BASE_ITEM_TRIDENT; + break; + case 54: + if(GetHasFeat(FEAT_WEAPON_FOCUS_LIGHT_LANCE,oObject)) + nBaseItemType = BASE_ITEM_LIGHT_LANCE; + break; + } + if(nBaseItemType == -1) + { + nRandom++; + if(nRandom >=55 ) + nRandom = 0; + if(nRandom == nStartingPoint + && bFirst == FALSE) + nBaseItemType = -2; + } + bFirst = FALSE; + } + if(nBaseItemType == -2) + return OBJECT_INVALID; + object oItem = CreateItemOnObject(GetBaseResRef(nBaseItemType),oObject); + EquipDebugString(GetName(oObject) + " has WeaponFocus "+GetName(oItem)); + return oItem; +} + +int GetCanDualWeild(object oObject) +{ + if(GetHasFeat(FEAT_AMBIDEXTERITY,oObject) == TRUE + && d4()==1) + return TRUE; + if(GetHasFeat(FEAT_TWO_WEAPON_FIGHTING,oObject) == TRUE + && d4()==1) + return TRUE; + if(GetHasFeat(FEAT_IMPROVED_TWO_WEAPON_FIGHTING,oObject) == TRUE + && d2()==1) + return TRUE; + if(GetHasFeat(374,oObject) == TRUE + && d2()==1)//ranger dual-wielding + return TRUE; + return FALSE; +} + +int GetIsLeftHandFree(object oObject, object oWeapon) +{ + int nWeaponSize = PrimoGetWeaponSize(oWeapon); + int nCreatureSize = GetCreatureSize(oObject); + if(nWeaponSize <= nCreatureSize + &&GetWeaponRanged(oWeapon)==FALSE) + return TRUE; + return FALSE; +} + +int IsItemWeapon(object oItem) +{ + int bResult; + int bBase = GetBaseItemType(oItem); + if(bBase == BASE_ITEM_ARROW + || bBase == BASE_ITEM_BASTARDSWORD + || bBase == BASE_ITEM_BATTLEAXE + || bBase == BASE_ITEM_BOLT + || bBase == BASE_ITEM_BULLET + || bBase == BASE_ITEM_CBLUDGWEAPON + || bBase == BASE_ITEM_CPIERCWEAPON + || bBase == BASE_ITEM_CLUB + || bBase == BASE_ITEM_CSLASHWEAPON + || bBase == BASE_ITEM_CSLSHPRCWEAP + || bBase == BASE_ITEM_DAGGER + || bBase == BASE_ITEM_DART + || bBase == BASE_ITEM_DIREMACE + || bBase == BASE_ITEM_DOUBLE_SCIMITAR + || bBase == BASE_ITEM_DOUBLEAXE + || bBase == BASE_ITEM_DWARVENWARAXE + || bBase == BASE_ITEM_EAGLE_CLAW + || bBase == BASE_ITEM_ELVEN_COURTBLADE + || bBase == BASE_ITEM_ELVEN_LIGHTBLADE + || bBase == BASE_ITEM_ELVEN_THINBLADE + || bBase == BASE_ITEM_FALCHION + || bBase == BASE_ITEM_GOAD + || bBase == BASE_ITEM_GREATAXE + || bBase == BASE_ITEM_GREATSWORD + || bBase == BASE_ITEM_HALBERD + || bBase == BASE_ITEM_HANDAXE + || bBase == BASE_ITEM_HEAVY_MACE + || bBase == BASE_ITEM_HEAVY_PICK + || bBase == BASE_ITEM_HEAVYCROSSBOW + || bBase == BASE_ITEM_HEAVYFLAIL + || bBase == BASE_ITEM_KATANA + || bBase == BASE_ITEM_KATAR + || bBase == BASE_ITEM_KUKRI + || bBase == BASE_ITEM_LIGHT_PICK + || bBase == BASE_ITEM_LIGHTCROSSBOW + || bBase == BASE_ITEM_LIGHTFLAIL + || bBase == BASE_ITEM_LIGHTHAMMER + || bBase == BASE_ITEM_LIGHTMACE + || bBase == BASE_ITEM_LONGBOW + || bBase == BASE_ITEM_LONGSWORD + || bBase == BASE_ITEM_MAUL + || bBase == BASE_ITEM_MORNINGSTAR + || bBase == BASE_ITEM_NUNCHAKU + || bBase == BASE_ITEM_QUARTERSTAFF + || bBase == BASE_ITEM_RAPIER + || bBase == BASE_ITEM_SAI + || bBase == BASE_ITEM_SAP + || bBase == BASE_ITEM_SCIMITAR + || bBase == BASE_ITEM_SCYTHE + || bBase == BASE_ITEM_SHORTBOW + || bBase == BASE_ITEM_SHORTSPEAR + || bBase == BASE_ITEM_SHORTSWORD + || bBase == BASE_ITEM_SHURIKEN + || bBase == BASE_ITEM_SICKLE + || bBase == BASE_ITEM_SLING + || bBase == BASE_ITEM_THROWINGAXE + || bBase == BASE_ITEM_TRIDENT + || bBase == BASE_ITEM_TWOBLADEDSWORD + || bBase == BASE_ITEM_WARHAMMER + || bBase == BASE_ITEM_WHIP ) + bResult = TRUE; + return bResult; +} + +int PrimoGetWeaponSize(object oItem) +{ + int bResult; + int bBase = GetBaseItemType(oItem); + switch(bBase) + { + case BASE_ITEM_DIREMACE: + case BASE_ITEM_DOUBLEAXE: + case BASE_ITEM_GREATSWORD: + case BASE_ITEM_HALBERD: + case BASE_ITEM_HEAVYFLAIL: + case BASE_ITEM_GREATAXE: + case BASE_ITEM_LONGBOW: + case BASE_ITEM_SCYTHE: + case BASE_ITEM_TWOBLADEDSWORD: + case BASE_ITEM_QUARTERSTAFF: + case BASE_ITEM_SHORTSPEAR: + case BASE_ITEM_DOUBLE_SCIMITAR: + case BASE_ITEM_MAUL: + case BASE_ITEM_FALCHION: + case BASE_ITEM_ELVEN_COURTBLADE: + case BASE_ITEM_LIGHT_LANCE: + bResult = CREATURE_SIZE_LARGE; + break; + case BASE_ITEM_BATTLEAXE: + case BASE_ITEM_BASTARDSWORD: + case BASE_ITEM_CLUB: + case BASE_ITEM_HEAVYCROSSBOW: + case BASE_ITEM_DWARVENWARAXE: + case BASE_ITEM_LIGHTFLAIL: + case BASE_ITEM_KATANA: + case BASE_ITEM_MAGICSTAFF: + case BASE_ITEM_LONGSWORD: + case BASE_ITEM_TRIDENT: + case BASE_ITEM_MORNINGSTAR: + case BASE_ITEM_RAPIER: + case BASE_ITEM_SCIMITAR: + case BASE_ITEM_SHORTBOW: + case BASE_ITEM_WARHAMMER: + case BASE_ITEM_WHIP: + case BASE_ITEM_CPIERCWEAPON: + case BASE_ITEM_CSLSHPRCWEAP: + case BASE_ITEM_CSLASHWEAPON: + case BASE_ITEM_CBLUDGWEAPON: + case BASE_ITEM_HEAVY_MACE: + case BASE_ITEM_HEAVY_PICK: + bResult = CREATURE_SIZE_MEDIUM ; + break; + case BASE_ITEM_THROWINGAXE: + case BASE_ITEM_LIGHTCROSSBOW: + case BASE_ITEM_DART: + case BASE_ITEM_LIGHTHAMMER: + case BASE_ITEM_HANDAXE: + case BASE_ITEM_LIGHTMACE: + case BASE_ITEM_SICKLE: + case BASE_ITEM_SLING: + case BASE_ITEM_SHORTSWORD: + case BASE_ITEM_TORCH: + case BASE_ITEM_KAMA: + case BASE_ITEM_EAGLE_CLAW: + case BASE_ITEM_ELVEN_LIGHTBLADE: + case BASE_ITEM_ELVEN_THINBLADE: + case BASE_ITEM_NUNCHAKU: + case BASE_ITEM_LIGHT_PICK: + case BASE_ITEM_GOAD: + bResult = CREATURE_SIZE_SMALL; + break; + case BASE_ITEM_KUKRI: + case BASE_ITEM_DAGGER: + case BASE_ITEM_SHURIKEN: + case BASE_ITEM_SAP: + case BASE_ITEM_SAI: + case BASE_ITEM_KATAR: + bResult = CREATURE_SIZE_TINY; + break; + default: + bResult = 0; //invalid + } + return bResult; +} + +object EquipHeavyArmor(object oObject) +{ + int nRandom = Random(4); + object oItem; + switch(nRandom) + { + case 0: + oItem = CreateItemOnObject("nw_aarcl011",oObject); + break; + case 1: + oItem = CreateItemOnObject("nw_aarcl007",oObject); + break; + case 2: + oItem = CreateItemOnObject("nw_aarcl006",oObject); + break; + case 3: + oItem = CreateItemOnObject("nw_aarcl005",oObject); + break; + } + AssignCommand(oObject, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST)); + return oItem; +} + +object EquipMediumArmor(object oObject) +{ + int nRandom = Random(4); + object oItem; + switch(nRandom) + { + case 0: + oItem = CreateItemOnObject("nw_aarcl010",oObject); + break; + case 1: + oItem = CreateItemOnObject("nw_aarcl004",oObject); + break; + case 2://chain shirt + oItem = CreateItemOnObject("nw_aarcl012",oObject); + break; + case 3: + oItem = CreateItemOnObject("nw_aarcl003",oObject); + break; + } + AssignCommand(oObject, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST)); + return oItem; +} + +object EquipLightArmor(object oObject) +{ + int nRandom = Random(4); + object oItem; + switch(nRandom) + { + case 0: //hide + oItem = CreateItemOnObject("nw_aarcl008",oObject); + break; + case 1: + oItem = CreateItemOnObject("nw_aarcl001",oObject); + break; + case 2: + oItem = CreateItemOnObject("nw_aarcl009",oObject); + break; + case 3: + oItem = CreateItemOnObject("nw_aarcl002",oObject); + break; + } + AssignCommand(oObject, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST)); + return oItem; +} + +object EquipClothes(object oObject) +{ + int nClass = GetClassByPosition(2, oObject); + if(nClass == CLASS_TYPE_INVALID) + nClass = GetClassByPosition(1, oObject); + object oItem; + switch(nClass) + { + case CLASS_TYPE_MONK: + oItem = CreateItemOnObject("nw_cloth016",oObject); + break; + case CLASS_TYPE_SORCERER: + oItem = CreateItemOnObject("nw_cloth008",oObject); + break; + case CLASS_TYPE_WIZARD: + oItem = CreateItemOnObject("nw_cloth005",oObject); + break; + default: + oItem = CreateItemOnObject("nw_cloth001",oObject); + break; + } + AssignCommand(oObject, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST)); + return oItem; +} + +string GetBaseResRef(int nBaseItemType) +{ + string sResRef; + switch(nBaseItemType) + { + case BASE_ITEM_BASTARDSWORD: + sResRef = "nw_wswbs001"; + break; + case BASE_ITEM_BATTLEAXE: + sResRef = "nw_waxbt001"; + break; + case BASE_ITEM_CLUB: + sResRef = "nw_wblcl001"; + break; + case BASE_ITEM_DAGGER: + sResRef = "nw_wswdg001"; + break; + case BASE_ITEM_DART: + sResRef = "nw_wthdt001"; + break; + case BASE_ITEM_DIREMACE: + sResRef = "nw_wdbma001"; + break; + case BASE_ITEM_DOUBLEAXE: + sResRef = "nw_wdbax001"; + break; + case BASE_ITEM_DOUBLE_SCIMITAR: + sResRef = "prc_wxdbsc001"; + break; + case BASE_ITEM_DWARVENWARAXE: + sResRef = "x2_wdwraxe001"; + break; + case BASE_ITEM_GREATAXE: + sResRef = "nw_waxgr001"; + break; + case BASE_ITEM_EAGLE_CLAW: + sResRef = "prc_wswec001"; + break; + case BASE_ITEM_ELVEN_COURTBLADE: + sResRef = "prc_wspec001"; + break; + case BASE_ITEM_ELVEN_LIGHTBLADE: + sResRef = "prc_wspel001"; + break; + case BASE_ITEM_ELVEN_THINBLADE: + sResRef = "prc_wspet001"; + break; + case BASE_ITEM_FALCHION: + sResRef = "prc_wswfa001"; + break; + case BASE_ITEM_GOAD: + sResRef = "prc_spgd001"; + break; + case BASE_ITEM_GREATSWORD: + sResRef = "nw_wswgs001"; + break; + case BASE_ITEM_HALBERD: + sResRef = "nw_wplhb001"; + break; + case BASE_ITEM_HANDAXE: + sResRef = "nw_waxhn001"; + break; + case BASE_ITEM_HEAVYCROSSBOW: + sResRef = "w_wbwxh001"; + break; + case BASE_ITEM_HEAVYFLAIL: + sResRef = "nw_wblfh001"; + break; + case BASE_ITEM_HEAVY_MACE: + sResRef = "prc_wxblmh001"; + break; + case BASE_ITEM_HEAVY_PICK: + sResRef = "prc_wblph001"; + break; + case BASE_ITEM_KAMA: + sResRef = "nw_wspka001"; + break; + case BASE_ITEM_KATANA: + sResRef = "nw_wswka001"; + break; + case BASE_ITEM_KATAR: + sResRef = "prc_wswdp001"; + break; + case BASE_ITEM_KUKRI: + sResRef = "nw_wspku001"; + break; + case BASE_ITEM_LIGHTCROSSBOW: + sResRef = "nw_wbwxl001"; + break; + case BASE_ITEM_LIGHTFLAIL: + sResRef = "nw_wblfl001"; + break; + case BASE_ITEM_LIGHTHAMMER: + sResRef = "nw_wblmhl001"; + break; + case BASE_ITEM_LIGHT_LANCE: + sResRef = "prc_wpllc001"; + break; + case BASE_ITEM_LIGHTMACE: + sResRef = "w_wblml001"; + break; + case BASE_ITEM_LIGHT_PICK: + sResRef = "prc_wblpl001"; + break; + case BASE_ITEM_LONGBOW: + sResRef = "nw_wbwln001"; + break; + case BASE_ITEM_LONGSWORD: + sResRef = "nw_wswls001"; + break; + case BASE_ITEM_MORNINGSTAR: + sResRef = "nw_wblms001"; + break; + case BASE_ITEM_MAUL: + sResRef = "prc_wxblma001"; + break; + case BASE_ITEM_NUNCHAKU: + sResRef = "prc_wblnn001"; + break; + case BASE_ITEM_QUARTERSTAFF: + sResRef = "nw_wdbqs001"; + break; + case BASE_ITEM_RAPIER: + sResRef = "nw_wswrp001"; + break; + case BASE_ITEM_SAI: + sResRef = "prc_wswsi001"; + break; + case BASE_ITEM_SAP: + sResRef = "prc_wspsp001"; + break; + case BASE_ITEM_SCIMITAR: + sResRef = "nw_wswsc001"; + break; + case BASE_ITEM_SCYTHE: + sResRef = "nw_wplsc001"; + break; + case BASE_ITEM_SHORTBOW: + sResRef = "nw_wbwsh001"; + break; + case BASE_ITEM_SHORTSPEAR: + sResRef = "nw_wplss001"; + break; + case BASE_ITEM_SHORTSWORD: + sResRef = "nw_wswss001"; + break; + case BASE_ITEM_SHURIKEN: + sResRef = "nw_wthsh001"; + break; + case BASE_ITEM_SICKLE: + sResRef = "nw_wspsc001"; + break; + case BASE_ITEM_SLING: + sResRef = "nw_wbwsl001"; + break; + case BASE_ITEM_TRIDENT: + sResRef = "nw_wpltr001"; + break; + case BASE_ITEM_THROWINGAXE: + sResRef = "nw_wthax001"; + break; + case BASE_ITEM_TWOBLADEDSWORD: + sResRef = "nw_wdbsw001"; + break; + case BASE_ITEM_WARHAMMER: + sResRef = "nw_wblhw001"; + break; + } + return sResRef; +} + +void EquipScroll(object oObject) +{ + object oItem; + int nRandom; + int nCount = GetLevelByClass(CLASS_TYPE_CLERIC, oObject) + + GetLevelByClass(CLASS_TYPE_WIZARD, oObject) + + GetLevelByClass(CLASS_TYPE_DRUID, oObject) + + GetLevelByClass(CLASS_TYPE_SORCERER, oObject) + + GetLevelByClass(CLASS_TYPE_BARD, oObject) + + (GetLevelByClass(CLASS_TYPE_ROGUE, oObject)/3)+ d6() - 3; + int i; + for (i=1;i<=nCount;i++) + { + nRandom = Random(287)+1; + switch(nRandom) + { + case 1: + oItem = CreateItemOnObject("x1_it_sparscr002", oObject); + break; + case 2: + oItem = CreateItemOnObject("nw_it_sparscr003", oObject); + break; + case 3: + oItem = CreateItemOnObject("x1_it_sparscr003", oObject); + break; + case 4: + oItem = CreateItemOnObject("x1_it_sparscr001", oObject); + break; + case 5: + oItem = CreateItemOnObject("x1_it_spdvscr001", oObject); + break; + case 6: + oItem = CreateItemOnObject("nw_it_sparscr004", oObject); + break; + case 7: + oItem = CreateItemOnObject("nw_it_sparscr002", oObject); + break; + case 8: + oItem = CreateItemOnObject("nw_it_sparscr001", oObject); + break; + case 9: + oItem = CreateItemOnObject("x2_it_spdvscr001", oObject); + break; + case 10: + oItem = CreateItemOnObject("x2_it_spdvscr002", oObject); + break; + case 11: + oItem = CreateItemOnObject("x1_it_sparscr102", oObject); + break; + case 12: + oItem = CreateItemOnObject("x1_it_spdvscr101", oObject); + break; + case 13: + oItem = CreateItemOnObject("nw_it_sparscr112", oObject); + break; + case 14: + oItem = CreateItemOnObject("x1_it_spdvscr107", oObject); + break; + case 15: + oItem = CreateItemOnObject("nw_it_sparscr107", oObject); + break; + case 16: + oItem = CreateItemOnObject("nw_it_sparscr110", oObject); + break; + case 17: + oItem = CreateItemOnObject("x1_it_spdvscr102", oObject); + break; + case 18: + oItem = CreateItemOnObject("nw_it_sparscr101", oObject); + break; + case 19: + oItem = CreateItemOnObject("x1_it_spdvscr103", oObject); + break; + case 20: + oItem = CreateItemOnObject("x1_it_sparscr101", oObject); + break; + case 21: + oItem = CreateItemOnObject("nw_it_sparscr103", oObject); + break; + case 22: + oItem = CreateItemOnObject("nw_it_sparscr106", oObject); + break; + case 23: + oItem = CreateItemOnObject("x1_it_spdvscr104", oObject); + break; + case 24: + oItem = CreateItemOnObject("nw_it_sparscr104", oObject); + break; + case 25: + oItem = CreateItemOnObject("x1_it_spdvscr106", oObject); + break; + case 26: + oItem = CreateItemOnObject("nw_it_sparscr109", oObject); + break; + case 27: + oItem = CreateItemOnObject("nw_it_sparscr113", oObject); + break; + case 28: + oItem = CreateItemOnObject("nw_it_sparscr102", oObject); + break; + case 29: + oItem = CreateItemOnObject("nw_it_sparscr111", oObject); + break; + case 30: + oItem = CreateItemOnObject("nw_it_sparscr210", oObject); + break; + case 31: + oItem = CreateItemOnObject("x1_it_sparscr103", oObject); + break; + case 32: + oItem = CreateItemOnObject("x1_it_spdvscr105", oObject); + break; + case 33: + oItem = CreateItemOnObject("nw_it_sparscr108", oObject); + break; + case 34: + oItem = CreateItemOnObject("nw_it_sparscr105", oObject); + break; + case 35: + oItem = CreateItemOnObject("x1_it_sparscr104", oObject); + break; + case 36: + oItem = CreateItemOnObject("x2_it_spdvscr103", oObject); + break; + case 37: + oItem = CreateItemOnObject("x2_it_spdvscr102", oObject); + break; + case 38: + oItem = CreateItemOnObject("x2_it_spdvscr104", oObject); + break; + case 39: + oItem = CreateItemOnObject("x2_it_spdvscr101", oObject); + break; + case 40: + oItem = CreateItemOnObject("x2_it_spdvscr105", oObject); + break; + case 41: + oItem = CreateItemOnObject("x2_it_spdvscr106", oObject); + break; + case 42: + oItem = CreateItemOnObject("x2_it_spavscr101", oObject); + break; + case 43: + oItem = CreateItemOnObject("x2_it_spavscr104", oObject); + break; + case 44: + oItem = CreateItemOnObject("x2_it_spavscr102", oObject); + break; + case 45: + oItem = CreateItemOnObject("x2_it_spavscr105", oObject); + break; + case 46: + oItem = CreateItemOnObject("x2_it_sparscral", oObject); + break; + case 47: + oItem = CreateItemOnObject("x2_it_spdvscr107", oObject); + break; + case 48: + oItem = CreateItemOnObject("x2_it_spdvscr108", oObject); + break; + case 49: + oItem = CreateItemOnObject("x2_it_spavscr103", oObject); + break; + case 50: + oItem = CreateItemOnObject("x1_it_spdvscr204", oObject); + break; + case 51: + oItem = CreateItemOnObject("x1_it_sparscr201", oObject); + break; + case 52: + oItem = CreateItemOnObject("nw_it_sparscr211", oObject); + break; + case 53: + oItem = CreateItemOnObject("x1_it_spdvscr202", oObject); + break; + case 54: + oItem = CreateItemOnObject("nw_it_sparscr212", oObject); + break; + case 55: + oItem = CreateItemOnObject("nw_it_sparscr213", oObject); + break; + case 56: + oItem = CreateItemOnObject("nw_it_spdvscr202", oObject); + break; + case 57: + oItem = CreateItemOnObject("x1_it_sparscr301", oObject); + break; + case 58: + oItem = CreateItemOnObject("nw_it_sparscr206", oObject); + break; + case 59: + oItem = CreateItemOnObject("nw_it_sparscr219", oObject); + break; + case 60: + oItem = CreateItemOnObject("nw_it_sparscr215", oObject); + break; + case 61: + oItem = CreateItemOnObject("x1_it_spdvscr205", oObject); + break; + case 62: + oItem = CreateItemOnObject("nw_it_sparscr220", oObject); + break; + case 63: + oItem = CreateItemOnObject("nw_it_sparscr208", oObject); + break; + case 64: + oItem = CreateItemOnObject("nw_it_sparscr209", oObject); + break; + case 65: + oItem = CreateItemOnObject("x1_it_spdvscr201", oObject); + break; + case 66: + oItem = CreateItemOnObject("nw_it_sparscr207", oObject); + break; + case 67: + oItem = CreateItemOnObject("nw_it_sparscr216", oObject); + break; + case 68: + oItem = CreateItemOnObject("nw_it_sparscr218", oObject); + break; + case 69: + oItem = CreateItemOnObject("nw_it_spdvscr201", oObject); + break; + case 70: + oItem = CreateItemOnObject("nw_it_sparscr202", oObject); + break; + case 71: + oItem = CreateItemOnObject("x1_it_spdvscr203", oObject); + break; + case 72: + oItem = CreateItemOnObject("nw_it_sparscr221", oObject); + break; + case 73: + oItem = CreateItemOnObject("nw_it_sparscr201", oObject); + break; + case 74: + oItem = CreateItemOnObject("nw_it_sparscr205", oObject); + break; + case 75: + oItem = CreateItemOnObject("nw_it_spdvscr203", oObject); + break; + case 76: + oItem = CreateItemOnObject("nw_it_spdvscr204", oObject); + break; + case 77: + oItem = CreateItemOnObject("nw_it_sparscr203", oObject); + break; + case 78: + oItem = CreateItemOnObject("x1_it_sparscr202", oObject); + break; + case 79: + oItem = CreateItemOnObject("nw_it_sparscr214", oObject); + break; + case 80: + oItem = CreateItemOnObject("nw_it_sparscr204", oObject); + break; + case 81: + oItem = CreateItemOnObject("x2_it_spdvscr201", oObject); + break; + case 82: + oItem = CreateItemOnObject("x2_it_spdvscr202", oObject); + break; + case 83: + oItem = CreateItemOnObject("x2_it_spavscr207", oObject); + break; + case 84: + oItem = CreateItemOnObject("x2_it_spavscr206", oObject); + break; + case 85: + oItem = CreateItemOnObject("x2_it_spavscr201", oObject); + break; + case 86: + oItem = CreateItemOnObject("x2_it_spdvscr203", oObject); + break; + case 87: + oItem = CreateItemOnObject("x2_it_spavscr201", oObject); + break; + case 88: + oItem = CreateItemOnObject("x2_it_spavscr205", oObject); + break; + case 89: + oItem = CreateItemOnObject("x2_it_spavscr203", oObject); + break; + case 90: + oItem = CreateItemOnObject("x2_it_spdvscr204", oObject); + break; + case 91: + oItem = CreateItemOnObject("x2_it_spdvscr205", oObject); + break; + case 92: + oItem = CreateItemOnObject("x2_it_spavscr204", oObject); + break; + case 93: + oItem = CreateItemOnObject("nw_it_sparscr307", oObject); + break; + case 94: + oItem = CreateItemOnObject("nw_it_sparscr217", oObject); + break; + case 95: + oItem = CreateItemOnObject("nw_it_sparscr301", oObject); + break; + case 96: + oItem = CreateItemOnObject("x1_it_sparscr301", oObject); + break; + case 97: + oItem = CreateItemOnObject("nw_it_sparscr309", oObject); + break; + case 98: + oItem = CreateItemOnObject("nw_it_sparscr304", oObject); + break; + case 99: + oItem = CreateItemOnObject("x1_it_spdvscr303", oObject); + break; + case 100: + oItem = CreateItemOnObject("x1_it_sparscr303", oObject); + break; + case 101: + oItem = CreateItemOnObject("nw_it_sparscr312", oObject); + break; + case 102: + oItem = CreateItemOnObject("nw_it_sparscr308", oObject); + break; + case 103: + oItem = CreateItemOnObject("x1_it_spdvscr302", oObject); + break; + case 104: + oItem = CreateItemOnObject("nw_it_sparscr314", oObject); + break; + case 105: + oItem = CreateItemOnObject("nw_it_sparscr310", oObject); + break; + case 106: + oItem = CreateItemOnObject("nw_it_sparscr302", oObject); + break; + case 107: + oItem = CreateItemOnObject("nw_it_sparscr315", oObject); + break; + case 108: + oItem = CreateItemOnObject("nw_it_sparscr303", oObject); + break; + case 109: + oItem = CreateItemOnObject("x1_it_spdvscr305", oObject); + break; + case 110: + oItem = CreateItemOnObject("nw_it_spdvscr302", oObject); + break; + case 111: + oItem = CreateItemOnObject("nw_it_sparscr313", oObject); + break; + case 112: + oItem = CreateItemOnObject("x1_it_spdvscr304", oObject); + break; + case 113: + oItem = CreateItemOnObject("nw_it_sparscr305", oObject); + break; + case 114: + oItem = CreateItemOnObject("nw_it_sparscr306", oObject); + break; + case 115: + oItem = CreateItemOnObject("nw_it_sparscr311", oObject); + break; + case 116: + oItem = CreateItemOnObject("x1_it_sparscr302", oObject); + break; + case 117: + oItem = CreateItemOnObject("x2_it_spdvscr303", oObject); + break; + case 118: + oItem = CreateItemOnObject("x2_it_spdvscr307", oObject); + break; + case 119: + oItem = CreateItemOnObject("x2_it_spdvscr308", oObject); + break; + case 120: + oItem = CreateItemOnObject("x2_it_spdvscr305", oObject); + break; + case 121: + oItem = CreateItemOnObject("x2_it_spdvscr309", oObject); + break; + case 122: + oItem = CreateItemOnObject("x2_it_spavscr305", oObject); + break; + case 123: + oItem = CreateItemOnObject("x2_it_spdvscr306", oObject); + break; + case 124: + oItem = CreateItemOnObject("x2_it_spavscr304", oObject); + break; + case 125: + oItem = CreateItemOnObject("x2_it_spdvscr302", oObject); + break; + case 126: + oItem = CreateItemOnObject("x2_it_spdvscr301", oObject); + break; + case 127: + oItem = CreateItemOnObject("x2_it_spdvscr310", oObject); + break; + case 128: + oItem = CreateItemOnObject("x2_it_spavscr303", oObject); + break; + case 129: + oItem = CreateItemOnObject("x2_it_sparscrmc", oObject); + break; + case 130: + oItem = CreateItemOnObject("x2_it_spdvscr304", oObject); + break; + case 131: + oItem = CreateItemOnObject("x2_it_spavscr301", oObject); + break; + case 132: + oItem = CreateItemOnObject("x2_it_spdvscr311", oObject); + break; + case 133: + oItem = CreateItemOnObject("x2_it_spdvscr312", oObject); + break; + case 134: + oItem = CreateItemOnObject("x2_it_spavscr302", oObject); + break; + case 135: + oItem = CreateItemOnObject("x2_it_spdvscr313", oObject); + break; + case 136: + oItem = CreateItemOnObject("nw_it_sparscr414", oObject); + break; + case 137: + oItem = CreateItemOnObject("nw_it_sparscr405", oObject); + break; + case 138: + oItem = CreateItemOnObject("nw_it_sparscr406", oObject); + break; + case 139: + oItem = CreateItemOnObject("nw_it_sparscr411", oObject); + break; + case 140: + oItem = CreateItemOnObject("nw_it_sparscr416", oObject); + break; + case 141: + oItem = CreateItemOnObject("nw_it_sparscr412", oObject); + break; + case 142: + oItem = CreateItemOnObject("nw_it_sparscr418", oObject); + break; + case 143: + oItem = CreateItemOnObject("nw_it_sparscr413", oObject); + break; + case 144: + oItem = CreateItemOnObject("nw_it_sparscr408", oObject); + break; + case 145: + oItem = CreateItemOnObject("x1_it_spdvscr401", oObject); + break; + case 146: + oItem = CreateItemOnObject("x1_it_sparscr401", oObject); + break; + case 147: + oItem = CreateItemOnObject("nw_it_sparscr417", oObject); + break; + case 148: + oItem = CreateItemOnObject("x1_it_spdvscr402", oObject); + break; + case 149: + oItem = CreateItemOnObject("nw_it_sparscr401", oObject); + break; + case 150: + oItem = CreateItemOnObject("nw_it_spdvscr402", oObject); + break; + case 151: + oItem = CreateItemOnObject("nw_it_sparscr409", oObject); + break; + case 152: + oItem = CreateItemOnObject("nw_it_sparscr415", oObject); + break; + case 153: + oItem = CreateItemOnObject("nw_it_sparscr402", oObject); + break; + case 154: + oItem = CreateItemOnObject("nw_it_spdvscr401", oObject); + break; + case 155: + oItem = CreateItemOnObject("nw_it_sparscr410", oObject); + break; + case 156: + oItem = CreateItemOnObject("nw_it_sparscr403", oObject); + break; + case 157: + oItem = CreateItemOnObject("nw_it_sparscr404", oObject); + break; + case 158: + oItem = CreateItemOnObject("nw_it_sparscr407", oObject); + break; + case 159: + oItem = CreateItemOnObject("x2_it_spdvscr402", oObject); + break; + case 160: + oItem = CreateItemOnObject("x2_it_spdvscr403", oObject); + break; + case 161: + oItem = CreateItemOnObject("x2_it_spdvscr404", oObject); + break; + case 162: + oItem = CreateItemOnObject("x2_it_spdvscr405", oObject); + break; + case 163: + oItem = CreateItemOnObject("x2_it_spdvscr406", oObject); + break; + case 164: + oItem = CreateItemOnObject("x2_it_spdvscr401", oObject); + break; + case 165: + oItem = CreateItemOnObject("x2_it_spavscr401", oObject); + break; + case 166: + oItem = CreateItemOnObject("x2_it_spdvscr407", oObject); + break; + case 167: + oItem = CreateItemOnObject("nw_it_sparscr509", oObject); + break; + case 168: + oItem = CreateItemOnObject("x1_it_sparscr502", oObject); + break; + case 169: + oItem = CreateItemOnObject("nw_it_sparscr502", oObject); + break; + case 170: + oItem = CreateItemOnObject("nw_it_sparscr507", oObject); + break; + case 171: + oItem = CreateItemOnObject("nw_it_sparscr501", oObject); + break; + case 172: + oItem = CreateItemOnObject("nw_it_sparscr503", oObject); + break; + case 173: + oItem = CreateItemOnObject("nw_it_sparscr504", oObject); + break; + case 174: + oItem = CreateItemOnObject("x1_it_sparscr501", oObject); + break; + case 175: + oItem = CreateItemOnObject("x1_it_spdvscr403", oObject); + break; + case 176: + oItem = CreateItemOnObject("nw_it_sparscr508", oObject); + break; + case 177: + oItem = CreateItemOnObject("nw_it_sparscr505", oObject); + break; + case 178: + oItem = CreateItemOnObject("x1_it_spdvscr501", oObject); + break; + case 179: + oItem = CreateItemOnObject("nw_it_sparscr511", oObject); + break; + case 180: + oItem = CreateItemOnObject("nw_it_sparscr512", oObject); + break; + case 181: + oItem = CreateItemOnObject("nw_it_sparscr513", oObject); + break; + case 182: + oItem = CreateItemOnObject("nw_it_sparscr506", oObject); + break; + case 183: + oItem = CreateItemOnObject("x1_it_spdvscr502", oObject); + break; + case 184: + oItem = CreateItemOnObject("nw_it_spdvscr501", oObject);//raisedead + break; + case 185: + oItem = CreateItemOnObject("nw_it_sparscr510", oObject); + break; + case 186: + oItem = CreateItemOnObject("x2_it_spdvscr508", oObject); + break; + case 187: + oItem = CreateItemOnObject("x2_it_spavscr501", oObject); + break; + case 188: + oItem = CreateItemOnObject("x2_it_spdvscr501", oObject); + break; + case 189: + oItem = CreateItemOnObject("x2_it_spdvscr504", oObject); + break; + case 190: + oItem = CreateItemOnObject("x2_it_spavscr503", oObject); + break; + case 191: + oItem = CreateItemOnObject("x2_it_spdvscr509", oObject); + break; + case 192: + oItem = CreateItemOnObject("x2_it_spdvscr505", oObject); + break; + case 193: + oItem = CreateItemOnObject("x2_it_spavscr502", oObject); + break; + case 194: + oItem = CreateItemOnObject("x2_it_spdvscr502", oObject); + break; + case 195: + oItem = CreateItemOnObject("x2_it_spdvscr506", oObject); + break; + case 196: + oItem = CreateItemOnObject("x2_it_spdvscr507", oObject); + break; + case 197: + oItem = CreateItemOnObject("x2_it_spdvscr503", oObject); + break; + case 198: + oItem = CreateItemOnObject("nw_it_sparscr603", oObject); + break; + case 199: + oItem = CreateItemOnObject("x1_it_sparscr602", oObject); + break; + case 200: + oItem = CreateItemOnObject("nw_it_sparscr607", oObject); + break; + case 201: + oItem = CreateItemOnObject("nw_it_sparscr610", oObject); + break; + case 202: + oItem = CreateItemOnObject("x1_it_sparscr601", oObject); + break; + case 203: + oItem = CreateItemOnObject("x1_it_spdvscr604", oObject); + break; + case 204: + oItem = CreateItemOnObject("nw_it_sparscr608", oObject); + break; + case 205: + oItem = CreateItemOnObject("x1_it_sparscr605", oObject); + break; + case 206: + oItem = CreateItemOnObject("nw_it_sparscr601", oObject); + break; + case 207: + oItem = CreateItemOnObject("nw_it_sparscr602", oObject); + break; + case 208: + oItem = CreateItemOnObject("nw_it_sparscr612", oObject); + break; + case 209: + oItem = CreateItemOnObject("nw_it_sparscr613", oObject); + break; + case 210: + oItem = CreateItemOnObject("x1_it_sparscr603", oObject); + break; + case 211: + oItem = CreateItemOnObject("nw_it_sparscr611", oObject); + break; + case 212: + oItem = CreateItemOnObject("x1_it_spdvscr603", oObject); + break; + case 213: + oItem = CreateItemOnObject("nw_it_sparscr604", oObject); + break; + case 214: + oItem = CreateItemOnObject("nw_it_sparscr609", oObject); + break; + case 215: + oItem = CreateItemOnObject("x1_it_sparscr604", oObject); + break; + case 216: + oItem = CreateItemOnObject("nw_it_sparscr605", oObject); + break; + case 217: + oItem = CreateItemOnObject("nw_it_sparscr614", oObject); + break; + case 218: + oItem = CreateItemOnObject("nw_it_sparscr606", oObject); + break; + case 219: + oItem = CreateItemOnObject("x2_it_spdvscr603", oObject); + break; + case 220: + oItem = CreateItemOnObject("x2_it_spdvscr601", oObject); + break; + case 221: + oItem = CreateItemOnObject("x2_it_spdvscr606", oObject); + break; + case 222: + oItem = CreateItemOnObject("x2_it_spdvscr604", oObject); + break; + case 223: + oItem = CreateItemOnObject("x2_it_spdvscr605", oObject); + break; + case 224: + oItem = CreateItemOnObject("x2_it_spavscr602", oObject); + break; + case 225: + oItem = CreateItemOnObject("x2_it_spdvscr602", oObject); + break; + case 226: + oItem = CreateItemOnObject("x2_it_spavscr601", oObject); + break; + case 227: + oItem = CreateItemOnObject("x1_it_spdvscr701", oObject); + break; + case 228: + oItem = CreateItemOnObject("x1_it_sparscr701", oObject); + break; + case 229: + oItem = CreateItemOnObject("nw_it_sparscr707", oObject); + break; + case 230: + oItem = CreateItemOnObject("x1_it_spdvscr702", oObject); + break; + case 231: + oItem = CreateItemOnObject("nw_it_sparscr704", oObject); + break; + case 232: + oItem = CreateItemOnObject("x1_it_spdvscr703", oObject); + break; + case 233: + oItem = CreateItemOnObject("nw_it_sparscr708", oObject); + break; + case 234: + oItem = CreateItemOnObject("nw_it_spdvscr701", oObject); + break; + case 235: + oItem = CreateItemOnObject("nw_it_sparscr705", oObject); + break; + case 236: + oItem = CreateItemOnObject("nw_it_sparscr702", oObject); + break; + case 237: + oItem = CreateItemOnObject("nw_it_sparscr706", oObject); + break; + case 238: + oItem = CreateItemOnObject("nw_it_sparscr802", oObject); + break; + case 239: + oItem = CreateItemOnObject("nw_it_spdvscr702", oObject);//ressurection + break; + case 240: + oItem = CreateItemOnObject("nw_it_sparscr701", oObject); + break; + case 241: + oItem = CreateItemOnObject("nw_it_sparscr703", oObject); + break; + case 242: + oItem = CreateItemOnObject("x2_it_spavscr701", oObject); + break; + case 243: + oItem = CreateItemOnObject("x2_it_spdvscr702", oObject); + break; + case 244: + oItem = CreateItemOnObject("x2_it_spavscr703", oObject); + break; + case 245: + oItem = CreateItemOnObject("x2_it_spdvscr701", oObject); + break; + case 246: + oItem = CreateItemOnObject("x1_it_sparscr801", oObject); + break; + case 247: + oItem = CreateItemOnObject("x1_it_spdvscr803", oObject); + break; + case 248: + oItem = CreateItemOnObject("x1_it_spdvscr804", oObject); + break; + case 249: + oItem = CreateItemOnObject("x1_it_spdvscr801", oObject); + break; + case 250: + oItem = CreateItemOnObject("x1_it_spdvscr704", oObject); + break; + case 251: + oItem = CreateItemOnObject("nw_it_sparscr803", oObject); + break; + case 252: + oItem = CreateItemOnObject("x1_it_spdvscr602", oObject); + break; + case 253: + oItem = CreateItemOnObject("nw_it_sparscr809", oObject); + break; + case 254: + oItem = CreateItemOnObject("nw_it_sparscr804", oObject); + break; + case 255: + oItem = CreateItemOnObject("nw_it_sparscr807", oObject); + break; + case 256: + oItem = CreateItemOnObject("nw_it_sparscr806", oObject); + break; + case 257: + oItem = CreateItemOnObject("nw_it_sparscr801", oObject); + break; + case 258: + oItem = CreateItemOnObject("nw_it_sparscr808", oObject); + break; + case 259: + oItem = CreateItemOnObject("nw_it_sparscr805", oObject); + break; + case 260: + oItem = CreateItemOnObject("x2_it_spdvscr804", oObject); + break; + case 261: + oItem = CreateItemOnObject("x2_it_spavscr801", oObject); + break; + case 262: + oItem = CreateItemOnObject("x2_it_spdvscr801", oObject); + break; + case 263: + oItem = CreateItemOnObject("x2_it_spdvscr802", oObject); + break; + case 264: + oItem = CreateItemOnObject("x2_it_spdvscr803", oObject); + break; + case 265: + oItem = CreateItemOnObject("x1_it_sparscr901", oObject); + break; + case 266: + oItem = CreateItemOnObject("nw_it_sparscr905", oObject); + break; + case 267: + oItem = CreateItemOnObject("nw_it_sparscr908", oObject); + break; + case 268: + oItem = CreateItemOnObject("nw_it_sparscr902", oObject); + break; + case 269: + oItem = CreateItemOnObject("nw_it_sparscr912", oObject); + break; + case 270: + oItem = CreateItemOnObject("nw_it_sparscr906", oObject); + break; + case 271: + oItem = CreateItemOnObject("nw_it_sparscr901", oObject); + break; + case 272: + oItem = CreateItemOnObject("nw_it_sparscr903", oObject); + break; + case 273: + oItem = CreateItemOnObject("nw_it_sparscr910", oObject); + break; + case 274: + oItem = CreateItemOnObject("nw_it_sparscr904", oObject); + break; + case 275: + oItem = CreateItemOnObject("nw_it_sparscr911", oObject); + break; + case 276: + oItem = CreateItemOnObject("x1_it_spdvscr901", oObject); + break; + case 277: + oItem = CreateItemOnObject("nw_it_sparscr909", oObject); + break; + case 278: + oItem = CreateItemOnObject("nw_it_sparscr907", oObject); + break; + case 279: + oItem = CreateItemOnObject("x2_it_spavscr901", oObject); + break; + case 280: + oItem = CreateItemOnObject("x2_it_spdvscr901", oObject); + break; + case 281: + oItem = CreateItemOnObject("x2_it_spdvscr902", oObject); + break; + case 282: + oItem = CreateItemOnObject("x2_it_spdvscr903", oObject); + break; + case 283: + oItem = CreateItemOnObject("x2_it_spavscr902", oObject); + break; + case 284: + oItem = CreateItemOnObject("nw_it_spdvscr301", oObject); + break; + case 285: + oItem = CreateItemOnObject("x1_it_spdvscr601", oObject); + break; + case 286: + oItem = CreateItemOnObject("x1_it_spdvscr802", oObject); + break; + case 287: + oItem = CreateItemOnObject("x1_it_spdvscr605", oObject); + break; + } + int nLevel = GetHitDice(oObject); + if(GetGoldPieceValue(oItem)>25*nLevel) + DestroyObject(oItem); + if(GetGoldPieceValue(oItem)<5*nLevel) + DestroyObject(oItem); + } +} + +//:: Test Void Main +//:: void main (){} \ No newline at end of file diff --git a/src/include/inc_ravage.nss b/src/include/inc_ravage.nss new file mode 100644 index 0000000..857a975 --- /dev/null +++ b/src/include/inc_ravage.nss @@ -0,0 +1,40 @@ +//:://///////////////////////////////////////////// +//:: Poison System includes for Ravages +//:: inc_ravage +//:://///////////////////////////////////////////// +//::////////////////////////////////////////////// +//:: Created By: Ornedan +//:: Created On: 10.01.2005 +//::////////////////////////////////////////////// + +#include "prc_alterations" + +// Calculates the amount of extra ability damage ravages cause: +// Charisma bonus, if any +// +1 if undead +// +1 if elemental +// +2 if outsider +// +2 if cleric +int GetRavageExtraDamage(object oTarget) +{ + int nRacial = MyPRCGetRacialType(oTarget); + int nExtra = GetAbilityModifier(ABILITY_CHARISMA, oTarget); + nExtra = (nExtra > 0) ? nExtra : 0; + if ( nRacial == RACIAL_TYPE_UNDEAD) nExtra++; + if ( nRacial == RACIAL_TYPE_ELEMENTAL) nExtra++; + if ( nRacial == RACIAL_TYPE_OUTSIDER) nExtra+=2; + if ( GetLevelByClass(CLASS_TYPE_CLERIC,oTarget)) nExtra+=2; + + + return nExtra; +} + +// Creates the VFX common to all ravages. +// This is used when they deal their damage +effect GetRavageVFX() +{ + //effect eReduce = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE); + effect eHoly = EffectVisualEffect(VFX_IMP_SUNSTRIKE); + //effect eHoly = EffectVisualEffect(VFX_IMP_HEAD_HOLY); + return eHoly;//EffectLinkEffects(eReduce, eHoly); +} \ No newline at end of file diff --git a/src/include/inc_rend.nss b/src/include/inc_rend.nss new file mode 100644 index 0000000..06e2b2f --- /dev/null +++ b/src/include/inc_rend.nss @@ -0,0 +1,237 @@ +//:://///////////////////////////////////////////// +//:: Rend OnHit include +//:: inc_rend +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// +//:: Created By: Ornedan +//:: Created On: 23.01.2005 +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Constant defintions */ +////////////////////////////////////////////////// + +const string REND_1ST_HIT_DONE = "RendingHit1stHit"; +const string REND_DONE = "RendingHitDone"; + +const string FROST_1ST_HIT_DONE = "FrostRendHit1stHit"; +const string FROST_DONE = "FrostRendHitDone"; + +const string SPINE_1ST_HIT_DONE = "SpineRendHit1stHit"; +const string SPINE_DONE = "SpineRendHitDone"; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +void DoRend(object oTarget, object oAttacker, object oWeapon); +int GetDamageFromConstant(int nIPConst); + +void DoFrostRend(object oTarget, object oAttacker, object oWeapon); + +#include "moi_inc_moifunc" + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +void DoRend(object oTarget, object oAttacker, object oWeapon) +{ + if (DEBUG) DoDebug("DoRend running"); + // Only one rend allowed per round for the sake of clearness + if(GetLocalInt(oAttacker, REND_DONE)) + return; + + if(GetLocalObject(oAttacker, REND_1ST_HIT_DONE) == oTarget) + { + if (DEBUG) DoDebug("DoRend second hit"); + // First, find the weapon base damage + int nIPConst; + itemproperty ipCheck = GetFirstItemProperty(oWeapon); + while(GetIsItemPropertyValid(ipCheck)) + { + if(GetItemPropertyType(ipCheck) == ITEM_PROPERTY_MONSTER_DAMAGE) + { + nIPConst = GetItemPropertyCostTableValue(ipCheck); + break; + } + ipCheck = GetNextItemProperty(oWeapon); + } + + int nDamage = GetDamageFromConstant(nIPConst); + int nStrBon = GetAbilityModifier(ABILITY_STRENGTH, oAttacker); + nStrBon = nStrBon < 0 ? 0 : nStrBon; + nDamage += nStrBon; + if (GetLevelByClass(CLASS_TYPE_BLACK_BLOOD_CULTIST, oAttacker) >= 6) nDamage *= 2; + if (GetIsMeldBound(oAttacker, MELD_GIRALLON_ARMS) == CHAKRA_ARMS) nDamage *= 2; + if (GetHasSpellEffect(VESTIGE_IPOS, oAttacker) >= 6) nDamage *= 2; + + int nDamageType; + switch(GetBaseItemType(oWeapon)) + { + case BASE_ITEM_CBLUDGWEAPON: + nDamageType = DAMAGE_TYPE_BLUDGEONING; + break; + case BASE_ITEM_CPIERCWEAPON: + nDamageType = DAMAGE_TYPE_PIERCING; + break; + // Both slashing and slashing & piercing weapons do slashing damage from rend + // because it's not possible to make the damage be of both types in any + // elegant way + case BASE_ITEM_CSLASHWEAPON: + case BASE_ITEM_CSLSHPRCWEAP: + nDamageType = DAMAGE_TYPE_SLASHING; + break; + + default: + WriteTimestampedLogEntry("Unexpected weapon type in DoRend()!"); + return; + } + + // Apply damage and VFX + effect eDamage = EffectDamage(nDamage, nDamageType); + effect eLink = EffectLinkEffects(eDamage, EffectVisualEffect(VFX_COM_BLOOD_CRT_RED)); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget); + + // Tell people what happened + // * AttackerName rends TargetName * + FloatingTextStringOnCreature("* " + GetName(oAttacker) + " " + GetStringByStrRef(0x01000000 + 51197) + " " + GetName(oTarget) + " *", oAttacker, TRUE); + + // Note the rend having happened in the locals + SetLocalInt(oAttacker, REND_DONE, TRUE); + DelayCommand(4.5, DeleteLocalInt(oAttacker, REND_DONE)); + }// end if - the target had a local signifying that rend is possible + else + { + SetLocalObject(oAttacker, REND_1ST_HIT_DONE, oTarget); + if (DEBUG) DoDebug("DoRend first hit"); + } +} + +void DoFrostRend(object oTarget, object oAttacker, object oWeapon) +{ + // Only one rend allowed per round for the sake of clearness + if(GetLocalInt(oAttacker, FROST_DONE)) + return; + + float fDelay1 = 6.0 - (6.0 / GetMainHandAttacks(oAttacker)); + float fDelay2 = 6.0 - 2 * (6.0 - fDelay1); + + if(GetLocalObject(oAttacker, FROST_1ST_HIT_DONE) == oTarget) + { + // First, find the weapon base damage + int nIPConst; + itemproperty ipCheck = GetFirstItemProperty(oWeapon); + while(GetIsItemPropertyValid(ipCheck)) + { + if(GetItemPropertyType(ipCheck) == ITEM_PROPERTY_MONSTER_DAMAGE) + { + nIPConst = GetItemPropertyCostTableValue(ipCheck); + break; + } + ipCheck = GetNextItemProperty(oWeapon); + } + + + int nDamage = GetDamageFromConstant(nIPConst); + int nStrBon = GetAbilityModifier(ABILITY_STRENGTH, oAttacker); + nStrBon = nStrBon < 0 ? 0 : nStrBon; + // nDamage += nStrBon; + // nDamage += FloatToInt(nStrBon/2); //1.5x Strength damage + nDamage += FloatToInt(nStrBon * 1.5); + + int nDamageType = DAMAGE_TYPE_BLUDGEONING; // It's an unarmed strike, so always bludgeoning for this + + // Apply damage and VFX + effect eDamage = EffectDamage(nDamage, nDamageType); + effect eLink = EffectLinkEffects(eDamage, EffectVisualEffect(VFX_IMP_FROST_L)); + eLink = EffectLinkEffects(eLink, EffectDamage(d6(), DAMAGE_TYPE_COLD)); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget); + + // Tell people what happened + // * AttackerName rends TargetName * + FloatingTextStringOnCreature("* " + GetName(oAttacker) + " " + GetStringByStrRef(0x01000000 + 51197) + " " + GetName(oTarget) + " *", + oAttacker, + TRUE); + + // Note the rend having happened in the locals + SetLocalInt(oAttacker, FROST_DONE, TRUE); + DelayCommand(fDelay2, DeleteLocalInt(oAttacker, FROST_DONE)); + }// end if - the target had a local signifying that rend is possible + else + { + SetLocalObject(oAttacker, FROST_1ST_HIT_DONE, oTarget); + DelayCommand(fDelay1, DeleteLocalObject(oAttacker, FROST_1ST_HIT_DONE)); + } +} + +void DoSpineRend(object oTarget, object oAttacker, object oWeapon) +{ + // Only one rend allowed per round for the sake of clearness + if(GetLocalInt(oAttacker, SPINE_DONE)) + return; + + float fDelay1 = 6.0 - (6.0 / GetMainHandAttacks(oAttacker)); + float fDelay2 = 6.0 - 2 * (6.0 - fDelay1); + + if(GetLocalObject(oAttacker, SPINE_1ST_HIT_DONE) == oTarget) + { + int nStrBon = GetAbilityModifier(ABILITY_STRENGTH, oAttacker); + nStrBon = nStrBon < 0 ? 0 : nStrBon; + int nDamage = FloatToInt(nStrBon * 1.5); + + // Apply damage and VFX + effect eDamage = EffectDamage(nDamage + d6(2), DAMAGE_TYPE_PIERCING); + effect eLink = EffectLinkEffects(eDamage, EffectVisualEffect(VFX_COM_BLOOD_SPARK_MEDIUM)); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget); + + // Tell people what happened + // * AttackerName rends TargetName * + FloatingTextStringOnCreature("* " + GetName(oAttacker) + " " + GetStringByStrRef(0x01000000 + 51197) + " " + GetName(oTarget) + " *", oAttacker, TRUE); + + // Note the rend having happened in the locals + SetLocalInt(oAttacker, SPINE_DONE, TRUE); + DelayCommand(fDelay2, DeleteLocalInt(oAttacker, SPINE_DONE)); + }// end if - the target had a local signifying that rend is possible + else + { + SetLocalObject(oAttacker, SPINE_1ST_HIT_DONE, oTarget); + DelayCommand(fDelay1, DeleteLocalObject(oAttacker, SPINE_1ST_HIT_DONE)); + } +} + +int GetDamageFromConstant(int nIPConst) +{ + // First, handle the values outside the main series + switch(nIPConst) + { + case IP_CONST_MONSTERDAMAGE_1d2: return d2(1); + case IP_CONST_MONSTERDAMAGE_1d3: return d3(1); + case IP_CONST_MONSTERDAMAGE_1d4: return d4(1); + case IP_CONST_MONSTERDAMAGE_2d4: return d4(2); + case IP_CONST_MONSTERDAMAGE_3d4: return d4(3); + case IP_CONST_MONSTERDAMAGE_4d4: return d4(4); + case IP_CONST_MONSTERDAMAGE_5d4: return d4(5); + case IP_CONST_MONSTERDAMAGE_7d4: return d4(7); + } + + + int nDieNum = ((nIPConst - 8) % 10) + 1; + + switch((nIPConst - 8) / 10) + { + case 0: return d6(nDieNum); + case 1: return d8(nDieNum); + case 2: return d10(nDieNum); + case 3: return d12(nDieNum); + case 4: return d20(nDieNum); + } + + WriteTimestampedLogEntry("Unknown IP_CONST_MONSTERDAMAGE_* constant passed to GetDamageFromConstant()!"); + return 0; +} + +//:: void main (){} \ No newline at end of file diff --git a/src/include/inc_sbr_readme.nss b/src/include/inc_sbr_readme.nss new file mode 100644 index 0000000..87e7294 --- /dev/null +++ b/src/include/inc_sbr_readme.nss @@ -0,0 +1,227 @@ +/* +Supply Based Rest System: Version 1.2 +Created by: Demetrious and OldManWhistler + +For questions or comments, or to get the latest version please visit: +http://nwvault.ign.com/Files/scripts/data/1055903555000.shtml + +**************************************************************************** +CONTENTS +**************************************************************************** + +Placeables>>Misc Interior - restful bed, restful bed (invisible object), restful cot, restful bedroll, restful campsite. + +Items>>Misc>>kits - Supply kit, Woodland kit, DM Rest Widget. + +Supply Kit weighs 30 lbs, costs 100gp and can be used by anyone to create a restful object. +Supply Kit weighs 15 lbs, costs 75gp and can only be used by rangers/druids. + +Scripts - sbr_onrest, sbr_restful_obj, sbr_onactivate, sbr_onacquire, sbr_include, logmessage + + + +**************************************************************************** +DESCRIPTION +**************************************************************************** + +This is a supply based rest system. There are three methods of resting in this system: + +1) Restful beds, cots, bedrolls - I personally place these in towns or cities and maybe rarely in dungeons where it is assumed that there are sufficient supplies to rest (ie food, water, bed). These objects will ALWAYS allow a player to rest. + +2) Supply kit resting (or woodland kit resting) - Using this item will create a campfire that players may use to rest. For roleplaying, the kit contains all supplies needed to rest and these are used while the players rest. It is removed after a time delay of several minutes. + +3) DM Controlled rest widget - DM can turn resting on/off for the entire module, a specific area, or a specific player. + +This is an attempt create a rest system closer to the resting that I remember from PnP. This system encourages players to rest as a group and forces them to ration supplies. Finally it forces the players to guard the campfire because how bad would it be if a bear destroyed the campfire before they could all rest. + +The kits are purposefully heavy. This is to encourage appropriate rationing of supplies. + +If player rest is restricted by a BW trigger or by your widget, you will receive a message stating the reason rest was restricted and the message will include the player name and area and level that restricted rest. Both the player and the DM will receive a message that indicates the reason for rest being canceled. + + + +**************************************************************************** +INSTALLATION +**************************************************************************** + +// SupplyBasedRest.erf contains the base scripts, the placeables and the items. +// sbr_acttag.erf is only needed if you use an activate item system +// where you execute the item's tag as a script +// (ie: you use X0_ONITEMACTV as your OnActivateItem script). + +// #1: Modify OnAcquiredItem module event script (create if it does not exist). +// Add the following line to somewhere in the void main function. If you do +// not have an OnAcquiredItem script then you can use 'sbr_onacquire' as your +// OnAcquiredItem script. +ExecuteScript("sbr_onacquire", OBJECT_SELF); + +// #2: Set your module OnPlayerRest script to "sbr_onrest". + +// #3: Modify OnActivateItem module event script. You can skip this step if you use an activate item script +// that executes a script with the same name as the item tag and you have imported sbr_acttag.erf. +ExecuteScript("sbr_onactivate", OBJECT_SELF); + +// #4: Add the kits to some stores and place restful objects in your inns. + +// #5: (optional) Create a journal entry that explains the rest system and give +// it to players when they enter the module. A sample journal entry is provided +// in this documentation. + +// #6: (optional) You can extend the rest system by handling the SBR_EVENT_REST +// in the module OnUserDefined event. You could easily add a wandering monster system, +// a "dream plane" or have cutscenes play when resting in specific areas. +// Read more about the OnUserDefined event at: +// http://www.reapers.org/nwn/reference/compiled/event.OnUserDefined.html +// SBR_EVENT_REST is defined in the sbr_include script. + + + +**************************************************************************** +CONFIGURATION +**************************************************************************** + +Configuration settings can be found in 'sbr_include'. + +Always recompile your module after modifying sbr_include because it is an include file. +#1: Select "Build" from the toolset menu and then choose "Build Module". +#2: Click the "Advanced Controls" box to bring up the advanced options. +#3: Make sure that the only boxes that are selected are "Compile" and "Scripts". +#4: Click the "Build" button. +#5: Remember to always make sure you are using the options you want to use when running "Build Module"! + +// The variable below sets up how the DM Rest widget is configured. +// Change this to true to only toggle rest module wide rather +// than using the 3 different level options. +// If this is TRUE clicking the ground, yourself or a player will +// toggle the Module level rest restriction. +// If FALSE, then you have 3 options. +// Target yourself = Module level toggle. +// Target ground (ie the area) = Area level toggle. +// Target player = Party level toggle. +// +// In either mode, targeting an NPC or other placeable will report +// all pertinent rest system information to you. +const int SBR_MAKE_IT_SIMPLE = FALSE; + +// This is the maximum distance the player can be from a "restful object" to +// automatically use it when they hit rest. *****BUILDERS remember that this does NOT +// account for walls so be careful at inns with bed placement****** +const float SBR_DISTANCE = 5.0; + +// This is the event number that will be signalled to your module OnUserDefined Event +// when a player rests. This user defined event is how you should extend the system +// so that specific things happen on rest. IE: create some wandering monsters, +// play a cutscene, teleport them to a "dream" area, etc. +const int SBR_EVENT_REST = 2000; + + + +**************************************************************************** +PLAYER DOCUMENTATION +**************************************************************************** + +This module uses Supply Based Rest. + +In order to rest you must be near a "Restful Object". These objects have "Restful" in their name: a Restful Bed or a Restful Campsite, for example. You can use a restful object by clicking on it or by pressing the rest button while you are near it. + +If you are not near a restful object then you must use a supply kit to build one. Using a supply kit will create a temporary Restful Campsite that will last several minutes. There are two ways to use a supply kit. You can either right click on the kit and activate the item, or you can hit the rest button (or press 'r') twice in rapid succession. + +There are two kinds of supply kits: regular kits that anyone can use and woodland kits that are lighter/cheaper but can only be carried by rangers or druids. You cannot carry a woodland kit unless you are a ranger or druid. + +Supply kits are quite heavy and quite expensive. This is to encourage players to rest as a group and to encourage players to ration the how often they rest. + +Sometimes you will encounter areas that are not secure for rest. This means you must find a safe area (an enclosed room for example) before you can rest. + + + +**************************************************************************** +BUILDER NOTES +**************************************************************************** +This version will allow you to use the new BioWare rest restriction triggers "on top of" these restrictions. For example, the rules above will still apply, but you can go the extra step and make players close the door to the room (like the BioWare trigger) just by laying down the standard trigger - all code is included and integrated into the system. For discussion on this new trigger - see bottom of document. + +LogMessage is used for displaying text to players and DMs. It is scripting package designed by OldManWhistler. You can configure who receives feedback to almost anything imaginable. See the actual script for details and see the sbr_include file to see the multitude of options available to you. + + + +**************************************************************************** +DM FUNCTIONS +**************************************************************************** + +1) DM Rest Widget. Allows you to have total control over rest in your module. There are 2 modes: standard and "MAKEITSIMPLE". In standard mode, if you target your avatar it will toggle rest enable/disable on a module level. Targeting the ground will toggle rest enable/disable on an area level and targeting a player will toggle rest enable/disable on a party level. In "MAKEITSIMPLE" mode, targeting the ground, yourself or a player will toggle the module level rest restriction. Finally, targeting an NPC or placeable will report the rest settings just like clicking a restful bed (see below). + +Toggling the module level rest will NOT remove area, or party rest restrictions you set with the widget. The same goes for area and party restrictions. They are all INDEPENDENT and ALL must be OFF to allow the player to rest. You will receive a message why they can't but you could have 3 separate settings to clear if in standard mode. I included the feature with extra flexibility due to the huge varieties of server set-ups using NWN. For single party, classic DM adventure - "MAKEITSIMPLE" is the easiest. + +To change modes: Open the sbr_include file and change the "MAKEITSIMPLE" variable to either TRUE or FALSE. Default is FALSE. BUILD YOUR MODULE IF YOU CHANGE ANY INCLUDE FILE - at least compile all scripts using the build function. + +2) Rest settings report. The report has a lot of pertinent information to you to help you keep track of exactly what is the status of the rest system. You will receive the following information if you use the DM Rest Widget on an NPC/placeable OR if you click on any restful object, : + +- Module Rest Setting +- Area Rest Setting +- BW trigger information: is there a Bioware rest trigger in the current area. + +The following information is reported based on the nearest player. NOTE: It uses GetNearestCreature function and therefore will return "No valid player found" if the "nearest" player is in a different area transition. This is a good feature for PW or other situations with multiple parties. + +- Player Rest Setting +- Number of party kits (both woodland and supply kit information). + + + +**************************************************************************** +QUESTIONS AND COMMENTS +**************************************************************************** + +Q: What is the difference between the supply kit and the woodland kit? + +A: The woodland kit can be used by rangers and druids. It attempts to simulate the fact that these classes can find many resources from the land. Therefore, woodland kits are significantly lighter as these classes will supplement the kit with things from the woods. The woodlands kits are medium size item and the supply kits are a large item. Woodland kits are a little bit cheaper too. + +NOTE: If you are NOT a druid or a ranger, the OnAcquire code will drop any woodland kit you attempt to hold or purchase. This is to avoid other players acting as pack mules for the druid or ranger so that they can use the cheaper kits. Not exactly "realistic" but forces them to play fair. + +If you don't like this added feature of the woodland kit - don't add any to stores and then you do NOT need the sbr_onacquire script. + + +Q: What do the kits cost? + +A: 100 for supply kit and 75 for woodland kit. This is a pretty hefty price tag for a brand new level 1 adventures and therefore you may need to adjust the starting money value (or just give out a few supply kits for "free" when you begin the adventure). Another option would be to make the players rest in a town or inn until they gain enough money to begin traveling and camping out in the wilderness. + + +Q: How does this affect game play balance? + +A: The number of kits the players carry ARE the only limit to resting so be careful with not only how much money the players have, but use caution with store inventories and with magical bag or bags of holding. The kits are large so that only 3 supply kits or 6 woodland kits can fit into a bag of holding but as a designer, it may be important to further ration the kits (The are "rationed" in a sense of the weight and price tag). I initially had the weight at 50lb for the supply kit but decided that this was too heavy for non-fighter based parties and so I backed the weight down. You can adjust the weight or price by editing the price in the toolset and then restocking any stores that you have created. + + +**BW Rest Trigger Commentary and Answers** +Q: What is the deal with the new BW rest triggers? + +First off, much of this is opinion, much is fact. They are not simple and they are not easy to integrate into a module. They are poorly documented and the documentation contains errors. In the official campaign there are 2 checks that are performed to rest. One is area specific and one looks for this trigger. There are subroutines for both of these checks. If you do NOT have rest script - the trigger does nothing despite what the comment says. You should also NOT have the area level "No rest" box checked like it says. All this being said you can use the idea but it takes custom work on your end as a builder. +How do they work in this system? Closer to what I expected :) . In this system, if you lay down a BW rest trigger that ENTIRE AREA becomes a region where the players MUST find a secure region. It will NOT affect other areas (this is a coding change I made to the trigger subroutine - by default one BW trigger negated resting throughout the entire module without adding more code other places). That is it. The trigger must contain one door. You could still use the "no rest" box in the area properties to disallow rest everywhere in the area at all times. +I hated to have to include this long explanation but thought it would save me time and effort in the long run of answering a lot of questions related to this system. + + + +**************************************************************************** +CONCLUSION +**************************************************************************** + +As a builder, I find the system easy to install and very flexible. I think it is straightforward for players and functions to limit rest in a way that allows the players to decide when, where, and how they want it to happen while the final decision to "how many times" is left to the builder when they place the objects and supplies. + +Special thanks to Mogney, Dick Nervous, and JohhnyB for play testing, feedback, and fine tuning of the concept. + +Demetrious + + + +**************************************************************************** +CHANGELOG +**************************************************************************** + +v1.1 to v1.2 +- Cosmetic module changes: made the signs, door and merchants plot so they couldn't be destroyed and screw up the tutorial. +- Revamped the documentation and installation instructions. +- Changed "IsDM" checks to check for DMPossessed creatures. The system will treat DM possessed creatures the same as DMs. +- Added a module OnUserDefined event for players resting so that you can easily extend the rest system without touching the code. +- Changed interface so that players have to hit 'r' or the rest button twice to enable the "automatically use supply" feature. In live play some players would accidently hit R because they forgot to press enter before they started typing. This solves that issue. +- Hitting the rest button when you are near a "restful" object will automatically use that restful object instead of a kit. In live play some players who were not used to the system would try a normal rest and accidently use another kit. This solves that issue. +- Changed it so that woodland kits are not destroyed when picked up by non-ranger/druids. Now they will be dropped. In live play some players would accidently destroy woodland kits by picking them up. This solves that issue. +- Modified the store conversations to reflect the changes. +- Version 1.1 was tagged as requiring SoU. Version 1.2 can be used by anyone -- regardless of whether they have SoU. +*/ diff --git a/src/include/inc_set.nss b/src/include/inc_set.nss new file mode 100644 index 0000000..28664fd --- /dev/null +++ b/src/include/inc_set.nss @@ -0,0 +1,667 @@ +//:://///////////////////////////////////////////// +//:: Set-like storage data type include +//:: inc_set +//::////////////////////////////////////////////// +/** @file + This file defines a "data type" that behaves + like a set. It is implemented as an extension + of the arrays defined in prc_inc_array. + + Operations: + - Get number of entities in the set. O(1) + - Store an entity in the set. O(1) + - Remove an entity from the set. O(n) + - Determine if the set contains a given entity. O(1) + - Get operations on the underlying array + + The memory complexity is O(n), specifically 2n(m + c), where + n is the number of entities stored in the set, m is the memory + taken up the local variable store of a member entity and c is + a constant overhead from disambiguation strings. + + Note that a set can contain only contain one instance + of any specific entity. Any attempts to add an entity to + a set that is already a member of will return with success, + but do nothing. + For example, if a set contains {"Foo", "Bar, 123, OBJECT_INVALID} + calling set_add_string(container, setname, "Foo") will return + SDL_SUCCESS, but not modify the contents of the set. + + + @author Ornedan + @date Created - 2006.09.16 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Creates a new set on the given storage object. If a set with + * the same name already exists, the function fails. + * + * @param store The object to use as holder for the set + * @param name The name of the set + * @return SDL_SUCCESS if the set was successfully created, + * one of SDL_ERROR_* on error. + */ +int set_create(object store, string name); + +/** + * Deletes a set, deleting all local variables it consists of. + * + * @param store The object which holds the set to delete + * @param name The name of the set + * @return SDL_SUCCESS if the set was successfully deleted, + * one of SDL_ERROR_* on error + */ +int set_delete(object store, string name); + +/** + * Adds a string to the set. + * + * @param store The object holding the set + * @param name The name of the set + * @param entry The string to add + * @return SDL_SUCCESS if the addition was successfull, SDL_ERROR_* on error. + */ +int set_add_string(object store, string name, string entry); + +/** + * Adds a integer to the set. + * + * @param store The object holding the set + * @param name The name of the set + * @param entry The integer to add + * @return SDL_SUCCESS if the addition was successfull, SDL_ERROR_* on error. + */ +int set_add_int(object store, string name, int entry); + +/** + * Adds a float to the set. + * + * @param store The object holding the set + * @param name The name of the set + * @param entry The float to add + * @return SDL_SUCCESS if the addition was successfull, SDL_ERROR_* on error. + */ +int set_add_float(object store, string name, float entry); + +/** + * Adds a object to the set. + * + * @param store The object holding the set + * @param name The name of the set + * @param entry The object to add + * @return SDL_SUCCESS if the addition was successfull, SDL_ERROR_* on error. + */ +int set_add_object(object store, string name, object entry); + +/** + * Determines whether the set contains the given string. + * + * @param store The object holding the set + * @param name The name of the set + * @param entity The string to test + * @return TRUE if the set contains entry, FALSE otherwise + */ +int set_contains_string(object store, string name, string entity); + +/** + * Determines whether the set contains the given integer. + * + * @param store The object holding the set + * @param name The name of the set + * @param entity The integer to test + * @return TRUE if the set contains entry, FALSE otherwise + */ +int set_contains_int(object store, string name, int entity); + +/** + * Determines whether the set contains the given float. + * + * @param store The object holding the set + * @param name The name of the set + * @param entity The float to test + * @return TRUE if the set contains entry, FALSE otherwise + */ +int set_contains_float(object store, string name, float entity); + +/** + * Determines whether the set contains the given object. + * + * @param store The object holding the set + * @param name The name of the set + * @param entity The object to test + * @return TRUE if the set contains entry, FALSE otherwise + */ +int set_contains_object(object store, string name, object entity); + +/** + * Removes the given string from the set, if it is a member. + * + * @param store The object holding the set + * @param name The name of the set + * @param entity The string to remove + */ +void set_remove_string(object store, string name, string entity); + +/** + * Removes the given integer from the set, if it is a member. + * + * @param store The object holding the set + * @param name The name of the set + * @param entity The integer to remove + */ +void set_remove_int(object store, string name, int entity); + +/** + * Removes the given float from the set, if it is a member. + * + * @param store The object holding the set + * @param name The name of the set + * @param entity The float to remove + */ +void set_remove_float(object store, string name, float entity); + +/** + * Removes the given object from the set, if it is a member. + * + * @param store The object holding the set + * @param name The name of the set + * @param entity The object to remove + */ +void set_remove_object(object store, string name, object entity); + +/** + * Gets the type of the i:th member of the set. + * + * @param store The object holding the set + * @param name The name of the set + * @param i The index of the member the type of which to retrieve + * @return One of the ENTITY_TYPE_* defined in inc_heap, or 0 in case of error + */ +int set_get_member_type(object store, string name, int i); + + +/** + * Gets the i:th member of the set as a string. + * + * NOTE: If the member is actually not a string, the return + * value in undefined. As such, always check the real + * type of the member first using set_get_member_type(). + * + * @param store The object holding the set + * @param name The name of the set + * @param i The index to retrieve the string from + * @return The value contained at the index on success, + * "" on error + */ +string set_get_string(object store, string name, int i); + +/** + * Gets the i:th member of the set as an integer. + * + * NOTE: If the member is actually not an integer, the return + * value in undefined. As such, always check the real + * type of the member first using set_get_member_type(). + * + * @param store The object holding the set + * @param name The name of the set + * @param i The index to retrieve the string from + * @return The value contained at the index on success, + * 0 on error + */ +int set_get_int(object store, string name, int i); + +/** + * Gets the i:th member of the set as an float. + * + * NOTE: If the member is actually not an float, the return + * value in undefined. As such, always check the real + * type of the member first using set_get_member_type(). + * + * @param store The object holding the set + * @param name The name of the set + * @param i The index to retrieve the string from + * @return The value contained at the index on success, + * 0.0 on error + */ +float set_get_float(object store, string name, int i); + +/** + * Gets the i:th member of the set as an object. + * + * NOTE: If the member is actually not an object, the return + * value in undefined. As such, always check the real + * type of the member first using set_get_member_type(). + * + * @param store The object holding the set + * @param name The name of the set + * @param i The index to retrieve the string from + * @return The value contained at the index on success, + * OBJECT_INVALID on error + */ +object set_get_object(object store, string name, int i); + +/** + * Gets the number of members in the set + * + * @param store The object holding the set + * @param name The name of the set + * @return The size of the set, or -1 if the specified + * set does not exist. + */ +int set_get_size(object store, string name); + +/** + * Checks whether the given set exists. + * + * @param store The object holding the set + * @param name The name of the set + * @return TRUE if the set exists, FALSE otherwise. + */ +int set_exists(object store, string name); + + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +// prc_inc_array access is via inc_heap +//#include "prc_inc_array" +#include "inc_debug" +#include "inc_heap" + + +////////////////////////////////////////////////// +/* Internal Constants */ +////////////////////////////////////////////////// + +const string _PRC_SET_PREFIX = "@@@set"; + + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +/** Internal function. + * Performs the real addition operation. + * + * @param store The object holding the set + * @param name The name of the set + * @param entry String form of the entity to be stored in the set + * @param isobject Whether the entity being stored is an object. Objects need special handling + * @param obj The object being stored, if any + */ +int _inc_set_set_add_aux(object store, string name, string entry, int isobject = FALSE, object obj = OBJECT_INVALID) +{ + // Sanity checks + if(!set_exists(store, name)) + return SDL_ERROR_DOES_NOT_EXIST; + + // Generate real name for accessing array functions + name = _PRC_SET_PREFIX + name; + + // Set the presence marker to be the index where the entity will be stored + 1 to avoid storing a 0 + int index = array_get_size(store, name); + SetLocalInt(store, name + entry, index + 1); + + // Store the member's value in the array + if(isobject) + { + if(DEBUG) + { + Assert(array_set_object(store, name, index, obj) == SDL_SUCCESS, + "array_set_object(store, name, index, obj) == SDL_SUCCESS", + "", "inc_set", "_inc_set_set_add_aux" + ); + return SDL_SUCCESS; + } + else + { + return array_set_object(store, name, index, obj); + } + } + else + { + if(DEBUG) + { + Assert(array_set_string(store, name, index, entry) == SDL_SUCCESS, + "array_set_string(store, name, index, entry) == SDL_SUCCESS", + "", "inc_set", "_inc_set_set_add_aux" + ); + return SDL_SUCCESS; + } + else + { + return array_set_string(store, name, index, entry); + } + } +} + +/** Internal function. + * Determines whether the set contains the given entity. + * + * @param store The object holding the set + * @param name The name of the set + * @param entity The presence string for the entity to test + * @return TRUE if the set contains the entity, FALSE otherwise + */ +int _inc_set_set_contains_aux(object store, string name, string entity) +{ + // Sanity check + if(!set_exists(store, name)) + return FALSE; + + // Get the value of the presence marker and normalise to TRUE / FALSE + return GetLocalInt(store, _PRC_SET_PREFIX + name + entity) != 0; +} + +/** Internal function. + * Removes the given entity from the set. + * + * @param store The object holding the set + * @param name The name of the set + * @param entity The presence string for the entity to remove + */ +void _inc_set_set_remove_aux(object store, string name, string entity) +{ + // Set does not exist or exists, but does not contain the given entity. Nothing to do + if(!_inc_set_set_contains_aux(store, name, entity)) + return; + + // Generate real name for accessing array functions + name = _PRC_SET_PREFIX + name; + + // Get the index where the entity is stored and the size of the underlying array + int index = GetLocalInt(store, name + entity) - 1; + int size = array_get_size(store, name); + string raw; + object obj; + + // Move each element in the array after the one being removed back by one + for(index = index + 1; index < size; index++) + { + // Determine what's stored here + raw = array_get_string(store, name, index); + + // Different handling for objects vs everything else + if(raw == "OBJECT") + { + obj = array_get_object(store, name, index); + // Move back + array_set_object(store, name, index - 1, obj); + + // Update the marker value + SetLocalInt(store, name + "O" + ObjectToString(obj), index/* - 1 + 1 */); + } + else + { + // Move back + array_set_string(store, name, index - 1, raw); + + // Update the marker value + SetLocalInt(store, name + raw, index/* - 1 + 1 */); + } + } + + // Delete the marker local + DeleteLocalInt(store, name + entity); + + // Shrink the array + array_shrink(store, name, size - 1); +} + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int set_create(object store, string name) +{ + // Sanity checks + if(!GetIsObjectValid(store)) + return SDL_ERROR_NOT_VALID_OBJECT; + if(name == "") + return SDL_ERROR_INVALID_PARAMETER; + if(set_exists(store, name)) + return SDL_ERROR_ALREADY_EXISTS; + + // Generate real name for accessing array functions + name = _PRC_SET_PREFIX + name; + + // All OK, create the underlying array + return array_create(store, name); +} + +int set_delete(object store, string name) +{ + // Sanity check + if(!set_exists(store, name)) + return SDL_ERROR_DOES_NOT_EXIST; + + // Generate real name for accessing array functions + name = _PRC_SET_PREFIX + name; + + // Loop over all members, getting deleting the presence indicator local + int size = array_get_size(store, name); + int i; + string raw, member; + for(i = 0; i < size; i++) + { + // Get the raw data stored in the array. + // NOTE: This relies on internal details of the array implementation. Specifically, objects having a string containing "OBJECT" + // stored in their position + raw = array_get_string(store, name, i); + + // Construct the presence marker name. Special handling for objects + if(raw == "OBJECT") + member = name + "O" + ObjectToString(array_get_object(store, name, i)); + else + member = name + raw; + + // Delete the marker + DeleteLocalInt(store, member); + } + + // Clean up the underlying array + if(DEBUG) + { + Assert(array_delete(store, name) == SDL_SUCCESS, "array_delete(store, name) == SDL_SUCCESS", "", "inc_set", "set_delete"); + return SDL_SUCCESS; + } + else + { + return array_delete(store, name); + } +} + +int set_add_string(object store, string name, string entry) +{ + // Convert the entry to the storable string form + entry = "S" + entry; + + // If the set already contains the entry being added, nothing happens + if(_inc_set_set_contains_aux(store, name, entry)) + return SDL_SUCCESS; + + return _inc_set_set_add_aux(store, name, entry); +} + +int set_add_int(object store, string name, int entry) +{ + // Convert the entry to the storable string form + string strentry = "I" + IntToString(entry); + + // If the set already contains the entry being added, nothing happens + if(_inc_set_set_contains_aux(store, name, strentry)) + return SDL_SUCCESS; + + return _inc_set_set_add_aux(store, name, strentry); +} + +int set_add_float(object store, string name, float entry) +{ + // Convert the entry to the storable string form + string strentry = "F" + FloatToString(entry); + + // If the set already contains the entry being added, nothing happens + if(_inc_set_set_contains_aux(store, name, strentry)) + return SDL_SUCCESS; + + return _inc_set_set_add_aux(store, name, strentry); +} + +int set_add_object(object store, string name, object entry) +{ + // Convert the entry to the storable string form + string strentry = "O" + ObjectToString(entry); + + // If the set already contains the entry being added, nothing happens + if(_inc_set_set_contains_aux(store, name, strentry)) + return SDL_SUCCESS; + + return _inc_set_set_add_aux(store, name, strentry, TRUE, entry); +} + +int set_get_member_type(object store, string name, int i) +{ + // Sanity check + if(!set_exists(store, name) || i >= set_get_size(store, name)) + return 0; + + // Generate real name for accessing array functions + name = _PRC_SET_PREFIX + name; + + // Grab the first character of the raw string, it determines type + string type = GetSubString(array_get_string(store, name, i), 0, 1); + + // First character in the string determines type + if (type == "F") + return ENTITY_TYPE_FLOAT; + else if(type == "I") + return ENTITY_TYPE_INTEGER; + else if(type == "O") + return ENTITY_TYPE_OBJECT; + else if(type == "S") + return ENTITY_TYPE_STRING; + else + return 0; +} + +int set_contains_string(object store, string name, string entity) +{ + return _inc_set_set_contains_aux(store, name, "S" + entity); +} + +int set_contains_int(object store, string name, int entity) +{ + return _inc_set_set_contains_aux(store, name, "I" + IntToString(entity)); +} + +int set_contains_float(object store, string name, float entity) +{ + return _inc_set_set_contains_aux(store, name, "F" + FloatToString(entity)); +} + +int set_contains_object(object store, string name, object entity) +{ + return _inc_set_set_contains_aux(store, name, "O" + ObjectToString(entity)); +} + +void set_remove_string(object store, string name, string entity) +{ + _inc_set_set_remove_aux(store, name, "S" + entity); +} + +void set_remove_int(object store, string name, int entity) +{ + _inc_set_set_remove_aux(store, name, "I" + IntToString(entity)); +} + +void set_remove_float(object store, string name, float entity) +{ + _inc_set_set_remove_aux(store, name, "F" + FloatToString(entity)); +} + +void set_remove_object(object store, string name, object entity) +{ + _inc_set_set_remove_aux(store, name, "O" + ObjectToString(entity)); +} + +string set_get_string(object store, string name, int i) +{ + // Sanity check + if(!set_exists(store, name) || i >= set_get_size(store, name)) + return ""; + + // Generate real name for accessing array functions + name = _PRC_SET_PREFIX + name; + + // Chop off the first character from the raw string and return the rest + string raw = array_get_string(store, name, i); + return GetSubString(raw, 1, GetStringLength(raw)); +} + +int set_get_int(object store, string name, int i) +{ + // Sanity check + if(!set_exists(store, name) || i >= set_get_size(store, name)) + return 0; + + // Generate real name for accessing array functions + name = _PRC_SET_PREFIX + name; + + // Chop off the first character from the raw string and return the rest + string raw = array_get_string(store, name, i); + return StringToInt(GetSubString(raw, 1, GetStringLength(raw))); +} + +float set_get_float(object store, string name, int i) +{ + // Sanity check + if(!set_exists(store, name) || i >= set_get_size(store, name)) + return 0.0f; + + // Generate real name for accessing array functions + name = _PRC_SET_PREFIX + name; + + // Chop off the first character from the raw string and return the rest + string raw = array_get_string(store, name, i); + return StringToFloat(GetSubString(raw, 1, GetStringLength(raw))); +} + +object set_get_object(object store, string name, int i) +{ + // Sanity check + if(!set_exists(store, name) || i >= set_get_size(store, name)) + return OBJECT_INVALID; + + // Generate real name for accessing array functions + name = _PRC_SET_PREFIX + name; + + return array_get_object(store, name, i); +} + +int set_get_size(object store, string name) +{ + // Generate real name for accessing array functions + name = _PRC_SET_PREFIX + name; + + return array_get_size(store, name); +} + +int set_exists(object store, string name) +{ + // Generate real name for accessing array functions + name = _PRC_SET_PREFIX + name; + + return array_exists(store, name); +} + + +// Test main +//void main() {} diff --git a/src/include/inc_sp_gain_mem.nss b/src/include/inc_sp_gain_mem.nss new file mode 100644 index 0000000..d994896 --- /dev/null +++ b/src/include/inc_sp_gain_mem.nss @@ -0,0 +1,366 @@ +//::////////////////////////////////////////////// +//:: Name: new spellbook spellgain / spell memorization include +//:: File: inc_sp_gain_mem.nss +//::////////////////////////////////////////////// +/** +contains helper functions for the two dynamic conversation scripts +- prc_s_spellb.nss +- prc_s_spellgain.nss +that handle learning / gaining new spells at level up (prc_s_spellgain) +or preparing what spells to learn at next rest (prc_s_spellb) + +Author: motu99 +Created: May 1, 2008 +*/ + +//#include "prc_inc_core" //granted access via parent (inc_newspellbook) + +//:: Updated for .35 by Jaysyn 2023/03/11 + +//:: Test Void +//void main (){} + +//::////////////////////////////////////////////// +//:: Constants +//::////////////////////////////////////////////// + +// max. number of classes a PC (or creature) can take (8 for NWN, 4 for NWN2) +const int MAX_CLASSES = 8; + +////////////////////////////////////////////////// +/* Aid functions */ +////////////////////////////////////////////////// + +string GetNSBDefinitionFileName(int nClass); +int GetCasterLevelByClass(int nClass, object oPC); + +int GetSpellsKnown_MaxCount(int nCasterLevel, int nClass, int nSpellLevel, object oPC); +int GetSpellsInClassSpellbook_Count(int nClass, int nSpellLevel); +string GetClassString(int nClass); +int GetMaxSpellLevelForCasterLevel(int nClass, int nCasterLevel); +int GetMinSpellLevelForCasterLevel(int nClass, int nCasterLevel); + +void WipeSpellFromHide(int nIPFeatID, object oPC); + +string GetSpellsKnown_Array(int nClass, int nSpellLevel = -1); +object GetSpellsOfClass_Token(int nClass, int nSpellLevel); +string GetSpellsOfClass_Array(); +string GetSpellsMemorized_Array(int nClass); +string GetSpellsToBeMemorized_Array(int nClass, int nSpellSlotLevel); + +void array_set_size(object oPC, string sArrayName, int nSize); +int array_has_string(object oPC, string sArrayName, string sValue, int nFirst = 0, int nSize = 0); +int array_has_int(object oPC, string sArrayName, int nValue, int nFirst = 0, int nSize = 0); +int persistant_array_has_string(object oPC, string sArrayName, string sValue, int nFirst = 0, int nSize = 0); +int persistant_array_has_int(object oPC, string sArrayName, int nValue, int nFirst = 0, int nSize = 0); +int array_extract_string(object oPC, string sArrayName, string sValue, int nFirst = 0); +int array_extract_int(object oPC, string sArrayName, int nValue, int nFirst = 0); +int persistant_array_extract_string(object oPC, string sArrayName, string sValue, int nFirst = 0); +int persistant_array_extract_int(object oPC, string sArrayName, int nValue, int nFirst = 0); + +string GetMetaMagicString_Short(int nMetaMagic); +string GetMetaMagicString(int nMetaMagic); +int GetMetaMagicFromFeat(int nFeat); +int GetMetaMagicOfCaster(object oPC = OBJECT_SELF); + +// name of the new spellbook file (cls_spell_*) +string GetNSBDefinitionFileName(int nClass) +{ + return GetFileForClass(nClass); +} + +// gets the caster level (without special modifications due to feats), by which the max spell slot level is determined +int GetCasterLevelByClass(int nClass, object oPC) +{ + return GetSpellslotLevel(nClass, oPC); + // return GetPrCAdjustedCasterLevel(nClass, oPC, TRUE); +} + +// gets the maximum nr of spells that oPC can know with a given nCasterLevel, nClass and nSpellLevel +int GetSpellsKnown_MaxCount(int nCasterLevel, int nClass, int nSpellLevel, object oPC) +{ + return GetSpellKnownMaxCount(nCasterLevel, nSpellLevel, nClass, oPC); +} + + +// gets the total nr of spells available at nSpellLevel for nClass +int GetSpellsInClassSpellbook_Count(int nClass, int nSpellLevel) +{ + return persistant_array_get_size(GetSpellsOfClass_Token(nClass, nSpellLevel), GetSpellsOfClass_Array()); +} + +string GetClassString(int nClass) +{ + // get the name of the feats table 2da + string sClass = Get2DACache("classes", "FeatsTable", nClass); + // truncate the first 8 characters (the "cls_feat" part), leaving the "_" part + sClass = GetStringRight(sClass, GetStringLength(sClass) - 8); + return sClass; +} + +// gets the maximum spell level that nClass can cast at nCasterLevel +int GetMaxSpellLevelForCasterLevel(int nClass, int nCasterLevel) +{ + string sFile; + // Bioware casters use their classes.2da-specified tables + //if(GetIsBioSpellCastClass(nClass)) + //{ + sFile = Get2DACache("classes", "SpellGainTable", nClass); + //} + //else + //{ + // sFile = "cls_spbk" + GetClassString(nClass); + //} + + // row nr in the files is nCasterLevel minus 1 + nCasterLevel--; + int nSpellLevel; + + if (Get2DACache(sFile, "NumSpellLevels", 9) != "") + { + string sTemp = Get2DACache(sFile, "NumSpellLevels", nCasterLevel); + if (sTemp != "") + { + nSpellLevel = StringToInt(sTemp)-1; + if (nSpellLevel <= 0) nSpellLevel = 0; + } + } + else + { + for (nSpellLevel=9; nSpellLevel >= 0; nSpellLevel--) + { + string sTemp = Get2DACache(sFile, "SpellLevel" + IntToString(nSpellLevel), nCasterLevel); + if (sTemp != "") + { + break; + } + } + } + return nSpellLevel; +} + +// gets the minimum spell level that nClass can cast at nCasterLevel +int GetMinSpellLevelForCasterLevel(int nClass, int nCasterLevel) +{ + string sFile; + // Bioware casters use their classes.2da-specified tables + //if(GetIsBioSpellCastClass(nClass)) + //{ + sFile = Get2DACache("classes", "SpellGainTable", nClass); + //} + //else + //{ + // sFile = "cls_spbk" + GetClassString(nClass); + //} + + // row nr in the files is nCasterLevel minus 1 + nCasterLevel--; + + int bFound = 0; + + int nSpellLevel; + for (nSpellLevel=0; nSpellLevel <= 9; nSpellLevel++) + { + string sTemp = Get2DACache(sFile, "SpellLevel" + IntToString(nSpellLevel), nCasterLevel); + if (sTemp != "") + { + bFound = TRUE; + break; + } + } + + if (!bFound) nSpellLevel = -1; + return nSpellLevel; +} + +// wipes the IPbonusfeat from the hide +void WipeSpellFromHide(int nIPFeatID, object oPC) +{ + // go through all item properties on the hide + object oHide = GetPCSkin(oPC); + itemproperty ipTest = GetFirstItemProperty(oHide); + while(GetIsItemPropertyValid(ipTest)) + { + // is it a bonus feat? + if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_BONUS_FEAT) + { + // get the row nr of the bonus feat in iprp_feat.2da + // is it the ipfeat to delete? + if (GetItemPropertySubType(ipTest) == nIPFeatID) + { + RemoveItemProperty(oHide, ipTest); + if(DEBUG) DoDebug("WipeSpellFromHide: Removing item property " + DebugIProp2Str(ipTest)); + } + } + ipTest = GetNextItemProperty(oHide); + } +} + +// one array for each class (array holds all spell levels, but only non-metamagicked masterspells) +string GetSpellsKnown_Array(int nClass, int nSpellLevel = -1) +{ + int nSpellbookType = GetSpellbookTypeForClass(nClass); + if(nSpellbookType == SPELLBOOK_TYPE_PREPARED) + return "Spellbook_Known_" + IntToString(nClass) + "_" + IntToString(nSpellLevel); + return "Spellbook" + IntToString(nClass); +} + +// class spellbook (one storage token for each spell level and class) +object GetSpellsOfClass_Token(int nClass, int nSpellLevel) +{ + return GetObjectByTag("SpellLvl_" + IntToString(nClass) + "_Level_" + IntToString(nSpellLevel)); +} + +string GetSpellsOfClass_Array() +{ + return "Lkup"; +} + +string GetSpellsMemorized_Array(int nClass) +{ + return "NewSpellbookMem_" + IntToString(nClass); +} + +string GetSpellsToBeMemorized_Array(int nClass, int nSpellSlotLevel) +{ + return "Spellbook" + IntToString(nSpellSlotLevel) + "_" + IntToString(nClass); +} + + +void array_set_size(object oPC, string sArrayName, int nSize) +{ + SetPersistantLocalInt(oPC, sArrayName, nSize+1); +} + +int array_has_string(object oPC, string sArrayName, string sValue, int nFirst = 0, int nSize = 0) +{ + // get array size, if size not already supplied + if (nSize == 0) nSize = GetPersistantLocalInt(oPC, sArrayName) -1; + int i; + + for (i = nFirst; i < nSize; i++) + { + if (sValue == GetPersistantLocalString(oPC, sArrayName + "_" + IntToString(i))) + return i; + } + return -1; +} + +int array_has_int(object oPC, string sArrayName, int nValue, int nFirst = 0, int nSize = 0) +{ + // array values are stored as strings, so convert nValue to a string + return array_has_string(oPC, sArrayName, IntToString(nValue), nFirst, nSize); +} + +int persistant_array_has_string(object oPC, string sArrayName, string sValue, int nFirst = 0, int nSize = 0) +{ + return array_has_string(oPC, sArrayName, sValue, nFirst, nSize); +} + +int persistant_array_has_int(object oPC, string sArrayName, int nValue, int nFirst = 0, int nSize = 0) +{ + return array_has_string(oPC, sArrayName, IntToString(nValue), nFirst, nSize); +} + +int array_extract_string(object oPC, string sArrayName, string sValue, int nFirst = 0) +{ + // get array size + int nSize = GetPersistantLocalInt(oPC, sArrayName)-1; + if (nSize <= nFirst) return -1; + + // position of the first found; -1 if not found + int nPos = array_has_string(oPC, sArrayName, sValue, nFirst, nSize); + if (nPos < 0) return -1; + + // Is is not the last element? + if (nPos < nSize-1) + { + // then swap nPos (or rather nPos-1) with the last element (nSize-1) + string sTemp = GetPersistantLocalString(oPC, sArrayName + "_" + IntToString(nSize-1)); + SetPersistantLocalString(oPC, sArrayName + "_" + IntToString(nPos), sTemp); + } + + // now decrement the array size (note that we already subtracted one in the beginning) + SetPersistantLocalInt(oPC, sArrayName, nSize); + + return nPos; +} + +// extracts the integer value nValue from a persistant sArray on oPC +// extracts the first instance of nValue that it finds +// extracts it by swapping the last array element to the position of the extracted element and reducing the array size by one +// returns the position where the extracted element was found +int array_extract_int(object oPC, string sArrayName, int nValue, int nFirst = 0) +{ + // array values are stored as strings, so convert nValue to a string + return array_extract_string(oPC, sArrayName, IntToString(nValue), nFirst); +} + +int persistant_array_extract_string(object oPC, string sArrayName, string sValue, int nFirst = 0) +{ + return array_extract_string(oPC, sArrayName, sValue, nFirst); +} + +int persistant_array_extract_int(object oPC, string sArrayName, int nValue, int nFirst = 0) +{ + // array values are stored as strings, so convert nValue to a string + return array_extract_string(oPC, sArrayName, IntToString(nValue), nFirst); +} + +string GetMetaMagicString_Short(int nMetaMagic) +{ + string s; + if (nMetaMagic == 0) return s; + + if (nMetaMagic & METAMAGIC_EXTEND) s += "ext "; + if (nMetaMagic & METAMAGIC_SILENT) s += "sil "; + if (nMetaMagic & METAMAGIC_STILL) s += "sti "; + if (nMetaMagic & METAMAGIC_EMPOWER) s += "emp "; + if (nMetaMagic & METAMAGIC_MAXIMIZE) s += "max "; + if (nMetaMagic & METAMAGIC_QUICKEN) s += "qui "; + + return GetStringLeft(s, GetStringLength(s)-1); +} + +string GetMetaMagicString(int nMetaMagic) +{ + string s; + if (nMetaMagic == 0) return s; + + if (nMetaMagic & METAMAGIC_EXTEND) s += "extend "; + if (nMetaMagic & METAMAGIC_SILENT) s += "silent "; + if (nMetaMagic & METAMAGIC_STILL) s += "still "; + if (nMetaMagic & METAMAGIC_EMPOWER) s += "empower "; + if (nMetaMagic & METAMAGIC_MAXIMIZE) s += "maximize "; + if (nMetaMagic & METAMAGIC_QUICKEN) s += "quicken "; + + return GetStringLeft(s, GetStringLength(s)-1); +} + +int GetMetaMagicFromFeat(int nFeat) +{ + switch(nFeat) + { + case FEAT_EMPOWER_SPELL: return METAMAGIC_EMPOWER; + case FEAT_EXTEND_SPELL: return METAMAGIC_EXTEND; + case FEAT_MAXIMIZE_SPELL: return METAMAGIC_MAXIMIZE; + case FEAT_QUICKEN_SPELL: return METAMAGIC_QUICKEN; + case FEAT_SILENCE_SPELL: return METAMAGIC_SILENT; + case FEAT_STILL_SPELL: return METAMAGIC_STILL; + } + return METAMAGIC_NONE; +} + +int GetMetaMagicOfCaster(object oPC = OBJECT_SELF) +{ + int nMetaMagic; + + if (GetHasFeat(FEAT_EMPOWER_SPELL, oPC)) nMetaMagic |= METAMAGIC_EMPOWER; + if (GetHasFeat(FEAT_EXTEND_SPELL, oPC)) nMetaMagic |= METAMAGIC_EXTEND; + if (GetHasFeat(FEAT_MAXIMIZE_SPELL, oPC)) nMetaMagic |= METAMAGIC_MAXIMIZE; + if (GetHasFeat(FEAT_QUICKEN_SPELL, oPC)) nMetaMagic |= METAMAGIC_QUICKEN; + if (GetHasFeat(FEAT_SILENCE_SPELL, oPC)) nMetaMagic |= METAMAGIC_SILENT; + if (GetHasFeat(FEAT_STILL_SPELL, oPC)) nMetaMagic |= METAMAGIC_STILL; + + return nMetaMagic; +} \ No newline at end of file diff --git a/src/include/inc_spirit_weapn.nss b/src/include/inc_spirit_weapn.nss new file mode 100644 index 0000000..a0f726a --- /dev/null +++ b/src/include/inc_spirit_weapn.nss @@ -0,0 +1,1108 @@ +//:://///////////////////////////////////////////// +//:: [Spiritual Weapon] +//:: [inc_spirit_weapn.nss] +//:: [Jaysyn 2024-08-23 07:58:14] +//:: +//:: Include script for Spiritual Weapon +//:: +//:://///////////////////////////////////////////// +/**@ Spiritual Weapon +(Player's Handbook v.3.5, p. 283) + +Evocation [Force] +Level: Cleric 2, Knight of the Chalice 2, War 2, Mysticism 2, +Components: V, S, DF, +Casting Time: 1 standard action +Range: Medium (100 ft. + 10 ft./level) +Effect: Magic weapon of force +Duration: 1 round/level (D) +Saving Throw: None +Spell Resistance: Yes + +A weapon made of pure force springs into existence and attacks +opponents at a distance, as you direct it, dealing 1d8 force +damage per hit, +1 point per three caster levels (maximum +5 +at 15th level). The weapon takes the shape of a weapon +favored by your deity or a weapon with some spiritual +significance or symbolism to you (see below) and has the +same threat range and critical multipliers as a real weapon +of its form. It strikes the opponent you designate, starting +with one attack in the round the spell is cast and continuing +each round thereafter on your turn. It uses your base attack +bonus (possibly allowing it multiple attacks per round in +subsequent rounds) plus your Wisdom modifier as its attack +bonus. It strikes as a spell, not as a weapon, so, for +example, it can damage creatures that have damage +reduction. As a force effect, it can strike incorporeal +creatures without the normal miss chance associated with +incorporeality. The weapon always strikes from your +direction. It does not get a flanking bonus or help a +combatant get one. Your feats (such as Weapon Focus) +or combat actions (such as charge) do not affect the +weapon. If the weapon goes beyond the spell range, if +it goes out of your sight, or if you are not directing +it, the weapon returns to you and hovers. + +Each round after the first, you can use a move action to + redirect the weapon to a new target. If you do not, + the weapon continues to attack the previous round's + target. On any round that the weapon switches targets, + it gets one attack. Subsequent rounds of attacking that + target allow the weapon to make multiple attacks if your + base attack bonus would allow it to. Even if the spiritual + weapon is a ranged weapon, use the spell's range, not the + weapon's normal range increment, and switching targets + still is a move action. + +A spiritual weapon cannot be attacked or harmed by +physical attacks, but dispel magic, disintegrate, a +sphere of annihilation, or a rod of cancellation affects it. +A spiritual weapon's AC against touch attacks is 12 (10 + +size bonus for Tiny object). + +If an attacked creature has spell resistance, you make a +caster level check (1d20 + caster level) against that +spell resistance the first time the spiritual weapon +strikes it. If the weapon is successfully resisted, the +spell is dispelled. If not, the weapon has its normal +full effect on that creature for the duration of the spell. +*/////////////////////////////////////////////////////////// +#include "inc_rand_equip" +#include "prc_inc_spells" + + +void NullifyAppearance(object oSummon, int nThrowHands = FALSE) +{ + // Ensure the object is valid and is not a player or DM + if (!GetIsObjectValid(oSummon) || GetIsPC(oSummon) || GetIsDM(oSummon)) + { + return; + } + + // Nullify all body parts + SetCreatureBodyPart(CREATURE_PART_HEAD, 0, oSummon); + SetCreatureBodyPart(CREATURE_PART_TORSO, 0, oSummon); + SetCreatureBodyPart(CREATURE_PART_BELT, 0, oSummon); + SetCreatureBodyPart(CREATURE_PART_PELVIS, 0, oSummon); + SetCreatureBodyPart(CREATURE_PART_RIGHT_THIGH, 0, oSummon); + SetCreatureBodyPart(CREATURE_PART_LEFT_THIGH, 0, oSummon); + SetCreatureBodyPart(CREATURE_PART_RIGHT_FOOT, 0, oSummon); + SetCreatureBodyPart(CREATURE_PART_LEFT_FOOT, 0, oSummon); + SetCreatureBodyPart(CREATURE_PART_RIGHT_FOREARM, 0, oSummon); + SetCreatureBodyPart(CREATURE_PART_LEFT_FOREARM, 0, oSummon); + SetCreatureBodyPart(CREATURE_PART_RIGHT_HAND, 0, oSummon); + SetCreatureBodyPart(CREATURE_PART_LEFT_HAND, 0, oSummon); + + if(nThrowHands) + { + // Keep hands and forearms visible + SetCreatureBodyPart(CREATURE_PART_RIGHT_FOREARM, 1, oSummon); + SetCreatureBodyPart(CREATURE_PART_LEFT_FOREARM, 1, oSummon); + SetCreatureBodyPart(CREATURE_PART_RIGHT_HAND, 1, oSummon); + SetCreatureBodyPart(CREATURE_PART_LEFT_HAND, 1, oSummon); + } +} + +void RegisterSummonEvents(object oCreature) +{ + // Explicitly re-register the event for the next spell cast at the summon. + AddEventScript(oCreature, EVENT_NPC_ONSPELLCASTAT, "sp_spiritweapon", TRUE); + AddEventScript(oCreature, EVENT_NPC_ONSPELLCASTAT, "sp_spiritweapon", TRUE); + SendMessageToPC(GetFirstPC(), "inc_spirit_weapn: Event re-registered for next spell cast."); +} + +// Returns the alignment component with the most points towards it. +// Possible returns: ALIGNMENT_LAWFUL, ALIGNMENT_CHAOTIC, ALIGNMENT_GOOD, ALIGNMENT_EVIL, or ALIGNMENT_NEUTRAL. +int GetDominantAlignment(object oCreature) +{ + int nLawChaos = GetLawChaosValue(oCreature); + int nGoodEvil = GetGoodEvilValue(oCreature); + + int nDominant = ALIGNMENT_NEUTRAL; + + // Check Law vs Chaos + if (nLawChaos > 50) + { + nDominant = ALIGNMENT_LAWFUL; + } + else if (nLawChaos < 50) + { + nDominant = ALIGNMENT_CHAOTIC; + } + + // Check Good vs Evil + if (nGoodEvil > 50) + { + if (nLawChaos == 50 || nGoodEvil > nLawChaos) // Tie or Good is stronger + { + nDominant = ALIGNMENT_GOOD; + } + } + else if (nGoodEvil < 50) + { + if (nLawChaos == 50 || nGoodEvil < nLawChaos) // Tie or Evil is stronger + { + nDominant = ALIGNMENT_EVIL; + } + } + + return nDominant; +} + +void SetDeityByClass(object oCreature) +{ + if(GetLevelByClass(CLASS_TYPE_RAVAGER, oCreature) > 0) SetDeity(oCreature, "Erythnul"); + + if(GetLevelByClass(CLASS_TYPE_TEMPUS, oCreature) > 0) SetDeity(oCreature, "Tempus"); + + if(GetLevelByClass(CLASS_TYPE_BLACK_BLOOD_CULTIST, oCreature) > 0) SetDeity(oCreature, "Malar"); + + if(GetLevelByClass(CLASS_TYPE_CELEBRANT_SHARESS, oCreature) > 0) SetDeity(oCreature, "Sharess"); + + if(GetLevelByClass(CLASS_TYPE_COC, oCreature) > 0) SetDeity(oCreature, "Corellon Larethian"); + + if(GetLevelByClass(CLASS_TYPE_VASSAL, oCreature) > 0) SetDeity(oCreature, "Bahamut"); + + if(GetLevelByClass(CLASS_TYPE_ORCUS, oCreature) > 0 ) SetDeity(oCreature, "Orcus"); + + if(GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCreature) > 0 ) SetDeity(oCreature, "Talona"); + + if(GetLevelByClass(CLASS_TYPE_STORMLORD, oCreature) > 0 ) SetDeity(oCreature, "Talos"); + + if(GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCreature) > 0 ) SetDeity(oCreature, "Tiamat"); + + if(GetLevelByClass(CLASS_TYPE_SOLDIER_OF_LIGHT, oCreature) > 0 ) SetDeity(oCreature, "Elishar"); + + if(GetLevelByClass(CLASS_TYPE_SLAYER_OF_DOMIEL, oCreature) > 0 ) SetDeity(oCreature, "Domiel"); + + if(GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCreature) > 0 ) SetDeity(oCreature, "Heironeous"); + + if(GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCreature) > 0 ) SetDeity(oCreature, "Wee Jas"); + + if(GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCreature) > 0 ) SetDeity(oCreature, "Lathander"); + + if(GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCreature) > 0 ) SetDeity(oCreature, "Kord"); + + if(GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCreature) > 0 ) SetDeity(oCreature, "Sune"); + + if(GetLevelByClass(CLASS_TYPE_HEXTOR, oCreature) > 0 ) SetDeity(oCreature, "Hextor"); + + if(GetLevelByClass(CLASS_TYPE_PRC_EYE_OF_GRUUMSH, oCreature) > 0 ) SetDeity(oCreature, "Gruumsh"); + + //if(GetLevelByClass(CLASS_TYPE_JUDICATOR, oCreature) > 0 ) SetDeity(oCreature, "Selvetarm"); + + if(GetLevelByClass(CLASS_TYPE_JUDICATOR, oCreature) > 0 ) SetDeity(oCreature, "Lolth"); + + if(GetLevelByClass(CLASS_TYPE_OCULAR, oCreature) > 0 ) SetDeity(oCreature, "Great Mother"); + + if(GetLevelByClass(CLASS_TYPE_KNIGHT_WEAVE, oCreature) > 0 ) SetDeity(oCreature, "Mystra"); +} + +string GetSpiritualWeaponTypeByDeity(object oCreature) +{ + SetDeityByClass(oCreature); + + string sDeity = GetStringLowerCase(GetDeity(oCreature)); + string sResRef; + + int nDomAlignment = GetDominantAlignment(oCreature); + + if(GetStringRight(sDeity, 12) == GetStringLowerCase("glittergold") || GetStringRight(sDeity, 5) == GetStringLowerCase("auril") + || GetStringRight(sDeity, 7) == GetStringLowerCase("balinor") || GetStringRight(sDeity, 11) == GetStringLowerCase("smoothhands") + || GetStringRight(sDeity, 11) == GetStringLowerCase("silverbeard") || GetStringRight(sDeity, 6) == GetStringLowerCase("duerra") + || GetStringRight(sDeity, 7) == GetStringLowerCase("gulthyn") || GetStringRight(sDeity, 8) == GetStringLowerCase("iallanis") + || GetStringRight(sDeity, 5) == GetStringLowerCase("llerg") || GetStringRight(sDeity, 10) == GetStringLowerCase("maglubiyet") + || GetStringRight(sDeity, 6) == GetStringLowerCase("tempus") || GetStringRight(sDeity, 6) == GetStringLowerCase("uthgar") + || GetStringRight(sDeity, 6) == GetStringLowerCase("valkar") || GetStringRight(sDeity, 5) == GetStringLowerCase("vatun")) + sResRef = "nw_waxbt001"; //:: Battleaxe + + else if(GetStringRight(sDeity, 6) == GetStringLowerCase("boccob") || GetStringRight(sDeity, 10) == GetStringLowerCase("fharlanghn") + || GetStringRight(sDeity, 3) == GetStringLowerCase("hai") || GetStringRight(sDeity, 6) == GetStringLowerCase("faenya") + || GetStringRight(sDeity, 6) == GetStringLowerCase("aureon") || GetStringRight(sDeity, 5) == GetStringLowerCase("azuth") + || GetStringRight(sDeity, 5) == GetStringLowerCase("bralm") || GetStringRight(sDeity, 11) == GetStringLowerCase("cyrrollalee") + || GetStringRight(sDeity, 8) == GetStringLowerCase("liothiel") || GetStringRight(sDeity, 9) == GetStringLowerCase("incabulos") + || GetStringRight(sDeity, 3) == GetStringLowerCase("geb") || GetStringRight(sDeity, 7) == GetStringLowerCase("enoreth") + || GetStringRight(sDeity, 6) == GetStringLowerCase("joramy") || GetStringRight(sDeity, 9) == GetStringLowerCase("panzuriel") + || GetStringRight(sDeity, 9) == GetStringLowerCase("rallathil") || GetStringRight(sDeity, 7) == GetStringLowerCase("pholtus") + || GetStringRight(sDeity, 3) == GetStringLowerCase("hai") || GetStringRight(sDeity, 10) == GetStringLowerCase("fharlanghn") + || GetStringRight(sDeity, 7) == GetStringLowerCase("moonbow") || GetStringRight(sDeity, 8) == GetStringLowerCase("shiallia") + || GetStringRight(sDeity, 7) == GetStringLowerCase("solanil") || GetStringRight(sDeity, 7) == GetStringLowerCase("tarmuid") + || GetStringRight(sDeity, 6) == GetStringLowerCase("shadow") || GetStringRight(sDeity, 5) == GetStringLowerCase("thoth") + || GetStringRight(sDeity, 10) == GetStringLowerCase("velsharoon") || GetStringRight(sDeity, 7) == GetStringLowerCase("ventila")) + sResRef = "nw_wdbqs001"; //:: Quarterstaff + + else if(GetStringRight(sDeity, 9) == GetStringLowerCase("larethian") || GetStringRight(sDeity, 7) == GetStringLowerCase("ehlonna") + || GetStringRight(sDeity, 10) == GetStringLowerCase("heironeous") || GetStringRight(sDeity, 5) == GetStringLowerCase("altua") + || GetStringRight(sDeity, 9) == GetStringLowerCase("barachiel") || GetStringRight(sDeity, 10) == GetStringLowerCase("heironeous") + || GetStringRight(sDeity, 5) == GetStringLowerCase("cyric") || GetStringRight(sDeity, 4) == GetStringLowerCase("dorn") + || GetStringRight(sDeity, 7) == GetStringLowerCase("garagos") || GetStringRight(sDeity, 7) == GetStringLowerCase("glautru") + || GetStringRight(sDeity, 7) == GetStringLowerCase("ilneval") || GetStringRight(sDeity, 6) == GetStringLowerCase("lendys") + || GetStringRight(sDeity, 4) == GetStringLowerCase("mask") || GetStringRight(sDeity, 10) == GetStringLowerCase("merrshaulk") + || GetStringRight(sDeity, 5) == GetStringLowerCase("oghma") || GetStringRight(sDeity, 8) == GetStringLowerCase("pyremius") + || GetStringRight(sDeity, 10) == GetStringLowerCase("red knight") || GetStringRight(sDeity, 3) == GetStringLowerCase("tyr") + || GetStringRight(sDeity, 9) == GetStringLowerCase("vergadain") || GetStringRight(sDeity, 7) == GetStringLowerCase("elishar")) + sResRef = "nw_wswls001"; //:: Longsword + + else if(GetStringRight(sDeity, 8) == GetStringLowerCase("erythnul") || GetStringRight(sDeity, 6) == GetStringLowerCase("arawai") + || GetStringRight(sDeity, 4) == GetStringLowerCase("bane") || GetStringRight(sDeity, 7) == GetStringLowerCase("hruggek") + || GetStringRight(sDeity, 6) == GetStringLowerCase("ngatha") || GetStringRight(sDeity, 6) == GetStringLowerCase("memnor") + || GetStringRight(sDeity, 7) == GetStringLowerCase("wathaku")) + sResRef = "nw_wblms001"; //:: Morningstar + + else if(GetStringRight(sDeity, 8) == GetStringLowerCase("gruumsh") || GetStringRight(sDeity, 10) == GetStringLowerCase("angharradh") + || GetStringRight(sDeity, 5) == GetStringLowerCase("annam") || GetStringRight(sDeity, 10) == GetStringLowerCase("aventernus") + || GetStringRight(sDeity, 13) == GetStringLowerCase("wildwanderer") || GetStringRight(sDeity, 7) == GetStringLowerCase("boldrei") + || GetStringRight(sDeity, 9) == GetStringLowerCase("celestian") || GetStringRight(sDeity, 5) == GetStringLowerCase("eadro") + || GetStringRight(sDeity, 7) == GetStringLowerCase("geshtai") || GetStringRight(sDeity, 6) == GetStringLowerCase("hiatea") + || GetStringRight(sDeity, 10) == GetStringLowerCase("kaelthiere") || GetStringRight(sDeity, 6) == GetStringLowerCase("kithin") + || GetStringRight(sDeity, 9) == GetStringLowerCase("kurtulmak") || GetStringRight(sDeity, 5) == GetStringLowerCase("lurue") + || GetStringRight(sDeity, 6) == GetStringLowerCase("procan") || GetStringRight(sDeity, 5) == GetStringLowerCase("sebek") + || GetStringRight(sDeity, 3) == GetStringLowerCase("set") || GetStringRight(sDeity, 7) == GetStringLowerCase("skerrit") + || GetStringRight(sDeity, 5) == GetStringLowerCase("talos") || GetStringRight(sDeity, 7) == GetStringLowerCase("telchur") + || GetStringRight(sDeity, 10) == GetStringLowerCase("trithereon") || GetStringRight(sDeity, 6) == GetStringLowerCase("ulutiu")) + sResRef = "nw_wplss001"; //:: Spear + + else if(GetStringRight(sDeity, 6) == GetStringLowerCase("hextor") || GetStringRight(sDeity, 11) == GetStringLowerCase("patient one")) + sResRef = "nw_wblfl001"; //:: Light Flail + + else if(GetStringRight(sDeity, 5) == GetStringLowerCase("akadi") || GetStringRight(sDeity, 8) == GetStringLowerCase("lliendil") + || GetStringRight(sDeity, 6) == GetStringLowerCase("osiris") || GetStringRight(sDeity, 8) == GetStringLowerCase("urogalan")) + sResRef = "nw_wblfh001"; //:: Heavy Flail + + else if(GetStringRight(sDeity, 6) == GetStringLowerCase("domiel") || GetStringRight(sDeity, 9) == GetStringLowerCase("windstrom") + || GetStringRight(sDeity, 9) == GetStringLowerCase("brightaxe") || GetStringRight(sDeity, 3) == GetStringLowerCase("iuz") + || GetStringRight(sDeity, 4) == GetStringLowerCase("kord") || GetStringRight(sDeity, 10) == GetStringLowerCase("shaundakul") + || GetStringRight(sDeity, 5) == GetStringLowerCase("surtr") || GetStringRight(sDeity, 14) == GetStringLowerCase("lord of blades") + || GetStringRight(sDeity, 4) == GetStringLowerCase("torm") || GetStringRight(sDeity, 6) == GetStringLowerCase("typhos") + || GetStringRight(sDeity, 5) == GetStringLowerCase("zarus")) + sResRef = "nw_wswgs001"; //:: Greatsword + + else if(GetStringRight(sDeity, 7) == GetStringLowerCase("aulasha") || GetStringRight(sDeity, 9) == GetStringLowerCase("steelskin") + || GetStringRight(sDeity, 8) == GetStringLowerCase("ironhand") || GetStringRight(sDeity, 7) == GetStringLowerCase("grumbar") + || GetStringRight(sDeity, 4) == GetStringLowerCase("gond") || GetStringRight(sDeity, 8) == GetStringLowerCase("istishia") + || GetStringRight(sDeity, 8) == GetStringLowerCase("laduguer") || GetStringRight(sDeity, 5) == GetStringLowerCase("lyris") + || GetStringRight(sDeity, 7) == GetStringLowerCase("moradin") || GetStringRight(sDeity, 6) == GetStringLowerCase("onatar") + || GetStringRight(sDeity, 10) == GetStringLowerCase("stonebones") || GetStringRight(sDeity, 9) == GetStringLowerCase("stronmaus")) + sResRef = "nw_wblhw001"; //:: Warhammer + + else if(GetStringRight(sDeity, 8) == GetStringLowerCase("chauntea") || GetStringRight(sDeity, 11) == GetStringLowerCase("chronepsis") + || GetStringRight(sDeity, 7) == GetStringLowerCase("duthila") || GetStringRight(sDeity, 8) == GetStringLowerCase("iborighu") + || GetStringRight(sDeity, 6) == GetStringLowerCase("jergal") || GetStringRight(sDeity, 6) == GetStringLowerCase("nerull") + || GetStringRight(sDeity, 6) == GetStringLowerCase("keeper") || GetStringRight(sDeity, 5) == GetStringLowerCase("zuggtmoy")) + sResRef = "nw_wplsc001"; //:: Scythe + + else if(GetStringRight(sDeity, 6) == GetStringLowerCase("halmyr") || GetStringRight(sDeity, 6) == GetStringLowerCase("halmyr") + || GetStringRight(sDeity, 8) == GetStringLowerCase("levistus") || GetStringRight(sDeity, 4) == GetStringLowerCase("lirr") + || GetStringRight(sDeity, 5) == GetStringLowerCase("milil") || GetStringRight(sDeity, 10) == GetStringLowerCase("olidammara") + || GetStringRight(sDeity, 8) == GetStringLowerCase("the fury")) + sResRef = "nw_wswrp001"; //:: Rapier + + else if(GetStringRight(sDeity, 8) == GetStringLowerCase("cuthbert") || GetStringRight(sDeity, 5) == GetStringLowerCase("pelor") + || GetStringRight(sDeity, 10) == GetStringLowerCase("truesilver") || GetStringRight(sDeity, 8) == GetStringLowerCase("kikanuti") + || GetStringRight(sDeity, 6) == GetStringLowerCase("korran") || GetStringRight(sDeity, 9) == GetStringLowerCase("lathander") + || GetStringRight(sDeity, 4) == GetStringLowerCase("duin") || GetStringRight(sDeity, 5) == GetStringLowerCase("orcus") + || GetStringRight(sDeity, 11) == GetStringLowerCase("earthcaller") || GetStringRight(sDeity, 6) == GetStringLowerCase("selune") + || GetStringRight(sDeity, 9) == GetStringLowerCase("selvetarm") || GetStringRight(sDeity, 6) == GetStringLowerCase("syeret") + || GetStringRight(sDeity, 6) == GetStringLowerCase("syreth") || GetStringRight(sDeity, 7) == GetStringLowerCase("urbanus")) + sResRef = "prc_wxblmh001"; //:: Heavy Mace + + else if(GetStringRight(sDeity, 3) == GetStringLowerCase("rao") || GetStringRight(sDeity, 9) == GetStringLowerCase("siamorphe")) + sResRef = "nw_wblml001"; //:: Light Mace + + else if(GetStringRight(sDeity, 3) == GetStringLowerCase("jas") || GetStringRight(sDeity, 5) == GetStringLowerCase("vecna") + || GetStringRight(sDeity, 8) == GetStringLowerCase("lorfiril") || GetStringRight(sDeity, 11) == GetStringLowerCase("cloakshadow") + || GetStringRight(sDeity, 8) == GetStringLowerCase("abbathor") || GetStringRight(sDeity, 11) == GetStringLowerCase("brandobaris") + || GetStringRight(sDeity, 5) == GetStringLowerCase("thaun") || GetStringRight(sDeity, 6) == GetStringLowerCase("deneir") + || GetStringRight(sDeity, 8) == GetStringLowerCase("diirinka") || GetStringRight(sDeity, 5) == GetStringLowerCase("glory") + || GetStringRight(sDeity, 9) == GetStringLowerCase("mestarine") || GetStringRight(sDeity, 8) == GetStringLowerCase("gargauth") + || GetStringRight(sDeity, 7) == GetStringLowerCase("celanil") || GetStringRight(sDeity, 5) == GetStringLowerCase("istus") + || GetStringRight(sDeity, 11) == GetStringLowerCase("kiaransalee") || GetStringRight(sDeity, 6) == GetStringLowerCase("savras") + || GetStringRight(sDeity, 11) == GetStringLowerCase("shekinester") || GetStringRight(sDeity, 9) == GetStringLowerCase("tharizdun") + || GetStringRight(sDeity, 6) == GetStringLowerCase("of vol") || GetStringRight(sDeity, 5) == GetStringLowerCase("zagyg")) + sResRef = "nw_wswdg001"; //:: Dagger + + else if(GetStringRight(sDeity, 6) == GetStringLowerCase("afflux") || GetStringRight(sDeity, 8) == GetStringLowerCase("arvoreen") + || GetStringRight(sDeity, 12) == GetStringLowerCase("brightmantle") || GetStringRight(sDeity, 7) == GetStringLowerCase("ilesere") + || GetStringRight(sDeity, 6) == GetStringLowerCase("hathor") || GetStringRight(sDeity, 4) == GetStringLowerCase("hlal") + || GetStringRight(sDeity, 8) == GetStringLowerCase("nadirech") || GetStringRight(sDeity, 8) == GetStringLowerCase("shargaas") + || GetStringRight(sDeity, 5) == GetStringLowerCase("sixin") || GetStringRight(sDeity, 8) == GetStringLowerCase("vhaeraun") + || GetStringRight(sDeity, 8) == GetStringLowerCase("yondalla")) + sResRef = "nw_wswss001"; //:: Shortsword + + else if(GetStringRight(sDeity, 8) == GetStringLowerCase("kelemvor") || GetStringRight(sDeity, 4) == GetStringLowerCase("helm") + || GetStringRight(sDeity, 10) == GetStringLowerCase("wyvernspur") || GetStringRight(sDeity, 10) == GetStringLowerCase("eilistraee") + || GetStringRight(sDeity, 8) == GetStringLowerCase("aengrist")) + sResRef = "nw_wswbs001"; //:: Bastard Sword + + else if(GetStringRight(sDeity, 11) == GetStringLowerCase("aasterinian") || GetStringRight(sDeity, 9) == GetStringLowerCase("astilabor") + || GetStringRight(sDeity, 8) == GetStringLowerCase("doresain") || GetStringRight(sDeity, 8) == GetStringLowerCase("falazure") + || GetStringRight(sDeity, 4) == GetStringLowerCase("haku") || GetStringRight(sDeity, 8) == GetStringLowerCase("mielikki") + || GetStringRight(sDeity, 8) == GetStringLowerCase("nilthina") || GetStringRight(sDeity, 8) == GetStringLowerCase("soorinek") + || GetStringRight(sDeity, 6) == GetStringLowerCase("tamara") || GetStringRight(sDeity, 8) == GetStringLowerCase("traveler") + || GetStringRight(sDeity, 13) == GetStringLowerCase("undying court")) + sResRef = "nw_wswsc001"; //:: Scimitar + + else if(GetStringRight(sDeity, 19) == GetStringLowerCase("spirits of the past")) + sResRef = "prc_wxdbsc001"; //:: Double Scimitar + + else if(GetStringRight(sDeity, 6) == GetStringLowerCase("mouqol")) + sResRef = "nw_wbwxl001"; //:: Light Crossbow + + else if(GetStringRight(sDeity, 6) == GetStringLowerCase("cyndor")) + sResRef = "nw_wbwsl001"; //:: Sling + + else if(GetStringRight(sDeity, 4) == GetStringLowerCase("isis")) + sResRef = "prc_wswdp001"; //:: Katar (punching dagger) + + else if(GetStringRight(sDeity, 5) == GetStringLowerCase("arrah")) + sResRef = "nw_wplhb001"; //:: Halberd + + else if(GetStringRight(sDeity, 5) == GetStringLowerCase("delleb")) + sResRef = "nw_wthdt001"; //:: Dart + + else if(GetStringRight(sDeity, 12) == GetStringLowerCase("great mother") || GetStringRight(sDeity, 8) == GetStringLowerCase("sulerian") + || GetStringRight(sDeity, 5) == GetStringLowerCase("thrym")) + sResRef = "nw_waxgr001"; //:: Greataxe + + else if(GetStringRight(sDeity, 9) == GetStringLowerCase("tem-et-nu") || GetStringRight(sDeity, 7) == GetStringLowerCase("mockery")) + sResRef = "nw_wspka001"; //:: Kama + + else if(GetStringRight(sDeity, 9) == GetStringLowerCase("dumathoin") || GetStringRight(sDeity, 8) == GetStringLowerCase("silvanus")) + sResRef = "prc_wxblma001"; //:: Maul + + else if(GetStringRight(sDeity, 9) == GetStringLowerCase("shevarash") || GetStringRight(sDeity, 10) == GetStringLowerCase("thelandira") + || GetStringRight(sDeity, 12) == GetStringLowerCase("silver flame") || GetStringRight(sDeity, 10) == GetStringLowerCase("gilmadrith")) + sResRef = "nw_wbwln001"; //:: Long Bow + + else if(GetStringRight(sDeity, 11) == GetStringLowerCase("cyrrollalee") || GetStringRight(sDeity, 9) == GetStringLowerCase("grolantor") + || GetStringRight(sDeity, 8) == GetStringLowerCase("konkresh") || GetStringRight(sDeity, 5) == GetStringLowerCase("kyuss") + || GetStringRight(sDeity, 8) == GetStringLowerCase("semuanya") || GetStringRight(sDeity, 6) == GetStringLowerCase("vaprak") + || GetStringRight(sDeity, 12) == GetStringLowerCase("whale mother")) + sResRef = "nw_wblcl001"; //:: Club + + else if(GetStringRight(sDeity, 6) == GetStringLowerCase("ishtus") || GetStringRight(sDeity, 4) == GetStringLowerCase("azul") + || GetStringRight(sDeity, 5) == GetStringLowerCase("lolth") || GetStringRight(sDeity, 8) == GetStringLowerCase("nephthys") + || GetStringRight(sDeity, 10) == GetStringLowerCase("sharindlar") || GetStringRight(sDeity, 6) == GetStringLowerCase("sune")) + sResRef = "x2_it_wpwhip"; //:: Whip + + else if(GetStringRight(sDeity, 7) == GetStringLowerCase("bahamut") || GetStringRight(sDeity, 8) == GetStringLowerCase("nobanion") + || GetStringRight(sDeity, 12) == GetStringLowerCase("dragon below") || GetStringRight(sDeity, 6) == GetStringLowerCase("tiamat") + || GetStringRight(sDeity, 5) == GetStringLowerCase("ubtao")) + sResRef = "prc_wblph001"; //:: Heavy Pick + + else if(GetStringRight(sDeity, 9) == GetStringLowerCase("waukeen") || GetStringRight(sDeity, 6) == GetStringLowerCase("zouken")) + sResRef = "prc_wblnn001"; //:: Nunchaku + + else if(GetStringRight(sDeity, 5) == GetStringLowerCase("garyx") || GetStringRight(sDeity, 7) == GetStringLowerCase("olladra") + || GetStringRight(sDeity, 8) == GetStringLowerCase("peryroyl")) + sResRef = "nw_wspsc001"; //:: Sickle + + else if(GetStringRight(sDeity, 6) == GetStringLowerCase("lliira") || GetStringRight(sDeity, 6) == GetStringLowerCase("mystra") + || GetStringRight(sDeity, 6) == GetStringLowerCase("tymora")) + sResRef = "nw_wthsh001"; //:: Throwing Stars + + else if(GetStringRight(sDeity, 8) == GetStringLowerCase("sashelas") || GetStringRight(sDeity, 5) == GetStringLowerCase("hleid") + || GetStringRight(sDeity, 6) == GetStringLowerCase("osprem") || GetStringRight(sDeity, 8) == GetStringLowerCase("sekolah") + || GetStringRight(sDeity, 8) == GetStringLowerCase("devourer") || GetStringRight(sDeity, 8) == GetStringLowerCase("umberlee") + || GetStringRight(sDeity, 7) == GetStringLowerCase("yeathan")) + sResRef = "nw_wpltr001"; //:: Trident + + else if(GetStringRight(sDeity, 7) == GetStringLowerCase("ilmater") || GetStringRight(sDeity, 9) == GetStringLowerCase("ilsensine") + || GetStringRight(sDeity, 6) == GetStringLowerCase("sophia") || GetStringRight(sDeity, 6) == GetStringLowerCase("talona") + || GetStringRight(sDeity, 13) == GetStringLowerCase("path of light") || GetStringRight(sDeity, 7) == GetStringLowerCase("yurtrus") + || GetStringRight(sDeity, 7) == GetStringLowerCase("sharess") || GetStringRight(sDeity, 7) == GetStringLowerCase("malar")) + { //sResRef = "nw_wpltr001"; + sResRef = "prc_sprtwpn_slam"; //:: Unarmed Strike + } + + else if(sDeity == "" && nDomAlignment == ALIGNMENT_EVIL) + sResRef = "nw_wblfl001"; //:: Light Flail + + else if(sDeity == "" && nDomAlignment == ALIGNMENT_CHAOTIC) + sResRef = "nw_waxbt001"; //:: Battleaxe + + else if(sDeity == "" && nDomAlignment == ALIGNMENT_GOOD) + sResRef = "nw_wblhw001"; //:: Warhammer + + else if(sDeity == "" && nDomAlignment == ALIGNMENT_LAWFUL) + sResRef = "nw_wswgs001"; //:: Greatsword + + else if(sDeity == "" && nDomAlignment == ALIGNMENT_NEUTRAL) + sResRef = "nw_wswsc001"; //:: Scimitar + + return sResRef; +} + +object CreateDeityWeapon(object oCreature) +{ + string sWeapon = GetSpiritualWeaponTypeByDeity(oCreature); + + if(sWeapon == "") + return OBJECT_INVALID; + + object oWeapon = CreateItemOnObject(sWeapon, oCreature); + + EquipDebugString(GetName(oCreature) + " has Deity weapon "+GetName(oWeapon)); + return oWeapon; +} + +//:: Creates the weapon that the creature will be using. +void CreateSpiritualWeapon(object oCaster, float fDuration, int nClass) +{ +//:: Declare major variables + int iCasterLvL = PRCGetCasterLevel(oCaster); + int nBAB = GetBaseAttackBonus(oCaster); + int nAttNumber = 1+(nBAB / 4); + int nDamBonus = PRCMin(5, iCasterLvL / 3); + int nPenetr = iCasterLvL + SPGetPenetr(); + int nStat = nClass == CLASS_TYPE_INVALID ? + GetAbilityModifier(ABILITY_CHARISMA, oCaster) ://:: if cast from items use charisma by default + GetDCAbilityModForClass(nClass, oCaster); + + object oWeapon; + object oArmor; + object oAmmo1; + object oAmmo2; + + string sWeapon = GetSpiritualWeaponTypeByDeity(oCaster); + object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCaster); + SendMessageToPC(oCaster, "inc_spirit_weapn: Hooking Event."); + + RegisterSummonEvents(oSummon); + + int i = 1; + while(GetIsObjectValid(oSummon) && !GetIsPC(oSummon) && ! GetIsDM(oSummon)) + { + NullifyAppearance(oSummon); + + if(GetResRef(oSummon) == "prc_spirit_weapn") //:: Unarmed / "Claw Bracer" + { + SetBaseAttackBonus(nAttNumber, oSummon); + SendMessageToPC(oCaster, "inc_spirit_weapn:" +GetName(oCaster)+"'s BAB is: "+IntToString(nBAB)); + //EffectModifyAttacks(nAttNumber); + SendMessageToPC(oCaster, "inc_spirit_weapn: Adding "+IntToString(nAttNumber)+" attacks / round."); + SetLocalInt(oSummon, "X2_L_NUMBER_OF_ATTACKS", nAttNumber); + SendMessageToPC(oCaster, "inc_spirit_weapn: Storing caster as: " + GetName(oCaster)); + DelayCommand(0.0f, SetLocalObject(oSummon, "MY_CASTER", oCaster)); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_GHOST_SMOKE_2), oSummon); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_GHOST_TRANSPARENT), oSummon); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectAttackIncrease(nBAB+nStat), oSummon); + + if(!GetIsObjectValid(GetItemPossessedBy(oSummon, sWeapon))) + { + //Create item on the creature, equip it and add properties. + oWeapon = CreateItemOnObject(sWeapon, oSummon); + + //Add event scripts + AddEventScript(oWeapon, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon"); + AddEventScript(oWeapon, EVENT_ONHIT, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon"); + AddEventScript(oWeapon, EVENT_ITEM_ONUNAQUIREITEM, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onUnacquire event script on weapon"); + AddEventScript(oWeapon, EVENT_ITEM_ONPLAYERUNEQUIPITEM, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onUnequip event script on weapon"); + + // GZ: Fix for weapon being dropped when killed + SetDroppableFlag(oWeapon, FALSE); + SetItemCursedFlag(oWeapon, TRUE); + + if(sWeapon == "prc_sprtwpn_slam") + { + NullifyAppearance(oSummon, TRUE); + oArmor = CreateItemOnObject("prc_sprtwp_armor", oSummon); + ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_CWEAPON_R); + ForceEquip(oSummon, oArmor, INVENTORY_SLOT_CHEST); + SetItemCursedFlag(oArmor, TRUE); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_GLOW_WHITE), oSummon); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon); + + itemproperty ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + } + else if(sWeapon == "nw_wbwln001") //:: Longbow + { + NullifyAppearance(oSummon); + oAmmo1 = CreateItemOnObject("nw_wambo001", oSummon); + SetItemStackSize(oAmmo1, 99); + SetDroppableFlag(oAmmo1, FALSE); + SetItemCursedFlag(oAmmo1, TRUE); + + AddEventScript(oAmmo1, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on ammo"); + + oAmmo2 = CreateItemOnObject("nw_wambo001", oSummon); + SetItemStackSize(oAmmo2, 99); + SetDroppableFlag(oAmmo2, FALSE); + SetItemCursedFlag(oAmmo2, TRUE); + + AddEventScript(oAmmo2, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on ammo"); + + ForceEquip(oSummon, oAmmo1, INVENTORY_SLOT_ARROWS); + ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon); + + itemproperty ipDamage1 = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oAmmo1, ipDamage1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz1 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipViz1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit1 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipHit1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam1 = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipNoDam1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipDamage2 = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oAmmo2, ipDamage2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit2 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipHit2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz2 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipViz2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam2 = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipNoDam2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit3 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz3 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam3 = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + } + else if(sWeapon == "nw_wbwxl001") //:: Light crossbow + { + NullifyAppearance(oSummon); + oAmmo1 = CreateItemOnObject("nw_wambo001", oSummon); + SetItemStackSize(oAmmo1, 99); + SetDroppableFlag(oAmmo1, FALSE); + SetItemCursedFlag(oAmmo1, TRUE); + + AddEventScript(oAmmo1, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on ammo"); + + oAmmo2 = CreateItemOnObject("nw_wambo001", oSummon); + SetItemStackSize(oAmmo2, 99); + SetDroppableFlag(oAmmo2, FALSE); + SetItemCursedFlag(oAmmo2, TRUE); + + AddEventScript(oAmmo2, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on ammo"); + + ForceEquip(oSummon, oAmmo1, INVENTORY_SLOT_BOLTS); + ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon); + + itemproperty ipDamage1 = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oAmmo1, ipDamage1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz1 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipViz1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit1 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipHit1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam1 = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipNoDam1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipDamage2 = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oAmmo2, ipDamage2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit2 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipHit2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz2 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipViz2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam2 = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipNoDam2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit3 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz3 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam3 = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + } + else if(sWeapon == "nw_wthsh001") //:: Throwing Stars + { + NullifyAppearance(oSummon); + SetItemStackSize(oWeapon, 50); + SetDroppableFlag(oWeapon, FALSE); + SetItemCursedFlag(oWeapon, TRUE); + + AddEventScript(oWeapon, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon"); + + object oWeapon2 = CreateItemOnObject("nw_wthsh001", oSummon); + SetItemStackSize(oWeapon2, 50); + SetDroppableFlag(oWeapon2, FALSE); + SetItemCursedFlag(oWeapon2, TRUE); + + AddEventScript(oWeapon2, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon"); + + object oWeapon3 = CreateItemOnObject("nw_wthsh001", oSummon); + SetItemStackSize(oWeapon3, 50); + SetDroppableFlag(oWeapon3, FALSE); + SetItemCursedFlag(oWeapon3, TRUE); + + AddEventScript(oWeapon3, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon"); + + ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon); + + itemproperty ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon2, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipNoDam = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + } + else if(sWeapon == "nw_wthdt001") //:: Darts + { + NullifyAppearance(oSummon); + SetItemStackSize(oWeapon, 50); + SetDroppableFlag(oWeapon, FALSE); + SetItemCursedFlag(oWeapon, TRUE); + + AddEventScript(oWeapon, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon"); + + object oWeapon2 = CreateItemOnObject("nw_wthdt001", oSummon); + SetItemStackSize(oWeapon2, 50); + SetDroppableFlag(oWeapon2, FALSE); + SetItemCursedFlag(oWeapon2, TRUE); + + AddEventScript(oWeapon2, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon"); + + object oWeapon3 = CreateItemOnObject("nw_wthdt001", oSummon); + SetItemStackSize(oWeapon3, 50); + SetDroppableFlag(oWeapon3, FALSE); + SetItemCursedFlag(oWeapon3, TRUE); + + AddEventScript(oWeapon3, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon"); + + ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon); + + itemproperty ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon2, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipNoDam = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon3, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipNoDam = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + } + else //:: Covers all other weapons + { + NullifyAppearance(oSummon); + ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon); + + itemproperty ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + } + + } + } + i++; + oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCaster, i); + } +} + +void HandleSpiritualWeaponUnequipEvent() +{ + // Get the creature who unequipped the item + object oSummon = GetPCItemLastUnequippedBy(); + object oCaster = GetLocalObject(oSummon, "MY_CASTER"); + + // Get the item that was unequipped + object oWeapon = GetPCItemLastUnequipped(); + + if(GetIsPC(oSummon) == TRUE) + { + return; + } + + int nCasterLevel = PRCGetCasterLevel(oCaster); + int nDuration = nCasterLevel; + int nPenetr = nCasterLevel + SPGetPenetr(); + int nDamBonus = PRCMin(5, nCasterLevel / 3); + float fDuration = IntToFloat(nDuration); + + // Log the event for debugging + SendMessageToPC(oCaster, "prc_spirweap_tbs: Item OnUnEquip Event running."); + + // Check if the item is valid + if (GetIsObjectValid(oWeapon)) + { + // Log the item destruction for debugging + SendMessageToPC(oCaster, "prc_spirweap_tbs: Unequipped item detected. Destroying item."); + + // Destroy the unequipped item + DestroyObject(oWeapon); + + string sWeapon = GetSpiritualWeaponTypeByDeity(oCaster); + object oArmor; + + if(!GetIsObjectValid(GetItemPossessedBy(oSummon, sWeapon))) + { + //Create item on the creature, equip it and add properties. + oWeapon = CreateItemOnObject(sWeapon, oSummon); + + //Add event scripts + AddEventScript(oWeapon, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon"); + AddEventScript(oWeapon, EVENT_ONHIT, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon"); + AddEventScript(oWeapon, EVENT_ITEM_ONUNAQUIREITEM, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onUnacquire event script on weapon"); + AddEventScript(oWeapon, EVENT_ITEM_ONPLAYERUNEQUIPITEM, "prc_evnt_spirwep", TRUE, FALSE); + SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onUnequip event script on weapon"); + + // GZ: Fix for weapon being dropped when killed + SetDroppableFlag(oWeapon, FALSE); + SetItemCursedFlag(oWeapon, TRUE); + + if(sWeapon == "prc_sprtwpn_slam") + { + NullifyAppearance(oSummon, TRUE); + oArmor = CreateItemOnObject("prc_sprtwp_armor", oSummon); + ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_CWEAPON_R); + ForceEquip(oSummon, oArmor, INVENTORY_SLOT_CHEST); + SetItemCursedFlag(oArmor, TRUE); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_GLOW_WHITE), oSummon); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon); + + itemproperty ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + } + else if(sWeapon == "nw_wbwln001") //:: Longbow + { + NullifyAppearance(oSummon); + object oAmmo1 = CreateItemOnObject("nw_wamar001", oSummon); + SetItemStackSize(oAmmo1, 99); + SetDroppableFlag(oAmmo1, FALSE); + SetItemCursedFlag(oAmmo1, TRUE); + + object oAmmo2 = CreateItemOnObject("nw_wamar001", oSummon); + SetItemStackSize(oAmmo2, 99); + SetDroppableFlag(oAmmo2, FALSE); + SetItemCursedFlag(oAmmo2, TRUE); + + ForceEquip(oSummon, oAmmo1, INVENTORY_SLOT_ARROWS); + ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon); + + itemproperty ipDamage1 = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oAmmo1, ipDamage1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz1 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipViz1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit1 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipHit1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam1 = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipNoDam1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipDamage2 = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oAmmo2, ipDamage2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit2 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipHit2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz2 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipViz2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam2 = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipNoDam2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit3 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz3 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam3 = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + } + else if(sWeapon == "nw_wbwxl001") //:: Light crossbow + { + NullifyAppearance(oSummon); + object oAmmo1 = CreateItemOnObject("nw_wambo001", oSummon); + SetItemStackSize(oAmmo1, 99); + SetDroppableFlag(oAmmo1, FALSE); + SetItemCursedFlag(oAmmo1, TRUE); + + object oAmmo2 = CreateItemOnObject("nw_wambo001", oSummon); + SetItemStackSize(oAmmo2, 99); + SetDroppableFlag(oAmmo2, FALSE); + SetItemCursedFlag(oAmmo2, TRUE); + + ForceEquip(oSummon, oAmmo1, INVENTORY_SLOT_BOLTS); + ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon); + + itemproperty ipDamage1 = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oAmmo1, ipDamage1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz1 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipViz1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit1 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipHit1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam1 = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipNoDam1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipDamage2 = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oAmmo2, ipDamage2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit2 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipHit2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz2 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipViz2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam2 = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipNoDam2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit3 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz3 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam3 = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + } + else if(sWeapon == "nw_wthsh001") //:: Throwing Stars + { + NullifyAppearance(oSummon); + SetItemStackSize(oWeapon, 50); + SetDroppableFlag(oWeapon, FALSE); + SetItemCursedFlag(oWeapon, TRUE); + + object oWeapon2 = CreateItemOnObject("nw_wthsh001", oSummon); + SetItemStackSize(oWeapon2, 50); + SetDroppableFlag(oWeapon2, FALSE); + SetItemCursedFlag(oWeapon2, TRUE); + + object oWeapon3 = CreateItemOnObject("nw_wthsh001", oSummon); + SetItemStackSize(oWeapon3, 50); + SetDroppableFlag(oWeapon3, FALSE); + SetItemCursedFlag(oWeapon3, TRUE); + + ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon); + + itemproperty ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon2, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipNoDam = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon3, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipNoDam = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + } + else if(sWeapon == "nw_wthdt001") //:: Darts + { + NullifyAppearance(oSummon); + SetItemStackSize(oWeapon, 50); + SetDroppableFlag(oWeapon, FALSE); + SetItemCursedFlag(oWeapon, TRUE); + + object oWeapon2 = CreateItemOnObject("nw_wthdt001", oSummon); + SetItemStackSize(oWeapon2, 50); + SetDroppableFlag(oWeapon2, FALSE); + SetItemCursedFlag(oWeapon2, TRUE); + + object oWeapon3 = CreateItemOnObject("nw_wthdt001", oSummon); + SetItemStackSize(oWeapon3, 50); + SetDroppableFlag(oWeapon3, FALSE); + SetItemCursedFlag(oWeapon3, TRUE); + + ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon); + + itemproperty ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon2, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipNoDam = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon3, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + ipNoDam = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + } + else //:: Covers all other weapons + { + NullifyAppearance(oSummon); + ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon); + + itemproperty ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8); + DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + + itemproperty ipNoDam = ItemPropertyNoDamage(); + DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING)); + } + } + else + { + SendMessageToPC(oCaster, "prc_spirweap_tbs: No valid item to destroy."); + } + + return; + } +} + +//:: void main(){} \ No newline at end of file diff --git a/src/include/inc_sql.nss b/src/include/inc_sql.nss new file mode 100644 index 0000000..35cd8c8 --- /dev/null +++ b/src/include/inc_sql.nss @@ -0,0 +1,316 @@ +/** + * @file + * All the functions dealing with the NWNx database. Based on the APS include + * with optimisations, renamed to avoid naming clashes with the APS system. + * @author Primogenitor, motu99, fluffyamoeba + * @date created on 2009-01-25 + */ + + #include "prc_inc_switch" + +const int PRC_SQL_ERROR = 0; +const int PRC_SQL_SUCCESS = 1; +const string XCHST_DB = "xchst_db"; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +// creates and stores a 1024 Byte string for database-fetches on the module +void PRC_SQLInit(); + +// executes an SQL command direclty +void PRC_SQLExecDirect(string sSQL); + +// fetches data from a previous SQL fetch request; returns TRUE is fetch was successful +int PRC_SQLFetch(); + +// gets the actual data from a fetch; if a table with more than 1 column was requested, return the table element at column iCol +string PRC_SQLGetData(int iCol); + +// SQLite and MYSQL use different syntaxes +string PRC_SQLGetTick(); + +// Problems can arise with SQL commands if variables or values have single quotes +// in their names. These functions are a replace these quote with the tilde character +string ReplaceSingleChars(string sString, string sTarget, string sReplace); + +// only needed for SQLite; commits (actually stores) the changed to the database +void PRC_SQLiteCommit(); +// starts the pseudo heartbeat for committing SQLite DB +void StartSQLiteCommitHB(); +// pseudo heartbeat for committing SQLite DB; interval given in switch PRC_DB_SQLITE_INTERVAL +// default is 600 seconds (= 10 min) +void SQLiteCommitHB(); + +// Set oObject's persistent object with sVarName to sValue +// Optional parameters: +// iExpiration: Number of days the persistent variable should be kept in database (default: 0=forever) +// sTable: Name of the table where variable should be stored (default: pwobjdata) +void PRC_SetPersistentObject(object oObject, string sVarName, object oObject2, int iExpiration = 0, string sTable = "pwobjdata"); + +// Get oObject's persistent object sVarName +// Optional parameters: +// sTable: Name of the table where object is stored (default: pwobjdata) +// * Return value on error: 0 +object PRC_GetPersistentObject(object oObject, string sVarName, object oOwner = OBJECT_INVALID, string sTable = "pwobjdata"); + +// Portable presistent chest system (X-Chest) nwnx database support +// +void CreateXChestDB_SQLite(); +void CreateXChestDB_MySQL(); +void DeleteXChestDB(); + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +void PRC_SQLInit() +{ + int i; + + // Placeholder for ODBC persistence + string sMemory; + + for (i = 0; i < 8; i++) // reserve 8*128 bytes + sMemory += + "................................................................................................................................"; + + SetLocalString(GetModule(), "NWNX!ODBC!SPACER", sMemory); +} + +void PRC_SQLExecDirect(string sSQL) +{ + SetLocalString(GetModule(), "NWNX!ODBC!EXEC", sSQL); +} + +int PRC_SQLFetch() +{ + string sRow; + object oModule = GetModule(); + + // initialize the fetch string to a large 1024 Byte string; this will also trigger the fetch operation in NWNX + SetLocalString(oModule, "NWNX!ODBC!FETCH", GetLocalString(oModule, "NWNX!ODBC!SPACER")); + + // get the result from the fetch + sRow = GetLocalString(oModule, "NWNX!ODBC!FETCH"); + if (GetStringLength(sRow) > 0) + { + // store the result on the module and signal success + SetLocalString(oModule, "NWNX_ODBC_CurrentRow", sRow); + return PRC_SQL_SUCCESS; + } + else + { + // set the result string on the module to empty and signal failure + SetLocalString(oModule, "NWNX_ODBC_CurrentRow", ""); + return PRC_SQL_ERROR; + } +} + +/** @todo check mySQL manual, not sure if this is needed - fluffyamoeba */ +string PRC_SQLGetTick() +{ + if(GetPRCSwitch(PRC_DB_SQLITE)) + { + return ""; + } + else + { + return "`"; + } +} + +string PRC_SQLGetData(int iCol) +{ + string sResultSet = GetLocalString(GetModule(), "NWNX_ODBC_CurrentRow"); + int iPos = FindSubString(sResultSet, "¬"); + if (iCol == 1) + { + // only one column returned ? Then we are finished + if (iPos == -1) return sResultSet; + // more than one column returned ? Then return first column + else return GetStringLeft(sResultSet, iPos); + } + // more than one column requested, but only one returned ? Something went wrong; return empty string + else if (iPos == -1) return ""; + + // find column in current row + int iCount = 0; + int nLength = GetStringLength(sResultSet); + + // loop through columns until found + while (iCount++ != iCol) + { + if (iCount == iCol) + return GetStringLeft(sResultSet, iPos); + + // pull off the previous column and find new column marker + nLength -= (iPos + 1); + sResultSet = GetStringRight(sResultSet, nLength); + iPos = FindSubString(sResultSet, "¬"); + + // special case: last column in row + if (iPos == -1) return sResultSet; + } + + return sResultSet; +} + +string ReplaceSingleChars(string sString, string sTarget, string sReplace) +{ + if (FindSubString(sString, sTarget) == -1) // not found + return sString; + + int i; + string sReturn = ""; + string sChar; + + // Loop over every character and replace special characters + for (i = 0; i < GetStringLength(sString); i++) + { + sChar = GetSubString(sString, i, 1); + if (sChar == sTarget) + sReturn += sReplace; + else + sReturn += sChar; + } + return sReturn; +} + +// only needed for SQLite; commits (actually stores) the changed to the database +void PRC_SQLiteCommit() +{ + PRC_SQLExecDirect("COMMIT"); + PRC_SQLExecDirect("BEGIN IMMEDIATE"); +} + +// starts the pseudo heartbeat for committing SQLite DB +void StartSQLiteCommitHB() +{ + if (GetPRCSwitch(PRC_DB_SQLITE)) + { + int nInterval = GetPRCSwitch(PRC_DB_SQLITE_INTERVAL); + DelayCommand(nInterval ? IntToFloat(nInterval) : 600.0f, SQLiteCommitHB()); + } +} + +// pseudo heartbeat for committing SQLite DB; interval given in switch PRC_DB_SQLITE_INTERVAL +// default is 600 seconds (= 10 min) +void SQLiteCommitHB() +{ + // check if we are still using SQLite + if (GetPRCSwitch(PRC_DB_SQLITE)) + { + // do the commit + PRC_SQLExecDirect("COMMIT"); + PRC_SQLExecDirect("BEGIN IMMEDIATE"); + + // continue pseudo heartbeat + int nInterval = GetPRCSwitch(PRC_DB_SQLITE_INTERVAL); + DelayCommand(nInterval ? IntToFloat(nInterval) : 600.0f, SQLiteCommitHB()); + } +} + +void PRC_SetPersistentObject(object oOwner, string sVarName, object oObject, int iExpiration = 0, string sTable = "pwobjdata") +{ + string sPlayer; + string sTag; + + if (GetIsPC(oOwner)) + { + sPlayer = ReplaceSingleChars(GetPCPlayerName(oOwner), "'", "~"); + sTag = ReplaceSingleChars(GetName(oOwner), "'", "~"); + } + else + { + sPlayer = "~"; + sTag = GetTag(oOwner); + } + sVarName = ReplaceSingleChars(sVarName, "'", "~"); + + string sSQL = "SELECT player FROM " + sTable + " WHERE player='" + sPlayer + + "' AND tag='" + sTag + "' AND name='" + sVarName + "'"; + PRC_SQLExecDirect(sSQL); + + if (PRC_SQLFetch() == PRC_SQL_SUCCESS) + { + // row exists + sSQL = "UPDATE " + sTable + " SET val=%s,expire=" + IntToString(iExpiration) + + " WHERE player='" + sPlayer + "' AND tag='" + sTag + "' AND name='" + sVarName + "'"; + SetLocalString(GetModule(), "NWNX!ODBC!SETSCORCOSQL", sSQL); + StoreCampaignObject ("NWNX", "-", oObject); + } + else + { + // row doesn't exist + sSQL = "INSERT INTO " + sTable + " (player,tag,name,val,expire) VALUES" + + "('" + sPlayer + "','" + sTag + "','" + sVarName + "',%s," + IntToString(iExpiration) + ")"; + SetLocalString(GetModule(), "NWNX!ODBC!SETSCORCOSQL", sSQL); + StoreCampaignObject ("NWNX", "-", oObject); + } +} + +object PRC_GetPersistentObject(object oObject, string sVarName, object oOwner = OBJECT_INVALID, string sTable = "pwobjdata") +{ + string sPlayer; + string sTag; + object oModule; + + if (GetIsPC(oObject)) + { + sPlayer = ReplaceSingleChars(GetPCPlayerName(oObject), "'", "~"); + sTag = ReplaceSingleChars(GetName(oObject), "'", "~"); + } + else + { + sPlayer = "~"; + sTag = GetTag(oObject); + } + sVarName = ReplaceSingleChars(sVarName, "'", "~"); + + string sSQL = "SELECT val FROM " + sTable + " WHERE player='" + sPlayer + + "' AND tag='" + sTag + "' AND name='" + sVarName + "'"; + SetLocalString(GetModule(), "NWNX!ODBC!SETSCORCOSQL", sSQL); + + if (!GetIsObjectValid(oOwner)) + oOwner = oObject; + return RetrieveCampaignObject ("NWNX", "-", GetLocation(oOwner), oOwner); +} + +////////////////////////////////////////////////// +/* Functions for portable persistent chest */ +////////////////////////////////////////////////// + +void DeleteXChestDB() +{ + PRC_SQLExecDirect("DROP TABLE "+XCHST_DB); +} + +void CreateXChestDB_SQLite() +{ + PRC_SQLExecDirect("CREATE TABLE "+XCHST_DB+" (" + + "player varchar(64) NOT NULL default '~'," + + "tag varchar(64) NOT NULL default '~'," + + "name varchar(64) NOT NULL default '~'," + + "val blob," + + "expire int(11) default NULL," + + "last timestamp NOT NULL default current_timestamp," + + "PRIMARY KEY (player,tag,name)" + + ")"); +} + +void CreateXChestDB_MySQL() +{ + PRC_SQLExecDirect("CREATE TABLE "+XCHST_DB+" (" + + "player varchar(64) NOT NULL default '~'," + + "tag varchar(64) NOT NULL default '~'," + + "name varchar(64) NOT NULL default '~'," + + "val blob," + + "expire int(11) default NULL," + + "last timestamp NOT NULL default CURRENT_TIMESTAMP," + + "PRIMARY KEY (player,tag,name)" + + ") ENGINE=MyISAM DEFAULT CHARSET=latin1;"); +} + +//:: void main (){} \ No newline at end of file diff --git a/src/include/inc_switch_setup.nss b/src/include/inc_switch_setup.nss new file mode 100644 index 0000000..95e378b --- /dev/null +++ b/src/include/inc_switch_setup.nss @@ -0,0 +1,1125 @@ +/** @file inc_switch_setup + Functions for switch setups. Most only used on + mod load. Get/Set individual switches is done + via prc_inc_switch. + DO NOT include this file if you just want to + use Set/GetPRCSwitch as it's not needed. +*/ + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Controls which itemproperties can be added to + * the samurai weapon. + * @see PRC_SAMURAI_BAN_ in prc_inc_switch and the + * function difinition for more info. + */ +void DoSamuraiBanDefaults(); + +/** + * Sets the epic spell switches to their default values. + * + * If PRC_EPIC_INGORE_DEFAULTS is set, this does nothing. + */ +void DoEpicSpellDefaults(); + +/** + * Sets the file end markers to their default values. + * + * If FILE_END_MANUAL is set, this does nothing. + */ +void SetDefaultFileEnds(); + +/** + * This creates an array of all switch names on a waypoint + * It is used for the switch setting convo to loop over switches easily + */ +void CreateSwitchNameArray(); + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + +#include "prc_inc_array" // Needs direct include instead of inc_utility +#include "prc_inc_switch" + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +void DoSamuraiBanDefaults() +{ + if(GetPRCSwitch(PRC_SAMURAI_DISABLE_DEFAULT_BAN)) + return; + //remove all penalty iprops + SetPRCSwitch(PRC_SAMURAI_BAN_+"10_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"21_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"24_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"27_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"28_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"29_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"47_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"49_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"50_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"60_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"62_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"63_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"64_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"65_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"66_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"81_*_*_*", TRUE); + //PRCs restrictions + SetPRCSwitch(PRC_SAMURAI_BAN_+"86_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"87_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"88_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"89_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"90_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"91_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"120_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"121_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"122_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"123_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"124_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"125_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"126_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"127_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"134_*_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"150_*_*_*", TRUE); + //only allow elemental damages 6,7,9,10,13 + //damage + SetPRCSwitch(PRC_SAMURAI_BAN_+"16_5_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"16_8_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"16_11_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"16_12_*_*", TRUE); + //damage vs race + SetPRCSwitch(PRC_SAMURAI_BAN_+"17_*_5_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"17_*_8_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"17_*_11_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"17_*_12_*", TRUE); + //damage vs alignment + SetPRCSwitch(PRC_SAMURAI_BAN_+"18_*_5_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"18_*_8_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"18_*_11_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"18_*_12_*", TRUE); + //damage vs specific alignment + SetPRCSwitch(PRC_SAMURAI_BAN_+"19_*_5_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"19_*_8_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"19_*_11_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"19_*_12_*", TRUE); + //damage immunity + SetPRCSwitch(PRC_SAMURAI_BAN_+"20_5_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"20_8_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"20_11_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"20_12_*_*", TRUE); + //damage resist + SetPRCSwitch(PRC_SAMURAI_BAN_+"20_5_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"20_8_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"20_11_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"20_12_*_*", TRUE); + //slays + SetPRCSwitch(PRC_SAMURAI_BAN_+"48_21_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"48_22_*_*", TRUE); + SetPRCSwitch(PRC_SAMURAI_BAN_+"48_23_*_*", TRUE); + //vorpal + SetPRCSwitch(PRC_SAMURAI_BAN_+"48_24_*_*", TRUE); +} + +void DoEpicSpellDefaults() +{ + if(GetPRCSwitch(PRC_EPIC_INGORE_DEFAULTS)) + return; + SetPRCSwitch(PRC_EPIC_XP_COSTS, TRUE); + SetPRCSwitch(PRC_EPIC_BACKLASH_DAMAGE, TRUE); + SetPRCSwitch(PRC_EPIC_FOCI_ADJUST_DC, TRUE); + SetPRCSwitch(PRC_EPIC_GOLD_MULTIPLIER, 9000); + SetPRCSwitch(PRC_EPIC_XP_FRACTION, 25); + SetPRCSwitch(PRC_EPIC_FAILURE_FRACTION_GOLD, 2); + SetPRCSwitch(PRC_EPIC_BOOK_DESTRUCTION, 50); +} + +void SetDefaultFileEnds() +{ + // Overridden values: (TMI prevention) + // + // feat.2da - 390 + // spells.2da - 539 + + //START AUTO-GENERATED FILEENDS + SetPRCSwitch("PRC_FILE_END_actions", 43); + SetPRCSwitch("PRC_FILE_END_ambientmusic", 95); + SetPRCSwitch("PRC_FILE_END_ambientsound", 113); + SetPRCSwitch("PRC_FILE_END_ammunitiontypes", 35); + SetPRCSwitch("PRC_FILE_END_appearance", 870); + SetPRCSwitch("PRC_FILE_END_appearancesndset", 31); + SetPRCSwitch("PRC_FILE_END_areaeffects", 2); + SetPRCSwitch("PRC_FILE_END_armor", 8); + SetPRCSwitch("PRC_FILE_END_armorparts", 0); + SetPRCSwitch("PRC_FILE_END_armourtypes", 42); + SetPRCSwitch("PRC_FILE_END_baseitems", 204); + SetPRCSwitch("PRC_FILE_END_bodybag", 6); + SetPRCSwitch("PRC_FILE_END_caarmorclass", 7); + SetPRCSwitch("PRC_FILE_END_capart", 18); + SetPRCSwitch("PRC_FILE_END_categories", 22); + SetPRCSwitch("PRC_FILE_END_catype", 4); + SetPRCSwitch("PRC_FILE_END_chargenclothes", 15); + SetPRCSwitch("PRC_FILE_END_classes", 254); + SetPRCSwitch("PRC_FILE_END_cloakmodel", 16); + SetPRCSwitch("PRC_FILE_END_cls_atk_1", 59); + SetPRCSwitch("PRC_FILE_END_cls_atk_2", 59); + SetPRCSwitch("PRC_FILE_END_cls_atk_3", 59); + SetPRCSwitch("PRC_FILE_END_cls_atk_4", 59); + SetPRCSwitch("PRC_FILE_END_cls_atk_adst", 59); + SetPRCSwitch("PRC_FILE_END_cls_invkn_dfa", 59); + SetPRCSwitch("PRC_FILE_END_cls_invkn_warlok", 59); + SetPRCSwitch("PRC_FILE_END_cls_inv_dfa", 43); + SetPRCSwitch("PRC_FILE_END_cls_inv_warlok", 112); + SetPRCSwitch("PRC_FILE_END_cls_ivcr_dfa", 22); + SetPRCSwitch("PRC_FILE_END_cls_ivcr_warlok", 93); + SetPRCSwitch("PRC_FILE_END_cls_move_crusdr", 211); + SetPRCSwitch("PRC_FILE_END_cls_move_swdsge", 211); + SetPRCSwitch("PRC_FILE_END_cls_move_warbld", 211); + SetPRCSwitch("PRC_FILE_END_cls_mvcr_crusdr", 207); + SetPRCSwitch("PRC_FILE_END_cls_mvcr_swdsge", 207); + SetPRCSwitch("PRC_FILE_END_cls_mvcr_warbld", 207); + SetPRCSwitch("PRC_FILE_END_cls_mvkn_crusdr", 59); + SetPRCSwitch("PRC_FILE_END_cls_mvkn_swdsge", 59); + SetPRCSwitch("PRC_FILE_END_cls_mvkn_warbld", 59); + SetPRCSwitch("PRC_FILE_END_cls_psbk_foz", 59); + SetPRCSwitch("PRC_FILE_END_cls_psbk_psion", 59); + SetPRCSwitch("PRC_FILE_END_cls_psbk_psywar", 59); + SetPRCSwitch("PRC_FILE_END_cls_psbk_warmnd", 59); + SetPRCSwitch("PRC_FILE_END_cls_psbk_wilder", 59); + SetPRCSwitch("PRC_FILE_END_cls_psicr_foz", 154); + SetPRCSwitch("PRC_FILE_END_cls_psicr_psion", 196); + SetPRCSwitch("PRC_FILE_END_cls_psicr_psywar", 169); + SetPRCSwitch("PRC_FILE_END_cls_psicr_warmnd", 154); + SetPRCSwitch("PRC_FILE_END_cls_psicr_wilder", 196); + SetPRCSwitch("PRC_FILE_END_cls_psipw_foz", 226); + SetPRCSwitch("PRC_FILE_END_cls_psipw_psion", 285); + SetPRCSwitch("PRC_FILE_END_cls_psipw_psywar", 246); + SetPRCSwitch("PRC_FILE_END_cls_psipw_warmnd", 226); + SetPRCSwitch("PRC_FILE_END_cls_psipw_wilder", 285); + SetPRCSwitch("PRC_FILE_END_cls_savthr_barb", 59); + SetPRCSwitch("PRC_FILE_END_cls_savthr_bard", 60); + SetPRCSwitch("PRC_FILE_END_cls_savthr_cler", 59); + SetPRCSwitch("PRC_FILE_END_cls_savthr_cons", 59); + SetPRCSwitch("PRC_FILE_END_cls_savthr_dru", 59); + SetPRCSwitch("PRC_FILE_END_cls_savthr_fight", 59); + SetPRCSwitch("PRC_FILE_END_cls_savthr_lich", 59); + SetPRCSwitch("PRC_FILE_END_cls_savthr_monk", 59); + SetPRCSwitch("PRC_FILE_END_cls_savthr_pal", 59); + SetPRCSwitch("PRC_FILE_END_cls_savthr_rang", 59); + SetPRCSwitch("PRC_FILE_END_cls_savthr_rog", 59); + SetPRCSwitch("PRC_FILE_END_cls_savthr_sorc", 59); + SetPRCSwitch("PRC_FILE_END_cls_savthr_wild", 59); + SetPRCSwitch("PRC_FILE_END_cls_savthr_wiz", 59); + SetPRCSwitch("PRC_FILE_END_cls_spcr_antipl", 42); + SetPRCSwitch("PRC_FILE_END_cls_spcr_archv", 502); + SetPRCSwitch("PRC_FILE_END_cls_spcr_asasin", 39); + SetPRCSwitch("PRC_FILE_END_cls_spcr_bard", 144); + SetPRCSwitch("PRC_FILE_END_cls_spcr_beguil", 142); + SetPRCSwitch("PRC_FILE_END_cls_spcr_blkgrd", 47); + SetPRCSwitch("PRC_FILE_END_cls_spcr_dnecro", 137); + SetPRCSwitch("PRC_FILE_END_cls_spcr_duskbl", 69); + SetPRCSwitch("PRC_FILE_END_cls_spcr_favsol", 290); + SetPRCSwitch("PRC_FILE_END_cls_spcr_harper", 35); + SetPRCSwitch("PRC_FILE_END_cls_spcr_healer", 77); + SetPRCSwitch("PRC_FILE_END_cls_spcr_hexbl", 73); + SetPRCSwitch("PRC_FILE_END_cls_spcr_justww", 34); + SetPRCSwitch("PRC_FILE_END_cls_spcr_kchal", 48); + SetPRCSwitch("PRC_FILE_END_cls_spcr_kotmc", 26); + SetPRCSwitch("PRC_FILE_END_cls_spcr_myst", 290); + SetPRCSwitch("PRC_FILE_END_cls_spcr_ocu", 209); + SetPRCSwitch("PRC_FILE_END_cls_spcr_schord", 244); + SetPRCSwitch("PRC_FILE_END_cls_spcr_shaman", 205); + SetPRCSwitch("PRC_FILE_END_cls_spcr_sod", 33); + SetPRCSwitch("PRC_FILE_END_cls_spcr_sohei", 57); + SetPRCSwitch("PRC_FILE_END_cls_spcr_sol", 38); + SetPRCSwitch("PRC_FILE_END_cls_spcr_sorc", 430); + SetPRCSwitch("PRC_FILE_END_cls_spcr_suel", 117); + SetPRCSwitch("PRC_FILE_END_cls_spcr_templ", 112); + SetPRCSwitch("PRC_FILE_END_cls_spcr_tfshad", 27); + SetPRCSwitch("PRC_FILE_END_cls_spcr_vassal", 31); + SetPRCSwitch("PRC_FILE_END_cls_spcr_vigil", 41); + SetPRCSwitch("PRC_FILE_END_cls_spcr_witch", 252); + SetPRCSwitch("PRC_FILE_END_cls_spcr_wrmage", 135); + SetPRCSwitch("PRC_FILE_END_cls_spell_antipl", 115); + SetPRCSwitch("PRC_FILE_END_cls_spell_archv", 2720); + SetPRCSwitch("PRC_FILE_END_cls_spell_asasin", 52); + SetPRCSwitch("PRC_FILE_END_cls_spell_bard", 169); + SetPRCSwitch("PRC_FILE_END_cls_spell_beguil", 119); + SetPRCSwitch("PRC_FILE_END_cls_spell_blkgrd", 163); + SetPRCSwitch("PRC_FILE_END_cls_spell_dnecro", 134); + SetPRCSwitch("PRC_FILE_END_cls_spell_duskbl", 84); + SetPRCSwitch("PRC_FILE_END_cls_spell_favsol", 363); + SetPRCSwitch("PRC_FILE_END_cls_spell_harper", 21); + SetPRCSwitch("PRC_FILE_END_cls_spell_healer", 271); + SetPRCSwitch("PRC_FILE_END_cls_spell_hexbl", 79); + SetPRCSwitch("PRC_FILE_END_cls_spell_justww", 26); + SetPRCSwitch("PRC_FILE_END_cls_spell_kchal", 137); + SetPRCSwitch("PRC_FILE_END_cls_spell_kotmc", 70); + SetPRCSwitch("PRC_FILE_END_cls_spell_myst", 363); + SetPRCSwitch("PRC_FILE_END_cls_spell_ocu", 905); + SetPRCSwitch("PRC_FILE_END_cls_spell_schord", 308); + SetPRCSwitch("PRC_FILE_END_cls_spell_shaman", 667); + SetPRCSwitch("PRC_FILE_END_cls_spell_sod", 110); + SetPRCSwitch("PRC_FILE_END_cls_spell_sohei", 131); + SetPRCSwitch("PRC_FILE_END_cls_spell_sol", 114); + SetPRCSwitch("PRC_FILE_END_cls_spell_sorc", 541); + SetPRCSwitch("PRC_FILE_END_cls_spell_suel", 160); + SetPRCSwitch("PRC_FILE_END_cls_spell_templ", 95); + SetPRCSwitch("PRC_FILE_END_cls_spell_tfshad", 70); + SetPRCSwitch("PRC_FILE_END_cls_spell_vassal", 104); + SetPRCSwitch("PRC_FILE_END_cls_spell_vigil", 75); + SetPRCSwitch("PRC_FILE_END_cls_spell_witch", 193); + SetPRCSwitch("PRC_FILE_END_cls_spell_wrmage", 147); + SetPRCSwitch("PRC_FILE_END_cls_spgn_antipl", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_archv", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_asasin", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_bard", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_beguil", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_blkgrd", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_cler", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_dnecro", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_dru", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_duskbl", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_favsol", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_harper", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_healer", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_hexbl", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_justww", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_kchal", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_kotmc", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_myst", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_ocu", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_pal", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_rang", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_schord", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_shaman", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_sod", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_sohei", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_sol", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_sorc", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_suel", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_templ", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_tfshad", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_vassal", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_vigil", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_witch", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_wiz", 59); + SetPRCSwitch("PRC_FILE_END_cls_spgn_wrmage", 59); + SetPRCSwitch("PRC_FILE_END_cls_spkn_asasin", 59); + SetPRCSwitch("PRC_FILE_END_cls_spkn_bard", 59); + SetPRCSwitch("PRC_FILE_END_cls_spkn_beguil", 59); + SetPRCSwitch("PRC_FILE_END_cls_spkn_dnecro", 59); + SetPRCSwitch("PRC_FILE_END_cls_spkn_duskbl", 59); + SetPRCSwitch("PRC_FILE_END_cls_spkn_favsol", 59); + SetPRCSwitch("PRC_FILE_END_cls_spkn_harper", 59); + SetPRCSwitch("PRC_FILE_END_cls_spkn_hexbl", 59); + SetPRCSwitch("PRC_FILE_END_cls_spkn_justww", 59); + SetPRCSwitch("PRC_FILE_END_cls_spkn_myst", 59); + SetPRCSwitch("PRC_FILE_END_cls_spkn_schord", 59); + SetPRCSwitch("PRC_FILE_END_cls_spkn_sorc", 59); + SetPRCSwitch("PRC_FILE_END_cls_spkn_suel", 59); + SetPRCSwitch("PRC_FILE_END_cls_spkn_templ", 59); + SetPRCSwitch("PRC_FILE_END_cls_spkn_witch", 59); + SetPRCSwitch("PRC_FILE_END_cls_spkn_wrmage", 59); + SetPRCSwitch("PRC_FILE_END_cls_true_known", 39); + SetPRCSwitch("PRC_FILE_END_cls_true_maxlvl", 39); + SetPRCSwitch("PRC_FILE_END_cls_true_utter", 166); + SetPRCSwitch("PRC_FILE_END_colours", 175); + SetPRCSwitch("PRC_FILE_END_combatmodes", 3); + SetPRCSwitch("PRC_FILE_END_craft_armour", 63); + SetPRCSwitch("PRC_FILE_END_craft_golem", 40); + SetPRCSwitch("PRC_FILE_END_craft_ring", 41); + SetPRCSwitch("PRC_FILE_END_craft_weapon", 46); + SetPRCSwitch("PRC_FILE_END_craft_wondrous", 115); + SetPRCSwitch("PRC_FILE_END_creaturesize", 5); + SetPRCSwitch("PRC_FILE_END_creaturespeed", 8); + SetPRCSwitch("PRC_FILE_END_crtemplates", 10); + SetPRCSwitch("PRC_FILE_END_cursors", 10); + SetPRCSwitch("PRC_FILE_END_damagehitvisual", 11); + SetPRCSwitch("PRC_FILE_END_damagelevels", 5); + SetPRCSwitch("PRC_FILE_END_defaultacsounds", 8); + SetPRCSwitch("PRC_FILE_END_des_blumburg", 17); + SetPRCSwitch("PRC_FILE_END_des_conf_treas", 1); + SetPRCSwitch("PRC_FILE_END_des_crft_amat", 1); + SetPRCSwitch("PRC_FILE_END_des_crft_aparts", 17); + SetPRCSwitch("PRC_FILE_END_des_crft_appear", 53); + SetPRCSwitch("PRC_FILE_END_des_crft_armor", 41); + SetPRCSwitch("PRC_FILE_END_des_crft_bmat", 13); + SetPRCSwitch("PRC_FILE_END_des_crft_drop", 476); + SetPRCSwitch("PRC_FILE_END_des_crft_mat", 2); + SetPRCSwitch("PRC_FILE_END_des_crft_poison", 100); + SetPRCSwitch("PRC_FILE_END_des_crft_props", 27); + SetPRCSwitch("PRC_FILE_END_des_crft_scroll", 3999); + SetPRCSwitch("PRC_FILE_END_des_crft_spells", 19348); + SetPRCSwitch("PRC_FILE_END_des_crft_weapon", 29); + SetPRCSwitch("PRC_FILE_END_des_cutconvdur", 26); + SetPRCSwitch("PRC_FILE_END_des_feat2item", 1000); + SetPRCSwitch("PRC_FILE_END_des_matcomp", 510); + SetPRCSwitch("PRC_FILE_END_des_mechupgrades", 6); + SetPRCSwitch("PRC_FILE_END_des_pcstart_arm", 1); + SetPRCSwitch("PRC_FILE_END_des_pcstart_weap", 1); + SetPRCSwitch("PRC_FILE_END_des_prayer", 9); + SetPRCSwitch("PRC_FILE_END_des_restsystem", 21); + SetPRCSwitch("PRC_FILE_END_des_treas_ammo", 28); + SetPRCSwitch("PRC_FILE_END_des_treas_disp", 417); + SetPRCSwitch("PRC_FILE_END_des_treas_enh", 60); + SetPRCSwitch("PRC_FILE_END_des_treas_gold", 8); + SetPRCSwitch("PRC_FILE_END_des_treas_items", 15); + SetPRCSwitch("PRC_FILE_END_des_xp_rewards", 220); + SetPRCSwitch("PRC_FILE_END_diffsettings", 6); + SetPRCSwitch("PRC_FILE_END_disease", 62); + SetPRCSwitch("PRC_FILE_END_dmgxp", 59); + SetPRCSwitch("PRC_FILE_END_domains", 59); + SetPRCSwitch("PRC_FILE_END_doortype", 2); + SetPRCSwitch("PRC_FILE_END_doortypes", 238); + SetPRCSwitch("PRC_FILE_END_ECL", 254); + SetPRCSwitch("PRC_FILE_END_effectanim", 0); + SetPRCSwitch("PRC_FILE_END_effecticons", 129); + SetPRCSwitch("PRC_FILE_END_encdifficulty", 4); + SetPRCSwitch("PRC_FILE_END_encumbrance", 255); + SetPRCSwitch("PRC_FILE_END_environment", 25); + SetPRCSwitch("PRC_FILE_END_epicattacks", 235); + SetPRCSwitch("PRC_FILE_END_epicsaves", 59); + SetPRCSwitch("PRC_FILE_END_epicspells", 70); + SetPRCSwitch("PRC_FILE_END_epicspellseeds", 27); + SetPRCSwitch("PRC_FILE_END_excitedduration", 2); + SetPRCSwitch("PRC_FILE_END_exptable", 40); + SetPRCSwitch("PRC_FILE_END_feat", 24439); + SetPRCSwitch("PRC_FILE_END_fileends", 20); + SetPRCSwitch("PRC_FILE_END_footstepsounds", 17); + SetPRCSwitch("PRC_FILE_END_fractionalcr", 4); + SetPRCSwitch("PRC_FILE_END_gamespyrooms", 12); + SetPRCSwitch("PRC_FILE_END_gender", 4); + SetPRCSwitch("PRC_FILE_END_genericdoors", 25); + SetPRCSwitch("PRC_FILE_END_hen_companion", 18); + SetPRCSwitch("PRC_FILE_END_hen_familiar", 12); + SetPRCSwitch("PRC_FILE_END_inventorysnds", 32); + SetPRCSwitch("PRC_FILE_END_iprp_abilities", 5); + SetPRCSwitch("PRC_FILE_END_iprp_acmodtype", 4); + SetPRCSwitch("PRC_FILE_END_iprp_addcost", 1); + SetPRCSwitch("PRC_FILE_END_iprp_additional", 1); + SetPRCSwitch("PRC_FILE_END_iprp_aligngrp", 5); + SetPRCSwitch("PRC_FILE_END_iprp_alignment", 8); + SetPRCSwitch("PRC_FILE_END_iprp_ammocost", 15); + SetPRCSwitch("PRC_FILE_END_iprp_ammotype", 2); + SetPRCSwitch("PRC_FILE_END_iprp_amount", 4); + SetPRCSwitch("PRC_FILE_END_iprp_aoe", 7); + SetPRCSwitch("PRC_FILE_END_iprp_arcspell", 19); + SetPRCSwitch("PRC_FILE_END_iprp_base1", -1); + SetPRCSwitch("PRC_FILE_END_iprp_bladecost", 5); + SetPRCSwitch("PRC_FILE_END_iprp_bonuscost", 12); + SetPRCSwitch("PRC_FILE_END_iprp_casterlvl", 60); + SetPRCSwitch("PRC_FILE_END_iprp_chargecost", 13); + SetPRCSwitch("PRC_FILE_END_iprp_color", 6); + SetPRCSwitch("PRC_FILE_END_iprp_combatdam", 2); + SetPRCSwitch("PRC_FILE_END_iprp_costtable", 39); + SetPRCSwitch("PRC_FILE_END_iprp_damagecost", 70); + SetPRCSwitch("PRC_FILE_END_iprp_damagetype", 13); + SetPRCSwitch("PRC_FILE_END_iprp_damvulcost", 7); + SetPRCSwitch("PRC_FILE_END_iprp_decvalue1", 9); + SetPRCSwitch("PRC_FILE_END_iprp_decvalue2", 9); + SetPRCSwitch("PRC_FILE_END_iprp_feats", 24819); + SetPRCSwitch("PRC_FILE_END_iprp_immuncost", 7); + SetPRCSwitch("PRC_FILE_END_iprp_immunity", 9); + SetPRCSwitch("PRC_FILE_END_iprp_incvalue1", 9); + SetPRCSwitch("PRC_FILE_END_iprp_incvalue2", 9); + SetPRCSwitch("PRC_FILE_END_iprp_kitcost", 50); + SetPRCSwitch("PRC_FILE_END_iprp_lightcost", 4); + SetPRCSwitch("PRC_FILE_END_iprp_matcost", 77); + SetPRCSwitch("PRC_FILE_END_iprp_material", 77); + SetPRCSwitch("PRC_FILE_END_iprp_maxpp", 8); + SetPRCSwitch("PRC_FILE_END_iprp_meleecost", 20); + SetPRCSwitch("PRC_FILE_END_iprp_metamagic", 6); + SetPRCSwitch("PRC_FILE_END_iprp_monstcost", 58); + SetPRCSwitch("PRC_FILE_END_iprp_monsterdam", 14); + SetPRCSwitch("PRC_FILE_END_iprp_monsterhit", 9); + SetPRCSwitch("PRC_FILE_END_iprp_neg10cost", 50); + SetPRCSwitch("PRC_FILE_END_iprp_neg5cost", 10); + SetPRCSwitch("PRC_FILE_END_iprp_onhit", 25); + SetPRCSwitch("PRC_FILE_END_iprp_onhitcost", 70); + SetPRCSwitch("PRC_FILE_END_iprp_onhitdur", 27); + SetPRCSwitch("PRC_FILE_END_iprp_onhitspell", 209); + SetPRCSwitch("PRC_FILE_END_iprp_paramtable", 11); + SetPRCSwitch("PRC_FILE_END_iprp_poison", 5); + SetPRCSwitch("PRC_FILE_END_iprp_protection", 19); + SetPRCSwitch("PRC_FILE_END_iprp_qualcost", 15); + SetPRCSwitch("PRC_FILE_END_iprp_quality", 15); + SetPRCSwitch("PRC_FILE_END_iprp_redcost", 5); + SetPRCSwitch("PRC_FILE_END_iprp_resistcost", 28); + SetPRCSwitch("PRC_FILE_END_iprp_saveelement", 21); + SetPRCSwitch("PRC_FILE_END_iprp_savingthrow", 3); + SetPRCSwitch("PRC_FILE_END_iprp_skillcost", 50); + SetPRCSwitch("PRC_FILE_END_iprp_slotscost", -1); + SetPRCSwitch("PRC_FILE_END_iprp_soakcost", 50); + SetPRCSwitch("PRC_FILE_END_iprp_speed_dec", 9); + SetPRCSwitch("PRC_FILE_END_iprp_speed_enh", 9); + SetPRCSwitch("PRC_FILE_END_iprp_spellcost", 243); + SetPRCSwitch("PRC_FILE_END_iprp_spellcstr", 42); + SetPRCSwitch("PRC_FILE_END_iprp_spelllvcost", 9); + SetPRCSwitch("PRC_FILE_END_iprp_spelllvlimm", 9); + SetPRCSwitch("PRC_FILE_END_iprp_spells", 1456); + SetPRCSwitch("PRC_FILE_END_iprp_spellshl", 7); + SetPRCSwitch("PRC_FILE_END_iprp_srcost", 99); + SetPRCSwitch("PRC_FILE_END_iprp_staminacost", -1); + SetPRCSwitch("PRC_FILE_END_iprp_storedpp", 16); + SetPRCSwitch("PRC_FILE_END_iprp_terraintype", -1); + SetPRCSwitch("PRC_FILE_END_iprp_trapcost", 11); + SetPRCSwitch("PRC_FILE_END_iprp_traps", 4); + SetPRCSwitch("PRC_FILE_END_iprp_trapsize", 3); + SetPRCSwitch("PRC_FILE_END_iprp_visualfx", 6); + SetPRCSwitch("PRC_FILE_END_iprp_walk", 1); + SetPRCSwitch("PRC_FILE_END_iprp_weightcost", 6); + SetPRCSwitch("PRC_FILE_END_iprp_weightinc", 5); + SetPRCSwitch("PRC_FILE_END_itempropdef", 199); + SetPRCSwitch("PRC_FILE_END_itemprops", 199); + SetPRCSwitch("PRC_FILE_END_itemvalue", 59); + SetPRCSwitch("PRC_FILE_END_itmwizammo", 54); + SetPRCSwitch("PRC_FILE_END_itmwizarmor", 72); + SetPRCSwitch("PRC_FILE_END_itmwizhelmet", 71); + SetPRCSwitch("PRC_FILE_END_itmwizmelee", 47); + SetPRCSwitch("PRC_FILE_END_itmwizpotion", 38); + SetPRCSwitch("PRC_FILE_END_itmwizranged", 46); + SetPRCSwitch("PRC_FILE_END_itmwizrods", 41); + SetPRCSwitch("PRC_FILE_END_itmwizscroll", 38); + SetPRCSwitch("PRC_FILE_END_itmwizstaves", 60); + SetPRCSwitch("PRC_FILE_END_itmwizthrow", 48); + SetPRCSwitch("PRC_FILE_END_itmwiztrap", 43); + SetPRCSwitch("PRC_FILE_END_itmwizwands", 38); + SetPRCSwitch("PRC_FILE_END_keymap", 70); + SetPRCSwitch("PRC_FILE_END_lightcolor", 32); + SetPRCSwitch("PRC_FILE_END_loadhints", 88); + SetPRCSwitch("PRC_FILE_END_loadscreens", 259); + SetPRCSwitch("PRC_FILE_END_masterfeats", 113); + SetPRCSwitch("PRC_FILE_END_materialcomp", 200); + SetPRCSwitch("PRC_FILE_END_metamagic", 6); + SetPRCSwitch("PRC_FILE_END_namefilter", 3); + SetPRCSwitch("PRC_FILE_END_nwconfig", 6); + SetPRCSwitch("PRC_FILE_END_nwconfig2", 6); + SetPRCSwitch("PRC_FILE_END_packeqbarb1", 5); + SetPRCSwitch("PRC_FILE_END_packeqbarb3", 7); + SetPRCSwitch("PRC_FILE_END_packeqbarb4", 4); + SetPRCSwitch("PRC_FILE_END_packeqbarb5", 5); + SetPRCSwitch("PRC_FILE_END_packeqbard1", 11); + SetPRCSwitch("PRC_FILE_END_packeqcler1", 6); + SetPRCSwitch("PRC_FILE_END_packeqcler2", 6); + SetPRCSwitch("PRC_FILE_END_packeqcler3", 6); + SetPRCSwitch("PRC_FILE_END_packeqcler4", 6); + SetPRCSwitch("PRC_FILE_END_packeqcler5", 6); + SetPRCSwitch("PRC_FILE_END_packeqdruid1", 5); + SetPRCSwitch("PRC_FILE_END_packeqfight1", 5); + SetPRCSwitch("PRC_FILE_END_packeqfight2", 7); + SetPRCSwitch("PRC_FILE_END_packeqfight6", 5); + SetPRCSwitch("PRC_FILE_END_packeqfightc", 5); + SetPRCSwitch("PRC_FILE_END_packeqmonk1", 5); + SetPRCSwitch("PRC_FILE_END_packeqmonk2", 6); + SetPRCSwitch("PRC_FILE_END_packeqmonk4", 5); + SetPRCSwitch("PRC_FILE_END_packeqmonk5", 6); + SetPRCSwitch("PRC_FILE_END_packeqpala1", 6); + SetPRCSwitch("PRC_FILE_END_packeqpala2", 7); + SetPRCSwitch("PRC_FILE_END_packeqpala3", 8); + SetPRCSwitch("PRC_FILE_END_packeqrang1", 8); + SetPRCSwitch("PRC_FILE_END_packeqrang2", 8); + SetPRCSwitch("PRC_FILE_END_packeqrang3", 8); + SetPRCSwitch("PRC_FILE_END_packeqrang4", 8); + SetPRCSwitch("PRC_FILE_END_packeqrang5", 8); + SetPRCSwitch("PRC_FILE_END_packeqrog1", 8); + SetPRCSwitch("PRC_FILE_END_packeqrog2", 8); + SetPRCSwitch("PRC_FILE_END_packeqrog3", 8); + SetPRCSwitch("PRC_FILE_END_packeqrog5", 8); + SetPRCSwitch("PRC_FILE_END_packeqrogd", 8); + SetPRCSwitch("PRC_FILE_END_packeqsor1", 11); + SetPRCSwitch("PRC_FILE_END_packeqwiz1", 11); + SetPRCSwitch("PRC_FILE_END_packeqwizb", 11); + SetPRCSwitch("PRC_FILE_END_packftarch", 168); + SetPRCSwitch("PRC_FILE_END_packftassa", 220); + SetPRCSwitch("PRC_FILE_END_packftbarb1", 222); + SetPRCSwitch("PRC_FILE_END_packftbarb2", 219); + SetPRCSwitch("PRC_FILE_END_packftbarb3", 220); + SetPRCSwitch("PRC_FILE_END_packftbarb4", 222); + SetPRCSwitch("PRC_FILE_END_packftbarb5", 221); + SetPRCSwitch("PRC_FILE_END_packftbarbf", 37); + SetPRCSwitch("PRC_FILE_END_packftbard1", 177); + SetPRCSwitch("PRC_FILE_END_packftbard2", 173); + SetPRCSwitch("PRC_FILE_END_packftbard3", 176); + SetPRCSwitch("PRC_FILE_END_packftbard4", 169); + SetPRCSwitch("PRC_FILE_END_packftbard5", 168); + SetPRCSwitch("PRC_FILE_END_packftbard6", 67); + SetPRCSwitch("PRC_FILE_END_packftbardg", 42); + SetPRCSwitch("PRC_FILE_END_packftblck", 335); + SetPRCSwitch("PRC_FILE_END_packftcler1", 161); + SetPRCSwitch("PRC_FILE_END_packftcler2", 166); + SetPRCSwitch("PRC_FILE_END_packftcler3", 165); + SetPRCSwitch("PRC_FILE_END_packftcler4", 165); + SetPRCSwitch("PRC_FILE_END_packftcler5", 163); + SetPRCSwitch("PRC_FILE_END_packftcler6", 160); + SetPRCSwitch("PRC_FILE_END_packftclere", 46); + SetPRCSwitch("PRC_FILE_END_packftcrea1", 23); + SetPRCSwitch("PRC_FILE_END_packftdrdis", 254); + SetPRCSwitch("PRC_FILE_END_packftdruid1", 196); + SetPRCSwitch("PRC_FILE_END_packftdruid2", 204); + SetPRCSwitch("PRC_FILE_END_packftdruid3", 199); + SetPRCSwitch("PRC_FILE_END_packftdruid4", 198); + SetPRCSwitch("PRC_FILE_END_packftdruid5", 198); + SetPRCSwitch("PRC_FILE_END_packftdruid6", 196); + SetPRCSwitch("PRC_FILE_END_packftdwdef", 337); + SetPRCSwitch("PRC_FILE_END_packftfight1", 382); + SetPRCSwitch("PRC_FILE_END_packftfight2", 383); + SetPRCSwitch("PRC_FILE_END_packftfight3", 383); + SetPRCSwitch("PRC_FILE_END_packftfight4", 383); + SetPRCSwitch("PRC_FILE_END_packftfight5", 382); + SetPRCSwitch("PRC_FILE_END_packftfight6", 383); + SetPRCSwitch("PRC_FILE_END_packftfightc", 45); + SetPRCSwitch("PRC_FILE_END_packftharp", 191); + SetPRCSwitch("PRC_FILE_END_packftmonk1", 275); + SetPRCSwitch("PRC_FILE_END_packftmonk2", 275); + SetPRCSwitch("PRC_FILE_END_packftmonk3", 275); + SetPRCSwitch("PRC_FILE_END_packftmonk4", 275); + SetPRCSwitch("PRC_FILE_END_packftmonk5", 275); + SetPRCSwitch("PRC_FILE_END_packftmonk6", 275); + SetPRCSwitch("PRC_FILE_END_packftpala1", 213); + SetPRCSwitch("PRC_FILE_END_packftpala2", 213); + SetPRCSwitch("PRC_FILE_END_packftpala3", 212); + SetPRCSwitch("PRC_FILE_END_packftpala4", 212); + SetPRCSwitch("PRC_FILE_END_packftpalah", 32); + SetPRCSwitch("PRC_FILE_END_packftrang1", 155); + SetPRCSwitch("PRC_FILE_END_packftrang2", 158); + SetPRCSwitch("PRC_FILE_END_packftrang3", 158); + SetPRCSwitch("PRC_FILE_END_packftrang4", 159); + SetPRCSwitch("PRC_FILE_END_packftrang5", 158); + SetPRCSwitch("PRC_FILE_END_packftrang6", 157); + SetPRCSwitch("PRC_FILE_END_packftrog1", 298); + SetPRCSwitch("PRC_FILE_END_packftrog2", 303); + SetPRCSwitch("PRC_FILE_END_packftrog3", 302); + SetPRCSwitch("PRC_FILE_END_packftrog5", 322); + SetPRCSwitch("PRC_FILE_END_packftrog6", 315); + SetPRCSwitch("PRC_FILE_END_packftrog7", 321); + SetPRCSwitch("PRC_FILE_END_packftrogd", 37); + SetPRCSwitch("PRC_FILE_END_packftshad", 287); + SetPRCSwitch("PRC_FILE_END_packftshift", 148); + SetPRCSwitch("PRC_FILE_END_packftsor1", 174); + SetPRCSwitch("PRC_FILE_END_packftsor2", 157); + SetPRCSwitch("PRC_FILE_END_packftsor3", 157); + SetPRCSwitch("PRC_FILE_END_packftsor4", 157); + SetPRCSwitch("PRC_FILE_END_packftsor5", 157); + SetPRCSwitch("PRC_FILE_END_packftsor6", 172); + SetPRCSwitch("PRC_FILE_END_packftsor7", 170); + SetPRCSwitch("PRC_FILE_END_packftsor8", 174); + SetPRCSwitch("PRC_FILE_END_packftsor9", 199); + SetPRCSwitch("PRC_FILE_END_packftsora", 174); + SetPRCSwitch("PRC_FILE_END_packfttorm", 360); + SetPRCSwitch("PRC_FILE_END_packftwiz1", 174); + SetPRCSwitch("PRC_FILE_END_packftwiz2", 157); + SetPRCSwitch("PRC_FILE_END_packftwiz3", 157); + SetPRCSwitch("PRC_FILE_END_packftwiz4", 157); + SetPRCSwitch("PRC_FILE_END_packftwiz5", 157); + SetPRCSwitch("PRC_FILE_END_packftwiz6", 172); + SetPRCSwitch("PRC_FILE_END_packftwiz7", 170); + SetPRCSwitch("PRC_FILE_END_packftwiz8", 176); + SetPRCSwitch("PRC_FILE_END_packftwiz9", 199); + SetPRCSwitch("PRC_FILE_END_packftwiza", 174); + SetPRCSwitch("PRC_FILE_END_packftwizb", 43); + SetPRCSwitch("PRC_FILE_END_packftwm", 259); + SetPRCSwitch("PRC_FILE_END_packskarch", 10); + SetPRCSwitch("PRC_FILE_END_packskassa", 13); + SetPRCSwitch("PRC_FILE_END_packskbarb1", 20); + SetPRCSwitch("PRC_FILE_END_packskbarb2", 20); + SetPRCSwitch("PRC_FILE_END_packskbarb3", 20); + SetPRCSwitch("PRC_FILE_END_packskbarb4", 20); + SetPRCSwitch("PRC_FILE_END_packskbarb5", 20); + SetPRCSwitch("PRC_FILE_END_packskbarb6", 20); + SetPRCSwitch("PRC_FILE_END_packskbarb7", 8); + SetPRCSwitch("PRC_FILE_END_packskbard1", 22); + SetPRCSwitch("PRC_FILE_END_packskbard2", 22); + SetPRCSwitch("PRC_FILE_END_packskbard3", 22); + SetPRCSwitch("PRC_FILE_END_packskbard4", 22); + SetPRCSwitch("PRC_FILE_END_packskbard5", 22); + SetPRCSwitch("PRC_FILE_END_packskbard6", 22); + SetPRCSwitch("PRC_FILE_END_packskbard7", 12); + SetPRCSwitch("PRC_FILE_END_packskblck", 9); + SetPRCSwitch("PRC_FILE_END_packskcler1", 22); + SetPRCSwitch("PRC_FILE_END_packskcler2", 21); + SetPRCSwitch("PRC_FILE_END_packskcler3", 21); + SetPRCSwitch("PRC_FILE_END_packskcler4", 21); + SetPRCSwitch("PRC_FILE_END_packskcler5", 4); + SetPRCSwitch("PRC_FILE_END_packskcrea1", 4); + SetPRCSwitch("PRC_FILE_END_packskdrdis", 10); + SetPRCSwitch("PRC_FILE_END_packskdruid1", 21); + SetPRCSwitch("PRC_FILE_END_packskdruid2", 21); + SetPRCSwitch("PRC_FILE_END_packskdruid3", 21); + SetPRCSwitch("PRC_FILE_END_packskdruid4", 21); + SetPRCSwitch("PRC_FILE_END_packskdruid5", 22); + SetPRCSwitch("PRC_FILE_END_packskdwdef", 9); + SetPRCSwitch("PRC_FILE_END_packskfight1", 20); + SetPRCSwitch("PRC_FILE_END_packskfight2", 20); + SetPRCSwitch("PRC_FILE_END_packskfight3", 21); + SetPRCSwitch("PRC_FILE_END_packskfight5", 20); + SetPRCSwitch("PRC_FILE_END_packskfight6", 4); + SetPRCSwitch("PRC_FILE_END_packskharp", 11); + SetPRCSwitch("PRC_FILE_END_packskmonk1", 19); + SetPRCSwitch("PRC_FILE_END_packskmonk6", 20); + SetPRCSwitch("PRC_FILE_END_packskpala1", 18); + SetPRCSwitch("PRC_FILE_END_packskpala4", 19); + SetPRCSwitch("PRC_FILE_END_packskpalah", 21); + SetPRCSwitch("PRC_FILE_END_packskrang1", 24); + SetPRCSwitch("PRC_FILE_END_packskrang2", 24); + SetPRCSwitch("PRC_FILE_END_packskrang3", 24); + SetPRCSwitch("PRC_FILE_END_packskrog1", 23); + SetPRCSwitch("PRC_FILE_END_packskrog2", 23); + SetPRCSwitch("PRC_FILE_END_packskrog3", 23); + SetPRCSwitch("PRC_FILE_END_packskrog4", 22); + SetPRCSwitch("PRC_FILE_END_packskrog5", 21); + SetPRCSwitch("PRC_FILE_END_packskrog6", 13); + SetPRCSwitch("PRC_FILE_END_packskrog7", 23); + SetPRCSwitch("PRC_FILE_END_packskshad", 11); + SetPRCSwitch("PRC_FILE_END_packsksor10", 19); + SetPRCSwitch("PRC_FILE_END_packsktorm", 23); + SetPRCSwitch("PRC_FILE_END_packskwiz1", 19); + SetPRCSwitch("PRC_FILE_END_packskwizb", 23); + SetPRCSwitch("PRC_FILE_END_packspbar1", 67); + SetPRCSwitch("PRC_FILE_END_packspbar2", 47); + SetPRCSwitch("PRC_FILE_END_packspbar3", 34); + SetPRCSwitch("PRC_FILE_END_packspcleric1", 56); + SetPRCSwitch("PRC_FILE_END_packspcleric2", 53); + SetPRCSwitch("PRC_FILE_END_packspdruid1", 56); + SetPRCSwitch("PRC_FILE_END_packspnpc1", 101); + SetPRCSwitch("PRC_FILE_END_packsppala1", 26); + SetPRCSwitch("PRC_FILE_END_packsprang1", 63); + SetPRCSwitch("PRC_FILE_END_packspwiz1", 146); + SetPRCSwitch("PRC_FILE_END_packspwiz2", 47); + SetPRCSwitch("PRC_FILE_END_packspwiz3", 47); + SetPRCSwitch("PRC_FILE_END_packspwiz4", 50); + SetPRCSwitch("PRC_FILE_END_packspwiz5", 48); + SetPRCSwitch("PRC_FILE_END_packspwiz6", 47); + SetPRCSwitch("PRC_FILE_END_packspwiz7", 47); + SetPRCSwitch("PRC_FILE_END_packspwiz8", 49); + SetPRCSwitch("PRC_FILE_END_packspwiz9", 44); + SetPRCSwitch("PRC_FILE_END_packspwizb", 35); + SetPRCSwitch("PRC_FILE_END_parts_belt", 200); + SetPRCSwitch("PRC_FILE_END_parts_bicep", 200); + SetPRCSwitch("PRC_FILE_END_parts_chest", 200); + SetPRCSwitch("PRC_FILE_END_parts_foot", 200); + SetPRCSwitch("PRC_FILE_END_parts_forearm", 200); + SetPRCSwitch("PRC_FILE_END_parts_hand", 200); + SetPRCSwitch("PRC_FILE_END_parts_legs", 200); + SetPRCSwitch("PRC_FILE_END_parts_neck", 200); + SetPRCSwitch("PRC_FILE_END_parts_pelvis", 200); + SetPRCSwitch("PRC_FILE_END_parts_robe", 38); + SetPRCSwitch("PRC_FILE_END_parts_shin", 200); + SetPRCSwitch("PRC_FILE_END_parts_shoulder", 200); + SetPRCSwitch("PRC_FILE_END_phenotype", 33); + SetPRCSwitch("PRC_FILE_END_placeableobjsnds", 50); + SetPRCSwitch("PRC_FILE_END_placeables", 846); + SetPRCSwitch("PRC_FILE_END_placeabletypes", 8); + SetPRCSwitch("PRC_FILE_END_poison", 146); + SetPRCSwitch("PRC_FILE_END_poisontypedef", 3); + SetPRCSwitch("PRC_FILE_END_polymorph", 155); + SetPRCSwitch("PRC_FILE_END_portraits", 1300); + SetPRCSwitch("PRC_FILE_END_prc_craft_alchem", 37); + SetPRCSwitch("PRC_FILE_END_prc_craft_gen_it", 204); + SetPRCSwitch("PRC_FILE_END_prc_craft_poison", 62); + SetPRCSwitch("PRC_FILE_END_prc_domains", 59); + SetPRCSwitch("PRC_FILE_END_prc_familiar", 10); + SetPRCSwitch("PRC_FILE_END_prc_polymorph", 401); + SetPRCSwitch("PRC_FILE_END_prc_rune_craft", 7); + SetPRCSwitch("PRC_FILE_END_prc_spells", 4071); + SetPRCSwitch("PRC_FILE_END_prc_weap_items", 58); + SetPRCSwitch("PRC_FILE_END_pregen", 44); + SetPRCSwitch("PRC_FILE_END_prioritygroups", 21); + SetPRCSwitch("PRC_FILE_END_pvpsettings", 3); + SetPRCSwitch("PRC_FILE_END_racialappear", 254); + SetPRCSwitch("PRC_FILE_END_racialtypes", 254); + SetPRCSwitch("PRC_FILE_END_ranges", 13); + SetPRCSwitch("PRC_FILE_END_repadjust", 3); + SetPRCSwitch("PRC_FILE_END_replacetexture", 1); + SetPRCSwitch("PRC_FILE_END_repute", 4); + SetPRCSwitch("PRC_FILE_END_resistancecost", -1); + SetPRCSwitch("PRC_FILE_END_restduration", 60); + SetPRCSwitch("PRC_FILE_END_rrf_nss", 19); + SetPRCSwitch("PRC_FILE_END_rrf_wav", 40); + SetPRCSwitch("PRC_FILE_END_shft_packages", 9); + SetPRCSwitch("PRC_FILE_END_shft_pk_animal", 67); + SetPRCSwitch("PRC_FILE_END_shft_pk_constrct", 15); + SetPRCSwitch("PRC_FILE_END_shft_pk_dragon", 49); + SetPRCSwitch("PRC_FILE_END_shft_pk_element", 15); + SetPRCSwitch("PRC_FILE_END_shft_pk_gen1", 30); + SetPRCSwitch("PRC_FILE_END_shft_pk_gen2", 43); + SetPRCSwitch("PRC_FILE_END_shft_pk_outsider", 47); + SetPRCSwitch("PRC_FILE_END_shft_pk_rogue", 66); + SetPRCSwitch("PRC_FILE_END_shft_pk_undead", 43); + SetPRCSwitch("PRC_FILE_END_shft_pk_warrior", 88); + SetPRCSwitch("PRC_FILE_END_shifter_abilitie", 119); + SetPRCSwitch("PRC_FILE_END_shifter_feats", 425); + SetPRCSwitch("PRC_FILE_END_shifter_races", 30); + SetPRCSwitch("PRC_FILE_END_skills", 38); + SetPRCSwitch("PRC_FILE_END_skillvsitemcost", 55); + SetPRCSwitch("PRC_FILE_END_skyboxes", 6); + SetPRCSwitch("PRC_FILE_END_soundcatfilters", 14); + SetPRCSwitch("PRC_FILE_END_sounddefaultspos", 3); + SetPRCSwitch("PRC_FILE_END_sounddefaultstim", 5); + SetPRCSwitch("PRC_FILE_END_soundeax", 112); + SetPRCSwitch("PRC_FILE_END_soundgain", 14); + SetPRCSwitch("PRC_FILE_END_soundprovider", 12); + SetPRCSwitch("PRC_FILE_END_soundset", 453); + SetPRCSwitch("PRC_FILE_END_soundsettype", 4); + SetPRCSwitch("PRC_FILE_END_soundtypes", 1); + SetPRCSwitch("PRC_FILE_END_spells", 19348); + //SetPRCSwitch("PRC_FILE_END_spellschools", 9); + SetPRCSwitch("PRC_FILE_END_statescripts", 35); + SetPRCSwitch("PRC_FILE_END_stringtokens", 92); + SetPRCSwitch("PRC_FILE_END_surfacemat", 30); + SetPRCSwitch("PRC_FILE_END_swearfilter", 171); + SetPRCSwitch("PRC_FILE_END_tailmodel", 572); + SetPRCSwitch("PRC_FILE_END_tbw01_edge", 7); + SetPRCSwitch("PRC_FILE_END_tcn01doors", 0); + SetPRCSwitch("PRC_FILE_END_tcn01_edge", 27); + SetPRCSwitch("PRC_FILE_END_tdc01_edge", 12); + SetPRCSwitch("PRC_FILE_END_tde01_edge", 12); + SetPRCSwitch("PRC_FILE_END_tdm01_edge", 13); + SetPRCSwitch("PRC_FILE_END_tdr01_edge", 18); + SetPRCSwitch("PRC_FILE_END_tds01_edge", 12); + SetPRCSwitch("PRC_FILE_END_tdt01_edge", 11); + SetPRCSwitch("PRC_FILE_END_templates", 250); + SetPRCSwitch("PRC_FILE_END_tib01_edge", 3); + SetPRCSwitch("PRC_FILE_END_tic01_edge", 18); + SetPRCSwitch("PRC_FILE_END_tid01_edge", 10); + SetPRCSwitch("PRC_FILE_END_tii01_edge", 6); + SetPRCSwitch("PRC_FILE_END_tilecolor", 15); + SetPRCSwitch("PRC_FILE_END_tin01doors", 0); + SetPRCSwitch("PRC_FILE_END_tin01_edge", 15); + SetPRCSwitch("PRC_FILE_END_tms01_edge", 6); + SetPRCSwitch("PRC_FILE_END_tni01_edge", 15); + SetPRCSwitch("PRC_FILE_END_tni02_edge", 19); + SetPRCSwitch("PRC_FILE_END_tno01_edge", 67); + SetPRCSwitch("PRC_FILE_END_traps", 101); + SetPRCSwitch("PRC_FILE_END_treasurescale", 4); + SetPRCSwitch("PRC_FILE_END_tsw01_edge", 12); + SetPRCSwitch("PRC_FILE_END_ttd01_edge", 12); + SetPRCSwitch("PRC_FILE_END_ttf01_edge", 12); + SetPRCSwitch("PRC_FILE_END_tti01_edge", 10); + SetPRCSwitch("PRC_FILE_END_ttr01doors", 0); + SetPRCSwitch("PRC_FILE_END_ttr01_edge", 23); + SetPRCSwitch("PRC_FILE_END_tts01doors", 2); + SetPRCSwitch("PRC_FILE_END_tts01_edge", 25); + SetPRCSwitch("PRC_FILE_END_ttu01_edge", 36); + SetPRCSwitch("PRC_FILE_END_ttz01_edge", 28); + SetPRCSwitch("PRC_FILE_END_twc03_edge", 12); + SetPRCSwitch("PRC_FILE_END_unarmed_dmg", 13); + SetPRCSwitch("PRC_FILE_END_vfx_fire_forget", 16); + SetPRCSwitch("PRC_FILE_END_vfx_persistent", 254); + SetPRCSwitch("PRC_FILE_END_videoquality", 9); + SetPRCSwitch("PRC_FILE_END_visualeffects", 1373); + SetPRCSwitch("PRC_FILE_END_waypoint", 4); + SetPRCSwitch("PRC_FILE_END_weaponsounds", 21); + SetPRCSwitch("PRC_FILE_END_wingmodel", 89); + SetPRCSwitch("PRC_FILE_END_x3restrict", 899); + SetPRCSwitch("PRC_FILE_END_xpbaseconst", 16); + SetPRCSwitch("PRC_FILE_END_xptable", 39); + //END AUTO-GENERATED FILEENDS + + + //Overriding fileends + SetPRCSwitch("PRC_FILE_END_feat", 390); + SetPRCSwitch("PRC_FILE_END_spells", 539); + //SetPRCSwitch("PRC_FILE_END_iprp_feats", 17993); + SetPRCSwitch("PRC_FILE_END_iprp_feats", 40); + //SetPRCSwitch("PRC_FILE_END_iprp_spells", 1379); + + + //there is also the fileends.2da file, but that + //isnt read in here yet. may be later though + if(GetPRCSwitch(FILE_END_MANUAL)) + return; + SetPRCSwitch(FILE_END_CLASSES, PRCGetFileEnd("classes")); + SetPRCSwitch(FILE_END_RACIALTYPES, PRCGetFileEnd("racialtypes")); + SetPRCSwitch(FILE_END_GENDER, 1);//overriden to 1 for convoCC m/f only choice + SetPRCSwitch(FILE_END_PORTRAITS, PRCGetFileEnd("portraits")); + SetPRCSwitch(FILE_END_SKILLS, PRCGetFileEnd("skills")); + SetPRCSwitch(FILE_END_CLASS_FEAT, 600); + SetPRCSwitch(FILE_END_CLASS_POWER, 300); + SetPRCSwitch(FILE_END_CLASS_SPELLBOOK, PRCGetFileEnd("cls_spell_archv")); // + SetPRCSwitch(FILE_END_FEAT, PRCGetFileEnd("feat")); + SetPRCSwitch(FILE_END_FAMILIAR, PRCGetFileEnd("hen_familiar")); + SetPRCSwitch(FILE_END_ANIMALCOMP, PRCGetFileEnd("hen_companion")); + SetPRCSwitch(FILE_END_DOMAINS, PRCGetFileEnd("domains")); + SetPRCSwitch(FILE_END_SOUNDSET, PRCGetFileEnd("soundset")); + SetPRCSwitch(FILE_END_SPELLS, PRCGetFileEnd("spells")); + //SetPRCSwitch(FILE_END_SPELLSCHOOL, PRCGetFileEnd("spellschools")); + SetPRCSwitch(FILE_END_APPEARANCE, PRCGetFileEnd("appearance")); + SetPRCSwitch(FILE_END_WINGS, PRCGetFileEnd("wingmodel")); + SetPRCSwitch(FILE_END_TAILS, PRCGetFileEnd("tailmodel")); + SetPRCSwitch(FILE_END_BASEITEMS, PRCGetFileEnd("baseitems")); +} + +void CreateSwitchNameArray() +{ + object oWP = GetWaypointByTag("PRC_Switch_Name_WP"); + if(!GetIsObjectValid(oWP)) + oWP = CreateObject(OBJECT_TYPE_WAYPOINT, "NW_WAYPOINT001", GetStartingLocation(), FALSE, "PRC_Switch_Name_WP"); + if(!GetIsObjectValid(oWP)) + PrintString("CreateSwitchNameArray: Problem creating waypoint."); + array_create(oWP, "Switch_Name"); + //if you add more switches, add them to this list + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DEBUG); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_COMBAT_DEBUG); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_MATERIAL_COMPONENTS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DISABLE_COMPONENTS_SHOP); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_TRUESEEING); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_TRUESEEING_SPOT_BONUS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIOWARE_GRRESTORE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIOWARE_HEAL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIOWARE_MASS_HEAL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIOWARE_HARM); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIOWARE_NEUTRALIZE_POISON); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIOWARE_REMOVE_DISEASE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIO_UNLEARN); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_UNLEARN_SPELL_MAXNR); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TIMESTOP_BIOWARE_DURATION); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TIMESTOP_LOCAL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TIMESTOP_NO_HOSTILE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TIMESTOP_BLANK_PC); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_AFTS_EXTRA_DAMAGE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_ELEMENTAL_SWARM); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_FEAR_AURAS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_TENSERS_TRANSFORMATION); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_BLACK_BLADE_OF_DISASTER); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_FIND_TRAPS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_DARKNESS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_DARKNESS_35ED); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_ANIMATE_DEAD); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CREATE_UNDEAD_PERMANENT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CREATE_UNDEAD_UNCONTROLLED); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_NEC_TERM_PERMADEATH); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SPELL_ALIGNMENT_RESTRICT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_35ED_WORD_OF_FAITH); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SLEEP_NO_HD_CAP); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_165_DEATH_IMMUNITY); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CASTERLEVEL_FIRST_CLASS_RULE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_USE_NEW_IMBUE_ARROW); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DRAGON_DISCIPLE_SIZE_CHANGES); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SAMURAI_ALLOW_STOLEN_SACRIFICE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SAMURAI_ALLOW_UNIDENTIFIED_SACRIFICE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SAMURAI_SACRIFICE_SCALAR_x100); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SAMURAI_VALUE_SCALAR_x100); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_ORC_WARLORD_COHORT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_LICH_ALTER_SELF_DISABLE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TRUE_NECROMANCER_ALTERNATE_VISUAL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_THRALLHERD_LEADERSHIP); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_EPIC_XP_COSTS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_EPIC_TAKE_TEN_RULE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_EPIC_PRIMARY_ABILITY_MODIFIER_RULE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_EPIC_BACKLASH_DAMAGE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_EPIC_FOCI_ADJUST_DC); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_EPIC_GOLD_MULTIPLIER); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_EPIC_XP_FRACTION); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_EPIC_FAILURE_FRACTION_GOLD); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_EPIC_BOOK_DESTRUCTION); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_UNIMPINGED); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_IMPENETRABILITY); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_DULLBLADES); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_CHAMPIONS_VALOR); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_EPIC_CONVO_LEARNING_DISABLE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_STAFF_CASTER_LEVEL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_NPC_HAS_PC_SPELLCASTING); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_ECL_USES_XP_NOT_HD); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DISABLE_DEMILICH); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SPELLSLAB); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SPELLSLAB_NOSCROLLS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_ABILITY_DAMAGE_EFFECTS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SUPPLY_BASED_REST); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_REST_HEALING); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_REST_TIME); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_REST_LIMIT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_SPELL_SCHOOLS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PLAYER_TIME); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_SOMATIC_COMPOMENTS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_SOMATIC_ITEMS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_MULTISUMMON); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SUMMON_ROUND_PER_LEVEL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_ENABLE_SPELL_SHARING); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_ANIMAL_COMPANIONS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_FAMILIARS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_FAMILIAR_FEEDING); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_FAMILIARS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_NO_FREE_WIZ_SPELLS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_POWER_ATTACK); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_POWER_ATTACK_STACK_WITH_BW); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_NO_PETRIFY_GUI); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DISABLE_SWITCH_CHANGING_CONVO); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DISABLE_DOMAIN_ENFORCEMENT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BONUS_COHORTS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DISABLE_CUSTOM_COHORTS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DISABLE_STANDARD_COHORTS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DISABLE_REGISTER_COHORTS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_SLINGS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BEBILITH_CLAWS_DESTROY); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_AUTO_IDENTIFY_ON_ACQUIRE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_AUTO_UNIDENTIFY_ON_UNACQUIRE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SPELLFIRE_DISALLOW_CHARGE_SELF); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SPELLFIRE_DISALLOW_DRAIN_SCROLL_POTION); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SORC_DISALLOW_NEWSPELLBOOK); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BARD_DISALLOW_NEWSPELLBOOK); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BARD_LIGHT_ARMOR_SPELLCASTING); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CWSAMURAI_NO_HEIRLOOM_DAISHO); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DISABLE_CONVO_TEMPLATE_GAIN); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_ARMOR_SPEED); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_RACIAL_SPEED); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_FAST_TRAVEL_SPEED); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_REMOVE_PLAYER_SPEED); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_ENFORCE_RACIAL_APPEARANCE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_NPC_FORCE_RACE_ACQUIRE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DYNAMIC_CLOAK_AUTOCOLOUR_DISABLE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DEATH_STABLE_TO_DISABLED_CHANCE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DEATH_STABLE_TO_BLEED_CHANCE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DEATH_BLEED_TO_STABLE_CHANCE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DEATH_HEAL_FROM_STABLE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DEATH_DAMAGE_FROM_STABLE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DEATH_DAMAGE_FROM_BLEEDING); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DEATH_OR_BLEED); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_DEATH_ENABLE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_ACP_MANUAL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_ACP_AUTOMATIC); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_ACP_NPC_AUTOMATIC); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_ACP_DELAY); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_USE_TAGBASED_INDEX_FOR_POISON); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_USES_PER_ITEM_POISON_COUNT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_USES_PER_ITEM_POISON_DIE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_ALLOW_ONLY_SHARP_WEAPONS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_ALLOW_ALL_POISONS_ON_WEAPONS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DEXBASED_WEAPON_POISONING_FAILURE_CHANCE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_USES_PER_WEAPON_POISON_COUNT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_USES_PER_WEAPON_POISON_DIE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_POISON_ALLOW_CLEAN_IN_EQUIP); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_POISON_USE_INGREDIENST); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PSI_ASTRAL_CONSTRUCT_USE_2DA); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PSI_ASTRAL_CONSTRUCT_DUR_MOD); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_RAPID_METABOLISM); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PSI_IMP_METAPSIONICS_USE_SUM); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_USECR); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_S_HUGE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_S_LARGE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_S_MEDIUM); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_S_SMALL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_S_TINY); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_OUTSIDER); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_ELEMENTAL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_CONSTRUCT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_UNDEAD); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_DRAGON); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_ABERRATION); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_OOZE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_MAGICALBEAST); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_GIANT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_VERMIN); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_BEAST); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_ANIMAL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_MONSTROUSHUMANOID); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_HUMANOID); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_ELEMENTAL_DAMAGE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SPELL_SNEAK_DISABLE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_3_5e_FIST_DAMAGE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BRAWLER_SIZE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_APPEARANCE_SIZE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIOWARE_MONK_ATTACKS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SMALL_CREATURE_FINESSE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIOWARE_DIVINE_POWER); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_ALLOW_SWITCH_OF_TARGET); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DISABLE_COUP_DE_GRACE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_FLAME_WEAPON_DAMAGE_MAX); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DARKFIRE_DAMAGE_MAX); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TELEPORT_MAX_TARGET_LOCATIONS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DISABLE_TELEPORTATION); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PW_TIME); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PW_PC_AUTOEXPORT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PW_HP_TRACKING); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PW_LOCATION_TRACKING); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PW_MAPPIN_TRACKING); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PW_DEATH_TRACKING); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PW_SPELL_TRACKING); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_XP_USE_BIOWARE_XPTABLE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_XP_USE_SIMPLE_LA); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_XP_USE_SIMPLE_RACIAL_HD); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_XP_USE_SIMPLE_RACIAL_HD_NO_FREE_XP); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_XP_USE_SIMPLE_RACIAL_HD_NO_SELECTION); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_XP_USE_SETXP); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_USE_DATABASE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_USE_BIOWARE_DATABASE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DB_PRECACHE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DB_SQLITE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DB_SQLITE_INTERVAL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DB_MYSQL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_USE_LETOSCRIPT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_LETOSCRIPT_PHEONIX_SYNTAX); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_LETOSCRIPT_FIX_ABILITIES); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_LETOSCRIPT_UNICORN_SQL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_LETOSCRIPT_GETNEWESTBIC); + +//craft + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DISABLE_CRAFT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_TIMER_MULTIPLIER); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_TIMER_MAX); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_TIMER_MIN); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BREW_POTION_CASTER_LEVEL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SCRIBE_SCROLL_CASTER_LEVEL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_WAND_CASTER_LEVEL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_ROD_CASTER_LEVEL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_STAFF_CASTER_LEVEL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_BASE_ITEMS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_BREWPOTION_MAXLEVEL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_BREWPOTION_COSTMODIFIER); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_SCRIBESCROLL_COSTMODIFIER); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_CRAFTWAND_MAXLEVEL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_CRAFTWAND_COSTMODIFIER); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_ARBITRARY); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_COST_SCALE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_TIME_SCALE); + +//spells + +//shifter + +//general + +//PW + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_ENABLE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_AVARIEL_WINGS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_FEYRI_WINGS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_AASIMAR_WINGS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_FEYRI_TAIL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_TIEFLING_TAIL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_DROW_ENFORCE_GENDER); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_GENASI_ENFORCE_DOMAINS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_RAKSHASA_FEMALE_APPEARANCE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_ENFORCE_PNP_RACIAL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_ENFORCE_FEATS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_DISALLOW_CUSTOMISE_WINGS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_DISALLOW_CUSTOMISE_TAIL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_DISALLOW_CUSTOMISE_MODEL); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_USE_RACIAL_APPEARANCES); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_USE_RACIAL_PORTRAIT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_ONLY_PLAYER_VOICESETS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_RESTRICT_VOICESETS_BY_SEX); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_ALLOW_TO_KEEP_VOICESET); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_ALLOW_TO_KEEP_PORTRAIT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_RESTRICT_PORTRAIT_BY_SEX); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_ENABLE_RACIAL_HITDICE); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_ALLOW_SKILL_POINT_ROLLOVER); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_USE_XP_FOR_NEW_CHAR); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_ENCRYPTION_KEY); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_STAT_POINTS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_BONUS_FEATS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_MAX_STAT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_SKILL_MULTIPLIER); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_SKILL_BONUS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CONVOCC_CUSTOM_EXIT_SCRIPT); + + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TRUENAME_CR_MULTIPLIER); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TRUENAME_LEVEL_BONUS); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TRUENAME_DC_CONSTANT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PERFECTED_MAP_CONSTANT); + array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PERFECTED_MAP_MULTIPLIER); +} diff --git a/src/include/inc_target_list.nss b/src/include/inc_target_list.nss new file mode 100644 index 0000000..327f6ae --- /dev/null +++ b/src/include/inc_target_list.nss @@ -0,0 +1,239 @@ +//:://///////////////////////////////////////////// +//:: Target list management functions include +//:: inc_target_list +//:://///////////////////////////////////////////// +/** @file + This is a set of functions intended to be used in + spellscripts for getting a set of targets according + to CR. + + The list is built on the objects making up the list, + so it should be extracted from this system if it is + to be used for longer than the duration of a single + spellscript. + This is because the system cleans up after itself + and the object references from which the list is + built up of are deleted when current script execution + ends. + + Also, do not manipulate the list structure with means + other than the functions provided here. + + Any particular list should be built using only a signle + bias and ordering direction. + + + Behavior in circumstances other than the recommended + is non-deterministic. In other words, you've been warned :D + + + One can utilise the insertion bias constants to change + the ordering of the creatures in the list. + All orders are descending by default. + + + @author Ornedan + @date Created - 18.01.2005 + @date Modified - 26.06.2005 + @date Modified - 21.01.2006 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Public constants */ +////////////////////////////////////////////////// + +/// Inserts based on Challenge Rating +const int INSERTION_BIAS_CR = 1; + +/// Inserts based on Hit Dice +const int INSERTION_BIAS_HD = 2; + +/// Inserts based on the ratio of CurrentHP / MaxHP +const int INSERTION_BIAS_HP_RATIO = 3; + +/// Inserts based on distance from the object list is being built on +const int INSERTION_BIAS_DISTANCE = 4; + +/// Inserts based on the current amount of HP +const int INSERTION_BIAS_HP = 5; + +////////////////////////////////////////////////// +/* Public functions */ +////////////////////////////////////////////////// + +/** + * Adds the given object to a list. If no list exists when this is called, + * it is created. + * If either oInsert or oCaster is not valid, nothing happens. + * + * @param oInsert The object to insert into the list + * @param oCaster The object that holds the head of the list. + * This should be whatever object is casting the + * spell that uses the list. + * @param nInsertionBias The insertion bias to use, one of the + * INSERTION_BIAS_* constants + * @param bDescendingOrder Whether to sort the targets into ascending or + * descending order. + */ +void AddToTargetList(object oInsert, object oCaster, int nInsertionBias = INSERTION_BIAS_CR, int bDescendingOrder = TRUE); + + +/** + * Gets the head a target list. + * Returns the head of the list built on oCaster and removes it + * from the list. If there are no more entries in the list, + * return OBJECT_INVALID. + * + * @param oCaster An object a target list has been built on. + * @return The current head of the target list, which + * is then removed from the list. Or + * OBJECT_INVALID when no more objects remain + * in the list. + */ +object GetTargetListHead(object oCaster); + + + +////////////////////////////////////////////////// +/* Private constants */ +////////////////////////////////////////////////// + +const string TARGET_LIST_HEAD = "TargetListHead"; +const string TARGET_LIST_NEXT = "TargetListNext_"; +const string TARGET_LIST_PURGE_CALLED = "TargetListPurgeCalled"; + + +////////////////////////////////////////////////// +/* Private functions */ +////////////////////////////////////////////////// + +int GetIsInsertPosition(object oInsert, object oCompare, object oCaster, int nInsertionBias, int bDescendingOrder); + +void PurgeTargetList(object oCaster); + +////////////////////////////////////////////////// +/* function definitions */ +////////////////////////////////////////////////// + +void AddToTargetList(object oInsert, object oCaster, int nInsertionBias = INSERTION_BIAS_CR, int bDescendingOrder = TRUE) +{ + if(!GetIsObjectValid(oInsert) || + !GetIsObjectValid(oCaster)) + { + WriteTimestampedLogEntry("AddToTargetList called with an invalid parameter"); + return; + } + + object oCurrent = GetLocalObject(oCaster, TARGET_LIST_HEAD); + + // If the queue is empty, or the insertable just happens to belong at the head + if(GetIsInsertPosition(oInsert, oCurrent, oCaster, nInsertionBias, bDescendingOrder)) + { + SetLocalObject(oCaster, TARGET_LIST_HEAD, oInsert); + SetLocalObject(oCaster, TARGET_LIST_NEXT + ObjectToString(oInsert), oCurrent); + }// end if - insertable is the new head of the list + else + { + object oNext = GetLocalObject(oCaster, TARGET_LIST_NEXT + ObjectToString(oCurrent)); + int bDone = FALSE; + while(!bDone) + { + if(GetIsInsertPosition(oInsert, oNext, oCaster, nInsertionBias, bDescendingOrder)) + { + SetLocalObject(oCaster, TARGET_LIST_NEXT + ObjectToString(oCurrent), oInsert); + // Some paranoia to make sure the last element of the list always points + // to invalid + if(GetIsObjectValid(oNext)){ + SetLocalObject(oCaster, TARGET_LIST_NEXT + ObjectToString(oInsert), oNext); + } + else + DeleteLocalObject(oCaster, TARGET_LIST_NEXT + ObjectToString(oInsert)); + + bDone = TRUE; + }// end if - this is the place to insert + else + { + oCurrent = oNext; + oNext = GetLocalObject(oCaster, TARGET_LIST_NEXT + ObjectToString(oCurrent)); + }// end else - get next object in the list + }// end while - loop through the list, looking for the position to insert this creature + }// end else - the insertable creature is to be in a position other than the head + + // Schedule clearing the list away once the current script has finished if it hasn't been done already + if(!GetLocalInt(oCaster, TARGET_LIST_PURGE_CALLED)) + { + DelayCommand(0.0f, PurgeTargetList(oCaster)); + SetLocalInt(oCaster, TARGET_LIST_PURGE_CALLED, TRUE); + } +} + + + +object GetTargetListHead(object oCaster) +{ + object oReturn = GetLocalObject(oCaster, TARGET_LIST_HEAD); + SetLocalObject(oCaster, TARGET_LIST_HEAD, GetLocalObject(oCaster, TARGET_LIST_NEXT + ObjectToString(oReturn))); + DeleteLocalObject(oCaster, TARGET_LIST_NEXT + ObjectToString(oReturn)); + + return oReturn; +} + + +/* Removes the list of target objects held by oCaster + * This should be called once the list is no longer used by the script that needed it + * Failure to do so may cause problems + */ +void PurgeTargetList(object oCaster) +{ + object oCurrent = GetLocalObject(oCaster, TARGET_LIST_HEAD); + DeleteLocalObject(oCaster, TARGET_LIST_HEAD); + object oNext; + while(GetIsObjectValid(oCurrent)) + { + oNext = GetLocalObject(oCaster, TARGET_LIST_NEXT + ObjectToString(oCurrent)); + DeleteLocalObject(oCaster, TARGET_LIST_NEXT + ObjectToString(oCurrent)); + oCurrent = oNext; + }// end while - loop through the list erasing the links + + DeleteLocalInt(oCaster, TARGET_LIST_PURGE_CALLED); +} + + +// This is an internal function intended only for use in inc_target_list.nss +int GetIsInsertPosition(object oInsert, object oCompare, object oCaster, int nInsertionBias, int bDescendingOrder) +{ + // Special case - A valid object is always inserted before an invalid one + if(!GetIsObjectValid(oCompare)) + return TRUE; + + int bReturn; + + switch(nInsertionBias) + { + case INSERTION_BIAS_CR: + bReturn = GetChallengeRating(oInsert) > GetChallengeRating(oCompare); + break; + case INSERTION_BIAS_HD: + bReturn = GetHitDice(oInsert) > GetHitDice(oCompare); + break; + case INSERTION_BIAS_HP_RATIO:// A bit of trickery to avoid possible division by zero, which would happen if a non-creature got passed for insertion + bReturn = (IntToFloat(GetCurrentHitPoints(oInsert)) / ((GetMaxHitPoints(oInsert) > 0) ? IntToFloat(GetMaxHitPoints(oInsert)) : 0.001f)) + > + (IntToFloat(GetCurrentHitPoints(oCompare)) / ((GetMaxHitPoints(oCompare) > 0) ? IntToFloat(GetMaxHitPoints(oCompare)) : 0.001f)); + break; + case INSERTION_BIAS_DISTANCE: + bReturn = GetDistanceBetween(oInsert, oCaster) > GetDistanceBetween(oCompare, oCaster); + break; + case INSERTION_BIAS_HP: + bReturn = GetCurrentHitPoints(oInsert) > GetCurrentHitPoints(oCompare); + break; + default: + WriteTimestampedLogEntry("Invalid target selection bias given. Value: " + IntToString(nInsertionBias)); + return TRUE; + } + + return bDescendingOrder ? bReturn : !bReturn; +} \ No newline at end of file diff --git a/src/include/inc_threads.nss b/src/include/inc_threads.nss new file mode 100644 index 0000000..a172694 --- /dev/null +++ b/src/include/inc_threads.nss @@ -0,0 +1,405 @@ +//::////////////////////////////////////////////// +//:: Thread include +//:: inc_threads +//::////////////////////////////////////////////// +/** @file + A simple set of functions for creating, + controlling and destroying threads that + repeatedly run a given script. + A thread is implemented as a pseudo-hb that + executes a given script on each of it's + beats. + + Threads may be in one of 3 states: + THREAD_STATE_DEAD: + Equivalent to the thread not existing at + all. + + THREAD_STATE_RUNNING: + The thread is alive, and will execute it's + script on each of the underlying pseudo-hb's + beats. + + THREAD_STATE_SLEEPING: + The thread is alive, but will not execute + it's script on the pseudo-hb's beats. + + + The thread's script will be ExecuteScripted on + the object that the thread is running on. This + is the same object that also stores the + thread's state (all of 3 local variables). + + + @author Ornedan + @date Created - 14.03.2005 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Constant declarations */ +////////////////////////////////////////////////// + +// Thread state constants + +/// Thread state - Dead or non-existent +const int THREAD_STATE_DEAD = 0; +/// Thread state - Running at the moment +const int THREAD_STATE_RUNNING = 1; +/// Thread state - Sleeping +const int THREAD_STATE_SLEEPING = 2; + + +// Internal constants. Nothing to see here. <.< >.> + +const string PREFIX = "prc_thread_"; +const string SUFFIX_SCRIPT = "_script"; +const string SUFFIX_INTERVAL = "_interval"; +const string SUFFIX_ITERATION = "_iteration"; +const string CUR_THREAD = "current_thread"; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Creates a new thread. + * + * @param sName Name of thread to create. Must be non-empty + * @param sScript Name of script to run. Must be non-empty + * @param fExecutionInterval Amount of time that passes between executions of sScript. + * Only values > 0.0 allowed + * @param oToRunOn Object that stores the thread state values, and that + * sScript will be ExecuteScripted on. + * If this is OBJECT_INVALID, the module will be used to hold + * the thread + * + * @return TRUE if the thread creation was successfull. Possible reasons of failure: + * - One or more parameters were invalid + * - A thread by the given name was already running on oToRunOn + */ +int SpawnNewThread(string sName, string sScript, float fExecutionInterval = 6.0f, object oToRunOn = OBJECT_INVALID); + +/** + * Inspects the state of the given thread. + * + * @param sName Name of thread to inspect. Must be non-empty + * @param oRunningOn Object that the thread is running on. If this + * is OBJECT_INVALID, the module will be used. + * + * @return One of the THREAD_STATE_* constants. Inspecting a non- + * existent thread, or thread that was running on an object that + * was destroyed will return THREAD_STATE_DEAD + */ +int GetThreadState(string sName, object oRunningOn = OBJECT_INVALID); + +/** + * Gets the name of the script the given thread is running. + * + * @param sName Name of thread to inspect. Must be non-empty + * @param oRunningOn Object that the thread is running on. If this + * is OBJECT_INVALID, the module will be used. + * + * @return The name of the the given thread executes on success, "" + * on failure (querying with invalid parameters, or on a dead thread) + */ +string GetThreadScript(string sName, object oRunningOn = OBJECT_INVALID); + +/** Gets the execution interval for the given thread + * + * @param sName Name of thread to inspect. Must be non-empty + * @param oRunningOn Object that the thread is running on. If this + * is OBJECT_INVALID, the module will be used. + * + * @return The time between the given thread executing it's script. + * On failure, 0.0f is returned. + */ +float GetThreadExecutionInterval(string sName, object oRunningOn = OBJECT_INVALID); + +/** + * Gets the name of the thread whose script is currently being executed. + * + * @return The name of the thread being executed at the time of the call, + * or "" if no thread is being executed when this is called. + */ +string GetCurrentThread(); + +/** + * Gets the object currently running thread is executing on + * + * @return The object the currently executing thread is being executed on + * or OBJECT_INVALID if no thread is being executed when this is called. + */ +object GetCurrentThreadObject(); + +/** + * Stops further execution of the given thread and removes it's data + * from the object it was running on. + * + * @param sName Name of thread to terminate. Must be non-empty + * @param oRunningOn Object that the thread is running on. If this + * is OBJECT_INVALID, the module will be used. + */ +void TerminateThread(string sName, object oRunningOn = OBJECT_INVALID); + +/** + * Stops further execution of the thread currently being executed. + * A convenience wrapper for TerminateThread to be called from a + * threadscript. + */ +void TerminateCurrentThread(); + +/** + * Sets the stae of the given thread to sleeping. + * + * @param sName Name of thread to set sleeping. Must be non-empty + * @param oRunningOn Object that the thread is running on. If this + * is OBJECT_INVALID, the module will be used. + * + * @return Whether the operation was successfull. Failure indicates + * that the thread was dead. + */ +int SleepThread(string sName, object oRunningOn = OBJECT_INVALID); + +/** + * Awakens the given thread. + * + * @param sName Name of thread to set back running. Must be non-empty + * @param oRunningOn Object that the thread is running on. If this + * is OBJECT_INVALID, the module will be used. + * + * @return Whether the operation was successfull. Failure indicates + * that the thread was dead. + */ +int AwakenThread(string sName, object oRunningOn = OBJECT_INVALID); + +/** + * Changes the execution interval of the given thread. + * + * @param sName Name of thread to set back running. Must be non-empty + * @param oRunningOn Object that the thread is running on. If this + * is OBJECT_INVALID, the module will be used. + * @param fNewInterval The amount of time between executions of the + * threadscript that will used from next execution + * onwards. + * + * @return Returns whether the operation was successfull. Failure indicates + * that the thread was dead. + */ +int ChangeExecutionInterval(string sName, float fNewInterval, object oRunningOn = OBJECT_INVALID); + +/* + * Internal function. This is the pseudo-hb function that calls itself. + * + * @param sName name of the thread to run. Used to build local variable names + * @param oRunningOn object that stores the variables, and the one that will + * be passed to ExecuteScript + */ +void RunThread(string sName, object oRunningOn, int iIteration); + + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + + +int SpawnNewThread(string sName, string sScript, float fExecutionInterval = 6.0f, object oToRunOn = OBJECT_INVALID){ + if(oToRunOn == OBJECT_INVALID) + oToRunOn = GetModule(); + + // Check paramaeters for correctness + if(sName == "" || + sScript == "" || + fExecutionInterval <= 0.0f || + !GetIsObjectValid(oToRunOn)) + return FALSE; + + // Make sure there is no thread by this name already running + // if(GetLocalInt(oToRunOn, PREFIX + sName)) + // return FALSE; + // use iterations in place of the above to make it more reliable in case of a PC thread timing out while not logged in + int iIteration = GetLocalInt(oToRunOn, PREFIX + sName + SUFFIX_ITERATION); + + // Set the thread variables + SetLocalInt(oToRunOn, PREFIX + sName, THREAD_STATE_RUNNING); + SetLocalString(oToRunOn, PREFIX + sName + SUFFIX_SCRIPT, sScript); + SetLocalFloat(oToRunOn, PREFIX + sName + SUFFIX_INTERVAL, fExecutionInterval); + + // Start thread execution + DelayCommand(fExecutionInterval, RunThread(sName, oToRunOn, iIteration)); + + // All done successfully + return TRUE; +} + + +int GetThreadState(string sName, object oRunningOn = OBJECT_INVALID){ + if(oRunningOn == OBJECT_INVALID) + oRunningOn = GetModule(); + + // Check paramaeters for correctness + if(sName == "" || + !GetIsObjectValid(oRunningOn)) + return FALSE; + + // Return the local determining if the thread exists + return GetLocalInt(oRunningOn, PREFIX + sName); +} + + +string GetThreadScript(string sName, object oRunningOn = OBJECT_INVALID){ + if(oRunningOn == OBJECT_INVALID) + oRunningOn = GetModule(); + + // Check paramaeters for correctness + if(sName == "" || + !GetIsObjectValid(oRunningOn)) + return ""; + + return GetLocalString(oRunningOn, PREFIX + sName + SUFFIX_SCRIPT); +} + + +float GetThreadExecutionInterval(string sName, object oRunningOn = OBJECT_INVALID){ + if(oRunningOn == OBJECT_INVALID) + oRunningOn = GetModule(); + + // Check paramaeters for correctness + if(sName == "" || + !GetIsObjectValid(oRunningOn)) + return 0.0f; + + return GetLocalFloat(oRunningOn, PREFIX + sName + SUFFIX_INTERVAL); +} + + +string GetCurrentThread(){ + return GetLocalString(GetModule(), PREFIX + CUR_THREAD); +} + + +object GetCurrentThreadObject(){ + return GetIsObjectValid(GetLocalObject(GetModule(), PREFIX + CUR_THREAD)) ? + GetLocalObject(GetModule(), PREFIX + CUR_THREAD) : + OBJECT_INVALID; +} + + +void TerminateThread(string sName, object oRunningOn = OBJECT_INVALID){ + if(oRunningOn == OBJECT_INVALID) + oRunningOn = GetModule(); + + // Check paramaeters for correctness. Just an optimization here, since + // if either of these were not valid, nothing would happen. + if(sName == "" || + !GetIsObjectValid(oRunningOn)) + return; + + // Remove the thread variables + DeleteLocalInt(oRunningOn, PREFIX + sName); + DeleteLocalString(oRunningOn, PREFIX + sName + SUFFIX_SCRIPT); + DeleteLocalFloat(oRunningOn, PREFIX + sName + SUFFIX_INTERVAL); + + // Increase the iteration so that any lingering runthread fail to fire if the thread is restarted + int iExpectedIteration = GetLocalInt(oRunningOn, PREFIX + sName + SUFFIX_ITERATION); + iExpectedIteration++; + SetLocalInt(oRunningOn, PREFIX + sName + SUFFIX_ITERATION, iExpectedIteration); +} + + +void TerminateCurrentThread(){ + TerminateThread(GetLocalString(GetModule(), PREFIX + CUR_THREAD), + GetLocalObject(GetModule(), PREFIX + CUR_THREAD) + ); +} + + +int SleepThread(string sName, object oRunningOn = OBJECT_INVALID){ + if(oRunningOn == OBJECT_INVALID) + oRunningOn = GetModule(); + + // Check paramaeters for correctness + if(sName == "" || + !GetIsObjectValid(oRunningOn)) + return FALSE; + + // Change thread state + SetLocalInt(oRunningOn, PREFIX + sName, THREAD_STATE_SLEEPING); + + return TRUE; +} + + +int AwakenThread(string sName, object oRunningOn = OBJECT_INVALID){ + if(oRunningOn == OBJECT_INVALID) + oRunningOn = GetModule(); + + // Check paramaeters for correctness + if(sName == "" || + !GetIsObjectValid(oRunningOn)) + return FALSE; + + // Change thread state + SetLocalInt(oRunningOn, PREFIX + sName, THREAD_STATE_RUNNING); + + return TRUE; +} + + +int ChangeExecutionInterval(string sName, float fNewInterval, object oRunningOn = OBJECT_INVALID){ + if(oRunningOn == OBJECT_INVALID) + oRunningOn = GetModule(); + + // Check paramaeters for correctness + if(!GetThreadState(sName, oRunningOn) || + fNewInterval <= 0.0f) + return FALSE; + + + SetLocalFloat(oRunningOn, PREFIX + sName + SUFFIX_INTERVAL, fNewInterval); + return TRUE; +} + + +void RunThread(string sName, object oRunningOn, int iIteration){ + // Abort if we're on the wrong iteration, this allows us to + // be liberal about spawning threads in case they've timed + // out while a PC was logged out + int iExpectedIteration = GetLocalInt(oRunningOn, PREFIX + sName + SUFFIX_ITERATION); + if(iIteration != iExpectedIteration) + return; + iExpectedIteration++; + SetLocalInt(oRunningOn, PREFIX + sName + SUFFIX_ITERATION, iExpectedIteration); + + // Abort if the object we're running on has ceased to exist + // or if the thread has been terminated + int nThreadState = GetThreadState(sName, oRunningOn); + if(nThreadState == THREAD_STATE_DEAD) + return; + + // Mark this thread as running + SetLocalString(GetModule(), PREFIX + CUR_THREAD, sName); + SetLocalObject(GetModule(), PREFIX + CUR_THREAD, oRunningOn); + + // Execute the threadscript if the thread is running atm + if(nThreadState == THREAD_STATE_RUNNING){ + string sScript = GetLocalString(oRunningOn, PREFIX + sName + SUFFIX_SCRIPT); + ExecuteScript(sScript, oRunningOn); + } + + // Schedule next execution, unless we've been terminated + if(GetThreadState(sName, oRunningOn) != THREAD_STATE_DEAD){ + DelayCommand(GetLocalFloat(oRunningOn, PREFIX + sName + SUFFIX_INTERVAL), RunThread(sName, oRunningOn, iExpectedIteration)); + } + + // Clean up the module variables + DeleteLocalString(GetModule(), PREFIX + CUR_THREAD); + DeleteLocalObject(GetModule(), PREFIX + CUR_THREAD); +} + + +// Test main +//void main(){} diff --git a/src/include/inc_time.nss b/src/include/inc_time.nss new file mode 100644 index 0000000..a027732 --- /dev/null +++ b/src/include/inc_time.nss @@ -0,0 +1,501 @@ +/** @file + This set of functions controlls time for players. + When recalculate time is called, the clock advances to that of the most behind player. + + This system works best with single party modules. If you have multiple parties and player + you may find that when the server catches up it may disorent players for a time. + + This is disabled unless the switch PRC_PLAYER_TIME is true + + Also in this include is a time struct and various functions for expressing time + As part of this, there is some custom tokens that can be setup + //82001 part of day + //82002 date + //82003 month + //82004 year + //82005 hour + //82006 minutes + //82007 seconds + + @author Primogenitor +*/ + +////////////////////////////////////////////////// +/* Function Prototypes */ +////////////////////////////////////////////////// + + +struct time +{ + int nYear; + int nMonth; + int nDay; + int nHour; + int nMinute; + int nSecond; + int nMillisecond; +}; + +struct time TimeCheck(struct time tTime); +struct time GetLocalTime(object oObject, string sName); +void SetLocalTime(object oObject, string sName, struct time tTime); +void DeleteLocalTime(object oObject, string sName); +struct time GetPersistantLocalTime(object oObject, string sName); +void SetPersistantLocalTime(object oObject, string sName, struct time tTime); +string TimeToString(struct time tTime); +struct time StringToTime(string sIn); + +void SetTimeAndDate(struct time tTime); +int GetIsTimeAhead(struct time tTime1, struct time tTime2); + +void RecalculateTime(int nMaxStep = 6); +void AdvanceTimeForPlayer(object oPC, float fSeconds); + + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + +//#include "prc_inc_switch" +#include "inc_persist_loca" + + +////////////////////////////////////////////////// +/* Function Definitions */ +////////////////////////////////////////////////// + +struct time TimeAdd(struct time tTime1, struct time tTime2) +{ + tTime1 = TimeCheck(tTime1); + tTime2 = TimeCheck(tTime2); + tTime1.nYear += tTime2.nYear; + tTime1.nMonth += tTime2.nMonth; + tTime1.nDay += tTime2.nDay; + tTime1.nHour += tTime2.nHour; + tTime1.nMinute += tTime2.nMinute; + tTime1.nSecond += tTime2.nSecond; + tTime1.nMillisecond += tTime2.nMillisecond; + tTime1 = TimeCheck(tTime1); + return tTime1; +} + +struct time TimeSubtract(struct time tTime1, struct time tTime2) +{ + tTime1 = TimeCheck(tTime1); + tTime2 = TimeCheck(tTime2); + tTime1.nYear -= tTime2.nYear; + tTime1.nMonth -= tTime2.nMonth; + tTime1.nDay -= tTime2.nDay; + tTime1.nHour -= tTime2.nHour; + tTime1.nMinute -= tTime2.nMinute; + tTime1.nSecond -= tTime2.nSecond; + tTime1.nMillisecond -= tTime2.nMillisecond; + tTime1 = TimeCheck(tTime1); + return tTime1; +} + +struct time GetLocalTime(object oObject, string sName) +{ + struct time tTime; + tTime.nYear = GetLocalInt(oObject, sName+".nYear"); + tTime.nMonth = GetLocalInt(oObject, sName+".nMonth"); + tTime.nDay = GetLocalInt(oObject, sName+".nDay"); + tTime.nHour = GetLocalInt(oObject, sName+".nHour"); + tTime.nMinute = GetLocalInt(oObject, sName+".nMinute"); + tTime.nSecond = GetLocalInt(oObject, sName+".nSecond"); + tTime.nMillisecond = GetLocalInt(oObject, sName+".nMillisecond"); + tTime = TimeCheck(tTime); + return tTime; +} + +void SetLocalTime(object oObject, string sName, struct time tTime) +{ + tTime = TimeCheck(tTime); + SetLocalInt(oObject, sName+".nYear", tTime.nYear); + SetLocalInt(oObject, sName+".nMonth", tTime.nMonth); + SetLocalInt(oObject, sName+".nDay", tTime.nDay); + SetLocalInt(oObject, sName+".nHour", tTime.nHour); + SetLocalInt(oObject, sName+".nMinute", tTime.nMinute); + SetLocalInt(oObject, sName+".nSecond", tTime.nSecond); + SetLocalInt(oObject, sName+".nMillisecond", tTime.nMillisecond); +} + +void DeleteLocalTime(object oObject, string sName) +{ + DeleteLocalInt(oObject, sName+".nYear"); + DeleteLocalInt(oObject, sName+".nMonth"); + DeleteLocalInt(oObject, sName+".nDay"); + DeleteLocalInt(oObject, sName+".nHour"); + DeleteLocalInt(oObject, sName+".nMinute"); + DeleteLocalInt(oObject, sName+".nSecond"); + DeleteLocalInt(oObject, sName+".nMillisecond"); +} + +struct time GetPersistantLocalTime(object oObject, string sName) +{ + struct time tTime; + tTime.nYear = GetPersistantLocalInt(oObject, sName+".nYear"); + tTime.nMonth = GetPersistantLocalInt(oObject, sName+".nMonth"); + tTime.nDay = GetPersistantLocalInt(oObject, sName+".nDay"); + tTime.nHour = GetPersistantLocalInt(oObject, sName+".nHour"); + tTime.nMinute = GetPersistantLocalInt(oObject, sName+".nMinute"); + tTime.nSecond = GetPersistantLocalInt(oObject, sName+".nSecond"); + tTime.nMillisecond = GetPersistantLocalInt(oObject, sName+".nMillisecond"); + tTime = TimeCheck(tTime); + return tTime; +} + +void SetPersistantLocalTime(object oObject, string sName, struct time tTime) +{ + tTime = TimeCheck(tTime); + SetPersistantLocalInt(oObject, sName+".nYear", tTime.nYear); + SetPersistantLocalInt(oObject, sName+".nMonth", tTime.nMonth); + SetPersistantLocalInt(oObject, sName+".nDay", tTime.nDay); + SetPersistantLocalInt(oObject, sName+".nHour", tTime.nHour); + SetPersistantLocalInt(oObject, sName+".nMinute", tTime.nMinute); + SetPersistantLocalInt(oObject, sName+".nSecond", tTime.nSecond); + SetPersistantLocalInt(oObject, sName+".nMillisecond", tTime.nMillisecond); +} + +string TimeToString(struct time tTime) +{ + string sReturn; + sReturn += IntToString(tTime.nYear)+"|"; + sReturn += IntToString(tTime.nMonth)+"|"; + sReturn += IntToString(tTime.nDay)+"|"; + sReturn += IntToString(tTime.nHour)+"|"; + sReturn += IntToString(tTime.nMinute)+"|"; + sReturn += IntToString(tTime.nSecond)+"|"; + sReturn += IntToString(tTime.nMillisecond); + return sReturn; +} + +struct time StringToTime(string sIn) +{ + struct time tTime; + int nPos; + string sID; + nPos = FindSubString(sIn, "|"); + tTime.nYear = StringToInt(GetStringLeft(sIn, nPos)); + sIn = GetStringRight(sIn, GetStringLength(sIn)-nPos-1); + + nPos = FindSubString(sIn, "|"); + tTime.nMonth = StringToInt(GetStringLeft(sIn, nPos)); + sIn = GetStringRight(sIn, GetStringLength(sIn)-nPos-1); + + nPos = FindSubString(sIn, "|"); + tTime.nDay = StringToInt(GetStringLeft(sIn, nPos)); + sIn = GetStringRight(sIn, GetStringLength(sIn)-nPos-1); + + nPos = FindSubString(sIn, "|"); + tTime.nHour = StringToInt(GetStringLeft(sIn, nPos)); + sIn = GetStringRight(sIn, GetStringLength(sIn)-nPos-1); + + nPos = FindSubString(sIn, "|"); + tTime.nMinute = StringToInt(GetStringLeft(sIn, nPos)); + sIn = GetStringRight(sIn, GetStringLength(sIn)-nPos-1); + + nPos = FindSubString(sIn, "|"); + tTime.nSecond = StringToInt(GetStringLeft(sIn, nPos)); + sIn = GetStringRight(sIn, GetStringLength(sIn)-nPos-1); + + nPos = FindSubString(sIn, "|"); + tTime.nMillisecond = StringToInt(GetStringLeft(sIn, nPos)); + sIn = GetStringRight(sIn, GetStringLength(sIn)-nPos-1); + + return tTime; +} + +struct time TimeCheck(struct time tTime) +{ + while(tTime.nMillisecond > 1000) + { + tTime.nSecond += 1; + tTime.nMillisecond -= 1000; + } + while(tTime.nSecond > 60) + { + tTime.nMinute += 1; + tTime.nSecond -= 60; + } + while(tTime.nMinute > FloatToInt(HoursToSeconds(1))/60) + { + tTime.nHour += 1; + tTime.nMinute -= FloatToInt(HoursToSeconds(1))/60; + } + while(tTime.nHour > 24) + { + tTime.nDay += 1; + tTime.nHour -= 24; + } + while(tTime.nDay > 28) + { + tTime.nMonth += 1; + tTime.nDay -= 28; + } + while(tTime.nMonth > 12) + { + tTime.nYear += 1; + tTime.nMonth -= 12; + } + //decreases + while(tTime.nMillisecond < 1) + { + tTime.nSecond -= 1; + tTime.nMillisecond += 1000; + } + while(tTime.nSecond < 1) + { + tTime.nMinute -= 1; + tTime.nSecond += 60; + } + while(tTime.nMinute < 1) + { + tTime.nHour -= 1; + tTime.nMinute += FloatToInt(HoursToSeconds(1))/60; + } + while(tTime.nHour < 1) + { + tTime.nDay -= 1; + tTime.nHour += 24; + } + while(tTime.nDay < 1) + { + tTime.nMonth -= 1; + tTime.nDay += 28; + } + while(tTime.nMonth < 1) + { + tTime.nYear -= 1; + tTime.nMonth += 12; + } + return tTime; +} + +struct time GetTimeAndDate() +{ + struct time tTime; + tTime.nYear = GetCalendarYear(); + tTime.nMonth = GetCalendarMonth(); + tTime.nDay = GetCalendarDay(); + tTime.nHour = GetTimeHour(); + tTime.nMinute = GetTimeMinute(); + tTime.nSecond = GetTimeSecond(); + tTime.nMillisecond = GetTimeMillisecond(); + tTime = TimeCheck(tTime); + return tTime; +} + +void SetTimeAndDate(struct time tTime) +{ + tTime = TimeCheck(tTime); + SetCalendar(tTime.nYear, tTime.nMonth, tTime.nDay); + SetTime(tTime.nHour, tTime.nMinute, tTime.nSecond, tTime.nMillisecond); +} + +int GetIsTimeAhead(struct time tTime1, struct time tTime2) +{ + if(tTime1.nYear > tTime2.nYear) + return TRUE; + else if(tTime1.nYear < tTime2.nYear) + return FALSE; + //equal + if(tTime1.nMonth > tTime2.nMonth) + return TRUE; + else if(tTime1.nMonth < tTime2.nMonth) + return FALSE; + //equal + if(tTime1.nDay > tTime2.nDay) + return TRUE; + else if(tTime1.nDay < tTime2.nDay) + return FALSE; + //equal + if(tTime1.nHour > tTime2.nHour) + return TRUE; + else if(tTime1.nHour < tTime2.nHour) + return FALSE; + //equal + if(tTime1.nMinute > tTime2.nMinute) + return TRUE; + else if(tTime1.nMinute < tTime2.nMinute) + return FALSE; + //equal + if(tTime1.nSecond > tTime2.nSecond) + return TRUE; + else if(tTime1.nSecond < tTime2.nSecond) + return FALSE; + //equal + if(tTime1.nMillisecond > tTime2.nMillisecond) + return TRUE; + else if(tTime1.nMillisecond < tTime2.nMillisecond) + return FALSE; + //must be exactly the same + return FALSE; +} + +void RecalculateTime(int nMaxStep = 6) +{ + if(!GetPRCSwitch(PRC_PLAYER_TIME)) + return; + //get the earliest time ahead of all PCs + object oPC = GetFirstPC(); + struct time tTimeAhead = GetLocalTime(oPC, "TimeAhead"); + while(GetIsObjectValid(oPC)) + { + struct time tTest = GetLocalTime(oPC, "TimeAhead"); + if(!GetIsTimeAhead(tTimeAhead, tTest)) + tTimeAhead = tTest; + oPC = GetNextPC(); + } + //if its zero, abort + struct time tNULL; + if(tNULL == tTimeAhead) + return; + //if its not zero, recalulate it till it is + DelayCommand(0.01, RecalculateTime());//do it again until caught up + //create the steps to use + struct time tStep; + tStep.nSecond = nMaxStep; + //make sure you dont skip more than a step at a time + if(GetIsTimeAhead(tTimeAhead, tStep)) + tTimeAhead = tStep; + //set the new real time + struct time tNewTime = GetTimeAndDate(); + tNewTime = TimeAdd(tNewTime, tTimeAhead); + SetTimeAndDate(tNewTime); + + //update the stored values + oPC = GetFirstPC(); + while(GetIsObjectValid(oPC)) + { + struct time tTest = GetLocalTime(oPC, "TimeAhead"); + tTest = TimeSubtract(tTest, tTimeAhead); + SetLocalTime(oPC, "TimeAhead", tTest); + oPC = GetNextPC(); + } +} + + +void AdvanceTimeForPlayer(object oPC, float fSeconds) +{ + struct time tTime = GetLocalTime(oPC, "TimeAhead"); + tTime.nSecond += FloatToInt(fSeconds); + SetLocalTime(oPC, "TimeAhead", tTime); + DelayCommand(0.01, RecalculateTime()); +} + +void AssembleTokens(struct time tTime) +{ + tTime = TimeCheck(tTime); + //setup time tokens + //82001 part of day + //82002 date + //82003 month + //82004 year + //82005 hour + //82006 minutes + //82007 seconds + //82008 24 hour clock + //82009 timer + + //this assumes default time settings + //Dawn, 06:00 + //Dusk, 18:00 + if(tTime.nHour == 6) + SetCustomToken(82001, "dawn"); + else if(tTime.nHour == 18) + SetCustomToken(82001, "dusk"); + else if(tTime.nHour >= 19 || tTime.nHour <= 5) + SetCustomToken(82001, "night"); + else if(tTime.nHour >= 7 && tTime.nHour < 13) + SetCustomToken(82001, "morning"); + else if(tTime.nHour >= 13 && tTime.nHour < 18) + SetCustomToken(82001, "afternoon"); + + string sDay = IntToString(tTime.nDay); + if(tTime.nDay == 1 + //|| tTime.nDay == 11 //this is 11th + || tTime.nDay == 21) + sDay += "st"; + else if(tTime.nDay == 2 + //|| tTime.nDay == 12 //this is 12th + || tTime.nDay == 22) + sDay += "nd"; + else if(tTime.nDay == 3 + //|| tTime.nDay == 13 //this is 13th + || tTime.nDay == 23) + sDay += "rd"; + else + sDay += "th"; + SetCustomToken(82002, sDay); + + string sMonth; + switch(tTime.nMonth) + { + case 1: sMonth = "January"; break; + case 2: sMonth = "Febuary"; break; + case 3: sMonth = "March"; break; + case 4: sMonth = "April"; break; + case 5: sMonth = "May"; break; + case 6: sMonth = "June"; break; + case 7: sMonth = "July"; break; + case 8: sMonth = "August"; break; + case 9: sMonth = "September"; break; + case 10: sMonth = "October"; break; + case 11: sMonth = "November"; break; + case 12: sMonth = "December"; break; + } + SetCustomToken(82003, sMonth); + + SetCustomToken(82004, IntToString(tTime.nYear)); + SetCustomToken(82005, IntToString(tTime.nHour)); + SetCustomToken(82006, IntToString(tTime.nMinute)); + SetCustomToken(82007, IntToString(tTime.nSecond)); + SetCustomToken(82008, IntToString(tTime.nHour)+":"+IntToString(tTime.nMinute)); + + string sTimer; + if(!tTime.nYear) + { + if(tTime.nYear > 1) + sTimer += IntToString(tTime.nYear)+" years"; + else + sTimer += IntToString(tTime.nYear)+" year"; + } + if(!tTime.nMonth) + { + if(sTimer != "") + sTimer += ", "; + if(tTime.nMonth > 1) + sTimer += IntToString(tTime.nMonth)+" months"; + else + sTimer += IntToString(tTime.nMonth)+" month"; + } + if(!tTime.nDay) + { + if(sTimer != "") + sTimer += ", "; + if(tTime.nDay > 1) + sTimer += IntToString(tTime.nDay)+" days"; + else + sTimer += IntToString(tTime.nMonth)+" day"; + } + if(!tTime.nHour) + { + if(sTimer != "") + sTimer += ", "; + if(tTime.nHour > 1) + sTimer += IntToString(tTime.nHour)+" hours"; + else + sTimer += IntToString(tTime.nMonth)+" hour"; + } + if(!tTime.nMinute) + { + if(sTimer != "") + sTimer += ", "; + if(tTime.nMinute > 1) + sTimer += IntToString(tTime.nMinute)+" minutes"; + else + sTimer += IntToString(tTime.nMonth)+" minute"; + } + SetCustomToken(82009, sTimer); +} diff --git a/src/include/inc_timestop.nss b/src/include/inc_timestop.nss new file mode 100644 index 0000000..bd624e9 --- /dev/null +++ b/src/include/inc_timestop.nss @@ -0,0 +1,83 @@ + +void DoTimestopEquip(object oPC, object oItem); +void DoTimestopUnEquip(object oPC, object oItem); +void ApplyTSToObject(object oTarget); +void RemoveTSFromObject(object oTarget); + +#include "prc_x2_itemprop" +#include "prc_inc_switch" +#include "inc_prc_npc" +//#include "inc_utility" + +void RemoveTimestopEquip() +{ + int i; + for (i=0;i<18;i++) + { + IPRemoveMatchingItemProperties(GetItemInSlot(i), ITEM_PROPERTY_NO_DAMAGE, DURATION_TYPE_TEMPORARY); + } +} + +void DoTimestopEquip(object oPC, object oItem) +{ + if(GetPRCSwitch(PRC_TIMESTOP_NO_HOSTILE)) + { + if(GetHasSpellEffect(SPELL_TIME_STOP, oPC) + || GetHasSpellEffect(4032, oPC) + || GetHasSpellEffect(14236, oPC)) + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), oItem, 9999.0); + /*else if(GetHasSpellEffect(POWER_ID, oPC)) + { + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), oItem, 9999.0); + //stuff for AC negation + }*/ + } +} + +void DoTimestopUnEquip(object oPC, object oItem) +{ + if(GetPRCSwitch(PRC_TIMESTOP_NO_HOSTILE)) + { + if(GetHasSpellEffect(SPELL_TIME_STOP, oPC) + || GetHasSpellEffect(4032, oPC) + || GetHasSpellEffect(14236, oPC)) + IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_NO_DAMAGE, DURATION_TYPE_TEMPORARY); + /*else if(GetHasSpellEffect(POWER_ID, oPC)) + { + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), oItem, 9999.0); + //stuff for AC negation removal + }*/ + } +} + +void ApplyTSToObject(object oTarget) +{ + effect eTS = EffectVisualEffect(VFX_DUR_FREEZE_ANIMATION); + effect eCSP = EffectCutsceneParalyze(); + effect eLink = EffectLinkEffects(eTS, eCSP); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget); + if(GetIsPC(oTarget) && GetPRCSwitch(PRC_TIMESTOP_BLANK_PC)) + BlackScreen(oTarget); + AssignCommand(oTarget, ClearAllActions(FALSE)); + SetCommandable(FALSE, oTarget); +} + +void RemoveTSFromObject(object oTarget) +{ + effect eTest = GetFirstEffect(oTarget); + while(GetIsEffectValid(eTest)) + { + int nSpellId = GetEffectSpellId(eTest); + if(nSpellId == SPELL_TIME_STOP + || nSpellId == 4032 //epic TS + || nSpellId == 14205 // POWER_TEMPORALACCELERATION + || nSpellId == 17366 // MOVE_DM_MOMENT_ALACRITY + || nSpellId == 17511 // MOVE_WR_WHITE_RAVEN_TACTICS + ) + RemoveEffect(oTarget, eTest); + eTest = GetNextEffect(oTarget); + } + if(GetIsPC(oTarget)) + StopFade(oTarget); + SetCommandable(TRUE, oTarget); +} diff --git a/src/include/inc_uniqueid.nss b/src/include/inc_uniqueid.nss new file mode 100644 index 0000000..b5cbb75 --- /dev/null +++ b/src/include/inc_uniqueid.nss @@ -0,0 +1,100 @@ +//:://///////////////////////////////////////////// +//:: Unique identifier generation include +//:: inc_uniqueid +//:://///////////////////////////////////////////// +/** @file inc_uniqueid + Contains functions for generating unique IDs + within the scope of one module instance. + + An ID is a string of format: + PRC_UID_X + where X is the concatenation of the values of + one or more running integer counters. + + The uniqueness is quaranteed by using a + set of local integers stored on the module + object as counters. + At first, the set contains a single integer, + initialised to 0. Each UID generation + increments it's value by 1. Once the value + reaches the maximum an NWN integer type may + have (0xFFFFFFFF), a new integer is added + to the set, again initialised to 0. + + + NOTE: The generated strings are only unique + withing a single module instance. Reloading + a module (new game / server reset) will + reset the counter due to the counter array + being lost. + As such, UIDs should not be stored persistently. + + @author Ornedan + @date Created - 2006.06.30 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const string PRC_UID_PREFIX = "PRC_UID_"; +const string PRC_UID_ARRAY = "PRC_UID_Counters"; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Generates an UID, as described in the header comments. + * + * @return A string unique within a single module instance. + */ +string GetUniqueID(); + + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +//#include "inc_utility" +#include "prc_inc_array" + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +string GetUniqueID() +{ + object oModule = GetModule(); + string sReturn = PRC_UID_PREFIX; + // Init if this is the first call + if(!array_exists(oModule, PRC_UID_ARRAY)) + { + array_create(oModule, PRC_UID_ARRAY); + array_set_int(oModule, PRC_UID_ARRAY, 0, 0); + } + + // Loop over all the integers and concatenate them onto the UID being generated + int i, nMax = array_get_size(oModule, PRC_UID_ARRAY); + for(i=0; i < nMax; i++) + sReturn += IntToString(array_get_int(oModule, PRC_UID_ARRAY, i)); + + // Increment the counters + if((i = array_get_int(oModule, PRC_UID_ARRAY, nMax - 1)) < 0xFFFFFFFF) + // We're below maximum integer size, just increment the stored value + array_set_int(oModule, PRC_UID_ARRAY, nMax - 1, i + 1); + else + // We need to add a new integer to the set + array_set_int(oModule, PRC_UID_ARRAY, nMax, 0); + + // Return the generated value + return sReturn; +} + +// Test main +//void main(){} diff --git a/src/include/inc_utility.nss b/src/include/inc_utility.nss new file mode 100644 index 0000000..9f3a9e2 --- /dev/null +++ b/src/include/inc_utility.nss @@ -0,0 +1,1741 @@ +//::////////////////////////////////////////////// +//:: General utility functions +//:: inc_utility +//::////////////////////////////////////////////// +/** @file + An include file for various small and generally + useful functions. +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +/**********************\ +* Constant Definitions * +\**********************/ + +const int ARMOR_TYPE_CLOTH = 0; +const int ARMOR_TYPE_LIGHT = 1; +const int ARMOR_TYPE_MEDIUM = 2; +const int ARMOR_TYPE_HEAVY = 3; + +const int ACTION_USE_ITEM_TMI_LIMIT = 1500; + +/*********************\ +* Function Prototypes * +\*********************/ + +/** + * Returns the greater of the two values passed to it. + * + * @param a An integer + * @param b Another integer + * @return a iff a is greater than b, otherwise b + */ +int PRCMax(int a, int b); + +/** + * Returns the lesser of the two values passed to it. + * + * @param a An integer + * @param b Another integer + * @return a iff a is lesser than b, otherwise b + */ +int PRCMin(int a, int b); + +/** + * Returns the greater of the two values passed to it. + * + * @param a A float + * @param b Another float + * @return a iff a is greater than b, otherwise b + */ +float PRCFmax(float a, float b); + +/** + * Returns the lesser of the two values passed to it. + * + * @param a A float + * @param b Another float + * @return a iff a is lesser than b, otherwise b + */ +float PRCFmin(float a, float b); + +/** + * Takes a string in the standard hex number format (0x####) and converts it + * into an integer type value. Only the last 8 characters are parsed in order + * to avoid overflows. + * If the string is not parseable (empty or contains characters other than + * those used in hex notation), the function errors and returns 0. + * + * Full credit to Axe Murderer + * + * @param sHex The string to convert + * @return Integer value of sHex or 0 on error + */ +int HexToInt(string sHex); + +/* NOTE: the following 2 functions don't actually do what they say and + use real time not game time. Possibly because by default, 1 in-game minute + is 2 seconds. As real-time minutes to sec function exists (TurnsToSeconds()), + this is possibly redundant and should be replaced. + + // Use HoursToSeconds to figure out how long a scaled minute + // is and then calculate the number of real seconds based + // on that. + float scaledMinute = HoursToSeconds(1) / 60.0; + float totalMinutes = minutes * scaledMinute; + + // Return our scaled duration, but before doing so check to make sure + // that it is at least as long as a round / level (time scale is in + // the module properties, it's possible a minute / level could last less + // time than a round / level !, so make sure they get at least as much + // time as a round / level. + float totalRounds = RoundsToSeconds(minutes); + float result = totalMinutes > totalRounds ? totalMinutes : totalRounds; + return result; +*/ + +/** + * Takes an int representing the number of scaled 1 minute intervals wanted + * and converts to seconds with 1 turn = 1 minute + * @param minutes The number of 1 min intervals (typically caster level) + * @return Float of duration in seconds + */ +float MinutesToSeconds(int minutes); + +/** + * Takes an int representing the number of scaled 10 minute intervals wanted + * and converts to seconds with 1 turn = 1 minute + * @param tenMinutes The number of 10 min intervals (typically caster level) + * @return Float of duration in seconds + */ +float TenMinutesToSeconds(int tenMinutes); + +/** + * Converts metres to feet. Moved from prc_inc_util. + * @param fMeters distance in metres + * @return float of distance in feet + */ +float MetersToFeet(float fMeters); + +/** + * Checks whether an alignment matches given restrictions. + * For example + * GetIsValidAlignment (ALIGNMENT_CHAOTIC, ALIGNMENT_GOOD, 21, 3, 0 ); + * should return FALSE. + * + * Credit to Joe Travel + * + * @param iLawChaos ALIGNMENT_* constant + * @param iGoodEvil ALIGNMENT_* constant + * @param iAlignRestrict Similar format as the restrictions in classes.2da + * @param iAlignRstrctType Similar format as the restrictions in classes.2da + * @param iInvertRestriction Similar format as the restrictions in classes.2da + * + * @return TRUE if the alignment does not break the restrictions, + * FALSE otherwise. + */ +int GetIsValidAlignment( int iLawChaos, int iGoodEvil, int iAlignRestrict, int iAlignRstrctType, int iInvertRestriction ); + +/** + * Gets a random location within an circular area around a base location. + * + * by Mixcoatl + * download from + * http://nwvault.ign.com/Files/scripts/data/1065075424375.shtml + * + * @param lBase The center of the circle. + * @param fDistance The radius of the circle. ie, the maximum distance the + * new location may be from lBase. + * + * @return A location in random direction from lBase between + * 0 and fDistance meters away. + */ +location GetRandomCircleLocation(location lBase, float fDistance=1.0); + +/** + * Gets a location relative to the first location + * Includes rotating additional location based on facing of the first + * + * @param lMaster The starting location + * @param lAdd The location to add + * + * @return A location in random direction from lBase between + * 0 and fDistance meters away. + */ +location AddLocationToLocation(location lMaster, location lAdd); + +/** + * Genji Include Color gen_inc_color + * first: 1-4-03 + * simple function to use the name of a item holding escape sequences that, though they will not compile, + * they can be interpreted at run time and produce rbg scales between 32 and 255 in increments. + * -- allows 3375 colors to be made. + * for example SendMessageToPC(pc,PRCGetRGB(15,15,1)+ "Help, I'm on fire!") will produce yellow text. + * more examples: + * + * PRCGetRGB() := WHITE // no parameters, default is white + * PRCGetRGB(15,15,1):= YELLOW + * PRCGetRGB(15,5,1) := ORANGE + * PRCGetRGB(15,1,1) := RED + * PRCGetRGB(7,7,15) := BLUE + * PRCGetRGB(1,15,1) := NEON GREEN + * PRCGetRGB(1,11,1) := GREEN + * PRCGetRGB(9,6,1) := BROWN + * PRCGetRGB(11,9,11):= LIGHT PURPLE + * PRCGetRGB(12,10,7):= TAN + * PRCGetRGB(8,1,8) := PURPLE + * PRCGetRGB(13,9,13):= PLUM + * PRCGetRGB(1,7,7) := TEAL + * PRCGetRGB(1,15,15):= CYAN + * PRCGetRGB(1,1,15) := BRIGHT BLUE + * + * issues? contact genji@thegenji.com + * special thanks to ADAL-Miko and Rich Dersheimer in the bio forums. + */ +string PRCGetRGB(int red = 15,int green = 15,int blue = 15); + +/** + * Checks if any PCs (or optionally their NPC party members) are in the + * given area. + * + * @param oArea The area to check + * @param bNPCPartyMembers Whether to check the PC's party members, too + */ +int GetIsAPCInArea(object oArea, int bNPCPartyMembers = TRUE); + +/** + * Converts the given integer to string as IntToString and then + * pads the left side until it's nLength characters long. If sign + * is specified, the first character is reserved for it, and it is + * always present. + * Strings longer than the given length are trunctated to their nLength + * right characters. + * + * credit goes to Pherves, who posted the original in homebrew scripts forum sticky + * + * @param nX The integer to convert + * @param nLength The length of the resulting string + * @param nSigned If this is TRUE, a sign character is inserted as the leftmost + * character. Doing so leaves one less character for use as a digit. + * + * @return The string that results from conversion as specified above. + */ +string IntToPaddedString(int nX, int nLength = 4, int nSigned = FALSE); + +/** + * Looks through the given string, replacing all instances of sToReplace with + * sReplacement. If such a replacement creates another instance of sToReplace, + * it, too is replaced. Be aware that you can cause an infinite loop with + * properly constructed parameters due to this. + * + * @param sString The string to modify + * @param sToReplace The substring to replace + * @param sReplacement The replacement string + * @return sString with all instances of sToReplace replaced + * with sReplacement + */ +string ReplaceChars(string sString, string sToReplace, string sReplacement); + +/** + * A wrapper for DestroyObject(). Attempts to bypass any + * conditions that might prevent destroying the object. + * + * WARNING: This will destroy any object that can at all be + * destroyed by DestroyObject(). In other words, you + * can clobber critical bits with careless use. + * Only the module, PCs and areas are unaffected. Using this + * function on any of those will cause an infinite + * DelayCommand loop that will eat up resources, though. + * + * + * @param oObject The object to destroy + */ +void MyDestroyObject(object oObject); + +/** + * Checks to see if oPC has an item created by sResRef in his/her/it's inventory + * + * @param oPC The creature whose inventory to search. + * @param sResRef The resref to look for in oPC's items. + * @return TRUE if any items matching sResRef were found, FALSE otherwise. + */ +int GetHasItem(object oPC, string sResRef); + +/** + * Calculates the base AC of the given armor. + * + * @param oArmor An item of type BASE_ITEM_ARMOR + * @return The base AC of oArmor, or -1 on error + */ +int GetItemACBase(object oArmor); + +/** + * Gets the type of the given armor based on it's base AC. + * + * @param oArmor An item of type BASE_ITEM_ARMOR + * @return ARMOR_TYPE_* constant of the armor, or -1 on error + */ +int GetArmorType(object oArmor); + +/** + * Calculates the number of steps along both moral and ethical axes that + * the two target's alignments' differ. + * + * @param oSource A creature + * @param oTarget Another creature + * @return The number of steps the target's alignment differs + */ +int CompareAlignment(object oSource, object oTarget); + +/** + * Repeatedly assigns an equipping action to equip the given item until + * it is equipped. Used for getting around the fact that a player can + * cancel the action. They will give up eventually :D + * + * WARNING: Note that forcing an equip into offhand when mainhand is empty + * will result in an infinite loop. So will attempting to equip an item + * into a slot it can't be equipped in. + * + * @param oPC The creature to do the equipping. + * @param oItem The item to equip. + * @param nSlot INVENTORY_SLOT_* constant of the slot to equip into. + * @param nThCall Internal parameter, leave as default. This determines + * how many times ForceEquip has called itself. + */ +void ForceEquip(object oPC, object oItem, int nSlot, int nThCall = 0); + +/** + * Repeatedly attempts to unequip the given item until it is no longer + * in the slot given. Used for getting around the fact that a player can + * cancel the action. They will give up eventually :D + * + * @param oPC The creature to do the unequipping. + * @param oItem The item to unequip. + * @param nSlot INVENTORY_SLOT_* constant of the slot containing oItem. + * @param nThCall Internal parameter, leave as default. This determines + * how many times ForceUnequip has called itself. + */ +void ForceUnequip(object oPC, object oItem, int nSlot, int nThCall = 0); + +/** + * Checks either of the given creature's hand slots are empty. + * + * @param oCreature Creature whose hand slots to check + * @return TRUE if either hand slot is empty, FALSE otherwise + */ +int GetHasFreeHand(object oCreature); + +/** + * Determines whether the creature is encumbered by it's carried items. + * + * @param oCreature Creature whose encumberment to determine + * @return TRUE if the creature is encumbered, FALSE otherwise + */ +int GetIsEncumbered(object oCreature); + +/** + * Try to identify all unidentified objects within the given creature's inventory + * using it's skill ranks in lore. + * + * @param oPC The creature whose items to identify + */ +void TryToIDItems(object oPC = OBJECT_SELF); + +/** + * Converts a boolean to a string. + * + * @param bool The boolean value to convert. 0 is considered false + * and everything else is true. + * @param bTLK Whether to use english strings or get the values from + * the TLK. If TRUE, the return values are retrieved + * from TLK indices 8141 and 8142. If FALSE, return values + * are either "True" or "False". + * Defaults to FALSE. + * @see DebugBool2String() in inc_debug for debug print purposes + */ +string BooleanToString(int bool, int bTLK = FALSE); + +/** + * Returns a copy of the string, with leading and trailing whitespace omitted. + * + * @param s The string to trim. + */ +string PRCTrimString(string s); + +/** + * Compares the given two strings lexicographically. + * Returns -1 if the first string precedes the second. + * Returns 0 if the strings are equal + * Returns 1 if the first string follows the second. + * + * Examples: + * + * StringCompare("a", "a") = 0 + * StringCompare("a", "b") = -1 + * StringCompare("b", "a") = 1 + * StringCompare("a", "1") = 1 + * StringCompare("A", "a") = -1 + * StringCompare("Aa", "A") = 1 + */ +int StringCompare(string s1, string s2); + +/** + * Finds first occurrence of string sFind + * in string sString and replaces it with + * sReplace and returns the result. + * If sFind is not found, sString is returned. + * + * Examples: + * + * StringCompare("aabb", "a", "y") = "yabb" + * StringCompare("aabb", "x", "y") = "aabb" + */ +string ReplaceString(string sString, string sFind, string sReplace); + +/** + * Determines the angle between two given locations. Angle returned + * is relative to the first location. + * + * @param lFrom The base location + * @param lTo The other location + * @return The angle between the two locations, relative to lFrom + */ +float GetRelativeAngleBetweenLocations(location lFrom, location lTo); + +/** + * Returns the same string you would get if you examined the item in-game + * Uses 2da & tlk lookups and should work for custom itemproperties too + * + * @param ipTest Itemproperty you want to get the string of + * + * @return A string of the itemproperty, including spaces and bracket where appropriate + */ +string ItemPropertyToString(itemproperty ipTest); + + +/** + * Tests if a creature can burn the amount of XP specified without loosing a level + * + * @param oPC Creature to test, can be an NPC or a PC + * @param nCost Amount of XP to chck for + * + * @return TRUE/FALSE + */ +int GetHasXPToSpend(object oPC, int nCost); + + +/** + * Removes an amount of XP via SetXP() + * + * @param oPC Creature to remove XP from, can be an NPC or a PC + * @param nCost Amount of XP to remove for + */ +void SpendXP(object oPC, int nCost); + + +/** + * Tests if a creature can burn the amount of Gold specified + * + * @param oPC Creature to test, can be an NPC or a PC + * @param nCost Amount of Gold to chck for + * + * @return TRUE/FALSE + */ +int GetHasGPToSpend(object oPC, int nCost); + + +/** + * Removes an amount of Gold + * + * @param oPC Creature to remove Gold from, can be an NPC or a PC + * @param nCost Amount of Gold to remove for + */ +void SpendGP(object oPC, int nCost); + +/* + * Convinence function for testing off-hand weapons + */ +int isNotShield(object oItem); + +/** + * Makes self use a specific itemproperty on an object + * + * Note: This uses a loop so vulnerable to TMI errors + * Note: This is not 100% reliable, for example if uses/day finished + * Note: Uses talent system. Unsure what would happen if the creature + * can cast the same spell from some other means or if they + * had multiple items with the same spell on them + * + * @param oItem Item to use + * @param ipIP Itemproperty to use + * @param oTarget Target object + */ +void ActionUseItemPropertyAtObject(object oItem, itemproperty ipIP, object oTarget = OBJECT_SELF); + +/** + * Makes self use a specific itemproperty at a location + * + * Note: This uses a loop so vulnerable to TMI errors + * Note: This is not 100% reliable, for example if uses/day finished + * Note: Uses talent system. Unsure what would happen if the creature + * can cast the same spell from some other means or if they + * had multiple items with the same spell on them + * + * @param oItem Item to use + * @param ipIP Itemproperty to use + * @param lTarget Target location + */ +void ActionUseItemPropertyAtLocation(object oItem, itemproperty ipIP, location lTarget); + +// Checks the target for a specific EFFECT_TYPE constant value +int PRCGetHasEffect(int nEffectType, object oTarget = OBJECT_SELF); + +//Does a check to determine if the NPC has an attempted +//spell or attack target +int PRCGetIsFighting(object oFighting = OBJECT_SELF); + +// Returns TRUE if the player is polymorphed. +int GetIsPolyMorphedOrShifted(object oCreature); + +/** + * Gets a random delay based on the parameters passed in. + * + * @author Bioware (GetRandomDelay() from nw_i0_spells) + * + * @param fMinimumTime lower limit for the random time + * @param fMaximumTime upper limit for the random time + * + * @return random float between the limits given + */ +float PRCGetRandomDelay(float fMinimumTime = 0.4, float fMaximumTime = 1.1); + +//this is here rather than inc_utility because it uses creature size and screws compiling if its elsewhere +/** + * Returns the skill rank adjusted according to the given parameters. + * Using the default values, the result is the same as using GetSkillRank(). + * + * @param oObject subject to get skill of + * @param nSkill SKILL_* constant + * @param bSynergy include any applicable synergy bonus + * @param bSize include any applicable size bonus + * @param bAbilityMod include relevant ability modification (including effects on that ability) + * @param bEffect include skill changing effects and itemproperties + * @param bArmor include armor mod if applicable (excluding shield) + * @param bShield include shield mod if applicable (excluding armor) + * @param bFeat include any applicable feats, including racial ones + * + * @return subject's rank in the given skill, modified according to + * the above parameters. If the skill is trained-only and the + * subject does not have any ranks in it, returns 0. + */ +int GetSkill(object oObject, int nSkill, int bSynergy = FALSE, int bSize = FALSE, + int bAbilityMod = TRUE, int bEffect = TRUE, int bArmor = TRUE, + int bShield = TRUE, int bFeat = TRUE); + +/** + * Repeatedly attempts to put down the given item until it is no longer + * in the slot given. Used for getting around the fact that a player can + * cancel the action. They will give up eventually :D + * + * @param oPC The creature to do the putting down. + * @param oItem The item to put down. + * @param nSlot INVENTORY_SLOT_* constant of the slot containing oItem. + * @param nThCall Internal parameter, leave as default. This determines + * how many times ForcePutDown has called itself. + */ +void ForcePutDown(object oPC, object oItem, int nSlot, int nThCall = 0); + +/////////////////////////////////////// +/* Constant declarations */ +/////////////////////////////////////// + +const int ERROR_CODE_5_ONCE_MORE = -1; +const int ERROR_CODE_5_ONCE_MORE2 = -1; +const int ERROR_CODE_5_ONCE_MORE3 = -1; +const int ERROR_CODE_5_ONCE_MORE4 = -1; +const int ERROR_CODE_5_ONCE_MORE5 = -1; + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + +// The following files have no dependecies, or self-contained dependencies that do not require looping via this file +// inc_debug is available via inc_2dacache +//#include "inc_debug" + +#include "prc_inc_nwscript" +#include "prc_class_const" +#include "inc_target_list" +#include "inc_logmessage" +#include "inc_threads" +#include "prc_inc_actions" +#include "inc_time" +#include "inc_draw_prc" +#include "inc_eventhook" +#include "inc_metalocation" +#include "inc_array_sort" // Depends on prc_inc_array and inc_debug +#include "inc_uniqueid" // Depends on prc_inc_array +#include "inc_set" // Depends on prc_inc_array, inc_heap + + +/**********************\ +* Function Definitions * +\**********************/ + +int PRCMax(int a, int b) {return (a > b ? a : b);} + +int PRCMin(int a, int b) {return (a < b ? a : b);} + +float PRCFmax(float a, float b) {return (a > b ? a : b);} + +float PRCFmin(float a, float b) {return (a < b ? a : b);} + +int HexToInt_old(string sHex) +{ + if(sHex == "") return 0; // Some quick optimisation for empty strings + sHex = GetStringRight(GetStringLowerCase(sHex), 8); // Truncate to last 8 characters and convert to lowercase + if(GetStringLeft(sHex, 2) == "0x") // Cut out '0x' if it's present + sHex = GetStringRight(sHex, GetStringLength(sHex) - 2); + string sConvert = "0123456789abcdef"; // The string to index using the characters in sHex + int nReturn, nHalfByte; + while(sHex != "") + { + nHalfByte = FindSubString(sConvert, GetStringLeft(sHex, 1)); // Get the value of the next hexadecimal character + if(nHalfByte == -1) return 0; // Invalid character in the string! + nReturn = nReturn << 4; // Rightshift by 4 bits + nReturn |= nHalfByte; // OR in the next bits + sHex = GetStringRight(sHex, GetStringLength(sHex) - 1); // Remove the parsed character from the string + } + + return nReturn; +} + +const string sHexDigits = "0123456789abcdef"; + +int HexToInt(string sHex) +{ + if(sHex == "") return 0; + int nVal = 0; + string sDig = GetStringLowerCase(sHex); + int nLen = GetStringLength(sDig); + int nIdx = 2; + while(nIdx < nLen) + { + nVal = (nVal << 4) + FindSubString(sHexDigits,GetSubString(sDig,nIdx++,1)); + } + return nVal; +} + +float TenMinutesToSeconds(int tenMinutes) +{ + return TurnsToSeconds(tenMinutes) * 10; +} + +float MinutesToSeconds(int minutes) +{ + return TurnsToSeconds(minutes); +} + +float MetersToFeet(float fMeters) +{ + fMeters *= 3.281; + return fMeters; +} + +int GetIsValidAlignment ( int iLawChaos, int iGoodEvil,int iAlignRestrict, int iAlignRstrctType, int iInvertRestriction ) +{ + //deal with no restrictions first + if(iAlignRstrctType == 0) + return TRUE; + //convert the ALIGNMENT_* into powers of 2 + iLawChaos = FloatToInt(pow(2.0, IntToFloat(iLawChaos-1))); + iGoodEvil = FloatToInt(pow(2.0, IntToFloat(iGoodEvil-1))); + //initialise result varaibles + int iAlignTest, iRetVal = TRUE; + //do different test depending on what type of restriction + if(iAlignRstrctType == 1 || iAlignRstrctType == 3) //I.e its 1 or 3 + iAlignTest = iLawChaos; + if(iAlignRstrctType == 2 || iAlignRstrctType == 3) //I.e its 2 or 3 + iAlignTest = iAlignTest | iGoodEvil; + //now the real test. + if(iAlignRestrict & iAlignTest)//bitwise AND comparison + iRetVal = FALSE; + //invert it if applicable + if(iInvertRestriction) + iRetVal = !iRetVal; + //and return the result + return iRetVal; +} + + +location GetRandomCircleLocation(location lBase, float fDistance=1.0) +{ + // Pick a random angle for the location. + float fAngle = IntToFloat(Random(3600)) / 10.0; + + // Pick a random facing for the location. + float fFacing = IntToFloat(Random(3600)) / 10.0; + + // Pick a random distance from the base location. + float fHowFar = IntToFloat(Random(FloatToInt(fDistance * 10.0))) / 10.0; + + // Retreive the position vector from the location. + vector vPosition = GetPositionFromLocation(lBase); + + // Modify the base x/y position by the distance and angle. + vPosition.y += (sin(fAngle) * fHowFar); + vPosition.x += (cos(fAngle) * fHowFar); + + // Return the new random location. + return Location(GetAreaFromLocation(lBase), vPosition, fFacing); +} + +location AddLocationToLocation(location lMaster, location lAdd) +{ + //firstly rotate lAdd according to lMaster + vector vAdd = GetPositionFromLocation(lAdd); + //zero is +y in NWN convert zero to +x + float fAngle = GetFacingFromLocation(lMaster); + //convert angle to radians + fAngle = ((fAngle-90)/360.0)*2.0*PI; + vector vNew; + vNew.x = (vAdd.x*cos(fAngle))-(vAdd.y*sin(fAngle)); + vNew.y = (vAdd.x*sin(fAngle))+(vAdd.y*cos(fAngle)); + vNew.z = vAdd.z; + + //now just add them on + vector vMaster = GetPositionFromLocation(lMaster); + vNew.x += vMaster.x; + vNew.y += vMaster.y; + vNew.z += vMaster.z; + float fNew = GetFacingFromLocation(lAdd)+GetFacingFromLocation(lMaster); + + //return a location + location lReturn = Location(GetAreaFromLocation(lMaster), vNew, fNew); + return lReturn; +} + + + + + +string PRCGetRGB(int red = 15,int green = 15,int blue = 15) +{ + object coloringBook = GetObjectByTag("ColoringBook"); + if (coloringBook == OBJECT_INVALID) + coloringBook = CreateObject(OBJECT_TYPE_ITEM,"gen_coloringbook",GetLocation(GetObjectByTag("HEARTOFCHAOS"))); + string buffer = GetName(coloringBook); + if(red > 15) red = 15; if(green > 15) green = 15; if(blue > 15) blue = 15; + if(red < 1) red = 1; if(green < 1) green = 1; if(blue < 1) blue = 1; + return ""; +} + +int GetIsAPCInArea(object oArea, int bNPCPartyMembers = TRUE) +{ + object oPC = GetFirstPC(); + while (GetIsObjectValid(oPC)) + { + if(bNPCPartyMembers) + { + object oFaction = GetFirstFactionMember(oPC, FALSE); + while(GetIsObjectValid(oFaction)) + { + if (GetArea(oFaction) == oArea) + return TRUE; + oFaction = GetNextFactionMember(oPC, FALSE); + } + } + oPC = GetNextPC(); + } + return FALSE; +} + +string IntToPaddedString(int nX, int nLength = 4, int nSigned = FALSE) +{ + if(nSigned) + nLength--;//to allow for sign + string sResult = IntToString(nX); + // Trunctate to nLength rightmost characters + if(GetStringLength(sResult) > nLength) + sResult = GetStringRight(sResult, nLength); + // Pad the left side with zero + while(GetStringLength(sResult) < nLength) + { + sResult = "0" +sResult; + } + if(nSigned) + { + if(nX>=0) + sResult = "+"+sResult; + else + sResult = "-"+sResult; + } + return sResult; +} + +string ReplaceChars(string sString, string sToReplace, string sReplacement) +{ + int nInd; + while((nInd = FindSubString(sString, sToReplace)) != -1) + { + sString = GetStringLeft(sString, nInd) + + sReplacement + + GetSubString(sString, + nInd + GetStringLength(sToReplace), + GetStringLength(sString) - nInd - GetStringLength(sToReplace) + ); + } + return sString; +} + +void MyDestroyObject(object oObject) +{ + if(GetIsObjectValid(oObject)) + { + SetCommandable(TRUE ,oObject); + AssignCommand(oObject, ClearAllActions()); + AssignCommand(oObject, SetIsDestroyable(TRUE, FALSE, FALSE)); + AssignCommand(oObject, DestroyObject(oObject)); + // May not necessarily work on first iteration + DestroyObject(oObject); + DelayCommand(0.1f, MyDestroyObject(oObject)); + } +} + +int GetHasItem(object oPC, string sResRef) +{ + object oItem = GetFirstItemInInventory(oPC); + + while(GetIsObjectValid(oItem) && GetResRef(oItem) != sResRef) + oItem = GetNextItemInInventory(oPC); + + return GetResRef(oItem) == sResRef; +} + +int GetItemACBase(object oArmor) +{ + int nBonusAC = 0; + + // oItem is not armor then return an error + if(GetBaseItemType(oArmor) != BASE_ITEM_ARMOR) + return -1; + + // check each itemproperty for AC Bonus + itemproperty ipAC = GetFirstItemProperty(oArmor); + + while(GetIsItemPropertyValid(ipAC)) + { + int nType = GetItemPropertyType(ipAC); + + // check for ITEM_PROPERTY_AC_BONUS + if(nType == ITEM_PROPERTY_AC_BONUS) + { + nBonusAC = GetItemPropertyCostTableValue(ipAC); + break; + } + + // get next itemproperty + ipAC = GetNextItemProperty(oArmor); + } + + // return base AC + return GetItemACValue(oArmor) - nBonusAC; +} + +// returns -1 on error, or the const int ARMOR_TYPE_* +int GetArmorType(object oArmor) +{ + int nType = -1; + + // get and check Base AC + switch(GetItemACBase(oArmor) ) + { + case 0: nType = ARMOR_TYPE_CLOTH; break; + case 1: nType = ARMOR_TYPE_LIGHT; break; + case 2: nType = ARMOR_TYPE_LIGHT; break; + case 3: nType = ARMOR_TYPE_LIGHT; break; + case 4: nType = ARMOR_TYPE_MEDIUM; break; + case 5: nType = ARMOR_TYPE_MEDIUM; break; + case 6: nType = ARMOR_TYPE_HEAVY; break; + case 7: nType = ARMOR_TYPE_HEAVY; break; + case 8: nType = ARMOR_TYPE_HEAVY; break; + } + + // return type + return nType; +} + +int CompareAlignment(object oSource, object oTarget) +{ + int iStepDif; + int iGE1 = GetAlignmentGoodEvil(oSource); + int iLC1 = GetAlignmentLawChaos(oSource); + int iGE2 = GetAlignmentGoodEvil(oTarget); + int iLC2 = GetAlignmentLawChaos(oTarget); + + if(iGE1 == ALIGNMENT_GOOD){ + if(iGE2 == ALIGNMENT_NEUTRAL) + iStepDif += 1; + else if(iGE2 == ALIGNMENT_EVIL) + iStepDif += 2; + } + else if(iGE1 == ALIGNMENT_NEUTRAL){ + if(iGE2 != ALIGNMENT_NEUTRAL) + iStepDif += 1; + } + else if(iGE1 == ALIGNMENT_EVIL){ + if(iLC2 == ALIGNMENT_NEUTRAL) + iStepDif += 1; + else if(iLC2 == ALIGNMENT_GOOD) + iStepDif += 2; + } + if(iLC1 == ALIGNMENT_LAWFUL){ + if(iLC2 == ALIGNMENT_NEUTRAL) + iStepDif += 1; + else if(iLC2 == ALIGNMENT_CHAOTIC) + iStepDif += 2; + } + else if(iLC1 == ALIGNMENT_NEUTRAL){ + if(iLC2 != ALIGNMENT_NEUTRAL) + iStepDif += 1; + } + else if(iLC1 == ALIGNMENT_CHAOTIC){ + if(iLC2 == ALIGNMENT_NEUTRAL) + iStepDif += 1; + else if(iLC2 == ALIGNMENT_LAWFUL) + iStepDif += 2; + } + return iStepDif; +} + +void ForceEquip(object oPC, object oItem, int nSlot, int nThCall = 0) +{ + // Sanity checks + // Make sure the parameters are valid + if(!GetIsObjectValid(oPC)) return; + if(!GetIsObjectValid(oItem)) return; + // Make sure that the object we are attempting equipping is the latest one to be ForceEquipped into this slot + if(GetIsObjectValid(GetLocalObject(oPC, "ForceEquipToSlot_" + IntToString(nSlot))) + && + GetLocalObject(oPC, "ForceEquipToSlot_" + IntToString(nSlot)) != oItem + ) + return; + // Fail on non-commandable NPCs after ~1min + if(!GetIsPC(oPC) && !GetCommandable(oPC) && nThCall > 60) + { + WriteTimestampedLogEntry("ForceEquip() failed on non-commandable NPC: " + DebugObject2Str(oPC) + " for item: " + DebugObject2Str(oItem)); + return; + } + + float fDelay; + + // Check if the equipping has already happened + if(GetItemInSlot(nSlot, oPC) != oItem) + { + // Test and increment the control counter + if(nThCall++ == 0) + { + // First, try to do the equipping non-intrusively and give the target a reasonable amount of time to do it + AssignCommand(oPC, ActionEquipItem(oItem, nSlot)); + fDelay = 1.0f; + + // Store the item to be equipped in a local variable to prevent contest between two different calls to ForceEquip + SetLocalObject(oPC, "ForceEquipToSlot_" + IntToString(nSlot), oItem); + } + else + { + // Nuke the target's action queue. This should result in "immediate" equipping of the item + if(GetIsPC(oPC) || nThCall > 5) // Skip nuking NPC action queue at first, since that can cause problems. 5 = magic number here. May need adjustment + { + AssignCommand(oPC, ClearAllActions()); + AssignCommand(oPC, ActionEquipItem(oItem, nSlot)); + } + // Use a lenghtening delay in order to attempt handling lag and possible other interference. From 0.1s to 1s + fDelay = PRCMin(nThCall, 10) / 10.0f; + } + + // Loop + DelayCommand(fDelay, ForceEquip(oPC, oItem, nSlot, nThCall)); + } + // It has, so clean up + else + DeleteLocalObject(oPC, "ForceEquipToSlot_" + IntToString(nSlot)); +} + +void ForceUnequip(object oPC, object oItem, int nSlot, int nThCall = 0) +{ + // Sanity checks + if(!GetIsObjectValid(oPC)) return; + if(!GetIsObjectValid(oItem)) return; + // Fail on non-commandable NPCs after ~1min + if(!GetIsPC(oPC) && !GetCommandable(oPC) && nThCall > 60) + { + WriteTimestampedLogEntry("ForceUnequip() failed on non-commandable NPC: " + DebugObject2Str(oPC) + " for item: " + DebugObject2Str(oItem)); + return; + } + + float fDelay; + + // Delay the first unequipping call to avoid a bug that occurs when an object that was just equipped is unequipped right away + // - The item is not unequipped properly, leaving some of it's effects in the creature's stats and on it's model. + if(nThCall == 0) + { + //DelayCommand(0.5, ForceUnequip(oPC, oItem, nSlot, FALSE)); + fDelay = 0.5; + } + else if(GetItemInSlot(nSlot, oPC) == oItem) + { + // Attempt to avoid interference by not clearing actions before the first attempt + if(nThCall > 1) + if(GetIsPC(oPC) || nThCall > 5) // Skip nuking NPC action queue at first, since that can cause problems. 5 = magic number here. May need adjustment + AssignCommand(oPC, ClearAllActions()); + + AssignCommand(oPC, ActionUnequipItem(oItem)); + + // Ramp up the delay if the action is not getting through. Might let whatever is intefering finish + fDelay = PRCMin(nThCall, 10) / 10.0f; + } + // The item has already been unequipped + else + return; + + // Loop + DelayCommand(fDelay, ForceUnequip(oPC, oItem, nSlot, ++nThCall)); +} + +int GetHasFreeHand(object oCreature) +{ + return !GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature)) + || !GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature)); +} + +int GetIsEncumbered(object oCreature) +{ + int iStrength = GetAbilityScore(oCreature, ABILITY_STRENGTH); + if(iStrength > 50) + return FALSE; // encumbrance.2da doesn't go that high, so automatic success + + return GetWeight(oCreature) > StringToInt(Get2DACache("encumbrance", "Normal", iStrength)); +} + +void TryToIDItems(object oPC = OBJECT_SELF) +{ + int nGP; + string sMax = Get2DACache("SkillVsItemCost", "DeviceCostMax", GetSkillRank(SKILL_LORE, oPC)); + int nMax = StringToInt(sMax); + if (sMax == "") nMax = 120000000; + object oItem = GetFirstItemInInventory(oPC); + while(GetIsObjectValid(oItem)) + { + if(!GetIdentified(oItem)) + { + // Check for the value of the item first. + SetIdentified(oItem, TRUE); + nGP = GetGoldPieceValue(oItem); + // If oPC has enough Lore skill to ID the item, then do so. + if(nMax >= nGP) + SendMessageToPC(oPC, GetStringByStrRef(16826224) + " " + GetName(oItem) + " " + GetStringByStrRef(16826225)); + else + SetIdentified(oItem, FALSE); + } + oItem = GetNextItemInInventory(oPC); + } +} + +string BooleanToString(int bool, int bTLK = FALSE) +{ + return bTLK ? + (bool ? GetStringByStrRef(8141) : GetStringByStrRef(8142)): + (bool ? "True" : "False"); +} + +string PRCTrimString(string s) +{ + int nCrop = 0; + string temp; + // Find end of the leading whitespace + while(TRUE) + { + // Get the next character in the string, starting from the beginning + temp = GetSubString(s, nCrop, 1); + if(temp == " " || // Space + temp == "\n") // Line break + nCrop++; + else + break; + } + // Crop the leading whitespace + s = GetSubString(s, nCrop, GetStringLength(s) - nCrop); + + // Find the beginning of the trailing whitespace + nCrop = 0; + while(TRUE) + { + // Get the previous character in the string, starting from the end + temp = GetSubString(s, GetStringLength(s) - 1 - nCrop, 1); + if(temp == " " || // Space + temp == "\n") // Line break + nCrop++; + else + break; + } + // Crop the trailing whitespace + s = GetSubString(s, 0, GetStringLength(s) - nCrop); + + return s; +} + +int GetFirstCharacterIndex(string s1) +{ + object oLookup = GetWaypointByTag("prc_str_lookup"); + if(!GetIsObjectValid(oLookup)) + oLookup = CreateObject(OBJECT_TYPE_WAYPOINT, "prc_str_lookup", GetLocation(GetObjectByTag("HEARTOFCHAOS"))); + + return GetLocalInt(oLookup, GetStringUpperCase(GetSubString(s1, 0, 1))); +} + +int StringCompare(string s1, string s2) +{ + object oLookup = GetWaypointByTag("prc_str_lookup"); + if(!GetIsObjectValid(oLookup)) + oLookup = CreateObject(OBJECT_TYPE_WAYPOINT, "prc_str_lookup", GetLocation(GetObjectByTag("HEARTOFCHAOS"))); + + // Start comparing + int nT, + i = 0, + nMax = PRCMin(GetStringLength(s1), GetStringLength(s2)); + while(i < nMax) + { + // Get the difference between the values of i:th characters + nT = GetLocalInt(oLookup, GetSubString(s1, i, 1)) - GetLocalInt(oLookup, GetSubString(s2, i, 1)); + i++; + if(nT < 0) + return -1; + if(nT == 0) + continue; + if(nT > 0) + return 1; + } + + // The strings have the same base. Of such, the shorter precedes + nT = GetStringLength(s1) - GetStringLength(s2); + if(nT < 0) + return -1; + if(nT > 0) + return 1; + + // The strings were equal + return 0; +} + +string ReplaceString(string sString, string sFind, string sReplace) +{ + int n = FindSubString(sString, sFind); + if(n!=-1) + return GetStringLeft(sString, n) + sReplace + GetStringRight(sString, GetStringLength(sString) - GetStringLength(sFind) - n); + else + return sString; +} + +float GetRelativeAngleBetweenLocations(location lFrom, location lTo) +{ + vector vPos1 = GetPositionFromLocation(lFrom); + vector vPos2 = GetPositionFromLocation(lTo); + //sanity check + if(GetDistanceBetweenLocations(lFrom, lTo) == 0.0) + return 0.0; + + float fAngle = acos((vPos2.x - vPos1.x) / GetDistanceBetweenLocations(lFrom, lTo)); + // The above formula only returns values [0, 180], so test for negative y movement + if((vPos2.y - vPos1.y) < 0.0f) + fAngle = 360.0f -fAngle; + + return fAngle; +} + +string ItemPropertyToString(itemproperty ipTest) +{ + int nIPType = GetItemPropertyType(ipTest); + string sName = GetStringByStrRef(StringToInt(Get2DACache("itempropdef", "GameStrRef", nIPType))); + if(GetItemPropertySubType(ipTest) != -1)//nosubtypes + { + string sSubTypeResRef =Get2DACache("itempropdef", "SubTypeResRef", nIPType); + int nTlk = StringToInt(Get2DACache(sSubTypeResRef, "Name", GetItemPropertySubType(ipTest))); + if(nTlk > 0) + sName += " "+GetStringByStrRef(nTlk); + } + if(GetItemPropertyParam1(ipTest) != -1) + { + string sParamResRef =Get2DACache("iprp_paramtable", "TableResRef", GetItemPropertyParam1(ipTest)); + if(Get2DACache("itempropdef", "SubTypeResRef", nIPType) != "" + && Get2DACache(Get2DACache("itempropdef", "SubTypeResRef", nIPType), "TableResRef", GetItemPropertyParam1(ipTest)) != "") + sParamResRef =Get2DACache(Get2DACache("itempropdef", "SubTypeResRef", nIPType), "TableResRef", GetItemPropertyParam1(ipTest)); + int nTlk = StringToInt(Get2DACache(sParamResRef, "Name", GetItemPropertyParam1Value(ipTest))); + if(nTlk > 0) + sName += " "+GetStringByStrRef(nTlk); + } + if(GetItemPropertyCostTable(ipTest) != -1) + { + string sCostResRef =Get2DACache("iprp_costtable", "Name", GetItemPropertyCostTable(ipTest)); + int nTlk = StringToInt(Get2DACache(sCostResRef, "Name", GetItemPropertyCostTableValue(ipTest))); + if(nTlk > 0) + sName += " "+GetStringByStrRef(nTlk); + } + return sName; +} + +//Check for XP +int GetHasXPToSpend(object oPC, int nCost) +{ + // To be TRUE, make sure that oPC wouldn't lose a level by spending nCost. + int nHitDice = GetHitDice(oPC); + int nHitDiceXP = (500 * nHitDice * (nHitDice - 1)); // simplification of the sum + //get current XP + int nXP = GetXP(oPC); + if(!nXP) + nXP = GetLocalInt(oPC, "NPC_XP"); + //the test + if (nXP >= (nHitDiceXP + nCost)) + return TRUE; + return FALSE; +} + +//Spend XP +void SpendXP(object oPC, int nCost) +{ + if(nCost > 0) + { + if(GetXP(oPC)) + SetXP(oPC, GetXP(oPC) - nCost); + else if(GetLocalInt(oPC, "NPC_XP")) + SetLocalInt(oPC, "NPC_XP", GetLocalInt(oPC, "NPC_XP")-nCost); + } +} + +//Check for GP +int GetHasGPToSpend(object oPC, int nCost) +{ + //if its a NPC, get master + while(!GetIsPC(oPC) + && GetIsObjectValid(GetMaster(oPC))) + { + oPC = GetMaster(oPC); + } + //test if it has gold + if(GetIsPC(oPC)) + { + return GetGold(oPC) >= nCost; + } + //NPC in NPC faction + //cannot posses gold + return FALSE; +} + +//Spend GP +void SpendGP(object oPC, int nCost) +{ + if(nCost > 0) + { + //if its a NPC, get master + while(!GetIsPC(oPC) + && GetIsObjectValid(GetMaster(oPC))) + { + oPC = GetMaster(oPC); + } + TakeGoldFromCreature(nCost, oPC, TRUE); + } +} + + + +int isNotShield(object oItem) +{ + int iType = GetBaseItemType(oItem); + + return !(iType == BASE_ITEM_LARGESHIELD + || iType == BASE_ITEM_TOWERSHIELD + || iType == BASE_ITEM_SMALLSHIELD + // Added torches to the check as they should not count either + || iType == BASE_ITEM_TORCH); +} + + +void ActionUseItemPropertyAtObject(object oItem, itemproperty ipIP, object oTarget = OBJECT_SELF) +{ + int nIPSpellID = GetItemPropertySubType(ipIP); + string sSpellID = Get2DACache("iprp_spells", "SpellIndex", nIPSpellID); + int nSpellID = StringToInt(sSpellID); + string sCategory = Get2DACache("spells", "Category", nSpellID); + int nCategory = StringToInt(sCategory); + int nCategoryPotionRandom = FALSE; + //potions are strange + //seem to be hardcoded to certain categories + if(GetBaseItemType(oItem) == BASE_ITEM_POTIONS) + { + //potions are self-only + if(oTarget != OBJECT_SELF) + return; + + if(nCategory == TALENT_CATEGORY_BENEFICIAL_HEALING_AREAEFFECT + || nCategory == TALENT_CATEGORY_BENEFICIAL_HEALING_TOUCH) + nCategory = TALENT_CATEGORY_BENEFICIAL_HEALING_POTION; + else if(nCategory == TALENT_CATEGORY_BENEFICIAL_CONDITIONAL_AREAEFFECT + || nCategory == TALENT_CATEGORY_BENEFICIAL_CONDITIONAL_SINGLE) + nCategory = TALENT_CATEGORY_BENEFICIAL_CONDITIONAL_POTION; + else if(nCategory == TALENT_CATEGORY_BENEFICIAL_ENHANCEMENT_AREAEFFECT + || nCategory == TALENT_CATEGORY_BENEFICIAL_ENHANCEMENT_SINGLE + || nCategory == TALENT_CATEGORY_BENEFICIAL_ENHANCEMENT_SELF) + nCategory = TALENT_CATEGORY_BENEFICIAL_ENHANCEMENT_POTION; + else if(nCategory == TALENT_CATEGORY_BENEFICIAL_PROTECTION_SELF + || nCategory == TALENT_CATEGORY_BENEFICIAL_PROTECTION_SINGLE + || nCategory == TALENT_CATEGORY_BENEFICIAL_PROTECTION_AREAEFFECT) + nCategory = TALENT_CATEGORY_BENEFICIAL_PROTECTION_POTION; + else + { + //something odd here add strage randomized coding inside the loop + nCategoryPotionRandom = TRUE; + nCategory = TALENT_CATEGORY_BENEFICIAL_HEALING_POTION; + } + + } + + talent tItem; + tItem = GetCreatureTalentRandom(nCategory); + int nCount = 0; + while(GetIsTalentValid(tItem) + && nCount < ACTION_USE_ITEM_TMI_LIMIT) //this is the TMI limiting thing, change as appropriate + { + if(nCategoryPotionRandom) + { + switch(d4()) + { + default: + case 1: nCategory = TALENT_CATEGORY_BENEFICIAL_HEALING_POTION; break; + case 2: nCategory = TALENT_CATEGORY_BENEFICIAL_CONDITIONAL_POTION; break; + case 3: nCategory = TALENT_CATEGORY_BENEFICIAL_ENHANCEMENT_POTION; break; + case 4: nCategory = TALENT_CATEGORY_BENEFICIAL_PROTECTION_POTION; break; + } + } + + if(GetTypeFromTalent(tItem) == TALENT_TYPE_SPELL + && GetIdFromTalent(tItem) == nSpellID) + { + ActionUseTalentOnObject(tItem, oTarget); + //end while loop + return; + } + nCount++; + tItem = GetCreatureTalentRandom(nCategory); + } + //if you got to this point, something whent wrong + //rather than failing silently, well log it + DoDebug("ERROR: ActionUseItemProperty() failed for "+GetName(OBJECT_SELF)+" using "+GetName(oItem)+" to cast "+IntToString(nSpellID)); +} + + +void ActionUseItemPropertyAtLocation(object oItem, itemproperty ipIP, location lTarget) +{ + int nIPSpellID = GetItemPropertySubType(ipIP); + string sSpellID = Get2DACache("iprp_spells", "SpellIndex", nIPSpellID); + int nSpellID = StringToInt(sSpellID); + string sCategory = Get2DACache("spells", "Category", nSpellID); + int nCategory = StringToInt(sCategory); + + //potions are odd + //but since they are self-only it doesnt matter + + talent tItem; + tItem = GetCreatureTalentRandom(nCategory); + int nCount = 0; + while(GetIsTalentValid(tItem) + && nCount < ACTION_USE_ITEM_TMI_LIMIT) //this is the TMI limiting thing, change as appropriate + { + if(GetTypeFromTalent(tItem) == TALENT_TYPE_SPELL + && GetIdFromTalent(tItem) == nSpellID) + { + ActionUseTalentAtLocation(tItem, lTarget); + //end while loop + return; + } + nCount++; + tItem = GetCreatureTalentRandom(nCategory); + } + //if you got to this point, something whent wrong + //rather than failing silently, well log it + DoDebug("ERROR: ActionUseItemProperty() failed for "+GetName(OBJECT_SELF)+" using "+GetName(oItem)+" to cast "+IntToString(nSpellID)); +} + + +//:://///////////////////////////////////////////// +//:: Get Has Effect +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Checks to see if the target has a given + spell effect +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Oct 26, 2001 +//::////////////////////////////////////////////// +int PRCGetHasEffect(int nEffectType, object oTarget = OBJECT_SELF) +{ + effect eCheck = GetFirstEffect(oTarget); + while(GetIsEffectValid(eCheck)) + { + if(GetEffectType(eCheck) == nEffectType) + { + return TRUE; + } + eCheck = GetNextEffect(oTarget); + } + return FALSE; +} +// Test main +//void main(){} + +//:://///////////////////////////////////////////// +//:: PRCGetIsFighting +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Checks if the passed object has an Attempted + Attack or Spell Target +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: March 13, 2002 +//::////////////////////////////////////////////// +int PRCGetIsFighting(object oFighting = OBJECT_SELF) +{ + return GetIsObjectValid(GetAttemptedAttackTarget()) + || GetIsObjectValid(GetAttemptedSpellTarget()); +} + +// Determine whether the character is polymorphed or shfited. +int GetIsPolyMorphedOrShifted(object oCreature) +{ + int bPoly = FALSE; + + effect eChk = GetFirstEffect(oCreature); + + while (GetIsEffectValid(eChk)) + { + if (GetEffectType(eChk) == EFFECT_TYPE_POLYMORPH) + bPoly = TRUE; + + eChk = GetNextEffect(oCreature); + } + + if (GetPersistantLocalInt(oCreature, "nPCShifted")) + bPoly = TRUE; + + return bPoly; +} + +float PRCGetRandomDelay(float fMinimumTime = 0.4, float fMaximumTime = 1.1) +{ + float fRandom = fMaximumTime - fMinimumTime; + if(fRandom < 0.0) + { + return 0.0; + } + else + { + int nRandom; + nRandom = FloatToInt(fRandom * 10.0); + nRandom = Random(nRandom) + 1; + fRandom = IntToFloat(nRandom); + fRandom /= 10.0; + return fRandom + fMinimumTime; + } +} + +int GetSkill(object oObject, int nSkill, int bSynergy = FALSE, int bSize = FALSE, int bAbilityMod = TRUE, int bEffect = TRUE, int bArmor = TRUE, int bShield = TRUE, int bFeat = TRUE) +{ + if(!GetIsObjectValid(oObject)) + return 0; + if(!GetHasSkill(nSkill, oObject)) + return 0;//no skill set it to zero + int nSkillRank; //get the current value at the end, after effects are applied + if(bSynergy) + { + if(nSkill == SKILL_SET_TRAP + && GetSkill(oObject, SKILL_DISABLE_TRAP, FALSE, FALSE, FALSE, + FALSE, FALSE, FALSE, FALSE) >= 5) + nSkillRank += 2; + if(nSkill == SKILL_DISABLE_TRAP + && GetSkill(oObject, SKILL_SET_TRAP, FALSE, FALSE, FALSE, + FALSE, FALSE, FALSE, FALSE) >= 5) + nSkillRank += 2; + } + if(bSize) + if(nSkill == SKILL_HIDE)//only hide is affected by size + nSkillRank += (PRCGetCreatureSize(oObject)-3)*(-4); + if(!bAbilityMod) + { + string sAbility = Get2DACache("skills", "KeyAbility", nSkill); + int nAbility; + if(sAbility == "STR") + nAbility = ABILITY_STRENGTH; + else if(sAbility == "DEX") + nAbility = ABILITY_DEXTERITY; + else if(sAbility == "CON") + nAbility = ABILITY_CONSTITUTION; + else if(sAbility == "INT") + nAbility = ABILITY_INTELLIGENCE; + else if(sAbility == "WIS") + nAbility = ABILITY_WISDOM; + else if(sAbility == "CHA") + nAbility = ABILITY_CHARISMA; + nSkillRank -= GetAbilityModifier(nAbility, oObject); + } + if(!bEffect) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSkillIncrease(nSkill, 30), oObject, 0.001); + nSkillRank -= 30; + } + if(!bArmor + && GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CHEST, oObject)) + && Get2DACache("skills", "ArmorCheckPenalty", nSkill) == "1") + { + object oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oObject); + // Get the torso model number + int nTorso = GetItemAppearance( oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_TORSO); + // Read 2DA for base AC + // Can also use "parts_chest" which returns it as a "float" + int nACBase = StringToInt(Get2DACache( "des_crft_appear", "BaseAC", nTorso)); + int nSkillMod; + switch(nACBase) + { + case 0: nSkillMod = 0; break; + case 1: nSkillMod = 0; break; + case 2: nSkillMod = 0; break; + case 3: nSkillMod = -1; break; + case 4: nSkillMod = -2; break; + case 5: nSkillMod = -5; break; + case 6: nSkillMod = -7; break; + case 7: nSkillMod = -7; break; + case 8: nSkillMod = -8; break; + } + nSkillRank -= nSkillMod; + } + if(!bShield + && GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oObject)) + && Get2DACache("skills", "ArmorCheckPenalty", nSkill) == "1") + { + object oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oObject); + int nBase = GetBaseItemType(oItem); + int nSkillMod; + switch(nBase) + { + case BASE_ITEM_TOWERSHIELD: nSkillMod = -10; break; + case BASE_ITEM_LARGESHIELD: nSkillMod = -2; break; + case BASE_ITEM_SMALLSHIELD: nSkillMod = -1; break; + } + nSkillRank -= nSkillMod; + } + if(!bFeat) + { + int nSkillMod; + int nEpicFeat; + int nFocusFeat; + switch(nSkill) + { + case SKILL_ANIMAL_EMPATHY: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_ANIMAL_EMPATHY; + nFocusFeat = FEAT_SKILL_FOCUS_ANIMAL_EMPATHY; + break; + case SKILL_APPRAISE: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_APPRAISE; + nFocusFeat = FEAT_SKILLFOCUS_APPRAISE; + if(GetHasFeat(FEAT_SILVER_PALM, oObject)) + nSkillMod += 2; + break; + case SKILL_BLUFF: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_BLUFF; + nFocusFeat = FEAT_SKILL_FOCUS_BLUFF; + break; + case SKILL_CONCENTRATION: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_CONCENTRATION; + nFocusFeat = FEAT_SKILL_FOCUS_CONCENTRATION; + if(GetHasFeat(FEAT_SKILL_AFFINITY_CONCENTRATION, oObject)) + nSkillMod += 2; + break; + case SKILL_CRAFT_ARMOR: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_CRAFT_ARMOR; + nFocusFeat = FEAT_SKILL_FOCUS_CRAFT_ARMOR; + break; + case SKILL_CRAFT_TRAP: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_CRAFT_TRAP; + nFocusFeat = FEAT_SKILL_FOCUS_CRAFT_TRAP; + break; + case SKILL_CRAFT_WEAPON: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_CRAFT_WEAPON; + nFocusFeat = FEAT_SKILL_FOCUS_CRAFT_WEAPON; + break; + case SKILL_DISABLE_TRAP: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_DISABLETRAP; + nFocusFeat = FEAT_SKILL_FOCUS_DISABLE_TRAP; + break; + case SKILL_DISCIPLINE: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_DISCIPLINE; + nFocusFeat = FEAT_SKILL_FOCUS_DISCIPLINE; + break; + case SKILL_HEAL: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_HEAL; + nFocusFeat = FEAT_SKILL_FOCUS_HEAL; + break; + case SKILL_HIDE: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_HIDE; + nFocusFeat = FEAT_SKILL_FOCUS_HIDE; + break; + case SKILL_INTIMIDATE: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_INTIMIDATE; + nFocusFeat = FEAT_SKILL_FOCUS_INTIMIDATE; + break; + case SKILL_LISTEN: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_LISTEN; + nFocusFeat = FEAT_SKILL_FOCUS_LISTEN; + if(GetHasFeat(FEAT_SKILL_AFFINITY_LISTEN, oObject)) + nSkillMod += 2; + if(GetHasFeat(FEAT_PARTIAL_SKILL_AFFINITY_LISTEN, oObject)) + nSkillMod += 1; + break; + case SKILL_LORE: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_LORE; + nFocusFeat = FEAT_SKILL_FOCUS_LORE; + if(GetHasFeat(FEAT_SKILL_AFFINITY_LORE, oObject)) + nSkillMod += 2; + if(GetHasFeat(FEAT_COURTLY_MAGOCRACY, oObject)) + nSkillMod += 2; + if(GetHasFeat(FEAT_BARDIC_KNOWLEDGE, oObject)) + nSkillMod += GetLevelByClass(CLASS_TYPE_BARD, oObject) + +GetLevelByClass(CLASS_TYPE_HARPER, oObject) + +GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oObject) + +GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oObject); + break; + case SKILL_MOVE_SILENTLY: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_MOVESILENTLY; + nFocusFeat = FEAT_SKILL_FOCUS_MOVE_SILENTLY; + if(GetHasFeat(FEAT_SKILL_AFFINITY_MOVE_SILENTLY, oObject)) + nSkillMod += 2; + break; + case SKILL_OPEN_LOCK: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_OPENLOCK; + nFocusFeat = FEAT_SKILL_FOCUS_OPEN_LOCK; + break; + case SKILL_PARRY: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_PARRY; + nFocusFeat = FEAT_SKILL_FOCUS_PARRY; + break; + case SKILL_PERFORM: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_PERFORM; + nFocusFeat = FEAT_SKILL_FOCUS_PERFORM; + if(GetHasFeat(FEAT_ARTIST, oObject)) + nSkillMod += 2; + break; + case SKILL_PERSUADE: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_PERSUADE; + nFocusFeat = FEAT_SKILL_FOCUS_PERSUADE; + if(GetHasFeat(FEAT_SILVER_PALM, oObject)) + nSkillMod += 2; + break; + case SKILL_PICK_POCKET: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_PICKPOCKET; + nFocusFeat = FEAT_SKILL_FOCUS_PICK_POCKET; + break; + case SKILL_SEARCH: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_SEARCH; + nFocusFeat = FEAT_SKILL_FOCUS_SEARCH; + if(GetHasFeat(FEAT_SKILL_AFFINITY_SEARCH, oObject)) + nSkillMod += 2; + if(GetHasFeat(FEAT_PARTIAL_SKILL_AFFINITY_SEARCH, oObject)) + nSkillMod += 1; + break; + case SKILL_SET_TRAP: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_SETTRAP; + nFocusFeat = FEAT_SKILL_FOCUS_SET_TRAP; + break; + case SKILL_SPELLCRAFT: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_SPELLCRAFT; + nFocusFeat = FEAT_SKILL_FOCUS_SPELLCRAFT; + if(GetHasFeat(FEAT_COURTLY_MAGOCRACY, oObject)) + nSkillMod += 2; + break; + case SKILL_SPOT: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_SPOT; + nFocusFeat = FEAT_SKILL_FOCUS_SPOT; + if(GetHasFeat(FEAT_SKILL_AFFINITY_SPOT, oObject)) + nSkillMod += 2; + if(GetHasFeat(FEAT_PARTIAL_SKILL_AFFINITY_SPOT, oObject)) + nSkillMod += 1; + if(GetHasFeat(FEAT_ARTIST, oObject)) + nSkillMod += 2; + if(GetHasFeat(FEAT_BLOODED, oObject)) + nSkillMod += 2; + break; + case SKILL_TAUNT: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_TAUNT; + nFocusFeat = FEAT_SKILL_FOCUS_TAUNT; + break; + case SKILL_TUMBLE: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_TUMBLE; + nFocusFeat = FEAT_SKILL_FOCUS_TUMBLE; + break; + case SKILL_USE_MAGIC_DEVICE: + nEpicFeat = FEAT_EPIC_SKILL_FOCUS_USEMAGICDEVICE; + nFocusFeat = FEAT_SKILL_FOCUS_USE_MAGIC_DEVICE; + break; + } + if(nEpicFeat != 0 + && GetHasFeat(nEpicFeat, oObject)) + nSkillMod += 10; + if(nFocusFeat != 0 + && GetHasFeat(nFocusFeat, oObject)) + nSkillMod += 3; + nSkillRank -= nSkillMod; + } + //add this at the end so any effects applied are counted + nSkillRank += GetSkillRank(nSkill, oObject); + return nSkillRank; +} + +void ForcePutDown(object oPC, object oItem, int nSlot, int nThCall = 0) +{ + // Sanity checks + if(!GetIsObjectValid(oPC)) return; + if(!GetIsObjectValid(oItem)) return; + // Fail on non-commandable NPCs after ~1min + if(!GetIsPC(oPC) && !GetCommandable(oPC) && nThCall > 60) + { + WriteTimestampedLogEntry("ForcePutDown() failed on non-commandable NPC: " + DebugObject2Str(oPC) + " for item: " + DebugObject2Str(oItem)); + return; + } + + float fDelay; + + if(GetItemInSlot(nSlot, oPC) == oItem) + { + // Attempt to avoid interference by not clearing actions before the first attempt + if(nThCall > 1) + if(GetIsPC(oPC) || nThCall > 5) // Skip nuking NPC action queue at first, since that can cause problems. 5 = magic number here. May need adjustment + AssignCommand(oPC, ClearAllActions()); + + AssignCommand(oPC, ActionPutDownItem(oItem)); + + // Ramp up the delay if the action is not getting through. Might let whatever is intefering finish + fDelay = PRCMin(nThCall, 10) / 10.0f; + } + // The item has already been unequipped + else + return; + + // Loop + DelayCommand(fDelay, ForcePutDown(oPC, oItem, nSlot, ++nThCall)); +} + +// Test main +//void main() {} diff --git a/src/include/inc_vfx_const.nss b/src/include/inc_vfx_const.nss new file mode 100644 index 0000000..c69616d --- /dev/null +++ b/src/include/inc_vfx_const.nss @@ -0,0 +1,675 @@ +//:://///////////////////////////////////////////// +//:: Visual Effect constant include +//:: inc_vfx_const +//:://///////////////////////////////////////////// +/* + Constants for vfx present in visualeffects.2da that + do not have a constant defined by bioware. +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Unenumerated BW VFX */ +////////////////////////////////////////////////// + +const int VFX_COM_BLOOD_REG_WIMPY = 296; +const int VFX_COM_BLOOD_LRG_WIMPY = 297; +const int VFX_COM_BLOOD_CRT_WIMPY = 298; +const int VFX_COM_BLOOD_REG_WIMPG = 299; +const int VFX_COM_BLOOD_LRG_WIMPG = 300; +const int VFX_COM_BLOOD_CRT_WIMPG = 301; +const int VFX_COM_BLOOD_CRT_RED_HEAD = 491; +const int VFX_COM_BLOOD_CRT_GREEN_HEAD = 492; +const int VFX_COM_BLOOD_CRT_YELLOW_HEAD = 493; + +const int VFX_IMP_LEAF = 132; +const int VFX_IMP_CLOUD = 133; +const int VFX_IMP_WIND = 134; +const int VFX_IMP_ROCKEXPLODE = 135; +const int VFX_IMP_ROCKEXPLODE2 = 136; +const int VFX_IMP_ROCKSUP = 137; +const int VFX_IMP_DESTRUCTION_LOW = 302; +const int VFX_IMP_PULSE_BOMB = 469; +const int VFX_IMP_SILENCE_NO_SOUND = 470; + +const int VFX_BEAM_FLAME = 444; + +const int VFX_DUR_GHOSTLY_PULSE_QUICK = 295; +const int VFX_DUR_PROT_ACIDSHIELD = 448; +const int VFX_DUR_BARD_SONG_SILENT = 468; +const int VFX_DUR_CONECOLD_HEAD = 490; +const int VFX_DUR_BARD_SONG_EVIL = 507; + +const int VFX_FNF_SPELL_FAIL_HEA = 292; +const int VFX_FNF_SPELL_FAIL_HAND = 293; +const int VFX_FNF_HIGHLIGHT_FLASH_WHITE = 294; +const int VFX_FNF_SCREEN_SHAKE2 = 356; +const int VFX_FNF_HELLBALL = 464; +const int VFX_FNF_TELEPORT_IN = 471; +const int VFX_FNF_TELEPORT_OUT = 472; +const int VFX_FNF_DRAGBREATHGROUND = 494; + +const int VFX_CONJ_MIND = 466; +const int VFX_CONJ_FIRE = 467; + + +const int SCENE_WEIRD = 323; +const int SCENE_EVARD = 346; +const int SCENE_TOWER = 347; +const int SCENE_TEMPLE = 348; +const int SCENE_LAVA = 349; +const int SCENE_LAVA2 = 350; +const int SCENE_WATER = 401; +const int SCENE_GRASS = 402; +const int SCENE_FORMIAN1 = 404; +const int SCENE_FORMIAN2 = 405; +const int SCENE_PITTRAP = 406; +const int SCENE_ICE = 426; +const int SCENE_MFPillar = 427; +const int SCENE_MFWaterfall = 428; +const int SCENE_MFGroundCover = 429; +const int SCENE_MFGroundCover2 = 430; +const int SCENE_MF6 = 431; +const int SCENE_MF7 = 432; +const int SCENE_MF8 = 433; +const int SCENE_MF9 = 434; +const int SCENE_MF10 = 435; +const int SCENE_MF11 = 436; +const int SCENE_MF12 = 437; +const int SCENE_MF13 = 438; +const int SCENE_MF14 = 439; +const int SCENE_MF15 = 440; +const int SCENE_MF16 = 441; +const int SCENE_ICE_CLEAR = 442; +const int SCENE_EVIL_CASTLE_WALL = 443; +const int SCENE_BUILDING = 449; +const int SCENE_BURNED_RUBBLE = 450; +const int SCENE_BURNING_HALF_HOUSE = 451; +const int SCENE_RUINED_ARCH = 452; +const int SCENE_SOLID_ARCH = 453; +const int SCENE_BURNED_RUBBLE_2 = 454; +const int SCENE_MARKET_1 = 455; +const int SCENE_MARKET_2 = 456; +const int SCENE_GAZEBO = 457; +const int SCENE_WAGON = 458; +const int SCENE_SEWER_WATER = 461; +const int SCENE_BLACK_TILE = 506; +const int SCENE_PRISON_FLOOR = 511; + +const int WELL = 358; + +const int NORMAL_ARROW = 357; +const int NORMAL_DART = 359; + + + +////////////////////////////////////////////////// +/* shadguy's spell VFX (visual effects) library */ +////////////////////////////////////////////////// + + +// retextured magic missle effects +// +// Note: in game, these are a bit flakey; the engine tries to apply these as +// an impact VFX right away, even before the MIRV itself lands on target. +// +// I also tried Mirv's with chunk models - using the black skull from the mind +// fear effect. It looked even dumber manifesting at the target before impact. + +const int VFX_IMP_MIRV_SILENT = 1000; +const int VFX_IMP_MIRV_DN_YELLOW = 1001; +const int VFX_IMP_MIRV_DN_RED = 1002; +const int VFX_IMP_MIRV_DN_GREEN = 1003; +const int VFX_IMP_MIRV_DN_VIOLET = 1004; +const int VFX_IMP_MIRV_DN_CYAN = 1005; +const int VFX_IMP_MIRV_DN_PURPLE = 1006; +const int VFX_IMP_MIRV_DN_MAGENTA = 1007; +const int VFX_IMP_MIRV_DN_LAWNGREEN = 1008; +const int VFX_IMP_MIRV_DN_ORANGE = 1009; +const int VFX_IMP_MIRV_DN_SPRINGGREEN = 1010; +const int VFX_IMP_MIRV_DN_STEELBLUE = 1011; +const int VFX_IMP_MIRV_DN_ECTO = 1012; +const int VFX_IMP_MIRV_DN_SOUNDFX = 1013; + + +// recolored AID VFX: +const int VFX_IMP_HOLY_AID_DN_SILENT = 1017; +const int VFX_IMP_HOLY_AID_DN_GREEN = 1018; +const int VFX_IMP_HOLY_AID_DN_CYAN = 1019; +const int VFX_IMP_HOLY_AID_DN_ORANGE = 1020; +const int VFX_IMP_HOLY_AID_DN_RED = 1021; +const int VFX_IMP_HOLY_AID_DN_BLUE = 1022; +const int VFX_IMP_HOLY_AID_DN_PURPLE = 1023; +const int VFX_IMP_HOLY_AID_DN_SOUNDFX = 1024; + + +//recolored Word of Faith VFX, slightly bastardized; nwmax wouldn't import the higres version, so these are all based on teh low res version +const int VFX_FNF_WORD_DN_SILENT = 1028; +const int VFX_FNF_WORD_DN_GREEN = 1029; +const int VFX_FNF_WORD_DN_CYAN = 1030; +const int VFX_FNF_WORD_DN_BLUE = 1031; +const int VFX_FNF_WORD_DN_PURPLE = 1032; +const int VFX_FNF_WORD_DN_RED = 1033; +const int VFX_FNF_WORD_DN_ORANGE = 1034; +const int VFX_FNF_WORD_DN_SOUNDFX = 1035; + + +//attempted recolor of Power Word Stun that turned out screwy but useable; +//I'll recommend using them in combo with silent version of stuff like timestop below +const int VFX_FNF_PW_DN_YG = 1039; +const int VFX_FNF_PW_DN_GB = 1040; +const int VFX_FNF_PW_DN_BP = 1041; +const int VFX_FNF_PW_DN_PR = 1042; +const int VFX_FNF_PW_DN_RY = 1043; +const int VFX_FNF_PW_DN_STUN_SOUNDFX = 1044; +const int VFX_FNF_PW_DN_KILL_SOUNDFX = 1045; + + +// recolored time stop VFX +const int VFX_IMP_TIME_STOP_DN_SOUNDFX = 1049; +const int VFX_IMP_TIME_STOP_DN_RED = 1050; +const int VFX_IMP_TIME_STOP_DN_ORANGE = 1051; +const int VFX_IMP_TIME_STOP_DN_YELLOW = 1052; +const int VFX_IMP_TIME_STOP_DN_GREEN = 1053; +const int VFX_IMP_TIME_STOP_DN_BLUE = 1054; +const int VFX_IMP_TIME_STOP_DN_PURPLE = 1055; +const int VFX_IMP_TIME_STOP_DN_SILENT = 1056; + + +// recolored blindness and deafness +const int VFX_IMP_BLINDDEAD_DN_RED = 1060; +const int VFX_IMP_BLINDDEAD_DN_YELLOW = 1061; +const int VFX_IMP_BLINDDEAD_DN_GREEN = 1062; +const int VFX_IMP_BLINDDEAD_DN_CYAN = 1063; +const int VFX_IMP_BLINDDEAD_DN_BLUE = 1064; +const int VFX_IMP_BLINDDEAD_DN_PURPLE = 1065; +const int VFX_IMP_BLINDDEAD_DN_SOUNDFX = 1066; + + +// recolored magic eye VFX +const int VFX_MAGICAL_VISION_DN_GREEN = 1070; +const int VFX_MAGICAL_VISION_DN_RED = 1071; +const int VFX_MAGICAL_VISION_DN_SOUNDFX = 1075; + + +// recolored healing_s +const int VFX_IMP_HEALING_S_VIO = 1079; +const int VFX_IMP_HEALING_S_MAG = 1080; +const int VFX_IMP_HEALING_S_ORA = 1081; +const int VFX_IMP_HEALING_S_LAW = 1082; +const int VFX_IMP_HEALING_S_SPR = 1083; +const int VFX_IMP_HEALING_S_SILENT = 1094; +const int VFX_IMP_HEALING_S_RED = 1085; +const int VFX_IMP_HEALING_S_SOUNDFX = 1086; +const int VFX_IMP_HEALING_HARM_SOUNDFX = 1087; + + +// recolored healing_m +const int VFX_IMP_HEALING_M_PUR = 1091; +const int VFX_IMP_HEALING_M_MAG = 1092; +const int VFX_IMP_HEALING_M_YEL = 1093; +const int VFX_IMP_HEALING_M_CYA = 1094; +const int VFX_IMP_HEALING_M_SILENT = 1095; +const int VFX_IMP_HEALING_M_RED = 1096; +const int VFX_IMP_HEALING_M_SOUNDFX = 1097; + + +// recolored healing_l +const int VFX_IMP_HEALING_L_MAG = 1101; +const int VFX_IMP_HEALING_L_ORA = 1102; +const int VFX_IMP_HEALING_L_LAW = 1103; +const int VFX_IMP_HEALING_L_SPR = 1104; +const int VFX_IMP_HEALING_L_VIO = 1105; +const int VFX_IMP_HEALING_L_RED = 1106; +const int VFX_IMP_HEALING_L_SILENT = 1107; +const int VFX_IMP_HEALING_L_SOUNDFX = 1108; + + +// recolored healing_G +const int VFX_IMP_HEALING_G_MAG = 1112; +const int VFX_IMP_HEALING_G_LAW = 1113; +const int VFX_IMP_HEALING_G_SPR = 1114; +const int VFX_IMP_HEALING_G_VIO = 1115; +const int VFX_IMP_HEALING_G_RED = 1116; +const int VFX_IMP_HEALING_G_SILENT = 1117; +const int VFX_IMP_HEALING_G_SOUNDFX = 1118; + + +// recolored healing_X +const int VFX_IMP_HEALING_X_MAG = 1122; +const int VFX_IMP_HEALING_X_ORA = 1123; +const int VFX_IMP_HEALING_X_LAW = 1124; +const int VFX_IMP_HEALING_X_SPR = 1125; +const int VFX_IMP_HEALING_X_VIO = 1126; +const int VFX_IMP_HEALING_X_SILENT = 1127; +const int VFX_IMP_HEALING_X_SOUNDFX = 1128; + + +// recolored magic impact VFX - these are for use with the recolorded MIRV (magic missile) FX +const int VFX_IMP_MAGCYA = 1132; +const int VFX_IMP_MAGBLU = 1133; +const int VFX_IMP_MAGVIO = 1134; +const int VFX_IMP_MAGPUR = 1135; +const int VFX_IMP_MAGRED = 1136; +const int VFX_IMP_MAGMAG = 1137; +const int VFX_IMP_MAGORA = 1138; +const int VFX_IMP_MAGYEL = 1139; +const int VFX_IMP_MAGLAW = 1140; +const int VFX_IMP_MAGGRN = 1141; +const int VFX_IMP_MAG_SOUNDFX = 1142; + + +// tornadoheal VFX recolored +const int VFX_IMP_TORNADO_L_SILENT = 990; +const int VFX_IMP_TORNADO_L_MAG = 991; +const int VFX_IMP_TORNADO_L_ORA = 992; +const int VFX_IMP_TORNADO_L_LAW = 993; +const int VFX_IMP_TORNADO_L_SPR = 994; +const int VFX_IMP_TORNADO_L_VIO = 995; +const int VFX_IMP_TORNADO_L_RED = 996; +const int VFX_IMP_TORNADO_L_SOUNDFX = 997; + + +// recolored flame_M effects +const int VFX_IMP_FLAME_M_SILENT = 1157; +const int VFX_IMP_FLAME_M_CYAN = 1158; +const int VFX_IMP_FLAME_M_GREEN = 1159; +const int VFX_IMP_FLAME_M_MAGENTA = 1160; +const int VFX_IMP_FLAME_M_PURPLE = 1161; +const int VFX_IMP_FLAME_M_SOUNDFX = 1162; + + +// recolored spell mantle ground VFX. I tried the impact VFX to and didn't get them working yet. +const int VFX_DUR_SPELLTURNING_SILENT = 1166; +const int VFX_DUR_SPELLTURNING_P = 1167; +const int VFX_DUR_SPELLTURNING_R = 1168; +const int VFX_DUR_SPELLTURNING_Y = 1169; +const int VFX_DUR_SPELLTURNING_G = 1170; +const int VFX_DUR_SPELLTURNING_C = 1171; +const int VFX_DUR_SPELLTURNING_O = 1172; +const int VFX_DUR_SPELLTURNING_V = 1173; +const int VFX_DUR_SPELLTURNING_S = 1174; +const int VFX_DUR_SPELLTURNING_M = 1175; +const int VFX_DUR_SPELLTURNING_SOUNDFX = 1176; + + +// recolored Magic resistence VFX rings +const int VFX_DUR_MAGIC_RESISTANCE_SILENT = 1180; +const int VFX_DUR_MAGIC_RESISTANCE_G = 1181; +const int VFX_DUR_MAGIC_RESISTANCE_B = 1182; +const int VFX_DUR_MAGIC_RESISTANCE_P = 1183; +const int VFX_DUR_MAGIC_RESISTANCE_O = 1184; +const int VFX_DUR_MAGIC_RESISTANCE_Y = 1185; +const int VFX_DUR_MAGIC_RESISTANCE_SOUNDFX = 1186; + + +// recolored IMP Magic VFX (the impact for "Spell Resistence") +const int VFX_IMP_MAGIC_PROTECTION_SILENT = 1190; +const int VFX_IMP_MAGIC_PROTECTION_G = 1191; +const int VFX_IMP_MAGIC_PROTECTION_B = 1192; +const int VFX_IMP_MAGIC_PROTECTION_P = 1193; +const int VFX_IMP_MAGIC_PROTECTION_O = 1194; +const int VFX_IMP_MAGIC_PROTECTION_Y = 1195; +const int VFX_IMP_MAGIC_PROTECTION_SOUND = 1196; + + +// recolored holy strike VFX +const int VFX_FNF_STRIKE_HOLY_SILENT = 1200; +const int VFX_FNF_STRIKE_HOLY_G = 1201; +const int VFX_FNF_STRIKE_HOLY_C = 1202; +const int VFX_FNF_STRIKE_HOLY_B = 1203; +const int VFX_FNF_STRIKE_HOLY_P = 1204; +const int VFX_FNF_STRIKE_HOLY_R = 1205; +const int VFX_FNF_STRIKE_HOLY_O = 1206; +const int VFX_FNF_STRIKE_HOLY_SOUNDFX = 1207; + + +// recolored ability score buff VFX +const int VFX_IMP_IMPROVE_ABILITY_SCORE_SILENT = 1211; +const int VFX_IMP_IMPROVE_ABILITY_SCORE_A = 1212; +const int VFX_IMP_IMPROVE_ABILITY_SCORE_B = 1213; +const int VFX_IMP_IMPROVE_ABILITY_SCORE_C = 1214; +const int VFX_IMP_IMPROVE_ABILITY_SCORE_D = 1215; +const int VFX_IMP_IMPROVE_ABILITY_SCORE_E = 1216; +const int VFX_IMP_IMPROVE_ABILITY_SCORE_SOUNDFX = 1217; + + +// recolroed "reduce ability score" vfx, with the darkness FX removed +const int VFX_IMP_REDUCE_ABILITY_SCORE_RED = 1221; +const int VFX_IMP_REDUCE_ABILITY_SCORE_YEL = 1222; +const int VFX_IMP_REDUCE_ABILITY_SCORE_ORA = 1223; +const int VFX_IMP_REDUCE_ABILITY_SCORE_GRN = 1224; +const int VFX_IMP_REDUCE_ABILITY_SCORE_CYA = 1225; +const int VFX_IMP_REDUCE_ABILITY_SCORE_BLU = 1226; +const int VFX_IMP_REDUCE_ABILITY_SCORE_PUR = 1227; +const int VFX_IMP_REDUCE_ABILITY_SCORE_SOUNDFX = 1228; + +// Nother Set of Shadguy/DN VFX +const int TOF_VFX_ALARM_AUDIBLE = 1229; +const int TOF_VFX_ALARM_MENTAL = 1230; +const int VFX_COM_HIT_NEGATIVE2 = 1231; +const int VFX_COM_HIT_POSITIVE = 1232; +const int VFX_IMP_UNSUMMON_RED = 1233; +const int VFX_IMP_UNSUMMON_YEL = 1234; +const int VFX_FNF_LOS_GREEN_10 = 1235; +const int VFX_FNF_LOS_GREEN_20 = 1236; +const int VFX_FNF_LOS_GREEN_30 = 1237; +const int VFX_FNF_LOS_BLUE_10 = 1238; +const int VFX_FNF_LOS_BLUE_20 = 1239; +const int VFX_FNF_LOS_BLUE_30 = 1240; +const int TOF_VFX_FNF_ALARM_DINGDONG = 1241; +const int VFX_IMP_LONGSTRIDER = 1242; +const int VFX_FNF_RUSTING_GRASP = 1243; +const int VFX_IMP_EXPRETREAT = 1244; +const int VFX_DUR_ROOTED_TO_SPOT = 1245; +const int VFX_IMP_DAWN = 1246; +const int VFX_DUR_MARK_OF_THE_HUNTER = 1247; +const int VFX_DUR_HEARD = 1248; +const int VFX_DUR_SEEN = 1249; +const int VFX_IMP_SOUND_SYMBOL_NEC = 1250; +const int VFX_IMP_SOUND_SYMBOL_EVO = 1251; +const int VFX_IMP_SOUND_SYMBOL_ENC = 1252; +const int VFX_IMP_SOUND_SYMBOL_DEATH = 1253; +const int VFX_IMP_SOUND_SYMBOL_INSANITY = 1254; +const int VFX_IMP_SOUND_SYMBOL_WEAKNESS = 1255; +const int VFX_IMP_SOUND_SYMBOL_STUNNING = 1256; +const int VFX_IMP_SOUND_SYMBOL_FEAR = 1257; +const int VFX_IMP_SOUND_SYMBOL_SLEEP = 1258; +const int VFX_IMP_SOUND_SYMBOL_PAIN = 1259; +const int VFX_FNF_MASS_CURE = 1260; +const int VFX_FNF_MASS_INFLICT = 1261; +const int VFX_IMP_HEALING_X_UNDEAD = 1262; +const int VFX_IMP_BONUS_STRENGTH = 1263; +const int VFX_IMP_BONUS_DEXTERITY = 1264; +const int VFX_IMP_BONUS_CONSTITUTION = 1265; +const int VFX_IMP_BONUS_INTELLIGENCE = 1266; +const int VFX_IMP_BONUS_WISDOM = 1267; +const int VFX_IMP_BONUS_CHARISMA = 1268; +const int VFX_DUR_BRIGHT_LIGHT_WHITE = 1269; +const int VFX_DUR_BRIGHT_LIGHT_RED = 1270; +const int VFX_DUR_BRIGHT_LIGHT_ORANGE = 1271; +const int VFX_DUR_BRIGHT_LIGHT_YELLOW = 1272; +const int VFX_DUR_BRIGHT_LIGHT_GREEN = 1273; +const int VFX_DUR_BRIGHT_LIGHT_BLUE = 1274; +const int VFX_DUR_BRIGHT_LIGHT_MAGENTA = 1275; +const int VFX_DUR_BRIGHT_LIGHT_RED_TO_ORANGE = 1276; +const int VFX_DUR_BRIGHT_LIGHT_ORANGE_TO_YELLOW = 1277; +const int VFX_DUR_BRIGHT_LIGHT_YELLOW_TO_GREEN = 1278; +const int VFX_DUR_BRIGHT_LIGHT_GREEN_TO_BLUE = 1279; +const int VFX_DUR_BRIGHT_LIGHT_BLUE_TO_MAGENTA = 1280; +const int VFX_DUR_BRIGHT_LIGHT_MAGENTA_TO_RED = 1281; +const int VFX_DUR_BRIGHT_LIGHT_CYAN = 1282; +const int VFX_DUR_BRIGHT_LIGHT_WHITE_PULSE_SLOW = 1283; +const int VFX_DUR_BRIGHT_LIGHT_RED_PULSE_SLOW = 1284; +const int VFX_DUR_BRIGHT_LIGHT_ORANGE_PULSE_SLOW = 1285; +const int VFX_DUR_BRIGHT_LIGHT_YELLOW_PULSE_SLOW = 1286; +const int VFX_DUR_BRIGHT_LIGHT_GREEN_PULSE_SLOW = 1287; +const int VFX_DUR_BRIGHT_LIGHT_BLUE_PULSE_SLOW = 1288; +const int VFX_DUR_BRIGHT_LIGHT_INDIGO_PULSE_SLOW = 1289; +const int VFX_DUR_BRIGHT_LIGHT_CYAN_PULSE_SLOW = 1290; +const int VFX_DUR_BRIGHT_LIGHT_WHITE_PULSE_FAST = 1291; +const int VFX_DUR_BRIGHT_LIGHT_RED_PULSE_FAST = 1292; +const int VFX_DUR_BRIGHT_LIGHT_ORANGE_PULSE_FAST = 1293; +const int VFX_DUR_BRIGHT_LIGHT_YELLOW_PULSE_FAST = 1294; +const int VFX_DUR_BRIGHT_LIGHT_GREEN_PULSE_FAST = 1295; +const int VFX_DUR_BRIGHT_LIGHT_BLUE_PULSE_FAST = 1296; +const int VFX_DUR_BRIGHT_LIGHT_INDIGO_PULSE_FAST = 1297; +const int VFX_DUR_BRIGHT_LIGHT_CYAN_PULSE_FAST = 1298; +const int VFX_DUR_BRIGHT_LIGHT_RED_ORANGE_DISCO = 1299; +const int VFX_DUR_BRIGHT_LIGHT_ORANGE_YELLOW_DISCO = 1300; +const int VFX_DUR_BRIGHT_LIGHT_YELLOW_GREEN_DISCO = 1301; +const int VFX_DUR_BRIGHT_LIGHT_GREEN_BLUE_DISCO = 1302; +const int VFX_DUR_BRIGHT_LIGHT_BLUE_MAGENTA_DISCO = 1303; +const int VFX_DUR_BRIGHT_LIGHT_MAGENTA_RED_DISCO = 1304; +const int VFX_DUR_BRIGHT_LIGHT_DISCO_DISCO_DISCO = 1305; +const int VFX_DUR_BRIGHT_LIGHT_WHITE_PULSE_STROBE = 1306; +const int VFX_DUR_BRIGHT_LIGHT_RED_PULSE_STROBE = 1307; +const int VFX_DUR_BRIGHT_LIGHT_ORANGE_PULSE_STROBE = 1308; +const int VFX_DUR_BRIGHT_LIGHT_YELLOW_PULSE_STROBE = 1309; +const int VFX_DUR_BRIGHT_LIGHT_GREEN_PULSE_STROBE = 1310; +const int VFX_DUR_BRIGHT_LIGHT_BLUE_PULSE_STROBE = 1311; +const int VFX_DUR_BRIGHT_LIGHT_INDIGO_PULSE_STROBE = 1312; +const int VFX_DUR_BRIGHT_LIGHT_CYAN_PULSE_STROBE = 1313; +const int VFX_DUR_BRIGHT_LIGHT_BRASS = 1314; +const int VFX_DUR_BRIGHT_LIGHT_GOLD = 1315; +const int VFX_DUR_BRIGHT_LIGHT_LIME = 1316; +const int VFX_DUR_BRIGHT_LIGHT_TURQUOISE = 1317; +const int VFX_DUR_BRIGHT_LIGHT_INDIGO = 1318; +const int VFX_DUR_BRIGHT_LIGHT_VIOLET = 1319; +const int VFX_FNF_LOS_WHITE_10 = 1320; +const int VFX_FNF_LOS_WHITE_20 = 1321; +const int VFX_FNF_LOS_WHITE_30 = 1322; +const int VFX_FNF_LOS_PURPLE_10 = 1323; +const int VFX_FNF_LOS_PURPLE_20 = 1324; +const int VFX_FNF_LOS_PURPLE_30 = 1325; +const int VFX_DUR_BRIGHT_LIGHT_DISCO_SINGLE = 1326; +const int VFX_FNF_LOS_PURPLE_30_SILENT = 1327; + +//Baelnorn eyes by Tenjac +const int VFX_DUR_BAELN_EYES = 808; + +//Supamans Custom VFX for psionics & epic spells +const int VFX_IMP_EPIC_GEM_EMERALD = 809; +const int VFX_IMP_EPIC_GEM_SAPPHIRE = 810; +const int VFX_IMP_EPIC_GEM_DIAMOND = 811; +const int VFX_PRC_FNF_EARTHQUAKE = 812; +const int PSI_IMP_ULTRABLAST = 813; +const int PSI_DUR_TIMELESS_BODY = 814; +const int PSI_DUR_TEMPORAL_ACCELERATION = 815; +const int PSI_DUR_SHADOW_BODY = 816; +const int PSI_FNF_PSYCHIC_CRUSH = 817; +const int EPIC_DUR_FLEETNESS_OF_FOOT = 818; +const int PSI_DUR_ENERGY_ADAPTATION_ALL = 819; +const int PSI_DUR_BURST = 823; +const int PSI_FNF_CRISIS_OF_LIFE = 824; +const int PSI_FNF_RECALL_AGONY = 825; +const int PSI_DUR_SYNESTHETE = 826; +const int PSI_IMP_CONCUSSION_BLAST = 827; +const int PSI_FNF_PSYCHIC_CHIRURGY = 829; +const int PSI_FNF_ASTRAL_SEED = 830; +const int PSI_DUR_INTELLECT_FORTRESS = 831; +const int PSI_DUR_DISPELLING_BUFFER = 832; +//Spellfire +const int VFX_FNF_SPELLF_EXP = 797; +const int VFX_IMP_SPELLF_FLAME = 798; +const int VFX_IMP_SPELLF_HEAL = 799; +const int VFX_BEAM_SPELLFIRE = 800; + +const int VFX_DUR_STONE3 = 834; +const int VFX_DUR_STONE4 = 835; +const int VFX_DUR_STONE5 = 836; +const int VFX_DUR_AIR1 = 837; +const int VFX_DUR_AIR2 = 838; + +//split-effects +const int VFX_DUR_PROT_PRC_STONESKIN = 839; +const int VFX_DUR_PROT_PRC_CIRCLEROCK = 840; +const int VFX_DUR_PROT_PRC_SHADOW_ARMOR = 841; +const int VFX_DUR_PROT_PRC_CIRCLESHAD = 842; + +////////////////////////////////////////////////// +/* Soopaman's VFX from SMP (Granted to us now) */ +////////////////////////////////////////////////// + +const int VFX_FNF_TORNADO = 851; +const int VFX_IMP_PWBLIND = 852; +const int VFX_IMP_RED_MISSLE = 853; +const int VFX_IMP_MAGRED_SMP = 854; +const int VFX_IMP_ICEWHIP = 855; +const int VFX_IMP_GRN_MISSLE = 856; +const int VFX_IMP_NEGBLAST_ENERGY = 857; +const int VFX_DUR_PRISMATIC_SPHERE = 858; +const int VFX_FNF_NEWWORD = 859; +const int VFX_DUR_BIGBYS_BIGBLUE_HAND2 = 860; +const int VFX_FNF_AWAKEN = 861; +const int VFX_FNF_CHAOSHAMMER = 862; +const int VFX_FNF_OTIL_COLDSPHERE = 863; +const int VFX_DUR_MAZE = 864; +const int VFX_DUR_CHILL_SHIELD = 865; +const int VFX_FNF_DRAGON_STRIKE = 866; +const int VFX_DUR_SHADOWS_ANTILIGHT = 867; +const int VFX_DUR_PROTECTION_ARROWS = 868; +const int VFX_FNF_HELLFIRE = 869; +const int VFX_FNF_HELLFIRESTORM = 870; +const int VFX_DUR_BLUESHIELDPROTECT = 871; +const int VFX_IMP_REGENERATE_IMPACT = 872; +const int VFX_FNF_BATSGIB = 873; +const int VFX_DUR_STORM_OF_VENGEANCE = 874; +const int VFX_IMP_FREEDOM = 875; +const int VIM_IMP_DIMENSIONDOOR_IN = 876; +const int VIM_IMP_DIMENSIONDOOR_OUT = 877; +const int VFX_DUR_ANTILIFE_SHELL = 878; +const int VFX_DUR_LIGHTNING_SHELL = 879; +const int VFX_IMP_DISENTIGRATION = 880; +const int VFX_IMP_DIMENSIONANCHOR = 881; +const int VFX_IMP_DIMENSIONLOCK = 882; +const int VFX_FNF_GLITTERDUST = 883; +const int VFX_FNF_INSANITY = 884; +const int VFX_IMP_IMPRISONMENT = 885; +const int VFX_DUR_PROTECTION_ENERGY_ACID = 886; +const int VFX_DUR_PROTECTION_ENERGY_COLD = 887; +const int VFX_DUR_PROTECTION_ENERGY_FIRE = 888; +const int VFX_DUR_PROTECTION_ENERGY_ELECT = 889; +const int VFX_DUR_PROTECTION_ENERGY_SONIC = 890; +const int VFX_DUR_PRISMATIC_WALL = 891; +const int VFX_FNF_FEEBLEMIND = 892; +const int VFX_FNF_SUMMON_NATURES_ALLY_1 = 893; +const int VFX_FNF_MAGIC_WEAPON = 894; +const int VFX_FNF_DEATH_WATCH = 895; +const int VFX_IMP_FAERIE_FIRE = 896; +const int VFX_DUR_RESISTANCE = 897; +const int VFX_IMP_EPIC_GEM_EMERALD_SMP = 898; +const int VFX_IMP_EPIC_GEM_SAPPHIRE_SMP = 899; +const int VFX_IMP_EPIC_GEM_DIAMOND_SMP = 900; +const int VFX_PERM_ELEMENTAL_SAVANT_WATER = 901; +const int VFX_PERM_ELEMENTAL_SAVANT_FIRE = 902; +const int VFX_FNF_SOUL_TRAP = 903; +const int VFX_DUR_AURA_LAW = 904; +const int VFX_DUR_SHIELD_OF_FAITH = 905; +const int VFX_FNF_CALM_ANIMALS = 906; +const int VFX_DUR_ENTROPIC_SHIELD = 907; +const int VFX_DUR_FLOATING_DISK = 908; +const int VFX_DUR_OBSCURING_MIST = 909; +const int VFX_IMP_MAGIC_ROCK = 910; +const int VFX_IMP_SHILLELAGH = 911; +const int VFX_FNF_METEORSWARM_IMPACT = 912; +const int VFX_FNF_SMP_GATE = 913; +const int VFX_FNF_ARMAGEDDON = 914; +const int VFX_DUR_SPHERE_OF_ANHILIATION = 915; +const int VFX_DUR_CHAOS_CLOAK = 916; +const int VFX_AOE_DESECRATE_20 = 917; +const int VFX_AOE_DESECRATE_100 = 918; +const int VFX_FNF_INVISIBILITY_SPHERE = 919; +const int VFX_DUR_DAYLIGHT = 920; +const int VFX_DUR_FLAMING_SPHERE = 921; +const int VFX_FNF_VAMPIRIC_DRAIN_PRC = 922; +const int VFX_FNF_BLASPHEMY = 923; +const int VFX_DUR_SHIELD_OF_LAW = 924; +const int VFX_DUR_UNHOLY_AURA_SMP = 925; +const int VFX_DUR_HOLY_AURA_SMP = 926; +const int VFX_DUR_PROT_IRON_SKIN = 927; +const int VFX_FNF_EARTHQUAKE_FISSURE = 928; +const int VFX_FNF_ORDERS_WRATH = 929; +const int VFX_DUR_RAINBOW_PATTERN = 930; +const int VFX_FNF_HOLY_SMITE_BATMAN = 931; +const int VFX_FNF_P2P_TESTER_OF_D3WM = 932; +const int VFX_FNF_PYRO_FIREWORKS_REDORANGE = 933; +const int VFX_DUR_BLOOD_FOUNTAIN = 934; +const int VFX_IMP_DISENTIGRATION_SMP = 935; +const int VFX_IMP_SPARKS = 936; +const int VFX_AOE_FORBIDDANCE = 937; +const int VFX_DUR_CROWN_OF_GLORY = 938; +const int VFX_DUR_ARMOR_OF_DARKNESS = 939; +const int VFX_FNF_MAGIC_VESTAMENT = 940; +const int VFX_DUR_FREEDOM_MOVEMENT = 941; +const int VFX_PRC_FNF_EARTHQUAKE_SMP = 942; +const int VFX_DUR_TEMPORAL_STASIS = 943; +const int VFX_DUR_RESILIENT_SPHERE = 944; +const int VFX_DUR_DEATHWARD = 945; +const int VFX_DUR_PHASE_DOOR = 946; +const int VFX_FNF_SCINTILLATING_PATTERN = 947; +const int VFX_IMP_DRAGONBLAST = 948; +const int VFX_FNF_DEEP_SLUMBER = 949; +const int VFX_AOE_ZONE_OF_TRUTH = 950; + +const int VFX_IMP_FAERIE_FIRE_BLUE = 951; +const int VFX_IMP_FAERIE_FIRE_GREEN = 952; +const int VFX_IMP_FAERIE_FIRE_VIOLET = 953; + +//Tenser's Floating discs +const int VFX_DUR_FLOATING_DISK_BLUE = 954; +const int VFX_DUR_FLOATING_DISK_GREEN = 955; +const int VFX_DUR_FLOATING_DISK_YELLOW = 956; +const int VFX_DUR_FLOATING_DISK_ORANGE = 957; +const int VFX_DUR_FLOATING_DISK_RED = 958; +const int VFX_DUR_FLOATING_DISK_PURPLE = 959; +const int VFX_DUR_FLOATING_DISK_GREY = 960; + +//Recolored Dragon Disciple breath weapon +const int VFX_FNF_DRAGBREATHACID = 961; +const int VFX_FNF_DRAGBREATHCOLD = 962; +const int VFX_FNF_DRAGBREATHELEC = 963; +const int VFX_FNF_DRAGBREATHSONIC = 964; +const int VFX_FNF_DRAGBREATHHOLY = 965; +const int VFX_FNF_DRAGBREATHGAS = 966; +const int VFX_FNF_DRAGBREATHMIND = 967; +const int VFX_FNF_DRAGBREATHODD = 968; + +//Consecrate/Desecrate Effects +const int VFX_TN_DES_20 = 801; +const int VFX_TN_DES_100 = 802; +const int VFX_CON_20 = 803; +const int VFX_DES_20 = 804; + +//ioun stones +const int VFX_IOUN_STONE_GREY = 969; +const int VFX_IOUN_STONE_ROSE = 970; +const int VFX_IOUN_STONE_CLEAR = 971; +const int VFX_IOUN_STONE_PALEBLUE = 972; +const int VFX_IOUN_STONE_SCARLETBLUE = 973; +const int VFX_IOUN_STONE_INCANBLUE = 974; +const int VFX_IOUN_STONE_RED = 975; +const int VFX_IOUN_STONE_PINK = 976; +const int VFX_IOUN_STONE_PINKGREEN = 977; +const int VFX_IOUN_STONE_BLUE = 978; +const int VFX_IOUN_STONE_PURPLE = 979; +const int VFX_IOUN_STONE_IRIDESCENT = 980; +const int VFX_IOUN_STONE_PALEGREEN = 981; +const int VFX_IOUN_STONE_WHITE = 982; +const int VFX_IOUN_STONE_LAVENDER = 983; +const int VFX_IOUN_STONE_LAVENDERGREEN = 984; + +const int VFX_FNF_ACIDSTORM = 1014; +const int VFX_FNF_EXPLOSION_ACID = 821; +const int VFX_FNF_EXPLOSION_COLD = 822; +const int VFX_DUR_SYMB_DEATH = 783; +const int VFX_DUR_SYMB_FEAR = 784; +const int VFX_DUR_SYMB_INSAN = 785; +const int VFX_DUR_SYMB_PAIN = 786; +const int VFX_DUR_SYMB_PERS = 787; +const int VFX_DUR_SYMB_SLEEP = 788; +const int VFX_DUR_SYMB_STUN = 789; +const int VFX_DUR_SYMB_WEAK = 790; +const int VFX_DUR_GLYPH_OF_WARDING_BLUE = 791; +const int VFX_DUR_GLYPH_OF_WARDING_COLD = 792; +const int VFX_DUR_GLYPH_OF_WARDING_RED = 793; +const int VFX_DUR_GLYPH_OF_WARDING_VIOLET = 794; +const int VFX_DUR_GLYPH_OF_WARDING_WHITE = 795; +const int VFX_DUR_GLYPH_OF_WARDING_YELLOW = 796; + +const int VFX_DUR_AURA_CHAOS = 752;//violet +const int VFX_DUR_AURA_EVIL = 753;//red +const int VFX_DUR_AURA_GOOD = 754;//yellow +const int VFX_DUR_AURA_LAW2 = 755;//blue +const int VFX_DUR_AURA_UNDEAD = 756;//? +const int VFX_DUR_GR_AURA_CHAOS = 757; +const int VFX_DUR_GR_AURA_EVIL = 758; +const int VFX_DUR_GR_AURA_GOOD = 759; +const int VFX_DUR_GR_AURA_LAW = 760; +const int VFX_DUR_GR_AURA_UNDEAD = 761; +const int VFX_DUR_DETECT = 762; +const int VFX_IMP_DIVINE_STRIKE_ACID = 764; +const int VFX_IMP_DIVINE_STRIKE_COLD = 765; +const int VFX_IMP_DIVINE_STRIKE_SONIC = 766; \ No newline at end of file diff --git a/src/include/inv_inc_blast.nss b/src/include/inv_inc_blast.nss new file mode 100644 index 0000000..683b9cd --- /dev/null +++ b/src/include/inv_inc_blast.nss @@ -0,0 +1,162 @@ +#include "prc_inc_clsfunc" + +int GetBlastDamageDices(object oInvoker, int nInvokerLevel) +{ + int nDmgDice; + if(nInvokerLevel < 13) + nDmgDice = (nInvokerLevel + 1) / 2; + else if(nInvokerLevel < 20) + nDmgDice = (nInvokerLevel + 7) / 3; + else + nDmgDice = 9 + (nInvokerLevel - 20) / 2; + + //check for the epic feats + if(GetHasFeat(FEAT_EPIC_ELDRITCH_BLAST_I, oInvoker)) + { + int nFeatAmt = 0; + int bDone = FALSE; + while(!bDone) + { if(nFeatAmt >= 9) + bDone = TRUE; + else if(GetHasFeat(FEAT_EPIC_ELDRITCH_BLAST_II + nFeatAmt, oInvoker)) + nFeatAmt++; + else + bDone = TRUE; + } + nDmgDice += nFeatAmt; + } + + return nDmgDice; +} + +// Spellblast should use only AoE spells but Dispel Magic can be cast as AoE or single target +// we make sure here that we use AoE version +int CheckSpecialTarget(int nSpellID) +{ + return nSpellID == SPELL_DISPEL_MAGIC + || nSpellID == SPELL_GREATER_DISPELLING + || nSpellID == SPELL_LESSER_DISPEL + || nSpellID == SPELL_MORDENKAINENS_DISJUNCTION + || nSpellID == SPELL_POWER_WORD_KILL; +} + +void DoSpellBlast(object oPC, int bHit) +{ + int nSpellbookID = GetLocalInt(oPC, "ET_SPELL_CURRENT"); +//DoDebug("nSpellbookID = "+IntToString(nSpellbookID)); + if(nSpellbookID) + { + object oTarget = GetSpellTargetObject(); + if(GetIsObjectValid(oTarget)) + { + nSpellbookID--; + DeleteLocalInt(oPC, "ET_SPELL_CURRENT"); + int nSpellID = GetLocalInt(oPC, "ET_REAL_SPELL_CURRENT"); +//DoDebug("nSpellID = "+IntToString(nSpellID)); + string sArray = GetLocalString(oPC, "ET_SPELL_CURRENT"); +//DoDebug("sArray = "+sArray); + int nUses = sArray == "" ? GetHasSpell(nSpellbookID, oPC) : + persistant_array_get_int(oPC, sArray, nSpellbookID); + + if(nUses) + { + // expend spell use + if(sArray == "") + { + DecrementRemainingSpellUses(oPC, nSpellID); + } + else + { + nUses--; + persistant_array_set_int(oPC, sArray, nSpellbookID, nUses); + } + + // use AoE Dispel Magic + int bTargetOverride = CheckSpecialTarget(nSpellID); + + if(bHit) + { + int nCastingClass = GetETArcaneClass(oPC); + int nDC = 10 + PRCGetSpellLevelForClass(nSpellID, nCastingClass) + GetDCAbilityModForClass(nCastingClass, oPC); + //clear action queue to apply spell effect right after blast effect + ClearAllActions(); + //override PRCDoMeleeTouchAttack() - we already know that blast hit + ActionDoCommand(SetLocalInt(oPC, "AttackHasHit", bHit)); + SetLocalInt(oPC, "EldritchSpellBlast", TRUE); + if(DEBUG) DoDebug("inv_inc_blast >> EldritchSpellBlast Set"); + ActionCastSpell(nSpellID, 0, nDC, 0, METAMAGIC_NONE, nCastingClass, FALSE, bTargetOverride); + ActionDoCommand(DeleteLocalInt(oPC, "AttackHasHit")); + DelayCommand(0.5, DeleteLocalInt(oPC, "EldritchSpellBlast")); + } + } + } + } +} + +void ApplyBlastDamage(object oCaster, object oTarget, int iAttackRoll, int iSR, int iDamage, int iDamageType, int iDamageType2, int nHellFire, int bSneak = TRUE, int nMsg = FALSE) +{ + if (DEBUG) DoDebug("ApplyBlastDamage oCaster "+GetName(oCaster)+" oTarget "+GetName(oTarget)+" iAttackRoll "+IntToString(iAttackRoll)+" iSR "+IntToString(iSR)+" iDamage "+IntToString(iDamage)+" iDamageType "+IntToString(iDamageType)+" iDamageType2 "+IntToString(iDamageType2)+" nHellFire "+IntToString(nHellFire)+" bSneak "+IntToString(bSneak)+" nMsg "+IntToString(nMsg)); + + // Is it a critical hit? + iDamage *= iAttackRoll; + if(iAttackRoll) + { + // Heal the Undead + if (iDamageType == DAMAGE_TYPE_NEGATIVE && (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD || GetLocalInt(oTarget, "AcererakHealing") || (GetHasFeat(FEAT_TOMB_TAINTED_SOUL, oTarget) && GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD))) + { + //Set the heal effect + effect eHeal = EffectHeal(iDamage); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget); + } + else // Other targets + { + if(!GetPRCSwitch(PRC_SPELL_SNEAK_DISABLE) && bSneak) + iDamage += SpellSneakAttackDamage(oCaster, oTarget); + + effect eDamage; + if(!iSR) + { + if(iDamageType == iDamageType2) + eDamage = EffectDamage(iDamage, iDamageType); + else + { + eDamage = EffectDamage(iDamage / 2, iDamageType); + eDamage = EffectLinkEffects(eDamage, EffectDamage(iDamage / 2, iDamageType2)); + } + if(nHellFire) + eDamage = EffectLinkEffects(eDamage, EffectDamage(d6(nHellFire), DAMAGE_TYPE_DIVINE)); + } + else if(iDamageType == DAMAGE_TYPE_ACID || iDamageType2 == DAMAGE_TYPE_ACID) + { + if(iDamageType == iDamageType2) + eDamage = EffectDamage(iDamage, iDamageType); + else + eDamage = EffectDamage(iDamage / 2, iDamageType); + } + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget); + } + } +} + +int HellFireConDamage(object oPC) +{ + if(GetIsImmune(oPC, IMMUNITY_TYPE_ABILITY_DECREASE)) + { + if(DEBUG) DoDebug("HellFireConDamage: Immune to ability damage!"); + return FALSE; + } + + ApplyAbilityDamage(oPC, ABILITY_CONSTITUTION, 1, DURATION_TYPE_TEMPORARY, TRUE, -1.0); + return TRUE; +} + +int GetIsHellFireBlast(object oPC) +{ + if(GetLocalInt(oPC, "INV_HELLFIRE")) + { + DeleteLocalInt(oPC, "INV_HELLFIRE"); + return TRUE; + } + return FALSE; +} diff --git a/src/include/inv_inc_invfunc.nss b/src/include/inv_inc_invfunc.nss new file mode 100644 index 0000000..ba50935 --- /dev/null +++ b/src/include/inv_inc_invfunc.nss @@ -0,0 +1,887 @@ +//:://///////////////////////////////////////////// +//:: Invocation include: Miscellaneous +//:: inv_inc_invfunc +//:://///////////////////////////////////////////// +/** @file + Defines various functions and other stuff that + do something related to Invocation implementation. + + Also acts as inclusion nexus for the general + invocation includes. In other words, don't include + them directly in your scripts, instead include this. + + @author Fox + @date Created - 2008.1.25 + + Updated for .35 by Jaysyn 2023/03/10 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const int INVOCATION_DRACONIC = 1; +const int INVOCATION_WARLOCK = 2; + +const int INVOCATION_LEAST = 2; +const int INVOCATION_LESSER = 4; +const int INVOCATION_GREATER = 6; +const int INVOCATION_DARK = 8; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +//:: Updates the Invocation DC for Ability Focus feats. +int InvokerAbilityFocus(object oPC, int nEssence, int nEssence2 = -1); + +/** + * Determines from what class's invocation list the currently casted + * invocation is cast from. + * + * @param oInvoker A creature invoking at this moment + * @return CLASS_TYPE_* constant of the class + */ +int GetInvokingClass(object oInvoker = OBJECT_SELF); + +/** + * Determines the given creature's Invoker level. If a class is specified, + * then returns the Invoker level for that class. Otherwise, returns + * the Invoker level for the currently active invocation. + * + * @param oInvoker The creature whose Invoker level to determine + * @param nSpecificClass The class to determine the creature's Invoker + * level in. + * @param bPracticedInvoker If this is set, it will add the bunus from + * Practiced Invoker feat. + * @return The Invoker level + */ +int GetInvokerLevel(object oInvoker = OBJECT_SELF, int nSpecificClass = CLASS_TYPE_INVALID, int bPracticedInvoker = TRUE); + +/** + * Determines whether a given creature uses Invocations. + * Requires either levels in an invocation-related class or + * natural Invocation ability based on race. + * + * @param oCreature Creature to test + * @return TRUE if the creature can use Invocations, FALSE otherwise. + */ +int GetIsInvocationUser(object oCreature); + +/** + * Determines the given creature's highest undmodified Invoker level among it's + * invoking classes. + * + * @param oCreature Creature whose highest Invoker level to determine + * @return The highest unmodified Invoker level the creature can have + */ +int GetHighestInvokerLevel(object oCreature); + +/** + * Determines whether a given class is an invocation-related class or not. + * + * @param nClass CLASS_TYPE_* of the class to test + * @return TRUE if the class is an invocation-related class, FALSE otherwise + */ +int GetIsInvocationClass(int nClass); + +/** + * Gets the level of the invocation being currently cast. + * WARNING: Return value is not defined when an invocation is not being cast. + * + * @param oInvoker The creature currently casting an invocation + * @return The level of the invocation being cast + */ +int GetInvocationLevel(object oInvoker); + +/** + * Returns the name of the invocation + * + * @param nSpellId SpellId of the invocation + */ +string GetInvocationName(int nSpellId); + +/** + * Calculates how many invoker levels are gained by a given creature from + * it's levels in prestige classes. + * + * @param oCreature Creature to calculate added invoker levels for + * @return The number of invoker levels gained + */ +int GetInvocationPRCLevels(object oCaster); + +/** + * Determines which of the character's classes is their highest or first invocation + * casting class, if any. This is the one which gains invoker level raise benefits + * from prestige classes. + * + * @param oCreature Creature whose classes to test + * @return CLASS_TYPE_* of the first invocation casting class, + * CLASS_TYPE_INVALID if the creature does not possess any. + */ +int GetPrimaryInvocationClass(object oCreature = OBJECT_SELF); + +/** + * Determines the position of a creature's first invocation casting class, if any. + * + * @param oCreature Creature whose classes to test + * @return The position of the first invocation class {1, 2, 3} or 0 if + * the creature possesses no levels in invocation classes. + */ +int GetFirstInvocationClassPosition(object oCreature = OBJECT_SELF); + +/** + * Ruterns the number of damage dices that oInvokers eldritch blast has + * + * @param oInvoker Creature whose blast to test + * @param nInvokerLevel Invoker level + * @return The number of damage dices + */ +int GetBlastDamageDices(object oInvoker, int nInvokerLevel); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +//#include "prc_alterations" +#include "prc_feat_const" +#include "inv_inc_invknown" +#include "inv_inc_invoke" +#include "inv_inc_blast" +#include "prc_add_spell_dc" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +//:: Updates the Invocation DC for Ability Focus feats. +int InvokerAbilityFocus(object oPC, int nEssence, int nEssence2 = -1) +{ + int nBonus = 0; + + // Check for the shape + switch(nEssence) + { + case INVOKE_ELDRITCH_BLAST: + if (GetHasFeat(FEAT_ABFOC_ELDRITCH_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_ELDRITCH_CHAIN: + if (GetHasFeat(FEAT_ABFOC_ELDRITCH_CHAIN, oPC)) nBonus += 2; + break; + case INVOKE_ELDRITCH_CONE: + if (GetHasFeat(FEAT_ABFOC_ELDRITCH_CONE, oPC)) nBonus += 2; + break; + case INVOKE_ELDRITCH_DOOM: + if (GetHasFeat(FEAT_ABFOC_ELDRITCH_DOOM, oPC)) nBonus += 2; + break; + case INVOKE_ELDRITCH_GLAIVE: + if (GetHasFeat(FEAT_ABFOC_ELDRITCH_GLAIVE, oPC)) nBonus += 2; + break; + case INVOKE_ELDRITCH_LINE: + if (GetHasFeat(FEAT_ABFOC_ELDRITCH_LINE, oPC)) nBonus += 2; + break; + case INVOKE_ELDRITCH_SPEAR: + if (GetHasFeat(FEAT_ABFOC_ELDRITCH_SPEAR, oPC)) nBonus += 2; + break; + case INVOKE_BRIMSTONE_BLAST: + if (GetHasFeat(FEAT_ABFOC_BRIMSTONE_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_NOXIOUS_BLAST: + if (GetHasFeat(FEAT_ABFOC_NOXIOUS_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_FRIGHTFUL_BLAST: + if (GetHasFeat(FEAT_ABFOC_FRIGHTFUL_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_SICKENING_BLAST: + if (GetHasFeat(FEAT_ABFOC_SICKENING_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_HELLRIME_BLAST: + if (GetHasFeat(FEAT_ABFOC_HELLRIME_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_BEWITCHING_BLAST: + if (GetHasFeat(FEAT_ABFOC_BEWITCHING_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_BINDING_BLAST: + if (GetHasFeat(FEAT_ABFOC_BINDING_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_HINDERING_BLAST: + if (GetHasFeat(FEAT_ABFOC_HINDERING_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_PENETRATING_BLAST: + if (GetHasFeat(FEAT_ABFOC_PENETRATING_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_UTTERDARK_BLAST: + if (GetHasFeat(FEAT_ABFOC_UTTERDARK_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_INCARNUM_BLAST: + if (GetHasFeat(FEAT_ABFOC_INCARNUM_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_HAMMER_BLAST: + if (GetHasFeat(FEAT_ABFOC_HAMMER_BLAST, oPC)) nBonus += 2; + break; + // case INVOKE_VITRIOLIC_BLAST: + // if (GetHasFeat(FEAT_ABFOC_VITRIOLIC_BLAST, oPC)) nBonus += 2; + // break; + case INVOKE_BANEFUL_BLAST_ABERRATION: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_ABERRATION, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_BEAST: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_BEAST, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_CONSTRUCT: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_CONSTRUCT, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_DRAGON: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_DRAGON, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_DWARF: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_DWARF, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_ELEMENTAL: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_ELEMENTAL, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_ELF: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_ELF, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_FEY: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_FEY, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_GIANT: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_GIANT, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_GOBLINOID: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_GOBLINOID, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_GNOME: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_GNOME, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_HALFLING: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_HALFLING, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_HUMAN: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_HUMAN, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_MONSTROUS: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_MONSTROUS, oPC)) nBonus += 2; + break; + // case INVOKE_BANEFUL_BLAST_OOZE: + // if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_OOZE, oPC)) nBonus += 2; + // break; + case INVOKE_BANEFUL_BLAST_ORC: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_ORC, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_OUTSIDER: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_OUTSIDER, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_PLANT: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_PLANT, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_REPTILIAN: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_REPTILIAN, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_SHAPECHANGER: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_SHAPECHANGER, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_UNDEAD: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_UNDEAD, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_VERMIN: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_VERMIN, oPC)) nBonus += 2; + break; + } + + // Check for the secondary shape or essence component + switch(nEssence2) + { + case INVOKE_ELDRITCH_BLAST: + if (GetHasFeat(FEAT_ABFOC_ELDRITCH_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_ELDRITCH_CHAIN: + if (GetHasFeat(FEAT_ABFOC_ELDRITCH_CHAIN, oPC)) nBonus += 2; + break; + case INVOKE_ELDRITCH_CONE: + if (GetHasFeat(FEAT_ABFOC_ELDRITCH_CONE, oPC)) nBonus += 2; + break; + case INVOKE_ELDRITCH_DOOM: + if (GetHasFeat(FEAT_ABFOC_ELDRITCH_DOOM, oPC)) nBonus += 2; + break; + case INVOKE_ELDRITCH_GLAIVE: + if (GetHasFeat(FEAT_ABFOC_ELDRITCH_GLAIVE, oPC)) nBonus += 2; + break; + case INVOKE_ELDRITCH_LINE: + if (GetHasFeat(FEAT_ABFOC_ELDRITCH_LINE, oPC)) nBonus += 2; + break; + case INVOKE_ELDRITCH_SPEAR: + if (GetHasFeat(FEAT_ABFOC_ELDRITCH_SPEAR, oPC)) nBonus += 2; + break; + case INVOKE_BRIMSTONE_BLAST: + if (GetHasFeat(FEAT_ABFOC_BRIMSTONE_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_NOXIOUS_BLAST: + if (GetHasFeat(FEAT_ABFOC_NOXIOUS_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_FRIGHTFUL_BLAST: + if (GetHasFeat(FEAT_ABFOC_FRIGHTFUL_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_SICKENING_BLAST: + if (GetHasFeat(FEAT_ABFOC_SICKENING_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_HELLRIME_BLAST: + if (GetHasFeat(FEAT_ABFOC_HELLRIME_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_BEWITCHING_BLAST: + if (GetHasFeat(FEAT_ABFOC_BEWITCHING_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_BINDING_BLAST: + if (GetHasFeat(FEAT_ABFOC_BINDING_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_HINDERING_BLAST: + if (GetHasFeat(FEAT_ABFOC_HINDERING_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_PENETRATING_BLAST: + if (GetHasFeat(FEAT_ABFOC_PENETRATING_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_UTTERDARK_BLAST: + if (GetHasFeat(FEAT_ABFOC_UTTERDARK_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_INCARNUM_BLAST: + if (GetHasFeat(FEAT_ABFOC_INCARNUM_BLAST, oPC)) nBonus += 2; + break; + case INVOKE_HAMMER_BLAST: + if (GetHasFeat(FEAT_ABFOC_HAMMER_BLAST, oPC)) nBonus += 2; + break; + // case INVOKE_VITRIOLIC_BLAST: + // if (GetHasFeat(FEAT_ABFOC_VITRIOLIC_BLAST, oPC)) nBonus += 2; + // break; + case INVOKE_BANEFUL_BLAST_ABERRATION: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_ABERRATION, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_BEAST: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_BEAST, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_CONSTRUCT: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_CONSTRUCT, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_DRAGON: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_DRAGON, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_DWARF: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_DWARF, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_ELEMENTAL: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_ELEMENTAL, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_ELF: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_ELF, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_FEY: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_FEY, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_GIANT: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_GIANT, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_GOBLINOID: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_GOBLINOID, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_GNOME: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_GNOME, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_HALFLING: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_HALFLING, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_HUMAN: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_HUMAN, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_MONSTROUS: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_MONSTROUS, oPC)) nBonus += 2; + break; + // case INVOKE_BANEFUL_BLAST_OOZE: + // if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_OOZE, oPC)) nBonus += 2; + // break; + case INVOKE_BANEFUL_BLAST_ORC: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_ORC, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_OUTSIDER: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_OUTSIDER, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_PLANT: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_PLANT, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_REPTILIAN: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_REPTILIAN, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_SHAPECHANGER: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_SHAPECHANGER, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_UNDEAD: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_UNDEAD, oPC)) nBonus += 2; + break; + case INVOKE_BANEFUL_BLAST_VERMIN: + if (GetHasFeat(FEAT_ABFOC_BANEFUL_BLAST_VERMIN, oPC)) nBonus += 2; + break; + } + + return nBonus; +} + +int GetInvokingClass(object oInvoker = OBJECT_SELF) +{ + return GetLocalInt(oInvoker, PRC_INVOKING_CLASS) - 1; +} + +/*int PracticedInvoker(object oInvoker, int iInvokingClass, int iInvokingLevels) +{ + int nFeat; + int iAdjustment = GetHitDice(oInvoker) - iInvokingLevels; + if(iAdjustment > 4) iAdjustment = 4; + if(iAdjustment < 0) iAdjustment = 0; + + switch(iInvokingClass) + { + case CLASS_TYPE_DRAGONFIRE_ADEPT: nFeat = FEAT_PRACTICED_INVOKER_DRAGONFIRE_ADEPT; break; + case CLASS_TYPE_WARLOCK: nFeat = FEAT_PRACTICED_INVOKER_WARLOCK; break; + default: return 0; + } + + if(GetHasFeat(nFeat, oInvoker)) + return iAdjustment; + + return 0; +}*/ + +int GetInvokerLevel(object oInvoker = OBJECT_SELF, int nSpecificClass = CLASS_TYPE_INVALID, int bPracticedInvoker = TRUE) +{ + int nAdjust = GetLocalInt(oInvoker, PRC_CASTERLEVEL_ADJUSTMENT); + int nLevel = GetLocalInt(oInvoker, PRC_CASTERLEVEL_OVERRIDE); + + // For when you want to assign the caster level. + if(nLevel) + { + if(DEBUG) SendMessageToPC(oInvoker, "Forced-level Invoking at level " + IntToString(GetCasterLevel(oInvoker))); + //DelayCommand(1.0, DeleteLocalInt(oInvoker, PRC_CASTERLEVEL_OVERRIDE)); + return nLevel + nAdjust; + } + + if(nSpecificClass == CLASS_TYPE_INVALID) + nSpecificClass = GetInvokingClass(oInvoker); + + if(nSpecificClass != -1) + { + if(!GetIsInvocationClass(nSpecificClass)) + return 0; + + if(nSpecificClass == CLASS_TYPE_DRAGON_SHAMAN) + nLevel = PRCMax(GetLevelByClass(nSpecificClass, oInvoker) - 4, 1); // Can't go below 1 + else + nLevel = GetLevelByClass(nSpecificClass, oInvoker); + if(DEBUG) DoDebug("Invoker Class Level is: " + IntToString(nLevel)); + if(GetPrimaryInvocationClass(oInvoker) == nSpecificClass) + { + //Invoker level is class level + any arcane spellcasting or invoking levels in any PRCs + nLevel += GetInvocationPRCLevels(oInvoker); + } + /*if(bPracticedInvoker) + nLevel += PracticedInvoker(oInvoker, nSpecificClass, nLevel);*/ + } + else + nLevel = GetLevelByClass(GetPrimaryInvocationClass(oInvoker), oInvoker); + + nLevel += nAdjust; + SetLocalInt(oInvoker, "InvokerLevel", nLevel); + return nLevel; +} + +int GetIsInvocationUser(object oCreature) +{ + return !!(GetLevelByClass(CLASS_TYPE_DRAGONFIRE_ADEPT, oCreature) || + GetLevelByClass(CLASS_TYPE_WARLOCK, oCreature) || + GetLevelByClass(CLASS_TYPE_DRAGON_SHAMAN, oCreature) + ); +} + +int GetHighestInvokerLevel(object oCreature) +{ + int n = 0; + int nHighest; + int nTemp; + + while(n <= 8) + { + if(GetClassByPosition(n, oCreature) != CLASS_TYPE_INVALID) + { + nTemp = GetInvokerLevel(oCreature, GetClassByPosition(n, oCreature)); + + if(nTemp > nHighest) + nHighest = nTemp; + } + n++; + + } + + return nHighest; +} + +/* int GetHighestInvokerLevel(object oCreature) +{ + return PRCMax(PRCMax(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetInvokerLevel(oCreature, GetClassByPosition(1, oCreature)) : 0, + GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID ? GetInvokerLevel(oCreature, GetClassByPosition(2, oCreature)) : 0 + ), + GetClassByPosition(3, oCreature) != CLASS_TYPE_INVALID ? GetInvokerLevel(oCreature, GetClassByPosition(3, oCreature)) : 0 + ); +} */ + +int GetIsInvocationClass(int nClass) +{ + int bTest = nClass == CLASS_TYPE_DRAGONFIRE_ADEPT + || nClass == CLASS_TYPE_WARLOCK + || nClass == CLASS_TYPE_DRAGON_SHAMAN; + return bTest; +} + +int GetInvocationLevel(object oInvoker) +{ + return GetLocalInt(oInvoker, PRC_INVOCATION_LEVEL); +} + +string GetInvocationName(int nSpellId) +{ + return GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellId))); +} + +int GetInvocationPRCLevels(object oCaster) +{ + int nLevel = GetLevelByClass(CLASS_TYPE_HELLFIRE_WARLOCK, oCaster) + + GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster) + + GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + +//:: Some Arcane PrCs boost invocations +/* if(GetLocalInt(oCaster, "INV_Caster") == 2) + nLevel += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2 + + (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2 + + GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster) + + GetLevelByClass(CLASS_TYPE_MAESTER, oCaster) + + (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; */ + + if(GetLocalInt(oCaster, "INV_Caster") == 2) + { + //:: Abjurant Champion Invoking + if(GetHasFeat(FEAT_ABCHAMP_INVOKING_WARLOCK, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + + if(GetHasFeat(FEAT_ABCHAMP_INVOKING_DFA, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + + if(GetHasFeat(FEAT_ABCHAMP_INVOKING_DRAGON_SHAMAN, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + + //:: Acolyte of the Skin Invoking + if(GetHasFeat(FEAT_AOTS_INVOKING_WARLOCK, oCaster)) + nLevel += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_AOTS_INVOKING_DFA, oCaster)) + nLevel += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2; + + //:: Anima Mage Invoking + if(GetHasFeat(FEAT_ANIMA_INVOKING_WARLOCK, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + + if(GetHasFeat(FEAT_ANIMA_INVOKING_DFA, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + + //:: Arcane Trickster Invoking + if(GetHasFeat(FEAT_ARCTRICK_INVOKING_WARLOCK, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_ARCTRICK_INVOKING_DFA, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + //:: Disciple of Asmodeus Invoking + if(GetHasFeat(FEAT_ASMODEUS_INVOKING_WARLOCK, oCaster)) + nLevel += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_ASMODEUS_INVOKING_DFA, oCaster)) + nLevel += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_ASMODEUS_INVOKING_DRAGON_SHAMAN, oCaster)) + nLevel += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + //:: Blood Magus Invoking + if(GetHasFeat(FEAT_BLDMAGUS_INVOKING_WARLOCK, oCaster)) + nLevel += (GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BLDMAGUS_INVOKING_DFA, oCaster)) + nLevel += (GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster) + 1) / 2; + + //:: Enlightened Fist Invoking + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_INVOKING_WARLOCK, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_INVOKING_DFA, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_INVOKING_DRAGON_SHAMAN, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + + //:: Maester Invoking + if(GetHasFeat(FEAT_MAESTER_INVOKING_WARLOCK, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); + + if(GetHasFeat(FEAT_MAESTER_INVOKING_DFA, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); + + //:: Talon of Tiamat Invoking + if(GetHasFeat(FEAT_TIAMAT_INVOKING_WARLOCK, oCaster)) + nLevel += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_INVOKING_DFA, oCaster)) + nLevel += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_INVOKING_DRAGON_SHAMAN, oCaster)) + nLevel += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + //:: Unseen Seer Invoking + if(GetHasFeat(FEAT_UNSEEN_INVOKING_WARLOCK, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_INVOKING_DFA, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_INVOKING_DRAGON_SHAMAN, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + + //:: Virtuoso Invoking + if(GetHasFeat(FEAT_VIRTUOSO_INVOKING_WARLOCK, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + + if(GetHasFeat(FEAT_VIRTUOSO_INVOKING_DFA, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + + if(GetHasFeat(FEAT_VIRTUOSO_INVOKING_DRAGON_SHAMAN, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + + //:: Wild Mage Invoking + if(GetHasFeat(FEAT_WILDMAGE_INVOKING_WARLOCK, oCaster)) + { + int nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); + if (nClass) + nLevel += nClass - 3 + d6(); + } + if(GetHasFeat(FEAT_WILDMAGE_INVOKING_DFA, oCaster)) + { + int nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); + if (nClass) + nLevel += nClass - 3 + d6(); + } + if(GetHasFeat(FEAT_WILDMAGE_INVOKING_DRAGON_SHAMAN, oCaster)) + { + int nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); + if (nClass) + nLevel += nClass - 3 + d6(); + } + } + + return nLevel; +} + +int GetPrimaryInvocationClass(object oCreature = OBJECT_SELF) +{ + int nClass; + + if(GetPRCSwitch(PRC_CASTERLEVEL_FIRST_CLASS_RULE)) + { + int nInvocationPos = GetFirstInvocationClassPosition(oCreature); + if (!nInvocationPos) return CLASS_TYPE_INVALID; // no invoking class + + nClass = GetClassByPosition(nInvocationPos, oCreature); + } + else + { + int nClassLvl; + int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8; + int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl; + + nClass1 = GetClassByPosition(1, oCreature); + nClass2 = GetClassByPosition(2, oCreature); + nClass3 = GetClassByPosition(3, oCreature); + nClass4 = GetClassByPosition(4, oCreature); + nClass5 = GetClassByPosition(5, oCreature); + nClass6 = GetClassByPosition(6, oCreature); + nClass7 = GetClassByPosition(7, oCreature); + nClass8 = GetClassByPosition(8, oCreature); + + if(GetIsInvocationClass(nClass1)) nClass1Lvl = GetLevelByClass(nClass1, oCreature); + if(GetIsInvocationClass(nClass2)) nClass2Lvl = GetLevelByClass(nClass2, oCreature); + if(GetIsInvocationClass(nClass3)) nClass3Lvl = GetLevelByClass(nClass3, oCreature); + if(GetIsInvocationClass(nClass4)) nClass4Lvl = GetLevelByClass(nClass4, oCreature); + if(GetIsInvocationClass(nClass5)) nClass5Lvl = GetLevelByClass(nClass5, oCreature); + if(GetIsInvocationClass(nClass6)) nClass6Lvl = GetLevelByClass(nClass6, oCreature); + if(GetIsInvocationClass(nClass7)) nClass7Lvl = GetLevelByClass(nClass7, oCreature); + if(GetIsInvocationClass(nClass8)) nClass8Lvl = GetLevelByClass(nClass8, oCreature); + + nClass = nClass1; + nClassLvl = nClass1Lvl; + + if(nClass2Lvl > nClassLvl) + { + nClass = nClass2; + nClassLvl = nClass2Lvl; + } + if(nClass3Lvl > nClassLvl) + { + nClass = nClass3; + nClassLvl = nClass3Lvl; + } + if(nClass4Lvl > nClassLvl) + { + nClass = nClass4; + nClassLvl = nClass4Lvl; + } + if(nClass5Lvl > nClassLvl) + { + nClass = nClass5; + nClassLvl = nClass5Lvl; + } + if(nClass6Lvl > nClassLvl) + { + nClass = nClass6; + nClassLvl = nClass6Lvl; + } + if(nClass7Lvl > nClassLvl) + { + nClass = nClass7; + nClassLvl = nClass7Lvl; + } + if(nClass8Lvl > nClassLvl) + { + nClass = nClass8; + nClassLvl = nClass8Lvl; + } + + if(nClassLvl == 0) + nClass = CLASS_TYPE_INVALID; + } + + return nClass; +} + +int GetFirstInvocationClassPosition(object oCreature = OBJECT_SELF) +{ + if (GetIsInvocationClass(GetClassByPosition(1, oCreature))) + return 1; + if (GetIsInvocationClass(GetClassByPosition(2, oCreature))) + return 2; + if (GetIsInvocationClass(GetClassByPosition(3, oCreature))) + return 3; + if (GetIsInvocationClass(GetClassByPosition(4, oCreature))) + return 4; + if (GetIsInvocationClass(GetClassByPosition(5, oCreature))) + return 5; + if (GetIsInvocationClass(GetClassByPosition(6, oCreature))) + return 6; + if (GetIsInvocationClass(GetClassByPosition(7, oCreature))) + return 7; + if (GetIsInvocationClass(GetClassByPosition(8, oCreature))) + return 8; + + return 0; +} + +int GetInvocationSaveDC(object oTarget, object oCaster, int nSpellID = -1) +{ + int nDC; + // For when you want to assign the caster DC + //this does not take feat/race/class into account, it is an absolute override + if (GetLocalInt(oCaster, PRC_DC_TOTAL_OVERRIDE) != 0) + { + nDC = GetLocalInt(oCaster, PRC_DC_TOTAL_OVERRIDE); + DoDebug("Forced-DC PRC_DC_TOTAL_OVERRIDE casting at DC " + IntToString(nDC)); + return nDC; + } + // For when you want to assign the caster DC + //this does take feat/race/class into account, it only overrides the baseDC + if(GetLocalInt(oCaster, PRC_DC_BASE_OVERRIDE) > 0) + { + nDC = GetLocalInt(oCaster, PRC_DC_BASE_OVERRIDE); + if(DEBUG) DoDebug("Forced Base-DC casting at DC " + IntToString(nDC)); + } + else + { + if(nSpellID == -1) nSpellID = PRCGetSpellId(); + //10+spelllevel+stat(cha default) + nDC = 10; + nDC += StringToInt(Get2DACache("Spells", "Innate", nSpellID)); + nDC += GetAbilityModifier(ABILITY_CHARISMA, oCaster); + } + nDC += GetChangesToSaveDC(oTarget, oCaster, nSpellID, 0); + + return nDC; +} + +void ClearInvocationLocalVars(object oPC) +{ + //Invocations + if (DEBUG) DoDebug("Clearing invocation flags"); + DeleteLocalObject(oPC, "ChillingFog"); + //Endure Exposure wearing off + array_delete(oPC, "BreathProtected"); + DeleteLocalInt(oPC, "DragonWard"); + + //cleaning targets of Endure exposure cast by resting caster + if (array_exists(oPC, "BreathProtectTargets")) + { + if(DEBUG) DoDebug("Checking for casts of Endure Exposure"); + int nBPTIndex = 0; + int bCasterDone = FALSE; + int bTargetDone = FALSE; + object oBreathTarget; + while(!bCasterDone) + { + oBreathTarget = array_get_object(oPC, "BreathProtectTargets", nBPTIndex); + if(DEBUG) DoDebug("Possible target: " + GetName(oBreathTarget) + " - " + ObjectToString(oBreathTarget)); + if(oBreathTarget != OBJECT_INVALID) + { + //replace caster with target... always immune to own breath, so good way to erase caster from array without deleting whole array + int nBPIndex = 0; + + while(!bTargetDone) + { + if(DEBUG) DoDebug("Checking " + GetName(oBreathTarget)); + //if it matches, remove and end + if(array_get_object(oBreathTarget, "BreathProtected", nBPIndex) == oPC) + { + array_set_object(oBreathTarget, "BreathProtected", nBPIndex, oBreathTarget); + bTargetDone = TRUE; + if(DEBUG) DoDebug("Found caster, clearing."); + } + //if it is not end of array, keep going + else if(array_get_object(oBreathTarget, "BreathProtected", nBPTIndex) != OBJECT_INVALID) + { + nBPIndex++; + } + else + bTargetDone = TRUE; + + } + + nBPTIndex++; + bTargetDone = FALSE; + + } + else + { + array_delete(oPC, "BreathProtectTargets"); + bCasterDone = TRUE; + } + } + } +} + +// Test main +// void main(){} diff --git a/src/include/inv_inc_invknown.nss b/src/include/inv_inc_invknown.nss new file mode 100644 index 0000000..dbd7acb --- /dev/null +++ b/src/include/inv_inc_invknown.nss @@ -0,0 +1,529 @@ +//:://///////////////////////////////////////////// +//:: Invocation include: Invocations Known +//:: inv_inc_invknown +//:://///////////////////////////////////////////// +/** @file + Defines functions for adding & removing + Invocations known. + + Data stored: + + - For each Class list + -- Total number of Invocations known + -- A modifier value to maximum Invocations known on this list to account for feats and classes that add Invocations + -- An array related to Invocations the knowledge of which is not dependent on character level + --- Each array entry specifies the spells.2da row of the known Invocations's class-specific entry + -- For each character level on which Invocations have been gained from this list + --- An array of Invocations gained on this level + ---- Each array entry specifies the spells.2da row of the known Invocations's class-specific entry + + @author Fox + @date Created - 2008.01.25 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +// Included here to provide the values for the constants below +#include "prc_class_const" + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const int INVOCATION_LIST_DRAGONFIRE_ADEPT = CLASS_TYPE_DRAGONFIRE_ADEPT; +const int INVOCATION_LIST_WARLOCK = CLASS_TYPE_WARLOCK; +const int INVOCATION_LIST_DRAGON_SHAMAN = CLASS_TYPE_DRAGON_SHAMAN; + +/// Special Maneuver list. Maneuvers gained via Extra Invocation or other sources. +const int INVOCATION_LIST_EXTRA = CLASS_TYPE_INVALID;//-1; +const int INVOCATION_LIST_EXTRA_EPIC = /*CLASS_TYPE_INVALID - 1;*/-2; //needs a constant in there to compile properly + +const string _INVOCATION_LIST_NAME_BASE = "PRC_InvocationList_"; +const string _INVOCATION_LIST_TOTAL_KNOWN = "_TotalKnown"; +const string _INVOCATION_LIST_MODIFIER = "_KnownModifier"; +const string _INVOCATION_LIST_EXTRA_ARRAY = "_InvocationsKnownExtraArray"; +const string _INVOCATION_LIST_EXTRA_EPIC_ARRAY = "_InvocationsKnownExtraEpicArray"; +const string _INVOCATION_LIST_LEVEL_ARRAY = "_InvocationsKnownLevelArray_"; +const string _INVOCATION_LIST_GENERAL_ARRAY = "_InvocationsKnownGeneralArray"; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Gives the creature the control feats for the given Invocation and marks the Invocation + * in a Invocations known array. + * If the Invocation's data is already stored in one of the Invocations known arrays for + * the list or adding the Invocation's data to the array fails, the function aborts. + * + * @param oCreature The creature to gain the Invocation + * @param nList The list the Invocation comes from. One of INVOCATION_LIST_* + * @param n2daRow The 2da row in the lists's 2da file that specifies the Invocation. + * @param bLevelDependent If this is TRUE, the Invocation is tied to a certain level and can + * be lost via level loss. If FALSE, the Invocation is not dependent + * of a level and cannot be lost via level loss. + * @param nLevelToTieTo If bLevelDependent is TRUE, this specifies the level the Invocation + * is gained on. Otherwise, it's ignored. + * The default value (-1) means that the current level of oCreature + * will be used. + * + * @return TRUE if the Invocation was successfully stored and control feats added. + * FALSE otherwise. + */ +int AddInvocationKnown(object oCreature, int nList, int n2daRow, int bLevelDependent = FALSE, int nLevelToTieTo = -1); + +/** + * Removes all Invocations gained from each list on the given level. + * + * @param oCreature The creature whose Invocations to remove + * @param nLevel The level to clear + */ +void RemoveInvocationsKnownOnLevel(object oCreature, int nLevel); + +/** + * Gets the value of the Invocations known modifier, which is a value that is added + * to the 2da-specified maximum Invocations known to determine the actual maximum. + * + * @param oCreature The creature whose modifier to get + * @param nList The list the maximum Invocations known from which the modifier + * modifies. One of INVOCATION_LIST_* + */ +int GetKnownInvocationsModifier(object oCreature, int nList); + +/** + * Sets the value of the Invocations known modifier, which is a value that is added + * to the 2da-specified maximum Invocations known to determine the actual maximum. + * + * @param oCreature The creature whose modifier to set + * @param nList The list the maximum Invocations known from which the modifier + * modifies. One of INVOCATION_LIST_* + */ +void SetKnownInvocationsModifier(object oCreature, int nList, int nNewValue); + +/** + * Gets the number of Invocations a character character possesses from a + * specific list and lexicon + * + * @param oCreature The creature whose Invocations to check + * @param nList The list to check. One of INVOCATION_LIST_* + * @return The number of Invocations known oCreature has from nList + */ +int GetInvocationCount(object oCreature, int nList); + +/** + * Gets the maximum number of Invocations a character may posses from a given list + * at this time. Calculated based on class levels, feats and a misceallenous + * modifier. There are three Types of Invocations, so it checks each seperately. + * + * @param oCreature Character to determine maximum Invocations for + * @param nList INVOCATION_LIST_* of the list to determine maximum Invocations for + * @return Maximum number of Invocations that oCreature may know from the given list. + */ +int GetMaxInvocationCount(object oCreature, int nList); + +/** + * Determines whether a character has a given Invocation, gained via some Invocation list. + * + * @param nInvocation INVOKE_* of the Invocation to test + * @param oCreature Character to test for the possession of the Invocation + * @return TRUE if the character has the Invocation, FALSE otherwise + */ +int GetHasInvocation(int nInvocation, object oCreature = OBJECT_SELF); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "inc_item_props" +#include "prc_x2_itemprop" +#include "inc_lookups" +#include "prc_inc_nwscript" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +void _InvocationRecurseRemoveArray(object oCreature, string sArrayName, string sInvocFile, int nArraySize, int nCurIndex) +{ + if(DEBUG) DoDebug("_InvocationRecurseRemoveArray():\n" + + "oCreature = " + DebugObject2Str(oCreature) + "\n" + + "sArrayName = '" + sArrayName + "'\n" + + "sInvocFile = '" + sInvocFile + "'\n" + + "nArraySize = " + IntToString(nArraySize) + "\n" + + "nCurIndex = " + IntToString(nCurIndex) + "\n" + ); + + // Determine whether we've already parsed the whole array or not + if(nCurIndex >= nArraySize) + { + if(DEBUG) DoDebug("_InvocationRecurseRemoveArray(): Running itemproperty removal loop."); + // Loop over itemproperties on the skin and remove each match + object oSkin = GetPCSkin(oCreature); + itemproperty ipTest = GetFirstItemProperty(oSkin); + while(GetIsItemPropertyValid(ipTest)) + { + // Check if the itemproperty is a bonus feat that has been marked for removal + if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_BONUS_FEAT && + GetLocalInt(oCreature, "PRC_InvocFeatRemovalMarker_" + IntToString(GetItemPropertySubType(ipTest))) + ) + { + if(DEBUG) DoDebug("_InvocationRecurseRemoveArray(): Removing bonus feat itemproperty:\n" + DebugIProp2Str(ipTest)); + // If so, remove it + RemoveItemProperty(oSkin, ipTest); + } + + ipTest = GetNextItemProperty(oSkin); + } + } + // Still parsing the array + else + { + // Set the marker + string sName = "PRC_InvocFeatRemovalMarker_" + Get2DACache(sInvocFile, "IPFeatID", + GetPowerfileIndexFromSpellID(persistant_array_get_int(oCreature, sArrayName, nCurIndex)) + ); + if(DEBUG) DoDebug("_InvocationRecurseRemoveArray(): Recursing through array, marker set:\n" + sName); + + SetLocalInt(oCreature, sName, TRUE); + // Recurse to next array index + _InvocationRecurseRemoveArray(oCreature, sArrayName, sInvocFile, nArraySize, nCurIndex + 1); + // After returning, delete the local + DeleteLocalInt(oCreature, sName); + } +} + +void _RemoveInvocationArray(object oCreature, int nList, int nLevel) +{ + if(DEBUG) DoDebug("_RemoveInvocationArray():\n" + + "oCreature = " + DebugObject2Str(oCreature) + "\n" + + "nList = " + IntToString(nList) + "\n" + ); + + string sBase = _INVOCATION_LIST_NAME_BASE + IntToString(nList); + string sArray = sBase + _INVOCATION_LIST_LEVEL_ARRAY + IntToString(nLevel); + int nSize = persistant_array_get_size(oCreature, sArray); + + // Reduce the total by the array size + SetPersistantLocalInt(oCreature, sBase + _INVOCATION_LIST_TOTAL_KNOWN, + GetPersistantLocalInt(oCreature, sBase + _INVOCATION_LIST_TOTAL_KNOWN) - nSize + ); + + // Remove each Invocation in the array + _InvocationRecurseRemoveArray(oCreature, sArray, GetAMSDefinitionFileName(nList), nSize, 0); + + // Remove the array itself + persistant_array_delete(oCreature, sArray); +} + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int AddInvocationKnown(object oCreature, int nList, int n2daRow, int bLevelDependent = FALSE, int nLevelToTieTo = -1) +{ + string sBase = _INVOCATION_LIST_NAME_BASE + IntToString(nList); + string sArray = sBase; + string sPowerFile = GetAMSDefinitionFileName(/*PowerListToClassType(*/nList/*)*/); + if(nList == -2 || nList == CLASS_TYPE_INVALID) + { + sPowerFile = GetAMSDefinitionFileName(GetPrimaryInvocationClass(oCreature)); + } + string sTestArray; + int i, j, nSize, bReturn; + + // Get the spells.2da row corresponding to the cls_psipw_*.2da row + int nSpells2daRow = StringToInt(Get2DACache(sPowerFile, "SpellID", n2daRow)); + + // Determine the array name. + if(bLevelDependent) + { + // If no level is specified, default to the creature's current level + if(nLevelToTieTo == -1) + nLevelToTieTo = GetHitDice(oCreature); + + sArray += _INVOCATION_LIST_LEVEL_ARRAY + IntToString(nLevelToTieTo); + } + else + { + sArray += _INVOCATION_LIST_GENERAL_ARRAY; + } + + // Make sure the power isn't already in an array. If it is, abort and return FALSE + // Loop over each level array and check that it isn't there. + if(DEBUG) DoDebug("inv_inc_invknown: Checking first array set for duplicates."); + for(i = 1; i <= GetHitDice(oCreature); i++) + { + sTestArray = sBase + _INVOCATION_LIST_LEVEL_ARRAY + IntToString(i); + if(persistant_array_exists(oCreature, sTestArray)) + { + nSize = persistant_array_get_size(oCreature, sTestArray); + for(j = 0; j < nSize; j++) + if(persistant_array_get_int(oCreature, sArray, j) == nSpells2daRow) + return FALSE; + } + } + // Check the non-level-dependent array + if(DEBUG) DoDebug("inv_inc_invknown: Checking second array set for duplicates."); + sTestArray = sBase + _INVOCATION_LIST_GENERAL_ARRAY; + if(persistant_array_exists(oCreature, sTestArray)) + { + nSize = persistant_array_get_size(oCreature, sTestArray); + for(j = 0; j < nSize; j++) + if(persistant_array_get_int(oCreature, sArray, j) == nSpells2daRow) + return FALSE; + } + + // All checks are made, now start adding the new power + // Create the array if it doesn't exist yet + if(!persistant_array_exists(oCreature, sArray)) + persistant_array_create(oCreature, sArray); + + // Store the power in the array + if(DEBUG) DoDebug("inv_inc_invknown: Adding to invocation array."); + if(persistant_array_set_int(oCreature, sArray, persistant_array_get_size(oCreature, sArray), nSpells2daRow) != SDL_SUCCESS) + { + if(DEBUG) DoDebug("inv_inc_invknown: AddPowerKnown(): ERROR: Unable to add power to known array\n" + + "oCreature = " + DebugObject2Str(oCreature) + "\n" + + "nList = " + IntToString(nList) + "\n" + + "n2daRow = " + IntToString(n2daRow) + "\n" + + "bLevelDependent = " + DebugBool2String(bLevelDependent) + "\n" + + "nLevelToTieTo = " + IntToString(nLevelToTieTo) + "\n" + + "nSpells2daRow = " + IntToString(nSpells2daRow) + "\n" + ); + return FALSE; + } + + // Increment Invocations known total + SetPersistantLocalInt(oCreature, sBase + _INVOCATION_LIST_TOTAL_KNOWN, + GetPersistantLocalInt(oCreature, sBase + _INVOCATION_LIST_TOTAL_KNOWN) + 1 + ); + + // Give the power's control feats + object oSkin = GetPCSkin(oCreature); + string sPowerFeatIP = Get2DACache(sPowerFile, "IPFeatID", n2daRow); + itemproperty ipFeat = PRCItemPropertyBonusFeat(StringToInt(sPowerFeatIP)); + IPSafeAddItemProperty(oSkin, ipFeat, 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + // Second power feat, if any + sPowerFeatIP = Get2DACache(sPowerFile, "IPFeatID2", n2daRow); + if(sPowerFeatIP != "") + { + ipFeat = PRCItemPropertyBonusFeat(StringToInt(sPowerFeatIP)); + IPSafeAddItemProperty(oSkin, ipFeat, 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + } + + return TRUE; +} + +void RemoveInvocationsKnownOnLevel(object oCreature, int nLevel) +{ + if(DEBUG) DoDebug("inv_inc_invknown: RemoveInvocationKnownOnLevel():\n" + + "oCreature = " + DebugObject2Str(oCreature) + "\n" + + "nLevel = " + IntToString(nLevel) + "\n" + ); + + string sPostFix = _INVOCATION_LIST_LEVEL_ARRAY + IntToString(nLevel); + // For each Invocation list, determine if an array exists for this level. + if(persistant_array_exists(oCreature, _INVOCATION_LIST_NAME_BASE + IntToString(INVOCATION_LIST_DRAGONFIRE_ADEPT) + sPostFix)) + // If one does exist, clear it + _RemoveInvocationArray(oCreature, INVOCATION_LIST_DRAGONFIRE_ADEPT, nLevel); + + if(persistant_array_exists(oCreature, _INVOCATION_LIST_NAME_BASE + IntToString(INVOCATION_LIST_WARLOCK) + sPostFix)) + _RemoveInvocationArray(oCreature, INVOCATION_LIST_WARLOCK, nLevel); + + if(persistant_array_exists(oCreature, _INVOCATION_LIST_NAME_BASE + IntToString(INVOCATION_LIST_DRAGON_SHAMAN) + sPostFix)) + _RemoveInvocationArray(oCreature, INVOCATION_LIST_DRAGON_SHAMAN, nLevel); + + if(persistant_array_exists(oCreature, _INVOCATION_LIST_NAME_BASE + IntToString(INVOCATION_LIST_EXTRA) + sPostFix)) + _RemoveInvocationArray(oCreature, INVOCATION_LIST_EXTRA, nLevel); + + if(persistant_array_exists(oCreature, _INVOCATION_LIST_NAME_BASE + IntToString(INVOCATION_LIST_EXTRA_EPIC) + sPostFix)) + _RemoveInvocationArray(oCreature, INVOCATION_LIST_EXTRA_EPIC, nLevel); +} + +int GetKnownInvocationsModifier(object oCreature, int nList) +{ + return GetPersistantLocalInt(oCreature, _INVOCATION_LIST_NAME_BASE + IntToString(nList) + _INVOCATION_LIST_MODIFIER); +} + +void SetKnownInvocationsModifier(object oCreature, int nList, int nNewValue) +{ + SetPersistantLocalInt(oCreature, _INVOCATION_LIST_NAME_BASE + IntToString(nList) + _INVOCATION_LIST_MODIFIER, nNewValue); +} + +int GetInvocationCount(object oCreature, int nList) +{ + return GetPersistantLocalInt(oCreature, _INVOCATION_LIST_NAME_BASE + IntToString(nList) + _INVOCATION_LIST_TOTAL_KNOWN); +} + +int GetMaxInvocationCount(object oCreature, int nList) +{ + int nMaxInvocations = 0; + + switch(nList) + { + case INVOCATION_LIST_DRAGONFIRE_ADEPT:{ + // Determine base Invocations known + int nLevel = GetLevelByClass(CLASS_TYPE_DRAGONFIRE_ADEPT, oCreature); + nLevel += GetPrimaryInvocationClass(oCreature) == CLASS_TYPE_DRAGONFIRE_ADEPT ? GetInvocationPRCLevels(oCreature) : 0; + if(nLevel == 0) + break; + nMaxInvocations = StringToInt(Get2DACache(GetAMSKnownFileName(CLASS_TYPE_DRAGONFIRE_ADEPT), "InvocationKnown", nLevel - 1)); + + // Calculate feats + + // Add in the custom modifier + nMaxInvocations += GetKnownInvocationsModifier(oCreature, nList); + break; + } + + case INVOCATION_LIST_WARLOCK:{ + // Determine base Invocations known + int nLevel = GetLevelByClass(CLASS_TYPE_WARLOCK, oCreature); + nLevel += GetPrimaryInvocationClass(oCreature) == CLASS_TYPE_WARLOCK ? GetInvocationPRCLevels(oCreature) : 0; + if(nLevel == 0) + break; + nMaxInvocations = StringToInt(Get2DACache(GetAMSKnownFileName(CLASS_TYPE_WARLOCK), "InvocationKnown", nLevel - 1)); + + // Calculate feats + + // Add in the custom modifier + nMaxInvocations += GetKnownInvocationsModifier(oCreature, nList); + break; + } + + case INVOCATION_LIST_DRAGON_SHAMAN:{ + // Determine base Invocations known + int nLevel = GetLevelByClass(CLASS_TYPE_DRAGON_SHAMAN, oCreature); + nLevel += GetPrimaryInvocationClass(oCreature) == CLASS_TYPE_DRAGON_SHAMAN ? GetInvocationPRCLevels(oCreature) : 0; + if(nLevel == 0) + break; + nMaxInvocations = StringToInt(Get2DACache(GetAMSKnownFileName(CLASS_TYPE_DRAGON_SHAMAN), "InvocationKnown", nLevel - 1)); + + // Calculate feats + + // Add in the custom modifier + nMaxInvocations += GetKnownInvocationsModifier(oCreature, nList); + break; + } + + case INVOCATION_LIST_EXTRA: + nMaxInvocations = GetHasFeat(FEAT_EXTRA_INVOCATION_I, oCreature) + + GetHasFeat(FEAT_EXTRA_INVOCATION_II, oCreature) + + GetHasFeat(FEAT_EXTRA_INVOCATION_III, oCreature) + + GetHasFeat(FEAT_EXTRA_INVOCATION_IV, oCreature) + + GetHasFeat(FEAT_EXTRA_INVOCATION_V, oCreature) + + GetHasFeat(FEAT_EXTRA_INVOCATION_VI, oCreature) + + GetHasFeat(FEAT_EXTRA_INVOCATION_VII, oCreature) + + GetHasFeat(FEAT_EXTRA_INVOCATION_VIII, oCreature) + + GetHasFeat(FEAT_EXTRA_INVOCATION_IX, oCreature) + + GetHasFeat(FEAT_EXTRA_INVOCATION_X, oCreature); + break; + + case INVOCATION_LIST_EXTRA_EPIC: + nMaxInvocations = GetHasFeat(FEAT_EPIC_EXTRA_INVOCATION_I, oCreature) + + GetHasFeat(FEAT_EPIC_EXTRA_INVOCATION_II, oCreature) + + GetHasFeat(FEAT_EPIC_EXTRA_INVOCATION_III, oCreature) + + GetHasFeat(FEAT_EPIC_EXTRA_INVOCATION_IV, oCreature) + + GetHasFeat(FEAT_EPIC_EXTRA_INVOCATION_V, oCreature) + + GetHasFeat(FEAT_EPIC_EXTRA_INVOCATION_VI, oCreature) + + GetHasFeat(FEAT_EPIC_EXTRA_INVOCATION_VII, oCreature) + + GetHasFeat(FEAT_EPIC_EXTRA_INVOCATION_VIII, oCreature) + + GetHasFeat(FEAT_EPIC_EXTRA_INVOCATION_IX, oCreature) + + GetHasFeat(FEAT_EPIC_EXTRA_INVOCATION_X, oCreature); + break; + + default:{ + string sErr = "GetMaxInvocationCount(): ERROR: Unknown power list value: " + IntToString(nList); + if(DEBUG) DoDebug(sErr); + else WriteTimestampedLogEntry(sErr); + } + } + + return nMaxInvocations; +} + +int GetHasInvocation(int nInvocation, object oCreature = OBJECT_SELF) +{ + if((GetLevelByClass(CLASS_TYPE_DRAGONFIRE_ADEPT, oCreature) + && GetHasFeat(GetClassFeatFromPower(nInvocation, CLASS_TYPE_DRAGONFIRE_ADEPT), oCreature) + ) || + (GetLevelByClass(CLASS_TYPE_WARLOCK, oCreature) + && GetHasFeat(GetClassFeatFromPower(nInvocation, CLASS_TYPE_WARLOCK), oCreature) + ) || + (GetLevelByClass(CLASS_TYPE_DRAGON_SHAMAN, oCreature) + && GetHasFeat(GetClassFeatFromPower(nInvocation, CLASS_TYPE_DRAGON_SHAMAN), oCreature) + ) + // add new Invocation classes here + ) + return TRUE; + return FALSE; +} + +string DebugListKnownInvocations(object oCreature) +{ + string sReturn = "Invocations known by " + DebugObject2Str(oCreature) + ":\n"; + int i, j, k, numPowerLists = 6; + int nPowerList, nSize; + string sTemp, sArray, sArrayBase, sPowerFile; + // Loop over all power lists + for(i = 1; i <= numPowerLists; i++) + { + // Some padding + sReturn += " "; + // Get the power list for this loop + switch(i) + { + case 1: nPowerList = INVOCATION_LIST_DRAGONFIRE_ADEPT; sReturn += "Dragonfire Adept"; break; + + case 2: nPowerList = INVOCATION_LIST_WARLOCK; sReturn += "Warlock"; break; + case 3: nPowerList = INVOCATION_LIST_DRAGON_SHAMAN; sReturn += "Dragon Shaman"; break; + + // This should always be last + case 5: nPowerList = INVOCATION_LIST_EXTRA; sReturn += "Extra"; break; + case 6: nPowerList = INVOCATION_LIST_EXTRA_EPIC; sReturn += "Epic Extra"; break; + } + sReturn += " Invocations known:\n"; + + // Determine if the character has any Invocations from this list + sPowerFile = GetAMSDefinitionFileName(nPowerList); + sArrayBase = _INVOCATION_LIST_NAME_BASE + IntToString(nPowerList); + + // Loop over levels + for(j = 1; j <= GetHitDice(oCreature); j++) + { + sArray = sArrayBase + _INVOCATION_LIST_LEVEL_ARRAY + IntToString(j); + if(persistant_array_exists(oCreature, sArray)) + { + sReturn += " Gained on level " + IntToString(j) + ":\n"; + nSize = persistant_array_get_size(oCreature, sArray); + for(k = 0; k < nSize; k++) + sReturn += " " + GetStringByStrRef(StringToInt(Get2DACache(sPowerFile, "Name", + GetPowerfileIndexFromSpellID(persistant_array_get_int(oCreature, sArray, k)) + ) + ) + ) + + "\n"; + } + } + + // Non-leveldependent Invocations + sArray = sArrayBase + _INVOCATION_LIST_GENERAL_ARRAY; + if(persistant_array_exists(oCreature, sArray)) + { + sReturn += " Non-leveldependent:\n"; + nSize = persistant_array_get_size(oCreature, sArray); + for(k = 0; k < nSize; k++) + sReturn += " " + GetStringByStrRef(StringToInt(Get2DACache(sPowerFile, "Name", + GetPowerfileIndexFromSpellID(persistant_array_get_int(oCreature, sArray, k)) + ) + ) + ) + + "\n"; + } + } + + return sReturn; +} +// Test main +//void main(){} diff --git a/src/include/inv_inc_invoke.nss b/src/include/inv_inc_invoke.nss new file mode 100644 index 0000000..0abd1e1 --- /dev/null +++ b/src/include/inv_inc_invoke.nss @@ -0,0 +1,577 @@ +//:://///////////////////////////////////////////// +//:: Invocation include: Casting +//:: inv_inc_invoke +//:://///////////////////////////////////////////// +/** @file + Defines structures and functions for handling + initiating a invocation + + @author Fox + @date Created - 2008.1.26 + @thanks to Ornedan for his work on Psionics upon which this is based. +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const string PRC_INVOKING_CLASS = "PRC_CurrentInvocation_InitiatingClass"; +const string PRC_INVOCATION_LEVEL = "PRC_CurrentInvocation_Level"; +const string INV_DEBUG_IGNORE_CONSTRAINTS = "INV_DEBUG_IGNORE_CONSTRAINTS"; + +/** + * The variable in which the invocation token is stored. If no token exists, + * the variable is set to point at the invoker itself. That way OBJECT_INVALID + * means the variable is unitialised. + */ +//const string PRC_INVOCATION_TOKEN_VAR = "PRC_InvocationToken"; +//const string PRC_INVOCATION_TOKEN_NAME = "PRC_INVOKETOKEN"; +//const float PRC_INVOCATION_HB_DELAY = 0.5f; + + +////////////////////////////////////////////////// +/* Structures */ +////////////////////////////////////////////////// + +/** + * A structure that contains common data used during invocation. + */ +struct invocation{ + /* Generic stuff */ + /// The creature Truespeaking the Invocation + object oInvoker; + /// Whether the invocation is successful or not + int bCanInvoke; + /// The creature's invoker level in regards to this invocation + int nInvokerLevel; + /// The invocation's spell ID + int nInvocationId; +}; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Determines if the invocation that is currently being attempted to be TrueSpoken + * can in fact be truespoken. Determines metainvocations used. + * + * @param oInvoker A creature attempting to truespeak a invocation at this moment. + * @param oTarget The target of the invocation, if any. For pure Area of Effect. + * invocations, this should be OBJECT_INVALID. Otherwise the main + * target of the invocation as returned by PRCGetSpellTargetObject(). + * + * @return A invocation structure that contains the data about whether + * the invocation was successfully initiated and some other + * commonly used data, like the PC's invoker level for this invocation. + */ +struct invocation EvaluateInvocation(object oInvoker, object oTarget); + +/** + * Causes OBJECT_SELF to use the given invocation. + * + * @param nInvocation The index of the invocation to use in spells.2da or an UTTER_* + * @param nClass The index of the class to use the invocation as in classes.2da or a CLASS_TYPE_* + * @param nLevelOverride An optional override to normal invoker level. + * @param bInstant If true invocation will be used without casting animations (eldritch sculptor) + * Default: 0, which means the parameter is ignored. + */ +void UseInvocation(int nInvocation, int nClass, int nLevelOverride = 0, int bInstant = FALSE); + +/** + * A debugging function. Takes a invocation structure and + * makes a string describing the contents. + * + * @param move A set of invocation data + * @return A string describing the contents of move + */ +string DebugInvocation2Str(struct invocation invoked); + +/** + * Stores a invocation structure as a set of local variables. If + * a structure was already stored with the same name on the same object, + * it is overwritten. + * + * @param oObject The object on which to store the structure + * @param sName The name under which to store the structure + * @param move The invocation structure to store + */ +void SetLocalInvocation(object oObject, string sName, struct invocation invoked); + +/** + * Retrieves a previously stored invocation structure. If no structure is stored + * by the given name, the structure returned is empty. + * + * @param oObject The object from which to retrieve the structure + * @param sName The name under which the structure is stored + * @return The structure built from local variables stored on oObject under sName + */ +struct invocation GetLocalInvocation(object oObject, string sName); + +/** + * Deletes a stored invocation structure. + * + * @param oObject The object on which the structure is stored + * @param sName The name under which the structure is stored + */ +void DeleteLocalInvocation(object oObject, string sName); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +//#include "inv_inc_invfunc" //Access in parent +#include "prc_spellf_inc" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +/** Internal function. + * Handles Spellfire absorption when a utterance is used on a friendly spellfire + * user. + */ +struct invocation _DoInvocationSpellfireFriendlyAbsorption(struct invocation invoked, object oTarget) +{ + if(GetLocalInt(oTarget, "SpellfireAbsorbFriendly") && + GetIsFriend(oTarget, invoked.oInvoker) + ) + { + if(CheckSpellfire(invoked.oInvoker, oTarget, TRUE)) + { + PRCShowSpellResist(invoked.oInvoker, oTarget, SPELL_RESIST_MANTLE); + invoked.bCanInvoke = FALSE; + } + } + + return invoked; +} + +/** Internal function. + * Sets invocation-related local variables. + * + * @param oInvoker The creature currently casting invocation + * @param nClass Invocation casting class constant + * @param nLevel Invocation level + */ +void _SetInvocationVariables(object oInvoker, int nClass, int nLevel) +{ + if (DEBUG) FloatingTextStringOnCreature(GetName(oInvoker)+" is a "+IntToString(nClass)+" at "+IntToString(nLevel)+" invocation level", oInvoker); + SetLocalInt(oInvoker, PRC_INVOKING_CLASS, nClass + 1); + SetLocalInt(oInvoker, PRC_INVOCATION_LEVEL, nLevel); +} + + +/** Internal function. + * Deletes invocation-related local variables. + * + * @param oInvoker The creature currently initiating a invocation + */ +void _CleanInvocationVariables(object oInvoker) +{ + DeleteLocalInt(oInvoker, PRC_INVOKING_CLASS); + DeleteLocalInt(oInvoker, PRC_INVOCATION_LEVEL); +} + +/** Internal function. + * Determines whether a invocation token exists. If one does, returns it. + * + * @param oInvoker A creature whose invocation token to get + * @return The invocation token if it exists, OBJECT_INVALID otherwise. + */ +/*object _GetInvocationToken(object oInvoker) +{ + object oInvokeToken = GetLocalObject(oInvoker, PRC_INVOCATION_TOKEN_VAR); + + // If the token object is no longer valid, set the variable to point at invoker + if(!GetIsObjectValid(oInvokeToken)) + { + oInvokeToken = oInvoker; + SetLocalObject(oInvoker, PRC_INVOCATION_TOKEN_VAR, oInvokeToken); + } + + + // Check if there is no token + if(oInvokeToken == oInvoker) + oInvokeToken = OBJECT_INVALID; + + return oInvokeToken; +}*/ + +/** Internal function. + * Destroys the given invocation token and sets the creature's invocation token variable + * to point at itself. + * + * @param oInvoker The invoker whose token to destroy + * @param oInvokeToken The token to destroy + */ +/*void _DestroyInvocationToken(object oInvoker, object oInvokeToken) +{ + DestroyObject(oInvokeToken); + SetLocalObject(oInvoker, PRC_INVOCATION_TOKEN_VAR, oInvoker); +}*/ + +/** Internal function. + * Destroys the previous invocation token, if any, and creates a new one. + * + * @param oInvoker A creature for whom to create a invocation token + * @return The newly created token + */ +/*object _CreateInvocationToken(object oInvoker) +{ + object oInvokeToken = _GetInvocationToken(oInvoker); + object oStore = GetObjectByTag("PRC_MANIFTOKEN_STORE"); //GetPCSkin(oInvoker); + + // Delete any previous tokens + if(GetIsObjectValid(oInvokeToken)) + _DestroyInvocationToken(oInvoker, oInvokeToken); + + // Create new token and store a reference to it + oInvokeToken = CreateItemOnObject(PRC_INVOCATION_TOKEN_NAME, oStore); + SetLocalObject(oInvoker, PRC_INVOCATION_TOKEN_VAR, oInvokeToken); + + Assert(GetIsObjectValid(oInvokeToken), "GetIsObjectValid(oInvokeToken)", "ERROR: Unable to create invocation token! Store object: " + DebugObject2Str(oStore), "inv_inc_invoke", "_CreateInvocationToken()"); + + return oInvokeToken; +}*/ + +/** Internal function. + * Determines whether the given invoker is doing something that would + * interrupt initiating a invocation or affected by an effect that would do + * the same. + * + * @param oInvoker A creature on which _InvocationHB() is running + * @return TRUE if the creature can continue initiating, + * FALSE otherwise + */ +/*int _InvocationStateCheck(object oInvoker) +{ + int nAction = GetCurrentAction(oInvoker); + // If the current action is not among those that could either be used to truespeak the invocation or movement, the invocation fails + if(!(nAction || ACTION_CASTSPELL || nAction == ACTION_INVALID || + nAction || ACTION_ITEMCASTSPELL || nAction == ACTION_MOVETOPOINT || + nAction || ACTION_USEOBJECT || nAction == ACTION_WAIT + ) ) + return FALSE; + + // Affected by something that prevents one from initiating + effect eTest = GetFirstEffect(oInvoker); + int nEType; + while(GetIsEffectValid(eTest)) + { + nEType = GetEffectType(eTest); + if(nEType == EFFECT_TYPE_CUTSCENE_PARALYZE || + nEType == EFFECT_TYPE_DAZED || + nEType == EFFECT_TYPE_PARALYZE || + nEType == EFFECT_TYPE_PETRIFY || + nEType == EFFECT_TYPE_SLEEP || + nEType == EFFECT_TYPE_STUNNED + ) + return FALSE; + + // Get next effect + eTest = GetNextEffect(oInvoker); + } + + return TRUE; +}*/ + +/** Internal function. + * Runs while the given creature is initiating. If they move, take other actions + * that would cause them to interrupt initiating the invocation or are affected by an + * effect that would cause such interruption, deletes the invocation token. + * Stops if such condition occurs or something else destroys the token. + * + * @param oInvoker A creature initiating a invocation + * @param lInvoker The location where the invoker was when starting the invocation + * @param oInvokeToken The invocation token that controls the ongoing invocation + */ +/*void _InvocationHB(object oInvoker, location lInvoker, object oInvokeToken) +{ + if(DEBUG) DoDebug("_InvocationHB() running:\n" + + "oInvoker = " + DebugObject2Str(oInvoker) + "\n" + + "lInvoker = " + DebugLocation2Str(lInvoker) + "\n" + + "oInvokeToken = " + DebugObject2Str(oInvokeToken) + "\n" + + "Distance between invocation start location and current location: " + FloatToString(GetDistanceBetweenLocations(lInvoker, GetLocation(oInvoker))) + "\n" + ); + if(GetIsObjectValid(oInvokeToken)) + { + // Continuance check + if(GetDistanceBetweenLocations(lInvoker, GetLocation(oInvoker)) > 2.0f || // Allow some variance in the location to account for dodging and random fidgeting + !_InvocationStateCheck(oInvoker) // Action and effect check + ) + { + if(DEBUG) DoDebug("_InvocationHB(): invoker moved or lost concentration, destroying token"); + _DestroyInvocationToken(oInvoker, oInvokeToken); + + // Inform invoker + FloatingTextStrRefOnCreature(16832980, oInvoker, FALSE); // "You have lost concentration on the invocation you were attempting to cast!" + } + // Schedule next HB + else + DelayCommand(PRC_INVOCATION_HB_DELAY, _InvocationHB(oInvoker, lInvoker, oInvokeToken)); + } +}*/ + +/** Internal function. + * Checks if the invoker is in range to use the invocation they are trying to use. + * If not, queues commands to make the invoker to run into range. + * + * @param oInvoker A creature initiating a invocation + * @param nInvocation SpellID of the invocation being initiated + * @param lTarget The target location or the location of the target object + */ +/*void _InvocationRangeCheck(object oInvoker, int nInvocation, location lTarget) +{ + float fDistance = GetDistanceBetweenLocations(GetLocation(oInvoker), lTarget); + float fRangeLimit; + string sRange = Get2DACache("spells", "Range", nInvocation); + + // Personal range invocations are always in range + if(sRange == "P") + return; + // Ranges according to the CCG spells.2da page + else if(sRange == "T") + fRangeLimit = 2.25f; + else if(sRange == "S") + fRangeLimit = 8.0f; + else if(sRange == "M") + fRangeLimit = 20.0f; + else if(sRange == "L") + fRangeLimit = 40.0f; + + // See if we are out of range + if(fDistance > fRangeLimit) + { + // Create waypoint for the movement + object oWP = CreateObject(OBJECT_TYPE_WAYPOINT, "nw_waypoint001", lTarget); + + // Move into range, with a bit of fudge-factor + //ActionMoveToObject(oWP, TRUE, fRangeLimit - 0.15f); + + // CleanUp + ActionDoCommand(DestroyObject(oWP)); + + // CleanUp, paranoia + AssignCommand(oWP, ActionDoCommand(DestroyObject(oWP, 60.0f))); + } +}*/ + +/** Internal function. + * Assigns the fakecast command that is used to display the conjuration VFX when using an invocation. + * Separated from UseInvocation() due to a bug with ActionFakeCastSpellAtObject(), which requires + * use of ClearAllActions() to work around. + * The problem is that if the target is an item on the ground, if the actor is out of spell + * range when doing the fakecast, they will run on top of the item instead of to the edge of + * the spell range. This only happens if there was a "real action" in the actor's action queue + * immediately prior to the fakecast. + */ +/*void _AssignUseInvocationFakeCastCommands(object oInvoker, object oTarget, location lTarget, int nSpellID) +{ + // Nuke actions to prevent the fakecast action from bugging + ClearAllActions(); + + if(GetIsObjectValid(oTarget)) + ActionCastFakeSpellAtObject(nSpellID, oTarget, PROJECTILE_PATH_TYPE_DEFAULT); + else + ActionCastFakeSpellAtLocation(nSpellID, lTarget, PROJECTILE_PATH_TYPE_DEFAULT); +}*/ + + +/** Internal function. + * Places the cheatcasting of the real invocation into the invoker's action queue. + */ +/*void _UseInvocationAux(object oInvoker, object oInvokeToken, int nSpellId, + object oTarget, location lTarget, + int nInvocation, int nClass, int nLevelOverride) +{ + if(DEBUG) DoDebug("_UseInvocationAux() running:\n" + + "oInvoker = " + DebugObject2Str(oInvoker) + "\n" + + "oInvokeToken = " + DebugObject2Str(oInvokeToken) + "\n" + + "nSpellId = " + IntToString(nSpellId) + "\n" + + "oTarget = " + DebugObject2Str(oTarget) + "\n" + + "lTarget = " + DebugLocation2Str(lTarget) + "\n" + + "nInvocation = " + IntToString(nInvocation) + "\n" + + "nClass = " + IntToString(nClass) + "\n" + + "nLevelOverride = " + IntToString(nLevelOverride) + "\n" + ); + + // Make sure nothing has interrupted this invocation + if(GetIsObjectValid(oInvokeToken)) + { + if(DEBUG) DoDebug("_UseInvocationAux(): Token was valid, queueing actual invocation"); + // Set the class to cast as + SetLocalInt(oInvoker, PRC_INVOKING_CLASS, nClass + 1); + + // Set the invocation's level + SetLocalInt(oInvoker, PRC_INVOCATION_LEVEL, StringToInt(lookup_spell_innate(nSpellId))); + + if(nLevelOverride != 0) + AssignCommand(oInvoker, ActionDoCommand(SetLocalInt(oInvoker, PRC_CASTERLEVEL_OVERRIDE, nLevelOverride))); + if(GetIsObjectValid(oTarget)) + AssignCommand(oInvoker, ActionCastSpellAtObject(nInvocation, oTarget, METAMAGIC_NONE, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE)); + else + AssignCommand(oInvoker, ActionCastSpellAtLocation(nInvocation, lTarget, METAMAGIC_NONE, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE)); + if(nLevelOverride != 0) + AssignCommand(oInvoker, ActionDoCommand(DeleteLocalInt(oInvoker, PRC_CASTERLEVEL_OVERRIDE))); + + // Destroy the invocation token for this invocation + _DestroyInvocationToken(oInvoker, oInvokeToken); + } +}*/ + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +struct invocation EvaluateInvocation(object oInvoker, object oTarget) +{ + /* Get some data */ + int bIgnoreConstraints = (DEBUG) ? GetLocalInt(oInvoker, INV_DEBUG_IGNORE_CONSTRAINTS) : FALSE; + // invoker-related stuff + int nInvokerLevel = GetInvokerLevel(oInvoker); + int nInvocationLevel = GetInvocationLevel(oInvoker); + int nClass = GetInvokingClass(oInvoker); + + /* Initialise the invocation structure */ + struct invocation invoked; + invoked.oInvoker = oInvoker; + invoked.bCanInvoke = TRUE; // Assume successfull invocation by default + invoked.nInvokerLevel = nInvokerLevel; + invoked.nInvocationId = PRCGetSpellId(); + + if (DEBUG) FloatingTextStringOnCreature(GetName(oInvoker)+" is a "+IntToString(nClass)+" casting invocation "+IntToString(invoked.nInvocationId)+", a "+IntToString(nInvocationLevel)+" level invocation, at "+IntToString(nInvokerLevel)+" invoker level", oInvoker); + + // Skip doing anything if something has prevented a successful invocation already by this point + //if(invoked.bCanInvoke) + //{ + invoked = _DoInvocationSpellfireFriendlyAbsorption(invoked, oTarget); + //}//end if + + if(DEBUG) DoDebug("EvaluateInvocation(): Final result:\n" + DebugInvocation2Str(invoked)); + + // Initiate invocation-related variable CleanUp + //DelayCommand(0.5f, _CleanInvocationVariables(oInvoker)); + + return invoked; +} + +void UseInvocation(int nInvocation, int nClass, int nLevelOverride = 0, int bInstant = FALSE) +{ + if(nClass < 0) + nClass = CLASS_TYPE_WARLOCK; + object oInvoker = OBJECT_SELF; +// object oSkin = GetPCSkin(oInvoker); +// object oTarget = PRCGetSpellTargetObject(); +// object oInvokeToken; +// location lTarget = PRCGetSpellTargetLocation(); +// int nSpellID = PRCGetSpellId(); + //int nInvocationDur = StringToInt(Get2DACache("spells", "ConjTime", nInvocation)) + StringToInt(Get2DACache("spells", "CastTime", nInvocation)); + // This is a test case to speed up the impact of the melee attacks, as PerformAttackRound takes the full 6 second. +// int nInvocationDur = 0; + + + // Setup invocation-related variables + ActionDoCommand(_SetInvocationVariables(oInvoker, nClass, StringToInt(lookup_spell_innate(nInvocation)))); + + // Cast the actual invocation + ActionCastSpell(nInvocation, nLevelOverride, 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, 0, 0, OBJECT_INVALID, bInstant); + + // Initiate invocation-related variable CleanUp + ActionDoCommand(_CleanInvocationVariables(oInvoker)); + // Normally swift action invocations check + /*if(Get2DACache("feat", "Constant", GetClassFeatFromPower(nInvocation, nClass)) == "SWIFT_ACTION" && // The invocation is swift action to use + TakeSwiftAction(oInvoker) // And the invoker can take a swift action now + ) + { + nInvocationDur = 0; + }*/ + + /*if(DEBUG) DoDebug("UseInvocation(): invoker is " + DebugObject2Str(oInvoker) + "\n" + + "nInvocation = " + IntToString(nInvocation) + "\n" + + "nClass = " + IntToString(nClass) + "\n" + + "nLevelOverride = " + IntToString(nLevelOverride) + "\n" + + "invocation duration = " + IntToString(nInvocationDur) + "ms \n" + //+ "Token exists = " + DebugBool2String(GetIsObjectValid(oInvokeToken)) + );*/ + + // Create the invocation token. Deletes any old tokens and cancels corresponding invocations as a side effect + //oInvokeToken = _CreateInvocationToken(oInvoker); + + /// @todo Hook to the invoker's OnDamaged event for the concentration checks to avoid losing the invocation + + // Nuke action queue to prevent cheating with creative invocation stacking. + // Probably not necessary anymore - Ornedan + //if(DEBUG) SendMessageToPC(oInvoker, "Clearing all actions in preparation for second stage of the invocation."); + //ClearAllActions(); + + // If out of range, move to range + //_InvocationRangeCheck(oInvoker, nInvocation, GetIsObjectValid(oTarget) ? GetLocation(oTarget) : lTarget); + + // Start the invocation monitor HB + //DelayCommand(IntToFloat(nInvocationDur), ActionDoCommand(_InvocationHB(oInvoker, GetLocation(oInvoker), oInvokeToken))); + + // Assuming the spell isn't used as a swift action, fakecast for visuals + /*if(nInvocationDur > 0) + { + // Hack. Workaround of a bug with the fakecast actions. See function comment for details + ActionDoCommand(_AssignUseInvocationFakeCastCommands(oInvoker, oTarget, lTarget, nSpellID)); + }*/ + + // Action queue the function that will cheatcast the actual invocation + //DelayCommand(IntToFloat(nInvocationDur), AssignCommand(oInvoker, ActionDoCommand(_UseInvocationAux(oInvoker, oInvokeToken, nSpellID, oTarget, lTarget, nInvocation, nClass, nLevelOverride)))); +} + +string DebugInvocation2Str(struct invocation invoked) +{ + string sRet; + + sRet += "oInvoker = " + DebugObject2Str(invoked.oInvoker) + "\n"; + sRet += "bCanInvoke = " + DebugBool2String(invoked.bCanInvoke) + "\n"; + sRet += "nInvokerLevel = " + IntToString(invoked.nInvokerLevel); + + return sRet; +} + +void SetLocalInvocation(object oObject, string sName, struct invocation invoked) +{ + //SetLocal (oObject, sName + "_", ); + SetLocalObject(oObject, sName + "_oInvoker", invoked.oInvoker); + + SetLocalInt(oObject, sName + "_bCanInvoke", invoked.bCanInvoke); + SetLocalInt(oObject, sName + "_nInvokerLevel", invoked.nInvokerLevel); + SetLocalInt(oObject, sName + "_nSpellID", invoked.nInvocationId); +} + +struct invocation GetLocalInvocation(object oObject, string sName) +{ + struct invocation invoked; + invoked.oInvoker = GetLocalObject(oObject, sName + "_oInvoker"); + + invoked.bCanInvoke = GetLocalInt(oObject, sName + "_bCanInvoke"); + invoked.nInvokerLevel = GetLocalInt(oObject, sName + "_nInvokerLevel"); + invoked.nInvocationId = GetLocalInt(oObject, sName + "_nSpellID"); + + return invoked; +} + +void DeleteLocalInvocation(object oObject, string sName) +{ + DeleteLocalObject(oObject, sName + "_oInvoker"); + + DeleteLocalInt(oObject, sName + "_bCanInvoke"); + DeleteLocalInt(oObject, sName + "_nInvokerLevel"); + DeleteLocalInt(oObject, sName + "_nSpellID"); +} + +void InvocationDebugIgnoreConstraints(object oInvoker) +{ + SetLocalInt(oInvoker, INV_DEBUG_IGNORE_CONSTRAINTS, TRUE); + DelayCommand(0.0f, DeleteLocalInt(oInvoker, INV_DEBUG_IGNORE_CONSTRAINTS)); +} + +// Test main +//void main(){} diff --git a/src/include/inv_invoc_const.nss b/src/include/inv_invoc_const.nss new file mode 100644 index 0000000..539a31c --- /dev/null +++ b/src/include/inv_invoc_const.nss @@ -0,0 +1,258 @@ +// Real Invocation SpellId Constants +/* + +*/ + +// Least Draconic Invocations +const int INVOKE_BEGUILING_INFLUENCE = 18001; +const int INVOKE_BREATH_OF_THE_NIGHT = 18002; +const int INVOKE_DARKNESS = 18003; +const int INVOKE_DEAFENING_ROAR = 18004; +const int INVOKE_DRACONIC_KNOWLEDGE = 18005; +const int INVOKE_ENDURE_EXPOSURE = 18006; +const int INVOKE_MAGIC_INSIGHT = 18007; +const int INVOKE_SCALDING_GUST = 18008; +const int INVOKE_SEE_THE_UNSEEN = 18009; + +// Lesser Draconic Invocations +const int INVOKE_CHARM = 18010; +const int INVOKE_ENERGY_RESISTANCE = 18011; +const int INVOKE_ENERGY_RESISTANCE_ACID = 18012; +const int INVOKE_ENERGY_RESISTANCE_COLD = 18013; +const int INVOKE_ENERGY_RESISTANCE_ELEC = 18014; +const int INVOKE_ENERGY_RESISTANCE_FIRE = 18015; +const int INVOKE_ENERGY_RESISTANCE_SONIC = 18016; +const int INVOKE_FRIGHTFUL_PRESENCE = 18017; +const int INVOKE_HUMANOID_SHAPE = 18018; +const int INVOKE_HUMANOID_SHAPE_LEARN = 18019; +const int INVOKE_HUMANOID_SHAPE_OPTION = 18020; +const int INVOKE_HUMANOID_SHAPE_TRUE = 18021; +const int INVOKE_HUMANOID_SHAPE_QS1 = 18022; +const int INVOKE_HUMANOID_SHAPE_QS2 = 18023; +const int INVOKE_VOIDSENSE = 18024; +const int INVOKE_VORACIOUS_DISPELLING = 18025; +const int INVOKE_WALK_UNSEEN = 18026; + +// Greater Draconic Invocations +const int INVOKE_AURA_OF_FLAME = 18027; +const int INVOKE_CHILLING_FOG = 18028; +const int INVOKE_DEVOUR_MAGIC = 18029; +const int INVOKE_DRACONIC_TOUGHNESS = 18030; +const int INVOKE_TERRIFYING_ROAR = 18031; + +// Dark Draconic Invocations +const int INVOKE_ENERGY_IMMUNITY = 18032; +const int INVOKE_ENERGY_IMMUNITY_ACID = 18033; +const int INVOKE_ENERGY_IMMUNITY_COLD = 18034; +const int INVOKE_ENERGY_IMMUNITY_ELEC = 18035; +const int INVOKE_ENERGY_IMMUNITY_FIRE = 18036; +const int INVOKE_ENERGY_IMMUNITY_SONIC = 18037; +const int INVOKE_INSTILL_VULNERABILITY = 18038; +const int INVOKE_INSTILL_VULNERABIL_ACID = 18039; +const int INVOKE_INSTILL_VULNERABIL_COLD = 18040; +const int INVOKE_INSTILL_VULNERABIL_ELEC = 18041; +const int INVOKE_INSTILL_VULNERABIL_FIRE = 18042; +const int INVOKE_INSTILL_VULNERABIL_SON = 18043; + +//Least Warlock Invocations +const int INVOKE_ALL_SEEING_EYES = 18045; +const int INVOKE_BALEFUL_UTTERANCE = 18046; +const int INVOKE_CALL_OF_THE_BEAST = 18047; +const int INVOKE_COCOON_OF_REFUSE = 18048; +const int INVOKE_DARK_ONES_OWN_LUCK = 18049; +const int INVOKE_DARK_ONES_OWN_LUCK_FORT = 18050; +const int INVOKE_DARK_ONES_OWN_LUCK_REFLEX = 18051; +const int INVOKE_DARK_ONES_OWN_LUCK_WILL = 18052; +const int INVOKE_DEVILS_SIGHT = 18053; +const int INVOKE_DRAIN_INCARNUM = -1; +const int INVOKE_EARTHEN_GRASP = 18055; +const int INVOKE_ELDRITCH_GLAIVE = 18056; +const int INVOKE_ELDRITCH_SPEAR = 18058; +const int INVOKE_ENTROPIC_WARDING = 18059; +const int INVOKE_FRIGHTFUL_BLAST = 18060; +const int INVOKE_HAMMER_BLAST = 18061; +const int INVOKE_HIDEOUS_BLOW = 18062; +const int INVOKE_LEAPS_AND_BOUNDS = 18063; +const int INVOKE_MIASMIC_CLOUD = 18064; +const int INVOKE_OTHERWORLDLY_WHISPERS = 18065; +const int INVOKE_SERPENTS_TONGUE = 18066; +const int INVOKE_SICKENING_BLAST = 18067; +const int INVOKE_SOULREAVING_AURA = 18068; +const int INVOKE_SUMMON_SWARM = 18069; +const int INVOKE_SUMMON_SWARM_RAT = 18070; +const int INVOKE_SUMMON_SWARM_BAT = 18071; +const int INVOKE_SWIMMING_THE_STYX = 18072; + +//Lesser Warlock Invocations +const int INVOKE_BANEFUL_BLAST_ABERRATION = 18073; +const int INVOKE_BANEFUL_BLAST_BEAST = 18074; +const int INVOKE_BANEFUL_BLAST_CONSTRUCT = 18075; +const int INVOKE_BANEFUL_BLAST_DRAGON = 18076; +const int INVOKE_BANEFUL_BLAST_DWARF = 18077; +const int INVOKE_BANEFUL_BLAST_ELEMENTAL = 18078; +const int INVOKE_BANEFUL_BLAST_ELF = 18079; +const int INVOKE_BANEFUL_BLAST_FEY = 18080; +const int INVOKE_BANEFUL_BLAST_GIANT = 18081; +const int INVOKE_BANEFUL_BLAST_GOBLINOID = 18082; +const int INVOKE_BANEFUL_BLAST_GNOME = 18083; +const int INVOKE_BANEFUL_BLAST_HALFLING = 18084; +const int INVOKE_BANEFUL_BLAST_HUMAN = 18085; +const int INVOKE_BANEFUL_BLAST_MONSTROUS = 18086; +const int INVOKE_BANEFUL_BLAST_ORC = 18087; +const int INVOKE_BANEFUL_BLAST_OUTSIDER = 18088; +const int INVOKE_BANEFUL_BLAST_PLANT = 18089; +const int INVOKE_BANEFUL_BLAST_REPTILIAN = 18090; +const int INVOKE_BANEFUL_BLAST_SHAPECHANGER = 18091; +const int INVOKE_BANEFUL_BLAST_UNDEAD = 18092; +const int INVOKE_BANEFUL_BLAST_VERMIN = 18093; +const int INVOKE_BESHADOWED_BLAST = 18094; +const int INVOKE_BRIMSTONE_BLAST = 18095; +const int INVOKE_COLD_COMFORT = 18096; +const int INVOKE_CURSE_OF_DESPAIR = 18097; +const int INVOKE_DREAD_SEIZURE = 18098; +const int INVOKE_ELDRITCH_CHAIN = 18099; +const int INVOKE_FLEE_THE_SCENE = 18100; +const int INVOKE_FLEE_THE_SCENE_SELECT = 18101; +const int INVOKE_FLEE_THE_SCENE_DIRDIST = 18102; +const int INVOKE_HELLRIME_BLAST = 18103; +const int INVOKE_HUNGRY_DARKNESS = 18104; +const int INVOKE_IGNORE_THE_PYRE = 18105; +const int INVOKE_IGNORE_THE_PYRE_ACID = 18106; +const int INVOKE_IGNORE_THE_PYRE_COLD = 18107; +const int INVOKE_IGNORE_THE_PYRE_ELEC = 18108; +const int INVOKE_IGNORE_THE_PYRE_FIRE = 18109; +const int INVOKE_IGNORE_THE_PYRE_SONIC = 18110; +const int INVOKE_MASK_OF_FLESH = 18111; +const int INVOKE_MASK_OF_FLESH_FRIENDLY = 18112; +const int INVOKE_MASK_OF_FLESH_HOSTILE = 18113; +const int INVOKE_RELENTLESS_DISPELLING = 18114; +const int INVOKE_SPIDER_SHAPE = 18115; +const int INVOKE_STEAL_INCARNUM = -1; +const int INVOKE_STONY_GRASP = 18117; +const int INVOKE_THE_DEAD_WALK = 18118; +const int INVOKE_WALL_OF_GLOOM = 18119; +const int INVOKE_WITCHWOOD_STEP = 18120; + +//Greater Warlock Invocations +const int INVOKE_BEWITCHING_BLAST = 18121; +const int INVOKE_CAUSTIC_MIRE = 18122; +const int INVOKE_CHILLING_TENTACLES = 18123; +const int INVOKE_DRAGON_WARD = 18124; +const int INVOKE_ELDRITCH_CONE = 18125; +const int INVOKE_ELDRITCH_LINE = 18126; +const int INVOKE_ENERVATING_SHADOW = 18127; +const int INVOKE_HELLSPAWNED_GRACE = 18128; +const int INVOKE_HINDERING_BLAST = 18129; +const int INVOKE_INCARNUM_BLAST = -1; +const int INVOKE_NIGHTMARES_MADE_REAL = 18131; +const int INVOKE_NOXIOUS_BLAST = 18132; +const int INVOKE_PAINFUL_SLUMBER_OF_AGES = 18133; +const int INVOKE_PENETRATING_BLAST = 18134; +const int INVOKE_TENACIOUS_PLAGUE = 18135; +const int INVOKE_VITRIOLIC_BLAST = 18136; +const int INVOKE_WALL_OF_PERILOUS_FLAME = 18137; + +//Dark Warlock Invocations +const int INVOKE_BINDING_BLAST = 18138; +const int INVOKE_CASTERS_LAMENT = 18139; +const int INVOKE_DARK_DISCORPORATION = 18140; +const int INVOKE_DARK_FORESIGHT = 18141; +const int INVOKE_ELDRITCH_DOOM = 18142; +const int INVOKE_INCARNUM_SHROUD = -1; +const int INVOKE_PATH_OF_SHADOW = 18144; +const int INVOKE_PATH_OF_SHADOW_SELF = 18145; +const int INVOKE_PATH_OF_SHADOW_PARTY = 18146; +const int INVOKE_RETRIBUTIVE_INVISIBILITY = 18147; +const int INVOKE_STEAL_SUMMONING = 18148; +const int INVOKE_UTTERDARK_BLAST = 18149; +const int INVOKE_WORD_OF_CHANGING = 18150; + +//AOEs +const int INVOKE_AOE_CHILLFOG = 224; +const int INVOKE_AOE_BREATH_OF_NIGHT = 142; +const int INVOKE_AOE_COLD_COMFORT = 226; +const int INVOKE_VFX_CHILLING_TENTACLES = 227; +const int INVOKE_VFX_PER_WALLPERILFIRE = 228; +const int INVOKE_AOE_MIASMIC_CLOUD = 229; +const int INVOKE_AOE_CAUSTIC_MIRE = 230; +const int INVOKE_AOE_ENERVATING_SHADOW = 231; +const int INVOKE_VFX_NIGHTMARE_TERRAIN_1 = 232; +const int INVOKE_VFX_NIGHTMARE_TERRAIN_4 = 233; +const int INVOKE_VFX_NIGHTMARE_TERRAIN_7 = 234; +const int INVOKE_VFX_NIGHTMARE_TERRAIN_11 = 235; +const int INVOKE_VFX_NIGHTMARE_TERRAIN_15 = 236; +const int INVOKE_VFX_NIGHTMARE_TERRAIN_21 = 237; +const int INVOKE_VFX_NIGHTMARE_TERRAIN_25 = 238; +const int INVOKE_VFX_NIGHTMARE_TERRAIN_31 = 239; +const int INVOKE_VFX_NIGHTMARE_TERRAIN_37 = 240; +const int INVOKE_AOE_SWARMDMG = 241; +const int INVOKE_VFX_HUNGRY_DARKNESS = 242; +const int INVOKE_AOE_SWARMDMG_2 = 243; +const int INVOKE_AOE_SWARMDMG_3 = 244; +const int INVOKE_AOE_SWARMDMG_4 = 245; +const int INVOKE_AOE_SWARMDMG_5 = 246; +const int INVOKE_AOE_SWARMDMG_6 = 247; +const int INVOKE_VFX_DARK_DISCORPORATION = 248; +const int INVOKE_VFX_PER_WALL_OF_GLOOM = 249; +const int INVOKE_AOE_EARTHEN_GRASP_GRAPPLE = 250; + +//class abilities +const int INVOKE_ELDRITCH_BLAST = 2083; +const int INVOKE_IMBUE_ITEM = 2082; +const int INVOKE_FIENDISH_RESILIENCE = 2084; + +//epic warlock feats +const int INVOKE_LORD_OF_ALL_ESSENCES = 3758; +const int INVOKE_MASTER_OF_ELEMENTS_AIR = 3753; +const int INVOKE_MASTER_OF_ELEMENTS_EARTH = 3754; +const int INVOKE_MASTER_OF_ELEMENTS_FIRE = 3755; +const int INVOKE_MASTER_OF_ELEMENTS_WATER = 3756; +const int INVOKE_MASTER_OF_ELEMENTS_DOMINATE = 3757; +const int INVOKE_MORPHEME_SAVANT_WORD_KILL = 3750; +const int INVOKE_MORPHEME_SAVANT_WORD_STUN = 3751; +const int INVOKE_SHADOWMASTER_CONCEALMENT = 3743; +const int INVOKE_SHADOWMASTER_SUMMON_SHADOW = 3745; +const int INVOKE_SHADOWMASTER_CONE_OF_COLD = 3746; +const int INVOKE_SHADOWMASTER_FIREBALL = 3747; +const int INVOKE_SHADOWMASTER_STONESKIN = 3748; +const int INVOKE_SHADOWMASTER_WALL_OF_FIRE = 3749; + +//other invocation-related abilities +const int INVOKE_ELDRITCH_GLAIVE_ONHIT = 205; + +//Hellfire Warlock +const int INVOKE_HELLFIRE_BLAST = 17282; +const int INVOKE_HELLFIRE_SPEAR = 17283; +const int INVOKE_HELLFIRE_GLAIVE = 17284; +const int INVOKE_HELLFIRE_BLOW = 17285; +const int INVOKE_HELLFIRE_CHAIN = 17286; +const int INVOKE_HELLFIRE_CONE = 17287; +const int INVOKE_HELLFIRE_LINE = 17288; +const int INVOKE_HELLFIRE_DOOM = 17289; +const int INVOKE_HF_INFUSION_EXTEND = 17291; +const int INVOKE_HF_INFUSION_EMPOWER = 17292; +const int INVOKE_HF_INFUSION_WIDEN = 17293; +const int INVOKE_HF_INFUSION_MAXIMIZE = 17294; +const int INVOKE_HELLFIRE_SHIELD = 17295; + +//Eldritch Disciple +const int INVOKE_CORRUPTING_BLAST = 17270; +const int INVOKE_DAMAGE_REDUCTION = 17271; +const int INVOKE_FEARFUL_GLARE = 17272; +const int INVOKE_FIENDISH_RESISTANCE = 17273; +const int INVOKE_HEALING_BLAST = 17274; +const int INVOKE_PROTECTIVE_AURA = 17275; +const int INVOKE_STRENGTH_OF_WILL = 17276; +const int INVOKE_WILD_FRENZY = 17277; + +//Eldritch Theurge +const int INVOKE_GR_SPELL_SELECT_CONVO = 17259; +const int INVOKE_GR_SPELL_SELECT_QUICK1 = 17260; +const int INVOKE_GR_SPELL_SELECT_QUICK2 = 17261; +const int INVOKE_GR_SPELL_SELECT_QUICK3 = 17262; +const int INVOKE_GR_SPELL_SELECT_QUICK4 = 17263; +const int INVOKE_SB_SPELL_SELECT_CONVO = 17265; +const int INVOKE_SB_SPELL_SELECT_QUICK1 = 17266; +const int INVOKE_SB_SPELL_SELECT_QUICK2 = 17267; +const int INVOKE_SB_SPELL_SELECT_QUICK3 = 17268; +const int INVOKE_SB_SPELL_SELECT_QUICK4 = 17269; diff --git a/src/include/inv_invokehook.nss b/src/include/inv_invokehook.nss new file mode 100644 index 0000000..92b0f1f --- /dev/null +++ b/src/include/inv_invokehook.nss @@ -0,0 +1,170 @@ +//:://///////////////////////////////////////////// +//:: Invocation Hook File. +//:: inv_invokehook.nss +//::////////////////////////////////////////////// +/* + + This file acts as a hub for all code that + is hooked into the invocation scripts + +*/ +//::////////////////////////////////////////////// +//:: Created By: Fox +//:: Created On: 25-1-2008 +//::////////////////////////////////////////////// + +#include "prc_inc_spells" +#include "inv_inc_invfunc" +#include "x2_inc_spellhook" + +// This function holds all functions that are supposed to run before the actual +// spellscript gets run. If this functions returns FALSE, the spell is aborted +// and the spellscript will not run +int PreInvocationCastCode(); + +// All invocations have somatic component so we will roll ASF check here +int InvocationASFCheck(object oInvoker, int nClass) +{ + int nASF = GetArcaneSpellFailure(oInvoker); + + // Warlocks ignore ASF chance while casting in light armor + if(nClass == CLASS_TYPE_WARLOCK) + { + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oInvoker); + int nAC = GetBaseAC(oArmor); + + //armors + switch(nAC) + { + case 1: nASF -= 5; break;//light + case 2: nASF -= 10; break;//light + case 3: nASF -= 20; break;//light + case 4: nASF -= GetHasFeat(FEAT_BATTLE_CASTER, oInvoker) ? 20 : 0; break;//medium; + case 5: nASF -= GetHasFeat(FEAT_BATTLE_CASTER, oInvoker) ? 30 : 0; break;//medium + default: break; + } + } + else if(nClass == CLASS_TYPE_DRAGON_SHAMAN) + { + //no ASF chance + return TRUE; + } + + if(Random(100) < nASF) + { + //52946 = Spell failed due to arcane spell failure! + FloatingTextStrRefOnCreature(52946, oInvoker, FALSE); + return FALSE; + } + + return TRUE; +} + +//------------------------------------------------------------------------------ +// if FALSE is returned by this function, the spell will not be cast +// the order in which the functions are called here DOES MATTER, changing it +// WILL break the crafting subsystems +//------------------------------------------------------------------------------ +int PreInvocationCastCode() +{ + object oInvoker = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + object oCastItem = GetSpellCastItem(); + int nInvokeId = PRCGetSpellId(); + int nInvokingClass = GetInvokingClass(oInvoker); + int nInvokeLevel = GetInvocationLevel(oInvoker); + int bInvokeIsHostile = Get2DACache("spells", "HostileSetting", nInvokeId) == "1"; + + int nContinue = !ExecuteScriptAndReturnInt("prespellcode", oInvoker); + + //--------------------------------------------------------------------------- + // Break any spell require maintaining concentration + //--------------------------------------------------------------------------- + X2BreakConcentrationSpells(); + + //--------------------------------------------------------------------------- + // No invoking while using expertise + //--------------------------------------------------------------------------- + if(nContinue) + if (GetActionMode(oInvoker, ACTION_MODE_EXPERTISE) || GetActionMode(oInvoker, ACTION_MODE_IMPROVED_EXPERTISE)) + nContinue = FALSE; + + //--------------------------------------------------------------------------- + // Check for PRC spell effects + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = PRCSpellEffects(oInvoker, oTarget, nInvokeId, nInvokeLevel, nInvokingClass, bInvokeIsHostile, -1); + + //--------------------------------------------------------------------------- + // Run Grappling Concentration Check + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = GrappleConc(oInvoker, nInvokeLevel); + + //--------------------------------------------------------------------------- + // Run ASF Check + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = InvocationASFCheck(oInvoker, nInvokingClass); + + //--------------------------------------------------------------------------- + // This stuff is only interesting for player characters we assume that use + // magic device always works and NPCs don't use the crafting feats or + // sequencers anyway. Thus, any NON PC spellcaster always exits this script + // with TRUE (unless they are DM possessed or in the Wild Magic Area in + // Chapter 2 of Hordes of the Underdark. + //--------------------------------------------------------------------------- + if(!GetIsPC(oInvoker) + && !GetPRCSwitch(PRC_NPC_HAS_PC_SPELLCASTING)) + { + if(!GetIsDMPossessed(oInvoker) && !GetLocalInt(GetArea(oInvoker), "X2_L_WILD_MAGIC")) + { + return TRUE; + } + } + + //--------------------------------------------------------------------------- + // Run use magic device skill check + //--------------------------------------------------------------------------- + if(nContinue) + { + nContinue = X2UseMagicDeviceCheck(oInvoker); + } + + //----------------------------------------------------------------------- + // run any user defined spellscript here + //----------------------------------------------------------------------- + if (nContinue) + { + nContinue = X2RunUserDefinedSpellScript(); + } + + //--------------------------------------------------------------------------- + // Check for the new restricted itemproperties + //--------------------------------------------------------------------------- + if(nContinue + && GetIsObjectValid(oCastItem) + && !CheckPRCLimitations(oCastItem, oInvoker)) + { + SendMessageToPC(oInvoker, "You cannot use "+GetName(oCastItem)); + nContinue = FALSE; + } + + //Cleaning spell variables used for holding the charge + if(!GetLocalInt(oInvoker, "PRC_SPELL_EVENT")) + { + DeleteLocalInt(oInvoker, "PRC_SPELL_CHARGE_COUNT"); + DeleteLocalInt(oInvoker, "PRC_SPELL_CHARGE_SPELLID"); + DeleteLocalObject(oInvoker, "PRC_SPELL_CONC_TARGET"); + DeleteLocalInt(oInvoker, "PRC_SPELL_METAMAGIC"); + DeleteLocalManifestation(oInvoker, "PRC_POWER_HOLD_MANIFESTATION"); + DeleteLocalMystery(oInvoker, "MYST_HOLD_MYST"); + } + else if(GetLocalInt(oInvoker, "PRC_SPELL_CHARGE_SPELLID") != nInvokeId) + { //Sanity check, in case something goes wrong with the action queue + DeleteLocalInt(oInvoker, "PRC_SPELL_EVENT"); + } + + return nContinue; +} + diff --git a/src/include/lookup_2da_spell.nss b/src/include/lookup_2da_spell.nss new file mode 100644 index 0000000..20561ab --- /dev/null +++ b/src/include/lookup_2da_spell.nss @@ -0,0 +1,123 @@ +/* +** Spell lookup&caching code by DarkGod +** Because the engine sucks so badly ... +*/ +#include "inc_2dacache" + +//const string PRC_CACHE_SUB_STRING = "NULL"; + +string +lookup_and_cache_spell_field(int spell_id, string tag_base, string column, object oModule = OBJECT_INVALID) +{ +//modifed by Primogenitor to a more general 2da caching system +/* + // Verify the module + if (!GetIsObjectValid(oModule)) + oModule = GetModule(); + + // Create the tag string + string tag = tag_base + IntToString(spell_id); + + // lookup the tag in cache + string val = GetLocalString(oModule, tag); + + // lookup and fill the cache if required + if (val == "") { + val = Get2DACache("spells", column, spell_id); + + // Get2DAString() will return "" for invalid fields + // In order to make our per field cache work, we need to + // perform a substitution so that non-existant and invalid + // values are different. Verify that this constant is indeed + // unique within the 2da file if this code is reused + if (val == "") + val = PRC_CACHE_SUB_STRING; + + SetLocalString(oModule, tag, val); + } + + // Undo the substitution, see above comments for details + if (val == PRC_CACHE_SUB_STRING) + val = ""; + + return val; +*/ + return Get2DACache("spells", column, spell_id); +} + +string +lookup_spell_name(int spell_id, object oModule = OBJECT_INVALID) +{ + return lookup_and_cache_spell_field(spell_id, + "PRC_PACK_SPELL_NAME_", "Name", oModule); +} + +string +lookup_spell_level(int spell_id, object oModule = OBJECT_INVALID) +{ + return lookup_and_cache_spell_field(spell_id, + "PRC_PACK_SPELL_LEVEL_", "Wiz_Sorc", oModule); +} + +string +lookup_spell_innate(int spell_id, object oModule = OBJECT_INVALID) +{ + string sTemp = lookup_and_cache_spell_field(spell_id, "PRC_PACK_SPELL_INNATE_LEVEL_", "Innate", oModule); + if(sTemp == "") + { + string sMaster = Get2DACache("spells", "Master", spell_id); + if(sMaster != "") + { + sTemp = Get2DACache("spells", "Innate", StringToInt(sMaster)); + } + } + return sTemp; +} + +string +lookup_spell_druid_level(int spell_id, object oModule = OBJECT_INVALID) +{ + return lookup_and_cache_spell_field(spell_id, + "PRC_PACK_SPELL_DRUID_LEVEL_", "Druid", oModule); +} + +string +lookup_spell_cleric_level(int spell_id, object oModule = OBJECT_INVALID) +{ + return lookup_and_cache_spell_field(spell_id, + "PRC_PACK_SPELL_CLERIC_LEVEL_", "Cleric", oModule); +} + +string +lookup_spell_type(int spell_id, object oModule = OBJECT_INVALID) +{ + return lookup_and_cache_spell_field(spell_id, + "PRC_PACK_SPELL_TYPE_", "ImmunityType", oModule); +} + +string +lookup_spell_vs(int spell_id, object oModule = OBJECT_INVALID) +{ + return lookup_and_cache_spell_field(spell_id, + "PRC_PACK_SPELL_VS_", "VS", oModule); +} + +string +lookup_spell_school(int spell_id, object oModule = OBJECT_INVALID) +{ + return lookup_and_cache_spell_field(spell_id, + "PRC_PACK_SPELL_SCHOOL_", "School", oModule); +} + +void +lookup_spell(int spell_id) +{ + object module = GetModule(); + lookup_spell_level(spell_id, module); + lookup_spell_cleric_level(spell_id, module); + lookup_spell_innate(spell_id, module); + lookup_spell_cleric_level(spell_id, module); + lookup_spell_type(spell_id, module); + lookup_spell_vs(spell_id, module); + lookup_spell_school(spell_id, module); +} diff --git a/src/include/moi_inc_moifunc.nss b/src/include/moi_inc_moifunc.nss new file mode 100644 index 0000000..d48a441 --- /dev/null +++ b/src/include/moi_inc_moifunc.nss @@ -0,0 +1,1490 @@ +//:://///////////////////////////////////////////// +//:: Meldshaping/Incarnum main include: Miscellaneous +//:: moi_inc_moifunc +//:://///////////////////////////////////////////// +/** @file + Defines various functions and other stuff that + do something related to Meldshaping. + + Also acts as inclusion nexus for the general + meldshaping includes. In other words, don't include + them directly in your scripts, instead include this. + + @author Stratovarius + @date Created - 2019.12.28 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Determines the given creature's Meldshaper level. + * + * @param oMeldshaper The creature whose Meldshaper level to determine + * @param nSpecificClass The class to determine the creature's Meldshaper + * level in. + * @param nMeld The meld to test, since Incarnum does level by meld + * + * @return The Meldshaper level + */ +int GetMeldshaperLevel(object oMeldshaper, int nSpecificClass, int nMeld); + +/** + * Determines the given creature's highest unmodified Meldshaper level among its + * Meldshaping classes. + * + * @param oMeldshaper Creature whose highest Meldshaper level to determine + * @return The highest unmodified Meldshaper level the creature can have + */ +int GetHighestMeldshaperLevel(object oMeldshaper); + +/** + * Determines whether a given class is a Incarnum-related class or not. + * + * @param nClass CLASS_TYPE_* of the class to test + * @return TRUE if the class is a Incarnum-related class, FALSE otherwise + */ +int GetIsIncarnumClass(int nClass); + +/** + * Calculates how many Meldshaper levels are gained by a given creature from + * it's levels in prestige classes. + * + * @param oMeldshaper Creature to calculate added Meldshaper levels for + * @return The number of Meldshaper levels gained + */ +int GetIncarnumPRCLevels(object oMeldshaper); + +/** + * Determines which of the character's classes is their highest or first + * Meldshaping class, if any. This is the one which gains Meldshaper + * level raise benefits from prestige classes. + * + * @param oMeldshaper Creature whose classes to test + * @return CLASS_TYPE_* of the first Meldshaping class, + * CLASS_TYPE_INVALID if the creature does not possess any. + */ +int GetPrimaryIncarnumClass(object oMeldshaper = OBJECT_SELF); + +/** + * Determines the position of a creature's first Meldshaping class, if any. + * + * @param oMeldshaper Creature whose classes to test + * @return The position of the first Meldshaping class {1, 2, 3} or 0 if + * the creature possesses no levels in Meldshaping classes. + */ +int GetFirstIncarnumClassPosition(object oMeldshaper = OBJECT_SELF); + +/** + * Checks every second to see if temporary essentia has been lost + * + * @param oMeldshaper The meldshaper + */ +void SpawnTempEssentiaChecker(object oMeldshaper); + +/** + * Returns total value of temporary essentia for the meldshaper + * + * @param oMeldshaper The meldshaper + * + * @return Total value of temporary essentia + */ +int GetTemporaryEssentia(object oMeldshaper); + +/** + * Essentia put into feats is locked away for 24 hours/until next rest + * + * @param oMeldshaper The meldshaper + * + * @return Total value of locked essentia + */ +int GetFeatLockedEssentia(object oMeldshaper); + +/** + * Total essentia a character has access to + * + * @param oMeldshaper The meldshaper + * + * @return Total value of essentia available + */ +int GetTotalEssentia(object oMeldshaper); + +/** + * Total essentia a character has access to, minus feat locked essentia + * + * @param oMeldshaper The meldshaper + * + * @return Total value of essentia available, minus feat locked essentia + */ +int GetTotalUsableEssentia(object oMeldshaper); + +/** + * Returns the slot associated to a given chakra + * + * @param nChakra Chakra constant + * + * @return Slot constant + */ +int ChakraToSlot(int nChakra); + +/** + * Returns the total binds the character can have for that class and level + * + * @param oMeldshaper The meldshaper + * @param nClass The class to check + * + * @return Slot constant + */ +int GetMaxBindCount(object oMeldshaper, int nClass); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "prc_inc_natweap" +#include "prc_inc_function" + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int GetMeldshaperLevel(object oMeldshaper, int nSpecificClass, int nMeld) +{ + int nLevel; + + //if (DEBUG) DoDebug("GetMeldshaperLevel: "+GetName(oMeldshaper)+" is a "+IntToString(nSpecificClass)); + + if(GetIsIncarnumClass(nSpecificClass)) + { + // Meldshaper level is class level + prestige + nLevel = GetLevelByClass(nSpecificClass, oMeldshaper); + if(nLevel) + { + // Prevents people double-dipping prestige levels + if (nSpecificClass == GetPrimaryIncarnumClass(oMeldshaper)) + { + nLevel += GetIncarnumPRCLevels(oMeldshaper); + nLevel += GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper); // Necrocarnate is here because it doesn't add to anything other than meldshaper level + } + if (nSpecificClass == CLASS_TYPE_SOULBORN) nLevel /= 2; + } + } + + //if(DEBUG) DoDebug("Meldshaper Level: " + IntToString(nLevel)); + // Being bound to the Totem Chakra increases the level by one. + if (GetIsMeldBound(oMeldshaper, nMeld) == CHAKRA_TOTEM) nLevel++; + return nLevel; +} + +int GetIncarnumLevelForClass(int nSpecificClass, object oMeldshaper) +{ + int nLevel; + + //if (DEBUG) DoDebug("GetMeldshaperLevel: "+GetName(oMeldshaper)+" is a "+IntToString(nSpecificClass)); + + if(GetIsIncarnumClass(nSpecificClass)) + { + // Meldshaper level is class level + prestige + nLevel = GetLevelByClass(nSpecificClass, oMeldshaper); + if(nLevel) + { + // Prevents people double-dipping prestige levels + if (nSpecificClass == GetPrimaryIncarnumClass(oMeldshaper)) nLevel += GetIncarnumPRCLevels(oMeldshaper); + } + } + if(nSpecificClass == CLASS_TYPE_UMBRAL_DISCIPLE || nSpecificClass == CLASS_TYPE_INCANDESCENT_CHAMPION || nSpecificClass == CLASS_TYPE_NECROCARNATE) + nLevel = GetLevelByClass(nSpecificClass, oMeldshaper); + + //if(DEBUG) DoDebug("GetIncarnumLevelForClass: " + IntToString(nLevel)); + return nLevel; +} + +int GetHighestMeldshaperLevel(object oMeldshaper) +{ + /**return PRCMax(PRCMax(GetClassByPosition(1, oMeldshaper) != CLASS_TYPE_INVALID ? GetMeldshaperLevel(oMeldshaper, GetClassByPosition(1, oMeldshaper), -1) : 0, + GetClassByPosition(2, oMeldshaper) != CLASS_TYPE_INVALID ? GetMeldshaperLevel(oMeldshaper, GetClassByPosition(2, oMeldshaper), -1) : 0 + ), + GetClassByPosition(3, oMeldshaper) != CLASS_TYPE_INVALID ? GetMeldshaperLevel(oMeldshaper, GetClassByPosition(3, oMeldshaper), -1) : 0 + );**/ + + int nMax; + int i; + for(i = 1; i <= 8; i++) + { + int nClass = GetClassByPosition(i, oMeldshaper); + int nTest = GetMeldshaperLevel(oMeldshaper, GetClassByPosition(i, oMeldshaper), -1); + if (nTest > nMax) + nMax = nTest; + } + return nMax; +} + +int GetIsIncarnumClass(int nClass) +{ + return nClass == CLASS_TYPE_INCARNATE + || nClass == CLASS_TYPE_SOULBORN + || nClass == CLASS_TYPE_TOTEMIST + || nClass == CLASS_TYPE_SPINEMELD_WARRIOR; +} + +int GetIncarnumPRCLevels(object oMeldshaper) +{ + int nLevel = GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oMeldshaper); + nLevel += GetLevelByClass(CLASS_TYPE_SOULCASTER, oMeldshaper); + + // These two don't add at 1st level + if (GetLevelByClass(CLASS_TYPE_IRONSOUL_FORGEMASTER, oMeldshaper)) + nLevel += GetLevelByClass(CLASS_TYPE_IRONSOUL_FORGEMASTER, oMeldshaper) - 1; + // Totem Rager + if (GetLevelByClass(CLASS_TYPE_TOTEM_RAGER, oMeldshaper) >= 6) + nLevel += (GetLevelByClass(CLASS_TYPE_TOTEM_RAGER, oMeldshaper)) -2; + else if (GetLevelByClass(CLASS_TYPE_TOTEM_RAGER, oMeldshaper)) + nLevel += (GetLevelByClass(CLASS_TYPE_TOTEM_RAGER, oMeldshaper)) -1; + //This is an odd one + if (GetLevelByClass(CLASS_TYPE_WITCHBORN_BINDER, oMeldshaper)) + { + nLevel += (GetLevelByClass(CLASS_TYPE_WITCHBORN_BINDER, oMeldshaper)+1)/2; + + if (GetLevelByClass(CLASS_TYPE_WITCHBORN_BINDER, oMeldshaper) >= 10) nLevel += 1; + } + + /*if (GetLevelByClass(CLASS_TYPE_MASTER_OF_SHADOW, oMeldshaper)) + nLevel += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHADOW, oMeldshaper) - 1; +*/ + return nLevel; +} + +int GetPrimaryIncarnumClass(object oMeldshaper = OBJECT_SELF) +{ + int nClass = CLASS_TYPE_INVALID; + + if(GetPRCSwitch(PRC_CASTERLEVEL_FIRST_CLASS_RULE)) + { + int nIncarnumPos = GetFirstIncarnumClassPosition(oMeldshaper); + if (!nIncarnumPos) return CLASS_TYPE_INVALID; // no Blade Magic Meldshaping class + + nClass = GetClassByPosition(nIncarnumPos, oMeldshaper); + } + else + { + int nClassTest, nClassLvlTest, nMax, i; + for(i = 1; i <= 8; i++) + { + int nClassTest = GetClassByPosition(i, oMeldshaper); + + if(GetIsIncarnumClass(nClassTest)) + nClassLvlTest = GetLevelByClass(nClassTest, oMeldshaper); + else + nClassLvlTest = 0; // Reset to 0 each iteration that isn't incarnum + + if (nClassLvlTest > nMax) + { + nMax = nClassLvlTest; + nClass = nClassTest; + } + } + + if(nMax == 0) //No Incarnum classes + nClass = CLASS_TYPE_INVALID; + } + + return nClass; +} + +int GetFirstIncarnumClassPosition(object oMeldshaper = OBJECT_SELF) +{ + int i; + for(i = 1; i <= 8; i++) + { + if (GetIsIncarnumClass(GetClassByPosition(i, oMeldshaper))) + return i; + } + + return 0; +} + +string GetMeldFile(int nClass = -1) +{ + //string sFile; + //if (nClass == CLASS_TYPE_INCARNATE) sFile = "cls_meld_incarn"; + + return "soulmelds"; +} + +string GetMeldshapingClassFile(int nClass) +{ + string sFile; + if (nClass == CLASS_TYPE_INCARNATE) sFile = "cls_mlkn_incarn"; + else if (nClass == CLASS_TYPE_SOULBORN) sFile = "cls_mlkn_soulbn"; + else if (nClass == CLASS_TYPE_TOTEMIST) sFile = "cls_mlkn_totem"; + else if (nClass == CLASS_TYPE_SPINEMELD_WARRIOR) sFile = "cls_mlkn_spnmld"; + else if (nClass == CLASS_TYPE_UMBRAL_DISCIPLE) sFile = "cls_mlkn_umbral"; + else if (nClass == CLASS_TYPE_INCANDESCENT_CHAMPION) sFile = "cls_mlkn_incand"; + else if (nClass == CLASS_TYPE_NECROCARNATE) sFile = "cls_mlkn_necrnm"; + + return sFile; +} + +int GetMeldshapingClass(object oMeldshaper) +{ + int nClass = -1; + // If there's levels in the class and haven't already done it + if (GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper) && !GetLocalInt(oMeldshaper, "FirstMeldDone")) nClass = CLASS_TYPE_INCARNATE; + else if (GetLevelByClass(CLASS_TYPE_SOULBORN, oMeldshaper) && !GetLocalInt(oMeldshaper, "SecondMeldDone")) nClass = CLASS_TYPE_SOULBORN; + else if (GetLevelByClass(CLASS_TYPE_TOTEMIST, oMeldshaper) && !GetLocalInt(oMeldshaper, "ThirdMeldDone")) nClass = CLASS_TYPE_TOTEMIST; + else if (GetLevelByClass(CLASS_TYPE_SPINEMELD_WARRIOR, oMeldshaper) && !GetLocalInt(oMeldshaper, "FourthMeldDone")) nClass = CLASS_TYPE_SPINEMELD_WARRIOR; + //if (DEBUG) DoDebug("GetMeldshapingClass is "+IntToString(nClass)); + return nClass; +} + +int GetMaxShapeSoulmeldCount(object oMeldshaper, int nClass) +{ + int nMax = StringToInt(Get2DACache(GetMeldshapingClassFile(nClass), "Soulmelds", GetIncarnumLevelForClass(nClass, oMeldshaper)-1)); + if (nClass == GetPrimaryIncarnumClass(oMeldshaper)) + { + nMax += StringToInt(Get2DACache(GetMeldshapingClassFile(CLASS_TYPE_NECROCARNATE), "Soulmelds", GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper))); + int i; + for(i = FEAT_BONUS_SOULMELD_1; i <= FEAT_BONUS_SOULMELD_10; i++) + if(GetHasFeat(i, oMeldshaper)) nMax++; + } + + int nCon = GetAbilityScore(oMeldshaper, ABILITY_CONSTITUTION, TRUE)-10; + if (GetHasFeat(FEAT_UNDEAD_MELDSHAPER, oMeldshaper)) nCon = GetAbilityScore(oMeldshaper, ABILITY_WISDOM, TRUE)-10; + //Limited to Con score - 10 or class limit, whichever is less + nMax = PRCMin(nMax, nCon); + + //if (DEBUG) DoDebug("GetMaxShapeSoulmeldCount is "+IntToString(nMax)); + return nMax; +} + +int GetTotalSoulmeldCount(object oMeldshaper) +{ + int nMax = GetMaxShapeSoulmeldCount(oMeldshaper, CLASS_TYPE_INCARNATE); + nMax += GetMaxShapeSoulmeldCount(oMeldshaper, CLASS_TYPE_SOULBORN); + nMax += GetMaxShapeSoulmeldCount(oMeldshaper, CLASS_TYPE_TOTEMIST); + nMax += GetMaxShapeSoulmeldCount(oMeldshaper, CLASS_TYPE_SPINEMELD_WARRIOR); + nMax += GetMaxShapeSoulmeldCount(oMeldshaper, CLASS_TYPE_NECROCARNATE); + + //if (DEBUG) DoDebug("GetTotalSoulmeldCount is "+IntToString(nMax)); + return nMax; +} + +int GetMaxBindCount(object oMeldshaper, int nClass) +{ + int nMax = StringToInt(Get2DACache(GetMeldshapingClassFile(nClass), "ChakraBinds", GetIncarnumLevelForClass(nClass, oMeldshaper)-1)); + if (nClass == GetPrimaryIncarnumClass(oMeldshaper)) + { + nMax += StringToInt(Get2DACache(GetMeldshapingClassFile(CLASS_TYPE_NECROCARNATE), "ChakraBinds", GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper))); + int i; + for(i = FEAT_EXTRA_CHAKRA_BIND_1; i <= FEAT_EXTRA_CHAKRA_BIND_10; i++) + if(GetHasFeat(i, oMeldshaper)) nMax += 1; + } + //if (DEBUG) DoDebug("GetMaxBindCount is "+IntToString(nMax)); + return nMax; +} + +void ShapeSoulmeld(object oMeldshaper, int nMeld) +{ + PRCRemoveSpellEffects(nMeld, oMeldshaper, oMeldshaper); + GZPRCRemoveSpellEffects(nMeld, oMeldshaper, FALSE); + ActionCastSpellOnSelf(nMeld); + //if (DEBUG) DoDebug("Shaping Soulmeld "+IntToString(nMeld)+" on "+GetName(oMeldshaper)); +} + +void MarkMeldShaped(object oMeldshaper, int nMeld, int nClass) +{ + //if (DEBUG) DoDebug("MarkMeldShaped nMeld is "+IntToString(nMeld)); + int nCont = TRUE; + int nTest, i; + while (nCont) + { + nTest = GetLocalInt(oMeldshaper, "ShapedMeld"+IntToString(nClass)+IntToString(i)); + //if (DEBUG) DoDebug("MarkMeldShaped nTest is "+IntToString(nTest)); + if (!nTest) // If it's blank + { + SetLocalInt(oMeldshaper, "ShapedMeld"+IntToString(nClass)+IntToString(i), nMeld); + //if (DEBUG) DoDebug("MarkMeldShaped SetLocal"); + nCont = FALSE; // Break the loop + } + else + i++; // Increment the counter to check + } +} + +void ClearMeldShapes(object oMeldshaper) +{ + object oSkin = GetPCSkin(oMeldshaper); + ScrubPCSkin(oMeldshaper, oSkin); + int i; + for (i = 0; i <= 22; i++) + { + DeleteLocalInt(oMeldshaper, "ShapedMeld"+IntToString(CLASS_TYPE_INCARNATE)+IntToString(i)); + DeleteLocalInt(oMeldshaper, "ShapedMeld"+IntToString(CLASS_TYPE_SOULBORN)+IntToString(i)); + DeleteLocalInt(oMeldshaper, "ShapedMeld"+IntToString(CLASS_TYPE_TOTEMIST)+IntToString(i)); + DeleteLocalInt(oMeldshaper, "ShapedMeld"+IntToString(CLASS_TYPE_SPINEMELD_WARRIOR)+IntToString(i)); + DeleteLocalInt(oMeldshaper, "UsedMeld"+IntToString(CLASS_TYPE_SPINEMELD_WARRIOR)+IntToString(i)); + DeleteLocalInt(oMeldshaper, "UsedMeld"+IntToString(CLASS_TYPE_INCARNATE)+IntToString(i)); + DeleteLocalInt(oMeldshaper, "UsedMeld"+IntToString(CLASS_TYPE_SOULBORN)+IntToString(i)); + DeleteLocalInt(oMeldshaper, "UsedMeld"+IntToString(CLASS_TYPE_TOTEMIST)+IntToString(i)); + DeleteLocalInt(oMeldshaper, "BoundMeld"+IntToString(i)); + int nTest = GetLocalInt(oMeldshaper, "SpellInvestCheck"+IntToString(i)); + if (nTest) + DeleteLocalInt(oMeldshaper, "SpellEssentia"+IntToString(nTest)); + DeleteLocalInt(oMeldshaper, "SpellInvestCheck"+IntToString(i)); + DeleteLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(i)); + DeleteLocalInt(oMeldshaper, "UsedBladeMeld"+IntToString(i)); + } + for (i = 18700; i < 18799; i++) + { + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(i)); + } + for (i = 8869; i < 8889; i++) + { + DeleteLocalInt(oMeldshaper, "FeatEssentia"+IntToString(i)); + } + DeleteLocalInt(oMeldshaper, "ArcaneFocusBound"); + if (GetLocalInt(oMeldshaper, "DiademPurelight")) + { + SetLocalInt(oMeldshaper, "PRCInLight", GetLocalInt(oMeldshaper, "PRCInLight")-1); + DeleteLocalInt(oMeldshaper, "DiademPurelight"); + } + + if (GetLocalInt(oMeldshaper, "PlanarChasubleLimit") > 7) + DeleteLocalInt(oMeldshaper, "PlanarChasubleLimit"); + else + SetLocalInt(oMeldshaper, "PlanarChasubleLimit", GetLocalInt(oMeldshaper, "PlanarChasubleLimit")+1); + + DeleteLocalInt(oMeldshaper, "GorgonMaskLimit"); + DeleteLocalInt(oMeldshaper, "IncarnateAvatarSpeed"); + DeleteLocalInt(oMeldshaper, "LamiaBeltSpeed"); + DeleteLocalInt(oMeldshaper, "LifebondVestmentsTimer"); + DeleteLocalInt(oMeldshaper, "MidnightAugPower"); + DeleteLocalInt(oMeldshaper, "MeldEssentia18973"); // MELD_DUSKLING_SPEED + DeleteLocalInt(oMeldshaper, "MeldEssentia18691"); // MELD_SPINE_ENHANCEMENT + DeleteLocalInt(oMeldshaper, "MeldEssentia18687"); // MELD_IRONSOUL_SHIELD + DeleteLocalInt(oMeldshaper, "MeldEssentia18685"); // MELD_IRONSOUL_ARMOR + DeleteLocalInt(oMeldshaper, "MeldEssentia18683"); // MELD_IRONSOUL_WEAPON + DeleteLocalInt(oMeldshaper, "MeldEssentia18681"); // MELD_UMBRAL_STEP + DeleteLocalInt(oMeldshaper, "MeldEssentia18679"); // MELD_UMBRAL_SHADOW + DeleteLocalInt(oMeldshaper, "MeldEssentia18677"); // MELD_UMBRAL_SIGHT + DeleteLocalInt(oMeldshaper, "MeldEssentia18675"); // MELD_UMBRAL_SOUL + DeleteLocalInt(oMeldshaper, "MeldEssentia18673"); // MELD_UMBRAL_KISS + DeleteLocalInt(oMeldshaper, "MeldEssentia18670"); // MELD_INCANDESCENT_STRIKE + DeleteLocalInt(oMeldshaper, "MeldEssentia18668"); // MELD_INCANDESCENT_HEAL + DeleteLocalInt(oMeldshaper, "MeldEssentia18666"); // MELD_INCANDESCENT_COUNTENANCE + DeleteLocalInt(oMeldshaper, "MeldEssentia18663"); // MELD_INCANDESCENT_RAY + DeleteLocalInt(oMeldshaper, "MeldEssentia18659"); // MELD_INCANDESCENT_AURA + DeleteLocalInt(oMeldshaper, "MeldEssentia18634"); // MELD_WITCH_MELDSHIELD + DeleteLocalInt(oMeldshaper, "MeldEssentia18636"); // MELD_WITCH_DISPEL + DeleteLocalInt(oMeldshaper, "MeldEssentia18638"); // MELD_WITCH_SHACKLES + DeleteLocalInt(oMeldshaper, "MeldEssentia18640"); // MELD_WITCH_ABROGATION + DeleteLocalInt(oMeldshaper, "MeldEssentia18642"); // MELD_WITCH_SPIRITFLAY + DeleteLocalInt(oMeldshaper, "MeldEssentia18644"); // MELD_WITCH_INTEGUMENT + DeleteLocalInt(oMeldshaper, "NecrocarnumCircletPen"); + DeleteLocalInt(oMeldshaper, "AstralVambraces"); + DeleteLocalInt(oMeldshaper, "TemporaryEssentia"); + DestroyObject(GetItemPossessedBy(oMeldshaper, "moi_incarnatewpn")); // Remove any weapons created by Incarnate Weapon + + // Clean up any the natural weapons that are lying around + ClearNaturalWeapons(oMeldshaper); + // Nuke the creature weapons. If the normal form is supposed to have natural weapons, they'll get re-constructed + if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMeldshaper))) MyDestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMeldshaper)); + if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper))) MyDestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper)); + if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oMeldshaper))) MyDestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oMeldshaper)); + + if (GetLocalInt(oMeldshaper, "ClearEventTotem")) ClearEventScriptList(oMeldshaper, EVENT_ITEM_ONHIT, TRUE, TRUE); +} + +int GetShapedMeldsCount(object oMeldshaper) +{ + int i, nCount, nTest; + for (i = 0; i <= 20; i++) + { + nTest = GetLocalInt(oMeldshaper, "ShapedMeld"+IntToString(CLASS_TYPE_INCARNATE)+IntToString(i)); + if (nTest) // If it's not blank + nCount++; + nTest = GetLocalInt(oMeldshaper, "ShapedMeld"+IntToString(CLASS_TYPE_SOULBORN)+IntToString(i)); + if (nTest) // If it's not blank + nCount++; + nTest = GetLocalInt(oMeldshaper, "ShapedMeld"+IntToString(CLASS_TYPE_TOTEMIST)+IntToString(i)); + if (nTest) // If it's not blank + nCount++; + nTest = GetLocalInt(oMeldshaper, "ShapedMeld"+IntToString(CLASS_TYPE_SPINEMELD_WARRIOR)+IntToString(i)); + if (nTest) // If it's not blank + nCount++; + } + //if (DEBUG) DoDebug("GetTotalShapedMelds is "+IntToString(nCount)); + return nCount; +} + +int GetTotalShapedMelds(object oMeldshaper, int nClass) +{ + int i, nCount, nTest; + for (i = 0; i <= 20; i++) + { + nTest = GetLocalInt(oMeldshaper, "ShapedMeld"+IntToString(nClass)+IntToString(i)); + if (nTest) // If it's not blank + nCount++; + } + //if (DEBUG) DoDebug("GetTotalShapedMelds is "+IntToString(nCount)); + return nCount; +} + +int CheckSplitChakra(object oMeldshaper, int nSlot) +{ + if (nSlot == INVENTORY_SLOT_HEAD && GetHasFeat(FEAT_SPLIT_CHAKRA_CROWN , oMeldshaper)) return TRUE; + if (nSlot == INVENTORY_SLOT_BOOTS && GetHasFeat(FEAT_SPLIT_CHAKRA_FEET , oMeldshaper)) return TRUE; + if (nSlot == INVENTORY_SLOT_ARMS && GetHasFeat(FEAT_SPLIT_CHAKRA_HANDS , oMeldshaper)) return TRUE; + if (nSlot == INVENTORY_SLOT_ARMS && GetHasFeat(FEAT_SPLIT_CHAKRA_ARMS , oMeldshaper)) return TRUE; + if (nSlot == INVENTORY_SLOT_HEAD && GetHasFeat(FEAT_SPLIT_CHAKRA_BROW , oMeldshaper)) return TRUE; + if (nSlot == INVENTORY_SLOT_CLOAK && GetHasFeat(FEAT_SPLIT_CHAKRA_SHOULDERS, oMeldshaper)) return TRUE; + if (nSlot == INVENTORY_SLOT_NECK && GetHasFeat(FEAT_SPLIT_CHAKRA_THROAT , oMeldshaper)) return TRUE; + if (nSlot == INVENTORY_SLOT_BELT && GetHasFeat(FEAT_SPLIT_CHAKRA_WAIST , oMeldshaper)) return TRUE; + if (nSlot == INVENTORY_SLOT_CHEST && GetHasFeat(FEAT_SPLIT_CHAKRA_HEART , oMeldshaper)) return TRUE; + if (nSlot == INVENTORY_SLOT_CHEST && GetHasFeat(FEAT_SPLIT_CHAKRA_SOUL , oMeldshaper)) return TRUE; + + return FALSE; +} + +void BindMeldToChakra(object oMeldshaper, int nMeld, int nChakra, int nClass) +{ + // Make sure it's not in use already, and that you have any binds to make + if (!GetIsChakraBound(oMeldshaper, nChakra) && GetMaxBindCount(oMeldshaper, nClass)) + { + //FloatingTextStringOnCreature("BindMeldToChakra: nMeld "+IntToString(nMeld)+" nChakra "+IntToString(nChakra), oMeldshaper); + SetLocalInt(oMeldshaper, "BoundMeld"+IntToString(nChakra), nMeld); + ShapeSoulmeld(oMeldshaper, nMeld); + int nSlot = ChakraToSlot(DoubleChakraToChakra(nChakra)); // Can't have an item in a bound slot, unless Split Chakra + if (!CheckSplitChakra(oMeldshaper, nSlot)) ForceUnequip(oMeldshaper, GetItemInSlot(nSlot, oMeldshaper), nSlot); + } +} + +int GetTotalBoundMelds(object oMeldshaper) +{ + int i, nCount, nTest; + for (i = 0; i <= 22; i++) + { + nTest = GetLocalInt(oMeldshaper, "BoundMeld"+IntToString(i)); + if (nTest) // If it's not blank + nCount++; + } + //if (DEBUG) DoDebug("GetTotalBoundMelds is "+IntToString(nCount)); + return nCount; +} + +int GetIsChakraUsed(object oMeldshaper, int nChakra, int nClass) +{ + int nTest = GetLocalInt(oMeldshaper, "UsedMeld"+IntToString(nClass)+IntToString(nChakra)); + + //if (DEBUG) DoDebug("GetIsChakraUsed is "+IntToString(nTest)); + return nTest; +} + +void SetChakraUsed(object oMeldshaper, int nMeld, int nChakra, int nClass) +{ + // This isn't the same as binding, but can only have one soulmeld in each chakra + // Each class has its own limit on this, as per p20 of MoI + if (!GetIsChakraUsed(oMeldshaper, nChakra, nClass)) + { + SetLocalInt(oMeldshaper, "UsedMeld"+IntToString(nClass)+IntToString(nChakra), nMeld); + } +} + +int ChakraToSlot(int nChakra) +{ + if (nChakra == CHAKRA_CROWN ) return INVENTORY_SLOT_HEAD; + if (nChakra == CHAKRA_FEET ) return INVENTORY_SLOT_BOOTS; + if (nChakra == CHAKRA_HANDS ) return INVENTORY_SLOT_ARMS; + if (nChakra == CHAKRA_ARMS ) return INVENTORY_SLOT_ARMS; + if (nChakra == CHAKRA_BROW ) return INVENTORY_SLOT_HEAD; + if (nChakra == CHAKRA_SHOULDERS) return INVENTORY_SLOT_CLOAK; + if (nChakra == CHAKRA_THROAT ) return INVENTORY_SLOT_NECK; + if (nChakra == CHAKRA_WAIST ) return INVENTORY_SLOT_BELT; + if (nChakra == CHAKRA_HEART ) return INVENTORY_SLOT_CHEST; + if (nChakra == CHAKRA_SOUL ) return INVENTORY_SLOT_CHEST; + if (nChakra == CHAKRA_TOTEM ) return -1; // no slot associated + + return -1; +} + +void ChakraBindUnequip(object oMeldshaper, object oItem) +{ + int nTest = FALSE; + if (GetItemInSlot(INVENTORY_SLOT_HEAD, oMeldshaper) == oItem && (GetIsChakraBound(oMeldshaper, CHAKRA_CROWN) || GetIsChakraBound(oMeldshaper, CHAKRA_BROW))) nTest = INVENTORY_SLOT_HEAD + 1; + else if (GetItemInSlot(INVENTORY_SLOT_BOOTS, oMeldshaper) == oItem && GetIsChakraBound(oMeldshaper, CHAKRA_FEET)) nTest = INVENTORY_SLOT_BOOTS + 1; + else if (GetItemInSlot(INVENTORY_SLOT_ARMS, oMeldshaper) == oItem && (GetIsChakraBound(oMeldshaper, CHAKRA_ARMS) || GetIsChakraBound(oMeldshaper, CHAKRA_HANDS))) nTest = INVENTORY_SLOT_ARMS + 1; + else if (GetItemInSlot(INVENTORY_SLOT_CLOAK, oMeldshaper) == oItem && GetIsChakraBound(oMeldshaper, CHAKRA_SHOULDERS)) nTest = INVENTORY_SLOT_CLOAK + 1; + else if (GetItemInSlot(INVENTORY_SLOT_NECK, oMeldshaper) == oItem && GetIsChakraBound(oMeldshaper, CHAKRA_THROAT)) nTest = INVENTORY_SLOT_NECK + 1; + else if (GetItemInSlot(INVENTORY_SLOT_BELT, oMeldshaper) == oItem && GetIsChakraBound(oMeldshaper, CHAKRA_WAIST)) nTest = INVENTORY_SLOT_BELT + 1; + else if (GetItemInSlot(INVENTORY_SLOT_CHEST, oMeldshaper) == oItem && (GetIsChakraBound(oMeldshaper, CHAKRA_SOUL) || GetIsChakraBound(oMeldshaper, CHAKRA_HEART))) nTest = INVENTORY_SLOT_CHEST + 1; + //if (DEBUG) DoDebug("ChakraBindUnequip is "+IntToString(nTest-1)); + if (nTest && !CheckSplitChakra(oMeldshaper, nTest-1) && GetIsItemPropertyValid(GetFirstItemProperty(oItem)) && oItem != GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oMeldshaper) && oItem != GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper) && + oItem != GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMeldshaper) && oItem != GetItemInSlot(INVENTORY_SLOT_CARMOUR, oMeldshaper)) // If it's bound you can't equip in that slot + { + nTest = nTest - 1; + ForceUnequip(oMeldshaper, GetItemInSlot(nTest, oMeldshaper), nTest); + FloatingTextStringOnCreature("You cannot equip a magical item when you have bound a meld to the same chakra!", oMeldshaper, FALSE); + } +} + +string ChakraToString(int nChakra) +{ + string sReturn = ""; + if (nChakra == CHAKRA_CROWN || nChakra == CHAKRA_DOUBLE_CROWN ) sReturn = "Crown"; + if (nChakra == CHAKRA_FEET || nChakra == CHAKRA_DOUBLE_FEET ) sReturn = "Feet"; + if (nChakra == CHAKRA_HANDS || nChakra == CHAKRA_DOUBLE_HANDS ) sReturn = "Hands"; + if (nChakra == CHAKRA_ARMS || nChakra == CHAKRA_DOUBLE_ARMS ) sReturn = "Arms"; + if (nChakra == CHAKRA_BROW || nChakra == CHAKRA_DOUBLE_BROW ) sReturn = "Brow"; + if (nChakra == CHAKRA_SHOULDERS || nChakra == CHAKRA_DOUBLE_SHOULDERS) sReturn = "Shoulders"; + if (nChakra == CHAKRA_THROAT || nChakra == CHAKRA_DOUBLE_THROAT ) sReturn = "Throat"; + if (nChakra == CHAKRA_WAIST || nChakra == CHAKRA_DOUBLE_WAIST ) sReturn = "Waist"; + if (nChakra == CHAKRA_HEART || nChakra == CHAKRA_DOUBLE_HEART ) sReturn = "Heart"; + if (nChakra == CHAKRA_SOUL || nChakra == CHAKRA_DOUBLE_SOUL ) sReturn = "Soul"; + if (nChakra == CHAKRA_TOTEM || nChakra == CHAKRA_DOUBLE_TOTEM ) sReturn = "Totem"; + + //if (DEBUG) DoDebug("ChakraToString is "+IntToString(nChakra)+", Return is "+sReturn); + return sReturn; +} + +int GetCanBindChakra(object oMeldshaper, int nChakra) +{ + if (nChakra == CHAKRA_CROWN && + (GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper) >= 2)) return TRUE; + else if (nChakra == CHAKRA_FEET && + (GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper) >= 4)) return TRUE; + else if (nChakra == CHAKRA_HANDS && + (GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper) >= 4)) return TRUE; + else if (nChakra == CHAKRA_ARMS && + (GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper) >= 9)) return TRUE; + else if (nChakra == CHAKRA_BROW && + (GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper) >= 9)) return TRUE; + else if (nChakra == CHAKRA_SHOULDERS && + (GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper) >= 9)) return TRUE; + else if (nChakra == CHAKRA_THROAT && + (GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper) >= 14)) return TRUE; + else if (nChakra == CHAKRA_WAIST && + (GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper) >= 14)) return TRUE; + else if (nChakra == CHAKRA_HEART && + (GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper) >= 16)) return TRUE; + else if (nChakra == CHAKRA_SOUL && + (GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper) >= 19)) return TRUE; + + if (nChakra == CHAKRA_CROWN && + (GetLevelByClass(CLASS_TYPE_SOULBORN, oMeldshaper) >= 8)) return TRUE; + else if (nChakra == CHAKRA_FEET && + (GetLevelByClass(CLASS_TYPE_SOULBORN, oMeldshaper) >= 8)) return TRUE; + else if (nChakra == CHAKRA_HANDS && + (GetLevelByClass(CLASS_TYPE_SOULBORN, oMeldshaper) >= 8)) return TRUE; + else if (nChakra == CHAKRA_ARMS && + (GetLevelByClass(CLASS_TYPE_SOULBORN, oMeldshaper) >= 14)) return TRUE; + else if (nChakra == CHAKRA_BROW && + (GetLevelByClass(CLASS_TYPE_SOULBORN, oMeldshaper) >= 14)) return TRUE; + else if (nChakra == CHAKRA_SHOULDERS && + (GetLevelByClass(CLASS_TYPE_SOULBORN, oMeldshaper) >= 14)) return TRUE; + else if (nChakra == CHAKRA_THROAT && + (GetLevelByClass(CLASS_TYPE_SOULBORN, oMeldshaper) >= 18)) return TRUE; + else if (nChakra == CHAKRA_WAIST && + (GetLevelByClass(CLASS_TYPE_SOULBORN, oMeldshaper) >= 18)) return TRUE; + + if (nChakra == CHAKRA_CROWN && + (GetLevelByClass(CLASS_TYPE_TOTEMIST, oMeldshaper) >= 5)) return TRUE; + else if (nChakra == CHAKRA_FEET && + (GetLevelByClass(CLASS_TYPE_TOTEMIST, oMeldshaper) >= 5)) return TRUE; + else if (nChakra == CHAKRA_HANDS && + (GetLevelByClass(CLASS_TYPE_TOTEMIST, oMeldshaper) >= 5)) return TRUE; + else if (nChakra == CHAKRA_ARMS && + (GetLevelByClass(CLASS_TYPE_TOTEMIST, oMeldshaper) >= 9)) return TRUE; + else if (nChakra == CHAKRA_BROW && + (GetLevelByClass(CLASS_TYPE_TOTEMIST, oMeldshaper) >= 9)) return TRUE; + else if (nChakra == CHAKRA_SHOULDERS && + (GetLevelByClass(CLASS_TYPE_TOTEMIST, oMeldshaper) >= 9)) return TRUE; + else if (nChakra == CHAKRA_THROAT && + (GetLevelByClass(CLASS_TYPE_TOTEMIST, oMeldshaper) >= 14)) return TRUE; + else if (nChakra == CHAKRA_WAIST && + (GetLevelByClass(CLASS_TYPE_TOTEMIST, oMeldshaper) >= 14)) return TRUE; + else if (nChakra == CHAKRA_HEART && + (GetLevelByClass(CLASS_TYPE_TOTEMIST, oMeldshaper) >= 17)) return TRUE; + else if (nChakra == CHAKRA_TOTEM && + (GetLevelByClass(CLASS_TYPE_TOTEMIST, oMeldshaper) >= 2)) return TRUE; + + if (nChakra == CHAKRA_ARMS && + (GetLevelByClass(CLASS_TYPE_SPINEMELD_WARRIOR, oMeldshaper) >= 7)) return TRUE; + + if (nChakra == CHAKRA_CROWN && + (GetLevelByClass(CLASS_TYPE_SOULCASTER, oMeldshaper) >= 3)) return TRUE; + else if (nChakra == CHAKRA_FEET && + (GetLevelByClass(CLASS_TYPE_SOULCASTER, oMeldshaper) >= 3)) return TRUE; + else if (nChakra == CHAKRA_HANDS && + (GetLevelByClass(CLASS_TYPE_SOULCASTER, oMeldshaper) >= 3)) return TRUE; + else if (nChakra == CHAKRA_ARMS && + (GetLevelByClass(CLASS_TYPE_SOULCASTER, oMeldshaper) >= 8)) return TRUE; + else if (nChakra == CHAKRA_BROW && + (GetLevelByClass(CLASS_TYPE_SOULCASTER, oMeldshaper) >= 8)) return TRUE; + else if (nChakra == CHAKRA_SHOULDERS && + (GetLevelByClass(CLASS_TYPE_SOULCASTER, oMeldshaper) >= 8)) return TRUE; + + if (nChakra == CHAKRA_ARMS && + (GetLevelByClass(CLASS_TYPE_IRONSOUL_FORGEMASTER, oMeldshaper) >= 4)) return TRUE; + else if (nChakra == CHAKRA_WAIST && + (GetLevelByClass(CLASS_TYPE_IRONSOUL_FORGEMASTER, oMeldshaper) >= 6)) return TRUE; + else if (nChakra == CHAKRA_SHOULDERS && + (GetLevelByClass(CLASS_TYPE_IRONSOUL_FORGEMASTER, oMeldshaper) >= 8)) return TRUE; + else if (nChakra == CHAKRA_HEART && + (GetLevelByClass(CLASS_TYPE_IRONSOUL_FORGEMASTER, oMeldshaper) >= 10)) return TRUE; + + if (nChakra == CHAKRA_CROWN && + (GetLevelByClass(CLASS_TYPE_TOTEM_RAGER, oMeldshaper) >=4)) return TRUE; + else if (nChakra == CHAKRA_FEET && + (GetLevelByClass(CLASS_TYPE_TOTEM_RAGER, oMeldshaper) >=4)) return TRUE; + else if (nChakra == CHAKRA_HANDS && + (GetLevelByClass(CLASS_TYPE_TOTEM_RAGER, oMeldshaper) >=4)) return TRUE; + else if (nChakra == CHAKRA_ARMS && + (GetLevelByClass(CLASS_TYPE_TOTEM_RAGER, oMeldshaper) >=9)) return TRUE; + else if (nChakra == CHAKRA_BROW && + (GetLevelByClass(CLASS_TYPE_TOTEM_RAGER, oMeldshaper) >=9)) return TRUE; + else if (nChakra == CHAKRA_SHOULDERS && + (GetLevelByClass(CLASS_TYPE_TOTEM_RAGER, oMeldshaper) >=9)) return TRUE; + + if (nChakra == CHAKRA_ARMS && + (GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper) >= 3)) return TRUE; + else if (nChakra == CHAKRA_BROW && + (GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper) >= 3)) return TRUE; + else if (nChakra == CHAKRA_SHOULDERS && + (GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper) >= 3)) return TRUE; + else if (nChakra == CHAKRA_THROAT && + (GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper) >= 8)) return TRUE; + else if (nChakra == CHAKRA_WAIST && + (GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper) >= 8)) return TRUE; + else if (nChakra == CHAKRA_HEART && + (GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper) >= 11)) return TRUE; + else if (nChakra == CHAKRA_SOUL && + (GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper) >= 13)) return TRUE; + + if (nChakra == CHAKRA_CROWN && GetHasFeat(FEAT_OPEN_LEAST_CHAKRA_CROWN, oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_FEET && GetHasFeat(FEAT_OPEN_LEAST_CHAKRA_FEET , oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_HANDS && GetHasFeat(FEAT_OPEN_LEAST_CHAKRA_HANDS , oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_ARMS && GetHasFeat(FEAT_OPEN_LESSER_CHAKRA_ARMS , oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_BROW && GetHasFeat(FEAT_OPEN_LESSER_CHAKRA_BROW , oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_SHOULDERS && GetHasFeat(FEAT_OPEN_LESSER_CHAKRA_SHOULDERS, oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_THROAT && GetHasFeat(FEAT_OPEN_GREATER_CHAKRA_THROAT , oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_WAIST && GetHasFeat(FEAT_OPEN_GREATER_CHAKRA_WAIST , oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_HEART && GetHasFeat(FEAT_OPEN_HEART_CHAKRA , oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_SOUL && GetHasFeat(FEAT_OPEN_SOUL_CHAKRA , oMeldshaper)) return TRUE; + + if (nChakra == CHAKRA_DOUBLE_CROWN && GetHasFeat(FEAT_DOUBLE_CHAKRA_CROWN, oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_DOUBLE_FEET && GetHasFeat(FEAT_DOUBLE_CHAKRA_FEET , oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_DOUBLE_HANDS && GetHasFeat(FEAT_DOUBLE_CHAKRA_HANDS , oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_DOUBLE_ARMS && GetHasFeat(FEAT_DOUBLE_CHAKRA_ARMS , oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_DOUBLE_BROW && GetHasFeat(FEAT_DOUBLE_CHAKRA_BROW , oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_DOUBLE_SHOULDERS && GetHasFeat(FEAT_DOUBLE_CHAKRA_SHOULDERS, oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_DOUBLE_THROAT && GetHasFeat(FEAT_DOUBLE_CHAKRA_THROAT , oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_DOUBLE_WAIST && GetHasFeat(FEAT_DOUBLE_CHAKRA_WAIST , oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_DOUBLE_HEART && GetHasFeat(FEAT_DOUBLE_CHAKRA_HEART , oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_DOUBLE_SOUL && GetHasFeat(FEAT_DOUBLE_CHAKRA_SOUL , oMeldshaper)) return TRUE; + else if (nChakra == CHAKRA_DOUBLE_TOTEM && GetHasFeat(FEAT_DOUBLE_CHAKRA_TOTEM , oMeldshaper)) return TRUE; + + return FALSE; +} + +int GetMaxEssentiaCount(object oMeldshaper, int nClass) +{ + int nMax = StringToInt(Get2DACache(GetMeldshapingClassFile(nClass), "Essentia", GetIncarnumLevelForClass(nClass, oMeldshaper)-1)); + //if (DEBUG) DoDebug("GetMaxEssentiaCount is "+IntToString(nMax)); + return nMax; +} + +void SpawnTempEssentiaChecker(object oMeldshaper) +{ + int nCur = GetTemporaryEssentia(oMeldshaper); + int nPrv = GetLocalInt(oMeldshaper, "TempEssTest"); + int nRed = nPrv - nCur; + // If we've lost some + if (nPrv > nCur) + { + int i, nCount, nTest; + for (i = 18700; i < 18799; i++) + { + nTest = GetLocalInt(oMeldshaper, "TempEssentiaAmount"+IntToString(i)); + if (nTest) // If it's not blank + { + //if (DEBUG) DoDebug("Found "+IntToString(nTest)+" Temp Essentia in Meld "+IntToString(i)); + // There's still some temp essentia left in the meld + if (nTest > nRed) + { + int nChange = nTest-nRed; + SetLocalInt(oMeldshaper, "TempEssentiaAmount"+IntToString(i), nChange); + SetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(i), GetEssentiaInvested(oMeldshaper, i)-nChange); + ShapeSoulmeld(oMeldshaper, i); + //if (DEBUG) DoDebug("Reducing Essentia in Meld "+IntToString(i)+" by "+IntToString(nChange)); + } + else // Means the reduction is higher than the temp essentia ammount + { + // No more temp essentia here + DeleteLocalInt(oMeldshaper, "TempEssentiaAmount"+IntToString(i)); + SetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(i), GetEssentiaInvested(oMeldshaper, i)-nTest); + ShapeSoulmeld(oMeldshaper, i); + //if (DEBUG) DoDebug("Deleted Temp Essentia in Meld "+IntToString(i)+", total "+IntToString(nTest)); + } + + // Reduce the remaining amount of reduction by the amount we just used up + nRed = nRed - nTest; + //if (DEBUG) DoDebug("Remaining Temp Essentia to reduce "+IntToString(nRed)); + if (0 >= nRed) break; // End the loop if we're done + } + } + } + // If we still have some left + if (nCur > 0) + { + SetLocalInt(oMeldshaper, "TempEssTest", nCur); + DelayCommand(1.0, SpawnTempEssentiaChecker(oMeldshaper)); + } + else + DeleteLocalInt(oMeldshaper, "TempEssTest"); +} + +void InvestEssentia(object oMeldshaper, int nMeld, int nEssentia) +{ + // Use up expanded soulmeld capacity + if (nEssentia > 1000) + { + nEssentia -= 1000; + SetIsSoulmeldCapacityUsed(oMeldshaper, nMeld); + } + int nClass = GetMeldShapedClass(oMeldshaper, nMeld); + // Special capacity of 1/2 class level + if (nMeld == MELD_SPINE_ENHANCEMENT) nEssentia = PRCMin(nEssentia, (GetLevelByClass(CLASS_TYPE_SPINEMELD_WARRIOR, oMeldshaper)/2)); + else if (nEssentia > GetMaxEssentiaCapacity(oMeldshaper, nClass, nMeld)) nEssentia = GetMaxEssentiaCapacity(oMeldshaper, nClass, nMeld); + // Can't invest more than you have + if (nEssentia > GetTotalUsableEssentia(oMeldshaper)) nEssentia = GetTotalUsableEssentia(oMeldshaper); + + // All of this garbage to handle temporary essentia + if (GetLocalInt(oMeldshaper, "InvestingTempEssentia")) + { + SetLocalInt(oMeldshaper, "TempEssentiaAmount"+IntToString(nMeld), nEssentia); + SpawnTempEssentiaChecker(oMeldshaper); + DeleteLocalInt(oMeldshaper, "InvestingTempEssentia"); + } + + FloatingTextStringOnCreature("Investing "+IntToString(nEssentia)+" essentia into "+GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nMeld))), oMeldshaper, FALSE); + SetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(nMeld), nEssentia); + SetLocalInt(oMeldshaper, "EssentiaRound"+IntToString(nMeld), TRUE); // This is used by Melds that only trigger on the round that essentia is invested into it + DelayCommand(6.0, DeleteLocalInt(oMeldshaper, "EssentiaRound"+IntToString(nMeld))); +} + +int GetTotalEssentiaInvested(object oMeldshaper) +{ + int i, nCount, nTest; + for (i = 18700; i < 18799; i++) + { + nTest = GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(i)); + if (nTest) // If it's not blank + nCount += nTest; + } + nCount += GetFeatLockedEssentia(oMeldshaper); + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_SPINE_ENHANCEMENT)); // MELD_SPINE_ENHANCEMENT + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_IRONSOUL_SHIELD)); // MELD_IRONSOUL_SHIELD + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_IRONSOUL_ARMOR)); // MELD_IRONSOUL_ARMOR + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_IRONSOUL_WEAPON)); // MELD_IRONSOUL_WEAPON + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_UMBRAL_STEP )); // MELD_UMBRAL_STEP + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_UMBRAL_SHADOW)); // MELD_UMBRAL_SHADOW + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_UMBRAL_SIGHT )); // MELD_UMBRAL_SIGHT + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_UMBRAL_SOUL )); // MELD_UMBRAL_SOUL + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_UMBRAL_KISS )); // MELD_UMBRAL_KISS + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_DUSKLING_SPEED)); // MELD_DUSKLING_SPEED + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_INCANDESCENT_STRIKE)); // MELD_INCANDESCENT_STRIKE + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_INCANDESCENT_HEAL )); // MELD_INCANDESCENT_HEAL + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_INCANDESCENT_COUNTENANCE)); // MELD_INCANDESCENT_COUNTENANCE + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_INCANDESCENT_RAY )); // MELD_INCANDESCENT_RAY + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_INCANDESCENT_AURA )); // MELD_INCANDESCENT_AURA + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_WITCH_MELDSHIELD)); // MELD_WITCH_MELDSHIELD + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_WITCH_DISPEL )); // MELD_WITCH_DISPEL + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_WITCH_SHACKLES )); // MELD_WITCH_SHACKLES + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_WITCH_ABROGATION)); // MELD_WITCH_ABROGATION + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_WITCH_SPIRITFLAY)); // MELD_WITCH_SPIRITFLAY + nCount += GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_WITCH_INTEGUMENT)); // MELD_WITCH_INTEGUMENT + //if (DEBUG) DoDebug("GetTotalEssentiaInvested is "+IntToString(nCount)); + return nCount; +} + +int EssentiaIDToRealID(int nEssentiaID) +{ + int i, nReal, nTest; + for (i = 1; i < 100; i++) + { + nTest = StringToInt(Get2DACache("soulmelds", "EssentiaID", i)); + if (nTest == nEssentiaID) // If it's been found + { + nReal = StringToInt(Get2DACache("soulmelds", "SpellID", i)); + break; + } + } + + if (nEssentiaID == 18690) nReal = MELD_SPINE_ENHANCEMENT; + else if (nEssentiaID == 18686) nReal = MELD_IRONSOUL_SHIELD; + else if (nEssentiaID == 18684) nReal = MELD_IRONSOUL_ARMOR; + else if (nEssentiaID == 18682) nReal = MELD_IRONSOUL_WEAPON; + else if (nEssentiaID == 18680) nReal = MELD_UMBRAL_STEP; + else if (nEssentiaID == 18678) nReal = MELD_UMBRAL_SHADOW; + else if (nEssentiaID == 18676) nReal = MELD_UMBRAL_SIGHT; + else if (nEssentiaID == 18674) nReal = MELD_UMBRAL_SOUL; + else if (nEssentiaID == 18672) nReal = MELD_UMBRAL_KISS; + else if (nEssentiaID == 18669) nReal = MELD_INCANDESCENT_STRIKE; + else if (nEssentiaID == 18667) nReal = MELD_INCANDESCENT_HEAL ; + else if (nEssentiaID == 18665) nReal = MELD_INCANDESCENT_COUNTENANCE; + else if (nEssentiaID == 18662) nReal = MELD_INCANDESCENT_RAY ; + else if (nEssentiaID == 18661) nReal = MELD_INCANDESCENT_AURA ; + else if (nEssentiaID == 18633) nReal = MELD_WITCH_MELDSHIELD; + else if (nEssentiaID == 18635) nReal = MELD_WITCH_DISPEL; + else if (nEssentiaID == 18637) nReal = MELD_WITCH_SHACKLES; + else if (nEssentiaID == 18639) nReal = MELD_WITCH_ABROGATION; + else if (nEssentiaID == 18641) nReal = MELD_WITCH_SPIRITFLAY; + else if (nEssentiaID == 18643) nReal = MELD_WITCH_INTEGUMENT; + + //if (DEBUG) DoDebug("EssentiaToRealID: nEssentiaID "+IntToString(nEssentiaID)+" nReal "+IntToString(nReal)); + return nReal; // Return the real spellID +} + +void DrainEssentia(object oMeldshaper) +{ + //FloatingTextStringOnCreature("DrainEssentia", oMeldshaper); + int i; + for (i = 18700; i < 18799; i++) + { + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(i)); + } + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_DUSKLING_SPEED)); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_SPINE_ENHANCEMENT)); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_IRONSOUL_SHIELD)); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_IRONSOUL_ARMOR)); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_IRONSOUL_WEAPON)); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_UMBRAL_STEP )); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_UMBRAL_SHADOW)); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_UMBRAL_SIGHT )); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_UMBRAL_SOUL )); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_UMBRAL_KISS )); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_INCANDESCENT_STRIKE)); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_INCANDESCENT_HEAL )); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_INCANDESCENT_COUNTENANCE)); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_INCANDESCENT_RAY )); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_INCANDESCENT_AURA )); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_WITCH_MELDSHIELD)); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_WITCH_DISPEL )); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_WITCH_SHACKLES )); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_WITCH_ABROGATION)); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_WITCH_SPIRITFLAY)); + DeleteLocalInt(oMeldshaper, "MeldEssentia"+IntToString(MELD_WITCH_INTEGUMENT)); +} + +void WipeMelds(object oMeldshaper) +{ + //FloatingTextStringOnCreature("WipeMelds", oMeldshaper); + int i; + for (i = 18700; i < 18799; i++) + { + PRCRemoveSpellEffects(i, oMeldshaper, oMeldshaper); + GZPRCRemoveSpellEffects(i, oMeldshaper, FALSE); + } + PRCRemoveSpellEffects(MELD_DUSKLING_SPEED, oMeldshaper, oMeldshaper); + GZPRCRemoveSpellEffects(MELD_DUSKLING_SPEED, oMeldshaper, FALSE); + PRCRemoveSpellEffects(MELD_SPINE_ENHANCEMENT, oMeldshaper, oMeldshaper); + GZPRCRemoveSpellEffects(MELD_SPINE_ENHANCEMENT, oMeldshaper, FALSE); + PRCRemoveSpellEffects(MELD_IRONSOUL_SHIELD, oMeldshaper, oMeldshaper); + GZPRCRemoveSpellEffects(MELD_IRONSOUL_SHIELD, oMeldshaper, FALSE); + PRCRemoveSpellEffects(MELD_IRONSOUL_ARMOR, oMeldshaper, oMeldshaper); + GZPRCRemoveSpellEffects(MELD_IRONSOUL_ARMOR, oMeldshaper, FALSE); + PRCRemoveSpellEffects(MELD_IRONSOUL_WEAPON, oMeldshaper, oMeldshaper); + GZPRCRemoveSpellEffects(MELD_IRONSOUL_WEAPON, oMeldshaper, FALSE); + PRCRemoveSpellEffects(MELD_UMBRAL_STEP, oMeldshaper, oMeldshaper); + GZPRCRemoveSpellEffects(MELD_UMBRAL_STEP, oMeldshaper, FALSE); + PRCRemoveSpellEffects(MELD_UMBRAL_SHADOW, oMeldshaper, oMeldshaper); + GZPRCRemoveSpellEffects(MELD_UMBRAL_SHADOW, oMeldshaper, FALSE); + PRCRemoveSpellEffects(MELD_UMBRAL_SIGHT, oMeldshaper, oMeldshaper); + GZPRCRemoveSpellEffects(MELD_UMBRAL_SIGHT, oMeldshaper, FALSE); + PRCRemoveSpellEffects(MELD_UMBRAL_SOUL, oMeldshaper, oMeldshaper); + GZPRCRemoveSpellEffects(MELD_UMBRAL_SOUL, oMeldshaper, FALSE); + PRCRemoveSpellEffects(MELD_UMBRAL_KISS, oMeldshaper, oMeldshaper); + GZPRCRemoveSpellEffects(MELD_UMBRAL_KISS, oMeldshaper, FALSE); + PRCRemoveSpellEffects(MELD_INCANDESCENT_STRIKE, oMeldshaper, oMeldshaper); + GZPRCRemoveSpellEffects(MELD_INCANDESCENT_STRIKE, oMeldshaper, FALSE); + PRCRemoveSpellEffects(MELD_WITCH_MELDSHIELD, oMeldshaper, oMeldshaper); + GZPRCRemoveSpellEffects(MELD_WITCH_MELDSHIELD, oMeldshaper, FALSE); + for (i = 18647; i < 18657; i++) + { + PRCRemoveSpellEffects(i, oMeldshaper, oMeldshaper); + GZPRCRemoveSpellEffects(i, oMeldshaper, FALSE); + } +} + +void ReshapeMelds(object oMeldshaper) +{ + // Check each class and run the loop + if (GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper)) + { + int i, nTest; + for (i = 0; i <= 20; i++) + { + nTest = GetLocalInt(oMeldshaper, "ShapedMeld"+IntToString(CLASS_TYPE_INCARNATE)+IntToString(i)); + if (nTest) // If it's not blank, recast it + { + //FloatingTextStringOnCreature("ReshapeMelds: CLASS_TYPE_INCARNATE nTest "+IntToString(nTest), oMeldshaper); + ActionCastSpellOnSelf(nTest); + } + } + } + if (GetLevelByClass(CLASS_TYPE_SOULBORN, oMeldshaper)) + { + int i, nTest; + for (i = 0; i <= 20; i++) + { + nTest = GetLocalInt(oMeldshaper, "ShapedMeld"+IntToString(CLASS_TYPE_SOULBORN)+IntToString(i)); + if (nTest) // If it's not blank, recast it + { + //FloatingTextStringOnCreature("ReshapeMelds: CLASS_TYPE_SOULBORN nTest "+IntToString(nTest), oMeldshaper); + ActionCastSpellOnSelf(nTest); + } + } + } + if (GetLevelByClass(CLASS_TYPE_TOTEMIST, oMeldshaper)) + { + int i, nTest; + for (i = 0; i <= 20; i++) + { + nTest = GetLocalInt(oMeldshaper, "ShapedMeld"+IntToString(CLASS_TYPE_TOTEMIST)+IntToString(i)); + if (nTest) // If it's not blank, recast it + { + //FloatingTextStringOnCreature("ReshapeMelds: CLASS_TYPE_TOTEMIST nTest "+IntToString(nTest), oMeldshaper); + ActionCastSpellOnSelf(nTest); + } + } + } + if (GetLevelByClass(CLASS_TYPE_SPINEMELD_WARRIOR, oMeldshaper)) + { + ActionCastSpellOnSelf(MELD_SPINE_ENHANCEMENT); + int i, nTest; + for (i = 0; i <= 20; i++) + { + nTest = GetLocalInt(oMeldshaper, "ShapedMeld"+IntToString(CLASS_TYPE_SPINEMELD_WARRIOR)+IntToString(i)); + if (nTest) // If it's not blank, recast it + { + //FloatingTextStringOnCreature("ReshapeMelds: CLASS_TYPE_TOTEMIST nTest "+IntToString(nTest), oMeldshaper); + ActionCastSpellOnSelf(nTest); + } + } + } + int nIron = GetLevelByClass(CLASS_TYPE_IRONSOUL_FORGEMASTER, oMeldshaper); + if (nIron) + { + ActionCastSpellOnSelf(MELD_IRONSOUL_SHIELD); + if (nIron >= 5) ActionCastSpellOnSelf(MELD_IRONSOUL_ARMOR); + if (nIron >= 9) ActionCastSpellOnSelf(MELD_IRONSOUL_WEAPON); + } + int nUmbral = GetLevelByClass(CLASS_TYPE_UMBRAL_DISCIPLE, oMeldshaper); + if (nUmbral) + { + ActionCastSpellOnSelf(MELD_UMBRAL_STEP); + if (nUmbral >= 3) ActionCastSpellOnSelf(MELD_UMBRAL_SHADOW); + if (nUmbral >= 7) ActionCastSpellOnSelf(MELD_UMBRAL_SIGHT); + if (nUmbral >= 9) ActionCastSpellOnSelf(MELD_UMBRAL_SOUL); + if (nUmbral >= 10) ActionCastSpellOnSelf(MELD_UMBRAL_KISS); + } + int nIncand = GetLevelByClass(CLASS_TYPE_INCANDESCENT_CHAMPION, oMeldshaper); + if (nIncand) + { + ActionCastSpellOnSelf(MELD_INCANDESCENT_STRIKE); + } + if(GetLevelByClass(CLASS_TYPE_WITCHBORN_BINDER, oMeldshaper)) ActionCastSpellOnSelf(MELD_WITCH_MELDSHIELD); + if (GetRacialType(oMeldshaper) == RACIAL_TYPE_DUSKLING) ActionCastSpellOnSelf(MELD_DUSKLING_SPEED); +} + +int EssentiaToD4(int nEssentia) +{ + if (nEssentia == 1 ) return IP_CONST_DAMAGEBONUS_1d4; + else if (nEssentia == 2) return IP_CONST_DAMAGEBONUS_2d4; + else if (nEssentia == 3) return IP_CONST_DAMAGEBONUS_3d4; + else if (nEssentia == 4) return IP_CONST_DAMAGEBONUS_4d4; + else if (nEssentia == 5) return IP_CONST_DAMAGEBONUS_5d4; + else if (nEssentia == 6) return IP_CONST_DAMAGEBONUS_6d4; + else if (nEssentia == 7) return IP_CONST_DAMAGEBONUS_7d4; + else if (nEssentia == 8) return IP_CONST_DAMAGEBONUS_8d4; + else if (nEssentia == 9) return IP_CONST_DAMAGEBONUS_9d4; + else if (nEssentia >= 10) return IP_CONST_DAMAGEBONUS_10d4; + + return -1; +} + +int IncarnateAlignment(object oMeldshaper) +{ + int nReturn = FALSE; + + if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_LAWFUL && GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_NEUTRAL) + { + nReturn = TRUE; + } + else if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_CHAOTIC && GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_NEUTRAL) + { + nReturn = TRUE; + } + else if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_NEUTRAL && GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_GOOD) + { + nReturn = TRUE; + } + else if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_NEUTRAL && GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_EVIL) + { + nReturn = TRUE; + } + + return nReturn; +} + +int GetOpposition(object oMeldshaper, object oTarget) +{ + int nReturn = FALSE; + if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_LAWFUL && GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_GOOD && (GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL || GetAlignmentLawChaos(oTarget) == ALIGNMENT_CHAOTIC)) + nReturn = TRUE; + if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_LAWFUL && GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_EVIL && (GetAlignmentGoodEvil(oTarget) == ALIGNMENT_GOOD || GetAlignmentLawChaos(oTarget) == ALIGNMENT_CHAOTIC)) + nReturn = TRUE; + if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_CHAOTIC && GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_GOOD && (GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL || GetAlignmentLawChaos(oTarget) == ALIGNMENT_LAWFUL)) + nReturn = TRUE; + if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_CHAOTIC && GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_EVIL && (GetAlignmentGoodEvil(oTarget) == ALIGNMENT_GOOD || GetAlignmentLawChaos(oTarget) == ALIGNMENT_LAWFUL)) + nReturn = TRUE; + + return nReturn; +} + +void SetTemporaryEssentia(object oMeldshaper, int nEssentia) +{ + //if (DEBUG) DoDebug("Set Temporary Essentia from "+IntToString(GetLocalInt(oMeldshaper, "TemporaryEssentia"))+" to "+IntToString(GetLocalInt(oMeldshaper, "TemporaryEssentia")+nEssentia)); + SetLocalInt(oMeldshaper, "TemporaryEssentia", GetLocalInt(oMeldshaper, "TemporaryEssentia")+nEssentia); +} + +int GetTemporaryEssentia(object oMeldshaper) +{ + return GetLocalInt(oMeldshaper, "TemporaryEssentia"); +} + +int GetMaxEssentiaCapacityFeat(object oMeldshaper) +{ + int nMax = 1; // Always can invest one + int nHD = GetHitDice(oMeldshaper); + if (nHD >= 31) nMax = 5; + else if (nHD >= 18) nMax = 4; + else if (nHD >= 12) nMax = 3; + else if (nHD >= 6) nMax = 2; + + if (GetLocalInt(oMeldshaper, "DivineSoultouch")) nMax += 1; + if (GetLocalInt(oMeldshaper, "IncandescentOverload")) nMax += PRCMax(GetAbilityModifier(ABILITY_CHARISMA, oMeldshaper), 1); + if (GetHasFeat(FEAT_IMPROVED_ESSENTIA_CAPACITY, oMeldshaper)) nMax += 1; + + // Don't allow more than they have + if (nMax > GetTotalUsableEssentia(oMeldshaper)) nMax = GetTotalUsableEssentia(oMeldshaper); + + //if (DEBUG) DoDebug("GetMaxEssentiaCapacityFeat: nHD "+IntToString(nHD)+" nMax "+IntToString(nMax)); + return nMax; +} + +void SapphireSmiteUses(object oMeldshaper, int nEssentia) +{ + int i; + + for (i = 1; i <= nEssentia; i++) + { + IncrementRemainingFeatUses(oMeldshaper, FEAT_SMITE_GOOD_ALIGN); // Fist of Raziel + IncrementRemainingFeatUses(oMeldshaper, FEAT_SMITE_EVIL); // Paladin + IncrementRemainingFeatUses(oMeldshaper, FEAT_SMITE_GOOD); // Blackguard + IncrementRemainingFeatUses(oMeldshaper, FEAT_KIAI_SMITE); // CW Samurai + IncrementRemainingFeatUses(oMeldshaper, FEAT_CRUSADER_SMITE); // Crusader + IncrementRemainingFeatUses(oMeldshaper, FEAT_SMITE_UNDEAD); // Soldier of Light + IncrementRemainingFeatUses(oMeldshaper, FEAT_SHADOWBANE_SMITE); // Shadowbane + IncrementRemainingFeatUses(oMeldshaper, FEAT_KILLOREN_ASPECT_D); // Killoren + IncrementRemainingFeatUses(oMeldshaper, FEAT_SMITE_OPPOSITION); // Soulborn + IncrementRemainingFeatUses(oMeldshaper, FEAT_CULTIST_SMITE_MAGE); // Cultist of the Shattered Peak + } +} + +void AzureEnmity(object oMeldshaper, int nEssentia) +{ + effect eLink = EffectLinkEffects(EffectSkillIncrease(SKILL_BLUFF, nEssentia), EffectSkillIncrease(SKILL_LISTEN, nEssentia)); + eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SENSE_MOTIVE, nEssentia)); + eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SPOT, nEssentia)); + eLink = EffectLinkEffects(eLink, EffectDamageIncrease(IPGetDamageBonusConstantFromNumber(nEssentia), DAMAGE_TYPE_BASE_WEAPON)); + + if(GetHasFeat(FEAT_FAVORED_ENEMY_ABERRATION, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_ABERRATION)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_ANIMAL, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_ANIMAL)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_BEAST, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_BEAST)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_CONSTRUCT, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_CONSTRUCT)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_DRAGON, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_DRAGON)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_DWARF, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_DWARF)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_ELEMENTAL, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_ELEMENTAL)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_ELF, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_ELF)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_FEY, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_FEY)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_GIANT, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_GIANT)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_GNOME, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_GNOME)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_GOBLINOID, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_HUMANOID_GOBLINOID)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_HALFELF, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_HALFELF)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_HALFLING, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_HALFLING)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_HALFORC, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_HALFORC)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_HUMAN, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_HUMAN)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_MAGICAL_BEAST, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_MAGICAL_BEAST)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_MONSTROUS, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_HUMANOID_MONSTROUS)), oMeldshaper, 9999.0); + if(GetHasFeat(RACIAL_TYPE_HUMANOID_ORC, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_HUMANOID_ORC)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_OUTSIDER, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_OUTSIDER)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_REPTILIAN, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_HUMANOID_REPTILIAN)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_SHAPECHANGER, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_SHAPECHANGER)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_UNDEAD, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_UNDEAD)), oMeldshaper, 9999.0); + if(GetHasFeat(FEAT_FAVORED_ENEMY_VERMIN, oMeldshaper)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusRacialTypeEffect(eLink, RACIAL_TYPE_VERMIN)), oMeldshaper, 9999.0); +} + +void DoFeatBonus(object oMeldshaper, int nFeat, int nEssentia) +{ + effect eLink; + if (nFeat == FEAT_CERULEAN_FORTITUDE) eLink = EffectSavingThrowIncrease(SAVING_THROW_FORT, nEssentia); + else if (nFeat == FEAT_CERULEAN_REFLEXES) eLink = EffectSavingThrowIncrease(SAVING_THROW_REFLEX, nEssentia); + else if (nFeat == FEAT_CERULEAN_WILL) eLink = EffectSavingThrowIncrease(SAVING_THROW_WILL, nEssentia); + else if (nFeat == FEAT_AZURE_TALENT) ExecuteScript("moi_ft_aztalent", oMeldshaper); + else if (nFeat == FEAT_AZURE_TOUGHNESS) eLink = EffectTemporaryHitpoints(3*nEssentia); + else if (nFeat == FEAT_HEALING_SOUL) FeatUsePerDay(oMeldshaper, FEAT_HEALING_SOUL, -1, 0, nEssentia); + else if (nFeat == FEAT_SAPPHIRE_SMITE) SapphireSmiteUses(oMeldshaper, nEssentia); + else if (nFeat == FEAT_AZURE_ENMITY) AzureEnmity(oMeldshaper, nEssentia); + + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0); +} + +void InvestEssentiaFeat(object oMeldshaper, int nFeat, int nEssentia) +{ + // Jump out if there's no feat + if (!GetHasFeat(nFeat, oMeldshaper)) return; + + int nMax = GetMaxEssentiaCapacityFeat(oMeldshaper); + + // Bonuses to specific feat caps + if (nFeat == FEAT_COBALT_RAGE && GetLevelByClass(CLASS_TYPE_TOTEM_RAGER, oMeldshaper)) nMax++; + + // No breaking the rules + if (nEssentia > nMax) nEssentia = nMax; + // Can't invest more than you have + if (nEssentia > GetTotalUsableEssentia(oMeldshaper)) nEssentia = GetTotalUsableEssentia(oMeldshaper); + + FloatingTextStringOnCreature("Investing "+IntToString(nEssentia)+" essentia into "+GetStringByStrRef(StringToInt(Get2DACache("feat", "FEAT", nFeat))), oMeldshaper); + DoFeatBonus(oMeldshaper, nFeat, nEssentia); + SetLocalInt(oMeldshaper, "FeatEssentia"+IntToString(nFeat), nEssentia); +} + +void DoClassBonus(object oMeldshaper, int nFeat, int nEssentia) +{ + +} + +void InvestEssentiaClass(object oMeldshaper, int nFeat, int nEssentia) +{ + // Jump out if there's no feat + if (!GetHasFeat(nFeat, oMeldshaper)) return; + + // No breaking the rules + if (nEssentia > GetMaxEssentiaCapacityFeat(oMeldshaper)) nEssentia = GetMaxEssentiaCapacityFeat(oMeldshaper); + // Can't invest more than you have + if (nEssentia > GetTotalUsableEssentia(oMeldshaper)) nEssentia = GetTotalUsableEssentia(oMeldshaper); + + FloatingTextStringOnCreature("Investing "+IntToString(nEssentia)+" essentia into "+GetStringByStrRef(StringToInt(Get2DACache("feat", "FEAT", nFeat))), oMeldshaper); + DoClassBonus(oMeldshaper, nFeat, nEssentia); + SetLocalInt(oMeldshaper, "ClassEssentia"+IntToString(nFeat), nEssentia); +} + +void InvestEssentiaSpell(object oMeldshaper, int nFeat, int nEssentia) +{ + FloatingTextStringOnCreature("Investing "+IntToString(nEssentia)+" essentia into "+GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nFeat))), oMeldshaper); + SetLocalInt(oMeldshaper, "SpellEssentia"+IntToString(nFeat), nEssentia); + if (!GetLocalInt(oMeldshaper, "SpellInvestCheck1")) SetLocalInt(oMeldshaper, "SpellInvestCheck1", nFeat); + else if (!GetLocalInt(oMeldshaper, "SpellInvestCheck2")) SetLocalInt(oMeldshaper, "SpellInvestCheck2", nFeat); + else if (!GetLocalInt(oMeldshaper, "SpellInvestCheck3")) SetLocalInt(oMeldshaper, "SpellInvestCheck3", nFeat); + else if (!GetLocalInt(oMeldshaper, "SpellInvestCheck4")) SetLocalInt(oMeldshaper, "SpellInvestCheck4", nFeat); + else if (!GetLocalInt(oMeldshaper, "SpellInvestCheck5")) SetLocalInt(oMeldshaper, "SpellInvestCheck5", nFeat); + else if (!GetLocalInt(oMeldshaper, "SpellInvestCheck6")) SetLocalInt(oMeldshaper, "SpellInvestCheck6", nFeat); + else if (!GetLocalInt(oMeldshaper, "SpellInvestCheck7")) SetLocalInt(oMeldshaper, "SpellInvestCheck7", nFeat); + else if (!GetLocalInt(oMeldshaper, "SpellInvestCheck8")) SetLocalInt(oMeldshaper, "SpellInvestCheck8", nFeat); + else if (!GetLocalInt(oMeldshaper, "SpellInvestCheck9")) SetLocalInt(oMeldshaper, "SpellInvestCheck9", nFeat); + else if (!GetLocalInt(oMeldshaper, "SpellInvestCheck10")) SetLocalInt(oMeldshaper, "SpellInvestCheck10", nFeat); +} + +int GetFeatLockedEssentia(object oMeldshaper) +{ + int nTotal, i, nTest; + for (i = 8869; i < 8889; i++) + { + nTest = GetLocalInt(oMeldshaper, "FeatEssentia"+IntToString(i)); + if (nTest) // If it's not blank + nTotal += nTest; + } + for (i = 0; i < 11; i++) + { + nTest = GetLocalInt(oMeldshaper, "SpellInvestCheck"+IntToString(i)); + if (nTest) // If it's not blank + nTotal += GetLocalInt(oMeldshaper, "SpellEssentia"+IntToString(nTest)); + } + //if (DEBUG) DoDebug("GetFeatLockedEssentia return value "+IntToString(nTotal)); + return nTotal; +} + +int IncarnumFeats(object oMeldshaper) +{ + int nEssentia; + + if (GetHasFeat(FEAT_AZURE_ENMITY, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_CERULEAN_FORTITUDE, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_CERULEAN_REFLEXES, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_CERULEAN_WILL, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_AZURE_TALENT, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_AZURE_TOUCH, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_AZURE_TOUGHNESS, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_AZURE_TURNING, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_AZURE_WILD_SHAPE, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_COBALT_CHARGE, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_COBALT_EXPERTISE, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_COBALT_POWER, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_COBALT_RAGE, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_HEALING_SOUL, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_INCARNUM_SPELLSHAPING, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_INDIGO_STRIKE, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_MIDNIGHT_AUGMENTATION, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_MIDNIGHT_DODGE, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_MIDNIGHT_METAMAGIC, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_PSYCARNUM_BLADE, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_SAPPHIRE_SMITE, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_SOULTOUCHED_SPELLCASTING, oMeldshaper)) nEssentia += 1; + if (GetHasFeat(FEAT_BONUS_ESSENTIA, oMeldshaper)) + { + nEssentia += 1; + if(GetIsIncarnumUser(oMeldshaper)) + nEssentia += 1; // Yes, this is correct + } + if (GetRacialType(oMeldshaper) == RACIAL_TYPE_DUSKLING) nEssentia += 1; + if (GetRacialType(oMeldshaper) == RACIAL_TYPE_AZURIN) nEssentia += 1; + + int i; + for(i = FEAT_EPIC_ESSENTIA_1; i <= FEAT_EPIC_ESSENTIA_6; i++) + if(GetHasFeat(i, oMeldshaper)) nEssentia += 3; + + //if (DEBUG) DoDebug("IncarnumFeats return value "+IntToString(nEssentia)); + return nEssentia; +} + +void AddNecrocarnumEssentia(object oMeldshaper, int nEssentia) +{ + int nNecrocarnum = GetLocalInt(oMeldshaper, "NecrocarnumEssentia"); + SetLocalInt(oMeldshaper, "NecrocarnumEssentia", nNecrocarnum+nEssentia); + // It lasts for 24 hours, then remove it back out + DelayCommand(HoursToSeconds(24), SetLocalInt(oMeldshaper, "NecrocarnumEssentia", GetLocalInt(oMeldshaper, "NecrocarnumEssentia")-nEssentia)); +} + +int GetTotalEssentia(object oMeldshaper) +{ + int nEssentia; + + if (GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper)) nEssentia += GetMaxEssentiaCount(oMeldshaper, CLASS_TYPE_INCARNATE); + if (GetLevelByClass(CLASS_TYPE_SOULBORN, oMeldshaper)) nEssentia += GetMaxEssentiaCount(oMeldshaper, CLASS_TYPE_SOULBORN); + if (GetLevelByClass(CLASS_TYPE_TOTEMIST, oMeldshaper)) nEssentia += GetMaxEssentiaCount(oMeldshaper, CLASS_TYPE_TOTEMIST); + if (GetLevelByClass(CLASS_TYPE_SPINEMELD_WARRIOR, oMeldshaper)) nEssentia += GetMaxEssentiaCount(oMeldshaper, CLASS_TYPE_SPINEMELD_WARRIOR); + if (GetLevelByClass(CLASS_TYPE_UMBRAL_DISCIPLE, oMeldshaper)) nEssentia += GetMaxEssentiaCount(oMeldshaper, CLASS_TYPE_UMBRAL_DISCIPLE); + if (GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper)) nEssentia += GetLocalInt(oMeldshaper, "NecrocarnumEssentia"); + if (GetLevelByClass(CLASS_TYPE_WITCHBORN_BINDER, oMeldshaper) >= 2) nEssentia += 1; + if (GetLevelByClass(CLASS_TYPE_WITCHBORN_BINDER, oMeldshaper) >= 6) nEssentia += 1; + if (GetLevelByClass(CLASS_TYPE_INCANDESCENT_CHAMPION, oMeldshaper)) nEssentia += GetMaxEssentiaCount(oMeldshaper, CLASS_TYPE_INCANDESCENT_CHAMPION); + + nEssentia += IncarnumFeats(oMeldshaper); + //if (DEBUG) DoDebug("GetTotalEssentia return value "+IntToString(nEssentia)); + return nEssentia; +} + +int GetTotalUsableEssentia(object oMeldshaper) +{ + return GetTotalEssentia(oMeldshaper) - GetFeatLockedEssentia(oMeldshaper); +} + +int GetIncarnumFeats(object oMeldshaper) +{ + int nTotal, i; + for (i = 8868; i < 8910; i++) + { + if (GetHasFeat(i, oMeldshaper)) + nTotal += 1; + } + //if (DEBUG) DoDebug("GetIncarnumFeats return value "+IntToString(nTotal)); + return nTotal; +} + +int GetIsBlademeldUsed(object oMeldshaper, int nChakra) +{ + int nTest = GetLocalInt(oMeldshaper, "UsedBladeMeld"+IntToString(nChakra)); + + //if (DEBUG) DoDebug("GetIsBlademeldUsed is "+IntToString(nTest)); + return nTest; +} + +void SetBlademeldUsed(object oMeldshaper, int nChakra) +{ + if (!GetIsBlademeldUsed(oMeldshaper, nChakra)) + { + SetLocalInt(oMeldshaper, "UsedBladeMeld"+IntToString(nChakra), nChakra); + } +} + +string GetBlademeldDesc(int nChakra) +{ + string sString; + if (nChakra == CHAKRA_CROWN ) sString = "You gain a +4 bonus on disarm checks and on Sense Motive"; + if (nChakra == CHAKRA_FEET ) sString = "You gain a +2 bonus on Initiative"; + if (nChakra == CHAKRA_HANDS ) sString = "You gain a +1 bonus on damage"; + if (nChakra == CHAKRA_ARMS ) sString = "You gain a +2 bonus on attack rolls"; + if (nChakra == CHAKRA_BROW ) sString = "You gain the Blind-Fight feat"; + if (nChakra == CHAKRA_SHOULDERS) sString = "You gain immunity to criticals but not sneak attacks"; + if (nChakra == CHAKRA_THROAT ) sString = "At will as a standard action, each enemy within 60 feet who can hear you shout must save or become shaken for 1 round (Will DC 10 + incarnum blade level + Con modifier)."; + if (nChakra == CHAKRA_WAIST ) sString = "You gain a +10 bonus on checks made to avoid being bull rushed, grappled, tripped, or overrun. You also gain Uncanny Dodge"; + if (nChakra == CHAKRA_HEART ) sString = "You gain temporary hit points equal to twice your character level (maximum +40)"; + if (nChakra == CHAKRA_SOUL ) sString = "You break DR up to +3, and deal 1d6 damage to creatures of one opposed alignment"; + + return sString; +} + +int ChakraToBlademeld(int nChakra) +{ + int nMeld; + if (nChakra == CHAKRA_CROWN ) nMeld = MELD_BLADEMELD_CROWN; + if (nChakra == CHAKRA_FEET ) nMeld = MELD_BLADEMELD_FEET; + if (nChakra == CHAKRA_HANDS ) nMeld = MELD_BLADEMELD_HANDS; + if (nChakra == CHAKRA_ARMS ) nMeld = MELD_BLADEMELD_ARMS; + if (nChakra == CHAKRA_BROW ) nMeld = MELD_BLADEMELD_BROW; + if (nChakra == CHAKRA_SHOULDERS) nMeld = MELD_BLADEMELD_SHOULDERS; + if (nChakra == CHAKRA_THROAT ) nMeld = MELD_BLADEMELD_THROAT; + if (nChakra == CHAKRA_WAIST ) nMeld = MELD_BLADEMELD_WAIST; + if (nChakra == CHAKRA_HEART ) nMeld = MELD_BLADEMELD_HEART; + if (nChakra == CHAKRA_SOUL ) nMeld = MELD_BLADEMELD_SOUL; + + return nMeld; +} \ No newline at end of file diff --git a/src/include/moi_meld_const.nss b/src/include/moi_meld_const.nss new file mode 100644 index 0000000..6f5c005 --- /dev/null +++ b/src/include/moi_meld_const.nss @@ -0,0 +1,338 @@ +// Chakra Constants +const int CHAKRA_CROWN = 1; +const int CHAKRA_FEET = 2; +const int CHAKRA_HANDS = 3; +const int CHAKRA_ARMS = 4; +const int CHAKRA_BROW = 5; +const int CHAKRA_SHOULDERS = 6; +const int CHAKRA_THROAT = 7; +const int CHAKRA_WAIST = 8; +const int CHAKRA_HEART = 9; +const int CHAKRA_SOUL = 10; +const int CHAKRA_TOTEM = 11; + +const int CHAKRA_DOUBLE_CROWN = 12; +const int CHAKRA_DOUBLE_FEET = 13; +const int CHAKRA_DOUBLE_HANDS = 14; +const int CHAKRA_DOUBLE_ARMS = 15; +const int CHAKRA_DOUBLE_BROW = 16; +const int CHAKRA_DOUBLE_SHOULDERS = 17; +const int CHAKRA_DOUBLE_THROAT = 18; +const int CHAKRA_DOUBLE_WAIST = 19; +const int CHAKRA_DOUBLE_HEART = 20; +const int CHAKRA_DOUBLE_SOUL = 21; +const int CHAKRA_DOUBLE_TOTEM = 22; + +// Meld SpellId Constants +const int MELD_ACROBAT_BOOTS = 18701; +const int MELD_ADAMANT_PAULDRONS = 18702; +const int MELD_CRYSTAL_HELM = 18703; +const int MELD_ANKHEG_BREASTPLATE = 18704; +const int MELD_APPARITION_RIBBON = 18705; +const int MELD_ARCANE_FOCUS = 18706; +const int MELD_ARMGUARDS_OF_DISRUPTION = 18707; +const int MELD_BASILISK_MASK = 18708; +const int MELD_BEAST_TAMER_CIRCLET = 18709; +const int MELD_BEHIR_GORGET = 18710; +const int MELD_BLINK_SHIRT = 18711; +const int MELD_BLOODTALONS = 18712; +const int MELD_BLOODWAR_GAUNTLETS = 18713; +const int MELD_BLUESTEEL_BRACERS = 18714; +const int MELD_BRASS_MANE = 18715; +const int MELD_CERULEAN_SANDALS = 18716; +const int MELD_DIADEM_OF_PURELIGHT = 18717; +const int MELD_DISENCHANTER_MASK = 18718; +const int MELD_DISPLACER_MANTLE = 18719; +const int MELD_DISSOLVING_SPITTLE = 18720; +const int MELD_DREAD_CARAPACE = 18721; +const int MELD_ENIGMA_HELM = 18722; +const int MELD_FEARSOME_MASK = 18723; +const int MELD_FELLMIST_ROBE = 18724; +const int MELD_FLAME_CINCTURE = 18725; +const int MELD_FROST_HELM = 18726; +const int MELD_GIRALLON_ARMS = 18727; +const int MELD_GLOVES_OF_THE_POISONED_SOUL = 18728; +const int MELD_GORGON_MASK = 18729; +const int MELD_GREAT_RAPTOR_MASK = 18730; +const int MELD_HEART_OF_FIRE = 18731; +const int MELD_HUNTERS_CIRCLET = 18732; +const int MELD_ILLUSION_VEIL = 18733; +const int MELD_IMPULSE_BOOTS = 18734; +const int MELD_INCARNATE_AVATAR = 18735; +const int MELD_INCARNATE_WEAPON = 18736; +const int MELD_KEENEYE_LENSES = 18737; +const int MELD_KRAKEN_MANTLE = 18738; +const int MELD_KRENSHAR_MASK = 18739; +const int MELD_KRUTHIK_CLAWS = 18740; +const int MELD_LAMIA_BELT = 18741; +const int MELD_LAMMASU_MANTLE = 18742; +const int MELD_LANDSHARK_BOOTS = 18743; +const int MELD_LIFEBOND_VESTMENTS = 18744; +const int MELD_LIGHTNING_GAUNTLETS = 18745; +const int MELD_LUCKY_DICE = 18746; +const int MELD_MAGES_SPECTACLES = 18747; +const int MELD_MANTICORE_BELT = 18748; +const int MELD_MANTLE_OF_FLAME = 18749; +const int MELD_MAULING_GAUNTLETS = 18750; +const int MELD_NECROCARNUM_CIRCLET = 18751; +const int MELD_NECROCARNUM_MANTLE = 18752; +const int MELD_NECROCARNUM_SHROUD = 18753; +const int MELD_NECROCARNUM_TOUCH = 18754; +const int MELD_NECROCARNUM_VESTMENTS = 18755; +const int MELD_NECROCARNUM_WEAPON = 18756; +const int MELD_PAULDRONS_OF_HEALTH = 18757; +const int MELD_PEGASUS_CLOAK = 18758; +const int MELD_PHASE_CLOAK = 18759; +const int MELD_PHOENIX_BELT = 18760; +const int MELD_PLANAR_CHASUBLE = 18761; +const int MELD_PLANAR_WARD = 18762; +const int MELD_RAGECLAWS = 18763; +const int MELD_RIDING_BRACERS = 18764; +const int MELD_SAILORS_BRACERS = 18765; +const int MELD_SHADOW_MANTLE = 18766; +const int MELD_SHEDU_CROWN = 18767; +const int MELD_SIGHTING_GLOVES = 18768; +const int MELD_SILVERTONGUE_MASK = 18769; +const int MELD_SOULSPARK_FAMILIAR = 18770; +const int MELD_SOULSPEAKER_CIRCLET = 18771; +const int MELD_SPELLWARD_SHIRT = 18772; +const int MELD_SPHINX_CLAWS = 18773; +const int MELD_STRONGHEART_VEST = 18774; +const int MELD_THEFT_GLOVES = 18775; +const int MELD_THERAPEUTIC_MANTLE = 18776; +const int MELD_THREEFOLD_MASK_OF_THE_CHIMERA = 18777; +const int MELD_THUNDERSTEP_BOOTS = 18778; +const int MELD_TOTEM_AVATAR = 18779; +const int MELD_TRUTHSEEKER_GOGGLES = 18780; +const int MELD_UNICORN_HORN = 18781; +const int MELD_URSKAN_GREAVES = 18782; +const int MELD_VITALITY_BELT = 18783; +const int MELD_WIND_CLOAK = 18784; +const int MELD_WINTER_MASK = 18785; +const int MELD_WORG_PELT = 18786; +const int MELD_WORMTAIL_BELT = 18787; +const int MELD_YRTHAK_MASK = 18788; +const int MELD_ASTRAL_VAMBRACES = 18789; +const int MELD_CHARMING_VEIL = 18790; +const int MELD_PSIONS_EYES = 18791; +const int MELD_PSIONKILLER_MASK = 18792; +const int MELD_PSYCHIC_FOCUS = 18793; +const int MELD_CLAW_OF_THE_WYRM = 18794; +const int MELD_DRAGON_MANTLE = 18795; +const int MELD_DRAGON_TAIL = 18796; +const int MELD_DRAGONFIRE_MASK = 18797; +const int MELD_ELDER_SPIRIT = 18798; + +// Meld IPFeat Constants +const int IP_CONST_MELD_ACROBAT_BOOTS = 13550; +const int IP_CONST_MELD_ADAMANT_PAULDRONS = 13551; +const int IP_CONST_MELD_CRYSTAL_HELM = 13552; +const int IP_CONST_MELD_ANKHEG_BREASTPLATE = 13553; +const int IP_CONST_MELD_APPARITION_RIBBON = 13554; +const int IP_CONST_MELD_ARCANE_FOCUS = 13555; +const int IP_CONST_MELD_ARMGUARDS_OF_DISRUPTION = 13556; +const int IP_CONST_MELD_BASILISK_MASK = 13557; +const int IP_CONST_MELD_BEAST_TAMER_CIRCLET = 13558; +const int IP_CONST_MELD_BEHIR_GORGET = 13559; +const int IP_CONST_MELD_BLINK_SHIRT = 13560; +const int IP_CONST_MELD_BLOODTALONS = 13561; +const int IP_CONST_MELD_BLOODWAR_GAUNTLETS = 13562; +const int IP_CONST_MELD_BLUESTEEL_BRACERS = 13563; +const int IP_CONST_MELD_BRASS_MANE = 13564; +const int IP_CONST_MELD_CERULEAN_SANDALS = 13565; +const int IP_CONST_MELD_DIADEM_OF_PURELIGHT = 13566; +const int IP_CONST_MELD_DISENCHANTER_MASK = 13567; +const int IP_CONST_MELD_DISPLACER_MANTLE = 13568; +const int IP_CONST_MELD_DISSOLVING_SPITTLE = 13569; +const int IP_CONST_MELD_DREAD_CARAPACE = 13570; +const int IP_CONST_MELD_ENIGMA_HELM = 13571; +const int IP_CONST_MELD_FEARSOME_MASK = 13572; +const int IP_CONST_MELD_FELLMIST_ROBE = 13573; +const int IP_CONST_MELD_FLAME_CINCTURE = 13574; +const int IP_CONST_MELD_FROST_HELM = 13575; +const int IP_CONST_MELD_GIRALLON_ARMS = 13576; +const int IP_CONST_MELD_GLOVES_OF_THE_POISONED_SOUL = 13577; +const int IP_CONST_MELD_GORGON_MASK = 13578; +const int IP_CONST_MELD_GREAT_RAPTOR_MASK = 13579; +const int IP_CONST_MELD_HEART_OF_FIRE = 13580; +const int IP_CONST_MELD_HUNTERS_CIRCLET = 13581; +const int IP_CONST_MELD_ILLUSION_VEIL = 13582; +const int IP_CONST_MELD_IMPULSE_BOOTS = 13583; +const int IP_CONST_MELD_INCARNATE_AVATAR = 13584; +const int IP_CONST_MELD_INCARNATE_WEAPON = 13585; +const int IP_CONST_MELD_KEENEYE_LENSES = 13586; +const int IP_CONST_MELD_KRAKEN_MANTLE = 13587; +const int IP_CONST_MELD_KRENSHAR_MASK = 13588; +const int IP_CONST_MELD_KRUTHIK_CLAWS = 13589; +const int IP_CONST_MELD_LAMIA_BELT = 13590; +const int IP_CONST_MELD_LAMMASU_MANTLE = 13591; +const int IP_CONST_MELD_LANDSHARK_BOOTS = 13592; +const int IP_CONST_MELD_LIFEBOND_VESTMENTS = 13593; +const int IP_CONST_MELD_LIGHTNING_GAUNTLETS = 13594; +const int IP_CONST_MELD_LUCKY_DICE = 13595; +const int IP_CONST_MELD_MAGES_SPECTACLES = 13596; +const int IP_CONST_MELD_MANTICORE_BELT = 13597; +const int IP_CONST_MELD_MANTLE_OF_FLAME = 13598; +const int IP_CONST_MELD_MAULING_GAUNTLETS = 13599; +const int IP_CONST_MELD_NECROCARNUM_CIRCLET = 13600; +const int IP_CONST_MELD_NECROCARNUM_MANTLE = 13601; +const int IP_CONST_MELD_NECROCARNUM_SHROUD = 13602; +const int IP_CONST_MELD_NECROCARNUM_TOUCH = 13603; +const int IP_CONST_MELD_NECROCARNUM_VESTMENTS = 13604; +const int IP_CONST_MELD_NECROCARNUM_WEAPON = 13605; +const int IP_CONST_MELD_PAULDRONS_OF_HEALTH = 13606; +const int IP_CONST_MELD_PEGASUS_CLOAK = 13607; +const int IP_CONST_MELD_PHASE_CLOAK = 13608; +const int IP_CONST_MELD_PHOENIX_BELT = 13609; +const int IP_CONST_MELD_PLANAR_CHASUBLE = 13610; +const int IP_CONST_MELD_PLANAR_WARD = 13611; +const int IP_CONST_MELD_RAGECLAWS = 13612; +const int IP_CONST_MELD_RIDING_BRACERS = 13613; +const int IP_CONST_MELD_SAILORS_BRACERS = 13614; +const int IP_CONST_MELD_SHADOW_MANTLE = 13615; +const int IP_CONST_MELD_SHEDU_CROWN = 13616; +const int IP_CONST_MELD_SIGHTING_GLOVES = 13617; +const int IP_CONST_MELD_SILVERTONGUE_MASK = 13618; +const int IP_CONST_MELD_SOULSPARK_FAMILIAR = 13619; +const int IP_CONST_MELD_SOULSPEAKER_CIRCLET = 13620; +const int IP_CONST_MELD_SPELLWARD_SHIRT = 13621; +const int IP_CONST_MELD_SPHINX_CLAWS = 13622; +const int IP_CONST_MELD_STRONGHEART_VEST = 13623; +const int IP_CONST_MELD_THEFT_GLOVES = 13624; +const int IP_CONST_MELD_THERAPEUTIC_MANTLE = 13625; +const int IP_CONST_MELD_THREEFOLD_MASK_OF_THE_CHIMERA = 13626; +const int IP_CONST_MELD_THUNDERSTEP_BOOTS = 13627; +const int IP_CONST_MELD_TOTEM_AVATAR = 13628; +const int IP_CONST_MELD_TRUTHSEEKER_GOGGLES = 13629; +const int IP_CONST_MELD_UNICORN_HORN = 13630; +const int IP_CONST_MELD_URSKAN_GREAVES = 13631; +const int IP_CONST_MELD_VITALITY_BELT = 13632; +const int IP_CONST_MELD_WIND_CLOAK = 13633; +const int IP_CONST_MELD_WINTER_MASK = 13634; +const int IP_CONST_MELD_WORG_PELT = 13635; +const int IP_CONST_MELD_WORMTAIL_BELT = 13636; +const int IP_CONST_MELD_YRTHAK_MASK = 13637; +const int IP_CONST_MELD_ASTRAL_VAMBRACES = 13638; +const int IP_CONST_MELD_CHARMING_VEIL = 13639; +const int IP_CONST_MELD_PSIONS_EYES = 13640; +const int IP_CONST_MELD_PSIONKILLER_MASK = 13641; +const int IP_CONST_MELD_PSYCHIC_FOCUS = 13642; +const int IP_CONST_MELD_CLAW_OF_THE_WYRM = 13643; +const int IP_CONST_MELD_DRAGON_MANTLE = 13644; +const int IP_CONST_MELD_DRAGON_TAIL = 13645; +const int IP_CONST_MELD_DRAGONFIRE_MASK = 13646; +const int IP_CONST_MELD_ELDER_SPIRIT = 13647; + +// Bind IPFeat Constants +const int IP_CONST_MELD_ANKHEG_BREASTPLATE_THROAT = 13650; +const int IP_CONST_MELD_APPARITION_RIBBON_THROAT = 13651; +const int IP_CONST_MELD_ARMGUARDS_OF_DISRUPTION_ARMS = 13652; +const int IP_CONST_MELD_BASILISK_MASK_TOTEM = 13653; +const int IP_CONST_MELD_BEAST_TAMER_CIRCLET_CROWN = 13654; +const int IP_CONST_MELD_BEAST_TAMER_CIRCLET_TOTEM = 13655; +const int IP_CONST_MELD_BEHIR_GORGET_THROAT = 13656; +const int IP_CONST_MELD_BLINK_SHIRT_DOOR_ST = 13657; +const int IP_CONST_MELD_BLINK_SHIRT_HEART = 13658; +const int IP_CONST_MELD_BLINK_SHIRT_DOOR_MV = 13659; +const int IP_CONST_MELD_BLOODWAR_GAUNTLETS_ARMS = 13660; +const int IP_CONST_MELD_BRASS_MANE_THROAT = 13661; +const int IP_CONST_MELD_CERULEAN_SANDALS_FEET = 13662; +const int IP_CONST_MELD_DISENCHANTER_MASK_DETECT = 13663; +const int IP_CONST_MELD_DISENCHANTER_MASK_TOTEM = 13664; +const int IP_CONST_MELD_DISPLACER_MANTLE_TOTEM = 13665; +const int IP_CONST_MELD_DISSOLVING_SPITTLE_SPIT = 13666; +const int IP_CONST_MELD_DREAD_CARAPACE_FEET = 13667; +const int IP_CONST_MELD_FLAME_CINCTURE_WAIST = 13668; +const int IP_CONST_MELD_FROST_HELM_CROWN = 13669; +const int IP_CONST_MELD_FROST_HELM_TOTEM = 13670; +const int IP_CONST_MELD_GLOVES_OF_THE_POISONED_SOUL_HANDS = 13671; +const int IP_CONST_MELD_GORGON_MASK_THROAT = 13672; +const int IP_CONST_MELD_GORGON_MASK_TOTEM = 13673; +const int IP_CONST_MELD_INCARNATE_WEAPON_ARMS = 13674; +const int IP_CONST_MELD_KRENSHAR_MASK_TOTEM = 13675; +const int IP_CONST_MELD_LAMMASU_MANTLE_TOTEM = 13676; +const int IP_CONST_MELD_LANDSHARK_BOOTS_FEET = 13677; +const int IP_CONST_MELD_LANDSHARK_BOOTS_TOTEM = 13678; +const int IP_CONST_MELD_LIFEBOND_VESTMENTS_HEAL = 13679; +const int IP_CONST_MELD_LIFEBOND_VESTMENTS_ARMS = 13680; +const int IP_CONST_MELD_LIGHTNING_GAUNTLETS_ZAP = 13681; +const int IP_CONST_MELD_LIGHTNING_GAUNTLETS_HANDS = 13682; +const int IP_CONST_MELD_LUCKY_DICE_LUCK = 13683; +const int IP_CONST_MELD_MAGES_SPECTACLES_BROW = 13684; +const int IP_CONST_MELD_MANTICORE_TOTEM = 13685; +const int IP_CONST_MELD_MANTLE_OF_FLAME_SHOULDERS = 13686; +const int IP_CONST_MELD_PHOENIX_BELT_TOTEM = 13687; +const int IP_CONST_MELD_PLANAR_CHASUBLE_SOUL = 13688; +const int IP_CONST_MELD_SHADOW_MANTLE_SHOULDERS = 13689; +const int IP_CONST_MELD_SHEDU_CROWN_HEART = 13690; +const int IP_CONST_MELD_SILVERTONGUE_MASK_THROAT = 13691; +const int IP_CONST_MELD_UNICORN_HORN_BROW = 13692; +const int IP_CONST_MELD_WINTER_MASK_TOUCH = 13693; +const int IP_CONST_MELD_WINTER_MASK_THROAT = 13694; +const int IP_CONST_MELD_WORMTAIL_BELT_TOTEM = 13695; +const int IP_CONST_MELD_YRTHAK_MASK_BROW = 13696; +const int IP_CONST_MELD_YRTHAK_MASK_TOTEM = 13697; +const int IP_CONST_MELD_NECRO_CIRCLET_BROW = 13698; +const int IP_CONST_MELD_NECROCARNUM_SHROUD_SOUL = 13699; +const int IP_CONST_MELD_NECROCARNUM_TOUCH_ESS = 13700; +const int IP_CONST_MELD_NECROCARNUM_TOUCH_ARMS = 13701; +const int IP_CONST_MELD_SOULSPARK_FAMILIAR_ESS = 13702; +const int IP_CONST_MELD_BLADEMELD_SHOUT = 13703; +const int IP_CONST_MELD_PSIONS_EYES_BROW = 13704; +const int IP_CONST_MELD_PSIONKILLER_MASK_DETECT = 13705; +const int IP_CONST_MELD_PSIONKILLER_MASK_TOTEM = 13706; +const int IP_CONST_MELD_DRAGON_TAIL_SLAM = 13707; +const int IP_CONST_MELD_DRAGON_TAIL_SWEEP = 13708; +const int IP_CONST_MELD_DRAGONFIRE_MASK_THROAT = 13709; +const int IP_CONST_MELD_DRAGONFIRE_MASK_TOTEM = 13710; + +// Radial SubSpell Constants +const int MELD_LUCKY_DICE_ATTACK = 18935; +const int MELD_LUCKY_DICE_SAVING_THROWS = 18936; +const int MELD_LUCKY_DICE_SKILLS = 18937; +const int MELD_SHADOW_MANTLE_SHOULDERS = 18943; + +// Class Spell Constants +const int MELD_INCARNUM_RADIANCE = 18698; +const int MELD_SPINE_ENHANCEMENT = 18691; +const int MELD_IRONSOUL_SHIELD = 18687; +const int MELD_IRONSOUL_ARMOR = 18685; +const int MELD_IRONSOUL_WEAPON = 18683; +const int MELD_UMBRAL_STEP = 18681; +const int MELD_UMBRAL_SHADOW = 18679; +const int MELD_UMBRAL_SIGHT = 18677; +const int MELD_UMBRAL_SOUL = 18675; +const int MELD_UMBRAL_KISS = 18673; +const int MELD_INCANDESCENT_STRIKE = 18670; +const int MELD_INCANDESCENT_HEAL = 18668; +const int MELD_INCANDESCENT_COUNTENANCE = 18666; +const int MELD_INCANDESCENT_RAY = 18663; +const int MELD_INCANDESCENT_AURA = 18659; +const int MELD_BLADEMELD_CROWN = 18647; +const int MELD_BLADEMELD_FEET = 18648; +const int MELD_BLADEMELD_HANDS = 18649; +const int MELD_BLADEMELD_ARMS = 18650; +const int MELD_BLADEMELD_BROW = 18651; +const int MELD_BLADEMELD_SHOULDERS = 18652; +const int MELD_BLADEMELD_THROAT = 18653; +const int MELD_BLADEMELD_WAIST = 18654; +const int MELD_BLADEMELD_HEART = 18655; +const int MELD_BLADEMELD_SOUL = 18656; +const int MELD_WITCH_MELDSHIELD = 18634; +const int MELD_WITCH_DISPEL = 18636; +const int MELD_WITCH_SHACKLES = 18638; +const int MELD_WITCH_ABROGATION = 18640; +const int MELD_WITCH_SPIRITFLAY = 18642; +const int MELD_WITCH_INTEGUMENT = 18644; + +// Race Spell Constants +const int MELD_DUSKLING_SPEED = 18973; + +// Feat Spell Constants +const int MELD_OPEN_SOUL_CHAKRA = 18632; + +// Bind spell Constants +const int MELD_DRAGON_TAIL_SWEEP = 18962; + +// Essentia Conv +const int IP_CONST_FEAT_INVEST_ESSENTIA_CONV = 13549; \ No newline at end of file diff --git a/src/include/nw_inc_nui.nss b/src/include/nw_inc_nui.nss new file mode 100644 index 0000000..a37f13f --- /dev/null +++ b/src/include/nw_inc_nui.nss @@ -0,0 +1,1199 @@ +const int NUI_DIRECTION_HORIZONTAL = 0; +const int NUI_DIRECTION_VERTICAL = 1; + +const int NUI_MOUSE_BUTTON_LEFT = 0; +const int NUI_MOUSE_BUTTON_MIDDLE = 1; +const int NUI_MOUSE_BUTTON_RIGHT = 2; + +const int NUI_SCROLLBARS_NONE = 0; +const int NUI_SCROLLBARS_X = 1; +const int NUI_SCROLLBARS_Y = 2; +const int NUI_SCROLLBARS_BOTH = 3; +const int NUI_SCROLLBARS_AUTO = 4; + +const int NUI_ASPECT_FIT = 0; +const int NUI_ASPECT_FILL = 1; +const int NUI_ASPECT_FIT100 = 2; +const int NUI_ASPECT_EXACT = 3; +const int NUI_ASPECT_EXACTSCALED = 4; +const int NUI_ASPECT_STRETCH = 5; + +const int NUI_HALIGN_CENTER = 0; +const int NUI_HALIGN_LEFT = 1; +const int NUI_HALIGN_RIGHT = 2; + +const int NUI_VALIGN_MIDDLE = 0; +const int NUI_VALIGN_TOP = 1; +const int NUI_VALIGN_BOTTOM = 2; + +// ----------------------- +// Style + +const float NUI_STYLE_PRIMARY_WIDTH = 150.0; +const float NUI_STYLE_PRIMARY_HEIGHT = 50.0; + +const float NUI_STYLE_SECONDARY_WIDTH = 150.0; +const float NUI_STYLE_SECONDARY_HEIGHT = 35.0; + +const float NUI_STYLE_TERTIARY_WIDTH = 100.0; +const float NUI_STYLE_TERTIARY_HEIGHT = 30.0; + +const float NUI_STYLE_ROW_HEIGHT = 25.0; + +// ----------------------- +// Bind params + +// These currently only affect presentation and serve as a +// optimisation to let the client do the heavy lifting on this. +// In particular, this enables you to bind an array of values and +// transform them all at once on the client, instead of having to +// have the server transform them before sending. + +// NB: These must be OR-ed together into a bitmask. + +const int NUI_NUMBER_FLAG_HEX = 0x001; + +// NB: These must be OR-ed together into a bitmask. + +const int NUI_TEXT_FLAG_LOWERCASE = 0x001; +const int NUI_TEXT_FLAG_UPPERCASE = 0x002; + +// ----------------------- +// Window + +// Special cases: +// * Set the window title to JsonBool(FALSE), Collapse to JsonBool(FALSE) and bClosable to FALSE +// to hide the title bar. +// Note: You MUST provide a way to close the window some other way, or the user will be stuck with it. +// * Set a minimum size constraint equal to the maximmum size constraint in the same dimension to prevent +// a window from being resized in that dimension. +// - jRoot: Layout-ish (NuiRow, NuiCol, NuiGroup) +// - jTitle: Bind:String +// - jGeometry: Bind:Rect +// Set x and/or y to -1.0 to center the window on that axis. +// Set x and/or y to -2.0 to position the window's top left at the mouse cursor's position of that axis. +// Set x and/or y to -3.0 to center the window on the mouse cursor's position of that axis. +// - jResizable: Bind:Bool +// Set to JsonBool(TRUE) or JsonNull() to let user resize without binding. +// - jCollapsed: Bind:Bool +// Set to a static value JsonBool(FALSE) to disable collapsing. +// Set to JsonNull() to let user collapse without binding. +// For better UX, leave collapsing on. +// - jCloseable: Bind:Bool +// You provide a way to close the window if you set this to FALSE. +// For better UX, handle the window "closed" event. +// - jTransparent: Bind:Bool +// Do not render background +// - jBorder: Bind:Bool +// Do not render border +// - jAcceptsInput: Bind:Bool +// Set JsonBool(FALSE) to disable all input. +// All hover, clicks and keypresses will fall through. +// - jSizeConstraint: Bind:Rect +// Constrains minimum and maximum size of window. +// Set x to minimum width, y to minimum height, w to maximum width, h to maximum height. +// Set any individual constraint to 0.0 to ignore that constraint. +// - jEdgeConstraint: Bind:Rect +// Prevents a window from being rendered within the specified margins. +// Set x to left margin, y to top margin, w to right margin, h to bottom margin. +// Set any individual constraint to 0.0 to ignore that constraint +// - jFont: Bind:String +// Override font used on window, including decorations. See NuiStyleFont() for details. +json NuiWindow(json jRoot, json jTitle, json jGeometry, json jResizable,json jCollapsed,json jClosable, json jTransparent, json jBorder, json jAcceptsInput = JSON_TRUE, json jSizeConstraint = JSON_NULL, json jEdgeConstraint = JSON_NULL, json jFont = JSON_STRING); + +// ----------------------- +// Values + +// Create a dynamic bind. Unlike static values, these can change at runtime: +// NuiBind("mybindlabel"); +// NuiSetBind(.., "mybindlabel", JsonString("hi")); +// To create static values, just use the json types directly: +// JsonString("hi"); +// +// You can parametrise this particular bind with the given flags. +// These flags only apply to that particular usage of this bind value. +// +// - sId: string +// - nNumberFlags: bitmask of NUI_NUMBER_FLAG_* +// - nNumberPrecision: Precision to print number with (int or float) +// - nTextFlags: bitmask of NUI_TEXT_FLAG_* +json NuiBind(string sId, int nNumberFlags = 0, int nNumberPrecision = 0, int nTextFlags = 0); + +// Tag the given element with a id. +// Only tagged elements will send events to the server. +json NuiId(json jElem, string sId); + +// A shim/helper that can be used to render or bind a strref where otherwise +// a string value would go. +json NuiStrRef(int nStrRef); + +// ----------------------- +// Layout + +// A column will auto-space all elements inside of it and advise the parent +// about it's desired size. +// - jList: Layout[] or Element[] +json NuiCol(json jList); + +// A row will auto-space all elements inside of it and advise the parent +// about it's desired size. +// - jList: Layout[] or Element[] +json NuiRow(json jList); + +// A group, usually with a border and some padding, holding a single element. Can scroll. +// Will not advise parent of size, so you need to let it fill a span (col/row) as if it was +// a element. +// - jChild: Layout or Element +json NuiGroup(json jChild, int bBorder = TRUE, int nScroll = NUI_SCROLLBARS_AUTO); + +// Modifiers/Attributes: These are all static and cannot be bound, since the UI system +// cannot easily reflow once the layout is set up. You need to swap the layout if you +// want to change element geometry. + +// - jElem: Element +// - fWidth: Float: Element width in pixels (strength=required). +json NuiWidth(json jElem, float fWidth); + +// - jElem: Element +// - fHeight: Float: Height in pixels (strength=required). +json NuiHeight(json jElem, float fHeight); + +// - jElem: Element +// - fAspect: Float: Ratio of x/y +json NuiAspect(json jElem, float fAspect); + +// Set a margin on the widget. The margin is the spacing outside of the widget. +json NuiMargin(json jElem, float fMargin); + +// Set padding on the widget. The margin is the spacing inside of the widget. +json NuiPadding(json jElem, float fPadding); + +// Disabled elements are non-interactive and greyed out. +// - jElem: Element +// - jEnabled: Bind:Bool +json NuiEnabled(json jElem, json jEnabler); + +// Invisible elements do not render at all, but still take up layout space. +// - jElem: Element +// - jVisible: Bind:Bool +json NuiVisible(json jElem, json jVisible); + +// Tooltips show on mouse hover. +// - jElem: Element +// - jTooltip: Bind:String +json NuiTooltip(json jElem, json jTooltip); + +// Tooltips for disabled elements show on mouse hover. +// - jElem: Element +// - jTooltip: Bind:String +json NuiDisabledTooltip(json jElem, json jTooltip); + +// Encouraged elements have a breathing animated glow inside of it. +// - jElem: Element +// - jEncouraged: Bind:Bool +json NuiEncouraged(json jElem, json jEncouraged); + +// ----------------------- +// Props & Style + +json NuiVec(float x, float y); + +json NuiRect(float x, float y, float w, float h); + +json NuiColor(int r, int g, int b, int a = 255); + +// Style the foreground color of a widget or window title. This is dependent on the widget +// in question and only supports solid/full colors right now (no texture skinning). +// For example, labels would style their text color; progress bars would style the bar. +// - jElem: Element +// - jColor: Bind:Color +json NuiStyleForegroundColor(json jElem, json jColor); + +// Override the font used for this element. The font and it's properties needs to be listed in +// nui_skin.tml, as all fonts are pre-baked into a texture atlas at content load. +// - jElem: Element +// - jColor: Bind:String ([[fonts]].name in nui_skin.tml) +json NuiStyleFont(json jElem, json jFont); + +// ----------------------- +// Widgets + +// A special widget that just takes up layout space. +// If you add multiple spacers to a span, they will try to size equally. +// e.g.: [ ] will try to center the button. +json NuiSpacer(); + +// Create a label field. Labels are single-line stylable non-editable text fields. +// - jValue: Bind:String +// - jHAlign: Bind:Int:NUI_HALIGN_* +// - jVAlign: Bind:Int:NUI_VALIGN_* +json NuiLabel(json jValue, json jHAlign, json jVAlign); + +// Create a non-editable text field. Note: This text field internally implies a NuiGroup wrapped +// around it, which is providing the optional border and scrollbars. +// - jValue: Bind:String +// - bBorder: Bool +// - nScroll: Int:NUI_SCROLLBARS_* +json NuiText(json jValue, int bBorder = TRUE, int nScroll = NUI_SCROLLBARS_AUTO); + +// A clickable button with text as the label. +// Sends "click" events on click. +// - jLabel: Bind:String +json NuiButton(json jLabel); + +// A clickable button with an image as the label. +// Sends "click" events on click. +// - jResRef: Bind:String +json NuiButtonImage(json jResRef); + +// A clickable button with text as the label. +// Same as the normal button, but this one is a toggle. +// Sends "click" events on click. +// - jLabel: Bind:String +// - jValue: Bind:Bool +json NuiButtonSelect(json jLabel, json jValue); + +// A checkbox with a label to the right of it. +// - jLabel: Bind:String +// - jBool: Bind:Bool +json NuiCheck(json jLabel, json jBool); + +// A image, with no border or padding. +// - jResRef: Bind:String +// - jAspect: Bind:Int:NUI_ASPECT_* +// - jHAlign: Bind:Int:NUI_HALIGN_* +// - jVAlign: Bind:Int:NUI_VALIGN_* +json NuiImage(json jResRef, json jAspect, json jHAlign, json jVAlign); + +// Optionally render only subregion of jImage. This property can be set on +// NuiImage and NuiButtonImage widgets. +// jRegion is a NuiRect (x, y, w, h) to indicate the render region inside the image. +json NuiImageRegion(json jImage, json jRegion); + +// A combobox/dropdown. +// - jElements: Bind:ComboEntry[] +// - jSelected: Bind:Int (index into jElements) +json NuiCombo(json jElements, json jSelected); + +json NuiComboEntry(string sLabel, int nValue); + +// A floating-point slider. A good step size for normal-sized sliders is 0.01. +// - jValue: Bind:Float +// - jMin: Bind:Float +// - jMax: Bind:Float +// - jStepSize: Bind:Float +json NuiSliderFloat(json jValue, json jMin, json jMax, json jStepSize); + +// A integer/discrete slider. +// - jValue: Bind:Int +// - jMin: Bind:Int +// - jMax: Bind:Int +// - jStepSize: Bind:Int +json NuiSlider(json jValue, json jMin, json jMax, json jStepSize); + +// A progress bar. Progress is always from 0.0 to 1.0. +// - jValue: Bind:Float (0.0->1.0 +json NuiProgress(json jValue); + +// A editable text field. +// - jPlaceholder: Bind:String +// - jValue: Bind:String +// - nMaxLength: UInt >= 1, <= 65535 +// - bMultiLine: Bool +// - bWordWrap: Bool +json NuiTextEdit(json jPlaceholder, json jValue, int nMaxLength, int bMultiline, int bWordWrap = TRUE); + +// Creates a list view of elements. +// jTemplate needs to be an array of NuiListTemplateCell instances. +// All binds referenced in jTemplate should be arrays of rRowCount size; +// e.g. when rendering a NuiLabel(), the bound label String should be an array of strings. +// You can pass in one of the template jRowCount into jSize as a convenience. The array +// size will be uses as the Int bind. +// fRowHeight defines the height of the rendered rows. +// - jTemplate: NuiListTemplateCell[] (max: 16) +// - jRowCount: Bind:Int +// - bBorder: Bool +// - nScroll: Int:NUI_SCROLLBARS_*, Note: Cannot be AUTO +json NuiList(json jTemplate, json jRowCount, float fRowHeight = NUI_STYLE_ROW_HEIGHT, int bBorder = TRUE, int nScroll = NUI_SCROLLBARS_Y); + +// - jElem: Element +// - fWidth: Float:0 = auto, >1 = pixel width +// - bVariable: Bool:Cell can grow if space is available; otherwise static +json NuiListTemplateCell(json jElem, float fWidth, int bVariable); + +// A simple color picker, with no border or spacing. +// - jColor: Bind:Color +json NuiColorPicker(json jColor); + +// A list of options (radio buttons). Only one can be selected +// at a time. jValue is updated every time a different element is +// selected. The special value -1 means "nothing". +// - nDirection: NUI_DIRECTION_* +// - jElements: JsonArray of string labels +// - jValue: Bind:UInt +json NuiOptions(int nDirection, json jElements, json jValue); + +// A group of buttons. Only one can be selected at a time. jValue +// is updated every time a different button is selected. The special +// value -1 means "nothing". +// - nDirection: NUI_DIRECTION_* +// - jElements: JsonArray of string labels +// - jValue: Bind:Int +json NuiToggles(int nDirection, json jElements, json jValue); + +const int NUI_CHART_TYPE_LINES = 0; +const int NUI_CHART_TYPE_COLUMN = 1; + +// - nType: Int:NUI_CHART_TYPE_* +// - jLegend: Bind:String +// - jColor: Bind:NuiColor +// - jData: Bind:Float[] +json NuiChartSlot(int nType, json jLegend, json jColor, json jData); + +// Renders a chart. +// Currently, min and max values are determined automatically and +// cannot be influenced. +// - jSlots: NuiChartSlot[] +json NuiChart( json jSlots); + +// ----------------------- +// Draw Lists + +// Draw lists are raw painting primitives on top of widgets. +// They are anchored to the widget x/y coordinates, and are always +// painted in order of definition, without culling. You cannot bind +// the draw_list itself, but most parameters on individual draw_list +// entries can be bound. + +const int NUI_DRAW_LIST_ITEM_TYPE_POLYLINE = 0; +const int NUI_DRAW_LIST_ITEM_TYPE_CURVE = 1; +const int NUI_DRAW_LIST_ITEM_TYPE_CIRCLE = 2; +const int NUI_DRAW_LIST_ITEM_TYPE_ARC = 3; +const int NUI_DRAW_LIST_ITEM_TYPE_TEXT = 4; +const int NUI_DRAW_LIST_ITEM_TYPE_IMAGE = 5; +const int NUI_DRAW_LIST_ITEM_TYPE_LINE = 6; +const int NUI_DRAW_LIST_ITEM_TYPE_RECT = 7; + +// You can order draw list items to be painted either before, or after the +// builtin render of the widget in question. This enables you to paint "behind" +// a widget. + +const int NUI_DRAW_LIST_ITEM_ORDER_BEFORE = -1; +const int NUI_DRAW_LIST_ITEM_ORDER_AFTER = 1; + +// Always render draw list item (default). +const int NUI_DRAW_LIST_ITEM_RENDER_ALWAYS = 0; +// Only render when NOT hovering. +const int NUI_DRAW_LIST_ITEM_RENDER_MOUSE_OFF = 1; +// Only render when mouse is hovering. +const int NUI_DRAW_LIST_ITEM_RENDER_MOUSE_HOVER = 2; +// Only render while LMB is held down. +const int NUI_DRAW_LIST_ITEM_RENDER_MOUSE_LEFT = 3; +// Only render while RMB is held down. +const int NUI_DRAW_LIST_ITEM_RENDER_MOUSE_RIGHT = 4; +// Only render while MMB is held down. +const int NUI_DRAW_LIST_ITEM_RENDER_MOUSE_MIDDLE = 5; + +// - jEnabled: Bind:Bool +// - jColor: Bind:Color +// - jFill: Bind:Bool +// - jLineThickness: Bind:Float +// - jPoints: Bind:Float[] Always provide points in pairs +// - nOrder: Int:NUI_DRAW_LIST_ITEM_ORDER_* +// - nRender: Int:NUI_DRAW_LIST_ITEM_RENDER_* +// - nBindArrays: Values in binds are considered arrays-of-values +json NuiDrawListPolyLine(json jEnabled, json jColor, json jFill, json jLineThickness, json jPoints, int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, int nBindArrays = FALSE); + +// - jEnabled: Bind:Bool +// - jColor: Bind:Color +// - jLineThickness: Bind:Float +// - jA: Bind:Vec2 +// - jB: Bind:Vec2 +// - jCtrl0: Bind:Vec2 +// - jCtrl1: Bind:Vec2 +// - nOrder: Int:NUI_DRAW_LIST_ITEM_ORDER_* +// - nRender: Int:NUI_DRAW_LIST_ITEM_RENDER_* +// - nBindArrays: Values in binds are considered arrays-of-values +json NuiDrawListCurve(json jEnabled, json jColor, json jLineThickness, json jA, json jB, json jCtrl0, json jCtrl1, int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, int nBindArrays = FALSE); + +// - jEnabled: Bind:Bool +// - jColor: Bind:Color +// - jFill: Bind:Bool +// - jLineThickness: Bind:Float +// - jRect: Bind:Rect +// - nOrder: Int:NUI_DRAW_LIST_ITEM_ORDER_* +// - nRender: Int:NUI_DRAW_LIST_ITEM_RENDER_* +// - nBindArrays: Values in binds are considered arrays-of-values +json NuiDrawListCircle(json jEnabled, json jColor, json jFill, json jLineThickness, json jRect, int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, int nBindArrays = FALSE); + +// - jEnabled: Bind:Bool +// - jColor: Bind:Color +// - jFill: Bind:Bool +// - jLineThickness: Bind:Float +// - jCenter: Bind:Rect +// - jRadius: Bind:Float +// - jAMin: Bind:Float +// - jAMax: Bind:Float +// - nOrder: Int:NUI_DRAW_LIST_ITEM_ORDER_* +// - nRender: Int:NUI_DRAW_LIST_ITEM_RENDER_* +// - nBindArrays: Values in binds are considered arrays-of-values +json NuiDrawListArc(json jEnabled, json jColor, json jFill, json jLineThickness, json jCenter, json jRadius, json jAMin, json jAMax, int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, int nBindArrays = FALSE); + +// - jEnabled: Bind:Bool +// - jColor: Bind:Color +// - jRect: Bind:Rect +// - jText: Bind:String +// - nOrder: Int:NUI_DRAW_LIST_ITEM_ORDER_* +// - nRender: Int:NUI_DRAW_LIST_ITEM_RENDER_* +// - nBindArrays: Values in binds are considered arrays-of-values +// - jFont: Bind:String +json NuiDrawListText(json jEnabled, json jColor, json jRect, json jText, int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, int nBindArrays = FALSE, json jFont = JSON_STRING); + +// - jEnabled: Bind:Bool +// - jResRef: Bind:String +// - jPos: Bind:Rect +// - jAspect: Bind:Int:NUI_ASPECT_* +// - jHAlign: Bind:Int:NUI_HALIGN_* +// - jVAlign: Bind:Int:NUI_VALIGN_* +// - nOrder: Int:NUI_DRAW_LIST_ITEM_ORDER_* +// - nRender: Int:NUI_DRAW_LIST_ITEM_RENDER_* +// - nBindArrays: Values in binds are considered arrays-of-values +json NuiDrawListImage(json jEnabled, json jResRef, json jPos, json jAspect, json jHAlign, json jVAlign, int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, int nBindArrays = FALSE); + +// - jDrawListImage: DrawListItemImage +// - jRegion: Bind:NuiRect +json NuiDrawListImageRegion(json jDrawListImage, json jRegion); + +// - jEnabled: Bind:Bool +// - jColor: Bind:Color +// - jLineThickness: Bind:Float +// - jA: Bind:Vec2 +// - jB: Bind:Vec2 +// - nOrder: Int:NUI_DRAW_LIST_ITEM_ORDER_* +// - nRender: Int:NUI_DRAW_LIST_ITEM_RENDER_* +// - nBindArrays: Values in binds are considered arrays-of-values +json NuiDrawListLine(json jEnabled, json jColor, json jLineThickness, json jA, json jB, int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, int nBindArrays = FALSE); + +// - jEnabled: Bind:Bool +// - jColor: Bind:Color +// - jFill: Bind:Bool +// - jLineThickness: Bind:Float +// - jRext: Bind:Rect +// - nOrder: Int:NUI_DRAW_LIST_ITEM_ORDER_* +// - nRender: Int:NUI_DRAW_LIST_ITEM_RENDER_* +// - nBindArrays: Values in binds are considered arrays-of-values +json NuiDrawListRect(json jEnabled, json jColor, json jFill, json jLineThickness, json jRect, int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, int nBindArrays = FALSE); + +// - jElem: Element +// - jScissor: Bind:Bool, Constrain painted elements to widget bounds. +// - jList: DrawListItem[] +json NuiDrawList(json jElem, json jScissor, json jList); + +// ----------------------- +// Implementation + +json +NuiWindow( + json jRoot, + json jTitle, + json jGeometry, + json jResizable, + json jCollapsed, + json jClosable, + json jTransparent, + json jBorder, + json jAcceptsInput = JSON_TRUE, + json jWindowConstraint = JSON_NULL, + json jEdgeConstraint = JSON_NULL, + json jFont = JSON_STRING +) +{ + json ret = JsonObject(); + // Currently hardcoded and here to catch backwards-incompatible data in the future. + JsonObjectSetInplace(ret, "version", JsonInt(1)); + JsonObjectSetInplace(ret, "title", jTitle); + JsonObjectSetInplace(ret, "root", jRoot); + JsonObjectSetInplace(ret, "geometry", jGeometry); + JsonObjectSetInplace(ret, "resizable", jResizable); + JsonObjectSetInplace(ret, "collapsed", jCollapsed); + JsonObjectSetInplace(ret, "closable", jClosable); + JsonObjectSetInplace(ret, "transparent", jTransparent); + JsonObjectSetInplace(ret, "border", jBorder); + JsonObjectSetInplace(ret, "accepts_input", jAcceptsInput); + JsonObjectSetInplace(ret, "size_constraint", jWindowConstraint); + JsonObjectSetInplace(ret, "edge_constraint", jEdgeConstraint); + JsonObjectSetInplace(ret, "font", jFont); + return ret; +} + +json +NuiElement( + string sType, + json jLabel, + json jValue +) +{ + json ret = JsonObject(); + JsonObjectSetInplace(ret, "type", JsonString(sType)); + JsonObjectSetInplace(ret, "label", jLabel); + JsonObjectSetInplace(ret, "value", jValue); + return ret; +} + +json +NuiBind( + string sId, + int nNumberFlags = 0, + int nNumberPrecision = 0, + int nTextFlags = 0 +) +{ + json ret = JsonObject(); + JsonObjectSetInplace(ret, "bind", JsonString(sId)); + JsonObjectSetInplace(ret, "number_flags", JsonInt(nNumberFlags)); + JsonObjectSetInplace(ret, "number_precision", JsonInt(nNumberPrecision)); + JsonObjectSetInplace(ret, "text_flags", JsonInt(nTextFlags)); + return ret; +} + +json +NuiId( + json jElem, + string sId +) +{ + return JsonObjectSet(jElem, "id", JsonString(sId)); +} + +json +NuiStrRef( + int nStrRef +) +{ + json ret = JsonObject(); + JsonObjectSetInplace(ret, "strref", JsonInt(nStrRef)); + return ret; +} + +json +NuiCol( + json jList +) +{ + return JsonObjectSet(NuiElement("col", JsonNull(), JsonNull()), "children", jList); +} + +json +NuiRow( + json jList +) +{ + return JsonObjectSet(NuiElement("row", JsonNull(), JsonNull()), "children", jList); +} + +json +NuiGroup( + json jChild, + int bBorder = TRUE, + int nScroll = NUI_SCROLLBARS_AUTO +) +{ + json ret = NuiElement("group", JsonNull(), JsonNull()); + JsonObjectSetInplace(ret, "children", JsonArrayInsert(JsonArray(), jChild)); + JsonObjectSetInplace(ret, "border", JsonBool(bBorder)); + JsonObjectSetInplace(ret, "scrollbars", JsonInt(nScroll)); + return ret; +} + +json +NuiWidth(json jElem, float fWidth) +{ + return JsonObjectSet(jElem, "width", JsonFloat(fWidth)); +} + +json +NuiHeight(json jElem, float fHeight) +{ + return JsonObjectSet(jElem, "height", JsonFloat(fHeight)); +} + +json +NuiAspect(json jElem, float fAspect) +{ + return JsonObjectSet(jElem, "aspect", JsonFloat(fAspect)); +} + +json +NuiMargin( + json jElem, + float fMargin +) +{ + return JsonObjectSet(jElem, "margin", JsonFloat(fMargin)); +} + +json +NuiPadding( + json jElem, + float fPadding +) +{ + return JsonObjectSet(jElem, "padding", JsonFloat(fPadding)); +} + +json +NuiEnabled( + json jElem, + json jEnabler +) +{ + return JsonObjectSet(jElem, "enabled", jEnabler); +} + +json +NuiVisible( + json jElem, + json jVisible +) +{ + return JsonObjectSet(jElem, "visible", jVisible); +} + +json +NuiTooltip( + json jElem, + json jTooltip +) +{ + return JsonObjectSet(jElem, "tooltip", jTooltip); +} + +json +NuiDisabledTooltip( + json jElem, + json jTooltip +) +{ + return JsonObjectSet(jElem, "disabled_tooltip", jTooltip); +} + +json +NuiEncouraged( + json jElem, + json jEncouraged +) +{ + return JsonObjectSet(jElem, "encouraged", jEncouraged); +} + +json +NuiVec(float x, float y) +{ + json ret = JsonObject(); + JsonObjectSetInplace(ret, "x", JsonFloat(x)); + JsonObjectSetInplace(ret, "y", JsonFloat(y)); + return ret; +} + +json +NuiRect(float x, float y, float w, float h) +{ + json ret = JsonObject(); + JsonObjectSetInplace(ret, "x", JsonFloat(x)); + JsonObjectSetInplace(ret, "y", JsonFloat(y)); + JsonObjectSetInplace(ret, "w", JsonFloat(w)); + JsonObjectSetInplace(ret, "h", JsonFloat(h)); + return ret; +} + +json +NuiColor(int r, int g, int b, int a = 255) +{ + json ret = JsonObject(); + JsonObjectSetInplace(ret, "r", JsonInt(r)); + JsonObjectSetInplace(ret, "g", JsonInt(g)); + JsonObjectSetInplace(ret, "b", JsonInt(b)); + JsonObjectSetInplace(ret, "a", JsonInt(a)); + return ret; +} + +json +NuiStyleForegroundColor( + json jElem, + json jColor +) +{ + return JsonObjectSet(jElem, "foreground_color", jColor); +} + +json +NuiStyleFont( + json jElem, + json jFont +) +{ + return JsonObjectSet(jElem, "font", jFont); +} + +json +NuiSpacer() +{ + return NuiElement("spacer", JsonNull(), JsonNull()); +} + +json +NuiLabel( + json jValue, + json jHAlign, + json jVAlign +) +{ + json ret = NuiElement("label", JsonNull(), jValue); + JsonObjectSetInplace(ret, "text_halign", jHAlign); + JsonObjectSetInplace(ret, "text_valign", jVAlign); + return ret; +} + +json +NuiText( + json jValue, + int bBorder = TRUE, + int nScroll = NUI_SCROLLBARS_AUTO +) +{ + json ret = NuiElement("text", JsonNull(), jValue); + JsonObjectSetInplace(ret, "border", JsonBool(bBorder)); + JsonObjectSetInplace(ret, "scrollbars", JsonInt(nScroll)); + return ret; +} + +json +NuiButton( + json jLabel +) +{ + return NuiElement("button", jLabel, JsonNull()); +} + +json +NuiButtonImage( + json jResRef +) +{ + return NuiElement("button_image", jResRef, JsonNull()); +} + +json +NuiButtonSelect( + json jLabel, + json jValue +) +{ + return NuiElement("button_select", jLabel, jValue); +} + +json +NuiCheck( + json jLabel, + json jBool +) +{ + return NuiElement("check", jLabel, jBool); +} + +json +NuiImage( + json jResRef, + json jAspect, + json jHAlign, + json jVAlign +) +{ + json img = NuiElement("image", JsonNull(), jResRef); + JsonObjectSetInplace(img, "image_aspect", jAspect); + JsonObjectSetInplace(img, "image_halign", jHAlign); + JsonObjectSetInplace(img, "image_valign", jVAlign); + return img; +} + +json +NuiImageRegion( + json jImage, + json jRegion +) +{ + return JsonObjectSet(jImage, "image_region", jRegion); +} + +json +NuiCombo( + json jElements, + json jSelected +) +{ + return JsonObjectSet(NuiElement("combo", JsonNull(), jSelected), "elements", jElements); +} + +json +NuiComboEntry( + string sLabel, + int nValue +) +{ + return JsonArrayInsert(JsonArrayInsert(JsonArray(), JsonString(sLabel)), JsonInt(nValue)); +} + +json +NuiSliderFloat( + json jValue, + json jMin, + json jMax, + json jStepSize +) +{ + json ret = NuiElement("sliderf", JsonNull(), jValue); + JsonObjectSetInplace(ret, "min", jMin); + JsonObjectSetInplace(ret, "max", jMax); + JsonObjectSetInplace(ret, "step", jStepSize); + return ret; +} + +json +NuiSlider( + json jValue, + json jMin, + json jMax, + json jStepSize +) +{ + json ret = NuiElement("slider", JsonNull(), jValue); + JsonObjectSetInplace(ret, "min", jMin); + JsonObjectSetInplace(ret, "max", jMax); + JsonObjectSetInplace(ret, "step", jStepSize); + return ret; +} + +json +NuiProgress( + json jValue +) +{ + return NuiElement("progress", JsonNull(), jValue); +} + +json +NuiTextEdit( + json jPlaceholder, + json jValue, + int nMaxLength, + int bMultiline, + int bWordWrap = TRUE +) +{ + json ret = NuiElement("textedit", jPlaceholder, jValue); + JsonObjectSetInplace(ret, "max", JsonInt(nMaxLength)); + JsonObjectSetInplace(ret, "multiline", JsonBool(bMultiline)); + JsonObjectSetInplace(ret, "wordwrap", JsonBool(bWordWrap)); + return ret; +} + +json +NuiList( + json jTemplate, + json jRowCount, + float fRowHeight = NUI_STYLE_ROW_HEIGHT, + int bBorder = TRUE, + int nScroll = NUI_SCROLLBARS_Y +) +{ + json ret = NuiElement("list", JsonNull(), JsonNull()); + JsonObjectSetInplace(ret, "row_template", jTemplate); + JsonObjectSetInplace(ret, "row_count", jRowCount); + JsonObjectSetInplace(ret, "row_height", JsonFloat(fRowHeight)); + JsonObjectSetInplace(ret, "border", JsonBool(bBorder)); + JsonObjectSetInplace(ret, "scrollbars", JsonInt(nScroll)); + return ret; +} + +json +NuiListTemplateCell( + json jElem, + float fWidth, + int bVariable +) +{ + json ret = JsonArray(); + JsonArrayInsertInplace(ret, jElem); + JsonArrayInsertInplace(ret, JsonFloat(fWidth)); + JsonArrayInsertInplace(ret, JsonBool(bVariable)); + return ret; +} + +json +NuiColorPicker( + json jColor +) +{ + json ret = NuiElement("color_picker", JsonNull(), jColor); + return ret; +} + +json +NuiOptions( + int nDirection, + json jElements, + json jValue +) +{ + json ret = NuiElement("options", JsonNull(), jValue); + JsonObjectSetInplace(ret, "direction", JsonInt(nDirection)); + JsonObjectSetInplace(ret, "elements", jElements); + return ret; +} + +json +NuiToggles( + int nDirection, + json jElements, + json jValue +) +{ + json ret = NuiElement("tabbar", JsonNull(), jValue); + JsonObjectSetInplace(ret, "direction", JsonInt(nDirection)); + JsonObjectSetInplace(ret, "elements", jElements); + return ret; +} + +json +NuiChartSlot( + int nType, + json jLegend, + json jColor, + json jData +) +{ + json ret = JsonObject(); + JsonObjectSetInplace(ret, "type", JsonInt(nType)); + JsonObjectSetInplace(ret, "legend", jLegend); + JsonObjectSetInplace(ret, "color", jColor); + JsonObjectSetInplace(ret, "data", jData); + return ret; +} + +json +NuiChart( + json jSlots +) +{ + json ret = NuiElement("chart", JsonNull(), jSlots); + return ret; +} + +json +NuiDrawListItem( + int nType, + json jEnabled, + json jColor, + json jFill, + json jLineThickness, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, + int nBindArrays = FALSE +) +{ + json ret = JsonObject(); + JsonObjectSetInplace(ret, "type", JsonInt(nType)); + JsonObjectSetInplace(ret, "enabled", jEnabled); + JsonObjectSetInplace(ret, "color", jColor); + JsonObjectSetInplace(ret, "fill", jFill); + JsonObjectSetInplace(ret, "line_thickness", jLineThickness); + JsonObjectSetInplace(ret, "order", JsonInt(nOrder)); + JsonObjectSetInplace(ret, "render", JsonInt(nRender)); + JsonObjectSetInplace(ret, "arrayBinds", JsonBool(nBindArrays)); + return ret; +} + +json +NuiDrawListPolyLine( + json jEnabled, + json jColor, + json jFill, + json jLineThickness, + json jPoints, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, + int nBindArrays = FALSE +) +{ + json ret = NuiDrawListItem(NUI_DRAW_LIST_ITEM_TYPE_POLYLINE, jEnabled, jColor, jFill, jLineThickness, nOrder, nRender, nBindArrays); + JsonObjectSetInplace(ret, "points", jPoints); + return ret; +} + +json +NuiDrawListCurve( + json jEnabled, + json jColor, + json jLineThickness, + json jA, + json jB, + json jCtrl0, + json jCtrl1, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, + int nBindArrays = FALSE +) +{ + json ret = NuiDrawListItem(NUI_DRAW_LIST_ITEM_TYPE_CURVE, jEnabled, jColor, JsonBool(0), jLineThickness, nOrder, nRender, nBindArrays); + JsonObjectSetInplace(ret, "a", jA); + JsonObjectSetInplace(ret, "b", jB); + JsonObjectSetInplace(ret, "ctrl0", jCtrl0); + JsonObjectSetInplace(ret, "ctrl1", jCtrl1); + return ret; +} + +json +NuiDrawListCircle( + json jEnabled, + json jColor, + json jFill, + json jLineThickness, + json jRect, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, + int nBindArrays = FALSE +) +{ + json ret = NuiDrawListItem(NUI_DRAW_LIST_ITEM_TYPE_CIRCLE, jEnabled, jColor, jFill, jLineThickness, nOrder, nRender, nBindArrays); + JsonObjectSetInplace(ret, "rect", jRect); + return ret; +} + +json +NuiDrawListArc( + json jEnabled, + json jColor, + json jFill, + json jLineThickness, + json jCenter, + json jRadius, + json jAMin, + json jAMax, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, + int nBindArrays = FALSE +) +{ + json ret = NuiDrawListItem(NUI_DRAW_LIST_ITEM_TYPE_ARC, jEnabled, jColor, jFill, jLineThickness, nOrder, nRender, nBindArrays); + JsonObjectSetInplace(ret, "c", jCenter); + JsonObjectSetInplace(ret, "radius", jRadius); + JsonObjectSetInplace(ret, "amin", jAMin); + JsonObjectSetInplace(ret, "amax", jAMax); + return ret; +} + +json +NuiDrawListText( + json jEnabled, + json jColor, + json jRect, + json jText, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, + int nBindArrays = FALSE, + json jFont = JSON_STRING +) +{ + json ret = NuiDrawListItem(NUI_DRAW_LIST_ITEM_TYPE_TEXT, jEnabled, jColor, JsonNull(), JsonNull(), nOrder, nRender, nBindArrays); + JsonObjectSetInplace(ret, "rect", jRect); + JsonObjectSetInplace(ret, "text", jText); + ret = NuiStyleFont(ret, jFont); + return ret; +} + +json +NuiDrawListImage( + json jEnabled, + json jResRef, + json jRect, + json jAspect, + json jHAlign, + json jVAlign, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, + int nBindArrays = FALSE +) +{ + json ret = NuiDrawListItem(NUI_DRAW_LIST_ITEM_TYPE_IMAGE, jEnabled, JsonNull(), JsonNull(), JsonNull(), nOrder, nRender, nBindArrays); + JsonObjectSetInplace(ret, "image", jResRef); + JsonObjectSetInplace(ret, "rect", jRect); + JsonObjectSetInplace(ret, "image_aspect", jAspect); + JsonObjectSetInplace(ret, "image_halign", jHAlign); + JsonObjectSetInplace(ret, "image_valign", jVAlign); + return ret; +} + +json +NuiDrawListImageRegion( + json jDrawListImage, + json jRegion +) +{ + return JsonObjectSet(jDrawListImage, "image_region", jRegion); +} + +json +NuiDrawListLine( + json jEnabled, + json jColor, + json jLineThickness, + json jA, + json jB, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, + int nBindArrays = FALSE +) +{ + json ret = NuiDrawListItem(NUI_DRAW_LIST_ITEM_TYPE_LINE, jEnabled, jColor, JsonNull(), jLineThickness, nOrder, nRender, nBindArrays); + JsonObjectSetInplace(ret, "a", jA); + JsonObjectSetInplace(ret, "b", jB); + return ret; +} + +json +NuiDrawListRect( + json jEnabled, + json jColor, + json jFill, + json jLineThickness, + json jRect, + int nOrder = NUI_DRAW_LIST_ITEM_ORDER_AFTER, + int nRender = NUI_DRAW_LIST_ITEM_RENDER_ALWAYS, + int nBindArrays = FALSE +) +{ + json ret = NuiDrawListItem(NUI_DRAW_LIST_ITEM_TYPE_RECT, jEnabled, jColor, jFill, jLineThickness, nOrder, nRender, nBindArrays); + JsonObjectSetInplace(ret, "rect", jRect); + return ret; +} + +json +NuiDrawList( + json jElem, + json jScissor, + json jList +) +{ + json ret = JsonObjectSet(jElem, "draw_list", jList); + JsonObjectSetInplace(ret, "draw_list_scissor", jScissor); + return ret; +} + +// json +// NuiCanvas( +// json jList +// ) +// { +// json ret = NuiElement("canvas", JsonNull(), jList); +// return ret; +// } diff --git a/src/include/nw_o2_coninclude.nss b/src/include/nw_o2_coninclude.nss new file mode 100644 index 0000000..4a250bd --- /dev/null +++ b/src/include/nw_o2_coninclude.nss @@ -0,0 +1,4791 @@ +//:://///////////////////////////////////////////// +//:: NW_O2_CONINCLUDE.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This include file handles the random treasure + distribution for treasure from creatures and containers + + [ ] Documented +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent, Andrew +//:: Created On: November - May +//:: +//:: Updated for .35 by Jaysyn 2023/03/10 +//::////////////////////////////////////////////// +// :: MODS +// April 23 2002: Removed animal parts. They were silly. +// May 6 2002: Added Undead to the EXCLUSION treasure list (they drop nothing now) +// - redistributed treasure (to lessen amoun t of armor and increase 'class specific treasure' +// - Rangers with heavy armor prof. will be treated as Fighters else as Barbarians +// - Gave wizards, druids and monk their own function +// MAY 29 2002: Removed the heal potion from treasure +// Moved nymph cloak +4 to treasure bracket 6 +// Added Monk Enhancement items to random treasure + +#include "prc_class_const" + +// * --------- +// * CONSTANTS +// * --------- + +// * tweaking constants + + // * SIX LEVEL RANGES + const int RANGE_1_MIN = 0; + const int RANGE_1_MAX = 5; + const int RANGE_2_MIN = 6; + const int RANGE_2_MAX = 8; + + const int RANGE_3_MIN = 9; + const int RANGE_3_MAX = 10; + + const int RANGE_4_MIN = 11; + const int RANGE_4_MAX = 13; + + const int RANGE_5_MIN = 14; + const int RANGE_5_MAX = 16; + + const int RANGE_6_MIN = 17; + const int RANGE_6_MAX = 100; + + // * NUMBER OF ITEMS APPEARING + const int NUMBER_LOW_ONE = 100; const int NUMBER_MED_ONE = 60; const int NUMBER_HIGH_ONE = 40; const int NUMBER_BOSS_ONE = 100; + const int NUMBER_LOW_TWO = 0; const int NUMBER_MED_TWO = 30; const int NUMBER_HIGH_TWO = 40; const int NUMBER_BOSS_TWO = 0; + const int NUMBER_LOW_THREE = 0; const int NUMBER_MED_THREE = 10; const int NUMBER_HIGH_THREE = 20; const int NUMBER_BOSS_THREE = 0; + + const int NUMBER_BOOK_ONE = 75; + const int NUMBER_BOOK_TWO = 20; + const int NUMBER_BOOK_THREE = 5; + + // * AMOUNT OF GOLD BY VALUE + const float LOW_MOD_GOLD = 0.5; const float MEDIUM_MOD_GOLD = 1.0; const float HIGH_MOD_GOLD = 3.0; + // * FREQUENCY OF ITEM TYPE APPEARING BY TREASURE TYPE + const int LOW_PROB_BOOK = 1; const int MEDIUM_PROB_BOOK = 1; const int HIGH_PROB_BOOK =1; + const int LOW_PROB_ANIMAL = 0; const int MEDIUM_PROB_ANIMAL = 0; const int HIGH_PROB_ANIMAL = 0; + const int LOW_PROB_JUNK = 2; const int MEDIUM_PROB_JUNK = 1; const int HIGH_PROB_JUNK = 1; + const int LOW_PROB_GOLD = 43; const int MEDIUM_PROB_GOLD = 38; const int HIGH_PROB_GOLD = 15; + const int LOW_PROB_GEM = 9; const int MEDIUM_PROB_GEM = 15; const int HIGH_PROB_GEM = 15; + const int LOW_PROB_JEWEL = 4; const int MEDIUM_PROB_JEWEL = 6; const int HIGH_PROB_JEWEL = 15; + const int LOW_PROB_ARCANE = 3; const int MEDIUM_PROB_ARCANE = 3; const int HIGH_PROB_ARCANE = 3; + const int LOW_PROB_DIVINE = 3; const int MEDIUM_PROB_DIVINE = 3; const int HIGH_PROB_DIVINE = 3; + const int LOW_PROB_AMMO = 10; const int MEDIUM_PROB_AMMO = 5; const int HIGH_PROB_AMMO = 3; + const int LOW_PROB_KIT = 5; const int MEDIUM_PROB_KIT = 5; const int HIGH_PROB_KIT = 5; + const int LOW_PROB_POTION =17; const int MEDIUM_PROB_POTION = 20; const int HIGH_PROB_POTION= 9; + const int LOW_PROB_TABLE2 = 3; const int MEDIUM_PROB_TABLE2 = 3; const int HIGH_PROB_TABLE2= 30; + + +// * readability constants + +const int TREASURE_LOW = 1; +const int TREASURE_MEDIUM = 2; +const int TREASURE_HIGH = 3; +const int TREASURE_BOSS = 4; +const int TREASURE_BOOK = 5; + + +// * JUMP_LEVEL is used in a Specific item function +// * in the case where a generic item is called for within that function +// * it will create a generic item by adding JUMP_LEVEL to the character's +// * hit die for the purposes of the treasure evaluation. +// * May 2002: Lowered JUMP_LEVEL from 3 to 2 + +const int JUMP_LEVEL = 2; + + +//* Declarations + void CreateGenericExotic(object oTarget, object oAdventurer, int nModifier = 0); + void CreateGenericMonkWeapon(object oTarget, object oAdventurer, int nModifier = 0); + void CreateSpecificMonkWeapon(object oTarget, object oAdventurer, int nModifier = 0); + void CreateGenericDruidWeapon(object oTarget, object oAdventurer, int nModifier = 0); + void CreateSpecificDruidWeapon(object oTarget, object oAdventurer, int nModifier = 0); + void CreateGenericWizardWeapon(object oTarget, object oAdventurer, int nModifier = 0); + void CreateSpecificWizardWeapon(object oTarget, object oAdventurer, int nModifier = 0); + int nDetermineClassToUse(object oCharacter); + + +// * +// * IMPLEMENTATION +// * + +// * Comment the speakstring in to debug treasure generation +void dbSpeak(string s) +{ +// SpeakString(s); +} + +//* made this function to help with debugging +void dbCreateItemOnObject(string sItemTemplate, object oTarget = OBJECT_SELF, int nStackSize = 1) +{ +/* + if (sItemTemplate == "") + { + PrintString("blank item passed into dbCreateItemOnObject. Please report as bug to Brent."); + } + dbSpeak(sItemTemplate); +*/ + + //sItemTemplate = GetStringLowerCase + + if (nStackSize == 1) + { + // * checks to see if this is a throwing item and if it is + // * it creates more + + string sRoot = GetSubString(sItemTemplate, 0, 6); + //dbSpeak("ROOT: " + sRoot); + if (GetStringLowerCase(sRoot) == "nw_wth") + { + nStackSize = Random(30) + 1; + } + } + object oItem = CreateItemOnObject(sItemTemplate, oTarget, nStackSize); +/* + if (GetIsObjectValid(oItem) == FALSE && sItemTemplate != "NW_IT_GOLD001") + { + + // * check to see if item is there in a stack, if not give warning + if (GetIsObjectValid(GetItemPossessedBy(oTarget, GetStringUpperCase(sItemTemplate))) == FALSE && + GetIsObjectValid(GetItemPossessedBy(oTarget, GetStringLowerCase(sItemTemplate))) == FALSE) + { + PrintString("**DESIGN***"); + PrintString("******" + sItemTemplate + " is an invalid item template. Please report as bug to Brent."); + PrintString("*******"); + } + } +*/ +} + + +// * +// * GET FUNCTIONS +// * + +// * Returns the object that either last opened the container or destroyed it +object GetLastOpener() +{ + if (GetIsObjectValid(GetLastOpenedBy()) == TRUE) + { + //dbSpeak("LastOpener: GetLastOpenedBy " + GetTag(GetLastOpenedBy())); + return GetLastOpenedBy(); + } + else + if (GetIsObjectValid(GetLastKiller()) == TRUE) + { + //dbSpeak("LastOpener: GetLastAttacker"); + return GetLastKiller(); + } + //dbSpeak("LastOpener: The Object is Invalid you weenie!"); + return OBJECT_INVALID; +} + +//:://///////////////////////////////////////////// +//:: GetRange +//:: Copyright (c) 2002 Bioware Corp. +//::////////////////////////////////////////////// +/* + Returns true if nHD matches the correct + level range for the indicated nCategory. + (i.e., First to Fourth level characters + are considered Range1) +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: +//::////////////////////////////////////////////// +int GetRange(int nCategory, int nHD) +{ + int nMin = 0; int nMax = 0; + switch (nCategory) + { + case 6: nMin = RANGE_6_MIN; nMax = RANGE_6_MAX; break; + case 5: nMin = RANGE_5_MIN; nMax = RANGE_5_MAX; break; + case 4: nMin = RANGE_4_MIN; nMax = RANGE_4_MAX; break; + case 3: nMin = RANGE_3_MIN; nMax = RANGE_3_MAX; break; + case 2: nMin = RANGE_2_MIN; nMax = RANGE_2_MAX; break; + case 1: nMin = RANGE_1_MIN; nMax = RANGE_1_MAX; break; + } + + //dbSpeak("nMin = " + IntToString(nMin)); + //dbSpeak("nMax = " + IntToString(nMax)); + //dbSpeak("GetRange.nHD = " + IntToString(nHD)); + if (nHD >= nMin && nHD <= nMax) + { + return TRUE; + } + + return FALSE; + +} + +//:://///////////////////////////////////////////// +//:: GetNumberOfItems +//:: Copyright (c) 2002 Bioware Corp. +//::////////////////////////////////////////////// +/* + Returns the number of items to create. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: +//::////////////////////////////////////////////// +int GetNumberOfItems(int nTreasureType) +{ + int nItems = 0; + int nRandom = 0; + + int nProbThreeItems = 0; + int nProbTwoItems = 0; + int nProbOneItems = 0; + + if (nTreasureType == TREASURE_LOW) + { + nProbThreeItems = NUMBER_LOW_THREE; + nProbTwoItems = NUMBER_LOW_TWO; + nProbOneItems = NUMBER_LOW_ONE; + } + else + if (nTreasureType == TREASURE_MEDIUM) + { + nProbThreeItems = NUMBER_MED_THREE; + nProbTwoItems = NUMBER_MED_TWO; + nProbOneItems = NUMBER_MED_ONE; + } + else + if (nTreasureType == TREASURE_HIGH) + { + nProbThreeItems = NUMBER_HIGH_THREE; + nProbTwoItems = NUMBER_HIGH_TWO; + nProbOneItems = NUMBER_HIGH_ONE; + } + else + if (nTreasureType == TREASURE_BOSS) + { + nProbThreeItems = NUMBER_BOSS_THREE; + nProbTwoItems = NUMBER_BOSS_TWO; + nProbOneItems = NUMBER_BOSS_ONE; + } + else + if (nTreasureType == TREASURE_BOOK) + { + nProbThreeItems = NUMBER_BOOK_THREE; + nProbTwoItems = NUMBER_BOOK_TWO; + nProbOneItems = NUMBER_BOOK_ONE; + } + + + nRandom = d100(); + if (nRandom <= nProbThreeItems) + { + nItems = 3; + } + else + if (nRandom <= nProbTwoItems + nProbThreeItems) + { + nItems = 2; + } + else + { + nItems = 1; + } + + // * May 13 2002: Cap number of items, in case of logic error + if (nItems > 3) + { + nItems = 3; + } + + return nItems; +} + + +// * +// * TREASURE GENERATION FUNCTIONS +// * + // * + // * Non-Scaling Treasure + // * + void CreateBook(object oTarget) + { + int nBook1 = Random(31) + 1; + string sRes = "NW_IT_BOOK01"; + + if (nBook1 < 10) + { + sRes = "NW_IT_BOOK00" + IntToString(nBook1); + } + else + { + sRes = "NW_IT_BOOK0" + IntToString(nBook1); + } + //dbSpeak("Create book"); + dbCreateItemOnObject(sRes, oTarget); + } + + void CreateAnimalPart(object oTarget) + { + + string sRes = ""; + int nResult = Random(3) + 1; + switch (nResult) + { + case 1: sRes = "NW_IT_MSMLMISC20"; break; + case 2: sRes = "NW_IT_MMIDMISC05"; break; + case 3: sRes = "NW_IT_MMIDMISC06"; break; + } + //dbSpeak("animal"); + dbCreateItemOnObject(sRes, oTarget); + } + + void CreateJunk(object oTarget) + { + string sRes = "NW_IT_TORCH001"; + int NUM_ITEMS = 6; + int nResult = Random(NUM_ITEMS) + 1; + int nKit = 0; + switch (nResult) + { + case 1: sRes = "NW_IT_MPOTION021"; break; //ale + case 2: sRes = "NW_IT_MPOTION021"; break; // ale + case 3: sRes = "NW_IT_MPOTION023"; break; // wine + case 4: sRes = "NW_IT_MPOTION021"; break; // ale + case 5: sRes = "NW_IT_MPOTION022"; break; // spirits + case 6: sRes = "NW_IT_TORCH001"; break; //torch + } + //dbSpeak("CreateJunk"); + dbCreateItemOnObject(sRes, oTarget); + } + // * + // * Scaling Treasure + // * + void CreateGold(object oTarget, object oAdventurer, int nTreasureType, int nModifier = 0) + { + int nHD = GetHitDice(oAdventurer) + nModifier; + int nAmount = 0; + + if (GetRange(1, nHD)) + { + nAmount = d10(); + } + else if (GetRange(2, nHD)) + { + nAmount = d20(); + } + else if (GetRange(3, nHD)) + { + nAmount = d20(2); + } + else if (GetRange(4, nHD)) + { + nAmount = d20(5); + } + else if (GetRange(5, nHD)) + { + nAmount = d20(8); + } + else if (GetRange(6, nHD)) + { + nAmount = d20(10); + } + float nMod = 0.0; + if (nTreasureType == TREASURE_LOW) nMod = LOW_MOD_GOLD; + else if (nTreasureType == TREASURE_MEDIUM) nMod = MEDIUM_MOD_GOLD; + else if (nTreasureType == TREASURE_HIGH) nMod = HIGH_MOD_GOLD; + + // * always at least 1gp is created + nAmount = FloatToInt(nAmount * nMod); + if (nAmount <= 0) + { + nAmount = 1; + } + //dbSpeak("gold"); + dbCreateItemOnObject("NW_IT_GOLD001", oTarget, nAmount); + } + void CreateGem(object oTarget, object oAdventurer, int nTreasureType, int nModifier = 0) + { + int nHD = GetHitDice(oAdventurer) + nModifier; + string sGem = "nw_it_gem001"; + if (GetRange(1, nHD)) + { + int nRandom = Random(9) + 1; + switch (nRandom) + { + case 1: sGem = "nw_it_gem001"; break; + case 2: sGem = "nw_it_gem007"; break; + case 3: sGem = "nw_it_gem002"; break; + case 4: case 5: sGem = "nw_it_gem004"; break; + case 6: case 7: sGem = "nw_it_gem014"; break; + case 8: sGem = "nw_it_gem003"; break; + case 9: sGem = "nw_it_gem015"; break; + } + } + else if (GetRange(2, nHD)) // 30 GP Avg; 150 gp Max + { + int nRandom = d12(); + switch (nRandom) + { + case 1: sGem = "nw_it_gem001"; break; + case 2: sGem = "nw_it_gem007"; break; + case 3: sGem = "nw_it_gem002"; break; + case 4: sGem = "nw_it_gem004"; break; + case 5: case 6: sGem = "nw_it_gem014"; break; + case 7: case 8: sGem = "nw_it_gem003"; break; + case 9: case 10: sGem = "nw_it_gem015"; break; + case 11: sGem = "nw_it_gem011"; break; + case 12: sGem = "nw_it_gem013"; break; + } + + } + else if (GetRange(3, nHD)) // 75GP Avg; 500 gp max + { + int nRandom = d2(); + switch (nRandom) + { + case 1: sGem = "nw_it_gem013"; break; + case 2: sGem = "nw_it_gem010"; break; + } + + } + else if (GetRange(4, nHD)) // 150 gp avg; 1000 gp max + { + int nRandom = d3(); + switch (nRandom) + { + case 1: sGem = "nw_it_gem013"; break; + case 2: sGem = "nw_it_gem010"; break; + case 3: sGem = "nw_it_gem008"; break; + } + } + else if (GetRange(5, nHD)) // 300 gp avg; any + { + int nRandom = d6(); + switch (nRandom) + { + case 1: sGem = "nw_it_gem013"; break; + case 2: sGem = "nw_it_gem010"; break; + case 3: case 4: sGem = "nw_it_gem008"; break; + case 5: sGem = "nw_it_gem009"; break; + case 6: sGem = "nw_it_gem009"; break; + } + } + else if (GetRange(6, nHD))// * Anything higher than level 15 500 gp avg; any + { + int nRandom = Random(8) + 1; + switch (nRandom) + { + case 1: sGem = "nw_it_gem013"; break; + case 2: sGem = "nw_it_gem010"; break; + case 3: case 4: sGem = "nw_it_gem008"; break; + case 5: sGem = "nw_it_gem009"; break; + case 6: sGem = "nw_it_gem009"; break; + case 7: sGem = "nw_it_gem006"; break; + case 8: sGem = "nw_it_gem012"; break; + } + } + //dbSpeak("Create Gem"); + dbCreateItemOnObject(sGem, oTarget, 1); + } + void CreateJewel(object oTarget, object oAdventurer, int nTreasureType, int nModifier = 0) + { + int nHD = GetHitDice(oAdventurer) + nModifier; + string sJewel = ""; + + if (GetRange(1, nHD)) // 15 gp avg; 75 gp max + { + int nRandom = d2(); + switch (nRandom) + { + case 1: sJewel = "nw_it_mring021"; break; + case 2: sJewel = "nw_it_mneck020"; break; + } + } + else if (GetRange(2, nHD)) // 30 GP Avg; 150 gp Max + { + int nRandom = d6(); + switch (nRandom) + { + case 1: sJewel = "nw_it_mring021"; break; + case 2: case 3: sJewel = "nw_it_mneck020"; break; + case 4: sJewel = "nw_it_mring022"; break; + case 5: case 6: sJewel = "nw_it_mneck023"; break; } + } + else if (GetRange(3, nHD)) // 75GP Avg; 500 gp max + { + int nRandom = d6(); + switch (nRandom) + { + case 1: sJewel = "nw_it_mring021"; break; + case 2: case 3: sJewel = "nw_it_mneck020"; break; + case 4: case 5: sJewel = "nw_it_mring022"; break; + case 6: sJewel = "nw_it_mneck021"; break; + } + } + else if (GetRange(4, nHD)) // 150 gp avg; 1000 gp max + { + int nRandom = d6(); + switch (nRandom) + { + case 1: sJewel = "nw_it_mring021"; break; + case 2: sJewel = "nw_it_mring022"; break; + case 3: case 4: case 5: sJewel = "nw_it_mneck021"; break; + case 6: sJewel = "nw_it_mring023"; break; + } + } + else if (GetRange(5, nHD)) // 300 gp avg; any + { + int nRandom = d8(); + switch (nRandom) + { + case 1: sJewel = "nw_it_mring022"; break; + case 2: case 3: sJewel = "nw_it_mneck021"; break; + case 4: case 5: case 6: sJewel = "nw_it_mring023"; break; + case 7: case 8: sJewel = "nw_it_mneck022"; break; + } + } + else if (GetRange(6, nHD)) + { + int nRandom = d6(); + switch (nRandom) + { + case 1: sJewel = "nw_it_mring022"; break; + case 2: sJewel = "nw_it_mneck021"; break; + case 3: case 4: sJewel = "nw_it_mring023"; break; + case 5: case 6: sJewel = "nw_it_mneck022"; break; + } + } + //dbSpeak("Create Jewel"); + + dbCreateItemOnObject(sJewel, oTarget, 1); + + } + // * returns the valid upper limit for any arcane spell scroll + int TrimLevel(int nScroll, int nLevel) + { int nMax = 5; + switch (nLevel) + { + case 0: nMax = 4; break; + case 1: nMax = 13; break; + case 2: nMax = 21; break; + case 3: nMax = 15; break; + case 4: nMax = 17; break; + case 5: nMax = 13; break; + case 6: nMax = 14; break; + case 7: nMax = 8; break; + case 8: nMax = 9; break; + case 9: nMax = 12; break; + } + if (nScroll > nMax) nScroll = nMax; + return nScroll; + + } + // * nModifier is to 'raise' the level of the oAdventurer + void CreateArcaneScroll(object oTarget, object oAdventurer, int nModifier = 0) + { + int nMaxSpells = 21; + int nHD = GetHitDice(oAdventurer) + nModifier; + int nScroll = 1; + int nLevel = 1; + + if (GetRange(1, nHD)) // l 1-2 + { + nLevel = d2(); + nScroll = Random(nMaxSpells) + 1; + } + else if (GetRange(2, nHD)) // l 1-4 + { + nLevel = d4(); + nScroll = Random(nMaxSpells) + 1; + } + else if (GetRange(3, nHD)) // l 2-6 + { + nLevel = d6(); + if (nLevel < 2) nLevel = 2; + + nScroll = Random(nMaxSpells) + 1; + } + else if (GetRange(4, nHD)) // l 3-8 + { + nLevel = d8(); + if (nLevel < 3) nLevel = 3; + + nScroll = Random(nMaxSpells) + 1; + } + else if (GetRange(5, nHD)) // l 4-9 + { + nLevel = d8() + 1; + if (nLevel < 4) nLevel = 4; + + nScroll = Random(nMaxSpells) + 1; + } + else if (GetRange(6, nHD)) // 5 -9 + { + nLevel = d8() + 1; + if (nLevel < 5) nLevel = 5; + + nScroll = Random(nMaxSpells) + 1; + } + + // * Trims the level of the scroll to match the max # of scrolls in each level range + nScroll = TrimLevel(nScroll, nLevel); + + string sRes = "nw_it_sparscr216"; + + if (nScroll < 10) + { + sRes = "NW_IT_SPARSCR" + IntToString(nLevel) + "0" + IntToString(nScroll); + } + else + { + sRes = "NW_IT_SPARSCR" + IntToString(nLevel) + IntToString(nScroll); + } + dbCreateItemOnObject(sRes, oTarget, 1); + } + + void CreateDivineScroll(object oTarget, object oAdventurer, int nModifier=0) + { + int nHD = GetHitDice(oAdventurer) + nModifier; + string sScroll = ""; + if (GetRange(1, nHD)) + { + int nRandom = d4(); + switch (nRandom) + { + case 1: sScroll = "nw_it_spdvscr201"; break; + case 2: sScroll = "nw_it_spdvscr202"; break; + case 3: sScroll = "nw_it_spdvscr203"; break; + case 4: sScroll = "nw_it_spdvscr204"; break; + } + } + else if (GetRange(2, nHD)) + { + int nRandom = d8(); + switch (nRandom) + { + case 1: sScroll = "nw_it_spdvscr201"; break; + case 2: sScroll = "nw_it_spdvscr202";break; + case 3: sScroll = "nw_it_spdvscr203"; break; + case 4: sScroll = "nw_it_spdvscr204"; break; + case 5: sScroll = "nw_it_spdvscr301"; break; + case 6: sScroll = "nw_it_spdvscr302"; break; + case 7: sScroll = "nw_it_spdvscr401"; break; + case 8: sScroll = "nw_it_spdvscr402"; break; + } + + } + else if (GetRange(3, nHD)) + { + int nRandom = Random(9) + 1; + switch (nRandom) + { + case 1: sScroll = "nw_it_spdvscr201"; break; + case 2: sScroll = "nw_it_spdvscr202"; break; + case 3: sScroll = "nw_it_spdvscr203"; break; + case 4: sScroll = "nw_it_spdvscr204"; break; + case 5: sScroll = "nw_it_spdvscr301"; break; + case 6: sScroll = "nw_it_spdvscr302"; break; + case 7: sScroll = "nw_it_spdvscr401"; break; + case 8: sScroll = "nw_it_spdvscr402"; break; + case 9: sScroll = "nw_it_spdvscr501"; break; + } + + } + else + { + int nRandom = Random(7) + 1; + switch (nRandom) + { + case 1: sScroll = "nw_it_spdvscr301"; break; + case 2: sScroll = "nw_it_spdvscr302"; break; + case 3: sScroll = "nw_it_spdvscr401"; break; + case 4: sScroll = "nw_it_spdvscr402"; break; + case 5: sScroll = "nw_it_spdvscr501"; break; + case 6: sScroll = "nw_it_spdvscr701"; break; + case 7: sScroll = "nw_it_spdvscr702"; break; + } + } + //dbSpeak("Divine Scroll"); + + dbCreateItemOnObject(sScroll, oTarget, 1); + + } + void CreateAmmo(object oTarget, object oAdventurer, int nModifier=0) + { + int nHD = GetHitDice(oAdventurer) + nModifier; + string sAmmo = ""; + + if (GetRange(1, nHD)) // * 200 gp max + { + int nRandom = d3(); + switch (nRandom) + { + case 1: sAmmo = "nw_wamar001"; break; + case 2: sAmmo = "nw_wambo001"; break; + case 3: sAmmo = "nw_wambu001"; break; + } + } + else if (GetRange(2, nHD)) // * 800 gp max + { + int nRandom = d6(); + switch (nRandom) + { + case 1: sAmmo = "nw_wamar001"; break; + case 2: sAmmo = "nw_wambo001"; break; + case 3: sAmmo = "nw_wambu001"; break; + case 4: sAmmo = "nw_wammar001"; break; + case 5: sAmmo = "nw_wammbo001"; break; + case 6: sAmmo = "nw_wammbo002"; break; + } + } + else if (GetRange(3, nHD)) // * - 2500 gp + { + int nRandom = d20(); + switch (nRandom) + { + case 1: sAmmo = "nw_wamar001"; break; + case 2: sAmmo = "nw_wambo001"; break; + case 3: sAmmo = "nw_wambu001"; break; + case 4: sAmmo = "nw_wammar001"; break; + case 5: sAmmo = "nw_wammbo001"; break; + case 6: sAmmo = "nw_wammbo002"; break; + case 7: sAmmo = "nw_wammbo003"; break; + case 8: sAmmo = "nw_wammbu002"; break; + case 9: sAmmo = "nw_wammar002"; break; + case 10: sAmmo = "nw_wammar001"; break; + case 11: sAmmo = "nw_wammar003"; break; + case 12: sAmmo = "nw_wammar004"; break; + case 13: sAmmo = "nw_wammar005"; break; + case 14: sAmmo = "nw_wammar006"; break; + case 15: sAmmo = "nw_wammbo004"; break; + case 16: sAmmo = "nw_wammbo005"; break; + case 17: sAmmo = "nw_wammbu004"; break; + case 18: sAmmo = "nw_wammbu005"; break; + case 19: sAmmo = "nw_wammbu006"; break; + case 20: sAmmo = "nw_wammbu007"; break; + } + } + else + { + int nRandom = d20(); + switch (nRandom) + { + case 1: sAmmo = "nw_wamar001"; break; + case 2: sAmmo = "nw_wammbu001"; break; + case 3: sAmmo = "nw_wammbu003"; break; + case 4: sAmmo = "nw_wammar001"; break; + case 5: sAmmo = "nw_wammbo001"; break; + case 6: sAmmo = "nw_wammbo002"; break; + case 7: sAmmo = "nw_wammbo003"; break; + case 8: sAmmo = "nw_wammbu002"; break; + case 9: sAmmo = "nw_wammar002"; break; + case 10: sAmmo = "nw_wammar001"; break; + case 11: sAmmo = "nw_wammar003"; break; + case 12: sAmmo = "nw_wammar004"; break; + case 13: sAmmo = "nw_wammar005"; break; + case 14: sAmmo = "nw_wammar006"; break; + case 15: sAmmo = "nw_wammbo004"; break; + case 16: sAmmo = "nw_wammbo005"; break; + case 17: sAmmo = "nw_wammbu004"; break; + case 18: sAmmo = "nw_wammbu005"; break; + case 19: sAmmo = "nw_wammbu006"; break; + case 20: sAmmo = "nw_wammbu007"; break; + } + } + //dbSpeak("ammo"); + dbCreateItemOnObject(sAmmo, oTarget, Random(30) + 1); // create up to 30 of the specified ammo type + } + + void CreateTrapKit(object oTarget, object oAdventurer, int nModifier = 0) + { + int nHD = GetHitDice(oAdventurer) + nModifier; + string sKit = ""; + if (GetRange(1, nHD)) // 200 + { + int nRandom = d3(); + switch (nRandom) + { + case 1: sKit = "nw_it_trap001"; break; + case 2: sKit = "nw_it_trap029"; break; + case 3: sKit = "nw_it_trap033"; break; + } + } + else if (GetRange(2, nHD)) // 800 + { + int nRandom = d12(); + switch (nRandom) + { + case 1: sKit = "nw_it_trap001"; break; + case 2: sKit = "nw_it_trap029"; break; + case 3: sKit = "nw_it_trap033"; break; + case 4: sKit = "nw_it_trap002"; break; + case 5: sKit = "nw_it_trap030"; break; + case 6: sKit = "nw_it_trap037"; break; + case 7: sKit = "nw_it_trap034"; break; + case 8: sKit = "nw_it_trap005"; break; + case 9: sKit = "nw_it_trap038"; break; + case 10: sKit = "nw_it_trap041"; break; + case 11: sKit = "nw_it_trap003"; break; + case 12: sKit = "nw_it_trap031"; break; + } + + } + else if (GetRange(3, nHD)) // 200 - 2500 + { + int nRandom = Random(17) + 1; + switch (nRandom) + { + case 1: sKit = "nw_it_trap002"; break; + case 2: sKit = "nw_it_trap030"; break; + case 3: sKit = "nw_it_trap037"; break; + case 4: sKit = "nw_it_trap034"; break; + case 5: sKit = "nw_it_trap005"; break; + case 6: sKit = "nw_it_trap038"; break; + case 7: sKit = "nw_it_trap041"; break; + case 8: sKit = "nw_it_trap003"; break; + case 9: sKit = "nw_it_trap031"; break; + case 10: sKit = "nw_it_trap035"; break; + case 11: sKit = "nw_it_trap006"; break; + case 12: sKit = "nw_it_trap042"; break; + case 13: sKit = "nw_it_trap004"; break; + case 14: sKit = "nw_it_trap032"; break; + case 15: sKit = "nw_it_trap039"; break; + case 16: sKit = "nw_it_trap009"; break; + case 17: sKit = "nw_it_trap036"; break; + } + + } + else if (GetRange(4, nHD)) // 800 - 10000 + { + int nRandom = Random(19) + 1; + switch (nRandom) + { + case 1: sKit = "nw_it_trap035"; break; + case 2: sKit = "nw_it_trap006"; break; + case 3: sKit = "nw_it_trap042"; break; + case 4: sKit = "nw_it_trap004"; break; + case 5: sKit = "nw_it_trap032"; break; + case 6: sKit = "nw_it_trap039"; break; + case 7: sKit = "nw_it_trap009"; break; + case 8: sKit = "nw_it_trap036"; break; + case 9: sKit = "nw_it_trap013"; break; + case 10: sKit = "nw_it_trap040"; break; + case 11: sKit = "nw_it_trap007"; break; + case 12: sKit = "nw_it_trap043"; break; + case 13: sKit = "nw_it_trap010"; break; + case 14: sKit = "nw_it_trap017"; break; + case 15: sKit = "nw_it_trap021"; break; + case 16: sKit = "nw_it_trap014"; break; + case 17: sKit = "nw_it_trap025"; break; + case 18: sKit = "nw_it_trap008"; break; + case 19: sKit = "nw_it_trap044"; break; + } + + } + else if (GetRange(5, nHD)) // 2000 -16500 + { + int nRandom = Random(18) + 1; + switch (nRandom) + { + case 1: sKit = "nw_it_trap039"; break; + case 2: sKit = "nw_it_trap009"; break; + case 3: sKit = "nw_it_trap036"; break; + case 4: sKit = "nw_it_trap013"; break; + case 5: sKit = "nw_it_trap040"; break; + case 6: sKit = "nw_it_trap007"; break; + case 7: sKit = "nw_it_trap043"; break; + case 8: sKit = "nw_it_trap010"; break; + case 9: sKit = "nw_it_trap017"; break; + case 10: sKit = "nw_it_trap021"; break; + case 11: sKit = "nw_it_trap014"; break; + case 12: sKit = "nw_it_trap025"; break; + case 13: sKit = "nw_it_trap008"; break; + case 14: sKit = "nw_it_trap044"; break; + case 15: sKit = "nw_it_trap018"; break; + case 16: sKit = "nw_it_trap011"; break; + case 17: sKit = "nw_it_trap022"; break; + case 18: sKit = "nw_it_trap026"; break; + } + + } + else if (GetRange(6, nHD)) // 2000 - ? + { + int nRandom = Random(27) + 1; + switch (nRandom) + { + case 1: sKit = "nw_it_trap039"; break; + case 2: sKit = "nw_it_trap009"; break; + case 3: sKit = "nw_it_trap036"; break; + case 4: sKit = "nw_it_trap013"; break; + case 5: sKit = "nw_it_trap040"; break; + case 6: sKit = "nw_it_trap007"; break; + case 7: sKit = "nw_it_trap043"; break; + case 8: sKit = "nw_it_trap010"; break; + case 9: sKit = "nw_it_trap017"; break; + case 10: sKit = "nw_it_trap021"; break; + case 11: sKit = "nw_it_trap014"; break; + case 12: sKit = "nw_it_trap025"; break; + case 13: sKit = "nw_it_trap008"; break; + case 14: sKit = "nw_it_trap044"; break; + case 15: sKit = "nw_it_trap018"; break; + case 16: sKit = "nw_it_trap011"; break; + case 17: sKit = "nw_it_trap022"; break; + case 18: sKit = "nw_it_trap026"; break; + case 19: sKit = "nw_it_trap015"; break; + case 20: sKit = "nw_it_trap012"; break; + case 21: sKit = "nw_it_trap019"; break; + case 22: sKit = "nw_it_trap023"; break; + case 23: sKit = "nw_it_trap016"; break; + case 24: sKit = "nw_it_trap027"; break; + case 25: sKit = "nw_it_trap020"; break; + case 26: sKit = "nw_it_trap024"; break; + case 27: sKit = "nw_it_trap028"; break; + } + + } + //dbSpeak("Create Trapkit"); + dbCreateItemOnObject(sKit, oTarget, 1); + + } + void CreateHealingKit(object oTarget, object oAdventurer, int nModifier = 0) + { + int nHD = GetHitDice(oAdventurer) + nModifier; + string sKit = ""; + if (GetRange(1, nHD)) // 200 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sKit = "nw_it_medkit001"; break; + } + } + else if (GetRange(2, nHD)) // 800 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sKit = "nw_it_medkit001"; break; + case 2: sKit = "nw_it_medkit002"; break; + } + + } + else if (GetRange(3, nHD)) // 200 - 2500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sKit = "nw_it_medkit002"; break; + case 2: sKit = "nw_it_medkit003"; break; + } + + } + else if (GetRange(4, nHD)) // 800 - 10000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sKit = "nw_it_medkit003";break; + case 2: sKit = "nw_it_medkit004"; break; + } + + } + else if (GetRange(5, nHD)) // 2000 -16500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sKit = "nw_it_medkit003"; break; + case 2: sKit = "nw_it_medkit004";break; + } + + } + else if (GetRange(6, nHD)) // 2000 - ? + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sKit = "nw_it_medkit003"; break; + case 2: sKit = "nw_it_medkit004";break; + } + + } + //dbSpeak("Create Healing Kit"); + + dbCreateItemOnObject(sKit, oTarget, 1); + + } + void CreateLockPick(object oTarget, object oAdventurer, int nModifier = 0) + { + int nHD = GetHitDice(oAdventurer) + nModifier; + string sKit = ""; + if (GetRange(1, nHD)) // 200 + { + int nRandom = d8(); + switch (nRandom) + { + case 1: sKit = "nw_it_picks001"; break; + case 2: sKit = "nw_it_picks002"; break; + case 3: sKit = "nw_it_picks001"; break; + case 4: sKit = "nw_it_picks001"; break; + case 5: sKit = "nw_it_picks001"; break; + case 6: sKit = "nw_it_picks001"; break; + case 7: sKit = "nw_it_picks001"; break; + case 8: sKit = "nw_it_picks001"; break; + } + } + else if (GetRange(2, nHD)) // 800 + { + int nRandom = d6(); + switch (nRandom) + { + case 1: sKit = "nw_it_picks001"; break; + case 2: sKit = "nw_it_picks002"; break; + case 3: sKit = "nw_it_picks003"; break; + case 4: sKit = "nw_it_picks002"; break; + case 5: sKit = "nw_it_picks002"; break; + case 6: sKit = "nw_it_picks002"; break; + } + + } + else if (GetRange(3, nHD)) // 200 - 2500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sKit = "nw_it_picks003"; break; + case 2: sKit = "nw_it_picks004"; break; + } + + } + else if (GetRange(4, nHD)) // 800 - 10000 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sKit = "nw_it_picks004"; break; + } + + } + else if (GetRange(5, nHD)) // 2000 -16500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sKit = "nw_it_picks004"; break; + } + + } + else if (GetRange(6, nHD)) // 2000 - ? + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sKit = "nw_it_picks004"; break; + } + + } + //dbSpeak("Create Lockpick"); + + dbCreateItemOnObject(sKit, oTarget, 1); + + } + void CreateKit(object oTarget, object oAdventurer, int nModifier = 0) + { + // * April 23 2002: Major restructuring of this function + // * to allow me to + + switch (Random(8) + 1) + { + case 1: CreateTrapKit(oTarget, oAdventurer, nModifier); break; + case 2: case 3: case 4: case 5: CreateHealingKit(oTarget, oAdventurer, nModifier); break; + case 6: case 7: case 8: CreateLockPick(oTarget, oAdventurer, nModifier); break; + } + } + + void CreatePotion(object oTarget, object oAdventurer, int nModifier = 0) + { + string sPotion = ""; + int nHD = GetHitDice(oAdventurer) + nModifier; + + if (GetRange(1, nHD)) + { + int nRandom = d10(); + switch (nRandom) + { + case 1: case 2: case 3: case 4: sPotion = "nw_it_mpotion001"; break; + case 5: case 6: case 7: sPotion = "nw_it_mpotion020"; break; + case 8: sPotion = "nw_it_mpotion002"; break; + case 9: sPotion = "nw_it_mpotion009"; break; + case 10: sPotion = "nw_it_mpotion005"; break; + } + + } + else if (GetRange(2, nHD)) + { + int nRandom = Random(29) + 1; + switch (nRandom) + { + case 1: case 2: case 3: sPotion = "nw_it_mpotion001"; break; + case 4: case 5: case 6: case 7: case 8: sPotion = "nw_it_mpotion020"; break; + case 9: case 10: case 11: case 12: sPotion = "nw_it_mpotion002"; break; + case 13: case 14: sPotion = "nw_it_mpotion003"; break; + case 15: sPotion = "nw_it_mpotion009"; break; + case 16: sPotion = "nw_it_mpotion005"; break; + case 17: sPotion = "nw_it_mpotion007"; break; + case 18: sPotion = "nw_it_mpotion008"; break; + case 19: sPotion = "nw_it_mpotion010"; break; + case 20: sPotion = "nw_it_mpotion011"; break; + case 21: sPotion = "nw_it_mpotion013"; break; + case 22: sPotion = "nw_it_mpotion014"; break; + case 23: sPotion = "nw_it_mpotion015"; break; + case 24: sPotion = "nw_it_mpotion016"; break; + case 25: sPotion = "nw_it_mpotion017"; break; + case 26: sPotion = "nw_it_mpotion018"; break; + case 27: sPotion = "nw_it_mpotion019"; break; + case 28: sPotion = "nw_it_mpotion004"; break; + case 29: sPotion = "nw_it_mpotion006"; break; + } + } + else if (GetRange(3, nHD)) + { + int nRandom = Random(29) + 1; + switch (nRandom) + { + case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: + case 9: case 10: case 11: case 12: + case 13: case 14: sPotion = "nw_it_mpotion003"; break; + case 15: sPotion = "nw_it_mpotion009"; break; + case 16: sPotion = "nw_it_mpotion005"; break; + case 17: sPotion = "nw_it_mpotion007"; break; + case 18: sPotion = "nw_it_mpotion008"; break; + case 19: sPotion = "nw_it_mpotion010"; break; + case 20: sPotion = "nw_it_mpotion011"; break; + case 21: sPotion = "nw_it_mpotion013"; break; + case 22: sPotion = "nw_it_mpotion014"; break; + case 23: sPotion = "nw_it_mpotion015"; break; + case 24: sPotion = "nw_it_mpotion016"; break; + case 25: sPotion = "nw_it_mpotion017"; break; + case 26: sPotion = "nw_it_mpotion018"; break; + case 27: sPotion = "nw_it_mpotion019"; break; + case 28: sPotion = "nw_it_mpotion004"; break; + case 29: sPotion = "nw_it_mpotion006"; break; + } + } + else if (GetRange(4, nHD)) + { + int nRandom = Random(29) + 1; + switch (nRandom) + { + case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: + case 9: case 10: case 11: case 12: sPotion = "nw_it_mpotion003"; break; + case 13: case 14: sPotion = "nw_it_mpotion003"; break; + case 15: sPotion = "nw_it_mpotion009"; break; + case 16: sPotion = "nw_it_mpotion005"; break; + case 17: sPotion = "nw_it_mpotion007"; break; + case 18: sPotion = "nw_it_mpotion008"; break; + case 19: sPotion = "nw_it_mpotion010"; break; + case 20: sPotion = "nw_it_mpotion011"; break; + case 21: sPotion = "nw_it_mpotion013"; break; + case 22: sPotion = "nw_it_mpotion014"; break; + case 23: sPotion = "nw_it_mpotion015"; break; + case 24: sPotion = "nw_it_mpotion016"; break; + case 25: sPotion = "nw_it_mpotion017"; break; + case 26: sPotion = "nw_it_mpotion018"; break; + case 27: sPotion = "nw_it_mpotion019"; break; + case 28: sPotion = "nw_it_mpotion004"; break; + case 29: sPotion = "nw_it_mpotion006"; break; + } + } + else // keep 5 and 6 the same + { + int nRandom = Random(29) + 1; + switch (nRandom) + { + case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: + case 9: sPotion = "nw_it_mpotion003" ; + case 10: case 11: case 12: case 13: case 14: sPotion = "nw_it_mpotion003"; break; + case 15: sPotion = "nw_it_mpotion009"; break; + case 16: sPotion = "nw_it_mpotion005"; break; + case 17: sPotion = "nw_it_mpotion007"; break; + case 18: sPotion = "nw_it_mpotion008"; break; + case 19: sPotion = "nw_it_mpotion010"; break; + case 20: sPotion = "nw_it_mpotion011"; break; + case 21: sPotion = "nw_it_mpotion013"; break; + case 22: sPotion = "nw_it_mpotion014"; break; + case 23: sPotion = "nw_it_mpotion015"; break; + case 24: sPotion = "nw_it_mpotion016"; break; + case 25: sPotion = "nw_it_mpotion017"; break; + case 26: sPotion = "nw_it_mpotion018"; break; + case 27: sPotion = "nw_it_mpotion019"; break; + case 28: sPotion = "nw_it_mpotion004"; break; + case 29: sPotion = "nw_it_mpotion006"; break; + } + } + //dbSpeak("Create Potion"); + dbCreateItemOnObject(sPotion, oTarget, 1); + } + //:://///////////////////////////////////////////// + //:: CreateTable2GenericItem + //:: Copyright (c) 2002 Bioware Corp. + //::////////////////////////////////////////////// + /* + Creates an item based upon the class of + oAdventurer + */ + //::////////////////////////////////////////////// + //:: Created By: Brent + //:: Created On: + //::////////////////////////////////////////////// + void CreateGenericMiscItem(object oTarget, object oAdventurer, int nModifier=0) + { + int nHD = GetHitDice(oAdventurer) + nModifier; + string sItem = ""; + if (GetRange(1, nHD)) // * 200 + { + int nRandom = Random(9) + 1; + switch (nRandom) + { + case 1: sItem = "nw_it_mglove004"; break; + case 2: sItem = "nw_it_mglove004"; break; + case 3: sItem = "nw_it_mglove005"; break; + case 4: sItem = "nw_it_mglove006"; break; + case 5: sItem = "nw_it_mglove007"; break; + case 6: sItem = "nw_it_mglove008"; break; + case 7: sItem = "nw_it_mglove009"; break; + case 8: sItem = "nw_mcloth006"; break; + case 9: sItem = "nw_it_mglove012"; break; + } + } + else if (GetRange(2, nHD)) // * 800 + { + int nRandom = Random(25) + 1; + switch (nRandom) + { + case 1: sItem = "nw_mcloth006"; break; + case 2: sItem = "nw_it_mring009"; break; + case 3: sItem = "nw_it_mring009"; break; + case 4: sItem = "nw_it_mring010"; break; + case 5: sItem = "nw_it_mring011"; break; + case 6: sItem = "nw_it_mboots010"; break; + case 7: sItem = "nw_it_mneck024"; break; + case 8: sItem = "nw_mcloth007"; break; + case 9: sItem = "nw_it_mring024"; break; + case 10: sItem = "nw_it_mring012"; break; + case 11: sItem = "nw_mcloth008"; break; + case 12: sItem = "nw_it_mglove010"; break; + case 13: sItem = "nw_it_mglove011"; break; + case 14: sItem = "nw_it_mglove013"; break; + case 15: sItem = "nw_it_mglove014"; break; + case 16: sItem = "nw_it_mglove015"; break; + case 17: sItem = "nw_maarcl097"; break; + case 18: sItem = "nw_maarcl097"; break; + case 19: sItem = "nw_maarcl099"; break; + case 20: sItem = "nw_it_mneck032"; break; + case 21: sItem = "nw_mcloth010"; break; + case 22: sItem = "nw_it_mbracer002"; break; + case 23: sItem = "nw_it_mneck001"; break; + case 24: sItem = "nw_maarcl055"; break; + case 25: sItem = "nw_mcloth009"; break; + } + + } + else if (GetRange(3, nHD)) // * 200 - 2500 + { + int nRandom = Random(44) + 1; + switch (nRandom) + { + case 1: sItem = "nw_it_mring009"; break; + case 2: sItem = "nw_it_mring009"; break; + case 3: sItem = "nw_it_mring010"; break; + case 4: sItem = "nw_it_mring011"; break; + case 5: sItem = "nw_it_mboots010"; break; + case 6: sItem = "nw_it_mneck024"; break; + case 7: sItem = "nw_mcloth007"; break; + case 8: sItem = "nw_it_mring024"; break; + case 9: sItem = "nw_it_mring012"; break; + case 10: sItem = "nw_mcloth008"; break; + case 11: sItem = "nw_it_mglove010"; break; + case 12: sItem = "nw_it_mglove011"; break; + case 13: sItem = "nw_it_mglove013"; break; + case 14: sItem = "nw_it_mglove014"; break; + case 15: sItem = "nw_it_mglove015"; break; + case 16: sItem = "nw_it_contain003"; break; + case 17: sItem = "nw_maarcl097"; break; + case 18: sItem = "nw_maarcl099"; break; + case 19: sItem = "nw_it_mneck032"; break; + case 20: sItem = "nw_mcloth010"; break; + case 21: sItem = "nw_it_mbracer002"; break; + case 22: sItem = "nw_it_mneck001"; break; + case 23: sItem = "nw_maarcl055"; break; + case 24: sItem = "nw_mcloth009"; break; + case 25: sItem = "nw_it_mring001"; break; + case 26: sItem = "nw_it_mboots001"; break; + case 27: sItem = "nw_it_mbracer001"; break; + case 28: sItem = "nw_it_mneck007"; break; + case 29: sItem = "nw_maarcl096"; break; + case 30: sItem = "nw_it_mglove003"; break; + case 31: sItem = "nw_it_contain004"; break; + case 32: sItem = "nw_it_mneck031"; break; + case 33: sItem = "nw_it_mring006"; break; + case 34: sItem = "nw_it_mneck006"; break; + case 35: sItem = "nw_it_mneck029"; break; + case 36: sItem = "nw_it_mring013"; break; + case 37: sItem = "nw_it_mboots011"; break; + case 38: sItem = "nw_it_mneck025"; break; + case 39: sItem = "nw_it_mbelt009"; break; + case 40: sItem = "nw_it_mbelt010"; break; + case 41: sItem = "nw_it_mbelt011"; break; + case 42: sItem = "nw_it_mring025"; break; + case 43: sItem = "nw_it_mring025"; break; + case 44: sItem = "nw_maarcl031"; break; + + } + + } + else if (GetRange(4, nHD)) // * 800 - 10000 + { + int nRandom = Random(48) + 1; + switch (nRandom) + { + case 1: sItem = "nw_it_mring001"; break; + case 2: sItem = "nw_it_mboots001"; break; + case 3: sItem = "nw_it_mbracer001"; break; + case 4: sItem = "nw_it_mneck007"; break; + case 5: sItem = "nw_maarcl096"; break; + case 6: sItem = "nw_it_mglove003"; break; + case 7: sItem = "nw_it_mneck031"; break; + case 8: sItem = "nw_it_mneck031"; break; + case 9: sItem = "nw_it_mring006"; break; + case 10: sItem = "nw_it_mneck006"; break; + case 11: sItem = "nw_it_mneck029"; break; + case 12: sItem = "nw_it_mring013"; break; + case 13: sItem = "nw_it_mboots011"; break; + case 14: sItem = "nw_it_mneck025"; break; + case 15: sItem = "nw_it_mbelt009"; break; + case 16: sItem = "nw_it_mbelt010"; break; + case 17: sItem = "nw_it_mbelt011"; break; + case 18: sItem = "nw_it_mring025"; break; + case 19: sItem = "nw_it_mring025"; break; + case 20: sItem = "nw_it_mbracer007"; break; + case 21: sItem = "nw_it_mbracer007"; break; + case 22: sItem = "nw_it_mneck012"; break; + case 23: sItem = "nw_maarcl088"; break; + case 24: sItem = "nw_it_mboots012"; break; + case 25: sItem = "nw_it_mneck026"; break; + case 26: sItem = "nw_it_mboots006"; break; + case 27: sItem = "nw_it_mbracer003"; break; + case 28: sItem = "nw_it_mneck008"; break; + case 29: sItem = "nw_it_mring008"; break; + case 30: sItem = "nw_maarcl056"; break; + case 31: sItem = "nw_maarcl092"; break; + case 32: sItem = "nw_it_mring014"; break; + case 33: sItem = "nw_it_mneck016"; break; + case 34: sItem = "nw_it_mboots013"; break; + case 35: sItem = "nw_it_mneck027"; break; + case 36: sItem = "nw_it_mbracer008"; break; + case 37: sItem = "nw_it_mneck013"; break; + case 38: sItem = "nw_maarcl089"; break; + case 39: sItem = "nw_it_mbelt012"; break; + case 40: sItem = "nw_it_mbelt013"; break; + case 41: sItem = "nw_it_mbelt014"; break; + case 42: sItem = "nw_it_mring027"; break; + case 43: sItem = "nw_it_mboots007"; break; + case 44: sItem = "nw_it_mbracer004"; break; + case 45: sItem = "nw_it_mneck009"; break; + case 46: sItem = "nw_it_mring018"; break; + case 47: sItem = "nw_maarcl093"; break; + case 48: sItem = "nw_it_mboots002"; break; + + } + } + else if (GetRange(5, nHD)) // * 2500 - 16500 + { + int nRandom = Random(42) + 1; + switch (nRandom) + { + case 1: sItem = "nw_it_mbracer007"; break; + case 2: sItem = "nw_it_mbracer007"; break; + case 3: sItem = "nw_it_mneck012"; break; + case 4: sItem = "nw_maarcl088"; break; + case 5: sItem = "nw_it_mboots012"; break; + case 6: sItem = "nw_it_mneck026"; break; + case 7: sItem = "nw_it_mboots006"; break; + case 8: sItem = "nw_it_mbracer003"; break; + case 9: sItem = "nw_it_mneck008"; break; + case 10: sItem = "nw_it_mring008"; break; + case 11: sItem = "nw_maarcl056"; break; + case 12: sItem = "nw_maarcl092"; break; + case 13: sItem = "nw_it_mring014"; break; + case 14: sItem = "nw_it_mneck016"; break; + case 15: sItem = "nw_it_mboots013"; break; + case 16: sItem = "nw_it_mneck027"; break; + case 17: sItem = "nw_it_mbracer008"; break; + case 18: sItem = "nw_it_mneck013"; break; + case 19: sItem = "nw_maarcl089"; break; + case 20: sItem = "nw_it_mbelt012"; break; + case 21: sItem = "nw_it_mbelt013"; break; + case 22: sItem = "nw_it_mbelt014"; break; + case 23: sItem = "nw_it_mring027"; break; + case 24: sItem = "nw_it_mboots007"; break; + case 25: sItem = "nw_it_mbracer004"; break; + case 26: sItem = "nw_it_mneck009"; break; + case 27: sItem = "nw_it_mring018"; break; + case 28: sItem = "nw_maarcl093"; break; + case 29: sItem = "nw_it_mboots002"; break; + case 30: sItem = "nw_it_mboots014"; break; + case 31: sItem = "nw_it_mneck028"; break; + case 32: sItem = "nw_it_mring015"; break; + case 33: sItem = "nw_it_mbracer009"; break; + case 34: sItem = "nw_it_mneck014"; break; + case 35: sItem = "nw_maarcl090"; break; + case 36: sItem = "nw_it_mring028"; break; + case 37: sItem = "nw_it_mneck017"; break; + case 38: sItem = "nw_it_mboots008"; break; + case 39: sItem = "nw_it_mbracer005"; break; + case 40: sItem = "nw_it_mneck010"; break; + case 41: sItem = "nw_it_mmidmisc02"; break; + case 42: sItem = "nw_it_mring019"; break; + } + } + else if (GetRange(6, nHD)) // * 8000 - 25000 + { + int nRandom = Random(30) + 1; + switch (nRandom) + { + case 1: sItem = "nw_it_mring027"; break; + case 2: sItem = "nw_it_mboots007"; break; + case 3: sItem = "nw_it_mbracer004"; break; + case 4: sItem = "nw_it_mneck009"; break; + case 5: sItem = "nw_it_mring018"; break; + case 6: sItem = "nw_maarcl093"; break; + case 7: sItem = "nw_it_mboots002"; break; + case 8: sItem = "nw_it_mboots014"; break; + case 9: sItem = "nw_it_mneck028"; break; + case 10: sItem = "nw_it_mring015"; break; + case 11: sItem = "nw_it_mbracer009"; break; + case 12: sItem = "nw_it_mneck014"; break; + case 13: sItem = "nw_maarcl090"; break; + case 14: sItem = "nw_it_mring028"; break; + case 15: sItem = "nw_it_mneck017"; break; + case 16: sItem = "nw_it_mboots008"; break; + case 17: sItem = "nw_it_mbracer005"; break; + case 18: sItem = "nw_it_mneck010"; break; + case 19: sItem = "nw_it_mmidmisc02"; break; + case 20: sItem = "nw_maarcl094"; break; + case 21: sItem = "nw_it_mring019"; break; + case 22: sItem = "nw_it_mring016"; break; + case 23: sItem = "nw_it_mbracer010"; break; + case 24: sItem = "nw_it_mneck015"; break; + case 25: sItem = "nw_maarcl091"; break; + case 26: sItem = "nw_it_mboots009"; break; + case 27: sItem = "nw_it_mbracer006"; break; + case 28: sItem = "nw_it_mneck011"; break; + case 29: sItem = "nw_maarcl095"; break; + case 30: sItem = "nw_it_mneck018"; break; + } + } + //dbSpeak("Create Misc"); + + dbCreateItemOnObject(sItem, oTarget, 1); + } + + // * this function just returns an item that is more appropriate + // * for this class. Only wizards, sorcerers, clerics, monks, rogues and bards get this + void CreateGenericClassItem(object oTarget, object oAdventurer, int nSpecific =0) + { + + + if (GetLevelByClass(CLASS_TYPE_DRUID, oAdventurer)>= 1) + { + if (nSpecific == 0) + { + CreateGenericDruidWeapon(oTarget, oAdventurer); + } + else + { + CreateSpecificDruidWeapon(oTarget, oAdventurer); + } + } + else + if (GetLevelByClass(CLASS_TYPE_WIZARD, oAdventurer)>= 1 || GetLevelByClass(CLASS_TYPE_SORCERER, oAdventurer) >= 1) + { + // * 30% chance of getting a magic scroll else get a weapon suited for a wizard + if (Random(100) + 1 > 70) + { + // * grab an arcane scroll as if the wizard had +4 levels + CreateArcaneScroll(oTarget, oAdventurer, 4); + } + else + if (nSpecific == 0) + { + CreateGenericWizardWeapon(oTarget, oAdventurer); + } + else + { + CreateSpecificWizardWeapon(oTarget, oAdventurer); + } + + + } + else + if (GetLevelByClass(CLASS_TYPE_CLERIC, oAdventurer)>= 1) + { + int nRandom = Random(4) + 1; + string sItem = "nw_it_medkit001"; + switch (nRandom) + { + case 1: sItem = "nw_it_medkit001"; break; + case 2: sItem = "nw_it_medkit002"; break; + case 3: sItem = "nw_it_medkit003"; break; + case 4: sItem = "nw_it_medkit004"; break; + } + dbCreateItemOnObject(sItem, oTarget, 1); + } + else + if (GetLevelByClass(CLASS_TYPE_MONK, oAdventurer)>= 1) + { + //dbSpeak("in monk function"); + if (nSpecific == 0) + { + CreateGenericMonkWeapon(oTarget, oAdventurer); + } + else + { + CreateSpecificMonkWeapon(oTarget, oAdventurer); + } + } + else + if (GetLevelByClass(CLASS_TYPE_ROGUE, oAdventurer)>= 1) + { + // * give a misc item as if a couple levels higher + CreateGenericMiscItem(oTarget, oAdventurer, 2); + } + else + if (GetLevelByClass(CLASS_TYPE_BARD, oAdventurer)>= 1) + { + // * give a misc item as if a couple levels higher + CreateGenericMiscItem(oTarget, oAdventurer, 2); + } + + } + void CreateGenericRodStaffWand(object oTarget, object oAdventurer, int nModifier = 0) + { + string sItem = ""; + int nHD = GetHitDice(oAdventurer) + nModifier; + + if (GetRange(1, nHD)) // * 200 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wmgwn013"; break; + case 2: sItem = "nw_wmgwn006"; break; + case 3: sItem = "nw_it_gem002"; break; // gem for variety + } + } + else if (GetRange(2, nHD)) // * 800 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wmgwn013"; break; + case 2: sItem = "nw_wmgwn006"; break; + case 3: sItem = "nw_it_gem002"; break;// gem for variety + } + } + else if (GetRange(3, nHD)) // * 200 - 2500 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wmgwn006"; break; + case 2: sItem = "nw_wmgwn004"; break; + case 3: sItem = "nw_wmgrd002"; break; + case 4: sItem = "nw_wmgwn012"; break; + } + } + else if (GetRange(4, nHD)) // * 800 - 10000 + { + int nRandom = Random(11) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wmgwn004"; break; + case 2: sItem = "nw_wmgwn002"; break; + case 3: sItem = "nw_wmgwn007"; break; + case 4: sItem = "nw_wmgwn003"; break; + case 5: sItem = "nw_wmgwn010"; break; + case 6: sItem = "nw_wmgwn011"; break; + case 7: sItem = "nw_wmgwn005"; break; + case 8: sItem = "nw_wmgwn008"; break; + case 9: sItem = "nw_wmgwn009"; break; + case 10: sItem = "nw_wmgrd002"; break; + case 11: sItem = "nw_wmgwn012"; break; + } + + } + else // * 2500 - 16500 + { + int nRandom = d8(); + switch (nRandom) + { + case 1: sItem = "nw_wmgwn002"; break; + case 2: sItem = "nw_wmgwn007"; break; + case 3: sItem = "nw_wmgwn003"; break; + case 4: sItem = "nw_wmgwn010"; break; + case 5: sItem = "nw_wmgwn011"; break; + case 6: sItem = "nw_wmgwn005"; break; + case 7: sItem = "nw_wmgwn008"; break; + case 8: sItem = "nw_wmgwn009"; break; + } + + } + //dbSpeak("Generic Rod staff wand"); + + dbCreateItemOnObject(sItem, oTarget, 1); + } + + void CreateGenericMonkWeapon(object oTarget, object oAdventurer, int nModifier = 0) + { + string sItem = ""; + int nHD = GetHitDice(oAdventurer) + nModifier; + + if (GetRange(1, nHD)) // * 200 + { + int nRandom = Random(10) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthsh001"; break; + case 2: sItem = "nw_wblcl001"; break; + case 3: sItem = "nw_wdbqs001"; break; + case 4: sItem = "nw_wbwsl001"; break; + case 5: sItem = "nw_wswdg001"; break; + case 6: sItem = "nw_wspka001"; break; + case 7: sItem = "nw_wbwxh001"; break; + case 8: sItem = "nw_waxhn001"; break; + case 9: sItem = "nw_wbwxl001"; break; + case 10: sItem = "nw_wthmsh002"; break; + } + + } + else if (GetRange(2, nHD)) // * 800 + { + int nRandom = Random(14) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthsh001"; break; + case 2: sItem = "nw_wblcl001"; break; + case 3: sItem = "nw_wdbqs001"; break; + case 4: sItem = "nw_wbwsl001"; break; + case 5: sItem = "nw_wswdg001"; break; + case 6: sItem = "nw_wspka001"; break; + case 7: sItem = "nw_wbwxh001"; break; + case 8: sItem = "nw_waxhn001"; break; + case 9: sItem = "nw_wbwxl001"; break; + case 10: sItem = "nw_wthmsh002"; break; + case 11: sItem = "nw_wbwmsl001"; break; + case 12: sItem = "nw_wbwmxh002"; break; + case 13: sItem = "nw_wthmsh008"; break; + case 14: sItem = "nw_wbwmxl002"; break; + } + + } + else if (GetRange(3, nHD)) // * 200 - 2500 + { + int nRandom = Random(13) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsl001"; break; + case 2: sItem = "nw_wbwmxh002"; break; + case 3: sItem = "nw_wthmsh008"; break; + case 4: sItem = "nw_wbwmxl002"; break; + case 5: sItem = "nw_wthmsh009"; break; + case 6: sItem = "nw_wblmcl002"; break; + case 7: sItem = "nw_wdbmqs002"; break; + case 8: sItem = "nw_wswmdg002"; break; + case 9: sItem = "nw_wspmka002"; break; + case 10: sItem = "nw_waxmhn002"; break; + case 11: sItem = "nw_wbwmsl009"; break; + case 12: sItem = "nw_wbwmxh008"; break; + case 13: sItem = "nw_wbwmxl008"; break; + } + + + } + else if (GetRange(4, nHD)) // * 800 - 10000 + { + int nRandom = Random(17) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmsh009"; break; + case 2: sItem = "nw_wblmcl002"; break; + case 3: sItem = "nw_wdbmqs002"; break; + case 4: sItem = "nw_wswmdg002"; break; + case 5: sItem = "nw_wspmka002"; break; + case 6: sItem = "nw_waxmhn002"; break; + case 7: sItem = "nw_wbwmsl009"; break; + case 8: sItem = "nw_wbwmxh008"; break; + case 9: sItem = "nw_wbwmxl008"; break; + case 10: sItem = "nw_wbwmsl010"; break; + case 11: sItem = "nw_wbwmxh009"; break; + case 12: sItem = "nw_wbwmxl009"; break; + case 13: sItem = "nw_wblmcl010"; break; + case 14: sItem = "nw_wdbmqs008"; break; + case 15: sItem = "nw_wswmdg008"; break; + case 16: sItem = "nw_wspmka008"; break; + case 17: sItem = "nw_waxmhn010"; break; + } + } + else // * 2500 - 16500 + { + int nRandom = Random(13) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsl010"; break; + case 2: sItem = "nw_wbwmxh009"; break; + case 3: sItem = "nw_wbwmxl009"; break; + case 4: sItem = "nw_wblmcl010"; break; + case 5: sItem = "nw_wdbmqs008"; break; + case 6: sItem = "nw_wswmdg008"; break; + case 7: sItem = "nw_wspmka008"; break; + case 8: sItem = "nw_waxmhn010"; break; + case 9: sItem = "nw_wblmcl011"; break; + case 10: sItem = "nw_wdbmqs009"; break; + case 11: sItem = "nw_wswmdg009"; break; + case 12: sItem = "nw_wspmka009"; break; + case 13: sItem = "nw_waxmhn011"; break; + } + } + //dbSpeak("Generic Monk Weapon"); + + dbCreateItemOnObject(sItem, oTarget, 1); + } + void CreateSpecificMonkWeapon(object oTarget, object oAdventurer, int nModifier = 0) + { + + string sItem = ""; + int nHD = GetHitDice(oAdventurer) + nModifier; + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmsh003"; break; + case 2: sItem = "nw_wthmsh006"; break; + case 3: CreateGenericMonkWeapon(oTarget, oAdventurer, JUMP_LEVEL); return; break; + } + + } + else if (GetRange(2, nHD)) // * 2500 + { + int nRandom = Random(8) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmsh003"; break; + case 2: sItem = "nw_wthmsh006"; break; + case 3: sItem = "nw_wthmsh004"; break; + case 4: sItem = "nw_wthmsh007"; break; + case 5: sItem = "NW_IT_MGLOVE016"; break; + case 6: sItem = "NW_IT_MGLOVE021"; break; + case 7: sItem = "NW_IT_MGLOVE026"; break; + case 8: CreateGenericMonkWeapon(oTarget, oAdventurer, JUMP_LEVEL); return; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(21) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmsh006"; break; + case 2: sItem = "nw_wthmsh004"; break; + case 3: sItem = "nw_wthmsh007"; break; + case 4: sItem = "nw_wbwmsl005"; break; + case 5: sItem = "nw_wbwmxh005"; break; + case 6: sItem = "nw_wspmka004"; break; + case 7: sItem = "nw_wbwmxl005"; break; + case 8: sItem = "nw_wspmka007"; break; + case 9: sItem = "nw_wswmdg006"; break; + case 10: sItem = "nw_wspmka005"; break; + case 11: sItem = "NW_IT_MGLOVE016"; break; + case 12: sItem = "NW_IT_MGLOVE021"; break; + case 13: sItem = "NW_IT_MGLOVE026"; break; + + case 14: sItem = "NW_IT_MGLOVE017"; break; + case 15: sItem = "NW_IT_MGLOVE022"; break; + case 16: sItem = "NW_IT_MGLOVE027"; break; + + case 17: sItem = "NW_IT_MGLOVE018"; break; + case 18: sItem = "NW_IT_MGLOVE023"; break; + case 19: sItem = "NW_IT_MGLOVE028"; break; + + case 20: sItem = "NW_IT_MGLOVE029"; break; + case 21: sItem = "NW_IT_MGLOVE030"; break; + + + } + + } + else if (GetRange(4, nHD)) // * 2500 -16500 + { + int nRandom = Random(22) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsl005"; break; + case 2: sItem = "nw_wbwmxh005"; break; + case 3: sItem = "nw_wspmka004"; break; + case 4: sItem = "nw_wbwmxl005"; break; + case 5: sItem = "nw_wspmka007"; break; + case 6: sItem = "nw_wswmdg006"; break; + case 7: sItem = "nw_wspmka005"; break; + case 8: sItem = "nw_wblmcl004"; break; + case 9: sItem = "nw_wblmcl003"; break; + case 10: sItem = "nw_wbwmsl003"; break; + case 11: sItem = "nw_wbwmxh003"; break; + case 12: sItem = "nw_waxmhn004"; break; + case 13: sItem = "nw_wbwmxl003"; break; + + case 14: sItem = "NW_IT_MGLOVE017"; break; + case 15: sItem = "NW_IT_MGLOVE022"; break; + + case 16: sItem = "NW_IT_MGLOVE018"; break; + case 17: sItem = "NW_IT_MGLOVE023"; break; + case 18: sItem = "NW_IT_MGLOVE028"; break; + + case 19: sItem = "NW_IT_MGLOVE029"; break; + case 20: sItem = "NW_IT_MGLOVE030"; break; + + case 21: sItem = "NW_IT_MGLOVE019"; break; + case 22: sItem = "NW_IT_MGLOVE024"; break; + + + } + + } + else // * 16000 + + { + int nRandom = Random(24) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmxl003"; break; + case 2: sItem = "nw_wspmka006"; break; + case 3: sItem = "nw_wbwmxl004"; break; + case 4: sItem = "nw_wspmka003"; break; + case 5: sItem = "nw_wbwmxl007"; break; + case 6: sItem = "nw_waxmhn003"; break; + case 7: sItem = "nw_wblmcl005"; break; + case 8: sItem = "nw_wswmdg004"; break; + case 9: sItem = "nw_wbwmsl007"; break; + case 10: sItem = "nw_wbwmxh004"; break; + case 11: sItem = "nw_waxmhn005"; break; + case 12: sItem = "nw_wbwmxh007"; break; + case 13: sItem = "nw_wswmdg003"; break; + case 14: sItem = "nw_wswmdg007"; break; + case 15: sItem = "nw_wbwmsl006"; break; + case 16: sItem = "nw_wbwmsl008"; break; + case 17: sItem = "nw_wblmcl006"; break; + case 18: sItem = "nw_wbwmsl004"; break; + case 19: sItem = "nw_waxmhn006"; break; + case 20: sItem = "nw_wbwmxh006"; break; + case 21: sItem = "nw_wswmdg005"; break; + case 22: sItem = "nw_wbwmxl006"; break; + + case 23: sItem = "NW_IT_MGLOVE020"; break; + case 24: sItem = "NW_IT_MGLOVE025"; break; + + } + + } + //dbSpeak("Specific Monk Weapon"); + + dbCreateItemOnObject(sItem, oTarget, 1); + + } + + void CreateGenericDruidWeapon(object oTarget, object oAdventurer, int nModifier = 0) + { + string sItem = ""; + int nHD = GetHitDice(oAdventurer) + nModifier; + + if (GetRange(1, nHD)) // * 200 + { + int nRandom = Random(8) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthdt001"; break; + case 2: sItem = "nw_wblcl001"; break; + case 3: sItem = "nw_wdbqs001"; break; + case 4: sItem = "nw_wplss001"; break; + case 5: sItem = "nw_wswdg001"; break; + case 6: sItem = "nw_wspsc001"; break; + case 7: sItem = "nw_wswsc001"; break; + case 8: sItem = "nw_wthmdt002"; break; + } + } + else if (GetRange(2, nHD)) // * 800 + { + int nRandom = Random(11) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthdt001"; break; + case 2: sItem = "nw_wblcl001"; break; + case 3: sItem = "nw_wdbqs001"; break; + case 4: sItem = "nw_wplss001"; break; + case 5: sItem = "nw_wswdg001"; break; + case 6: sItem = "nw_wspsc001"; break; + case 7: sItem = "nw_wswsc001"; break; + case 8: sItem = "nw_wthmdt002"; break; + case 9: sItem = "nw_wthmdt005"; break; + case 10: sItem = "nw_wbwmsl001"; break; + case 11: sItem = "nw_wthmdt008"; break; + } + + } + else if (GetRange(3, nHD)) // * 200 - 2500 + { + int nRandom = Random(13) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmdt005"; break; + case 2: sItem = "nw_wbwmsl001"; break; + case 3: sItem = "nw_wthmdt008"; break; + case 4: sItem = "nw_wthmdt009"; break; + case 5: sItem = "nw_wthmdt006"; break; + case 6: sItem = "nw_wblmcl002"; break; + case 7: sItem = "nw_wdbmqs002"; break; + case 8: sItem = "nw_wplmss002"; break; + case 9: sItem = "nw_wswmdg002"; break; + case 10: sItem = "nw_wspmsc002"; break; + case 11: sItem = "nw_wswmsc002"; break; + case 12: sItem = "nw_wthmdt003"; break; + case 13: sItem = "nw_wbwmsl009"; break; + } + + } + else if (GetRange(4, nHD)) // * 800 - 10000 + { + int nRandom = Random(19) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmdt009"; break; + case 2: sItem = "nw_wthmdt006"; break; + case 3: sItem = "nw_wblmcl002"; break; + case 4: sItem = "nw_wdbmqs002"; break; + case 5: sItem = "nw_wplmss002"; break; + case 6: sItem = "nw_wswmdg002"; break; + case 7: sItem = "nw_wspmsc002"; break; + case 8: sItem = "nw_wswmsc002"; break; + case 9: sItem = "nw_wthmdt003"; break; + case 10: sItem = "nw_wbwmsl009"; break; + case 11: sItem = "nw_wthmdt007"; break; + case 12: sItem = "nw_wthmdt004"; break; + case 13: sItem = "nw_wbwmsl010"; break; + case 14: sItem = "nw_wblmcl010"; break; + case 15: sItem = "nw_wdbmqs008"; break; + case 16: sItem = "nw_wplmss010"; break; + case 17: sItem = "nw_wswmdg008"; break; + case 18: sItem = "nw_wspmsc010"; break; + case 19: sItem = "nw_wswmsc010"; break; + } + + } + else // * 2500 - 16500 + { + int nRandom = Random(15) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmdt007"; break; + case 2: sItem = "nw_wthmdt004"; break; + case 3: sItem = "nw_wbwmsl010"; break; + case 4: sItem = "nw_wblmcl010"; break; + case 5: sItem = "nw_wdbmqs008"; break; + case 6: sItem = "nw_wplmss010"; break; + case 7: sItem = "nw_wswmdg008"; break; + case 8: sItem = "nw_wspmsc010"; break; + case 9: sItem = "nw_wswmsc010"; break; + case 10: sItem = "nw_wblmcl011"; break; + case 11: sItem = "nw_wdbmqs009"; break; + case 12: sItem = "nw_wplmss011"; break; + case 13: sItem = "nw_wswmdg009"; break; + case 14: sItem = "nw_wspmsc011"; break; + case 15: sItem = "nw_wswmsc011"; break; + } + + } + //dbSpeak("Generic Druid weapon"); + + dbCreateItemOnObject(sItem, oTarget, 1); + + + } + void CreateSpecificDruidWeapon(object oTarget, object oAdventurer, int nModifier = 0) + { + + string sItem = ""; + int nHD = GetHitDice(oAdventurer) + nModifier; + + if (GetRange(1, nHD)) // * 800 + { + CreateGenericDruidWeapon(oTarget, oAdventurer, JUMP_LEVEL); return; + + } + else if (GetRange(2, nHD)) // * 2500 + { + CreateGenericDruidWeapon(oTarget, oAdventurer, JUMP_LEVEL); return; + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmqs005"; break; + case 2: sItem = "nw_wdbmqs006"; break; + case 3: sItem = "nw_wbwmsl005"; break; + case 4: sItem = "nw_wswmdg006"; break; + case 5: CreateGenericDruidWeapon(oTarget, oAdventurer, JUMP_LEVEL); return; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 -16500 + { + int nRandom = Random(10) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmqs005"; break; + case 2: sItem = "nw_wdbmqs006"; break; + case 3: sItem = "nw_wbwmsl005"; break; + case 4: sItem = "nw_wswmdg006"; break; + case 5: sItem = "nw_wblmcl004"; break; + case 6: sItem = "nw_wdbmqs004"; break; + case 7: sItem = "nw_wblmcl003"; break; + case 8: sItem = "nw_wbwmsl003"; break; + case 9: sItem = "nw_wswmsc004"; break; + case 10: sItem = "nw_wplmss005"; break; + } + + } + else // * 16000 + + { + int nRandom = Random(18) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmqs003"; break; + case 2: sItem = "nw_wblmcl005"; break; + case 3: sItem = "nw_wplmss007"; break; + case 4: sItem = "nw_wswmdg004"; break; + case 5: sItem = "nw_wbwmsl007"; break; + case 6: sItem = "nw_wplmss006"; break; + case 7: sItem = "nw_wswmsc006"; break; + case 8: sItem = "nw_wswmdg003"; break; + case 9: sItem = "nw_wswmdg007"; break; + case 10: sItem = "nw_wswmsc007"; break; + case 11: sItem = "nw_wbwmsl006"; break; + case 12: sItem = "nw_wbwmsl008"; break; + case 13: sItem = "nw_wdbmqs007"; break; + case 14: sItem = "nw_wblmcl006"; break; + case 15: sItem = "nw_wbwmsl004"; break; + case 16: sItem = "nw_wswmsc005"; break; + case 17: sItem = "nw_wplmss004"; break; + case 18: sItem = "nw_wswmdg005"; break; + } + + } + //dbSpeak("specific druid weapon"); + + dbCreateItemOnObject(sItem, oTarget, 1); + + } + + void CreateGenericWizardWeapon(object oTarget, object oAdventurer, int nModifier = 0) + { + string sItem = ""; + int nHD = GetHitDice(oAdventurer) + nModifier; + + if (GetRange(1, nHD)) // * 200 + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblcl001"; break; + case 2: sItem = "nw_wdbqs001"; break; + case 3: sItem = "nw_wswdg001"; break; + case 4: sItem = "nw_wbwxh001"; break; + case 5: sItem = "nw_wbwxl001"; break; + } + + } + else if (GetRange(2, nHD)) // * 800 + { + int nRandom = Random(6) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblcl001"; break; + case 2: sItem = "nw_wdbqs001"; break; + case 3: sItem = "nw_wswdg001"; break; + case 4: sItem = "nw_wbwxh001"; break; + case 5: sItem = "nw_wbwxl001"; break; + case 6: sItem = "nw_wbwmxl002"; break; + } + + } + else if (GetRange(3, nHD)) // * 200 - 2500 + { + int nRandom = Random(6) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmxl002"; break; + case 2: sItem = "nw_wblmcl002"; break; + case 3: sItem = "nw_wdbmqs002"; break; + case 4: sItem = "nw_wswmdg002"; break; + case 5: sItem = "nw_wbwmxh008"; break; + case 6: sItem = "nw_wbwmxl008"; break; + } + + } + else if (GetRange(4, nHD)) // * 800 - 10000 + { + int nRandom = Random(10) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmcl002"; break; + case 2: sItem = "nw_wdbmqs002"; break; + case 3: sItem = "nw_wswmdg002"; break; + case 4: sItem = "nw_wbwmxh008"; break; + case 5: sItem = "nw_wbwmxl008"; break; + case 6: sItem = "nw_wbwmxh009"; break; + case 7: sItem = "nw_wbwmxl009"; break; + case 8: sItem = "nw_wblmcl010"; break; + case 9: sItem = "nw_wdbmqs008"; break; + case 10: sItem = "nw_wswmdg008"; break; + } + + } + else // * 2500 - 16500 + { + int nRandom = Random(8) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmxh009"; break; + case 2: sItem = "nw_wbwmxl009"; break; + case 3: sItem = "nw_wblmcl010"; break; + case 4: sItem = "nw_wdbmqs008"; break; + case 5: sItem = "nw_wswmdg008"; break; + case 6: sItem = "nw_wblmcl011"; break; + case 7: sItem = "nw_wdbmqs009"; break; + case 8: sItem = "nw_wswmdg009"; break; + } + + } + //dbSpeak("Generic Wizard or Sorcerer Weapon"); + + dbCreateItemOnObject(sItem, oTarget, 1); + + } + void CreateSpecificWizardWeapon(object oTarget, object oAdventurer, int nModifier = 0) + { + + string sItem = ""; + int nHD = GetHitDice(oAdventurer) + nModifier; + + if (GetRange(1, nHD)) // * 800 + { + CreateGenericWizardWeapon(oTarget, oAdventurer, JUMP_LEVEL); return; + } + else if (GetRange(2, nHD)) // * 2500 + { + CreateGenericWizardWeapon(oTarget, oAdventurer, JUMP_LEVEL); return; + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmqs005"; break; + case 2: sItem = "nw_wdbmqs006"; break; + case 3: sItem = "nw_wbwmxh005"; break; + case 4: sItem = "nw_wbwmxl005"; break; + case 5: sItem = "nw_wswmdg006"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 -16500 + { + int nRandom = Random(10) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmqs005"; break; + case 2: sItem = "nw_wdbmqs006"; break; + case 3: sItem = "nw_wbwmxh005"; break; + case 4: sItem = "nw_wbwmxl005"; break; + case 5: sItem = "nw_wswmdg006"; break; + case 6: sItem = "nw_wblmcl004"; break; + case 7: sItem = "nw_wdbmqs004"; break; + case 8: sItem = "nw_wblmcl003"; break; + case 9: sItem = "nw_wbwmxh003"; break; + case 10: sItem = "nw_wbwmxl003"; break; + } + + } + else // * 16000 + + { + int nRandom = Random(15) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmxl003"; break; + case 2: sItem = "nw_wdbmqs003"; break; + case 3: sItem = "nw_wbwmxl004"; break; + case 4: sItem = "nw_wbwmxl007"; break; + case 5: sItem = "nw_wblmcl005"; break; + case 6: sItem = "nw_wswmdg004"; break; + case 7: sItem = "nw_wbwmxh004"; break; + case 8: sItem = "nw_wbwmxh007"; break; + case 9: sItem = "nw_wswmdg003"; break; + case 10: sItem = "nw_wswmdg007"; break; + case 11: sItem = "nw_wdbmqs007"; break; + case 12: sItem = "nw_wblmcl006"; break; + case 13: sItem = "nw_wbwmxh006"; break; + case 14: sItem = "nw_wswmdg005"; break; + case 15: sItem = "nw_wbwmxl006"; break; + } + + } + //dbSpeak("Specific Wizard or Sorcerer Weapon"); + + dbCreateItemOnObject(sItem, oTarget, 1); + + } + + void CreateGenericSimple(object oTarget, object oAdventurer, int nModifier = 0) + { + string sItem = ""; + int nHD = GetHitDice(oAdventurer) + nModifier; + + if (GetRange(1, nHD)) // * 200 + { + int nRandom = d12(); + switch (nRandom) + { + case 1: sItem = "nw_wthdt001"; break; + case 2: sItem = "nw_wblcl001"; break; + case 3: sItem = "nw_wbwsl001"; break; + case 4: sItem = "nw_wplss001"; break; + case 5: sItem = "nw_wdbqs001"; break; + case 6: sItem = "nw_wswdg001"; break; + case 7: sItem = "nw_wblml001"; break; + case 8: sItem = "nw_wbwxh001"; break; + case 9: sItem = "nw_wspsc001"; break; + case 10: sItem = "nw_wblms001"; break; + case 11: sItem = "nw_wbwxl001"; break; + case 12: sItem = "nw_wthmdt002"; break; + } + + } + else if (GetRange(2, nHD)) // * 800 + { + int nRandom = Random(17) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthdt001"; break; + case 2: sItem = "nw_wblcl001"; break; + case 3: sItem = "nw_wbwsl001"; break; + case 4: sItem = "nw_wplss001"; break; + case 5: sItem = "nw_wdbqs001"; break; + case 6: sItem = "nw_wswdg001"; break; + case 7: sItem = "nw_wblml001"; break; + case 8: sItem = "nw_wbwxh001"; break; + case 9: sItem = "nw_wspsc001"; break; + case 10: sItem = "nw_wblms001"; break; + case 11: sItem = "nw_wbwxl001"; break; + case 12: sItem = "nw_wthmdt002"; break; + case 13: sItem = "nw_wthmdt005"; break; + case 14: sItem = "nw_wbwmsl001"; break; + case 15: sItem = "nw_wbwmxh002"; break; + case 16: sItem = "nw_wthmdt008"; break; + case 17: sItem = "nw_wbwmxl002"; break; + } + } + else if (GetRange(3, nHD)) // * 200 - 2500 + { + int nRandom = Random(19) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmdt005"; break; + case 2: sItem = "nw_wbwmsl001"; break; + case 3: sItem = "nw_wbwmxh002"; break; + case 4: sItem = "nw_wthmdt008"; break; + case 5: sItem = "nw_wbwmxl002"; break; + case 6: sItem = "nw_wthmdt009"; break; + case 7: sItem = "nw_wthmdt006"; break; + case 8: sItem = "nw_wblmcl002"; break; + case 9: sItem = "nw_wplmss002"; break; + case 10: sItem = "nw_wdbmqs002"; break; + case 11: sItem = "nw_wswmdg002"; break; + case 12: sItem = "nw_wblmml002"; break; + case 13: sItem = "nw_wspmsc002"; break; + case 14: sItem = "nw_wblmms002"; break; + case 15: sItem = "nw_wthmdt003"; break; + case 16: sItem = "nw_wthmdt003"; break; + case 17: sItem = "nw_wbwmsl009"; break; + case 18: sItem = "nw_wbwmxh008"; break; + case 19: sItem = "nw_wbwmxl008"; break; + } + } + else if (GetRange(4, nHD)) // * 800 - 10000 + { + int nRandom = Random(27) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmdt009"; break; + case 2: sItem = "nw_wthmdt006"; break; + case 3: sItem = "nw_wblmcl002"; break; + case 4: sItem = "nw_wplmss002"; break; + case 5: sItem = "nw_wdbmqs002"; break; + case 6: sItem = "nw_wswmdg002"; break; + case 7: sItem = "nw_wblmml002"; break; + case 8: sItem = "nw_wspmsc002"; break; + case 9: sItem = "nw_wblmms002"; break; + case 10: sItem = "nw_wthmdt003"; break; + case 11: sItem = "nw_wthmdt003"; break; + case 12: sItem = "nw_wbwmsl009"; break; + case 13: sItem = "nw_wbwmxh008"; break; + case 14: sItem = "nw_wbwmxl008"; break; + case 15: sItem = "nw_wthmdt007"; break; + case 16: sItem = "nw_wthmdt004"; break; + case 17: sItem = "nw_wbwmsl010"; break; + case 18: sItem = "nw_wbwmxh009"; break; + case 19: sItem = "nw_wbwmxl009"; break; + case 20: sItem = "nw_wbwmsl005"; break; + case 21: sItem = "nw_wblmcl010"; break; + case 22: sItem = "nw_wplmss010"; break; + case 23: sItem = "nw_wdbmqs008"; break; + case 24: sItem = "nw_wswmdg008"; break; + case 25: sItem = "nw_wblmml011"; break; + case 26: sItem = "nw_wspmsc010"; break; + case 27: sItem = "nw_wblmms010"; break; + + + + } + + } + else if (GetRange(5, nHD)) // * 2500 - 16500 + { + int nRandom = Random(23) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmdt007"; break; + case 2: sItem = "nw_wthmdt004"; break; + case 3: sItem = "nw_wbwmsl010"; break; + case 4: sItem = "nw_wbwmxh009"; break; + case 5: sItem = "nw_wbwmxl009"; break; + case 6: sItem = "nw_wbwmsl005"; break; + case 7: sItem = "nw_wblmcl010"; break; + case 8: sItem = "nw_wplmss010"; break; + case 9: sItem = "nw_wdbmqs008"; break; + case 10: sItem = "nw_wswmdg008"; break; + case 11: sItem = "nw_wblmml011"; break; + case 12: sItem = "nw_wspmsc010"; break; + case 13: sItem = "nw_wblmms010"; break; + case 14: sItem = "nw_wblmms010"; break; + case 15: sItem = "nw_wblmms010"; break; + case 16: sItem = "nw_wblmms010"; break; + case 17: sItem = "nw_wblmcl011"; break; + case 18: sItem = "nw_wplmss011"; break; + case 19: sItem = "nw_wdbmqs009"; break; + case 20: sItem = "nw_wswmdg009"; break; + case 21: sItem = "nw_wblmml012"; break; + case 22: sItem = "nw_wspmsc011"; break; + case 23: sItem = "nw_wblmms011"; break; + + + + } + } + else if (GetRange(6, nHD)) // * 8000 - 25000 + { + int nRandom = Random(7) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmcl011"; break; + case 2: sItem = "nw_wplmss011"; break; + case 3: sItem = "nw_wdbmqs009"; break; + case 4: sItem = "nw_wswmdg009"; break; + case 5: sItem = "nw_wblmml012"; break; + case 6: sItem = "nw_wspmsc011"; break; + case 7: sItem = "nw_wblmms011"; break; + + + + } + } + //dbSpeak("Create Generic SImple; Specific = " + IntToString(nModifier)); + + dbCreateItemOnObject(sItem, oTarget, 1); + } + void CreateGenericMartial(object oTarget, object oAdventurer, int nModifier = 0) + { + string sItem = ""; + + int nHD = GetHitDice(oAdventurer) +nModifier; + + if (GetRange(1, nHD)) // * 200 + { + int nRandom = Random(17) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthax001"; break; + case 2: sItem = "nw_wblhl001"; break; + case 3: sItem = "nw_waxhn001"; break; + case 4: sItem = "nw_wblfl001"; break; + case 5: sItem = "nw_waxbt001"; break; + case 6: sItem = "nw_wplhb001"; break; + case 7: sItem = "nw_wswss001"; break; + case 8: sItem = "nw_wblhw001"; break; + case 9: sItem = "nw_wblfh001"; break; + case 10: sItem = "nw_wswls001"; break; + case 11: sItem = "nw_wswsc001"; break; + case 12: sItem = "nw_waxgr001"; break; + case 13: sItem = "nw_wswrp001"; break; + case 14: sItem = "nw_wbwsh001"; break; + case 15: sItem = "nw_wswbs001"; break; + case 16: sItem = "nw_wswgs001"; break; + case 17: sItem = "nw_wbwln001"; break; + } + + } + else if (GetRange(2, nHD)) // * 800 + { + int nRandom = Random(20) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthax001"; break; + case 2: sItem = "nw_wblhl001"; break; + case 3: sItem = "nw_waxhn001"; break; + case 4: sItem = "nw_wblfl001"; break; + case 5: sItem = "nw_waxbt001"; break; + case 6: sItem = "nw_wplhb001"; break; + case 7: sItem = "nw_wswss001"; break; + case 8: sItem = "nw_wblhw001"; break; + case 9: sItem = "nw_wblfh001"; break; + case 10: sItem = "nw_wswls001"; break; + case 11: sItem = "nw_wswsc001"; break; + case 12: sItem = "nw_waxgr001"; break; + case 13: sItem = "nw_wswrp001"; break; + case 14: sItem = "nw_wbwsh001"; break; + case 15: sItem = "nw_wswbs001"; break; + case 16: sItem = "nw_wswgs001"; break; + case 17: sItem = "nw_wbwln001"; break; + case 18: sItem = "nw_wthmax002"; break; + case 19: sItem = "nw_wbwmsh002"; break; + case 20: sItem = "nw_wbwmln002"; break; + } + + } + else if (GetRange(3, nHD)) // * 200 - 2500 + { + int nRandom = Random(20) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmax002"; break; + case 2: sItem = "nw_wbwmsh002"; break; + case 3: sItem = "nw_wbwmln002"; break; + case 4: sItem = "nw_wblmhl002"; break; + case 5: sItem = "nw_waxmhn002"; break; + case 6: sItem = "nw_wblmfl002"; break; + case 7: sItem = "nw_waxmbt002"; break; + case 8: sItem = "nw_wplmhb002"; break; + case 9: sItem = "nw_wblmhw002"; break; + case 10: sItem = "nw_wblmfh002"; break; + case 11: sItem = "nw_wswmls002"; break; + case 12: sItem = "nw_wswmsc002"; break; + case 13: sItem = "nw_waxmgr002"; break; + case 14: sItem = "nw_wswmrp002"; break; + case 15: sItem = "nw_wswmbs002"; break; + case 16: sItem = "nw_wswmgs002"; break; + case 17: sItem = "nw_wthmax008"; break; + case 18: sItem = "nw_wbwmsh008"; break; + case 19: sItem = "nw_wbwmln008"; break; + case 20: sItem = "nw_wswmss002"; break; + + } + + } + else if (GetRange(4, nHD)) // * 800 - 10000 + { + int nRandom = Random(33) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmhl002"; break; + case 2: sItem = "nw_waxmhn002"; break; + case 3: sItem = "nw_wblmfl002"; break; + case 4: sItem = "nw_waxmbt002"; break; + case 5: sItem = "nw_wplmhb002"; break; + case 6: sItem = "nw_wblmhw002"; break; + case 7: sItem = "nw_wblmfh002"; break; + case 8: sItem = "nw_wswmls002"; break; + case 9: sItem = "nw_wswmsc002"; break; + case 10: sItem = "nw_waxmgr002"; break; + case 11: sItem = "nw_wswmrp002"; break; + case 12: sItem = "nw_wswmbs002"; break; + case 13: sItem = "nw_wswmgs002"; break; + case 14: sItem = "nw_wthmax008"; break; + case 15: sItem = "nw_wbwmsh008"; break; + case 16: sItem = "nw_wbwmln008"; break; + case 17: sItem = "nw_wbwmsh009"; break; + case 18: sItem = "nw_wbwmln009"; break; + case 19: sItem = "nw_wblmhl010"; break; + case 20: sItem = "nw_waxmhn010"; break; + case 21: sItem = "nw_wblmfl010"; break; + case 22: sItem = "nw_waxmbt010"; break; + case 23: sItem = "nw_wplmhb010"; break; + case 24: sItem = "nw_wblmhw011"; break; + case 25: sItem = "nw_wblmfh010"; break; + case 26: sItem = "nw_wswmls010"; break; + case 27: sItem = "nw_waxmgr009"; break; + case 28: sItem = "nw_wswmbs009"; break; + case 29: sItem = "nw_wswmgs011"; break; + case 30: sItem = "nw_wswmrp010"; break; + case 31: sItem = "nw_wswmsc010"; break; + case 32: sItem = "nw_wswmss002"; break; + case 33: sItem = "nw_wswmss009"; break; + } + + } + else if (GetRange(5, nHD)) // * 2500 - 16500 + { + int nRandom = Random(20) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsh009"; break; + case 2: sItem = "nw_wbwmln009"; break; + case 3: sItem = "nw_wblmhl010"; break; + case 4: sItem = "nw_waxmhn010"; break; + case 5: sItem = "nw_wblmfl010"; break; + case 6: sItem = "nw_waxmbt010"; break; + case 7: sItem = "nw_wplmhb010"; break; + case 8: sItem = "nw_wblmhw011"; break; + case 9: sItem = "nw_wblmfh010"; break; + case 10: sItem = "nw_wswmls010"; break; + case 11: sItem = "nw_waxmgr009"; break; + case 12: sItem = "nw_wswmbs009"; break; + case 13: sItem = "nw_wswmgs011"; break; + case 14: sItem = "nw_wthmax009"; break; + case 15: sItem = "nw_wswmrp010"; break; + case 16: sItem = "nw_wswmrp011"; break; + case 17: sItem = "nw_wswmsc010"; break; + case 18: sItem = "nw_wswmss009"; break; + case 19: sItem = "nw_wswmsc011"; break; + case 20: sItem = "nw_wswmss011"; break; + } + + } + else if (GetRange(6, nHD)) // * 8000 - 25000 + { + int nRandom = Random(14) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmax009"; break; + case 2: sItem = "nw_waxmhn011"; break; + case 3: sItem = "nw_wblmfl011"; break; + case 4: sItem = "nw_waxmbt011"; break; + case 5: sItem = "nw_wplmhb011"; break; + case 6: sItem = "nw_wblmhw012"; break; + case 7: sItem = "nw_wblmfh011"; break; + case 8: sItem = "nw_wswmls012"; break; + case 9: sItem = "nw_waxmgr011"; break; + case 10: sItem = "nw_wswmbs010"; break; + case 11: sItem = "nw_wswmgs012"; break; + case 12: sItem = "nw_wswmrp011"; break; + case 13: sItem = "nw_wswmsc011"; break; + case 14: sItem = "nw_wswmss011"; break; + } + + } + + //dbSpeak("Create Generic Martial"); + + dbCreateItemOnObject(sItem, oTarget, 1); + } + void CreateGenericExotic(object oTarget, object oAdventurer, int nModifier = 0) + { + string sItem = ""; + + int nHD = GetHitDice(oAdventurer) + nModifier; + + if (GetRange(1, nHD)) // * 200 + { + int nRandom = Random(9) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthsh001"; break; + case 2: sItem = "nw_wspka001"; break; + case 3: sItem = "nw_wspku001"; break; + case 4: sItem = "nw_wplsc001"; break; + case 5: sItem = "nw_wdbax001"; break; + case 6: sItem = "nw_wdbma001"; break; + case 7: sItem = "nw_wswka001"; break; + case 8: sItem = "nw_wthmsh002"; break; + case 9: sItem = "nw_wdbsw001"; break; + } + + } + else if (GetRange(2, nHD)) // * 800 + { + int nRandom = Random(17) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthsh001"; break; + case 2: sItem = "nw_wspka001"; break; + case 3: sItem = "nw_wspku001"; break; + case 4: sItem = "nw_wplsc001"; break; + case 5: sItem = "nw_wdbax001"; break; + case 6: sItem = "nw_wdbma001"; break; + case 7: sItem = "nw_wswka001"; break; + case 8: sItem = "nw_wthmsh002"; break; + case 9: sItem = "nw_wdbsw001"; break; + case 10: sItem = "nw_wthmsh005"; break; + case 11: sItem = "nw_wspmka002"; break; + case 12: sItem = "nw_wspmku002"; break; + case 13: sItem = "nw_wplmsc002"; break; + case 14: sItem = "nw_wdbmax002"; break; + case 15: sItem = "nw_wdbmma002"; break; + case 16: sItem = "nw_wswmka002"; break; + case 17: sItem = "nw_wdbmsw002"; break; + } + + } + else if (GetRange(3, nHD)) // * 200 - 2500 + { + int nRandom = Random(9) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbsw001"; break; + case 2: sItem = "nw_wthmsh005"; break; + case 3: sItem = "nw_wspmka002"; break; + case 4: sItem = "nw_wspmku002"; break; + case 5: sItem = "nw_wplmsc002"; break; + case 6: sItem = "nw_wdbmax002"; break; + case 7: sItem = "nw_wdbmma002"; break; + case 8: sItem = "nw_wswmka002"; break; + case 9: sItem = "nw_wdbmsw002"; break; + } + + } + else if (GetRange(4, nHD)) // * 800 - 10000 + { + int nRandom = Random(17) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmsh005"; break; + case 2: sItem = "nw_wspmka002"; break; + case 3: sItem = "nw_wspmku002"; break; + case 4: sItem = "nw_wplmsc002"; break; + case 5: sItem = "nw_wdbmax002"; break; + case 6: sItem = "nw_wdbmma002"; break; + case 7: sItem = "nw_wswmka002"; break; + case 8: sItem = "nw_wdbmsw002"; break; + case 9: sItem = "nw_wthmsh008"; break; + case 10: sItem = "nw_wspmka008"; break; + case 11: sItem = "nw_wspmku008"; break; + case 12: sItem = "nw_wplmsc010"; break; + case 13: sItem = "nw_wdbmax010"; break; + case 14: sItem = "nw_wdbmma010"; break; + case 15: sItem = "nw_wswmka010"; break; + case 16: sItem = "nw_wdbmsw010"; break; + case 17: sItem = "nw_wthmsh009"; break; + } + + } + else if (GetRange(5, nHD)) // * 2500 - 16500 + { + int nRandom = Random(13) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmka008"; break; + case 2: sItem = "nw_wspmku008"; break; + case 3: sItem = "nw_wplmsc010"; break; + case 4: sItem = "nw_wdbmax010"; break; + case 5: sItem = "nw_wdbmma010"; break; + case 6: sItem = "nw_wswmka010"; break; + case 7: sItem = "nw_wdbmsw010"; break; + case 8: sItem = "nw_wthmsh009"; break; + case 9: sItem = "nw_wspmka009"; break; + case 10: sItem = "nw_wspmku009"; break; + case 11: sItem = "nw_wplmsc011"; break; + case 12: sItem = "nw_wdbmax011"; break; + case 13: sItem = "nw_wdbmma011"; break; + } + + } + else if (GetRange(6, nHD)) // * 8000 - 25000 + { + int nRandom = Random(9) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmsw010"; break; + case 2: sItem = "nw_wthmsh009"; break; + case 3: sItem = "nw_wspmka009"; break; + case 4: sItem = "nw_wspmku009"; break; + case 5: sItem = "nw_wplmsc011"; break; + case 6: sItem = "nw_wdbmax011"; break; + case 7: sItem = "nw_wdbmma011"; break; + case 8: sItem = "nw_wswmka011"; break; + case 9: sItem = "nw_wdbmsw011"; break; + } + + } + //dbSpeak("Create generic exotic"); + + dbCreateItemOnObject(sItem, oTarget, 1); + } + void CreateGenericLightArmor(object oTarget, object oAdventurer, int nModifier = 0) + { + string sItem = ""; + + int nHD = GetHitDice(oAdventurer) + nModifier; + + if (GetRange(1, nHD)) // * 200 + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_aarcl009"; break; + case 2: sItem = "nw_ashsw001"; break; + case 3: sItem = "nw_aarcl001"; break; + case 4: sItem = "nw_aarcl002"; break; + case 5: sItem = "nw_aarcl012"; break; + } + + } + else if (GetRange(2, nHD)) // * 800 + { + int nRandom = Random(9) + 1; + switch (nRandom) + { + case 1: sItem = "nw_aarcl009"; break; + case 2: sItem = "nw_ashsw001"; break; + case 3: sItem = "nw_aarcl001"; break; + case 4: sItem = "nw_aarcl002"; break; + case 5: sItem = "nw_aarcl012"; break; + case 6: sItem = "nw_maarcl043"; break; + case 7: sItem = "nw_ashmsw002"; break; + case 8: sItem = "nw_maarcl044"; break; + case 9: sItem = "nw_maarcl045"; break; + } + + } + else if (GetRange(3, nHD)) // * 200 - 2500 + { + int nRandom = Random(8) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl043"; break; + case 2: sItem = "nw_ashmsw002"; break; + case 3: sItem = "nw_maarcl044"; break; + case 4: sItem = "nw_maarcl045"; break; + case 5: sItem = "nw_maarcl072"; break; + case 6: sItem = "nw_ashmsw008"; break; + case 7: sItem = "nw_maarcl071"; break; + case 8: sItem = "nw_maarcl075"; break; + } + + } + else if (GetRange(4, nHD)) // * 800 - 10000 + { + int nRandom = Random(9) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl072"; break; + case 2: sItem = "nw_ashmsw008"; break; + case 3: sItem = "nw_maarcl071"; break; + case 4: sItem = "nw_maarcl075"; break; + case 5: sItem = "nw_maarcl084"; break; + case 6: sItem = "nw_ashmsw009"; break; + case 7: sItem = "nw_maarcl083"; break; + case 8: sItem = "nw_maarcl087"; break; + case 9: sItem = "nw_maarcl079"; break; + } + + } + else if (GetRange(5, nHD)) // * 2500 - 16500 + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl084"; break; + case 2: sItem = "nw_ashmsw009"; break; + case 3: sItem = "nw_maarcl083"; break; + case 4: sItem = "nw_maarcl087"; break; + case 5: sItem = "nw_maarcl079"; break; + } + + } + else if (GetRange(6, nHD)) // * 8000 - 25000 + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl084"; break; + case 2: sItem = "nw_ashmsw009"; break; + case 3: sItem = "nw_maarcl083"; break; + case 4: sItem = "nw_maarcl087"; break; + case 5: sItem = "nw_maarcl079"; break; + } + + } + //dbSpeak("Create Generic light"); + + dbCreateItemOnObject(sItem, oTarget, 1); + } + void CreateGenericMediumArmor(object oTarget, object oAdventurer, int nModifier = 0) + { + int nHD = GetHitDice(oAdventurer) + nModifier; + string sItem = ""; + if (GetRange(1, nHD)) // * 200 + { + int nRandom = Random(10) + 1; + switch (nRandom) + { + case 1: sItem = "nw_arhe001"; break; + case 2: sItem = "nw_arhe002"; break; + case 3: sItem = "nw_arhe003"; break; + case 4: sItem = "nw_arhe004"; break; + case 5: sItem = "nw_arhe005"; break; + case 6: sItem = "nw_aarcl008"; break; + case 7: sItem = "nw_ashlw001"; break; + case 8: sItem = "nw_aarcl003"; break; + case 9: sItem = "nw_aarcl004"; break; + case 10: sItem = "nw_aarcl010"; break; + } + } + else if (GetRange(2, nHD)) // * 800 + { + int nRandom = Random(17) + 1; + switch (nRandom) + { + case 1: sItem = "nw_arhe001"; break; + case 2: sItem = "nw_arhe002"; break; + case 3: sItem = "nw_arhe003"; break; + case 4: sItem = "nw_arhe004"; break; + case 5: sItem = "nw_arhe005"; break; + case 6: sItem = "nw_aarcl008"; break; + case 7: sItem = "nw_ashlw001"; break; + case 8: sItem = "nw_aarcl003"; break; + case 9: sItem = "nw_aarcl004"; break; + case 10: sItem = "nw_aarcl010"; break; + case 11: sItem = "nw_maarcl047"; break; + case 12: sItem = "nw_ashmlw002"; break; + case 13: sItem = "nw_maarcl046"; break; + case 14: sItem = "nw_maarcl048"; break; + case 15: sItem = "nw_maarcl035"; break; + case 16: sItem = "nw_maarcl049"; break; + case 17: sItem = "nw_maarcl050"; break; + } + + } + else if (GetRange(3, nHD)) // * 200 - 2500 + { + int nRandom = Random(9) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl047"; break; + case 2: sItem = "nw_ashmlw002"; break; + case 3: sItem = "nw_maarcl046"; break; + case 4: sItem = "nw_maarcl048"; break; + case 5: sItem = "nw_maarcl035"; break; + case 6: sItem = "nw_maarcl049"; break; + case 7: sItem = "nw_maarcl050"; break; + case 8: sItem = "nw_maarcl070"; break; + case 9: sItem = "nw_ashmlw008"; break; + } + + } + else if (GetRange(4, nHD)) // * 800 - 10000 + { + int nRandom = Random(14) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl035"; break; + case 2: sItem = "nw_maarcl049"; break; + case 3: sItem = "nw_maarcl050"; break; + case 4: sItem = "nw_maarcl070"; break; + case 5: sItem = "nw_ashmlw008"; break; + case 6: sItem = "nw_maarcl067"; break; + case 7: sItem = "nw_maarcl073"; break; + case 8: sItem = "nw_maarcl065"; break; + case 9: sItem = "nw_maarcl066"; break; + case 10: sItem = "nw_maarcl082"; break; + case 11: sItem = "nw_ashmlw009"; break; + case 12: sItem = "nw_maarcl085"; break; + case 13: sItem = "nw_maarcl077"; break; + case 14: sItem = "nw_maarcl078"; break; + } + + } + else if (GetRange(5, nHD)) // * 2500 - 16500 + { + int nRandom = Random(11) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl070"; break; + case 2: sItem = "nw_ashmlw008"; break; + case 3: sItem = "nw_maarcl067"; break; + case 4: sItem = "nw_maarcl073"; break; + case 5: sItem = "nw_maarcl065"; break; + case 6: sItem = "nw_maarcl066"; break; + case 7: sItem = "nw_maarcl082"; break; + case 8: sItem = "nw_ashmlw009"; break; + case 9: sItem = "nw_maarcl085"; break; + case 10: sItem = "nw_maarcl077"; break; + case 11: sItem = "nw_maarcl078"; break; + } + + } + else if (GetRange(6, nHD)) // * 8000 - 25000 + { + int nRandom = Random(11) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl070"; break; + case 2: sItem = "nw_ashmlw008"; break; + case 3: sItem = "nw_maarcl067"; break; + case 4: sItem = "nw_maarcl073"; break; + case 5: sItem = "nw_maarcl065"; break; + case 6: sItem = "nw_maarcl066"; break; + case 7: sItem = "nw_maarcl082"; break; + case 8: sItem = "nw_ashmlw009"; break; + case 9: sItem = "nw_maarcl085"; break; + case 10: sItem = "nw_maarcl077"; break; + case 11: sItem = "nw_maarcl078"; break; + } + + } + //dbSpeak("Create Generic medium"); + + dbCreateItemOnObject(sItem, oTarget, 1); + } + void CreateGenericHeavyArmor(object oTarget, object oAdventurer, int nModifier = 0) + { + string sItem = ""; + int nHD = GetHitDice(oAdventurer) + nModifier; + + if (GetRange(1, nHD)) // * 200 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_ashto001"; break; + case 2: sItem = "nw_aarcl005"; break; + case 3: sItem = "nw_aarcl011"; break; + } + + } + else if (GetRange(2, nHD)) // * 800 + { + int nRandom = Random(6) + 1; + switch (nRandom) + { + case 1: sItem = "nw_ashto001"; break; + case 2: sItem = "nw_aarcl005"; break; + case 3: sItem = "nw_aarcl011"; break; + case 4: sItem = "nw_aarcl006"; break; + case 5: sItem = "nw_ashmto002"; break; + case 6: sItem = "nw_maarcl051"; break; + } + + } + else if (GetRange(3, nHD)) // * 200 - 2500 + { + int nRandom = Random(9) + 1; + switch (nRandom) + { + case 1: sItem = "nw_aarcl005"; break; + case 2: sItem = "nw_aarcl011"; break; + case 3: sItem = "nw_aarcl006"; break; + case 4: sItem = "nw_ashmto002"; break; + case 5: sItem = "nw_maarcl051"; break; + case 6: sItem = "nw_maarcl052"; break; + case 7: sItem = "nw_aarcl007"; break; + case 8: sItem = "nw_maarcl053"; break; + case 9: sItem = "nw_ashmto008"; break; + } + + } + else if (GetRange(4, nHD)) // * 800 - 10000 + { + int nRandom = Random(15) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl051"; break; + case 2: sItem = "nw_maarcl052"; break; + case 3: sItem = "nw_aarcl007"; break; + case 4: sItem = "nw_maarcl053"; break; + case 5: sItem = "nw_ashmto008"; break; + case 6: sItem = "nw_maarcl064"; break; + case 7: sItem = "nw_maarcl074"; break; + case 8: sItem = "nw_maarcl069"; break; + case 9: sItem = "nw_maarcl068"; break; + case 10: sItem = "nw_ashmto003"; break; + case 11: sItem = "nw_ashmto009"; break; + case 12: sItem = "nw_maarcl076"; break; + case 13: sItem = "nw_maarcl086"; break; + case 14: sItem = "nw_maarcl081"; break; + case 15: sItem = "nw_maarcl080"; break; + } + + } + else if (GetRange(5, nHD)) // * 2500 - 16500 + { + int nRandom = Random(10) + 1; + switch (nRandom) + { + case 1: sItem = "nw_ashmto008"; break; + case 2: sItem = "nw_maarcl064"; break; + case 3: sItem = "nw_maarcl074"; break; + case 4: sItem = "nw_maarcl069"; break; + case 5: sItem = "nw_maarcl068"; break; + case 6: sItem = "nw_ashmto009"; break; + case 7: sItem = "nw_maarcl076"; break; + case 8: sItem = "nw_maarcl086"; break; + case 9: sItem = "nw_maarcl081"; break; + case 10: sItem = "nw_maarcl080"; break; + } + + + } + else if (GetRange(6, nHD)) // * 8000 - 25000 + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_ashmto009"; break; + case 2: sItem = "nw_maarcl076"; break; + case 3: sItem = "nw_maarcl086"; break; + case 4: sItem = "nw_maarcl081"; break; + case 5: sItem = "nw_maarcl080"; break; + } + + } + // dbSpeak("Create Generic heavy"); + + dbCreateItemOnObject(sItem, oTarget, 1); + } + // * + // * SPECIC TREASURE ITEMS (re: Named Items) + // * + void CreateSpecificMiscItem(object oTarget,object oAdventurer) + { + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + CreateGenericMiscItem(oTarget, oAdventurer, JUMP_LEVEL); + return; + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: CreateGenericMiscItem(oTarget, oAdventurer, JUMP_LEVEL); return; break; + case 2: sItem = "nw_maarcl057"; break; + case 3: sItem = "nw_it_mbelt005"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(13) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl057"; break; + case 2: sItem = "nw_it_mbelt005"; break; + case 3: sItem = "nw_maarcl101"; break; + case 4: sItem = "nw_maarcl102"; break; + case 5: sItem = "nw_maarcl103"; break; + case 6: sItem = "nw_it_mglove001"; break; + case 7: sItem = "nw_maarcl100"; break; + case 8: sItem = "nw_it_mbracer011"; break; + case 9: sItem = "nw_it_mmidmisc04"; break; + case 10: sItem = "nw_it_mring003"; break; + case 11: sItem = "nw_it_mbelt006"; break; + case 12: sItem = "nw_it_mbelt002"; break; + case 13: sItem = "nw_it_mmidmisc03"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(19) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl101"; break; + case 2: sItem = "nw_maarcl101"; break; + case 3: sItem = "nw_maarcl102"; break; + case 4: sItem = "nw_maarcl103"; break; + case 5: sItem = "nw_it_mglove001"; break; + case 6: sItem = "nw_maarcl100"; break; + case 7: sItem = "nw_it_mbracer011"; break; + case 8: sItem = "nw_it_mmidmisc04"; break; + case 9: sItem = "nw_it_mring003"; break; + case 10: sItem = "nw_it_mbelt006"; break; + case 11: sItem = "nw_it_mbelt002"; break; + case 12: sItem = "nw_it_mmidmisc03"; break; + case 13: sItem = "nw_it_mring002"; break; + case 14: sItem = "nw_it_mbelt004"; break; + case 15: sItem = "nw_it_mring005"; break; + case 16: sItem = "nw_it_mboots005"; break; + case 17: sItem = "nw_it_mring007"; break; + case 18: sItem = "nw_it_mneck003"; break; + case 19: sItem = "nw_it_mbelt007"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(15) + 1; + switch (nRandom) + { + case 1: sItem = "nw_it_mbelt002"; break; + case 2: sItem = "nw_it_mbelt002"; break; + case 3: sItem = "nw_it_mmidmisc03"; break; + case 4: sItem = "nw_it_mring002"; break; + case 5: sItem = "nw_it_mbelt004"; break; + case 6: sItem = "nw_it_mring005"; break; + case 7: sItem = "nw_it_mboots005"; break; + case 8: sItem = "nw_it_mring007"; break; + case 9: sItem = "nw_it_mneck003"; break; + case 10: sItem = "nw_it_mbelt007"; break; + case 11: sItem = "nw_it_mboots004"; break; + case 12: sItem = "nw_it_mboots003"; break; + case 13: sItem = "nw_it_mneck005"; break; + case 14: sItem = "nw_it_mbelt008"; break; + case 15: sItem = "nw_it_mring020"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(19) + 1; + switch (nRandom) + { + case 1: sItem = "nw_it_mboots004"; break; + case 2: sItem = "nw_it_mboots004"; break; + case 3: sItem = "nw_it_mboots003"; break; + case 4: sItem = "nw_it_mneck005"; break; + case 5: sItem = "nw_it_mbelt008"; break; + case 6: sItem = "nw_it_mring020"; break; + case 7: sItem = "nw_it_mbelt001"; break; + case 8: sItem = "nw_it_mring017"; break; + case 9: sItem = "nw_mcloth001"; break; + case 10: sItem = "nw_it_mneck019"; break; + case 11: sItem = "nw_it_mneck002"; break; + case 12: sItem = "nw_it_mneck004"; break; + case 13: sItem = "nw_it_mmidmisc01"; break; + case 14: sItem = "nw_mcloth002"; break; + case 15: sItem = "nw_mcloth003"; break; + case 16: sItem = "nw_mcloth004"; break; + case 17: sItem = "nw_it_mbelt003"; break; + // * new items + case 18: sItem = "NW_IT_MBELT020"; break; + case 19: sItem = "NW_IT_MBELT021"; break; + } + + } + dbCreateItemOnObject(sItem, oTarget, 1); + } + void CreateSpecificRodStaffWand(object oTarget, object oAdventurer) + { + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + CreateGenericRodStaffWand(oTarget, oAdventurer, JUMP_LEVEL); + return; + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + CreateGenericRodStaffWand(oTarget, oAdventurer, JUMP_LEVEL); + return; + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wmgst004"; break; + case 2: sItem = "nw_wmgst006"; break; + case 3: sItem = "nw_wmgmrd003"; break; + case 4: sItem = "nw_wmgst004"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(7) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wmgmrd003"; break; + case 2: sItem = "nw_wmgst006"; break; + case 3: sItem = "nw_wmgmrd003"; break; + case 4: sItem = "nw_wmgst004"; break; + case 5: sItem = "nw_wmgst005"; break; + case 6: sItem = "nw_wmgmrd004"; break; + case 7: sItem = "nw_wmgrd002"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(8) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmcl012"; break; + case 2: sItem = "nw_wmgmrd003"; break; + case 3: sItem = "nw_wmgst004"; break; + case 4: sItem = "nw_wmgst005"; break; + case 5: sItem = "nw_wblmcl012"; break; + case 6: sItem = "nw_wmgmrd004"; break; + case 7: sItem = "nw_wmgst002"; break; + case 8: sItem = "nw_wmgmrd005"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(6) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wmgmrd004"; break; + case 2: sItem = "nw_wmgst002"; break; + case 3: sItem = "nw_wmgmrd005"; break; + case 4: sItem = "nw_wmgmrd002"; break; + case 5: sItem = "nw_wmgst003"; break; + case 6: sItem = "nw_wblmcl012"; break; + } + + } + dbCreateItemOnObject(sItem, oTarget, 1); + } + + + void CreateSpecificSimple(object oTarget, object oAdventurer) + { + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + CreateGenericSimple(oTarget, oAdventurer, JUMP_LEVEL); + return; + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + CreateGenericSimple(oTarget, oAdventurer, JUMP_LEVEL); + return; + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(9) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmqs005"; break; + case 2: sItem = "nw_wdbmqs005"; break; + case 3: sItem = "nw_wdbmqs006"; break; + case 4: sItem = "nw_wbwmxh005"; break; + case 5: sItem = "nw_wbwmxl005"; break; + case 6: sItem = "nw_wswmdg006"; break; + case 7: sItem = "nw_wblmml006"; break; + case 8: sItem = "nw_wspmsc004"; break; + case 9: sItem = "nw_wblmms007"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(22) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmqs006"; break; + case 2: sItem = "nw_wdbmqs005"; break; + case 3: sItem = "nw_wdbmqs006"; break; + case 4: sItem = "nw_wbwmxh005"; break; + case 5: sItem = "nw_wbwmxl005"; break; + case 6: sItem = "nw_wswmdg006"; break; + case 7: sItem = "nw_wblmml006"; break; + case 8: sItem = "nw_wspmsc004"; break; + case 9: sItem = "nw_wblmms007"; break; + case 10: sItem = "nw_wblmms003"; break; + case 11: sItem = "nw_wblmcl004"; break; + case 12: sItem = "nw_wspmsc006"; break; + case 13: sItem = "nw_wspmsc006"; break; + case 14: sItem = "nw_wdbmqs004"; break; + case 15: sItem = "nw_wblmcl003"; break; + case 16: sItem = "nw_wbwmsl003"; break; + case 17: sItem = "nw_wbwmxh003"; break; + case 18: sItem = "nw_wspmsc003"; break; + case 19: sItem = "nw_wplmss005"; break; + case 20: sItem = "nw_wplmss005"; break; + case 21: sItem = "nw_wbwmxl003"; break; + case 22: sItem = "nw_wblmml004"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(27) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmms003"; break; + case 2: sItem = "nw_wblmms003"; break; + case 3: sItem = "nw_wblmcl004"; break; + case 4: sItem = "nw_wspmsc006"; break; + case 5: sItem = "nw_wspmsc006"; break; + case 6: sItem = "nw_wdbmqs004"; break; + case 7: sItem = "nw_wblmcl003"; break; + case 8: sItem = "nw_wbwmsl003"; break; + case 9: sItem = "nw_wbwmxh003"; break; + case 10: sItem = "nw_wspmsc003"; break; + case 11: sItem = "nw_wplmss005"; break; + case 12: sItem = "nw_wplmss005"; break; + case 13: sItem = "nw_wbwmxl003"; break; + case 14: sItem = "nw_wblmml004"; break; + case 15: sItem = "nw_wdbmqs003"; break; + case 16: sItem = "nw_wbwmxl004"; break; + case 17: sItem = "nw_wbwmxl007"; break; + case 18: sItem = "nw_wblmml005"; break; + case 19: sItem = "nw_wblmcl005"; break; + case 20: sItem = "nw_wplmss007"; break; + case 21: sItem = "nw_wswmdg004"; break; + case 22: sItem = "nw_wbwmsl007"; break; + case 23: sItem = "nw_wblmml007"; break; + case 24: sItem = "nw_wblmml007"; break; + case 25: sItem = "nw_wbwmxh004"; break; + case 26: sItem = "nw_wplmss006"; break; + case 27: sItem = "nw_wbwmxh007"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(31) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmxl003"; break; + case 2: sItem = "nw_wbwmxl003"; break; + case 3: sItem = "nw_wblmml004"; break; + case 4: sItem = "nw_wdbmqs003"; break; + case 5: sItem = "nw_wbwmxl004"; break; + case 6: sItem = "nw_wbwmxl007"; break; + case 7: sItem = "nw_wblmml005"; break; + case 8: sItem = "nw_wblmcl005"; break; + case 9: sItem = "nw_wplmss007"; break; + case 10: sItem = "nw_wswmdg004"; break; + case 11: sItem = "nw_wbwmsl007"; break; + case 12: sItem = "nw_wblmml007"; break; + case 13: sItem = "nw_wblmml007"; break; + case 14: sItem = "nw_wbwmxh004"; break; + case 15: sItem = "nw_wplmss006"; break; + case 16: sItem = "nw_wbwmxh007"; break; + case 17: sItem = "nw_wblmms006"; break; + case 18: sItem = "nw_wswmdg003"; break; + case 19: sItem = "nw_wswmdg007"; break; + case 20: sItem = "nw_wblmms004"; break; + case 21: sItem = "nw_wbwmsl006"; break; + case 22: sItem = "nw_wbwmsl008"; break; + case 23: sItem = "nw_wblmml008"; break; + case 24: sItem = "nw_wdbmqs007"; break; + case 25: sItem = "nw_wblmcl006"; break; + case 26: sItem = "nw_wbwmsl004"; break; + case 27: sItem = "nw_wbwmxh006"; break; + case 28: sItem = "nw_wplmss004"; break; + case 29: sItem = "nw_wswmdg005"; break; + case 30: sItem = "nw_wbwmxl006"; break; + case 31: sItem = "nw_wspmsc005"; break; + + } + + } + dbCreateItemOnObject(sItem, oTarget, 1); + } + void CreateSpecificMartial(object oTarget, object oAdventurer) + { + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + CreateGenericMartial(oTarget, oAdventurer, JUMP_LEVEL); + return; + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: CreateGenericMartial(oTarget, oAdventurer, JUMP_LEVEL); return; break; + case 2: sItem = "nw_wthmax005"; break; + case 3: sItem = "nw_wthmax007"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(14) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmax003"; break; + case 2: sItem = "nw_wthmax005"; break; + case 3: sItem = "nw_wthmax007"; break; + case 4: sItem = "nw_wthmax003"; break; + case 5: sItem = "nw_wthmax004"; break; + case 6: sItem = "nw_wthmax006"; break; + case 7: sItem = "nw_wswmrp004"; break; + case 8: sItem = "nw_wswmrp004"; break; + case 9: sItem = "nw_wblmfl004"; break; + case 10: sItem = "nw_wblmhl004"; break; + case 11: sItem = "nw_wbwmsh003"; break; + case 12: sItem = "nw_wblmhw006"; break; + case 13: sItem = "nw_wblmhw006"; break; + case 14: sItem = "nw_wbwmln004"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(28) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmfl005"; break; + case 2: sItem = "nw_wthmax007"; break; + case 3: sItem = "nw_wthmax003"; break; + case 4: sItem = "nw_wthmax004"; break; + case 5: sItem = "nw_wthmax006"; break; + case 6: sItem = "nw_wswmrp004"; break; + case 7: sItem = "nw_wswmrp004"; break; + case 8: sItem = "nw_wblmfl004"; break; + case 9: sItem = "nw_wblmhl004"; break; + case 10: sItem = "nw_wbwmsh003"; break; + case 11: sItem = "nw_wblmhw006"; break; + case 12: sItem = "nw_wblmhw006"; break; + case 13: sItem = "nw_wbwmln004"; break; + case 14: sItem = "nw_wblmfl005"; break; + case 15: sItem = "nw_wswmgs006"; break; + case 16: sItem = "nw_waxmgr003"; break; + case 17: sItem = "nw_wplmhb004"; break; + case 18: sItem = "nw_wblmhw005"; break; + case 19: sItem = "nw_wblmfh004"; break; + case 20: sItem = "nw_wblmfh008"; break; + case 21: sItem = "nw_wbwmsh006"; break; + case 22: sItem = "nw_wswmsc004"; break; + case 23: sItem = "nw_waxmgr006"; break; + case 24: sItem = "nw_wswmrp005"; break; + case 25: sItem = "nw_wswmls007"; break; + case 26: sItem = "nw_wswmgs004"; break; + case 27: sItem = "nw_waxmhn004"; break; + case 28: sItem = "nw_wswmbs005"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(42) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmhw006"; break; + case 2: sItem = "nw_wblmhw006"; break; + case 3: sItem = "nw_wblmhw006"; break; + case 4: sItem = "nw_wbwmln004"; break; + case 5: sItem = "nw_wblmfl005"; break; + case 6: sItem = "nw_wswmgs006"; break; + case 7: sItem = "nw_waxmgr003"; break; + case 8: sItem = "nw_wplmhb004"; break; + case 9: sItem = "nw_wblmhw005"; break; + case 10: sItem = "nw_wblmfh004"; break; + case 11: sItem = "nw_wblmfh008"; break; + case 12: sItem = "nw_wbwmsh006"; break; + case 13: sItem = "nw_wswmsc004"; break; + case 14: sItem = "nw_waxmgr006"; break; + case 15: sItem = "nw_wswmrp005"; break; + case 16: sItem = "nw_wswmls007"; break; + case 17: sItem = "nw_wswmgs004"; break; + case 18: sItem = "nw_waxmhn004"; break; + case 19: sItem = "nw_wswmbs005"; break; + case 20: sItem = "nw_wblmhl005"; break; + case 21: sItem = "nw_wblmhl011"; break; + case 22: sItem = "nw_wswmss005"; break; + case 23: sItem = "nw_wplmhb003"; break; + case 24: sItem = "nw_wbwmln007"; break; + case 25: sItem = "nw_wbwmln007"; break; + case 26: sItem = "nw_wbwmsh007"; break; + case 27: sItem = "nw_waxmbt006"; break; + case 28: sItem = "nw_wswmbs006"; break; + case 29: sItem = "nw_wblmfl007"; break; + case 30: sItem = "nw_waxmhn003"; break; + case 31: sItem = "nw_wblmhl006"; break; + case 32: sItem = "nw_wblmfl006"; break; + case 33: sItem = "nw_wswmls005"; break; + case 34: sItem = "nw_wswmss004"; break; + case 35: sItem = "nw_wbwmln006"; break; + case 36: sItem = "nw_wblmhw003"; break; + case 37: sItem = "nw_wblmfh006"; break; + case 38: sItem = "nw_wswmsc006"; break; + case 39: sItem = "nw_waxmhn005"; break; + case 40: sItem = "nw_wblmfh003"; break; + case 41: sItem = "nw_wswmls006"; break; + case 42: sItem = "nw_wswmrp007"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(55) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmhl005"; break; + case 2: sItem = "nw_wblmhl005"; break; + case 3: sItem = "nw_wblmhl011"; break; + case 4: sItem = "nw_wswmss005"; break; + case 5: sItem = "nw_wplmhb003"; break; + case 6: sItem = "nw_wbwmln007"; break; + case 7: sItem = "nw_wbwmln007"; break; + case 8: sItem = "nw_wbwmsh007"; break; + case 9: sItem = "nw_waxmbt006"; break; + case 10: sItem = "nw_wswmbs006"; break; + case 11: sItem = "nw_wblmfl007"; break; + case 12: sItem = "nw_waxmhn003"; break; + case 13: sItem = "nw_wblmhl006"; break; + case 14: sItem = "nw_wblmfl006"; break; + case 15: sItem = "nw_wswmls005"; break; + case 16: sItem = "nw_wswmss004"; break; + case 17: sItem = "nw_wbwmln006"; break; + case 18: sItem = "nw_wblmhw003"; break; + case 19: sItem = "nw_wblmfh006"; break; + case 20: sItem = "nw_wswmsc006"; break; + case 21: sItem = "nw_waxmhn005"; break; + case 22: sItem = "nw_wblmfh003"; break; + case 23: sItem = "nw_wswmls006"; break; + case 24: sItem = "nw_wswmrp007"; break; + case 25: sItem = "nw_wswmgs005"; break; + case 26: sItem = "nw_wswmgs005"; break; + case 27: sItem = "nw_waxmgr005"; break; + case 28: sItem = "nw_wplmhb007"; break; + case 29: sItem = "nw_wswmsc007"; break; + case 30: sItem = "nw_wswmrp006"; break; + case 31: sItem = "nw_wswmss006"; break; + case 32: sItem = "nw_wblmhl009"; break; + case 33: sItem = "nw_wswmbs007"; break; + case 34: sItem = "nw_wbwmln005"; break; + case 35: sItem = "nw_wblmfh005"; break; + case 36: sItem = "nw_wswmgs003"; break; + case 37: sItem = "nw_waxmbt003"; break; + case 38: sItem = "nw_wswmls004"; break; + case 39: sItem = "nw_wbwmsh005"; break; + case 40: sItem = "nw_wbwmsh005"; break; + case 41: sItem = "nw_waxmbt004"; break; + case 42: sItem = "nw_waxmbt004"; break; + case 43: sItem = "nw_wblmhl003"; break; + case 44: sItem = "nw_wblmhl003"; break; + case 45: sItem = "nw_wswmbs003"; break; + case 46: sItem = "nw_waxmbt005"; break; + case 47: sItem = "nw_waxmhn006"; break; + case 48: sItem = "nw_wswmss003"; break; + case 49: sItem = "nw_wswmsc005"; break; + case 50: sItem = "nw_wplmhb006"; break; + case 51: sItem = "nw_wbwmsh004"; break; + case 52: sItem = "nw_wswmbs004"; break; + case 53: sItem = "nw_wbwmln003"; break; + case 54: sItem = "nw_wblmhw004"; break; + case 55: sItem = "nw_waxmgr004"; break; + } + + } + dbCreateItemOnObject(sItem, oTarget, 1); + } + void CreateSpecificExotic(object oTarget, object oAdventurer) + { + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: CreateGenericExotic(oTarget, oAdventurer, JUMP_LEVEL); return; break; + case 2: sItem = "nw_wthmsh003"; break; + case 3: sItem = "nw_wthmsh006"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: CreateGenericExotic(oTarget, oAdventurer, JUMP_LEVEL); return; break; + case 2: sItem = "nw_wthmsh003"; break; + case 3: sItem = "nw_wthmsh006"; break; + case 4: sItem = "nw_wthmsh004"; break; + case 5: sItem = "nw_wthmsh007"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(14) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmsh006"; break; + case 2: sItem = "nw_wthmsh006"; break; + case 3: sItem = "nw_wthmsh004"; break; + case 4: sItem = "nw_wthmsh007"; break; + case 5: sItem = "nw_wspmku006"; break; + case 6: sItem = "nw_wdbmma003"; break; + case 7: sItem = "nw_wswmka005"; break; + case 8: sItem = "nw_wspmka004"; break; + case 9: sItem = "nw_wspmka007"; break; + case 10: sItem = "nw_wdbmax006"; break; + case 11: sItem = "nw_wdbmsw006"; break; + case 12: sItem = "nw_wspmku005"; break; + case 13: sItem = "nw_wdbmsw007"; break; + case 14: sItem = "nw_wspmka005"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(16) + 1; + switch (nRandom) + { + case 1:sItem = "nw_wthmsh007"; break; + case 2: sItem = "nw_wthmsh007"; break; + case 3: sItem = "nw_wspmku006"; break; + case 4: sItem = "nw_wdbmma003"; break; + case 5: sItem = "nw_wswmka005"; break; + case 6: sItem = "nw_wspmka004"; break; + case 7: sItem = "nw_wspmka007"; break; + case 8: sItem = "nw_wdbmax006"; break; + case 9: sItem = "nw_wdbmsw006"; break; + case 10: sItem = "nw_wspmku005"; break; + case 11: sItem = "nw_wdbmsw007"; break; + case 12: sItem = "nw_wspmka005"; break; + case 13: sItem = "nw_wplmsc003"; break; + case 14: sItem = "nw_wdbmax005"; break; + case 15: sItem = "nw_wspmku004"; break; + case 16: sItem = "nw_wdbmma005"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(17) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmsc003"; break; + case 2: sItem = "nw_wspmka005"; break; + case 3: sItem = "nw_wplmsc003"; break; + case 4: sItem = "nw_wdbmax005"; break; + case 5: sItem = "nw_wspmku004"; break; + case 6: sItem = "nw_wdbmma005"; break; + case 7: sItem = "nw_wdbmma005"; break; + case 8: sItem = "nw_wdbmax004"; break; + case 9: sItem = "nw_wdbmma004"; break; + case 10: sItem = "nw_wswmka007"; break; + case 11: sItem = "nw_wdbmsw005"; break; + case 12: sItem = "nw_wspmka006"; break; + case 13: sItem = "nw_wspmka003"; break; + case 14: sItem = "nw_wdbmax007"; break; + case 15: sItem = "nw_wplmsc006"; break; + case 16: sItem = "nw_wspmku007"; break; + case 17: sItem = "nw_wdbmma006"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(21) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmma005"; break; + case 2: sItem = "nw_wdbmma005"; break; + case 3: sItem = "nw_wdbmma005"; break; + case 4: sItem = "nw_wdbmax004"; break; + case 5: sItem = "nw_wdbmma004"; break; + case 6: sItem = "nw_wswmka007"; break; + case 7: sItem = "nw_wdbmsw005"; break; + case 8: sItem = "nw_wspmka006"; break; + case 9: sItem = "nw_wspmka003"; break; + case 10: sItem = "nw_wdbmax007"; break; + case 11: sItem = "nw_wplmsc006"; break; + case 12: sItem = "nw_wspmku007"; break; + case 13: sItem = "nw_wdbmma006"; break; + case 14: sItem = "nw_wspmku003"; break; + case 15: sItem = "nw_wswmka006"; break; + case 16: sItem = "nw_wplmsc005"; break; + case 17: sItem = "nw_wplmsc005"; break; + case 18: sItem = "nw_wswmka004"; break; + case 19: sItem = "nw_wswmka004"; break; + case 20: sItem = "nw_wdbmsw004"; break; + case 21: sItem = "nw_wplmsc004"; break; + } + + } + dbCreateItemOnObject(sItem, oTarget, 1); + } + void CreateSpecificLightArmor(object oTarget, object oAdventurer) + { + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + CreateGenericLightArmor(oTarget, oAdventurer, JUMP_LEVEL); + return; + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: CreateGenericLightArmor(oTarget, oAdventurer, JUMP_LEVEL); return; break; + case 2: sItem = "nw_ashmsw011"; break; + case 3: sItem = "nw_ashmsw010"; break; + } + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(9) + 1; + switch (nRandom) + { + case 1: sItem = "nw_ashmsw011"; break; + case 2: sItem = "nw_ashmsw011"; break; + case 3: sItem = "nw_ashmsw010"; break; + case 4: sItem = "nw_maarcl011"; break; + case 5: sItem = "nw_ashmsw006"; break; + case 6: sItem = "nw_maarcl017"; break; + case 7: sItem = "nw_ashmsw005"; break; + case 8: sItem = "nw_maarcl013"; break; + case 9: sItem = "nw_maarcl012"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(13) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl011"; break; + case 2: sItem = "nw_maarcl011"; break; + case 3: sItem = "nw_ashmsw006"; break; + case 4: sItem = "nw_maarcl017"; break; + case 5: sItem = "nw_ashmsw005"; break; + case 6: sItem = "nw_maarcl013"; break; + case 7: sItem = "nw_maarcl012"; break; + case 8: sItem = "nw_ashmsw004"; break; + case 9: sItem = "nw_maarcl006"; break; + case 10: sItem = "nw_maarcl032"; break; + case 11: sItem = "nw_maarcl003"; break; + case 12: sItem = "nw_maarcl002"; break; + case 13: sItem = "nw_maarcl007"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(11) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl012"; break; + case 2: sItem = "nw_maarcl012"; break; + case 3: sItem = "nw_ashmsw004"; break; + case 4: sItem = "nw_maarcl006"; break; + case 5: sItem = "nw_maarcl032"; break; + case 6: sItem = "nw_maarcl003"; break; + case 7: sItem = "nw_maarcl002"; break; + case 8: sItem = "nw_maarcl005"; break; + case 9: sItem = "nw_ashmsw003"; break; + case 10: sItem = "nw_maarcl001"; break; + case 11: sItem = "nw_maarcl034"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(11) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl005"; break; + case 2: sItem = "nw_maarcl005"; break; + case 3: sItem = "nw_ashmsw003"; break; + case 4: sItem = "nw_maarcl001"; break; + case 5: sItem = "nw_maarcl034"; break; + case 6: sItem = "nw_maarcl008"; break; + case 7: sItem = "nw_ashmsw007"; break; + case 8: sItem = "nw_maarcl033"; break; + case 9: sItem = "nw_mcloth005"; break; + case 10: sItem = "nw_maarcl009"; break; + case 11: sItem = "nw_maarcl004"; break; + } + + } + dbCreateItemOnObject(sItem, oTarget, 1); + } + void CreateSpecificMediumArmor(object oTarget, object oAdventurer) + { + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + CreateGenericMediumArmor(oTarget, oAdventurer, JUMP_LEVEL); + return; + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + CreateGenericMediumArmor(oTarget, oAdventurer, JUMP_LEVEL); + return; + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_armhe008"; break; + case 2: sItem = "nw_armhe008"; break; + case 3: sItem = "nw_armhe007"; break; + case 4: sItem = "nw_armhe009"; break; + case 5: sItem = "nw_armhe010"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(9) + 1; + switch (nRandom) + { + case 1: sItem = "nw_armhe008"; break; + case 2: sItem = "nw_armhe008"; break; + case 3: sItem = "nw_armhe007"; break; + case 4: sItem = "nw_armhe009"; break; + case 5: sItem = "nw_armhe010"; break; + case 6: sItem = "nw_armhe006"; break; + case 7: sItem = "nw_ashmlw007"; break; + case 8: sItem = "nw_ashmlw005"; break; + case 9: sItem = "nw_maarcl016"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(12) + 1; + switch (nRandom) + { + case 1: sItem = "nw_armhe009"; break; + case 2: sItem = "nw_armhe009"; break; + case 3: sItem = "nw_armhe010"; break; + case 4: sItem = "nw_armhe006"; break; + case 5: sItem = "nw_ashmlw007"; break; + case 6: sItem = "nw_ashmlw005"; break; + case 7: sItem = "nw_maarcl016"; break; + case 8: sItem = "nw_maarcl036"; break; + case 9: sItem = "nw_ashmlw004"; break; + case 10: sItem = "nw_maarcl037"; break; + case 11: sItem = "nw_maarcl040"; break; + case 12: sItem = "nw_ashmlw006"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(12) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl016"; break; + case 2: sItem = "nw_maarcl016"; break; + case 3: sItem = "nw_maarcl036"; break; + case 4: sItem = "nw_ashmlw004"; break; + case 5: sItem = "nw_maarcl037"; break; + case 6: sItem = "nw_maarcl040"; break; + case 7: sItem = "nw_ashmlw006"; break; + case 8: sItem = "nw_ashmlw003"; break; + case 9: sItem = "nw_maarcl014"; break; + case 10: sItem = "nw_maarcl039"; break; + case 11: sItem = "nw_maarcl010"; break; + case 12: sItem = "nw_maarcl015"; break; + } + + } + dbCreateItemOnObject(sItem, oTarget, 1); + } + void CreateSpecificHeavyArmor(object oTarget, object oAdventurer) + { + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + CreateGenericHeavyArmor(oTarget, oAdventurer, JUMP_LEVEL); + return; + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + CreateGenericHeavyArmor(oTarget, oAdventurer, JUMP_LEVEL); + return; + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(6) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl026"; break; + case 2: sItem = "nw_maarcl026"; break; + case 3: sItem = "nw_maarcl021"; break; + case 4: sItem = "nw_ashmto003"; break; + case 5: sItem = "nw_maarcl029"; break; + case 6: sItem = "nw_maarcl020"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(13) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl021"; break; + case 2: sItem = "nw_maarcl026"; break; + case 3: sItem = "nw_maarcl021"; break; + case 4: sItem = "nw_ashmto003"; break; + case 5: sItem = "nw_maarcl029"; break; + case 6: sItem = "nw_maarcl020"; break; + case 7: sItem = "nw_ashmto006"; break; + case 8: sItem = "nw_maarcl041"; break; + case 9: sItem = "nw_ashmto005"; break; + case 10: sItem = "nw_ashmto007"; break; + case 11: sItem = "nw_ashmto010"; break; + case 12: sItem = "nw_maarcl022"; break; + case 13: sItem = "nw_maarcl018"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(13) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl020"; break; + case 2: sItem = "nw_maarcl020"; break; + case 3: sItem = "nw_ashmto006"; break; + case 4: sItem = "nw_maarcl041"; break; + case 5: sItem = "nw_ashmto005"; break; + case 6: sItem = "nw_ashmto007"; break; + case 7: sItem = "nw_ashmto010"; break; + case 8: sItem = "nw_maarcl022"; break; + case 9: sItem = "nw_maarcl018"; break; + case 10: sItem = "nw_maarcl024"; break; + case 11: sItem = "nw_ashmto011"; break; + case 12: sItem = "nw_maarcl042"; break; + case 13: sItem = "nw_maarcl054"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(10) + 1; + switch (nRandom) + { + case 1: sItem = "nw_maarcl018"; break; + case 2: sItem = "nw_maarcl018"; break; + case 3: sItem = "nw_maarcl024"; break; + case 4: sItem = "nw_ashmto011"; break; + case 5: sItem = "nw_maarcl042"; break; + case 6: sItem = "nw_maarcl054"; break; + case 7: sItem = "nw_ashmto004"; break; + case 8: sItem = "nw_maarcl025"; break; + case 9: sItem = "nw_maarcl028"; break; + case 10: sItem = "nw_maarcl027"; break; + } + + } + dbCreateItemOnObject(sItem, oTarget, 1); + + } + // * if nSpecific is = 1 then spawn in 'named' items at the higher levels + void CreateTable2Item(object oTarget, object oAdventurer, int nSpecific=0) + { + //dbSpeak("In CreateTable2Item"); + string sItem = ""; + int nProbMisc = 0; + int nProbClass = 0; + int nProbRodStaffWand = 0; + int nProbSimple = 0; + int nProbMartial = 0; + int nProbExotic = 0; + int nProbLight = 0; + int nProbMedium = 0; + int nProbHeavy = 0; + + int nSpecialRanger = 0; // 2 Means to treat the ranger as a barbarian. A 1 is to treat it as a fighter + + + // * May 2002: Changed using Preston's multiclass function + // * it randomly chooses one of your classes + int nClass = nDetermineClassToUse(oAdventurer); + + + // * SPECIAL RANGER BEHAVIOR + // * If the ranger has the Heavy Armor proficiency, will treat the ranger + if ( nClass == CLASS_TYPE_RANGER && GetHasFeat(FEAT_ARMOR_PROFICIENCY_HEAVY)) + { + nSpecialRanger = 1; + } + else + if (nClass == CLASS_TYPE_RANGER) + { + nSpecialRanger = 2; + } + + + + //* SETUP probabilities based on Class + if ( nClass == CLASS_TYPE_FIGHTER || nClass == CLASS_TYPE_PALADIN || nSpecialRanger == 1 + || nClass == CLASS_TYPE_ANTI_PALADIN || nClass == CLASS_TYPE_BRAWLER || nClass == CLASS_TYPE_CRUSADER + || nClass == CLASS_TYPE_DUSKBLADE || nClass == CLASS_TYPE_KNIGHT || nClass == CLASS_TYPE_MARSHAL + || nClass == CLASS_TYPE_PSYWAR || nClass == CLASS_TYPE_SOHEI) + { + //dbSpeak("I am fighter or paladin or heavy ranger"); + nProbMisc = 20; + nProbClass = 0; + nProbRodStaffWand = 5; + nProbSimple = 5; + nProbMartial = 20; + nProbExotic = 10; + nProbLight = 5; + nProbMedium = 15; + nProbHeavy = 20; + } + else + if (nClass == CLASS_TYPE_WIZARD || nClass == CLASS_TYPE_SORCERER) + { + //dbSpeak("I am wizard or sorcerer"); + nProbMisc = 40; + nProbClass = 30; + nProbRodStaffWand = 15; + nProbSimple = 3; + nProbMartial = 3; + nProbExotic = 3; + nProbLight = 2; + nProbMedium = 2; + nProbHeavy = 2; + } + else + if (nClass == CLASS_TYPE_BARBARIAN || nSpecialRanger == 2 || nClass == CLASS_TYPE_BOWMAN + || nClass == CLASS_TYPE_HEXBLADE || nClass == CLASS_TYPE_WARBLADE) + { + //dbSpeak("I am barbarian or light ranger"); + + nProbMisc = 20; + nProbClass = 0; + nProbRodStaffWand = 5; + nProbSimple = 17; + nProbMartial = 27; + nProbExotic = 15; + nProbLight = 8; + nProbMedium = 5; + nProbHeavy = 3; + } + else + if (nClass == CLASS_TYPE_ARCHIVIST || nClass == CLASS_TYPE_DRAGON_SHAMAN || nClass == CLASS_TYPE_FAVOURED_SOUL + || nClass == CLASS_TYPE_MYSTIC || nClass == CLASS_TYPE_WARMAGE || nClass == CLASS_TYPE_TEMPLAR) + { + //type 1 + nProbMisc = 25; + nProbClass = 0; + nProbRodStaffWand = 15; + nProbSimple = 15; + nProbMartial = 8; + nProbExotic = 6; + nProbLight = 15; + nProbMedium = 10; + nProbHeavy = 6; + } + else + if (nClass == CLASS_TYPE_NOBLE || nClass == CLASS_TYPE_SWASHBUCKLER || nClass == CLASS_TYPE_SWORDSAGE + || nClass == CLASS_TYPE_ULTIMATE_RANGER) + { + //type 2 + nProbMisc = 27; + nProbClass = 0; + nProbRodStaffWand = 5; + nProbSimple = 15; + nProbMartial = 20; + nProbExotic = 10; + nProbLight = 10; + nProbMedium = 8; + nProbHeavy = 5; + } + else + if (nClass == CLASS_TYPE_BEGUILER || nClass == CLASS_TYPE_DREAD_NECROMANCER || nClass == CLASS_TYPE_HEALER + || nClass == CLASS_TYPE_SCOUT || nClass == CLASS_TYPE_SHAMAN || nClass == CLASS_TYPE_SOULKNIFE + || nClass == CLASS_TYPE_TRUENAMER || nClass == CLASS_TYPE_WARLOCK || nClass == CLASS_TYPE_WILDER) + { + //type 3 + nProbMisc = 45; + nProbClass = 0; + nProbRodStaffWand = 7; + nProbSimple = 15; + nProbMartial = 5; + nProbExotic = 5; + nProbLight = 15; + nProbMedium = 4; + nProbHeavy = 4; + } + else + if (nClass == CLASS_TYPE_DRAGONFIRE_ADEPT || nClass == CLASS_TYPE_PSION || nClass == CLASS_TYPE_WITCH) + { + //type 4 + nProbMisc = 50; + nProbClass = 0; + nProbRodStaffWand = 10; + nProbSimple = 20; + nProbMartial = 5; + nProbExotic = 5; + nProbLight = 4; + nProbMedium = 3; + nProbHeavy = 3; + } + else + if (nClass == CLASS_TYPE_NINJA) + { + //type 5 + nProbMisc = 45; + nProbClass = 0; + nProbRodStaffWand = 2; + nProbSimple = 12; + nProbMartial = 6; + nProbExotic = 26; + nProbLight = 3; + nProbMedium = 3; + nProbHeavy = 3; + } + else + if (nClass == CLASS_TYPE_CW_SAMURAI || nClass == CLASS_TYPE_SAMURAI) + { + //type 6 + nProbMisc = 25; + nProbClass = 0; + nProbRodStaffWand = 5; + nProbSimple = 5; + nProbMartial = 10; + nProbExotic = 20; + nProbLight = 10; + nProbMedium = 20; + nProbHeavy = 5; + } + else + if (nClass == CLASS_TYPE_CLERIC) + { + //dbSpeak("I am cleric"); + + nProbMisc = 20; + nProbClass = 10; + nProbRodStaffWand = 10; + nProbSimple = 25; + nProbMartial = 7; + nProbExotic = 5; + nProbLight = 5; + nProbMedium = 8; + nProbHeavy = 10; + } + else + if (nClass == CLASS_TYPE_DRUID) + { + //dbSpeak("I am druid"); + + nProbMisc = 20; + nProbClass = 25; + nProbRodStaffWand = 15; + nProbSimple = 10; + nProbMartial = 5; + nProbExotic = 5; + nProbLight = 10; + nProbMedium = 5; + nProbHeavy = 5; + } + else + if (nClass == CLASS_TYPE_MONK) + { + //dbSpeak("I am monk"); + nProbMisc = 20; + nProbClass = 50; + nProbRodStaffWand = 2; + nProbSimple = 7; + nProbMartial = 2; + nProbExotic = 7; + nProbLight = 4; + nProbMedium = 4; + nProbHeavy = 4; + } + else + if (nClass == CLASS_TYPE_ROGUE || nClass == CLASS_TYPE_PSYCHIC_ROGUE) + { + //dbSpeak("I am rogue"); + + nProbMisc = 25; + nProbClass = 10; + nProbRodStaffWand = 10; + nProbSimple = 25; + nProbMartial = 5; + nProbExotic = 5; + nProbLight = 10; + nProbMedium = 5; + nProbHeavy = 5; + } + else + if (nClass == CLASS_TYPE_BARD) + { + //dbSpeak("I am bard"); + + nProbMisc = 25; + nProbClass = 5; + nProbRodStaffWand = 5; + nProbSimple = 25; + nProbMartial = 10; + nProbExotic = 10; + nProbLight = 10; + nProbMedium = 5; + nProbHeavy = 5; + } + //else + //{ + // dbSpeak("No Valid Class"); + //} + //dbSpeak("Table2Item: After Class Distribution"); + //* Create Items based on Probabilities + int nRandom = d100(); + if (nRandom <= nProbMisc) + { + if (nSpecific == 0) CreateGenericMiscItem(oTarget, oAdventurer); + else CreateSpecificMiscItem(oTarget, oAdventurer); + + } + else + if (nRandom <= nProbMisc + nProbClass) + { // * no need for a seperate specific function here + CreateGenericClassItem(oTarget, oAdventurer, nSpecific); + } + else + if (nRandom <= nProbMisc + nProbClass + nProbRodStaffWand) + { + if (nSpecific == 0) CreateGenericRodStaffWand(oTarget, oAdventurer); + else CreateSpecificRodStaffWand(oTarget, oAdventurer); + } + else + if (nRandom <= nProbMisc + nProbClass + nProbRodStaffWand + nProbSimple) + { + if (nSpecific == 0) CreateGenericSimple(oTarget, oAdventurer); + else CreateSpecificSimple(oTarget, oAdventurer); + } + else + if (nRandom <= nProbMisc + nProbClass + nProbRodStaffWand + nProbSimple + nProbMartial) + { + + if (nSpecific == 0) CreateGenericMartial(oTarget, oAdventurer); + else CreateSpecificMartial(oTarget, oAdventurer); + } + else + if (nRandom <= nProbMisc + nProbClass + nProbRodStaffWand + nProbSimple + nProbMartial + nProbExotic) + { + if (nSpecific == 0) CreateGenericExotic(oTarget, oAdventurer); + else CreateSpecificExotic(oTarget, oAdventurer); + } + else + if (nRandom <= nProbMisc + nProbClass + nProbRodStaffWand + nProbSimple + nProbMartial + nProbExotic + nProbLight) + { + if (nSpecific == 0) CreateGenericLightArmor(oTarget, oAdventurer); + else CreateSpecificLightArmor(oTarget, oAdventurer); + } + else + if (nRandom <= nProbMisc + nProbClass + nProbRodStaffWand + nProbSimple + nProbMartial + nProbExotic + nProbLight + nProbMedium) + { + if (nSpecific == 0) CreateGenericMediumArmor(oTarget, oAdventurer); + else CreateSpecificMediumArmor(oTarget, oAdventurer); + } + else + if (nRandom <= nProbMisc + nProbClass + nProbRodStaffWand + nProbSimple + nProbMartial + nProbExotic + nProbLight + nProbMedium + nProbHeavy) + { + if (nSpecific == 0) CreateGenericHeavyArmor(oTarget, oAdventurer); + else CreateSpecificHeavyArmor(oTarget, oAdventurer); + } + //else + //{ + // dbSpeak("Generic Generic or Specific; error: 3524"); + //} + } + +//:://///////////////////////////////////////////// +//:: GenerateTreasure +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Generate Treasure + NOTE: When used by NPCs, the treasure is scaled + to how powerful the NPC is. + + If used by containers, it is scaled by how + powerful the PC is. + + PARAMETERS + oLastOpener = The creature that opened the container + oCreateOn = The place to put the treasure. If this is + invalid then the treasure is placed on oLastOpener + + +*/ +//::////////////////////////////////////////////// +//:: Created By: Andrew +//:: Created On: +//::////////////////////////////////////////////// +void GenerateTreasure(int nTreasureType, object oLastOpener, object oCreateOn) +{ + + //dbSpeak("*********************NEW TREASURE*************************"); + + // * abort treasure if no one opened the container + if (GetIsObjectValid(oLastOpener) == FALSE) + { + //dbSpeak("Aborted. No valid Last Opener"); + return; + } + + // * if no valid create on object, then create on oLastOpener + if (oCreateOn == OBJECT_INVALID) + { + oCreateOn = oLastOpener; + } + + // * if an Animal then generate 100% animal treasure + + // not done yet + // * VARIABLES + int nProbBook = 0; + int nProbAnimal = 0; + int nProbJunk = 0; + int nProbGold = 0; + int nProbGem = 0; + int nProbJewel = 0; + int nProbArcane = 0; + int nProbDivine = 0; + int nProbAmmo = 0; + int nProbKit = 0; + int nProbPotion = 0; + int nProbTable2 = 0; + + int nSpecific = 0; + int i = 0; + int nNumberItems = GetNumberOfItems(nTreasureType); + + // * Set Treasure Type Values + if (nTreasureType == TREASURE_LOW) + { + nProbBook = LOW_PROB_BOOK; + nProbAnimal = LOW_PROB_ANIMAL; + nProbJunk = LOW_PROB_JUNK; + nProbGold = LOW_PROB_GOLD; + nProbGem = LOW_PROB_GEM; + nProbJewel = LOW_PROB_JEWEL; + nProbArcane = LOW_PROB_ARCANE; + nProbDivine = LOW_PROB_DIVINE; + nProbAmmo = LOW_PROB_AMMO ; + nProbKit = LOW_PROB_KIT; + nProbPotion = LOW_PROB_POTION; + nProbTable2 = LOW_PROB_TABLE2; + } + else if (nTreasureType == TREASURE_MEDIUM) + { + nProbBook = MEDIUM_PROB_BOOK; + nProbAnimal = MEDIUM_PROB_ANIMAL; + nProbJunk = MEDIUM_PROB_JUNK; + nProbGold = MEDIUM_PROB_GOLD; + nProbGem = MEDIUM_PROB_GEM; + nProbJewel = MEDIUM_PROB_JEWEL; + nProbArcane = MEDIUM_PROB_ARCANE; + nProbDivine = MEDIUM_PROB_DIVINE; + nProbAmmo = MEDIUM_PROB_AMMO ; + nProbKit = MEDIUM_PROB_KIT; + nProbPotion = MEDIUM_PROB_POTION; + nProbTable2 = MEDIUM_PROB_TABLE2; + } + else if (nTreasureType == TREASURE_HIGH) + { + nProbBook = HIGH_PROB_BOOK; + nProbAnimal = HIGH_PROB_ANIMAL; + nProbJunk = HIGH_PROB_JUNK; + nProbGold = HIGH_PROB_GOLD; + nProbGem = HIGH_PROB_GEM; + nProbJewel = HIGH_PROB_JEWEL; + nProbArcane = HIGH_PROB_ARCANE; + nProbDivine = HIGH_PROB_DIVINE; + nProbAmmo = HIGH_PROB_AMMO ; + nProbKit = HIGH_PROB_KIT; + nProbPotion = HIGH_PROB_POTION; + nProbTable2 = HIGH_PROB_TABLE2; + } + else if (nTreasureType == TREASURE_BOSS) + { //dbSpeak("boss"); + nProbTable2 = 100; + nSpecific = 1; + } + else if (nTreasureType == TREASURE_BOOK) + { + nProbBook = 90; + nProbArcane = 6; + nProbDivine = 4; + } + + //dbSpeak("Generate Treasure nSpecific = " + IntToString(nSpecific)); + + for (i = 1; i <= nNumberItems; i++) + { + int nRandom = d100(); + if (nRandom <= nProbBook) + CreateBook(oCreateOn); // * Book + else if (nRandom <= nProbBook + nProbAnimal) + CreateAnimalPart(oCreateOn); // * Animal + else if (nRandom <= nProbBook + nProbAnimal + nProbJunk) + CreateJunk(oCreateOn); // * Junk + else if (nRandom <= nProbBook + nProbAnimal + nProbJunk + nProbGold) + CreateGold(oCreateOn, oLastOpener, nTreasureType); // * Gold + else if (nRandom <= nProbBook + nProbAnimal + nProbJunk + nProbGold + nProbGem) + CreateGem(oCreateOn, oLastOpener, nTreasureType); // * Gem + else if (nRandom <= nProbBook + nProbAnimal + nProbJunk + nProbGold + nProbGem + nProbJewel) + CreateJewel(oCreateOn, oLastOpener, nTreasureType); // * Jewel + else if (nRandom <= nProbBook + nProbAnimal + nProbJunk + nProbGold + nProbGem + nProbJewel + nProbArcane) + CreateArcaneScroll(oCreateOn, oLastOpener); // * Arcane Scroll + else if (nRandom <= nProbBook + nProbAnimal + nProbJunk + nProbGold + nProbGem + nProbJewel + nProbArcane + nProbDivine) + CreateDivineScroll(oCreateOn, oLastOpener); // * Divine Scroll + else if (nRandom <= nProbBook + nProbAnimal + nProbJunk + nProbGold + nProbGem + nProbJewel + nProbArcane + nProbDivine + nProbAmmo) + CreateAmmo(oCreateOn, oLastOpener); // * Ammo + else if (nRandom <= nProbBook + nProbAnimal + nProbJunk + nProbGold + nProbGem + nProbJewel + nProbArcane + nProbDivine + nProbAmmo + nProbKit) + CreateKit(oCreateOn, oLastOpener); // * Healing, Trap, or Thief kit + else if (nRandom <= nProbBook + nProbAnimal + nProbJunk + nProbGold + nProbGem + nProbJewel + nProbArcane + nProbDivine + nProbAmmo + nProbKit + nProbPotion) + CreatePotion(oCreateOn, oLastOpener); // * Potion + else if (nRandom <= nProbBook + nProbAnimal + nProbJunk + nProbGold + nProbGem + nProbJewel + nProbArcane + nProbDivine + nProbAmmo + nProbKit + nProbPotion + nProbTable2) + { + CreateTable2Item(oCreateOn, oLastOpener, nSpecific); // * Weapons, Armor, Misc - Class based + } + //else + // dbSpeak("other stuff"); + + + + } +} +void GenerateLowTreasure(object oLastOpener, object oCreateOn=OBJECT_INVALID) +{ + GenerateTreasure(TREASURE_LOW, oLastOpener, oCreateOn); +} +void GenerateMediumTreasure(object oLastOpener, object oCreateOn=OBJECT_INVALID) +{ + GenerateTreasure(TREASURE_MEDIUM, oLastOpener, oCreateOn); +} +void GenerateHighTreasure(object oLastOpener, object oCreateOn=OBJECT_INVALID) +{ + GenerateTreasure(TREASURE_HIGH, oLastOpener, oCreateOn); +} +void GenerateBossTreasure(object oLastOpener, object oCreateOn=OBJECT_INVALID) +{ + GenerateTreasure(TREASURE_BOSS, oLastOpener, oCreateOn); +} +void GenerateBookTreasure(object oLastOpener, object oCreateOn=OBJECT_INVALID) +{ + GenerateTreasure(TREASURE_BOOK, oLastOpener, oCreateOn); +} +//:://///////////////////////////////////////////// +//:: GenerateNPCTreasure +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Preferrably called from OnSpawn scripts. + Use the random treasure functions to generate + appropriate treasure for the creature to drop. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: January 2002 +//::////////////////////////////////////////////// + +void GenerateNPCTreasure(int nTreasureValue=1, object oTreasureGetter=OBJECT_SELF, object oKiller=OBJECT_SELF) +{ + //DestroyObject(OBJECT_SELF); + // * if I am an animal ,then give me animal stuff instead + if (GetObjectType(oTreasureGetter) == OBJECT_TYPE_CREATURE) + { + if ( + (GetRacialType(oTreasureGetter) == RACIAL_TYPE_UNDEAD) || + (GetRacialType(oTreasureGetter) == RACIAL_TYPE_ANIMAL) || + (GetRacialType(oTreasureGetter) == RACIAL_TYPE_BEAST) || + (GetRacialType(oTreasureGetter) == RACIAL_TYPE_MAGICAL_BEAST) || + (GetRacialType(oTreasureGetter) == RACIAL_TYPE_VERMIN) + ) + { + //CreateAnimalPart(oTreasureGetter); + // April 23 2002: Removed animal parts. They are silly. + return; + } + } + + if (nTreasureValue == 1) + { + // April 2002: 30% chance of not getting any treasure now + // if a creature + if (Random(100)+1 >= 75) + { + GenerateTreasure(TREASURE_LOW, oTreasureGetter, oKiller); + } + } + else + if (nTreasureValue == 2) + { + GenerateTreasure(TREASURE_MEDIUM, oTreasureGetter, oKiller); + } + else + if (nTreasureValue == 3) + { + GenerateTreasure(TREASURE_HIGH, oTreasureGetter, oKiller); + } + else + if (nTreasureValue == 4) + { + GenerateBossTreasure(oKiller, oTreasureGetter); + } + +} + +// * +// * Theft Prevention +// * + +//:://///////////////////////////////////////////// +//:: ShoutDisturbed +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + +*/ +//::////////////////////////////////////////////// +//:: Created By: +//:: Created On: +//::////////////////////////////////////////////// + +// * Container shouts if disturbed +void ShoutDisturbed() +{ + if (GetIsDead(OBJECT_SELF) == TRUE) + { + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF), TRUE, OBJECT_TYPE_CREATURE); + //Cycle through the targets within the spell shape until an invalid object is captured. + while (GetIsObjectValid(oTarget)) + { + if (GetFactionEqual(oTarget, OBJECT_SELF) == TRUE) + { + // * Make anyone who is a member of my faction hostile if I am violated + object oAttacker = GetLastAttacker(); + SetIsTemporaryEnemy(oAttacker,oTarget); + AssignCommand(oTarget, ActionAttack(oAttacker)); + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF), TRUE, OBJECT_TYPE_CREATURE); + } + } + else if (GetIsOpen(OBJECT_SELF) == TRUE) + { + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF), TRUE, OBJECT_TYPE_CREATURE); + //Cycle through the targets within the spell shape until an invalid object is captured. + while (GetIsObjectValid(oTarget)) + { + if (GetFactionEqual(oTarget, OBJECT_SELF) == TRUE) + { + // * Make anyone who is a member of my faction hostile if I am violated + object oAttacker = GetLastOpener(); + SetIsTemporaryEnemy(oAttacker,oTarget); + AssignCommand(oTarget, ActionAttack(oAttacker)); + + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF), TRUE, OBJECT_TYPE_CREATURE); + } + } +} + +int nGetIsBaseClass(int nClass) +{ + return (nClass <= CLASS_TYPE_WIZARD || + nClass == CLASS_TYPE_ANTI_PALADIN || + nClass == CLASS_TYPE_ARCHIVIST || + nClass == CLASS_TYPE_BEGUILER || + nClass == CLASS_TYPE_BOWMAN || + nClass == CLASS_TYPE_BRAWLER || + nClass == CLASS_TYPE_CRUSADER || + nClass == CLASS_TYPE_DRAGON_SHAMAN || + nClass == CLASS_TYPE_DRAGONFIRE_ADEPT || + nClass == CLASS_TYPE_DREAD_NECROMANCER || + nClass == CLASS_TYPE_DUSKBLADE || + nClass == CLASS_TYPE_FAVOURED_SOUL || + nClass == CLASS_TYPE_HEALER || + nClass == CLASS_TYPE_HEXBLADE || + nClass == CLASS_TYPE_KNIGHT || + nClass == CLASS_TYPE_MARSHAL || + nClass == CLASS_TYPE_MYSTIC || + nClass == CLASS_TYPE_NINJA || + nClass == CLASS_TYPE_NOBLE || + nClass == CLASS_TYPE_PSION || + nClass == CLASS_TYPE_PSYWAR || + nClass == CLASS_TYPE_PSYCHIC_ROGUE || + nClass == CLASS_TYPE_SAMURAI || + nClass == CLASS_TYPE_CW_SAMURAI || + nClass == CLASS_TYPE_SCOUT || + nClass == CLASS_TYPE_SHAMAN || + nClass == CLASS_TYPE_SOHEI || + nClass == CLASS_TYPE_SOULKNIFE || + nClass == CLASS_TYPE_SWASHBUCKLER || + nClass == CLASS_TYPE_SWORDSAGE || + nClass == CLASS_TYPE_TRUENAMER || + nClass == CLASS_TYPE_ULTIMATE_RANGER || + nClass == CLASS_TYPE_WARBLADE || + nClass == CLASS_TYPE_WARLOCK || + nClass == CLASS_TYPE_WARMAGE || + nClass == CLASS_TYPE_WILDER || + nClass == CLASS_TYPE_WITCH || + nClass == CLASS_TYPE_TEMPLAR); +} + +//:://///////////////////////////////////////////// +//:: Determine Class to Use +//:: Copyright (c) 2002 Bioware Corp. +//::////////////////////////////////////////////// +/* + Determines which of a NPCs three classes to + use in the random treasure system +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: April 4, 2002 +//::////////////////////////////////////////////// + +int nDetermineClassToUse(object oCharacter) +{ + int nClass; + int nTotal = GetHitDice(oCharacter); + //dbSpeak("Hit dice " + IntToString(nTotal)); + if (nTotal < 1) + { + nTotal = 1; + } +/* + float fTotal = IntToFloat(nTotal); + //if (GetIsObjectValid(oCharacter) == FALSE) + //{ + // dbSpeak("DetermineClassToUse: This character is invalid"); + //} + + int nClass1 = GetClassByPosition(1, oCharacter); + int nState1 = FloatToInt((IntToFloat(GetLevelByClass(nClass1, oCharacter)) / fTotal) * 100); + //dbSpeak("Level 1 Class Level = " + IntToString(GetLevelByClass(nClass1,oCharacter))); + + //PrintString("GENERIC SCRIPT DEBUG STRING ********** " + GetTag(oCharacter) + "Class 1 " + IntToString(nState1)); + //dbSpeak("State 1 " + IntToString(nState1)); + int nClass2 = GetClassByPosition(2, oCharacter); + int nState2 = FloatToInt((IntToFloat(GetLevelByClass(nClass2, oCharacter)) / fTotal) * 100) + nState1; + //PrintString("GENERIC SCRIPT DEBUG STRING ********** " + GetTag(oCharacter) + "Class 2 " + IntToString(nState2)); + + int nClass3 = GetClassByPosition(3, oCharacter); + int nState3 = FloatToInt((IntToFloat(GetLevelByClass(nClass3, oCharacter)) / fTotal) * 100) + nState2; + //PrintString("GENERIC SCRIPT DEBUG STRING ********** " + GetTag(oCharacter) + "Class 3 " + IntToString(nState3)); +*/ + int nClass1 = GetClassByPosition(1, oCharacter); + int nClass2 = GetClassByPosition(2, oCharacter); + int nClass3 = GetClassByPosition(3, oCharacter); + int nClass4 = GetClassByPosition(4, oCharacter); + int nClass5 = GetClassByPosition(5, oCharacter); + int nClass6 = GetClassByPosition(6, oCharacter); + int nClass7 = GetClassByPosition(7, oCharacter); + int nClass8 = GetClassByPosition(8, oCharacter); + + int nState1 = GetLevelByClass(nClass1, oCharacter) * 100 / nTotal; + int nState2 = GetLevelByClass(nClass2, oCharacter) * 100 / nTotal + nState1; + int nState3 = GetLevelByClass(nClass3, oCharacter) * 100 / nTotal + nState2; + int nState4 = GetLevelByClass(nClass4, oCharacter) * 100 / nTotal + nState3; + int nState5 = GetLevelByClass(nClass5, oCharacter) * 100 / nTotal + nState4; + int nState6 = GetLevelByClass(nClass6, oCharacter) * 100 / nTotal + nState5; + int nState7 = GetLevelByClass(nClass7, oCharacter) * 100 / nTotal + nState6; + + // nState8 will always be 100 if there is an eigth class, or 0 if there isn't + //int nState8 = GetLevelByClass(nClass3, oCharacter) * 100 / nTotal + nState7; + + // correct for unrecognized classes - assumes the first class will be a non-prestige player class + if(nClass2 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass2)) + { + nClass2 = CLASS_TYPE_INVALID; + nState1 = nState2; + } + if(nClass3 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass3)) + { + nClass3 = CLASS_TYPE_INVALID; + nState1 = nState3; + } + if(nClass4 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass4)) + { + nClass4 = CLASS_TYPE_INVALID; + nState1 = nState4; + } + if(nClass5 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass5)) + { + nClass5 = CLASS_TYPE_INVALID; + nState1 = nState5; + } + if(nClass6 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass6)) + { + nClass6 = CLASS_TYPE_INVALID; + nState1 = nState6; + } + if(nClass7 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass7)) + { + nClass7 = CLASS_TYPE_INVALID; + nState1 = nState7; + } + if(nClass8 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass8)) + { + nClass8 = CLASS_TYPE_INVALID; + if(nClass7 != CLASS_TYPE_INVALID) + nState7 = 100; + else nState1 = 100; + } + + int nUseClass = d100(); + //PrintString("GENERIC SCRIPT DEBUG STRING ********** " + "D100 Roll " +IntToString(nUseClass)); + + + //dbSpeak("Before comparison : " + IntToString(nClass1)); + if(nUseClass <= nState1) + { + nClass = nClass1; + } + else if(nUseClass > nState1 && nUseClass <= nState2) + { + nClass = nClass2; + } + else + { + // might be possible to end up here by accident because of a rounding error + // so just in case... + if(nClass3 == CLASS_TYPE_INVALID) nClass = nClass1; + else nClass = nClass3; + } + + //dbSpeak("Class from determineClass " + IntToString(nClass)); + return nClass; +} + +//:: Test Void +//void main () {} + diff --git a/src/include/pnp_lich_inc.nss b/src/include/pnp_lich_inc.nss new file mode 100644 index 0000000..bd7f8f2 --- /dev/null +++ b/src/include/pnp_lich_inc.nss @@ -0,0 +1,475 @@ +//:://///////////////////////////////////////////// +//:: Name Lich +//:: FileName pnp_lich_inc +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* Functions needed to handle the amulet, soul gem, and hide + +*/ +//::////////////////////////////////////////////// +//:: Created By: Shane Hennessy +//:: Created On: +//::////////////////////////////////////////////// + +// Returns the lich amulet level +int GetAmuletLevel(object oAmulet); +// Sets the passed in amulet to nLevel +void LevelUpAmulet(object oAmulet,int nLevel); +// Returns the lich power level +int GetPowerLevel(object oHide); +// Sets the passed in hide on the PC to nLevel +void LevelUpHide(object oPC, object oHide, int nLevel); +// Creates some VFX on the object when crafting +void CraftVFX(object oObject); + +#include "inc_utility" +#include "pnp_shft_main" + +void LichSkills(object oHide, int iLevel) +{ + SetCompositeBonus(oHide, "LichSkillHide", iLevel, ITEM_PROPERTY_SKILL_BONUS, SKILL_HIDE); + SetCompositeBonus(oHide, "LichSkillListen", iLevel, ITEM_PROPERTY_SKILL_BONUS, SKILL_LISTEN); + SetCompositeBonus(oHide, "LichSkillPersuade", iLevel, ITEM_PROPERTY_SKILL_BONUS, SKILL_PERSUADE); + SetCompositeBonus(oHide, "LichSkillSilent", iLevel, ITEM_PROPERTY_SKILL_BONUS, SKILL_MOVE_SILENTLY); + SetCompositeBonus(oHide, "LichSkillSearch", iLevel, ITEM_PROPERTY_SKILL_BONUS, SKILL_SEARCH); + SetCompositeBonus(oHide, "LichSkillSpot", iLevel, ITEM_PROPERTY_SKILL_BONUS, SKILL_SPOT); +} + +int GetAmuletLevel(object oAmulet) +{ + object oPC = GetFirstPC(); + //SendMessageToPC(oPC,"Amulet level func"); + itemproperty iProp = GetFirstItemProperty(oAmulet); + int nLevel = 0; + + while (GetIsItemPropertyValid(iProp)) + { + if (GetItemPropertyType(iProp) == ITEM_PROPERTY_AC_BONUS) + { + //SendMessageToPC(oPC," AC found"); + int nAC = GetItemPropertyCostTableValue(iProp); + //SendMessageToPC(oPC, "AC = " + IntToString(nAC)); + switch (nAC) + { + case 2: + return 1; + case 3: + return 2; + case 4: + return 3; + case 5: + // cant return because anything above has this AC 5 bonus + nLevel = 4; + break; + default: + return 0; + } + } + // for levels above 4 use a junk item like weight reduction + if (GetItemPropertyType(iProp) == ITEM_PROPERTY_BASE_ITEM_WEIGHT_REDUCTION) + { + int nWt = GetItemPropertyCostTableValue(iProp); + //SendMessageToPC(oPC, "wt = " + IntToString(nWt)); + switch(nWt) + { + case IP_CONST_REDUCEDWEIGHT_10_PERCENT: + return 5; + case IP_CONST_REDUCEDWEIGHT_20_PERCENT: + return 6; + case IP_CONST_REDUCEDWEIGHT_40_PERCENT: + return 7; + case IP_CONST_REDUCEDWEIGHT_60_PERCENT: + return 8; + case IP_CONST_REDUCEDWEIGHT_80_PERCENT: + return 9; + default: + return 0; + } + } + // level 10 gets something special (we ran out of weight reduction) + if (GetItemPropertyType(iProp) == ITEM_PROPERTY_CAST_SPELL) + { + int nSpell = GetItemPropertySubType(iProp); + + if (nSpell == IP_CONST_CASTSPELL_CREATE_GREATER_UNDEAD_18) + return 10; + } + + iProp = GetNextItemProperty(oAmulet); + } + return nLevel; +} + +int GetPowerLevel(object oPC) +{ + return GetLocalInt(oPC, "PNP_LichPowerLevel"); +} + +void LevelUpHide(object oPC, object oHide, int nLevel) +{ + itemproperty iprop; + + // Clean the hide of all things that dont stack + // remember to put everything for every level back on! + // - Now the event scripts give us a new hide. + //RemoveAllNonComposite(oHide); + + // Common things for being undead and a lich + if (nLevel >= 4) + { + // Ability bonus + //SetCompositeBonus(oHide, "LichCon", 12, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CON); + IPSafeAddItemProperty(oHide, PRCItemPropertyBonusFeat(IP_CONST_FEAT_UNDEAD_HD), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + + // Undead abilities + iprop = ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + iprop = ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + iprop = ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_DEATH_MAGIC); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + iprop = ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_DISEASE); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + iprop = ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + iprop = ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_MINDSPELLS); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + iprop = ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_PARALYSIS); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + iprop = ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_POISON); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + // 100 % immune to cold + iprop = ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEIMMUNITY_100_PERCENT); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + // 100 % immune to electric + iprop = ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEIMMUNITY_100_PERCENT); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + // Bugfix + iprop = ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_NEGATIVE, IP_CONST_DAMAGEIMMUNITY_100_PERCENT); + IPSafeAddItemProperty(oHide, iprop, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + } + + // Level 1 hide + if (nLevel == 1) + { + // Ability bonus + //SetCompositeBonus(oHide, "LichInt", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_INT); + // Turn resistance + SetCompositeBonus(oHide, "LichTurn", 1, ITEM_PROPERTY_TURN_RESISTANCE); + + //Lich skills +2 + LichSkills(oHide, 2); + + //Damage reduction 5/- cold + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGERESIST_5); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 5/- electric + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGERESIST_5); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + } + // Level 2 + else if (nLevel == 2) + { + // Ability bonus + //SetCompositeBonus(oHide, "LichInt", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_INT); + // Turn resistance + SetCompositeBonus(oHide, "LichTurn", 2, ITEM_PROPERTY_TURN_RESISTANCE); + + //Lich skills +4 + LichSkills(oHide, 4); + + //Damage reduction 5/+1 + iprop = ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,IP_CONST_DAMAGESOAK_5_HP); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 10/- cold + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGERESIST_10); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 10/- electric + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGERESIST_10); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + } + else if (nLevel == 3) + { + // Ability bonus + //SetCompositeBonus(oHide, "LichInt", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_INT); + //SetCompositeBonus(oHide, "LichWis", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_WIS); + // Turn resistance + SetCompositeBonus(oHide, "LichTurn", 3, ITEM_PROPERTY_TURN_RESISTANCE); + //Lich skills +6 + LichSkills(oHide, 6); + + + //Damage reduction 10/1 + iprop = ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,IP_CONST_DAMAGESOAK_10_HP); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 20/- cold + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGERESIST_20); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 20/- electric + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGERESIST_20); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + } + else if (nLevel == 4) + { + // Ability bonus + //SetCompositeBonus(oHide, "LichInt", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_INT); + //SetCompositeBonus(oHide, "LichWis", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_WIS); + //SetCompositeBonus(oHide, "LichCha", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CHA); + // Turn resistance + SetCompositeBonus(oHide, "LichTurn", 4, ITEM_PROPERTY_TURN_RESISTANCE); + //Lich skills +8 + LichSkills(oHide, 8); + + //Damage reduction 15/1 + iprop = ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,IP_CONST_DAMAGESOAK_15_HP); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + } + else if (nLevel == 5) + { + // Ability bonus + //SetCompositeBonus(oHide, "LichInt", 3, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_INT); + //SetCompositeBonus(oHide, "LichWis", 3, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_WIS); + //SetCompositeBonus(oHide, "LichCha", 3, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CHA); + // Turn resistance + SetCompositeBonus(oHide, "LichTurn", 5, ITEM_PROPERTY_TURN_RESISTANCE); + //Lich skills +10 + LichSkills(oHide, 10); + + + //Damage reduction 5/+5 + iprop = ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_5,IP_CONST_DAMAGESOAK_5_HP); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 5/- ACID + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGERESIST_5); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 5/- fire + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGERESIST_5); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 5/- sonic + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGERESIST_5); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + // Spell level immune to 1 and lower + iprop = ItemPropertyImmunityToSpellLevel(1); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + } + else if (nLevel == 6) + { + // Ability bonus + //SetCompositeBonus(oHide, "LichInt", 4, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_INT); + //SetCompositeBonus(oHide, "LichWis", 4, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_WIS); + //SetCompositeBonus(oHide, "LichCha", 4, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CHA); + // Turn resistance + SetCompositeBonus(oHide, "LichTurn", 8, ITEM_PROPERTY_TURN_RESISTANCE); + //Lich skills +12 + LichSkills(oHide, 12); + + //Damage reduction 10/+8 + iprop = ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_8,IP_CONST_DAMAGESOAK_10_HP); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 10/- ACID + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGERESIST_10); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 10/- fire + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGERESIST_10); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 10/- sonic + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGERESIST_10); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + // Spell level immune to 3 and lower + iprop = ItemPropertyImmunityToSpellLevel(3); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + } + else if (nLevel == 7) + { + // Ability bonus + //SetCompositeBonus(oHide, "LichInt", 6, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_INT); + //SetCompositeBonus(oHide, "LichWis", 6, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_WIS); + //SetCompositeBonus(oHide, "LichCha", 6, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CHA); + // Turn resistance + SetCompositeBonus(oHide, "LichTurn", 11, ITEM_PROPERTY_TURN_RESISTANCE); + //Lich skills +14 + LichSkills(oHide, 14); + + //Damage reduction 15/+11 + iprop = ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_11,IP_CONST_DAMAGESOAK_15_HP); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 10/- ACID + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGERESIST_10); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 10/- fire + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGERESIST_10); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 10/- sonic + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGERESIST_10); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + // Spell level immune to 5 and lower + iprop = ItemPropertyImmunityToSpellLevel(5); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + } + else if (nLevel == 8) + { + // Ability bonus + //SetCompositeBonus(oHide, "LichInt", 7, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_INT); + //SetCompositeBonus(oHide, "LichWis", 7, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_WIS); + //SetCompositeBonus(oHide, "LichCha", 7, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CHA); + // Turn resistance + SetCompositeBonus(oHide, "LichTurn", 14, ITEM_PROPERTY_TURN_RESISTANCE); + //Lich skills +16 + LichSkills(oHide, 16); + + //Damage reduction 20/+14 + iprop = ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_14,IP_CONST_DAMAGESOAK_20_HP); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 15/- ACID + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGERESIST_15); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 15/- fire + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGERESIST_15); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 15/- sonic + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGERESIST_15); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + + // Spell level immune to 7 and lower + iprop = ItemPropertyImmunityToSpellLevel(7); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + } + else if (nLevel == 9) + { + // Ability bonus + //SetCompositeBonus(oHide, "LichInt", 8, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_INT); + //SetCompositeBonus(oHide, "LichWis", 8, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_WIS); + //SetCompositeBonus(oHide, "LichCha", 8, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CHA); + // Turn resistance + SetCompositeBonus(oHide, "LichTurn", 17, ITEM_PROPERTY_TURN_RESISTANCE); + //Lich skills +18 + LichSkills(oHide, 18); + + //Damage reduction 25/+17 + iprop = ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_17,IP_CONST_DAMAGESOAK_25_HP); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 15/- ACID + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGERESIST_15); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 15/- fire + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGERESIST_15); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 15/- sonic + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGERESIST_15); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + + // Spell level immune to 8 and lower + iprop = ItemPropertyImmunityToSpellLevel(8); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + } + else if (nLevel == 10) + { + // Ability bonus + //SetCompositeBonus(oHide, "LichInt", 10, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_INT); + //SetCompositeBonus(oHide, "LichWis", 10, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_WIS); + //SetCompositeBonus(oHide, "LichCha", 10, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CHA); + // Turn resistance + SetCompositeBonus(oHide, "LichTurn", 20, ITEM_PROPERTY_TURN_RESISTANCE); + //Lich skills +20 + LichSkills(oHide, 20); + + //Damage reduction 30/+20 + iprop = ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_20,IP_CONST_DAMAGESOAK_30_HP); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 20/- ACID + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGERESIST_20); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 20/- fire + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGERESIST_20); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + //Damage reduction 20/- sonic + iprop = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGERESIST_20); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + // Spell level immune to 9 and lower + iprop = ItemPropertyImmunityToSpellLevel(9); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oHide); + } + + SetLocalInt(oPC, "PNP_LichPowerLevel", nLevel); +} + +void LevelUpAmulet(object oAmulet,int nLevel) +{ + RemoveAllItemProperties(oAmulet); + itemproperty iprop; + + // Common level 4 and above things + if (nLevel >= 4) + { + // Ac bonus + iprop = ItemPropertyACBonus(5); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oAmulet); + // Extra so the amulet is useful til 20th level + iprop = ItemPropertyRegeneration(1); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oAmulet); + iprop = ItemPropertyCastSpell(IP_CONST_CASTSPELL_ANIMATE_DEAD_15,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oAmulet); + iprop = PRCItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSNEC); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oAmulet); + } + + // Level 2 + if (nLevel == 2) + { + // Ac bonus + iprop = ItemPropertyACBonus(3); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oAmulet); + } + else if (nLevel == 3) + { + // Ac bonus + iprop = ItemPropertyACBonus(4); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oAmulet); + } + else if (nLevel == 4) + { + // nothing + } + else if (nLevel == 5) + { + // reduction is used to permenantly track how much the PC has paid for level ups + // because reduction of 1/2 lb is nothing usefull + iprop = ItemPropertyWeightReduction(IP_CONST_REDUCEDWEIGHT_10_PERCENT); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oAmulet); + } + else if (nLevel == 6) + { + iprop = ItemPropertyWeightReduction(IP_CONST_REDUCEDWEIGHT_20_PERCENT); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oAmulet); + } + else if (nLevel == 7) + { + iprop = ItemPropertyWeightReduction(IP_CONST_REDUCEDWEIGHT_40_PERCENT); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oAmulet); + } + else if (nLevel == 8) + { + iprop = ItemPropertyWeightReduction(IP_CONST_REDUCEDWEIGHT_60_PERCENT); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oAmulet); + } + else if (nLevel == 9) + { + iprop = ItemPropertyWeightReduction(IP_CONST_REDUCEDWEIGHT_80_PERCENT); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oAmulet); + } + else if (nLevel == 10) + { + iprop = ItemPropertyCastSpell(IP_CONST_CASTSPELL_CREATE_GREATER_UNDEAD_18,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE); + AddItemProperty(DURATION_TYPE_PERMANENT,iprop,oAmulet); + } +} + +void CraftVFX(object oObject) +{ + effect eFx = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_EVIL); + ApplyEffectToObject(DURATION_TYPE_INSTANT,eFx,oObject,3.0); + eFx = EffectVisualEffect(VFX_FNF_LOS_EVIL_30); + ApplyEffectToObject(DURATION_TYPE_INSTANT,eFx,oObject, 4.0); +} + + diff --git a/src/include/pnp_shft_main.nss b/src/include/pnp_shft_main.nss new file mode 100644 index 0000000..28eaa1d --- /dev/null +++ b/src/include/pnp_shft_main.nss @@ -0,0 +1,2294 @@ +//:://///////////////////////////////////////////// +//:: Name Shifter PnP functions +//:: FileName +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Functions used by the shifter class to better simulate the PnP rules + +*/ +//::////////////////////////////////////////////// +//:: Created By: Shane Hennessy +//:: Created On: +//::////////////////////////////////////////////// + + + +//see inc_prc_poly.nss for using shifter code for other spells/abilitys + +//unequips then destroys items +void ClearCreatureItem(object oPC, object oTarget); +//shift from quickslot info +void QuickShift(object oPC, int iQuickSlot); +//asign form to your quick slot +void SetQuickSlot(object oPC, int iIndex, int iQuickSlot, int iEpic); +// Determine the level of the Shifter needed to take on +// oTargets shape. +// Returns 1-10 for Shifter level, 11+ for Total levels +int GetShifterLevelRequired(object oTarget); +// Can the shifter (oPC) assume the form of the target +// return Values: TRUE or FALSE +int GetValidShift(object oPC, object oTarget); +// Determine if the oCreature can wear certain equipment +// nInvSlot INVENTORY_SLOT_* +// Return values: TRUE or FALSE +int GetCanFormEquip(object oCreature, int nInvSlot); +// Determine if the oCreature has the ability to cast spells +// Return values: TRUE or FALSE +int GetCanFormCast(object oCreature); +// Determines if the oCreature is harmless enough to have +// special effects applied to the shifter +// Return values: TRUE or FALSE +int GetIsCreatureHarmless(object oCreature); +// Determines the APPEARANCE_TYPE_* for the PC +// based on the players RACIAL type +int GetTrueForm(object oPC); + +/** +* Checks if the target is mounted by checking the bX3_IS_MOUNTED variable (Bioware's default). +* A duplicate of Bioware's HorseGetIsMounted() script with almost no changes. From x3_inc_horse. +* Here because it's called most places ShifterCheck() is called, also added to CanShift() +* Bioware's one not used to avoid circular include hell +* @param oTarget +* @return TRUE if oTarget is mounted +*/ +int PRCHorseGetIsMounted(object oTarget); + + +//is inventory full if yes then CanShift = false else CanShift = true +int CanShift(object oPC); + +// Transforms the oPC into the oTarget using the epic rules +// Assumes oTarget is already a valid target +// Return values: TRUE or FALSE +int SetShiftEpic(object oPC, object oTarget); + +// helper function to SetVisualTrueForm() for DelayCommand() to work on +void SetBodyPartTrueForm(object oPC, int i); +// Transforms the oPC back to thier true form if they are shifted +// Return values: TRUE or FALSE +void SetShiftTrueForm(object oPC); +// Creates a temporary creature for the shifter to shift into +// Validates the shifter is able to become that creature based on level +// Return values: TRUE or FALSE +int SetShiftFromTemplateValidate(object oPC, string sTemplate, int iEpic); + +// Extra item functions +// Copys all the item properties from the target to the destination +void CopyAllItemProperties(object oDestination,object oTarget); +// Removes all the item properties from the item +void RemoveAllItemProperties(object oItem); +// Gets an IP_CONST_FEAT_* from FEAT_* +// returns -1 if the feat is not available +int GetIPFeatFromFeat(int nFeat); +// Determines if the target creature has a certain type of spell +// and sets the powers onto the object item +void SetItemSpellPowers(object oItem, object oTarget); + +// Removes leftover aura effects +void RemoveAuraEffect( object oPC ); +// Adds a creature to the list of valid GWS shift possibilities +void RecognizeCreature( object oPC, string sTemplate, string sCreatureName ); +// Checks to see if the specified creature is a valid GWS shift choice +int IsKnownCreature( object oPC, string sTemplate ); +// Shift based on position in the known array +// oTemplate is either the epic or normal template +void ShiftFromKnownArray(int nIndex,int iEpic, object oPC); +//delete form from spark +void DeleteFromKnownArray(int nIndex, object oPC); +//store the appearance of the pc away for unshifting +void StoreAppearance(object oPC); +// Transforms the oPC into the oTarget +// Assumes oTarget is already a valid target +// this is 2 stage +// these 2 scripts replace the origanel setshift script +// (setshift_02 is almost all of the origenal setshift script) +void SetShift(object oPC, object oTarget); +void SetShift_02(object oPC, object oTarget); + + +// Generic includes +#include "prc_inc_function" + + +void StoreAppearance(object oPC) +{ + if (GetLocalInt(oPC, "shifting") || GetPersistantLocalInt(oPC, "nPCShifted")) + return; + + int iIsStored = GetPersistantLocalInt( oPC, "AppearanceIsStored" ); + + if (iIsStored == 6) + { + //already stored + } + else + { + SetPersistantLocalInt(oPC, "AppearanceIsStored", 6); + SetPersistantLocalInt(oPC, "AppearanceStored", GetAppearanceType(oPC)); + SetPersistantLocalInt(oPC, "AppearanceStoredPortraitID", GetPortraitId(oPC)); + SetPersistantLocalString(oPC, "AppearanceStoredPortraitResRef", GetPortraitResRef(oPC)); + SetPersistantLocalInt(oPC, "AppearanceStoredTail", GetCreatureTailType(oPC)); + SetPersistantLocalInt(oPC, "AppearanceStoredWing", GetCreatureWingType(oPC)); + int i; + for(i=0;i<=20;i++) + { + SetPersistantLocalInt(oPC, "AppearanceStoredPart"+IntToString(i), GetCreatureBodyPart(i, oPC)); + } + } +} + +// PURPOSE: Return whether oTarget is mounted +int PRCHorseGetIsMounted(object oTarget) +{ + if(GetObjectType(oTarget) == OBJECT_TYPE_CREATURE) + { + //original function uses GetSkinInt() so we have to get creature skin here + object oSkin = GetIsPC(oTarget) ? GetItemInSlot(INVENTORY_SLOT_CARMOUR, oTarget) : oTarget; + if(GetLocalInt(oSkin, "bX3_IS_MOUNTED")) + return TRUE; + } + return FALSE; +} + +int CanShift(object oPC) +{ + int iOutcome = FALSE; + // stop if mounted + if(PRCHorseGetIsMounted(oPC)) + { + // bio default poly floaty text + // "You cannot shapeshift while mounted." + if (GetIsPC(oPC)) FloatingTextStrRefOnCreature(111982,oPC,FALSE); + return iOutcome; + } + + if (GetLocalInt(oPC, "shifting") || GetPersistantLocalInt(oPC, "nPCShifted")) + { + return iOutcome; + } + + object oItem1 = CreateItemOnObject("pnp_shft_tstpkup", oPC); + object oItem2 = CreateItemOnObject("pnp_shft_tstpkup", oPC); + object oItem3 = CreateItemOnObject("pnp_shft_tstpkup", oPC); + object oItem4 = CreateItemOnObject("pnp_shft_tstpkup", oPC); + if ((GetItemPossessor(oItem1) == oPC) && (GetItemPossessor(oItem2) == oPC) && (GetItemPossessor(oItem3) == oPC) && (GetItemPossessor(oItem4) == oPC)) + { + iOutcome = TRUE; + } + else + { + SendMessageToPC(oPC, "Your inventory is too full to allow you to (un)shift."); + SendMessageToPC(oPC, "Please make room enough for 4 Helm-sized items and then try again."); + } + + DestroyObject(oItem1); + DestroyObject(oItem2); + DestroyObject(oItem3); + DestroyObject(oItem4); + + //there are issues with shifting will polymorphed + effect eEff = GetFirstEffect(oPC); + while (GetIsEffectValid(eEff)) + { + int eType = GetEffectType(eEff); + if (eType == EFFECT_TYPE_POLYMORPH) + { + SendMessageToPC(oPC, "Shifting when polymorphed has been disabled."); + SendMessageToPC(oPC, "Please cancel your polymorph first."); + return FALSE; + } + eEff = GetNextEffect(oPC); + } + return iOutcome; +} + +void QuickShift(object oPC, int iQuickSlot) +{ + int iMaxIndex = GetPersistantLocalInt(oPC, "num_creatures"); + persistant_array_create(oPC, "QuickSlotIndex"); + persistant_array_create(oPC, "QuickSlotEpic"); + int iIndex = persistant_array_get_int(oPC, "QuickSlotIndex", iQuickSlot); + int iEpic = persistant_array_get_int(oPC, "QuickSlotEpic", iQuickSlot); + if(!(iIndex>iMaxIndex)) + ShiftFromKnownArray(iIndex, iEpic, oPC); +} + +void SetQuickSlot(object oPC, int iIndex, int iQuickSlot, int iEpic) +{ + persistant_array_create(oPC, "QuickSlotIndex"); + persistant_array_create(oPC, "QuickSlotEpic"); + persistant_array_set_int(oPC,"QuickSlotIndex",iQuickSlot,iIndex); + persistant_array_set_int(oPC,"QuickSlotEpic",iQuickSlot,iEpic); +} + +// Transforms the oPC into the oTarget +// Assumes oTarget is already a valid target +// starts here and then goes to SetShift_02 + +// stage 1: +// if the shifter if already shifted call unshift to run after this stage ends +// call next stage to start after this stage ends +void SetShift(object oPC, object oTarget) +{ + SetLocalInt(oPC, "shifting", TRUE); + + SetShiftTrueForm(oPC); + DelayCommand(0.10, SetShift_02(oPC, oTarget)); +} +// stage 1 end: +// the shifter is unshifted if need be +// and the next stage is called + +// stage 2: +// this is most of what the old SetShift script did +// the changes are: +// no check for if shifted is needed and has been removed +// the epic ability item is done here (if epicshifter var is 1) +// oTarget is destryed in this script if its from the convo +void SetShift_02(object oPC, object oTarget) +{ + int nMaxBonus = GetPRCSwitch(PRC_PNP_SHIFTER_BONUS); + int nMaxPen = -10; + + //get all the creature items from the target + object oHide = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oTarget); + object oWeapCR = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R,oTarget); + object oWeapCL = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L,oTarget); + object oWeapCB = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B,oTarget); + + //get all the creature items from the pc + object oHidePC = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC); + object oWeapCRPC = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R,oPC); + object oWeapCLPC = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L,oPC); + object oWeapCBPC = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B,oPC); + + //creature item handling + if (!GetIsObjectValid(oHidePC)) //if you dont have a hide + { + oHidePC = CopyObject(oHide, GetLocation(oPC), oPC); //copy the targets hide + if (!GetIsObjectValid(oHidePC)) //if the target dont have a hide + { + oHidePC = CreateItemOnObject("shifterhide", oPC); //use a blank shifter hide + } + // Need to ID the stuff before we can put it on the PC + SetIdentified(oHidePC, TRUE); + } + else // if you do have a hide + { + ScrubPCSkin(oPC, oHidePC); //clean off all old props + CopyAllItemProperties(oHidePC, oHide); //copy all target props to our hide + } + DelayCommand(0.05, AssignCommand(oPC, ActionEquipItem(oHidePC, INVENTORY_SLOT_CARMOUR))); //reequip the hide to get item props to update properly + + // Set a flag on the PC to tell us that they are shifted + // set this early to prevent alot of unequip code from firing and causing an overflow + SetPersistantLocalInt(oPC,"nPCShifted",TRUE); + + + //copy targets right creature weapon + if (GetIsObjectValid(oWeapCRPC)) //if we still have a creature weapon + { + //remove and destroy the weapon we have + DelayCommand(0.90, ClearCreatureItem(oPC, oWeapCRPC)); + } + if (GetIsObjectValid(oWeapCR)) //if the target has a weapon + { + oWeapCRPC = CreateItemOnObject("pnp_shft_cweap", oPC); //create a shifter blank creature weapon + CopyAllItemProperties(oWeapCRPC, oWeapCR); //copy all target props over + SetIdentified(oWeapCRPC, TRUE); //id so we dont get any funny stuff when equiping + DelayCommand(0.2, AssignCommand(oPC, ActionEquipItem(oWeapCRPC, INVENTORY_SLOT_CWEAPON_R))); //reequip the item to get item props to update properly + } + + //copy targets left creature weapon + if (GetIsObjectValid(oWeapCLPC)) //if we still have a creature weapon + { + //remove and destroy the weapon we have + DelayCommand(0.90, ClearCreatureItem(oPC, oWeapCLPC)); + } + if (GetIsObjectValid(oWeapCL)) //if the target has a weapon + { + oWeapCLPC = CreateItemOnObject("pnp_shft_cweap", oPC); //create a shifter blank creature weapon + CopyAllItemProperties(oWeapCLPC, oWeapCL); //copy all target props over + SetIdentified(oWeapCLPC, TRUE); //id so we dont get any funny stuff when equiping + DelayCommand(0.2, AssignCommand(oPC, ActionEquipItem(oWeapCLPC, INVENTORY_SLOT_CWEAPON_L))); //reequip the item to get item props to update properly + } + //copy targets special creature weapons + if (GetIsObjectValid(oWeapCBPC)) //if we still have a creature weapon + { + //remove and destroy the weapon we have + DelayCommand(0.90, ClearCreatureItem(oPC, oWeapCBPC)); + } + if (GetIsObjectValid(oWeapCB)) //if the target has a weapon + { + oWeapCBPC = CreateItemOnObject("pnp_shft_cweap", oPC); //create a shifter blank creature weapon + CopyAllItemProperties(oWeapCBPC, oWeapCB); //copy all target props over + SetIdentified(oWeapCBPC, TRUE); //id so we dont get any funny stuff when equiping + DelayCommand(0.2, AssignCommand(oPC, ActionEquipItem(oWeapCBPC, INVENTORY_SLOT_CWEAPON_B))); //reequip the item to get item props to update properly + } + + // Get the Targets str, dex, and con + int nTStr = GetAbilityScore(oTarget, ABILITY_STRENGTH); + int nTDex = GetAbilityScore(oTarget, ABILITY_DEXTERITY); + int nTCon = GetAbilityScore(oTarget, ABILITY_CONSTITUTION); + + // Get the PCs str, dex, and con from the clone + int nPCStr = GetAbilityScore(oPC, ABILITY_STRENGTH, TRUE); + int nPCDex = GetAbilityScore(oPC, ABILITY_DEXTERITY, TRUE); + int nPCCon = GetAbilityScore(oPC, ABILITY_CONSTITUTION, TRUE); + + // Get the deltas + int nStrDelta = nTStr - nPCStr; + int nDexDelta = nTDex - nPCDex; + int nConDelta = nTCon - nPCCon; + + int iRemainingSTR; + int iRemainingCON; + int iRemainingDEX; + + // Cap max to +nMaxBonus til they can fix it and nMaxPen for the low value + // get remaining bonus/penelty for later + if (nStrDelta > nMaxBonus) + { + iRemainingSTR = nStrDelta - nMaxBonus; + nStrDelta = nMaxBonus; + } + if (nStrDelta < nMaxPen) + { + iRemainingSTR = nStrDelta + 10; + nStrDelta = nMaxPen; + } + if (nDexDelta > nMaxBonus) + { + iRemainingDEX = nDexDelta - nMaxBonus; + nDexDelta = nMaxBonus; + } + if (nDexDelta < nMaxPen) + { + iRemainingDEX = nDexDelta + 10; + nDexDelta = nMaxPen; + } + if (nConDelta > nMaxBonus) + { + iRemainingCON = nConDelta - nMaxBonus; + nConDelta = nMaxBonus; + } + if (nConDelta < nMaxPen) + { + iRemainingCON = nConDelta + 10; + nConDelta = nMaxPen; + } + + // Big problem with < 0 to abilities, if they have immunity to ability drain + // the "-" to the ability wont do anything + + // Apply these boni to the creature hide + if (nStrDelta > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR, nStrDelta), oHidePC); + else + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyDecreaseAbility(IP_CONST_ABILITY_STR, nStrDelta*-1), oHidePC); + if (nDexDelta > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyAbilityBonus(IP_CONST_ABILITY_DEX, nDexDelta), oHidePC); + else + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyDecreaseAbility(IP_CONST_ABILITY_DEX, nDexDelta*-1), oHidePC); + if (nConDelta > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyAbilityBonus(IP_CONST_ABILITY_CON, nConDelta), oHidePC); + else + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyDecreaseAbility(IP_CONST_ABILITY_CON, nConDelta*-1), oHidePC); + + //add extra str bonuses to pc as attack bonues and damage bonus + int iExtSTRBon; + effect eAttackIncrease; + effect eDamageIncrease; + if (iRemainingSTR != 0) + { + int iDamageType = DAMAGE_TYPE_BLUDGEONING; + iExtSTRBon = FloatToInt(iRemainingSTR/2.0); + + if (GetIsObjectValid(oWeapCR)) + { + int iCR = GetBaseItemType(oWeapCR); + if ((iCR == BASE_ITEM_CSLASHWEAPON) || (iCR == BASE_ITEM_CSLSHPRCWEAP)) + iDamageType = DAMAGE_TYPE_SLASHING; + else if (iCR == BASE_ITEM_CPIERCWEAPON) + iDamageType = DAMAGE_TYPE_PIERCING; + } + else if (GetIsObjectValid(oWeapCL)) + { + int iCL = GetBaseItemType(oWeapCL); + if ((iCL == BASE_ITEM_CSLASHWEAPON) || (iCL == BASE_ITEM_CSLSHPRCWEAP)) + iDamageType = DAMAGE_TYPE_SLASHING; + else if (iCL == BASE_ITEM_CPIERCWEAPON) + iDamageType = DAMAGE_TYPE_PIERCING; + } + else if (GetIsObjectValid(oWeapCB)) + { + int iCB = GetBaseItemType(oWeapCB); + if ((iCB == BASE_ITEM_CSLASHWEAPON) || (iCB == BASE_ITEM_CSLSHPRCWEAP)) + iDamageType = DAMAGE_TYPE_SLASHING; + else if (iCB == BASE_ITEM_CPIERCWEAPON) + iDamageType = DAMAGE_TYPE_PIERCING; + } + + int iDamageB; + switch (iExtSTRBon) + { + case 0: + iDamageB = 0; + break; + case 1: + case -1: + iDamageB = DAMAGE_BONUS_1; + break; + case 2: + case -2: + iDamageB = DAMAGE_BONUS_2; + break; + case 3: + case -3: + iDamageB = DAMAGE_BONUS_3; + break; + case 4: + case -4: + iDamageB = DAMAGE_BONUS_4; + break; + case 5: + case -5: + iDamageB = DAMAGE_BONUS_5; + break; + case 6: + case -6: + iDamageB = DAMAGE_BONUS_6; + break; + case 7: + case -7: + iDamageB = DAMAGE_BONUS_7; + break; + case 8: + case -8: + iDamageB = DAMAGE_BONUS_8; + break; + case 9: + case -9: + iDamageB = DAMAGE_BONUS_9; + break; + case 10: + case -10: + iDamageB = DAMAGE_BONUS_10; + break; + case 11: + case -11: + iDamageB = DAMAGE_BONUS_11; + break; + case 12: + case -12: + iDamageB = DAMAGE_BONUS_12; + break; + case 13: + case -13: + iDamageB = DAMAGE_BONUS_13; + break; + case 14: + case -14: + iDamageB = DAMAGE_BONUS_14; + break; + case 15: + case -15: + iDamageB = DAMAGE_BONUS_15; + break; + case 16: + case -16: + iDamageB = DAMAGE_BONUS_16; + break; + case 17: + case -17: + iDamageB = DAMAGE_BONUS_17; + break; + case 18: + case -18: + iDamageB = DAMAGE_BONUS_18; + break; + case 19: + case -19: + iDamageB = DAMAGE_BONUS_19; + break; + default: + iDamageB = DAMAGE_BONUS_20; + break; + } + + if (iRemainingSTR > 0) + { + eAttackIncrease = EffectAttackIncrease(iDamageB, ATTACK_BONUS_MISC); + eDamageIncrease = EffectDamageIncrease(iDamageB, iDamageType); + } + else if (iRemainingSTR < 0) + { + eAttackIncrease = EffectAttackDecrease(iDamageB, ATTACK_BONUS_MISC); + eDamageIncrease = EffectDamageDecrease(iDamageB, iDamageType); + } + + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(eAttackIncrease),oPC); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(eDamageIncrease),oPC); + } + + //add extra con bonus as temp HP + if (iRemainingCON > 0) + { + int iExtCONBon = FloatToInt(iRemainingCON/2.0); + effect eTemporaryHitpoints = EffectTemporaryHitpoints(iExtCONBon * GetHitDice(oPC)); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(eTemporaryHitpoints),oPC); + } + + // Apply the natural AC bonus to the hide + // First get the AC from the target + int nTAC = GetAC(oTarget); + nTAC -= GetAbilityModifier(ABILITY_DEXTERITY, oTarget); + // All creatures have 10 base AC + nTAC -= 10; + int i; + for (i=0; i < NUM_INVENTORY_SLOTS; i++) + { + nTAC -= GetItemACValue(GetItemInSlot(i,oTarget)); + } + + if (nTAC > 0) + { + effect eAC = EffectACIncrease(nTAC,AC_NATURAL_BONUS); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(eAC),oPC); + } + + //add extra dex bonus as dodge ac + if (iRemainingDEX != 0) + { + int iExtDEXBon = FloatToInt(iRemainingDEX/2.0); + effect eACIncrease; + if (iRemainingDEX > 0) + { + object oPCArmour = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC); + if (GetIsObjectValid(oPCArmour)) + { + int iACArmour = GetItemACValue(oPCArmour); + int iMaxDexBon; + int iCurentDexBon; + iCurentDexBon = FloatToInt(((nPCDex + nStrDelta)-10.0)/2.0); + switch (iACArmour) + { + case 8: + case 7: + case 6: + iMaxDexBon = 1; + break; + case 5: + iMaxDexBon = 2; + break; + case 4: + case 3: + iMaxDexBon = 4; + break; + case 2: + iMaxDexBon = 6; + break; + case 1: + iMaxDexBon = 8; + break; + default: + iMaxDexBon = 100; + break; + } + if (iCurentDexBon > iMaxDexBon) + { + iExtDEXBon = 0; + } + else + { + if ((iExtDEXBon+iCurentDexBon) > iMaxDexBon) + { + iExtDEXBon = iMaxDexBon - iCurentDexBon; + } + } + } + eACIncrease = EffectACIncrease(iExtDEXBon); + } + else if (iRemainingDEX < 0) + { + eACIncrease = EffectACDecrease(iExtDEXBon * -1); + } + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(eACIncrease),oPC); + } + + // Apply any feats the target has to the hide as a bonus feat + for (i = 0; i< 500; i++) + { + if (GetHasFeat(i,oTarget)) + { + int nIP = GetIPFeatFromFeat(i); + if(nIP != -1) + { + itemproperty iProp = PRCItemPropertyBonusFeat(nIP); + AddItemProperty(DURATION_TYPE_PERMANENT,iProp,oHidePC); + } + + } + } + // Fix the biobugged Improved Critical (creature) by giving the PC Improved Critical (unarmed) which seems + // to work with creature weapons + if (!GetHasFeat(FEAT_IMPROVED_CRITICAL_UNARMED_STRIKE, oPC) && GetHasFeat(FEAT_IMPROVED_CRITICAL_CREATURE, oPC)) + AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_IMPCRITUNARM),oHidePC); + + + // If they dont have the natural spell feat they can only cast spells in certain shapes + if (!GetHasFeat(FEAT_PRESTIGE_SHIFTER_NATURALSPELL,oPC)) + { + if (!GetCanFormCast(oTarget)) + { + // remove the ability from the PC to cast + effect eNoCast = EffectSpellFailure(); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(eNoCast),oPC); + } + } + + // If the creature is "harmless" give it a perm invis for stealth + if(GetIsCreatureHarmless(oTarget)) + { + effect eInvis = EffectInvisibility(INVISIBILITY_TYPE_NORMAL); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(eInvis),oPC); + } + + + // Change the Appearance of the PC + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_POLYMORPH), oPC); + //get the appearance of oTarget + int iAppearance = GetLocalInt(oTarget,"Appearance"); + if (iAppearance>0) + SetCreatureAppearanceType(oPC,iAppearance); + else + SetCreatureAppearanceType(oPC,GetAppearanceType(oTarget)); + //do 1.67 stuff + //wing/tails + SetCreatureWingType(GetCreatureWingType(oTarget), oPC); + SetCreatureTailType(GetCreatureTailType(oTarget), oPC); + //portrait + SetPortraitResRef(oPC, GetPortraitResRef(oTarget)); + SetPortraitId(oPC, GetPortraitId(oTarget)); + //bodyparts + for(i=0;i<=20;i++) + { + DelayCommand(1.0, SetCreatureBodyPart(i, GetCreatureBodyPart(i, oTarget), oPC)); + } + + // For spells to make sure they now treat you like the new race + SetLocalInt(oPC,"RACIAL_TYPE",MyPRCGetRacialType(oTarget)+1); + + // PnP rules say the shifter would heal as if they rested + effect eHeal = EffectHeal(GetHitDice(oPC)*d4()); + ApplyEffectToObject(DURATION_TYPE_INSTANT,eHeal,oPC); + + //epic shift + if (GetLocalInt(oPC,"EpicShift")) + { + // Create some sort of usable item to represent monster spells + object oEpicPowersItem; // = GetItemPossessedBy(oPC,"EpicShifterPowers"); + //if (!GetIsObjectValid(oEpicPowersItem)) + oEpicPowersItem = CreateItemOnObject("epicshifterpower",oPC); + SetItemSpellPowers(oEpicPowersItem,oTarget); + } + + //clear epic shift var + SetLocalInt(oPC,"EpicShift",0); + + //remove oTarget if it is from the template + int iDeleteMe = GetLocalInt(oTarget,"pnp_shifter_deleteme"); + if (iDeleteMe==1) + { + // Remove the temporary creature + AssignCommand(oTarget,SetIsDestroyable(TRUE,FALSE,FALSE)); + SetPlotFlag(oTarget,FALSE); + SetImmortal(oTarget,FALSE); + DestroyObject(oTarget); + } + + // Reset any PRC feats that might have been lost from the shift + DelayCommand(1.0, EvalPRCFeats(oPC)); + + DelayCommand(3.0, DeleteLocalInt(oPC, "shifting")); + SendMessageToPC(oPC, "Finished shifting"); +} + +// stage 2 end: +// the target is distroyed(target only if not mimic target) +// all effects and item propertys are applyed to you and your hide/cweapons + + +void RecognizeCreature( object oPC, string sTemplate, string sCreatureName ) +{ + + // Only add new ones + if (IsKnownCreature(oPC,sTemplate)) + return; + + int num_creatures = GetPersistantLocalInt( oPC, "num_creatures" ); + persistant_array_create(oPC, "shift_choice"); + persistant_array_create(oPC, "shift_choice_name"); + persistant_array_set_string( oPC, "shift_choice", num_creatures, sTemplate ); + persistant_array_set_string( oPC, "shift_choice_name", num_creatures, sCreatureName );//added the line to store the name as well as the resref + SetPersistantLocalInt( oPC, "num_creatures", num_creatures+1 ); + +} + +int IsKnownCreature( object oPC, string sTemplate ) +{ +// object oMimicForms = GetItemPossessedBy( oPC, "sparkoflife" ); + int num_creatures = GetPersistantLocalInt( oPC, "num_creatures" ); + int i; + string cmp; + + for ( i=0; i nPCHD) + { + SendMessageToPC(oPC,"You need " + IntToString(nTHD-nPCHD) + " more character levels before you can take on that form." ); + iInvalid = 1; + } + + //if checks failed return false + if (iInvalid == 1) + { + //this way both of the texts come up if they are needed + //so you dont just get 1 if your need both + return FALSE; + } + //else if all checks past return true + return TRUE; + +} + +// Determine if the oCreature has the ability to cast spells +// Return values: TRUE or FALSE +int GetCanFormCast(object oCreature) +{ + int nTRacialType = MyPRCGetRacialType(oCreature); + + // Need to have hands, and the ability to speak + + switch (nTRacialType) + { + case RACIAL_TYPE_ABERRATION: + case RACIAL_TYPE_MAGICAL_BEAST: + case RACIAL_TYPE_VERMIN: + case RACIAL_TYPE_BEAST: + case RACIAL_TYPE_ANIMAL: + case RACIAL_TYPE_OOZE: + //case RACIAL_TYPE_PLANT: + // These forms can't cast spells + return FALSE; + break; + + case RACIAL_TYPE_SHAPECHANGER: + case RACIAL_TYPE_ELEMENTAL: + case RACIAL_TYPE_DRAGON: + case RACIAL_TYPE_OUTSIDER: + case RACIAL_TYPE_UNDEAD: + case RACIAL_TYPE_CONSTRUCT: + case RACIAL_TYPE_GIANT: + case RACIAL_TYPE_HUMANOID_MONSTROUS: + case RACIAL_TYPE_DWARF: + case RACIAL_TYPE_ELF: + case RACIAL_TYPE_GNOME: + case RACIAL_TYPE_HALFELF: + case RACIAL_TYPE_HALFLING: + case RACIAL_TYPE_HALFORC: + case RACIAL_TYPE_HUMAN: + case RACIAL_TYPE_HUMANOID_ORC: + case RACIAL_TYPE_HUMANOID_GOBLINOID: + case RACIAL_TYPE_HUMANOID_REPTILIAN: + case RACIAL_TYPE_FEY: + break; + } + + return TRUE; +} + +// Determines if the oCreature is harmless enough to have +// special effects applied to the shifter +// Return values: TRUE or FALSE +int GetIsCreatureHarmless(object oCreature) +{ + string sCreatureName = GetName(oCreature); + + // looking for small < 1 CR creatures that nobody looks at twice + + if ((sCreatureName == "Chicken") || + (sCreatureName == "Falcon") || + (sCreatureName == "Hawk") || + (sCreatureName == "Raven") || + (sCreatureName == "Bat") || + (sCreatureName == "Dire Rat") || + (sCreatureName == "Will-O'-Wisp") || + (sCreatureName == "Rat") || + (GetChallengeRating(oCreature) < 1.0 )) + return TRUE; + else + return FALSE; +} + +int GetTrueForm(object oPC) +{ + int nRace = GetRacialType(OBJECT_SELF); + int nPCForm; + int iIsStored = GetPersistantLocalInt( oPC, "AppearanceIsStored" ); + int iStoredAppearance = GetPersistantLocalInt( oPC, "AppearanceStored" ); + + if (iIsStored == 6) + { + nPCForm = iStoredAppearance; + } + else + { + nPCForm = StringToInt(Get2DACache("racialtypes", "Appearance", GetRacialType(oPC))); + } + + return nPCForm; +} + + +// Transforms the oPC into the oTarget using the epic rules +// Assumes oTarget is already a valid target +int SetShiftEpic(object oPC, object oTarget) +{ + + SetLocalInt(oPC,"EpicShift",1); //this makes the setshift_2 script do the epic shifter stuff that used to be here + + SetShift(oPC, oTarget); + + return TRUE; +} + + +// Creates a temporary creature for the shifter to shift into +// Validates the shifter is able to become that creature based on level +// Return values: TRUE or FALSE +// the epic version of this script was rolled into this 1 with the +// addition of the iEpic peramiter +int SetShiftFromTemplateValidate(object oPC, string sTemplate, int iEpic) +{ + if (!CanShift(oPC)) + { + return FALSE; + } + int bRetValue = FALSE; + int in_list = IsKnownCreature(oPC, sTemplate); + + if (iEpic==TRUE) + { + if (!GetHasFeat(FEAT_PRESTIGE_SHIFTER_EGWSHAPE_1, oPC)) + return FALSE; + else + DecrementRemainingFeatUses(oPC,FEAT_PRESTIGE_SHIFTER_EGWSHAPE_1); //we are good to go with the shift + } + else + { + if (!GetHasFeat(FEAT_PRESTIGE_SHIFTER_GWSHAPE_1, oPC)) + return FALSE; + else + DecrementRemainingFeatUses(oPC,FEAT_PRESTIGE_SHIFTER_GWSHAPE_1); //we are good to go with the shift + } + if (!GetHasFeat(FEAT_PRESTIGE_SHIFTER_GWSHAPE_1, oPC)) //if your out of GWS + { + if (GetHasFeat(FEAT_WILD_SHAPE, oPC)) //and you have DWS left + { + if(GetLocalInt(oPC, "DWS") == 1) //and you wont to change then over to GWS + { + IncrementRemainingFeatUses(oPC,FEAT_PRESTIGE_SHIFTER_GWSHAPE_1); // +1 GWS + DecrementRemainingFeatUses(oPC,FEAT_WILD_SHAPE); //-1 DWS + } + } + } + int i=0; + object oLimbo=GetObjectByTag("Limbo",i); + location lLimbo; + while (i < 100) + { + if (GetIsObjectValid(oLimbo)) + { + if (GetName(oLimbo)=="Limbo") + { + i = 2000; + vector vLimbo = Vector(0.0f, 0.0f, 0.0f); + lLimbo = Location(oLimbo, vLimbo, 0.0f); + } + } + i++; + object oLimbo=GetObjectByTag("Limbo",i); + } + object oTarget; + if (i>=2000) + { + oTarget = CreateObject(OBJECT_TYPE_CREATURE,sTemplate,lLimbo); + } + else + { + oTarget = CreateObject(OBJECT_TYPE_CREATURE,sTemplate,GetLocation(oPC)); + } + + if (!GetIsObjectValid(oTarget)) + { + SendMessageToPC(oPC, "Not a valid creature."); + } + if ( !in_list ) + { + SendMessageToPC( oPC, "You have not mimiced this creature yet." ); + } + + // Make sure the PC can take on that form + if (GetValidShift(oPC, oTarget) && in_list ) + { + //get the appearance before changing it + SetLocalInt(oTarget,"Appearance",GetAppearanceType(oTarget)); + //set appearance to invis so it dont show up when scripts run thro + SetCreatureAppearanceType(oTarget,APPEARANCE_TYPE_INVISIBLE_HUMAN_MALE); + //set oTarget for deletion + SetLocalInt(oTarget,"pnp_shifter_deleteme",1); + //Shift the PC to it + bRetValue = TRUE; + if (iEpic == TRUE) + SetShiftEpic(oPC, oTarget); + else + SetShift(oPC, oTarget); + } + else //if we're not gona shift we need to get ride of the creature + { + // Remove the temporary creature + AssignCommand(oTarget,SetIsDestroyable(TRUE,FALSE,FALSE)); + SetPlotFlag(oTarget,FALSE); + SetImmortal(oTarget,FALSE); + DestroyObject(oTarget); + } + return bRetValue; +} + +// helper function to SetVisualTrueForm() for DelayCommand() to work on +void SetBodyPartTrueForm(object oPC, int i) +{ + int nBodyPartValue = GetPersistantLocalInt(oPC, "AppearanceStoredPart"+IntToString(i)); + if(GetCreatureBodyPart(i) != nBodyPartValue) // if the stored and current values are different + SetCreatureBodyPart(i, nBodyPartValue, oPC); +} + +//returns the PC to their original form +//purely visual +void SetVisualTrueForm(object oPC) +{ + if(GetPersistantLocalInt(oPC,"AppearanceIsStored") == 6) + { + SetCreatureAppearanceType(oPC, GetPersistantLocalInt(oPC,"AppearanceStored")); + SetPortraitId(oPC, GetPersistantLocalInt(oPC, "AppearanceStoredPortraitID")); + SetPortraitResRef(oPC, GetPersistantLocalString(oPC, "AppearanceStoredPortraitResRef")); + SetCreatureTailType(GetPersistantLocalInt(oPC, "AppearanceStoredTail"), oPC); + SetCreatureWingType(GetPersistantLocalInt(oPC, "AppearanceStoredWing"), oPC); + int i; + for(i=0;i<=20;i++) + { + DelayCommand(1.0, SetBodyPartTrueForm(oPC, i)); + } + } + else + //hasnt been previously stored + //use racial lookup + SetCreatureAppearanceType(oPC, GetTrueForm(oPC)); +} + + +// Transforms the oPC back to thier true form if they are shifted +void SetShiftTrueForm(object oPC) +{ + // Remove all the creature equipment and destroy it + object oHide = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC); + object oWeapCR = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R,oPC); + object oWeapCL = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L,oPC); + object oWeapCB = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B,oPC); + + // Do not move or destroy the objects, it will crash the game + if (GetIsObjectValid(oHide)) + { + // Remove all the abilities of the object + ScrubPCSkin(oPC,oHide); + DeletePRCLocalInts(oHide); + AssignCommand(oPC, ActionEquipItem(oHide, INVENTORY_SLOT_CARMOUR)); //reequip the hide to get item props to update properly + } + + itemproperty ipUnarmed = ItemPropertyMonsterDamage(2); + + if (GetIsObjectValid(oWeapCR)) + { + //remove creature weapons + ClearCreatureItem(oPC, oWeapCR); + //AssignCommand(oPC,ActionUnequipItem(oWeapCR)); + } + if (GetIsObjectValid(oWeapCL)) + { + //remove creature weapons + ClearCreatureItem(oPC, oWeapCL); + //AssignCommand(oPC,ActionUnequipItem(oWeapCL)); + + } + if (GetIsObjectValid(oWeapCB)) + { + //remove creature weapons + ClearCreatureItem(oPC, oWeapCB); + //AssignCommand(oPC,ActionUnequipItem(oWeapCB)); + } + // if the did an epic form remove the special powers + object oEpicPowersItem = GetItemPossessedBy(oPC,"EpicShifterPowers"); + if (GetIsObjectValid(oEpicPowersItem)) + { + ClearCreatureItem(oPC, oEpicPowersItem); + //RemoveAllItemProperties(oEpicPowersItem); + RemoveAuraEffect( oPC ); + } + + + // Spell failure was done through an effect + // AC was done via an effect + // invis was done via an effect + // we will look for and remove them + effect eEff = GetFirstEffect(oPC); + while (GetIsEffectValid(eEff)) + { + int eDurType = GetEffectDurationType(eEff); + int eSubType = GetEffectSubType(eEff); + int eType = GetEffectType(eEff); + int eID = GetEffectSpellId(eEff); + object eCreator = GetEffectCreator(eEff); + //all three effects are permanent and supernatural and are created by spell id -1 and by the PC. + if ((eDurType == DURATION_TYPE_PERMANENT) && (eSubType == SUBTYPE_SUPERNATURAL) && (eID == -1) && (eCreator == oPC)) + { + switch (eType) + { + case EFFECT_TYPE_SPELL_FAILURE: + case EFFECT_TYPE_INVISIBILITY: + case EFFECT_TYPE_AC_INCREASE: + case EFFECT_TYPE_AC_DECREASE: + case EFFECT_TYPE_ATTACK_INCREASE: + case EFFECT_TYPE_ATTACK_DECREASE: + case EFFECT_TYPE_DAMAGE_INCREASE: + case EFFECT_TYPE_DAMAGE_DECREASE: + case EFFECT_TYPE_TEMPORARY_HITPOINTS: + RemoveEffect(oPC,eEff); + break; + } + } + if (eType == EFFECT_TYPE_POLYMORPH) + { + RemoveEffect(oPC,eEff); + } + eEff = GetNextEffect(oPC); + } + + // Change the PC appearance back to TRUE form + SetVisualTrueForm(oPC); + + // Set race back to unused + SetLocalInt(oPC, "RACIAL_TYPE", 0); + + // Reset shifted state + SetPersistantLocalInt(oPC, "nPCShifted", FALSE); + +} + + +void ClearCreatureItem(object oPC, object oTarget) +{ + AssignCommand(oPC, ActionUnequipItem(oTarget)); + DelayCommand(0.10, AssignCommand(oPC, DestroyObject(oTarget))); +} \ No newline at end of file diff --git a/src/include/pnp_shft_poly.nss b/src/include/pnp_shft_poly.nss new file mode 100644 index 0000000..ce6d860 --- /dev/null +++ b/src/include/pnp_shft_poly.nss @@ -0,0 +1,249 @@ +// Used to polymorph characters to lycanthrope shapes +// Merges Weapons, Armors, Items if told to by 2da. +// - object oPC: Player to Polymorph +// - int nPoly: POLYMORPH_TYPE_* Constant +void LycanthropePoly(object oPC, int nPoly); + +void DoDisguise(int nRace, object oTarget = OBJECT_SELF); +void ShifterCheck(object oPC); + +#include "pnp_shft_main" +#include "prc_inc_shifting" + +const string PRC_PNP_SHIFTING = "PRC_Shift"; + +////////////////Begin Werewolf////////////////// + +void LycanthropePoly(object oPC, int nPoly) +{ + effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH); + effect ePoly; + + ePoly = EffectPolymorph(nPoly); + ePoly = SupernaturalEffect(ePoly); + + int bWeapon = StringToInt(Get2DACache("polymorph","MergeW",nPoly)) == 1; + int bArmor = StringToInt(Get2DACache("polymorph","MergeA",nPoly)) == 1; + int bItems = StringToInt(Get2DACache("polymorph","MergeI",nPoly)) == 1; + + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,oPC); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,oPC); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,oPC); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,oPC); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,oPC); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,oPC); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,oPC); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,oPC); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC); + if (GetIsObjectValid(oShield)) + { + if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD && + GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD) + { + oShield = OBJECT_INVALID; + } + } + + //check if a shifter and if shifted then unshift + ShifterCheck(oPC); + + ClearAllActions(); // prevents an exploit + + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, oPC); + + object oWeaponNewRight = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R,oPC); + object oWeaponNewLeft = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L,oPC); + object oWeaponNewBite = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B,oPC); + object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC); + + if (bWeapon) + { + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNewLeft, TRUE); + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNewRight, TRUE); + IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNewBite, TRUE); + } + if (bArmor) + { + IPWildShapeCopyItemProperties(oShield,oArmorNew); + IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); + IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); + } + if (bItems) + { + IPWildShapeCopyItemProperties(oRing1Old,oArmorNew); + IPWildShapeCopyItemProperties(oRing2Old,oArmorNew); + IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew); + IPWildShapeCopyItemProperties(oCloakOld,oArmorNew); + IPWildShapeCopyItemProperties(oBootsOld,oArmorNew); + IPWildShapeCopyItemProperties(oBeltOld,oArmorNew); + } + +} + +////////////////End Werewolf////////////////// + +void ShifterCheck(object oPC) +{ + if (!GetIsPC(oPC)) + return; + //int iShifterLevels = GetLevelByClass(CLASS_TYPE_PNP_SHIFTER,oPC); + //if (iShifterLevels>0) + //{ + int iTemp = GetPersistantLocalInt(oPC,"nPCShifted"); + + if (iTemp) + { + DoDebug("ShifterCheck(): calling UnShift()"); + //SetShiftTrueForm(oPC); + UnShift(oPC, TRUE); + } + //} +} + + +//changes portrait, head, and appearance +//based on the target race with a degree of randomization. +void DoDisguise(int nRace, object oTarget = OBJECT_SELF) +{ + //store current appearance to be safe + StoreAppearance(oTarget); + int nAppearance; //appearance to change into + int nHeadMax; //max head ID, changed to random 1-max + int nGender = GetGender(oTarget); + int nPortraitMin;//minimum row in portraits.2da + int nPortraitMax;//maximum row in portraits.2da + switch(nRace) + { + case RACIAL_TYPE_DWARF: + nAppearance = APPEARANCE_TYPE_DWARF; + if(nGender == GENDER_MALE) + { nHeadMax = 10; nPortraitMin = 9; nPortraitMax = 17; } + else + { nHeadMax = 12; nPortraitMin = 1; nPortraitMax = 8; } + break; + case RACIAL_TYPE_ELF: + nAppearance = APPEARANCE_TYPE_ELF; + if(nGender == GENDER_MALE) + { nHeadMax = 10; nPortraitMin = 31; nPortraitMax = 40; } + else + { nHeadMax = 16; nPortraitMin = 18; nPortraitMax = 30; } + break; + case RACIAL_TYPE_HALFELF: + nAppearance = APPEARANCE_TYPE_HALF_ELF; + if(nGender == GENDER_MALE) + { nHeadMax = 18; nPortraitMin = 93; nPortraitMax = 112; } + else + { nHeadMax = 15; nPortraitMin = 67; nPortraitMax = 92; } + break; + case RACIAL_TYPE_HALFORC: + nAppearance = APPEARANCE_TYPE_HALF_ORC; + if(nGender == GENDER_MALE) + { nHeadMax = 11; nPortraitMin = 134; nPortraitMax = 139; } + else + { nHeadMax = 1; nPortraitMin = 130; nPortraitMax = 133; } + break; + case RACIAL_TYPE_HUMAN: + nAppearance = APPEARANCE_TYPE_HUMAN; + if(nGender == GENDER_MALE) + { nHeadMax = 18; nPortraitMin = 93; nPortraitMax = 112; } + else + { nHeadMax = 15; nPortraitMin = 67; nPortraitMax = 92; } + break; + case RACIAL_TYPE_HALFLING: + nAppearance = APPEARANCE_TYPE_HALFLING; + if(nGender == GENDER_MALE) + { nHeadMax = 8; nPortraitMin = 61; nPortraitMax = 66; } + else + { nHeadMax = 11; nPortraitMin = 54; nPortraitMax = 59; } + break; + case RACIAL_TYPE_GNOME: + nAppearance = APPEARANCE_TYPE_GNOME; + if(nGender == GENDER_MALE) + { nHeadMax = 11; nPortraitMin = 47; nPortraitMax = 53; } + else + { nHeadMax = 9; nPortraitMin = 41; nPortraitMax = 46; } + break; + default: //not a normal race, abort + return; + } + //change the appearance + SetCreatureAppearanceType(oTarget, nAppearance); + + //need to be delayed a bit otherwise you get "supergnome" and "exploded elf" effects + DelayCommand(1.1, SetCreatureBodyPart(CREATURE_PART_RIGHT_SHIN, d2(), oTarget)); + DelayCommand(1.2, SetCreatureBodyPart(CREATURE_PART_LEFT_SHIN, d2(), oTarget)); + DelayCommand(1.3, SetCreatureBodyPart(CREATURE_PART_RIGHT_THIGH, d2(), oTarget)); + DelayCommand(1.4, SetCreatureBodyPart(CREATURE_PART_LEFT_THIGH, d2(), oTarget)); + DelayCommand(1.5, SetCreatureBodyPart(CREATURE_PART_TORSO, d2(), oTarget)); + DelayCommand(1.6, SetCreatureBodyPart(CREATURE_PART_RIGHT_FOREARM, d2(), oTarget)); + DelayCommand(1.7, SetCreatureBodyPart(CREATURE_PART_LEFT_FOREARM, d2(), oTarget)); + DelayCommand(1.8, SetCreatureBodyPart(CREATURE_PART_RIGHT_BICEP, d2(), oTarget)); + DelayCommand(1.9, SetCreatureBodyPart(CREATURE_PART_LEFT_BICEP, d2(), oTarget)); + + //dont do these body parts, they dont have tattoos and weird things could happen + //SetCreatureBodyPart(CREATURE_PART_BELT, d2(), oTarget); + //SetCreatureBodyPart(CREATURE_PART_NECK, d2(), oTarget); + //SetCreatureBodyPart(CREATURE_PART_RIGHT_SHOULDER, d2(), oTarget); + //SetCreatureBodyPart(CREATURE_PART_LEFT_SHOULDER, d2(), oTarget); + //SetCreatureBodyPart(CREATURE_PART_RIGHT_HAND, d2(), oTarget); + //SetCreatureBodyPart(CREATURE_PART_LEFT_HAND, d2(), oTarget); + //SetCreatureBodyPart(CREATURE_PART_PELVIS, d2(), oTarget); + //SetCreatureBodyPart(CREATURE_PART_RIGHT_FOOT, d2(), oTarget); + //SetCreatureBodyPart(CREATURE_PART_LEFT_FOOT, d2(), oTarget); + //randomise the head + DelayCommand(2.0, SetCreatureBodyPart(CREATURE_PART_HEAD, Random(nHeadMax)+1, oTarget)); + + //remove any wings/tails + SetCreatureWingType(CREATURE_WING_TYPE_NONE, oTarget); + SetCreatureTailType(CREATURE_TAIL_TYPE_NONE, oTarget); + + int nPortraitID = Random(nPortraitMax-nPortraitMin+1)+nPortraitMin; + string sPortraitResRef = Get2DACache("portraits", "BaseResRef", nPortraitID); + sPortraitResRef = GetStringLeft(sPortraitResRef, GetStringLength(sPortraitResRef)-1); //trim the trailing _ + SetPortraitResRef(oTarget, sPortraitResRef); + SetPortraitId(oTarget, nPortraitID); +} + +//utility functions to make sure characters that gain wings/tails permanently +//interact with the polymorph system by overwriting the default form + + +void DoWings(object oPC, int nWingType) +{ + //wing invalid, abort + if(nWingType <= 0) + return; + //already has wings, keep them + if(GetCreatureWingType(oPC) != CREATURE_WING_TYPE_NONE) + return; + //already has a default wings, keep them + if(GetPersistantLocalInt(oPC, "AppearanceStoredWing")) + return; + //if polymorphed or shifted, dont do the real change + if(!GetIsPolyMorphedOrShifted(oPC)) + SetCreatureWingType(nWingType, oPC); + //override any stored default appearance + SetPersistantLocalInt(oPC, "AppearanceStoredWing", nWingType); +} + +void DoTail(object oPC, int nTailType) +{ + //tail invalid, use current + if(nTailType == -1) + return; + //already has tail, keep it + if(GetCreatureTailType(oPC)) + return; + //already has a default tail, keep it + if(GetPersistantLocalInt(oPC, "AppearanceStoredTail")) + return; + //if polymorphed or shifted, dont do the real change + if(!GetIsPolyMorphedOrShifted(oPC)) + SetCreatureTailType(nTailType, oPC); + //override any stored default appearance + SetPersistantLocalInt(oPC, "AppearanceStoredTail", nTailType); +} \ No newline at end of file diff --git a/src/include/prc_add_spell_dc.nss b/src/include/prc_add_spell_dc.nss new file mode 100644 index 0000000..4cde6de --- /dev/null +++ b/src/include/prc_add_spell_dc.nss @@ -0,0 +1,788 @@ +// Get the DC to save against for a spell (10 + spell level + relevant ability +// bonus). This can be called by a creature or by an Area of Effect object. +// Takes into account PRC classes +int PRCGetSpellSaveDC(int nSpellID = -1, int nSchool = -1, object oCaster = OBJECT_SELF); + +// Use this function to get the adjustments to a spell or SLAs saving throw +// from the various class effects +// Update this function if any new classes change saving throws +int PRCGetSaveDC(object oTarget, object oCaster, int nSpellID = -1); + +//called just from above and from inc_epicspells +int GetChangesToSaveDC(object oTarget, object oCaster, int nSpellID, int nSchool); + +#include "prc_add_spl_pen" +// #include "prc_inc_spells" +// #include "prc_class_const" +// #include "prc_feat_const" +// #include "lookup_2da_spell" +// #include "prcsp_archmaginc" +// #include "prc_alterations" +// #include "prc_inc_racial" +#include "inc_newspellbook" + +int GetCorruptSpellFocus(int nSpellID, object oCaster) +{ + int nCorrupt = FALSE; + if(nSpellID == SPELL_ABSORB_STRENGTH + || nSpellID == SPELL_APOCALYPSE_FROM_THE_SKY + || nSpellID == SPELL_CLAWS_OF_THE_BEBILITH + || nSpellID == SPELL_DEATH_BY_THORNS + || nSpellID == SPELL_EVIL_WEATHER + || nSpellID == SPELL_FANGS_OF_THE_VAMPIRE_KING + || nSpellID == SPELL_LAHMS_FINGER_DARTS + || nSpellID == SPELL_POWER_LEECH + || nSpellID == SPELL_RAPTURE_OF_RUPTURE + || nSpellID == SPELL_RED_FESTER + || nSpellID == SPELL_ROTTING_CURSE_OF_URFESTRA + || nSpellID == SPELL_SEETHING_EYEBANE + || nSpellID == SPELL_TOUCH_OF_JUIBLEX) + nCorrupt = TRUE; + + if (GetHasFeat(FEAT_GREATER_CORRUPT_SPELL_FOCUS, oCaster) && nCorrupt) return 2; + else if (GetHasFeat(FEAT_CORRUPT_SPELL_FOCUS, oCaster) && nCorrupt) return 1; + + return 0; +} + +int GetHeartWarderDC(int spell_id, int nSchool, object oCaster) +{ + // Check the curent school + if(nSchool != SPELL_SCHOOL_ENCHANTMENT) + return 0; + + if(!GetHasFeat(FEAT_VOICE_SIREN, oCaster)) + return 0; + + // Bonus Requires Verbal Spells + string VS = GetStringLowerCase(Get2DACache("spells", "VS",spell_id)); + if(FindSubString(VS, "v") == -1) + return 0; + + // These feats provide greater bonuses or remove the Verbal requirement + if(PRCGetMetaMagicFeat(oCaster, FALSE) & METAMAGIC_SILENT + || GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ENCHANTMENT, oCaster) + || GetHasFeat(FEAT_EPIC_SPELL_FOCUS_ENCHANTMENT, oCaster)) + return 0; + + return 2; +} + +//Elemental Savant DC boost based on elemental spell type. +int ElementalSavantDC(int spell_id, int nElement, object oCaster) +{ + int nDC = 0; + + // All Elemental Savants will have this feat + // when they first gain a DC bonus. + if(GetHasFeat(FEAT_ES_FOCUS_1, oCaster)) + { + // Any value that does not match one of the enumerated feats + int feat, nES; + nES = GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + // Specify the elemental type rather than lookup by class? + if(nElement & DESCRIPTOR_FIRE) + { + feat = FEAT_ES_FIRE; + } + else if(nElement & DESCRIPTOR_COLD) + { + feat = FEAT_ES_COLD; + } + else if(nElement & DESCRIPTOR_ELECTRICITY) + { + feat = FEAT_ES_ELEC; + } + else if(nElement & DESCRIPTOR_ACID) + { + feat = FEAT_ES_ACID; + } + + // Now determine the bonus + if(feat && GetHasFeat(feat, oCaster)) + nDC = (nES + 1) / 3; + } +// SendMessageToPC(GetFirstPC(), "Your Elemental Focus modifier is " + IntToString(nDC)); + return nDC; +} + +// This does other spell focus feats, starting with Spell Focus: Cold +int SpellFocus(int nSpellId, int nElement, object oCaster) +{ + int nDC = 0; + + // Specify the elemental type + if(nElement & DESCRIPTOR_COLD) + { + if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_COLD, oCaster)) + nDC += 2; + else if(GetHasFeat(FEAT_SPELL_FOCUS_COLD, oCaster)) + nDC += 1; + } + if (GetHasDescriptor(nSpellId, DESCRIPTOR_CHAOTIC) && GetHasFeat(FEAT_SPELL_FOCUS_CHAOS, oCaster)) nDC += 1; + if (GetHasDescriptor(nSpellId, DESCRIPTOR_EVIL) && GetHasFeat(FEAT_SPELL_FOCUS_EVIL, oCaster)) nDC += 1; + if (GetHasDescriptor(nSpellId, DESCRIPTOR_GOOD) && GetHasFeat(FEAT_SPELL_FOCUS_GOOD, oCaster)) nDC += 1; + if (GetHasDescriptor(nSpellId, DESCRIPTOR_LAWFUL) && GetHasFeat(FEAT_SPELL_FOCUS_LAWFUL, oCaster)) nDC += 1; + + return nDC; +} + +//Red Wizard DC boost based on spell school specialization +int RedWizardDC(int spell_id, int nSchool, object oCaster) +{ + int iRedWizard = GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); + int nDC; + + if(iRedWizard) + { + int iRWSpec; + switch(nSchool) + { + case SPELL_SCHOOL_ABJURATION: iRWSpec = FEAT_RW_TF_ABJ; break; + case SPELL_SCHOOL_CONJURATION: iRWSpec = FEAT_RW_TF_CON; break; + case SPELL_SCHOOL_DIVINATION: iRWSpec = FEAT_RW_TF_DIV; break; + case SPELL_SCHOOL_ENCHANTMENT: iRWSpec = FEAT_RW_TF_ENC; break; + case SPELL_SCHOOL_EVOCATION: iRWSpec = FEAT_RW_TF_EVO; break; + case SPELL_SCHOOL_ILLUSION: iRWSpec = FEAT_RW_TF_ILL; break; + case SPELL_SCHOOL_NECROMANCY: iRWSpec = FEAT_RW_TF_NEC; break; + case SPELL_SCHOOL_TRANSMUTATION: iRWSpec = FEAT_RW_TF_TRS; break; + } + + if(iRWSpec && GetHasFeat(iRWSpec, oCaster)) + nDC = iRedWizard / 2; + } +// SendMessageToPC(GetFirstPC(), "Your Spell Power modifier is " + IntToString(nDC)); + return nDC; +} + +//Red Wizards recieve a bonus against their specialist schools +// this is done by lowering the DC of spells cast against them +int RedWizardDCPenalty(int spell_id, int nSchool, object oTarget) +{ + int nDC; + int iRW = GetLevelByClass(CLASS_TYPE_RED_WIZARD, oTarget); + if(iRW) + { + int iRWSpec; + switch(nSchool) + { + case SPELL_SCHOOL_ABJURATION: iRWSpec = FEAT_RW_TF_ABJ; break; + case SPELL_SCHOOL_CONJURATION: iRWSpec = FEAT_RW_TF_CON; break; + case SPELL_SCHOOL_DIVINATION: iRWSpec = FEAT_RW_TF_DIV; break; + case SPELL_SCHOOL_ENCHANTMENT: iRWSpec = FEAT_RW_TF_ENC; break; + case SPELL_SCHOOL_EVOCATION: iRWSpec = FEAT_RW_TF_EVO; break; + case SPELL_SCHOOL_ILLUSION: iRWSpec = FEAT_RW_TF_ILL; break; + case SPELL_SCHOOL_NECROMANCY: iRWSpec = FEAT_RW_TF_NEC; break; + case SPELL_SCHOOL_TRANSMUTATION: iRWSpec = FEAT_RW_TF_TRS; break; + } + + if(iRWSpec && GetHasFeat(iRWSpec, oTarget)) + nDC -= iRW > 4 ? (iRW - 1) / 2 : (iRW + 1) / 2; + } + return nDC; +} + +int ShadowAdeptDCPenalty(int spell_id, int nSchool, object oTarget) +{ + int nDC; + int iShadow = GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oTarget); + if(iShadow) + { + if(nSchool == SPELL_SCHOOL_ENCHANTMENT + || nSchool == SPELL_SCHOOL_NECROMANCY + || nSchool == SPELL_SCHOOL_ILLUSION) + { + nDC -= (iShadow + 1) / 3; + } + //SendMessageToPC(GetFirstPC(), "Your Spell Save modifier is " + IntToString(nDC)); + } + return nDC; +} + +//Tattoo Focus DC boost based on spell school specialization +int TattooFocus(int spell_id, int nSchool, object oCaster) +{ + int nDC; + int iRWSpec; + switch(nSchool) + { + case SPELL_SCHOOL_ABJURATION: iRWSpec = FEAT_RW_TF_ABJ; break; + case SPELL_SCHOOL_CONJURATION: iRWSpec = FEAT_RW_TF_CON; break; + case SPELL_SCHOOL_DIVINATION: iRWSpec = FEAT_RW_TF_DIV; break; + case SPELL_SCHOOL_ENCHANTMENT: iRWSpec = FEAT_RW_TF_ENC; break; + case SPELL_SCHOOL_EVOCATION: iRWSpec = FEAT_RW_TF_EVO; break; + case SPELL_SCHOOL_ILLUSION: iRWSpec = FEAT_RW_TF_ILL; break; + case SPELL_SCHOOL_NECROMANCY: iRWSpec = FEAT_RW_TF_NEC; break; + case SPELL_SCHOOL_TRANSMUTATION: iRWSpec = FEAT_RW_TF_TRS; break; + } + + if(iRWSpec && GetHasFeat(iRWSpec, oCaster)) + nDC = 1; + + return nDC; +} + +//:: Jaebrins get a +1 to Enchantment spells. +int JaebrinEnchant(int nSchool, object oCaster) +{ + int nDC; + + if(nSchool == SPELL_SCHOOL_ENCHANTMENT && GetRacialType(oCaster) == RACIAL_TYPE_JAEBRIN) + nDC = 1; + + return nDC; +} + +int ShadowWeaveDC(int spell_id, int nSchool, object oCaster) +{ + // Account for the Shadow Weave feat + int nDC = ShadowWeave(oCaster, spell_id, nSchool) == 1; + + // Account for Shadow Adept levels + int iShadow = GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + if(iShadow && nDC) + // Shadow Spell Power + nDC += iShadow / 3; + + return nDC; +} + +int KOTCSpellFocusVsDemons(object oTarget, object oCaster) +{ + if(GetLevelByClass(CLASS_TYPE_KNIGHT_CHALICE, oCaster) >= 1) + { + if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_OUTSIDER) + { + if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL) + { + return 2; + } + } + } + return 0; +} + +int BloodMagusBloodComponent(object oCaster) +{ + int nDC = 0; + if (GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster) > 0 && GetLocalInt(oCaster, "BloodComponent") == TRUE) + { + nDC = 1; + effect eSelfDamage = EffectDamage(1, DAMAGE_TYPE_MAGICAL); + // To make sure it doesn't cause a conc check + DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eSelfDamage, oCaster)); + } + return nDC; +} + +int RunecasterRunePowerDC(object oCaster) +{ + int nDC; + + if(GetHasSpellEffect(SPELL_RUNE_CHANT)) + { + int nClass = GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if (nClass >= 30) nDC = 10; + else if (nClass >= 27) nDC = 9; + else if (nClass >= 24) nDC = 8; + else if (nClass >= 21) nDC = 7; + else if (nClass >= 18) nDC = 6; + else if (nClass >= 15) nDC = 5; + else if (nClass >= 12) nDC = 4; + else if (nClass >= 9) nDC = 3; + else if (nClass >= 5) nDC = 2; + else if (nClass >= 2) nDC = 1; + } + return nDC; +} + + //Unheavened spell +int UnheavenedAdjustment(object oTarget, object oCaster) +{ + if(GetHasSpellEffect(SPELL_UNHEAVENED, oTarget)) + { + if((MyPRCGetRacialType(oCaster) == RACIAL_TYPE_OUTSIDER) && (GetAlignmentGoodEvil(oCaster) == ALIGNMENT_GOOD)) + { + return -4; + } + } + return 0; +} + +// Soul Eater's 10th level Soul Power ability. If they've drained in the last 24h, they get +2 to DCs +int SoulEaterSoulPower(object oCaster) +{ + return (GetLocalInt(oCaster, "PRC_SoulEater_HasDrained") && GetLevelByClass(CLASS_TYPE_SOUL_EATER, oCaster) >= 10) ? 2 : 0; +} + +//:: Saint Template gets a +2 DC on all spells, powers & abilites. +int SaintHolySpellPower(object oCaster) +{ + if(GetHasFeat(FEAT_TEMPLATE_SAINT_HOLY_POWER, oCaster)) + { + if (GetAlignmentGoodEvil(oCaster) == ALIGNMENT_GOOD) + { + return 2; + } + else + { + return 0; + } + } +//:: If it gets here, the caster does not have the feat + return 0; +} + +//Draconic Power's elemental boost to spell DCs +int DraconicPowerDC(int spell_id, int nElement, object oCaster) +{ + if(GetHasFeat(FEAT_DRACONIC_POWER, oCaster)) + { + // Compare heritage type and elemental type + if(nElement & DESCRIPTOR_FIRE) + { + if(GetHasFeat(FEAT_DRACONIC_HERITAGE_BS, oCaster) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_GD, oCaster) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_RD, oCaster)) + return 1; + } + else if(nElement & DESCRIPTOR_COLD) + { + if(GetHasFeat(FEAT_DRACONIC_HERITAGE_CR, oCaster) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_SR, oCaster) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_TP, oCaster) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_WH, oCaster)) + return 1; + } + else if(nElement & DESCRIPTOR_ELECTRICITY) + { + if(GetHasFeat(FEAT_DRACONIC_HERITAGE_BL, oCaster) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_BZ, oCaster) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_SA, oCaster)) + return 1; + } + else if(nElement & DESCRIPTOR_ACID) + { + if(GetHasFeat(FEAT_DRACONIC_HERITAGE_BK, oCaster) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_CP, oCaster) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_GR, oCaster)) + return 1; + } + else if(nElement & DESCRIPTOR_SONIC) + { + if(GetHasFeat(FEAT_DRACONIC_HERITAGE_EM, oCaster)) + return 1; + } + } + + //if it gets here, the caster does not have the feat, or is a heritage type without a NWN element (e.g. Amethyst) + return 0; +} + +//Energy Draconc Aura's elemental boost to spell DCs +int EnergyAuraDC(int spell_id, int nElement, object oCaster) +{ + // Compare aura type and elemental type + if(nElement & DESCRIPTOR_FIRE) + return GetLocalInt(oCaster, "FireEnergyAura"); + + else if(nElement & DESCRIPTOR_COLD) + return GetLocalInt(oCaster, "ColdEnergyAura"); + + else if(nElement & DESCRIPTOR_ELECTRICITY) + return GetLocalInt(oCaster, "ElecEnergyAura"); + + else if(nElement & DESCRIPTOR_ACID) + return GetLocalInt(oCaster, "AcidEnergyAura"); + + //if it gets here, the caster is not in this type of Draconic Aura + return 0; +} + +//Spirit Folk get a better save vs elemental stuff +int SpiritFolkAdjustment(int spell_id, int nElement, object oTarget) +{ + if(nElement & DESCRIPTOR_FIRE && GetHasFeat(FEAT_BONUS_SEA, oTarget)) + { + return -2; + } + else if(nElement & DESCRIPTOR_COLD && GetHasFeat(FEAT_BONUS_RIVER, oTarget)) + { + return -2; + } + else if(nElement & DESCRIPTOR_ACID && GetHasFeat(FEAT_BONUS_BAMBOO, oTarget)) + { + return -2; + } + + //if it gets here, the target is not a Spirit Folk + return 0; +} + +//Angry Spell for Rage Mage class +int AngrySpell(int spell_id, int nSchool, object oCaster) +{ + int nDC; + + if(GetHasSpellEffect(SPELL_SPELL_RAGE, oCaster)) + { + if(nSchool == SPELL_SCHOOL_ABJURATION + || nSchool == SPELL_SCHOOL_CONJURATION + || nSchool == SPELL_SCHOOL_EVOCATION + || nSchool == SPELL_SCHOOL_NECROMANCY + || nSchool == SPELL_SCHOOL_TRANSMUTATION) + { + if(GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) >= 10) + nDC = 4; + else if(GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) >= 5) + nDC = 2; + } + } + + return nDC; +} + +int CloakedCastingDC(int spell_id, object oTarget, object oCaster) +{ + int nDC; + int iBeguiler = GetLevelByClass(CLASS_TYPE_BEGUILER, oCaster); + + if(iBeguiler) + { + if(GetIsDeniedDexBonusToAC(oTarget, oCaster, TRUE)) + { + if(iBeguiler >= 14) + nDC = 2; + else if(iBeguiler >= 2) + nDC = 1; + } + } + + return nDC; +} + + // Wyrmbane Helm +int WyrmbaneHelmDC(object oTarget, object oCaster) +{ + // You get nothing if you aren't wielding the legacy item + object oWOL = GetItemPossessedBy(oCaster, "WOL_Wyrmbane"); + if(oWOL != GetItemInSlot(INVENTORY_SLOT_HEAD, oCaster)) return 0; + + if((MyPRCGetRacialType(oTarget) == RACIAL_TYPE_DRAGON)) + { + return 2; + } + return 0; +} + +// Arkamoi Strength From Magic +int StrengthFromMagic(object oCaster) +{ + if (GetRacialType(oCaster) != RACIAL_TYPE_ARKAMOI) + return 0; + + if (GetIsArcaneClass(PRCGetLastSpellCastClass(oCaster))) + return GetLocalInt(oCaster, "StrengthFromMagic"); + + return 0; +} + +// Hobgoblin Warsoul Soul Tyrant +int SoulTyrant(object oCaster) +{ + if (GetRacialType(oCaster) != RACIAL_TYPE_HOBGOBLIN_WARSOUL) + return 0; + + if (GetIsArcaneClass(PRCGetLastSpellCastClass(oCaster))) + return GetLocalInt(oCaster, "WarsoulTyrant"); + + return 0; +} + +int PRCGetSpellSaveDC(int nSpellID = -1, int nSchool = -1, object oCaster = OBJECT_SELF) +{ + if(nSpellID == -1) + nSpellID = PRCGetSpellId(); + if(nSchool == -1) + nSchool = GetSpellSchool(nSpellID); + + int nClass = PRCGetLastSpellCastClass(oCaster); + int nDC = 10; + + if(nClass == CLASS_TYPE_BARD) + nDC += StringToInt(Get2DACache("Spells", "Bard", nSpellID)); + else if(nClass == CLASS_TYPE_CLERIC || nClass == CLASS_TYPE_UR_PRIEST || nClass == CLASS_TYPE_OCULAR) + nDC += StringToInt(Get2DACache("Spells", "Cleric", nSpellID)); + else if(nClass == CLASS_TYPE_DRUID) + nDC += StringToInt(Get2DACache("Spells", "Druid", nSpellID)); + else if(nClass == CLASS_TYPE_RANGER) + nDC += StringToInt(Get2DACache("Spells", "Ranger", nSpellID)); + else if(nClass == CLASS_TYPE_PALADIN) + nDC += StringToInt(Get2DACache("Spells", "Paladin", nSpellID)); + else if (nClass == CLASS_TYPE_CULTIST_SHATTERED_PEAK) + nDC += StringToInt(Get2DACache("spells", "Cultist", nSpellID)); + else if (nClass == CLASS_TYPE_NENTYAR_HUNTER) + nDC += StringToInt(Get2DACache("spells", "Nentyar", nSpellID)); + else if (nClass == CLASS_TYPE_SHADOWLORD) + nDC += StringToInt(Get2DACache("spells", "Telflammar", nSpellID)); + else if (nClass == CLASS_TYPE_SLAYER_OF_DOMIEL) + nDC += StringToInt(Get2DACache("spells", "Domiel", nSpellID)); + else if (nClass == CLASS_TYPE_SOHEI) + nDC += StringToInt(Get2DACache("spells", "Sohei", nSpellID)); + else if (nClass == CLASS_TYPE_VASSAL) + nDC += StringToInt(Get2DACache("spells", "Bahamut", nSpellID)); + else if (nClass == CLASS_TYPE_BLACKGUARD) + nDC += StringToInt(Get2DACache("spells", "Blackguard", nSpellID)); + else if (nClass == CLASS_TYPE_KNIGHT_CHALICE) + nDC += StringToInt(Get2DACache("spells", "Chalice", nSpellID)); + else if (nClass == CLASS_TYPE_KNIGHT_MIDDLECIRCLE) + nDC += StringToInt(Get2DACache("spells", "MiddleCircle", nSpellID)); + else if (nClass == CLASS_TYPE_SOLDIER_OF_LIGHT) + nDC += StringToInt(Get2DACache("spells", "SoLight", nSpellID)); + else if (nClass == CLASS_TYPE_BLIGHTER) + nDC += StringToInt(Get2DACache("spells", "Blighter", nSpellID)); + else if (nClass == CLASS_TYPE_HEALER) + nDC += StringToInt(Get2DACache("spells", "Healer", nSpellID)); + else if (nClass == CLASS_TYPE_SHAMAN) + nDC += StringToInt(Get2DACache("spells", "Shaman", nSpellID)); + else if(nClass == CLASS_TYPE_WIZARD + || nClass == CLASS_TYPE_SORCERER) + nDC += StringToInt(Get2DACache("Spells", "Wiz_Sorc", nSpellID)); + else if(nClass != CLASS_TYPE_INVALID) + { + int nSpellbookID = RealSpellToSpellbookID(nClass, nSpellID); + string sFile = GetFileForClass(nClass); + nDC += StringToInt(Get2DACache(sFile, "Level", nSpellbookID)); + } + else + nDC += StringToInt(Get2DACache("Spells", "Innate", nSpellID)); + + // This is here because a Cleric casting a domain spell like Chain Lightning has a 0 in the cleric column, resulting in a DC of 10 + if (nDC == 10 && nClass == CLASS_TYPE_CLERIC) + nDC += StringToInt(Get2DACache("Spells", "Innate", nSpellID)); + + nDC += GetDCAbilityModForClass(nClass, oCaster); + + object oItem = GetSpellCastItem(); + + int nEpic = 6; + int nGreat = 4; + int nSF = 2; + + if (GetPRCSwitch(PRC_35_SPELL_FOCUS)) + { + nEpic = 3; + nGreat = 2; + nSF = 1; + } + + if(DEBUG && !GetIsObjectValid(oItem)) DoDebug("PRCGetSpellSaveDC oItem is OBJECT_INVALID"); + if(DEBUG) DoDebug("PRCGetSpellSaveDC oCaster "+GetName(oCaster)+", nSpell "+IntToString(nSpellID)+", nSchool "+IntToString(nSchool)+", nClass "+IntToString(nClass)+", oItem "+GetName(oItem)); + + if(!GetIsObjectValid(oItem) || (GetBaseItemType(oItem) == BASE_ITEM_MAGICSTAFF && GetPRCSwitch(PRC_STAFF_CASTER_LEVEL))) + { + if(nSchool == SPELL_SCHOOL_EVOCATION) + { + if(GetHasFeat(FEAT_EPIC_SPELL_FOCUS_EVOCATION, oCaster)) + nDC+=nEpic; + else if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_EVOCATION, oCaster)) + nDC+=nGreat; + else if(GetHasFeat(FEAT_SPELL_FOCUS_EVOCATION, oCaster)) + nDC+=nSF; + } + else if(nSchool == SPELL_SCHOOL_TRANSMUTATION) + { + if(GetHasFeat(FEAT_EPIC_SPELL_FOCUS_TRANSMUTATION, oCaster)) + nDC+=nEpic; + else if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_TRANSMUTATION, oCaster)) + nDC+=nGreat; + else if(GetHasFeat(FEAT_SPELL_FOCUS_TRANSMUTATION, oCaster)) + nDC+=nSF; + } + else if(nSchool == SPELL_SCHOOL_NECROMANCY) + { + if(GetHasFeat(FEAT_EPIC_SPELL_FOCUS_NECROMANCY, oCaster)) + nDC+=nEpic; + else if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_NECROMANCY, oCaster)) + nDC+=nGreat; + else if(GetHasFeat(FEAT_SPELL_FOCUS_NECROMANCY, oCaster)) + nDC+=nSF; + } + else if(nSchool == SPELL_SCHOOL_ILLUSION) + { + if(GetHasFeat(FEAT_EPIC_SPELL_FOCUS_ILLUSION, oCaster)) + nDC+=nEpic; + else if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ILLUSION, oCaster)) + nDC+=nGreat; + else if(GetHasFeat(FEAT_SPELL_FOCUS_ILLUSION, oCaster)) + nDC+=nSF; + } + else if(nSchool == SPELL_SCHOOL_ABJURATION) + { + if(GetHasFeat(FEAT_EPIC_SPELL_FOCUS_ABJURATION, oCaster)) + nDC+=nEpic; + else if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ABJURATION, oCaster)) + nDC+=nGreat; + else if(GetHasFeat(FEAT_SPELL_FOCUS_ABJURATION, oCaster)) + nDC+=nSF; + } + else if(nSchool == SPELL_SCHOOL_CONJURATION) + { + if(GetHasFeat(FEAT_EPIC_SPELL_FOCUS_CONJURATION, oCaster)) + nDC+=nEpic; + else if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION, oCaster)) + nDC+=nGreat; + else if(GetHasFeat(FEAT_SPELL_FOCUS_CONJURATION, oCaster)) + nDC+=nSF; + } + else if(nSchool == SPELL_SCHOOL_DIVINATION) + { + if(GetHasFeat(FEAT_EPIC_SPELL_FOCUS_DIVINATION, oCaster)) + nDC+=nEpic; + else if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_DIVINATION, oCaster)) + nDC+=nGreat; + else if(GetHasFeat(FEAT_SPELL_FOCUS_DIVINATION, oCaster)) + nDC+=nSF; + } + else if(nSchool == SPELL_SCHOOL_ENCHANTMENT) + { + if(GetHasFeat(FEAT_EPIC_SPELL_FOCUS_ENCHANTMENT, oCaster)) + nDC+=nEpic; + else if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ENCHANTMENT, oCaster)) + nDC+=nGreat; + else if(GetHasFeat(FEAT_SPELL_FOCUS_ENCHANTMENT, oCaster)) + nDC+=nSF; + } + } + + return nDC; +} + +int PRCGetSaveDC(object oTarget, object oCaster, int nSpellID = -1) +{ + object oItem = GetSpellCastItem(); + if(nSpellID == -1) + nSpellID = PRCGetSpellId(); + int nSchool = GetSpellSchool(nSpellID); + int nDC; + // at this point, if it's still -1 then this is running on an AoE + if (nSpellID == -1) + { + // get the needed values off the AoE + nSpellID = GetLocalInt(OBJECT_SELF, "X2_AoE_SpellID"); + nDC = GetLocalInt(OBJECT_SELF, "X2_AoE_BaseSaveDC"); + nSchool = GetSpellSchool(nSpellID); + } + else // not persistent AoE script + { + //10+spelllevel+stat(cha default) + nDC = PRCGetSpellSaveDC(nSpellID, nSchool, oCaster); + } + + // For when you want to assign the caster DC + //this does not take feat/race/class into account, it is an absolute override + if (GetLocalInt(oCaster, PRC_DC_TOTAL_OVERRIDE) != 0) + { + nDC = GetLocalInt(oCaster, PRC_DC_TOTAL_OVERRIDE); + if(DEBUG) DoDebug("Forced-DC PRC_DC_TOTAL_OVERRIDE casting at DC " + IntToString(nDC)); + } + // For when you want to assign the caster DC + //this does take feat/race/class into account, it only overrides the baseDC + else if (GetLocalInt(oCaster, PRC_DC_BASE_OVERRIDE) != 0) + { + nDC = GetLocalInt(oCaster, PRC_DC_BASE_OVERRIDE); + if(nDC == -1) + nDC = PRCGetSpellSaveDC(nSpellID, nSchool, oCaster); + + if(DEBUG) DoDebug("Forced Base-DC casting at DC " + IntToString(nDC)); + nDC += GetChangesToSaveDC(oTarget, oCaster, nSpellID, nSchool); + } + else if(GetIsObjectValid(oItem) && !(GetBaseItemType(oItem) == BASE_ITEM_MAGICSTAFF && GetPRCSwitch(PRC_STAFF_CASTER_LEVEL))) + { + //code for getting new ip type + itemproperty ipTest = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipTest)) + { + if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_CAST_SPELL_DC) + { + int nSubType = GetItemPropertySubType(ipTest); + nSubType = StringToInt(Get2DACache("iprp_spells", "SpellIndex", nSubType)); + if(nSubType == nSpellID) + { + nDC = GetItemPropertyCostTableValue (ipTest); + break;//end while + } + } + ipTest = GetNextItemProperty(oItem); + } + int nType = GetBaseItemType(oItem); + if(nType == BASE_ITEM_MAGICWAND || nType == BASE_ITEM_ENCHANTED_WAND) + { + if (GetHasFeat(FEAT_WAND_MASTERY, oCaster)) + nDC += 2; + } + } + else + nDC += GetChangesToSaveDC(oTarget, oCaster, nSpellID, nSchool); + + // Karsus's Heavy Magic ability + if(GetIsObjectValid(oItem) && GetHasSpellEffect(VESTIGE_KARSUS, oCaster) && GetLocalInt(oCaster, "ExploitVestige") != VESTIGE_KARSUS_HEAVY_MAGIC && (GetLevelByClass(CLASS_TYPE_BINDER, oCaster) || GetHasFeat(FEAT_PRACTICED_BINDER, oCaster))) + nDC += 2; + + //target-based adjustments go here + nDC += RedWizardDCPenalty(nSpellID, nSchool, oTarget); + nDC += ShadowAdeptDCPenalty(nSpellID, nSchool, oTarget); + + if (GetPRCSwitch(PRC_ACTIVATE_MAX_SPELL_DC_CAP)) + { + if (nDC > GetPRCSwitch(PRC_SET_MAX_SPELL_DC_CAP)) + { + nDC = GetPRCSwitch(PRC_SET_MAX_SPELL_DC_CAP); + } + } + + return nDC; + +} + +//called just from above and from inc_epicspells +int GetChangesToSaveDC(object oTarget, object oCaster, int nSpellID, int nSchool) +{ + int nDC; + int nElement = GetIsElementalSpell(nSpellID); + + if(nElement) + { + nDC += ElementalSavantDC(nSpellID, nElement, oCaster); + nDC += SpiritFolkAdjustment(nSpellID, nElement, oTarget); + nDC += SpellFocus(nSpellID, nElement, oCaster); + nDC += DraconicPowerDC(nSpellID, nElement, oCaster); + nDC += EnergyAuraDC(nSpellID, nElement, oCaster); + } + nDC += GetHeartWarderDC(nSpellID, nSchool, oCaster); + nDC += GetSpellPowerBonus(oCaster); + nDC += ShadowWeaveDC(nSpellID, nSchool, oCaster); + nDC += RedWizardDC(nSpellID, nSchool, oCaster); + nDC += TattooFocus(nSpellID, nSchool, oCaster); + nDC += KOTCSpellFocusVsDemons(oTarget, oCaster); + //nDC += BloodMagusBloodComponent(oCaster); + nDC += RunecasterRunePowerDC(oCaster); + nDC += UnheavenedAdjustment(oTarget, oCaster); + nDC += SoulEaterSoulPower(oCaster); + nDC += AngrySpell(nSpellID, nSchool, oCaster); + nDC += CloakedCastingDC(nSpellID, oTarget, oCaster); + nDC += GetCorruptSpellFocus(nSpellID, oCaster); + nDC += Soulcaster(oCaster, nSpellID); + nDC += WyrmbaneHelmDC(oTarget, oCaster); + nDC += StrengthFromMagic(oCaster); + nDC += SoulTyrant(oCaster); + nDC += SaintHolySpellPower(oCaster); + nDC += GetLocalInt(oCaster, PRC_DC_ADJUSTMENT);//this is for builder use + nDC += JaebrinEnchant(nSchool, oCaster); + return nDC; +} + +// Test main +//:: void main(){} diff --git a/src/include/prc_add_spl_pen.nss b/src/include/prc_add_spl_pen.nss new file mode 100644 index 0000000..e339ebd --- /dev/null +++ b/src/include/prc_add_spl_pen.nss @@ -0,0 +1,425 @@ +//:://///////////////////////////////////////////// +//:: Spells include: Spell Penetration +//:: prc_add_spl_pen +//:://///////////////////////////////////////////// +/** @file + Defines functions that may have something to do + with modifying a spell's caster level in regards + to Spell Resistance penetration. +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +int GetHeartWarderPene(int spell_id, object oCaster = OBJECT_SELF); + +int ElementalSavantSP(int spell_id, object oCaster = OBJECT_SELF); + +int RedWizardSP(int spell_id, int nSchool, object oCaster = OBJECT_SELF); + +int GetSpellPenetreFocusSchool(int nSchool, object oCaster = OBJECT_SELF); + +int GetSpellPowerBonus(object oCaster = OBJECT_SELF); + +int ShadowWeavePen(int spell_id, int nSchool, object oCaster = OBJECT_SELF); + +int KOTCSpellPenVsDemons(object oCaster, object oTarget); + +int RunecasterRunePowerSP(object oCaster); + +int MarshalDeterminedCaster(object oCaster); + +int DuskbladeSpellPower(object oCaster, object oTarget); + +int DraconicMagicPower(object oCaster); + +int TrueCastingSpell(object oCaster); + +string ChangedElementalType(int spell_id, object oCaster = OBJECT_SELF); + +// Use this function to get the adjustments to a spell or SLAs spell penetration +// from the various class effects +// Update this function if any new classes change spell pentration +int add_spl_pen(object oCaster = OBJECT_SELF); + +int SPGetPenetr(object oCaster = OBJECT_SELF); + +int SPGetPenetrAOE(object oCaster = OBJECT_SELF, int nCasterLvl = 0); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +//#include "prc_inc_spells" +//#include "prc_alterations" +//#include "prcsp_archmaginc" +//#include "prc_inc_racial" + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +// +// Determine if a spell type is elemental +// +int IsSpellTypeElemental(string type) +{ + return type == "Acid" + || type == "Cold" + || type == "Electricity" + || type == "Fire" + || type == "Sonic"; +} + +int GetHeartWarderPene(int spell_id, object oCaster = OBJECT_SELF) +{ + // Guard Expensive Calculations + if(!GetHasFeat(FEAT_VOICE_SIREN, oCaster)) + return 0; + + // Bonus Requires Verbal Spells + string VS = GetStringLowerCase(Get2DACache("spells", "VS", spell_id)); + if(FindSubString(VS, "v") == -1) + return 0; + + // These feats provide greater bonuses or remove the Verbal requirement + if(PRCGetMetaMagicFeat(oCaster, FALSE) & METAMAGIC_SILENT + || GetHasFeat(FEAT_SPELL_PENETRATION, oCaster) + || GetHasFeat(FEAT_GREATER_SPELL_PENETRATION, oCaster) + || GetHasFeat(FEAT_EPIC_SPELL_PENETRATION, oCaster)) + return 0; + + return 2; +} + +// +// Calculate Elemental Savant Contributions +// +int ElementalSavantSP(int spell_id, object oCaster = OBJECT_SELF) +{ + // get spell elemental type + int element = GetIsElementalSpell(spell_id); + + //not an elemental spell + if(!element) + return 0; + + int nSP = 0; + + // All Elemental Savants will have this feat + // when they first gain a penetration bonus. + // Otherwise this would require checking ~4 items (class or specific feats) + if(GetHasFeat(FEAT_ES_PEN_1, oCaster)) + { + int feat, nES; + nES = GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + // Specify the elemental type rather than lookup by class? + if(element & DESCRIPTOR_FIRE) + { + feat = FEAT_ES_FIRE; + } + else if(element & DESCRIPTOR_COLD) + { + feat = FEAT_ES_COLD; + } + else if(element & DESCRIPTOR_ELECTRICITY) + { + feat = FEAT_ES_ELEC; + } + else if(element & DESCRIPTOR_ACID) + { + feat = FEAT_ES_ACID; + } + + // Now determine the bonus + if(feat && GetHasFeat(feat, oCaster)) + nSP = nES / 3; + } +// SendMessageToPC(GetFirstPC(), "Your Elemental Penetration modifier is " + IntToString(nSP)); + return nSP; +} + +//Red Wizard SP boost based on spell school specialization +int RedWizardSP(int spell_id, int nSchool, object oCaster = OBJECT_SELF) +{ + int iRedWizard = GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); + int nSP; + + if(iRedWizard) + { + int iRWSpec; + switch(nSchool) + { + case SPELL_SCHOOL_ABJURATION: iRWSpec = FEAT_RW_TF_ABJ; break; + case SPELL_SCHOOL_CONJURATION: iRWSpec = FEAT_RW_TF_CON; break; + case SPELL_SCHOOL_DIVINATION: iRWSpec = FEAT_RW_TF_DIV; break; + case SPELL_SCHOOL_ENCHANTMENT: iRWSpec = FEAT_RW_TF_ENC; break; + case SPELL_SCHOOL_EVOCATION: iRWSpec = FEAT_RW_TF_EVO; break; + case SPELL_SCHOOL_ILLUSION: iRWSpec = FEAT_RW_TF_ILL; break; + case SPELL_SCHOOL_NECROMANCY: iRWSpec = FEAT_RW_TF_NEC; break; + case SPELL_SCHOOL_TRANSMUTATION: iRWSpec = FEAT_RW_TF_TRS; break; + } + + if(iRWSpec && GetHasFeat(iRWSpec, oCaster)) + nSP = (iRedWizard / 2) + 1; + } +// SendMessageToPC(GetFirstPC(), "Your Spell Power modifier is " + IntToString(nSP)); + return nSP; +} + +int GetSpellPenetreFocusSchool(int nSchool, object oCaster = OBJECT_SELF) +{ + if(nSchool) + { + if(GetHasFeat(FEAT_FOCUSED_SPELL_PENETRATION_ABJURATION+nSchool-1, oCaster)) + return 4; + } + + return 0; +} + +int GetSpellPowerBonus(object oCaster = OBJECT_SELF) +{ + if(GetHasFeat(FEAT_SPELLPOWER_10, oCaster)) + return 10; + else if(GetHasFeat(FEAT_SPELLPOWER_8, oCaster)) + return 8; + else if(GetHasFeat(FEAT_SPELLPOWER_6, oCaster)) + return 6; + else if(GetHasFeat(FEAT_SPELLPOWER_4, oCaster)) + return 4; + else if(GetHasFeat(FEAT_SPELLPOWER_2, oCaster)) + return 2; + + return 0; +} + +// Shadow Weave Feat +// +1 caster level vs SR (school Ench,Illu,Necro) +int ShadowWeavePen(int spell_id, int nSchool, object oCaster = OBJECT_SELF) +{ + int iShadow = GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + int nSP; + + // Apply changes if the caster has level in Shadow Adept class + // and this spell is eligible for the spell penetration check increase + if (iShadow > 0 && ShadowWeave(oCaster, spell_id, nSchool) == 1) + // Shadow Spell Power + nSP = iShadow / 3; + + return nSP; +} + +int KOTCSpellPenVsDemons(object oCaster, object oTarget) +{ + if(GetLevelByClass(CLASS_TYPE_KNIGHT_CHALICE, oCaster) >= 1) + { + if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_OUTSIDER) + { + if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL) + { + return 2; + } + } + } + return 0; +} + +int RunecasterRunePowerSP(object oCaster) +{ + int nSP = 0; + + // casting from a rune + if(GetResRef(GetSpellCastItem()) == "prc_rune_1") + { + nSP = StringToInt(GetTag(GetSpellCastItem())); + } + // caster is runechanting + else if(GetHasSpellEffect(SPELL_RUNE_CHANT)) + { + int nClass = GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if (nClass >= 30) nSP = 10; + else if (nClass >= 27) nSP = 9; + else if (nClass >= 24) nSP = 8; + else if (nClass >= 21) nSP = 7; + else if (nClass >= 18) nSP = 6; + else if (nClass >= 15) nSP = 5; + else if (nClass >= 12) nSP = 4; + else if (nClass >= 9) nSP = 3; + else if (nClass >= 5) nSP = 2; + else if (nClass >= 2) nSP = 1; + } + + return nSP; +} + +int MarshalDeterminedCaster(object oCaster) +{ + return GetLocalInt(oCaster,"Marshal_DetCast"); +} + +int DuskbladeSpellPower(object oCaster, object oTarget) +{ + int nSP = 0; + if(GetLocalInt(oTarget, "DuskbladeSpellPower")) + { + int nClass = GetLevelByClass(CLASS_TYPE_DUSKBLADE, oCaster); + + if(nClass >= 38) nSP = 10; + else if(nClass >= 36) nSP = 9; + else if(nClass >= 31) nSP = 8; + else if(nClass >= 26) nSP = 7; + else if(nClass >= 21) nSP = 6; + else if(nClass >= 18) nSP = 5; + else if(nClass >= 16) nSP = 4; + else if(nClass >= 11) nSP = 3; + else if(nClass >= 6) nSP = 2; + } + + return nSP; +} + +int DraconicMagicPower(object oCaster) +{ + return GetLocalInt(oCaster,"MagicPowerAura"); +} + +int TrueCastingSpell(object oCaster) +{ + if(GetHasSpellEffect(SPELL_TRUE_CASTING, oCaster)) + return 10; + + return 0; +} + +// Beguilers of level 8+ gain +2 bonus to SR agianst enemis that are denided DEX bonus to AC +int CloakedCastingSR(object oCaster, object oTarget) +{ + if(GetLevelByClass(CLASS_TYPE_BEGUILER, oCaster) >= 8) + { + if(GetIsDeniedDexBonusToAC(oTarget, oCaster, TRUE)) + return 2; + } + + return 0; +} + +int PenetratingBlast(object oCaster, object oTarget) +{ + if(oTarget == GetLocalObject(oCaster, "SPELLWEAVE_TARGET")) + { + if(GetLocalInt(oCaster, "BlastEssence") == INVOKE_PENETRATING_BLAST) + return 4; + } + return 0; +} + +int add_spl_pen(object oCaster = OBJECT_SELF) +{ + object oTarget = PRCGetSpellTargetObject(); + int spell_id = PRCGetSpellId(); + int nSchool = GetSpellSchool(spell_id); + + int nSP = ElementalSavantSP(spell_id, oCaster); + nSP += GetHeartWarderPene(spell_id, oCaster); + nSP += RedWizardSP(spell_id, nSchool, oCaster); + nSP += GetSpellPowerBonus(oCaster); + nSP += GetSpellPenetreFocusSchool(nSchool, oCaster); + nSP += ShadowWeavePen(spell_id, nSchool, oCaster); + nSP += RunecasterRunePowerSP(oCaster); + nSP += MarshalDeterminedCaster(oCaster); + nSP += DraconicMagicPower(oCaster); + nSP += TrueCastingSpell(oCaster); + nSP += GetEssentiaInvestedFeat(oCaster, FEAT_SOULTOUCHED_SPELLCASTING); + if(GetIsObjectValid(oTarget)) + { + nSP += CloakedCastingSR(oCaster, oTarget); + nSP += PenetratingBlast(oCaster, oTarget); + nSP += KOTCSpellPenVsDemons(oCaster, oTarget); + nSP += DuskbladeSpellPower(oCaster, oTarget); + } + + return nSP; +} + +// +// This function converts elemental types as needed +// +string ChangedElementalType(int spell_id, object oCaster = OBJECT_SELF) +{ + // Lookup the spell type + string spellType = Get2DACache("spells", "ImmunityType", spell_id);//lookup_spell_type(spell_id); + + // Check if an override is set + string sType = GetLocalString(oCaster, "archmage_mastery_elements_name"); + + // If so, check if the spell qualifies for a change + if (sType == "" || !IsSpellTypeElemental(spellType)) + sType = spellType; + + return sType; +} + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +// +// Get the Spell Penetration Bonuses +// +int SPGetPenetr(object oCaster = OBJECT_SELF) +{ + int nPenetr = 0; + + // This is a deliberate optimization attempt. + // The first feat determines if the others even need + // to be referenced. + if(GetHasFeat(FEAT_SPELL_PENETRATION, oCaster)) + { + nPenetr += 2; + if(GetHasFeat(FEAT_EPIC_SPELL_PENETRATION, oCaster)) + nPenetr += 4; + else if (GetHasFeat(FEAT_GREATER_SPELL_PENETRATION, oCaster)) + nPenetr += 2; + } + + // Check for additional improvements + nPenetr += add_spl_pen(oCaster); + + return nPenetr; +} + +// +// Interface for specific AOE requirements +// TODO: Determine who or what removes the cached local var (bug?) +// TODO: Try and remove this function completely? It does 2 things the +// above function doesnt: Effective Caster Level and Cache +// +int SPGetPenetrAOE(object oCaster = OBJECT_SELF, int nCasterLvl = 0) +{ + // Check the cache + int nPenetr = GetLocalInt(OBJECT_SELF, "nPenetre"); + + // Compute the result + if (!nPenetr) { + nPenetr = (nCasterLvl) ? nCasterLvl : PRCGetCasterLevel(oCaster); + + // Factor in Penetration Bonuses + nPenetr += SPGetPenetr(oCaster); + + // Who removed this? + SetLocalInt(OBJECT_SELF,"nPenetre",nPenetr); + } + + return nPenetr; +} + +// Test main +//void main(){} diff --git a/src/include/prc_allow_const.nss b/src/include/prc_allow_const.nss new file mode 100644 index 0000000..b2b2b6d --- /dev/null +++ b/src/include/prc_allow_const.nss @@ -0,0 +1,296 @@ +// Base Classes +// BW +const string ALLOW_CLASS_BARBARIAN = "PRC_AllowBarbarian"; +const string ALLOW_CLASS_BARD = "PRC_AllowBard"; +const string ALLOW_CLASS_CLERIC = "PRC_AllowCleric"; +const string ALLOW_CLASS_DRUID = "PRC_AllowDruid"; +const string ALLOW_CLASS_FIGHTER = "PRC_AllowFighter"; +const string ALLOW_CLASS_MONK = "PRC_AllowMonk"; +const string ALLOW_CLASS_PALADIN = "PRC_AllowPaladin"; +const string ALLOW_CLASS_RANGER = "PRC_AllowRanger"; +const string ALLOW_CLASS_ROGUE = "PRC_AllowRogue"; +const string ALLOW_CLASS_SORCERER = "PRC_AllowSorcerer"; +const string ALLOW_CLASS_WIZARD = "PRC_AllowWizard"; + +//: Racial Classes +const string ALLOW_CLASS_ABERRATION = "PRC_AllowAberration"; +const string ALLOW_CLASS_ANIMAL = "PRC_AllowAnimal"; +const string ALLOW_CLASS_BEAST = "PRC_AllowBeast"; +const string ALLOW_CLASS_CONSTRUCT = "PRC_AllowConstruct"; +const string ALLOW_CLASS_DRAGON = "PRC_AllowDragon"; +const string ALLOW_CLASS_ELEMENTAL = "PRC_AllowEle"; +const string ALLOW_CLASS_FEY = "PRC_AllowFey"; +const string ALLOW_CLASS_GIANT = "PRC_AllowGiant"; +const string ALLOW_CLASS_HUMANOID = "PRC_AllowHumanoid"; +const string ALLOW_CLASS_MAGICAL_BEAST = "PRC_AllowMagicalBeast"; +const string ALLOW_CLASS_MON_HUMANOID = "PRC_AllowMonstrous"; +const string ALLOW_CLASS_OOZE = "PRC_AllowOoze"; +const string ALLOW_CLASS_OUTSIDER = "PRC_AllowOutsider"; +const string ALLOW_CLASS_PLANT = "PRC_AllowPlant"; +const string ALLOW_CLASS_SHAPECHANGER = "PRC_AllowShapechanger"; +const string ALLOW_CLASS_UNDEAD = "PRC_AllowUndead"; +const string ALLOW_CLASS_VERMIN = "PRC_AllowVermin"; + +// PRC +const string ALLOW_CLASS_ANTIPALADIN = "PRC_AllowAntiPal"; +const string ALLOW_CLASS_ARTIFICER = "PRC_AllowArtificer"; +const string ALLOW_CLASS_BINDER = "PRC_AllowBinder"; +const string ALLOW_CLASS_CRUSADER = "PRC_AllowCrusader"; +const string ALLOW_CLASS_DRAGONFIRE_ADEPT = "PRC_AllowDFAdept"; +const string ALLOW_CLASS_DRAGON_SHAMAN = "PRC_AllowDragSham"; +const string ALLOW_CLASS_DREAD_NECROMANCER = "PRC_AllowDNecro"; +const string ALLOW_CLASS_DUSKBLADE = "PRC_AllowDuskblade"; +const string ALLOW_CLASS_FACTOTUM = "PRC_AllowFactotum"; +const string ALLOW_CLASS_FAVOURED_SOUL = "PRC_AllowFavouredSoul"; +const string ALLOW_CLASS_HEALER = "PRC_AllowHealer"; +const string ALLOW_CLASS_HEXBLADE = "PRC_AllowHexblade"; +const string ALLOW_CLASS_INCARNATE = "PRC_AllowIncarnate"; +const string ALLOW_CLASS_KNIGHT = "PRC_AllowKnight"; +const string ALLOW_CLASS_MARSHAL = "PRC_AllowMarshal"; +const string ALLOW_CLASS_NINJA = "PRC_AllowNinjaCA"; +const string ALLOW_CLASS_PSION = "PRC_AllowPsion"; +const string ALLOW_CLASS_PSYCHIC_ROGUE = "PRC_AllowPsyRog"; +const string ALLOW_CLASS_PSYCHIC_WARRIOR = "PRC_AllowPsyWar"; +const string ALLOW_CLASS_SAMURAI = "PRC_AllowSamurai"; +const string ALLOW_CLASS_SAMURAI_CW = "PRC_AllowCWSam"; +const string ALLOW_CLASS_SCOUT = "PRC_AllowScout"; +const string ALLOW_CLASS_SHADOWCASTER = "PRC_AllowShadowcaster"; +const string ALLOW_CLASS_SHAMAN = "PRC_AllowShaman"; +const string ALLOW_CLASS_SOHEI = "PRC_AllowSohei"; +const string ALLOW_CLASS_SOULBORN = "PRC_AllowSoulborn"; +const string ALLOW_CLASS_SOULKNIFE = "PRC_AllowSoulKnife"; +const string ALLOW_CLASS_SWASHBUCKLER = "PRC_AllowSwash"; +const string ALLOW_CLASS_SWORDSAGE = "PRC_AllowSwordsage"; +const string ALLOW_CLASS_TOTEMIST = "PRC_AllowTotemist"; +const string ALLOW_CLASS_TRUENAMER = "PRC_AllowTruenamer"; +const string ALLOW_CLASS_WARBLADE = "PRC_AllowWarblade"; +const string ALLOW_CLASS_WARLOCK = "PRC_AllowWarlock"; +const string ALLOW_CLASS_WARMAGE = "PRC_AllowWarmage"; +const string ALLOW_CLASS_WILDER = "PRC_AllowWilder"; + + +// Prestige Classes +// BW +const string ALLOW_SHADOWDANCER = "X1_AllowShadow"; +const string ALLOW_HARPER = "X1_AllowHarper"; +const string ALLOW_CLASS_ARCANE_ARCHER = "X1_AllowArcher"; +const string ALLOW_ASSASSIN = "X1_AllowAsasin"; +const string ALLOW_BLACKGUARD = "X1_AllowBlkGrd"; +const string ALLOW_DIVINE_CHAMPION = "X2_AllowDivcha"; +const string ALLOW_WEAPON_MASTER = "X2_AllowWM"; +const string ALLOW_PALE_MASTER = "X2_AllowPalema"; +const string ALLOW_SHIFTER = "X2_AllowShiftr"; +const string ALLOW_DWARVEN_DEFENDER = "X1_AllowDwDef"; +const string ALLOW_DRAGON_DISCIPLE = "X1_AllowDrDis"; + +// PRC +const string ALLOW_CLASS_ABJURANT_CHAMPION = "PRC_AllowAbjCha"; +const string ALLOW_CLASS_ACOLYTE = "PRC_AllowAcolyte"; +const string ALLOW_CLASS_ACOLYTE_EGO = "PRC_AllowEgo"; +const string ALLOW_CLASS_ALAGHAR = "PRC_AllowAlag"; +const string ALLOW_CLASS_ALIENIST = "PRC_AllowAlien"; +const string ALLOW_CLASS_ARCANE_DUELIST = "PRC_AllowArcDuel"; +const string ALLOW_CLASS_ARCHMAGE = "PRC_AllowArchmage"; +const string ALLOW_CLASS_ARCTRICK = "PRC_AllowArcTrick"; +const string ALLOW_CLASS_BAELNORN = "PRC_AllowBaeln"; +const string ALLOW_CLASS_BATTLERAGER = "PRC_AllowBRage"; +const string ALLOW_CLASS_BATTLESMITH = "PRC_AllowBattlesmith"; +const string ALLOW_CLASS_BEREFT = "PRC_AllowBereft"; +const string ALLOW_CLASS_BFZ = "PRC_AllowBFZ"; +const string ALLOW_CLASS_BLACK_BLOOD_CULTIST = "PRC_AllowBBC"; +const string ALLOW_CLASS_BLADESINGER = "PRC_AllowBlades"; +const string ALLOW_CLASS_BLIGHTLORD = "PRC_AllowBlightlord"; +const string ALLOW_CLASS_BLIGHTER = "PRC_AllowBlighter"; +const string ALLOW_CLASS_BLOOD_MAGUS = "PRC_AllowBLMagus"; +const string ALLOW_CLASS_BLOODCLAW_MASTER = "PRC_AllowBloodclaw"; +const string ALLOW_CLASS_BONDED_SUMMONNER = "PRC_AllowBonded"; +const string ALLOW_CLASS_BRIMSTONE_SPEAKER = "PRC_AllowBrimstone"; +const string ALLOW_CLASS_CELEBRANT_SHARESS = "PRC_AllowCelebrant"; +const string ALLOW_CLASS_CEREBREMANCER = "PRC_AllowCereb"; +const string ALLOW_CLASS_CHAMPION_BANE = "PRC_AllowChaBane"; +const string ALLOW_CLASS_CHAMPION_CORELLON = "PRC_AllowCoC"; +const string ALLOW_CLASS_CHILD_OF_NIGHT = "PRC_AllowChildNight"; +const string ALLOW_CLASS_COMBAT_MEDIC = "PRC_AllowCbtMed"; +const string ALLOW_CLASS_CONTEMPLATIVE = "PRC_AllowContemp"; +const string ALLOW_CLASS_CRINTI = "PRC_AllowCrinti"; +const string ALLOW_CLASS_CULTIST_SHATTERED_PEAK = "PRC_AllowCultist"; +const string ALLOW_CLASS_DEEPSTONE_SENTINEL = "PRC_AllowDeepSt"; +const string ALLOW_CLASS_DIABOLIST = "PRC_AllowDiablo"; +const string ALLOW_CLASS_DIAMOND_DRAGON = "PRC_AllowDiaDra"; +const string ALLOW_CLASS_DIRGESINGER = "PRC_AllowDirge"; +const string ALLOW_CLASS_DISCIPLE_OF_MEPH = "PRC_AllowDiscmep"; +const string ALLOW_CLASS_DISC_ASMODEUS = "PRC_AllowAsmodeus"; +const string ALLOW_CLASS_DISC_BAALZEBUL = "PRC_AllowBaal"; +const string ALLOW_CLASS_DISPATER = "PRC_AllowDisp"; +const string ALLOW_CLASS_DRAGON_DEVOTEE = "PRC_AllowDragonDevotee"; +const string ALLOW_CLASS_DRAGONHEART_MAGE = "PRC_AllowDragonheart"; +const string ALLOW_CLASS_DRAGONSONG_LYRIST = "PRC_AllowDraSong"; +const string ALLOW_CLASS_DROW_JUDICATOR = "PRC_AllowDrowJud"; +const string ALLOW_CLASS_DRUNKEN_MASTER = "PRC_AllowDrnkn"; +const string ALLOW_CLASS_DUELIST = "PRC_AllowDuel"; +const string ALLOW_CLASS_ELDRITCH_DISCIPLE = "PRC_AllowEDisc"; +const string ALLOW_CLASS_ELDRITCH_KNIGHT = "PRC_AllowEldknight"; +const string ALLOW_CLASS_ELDRITCH_THEURGE = "PRC_AllowETheurg"; +const string ALLOW_CLASS_ENLIGHTENED_FIST = "PRC_AllowEnlFist"; +const string ALLOW_CLASS_ELEMENTAL_SAVANT = "PRC_AllowElSav"; +const string ALLOW_CLASS_ETERNAL_BLADE = "PRC_AllowETBL"; +const string ALLOW_CLASS_EYE_OF_GRUUMSH = "PRC_AllowEoG"; +const string ALLOW_CLASS_FISTRAZIEL = "PRC_AllowFistRaz"; +const string ALLOW_CLASS_FIST_OF_DAL_QUOR = "PRC_AllowDalQuor"; +const string ALLOW_CLASS_FIST_OF_ZUOKEN = "PRC_AllowFoZ"; +const string ALLOW_CLASS_FMM = "PRC_AllowFMM"; +const string ALLOW_CLASS_FOCHULAN_LYRIST = "PRC_AllowFocLyr"; +const string ALLOW_CLASS_FOE_HUNTER = "PRC_AllowFH"; +const string ALLOW_CLASS_FORESTMASTER = "PRC_AllowForMast"; +const string ALLOW_CLASS_FORSAKER = "PRC_AllowForsaker"; +const string ALLOW_CLASS_FRE_BERSERKER = "PRC_AllowFrebzk"; +const string ALLOW_CLASS_FROST_MAGE = "PRC_AllowFrostMage"; +const string ALLOW_CLASS_FROST_RAGER = "PRC_AllowFrostRager"; +const string ALLOW_CLASS_GHOST_FACED_KILLER = "PRC_AllowGhostFacedKiller"; +const string ALLOW_CLASS_HAND_WINGED_MASTERS = "PRC_AllowHotWM"; +const string ALLOW_CLASS_HARPERMAGE = "PRC_AllowHarperM"; +const string ALLOW_CLASS_HATHRAN = "PRC_AllowHath"; +const string ALLOW_CLASS_HAVOC_MAGE = "PRC_AllowHavocM"; +const string ALLOW_CLASS_HEARTWARDER = "PRC_AllowHeartW"; +const string ALLOW_CLASS_HELLFIRE_WARLOCK = "PRC_AllowHFWar"; +const string ALLOW_CLASS_HENSHIN_MYSTIC = "PRC_AllowHnshn"; +const string ALLOW_CLASS_HEXTOR = "PRC_AllowHextor"; +const string ALLOW_CLASS_HIEROPHANT = "PRC_AllowHiero"; +const string ALLOW_CLASS_HOSPITALER = "PRC_AllowHosp"; +const string ALLOW_CLASS_IAIJUTSU_MASTER = "PRC_AllowIaij"; +const string ALLOW_CLASS_INCANDESCENT_CHAMPION = "PRC_AllowIncandescent"; +const string ALLOW_CLASS_INCARNUM_BLADE = "PRC_AllowIBlade"; +const string ALLOW_CLASS_INITIATE_DRACONIC = "PRC_AllowIniDra"; +const string ALLOW_CLASS_IRON_MIND = "PRC_AllowIronMind"; +const string ALLOW_CLASS_IRONSOUL_FORGEMASTER = "PRC_AllowIronsoul"; +const string ALLOW_CLASS_JADE_PHOENIX_MAGE = "PRC_AllowJPM"; +const string ALLOW_CLASS_JUSTICE_WEALD_AND_WOE = "PRC_AllowJustWW"; +const string ALLOW_CLASS_KNIGHT_CHALICE = "PRC_AllowKnghtCh"; +const string ALLOW_CLASS_KNIGHT_MIDDLECIRCLE = "PRC_AllowKotMC"; +const string ALLOW_CLASS_KNIGHT_WEAVE = "PRC_AllowKnightWeave"; +const string ALLOW_CLASS_LASHER = "PRC_AllowLash"; +const string ALLOW_CLASS_LEGENDARY_DREADNOUGHT = "PRC_AllowLgDr"; +const string ALLOW_CLASS_LICH = "PRC_AllowLich"; +const string ALLOW_CLASS_MAESTER = "PRC_AllowMaester"; +const string ALLOW_CLASS_MAGEKILLER = "PRC_AllowMageK"; +const string ALLOW_CLASS_MANATARMS = "PRC_AllowManAt"; +const string ALLOW_CLASS_MASTER_ALCHEMIST = "PRC_AllowMstAlc"; +const string ALLOW_CLASS_MASTER_HARPER = "PRC_AllowMaster"; +const string ALLOW_CLASS_MASTER_OF_NINE = "PRC_AllowMoNine"; +const string ALLOW_CLASS_MASTER_OF_SHADOW = "PRC_AllowMasterShadow"; +const string ALLOW_CLASS_MASTER_OF_SHROUDS = "PRC_AllowShrouds"; +const string ALLOW_CLASS_MIGHTY_CONTENDER_KORD = "PRC_AllowKord"; +const string ALLOW_CLASS_MINSTREL = "PRC_AllowMinstrel"; +const string ALLOW_CLASS_MORNINGLORD_LATHANDER = "PRC_AllowMorninglord"; +const string ALLOW_CLASS_MYSTIC_THEURGE = "PRC_AllowMysticTheurge"; +const string ALLOW_CLASS_NECROCARNUM_ACOLYTE = "PRC_AllowNecrocarnum"; +const string ALLOW_CLASS_NENTYAR_HUNTER = "PRC_AllowNentyar"; +const string ALLOW_CLASS_NIGHTSHADE = "PRC_AllowNights"; +const string ALLOW_CLASS_NINJA_SPY = "PRC_AllowNinja"; +const string ALLOW_CLASS_NOCTUMANCER = "PRC_AllowNoctumancer"; +const string ALLOW_CLASS_OCULAR = "PRC_AllowOccAd"; +const string ALLOW_CLASS_OLLAM = "PRC_AllowOllam"; +const string ALLOW_CLASS_OOZEMASTER = "PRC_AllowUzi"; +const string ALLOW_CLASS_ORCUS = "PRC_AllowOrcus"; +const string ALLOW_CLASS_ORC_WARLORD = "PRC_AllowOrcWar"; +const string ALLOW_CLASS_ORDER_BOW_INNATE = "PRC_AllowOOTBI"; +const string ALLOW_CLASS_PEERLESS = "PRC_AllowPArcher"; +const string ALLOW_CLASS_PNP_SHIFTER = "PRC_AllowPNPSfr"; +const string ALLOW_CLASS_PSYCHIC_THEURGE = "PRC_AllowPsychic"; +const string ALLOW_CLASS_PURPLE_DRAGON_KNIGHT = "PRC_AllowPDK"; +const string ALLOW_CLASS_PYROKINETICIST = "PRC_AllowPyro"; +const string ALLOW_CLASS_RAGE_MAGE = "PRC_AllowRageMage"; +const string ALLOW_CLASS_RAVAGER = "PRC_Allow_Rava"; +const string ALLOW_CLASS_REAPING_MAULER = "PRC_AllowReapMauler"; +const string ALLOW_CLASS_RED_AVENGER = "PRC_AllowRedavng"; +const string ALLOW_CLASS_RED_WIZARD = "PRC_AllowRedWiz"; +const string ALLOW_CLASS_RUBY_KNIGHT_VINDICATOR = "PRC_AllowRubyKnight"; +const string ALLOW_CLASS_RUNECASTER = "PRC_AllowRunecaster"; +const string ALLOW_CLASS_RUNESCARRED = "PRC_Allow_Rune"; +const string ALLOW_CLASS_SACREDFIST = "PRC_AllowSacFist"; +const string ALLOW_CLASS_SACREDPURIFIER = "PRC_AllowPurifier"; +const string ALLOW_CLASS_SANCTIFIED_MIND = "PRC_AllowSancMind"; +const string ALLOW_CLASS_SAPPHIE_HIERARCH = "PRC_AllowSapphire"; +const string ALLOW_CLASS_SCION_DANTALION = "PRC_AllowScion"; +const string ALLOW_CLASS_SERENE_GUARDIAN = "PRC_AllowSerGuard"; +const string ALLOW_CLASS_SHADOWBLADE = "PRC_AllowShdBld"; +const string ALLOW_CLASS_SHADOWMIND = "PRC_AllowShadowmind"; +const string ALLOW_CLASS_SHADOWLORD = "PRC_AllowShaLow"; +const string ALLOW_CLASS_SHADOW_ADEPT = "PRC_AllowShadAde"; +const string ALLOW_CLASS_SHADOW_SUN_NINJA = "PRC_AllowSSN"; +const string ALLOW_CLASS_SHADOWBANE_INQUISITOR = "PRC_AllowShadowInq"; +const string ALLOW_CLASS_SHADOWBANE_STALKER = "PRC_AllowShadowStalk"; +const string ALLOW_CLASS_SHADOWSMITH = "PRC_AllowShadowsmith"; +const string ALLOW_CLASS_SHADOW_THIEF = "PRC_AllowShadowThief"; +const string ALLOW_CLASS_SHINING_BLADE = "PRC_AllowSBHeir"; +const string ALLOW_CLASS_SHOU = "PRC_AllowShou"; +const string ALLOW_CLASS_SKULLCLAN_HUNTER = "PRC_AllowSkullClan"; +const string ALLOW_CLASS_SLAYER_OF_DOMIEL = "PRC_AllowDomiel"; +const string ALLOW_CLASS_SOLDIER_OF_LIGHT = "PRC_AllowSoLight"; +const string ALLOW_CLASS_SOULCASTER = "PRC_AllowSoulcaster"; +const string ALLOW_CLASS_SOUL_EATER = "PRC_AllowSoulEater"; +const string ALLOW_CLASS_SPELLDANCER = "PRC_AllowSpelldancer"; +const string ALLOW_CLASS_SPELLFIRE_CHANNELER = "PRC_Allow_Spellf"; +const string ALLOW_CLASS_SPELLSWORD = "PRC_AllowSpellS"; +const string ALLOW_CLASS_SPINEMELD_WARRIOR = "PRC_AllowSpinemeld"; +const string ALLOW_CLASS_STORMLORD = "PRC_AllowStormL"; +const string ALLOW_CLASS_SUEL_ARCHANAMACH = "PRC_AllowSuel"; +const string ALLOW_CLASS_SWIFT_WING = "PRC_AllowSwiftW"; +const string ALLOW_CLASS_TALON_OF_TIAMAT = "PRC_TalonOfTiamat"; +const string ALLOW_CLASS_TEMPEST = "PRC_AllowTempest"; +const string ALLOW_CLASS_TEMPUS = "PRC_AllowTempus"; +const string ALLOW_CLASS_TENEBROUS_APOSTATE = "PRC_AllowTenebrous"; +const string ALLOW_CLASS_THAYAN_KNIGHT = "PRC_AllowThayKt"; +const string ALLOW_CLASS_THRALL_OF_GRAZZT = "PRC_AllowTOG"; +const string ALLOW_CLASS_THRALLHERD = "PRC_AllowThrallherd"; +const string ALLOW_CLASS_TOTEMRAGER = "PRC_AllowTotemRager"; +const string ALLOW_CLASS_TRUENECRO = "PRC_AllowTNecro"; +const string ALLOW_CLASS_UMBRAL_DISCIPLE = "PRC_AllowUmbral"; +const string ALLOW_CLASS_UNSEEN_SEER = "PRC_AllowUnseenSeer"; +const string ALLOW_CLASS_UR_PRIEST = "PRC_AllowUrPriest"; +const string ALLOW_CLASS_VASSAL = "PRC_AllowVassal"; +const string ALLOW_CLASS_VIGILANT = "PRC_AllowVigil"; +const string ALLOW_CLASS_VIRTUOSO = "PRC_AllowVirtuoso"; +const string ALLOW_CLASS_WARCHIEF = "PRC_AllowWarchief"; +const string ALLOW_CLASS_WARFORGED_JUGGERNAUT = "PRC_AllowJuggernaut"; +const string ALLOW_CLASS_WARMIND = "PRC_AllowWarmind"; +const string ALLOW_CLASS_WARPRIEST = "PRC_AllowWarPrst"; +const string ALLOW_CLASS_WARSLING_SNIPER = "PRC_AllowWarsling"; +const string ALLOW_CLASS_WAYFARER_GUIDE = "PRC_AllowWayfarer"; +const string ALLOW_CLASS_WAR_WIZARD_OF_CORMYR = "PRC_AllowWWoC"; +const string ALLOW_CLASS_WEREWOLF = "PRC_AllowWWolf"; +const string ALLOW_CLASS_WITCHBORN_BINDER = "PRC_AllowWitchborn"; +const string ALLOW_CLASS_WILD_MAGE = "PRC_AllowWildMage"; + + + +/*AL_SAVAGE = 205; +const string ALLOW_CLASS_WARLORD = 206; +const string ALLOW_CLASS_SCOUT = 207; +const string ALLOW_CLASS_DRAGON_SLAYER = 208; +const string ALLOW_CLASS_HOLY_CRUSADER = 209; +const string ALLOW_CLASS_GREY_WANDERER = 210; +const string ALLOW_CLASS_PROTECTOR = 211; +const string ALLOW_CLASS_SUMMONER = 212; +const string ALLOW_CLASS_ASTRAL_ADEPT = 213; +const string ALLOW_CLASS_DEMON_MASTER = 214; +const string ALLOW_CLASS_AURAMANCER = 215; +const string ALLOW_CLASS_ABJURER = 217; +const string ALLOW_CLASS_PUPPET_MASTER = 218 ; +const string ALLOW_CLASS_XENOWIZARD = 219; +const string ALLOW_CLASS_NATURALIST = 220; +const string ALLOW_CLASS_GEOMANCER = 221; + +const string ALLOW_CLASS_PROPHET = 223 ; +const string ALLOW_CLASS_SHAMAN = 224; +const string ALLOW_CLASS_WITCH_DOCTOR = 225; +const string ALLOW_CLASS_BATTLEMAGE = 226; +const string ALLOW_CLASS_MYSTICAL_KNIGHT = 227; +const string ALLOW_CLASS_ARCANE_THEOLOGIST = 22; +const string ALLOW_CLASS_CRYSTAL_MASTER = 229; +const string ALLOW_CLASS_ARCANE_ASSASSIN = 230; +const string ALLOW_CLASS_ARCANE_SWORDSMAN = 231; + +const string ALLOW_CLASS_VAMPIRE = 132; +*/ + diff --git a/src/include/prc_alterations.nss b/src/include/prc_alterations.nss new file mode 100644 index 0000000..9f31f26 --- /dev/null +++ b/src/include/prc_alterations.nss @@ -0,0 +1,158 @@ +//:://///////////////////////////////////////////// +//:: Include nexus +//:: prc_alterations +//:://///////////////////////////////////////////// +/* + This is the original include file for the PRC Spell Engine. + + Various spells, components and designs within this system have + been contributed by many individuals within and without the PRC. + + + These days, it serves to gather links to almost all the PRC + includes to one file. Should probably get sorted out someday, + since this slows compilation. On the other hand, it may be + necessary, since the custom compiler can't seem to handle + the most twisted include loops. + Related TODO to any C++ experts: Add #DEFINE support to nwnnsscomp + + Also, this file contains misceallenous functions that haven't + got a better home. +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +//return a location that PCs will never be able to access +location PRC_GetLimbo(); + +//int GetSkill(object oObject, int nSkill, int bSynergy = FALSE, int bSize = FALSE, int bAbilityMod = TRUE, int bEffect = TRUE, int bArmor = TRUE, int bShield = TRUE, int bFeat = TRUE); + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +// const int ERROR_CODE_5_FIX_YET_ANOTHER_TIME = 1; + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + +// Generic includes + +#include "inc_abil_damage" + +////////////////////////////////////////////////// +/* Function Definitions */ +////////////////////////////////////////////////// + +//return a location that PCs will never be able to access +location PRC_GetLimbo() +{ + int i = 0; + location lLimbo; + + while (1) + { + object oLimbo = GetObjectByTag("Limbo", i++); + + if (oLimbo == OBJECT_INVALID) { + PrintString("PRC ERROR: no Limbo area! (did you import the latest PRC .ERF file?)"); + return lLimbo; + } + + if (GetName(oLimbo) == "Limbo" && GetArea(oLimbo) == OBJECT_INVALID) + { + vector vLimbo = Vector(0.0f, 0.0f, 0.0f); + lLimbo = Location(oLimbo, vLimbo, 0.0f); + } + } + return lLimbo; //never reached +} + +//Also serves as a store of all item creation feats +int GetItemCreationFeatCount() +{ + return(GetHasFeat(FEAT_CRAFT_WONDROUS) + + GetHasFeat(FEAT_CRAFT_STAFF) + + GetHasFeat(FEAT_CRAFT_ARMS_ARMOR) + + GetHasFeat(FEAT_FORGE_RING) + + GetHasFeat(FEAT_CRAFT_ROD) + + GetHasFeat(FEAT_CRAFT_CONSTRUCT) + + GetHasFeat(FEAT_SCRIBE_SCROLL) + + GetHasFeat(FEAT_BREW_POTION) + + GetHasFeat(FEAT_CRAFT_WAND) + + GetHasFeat(FEAT_ATTUNE_GEM) + + GetHasFeat(FEAT_CRAFT_SKULL_TALISMAN) + + GetHasFeat(FEAT_INSCRIBE_RUNE) + //+ GetHasFeat(?) + ); +} + +// Returns the IP_CONST_DAMAGESOAK_*_HP constant that does the given +// amount of damage reduction +int GetDamageSoakConstant(int nDamRed) +{ + switch(nDamRed) + { + case 1: return IP_CONST_DAMAGESOAK_1_HP; + case 2: return IP_CONST_DAMAGESOAK_2_HP; + case 3: return IP_CONST_DAMAGESOAK_3_HP; + case 4: return IP_CONST_DAMAGESOAK_4_HP; + case 5: return IP_CONST_DAMAGESOAK_5_HP; + case 6: return IP_CONST_DAMAGESOAK_6_HP; + case 7: return IP_CONST_DAMAGESOAK_7_HP; + case 8: return IP_CONST_DAMAGESOAK_8_HP; + case 9: return IP_CONST_DAMAGESOAK_9_HP; + case 10: return IP_CONST_DAMAGESOAK_10_HP; + case 11: return IP_CONST_DAMAGESOAK_11_HP; + case 12: return IP_CONST_DAMAGESOAK_12_HP; + case 13: return IP_CONST_DAMAGESOAK_13_HP; + case 14: return IP_CONST_DAMAGESOAK_14_HP; + case 15: return IP_CONST_DAMAGESOAK_15_HP; + case 16: return IP_CONST_DAMAGESOAK_16_HP; + case 17: return IP_CONST_DAMAGESOAK_17_HP; + case 18: return IP_CONST_DAMAGESOAK_18_HP; + case 19: return IP_CONST_DAMAGESOAK_19_HP; + case 20: return IP_CONST_DAMAGESOAK_20_HP; + case 21: return IP_CONST_DAMAGESOAK_21_HP; + case 22: return IP_CONST_DAMAGESOAK_22_HP; + case 23: return IP_CONST_DAMAGESOAK_23_HP; + case 24: return IP_CONST_DAMAGESOAK_24_HP; + case 25: return IP_CONST_DAMAGESOAK_25_HP; + case 26: return IP_CONST_DAMAGESOAK_26_HP; + case 27: return IP_CONST_DAMAGESOAK_27_HP; + case 28: return IP_CONST_DAMAGESOAK_28_HP; + case 29: return IP_CONST_DAMAGESOAK_29_HP; + case 30: return IP_CONST_DAMAGESOAK_30_HP; + case 31: return IP_CONST_DAMAGESOAK_31_HP; + case 32: return IP_CONST_DAMAGESOAK_32_HP; + case 33: return IP_CONST_DAMAGESOAK_33_HP; + case 34: return IP_CONST_DAMAGESOAK_34_HP; + case 35: return IP_CONST_DAMAGESOAK_35_HP; + case 36: return IP_CONST_DAMAGESOAK_36_HP; + case 37: return IP_CONST_DAMAGESOAK_37_HP; + case 38: return IP_CONST_DAMAGESOAK_38_HP; + case 39: return IP_CONST_DAMAGESOAK_39_HP; + case 40: return IP_CONST_DAMAGESOAK_40_HP; + case 41: return IP_CONST_DAMAGESOAK_41_HP; + case 42: return IP_CONST_DAMAGESOAK_42_HP; + case 43: return IP_CONST_DAMAGESOAK_43_HP; + case 44: return IP_CONST_DAMAGESOAK_44_HP; + case 45: return IP_CONST_DAMAGESOAK_45_HP; + case 46: return IP_CONST_DAMAGESOAK_46_HP; + case 47: return IP_CONST_DAMAGESOAK_47_HP; + case 48: return IP_CONST_DAMAGESOAK_48_HP; + case 49: return IP_CONST_DAMAGESOAK_49_HP; + case 50: return IP_CONST_DAMAGESOAK_50_HP; + + + + default: + WriteTimestampedLogEntry("Erroneous value for nDamRed in GetDamageReductionConstant: " + IntToString(nDamRed)); + } + + return -1; +} + +//:: void main(){} \ No newline at end of file diff --git a/src/include/prc_ccc_const.nss b/src/include/prc_ccc_const.nss new file mode 100644 index 0000000..31ff130 --- /dev/null +++ b/src/include/prc_ccc_const.nss @@ -0,0 +1,85 @@ +/** + * prc_ccc_const + * + * contains the constants + */ + +/** + * Constants for determining whether a PC goes through the convoCC + */ + +const int CONVOCC_ENTER_BOOT_PC = 0; +const int CONVOCC_ENTER_NEW_PC = 1; +const int CONVOCC_ENTER_RETURNING_PC = 2; + + +/** + * Constants for each stage in the convoCC + */ + +const int STAGE_INTRODUCTION = 0; +const int STAGE_GENDER = 1; +const int STAGE_GENDER_CHECK = 2; +const int STAGE_RACE = 3; +const int STAGE_RACE_CHECK = 4; +const int STAGE_CLASS = 5; +const int STAGE_CLASS_CHECK = 6; +const int STAGE_ALIGNMENT = 7; +const int STAGE_ALIGNMENT_CHECK = 8; +const int STAGE_ABILITY = 9; +const int STAGE_ABILITY_CHECK = 10; +const int STAGE_SKILL = 11; +const int STAGE_SKILL_CHECK = 12; +const int STAGE_FEAT = 13; +const int STAGE_FEAT_CHECK = 14; +const int STAGE_BONUS_FEAT = 15; +const int STAGE_BONUS_FEAT_CHECK = 16; +const int STAGE_WIZ_SCHOOL = 17; +const int STAGE_WIZ_SCHOOL_CHECK = 18; +const int STAGE_SPELLS_0 = 19; +const int STAGE_SPELLS_1 = 20; +const int STAGE_SPELLS_CHECK = 21; +const int STAGE_FAMILIAR = 22; +const int STAGE_FAMILIAR_CHECK = 23; +const int STAGE_DOMAIN = 24; +const int STAGE_DOMAIN_CHECK1 = 25; +const int STAGE_DOMAIN_CHECK2 = 26; +const int STAGE_APPEARANCE = 27; +const int STAGE_APPEARANCE_CHECK = 28; +const int STAGE_PORTRAIT = 29; +const int STAGE_PORTRAIT_CHECK = 30; +const int STAGE_SOUNDSET = 31; +const int STAGE_SOUNDSET_CHECK = 32; +const int STAGE_HEAD = 33; +const int STAGE_HEAD_CHECK = 34; +const int STAGE_TATTOO = 35; +const int STAGE_TATTOO_CHECK = 36; +const int STAGE_WINGS = 37; +const int STAGE_WINGS_CHECK = 38; +const int STAGE_TAIL = 39; +const int STAGE_TAIL_CHECK = 40; +const int STAGE_SKIN_COLOUR = 41; +const int STAGE_SKIN_COLOUR_CHOICE = 42; +const int STAGE_SKIN_COLOUR_CHECK = 43; +const int STAGE_HAIR_COLOUR = 44; +const int STAGE_HAIR_COLOUR_CHOICE = 45; +const int STAGE_HAIR_COLOUR_CHECK = 46; +const int STAGE_TATTOO1_COLOUR = 47; +const int STAGE_TATTOO1_COLOUR_CHOICE = 48; +const int STAGE_TATTOO1_COLOUR_CHECK = 49; +const int STAGE_TATTOO2_COLOUR = 50; +const int STAGE_TATTOO2_COLOUR_CHOICE = 51; +const int STAGE_TATTOO2_COLOUR_CHECK = 52; + +const int FINAL_STAGE = 99; + +/** + * constants used in the convoCC that aren't convo stages + */ + +// brownie model in the CEP +const int APPEARANCE_TYPE_CEP_BROWNIE = 1002; + +// wemic model in the CEP +const int APPEARANCE_TYPE_CEP_WEMIC = 1000; + diff --git a/src/include/prc_ccc_readme.nss b/src/include/prc_ccc_readme.nss new file mode 100644 index 0000000..bef8336 --- /dev/null +++ b/src/include/prc_ccc_readme.nss @@ -0,0 +1,192 @@ +/* +Conversation Character Creator v1.4 + +This is a conversation driven in-game 100% serverside character creator allowing +the use of custom content on a serverside game from level 1 (including new races +and new base classes ). It is also more secure than conventional character creation +methods + + + +You Need: + +PRC (current version is 2.2d, but this should work with any +http://nwnprc.netgamers.co.uk/ +or +http://nwvault.ign.com/Files/hakpacks/data/1071643329920.shtml +or +http://nwvault.ign.com/Files/hakpacks/data/1082946089000.shtml + +NWNX 2 +http://nwvault.ign.com/Files/other/data/1046636009723.shtml + +NWNX-Leto +http://prdownloads.sourceforge.net/leto/nwnxleto-build-03%2B18.rar?download + + + +This is an in-game conversation driven character creator. This is designed for +servervault so that custom content is used at character creation. To work +properly however, several things need to be done. + +NWNX2 must be instlled and used to run the module ( http://nwvault.ign.com/Files/ +other/...636009723.shtml ) See the readme included with NWNX2 for instructions, +its very easy. + +The NWNX_ODBC plugin included with NWNX2 should be installed and setup. See the +readme included with NWNX2 for instructions, this is quite straightforward but +trickier than installing NWNX2. In particular, make sure that the aps_onload +script is setup and that the database can be read to and from using the demo module +included in NWNX2. The ConvoCC should work with Access or MySQL databases. + +To enable the database system for 2da caching, you must set a local int on the +module named "USE_2DA_DB_CACHE" to 1. + +In addition to using NWNX2 for database storage, the cache can also be stored as +object in the bioware database. This cache is only updated when a character is +created, and is only restored when the module is loaded. This is to keep lag to +a minimum. To enable this, add RestoreCache(); to your OnModuleLoad script just +after void main() and add #include "prc_ccc_cache" above void main() + +NWNX-Leto plugin build 18 must be installed ( http://sourceforge.net/projects/leto/ ) +See the readme included with NWNX-Leto for instructions, its very easy. + +THIS IS A VERY IMPORTANT NOTE Inside the module, in inc_letoscript, the constant +NWN_DIR must point to your servers hard disk location where NWN is installed. +After this, the scripts must be recompiled. THIS IS A VERY IMPORTANT NOTE + +The player start should be placed in an area with no access to the rest of the +module. Then you should add code to jump the player to a starting waypoint in +the mod_cliententer script. There is an example commented out, if you delete +the comments ( // at the start of the line) then you can simply place a waypoint +tagged "WP_RealStart" where you want players to be jumped to. + +You must connect the mod_cliententer script to the modules on client enter event. +You must connect the mod_clientexit script to the modules on client exit event. + +Since much of the data is read directly from 2da's, this can be very slow, +especially for feats and spells where an enourmous amount of data is used. To +speed this process up, all 2da reads are cached via NWNX_ODBC to form a +persistant cache. This is a single tabled named "prccache". This means +that the first time a character is created it is much slower than subsequent +times will be. Also, whenever the PRC updates, or your 2da files change, you +should delete the table from the DB. In addition you must delete the bioware +database named "ConvoCC" when your 2das are updated. + +If you wish to expand it to include more custom content (for example CEP portraits), +you need to change the constants in inc_fileends to define the last lines of the +relevant 2das. You will also need to recompile all the scripts. + + +You may be able to use FastFrenchs NWNX development, I havn't tested it +particularly, but there is no reason why not. I have also only tested it with an +MS Access database, though it should work with MySQL too. + + +In addition, there is now a few optional extras. These are toggled by local int +variables set on the module. +PRC_CONVOCC_AVARIEL_WINGS Avariel characters have bird wings +PRC_CONVOCC_FEYRI_WINGS Fey'ri characters have bat wings +PRC_CONVOCC_FEYRI_TAIL Fey'ri characters have a demonic tail +PRC_CONVOCC_DROW_ENFORCE_GENDER Force Drow characters to be of the correct gender for + their race +PRC_CONVOCC_GENSAI_ENFORCE_DOMAINS Force Gensai clerics to select the relevant elemental + domain as one of their feats +PRC_CONVOCC_ENFORCE_BLOOD_OF_THE_WARLORD Makes Blood of the Warlord only avliable to orcish characters +PRC_CONVOCC_ENFORCE_FEAT_NIMBUSLIGHT Enforces the "moral" feats +PRC_CONVOCC_ENFORCE_FEAT_HOLYRADIANCE +PRC_CONVOCC_ENFORCE_FEAT_SERVHEAVEN +PRC_CONVOCC_ENFORCE_FEAT_SAC_VOW +PRC_CONVOCC_ENFORCE_FEAT_VOW_OBED +PRC_CONVOCC_ENFORCE_FEAT_THRALL_TO_DEMON +PRC_CONVOCC_ENFORCE_FEAT_DISCIPLE_OF_DARKNESS +PRC_CONVOCC_ENFORCE_FEAT_LICHLOVED +PRC_CONVOCC_ENFORCE_FEAT_EVIL_BRANDS +PRC_CONVOCC_ENFORCE_FEAT_VILE_WILL_DEFORM +PRC_CONVOCC_ENFORCE_FEAT_VILE_DEFORM_OBESE +PRC_CONVOCC_ENFORCE_FEAT_VILE_DEFORM_GAUNT +PRC_CONVOCC_RAKSHASHA_FEMALE_APPEARANCE Female rakshasha use the female rakshasha model +PRC_CONVOCC_DRIDER_FEMALE_APPEARANCE Female drider use the female drider model +PRC_CONVOCC_DISALLOW_CUSTOMISE_WINGS Stops players changing their wings +PRC_CONVOCC_DISALLOW_CUSTOMISE_TAIL Stops players changing their tail +PRC_CONVOCC_DISALLOW_CUSTOMISE_MODEL Stops players changing their model at all +PRC_CONVOCC_USE_RACIAL_APPEARANCES Players can only change their model / portrait / soundset +PRC_CONVOCC_USE_RACIAL_PORTRAIT to alternatives of the same race. If you have extra +PRC_CONVOCC_USE_RACIAL_SOUNDSET content (e.g. from CEP) you must add them to + SetupRacialAppearances or SetupRacialPortraits or + SetupRacialSoundsets in prc_ccc_inc_e in order for + them to be shown on the list. +PRC_CONVOCC_ONLY_PLAYER_VOICESETS Players can only select from the player voicesets + NPC voicesets are not complete, so wont play sounds + for many things such as emotes. +PRC_CONVOCC_RESTRICT_VOICESETS_BY_SEX Only allows players to select voiceset of the same gender +PRC_CONVOCC_FORCE_KEEP_VOICESET Skips the select a voiceset step entirely, and players + have to keep their current voiceset +PRC_CONVOCC_ALLOW_TO_KEEP_PORTRAIT Allow players to keep their exisiting portrait + The ConvoCC cannot allow players to select custom + portriats, so the only way for players to have them + is to select them in the bioware character creator + and then select to keep them in the ConvoCC. +PRC_CONVOCC_FORCE_KEEP_PORTRAIT Skips the select a portrait step entirely, and players + have to keep their current portrait +PRC_CONVOCC_RESTRICT_PORTRAIT_BY_SEX Only allow players to select portraits of the same gender. + Most of the NPC portraits do not have a gender so are also + removed. +PRC_CONVOCC_ENABLE_RACIAL_HITDICE This option give players the ability to start with racial + hit dice for some of the more powerful races. These are + defined in ECL.2da For these races, players do not pick + a class in the ConvoCC but instead select 1 or more levels + in a racial class (such as monsterous humanoid, or outsider). + This is not a complete ECL system, it mearly gives players + the racial hit dice component. It does not make any measure + of the Level Adjustment component. For example, a pixie has + no racial hit dice, but has a +4 level adjustment. +PRC_CONVOCC_ALLOW_HIDDEN_SKIN_COLOURS These enable players to select the hidden skin, hair, +PRC_CONVOCC_ALLOW_HIDDEN_HAIR_COLOURS and tattoo colours (metalics, matt black, matt white). +PRC_CONVOCC_ALLOW_HIDDEN_TATTOO_COLOURS +PRC_CONVOCC_ALLOW_SKILL_POINT_ROLLOVER This option allows players to keep their skillpoints + from one level to the next, if they want to. +PRC_CONVOCC_USE_XP_FOR_NEW_CHAR This will identify new characters based on X which is + the same as v1.3 but less secure. +PRC_CONVOCC_ENCRYPTION_KEY This is the key used to encrypt characters names if + USE_XP_FOR_NEW_CHAR is false in order to identify + returning characters. It should be in the range 1-100. + If USE_XP_FOR_NEW_CHAR is true, then returning + characters will be encrypted too, so once everone has + logged on at least once, USE_XP_FOR_NEW_CHAR can be + set to false for greater security. + + +Change log +v1.4 + Changed several systems to the more general systems the PRC will use in 2.3 + Fixed alertness not being given as a racial/bonus feat + Fixed cross class skills not dissapering at 1 skill point remaining + Fixed clerical domain feats not being given correctly + Fixed bonus feats not being given correctly + Fixed quick to master feat selection not being reset correctly + Added model selection + Added wing selection + Added tail selection + Added skin colour selection + Added hair colour selection + Added preview for character customizations (model, soundset, colors, etc) + Added builder options for lots of things + Added skill point storage +v1.3 + Fixed a nasty bug 1.2 introduced where all characters were given elven radial feats and appearance +v1.2 + Fixed another bug with user and character names with unusual characters in + Fixed bugs with MySQL database + Added BiowareDB caching (at character creation and module load only) + Added confirmation stages + Added "keep existing" options to portrait and soundset +v1.1 + Fixed bug with usernames with spaces in them + Fixed bug with cleric second domain scrolling + Fixed bug with missing scripts in erf + Added portrait selection + Added soundset selection +v1.0 + First Release +*/ diff --git a/src/include/prc_class_const.nss b/src/include/prc_class_const.nss new file mode 100644 index 0000000..286b574 --- /dev/null +++ b/src/include/prc_class_const.nss @@ -0,0 +1,241 @@ +//:: Class constants + +const int CLASS_TYPE_PLANT = 164; + +const int CLASS_TYPE_PRC_EYE_OF_GRUUMSH = 39; +const int CLASS_TYPE_SHOU = 40; + +const int CLASS_TYPE_UR_PRIEST = 42; +const int CLASS_TYPE_BINDER = 43; +const int CLASS_TYPE_ANIMA_MAGE = 44; +const int CLASS_TYPE_KNIGHT_SACRED_SEAL = 45; +const int CLASS_TYPE_SCION_DANTALION = 46; +const int CLASS_TYPE_TENEBROUS_APOSTATE = 47; +const int CLASS_TYPE_REAPING_MAULER = 48; +const int CLASS_TYPE_SERENE_GUARDIAN = 49; +const int CLASS_TYPE_SACREDPURIFIER = 50; +const int CLASS_TYPE_OCULAR = 51; +const int CLASS_TYPE_BATTLERAGER = 52; +const int CLASS_TYPE_MYSTIC_THEURGE = 53; +const int CLASS_TYPE_NINJA_SPY = 54; +const int CLASS_TYPE_SAMURAI = 55; +const int CLASS_TYPE_WARPRIEST = 56; +const int CLASS_TYPE_SPELLFIRE = 57; +const int CLASS_TYPE_VIRTUOSO = 58; +const int CLASS_TYPE_MARSHAL = 59; +const int CLASS_TYPE_SWASHBUCKLER = 60; +const int CLASS_TYPE_HEXBLADE = 61; +const int CLASS_TYPE_DUSKBLADE = 62; +const int CLASS_TYPE_SCOUT = 63; +const int CLASS_TYPE_HEALER = 64; +const int CLASS_TYPE_MAGEKILLER = 65; +const int CLASS_TYPE_HARPERMAGE = 66; +const int CLASS_TYPE_SPELLSWORD = 67; +const int CLASS_TYPE_ACOLYTE = 68; +const int CLASS_TYPE_UNSEEN_SEER = 69; +const int CLASS_TYPE_ELDRITCH_KNIGHT = 70; +const int CLASS_TYPE_ELEMENTAL_SAVANT = 71; +const int CLASS_TYPE_FACTOTUM = 72; +const int CLASS_TYPE_CELEBRANT_SHARESS = 73; +const int CLASS_TYPE_CULTIST_SHATTERED_PEAK = 74; +const int CLASS_TYPE_FORSAKER = 75; +const int CLASS_TYPE_INCARNATE = 76; +const int CLASS_TYPE_SOULBORN = 77; +const int CLASS_TYPE_TOTEMIST = 78; +const int CLASS_TYPE_BEGUILER = 79; +const int CLASS_TYPE_DUELIST = 80; +const int CLASS_TYPE_HIEROPHANT = 81; +const int CLASS_TYPE_RED_AVENGER = 82; +const int CLASS_TYPE_KNIGHT_CHALICE = 83; +const int CLASS_TYPE_HATHRAN = 84; +const int CLASS_TYPE_IRONSOUL_FORGEMASTER = 85; +const int CLASS_TYPE_STORMLORD = 86; +const int CLASS_TYPE_HEARTWARDER = 87; +const int CLASS_TYPE_FISTRAZIEL = 88; +const int CLASS_TYPE_VASSAL = 89; +const int CLASS_TYPE_LICH = 90; +const int CLASS_TYPE_PNP_SHIFTER = 91; +const int CLASS_TYPE_COC = 92; +const int CLASS_TYPE_SUBLIME_CHORD = 93; +const int CLASS_TYPE_ARTIFICER = 94; +const int CLASS_TYPE_ARCANE_DUELIST = 95; +const int CLASS_TYPE_FMM = 96; +const int CLASS_TYPE_WILD_MAGE = 97; +const int CLASS_TYPE_SHADOWSMITH = 98; +const int CLASS_TYPE_ABJURANT_CHAMPION = 99; +const int CLASS_TYPE_ARCHMAGE = 100; +const int CLASS_TYPE_OOZEMASTER = 101; +const int CLASS_TYPE_PSYCHIC_ROGUE = 102; +const int CLASS_TYPE_SPELLDANCER = 103; +const int CLASS_TYPE_KNIGHT_WEAVE = 104; +const int CLASS_TYPE_JUDICATOR = 105; +const int CLASS_TYPE_SHADOWBANE_INQUISITOR = 106; +const int CLASS_TYPE_SHADOWBANE_STALKER = 107; +const int CLASS_TYPE_WAYFARER_GUIDE = 108; +const int CLASS_TYPE_UMBRAL_DISCIPLE = 109; +const int CLASS_TYPE_ALIENIST = 110; +const int CLASS_TYPE_BLACK_BLOOD_CULTIST = 111; +const int CLASS_TYPE_WARLOCK = 112; +const int CLASS_TYPE_FOCHLUCAN_LYRIST = 113; +const int CLASS_TYPE_DRAGONSONG_LYRIST = 114; +const int CLASS_TYPE_SPINEMELD_WARRIOR = 115; +const int CLASS_TYPE_NIGHTSHADE = 116; +const int CLASS_TYPE_SHADOW_ADEPT = 117; +const int CLASS_TYPE_SOLDIER_OF_LIGHT = 118; +const int CLASS_TYPE_SAPPHIRE_HIERARCH = 119; +const int CLASS_TYPE_SHADOWLORD = 120; +const int CLASS_TYPE_BONDED_SUMMONNER = 121; +const int CLASS_TYPE_INITIATE_DRACONIC = 122; +const int CLASS_TYPE_TEMPUS = 123; +const int CLASS_TYPE_BLADESINGER = 124; +const int CLASS_TYPE_SOULCASTER = 125; +const int CLASS_TYPE_SACREDFIST = 126; +const int CLASS_TYPE_LEGENDARY_DREADNOUGHT = 127; +const int CLASS_TYPE_DISC_BAALZEBUL = 128; +const int CLASS_TYPE_MIGHTY_CONTENDER_KORD = 129; +const int CLASS_TYPE_IAIJUTSU_MASTER = 130; +const int CLASS_TYPE_DISPATER = 131; +const int CLASS_TYPE_CW_SAMURAI = 132; +const int CLASS_TYPE_RAVAGER = 133; +const int CLASS_TYPE_RUNESCARRED = 134; +const int CLASS_TYPE_BLIGHTLORD = 135; +const int CLASS_TYPE_SHADOWCASTER = 136; +const int CLASS_TYPE_CHILD_OF_NIGHT = 137; +const int CLASS_TYPE_MASTER_OF_SHADOW = 138; +const int CLASS_TYPE_NOCTUMANCER = 139; +const int CLASS_TYPE_TOTEM_RAGER = 140; +const int CLASS_TYPE_NINJA = 141; +const int CLASS_TYPE_SHADOWBLADE = 142; +const int CLASS_TYPE_DRAGON_SHAMAN = 143; +const int CLASS_TYPE_DRAGONFIRE_ADEPT = 144; +const int CLASS_TYPE_PSION = 145; +const int CLASS_TYPE_PSYWAR = 146; +const int CLASS_TYPE_SOULKNIFE = 147; +const int CLASS_TYPE_WILDER = 148; +const int CLASS_TYPE_THAYAN_KNIGHT = 149; +const int CLASS_TYPE_RED_WIZARD = 150; +const int CLASS_TYPE_TRUENECRO = 151; +const int CLASS_TYPE_ARCTRICK = 152; +const int CLASS_TYPE_BLOOD_MAGUS = 153; +const int CLASS_TYPE_DIABOLIST = 154; +const int CLASS_TYPE_HEXTOR = 155; +const int CLASS_TYPE_INCANDESCENT_CHAMPION = 156; +const int CLASS_TYPE_JUSTICEWW = 157; +const int CLASS_TYPE_ACOLYTE_EGO = 158; +const int CLASS_TYPE_PEERLESS = 159; +const int CLASS_TYPE_LASHER = 160; +const int CLASS_TYPE_ORDER_BOW_INITIATE = 161; +const int CLASS_TYPE_HELLFIRE_WARLOCK = 162; +const int CLASS_TYPE_ORCUS = 163; +//:: Plant = 164 +const int CLASS_TYPE_BFZ = 165; +const int CLASS_TYPE_SHINING_BLADE = 166; +const int CLASS_TYPE_KNIGHT_MIDDLECIRCLE = 167; +const int CLASS_TYPE_MAESTER = 168; +const int CLASS_TYPE_COMBAT_MEDIC = 169; +const int CLASS_TYPE_OLLAM = 170; +const int CLASS_TYPE_HALFLING_WARSLINGER = 171; +const int CLASS_TYPE_SPIRIT_SHAMAN = 172; +const int CLASS_TYPE_WEREWOLF = 173; +const int CLASS_TYPE_HOSPITALER = 174; +const int CLASS_TYPE_MASTER_OF_SHROUDS = 175; +const int CLASS_TYPE_MASTER_HARPER = 176; +const int CLASS_TYPE_FRE_BERSERKER = 177; +const int CLASS_TYPE_TEMPEST = 178; +const int CLASS_TYPE_FOE_HUNTER = 179; +//:: Free = 180 +const int CLASS_TYPE_ORC_WARLORD = 181; +const int CLASS_TYPE_THRALL_OF_GRAZZT_A = 182; +const int CLASS_TYPE_NECROCARNATE = 183; +const int CLASS_TYPE_ELDRITCH_DISCIPLE = 184; +const int CLASS_TYPE_ELDRITCH_THEURGE = 185; +const int CLASS_TYPE_GHOST_FACED_KILLER = 186; +const int CLASS_TYPE_DREAD_NECROMANCER = 187; +const int CLASS_TYPE_ULTIMATE_MAGUS = 188; +const int CLASS_TYPE_FORESTMASTER = 189; +const int CLASS_TYPE_ARCHIVIST = 190; +const int CLASS_TYPE_DEEPSTONE_SENTINEL = 191; +const int CLASS_TYPE_JADE_PHOENIX_MAGE = 192; +const int CLASS_TYPE_BLOODCLAW_MASTER = 193; +const int CLASS_TYPE_RUBY_VINDICATOR = 194; +const int CLASS_TYPE_MASTER_OF_NINE = 195; +const int CLASS_TYPE_ETERNAL_BLADE = 196; +const int CLASS_TYPE_SHADOW_SUN_NINJA = 197; +const int CLASS_TYPE_WITCHBORN_BINDER = 198; +const int CLASS_TYPE_BAELNORN = 199; +const int CLASS_TYPE_DISCIPLE_OF_MEPH = 200; +const int CLASS_TYPE_SOUL_EATER = 201; +const int CLASS_TYPE_HENSHIN_MYSTIC = 202; +const int CLASS_TYPE_DRUNKEN_MASTER = 203; +const int CLASS_TYPE_ENLIGHTENEDFIST = 204; +const int CLASS_TYPE_MORNINGLORD = 205; +const int CLASS_TYPE_INCARNUM_BLADE = 206; +const int CLASS_TYPE_SHAMAN = 207; +const int CLASS_TYPE_PYROKINETICIST = 208; +const int CLASS_TYPE_SHADOWMIND = 209; +const int CLASS_TYPE_PSYCHIC_THEURGE = 210; +const int CLASS_TYPE_CEREBREMANCER = 211; +const int CLASS_TYPE_THRALLHERD = 212; +const int CLASS_TYPE_FIST_OF_ZUOKEN = 213; +const int CLASS_TYPE_HAVOC_MAGE = 214; +const int CLASS_TYPE_CONTEMPLATIVE = 215; +const int CLASS_TYPE_RUNECASTER = 216; +const int CLASS_TYPE_WARCHIEF = 217; +const int CLASS_TYPE_WARMIND = 218; +const int CLASS_TYPE_IRONMIND = 219; +const int CLASS_TYPE_SANCTIFIED_MIND = 220; +const int CLASS_TYPE_SLAYER_OF_DOMIEL = 221; +const int CLASS_TYPE_DISCIPLE_OF_ASMODEUS = 222; +const int CLASS_TYPE_DIRGESINGER = 223; +const int CLASS_TYPE_SUEL_ARCHANAMACH = 224; +const int CLASS_TYPE_FAVOURED_SOUL = 225; +const int CLASS_TYPE_WAR_WIZARD_OF_CORMYR = 226; +const int CLASS_TYPE_SKULLCLAN_HUNTER = 227; +const int CLASS_TYPE_TRUENAMER = 228; +const int CLASS_TYPE_MASTER_ALCHEMIST = 229; +const int CLASS_TYPE_BEREFT = 230; +const int CLASS_TYPE_BRIMSTONE_SPEAKER = 231; +const int CLASS_TYPE_SHUGENJA = 232; +const int CLASS_TYPE_SOHEI = 233; +const int CLASS_TYPE_CRUSADER = 234; +const int CLASS_TYPE_SWORDSAGE = 235; +const int CLASS_TYPE_WARBLADE = 236; +const int CLASS_TYPE_WARMAGE = 237; +const int CLASS_TYPE_KNIGHT = 238; +const int CLASS_TYPE_FIST_DAL_QUOR = 239; +const int CLASS_TYPE_HANDOTWM = 240; +const int CLASS_TYPE_TALON_OF_TIAMAT = 241; +const int CLASS_TYPE_DRAGON_DEVOTEE = 242; +const int CLASS_TYPE_FROST_MAGE = 243; +const int CLASS_TYPE_WARFORGED_JUGGERNAUT = 244; +const int CLASS_TYPE_BATTLESMITH = 245; +const int CLASS_TYPE_NENTYAR_HUNTER = 246; +const int CLASS_TYPE_BLIGHTER = 247; +const int CLASS_TYPE_RAGE_MAGE = 248; +const int CLASS_TYPE_DRAGONHEART_MAGE = 249; +const int CLASS_TYPE_SWIFT_WING = 250; +const int CLASS_TYPE_DIAMOND_DRAGON = 251; +const int CLASS_TYPE_FROSTRAGER = 252; +const int CLASS_TYPE_CRINTI_SHADOW_MARAUDER = 253; +const int CLASS_TYPE_SHADOW_THIEF_AMN = 254; + +const int CLASS_TYPE_ANTI_PALADIN = -1; +const int CLASS_TYPE_NIGHTSTALKER = -1; //Just here to make things compile until it gets stripped out +const int CLASS_TYPE_MINSTREL_EDGE = -1; +const int CLASS_TYPE_BRAWLER = -1; +const int CLASS_TYPE_THRALL_OF_GRAZZT_D = -1; +const int CLASS_TYPE_MASTER_HARPER_DIV = -1; +const int CLASS_TYPE_ULTIMATE_RANGER = -1; +const int CLASS_TYPE_MANATARMS = -1; +const int CLASS_TYPE_BOWMAN = -1; +const int CLASS_TYPE_VIGILANT = -1; +const int CLASS_TYPE_ARCANE_HIEROPHANT = -1; +const int CLASS_TYPE_ALAGHAR = -1; +const int CLASS_TYPE_BLARCHER = -1; +const int CLASS_TYPE_WITCH = -1; +const int CLASS_TYPE_TEMPLAR = -1; +const int CLASS_TYPE_MYSTIC = -1; +const int CLASS_TYPE_NOBLE = -1; + + +//void main (){} \ No newline at end of file diff --git a/src/include/prc_compan_inc.nss b/src/include/prc_compan_inc.nss new file mode 100644 index 0000000..bf96c34 --- /dev/null +++ b/src/include/prc_compan_inc.nss @@ -0,0 +1,171 @@ +const int PRC_COMP_APPEARANCE_TYPE_BEHOLDER_EYEBALL_150 = 482; +const int PRC_COMP_APPEARANCE_TYPE_BEHOLDER_125 = 483; +const int PRC_COMP_APPEARANCE_TYPE_BEHOLDER_MAGE_125 = 484; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_BLACK_75 = 485; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_BLACK_125 = 486; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_BRASS_75 = 487; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_BRASS_125 = 488; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_COPPER_75 = 489; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_COPPER_125 = 490; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_SILVER_75 = 491; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_SILVER_125 = 492; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_BRONZE_75 = 493; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_BRONZE_125 = 494; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_GOLD_75 = 495; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_GOLD_125 = 496; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_BLUE_75 = 497; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_BLUE_125 = 498; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_GREEN_75 = 499; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_GREEN_125 = 500; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_RED_75 = 501; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_RED_125 = 502; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_WHITE_75 = 503; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_WHITE_125 = 504; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_SHADOW_75 = 505; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_SHADOW_125 = 506; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_PRISM_75 = 507; +const int PRC_COMP_APPEARANCE_TYPE_DRAGON_PRISM_125 = 508; +const int PRC_COMP_APPEARANCE_TYPE_BEETLE_SLICER_125 = 509; +const int PRC_COMP_APPEARANCE_TYPE_BEETLE_STAG_125 = 510; +const int PRC_COMP_APPEARANCE_TYPE_ELEMENTAL_AIR_125 = 511; +const int PRC_COMP_APPEARANCE_TYPE_ELEMENTAL_AIR_150 = 512; +const int PRC_COMP_APPEARANCE_TYPE_ELEMENTAL_AIR_ELDER_125 = 513; +const int PRC_COMP_APPEARANCE_TYPE_ELEMENTAL_AIR_ELDER_150 = 514; +const int PRC_COMP_APPEARANCE_TYPE_ELEMENTAL_EARTH_125 = 515; +const int PRC_COMP_APPEARANCE_TYPE_ELEMENTAL_EARTH_150 = 516; +const int PRC_COMP_APPEARANCE_TYPE_ELEMENTAL_EARTH_ELDER_125=517; +const int PRC_COMP_APPEARANCE_TYPE_ELEMENTAL_EARTH_ELDER_150=518; +const int PRC_COMP_APPEARANCE_TYPE_ELEMENTAL_FIRE_125 = 519; +const int PRC_COMP_APPEARANCE_TYPE_ELEMENTAL_FIRE_150 = 520; +const int PRC_COMP_APPEARANCE_TYPE_ELEMENTAL_FIRE_ELDER_125= 521; +const int PRC_COMP_APPEARANCE_TYPE_ELEMENTAL_FIRE_ELDER_150= 522; +const int PRC_COMP_APPEARANCE_TYPE_ELEMENTAL_WATER_125 = 523; +const int PRC_COMP_APPEARANCE_TYPE_ELEMENTAL_WATER_150 = 524; +const int PRC_COMP_APPEARANCE_TYPE_ELEMENTAL_WATER_ELDER_125=525; +const int PRC_COMP_APPEARANCE_TYPE_ELEMENTAL_WATER_ELDER_150=526; +const int PRC_COMP_APPEARANCE_TYPE_MUMMY_COMMON_125 = 527; +const int PRC_COMP_APPEARANCE_TYPE_SKELETON_COMMON_125 = 528; +const int PRC_COMP_APPEARANCE_TYPE_SKELETON_COMMON_150 = 529; +const int PRC_COMP_APPEARANCE_TYPE_SHIELD_GUARDIAN_125 = 530; +const int PRC_COMP_APPEARANCE_TYPE_GOLEM_CLAY_125 = 531; +const int PRC_COMP_APPEARANCE_TYPE_MOHRG_125 = 532; +const int PRC_COMP_APPEARANCE_TYPE_ZOMBIE_125 = 533; +const int PRC_COMP_APPEARANCE_TYPE_ZOMBIE_150 = 534; +const int PRC_COMP_APPEARANCE_TYPE_GARGOYLE_125 = 535; +const int PRC_COMP_APPEARANCE_TYPE_SKELETAL_DEVOURER_125 = 536; +const int PRC_COMP_APPEARANCE_TYPE_PENGUIN_150 = 537; +const int PRC_COMP_APPEARANCE_TYPE_PENGUIN_200 = 538; +const int PRC_COMP_APPEARANCE_TYPE_PENGUIN_300 = 539; +const int PRC_COMP_APPEARANCE_TYPE_PENGUIN_400 = 540; +const int PRC_COMP_APPEARANCE_TYPE_PENGUIN_500 = 541; +const int PRC_COMP_APPEARANCE_TYPE_BEETLE_STAG_50 = 542; +const int PRC_COMP_APPEARANCE_TYPE_BEETLE_STAG_25 = 543; +const int PRC_COMP_APPEARANCE_TYPE_BEETLE_STINK_50 = 544; +const int PRC_COMP_APPEARANCE_TYPE_BEETLE_STINK_25 = 545; +const int PRC_COMP_APPEARANCE_TYPE_BAT_50 = 546; +const int PRC_COMP_APPEARANCE_TYPE_BAT_60 = 547; +const int PRC_COMP_APPEARANCE_TYPE_BAT_70 = 548; +const int PRC_COMP_APPEARANCE_TYPE_BAT_80 = 549; +const int PRC_COMP_APPEARANCE_TYPE_BAT_90 = 550; +const int PRC_COMP_APPEARANCE_TYPE_BAT_125 = 551; +const int PRC_COMP_APPEARANCE_TYPE_CAT_COUGAR_40 = 552; +const int PRC_COMP_APPEARANCE_TYPE_CAT_COUGAR_50 = 553; +const int PRC_COMP_APPEARANCE_TYPE_CAT_COUGAR_75 = 554; +const int PRC_COMP_APPEARANCE_TYPE_CAT_LION_40 = 555; +const int PRC_COMP_APPEARANCE_TYPE_CAT_LION_50 = 556; +const int PRC_COMP_APPEARANCE_TYPE_CAT_LION_75 = 557; +const int PRC_COMP_APPEARANCE_TYPE_CAT_PANTHER_40 = 558; +const int PRC_COMP_APPEARANCE_TYPE_CAT_PANTHER_50 = 559; +const int PRC_COMP_APPEARANCE_TYPE_CAT_PANTHER_75 = 560; +const int PRC_COMP_APPEARANCE_TYPE_RAT_50 = 561; +const int PRC_COMP_APPEARANCE_TYPE_RAT_75 = 562; +const int PRC_COMP_APPEARANCE_TYPE_SKELETON_COMMON_50 = 563; +const int PRC_COMP_APPEARANCE_TYPE_SKELETON_COMMON_75 = 564; +const int PRC_COMP_APPEARANCE_TYPE_ZOMBIE_50 = 565; +const int PRC_COMP_APPEARANCE_TYPE_ZOMBIE_75 = 566; +const int PRC_COMP_APPEARANCE_TYPE_GOLEM_IRON_125 = 567; +const int PRC_COMP_APPEARANCE_TYPE_GOLEM_STONE_125 = 568; +const int PRC_COMP_APPEARANCE_TYPE_BAT_150 = 569; +const int PRC_COMP_APPEARANCE_TYPE_BAT_200 = 570; +const int PRC_COMP_APPEARANCE_TYPE_OGRE_DLA = 1535; +const int PRC_COMP_APPEARANCE_TYPE_MONODRONE = 1529; +const int PRC_COMP_APPEARANCE_TYPE_OSYLUTH_C = 1503; +const int PRC_COMP_APPEARANCE_TYPE_OSYLUTH_B = 1502; +const int PRC_COMP_APPEARANCE_TYPE_OSYLUTH_A = 1501; +const int PRC_COMP_APPEARANCE_TYPE_MAUG_COMMANDER = 1500; +const int PRC_COMP_APPEARANCE_TYPE_MAUG_LIEUTENANT = 1499; +const int PRC_COMP_APPEARANCE_TYPE_MAUG = 1498; +const int PRC_COMP_APPEARANCE_TYPE_TREANT = 1492; +const int PRC_COMP_APPEARANCE_TYPE_GLABREZU = 1418; +const int PRC_COMP_APPEARANCE_TYPE_HARLAT = 990; +const int PRC_COMP_APPEARANCE_TYPE_MASTERIUS = 991; +const int PRC_COMP_APPEARANCE_TYPE_BEHOLDER_GZORB = 993; +const int PRC_COMP_APPEARANCE_TYPE_HAGTHA = 994; +const int PRC_COMP_APPEARANCE_TYPE_WEREBOAR = 996; +const int PRC_COMP_APPEARANCE_TYPE_ANTOINE = 997; +const int PRC_COMP_APPEARANCE_TYPE_MAGGRIS = 998; +const int PRC_COMP_APPEARANCE_TYPE_HALASTER = 999; + +const int PRC_COMP_POLYMORPH_TYPE_PENGUIN_150 = 151; +const int PRC_COMP_POLYMORPH_TYPE_PENGUIN_200 = 152; +const int PRC_COMP_POLYMORPH_TYPE_PENGUIN_300 = 153; +const int PRC_COMP_POLYMORPH_TYPE_PENGUIN_400 = 154; +const int PRC_COMP_POLYMORPH_TYPE_PENGUIN_500 = 155; + +const int PRC_COMP_WING_TYPE_ERINYES = 30; +const int PRC_COMP_WING_TYPE_BIRD_RED = 31; +const int PRC_COMP_WING_TYPE_BIRD_DARK = 32; +const int PRC_COMP_WING_TYPE_BIRD_BLUE = 33; +const int PRC_COMP_WING_TYPE_DRAGON_BLACK = 34; +const int PRC_COMP_WING_TYPE_DRAGON_BLUE = 35; +const int PRC_COMP_WING_TYPE_DRAGON_BRASS = 36; +const int PRC_COMP_WING_TYPE_DRAGON_BRONZE = 37; +const int PRC_COMP_WING_TYPE_DRAGON_COPPER = 38; +const int PRC_COMP_WING_TYPE_DRAGON_GOLD = 39; +const int PRC_COMP_WING_TYPE_DRAGON_GREEN = 40; +const int PRC_COMP_WING_TYPE_DRAGON_SILVER = 41; +const int PRC_COMP_WING_TYPE_DRAGON_WHITE = 42; +const int PRC_COMP_WING_TYPE_BIRD_KENKU = 43; +const int PRC_COMP_WING_TYPE_HALFDRAGON_GOLD = 44; +const int PRC_COMP_WING_TYPE_HALFDRAGON_SILVER = 45; +const int PRC_COMP_WING_TYPE_ANGEL_ARMORED = 46; +const int PRC_COMP_WING_TYPE_ANGEL_FALLEN = 47; +const int PRC_COMP_WING_TYPE_RAVEN = 48; +const int PRC_COMP_WING_TYPE_MEPHISTO = 49; +const int PRC_COMP_WING_TYPE_DRAGON_SHADOW = 50; +const int PRC_COMP_WING_TYPE_DRAGON_DRACOLICH = 51; +const int PRC_COMP_WING_TYPE_DRAGON_PRISMATIC = 52; + +const int PRC_COMP_TAIL_TYPE_CAT = 130; +const int PRC_COMP_TAIL_TYPE_MAGE_TAIL = 131; +const int PRC_COMP_TAIL_TYPE_MAGE_TAIL_2 = 132; +const int PRC_COMP_TAIL_TYPE_WAR_TAIL = 133; +const int PRC_COMP_TAIL_TYPE_LIZARD_RED = 134; +const int PRC_COMP_TAIL_TYPE_LIZARD_BLACK = 135; +const int PRC_COMP_TAIL_TYPE_LIZARD_BLUE = 136; +const int PRC_COMP_TAIL_TYPE_LIZARD_WHITE = 137; +const int PRC_COMP_TAIL_TYPE_LIZARD_PRISMATIC = 138; +const int PRC_COMP_TAIL_TYPE_LIZARD_SHADOW = 139; +const int PRC_COMP_TAIL_TYPE_LIZARD_BRASS = 140; +const int PRC_COMP_TAIL_TYPE_LIZARD_BRONZE = 141; +const int PRC_COMP_TAIL_TYPE_LIZARD_COPPER = 142; +const int PRC_COMP_TAIL_TYPE_LIZARD_GOLD = 143; +const int PRC_COMP_TAIL_TYPE_LIZARD_SILVER = 144; +const int PRC_COMP_TAIL_TYPE_GARGOYLE = 145; +const int PRC_COMP_TAIL_TYPE_MINOTAUR = 146; +const int PRC_COMP_TAIL_TYPE_WERECAT = 147; +const int PRC_COMP_TAIL_TYPE_BULETTER = 148; +const int PRC_COMP_TAIL_TYPE_RAVEN = 149; +const int PRC_COMP_TAIL_TYPE_FALCON = 150; +const int PRC_COMP_TAIL_TYPE_MANTICORE = 151; +const int PRC_COMP_TAIL_TYPE_HALFLIZARD_SILVER = 152; +const int PRC_COMP_TAIL_TYPE_HALFLIZARD_GOLD = 153; +const int PRC_COMP_TAIL_TYPE_LEOPARD = 154; +const int PRC_COMP_TAIL_TYPE_LEOPARD_SNOW = 155; +const int PRC_COMP_TAIL_TYPE_TIGER = 156; +const int PRC_COMP_TAIL_TYPE_TIGER_WHITE = 157; +const int PRC_COMP_TAIL_TYPE_FOX = 158; +const int PRC_COMP_TAIL_TYPE_WOLF = 159; +const int PRC_COMP_TAIL_TYPE_WOLF_SHAGGY = 160; +const int PRC_COMP_TAIL_TYPE_LIZARD_DYNAMIC = 161; +const int PRC_COMP_TAIL_TYPE_DEVIL_DYNAMIC = 162; \ No newline at end of file diff --git a/src/include/prc_craft_inc.nss b/src/include/prc_craft_inc.nss new file mode 100644 index 0000000..8d0c398 --- /dev/null +++ b/src/include/prc_craft_inc.nss @@ -0,0 +1,2953 @@ +/* + prc_craft_include + + Include file for forge scripts, currently restricted to equipable items + + By: Flaming_Sword + Created: Jul 12, 2006 + Modified: Nov 5, 2007 + + GetItemPropertySubType() returns 0 or 65535, not -1 + on no subtype as in Lexicon + + Some hardcoded functions for itemprops to avoid looping through + the 2das multiple times: + + Get2DALineFromItemprop() + DisallowType() + PrereqSpecialHandling() + PropSpecialHandling() + +*/ + +itemproperty ConstructIP(int nType, int nSubTypeValue = 0, int nCostTableValue = 0, int nParam1Value = 0); + +//Partly ripped off the lexicon :P +int GetItemBaseAC(object oItem); + +int GetItemArmourCheckPenalty(object oItem); + +int GetCraftingFeat(object oItem); + +string GetItemPropertyString(itemproperty ip); + +struct ipstruct GetIpStructFromString(string sIp); + +#include "psi_inc_psifunc" + +//#include "prc_inc_spells" //Most core functions are + //accessd through psi_inc_core +//#include "prc_inc_listener" +#include "prc_inc_chat" +#include "prc_x2_craft" + +const int NUM_MAX_PROPERTIES = 200; +const int NUM_MAX_SUBTYPES = 256; +//const int NUM_MAX_FEAT_SUBTYPES = 16384; //because iprp_feats is frickin' huge +const int NUM_MAX_FEAT_SUBTYPES = 397; //because the above screwed the game + +//const int NUM_MAX_SPELL_SUBTYPES = 540; //restricted to bioware spells + // to avoid crashes +const int NUM_MAX_SPELL_SUBTYPES = 1172; //new value for list skipping + +const int PRC_CRAFT_SIMPLE_WEAPON = 1; +const int PRC_CRAFT_MARTIAL_WEAPON = 2; +const int PRC_CRAFT_EXOTIC_WEAPON = 3; + +const int PRC_CRAFT_MATERIAL_METAL = 1; +const int PRC_CRAFT_MATERIAL_WOOD = 2; +const int PRC_CRAFT_MATERIAL_LEATHER = 3; +const int PRC_CRAFT_MATERIAL_CLOTH = 4; + +const string PRC_CRAFT_UID_SUFFIX = "_UID_PRC"; +const string PRC_CRAFT_STORAGE_CHEST = "PRC_CRAFT_STORAGE_CHEST"; +const string PRC_CRAFT_TEMPORARY_CHEST = "PRC_CRAFT_TEMPORARY_CHEST"; +const string PRC_CRAFT_ITEMPROP_ARRAY = "PRC_CRAFT_ITEMPROP_ARRAY"; + +const int PRC_CRAFT_FLAG_NONE = 0; +const int PRC_CRAFT_FLAG_MASTERWORK = 1; +const int PRC_CRAFT_FLAG_ADAMANTINE = 2; +const int PRC_CRAFT_FLAG_DARKWOOD = 4; +const int PRC_CRAFT_FLAG_DRAGONHIDE = 8; +const int PRC_CRAFT_FLAG_MITHRAL = 16; +const int PRC_CRAFT_FLAG_COLD_IRON = 32; //not implemented +const int PRC_CRAFT_FLAG_ALCHEMICAL_SILVER = 64; //not implemented +const int PRC_CRAFT_FLAG_MUNDANE_CRYSTAL = 128; +const int PRC_CRAFT_FLAG_DEEP_CRYSTAL = 256; + +const int PRC_CRAFT_ITEM_TYPE_WEAPON = 1; +const int PRC_CRAFT_ITEM_TYPE_ARMOUR = 2; +const int PRC_CRAFT_ITEM_TYPE_SHIELD = 3; +const int PRC_CRAFT_ITEM_TYPE_AMMO = 4; +const int PRC_CRAFT_ITEM_TYPE_MISC = 5; +const int PRC_CRAFT_ITEM_TYPE_CASTSPELL = 6; +const int PRC_CRAFT_ITEM_TYPE_SPECIAL = 7; + +const string PRC_CRAFT_SPECIAL_BANE = "PRC_CRAFT_SPECIAL_BANE"; +const string PRC_CRAFT_SPECIAL_BANE_RACE = "PRC_CRAFT_SPECIAL_BANE_RACE"; + +const string PRC_CRAFT_LISTEN = "PRC_CRAFT_LISTEN"; + +const string PRC_CRAFT_APPEARANCE_ARRAY = "PRC_CRAFT_APPEARANCE_ARRAY"; +const string PRC_IP_ARRAY = "PRC_IP_ARRAY"; + +const int PRC_CRAFT_LISTEN_SETNAME = 1; +const int PRC_CRAFT_LISTEN_SETAPPEARANCE = 2; +/* +const int PRC_CRAFT_LISTEN_SETNAME = 1; +const int PRC_CRAFT_LISTEN_SETNAME = 1; +const int PRC_CRAFT_LISTEN_SETNAME = 1; +const int PRC_CRAFT_LISTEN_SETNAME = 1; +const int PRC_CRAFT_LISTEN_SETNAME = 1; +*/ + +const string PRC_CRAFT_TOKEN = "PRC_CRAFT_TOKEN"; + +const int CRAFT_COST_TYPE_INVALID = 0; +const int CRAFT_COST_TYPE_MARKET = 1; +const int CRAFT_COST_TYPE_CRAFTING = 2; +const int CRAFT_COST_TYPE_XP = 3; + +struct itemvars +{ + object item; + int enhancement; + int additionalcost; + int epic; +}; + +struct ipstruct +{ + int type; + int subtype; + int costtablevalue; + int param1value; +}; + +struct golemhds +{ + int base; + int max1; + int max2; +}; + +object GetCraftChest() +{ + return GetObjectByTag(PRC_CRAFT_STORAGE_CHEST); +} + +object GetTempCraftChest() +{ + return GetObjectByTag(PRC_CRAFT_TEMPORARY_CHEST); +} + +int GetCraftingSkill(object oItem) +{ + int nType = StringToInt(Get2DACache("prc_craft_gen_it", "Type", GetBaseItemType(oItem))); + if((nType == PRC_CRAFT_ITEM_TYPE_WEAPON) || + (nType == PRC_CRAFT_ITEM_TYPE_AMMO) + ) + return SKILL_CRAFT_WEAPON; + if((nType == PRC_CRAFT_ITEM_TYPE_ARMOUR) || + (nType == PRC_CRAFT_ITEM_TYPE_SHIELD) + ) + return SKILL_CRAFT_ARMOR; + return SKILL_CRAFT_GENERAL; +} + +string GetMaterialString(int nType) +{ + string sType = IntToString(nType); + int nLen = GetStringLength(sType); + switch(nLen) + { + case 1: sType = "0" + sType; + case 2: sType = "0" + sType; break; + } + return sType; +} + +//Will replace first 3 chars of item's tag with material flags +string GetNewItemTag(object oItem, int nType) +{ + string sTag = GetTag(oItem); + return GetMaterialString(nType) + GetStringRight(sTag, GetStringLength(sTag) - 3); +} + +int GetArmourCheckPenaltyReduction(object oItem) +{ + int nBase = GetBaseItemType(oItem); + int nBonus = 0; + if(((nBase == BASE_ITEM_ARMOR) || + (nBase == BASE_ITEM_SMALLSHIELD) || + (nBase == BASE_ITEM_LARGESHIELD) || + (nBase == BASE_ITEM_TOWERSHIELD)) + ) + { + int nMaterial = StringToInt(GetStringLeft(GetTag(oItem), 3)); + int nACPenalty = GetItemArmourCheckPenalty(oItem); + if(nMaterial & PRC_CRAFT_FLAG_MASTERWORK) + { + nBonus = PRCMin(1, nACPenalty); + } + if(nMaterial & PRC_CRAFT_FLAG_DARKWOOD) + { + nBonus = PRCMin(2, nACPenalty); + } + if(nMaterial & PRC_CRAFT_FLAG_MITHRAL) + { + nBonus = PRCMin(3, nACPenalty); + } + } + return nBonus; +} + +int SkillHasACPenalty(int nSkill) +{ + return StringToInt(Get2DACache("skills", "ArmorCheckPenalty", nSkill)); +} + +//Returns -1 if itemprop is not in the list, -2 if similar and should disallow type, +// hardcoded to avoid looping through 2das +int Get2DALineFromItemprop(string sFile, itemproperty ip, object oItem) +{ //it's either hardcoding or large numbers of 2da reads + int nType = GetItemPropertyType(ip); + int nSubType = GetItemPropertySubType(ip); + int nCostTableValue = GetItemPropertyCostTableValue(ip); + int nParam1Value = GetItemPropertyParam1Value(ip); + int nBase = GetBaseItemType(oItem); + if(sFile == "craft_armour") + { + switch(nType) + { + case ITEM_PROPERTY_AC_BONUS: + { + return (nCostTableValue - 1); + break; + } + case ITEM_PROPERTY_BONUS_FEAT: + { + if(nSubType == 201) return 24; + break; + } + case ITEM_PROPERTY_CAST_SPELL: + { + switch(nSubType) + { + case IP_CONST_CASTSPELL_CONTROL_UNDEAD_13: return 63; break; + case IP_CONST_CASTSPELL_ETHEREALNESS_18: return 33; break; + case 928: return (GetItemPropertyCostTableValue(ip) == IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY) ? 43 : 44; break; //spell turning + } + break; + } + case ITEM_PROPERTY_DAMAGE_REDUCTION: + { + if(nSubType == IP_CONST_DAMAGEREDUCTION_1) + { + switch(nCostTableValue) + { + case IP_CONST_DAMAGESOAK_5_HP: return 38; break; + case IP_CONST_DAMAGESOAK_10_HP: return 39; break; + case IP_CONST_DAMAGESOAK_15_HP: return 40; break; + default: return -2; break; + } + } + else if(nSubType == IP_CONST_DAMAGEREDUCTION_6) + { + switch(nCostTableValue) + { + case IP_CONST_DAMAGESOAK_5_HP: return 41; break; + case IP_CONST_DAMAGESOAK_10_HP: return 42; break; + default: return -2; break; + } + } + else return -2; + break; + } + case ITEM_PROPERTY_DAMAGE_RESISTANCE: + { + int nBaseValue = -1; + switch(nSubType) + { + case IP_CONST_DAMAGETYPE_ACID: nBaseValue = 20; break; + case IP_CONST_DAMAGETYPE_COLD: nBaseValue = 25; break; + case IP_CONST_DAMAGETYPE_ELECTRICAL: nBaseValue = 29; break; + case IP_CONST_DAMAGETYPE_FIRE: nBaseValue = 34; break; + case IP_CONST_DAMAGETYPE_SONIC: nBaseValue = 51; break; + } + if(nBaseValue != -1) + { + switch(nCostTableValue) + { + case IP_CONST_DAMAGERESIST_10: return nBaseValue; break; + case IP_CONST_DAMAGERESIST_20: return nBaseValue + 1; break; + case IP_CONST_DAMAGERESIST_30: return nBaseValue + 2; break; + case IP_CONST_DAMAGERESIST_50: return nBaseValue + 3; break; + default: return -2; break; + } + } + else return -2; + break; + } + case ITEM_PROPERTY_SPELL_RESISTANCE: + { + if((nCostTableValue >= 27) && (nCostTableValue <= 34)) return (nCostTableValue + 28); + else return -2; + break; + } + case ITEM_PROPERTY_SKILL_BONUS: + { + if(nSubType == SKILL_HIDE) + { + nCostTableValue -= GetArmourCheckPenaltyReduction(oItem); + switch(nCostTableValue) + { + case 5: return 49; break; + case 10: return 50; break; + case 15: return 51; break; + default: return -1; break; + } + } + else if(nSubType == SKILL_MOVE_SILENTLY) + { + nCostTableValue -= GetArmourCheckPenaltyReduction(oItem); + switch(nCostTableValue) + { + case 5: return 52; break; + case 10: return 53; break; + case 15: return 54; break; + default: return -1; break; + } + } + else + return -2; + break; + } + } + } + else if(sFile == "craft_weapon") + { + switch(nType) + { + case ITEM_PROPERTY_ENHANCEMENT_BONUS: + { + return (nCostTableValue - 1); + break; + } + case ITEM_PROPERTY_DAMAGE_BONUS: + { + int bAmmo = StringToInt(Get2DACache("prc_craft_gen_it", "Type", GetBaseItemType(oItem))) == PRC_CRAFT_ITEM_TYPE_AMMO; + if(bAmmo && nSubType == ((nBase == BASE_ITEM_BULLET) ? DAMAGE_TYPE_BLUDGEONING : DAMAGE_TYPE_PIERCING)) + return (nCostTableValue - 1); + if(nSubType == IP_CONST_DAMAGETYPE_ACID) + { + if(nCostTableValue == IP_CONST_DAMAGEBONUS_1d6) return 20; //Corrosive + else if(nCostTableValue == IP_CONST_DAMAGEBONUS_3d6) return 21; //Acidic blast + else return -2; + } + else if(nSubType == IP_CONST_DAMAGETYPE_FIRE) + { + if(nCostTableValue == IP_CONST_DAMAGEBONUS_1d6) return 30; //Flaming + else if(nCostTableValue == IP_CONST_DAMAGEBONUS_3d6) return 31; //Flaming blast + else return -2; + } + else if(nSubType == IP_CONST_DAMAGETYPE_COLD) + { + if(nCostTableValue == IP_CONST_DAMAGEBONUS_1d6) return 32; //Frost + else if(nCostTableValue == IP_CONST_DAMAGEBONUS_3d6) return 33; //Icy Blast + else return -2; + } + else if(nSubType == IP_CONST_DAMAGETYPE_ELECTRICAL) + { + if(nCostTableValue == IP_CONST_DAMAGEBONUS_1d6) return 37; //Shock + else if(nCostTableValue == IP_CONST_DAMAGEBONUS_3d6) return 38; // Lightning Blast + else return -2; + } + else if(nSubType == IP_CONST_DAMAGETYPE_SONIC) + { + if(nCostTableValue == IP_CONST_DAMAGEBONUS_1d4) return 39; //Screaming + else if(nCostTableValue == IP_CONST_DAMAGEBONUS_3d6) return 40; //Sonic Blast + else return -2; + } + else if(nSubType == IP_CONST_DAMAGETYPE_MAGICAL) + { + if(nCostTableValue == IP_CONST_DAMAGEBONUS_1d4) return 45; //Psychokinetic + else return -2; + } + + else return -2; + break; + } + case ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP: + { + switch(nSubType) + { + case IP_CONST_ALIGNMENTGROUP_LAWFUL: + { + if(nCostTableValue == IP_CONST_DAMAGEBONUS_2d6) return 22; // Anarchic + else if(nCostTableValue == IP_CONST_DAMAGEBONUS_3d6) return 23; // Anarchic Power + else return -2; + break; + } + case IP_CONST_ALIGNMENTGROUP_CHAOTIC: + { + if(nCostTableValue == IP_CONST_DAMAGEBONUS_2d6) return 24; // Axiomatic + else if(nCostTableValue == IP_CONST_DAMAGEBONUS_3d6) return 25; // Axiomatic Power + else return -2; + break; + } + case IP_CONST_ALIGNMENTGROUP_EVIL: + { + if(nCostTableValue == IP_CONST_DAMAGEBONUS_2d6) return 34; //Holy + else if(nCostTableValue == IP_CONST_DAMAGEBONUS_3d6) return 35; // Holy Power + else return -2; + break; + } + case IP_CONST_ALIGNMENTGROUP_GOOD: + { + if(nCostTableValue == IP_CONST_DAMAGEBONUS_2d6) return 41; //Unholy + else if(nCostTableValue == IP_CONST_DAMAGEBONUS_3d6) return 42; //Unholy Power + else return -2; + break; + } + default: return -2; break; + } + break; + } + case ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP: + { + switch(nCostTableValue) + { + case IP_CONST_DAMAGEBONUS_2d6: return 26; break; //Bane + case IP_CONST_DAMAGEBONUS_4d6: return 27; break; //Dread + default: return -2; break; + } + break; + } + case ITEM_PROPERTY_KEEN: return 36; break; //Keen + case ITEM_PROPERTY_ON_HIT_PROPERTIES: + { + switch(nSubType) + { + case IP_CONST_ONHIT_SLAYRACE: + { + if(nParam1Value == IP_CONST_RACIALTYPE_UNDEAD) + { + if(nCostTableValue == IP_CONST_ONHIT_SAVEDC_14) return 28; //Disruption + else if(nCostTableValue == 21) return 29; //Mighty Disruption + else return -2; + } + break; + } + case IP_CONST_ONHIT_VORPAL: return 43; break; //Vorpal + case IP_CONST_ONHIT_WOUNDING: return 44; break; //Wounding + } + break; + } + } + } + return -1; +} + +//Hardcoded properties to disallow, avoids many loops through 2das +void DisallowType(object oItem, string sFile, itemproperty ip) +{ + int i; + int nType = GetItemPropertyType(ip); + int nSubType = GetItemPropertySubType(ip); + int nCostTableValue = GetItemPropertyCostTableValue(ip); + int nParam1Value = GetItemPropertyParam1Value(ip); + if(sFile == "craft_armour") + { + switch(nType) + { + /* + case ITEM_PROPERTY_AC_BONUS: + { + } + case ITEM_PROPERTY_BONUS_FEAT: + { + } + case ITEM_PROPERTY_CAST_SPELL: + { + } + */ + case ITEM_PROPERTY_DAMAGE_REDUCTION: + { + for(i = 38; i <= 42; i++) + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, i, 0); + break; + } + case ITEM_PROPERTY_DAMAGE_RESISTANCE: + { + for(i = 20; i <= 23; i++) + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, i, 0); + for(i = 25; i <= 32; i++) + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, i, 0); + for(i = 34; i <= 37; i++) + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, i, 0); + for(i = 51; i <= 54; i++) + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, i, 0); + break; + } + case ITEM_PROPERTY_SPELL_RESISTANCE: + { + for(i = 55; i <= 62; i++) + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, i, 0); + break; + } + case ITEM_PROPERTY_SKILL_BONUS: + { + for(i = 45; i <= 50; i++) + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, i, 0); + break; + } + } + } + else if(sFile == "craft_weapon") + { + switch(nType) + { + /* + case ITEM_PROPERTY_ENHANCEMENT_BONUS: + { + } + */ + case ITEM_PROPERTY_DAMAGE_BONUS: + { + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, 20, 0); + for(i = 29; i <= 32; i++) + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, i, 0); + for(i = 36; i <= 38; i++) + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, i, 0); + break; + } + case ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP: + { + for(i = 22; i <= 25; i++) + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, i, 0); + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, 34, 0); + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, 35, 0); + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, 41, 0); + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, 42, 0); + break; + } + case ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP: + { + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, 25, 0); + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, 26, 0); + break; + } + //case ITEM_PROPERTY_KEEN: array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, 36, 0); break; + case ITEM_PROPERTY_ON_HIT_PROPERTIES: + { + switch(nSubType) + { + case IP_CONST_ONHIT_SLAYRACE: + { + if(nParam1Value == IP_CONST_RACIALTYPE_UNDEAD) + { + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, 28, 0); + array_set_int(oItem, PRC_CRAFT_ITEMPROP_ARRAY, 29, 0); + } + break; + } + /* + case IP_CONST_ONHIT_VORPAL: return 43; break; + case IP_CONST_ONHIT_WOUNDING: return 44; break; + */ + } + break; + } + } + } +} + +//hardcoding of some prereqs +int PrereqSpecialHandling(string sFile, object oItem, int nLine) +{ + int nTemp; + int nBase = GetBaseItemType(oItem); + if(StringToInt(Get2DACache(sFile, "Special", nLine))) + { + if(sFile == "craft_armour") + { //nothing here yet + } + else if(sFile == "craft_weapon") + { + int nDamageType = StringToInt(Get2DACache("baseitems", "WeaponType", nBase)); + int bRangedType = StringToInt(Get2DACache("baseitems", "RangedWeapon", nBase)); + int bRanged = bRangedType;// && (bRangedType != nBase); + switch(nLine) + { + case 28: + case 29: + { + return (!bRanged && ((nDamageType == 2) || (nDamageType == 5))); + break; + } + case 36: + { + return (!bRanged && (nDamageType != 2)); + break; + } + case 43: + { + return (!bRanged && ((nDamageType == 3) || (nDamageType == 4))); + break; + } + } + } + else if(sFile == "craft_wondrous") + { + } + else if(sFile == "craft_golem") + { + } + } + if(sFile == "craft_wondrous") + return nBase == StringToInt(Get2DACache(sFile, "BaseItem", nLine)); + return TRUE; +} + +//Checks and decrements spells based on property to add +int CheckCraftingSpells(object oPC, string sFile, int nLine, int bDecrement = FALSE) +{ + if(GetLevelByClass(CLASS_TYPE_ARTIFICER, oPC)) return TRUE; //artificers roll UMD checks during crafting time + //if(GetLevelByClass(CLASS_TYPE_BATTLESMITH, oPC)) return TRUE; + if(nLine == -1) return FALSE; + string sTemp = Get2DACache(sFile, "Spells", nLine); + if(sTemp == "") + return TRUE; //no prereqs, always true + int nSpellPattern = 0; + int nSpell1, nSpell2, nSpell3, nSpellOR1, nSpellOR2, nSpellOR3; + int bOR = FALSE; + string sSub; + int nLength = GetStringLength(sTemp); + int nPosition; + int nTemp; + int i; + + for(i = 0; i < 7; i++) + { + nPosition = FindSubString(sTemp, "_"); + sSub = (nPosition == -1) ? sTemp : GetStringLeft(sTemp, nPosition); + nLength -= (nPosition + 1); + if(sSub != "*") + { + nTemp = StringToInt(sSub); + nSpellPattern += FloatToInt(pow(2.0, IntToFloat(i))); + switch(i) + { + case 0: + { + nSpell1 = nTemp; + break; + } + case 1: + { + nSpell2 = nTemp; + break; + } + case 2: + { + nSpell3 = nTemp; + break; + } + case 3: + { + nSpellOR1 = nTemp; + break; + } + case 4: + { + nSpellOR2 = nTemp; + break; + } + case 6: + { + nSpellOR3 = nTemp; + break; + } + } + } + sTemp = GetSubString(sTemp, nPosition + 1, nLength); + } + + if (nSpellPattern) + { + // ... Existing code for nSpellPattern & 1 + + if (nSpellPattern & 2) + { + if (!PRCGetHasSpell(nSpell2, oPC)) + { + if (!CheckImbueItem(oPC, nSpell2)) + return FALSE; + } + } + + if (nSpellPattern & 4) + { + if (!PRCGetHasSpell(nSpell3, oPC)) + { + if (!CheckImbueItem(oPC, nSpell3)) + return FALSE; + } + } + + if (nSpellPattern & 8) + { + if (!PRCGetHasSpell(nSpellOR1, oPC)) + { + if (!CheckImbueItem(oPC, nSpellOR1)) + { + if (nSpellPattern & 16) + { + if (!PRCGetHasSpell(nSpellOR2, oPC)) + { + // Warlocks don't get two bites at things. + // if (!CheckImbueItem(oPC, nSpellOR2)) + return FALSE; + } + } + else if (nSpellPattern & 32) // Check for nSpellOR3 + { + if (!PRCGetHasSpell(nSpellOR3, oPC)) + { + // Handle nSpellOR3 missing + return FALSE; + } + } + else + return FALSE; + } + } + } + else if (nSpellPattern & 16) + { + if (!PRCGetHasSpell(nSpellOR2, oPC)) + { + if (!CheckImbueItem(oPC, nSpellOR2)) + return FALSE; + } + // Check for nSpellOR3 + else if (nSpellPattern & 32) + { + if (!PRCGetHasSpell(nSpellOR3, oPC)) + { + // Handle nSpellOR3 missing + return FALSE; + } + } + } + else if (nSpellPattern & 32) // Check for nSpellOR3 alone + { + if (!PRCGetHasSpell(nSpellOR3, oPC)) + { + // Handle nSpellOR3 missing + return FALSE; + } + } + + // ... Existing code for decrementing spells + + } + + return TRUE; +} +/* if(nSpellPattern) + { + if(nSpellPattern & 1) + { + if(sFile == "craft_wondrous") + { + switch(nLine) + { + case 85: + { + bOR = (PRCGetHasSpell(SPELL_DETECT_UNDEAD, oPC) && + PRCGetHasSpell(SPELL_FIREBALL, oPC) && + PRCGetHasSpell(SPELL_FLAME_WEAPON, oPC) && + PRCGetHasSpell(SPELL_LIGHT, oPC) && + PRCGetHasSpell(SPELL_PRISMATIC_SPRAY, oPC) && + PRCGetHasSpell(SPELL_PROTECTION_FROM_ELEMENTS, oPC) && + PRCGetHasSpell(SPELL_WALL_OF_FIRE, oPC)); + if(GetHasFeat(FEAT_IMBUE_ITEM) && bOR == FALSE) + bOR = GetIsSkillSuccessful(oPC, SKILL_USE_MAGIC_DEVICE, 16) && + GetIsSkillSuccessful(oPC, SKILL_USE_MAGIC_DEVICE, 18) && + GetIsSkillSuccessful(oPC, SKILL_USE_MAGIC_DEVICE, 17) && + GetIsSkillSuccessful(oPC, SKILL_USE_MAGIC_DEVICE, 16) && + GetIsSkillSuccessful(oPC, SKILL_USE_MAGIC_DEVICE, 22) && + GetIsSkillSuccessful(oPC, SKILL_USE_MAGIC_DEVICE, 18) && + GetIsSkillSuccessful(oPC, SKILL_USE_MAGIC_DEVICE, 19); + if(bDecrement) + { + PRCDecrementRemainingSpellUses(oPC, SPELL_DETECT_UNDEAD); + PRCDecrementRemainingSpellUses(oPC, SPELL_FIREBALL); + PRCDecrementRemainingSpellUses(oPC, SPELL_FLAME_WEAPON); + PRCDecrementRemainingSpellUses(oPC, SPELL_LIGHT); + PRCDecrementRemainingSpellUses(oPC, SPELL_PRISMATIC_SPRAY); + PRCDecrementRemainingSpellUses(oPC, SPELL_PROTECTION_FROM_ELEMENTS); + PRCDecrementRemainingSpellUses(oPC, SPELL_WALL_OF_FIRE); + } + return bOR; + break; + } + } + } + if(!PRCGetHasSpell(nSpell1, oPC)) + { + if(!CheckImbueItem(oPC, nSpell1)) + return FALSE; + } + } + if(nSpellPattern & 2) + { + if(!PRCGetHasSpell(nSpell2, oPC)) + { + if(!CheckImbueItem(oPC, nSpell2)) + return FALSE; + } + } + if(nSpellPattern & 4) + { + if(!PRCGetHasSpell(nSpell3, oPC)) + { + if(!CheckImbueItem(oPC, nSpell3)) + return FALSE; + } + } + if(nSpellPattern & 8) + { + if(!PRCGetHasSpell(nSpellOR1, oPC)) + { + if(!CheckImbueItem(oPC, nSpellOR1)) + { + if(nSpellPattern & 16) + { + if(!PRCGetHasSpell(nSpellOR2, oPC)) + { + // Warlocks don't get two bites at things. + //if(!CheckImbueItem(oPC, nSpellOR2)) + return FALSE; + } + } + else + return FALSE; + } + } + } + else if(nSpellPattern & 16) + { + if(!PRCGetHasSpell(nSpellOR2, oPC)) + { + if(!CheckImbueItem(oPC, nSpellOR2)) + return FALSE; + } + } + if(bDecrement) + { + if(nSpellPattern & 1) + PRCDecrementRemainingSpellUses(oPC, nSpell1); + if(nSpellPattern & 2) + PRCDecrementRemainingSpellUses(oPC, nSpell2); + if(nSpellPattern & 4) + PRCDecrementRemainingSpellUses(oPC, nSpell3); + if(nSpellPattern & 8) + PRCDecrementRemainingSpellUses(oPC, (bOR) ? nSpellOR2 : nSpellOR1); + else if(nSpellPattern & 16) + PRCDecrementRemainingSpellUses(oPC, nSpellOR2); + } + } + return TRUE; +} */ + +//Checks and decrements power points based on property to add +int CheckCraftingPowerPoints(object oPC, string sFile, int nLine, int bDecrement = FALSE) +{ + if(nLine == -1) return FALSE; + string sTemp = Get2DACache(sFile, "Spells", nLine); + if(sTemp == "") + return TRUE; //no prereqs, always true + int nSpellPattern = 0; + int nSpell1, nSpell2, nSpell3, nSpellOR1, nSpellOR2, nSpellOR3; + int bOR = FALSE; + string sSub; + int nLength = GetStringLength(sTemp); + int nPosition; + int nTemp; + int i; + int nLoss = 0; + + for(i = 0; i < 6; i++) + { + nPosition = FindSubString(sTemp, "_"); + sSub = (nPosition == -1) ? sTemp : GetStringLeft(sTemp, nPosition); + nLength -= (nPosition + 1); + if(sSub != "*") + { + nTemp = StringToInt(sSub); + nSpellPattern += FloatToInt(pow(2.0, IntToFloat(i))); + switch(i) + { + case 0: + { + nSpell1 = nTemp; + break; + } + case 1: + { + nSpell2 = nTemp; + break; + } + case 2: + { + nSpell3 = nTemp; + break; + } + case 3: + { + nSpellOR1 = nTemp; + break; + } + case 4: + { + nSpellOR2 = nTemp; + break; + } + case 6: + { + nSpellOR3 = nTemp; + break; + } + } + } + sTemp = GetSubString(sTemp, nPosition + 1, nLength); + } + if(nSpellPattern) + { + if(nSpellPattern & 1) + { + if(GetHasPower(nSpell1, oPC)) + nLoss += (StringToInt(lookup_spell_innate(nSpell1)) * 2 - 1); + else + return FALSE; + } + if(nSpellPattern & 2) + { + if(GetHasPower(nSpell2, oPC)) + nLoss += (StringToInt(lookup_spell_innate(nSpell2)) * 2 - 1); + else + return FALSE; + } + if(nSpellPattern & 4) + { + if(GetHasPower(nSpell3, oPC)) + nLoss += (StringToInt(lookup_spell_innate(nSpell3)) * 2 - 1); + else + return FALSE; + } + if(nSpellPattern & 8) + { + if(GetHasPower(nSpellOR1, oPC)) + nLoss += (StringToInt(lookup_spell_innate(nSpellOR1)) * 2 - 1); + else if(nSpellPattern & 16) + { + if(GetHasPower(nSpellOR2, oPC)) + nLoss += (StringToInt(lookup_spell_innate(nSpellOR2)) * 2 - 1); + else + return FALSE; + } + else + return FALSE; + } + else if(nSpellPattern & 16) + { + if(GetHasPower(nSpellOR2, oPC)) + nLoss += (StringToInt(lookup_spell_innate(nSpellOR2)) * 2 - 1); + else + return FALSE; + } + } + if(GetCurrentPowerPoints(oPC) < nLoss) + return FALSE; + + if(bDecrement) LosePowerPoints(oPC, nLoss, TRUE); + + return TRUE; +} + +int CheckGolemPrereq(object oPC, int nLine, int bEpic) +{ + if(GetLocalInt(oPC, PRC_CRAFT_TOKEN)) + return TRUE; + int bBreak = FALSE; + int nLevel; + int j = 0; + //replace the arti level check later when PrCs are added + int nCasterLevel = PRCMax(PRCMax(PRCMax(GetLevelByTypeArcane(oPC), GetLevelByTypeDivine(oPC)), GetLevelByClass(CLASS_TYPE_ARTIFICER, oPC) + 2), GetLocalInt(oPC, "InvokerLevel")); + int nManifesterLevel = GetManifesterLevel(oPC); + int nTemp, nLength, nPosition; + int bArtificer = (GetLevelByClass(CLASS_TYPE_ARTIFICER, oPC) > 0); + string sFile = "craft_golem"; + string sPropertyType = Get2DACache(sFile, "CasterType", nLine); + string sTemp, sSub; + int nDC = StringToInt(Get2DACache(sFile, "DC", nLine)); + if(sPropertyType == "M") + nLevel = nCasterLevel; + else if(sPropertyType == "P") + nLevel = nManifesterLevel; + else + nLevel = PRCMax(nCasterLevel, nManifesterLevel); + if(!bEpic && Get2DACache(sFile, "Epic", nLine) == "1") + return FALSE; + else if(nLevel < StringToInt(Get2DACache(sFile, "Level", nLine))) + return FALSE; + else + { + if( + (sPropertyType == "M") && + !CheckCraftingSpells(oPC, sFile, nLine) + ) + return FALSE; + if( + (sPropertyType == "P") && + !CheckCraftingPowerPoints(oPC, sFile, nLine) + ) + return FALSE; + sTemp = Get2DACache(sFile, "Skills", nLine); + if(sTemp == "") + bBreak = TRUE; + nLength = GetStringLength(sTemp); + for(j = 0; j < 2; j++) + { + if(bBreak) + break; + nPosition = FindSubString(sTemp, "_"); + sSub = (nPosition == -1) ? sTemp : GetStringLeft(sTemp, nPosition); + nLength -= (nPosition + 1); + if(sSub == "*") + nTemp = -1; + else + nTemp = StringToInt(sSub); + if(nTemp != -1 && !bArtificer) + { + if(!GetPRCIsSkillSuccessful(oPC, nTemp, nDC)) + return FALSE; + } + sTemp = GetSubString(sTemp, nPosition + 1, nLength); + } + sTemp = Get2DACache(sFile, "Skills", nLine); + } + return TRUE; +} + +int CheckPrereq(object oPC, int nLine, int bEpic, string sFile, struct itemvars strTemp) +{ + if(GetLocalInt(oPC, PRC_CRAFT_TOKEN)) + return TRUE; + int bBreak = FALSE; + int nLevel; + int j = 0; + //replace the arti level check later when PrCs are added + int nCasterLevel = PRCMax(PRCMax(PRCMax(GetLevelByTypeArcane(oPC), GetLevelByTypeDivine(oPC)), GetLevelByClass(CLASS_TYPE_ARTIFICER, oPC) + 2), GetLocalInt(oPC, "InvokerLevel")); + nCasterLevel += GetLevelByClass(CLASS_TYPE_BATTLESMITH) * 3; + nCasterLevel += GetLevelByClass(CLASS_TYPE_IRONSOUL_FORGEMASTER) * 3; + int nManifesterLevel = GetManifesterLevel(oPC); + int nTemp, nLength, nPosition; + int bArtificer = (GetLevelByClass(CLASS_TYPE_ARTIFICER, oPC) > 0); + string sPropertyType = Get2DACache(sFile, "PropertyType", nLine); + string sTemp, sSub; + if(sPropertyType == "M") + nLevel = nCasterLevel; + else if(sPropertyType == "P") + nLevel = nManifesterLevel; + else + nLevel = PRCMax(nCasterLevel, nManifesterLevel); + + if (DEBUG) DoDebug("CheckPrereq: "+GetName(oPC)+" nLevel "+IntToString(nLevel)+" PropType "+sPropertyType+" Epic "+IntToString(bEpic)+" sFile "+sFile); + + if(!bEpic && Get2DACache(sFile, "Epic", nLine) == "1") + { + if (DEBUG) DoDebug("CheckPrereq Failed Epic"); + return FALSE; + } + else if(nLevel < StringToInt(Get2DACache(sFile, "Level", nLine))) + { + if (DEBUG) DoDebug("CheckPrereq Failed Level"); + return FALSE; + } + else if(!bEpic && ((StringToInt(Get2DACache(sFile, "Enhancement", nLine)) + strTemp.enhancement) > 10)) + { + if (DEBUG) DoDebug("CheckPrereq Failed Enhancement"); + return FALSE; + } + else + { + if( + (sPropertyType == "M") && !CheckCraftingSpells(oPC, sFile, nLine)) + { + if (DEBUG) DoDebug("CheckPrereq Failed Crafting Spells"); + return FALSE; + } + if((sPropertyType == "P") && !CheckCraftingPowerPoints(oPC, sFile, nLine)) + { + if (DEBUG) DoDebug("CheckPrereq Failed Crafting Powers"); + return FALSE; + } + + sTemp = Get2DACache(sFile, "PrereqMisc", nLine); + if(sTemp == "") + bBreak = TRUE; + nLength = GetStringLength(sTemp); + for(j = 0; j < 5; j++) + { + if(bBreak) + break; + nPosition = FindSubString(sTemp, "_"); + sSub = (nPosition == -1) ? sTemp : GetStringLeft(sTemp, nPosition); + nLength -= (nPosition + 1); + if(sSub == "*") + nTemp = -1; + else + nTemp = StringToInt(sSub); + switch(j) + { + case 0: + { + if(nTemp != -1 && MyPRCGetRacialType(oPC) != nTemp && !bArtificer) + { + if (DEBUG) DoDebug("CheckPrereq Failed Racial Type"); + return FALSE; + } + break; + } + case 1: + { + if(nTemp != -1 && !GetHasFeat(nTemp, oPC)) //artificer can't emulate feat requirements + { + if (DEBUG) DoDebug("CheckPrereq Failed Feat"); + return FALSE; + } + break; + } + case 2: + { + if(((sSub == "G" && GetAlignmentGoodEvil(oPC) != ALIGNMENT_GOOD) || + (sSub == "E" && GetAlignmentGoodEvil(oPC) != ALIGNMENT_EVIL) || + (sSub == "N" && GetAlignmentGoodEvil(oPC) != ALIGNMENT_NEUTRAL)) && + !bArtificer) + { + if (DEBUG) DoDebug("CheckPrereq Failed Alignment G/E"); + return FALSE; + } + break; + } + case 3: + { + if(((sSub == "L" && GetAlignmentLawChaos(oPC) != ALIGNMENT_LAWFUL) || + (sSub == "C" && GetAlignmentLawChaos(oPC) != ALIGNMENT_CHAOTIC) || + (sSub == "N" && GetAlignmentLawChaos(oPC) != ALIGNMENT_NEUTRAL)) && + !bArtificer) + { + if (DEBUG) DoDebug("CheckPrereq Failed Alignment L/C"); + return FALSE; + } + break; + } + case 4: + { + if(nTemp != -1 && !GetLevelByClass(nTemp, oPC) && !bArtificer) + { + if (DEBUG) DoDebug("CheckPrereq Failed Class"); + return FALSE; + } + break; + } + } + sTemp = GetSubString(sTemp, nPosition + 1, nLength); + } + sTemp = Get2DACache(sFile, "Skill", nLine); + if(sTemp != "" && (GetSkillRank(StringToInt(sTemp), oPC) < StringToInt(Get2DACache(sFile, "SkillRanks", nLine)))) + { + if (DEBUG) DoDebug("CheckPrereq Failed Skill"); + return FALSE; + } + } + return TRUE; +} + +//Returns a struct containing enhancement and additional cost values, don't bother with array when bSet == 0 +struct itemvars GetItemVars(object oPC, object oItem, string sFile, int bEpic = 0, int bSet = 0) +{ + struct itemvars strTemp; + int i, bBreak, nTemp; + int j, k, bEnhanced, count; + int nEnhancement; + int nSpellPattern; + int nSpell1, nSpell2, nSpell3, nSpellOR1, nSpellOR2; + int nCasterLevel = PRCMax(GetLevelByTypeArcane(oPC), GetLevelByTypeDivine(oPC)); + int nManifesterLevel = GetManifesterLevel(oPC); + int nLevel; + int nFileEnd = PRCGetFileEnd(sFile); + int nRace = MyPRCGetRacialType(oPC); + int nFeat = GetCraftingFeat(oItem); + int bArmsArmour = nFeat == FEAT_CRAFT_ARMS_ARMOR; + string sPropertyType; + strTemp.item = oItem; + string sSub; + int nLength; + int nPosition; + if(bSet) + { + if(array_exists(oPC, PRC_CRAFT_ITEMPROP_ARRAY)) + array_delete(oPC, PRC_CRAFT_ITEMPROP_ARRAY); + array_create(oPC, PRC_CRAFT_ITEMPROP_ARRAY); + //Setup + for(i = 0; i <= nFileEnd; i++) + { + if(!GetPRCSwitch("PRC_CRAFT_DISABLE_" + sFile + "_" + IntToString(i)) && PrereqSpecialHandling(sFile, oItem, i)) + array_set_int(oPC, PRC_CRAFT_ITEMPROP_ARRAY, i, 1); + } + if(bArmsArmour) + { + int nBase = GetBaseItemType(oItem); + int bRangedType = StringToInt(Get2DACache("baseitems", "RangedWeapon", nBase)); + if(bRangedType && (bRangedType != nBase)) + { //disallowed because ranged weapons can't have onhit + array_set_int(oPC, PRC_CRAFT_ITEMPROP_ARRAY, 22, 0); + array_set_int(oPC, PRC_CRAFT_ITEMPROP_ARRAY, 24, 0); + array_set_int(oPC, PRC_CRAFT_ITEMPROP_ARRAY, 26, 0); + array_set_int(oPC, PRC_CRAFT_ITEMPROP_ARRAY, 34, 0); + array_set_int(oPC, PRC_CRAFT_ITEMPROP_ARRAY, 40, 0); + array_set_int(oPC, PRC_CRAFT_ITEMPROP_ARRAY, 42, 0); + } + } + } + if(bArmsArmour) + { + itemproperty ip = GetFirstItemProperty(oItem); + if(DEBUG) DoDebug("GetItemVars: " + GetName(oItem) + ", before itemprop loop"); + //Checking itemprops + count = 0; + while(GetIsItemPropertyValid(ip)) + { //assumes no duplicated enhancement itemprops + k = Get2DALineFromItemprop(sFile, ip, oItem); //is causing TMI with armour with skill props + count++; + if(DEBUG) DoDebug("GetItemVars: itemprop number " + IntToString(count) + + " " + IntToString(GetItemPropertyType(ip)) + + " " + IntToString(GetItemPropertySubType(ip)) + + " " + IntToString(GetItemPropertyCostTableValue(ip)) + + " " + IntToString(GetItemPropertyParam1Value(ip)) + ); + + if(k >= 0) + { + if(k < 20) bEnhanced = TRUE; + if(bSet) + { + for(j = StringToInt(Get2DACache(sFile, "ReplaceLast", k)); j >= 0; j--) + { + array_set_int(oPC, PRC_CRAFT_ITEMPROP_ARRAY, k - j, 0); + } + } + nEnhancement = StringToInt(Get2DACache(sFile, "Enhancement", k)); + strTemp.enhancement += nEnhancement; + if(nEnhancement > 5) strTemp.epic = TRUE; + strTemp.additionalcost += StringToInt(Get2DACache(sFile, "AdditionalCost", k)); + + if(DEBUG) + { + sPropertyType = GetStringByStrRef(StringToInt(Get2DACache(sFile, "Name", k))); + if(sPropertyType != "") + DoDebug("GetItemVars: " + sPropertyType); + } + } + else if(bSet && k == -2) + { + DisallowType(oPC, sFile, ip); + } + + ip = GetNextItemProperty(oItem); + } + if(strTemp.enhancement > 10) strTemp.epic = TRUE; + if(DEBUG) DoDebug("GetItemVars: " + GetName(oItem) + ", after itemprop loop"); + } + else + { + strTemp.enhancement = 0; + strTemp.additionalcost = 0; + strTemp.epic = FALSE; + } + + if(DEBUG) + { + DoDebug("GetItemVars: " + GetName(oItem) + + ", Enhancement: " + IntToString(strTemp.enhancement) + + ", AdditionalCost: " + IntToString(strTemp.additionalcost)); + } + if(!bSet) return strTemp; //don't bother with array + + if(!bEpic && strTemp.epic) + { //attempting to craft epic item without epic crafting feat, fails + for(i = 0; i <= nFileEnd; i++) + array_set_int(oPC, PRC_CRAFT_ITEMPROP_ARRAY, i, 0); + return strTemp; + } + if(!bEnhanced && bArmsArmour) + { //no enhancement value, cannot add more itemprops, stop right there + array_set_int(oPC, PRC_CRAFT_ITEMPROP_ARRAY, 0, 1); + for(i = 1; i <= nFileEnd; i++) + array_set_int(oPC, PRC_CRAFT_ITEMPROP_ARRAY, i, 0); + return strTemp; + } + string sTemp; + //Checking available spells, epic flag, caster level + if(!GetLocalInt(oPC, PRC_CRAFT_TOKEN)) + { + //moved check to confirmation stage + } + else if(GetPRCSwitch(PRC_DISABLE_CRAFT_EPIC)) + { //disabling epic crafting at npc facilities + for(i = 0; i <= nFileEnd; i++) + { //will skip over properties already disallowed + if(array_get_int(oPC, PRC_CRAFT_ITEMPROP_ARRAY, i) && Get2DACache(sFile, "Epic", i) == "1") + { + array_set_int(oPC, PRC_CRAFT_ITEMPROP_ARRAY, i, 0); + } + } + } + return strTemp; +} + +//Returns an int depending on the weapon type +// returns 0 if not a weapon +int GetWeaponType(int nBaseItem) +{ + switch(nBaseItem) + { + case BASE_ITEM_BASTARDSWORD: + case BASE_ITEM_TWOBLADEDSWORD: + case BASE_ITEM_DIREMACE: + case BASE_ITEM_DOUBLEAXE: + case BASE_ITEM_KAMA: + case BASE_ITEM_KATANA: + case BASE_ITEM_KUKRI: + case BASE_ITEM_SCYTHE: + case BASE_ITEM_SHURIKEN: + case BASE_ITEM_DWARVENWARAXE: + case BASE_ITEM_WHIP: + case BASE_ITEM_ELVEN_LIGHTBLADE: + case BASE_ITEM_ELVEN_THINBLADE: + case BASE_ITEM_ELVEN_COURTBLADE: + case BASE_ITEM_DOUBLE_SCIMITAR: + case BASE_ITEM_NUNCHAKU: + case BASE_ITEM_SAI: + case BASE_ITEM_EAGLE_CLAW: + return PRC_CRAFT_EXOTIC_WEAPON; + break; + + case BASE_ITEM_SHORTSWORD: + case BASE_ITEM_LONGSWORD: + case BASE_ITEM_BATTLEAXE: + case BASE_ITEM_LIGHTFLAIL: + case BASE_ITEM_WARHAMMER: + case BASE_ITEM_LONGBOW: + case BASE_ITEM_HALBERD: + case BASE_ITEM_SHORTBOW: + case BASE_ITEM_GREATSWORD: + case BASE_ITEM_GREATAXE: + case BASE_ITEM_HEAVYFLAIL: + case BASE_ITEM_LIGHTHAMMER: + case BASE_ITEM_HANDAXE: + case BASE_ITEM_RAPIER: + case BASE_ITEM_SCIMITAR: + case BASE_ITEM_THROWINGAXE: + case BASE_ITEM_TRIDENT: + case BASE_ITEM_HEAVY_PICK: + case BASE_ITEM_LIGHT_PICK: + case BASE_ITEM_FALCHION: + case BASE_ITEM_SAP: + case BASE_ITEM_MAUL: + return PRC_CRAFT_MARTIAL_WEAPON; + break; + + case BASE_ITEM_LIGHTMACE: + case BASE_ITEM_DART: + case BASE_ITEM_MORNINGSTAR: + case BASE_ITEM_SHORTSPEAR: + case BASE_ITEM_SICKLE: + case BASE_ITEM_SLING: + case BASE_ITEM_DAGGER: + case BASE_ITEM_LIGHTCROSSBOW: + case BASE_ITEM_HEAVYCROSSBOW: + case BASE_ITEM_CLUB: + case BASE_ITEM_QUARTERSTAFF: + case BASE_ITEM_KATAR: + case BASE_ITEM_HEAVY_MACE: + case BASE_ITEM_GOAD: + return PRC_CRAFT_SIMPLE_WEAPON; + break; + + default: return 0; break; + } + return 0; +} + +void ApplyBonusToStatBasedChecks(object oItem, int nStat, int nBonus) +{ + int i; + string sSkills = "skills"; + string sFilter; + switch(nStat) + { + case ABILITY_STRENGTH: sFilter = "STR"; break; + case ABILITY_DEXTERITY: sFilter = "DEX"; break; + case ABILITY_CONSTITUTION: sFilter = "CON"; break; + case ABILITY_INTELLIGENCE: sFilter = "INT"; break; + case ABILITY_WISDOM: sFilter = "WIS"; break; + case ABILITY_CHARISMA: sFilter = "CHA"; break; + } + for(i = 0; i <= PRCGetFileEnd(sSkills); i++) + { + if(Get2DACache(sSkills, "KeyAbility", i) == sFilter) + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(i, nBonus), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + } +} + +//Hardcoding of some adjustments +itemproperty PropSpecialHandling(object oItem, string sFile, int nLine, int nIndex) +{ + itemproperty ip; + int nTemp; + string sEntry = Get2DACache(sFile, "IP" + IntToString(nIndex), nLine); + if(DEBUG) DoDebug("PropSpecialHandling(object, " + sFile + ", " + IntToString(nLine) + ", " + IntToString(nIndex) + ")"); + if(DEBUG) DoDebug("Get2DACache: IP" + IntToString(nIndex) + ", " + sEntry); + struct ipstruct iptemp = GetIpStructFromString(sEntry); + string sTemp; + + int nBase = GetBaseItemType(oItem); + if(StringToInt(Get2DACache(sFile, "Special", nLine))) + { + if(sFile == "craft_armour") + { + if(iptemp.type == ITEM_PROPERTY_SKILL_BONUS && SkillHasACPenalty(iptemp.subtype)) + iptemp.costtablevalue += GetArmourCheckPenaltyReduction(oItem); + } + else if(sFile == "craft_weapon") + { + switch(nLine) + { + case 26: + case 27: + { + nTemp = GetLocalInt(GetItemPossessor(oItem), PRC_CRAFT_SPECIAL_BANE_RACE); + if(nIndex == 1) + { + iptemp.subtype = nTemp; + nTemp = StringToInt(Get2DACache("baseitems", "WeaponType", nBase)); + switch(nTemp) + { + case 1: iptemp.param1value = IP_CONST_DAMAGETYPE_PIERCING; break; + case 2: + case 5: iptemp.param1value = IP_CONST_DAMAGETYPE_BLUDGEONING; break; + case 3: + case 4: iptemp.param1value = IP_CONST_DAMAGETYPE_SLASHING; break; + } + } + else if(nIndex == 2) + { + iptemp.subtype = nTemp; + iptemp.costtablevalue += IPGetWeaponEnhancementBonus(oItem); + if(iptemp.costtablevalue > 20) + iptemp.costtablevalue = 20; + } + else if(nIndex == 3) + iptemp.param1value = nTemp; + break; + } + } + if(iptemp.type == ITEM_PROPERTY_ENHANCEMENT_BONUS && + StringToInt(Get2DACache("prc_craft_gen_it", "Type", nBase)) == PRC_CRAFT_ITEM_TYPE_AMMO) + { + iptemp.type = ITEM_PROPERTY_DAMAGE_BONUS; + iptemp.subtype = (nBase == BASE_ITEM_BULLET) ? DAMAGE_TYPE_BLUDGEONING : DAMAGE_TYPE_PIERCING; + } + } + } + if(DEBUG) DoDebug("Reconstructed: IP" + IntToString(nIndex) + ", " + IntToString(iptemp.type)+"_"+IntToString(iptemp.subtype)+"_"+IntToString(iptemp.costtablevalue)+"_"+IntToString(iptemp.param1value)); + return ConstructIP(iptemp.type, iptemp.subtype, iptemp.costtablevalue, iptemp.param1value); +} + +void ApplyItemProps(object oItem, string sFile, int nLine) +{ + int i; + itemproperty ip; + if(StringToInt(Get2DACache(sFile, "Special", nLine))) + { + if(sFile == "craft_wondrous") + { + switch(nLine) + { + case 43: + { + ApplyBonusToStatBasedChecks(oItem, ABILITY_CHARISMA, 3); + SetName(oItem, GetStringByStrRef(StringToInt(Get2DACache(sFile, "Name", nLine)))); + return; + break; + } + case 85: //helm of brilliance + case 91: //necklace of fireballs + case 92: + case 93: + case 94: + case 95: + case 96: + case 97: SetItemCharges(oItem, 50); break; + case 108: IPSafeAddItemProperty(oItem, ItemPropertyLimitUseBySAlign(IP_CONST_ALIGNMENT_TN), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); break; + case 116: + { + object oCopy = CopyObject(oItem, GetLocation(oItem), GetItemPossessor(oItem), "prc_turnphyl"); + DestroyObject(oItem); + oItem = oCopy; + } + } + } + } + i = 1; //FUGLY HACK: i doesn't initialise properly in for loop + for(i = 1; i <= 6; i++) + { + if(DEBUG) DoDebug("ApplyItemProps: i = " + IntToString(i)); + ip = PropSpecialHandling(oItem, sFile, nLine, i); + if(GetIsItemPropertyValid(ip)) + { + if(DEBUG) DoDebug(GetItemPropertyString(ip)); + IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + } + else + break; //no more itemprops, no gaps, assuming no errors + } + if(sFile != "craft_weapon" && sFile != "craft_armour") + SetName(oItem, GetStringByStrRef(StringToInt(Get2DACache(sFile, "Name", nLine)))); +} + +//Partly ripped off the lexicon :P +int GetItemBaseAC(object oItem) +{ + int nAC = -1; + int nBase = GetBaseItemType(oItem); + int bID = GetIdentified(oItem); + if(bID) SetIdentified(oItem, FALSE); + + if(nBase == BASE_ITEM_ARMOR) + { + switch(GetGoldPieceValue(oItem)) + { + case 1: nAC = 0; break; // None + case 5: nAC = 1; break; // Padded + case 10: nAC = 2; break; // Leather + case 15: nAC = 3; break; // Studded Leather / Hide + case 100: nAC = 4; break; // Chain Shirt / Scale Mail + case 150: nAC = 5; break; // Chainmail / Breastplate + case 200: nAC = 6; break; // Splint Mail / Banded Mail + case 600: nAC = 7; break; // Half-Plate + case 1500: nAC = 8; break; // Full Plate + } + } + else if(nBase == BASE_ITEM_SMALLSHIELD) + nAC = 1; + else if(nBase == BASE_ITEM_LARGESHIELD) + nAC = 2; + else if(nBase == BASE_ITEM_TOWERSHIELD) + nAC = 3; + + if(bID) SetIdentified(oItem, TRUE); + return nAC; +} + +int GetItemArmourCheckPenalty(object oItem) +{ + int nBase = GetBaseItemType(oItem); + int nPenalty = 0; + if(nBase == BASE_ITEM_SMALLSHIELD) + nPenalty = 1; + else if(nBase == BASE_ITEM_LARGESHIELD) + nPenalty = 2; + else if(nBase == BASE_ITEM_TOWERSHIELD) + nPenalty = 10; + else if(nBase == BASE_ITEM_ARMOR) + { + switch(GetItemBaseAC(oItem)) + { + case 3: nPenalty = 1; break; + case 4: nPenalty = 2; break; + case 5: nPenalty = 5; break; + case 6: nPenalty = 7; break; + case 7: nPenalty = 7; break; + case 8: nPenalty = 8; break; + } + } + return nPenalty; +} + +string GetCrafting2DA(object oItem) +{ + int nBase = GetBaseItemType(oItem); + int nMaterial = StringToInt(GetStringLeft(GetTag(oItem), 3)); + if(((nBase == BASE_ITEM_ARMOR) || + (nBase == BASE_ITEM_SMALLSHIELD) || + (nBase == BASE_ITEM_LARGESHIELD) || + (nBase == BASE_ITEM_TOWERSHIELD)) + ) + { + if((GetItemBaseAC(oItem) == 0) && !(nMaterial & PRC_CRAFT_FLAG_MASTERWORK)) return "craft_wondrous"; + return "craft_armour"; + } + + if(GetWeaponType(nBase) || + (nBase == BASE_ITEM_ARROW) || + (nBase == BASE_ITEM_BOLT) || + (nBase == BASE_ITEM_BULLET) + ) + return "craft_weapon"; + + if(nBase == BASE_ITEM_RING) return "craft_ring"; + + if(((nBase == BASE_ITEM_HELMET) || + (nBase == BASE_ITEM_AMULET) || + (nBase == BASE_ITEM_BELT) || + (nBase == BASE_ITEM_BOOTS) || + (nBase == BASE_ITEM_GLOVES) || + (nBase == BASE_ITEM_BRACER) || + (nBase == BASE_ITEM_CLOAK)) + ) + return "craft_wondrous"; + + //restrict to castspell itemprops? + /* + if(nBase == BASE_ITEM_MAGICROD) return FEAT_CRAFT_ROD; + if(nBase == BASE_ITEM_MAGICSTAFF) return FEAT_CRAFT_STAFF; + if(nBase == BASE_ITEM_MAGICWAND) return FEAT_CRAFT_WAND; + */ + + //bioware crafting, castspell itemprops only + return ""; +} + +int GetCraftingFeat(object oItem) +{ + int nBase = GetBaseItemType(oItem); + int nMaterial = StringToInt(GetStringLeft(GetTag(oItem), 3)); + if(((nBase == BASE_ITEM_ARMOR) || + (nBase == BASE_ITEM_SMALLSHIELD) || + (nBase == BASE_ITEM_LARGESHIELD) || + (nBase == BASE_ITEM_TOWERSHIELD)) || + (GetWeaponType(nBase) || + (nBase == BASE_ITEM_ARROW) || + (nBase == BASE_ITEM_BOLT) || + (nBase == BASE_ITEM_BULLET) + ) + ) + { + if((GetItemBaseAC(oItem) == 0) && !(nMaterial & PRC_CRAFT_FLAG_MASTERWORK)) return FEAT_CRAFT_WONDROUS; + return FEAT_CRAFT_ARMS_ARMOR; + } + + if(nBase == BASE_ITEM_RING) return FEAT_FORGE_RING; + + //routing bioware feats through this convo + if((nBase == BASE_ITEM_MAGICROD) || + (nBase == BASE_ITEM_CRAFTED_ROD) + ) + return FEAT_CRAFT_ROD; + if((nBase == BASE_ITEM_MAGICSTAFF) || + (nBase == BASE_ITEM_CRAFTED_STAFF) + ) + return FEAT_CRAFT_STAFF; + if((nBase == BASE_ITEM_MAGICWAND) || + (nBase == BASE_ITEM_BLANK_WAND) + ) + return FEAT_CRAFT_WAND; + if(nBase == BASE_ITEM_BLANK_POTION) return FEAT_BREW_POTION; + if(nBase == BASE_ITEM_BLANK_SCROLL) return FEAT_SCRIBE_SCROLL; + + if(((nBase == BASE_ITEM_HELMET) || + (nBase == BASE_ITEM_AMULET) || + (nBase == BASE_ITEM_BELT) || + (nBase == BASE_ITEM_BOOTS) || + (nBase == BASE_ITEM_GLOVES) || + (nBase == BASE_ITEM_BRACER) || + (nBase == BASE_ITEM_CLOAK)) + ) + return FEAT_CRAFT_WONDROUS; + + return -1; +} + +int GetEpicCraftingFeat(int nFeat) +{ + switch(nFeat) + { + case FEAT_CRAFT_WONDROUS: return FEAT_CRAFT_EPIC_WONDROUS_ITEM; + case FEAT_CRAFT_CONSTRUCT: + case FEAT_CRAFT_ARMS_ARMOR: return FEAT_CRAFT_EPIC_MAGIC_ARMS_ARMOR; + case FEAT_CRAFT_ROD: return FEAT_CRAFT_EPIC_ROD; + case FEAT_CRAFT_STAFF: return FEAT_CRAFT_EPIC_STAFF; + case FEAT_FORGE_RING: return FEAT_FORGE_EPIC_RING; + } + return -1; +} + +//Returns whether the item can be made of a material +int CheckCraftingMaterial(int nBaseItem, int nMaterial, int nBaseAC = -1) +{ + if(nBaseItem == BASE_ITEM_WHIP || nBaseItem == BASE_ITEM_SAP) return (nMaterial == PRC_CRAFT_MATERIAL_LEATHER); + + if((nBaseItem == BASE_ITEM_SMALLSHIELD) || + (nBaseItem == BASE_ITEM_LARGESHIELD) || + (nBaseItem == BASE_ITEM_TOWERSHIELD) + ) + return ((nMaterial == PRC_CRAFT_MATERIAL_METAL) || (nMaterial == PRC_CRAFT_MATERIAL_WOOD)); + + if(nBaseItem == BASE_ITEM_ARMOR) + { + /* + if(nBaseAC >= 0 && nBaseAC <= 1) return (nMaterial == PRC_CRAFT_MATERIAL_CLOTH); + if(nBaseAC >= 2 && nBaseAC <= 3) return (nMaterial == PRC_CRAFT_MATERIAL_LEATHER); + else return (nMaterial == PRC_CRAFT_MATERIAL_METAL); + */ + return ((nMaterial == PRC_CRAFT_MATERIAL_METAL) || (nMaterial == PRC_CRAFT_MATERIAL_LEATHER)); + } + //since you can't make adamantine weapons at the moment + if((nBaseItem == BASE_ITEM_HEAVYCROSSBOW) || + (nBaseItem == BASE_ITEM_LIGHTCROSSBOW) || + (nBaseItem == BASE_ITEM_LONGBOW) || + (nBaseItem == BASE_ITEM_SHORTBOW) || + (nBaseItem == BASE_ITEM_QUARTERSTAFF) || + (nBaseItem == BASE_ITEM_CLUB) || + (nBaseItem == BASE_ITEM_NUNCHAKU) || //nunchaku + (nBaseItem == BASE_ITEM_SCYTHE) || + (nBaseItem == BASE_ITEM_SHORTSPEAR) || + (nBaseItem == BASE_ITEM_TRIDENT) || + (nBaseItem == BASE_ITEM_HALBERD) || + (nBaseItem == BASE_ITEM_GOAD) || //goad + (nBaseItem == BASE_ITEM_CLUB) + ) + { + return (nMaterial == PRC_CRAFT_MATERIAL_WOOD); + } + //assume stuff is made of metal (most of it is) + return (nMaterial == PRC_CRAFT_MATERIAL_METAL); +} + +//Returns the DC for crafting a particular item +int GetCraftingDC(object oItem) +{ + int nDC = 0; + int nBase = GetBaseItemType(oItem); + int nType = GetWeaponType(nBase); + if(((nBase == BASE_ITEM_ARMOR) || + (nBase == BASE_ITEM_SMALLSHIELD) || + (nBase == BASE_ITEM_LARGESHIELD) || + (nBase == BASE_ITEM_TOWERSHIELD)) + ) + { + nDC = 10 + GetItemBaseAC(oItem); + } + else if(((nBase == BASE_ITEM_HEAVYCROSSBOW) || + (nBase == BASE_ITEM_LIGHTCROSSBOW)) + ) + { + nDC = 15; + } + else if(((nBase == BASE_ITEM_LONGBOW) || + (nBase == BASE_ITEM_SHORTBOW)) + ) + { + nDC = 12; + itemproperty ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_MIGHTY) + { + nDC = 15 + 2 * GetItemPropertyCostTableValue(ip); + break; + } + ip = GetNextItemProperty(oItem); + } + } + else if(nType == PRC_CRAFT_SIMPLE_WEAPON) + nDC = 12; + else if(nType == PRC_CRAFT_MARTIAL_WEAPON) + nDC = 15; + else if(nType == PRC_CRAFT_EXOTIC_WEAPON) + nDC = 18; + return nDC; +} + +//Applies Masterwork properties to oItem +void MakeMasterwork(object oItem) +{ + if(GetPlotFlag(oItem)) return; //sanity check + int nBase = GetBaseItemType(oItem); + if((nBase == BASE_ITEM_ARMOR) || + (nBase == BASE_ITEM_SMALLSHIELD) || + (nBase == BASE_ITEM_LARGESHIELD) || + (nBase == BASE_ITEM_TOWERSHIELD) + ) + { + //no armour check penalty here + if(GetItemArmourCheckPenalty(oItem) == 0) return; + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_HIDE, 1) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_MOVE_SILENTLY, 1), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_PICK_POCKET, 1) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_SET_TRAP, 1) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_TUMBLE, 1) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_JUMP, 1) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + } + else if(GetWeaponType(nBase)) + { + IPSafeAddItemProperty(oItem, ItemPropertyAttackBonus(1), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING); + } + else if(StringToInt(Get2DACache("prc_craft_gen_it", "Type", nBase)) == PRC_CRAFT_ITEM_TYPE_AMMO) + { + /* + int nDamageType = (nBase == BASE_ITEM_BULLET) ? DAMAGE_TYPE_BLUDGEONING : DAMAGE_TYPE_PIERCING; + itemproperty ip1 = ItemPropertyDamageBonus(nDamageType, IP_CONST_DAMAGEBONUS_1); + */ + IPSafeAddItemProperty(oItem, ItemPropertyAttackBonus(1), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING); + } + else + return; +} + +void MakeAdamantine(object oItem) +{ + if(GetPlotFlag(oItem)) return; //sanity check + if(GetBaseItemType(oItem) == BASE_ITEM_ARMOR) + { + int nBonus = 0; + switch(GetItemBaseAC(oItem)) + { + case 1: + case 2: + case 3: nBonus = IP_CONST_DAMAGERESIST_1; break; + case 4: + case 5: nBonus = IP_CONST_DAMAGERESIST_2; break; + case 6: + case 7: + case 8: nBonus = IP_CONST_DAMAGERESIST_3; break; + } + if(nBonus) + { + IPSafeAddItemProperty(oItem, ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_BLUDGEONING, nBonus), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_PIERCING, nBonus) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SLASHING, nBonus) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + } + } +} + +void MakeDarkwood(object oItem) +{ + if(GetPlotFlag(oItem)) return; //sanity check + IPSafeAddItemProperty(oItem, ItemPropertyWeightReduction(IP_CONST_REDUCEDWEIGHT_50_PERCENT), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING); + int nBase = GetBaseItemType(oItem); + if(((nBase == BASE_ITEM_SMALLSHIELD) || + (nBase == BASE_ITEM_LARGESHIELD) || + (nBase == BASE_ITEM_TOWERSHIELD)) + ) + { + int nBonus = 2; + if(nBase == BASE_ITEM_SMALLSHIELD) nBonus = 1; + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_HIDE, nBonus) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_MOVE_SILENTLY, nBonus), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_PICK_POCKET, nBonus) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_SET_TRAP, nBonus) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_TUMBLE, nBonus) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_JUMP, nBonus) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + } +} + +void MakeDragonhide(object oItem) +{ + //Does nothing so far +} + +void MakeMithral(object oItem) +{ + if(GetPlotFlag(oItem)) return; //sanity check + IPSafeAddItemProperty(oItem, ItemPropertyWeightReduction(IP_CONST_REDUCEDWEIGHT_50_PERCENT), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING); + int nBase = GetBaseItemType(oItem); + if(((nBase == BASE_ITEM_ARMOR) || + (nBase == BASE_ITEM_SMALLSHIELD) || + (nBase == BASE_ITEM_LARGESHIELD) || + (nBase == BASE_ITEM_TOWERSHIELD)) + ) + { + int nBonus = 3; + int nPenalty = GetItemArmourCheckPenalty(oItem); + if(nBonus > nPenalty) nBonus = nPenalty; + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_HIDE, nBonus) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_MOVE_SILENTLY, nBonus), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_PICK_POCKET, nBonus) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_SET_TRAP, nBonus) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_TUMBLE, nBonus) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_JUMP, nBonus) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_BALANCE, nBonus) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_CLIMB, nBonus) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + if(GetItemBaseAC(oItem) == 1) + IPSafeAddItemProperty(oItem, ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_5_PERCENT), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + else + IPSafeAddItemProperty(oItem, ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_10_PERCENT), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + } +} + +void MakeColdIron(object oItem) +{ + //Does nothing so far +} + +void MakeSilver(object oItem) +{ + //Does nothing so far +} + +void MakeMundaneCrystal(object oItem) +{ + //Does nothing so far +} + +void MakeDeepCrystal(object oItem) +{ + //Does nothing so far +} + +//Creates an item on oOwner, from the baseitemtype and base AC (for armour) +object CreateStandardItem(object oOwner, int nBaseItemType, int nBaseAC = -1) +{ + string sResRef = Get2DACache("prc_craft_gen_it", "Blueprint", nBaseItemType); + int nStackSize = StringToInt(Get2DACache("baseitems", "ILRStackSize", nBaseItemType)); + if(nBaseItemType == BASE_ITEM_ARMOR) + { + switch(nBaseAC) + { + case 0: sResRef = "x2_cloth008"; break; + case 1: sResRef = "nw_aarcl009"; break; + case 2: sResRef = "nw_aarcl001"; break; + case 3: sResRef = "nw_aarcl002"; break; + case 4: sResRef = "nw_aarcl012"; break; + case 5: sResRef = "nw_aarcl004"; break; + case 6: sResRef = "nw_aarcl005"; break; + case 7: sResRef = "nw_aarcl006"; break; + case 8: sResRef = "nw_aarcl007"; break; + } + } + string sTag; + if (GetLevelByClass(CLASS_TYPE_IRONSOUL_FORGEMASTER, oOwner)) sTag = GetName(oOwner); + + return CreateItemOnObject(sResRef, oOwner, nStackSize, sTag); +} + +int GetEnhancementBaseCost(object oItem) +{ + string sFile = GetCrafting2DA(oItem); + if(sFile == "craft_armour") return 1000; + if(sFile == "craft_weapon") return 2000; + + return 0; +} + +//returns pnp market price of an item +int GetPnPItemCost(struct itemvars strTemp, int bIncludeBaseCost = TRUE) +{ + int nMaterial, nEnhancement; + int nAdd = 0, nTemp = 0; + int nType = GetBaseItemType(strTemp.item); + + if(DEBUG) + { + DoDebug("nType: " + IntToString(nType)); + FloatingTextStringOnCreature( "nType = " + IntToString(nType), GetFirstPC()); + } + if(bIncludeBaseCost) + { + SetIdentified(strTemp.item, FALSE); + int nMultiplyer = StringToInt(Get2DACache("baseitems", "ItemMultiplier", nType)); + if(nMultiplyer < 1) nMultiplyer = 1; + if(DEBUG) + { + DoDebug("nMultiplyer: " + IntToString(nMultiplyer)); + FloatingTextStringOnCreature( "nMultiplyer = " + IntToString(nMultiplyer), GetFirstPC()); + } + + nTemp = GetGoldPieceValue(strTemp.item) / nMultiplyer; + if(DEBUG) + { + DoDebug("nTemp: " + IntToString(nTemp)); + FloatingTextStringOnCreature( "nTemp = " + IntToString(nTemp), GetFirstPC()); + } + + SetIdentified(strTemp.item, TRUE); + int nFlag = StringToInt(Get2DACache("prc_craft_gen_it", "Type", nType)); + string sMaterial = GetStringLeft(GetTag(strTemp.item), 3); + nMaterial = StringToInt(sMaterial); + if(GetMaterialString(nMaterial) != sMaterial) + nMaterial = 0; + if(nMaterial & PRC_CRAFT_FLAG_MASTERWORK) + { + switch(nFlag) + { + case PRC_CRAFT_ITEM_TYPE_WEAPON: nAdd += 300; break; + case PRC_CRAFT_ITEM_TYPE_ARMOUR: nAdd += 150; break; + case PRC_CRAFT_ITEM_TYPE_SHIELD: nAdd += 150; break; + case PRC_CRAFT_ITEM_TYPE_AMMO: nAdd += 594; break; + } + } + if(nMaterial & PRC_CRAFT_FLAG_ADAMANTINE) + { + switch(GetItemBaseAC(strTemp.item)) + { + case 1: + case 2: + case 3: nAdd += 5000; break; + case 4: + case 5: nAdd += 10000; break; + case 6: + case 7: + case 8: nAdd += 15000; break; + } + } + if(nMaterial & PRC_CRAFT_FLAG_DARKWOOD) + { + nAdd += StringToInt(Get2DACache("baseitems", "TenthLBS", nType)); + } + if(nMaterial & PRC_CRAFT_FLAG_DRAGONHIDE) + { + nAdd += nAdd + nTemp; + } + if(nMaterial & PRC_CRAFT_FLAG_MITHRAL) + { + if(nType == BASE_ITEM_ARMOR) + { + switch(GetItemBaseAC(strTemp.item)) + { + case 1: + case 2: + case 3: nAdd += 1000; break; + case 4: + case 5: nAdd += 4000; break; + case 6: + case 7: + case 8: nAdd += 9000; break; + } + } + else + { + switch(nFlag) + { + case PRC_CRAFT_ITEM_TYPE_WEAPON: nAdd += 50 * StringToInt(Get2DACache("baseitems", "TenthLBS", nType)); break; + case PRC_CRAFT_ITEM_TYPE_SHIELD: nAdd += 1000; break; + } + } + } + if(nMaterial & PRC_CRAFT_FLAG_COLD_IRON) + { + //not implemented + } + if(nMaterial & PRC_CRAFT_FLAG_ALCHEMICAL_SILVER) + { + //not implemented + } + if(nMaterial & PRC_CRAFT_FLAG_MUNDANE_CRYSTAL) + { + //not implemented + } + if(nMaterial & PRC_CRAFT_FLAG_DEEP_CRYSTAL) + { + //not implemented + } + if(((nType == BASE_ITEM_LONGBOW) || + (nType == BASE_ITEM_SHORTBOW)) + ) + { + int nCompMult = (nType == BASE_ITEM_LONGBOW) ? 100 : 75; + itemproperty ip = GetFirstItemProperty(strTemp.item); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_MIGHTY) + { + nAdd += GetItemPropertyCostTableValue(ip) * nCompMult; + break; + } + ip = GetNextItemProperty(strTemp.item); + } + } + } + if(DEBUG) + { + DoDebug("nAdd: " + IntToString(nAdd)); + FloatingTextStringOnCreature( "nAdd = " + IntToString(nAdd), GetFirstPC()); + } + nTemp += nAdd; + nEnhancement = GetEnhancementBaseCost(strTemp.item) * strTemp.enhancement * strTemp.enhancement; + if(strTemp.epic) nEnhancement *= 10; + nTemp += nEnhancement + strTemp.additionalcost; + + if(StringToInt(Get2DACache("baseitems", "Stacking", nType)) > 1) + nTemp = FloatToInt(IntToFloat(nTemp) * IntToFloat(GetItemStackSize(strTemp.item))/ 50.0); + if(nTemp < 1) nTemp = 1; + + return nTemp; +} + +struct golemhds GetGolemHDsFromString(string sHD) +{ + struct golemhds hds; + //initialise variables + string sTemp = sHD; + string sSub; + int nLength = GetStringLength(sTemp); + int nPosition; + int nTemp; + int i; + + for(i = 0; i < 3; i++) + { + nPosition = FindSubString(sTemp, "_"); + sSub = (nPosition == -1) ? sTemp : GetStringLeft(sTemp, nPosition); + nLength -= (nPosition + 1); + if(sSub == "*") + nTemp = -1; + else + nTemp = StringToInt(sSub); + switch(i) + { + case 0: hds.base = nTemp; break; + case 1: hds.max1 = nTemp; break; + case 2: hds.max2 = nTemp; break; + } + sTemp = GetSubString(sTemp, nPosition + 1, nLength); + } + return hds; +} + +//returns market price in gp, +int GetPnPGolemCost(int nLine, int nHD, int nCosttype) +{ + int nCost = StringToInt(Get2DACache("craft_golem", "MarketPrice", nLine)); + struct golemhds ghds = GetGolemHDsFromString(Get2DACache("craft_golem", "HD", nLine)); + + + //sanity checking + if(nHD < ghds.base) nHD = ghds.base; + if(nHD > ghds.max2) nHD = ghds.max2; + + if(nHD > ghds.base) + { + nCost += (ghds.base - nHD) * 5000; + if(nHD > ghds.max1) + nCost += 50000; + } + + if(nCosttype == CRAFT_COST_TYPE_XP) + { + if(StringToInt(Get2DACache("craft_golem", "Epic", nLine))) + { + nCost /= 100; + } + else + { + nCost /= 25; + } + } + else if(nCosttype == CRAFT_COST_TYPE_CRAFTING) + { + nCost /= 2; + } + + if(nCosttype != CRAFT_COST_TYPE_XP) + nCost += StringToInt(Get2DACache("craft_golem", "SpecialCost", nLine)); + + return nCost; +} + +//Creates an item for oPC of nBaseItemType, made of nMaterial +object MakeMyItem(object oPC, int nBaseItemType, int nBaseAC = -1, int nMaterial = 0, int nMighty = -1) +{ + object oTemp = CreateStandardItem(GetTempCraftChest(), nBaseItemType, nBaseAC); + string sMaterial = GetMaterialString(nMaterial); + string sTag = sMaterial + GetUniqueID() + PRC_CRAFT_UID_SUFFIX; + object oChest = GetCraftChest(); + while(GetIsObjectValid(GetItemPossessedBy(oChest, sTag)))//make sure there aren't any tag conflicts + sTag = sMaterial + GetUniqueID() + PRC_CRAFT_UID_SUFFIX; + if (GetLevelByClass(CLASS_TYPE_IRONSOUL_FORGEMASTER, oPC)) sTag = GetName(oPC); + object oNew = CopyObject(oTemp, GetLocation(oChest), oChest, sTag); + string sPrefix = ""; + if(nMighty > 0) + { + if(nMighty > 20) nMighty = 20; + IPSafeAddItemProperty(oNew, ItemPropertyMaxRangeStrengthMod(nMighty), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + IPSafeAddItemProperty(oNew, ItemPropertyLimitUseByAbility(ABILITY_STRENGTH, ((nMighty * 2) + 10)), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); + } + DestroyObject(oTemp, 0.1); + if(nMaterial & PRC_CRAFT_FLAG_MASTERWORK) //name prefix will be overridden by materials + { + sPrefix = "Masterwork "; + MakeMasterwork(oNew); + } + if(nMaterial & PRC_CRAFT_FLAG_ADAMANTINE) //assumes only 1 material at a time + { + sPrefix = "Adamantine "; + MakeAdamantine(oNew); + } + if(nMaterial & PRC_CRAFT_FLAG_DARKWOOD) + { + sPrefix = "Darkwood "; + MakeDarkwood(oNew); + } + if(nMaterial & PRC_CRAFT_FLAG_DRAGONHIDE) + { + sPrefix = "Dragonhide "; + MakeDragonhide(oNew); + } + if(nMaterial & PRC_CRAFT_FLAG_MITHRAL) + { + sPrefix = "Mithral "; + MakeMithral(oNew); + } + if(nMaterial & PRC_CRAFT_FLAG_COLD_IRON) + { + sPrefix = "Cold Iron "; + MakeColdIron(oNew); + } + if(nMaterial & PRC_CRAFT_FLAG_ALCHEMICAL_SILVER) + { + sPrefix = "Silver "; + MakeSilver(oNew); + } + if(nMaterial & PRC_CRAFT_FLAG_MUNDANE_CRYSTAL) + { + sPrefix = "Crystal "; + MakeMundaneCrystal(oNew); + } + if(nMaterial & PRC_CRAFT_FLAG_DEEP_CRYSTAL) + { + sPrefix = "Deep Crystal "; + MakeDeepCrystal(oNew); + } + if(nMighty > 0) sPrefix += "Composite "; + + if((nBaseItemType == BASE_ITEM_ARMOR) && (nBaseAC == 0)) + SetName(oNew, "Robe"); + SetName(oNew, sPrefix + GetName(oNew)); + + return oNew; +} + +//Adds action highlight to a conversation string +string ActionString(string sString) +{ + return "" + sString + ""; +} + +//Inserts a space at the end of a string if the string +// is not empty +string InsertSpaceAfterString(string sString) +{ + if(sString != "") + return sString + " "; + else return ""; +} + +string GetItemPropertyString(itemproperty ip) +{ + int nType = GetItemPropertyType(ip); + if(nType == -1) return ""; + int nSubType = GetItemPropertySubType(ip); + int nCostTable = GetItemPropertyCostTable(ip); + int nCostTableValue = GetItemPropertyCostTableValue(ip); + int nParam1 = GetItemPropertyParam1(ip); + int nParam1Value = GetItemPropertyParam1Value(ip); + string sDesc = InsertSpaceAfterString( + GetStringByStrRef(StringToInt(Get2DACache("itempropdef", "GameStrRef", nType))) + ); + string sSubType = Get2DACache("itempropdef", "SubTypeResRef", nType); + sSubType = Get2DACache(sSubType, "Name", nSubType); + if(sSubType != "") + sDesc += InsertSpaceAfterString(GetStringByStrRef(StringToInt(sSubType))); + string sCostTable = Get2DACache("itempropdef", "CostTableResRef", nType); + sCostTable = Get2DACache("iprp_costtable", "Name", StringToInt(sCostTable)); + sCostTable = Get2DACache(sCostTable, "Name", nCostTableValue); + if(sCostTable != "") + sDesc += InsertSpaceAfterString(GetStringByStrRef(StringToInt(sCostTable))); + string sParam1; + if(nType == ITEM_PROPERTY_ON_HIT_PROPERTIES) //Param1 depends on subtype + { + sParam1 = Get2DACache(Get2DACache("itempropdef", "SubTypeResRef", nType), "Param1ResRef", nSubType); + } + else + { + sParam1 = Get2DACache("itempropdef", "Param1ResRef", nType); + } + if(sParam1 != "") + { + sDesc += InsertSpaceAfterString(GetStringByStrRef(StringToInt(Get2DACache("iprp_paramtable", "Name", StringToInt(sParam1))))); + sParam1 = Get2DACache("iprp_paramtable", "TableResRef", StringToInt(sParam1)); + sParam1 = Get2DACache(sParam1, "Name", nParam1Value); + if(sParam1 != "") + sDesc += InsertSpaceAfterString(GetStringByStrRef(StringToInt(sParam1))); + } + sDesc += "\n"; + + return sDesc; +} + +//Returns a string describing the item +string ItemStats(object oItem) +{ + string sDesc = GetName(oItem) + + "\n\n" + + GetStringByStrRef(StringToInt(Get2DACache("baseitems", "Name", GetBaseItemType(oItem)))) + + "\n\n"; + + itemproperty ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT) + { + sDesc += GetItemPropertyString(ip); + } + ip = GetNextItemProperty(oItem); + } + return sDesc; +} + +//Returns TRUE if nBaseItem can have nItemProp +int ValidProperty(object oItem, int nItemProp) +{ + int nPropColumn = StringToInt(Get2DACache("baseitems", "PropColumn", GetBaseItemType(oItem))); + string sPropCloumn = ""; + switch(nPropColumn) + { + case 0: sPropCloumn = "0_Melee"; break; + case 1: sPropCloumn = "1_Ranged"; break; + case 2: sPropCloumn = "2_Thrown"; break; + case 3: sPropCloumn = "3_Staves"; break; + case 4: sPropCloumn = "4_Rods"; break; + case 5: sPropCloumn = "5_Ammo"; break; + case 6: sPropCloumn = "6_Arm_Shld"; break; + case 7: sPropCloumn = "7_Helm"; break; + case 8: sPropCloumn = "8_Potions"; break; + case 9: sPropCloumn = "9_Scrolls"; break; + case 10: sPropCloumn = "10_Wands"; break; + case 11: sPropCloumn = "11_Thieves"; break; + case 12: sPropCloumn = "12_TrapKits"; break; + case 13: sPropCloumn = "13_Hide"; break; + case 14: sPropCloumn = "14_Claw"; break; + case 15: sPropCloumn = "15_Misc_Uneq"; break; + case 16: sPropCloumn = "16_Misc"; break; + case 17: sPropCloumn = "17_No_Props"; break; + case 18: sPropCloumn = "18_Containers"; break; + case 19: sPropCloumn = "19_HealerKit"; break; + case 20: sPropCloumn = "20_Torch"; break; + case 21: sPropCloumn = "21_Glove"; break; + } + return(Get2DACache("itemprops", sPropCloumn, nItemProp) == "1"); +} + +//Makes an item property from values - total pain in the arse, need 1 per itemprop +itemproperty ConstructIP(int nType, int nSubTypeValue = 0, int nCostTableValue = 0, int nParam1Value = 0) +{ + itemproperty ip; + switch(nType) + { + case ITEM_PROPERTY_ABILITY_BONUS: return ItemPropertyAbilityBonus(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_AC_BONUS: return ItemPropertyACBonus(nCostTableValue); + case ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP: return ItemPropertyACBonusVsAlign(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE: return ItemPropertyACBonusVsDmgType(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP: return ItemPropertyACBonusVsRace(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_AC_BONUS_VS_SPECIFIC_ALIGNMENT: return ItemPropertyACBonusVsSAlign(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_ENHANCEMENT_BONUS: return ItemPropertyEnhancementBonus(nCostTableValue); + case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP: return ItemPropertyEnhancementBonusVsAlign(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP: return ItemPropertyEnhancementBonusVsRace(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT: return ItemPropertyEnhancementBonusVsSAlign(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER: return ItemPropertyEnhancementPenalty(nCostTableValue); + case ITEM_PROPERTY_BASE_ITEM_WEIGHT_REDUCTION: return ItemPropertyWeightReduction(nCostTableValue); + case ITEM_PROPERTY_BONUS_FEAT: return ItemPropertyBonusFeat(nSubTypeValue); + case ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N: return ItemPropertyBonusLevelSpell(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_CAST_SPELL: return ItemPropertyCastSpell(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_DAMAGE_BONUS: return ItemPropertyDamageBonus(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP: return ItemPropertyDamageBonusVsAlign(nSubTypeValue, nParam1Value, nCostTableValue); + case ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP: return ItemPropertyDamageBonusVsRace(nSubTypeValue, nParam1Value, nCostTableValue); + case ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT: return ItemPropertyDamageBonusVsSAlign(nSubTypeValue, nCostTableValue, nParam1Value); + case ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE: return ItemPropertyDamageImmunity(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_DECREASED_DAMAGE: return ItemPropertyDamagePenalty(nCostTableValue); + case ITEM_PROPERTY_DAMAGE_REDUCTION: return ItemPropertyDamageReduction(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_DAMAGE_RESISTANCE: return ItemPropertyDamageResistance(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_DAMAGE_VULNERABILITY: return ItemPropertyDamageVulnerability(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_DARKVISION: return ItemPropertyDarkvision(); + case ITEM_PROPERTY_DECREASED_ABILITY_SCORE: return ItemPropertyDecreaseAbility(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_DECREASED_AC: return ItemPropertyDecreaseAC(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_DECREASED_SKILL_MODIFIER: return ItemPropertyDecreaseSkill(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_ENHANCED_CONTAINER_REDUCED_WEIGHT: return ItemPropertyContainerReducedWeight(nCostTableValue); + case ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE: return ItemPropertyExtraMeleeDamageType(nSubTypeValue); + case ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE: return ItemPropertyExtraRangeDamageType(nSubTypeValue); + case ITEM_PROPERTY_HASTE: return ItemPropertyHaste(); + case ITEM_PROPERTY_HOLY_AVENGER: return ItemPropertyHolyAvenger(); + case ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS: return ItemPropertyImmunityMisc(nSubTypeValue); + case ITEM_PROPERTY_IMPROVED_EVASION: return ItemPropertyImprovedEvasion(); + case ITEM_PROPERTY_SPELL_RESISTANCE: return ItemPropertyBonusSpellResistance(nCostTableValue); + case ITEM_PROPERTY_SAVING_THROW_BONUS: return ItemPropertyBonusSavingThrowVsX(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC: return ItemPropertyBonusSavingThrow(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_KEEN: return ItemPropertyKeen(); + case ITEM_PROPERTY_LIGHT: return ItemPropertyLight(nCostTableValue, nParam1Value); + case ITEM_PROPERTY_MIGHTY: return ItemPropertyMaxRangeStrengthMod(nCostTableValue); + case ITEM_PROPERTY_NO_DAMAGE: return ItemPropertyNoDamage(); + case ITEM_PROPERTY_ON_HIT_PROPERTIES:{ + if(nParam1Value == -1) + return ItemPropertyOnHitProps(nSubTypeValue, nCostTableValue); + else + return ItemPropertyOnHitProps(nSubTypeValue, nCostTableValue, nParam1Value);} + case ITEM_PROPERTY_DECREASED_SAVING_THROWS: return ItemPropertyReducedSavingThrowVsX(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC: return ItemPropertyReducedSavingThrow(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_REGENERATION: return ItemPropertyRegeneration(nCostTableValue); + case ITEM_PROPERTY_SKILL_BONUS: return ItemPropertySkillBonus(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL: return ItemPropertySpellImmunitySpecific(nCostTableValue); + case ITEM_PROPERTY_IMMUNITY_SPELL_SCHOOL: return ItemPropertySpellImmunitySchool(nSubTypeValue); + case ITEM_PROPERTY_THIEVES_TOOLS: return ItemPropertyThievesTools(nCostTableValue); + case ITEM_PROPERTY_ATTACK_BONUS: return ItemPropertyAttackBonus(nCostTableValue); + case ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP: return ItemPropertyAttackBonusVsAlign(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP: return ItemPropertyAttackBonusVsRace(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT: return ItemPropertyAttackBonusVsSAlign(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER: return ItemPropertyAttackPenalty(nCostTableValue); + //IP_CONST_UNLIMITEDAMMO_* is costtablevalue, not subtype + case ITEM_PROPERTY_UNLIMITED_AMMUNITION: return ItemPropertyUnlimitedAmmo(nCostTableValue); + case ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP: return ItemPropertyLimitUseByAlign(nSubTypeValue); + case ITEM_PROPERTY_USE_LIMITATION_CLASS: return ItemPropertyLimitUseByClass(nSubTypeValue); + case ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE: return ItemPropertyLimitUseByRace(nSubTypeValue); + case ITEM_PROPERTY_USE_LIMITATION_SPECIFIC_ALIGNMENT: return ItemPropertyLimitUseBySAlign(nSubTypeValue); + case ITEM_PROPERTY_REGENERATION_VAMPIRIC: return ItemPropertyVampiricRegeneration(nCostTableValue); + case ITEM_PROPERTY_TRAP: return ItemPropertyTrap(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_TRUE_SEEING: return ItemPropertyTrueSeeing(); + case ITEM_PROPERTY_ON_MONSTER_HIT: return ItemPropertyOnMonsterHitProperties(nSubTypeValue); + case ITEM_PROPERTY_TURN_RESISTANCE: return ItemPropertyTurnResistance(nCostTableValue); + case ITEM_PROPERTY_MASSIVE_CRITICALS: return ItemPropertyMassiveCritical(nCostTableValue); + case ITEM_PROPERTY_FREEDOM_OF_MOVEMENT: return ItemPropertyFreeAction(); + case ITEM_PROPERTY_MONSTER_DAMAGE: return ItemPropertyMonsterDamage(nCostTableValue); + case ITEM_PROPERTY_IMMUNITY_SPELLS_BY_LEVEL: return ItemPropertyImmunityToSpellLevel(nCostTableValue); + case ITEM_PROPERTY_SPECIAL_WALK: return ItemPropertySpecialWalk(nSubTypeValue); + case ITEM_PROPERTY_HEALERS_KIT: return ItemPropertyHealersKit(nCostTableValue); + case ITEM_PROPERTY_WEIGHT_INCREASE: return ItemPropertyWeightIncrease(nParam1Value); + case ITEM_PROPERTY_ONHITCASTSPELL: return ItemPropertyOnHitCastSpell(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_VISUALEFFECT: return ItemPropertyVisualEffect(nSubTypeValue); + case ITEM_PROPERTY_ARCANE_SPELL_FAILURE: return ItemPropertyArcaneSpellFailure(nCostTableValue); + case ITEM_PROPERTY_USE_LIMITATION_ABILITY_SCORE: return ItemPropertyLimitUseByAbility(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_USE_LIMITATION_SKILL_RANKS: return ItemPropertyLimitUseBySkill(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_USE_LIMITATION_SPELL_LEVEL: return ItemPropertyLimitUseBySpellcasting(nCostTableValue); + case ITEM_PROPERTY_USE_LIMITATION_ARCANE_SPELL_LEVEL: return ItemPropertyLimitUseByArcaneSpellcasting(nCostTableValue); + case ITEM_PROPERTY_USE_LIMITATION_DIVINE_SPELL_LEVEL: return ItemPropertyLimitUseByDivineSpellcasting(nCostTableValue); + case ITEM_PROPERTY_USE_LIMITATION_SNEAK_ATTACK: return ItemPropertyLimitUseBySneakAttackDice(nCostTableValue); + case ITEM_PROPERTY_USE_LIMITATION_GENDER: + { //no Use Limitation: Gender function entry + //return ItemPropertyAbilityBonus(nSubTypeValue); + break; + } + case ITEM_PROPERTY_SPEED_INCREASE: + { //no Speed Increase function entry + //return ItemPropertyAbilityBonus(nCostTableValue); + break; + } + case ITEM_PROPERTY_SPEED_DECREASE: + //no Speed Decrease function entry + //return ItemPropertyAbilityBonus(nCostTableValue); + case ITEM_PROPERTY_AREA_OF_EFFECT: return ItemPropertyAreaOfEffect(nSubTypeValue, nCostTableValue); + //requires spellid passed as subtype instead of actual subtype + case ITEM_PROPERTY_CAST_SPELL_CASTER_LEVEL: return ItemPropertyCastSpellCasterLevel(nSubTypeValue, nCostTableValue); + //requires spellid passed as subtype instead of actual subtype + case ITEM_PROPERTY_CAST_SPELL_METAMAGIC: return ItemPropertyCastSpellMetamagic(nSubTypeValue, nCostTableValue); + //requires spellid passed as subtype instead of actual subtype + case ITEM_PROPERTY_CAST_SPELL_DC: return ItemPropertyCastSpellDC(nSubTypeValue, nCostTableValue); + case ITEM_PROPERTY_PNP_HOLY_AVENGER: return ItemPropertyPnPHolyAvenger(); + case ITEM_PROPERTY_WIZARDRY: return ItemPropertyWizardry(nCostTableValue); + case ITEM_PROPERTY_DIVINITY: return ItemPropertyDivinity(nCostTableValue); + case ITEM_PROPERTY_MATERIAL: return ItemPropertyMaterial(nCostTableValue); + case ITEM_PROPERTY_QUALITY: return ItemPropertyQuality(nCostTableValue); + case ITEM_PROPERTY_ADDITIONAL: return ItemPropertyAdditional(nCostTableValue); + case ITEM_PROPERTY_ECHOBLADE: return ItemPropertyEchoblade(); + + + //ROOM FOR MORE - 89 so far, need increase/decrease cost + /* + case ITEM_PROPERTY_ABILITY_BONUS: + { + return ItemPropertyAbilityBonus(nSubTypeValue, nCostTableValue); + break; + } + */ + } + return ip; +} + +struct ipstruct GetIpStructFromString(string sIp) +{ + struct ipstruct iptemp; + //initialise variables + string sTemp = sIp; + string sSub; + int nLength = GetStringLength(sTemp); + int nPosition; + int nTemp; + int i; + + for(i = 0; i < 4; i++) + { + nPosition = FindSubString(sTemp, "_"); + sSub = (nPosition == -1) ? sTemp : GetStringLeft(sTemp, nPosition); + nLength -= (nPosition + 1); + if(sSub == "*") + nTemp = -1; + else + nTemp = StringToInt(sSub); + switch(i) + { + case 0: iptemp.type = nTemp; break; + case 1: iptemp.subtype = nTemp; break; + case 2: iptemp.costtablevalue = nTemp; break; + case 3: iptemp.param1value = nTemp; break; + } + sTemp = GetSubString(sTemp, nPosition + 1, nLength); + } + return iptemp; +} + +string PRCGetItemAppearanceString(object oPC, object oItem) +{ + int nBase = GetBaseItemType(oItem); + int nModelType = StringToInt(Get2DACache("baseitems", "ModelType", nBase)); + //PRCSetAppearanceArray(oPC, sString); + string sReturn = ""; + + switch(nModelType) + { + case 0: + { //simple model, 1 value + sReturn = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0)); + break; + } + case 1: + { //helmet, cloak, model + 6 colours, 7 values + sReturn = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_LEATHER1)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_LEATHER2)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH1)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH2)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_METAL1)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_METAL2)) + ; + break; + } + case 2: + { //weapon, 3 sections + 3 colours, 6 values + sReturn = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, ITEM_APPR_WEAPON_COLOR_BOTTOM)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, ITEM_APPR_WEAPON_COLOR_MIDDLE)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, ITEM_APPR_WEAPON_COLOR_TOP)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, ITEM_APPR_WEAPON_MODEL_BOTTOM)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, ITEM_APPR_WEAPON_MODEL_MIDDLE)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, ITEM_APPR_WEAPON_MODEL_TOP)) + ; + break; + } + case 3: + { //armour, 19 sections + 6 colours, 25 values + sReturn = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RFOOT)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LFOOT)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RSHIN)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LSHIN)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LTHIGH)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RTHIGH)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_PELVIS)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_TORSO)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_BELT)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_NECK)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RFOREARM)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LFOREARM)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RBICEP)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LBICEP)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RSHOULDER)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LSHOULDER)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RHAND)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LHAND)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_ROBE)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_LEATHER1)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_LEATHER2)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH1)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH2)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_METAL1)) + "-" + + IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_METAL2)) + ; + break; + } + } + return sReturn; +} + +//reads a string with ints delimited by "-", then set the appearance +// of an item accordingly +object PRCSetItemAppearance(object oPC, object oItem, string sArray, string sName = PRC_CRAFT_APPEARANCE_ARRAY) +{ + //initialise array + if(array_exists(oPC, sName)) + array_delete(oPC, sName); + array_create(oPC, sName); + //initialise variables + string sTemp = sArray; + string sSub; + int nLength = GetStringLength(sTemp); + int nPosition; + int nTemp; + int nIndex = 0; + object oChest = GetTempCraftChest(); + object oTemp; + while(nLength > 0) + { + nPosition = FindSubString(sTemp, "-"); + if(nPosition == -1) + { //last value + sSub = sTemp; + nLength = 0; + } + else + { + sSub = GetStringLeft(sTemp, nPosition); + nLength -= (nPosition + 1); + } + if(sSub == "*") + nTemp = -1; + else + nTemp = StringToInt(sSub); + array_set_int(oPC, sName, nIndex, nTemp); + nIndex++; + if(nPosition == -1) break; //last value + if(nLength < 0) + { + if(DEBUG) DoDebug("PRCSetItemAppearanceString: Error processing string"); + return oItem; //something went wrong + } + sTemp = GetSubString(sTemp, nPosition + 1, nLength); + } + int nBase = GetBaseItemType(oItem); + int nModelType = StringToInt(Get2DACache("baseitems", "ModelType", nBase)); + DestroyObject(oItem); + oItem = CopyItem(oItem, oChest, TRUE); + switch(nModelType) + { + case 0: + { //simple model, 1 value + nTemp = array_get_int(oPC, sName, 0); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0, nTemp, TRUE); + } + break; + } + case 1: + { //helmet, cloak, model + 6 colours, 7 values, cloak model change doesn't work in 1.68 + nTemp = array_get_int(oPC, sName, 0); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 1); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_LEATHER1, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 2); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_LEATHER2, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 3); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH1, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 4); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH2, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 5); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_METAL1, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 6); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_METAL2, nTemp, TRUE); + } + break; + } + case 2: + { //weapon, 3 sections + 3 colours, 6 values + nTemp = array_get_int(oPC, sName, 0); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, ITEM_APPR_WEAPON_COLOR_BOTTOM, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 1); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, ITEM_APPR_WEAPON_COLOR_MIDDLE, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 2); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, ITEM_APPR_WEAPON_COLOR_TOP, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 3); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, ITEM_APPR_WEAPON_MODEL_BOTTOM, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 4); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, ITEM_APPR_WEAPON_MODEL_MIDDLE, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 5); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, ITEM_APPR_WEAPON_MODEL_TOP, nTemp, TRUE); + } + break; + } + case 3: + { //armour, 19 sections + 6 colours, 25 values + nTemp = array_get_int(oPC, sName, 0); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RFOOT, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 1); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LFOOT, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 2); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RSHIN, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 3); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LSHIN, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 4); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LTHIGH, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 5); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RTHIGH, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 6); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_PELVIS, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 7); + if(nTemp != -1) + { + if(FloatToInt(StringToFloat(Get2DACache("parts_chest", "ACBONUS", GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_TORSO)))) == FloatToInt(StringToFloat(Get2DACache("parts_chest", "ACBONUS", nTemp)))) + { //won't allow change to armour with different AC + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_TORSO, nTemp, TRUE); + } + else + { + SendMessageToPC(oPC, "This torso appearance has a different AC value to the current appearance, aborting torso change."); + } + } + nTemp = array_get_int(oPC, sName, 8); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_BELT, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 9); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_NECK, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 10); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RFOREARM, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 11); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LFOREARM, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 12); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RBICEP, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 13); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LBICEP, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 14); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RSHOULDER, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 15); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LSHOULDER, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 16); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RHAND, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 17); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LHAND, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 18); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_ROBE, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 19); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_LEATHER1, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 20); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_LEATHER2, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 21); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH1, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 22); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH2, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 23); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_METAL1, nTemp, TRUE); + } + nTemp = array_get_int(oPC, sName, 24); + if(nTemp != -1) + { + DestroyObject(oItem); + oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_METAL2, nTemp, TRUE); + } + break; + } + } + DestroyObject(oItem); + oItem = CopyItem(oItem, oPC, TRUE); + return oItem; +} +/* +int ITEM_APPR_TYPE_SIMPLE_MODEL = 0; +int ITEM_APPR_TYPE_WEAPON_COLOR = 1; +int ITEM_APPR_TYPE_WEAPON_MODEL = 2; +int ITEM_APPR_TYPE_ARMOR_MODEL = 3; +int ITEM_APPR_TYPE_ARMOR_COLOR = 4; +int ITEM_APPR_NUM_TYPES = 5; + +int ITEM_APPR_ARMOR_COLOR_LEATHER1 = 0; +int ITEM_APPR_ARMOR_COLOR_LEATHER2 = 1; +int ITEM_APPR_ARMOR_COLOR_CLOTH1 = 2; +int ITEM_APPR_ARMOR_COLOR_CLOTH2 = 3; +int ITEM_APPR_ARMOR_COLOR_METAL1 = 4; +int ITEM_APPR_ARMOR_COLOR_METAL2 = 5; +int ITEM_APPR_ARMOR_NUM_COLORS = 6; + +int ITEM_APPR_ARMOR_MODEL_RFOOT = 0; +int ITEM_APPR_ARMOR_MODEL_LFOOT = 1; +int ITEM_APPR_ARMOR_MODEL_RSHIN = 2; +int ITEM_APPR_ARMOR_MODEL_LSHIN = 3; +int ITEM_APPR_ARMOR_MODEL_LTHIGH = 4; +int ITEM_APPR_ARMOR_MODEL_RTHIGH = 5; +int ITEM_APPR_ARMOR_MODEL_PELVIS = 6; +int ITEM_APPR_ARMOR_MODEL_TORSO = 7; +int ITEM_APPR_ARMOR_MODEL_BELT = 8; +int ITEM_APPR_ARMOR_MODEL_NECK = 9; +int ITEM_APPR_ARMOR_MODEL_RFOREARM = 10; +int ITEM_APPR_ARMOR_MODEL_LFOREARM = 11; +int ITEM_APPR_ARMOR_MODEL_RBICEP = 12; +int ITEM_APPR_ARMOR_MODEL_LBICEP = 13; +int ITEM_APPR_ARMOR_MODEL_RSHOULDER = 14; +int ITEM_APPR_ARMOR_MODEL_LSHOULDER = 15; +int ITEM_APPR_ARMOR_MODEL_RHAND = 16; +int ITEM_APPR_ARMOR_MODEL_LHAND = 17; +int ITEM_APPR_ARMOR_MODEL_ROBE = 18; +int ITEM_APPR_ARMOR_NUM_MODELS = 19; + +int ITEM_APPR_WEAPON_MODEL_BOTTOM = 0; +int ITEM_APPR_WEAPON_MODEL_MIDDLE = 1; +int ITEM_APPR_WEAPON_MODEL_TOP = 2; + +int ITEM_APPR_WEAPON_COLOR_BOTTOM = 0; +int ITEM_APPR_WEAPON_COLOR_MIDDLE = 1; +int ITEM_APPR_WEAPON_COLOR_TOP = 2; +*/ + +// void main () {} diff --git a/src/include/prc_effect_inc.nss b/src/include/prc_effect_inc.nss new file mode 100644 index 0000000..6186f71 --- /dev/null +++ b/src/include/prc_effect_inc.nss @@ -0,0 +1,750 @@ +/** + * @file + * This file contains SPApplyEffectToObject(). This was in inc_dispel, but that include should only be in + * dispel-type spells and not the core spell engine. + */ + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Gets a creature that can apply an effect + * Useful to apply/remove specific effects rather than using spellID + * Remember to assigncommand the effect creation + */ +object GetObjectToApplyNewEffect(string sTag, object oPC, int nStripEffects = TRUE); + +/** + * A wrapper for ApplyEffectToObject() that takes PRC feats into account. + * + * @param nDurationType One of the DURATION_TYPE_* constants + * @param eEffect The effect to apply + * @param oTarget The target of the effect + * @param fDuration The duration for temporary effects + * @param bDispellable TRUE if the effect should be dispellable, else FALSE + * @param nSpellID The Spell ID of the spell applying the effect. If default is used, + * PRCGetSpellId() is used internally to get the spell ID. + * @param nCasterLevel The caster level that the spell is cast with. If default is used, + * PRCGetCasterLevel() is used internally to get the caster level. + * @param oCaster The spell caster. + */ +void SPApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration = 0.0f, + int bDispellable = TRUE, int nSpellID = -1, int nCasterLevel = -1, object oCaster = OBJECT_SELF); + +/** + * Removes all effects from target that are due to the given spell. + * + * Removes all effects caused by the spell nID regardless of caster. By + * default only removes magical effects. + * + * @author Georg Zoeller (presumably copied from a bio script somewhere) + * + * @param nID The spell ID whose effects to remove. + * @param oTarget The object to remove the effects from. + * @param bMagicalEffectsOnly Whether to remove only magical effects (TRUE, the default) + * or all effects (FALSE) + */ +void GZPRCRemoveSpellEffects(int nID,object oTarget, int bMagicalEffectsOnly = TRUE); + +/** + * Tests to make sure the data in the effect arrays still refers to an actual effect. + * + * Called from within ReorderEffects() and DispelMagicBestMod() (in inc_dispel). It's purpose + * is to verify that the effect referred to by an entry in the 3 arrays is still in effect, in + * case it has been dispelled or run out its duration since the data was put there. + * + * @param nSpellID SpellID of the effect to test + * @param oCaster Caster of the spell that caused the effectbeing tested + * @param oTarget The object whose effect arrays are being looked at. + * + * @return TRUE if the effect is still active, otherwise FALSE. + */ +int IsStillRealEffect(int nSpellID, object oCaster, object oTarget); + +/** + * Checks if target is a Frenzied Bersker with Deathless Frenzy Active + * If so removes immortality flag so that the death effect from a + * Death Spell can kill them + * + * @param oTarget Creature to test for Deathless Frenzy + */ +void DeathlessFrenzyCheck(object oTarget); + +// * Searchs through a persons effects and removes those from a particular spell by a particular caster. +// * PRC Version of a Bioware function to disable include loops +void PRCRemoveSpellEffects(int nSpell_ID, object oCaster, object oTarget); + +/** + * Dazzles the target: -1 Attack, Search, Spot, and VFX + * + * @return the Dazzle effect + */ +effect EffectDazzle(); + +/** + * Shaken effect: -2 to attack, all skills and saving throws + * + * @return the Shaken effect + */ +effect EffectShaken(); + +/** + * Fatigue effect: -2 to Strength and Dexterity, 25% speed decrease. Can't be dispelled. + * + * @return the Fatigue effect + */ +effect EffectFatigue(); + +/** + * Exhausted effect: -6 to Strength and Dexterity, 50% speed decrease. Can't be dispelled. + * + * @return the Exhausted effect + */ +effect EffectExhausted(); + +/** + * Cowering effect: -2 to AC, takes no actions (dazed) + * + * @return the Cowering effect + */ +effect EffectCowering(); + +/** + * Sickened effect: -2 to attack, damage, all skills, ability checks and saving throws + * + * @return the Sickened effect + */ +effect EffectSickened(); + +/** + * Nausea effect: Nauseated creatures are unable to attack, cast spells, concentrate on spells, or do anything + * else requiring attention. The only action such a character can take is a single move action per turn. + * This function takes a duration and target because it sets the enemy's number of attacks in a round to 1 + * Which means once it's called, the BAB effect is applied + * + * @return the Nausea effect + */ +effect EffectNausea(object oTarget, float fDur); + +/** + * Fascinate effect: charmed, -4 to Listen and Spot + * + * @return the Fascinate effect + */ +effect EffectFascinate(); + +/** + * It's Confused, as per normal + * + * @return the Confused effect + */ +effect PRCEffectConfused(); + +/** + * It's EffectHeal, but allows us to manipulate the HP total healed + * + * @return the Heal effect + */ +effect PRCEffectHeal(int nHP, object oTarget); + +/** + * Creates skill bonus for all skills based on particular ability. + * Should be updated if skills.2da file was edited. + * + * @param iAbility base ability + * @param iIncrease bonus applied to each skill + * + * @return Skill increase + */ +effect EffectAbilityBasedSkillIncrease(int iAbility, int iIncrease = 1); + +/** + * Creates skill penalty for all skills based on particular ability + * Should be updated if skills.2da file was edited. + * + * @param iAbility base ability + * @param iDecrease penalty applied to each skill + * + * @return Skill decrease + */ +effect EffectAbilityBasedSkillDecrease(int iAbility, int iDecrease = 1); + +//ebonfowl: adding this function to check if a target is already shaken +int GetIsShaken(object oTarget); + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + +#include "prc_inc_castlvl" // get prc_racial_const, prc_inc_nwscript, prc_inc_newip + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +/** + * Cleans up the 3 arrays used to store effect information on the object. + * + * Goes through the whole 3 stored lists of caster levels, spell id's, and casters, + * deletes any that aren't real anymore (refer to an effect no longer present), then + * builds a new list out of the ones that are still real/current (refer to effects that + * are still present) + * Thus, the list gets cleaned up every time it is added to. + * + * @param nSpellID Spell ID of the spell being cast. + * @param oTarget Object to modify the effect arrays of. + * @param oCaster The caster of the spell. + * + * @return The number of effects in the 3 new arrays + */ +int _ReorderEffects(int nSpellID, object oTarget, object oCaster = OBJECT_SELF){ + int nIndex = GetLocalInt(oTarget, "X2_Effects_Index_Number"); + int nEffectCastLevel; + int nEffectSpellID; + object oEffectCaster; + int nWeave ; + int nRealIndex = 0; + int nPlace; + + for(nPlace = 0; nPlace <= nIndex; nPlace++) + { + nEffectSpellID = GetLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nPlace)); + oEffectCaster = GetLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nPlace)); + nEffectCastLevel = GetLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nPlace)); + nWeave = GetLocalInt(oTarget, " X2_Effect_Weave_ID_" + IntToString(nPlace)); + + DeleteLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nPlace)); + DeleteLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nPlace)); + DeleteLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nPlace)); + DeleteLocalInt(oTarget, " X2_Effect_Weave_ID_" + IntToString(nPlace)); + if(IsStillRealEffect(nEffectSpellID, oEffectCaster, oTarget)) + { + if(nEffectSpellID != nSpellID || oEffectCaster != oCaster) + // Take it out of the list if it's the spell now being cast, and by the same caster + // This way spells that don't self dispel when they're recast don't flood the list. + { + SetLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nRealIndex), nEffectSpellID); + SetLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nRealIndex), nEffectCastLevel); + SetLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nRealIndex),oEffectCaster ); + SetLocalInt(oTarget, " X2_Effect_Weave_ID_" + IntToString(nRealIndex),nWeave); + nRealIndex++; + }// end of if is the same as the current spell and caster + }// end of if is valid effect statement + }// end of for statement + return nRealIndex; // This is the number of values currently in all 3 arrays -1. +}// end of function + +////////////////////////////////////////////////// +/* Function Definitions */ +////////////////////////////////////////////////// + +object GetObjectToApplyNewEffect(string sTag, object oPC, int nStripEffects = TRUE) +{ + object oWP = GetObjectByTag(sTag); + object oLimbo = GetObjectByTag("HEARTOFCHAOS"); + location lLimbo = GetLocation(oLimbo); + if(!GetIsObjectValid(oLimbo)) + lLimbo = GetStartingLocation(); + //not valid, create it + if(!GetIsObjectValid(oWP)) + { + //has to be a creature so it can be jumped around + //re-used the 2da cache blueprint since it has no scripts + oWP = CreateObject(OBJECT_TYPE_CREATURE, "prc_2da_cache", lLimbo, FALSE, sTag); + if(!GetIsObjectValid(oWP) && DEBUG) + { + DoDebug(sTag+" is not valid"); + } + //make sure the player can never interact with WP + SetPlotFlag(oWP, TRUE); + SetCreatureAppearanceType(oWP, APPEARANCE_TYPE_INVISIBLE_HUMAN_MALE); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY), oWP); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectCutsceneGhost(), oWP); + } + //remove previous effects + if(nStripEffects) + { + effect eTest = GetFirstEffect(oPC); + while(GetIsEffectValid(eTest)) + { + if(GetEffectCreator(eTest) == oWP + && GetEffectSubType(eTest) == SUBTYPE_SUPERNATURAL) + { + if(DEBUG) DoDebug("Stripping previous effect"); + RemoveEffect(oPC, eTest); + } + eTest = GetNextEffect(oPC); + } + } + //jump to PC + //must be in same area to apply effect + if(GetArea(oWP) != GetArea(oPC)) + AssignCommand(oWP, + ActionJumpToObject(oPC)); + //jump back to limbo afterwards + DelayCommand(0.1, + AssignCommand(oWP, + ActionJumpToObject(oLimbo))); + return oWP; +} + +void SPApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration = 0.0f, + int bDispellable = TRUE, int nSpellID = -1, int nCasterLevel = -1, object oCaster = OBJECT_SELF) +{ + if (-1 == nSpellID) nSpellID = PRCGetSpellId(); + + //if it was cast from the new spellbook, remove previous effects + //if(GetLocalInt(OBJECT_SELF, "UsingActionCastSpell")) + // GZPRCRemoveSpellEffects(nSpellID, oTarget); + + //Fearsome Necromancy check + if(GetHasFeat(FEAT_FEARSOME_NECROMANCY, oCaster)) + { + if(GetSpellSchool(nSpellID) == SPELL_SCHOOL_NECROMANCY) + { + if(GetIsEnemy(oTarget, oCaster) + && !GetIsImmune(oTarget, IMMUNITY_TYPE_MIND_SPELLS)) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectShaken(), oTarget, 6.0); + } + } + } + + // Illusion Veil Meld + if(GetHasSpellEffect(MELD_ILLUSION_VEIL, oCaster) && GetSpellSchool(nSpellID) == SPELL_SCHOOL_ILLUSION) + fDuration += GetEssentiaInvested(oCaster, MELD_ILLUSION_VEIL) * 6.0; + + //Eldritch Spellweave + if(GetIsObjectValid(GetLocalObject(oCaster, "SPELLWEAVE_TARGET"))) + ExecuteScript("inv_splweave", oCaster); + + // Instant duration effects can use BioWare code, the PRC code doesn't care about those + if(DURATION_TYPE_INSTANT == nDurationType) + ApplyEffectToObject(nDurationType, eEffect, oTarget, fDuration); + else + { + // Extraordinary/Supernatural effects are not supposed to be dispellable. + if (GetEffectSubType(eEffect) == SUBTYPE_EXTRAORDINARY + || GetEffectSubType(eEffect) == SUBTYPE_SUPERNATURAL) + { + bDispellable = FALSE; + } + + // We need the extra arguments for the PRC code, get them if defaults were passed in. + if (-1 == nCasterLevel) nCasterLevel = PRCGetCasterLevel(oCaster); + + // Invoke the PRC apply function passing the extra data. + int nIndex = _ReorderEffects(nSpellID, oTarget, oCaster); + // Add this new effect to the slot after the last effect already on the character. + + //check if Master's Gift applies + if(GetHasFeat(FEAT_MASTERS_GIFT, oTarget) && GetIsArcaneClass(PRCGetLastSpellCastClass(), oCaster)) + { + if(!StringToInt(Get2DACache("spells", "HostileSetting", nSpellID))) + fDuration *= 2; + } + + ApplyEffectToObject(nDurationType, eEffect, oTarget, fDuration); + // may have code traverse the lists right here and not add the new effect + // if an identical one already appears in the list somewhere + + SetLocalInt(oTarget, " X2_Effect_Spell_ID_" + IntToString(nIndex), nSpellID); + SetLocalInt(oTarget, " X2_Effect_Cast_Level_" + IntToString(nIndex), nCasterLevel); + SetLocalObject(oTarget, " X2_Effect_Caster_" + IntToString(nIndex), oCaster ); + if(GetHasFeat(FEAT_SHADOWWEAVE, oCaster)) + SetLocalInt(oTarget, " X2_Effect_Weave_ID_" + IntToString(nIndex), GetHasFeat(FEAT_TENACIOUSMAGIC,oCaster)); + else + SetLocalInt(oTarget, " X2_Effect_Weave_ID_" + IntToString(nIndex), 0); + + //nIndex++; + /// Set new index number to the character. + SetLocalInt(oTarget, "X2_Effects_Index_Number", nIndex); + } +} + +void GZPRCRemoveSpellEffects(int nID,object oTarget, int bMagicalEffectsOnly = TRUE){ + effect eEff = GetFirstEffect(oTarget); + while (GetIsEffectValid(eEff)) + { + if (GetEffectSpellId(eEff) == nID) + { + if (GetEffectSubType(eEff) != SUBTYPE_MAGICAL && bMagicalEffectsOnly) + { + // ignore + } + else + { + RemoveEffect(oTarget,eEff); + } + } + eEff = GetNextEffect(oTarget); + } +} + +int IsStillRealEffect(int nSpellID, object oCaster, object oTarget){ + if(!GetHasSpellEffect(nSpellID, oTarget) || nSpellID == 0) + { + return FALSE; + } + + effect eTestSubject = GetFirstEffect(oTarget); + while(GetIsEffectValid(eTestSubject)) + { + if(GetEffectSpellId(eTestSubject) == nSpellID) + { + if(GetEffectCreator(eTestSubject) == oCaster) + { + return TRUE; + }// end of if originates from oCaster. + }// end if originates from nSpellID. + eTestSubject = GetNextEffect(oTarget); + } + return FALSE; +} + +void DeathlessFrenzyCheck(object oTarget) +{ + //if its immune to death, e.g via items + //then dont do this + if(GetIsImmune( oTarget, IMMUNITY_TYPE_DEATH)) + return; + if(GetHasFeat(FEAT_DEATHLESS_FRENZY, oTarget) + && GetHasFeatEffect(FEAT_FRENZY, oTarget) + && GetImmortal(oTarget)) + SetImmortal(oTarget, FALSE); + //mark them as being magically killed for death system + if(GetPRCSwitch(PRC_PNP_DEATH_ENABLE)) + { + SetLocalInt(oTarget, "PRC_PNP_EfectDeathApplied", + GetLocalInt(oTarget, "PRC_PNP_EfectDeathApplied")+1); + AssignCommand(oTarget, + DelayCommand(1.0, + SetLocalInt(oTarget, "PRC_PNP_EfectDeathApplied", + GetLocalInt(oTarget, "PRC_PNP_EfectDeathApplied")-1))); + } +} + +void PRCRemoveSpellEffects(int nSpell_ID, object oCaster, object oTarget){ + //Declare major variables + int bValid = FALSE; + effect eAOE; + if(GetHasSpellEffect(nSpell_ID, oTarget)) + { + //Search through the valid effects on the target. + eAOE = GetFirstEffect(oTarget); + while (GetIsEffectValid(eAOE) && bValid == FALSE) + { + if (GetEffectCreator(eAOE) == oCaster) + { + //If the effect was created by the spell then remove it + if(GetEffectSpellId(eAOE) == nSpell_ID) + { + RemoveEffect(oTarget, eAOE); + bValid = TRUE; + } + } + //Get next effect on the target + eAOE = GetNextEffect(oTarget); + } + } +} + +// The creature is unable to see well because of overstimulation of the eyes. A dazzled +// creature takes a -1 penalty on attack rolls, Search checks, and Spot checks. +effect EffectDazzle(){ + effect eBlank; + if (GetRacialType(PRCGetSpellTargetObject()) == RACIAL_TYPE_BHUKA) return eBlank; + + effect eReturn = EffectLinkEffects(EffectAttackDecrease(1), EffectSkillDecrease(SKILL_SEARCH, 1)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_SPOT, 1)); + eReturn = TagEffect(eReturn, "PRCDazzle"); + return eReturn; +} + +// A shaken character takes a -2 penalty on attack rolls, saving throws, skill checks, +// and ability checks. +// Shaken is a less severe state of fear than frightened or panicked. +effect EffectShaken(){ + effect eBlank; + if (GetRacialType(PRCGetSpellTargetObject()) == RACIAL_TYPE_KRINTH) return eBlank; + + effect eReturn = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR); + eReturn = EffectLinkEffects(eReturn, EffectAttackDecrease(2)); + eReturn = EffectLinkEffects(eReturn, EffectSavingThrowDecrease(SAVING_THROW_ALL,2)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_ALL_SKILLS, 2)); + eReturn = TagEffect(eReturn, "PRCShaken"); + return eReturn; +} + +// A fatigued character can neither run nor charge and takes a -2 penalty to Strength +// and Dexterity. Doing anything that would normally cause fatigue causes the fatigued +// character to become exhausted. After 8 hours of complete rest, fatigued characters +// are no longer fatigued. +effect EffectFatigue(){ + effect eBlank; + if (GetLevelByClass(CLASS_TYPE_BATTLESMITH, PRCGetSpellTargetObject()) >= 3) return eBlank; + + effect eReturn = EffectAbilityDecrease(ABILITY_STRENGTH, 2); + eReturn = EffectLinkEffects(eReturn, EffectAbilityDecrease(ABILITY_DEXTERITY, 2)); + eReturn = EffectLinkEffects(eReturn, EffectMovementSpeedDecrease(25)); + eReturn = TagEffect(eReturn, "PRCFatigue"); + return eReturn; +} + +// An exhausted character moves at half speed and takes a -6 penalty to Strength and +// Dexterity. After 1 hour of complete rest, an exhausted character becomes fatigued. +// A fatigued character becomes exhausted by doing something else that would normally +// cause fatigue. +effect EffectExhausted(){ + effect eBlank; + if (GetLevelByClass(CLASS_TYPE_BATTLESMITH, PRCGetSpellTargetObject()) >= 3) return eBlank; + + if (GetLocalInt(PRCGetSpellTargetObject(), "IncarnumDefenseLE")) return EffectFatigue(); + + effect eReturn = EffectAbilityDecrease(ABILITY_STRENGTH, 6); + eReturn = EffectLinkEffects(eReturn, EffectAbilityDecrease(ABILITY_DEXTERITY, 6)); + eReturn = EffectLinkEffects(eReturn, EffectMovementSpeedDecrease(50)); + eReturn = TagEffect(eReturn, "PRCExhausted"); + return eReturn; +} + +// The character is frozen in fear and can take no actions. A cowering character takes +// a -2 penalty to Armor Class and loses her Dexterity bonus (if any). +effect EffectCowering(){ + effect eReturn = EffectACDecrease(2); + eReturn = EffectLinkEffects(eReturn, EffectDazed()); + eReturn = TagEffect(eReturn, "PRCCowering"); + return eReturn; +} + +// The character takes a -2 penalty on all attack rolls, weapon damage rolls, saving +// throws, skill checks, and ability checks. +effect EffectSickened(){ + effect eBlank; + if (GetHasFeat(FEAT_STRONG_STOMACH, PRCGetSpellTargetObject())) return eBlank; + + if(GetHasSpellEffect(MELD_PAULDRONS_OF_HEALTH, PRCGetSpellTargetObject())) return eBlank; + + effect eReturn = EffectAttackDecrease(2); + eReturn = EffectLinkEffects(eReturn, EffectDamageDecrease(2, DAMAGE_TYPE_BLUDGEONING|DAMAGE_TYPE_PIERCING|DAMAGE_TYPE_SLASHING)); + eReturn = EffectLinkEffects(eReturn, EffectSavingThrowDecrease(SAVING_THROW_ALL, 2)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_ALL_SKILLS, 2)); + eReturn = TagEffect(eReturn, "PRCSickened"); + return eReturn; +} + +// Nauseated creatures are unable to attack, cast spells, concentrate on spells, or do anything +// else requiring attention. The only action such a character can take is a single move action per turn. +effect EffectNausea(object oTarget, float fDur){ + effect eBlank; + if (GetHasFeat(FEAT_STRONG_STOMACH, PRCGetSpellTargetObject())) return EffectSickened(); + + if(GetHasSpellEffect(MELD_PAULDRONS_OF_HEALTH, PRCGetSpellTargetObject())) return eBlank; + + effect eReturn = EffectLinkEffects(EffectSpellFailure(), EffectAttackDecrease(20)); + eReturn = EffectLinkEffects(eReturn, EffectSlow()); + eReturn = EffectLinkEffects(EffectVisualEffect(VFX_IMP_DISEASE_S), eReturn); + eReturn = TagEffect(eReturn, "PRCNausea"); + SetBaseAttackBonus(1, oTarget); + DelayCommand(fDur, RestoreBaseAttackBonus(oTarget)); + return eReturn; +} + +// The creature is fascinated by a magical effect. A fascinate creature +// is charmed and takes a -4 penalty to listen and spot +effect EffectFascinate(){ + effect eReturn = EffectLinkEffects(EffectCharmed(), EffectSkillDecrease(SKILL_LISTEN, 4)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_SPOT, 4)); + eReturn = TagEffect(eReturn, "PRCFascinate"); + return eReturn; +} + +// It's just Confused +effect PRCEffectConfused() +{ + effect eBlank; + if (GetLevelByClass(CLASS_TYPE_WILD_MAGE, PRCGetSpellTargetObject()) >= 6 || + (GetHasSpellEffect(VESTIGE_DAHLVERNAR, PRCGetSpellTargetObject()) && GetLocalInt(PRCGetSpellTargetObject(), "ExploitVestige") != VESTIGE_DAHLVERNAR_MAD_SOUL) + ) return eBlank; + + effect eEffect = EffectConfused(); + eEffect = TagEffect(eEffect, "PRCConfused"); + return eEffect; +} + +// It's just Healing +effect PRCEffectHeal(int nHP, object oTarget) +{ + // MELD_THERAPEUTIC_MANTLE + if (GetHasSpellEffect(MELD_THERAPEUTIC_MANTLE, oTarget)) + nHP += (StringToInt(Get2DACache("spells", "Innate", PRCGetSpellId())) + (GetEssentiaInvested(oTarget, MELD_THERAPEUTIC_MANTLE) * 2)); + + return EffectHeal(nHP); +} + +effect EffectAbilityBasedSkillIncrease(int iAbility, int iIncrease = 1){ + effect eReturn; + switch(iAbility) + { + case ABILITY_STRENGTH: + eReturn = EffectSkillIncrease(SKILL_DISCIPLINE, iIncrease); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_JUMP, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_CLIMB, iIncrease)); + break; + case ABILITY_DEXTERITY: + eReturn = EffectSkillIncrease(SKILL_HIDE, iIncrease); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_MOVE_SILENTLY, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_OPEN_LOCK, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_SET_TRAP, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_TUMBLE, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_RIDE, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_BALANCE, iIncrease)); + break; + case ABILITY_CONSTITUTION: + eReturn = EffectSkillIncrease(SKILL_CONCENTRATION, iIncrease); + break; + case ABILITY_INTELLIGENCE: + eReturn = EffectSkillIncrease(SKILL_DISABLE_TRAP, iIncrease); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_LORE, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_SEARCH, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_SPELLCRAFT, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_APPRAISE, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_CRAFT_TRAP, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_CRAFT_ARMOR, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_CRAFT_WEAPON, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_TRUESPEAK, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_MARTIAL_LORE, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_CRAFT_ALCHEMY, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_CRAFT_POISON, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_PSICRAFT, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_CRAFT_GENERAL, iIncrease)); + break; + case ABILITY_WISDOM: + eReturn = EffectSkillIncrease(SKILL_HEAL, iIncrease); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_LISTEN, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_SPOT, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_SENSE_MOTIVE, iIncrease)); + break; + case ABILITY_CHARISMA: + eReturn = EffectSkillIncrease(SKILL_ANIMAL_EMPATHY, iIncrease); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_PERFORM, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_PERSUADE, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_USE_MAGIC_DEVICE, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_BLUFF, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_INTIMIDATE, iIncrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillIncrease(SKILL_IAIJUTSU_FOCUS, iIncrease)); + break; + } + return eReturn; +} + +effect EffectAbilityBasedSkillDecrease(int iAbility, int iDecrease = 1){ + effect eReturn; + switch(iAbility) + { + case ABILITY_STRENGTH: + eReturn = EffectSkillDecrease(SKILL_DISCIPLINE, iDecrease); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_JUMP, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_CLIMB, iDecrease)); + break; + case ABILITY_DEXTERITY: + eReturn = EffectSkillIncrease(SKILL_HIDE, iDecrease); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_MOVE_SILENTLY, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_OPEN_LOCK, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_SET_TRAP, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_TUMBLE, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_RIDE, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_BALANCE, iDecrease)); + break; + case ABILITY_CONSTITUTION: + eReturn = EffectSkillDecrease(SKILL_CONCENTRATION, iDecrease); + break; + case ABILITY_INTELLIGENCE: + eReturn = EffectSkillDecrease(SKILL_DISABLE_TRAP, iDecrease); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_LORE, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_SEARCH, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_SPELLCRAFT, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_APPRAISE, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_CRAFT_TRAP, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_CRAFT_ARMOR, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_CRAFT_WEAPON, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_TRUESPEAK, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_MARTIAL_LORE, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_CRAFT_ALCHEMY, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_CRAFT_POISON, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_PSICRAFT, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_CRAFT_GENERAL, iDecrease)); + break; + case ABILITY_WISDOM: + eReturn = EffectSkillDecrease(SKILL_HEAL, iDecrease); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_LISTEN, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_SPOT, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_SENSE_MOTIVE, iDecrease)); + break; + case ABILITY_CHARISMA: + eReturn = EffectSkillDecrease(SKILL_ANIMAL_EMPATHY, iDecrease); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_PERFORM, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_PERSUADE, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_USE_MAGIC_DEVICE, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_BLUFF, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_INTIMIDATE, iDecrease)); + eReturn = EffectLinkEffects(eReturn, EffectSkillDecrease(SKILL_IAIJUTSU_FOCUS, iDecrease)); + break; + } + return eReturn; +} + +effect EffectDamageImmunityAll(){ + effect eReturn = EffectDamageImmunityIncrease(DAMAGE_TYPE_ACID, 100); + eReturn = EffectLinkEffects(eReturn, EffectDamageImmunityIncrease(DAMAGE_TYPE_BLUDGEONING, 100)); + eReturn = EffectLinkEffects(eReturn, EffectDamageImmunityIncrease(DAMAGE_TYPE_COLD, 100)); + eReturn = EffectLinkEffects(eReturn, EffectDamageImmunityIncrease(DAMAGE_TYPE_DIVINE, 100)); + eReturn = EffectLinkEffects(eReturn, EffectDamageImmunityIncrease(DAMAGE_TYPE_ELECTRICAL, 100)); + eReturn = EffectLinkEffects(eReturn, EffectDamageImmunityIncrease(DAMAGE_TYPE_FIRE, 100)); + eReturn = EffectLinkEffects(eReturn, EffectDamageImmunityIncrease(DAMAGE_TYPE_MAGICAL, 100)); + eReturn = EffectLinkEffects(eReturn, EffectDamageImmunityIncrease(DAMAGE_TYPE_NEGATIVE, 100)); + eReturn = EffectLinkEffects(eReturn, EffectDamageImmunityIncrease(DAMAGE_TYPE_PIERCING, 100)); + eReturn = EffectLinkEffects(eReturn, EffectDamageImmunityIncrease(DAMAGE_TYPE_POSITIVE, 100)); + eReturn = EffectLinkEffects(eReturn, EffectDamageImmunityIncrease(DAMAGE_TYPE_SLASHING, 100)); + eReturn = EffectLinkEffects(eReturn, EffectDamageImmunityIncrease(DAMAGE_TYPE_SONIC, 100)); + eReturn = TagEffect(eReturn, "PRCDamageImmunityAll"); + return eReturn; +} + +effect EffectImmunityMiscAll(){ + effect eReturn = EffectImmunity(IMMUNITY_TYPE_ABILITY_DECREASE); + eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_BLINDNESS)); + eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_DEAFNESS)); + eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_CRITICAL_HIT)); + eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_DEATH)); + eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_DISEASE)); + eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_ENTANGLE)); + eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_SLOW)); + eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_KNOCKDOWN)); + eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_NEGATIVE_LEVEL)); + eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_PARALYSIS)); + eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_SILENCE)); + eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_SNEAK_ATTACK)); + eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_TRAP)); + eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_MIND_SPELLS)); + eReturn = TagEffect(eReturn, "PRCImmunityMiscAll"); + return eReturn; +} + +int GetIsShaken(object oTarget) +{ + effect eEffect = GetFirstEffect(oTarget); + + string sTag; + + while (GetIsEffectValid(eEffect)) + { + sTag = GetEffectTag(eEffect); + + if (sTag == "PRCShaken") return TRUE; + + eEffect = GetNextEffect(oTarget); + } + return FALSE; +} \ No newline at end of file diff --git a/src/include/prc_feat_const.nss b/src/include/prc_feat_const.nss new file mode 100644 index 0000000..a666b3e --- /dev/null +++ b/src/include/prc_feat_const.nss @@ -0,0 +1,6264 @@ +// The error code 5 prevention entry. Comment out or uncomment as necessary +//const int COMPILER_BREAKS_ON_ME_OR_NOT = 0xffffffff; + +//:: PRC Options Conversation +const int FEAT_OPTIONS_CONVERSATION = 2285; + +//:: Missing Bioware Feats +const int FEAT_EPIC_PLANAR_TURNING = 854; + +//:: New Favored Enemy Feats +const int FEAT_FAVORED_ENEMY_OOZE = 2354; +const int FEAT_FAVORED_ENEMY_PLANT = 2355; + +//:: Epic Base Class Marker Feats +const int FEAT_EPIC_DUSKBLADE = 3690; +const int FEAT_EPIC_DREAD_NECROMANCER = 24152; +const int FEAT_EPIC_FAVORED_SOUL = 24241; +const int FEAT_EPIC_HEALER = 3744; +const int FEAT_EPIC_MARSHAL = 1918; +const int FEAT_EPIC_SHAMAN = 24240; +const int FEAT_EPIC_SWASHBUCKLER = 1917; +const int FEAT_EPIC_WARLOCK = 24239; +const int FEAT_EPIC_WARMAGE = 24242; +const int FEAT_EPIC_BINDER = 25002; +const int FEAT_EPIC_SHUGENJA = 25107; + +//:: Epic Presitge Class Marker Feats +const int FEAT_EPIC_ARCANE_TRICKSTER = 4354; +const int FEAT_EPIC_ELDRITCH_KNIGHT = 4013; +const int FEAT_EPIC_ELDRITCH_THEURGE = 23516; +const int FEAT_EPIC_FRENZIED_BERZERKER = 5469; +const int FEAT_EPIC_LASHER = 4086; +const int FEAT_EPIC_OCULAR = 3425; +//const int FEAT_EPIC_RAVAGER = 2395; //Dupe +const int FEAT_EPIC_RED_AVENGER = 2753; +const int FEAT_EPIC_TEMPEST = 5470; + +const int FEAT_EPIC_EYE_OF_GRUUMSH = 25000; +const int FEAT_EPIC_UR_PRIEST = 25001; +const int FEAT_EPIC_ANIMA_MAGE = 25003; +const int FEAT_EPIC_SERENE_GUARDIAN = 25004; +const int FEAT_EPIC_SPELLFIRE_CHANNELER = 25005; +const int FEAT_EPIC_VIRTUOSO = 25006; +const int FEAT_EPIC_SPELLSWORD = 25007; +const int FEAT_EPIC_AOTS = 25008; +const int FEAT_EPIC_UNSEEN_SEER = 25009; +const int FEAT_EPIC_CELEBRANT_OF_SHARESS = 25010; +const int FEAT_EPIC_FORSAKER = 25011; +const int FEAT_EPIC_KOTC = 25012; +const int FEAT_EPIC_HATHRAN = 25013; +const int FEAT_EPIC_ISFM = 25014; +const int FEAT_EPIC_STORMLORD = 25015; +const int FEAT_EPIC_HEARTWARDER = 25016; +const int FEAT_EPIC_FIST_RAZIEL = 25017; +const int FEAT_EPIC_VASSAL = 25018; +const int FEAT_EPIC_SUBLIME_CHORD = 25019; +const int FEAT_EPIC_ARCANE_DUELIST = 25020; +const int FEAT_EPIC_WILD_MAGE = 25021; +const int FEAT_EPIC_SHADOWSMITH = 25022; +const int FEAT_EPIC_OOZEMASTER = 25023; +const int FEAT_EPIC_KOTW = 25024; +const int FEAT_EPIC_DROW_JUDICATOR = 25025; +const int FEAT_EPIC_SHADOWBANE_INQUISITOR = 25026; +const int FEAT_EPIC_SHADOWBANE_STALKER = 25027; +const int FEAT_EPIC_UMBRAL_DISCIPLE = 25028; +const int FEAT_EPIC_ALIENIST = 25029; +const int FEAT_EPIC_BLACK_BLOOD_CULTIST = 25030; +const int FEAT_EPIC_FOCHLUCAN_LYRIST = 25031; +const int FEAT_EPIC_SPINEMELD_WARRIOR = 25032; +const int FEAT_EPIC_NIGHTSHADE = 25033; +const int FEAT_EPIC_SHADOW_ADEPT = 25034; +const int FEAT_EPIC_SOLDIER_OF_LIGHT = 25035; +const int FEAT_EPIC_SAPPHIRE_HIERARCH = 25036; +const int FEAT_EPIC_BONDED_SUMMONER = 25037; +const int FEAT_EPIC_IODM = 25038; +const int FEAT_EPIC_BATTLEGUARD_OF_TEMPUS = 25039; +const int FEAT_EPIC_BLADESINGER = 25040; +const int FEAT_EPIC_SOULCASTER = 25041; +const int FEAT_EPIC_SACRED_FIST = 25042; +const int FEAT_EPIC_LEGENDARY_DREADNOUGHT = 25043; +const int FEAT_EPIC_DISCIPLE_OF_BAALZEBUL = 25044; +const int FEAT_EPIC_MIGHTY_CONTENDER_OF_KORD = 25045; +const int FEAT_EPIC_IAIJUTSU_MASTER = 25046; +const int FEAT_EPIC_DISCIPLE_OF_DISPATER = 25047; +const int FEAT_EPIC_RAVAGER = 25048; +const int FEAT_EPIC_RUNESCARRED_BERZERKER = 25049; +const int FEAT_EPIC_TALONTAR_BLIGHTLORD = 25050; +const int FEAT_EPIC_CHILD_OF_NIGHT = 25051; +const int FEAT_EPIC_MASTER_OF_SHADOW = 25052; +const int FEAT_EPIC_NOCTUMANCER = 25053; +const int FEAT_EPIC_TOTEM_RAGER = 25054; +const int FEAT_EPIC_SHADOWBLADE = 25055; +const int FEAT_EPIC_DRAGON_SHAMAN = 25056; +const int FEAT_EPIC_DRAGONFIRE_ADEPT = 25057; +const int FEAT_EPIC_RED_WIZARD = 25058; +const int FEAT_EPIC_TRUE_NECRO = 25059; +const int FEAT_EPIC_BLOOD_MAGUS = 25060; +const int FEAT_EPIC_DIABOLIST = 25061; +const int FEAT_EPIC_INCANDESCENT_CHAMPION = 25062; +const int FEAT_EPIC_JOWAW = 25063; +const int FEAT_EPIC_ACOLYTE_EGO = 25064; +const int FEAT_EPIC_PEERLESS_ARCHER = 25065; +const int FEAT_EPIC_THRALL_OF_ORCUS = 25066; +const int FEAT_EPIC_BFZ = 25067; +const int FEAT_EPIC_KOTMC = 25068; +const int FEAT_EPIC_SPIRIT_SHAMAN = 25069; +const int FEAT_EPIC_HOSPITALER = 25070; +const int FEAT_EPIC_MOS = 25071; +const int FEAT_EPIC_MASTER_HARPER = 25072; +const int FEAT_EPIC_FOE_HUNTER = 25073; +const int FEAT_EPIC_THRALL_OF_GRAZZT = 25074; +const int FEAT_EPIC_ELDRITCH_DISCIPLE = 25075; +const int FEAT_EPIC_GHOST_FACED_KILLER = 25076; +const int FEAT_EPIC_ULTIMATE_MAGUS = 25077; +const int FEAT_EPIC_FOREST_MASTER = 25078; +const int FEAT_EPIC_JADE_PHOENIX_MAGE = 25079; +const int FEAT_EPIC_RUBY_KNIGHT_VINDICATOR = 25080; +const int FEAT_EPIC_ETERNAL_BLADE = 25081; +const int FEAT_EPIC_SHADOW_SUN_NINJA = 25082; +const int FEAT_EPIC_WITCHBORN_BINDER = 25083; +const int FEAT_EPIC_DISCIPLE_MEPHISTO = 25084; +const int FEAT_EPIC_SOUL_EATER = 25085; +const int FEAT_EPIC_HENSHIN_MYSTIC = 25086; +const int FEAT_EPIC_DRUNKEN_MASTER = 25087; +const int FEAT_EPIC_ENLIGHTENED_FIST = 25088; +//const int FEAT_EPIC_MORNINGLORD = 25089; //Dupe +const int FEAT_EPIC_PYROKINETICIST = 25090; +const int FEAT_EPIC_SHADOWMIND = 25091; +const int FEAT_EPIC_PSYCHIC_THEURGE = 25092; +const int FEAT_EPIC_CEREBREMANCER = 25093; +const int FEAT_EPIC_THRALLHERD = 25094; +const int FEAT_EPIC_FIST_OF_ZOUKEN = 25095; +const int FEAT_EPIC_CONTEMPLATIVE = 25096; +const int FEAT_EPIC_RUNECASTER = 25097; +const int FEAT_EPIC_WARCHIEF = 25098; +const int FEAT_EPIC_WAR_MIND = 25099; +const int FEAT_EPIC_IRON_MIND = 25100; +const int FEAT_EPIC_SLAYER_OF_DOMIEL = 25101; +const int FEAT_EPIC_DISCIPLE_OF_ASMODEUS = 25102; +const int FEAT_EPIC_SUEL_ARCHANAMACH = 25103; +const int FEAT_EPIC_SKULLCLAN_HUNTER = 25104; +const int FEAT_EPIC_MASTER_ALCHEMIST = 25105; +const int FEAT_EPIC_BRIMSTONE_SPEAKER = 25106; +const int FEAT_EPIC_HOTWM = 25108; +const int FEAT_EPIC_TALON_OF_TIAMAT = 25109; +const int FEAT_EPIC_FROST_MAGE = 25110; +const int FEAT_EPIC_BLIGHTER = 25111; +const int FEAT_EPIC_RAGE_MAGE = 25112; +const int FEAT_EPIC_DRAGONHEART_MAGE = 25113; +const int FEAT_EPIC_SWIFT_WING = 25114; +const int FEAT_EPIC_DIAMOND_DRAGON = 25115; +const int FEAT_EPIC_CRUSADER = 25116; +const int FEAT_EPIC_SWORDSAGE = 25117; +const int FEAT_EPIC_WARBLADE = 25118; + +//:: Vile Martial Strike Expansion +const int FEAT_VILE_MARTIAL_EAGLE_CLAW = 24800; +const int FEAT_VILE_MARTIAL_LIGHT_LANCE = 24801; +const int FEAT_VILE_MARTIAL_HEAVY_PICK = 24802; +const int FEAT_VILE_MARTIAL_LIGHT_PICK = 24803; +const int FEAT_VILE_MARTIAL_SAI = 24804; +const int FEAT_VILE_MARTIAL_NUNCHAKU = 24805; +const int FEAT_VILE_MARTIAL_FALCHION = 24806; +const int FEAT_VILE_MARTIAL_SAP = 24807; +const int FEAT_VILE_MARTIAL_KATAR = 24808; +const int FEAT_VILE_MARTIAL_HEAVY_MACE = 24809; +const int FEAT_VILE_MARTIAL_MAUL = 24810; +const int FEAT_VILE_MARTIAL_DBL_SCIMITAR = 24811; +const int FEAT_VILE_MARTIAL_GOAD = 24812; +const int FEAT_VILE_MARTIAL_ELVEN_LIGHTBLADE = 24813; +const int FEAT_VILE_MARTIAL_ELVEN_THINBLADE = 24814; +const int FEAT_VILE_MARTIAL_ELVEN_COURTBLADE = 24815; + +//:: Sanctify Martial Strike Expansion +const int FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW = 24850; +const int FEAT_SANCTIFY_MARTIAL_LIGHT_LANCE = 24851; +const int FEAT_SANCTIFY_MARTIAL_HEAVY_PICK = 24852; +const int FEAT_SANCTIFY_MARTIAL_LIGHT_PICK = 24853; +const int FEAT_SANCTIFY_MARTIAL_SAI = 24854; +const int FEAT_SANCTIFY_MARTIAL_NUNCHAKU = 24855; +const int FEAT_SANCTIFY_MARTIAL_FALCHION = 24856; +const int FEAT_SANCTIFY_MARTIAL_SAP = 24857; +const int FEAT_SANCTIFY_MARTIAL_KATAR = 24858; +const int FEAT_SANCTIFY_MARTIAL_HEAVY_MACE = 24859; +const int FEAT_SANCTIFY_MARTIAL_MAUL = 24860; +const int FEAT_SANCTIFY_MARTIAL_DBL_SCIMITAR = 24861; +const int FEAT_SANCTIFY_MARTIAL_GOAD = 24862; +const int FEAT_SANCTIFY_MARTIAL_ELVEN_LIGHTBLADE = 24863; +const int FEAT_SANCTIFY_MARTIAL_ELVEN_THINBLADE = 24864; +const int FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE = 24865; + +//:: Web Enhancement Feats +const int FEAT_CHARMING_THE_ARROW = 25998; + +//:: Skill Based Feats +const int FEAT_JUMP = 2884; + +//:: Racial Feats +const int FEAT_WEMIC_JUMP_8 = 4518; +const int FEAT_URDINNIR_STONESKIN = 4644; +const int FEAT_AVARIEL_DIVE = 4645; +const int FEAT_AYUAN_FEAR = 4646; +const int FEAT_AYUAN_ENTANGLE = 4647; +const int FEAT_AYUAN_DARKNESS = 4648; +const int FEAT_AYUAN_NEUTRALIZE_POISON = 4649; +const int FEAT_AASIMAR_LIGHT = 4650; +const int FEAT_TIEFLING_DARK = 4651; +const int FEAT_SVIRF_BLIND_DEAF = 4652; +const int FEAT_SVIRF_BLUR = 4653; +const int FEAT_SVIRF_DISGUISE = 4654; +const int FEAT_SVIRF_REVERT = 4655; +const int FEAT_RAK_DISGUISE = 4656; +const int FEAT_RAK_CHANGE_SHAPE = 4657; +const int FEAT_PYUAN_CHARM = 4658; +const int FEAT_PYUAN_DARKNESS = 4659; +const int FEAT_PYUAN_ENTANGLE = 4660; +const int FEAT_PYUAN_FEAR = 4661; +const int FEAT_PIXIE_INVIS = 4662; +const int FEAT_PIXIE_CONFUSE = 4663; +const int FEAT_PIXIE_ENTANGLE = 4664; +const int FEAT_PIXIE_DISPEL_MAGIC = 4665; +const int FEAT_PIXIE_POLYMORPH = 4666; +const int FEAT_PIXIE_REVERT = 4667; +const int FEAT_HYBSIL_MIRROR_IMAGE = 5382; +const int FEAT_HYBSIL_DANCLIGHTS = 5383; +const int FEAT_HYBSIL_JUMP = 5384; +const int FEAT_MINOTAUR_CHARGE = 4668; +const int FEAT_ILLITHID_CHARM = 4669; +const int FEAT_ILLITHID_BLAST = 4670; +const int FEAT_ILLITHID_SUCKBRAIN = 4671; +const int FEAT_GITHZERAI_DAZE = 4672; +const int FEAT_GITHYANKI_DAZE = 4673; +const int FEAT_GITHYANKI_BLUR = 4674; +const int FEAT_FEYRI_CHARMPERSON = 4675; +const int FEAT_FEYRI_CLAIRAUDIENCE = 4676; +const int FEAT_FEYRI_DARKNESS = 4677; +const int FEAT_FEYRI_ENERVATION = 4678; +const int FEAT_FEYRI_ALTER = 4679; +const int FEAT_FEYRI_CHANGE_SHAPE = 4680; +const int FEAT_DUERGAR_INVIS = 4681; +const int FEAT_DROW_DARKNESS = 4682; +const int FEAT_DROW_FAERIE_FIRE = 4683; +const int FEAT_WGNOME_MAGEHAND = 4519; +const int FEAT_WGNOME_SILENCE = 4555; +const int FEAT_HOUND_AURAMENACE = 4548; +const int FEAT_HOUND_AID = 4574; +const int FEAT_HOUND_CONTFLAME = 4514; +const int FEAT_HOUND_DETECTEVIL = 4618; +const int FEAT_HOUND_DISGUISE = 4613; +const int FEAT_HOUND_MAGICCIRCLE = 4515; +const int FEAT_HOUND_TELEPORT = 4516; +const int FEAT_DRIDER_DETECTGOOD = 4543; +const int FEAT_DRIDER_DETECTLAW = 4544; +const int FEAT_RACIAL_SNEAK_1D6 = 4545; + +const int FEAT_RACE_ENERGYRAY = 4856; +const int FEAT_RACE_ENERGYRAYSONIC = 4520; +const int FEAT_ELAN_RESISTANCE = 4521; +const int FEAT_ELAN_RESILIANCE = 4522; +const int FEAT_PSIRACE_STOMP = 4524; +const int FEAT_MAENAD_OUTBURST = 4525; +const int FEAT_XEPH_SPELLHARD = 4527; +const int FEAT_XEPH_BURST = 4526; + +const int FEAT_ZENYTH_TRUESTRIKE = 4536; +const int FEAT_TULADH_MAGIC_CIRCLE = 4533; +const int FEAT_NATHRI_EXP_RETREAT = 4534; +const int FEAT_METAL_HIDE = 4538; +const int FEAT_BLADELING_RAZOR_STORM = 4539; +const int FEAT_NATURAL_SPIKES = 5376; + +const int FEAT_KAPAK_SALIVA = 4546; +const int FEAT_IRDA_FLARE = 4551; +const int FEAT_IRDA_CHANGE_SHAPE = 4562; + +const int FEAT_NIXIE_CHARMPERSON = 4597; +const int FEAT_NIXIE_WATERBREATHING = 4641; +const int FEAT_NYMPH_DIMENSION_DOOR = 4755; +const int FEAT_NYMPH_STUNNING_GLANCE = 4684; +const int FEAT_NYMPH_BLINDING_BEAUTY = 4685; +const int FEAT_GRIG_PYROTECHNICS = 4686; +const int FEAT_GRIG_INVIS = 4687; +const int FEAT_GRIG_ENTANGLE = 4635; +const int FEAT_BRALANI_LIGHTNING_BOLT = 4995; +const int FEAT_BRALANI_CURE_SERIOUS = 4996; +const int FEAT_BRALANI_BLUR = 4997; +const int FEAT_BRALANI_CHARM_PERSON = 4998; +const int FEAT_BRALANI_MIRROR_IMAGE = 4999; +const int FEAT_BRALANI_GUST_OF_WIND = 4978; + +const int FEAT_ASHERATI_BODY_DAZZLE = 5213; //:: Asherati +const int FEAT_ASHERATI_BODY_LAMP = 5214; + +const int FEAT_MUCK_SQUIRT = 5425; //:: Muckdweller + +const int FEAT_ARANEA_ALTFORM = 5426; //:: Aranea +const int FEAT_ARANEA_WEB = 5427; + +const int FEAT_SECONDARY_ATTACKER = 5428; //:: Animal Companions + +const int FEAT_MEPHLING_BREATH = 5429; //:: Mephlings +const int FEAT_AIR_MEPHLING = 5430; +const int FEAT_EARTH_MEPHLING = 5431; +const int FEAT_FIRE_MEPHLING = 5432; +const int FEAT_WATER_MEPHLING = 5433; + +const int FEAT_FOG_CLOUD_BREATH = 5434; //:: Spiretop Dragon +const int FEAT_LTSENSE = 4700; +const int FEAT_LTBLIND = 4701; + +const int FEAT_SPELL5 = 4702; +const int FEAT_SPELL10 = 4420; +const int FEAT_SPELL11 = 4703; +const int FEAT_SPELL13 = 4704; +const int FEAT_SPELL14 = 4705; +const int FEAT_SPELL15 = 4706; +const int FEAT_SPELL18 = 4707; +const int FEAT_SPELL25 = 4708; +const int FEAT_SPELL27 = 4709; + +const int FEAT_DWARVEN = 4710; +const int FEAT_ELVEN = 4711; +const int FEAT_GNOMISH = 4712; +const int FEAT_HALFLING = 4713; +const int FEAT_ORCISH = 4714; +const int FEAT_HUMAN = 4715; +const int FEAT_OUTSIDER = 4716; +const int FEAT_GIANT = 4717; +const int FEAT_FEY = 4718; +const int FEAT_GOBLINOID = 4719; +const int FEAT_MONSTEROUS = 4720; +const int FEAT_REPTILIAN = 4721; +const int FEAT_ABERRATION = 4722; +const int FEAT_ELEMENTAL = 4759; +const int FEAT_UNDEAD = 4769; +const int FEAT_BEAST = 4770; +const int FEAT_VERMIN = 4771; +const int FEAT_DRAGON = 4773; +const int FEAT_PLANT = 4542; +const int FEAT_SHAPECHANGER = 4550; + +const int FEAT_HARD_AIR = 4723; +const int FEAT_HARD_EARTH = 4724; +const int FEAT_HARD_FIRE = 4725; +const int FEAT_HARD_WATER = 4726; +const int FEAT_HARD_ELEC = 4727; +const int FEAT_POISON_3 = 4728; +const int FEAT_POISON_4 = 4768; +const int FEAT_ACCLIMATED_FIRE = 4523; +const int FEAT_PARTIAL_PIERCE_IMMUNE = 4541; + +const int FEAT_IMM_COLD = 4729; +const int FEAT_IMM_PHANT = 4730; +const int FEAT_NONDETECTION = 4731; +const int FEAT_IMM_APOI = 4732; +const int FEAT_PLANT_IMM = 4540; + +const int FEAT_NATARM_1 = 4733; +const int FEAT_NATARM_2 = 4761; +const int FEAT_NATARM_3 = 4734; +const int FEAT_NATARM_4 = 4735; +const int FEAT_NATARM_5 = 4736; +const int FEAT_NATARM_6 = 4737; +const int FEAT_NATARM_7 = 4764; +const int FEAT_NATARM_8 = 4765; +const int FEAT_NATARM_9 = 4738; +const int FEAT_NATARM_10 = 4766; + +const int FEAT_BREATHLESS = 4739; +const int FEAT_CONSTRICT = 4740; +const int FEAT_REGEN5 = 4741; +const int FEAT_REND = 4742; +const int FEAT_RESIST_FIRE5 = 4743; +const int FEAT_SUFFOCATION = 4744; +const int FEAT_VERYHEROIC = 4745; +const int FEAT_VULN_COLD = 4746; +const int FEAT_DAM_RED10 = 4747; +const int FEAT_DAM_RED15 = 4748; +const int FEAT_DAM_RED5 = 4537; +const int FEAT_RESIST_COLD_10 = 4776; +const int FEAT_RESIST_FIRE_10 = 4788; + +const int FEAT_SA_HIDE = 4767; +const int FEAT_SA_MOVE = 4553; +const int FEAT_SA_HIDEU = 4749; +const int FEAT_SA_HIDEF = 4750; +const int FEAT_SA_MOVE4 = 4751; +const int FEAT_SA_JUMP = 4752; +const int FEAT_SA_BLUFF = 4753; +const int FEAT_SA_HIDE4 = 4754; +const int FEAT_SA_CRFTARM = 4757; +const int FEAT_SA_CRFTWEAP = 4758; +const int FEAT_SA_CRFTTRAP = 4517; +const int FEAT_SA_SPOT_4 = 4762; +const int FEAT_SA_JUMP_4 = 4763; +const int FEAT_LEAP = 4772; +const int FEAT_KEEN_SIGHT = 4774; +const int FEAT_SA_APPRAISE = 4792; +const int FEAT_SA_BALANCE = 4511; +const int FEAT_SA_PERSUADE = 4527; +const int FEAT_SA_SENSE_MOTIVE = 4532; +const int FEAT_SA_TUMBLE = 4535; +const int FEAT_SA_INTIMIDATE = 4547; +const int FEAT_SA_PICKPOCKET = 4552; +const int FEAT_SA_HIDE_TROG = 23550; + +const int FEAT_LARGE = 4760; +const int FEAT_AZER_HEAT = 4790; +const int FEAT_SVIRFNEBLIN_DODGE = 4791; +const int FEAT_WATER_BREATHING = 4793; +const int FEAT_ABILITY_SCENT = 4795; + +const int FEAT_CHAMELEON = 4576; +const int FEAT_BONUS_RIVER = 4578; +const int FEAT_BONUS_BAMBOO = 4577; +const int FEAT_BONUS_SEA = 4579; +const int FEAT_SA_LISTEN_4 = 4581; +const int FEAT_SA_BLUFF_4 = 4582; +const int FEAT_RACIAL_SNEAK_6D6 = 4583; +const int FEAT_SUBDUAL = 4584; +const int FEAT_SUBDUAL_ELEMENTS = 4585; +const int FEAT_LESSER_FEY_DR = 4586; +const int FEAT_FEY_DR = 4587; +const int FEAT_POORHEARING = 4588; +const int FEAT_MINUS_PERSUADE_2 = 4589; +const int FEAT_SA_HIDEF_5 = 4590; +const int FEAT_DAYLIGHTADAPT = 4592; +const int FEAT_UNEARTHLY_GRACE = 4593; +const int FEAT_LACKOFFOCUS = 4594; +const int FEAT_PSA_LORESPELL = 4595; +const int FEAT_SA_PERFORM_4 = 4596; +const int FEAT_TINY = 4614; +const int FEAT_SPELL8 = 4615; +const int FEAT_SPELL16 = 4616; +const int FEAT_SPELL17 = 4617; +const int FEAT_SPELL19 = 4619; +const int FEAT_SPELL20 = 4620; +const int FEAT_SPELL21 = 4621; +const int FEAT_SPELL22 = 4622; +const int FEAT_SPELL23 = 4623; +const int FEAT_NATARM_11 = 4624; +const int FEAT_NATARM_12 = 4625; +const int FEAT_NATARM_13 = 4626; +const int FEAT_NATARM_14 = 4627; +const int FEAT_NATARM_15 = 4628; +const int FEAT_NATARM_16 = 4629; +const int FEAT_NATARM_17 = 4630; +const int FEAT_NATARM_18 = 4631; +const int FEAT_NATARM_19 = 4632; +const int FEAT_LIFEPATH = 4636; +const int FEAT_CRAFTGUILD = 4637; +const int FEAT_TECHGUILD = 4638; +const int FEAT_SAGEGUILD = 4639; +const int FEAT_VOWOFSILENCE = 4640; +const int FEAT_COWARDPITY = 4642; +const int FEAT_IMMUNE_PETRIFICATION = 4643; +const int FEAT_BONUS_SONIC_4 = 4686; +const int FEAT_BONUS_PSIONICS_4 = 4687; +const int FEAT_SA_PERFORM = 4756; +const int FEAT_THRIKREEN_LEAP = 4775; +const int FEAT_SA_ANIMAL_EMP = 4777; +const int FEAT_SA_ANIMAL_EMP_6 = 4778; +const int FEAT_KENDERBLUFF = 4779; +const int FEAT_CLAUSTROPHOBIC = 4780; +const int FEAT_IMMUNE_ACID = 4782; +const int FEAT_IMMUNE_CHARM = 4783; +const int FEAT_IMMUNE_CONFUSION = 4784; +const int FEAT_IMMUNE_DISEASE = 4785; +const int FEAT_IMMUNE_ELECTRICITY = 4786; +const int FEAT_VULN_FIRE = 4787; +const int FEAT_FROSTYTOUCH = 4789; +const int FEAT_SA_OPEN = 4794; +const int FEAT_NATPSIONIC_1 = 4796; +const int FEAT_NATPSIONIC_2 = 4797; +const int FEAT_NATPSIONIC_3 = 4798; +const int FEAT_HUGE = 4799; +const int FEAT_SMALL = 375; +const int FEAT_RACE_POWERFUL_BUILD = 4512; +const int FEAT_DRAGON_TRAINING = 4549; +const int FEAT_TOUCH_OF_LUCK = 4634; +const int FEAT_FORESTLORD_TREEWALK = 4633; +const int FEAT_KALASHTAR_PP = 5205; + +const int FEAT_RACE_HARDINESS_VS_DISEASE = 26400; +const int FEAT_NEZUMI_IMMUNE_SHADOWLANDS = 26401; +const int FEAT_NEZUMI_KEEN_SCENT = 26402; + +//:: PnP Weapon Proficiencies +const int FEAT_WEAPON_PROFICIENCY_SHORTSWORD = 7901; +const int FEAT_WEAPON_PROFICIENCY_LONGSWORD = 7902; +const int FEAT_WEAPON_PROFICIENCY_BATTLEAXE = 7903; +const int FEAT_WEAPON_PROFICIENCY_BASTARD_SWORD = 7904; +const int FEAT_WEAPON_PROFICIENCY_LIGHT_FLAIL = 7905; +const int FEAT_WEAPON_PROFICIENCY_WARHAMMER = 7906; +const int FEAT_WEAPON_PROFICIENCY_LONGBOW = 7907; +const int FEAT_WEAPON_PROFICIENCY_LIGHT_MACE = 7908; +const int FEAT_WEAPON_PROFICIENCY_HALBERD = 7909; +const int FEAT_WEAPON_PROFICIENCY_SHORTBOW = 7910; +const int FEAT_WEAPON_PROFICIENCY_TWO_BLADED_SWORD = 7911; +const int FEAT_WEAPON_PROFICIENCY_GREATSWORD = 7912; +const int FEAT_WEAPON_PROFICIENCY_GREATAXE = 7913; +const int FEAT_WEAPON_PROFICIENCY_DART = 7914; +const int FEAT_WEAPON_PROFICIENCY_DIRE_MACE = 7915; +const int FEAT_WEAPON_PROFICIENCY_DOUBLE_AXE = 7916; +const int FEAT_WEAPON_PROFICIENCY_HEAVY_FLAIL = 7917; +const int FEAT_WEAPON_PROFICIENCY_LIGHT_HAMMER = 7918; +const int FEAT_WEAPON_PROFICIENCY_HANDAXE = 7919; +const int FEAT_WEAPON_PROFICIENCY_KAMA = 7920; +const int FEAT_WEAPON_PROFICIENCY_KATANA = 7921; +const int FEAT_WEAPON_PROFICIENCY_KUKRI = 7922; +const int FEAT_WEAPON_PROFICIENCY_MORNINGSTAR = 7923; +const int FEAT_WEAPON_PROFICIENCY_RAPIER = 7924; +const int FEAT_WEAPON_PROFICIENCY_SCIMITAR = 7925; +const int FEAT_WEAPON_PROFICIENCY_SCYTHE = 7926; +const int FEAT_WEAPON_PROFICIENCY_SHORTSPEAR = 7927; +const int FEAT_WEAPON_PROFICIENCY_SHURIKEN = 7928; +const int FEAT_WEAPON_PROFICIENCY_SICKLE = 7929; +const int FEAT_WEAPON_PROFICIENCY_SLING = 7930; +const int FEAT_WEAPON_PROFICIENCY_THROWING_AXE = 7931; +const int FEAT_WEAPON_PROFICIENCY_TRIDENT = 7932; +const int FEAT_WEAPON_PROFICIENCY_DWARVEN_WARAXE = 7933; +const int FEAT_WEAPON_PROFICIENCY_WHIP = 7934; +const int FEAT_WEAPON_PROFICIENCY_ELVEN_LIGHTBLADE = 7935; +const int FEAT_WEAPON_PROFICIENCY_ELVEN_THINBLADE = 7936; +const int FEAT_WEAPON_PROFICIENCY_ELVEN_COURTBLADE = 7937; +const int FEAT_WEAPON_PROFICIENCY_LIGHT_LANCE = 7938; +const int FEAT_WEAPON_PROFICIENCY_HEAVY_PICK = 7939; +const int FEAT_WEAPON_PROFICIENCY_LIGHT_PICK = 7940; +const int FEAT_WEAPON_PROFICIENCY_SAI = 7941; +const int FEAT_WEAPON_PROFICIENCY_NUNCHAKU = 7942; +const int FEAT_WEAPON_PROFICIENCY_FALCHION = 7943; +const int FEAT_WEAPON_PROFICIENCY_SAP = 7944; +const int FEAT_WEAPON_PROFICIENCY_KATAR = 7945; +const int FEAT_WEAPON_PROFICIENCY_HEAVY_MACE = 7946; +const int FEAT_WEAPON_PROFICIENCY_MAUL = 7947; +const int FEAT_WEAPON_PROFICIENCY_DOUBLE_SCIMITAR = 7948; +const int FEAT_WEAPON_PROFICIENCY_GOAD = 7949; +const int FEAT_WEAPON_PROFICIENCY_EAGLE_CLAW = 7950; +const int FEAT_WEAPON_PROFICIENCY_LIGHT_XBOW = 7951; +const int FEAT_WEAPON_PROFICIENCY_HEAVY_XBOW = 7952; +const int FEAT_WEAPON_PROFICIENCY_QUARTERSTAFF = 7953; +const int FEAT_WEAPON_PROFICIENCY_DAGGER = 7954; +const int FEAT_WEAPON_PROFICIENCY_CLUB = 7955; + + +//:: New Weapon Focus Feats +const int FEAT_WEAPON_FOCUS_LIGHT_LANCE = 24601; +const int FEAT_WEAPON_FOCUS_HEAVY_PICK = 24602; +const int FEAT_WEAPON_FOCUS_LIGHT_PICK = 24603; +const int FEAT_WEAPON_FOCUS_SAI = 24604; +const int FEAT_WEAPON_FOCUS_NUNCHAKU = 24605; +const int FEAT_WEAPON_FOCUS_FALCHION = 24606; +const int FEAT_WEAPON_FOCUS_SAP = 24607; +const int FEAT_WEAPON_FOCUS_KATAR = 24608; +const int FEAT_WEAPON_FOCUS_HEAVY_MACE = 24609; +const int FEAT_WEAPON_FOCUS_MAUL = 24610; +const int FEAT_WEAPON_FOCUS_DOUBLE_SCIMITAR = 24611; +const int FEAT_WEAPON_FOCUS_GOAD = 24612; +const int FEAT_WEAPON_FOCUS_EAGLE_CLAW = 24721; +const int FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE = 24697; +const int FEAT_WEAPON_FOCUS_ELVEN_THINBLADE = 24705; +const int FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE = 24713; + +//:: New Weapon Improved Critical Feats +const int FEAT_IMPROVED_CRITICAL_LIGHT_LANCE = 24649; +const int FEAT_IMPROVED_CRITICAL_HEAVY_PICK = 24650; +const int FEAT_IMPROVED_CRITICAL_LIGHT_PICK = 24651; +const int FEAT_IMPROVED_CRITICAL_SAI = 24652; +const int FEAT_IMPROVED_CRITICAL_NUNCHAKU = 24653; +const int FEAT_IMPROVED_CRITICAL_FALCHION = 24654; +const int FEAT_IMPROVED_CRITICAL_SAP = 24655; +const int FEAT_IMPROVED_CRITICAL_KATAR = 24656; +const int FEAT_IMPROVED_CRITICAL_HEAVY_MACE = 24657; +const int FEAT_IMPROVED_CRITICAL_MAUL = 24658; +const int FEAT_IMPROVED_CRITICAL_DBL_SCIMITAR = 24659; +const int FEAT_IMPROVED_CRITICAL_GOAD = 24660; +const int FEAT_IMPROVED_CRITICAL_EAGLE_CLAW = 24725; +const int FEAT_IMPROVED_CRITICAL_ELVEN_LIGHTBLADE = 24701; +const int FEAT_IMPROVED_CRITICAL_ELVEN_THINBLADE = 24709; +const int FEAT_IMPROVED_CRITICAL_ELVEN_COURTBLADE = 24717; + +//:: New Weapon Epic Weapon Focus Feats +const int FEAT_EPIC_WEAPON_FOCUS_LIGHT_LANCE = 24613; +const int FEAT_EPIC_WEAPON_FOCUS_HEAVY_PICK = 24614; +const int FEAT_EPIC_WEAPON_FOCUS_LIGHT_PICK = 24615; +const int FEAT_EPIC_WEAPON_FOCUS_SAI = 24616; +const int FEAT_EPIC_WEAPON_FOCUS_NUNCHAKU = 24617; +const int FEAT_EPIC_WEAPON_FOCUS_FALCHION = 24618; +const int FEAT_EPIC_WEAPON_FOCUS_SAP = 24619; +const int FEAT_EPIC_WEAPON_FOCUS_KATAR = 24620; +const int FEAT_EPIC_WEAPON_FOCUS_HEAVY_MACE = 24621; +const int FEAT_EPIC_WEAPON_FOCUS_MAUL = 24622; +const int FEAT_EPIC_WEAPON_FOCUS_DBL_SCIMITAR = 24623; +const int FEAT_EPIC_WEAPON_FOCUS_GOAD = 24624; +const int FEAT_EPIC_WEAPON_FOCUS_EAGLE_CLAW = 24722; +const int FEAT_EPIC_WEAPON_FOCUS_ELVEN_LIGHTBLADE = 24698; +const int FEAT_EPIC_WEAPON_FOCUS_ELVEN_THINBLADE = 24706; +const int FEAT_EPIC_WEAPON_FOCUS_ELVEN_COURTBLADE = 24714; + +//:: New Weapon Overwhelming Critical Feats +const int FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHT_LANCE = 24661; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVY_PICK = 24662; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHT_PICK = 24663; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_SAI = 24664; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_NUNCHAKU = 24665; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_FALCHION = 24666; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_SAP = 24667; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_KATAR = 24668; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVY_MACE = 24669; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_MAUL = 24670; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_DBL_SCIMITAR = 24671; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_GOAD = 24672; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_EAGLE_CLAW = 24726; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_ELVEN_LIGHTBLADE = 24702; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_ELVEN_THINBLADE = 24710; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_ELVEN_COURTBLADE = 24718; + +//:: New Weapon Devastating Critical Feats +const int FEAT_EPIC_DEVASTATING_CRITICAL_LIGHT_LANCE = 24673; +const int FEAT_EPIC_DEVASTATING_CRITICAL_HEAVY_PICK = 24674; +const int FEAT_EPIC_DEVASTATING_CRITICAL_LIGHT_PICK = 24675; +const int FEAT_EPIC_DEVASTATING_CRITICAL_SAI = 24676; +const int FEAT_EPIC_DEVASTATING_CRITICAL_NUNCHAKU = 24677; +const int FEAT_EPIC_DEVASTATING_CRITICAL_FALCHION = 24678; +const int FEAT_EPIC_DEVASTATING_CRITICAL_SAP = 24679; +const int FEAT_EPIC_DEVASTATING_CRITICAL_KATAR = 24680; +const int FEAT_EPIC_DEVASTATING_CRITICAL_HEAVY_MACE = 24681; +const int FEAT_EPIC_DEVASTATING_CRITICAL_MAUL = 24682; +const int FEAT_EPIC_DEVASTATING_CRITICAL_DBL_SCIMITAR = 24683; +const int FEAT_EPIC_DEVASTATING_CRITICAL_GOAD = 24684; +const int FEAT_EPIC_DEVASTATING_CRITICAL_EAGLE_CLAW = 24727; +const int FEAT_EPIC_DEVASTATING_CRITICAL_ELVEN_LIGHTBLADE = 24703; +const int FEAT_EPIC_DEVASTATING_CRITICAL_ELVEN_THINBLADE = 24711; +const int FEAT_EPIC_DEVASTATING_CRITICAL_ELVEN_COURTBLADE = 24719; + +//:: New Weapon of Choice Feats +const int FEAT_WEAPON_OF_CHOICE_LIGHT_LANCE = 24685; +const int FEAT_WEAPON_OF_CHOICE_HEAVY_PICK = 24686; +const int FEAT_WEAPON_OF_CHOICE_LIGHT_PICK = 24687; +const int FEAT_WEAPON_OF_CHOICE_SAI = 24688; +const int FEAT_WEAPON_OF_CHOICE_NUNCHAKU = 24689; +const int FEAT_WEAPON_OF_CHOICE_FALCHION = 24690; +const int FEAT_WEAPON_OF_CHOICE_SAP = 24691; +const int FEAT_WEAPON_OF_CHOICE_KATAR = 24692; +const int FEAT_WEAPON_OF_CHOICE_HEAVY_MACE = 24693; +const int FEAT_WEAPON_OF_CHOICE_MAUL = 24694; +const int FEAT_WEAPON_OF_CHOICE_DBL_SCIMITAR = 24695; +const int FEAT_WEAPON_OF_CHOICE_GOAD = 24696; +const int FEAT_WEAPON_OF_CHOICE_EAGLE_CLAW = 24728; +const int FEAT_WEAPON_OF_CHOICE_ELVEN_LIGHTBLADE = 24704; +const int FEAT_WEAPON_OF_CHOICE_ELVEN_THINBLADE = 24712; +const int FEAT_WEAPON_OF_CHOICE_ELVEN_COURTBLADE = 24720; + +//:: New Weapon Specialization Feats +const int FEAT_WEAPON_SPECIALIZATION_LIGHT_LANCE = 24625; +const int FEAT_WEAPON_SPECIALIZATION_HEAVY_PICK = 24626; +const int FEAT_WEAPON_SPECIALIZATION_LIGHT_PICK = 24627; +const int FEAT_WEAPON_SPECIALIZATION_SAI = 24628; +const int FEAT_WEAPON_SPECIALIZATION_NUNCHAKU = 24629; +const int FEAT_WEAPON_SPECIALIZATION_FALCHION = 24630; +const int FEAT_WEAPON_SPECIALIZATION_SAP = 24631; +const int FEAT_WEAPON_SPECIALIZATION_KATAR = 24632; +const int FEAT_WEAPON_SPECIALIZATION_HEAVY_MACE = 24633; +const int FEAT_WEAPON_SPECIALIZATION_MAUL = 24634; +const int FEAT_WEAPON_SPECIALIZATION_DBL_SCIMITAR = 24635; +const int FEAT_WEAPON_SPECIALIZATION_GOAD = 24636; +const int FEAT_WEAPON_SPECIALIZATION_EAGLE_CLAW = 24723; +const int FEAT_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE = 24699; +const int FEAT_WEAPON_SPECIALIZATION_ELVEN_THINBLADE = 24707; +const int FEAT_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE = 24715; + +//:: New Weapon Epic Specialization Feats +const int FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_LANCE = 24637; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_PICK = 24638; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_PICK = 24639; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_SAI = 24640; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_NUNCHAKU = 24641; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_FALCHION = 24642; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_SAP = 24643; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_KATAR = 24644; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_MACE = 24645; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_MAUL = 24646; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_DBL_SCIMITAR = 24647; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_GOAD = 24648; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_EAGLE_CLAW = 24724; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE = 24700; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_THINBLADE = 24708; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE = 24716; + +//:: Ability Focus Feats +const int FEAT_ABFOC_DEAFENING_ROAR = 25150; +const int FEAT_ABFOC_SCALDING_GUST = 25151; +const int FEAT_ABFOC_CHARM = 25152; +const int FEAT_ABFOC_FRIGHTFUL_PRESENCE = 25153; +const int FEAT_ABFOC_TERRIFYING_ROAR = 25154; +const int FEAT_ABFOC_BALEFUL_UTTERANCE = 25155; +const int FEAT_ABFOC_CALL_OF_THE_BEAST = 25156; +const int FEAT_ABFOC_DRAIN_INCARNUM = 25157; +const int FEAT_ABFOC_ELDRITCH_GLAIVE = 25158; +const int FEAT_ABFOC_ELDRITCH_SPEAR = 25159; +const int FEAT_ABFOC_FRIGHTFUL_BLAST = 25160; +const int FEAT_ABFOC_HAMMER_BLAST = 25161; +const int FEAT_ABFOC_HIDEOUS_BLOW = 25162; +const int FEAT_ABFOC_MIASMIC_CLOUD = 25163; +const int FEAT_ABFOC_SICKENING_BLAST = 25164; +const int FEAT_ABFOC_SOULREAVING_AURA = 25165; +const int FEAT_ABFOC_BANEFUL_BLAST_ABERRATION = 25166; +const int FEAT_ABFOC_BANEFUL_BLAST_BEAST = 25167; +const int FEAT_ABFOC_BANEFUL_BLAST_CONSTRUCT = 25168; +const int FEAT_ABFOC_BANEFUL_BLAST_DRAGON = 25169; +const int FEAT_ABFOC_BANEFUL_BLAST_DWARF = 25170; +const int FEAT_ABFOC_BANEFUL_BLAST_ELEMENTAL = 25171; +const int FEAT_ABFOC_BANEFUL_BLAST_ELF = 25172; +const int FEAT_ABFOC_BANEFUL_BLAST_FEY = 25173; +const int FEAT_ABFOC_BANEFUL_BLAST_GIANT = 25174; +const int FEAT_ABFOC_BANEFUL_BLAST_GOBLINOID = 25175; +const int FEAT_ABFOC_BANEFUL_BLAST_GNOME = 25176; +const int FEAT_ABFOC_BANEFUL_BLAST_HALFLING = 25177; +const int FEAT_ABFOC_BANEFUL_BLAST_HUMAN = 25178; +const int FEAT_ABFOC_BANEFUL_BLAST_MONSTROUS = 25179; +const int FEAT_ABFOC_BANEFUL_BLAST_OOZE = 25180; +const int FEAT_ABFOC_BANEFUL_BLAST_ORC = 25181; +const int FEAT_ABFOC_BANEFUL_BLAST_OUTSIDER = 25182; +const int FEAT_ABFOC_BANEFUL_BLAST_PLANT = 25183; +const int FEAT_ABFOC_BANEFUL_BLAST_REPTILIAN = 25184; +const int FEAT_ABFOC_BANEFUL_BLAST_SHAPECHANGER = 25185; +const int FEAT_ABFOC_BANEFUL_BLAST_UNDEAD = 25186; +const int FEAT_ABFOC_BANEFUL_BLAST_VERMIN = 25187; +const int FEAT_ABFOC_BESHADOWED_BLAST = 25188; +const int FEAT_ABFOC_BRIMSTONE_BLAST = 25189; +const int FEAT_ABFOC_CURSE_OF_DESPAIR = 25190; +const int FEAT_ABFOC_DREAD_SEIZURE = 25191; +const int FEAT_ABFOC_ELDRITCH_CHAIN = 25192; +const int FEAT_ABFOC_HELLRIME_BLAST = 25193; +const int FEAT_ABFOC_STEAL_INCARNUM = 25194; +const int FEAT_ABFOC_WALL_OF_GLOOM = 25195; +const int FEAT_ABFOC_BEWITCHING_BLAST = 25196; +const int FEAT_ABFOC_ELDRITCH_CONE = 25197; +const int FEAT_ABFOC_ELDRITCH_LINE = 25198; +const int FEAT_ABFOC_ENERVATING_SHADOW = 25199; +const int FEAT_ABFOC_HINDERING_BLAST = 25200; +const int FEAT_ABFOC_INCARNUM_BLAST = 25201; +const int FEAT_ABFOC_NIGHTMARES_MADE_REAL = 25202; +const int FEAT_ABFOC_NOXIOUS_BLAST = 25203; +const int FEAT_ABFOC_PAINFUL_SLUMBER_OF_THE_AGES = 25204; +const int FEAT_ABFOC_PENETRATING_BLAST = 25205; +const int FEAT_ABFOC_UTTERDARK_BLAST = 25206; +const int FEAT_ABFOC_WALL_OF_PERILOUS_FLAME = 25207; +const int FEAT_ABFOC_BINDING_BLAST = 25208; +const int FEAT_ABFOC_ELDRITCH_DOOM = 25209; +const int FEAT_ABFOC_INCARNUM_SHROUD = 25210; +const int FEAT_ABFOC_STEAL_SUMMONING = 25211; +const int FEAT_ABFOC_ELDRITCH_BLAST = 25212; +const int FEAT_ABFOC_WORD_OF_CHANGING = 25213; + +//::: Eldritch Disciple Divine Gifts +const int FEAT_ED_CORRUPTING_BLAST = 23521; +const int FEAT_ED_DAMAGE_REDUCTION = 23522; +const int FEAT_ED_FEARFUL_GLARE = 23523; +const int FEAT_ED_FIENDISH_RESISTANCE = 23524; +const int FEAT_ED_HEALING_BLAST = 23525; +const int FEAT_ED_PROTECTIVE_AURA = 23526; +const int FEAT_ED_STRENGTH_OF_WILL = 23527; +const int FEAT_ED_WILD_FRENZY = 23528; + +//:: Disciple of Asmodeus +const int FEAT_DOA_CHARM = 1961; +const int FEAT_DOA_COMMAND = 1962; +const int FEAT_DOA_HELLCAT = 1963; +const int FEAT_DOA_EVIL_AUTHORITY = 1964; +const int FEAT_DOA_SUMMON_DEVIL = 1965; +const int FEAT_DOA_GREATER_COMMAND = 1966; +const int FEAT_DOA_DREAD_MIGHT = 1967; +const int FEAT_DOA_LEARN_SECRETS = 1968; + +//:: Slayer of Domiel +const int FEAT_SOD_DEATH_TOUCH = 2282; + +//:: Suel Archanamach +const int FEAT_SUEL_TENACIOUS_SPELL = 2397; +const int FEAT_SUEL_IGNORE_SPELL_FAILURE = 2398; +const int FEAT_SUEL_EXTENDED_SPELL = 2399; +const int FEAT_SUEL_DISPELLING_STRIKE = 2400; + +//Passive Feats +const int FEAT_ETERNAL_FREEDOM = 4298; +const int FEAT_INTUITIVE_ATTACK = 3166; +const int FEAT_RAVAGEGOLDENICE = 3162; +const int FEAT_DRAGONSONG = 3440; +const int FEAT_UNDEAD_MASTERY = 3446; +const int FEAT_IMPROVED_FAVORED_ENEMY = 3454; +const int FEAT_FAVORED_POWER_ATTACK = 3455; +const int FEAT_EXTENDED_RAGE = 3456; +const int FEAT_DARKNESS_DOMAIN = 3458; +const int FEAT_STRENGTH_OF_MIND = 1974; +const int FEAT_SPIRIT_SIGHT = 1948; +const int FEAT_AURA_OF_DESPAIR = 24730; +const int FEAT_IMPROVED_AURA_OF_DESPAIR = 24731; + +const int FEAT_FOCUSED_SPELL_PENETRATION_ABJURATION = 3128; +const int FEAT_FOCUSED_SPELL_PENETRATION_CONJURATION = 3129; +const int FEAT_FOCUSED_SPELL_PENETRATION_DIVINATION = 3130; +const int FEAT_FOCUSED_SPELL_PENETRATION_ENCHATMENT = 3131; +const int FEAT_FOCUSED_SPELL_PENETRATION_EVOCATION = 3132; +const int FEAT_FOCUSED_SPELL_PENETRATION_ILLUSION = 3133; +const int FEAT_FOCUSED_SPELL_PENETRATION_NECROMANCY = 3134; +const int FEAT_FOCUSED_SPELL_PENETRATION_TRANSMUTATION = 3135; + +const int FEAT_DISCIPLE_OF_SUN = 3127; +const int FEAT_EMPOWER_TURNING = 3126; +const int FEAT_IMPROVED_TURNING = 3055; + +const int FEAT_PRACTICED_SPELLCASTER_BARD = 3121; +const int FEAT_PRACTICED_SPELLCASTER_CLERIC = 3122; +const int FEAT_PRACTICED_SPELLCASTER_DRUID = 3123; +const int FEAT_PRACTICED_SPELLCASTER_SORCERER = 3124; +const int FEAT_PRACTICED_SPELLCASTER_WIZARD = 3125; +const int FEAT_PRACTICED_SPELLCASTER_KOTW = 3312; +const int FEAT_PRACTICED_SPELLCASTER_PALADIN = 24086; +const int FEAT_PRACTICED_SPELLCASTER_RANGER = 24087; +const int FEAT_PRACTICED_SPELLCASTER_ASSASSIN = 24088; +const int FEAT_PRACTICED_SPELLCASTER_BLACKGUARD = 24089; +const int FEAT_PRACTICED_SPELLCASTER_OCULAR = 24090; +const int FEAT_PRACTICED_SPELLCASTER_HEXBLADE = 24091; +const int FEAT_PRACTICED_SPELLCASTER_DUSKBLADE = 24092; +const int FEAT_PRACTICED_SPELLCASTER_HEALER = 24093; +const int FEAT_PRACTICED_SPELLCASTER_KNIGHT_CHALICE = 24094; +const int FEAT_PRACTICED_SPELLCASTER_NENTYAR = 24095; +const int FEAT_PRACTICED_SPELLCASTER_VASSAL = 24096; +const int FEAT_PRACTICED_SPELLCASTER_UR_PRIEST = 24097; +const int FEAT_PRACTICED_SPELLCASTER_SOLDIER_OF_LIGHT = 24098; +const int FEAT_PRACTICED_SPELLCASTER_SHADOWLORD = 24099; +const int FEAT_PRACTICED_SPELLCASTER_JUSTICEWW = 24100; +const int FEAT_PRACTICED_SPELLCASTER_KNIGHT_MIDDLECIRCLE = 24101; +const int FEAT_PRACTICED_SPELLCASTER_SHAMAN = 24102; +const int FEAT_PRACTICED_SPELLCASTER_SLAYER_OF_DOMIEL = 24103; +const int FEAT_PRACTICED_SPELLCASTER_SUEL_ARCHANAMACH = 24104; +const int FEAT_PRACTICED_SPELLCASTER_FAVOURED_SOUL = 24105; +const int FEAT_PRACTICED_SPELLCASTER_SOHEI = 24106; +const int FEAT_PRACTICED_SPELLCASTER_WARMAGE = 24107; +const int FEAT_PRACTICED_SPELLCASTER_DREAD_NECROMANCER = 24155; +const int FEAT_PRACTICED_SPELLCASTER_CELEBRANT_SHARESS = 24160; +const int FEAT_PRACTICED_SPELLCASTER_CULTIST = 24255; +const int FEAT_PRACTICED_SPELLCASTER_ARCHIVIST = 24256; +const int FEAT_PRACTICED_SPELLCASTER_BEGUILER = 24257; +const int FEAT_PRACTICED_SPELLCASTER_BLIGHTER = 24258; +const int FEAT_PRACTICED_SPELLCASTER_HARPER = 24259; +const int FEAT_PRACTICED_SPELLCASTER_TEMPLAR = 24260; + +const int FEAT_PRACTICED_MANIFESTER_PSION = 24250; +const int FEAT_PRACTICED_MANIFESTER_PSYWAR = 24251; +const int FEAT_PRACTICED_MANIFESTER_WILDER = 24252; +const int FEAT_PRACTICED_MANIFESTER_WARMIND = 24253; +const int FEAT_PRACTICED_MANIFESTER_FIST_OF_ZUOKEN = 24254; +const int FEAT_PRACTICED_MANIFESTER_PSYROG = 24264; + +const int FEAT_PRACTICED_INVOKER_DRAGONFIRE_ADEPT = 24261; +const int FEAT_PRACTICED_INVOKER_WARLOCK = 24262; + +const int FEAT_EPIC_DIVINE_MIGHT = 3120; +const int FEAT_EPIC_DIVINE_RESISTANCE = 3119; +const int FEAT_EPIC_DIVINE_SHIELD = 3548; +const int FEAT_DIVINE_CLEANSING = 3118; +const int FEAT_DIVINE_RESISTANCE = 3117; +const int FEAT_DIVINE_VIGOR = 3116; +const int FEAT_EPIC_DIVINE_VIGOR = 3115; +const int FEAT_INVOKE_DIVINE_WRATH = 3114; +const int FEAT_SHADOWWEAVE = 2960; +const int FEAT_TENACIOUSMAGIC = 2961; +const int FEAT_PERNICIOUSMAGIC = 2962; +const int FEAT_INSIDIOUSMAGIC = 2963; +const int FEAT_UNHOLY_STRIKE = 3451; + +const int FEAT_LEADERSHIP = 4365; +const int FEAT_EPIC_LEADERSHIP = 4366; +const int FEAT_LEGENDARY_COMMANDER = 4367; + +const int FEAT_TWO_WEAPON_REND = 3113; + +const int FEAT_EPIC_SPELLCASTING = 4073; + +const int FEAT_BANE_MAGIC_ABERRATION = 23556; +const int FEAT_BANE_MAGIC_ANIMAL = 23557; +const int FEAT_BANE_MAGIC_BEAST = 23558; +const int FEAT_BANE_MAGIC_CONSTRUCT = 23559; +const int FEAT_BANE_MAGIC_DRAGON = 23560; +const int FEAT_BANE_MAGIC_DWARF = 23561; +const int FEAT_BANE_MAGIC_ELEMENTAL = 23562; +const int FEAT_BANE_MAGIC_ELF = 23563; +const int FEAT_BANE_MAGIC_FEY = 23564; +const int FEAT_BANE_MAGIC_GIANT = 23565; +const int FEAT_BANE_MAGIC_GNOME = 23566; +const int FEAT_BANE_MAGIC_HALFELF = 23567; +const int FEAT_BANE_MAGIC_HALFLING = 23568; +const int FEAT_BANE_MAGIC_HALFORC = 23569; +const int FEAT_BANE_MAGIC_HUMAN = 23570; +const int FEAT_BANE_MAGIC_HUMANOID_GOBLINOID = 23571; +const int FEAT_BANE_MAGIC_HUMANOID_MONSTROUS = 23572; +const int FEAT_BANE_MAGIC_HUMANOID_ORC = 23573; +const int FEAT_BANE_MAGIC_HUMANOID_REPTILIAN = 23574; +const int FEAT_BANE_MAGIC_MAGICAL_BEAST = 23575; +const int FEAT_BANE_MAGIC_OUTSIDER = 23576; +const int FEAT_BANE_MAGIC_SHAPECHANGER = 23577; +const int FEAT_BANE_MAGIC_UNDEAD = 23578; +const int FEAT_BANE_MAGIC_VERMIN = 23579; + +//RotD feats +const int FEAT_KOB_DRAGON_TAIL = 3837; +const int FEAT_KOB_DRAGON_WING_A = 3838; +const int FEAT_KOB_DRAGON_WING_BC = 3839; +const int FEAT_KOB_DRAGON_WING_BG = 3840; +const int FEAT_KOB_DRAGON_WING_BM = 3856; +const int FEAT_KOB_DRAGONWROUGHT_BK = 3841; +const int FEAT_KOB_DRAGONWROUGHT_BL = 3842; +const int FEAT_KOB_DRAGONWROUGHT_GR = 3843; +const int FEAT_KOB_DRAGONWROUGHT_RD = 3844; +const int FEAT_KOB_DRAGONWROUGHT_WH = 3845; +const int FEAT_KOB_DRAGONWROUGHT_AM = 3846; +const int FEAT_KOB_DRAGONWROUGHT_CR = 3847; +const int FEAT_KOB_DRAGONWROUGHT_EM = 3848; +const int FEAT_KOB_DRAGONWROUGHT_SA = 3849; +const int FEAT_KOB_DRAGONWROUGHT_TP = 3850; +const int FEAT_KOB_DRAGONWROUGHT_BS = 3851; +const int FEAT_KOB_DRAGONWROUGHT_BZ = 3852; +const int FEAT_KOB_DRAGONWROUGHT_CP = 3853; +const int FEAT_KOB_DRAGONWROUGHT_GD = 3854; +const int FEAT_KOB_DRAGONWROUGHT_SR = 3855; + +//Dragon Magic +const int FEAT_DRAGON_AUGMENT_STR_1 = 3857; +const int FEAT_DRAGON_AUGMENT_STR_2 = 3858; +const int FEAT_DRAGON_AUGMENT_STR_3 = 3859; +const int FEAT_DRAGON_AUGMENT_STR_4 = 26382; +const int FEAT_DRAGON_AUGMENT_STR_5 = 26383; +const int FEAT_DRAGON_AUGMENT_STR_6 = 26384; +const int FEAT_DRAGON_AUGMENT_STR_7 = 26385; +const int FEAT_DRAGON_AUGMENT_STR_8 = 26386; +const int FEAT_DRAGON_AUGMENT_STR_9 = 26387; + +const int FEAT_DRAGON_AUGMENT_DEX_1 = 3860; +const int FEAT_DRAGON_AUGMENT_DEX_2 = 3861; +const int FEAT_DRAGON_AUGMENT_DEX_3 = 3862; +const int FEAT_DRAGON_AUGMENT_DEX_4 = 26388; +const int FEAT_DRAGON_AUGMENT_DEX_5 = 26389; +const int FEAT_DRAGON_AUGMENT_DEX_6 = 26390; +const int FEAT_DRAGON_AUGMENT_DEX_7 = 26391; +const int FEAT_DRAGON_AUGMENT_DEX_8 = 26392; +const int FEAT_DRAGON_AUGMENT_DEX_9 = 26393; + +const int FEAT_DRAGON_AUGMENT_CON_1 = 3863; +const int FEAT_DRAGON_AUGMENT_CON_2 = 3864; +const int FEAT_DRAGON_AUGMENT_CON_3 = 3865; +const int FEAT_DRAGON_AUGMENT_CON_4 = 26394; +const int FEAT_DRAGON_AUGMENT_CON_5 = 26395; +const int FEAT_DRAGON_AUGMENT_CON_6 = 26396; +const int FEAT_DRAGON_AUGMENT_CON_7 = 26397; +const int FEAT_DRAGON_AUGMENT_CON_8 = 26398; +const int FEAT_DRAGON_AUGMENT_CON_9 = 26399; + +const int FEAT_CHANNEL_DRACLAWS = 3866; +const int FEAT_PSIONIC_BREATH = 3867; +const int FEAT_CHANNEL_DRAWINGS = 3868; +const int FEAT_CHANNEL_DRATAIL = 3869; +const int FEAT_PSIONIC_DRGNFEAR = 3870; +const int FEAT_PSIONIC_DRAGON_IMMUNITY = 3871; +const int FEAT_DRAGON_AFFINITY_BK = 3904; +const int FEAT_DRAGON_AFFINITY_BL = 3905; +const int FEAT_DRAGON_AFFINITY_GR = 3906; +const int FEAT_DRAGON_AFFINITY_RD = 3907; +const int FEAT_DRAGON_AFFINITY_WH = 3908; +const int FEAT_DRAGON_AFFINITY_AM = 3909; +const int FEAT_DRAGON_AFFINITY_CR = 3910; +const int FEAT_DRAGON_AFFINITY_EM = 3911; +const int FEAT_DRAGON_AFFINITY_SA = 3912; +const int FEAT_DRAGON_AFFINITY_TP = 3913; +const int FEAT_DRAGON_AFFINITY_BS = 3914; +const int FEAT_DRAGON_AFFINITY_BZ = 3915; +const int FEAT_DRAGON_AFFINITY_CP = 3916; +const int FEAT_DRAGON_AFFINITY_GD = 3917; +const int FEAT_DRAGON_AFFINITY_SR = 3918; +const int FEAT_BREATH_OF_LIFE = 3919; +const int FEAT_SWIFT_WING_WINGS = 3920; +const int FEAT_DRACONIC_SURGE_STR = 3921; +const int FEAT_DRACONIC_SURGE_DEX = 3922; +const int FEAT_DRACONIC_SURGE_CON = 3923; +const int FEAT_DRACONIC_SURGE_INT = 3924; +const int FEAT_DRACONIC_SURGE_WIS = 3925; +const int FEAT_DRACONIC_SURGE_CHA = 3926; +const int FEAT_DEVOTEE_ABILITY_INCREASE = 3927; +const int FEAT_DEVOTEE_CLAWS = 3929; +const int FEAT_DRACONIC_DEVOTEE = 3930; +const int FEAT_TOT_VOICE_OF_DRAGON = 3928; +const int FEAT_TOT_FIRE_IMMUNITY = 3932; +const int FEAT_TOT_COLD_IMMUNITY = 3933; +const int FEAT_TOT_ACID_IMMUNITY = 3934; +const int FEAT_TOT_ELEC_IMMUNITY = 3935; +const int FEAT_TOT_BREATH_WEAPONS = 3936; +const int FEAT_TOT_DOMINATE_DRAGON = 3937; +const int FEAT_TOT_DRAGONFEAR = 3938; +const int FEAT_SPECIAL_SNEAK_ATTACK_1D6 = 3939; +const int FEAT_SPECIAL_SNEAK_ATTACK_2D6 = 3940; +const int FEAT_SPECIAL_SNEAK_ATTACK_3D6 = 3941; +const int FEAT_SPECIAL_SNEAK_ATTACK_4D6 = 3942; +const int FEAT_SPECIAL_SNEAK_ATTACK_5D6 = 3943; +const int FEAT_SPECIAL_SNEAK_ATTACK_6D6 = 24901; +const int FEAT_SPECIAL_SNEAK_ATTACK_7D6 = 24902; +const int FEAT_SPECIAL_SNEAK_ATTACK_8D6 = 24903; +const int FEAT_SPECIAL_SNEAK_ATTACK_9D6 = 24904; +const int FEAT_SPECIAL_SNEAK_ATTACK_10D6 = 24905; +const int FEAT_SPECIAL_SKIRMISH_1D6 = 3944; +const int FEAT_SPECIAL_SKIRMISH_2D6 = 3945; +const int FEAT_SPECIAL_SKIRMISH_3D6 = 3946; +const int FEAT_SPECIAL_SKIRMISH_4D6 = 3947; +const int FEAT_SPECIAL_SKIRMISH_5D6 = 3948; +const int FEAT_SPECIAL_SKIRMISH_6D6 = 24911; +const int FEAT_SPECIAL_SKIRMISH_7D6 = 24912; +const int FEAT_SPECIAL_SKIRMISH_8D6 = 24913; +const int FEAT_SPECIAL_SKIRMISH_9D6 = 24914; +const int FEAT_SPECIAL_SKIRMISH_10D6 = 24915; +const int FEAT_IMP_DRAGONFIRE_STRIKE = 3950; +const int FEAT_MASTERS_GIFT = 3951; +const int FEAT_TRUE_STEALTH = 3952; +const int FEAT_DRAGONFRIEND = 3988; +const int FEAT_DRAGONTHRALL = 3989; +const int FEAT_FULL_DRAGON_BREATH = 3111; +const int FEAT_ADEPT_SCALES = 3002; +const int FEAT_ADEPT_REDUCTION = 3003; + +//Dragonfire Adept breath effects +const int FEAT_FIRE_ADEPTBREATH = 4979; +const int FEAT_FROST_ADEPTBREATH = 4980; +const int FEAT_ELECTRIC_ADEPTBREATH = 4981; +const int FEAT_SICK_ADEPTBREATH = 4982; +const int FEAT_ACID_ADEPTBREATH = 4983; +const int FEAT_SHAPED_ADEPTBREATH = 4984; +const int FEAT_SLOW_ADEPTBREATH = 4985; +const int FEAT_WEAK_ADEPTBREATH = 4986; +const int FEAT_CLOUD_ADEPTBREATH = 4987; +const int FEAT_ENDURE_ADEPTBREATH = 4988; +const int FEAT_SLEEP_ADEPTBREATH = 4989; +const int FEAT_THUNDER_ADEPTBREATH = 4990; +const int FEAT_BAHAMUT_ADEPTBREATH = 4991; +const int FEAT_FORCE_ADEPTBREATH = 4992; +const int FEAT_PARALYZE_ADEPTBREATH = 4993; +const int FEAT_TIAMAT_ADEPTBREATH = 4994; + +//Metabreath and Breath Channeling +const int FEAT_CLINGING_BREATH = 4966; +const int FEAT_LINGERING_BREATH = 4967; +const int FEAT_ENLARGE_BREATH = 4968; +const int FEAT_HEIGHTEN_BREATH = 4969; +const int FEAT_MAXIMIZE_BREATH = 4970; +const int FEAT_RECOVER_BREATH = 4971; +const int FEAT_SHAPE_BREATH = 4972; +const int FEAT_SPREAD_BREATH = 4973; +const int FEAT_TEMPEST_BREATH = 4974; +const int FEAT_ENTANGLING_EXHALATION = 4975; +const int FEAT_EXHALED_BARRIER = 4976; +const int FEAT_EXHALED_IMMUNITY = 4977; + +//Draconic Feats(from Dragon Magic and RotD) +const int FEAT_DRAGONTOUCHED = 3889; +const int FEAT_DRACONIC_HERITAGE_BK = 3872; +const int FEAT_DRACONIC_HERITAGE_BL = 3873; +const int FEAT_DRACONIC_HERITAGE_GR = 3874; +const int FEAT_DRACONIC_HERITAGE_RD = 3875; +const int FEAT_DRACONIC_HERITAGE_WH = 3876; +const int FEAT_DRACONIC_HERITAGE_AM = 3877; +const int FEAT_DRACONIC_HERITAGE_CR = 3878; +const int FEAT_DRACONIC_HERITAGE_EM = 3879; +const int FEAT_DRACONIC_HERITAGE_SA = 3880; +const int FEAT_DRACONIC_HERITAGE_TP = 3881; +const int FEAT_DRACONIC_HERITAGE_BS = 3882; +const int FEAT_DRACONIC_HERITAGE_BZ = 3883; +const int FEAT_DRACONIC_HERITAGE_CP = 3884; +const int FEAT_DRACONIC_HERITAGE_GD = 3885; +const int FEAT_DRACONIC_HERITAGE_SR = 3886; +const int FEAT_DRACONIC_ARMOR = 3891; +const int FEAT_DRACONIC_BREATH = 3899; +const int FEAT_DRACONIC_CLAW = 3893; +const int FEAT_DRACONIC_GRACE = 3898; +const int FEAT_DRACONIC_KNOWLEDGE = 3888; +const int FEAT_DRACONIC_PERSUADE = 3892; +const int FEAT_DRACONIC_POWER = 3895; +const int FEAT_DRACONIC_PRESENCE = 3894; +const int FEAT_DRACONIC_RESISTANCE = 3896; +const int FEAT_DRACONIC_SENSES = 3897; +const int FEAT_DRACONIC_SKIN = 3887; +const int FEAT_DRACONIC_VIGOR = 3890; +const int FEAT_DRACONIC_BREATH_1_5 = 3901; +const int FEAT_DRACONIC_BREATH_6_9 = 3903; +const int FEAT_DRACONIC_GRACE_1_5 = 3900; +const int FEAT_DRACONIC_GRACE_6_9 = 3902; +const int FEAT_DRAGONFIRE_STRIKE = 3949; +const int FEAT_DRAGONFIRE_ASSAULT = 1842; +const int FEAT_DRAGONFIRE_CHANNELING = 1843; +const int FEAT_DRAGONFIRE_INSPIRATION = 1844; + +// Sandstorm +const int FEAT_BLAZING_BERSERKER = 24023; +const int FEAT_SCORPIONS_RESOLVE = 24024; +const int FEAT_HEAT_ENDURANCE = 5266; +const int FEAT_IMP_HEAT_ENDURANCE = 5265; +const int FEAT_LIGHT_OF_AURIFAR = 5264; +const int FEAT_DRIFT_MAGIC = 5181; +const int FEAT_SCORPIONS_GRASP = 5178; + +// Frostburn +const int FEAT_CRAFT_SKULL_TALISMAN = 3004; +const int FEAT_FROZEN_BERSERKER = 24039; +const int FEAT_SPELL_FOCUS_COLD = 24040; +const int FEAT_GREATER_SPELL_FOCUS_COLD = 24041; +const int FEAT_BECKON_THE_FROZEN = 4247; +const int FEAT_CHOSEN_OF_IBORIGHU = 4248; +const int FEAT_FAITH_IN_THE_FROST = 4249; +const int FEAT_MOUNTAINEER = 4399; +const int FEAT_SNOWFLAKE_WARDANCE = 4489; +const int FEAT_BONUS_DOMAIN_COLD = 5296; +const int FEAT_BONUS_DOMAIN_WINTER = 5297; +const int FEAT_DOMAIN_COLD = 5298; +const int FEAT_DOMAIN_WINTER = 5299; +const int FEAT_FROZEN_MAGIC = 5238; +const int FEAT_COLD_ENDURANCE = 5318; +const int FEAT_IMP_COLD_ENDURANCE = 5317; + +// Lost Empires of Faerun +const int FEAT_CORMANTHYRAN_MOON_MAGIC = 24042; +const int FEAT_JERGALS_PACT = 24043; + +// Player's Guide to Faerun +const int FEAT_BLOODLINE_OF_FIRE = 24044; +const int FEAT_CELEBRANT_SHARESS_FASCINATE = 5361; +const int FEAT_CELEBRANT_SHARESS_CONFUSE = 5362; +const int FEAT_CELEBRANT_SHARESS_DOMINATE = 5363; +const int FEAT_FAVORED_ZULKIRS = 5380; +const int FEAT_EPIC_SPELLFIRE_WIELDER_I = 5399; +const int FEAT_EPIC_SPELLFIRE_WIELDER_II = 5400; +const int FEAT_EPIC_SPELLFIRE_WIELDER_III = 5401; +const int FEAT_EPIC_SPELLFIRE_WIELDER_IV = 5402; +const int FEAT_EPIC_SPELLFIRE_WIELDER_V = 5403; +const int FEAT_EPIC_SPELLFIRE_WIELDER_VI = 5404; +const int FEAT_EPIC_SPELLFIRE_WIELDER_VII = 5405; +const int FEAT_EPIC_SPELLFIRE_WIELDER_VIII = 5406; +const int FEAT_EPIC_SPELLFIRE_WIELDER_IX = 5407; +const int FEAT_EPIC_SPELLFIRE_WIELDER_X = 5408; + +// Power of Faerun +const int FEAT_RULERSHIP = 24045; + +// Races of Faerun +const int FEAT_MIGHT_MAKES_RIGHT = 24046; +const int FEAT_PLAGUE_RESISTANT = 24047; +const int FEAT_JOTUNBRUD = 5176; +const int FEAT_SHIELD_DWARF_WARDER = 3262; + +// Drow of the Underdark +const int FEAT_STEAL_AND_STRIKE = 5191; +const int FEAT_SADISTIC_REWARD = 5185; + +// Underdark +const int FEAT_STRONG_MIND = 24048; +const int FEAT_VAE_SCHOOL = 5285; +const int FEAT_INLINDL_SCHOOL = 5284; +const int FEAT_DIVINE_INTERCESSION = 5283; +const int FEAT_PROFANE_AGONY = 5282; +const int FEAT_SPIDERFRIEND_MAGIC = 5281; +const int FEAT_UNSPEAKABLE_VOW = 5280; +const int FEAT_LOLTHS_BOON = 5279; +const int FEAT_PSYCHIC_REFUSAL = 5278; +const int FEAT_XANIQOS_SCHOOL = 5277; +const int FEAT_DESPANA_SCHOOL = 5324; + +// Races of Stone +const int FEAT_RECKLESS_RAGE = 24049; +const int FEAT_HEAVY_LITHODERMS = 24050; +const int FEAT_MORADINS_SMILE = 24051; +const int FEAT_PIERCING_SIGHT = 24052; +const int FEAT_RAMPAGING_BULL_RUSH = 5378; +const int FEAT_FOCUSED_SHIELD = 3255; +const int FEAT_SHIELDED_CASTING = 3261; + +// Races of Destiny +const int FEAT_MENACING_DEMEANOUR = 24053; + +// Champions of Ruin +const int FEAT_DIRE_FLAIL_SMASH = 5184; +const int FEAT_SHADOWFORM_FAMILIAR = 5183; +const int FEAT_SHADOWSTRIKE = 5182; + +// Races of Eberron +const int FEAT_RELIC_HUNTER = 24054; +const int FEAT_LIVING_CONSTRUCT = 4556; +const int FEAT_COMPOSITE_PLATING = 4554; +const int FEAT_UNARMORED_BODY = 4591; +const int FEAT_IRONWOOD_PLATING = 4598; +const int FEAT_MITHRIL_PLATING = 4599; +const int FEAT_ADAMANTINE_PLATING = 4781; +const int FEAT_ZAKYA_TRUESTRIKE = 4557; +const int FEAT_ZAKYA_CHILLTOUCH = 4570; +const int FEAT_ZAKYA_VAMPTOUCH = 4558; +const int FEAT_BONUS_MIND_2 = 4559; +const int FEAT_RACE_MINOR_SHAPE_CHANGE = 4560; +const int FEAT_IMPROVED_FORTIFICATION = 4580; +const int FEAT_SOULBLADE_WARRIOR = 4854; +const int FEAT_SPIRITUAL_FORCE = 4855; +const int FEAT_STRENGTH_OF_TWO = 4965; +const int FEAT_CHANGELING_CHANGE_SHAPE = 4561; +const int FEAT_RACIAL_EMULATION = 4564; +const int FEAT_CHANGELING_QUICK_CHANGE = 4563; +const int FEAT_SHIELD_OF_THOUGHT = 4565; +const int FEAT_SHIFTER_SHIFTING = 4566; +const int FEAT_SHIFTER_WILDHUNT = 4575; +const int FEAT_SHIFTER_RAZORCLAW = 4567; +const int FEAT_SHIFTER_LONGTOOTH = 4568; +const int FEAT_SHIFTER_LONGSTRIDE = 4569; +const int FEAT_SHIFTER_BEASTHIDE = 4571; +const int FEAT_SHIFTER_DREAMSIGHT = 4572; +const int FEAT_SHIFTER_GOREBRUTE = 4573; +const int FEAT_SHIFTER_WINTERHIDE = 1807; +const int FEAT_BEASTHIDE_ELITE = 1808; +const int FEAT_DREAMSIGHT_ELITE = 1809; +const int FEAT_GOREBRUTE_ELITE = 1810; +const int FEAT_LONGSTRIDE_ELITE = 1811; +const int FEAT_LONGTOOTH_ELITE = 1812; +const int FEAT_RAZORCLAW_ELITE = 1813; +const int FEAT_WILDHUNT_ELITE = 1814; +const int FEAT_EXTRA_SHIFTER_TRAIT = 1815; +const int FEAT_HEALING_FACTOR = 1816; +const int FEAT_SHIFTER_AGILITY = 1817; +const int FEAT_SHIFTER_DEFENSE = 1818; +const int FEAT_GREATER_SHIFTER_DEFENSE = 1819; +const int FEAT_SHIFTER_FEROCITY = 1820; +const int FEAT_SHIFTER_INSTINCTS = 1821; +const int FEAT_SHIFTER_SAVAGERY = 1822; +const int FEAT_SPIKED_BODY = 5174; + +// Races of the Wild +const int FEAT_AGILE_ATHLETE = 24055; +const int FEAT_SHARED_FURY = 24056; +const int FEAT_CATFOLK_POUNCE = 5203; +const int FEAT_EXPEDITIOUS_DODGE = 5202; +const int FEAT_CENTAUR_TRAMPLE = 5418; + +// Libris Mortis +const int FEAT_REQUIEM = 2455; +const int FEAT_CORPSECRAFTER = 4014; +const int FEAT_BOLSTER_RESISTANCE = 4015; +const int FEAT_DEADLY_CHILL = 4016; +const int FEAT_DESTRUCTION_RETRIBUTION = 4017; +const int FEAT_HARDENED_FLESH = 4018; +const int FEAT_NIMBLE_BONES = 4019; + +// Magic of Faerun +const int FEAT_SPELL_GIRDING = 2456; +const int FEAT_ATTUNE_GEM = 2472; + +// Complete Adventurer +const int FEAT_FORCE_PERSONALITY = 2457; +const int FEAT_INSIGHTFUL_REFLEXES = 2458; +const int FEAT_TACTILE_TRAPSMITH = 2459; +const int FEAT_APPRAISE_MAGIC_VALUE = 1998; +const int FEAT_DIVE_FOR_COVER = 2578; +const int FEAT_EXTRAORDINARY_SPELL_AIM = 2599; +const int FEAT_OBSCURE_LORE = 2615; +const int FEAT_OTWF = 5371; +const int FEAT_POWER_THROW = 3249; + +// Complete Divine +const int FEAT_AUGMENT_HEALING = 2460; +const int FEAT_SPELL_FOCUS_CHAOS = 3263; +const int FEAT_SPELL_FOCUS_EVIL = 3264; +const int FEAT_SPELL_FOCUS_GOOD = 3265; +const int FEAT_SPELL_FOCUS_LAWFUL = 3266; + +// Complete Mage +const int FEAT_DAZZLING_ILLUSION = 2617; +const int FEAT_ENERGY_ABJURATION = 2639; +const int FEAT_FEARSOME_NECROMANCY = 2646; +const int FEAT_INSIGHTFUL_DIVINATION = 2668; +const int FEAT_PIERCING_EVOCATION = 2698; +const int FEAT_UNSETTLING_ENCHANTMENT = 2824; +const int FEAT_TOUGHENING_TRANSMUTATION = 2897; +const int FEAT_CLOUDY_CONJURATION = 3001; +const int FEAT_RANGED_RECALL = 5187; +const int FEAT_SOMATIC_WEAPONRY = 5186; + +// Forgotten Realms Campaign Setting +const int FEAT_INSCRIBE_RUNE = 2462; + +// Miniature Handbook +const int FEAT_SHIELDMATE = 3258; +const int FEAT_IMPROVED_SHIELDMATE = 3259; + +// Lords of Madness +const int FEAT_PARRYING_SHIELD = 3260; +const int FEAT_ABERRANT_EYES = 5387; +const int FEAT_ABERRANT_LIMBS = 5388; +const int FEAT_ABERRANT_SEGMENT = 5389; +const int FEAT_ABERRANT_FINGERS = 5390; +const int FEAT_ABERRANT_TAIL = 5391; +const int FEAT_ABERRANT_BESTIAL_HIDE = 5392; +const int FEAT_ABERRANT_DEEPSPAWN = 5393; +const int FEAT_ABERRANT_DURABLE_FORM = 5394; +const int FEAT_ABERRANT_INHUMAN_VISION = 5395; +const int FEAT_ABERRANT_SCAVENGING_GULLET = 5396; +const int FEAT_ABERRANT_WARPED_MIND = 5397; +const int FEAT_ABERRANT_WILD_SHAPE = 5398; + +// Bonus Domains +const int FEAT_BONUS_DOMAIN_AIR = 2001; +const int FEAT_BONUS_DOMAIN_ANIMAL = 2002; +const int FEAT_BONUS_DOMAIN_DEATH = 2003; +const int FEAT_BONUS_DOMAIN_DESTRUCTION = 2004; +const int FEAT_BONUS_DOMAIN_EARTH = 2005; +const int FEAT_BONUS_DOMAIN_EVIL = 2006; +const int FEAT_BONUS_DOMAIN_FIRE = 2007; +const int FEAT_BONUS_DOMAIN_GOOD = 2008; +const int FEAT_BONUS_DOMAIN_HEALING = 2009; +const int FEAT_BONUS_DOMAIN_KNOWLEDGE = 2010; +const int FEAT_BONUS_DOMAIN_MAGIC = 2011; +const int FEAT_BONUS_DOMAIN_PLANT = 2012; +const int FEAT_BONUS_DOMAIN_PROTECTION = 2013; +const int FEAT_BONUS_DOMAIN_STRENGTH = 2014; +const int FEAT_BONUS_DOMAIN_SUN = 2015; +const int FEAT_BONUS_DOMAIN_TRAVEL = 2016; +const int FEAT_BONUS_DOMAIN_TRICKERY = 2017; +const int FEAT_BONUS_DOMAIN_WAR = 2018; +const int FEAT_BONUS_DOMAIN_WATER = 2019; +const int FEAT_BONUS_DOMAIN_DARKNESS = 2020; +const int FEAT_BONUS_DOMAIN_STORM = 2021; +const int FEAT_BONUS_DOMAIN_METAL = 2022; +const int FEAT_BONUS_DOMAIN_PORTAL = 2023; +const int FEAT_BONUS_DOMAIN_FORCE = 2024; +const int FEAT_BONUS_DOMAIN_SLIME = 2025; +const int FEAT_BONUS_DOMAIN_TYRANNY = 2026; +const int FEAT_BONUS_DOMAIN_DOMINATION = 2027; +const int FEAT_BONUS_DOMAIN_SPIDER = 2028; +const int FEAT_BONUS_DOMAIN_UNDEATH = 2029; +const int FEAT_BONUS_DOMAIN_TIME = 2030; +const int FEAT_BONUS_DOMAIN_DWARF = 2031; +const int FEAT_BONUS_DOMAIN_CHARM = 2032; +const int FEAT_BONUS_DOMAIN_ELF = 2033; +const int FEAT_BONUS_DOMAIN_FAMILY = 2034; +const int FEAT_BONUS_DOMAIN_FATE = 2035; +const int FEAT_BONUS_DOMAIN_GNOME = 2036; +const int FEAT_BONUS_DOMAIN_ILLUSION = 2037; +const int FEAT_BONUS_DOMAIN_HATRED = 2038; +const int FEAT_BONUS_DOMAIN_HALFLING = 2039; +const int FEAT_BONUS_DOMAIN_NOBILITY = 2040; +const int FEAT_BONUS_DOMAIN_OCEAN = 2041; +const int FEAT_BONUS_DOMAIN_ORC = 2042; +const int FEAT_BONUS_DOMAIN_RENEWAL = 2043; +const int FEAT_BONUS_DOMAIN_RETRIBUTION = 2044; +const int FEAT_BONUS_DOMAIN_RUNE = 2045; +const int FEAT_BONUS_DOMAIN_SPELLS = 2046; +const int FEAT_BONUS_DOMAIN_SCALEYKIND = 2047; +const int FEAT_BONUS_DOMAIN_BLIGHTBRINGER = 2048; +const int FEAT_BONUS_DOMAIN_DRAGON = 2122; + +// Domain Power Feats +const int FEAT_DOMAIN_POWER_DARKNESS = 3458; +const int FEAT_DOMAIN_POWER_STORM = 4038; +const int FEAT_DOMAIN_POWER_METAL = 4037; +const int FEAT_DOMAIN_POWER_PORTAL = 4039; +const int FEAT_DOMAIN_POWER_FORCE = 4042; +const int FEAT_DOMAIN_POWER_SLIME = 4043; +const int FEAT_DOMAIN_POWER_TYRANNY = 4062; +const int FEAT_DOMAIN_POWER_DOMINATION = 4049; +const int FEAT_DOMAIN_POWER_SPIDER = 4061; +const int FEAT_DOMAIN_POWER_UNDEATH = 4050; +const int FEAT_DOMAIN_POWER_TIME = 4044; +const int FEAT_DOMAIN_POWER_DWARF = 4040; +const int FEAT_DOMAIN_POWER_CHARM = 4045; +const int FEAT_DOMAIN_POWER_ELF = 4059; +const int FEAT_DOMAIN_POWER_FAMILY = 4051; +const int FEAT_DOMAIN_POWER_FATE = 4048; +const int FEAT_DOMAIN_POWER_GNOME = 4058; +const int FEAT_DOMAIN_POWER_ILLUSION = 4053; +const int FEAT_DOMAIN_POWER_HATRED = 4054; +const int FEAT_DOMAIN_POWER_HALFLING = 4052; +const int FEAT_DOMAIN_POWER_NOBILITY = 4055; +const int FEAT_DOMAIN_POWER_OCEAN = 4063; +const int FEAT_DOMAIN_POWER_ORC = 4041; +const int FEAT_DOMAIN_POWER_RENEWAL = 4060; +const int FEAT_DOMAIN_POWER_RETRIBUTION = 4056; +const int FEAT_DOMAIN_POWER_RUNE = 4047; +const int FEAT_DOMAIN_POWER_SPELLS = 4046; +const int FEAT_DOMAIN_POWER_SCALEYKIND = 4057; +const int FEAT_DOMAIN_POWER_BLIGHTBRINGER = 2250; +const int FEAT_DOMAIN_POWER_DRAGON = 4064; + +// Cast Bonus Domain +const int FEAT_CAST_DOMAIN_LEVEL_ONE = 2049; +const int FEAT_CAST_DOMAIN_LEVEL_TWO = 2050; +const int FEAT_CAST_DOMAIN_LEVEL_THREE = 2051; +const int FEAT_CAST_DOMAIN_LEVEL_FOUR = 2052; +const int FEAT_CAST_DOMAIN_LEVEL_FIVE = 2053; +const int FEAT_CAST_DOMAIN_LEVEL_SIX = 2054; +const int FEAT_CAST_DOMAIN_LEVEL_SEVEN = 2055; +const int FEAT_CAST_DOMAIN_LEVEL_EIGHT = 2056; +const int FEAT_CAST_DOMAIN_LEVEL_NINE = 2057; + +const int FEAT_CHECK_DOMAIN_SLOTS = 2000; + +//Vile +const int FEAT_VILE_MARTIAL_CLUB = 3357; +const int FEAT_VILE_MARTIAL_DAGGER = 3358; +const int FEAT_VILE_MARTIAL_MACE = 3359; +const int FEAT_VILE_MARTIAL_LIGHTMACE = FEAT_VILE_MARTIAL_MACE; +const int FEAT_VILE_MARTIAL_MORNINGSTAR = 3360; +const int FEAT_VILE_MARTIAL_QUARTERSTAFF = 3361; +const int FEAT_VILE_MARTIAL_SPEAR = 3362; +const int FEAT_VILE_MARTIAL_SHORTSPEAR = FEAT_VILE_MARTIAL_SPEAR; +const int FEAT_VILE_MARTIAL_SHORTSWORD = 3363; +const int FEAT_VILE_MARTIAL_RAPIER = 3364; +const int FEAT_VILE_MARTIAL_SCIMITAR = 3365; +const int FEAT_VILE_MARTIAL_LONGSWORD = 3366; +const int FEAT_VILE_MARTIAL_GREATSWORD = 3367; +const int FEAT_VILE_MARTIAL_HANDAXE = 3368; +const int FEAT_VILE_MARTIAL_BATTLEAXE = 3369; +const int FEAT_VILE_MARTIAL_GREATAXE = 3370; +const int FEAT_VILE_MARTIAL_HALBERD = 3371; +const int FEAT_VILE_MARTIAL_LIGHTHAMMER = 3372; +const int FEAT_VILE_MARTIAL_LIGHTFLAIL = 3373; +const int FEAT_VILE_MARTIAL_WARHAMMER = 3374; +const int FEAT_VILE_MARTIAL_HEAVYFLAIL = 3375; +const int FEAT_VILE_MARTIAL_SCYTHE = 3376; +const int FEAT_VILE_MARTIAL_KATANA = 3377; +const int FEAT_VILE_MARTIAL_BASTARDSWORD = 3378; +const int FEAT_VILE_MARTIAL_DIREMACE = 3379; +const int FEAT_VILE_MARTIAL_DOUBLEAXE = 3380; +const int FEAT_VILE_MARTIAL_TWOBLADED = 3381; +const int FEAT_VILE_MARTIAL_KAMA = 3382; +const int FEAT_VILE_MARTIAL_KUKRI = 3383; +const int FEAT_VILE_MARTIAL_HEAVYCROSSBOW = 3384; +const int FEAT_VILE_MARTIAL_LIGHTCROSSBOW = 3385; +const int FEAT_VILE_MARTIAL_SLING = 3386; +const int FEAT_VILE_MARTIAL_LONGBOW = 3387; +const int FEAT_VILE_MARTIAL_SHORTBOW = 3396; +const int FEAT_VILE_MARTIAL_SHURIKEN = 3397; +const int FEAT_VILE_MARTIAL_DART = 3398; +const int FEAT_VILE_MARTIAL_SICKLE = 3399; +const int FEAT_VILE_MARTIAL_DWAXE = 3452; +const int FEAT_VILE_MARTIAL_MINDBLADE = 3624; +const int FEAT_VILE_MARTIAL_WHIP = 3598; +const int FEAT_VILE_MARTIAL_TRIDENT = 3599; + +// Weapon Focus (Ray) +const int FEAT_WEAPON_FOCUS_RAY = 4819; +const int FEAT_EPIC_WEAPON_FOCUS_RAY = 4820; + +// Battleguard Tempus +const int TEMPUS_ABILITY_ENHANC1 = 1; +const int TEMPUS_ABILITY_ENHANC2 = 2; +const int TEMPUS_ABILITY_ENHANC3 = 3; +const int TEMPUS_ABILITY_FIRE1D6 = 4; +const int TEMPUS_ABILITY_COLD1D6 = 5; +const int TEMPUS_ABILITY_ELEC1D6 = 6; +const int TEMPUS_ABILITY_KEEN = 7; +const int TEMPUS_ABILITY_ANARCHIC = 8; +const int TEMPUS_ABILITY_AXIOMATIC = 9; +const int TEMPUS_ABILITY_HOLY = 10; +const int TEMPUS_ABILITY_UNHOLY = 11; +const int TEMPUS_ABILITY_VICIOUS = 12; +const int TEMPUS_ABILITY_DISRUPTION= 13; +const int TEMPUS_ABILITY_WOUNDING = 14; +const int TEMPUS_ABILITY_BARSKIN = 15; +const int TEMPUS_ABILITY_CONECOLD = 16; +const int TEMPUS_ABILITY_DARKNESS = 17; +const int TEMPUS_ABILITY_FIREBALL = 18; +const int TEMPUS_ABILITY_HASTE = 19; +const int TEMPUS_ABILITY_IMPROVINV = 20; +const int TEMPUS_ABILITY_LIGHTBOLT = 21; +const int TEMPUS_ABILITY_MAGICMISSILE = 22; +const int TEMPUS_ABILITY_WEB = 23; +const int TEMPUS_ABILITY_VAMPIRE = 24; + +// Polymorph +const int POLY_SHAPEDRAGONGOLD = 130; +const int POLY_SHAPEDRAGONRED = 131; +const int POLY_SHAPEDRAGONPRYS = 132; + + +//Active Feats +const int FEAT_FIST_OF_IRON = 3145; +const int FEAT_POWER_ATTACK_SINGLE_RADIAL = 3143; +const int FEAT_POWER_ATTACK_FIVES_RADIAL = 3144; +const int FEAT_POWER_ATTACK_QUICKS_RADIAL = 3179; +const int FEAT_TELEPORT_MANAGEMENT_RADIAL = 4235; +const int FEAT_ZONE_OF_ANIMATION = 2891; + +// Werewolf Template +const int FEAT_PRESTIGE_WOLF_FORM = 3518; +const int FEAT_PRESTIGE_WEREWOLF_FORM = 3519; +const int FEAT_TRUE_LYCANTHROPE = 3520; +const int FEAT_PRESTIGE_WOLF_EMPATHY = 3521; +const int FEAT_PRESTIGE_WOLFCLASS_1 = 3522; +const int FEAT_PRESTIGE_WOLFCLASS_2 = 3523; +const int FEAT_PRESTIGE_WEREWOLFCLASS_1 = 3524; +const int FEAT_PRESTIGE_WEREWOLFCLASS_2 = 3525; +const int FEAT_PRESTIGE_WEREWOLFCLASS_3 = 3526; +const int FEAT_PRESTIGE_LYCANTHROPE = 3527; + +// Arcane Duelist +const int FEAT_AD_CHOSEN_WEAPON = 3530; +const int FEAT_AD_ENCHANT_CHOSEN_WEAPON = 3531; +const int FEAT_AD_APPARENT_DEFENSE = 3532; +const int FEAT_AD_DEX_ATTACK = 3533; +const int FEAT_AD_FLURRY_OF_SWORDS = 3534; +const int FEAT_AD_FALSE_KEENNESS = 3535; +const int FEAT_AD_BLUR = 3536; +const int FEAT_AD_MISLEAD = 3537; + +//:: Blightlord feats +const int FEAT_BLIGHTMIND = 2249; +const int FEAT_BLIGHTBRINGER = 2250; +const int FEAT_BLIGHTBLOOD = 2251; +const int FEAT_ILLMASTER = 2252; +const int FEAT_BLIGHTTOUCH = 2253; +const int FEAT_BLACKGLAIVE = 2257; +const int FEAT_CORRUPTING_BLOW = 2258; +const int FEAT_WINTERHEART = 2259; + +//:: Ravager feats +const int FEAT_PAIN_TOUCH = 2342; +const int FEAT_AURA_OF_FEAR = 2343; +const int FEAT_CRUELEST_CUT = 2344; +const int FEAT_VISAGE_OF_TERROR = 2345; + +//Drow Judicator Feats +const int FEAT_LOLTHS_MEAT = 2441; +const int FEAT_COMMAND_SPIDERS = 2442; +const int FEAT_WAR_STRIKE = 2443; +const int FEAT_SELVETARMS_WRATH = 2446; +const int FEAT_SELVETARMS_BLESSING = 2447; + +//Ranger Feats +const int FEAT_RANGER_DUAL = 374; +const int FEAT_CAMOUFLAGE = 4486; + +//Exalted Feat +const int FEAT_SAC_VOW = 3388; +const int FEAT_VOW_OBED = 3389; +const int FEAT_EXALTED_TURNING = 3168; +const int FEAT_HAND_HEALER = 3167; +const int FEAT_NIMBUSLIGHT = 3165; +const int FEAT_HOLYRADIANCE = 3164; +const int FEAT_STIGMATA = 3163; +const int FEAT_SERVHEAVEN = 3355; +const int FEAT_RANGED_SMITE = 3356; +const int FEAT_VOW_PURITY = 5360; +const int FEAT_VOWOFPOVERTY = 26002; + +//Vile Feat +const int FEAT_LICHLOVED = 3395; +const int FEAT_THRALL_TO_DEMON = 2616; +const int FEAT_DISCIPLE_OF_DARKNESS = 4012; +const int FEAT_EB_HAND = 3390; +const int FEAT_EB_HEAD = 3391; +const int FEAT_EB_CHEST = 3392; +const int FEAT_EB_ARM = 3393; +const int FEAT_EB_NECK = 3394; +const int FEAT_VILE_DEFORM_OBESE = 4406; +const int FEAT_VILE_DEFORM_GAUNT = 4407; +const int FEAT_VILE_WILL_DEFORM = 4408; +const int FEAT_VILE_DEFORM_SKIN = 5270; + +//archmage +const int FEAT_MASTERY_SHAPES = 3006; +const int FEAT_SPELL_POWER_I = 3007; +const int FEAT_SPELL_POWER_II = 3008; +const int FEAT_SPELL_POWER_III = 3009; +const int FEAT_SPELL_POWER_IV = 3010; +const int FEAT_SPELL_POWER_V = 3011; +const int FEAT_ARCANE_FIRE = 3012; +const int FEAT_SPELL_LIKE = 3013; + +//Master Harper +const int FEAT_LYCANBANE = 2404 ; +const int FEAT_DENEIRS_OREL = 2408 ; +const int FEAT_MILILS_EAR = 2406 ; +const int FEAT_INSTRUMENT = 2409; +const int FEAT_MIELIKKI = 2405; + +// Ghost-Faced Killer +const int FEAT_GFKILL_GHOST_STEP = 4490; +const int FEAT_GFKILL_GHOST_STEP2 = 4491; +const int FEAT_GFKILL_GHOST_STEP3 = 4492; +const int FEAT_GFKILL_GHOST_STEP4 = 4493; +const int FEAT_GFKILL_GHOST_STEP5 = 4494; +const int FEAT_GFKILL_GHOST_STEP6 = 4495; +const int FEAT_GFKILL_GHOST_STEP7 = 4496; +const int FEAT_GFKILL_GHOST_STEP8 = 4497; +const int FEAT_GFKILL_GHOST_STEP9 = 4498; +const int FEAT_GFKILL_GHOST_STEP10 = 4499; +const int FEAT_FRIGHTFUL_ATTACK = 4500; +const int FEAT_FRIGHTFUL_ATTACK2 = 4501; +const int FEAT_FRIGHTFUL_ATTACK3 = 4502; +const int FEAT_FRIGHTFUL_ATTACK4 = 4503; +const int FEAT_FRIGHTFUL_ATTACK5 = 4504; +const int FEAT_FRIGHTFUL_ATTACK6 = 4505; +const int FEAT_FRIGHTFUL_ATTACK7 = 4506; +const int FEAT_FRIGHTFUL_ATTACK8 = 4507; +const int FEAT_FRIGHTFUL_ATTACK9 = 4508; +const int FEAT_FRIGHTFUL_ATTACK20 = 4509; +const int FEAT_FRIGHTFUL_CLEAVE = 4510; + +// Thayan Knight +const int FEAT_TK_HORROR_1 = 2640; +const int FEAT_TK_HORROR_2 = 2641; +const int FEAT_TK_ZULKIR_FAVOUR = 2642; +const int FEAT_TK_ZULKIR_DEFEND = 2643; +const int FEAT_TK_ZULKIR_CHAMP = 2644; +const int FEAT_TK_FINAL_STAND = 2645; + +//oozemaster +const int FEAT_MIN_OOZY_TOUCH_BROWN = 3020; +const int FEAT_MIN_OOZY_TOUCH_GRAY = 3021; +const int FEAT_MIN_OOZY_TOUCH_OCHRE = 3022; +const int FEAT_MIN_OOZY_TOUCH_FUNGUS = 3023; +const int FEAT_OOZY_GLOB1 = 3028; +const int FEAT_OOZY_GLOB2 = 3029; +const int FEAT_OOZY_GLOB3 = 3030; +const int FEAT_OOZY_GLOB4 = 3031; +const int FEAT_OOZY_GLOB5 = 3032; +const int FEAT_INDISCERNIBLE_ANATOMY = 3033; +const int FEAT_CHARISMA_PENALITY = 3034; +const int FEAT_ONE_WITH_THE_OOZE = 3035; + +//disciple mephisto +const int FEAT_HELLFIRE_GRASP = 4000; +const int FEAT_FIRE_ADEPT = 4001; +const int FEAT_FIRE_RESISTANCE_10 = 4002; +const int FEAT_FIRE_RESISTANCE_20 = 4007; +const int FEAT_IMP_SUMMON_HAMATULA = 4011; + +//Mage Killer +const int FEAT_AUGMENT_SUMMON = 2510; +const int FEAT_MK_REF_1 = 2500; +const int FEAT_MK_REF_2 = 2501; +const int FEAT_MK_REF_3 = 2502; +const int FEAT_MK_REF_4 = 2503; +const int FEAT_MK_REF_5 = 2504; +const int FEAT_MK_FORT_1 = 2505; +const int FEAT_MK_FORT_2 = 2506; +const int FEAT_MK_FORT_3 = 2507; +const int FEAT_MK_FORT_4 = 2508; +const int FEAT_MK_FORT_5 = 2509; + +//Epic Mage Killer +const int FEAT_MK_FORT_6 = 2647; +const int FEAT_MK_FORT_7 = 2648; +const int FEAT_MK_FORT_8 = 2649; +const int FEAT_MK_FORT_9 = 2650; +const int FEAT_MK_FORT_10 = 2651; +const int FEAT_MK_FORT_11 = 2652; +const int FEAT_MK_FORT_12 = 2653; +const int FEAT_MK_FORT_13 = 2654; +const int FEAT_MK_FORT_14 = 2655; +const int FEAT_MK_FORT_15 = 2656; +const int FEAT_MK_REF_6 = 2657; +const int FEAT_MK_REF_7 = 2658; +const int FEAT_MK_REF_8 = 2659; +const int FEAT_MK_REF_9 = 2660; +const int FEAT_MK_REF_10 = 2661; +const int FEAT_MK_REF_11 = 2662; +const int FEAT_MK_REF_12 = 2663; +const int FEAT_MK_REF_13 = 2664; +const int FEAT_MK_REF_14 = 2665; +const int FEAT_MK_REF_15 = 2666; + +//Spellsword +const int FEAT_SPELLS_1 = 2512; +const int FEAT_SPELLS_2 = 2513; +const int FEAT_SPELLS_3 = 2514; +const int FEAT_SPELLS_4 = 2515; +const int FEAT_SPELLS_5 = 2516; +const int FEAT_CHANNEL_SPELL_1 = 4688; +const int FEAT_CHANNEL_SPELL_2 = 4689; +const int FEAT_CHANNEL_SPELL_3 = 4690; +const int FEAT_CHANNEL_SPELL_4 = 4691; +const int FEAT_CHANNEL_SPELL_5 = 4692; +const int FEAT_CHANNEL_SPELL_6 = 4693; +const int FEAT_CHANNEL_SPELL_7 = 4694; +const int FEAT_CHANNEL_SPELL_8 = 4695; +const int FEAT_CHANNEL_SPELL_9 = 4696; +const int FEAT_MULTIPLE_CHANNEL_SPELL_1 = 4697; +const int FEAT_MULTIPLE_CHANNEL_SPELL_2 = 4698; +const int FEAT_MULTIPLE_CHANNEL_SPELL_3 = 4699; + +//Epic Spellsword +const int FEAT_SPELLS_6 = 2534; +const int FEAT_SPELLS_7 = 2535; +const int FEAT_SPELLS_8 = 2536; +const int FEAT_SPELLS_9 = 2537; +const int FEAT_SPELLS_10 = 2538; +const int FEAT_SPELLS_11 = 2539; +const int FEAT_SPELLS_12 = 2540; +const int FEAT_SPELLS_13 = 2541; +const int FEAT_SPELLS_14 = 2542; +const int FEAT_SPELLS_15 = 2543; + +//Diabolist +const int FEAT_DIABOL_DIABOLISM_1 = 4236; +const int FEAT_DIABOL_DIABOLISM_2 = 4237; +const int FEAT_DIABOL_DIABOLISM_3 = 4238; +const int FEAT_DIABOL_VILEDIAB = 4239; +const int FEAT_DIABOL_IMPFAM = 4240; + +//Red Wizard of Thay +const int FEAT_RW_RES_ABJ = 4210; +const int FEAT_RW_RES_CON = 4211; +const int FEAT_RW_RES_DIV = 4212; +const int FEAT_RW_RES_ENC = 4213; +const int FEAT_RW_RES_EVO = 4214; +const int FEAT_RW_RES_ILL = 4215; +const int FEAT_RW_RES_NEC = 4216; +const int FEAT_RW_RES_TRS = 4217; +const int FEAT_RW_TF_ABJ = 4218; +const int FEAT_RW_TF_CON = 4219; +const int FEAT_RW_TF_DIV = 4220; +const int FEAT_RW_TF_ENC = 4221; +const int FEAT_RW_TF_EVO = 4222; +const int FEAT_RW_TF_ILL = 4223; +const int FEAT_RW_TF_NEC = 4224; +const int FEAT_RW_TF_TRS = 4225; +const int FEAT_RW_SPOWER_1 = 4226; +const int FEAT_RW_SPOWER_2 = 4227; +const int FEAT_RW_SPOWER_3 = 4228; +const int FEAT_RW_SPOWER_4 = 4229; +const int FEAT_RW_SPOWER_5 = 4230; +const int FEAT_RW_SDEF_1 = 4231; +const int FEAT_RW_SDEF_2 = 4232; +const int FEAT_RW_SDEF_3 = 4233; +const int FEAT_RW_SDEF_4 = 4234; + +//Acolyte of the Skin +const int FEAT_WEAR_FIEND = 2517; +const int FEAT_FLAME_RESISTANT = 2518; +const int FEAT_FIENDISH_GLARE = 2519; +const int FEAT_SKIN_ADAPTION = 2521; +const int FEAT_COLD_RESISTANT = 2522; +const int FEAT_PIT_GLARE = 2523; +const int FEAT_SUMMON_FIEND = 2525; +const int FEAT_SYMBIOSIS = 2526; +const int FEAT_EPIC_SYMBIOSIS_1 = 2544; //here and below: epic +const int FEAT_EPIC_SYMBIOSIS_2 = 2545; +const int FEAT_EPIC_SYMBIOSIS_3 = 2546; +const int FEAT_EPIC_SYMBIOSIS_4 = 2547; +const int FEAT_EPIC_CON_1 = 2527; +const int FEAT_EPIC_CON_2 = 2528; +const int FEAT_EPIC_CON_3 = 2529; +const int FEAT_EPIC_INT_1 = 2532; +const int FEAT_EPIC_INT_2 = 2533; +const int FEAT_ACID_RESISTANT = 2530; +const int FEAT_ELEC_RESISTANT = 2531; + +//Elemental Savant +const int FEAT_ES_TRANS_1 = 2550; +const int FEAT_ES_TRANS_2 = 2551; +const int FEAT_ES_TRANS_3 = 2552; +const int FEAT_ES_RESIST_1 = 2553; +const int FEAT_ES_RESIST_2 = 2554; +const int FEAT_ES_RESIST_3 = 2555; +const int FEAT_ES_FOCUS_1 = 2556; +const int FEAT_ES_FOCUS_2 = 2557; +const int FEAT_ES_FOCUS_3 = 2558; +const int FEAT_ES_PEN_1 = 2559; +const int FEAT_ES_PEN_2 = 2560; +const int FEAT_ES_PEN_3 = 2561; +const int FEAT_ES_PERFECTION = 2562; +const int FEAT_ES_FIRE = 2563; +const int FEAT_ES_COLD = 2564; +const int FEAT_ES_ELEC = 2565; +const int FEAT_ES_ACID = 2566; + +//Epic Elemental Savant + +const int FEAT_ES_FOCUS_4 = 2600; +const int FEAT_ES_FOCUS_5 = 2601; +const int FEAT_ES_FOCUS_6 = 2602; +const int FEAT_ES_FOCUS_7 = 2603; +const int FEAT_ES_FOCUS_8 = 2604; +const int FEAT_ES_FOCUS_9 = 2605; +const int FEAT_ES_FOCUS_10 = 2606; +const int FEAT_ES_PEN_4 = 2607; +const int FEAT_ES_PEN_5 = 2608; +const int FEAT_ES_PEN_6 = 2609; +const int FEAT_ES_PEN_7 = 2610; +const int FEAT_ES_PEN_8 = 2611; +const int FEAT_ES_PEN_9 = 2612; +const int FEAT_ES_PEN_10 = 2613; + +//Duelist +const int FEAT_CANNY_DEFENSE = 2800; +const int FEAT_PRECISE_STRIKE = 2801; +const int FEAT_GRACE = 2803; +const int FEAT_ACROBATIC_CHARGE = 2808; +const int FEAT_ELABORATE_PARRY = 2812; +const int FEAT_EPIC_DUELIST = 2813; + +//Hierophant +const int FEAT_BLAST_INFIDEL = 2814; +const int FEAT_FAITH_HEALING = 2815; +const int FEAT_MASTER_OF_ENERGY = 2816; +const int FEAT_SPELLPOWER_2 = 2817; +const int FEAT_SPELLPOWER_4 = 2818; +const int FEAT_SPELLPOWER_6 = 2819; +const int FEAT_SPELLPOWER_8 = 2820; +const int FEAT_SPELLPOWER_10 = 2821; +const int FEAT_SPELL_LIKE_ABILITY_1 = 2825; +const int FEAT_SPELL_LIKE_ABILITY_2 = 2826; +const int FEAT_SPELL_LIKE_ABILITY_3 = 2827; +const int FEAT_SPELL_LIKE_ABILITY_4 = 2828; +const int FEAT_SPELL_LIKE_ABILITY_5 = 2829; + +//Red Avenger +const int FEAT_FREE_KI_2 = 2750; +const int FEAT_FREE_KI_3 = 2751; +const int FEAT_FREE_KI_4 = 2752; + +// Shifter +const int FEAT_PRESTIGE_SHIFTER_NATURALSPELL = 2917; +const int FEAT_PRESTIGE_SHIFTER_EGWSHAPE_1 = 2906; +const int FEAT_PRESTIGE_SHIFTER_GWSHAPE_1 = 2900; +const int SHIFTER_BLACK_LIST = 2918; +const int FEAT_PRESTIGE_SHIFTER_LEARNSHAPE = 24438; + +//sanctify martial strike +const int FEAT_SANCTIFY_MARTIAL_CLUB = 3194; +const int FEAT_SANCTIFY_MARTIAL_DAGGER = 3195; +const int FEAT_SANCTIFY_MARTIAL_MACE = 3196; +const int FEAT_SANCTIFY_MARTIAL_LIGHTMACE = FEAT_SANCTIFY_MARTIAL_MACE; +const int FEAT_SANCTIFY_MARTIAL_MORNINGSTAR = 3197; +const int FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF= 3198; +const int FEAT_SANCTIFY_MARTIAL_SPEAR = 3199; +const int FEAT_SANCTIFY_MARTIAL_SHORTSPEAR = FEAT_SANCTIFY_MARTIAL_SPEAR; +const int FEAT_SANCTIFY_MARTIAL_SHORTSWORD = 3200; +const int FEAT_SANCTIFY_MARTIAL_RAPIER = 3201; +const int FEAT_SANCTIFY_MARTIAL_SCIMITAR = 3202; +const int FEAT_SANCTIFY_MARTIAL_LONGSWORD = 3203; +const int FEAT_SANCTIFY_MARTIAL_GREATSWORD = 3204; +const int FEAT_SANCTIFY_MARTIAL_HANDAXE = 3205; +const int FEAT_SANCTIFY_MARTIAL_BATTLEAXE = 3206; +const int FEAT_SANCTIFY_MARTIAL_GREATAXE = 3207; +const int FEAT_SANCTIFY_MARTIAL_HALBERD = 3208; +const int FEAT_SANCTIFY_MARTIAL_LIGHTHAMMER = 3209; +const int FEAT_SANCTIFY_MARTIAL_LIGHTFLAIL = 3210; +const int FEAT_SANCTIFY_MARTIAL_WARHAMMER = 3211; +const int FEAT_SANCTIFY_MARTIAL_HEAVYFLAIL = 3212; +const int FEAT_SANCTIFY_MARTIAL_SCYTHE = 3213; +const int FEAT_SANCTIFY_MARTIAL_KATANA = 3214; +const int FEAT_SANCTIFY_MARTIAL_BASTARDSWORD = 3215; +const int FEAT_SANCTIFY_MARTIAL_DIREMACE = 3216; +const int FEAT_SANCTIFY_MARTIAL_DOUBLEAXE = 3217; +const int FEAT_SANCTIFY_MARTIAL_TWOBLADED = 3218; +const int FEAT_SANCTIFY_MARTIAL_KAMA = 3219; +const int FEAT_SANCTIFY_MARTIAL_KUKRI = 3220; +const int FEAT_SANCTIFY_MARTIAL_HEAVYCROSSBOW = 3221; +const int FEAT_SANCTIFY_MARTIAL_LIGHTCROSSBOW = 3222; +const int FEAT_SANCTIFY_MARTIAL_SLING = 3223; +const int FEAT_SANCTIFY_MARTIAL_LONGBOW = 3224; +const int FEAT_SANCTIFY_MARTIAL_SHORTBOW = 3225; +const int FEAT_SANCTIFY_MARTIAL_SHURIKEN = 3226; +const int FEAT_SANCTIFY_MARTIAL_DART = 3227; +const int FEAT_SANCTIFY_MARTIAL_DWAXE = 3170; +const int FEAT_SANCTIFY_MARTIAL_SICKLE = 3169; +const int FEAT_SANCTIFY_MARTIAL_MINDBLADE = 3623; +const int FEAT_SANCTIFY_MARTIAL_WHIP = 3596; +const int FEAT_SANCTIFY_MARTIAL_TRIDENT = 3597; +const int FEAT_SANCTIFYKISTRIKE = 26003; +const int FEAT_HOLYKISTRIKE = 26004; +const int FEAT_FISTOFHEAVENS = 26005; +const int FEAT_VOWABSTINENCE = 26006; +const int FEAT_VOWCHASTITY = 26007; +const int FEAT_GIFTOFFAITH = 26008; + +//heartwarder +const int FEAT_CHARISMA_INC1 = 3230; +const int FEAT_CHARISMA_INC2 = 3231; +const int FEAT_CHARISMA_INC3 = 3232; +const int FEAT_CHARISMA_INC4 = 3233; +const int FEAT_CHARISMA_INC5 = 3234; +const int FEAT_HEART_PASSION = 3235; +const int FEAT_LIPS_RAPTUR = 3236; +const int FEAT_VOICE_SIREN = 3237; +const int FEAT_TEARS_EVERGOLD = 3238; +const int FEAT_FEY_METAMORPH = 3239; +const int FEAT_ELECTRIC_RES_10 = 3240; +const int FEAT_ELECTRIC_RES_15 = 3241; +const int FEAT_ELECTRIC_RES_20 = 3242; +const int FEAT_ELECTRIC_RES_30 = 3243; +const int FEAT_SHOCK_WEAPON = 3244; +const int FEAT_THUNDER_WEAPON = 3245; +const int FEAT_SHOCKING_WEAPON = 3246; +const int FEAT_ELEMENTAL_CONFLAG = 3247; + +// Fist of Raziel +const int FEAT_SMITE_GOOD_ALIGN = 3248; +const int FEAT_HOLY_MARTIAL_STRIKE = 3228; +const int FEAT_MAGIC_CIRCLE_EVIL = 3229; + +const int FEAT_HEALER_10 = 4500; + +// CW Samurai +const int FEAT_KIAI_SMITE = 2352; + +//Master of Shrouds +const int FEAT_MOS_UNDEAD_1 = 3501; +const int FEAT_MOS_UNDEAD_2 = 3502; +const int FEAT_MOS_UNDEAD_3 = 3503; +const int FEAT_MOS_UNDEAD_4 = 3504; + +//Knight of the Chalice +const int DEMONSLAYING_1 = 2754; +const int DEMONSLAYING_2 = 2755; +const int DEMONSLAYING_3 = 2756; +const int DEMONSLAYING_4 = 2757; + +//Peerless Archer Feats +const int FEAT_PA_FLETCH_1 = 4284; +const int FEAT_PA_FLETCH_2 = 4285; +const int FEAT_PA_FLETCH_3 = 4286; +const int FEAT_PA_FLETCH_4 = 4287; +const int FEAT_PA_FLETCH_5 = 4288; +const int FEAT_PA_SNEAK_1D6 = 4289; +const int FEAT_PA_SNEAK_2D6 = 4290; +const int FEAT_PA_SNEAK_3D6 = 4291; +const int FEAT_PA_SNEAK_4D6 = 4292; +const int FEAT_PA_POWERSHOT = 4293; +const int FEAT_PA_IMP_POWERSHOT = 4294; +const int FEAT_PA_SUP_POWERSHOT = 4295; +const int FEAT_EXPERT_BOWYER = 4296; + +//Fist of Hextor Feats +const int FEAT_BSTRIKE_1 = 2669; +const int FEAT_BSTRIKE_2 = 2670; +const int FEAT_BSTRIKE_3 = 2671; +const int FEAT_BSTRIKE_4 = 2672; +const int FEAT_BSTRIKE_5 = 2673; +const int FEAT_BSTRIKE_6 = 2674; +const int FEAT_BSTRIKE_7 = 2675; +const int FEAT_BSTRIKE_8 = 2676; +const int FEAT_BSTRIKE_9 = 2683; +const int FEAT_BSTRIKE_10 = 2684; +const int FEAT_BSTRIKE_11 = 2685; +const int FEAT_BSTRIKE_12 = 2686; +const int FEAT_HEXTOR_BSTRIKE_MODE = 24439; + +//Thrall of Orcus +const int FEAT_TO_CARRION = 4404; +const int FEAT_TO_FEAR = 4405; +const int FEAT_TO_MNR_UNDEAD = 4409; +const int FEAT_TO_PALLOR = 4410; +const int FEAT_TO_DEATHTOUCH = 4411; +const int FEAT_TO_MJR_UNDEAD = 4412; +const int FEAT_TO_NIGHTWING = 4413; +const int AOE_MOB_CARRION = 117; +const int AOE_MOB_PALLOR = 118; + +//True Necromancer +const int AOE_MOB_DES_20 = 111; +const int AOE_MOB_DES_100 = 112; +const int FEAT_TN_CREATEUNDEAD = 4414; +const int FEAT_TN_CREATEGRUNDEAD = 4403; + +//Black Flame Zealot +const int FEAT_SACRED_FLAME = 4426; +const int FEAT_FATEFUL_STRIDE = 4427; + +// Shadowlord +const int SHADOWLORD_BLINDNESS = 2225; +const int SHADOWLORD_DARKNESS = 2226; +const int SHADOWLORD_INVISIBILITY = 2227; +const int SHADOWLORD_HASTE = 2229; +const int SHADOWLORD_IMPROVINVIS = 2230; +const int SHADOWLORD_VAMPITOUCH = 2231; +const int SHADOWLORD_CONFUSION = 2233; +const int SHADOWLORD_INVISPHERE = 2234; + +// Proper Shadow Pounce feat from Crinti Shadow Marauder +const int FEAT_SHADOW_RIDE = 5325; +const int FEAT_SHADOW_POUNCE = 5327; + +// Frenzied Berserker Feats +const int FEAT_FRENZY = 4300; +const int FEAT_REMOVE_FRENZY = 4309; +const int FEAT_GREATER_FRENZY = 4305; +const int FEAT_INSPIRE_FRENZY = 4306; +const int FEAT_REMAIN_CONSCIOUS = 4313; +const int FEAT_DEATHLESS_FRENZY = 4314; +const int FEAT_FREBZK_IMPROVED_POWER_ATTACK = 4310; +const int FEAT_SUPREME_POWER_ATTACK = 4311; +const int FEAT_INTIMIDATING_RAGE = 4312; + +// Eye of Gruumsh Feats +const int FEAT_COMMAND_THE_HORDE = 4600; +const int FEAT_BLINDING_SPITTLE = 4601; +const int FEAT_SWING_BLINDLY = 4602; +const int FEAT_RITUAL_SCARRING = 4603; +const int FEAT_SIGHT_OF_GRUUMSH = 4604; +const int FEAT_BLINDSIGHT_5_FT = 4605; +const int FEAT_BLINDSIGHT_10_FT = 4606; + +// Orc Warlord +const int FEAT_BLOOD_OF_THE_WARLORD = 4608; +const int FEAT_OW_INSPIRE_COURAGE = 4609; +const int FEAT_FINAL_RAGE = 4610; +const int FEAT_RELEASE_HORDE = 4611; +const int FEAT_GATHER_HORDE_I = 4612; +const int FEAT_GATHER_HORDE_II = 4613; + +// Tempest Feats +const int FEAT_GREATER_TWO_WEAPON_FIGHTING = 4315; +const int FEAT_SUPREME_TWO_WEAPON_FIGHTING = 4316; +const int FEAT_PERFECT_TWO_WEAPON_FIGHTING = 4320; +const int FEAT_TWO_WEAPON_DEFENSE = 4317; +const int FEAT_TWO_WEAPON_DEFENSE2 = 4318; +const int FEAT_TWO_WEAPON_DEFENSE3 = 4319; +const int FEAT_ABSOLUTE_AMBIDEX = 4321; + +// Foe Hunter Feats +const int FEAT_RANCOR = 4322; +const int FEAT_HATED_ENEMY_DR = 4323; +const int FEAT_HATED_ENEMY_SR = 4324; +const int FEAT_FH_DEATH_ATTACK = 4325; + +const int FEAT_HATED_ENEMY_DWARF = 4326; +const int FEAT_HATED_ENEMY_ELF = 4327; +const int FEAT_HATED_ENEMY_GNOME = 4328; +const int FEAT_HATED_ENEMY_HALFLING = 4329; +const int FEAT_HATED_ENEMY_HALFELF = 4330; +const int FEAT_HATED_ENEMY_HALFORC = 4331; +const int FEAT_HATED_ENEMY_HUMAN = 4332; +const int FEAT_HATED_ENEMY_ABERRATION = 4333; +const int FEAT_HATED_ENEMY_ANIMAL = 4334; +const int FEAT_HATED_ENEMY_BEAST = 4335; +const int FEAT_HATED_ENEMY_CONSTRUCT = 4336; +const int FEAT_HATED_ENEMY_DRAGON = 4337; +const int FEAT_HATED_ENEMY_GOBLINOID = 4338; +const int FEAT_HATED_ENEMY_MONSTROUS = 4339; +const int FEAT_HATED_ENEMY_ORC = 4340; +const int FEAT_HATED_ENEMY_REPTILIAN = 4341; +const int FEAT_HATED_ENEMY_ELEMENTAL = 4342; +const int FEAT_HATED_ENEMY_FEY = 4343; +const int FEAT_HATED_ENEMY_GIANT = 4344; +const int FEAT_HATED_ENEMY_MAGICAL_BEAST = 4345; +const int FEAT_HATED_ENEMY_OUTSIDER = 4346; +const int FEAT_HATED_ENEMY_SHAPECHANGER = 4347; +const int FEAT_HATED_ENEMY_UNDEAD = 4348; +const int FEAT_HATED_ENEMY_VERMIN = 4349; +const int FEAT_HATED_ENEMY_OOZE = 3469; +const int FEAT_HATED_ENEMY_PLANT = 3470; + +// Thrall of Graz'zt +const int FEAT_TOG_SUMMON_DEMON = 2889; + +// Shadowlord +const int FEAT_SHADOWBLUR = 3304; +const int FEAT_SHADOWDISCOPOR = 3305; +const int FEAT_DEATHATTACK = 3306; +const int FEAT_SHADOWJUMP = 3307; +const int FEAT_SHADOWJUMP2 = 3308; +const int FEAT_SHADOWJUMP3 = 3309; +const int FEAT_SHADOWPOUNCE = 3310; +const int FEAT_SHADOWPOUNCE2 = 3311; +const int FEAT_SHADOWPOUNCE3 = 3312; + +// Battleguard Tempus +const int TEMPUS_ENCHANT_WEAPON = 2220; + +// Bonded Summoner +const int FEAT_RESISTANCE_ELE5 = 3322; +const int FEAT_RESISTANCE_ELE10 = 3323; +const int FEAT_RESISTANCE_ELE15 = 3324; +const int FEAT_RESISTANCE_ELE20 = 3325; +const int FEAT_IMMUNITY_SNEAKATK = 3326; +const int FEAT_IMMUNITY_ELEMENT = 3327; +const int FEAT_IMMUNITY_CRITIK = 3328; +const int FEAT_BONDED_AIR = 3329; +const int FEAT_BONDED_EARTH = 3330; +const int FEAT_BONDED_FIRE = 3331; +const int FEAT_BONDED_WATER = 3332; +const int FEAT_ELE_COMPANION_MED = 3333; +const int FEAT_ELE_COMPANION_LAR = 3334; +const int FEAT_ELE_COMPANION_HUG = 3335; +const int FEAT_ELE_COMPANION_GRE = 3336; +const int FEAT_ELE_COMPANION_ELD = 3337; +const int FEAT_TYPE_ELEMENTAL = 3338; +const int FEAT_SHARE_SPELL = 3339; + +// Sneak Attack +const int FEAT_ROGUE_SNEAK_ATTACK_1D6 = 221; +const int FEAT_ROGUE_SNEAK_ATTACK_2D6 = 345; +const int FEAT_ROGUE_SNEAK_ATTACK_3D6 = 346; +const int FEAT_ROGUE_SNEAK_ATTACK_4D6 = 347; +const int FEAT_ROGUE_SNEAK_ATTACK_5D6 = 348; +const int FEAT_ROGUE_SNEAK_ATTACK_6D6 = 349; +const int FEAT_ROGUE_SNEAK_ATTACK_7D6 = 350; +const int FEAT_ROGUE_SNEAK_ATTACK_8D6 = 351; +const int FEAT_ROGUE_SNEAK_ATTACK_9D6 = 352; +const int FEAT_ROGUE_SNEAK_ATTACK_10D6 = 353; +const int FEAT_ROGUE_SNEAK_ATTACK_11D6 = 1032; +const int FEAT_ROGUE_SNEAK_ATTACK_12D6 = 1033; +const int FEAT_ROGUE_SNEAK_ATTACK_13D6 = 1034; +const int FEAT_ROGUE_SNEAK_ATTACK_14D6 = 1035; +const int FEAT_ROGUE_SNEAK_ATTACK_15D6 = 1036; +const int FEAT_ROGUE_SNEAK_ATTACK_16D6 = 1037; +const int FEAT_ROGUE_SNEAK_ATTACK_17D6 = 1038; +const int FEAT_ROGUE_SNEAK_ATTACK_18D6 = 1039; +const int FEAT_ROGUE_SNEAK_ATTACK_19D6 = 1040; +const int FEAT_ROGUE_SNEAK_ATTACK_20D6 = 1041; + +//Iaijutsu Master Feats + Skill + +//const int SKILL_IAIJUTSU_FOCUS = 27; //CONSTANT Moved to prc_misc_const +const int FEAT_SKILL_FOCUS_IAI = 2377; +const int FEAT_EPIC_SKILL_FOCUS_IAI = 2378; +const int FEAT_EPIC_IAIJUTSU_FOCUS = 2315; //CONSTANT +const int FEAT_STRIKE_VOID = 2316; //CONSTANT +const int FEAT_TWO_CUTS = 2317; //CONSTANT +const int FEAT_ECHOS_EDGE_1 = 2318; //CONSTANT +const int FEAT_ECHOS_EDGE_2 = 2319; //CONSTANT +const int FEAT_ECHOS_EDGE_3 = 2320; //CONSTANT +const int FEAT_ECHOS_EDGE_4 = 2321; //CONSTANT +const int FEAT_ECHOS_EDGE_5 = 2322; //CONSTANT +const int FEAT_ECHOS_EDGE_6 = 2323; //CONSTANT +const int FEAT_SPIRIT_STRIKE_1 = 2324; //CONSTANT +const int FEAT_SPIRIT_STRIKE_2 = 2325; //CONSTANT +const int FEAT_SPIRIT_STRIKE_3 = 2326; //CONSTANT +const int FEAT_SPIRIT_STRIKE_4 = 2327; //CONSTANT +const int FEAT_SPIRIT_STRIKE_5 = 2328; //CONSTANT +const int FEAT_SPIRIT_STRIKE_6 = 2329; //CONSTANT +const int FEAT_KATANA_FINESSE = 2330; //CONSTANT +const int FEAT_IAIJUTSU_ATTACK = 2331; //CONSTANT +const int FEAT_EPIC_IAIJUTSU = 2332; + +//Legendary Dread Feats +const int FEAT_UNSTOPPABLE_1 = 2300; //CONSTANT +const int FEAT_UNSTOPPABLE_2 = 2301; //CONSTANT +const int FEAT_UNSTOPPABLE_3 = 2302; //CONSTANT +const int FEAT_UNSTOPPABLE_4 = 2303; //CONSTANT +const int FEAT_UNMOVABLE_1 = 2304; //CONSTANT +const int FEAT_UNMOVABLE_2 = 2305; //CONSTANT +const int FEAT_UNMOVABLE_3 = 2306; //CONSTANT +const int FEAT_UNMOVABLE_4 = 2307; //CONSTANT + +//Disciple of Baalzebul Feats +const int FEAT_KING_LIES = 2308; //CONSTANT +const int FEAT_TONGUE_DEVIL = 2309; //CONSTANT +const int FEAT_SUGGESTION = 2310; //CONSTANT +const int FEAT_SUMMON_OSYLUTH = 2311; //CONSTANT +const int FEAT_INSECT_PLAGUE = 2312; //CONSTANT +const int FEAT_SUMMON_CORNUGON = 2313; //CONSTANT +const int FEAT_BEGUILEING_NATURE = 2314; //CONSTANT + +const int FEAT_DEVICE_LORE = 2333; +const int FEAT_IRON_HEWS = 2334; +const int FEAT_RUSTING_GRASP = 2335; +const int FEAT_IRON_POWER_1 = 2336; +const int FEAT_IRON_POWER_2 = 2337; +const int FEAT_SUMMON_ERINYES = 2338; +const int FEAT_GREATER_IRON_HEWS = 2339; +const int FEAT_IRON_SKIN = 2340; +const int FEAT_IRON_BODY = 2341; + +const int FEAT_COFFIN_SANCTUARY = 2343; +const int FEAT_GASEOUS_FORM = 2344; + +const int FEAT_WEAPON_TEMPUS_CLUB = 3268; +const int FEAT_WEAPON_TEMPUS_DAGGER = 3269; +const int FEAT_WEAPON_TEMPUS_MACE = 3270; +const int FEAT_WEAPON_TEMPUS_MORNINGSTAR = 3271; +const int FEAT_WEAPON_TEMPUS_QUARTERSTAFF= 3272; +const int FEAT_WEAPON_TEMPUS_SPEAR = 3273; +const int FEAT_WEAPON_TEMPUS_SHORTSWORD = 3274; +const int FEAT_WEAPON_TEMPUS_RAPIER = 3275; +const int FEAT_WEAPON_TEMPUS_SCIMITAR = 3276; +const int FEAT_WEAPON_TEMPUS_LONGSWORD = 3277; +const int FEAT_WEAPON_TEMPUS_GREATSWORD = 3278; +const int FEAT_WEAPON_TEMPUS_HANDAXE = 3279; +const int FEAT_WEAPON_TEMPUS_BATTLEAXE = 3280; +const int FEAT_WEAPON_TEMPUS_GREATAXE = 3281; +const int FEAT_WEAPON_TEMPUS_HALBERD = 3282; +const int FEAT_WEAPON_TEMPUS_LIGHTHAMMER = 3283; +const int FEAT_WEAPON_TEMPUS_LIGHTFLAIL = 3284; +const int FEAT_WEAPON_TEMPUS_WARHAMMER = 3285; +const int FEAT_WEAPON_TEMPUS_HEAVYFLAIL = 3286; +const int FEAT_WEAPON_TEMPUS_SCYTHE = 3287; +const int FEAT_WEAPON_TEMPUS_KATANA = 3288; +const int FEAT_WEAPON_TEMPUS_BASTARDSWORD= 3289; +const int FEAT_WEAPON_TEMPUS_DIREMACE = 3290; +const int FEAT_WEAPON_TEMPUS_DOUBLEAXE = 3291; +const int FEAT_WEAPON_TEMPUS_TWOBLADED = 3292; +const int FEAT_WEAPON_TEMPUS_KAMA = 3293; +const int FEAT_WEAPON_TEMPUS_KUKRI = 3294; +const int FEAT_ARMY_POWER = 3295; +const int FEAT_BATTLEFORGER = 3296; +const int FEAT_DIEHARD = 3297; +const int FEAT_ENCHANT_WEAPON1 = 3299; +const int FEAT_ENCHANT_WEAPON2 = 3300; +const int FEAT_ENCHANT_WEAPON3 = 3301; +const int FEAT_WEAPON_TEMPUS_SICKLE = 3171; +const int FEAT_WEAPON_TEMPUS_DWARVENAXE = 3172; +const int FEAT_WEAPON_TEMPUS_MINDBLADE = 3625; + + +// Initiate of Draconic +const int FEAT_CLAWDRAGON = 3341; +const int FEAT_INCREASE_DAMAGE1 = 3342; +const int FEAT_INCREASE_DAMAGE2 = 3343; +const int FEAT_INIDR_SPELLRESISTANCE = 3345; +const int FEAT_INIDR_STUNSTRIKE = 3346; +const int FEAT_INIDR_SHAPEDRAGON = 3347; +const int FEAT_CLAWENH2 = 3348; +const int FEAT_CLAWENH3 = 3349; +const int FEAT_EPIC_INCREASE_DAMAGE1 = 3186; +const int FEAT_EPIC_INCREASE_DAMAGE2 = 3187; +const int FEAT_EPIC_INCREASE_DAMAGE3 = 3188; +const int FEAT_EPIC_INCREASE_DAMAGE4 = 3189; +const int FEAT_EPIC_INCREASE_DAMAGE5 = 3177; + +//:: Bladesinger +const int FEAT_BLADESONG_STYLE = 3190; +const int FEAT_LESSER_SPELLSONG = 3191; +const int FEAT_GREATER_SPELLSONG = 3192; +const int FEAT_SONG_OF_FURY = 3193; + +// Archer +const int FEAT_EXTRASHOT = 3180; +const int FEAT_BOWSPEC2 = 3181; +const int FEAT_BOWSPEC3 = 3182; +const int FEAT_BOWSPEC4 = 3183; +const int FEAT_BOWSPEC5 = 3184; +const int FEAT_BOWSPEC6 = 3185; +const int FEAT_BOWSPEC7 = 3107; +const int FEAT_BOWSPEC8 = 3108; +const int FEAT_BOWSPEC9 = 3109; + +const int FEAT_KILLINGSHOT = 3352; +const int FEAT_PERFECTSHOT = 3353; +const int FEAT_PERFECTSHOT2 = 3354; + +const int FEAT_BOWMASTERY = 3174; +const int FEAT_XBOWMASTERY = 3175; +const int FEAT_SHURIKENMASTERY = 3176; + +// Man At Arm + +const int FEAT_GENERAL_SPECIALIZATION = 3100; +const int FEAT_MASTER_CRITICAL = 3101; +const int FEAT_FOCUSED_STRIKE = 3102; +const int FEAT_STRIKE_AT_CORE = 3103; +const int FEAT_FURIOUS_ASSAULT = 3104; +const int FEAT_LEGENDARY_PROWESS = 3105; + + +//Soldier of Light +const int FEAT_SOL_DIVINE_GRACE = 3140; +const int FEAT_SMITE_UNDEAD = 3139; +const int FEAT_POSITIVE_FORTITUDE = 3140; +const int FEAT_ENERGON_COMPANION = 3141; +const int FEAT_POSITIVE_ENERGY_BURST = 3146; +const int FEAT_DIVINE_VENGEANCE = 3142; +const int FEAT_SOL_FAST_HEALING_1 = 3137; +const int FEAT_SOL_FAST_HEALING_2 = 3138; +const int FEAT_SOL_FAST_HEALING_3 = 3314; +const int FEAT_MAXIMIZE_TURNING = 3315; +const int FEAT_SUP_POSITIVE_ENERGY_BURST = 3316; + +// Blood Archer +const int FEAT_BLARCH_POISON_BLOOD = 4200; + +// Henshin Mystic feat.2da spell.2da +const int FEAT_PRESTIGE_RIDDLE_OF_AWARENESS = 4020; // 2260 +const int FEAT_PRESTIGE_HAPPO_ZANSHIN = 4021; // 2261 +const int FEAT_PRESTIGE_RIDDLE_OF_INTERACTION = 4022; // 2262 +const int FEAT_PRESTIGE_BLINDSIGHT = 4023; // 2263 +const int FEAT_PRESTIGE_HITSU_DO = 4024; // 2264 +const int FEAT_PRESTIGE_WALK_THROUGH_THE_MOUNTAINS = 4025; // 2265 +const int FEAT_PRESTIGE_RIDDLE_OF_INVULNERABILITY = 4026; // 2266 + +// Drunken Master +const int FEAT_PRESTIGE_DRINK_LIKE_A_DEMON = 4027; // 2267 +const int FEAT_PRESTIGE_BOTTLE_PROFICIENCY = 4028; // 2268 +const int FEAT_PRESTIGE_STAGGER = 4029; // 2269 +const int FEAT_PRESTIGE_SWAYING_WAIST = 4030; // 2270 +const int FEAT_PRESTIGE_DRUNKEN_RAGE = 4031; // 2271 +const int FEAT_PRESTIGE_LURCH = 4032; // 2272 +const int FEAT_PRESTIGE_DRUNKEN_EMBRACE = 4033; // 2273 +const int FEAT_PRESTIGE_FOR_MEDICINAL_PURPOSES = 4034; // 2274 +const int FEAT_PRESTIGE_BREATH_OF_FLAME = 4035; // 2275 + +//Hathran class feats +const int FEAT_HATH_COHORT = 2571; //CONSTANT +const int FEAT_HATH_COMMAND = 2572; //CONSTANT +const int FEAT_HATH_FEAR1 = 2575; //CONSTANT +const int FEAT_HATH_FEAR2 = 2576; //CONSTANT [DEFUNCT] +const int FEAT_HATH_FEAR3 = 2577; //CONSTANT [DEFUNCT] + +//Vigilant class feats +const int FEAT_VIGIL_ARMOR = 2570; //CONSTANT +const int FEAT_SPRINT = 2573; //CONSTANT +const int FEAT_VIGIL_HEAL = 2574; //CONSTANT + +//Prerequisitie feats (Hathran and Vigilant) +const int FEAT_ETHRAN = 2567; //CONSTANT +const int FEAT_ENDURANCE = 2568; //CONSTANT +const int FEAT_TRACK = 2569; //CONSTANT + +// Sacred Fist +const int FEAT_SF_AC1 = 2933; +const int FEAT_SF_AC2 = 2934; +const int FEAT_SF_AC3 = 2935; +const int FEAT_SF_AC4 = 2936; +const int FEAT_SF_AC5 = 2937; +const int FEAT_SF_AC6 = 2938; +const int FEAT_SF_AC7 = 2939; +const int FEAT_SF_UNARMEDDMG = 2932; +const int FEAT_SF_INNERARMOR = 2940; +const int FEAT_SF_SACREDFLAME1 = 2941; +const int FEAT_SF_SACREDFLAME2 = 2942; +const int FEAT_SF_SACREDFLAME3 = 2943; +const int FEAT_SF_SACREDFLAME4 = 2944; +const int FEAT_SF_SACREDFLAME5 = 2945; +const int FEAT_SF_SACREDFLAME6 = 2946; +const int FEAT_SF_SACREDFLAME7 = 2947; +const int FEAT_SF_SPEED1 = 2948; +const int FEAT_SF_SPEED2 = 2949; +const int FEAT_SF_SPEED3 = 2950; +const int FEAT_SF_CODE = 2951; + +// Shadow Adept +const int FEAT_SA_SHADOWDEF1 = 2952; +const int FEAT_SA_SHADOWDEF2 = 2953; +const int FEAT_SA_SHADOWDEF3 = 2954; +const int FEAT_SA_SHADOWDEPIC = 2955; +const int FEAT_SA_SHIELDSHADOW = 2956; +const int FEAT_SA_GREATSHIELDSHADOW = 2957; +const int FEAT_SA_SHADOWWALK = 2958; +const int FEAT_SA_SHADOWDOUBLE = 2959; + +// Brawler +const int FEAT_BRAWLER_FISTS = 4428; +const int FEAT_EPIC_BRAWLER = 4437; +const int FEAT_BRAWLER_BLOCK_1 = 4438; +const int FEAT_BRAWLER_BLOCK_2 = 4439; +const int FEAT_BRAWLER_BLOCK_3 = 4440; +const int FEAT_BRAWLER_BLOCK_4 = 4441; +const int FEAT_BRAWLER_BLOCK_5 = 4442; +const int FEAT_BRAWLER_EXTRAATT_1 = 4429; +const int FEAT_BRAWLER_EXTRAATT_2 = 4430; +const int FEAT_BRAWLER_EXTRAATT_3 = 4431; +const int FEAT_BRAWLER_DAMAGE_REDUCTION_3 = 4432; +const int FEAT_BRAWLER_DAMAGE_REDUCTION_6 = 4433; +const int FEAT_BRAWLER_DAMAGE_REDUCTION_9 = 4434; + +// Minstrel of the Edge +const int FEAT_MINSTREL_LIGHT_ARMOR_CASTING = 4435; +const int FEAT_MINSTREL_SONG_SLEEP = 4443; +const int FEAT_MINSTREL_SONG_SILENCE = 4444; +const int FEAT_MINSTREL_SONG_HASTE = 4445; +const int FEAT_MINSTREL_SONG_SLOW = 4446; +const int FEAT_MINSTREL_SONG_CHARM = 4447; +const int FEAT_MINSTREL_SONG_IMM_FEAR = 4449; +const int FEAT_MINSTREL_SONG_SHIELD_AC = 4450; +const int FEAT_MINSTREL_SONG_SONIC_WEAP = 4451; +const int FEAT_MINSTREL_SONG_STRENGTH = 4452; +const int FEAT_MINSTREL_SONG_DEXTERITY = 4453; +const int FEAT_MINSTREL_SONG_CONSTITUTION = 4454; +const int FEAT_MINSTREL_SONG_INTELLIGENCE = 4455; +const int FEAT_MINSTREL_SONG_WISDOM = 4456; +const int FEAT_MINSTREL_SONG_CHARISMA = 4457; +const int FEAT_MINSTREL_SONG_WOUND_WHISP = 4458; +const int FEAT_MINSTREL_GREATER_MINSTREL_SONG = 4448; + +// Nightshade +const int FEAT_NS_LIGHT_ADAPTION = 2964; +const int FEAT_NS_WEBWALKER = 2965; +const int FEAT_NS_SNEAKATK_1D6 = 2966; +const int FEAT_NS_SNEAKATK_2D6 = 2967; +const int FEAT_NS_SNEAKATK_3D6 = 2968; +const int FEAT_NS_INVISIBILITY = 2969; +const int FEAT_NS_POISON_IMMUNE = 2970; +const int FEAT_NS_POISON_SPITTLE = 2971; +const int FEAT_NS_WEB = 2972; +const int FEAT_NS_SHADOWWALK = 2973; + +// Runescarred Berserker +const int FEAT_RIT_SCAR = 2369; +const int FEAT_SPAWNFROST = 2371; +const int FEAT_RIT_DR = 2370; +const int FEAT_RIT_SCAR_2 = 2375; +const int FEAT_RIT_SCAR_3 = 2376; + +// Ultimate Ranger +const int FEAT_UR_FE_DWARF = 2974; +const int FEAT_UR_FE_ELF = 2975; +const int FEAT_UR_FE_GNOME = 2976; +const int FEAT_UR_FE_HALFING = 2977; +const int FEAT_UR_FE_HALFELF = 2978; +const int FEAT_UR_FE_HALFORC = 2979; +const int FEAT_UR_FE_HUMAN = 2980; +const int FEAT_UR_FE_ABERRATION = 2981; +const int FEAT_UR_FE_ANIMAL = 2982; +const int FEAT_UR_FE_BEAST = 2983; +const int FEAT_UR_FE_CONSTRUCT = 2984; +const int FEAT_UR_FE_DRAGON = 2985; +const int FEAT_UR_FE_GOBLINOID = 2986; +const int FEAT_UR_FE_MONSTROUS = 2987; +const int FEAT_UR_FE_ORC = 2988; +const int FEAT_UR_FE_REPTILIAN = 2989; +const int FEAT_UR_FE_ELEMENTAL = 2990; +const int FEAT_UR_FE_FEY = 2991; +const int FEAT_UR_FE_GIANT = 2992; +const int FEAT_UR_FE_MAGICAL_BEAST = 2993; +const int FEAT_UR_FE_OUTSIDER = 2994; +const int FEAT_UR_FE_SHAPECHANGER = 2995; +const int FEAT_UR_FE_UNDEAD = 2996; +const int FEAT_UR_FE_VERMIN = 2997; +const int FEAT_UR_SNAREMASTERY = 2998; +const int FEAT_UR_SNEAKATK_3D6 = 2999; +const int FEAT_UR_ARMOREDGRACE = 3430; +const int FEAT_UR_DODGE_FE = 3431; +const int FEAT_UR_RESIST_FE = 3432; +const int FEAT_UR_HAWK_TOTEM = 3433; +const int FEAT_UR_OWL_TOTEM = 3434; +const int FEAT_UR_VIPER_TOTEM = 3435; +const int FEAT_UR_GRACE1 = 3436; +const int FEAT_UR_GRACE2 = 3437; +const int FEAT_UR_GRACE3 = 3438; +const int FEAT_UR_GRACE4 = 3439; +const int FEAT_UR_FAST_MOVEMENT = 3097; +const int FEAT_UNCANNYX_DODGE_1 = 3098; +const int FEAT_LINGERING_DAMAGE = 3099; +const int FEAT_UR_HIPS = 3136; + +// Dragonsong Lyrist +const int FEAT_DRAGONSONG_STRENGTH = 3441; +const int FEAT_DRAGONSONG_COMPULSION = 3442; +const int FEAT_DRAGONSONG_SPEED = 3443; +const int FEAT_DRAGONSONG_FEAR = 3444; +const int FEAT_DRAGONSONG_HEALING = 3445; +const int FEAT_EPIC_DRAGONSONG_STRENGTH = 3496; +const int FEAT_EPIC_DRAGONSONG_COMPULSION = 3497; +const int FEAT_EPIC_DRAGONSONG_SPEED = 3498; +const int FEAT_EPIC_DRAGONSONG_FEAR = 3499; +const int FEAT_EPIC_DRAGONSONG_HEALING = 3500; +const int FEAT_FOCUS_DRAGONSONG = 3318; +const int FEAT_GREATER_FOCUS_DRAGONSONG = 3319; +const int FEAT_EPIC_FOCUS_DRAGONSONG = 3321; + +// Favored of Milil +const int FEAT_FOM_DIVINE_SONG_BLESS = 24181; +const int FEAT_FOM_DIVINE_SONG_CONVICTION = 24182; +const int FEAT_FOM_DIVINE_SONG_CURELIGHT = 24183; +const int FEAT_FOM_DIVINE_SONG_REMOVEFEAR = 24184; +const int FEAT_FOM_DIVINE_SONG_SANCTUARY = 24185; +const int FEAT_FOM_DIVINE_SONG_SHIELDFAITH = 24186; +const int FEAT_FOM_DIVINE_SONG_AID = 24187; +const int FEAT_FOM_DIVINE_SONG_BULLSTRENGTH = 24188; +const int FEAT_FOM_DIVINE_SONG_CUREMODERATE = 24189; +const int FEAT_FOM_DIVINE_SONG_EAGLESPLENDOR = 24190; +const int FEAT_FOM_DIVINE_SONG_ENDURANCE = 24191; +const int FEAT_FOM_DIVINE_SONG_FOXCUNNING = 24192; +const int FEAT_FOM_DIVINE_SONG_LESSRESTORE = 24193; +const int FEAT_FOM_DIVINE_SONG_OWLWISDOM = 24194; +const int FEAT_FOM_DIVINE_SONG_CLAIRVOYANCE = 24195; +const int FEAT_FOM_DIVINE_SONG_CLARITY = 24196; +const int FEAT_FOM_DIVINE_SONG_CURESERIOUS = 24197; +const int FEAT_FOM_DIVINE_SONG_NEGATIVEPROT = 24198; +const int FEAT_FOM_DIVINE_SONG_PRAYER = 24199; +const int FEAT_FOM_DIVINE_SONG_PROTELEMENTS = 24200; +const int FEAT_FOM_DIVINE_SONG_REMOVECURSE = 24201; +const int FEAT_FOM_DIVINE_SONG_CURECRITICAL = 24202; +const int FEAT_FOM_DIVINE_SONG_DEATHWARD = 24203; +const int FEAT_FOM_DIVINE_SONG_FREEDOMMOVEMENT = 24204; +const int FEAT_FOM_DIVINE_SONG_PANACEA = 24205; +const int FEAT_FOM_DIVINE_SONG_RESTORATION = 24206; +const int FEAT_FOM_DIVINE_SONG_STONESKIN = 24207; +const int FEAT_FOM_DIVINE_SONG_TRUESEEING = 24208; +const int FEAT_FOM_DIVINE_SONG_MONSTREGEN = 24209; +const int FEAT_FOM_DIVINE_SONG_RAISEDEAD = 24210; +const int FEAT_FOM_DIVINE_SONG_SPELLRESISTANCE = 24211; +const int FEAT_FOM_ENCORE_PERFORMANCE = 24212; +const int FEAT_FOM_GREATER_DIVINE_SONG = 24213; + +// Evil-Paladin +const int FEAT_HIDDENFAITH = 3484; +const int FEAT_AP_TURN_OUTSIDER = 3486; +const int FEAT_APAL_MOUNT = 24238; + +// Outlaw Crimson Road +const int FEAT_FUGITIVE_LUCK1 = 2798; +const int FEAT_FUGITIVE_LUCK2 = 2799; +const int FEAT_FUGITIVE_LUCK3 = 2877; +const int FEAT_FUGITIVE_LUCKEPIC = 2879; +const int FEAT_OUT_LEADERSHIP = 2880; +const int FEAT_OUT_LEGENDS = 2881; + +// Alaghar +const int FEAT_CLANGEDDINS_STRIKE = 3991; +const int FEAT_CLANGEDDINS_MIGHT = 3992; +const int FEAT_ALAG_SILVERBEARD = 3993; +const int FEAT_ALAG_ROCKBURST = 3994; + +// Soul Eater +const int FEAT_SLEAT_ENERGY_DRAIN = 3995; +const int FEAT_SLEAT_SBLAST = 3996; +const int FEAT_SLEAT_SRADIANCE = 3997; + +// Combat Medic +const int FEAT_HEALING_KICKER_1 = 3540; +const int FEAT_HEALING_KICKER_2 = 3541; +const int FEAT_HEALING_KICKER_3 = 3542; + +// Crafting +const int FEAT_CRAFT_WONDROUS = 2925; +const int FEAT_CRAFT_ARMS_ARMOR = 2926; +const int FEAT_CRAFT_ROD = 2927; +const int FEAT_CRAFT_STAFF = 2928; +const int FEAT_FORGE_RING = 2929; +const int FEAT_CRAFT_CONSTRUCT = 2920; +const int FEAT_CRAFT_ITEM = 2919;//combined with read recepie, was 2899 +const int FEAT_CRAFT_EPIC_WONDROUS_ITEM = 3488; +const int FEAT_CRAFT_EPIC_MAGIC_ARMS_ARMOR = 3489; +const int FEAT_CRAFT_EPIC_ROD = 3490; +const int FEAT_CRAFT_EPIC_STAFF = 3491; +const int FEAT_FORGE_EPIC_RING = 3528; +const int FEAT_EXCEPTIONAL_ARTISAN_I = 2872; +const int FEAT_EXCEPTIONAL_ARTISAN_II = 2873; +const int FEAT_EXCEPTIONAL_ARTISAN_III = 2874; +const int FEAT_EXTRAORDINARY_ARTISAN_I = 2875; +const int FEAT_EXTRAORDINARY_ARTISAN_II = 2876; +const int FEAT_EXTRAORDINARY_ARTISAN_III = 2893; +const int FEAT_LEGENDARY_ARTISAN_I = 2894; +const int FEAT_LEGENDARY_ARTISAN_II = 2895; +const int FEAT_LEGENDARY_ARTISAN_III = 2896; + +// Exalted Companion +const int FEAT_EXALTED_COMPANION = 4199; + +// Dragon Disciple +const int FEAT_RED_DRAGON = 4100; +const int FEAT_SILVER_DRAGON = 4101; +const int FEAT_BLACK_DRAGON = 4102; +const int FEAT_BLUE_DRAGON = 4103; +const int FEAT_GREEN_DRAGON = 4104; +const int FEAT_WHITE_DRAGON = 4105; +const int FEAT_BRASS_DRAGON = 4106; +const int FEAT_BRONZE_DRAGON = 4107; +const int FEAT_COPPER_DRAGON = 4108; +const int FEAT_GOLD_DRAGON = 4109; +const int FEAT_AMETHYST_DRAGON = 4110; +const int FEAT_CRYSTAL_DRAGON = 4111; +const int FEAT_EMERALD_DRAGON = 4112; +const int FEAT_SAPPHIRE_DRAGON = 4113; +const int FEAT_TOPAZ_DRAGON = 4114; +const int FEAT_BATTLE_DRAGON = 4115; +const int FEAT_BROWN_DRAGON = 4116; +const int FEAT_CHAOS_DRAGON = 4117; +const int FEAT_DEEP_DRAGON = 4118; +const int FEAT_ETHEREAL_DRAGON = 4119; +const int FEAT_FANG_DRAGON = 4120; +const int FEAT_HOWLING_DRAGON = 4121; +const int FEAT_OCEANUS_DRAGON = 4122; +const int FEAT_PYROCLASTIC_DRAGON = 4123; +const int FEAT_RADIANT_DRAGON = 4124; +const int FEAT_RUST_DRAGON = 4125; +const int FEAT_SHADOW_DRAGON = 4126; +const int FEAT_SONG_DRAGON = 4127; +const int FEAT_STYX_DRAGON = 4128; +const int FEAT_TARTIAN_DRAGON = 4129; +const int FEAT_DRACONIC_IMMUNITY = 4130; +const int FEAT_CHIANG_LUNG_DRAGON = 4131; +const int FEAT_LI_LUNG_DRAGON = 4132; +const int FEAT_LUNG_WANG_DRAGON = 4133; +const int FEAT_PAN_LUNG_DRAGON = 4134; +const int FEAT_SHEN_LUNG_DRAGON = 4135; +const int FEAT_TIEN_LUNG_DRAGON = 4136; +const int FEAT_TUN_MI_LUNG_DRAGON = 4137; +const int FEAT_YU_LUNG_DRAGON = 4138; +const int FEAT_DRAGON_DIS_BREATH_2 = 4139; +const int FEAT_DRAGON_DIS_BREATH_3 = 4140; +const int FEAT_DRAGON_DIS_BREATH_4 = 4141; +const int FEAT_DRAGON_DIS_BREATH_5 = 4142; +const int FEAT_DRAGON_DIS_BREATH_6 = 4143; +const int FEAT_DRAGON_DIS_BREATH_7 = 4144; +const int DRACONIC_ARMOR_AUG_1 = 4148; +const int DRACONIC_SPELLRESIST = 4149; +const int DRACONIC_ARMOR_AUG_2 = 4150; +const int DRAGON_BLOODED = 4151; +const int FEAT_DRACONIC_SIZE_INCREASE_1 = 4152; +const int FEAT_DRACONIC_SIZE_INCREASE_2 = 4153; +const int DRACONIC_CLAWS = 4162; +const int DRACONIC_BITE = 4163; +const int DRACONIC_WINGSLAMS = 4164; +const int DRACONIC_TAILSLAP = 4165; + +// Complete Adv Ninja +const int FEAT_NINJA_AC_BONUS = 2483; +const int FEAT_EPIC_ACROBATICS_8 = 2484; +const int FEAT_EPIC_ACROBATICS_10 = 2485; +const int FEAT_EPIC_ACROBATICS_12 = 2486; +const int FEAT_EPIC_NINJA_CA = 2487; +const int FEAT_KI_POWER = 2488; +const int FEAT_ACROBATICS_2 = 2489; +const int FEAT_ACROBATICS_4 = 2490; +const int FEAT_ACROBATICS_6 = 2491; +const int FEAT_GHOST_SIGHT = 2492; +const int FEAT_GHOST_STEP = 2493; +const int FEAT_GHOST_STRIKE = 2494; +const int FEAT_GHOST_WALK = 2495; +const int FEAT_GREAT_LEAP = 2496; +const int FEAT_GREATER_KI_DODGE = 2497; +const int FEAT_KI_DODGE = 2498; +const int FEAT_GHOST_STEP_2 = 2499; + + +//:: Forest Master (Faiths & Pantheons, pg. 193) +const int FEAT_FM_TREEBROTHER = 5436; +const int FEAT_FM_NATURESENSE = 5437; +const int FEAT_FM_FOREST_DOMINION = 5438; +const int FEAT_FM_MALLET_MASTER = 5439; +const int FEAT_FM_ICY_MALLET = 5440; +const int FEAT_FM_SHOCK_MALLET = 5441; +const int FEAT_FM_NATURAL_ARMOR = 5442; +const int FEAT_FM_OAK_STRENGTH = 5443; +const int FEAT_FM_SPRUCE_GROWTH = 5444; +const int FEAT_FM_OAKHEART = 5445; +const int FEAT_FM_DEEP_ROOTS = 5446; +const int FEAT_FM_LONGEVITY = 5447; +const int FEAT_FM_FOREST_MIGHT = 5448; + +// Fast Healing +const int FAST_HEALING_1 = 4145; +const int FAST_HEALING_2 = 4146; +const int FAST_HEALING_3 = 4147; + +// General Feats +const int FEAT_STORMMAGIC = 4182; +const int FEAT_MAGICAL_APTITUDE = 4416; +const int FEAT_NEGOTIATOR = 3485; + +// Warmage Feat +const int FEAT_TYPE_EXTRA_EDGE = 2779; +const int FEAT_SUDDEN_EMPOWER = 2830; +const int FEAT_SUDDEN_EXTEND = 2831; +const int FEAT_SUDDEN_MAXIMIZE = 2832; +const int FEAT_SUDDEN_WIDEN = 2833; + +// Size changes +const int FEAT_SIZE_DECREASE_1 = 2287; +const int FEAT_SIZE_DECREASE_2 = 2288; +const int FEAT_SIZE_DECREASE_3 = 2289; +const int FEAT_SIZE_DECREASE_4 = 2290; +const int FEAT_SIZE_DECREASE_5 = 2291; +const int FEAT_SIZE_DECREASE_6 = 2292; +const int FEAT_SIZE_INCREASE_1 = 2293; +const int FEAT_SIZE_INCREASE_2 = 2294; +const int FEAT_SIZE_INCREASE_3 = 2295; +const int FEAT_SIZE_INCREASE_4 = 2296; +const int FEAT_SIZE_INCREASE_5 = 2297; +const int FEAT_SIZE_INCREASE_6 = 2298; + + + +/*////////////////////////////////////////////////// +////////////////CODI STUFF////////////////////////// +//////////////////////////////////////////////////*/ + +//Ninja Spy +const int SPELLABILITY_NS_MEDIUM = 1528; +const int SPELLABILITY_NS_SMALL = 1529; +const int SPELLABILITY_NS_DWARF = 1530; +const int SPELLABILITY_NS_ELF = 1531; +const int SPELLABILITY_NS_HALF_ELF = 1532; +const int SPELLABILITY_NS_HALF_ORC = 1533; +const int SPELLABILITY_NS_HUMAN = 1534; +const int SPELLABILITY_NS_GNOME = 1535; +const int SPELLABILITY_NS_HALFLING = 1536; +const int SPELLABILITY_NS_OFF = 1537; + +const int FEAT_EPIC_NINJA = 3426; +const int FEAT_1000FACES_MEDIUM = 3400; +const int FEAT_1000FACES_SMALL = 3401; +const int FEAT_1000FACES_OFF = 3402; + +//Mystic Theurge +const int FEAT_EPIC_THEURGE = 3427; + +//War Priest +const int SPELLABILITY_WP_RALLY = 1549; +const int SPELLABILITY_WP_INFLAME = 1550; +const int SPELLABILITY_WP_IMPLACABLE_FOE = 1551; + +const int FEAT_EPIC_WARPRIEST = 3428; +const int FEAT_RALLY = 3418; +const int FEAT_INFLAME = 3419; +const int FEAT_IMPLACABLE_FOE = 3420; +const int FEAT_HEALING_CIRCLE = 3421; +const int FEAT_FEAR_AURA = 3422; +const int FEAT_MASS_HASTE = 3423; +const int FEAT_MASS_HEAL = 3424; + +//Ocular Adept +const int SPELLABILITY_OA_CHPERRAY = 1538; +const int SPELLABILITY_OA_SLEEPRAY = 1539; +const int SPELLABILITY_OA_INFRAY = 1540; +const int SPELLABILITY_OA_SLOWRAY = 1541; +const int SPELLABILITY_OA_FEARRAY = 1542; +const int SPELLABILITY_OA_CHMONRAY = 1543; +const int SPELLABILITY_OA_TELERAY = 1544; +const int SPELLABILITY_OA_PETRAY = 1545; +const int SPELLABILITY_OA_DISRAY = 1546; +const int SPELLABILITY_OA_DEATHRAY = 1547; + +const int FEAT_CHPERRAY = 3403; +const int FEAT_SLEEPRAY = 3404; +const int FEAT_INFRAY = 3405; +const int FEAT_SLOWRAY = 3406; +const int FEAT_FEARRAY = 3407; +const int FEAT_CHMONRAY = 3408; +const int FEAT_TELERAY = 3409; +const int FEAT_PETRAY = 3410; +const int FEAT_DISRAY = 3411; +const int FEAT_DEATHRAY = 3412; + +//Samurai +const int SPELLABILITY_SM_ANCESTDAISHO = 1548; + +const int FEAT_EPIC_SAMURAI = 3416; +const int FEAT_ANCESTRAL_DAISHO = 3417; +const int FEAT_EPIC_ANCESTRAL_DAISHO_1 = 1950; +const int FEAT_EPIC_ANCESTRAL_DAISHO_2 = 1951; +const int FEAT_EPIC_ANCESTRAL_DAISHO_3 = 1952; +const int FEAT_EPIC_ANCESTRAL_DAISHO_4 = 1953; +const int FEAT_EPIC_ANCESTRAL_DAISHO_5 = 1954; +const int FEAT_EPIC_ANCESTRAL_DAISHO_6 = 1955; +const int FEAT_EPIC_ANCESTRAL_DAISHO_7 = 1956; +const int FEAT_EPIC_ANCESTRAL_DAISHO_8 = 1957; +const int FEAT_EPIC_ANCESTRAL_DAISHO_9 = 1958; +const int FEAT_EPIC_ANCESTRAL_DAISHO_10 = 1959; + +//Battlerager +const int FEAT_FEROCIOUS_PROW = 3512; +const int FEAT_PRC_EPIC_MIGHT_RAGE = 3516; + +/*////////////////////////////////////////////////////// +//////////////////////END CODI////////////////////////// +//////////////////////////////////////////////////////*/ + + +/*////////////////////////////////////////////////// +//////////////// PSIONICS ////////////////////////// +//////////////////////////////////////////////////*/ + +//Psion +const int FEAT_PSION_DIS_EGOIST = 3554; +const int FEAT_PSION_DIS_KINETICIST = 3555; +const int FEAT_PSION_DIS_NOMAD = 3556; +const int FEAT_PSION_DIS_SEER = 3557; +const int FEAT_PSION_DIS_SHAPER = 3558; +const int FEAT_PSION_DIS_TELEPATH = 3559; + +//Psychic Rogue +const int FEAT_PSY_SNEAK_ATTACK_1d6 = 24275; +const int FEAT_PSY_SNEAK_ATTACK_2d6 = 24276; +const int FEAT_PSY_SNEAK_ATTACK_3d6 = 24277; +const int FEAT_PSY_MIND_CRIPPLE = 24282; + +//Wilder +const int FEAT_WILDER_SURGING_EUPHORIA = 3568; +const int FEAT_WILDER_PSYCHIC_ENERVATION = 3569; +const int FEAT_WILDER_VOLATILE_MIND = 3570; +const int FEAT_WILDER_ELUDE_TOUCH = 3567; +const int FEAT_WILDER_WILD_SURGE_1_5 = 3560; +const int FEAT_WILDER_WILD_SURGE_6_10 = 3561; +const int FEAT_WILDER_WILD_SURGE_11 = 3562; + +// Soulknife +const int FEAT_MINDBLADE = 3600; +const int FEAT_MANIFEST_MINDBLADE = 3601; +const int FEAT_WEAPON_FOCUS_MINDBLADE = 3602; +const int FEAT_GREATER_WEAPON_FOCUS_MINDBLADE = 3603; +const int FEAT_THROW_MINDBLADE = 3604; +const int FEAT_PSYCHIC_STRIKE = 3605; +const int FEAT_FREE_DRAW = 3606; +const int FEAT_SHAPE_MINDBLADE = 3607; +const int FEAT_MINDBLADE_ENHANCEMENT = 3608; +const int FEAT_BLADEWIND = 3609; +const int FEAT_KNIFE_TO_THE_SOUL = 3610; +const int FEAT_KNIFE_TO_THE_SOUL_RADIAL1 = 3611; +const int FEAT_KNIFE_TO_THE_SOUL_RADIAL2 = 3612; +const int FEAT_EPIC_SOULKNIFE = 3613; +const int FEAT_IMPROVED_CRITICAL_MINDBLADE = 3614; +const int FEAT_OVERWHELMING_CRITICAL_MINDBLADE = 3615; +const int FEAT_DEVASTATING_CRITICAL_MINDBLADE = 3616; +const int FEAT_WEAPON_SPECIALIZATION_MINDBLADE = 3617; +const int FEAT_EPIC_WEAPON_FOCUS_MINDBLADE = 3618; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_MINDBLADE = 3619; +const int FEAT_MULTIPLE_THROW = 3620; +const int FEAT_CHANGE_HANDEDNESS = 3621; +const int FEAT_WEAPON_OF_CHOICE_MINDBLADE = 3622; +const int FEAT_MIND_CLEAVE = 24414; + + +//:: Psionic Feats +const int FEAT_AUGMENT_PSIONICS_QUICKSELECTS = 3550; +const int FEAT_AUGMENT_QUICKSELECTS_2 = 3563; +const int FEAT_AUGMENT_PSIONICS_DIGITS_0_4 = 3551; +const int FEAT_AUGMENT_PSIONICS_DIGITS_5_9 = 3552; +const int FEAT_AUGMENT_PSIONICS_TENS = 3553; + +const int FEAT_MENTAL_RESISTANCE = 4812; +const int FEAT_HOSTILE_MIND = 4813; +const int FEAT_FORCE_OF_WILL = 4814; +const int FEAT_CLOSED_MIND = 4815; +const int FEAT_RECKLESS_OFFENSE = 4816; +const int FEAT_CLOAK_DANCE = 4817; +const int FEAT_PSIONIC_FOCUS = 4818; +const int FEAT_PSIONIC_HOLE = 4811; +const int FEAT_COMBAT_MANIFESTATION = 4810; +const int FEAT_MENTAL_LEAP = 4809; +const int FEAT_NARROW_MIND = 4808; +const int FEAT_POWER_PENETRATION = 4807; +const int FEAT_GREATER_POWER_PENETRATION = 4806; +const int FEAT_POWER_SPECIALIZATION = 4805; +const int FEAT_GREATER_POWER_SPECIALIZATION = 4804; +const int FEAT_PSIONIC_DODGE = 4803; +const int FEAT_PSIONIC_ENDOWMENT = 4802; +const int FEAT_GREATER_PSIONIC_ENDOWMENT = 4801; +const int FEAT_PSIONIC_FIST = 4800; +const int FEAT_GREATER_PSIONIC_FIST = 4821; +const int FEAT_PSIONIC_WEAPON = 4822; +const int FEAT_GREATER_PSIONIC_WEAPON = 4823; +const int FEAT_PSIONIC_SHOT = 4824; +const int FEAT_GREATER_PSIONIC_SHOT = 4825; +const int FEAT_OVERCHANNEL = 4826; +const int FEAT_PSIONIC_MEDITATION = 4827; +const int FEAT_RAPID_METABOLISM = 4828; +const int FEAT_TALENTED = 4829; +const int FEAT_UNAVOIDABLE_STRIKE = 4830; +const int FEAT_WILD_TALENT = 4831; +const int FEAT_WOUNDING_ATTACK = 4832; +const int FEAT_BOOST_CONSTRUCT = 4833; +const int FEAT_SPEED_OF_THOUGHT = 4834; +const int FEAT_PSIONIC_TALENT_1 = 4835; +const int FEAT_PSIONIC_TALENT_2 = 4836; +const int FEAT_PSIONIC_TALENT_3 = 4837; +const int FEAT_PSIONIC_TALENT_4 = 4838; +const int FEAT_PSIONIC_TALENT_5 = 4839; +const int FEAT_PSIONIC_TALENT_6 = 4840; +const int FEAT_PSIONIC_TALENT_7 = 4841; +const int FEAT_PSIONIC_TALENT_8 = 4842; +const int FEAT_PSIONIC_TALENT_9 = 4843; +const int FEAT_PSIONIC_TALENT_10 = 4844; +const int FEAT_METAMORPHIC_TRANSFER_1 = 4845; +const int FEAT_METAMORPHIC_TRANSFER_2 = 4846; +const int FEAT_METAMORPHIC_TRANSFER_3 = 4847; +const int FEAT_METAMORPHIC_TRANSFER_4 = 4848; +const int FEAT_METAMORPHIC_TRANSFER_5 = 4849; +const int FEAT_METAMORPHIC_TRANSFER_6 = 4850; +const int FEAT_METAMORPHIC_TRANSFER_7 = 4851; +const int FEAT_DEEP_IMPACT = 4852; +const int FEAT_FELL_SHOT = 4853; +const int FEAT_EXPANDED_KNOWLEDGE_1 = 4867; +const int FEAT_EXPANDED_KNOWLEDGE_2 = 4868; +const int FEAT_EXPANDED_KNOWLEDGE_3 = 4869; +const int FEAT_EXPANDED_KNOWLEDGE_4 = 4870; +const int FEAT_EXPANDED_KNOWLEDGE_5 = 4871; +const int FEAT_EXPANDED_KNOWLEDGE_6 = 4872; +const int FEAT_EXPANDED_KNOWLEDGE_7 = 4873; +const int FEAT_EXPANDED_KNOWLEDGE_8 = 4874; +const int FEAT_EXPANDED_KNOWLEDGE_9 = 4875; +const int FEAT_EXPANDED_KNOWLEDGE_10 = 4876; +const int FEAT_INVEST_ARMOUR = 3643; + +// Epic psionic feats +const int FEAT_EPIC_PSIONIC_FOCUS_1 = 4857; +const int FEAT_EPIC_PSIONIC_FOCUS_2 = 4858; +const int FEAT_EPIC_PSIONIC_FOCUS_3 = 4859; +const int FEAT_EPIC_PSIONIC_FOCUS_4 = 4860; +const int FEAT_EPIC_PSIONIC_FOCUS_5 = 4861; +const int FEAT_EPIC_PSIONIC_FOCUS_6 = 4862; +const int FEAT_EPIC_PSIONIC_FOCUS_7 = 4863; +const int FEAT_EPIC_PSIONIC_FOCUS_8 = 4864; +const int FEAT_EPIC_PSIONIC_FOCUS_9 = 4865; +const int FEAT_EPIC_PSIONIC_FOCUS_10 = 4866; +const int FEAT_EPIC_EXPANDED_KNOWLEDGE_1 = 4877; +const int FEAT_EPIC_EXPANDED_KNOWLEDGE_2 = 4878; +const int FEAT_EPIC_EXPANDED_KNOWLEDGE_3 = 4879; +const int FEAT_EPIC_EXPANDED_KNOWLEDGE_4 = 4880; +const int FEAT_EPIC_EXPANDED_KNOWLEDGE_5 = 4881; +const int FEAT_EPIC_EXPANDED_KNOWLEDGE_6 = 4882; +const int FEAT_EPIC_EXPANDED_KNOWLEDGE_7 = 4883; +const int FEAT_EPIC_EXPANDED_KNOWLEDGE_8 = 4884; +const int FEAT_EPIC_EXPANDED_KNOWLEDGE_9 = 4885; +const int FEAT_EPIC_EXPANDED_KNOWLEDGE_10 = 4886; +const int FEAT_IMPROVED_METAPSIONICS_1 = 4887; +const int FEAT_IMPROVED_METAPSIONICS_2 = 4888; +const int FEAT_IMPROVED_METAPSIONICS_3 = 4889; +const int FEAT_IMPROVED_METAPSIONICS_4 = 4890; +const int FEAT_IMPROVED_METAPSIONICS_5 = 4891; +const int FEAT_IMPROVED_METAPSIONICS_6 = 4892; +const int FEAT_IMPROVED_METAPSIONICS_7 = 4893; +const int FEAT_IMPROVED_METAPSIONICS_8 = 4894; +const int FEAT_IMPROVED_METAPSIONICS_9 = 4895; +const int FEAT_IMPROVED_METAPSIONICS_10 = 4896; +const int FEAT_IMPROVED_MANIFESTATION_1 = 4897; +const int FEAT_IMPROVED_MANIFESTATION_2 = 4898; +const int FEAT_IMPROVED_MANIFESTATION_3 = 4899; +const int FEAT_IMPROVED_MANIFESTATION_4 = 4900; +const int FEAT_IMPROVED_MANIFESTATION_5 = 4901; +const int FEAT_IMPROVED_MANIFESTATION_6 = 4902; +const int FEAT_IMPROVED_MANIFESTATION_7 = 4903; +const int FEAT_IMPROVED_MANIFESTATION_8 = 4904; +const int FEAT_IMPROVED_MANIFESTATION_9 = 4905; +const int FEAT_IMPROVED_MANIFESTATION_10 = 4906; +const int FEAT_POWER_KNOWLEDGE_PSION_1 = 4907; +const int FEAT_POWER_KNOWLEDGE_PSION_2 = 4908; +const int FEAT_POWER_KNOWLEDGE_PSION_3 = 4909; +const int FEAT_POWER_KNOWLEDGE_PSION_4 = 4910; +const int FEAT_POWER_KNOWLEDGE_PSION_5 = 4911; +const int FEAT_POWER_KNOWLEDGE_PSION_6 = 4912; +const int FEAT_POWER_KNOWLEDGE_PSION_7 = 4913; +const int FEAT_POWER_KNOWLEDGE_PSION_8 = 4914; +const int FEAT_POWER_KNOWLEDGE_PSION_9 = 4915; +const int FEAT_POWER_KNOWLEDGE_PSION_10 = 4916; +const int FEAT_POWER_KNOWLEDGE_PSYWAR_1 = 4917; +const int FEAT_POWER_KNOWLEDGE_PSYWAR_2 = 4918; +const int FEAT_POWER_KNOWLEDGE_PSYWAR_3 = 4919; +const int FEAT_POWER_KNOWLEDGE_PSYWAR_4 = 4920; +const int FEAT_POWER_KNOWLEDGE_PSYWAR_5 = 4921; +const int FEAT_POWER_KNOWLEDGE_PSYWAR_6 = 4922; +const int FEAT_POWER_KNOWLEDGE_PSYWAR_7 = 4923; +const int FEAT_POWER_KNOWLEDGE_PSYWAR_8 = 4924; +const int FEAT_POWER_KNOWLEDGE_PSYWAR_9 = 4925; +const int FEAT_POWER_KNOWLEDGE_PSYWAR_10 = 4926; +const int FEAT_POWER_KNOWLEDGE_WILDER_1 = 4927; +const int FEAT_POWER_KNOWLEDGE_WILDER_2 = 4928; +const int FEAT_POWER_KNOWLEDGE_WILDER_3 = 4929; +const int FEAT_POWER_KNOWLEDGE_WILDER_4 = 4930; +const int FEAT_POWER_KNOWLEDGE_WILDER_5 = 4931; +const int FEAT_POWER_KNOWLEDGE_WILDER_6 = 4932; +const int FEAT_POWER_KNOWLEDGE_WILDER_7 = 4933; +const int FEAT_POWER_KNOWLEDGE_WILDER_8 = 4934; +const int FEAT_POWER_KNOWLEDGE_WILDER_9 = 4935; +const int FEAT_POWER_KNOWLEDGE_WILDER_10 = 4936; +const int FEAT_POWER_KNOWLEDGE_FIST_OF_ZUOKEN_1 = 4945; +const int FEAT_POWER_KNOWLEDGE_FIST_OF_ZUOKEN_2 = 4946; +const int FEAT_POWER_KNOWLEDGE_FIST_OF_ZUOKEN_3 = 4947; +const int FEAT_POWER_KNOWLEDGE_FIST_OF_ZUOKEN_4 = 4948; +const int FEAT_POWER_KNOWLEDGE_FIST_OF_ZUOKEN_5 = 4949; +const int FEAT_POWER_KNOWLEDGE_FIST_OF_ZUOKEN_6 = 4950; +const int FEAT_POWER_KNOWLEDGE_FIST_OF_ZUOKEN_7 = 4951; +const int FEAT_POWER_KNOWLEDGE_FIST_OF_ZUOKEN_8 = 4952; +const int FEAT_POWER_KNOWLEDGE_FIST_OF_ZUOKEN_9 = 4953; +const int FEAT_POWER_KNOWLEDGE_FIST_OF_ZUOKEN_10 = 4954; +const int FEAT_POWER_KNOWLEDGE_WARMIND_1 = 4955; +const int FEAT_POWER_KNOWLEDGE_WARMIND_2 = 4956; +const int FEAT_POWER_KNOWLEDGE_WARMIND_3 = 4957; +const int FEAT_POWER_KNOWLEDGE_WARMIND_4 = 4958; +const int FEAT_POWER_KNOWLEDGE_WARMIND_5 = 4959; +const int FEAT_POWER_KNOWLEDGE_WARMIND_6 = 4960; +const int FEAT_POWER_KNOWLEDGE_WARMIND_7 = 4961; +const int FEAT_POWER_KNOWLEDGE_WARMIND_8 = 4962; +const int FEAT_POWER_KNOWLEDGE_WARMIND_9 = 4963; +const int FEAT_POWER_KNOWLEDGE_WARMIND_10 = 4964; +const int FEAT_POWER_KNOWLEDGE_PSYROG_1 = 24265; +const int FEAT_POWER_KNOWLEDGE_PSYROG_2 = 24266; +const int FEAT_POWER_KNOWLEDGE_PSYROG_3 = 24267; +const int FEAT_POWER_KNOWLEDGE_PSYROG_4 = 24268; +const int FEAT_POWER_KNOWLEDGE_PSYROG_5 = 24269; +const int FEAT_POWER_KNOWLEDGE_PSYROG_6 = 24270; +const int FEAT_POWER_KNOWLEDGE_PSYROG_7 = 24271; +const int FEAT_POWER_KNOWLEDGE_PSYROG_8 = 24272; +const int FEAT_POWER_KNOWLEDGE_PSYROG_9 = 24273; +const int FEAT_POWER_KNOWLEDGE_PSYROG_10 = 24274; + +// Metapsionic feats +const int FEAT_CHAIN_POWER = 4937; +const int FEAT_EMPOWER_POWER = 4938; +const int FEAT_EXTEND_POWER = 4939; +const int FEAT_MAXIMIZE_POWER = 4940; +const int FEAT_SPLIT_PSIONIC_RAY = 4941; +const int FEAT_TWIN_POWER = 4942; +const int FEAT_WIDEN_POWER = 4943; +const int FEAT_QUICKEN_POWER = 4944; + +// Sanctified Mind +const int FEAT_SANCMIND_PARTITION_MIND = 2231; + +// Fist of Dal Quor +const int FEAT_FIST_DAL_QUOR_STUNNING_STRIKE = 2475; + +// Pyrokineticist +const int FEAT_PYRO_PYROKINETICIST = 2846; +const int FEAT_PYRO_CRYOKINETICIST = 2847; +const int FEAT_PYRO_SONOKINETICIST = 2848; +const int FEAT_PYRO_ELECTROKINETICIST = 2849; +const int FEAT_PYRO_ACETOKINETICIST = 2850; +const int FEAT_PYRO_FIRE_LASH = 2851; +const int FEAT_PYRO_FIRE_ADAPTATION = 2852; +const int FEAT_PYRO_HAND_AFIRE = 2853; +const int FEAT_PYRO_BOLT_OF_FIRE = 2854; +const int FEAT_PYRO_WEAPON_AFIRE = 2855; +const int FEAT_PYRO_NIMBUS = 2856; +const int FEAT_PYRO_NIMBUS_TOUCH_ATTACK = 2857; +const int FEAT_PYRO_FIREWALK = 2858; +const int FEAT_PYRO_FEAR_NO_FIRE = 2859; +const int FEAT_PYRO_GREATER_WEAPON_AFIRE = 2860; +const int FEAT_PYRO_HEAT_DEATH = 2861; +const int FEAT_PYRO_CONFLAGRATION = 2862; + +/*////////////////////////////////////////////////// +//////////////// END PSIONICS ////////////////////// +//////////////////////////////////////////////////*/ + +// Swashbuckler +const int FEAT_SWASH_GRACE1 = 1900; +const int FEAT_SWASH_GRACE2 = 1901; +const int FEAT_SWASH_GRACE3 = 1902; +const int FEAT_SWASH_GRACE4 = 1903; +const int FEAT_SWASH_GRACE5 = 1904; +const int INSIGHTFUL_STRIKE = 1905; +const int SWASH_DODGE_1 = 1906; +const int SWASH_DODGE_2 = 1907; +const int SWASH_DODGE_3 = 1908; +const int SWASH_DODGE_4 = 1909; +const int SWASH_DODGE_5 = 1910; +const int SWASH_DODGE_6 = 1911; +const int SWASH_DODGE_7 = 1912; +const int SWASH_DODGE_8 = 1913; +const int SWASH_LUCKY = 1914; +const int WEAKENING_CRITICAL = 1915; +const int WOUNDING_CRITICAL = 1916; + +//Marshal +const int MIN_AUR_FORT = 1919; +const int MIN_AUR_WILL = 1920; +const int MIN_AUR_REF = 1921; +const int MIN_AUR_CHA = 1922; +const int MIN_AUR_CON = 1923; +const int MIN_AUR_DEX = 1924; +const int MIN_AUR_INT = 1925; +const int MIN_AUR_STR = 1926; +const int MIN_AUR_WIS = 1927; +const int MIN_AUR_CAST = 1928; +const int MIN_AUR_AOW = 1929; +const int MAJ_AUR_MOT_ARDOR = 1930; +const int MAJ_AUR_MOT_CARE = 1931; +const int MAJ_AUR_RES_TROOPS = 1932; +const int MAJ_AUR_MOT_URGE = 1933; +const int MAJ_AUR_HARD_SOLDIER = 1934; +const int MAJ_AUR_MOT_ATTACK = 1935; +const int MAJ_AUR_STEAD_HAND = 1936; +const int GRANT_MOVE_ACTION = 1937; +const int MINOR_AURA = 1938; +const int MAJOR_AURA = 1939; + +//ACP feat +const int FEAT_ACP_QUICK_FEAT = 3479; +const int FEAT_ACP_HEAVY_FEAT = 3480; +const int FEAT_ACP_UNARMED_FEAT = 3481; + +//Baelnorn +const int FEAT_END_PROJECTION = 3575; +const int FEAT_BAELN_PROP = 3576; +const int FEAT_BAELN_TOUCH = 3577; +const int FEAT_BAELN_ABIL = 3578; +const int FEAT_PROJECTION = 3579; +const int FEAT_BAELN_DEF = 3580; +const int FEAT_UNDEAD_HD = 3581; +const int FEAT_TURN_RESISTANCE = 3582; +const int FEAT_IMPROVED_TURN_RESISTANCE = 3583; +const int FEAT_IMMUNITY_ABILITY_DECREASE = 3584; +const int FEAT_IMMUNITY_CRITICAL = 3585; +const int FEAT_IMMUNITY_DEATH = 3586; +const int FEAT_IMMUNITY_DISEASE = 3587; +const int FEAT_IMMUNITY_MIND_SPELLS = 3588; +const int FEAT_IMMUNITY_PARALYSIS = 3589; +const int FEAT_IMMUNITY_POISON = 3590; +const int FEAT_IMMUNITY_SNEAKATTACK = 3591; +const int FEAT_POSITIVE_ENERGY_RESISTANCE = 3592; +const int FEAT_TURNING_IMMUNITY = 3593; + +const int FEAT_TURN_SUBMISSION = 23517; +const int FEAT_IMMUNITY_TO_REBUKING = 23518; + +//Mother Cyst +const int FEAT_MOTHER_CYST = 3594; + +//Tenjac's spell related +const int FEAT_DETECT_GOOD_AT_WILL = 3595; +const int FEAT_RAY_CHARM_PERSON = 2220; +const int FEAT_RAY_CHARM_MONSTER = 2221; +const int FEAT_RAY_SLEEP = 2222; +const int FEAT_RAY_FLESH_TO_STONE = 2223; +const int FEAT_RAY_DISINTEGRATE = 2224; +const int FEAT_RAY_FEAR = 2225; +const int FEAT_RAY_SLOW = 2226; +const int FEAT_RAY_INFLICT_MODERATE_WOUNDS = 2227; +const int FEAT_RAY_FINGER_OF_DEATH = 2228; + +//Lasher +const int FEAT_LASHER_SNEAK1D6 = 4075; +const int FEAT_LASHER_SNEAK2D6 = 4076; +const int FEAT_LASHER_SNEAK3D6 = 4077; +const int FEAT_LASHER_IMPROVED_KNOCKDOWN_WHIP = 4078; +const int FEAT_LASHER_THIRD_HAND = 4079; +const int FEAT_LASHER_CRACK_FATE = 4080; +const int FEAT_LASHER_LASHING_WHIP = 4081; +const int FEAT_LASHER_IMPROVED_DISARM_WHIP = 4082; +const int FEAT_LASHER_STUNNING_SNAP = 4083; +const int FEAT_LASHER_CRACK_DOOM = 4084; +const int FEAT_LASHER_DEATH_SPIRAL = 4085; + +// PnP Spell Schools +const int FEAT_PNP_SPELL_SCHOOL_GENERAL = 2273; +const int FEAT_PNP_SPELL_SCHOOL_ABJURATION = 2274; +const int FEAT_PNP_SPELL_SCHOOL_CONJURATION = 2275; +const int FEAT_PNP_SPELL_SCHOOL_DIVINATION = 2276; +const int FEAT_PNP_SPELL_SCHOOL_ENCHANTMENT = 2277; +const int FEAT_PNP_SPELL_SCHOOL_EVOCATION = 2278; +const int FEAT_PNP_SPELL_SCHOOL_ILLUSION = 2279; +const int FEAT_PNP_SPELL_SCHOOL_NECROMANCY = 2280; +const int FEAT_PNP_SPELL_SCHOOL_TRANSMUTATION = 2281; + +//Spellfire +const int FEAT_SPELLFIRE_WIELDER = 4368; +const int FEAT_SPELLFIRE_INCREASE = 4369; +const int FEAT_SPELLFIRE_DECREASE = 4370; +const int FEAT_SPELLFIRE_QUICKSELECT = 4371; +const int FEAT_WEAPON_FOCUS_SPELLFIRE = 4372; +const int FEAT_EPIC_WEAPON_FOCUS_SPELLFIRE = 4373; +const int FEAT_SPELLFIRE_DRAIN_CHARGED = 4374; +const int FEAT_SPELLFIRE_INCREASED_STORAGE = 4375; +const int FEAT_SPELLFIRE_IMPROVED_HEALING = 4376; +const int FEAT_SPELLFIRE_RAPID_BLAST = 4377; +const int FEAT_SPELLFIRE_CHARGE_ITEM = 4378; +const int FEAT_SPELLFIRE_CROWN = 4379; +const int FEAT_SPELLFIRE_MAELSTROM = 4380; + +// Favoured Soul +const int FEAT_FAVOURED_SOUL_ACID = 2237; +const int FEAT_FAVOURED_SOUL_COLD = 2238; +const int FEAT_FAVOURED_SOUL_ELEC = 2239; +const int FEAT_FAVOURED_SOUL_FIRE = 2240; +const int FEAT_FAVOURED_SOUL_SONIC = 2241; +const int FEAT_FAVOURED_SOUL_WINGS = 2242; +const int FEAT_FAVOURED_SOUL_DAMRED = 2243; + +//Healer +const int FEAT_CELESTIAL_COMPANION = 3795; +const int FEAT_EFFORTLESS_HEALING = 3642; + +// War Wizard of Cormyr +const int FEAT_WWOC_WIDEN_SPELL = 2473; +const int FEAT_WWOC_ENLARGE_SPELL_AREA = 2474; + +// Complete Warrior Samurai +const int FEAT_CWSM_STAREDOWN = 2356; +const int FEAT_CWSM_MASS_STAREDOWN = 2357; +const int FEAT_CWSM_IMPROVED_STAREDOWN = 2358; +const int FEAT_CWSM_FRIGHTFUL_PRESENCE = 2359; + + // Virtuoso Feats + const int FEAT_VIRTUOSO_SUSTAINING_SONG = 4168; + const int FEAT_VIRTUOSO_CALUMNY = 4169; + const int FEAT_VIRTUOSO_JARRING_SONG = 4170; + const int FEAT_VIRTUOSO_SHARP_NOTE = 4171; + const int FEAT_VIRTUOSO_MINDBENDING_MELODY = 4172; + const int FEAT_VIRTUOSO_GREATER_CALUMNY = 4173; + const int FEAT_VIRTUOSO_MAGICAL_MELODY = 4174; + const int FEAT_VIRTUOSO_SONG_OF_FURY = 4175; + const int FEAT_VIRTUOSO_REVEALING_MELODY = 4176; + const int FEAT_VIRTUOSO_PERFORMANCE = 4177; + +// hexblade feats +const int FEAT_HEXCURSE = 3664; +const int FEAT_SWIFT_CAST = 3827; + +// Status markers +const int FEAT_INCORPOREAL = 4166; +const int FEAT_ETHEREAL = 4167; + +// Template Feats +const int FEAT_TEMPLATE_ARCHLICH_MARKER = 22700; +const int FEAT_TEMPLATE_ARCHLICH_TURN_UNDEAD = 22701; + +const int FEAT_TEMPLATE_CELESTIAL_SMITE_EVIL = 22601; +const int FEAT_TEMPLATE_CELESTIAL_MARKER = 22602; +const int FEAT_TEMPLATE_FIENDISH_SMITE_GOOD = 22603; +const int FEAT_TEMPLATE_FIENDISH_MARKER = 22604; +const int FEAT_TEMPLATE_HALF_CELESTIAL_SMITE_EVIL = 22605; +const int FEAT_TEMPLATE_HALF_CELESTIAL_PROTECTION = 22606; +const int FEAT_TEMPLATE_HALF_CELESTIAL_BLESS = 22607; +const int FEAT_TEMPLATE_HALF_CELESTIAL_AID = 22608; +const int FEAT_TEMPLATE_HALF_CELESTIAL_DETECT = 22609; +const int FEAT_TEMPLATE_HALF_CELESTIAL_CURE_SERIOUS = 22610; +const int FEAT_TEMPLATE_HALF_CELESTIAL_NEUTRALIZE_POISON = 22611; +const int FEAT_TEMPLATE_HALF_CELESTIAL_HOLY_SMITE = 22612; +const int FEAT_TEMPLATE_HALF_CELESTIAL_REMOVE_DISEASE = 22613; +const int FEAT_TEMPLATE_HALF_CELESTIAL_DISPEL_EVIL = 22614; +const int FEAT_TEMPLATE_HALF_CELESTIAL_HOLY_WORD = 22615; +const int FEAT_TEMPLATE_HALF_CELESTIAL_HOLY_AURA = 22616; +const int FEAT_TEMPLATE_HALF_CELESTIAL_HALLOW = 22617; +const int FEAT_TEMPLATE_HALF_CELESTIAL_MASS_CHARM = 22618; +const int FEAT_TEMPLATE_HALF_CELESTIAL_SUMMON_IX = 22619; +const int FEAT_TEMPLATE_HALF_CELESTIAL_RESURRECTION = 22620; +const int FEAT_TEMPLATE_HALF_CELESTIAL_DAYLIGHT = 22621; +const int FEAT_TEMPLATE_HALF_CELESTIAL_MARKER = 22622; +const int FEAT_TEMPLATE_NECROPOLITAN_MARKER = 22623; +const int FEAT_TEMPLATE_HALF_FIENDISH_SMITE_GOOD = 22624; +const int FEAT_TEMPLATE_HALF_FIENDISH_DARKNESS = 22625; +const int FEAT_TEMPLATE_HALF_FIENDISH_DESECRATE = 22626; +const int FEAT_TEMPLATE_HALF_FIENDISH_UNHOLY_BLIGHT = 22627; +const int FEAT_TEMPLATE_HALF_FIENDISH_POISON = 22628; +const int FEAT_TEMPLATE_HALF_FIENDISH_CONTAGION = 22629; +const int FEAT_TEMPLATE_HALF_FIENDISH_BLASPHEMY = 22630; +const int FEAT_TEMPLATE_HALF_FIENDISH_UNHOLY_AURA = 22631; +const int FEAT_TEMPLATE_HALF_FIENDISH_UNHALLOW = 22632; +const int FEAT_TEMPLATE_HALF_FIENDISH_HORRID_WILTING = 22633; +const int FEAT_TEMPLATE_HALF_FIENDISH_SUMMON_IX = 22634; +const int FEAT_TEMPLATE_HALF_FIENDISH_DESTRUCTION = 22635; +const int FEAT_TEMPLATE_HALF_FIENDISH_MARKER = 22636; +const int FEAT_TEMPLATE_LICH_FEAR_AURA = 22637; +const int FEAT_TEMPLATE_LICH_PARALYZING_TOUCH = 22638; +const int FEAT_TEMPLATE_LICH_APPEARANCE = 22639; +const int FEAT_TEMPLATE_LICH_MARKER = 22640; +const int FEAT_TEMPLATE_DEMILICH_ALTER_SELF = 22641; +const int FEAT_TEMPLATE_DEMILICH_ASTRAL_PROJECTION = 22642; +const int FEAT_TEMPLATE_DEMILICH_CREATE_GREATER_UNDEAD = 22643; +const int FEAT_TEMPLATE_DEMILICH_CREATE_UNDEAD = 22644; +const int FEAT_TEMPLATE_DEMILICH_DEATH_KNELL = 22645; +const int FEAT_TEMPLATE_DEMILICH_ENERVATION = 22646; +const int FEAT_TEMPLATE_DEMILICH_GREATER_DISPEL_MAGIC = 22647; +const int FEAT_TEMPLATE_DEMILICH_HARM = 22648; +const int FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_I = 22649; +const int FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_II = 22650; +const int FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_III = 22651; +const int FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_IV = 22652; +const int FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_V = 22653; +const int FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_VI = 22654; +const int FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_VII = 22655; +const int FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_VIII = 22656; +const int FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_IX = 22657; +const int FEAT_TEMPLATE_DEMILICH_TELEKINESIS = 22658; +const int FEAT_TEMPLATE_DEMILICH_WEIRD = 22659; +const int FEAT_TEMPLATE_DEMILICH_GREATER_PLANAR_ALLY = 22660; +const int FEAT_TEMPLATE_DEMILICH_MARKER = 22661; +const int FEAT_TEMPLATE_HALF_DRAGON_BREATH = 22662; +const int FEAT_HD_CHROMATICBLACK_MARKER = 22663; +const int FEAT_HD_CHROMATICBLUE_MARKER = 22664; +const int FEAT_HD_CHROMATICGREEN_MARKER = 22665; +const int FEAT_HD_CHROMATICRED_MARKER = 22666; +const int FEAT_HD_CHROMATICWHITE_MARKER = 22667; +const int FEAT_HD_GEMAMETHYST_MARKER = 22668; +const int FEAT_HD_GEMCRYSTAL_MARKER = 22669; +const int FEAT_HD_GEMEMERALD_MARKER = 22670; +const int FEAT_HD_GEMSAPPHIRE_MARKER = 22671; +const int FEAT_HD_GEMTOPAZ_MARKER = 22672; +const int FEAT_HD_LUNGCHIANGLUNG_MARKER = 22673; +const int FEAT_HD_LUNGLILUNG_MARKER = 22674; +const int FEAT_HD_LUNGLUNGWANG_MARKER = 22675; +const int FEAT_HD_LUNGPANLUNG_MARKER = 22676; +const int FEAT_HD_LUNGSHENLUNG_MARKER = 22677; +const int FEAT_HD_LUNGTIENLUNG_MARKER = 22678; +const int FEAT_HD_LUNGTUNMILUNG_MARKER = 22679; +const int FEAT_HD_METALLICBRASS_MARKER = 22680; +const int FEAT_HD_METALLICBRONZE_MARKER = 22681; +const int FEAT_HD_METALLICCOPPER_MARKER = 22682; +const int FEAT_HD_METALLICGOLD_MARKER = 22683; +const int FEAT_HD_METALLICSILVER_MARKER = 22684; +const int FEAT_HD_OBSCUREBATTLE_MARKER = 22685; +const int FEAT_HD_OBSCUREBROWN_MARKER = 22686; +const int FEAT_HD_OBSCURECHAOS_MARKER = 22687; +const int FEAT_HD_OBSCUREDEEP_MARKER = 22688; +const int FEAT_HD_OBSCUREETHEREAL_MARKER = 22689; +const int FEAT_HD_OBSCUREFANG_MARKER = 22690; +const int FEAT_HD_OBSCUREHOWLING_MARKER = 22691; +const int FEAT_HD_OBSCUREOCEANUS_MARKER = 22692; +const int FEAT_HD_OBSCUREPYROCLASTIC_MARKER = 22693; +const int FEAT_HD_OBSCURERADIANT_MARKER = 22694; +const int FEAT_HD_OBSCURERUST_MARKER = 22695; +const int FEAT_HD_OBSCURESHADOW_MARKER = 22696; +const int FEAT_HD_OBSCURESONG_MARKER = 22697; +const int FEAT_HD_OBSCURESTYX_MARKER = 22698; +const int FEAT_HD_OBSCURETARTERIAN_MARKER = 22699; + +const int FEAT_TEMPLATE_SAINT_SLA_BLESS = 22702; +//const int FEAT_TEMPLATE_SAINT_SLA_GUIDANCE = 22703; +const int FEAT_TEMPLATE_SAINT_SLA_RESISTANCE = 22704; +const int FEAT_TEMPLATE_SAINT_SLA_VIRTUE = 22705; +const int FEAT_TEMPLATE_SAINT_PROTECTIVE_AURA = 22706; +const int FEAT_TEMPLATE_SAINT_HOLY_POWER = 22707; + + // PRC Extra Stunning Feat + const int FEAT_PRC_EXTRA_STUNNING = 4387; + + // Enlightened Fist Feats + const int FEAT_EF_FIST_OF_ENERGY = 4388; + const int FEAT_EF_SPELL_SELECT = 4389; + const int FEAT_EF_ARCANE_FIST = 4390; + const int FEAT_EF_ARCANE_REJUVENATION = 4391; + const int FEAT_EF_HOLD_RAY = 4392; + const int FEAT_EF_DIAMOND_SOUL = 4393; + const int FEAT_EF_UNARMEDDMG = 4394; + const int FEAT_EF_SPEED = 4395; + const int FEAT_EF_EXTRA_STUNNING = 4396; + const int FEAT_EF_FIST_OF_ENERGY_BURST = 4397; + +// Knight Feats +const int FEAT_FIGHT_CHALLENGE = 2834; + +// Champion of Corellon Feats +const int FEAT_COC_ELEGANT_STRIKE = 3812; +const int FEAT_COC_WRATH = 3815; + +// Dragon Shaman +const int FEAT_DRAGONSHAMAN_RESOLVE = 3965; +const int FEAT_DRAGONSHAMAN_TOUCHVITALITY = 3961; +const int FEAT_DRAGONSHAMAN_TOUCHVITALITY_MAJOR = 3962; +const int FEAT_DRAGONSHAMAN_BREATH = 3967; +const int FEAT_DRAGONSHAMAN_AURA_POWER = 3953; +const int FEAT_DRAGONSHAMAN_AURA_SENSES = 3956; +const int FEAT_DRAGONSHAMAN_AURA_PRESENCE = 3959; +const int FEAT_DRAGONSHAMAN_AURA_RESISTANCE = 3958; +const int FEAT_DRAGONSHAMAN_AURA_ENERGYSHLD = 3954; +const int FEAT_DRAGONSHAMAN_AURA_VIGOR = 3957; +const int FEAT_DRAGONSHAMAN_AURA_TOUGHNESS = 3955; +const int FEAT_DRAGONSHAMAN_AURA_INSIGHT = 1895; +const int FEAT_DRAGONSHAMAN_AURA_RESOLVE = 1896; +const int FEAT_DRAGONSHAMAN_AURA_STAMINA = 1897; +const int FEAT_DRAGONSHAMAN_AURA_SWIFTNESS = 1898; +const int FEAT_DRAGONSHAMAN_AURA_MAGICPOWER = 1838; +const int FEAT_DRAGONSHAMAN_AURA_ENERGY = 1837; +const int FEAT_DRAGONSHAMAN_ARMOR = 3960; +const int FEAT_DRAGONSHAMAN_ENERGY_IMMUNITY = 3966; +const int FEAT_DRAGONSHAMAN_WINGS = 3978; +const int FEAT_DRAGONSHAMAN_RED = 3968; +const int FEAT_DRAGONSHAMAN_BLACK = 3971; +const int FEAT_DRAGONSHAMAN_BLUE = 3969; +const int FEAT_DRAGONSHAMAN_SILVER = 3973; +const int FEAT_DRAGONSHAMAN_BRASS = 3975; +const int FEAT_DRAGONSHAMAN_GOLD = 3974; +const int FEAT_DRAGONSHAMAN_GREEN = 3970; +const int FEAT_DRAGONSHAMAN_COPPER = 3977; +const int FEAT_DRAGONSHAMAN_WHITE = 3972; +const int FEAT_DRAGONSHAMAN_BRONZE = 3976; +const int FEAT_DRACONIC_AURA_LEVEL_1 = 3979; +const int FEAT_DRACONIC_AURA_LEVEL_2 = 3980; +const int FEAT_DRACONIC_AURA_LEVEL_3 = 3981; +const int FEAT_DRACONIC_AURA_LEVEL_4 = 3982; +const int FEAT_DRACONIC_AURA_LEVEL_5 = 3983; +const int FEAT_DRACONIC_AURA_LEVEL_6 = 3984; +const int FEAT_DRACONIC_AURA_LEVEL_7 = 3985; +const int FEAT_DRACONIC_AURA_LEVEL_8 = 3986; +const int FEAT_DRACONIC_AURA_LEVEL_9 = 3987; +const int FEAT_SHAMANIC_INVOCATION = 3963; + +//Other Draconic Aura Feats +const int FEAT_DOUBLE_DRACONIC_AURA = 1883; +const int FEAT_BONUS_AURA_SENSES = 1891; +const int FEAT_BONUS_AURA_PRESENCE = 1885; +const int FEAT_BONUS_AURA_RESISTACID = 1886; +const int FEAT_BONUS_AURA_RESISTCOLD = 1887; +const int FEAT_BONUS_AURA_RESISTELEC = 1888; +const int FEAT_BONUS_AURA_RESISTFIRE = 1889; +const int FEAT_BONUS_AURA_TOUGHNESS = 1894; +const int FEAT_BONUS_AURA_INSIGHT = 1884; +const int FEAT_BONUS_AURA_RESOLVE = 1890; +const int FEAT_BONUS_AURA_STAMINA = 1892; +const int FEAT_BONUS_AURA_SWIFTNESS = 1893; +const int FEAT_BONUS_AURA_MAGICPOWER = 1840; +const int FEAT_BONUS_AURA_ENERGYACID = 1828; +const int FEAT_BONUS_AURA_ENERGYCOLD = 1829; +const int FEAT_BONUS_AURA_ENERGYELEC = 1830; +const int FEAT_BONUS_AURA_ENERGYFIRE = 1831; +const int FEAT_MARSHAL_DRACONIC_AURA_LEVEL_1 = 1845; +const int FEAT_MARSHAL_DRACONIC_AURA_LEVEL_2 = 1846; +const int FEAT_MARSHAL_DRACONIC_AURA_LEVEL_3 = 1847; +const int FEAT_MARSHAL_DRACONIC_AURA_LEVEL_4 = 1848; +const int FEAT_MARSHAL_DRACONIC_AURA_LEVEL_5 = 1849; +const int FEAT_MARSHAL_DRACONIC_AURA_LEVEL_6 = 1850; +const int FEAT_MARSHAL_DRACONIC_AURA_LEVEL_7 = 1851; +const int FEAT_MARSHAL_DRACONIC_AURA_LEVEL_8 = 1852; +const int FEAT_MARSHAL_AURA_SENSES = 1879; +const int FEAT_MARSHAL_AURA_PRESENCE = 1873; +const int FEAT_MARSHAL_AURA_RESISTACID = 1874; +const int FEAT_MARSHAL_AURA_RESISTCOLD = 1875; +const int FEAT_MARSHAL_AURA_RESISTELEC = 1876; +const int FEAT_MARSHAL_AURA_RESISTFIRE = 1877; +const int FEAT_MARSHAL_AURA_TOUGHNESS = 1882; +const int FEAT_MARSHAL_AURA_INSIGHT = 1872; +const int FEAT_MARSHAL_AURA_RESOLVE = 1878; +const int FEAT_MARSHAL_AURA_STAMINA = 1880; +const int FEAT_MARSHAL_AURA_SWIFTNESS = 1881; +const int FEAT_MARSHAL_AURA_MAGICPOWER = 1839; +const int FEAT_MARSHAL_AURA_ENERGYACID = 1832; +const int FEAT_MARSHAL_AURA_ENERGYCOLD = 1833; +const int FEAT_MARSHAL_AURA_ENERGYELEC = 1834; +const int FEAT_MARSHAL_AURA_ENERGYFIRE = 1835; + +//Warlock feats +const int FEAT_IMBUE_ITEM = 4459; +const int FEAT_ELDRITCH_BLAST = 4460; +const int FEAT_FIENDISH_RESILIENCE = 4466; +const int FEAT_WARLOCK_RESIST_ACID = 4461; +const int FEAT_WARLOCK_RESIST_COLD = 4462; +const int FEAT_WARLOCK_RESIST_ELEC = 4463; +const int FEAT_WARLOCK_RESIST_FIRE = 4464; +const int FEAT_WARLOCK_RESIST_SONIC = 4465; +const int FEAT_WARLOCK_REDUCTION = 4467; +const int FEAT_DECEIVE_ITEM = 4468; +const int FEAT_EXTRA_INVOCATION_I = 4474; +const int FEAT_EXTRA_INVOCATION_II = 4475; +const int FEAT_EXTRA_INVOCATION_III = 4476; +const int FEAT_EXTRA_INVOCATION_IV = 4477; +const int FEAT_EXTRA_INVOCATION_V = 4478; +const int FEAT_EXTRA_INVOCATION_VI = 4479; +const int FEAT_EXTRA_INVOCATION_VII = 4480; +const int FEAT_EXTRA_INVOCATION_VIII = 4481; +const int FEAT_EXTRA_INVOCATION_IX = 4482; +const int FEAT_EXTRA_INVOCATION_X = 4483; +const int FEAT_ELDRITCH_SCULPTOR = 4469; +const int FEAT_LORD_OF_ALL_ESSENCES = 4470; +const int FEAT_MASTER_OF_THE_ELEMENTS = 4484; +const int FEAT_MORPHEME_SAVANT = 4471; +const int FEAT_PARAGON_VISIONARY = 4472; +const int FEAT_WARLOCK_SHADOWMASTER = 4473; +const int FEAT_EPIC_EXTRA_INVOCATION_I = 7700; +const int FEAT_EPIC_EXTRA_INVOCATION_II = 7701; +const int FEAT_EPIC_EXTRA_INVOCATION_III = 7702; +const int FEAT_EPIC_EXTRA_INVOCATION_IV = 7703; +const int FEAT_EPIC_EXTRA_INVOCATION_V = 7704; +const int FEAT_EPIC_EXTRA_INVOCATION_VI = 7705; +const int FEAT_EPIC_EXTRA_INVOCATION_VII = 7706; +const int FEAT_EPIC_EXTRA_INVOCATION_VIII = 7707; +const int FEAT_EPIC_EXTRA_INVOCATION_IX = 7708; +const int FEAT_EPIC_EXTRA_INVOCATION_X = 7709; +const int FEAT_EPIC_ELDRITCH_BLAST_I = 7710; +const int FEAT_EPIC_ELDRITCH_BLAST_II = 7711; +const int FEAT_EPIC_ELDRITCH_BLAST_III = 7712; +const int FEAT_EPIC_ELDRITCH_BLAST_IV = 7713; +const int FEAT_EPIC_ELDRITCH_BLAST_V = 7714; +const int FEAT_EPIC_ELDRITCH_BLAST_VI = 7715; +const int FEAT_EPIC_ELDRITCH_BLAST_VII = 7716; +const int FEAT_EPIC_ELDRITCH_BLAST_VIII = 7717; +const int FEAT_EPIC_ELDRITCH_BLAST_IX = 7718; +const int FEAT_EPIC_ELDRITCH_BLAST_X = 7719; +const int FEAT_EPIC_FIENDISH_RESILIENCE_I = 7720; +const int FEAT_EPIC_FIENDISH_RESILIENCE_II = 7721; +const int FEAT_EPIC_FIENDISH_RESILIENCE_III = 7722; +const int FEAT_EPIC_FIENDISH_RESILIENCE_IV = 7723; +const int FEAT_EPIC_FIENDISH_RESILIENCE_V = 7724; +const int FEAT_EPIC_FIENDISH_RESILIENCE_VI = 7725; +const int FEAT_EPIC_FIENDISH_RESILIENCE_VII = 7726; +const int FEAT_EPIC_FIENDISH_RESILIENCE_VIII = 7727; +const int FEAT_EPIC_FIENDISH_RESILIENCE_IX = 7728; +const int FEAT_EPIC_FIENDISH_RESILIENCE_X = 7729; +const int FEAT_WARLOCK_SHADOWMASTER_SHADES = 4485; +const int FEAT_VERMINLORD = 5323; + +//Master Alchemist and various crafting + +const int FEAT_SKILL_FOCUS_ALCHEMY = 24000; +const int FEAT_EPIC_SKILL_FOCUS_ALCHEMY = 24001; +const int FEAT_MAGICAL_ARTISAN_CRAFT_MAGIC_ARMS = 24002; +const int FEAT_MAGICAL_ARTISAN_CRAFT_ROD = 24003; +const int FEAT_MAGICAL_ARTISAN_CRAFT_STAFF = 24004; +const int FEAT_MAGICAL_ARTISAN_CRAFT_WAND = 24005; +const int FEAT_MAGICAL_ARTISAN_CRAFT_WONDROUS = 24006; +const int FEAT_MAGICAL_ARTISAN_FORGE_RING = 24007; +const int FEAT_MAGICAL_ARTISAN_SCRIBE_SCROLL = 24008; +const int FEAT_MAGICAL_ARTISAN_ATTUNE_GEM = 24009; +const int FEAT_MAGICAL_ARTISAN_INSCRIBE_RUNE = 24010; +const int FEAT_MAGICAL_ARTISAN_BREW_POTION = 24011; +const int FEAT_BREW_2PERDAY = 24012; +const int FEAT_BREW_3PERDAY = 24013; +const int FEAT_BREW_4PERDAY = 24014; +const int FEAT_BREW_POTION_4TH = 24015; +const int FEAT_BREW_POTION_5TH = 24016; +const int FEAT_BREW_POTION_6TH = 24017; +const int FEAT_BREW_POTION_7TH = 24018; +const int FEAT_BREW_POTION_8TH = 24019; +const int FEAT_BREW_POTION_9TH = 24020; +const int FEAT_MAGICAL_ARTISAN_CRAFT_SKULL_TALISMAN = 24022; + +//Tenjac's 3.3 feats +const int FEAT_DAUNTING_PRESENCE = 24025; +const int FEAT_PROFANE_LIFELEECH = 24026; +const int FEAT_SACRED_VITALITY = 24027; +const int FEAT_SACRED_VENGEANCE = 24028; +const int FEAT_DEFORM_EYES = 24029; +const int FEAT_DEFORM_FACE = 24030; +const int FEAT_DEFORM_PARASITE = 24031; +const int FEAT_APOSTATE = 24032; +const int FEAT_DARK_SPEECH = 24033; +const int FEAT_DARK_WHISPERS = 24034; +const int FEAT_MASTERS_WILL = 24035; +const int FEAT_DEFORM_MADNESS = 24036; +const int FEAT_REFLEXIVE_PSYCHOSIS = 24037; +const int FEAT_CHOSEN_OF_EVIL = 24038; + +//skullclan hunter +const int FEAT_SH_IMMUNITY_DISEASE = 2216; +const int FEAT_SH_IMMUNITY_PARALYSIS = 2217; +const int FEAT_SH_IMMUNITY_ABILITY_DECREASE = 2218; +const int FEAT_SH_IMMUNITY_LEVEL_DRAIN = 2219; + + +/*////////////////////////////////////////////////// +//////////////// TRUENAMING //////////////////////// +//////////////////////////////////////////////////*/ + +// General Feats +const int FEAT_TRUENAME_TRAINING = 2175; +const int FEAT_SKILL_FOCUS_TRUESPEAK = 2182; +const int FEAT_EPIC_SKILL_FOCUS_TRUESPEAK = 2183; + +// Metautterance feats +const int FEAT_EMPOWER_UTTERANCE = 2172; +const int FEAT_EXTEND_UTTERANCE = 2173; +const int FEAT_QUICKEN_UTTERANCE = 2174; + +// Recitation feats +const int FEAT_RECITATION_FORTIFIED = 2167; +const int FEAT_RECITATION_MEDITATIVE = 2168; +const int FEAT_RECITATION_MINDFUL = 2169; +const int FEAT_RECITATION_SANGUINE = 2170; +const int FEAT_RECITATION_VITAL = 2171; + +// Utterance Focus +const int FEAT_UTTERANCE_FOCUS_BREATH_CLEANSING = 2155; +const int FEAT_UTTERANCE_FOCUS_BREATH_RECOVERY = 2156; +const int FEAT_UTTERANCE_FOCUS_ELDRITCH_ATTRACTION = 2157; +const int FEAT_UTTERANCE_FOCUS_MORALE_BOOST = 2158; +const int FEAT_UTTERANCE_FOCUS_PRETERNATURAL_CLARITY = 2159; +const int FEAT_UTTERANCE_FOCUS_SENSORY_FOCUS = 2160; +const int FEAT_UTTERANCE_FOCUS_SILENT_CASTER = 2161; +const int FEAT_UTTERANCE_FOCUS_SINGULAR_MIND = 2162; +const int FEAT_UTTERANCE_FOCUS_TEMPORAL_SPIRAL = 2163; +const int FEAT_UTTERANCE_FOCUS_TEMPORAL_TWIST = 2164; +const int FEAT_UTTERANCE_FOCUS_WARD_PEACE = 2165; +const int FEAT_UTTERANCE_FOCUS_SHOCKWAVE = 2166; + +// Focused Lexicon +const int FEAT_FOCUSED_LEXICON_ABERRATION = 2130; +const int FEAT_FOCUSED_LEXICON_ANIMAL = 2131; +const int FEAT_FOCUSED_LEXICON_BEAST = 2132; +const int FEAT_FOCUSED_LEXICON_CONSTRUCT = 2133; +const int FEAT_FOCUSED_LEXICON_DRAGON = 2134; +const int FEAT_FOCUSED_LEXICON_DWARF = 2135; +const int FEAT_FOCUSED_LEXICON_ELEMENTAL = 2136; +const int FEAT_FOCUSED_LEXICON_ELF = 2137; +const int FEAT_FOCUSED_LEXICON_FEY = 2138; +const int FEAT_FOCUSED_LEXICON_GIANT = 2139; +const int FEAT_FOCUSED_LEXICON_GNOME = 2140; +const int FEAT_FOCUSED_LEXICON_HALFELF = 2141; +const int FEAT_FOCUSED_LEXICON_HALFLING = 2142; +const int FEAT_FOCUSED_LEXICON_HALFORC = 2143; +const int FEAT_FOCUSED_LEXICON_HUMAN = 2144; +const int FEAT_FOCUSED_LEXICON_GOBLINOID = 2145; +const int FEAT_FOCUSED_LEXICON_MONSTROUS = 2146; +const int FEAT_FOCUSED_LEXICON_ORC = 2147; +const int FEAT_FOCUSED_LEXICON_REPTILIAN = 2148; +const int FEAT_FOCUSED_LEXICON_MAGICALBEAST = 2149; +const int FEAT_FOCUSED_LEXICON_OOZE = 2150; +const int FEAT_FOCUSED_LEXICON_OUTSIDER = 2151; +const int FEAT_FOCUSED_LEXICON_SHAPECHANGER = 2152; +const int FEAT_FOCUSED_LEXICON_UNDEAD = 2153; +const int FEAT_FOCUSED_LEXICON_VERMIN = 2154; + +// Recitation feats +const int FEAT_EGO_BULL = 1853; +const int FEAT_EGO_IRON = 1854; +const int FEAT_EGO_HEART = 1855; +const int FEAT_EGO_SWALLOW = 1856; +const int FEAT_EGO_WOUND = 1857; +const int FEAT_EGO_FOOL = 1858; +const int FEAT_EGO_FORT = 1859; +const int FEAT_EGO_FRIGHT = 1860; +const int FEAT_EGO_DRAKE = 1861; +const int FEAT_EGO_STEP = 1862; + +/*////////////////////////////////////////////////// +//////////////// END TRUENAMING///////////////////// +//////////////////////////////////////////////////*/ + +/*////////////////////////////////////////////////// +//////////////// BEGIN TOME OF BATTLE/////////////// +//////////////////////////////////////////////////*/ + +const int FEAT_EXTRA_GRANTED_MANEUVER = 4096; +const int FEAT_EXTRA_READIED_MANEUVER = 4097; +const int FEAT_ADAPTIVE_STYLE = 24075; +const int FEAT_DESERT_FIRE = 4178; +const int FEAT_DESERT_WIND_DODGE = 4179; +const int FEAT_DEVOTED_BULWARK = 4180; +const int FEAT_AVENGING_STRIKE = 4297; +const int FEAT_RAPID_ASSAULT = 4299; +const int FEAT_SUPERIOR_UNARMED_STRIKE = 4386; +const int FEAT_SNAP_KICK = 4398; +const int FEAT_WEAPON_FOCUS_APTITUDE_1 = 2123; +const int FEAT_EPIC_WEAPON_FOCUS_APTITUDE_1 = 2124; +const int FEAT_WEAPON_SPECIALIZATION_APTITUDE_1 = 2125; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_APTITUDE_1 = 2126; +const int FEAT_IMPROVED_CRITICAL_APTITUDE_1 = 2127; +const int FEAT_SANCTIFY_MARTIAL_STRIKE_APTITUDE_1 = 2128; +const int FEAT_VILE_MARTIAL_STRIKE_APTITUDE_1 = 2129; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_APTITUDE_1 = 24424; +const int FEAT_EPIC_DEVASTATING_CRITICAL_APTITUDE_1 = 24425; +const int FEAT_WEAPON_OF_CHOICE_APTITUDE_1 = 24426; +const int FEAT_WEAPON_FOCUS_APTITUDE_2 = 24427; +const int FEAT_EPIC_WEAPON_FOCUS_APTITUDE_2 = 24428; +const int FEAT_WEAPON_SPECIALIZATION_APTITUDE_2 = 24429; +const int FEAT_EPIC_WEAPON_SPECIALIZATION_APTITUDE_2 = 24430; +const int FEAT_IMPROVED_CRITICAL_APTITUDE_2 = 24431; +const int FEAT_SANCTIFY_MARTIAL_STRIKE_APTITUDE_2 = 24432; +const int FEAT_VILE_MARTIAL_STRIKE_APTITUDE_2 = 24433; +const int FEAT_EPIC_OVERWHELMING_CRITICAL_APTITUDE_2 = 24434; +const int FEAT_EPIC_DEVASTATING_CRITICAL_APTITUDE_2 = 24435; +const int FEAT_WEAPON_OF_CHOICE_APTITUDE_2 = 24436; +const int FEAT_VITAL_RECOVERY = 3636; +const int FEAT_SHADOW_BLADE = 3828; +const int FEAT_BLADE_MEDITATION_DESERT_WIND = 4099; +const int FEAT_BLADE_MEDITATION_DEVOTED_SPIRIT = 3829; +const int FEAT_BLADE_MEDITATION_DIAMOND_MIND = 3830; +const int FEAT_BLADE_MEDITATION_IRON_HEART = 3831; +const int FEAT_BLADE_MEDITATION_SETTING_SUN = 3832; +const int FEAT_BLADE_MEDITATION_SHADOW_HAND = 3833; +const int FEAT_BLADE_MEDITATION_STONE_DRAGON = 3834; +const int FEAT_BLADE_MEDITATION_TIGER_CLAW = 3835; +const int FEAT_BLADE_MEDITATION_WHITE_RAVEN = 3836; +const int FEAT_DIVINE_SPIRIT = 3964; +const int FEAT_IRONHEART_AURA = 3990; +const int FEAT_SHADOW_TRICKSTER = 3999; +const int FEAT_WHITE_RAVEN_DEFENSE = 4074; +const int FEAT_INSTANT_CLARITY = 4098; +const int FEAT_SUDDEN_RECOVERY = 4242; +const int FEAT_SONG_WHITE_RAVEN = 4243; +const int FEAT_PSYCHIC_RENEWAL = 2890; +const int FEAT_TIGER_BLOODED = 5295; +const int FEAT_STONE_POWER = 5294; + +const int FEAT_BATTLE_CLARITY = 3529; +const int FEAT_WEAPON_APTITUDE = 3538; +const int FEAT_BATTLE_ARDOR = 3539; +const int FEAT_BATTLE_CUNNING = 3546; +const int FEAT_BATTLE_SKILL = 3547; +const int FEAT_BATTLE_MASTERY = 3564; +const int FEAT_STANCE_MASTERY = 3565; + +const int FEAT_SS_DF_WF_DW = 2195; +const int FEAT_SS_DF_WF_DM = 2196; +const int FEAT_SS_DF_WF_SS = 2197; +const int FEAT_SS_DF_WF_SH = 2198; +const int FEAT_SS_DF_WF_SD = 2199; +const int FEAT_SS_DF_WF_TC = 2200; + +const int FEAT_SS_DF_IS_DW = 2201; +const int FEAT_SS_DF_IS_DM = 2202; +const int FEAT_SS_DF_IS_SS = 2203; +const int FEAT_SS_DF_IS_SH = 2204; +const int FEAT_SS_DF_IS_SD = 2205; +const int FEAT_SS_DF_IS_TC = 2206; + +const int FEAT_SS_DF_DS_DW = 2207; +const int FEAT_SS_DF_DS_DM = 2208; +const int FEAT_SS_DF_DS_SS = 2209; +const int FEAT_SS_DF_DS_SH = 2210; +const int FEAT_SS_DF_DS_SD = 2211; +const int FEAT_SS_DF_DS_TC = 2212; + +/*////////////////////////////////////////////////// +//////////////// END TOME OF BATTLE///////////////// +//////////////////////////////////////////////////*/ + +/*////////////////////////////////////////////////// +//////////////// BEGIN INFUSIONS /////////////// +//////////////////////////////////////////////////*/ + +const int FEAT_ARTISAN_BONUS = 4065; +const int FEAT_ITEM_CREATION = 4066; +const int FEAT_CRAFT_HOMUNCULUS = 4067; +const int FEAT_RETAIN_ESSENCE = 4068; +const int FEAT_METAMAGIC_SPELL_TRIGGER = 4069; +const int FEAT_METAMAGIC_SPELL_COMPLETION = 4070; +const int FEAT_SKILL_MASTERY_ARTIFICER = 4071; +const int FEAT_EPIC_ARTIFICER = 4072; + +/*////////////////////////////////////////////////// +//////////////// END INFUSIONS ///////////////// +//////////////////////////////////////////////////*/ + +//Justice of Weald and Woe +const int FEAT_LUCKY_SHOT = 24021; + +//:: Bloodclaw Master +const int FEAT_BCM_RENDING_CLAWS = 24065; + +//:: Ironmind +const int FEAT_ARMOURED_MIND = 3644; +const int FEAT_MIND_OVER_BODY = 3645; + +// Dread Necromancer +const int FEAT_DN_SCABROUS_TOUCH = 24145; +const int FEAT_DN_NEG_NRG_BURST = 24149; +const int FEAT_DN_ENERVATING_TOUCH = 24153; + +// Knight of the Middle Circle +const int FEAT_KOTMC_TRUE_STRIKE = 2579; + +// Noble +const int FEAT_NOBLE_GREATNESS = 24163; +const int FEAT_NOBLE_CONFIDENCE = 24164; + +//Morninglord feats +const int FEAT_GREATER_TURNING_1 = 24165; +const int FEAT_GREATER_TURNING_2 = 24166; +const int FEAT_GREATER_TURNING_3 = 24167; +const int FEAT_GREATER_TURNING_4 = 24168; +const int FEAT_GREATER_TURNING_5 = 24169; +const int FEAT_GREATER_TURNING_6 = 24170; +const int FEAT_GREATER_TURNING_7 = 24171; +const int FEAT_ML_MAXIMIZE_TURNING = 24172; +const int FEAT_BANE_OF_THE_RESTLESS = 24173; +const int FEAT_CREATIVE_FIRE = 24174; +const int FEAT_SEARING_RAY = 24175; +const int FEAT_BLESSING_OF_DAWN = 24176; +const int FEAT_REJUVENATION_OF_MORN = 24177; +const int FEAT_ML_AURA_OF_RADIANCE = 24178; +const int FEAT_EPIC_MORNINGLORD = 24179; +const int FEAT_ML_DAYLIGHT = 24180; + +//Alienist feats +const int FEAT_SUMMON_ALIEN = 24214; +const int FEAT_ALIEN_BLESSING = 24215; +const int FEAT_MAD_CERTAINTY = 24216; +const int FEAT_PSEUDONATURAL_FAMILIAR = 24217; +const int FEAT_EXTRA_SUMMONING = 24218; +const int FEAT_INSANE_CERTAINTY = 24219; +const int FEAT_TIMELESS_BODY = 24220; +const int FEAT_TRANSCENDENCE = 24221; +const int FEAT_PHOBIA_ABERRATION = 24222; +const int FEAT_PHOBIA_ANIMAL = 24223; +const int FEAT_PHOBIA_BEAST = 24224; +const int FEAT_PHOBIA_CONSTRUCT = 24225; +const int FEAT_PHOBIA_DRAGON = 24226; +const int FEAT_PHOBIA_GOBLINOID = 24227; +const int FEAT_PHOBIA_MONSTROUS = 24228; +const int FEAT_PHOBIA_ORC = 24229; +const int FEAT_PHOBIA_REPTILIAN = 24230; +const int FEAT_PHOBIA_ELEMENTAL = 24231; +const int FEAT_PHOBIA_FEY = 24232; +const int FEAT_PHOBIA_GIANT = 24233; +const int FEAT_PHOBIA_MAGICAL_BEAST = 24234; +const int FEAT_PHOBIA_SHAPECHANGER = 24235; +const int FEAT_PHOBIA_UNDEAD = 24236; +const int FEAT_PHOBIA_VERMIN = 24237; + +//PnP Familiars +const int FEAT_PNP_FAMILIAR = 24243; + +//Material components +const int FEAT_ESCHEW_MATERIALS = 2596; +const int FEAT_IGNORE_MATERIALS = 2597; + +//Rage Mage +const int FEAT_GREATER_RAGE = 329; +const int FEAT_SPELL_RAGE = 24244; +const int FEAT_SPELL_FURY = 24247; +const int FEAT_TIRELESS_RAGE = 24248; +const int FEAT_WARRIOR_CRY = 24249; + +//Shining Blade of Heironius +const int FEAT_SHOCK_BLADE = 4184; +const int FEAT_HOLY_BLADE = 4186; +const int FEAT_BRILLIANT_BLADE = 4188; + +// Metamagic Feat Abilities +const int FEAT_EXTEND_SPELL_ABILITY = 23595; +const int FEAT_SILENT_SPELL_ABILITY = 23596; +const int FEAT_STILL_SPELL_ABILITY = 23597; +const int FEAT_EMPOWER_SPELL_ABILITY = 23598; +const int FEAT_MAXIMIZE_SPELL_ABILITY = 23599; +const int FEAT_QUICKEN_SPELL_ABILITY = 23600; + +//contemplative +const int FEAT_DIVINE_SOUL = 2247; + +const int FEAT_BATTLE_CASTER = 23589; +const int FEAT_TOMB_TAINTED_SOUL = 23555; + +//crusader +const int FEAT_INDOMITABLE_SOUL = 2867; +const int FEAT_CRUSADER_SMITE = 2863; + +//Jade Phoenix Mage +const int FEAT_JPM_RITE_WAKING = 24077; + +//Templar +const int FEAT_SECULAR_AUTHORITY = 23545; + +// Blighter +const int FEAT_UNDEAD_WILD_SHAPE = 5262; +const int FEAT_CONTAGIOUS_TOUCH = 5261; + +// Nentyar Hunter +const int FEAT_SWIFT_TRACKER = 5254; +const int FEAT_SWIFTNESS_STAG = 5255; +const int FEAT_EYES_HAWK = 5254; +const int FEAT_HEART_LION = 5255; + +//Archivist +const int FEAT_LORE_MASTERY = 23580; +const int FEAT_ARCHIVIST_OF_NATURE = 23581; +const int FEAT_DRACONIC_ARCHIVIST = 23582; +const int FEAT_DK_TACTICS = 23583; +const int FEAT_DK_PUISSANCE = 23584; +const int FEAT_DK_FOE = 23585; +const int FEAT_DK_DREADSECRET = 23586; +const int FEAT_DK_FOREKNOWLEDGE = 23587; +const int FEAT_EPIC_DARK_KNOWLEDGE = 23546; +const int FEAT_EPIC_LORE_MASTERY = 23547; + + +const int FEAT_SKILL_FOCUS_RIDE = 3037; +const int FEAT_EPIC_SKILL_FOCUS_RIDE = 3038; +const int FEAT_SKILL_FOCUS_JUMP = 3039; +const int FEAT_EPIC_SKILL_FOCUS_JUMP = 3040; +const int FEAT_SKILL_FOCUS_SENSE_MOTIVE = 3041; +const int FEAT_EPIC_SKILL_FOCUS_SENSE_MOTIVE = 3042; +const int FEAT_SKILL_FOCUS_MARTIAL_LORE = 3043; +const int FEAT_EPIC_SKILL_FOCUS_MARTIAL_LORE = 3044; +const int FEAT_SKILL_FOCUS_BALANCE = 3045; +const int FEAT_EPIC_SKILL_FOCUS_BALANCE = 3046; +const int FEAT_SKILL_FOCUS_CRAFT_POISON = 3047; +const int FEAT_EPIC_SKILL_FOCUS_CRAFT_POISON = 3048; +const int FEAT_SKILL_FOCUS_PSICRAFT = 3049; +const int FEAT_EPIC_SKILL_FOCUS_PSICRAFT = 3050; +const int FEAT_SKILL_FOCUS_CLIMB = 3051; +const int FEAT_EPIC_SKILL_FOCUS_CLIMB = 3052; +const int FEAT_SKILL_FOCUS_CRAFT_GENERAL = 3053; +const int FEAT_EPIC_SKILL_FOCUS_CRAFT_GENERAL = 3054; + +//hellfire warlock +const int FEAT_HELLFIRE_SPEAR = 23533; +const int FEAT_HELLFIRE_GLAIVE = 23534; +const int FEAT_HELLFIRE_BLOW = 23535; +const int FEAT_HELLFIRE_CHAIN = 23536; +const int FEAT_HELLFIRE_CONE = 23537; +const int FEAT_HELLFIRE_LINE = 23538; +const int FEAT_HELLFIRE_DOOM = 23539; +const int FEAT_HELLFIRE_BLAST = 23540; +const int FEAT_HELLFIRE_INFUSION = 23541; +const int FEAT_HELLFIRE_SHIELD = 23542; +const int FEAT_RESISTANCE_TO_FIRE = 23543; + +const int FEAT_ELDRITCH_SPELLWEAVE = 23529; +const int FEAT_TRAPFINDING = 23591; + +// Complete Scoundrel Feats +const int FEAT_DARING_OUTLAW = 2374; +const int FEAT_SWIFT_AMBUSHER = 2548; +const int FEAT_ASCETIC_STALKER = 2598; +const int FEAT_EXPANDED_KI_POOL = 2687; +const int FEAT_IMPROVED_SKIMISH = 2688; + +//:: Complete Adventurer Feats +const int FEAT_BRUTAL_THROW = 2689; +const int FEAT_MARTIAL_STALKER = 25998; + +// Complete Warrior Feats +const int FEAT_EXTRA_RAGE = 2690; +const int FEAT_FLYING_KICK = 2802; +const int FEAT_ANVIL_OF_THUNDER = 5290; +const int FEAT_HAMMERS_EDGE = 5289; +const int FEAT_HIGH_SWORD_LOW_AXE = 5288; +const int FEAT_SPINNING_HALBERD = 5287; +const int FEAT_THREE_MOUNTAINS = 5286; +const int FEAT_MONKEY_GRIP = 5197; +const int FEAT_CRESCENT_MOON = 5194; +const int FEAT_QUICK_STAFF = 5190; +const int FEAT_RANGED_DISARM = 5192; +const int FEAT_BEAR_FANG = 5189; +const int FEAT_IMPROVED_RAPID_SHOT = 5188; +const int FEAT_EARTHS_EMBRACE = 5177; +const int FEAT_SHIELD_CHARGE = 3256; +const int FEAT_SHIELD_SLAM = 3257; + +// CityScape Feats +const int FEAT_EFFICIENT_DEFENDER = 5293; +const int FEAT_STRONG_STOMACH = 5329; + +// Heroes of Battle Feats +const int FEAT_IMPROVED_COHORT = 5276; +const int FEAT_SHIELD_WALL = 5273; + +// Heroes of Horror Feats +const int FEAT_CORRUPT_SPELL_FOCUS = 5272; +const int FEAT_GREATER_CORRUPT_SPELL_FOCUS = 5271; +const int FEAT_HAUNTING_MELODY = 5269; +const int FEAT_MASTER_OF_KNOWLEDGE = 5268; +const int FEAT_UNNATURAL_WILL = 5267; + +// Eberron Campaign Setting Feats +const int FEAT_ECCLESIARCH = 5275; +const int FEAT_WAND_MASTERY = 5314; + +// Secrets of Sarlona Feats +const int FEAT_MOUNTAIN_STANCE = 5193; + +// Oriental Adventures Feats +const int FEAT_GREAT_DIPLOMAT = 5274; + +// DungeonScape Feats +const int FEAT_TRAP_ENGINEER = 5292; +const int FEAT_WEAPON_AND_TORCH = 5291; +const int FEAT_FONT_INSPIRATION_1 = 5339; +const int FEAT_FONT_INSPIRATION_2 = 5340; +const int FEAT_FONT_INSPIRATION_3 = 5341; +const int FEAT_FONT_INSPIRATION_4 = 5342; +const int FEAT_FONT_INSPIRATION_5 = 5343; +const int FEAT_FONT_INSPIRATION_6 = 5344; +const int FEAT_FONT_INSPIRATION_7 = 5345; +const int FEAT_FONT_INSPIRATION_8 = 5346; +const int FEAT_FONT_INSPIRATION_9 = 5347; +const int FEAT_FONT_INSPIRATION_10 = 5348; +const int FEAT_OPPORTUNISTIC_PIETY_HEAL = 5358; +const int FEAT_OPPORTUNISTIC_PIETY_TURN = 5359; + +// Combat Maneuver Feats +const int FEAT_CURLING_WAVE_STRIKE = 2809; +const int FEAT_SIDESTEP_CHARGE = 3505; +const int FEAT_POWERFUL_CHARGE = 3506; +const int FEAT_GREATER_POWERFUL_CHARGE = 3507; +const int FEAT_RHINO_TRIBE_CHARGE = 3508; +const int FEAT_FURIOUS_CHARGE = 3509; +const int FEAT_RECKLESS_CHARGE = 3510; +const int FEAT_LION_TRIBE_WARRIOR = 3571; +const int FEAT_TWO_WEAPON_POUNCE = 3573; +const int FEAT_LEGENDARY_WRESTLER = 5173; +const int FEAT_COMBAT_MOVE_1 = 2898; +const int FEAT_COMBAT_MOVE_2 = 5195; +const int FEAT_COMBAT_MOVE_3 = 3415; + +// Unapproachable East Feats +const int FEAT_OWLBEAR_BERSERKER = 5175; +const int FEAT_SNOW_TIGER_BERSERKER = 3572; +const int FEAT_GREAT_STAG_BERSERKER = 3511; +const int FEAT_ETTERCAP_BERSERKER = 5320; +const int FEAT_ICE_TROLL_BERSERKER = 5321; +const int FEAT_WOLF_BERSERKER = 5322; +const int FEAT_BONUS_MOUNTAIN = 5172; +const int FEAT_KEEN_INTELLECT = 5366; +const int FEAT_VREMYONNI_TRAINING = 5367; + +// Player's Handbook 3.5 Feats +const int FEAT_PERSUASIVE = 5319; +const int FEAT_IMPROVED_GRAPPLE = 2804; +const int FEAT_IMPROVED_OVERRUN = 2805; +const int FEAT_IMPROVED_BULLRUSH = 2806; +const int FEAT_IMPROVED_TRIP = 2807; +const int FEAT_PRC_IMP_DISARM = 5196; +const int FEAT_AWESOME_BLOW = 5370; +const int FEAT_IMPROVED_SHIELD_BASH = 3250; +const int FEAT_INVESTIGATOR = 25998; + +// Player's Handbook II Feats +const int FEAT_STEADFAST_DETERMINATION = 3267; +const int FEAT_CROSSBOW_SNIPER = 5311; +const int FEAT_SHIELD_SPECIALIZATION_LIGHT = 3251; +const int FEAT_SHIELD_SPECIALIZATION_HEAVY = 3252; +const int FEAT_SHIELD_WARD = 3253; +const int FEAT_AGILE_SHIELD_FIGHTER = 3254; + +// Weapons of Legacy Feats +const int FEAT_LEAST_LEGACY = 5300; +const int FEAT_LESSER_LEGACY = 5301; +const int FEAT_GREATER_LEGACY = 5302; + +// Complete Arcane Feats +const int FEAT_MASTER_WAND = 5312; +const int FEAT_RECKLESS_WAND_WIELDER = 5313; +const int FEAT_DOUBLE_WAND_WIELDER = 5315; +const int FEAT_WILD_MAGE_RANDOM_DEFLECTOR = 5199; + +// Warforged Juggernaut +const int FEAT_JUGG_RESERVED = 5246; + +// Shadowbane +const int FEAT_SHADOWBANE_SMITE = 5232; + +// Killoren +const int FEAT_KILLOREN_HUNTER = 5206; +const int FEAT_KILLOREN_DESTROYER = 5207; +const int FEAT_KILLOREN_ANCIENT = 5208; +const int FEAT_KILLOREN_ASPECT_H = 5209; +const int FEAT_KILLOREN_ASPECT_D = 5210; +const int FEAT_KILLOREN_ASPECT_A = 5211; + +//Abjurant Champion Feats +const int FEAT_ABJURANT_ARMOR = 24415; +const int FEAT_EXTENDED_ABJURATION = 24416; +const int FEAT_ARCANE_BOOST_AB = 24417; +const int FEAT_ARCANE_BOOST_AC = 24418; +const int FEAT_ARCANE_BOOST_DMG = 24419; +const int FEAT_ARCANE_BOOST_ER = 24420; +const int FEAT_ARCANE_BOOST_SV = 24421; +const int FEAT_MARTIAL_ARCANIST = 24422; + +// Cultist of the Shattered Peak +const int FEAT_CULTIST_SMITE_MAGE = 5368; + +/*////////////////////////////////////////////////// +//////////////// SHADOWCASTING////////////////////// +//////////////////////////////////////////////////*/ + +const int FEAT_PATH_FOCUS_CLOAK_SHADOWS = 23673; +const int FEAT_PATH_FOCUS_DARK_TERRAIN = 23674; +const int FEAT_PATH_FOCUS_EBON_WHISPERS = 23675; +const int FEAT_PATH_FOCUS_EYES_DARKNESS = 23676; +const int FEAT_PATH_FOCUS_SHUTTERS_CLOUDS = 23677; +const int FEAT_PATH_FOCUS_TOUCH_TWILIGHT = 23678; +const int FEAT_PATH_FOCUS_UMBRAL_MIND = 23679; +const int FEAT_PATH_FOCUS_BLACK_MAGIC = 23680; +const int FEAT_PATH_FOCUS_BODY_SOUL = 23681; +const int FEAT_PATH_FOCUS_DARK_REFLECTIONS = 23682; +const int FEAT_PATH_FOCUS_EBON_ROADS = 23683; +const int FEAT_PATH_FOCUS_ELEMENTAL_SHADOWS = 23684; +const int FEAT_PATH_FOCUS_UNBINDING_SHADE = 23685; +const int FEAT_PATH_FOCUS_VEIL_SHADOWS = 23686; +const int FEAT_PATH_FOCUS_BREATH_TWILIGHT = 23687; +const int FEAT_PATH_FOCUS_DARK_METAMORPHOSIS = 23688; +const int FEAT_PATH_FOCUS_EBON_WALLS = 23689; +const int FEAT_PATH_FOCUS_EYES_NIGHT_SKY = 23690; +const int FEAT_PATH_FOCUS_HEART_SOUL = 23691; +const int FEAT_PATH_FOCUS_SHADOW_CALLING = 23692; +const int FEAT_GREATER_PATH_FOCUS_CLOAK_SHADOWS = 23693; +const int FEAT_GREATER_PATH_FOCUS_DARK_TERRAIN = 23694; +const int FEAT_GREATER_PATH_FOCUS_EBON_WHISPERS = 23695; +const int FEAT_GREATER_PATH_FOCUS_EYES_DARKNESS = 23696; +const int FEAT_GREATER_PATH_FOCUS_SHUTTERS_CLOUDS = 23697; +const int FEAT_GREATER_PATH_FOCUS_TOUCH_TWILIGHT = 23698; +const int FEAT_GREATER_PATH_FOCUS_UMBRAL_MIND = 23699; +const int FEAT_GREATER_PATH_FOCUS_BLACK_MAGIC = 23700; +const int FEAT_GREATER_PATH_FOCUS_BODY_SOUL = 23701; +const int FEAT_GREATER_PATH_FOCUS_DARK_REFLECTIONS = 23702; +const int FEAT_GREATER_PATH_FOCUS_EBON_ROADS = 23703; +const int FEAT_GREATER_PATH_FOCUS_ELEMENTAL_SHADOWS = 23704; +const int FEAT_GREATER_PATH_FOCUS_UNBINDING_SHADE = 23705; +const int FEAT_GREATER_PATH_FOCUS_VEIL_SHADOWS = 23706; +const int FEAT_GREATER_PATH_FOCUS_BREATH_TWILIGHT = 23707; +const int FEAT_GREATER_PATH_FOCUS_DARK_METAMORPHOSIS = 23708; +const int FEAT_GREATER_PATH_FOCUS_EBON_WALLS = 23709; +const int FEAT_GREATER_PATH_FOCUS_EYES_NIGHT_SKY = 23710; +const int FEAT_GREATER_PATH_FOCUS_HEART_SOUL = 23711; +const int FEAT_GREATER_PATH_FOCUS_SHADOW_CALLING = 23712; +const int FEAT_NOCTURNAL_CASTER_CLOAK_SHADOWS = 23713; +const int FEAT_NOCTURNAL_CASTER_DARK_TERRAIN = 23714; +const int FEAT_NOCTURNAL_CASTER_EBON_WHISPERS = 23715; +const int FEAT_NOCTURNAL_CASTER_EYES_DARKNESS = 23716; +const int FEAT_NOCTURNAL_CASTER_SHUTTERS_CLOUDS = 23717; +const int FEAT_NOCTURNAL_CASTER_TOUCH_TWILIGHT = 23718; +const int FEAT_NOCTURNAL_CASTER_UMBRAL_MIND = 23719; +const int FEAT_NOCTURNAL_CASTER_BLACK_MAGIC = 23720; +const int FEAT_NOCTURNAL_CASTER_BODY_SOUL = 23721; +const int FEAT_NOCTURNAL_CASTER_DARK_REFLECTIONS = 23722; +const int FEAT_NOCTURNAL_CASTER_EBON_ROADS = 23723; +const int FEAT_NOCTURNAL_CASTER_ELEMENTAL_SHADOWS = 23724; +const int FEAT_NOCTURNAL_CASTER_UNBINDING_SHADE = 23725; +const int FEAT_NOCTURNAL_CASTER_VEIL_SHADOWS = 23726; +const int FEAT_NOCTURNAL_CASTER_BREATH_TWILIGHT = 23727; +const int FEAT_NOCTURNAL_CASTER_DARK_METAMORPHOSIS = 23728; +const int FEAT_NOCTURNAL_CASTER_EBON_WALLS = 23729; +const int FEAT_NOCTURNAL_CASTER_EYES_NIGHT_SKY = 23730; +const int FEAT_NOCTURNAL_CASTER_HEART_SOUL = 23731; +const int FEAT_NOCTURNAL_CASTER_SHADOW_CALLING = 23732; +const int FEAT_FAV_MYST_BENDPERSPECTIVE = 23733; +const int FEAT_FAV_MYST_CARPETSHADOW = 23734; +const int FEAT_FAV_MYST_DUSKANDDAWN = 23735; +const int FEAT_FAV_MYST_LIFEFADES = 23736; +const int FEAT_FAV_MYST_MESMERIZINGSHADE = 23737; +const int FEAT_FAV_MYST_STEELSHADOWS = 23738; +const int FEAT_FAV_MYST_VOICEOFSHADOW = 23739; +const int FEAT_FAV_MYST_BLACKFIRE = 23740; +const int FEAT_FAV_MYST_CONGRESSSHADOWS = 23741; +const int FEAT_FAV_MYST_FLESHFAILS = 23742; +const int FEAT_FAV_MYST_PIERCINGSIGHT = 23743; +const int FEAT_FAV_MYST_SHADOWSKIN = 23744; +const int FEAT_FAV_MYST_SIGHTECLIPSED = 23745; +const int FEAT_FAV_MYST_THOUGHTSSHADOW = 23746; +const int FEAT_FAV_MYST_AFRAIDOFTHEDARK = 23747; +const int FEAT_FAV_MYST_CLINGINGDARKNESS = 23748; +const int FEAT_FAV_MYST_DANCINGSHADOWS = 23749; +const int FEAT_FAV_MYST_FLICKER = 23750; +const int FEAT_FAV_MYST_KILLINGSHADOWS = 23751; +const int FEAT_FAV_MYST_SHARPSHADOWS = 23752; +const int FEAT_FAV_MYST_UMBRALTOUCH = 23753; +const int FEAT_FAV_MYST_AURAOFSHADE = 23754; +const int FEAT_FAV_MYST_BOLSTER = 23755; +const int FEAT_FAV_MYST_SHADOWEVOCATION = 23756; +const int FEAT_FAV_MYST_SHADOWVISION = 23757; +const int FEAT_FAV_MYST_SHADOWSFADE = 23758; +const int FEAT_FAV_MYST_STEPINTOSHADOW = 23759; +const int FEAT_FAV_MYST_WARPSPELL = 23760; +const int FEAT_FAV_MYST_CURTAINSHADOWS = 23761; +const int FEAT_FAV_MYST_DARKAIR = 23762; +const int FEAT_FAV_MYST_ECHOSPELL = 23763; +const int FEAT_FAV_MYST_FEIGNLIFE = 23764; +const int FEAT_FAV_MYST_LANGUOR = 23765; +const int FEAT_FAV_MYST_PASSINTOSHADOW = 23766; +const int FEAT_FAV_MYST_UNRAVELDWEOMER = 23767; +const int FEAT_FAV_MYST_FLOODSHADOWS = 23768; +const int FEAT_FAV_MYST_GREATERSHADOWEVOCATION = 23769; +const int FEAT_FAV_MYST_SHADOWINVESTITURE = 23770; +const int FEAT_FAV_MYST_SHADOWSTORM = 23771; +const int FEAT_FAV_MYST_SHADOWSFADE_GREATER = 23772; +const int FEAT_FAV_MYST_UNVEIL = 23773; +const int FEAT_FAV_MYST_VOYAGESHADOW = 23774; +const int FEAT_FAV_MYST_DARKSOUL = 23775; +const int FEAT_FAV_MYST_EPHEMERALIMAGE = 23776; +const int FEAT_FAV_MYST_LIFEFADESGREATER = 23777; +const int FEAT_FAV_MYST_PRISONNIGHT = 23778; +const int FEAT_FAV_MYST_UMBRALSERVANT = 23779; +const int FEAT_FAV_MYST_TRUTHREVEALED = 23780; +const int FEAT_FAV_MYST_FARSIGHT = 23781; +const int FEAT_FAV_MYST_GRFLESHFAILS = 23782; +const int FEAT_FAV_MYST_SHADOWPLAGUE = 23783; +const int FEAT_FAV_MYST_SOULPUPPET = 23784; +const int FEAT_FAV_MYST_TOMBNIGHT = 23785; +const int FEAT_FAV_MYST_UMBRALBODY = 23786; +const int FEAT_FAV_MYST_ARMYSHADOW = 23787; +const int FEAT_FAV_MYST_CONSUMEESSENCE = 23788; +const int FEAT_FAV_MYST_EPHEMERALSTORM = 23789; +const int FEAT_FAV_MYST_REFLECTIONS = 23790; +const int FEAT_FAV_MYST_SHADOWSURGE = 23791; +const int FEAT_FAV_MYST_SHADOWTIME = 23792; +const int FEAT_SHADOW_CAST = 23793; +const int FEAT_EMPOWER_MYSTERY = 23794; +const int FEAT_EXTEND_MYSTERY = 23795; +const int FEAT_MAXIMIZE_MYSTERY = 23796; +const int FEAT_QUICKEN_MYSTERY = 23797; +const int FEAT_STILL_MYSTERY = 23798; +const int FEAT_SHADOW_FAMILIAR = 23800; +// Web Enhancement +const int FEAT_PATH_FOCUS_NIGHTS_LONG_FINGERS = 23851; +const int FEAT_PATH_FOCUS_DARKENED_ALLEYS = 23852; +const int FEAT_PATH_FOCUS_SHADOWSCAPE = 23853; +const int FEAT_GREATER_PATH_FOCUS_NIGHTS_LONG_FINGERS = 23854; +const int FEAT_GREATER_PATH_FOCUS_DARKENED_ALLEYS = 23855; +const int FEAT_GREATER_PATH_FOCUS_SHADOWSCAPE = 23856; +const int FEAT_NOCTURNAL_CASTER_NIGHTS_LONG_FINGERS = 23857; +const int FEAT_NOCTURNAL_CASTER_DARKENED_ALLEYS = 23858; +const int FEAT_NOCTURNAL_CASTER_SHADOWSCAPE = 23859; +const int FEAT_FAV_MYST_QUICKERTHANTHEEYE = 23860; +const int FEAT_FAV_MYST_TRAILHAZE = 23861; +const int FEAT_FAV_MYST_UMBRALFIST = 23862; +const int FEAT_FAV_MYST_FEARFULGLOOM = 23863; +const int FEAT_FAV_MYST_SICKENINGSHADOW = 23864; +const int FEAT_FAV_MYST_DEADLYSHADE = 23865; +const int FEAT_FAV_MYST_GRASPINGSHADOWS = 23866; +const int FEAT_FAV_MYST_MENAGERIEDARKNESS = 23867; +const int FEAT_FAV_MYST_BLACKLABYRINTH = 23868; + +// Child of Night +const int FEAT_CLOAK_SHADOWS = 23801; +const int FEAT_DANCING_SHADOWS = 23802; + +// Noctumancer +const int FEAT_INNATE_COUNTERSPELL = 23814; + +//Shadowblade +const int FEAT_UNERRING_STRIKE = 3650; +const int FEAT_UNEXPECTED_STRIKE = 3653; +const int FEAT_EPHEMERAL_WEAPON = 3654; +const int FEAT_SHADOWY_STRIKE = 3655; +const int FEAT_FAR_SHADOW = 3656; +const int FEAT_SHADOW_AND_STEALTH = 3651; +const int FEAT_ULTRAVISION = 3658; + +//Shadowsmith +const int FEAT_TOUCH_SHADOW = 23831; +const int FEAT_SHROUD_SHADOW = 23832; +const int FEAT_SHADOW_CRAFT = 23833; +const int FEAT_ARMOR_SHADOW = 23834; +const int FEAT_ARMOR_SHADOW_Q = 23835; + +/*////////////////////////////////////////////////// +//////////////// END SHADOWCASTING////////////////// +//////////////////////////////////////////////////*/ + +/*////////////////////////////////////////////////// +//////////////// Magic of Incarnum ///////////////// +//////////////////////////////////////////////////*/ + +// Class Feat Constants +const int FEAT_INCARNUM_RADIANCE = 8861; +const int FEAT_RAPID_MELDSHAPING = 8862; +const int FEAT_SMITE_OPPOSITION = 8864; +const int FEAT_SHARE_INCARNUM_DEFENSE = 8865; +const int FEAT_REBIND_TOTEM_SOULMELD = 8867; +const int FEAT_SMITE_CHAOS = 8858; +const int FEAT_PRC_ATTACK = 2353; +const int FEAT_INCANDESCENT_OVERLOAD = 8925; +const int FEAT_NECROCARNATE_HARVEST = 8930; +const int FEAT_NECROCARNATE_SOULSHIELD = 8931; +const int FEAT_INCARNUM_BLADE_REBIND = 8952; +const int FEAT_WITCHBORN_INTEGUMENT = 8964; + +// Race Feat Constants +const int FEAT_DUSKLING_SPEED = -1; + +// Incarnum Feat Constants +const int FEAT_INVEST_ESSENTIA_CONV = 8800; +const int FEAT_AZURE_ENMITY = 8869; +const int FEAT_CERULEAN_FORTITUDE = 8870; +const int FEAT_AZURE_TALENT = 8871; +const int FEAT_AZURE_TOUCH = 8872; +const int FEAT_AZURE_TOUGHNESS = 8873; +const int FEAT_AZURE_TURNING = 8874; +const int FEAT_AZURE_WILD_SHAPE = 8875; +const int FEAT_CERULEAN_REFLEXES = 8876; +const int FEAT_CERULEAN_WILL = 8877; +const int FEAT_COBALT_CHARGE = 8878; +const int FEAT_COBALT_EXPERTISE = 8879; +const int FEAT_COBALT_POWER = 8880; +const int FEAT_COBALT_RAGE = 8881; +const int FEAT_HEALING_SOUL = 8882; +const int FEAT_INDIGO_STRIKE = 8883; +const int FEAT_MIDNIGHT_AUGMENTATION = 8884; +const int FEAT_MIDNIGHT_DODGE = 8885; +const int FEAT_MIDNIGHT_METAMAGIC = 8886; +const int FEAT_PSYCARNUM_BLADE = 8887; +const int FEAT_SAPPHIRE_SMITE = 8888; +const int FEAT_SOULTOUCHED_SPELLCASTING = 8889; +const int FEAT_BONUS_ESSENTIA = 8890; +const int FEAT_DIVINE_SOULTOUCH = 8891; +const int FEAT_HEART_INCARNUM = 8892; +const int FEAT_IMPROVED_ESSENTIA_CAPACITY = 8893; +const int FEAT_INCARNUM_FORTIFIED_BODY = 8894; +const int FEAT_INCARNUM_RESISTANCE = 8895; +const int FEAT_PSYCARNUM_INFUSION = 8896; +const int FEAT_INCARNUM_SPELLSHAPING = 8897; +const int FEAT_NECROCARNUM_ACOLYTE = 8898; +const int FEAT_OPEN_LEAST_CHAKRA_CROWN = 8899; +const int FEAT_OPEN_LEAST_CHAKRA_FEET = 8900; +const int FEAT_OPEN_LEAST_CHAKRA_HANDS = 8901; +const int FEAT_OPEN_LESSER_CHAKRA_ARMS = 8902; +const int FEAT_OPEN_LESSER_CHAKRA_BROW = 8903; +const int FEAT_OPEN_LESSER_CHAKRA_SHOULDERS = 8904; +const int FEAT_OPEN_GREATER_CHAKRA_THROAT = 8905; +const int FEAT_OPEN_GREATER_CHAKRA_WAIST = 8906; +const int FEAT_SPLIT_CHAKRA_CROWN = 8907; +const int FEAT_SPLIT_CHAKRA_FEET = 8908; +const int FEAT_SPLIT_CHAKRA_HANDS = 8909; +const int FEAT_SPLIT_CHAKRA_ARMS = 8910; +const int FEAT_SPLIT_CHAKRA_BROW = 8911; +const int FEAT_SPLIT_CHAKRA_SHOULDERS = 8912; +const int FEAT_SPLIT_CHAKRA_THROAT = 8913; +const int FEAT_SPLIT_CHAKRA_WAIST = 8914; +const int FEAT_SPLIT_CHAKRA_HEART = 8932; +const int FEAT_SPLIT_CHAKRA_SOUL = 8933; +const int FEAT_UNDEAD_MELDSHAPER = 8934; +const int FEAT_DOUBLE_CHAKRA_CROWN = 8935; +const int FEAT_DOUBLE_CHAKRA_FEET = 8936; +const int FEAT_DOUBLE_CHAKRA_HANDS = 8937; +const int FEAT_DOUBLE_CHAKRA_ARMS = 8938; +const int FEAT_DOUBLE_CHAKRA_BROW = 8939; +const int FEAT_DOUBLE_CHAKRA_SHOULDERS = 8940; +const int FEAT_DOUBLE_CHAKRA_THROAT = 8941; +const int FEAT_DOUBLE_CHAKRA_WAIST = 8942; +const int FEAT_DOUBLE_CHAKRA_HEART = 8943; +const int FEAT_DOUBLE_CHAKRA_SOUL = 8944; +const int FEAT_DOUBLE_CHAKRA_TOTEM = 8945; +const int FEAT_EXPANDED_SOULMELD_CAPACITY_1 = 8946; +const int FEAT_EXPANDED_SOULMELD_CAPACITY_2 = 8947; +const int FEAT_EXPANDED_SOULMELD_CAPACITY_3 = 8948; +const int FEAT_EXPANDED_SOULMELD_CAPACITY_4 = 8949; +const int FEAT_EXPANDED_SOULMELD_CAPACITY_5 = 8950; +const int FEAT_BONUS_SOULMELD_1 = 8965; +const int FEAT_BONUS_SOULMELD_2 = 8966; +const int FEAT_BONUS_SOULMELD_3 = 8967; +const int FEAT_BONUS_SOULMELD_4 = 8968; +const int FEAT_BONUS_SOULMELD_5 = 8969; +const int FEAT_BONUS_SOULMELD_6 = 8970; +const int FEAT_BONUS_SOULMELD_7 = 8971; +const int FEAT_BONUS_SOULMELD_8 = 8972; +const int FEAT_BONUS_SOULMELD_9 = 8973; +const int FEAT_BONUS_SOULMELD_10 = 8974; +const int FEAT_EPIC_ESSENTIA_1 = 8975; +const int FEAT_EPIC_ESSENTIA_2 = 8976; +const int FEAT_EPIC_ESSENTIA_3 = 8977; +const int FEAT_EPIC_ESSENTIA_4 = 8978; +const int FEAT_EPIC_ESSENTIA_5 = 8979; +const int FEAT_EPIC_ESSENTIA_6 = 8980; +const int FEAT_EXTRA_CHAKRA_BIND_1 = 8981; +const int FEAT_EXTRA_CHAKRA_BIND_2 = 8982; +const int FEAT_EXTRA_CHAKRA_BIND_3 = 8983; +const int FEAT_EXTRA_CHAKRA_BIND_4 = 8984; +const int FEAT_EXTRA_CHAKRA_BIND_5 = 8985; +const int FEAT_EXTRA_CHAKRA_BIND_6 = 8986; +const int FEAT_EXTRA_CHAKRA_BIND_7 = 8987; +const int FEAT_EXTRA_CHAKRA_BIND_8 = 8988; +const int FEAT_EXTRA_CHAKRA_BIND_9 = 8989; +const int FEAT_EXTRA_CHAKRA_BIND_10 = 8990; +const int FEAT_OPEN_HEART_CHAKRA = 8991; +const int FEAT_OPEN_SOUL_CHAKRA = 8992; +const int FEAT_RAPID_MELDSHAPING_1 = 8993; +const int FEAT_RAPID_MELDSHAPING_2 = 8994; +const int FEAT_RAPID_MELDSHAPING_3 = 8995; +const int FEAT_RAPID_MELDSHAPING_4 = 8996; +const int FEAT_RAPID_MELDSHAPING_5 = 8997; +const int FEAT_RAPID_MELDSHAPING_6 = 8998; +const int FEAT_RAPID_MELDSHAPING_7 = 8999; +const int FEAT_RAPID_MELDSHAPING_8 = 9000; +const int FEAT_RAPID_MELDSHAPING_9 = 9001; +const int FEAT_RAPID_MELDSHAPING_10 = 9002; +const int FEAT_REBIND_SOULMELD_CROWN = 9003; +const int FEAT_REBIND_SOULMELD_FEET = 9004; +const int FEAT_REBIND_SOULMELD_HANDS = 9005; +const int FEAT_REBIND_SOULMELD_ARMS = 9006; +const int FEAT_REBIND_SOULMELD_BROW = 9007; +const int FEAT_REBIND_SOULMELD_SHOULDERS = 9008; +const int FEAT_REBIND_SOULMELD_THROAT = 9009; +const int FEAT_REBIND_SOULMELD_WAIST = 9010; +const int FEAT_REBIND_SOULMELD_HEART = 9011; +const int FEAT_REBIND_SOULMELD_SOUL = 9012; +const int FEAT_REBIND_SOULMELD_TOTEM = 9013; + +/*////////////////////////////////////////////////// +////////////// End Magic of Incarnum /////////////// +//////////////////////////////////////////////////*/ + +/*////////////////////////////////////////////////// +///////////////////// Binding ///////////////////// +//////////////////////////////////////////////////*/ + +// Binding Feat Constants +const int FEAT_BIND_VESTIGE = 9131; +const int FEAT_BIND_VESTIGE_IMPROVED = 9132; +const int FEAT_PRACTICED_BINDER = 9133; +const int FEAT_SKILLED_PACT_MAKING = 9134; +const int FEAT_IMPROVED_BINDING = 9135; +const int FEAT_EXPEL_VESTIGE = 9136; +const int FEAT_RAPID_PACT_MAKING = 9137; +const int FEAT_FAVORED_VESTIGE_AMON = 9138; +const int FEAT_FAVORED_VESTIGE_AYM = 9139; +const int FEAT_FAVORED_VESTIGE_LERAJE = 9140; +const int FEAT_FAVORED_VESTIGE_NABERIUS = 9141; +const int FEAT_FAVORED_VESTIGE_RONOVE = 9142; +const int FEAT_FAVORED_VESTIGE_DAHLVERNAR = 9143; +const int FEAT_FAVORED_VESTIGE_HAAGENTI = 9144; +const int FEAT_FAVORED_VESTIGE_MALPHAS = 9145; +const int FEAT_FAVORED_VESTIGE_SAVNOK = 9146; +const int FEAT_FAVORED_VESTIGE_ANDROMALIUS = 9147; +const int FEAT_FAVORED_VESTIGE_FOCALOR = 9148; +const int FEAT_FAVORED_VESTIGE_KARSUS = 9149; +const int FEAT_FAVORED_VESTIGE_PAIMON = 9150; +const int FEAT_FAVORED_VESTIGE_AGARES = 9151; +const int FEAT_FAVORED_VESTIGE_ANDRAS = 9152; +const int FEAT_FAVORED_VESTIGE_BUER = 9153; +const int FEAT_FAVORED_VESTIGE_EURYNOME = 9154; +const int FEAT_FAVORED_VESTIGE_TENEBROUS = 9155; +const int FEAT_FAVORED_VESTIGE_ARETE = 9156; +const int FEAT_FAVORED_VESTIGE_ASTAROTH = 9157; +const int FEAT_FAVORED_VESTIGE_ACERERAK = 9158; +const int FEAT_FAVORED_VESTIGE_BALAM = 9159; +const int FEAT_FAVORED_VESTIGE_DANTALION = 9160; +const int FEAT_FAVORED_VESTIGE_GERYON = 9161; +const int FEAT_FAVORED_VESTIGE_OTIAX = 9162; +const int FEAT_FAVORED_VESTIGE_CHUPOCLOPS = 9163; +const int FEAT_FAVORED_VESTIGE_HAURES = 9164; +const int FEAT_FAVORED_VESTIGE_IPOS = 9165; +const int FEAT_FAVORED_VESTIGE_SHAX = 9166; +const int FEAT_FAVORED_VESTIGE_ZAGAN = 9167; +const int FEAT_FAVORED_VESTIGE_VANUS = 9168; +const int FEAT_FAVORED_VESTIGE_THETRIAD = 9169; +const int FEAT_FAVORED_VESTIGE_DESHARIS = 9170; +const int FEAT_FAVORED_VESTIGE_ZCERYLL = 9171; +const int FEAT_FAVORED_VESTIGE_ELIGOR = 9172; +const int FEAT_FAVORED_VESTIGE_MARCHOSIAS = 9173; +const int FEAT_FAVORED_VESTIGE_ASHARDALON = 9174; +const int FEAT_FAVORED_VESTIGE_HALPHAX = 9175; +const int FEAT_FAVORED_VESTIGE_ORTHOS = 9176; +const int FEAT_FAVORED_VESTIGE_ABYSM = 9177; +const int FEAT_FAVORED_VESTIGE_FOCUS_AMON = 9178; +const int FEAT_FAVORED_VESTIGE_FOCUS_AYM = 9179; +const int FEAT_FAVORED_VESTIGE_FOCUS_LERAJE = 9180; +const int FEAT_FAVORED_VESTIGE_FOCUS_NABERIUS = 9181; +const int FEAT_FAVORED_VESTIGE_FOCUS_RONOVE = 9182; +const int FEAT_FAVORED_VESTIGE_FOCUS_DAHLVERNAR = 9183; +const int FEAT_FAVORED_VESTIGE_FOCUS_HAAGENTI = 9184; +const int FEAT_FAVORED_VESTIGE_FOCUS_MALPHAS = 9185; +const int FEAT_FAVORED_VESTIGE_FOCUS_SAVNOK = 9186; +const int FEAT_FAVORED_VESTIGE_FOCUS_ANDROMALIUS = 9187; +const int FEAT_FAVORED_VESTIGE_FOCUS_FOCALOR = 9188; +const int FEAT_FAVORED_VESTIGE_FOCUS_KARSUS = 9189; +const int FEAT_FAVORED_VESTIGE_FOCUS_PAIMON = 9190; +const int FEAT_FAVORED_VESTIGE_FOCUS_AGARES = 9191; +const int FEAT_FAVORED_VESTIGE_FOCUS_ANDRAS = 9192; +const int FEAT_FAVORED_VESTIGE_FOCUS_BUER = 9193; +const int FEAT_FAVORED_VESTIGE_FOCUS_EURYNOME = 9194; +const int FEAT_FAVORED_VESTIGE_FOCUS_TENEBROUS = 9195; +const int FEAT_FAVORED_VESTIGE_FOCUS_ARETE = 9196; +const int FEAT_FAVORED_VESTIGE_FOCUS_ASTAROTH = 9197; +const int FEAT_FAVORED_VESTIGE_FOCUS_ACERERAK = 9198; +const int FEAT_FAVORED_VESTIGE_FOCUS_BALAM = 9199; +const int FEAT_FAVORED_VESTIGE_FOCUS_DANTALION = 9200; +const int FEAT_FAVORED_VESTIGE_FOCUS_GERYON = 9201; +const int FEAT_FAVORED_VESTIGE_FOCUS_OTIAX = 9202; +const int FEAT_FAVORED_VESTIGE_FOCUS_CHUPOCLOPS = 9203; +const int FEAT_FAVORED_VESTIGE_FOCUS_HAURES = 9204; +const int FEAT_FAVORED_VESTIGE_FOCUS_IPOS = 9205; +const int FEAT_FAVORED_VESTIGE_FOCUS_SHAX = 9206; +const int FEAT_FAVORED_VESTIGE_FOCUS_ZAGAN = 9207; +const int FEAT_FAVORED_VESTIGE_FOCUS_VANUS = 9208; +const int FEAT_FAVORED_VESTIGE_FOCUS_THETRIAD = 9209; +const int FEAT_FAVORED_VESTIGE_FOCUS_DESHARIS = 9210; +const int FEAT_FAVORED_VESTIGE_FOCUS_ZCERYLL = 9211; +const int FEAT_FAVORED_VESTIGE_FOCUS_ELIGOR = 9212; +const int FEAT_FAVORED_VESTIGE_FOCUS_MARCHOSIAS = 9213; +const int FEAT_FAVORED_VESTIGE_FOCUS_ASHARDALON = 9214; +const int FEAT_FAVORED_VESTIGE_FOCUS_HALPHAX = 9215; +const int FEAT_FAVORED_VESTIGE_FOCUS_ORTHOS = 9216; +const int FEAT_FAVORED_VESTIGE_FOCUS_ABYSM = 9217; +const int FEAT_RAPID_RECOVERY_AMON = 9218; +const int FEAT_RAPID_RECOVERY_AYM = 9219; +const int FEAT_RAPID_RECOVERY_LERAJE = 9220; +const int FEAT_RAPID_RECOVERY_NABERIUS = 9221; +const int FEAT_RAPID_RECOVERY_RONOVE = 9222; +const int FEAT_RAPID_RECOVERY_DAHLVERNAR = 9223; +const int FEAT_RAPID_RECOVERY_HAAGENTI = 9224; +const int FEAT_RAPID_RECOVERY_MALPHAS = 9225; +const int FEAT_RAPID_RECOVERY_SAVNOK = 9226; +const int FEAT_RAPID_RECOVERY_ANDROMALIUS = 9227; +const int FEAT_RAPID_RECOVERY_FOCALOR = 9228; +const int FEAT_RAPID_RECOVERY_KARSUS = 9229; +const int FEAT_RAPID_RECOVERY_PAIMON = 9230; +const int FEAT_RAPID_RECOVERY_AGARES = 9231; +const int FEAT_RAPID_RECOVERY_ANDRAS = 9232; +const int FEAT_RAPID_RECOVERY_BUER = 9233; +const int FEAT_RAPID_RECOVERY_EURYNOME = 9234; +const int FEAT_RAPID_RECOVERY_TENEBROUS = 9235; +const int FEAT_RAPID_RECOVERY_ARETE = 9236; +const int FEAT_RAPID_RECOVERY_ASTAROTH = 9237; +const int FEAT_RAPID_RECOVERY_ACERERAK = 9238; +const int FEAT_RAPID_RECOVERY_BALAM = 9239; +const int FEAT_RAPID_RECOVERY_DANTALION = 9240; +const int FEAT_RAPID_RECOVERY_GERYON = 9241; +const int FEAT_RAPID_RECOVERY_OTIAX = 9242; +const int FEAT_RAPID_RECOVERY_CHUPOCLOPS = 9243; +const int FEAT_RAPID_RECOVERY_HAURES = 9244; +const int FEAT_RAPID_RECOVERY_IPOS = 9245; +const int FEAT_RAPID_RECOVERY_SHAX = 9246; +const int FEAT_RAPID_RECOVERY_ZAGAN = 9247; +const int FEAT_RAPID_RECOVERY_VANUS = 9248; +const int FEAT_RAPID_RECOVERY_THETRIAD = 9249; +const int FEAT_RAPID_RECOVERY_DESHARIS = 9250; +const int FEAT_RAPID_RECOVERY_ZCERYLL = 9251; +const int FEAT_RAPID_RECOVERY_ELIGOR = 9252; +const int FEAT_RAPID_RECOVERY_MARCHOSIAS = 9253; +const int FEAT_RAPID_RECOVERY_ASHARDALON = 9254; +const int FEAT_RAPID_RECOVERY_HALPHAX = 9255; +const int FEAT_RAPID_RECOVERY_ORTHOS = 9256; +const int FEAT_RAPID_RECOVERY_ABYSM = 9257; +const int FEAT_IGNORE_SPECIAL_REQUIREMENTS = 9258; +const int FEAT_ANIMA_VESTIGE_METAMAGIC = 9260; +const int FEAT_TENEBROUS_BLAST_VOID = 9265; +const int FEAT_PATRON_VESTIGE_AMON = 9266; +const int FEAT_PATRON_VESTIGE_AYM = 9267; +const int FEAT_PATRON_VESTIGE_LERAJE = 9268; +const int FEAT_PATRON_VESTIGE_NABERIUS = 9269; +const int FEAT_PATRON_VESTIGE_RONOVE = 9270; +const int FEAT_PATRON_VESTIGE_DAHLVERNAR = 9271; +const int FEAT_PATRON_VESTIGE_HAAGENTI = 9272; +const int FEAT_PATRON_VESTIGE_MALPHAS = 9273; +const int FEAT_PATRON_VESTIGE_SAVNOK = 9274; +const int FEAT_PATRON_VESTIGE_ANDROMALIUS = 9275; +const int FEAT_PATRON_VESTIGE_FOCALOR = 9276; +const int FEAT_PATRON_VESTIGE_KARSUS = 9277; +const int FEAT_PATRON_VESTIGE_PAIMON = 9278; +const int FEAT_PATRON_VESTIGE_AGARES = 9279; +const int FEAT_PATRON_VESTIGE_ANDRAS = 9280; +const int FEAT_PATRON_VESTIGE_BUER = 9281; +const int FEAT_PATRON_VESTIGE_EURYNOME = 9282; +const int FEAT_PATRON_VESTIGE_TENEBROUS = 9283; +const int FEAT_PATRON_VESTIGE_ARETE = 9284; +const int FEAT_PATRON_VESTIGE_ASTAROTH = 9285; +const int FEAT_PATRON_VESTIGE_ACERERAK = 9286; +const int FEAT_PATRON_VESTIGE_BALAM = 9287; +const int FEAT_PATRON_VESTIGE_DANTALION = 9288; +const int FEAT_PATRON_VESTIGE_GERYON = 9289; +const int FEAT_PATRON_VESTIGE_OTIAX = 9290; +const int FEAT_PATRON_VESTIGE_CHUPOCLOPS = 9291; +const int FEAT_PATRON_VESTIGE_HAURES = 9292; +const int FEAT_PATRON_VESTIGE_IPOS = 9293; +const int FEAT_PATRON_VESTIGE_SHAX = 9294; +const int FEAT_PATRON_VESTIGE_ZAGAN = 9295; +const int FEAT_PATRON_VESTIGE_VANUS = 9296; +const int FEAT_PATRON_VESTIGE_THETRIAD = 9297; +const int FEAT_PATRON_VESTIGE_DESHARIS = 9298; +const int FEAT_PATRON_VESTIGE_ZCERYLL = 9299; +const int FEAT_PATRON_VESTIGE_ELIGOR = 9300; +const int FEAT_PATRON_VESTIGE_MARCHOSIAS = 9301; +const int FEAT_PATRON_VESTIGE_ASHARDALON = 9302; +const int FEAT_PATRON_VESTIGE_HALPHAX = 9303; +const int FEAT_PATRON_VESTIGE_ORTHOS = 9304; +const int FEAT_PATRON_VESTIGE_ABYSM = 9305; +const int FEAT_SCION_DANTALION_SCHOLARSHIP = 9309; + +/*////////////////////////////////////////////////// +/////////////////// End Binding //////////////////// +//////////////////////////////////////////////////*/ + +//:: Reserve Feats +const int FEAT_HOLY_WARRIOR = 24736; +const int FEAT_MYSTIC_BACKLASH = 24737; +const int FEAT_ACIDIC_SPLATTER = 24738; +const int FEAT_FIERY_BURST = 24739; +const int FEAT_STORM_BOLT = 24740; +const int FEAT_WINTERS_BLAST = 24741; +const int FEAT_CLAP_OF_THUNDER = 24742; +const int FEAT_SICKENING_GRASP = 24743; +const int FEAT_TOUCH_OF_HEALING = 24744; +const int FEAT_DIMENSIONAL_JAUNT = 24745; +const int FEAT_CLUTCH_OF_EARTH = 24746; +const int FEAT_BORNE_ALOFT = 24747; +const int FEAT_PROTECTIVE_WARD = 24748; +const int FEAT_SHADOW_VEIL = 24749; +const int FEAT_SUNLIGHT_EYES = 24750; +const int FEAT_TOUCH_OF_DISTRACTION = 24751; +const int FEAT_UMBRAL_SHROUD = 24752; +const int FEAT_CHARNEL_MIASMA = 24753; +const int FEAT_DROWNING_GLANCE = 24754; +const int FEAT_INVISIBLE_NEEDLE = 24755; +const int FEAT_SUMMON_ELEMENTAL = 24756; +const int FEAT_DIMENSIONAL_REACH = 24757; +const int FEAT_HURRICANE_BREATH = 24758; +const int FEAT_MINOR_SHAPESHIFT = 24759; +const int FEAT_FACECHANGER = 24760; + +//:: Shadow Conjuration +const int FEAT_SHADOW_CONJURATION_CONVERSATION = 24732; +const int PNP_SHADOW_CONJURATION = 24733; +const int PNP_GREATER_SHADOW_CONJURATION = 24734; +const int PNP_SHADES = 24735; + +//:: Epic Level Handbook +const int FEAT_EPIC_SWARM_OF_ARROWS = 25995; + +//:: Warlock invoking marker feats +const int FEAT_ABCHAMP_INVOKING_WARLOCK = 18000; +const int FEAT_AOTS_INVOKING_WARLOCK = 18001; +const int FEAT_ANIMA_INVOKING_WARLOCK = 18002; +const int FEAT_ARCTRICK_INVOKING_WARLOCK = 18003; +const int FEAT_BLDMAGUS_INVOKING_WARLOCK = 18004; +const int FEAT_ASMODEUS_INVOKING_WARLOCK = 18005; +const int FEAT_ELDISCIPLE_INVOKING_WARLOCK = 18006; +const int FEAT_ETHEURGE_INVOKING_WARLOCK = 18007; +const int FEAT_ENLIGHTENEDFIST_INVOKING_WARLOCK = 18008; +const int FEAT_HELLFIRE_INVOKING_WARLOCK = 18009; +const int FEAT_MAESTER_INVOKING_WARLOCK = 18010; +const int FEAT_TIAMAT_INVOKING_WARLOCK = 18011; +const int FEAT_UNSEEN_INVOKING_WARLOCK = 18012; +const int FEAT_VIRTUOSO_INVOKING_WARLOCK = 18013; +const int FEAT_WILDMAGE_INVOKING_WARLOCK = 18014; + +//:: Dragonfire Adept invoking marker feats +const int FEAT_ABCHAMP_INVOKING_DFA = 18015; +const int FEAT_AOTS_INVOKING_DFA = 18016; +const int FEAT_ANIMA_INVOKING_DFA = 18017; +const int FEAT_ARCTRICK_INVOKING_DFA = 18018; +const int FEAT_BLDMAGUS_INVOKING_DFA = 18019; +const int FEAT_ASMODEUS_INVOKING_DFA = 18020; +const int FEAT_ELDISCIPLE_INVOKING_DFA = 18021; +const int FEAT_ENLIGHTENEDFIST_INVOKING_DFA = 18022; +const int FEAT_MAESTER_INVOKING_DFA = 18023; +const int FEAT_TIAMAT_INVOKING_DFA = 18024; +const int FEAT_UNSEEN_INVOKING_DFA = 18025; +const int FEAT_VIRTUOSO_INVOKING_DFA = 18026; +const int FEAT_WILDMAGE_INVOKING_DFA = 18027; + +//:: Dragon Shaman invoking marker feats +const int FEAT_ABCHAMP_INVOKING_DRAGON_SHAMAN = 18028; +const int FEAT_ASMODEUS_INVOKING_DRAGON_SHAMAN = 18029; +const int FEAT_ELDISCIPLE_INVOKING_DRAGON_SHAMAN = 18030; +const int FEAT_ENLIGHTENEDFIST_INVOKING_DRAGON_SHAMAN = 18031; +const int FEAT_TIAMAT_INVOKING_DRAGON_SHAMAN = 18032; +const int FEAT_UNSEEN_INVOKING_DRAGON_SHAMAN = 18033; +const int FEAT_VIRTUOSO_INVOKING_DRAGON_SHAMAN = 18034; +const int FEAT_WILDMAGE_INVOKING_DRAGON_SHAMAN = 18035; + +//:: Shadowcaster marker feats +const int FEAT_AOTS_MYSTERY_SHADOWCASTER = 18070; +const int FEAT_ALIENIST_MYSTERY_SHADOWCASTER = 18071; +const int FEAT_CHILDNIGHT_MYSTERY_SHADOWCASTER = 18072; +const int FEAT_ASMODEUS_MYSTERY_SHADOWCASTER = 18073; +const int FEAT_DSONG_MYSTERY_SHADOWCASTER = 18074; +const int FEAT_ELESAVANT_MYSTERY_SHADOWCASTER = 18075; +const int FEAT_MASTERSHADOW_MYSTERY_SHADOWCASTER = 18076; +const int FEAT_MYSTICTHEURGE_MYSTERY_SHADOWCASTER = 18077; +const int FEAT_NOCTUMANCER_MYSTERY_SHADOWCASTER = 18078; +const int FEAT_OLLAM_MYSTERY_SHADOWCASTER = 18079; +const int FEAT_TIAMAT_MYSTERY_SHADOWCASTER = 18080; +const int FEAT_ORCUS_MYSTERY_SHADOWCASTER = 18081; + +//:: Shadowsmith marker feats +const int FEAT_AOTS_MYSTERY_SHADOWSMITH = 18082; +const int FEAT_ALIENIST_MYSTERY_SHADOWSMITH = 18083; +const int FEAT_CHILDNIGHT_MYSTERY_SHADOWSMITH = 18084; +const int FEAT_ASMODEUS_MYSTERY_SHADOWSMITH = 18085; +const int FEAT_DSONG_MYSTERY_SHADOWSMITH = 18086; +const int FEAT_ELESAVANT_MYSTERY_SHADOWSMITH = 18087; +const int FEAT_MASTERSHADOW_MYSTERY_SHADOWSMITH = 18088; +const int FEAT_MYSTICTHEURGE_MYSTERY_SHADOWSMITH = 18089; +const int FEAT_NOCTUMANCER_MYSTERY_SHADOWSMITH = 18090; +const int FEAT_OLLAM_MYSTERY_SHADOWSMITH = 18091; +const int FEAT_TIAMAT_MYSTERY_SHADOWSMITH = 18092; +const int FEAT_ORCUS_MYSTERY_SHADOWSMITH = 18093; + +//:: None marker feats +const int FEAT_ABCHAMP_NONE = 18036; +const int FEAT_AOTS_NONE = 18037; +const int FEAT_ANIMA_NONE = 18038; +const int FEAT_ARCTRICK_NONE = 18039; +const int FEAT_BLDMAGUS_NONE = 18040; +const int FEAT_ASMODEUS_NONE = 18041; +const int FEAT_ENLIGHTENEDFIST_NONE = 18042; +const int FEAT_MAESTER_NONE = 18043; +const int FEAT_TIAMAT_NONE = 18044; +const int FEAT_UNSEEN_NONE = 18045; +const int FEAT_VIRTUOSO_NONE = 18046; +const int FEAT_WILDMAGE_NONE = 18047; + +const int FEAT_ALIENIST_NONE = 18094; +const int FEAT_DRAGONSONG_NONE = 18095; +const int FEAT_ESAVANT_NONE = 18096; +const int FEAT_MYSTICTHEURGE_NONE = 18097; +const int FEAT_OLLAM_NONE = 18098; +const int FEAT_ORCUS_NONE = 18099; + +const int FEAT_SANCTIFIED_MIND_MANIFEST_NONE = 18173; +const int FEAT_SOULCASTER_MANIFEST_NONE = 18174; + + +//:: Fist of Zuoken marker feats +const int FEAT_CEREBREMANCER_MANIFEST_FOZ = 18130; +const int FEAT_DIAMOND_DRAGON_MANIFEST_FOZ = 18131; +const int FEAT_IRONMIND_MANIFEST_FOZ = 18132; +const int FEAT_PSYCHIC_THEURGE_MANIFEST_FOZ = 18133; +const int FEAT_SANCTIFIED_MIND_MANIFEST_FOZ = 18134; +const int FEAT_SHADOWMIND_MANIFEST_FOZ = 18135; +const int FEAT_SOULCASTER_MANIFEST_FOZ = 18136; + +//:: Psion marker feats +const int FEAT_CEREBREMANCER_MANIFEST_PSION = 18137; +const int FEAT_DIAMOND_DRAGON_MANIFEST_PSION = 18138; +const int FEAT_IRONMIND_MANIFEST_PSION = 18139; +const int FEAT_PSYCHIC_THEURGE_MANIFEST_PSION = 18140; +const int FEAT_SANCTIFIED_MIND_MANIFEST_PSION = 18141; +const int FEAT_SHADOWMIND_MANIFEST_PSION = 18142; +const int FEAT_SOULCASTER_MANIFEST_PSION = 18143; +const int FEAT_THRALLHERD_MANIFEST_PSION = 18144; + +//:: Psychic Rogue marker feats +const int FEAT_CEREBREMANCER_MANIFEST_PSYROUGE = 18145; +const int FEAT_DIAMOND_DRAGON_MANIFEST_PSYROUGE = 18146; +const int FEAT_IRONMIND_MANIFEST_PSYROUGE = 18147; +const int FEAT_PSYCHIC_THEURGE_MANIFEST_PSYROUGE = 18148; +const int FEAT_SANCTIFIED_MIND_MANIFEST_PSYROUGE = 18149; +const int FEAT_SHADOWMIND_MANIFEST_PSYROUGE = 18150; +const int FEAT_SOULCASTER_MANIFEST_PSYROUGE = 18151; + +//:: Psychic Warrior marker feats +const int FEAT_CEREBREMANCER_MANIFEST_PSYWAR = 18152; +const int FEAT_DIAMOND_DRAGON_MANIFEST_PSYWAR = 18153; +const int FEAT_IRONMIND_MANIFEST_PSYWAR = 18154; +const int FEAT_PSYCHIC_THEURGE_MANIFEST_PSYWAR = 18155; +const int FEAT_SANCTIFIED_MIND_MANIFEST_PSYWAR = 18156; +const int FEAT_SHADOWMIND_MANIFEST_PSYWAR = 18157; +const int FEAT_SOULCASTER_MANIFEST_PSYWAR = 18158; + +//:: Warmind marker feats +const int FEAT_CEREBREMANCER_MANIFEST_WARMIND = 18159; +const int FEAT_DIAMOND_DRAGON_MANIFEST_WARMIND = 18160; +const int FEAT_IRONMIND_MANIFEST_WARMIND = 18161; +const int FEAT_PSYCHIC_THEURGE_MANIFEST_WARMIND = 18162; +const int FEAT_SANCTIFIED_MIND_MANIFEST_WARMIND = 18163; +const int FEAT_SHADOWMIND_MANIFEST_WARMIND = 18164; +const int FEAT_SOULCASTER_MANIFEST_WARMIND = 18165; + +//:: Wilder marker feats +const int FEAT_CEREBREMANCER_MANIFEST_WILDER = 18166; +const int FEAT_DIAMOND_DRAGON_MANIFEST_WILDER = 18167; +const int FEAT_IRONMIND_MANIFEST_WILDER = 18168; +const int FEAT_PSYCHIC_THEURGE_MANIFEST_WILDER = 18169; +const int FEAT_SANCTIFIED_MIND_MANIFEST_WILDER = 18170; +const int FEAT_SHADOWMIND_MANIFEST_WILDER = 18171; +const int FEAT_SOULCASTER_MANIFEST_WILDER = 18172; + +//:: Racial caster marker feats +const int FEAT_MONSTROUS_SPELLCASTING_WARSOUL = 18199; +const int FEAT_FEY_SPELLCASTING_GLOURA = 18200; +const int FEAT_ABERRATION_SPELLCASTING_DRIDER = 18201; +const int FEAT_MONSTROUS_SPELLCASTING_ARKAMOI = 18202; +const int FEAT_MONSTROUS_SPELLCASTING_MARRUTACT = 18203; +const int FEAT_MONSTROUS_SPELLCASTING_REDSPAWN_ARCANISS = 18204; +const int FEAT_OUTSIDER_SPELLCASTING_RAKSHASA = 18205; +const int FEAT_SHAPECHANGER_SPELLCASTING_ARANEA = 18206; + +//:: Fey RHD spellcasting marker feats +const int FEAT_ABCHAMP_SPELLCASTING_FEY = 18207; +const int FEAT_AOTS_SPELLCASTING_FEY = 18208; +const int FEAT_ALCHEM_SPELLCASTING_FEY = 18209; +const int FEAT_ALIENIST_SPELLCASTING_FEY = 18210; +const int FEAT_ANIMA_SPELLCASTING_FEY = 18211; +const int FEAT_ARCHMAGE_SPELLCASTING_FEY = 18212; +const int FEAT_ARCTRICK_SPELLCASTING_FEY = 18213; +const int FEAT_ASMODEUS_SPELLCASTING_FEY = 18214; +const int FEAT_BSINGER_SPELLCASTING_FEY = 18215; +const int FEAT_BLDMAGUS_SPELLCASTING_FEY = 18216; +const int FEAT_CMANCER_SPELLCASTING_FEY = 18217; +const int FEAT_DIABOLIST_SPELLCASTING_FEY = 18218; +const int FEAT_DHEART_SPELLCASTING_FEY = 18219; +const int FEAT_DSONG_SPELLCASTING_FEY = 18220; +const int FEAT_EKNIGHT_SPELLCASTING_FEY = 18221; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_FEY = 18222; +const int FEAT_ELESAVANT_SPELLCASTING_FEY = 18223; +const int FEAT_ETHEURGE_SPELLCASTING_FEY = 18224; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_FEY = 18225; +const int FEAT_FROSTMAGE_SPELLCASTING_FEY = 18226; +const int FEAT_GRAZZT_SPELLCASTING_FEY = 18227; +const int FEAT_HARPERM_SPELLCASTING_FEY = 18228; +const int FEAT_HATHRAN_SPELLCASTING_FEY = 18229; +const int FEAT_HAVOC_SPELLCASTING_FEY = 18230; +const int FEAT_JPM_SPELLCASTING_FEY = 18231; +const int FEAT_JUDICATOR_SPELLCASTING_FEY = 18232; +const int FEAT_MAESTER_SPELLCASTING_FEY = 18233; +const int FEAT_MAGEKILLER_SPELLCASTING_FEY = 18234; +const int FEAT_MHARPER_SPELLCASTING_FEY = 18235; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_FEY = 18236; +const int FEAT_NOCTUMANCER_SPELLCASTING_FEY = 18237; +const int FEAT_OOZEMASTER_SPELLCASTING_FEY = 18238; +const int FEAT_PALEMASTER_SPELLCASTING_FEY = 18239; +const int FEAT_RAGEMAGE_SPELLCASTING_FEY = 18240; +const int FEAT_SHADOWADEPT_SPELLCASTING_FEY = 18241; +const int FEAT_SOULCASTER_SPELLCASTING_FEY = 18242; +const int FEAT_SPELLDANCER_SPELLCASTING_FEY = 18243; +const int FEAT_SSWORD_SPELLCASTING_FEY = 18244; +const int FEAT_TIAMAT_SPELLCASTING_FEY = 18245; +const int FEAT_TNECRO_SPELLCASTING_FEY = 18246; +const int FEAT_ULTMAGUS_SPELLCASTING_FEY = 18247; +const int FEAT_UNSEEN_SPELLCASTING_FEY = 18248; +const int FEAT_VIRTUOSO_SPELLCASTING_FEY = 18249; +const int FEAT_WILDMAGE_SPELLCASTING_FEY = 18250; +const int FEAT_WWOC_SPELLCASTING_FEY = 18251; + +//:: Aberration RHD spellcasting marker feats +const int FEAT_ABCHAMP_SPELLCASTING_ABERRATION = 18252; +const int FEAT_AOTS_SPELLCASTING_ABERRATION = 18253; +const int FEAT_ALCHEM_SPELLCASTING_ABERRATION = 18254; +const int FEAT_ALIENIST_SPELLCASTING_ABERRATION = 18255; +const int FEAT_ANIMA_SPELLCASTING_ABERRATION = 18256; +const int FEAT_ARCHMAGE_SPELLCASTING_ABERRATION = 18257; +const int FEAT_ARCTRICK_SPELLCASTING_ABERRATION = 18258; +const int FEAT_ASMODEUS_SPELLCASTING_ABERRATION = 18259; +const int FEAT_BSINGER_SPELLCASTING_ABERRATION = 18260; +const int FEAT_BLDMAGUS_SPELLCASTING_ABERRATION = 18261; +const int FEAT_CMANCER_SPELLCASTING_ABERRATION = 18262; +const int FEAT_DIABOLIST_SPELLCASTING_ABERRATION = 18263; +const int FEAT_DHEART_SPELLCASTING_ABERRATION = 18264; +const int FEAT_DSONG_SPELLCASTING_ABERRATION = 18265; +const int FEAT_EKNIGHT_SPELLCASTING_ABERRATION = 18266; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_ABERRATION = 18267; +const int FEAT_ELESAVANT_SPELLCASTING_ABERRATION = 18268; +const int FEAT_ETHEURGE_SPELLCASTING_ABERRATION = 18269; +const int FEAT_FMM_SPELLCASTING_ABERRATION = 18270; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_ABERRATION = 18271; +const int FEAT_FROSTMAGE_SPELLCASTING_ABERRATION = 18272; +const int FEAT_GRAZZT_SPELLCASTING_ABERRATION = 18273; +const int FEAT_HARPERM_SPELLCASTING_ABERRATION = 18274; +const int FEAT_HATHRAN_SPELLCASTING_ABERRATION = 18275; +const int FEAT_HAVOC_SPELLCASTING_ABERRATION = 18276; +const int FEAT_JPM_SPELLCASTING_ABERRATION = 18277; +const int FEAT_JUDICATOR_SPELLCASTING_ABERRATION = 18278; +const int FEAT_MAESTER_SPELLCASTING_ABERRATION = 18279; +const int FEAT_MAGEKILLER_SPELLCASTING_ABERRATION = 18280; +const int FEAT_MHARPER_SPELLCASTING_ABERRATION = 18281; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_ABERRATION = 18282; +const int FEAT_NOCTUMANCER_SPELLCASTING_ABERRATION = 18283; +const int FEAT_OOZEMASTER_SPELLCASTING_ABERRATION = 18284; +const int FEAT_PALEMASTER_SPELLCASTING_ABERRATION = 18285; +const int FEAT_RAGEMAGE_SPELLCASTING_ABERRATION = 18286; +const int FEAT_SHADOWADEPT_SPELLCASTING_ABERRATION = 18287; +const int FEAT_SOULCASTER_SPELLCASTING_ABERRATION = 18288; +const int FEAT_SPELLDANCER_SPELLCASTING_ABERRATION = 18289; +const int FEAT_SSWORD_SPELLCASTING_ABERRATION = 18290; +const int FEAT_TIAMAT_SPELLCASTING_ABERRATION = 18291; +const int FEAT_TNECRO_SPELLCASTING_ABERRATION = 18292; +const int FEAT_ULTMAGUS_SPELLCASTING_ABERRATION = 18293; +const int FEAT_UNSEEN_SPELLCASTING_ABERRATION = 18294; +const int FEAT_VIRTUOSO_SPELLCASTING_ABERRATION = 18295; +const int FEAT_WAYFARER_SPELLCASTING_ABERRATION = 18296; +const int FEAT_WILDMAGE_SPELLCASTING_ABERRATION = 18297; +const int FEAT_WWOC_SPELLCASTING_ABERRATION = 18298; + +//:: Monstrous RHD spellcasting marker feats +const int FEAT_ABCHAMP_SPELLCASTING_MONSTROUS = 18299; +const int FEAT_AOTS_SPELLCASTING_MONSTROUS = 18300; +const int FEAT_ALCHEM_SPELLCASTING_MONSTROUS = 18301; +const int FEAT_ALIENIST_SPELLCASTING_MONSTROUS = 18302; +const int FEAT_ANIMA_SPELLCASTING_MONSTROUS = 18303; +const int FEAT_ARCHMAGE_SPELLCASTING_MONSTROUS = 18304; +const int FEAT_ARCTRICK_SPELLCASTING_MONSTROUS = 18305; +const int FEAT_ASMODEUS_SPELLCASTING_MONSTROUS = 18306; +const int FEAT_BSINGER_SPELLCASTING_MONSTROUS = 18307; +const int FEAT_BLDMAGUS_SPELLCASTING_MONSTROUS = 18308; +const int FEAT_CMANCER_SPELLCASTING_MONSTROUS = 18309; +const int FEAT_DHEART_SPELLCASTING_MONSTROUS = 18310; +const int FEAT_DIABOLIST_SPELLCASTING_MONSTROUS = 18311; +const int FEAT_DSONG_SPELLCASTING_MONSTROUS = 18312; +const int FEAT_EKNIGHT_SPELLCASTING_MONSTROUS = 18313; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_MONSTROUS = 18314; +const int FEAT_ELESAVANT_SPELLCASTING_MONSTROUS = 18315; +const int FEAT_ETHEURGE_SPELLCASTING_MONSTROUS = 18316; +const int FEAT_FMM_SPELLCASTING_MONSTROUS = 18317; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_MONSTROUS = 18318; +const int FEAT_FROSTMAGE_SPELLCASTING_MONSTROUS = 18319; +const int FEAT_GRAZZT_SPELLCASTING_MONSTROUS = 18320; +const int FEAT_HARPERM_SPELLCASTING_MONSTROUS = 18321; +const int FEAT_HATHRAN_SPELLCASTING_MONSTROUS = 18322; +const int FEAT_HAVOC_SPELLCASTING_MONSTROUS = 18323; +const int FEAT_JPM_SPELLCASTING_MONSTROUS = 18324; +const int FEAT_JUDICATOR_SPELLCASTING_MONSTROUS = 18325; +const int FEAT_MAESTER_SPELLCASTING_MONSTROUS = 18326; +const int FEAT_MAGEKILLER_SPELLCASTING_MONSTROUS = 18327; +const int FEAT_MHARPER_SPELLCASTING_MONSTROUS = 18328; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_MONSTROUS = 18329; +const int FEAT_NOCTUMANCER_SPELLCASTING_MONSTROUS = 18330; +const int FEAT_OOZEMASTER_SPELLCASTING_MONSTROUS = 18331; +const int FEAT_PALEMASTER_SPELLCASTING_MONSTROUS = 18332; +const int FEAT_RAGEMAGE_SPELLCASTING_MONSTROUS = 18333; +const int FEAT_SHADOWADEPT_SPELLCASTING_MONSTROUS = 18334; +const int FEAT_SOULCASTER_SPELLCASTING_MONSTROUS = 18335; +const int FEAT_SPELLDANCER_SPELLCASTING_MONSTROUS = 18336; +const int FEAT_SSWORD_SPELLCASTING_MONSTROUS = 18337; +const int FEAT_TIAMAT_SPELLCASTING_MONSTROUS = 18338; +const int FEAT_TNECRO_SPELLCASTING_MONSTROUS = 18339; +const int FEAT_ULTMAGUS_SPELLCASTING_MONSTROUS = 18340; +const int FEAT_UNSEEN_SPELLCASTING_MONSTROUS = 18341; +const int FEAT_VIRTUOSO_SPELLCASTING_MONSTROUS = 18342; +const int FEAT_WAYFARER_SPELLCASTING_MONSTROUS = 18343; +const int FEAT_WILDMAGE_SPELLCASTING_MONSTROUS = 18344; +const int FEAT_WWOC_SPELLCASTING_MONSTROUS = 18345; + +//:: Outsider RHD spellcasting marker feats +const int FEAT_ABCHAMP_SPELLCASTING_OUTSIDER = 18346; +const int FEAT_AOTS_SPELLCASTING_OUTSIDER = 18347; +const int FEAT_ALCHEM_SPELLCASTING_OUTSIDER = 18348; +const int FEAT_ALIENIST_SPELLCASTING_OUTSIDER = 18349; +const int FEAT_ANIMA_SPELLCASTING_OUTSIDER = 18350; +const int FEAT_ARCHMAGE_SPELLCASTING_OUTSIDER = 18351; +const int FEAT_ARCTRICK_SPELLCASTING_OUTSIDER = 18352; +const int FEAT_ASMODEUS_SPELLCASTING_OUTSIDER = 18353; +const int FEAT_BSINGER_SPELLCASTING_OUTSIDER = 18354; +const int FEAT_BLDMAGUS_SPELLCASTING_OUTSIDER = 18355; +const int FEAT_CMANCER_SPELLCASTING_OUTSIDER = 18356; +const int FEAT_DHEART_SPELLCASTING_OUTSIDER = 18357; +const int FEAT_DIABOLIST_SPELLCASTING_OUTSIDER = 18358; +const int FEAT_DSONG_SPELLCASTING_OUTSIDER = 18359; +const int FEAT_EKNIGHT_SPELLCASTING_OUTSIDER = 18360; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_OUTSIDER = 18361; +const int FEAT_ELESAVANT_SPELLCASTING_OUTSIDER = 18362; +const int FEAT_ETHEURGE_SPELLCASTING_OUTSIDER = 18363; +const int FEAT_FMM_SPELLCASTING_OUTSIDER = 18364; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_OUTSIDER = 18365; +const int FEAT_FROSTMAGE_SPELLCASTING_OUTSIDER = 18366; +const int FEAT_GRAZZT_SPELLCASTING_OUTSIDER = 18367; +const int FEAT_HARPERM_SPELLCASTING_OUTSIDER = 18368; +const int FEAT_HATHRAN_SPELLCASTING_OUTSIDER = 18369; +const int FEAT_HAVOC_SPELLCASTING_OUTSIDER = 18370; +const int FEAT_JPM_SPELLCASTING_OUTSIDER = 18371; +const int FEAT_JUDICATOR_SPELLCASTING_OUTSIDER = 18372; +const int FEAT_MAESTER_SPELLCASTING_OUTSIDER = 18373; +const int FEAT_MAGEKILLER_SPELLCASTING_OUTSIDER = 18374; +const int FEAT_MHARPER_SPELLCASTING_OUTSIDER = 18375; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_OUTSIDER = 18376; +const int FEAT_NOCTUMANCER_SPELLCASTING_OUTSIDER = 18377; +const int FEAT_OOZEMASTER_SPELLCASTING_OUTSIDER = 18378; +const int FEAT_PALEMASTER_SPELLCASTING_OUTSIDER = 18379; +const int FEAT_RAGEMAGE_SPELLCASTING_OUTSIDER = 18380; +const int FEAT_SHADOWADEPT_SPELLCASTING_OUTSIDER = 18381; +const int FEAT_SOULCASTER_SPELLCASTING_OUTSIDER = 18382; +const int FEAT_SPELLDANCER_SPELLCASTING_OUTSIDER = 18383; +const int FEAT_SSWORD_SPELLCASTING_OUTSIDER = 18384; +const int FEAT_TIAMAT_SPELLCASTING_OUTSIDER = 18385; +const int FEAT_TNECRO_SPELLCASTING_OUTSIDER = 18386; +const int FEAT_ULTMAGUS_SPELLCASTING_OUTSIDER = 18387; +const int FEAT_UNSEEN_SPELLCASTING_OUTSIDER = 18388; +const int FEAT_VIRTUOSO_SPELLCASTING_OUTSIDER = 18389; +const int FEAT_WAYFARER_SPELLCASTING_OUTSIDER = 18390; +const int FEAT_WILDMAGE_SPELLCASTING_OUTSIDER = 18391; +const int FEAT_WWOC_SPELLCASTING_OUTSIDER = 18392; + +//:: Shapechanger RHD spellcasting marker feats +const int FEAT_ABCHAMP_SPELLCASTING_SHAPECHANGER = 18393; +const int FEAT_AOTS_SPELLCASTING_SHAPECHANGER = 18394; +const int FEAT_ALCHEM_SPELLCASTING_SHAPECHANGER = 18395; +const int FEAT_ALIENIST_SPELLCASTING_SHAPECHANGER = 18396; +const int FEAT_ANIMA_SPELLCASTING_SHAPECHANGER = 18397; +const int FEAT_ARCHMAGE_SPELLCASTING_SHAPECHANGER = 18398; +const int FEAT_ARCTRICK_SPELLCASTING_SHAPECHANGER = 18399; +const int FEAT_ASMODEUS_SPELLCASTING_SHAPECHANGER = 18400; +const int FEAT_BSINGER_SPELLCASTING_SHAPECHANGER = 18401; +const int FEAT_BLDMAGUS_SPELLCASTING_SHAPECHANGER = 18402; +const int FEAT_CMANCER_SPELLCASTING_SHAPECHANGER = 18403; +const int FEAT_DHEART_SPELLCASTING_SHAPECHANGER = 18404; +const int FEAT_DIABOLIST_SPELLCASTING_SHAPECHANGER = 18405; +const int FEAT_DSONG_SPELLCASTING_SHAPECHANGER = 18406; +const int FEAT_EKNIGHT_SPELLCASTING_SHAPECHANGER = 18407; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_SHAPECHANGER = 18408; +const int FEAT_ELESAVANT_SPELLCASTING_SHAPECHANGER = 18409; +const int FEAT_ETHEURGE_SPELLCASTING_SHAPECHANGER = 18410; +const int FEAT_FMM_SPELLCASTING_SHAPECHANGER = 18411; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_SHAPECHANGER = 18412; +const int FEAT_FROSTMAGE_SPELLCASTING_SHAPECHANGER = 18413; +const int FEAT_GRAZZT_SPELLCASTING_SHAPECHANGER = 18414; +const int FEAT_HARPERM_SPELLCASTING_SHAPECHANGER = 18415; +const int FEAT_HATHRAN_SPELLCASTING_SHAPECHANGER = 18416; +const int FEAT_HAVOC_SPELLCASTING_SHAPECHANGER = 18417; +const int FEAT_JPM_SPELLCASTING_SHAPECHANGER = 18418; +const int FEAT_JUDICATOR_SPELLCASTING_SHAPECHANGER = 18419; +const int FEAT_MAESTER_SPELLCASTING_SHAPECHANGER = 18420; +const int FEAT_MAGEKILLER_SPELLCASTING_SHAPECHANGER = 18421; +const int FEAT_MHARPER_SPELLCASTING_SHAPECHANGER = 18422; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_SHAPECHANGER = 18423; +const int FEAT_NOCTUMANCER_SPELLCASTING_SHAPECHANGER = 18424; +const int FEAT_OOZEMASTER_SPELLCASTING_SHAPECHANGER = 18425; +const int FEAT_PALEMASTER_SPELLCASTING_SHAPECHANGER = 18426; +const int FEAT_RAGEMAGE_SPELLCASTING_SHAPECHANGER = 18427; +const int FEAT_SHADOWADEPT_SPELLCASTING_SHAPECHANGER = 18428; +const int FEAT_SOULCASTER_SPELLCASTING_SHAPECHANGER = 18429; +const int FEAT_SPELLDANCER_SPELLCASTING_SHAPECHANGER = 18430; +const int FEAT_SSWORD_SPELLCASTING_SHAPECHANGER = 18431; +const int FEAT_TIAMAT_SPELLCASTING_SHAPECHANGER = 18432; +const int FEAT_TNECRO_SPELLCASTING_SHAPECHANGER = 18433; +const int FEAT_ULTMAGUS_SPELLCASTING_SHAPECHANGER = 18434; +const int FEAT_UNSEEN_SPELLCASTING_SHAPECHANGER = 18435; +const int FEAT_VIRTUOSO_SPELLCASTING_SHAPECHANGER = 18436; +const int FEAT_WAYFARER_SPELLCASTING_SHAPECHANGER = 18437; +const int FEAT_WILDMAGE_SPELLCASTING_SHAPECHANGER = 18438; +const int FEAT_WWOC_SPELLCASTING_SHAPECHANGER = 18439; + +//:: Assassin marker feats +const int FEAT_ABCHAMP_SPELLCASTING_ASSASSIN = 18440; +const int FEAT_AOTS_SPELLCASTING_ASSASSIN = 18441; +const int FEAT_ALCHEM_SPELLCASTING_ASSASSIN = 18442; +const int FEAT_ANIMA_SPELLCASTING_ASSASSIN = 18443; +const int FEAT_ARCTRICK_SPELLCASTING_ASSASSIN = 18444; +const int FEAT_ASMODEUS_SPELLCASTING_ASSASSIN = 18445; +const int FEAT_BSINGER_SPELLCASTING_ASSASSIN = 18446; +const int FEAT_CMANCER_SPELLCASTING_ASSASSIN = 18447; +const int FEAT_DIABOLIST_SPELLCASTING_ASSASSIN = 18448; +const int FEAT_DHEART_SPELLCASTING_ASSASSIN = 18449; +const int FEAT_EKNIGHT_SPELLCASTING_ASSASSIN = 18450; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_ASSASSIN = 18451; +const int FEAT_ELESAVANT_SPELLCASTING_ASSASSIN = 18452; +const int FEAT_ETHEURGE_SPELLCASTING_ASSASSIN = 18453; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_ASSASSIN = 18454; +const int FEAT_FROSTMAGE_SPELLCASTING_ASSASSIN = 18455; +const int FEAT_GRAZZT_SPELLCASTING_ASSASSIN = 18456; +const int FEAT_HAVOC_SPELLCASTING_ASSASSIN = 18457; +const int FEAT_JUDICATOR_SPELLCASTING_ASSASSIN = 18458; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_ASSASSIN = 18459; +const int FEAT_NOCTUMANCER_SPELLCASTING_ASSASSIN = 18460; +const int FEAT_OOZEMASTER_SPELLCASTING_ASSASSIN = 18461; +const int FEAT_PALEMASTER_SPELLCASTING_ASSASSIN = 18462; +const int FEAT_RAGEMAGE_SPELLCASTING_ASSASSIN = 18463; +const int FEAT_SHADOWADEPT_SPELLCASTING_ASSASSIN = 18464; +const int FEAT_SOULCASTER_SPELLCASTING_ASSASSIN = 18465; +const int FEAT_SPELLDANCER_SPELLCASTING_ASSASSIN = 18466; +const int FEAT_SSWORD_SPELLCASTING_ASSASSIN = 18467; +const int FEAT_TIAMAT_SPELLCASTING_ASSASSIN = 18468; +const int FEAT_UNSEEN_SPELLCASTING_ASSASSIN = 18469; +const int FEAT_ULTMAGUS_SPELLCASTING_ASSASSIN = 18470; +const int FEAT_WILDMAGE_SPELLCASTING_ASSASSIN = 18471; + +//:: Bard marker feats +const int FEAT_ABCHAMP_SPELLCASTING_BARD = 18472; +const int FEAT_AOTS_SPELLCASTING_BARD = 18473; +const int FEAT_ALCHEM_SPELLCASTING_BARD = 18474; +const int FEAT_ALIENIST_SPELLCASTING_BARD = 18475; +const int FEAT_ANIMA_SPELLCASTING_BARD = 18476; +const int FEAT_ARCTRICK_SPELLCASTING_BARD = 18477; +const int FEAT_ASMODEUS_SPELLCASTING_BARD = 18478; +const int FEAT_BSINGER_SPELLCASTING_BARD = 18479; +const int FEAT_BLDMAGUS_SPELLCASTING_BARD = 18480; +const int FEAT_CMANCER_SPELLCASTING_BARD = 18481; +const int FEAT_DIABOLIST_SPELLCASTING_BARD = 18482; +const int FEAT_DHEART_SPELLCASTING_BARD = 18483; +const int FEAT_DSONG_SPELLCASTING_BARD = 18484; +const int FEAT_EKNIGHT_SPELLCASTING_BARD = 18485; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_BARD = 18486; +const int FEAT_ELESAVANT_SPELLCASTING_BARD = 18487; +const int FEAT_ETHEURGE_SPELLCASTING_BARD = 18488; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_BARD = 18489; +const int FEAT_FROSTMAGE_SPELLCASTING_BARD = 18490; +const int FEAT_GRAZZT_SPELLCASTING_BARD = 18491; +const int FEAT_HARPERM_SPELLCASTING_BARD = 18492; +const int FEAT_HATHRAN_SPELLCASTING_BARD = 18493; +const int FEAT_HAVOC_SPELLCASTING_BARD = 18494; +const int FEAT_JPM_SPELLCASTING_BARD = 18495; +const int FEAT_JUDICATOR_SPELLCASTING_BARD = 18496; +const int FEAT_MAESTER_SPELLCASTING_BARD = 18497; +const int FEAT_MAGEKILLER_SPELLCASTING_BARD = 18498; +const int FEAT_MHARPER_SPELLCASTING_BARD = 18499; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_BARD = 18500; +const int FEAT_NOCTUMANCER_SPELLCASTING_BARD = 18501; +const int FEAT_OOZEMASTER_SPELLCASTING_BARD = 18502; +const int FEAT_PALEMASTER_SPELLCASTING_BARD = 18503; +const int FEAT_RAGEMAGE_SPELLCASTING_BARD = 18504; +const int FEAT_SHADOWADEPT_SPELLCASTING_BARD = 18505; +const int FEAT_SOULCASTER_SPELLCASTING_BARD = 18506; +const int FEAT_SPELLDANCER_SPELLCASTING_BARD = 18507; +const int FEAT_SSWORD_SPELLCASTING_BARD = 18508; +const int FEAT_TIAMAT_SPELLCASTING_BARD = 18509; +const int FEAT_ULTMAGUS_SPELLCASTING_BARD = 18510; +const int FEAT_UNSEEN_SPELLCASTING_BARD = 18511; +const int FEAT_VIRTUOSO_SPELLCASTING_BARD = 18512; +const int FEAT_WILDMAGE_SPELLCASTING_BARD = 18513; +const int FEAT_WWOC_SPELLCASTING_BARD = 18514; + +//:: Beguiler marker feats +const int FEAT_ABCHAMP_SPELLCASTING_BEGUILER = 18515; +const int FEAT_AOTS_SPELLCASTING_BEGUILER = 18516; +const int FEAT_ALCHEM_SPELLCASTING_BEGUILER = 18517; +const int FEAT_ALIENIST_SPELLCASTING_BEGUILER = 18518; +const int FEAT_ANIMA_SPELLCASTING_BEGUILER = 18519; +const int FEAT_ARCHMAGE_SPELLCASTING_BEGUILER = 18520; +const int FEAT_ARCTRICK_SPELLCASTING_BEGUILER = 18521; +const int FEAT_ASMODEUS_SPELLCASTING_BEGUILER = 18522; +const int FEAT_BSINGER_SPELLCASTING_BEGUILER = 18523; +const int FEAT_BLDMAGUS_SPELLCASTING_BEGUILER = 18524; +const int FEAT_CMANCER_SPELLCASTING_BEGUILER = 18525; +const int FEAT_DIABOLIST_SPELLCASTING_BEGUILER = 18526; +const int FEAT_DHEART_SPELLCASTING_BEGUILER = 18527; +const int FEAT_DSONG_SPELLCASTING_BEGUILER = 18528; +const int FEAT_EKNIGHT_SPELLCASTING_BEGUILER = 18529; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_BEGUILER = 18530; +const int FEAT_ELESAVANT_SPELLCASTING_BEGUILER = 18531; +const int FEAT_ETHEURGE_SPELLCASTING_BEGUILER = 18532; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_BEGUILER = 18533; +const int FEAT_FROSTMAGE_SPELLCASTING_BEGUILER = 18534; +const int FEAT_GRAZZT_SPELLCASTING_BEGUILER = 18535; +const int FEAT_HARPERM_SPELLCASTING_BEGUILER = 18536; +const int FEAT_HATHRAN_SPELLCASTING_BEGUILER = 18537; +const int FEAT_HAVOC_SPELLCASTING_BEGUILER = 18538; +const int FEAT_JPM_SPELLCASTING_BEGUILER = 18539; +const int FEAT_JUDICATOR_SPELLCASTING_BEGUILER = 18540; +const int FEAT_MAESTER_SPELLCASTING_BEGUILER = 18541; +const int FEAT_MAGEKILLER_SPELLCASTING_BEGUILER = 18542; +const int FEAT_MHARPER_SPELLCASTING_BEGUILER = 18543; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_BEGUILER = 18544; +const int FEAT_NOCTUMANCER_SPELLCASTING_BEGUILER = 18545; +const int FEAT_OOZEMASTER_SPELLCASTING_BEGUILER = 18546; +const int FEAT_PALEMASTER_SPELLCASTING_BEGUILER = 18547; +const int FEAT_RAGEMAGE_SPELLCASTING_BEGUILER = 18548; +const int FEAT_SHADOWADEPT_SPELLCASTING_BEGUILER = 18549; +const int FEAT_SOULCASTER_SPELLCASTING_BEGUILER = 18550; +const int FEAT_SPELLDANCER_SPELLCASTING_BEGUILER = 18551; +const int FEAT_SSWORD_SPELLCASTING_BEGUILER = 18552; +const int FEAT_TIAMAT_SPELLCASTING_BEGUILER = 18553; +const int FEAT_ULTMAGUS_SPELLCASTING_BEGUILER = 18554; +const int FEAT_UNSEEN_SPELLCASTING_BEGUILER = 18555; +const int FEAT_VIRTUOSO_SPELLCASTING_BEGUILER = 18556; +const int FEAT_WILDMAGE_SPELLCASTING_BEGUILER = 18557; +const int FEAT_WWOC_SPELLCASTING_BEGUILER = 18558; + +//:: Celebrant of Sharess marker feats +const int FEAT_ABCHAMP_SPELLCASTING_CELEBRANT_SHARESS = 18559; +const int FEAT_ALCHEM_SPELLCASTING_CELEBRANT_SHARESS = 18560; +const int FEAT_ALIENIST_SPELLCASTING_CELEBRANT_SHARESS = 18561; +const int FEAT_ARCTRICK_SPELLCASTING_CELEBRANT_SHARESS = 18562; +const int FEAT_BONDED_SPELLCASTING_CELEBRANT_SHARESS = 18563; +const int FEAT_BSINGER_SPELLCASTING_CELEBRANT_SHARESS = 18564; +const int FEAT_CMANCER_SPELLCASTING_CELEBRANT_SHARESS = 18565; +const int FEAT_DHEART_SPELLCASTING_CELEBRANT_SHARESS = 18566; +const int FEAT_DSONG_SPELLCASTING_CELEBRANT_SHARESS = 18567; +const int FEAT_EKNIGHT_SPELLCASTING_CELEBRANT_SHARESS = 18568; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_CELEBRANT_SHARESS = 18569; +const int FEAT_ELESAVANT_SPELLCASTING_CELEBRANT_SHARESS = 18570; +const int FEAT_ETHEURGE_SPELLCASTING_CELEBRANT_SHARESS = 18571; +const int FEAT_FROSTMAGE_SPELLCASTING_CELEBRANT_SHARESS = 18572; +const int FEAT_HARPERM_SPELLCASTING_CELEBRANT_SHARESS = 18573; +const int FEAT_HAVOC_SPELLCASTING_CELEBRANT_SHARESS = 18574; +const int FEAT_JPM_SPELLCASTING_CELEBRANT_SHARESS = 18575; +const int FEAT_MHARPER_SPELLCASTING_CELEBRANT_SHARESS = 18576; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_CELEBRANT_SHARESS = 18577; +const int FEAT_NOCTUMANCER_SPELLCASTING_CELEBRANT_SHARESS = 18578; +const int FEAT_OOZEMASTER_SPELLCASTING_CELEBRANT_SHARESS = 18579; +const int FEAT_RAGEMAGE_SPELLCASTING_CELEBRANT_SHARESS = 18580; +const int FEAT_SHADOWADEPT_SPELLCASTING_CELEBRANT_SHARESS = 18581; +const int FEAT_SOULCASTER_SPELLCASTING_CELEBRANT_SHARESS = 18582; +const int FEAT_SPELLDANCER_SPELLCASTING_CELEBRANT_SHARESS = 18583; +const int FEAT_SSWORD_SPELLCASTING_CELEBRANT_SHARESS = 18584; +const int FEAT_ULTMAGUS_SPELLCASTING_CELEBRANT_SHARESS = 18585; +const int FEAT_UNSEEN_SPELLCASTING_CELEBRANT_SHARESS = 18586; +const int FEAT_WILDMAGE_SPELLCASTING_CELEBRANT_SHARESS = 18587; +const int FEAT_WWOC_SPELLCASTING_CELEBRANT_SHARESS = 18588; + +//:: CotSP marker feats +const int FEAT_ABCHAMP_SPELLCASTING_CULTIST_PEAK = 18589; +const int FEAT_AOTS_SPELLCASTING_CULTIST_PEAK = 18590; +const int FEAT_ANIMA_SPELLCASTING_CULTIST_PEAK = 18591; +const int FEAT_ARCTRICK_SPELLCASTING_CULTIST_PEAK = 18592; +const int FEAT_ASMODEUS_SPELLCASTING_CULTIST_PEAK = 18593; +const int FEAT_BSINGER_SPELLCASTING_CULTIST_PEAK = 18594; +const int FEAT_CMANCER_SPELLCASTING_CULTIST_PEAK = 18595; +const int FEAT_DIABOLIST_SPELLCASTING_CULTIST_PEAK = 18596; +const int FEAT_DSONG_SPELLCASTING_CULTIST_PEAK = 18597; +const int FEAT_EKNIGHT_SPELLCASTING_CULTIST_PEAK = 18598; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_CULTIST_PEAK = 18599; +const int FEAT_ELESAVANT_SPELLCASTING_CULTIST_PEAK = 18600; +const int FEAT_ETHEURGE_SPELLCASTING_CULTIST_PEAK = 18601; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_CULTIST_PEAK = 18602; +const int FEAT_FROSTMAGE_SPELLCASTING_CULTIST_PEAK = 18603; +const int FEAT_GRAZZT_SPELLCASTING_CULTIST_PEAK = 18604; +const int FEAT_HARPERM_SPELLCASTING_CULTIST_PEAK = 18605; +const int FEAT_HATHRAN_SPELLCASTING_CULTIST_PEAK = 18606; +const int FEAT_HAVOC_SPELLCASTING_CULTIST_PEAK = 18607; +const int FEAT_JPM_SPELLCASTING_CULTIST_PEAK = 18608; +const int FEAT_MHARPER_SPELLCASTING_CULTIST_PEAK = 18609; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_CULTIST_PEAK = 18610; +const int FEAT_NOCTUMANCER_SPELLCASTING_CULTIST_PEAK = 18611; +const int FEAT_OOZEMASTER_SPELLCASTING_CULTIST_PEAK = 18612; +const int FEAT_PALEMASTER_SPELLCASTING_CULTIST_PEAK = 18613; +const int FEAT_RAGEMAGE_SPELLCASTING_CULTIST_PEAK = 18614; +const int FEAT_SHADOWADEPT_SPELLCASTING_CULTIST_PEAK = 18615; +const int FEAT_SOULCASTER_SPELLCASTING_CULTIST_PEAK = 18616; +const int FEAT_SPELLDANCER_SPELLCASTING_CULTIST_PEAK = 18617; +const int FEAT_SSWORD_SPELLCASTING_CULTIST_PEAK = 18618; +const int FEAT_TIAMAT_SPELLCASTING_CULTIST_PEAK = 18619; +const int FEAT_ULTMAGUS_SPELLCASTING_CULTIST_PEAK = 18620; +const int FEAT_UNSEEN_SPELLCASTING_CULTIST_PEAK = 18621; +const int FEAT_WILDMAGE_SPELLCASTING_CULTIST_PEAK = 18622; +const int FEAT_WWOC_SPELLCASTING_CULTIST_PEAK = 18623; + +//:: Dread Necromancer marker feats +const int FEAT_AOTS_SPELLCASTING_DNECRO = 18624; +const int FEAT_ALCHEM_SPELLCASTING_DNECRO = 18625; +const int FEAT_ALIENIST_SPELLCASTING_DNECRO = 18626; +const int FEAT_ANIMA_SPELLCASTING_DNECRO = 18627; +const int FEAT_ARCHMAGE_SPELLCASTING_DNECRO = 18628; +const int FEAT_ARCTRICK_SPELLCASTING_DNECRO = 18629; +const int FEAT_ASMODEUS_SPELLCASTING_DNECRO = 18630; +const int FEAT_BSINGER_SPELLCASTING_DNECRO = 18631; +const int FEAT_BLDMAGUS_SPELLCASTING_DNECRO = 18632; +const int FEAT_CMANCER_SPELLCASTING_DNECRO = 18633; +const int FEAT_DIABOLIST_SPELLCASTING_DNECRO = 18634; +const int FEAT_DHEART_SPELLCASTING_DNECRO = 18635; +const int FEAT_DSONG_SPELLCASTING_DNECRO = 18636; +const int FEAT_EKNIGHT_SPELLCASTING_DNECRO = 18637; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_DNECRO = 18638; +const int FEAT_ELESAVANT_SPELLCASTING_DNECRO = 18639; +const int FEAT_ETHEURGE_SPELLCASTING_DNECRO = 18640; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_DNECRO = 18641; +const int FEAT_FROSTMAGE_SPELLCASTING_DNECRO = 18642; +const int FEAT_GRAZZT_SPELLCASTING_DNECRO = 18643; +const int FEAT_HARPERM_SPELLCASTING_DNECRO = 18644; +const int FEAT_HATHRAN_SPELLCASTING_DNECRO = 18645; +const int FEAT_HAVOC_SPELLCASTING_DNECRO = 18646; +const int FEAT_JPM_SPELLCASTING_DNECRO = 18647; +const int FEAT_JUDICATOR_SPELLCASTING_DNECRO = 18648; +const int FEAT_MAESTER_SPELLCASTING_DNECRO = 18649; +const int FEAT_MAGEKILLER_SPELLCASTING_DNECRO = 18650; +const int FEAT_MHARPER_SPELLCASTING_DNECRO = 18651; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_DNECRO = 18652; +const int FEAT_NOCTUMANCER_SPELLCASTING_DNECRO = 18653; +const int FEAT_OOZEMASTER_SPELLCASTING_DNECRO = 18654; +const int FEAT_PALEMASTER_SPELLCASTING_DNECRO = 18655; +const int FEAT_RAGEMAGE_SPELLCASTING_DNECRO = 18656; +const int FEAT_SHADOWADEPT_SPELLCASTING_DNECRO = 18657; +const int FEAT_SOULCASTER_SPELLCASTING_DNECRO = 18658; +const int FEAT_SPELLDANCER_SPELLCASTING_DNECRO = 18659; +const int FEAT_SSWORD_SPELLCASTING_DNECRO = 18660; +const int FEAT_TIAMAT_SPELLCASTING_DNECRO = 18661; +const int FEAT_TNECRO_SPELLCASTING_DNECRO = 18662; +const int FEAT_ULTMAGUS_SPELLCASTING_DNECRO = 18663; +const int FEAT_UNSEEN_SPELLCASTING_DNECRO = 18664; +const int FEAT_WILDMAGE_SPELLCASTING_DNECRO = 18665; +const int FEAT_WWOC_SPELLCASTING_DNECRO = 18666; + +//:: Duskblade marker feats +const int FEAT_ABCHAMP_SPELLCASTING_DUSKBLADE = 18667; +const int FEAT_AOTS_SPELLCASTING_DUSKBLADE = 18668; +const int FEAT_ALCHEM_SPELLCASTING_DUSKBLADE = 18669; +const int FEAT_ANIMA_SPELLCASTING_DUSKBLADE = 18670; +const int FEAT_ARCTRICK_SPELLCASTING_DUSKBLADE = 18671; +const int FEAT_ASMODEUS_SPELLCASTING_DUSKBLADE = 18672; +const int FEAT_BSINGER_SPELLCASTING_DUSKBLADE = 18673; +const int FEAT_BLDMAGUS_SPELLCASTING_DUSKBLADE = 18674; +const int FEAT_CMANCER_SPELLCASTING_DUSKBLADE = 18675; +const int FEAT_DHEART_SPELLCASTING_DUSKBLADE = 18676; +const int FEAT_DIABOLIST_SPELLCASTING_DUSKBLADE = 18677; +const int FEAT_DSONG_SPELLCASTING_DUSKBLADE = 18678; +const int FEAT_EKNIGHT_SPELLCASTING_DUSKBLADE = 18679; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_DUSKBLADE = 18680; +const int FEAT_ELESAVANT_SPELLCASTING_DUSKBLADE = 18681; +const int FEAT_ETHEURGE_SPELLCASTING_DUSKBLADE = 18682; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_DUSKBLADE = 18683; +const int FEAT_FROSTMAGE_SPELLCASTING_DUSKBLADE = 18684; +const int FEAT_GRAZZT_SPELLCASTING_DUSKBLADE = 18685; +const int FEAT_HARPERM_SPELLCASTING_DUSKBLADE = 18686; +const int FEAT_HATHRAN_SPELLCASTING_DUSKBLADE = 18687; +const int FEAT_HAVOC_SPELLCASTING_DUSKBLADE = 18688; +const int FEAT_JPM_SPELLCASTING_DUSKBLADE = 18689; +const int FEAT_JUDICATOR_SPELLCASTING_DUSKBLADE = 18690; +const int FEAT_MAESTER_SPELLCASTING_DUSKBLADE = 18691; +const int FEAT_MAGEKILLER_SPELLCASTING_DUSKBLADE = 18692; +const int FEAT_MHARPER_SPELLCASTING_DUSKBLADE = 18693; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_DUSKBLADE = 18694; +const int FEAT_NOCTUMANCER_SPELLCASTING_DUSKBLADE = 18695; +const int FEAT_OOZEMASTER_SPELLCASTING_DUSKBLADE = 18696; +const int FEAT_PALEMASTER_SPELLCASTING_DUSKBLADE = 18697; +const int FEAT_RAGEMAGE_SPELLCASTING_DUSKBLADE = 18698; +const int FEAT_SHADOWADEPT_SPELLCASTING_DUSKBLADE = 18699; +const int FEAT_SOULCASTER_SPELLCASTING_DUSKBLADE = 18700; +const int FEAT_SPELLDANCER_SPELLCASTING_DUSKBLADE = 18701; +const int FEAT_SSWORD_SPELLCASTING_DUSKBLADE = 18702; +const int FEAT_TIAMAT_SPELLCASTING_DUSKBLADE = 18703; +const int FEAT_TNECRO_SPELLCASTING_DUSKBLADE = 18704; +const int FEAT_ULTMAGUS_SPELLCASTING_DUSKBLADE = 18705; +const int FEAT_UNSEEN_SPELLCASTING_DUSKBLADE = 18706; +const int FEAT_VIRTUOSO_SPELLCASTING_DUSKBLADE = 18707; +const int FEAT_WILDMAGE_SPELLCASTING_DUSKBLADE = 18708; +const int FEAT_WWOC_SPELLCASTING_DUSKBLADE = 18709; + +//:: Harper Scout marker feats +const int FEAT_ABCHAMP_SPELLCASTING_HARPER = 18710; +const int FEAT_ANIMA_SPELLCASTING_HARPER = 18711; +const int FEAT_ARCTRICK_SPELLCASTING_HARPER = 18712; +const int FEAT_BSINGER_SPELLCASTING_HARPER = 18713; +const int FEAT_CMANCER_SPELLCASTING_HARPER = 18714; +const int FEAT_DHEART_SPELLCASTING_HARPER = 18715; +const int FEAT_DSONG_SPELLCASTING_HARPER = 18716; +const int FEAT_EKNIGHT_SPELLCASTING_HARPER = 18717; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_HARPER = 18718; +const int FEAT_ELESAVANT_SPELLCASTING_HARPER = 18719; +const int FEAT_ETHEURGE_SPELLCASTING_HARPER = 18720; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_HARPER = 18721; +const int FEAT_FROSTMAGE_SPELLCASTING_HARPER = 18722; +const int FEAT_HARPERM_SPELLCASTING_HARPER = 18723; +const int FEAT_HATHRAN_SPELLCASTING_HARPER = 18724; +const int FEAT_HAVOC_SPELLCASTING_HARPER = 18725; +const int FEAT_JPM_SPELLCASTING_HARPER = 18726; +const int FEAT_MHARPER_SPELLCASTING_HARPER = 18727; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_HARPER = 18728; +const int FEAT_NOCTUMANCER_SPELLCASTING_HARPER = 18729; +const int FEAT_OOZEMASTER_SPELLCASTING_HARPER = 18730; +const int FEAT_PALEMASTER_SPELLCASTING_HARPER = 18731; +const int FEAT_RAGEMAGE_SPELLCASTING_HARPER = 18732; +const int FEAT_SHADOWADEPT_SPELLCASTING_HARPER = 18733; +const int FEAT_SOULCASTER_SPELLCASTING_HARPER = 18734; +const int FEAT_SPELLDANCER_SPELLCASTING_HARPER = 18735; +const int FEAT_SSWORD_SPELLCASTING_HARPER = 18736; +const int FEAT_ULTMAGUS_SPELLCASTING_HARPER = 18737; +const int FEAT_UNSEEN_SPELLCASTING_HARPER = 18738; +const int FEAT_WILDMAGE_SPELLCASTING_HARPER = 18739; + +//:: Hexblade marker feats +const int FEAT_ABCHAMP_SPELLCASTING_HEXBLADE = 18740; +const int FEAT_AOTS_SPELLCASTING_HEXBLADE = 18741; +const int FEAT_ALCHEM_SPELLCASTING_HEXBLADE = 18742; +const int FEAT_ANIMA_SPELLCASTING_HEXBLADE = 18743; +const int FEAT_ARCTRICK_SPELLCASTING_HEXBLADE = 18744; +const int FEAT_ASMODEUS_SPELLCASTING_HEXBLADE = 18745; +const int FEAT_BONDED_SPELLCASTING_HEXBLADE = 18746; +const int FEAT_BSINGER_SPELLCASTING_HEXBLADE = 18747; +const int FEAT_CMANCER_SPELLCASTING_HEXBLADE = 18748; +const int FEAT_DIABOLIST_SPELLCASTING_HEXBLADE = 18749; +const int FEAT_DHEART_SPELLCASTING_HEXBLADE = 18750; +const int FEAT_DSONG_SPELLCASTING_HEXBLADE = 18751; +const int FEAT_EKNIGHT_SPELLCASTING_HEXBLADE = 18752; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_HEXBLADE = 18753; +const int FEAT_ELESAVANT_SPELLCASTING_HEXBLADE = 18754; +const int FEAT_ETHEURGE_SPELLCASTING_HEXBLADE = 18755; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_HEXBLADE = 18756; +const int FEAT_FROSTMAGE_SPELLCASTING_HEXBLADE = 18757; +const int FEAT_GRAZZT_SPELLCASTING_HEXBLADE = 18758; +const int FEAT_HARPERM_SPELLCASTING_HEXBLADE = 18759; +const int FEAT_HATHRAN_SPELLCASTING_HEXBLADE = 18760; +const int FEAT_HAVOC_SPELLCASTING_HEXBLADE = 18761; +const int FEAT_JPM_SPELLCASTING_HEXBLADE = 18762; +const int FEAT_JUDICATOR_SPELLCASTING_HEXBLADE = 18763; +const int FEAT_MHARPER_SPELLCASTING_HEXBLADE = 18764; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_HEXBLADE = 18765; +const int FEAT_NOCTUMANCER_SPELLCASTING_HEXBLADE = 18766; +const int FEAT_OOZEMASTER_SPELLCASTING_HEXBLADE = 18767; +const int FEAT_PALEMASTER_SPELLCASTING_HEXBLADE = 18768; +const int FEAT_RAGEMAGE_SPELLCASTING_HEXBLADE = 18769; +const int FEAT_SHADOWADEPT_SPELLCASTING_HEXBLADE = 18770; +const int FEAT_SOULCASTER_SPELLCASTING_HEXBLADE = 18771; +const int FEAT_SPELLDANCER_SPELLCASTING_HEXBLADE = 18772; +const int FEAT_SSWORD_SPELLCASTING_HEXBLADE = 18773; +const int FEAT_TIAMAT_SPELLCASTING_HEXBLADE = 18774; +const int FEAT_TNECRO_SPELLCASTING_HEXBLADE = 18775; +const int FEAT_ULTMAGUS_SPELLCASTING_HEXBLADE = 18776; +const int FEAT_UNSEEN_SPELLCASTING_HEXBLADE = 18777; +const int FEAT_WILDMAGE_SPELLCASTING_HEXBLADE = 18778; +const int FEAT_WWOC_SPELLCASTING_HEXBLADE = 18779; + +//:: Knight of the Weave marker feats +const int FEAT_ABCHAMP_SPELLCASTING_KNIGHT_WEAVE = 18780; +const int FEAT_ALCHEM_SPELLCASTING_KNIGHT_WEAVE = 18781; +const int FEAT_ANIMA_SPELLCASTING_KNIGHT_WEAVE = 18782; +const int FEAT_ARCTRICK_SPELLCASTING_KNIGHT_WEAVE = 18783; +const int FEAT_BSINGER_SPELLCASTING_KNIGHT_WEAVE = 18784; +const int FEAT_BLDMAGUS_SPELLCASTING_KNIGHT_WEAVE = 18785; +const int FEAT_CMANCER_SPELLCASTING_KNIGHT_WEAVE = 18786; +const int FEAT_DHEART_SPELLCASTING_KNIGHT_WEAVE = 18787; +const int FEAT_DSONG_SPELLCASTING_KNIGHT_WEAVE = 18788; +const int FEAT_EKNIGHT_SPELLCASTING_KNIGHT_WEAVE = 18789; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_KNIGHT_WEAVE = 18790; +const int FEAT_ELESAVANT_SPELLCASTING_KNIGHT_WEAVE = 18791; +const int FEAT_ETHEURGE_SPELLCASTING_KNIGHT_WEAVE = 18792; +const int FEAT_FMM_SPELLCASTING_KNIGHT_WEAVE = 18793; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_KNIGHT_WEAVE = 18794; +const int FEAT_FROSTMAGE_SPELLCASTING_KNIGHT_WEAVE = 18795; +const int FEAT_HARPERM_SPELLCASTING_KNIGHT_WEAVE = 18796; +const int FEAT_HATHRAN_SPELLCASTING_KNIGHT_WEAVE = 18797; +const int FEAT_HAVOC_SPELLCASTING_KNIGHT_WEAVE = 18798; +const int FEAT_JPM_SPELLCASTING_KNIGHT_WEAVE = 18799; +const int FEAT_MAESTER_SPELLCASTING_KNIGHT_WEAVE = 18800; +const int FEAT_MHARPER_SPELLCASTING_KNIGHT_WEAVE = 18801; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_KNIGHT_WEAVE = 18802; +const int FEAT_NOCTUMANCER_SPELLCASTING_KNIGHT_WEAVE = 18803; +const int FEAT_OOZEMASTER_SPELLCASTING_KNIGHT_WEAVE = 18804; +const int FEAT_PALEMASTER_SPELLCASTING_KNIGHT_WEAVE = 18805; +const int FEAT_RAGEMAGE_SPELLCASTING_KNIGHT_WEAVE = 18806; +const int FEAT_SHADOWADEPT_SPELLCASTING_KNIGHT_WEAVE = 18807; +const int FEAT_SOULCASTER_SPELLCASTING_KNIGHT_WEAVE = 18808; +const int FEAT_SPELLDANCER_SPELLCASTING_KNIGHT_WEAVE = 18809; +const int FEAT_SSWORD_SPELLCASTING_KNIGHT_WEAVE = 18810; +const int FEAT_ULTMAGUS_SPELLCASTING_KNIGHT_WEAVE = 18811; +const int FEAT_UNSEEN_SPELLCASTING_KNIGHT_WEAVE = 18812; +const int FEAT_WAYFARER_SPELLCASTING_KNIGHT_WEAVE = 18813; +const int FEAT_WILDMAGE_SPELLCASTING_KNIGHT_WEAVE = 18814; +const int FEAT_WWOC_SPELLCASTING_KNIGHT_WEAVE = 18815; + +//:: Telflammar Shadowlord marker feats +const int FEAT_ABCHAMP_SPELLCASTING_SHADOWLORD = 18816; +const int FEAT_AOTS_SPELLCASTING_SHADOWLORD = 18817; +const int FEAT_ALCHEM_SPELLCASTING_SHADOWLORD = 18818; +const int FEAT_ANIMA_SPELLCASTING_SHADOWLORD = 18819; +const int FEAT_ARCTRICK_SPELLCASTING_SHADOWLORD = 18820; +const int FEAT_ASMODEUS_SPELLCASTING_SHADOWLORD = 18821; +const int FEAT_BSINGER_SPELLCASTING_SHADOWLORD = 18822; +const int FEAT_CMANCER_SPELLCASTING_SHADOWLORD = 18823; +const int FEAT_DIABOLIST_SPELLCASTING_SHADOWLORD = 18824; +const int FEAT_DHEART_SPELLCASTING_SHADOWLORD = 18825; +const int FEAT_DSONG_SPELLCASTING_SHADOWLORD = 18826; +const int FEAT_EKNIGHT_SPELLCASTING_SHADOWLORD = 18827; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_SHADOWLORD = 18828; +const int FEAT_ELESAVANT_SPELLCASTING_SHADOWLORD = 18829; +const int FEAT_ETHEURGE_SPELLCASTING_SHADOWLORD = 18830; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_SHADOWLORD = 18831; +const int FEAT_FROSTMAGE_SPELLCASTING_SHADOWLORD = 18832; +const int FEAT_GRAZZT_SPELLCASTING_SHADOWLORD = 18833; +const int FEAT_HARPERM_SPELLCASTING_SHADOWLORD = 18834; +const int FEAT_HATHRAN_SPELLCASTING_SHADOWLORD = 18835; +const int FEAT_HAVOC_SPELLCASTING_SHADOWLORD = 18836; +const int FEAT_JPM_SPELLCASTING_SHADOWLORD = 18837; +const int FEAT_JUDICATOR_SPELLCASTING_SHADOWLORD = 18838; +const int FEAT_MHARPER_SPELLCASTING_SHADOWLORD = 18839; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_SHADOWLORD = 18840; +const int FEAT_NOCTUMANCER_SPELLCASTING_SHADOWLORD = 18841; +const int FEAT_OOZEMASTER_SPELLCASTING_SHADOWLORD = 18842; +const int FEAT_PALEMASTER_SPELLCASTING_SHADOWLORD = 18843; +const int FEAT_RAGEMAGE_SPELLCASTING_SHADOWLORD = 18844; +const int FEAT_SHADOWADEPT_SPELLCASTING_SHADOWLORD = 18845; +const int FEAT_SOULCASTER_SPELLCASTING_SHADOWLORD = 18846; +const int FEAT_SPELLDANCER_SPELLCASTING_SHADOWLORD = 18847; +const int FEAT_SSWORD_SPELLCASTING_SHADOWLORD = 18848; +const int FEAT_TIAMAT_SPELLCASTING_SHADOWLORD = 18849; +const int FEAT_TNECRO_SPELLCASTING_SHADOWLORD = 18850; +const int FEAT_ULTMAGUS_SPELLCASTING_SHADOWLORD = 18851; +const int FEAT_UNSEEN_SPELLCASTING_SHADOWLORD = 18852; +const int FEAT_WILDMAGE_SPELLCASTING_SHADOWLORD = 18853; +const int FEAT_WWOC_SPELLCASTING_SHADOWLORD = 18854; + +//:: Sorcerer marker feats +const int FEAT_ABCHAMP_SPELLCASTING_SORCERER = 18855; +const int FEAT_AOTS_SPELLCASTING_SORCERER = 18856; +const int FEAT_ALCHEM_SPELLCASTING_SORCERER = 18857; +const int FEAT_ALIENIST_SPELLCASTING_SORCERER = 18858; +const int FEAT_ANIMA_SPELLCASTING_SORCERER = 18859; +const int FEAT_ARCHMAGE_SPELLCASTING_SORCERER = 18860; +const int FEAT_ARCTRICK_SPELLCASTING_SORCERER = 18861; +const int FEAT_ASMODEUS_SPELLCASTING_SORCERER = 18862; +const int FEAT_BSINGER_SPELLCASTING_SORCERER = 18863; +const int FEAT_BLDMAGUS_SPELLCASTING_SORCERER = 18864; +const int FEAT_BONDED_SPELLCASTING_SORCERER = 18865; +const int FEAT_CMANCER_SPELLCASTING_SORCERER = 18866; +const int FEAT_DIABOLIST_SPELLCASTING_SORCERER = 18867; +const int FEAT_DHEART_SPELLCASTING_SORCERER = 18868; +const int FEAT_DSONG_SPELLCASTING_SORCERER = 18869; +const int FEAT_EKNIGHT_SPELLCASTING_SORCERER = 18870; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_SORCERER = 18871; +const int FEAT_ELESAVANT_SPELLCASTING_SORCERER = 18872; +const int FEAT_ETHEURGE_SPELLCASTING_SORCERER = 18873; +const int FEAT_FMM_SPELLCASTING_SORCERER = 18874; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_SORCERER = 18875; +const int FEAT_FROSTMAGE_SPELLCASTING_SORCERER = 18876; +const int FEAT_GRAZZT_SPELLCASTING_SORCERER = 18877; +const int FEAT_HARPERM_SPELLCASTING_SORCERER = 18878; +const int FEAT_HATHRAN_SPELLCASTING_SORCERER = 18879; +const int FEAT_HAVOC_SPELLCASTING_SORCERER = 18880; +const int FEAT_JPM_SPELLCASTING_SORCERER = 18881; +const int FEAT_JUDICATOR_SPELLCASTING_SORCERER = 18882; +const int FEAT_MAESTER_SPELLCASTING_SORCERER = 18883; +const int FEAT_MAGEKILLER_SPELLCASTING_SORCERER = 18884; +const int FEAT_MHARPER_SPELLCASTING_SORCERER = 18885; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_SORCERER = 18886; +const int FEAT_NOCTUMANCER_SPELLCASTING_SORCERER = 18887; +const int FEAT_OOZEMASTER_SPELLCASTING_SORCERER = 18888; +const int FEAT_PALEMASTER_SPELLCASTING_SORCERER = 18889; +const int FEAT_RAGEMAGE_SPELLCASTING_SORCERER = 18890; +const int FEAT_SHADOWADEPT_SPELLCASTING_SORCERER = 18891; +const int FEAT_SOULCASTER_SPELLCASTING_SORCERER = 18892; +const int FEAT_SPELLDANCER_SPELLCASTING_SORCERER = 18893; +const int FEAT_SSWORD_SPELLCASTING_SORCERER = 18894; +const int FEAT_TIAMAT_SPELLCASTING_SORCERER = 18895; +const int FEAT_TNECRO_SPELLCASTING_SORCERER = 18896; +const int FEAT_ULTMAGUS_SPELLCASTING_SORCERER = 18897; +const int FEAT_UNSEEN_SPELLCASTING_SORCERER = 18898; +const int FEAT_VIRTUOSO_SPELLCASTING_SORCERER = 18899; +const int FEAT_WAYFARER_SPELLCASTING_SORCERER = 18900; +const int FEAT_WILDMAGE_SPELLCASTING_SORCERER = 18901; +const int FEAT_WWOC_SPELLCASTING_SORCERER = 18902; + +//:: Sublime Chord marker feats +const int FEAT_ABCHAMP_SPELLCASTING_SUBLIME_CHORD = 18903; +const int FEAT_AOTS_SPELLCASTING_SUBLIME_CHORD = 18904; +const int FEAT_ALCHEM_SPELLCASTING_SUBLIME_CHORD = 18905; +const int FEAT_ALIENIST_SPELLCASTING_SUBLIME_CHORD = 18906; +const int FEAT_ANIMA_SPELLCASTING_SUBLIME_CHORD = 18907; +const int FEAT_ARCHMAGE_SPELLCASTING_SUBLIME_CHORD = 18908; +const int FEAT_ARCTRICK_SPELLCASTING_SUBLIME_CHORD = 18909; +const int FEAT_ASMODEUS_SPELLCASTING_SUBLIME_CHORD = 18910; +const int FEAT_BSINGER_SPELLCASTING_SUBLIME_CHORD = 18911; +const int FEAT_BLDMAGUS_SPELLCASTING_SUBLIME_CHORD = 18912; +const int FEAT_CMANCER_SPELLCASTING_SUBLIME_CHORD = 18913; +const int FEAT_DIABOLIST_SPELLCASTING_SUBLIME_CHORD = 18914; +const int FEAT_DHEART_SPELLCASTING_SUBLIME_CHORD = 18915; +const int FEAT_DSONG_SPELLCASTING_SUBLIME_CHORD = 18916; +const int FEAT_EKNIGHT_SPELLCASTING_SUBLIME_CHORD = 18917; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_SUBLIME_CHORD = 18918; +const int FEAT_ELESAVANT_SPELLCASTING_SUBLIME_CHORD = 18919; +const int FEAT_ETHEURGE_SPELLCASTING_SUBLIME_CHORD = 18920; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_SUBLIME_CHORD = 18921; +const int FEAT_FROSTMAGE_SPELLCASTING_SUBLIME_CHORD = 18922; +const int FEAT_GRAZZT_SPELLCASTING_SUBLIME_CHORD = 18923; +const int FEAT_HARPERM_SPELLCASTING_SUBLIME_CHORD = 18924; +const int FEAT_HATHRAN_SPELLCASTING_SUBLIME_CHORD = 18925; +const int FEAT_HAVOC_SPELLCASTING_SUBLIME_CHORD = 18926; +const int FEAT_JPM_SPELLCASTING_SUBLIME_CHORD = 18927; +const int FEAT_JUDICATOR_SPELLCASTING_SUBLIME_CHORD = 18928; +const int FEAT_MAESTER_SPELLCASTING_SUBLIME_CHORD = 18929; +const int FEAT_MAGEKILLER_SPELLCASTING_SUBLIME_CHORD = 18930; +const int FEAT_MHARPER_SPELLCASTING_SUBLIME_CHORD = 18931; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_SUBLIME_CHORD = 18932; +const int FEAT_NOCTUMANCER_SPELLCASTING_SUBLIME_CHORD = 18933; +const int FEAT_OOZEMASTER_SPELLCASTING_SUBLIME_CHORD = 18934; +const int FEAT_PALEMASTER_SPELLCASTING_SUBLIME_CHORD = 18935; +const int FEAT_RAGEMAGE_SPELLCASTING_SUBLIME_CHORD = 18936; +const int FEAT_SHADOWADEPT_SPELLCASTING_SUBLIME_CHORD = 18937; +const int FEAT_SOULCASTER_SPELLCASTING_SUBLIME_CHORD = 18938; +const int FEAT_SPELLDANCER_SPELLCASTING_SUBLIME_CHORD = 18939; +const int FEAT_SSWORD_SPELLCASTING_SUBLIME_CHORD = 18940; +const int FEAT_TIAMAT_SPELLCASTING_SUBLIME_CHORD = 18941; +const int FEAT_TNECRO_SPELLCASTING_SUBLIME_CHORD = 18942; +const int FEAT_ULTMAGUS_SPELLCASTING_SUBLIME_CHORD = 18943; +const int FEAT_UNSEEN_SPELLCASTING_SUBLIME_CHORD = 18944; +const int FEAT_WAYFARER_SPELLCASTING_SUBLIME_CHORD = 18945; +const int FEAT_WILDMAGE_SPELLCASTING_SUBLIME_CHORD = 18946; +const int FEAT_WWOC_SPELLCASTING_SUBLIME_CHORD = 18947; + +const int FEAT_SUBLIME_CHORD_SPELLCASTING_ABERRATION = 19605; +const int FEAT_SUBLIME_CHORD_SPELLCASTING_FEY = 19606; +const int FEAT_SUBLIME_CHORD_SPELLCASTING_MONSTROUS = 19607; +const int FEAT_SUBLIME_CHORD_SPELLCASTING_OUTSIDER = 19608; +const int FEAT_SUBLIME_CHORD_SPELLCASTING_SHAPECHANGER = 19609; +const int FEAT_SUBLIME_CHORD_SPELLCASTING_BARD = 19610; +const int FEAT_SUBLIME_CHORD_SPELLCASTING_BEGUILER = 19611; +const int FEAT_SUBLIME_CHORD_SPELLCASTING_DUSKBLADE = 19612; +const int FEAT_SUBLIME_CHORD_SPELLCASTING_SORCERER = 19613; +const int FEAT_SUBLIME_CHORD_SPELLCASTING_WARMAGE = 19614; +const int FEAT_SUBLIME_CHORD_SPELLCASTING_WIZARD = 19615; + +//:: Suel Archanamach marker feats +const int FEAT_ABCHAMP_SPELLCASTING_SUEL_ARCHANAMACH = 18948; +const int FEAT_AOTS_SPELLCASTING_SUEL_ARCHANAMACH = 18949; +const int FEAT_ALCHEM_SPELLCASTING_SUEL_ARCHANAMACH = 18950; +const int FEAT_ANIMA_SPELLCASTING_SUEL_ARCHANAMACH = 18951; +const int FEAT_ARCTRICK_SPELLCASTING_SUEL_ARCHANAMACH = 18952; +const int FEAT_ASMODEUS_SPELLCASTING_SUEL_ARCHANAMACH = 18953; +const int FEAT_BSINGER_SPELLCASTING_SUEL_ARCHANAMACH = 18954; +const int FEAT_BLDMAGUS_SPELLCASTING_ARCHANAMACH = 18955; +const int FEAT_CMANCER_SPELLCASTING_SUEL_ARCHANAMACH = 18956; +const int FEAT_DIABOLIST_SPELLCASTING_SUEL_ARCHANAMACH = 18957; +const int FEAT_DHEART_SPELLCASTING_SUEL_ARCHANAMACH = 18958; +const int FEAT_DSONG_SPELLCASTING_SUEL_ARCHANAMACH = 18959; +const int FEAT_EKNIGHT_SPELLCASTING_SUEL_ARCHANAMACH = 18960; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_SUEL_ARCHANAMACH = 18961; +const int FEAT_ELESAVANT_SPELLCASTING_SUEL_ARCHANAMACH = 18962; +const int FEAT_ETHEURGE_SPELLCASTING_SUEL_ARCHANAMACH = 18963; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_SUEL_ARCHANAMACH = 18964; +const int FEAT_FROSTMAGE_SPELLCASTING_SUEL_ARCHANAMACH = 18965; +const int FEAT_GRAZZT_SPELLCASTING_SUEL_ARCHANAMACH = 18966; +const int FEAT_HARPERM_SPELLCASTING_SUEL_ARCHANAMACH = 18967; +const int FEAT_HATHRAN_SPELLCASTING_SUEL_ARCHANAMACH = 18968; +const int FEAT_HAVOC_SPELLCASTING_SUEL_ARCHANAMACH = 18969; +const int FEAT_JPM_SPELLCASTING_SUEL_ARCHANAMACH = 18970; +const int FEAT_JUDICATOR_SPELLCASTING_SUEL_ARCHANAMACH = 18971; +const int FEAT_MAESTER_SPELLCASTING_SUEL_ARCHANAMACH = 18972; +const int FEAT_MAGEKILLER_SPELLCASTING_SUEL_ARCHANAMACH = 18973; +const int FEAT_MHARPER_SPELLCASTING_SUEL_ARCHANAMACH = 18974; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_SUEL_ARCHANAMACH = 18975; +const int FEAT_NOCTUMANCER_SPELLCASTING_SUEL_ARCHANAMACH = 18976; +const int FEAT_OOZEMASTER_SPELLCASTING_SUEL_ARCHANAMACH = 18977; +const int FEAT_PALEMASTER_SPELLCASTING_SUEL_ARCHANAMACH = 18978; +const int FEAT_RAGEMAGE_SPELLCASTING_SUEL_ARCHANAMACH = 18979; +const int FEAT_SHADOWADEPT_SPELLCASTING_SUEL_ARCHANAMACH = 18980; +const int FEAT_SOULCASTER_SPELLCASTING_SUEL_ARCHANAMACH = 18981; +const int FEAT_SPELLDANCER_SPELLCASTING_SUEL_ARCHANAMACH = 18982; +const int FEAT_SSWORD_SPELLCASTING_SUEL_ARCHANAMACH = 18983; +const int FEAT_TIAMAT_SPELLCASTING_SUEL_ARCHANAMACH = 18984; +const int FEAT_ULTMAGUS_SPELLCASTING_SUEL_ARCHANAMACH = 18985; +const int FEAT_UNSEEN_SPELLCASTING_SUEL_ARCHANAMACH = 18986; +const int FEAT_WILDMAGE_SPELLCASTING_SUEL_ARCHANAMACH = 18987; +const int FEAT_WWOC_SPELLCASTING_SUEL_ARCHANAMACH = 18988; + +//:: Warmage marker feats +const int FEAT_AOTS_SPELLCASTING_WARMAGE = 18989; +const int FEAT_ALCHEM_SPELLCASTING_WARMAGE = 18990; +const int FEAT_ANIMA_SPELLCASTING_WARMAGE = 18991; +const int FEAT_ARCHMAGE_SPELLCASTING_WARMAGE = 18992; +const int FEAT_ARCTRICK_SPELLCASTING_WARMAGE = 18993; +const int FEAT_ASMODEUS_SPELLCASTING_WARMAGE = 18994; +const int FEAT_BSINGER_SPELLCASTING_WARMAGE = 18995; +const int FEAT_BLDMAGUS_SPELLCASTING_WARMAGE = 18996; +const int FEAT_BONDED_SPELLCASTING_WARMAGE = 18997; +const int FEAT_CMANCER_SPELLCASTING_WARMAGE = 18998; +const int FEAT_DIABOLIST_SPELLCASTING_WARMAGE = 18999; +const int FEAT_DHEART_SPELLCASTING_WARMAGE = 19000; +const int FEAT_DSONG_SPELLCASTING_WARMAGE = 19001; +const int FEAT_EKNIGHT_SPELLCASTING_WARMAGE = 19002; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_WARMAGE = 19003; +const int FEAT_ELESAVANT_SPELLCASTING_WARMAGE = 19004; +const int FEAT_ETHEURGE_SPELLCASTING_WARMAGE = 19005; +const int FEAT_FMM_SPELLCASTING_WARMAGE = 19006; +const int FEAT_FROSTMAGE_SPELLCASTING_WARMAGE = 19007; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_WARMAGE = 19008; +const int FEAT_GRAZZT_SPELLCASTING_WARMAGE = 19009; +const int FEAT_HARPERM_SPELLCASTING_WARMAGE = 19010; +const int FEAT_HATHRAN_SPELLCASTING_WARMAGE = 19011; +const int FEAT_HAVOC_SPELLCASTING_WARMAGE = 19012; +const int FEAT_JPM_SPELLCASTING_WARMAGE = 19013; +const int FEAT_JUDICATOR_SPELLCASTING_WARMAGE = 19014; +const int FEAT_MAESTER_SPELLCASTING_WARMAGE = 19015; +const int FEAT_MAGEKILLER_SPELLCASTING_WARMAGE = 19016; +const int FEAT_MHARPER_SPELLCASTING_WARMAGE = 19017; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_WARMAGE = 19018; +const int FEAT_NOCTUMANCER_SPELLCASTING_WARMAGE = 19019; +const int FEAT_OOZEMASTER_SPELLCASTING_WARMAGE = 19020; +const int FEAT_PALEMASTER_SPELLCASTING_WARMAGE = 19021; +const int FEAT_RAGEMAGE_SPELLCASTING_WARMAGE = 19022; +const int FEAT_SHADOWADEPT_SPELLCASTING_WARMAGE = 19023; +const int FEAT_SOULCASTER_SPELLCASTING_WARMAGE = 19024; +const int FEAT_SPELLDANCER_SPELLCASTING_WARMAGE = 19025; +const int FEAT_SSWORD_SPELLCASTING_WARMAGE = 19026; +const int FEAT_TIAMAT_SPELLCASTING_WARMAGE = 19027; +const int FEAT_ULTMAGUS_SPELLCASTING_WARMAGE = 19028; +const int FEAT_UNSEEN_SPELLCASTING_WARMAGE = 19029; +const int FEAT_VIRTUOSO_SPELLCASTING_WARMAGE = 19030; +const int FEAT_WILDMAGE_SPELLCASTING_WARMAGE = 19031; +const int FEAT_WWOC_SPELLCASTING_WARMAGE = 19032; + +//:: Wizard marker feats +const int FEAT_ABCHAMP_SPELLCASTING_WIZARD = 19033; +const int FEAT_AOTS_SPELLCASTING_WIZARD = 19034; +const int FEAT_ALCHEM_SPELLCASTING_WIZARD = 19035; +const int FEAT_ALIENIST_SPELLCASTING_WIZARD = 19036; +const int FEAT_ANIMA_SPELLCASTING_WIZARD = 19037; +const int FEAT_ARCHMAGE_SPELLCASTING_WIZARD = 19038; +const int FEAT_ARCTRICK_SPELLCASTING_WIZARD = 19039; +const int FEAT_ASMODEUS_SPELLCASTING_WIZARD = 19040; +const int FEAT_BSINGER_SPELLCASTING_WIZARD = 19041; +const int FEAT_BLDMAGUS_SPELLCASTING_WIZARD = 19042; +const int FEAT_BONDED_SPELLCASTING_WIZARD = 19043; +const int FEAT_CMANCER_SPELLCASTING_WIZARD = 19044; +const int FEAT_DIABOLIST_SPELLCASTING_WIZARD = 19045; +const int FEAT_DSONG_SPELLCASTING_WIZARD = 19046; +const int FEAT_EKNIGHT_SPELLCASTING_WIZARD = 19047; +const int FEAT_ENLIGHTENEDFIST_SPELLCASTING_WIZARD = 19048; +const int FEAT_ELESAVANT_SPELLCASTING_WIZARD = 19049; +const int FEAT_ETHEURGE_SPELLCASTING_WIZARD = 19050; +const int FEAT_FMM_SPELLCASTING_WIZARD = 19051; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_WIZARD = 19052; +const int FEAT_FROSTMAGE_SPELLCASTING_WIZARD = 19053; +const int FEAT_GRAZZT_SPELLCASTING_WIZARD = 19054; +const int FEAT_HARPERM_SPELLCASTING_WIZARD = 19055; +const int FEAT_HATHRAN_SPELLCASTING_WIZARD = 19056; +const int FEAT_HAVOC_SPELLCASTING_WIZARD = 19057; +const int FEAT_JPM_SPELLCASTING_WIZARD = 19058; +const int FEAT_JUDICATOR_SPELLCASTING_WIZARD = 19059; +const int FEAT_MAESTER_SPELLCASTING_WIZARD = 19060; +const int FEAT_MAGEKILLER_SPELLCASTING_WIZARD = 19061; +const int FEAT_MHARPER_SPELLCASTING_WIZARD = 19062; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_WIZARD = 19063; +const int FEAT_NOCTUMANCER_SPELLCASTING_WIZARD = 19064; +const int FEAT_OOZEMASTER_SPELLCASTING_WIZARD = 19065; +const int FEAT_PALEMASTER_SPELLCASTING_WIZARD = 19066; +const int FEAT_RAGEMAGE_SPELLCASTING_WIZARD = 19067; +const int FEAT_REDWIZ_SPELLCASTING_WIZARD = 19068; +const int FEAT_SHADOWADEPT_SPELLCASTING_WIZARD = 19069; +const int FEAT_SOULCASTER_SPELLCASTING_WIZARD = 19070; +const int FEAT_SPELLDANCER_SPELLCASTING_WIZARD = 19071; +const int FEAT_SSWORD_SPELLCASTING_WIZARD = 19072; +const int FEAT_TIAMAT_SPELLCASTING_WIZARD = 19073; +const int FEAT_TNECRO_SPELLCASTING_WIZARD = 19074; +const int FEAT_ULTMAGUS_SPELLCASTING_WIZARD = 19075; +const int FEAT_UNSEEN_SPELLCASTING_WIZARD = 19076; +const int FEAT_VIRTUOSO_SPELLCASTING_WIZARD = 19077; +const int FEAT_WAYFARER_SPELLCASTING_WIZARD = 19078; +const int FEAT_WILDMAGE_SPELLCASTING_WIZARD = 19079; +const int FEAT_WWOC_SPELLCASTING_WIZARD = 19080; + +//:: Archivist marker feats +const int FEAT_BFZ_SPELLCASTING_ARCHIVIST = 19081; +const int FEAT_BLIGHTLORD_SPELLCASTING_ARCHIVIST = 19082; +const int FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_ARCHIVIST = 19083; +const int FEAT_COMBAT_MEDIC_SPELLCASTING_ARCHIVIST = 19084; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_ARCHIVIST = 19085; +const int FEAT_ELDISCIPLE_SPELLCASTING_ARCHIVIST = 19086; +const int FEAT_FISTRAZIEL_SPELLCASTING_ARCHIVIST = 19087; +const int FEAT_FORESTMASTER_SPELLCASTING_ARCHIVIST = 19088; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_ARCHIVIST = 19089; +const int FEAT_HATHRAN_SPELLCASTING_ARCHIVIST = 19090; +const int FEAT_HEARTWARDER_SPELLCASTING_ARCHIVIST = 19091; +const int FEAT_HIEROPHANT_SPELLCASTING_ARCHIVIST = 19092; +const int FEAT_HOSPITALER_SPELLCASTING_ARCHIVIST = 19093; +const int FEAT_JUDICATOR_SPELLCASTING_ARCHIVIST = 19094; +const int FEAT_KORD_SPELLCASTING_ARCHIVIST = 19095; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_ARCHIVIST = 19096; +const int FEAT_OLLAM_SPELLCASTING_ARCHIVIST = 19097; +const int FEAT_OOZEMASTER_SPELLCASTING_ARCHIVIST = 19098; +const int FEAT_ORCUS_SPELLCASTING_ARCHIVIST = 19099; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_ARCHIVIST = 19100; +const int FEAT_RUBY_VINDICATOR_SPELLCASTING_ARCHIVIST = 19101; +const int FEAT_RUNECASTER_SPELLCASTING_ARCHIVIST = 19102; +const int FEAT_SACREDPURIFIER_SPELLCASTING_ARCHIVIST = 19103; +const int FEAT_SACREDFIST_SPELLCASTING_ARCHIVIST = 19104; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_ARCHIVIST = 19105; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_ARCHIVIST = 19106; +const int FEAT_SHADOWBANE_STALKER_SPELLCASTING_ARCHIVIST = 19107; +const int FEAT_SHINING_BLADE_SPELLCASTING_ARCHIVIST = 19108; +const int FEAT_STORMLORD_SPELLCASTING_ARCHIVIST = 19109; +const int FEAT_SWIFT_WING_SPELLCASTING_ARCHIVIST = 19110; +const int FEAT_TEMPUS_SPELLCASTING_ARCHIVIST = 19111; +const int FEAT_TENEBROUS_APOSTATE_SPELLCASTING_ARCHIVIST = 19112; +const int FEAT_TNECRO_SPELLCASTING_ARCHIVIST = 19113; +const int FEAT_WARPRIEST_SPELLCASTING_ARCHIVIST = 19114; +const int FEAT_MASTER_OF_SHROUDS_SPELLCASTING_ARCHIVIST = 19596; + +//:: Blackguard marker feats +const int FEAT_BFZ_SPELLCASTING_BLACKGUARD = 19115; +const int FEAT_BLIGHTLORD_SPELLCASTING_BLACKGUARD = 19116; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_BLACKGUARD = 19117; +const int FEAT_ELDISCIPLE_SPELLCASTING_BLACKGUARD = 19118; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_BLACKGUARD = 19119; +const int FEAT_HOSPITALER_SPELLCASTING_BLACKGUARD = 19120; +const int FEAT_JUDICATOR_SPELLCASTING_BLACKGUARD = 19121; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_BLACKGUARD = 19122; +const int FEAT_OOZEMASTER_SPELLCASTING_BLACKGUARD = 19123; +const int FEAT_ORCUS_SPELLCASTING_BLACKGUARD = 19124; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_BLACKGUARD = 19125; +const int FEAT_RUBY_VINDICATOR_SPELLCASTING_BLACKGUARD = 19126; +const int FEAT_RUNECASTER_SPELLCASTING_BLACKGUARD = 19127; +const int FEAT_SACREDFIST_SPELLCASTING_BLACKGUARD = 19128; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_BLACKGUARD = 19129; +const int FEAT_STORMLORD_SPELLCASTING_BLACKGUARD = 19130; +const int FEAT_SWIFT_WING_SPELLCASTING_BLACKGUARD = 19131; +const int FEAT_TENEBROUS_APOSTATE_SPELLCASTING_BLACKGUARD = 19132; +const int FEAT_TEMPUS_SPELLCASTING_BLACKGUARD = 19133; +const int FEAT_WARPRIEST_SPELLCASTING_BLACKGUARD = 19134; +const int FEAT_MASTER_OF_SHROUDS_SPELLCASTING_BLACKGUARD = 19597; + + +//:: Blighter marker feats +const int FEAT_BFZ_SPELLCASTING_BLIGHTER = 19135; +const int FEAT_BLIGHTLORD_SPELLCASTING_BLIGHTER = 19136; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_BLIGHTER = 19137; +const int FEAT_ELDISCIPLE_SPELLCASTING_BLIGHTER = 19138; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_BLIGHTER = 19139; +const int FEAT_HIEROPHANT_SPELLCASTING_BLIGHTER = 19140; +const int FEAT_HOSPITALER_SPELLCASTING_BLIGHTER = 19141; +const int FEAT_JUDICATOR_SPELLCASTING_BLIGHTER = 19142; +const int FEAT_MASTER_OF_SHROUDS_SPELLCASTING_BLIGHTER = 19143; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_BLIGHTER = 19144; +const int FEAT_OOZEMASTER_SPELLCASTING_BLIGHTER = 19145; +const int FEAT_ORCUS_SPELLCASTING_BLIGHTER = 19146; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_BLIGHTER = 19147; +const int FEAT_RUBY_VINDICATOR_SPELLCASTING_BLIGHTER = 19148; +const int FEAT_RUNECASTER_SPELLCASTING_BLIGHTER = 19149; +const int FEAT_SACREDFIST_SPELLCASTING_BLIGHTER = 19150; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_BLIGHTER = 19151; +const int FEAT_STORMLORD_SPELLCASTING_BLIGHTER = 19152; +const int FEAT_SWIFT_WING_SPELLCASTING_BLIGHTER = 19153; +const int FEAT_TENEBROUS_APOSTATE_SPELLCASTING_BLIGHTER = 19154; +const int FEAT_TNECRO_SPELLCASTING_BLIGHTER = 19155; +const int FEAT_WARPRIEST_SPELLCASTING_BLIGHTER = 19156; + +//:: Cleric marker feats +const int FEAT_BFZ_SPELLCASTING_CLERIC = 19157; +const int FEAT_BLIGHTLORD_SPELLCASTING_CLERIC = 19158; +const int FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_CLERIC = 19159; +const int FEAT_COMBAT_MEDIC_SPELLCASTING_CLERIC = 19160; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_CLERIC = 19161; +const int FEAT_ELDISCIPLE_SPELLCASTING_CLERIC = 19162; +const int FEAT_FISTRAZIEL_SPELLCASTING_CLERIC = 19163; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_CLERIC = 19164; +const int FEAT_FORESTMASTER_SPELLCASTING_CLERIC = 19165; +const int FEAT_HATHRAN_SPELLCASTING_CLERIC = 19166; +const int FEAT_HEARTWARDER_SPELLCASTING_CLERIC = 19167; +const int FEAT_HIEROPHANT_SPELLCASTING_CLERIC = 19168; +const int FEAT_HOSPITALER_SPELLCASTING_CLERIC = 19169; +const int FEAT_JUDICATOR_SPELLCASTING_CLERIC = 19170; +const int FEAT_MASTER_OF_SHROUDS_SPELLCASTING_CLERIC = 19171; +const int FEAT_KORD_SPELLCASTING_CLERIC = 19172; +const int FEAT_MORNINGLORD_SPELLCASTING_CLERIC = 19173; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_CLERIC = 19174; +const int FEAT_OLLAM_SPELLCASTING_CLERIC = 19175; +const int FEAT_OOZEMASTER_SPELLCASTING_CLERIC = 19176; +const int FEAT_ORCUS_SPELLCASTING_CLERIC = 19177; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_CLERIC = 19178; +const int FEAT_RUBY_VINDICATOR_SPELLCASTING_CLERIC = 19179; +const int FEAT_RUNECASTER_SPELLCASTING_CLERIC = 19180; +const int FEAT_SACREDFIST_SPELLCASTING_CLERIC = 19181; +const int FEAT_SACREDPURIFIER_SPELLCASTING_CLERIC = 19182; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_CLERIC = 19183; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_CLERIC = 19184; +const int FEAT_SHADOWBANE_STALKER_SPELLCASTING_CLERIC = 19185; +const int FEAT_SHINING_BLADE_SPELLCASTING_CLERIC = 19186; +const int FEAT_STORMLORD_SPELLCASTING_CLERIC = 19187; +const int FEAT_SWIFT_WING_SPELLCASTING_CLERIC = 19188; +const int FEAT_TEMPUS_SPELLCASTING_CLERIC = 19189; +const int FEAT_TENEBROUS_APOSTATE_SPELLCASTING_CLERIC = 19190; +const int FEAT_TNECRO_SPELLCASTING_CLERIC = 19191; +const int FEAT_WARPRIEST_SPELLCASTING_CLERIC = 19192; + +//:: Slayer of Domiel marker feats +const int FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_DOMIEL = 19193; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_DOMIEL = 19194; +const int FEAT_ELDISCIPLE_SPELLCASTING_DOMIEL = 19195; +const int FEAT_FISTRAZIEL_SPELLCASTING_DOMIEL = 19196; +const int FEAT_HATHRAN_SPELLCASTING_DOMIEL = 19197; +const int FEAT_HOSPITALER_SPELLCASTING_DOMIEL = 19198; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_DOMIEL = 19199; +const int FEAT_OLLAM_SPELLCASTING_DOMIEL = 19200; +const int FEAT_OOZEMASTER_SPELLCASTING_DOMIEL = 19201; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_DOMIEL = 19202; +const int FEAT_RUNECASTER_SPELLCASTING_DOMIEL = 19203; +const int FEAT_SACREDFIST_SPELLCASTING_DOMIEL = 19204; +const int FEAT_SACREDPURIFIER_SPELLCASTING_DOMIEL = 19205; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_DOMIEL = 19206; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_DOMIEL = 19207; +const int FEAT_SHADOWBANE_STALKER_SPELLCASTING_DOMIEL = 19208; +const int FEAT_SHINING_BLADE_SPELLCASTING_DOMIEL = 19209; +const int FEAT_SWIFT_WING_SPELLCASTING_DOMIEL = 19210; +const int FEAT_WARPRIEST_SPELLCASTING_DOMIEL = 19211; + +//: Druid maker feats +const int FEAT_BLIGHTLORD_SPELLCASTING_DRUID = 19212; +const int FEAT_COMBAT_MEDIC_SPELLCASTING_DRUID = 19213; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_DRUID = 19214; +const int FEAT_ELDISCIPLE_SPELLCASTING_DRUID = 19215; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_DRUID = 19216; +const int FEAT_FORESTMASTER_SPELLCASTING_DRUID = 19217; +const int FEAT_HATHRAN_SPELLCASTING_DRUID = 19218; +const int FEAT_HIEROPHANT_SPELLCASTING_DRUID = 19219; +const int FEAT_HOSPITALER_SPELLCASTING_DRUID = 19220; +const int FEAT_JUDICATOR_SPELLCASTING_DRUID = 19221; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_DRUID = 19222; +const int FEAT_OOZEMASTER_SPELLCASTING_DRUID = 19223; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_DRUID = 19224; +const int FEAT_RUNECASTER_SPELLCASTING_DRUID = 19225; +const int FEAT_SACREDFIST_SPELLCASTING_DRUID = 19226; +const int FEAT_SACREDPURIFIER_SPELLCASTING_DRUID = 19227; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_DRUID = 19228; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_DRUID = 19229; +const int FEAT_STORMLORD_SPELLCASTING_DRUID = 19230; +const int FEAT_SWIFT_WING_SPELLCASTING_DRUID = 19231; +const int FEAT_WARPRIEST_SPELLCASTING_DRUID = 19232; +const int FEAT_MASTER_OF_SHROUDS_SPELLCASTING_DRUID = 19598; + +//:: Favoured Soul marker feats +const int FEAT_BFZ_SPELLCASTING_FAVOURED_SOUL = 19233; +const int FEAT_BLIGHTLORD_SPELLCASTING_FAVOURED_SOUL = 19234; +const int FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_FAVOURED_SOUL = 19235; +const int FEAT_COMBAT_MEDIC_SPELLCASTING_FAVOURED_SOUL = 19236; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_FAVOURED_SOUL = 19237; +const int FEAT_ELDISCIPLE_SPELLCASTING_FAVOURED_SOUL = 19238; +const int FEAT_FISTRAZIEL_SPELLCASTING_FAVOURED_SOUL = 19239; +const int FEAT_FORESTMASTER_SPELLCASTING_FAVOURED_SOUL = 19240; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_FAVOURED_SOUL = 19241; +const int FEAT_HATHRAN_SPELLCASTING_FAVOURED_SOUL = 19242; +const int FEAT_HEARTWARDER_SPELLCASTING_FAVOURED_SOUL = 19243; +const int FEAT_HIEROPHANT_SPELLCASTING_FAVOURED_SOUL = 19244; +const int FEAT_HOSPITALER_SPELLCASTING_FAVOURED_SOUL = 19245; +const int FEAT_JUDICATOR_SPELLCASTING_FAVOURED_SOUL = 19246; +const int FEAT_KORD_SPELLCASTING_FAVOURED_SOUL = 19247; +const int FEAT_MORNINGLORD_SPELLCASTING_FAVOURED_SOUL = 19248; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_FAVOURED_SOUL = 19249; +const int FEAT_OLLAM_SPELLCASTING_FAVOURED_SOUL = 19250; +const int FEAT_OOZEMASTER_SPELLCASTING_FAVOURED_SOUL = 19251; +const int FEAT_ORCUS_SPELLCASTING_FAVOURED_SOUL = 19252; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_FAVOURED_SOUL = 19253; +const int FEAT_RUBY_VINDICATOR_SPELLCASTING_FAVOURED_SOUL = 19254; +const int FEAT_RUNECASTER_SPELLCASTING_FAVOURED_SOUL = 19255; +const int FEAT_SACREDFIST_SPELLCASTING_FAVOURED_SOUL = 19256; +const int FEAT_SACREDPURIFIER_SPELLCASTING_FAVOURED_SOUL = 19257; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_FAVOURED_SOUL = 19258; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_FAVOURED_SOUL = 19259; +const int FEAT_SHADOWBANE_STALKER_SPELLCASTING_FAVOURED_SOUL = 19260; +const int FEAT_SHINING_BLADE_SPELLCASTING_FAVOURED_SOUL = 19261; +const int FEAT_STORMLORD_SPELLCASTING_FAVOURED_SOUL = 19262; +const int FEAT_SWIFT_WING_SPELLCASTING_FAVOURED_SOUL = 19263; +const int FEAT_TENEBROUS_APOSTATE_SPELLCASTING_FAVOURED_SOUL = 19264; +const int FEAT_TEMPUS_SPELLCASTING_FAVOURED_SOUL = 19265; +const int FEAT_TNECRO_SPELLCASTING_FAVOURED_SOUL = 19266; +const int FEAT_WARPRIEST_SPELLCASTING_FAVOURED_SOUL = 19267; +const int FEAT_MASTER_OF_SHROUDS_SPELLCASTING_FAVOURED_SOUL = 19599; + +//:: Healer marker feats +const int FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_HEALER = 19268; +const int FEAT_COMBAT_MEDIC_SPELLCASTING_HEALER = 19269; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_HEALER = 19270; +const int FEAT_ELDISCIPLE_SPELLCASTING_HEALER = 19271; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_HEALER = 19272; +const int FEAT_HATHRAN_SPELLCASTING_HEALER = 19273; +const int FEAT_HEARTWARDER_SPELLCASTING_HEALER = 19274; +const int FEAT_HIEROPHANT_SPELLCASTING_HEALER = 19275; +const int FEAT_HOSPITALER_SPELLCASTING_HEALER = 19276; +const int FEAT_KORD_SPELLCASTING_HEALER = 19277; +const int FEAT_MORNINGLORD_SPELLCASTING_HEALER = 19278; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_HEALER = 19279; +const int FEAT_OLLAM_SPELLCASTING_HEALER = 19280; +const int FEAT_OOZEMASTER_SPELLCASTING_HEALER = 19281; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_HEALER = 19282; +const int FEAT_RUNECASTER_SPELLCASTING_HEALER = 19283; +const int FEAT_SACREDFIST_SPELLCASTING_HEALER = 19284; +const int FEAT_SACREDPURIFIER_SPELLCASTING_HEALER = 19285; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_HEALER = 19286; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_HEALER = 19287; +const int FEAT_SHADOWBANE_STALKER_SPELLCASTING_HEALER = 19288; +const int FEAT_SHINING_BLADE_SPELLCASTING_HEALER = 19289; +const int FEAT_SWIFT_WING_SPELLCASTING_HEALER = 19290; +const int FEAT_WARPRIEST_SPELLCASTING_HEALER = 19291; + +//:: Justice of Weald & Woe maker feats +const int FEAT_BFZ_SPELLCASTING_JUSTICEWW = 19292; +const int FEAT_BLIGHTLORD_SPELLCASTING_JUSTICEWW = 19293; +const int FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_JUSTICEWW = 19294; +const int FEAT_COMBAT_MEDIC_SPELLCASTING_JUSTICEWW = 19295; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_JUSTICEWW = 19296; +const int FEAT_ELDISCIPLE_SPELLCASTING_JUSTICEWW = 19297; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_JUSTICEWW = 19298; +const int FEAT_HATHRAN_SPELLCASTING_JUSTICEWW = 19299; +const int FEAT_HEARTWARDER_SPELLCASTING_JUSTICEWW = 19300; +const int FEAT_HOSPITALER_SPELLCASTING_JUSTICEWW = 19301; +const int FEAT_JUDICATOR_SPELLCASTING_JUSTICEWW = 19302; +const int FEAT_KORD_SPELLCASTING_JUSTICEWW = 19303; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_JUSTICEWW = 19304; +const int FEAT_OLLAM_SPELLCASTING_JUSTICEWW = 19305; +const int FEAT_OOZEMASTER_SPELLCASTING_JUSTICEWW = 19306; +const int FEAT_ORCUS_SPELLCASTING_JUSTICEWW = 19307; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_JUSTICEWW = 19308; +const int FEAT_RUNECASTER_SPELLCASTING_JUSTICEWW = 19309; +const int FEAT_SACREDFIST_SPELLCASTING_JUSTICEWW = 19310; +const int FEAT_SACREDPURIFIER_SPELLCASTING_JUSTICEWW = 19311; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_JUSTICEWW = 19312; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_JUSTICEWW = 19313; +const int FEAT_SHADOWBANE_STALKER_SPELLCASTING_JUSTICEWW = 19314; +const int FEAT_SHINING_BLADE_SPELLCASTING_JUSTICEWW = 19315; +const int FEAT_STORMLORD_SPELLCASTING_JUSTICEWW = 19316; +const int FEAT_SWIFT_WING_SPELLCASTING_JUSTICEWW = 19317; +const int FEAT_TENEBROUS_APOSTATE_SPELLCASTING_JUSTICEWW = 19318; +const int FEAT_TEMPUS_SPELLCASTING_JUSTICEWW = 19319; +const int FEAT_WARPRIEST_SPELLCASTING_JUSTICEWW = 19320; +const int FEAT_MASTER_OF_SHROUDS_SPELLCASTING_JUSTICEWW = 19600; + +//:: Knight of the Chalice marker feats +const int FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_KNIGHT_CHALICE = 19321; +const int FEAT_COMBAT_MEDIC_SPELLCASTING_KNIGHT_CHALICE = 19322; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_KNIGHT_CHALICE = 19323; +const int FEAT_ELDISCIPLE_SPELLCASTING_KNIGHT_CHALICE = 19324; +const int FEAT_FISTRAZIEL_SPELLCASTING_KNIGHT_CHALICE = 19325; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_KNIGHT_CHALICE = 19326; +const int FEAT_HATHRAN_SPELLCASTING_KNIGHT_CHALICE = 19327; +const int FEAT_HOSPITALER_SPELLCASTING_KNIGHT_CHALICE = 19328; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_KNIGHT_CHALICE = 19329; +const int FEAT_OLLAM_SPELLCASTING_KNIGHT_CHALICE = 19330; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_KNIGHT_CHALICE = 19331; +const int FEAT_RUNECASTER_SPELLCASTING_KNIGHT_CHALICE = 19332; +const int FEAT_SACREDFIST_SPELLCASTING_KNIGHT_CHALICE = 19333; +const int FEAT_SACREDPURIFIER_SPELLCASTING_KNIGHT_CHALICE = 19334; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_KNIGHT_CHALICE = 19335; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_KNIGHT_CHALICE = 19336; +const int FEAT_SHADOWBANE_STALKER_SPELLCASTING_KNIGHT_CHALICE = 19337; +const int FEAT_SHINING_BLADE_SPELLCASTING_KNIGHT_CHALICE = 19338; +const int FEAT_SWIFT_WING_SPELLCASTING_KNIGHT_CHALICE = 19339; +const int FEAT_WARPRIEST_SPELLCASTING_KNIGHT_CHALICE = 19340; + +//:: Knight of the Middle Circle marker feats +const int FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19341; +const int FEAT_COMBAT_MEDIC_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19342; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19343; +const int FEAT_ELDISCIPLE_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19344; +const int FEAT_FISTRAZIEL_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19345; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19346; +const int FEAT_HATHRAN_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19347; +const int FEAT_HEARTWARDER_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19348; +const int FEAT_HOSPITALER_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19349; +const int FEAT_KORD_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19350; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19351; +const int FEAT_OLLAM_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19352; +const int FEAT_OOZEMASTER_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19353; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19354; +const int FEAT_RUNECASTER_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19355; +const int FEAT_SACREDFIST_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19356; +const int FEAT_SACREDPURIFIER_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19357; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19358; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19359; +const int FEAT_SHADOWBANE_STALKER_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19360; +const int FEAT_SHINING_BLADE_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19361; +const int FEAT_SWIFT_WING_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19362; +const int FEAT_WARPRIEST_SPELLCASTING_KNIGHT_MIDDLECIRCLE = 19363; + +//:: Nentyar Hunter marer feats +const int FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_NENTYAR_HUNTER = 19364; +const int FEAT_COMBAT_MEDIC_SPELLCASTING_NENTYAR_HUNTER = 19365; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_NENTYAR_HUNTER = 19366; +const int FEAT_ELDISCIPLE_SPELLCASTING_NENTYAR_HUNTER = 19367; +const int FEAT_FORESTMASTER_SPELLCASTING_NENTYAR_HUNTER = 19368; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_NENTYAR_HUNTER = 19369; +const int FEAT_HATHRAN_SPELLCASTING_NENTYAR_HUNTER = 19370; +const int FEAT_HOSPITALER_SPELLCASTING_NENTYAR_HUNTER = 19371; +const int FEAT_KORD_SPELLCASTING_NENTYAR_HUNTER = 19372; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_NENTYAR_HUNTER = 19373; +const int FEAT_OLLAM_SPELLCASTING_NENTYAR_HUNTER = 19374; +const int FEAT_OOZEMASTER_SPELLCASTING_NENTYAR_HUNTER = 19375; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_NENTYAR_HUNTER = 19376; +const int FEAT_RUNECASTER_SPELLCASTING_NENTYAR_HUNTER = 19377; +const int FEAT_SACREDFIST_SPELLCASTING_NENTYAR_HUNTER = 19378; +const int FEAT_SACREDPURIFIER_SPELLCASTING_NENTYAR_HUNTER = 19379; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_NENTYAR_HUNTER = 19380; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_NENTYAR_HUNTER = 19381; +const int FEAT_SHADOWBANE_STALKER_SPELLCASTING_NENTYAR_HUNTER = 19382; +const int FEAT_SHINING_BLADE_SPELLCASTING_NENTYAR_HUNTER = 19383; +const int FEAT_SWIFT_WING_SPELLCASTING_NENTYAR_HUNTER = 19384; +const int FEAT_WARPRIEST_SPELLCASTING_NENTYAR_HUNTER = 19385; + +//:: Ocular Adept marker feats +const int FEAT_BFZ_SPELLCASTING_OCULAR = 19386; +const int FEAT_ELDISCIPLE_SPELLCASTING_OCULAR = 19387; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_OCULAR = 19388; +const int FEAT_HIEROPHANT_SPELLCASTING_OCULAR = 19389; +const int FEAT_HOSPITALER_SPELLCASTING_OCULAR = 19390; +const int FEAT_MASTER_OF_SHROUDS_SPELLCASTING_OCULAR = 19391; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_OCULAR = 19392; +const int FEAT_OOZEMASTER_SPELLCASTING_OCULAR = 19393; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_OCULAR = 19394; +const int FEAT_RUNECASTER_SPELLCASTING_OCULAR = 19395; +const int FEAT_SACREDFIST_SPELLCASTING_OCULAR = 19396; +const int FEAT_TNECRO_SPELLCASTING_OCULAR = 19397; +const int FEAT_WARPRIEST_SPELLCASTING_OCULAR = 19398; + +//:: Paladin marker feats +const int FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_PALADIN = 19399; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_PALADIN = 19400; +const int FEAT_FISTRAZIEL_SPELLCASTING_PALADIN = 19401; +const int FEAT_HATHRAN_SPELLCASTING_PALADIN = 19402; +const int FEAT_HOSPITALER_SPELLCASTING_PALADIN = 19403; +const int FEAT_MORNINGLORD_SPELLCASTING_PALADIN = 19404; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_PALADIN = 19405; +const int FEAT_OLLAM_SPELLCASTING_PALADIN = 19406; +const int FEAT_OOZEMASTER_SPELLCASTING_PALADIN = 19407; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_PALADIN = 19408; +const int FEAT_RUBY_VINDICATOR_SPELLCASTING_PALADIN = 19409; +const int FEAT_RUNECASTER_SPELLCASTING_PALADIN = 19410; +const int FEAT_SACREDFIST_SPELLCASTING_PALADIN = 19411; +const int FEAT_SACREDPURIFIER_SPELLCASTING_PALADIN = 19412; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_PALADIN = 19413; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_PALADIN = 19414; +const int FEAT_SHADOWBANE_STALKER_SPELLCASTING_PALADIN = 19415; +const int FEAT_SHINING_BLADE_SPELLCASTING_PALADIN = 19416; +const int FEAT_SWIFT_WING_SPELLCASTING_PALADIN = 19417; +const int FEAT_WARPRIEST_SPELLCASTING_PALADIN = 19418; +const int FEAT_COMBAT_MEDIC_SPELLCASTING_PALADIN = 19594; + +//:: Ranger marker feats +const int FEAT_BFZ_SPELLCASTING_RANGER = 19419; +const int FEAT_BLIGHTLORD_SPELLCASTING_RANGER = 19420; +const int FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_RANGER = 19421; +const int FEAT_COMBAT_MEDIC_SPELLCASTING_RANGER = 19422; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_RANGER = 19423; +const int FEAT_ELDISCIPLE_SPELLCASTING_RANGER = 19424; +const int FEAT_FORESTMASTER_SPELLCASTING_RANGER = 19425; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_RANGER = 19426; +const int FEAT_HATHRAN_SPELLCASTING_RANGER = 19427; +const int FEAT_HEARTWARDER_SPELLCASTING_RANGER = 19428; +const int FEAT_HOSPITALER_SPELLCASTING_RANGER = 19429; +const int FEAT_JUDICATOR_SPELLCASTING_RANGER = 19430; +const int FEAT_KORD_SPELLCASTING_RANGER = 19431; +const int FEAT_MORNINGLORD_SPELLCASTING_RANGER = 19432; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_RANGER = 19433; +const int FEAT_OLLAM_SPELLCASTING_RANGER = 19434; +const int FEAT_OOZEMASTER_SPELLCASTING_RANGER = 19435; +const int FEAT_ORCUS_SPELLCASTING_RANGER = 19436; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_RANGER = 19437; +const int FEAT_RUNECASTER_SPELLCASTING_RANGER = 19438; +const int FEAT_SACREDFIST_SPELLCASTING_RANGER = 19439; +const int FEAT_SACREDPURIFIER_SPELLCASTING_RANGER = 19440; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_RANGER = 19441; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_RANGER = 19442; +const int FEAT_SHADOWBANE_STALKER_SPELLCASTING_RANGER = 19443; +const int FEAT_SHINING_BLADE_SPELLCASTING_RANGER = 19444; +const int FEAT_STORMLORD_SPELLCASTING_RANGER = 19445; +const int FEAT_SWIFT_WING_SPELLCASTING_RANGER = 19446; +const int FEAT_TEMPUS_SPELLCASTING_RANGER = 19447; +const int FEAT_TENEBROUS_APOSTATE_SPELLCASTING_RANGER = 19448; +const int FEAT_WARPRIEST_SPELLCASTING_RANGER = 19449; +const int FEAT_MASTER_OF_SHROUDS_SPELLCASTING_RANGER = 19601; + +//:: Shaman marker feats +const int FEAT_BFZ_SPELLCASTING_OASHAMAN = 19450; +const int FEAT_BLIGHTLORD_SPELLCASTING_OASHAMAN = 19451; +const int FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_OASHAMAN = 19452; +const int FEAT_COMBAT_MEDIC_SPELLCASTING_OASHAMAN = 19453; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_OASHAMAN = 19454; +const int FEAT_ELDISCIPLE_SPELLCASTING_OASHAMAN = 19455; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_OASHAMAN = 19456; +const int FEAT_FORESTMASTER_SPELLCASTING_OASHAMAN = 19457; +const int FEAT_HATHRAN_SPELLCASTING_OASHAMAN = 19458; +const int FEAT_HEARTWARDER_SPELLCASTING_OASHAMAN = 19459; +const int FEAT_HIEROPHANT_SPELLCASTING_OASHAMAN = 19460; +const int FEAT_HOSPITALER_SPELLCASTING_OASHAMAN = 19461; +const int FEAT_JUDICATOR_SPELLCASTING_OASHAMAN = 19462; +const int FEAT_MASTER_OF_SHROUDS_SPELLCASTING_OASHAMAN = 19463; +const int FEAT_KORD_SPELLCASTING_OASHAMAN = 19464; +const int FEAT_MORNINGLORD_SPELLCASTING_OASHAMAN = 19465; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_OASHAMAN = 19466; +const int FEAT_OLLAM_SPELLCASTING_OASHAMAN = 19467; +const int FEAT_OOZEMASTER_SPELLCASTING_OASHAMAN = 19468; +const int FEAT_ORCUS_SPELLCASTING_OASHAMAN = 19469; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_OASHAMAN = 19470; +const int FEAT_RUBY_VINDICATOR_SPELLCASTING_OASHAMAN = 19471; +const int FEAT_RUNECASTER_SPELLCASTING_OASHAMAN = 19472; +const int FEAT_SACREDFIST_SPELLCASTING_OASHAMAN = 19473; +const int FEAT_SACREDPURIFIER_SPELLCASTING_OASHAMAN = 19474; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_OASHAMAN = 19475; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_OASHAMAN = 19476; +const int FEAT_SHADOWBANE_STALKER_SPELLCASTING_OASHAMAN = 19477; +const int FEAT_SHINING_BLADE_SPELLCASTING_OASHAMAN = 19478; +const int FEAT_STORMLORD_SPELLCASTING_OASHAMAN = 19479; +const int FEAT_SWIFT_WING_SPELLCASTING_OASHAMAN = 19480; +const int FEAT_TENEBROUS_APOSTATE_SPELLCASTING_OASHAMAN = 19481; +const int FEAT_TEMPUS_SPELLCASTING_OASHAMAN = 19482; +const int FEAT_TNECRO_SPELLCASTING_OASHAMAN = 19483; +const int FEAT_WARPRIEST_SPELLCASTING_OASHAMAN = 19484; + +//:: Sohei marker feats +const int FEAT_BFZ_SPELLCASTING_SOHEI = 19485; +const int FEAT_BLIGHTLORD_SPELLCASTING_SOHEI = 19486; +const int FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_SOHEI = 19487; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_SOHEI = 19488; +const int FEAT_ELDISCIPLE_SPELLCASTING_SOHEI = 19489; +const int FEAT_FISTRAZIEL_SPELLCASTING_SOHEI = 19490; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_SOHEI = 19491; +const int FEAT_HATHRAN_SPELLCASTING_SOHEI = 19492; +const int FEAT_HOSPITALER_SPELLCASTING_SOHEI = 19493; +const int FEAT_JUDICATOR_SPELLCASTING_SOHEI = 19494; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_SOHEI = 19495; +const int FEAT_OLLAM_SPELLCASTING_SOHEI = 19496; +const int FEAT_OOZEMASTER_SPELLCASTING_SOHEI = 19497; +const int FEAT_ORCUS_SPELLCASTING_SOHEI = 19498; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_SOHEI = 19499; +const int FEAT_RUNECASTER_SPELLCASTING_SOHEI = 19500; +const int FEAT_SACREDFIST_SPELLCASTING_SOHEI = 19501; +const int FEAT_SACREDPURIFIER_SPELLCASTING_SOHEI = 19502; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_SOHEI = 19503; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_SOHEI = 19504; +const int FEAT_SHINING_BLADE_SPELLCASTING_SOHEI = 19505; +const int FEAT_SWIFT_WING_SPELLCASTING_SOHEI = 19506; +const int FEAT_TENEBROUS_APOSTATE_SPELLCASTING_SOHEI = 19507; +const int FEAT_WARPRIEST_SPELLCASTING_SOHEI = 19508; +const int FEAT_MORNINGLORD_SPELLCASTING_SOHEI = 19595; +const int FEAT_MASTER_OF_SHROUDS_SPELLCASTING_SOHEI = 19602; + +//:: Soldier of Light marker feats +const int FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_SOL = 19509; +const int FEAT_COMBAT_MEDIC_SPELLCASTING_SOL = 19510; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_SOL = 19511; +const int FEAT_ELDISCIPLE_SPELLCASTING_SOL = 19512; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_SOL = 19513; +const int FEAT_HATHRAN_SPELLCASTING_SOL = 19514; +const int FEAT_HOSPITALER_SPELLCASTING_SOL = 19515; +const int FEAT_MORNINGLORD_SPELLCASTING_SOL = 19516; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_SOL = 19517; +const int FEAT_OOZEMASTER_SPELLCASTING_SOL = 19518; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_SOL = 19519; +const int FEAT_RUNECASTER_SPELLCASTING_SOL = 19520; +const int FEAT_SACREDFIST_SPELLCASTING_SOL = 19521; +const int FEAT_SACREDPURIFIER_SPELLCASTING_SOL = 19522; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_SOL = 19523; +const int FEAT_SWIFT_WING_SPELLCASTING_SOL = 19524; +const int FEAT_WARPRIEST_SPELLCASTING_SOL = 19525; + +//:: Spirit Shaman marker feats +const int FEAT_BFZ_SPELLCASTING_SPSHAMAN = 19526; +const int FEAT_BLIGHTLORD_SPELLCASTING_SPSHAMAN = 19527; +const int FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_SPSHAMAN = 19528; +const int FEAT_COMBAT_MEDIC_SPELLCASTING_SPSHAMAN = 19529; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_SPSHAMAN = 19530; +const int FEAT_ELDISCIPLE_SPELLCASTING_SPSHAMAN = 19531; +const int FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_SPSHAMAN = 19532; +const int FEAT_FORESTMASTER_SPELLCASTING_SPSHAMAN = 19533; +const int FEAT_HATHRAN_SPELLCASTING_SPSHAMAN = 19534; +const int FEAT_HEARTWARDER_SPELLCASTING_SPSHAMAN = 19535; +const int FEAT_HIEROPHANT_SPELLCASTING_SPSHAMAN = 19536; +const int FEAT_HOSPITALER_SPELLCASTING_SPSHAMAN = 19537; +const int FEAT_JUDICATOR_SPELLCASTING_SPSHAMAN = 19538; +const int FEAT_KORD_SPELLCASTING_SPSHAMAN = 19539; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_SPSHAMAN = 19540; +const int FEAT_OLLAM_SPELLCASTING_SPSHAMAN = 19541; +const int FEAT_ORCUS_SPELLCASTING_SPSHAMAN = 19542; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_SPSHAMAN = 19543; +const int FEAT_RUNECASTER_SPELLCASTING_SPSHAMAN = 19544; +const int FEAT_SACREDFIST_SPELLCASTING_SPSHAMAN = 19545; +const int FEAT_SACREDPURIFIER_SPELLCASTING_SPSHAMAN = 19546; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_SPSHAMAN = 19547; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_SPSHAMAN = 19548; +const int FEAT_SHADOWBANE_STALKER_SPELLCASTING_SPSHAMAN = 19549; +const int FEAT_SHINING_BLADE_SPELLCASTING_SPSHAMAN = 19550; +const int FEAT_STORMLORD_SPELLCASTING_SPSHAMAN = 19551; +const int FEAT_SWIFT_WING_SPELLCASTING_SPSHAMAN = 19552; +const int FEAT_TEMPUS_SPELLCASTING_SPSHAMAN = 19553; +const int FEAT_TENEBROUS_APOSTATE_SPELLCASTING_SPSHAMAN = 19554; +const int FEAT_WARPRIEST_SPELLCASTING_SPSHAMAN = 19555; +const int FEAT_MASTER_OF_SHROUDS_SPELLCASTING_SPSHAMAN = 19603; + +//:: Ur-Priest marker feats +const int FEAT_BFZ_SPELLCASTING_UR_PRIEST = 19556; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_UR_PRIEST = 19557; +const int FEAT_ELDISCIPLE_SPELLCASTING_UR_PRIEST = 19558; +const int FEAT_HIEROPHANT_SPELLCASTING_UR_PRIEST = 19559; +const int FEAT_HOSPITALER_SPELLCASTING_UR_PRIEST = 19560; +const int FEAT_JUDICATOR_SPELLCASTING_UR_PRIEST = 19561; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_UR_PRIEST = 19562; +const int FEAT_OOZEMASTER_SPELLCASTING_UR_PRIEST = 19563; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_UR_PRIEST = 19564; +const int FEAT_RUNECASTER_SPELLCASTING_UR_PRIEST = 19565; +const int FEAT_SACREDFIST_SPELLCASTING_UR_PRIEST = 19566; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_UR_PRIEST = 19567; +const int FEAT_SWIFT_WING_SPELLCASTING_UR_PRIEST = 19568; +const int FEAT_TENEBROUS_APOSTATE_SPELLCASTING_UR_PRIEST = 19569; +const int FEAT_TNECRO_SPELLCASTING_UR_PRIEST = 19570; +const int FEAT_WARPRIEST_SPELLCASTING_UR_PRIEST = 19571; +const int FEAT_MASTER_OF_SHROUDS_SPELLCASTING_UR_PRIEST = 19604; + +//:: Vassal of Bahamut marker feats +const int FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_VASSAL = 19572; +const int FEAT_CONTEMPLATIVE_SPELLCASTING_VASSAL = 19573; +const int FEAT_FISTRAZIEL_SPELLCASTING_VASSAL = 19574; +const int FEAT_HATHRAN_SPELLCASTING_VASSAL = 19575; +const int FEAT_HOSPITALER_SPELLCASTING_VASSAL = 19576; +const int FEAT_MYSTIC_THEURGE_SPELLCASTING_VASSAL = 19577; +const int FEAT_OLLAM_SPELLCASTING_VASSAL = 19578; +const int FEAT_OOZEMASTER_SPELLCASTING_VASSAL = 19579; +const int FEAT_PSYCHIC_THEURGE_SPELLCASTING_VASSAL = 19580; +const int FEAT_RUNECASTER_SPELLCASTING_VASSAL = 19581; +const int FEAT_SACREDFIST_SPELLCASTING_VASSAL = 19582; +const int FEAT_SACREDPURIFIER_SPELLCASTING_VASSAL = 19583; +const int FEAT_SANCTIFIED_MIND_SPELLCASTING_VASSAL = 19584; +const int FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_VASSAL = 19585; +const int FEAT_SHADOWBANE_STALKER_SPELLCASTING_VASSAL = 19586; +const int FEAT_SHINING_BLADE_SPELLCASTING_VASSAL = 19587; +const int FEAT_SWIFT_WING_SPELLCASTING_VASSAL = 19588; +const int FEAT_WARPRIEST_SPELLCASTING_VASSAL = 19589; + +//:: No spellcasting or invoking marker feats +const int FEAT_ASMODEUS_SPELLCASTING_NONE = 19590; +const int FEAT_TIAMAT_SPELLCASTING_NONE = 19591; +const int FEAT_DSONG_SPELLCASTING_NONE = 19592; +const int FEAT_OLLAM_SPELLCASTING_NONE = 19593; + +//:: PRC8 Hidden Talent Feats +const int FEAT_HIDDEN_TALENT_BIOFEEDBACK = 25901; +const int FEAT_HIDDEN_TALENT_BITE_WOLF = 25902; +const int FEAT_HIDDEN_TALENT_BOLT = 25903; +const int FEAT_HIDDEN_TALENT_BURST = 25904; +const int FEAT_HIDDEN_TALENT_CALLTOMIND = 25905; +const int FEAT_HIDDEN_TALENT_CALL_WEAPONRY = 25906; +const int FEAT_HIDDEN_TALENT_CHAMELEON = 25907; +const int FEAT_HIDDEN_TALENT_CLAWS_BEAST = 25908; +const int FEAT_HIDDEN_TALENT_COMPRESSION = 25909; +const int FEAT_HIDDEN_TALENT_CONCEALTHOUGHT = 25910; +const int FEAT_HIDDEN_TALENT_CREATESOUND = 25911; +const int FEAT_HIDDEN_TALENT_CRYSTALSHARD = 25912; +const int FEAT_HIDDEN_TALENT_DAZE = 25913; +const int FEAT_HIDDEN_TALENT_DECELERATION = 25914; +const int FEAT_HIDDEN_TALENT_DEFPRECOG = 25915; +const int FEAT_HIDDEN_TALENT_DEMORALIZE = 25916; +const int FEAT_HIDDEN_TALENT_DISABLE = 25917; +const int FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH = 25918; +const int FEAT_HIDDEN_TALENT_DISTRACT = 25919; +const int FEAT_HIDDEN_TALENT_ELFSIGHT = 25920; +const int FEAT_HIDDEN_TALENT_EMPATHY = 25921; +const int FEAT_HIDDEN_TALENT_EMPTYMIND = 25922; +const int FEAT_HIDDEN_TALENT_ENERGYRAY = 25923; +const int FEAT_HIDDEN_TALENT_ENTANGLE = 25924; +const int FEAT_HIDDEN_TALENT_EXPANSION = 25925; +const int FEAT_HIDDEN_TALENT_FARHAND = 25926; +const int FEAT_HIDDEN_TALENT_FORCESCREEN = 25927; +const int FEAT_HIDDEN_TALENT_GREASE = 25928; +const int FEAT_HIDDEN_TALENT_HAMMER = 25929; +const int FEAT_HIDDEN_TALENT_INERTIALARMOUR = 25930; +const int FEAT_HIDDEN_TALENT_MATTERAGITATION = 25931; +const int FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW = 25932; +const int FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON = 25933; +const int FEAT_HIDDEN_TALENT_MINDTHRUST = 25934; +const int FEAT_HIDDEN_TALENT_MYLIGHT = 25935; +const int FEAT_HIDDEN_TALENT_OFFPRECOG = 25936; +const int FEAT_HIDDEN_TALENT_OFFPRESC = 25937; +const int FEAT_HIDDEN_TALENT_PREVENOM = 25938; +const int FEAT_HIDDEN_TALENT_PREVENOM_WEAPON = 25939; +const int FEAT_HIDDEN_TALENT_SKATE = 25940; +const int FEAT_HIDDEN_TALENT_STOMP = 25941; +const int FEAT_HIDDEN_TALENT_SYNESTHETE = 25942; +const int FEAT_HIDDEN_TALENT_TELEMPATHICPRO = 25943; +const int FEAT_HIDDEN_TALENT_THICKSKIN = 25944; +const int FEAT_HIDDEN_TALENT_VIGOR = 25945; +const int FEAT_HIDDEN_TALENT_GRIP_IRON = 25946; + + + + +//:: Test void +// void main (){} \ No newline at end of file diff --git a/src/include/prc_getbest_inc.nss b/src/include/prc_getbest_inc.nss new file mode 100644 index 0000000..a17eb0a --- /dev/null +++ b/src/include/prc_getbest_inc.nss @@ -0,0 +1,404 @@ +// Returns the best available-for-casting n-th Level spell from oTarget. +int GetBestL0Spell(object oTarget, int nSpell); +int GetBestL1Spell(object oTarget, int nSpell); +int GetBestL2Spell(object oTarget, int nSpell); +int GetBestL3Spell(object oTarget, int nSpell); +int GetBestL4Spell(object oTarget, int nSpell); +int GetBestL5Spell(object oTarget, int nSpell); +int GetBestL6Spell(object oTarget, int nSpell); +int GetBestL7Spell(object oTarget, int nSpell); +int GetBestL8Spell(object oTarget, int nSpell); +int GetBestL9Spell(object oTarget, int nSpell); + +// Returns the best available-for-casting spell from oTarget's repertoire. +int GetBestAvailableSpell(object oTarget); + +#include "prc_inc_core" + +int GetBestL0Spell(object oTarget, int nFallbackSpell) +{ + int nRow = 0; + string s2DA = "spells"; + string sInnate, sStrRef; + int nSpellID; + + while (TRUE) + { + sInnate = Get2DACache(s2DA, "Innate", nRow); + if (sInnate == "") break; // End of 2DA + + if (StringToInt(sInnate) == 0) + { + nSpellID = nRow; + + if (PRCGetHasSpell(nSpellID, oTarget)) + { + return nSpellID; + } + } + + nRow++; + } + + return nFallbackSpell; +} + +/* int GetBestL0Spell(object oTarget, int nSpell) +{ + if(PRCGetHasSpell(SPELL_ACID_SPLASH, oTarget)) return SPELL_ACID_SPLASH; + if(PRCGetHasSpell(SPELL_RAY_OF_FROST, oTarget)) return SPELL_RAY_OF_FROST; + if(PRCGetHasSpell(SPELL_DAZE, oTarget)) return SPELL_DAZE; + if(PRCGetHasSpell(SPELL_ELECTRIC_JOLT, oTarget)) return SPELL_ELECTRIC_JOLT; + if(PRCGetHasSpell(SPELL_FLARE, oTarget)) return SPELL_FLARE; + if(PRCGetHasSpell(SPELL_RESISTANCE, oTarget)) return SPELL_RESISTANCE; + if(PRCGetHasSpell(SPELL_LIGHT, oTarget)) return SPELL_LIGHT; + if(PRCGetHasSpell(SPELL_VIRTUE, oTarget)) return SPELL_VIRTUE; + if(PRCGetHasSpell(SPELL_CURE_MINOR_WOUNDS, oTarget)) return SPELL_CURE_MINOR_WOUNDS; + if(PRCGetHasSpell(SPELL_INFLICT_MINOR_WOUNDS, oTarget)) return SPELL_INFLICT_MINOR_WOUNDS; + return nSpell; +} */ + +/* + +bscureObject + + */ + +int GetBestL1Spell(object oTarget, int nSpell) +{ + if(PRCGetHasSpell(SPELL_MAGIC_MISSILE, oTarget)) return SPELL_MAGIC_MISSILE; + if(PRCGetHasSpell(SPELL_SUMMON_CREATURE_I, oTarget)) return SPELL_SUMMON_CREATURE_I; + if(PRCGetHasSpell(SPELL_DOOM, oTarget)) return SPELL_DOOM; + if(PRCGetHasSpell(SPELL_BANE, oTarget)) return SPELL_BANE; + if(PRCGetHasSpell(SPELL_BLESS, oTarget)) return SPELL_BLESS; + if(PRCGetHasSpell(SPELL_MAGIC_FANG, oTarget)) return SPELL_MAGIC_FANG; + if(PRCGetHasSpell(SPELL_MAGE_ARMOR, oTarget)) return SPELL_MAGE_ARMOR; + if(PRCGetHasSpell(SPELL_ENDURE_ELEMENTS, oTarget)) return SPELL_ENDURE_ELEMENTS; + if(PRCGetHasSpell(SPELL_LESSER_DISPEL, oTarget)) return SPELL_LESSER_DISPEL; + if(PRCGetHasSpell(SPELL_SANCTUARY, oTarget)) return SPELL_SANCTUARY; + if(PRCGetHasSpell(SPELL_SHIELD, oTarget)) return SPELL_SHIELD; + if(PRCGetHasSpell(SPELL_CHARM_PERSON, oTarget)) return SPELL_CHARM_PERSON; + if(PRCGetHasSpell(SPELL_DEAFENING_CLANG, oTarget)) return SPELL_DEAFENING_CLANG; + if(PRCGetHasSpell(SPELL_BALAGARNSIRONHORN, oTarget)) return SPELL_BALAGARNSIRONHORN; + if(PRCGetHasSpell(SPELL_BLESS_WEAPON, oTarget)) return SPELL_BLESS_WEAPON; + if(PRCGetHasSpell(SPELL_SHELGARNS_PERSISTENT_BLADE, oTarget)) return SPELL_SHELGARNS_PERSISTENT_BLADE; + if(PRCGetHasSpell(SPELL_NEGATIVE_ENERGY_RAY, oTarget)) return SPELL_NEGATIVE_ENERGY_RAY; + if(PRCGetHasSpell(SPELL_BURNING_HANDS, oTarget)) return SPELL_BURNING_HANDS; + if(PRCGetHasSpell(SPELL_HORIZIKAULS_BOOM, oTarget)) return SPELL_HORIZIKAULS_BOOM; + if(PRCGetHasSpell(SPELL_SHIELD_OF_FAITH, oTarget)) return SPELL_SHIELD_OF_FAITH; + if(PRCGetHasSpell(SPELL_AMPLIFY, oTarget)) return SPELL_AMPLIFY; + if(PRCGetHasSpell(SPELL_TRUE_STRIKE, oTarget)) return SPELL_TRUE_STRIKE; + if(PRCGetHasSpell(SPELL_RAY_OF_ENFEEBLEMENT, oTarget)) return SPELL_RAY_OF_ENFEEBLEMENT; + if(PRCGetHasSpell(SPELL_EXPEDITIOUS_RETREAT, oTarget)) return SPELL_EXPEDITIOUS_RETREAT; + if(PRCGetHasSpell(SPELL_ICE_DAGGER, oTarget)) return SPELL_ICE_DAGGER; + if(PRCGetHasSpell(SPELL_ENTROPIC_SHIELD, oTarget)) return SPELL_ENTROPIC_SHIELD; + if(PRCGetHasSpell(SPELL_ENTANGLE, oTarget)) return SPELL_ENTANGLE; + if(PRCGetHasSpell(SPELL_DIVINE_FAVOR, oTarget)) return SPELL_DIVINE_FAVOR; + if(PRCGetHasSpell(SPELL_FEAR, oTarget)) return SPELL_FEAR; + if(PRCGetHasSpell(SPELL_SLEEP, oTarget)) return SPELL_SLEEP; + if(PRCGetHasSpell(SPELL_SORROW, oTarget)) return SPELL_SORROW; + if(PRCGetHasSpell(SPELL_MAGIC_WEAPON, oTarget)) return SPELL_MAGIC_WEAPON; + if(PRCGetHasSpell(SPELL_SCARE, oTarget)) return SPELL_SCARE; + if(PRCGetHasSpell(SPELL_GREASE, oTarget)) return SPELL_GREASE; + if(PRCGetHasSpell(SPELL_CAMOFLAGE, oTarget)) return SPELL_CAMOFLAGE; + if(PRCGetHasSpell(SPELL_COLOR_SPRAY, oTarget)) return SPELL_COLOR_SPRAY; + if(PRCGetHasSpell(SPELL_RAY_OF_HOPE, oTarget)) return SPELL_RAY_OF_HOPE; + if(PRCGetHasSpell(SPELL_RESIST_ELEMENTS, oTarget)) return SPELL_RESIST_ELEMENTS; + if(PRCGetHasSpell(SPELL_REMOVE_FEAR, oTarget)) return SPELL_REMOVE_FEAR; + if(PRCGetHasSpell(SPELL_IRONGUTS, oTarget)) return SPELL_IRONGUTS; + if(PRCGetHasSpell(SPELL_PROTECTION_FROM_LAW, oTarget)) return SPELL_PROTECTION_FROM_LAW; + if(PRCGetHasSpell(SPELL_PROTECTION_FROM_GOOD, oTarget)) return SPELL_PROTECTION_FROM_GOOD; + if(PRCGetHasSpell(SPELL_PROTECTION__FROM_CHAOS, oTarget)) return SPELL_PROTECTION__FROM_CHAOS; + if(PRCGetHasSpell(SPELL_PROTECTION_FROM_EVIL, oTarget)) return SPELL_PROTECTION_FROM_EVIL; + if(PRCGetHasSpell(SPELL_IDENTIFY, oTarget)) return SPELL_IDENTIFY; + if(PRCGetHasSpell(SPELL_CURE_LIGHT_WOUNDS, oTarget)) return SPELL_CURE_LIGHT_WOUNDS; + if(PRCGetHasSpell(SPELL_INFLICT_LIGHT_WOUNDS, oTarget)) return SPELL_INFLICT_LIGHT_WOUNDS; + if(PRCGetHasSpell(SPELL_EXTRACT_DRUG, oTarget)) return SPELL_EXTRACT_DRUG; + if(PRCGetHasSpell(SPELL_OBSCURE_OBJECT, oTarget)) return SPELL_OBSCURE_OBJECT; + if(PRCGetHasSpell(2839, oTarget)) return 2839; //:: Disguise Self + return nSpell; +} + +int GetBestL2Spell(object oTarget, int nSpell) +{ + if(PRCGetHasSpell(SPELL_MELFS_ACID_ARROW, oTarget)) return SPELL_MELFS_ACID_ARROW; + if(PRCGetHasSpell(SPELL_BULLS_STRENGTH, oTarget)) return SPELL_BULLS_STRENGTH; + if(PRCGetHasSpell(SPELL_CATS_GRACE, oTarget)) return SPELL_CATS_GRACE; + if(PRCGetHasSpell(SPELL_ENDURANCE, oTarget)) return SPELL_ENDURANCE; + if(PRCGetHasSpell(SPELL_FOXS_CUNNING, oTarget)) return SPELL_FOXS_CUNNING; + if(PRCGetHasSpell(SPELL_EAGLE_SPLEDOR, oTarget)) return SPELL_EAGLE_SPLEDOR; + if(PRCGetHasSpell(SPELL_OWLS_WISDOM, oTarget)) return SPELL_OWLS_WISDOM; + if(PRCGetHasSpell(SPELL_PROTECTION_FROM_ELEMENTS, oTarget)) return SPELL_PROTECTION_FROM_ELEMENTS; + if(PRCGetHasSpell(SPELL_SUMMON_CREATURE_II, oTarget)) return SPELL_SUMMON_CREATURE_II; + if(PRCGetHasSpell(SPELL_ONE_WITH_THE_LAND, oTarget)) return SPELL_ONE_WITH_THE_LAND; + if(PRCGetHasSpell(SPELL_INVISIBILITY, oTarget)) return SPELL_INVISIBILITY; + if(PRCGetHasSpell(SPELL_CLARITY, oTarget)) return SPELL_CLARITY; + if(PRCGetHasSpell(SPELL_FIND_TRAPS, oTarget)) return SPELL_FIND_TRAPS; + if(PRCGetHasSpell(SPELL_LESSER_RESTORATION, oTarget)) return SPELL_LESSER_RESTORATION; + if(PRCGetHasSpell(SPELL_FLAME_LASH, oTarget)) return SPELL_FLAME_LASH; + if(PRCGetHasSpell(SPELL_FLAME_WEAPON, oTarget)) return SPELL_FLAME_WEAPON; + if(PRCGetHasSpell(SPELL_WEB, oTarget)) return SPELL_WEB; + if(PRCGetHasSpell(SPELL_COMBUST, oTarget)) return SPELL_COMBUST; + if(PRCGetHasSpell(SPELL_GHOUL_TOUCH, oTarget)) return SPELL_GHOUL_TOUCH; + if(PRCGetHasSpell(SPELL_KNOCK, oTarget)) return SPELL_KNOCK; + if(PRCGetHasSpell(SPELL_GHOSTLY_VISAGE, oTarget)) return SPELL_GHOSTLY_VISAGE; + if(PRCGetHasSpell(SPELL_SOUND_BURST, oTarget)) return SPELL_SOUND_BURST; + if(PRCGetHasSpell(SPELL_SILENCE, oTarget)) return SPELL_SILENCE; + if(PRCGetHasSpell(SPELL_SEE_INVISIBILITY, oTarget)) return SPELL_SEE_INVISIBILITY; + if(PRCGetHasSpell(SPELL_HOLD_PERSON, oTarget)) return SPELL_HOLD_PERSON; + if(PRCGetHasSpell(SPELL_GEDLEES_ELECTRIC_LOOP, oTarget)) return SPELL_GEDLEES_ELECTRIC_LOOP; + if(PRCGetHasSpell(SPELL_REMOVE_PARALYSIS, oTarget)) return SPELL_REMOVE_PARALYSIS; + if(PRCGetHasSpell(SPELL_CLOUD_OF_BEWILDERMENT, oTarget)) return SPELL_CLOUD_OF_BEWILDERMENT; + if(PRCGetHasSpell(SPELL_TASHAS_HIDEOUS_LAUGHTER, oTarget)) return SPELL_TASHAS_HIDEOUS_LAUGHTER; + if(PRCGetHasSpell(SPELL_BLOOD_FRENZY, oTarget)) return SPELL_BLOOD_FRENZY; + if(PRCGetHasSpell(SPELL_BLINDNESS_AND_DEAFNESS, oTarget)) return SPELL_BLINDNESS_AND_DEAFNESS; + if(PRCGetHasSpell(SPELL_STONE_BONES, oTarget)) return SPELL_STONE_BONES; + if(PRCGetHasSpell(SPELL_BARKSKIN, oTarget)) return SPELL_BARKSKIN; + if(PRCGetHasSpell(SPELL_DARKVISION, oTarget)) return SPELL_DARKVISION; + if(PRCGetHasSpell(SPELL_DEATH_ARMOR, oTarget)) return SPELL_DEATH_ARMOR; + if(PRCGetHasSpell(SPELL_DARKNESS, oTarget)) return SPELL_DARKNESS; + if(PRCGetHasSpell(SPELL_CHARM_PERSON_OR_ANIMAL, oTarget)) return SPELL_CHARM_PERSON_OR_ANIMAL; + if(PRCGetHasSpell(SPELL_AURAOFGLORY, oTarget)) return SPELL_AURAOFGLORY; + if(PRCGetHasSpell(SPELL_HOLD_ANIMAL, oTarget)) return SPELL_HOLD_ANIMAL; + if(PRCGetHasSpell(SPELL_AID, oTarget)) return SPELL_AID; + if(PRCGetHasSpell(SPELL_CONTINUAL_FLAME, oTarget)) return SPELL_CONTINUAL_FLAME; + if(PRCGetHasSpell(SPELL_CURE_MODERATE_WOUNDS, oTarget)) return SPELL_CURE_MODERATE_WOUNDS; + if(PRCGetHasSpell(SPELL_INFLICT_MODERATE_WOUNDS, oTarget)) return SPELL_INFLICT_MODERATE_WOUNDS; + return nSpell; +} + +int GetBestL3Spell(object oTarget, int nSpell) +{ + if(PRCGetHasSpell(SPELL_FLAME_ARROW, oTarget)) return SPELL_FLAME_ARROW; + if(PRCGetHasSpell(SPELL_CALL_LIGHTNING, oTarget)) return SPELL_CALL_LIGHTNING; + if(PRCGetHasSpell(SPELL_FIREBALL, oTarget)) return SPELL_FIREBALL; + if(PRCGetHasSpell(SPELL_DISPLACEMENT, oTarget)) return SPELL_DISPLACEMENT; + if(PRCGetHasSpell(SPELL_DISPEL_MAGIC, oTarget)) return SPELL_DISPEL_MAGIC; + if(PRCGetHasSpell(SPELL_HASTE, oTarget)) return SPELL_HASTE; + if(PRCGetHasSpell(SPELL_SLOW, oTarget)) return SPELL_SLOW; + if(PRCGetHasSpell(SPELL_VAMPIRIC_TOUCH, oTarget)) return SPELL_VAMPIRIC_TOUCH; + if(PRCGetHasSpell(SPELL_SEARING_LIGHT, oTarget)) return SPELL_SEARING_LIGHT; + if(PRCGetHasSpell(SPELL_SCINTILLATING_SPHERE, oTarget)) return SPELL_SCINTILLATING_SPHERE; + if(PRCGetHasSpell(SPELL_MESTILS_ACID_BREATH, oTarget)) return SPELL_MESTILS_ACID_BREATH; + if(PRCGetHasSpell(SPELL_MAGIC_CIRCLE_AGAINST_LAW, oTarget)) return SPELL_MAGIC_CIRCLE_AGAINST_LAW; + if(PRCGetHasSpell(SPELL_MAGIC_CIRCLE_AGAINST_GOOD, oTarget)) return SPELL_MAGIC_CIRCLE_AGAINST_GOOD; + if(PRCGetHasSpell(SPELL_MAGIC_CIRCLE_AGAINST_EVIL, oTarget)) return SPELL_MAGIC_CIRCLE_AGAINST_EVIL; + if(PRCGetHasSpell(SPELL_MAGIC_CIRCLE_AGAINST_CHAOS, oTarget)) return SPELL_MAGIC_CIRCLE_AGAINST_CHAOS; + if(PRCGetHasSpell(SPELL_LIGHTNING_BOLT, oTarget)) return SPELL_LIGHTNING_BOLT; + if(PRCGetHasSpell(SPELL_NEGATIVE_ENERGY_BURST, oTarget)) return SPELL_NEGATIVE_ENERGY_BURST; + if(PRCGetHasSpell(SPELL_SUMMON_CREATURE_III, oTarget)) return SPELL_SUMMON_CREATURE_III; + if(PRCGetHasSpell(SPELL_KEEN_EDGE, oTarget)) return SPELL_KEEN_EDGE; + if(PRCGetHasSpell(SPELL_MAGIC_VESTMENT, oTarget)) return SPELL_MAGIC_VESTMENT; + if(PRCGetHasSpell(SPELL_DOMINATE_ANIMAL, oTarget)) return SPELL_DOMINATE_ANIMAL; + if(PRCGetHasSpell(SPELL_GLYPH_OF_WARDING, oTarget)) return SPELL_GLYPH_OF_WARDING; + if(PRCGetHasSpell(SPELL_INVISIBILITY_SPHERE, oTarget)) return SPELL_INVISIBILITY_SPHERE; + if(PRCGetHasSpell(SPELL_INVISIBILITY_PURGE, oTarget)) return SPELL_INVISIBILITY_PURGE; + if(PRCGetHasSpell(SPELL_FEAR, oTarget)) return SPELL_FEAR; + if(PRCGetHasSpell(SPELL_BLADE_THIRST, oTarget)) return SPELL_BLADE_THIRST; + if(PRCGetHasSpell(SPELL_GREATER_MAGIC_WEAPON, oTarget)) return SPELL_GREATER_MAGIC_WEAPON; + if(PRCGetHasSpell(SPELL_POISON, oTarget)) return SPELL_POISON; + if(PRCGetHasSpell(SPELL_STINKING_CLOUD, oTarget)) return SPELL_STINKING_CLOUD; + if(PRCGetHasSpell(SPELL_SPIKE_GROWTH, oTarget)) return SPELL_SPIKE_GROWTH; + if(PRCGetHasSpell(SPELL_WOUNDING_WHISPERS, oTarget)) return SPELL_WOUNDING_WHISPERS; + if(PRCGetHasSpell(SPELL_QUILLFIRE, oTarget)) return SPELL_QUILLFIRE; + if(PRCGetHasSpell(SPELL_GREATER_MAGIC_FANG, oTarget)) return SPELL_GREATER_MAGIC_FANG; + if(PRCGetHasSpell(SPELL_GUST_OF_WIND, oTarget)) return SPELL_GUST_OF_WIND; + if(PRCGetHasSpell(SPELL_INFESTATION_OF_MAGGOTS, oTarget)) return SPELL_INFESTATION_OF_MAGGOTS; + if(PRCGetHasSpell(SPELL_ANIMATE_DEAD, oTarget)) return SPELL_ANIMATE_DEAD; + if(PRCGetHasSpell(SPELL_NEUTRALIZE_POISON, oTarget)) return SPELL_NEUTRALIZE_POISON; + if(PRCGetHasSpell(SPELL_NEGATIVE_ENERGY_PROTECTION, oTarget)) return SPELL_NEGATIVE_ENERGY_PROTECTION; + if(PRCGetHasSpell(SPELL_CONTAGION, oTarget)) return SPELL_CONTAGION; + if(PRCGetHasSpell(SPELL_HEALING_STING, oTarget)) return SPELL_HEALING_STING; + if(PRCGetHasSpell(SPELL_REMOVE_DISEASE, oTarget)) return SPELL_REMOVE_DISEASE; + if(PRCGetHasSpell(SPELL_REMOVE_CURSE, oTarget)) return SPELL_REMOVE_CURSE; + if(PRCGetHasSpell(SPELL_REMOVE_BLINDNESS_AND_DEAFNESS, oTarget)) return SPELL_REMOVE_BLINDNESS_AND_DEAFNESS; + if(PRCGetHasSpell(SPELL_CONFUSION, oTarget)) return SPELL_CONFUSION; + if(PRCGetHasSpell(SPELL_PRAYER, oTarget)) return SPELL_PRAYER; + if(PRCGetHasSpell(SPELL_DARKFIRE, oTarget)) return SPELL_DARKFIRE; + if(PRCGetHasSpell(SPELL_CLAIRAUDIENCE_AND_CLAIRVOYANCE, oTarget)) return SPELL_CLAIRAUDIENCE_AND_CLAIRVOYANCE; + if(PRCGetHasSpell(SPELL_CHARM_MONSTER, oTarget)) return SPELL_CHARM_MONSTER; + if(PRCGetHasSpell(SPELL_BESTOW_CURSE, oTarget)) return SPELL_BESTOW_CURSE; + if(PRCGetHasSpell(SPELL_CURE_SERIOUS_WOUNDS, oTarget)) return SPELL_CURE_SERIOUS_WOUNDS; + if(PRCGetHasSpell(SPELL_INFLICT_SERIOUS_WOUNDS, oTarget)) return SPELL_INFLICT_SERIOUS_WOUNDS; + return nSpell; +} + +int GetBestL4Spell(object oTarget, int nSpell) +{ + if(PRCGetHasSpell(SPELL_ISAACS_LESSER_MISSILE_STORM, oTarget)) return SPELL_ISAACS_LESSER_MISSILE_STORM; + if(PRCGetHasSpell(SPELL_STONESKIN, oTarget)) return SPELL_STONESKIN; + if(PRCGetHasSpell(SPELL_DOMINATE_PERSON, oTarget)) return SPELL_DOMINATE_PERSON; + if(PRCGetHasSpell(SPELL_LESSER_SPELL_BREACH, oTarget)) return SPELL_LESSER_SPELL_BREACH; + if(PRCGetHasSpell(SPELL_ELEMENTAL_SHIELD, oTarget)) return SPELL_ELEMENTAL_SHIELD; + if(PRCGetHasSpell(SPELL_IMPROVED_INVISIBILITY, oTarget)) return SPELL_IMPROVED_INVISIBILITY; + if(PRCGetHasSpell(SPELL_ICE_STORM, oTarget)) return SPELL_ICE_STORM; + if(PRCGetHasSpell(SPELL_HAMMER_OF_THE_GODS, oTarget)) return SPELL_HAMMER_OF_THE_GODS; + if(PRCGetHasSpell(SPELL_SUMMON_CREATURE_IV, oTarget)) return SPELL_SUMMON_CREATURE_IV; + if(PRCGetHasSpell(SPELL_EVARDS_BLACK_TENTACLES, oTarget)) return SPELL_EVARDS_BLACK_TENTACLES; + if(PRCGetHasSpell(SPELL_MINOR_GLOBE_OF_INVULNERABILITY, oTarget)) return SPELL_MINOR_GLOBE_OF_INVULNERABILITY; + if(PRCGetHasSpell(SPELL_LEGEND_LORE, oTarget)) return SPELL_LEGEND_LORE; + if(PRCGetHasSpell(SPELL_POLYMORPH_SELF, oTarget)) return SPELL_POLYMORPH_SELF; + if(PRCGetHasSpell(SPELL_PHANTASMAL_KILLER, oTarget)) return SPELL_PHANTASMAL_KILLER; + if(PRCGetHasSpell(SPELL_DIVINE_POWER, oTarget)) return SPELL_DIVINE_POWER; + if(PRCGetHasSpell(SPELL_DEATH_WARD, oTarget)) return SPELL_DEATH_WARD; + if(PRCGetHasSpell(SPELL_FREEDOM_OF_MOVEMENT, oTarget)) return SPELL_FREEDOM_OF_MOVEMENT; + if(PRCGetHasSpell(SPELL_WAR_CRY, oTarget)) return SPELL_WAR_CRY; + if(PRCGetHasSpell(SPELL_WALL_OF_FIRE, oTarget)) return SPELL_WALL_OF_FIRE; + if(PRCGetHasSpell(SPELL_RESTORATION, oTarget)) return SPELL_RESTORATION; + if(PRCGetHasSpell(SPELL_MASS_CAMOFLAGE, oTarget)) return SPELL_MASS_CAMOFLAGE; + if(PRCGetHasSpell(SPELL_ENERVATION, oTarget)) return SPELL_ENERVATION; + if(PRCGetHasSpell(SPELL_HOLY_SWORD, oTarget)) return SPELL_HOLY_SWORD; + if(PRCGetHasSpell(SPELL_HOLD_MONSTER, oTarget)) return SPELL_HOLD_MONSTER; + if(PRCGetHasSpell(SPELL_DISMISSAL, oTarget)) return SPELL_DISMISSAL; + if(PRCGetHasSpell(SPELL_INFLICT_CRITICAL_WOUNDS, oTarget)) return SPELL_INFLICT_CRITICAL_WOUNDS; + if(PRCGetHasSpell(SPELL_CURE_CRITICAL_WOUNDS, oTarget)) return SPELL_CURE_CRITICAL_WOUNDS; + return nSpell; +} + +int GetBestL5Spell(object oTarget, int nSpell) +{ + if(PRCGetHasSpell(SPELL_TRUE_SEEING, oTarget)) return SPELL_TRUE_SEEING; + if(PRCGetHasSpell(SPELL_BIGBYS_INTERPOSING_HAND, oTarget)) return SPELL_BIGBYS_INTERPOSING_HAND; + if(PRCGetHasSpell(SPELL_GREATER_DISPELLING, oTarget)) return SPELL_GREATER_DISPELLING; + if(PRCGetHasSpell(SPELL_LESSER_SPELL_MANTLE, oTarget)) return SPELL_LESSER_SPELL_MANTLE; + if(PRCGetHasSpell(SPELL_SPELL_RESISTANCE, oTarget)) return SPELL_SPELL_RESISTANCE; + if(PRCGetHasSpell(SPELL_MONSTROUS_REGENERATION, oTarget)) return SPELL_MONSTROUS_REGENERATION; + if(PRCGetHasSpell(SPELL_RAISE_DEAD, oTarget)) return SPELL_RAISE_DEAD; + if(PRCGetHasSpell(SPELL_MIND_FOG, oTarget)) return SPELL_MIND_FOG; + if(PRCGetHasSpell(SPELL_SLAY_LIVING, oTarget)) return SPELL_SLAY_LIVING; + if(PRCGetHasSpell(SPELL_LESSER_PLANAR_BINDING, oTarget)) return SPELL_LESSER_PLANAR_BINDING; + if(PRCGetHasSpell(SPELL_LESSER_MIND_BLANK, oTarget)) return SPELL_LESSER_MIND_BLANK; + if(PRCGetHasSpell(SPELL_FLAME_STRIKE, oTarget)) return SPELL_FLAME_STRIKE; + if(PRCGetHasSpell(SPELL_FIREBRAND, oTarget)) return SPELL_FIREBRAND; + if(PRCGetHasSpell(SPELL_INFERNO, oTarget)) return SPELL_INFERNO; + if(PRCGetHasSpell(SPELL_CONE_OF_COLD, oTarget)) return SPELL_CONE_OF_COLD; + if(PRCGetHasSpell(SPELL_BALL_LIGHTNING, oTarget)) return SPELL_BALL_LIGHTNING; + if(PRCGetHasSpell(SPELL_ENERGY_BUFFER, oTarget)) return SPELL_ENERGY_BUFFER; + if(PRCGetHasSpell(SPELL_SUMMON_CREATURE_V, oTarget)) return SPELL_SUMMON_CREATURE_V; + if(PRCGetHasSpell(SPELL_MESTILS_ACID_SHEATH, oTarget)) return SPELL_MESTILS_ACID_SHEATH; + if(PRCGetHasSpell(SPELL_FEEBLEMIND, oTarget)) return SPELL_FEEBLEMIND; + if(PRCGetHasSpell(SPELL_ETHEREAL_VISAGE, oTarget)) return SPELL_ETHEREAL_VISAGE; + if(PRCGetHasSpell(SPELL_VINE_MINE, oTarget)) return SPELL_VINE_MINE; + if(PRCGetHasSpell(SPELL_BATTLETIDE, oTarget)) return SPELL_BATTLETIDE; + if(PRCGetHasSpell(SPELL_CLOUDKILL, oTarget)) return SPELL_CLOUDKILL; + if(PRCGetHasSpell(SPELL_AWAKEN, oTarget)) return SPELL_AWAKEN; + if(PRCGetHasSpell(SPELL_HEALING_CIRCLE, oTarget)) return SPELL_HEALING_CIRCLE; + if(PRCGetHasSpell(SPELL_CIRCLE_OF_DOOM, oTarget)) return SPELL_CIRCLE_OF_DOOM; + return nSpell; +} + +int GetBestL6Spell(object oTarget, int nSpell) +{ + if(PRCGetHasSpell(SPELL_ISAACS_GREATER_MISSILE_STORM, oTarget)) return SPELL_ISAACS_GREATER_MISSILE_STORM; + if(PRCGetHasSpell(SPELL_BIGBYS_FORCEFUL_HAND, oTarget)) return SPELL_BIGBYS_FORCEFUL_HAND; + if(PRCGetHasSpell(SPELL_CHAIN_LIGHTNING, oTarget)) return SPELL_CHAIN_LIGHTNING; + if(PRCGetHasSpell(SPELL_MASS_HASTE, oTarget)) return SPELL_MASS_HASTE; + if(PRCGetHasSpell(SPELL_DROWN, oTarget)) return SPELL_DROWN; + if(PRCGetHasSpell(SPELL_GREATER_STONESKIN, oTarget)) return SPELL_GREATER_STONESKIN; + if(PRCGetHasSpell(SPELL_GREATER_SPELL_BREACH, oTarget)) return SPELL_GREATER_SPELL_BREACH; + if(PRCGetHasSpell(SPELL_CIRCLE_OF_DEATH, oTarget)) return SPELL_CIRCLE_OF_DEATH; + if(PRCGetHasSpell(SPELL_GLOBE_OF_INVULNERABILITY, oTarget)) return SPELL_GLOBE_OF_INVULNERABILITY; + if(PRCGetHasSpell(SPELL_UNDEATH_TO_DEATH, oTarget)) return SPELL_UNDEATH_TO_DEATH; + if(PRCGetHasSpell(SPELL_CRUMBLE, oTarget)) return SPELL_CRUMBLE; + if(PRCGetHasSpell(SPELL_REGENERATE, oTarget)) return SPELL_REGENERATE; + if(PRCGetHasSpell(SPELL_SUMMON_CREATURE_VI, oTarget)) return SPELL_SUMMON_CREATURE_VI; + if(PRCGetHasSpell(SPELL_STONEHOLD, oTarget)) return SPELL_STONEHOLD; + if(PRCGetHasSpell(SPELL_FLESH_TO_STONE, oTarget)) return SPELL_FLESH_TO_STONE; + if(PRCGetHasSpell(SPELL_STONE_TO_FLESH, oTarget)) return SPELL_STONE_TO_FLESH; + if(PRCGetHasSpell(SPELL_TENSERS_TRANSFORMATION, oTarget)) return SPELL_TENSERS_TRANSFORMATION; + if(PRCGetHasSpell(SPELL_CREATE_UNDEAD, oTarget)) return SPELL_CREATE_UNDEAD; + if(PRCGetHasSpell(SPELL_CONTROL_UNDEAD, oTarget)) return SPELL_CONTROL_UNDEAD; + if(PRCGetHasSpell(SPELL_PLANAR_BINDING, oTarget)) return SPELL_PLANAR_BINDING; + if(PRCGetHasSpell(SPELL_PLANAR_ALLY, oTarget)) return SPELL_PLANAR_ALLY; + if(PRCGetHasSpell(SPELL_DIRGE, oTarget)) return SPELL_DIRGE; + if(PRCGetHasSpell(SPELL_BLADE_BARRIER, oTarget)) return SPELL_BLADE_BARRIER; + if(PRCGetHasSpell(SPELL_BANISHMENT, oTarget)) return SPELL_BANISHMENT; + if(PRCGetHasSpell(SPELL_ACID_FOG, oTarget)) return SPELL_ACID_FOG; + if(PRCGetHasSpell(SPELL_HEAL, oTarget)) return SPELL_HEAL; + if(PRCGetHasSpell(SPELL_HARM, oTarget)) return SPELL_HARM; + return nSpell; +} + +int GetBestL7Spell(object oTarget, int nSpell) +{ + if(PRCGetHasSpell(SPELL_SPELL_MANTLE, oTarget)) return SPELL_SPELL_MANTLE; + if(PRCGetHasSpell(SPELL_BIGBYS_GRASPING_HAND, oTarget)) return SPELL_BIGBYS_GRASPING_HAND; + if(PRCGetHasSpell(SPELL_FIRE_STORM, oTarget)) return SPELL_FIRE_STORM; + if(PRCGetHasSpell(SPELL_FINGER_OF_DEATH, oTarget)) return SPELL_FINGER_OF_DEATH; + if(PRCGetHasSpell(SPELL_PROTECTION_FROM_SPELLS, oTarget)) return SPELL_PROTECTION_FROM_SPELLS; + if(PRCGetHasSpell(SPELL_WORD_OF_FAITH, oTarget)) return SPELL_WORD_OF_FAITH; + if(PRCGetHasSpell(SPELL_SHADOW_SHIELD, oTarget)) return SPELL_SHADOW_SHIELD; + if(PRCGetHasSpell(SPELL_CREEPING_DOOM, oTarget)) return SPELL_CREEPING_DOOM; + if(PRCGetHasSpell(SPELL_DESTRUCTION, oTarget)) return SPELL_DESTRUCTION; + if(PRCGetHasSpell(SPELL_PRISMATIC_SPRAY, oTarget)) return SPELL_PRISMATIC_SPRAY; + if(PRCGetHasSpell(SPELL_DELAYED_BLAST_FIREBALL, oTarget)) return SPELL_DELAYED_BLAST_FIREBALL; + if(PRCGetHasSpell(SPELL_GREAT_THUNDERCLAP, oTarget)) return SPELL_GREAT_THUNDERCLAP; + if(PRCGetHasSpell(SPELL_POWER_WORD_STUN, oTarget)) return SPELL_POWER_WORD_STUN; + if(PRCGetHasSpell(SPELL_MORDENKAINENS_SWORD, oTarget)) return SPELL_MORDENKAINENS_SWORD; + if(PRCGetHasSpell(SPELL_RESURRECTION, oTarget)) return SPELL_RESURRECTION; + if(PRCGetHasSpell(SPELL_SUMMON_CREATURE_VII, oTarget)) return SPELL_SUMMON_CREATURE_VII; + if(PRCGetHasSpell(SPELL_AURA_OF_VITALITY, oTarget)) return SPELL_AURA_OF_VITALITY; + if(PRCGetHasSpell(SPELL_GREATER_RESTORATION, oTarget)) return SPELL_GREATER_RESTORATION; + return nSpell; +} + +int GetBestL8Spell(object oTarget, int nSpell) +{ + if(PRCGetHasSpell(SPELL_BIGBYS_CLENCHED_FIST, oTarget)) return SPELL_BIGBYS_CLENCHED_FIST; + if(PRCGetHasSpell(SPELL_HORRID_WILTING, oTarget)) return SPELL_HORRID_WILTING; + if(PRCGetHasSpell(SPELL_EARTHQUAKE, oTarget)) return SPELL_EARTHQUAKE; + if(PRCGetHasSpell(SPELL_NATURES_BALANCE, oTarget)) return SPELL_NATURES_BALANCE; + if(PRCGetHasSpell(SPELL_INCENDIARY_CLOUD, oTarget)) return SPELL_INCENDIARY_CLOUD; + if(PRCGetHasSpell(SPELL_MIND_BLANK, oTarget)) return SPELL_MIND_BLANK; + if(PRCGetHasSpell(SPELL_PREMONITION, oTarget)) return SPELL_PREMONITION; + if(PRCGetHasSpell(SPELL_SUNBURST, oTarget)) return SPELL_SUNBURST; + if(PRCGetHasSpell(SPELL_SUNBEAM, oTarget)) return SPELL_SUNBEAM; + if(PRCGetHasSpell(SPELL_MASS_CHARM, oTarget)) return SPELL_MASS_CHARM; + if(PRCGetHasSpell(SPELL_MASS_BLINDNESS_AND_DEAFNESS, oTarget)) return SPELL_MASS_BLINDNESS_AND_DEAFNESS; + if(PRCGetHasSpell(SPELL_BOMBARDMENT, oTarget)) return SPELL_BOMBARDMENT; + if(PRCGetHasSpell(SPELL_GREATER_PLANAR_BINDING, oTarget)) return SPELL_GREATER_PLANAR_BINDING; + if(PRCGetHasSpell(SPELL_SUMMON_CREATURE_VIII, oTarget)) return SPELL_SUMMON_CREATURE_VIII; + if(PRCGetHasSpell(SPELL_CREATE_GREATER_UNDEAD, oTarget)) return SPELL_CREATE_GREATER_UNDEAD; + if(PRCGetHasSpell(SPELL_BLACKSTAFF, oTarget)) return SPELL_BLACKSTAFF; + if(PRCGetHasSpell(SPELL_MASS_HEAL, oTarget)) return SPELL_MASS_HEAL; + return nSpell; +} + +int GetBestL9Spell(object oTarget, int nSpell) +{ + if(PRCGetHasSpell(SPELL_TIME_STOP, oTarget)) return SPELL_TIME_STOP; + if(PRCGetHasSpell(SPELL_BLACK_BLADE_OF_DISASTER, oTarget)) return SPELL_BLACK_BLADE_OF_DISASTER; + if(PRCGetHasSpell(SPELL_MORDENKAINENS_DISJUNCTION, oTarget)) return SPELL_MORDENKAINENS_DISJUNCTION; + if(PRCGetHasSpell(SPELL_GREATER_SPELL_MANTLE, oTarget)) return SPELL_GREATER_SPELL_MANTLE; + if(PRCGetHasSpell(SPELL_BIGBYS_CRUSHING_HAND, oTarget)) return SPELL_BIGBYS_CRUSHING_HAND; + if(PRCGetHasSpell(SPELL_WAIL_OF_THE_BANSHEE, oTarget)) return SPELL_WAIL_OF_THE_BANSHEE; + if(PRCGetHasSpell(SPELL_WEIRD, oTarget)) return SPELL_WEIRD; + if(PRCGetHasSpell(SPELL_METEOR_SWARM, oTarget)) return SPELL_METEOR_SWARM; + if(PRCGetHasSpell(SPELL_IMPLOSION, oTarget)) return SPELL_IMPLOSION; + if(PRCGetHasSpell(SPELL_POWER_WORD_KILL, oTarget)) return SPELL_POWER_WORD_KILL; + if(PRCGetHasSpell(SPELL_STORM_OF_VENGEANCE, oTarget)) return SPELL_STORM_OF_VENGEANCE; + if(PRCGetHasSpell(SPELL_SHAPECHANGE, oTarget)) return SPELL_SHAPECHANGE; + if(PRCGetHasSpell(SPELL_DOMINATE_MONSTER, oTarget)) return SPELL_DOMINATE_MONSTER; + if(PRCGetHasSpell(SPELL_ELEMENTAL_SWARM, oTarget)) return SPELL_ELEMENTAL_SWARM; + if(PRCGetHasSpell(SPELL_SUMMON_CREATURE_IX, oTarget)) return SPELL_SUMMON_CREATURE_IX; + if(PRCGetHasSpell(SPELL_GATE, oTarget)) return SPELL_GATE; + if(PRCGetHasSpell(SPELL_ENERGY_DRAIN, oTarget)) return SPELL_ENERGY_DRAIN; + if(PRCGetHasSpell(SPELL_UNDEATHS_ETERNAL_FOE, oTarget)) return SPELL_UNDEATHS_ETERNAL_FOE; + return nSpell; +} + +int GetBestAvailableSpell(object oTarget) +{ + int nBestSpell = GetBestL9Spell(oTarget, 99999); + if(nBestSpell == 99999) nBestSpell = GetBestL8Spell(oTarget, nBestSpell); + if(nBestSpell == 99999) nBestSpell = GetBestL7Spell(oTarget, nBestSpell); + if(nBestSpell == 99999) nBestSpell = GetBestL6Spell(oTarget, nBestSpell); + if(nBestSpell == 99999) nBestSpell = GetBestL5Spell(oTarget, nBestSpell); + if(nBestSpell == 99999) nBestSpell = GetBestL4Spell(oTarget, nBestSpell); + if(nBestSpell == 99999) nBestSpell = GetBestL3Spell(oTarget, nBestSpell); + if(nBestSpell == 99999) nBestSpell = GetBestL2Spell(oTarget, nBestSpell); + if(nBestSpell == 99999) nBestSpell = GetBestL1Spell(oTarget, nBestSpell); + if(nBestSpell == 99999) nBestSpell = GetBestL0Spell(oTarget, nBestSpell); + return nBestSpell; +} + diff --git a/src/include/prc_inc_actions.nss b/src/include/prc_inc_actions.nss new file mode 100644 index 0000000..f8117d3 --- /dev/null +++ b/src/include/prc_inc_actions.nss @@ -0,0 +1,142 @@ +//:://///////////////////////////////////////////// +//:: Actions include +//:: prc_inc_actions +//:://///////////////////////////////////////////// +/** @file + Defines functions related to use of actions. + + @author Ornedan + @date Created - 2006.01.26 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +/// A marker local the presence of which indicates that a creature's +/// available swift action has been used for a particular round +const string PRC_SWIFT_ACTION_MARKER = "PRC_SwiftActionUsed"; + +/// A marker local the presence of which indicates that a creature's +/// available move action has been used for a particular round +const string PRC_MOVE_ACTION_MARKER = "PRC_MoveActionUsed"; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Determines whether the given creature can use a swift action at this moment + * and if it can, marks that action as used. + * Conditions are that it has not used a swift action already in the last + * 6 seconds, and that that GetCanTakeFreeAction() returns TRUE. + * In addition, if a PC, it must be commandable by the player. This is in order + * to prevent abuse of instant action feats. + * + * @param oCreature Creature whose eligibility to use a swift action to test. + * @return TRUE if the creature can take a swift action now, FALSE otherwise. + */ +int TakeSwiftAction(object oCreature); + +/** + * Determines whether the given creature can use a free action at this moment. + * Condition is that it is not affected by a condition that would prevent + * action queue processing. + * If the bTestControllability is set to true, this will also test for + * conditions that would prevent control by the player. + * + * @param oCreature Creature whose eligibility to use a free action to test. + * @param bTestControllability Whether to test for controllability affecting conditions. + * @return TRUE if the creature can take a free action now, FALSE otherwise. + */ +int GetCanTakeFreeAction(object oCreature, int bTestControllability = FALSE); + +/** + * Determines whether the given creature can use a move action at this moment + * and if it can, marks that action as used. + * Conditions are that it has not used a move action already in the last + * 6 seconds + * In addition, if a PC, it must be commandable by the player. This is in order + * to prevent abuse of instant action feats. + * + * @param oCreature Creature whose eligibility to use a move action to test. + * @return TRUE if the creature can take a move action now, FALSE otherwise. + */ +int TakeMoveAction(object oCreature); + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int TakeSwiftAction(object oCreature) +{ + if(!GetLocalInt(oCreature, PRC_SWIFT_ACTION_MARKER) && + GetCanTakeFreeAction(oCreature, GetIsPC(oCreature)) && + GetCommandable(oCreature) + ) + { + // Mark swift action used up for this round + SetLocalInt(oCreature, PRC_SWIFT_ACTION_MARKER, TRUE); + DelayCommand(6.0f, DeleteLocalInt(oCreature, PRC_SWIFT_ACTION_MARKER)); + + // Can use swift action + return TRUE; + } + + // Can't use swift action + FloatingTextStringOnCreature("You have already used your swift action this round.", oCreature, FALSE); + return FALSE; +} + +int GetCanTakeFreeAction(object oCreature, int bTestControllability = FALSE) +{ + effect eTest = GetFirstEffect(oCreature); + int nEType; + while(GetIsEffectValid(eTest)) + { + nEType = GetEffectType(eTest); + if(nEType == EFFECT_TYPE_CUTSCENE_PARALYZE || + nEType == EFFECT_TYPE_DAZED || + nEType == EFFECT_TYPE_PARALYZE || + nEType == EFFECT_TYPE_PETRIFY || + nEType == EFFECT_TYPE_SLEEP || + nEType == EFFECT_TYPE_STUNNED || + (bTestControllability && + (nEType == EFFECT_TYPE_CHARMED || + nEType == EFFECT_TYPE_CONFUSED || + nEType == EFFECT_TYPE_DOMINATED || + nEType == EFFECT_TYPE_FRIGHTENED || + nEType == EFFECT_TYPE_TURNED + ) + ) + ) + return FALSE; + + // Get next effect + eTest = GetNextEffect(oCreature); + } + + return TRUE; +} + +int TakeMoveAction(object oCreature) +{ + if(!GetLocalInt(oCreature, PRC_MOVE_ACTION_MARKER) && GetCommandable(oCreature)) + { + // Mark move action used up for this round + SetLocalInt(oCreature, PRC_MOVE_ACTION_MARKER, TRUE); + DelayCommand(6.0f, DeleteLocalInt(oCreature, PRC_MOVE_ACTION_MARKER)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSlow(), oCreature, 4.0); + + // Can use move action + return TRUE; + } + + // Can't use move action + FloatingTextStringOnCreature("You have already used your move action this round.", oCreature, FALSE); + return FALSE; +} \ No newline at end of file diff --git a/src/include/prc_inc_array.nss b/src/include/prc_inc_array.nss new file mode 100644 index 0000000..d4367a6 --- /dev/null +++ b/src/include/prc_inc_array.nss @@ -0,0 +1,568 @@ +//:://///////////////////////////////////////////// +//:: Array simulation include +//:: prc_inc_array +//::////////////////////////////////////////////// +/** @file + Array simulation include + + This file defines a set of functions for creating + and manipulating arrays, which are implemented as + local variables on some holder object. + + + Notes: + + * Arrays are dynamic and may be increased in size by just _set_'ing a new + element + * There are no restrictions on what is in the array (can have multiple + types in the same array) + * Arrays start at index 0 + + //////////////////////////////////////////////////////////////////////////////// + // (c) Mr. Figglesworth 2002 + // This code is licensed under beerware. You are allowed to freely use it + // and modify it in any way. Your only two obligations are: (1) at your option, + // to buy the author a beer if you ever meet him; and (2) include the + // copyright notice and license in any redistribution of this code or + // alterations of it. + // + // Full credit for how the array gets implemented goes to the guy who wrote + // the article and posted it on the NWNVault (I couldn't find your article + // to give you credit :( ). And, of course, to bioware. Great job! + //////////////////////////////////////////////////////////////////////////////// +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +/** + * Creates a new array on the given storage object. If an + * array with the same name already exists, the function + * errors. + * + * @param store The object to use as holder for the array + * @param name The name of the array + * @return SDL_SUCCESS if the array was successfully created, + * one of SDL_ERROR_* on error. + */ +int array_create(object store, string name); + +/** + * Deletes an array, erasing all it's entries. + * + * @param store The object which holds the array to delete + * @param name The name of the array + * @return SDL_SUCCESS if the array was successfully deleted, + * one of SDL_ERROR_* on error + */ +int array_delete(object store, string name); + +/** + * Stores a string in an array. + * + * @param store The object holding the array + * @param name The name of the array + * @param i The index to store the string at + * @param entry The string to store + * @return SDL_SUCCESS if the store was successfull, SDL_ERROR_* on error. + */ +int array_set_string(object store, string name, int i, string entry); + +/** + * Stores an integer in an array. + * + * @param store The object holding the array + * @param name The name of the array + * @param i The index to store the integer at + * @param entry The integer to store + * @return SDL_SUCCESS if the store was successfull, SDL_ERROR_* on error. + */ +int array_set_int(object store, string name, int i, int entry); + +/** + * Stores a float in an array. + * + * @param store The object holding the array + * @param name The name of the array + * @param i The index to store the float at + * @param entry The float to store + * @return SDL_SUCCESS if the store was successfull, SDL_ERROR_* on error. + */ +int array_set_float(object store, string name, int i, float entry); + +/** + * Stores an object in an array. + * + * @param store The object holding the array + * @param name The name of the array + * @param i The index to store the object at + * @param entry The object to store + * @return SDL_SUCCESS if the store was successfull, SDL_ERROR_* on error. + */ +int array_set_object(object store, string name, int i, object entry); + +/** + * Gets a string from an array. + * + * @param store The object holding the array + * @param name The name of the array + * @param i The index to retrieve the string from + * @return The value contained at the index on success, + * "" on error + */ +string array_get_string(object store, string name, int i); + +/** + * Gets an integer from an array. + * + * @param store The object holding the array + * @param name The name of the array + * @param i The index to retrieve the integer from + * @return The value contained at the index on success, + * 0 on error + */ +int array_get_int(object store, string name, int i); + +/** + * Gets a float from an array. + * + * @param store The object holding the array + * @param name The name of the array + * @param i The index to retrieve the float from + * @return The value contained at the index on success, + * 0.0f on error + */ +float array_get_float(object store, string name, int i); + +/** + * Gets an object from an array. + * + * @param store The object holding the array + * @param name The name of the array + * @param i The index to retrieve the object from + * @return The value contained at the index on success, + * OBJECT_INVALID on error + */ +object array_get_object(object store, string name, int i); + +/** + * Removes all entries in the array with indexes greater than or equal to + * the new size and sets the array size to be equal to the new size. + * + * @param store The object holding the array + * @param name The name of the array + * @param size_new The new number of entries in the array + * @return SDL_SUCCESS on successful resize, SDL_ERROR_* on + * error + */ +int array_shrink(object store, string name, int size_new); + +/** + * Gets the current size of the array. This is one greater + * than the index of highest indexed element the array + * has contained since the last array_shrink or the new size + * specified by the last array_shrink, whichever is greater. + * + * @param store The object holding the array + * @param name The name of the array + * @return The size of the array, or -1 if the specified + * array does not exist. + */ +int array_get_size(object store, string name); + +/** + * Checks whether the given array exists. + * + * @param store The object holding the array + * @param name The name of the array + * @return TRUE if the array exists, FALSE otherwise. + */ +int array_exists(object store, string name); + +/* These need to be rewritten and made less bug-prone before being taken into use. + Preferrably not necessarily have it be fucking massive square matrix, but instead + store a separate length for each x row. + +int array_2d_create(object store, string name); +int array_2d_delete(object store, string name); + +int array_2d_set_string(object store, string name, int i, int j, string entry); +int array_2d_set_int(object store, string name, int i, int j, int entry); +int array_2d_set_float(object store, string name, int i, int j, float entry); +int array_2d_set_object(object store, string name, int i, int j, object entry); + +// returns "" or 0 on error +string array_2d_get_string(object store, string name, int i, int j); +int array_2d_get_int(object store, string name, int i, int j); +float array_2d_get_float(object store, string name, int i, int j); +object array_2d_get_object(object store, string name, int i, int j); + +// changes memory usage of array (deletes x[ > size_new]) +int array_2d_shrink(object store, string name, int size_new, int axis); + +// gets current maximum size of array +int array_2d_get_size(object store, string name, int axis); + +int array_2d_exists(object store, string name); +*/ + +///////////////////////////////////// +// Error Returns +///////////////////////////////////// + +const int SDL_SUCCESS = 1; +const int SDL_ERROR = 1000; +const int SDL_ERROR_ALREADY_EXISTS = 1001; +const int SDL_ERROR_DOES_NOT_EXIST = 1002; +const int SDL_ERROR_OUT_OF_BOUNDS = 1003; +const int SDL_ERROR_NO_ZERO_SIZE = 1004; // Not used - Ornedan 2006.09.15 +const int SDL_ERROR_NOT_VALID_OBJECT = 1005; +const int SDL_ERROR_INVALID_PARAMETER = 1006; + + +///////////////////////////////////// +// Implementation +///////////////////////////////////// + +int array_create(object store, string name) +{ + // error checking + if(!GetIsObjectValid(store)) + return SDL_ERROR_NOT_VALID_OBJECT; + else if(array_exists(store, name)) + return SDL_ERROR_ALREADY_EXISTS; + else + { + // Initialize the size (always one greater than the actual size) + SetLocalInt(store,name,1); + return SDL_SUCCESS; + } +} + +void array_delete_loop(object store, string name, int nMin, int nMax) +{ + int i = nMin; + while(i < nMin + 250 && i < nMax) + { + DeleteLocalString(store, name+"_"+IntToString(i)); + + // just in case, delete possible object names + DeleteLocalObject(store, name+"_"+IntToString(i)+"_OBJECT"); + i++; + } + // delay continuation to avoid TMI + if(i < nMax) + DelayCommand(0.0, array_delete_loop(store, name, i, nMax)); +} + +int array_delete(object store, string name) +{ + // error checking + int size=GetLocalInt(store,name); + if (size==0) + return SDL_ERROR_DOES_NOT_EXIST; + + array_delete_loop(store, name, 0, size+5); + + DeleteLocalInt(store,name); + + return SDL_SUCCESS; +} + +int array_set_string(object store, string name, int i, string entry) +{ + int size = GetLocalInt(store,name); + if(size == 0) + return SDL_ERROR_DOES_NOT_EXIST; + if(i < 0) + return SDL_ERROR_OUT_OF_BOUNDS; + + SetLocalString(store,name+"_"+IntToString(i),entry); + + // save size if we've enlarged it + if(i+2>size) + SetLocalInt(store,name,i+2); + + return SDL_SUCCESS; +} + +int array_set_int(object store, string name, int i, int entry) +{ + return array_set_string(store,name,i,IntToString(entry)); +} + +int array_set_float(object store, string name, int i, float entry) +{ + return array_set_string(store,name,i,FloatToString(entry)); +} + +int array_set_object(object store, string name, int i, object entry) +{ + int results = array_set_string(store, name, i, "OBJECT"); + if (results == SDL_SUCCESS) + SetLocalObject(store, name + "_" + IntToString(i) + "_OBJECT", entry); + + return results; +} + +string array_get_string(object store, string name, int i) +{ + // error checking + int size=GetLocalInt(store,name); + if (size==0 || i>size || i < 0) + return ""; + + return GetLocalString(store,name+"_"+IntToString(i)); +} + +int array_get_int(object store, string name, int i) +{ + return StringToInt(array_get_string(store,name,i)); +} + +float array_get_float(object store, string name, int i) +{ + return StringToFloat(array_get_string(store,name,i)); +} + +object array_get_object(object store, string name, int i) +{ + if(array_get_string(store, name, i) == "OBJECT") + return GetLocalObject(store,name+"_"+IntToString(i)+"_OBJECT"); + else + return OBJECT_INVALID; +} + +int array_shrink(object store, string name, int size_new) +{ + // Get the current size value + int size = GetLocalInt(store, name); + // Error check - non-existent array + if(size == 0) + return SDL_ERROR_DOES_NOT_EXIST; + // If the new number of elements is equal to or greater than the current number of elements, autosuccess + if((size - 1) <= size_new) + return SDL_SUCCESS; + + // Delete entries that are outside the new array bounds + int i; + for(i = size_new; i < size; i++) + { + DeleteLocalString(store, name+"_"+IntToString(i)); + + // just in case, delete possible object names + DeleteLocalObject(store, name+"_"+IntToString(i)+"_OBJECT"); + } + + // Store the new size, with the +1 existence marker + SetLocalInt(store, name, size_new + 1); + + return SDL_SUCCESS; +} + +int array_get_size(object store, string name) +{ + return GetLocalInt(store, name) - 1; +} + +int array_exists(object store, string name) +{ + // If the size and presence indicator local is non-zero, the array exists. Normalize it's value to TRUE / FALSE and return + return GetLocalInt(store, name) != 0; +} + +/* +int array_2d_create(object store, string name) +{ + // error checking + if(!GetIsObjectValid(store)) + return SDL_ERROR_NOT_VALID_OBJECT; + else if(GetLocalInt(store,name)) + return SDL_ERROR_ALREADY_EXISTS; + else + { + // Initialize the size (always one greater than the actual size) + SetLocalInt(store,name+"_A",1); + SetLocalInt(store,name+"_B",1); + return SDL_SUCCESS; + } +} + + +int array_2d_delete(object store, string name) +{ + // error checking + int sizeA=GetLocalInt(store,name+"_A"); + if (sizeA==0) + return SDL_ERROR_DOES_NOT_EXIST; + int sizeB=GetLocalInt(store,name+"_B"); + if (sizeB==0) + return SDL_ERROR_DOES_NOT_EXIST; + + int i; + int j; + for (i=0; isizeA) + SetLocalInt(store,name+"_A",i+2); + if (j+2>sizeB) + SetLocalInt(store,name+"_B",j+2); + + return SDL_SUCCESS; +} + + +int array_2d_set_int(object store, string name, int i, int j, int entry) +{ + return array_2d_set_string(store,name,i,j,IntToString(entry)); +} + +int array_2d_set_float(object store, string name, int i, int j, float entry) +{ + return array_2d_set_string(store,name,i,j,FloatToString(entry)); +} + +int array_2d_set_object(object store, string name, int i, int j, object entry) +{ + // object is a little more complicated. + // we want to create an object as a local variable too + if (!GetIsObjectValid(entry)) + return SDL_ERROR_NOT_VALID_OBJECT; + + int results=array_2d_set_string(store,name,i,j,"OBJECT"); + if (results==SDL_SUCCESS) + SetLocalObject(store,name+"_"+IntToString(i)+"_"+IntToString(j)+"_OBJECT",entry); + + return results; +} + + +string array_2d_get_string(object store, string name, int i, int j) +{ + int sizeA=GetLocalInt(store,name+"_A"); + if (sizeA==0 || i>sizeA) + return ""; + int sizeB=GetLocalInt(store,name+"_B"); + if (sizeB==0 || j>sizeB) + return ""; + + return GetLocalString(store,name+"_"+IntToString(i)+"_"+IntToString(j)); +} + +int array_2d_get_int(object store, string name, int i, int j) +{ + return StringToInt(array_2d_get_string(store,name,i,j)); +} + +float array_2d_get_float(object store, string name, int i, int j) +{ + return StringToFloat(array_2d_get_string(store,name,i,j)); +} + +object array_2d_get_object(object store, string name, int i, int j) +{ + return GetLocalObject(store,name+"_"+IntToString(i)+"_"+IntToString(j)+"_OBJECT"); +} + + +int array_2d_shrink(object store, string name, int size_new, int axis) +{ + // error checking + int sizeA=GetLocalInt(store,name+"_A"); + if (sizeA==0) + return SDL_ERROR_DOES_NOT_EXIST; + int sizeB=GetLocalInt(store,name+"_B"); + if (sizeB==0) + return SDL_ERROR_DOES_NOT_EXIST; + + if (axis == 1 && + (sizeA==size_new || sizeA= 12) + { + eDR = EffectDamageReduction(10, DAMAGE_POWER_PLUS_THREE); + nResist = 20; + } + else if (12 > nHD && nHD >= 8) + { + eDR = EffectDamageReduction(5, DAMAGE_POWER_PLUS_TWO); + nResist = 15; + } + else if (8 > nHD && nHD >= 4) + { + eDR = EffectDamageReduction(5, DAMAGE_POWER_PLUS_ONE); + nResist = 10; + } + else if (4 > nHD) + { + nResist = 5; + } + + effect eFire = EffectDamageResistance(DAMAGE_TYPE_FIRE, nResist); + effect eCold = EffectDamageResistance(DAMAGE_TYPE_COLD, nResist); + effect eVis = EffectUltravision(); + effect eLink = EffectLinkEffects(eDR, eFire); + eLink = EffectLinkEffects(eLink, eCold); + eLink = EffectLinkEffects(eLink, eVis); + eLink = SupernaturalEffect(eLink); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget); + + itemproperty ipIP = PRCItemPropertyBonusFeat(FEAT_TEMPLATE_FIENDISH_SMITE_GOOD); + IPSafeAddItemProperty(oCompSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + + if(GetAlignmentGoodEvil(oTarget) != ALIGNMENT_EVIL) + AdjustAlignment(oTarget, ALIGNMENT_EVIL, 80, FALSE); + + SetSubRace(oTarget, "Undead (Extraplanar)"); + + SetLocalInt(oTarget, "FiendishTemplate", 1); + +} + + +void ApplyExaltedCompanion(object oCompanion, object oCompSkin) +{ + int nHD = GetHitDice(oCompanion); + effect eDR; + int nResist; + + if (nHD >= 12) + { + eDR = EffectDamageReduction(10, DAMAGE_POWER_PLUS_THREE); + nResist = 20; + } + else if (12 > nHD && nHD >= 8) + { + eDR = EffectDamageReduction(5, DAMAGE_POWER_PLUS_TWO); + nResist = 15; + } + else if (8 > nHD && nHD >= 4) + { + eDR = EffectDamageReduction(5, DAMAGE_POWER_PLUS_ONE); + nResist = 10; + } + else if (4 > nHD) + { + nResist = 5; + } + + effect eAcid = EffectDamageResistance(DAMAGE_TYPE_ACID, nResist); + effect eCold = EffectDamageResistance(DAMAGE_TYPE_COLD, nResist); + effect eElec = EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL, nResist); + effect eVis = EffectUltravision(); + effect eLink = EffectLinkEffects(eDR, eAcid); + eLink = EffectLinkEffects(eLink, eCold); + eLink = EffectLinkEffects(eLink, eElec); + eLink = EffectLinkEffects(eLink, eVis); + eLink = SupernaturalEffect(eLink); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oCompanion); + + itemproperty ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_CELESTIAL_SMITE_EVIL); + IPSafeAddItemProperty(oCompSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + + if(GetAlignmentGoodEvil(oCompanion) != ALIGNMENT_GOOD) + AdjustAlignment(oCompanion, ALIGNMENT_GOOD, 80, FALSE); + + SetLocalInt(oCompanion, "CelestialTemplate", 1); +} + +void ApplyPseudonatural(object oFamiliar, object oFamSkin) +{ + if(GetLocalInt(oFamiliar, "PseudonaturalTemplate")) + return; + + int nHD = GetHitDice(oFamiliar); + int nResist; + effect eDR; + if (nHD >= 12) + { + eDR = EffectDamageReduction(10, DAMAGE_POWER_PLUS_THREE); + nResist = 20; + } + else if (12 > nHD && nHD >= 8) + { + eDR = EffectDamageReduction(5, DAMAGE_POWER_PLUS_TWO); + nResist = 15; + } + else if (8 > nHD && nHD >= 4) + { + eDR = EffectDamageReduction(5, DAMAGE_POWER_PLUS_ONE); + nResist = 10; + } + else if (4 > nHD) + { + nResist = 5; + } + + effect eAcid = EffectDamageResistance(DAMAGE_TYPE_ACID, nResist); + effect eElec = EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL, nResist); + effect eAC = EffectACIncrease(1,AC_NATURAL_BONUS); + effect eLink = EffectLinkEffects(eDR, eAcid); + eLink = EffectLinkEffects(eLink, eElec); + eLink = EffectLinkEffects(eLink, eAC); + eLink = SupernaturalEffect(eLink); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oFamiliar); + +// itemproperty ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_PSEUDONATURAL_TRUESTRIKE); +// IPSafeAddItemProperty(oFamSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + + SetLocalInt(oFamiliar, "PseudonaturalTemplate", 1); +} + +void ApplyIllmaster(object oCompanion, object oCompSkin) +{ + //Give the companion permanent Str +4, Con +2, Wis -2, and Cha -2 + if(GetPRCSwitch(PRC_NWNX_FUNCS)) + { + PRC_Funcs_ModAbilityScore(oCompanion, ABILITY_STRENGTH, 4); + PRC_Funcs_ModAbilityScore(oCompanion, ABILITY_CONSTITUTION, 2); + PRC_Funcs_ModAbilityScore(oCompanion, ABILITY_WISDOM, -2); + PRC_Funcs_ModAbilityScore(oCompanion, ABILITY_CHARISMA, -2); + } + else + { + string sFlag = "Illmaster"; + SetCompositeBonus(oCompSkin, sFlag, 4, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_STR); + SetCompositeBonus(oCompSkin, sFlag, 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CON); + SetCompositeBonus(oCompSkin, sFlag, 2, ITEM_PROPERTY_DECREASED_ABILITY_SCORE, IP_CONST_ABILITY_WIS); + SetCompositeBonus(oCompSkin, sFlag, 2, ITEM_PROPERTY_DECREASED_ABILITY_SCORE, IP_CONST_ABILITY_CHA); + } + + //Set PLANT immunities and add low light vision + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_CHARM_PERSON), oCompSkin); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DOMINATE_PERSON), oCompSkin); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HOLD_PERSON), oCompSkin); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MASS_CHARM), oCompSkin); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_MINDSPELLS), oCompSkin); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_POISON), oCompSkin); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_PARALYSIS), oCompSkin); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS), oCompSkin); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_DISEASE), oCompSkin); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB), oCompSkin); + AddItemProperty(DURATION_TYPE_PERMANENT, PRCItemPropertyBonusFeat(FEAT_LOWLIGHTVISION), oCompSkin); + + //Compute the DC for this companion's blight touch + int iHD = GetHitDice(oCompanion); + int iCons = GetAbilityModifier(ABILITY_CONSTITUTION, oCompanion); + int iDC = 10 + (iHD / 2) + iCons; + //Create the onhit item property for causing the blight touch disease + itemproperty ipBlightTouch = ItemPropertyOnHitProps(IP_CONST_ONHIT_DISEASE, IPOnHitSaveDC(iDC), DISEASE_TALONAS_BLIGHT); + //Get the companion's creature weapons + object oBite = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oCompanion); + object oLClaw = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oCompanion); + object oRClaw = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oCompanion); + //Apply blight touch to each weapon + if (GetIsObjectValid(oBite)) + IPSafeAddItemProperty(oBite, ipBlightTouch); + if (GetIsObjectValid(oLClaw)) + IPSafeAddItemProperty(oLClaw, ipBlightTouch); + if (GetIsObjectValid(oRClaw)) + IPSafeAddItemProperty(oRClaw, ipBlightTouch); + + //Adjust alignment to Neutral Evil + if(GetAlignmentLawChaos(oCompanion) != ALIGNMENT_NEUTRAL) + AdjustAlignment(oCompanion, ALIGNMENT_NEUTRAL, 50, FALSE); + if (GetAlignmentGoodEvil(oCompanion) != ALIGNMENT_EVIL) + AdjustAlignment(oCompanion, ALIGNMENT_EVIL, 80, FALSE); +} + +void WinterWolfProperties(object oCompanion, int nLevel) +{ + int iStr = nLevel >= 30 ? (nLevel-30)/2 : (nLevel-4)/2; + int iDex = nLevel >= 30 ? (nLevel-31)/2 : (nLevel-5)/2; + + object oCreR = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oCompanion); + + if(GetPRCSwitch(PRC_NWNX_FUNCS)) + { + if(iStr > 0) + PRC_Funcs_ModAbilityScore(oCompanion, ABILITY_STRENGTH, iStr); + if(iDex > 0) + PRC_Funcs_ModAbilityScore(oCompanion, ABILITY_DEXTERITY, iStr); + } + else + { + if(iStr > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR, iStr), oCreR); + if(iDex > 0) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyAbilityBonus(IP_CONST_ABILITY_DEX, iDex), oCreR); + } + + int nBonusDmg; + + if(nLevel > 24) + nBonusDmg = IP_CONST_DAMAGEBONUS_1d12; + else if(nLevel > 16) + nBonusDmg = IP_CONST_DAMAGEBONUS_1d10; + else if(nLevel > 7) + nBonusDmg = IP_CONST_DAMAGEBONUS_1d8; + else + nBonusDmg = IP_CONST_DAMAGEBONUS_1d6; + + AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD, nBonusDmg), oCreR); + //winter wolf properties + AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyDamageVulnerability(IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGEVULNERABILITY_50_PERCENT), oCreR); + AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_COLD, IP_CONST_DAMAGEIMMUNITY_100_PERCENT), oCreR); + + int iMax, i; + int coneAbi = nLevel / 5; + switch(coneAbi) + { + case 1 : iMax = 7; break; + case 2 : iMax = 6; break; + case 3 : iMax = 5; break; + case 4 : iMax = 4; break; + case 5 : iMax = 3; break; + case 6 : iMax = 2; break; + case 7 : iMax = 1; break; + } + + if(iMax > 0) + { + for(i = 1; i <= iMax; i++) + DecrementRemainingSpellUses(oCompanion, 230); + } +} + +void ApplyPnPFamiliarProperties(object oPC, object oFam) +{ + int bFuncs = GetPRCSwitch(PRC_NWNX_FUNCS); + effect eBonus; + + //get familiar level + int nFamLevel = GetLevelByClass(CLASS_TYPE_WIZARD, oPC) + + GetLevelByClass(CLASS_TYPE_SORCERER, oPC) + + GetLevelByClass(CLASS_TYPE_WITCH, oPC) + + GetLevelByClass(CLASS_TYPE_ALIENIST, oPC) + + GetLevelByClass(CLASS_TYPE_HEXBLADE, oPC) + + GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oPC); + + if (GetHasFeat(FEAT_SHADOW_FAMILIAR, oPC)) nFamLevel = GetLevelByTypeArcane(oPC) + GetShadowcasterLevel(oPC); // For the purpose of determining familiar abilities that depend on your arcane caster level, + // your levels in all classes that allow you to cast mysteries or arcane spells stack + + //scaling bonuses + int nAdjustLevel = nFamLevel - GetHitDice(oFam); + int n; + for(n = 1; nAdjustLevel >= n; n++) + LevelUpHenchman(oFam, CLASS_TYPE_INVALID, TRUE); + + int nACBonus = nFamLevel / 2; + int nIntBonus = nFamLevel / 2; + int nSRBonus = nFamLevel > 11 ? nFamLevel + 5 : 0; + + //saving throws + int nSaveRefBonus = GetReflexSavingThrow(oPC) - GetReflexSavingThrow(oFam); + int nSaveFortBonus = GetFortitudeSavingThrow(oPC) - GetFortitudeSavingThrow(oFam); + int nSaveWillBonus = GetWillSavingThrow(oPC) - GetWillSavingThrow(oFam); + + int nHPBonus; + + if(bFuncs) + { + nHPBonus = GetMaxHitPoints(oPC) / 2; + + int i, nBonus; + for(i = 0; i < GetPRCSwitch(FILE_END_SKILLS); i++) + { + nBonus = GetSkillRank(i, oPC) - GetSkillRank(i, oFam); + if(nBonus > 0) + PRC_Funcs_ModSkill(oFam, i, nBonus); + } + + PRC_Funcs_SetBaseNaturalAC(oFam, PRC_Funcs_GetBaseNaturalAC(oFam) + nACBonus); + PRC_Funcs_ModAbilityScore(oFam, ABILITY_INTELLIGENCE, nIntBonus); + PRC_Funcs_ModSavingThrowBonus(oFam, SAVING_THROW_REFLEX, nSaveRefBonus); + PRC_Funcs_ModSavingThrowBonus(oFam, SAVING_THROW_FORT, nSaveFortBonus); + PRC_Funcs_ModSavingThrowBonus(oFam, SAVING_THROW_WILL, nSaveWillBonus); + PRC_Funcs_SetMaxHitPoints(oFam, nHPBonus); + PRC_Funcs_SetCurrentHitPoints(oFam, nHPBonus); + } + else + { + //temporary HP for the moment, have to think of a better idea later + nHPBonus = (GetMaxHitPoints(oPC) / 2) - GetMaxHitPoints(oFam); + + int i, nBonus; + for(i = 0; i < GetPRCSwitch(FILE_END_SKILLS); i++) + { + nBonus = GetSkillRank(i, oPC) - GetSkillRank(i, oFam); + eBonus = EffectLinkEffects(eBonus, EffectSkillIncrease(i, nBonus)); + } + + eBonus = EffectLinkEffects(eBonus, EffectACIncrease(nACBonus, AC_NATURAL_BONUS)); + eBonus = EffectLinkEffects(eBonus, EffectAbilityIncrease(ABILITY_INTELLIGENCE, nIntBonus)); + eBonus = EffectLinkEffects(eBonus, EffectSavingThrowIncrease(SAVING_THROW_REFLEX, nSaveRefBonus)); + eBonus = EffectLinkEffects(eBonus, EffectSavingThrowIncrease(SAVING_THROW_FORT, nSaveFortBonus)); + eBonus = EffectLinkEffects(eBonus, EffectSavingThrowIncrease(SAVING_THROW_WILL, nSaveWillBonus)); + eBonus = EffectLinkEffects(eBonus, EffectTemporaryHitpoints(nHPBonus)); + } + + int nABBonus = GetBaseAttackBonus(oPC) - GetBaseAttackBonus(oFam); + int nAttacks = (GetBaseAttackBonus(oPC)/5)+1; + if(nAttacks > 5) + nAttacks = 5; + SetBaseAttackBonus(nAttacks, oFam); + + //effect doing + if(nSRBonus > 0) eBonus = EffectLinkEffects(eBonus, EffectSpellResistanceIncrease(nSRBonus)); + eBonus = EffectLinkEffects(eBonus, EffectAttackIncrease(nABBonus)); + //skills were linked earlier + eBonus = SupernaturalEffect(eBonus); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonus, oFam); +} + +void CheckIsValidFamiliar(object oMaster, effect eBonus) +{ + object oFam = GetAssociateNPC(ASSOCIATE_TYPE_FAMILIAR); + object oFamToken = GetItemPossessedBy(oMaster, "prc_pnp_familiar"); + + if(GetIsObjectValid(oFam)) + { + if(!GetIsDead(oFam)) + { + DelayCommand(30.0, CheckIsValidFamiliar(oMaster, eBonus)); + return; + } + } + else + { + if(GetIsObjectValid(oFamToken)) + { + DelayCommand(30.0, CheckIsValidFamiliar(oMaster, eBonus)); + return; + } + } + + RemoveEffect(oMaster, eBonus); +} + +effect GetMasterBonus(int nFamiliarType) +{ + effect eBonus; + string sFile = "prc_familiar"; + string sTemp = Get2DACache(sFile, "BONUS", nFamiliarType); + int nParam1 = StringToInt(Get2DACache(sFile, "PARAM1", nFamiliarType)); + int nParam2 = StringToInt(Get2DACache(sFile, "PARAM2", nFamiliarType)); + + if(sTemp == "sk") + eBonus = EffectSkillIncrease(nParam1, nParam2); + else if(sTemp == "sv") + eBonus = EffectSavingThrowIncrease(nParam1, nParam2); + else if(sTemp == "hp") + eBonus = EffectTemporaryHitpoints(nParam1); + + return eBonus; +} + +int GetCompanionBaseDamage(int nLevel, int bBite) +{ + int nBite, nClaw; + if(nLevel > 35) + { + nBite = IP_CONST_MONSTERDAMAGE_2d10; + nClaw = IP_CONST_MONSTERDAMAGE_1d12; + } + else if(nLevel > 26) + { + nBite = IP_CONST_MONSTERDAMAGE_2d8; + nClaw = IP_CONST_MONSTERDAMAGE_1d10; + } + else if(nLevel > 18) + { + nBite = IP_CONST_MONSTERDAMAGE_2d6; + nClaw = IP_CONST_MONSTERDAMAGE_1d8; + } + else if(nLevel > 11) + { + nBite = IP_CONST_MONSTERDAMAGE_1d10; + nClaw = IP_CONST_MONSTERDAMAGE_1d6; + } + else if(nLevel > 5) + { + nBite = IP_CONST_MONSTERDAMAGE_1d8; + nClaw = IP_CONST_MONSTERDAMAGE_1d4; + } + else + { + nBite = IP_CONST_MONSTERDAMAGE_1d6; + nClaw = IP_CONST_MONSTERDAMAGE_1d3; + } + + if(bBite) + return nBite; + + return nClaw; +} + +void SetNaturalWeaponDamage(object oCompanion, int nLvlMod = 0) +{ + int nLevel = GetHitDice(oCompanion); + nLevel += nLvlMod; + int Enh = (nLevel - 15) / 5; + int nDamage; + + //Get the companion's creature weapons + object oBite = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oCompanion); + object oLClaw = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oCompanion); + object oRClaw = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oCompanion); + + //Apply properties to each weapon + if(GetIsObjectValid(oBite)) + { + CleanProperties(oBite); + nDamage = GetCompanionBaseDamage(nLevel, TRUE); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyMonsterDamage(nDamage), oBite); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyAttackBonus(Enh), oBite); + } + if(GetIsObjectValid(oLClaw)) + { + CleanProperties(oLClaw); + nDamage = GetCompanionBaseDamage(nLevel, FALSE); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyMonsterDamage(nDamage), oLClaw); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyAttackBonus(Enh), oLClaw); + } + if(GetIsObjectValid(oRClaw)) + { + CleanProperties(oRClaw); + nDamage = GetCompanionBaseDamage(nLevel, FALSE); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyMonsterDamage(nDamage), oRClaw); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyAttackBonus(Enh), oRClaw); + } +} + +void UnsummonCompanions(object oPC) +{ + int i; + object oAsso; + for(i = 1; i <= 5; i++) + { + oAsso = GetAssociateNPC(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC, i); + if(GetIsObjectValid(oAsso)) + DestroyAssociate(oAsso); + } + for(i = 1; i <= 5; i++) + { + oAsso = GetAssociateNPC(ASSOCIATE_TYPE_FAMILIAR, oPC, i); + if(GetIsObjectValid(oAsso)) + DestroyAssociate(oAsso); + } +} + +//:: void main(){} \ No newline at end of file diff --git a/src/include/prc_inc_breath.nss b/src/include/prc_inc_breath.nss new file mode 100644 index 0000000..0d439f9 --- /dev/null +++ b/src/include/prc_inc_breath.nss @@ -0,0 +1,988 @@ +//:://///////////////////////////////////////////// +//:: Breath Weapon Include +//:: prc_inc_breath +//:://///////////////////////////////////////////// +/** @file + Centralizes handling for most breath weapons for + implementing Metabreath and the like. + + @author Fox + @date Created - 2008.1.19 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Structures */ +////////////////////////////////////////////////// + +/** + * A structure that contains common data used during power manifestation. + */ +struct breath{ + /* Generic stuff */ + /// The creature breathing + object oDragon; + + /* Basic info */ + /// The shape of the breath + int bLine; + /// The size of the breath in feet + float fRange; + /// The element of the breath + int nDamageType; + /// Type of dice + int nDiceType; + /// Number of dice + int nDiceNumber; + /// The stat relavant for DC calculating + int nDCStat; + /// Any other DC mods, like class levels for DragDis + int nOtherDCMod; + /// Save type - needed in case of Fort Save + int nSaveUsed; + /// Rounds until next use + int nRoundsUntilRecharge; + + /* Metabreath */ + /// Number of rounds Clinging Breaths last + int nClinging; + /// Number of rounds Lingering Breaths last + int nLingering; + /// Whether Enlarge Breath was used + int bEnlarge; + /// How much the DC is increased by Heighten Breath - max of Con + int nHeighten; + /// Whether Maximize Breath was used + int bMaximize; + /// Whether Spreading Breath was used + int bSpread; + /// Whether Tempest Breath was used + int bTempest; + + /* Breath Channeling */ + /// Whether Entangling Exhalation was used + int bEntangling; + /// Whether Exhaled Barrier was used + int bBarrier; + /// Whether Exhaled Immunity was used + int bExhaleImmune; + + + /* Special Cases */ + /// Special case referance number - used for things like Pyroclastic + int nOverrideSpecial; + +}; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Creates the breath struct, taking metabreath and breath channeling into account. + * + * @param oDragon The creature breathing the breath weapon + * @param bLine True if breath is a line breath, false if a cone breath + * @param fRange The range of the breath weapon in feet. + * @param nDamageType The element of the breath weapon, if it has one. + * @param nDiceType The type of damage dice for the breath weapon. + * @param nDiceNumber The number of damage dice for the breath weapon. + * @param nDCStat The constant for the stat the breath weapon uses for DC + * calculation. + * @param nOtherDCMod Any other applicable modifications to the DC. + * e.g. Dragon Disciple levels. + * @param nOverrideSpecial Indicates any special case breath weapons, like the Pyroclastic's + * split damage or Shadow's negative level breath. Defaults to 0. + * @param nBaseRecharge The die size of the recharge "lock." Defaults to d4. + * @param nSaveUsed The constant to determine the save used. Defaults to Reflex. + * Diamond Dragon uses Fort saves for cold breath for example. + * + * @return Returns a struct that describes the breath being used, including + * applicable metabreath and breath channeling feats. + */ +struct breath CreateBreath(object oDragon, int bLine, float fRange, int nDamageType, int nDiceType, int nDiceNumber, int nDCStat, int nOtherDCMod, int nOverrideSpecial = 0, int nBaseRecharge = 4, int nSaveUsed = SAVING_THROW_REFLEX); + +/** + * Applies the breath effect on the targeted location. Brought into the include since + * there is so much common code. + * + * @param BreathUsed A struct describing the details of the breath weapon + * @param lTargetArea The targeted location for the breath. + * @param bLinger Determines if this breath was applied by Lingering Breath metabreath. + * Defaults to FALSE. + * @param vSource The source of a Lingering breath. This does not matter except when + * bLinger is set to TRUE. + * + */ +void ApplyBreath(struct breath BreathUsed, location lTargetArea, int bLinger = FALSE, float vSourceX = 0.0, float vSourceY = 0.0, float vSourceZ = 0.0); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "prc_alterations" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +// Exhaled Immunity is different enough to break off on it's own, as it only +// applies to one creature, and nothing else happens. +void ExhaleImmunity(object oDragon, int nDamageType, location lTargetArea) +{ + //since there's no "GetObjectAtLocation," grab a tiny AoE to find the creature + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 1.0, lTargetArea, TRUE, + OBJECT_TYPE_CREATURE, GetPosition(oDragon)); + + //make sure damage type is valid, default to fire for non-energy-damage-based breaths + int nImmuneType = DAMAGE_TYPE_FIRE; + + if (nDamageType == DAMAGE_TYPE_ACID) nImmuneType = DAMAGE_TYPE_ACID; + else if (nDamageType == DAMAGE_TYPE_COLD) nImmuneType = DAMAGE_TYPE_COLD; + else if (nDamageType == DAMAGE_TYPE_SONIC) nImmuneType = DAMAGE_TYPE_SONIC; + else if (nDamageType == DAMAGE_TYPE_ELECTRICAL) nImmuneType = DAMAGE_TYPE_ELECTRICAL; + + if((oTarget == OBJECT_INVALID) || (oTarget == oDragon)) + { + SendMessageToPC(oDragon, "You must target another creature for Exhaled Immunity to work."); + return; + } + + else + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oDragon, GetSpellId(), FALSE)); + //Determine effect delay + float fDelay = GetDistanceBetween(oDragon, oTarget)/20; + float fDuration = RoundsToSeconds(d4()); + + //set effects + effect eImmune = EffectDamageImmunityIncrease(nDamageType, 100); + effect eVis = EffectVisualEffect(VFX_IMP_ELEMENTAL_PROTECTION); + effect eVis2 = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + effect eLink = EffectLinkEffects(eImmune, eVis2); + + //apply effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eImmune, oTarget, fDuration)); + } +} + +//fucntion to check for Adept breath +int IsAdeptBreath() +{ + int nBreath = GetSpellId(); + if(nBreath == BREATH_FIRE_CONE + || nBreath == BREATH_FIRE_LINE + || nBreath == BREATH_FROST_CONE + || nBreath == BREATH_ELECTRIC_LINE + || nBreath == BREATH_SICKENING_CONE + || nBreath == BREATH_ACID_CONE + || nBreath == BREATH_ACID_LINE + || nBreath == BREATH_SLOW_CONE + || nBreath == BREATH_WEAKENING_CONE + || nBreath == BREATH_SLEEP_CONE + || nBreath == BREATH_THUNDER_CONE + || nBreath == BREATH_BAHAMUT_LINE + || nBreath == BREATH_FORCE_LINE + || nBreath == BREATH_PARALYZE_CONE + || nBreath == BREATH_FIVEFOLD_TIAMAT) + return TRUE; + + return FALSE; +} + +int IsBreathProtected(object oDragon, object oTarget) +{ + int nBPIndex = 0; + while(array_get_object(oTarget, "BreathProtected", nBPIndex) != OBJECT_INVALID) + { + if(array_get_object(oTarget, "BreathProtected", nBPIndex) == oDragon) + { + return TRUE; + } + else + nBPIndex++; + } + + return FALSE; +} + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +struct breath CreateBreath(object oDragon, int bLine, float fRange, int nDamageType, int nDiceType, int nDiceNumber, int nDCStat, int nOtherDCMod, int nOverrideSpecial = 0, int nBaseRecharge = 4, int nSaveUsed = SAVING_THROW_REFLEX) +{ + struct breath BreathUsed; + + //gather base data + BreathUsed.oDragon = oDragon; + BreathUsed.bLine = bLine; + BreathUsed.fRange = fRange; + BreathUsed.nDamageType = nDamageType; + BreathUsed.nDiceType = nDiceType; + BreathUsed.nDiceNumber = nDiceNumber; + BreathUsed.nDCStat = nDCStat; + BreathUsed.nOtherDCMod = nOtherDCMod; + int nFinalRecharge; + switch(nBaseRecharge) + { + case 4: + nFinalRecharge = d4(); break; + case 1: + nFinalRecharge = 1; break; + default: + nFinalRecharge = 0; break; + } + BreathUsed.nRoundsUntilRecharge = nFinalRecharge; + BreathUsed.nSaveUsed = nSaveUsed; + BreathUsed.nOverrideSpecial = nOverrideSpecial; + + //Energy Aura bonus checking + switch(nDamageType) + { + case DAMAGE_TYPE_ACID: + if(GetLocalInt(oDragon,"AcidEnergyAura")) + BreathUsed.nOtherDCMod += GetLocalInt(oDragon,"AcidEnergyAura"); + break; + case DAMAGE_TYPE_COLD: + if(GetLocalInt(oDragon,"ColdEnergyAura")) + BreathUsed.nOtherDCMod += GetLocalInt(oDragon,"ColdEnergyAura"); + break; + case DAMAGE_TYPE_ELECTRICAL: + if(GetLocalInt(oDragon,"ElecEnergyAura")) + BreathUsed.nOtherDCMod += GetLocalInt(oDragon,"ElecEnergyAura"); + break; + case DAMAGE_TYPE_FIRE: + if(GetLocalInt(oDragon,"FireEnergyAura")) + BreathUsed.nOtherDCMod += GetLocalInt(oDragon,"FireEnergyAura"); + } + + /* Initialize metabreath/channeling tracking */ + BreathUsed.nClinging = 0; + BreathUsed.nLingering = 0; + BreathUsed.bEnlarge = FALSE; + BreathUsed.nHeighten = 0; + BreathUsed.bMaximize = FALSE; + BreathUsed.bSpread = FALSE; + BreathUsed.bTempest = FALSE; + BreathUsed.bEntangling = FALSE; + BreathUsed.bBarrier = FALSE; + BreathUsed.bExhaleImmune = FALSE; + + /* breath channeling */ + + // Whether Entangling Exhalation was used + if(GetLocalInt(oDragon, "EntangleBreath")) + BreathUsed.bEntangling = TRUE; + // Whether Exhaled Barrier was used + if(GetLocalInt(oDragon, "ExhaleBarrier")) + BreathUsed.bBarrier = TRUE; + // Whether Exhaled Immunity was used + if(GetLocalInt(oDragon, "ExhaleImmunity")) + BreathUsed.bExhaleImmune = TRUE; + + //breath effect checks + + //Cloud only works with 1 other effect applied + //this one handles combination with damage effects and enduring + if(GetLocalInt(oDragon, "AdeptCloudBreath") + && !GetLocalInt(oDragon, "AdeptShapedBreath") + && (GetSpellId() == BREATH_FIRE_CONE + || GetSpellId() == BREATH_FROST_CONE + || GetSpellId() == BREATH_SICKENING_CONE + || GetSpellId() == BREATH_ACID_CONE + || GetSpellId() == BREATH_SLOW_CONE + || GetSpellId() == BREATH_WEAKENING_CONE + || GetSpellId() == BREATH_SLEEP_CONE + || GetSpellId() == BREATH_THUNDER_CONE + || GetSpellId() == BREATH_PARALYZE_CONE)) + { + BreathUsed.bSpread = TRUE; + } + //this one is Cloud + Shaped + if(GetLocalInt(oDragon, "AdeptCloudBreath") + && GetLocalInt(oDragon, "AdeptShapedBreath") + && !GetLocalInt(oDragon, "AdeptEnduringBreath") + && GetSpellId() == BREATH_FIRE_CONE) + { + BreathUsed.bSpread = TRUE; + } + if(GetLocalInt(oDragon, "AdeptEnduringBreath") + && !(GetLocalInt(oDragon, "AdeptCloudBreath") && GetLocalInt(oDragon, "AdeptShapedBreath")) + && (GetSpellId() == BREATH_FIRE_CONE || GetSpellId() == BREATH_FIRE_LINE)) + { + BreathUsed.nLingering = 1; + } + + //breaths without recharge times can't use metabreath + if(BreathUsed.nRoundsUntilRecharge == 0) + return BreathUsed; + + /* metabreath calculation*/ + + //Clinging breath - Main feat increments uses, secondary feat cancels. + if(GetLocalInt(oDragon, "ClingingBreath") > 0) + { + BreathUsed.nClinging = GetLocalInt(oDragon, "ClingingBreath"); + BreathUsed.nRoundsUntilRecharge += BreathUsed.nClinging; + } + //Lingering breath - Main feat increments uses, secondary feat cancels. + if(GetLocalInt(oDragon, "LingeringBreath") > 0) + { + BreathUsed.nLingering = GetLocalInt(oDragon, "LingeringBreath"); + BreathUsed.nRoundsUntilRecharge += (BreathUsed.nLingering * 2); + } + //Enlarge breath + if(GetLocalInt(oDragon, "EnlargeBreath")) + { + BreathUsed.bEnlarge = TRUE; + BreathUsed.nRoundsUntilRecharge += 1; + } + //Heighten breath - Feat increments uses, resets if incremented at max. + if(GetLocalInt(oDragon, "HeightenBreath") > 0) + { + BreathUsed.nHeighten = GetLocalInt(oDragon, "HeightenBreath"); + BreathUsed.nRoundsUntilRecharge += BreathUsed.nHeighten; + } + //Maximize breath + if(GetLocalInt(oDragon, "MaximizeBreath")) + { + BreathUsed.bMaximize = TRUE; + BreathUsed.nRoundsUntilRecharge += 3; + } + //Shape breath + if(GetLocalInt(oDragon, "ShapeBreath")) + { + if(bLine) BreathUsed.bLine = FALSE; + else BreathUsed.bLine = TRUE; + BreathUsed.nRoundsUntilRecharge += 1; + } + //Spreading breath + if(GetLocalInt(oDragon, "SpreadingBreath")) + { + BreathUsed.bSpread = TRUE; + BreathUsed.nRoundsUntilRecharge += 2; + } + //Tempest breath + if(GetLocalInt(oDragon, "TempestBreath")) + { + BreathUsed.bTempest = TRUE; + BreathUsed.nRoundsUntilRecharge += 1; + } + //Recover Breath + if(GetHasFeat(FEAT_RECOVER_BREATH, oDragon) + && (BreathUsed.nRoundsUntilRecharge > 1)) + BreathUsed.nRoundsUntilRecharge += -1; + + + // Exhaled Barrier and Immunity don't apply Metabreath feats, so recharge time should be unaffected + if(BreathUsed.bBarrier || BreathUsed.bExhaleImmune) + BreathUsed.nRoundsUntilRecharge = nFinalRecharge; + + return BreathUsed; +} + +void ApplyBreath(struct breath BreathUsed, location lTargetArea, int bLinger = FALSE, float vSourceX = 0.0, float vSourceY = 0.0, float vSourceZ = 0.0) +{ + //if using Exhaled Immunity, jump straight to it and ignore the rest + if(BreathUsed.bExhaleImmune) + { + ExhaleImmunity(BreathUsed.oDragon, BreathUsed.nDamageType, lTargetArea); + return; + } + + //init variables + effect eBreath; + effect eVis; + float fDelay; + int nDamage = 0; + int nAdjustedDamage; + int nSaveDamageType = -1; + int nVisualType = -1; + int nEnergyAura = 0; + int bCanCling; + int nSaveDC; + int nShapedSpotsUsed = GetLocalInt(BreathUsed.oDragon, "AdeptShapedBreath") ? 0 : 4; + int nBreathShape = BreathUsed.bLine ? SHAPE_SPELLCYLINDER : SHAPE_SPELLCONE; + float fRange = FeetToMeters(BreathUsed.fRange); + int nKnockdownDC = 0; + vector vSource = Vector(vSourceX, vSourceY, vSourceZ); + vector vSourceOfBreath = bLinger ? vSource : GetPosition(BreathUsed.oDragon); + + //Saving Throw setup + if (BreathUsed.nDCStat >= 10) + nSaveDC = BreathUsed.nDCStat; + else + nSaveDC = 10 + PRCMax(GetAbilityModifier(BreathUsed.nDCStat), 0) + BreathUsed.nOtherDCMod; + + //Set up variables that depend on damage type + switch (BreathUsed.nDamageType) + { + case DAMAGE_TYPE_ACID: + nSaveDamageType = SAVING_THROW_TYPE_ACID; + nVisualType = VFX_IMP_ACID_S; + nEnergyAura = GetLocalInt(BreathUsed.oDragon, "AcidEnergyAura"); break; + + case DAMAGE_TYPE_COLD: + nSaveDamageType = SAVING_THROW_TYPE_COLD; + nVisualType = VFX_IMP_FROST_S; + nEnergyAura = GetLocalInt(BreathUsed.oDragon, "ColdEnergyAura"); break; + + case DAMAGE_TYPE_ELECTRICAL: + nSaveDamageType = SAVING_THROW_TYPE_ELECTRICITY; + nVisualType = VFX_IMP_LIGHTNING_S; + nEnergyAura = GetLocalInt(BreathUsed.oDragon, "ElecEnergyAura"); break; + + case DAMAGE_TYPE_FIRE: + nSaveDamageType = SAVING_THROW_TYPE_FIRE; + nVisualType = VFX_IMP_FLAME_M; + nEnergyAura = GetLocalInt(BreathUsed.oDragon, "FireEnergyAura"); break; + + case DAMAGE_TYPE_MAGICAL: + nSaveDamageType = SAVING_THROW_TYPE_NONE; + nVisualType = VFX_IMP_KNOCK; break; + + case DAMAGE_TYPE_NEGATIVE: + nSaveDamageType = SAVING_THROW_TYPE_NEGATIVE; + nVisualType = VFX_IMP_NEGATIVE_ENERGY; break; + + case DAMAGE_TYPE_POSITIVE: + nSaveDamageType = SAVING_THROW_TYPE_POSITIVE; + nVisualType = VFX_IMP_HOLY_AID; break; + + case DAMAGE_TYPE_SONIC: + nSaveDamageType = SAVING_THROW_TYPE_SONIC; + nVisualType = VFX_IMP_SILENCE; break; + } + + //apply Energy Draconic Aura bonus + if(nEnergyAura < 0) nEnergyAura = 0; + nSaveDC += nEnergyAura; + + if(BreathUsed.nOverrideSpecial == BREATH_TOPAZ) + nVisualType = VFX_IMP_POISON_L; + + if(BreathUsed.bBarrier) + { + //2d6 fire damage if the breath doesn't do damage + if(BreathUsed.nOverrideSpecial == BREATH_SHADOW + || BreathUsed.nOverrideSpecial == BREATH_SLEEP + || BreathUsed.nOverrideSpecial == BREATH_SLOW + || BreathUsed.nOverrideSpecial == BREATH_PARALYZE + || BreathUsed.nOverrideSpecial == BREATH_WEAKENING) + { + BreathUsed.nDiceType = 6; + BreathUsed.nDiceNumber = 2; + BreathUsed.nDamageType = DAMAGE_TYPE_FIRE; + } + + //fire damage if damage isn't energy damage + if(BreathUsed.nDamageType == DAMAGE_TYPE_MAGICAL || BreathUsed.nDamageType == DAMAGE_TYPE_BLUDGEONING) + BreathUsed.nDamageType = DAMAGE_TYPE_FIRE; + + //get the breath parameters and pass to the wall's scripts + SetLocalInt(BreathUsed.oDragon, "BarrierDiceType", BreathUsed.nDiceType); + SetLocalInt(BreathUsed.oDragon, "BarrierDiceNumber", BreathUsed.nDiceNumber); + SetLocalInt(BreathUsed.oDragon, "BarrierDamageType", BreathUsed.nDamageType); + + //create the wall + effect eAOE = EffectAreaOfEffect(AOE_PER_WALLBREATH); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eAOE, lTargetArea, RoundsToSeconds(d4())); + + //this overrides all other breath effects, so exit + return; + } + + + //roll damage + switch(BreathUsed.nDiceType) + { + case 4: + nDamage = d4(BreathUsed.nDiceNumber); break; + case 6: + nDamage = d6(BreathUsed.nDiceNumber); break; + case 8: + nDamage = d8(BreathUsed.nDiceNumber); break; + case 10: + nDamage = d10(BreathUsed.nDiceNumber); break; + } + if(DEBUG) DoDebug("prc_inc_breath: Rolling damage: " + IntToString(BreathUsed.nDiceNumber) + + "d" + IntToString(BreathUsed.nDiceType) + "= " + IntToString(nDamage)); + + //Shadow breath does 1 neg level instead of damage + if(BreathUsed.nOverrideSpecial == BREATH_SHADOW) + nDamage = 1; + + //adjust for metabreaths + if(BreathUsed.bEnlarge) + fRange = fRange * 1.5; + if(BreathUsed.nHeighten > 0) + nSaveDC += BreathUsed.nHeighten; + if(BreathUsed.bMaximize) + nDamage = BreathUsed.nDiceType * BreathUsed.nDiceNumber; + if(BreathUsed.bSpread) + { + fRange = PRCGetCreatureSize(BreathUsed.oDragon) * 5.0; + if(fRange < 1.0) fRange = 5.0; + fRange = FeetToMeters(fRange); + nBreathShape = SHAPE_SPHERE; + lTargetArea = GetLocation(BreathUsed.oDragon); + eVis = EffectVisualEffect(VFX_FNF_DRAGBREATHGROUND); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lTargetArea); + } + + //Lingering Breath's effects are 1/2 of normal when lingering + if(bLinger) + { + nDamage /= 2; + BreathUsed.nDiceNumber /= 2; + } + + //DCs for Tempest Breath + switch(PRCGetCreatureSize(BreathUsed.oDragon)) + { + case CREATURE_SIZE_LARGE: + nKnockdownDC = 15; break; + + case CREATURE_SIZE_HUGE: + nKnockdownDC = 18; break; + + case CREATURE_SIZE_GARGANTUAN: + nKnockdownDC = 20; break; + + case CREATURE_SIZE_COLOSSAL: + nKnockdownDC = 30; break; + + } + + //adjust for breath channeling + if(BreathUsed.bEntangling) + nDamage = nDamage / 2; + + /* Begin application */ + int nObjectFilter = OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE; + //Adept's Breath of Bahamut does not affect objects + if(GetSpellId() == BREATH_BAHAMUT_LINE) nObjectFilter = OBJECT_TYPE_CREATURE; + + //Get first target in spell area + object oTarget = GetFirstObjectInShape(nBreathShape, fRange, lTargetArea, TRUE, nObjectFilter, vSourceOfBreath); + if(DEBUG) DoDebug("prc_inc_breath: Target Name: " + GetName(oTarget)); + while(GetIsObjectValid(oTarget)) + { + if(DEBUG) DoDebug("prc_inc_breath: Valid Target: " + GetName(oTarget)); + if(oTarget != BreathUsed.oDragon && !IsBreathProtected(BreathUsed.oDragon, oTarget) && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, BreathUsed.oDragon)) + { + if(DEBUG) DoDebug("prc_inc_breath: Not Self, Not Protected"); + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + //Determine effect delay + fDelay = GetDistanceBetween(BreathUsed.oDragon, oTarget)/20; + + //check for Shaped Breath effect + if(IsAdeptBreath() && (nShapedSpotsUsed < 4) && !GetIsReactionTypeHostile(oTarget) && GetLocalInt(BreathUsed.oDragon, "AdeptShapedBreath")) + { + if(DEBUG) DoDebug("prc_inc_breath: Entering Shaped Breath. Slots used: " + IntToString(nShapedSpotsUsed)); + nShapedSpotsUsed++; + } + + //Adept's Sickening Breath breath effect + else if(BreathUsed.nOverrideSpecial == BREATH_SICKENING) + { + if(DEBUG) DoDebug("prc_inc_breath: sickening breath attack"); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(BreathUsed.oDragon, GetSpellId())); + + //2 rounds on a failed save + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nSaveDC, SAVING_THROW_TYPE_NONE)) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_POISON_L), oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSickened(), oTarget, 12.0)); + } + //1 round otherwise + else + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_POISON_L), oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSickened(), oTarget, 6.0)); + } + } + + //Brass alternate breath - sleep + else if(BreathUsed.nOverrideSpecial == BREATH_SLEEP) + { + if(DEBUG) DoDebug("prc_inc_breath: sleep breath attack"); + //prepare effects + effect eBreath = EffectSleep(); + effect eVis = EffectVisualEffect(VFX_IMP_SLEEP); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eLink = EffectLinkEffects(eBreath, eDur); + + //get duration + int nSleepDuration = BreathUsed.nDiceNumber; + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(BreathUsed.oDragon, GetSpellId())); + + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nSaveDC, SAVING_THROW_TYPE_NONE)) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nSleepDuration))); + SetLocalInt(oTarget, "AffectedByBreath", TRUE); + } + } + + //Copper alternate breath - slow + else if(BreathUsed.nOverrideSpecial == BREATH_SLOW) + { + if(DEBUG) DoDebug("prc_inc_breath: slowing breath attack"); + //prepare effects + effect eBreath = EffectSlow(); + effect eVis = EffectVisualEffect(VFX_IMP_SLOW); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eLink = EffectLinkEffects(eBreath, eDur); + + //get duration + int nSlowDuration = BreathUsed.nDiceNumber; + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(BreathUsed.oDragon, GetSpellId())); + + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nSaveDC, SAVING_THROW_TYPE_NONE)) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nSlowDuration))); + SetLocalInt(oTarget, "AffectedByBreath", TRUE); + } + //Adept breath effect still lasts for one round if save is made + else if(IsAdeptBreath()) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(1))); + SetLocalInt(oTarget, "AffectedByBreath", TRUE); + } + } + + //Gold alternate breath - drains strength + else if(BreathUsed.nOverrideSpecial == BREATH_WEAKENING) + { + if(DEBUG) DoDebug("prc_inc_breath: weakening breath attack"); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(BreathUsed.oDragon, GetSpellId())); + + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nSaveDC, SAVING_THROW_TYPE_NONE)) + { + //Set Damage and VFX - Bioware Gold used VFX_IMP_REDUCE_ABILITY_SCORE originally + eVis = EffectVisualEffect(VFX_IMP_POISON_L); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + //adept breath penalty only last 4 rounds on failure, gold breath has no duration + if(IsAdeptBreath()) + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityDecrease(ABILITY_STRENGTH, BreathUsed.nDiceNumber), oTarget, 24.0)); + else + DelayCommand(fDelay, ApplyAbilityDamage(oTarget, ABILITY_STRENGTH, BreathUsed.nDiceNumber, DURATION_TYPE_PERMANENT, TRUE)); + SetLocalInt(oTarget, "AffectedByBreath", TRUE); + } + //Adept breath still happens for 2 rounds on successful save + else if(IsAdeptBreath()) + { + //Set Damage and VFX - Bioware Gold used VFX_IMP_REDUCE_ABILITY_SCORE originally + eVis = EffectVisualEffect(VFX_IMP_POISON_L); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityDecrease(ABILITY_STRENGTH, BreathUsed.nDiceNumber), oTarget, 12.0)); + SetLocalInt(oTarget, "AffectedByBreath", TRUE); + } + bCanCling = TRUE; + } + + //Silver alternate breath - paralyze + else if(BreathUsed.nOverrideSpecial == BREATH_PARALYZE) + { + if(DEBUG) DoDebug("prc_inc_breath: paralyzing breath attack"); + //prepare effects + effect eBreath = EffectParalyze(); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + effect eDur2 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD); + effect eParal = EffectVisualEffect(VFX_DUR_PARALYZED); + + effect eLink = EffectLinkEffects(eBreath, eDur); + eLink = EffectLinkEffects(eLink, eDur2); + eLink = EffectLinkEffects(eLink, eParal); + + //get duration + int nParalDuration = BreathUsed.nDiceNumber; + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(BreathUsed.oDragon, GetSpellId())); + + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nSaveDC, SAVING_THROW_TYPE_NONE)) + { + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nParalDuration))); + SetLocalInt(oTarget, "AffectedByBreath", TRUE); + } + } + + //Shadow Dragon breath - drains levels + else if(BreathUsed.nOverrideSpecial == BREATH_SHADOW) + { + if(DEBUG) DoDebug("prc_inc_breath: shadow breath attack"); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(BreathUsed.oDragon, GetSpellId())); + + int nLevelDrain = PRCGetReflexAdjustedDamage(nDamage, oTarget, nSaveDC, SAVING_THROW_TYPE_NEGATIVE); + + if (nLevelDrain > 0) + { + //Set Damage and VFX + eBreath = EffectNegativeLevel(nLevelDrain); + eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eBreath, oTarget)); + SetLocalInt(oTarget, "AffectedByBreath", TRUE); + } + } + + //Swift Wing Breath of Life - Positive to Undead only, heals living creatures + else if(BreathUsed.nOverrideSpecial == BREATH_SWIFT_WING) + { + if(DEBUG) DoDebug("prc_inc_breath: swift wing breath attack"); + if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD || (GetHasFeat(FEAT_TOMB_TAINTED_SOUL, oTarget) && GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(BreathUsed.oDragon, GetSpellId())); + + nAdjustedDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nSaveDC, SAVING_THROW_TYPE_POSITIVE); + + if (nAdjustedDamage > 0) + { + //Set Damage and VFX + eBreath = EffectDamage(nAdjustedDamage, BreathUsed.nDamageType); + eVis = EffectVisualEffect(VFX_IMP_SUNSTRIKE); + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eBreath, oTarget)); + SetLocalInt(oTarget, "AffectedByBreath", TRUE); + bCanCling = TRUE; + } + } + } + + //normal damaging-type breath + else + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(BreathUsed.oDragon, GetSpellId())); + if(DEBUG) DoDebug("prc_inc_breath: normal breath attack"); + + if(BreathUsed.nSaveUsed == SAVING_THROW_FORT) + { + nAdjustedDamage = nDamage; + //make a fort save + if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nSaveDC, nSaveDamageType)) + { + //Mettle is Evasion for Fort saves + if (GetHasMettle(oTarget, SAVING_THROW_FORT)) + nAdjustedDamage = 0; + + nAdjustedDamage /= 2; + } + } + else + nAdjustedDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nSaveDC, nSaveDamageType); + + if (nAdjustedDamage > 0) + { + if(DEBUG) DoDebug("prc_inc_breath: Damage > 0"); + //Set Damage and VFX + if(BreathUsed.nOverrideSpecial == BREATH_PYROCLASTIC) + { + int chSaveth; + int chVisual; + int eleRoll; + + int nNumDice = d2(); + //Sets the random Element factor of the Chaos Dragons Breath Weapon. + //Affects damage, saving throw, and impact visual. + if (nNumDice==1) + { + chSaveth = SAVING_THROW_TYPE_SONIC; + chVisual = VFX_IMP_SILENCE; + } + else if (nNumDice==2) + { + chSaveth = SAVING_THROW_TYPE_FIRE; + chVisual = VFX_IMP_FLAME_M; + } + + if(GetLocalInt(oTarget, "DragonWard")) + nAdjustedDamage -= 40; + + effect eBreath1 = EffectDamage(nAdjustedDamage/2, DAMAGE_TYPE_FIRE); + effect eBreath2 = EffectDamage(nAdjustedDamage/2, DAMAGE_TYPE_SONIC); + eBreath = EffectLinkEffects(eBreath1, eBreath2); + eVis = EffectVisualEffect(chVisual); + } + else + { + if(GetLocalInt(oTarget, "DragonWard")) + nAdjustedDamage -= 20; + eBreath = EffectDamage(nAdjustedDamage, BreathUsed.nDamageType); + eVis = EffectVisualEffect(nVisualType); + } + //Apply the VFX impact and effects + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eBreath, oTarget)); + SetLocalInt(oTarget, "AffectedByBreath", TRUE); + bCanCling = TRUE; + } + } + + //Knockdown check for Tempest Breath + if(BreathUsed.bTempest && (PRCGetCreatureSize(BreathUsed.oDragon) > CREATURE_SIZE_MEDIUM)) + { + if(DEBUG) DoDebug("prc_inc_breath: tempest breath attack"); + if(PRCGetCreatureSize(BreathUsed.oDragon) - PRCGetCreatureSize(oTarget) > 1) + { + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nKnockdownDC, SAVING_THROW_TYPE_NONE)) + { + effect eWindblown = EffectKnockdown(); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eWindblown, oTarget, 6.0)); + } + } + } + + //Breath of Life healing + if(oTarget != BreathUsed.oDragon && BreathUsed.nOverrideSpecial == BREATH_SWIFT_WING && MyPRCGetRacialType(oTarget) != RACIAL_TYPE_UNDEAD && MyPRCGetRacialType(oTarget) != RACIAL_TYPE_CONSTRUCT + && !(GetHasFeat(FEAT_TOMB_TAINTED_SOUL, oTarget) && GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD)) + { + if(DEBUG) DoDebug("prc_inc_breath: breath of life"); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(BreathUsed.oDragon, GetSpellId(), FALSE)); + //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. + //Determine effect delay + fDelay = GetDistanceBetween(BreathUsed.oDragon, oTarget)/20; + int nHeal = BreathUsed.nDiceNumber; + + //Warforged are only healed for half + if(GetIsWarforged(oTarget)) nHeal /= 2; + + eBreath = EffectHeal(nHeal); + effect eHealVis = EffectVisualEffect(VFX_IMP_HEALING_S); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eBreath, oTarget)); + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHealVis, oTarget)); + } + + //Entangling Exhalation + if(GetLocalInt(oTarget, "AffectedByBreath") && BreathUsed.bEntangling) + { + if(DEBUG) DoDebug("prc_inc_breath: entangling breath attack"); + effect eEntangled = EffectEntangle(); + effect eEntangleVis = EffectVisualEffect(VFX_DUR_ENTANGLE); + eEntangled = EffectLinkEffects(eEntangled, eEntangleVis); + int nEntangleRounds = d4(); + //only does damage if the original breath did damage + if(BreathUsed.nDamageType > 0) + { + effect eDamage = EffectDamage(d6(), BreathUsed.nDamageType); + switch(nEntangleRounds) + { + case 4: + DelayCommand(fDelay + RoundsToSeconds(4), ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget)); + case 3: + DelayCommand(fDelay + RoundsToSeconds(3), ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget)); + case 2: + DelayCommand(fDelay + RoundsToSeconds(2), ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget)); + case 1: + DelayCommand(fDelay + RoundsToSeconds(1), ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget)); break; + } + } + + //but always entangles if the breath affects the target + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEntangled, oTarget, RoundsToSeconds(nEntangleRounds))); + } + + DeleteLocalInt(oTarget, "AffectedByBreath"); + + //Clinging Breath check + if(BreathUsed.nClinging > 0 && bCanCling) + { + if(DEBUG) DoDebug("prc_inc_breath: clinging breath attack"); + int nCount; + int AdjustedAbilityDamage = BreathUsed.nDiceNumber; + + for(nCount = 0; nCount < BreathUsed.nClinging; nCount++) + { + float fNewDelay = RoundsToSeconds(nCount + 1); + if(BreathUsed.nOverrideSpecial == BREATH_WEAKENING) + { + AdjustedAbilityDamage /= 2; + DelayCommand(fNewDelay, ApplyAbilityDamage(oTarget, ABILITY_STRENGTH, BreathUsed.nDiceNumber, DURATION_TYPE_PERMANENT, TRUE)); + if(AdjustedAbilityDamage = 1) nCount = BreathUsed.nClinging; + } + nAdjustedDamage /= 2; + if(BreathUsed.nOverrideSpecial == BREATH_PYROCLASTIC) + { + if(nAdjustedDamage < 3) nCount = BreathUsed.nClinging; + + effect eBreath1 = EffectDamage(nAdjustedDamage/2, DAMAGE_TYPE_FIRE); + effect eBreath2 = EffectDamage(nAdjustedDamage/2, DAMAGE_TYPE_SONIC); + effect eAfterBreath = EffectLinkEffects(eBreath1, eBreath2); + DelayCommand(fNewDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eAfterBreath, oTarget)); + } + else + { + if(nAdjustedDamage < 2) nCount = BreathUsed.nClinging; + effect eAfterBreath = EffectDamage(nAdjustedDamage, BreathUsed.nDamageType); + DelayCommand(fNewDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eAfterBreath, oTarget)); + } + DelayCommand(fNewDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + } + } + + //Get next target in spell area + if(DEBUG) DoDebug("prc_inc_breath: Next target"); + oTarget = GetNextObjectInShape(nBreathShape, fRange, lTargetArea, TRUE, nObjectFilter, vSourceOfBreath); + } + + //Lingering Breath check + if(BreathUsed.nLingering > 0) + { + int nCount; + int nLingerDuration = BreathUsed.nLingering; + BreathUsed.nLingering = 0; + BreathUsed.nClinging = 0; + vector vOrigin = GetPosition(BreathUsed.oDragon); + effect eGroundVis = EffectVisualEffect(VFX_FNF_DRAGBREATHGROUND); + + for(nCount = 0; nCount < nLingerDuration; nCount++) + { + float fNewDelay = RoundsToSeconds(nCount + 1); + DelayCommand(fNewDelay, ApplyBreath(BreathUsed, lTargetArea, TRUE, vOrigin.x, vOrigin.y, vOrigin.z)); + DelayCommand(fNewDelay, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eGroundVis, lTargetArea)); + } + } +} + +void PRCPlayDragonBattleCry() +{ + if(d100() > 50) + { + PlayVoiceChat(VOICE_CHAT_BATTLECRY1); + } + else + { + PlayVoiceChat(VOICE_CHAT_BATTLECRY2); + } +} diff --git a/src/include/prc_inc_burn.nss b/src/include/prc_inc_burn.nss new file mode 100644 index 0000000..30e8e4d --- /dev/null +++ b/src/include/prc_inc_burn.nss @@ -0,0 +1,92 @@ +/* For burning spells to use in abilities */ + +#include "prc_inc_spells" +#include "prc_getbest_inc" + +////////////////////////////////////////////////// +/* Function Prototypes */ +////////////////////////////////////////////////// + +// Burns a spell of the selected spell level +// Spell level picked by prc_burnselect.nss +// +// Returns FALSE if it failed, or the spell level if it worked +int BurnSpell(object oPC); + +// Burns a spell of the highest spell level the character has +// +// Returns FALSE if it failed, or the spell if it worked +int BurnBestSpell(object oPC); + +int BurnSpell(object oPC) +{ + int nSpellLevel = GetLocalInt(oPC, "BurnSpellLevel"); + int nSpell; + if (nSpellLevel == 0) + nSpell = GetBestL0Spell(oPC, -1); + else if (nSpellLevel == 1) + nSpell = GetBestL1Spell(oPC, -1); + else if (nSpellLevel == 2) + nSpell = GetBestL2Spell(oPC, -1); + else if (nSpellLevel == 3) + nSpell = GetBestL3Spell(oPC, -1); + else if (nSpellLevel == 4) + nSpell = GetBestL4Spell(oPC, -1); + else if (nSpellLevel == 5) + nSpell = GetBestL5Spell(oPC, -1); + else if (nSpellLevel == 6) + nSpell = GetBestL6Spell(oPC, -1); + else if (nSpellLevel == 7) + nSpell = GetBestL7Spell(oPC, -1); + else if (nSpellLevel == 8) + nSpell = GetBestL8Spell(oPC, -1); + else if (nSpellLevel == 9) + nSpell = GetBestL9Spell(oPC, -1); + + if (nSpell == -1) + { + FloatingTextStringOnCreature("You have no spells remaining of the selected level", oPC, FALSE); + return FALSE; + } + + if (DEBUG) FloatingTextStringOnCreature("Burning SpellID "+IntToString(nSpell), oPC, FALSE); + PRCDecrementRemainingSpellUses(oPC, nSpell); + if(GetLocalInt(oPC, "ReserveFeatsRunning")) + DelayCommand(0.1f, ExecuteScript("prc_reservefeat", oPC)); + return nSpellLevel; +} + +int BurnBestSpell(object oPC) +{ + int nSpell = GetBestL9Spell(oPC, -1); + if (nSpell == -1) + nSpell = GetBestL8Spell(oPC, -1); + if (nSpell == -1) + nSpell = GetBestL7Spell(oPC, -1); + if (nSpell == -1) + nSpell = GetBestL6Spell(oPC, -1); + if (nSpell == -1) + nSpell = GetBestL5Spell(oPC, -1); + if (nSpell == -1) + nSpell = GetBestL4Spell(oPC, -1); + if (nSpell == -1) + nSpell = GetBestL3Spell(oPC, -1); + if (nSpell == -1) + nSpell = GetBestL2Spell(oPC, -1); + if (nSpell == -1) + nSpell = GetBestL1Spell(oPC, -1); + if (nSpell == -1) + nSpell = GetBestL0Spell(oPC, -1); + + if (nSpell == -1) + { + FloatingTextStringOnCreature("You have no spells remaining", oPC, FALSE); + return FALSE; + } + + if (DEBUG) FloatingTextStringOnCreature("Burning SpellID "+IntToString(nSpell), oPC, FALSE); + PRCDecrementRemainingSpellUses(oPC, nSpell); + if(GetLocalInt(oPC, "ReserveFeatsRunning")) + DelayCommand(0.1f, ExecuteScript("prc_reservefeat", oPC)); + return nSpell; +} \ No newline at end of file diff --git a/src/include/prc_inc_castlvl.nss b/src/include/prc_inc_castlvl.nss new file mode 100644 index 0000000..172ee03 --- /dev/null +++ b/src/include/prc_inc_castlvl.nss @@ -0,0 +1,6748 @@ + +/** + * @file + * + * This file contains PRCGetCasterLevel() and all its accessory functions. + * Functions that modify caster level go in this include. Keep out irrelevent + * functions. If this ends up like prc_inc_spells, you get slapped. + */ + +//:: Updated for 8 class slots by Jaysyn 2024/02/05 + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Returns the caster level when used in spells. You can use PRCGetCasterLevel() + * to determine a caster level from within a true spell script. In spell-like- + * abilities & items, it will only return GetCasterLevel. + * + * @param oCaster The creature casting the spell. + * + * @return The caster level the spell was cast at. + */ +int PRCGetCasterLevel(object oCaster = OBJECT_SELF); + +/** + * A lookup for caster level progression for divine and arcane base classes + * @return an int that can be used in caster level calculations note: these use int division + */ +int GetCasterLevelModifier(int nClass); + +/** + * To override for custom spellcasting classes. Looks for the + * local int "PRC_CASTERCLASS_OVERRIDE" on oCaster. If set, + * this is used as the casting class, else GetLastSpellCastClass() + * is used. + * + * @param oCaster The creature that last cast a spell + * + * @return The class used to cast the spell. + */ +int PRCGetLastSpellCastClass(object oCaster = OBJECT_SELF); + +/** + * Returns if the given class is an arcane class. + * + * Arcane base classes are *hardcoded* into here, so new arcane + * base classes need adding to this function. + * Note: PrCs with their own spellbook eg. assassin count as base casters for this function + * + * @param oCaster The creature to check (outsiders can have sorc caster levels) + * + * @return TRUE if nClass is an arcane spellcasting class, FALSE otherwise + */ +int GetIsArcaneClass(int nClass, object oCaster = OBJECT_SELF); + +/** + * Returns if the given class is an divine class. + * + * Divine base classes are *hardcoded* into here, so new divine + * base classes need adding to this function. + * Note: PrCs with their own spellbook eg. blackguard count as base casters for this function + * + * @param oCaster The creature to check (not currently used) + * + * @return TRUE if nClass is a divine spellcasting class, FALSE otherwise + */ +int GetIsDivineClass(int nClass, object oCaster = OBJECT_SELF); + +// Returns the best "natural" arcane levels of the PC in question. Does not +// consider feats that situationally adjust caster level. +int GetLevelByTypeArcane(object oCaster = OBJECT_SELF); + +// Returns the best "natural" divine levels of the PC in question. Does not +// consider feats that situationally adjust caster level. +int GetLevelByTypeDivine(object oCaster = OBJECT_SELF); + +/** + * Works out the total arcane caster levels from arcane PrCs. + * + * Arcane prestige classes are *hardcoded* into this function, so new arcane caster + * classes need adding to it. Rakshasa RHD count as sorc PrC levels if they also have some levels in sorc + * note: PrCs with their own spellbook eg. assassin are not PrCs for this function + * + * @param oCaster The creature to check + * @param nCastingClass Casting class + * + * @return Number of arcane caster levels contributed by PrCs. + */ +int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID); + +/** + * Works out the total divine caster levels from arcane PrCs. + * + * Divine prestige classes are *hardcoded* into this function, so new divine caster + * classes need adding to it. + * note: PrCs with their own spellbook eg. blackguard are not PrCs for this function + * + * @param oCaster The creature to check + * @param nCastingClass Casting class + + * @return Number of divine caster levels contributed by PrCs. + */ +int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID); + +/** + * Gets the position of the first arcane base class. + * + * @param oCaster The creature to check + * + * @return The position (1-8) of the first arcane *base* class of oCaster + */ +int GetFirstArcaneClassPosition(object oCaster = OBJECT_SELF); + +/** + * Gets the position of the first divine base class. + * + * @param oCaster The creature to check + * + * @return The position (1-8) of the first divine *base* class of oCaster + */ +int GetFirstDivineClassPosition(object oCaster = OBJECT_SELF); + +/** + * Gets the highest or first (by position) *base* arcane class type or, + * if oCaster has no arcane class levels, returns CLASS_TYPE_INVALID. + * + * This will get rakshasa RHD 'class' if oCaster doesn't have sorc levels. + * + * @param oCaster The creature to check + * + * @return CLASS_TYPE_* of first base arcane class or CLASS_TYPE_INVALID + */ +int GetPrimaryArcaneClass(object oCaster = OBJECT_SELF); + +/** + * Gets the highest first (by position) *base* divine class type or, + * if oCaster has no divine class levels, returns CLASS_TYPE_INVALID. + * + * @param oCaster The creature to check + * + * @return CLASS_TYPE_* of first base divine class or CLASS_TYPE_INVALID + */ +int GetPrimaryDivineClass(object oCaster = OBJECT_SELF); + +/** + * Gets the highest *base* arcane or divine class type or, + * if oCaster has no spellcasting class levels, returns CLASS_TYPE_INVALID. + * + * @param oCaster The creature to check + * + * @return CLASS_TYPE_* of first base arcane/divine class or CLASS_TYPE_INVALID + */ +int GetPrimarySpellcastingClass(object oCaster = OBJECT_SELF); + +/** + * Gets the caster level adjustment from the Practiced Spellcaster feats. + * + * @param oCaster The creature to check + * @param iCastingClass The CLASS_TYPE* that the spell was cast by. + * @param iCastingLevels The caster level for the spell calculated so far + * ie. BEFORE Practiced Spellcaster. + */ +int PracticedSpellcasting(object oCaster, int iCastingClass, int iCastingLevels); + +/** + * Returns the spell school of the spell passed to it. + * + * @param iSpellId The spell to get the school of. + * + * @return The SPELL_SCHOOL_* of the spell. + */ +int GetSpellSchool(int iSpellId); + +/** + * Healing spell filter. + * + * Gets if the given spell is a healing spell based on a hardcoded list. New + * healing spells need to be added to this. + * + * @author GaiaWerewolf + * @date 18 July 2005 + * + * @param nSpellId The spell to check + * + * @return TRUE if it is a healing spell, FALSE otherwise. + */ +int GetIsHealingSpell(int nSpellId); + +/** + * Gets the contribution of the archmage's High Arcana Spell Power + * feat to caster level. + * + * @param oCaster The creature to check + * + * @return caster level modifier from archmage Spell Power feats. + */ +int ArchmageSpellPower(object oCaster); + +/** + * Gets the caster level modifier from the Shadow Weave feat. + * + * Schools of Enchantment, Illusion, and Necromancy, and spells with the darkness + * descriptor altered by +1, Evocation or Transmutation (except spells with the + * darkness descriptor) altered by -1. + * + * @param oCaster The creature to check + * @param iSpellID The spell ID of the spell + * @param nSpellSchool The spell school the cast spell is from + * if none is specified, uses GetSpellSchool() + * + * @return caster level modifier for Shadow Weave feat. + */ +int ShadowWeave(object oCaster, int iSpellID, int nSpellSchool = -1); + +/** + * Gets the caster level modifier from the Divination Power class feature. + * + * Divination spells +1/3 Unseen Seer levels, all others -1/3 Unseer Seer levels + * + * @param oCaster The creature to check + * @param iSpellID The spell ID of the spell + * @param nSpellSchool The spell school the cast spell is from + * if none is specified, uses GetSpellSchool() + * + * @return caster level modifier for Divination Power feat. + */ +int DivinationPower(object oCaster, int nSpellSchool); + +/** + * Handles feats that modify caster level of spells with the fire + * descriptor. + * + * Currently this is Disciple of Meph's Fire Adept feat and Bloodline of Fire feat. + * + * @param oCaster The creature to check + * @param iSpellID The spell ID of the spell + * + * @return Caster level modifier for fire related feats. + */ +int FireAdept(object oCaster, int iSpellID); + +/** + * Handles feats that modify caster level of spells with the air + * descriptor. + * + * Currently this is the Air Mephling's Type feat + * + * @param oCaster The creature to check + * @param iSpellID The spell ID of the spell + * + * @return Caster level modifier for fire related feats. + */ +int AirAdept(object oCaster, int iSpellID); + +/** + * Handles feats that modify caster level of spells with the air + * descriptor. + * + * Currently this is the Air Mephling's Type feat + * + * @param oCaster The creature to check + * @param iSpellID The spell ID of the spell + * + * @return Caster level modifier for fire related feats. + */ +int WaterAdept(object oCaster, int iSpellID); + +/** + * Handles feats that modify caster level of spells with the earth + * descriptor. + * + * Currently this is Drift Magic feat. + * + * @param oCaster The creature to check + * @param iSpellID The spell ID of the spell + * + * @return Caster level modifier for earth related feats. + */ +int DriftMagic(object oCaster, int iSpellID); + +/** + * Soulcaster boost to caster level based on invested essentia + * + * @param oCaster The creature to check + * @param iSpellID The spell ID of the spell + * + * @return Caster level modifier + */ +int Soulcaster(object oCaster, int iSpellID); + +/** + * Gets the caster level modifier from the Storm Magic feat. + * + * Get +1 caster level if raining or snowing in area + * + * @param oCaster The creature to check + * + * @return Caster level modifier for Storm Magic feat. + */ +int StormMagic(object oCaster); + +/** + * Gets the caster level modifier from the Cormanthyran Moon Magic feat. + * + * Get +1 caster level if outdoors, at night, with no rain. + * + * @param oCaster The creature to check + * + * @return Caster level modifier for Cormanthyran Moon Magic feat. + */ +int CormanthyranMoonMagic(object oCaster); + +/** + * Gets the caster level modifier from various domains. + * + * @param oCaster The creature to check + * @param nSpellID The spell ID of the spell + * @param nSpellSchool The spell school the cast spell is from + * if none is specified, uses GetSpellSchool() + * + * @return caster level modifier from domain powers + */ +int DomainPower(object oCaster, int nSpellID, int nSpellSchool = -1); + +/** + * Gets the caster level modifier from the Therapeutic Mantle Meld. + * + * @param oCaster The creature to check + * + * @return caster level modifier + */ +int TherapeuticMantle(object oCaster, int nSpellID); + +/** + * Gets the caster level modifier from the antipaladin's Death Knell SLA. + * + * @param oCaster The creature to check + * + * @return caster level modifier from the Death Knell SLA + */ +int DeathKnell(object oCaster); + +/** + * Gets the caster level modifier from the Draconic Power feat. + * + * Feat gives +1 to caster level. + * + * @param oCaster The creature to check + * + * @return caster level modifier from the Draconic power feat. + */ +int DraconicPower(object oCaster = OBJECT_SELF); + +/** + * Gets the caster level modifier from Song of Arcane Power effect. + * + * @param oCaster The creature to check + * + * @return caster level modifier from the Draconic power feat. + */ +int SongOfArcanePower(object oCaster = OBJECT_SELF); + +/** + * Gets the caster level modifier to necromancy spells for the + * True Necromancer PrC (all spellcasting levels are counted, both + * arcane and divine). + * + * @param oCaster The creature to check + * @param iSpellID The spell ID of the spell + * @param sType "ARCANE" or "DIVINE" spell + * @param nSpellSchool The spell school the cast spell is from + * if none is specified, uses GetSpellSchool() + * + * @return caster level modifier for True Necro + */ +int TrueNecromancy(object oCaster, int iSpellID, string sType, int nSpellSchool = -1); + +// Nentyar Hunter casting boost +int Nentyar(object oCaster, int nCastingClass); + +// +1 on spells that target armor or shields +int ShieldDwarfWarder(object oCaster); + +// +1 while this feat is active +int DarkSpeech(object oCaster); + +// Adds 1/2 level in all other casting classes. +int UrPriestCL(object oCaster, int nCastingClass); + +// Adds Druid levels to Blighter caster level +int BlighterCL(object oCaster, int nCastingClass); + +//ebonfowl: Adds CL boosts from reserve feats +int ReserveFeatCL(object oCaster, int iSpellId); + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + +//#include "prc_racial_const" +// Not needed as it has acccess via prc_inc_newip +//#include "prc_inc_nwscript" // gets inc_2da_cache, inc_debug, prc_inc_switch +#include "prc_inc_newip" +//#include "prc_inc_spells" +#include "prc_inc_descrptr" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +// stolen from prcsp_archmaginc.nss, modified to work in FireAdept() function +string _GetChangedElementalType(int nSpellID, object oCaster = OBJECT_SELF) +{ + string spellType = Get2DACache("spells", "ImmunityType", nSpellID);//lookup_spell_type(spell_id); + string sType = GetLocalString(oCaster, "archmage_mastery_elements_name"); + + if (sType == "") sType = spellType; + + return sType; +} + +//ebonfowl: Adding this function to check if a spell belongs to a given domain based on the Reserve Feat 2das +//Only works with Death, Destruction and War domains as only those domain 2das have been created +int GetIsFromDomain (int iSpellId, string sDomain) +{ + string sFile = "prc_desc_" + sDomain; + + int i; + int nListSpellID; + + for (i = 0; i < 15; i++) // Adjust max i to reflect something close to the highest row number in the 2das + { + nListSpellID = StringToInt(Get2DACache(sFile, "SpellID", i)); + if (nListSpellID == iSpellId) return TRUE; + } + return FALSE; +} + +////////////////////////////////////////////////// +/* Function Definitions */ +////////////////////////////////////////////////// + +int GetCasterLevelModifier(int nClass) +{ + switch(nClass) // do not change to return zero as this is used as a divisor + { + // add in new base half-caster classes here + case CLASS_TYPE_HEXBLADE: + case CLASS_TYPE_RANGER: + case CLASS_TYPE_PALADIN: + case CLASS_TYPE_ANTI_PALADIN: + return 2; + } + return 1; // normal progression +} + +int PRCGetCasterLevel(object oCaster = OBJECT_SELF) +{ + int nAdjust = GetLocalInt(oCaster, PRC_CASTERLEVEL_ADJUSTMENT);//this is for builder use + nAdjust += GetLocalInt(oCaster, "TrueCasterLens"); + nAdjust += GetHasSpellEffect(SPELL_VIRTUOSO_MAGICAL_MELODY, oCaster); + + // For when you want to assign the caster level. + int iReturnLevel = GetLocalInt(oCaster, PRC_CASTERLEVEL_OVERRIDE); + if (iReturnLevel) + { + if (DEBUG) DoDebug("PRCGetCasterLevel: found override caster level = "+IntToString(iReturnLevel)+" with adjustment = " + IntToString(nAdjust)+", original level = "+IntToString(GetCasterLevel(oCaster))); + return iReturnLevel+nAdjust; + } + + // if we made it here, iReturnLevel = 0; + + int iCastingClass = PRCGetLastSpellCastClass(oCaster); // might be CLASS_TYPE_INVALID + if(iCastingClass == CLASS_TYPE_SUBLIME_CHORD) + iCastingClass = GetPrimaryArcaneClass(oCaster); + int iSpellId = PRCGetSpellId(oCaster); + object oItem = PRCGetSpellCastItem(oCaster); + + // Item Spells + // this check is unreliable because of Bioware's implementation (GetSpellCastItem returns + // the last object from which a spell was cast, even if we are not casting from an item) + if(GetIsObjectValid(oItem)) + { + int nType = GetBaseItemType(oItem); + if(DEBUG) DoDebug("PRCGetCasterLevel: found valid item = "+GetName(oItem)); + // double check, just to make sure + if(GetItemPossessor(oItem) == oCaster) // likely item casting + { + if(GetPRCSwitch(PRC_STAFF_CASTER_LEVEL) + && ((nType == BASE_ITEM_MAGICSTAFF) || + (nType == BASE_ITEM_CRAFTED_STAFF)) + ) + { + iCastingClass = GetPrimarySpellcastingClass(oCaster); + } + else + { + //code for getting new ip type + itemproperty ipTest = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipTest)) + { + if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_CAST_SPELL_CASTER_LEVEL) + { + int nSubType = GetItemPropertySubType(ipTest); + nSubType = StringToInt(Get2DACache("iprp_spells", "SpellIndex", nSubType)); + if(nSubType == iSpellId) + { + iReturnLevel = GetItemPropertyCostTableValue(ipTest); + if (DEBUG) DoDebug("PRCGetCasterLevel: caster level from item = "+IntToString(iReturnLevel)); + break; // exit the while loop + } + } + ipTest = GetNextItemProperty(oItem); + } + // if we didn't find a caster level on the item, it must be Bioware item casting + if(!iReturnLevel) + { + iReturnLevel = GetCasterLevel(oCaster); + if (DEBUG) DoDebug("PRCGetCasterLevel: bioware item casting with caster level = "+IntToString(iReturnLevel)); + } + } + + if(nType == BASE_ITEM_MAGICWAND || nType == BASE_ITEM_ENCHANTED_WAND) + { + if (DEBUG) DoDebug("PRCGetCasterLevel - Casting Item is a Wand at level "+IntToString(iReturnLevel)); + if (GetHasFeat(FEAT_RECKLESS_WAND_WIELDER, oCaster) && GetLocalInt(oCaster, "RecklessWand")) // This burns an extra charge to increase caster level by 2 + { + if (DEBUG) DoDebug("PRCGetCasterLevel - Reckless Wand Active"); + if (GetItemCharges(oItem) > 0) // Make sure we have an extra charge to burn + { + iReturnLevel += 2; + if (!GetLocalInt(oCaster, "RecklessWandDelay")) SetItemCharges(oItem, GetItemCharges(oItem)-1); + SetLocalInt(oCaster, "RecklessWandDelay", TRUE); + DelayCommand(0.5, DeleteLocalInt(oCaster, "RecklessWandDelay")); + if (DEBUG) DoDebug("PRCGetCasterLevel - Reckless Wand Triggered at level "+IntToString(iReturnLevel)); + } + } + if (GetHasFeat(FEAT_WAND_MASTERY, oCaster)) + iReturnLevel += 2; + } + } + if (DEBUG) DoDebug("PRCGetCasterLevel: total item casting caster level = "+IntToString(iReturnLevel)); + } + + // get spell school here as many of the following fns use it + int nSpellSchool = GetSpellSchool(iSpellId); + + // no item casting, and arcane caster? + if(!iReturnLevel && GetIsArcaneClass(iCastingClass, oCaster)) + { + iReturnLevel = GetLevelByClass(iCastingClass, oCaster) / GetCasterLevelModifier(iCastingClass); + + // Casting as a sorc but don't have any levels in the class + if(iCastingClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oCaster)) + { + int nRace = GetRacialType(oCaster); + + //if the player has sorcerer levels, then it counts as a prestige class + //otherwise use RHD instead of sorc levels + if(nRace == RACIAL_TYPE_RAKSHASA) + iReturnLevel = GetLevelByClass(CLASS_TYPE_OUTSIDER); + else if(nRace == RACIAL_TYPE_DRIDER) + iReturnLevel = GetLevelByClass(CLASS_TYPE_ABERRATION); + else if(nRace == RACIAL_TYPE_ARKAMOI) + iReturnLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS); + else if(nRace == RACIAL_TYPE_HOBGOBLIN_WARSOUL) + iReturnLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS); + else if(nRace == RACIAL_TYPE_REDSPAWN_ARCANISS) + iReturnLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS)*3/4; + else if(nRace == RACIAL_TYPE_MARRUTACT) + iReturnLevel = (GetLevelByClass(CLASS_TYPE_MONSTROUS)*6/7)-1; + else if(nRace == RACIAL_TYPE_ARANEA) + iReturnLevel = GetLevelByClass(CLASS_TYPE_SHAPECHANGER); + + } + // Casting as a bard but don't have any levels in the class //:: Double-dipping? +/* if(iCastingClass == CLASS_TYPE_BARD && !GetLevelByClass(CLASS_TYPE_BARD, oCaster)) + { + int nRace = GetRacialType(oCaster); + + //if the player has bard levels, then it counts as a prestige class + //otherwise use RHD instead of bard levels + if(nRace == RACIAL_TYPE_GLOURA) + iReturnLevel = GetLevelByClass(CLASS_TYPE_FEY); + } */ + + //Spell Rage ability + if(GetHasSpellEffect(SPELL_SPELL_RAGE, oCaster) + && (nSpellSchool == SPELL_SCHOOL_ABJURATION + || nSpellSchool == SPELL_SCHOOL_CONJURATION + || nSpellSchool == SPELL_SCHOOL_EVOCATION + || nSpellSchool == SPELL_SCHOOL_NECROMANCY + || nSpellSchool == SPELL_SCHOOL_TRANSMUTATION)) + { + iReturnLevel = GetHitDice(oCaster); + } + + else if(GetPrimaryArcaneClass(oCaster) == iCastingClass) + iReturnLevel += GetArcanePRCLevels(oCaster, iCastingClass); + else if(GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster)) + iReturnLevel += GetArcanePRCLevels(oCaster, iCastingClass); + + iReturnLevel += PracticedSpellcasting(oCaster, iCastingClass, iReturnLevel); + + iReturnLevel += TrueNecromancy(oCaster, iSpellId, "ARCANE", nSpellSchool) + + ShadowWeave(oCaster, iSpellId, nSpellSchool) + + FireAdept(oCaster, iSpellId) + + AirAdept(oCaster, iSpellId) + + WaterAdept(oCaster, iSpellId) + + ArchmageSpellPower(oCaster) + + StormMagic(oCaster) + + CormanthyranMoonMagic(oCaster) + + DomainPower(oCaster, iSpellId, nSpellSchool) + + DivinationPower(oCaster, nSpellSchool) + + DeathKnell(oCaster) + + DraconicPower(oCaster) + + DriftMagic(oCaster, iSpellId) + + Soulcaster(oCaster, iSpellId) + + TherapeuticMantle(oCaster, iSpellId) + + DarkSpeech(oCaster) + + ShieldDwarfWarder(oCaster) + + SongOfArcanePower(oCaster) + + ReserveFeatCL(oCaster, iSpellId); + + if (GetLocalInt(oCaster, "CaptureMagic")) + { + iReturnLevel += GetLocalInt(oCaster, "CaptureMagic"); + DeleteLocalInt(oCaster, "CaptureMagic"); + } + + // Get stance level bonus for Jade Phoenix Mage + if(GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster)) + { + if (_GetChangedElementalType(iSpellId, oCaster) == "Fire" && GetLocalInt(oCaster, "ToB_JPM_FireB")) + iReturnLevel += 3; + iReturnLevel += GetLocalInt(oCaster, "ToB_JPM_MystP"); + } + // Abjurant Champion uses its Base AB as Caster Level if higher + if(GetHasFeat(FEAT_MARTIAL_ARCANIST)) + { + //Get the caster's base AB + int nBaseAB = GetBaseAttackBonus(oCaster); + if(nBaseAB > iReturnLevel) + { + iReturnLevel = nBaseAB; + } + } + if (DEBUG) DoDebug("PRCGetCasterLevel: total arcane caster level = "+IntToString(iReturnLevel)); + } + + // no item casting and divine caster? + else if(!iReturnLevel && GetIsDivineClass(iCastingClass, oCaster)) + { + iReturnLevel = GetLevelByClass(iCastingClass, oCaster) / GetCasterLevelModifier(iCastingClass); + if(GetPrimaryDivineClass(oCaster) == iCastingClass) + iReturnLevel += GetDivinePRCLevels(oCaster, iCastingClass); + + iReturnLevel += PracticedSpellcasting(oCaster, iCastingClass, iReturnLevel); + + iReturnLevel += TrueNecromancy(oCaster, iSpellId, "DIVINE", nSpellSchool) + + ShadowWeave(oCaster, iSpellId, nSpellSchool) + + FireAdept(oCaster, iSpellId) + + StormMagic(oCaster) + + CormanthyranMoonMagic(oCaster) + + Nentyar(oCaster, iCastingClass) + + DomainPower(oCaster, iSpellId, nSpellSchool) + + DriftMagic(oCaster, iSpellId) + + AirAdept(oCaster, iSpellId) + + WaterAdept(oCaster, iSpellId) + + Soulcaster(oCaster, iSpellId) + + ShieldDwarfWarder(oCaster) + + DarkSpeech(oCaster) + + DeathKnell(oCaster) + + UrPriestCL(oCaster, iCastingClass) + + BlighterCL(oCaster, iCastingClass) + + ReserveFeatCL(oCaster, iSpellId); + + if (DEBUG) DoDebug("PRCGetCasterLevel: total divine caster level = "+IntToString(iReturnLevel)); + } + + //at this point it must be a SLA or similar + if(!iReturnLevel) + { + iReturnLevel = GetCasterLevel(oCaster); + if (DEBUG) DoDebug("PRCGetCasterLevel: bioware caster level = "+IntToString(iReturnLevel)); + } + + iReturnLevel -= GetLocalInt(oCaster, "WoLCasterPenalty"); + if (GetLocalInt(oCaster, "EldritchDisrupt")) + iReturnLevel -= 4; + if (GetLocalInt(oCaster, "EldritchVortex")) + iReturnLevel -= 4; + if (DEBUG) DoDebug("PRCGetCasterLevel: caster level pre adjust = "+IntToString(iReturnLevel)); + iReturnLevel += nAdjust; + if (DEBUG) DoDebug("PRCGetCasterLevel: total caster level = "+IntToString(iReturnLevel)); + + return iReturnLevel; +} + +int PRCGetLastSpellCastClass(object oCaster = OBJECT_SELF) +{ + // note that a barbarian has a class type constant of zero. So nClass == 0 could in principle mean + // that a barbarian cast the spell, However, barbarians cannot cast spells, so it doesn't really matter + // beware of Barbarians with UMD, though. Also watch out for spell like abilities + // might have to provide a fix for these (for instance: if(nClass == -1) nClass = 0; + int nClass = GetLocalInt(oCaster, PRC_CASTERCLASS_OVERRIDE); + if(nClass) + { + if(DEBUG) DoDebug("PRCGetLastSpellCastClass: found override caster class = "+IntToString(nClass)+", original class = "+IntToString(GetLastSpellCastClass())); + return nClass; + } + nClass = GetLastSpellCastClass(); + //if casting class is invalid and the spell was not cast form an item it was probably cast from the new spellbook + int NSB_Class = GetLocalInt(oCaster, "NSB_Class"); + if(nClass == CLASS_TYPE_INVALID && GetSpellCastItem() == OBJECT_INVALID && NSB_Class) + nClass = NSB_Class; + + if(DEBUG) DoDebug("PRCGetLastSpellCastClass: returning caster class = "+IntToString(nClass)+" NSB_Class = "+IntToString(NSB_Class)); + return nClass; +} + +int GetIsArcaneClass(int nClass, object oCaster = OBJECT_SELF) +{ + return nClass == CLASS_TYPE_ASSASSIN + || nClass == CLASS_TYPE_BARD + || nClass == CLASS_TYPE_BEGUILER + || nClass == CLASS_TYPE_CELEBRANT_SHARESS + || nClass == CLASS_TYPE_CULTIST_SHATTERED_PEAK + || nClass == CLASS_TYPE_DREAD_NECROMANCER + || nClass == CLASS_TYPE_DUSKBLADE + || nClass == CLASS_TYPE_HARPER + || nClass == CLASS_TYPE_HEXBLADE + || nClass == CLASS_TYPE_KNIGHT_WEAVE + || nClass == CLASS_TYPE_SHADOWLORD + || nClass == CLASS_TYPE_SORCERER + || nClass == CLASS_TYPE_SUBLIME_CHORD + || nClass == CLASS_TYPE_SUEL_ARCHANAMACH + || nClass == CLASS_TYPE_WARMAGE + || nClass == CLASS_TYPE_WIZARD + || (nClass == CLASS_TYPE_SHAPECHANGER + && GetRacialType(oCaster) == RACIAL_TYPE_ARANEA + && !GetLevelByClass(CLASS_TYPE_SORCERER)) + || (nClass == CLASS_TYPE_OUTSIDER + && GetRacialType(oCaster) == RACIAL_TYPE_RAKSHASA + && !GetLevelByClass(CLASS_TYPE_SORCERER)) + || (nClass == CLASS_TYPE_ABERRATION + && GetRacialType(oCaster) == RACIAL_TYPE_DRIDER + && !GetLevelByClass(CLASS_TYPE_SORCERER)) + || (nClass == CLASS_TYPE_MONSTROUS + && GetRacialType(oCaster) == RACIAL_TYPE_ARKAMOI + && !GetLevelByClass(CLASS_TYPE_SORCERER)) + || (nClass == CLASS_TYPE_MONSTROUS + && GetRacialType(oCaster) == RACIAL_TYPE_HOBGOBLIN_WARSOUL + && !GetLevelByClass(CLASS_TYPE_SORCERER)) + || (nClass == CLASS_TYPE_MONSTROUS + && GetRacialType(oCaster) == RACIAL_TYPE_REDSPAWN_ARCANISS + && !GetLevelByClass(CLASS_TYPE_SORCERER)) + || (nClass == CLASS_TYPE_MONSTROUS + && GetRacialType(oCaster) == RACIAL_TYPE_MARRUTACT + && !GetLevelByClass(CLASS_TYPE_SORCERER)) + || (nClass == CLASS_TYPE_FEY + && GetRacialType(oCaster) == RACIAL_TYPE_GLOURA + && !GetLevelByClass(CLASS_TYPE_BARD)); +} + +int GetIsDivineClass(int nClass, object oCaster = OBJECT_SELF) +{ + return nClass == CLASS_TYPE_ARCHIVIST + || nClass == CLASS_TYPE_BLACKGUARD + || nClass == CLASS_TYPE_BLIGHTER + || nClass == CLASS_TYPE_CLERIC + || nClass == CLASS_TYPE_DRUID + || nClass == CLASS_TYPE_FAVOURED_SOUL + || nClass == CLASS_TYPE_HEALER + || nClass == CLASS_TYPE_JUSTICEWW + || nClass == CLASS_TYPE_KNIGHT_CHALICE + || nClass == CLASS_TYPE_KNIGHT_MIDDLECIRCLE + || nClass == CLASS_TYPE_NENTYAR_HUNTER + || nClass == CLASS_TYPE_OCULAR + || nClass == CLASS_TYPE_PALADIN + || nClass == CLASS_TYPE_RANGER + || nClass == CLASS_TYPE_SHAMAN + || nClass == CLASS_TYPE_SLAYER_OF_DOMIEL + || nClass == CLASS_TYPE_SOHEI + || nClass == CLASS_TYPE_SOLDIER_OF_LIGHT + || nClass == CLASS_TYPE_UR_PRIEST + || nClass == CLASS_TYPE_VASSAL; +} + +int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID) +{ + int nArcane; + int nClass; + int nRace = GetRacialType(oCaster); + + if (nCastingClass == CLASS_TYPE_BARD || GetLevelByClass(CLASS_TYPE_BARD, oCaster)) + { + //:: Includes RHD as bard. If they started with bard levels, then it + //:: counts as a prestige class, otherwise RHD is used instead of bard levels. + if(nRace == RACIAL_TYPE_GLOURA) + nArcane += GetLevelByClass(CLASS_TYPE_FEY, oCaster); + + if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + + if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + + // if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_BARD, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + + if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); + + if(GetHasFeat(FEAT_DHEART_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + + // if(GetHasFeat(FEAT_FMM_SPELLCASTING_BARD, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + + if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); + + if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + + // if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_BARD, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + + // if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_BARD, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); + + // if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_BARD, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + + if(GetHasFeat(FEAT_SUBLIME_CHORD_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + + if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_BARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); + + if(GetHasFeat(FEAT_AOTS_SPELLCASTING_BARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_BARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_BARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + + // if(GetHasFeat(FEAT_BONDED_SPELLCASTING_BARD, oCaster)) + // nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_BARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_BARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_BARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_BARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_BARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_BARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_BARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_BARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_BARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_BARD, oCaster)) + { + if (nClass) + { + nArcane += nClass - 3 + d6(); + } + } + } +//:: End Bard Arcane PrC casting calculations + + if(nCastingClass == CLASS_TYPE_BARD || nCastingClass == CLASS_TYPE_BARD && nRace == RACIAL_TYPE_GLOURA && !GetLevelByClass(CLASS_TYPE_BARD, oCaster)) + { + if(DEBUG) DoDebug("prc_inc_castlvl >> Found Fey RHD caster (not bard)"); + + if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + + if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + + // if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_FEY, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + + if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); + + if(GetHasFeat(FEAT_DHEART_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + + // if(GetHasFeat(FEAT_FMM_SPELLCASTING_FEY, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + + // if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_FEY, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); + + if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + + // if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_FEY, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + + // if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_FEY, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); + + // if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_FEY, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + + // if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_FEY, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + + if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_FEY, oCaster)) + { + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + if(DEBUG) DoDebug("prc_inc_castlvl >> Found Fey + Virtuoso PrC. Arcane caster level is "+IntToString(nArcane)+"."); + } + + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_FEY, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); + + if(GetHasFeat(FEAT_AOTS_SPELLCASTING_FEY, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_FEY, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_FEY, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + + // if(GetHasFeat(FEAT_BONDED_SPELLCASTING_FEY, oCaster)) + // nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_FEY, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_FEY, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_FEY, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_FEY, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_FEY, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_FEY, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_FEY, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_FEY, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_FEY, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_FEY, oCaster)) + { + nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); + if (nClass) { nArcane += nClass - 3 + d6(); } + } + } +//:: End Fey Arcane PrC casting calculations + + if (nCastingClass == CLASS_TYPE_ASSASSIN || GetLevelByClass(CLASS_TYPE_ASSASSIN, oCaster)) + { + if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_ASSASSIN, oCaster)) //:: Requires Assassin 4 + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + + // if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_ASSASSIN, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + + // if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_ASSASSIN, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + // if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_ASSASSIN, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + + if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); + + if(GetHasFeat(FEAT_DHEART_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster ); + + // if(GetHasFeat(FEAT_FMM_SPELLCASTING_ASSASSIN, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + // if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_ASSASSIN, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + // if(GetHasFeat(FEAT_JPM_SPELLCASTING_ASSASSIN, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + + // if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_ASSASSIN, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); + + // if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_ASSASSIN, oCaster)) + // nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + +/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */ + +/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */ + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */ + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + +/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */ + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + +/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); */ + +/* if(GetHasFeat(FEAT_WWOC_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); */ + + if(GetHasFeat(FEAT_AOTS_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; */ + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_ASSASSIN, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_ASSASSIN, oCaster)) + { + nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); + if (nClass) + nArcane += nClass - 3 + d6(); + } + } +//:: End Assassin Arcane PrC casting calculations + + if (nCastingClass == CLASS_TYPE_BEGUILER) + { + if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + + if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + + if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + + if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); + + if(GetHasFeat(FEAT_DHEART_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + +/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */ + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + + if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); + + if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */ + +/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */ + +/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */ + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + +/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */ + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + + if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_BEGUILER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); + + if(GetHasFeat(FEAT_AOTS_SPELLCASTING_BEGUILER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_BEGUILER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_BEGUILER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_BEGUILER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_BEGUILER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_BEGUILER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_BEGUILER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_BEGUILER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_BEGUILER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_BEGUILER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_BEGUILER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_BEGUILER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_BEGUILER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_BEGUILER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_BEGUILER, oCaster)) + { nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); + if (nClass) { nArcane += nClass - 3 + d6(); } + } + } +//:: End Beguiler Arcane PrC casting calculations + + if (nCastingClass == CLASS_TYPE_CELEBRANT_SHARESS) + { + if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + + if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); + + if(GetHasFeat(FEAT_BONDED_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster); + +/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */ + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + +/* if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); */ + + if(GetHasFeat(FEAT_DHEART_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + +/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */ + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + +/* if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); */ + +/* if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); */ + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + +/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */ + +/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */ + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + +/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */ + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + +/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); */ + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BONDED_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; */ + +/* if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; */ + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + +/* if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; */ + +/* if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; */ + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */ + +/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */ + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_CELEBRANT_SHARESS, oCaster)) + { + nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); + if (nClass) { nArcane += nClass - 3 + d6(); } + } + } +//:: End Celebrant of Sharess Arcane PrC casting calculations + + if (nCastingClass == CLASS_TYPE_CULTIST_SHATTERED_PEAK) + { + if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + +/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */ + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + +/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */ + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + + if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); + +/* if(GetHasFeat(FEAT_DHEART_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); */ + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + +/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */ + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + +/* if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); */ + +/* if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); */ + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */ + +/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */ + +/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */ + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + +/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */ + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + +/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); */ + + if(GetHasFeat(FEAT_AOTS_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */ + +/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_CULTIST_PEAK, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */ + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_CULTIST_PEAK, oCaster)) + { + nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); + if (nClass) { nArcane += nClass - 3 + d6();} + } + } +//:: End Cultist of the Shattered Peaks Arcane PrC casting calculations + + if (nCastingClass == CLASS_TYPE_DREAD_NECROMANCER) + { +/* if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION); */ + + if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + + if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + + if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); + + if(GetHasFeat(FEAT_DHEART_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + +/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */ + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + + if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); + + if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */ + + if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); + +/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */ + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + +/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */ + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + +/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); */ + + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_DNECRO, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); + + if(GetHasFeat(FEAT_AOTS_SPELLCASTING_DNECRO, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_DNECRO, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_DNECRO, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_DNECRO, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_DNECRO, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_DNECRO, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_DNECRO, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_DNECRO, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_DNECRO, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_DNECRO, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_DNECRO, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_DNECRO, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_DNECRO, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_DNECRO, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_DNECRO, oCaster)) + { nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); + if (nClass) { nArcane += nClass - 3 + d6(); } + } + } +//:: End Dread Necromancer Arcane PrC casting calculations + + if (nCastingClass == CLASS_TYPE_DUSKBLADE) + { + if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + +/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */ + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + +/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */ + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + + if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); + + if(GetHasFeat(FEAT_DHEART_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster); + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + +/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */ + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + + if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); + + if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */ + +/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); + + if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */ + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + +/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */ + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + + if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); + + if(GetHasFeat(FEAT_AOTS_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_DUSKBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_DUSKBLADE, oCaster)) + { + nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); + if (nClass) { nArcane += nClass - 3 + d6();} + } + } +//:: End Duskblade Arcane PrC casting calculations + + if (nCastingClass == CLASS_TYPE_HARPER) + { + if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_HARPER, oCaster)) //:: enter after 5th Harper Scout lvl + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + +/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */ + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + +/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */ + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + +/* if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); */ + + if(GetHasFeat(FEAT_DHEART_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_HARPER, oCaster)) //:: enter after 5th Harper Scout lvl + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + +/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */ + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + +/* if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); */ + +/* if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); */ + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + +/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */ + +/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */ + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + +/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */ + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + +/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); */ + +/* if(GetHasFeat(FEAT_WWOC_SPELLCASTING_HARPER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); */ + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_HARPER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_HARPER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_HARPER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_HARPER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_HARPER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_HARPER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_HARPER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + +/* if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_HARPER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; */ + +/* if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_HARPER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; */ + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_HARPER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_HARPER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_HARPER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */ + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_HARPER, oCaster)) + { + nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); + if (nClass) { nArcane += nClass - 3 + d6();} + } + } +//:: End Harper Scout Arcane PrC casting calculations + + if (nCastingClass == CLASS_TYPE_HEXBLADE) + { + if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + +/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */ + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + +/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */ + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + + if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); + + if(GetHasFeat(FEAT_DHEART_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + +/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */ + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + +/* if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); + + if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); */ + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */ + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + +/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */ + +/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */ + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + +/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */ + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + +/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); */ + + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); + + if(GetHasFeat(FEAT_AOTS_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BONDED_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_HEXBLADE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_HEXBLADE, oCaster)) + { + nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); + if (nClass) { nArcane += nClass - 3 + d6(); } + } + } +//:: End Hexblade Arcane PrC casting calculations + + if (nCastingClass == CLASS_TYPE_KNIGHT_WEAVE) + { + if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + +/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */ + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + +/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */ + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + +/* if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); */ + + if(GetHasFeat(FEAT_DHEART_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + + if(GetHasFeat(FEAT_FMM_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + + if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); + +/* if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); */ + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */ + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + +/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */ + +/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */ + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + +/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */ + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + +/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); */ + + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + +/* if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; */ + +/* if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; */ + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; + +/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */ + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_KNIGHT_WEAVE, oCaster)) + { nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); } + if (nClass) { nArcane += nClass - 3 + d6(); } + } +//:: End Knight of the Weave Arcane PrC casting calculations + + if (nCastingClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_SORCERER)) + { +//:: Includes RHD as sorcerer. If they already have sorcerer levels, then it +//:: counts as a prestige class, otherwise RHD is used instead of sorc levels. + if(nRace == RACIAL_TYPE_ARANEA) + nArcane += GetLevelByClass(CLASS_TYPE_SHAPECHANGER); + if(nRace == RACIAL_TYPE_RAKSHASA) + nArcane += GetLevelByClass(CLASS_TYPE_OUTSIDER); + if(nRace == RACIAL_TYPE_DRIDER) + nArcane += GetLevelByClass(CLASS_TYPE_ABERRATION); + if(nRace == RACIAL_TYPE_ARKAMOI) + nArcane += GetLevelByClass(CLASS_TYPE_MONSTROUS); + if(nRace == RACIAL_TYPE_HOBGOBLIN_WARSOUL) + nArcane += GetLevelByClass(CLASS_TYPE_MONSTROUS); + if(nRace == RACIAL_TYPE_REDSPAWN_ARCANISS) + nArcane += GetLevelByClass(CLASS_TYPE_MONSTROUS)*3/4; + if(nRace == RACIAL_TYPE_MARRUTACT) + nArcane += (GetLevelByClass(CLASS_TYPE_MONSTROUS)*6/7)-1; + + if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + + if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + + if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + + if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); + + if(GetHasFeat(FEAT_DHEART_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster); + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + + if(GetHasFeat(FEAT_FMM_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + + if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); + + if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */ + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + + if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); + +/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */ + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + +/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */ + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + + if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); + + if(GetHasFeat(FEAT_AOTS_SPELLCASTING_SORCERER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SORCERER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_SORCERER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BONDED_SPELLCASTING_SORCERER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_SORCERER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SORCERER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_SORCERER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_SORCERER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SORCERER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SORCERER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_SORCERER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_SORCERER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SORCERER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SORCERER, oCaster)) + { int nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); } + if (nClass) { nArcane += nClass - 3 + d6(); } + } +//:: End Sorcerer Arcane PrC casting calculations + + + if(nCastingClass == CLASS_TYPE_SORCERER && nRace == RACIAL_TYPE_DRIDER + || nRace == RACIAL_TYPE_ARKAMOI + || nRace == RACIAL_TYPE_MARRUTACT + || nRace == RACIAL_TYPE_REDSPAWN_ARCANISS + || nRace == RACIAL_TYPE_HOBGOBLIN_WARSOUL + || nRace == RACIAL_TYPE_RAKSHASA + || nRace == RACIAL_TYPE_ARANEA + && !GetLevelByClass(CLASS_TYPE_SORCERER)) + { +//:: Adding PrC caster levels to the racial caster level. + if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + + if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_ALIENIST_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_ALIENIST_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_ALIENIST_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_ANIMA_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_ANIMA_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_ANIMA_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + + if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_MHARPER_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_MHARPER_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_MHARPER_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_CMANCER_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_CMANCER_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_CMANCER_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + + if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); + + if(GetHasFeat(FEAT_DHEART_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_DHEART_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_DHEART_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_DHEART_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_DSONG_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_DSONG_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_DSONG_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster); + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + + if(GetHasFeat(FEAT_FMM_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_FMM_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_FMM_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_FMM_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_HARPERM_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_HARPERM_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_HARPERM_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_JPM_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_JPM_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_JPM_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + + if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_MONSTROUS, oCaster) //:: Shouldn't be possible + || GetHasFeat(FEAT_MAESTER_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_MAESTER_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_MAESTER_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); + + if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_ALCHEM_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_ALCHEM_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + + if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_TNECRO_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_TNECRO_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_TNECRO_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); + +/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_SORCERER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */ + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_UNSEEN_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_UNSEEN_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_UNSEEN_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + + if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_WWOC_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_WWOC_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_WWOC_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); + + if(GetHasFeat(FEAT_AOTS_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_AOTS_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_AOTS_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_AOTS_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_MONSTROUS, oCaster) //:: Shouldn't be possible + || GetHasFeat(FEAT_BSINGER_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_BSINGER_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_BSINGER_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_MONSTROUS, oCaster) //:: Shouldn't be possible + || GetHasFeat(FEAT_HATHRAN_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_HATHRAN_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_HAVOC_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_HAVOC_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_HAVOC_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_SSWORD_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_SSWORD_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_SSWORD_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_GRAZZT_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_GRAZZT_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_TIAMAT_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_TIAMAT_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_WAYFARER_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_WAYFARER_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_WAYFARER_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_MONSTROUS, oCaster) //:: Shouldn't be possible + || GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SHAPECHANGER, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_MONSTROUS, oCaster) + || GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_ABERRATION, oCaster) + || GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_OUTSIDER, oCaster) + || GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SHAPECHANGER, oCaster)) + { nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); } + if (nClass) { nArcane += nClass - 3 + d6(); } + } +//:: End Aberration / Monstrous / Outsider / Shapechanger Arcane PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_SUBLIME_CHORD) + { + if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + + if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + + if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + + if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); + + if(GetHasFeat(FEAT_DHEART_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster); + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + +/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */ + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + + if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); + + if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */ + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + + if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); + +/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */ + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + +/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_SUBLIME_CHORD, oCaster)) // no cantrips! + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); */ + + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); + + if(GetHasFeat(FEAT_AOTS_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_SUBLIME_CHORD, oCaster)) //: No familiar! + nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SUBLIME_CHORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SUBLIME_CHORD, oCaster)) + { nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); } + if (nClass) { nArcane += nClass - 3 + d6(); } + } +//:: End SUBLIME_CHORD Arcane PrC casting calculations + + if (nCastingClass == CLASS_TYPE_SUEL_ARCHANAMACH) + { + if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + +/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */ + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + +/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */ + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + + if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); + + if(GetHasFeat(FEAT_DHEART_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster); + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + +/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */ + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + + if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); + + if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */ + +/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */ + +/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */ + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + +/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */ + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + +/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); */ + + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); + + if(GetHasFeat(FEAT_AOTS_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SUEL_ARCHANAMACH, oCaster)) + { nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); } + if (nClass) { nArcane += nClass - 3 + d6(); } + } +//:: End Suel Archanamach Arcane PrC casting calculations + + if (nCastingClass == CLASS_TYPE_SHADOWLORD) + { + if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_SHADOWLORD, oCaster)) //:: Enter after 4th lvl + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); + +/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */ + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + +/* if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); */ + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + + if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); + + if(GetHasFeat(FEAT_DHEART_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster); + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + +/* if(GetHasFeat(FEAT_FMM_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); */ + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + +/* if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); */ + +/* if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); */ + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + +/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */ + +/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */ + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + +/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */ + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + +/* if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); */ + + if(GetHasFeat(FEAT_AOTS_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_BONDED_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SHADOWLORD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SHADOWLORD, oCaster)) + { + nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); + if (nClass) { nArcane += nClass - 3 + d6();} + } + } +//:: End Telflammar Shadowlord Arcane PrC casting calculations + + if (nCastingClass == CLASS_TYPE_WARMAGE) + { +/* if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster); */ + +/* if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); */ + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + + if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + + if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); + + if(GetHasFeat(FEAT_DHEART_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + + if(GetHasFeat(FEAT_FMM_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + + if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); + + if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */ + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + +/* if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); */ + +/* if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); */ + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + +/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */ + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + + if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); + + if(GetHasFeat(FEAT_AOTS_SPELLCASTING_WARMAGE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_WARMAGE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_WARMAGE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BONDED_SPELLCASTING_WARMAGE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_WARMAGE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_WARMAGE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_WARMAGE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_WARMAGE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_WARMAGE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_WARMAGE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_WARMAGE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_WARMAGE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_WARMAGE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; */ + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_WARMAGE, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_WARMAGE, oCaster)) + { nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster); } + if (nClass) { nArcane += nClass - 3 + d6(); } + } +//:: End Warmage Arcane PrC casting calculations + + if (nCastingClass == CLASS_TYPE_WIZARD) + { + if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION); + + if(GetHasFeat(FEAT_ALIENIST_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster); + + if(GetHasFeat(FEAT_ANIMA_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster); + + if(GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster); + + if(GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster); + + if(GetHasFeat(FEAT_MHARPER_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster); + + if(GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster); + + if(GetHasFeat(FEAT_CMANCER_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster); + + if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); + +/* if(GetHasFeat(FEAT_DHEART_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster); */ + + if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster); + + if(GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster); + + if(GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCaster); + + if(GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster); + + if(GetHasFeat(FEAT_FMM_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FMM, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster); + + if(GetHasFeat(FEAT_HARPERM_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster); + + if(GetHasFeat(FEAT_JPM_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster); + + if(GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster); + + if(GetHasFeat(FEAT_MAESTER_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MAESTER, oCaster); + + if(GetHasFeat(FEAT_ALCHEM_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster); + + if(GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster); + + if(GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_WARMAGE, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster); + + if(GetHasFeat(FEAT_TNECRO_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); + + if(GetHasFeat(FEAT_REDWIZ_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster); + + if(GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWLORD_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SHADOWLORD, oCaster); */ + +/* if(GetHasFeat(FEAT_SUBCHORD_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster); */ + + if(GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + + if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + + if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster); + + if(GetHasFeat(FEAT_WWOC_SPELLCASTING_WIZARD, oCaster)) + nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster); + + if(GetHasFeat(FEAT_AOTS_SPELLCASTING_WIZARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_WIZARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BSINGER_SPELLCASTING_WIZARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BONDED_SPELLCASTING_WIZARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_DSONG_SPELLCASTING_WIZARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_WIZARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_WIZARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HAVOC_SPELLCASTING_WIZARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SSWORD_SPELLCASTING_WIZARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_GRAZZT_SPELLCASTING_WIZARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_WIZARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_WIZARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_WAYFARER_SPELLCASTING_WIZARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) /2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_WIZARD, oCaster)) + nArcane += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + if(GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_WIZARD, oCaster)) + { nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);} + if (nClass) { nArcane += nClass - 3 + d6(); } + } +//:: End Wizard Arcane PrC casting calculations + + return nArcane; +} + +int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID) +{ + int nDivine = 0; + + if (nCastingClass == CLASS_TYPE_ARCHIVIST) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_ARCHIVIST, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + + if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); + + if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); + + if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); + + if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); + + if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + +/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */ + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + + if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); + + if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + + if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_KORD_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_ARCHIVIST, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + } +//:: End Archivist Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_BLACKGUARD) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_BLACKGUARD, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + + if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); + +/* if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); */ + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + +/* if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); + + if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); + + if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); + + if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */ + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + + // if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_BLACKGUARD, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); + +/* if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); */ + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + +/* if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); */ + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); */ + + if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + + if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; */ + +/* if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; */ + +/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2; */ + +/* if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; */ + + if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; */ + + if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_BLACKGUARD, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + } +//:: End Blackguard Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_BLIGHTER) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_BLIGHTER, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + + if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); + +/* if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); */ + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + +/* if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); */ + +/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); + + if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */ + + if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + + if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); + +/* if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); */ + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + +/* if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); */ + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); */ + + if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + + if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster + 1) / 2 + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster + 1) / 2 + + if(GetHasFeat(FEAT_KORD_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_OLLAM, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster + 1) / 2 */ + +/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_BLIGHTER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + } +//:: End Blighter Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_CLERIC) + { + + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_CLERIC, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + + if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); + + if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); + + if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); + + if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); + + if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + + if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); + + if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_CLERIC, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + + if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); + + if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + + if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_CLERIC, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_CLERIC, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_CLERIC, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_CLERIC, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_KORD_SPELLCASTING_CLERIC, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_CLERIC, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_CLERIC, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_CLERIC, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_CLERIC, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_CLERIC, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_CLERIC, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + } +//:: End Cleric Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_DRUID) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_DRUID, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + + /* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); */ + + if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + + if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + +/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); + + if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */ + + if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + + // if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_DRUID, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); + +/* if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); */ + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_DRUID, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + +/* if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster); */ + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); */ + + if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); + + if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + +/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */ + + // if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_DRUID, oCaster)) + // nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_DRUID, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_DRUID, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 */ + +/* if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_DRUID, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_DRUID, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_DRUID, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; */ + +/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_DRUID, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2; */ + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_DRUID, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_DRUID, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + } +//:: End Druid Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_FAVOURED_SOUL) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_FAVOURED_SOUL, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); + + if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); + + if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); + + if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); + + if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + + // if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_FAVOURED_SOUL, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); + + if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + + if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); + + if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + + if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_KORD_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_FAVOURED_SOUL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + } +//:: End Favoured Soul Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_HEALER) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_HEALER, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + +/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); */ + + if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + // if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_HEALER, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); + +/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); */ + + if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); + + if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + +/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */ + + if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_HEALER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + // if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_HEALER, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + + if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); + +/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */ + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + +/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_HEALER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); */ + +/* if(GetHasFeat(FEAT_BFZ_SPELLCASTING_HEALER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2; */ + + if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_HEALER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_HEALER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_KORD_SPELLCASTING_HEALER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_HEALER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_HEALER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2; */ + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_HEALER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_HEALER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2; */ + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_HEALER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_HEALER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */ + + } +//:: End Healer Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_JUSTICEWW) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_JUSTICEWW, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + + if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); + + if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + +/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); */ + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); + +/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */ + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + + // if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_JUSTICEWW, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); + + // if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_JUSTICEWW, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + // if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_JUSTICEWW, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + + if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); + + if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + + if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_KORD_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_JUSTICEWW, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + } +//:: End Justice of Weald & Woe Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_KNIGHT_CHALICE) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } +/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); */ + + if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + + if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + +/* if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */ + +/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */ + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + +/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */ + + // if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + +/* if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; */ + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + + if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); + +/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */ + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + +/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ORCUS, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; ; + +/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_KNIGHT_CHALICE, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */ + + } +//:: End Knight of the Chalice Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_KNIGHT_MIDDLECIRCLE) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + +/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); */ + + if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + + if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); + +/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */ + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + +/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */ + + // if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + + if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); + +/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */ + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + +/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ORCUS, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */ + + } +//:: End Knight of the Middle Circle Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_NENTYAR_HUNTER) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + +/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); */ + + if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); + +/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); */ + +/* if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */ + +/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */ + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + +/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */ + + // if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + // if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + + if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); + +/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */ + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + +/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); */ + +/* if(GetHasFeat(FEAT_BFZ_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_KORD_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ORCUS, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_NENTYAR_HUNTER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */ + + } +//:: End Nentyar Hunter Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_OCULAR) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_OCULAR, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + // if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_OCULAR, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); + +/* if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); */ + + if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + +/* if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); + + if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); */ + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + +/* if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */ + + if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + + if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); + +/* if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); */ + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_OCULAR, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + // if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_OCULAR, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + +/* if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); */ + + // if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_OCULAR, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); */ + + // if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_OCULAR, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); + + // if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_OCULAR, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + + // if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_OCULAR, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_OCULAR, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster + 1) / 2 */ + +/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 */ + +/* if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_OLLAM, oCaster + 1) / 2 */ + +/* if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_OCULAR, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_OCULAR, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + } +//:: End Ocular Adept Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_PALADIN) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_PALADIN, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + // if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_PALADIN, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); + + if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + // if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_PALADIN, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + +/* if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); */ + + if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); + +/* if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */ + +/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */ + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + +/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */ + + if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_PALADIN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + + if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); + +/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */ + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + +/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_PALADIN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_PALADIN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_PALADIN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ORCUS, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_PALADIN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_PALADIN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_PALADIN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_PALADIN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */ + + } +//:: End Paladin Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_RANGER) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_RANGER, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); + + if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); + +/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); */ + + if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); + +/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */ + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + + if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_RANGER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + + if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); + + if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + + if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_RANGER, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_RANGER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_RANGER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_RANGER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_KORD_SPELLCASTING_RANGER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_RANGER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_RANGER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_RANGER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_RANGER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_RANGER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_RANGER, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + } +//:: End Ranger Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_SHAMAN) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_OASHAMAN, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + + if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); + + if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); + +/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); */ + + if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); + + if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + + if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); + + if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + + if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); + + if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + + if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_KORD_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_OASHAMAN, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + } +//:: End Shaman Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_SLAYER_OF_DOMIEL) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_DOMIEL, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + +/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); + + if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); */ + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + + if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); + +/* if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */ + +/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */ + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + +/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */ + + // if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_DOMIEL, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_DOMIEL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + + if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); + +/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */ + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + +/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_DOMIEL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_DOMIEL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_DOMIEL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ORCUS, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_DOMIEL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_DOMIEL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_DOMIEL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_DOMIEL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */ + + } +//:: End Slayer of Domiel Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_SOHEI) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_SOHEI, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + + if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); + +/* if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); */ + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + // if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_SOHEI, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + + // if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_SOHEI, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); + + if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); + +/* if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */ + +/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */ + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + + // if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_SOHEI, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); + + if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SOHEI, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + +/* if(GetHasFeat(FEAT_RUBY_VINDICATOR_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster); */ + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); */ + +/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */ + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + + if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_SOHEI, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_SOHEI, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SOHEI, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_SOHEI, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_SOHEI, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_SOHEI, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_SOHEI, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_SOHEI, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SOHEI, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + } +//:: End Sohei Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_SOLDIER_OF_LIGHT) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_SOL, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + +/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); */ + + if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + // if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_SOL, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + +/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); */ + + if(GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oCaster); + +/* if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */ + +/* if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */ + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + +/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */ + + if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SOL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + +/* if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); */ + +/* if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster);*/ + + /*if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */ + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + +/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_SOL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SOL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_OLLAM, oCaster + 1) / 2 + + if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ORCUS, oCaster + 1) / 2 + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster + 1) / 2 + + if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_SOL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_SOL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SOL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */ + + } +//:: End Soldier of Light Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_UR_PRIEST) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_UR_PRIEST, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } +/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); + + if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); */ + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + + if(GetHasFeat(FEAT_ELDISCIPLE_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + +/* if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); */ + +/* if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); + + if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); */ + + if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + +/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); + + if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); */ + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + +/* if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); */ + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + +/* if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); */ + +/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */ + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + + if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster + 1) / 2 + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster + 1) / 2 + + if(GetHasFeat(FEAT_KORD_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_OLLAM, oCaster + 1) / 2 + + if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ORCUS, oCaster + 1) / 2 + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster + 1) / 2 + + if(GetHasFeat(FEAT_TIAMAT_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_UR_PRIEST, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; + + } +//:: End Ur-Priest Divine PrC casting calculations + + + if (nCastingClass == CLASS_TYPE_VASSAL) + { + if (!GetHasFeat(FEAT_SF_CODE, oCaster) && GetHasFeat(FEAT_SACREDFIST_SPELLCASTING_VASSAL, oCaster)) + { + nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster); + } + +/* if(GetHasFeat(FEAT_BLIGHTLORD_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); + + if(GetHasFeat(FEAT_COMBAT_MEDIC_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); */ + + if(GetHasFeat(FEAT_CONTEMPLATIVE_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster); + +/* if(GetHasFeat(FEAT_FORESTMASTER_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster); */ + + // if(GetHasFeat(FEAT_FISTRAZIEL_SPELLCASTING_VASSAL, oCaster)) + // nDivine += GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster); + +/* if(GetHasFeat(FEAT_HEARTWARDER_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster); + + if(GetHasFeat(FEAT_HIEROPHANT_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster); */ + + if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster); + +/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */ + +/* if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); */ + + if(GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_VASSAL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_PSYCHIC_THEURGE_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster); + + if(GetHasFeat(FEAT_RUNECASTER_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + if(GetHasFeat(FEAT_SACREDPURIFIER_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + + if(GetHasFeat(FEAT_SAPPHIRE_HIERARCH_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster); + + if(GetHasFeat(FEAT_SHADOWBANE_STALKER_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster); + +/* if(GetHasFeat(FEAT_STORMLORD_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster); */ + + if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster); + +/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); + + if(GetHasFeat(FEAT_BFZ_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_VASSAL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2; + + if(GetHasFeat(FEAT_HATHRAN_SPELLCASTING_VASSAL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_KORD_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_OLLAM_SPELLCASTING_VASSAL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_ORCUS_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_ORCUS, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_SHINING_BLADE_SPELLCASTING_VASSAL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_TEMPUS_SPELLCASTING_VASSAL, oCaster)) + nDivine += GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster + 1) / 2 */ + + if(GetHasFeat(FEAT_WARPRIEST_SPELLCASTING_VASSAL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2; + +/* if(GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_VASSAL, oCaster)) + nDivine += (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3; */ + + } +//:: End Vassal of Bahamut Divine PrC casting calculations + + return nDivine; +} + +int GetFirstArcaneClassPosition(object oCaster = OBJECT_SELF) +{ + int i; + for(i = 1; i <= 8; i++) + { + if(GetIsArcaneClass(GetClassByPosition(i, oCaster), oCaster)) + return i; + } + + return 0; +} + +int GetFirstDivineClassPosition(object oCaster = OBJECT_SELF) +{ + int i; + for(i = 1; i <= 8; i++) + { + if(GetIsDivineClass(GetClassByPosition(i, oCaster), oCaster)) + return i; + } + + return 0; +} + +int GetPrimaryArcaneClass(object oCaster = OBJECT_SELF) +{ + int nClass = CLASS_TYPE_INVALID; + + if(GetPRCSwitch(PRC_CASTERLEVEL_FIRST_CLASS_RULE)) + { + int iArcanePos = GetFirstArcaneClassPosition(oCaster); + if (!iArcanePos) return CLASS_TYPE_INVALID; // no arcane casting class + + nClass = GetClassByPosition(iArcanePos, oCaster); + } + else + { + int nClassLvl = 0; + + int i, nClassTmp; + for(i = 1; i <= 8; i++) + { + nClassTmp = GetClassByPosition(i, oCaster); + if(GetIsArcaneClass(nClassTmp, oCaster) && nClassTmp != CLASS_TYPE_SUBLIME_CHORD) + { + if(GetLevelByClass(nClassTmp, oCaster) > nClassLvl) + { + nClass = nClassTmp; + nClassLvl = GetLevelByClass(nClass, oCaster); + } + } + } + if(!nClassLvl) + return CLASS_TYPE_INVALID; + } + + //raks, Arkamoi, driders and dragons cast as sorcs + if(nClass == CLASS_TYPE_OUTSIDER + || nClass == CLASS_TYPE_SHAPECHANGER + || nClass == CLASS_TYPE_ABERRATION + || nClass == CLASS_TYPE_DRAGON + || nClass == CLASS_TYPE_MONSTROUS) + nClass = CLASS_TYPE_SORCERER; + + if(nClass == CLASS_TYPE_FEY && GetRacialType(oCaster) == RACIAL_TYPE_GLOURA) + { + nClass = CLASS_TYPE_BARD; + } + + return nClass; +} + +int GetPrimaryDivineClass(object oCaster = OBJECT_SELF) +{ + int nClass = CLASS_TYPE_INVALID; + + if(GetPRCSwitch(PRC_CASTERLEVEL_FIRST_CLASS_RULE)) + { + int iDivinePos = GetFirstDivineClassPosition(oCaster); + if (!iDivinePos) return CLASS_TYPE_INVALID; // no Divine casting class + + nClass = GetClassByPosition(iDivinePos, oCaster); + } + else + { + int i, nClassTmp, nClassLvl; + for(i = 1; i <= 8; i++) + { + nClassTmp = GetClassByPosition(i, oCaster); + if(GetIsDivineClass(nClassTmp, oCaster)) + { + if(GetLevelByClass(nClassTmp, oCaster) > nClassLvl) + { + nClass = nClassTmp; + nClassLvl = GetLevelByClass(nClass, oCaster); + } + } + } + if(!nClassLvl) + return CLASS_TYPE_INVALID; + } + + return nClass; +} + +int GetPrimarySpellcastingClass(object oCaster = OBJECT_SELF) +{ + int bFirst = GetPRCSwitch(PRC_CASTERLEVEL_FIRST_CLASS_RULE); + int nClass; + + int i, nClassTmp, nClassLvl; + for(i = 1; i <= 8; i++) + { + nClassTmp = GetClassByPosition(i, oCaster); + if(GetIsArcaneClass(nClassTmp, oCaster) + || GetIsDivineClass(nClassTmp, oCaster) + && nClassTmp != CLASS_TYPE_SUBLIME_CHORD) + { + if(bFirst) + { + return nClass; + } + else if(GetLevelByClass(nClassTmp, oCaster) > nClassLvl) + { + nClass = nClassTmp; + nClassLvl = GetLevelByClass(nClass, oCaster); + } + } + } + if(!nClassLvl) + return CLASS_TYPE_INVALID; + + return nClass; +} + +int PracticedSpellcasting(object oCaster, int iCastingClass, int iCastingLevels) +{ + int nFeat; + int iAdjustment = GetHitDice(oCaster) - iCastingLevels; + if (iAdjustment > 4) iAdjustment = 4; + if (iAdjustment < 0) iAdjustment = 0; + + switch(iCastingClass) + { + case CLASS_TYPE_BARD: nFeat = FEAT_PRACTICED_SPELLCASTER_BARD; break; + case CLASS_TYPE_SORCERER: nFeat = FEAT_PRACTICED_SPELLCASTER_SORCERER; break; + case CLASS_TYPE_WIZARD: nFeat = FEAT_PRACTICED_SPELLCASTER_WIZARD; break; + case CLASS_TYPE_CLERIC: nFeat = FEAT_PRACTICED_SPELLCASTER_CLERIC; break; + case CLASS_TYPE_DRUID: nFeat = FEAT_PRACTICED_SPELLCASTER_DRUID; break; + case CLASS_TYPE_PALADIN: nFeat = FEAT_PRACTICED_SPELLCASTER_PALADIN; break; + case CLASS_TYPE_RANGER: nFeat = FEAT_PRACTICED_SPELLCASTER_RANGER; break; + case CLASS_TYPE_ASSASSIN: nFeat = FEAT_PRACTICED_SPELLCASTER_ASSASSIN; break; + case CLASS_TYPE_BLACKGUARD: nFeat = FEAT_PRACTICED_SPELLCASTER_BLACKGUARD; break; + case CLASS_TYPE_KNIGHT_WEAVE: nFeat = FEAT_PRACTICED_SPELLCASTER_KOTW; break; + case CLASS_TYPE_OCULAR: nFeat = FEAT_PRACTICED_SPELLCASTER_OCULAR; break; + case CLASS_TYPE_HEXBLADE: nFeat = FEAT_PRACTICED_SPELLCASTER_HEXBLADE; break; + case CLASS_TYPE_DUSKBLADE: nFeat = FEAT_PRACTICED_SPELLCASTER_DUSKBLADE; break; + case CLASS_TYPE_HEALER: nFeat = FEAT_PRACTICED_SPELLCASTER_HEALER; break; + case CLASS_TYPE_KNIGHT_CHALICE: nFeat = FEAT_PRACTICED_SPELLCASTER_KNIGHT_CHALICE; break; + case CLASS_TYPE_NENTYAR_HUNTER: nFeat = FEAT_PRACTICED_SPELLCASTER_NENTYAR; break; + case CLASS_TYPE_VASSAL: nFeat = FEAT_PRACTICED_SPELLCASTER_VASSAL; break; + case CLASS_TYPE_UR_PRIEST: nFeat = FEAT_PRACTICED_SPELLCASTER_UR_PRIEST; break; + case CLASS_TYPE_SOLDIER_OF_LIGHT: nFeat = FEAT_PRACTICED_SPELLCASTER_SOLDIER_OF_LIGHT; break; + case CLASS_TYPE_SHADOWLORD: nFeat = FEAT_PRACTICED_SPELLCASTER_SHADOWLORD; break; + case CLASS_TYPE_JUSTICEWW: nFeat = FEAT_PRACTICED_SPELLCASTER_JUSTICEWW; break; + case CLASS_TYPE_KNIGHT_MIDDLECIRCLE: nFeat = FEAT_PRACTICED_SPELLCASTER_KNIGHT_MIDDLECIRCLE; break; + case CLASS_TYPE_SHAMAN: nFeat = FEAT_PRACTICED_SPELLCASTER_SHAMAN; break; + case CLASS_TYPE_SLAYER_OF_DOMIEL: nFeat = FEAT_PRACTICED_SPELLCASTER_SLAYER_OF_DOMIEL; break; + case CLASS_TYPE_SUEL_ARCHANAMACH: nFeat = FEAT_PRACTICED_SPELLCASTER_SUEL_ARCHANAMACH; break; + case CLASS_TYPE_FAVOURED_SOUL: nFeat = FEAT_PRACTICED_SPELLCASTER_FAVOURED_SOUL; break; + case CLASS_TYPE_SOHEI: nFeat = FEAT_PRACTICED_SPELLCASTER_SOHEI; break; + case CLASS_TYPE_CELEBRANT_SHARESS: nFeat = FEAT_PRACTICED_SPELLCASTER_CELEBRANT_SHARESS; break; + case CLASS_TYPE_WARMAGE: nFeat = FEAT_PRACTICED_SPELLCASTER_WARMAGE; break; + case CLASS_TYPE_DREAD_NECROMANCER: nFeat = FEAT_PRACTICED_SPELLCASTER_DREAD_NECROMANCER; break; + case CLASS_TYPE_CULTIST_SHATTERED_PEAK: nFeat = FEAT_PRACTICED_SPELLCASTER_CULTIST; break; + case CLASS_TYPE_ARCHIVIST: nFeat = FEAT_PRACTICED_SPELLCASTER_ARCHIVIST; break; + case CLASS_TYPE_BEGUILER: nFeat = FEAT_PRACTICED_SPELLCASTER_BEGUILER; break; + case CLASS_TYPE_BLIGHTER: nFeat = FEAT_PRACTICED_SPELLCASTER_BLIGHTER; break; + case CLASS_TYPE_HARPER: nFeat = FEAT_PRACTICED_SPELLCASTER_HARPER; break; + default: return 0; + } + + if(GetHasFeat(nFeat, oCaster)) + return iAdjustment; + + return 0; +} + +int GetSpellSchool(int iSpellId) +{ + string sSpellSchool = Get2DACache("spells", "School", iSpellId);//lookup_spell_school(iSpellId); + + if (sSpellSchool == "A") return SPELL_SCHOOL_ABJURATION; + else if (sSpellSchool == "C") return SPELL_SCHOOL_CONJURATION; + else if (sSpellSchool == "D") return SPELL_SCHOOL_DIVINATION; + else if (sSpellSchool == "E") return SPELL_SCHOOL_ENCHANTMENT; + else if (sSpellSchool == "V") return SPELL_SCHOOL_EVOCATION; + else if (sSpellSchool == "I") return SPELL_SCHOOL_ILLUSION; + else if (sSpellSchool == "N") return SPELL_SCHOOL_NECROMANCY; + else if (sSpellSchool == "T") return SPELL_SCHOOL_TRANSMUTATION; + else return SPELL_SCHOOL_GENERAL; + + return -1; +} + +/*int GetIsHealingSpell(int nSpellId) +{ + if ( nSpellId == SPELL_CURE_CRITICAL_WOUNDS + || nSpellId == SPELL_CURE_LIGHT_WOUNDS + || nSpellId == SPELL_CURE_MINOR_WOUNDS + || nSpellId == SPELL_CURE_MODERATE_WOUNDS + || nSpellId == SPELL_CURE_SERIOUS_WOUNDS + || nSpellId == SPELL_GREATER_RESTORATION + || nSpellId == SPELL_HEAL + || nSpellId == SPELL_HEALING_CIRCLE + || nSpellId == SPELL_MASS_HEAL + || nSpellId == SPELL_MONSTROUS_REGENERATION + || nSpellId == SPELL_REGENERATE + //End of stock NWN spells + || nSpellId == SPELL_MASS_CURE_LIGHT + || nSpellId == SPELL_MASS_CURE_MODERATE + || nSpellId == SPELL_MASS_CURE_SERIOUS + || nSpellId == SPELL_MASS_CURE_CRITICAL + || nSpellId == SPELL_PANACEA + ) + return TRUE; + + return FALSE; +}*/ + +int ArchmageSpellPower(object oCaster) +{ + if(GetHasFeat(FEAT_SPELL_POWER_V, oCaster)) + return 5; + if(GetHasFeat(FEAT_SPELL_POWER_IV, oCaster)) + return 4; + if(GetHasFeat(FEAT_SPELL_POWER_III, oCaster)) + return 3; + if(GetHasFeat(FEAT_SPELL_POWER_II, oCaster)) + return 2; + if(GetHasFeat(FEAT_SPELL_POWER_I, oCaster)) + return 1; + + return 0; +} + +int ShadowWeave(object oCaster, int iSpellID, int nSpellSchool = -1) +{ + if(!GetHasFeat(FEAT_SHADOWWEAVE,oCaster)) + return 0; + + if (nSpellSchool == -1) + nSpellSchool = GetSpellSchool(iSpellID); + + // Bonus for spells of Enhancement, Necromancy and Illusion schools and spells with Darkness descriptor + if(nSpellSchool == SPELL_SCHOOL_ENCHANTMENT + || nSpellSchool == SPELL_SCHOOL_NECROMANCY + || nSpellSchool == SPELL_SCHOOL_ILLUSION + || GetHasDescriptor(iSpellID, DESCRIPTOR_DARKNESS)) + { + return 1; + } + // Penalty to spells of Evocation and Transmutation schools, except for those with Darkness descriptor + else if(nSpellSchool == SPELL_SCHOOL_EVOCATION + || nSpellSchool == SPELL_SCHOOL_TRANSMUTATION) + { + return -1; + } + + return 0; +} + +int AirAdept(object oCaster, int iSpellID) +{ + if(!GetHasDescriptor(iSpellID, DESCRIPTOR_AIR)) + return 0; + + int nBoost = 0; + + if(GetHasFeat(FEAT_AIR_MEPHLING, oCaster)) + nBoost += 1; + + return nBoost; +} + +int WaterAdept(object oCaster, int iSpellID) +{ + if(!GetHasDescriptor(iSpellID, DESCRIPTOR_WATER)) + return 0; + + int nBoost = 0; + + if(GetHasFeat(FEAT_WATER_MEPHLING, oCaster)) + nBoost += 1; + + return nBoost; +} + +int FireAdept(object oCaster, int iSpellID) +{ + if(!GetHasDescriptor(iSpellID, DESCRIPTOR_FIRE)) + return 0; + + int nBoost = 0; + + if(GetHasFeat(FEAT_FIRE_ADEPT, oCaster)) + nBoost += 1; + + if(GetHasFeat(FEAT_FIRE_MEPHLING, oCaster)) + nBoost += 1; + + if(GetHasFeat(FEAT_BLOODLINE_OF_FIRE, oCaster)) + nBoost += 2; + + if(GetRacialType(oCaster) == RACIAL_TYPE_REDSPAWN_ARCANISS) + nBoost += 2; + + return nBoost; +} + +int DriftMagic(object oCaster, int iSpellID) +{ + if(!GetHasDescriptor(iSpellID, DESCRIPTOR_EARTH)) + return 0; + + int nBoost = 0; + + if(GetHasFeat(FEAT_DRIFT_MAGIC, oCaster)) + nBoost += 1; + + if(GetHasFeat(FEAT_EARTH_MEPHLING, oCaster)) + nBoost += 1; + + return nBoost; +} +/*int DriftMagic(object oCaster, int iSpellID) +{ + if(GetHasDescriptor(iSpellID, DESCRIPTOR_EARTH) && GetHasFeat(FEAT_DRIFT_MAGIC, oCaster)) + return 1; + + else if(GetHasDescriptor(iSpellID, DESCRIPTOR_EARTH) && GetHasFeat(FEAT_EARTH_MEPHLING, oCaster)) + return 1; + + return 0; +}*/ + +int Soulcaster(object oCaster, int iSpellID) +{ + if(GetLocalInt(oCaster, "SpellEssentia"+IntToString(iSpellID))) + { + int nReturn = GetLocalInt(oCaster, "SpellEssentia"+IntToString(iSpellID)); + DelayCommand(1.0, DeleteLocalInt(oCaster, "SpellEssentia"+IntToString(iSpellID))); + return nReturn; + } + + return 0; +} + +int StormMagic(object oCaster) +{ + if(!GetHasFeat(FEAT_STORMMAGIC, oCaster) && !GetHasFeat(FEAT_FROZEN_MAGIC, oCaster)) return 0; + + int nBoost = 0; + + int nWeather = GetWeather(GetArea(oCaster)); + if(nWeather == WEATHER_RAIN && GetHasFeat(FEAT_STORMMAGIC, oCaster)) + nBoost += 1; + if(nWeather == WEATHER_SNOW && GetHasFeat(FEAT_STORMMAGIC, oCaster)) + nBoost += 1; + if(nWeather == WEATHER_SNOW && GetHasFeat(FEAT_FROZEN_MAGIC, oCaster)) + nBoost += 2; + if (GetLocalInt(GetArea(oCaster),"FrozenMagic") && GetHasFeat(FEAT_FROZEN_MAGIC, oCaster) && nWeather != WEATHER_SNOW) + nBoost += 2; + + return nBoost; +} + +int DivinationPower(object oCaster, int nSpellSchool) +{ + int nClass = GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster); + if(!nClass) return 0; + + int nBoost = (nClass + 2) / 3; + + if (nSpellSchool != SPELL_SCHOOL_DIVINATION) + nBoost *= -1; // Negative if it's not a divination spell + + return nBoost; +} + +int CormanthyranMoonMagic(object oCaster) +{ + if (!GetHasFeat(FEAT_CORMANTHYRAN_MOON_MAGIC, oCaster)) return 0; + + object oArea = GetArea(oCaster); + + // The moon must be visible. Thus, outdoors, at night, with no rain. + if (GetWeather(oArea) != WEATHER_RAIN && GetWeather(oArea) != WEATHER_SNOW && + GetIsNight() && !GetIsAreaInterior(oArea)) + { + return 2; + } + return 0; +} + +int Nentyar(object oCaster, int nCastingClass) +{ + if (nCastingClass == CLASS_TYPE_NENTYAR_HUNTER) + { + int nBonus = GetLevelByClass(CLASS_TYPE_DRUID, oCaster) + GetLevelByClass(CLASS_TYPE_CLERIC, oCaster) + GetLevelByClass(CLASS_TYPE_RANGER, oCaster)/2; + return nBonus; + } + return 0; +} + +int ShieldDwarfWarder(object oCaster) +{ + if (!GetHasFeat(FEAT_SHIELD_DWARF_WARDER, oCaster)) return 0; + + object oTarget = PRCGetSpellTargetObject(); + // If it's an item that grants an AC bonus + int nBase = GetBaseItemType(oTarget); + if (nBase == BASE_ITEM_SMALLSHIELD || nBase == BASE_ITEM_LARGESHIELD || nBase == BASE_ITEM_TOWERSHIELD || nBase == BASE_ITEM_ARMOR) + return 1; + + return 0; +} + +int DarkSpeech(object oCaster) +{ + if (GetHasSpellEffect(SPELL_DARK_SPEECH_POWER, oCaster)) + { + ExecuteScript("prc_dark_power", oCaster); + return 1; + } + return 0; +} + +int DomainPower(object oCaster, int nSpellID, int nSpellSchool = -1) +{ + int nBonus = 0; + if (nSpellSchool == -1) + nSpellSchool = GetSpellSchool(nSpellID); + + // Boosts Caster level with the Illusion school by 1 + if (nSpellSchool == SPELL_SCHOOL_ILLUSION && GetHasFeat(FEAT_DOMAIN_POWER_GNOME, oCaster)) + nBonus += 1; + + // Boosts Caster level with the Illusion school by 1 + if (nSpellSchool == SPELL_SCHOOL_ILLUSION && GetHasFeat(FEAT_DOMAIN_POWER_ILLUSION, oCaster)) + nBonus += 1; + + // Boosts Caster level with healing spells + if (GetIsOfSubschool(nSpellID, SUBSCHOOL_HEALING) && GetHasFeat(FEAT_HEALING_DOMAIN_POWER, oCaster)) + nBonus += 1; + + // Boosts Caster level with the Divination school by 1 + if (nSpellSchool == SPELL_SCHOOL_DIVINATION && GetHasFeat(FEAT_KNOWLEDGE_DOMAIN_POWER, oCaster)) + nBonus += 1; + + // Boosts Caster level with evil spells by 1 + if (GetHasDescriptor(nSpellID, DESCRIPTOR_EVIL) && GetHasFeat(FEAT_EVIL_DOMAIN_POWER, oCaster)) + nBonus += 1; + + // Boosts Caster level with good spells by 1 + if (GetHasDescriptor(nSpellID, DESCRIPTOR_GOOD) && GetHasFeat(FEAT_GOOD_DOMAIN_POWER, oCaster)) + nBonus += 1; + + return nBonus; +} + +int TherapeuticMantle(object oCaster, int nSpellID) +{ + int nReturn; + // Boosts Caster level with healing spells + if (GetIsMeldBound(oCaster, MELD_THERAPEUTIC_MANTLE) == CHAKRA_SHOULDERS && GetIsOfSubschool(nSpellID, SUBSCHOOL_HEALING)) + nReturn = GetEssentiaInvested(oCaster, MELD_THERAPEUTIC_MANTLE); + + return nReturn; +} + +int DeathKnell(object oCaster) +{ + // If you do have the spell effect, return a +1 bonus to caster level + return GetHasSpellEffect(SPELL_DEATH_KNELL, oCaster); +} + +int DraconicPower(object oCaster = OBJECT_SELF) +{ + return GetHasFeat(FEAT_DRACONIC_POWER, oCaster); +} + +int SongOfArcanePower(object oCaster = OBJECT_SELF) +{ + int nBonus = GetLocalInt(oCaster, "SongOfArcanePower"); + DeleteLocalInt(oCaster, "SongOfArcanePower"); + + int nLevel = GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster); + nBonus += (nLevel + 2)/3; + + if(nBonus) + return nBonus; + + return 0; +} + +int TrueNecromancy(object oCaster, int iSpellID, string sType, int nSpellSchool = -1) +{ + int iTNLevel = GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster); + if (!iTNLevel) + return 0; + if (nSpellSchool == -1) + nSpellSchool = GetSpellSchool(iSpellID); + if (nSpellSchool != SPELL_SCHOOL_NECROMANCY) + return 0; + + if (sType == "ARCANE") + return GetLevelByTypeDivine(oCaster); // TN and arcane levels already added. + + if (sType == "DIVINE") + return GetLevelByTypeArcane(oCaster); + + return 0; +} + +int UrPriestCL(object oCaster, int nCastingClass) +{ + // Add 1/2 levels in all other casting classes except cleric + if (nCastingClass == CLASS_TYPE_UR_PRIEST) + { + int nTotal = 0; + int iFirstDivine = GetPrimaryDivineClass(oCaster); + int iBest = 0; + int iClass1 = GetClassByPosition(1, oCaster); + int iClass2 = GetClassByPosition(2, oCaster); + int iClass3 = GetClassByPosition(3, oCaster); + int iClass4 = GetClassByPosition(4, oCaster); + int iClass5 = GetClassByPosition(5, oCaster); + int iClass6 = GetClassByPosition(6, oCaster); + int iClass7 = GetClassByPosition(7, oCaster); + int iClass8 = GetClassByPosition(8, oCaster); + + int iClass1Lev = GetLevelByPosition(1, oCaster); + int iClass2Lev = GetLevelByPosition(2, oCaster); + int iClass3Lev = GetLevelByPosition(3, oCaster); + int iClass4Lev = GetLevelByPosition(4, oCaster); + int iClass5Lev = GetLevelByPosition(5, oCaster); + int iClass6Lev = GetLevelByPosition(6, oCaster); + int iClass7Lev = GetLevelByPosition(7, oCaster); + int iClass8Lev = GetLevelByPosition(8, oCaster); + + /*if (iClass1 == CLASS_TYPE_PALADIN || iClass1 == CLASS_TYPE_RANGER) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0; + if (iClass2 == CLASS_TYPE_PALADIN || iClass2 == CLASS_TYPE_RANGER) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0; + if (iClass3 == CLASS_TYPE_PALADIN || iClass3 == CLASS_TYPE_RANGER) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0; + + if (iClass1 == iFirstDivine) iClass1Lev += GetDivinePRCLevels(oCaster); + if (iClass2 == iFirstDivine) iClass2Lev += GetDivinePRCLevels(oCaster); + if (iClass3 == iFirstDivine) iClass3Lev += GetDivinePRCLevels(oCaster); + + iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev); + iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev); + iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev); + + if (!GetIsDivineClass(iClass1, oCaster) || iClass1 == CLASS_TYPE_UR_PRIEST) iClass1Lev = 0; + if (!GetIsDivineClass(iClass2, oCaster) || iClass2 == CLASS_TYPE_UR_PRIEST) iClass2Lev = 0; + if (!GetIsDivineClass(iClass3, oCaster) || iClass3 == CLASS_TYPE_UR_PRIEST) iClass3Lev = 0; + + nTotal += iClass1Lev + iClass2Lev + iClass3Lev; + if (DEBUG) DoDebug("UrPriestCL Divine - iClass1Lev "+IntToString(iClass1Lev)+" iClass2Lev "+IntToString(iClass2Lev)+" iClass3Lev "+IntToString(iClass3Lev));*/ + + int iFirstArcane = GetPrimaryArcaneClass(oCaster); + iClass1 = GetClassByPosition(1, oCaster); + iClass2 = GetClassByPosition(2, oCaster); + iClass3 = GetClassByPosition(3, oCaster); + iClass4 = GetClassByPosition(4, oCaster); + iClass5 = GetClassByPosition(5, oCaster); + iClass6 = GetClassByPosition(6, oCaster); + iClass7 = GetClassByPosition(7, oCaster); + iClass8 = GetClassByPosition(8, oCaster); + + iClass1Lev = GetLevelByPosition(1, oCaster); + iClass2Lev = GetLevelByPosition(2, oCaster); + iClass3Lev = GetLevelByPosition(3, oCaster); + iClass4Lev = GetLevelByPosition(4, oCaster); + iClass5Lev = GetLevelByPosition(5, oCaster); + iClass6Lev = GetLevelByPosition(6, oCaster); + iClass7Lev = GetLevelByPosition(7, oCaster); + iClass8Lev = GetLevelByPosition(8, oCaster); + + if (iClass1 == CLASS_TYPE_HEXBLADE) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0; + if (iClass2 == CLASS_TYPE_HEXBLADE) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0; + if (iClass3 == CLASS_TYPE_HEXBLADE) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0; + if (iClass4 == CLASS_TYPE_HEXBLADE) iClass4Lev = (iClass4Lev >= 4) ? (iClass4Lev / 2) : 0; + if (iClass5 == CLASS_TYPE_HEXBLADE) iClass5Lev = (iClass5Lev >= 4) ? (iClass5Lev / 2) : 0; + if (iClass6 == CLASS_TYPE_HEXBLADE) iClass6Lev = (iClass6Lev >= 4) ? (iClass6Lev / 2) : 0; + if (iClass7 == CLASS_TYPE_HEXBLADE) iClass7Lev = (iClass7Lev >= 4) ? (iClass7Lev / 2) : 0; + if (iClass8 == CLASS_TYPE_HEXBLADE) iClass8Lev = (iClass8Lev >= 4) ? (iClass8Lev / 2) : 0; + + if (iClass1 == iFirstArcane) iClass1Lev += GetArcanePRCLevels(oCaster, iClass1); + if (iClass2 == iFirstArcane) iClass2Lev += GetArcanePRCLevels(oCaster, iClass2); + if (iClass3 == iFirstArcane) iClass3Lev += GetArcanePRCLevels(oCaster, iClass3); + if (iClass4 == iFirstArcane) iClass4Lev += GetArcanePRCLevels(oCaster, iClass4); + if (iClass5 == iFirstArcane) iClass5Lev += GetArcanePRCLevels(oCaster, iClass5); + if (iClass6 == iFirstArcane) iClass6Lev += GetArcanePRCLevels(oCaster, iClass6); + if (iClass7 == iFirstArcane) iClass7Lev += GetArcanePRCLevels(oCaster, iClass7); + if (iClass8 == iFirstArcane) iClass8Lev += GetArcanePRCLevels(oCaster, iClass8); + + iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev); + iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev); + iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev); + iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass4Lev); + iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass5Lev); + iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass5Lev); + iClass7Lev += PracticedSpellcasting(oCaster, iClass7, iClass6Lev); + iClass8Lev += PracticedSpellcasting(oCaster, iClass8, iClass7Lev); + + if (!GetIsArcaneClass(iClass1, oCaster)) iClass1Lev = 0; + if (!GetIsArcaneClass(iClass2, oCaster)) iClass2Lev = 0; + if (!GetIsArcaneClass(iClass3, oCaster)) iClass3Lev = 0; + if (!GetIsArcaneClass(iClass4, oCaster)) iClass4Lev = 0; + if (!GetIsArcaneClass(iClass5, oCaster)) iClass5Lev = 0; + if (!GetIsArcaneClass(iClass6, oCaster)) iClass6Lev = 0; + if (!GetIsArcaneClass(iClass7, oCaster)) iClass7Lev = 0; + if (!GetIsArcaneClass(iClass8, oCaster)) iClass8Lev = 0; + + + nTotal += iClass1Lev + iClass2Lev + iClass3Lev + iClass4Lev + iClass5Lev + iClass6Lev + iClass7Lev + iClass8Lev; + + if (DEBUG) DoDebug("UrPriestCL Arcane - iClass1Lev "+IntToString(iClass1Lev)+" iClass2Lev " + +IntToString(iClass2Lev)+" iClass3Lev " + +IntToString(iClass3Lev)+" iClass4Lev " + +IntToString(iClass4Lev)+" iClass5Lev " + +IntToString(iClass5Lev)+" iClass6Lev " + +IntToString(iClass6Lev)+" iClass7Lev " + +IntToString(iClass7Lev)+" iClass8Lev " + +IntToString(iClass8Lev)); + + if (DEBUG) DoDebug("UrPriestCL Total - nTotal "+IntToString(nTotal)); + return nTotal/2; + } + return 0; +} + +int BlighterCL(object oCaster, int nCastingClass) +{ + if (nCastingClass == CLASS_TYPE_BLIGHTER) + { + int nBonus = GetLevelByClass(CLASS_TYPE_DRUID, oCaster); + return nBonus; + } + return 0; +} + +int ReserveFeatCL(object oCaster, int iSpellId) +{ + int nSpellSchool = GetSpellSchool(iSpellId); + int nCLBonus = 0; + + if (GetLocalInt(oCaster, "ReserveFeatsRunning") == TRUE) + { + if (GetHasDescriptor(iSpellId, DESCRIPTOR_ACID) && GetHasFeat(FEAT_ACIDIC_SPLATTER, oCaster)) nCLBonus += 1; + if (GetHasDescriptor(iSpellId, DESCRIPTOR_FIRE) && GetHasFeat(FEAT_FIERY_BURST, oCaster)) nCLBonus += 1; + if (GetHasDescriptor(iSpellId, DESCRIPTOR_COLD) && GetHasFeat(FEAT_WINTERS_BLAST, oCaster)) nCLBonus += 1; + if (GetHasDescriptor(iSpellId, DESCRIPTOR_ELECTRICITY) && GetHasFeat(FEAT_STORM_BOLT, oCaster)) nCLBonus += 1; + if (GetHasDescriptor(iSpellId, DESCRIPTOR_SONIC) && GetHasFeat(FEAT_CLAP_OF_THUNDER, oCaster)) nCLBonus += 1; + if (GetIsOfSubschool(iSpellId, SUBSCHOOL_HEALING) && GetHasFeat(FEAT_TOUCH_OF_HEALING, oCaster)) nCLBonus += 1; + if (GetIsOfSubschool(iSpellId, SUBSCHOOL_TELEPORTATION) && GetHasFeat(FEAT_DIMENSIONAL_JAUNT, oCaster)) nCLBonus += 1; + if (nSpellSchool == SPELL_SCHOOL_ABJURATION && GetHasFeat(FEAT_MYSTIC_BACKLASH, oCaster)) nCLBonus += 1; + if (nSpellSchool == SPELL_SCHOOL_NECROMANCY && GetHasFeat(FEAT_SICKENING_GRASP, oCaster)) nCLBonus += 1; + if (GetIsFromDomain(iSpellId, "wardom") && GetHasFeat(FEAT_HOLY_WARRIOR, oCaster)) nCLBonus += 1; + if (GetHasDescriptor(iSpellId, DESCRIPTOR_EARTH) && GetHasFeat(FEAT_CLUTCH_OF_EARTH, oCaster)) nCLBonus += 1; + if (GetHasDescriptor(iSpellId, DESCRIPTOR_AIR) && GetHasFeat(FEAT_BORNE_ALOFT, oCaster)) nCLBonus += 1; + if ((nSpellSchool == SPELL_SCHOOL_ABJURATION) && GetHasFeat(FEAT_PROTECTIVE_WARD, oCaster)) nCLBonus += 1; + if (GetHasDescriptor(iSpellId, DESCRIPTOR_DARKNESS) && GetHasFeat(FEAT_SHADOW_VEIL, oCaster)) nCLBonus += 1; + if (GetHasDescriptor(iSpellId, DESCRIPTOR_LIGHT) && GetHasFeat(FEAT_SUNLIGHT_EYES, oCaster)) nCLBonus += 1; + if ((nSpellSchool == SPELL_SCHOOL_ENCHANTMENT) && GetHasFeat(FEAT_TOUCH_OF_DISTRACTION, oCaster)) nCLBonus += 1; + if (GetIsFromDomain(iSpellId, "dethdom") && GetHasFeat(FEAT_CHARNEL_MIASMA, oCaster)) nCLBonus += 1; + if (GetHasDescriptor(iSpellId, DESCRIPTOR_WATER) && GetHasFeat(FEAT_DROWNING_GLANCE, oCaster)) nCLBonus += 1; + if (GetHasDescriptor(iSpellId, DESCRIPTOR_FORCE) && GetHasFeat(FEAT_INVISIBLE_NEEDLE, oCaster)) nCLBonus += 1; + if (GetIsOfSubschool(iSpellId, SUBSCHOOL_SUMMONING) && GetHasFeat(FEAT_SUMMON_ELEMENTAL, oCaster)) nCLBonus += 1; + if (GetIsOfSubschool(iSpellId, SUBSCHOOL_SUMMONING) && GetHasFeat(FEAT_DIMENSIONAL_REACH, oCaster)) nCLBonus += 1; + if (GetHasDescriptor(iSpellId, DESCRIPTOR_AIR) && GetHasFeat(FEAT_HURRICANE_BREATH, oCaster)) nCLBonus += 1; + if (GetIsOfSubschool(iSpellId, SUBSCHOOL_POLYMORPH) && GetHasFeat(FEAT_MINOR_SHAPESHIFT, oCaster)) nCLBonus += 1; + if (GetIsOfSubschool(iSpellId, SUBSCHOOL_GLAMER) && GetHasFeat(FEAT_FACECHANGER, oCaster)) nCLBonus += 1; + return nCLBonus; + } + else return 0; +} + +int GetLevelByTypeArcane(object oCaster = OBJECT_SELF) +{ + int iFirstArcane = GetPrimaryArcaneClass(oCaster); + int iBest = 0; + int iClass1 = GetClassByPosition(1, oCaster); + int iClass2 = GetClassByPosition(2, oCaster); + int iClass3 = GetClassByPosition(3, oCaster); + int iClass4 = GetClassByPosition(4, oCaster); + int iClass5 = GetClassByPosition(5, oCaster); + int iClass6 = GetClassByPosition(6, oCaster); + int iClass7 = GetClassByPosition(7, oCaster); + int iClass8 = GetClassByPosition(8, oCaster); + + int iClass1Lev = GetLevelByPosition(1, oCaster); + int iClass2Lev = GetLevelByPosition(2, oCaster); + int iClass3Lev = GetLevelByPosition(3, oCaster); + int iClass4Lev = GetLevelByPosition(4, oCaster); + int iClass5Lev = GetLevelByPosition(5, oCaster); + int iClass6Lev = GetLevelByPosition(6, oCaster); + int iClass7Lev = GetLevelByPosition(7, oCaster); + int iClass8Lev = GetLevelByPosition(8, oCaster); + + if (iClass1 == CLASS_TYPE_HEXBLADE) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0; + if (iClass2 == CLASS_TYPE_HEXBLADE) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0; + if (iClass3 == CLASS_TYPE_HEXBLADE) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0; + if (iClass4 == CLASS_TYPE_HEXBLADE) iClass4Lev = (iClass4Lev >= 4) ? (iClass4Lev / 2) : 0; + if (iClass5 == CLASS_TYPE_HEXBLADE) iClass5Lev = (iClass5Lev >= 4) ? (iClass5Lev / 2) : 0; + if (iClass6 == CLASS_TYPE_HEXBLADE) iClass6Lev = (iClass6Lev >= 4) ? (iClass6Lev / 2) : 0; + if (iClass7 == CLASS_TYPE_HEXBLADE) iClass7Lev = (iClass7Lev >= 4) ? (iClass7Lev / 2) : 0; + if (iClass8 == CLASS_TYPE_HEXBLADE) iClass8Lev = (iClass8Lev >= 4) ? (iClass8Lev / 2) : 0; + + if (iClass1 == iFirstArcane) iClass1Lev += GetArcanePRCLevels(oCaster, iClass1); + if (iClass2 == iFirstArcane) iClass2Lev += GetArcanePRCLevels(oCaster, iClass2); + if (iClass3 == iFirstArcane) iClass3Lev += GetArcanePRCLevels(oCaster, iClass3); + if (iClass4 == iFirstArcane) iClass4Lev += GetArcanePRCLevels(oCaster, iClass4); + if (iClass5 == iFirstArcane) iClass5Lev += GetArcanePRCLevels(oCaster, iClass5); + if (iClass6 == iFirstArcane) iClass6Lev += GetArcanePRCLevels(oCaster, iClass6); + if (iClass7 == iFirstArcane) iClass7Lev += GetArcanePRCLevels(oCaster, iClass7); + if (iClass8 == iFirstArcane) iClass8Lev += GetArcanePRCLevels(oCaster, iClass8); + + iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev); + iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev); + iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev); + iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass4Lev); + iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass5Lev); + iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass6Lev); + iClass7Lev += PracticedSpellcasting(oCaster, iClass7, iClass7Lev); + iClass8Lev += PracticedSpellcasting(oCaster, iClass8, iClass8Lev); + + if (!GetIsArcaneClass(iClass1, oCaster)) iClass1Lev = 0; + if (!GetIsArcaneClass(iClass2, oCaster)) iClass2Lev = 0; + if (!GetIsArcaneClass(iClass3, oCaster)) iClass3Lev = 0; + if (!GetIsArcaneClass(iClass4, oCaster)) iClass4Lev = 0; + if (!GetIsArcaneClass(iClass5, oCaster)) iClass5Lev = 0; + if (!GetIsArcaneClass(iClass6, oCaster)) iClass6Lev = 0; + if (!GetIsArcaneClass(iClass7, oCaster)) iClass7Lev = 0; + if (!GetIsArcaneClass(iClass8, oCaster)) iClass8Lev = 0; + + if (iClass1Lev > iBest) iBest = iClass1Lev; + if (iClass2Lev > iBest) iBest = iClass2Lev; + if (iClass3Lev > iBest) iBest = iClass3Lev; + if (iClass4Lev > iBest) iBest = iClass4Lev; + if (iClass5Lev > iBest) iBest = iClass5Lev; + if (iClass6Lev > iBest) iBest = iClass6Lev; + if (iClass7Lev > iBest) iBest = iClass7Lev; + if (iClass8Lev > iBest) iBest = iClass8Lev; + + return iBest; +} + +int GetLevelByTypeDivine(object oCaster = OBJECT_SELF) +{ + int iFirstDivine = GetPrimaryDivineClass(oCaster); + int iBest = 0; + int iClass1 = GetClassByPosition(1, oCaster); + int iClass2 = GetClassByPosition(2, oCaster); + int iClass3 = GetClassByPosition(3, oCaster); + int iClass4 = GetClassByPosition(4, oCaster); + int iClass5 = GetClassByPosition(5, oCaster); + int iClass6 = GetClassByPosition(6, oCaster); + int iClass7 = GetClassByPosition(7, oCaster); + int iClass8 = GetClassByPosition(8, oCaster); + + int iClass1Lev = GetLevelByPosition(1, oCaster); + int iClass2Lev = GetLevelByPosition(2, oCaster); + int iClass3Lev = GetLevelByPosition(3, oCaster); + int iClass4Lev = GetLevelByPosition(4, oCaster); + int iClass5Lev = GetLevelByPosition(5, oCaster); + int iClass6Lev = GetLevelByPosition(6, oCaster); + int iClass7Lev = GetLevelByPosition(7, oCaster); + int iClass8Lev = GetLevelByPosition(8, oCaster); + + if (iClass1 == CLASS_TYPE_PALADIN || iClass1 == CLASS_TYPE_RANGER) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0; + if (iClass2 == CLASS_TYPE_PALADIN || iClass2 == CLASS_TYPE_RANGER) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0; + if (iClass3 == CLASS_TYPE_PALADIN || iClass3 == CLASS_TYPE_RANGER) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0; + if (iClass4 == CLASS_TYPE_PALADIN || iClass4 == CLASS_TYPE_RANGER) iClass4Lev = (iClass4Lev >= 4) ? (iClass4Lev / 2) : 0; + if (iClass5 == CLASS_TYPE_PALADIN || iClass5 == CLASS_TYPE_RANGER) iClass5Lev = (iClass5Lev >= 4) ? (iClass5Lev / 2) : 0; + if (iClass6 == CLASS_TYPE_PALADIN || iClass6 == CLASS_TYPE_RANGER) iClass6Lev = (iClass6Lev >= 4) ? (iClass6Lev / 2) : 0; + if (iClass7 == CLASS_TYPE_PALADIN || iClass7 == CLASS_TYPE_RANGER) iClass7Lev = (iClass7Lev >= 4) ? (iClass7Lev / 2) : 0; + if (iClass8 == CLASS_TYPE_PALADIN || iClass8 == CLASS_TYPE_RANGER) iClass8Lev = (iClass8Lev >= 4) ? (iClass8Lev / 2) : 0; + + if (iClass1 == iFirstDivine) iClass1Lev += GetDivinePRCLevels(oCaster, iClass1); + if (iClass2 == iFirstDivine) iClass2Lev += GetDivinePRCLevels(oCaster, iClass2); + if (iClass3 == iFirstDivine) iClass3Lev += GetDivinePRCLevels(oCaster, iClass3); + if (iClass4 == iFirstDivine) iClass4Lev += GetDivinePRCLevels(oCaster, iClass4); + if (iClass5 == iFirstDivine) iClass5Lev += GetDivinePRCLevels(oCaster, iClass5); + if (iClass6 == iFirstDivine) iClass6Lev += GetDivinePRCLevels(oCaster, iClass6); + if (iClass7 == iFirstDivine) iClass7Lev += GetDivinePRCLevels(oCaster, iClass7); + if (iClass8 == iFirstDivine) iClass8Lev += GetDivinePRCLevels(oCaster, iClass8); + + iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev); + iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev); + iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev); + iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass4Lev); + iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass5Lev); + iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass6Lev); + iClass7Lev += PracticedSpellcasting(oCaster, iClass7, iClass7Lev); + iClass8Lev += PracticedSpellcasting(oCaster, iClass8, iClass8Lev); + + if (!GetIsDivineClass(iClass1, oCaster)) iClass1Lev = 0; + if (!GetIsDivineClass(iClass2, oCaster)) iClass2Lev = 0; + if (!GetIsDivineClass(iClass3, oCaster)) iClass3Lev = 0; + if (!GetIsDivineClass(iClass4, oCaster)) iClass4Lev = 0; + if (!GetIsDivineClass(iClass5, oCaster)) iClass5Lev = 0; + if (!GetIsDivineClass(iClass6, oCaster)) iClass6Lev = 0; + if (!GetIsDivineClass(iClass7, oCaster)) iClass7Lev = 0; + if (!GetIsDivineClass(iClass8, oCaster)) iClass8Lev = 0; + + if (iClass1Lev > iBest) iBest = iClass1Lev; + if (iClass2Lev > iBest) iBest = iClass2Lev; + if (iClass3Lev > iBest) iBest = iClass3Lev; + if (iClass4Lev > iBest) iBest = iClass4Lev; + if (iClass5Lev > iBest) iBest = iClass5Lev; + if (iClass6Lev > iBest) iBest = iClass6Lev; + if (iClass7Lev > iBest) iBest = iClass7Lev; + if (iClass8Lev > iBest) iBest = iClass8Lev; + + return iBest; +} + +//:: Test Void +//:: void main (){} \ No newline at end of file diff --git a/src/include/prc_inc_chat.nss b/src/include/prc_inc_chat.nss new file mode 100644 index 0000000..02bde6e --- /dev/null +++ b/src/include/prc_inc_chat.nss @@ -0,0 +1,117 @@ +//:://///////////////////////////////////////////// +//:: Chat Command include +//:: prc_inc_chat +//:://///////////////////////////////////////////// + +const string PRC_CHAT_HOOK_ACTIVE = "prc_chat_hook"; +const string PRC_CHAT_HOOK_SCRIPT = "prc_chat_script"; +const string PRC_PLAYER_RESPONSE = "prc_player_response"; + +void AddChatEventHook(object oPC, string sScriptToCall, float fDur = 0.0f); + +struct _prc_inc_WordInfo{ + int nWordStart; + int nWordLength; +}; + +//we assume that sDivider is always 1 character +struct _prc_inc_WordInfo GetStringWordInfo(string sString, int nWordToGet, string sDivider = " ") +{ + struct _prc_inc_WordInfo info; + + // Safety checks + if(sString == "") + return info; + + if(sDivider == "") + sDivider = " "; + + int nStrLength = GetStringLength(sString); + + nWordToGet--; + + // Start with the first word. + int nCurrentWord = 0; + int nCurrentStart = 0; + int nCurrentEnd = FindSubString(sString, sDivider); + // Advance to the specified element. + while (nCurrentWord < nWordToGet && nCurrentEnd > -1) + { + nCurrentWord++; + nCurrentStart = nCurrentEnd + 1; + nCurrentEnd = FindSubString(sString, sDivider, nCurrentStart); + } + // Adjust the end point if this is the last element. + if (nCurrentEnd == -1) nCurrentEnd = nStrLength; + + if (nCurrentWord >= nWordToGet) + { + info.nWordStart = nCurrentStart; + info.nWordLength = nCurrentEnd-nCurrentStart; + } + + return info; +} + +string GetStringWord(string sString, int nWordToGet, string sDivider = " ") +{ + struct _prc_inc_WordInfo info = GetStringWordInfo(sString, nWordToGet, sDivider); + return GetSubString(sString, info.nWordStart, info.nWordLength); +} + +string GetStringWordToEnd(string sString, int nWordToGet, string sDivider = " ") +{ + struct _prc_inc_WordInfo info = GetStringWordInfo(sString, nWordToGet, sDivider); + return GetSubString(sString, info.nWordStart, GetStringLength(sString)-info.nWordStart); +} + +//Returns TRUE if sPrefix matches sWord or some part of the beginning of sWord +/*int GetStringMatchesAbbreviation(string sString, string sAbbreviationPattern) +{ + int nShortestAbbreviation = FindSubString(sAbbreviationPattern, "-"); + if(nShortestAbbreviation > 0) + sAbbreviationPattern = GetStringLeft(sAbbreviationPattern, nShortestAbbreviation) + GetStringRight(sAbbreviationPattern, GetStringLength(sAbbreviationPattern)-(nShortestAbbreviation+1)); + else if (nShortestAbbreviation == 0) + { + sAbbreviationPattern = GetStringRight(sAbbreviationPattern, GetStringLength(sAbbreviationPattern)-1); + nShortestAbbreviation = GetStringLength(sAbbreviationPattern); + } + else + nShortestAbbreviation = GetStringLength(sAbbreviationPattern); + + if(GetStringLength(sString) >= nShortestAbbreviation) + return GetStringLeft(sAbbreviationPattern, GetStringLength(sString)) == sString; + else + return FALSE; +}*/ + +int GetStringMatchesAbbreviation(string sString, string sAbbreviationPattern) +{ + string sTest; + int iAbbrevEnd = FindSubString(sAbbreviationPattern, "-"); + + if(iAbbrevEnd == -1) + sTest = sAbbreviationPattern; + else + sTest = GetSubString(sAbbreviationPattern, 0, iAbbrevEnd); + + return FindSubString(sString, sTest) == 0; +} + +void HelpText(object oPC, string sString) +{ + SendMessageToPC(oPC, PRC_TEXT_WHITE + sString + ""); +} + +void _clear_chat_vars(object oPC) +{ + DeleteLocalInt(oPC, PRC_CHAT_HOOK_ACTIVE); + DeleteLocalString(oPC, PRC_CHAT_HOOK_SCRIPT); +} + +void AddChatEventHook(object oPC, string sScriptToCall, float fDur = 0.0f) +{ + SetLocalInt(oPC, PRC_CHAT_HOOK_ACTIVE, TRUE); + SetLocalString(oPC, PRC_CHAT_HOOK_SCRIPT, sScriptToCall); + if(fDur > 0.0f) DelayCommand(fDur, _clear_chat_vars(oPC)); +} \ No newline at end of file diff --git a/src/include/prc_inc_chat_dm.nss b/src/include/prc_inc_chat_dm.nss new file mode 100644 index 0000000..45596a1 --- /dev/null +++ b/src/include/prc_inc_chat_dm.nss @@ -0,0 +1,828 @@ +//:://///////////////////////////////////////////// +//:: Debug Command include +//:: prc_inc_chat_dm.nss +//:://///////////////////////////////////////////// + +#include "prc_alterations" +#include "prc_inc_chat" +#include "prc_inc_shifting" //For _prc_inc_EffectString, etc. +#include "prc_inc_util" +#include "psi_inc_ppoints" +/* +execute +setlocalvar +dellocalvar + +set + xp + level + gold + abil + skill + +mod + xp + gold + abilit + skill + +*/ +const string CMD_CHK_PP = "checkp-owerpoints"; +const string CMD_CHK_SS = "checks-pellslots"; + +const string CMD_EXECUTE = "dm_exec-ute"; +const string CMD_VARIABLE = "dm_var-iable"; + const string CMD_PC = "pc"; + const string CMD_MODULE = "mod-ule"; + const string CMD_LOCAL = "loc-al"; + const string CMD_PERSISTANT = "per-sistant"; + +const string CMD_INFORMATION = "dm_info-rmation"; + const string CMD_ABILITIES = "abil-ities"; + const string CMD_EFFECTS = "eff-ects"; + const string CMD_PROPERTIES = "prop-erties"; + const string CMD_SKILLS = "skil-ls"; + +const string CMD_CHANGE = "dm_change"; + const string CMD_ABILITY = "abil-ity"; + const string CMD_STR = "str-ength"; + const string CMD_DEX = "dex-terity"; + const string CMD_CON = "con-stitution"; + const string CMD_INT = "int-elligence"; + const string CMD_WIS = "wis-dom"; + const string CMD_CHA = "cha-risma"; + const string CMD_LEVEL = "level"; + const string CMD_XP = "xp"; + const string CMD_GOLD = "gold"; + const string CMD_BY = "by"; + const string CMD_TO = "to"; + +const string CMD_SPAWN = "dm_spawn"; + const string CMD_CREATURE = "creature"; + const string CMD_ITEM = "item"; + +const string CMD_RELEVEL = "dm_relevel"; + +const string CMD_SPECIAL = "dm_special"; + const string CMD_REST = "rest"; + const string CMD_HANDLE_FORCE_REST_1 = "handle"; + const string CMD_HANDLE_FORCE_REST_2 = "force-d"; + const string CMD_HANDLE_FORCE_REST_3 = "rest-ing"; + +int Debug_ProcessChatCommand_Help(object oPC, string sCommand) +{ + string sCommandName = GetStringWord(sCommand, 2); + int nLevel = sCommandName != ""; + int bResult = FALSE; + + if(!nLevel) + { + HelpText(oPC, "=== DM COMMANDS"); + HelpText(oPC, ""); + } + + if(GetStringMatchesAbbreviation(sCommandName, CMD_EXECUTE) || !nLevel) + { + if(nLevel) + { + bResult = TRUE; + HelpText(oPC, "=== DM COMMAND: " + CMD_EXECUTE); + HelpText(oPC, ""); + } + + HelpText(oPC, "~~" + CMD_EXECUTE + " "); + HelpText(oPC, ""); + } + + if(GetStringMatchesAbbreviation(sCommandName, CMD_VARIABLE) || !nLevel) + { + if (nLevel) + { + bResult = TRUE; + HelpText(oPC, "=== DM COMMAND: " + CMD_VARIABLE); + HelpText(oPC, ""); + } + + HelpText(oPC, "~~" + CMD_VARIABLE + " get "); + if (nLevel) + HelpText(oPC, " Print the value of the specified local variable"); + HelpText(oPC, "~~" + CMD_VARIABLE + " set "); + if (nLevel) + { + HelpText(oPC, " Set the value of the specified local variable and print the old value"); + HelpText(oPC, " can be one of: " + CMD_PC + ", " + CMD_MODULE + " (default:" + CMD_PC + " )"); + HelpText(oPC, " can be one of: " + CMD_LOCAL + ", " + CMD_PERSISTANT + " (default: " + CMD_LOCAL + ")"); + HelpText(oPC, " can be one of: int, string"); + } + HelpText(oPC, ""); + } + + if(GetStringMatchesAbbreviation(sCommandName, CMD_INFORMATION) || !nLevel) + { + if (nLevel) + { + bResult = TRUE; + HelpText(oPC, "=== DM COMMAND: " + CMD_INFORMATION); + HelpText(oPC, ""); + } + + HelpText(oPC, "~~" + CMD_INFORMATION + " " + CMD_ABILITIES); + if (nLevel) + HelpText(oPC, " Print the STR, DEX, CON, INT, WIS, and CHA of the PC"); + HelpText(oPC, "~~" + CMD_INFORMATION + " " + CMD_EFFECTS); + if (nLevel) + HelpText(oPC, " Print all effects that have been applied to the PC"); + HelpText(oPC, "~~" + CMD_INFORMATION + " " + CMD_PROPERTIES); + if (nLevel) + HelpText(oPC, " Print the item properties of all items the PC has equipped"); + HelpText(oPC, "~~" + CMD_INFORMATION + " " + CMD_SKILLS); + if (nLevel) + HelpText(oPC, " Print the number of ranks that the PC has in each skill"); + HelpText(oPC, ""); + } + + if(GetStringMatchesAbbreviation(sCommandName, CMD_CHANGE) || !nLevel) + { + if (nLevel) + { + bResult = TRUE; + HelpText(oPC, "=== DM COMMAND: " + CMD_CHANGE + " "); + HelpText(oPC, ""); + } + + HelpText(oPC, "~~" + CMD_CHANGE + " " + CMD_LEVEL + " " + CMD_TO + " "); + HelpText(oPC, "~~" + CMD_CHANGE + " " + CMD_LEVEL + " " + CMD_BY + " "); + if (nLevel) + { + HelpText(oPC, " Adjust the PC's level as specified (must be 1-40)"); + } + HelpText(oPC, ""); + + HelpText(oPC, "~~" + CMD_CHANGE + " " + CMD_XP + " " + CMD_TO + " "); + HelpText(oPC, "~~" + CMD_CHANGE + " " + CMD_XP + " " + CMD_BY + " "); + if (nLevel) + { + HelpText(oPC, " Adjust the PC's XP as specified"); + } + HelpText(oPC, ""); + + HelpText(oPC, "~~" + CMD_CHANGE + " " + CMD_GOLD + " " + CMD_TO + " "); + HelpText(oPC, "~~" + CMD_CHANGE + " " + CMD_GOLD + " " + CMD_BY + " "); + if (nLevel) + { + HelpText(oPC, " Adjust the PC's gold as specified"); + } + HelpText(oPC, ""); + + HelpText(oPC, "~~" + CMD_CHANGE + " " + CMD_ABILITY + " " + CMD_TO + " (requires NWNX funcs)"); + HelpText(oPC, "~~" + CMD_CHANGE + " " + CMD_ABILITY + " " + CMD_BY + " (requires NWNX funcs)"); + if (nLevel) + { + HelpText(oPC, " Adjust the PC's abilities as specified"); + HelpText(oPC, " can be: " + CMD_STR + ", " + CMD_DEX + ", " + CMD_CON + ", " + CMD_INT + ", " + CMD_WIS + ", or " + CMD_CHA); + } + HelpText(oPC, ""); + } + + if(GetStringMatchesAbbreviation(sCommandName, CMD_SPAWN) || !nLevel) + { + if (nLevel) + { + bResult = TRUE; + HelpText(oPC, "=== DM COMMAND: " + CMD_SPAWN); + HelpText(oPC, ""); + } + + HelpText(oPC, "~~" + CMD_SPAWN + " " + CMD_CREATURE + " "); + if (nLevel) + { + HelpText(oPC, " Spawn the specified creature in the same location as the PC."); + HelpText(oPC, " It will be treated as a summoned creature--i.e., under the PC's control."); + } + + HelpText(oPC, "~~" + CMD_SPAWN + " " + CMD_ITEM + " "); + if (nLevel) + { + HelpText(oPC, " Spawn the specified item in the same location as the PC"); + HelpText(oPC, " Use: ~~" + CMD_SPAWN + " " + CMD_ITEM + "prc_target to spawn chat command target widget."); + } + + HelpText(oPC, ""); + } + + if(GetStringMatchesAbbreviation(sCommandName, CMD_RELEVEL) || !nLevel) + { + if (nLevel) + { + bResult = TRUE; + HelpText(oPC, "=== DM COMMAND: " + CMD_RELEVEL + " "); + HelpText(oPC, ""); + } + + HelpText(oPC, "~~" + CMD_RELEVEL + " "); + if (nLevel) + { + HelpText(oPC, " Relevel the PC starting from the specified level."); + HelpText(oPC, " The final result is a PC with exactly the same XP as before,"); + HelpText(oPC, " but with the feats, skills, etc. reselected starting with the specified level."); + } + HelpText(oPC, ""); + } + + if(GetStringMatchesAbbreviation(sCommandName, CMD_SPECIAL) || !nLevel) + { + if (nLevel) + { + bResult = TRUE; + HelpText(oPC, "=== DM COMMAND: " + CMD_SPECIAL); + HelpText(oPC, ""); + } + + HelpText(oPC, "~~" + CMD_SPECIAL + " " + CMD_REST); + if (nLevel) + { + HelpText(oPC, " Instantly rest the PC"); + } + + HelpText(oPC, "~~" + CMD_SPECIAL + " " + CMD_HANDLE_FORCE_REST_1 + " " + CMD_HANDLE_FORCE_REST_2 + " " + CMD_HANDLE_FORCE_REST_3); + if (nLevel) + { + HelpText(oPC, " Tell PRC that the module force rests PCs."); + HelpText(oPC, " Forced resting restores feat uses and spell uses for Bioware spellbooks,"); + HelpText(oPC, " but does not restore spell uses for PRC conversation-based spellbooks,"); + HelpText(oPC, " and may cause problems with some other PRC features."); + HelpText(oPC, " Start a detector that detects forced resting and fixes"); + HelpText(oPC, " these issues automatically."); + } + HelpText(oPC, ""); + } + + return bResult; +} + +void _prc_inc_DoLocalVar(object oTarget, object oPC, string sCommand, int nNextArg) +{ + string sDataType = GetStringWord(sCommand, nNextArg++); + + string sCommandName = GetStringWord(sCommand, nNextArg++); + if (sCommandName != "get" && sCommandName != "set") + { + DoDebug("Unrecognized command (expected 'get' or 'set'): " + sCommandName); + return; + } + + string sVarName = GetStringWord(sCommand, nNextArg++); + if (sVarName == "") + { + DoDebug("Invalid variable name: '" + sCommandName + "'"); + return; + } + + string sVarValue = GetStringWordToEnd(sCommand, nNextArg); + + if (sDataType == "string") + { + string sValue = GetLocalString(oTarget, sVarName); + DoDebug("Value: '" + sValue + "'"); + if (sCommandName == "set") + { + SetLocalString(oTarget, sVarName, sVarValue); + DoDebug("New Value: '" + sVarValue + "'"); + } + } + else if (sDataType == "int") + { + int nValue = GetLocalInt(oTarget, sVarName); + DoDebug("Value: " + IntToString(nValue)); + if (sCommandName == "set") + { + if(DEBUG || GetIsDM(oPC)) + { + int nVarValue = StringToInt(sVarValue); + if (sVarValue == IntToString(nVarValue)) + { + SetLocalInt(oTarget, sVarName, nVarValue); + DoDebug("New Value: " + sVarValue); + } + else + DoDebug("Can't set integer variable to non-integer value: " +sVarValue); + } + else + DoDebug("This command only works if DEBUG = TRUE"); + } + } + else + { + DoDebug("Unrecognized data type: " + sDataType); + } +} + +void _prc_inc_DoPersistantVar(object oTarget, object oPC, string sCommand, int nNextArg) +{ + string sDataType = GetStringWord(sCommand, nNextArg++); + + string sCommandName = GetStringWord(sCommand, nNextArg++); + if (sCommandName != "get" && sCommandName != "set") + { + DoDebug("Unrecognized command (expected 'get' or 'set'): " + sCommandName); + return; + } + + string sVarName = GetStringWord(sCommand, nNextArg++); + if (sVarName == "") + { + DoDebug("Invalid variable name: '" + sCommandName + "'"); + return; + } + + string sVarValue = GetStringWordToEnd(sCommand, nNextArg++); + + if (sDataType == "string") + { + string sValue = GetPersistantLocalString(oTarget, sVarName); + DoDebug("Value: '" + sValue + "'"); + if (sCommandName == "set") + SetPersistantLocalString(oTarget, sVarName, sVarValue); + } + else if (sDataType == "int") + { + int nValue = GetPersistantLocalInt(oTarget, sVarName); + DoDebug("Value: " + IntToString(nValue)); + if (sCommandName == "set") + { + if(DEBUG || GetIsDM(oPC)) + { + int nVarValue = StringToInt(sVarValue); + if (sVarValue == IntToString(nVarValue)) + SetPersistantLocalInt(oTarget, sVarName, nVarValue); + else + DoDebug("Can't set integer variable to non-integer value: " +sVarValue); + } + else + DoDebug("This command only works if DEBUG = TRUE"); + } + } + else + { + DoDebug("Unrecognized data type: " + sDataType); + } +} + +void _prc_inc_DumpItemProperty(string sPrefix, itemproperty iProp, object oPC) +{ + int nDurationType = GetItemPropertyDurationType(iProp); + string sPropString = _prc_inc_ItemPropertyString(iProp); + if(sPropString != "") + { + if (nDurationType == DURATION_TYPE_TEMPORARY) + sPropString = GetStringByStrRef(57473+0x01000000) + sPropString; //"TEMPORARY: " + DoDebug(sPrefix + sPropString); + } +} + +void _prc_inc_DumpAllItemProperties(string sPrefix, object oItem, object oPC) +{ + if(GetIsObjectValid(oItem)) + { + itemproperty iProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(iProp)) + { + _prc_inc_DumpItemProperty(sPrefix, iProp, oPC); + iProp = GetNextItemProperty(oItem); + } + } +} + +int _prc_inc_XPToLevel(int nXP) +{ + float fXP = IntToFloat(nXP); + float fLevel = (sqrt(8 * fXP / 1000 + 1) + 1) / 2; + return FloatToInt(fLevel); +} + +int _prc_inc_LevelToXP(int nLevel) +{ + return (nLevel * (nLevel - 1)) * 500; +} + +void DoPrintSummon(object oPC, string sResRef) +{ + object oCreature = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC); + if (GetIsObjectValid(oCreature)) + HelpText(oPC, "Created creature: " + GetName(oCreature)); + else + HelpText(oPC, "Failed to create creature--invalid resref?: " + sResRef); +} + +void DoSummon(object oPC, string sResRef) +{ + effect eSummon = EffectSummonCreature(sResRef); + ApplyEffectAtLocation(DURATION_TYPE_PERMANENT, eSummon, GetLocation(oPC)); + AssignCommand(oPC, DoPrintSummon(oPC, sResRef)); +} + +int Debug_ProcessChatCommand(object oPC, string sCommand) +{ + string sCommandName = GetStringWord(sCommand, 1); + int bResult = FALSE; + object oTarget = GetLocalObject(oPC, "prc_chatcmd_target"); + if(!GetIsObjectValid(oTarget)) + oTarget = oPC; + + + //Handle the commands we recognize no matter what, but only execute them if DEBUG is TRUE + if(GetStringMatchesAbbreviation(sCommandName, CMD_EXECUTE)) + { + bResult = TRUE; + if (DEBUG || GetIsDM(oPC)) + { + string sScript = GetStringWord(sCommand, 2); + HelpText(oPC, "Executing script: " + sScript); + ExecuteScript(sScript, oTarget); + } + else + HelpText(oPC, "This command only works if DEBUG = TRUE"); + } + else if (GetStringMatchesAbbreviation(sCommandName, CMD_VARIABLE)) + { + bResult = TRUE; + int nNextArg = 2; + string sVarType = GetStringWord(sCommand, nNextArg++); + if(GetStringMatchesAbbreviation(sVarType, CMD_MODULE)) + { + sVarType = GetStringWord(sCommand, nNextArg++); + oTarget = GetModule(); + } + else if(GetStringMatchesAbbreviation(sVarType, CMD_PC)) + { + sVarType = GetStringWord(sCommand, nNextArg++); + oTarget = oPC; + } + + if(GetStringMatchesAbbreviation(sVarType, CMD_LOCAL)) + _prc_inc_DoLocalVar(oTarget, oPC, sCommand, nNextArg); + else if(GetStringMatchesAbbreviation(sVarType, CMD_PERSISTANT)) + _prc_inc_DoPersistantVar(oTarget, oPC, sCommand, nNextArg); + else + _prc_inc_DoLocalVar(oTarget, oPC, sCommand, nNextArg); + } + else if(GetStringMatchesAbbreviation(sCommandName, CMD_INFORMATION)) + { + bResult = TRUE; + string sInfoType = GetStringWord(sCommand, 2); + if (GetStringMatchesAbbreviation(sInfoType, CMD_ABILITIES)) + { + HelpText(oPC, "====== ABILITIES ======"); + HelpText(oPC, "=== The first number is the base score; the second is the modified score, which includes bonuses and penalties from gear, etc."); + HelpText(oPC, "=== STR: " + IntToString(GetAbilityScore(oTarget, ABILITY_STRENGTH, TRUE)) + " / " + IntToString(GetAbilityScore(oTarget, ABILITY_STRENGTH, FALSE))); + HelpText(oPC, "=== DEX: " + IntToString(GetAbilityScore(oTarget, ABILITY_DEXTERITY, TRUE)) + " / " + IntToString(GetAbilityScore(oTarget, ABILITY_DEXTERITY, FALSE))); + HelpText(oPC, "=== CON: " + IntToString(GetAbilityScore(oTarget, ABILITY_CONSTITUTION, TRUE)) + " / " + IntToString(GetAbilityScore(oTarget, ABILITY_CONSTITUTION, FALSE))); + HelpText(oPC, "=== INT: " + IntToString(GetAbilityScore(oTarget, ABILITY_INTELLIGENCE, TRUE)) + " / " + IntToString(GetAbilityScore(oTarget, ABILITY_INTELLIGENCE, FALSE))); + HelpText(oPC, "=== WIS: " + IntToString(GetAbilityScore(oTarget, ABILITY_WISDOM, TRUE)) + " / " + IntToString(GetAbilityScore(oTarget, ABILITY_WISDOM, FALSE))); + HelpText(oPC, "=== CHA: " + IntToString(GetAbilityScore(oTarget, ABILITY_CHARISMA, TRUE)) + " / " + IntToString(GetAbilityScore(oTarget, ABILITY_CHARISMA, FALSE))); + if (GetPersistantLocalInt(oTarget, SHIFTER_ISSHIFTED_MARKER) && GetPRCSwitch(PRC_NWNX_FUNCS)) + { + int iSTR = GetPersistantLocalInt(oTarget, "Shifting_NWNXSTRAdjust"); + int iDEX = GetPersistantLocalInt(oTarget, "Shifting_NWNXDEXAdjust"); + int iCON = GetPersistantLocalInt(oTarget, "Shifting_NWNXCONAdjust"); + HelpText(oPC, "=== The first number is the base score when unshifted; the second is the modified score when unshifted."); + HelpText(oPC, "=== STR: " + IntToString(GetAbilityScore(oTarget, ABILITY_STRENGTH, TRUE)-iSTR) + " / " + IntToString(GetAbilityScore(oTarget, ABILITY_STRENGTH, FALSE)-iSTR)); + HelpText(oPC, "=== DEX: " + IntToString(GetAbilityScore(oTarget, ABILITY_DEXTERITY, TRUE)-iDEX) + " / " + IntToString(GetAbilityScore(oTarget, ABILITY_DEXTERITY, FALSE)-iDEX)); + HelpText(oPC, "=== CON: " + IntToString(GetAbilityScore(oTarget, ABILITY_CONSTITUTION, TRUE)-iCON) + " / " + IntToString(GetAbilityScore(oTarget, ABILITY_CONSTITUTION, FALSE)-iCON)); + } + } + else if (GetStringMatchesAbbreviation(sInfoType, CMD_EFFECTS)) + { + HelpText(oPC, "====== EFFECTS ======"); + effect eEffect = GetFirstEffect(oTarget); + while(GetIsEffectValid(eEffect)) + { + if (GetEffectType(eEffect) == EFFECT_TYPE_INVALIDEFFECT) + { + //An effect with type EFFECT_TYPE_INVALID is added for each item property + //They are also added for a couple of other things (Knockdown, summons, etc.) + //Just skip these + } + else + { + string sEffectString = _prc_inc_EffectString(eEffect); + if(sEffectString != "") + HelpText(oPC, "=== " + sEffectString); + } + eEffect = GetNextEffect(oTarget); + } + } + else if (GetStringMatchesAbbreviation(sInfoType, CMD_PROPERTIES)) + { + HelpText(oPC, "====== PROPERTIES ======"); + HelpText(oPC, "====== CREATURE"); + _prc_inc_DumpAllItemProperties("=== ", oTarget, oPC); + if(GetObjectType(oTarget) == OBJECT_TYPE_CREATURE) + { + HelpText(oPC, "====== CREATURE HIDE"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_CARMOUR, oTarget), oPC); + HelpText(oPC, "====== RIGHT CREATURE WEAPON"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTarget), oPC); + HelpText(oPC, "====== LEFT CREATURE WEAPON"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTarget), oPC); + HelpText(oPC, "====== SPECIAL CREATURE WEAPON"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTarget), oPC); + HelpText(oPC, "====== RIGHT HAND"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget), oPC); + HelpText(oPC, "====== LEFT HAND"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget), oPC); + HelpText(oPC, "====== CHEST"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget), oPC); + HelpText(oPC, "====== HEAD"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_HEAD, oTarget), oPC); + HelpText(oPC, "====== CLOAK"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_CLOAK, oTarget), oPC); + HelpText(oPC, "====== ARMS"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_ARMS, oTarget), oPC); + HelpText(oPC, "====== BELT"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_BELT, oTarget), oPC); + HelpText(oPC, "====== BOOTS"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_BOOTS, oTarget), oPC); + HelpText(oPC, "====== RIGHT HAND RING"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oTarget), oPC); + HelpText(oPC, "====== LEFT HAND RING"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_LEFTRING, oTarget), oPC); + HelpText(oPC, "====== NECK"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_NECK, oTarget), oPC); + HelpText(oPC, "====== ARROWS"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_ARROWS, oTarget), oPC); + HelpText(oPC, "====== BOLTS"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_BOLTS, oTarget), oPC); + HelpText(oPC, "====== BULLETS"); + _prc_inc_DumpAllItemProperties("=== ", GetItemInSlot(INVENTORY_SLOT_BULLETS, oTarget), oPC); + } + } + else if (GetStringMatchesAbbreviation(sInfoType, CMD_SKILLS)) + { + HelpText(oPC, "====== SKILLS ======"); + HelpText(oPC, "=== The first number is the base score; the second is the modified score, which includes bonuses and penalties from gear, etc."); + int i = 0; + string sSkillName; + while((sSkillName = Get2DACache("skills", "Name", i)) != "") + { + sSkillName = GetStringByStrRef(StringToInt(sSkillName)); + HelpText(oPC, "=== " + sSkillName + ": " + IntToString(GetSkillRank(i, oTarget, TRUE)) + " / " + IntToString(GetSkillRank(i, oTarget, FALSE))); + i += 1; + } + } + else + HelpText(oPC, "Unrecognized information request: " + sInfoType); + } + else if (GetStringMatchesAbbreviation(sCommandName, CMD_CHANGE)) + { + bResult = TRUE; + if(!DEBUG && !GetIsDM(oPC)) + HelpText(oPC, "This command only works if DEBUG = TRUE"); + else + { + string sChangeWhat = GetStringWord(sCommand, 2); + string sChangeHow = GetStringWord(sCommand, 3); + string sNumber = GetStringWord(sCommand, 4); + int nNumber = StringToInt(sNumber); + if (GetStringMatchesAbbreviation(sChangeWhat, CMD_LEVEL)) + { + if (sNumber != IntToString(nNumber)) + HelpText(oPC, "Unrecognized level: " + sNumber); + else + { + if (GetStringMatchesAbbreviation(sChangeHow, CMD_BY)) + { + int nCurrentLevel = _prc_inc_XPToLevel(GetXP(oTarget)); + if (nCurrentLevel > 40) + nCurrentLevel = 40; + nNumber = nCurrentLevel + nNumber; + if (nNumber < 1) + nNumber = 1; + else if (nNumber > 40) + nNumber = 40; + SetXP(oTarget, _prc_inc_LevelToXP(nNumber)); + } + else if (GetStringMatchesAbbreviation(sChangeHow, CMD_TO)) + { + if (nNumber < 1) + nNumber = 1; + else if (nNumber > 40) + nNumber = 40; + SetXP(oTarget, _prc_inc_LevelToXP(nNumber)); + } + else + HelpText(oPC, "Unrecognized word: " + sChangeHow); + } + } + else if (GetStringMatchesAbbreviation(sChangeWhat, CMD_XP)) + { + if (sNumber != IntToString(nNumber)) + HelpText(oPC, "Unrecognized xp: " + sNumber); + else + { + if (GetStringMatchesAbbreviation(sChangeHow, CMD_BY)) + { + nNumber = GetXP(oTarget) + nNumber; + if (nNumber < 0) + nNumber = 0; + SetXP(oTarget, nNumber); + } + else if (GetStringMatchesAbbreviation(sChangeHow, CMD_TO)) + { + if (nNumber < 0) + nNumber = 0; + SetXP(oTarget, nNumber); + } + else + HelpText(oPC, "Unrecognized word: " + sChangeHow); + } + } + else if (GetStringMatchesAbbreviation(sChangeWhat, CMD_GOLD)) + { + if (sNumber != IntToString(nNumber)) + HelpText(oPC, "Unrecognized gold amount: " + sNumber); + else + { + if (GetStringMatchesAbbreviation(sChangeHow, CMD_BY)) + { + if (nNumber > 0) + GiveGoldToCreature(oTarget, nNumber); + else if (nNumber < 0) + AssignCommand(oPC, TakeGoldFromCreature(-nNumber, oTarget, TRUE)); + } + else if (GetStringMatchesAbbreviation(sChangeHow, CMD_TO)) + { + nNumber = nNumber - GetGold(oTarget); + if (nNumber > 0) + GiveGoldToCreature(oTarget, nNumber); + else if (nNumber < 0) + AssignCommand(oPC, TakeGoldFromCreature(-nNumber, oTarget, TRUE)); + } + else + HelpText(oPC, "Unrecognized word: " + sChangeHow); + } + } +/* else if (GetStringMatchesAbbreviation(sChangeWhat, CMD_ABILITY)) + { + if (!GetPRCSwitch(PRC_NWNX_FUNCS)) + HelpText(oPC, "This command only works if NWNX funcs is installed"); + else + { + sChangeWhat = GetStringWord(sCommand, 3); + sChangeHow = GetStringWord(sCommand, 4); + sNumber = GetStringWord(sCommand, 5); + nNumber = StringToInt(sNumber); + if (sNumber != IntToString(nNumber)) + HelpText(oPC, "Unrecognized ability value: " + sNumber); + else + { + if (GetStringMatchesAbbreviation(sChangeWhat, CMD_STR)) + { + if (GetStringMatchesAbbreviation(sChangeHow, CMD_BY)) + nNumber += GetAbilityScore(oTarget, ABILITY_STRENGTH, TRUE); + if (nNumber < 3 || nNumber > 255) + HelpText(oPC, "Invalid " + CMD_STR + " value (must be between 3 and 255): " + sChangeWhat); + else + { + if (nNumber > 100 - 12) + HelpText(oPC, "NOTE: having a total " + CMD_STR + " above 100 can cause problems (the weight that you can carry goes to 0)"); + _prc_inc_shifting_SetSTR(oTarget, nNumber); + } + } + else if (GetStringMatchesAbbreviation(sChangeWhat, CMD_DEX)) + { + if (GetStringMatchesAbbreviation(sChangeHow, CMD_BY)) + nNumber += GetAbilityScore(oTarget, ABILITY_DEXTERITY, TRUE); + if (nNumber < 3 || nNumber > 255) + HelpText(oPC, "Invalid " + CMD_DEX + " value (must be between 3 and 255): " + sChangeWhat); + else + _prc_inc_shifting_SetDEX(oTarget, nNumber); + } + else if (GetStringMatchesAbbreviation(sChangeWhat, CMD_CON)) + { + if (GetStringMatchesAbbreviation(sChangeHow, CMD_BY)) + nNumber += GetAbilityScore(oTarget, ABILITY_CONSTITUTION, TRUE); + if (nNumber < 3 || nNumber > 255) + HelpText(oPC, "Invalid " + CMD_CON + " value (must be between 3 and 255): " + sChangeWhat); + else + _prc_inc_shifting_SetCON(oTarget, nNumber); + } + else if (GetStringMatchesAbbreviation(sChangeWhat, CMD_INT)) + { + if (GetStringMatchesAbbreviation(sChangeHow, CMD_BY)) + nNumber += GetAbilityScore(oTarget, ABILITY_INTELLIGENCE, TRUE); + if (nNumber < 3 || nNumber > 255) + HelpText(oPC, "Invalid " + CMD_INT + " value (must be between 3 and 255): " + sChangeWhat); + else + _prc_inc_shifting_SetINT(oTarget, nNumber); + } + else if (GetStringMatchesAbbreviation(sChangeWhat, CMD_WIS)) + { + if (GetStringMatchesAbbreviation(sChangeHow, CMD_BY)) + nNumber += GetAbilityScore(oTarget, ABILITY_WISDOM, TRUE); + if (nNumber < 3 || nNumber > 255) + HelpText(oPC, "Invalid " + CMD_WIS + " value (must be between 3 and 255): " + sChangeWhat); + else + _prc_inc_shifting_SetWIS(oTarget, nNumber); + } + else if (GetStringMatchesAbbreviation(sChangeWhat, CMD_CHA)) + { + if (GetStringMatchesAbbreviation(sChangeHow, CMD_BY)) + nNumber += GetAbilityScore(oTarget, ABILITY_CHARISMA, TRUE); + if (nNumber < 3 || nNumber > 255) + HelpText(oPC, "Invalid " + CMD_CHA + " value (must be between 3 and 255): " + sChangeWhat); + else + _prc_inc_shifting_SetCHA(oTarget, nNumber); + } + + else + HelpText(oPC, "Unrecognized ability to change: " + sChangeWhat); + } + } + } +*/ + else + { + HelpText(oPC, "Unrecognized value to change: " + sChangeWhat); + } + } + } + else if (GetStringMatchesAbbreviation(sCommandName, CMD_SPAWN)) + { + bResult = TRUE; + if (!DEBUG && !GetIsDM(oPC)) + HelpText(oPC, "This command only works if DEBUG = TRUE"); + else + { + string sSpawnType = GetStringWord(sCommand, 2); + string sResRef = GetStringWord(sCommand, 3); + if (GetStringMatchesAbbreviation(sSpawnType, CMD_CREATURE)) + { + AssignCommand(oPC, DoSummon(oPC, sResRef)); + } + else if (GetStringMatchesAbbreviation(sSpawnType, CMD_ITEM)) + { + object oItem = CreateItemOnObject(sResRef, oTarget); + SetIdentified(oItem, TRUE); + if(GetIsObjectValid(oItem)) + HelpText(oPC, "Created item: " + GetName(oItem)); + else + HelpText(oPC, "Faild to create item--invalid resref?: " + sResRef); + } + else + HelpText(oPC, "Unrecognized spawn type: " + sSpawnType); + } + } + else if (GetStringMatchesAbbreviation(sCommandName, CMD_RELEVEL)) + { + bResult = TRUE; + if (!DEBUG) + HelpText(oPC, "This command only works if DEBUG = TRUE"); + else + { + string sNumber = GetStringWord(sCommand, 2); + int nNumber = StringToInt(sNumber); + int nStartXP = GetXP(oTarget); + int nStartLevel = _prc_inc_XPToLevel(nStartXP); + if (sNumber != IntToString(nNumber)) + HelpText(oPC, "Unrecognized level: " + sNumber); + else if (nNumber > nStartLevel) + HelpText(oPC, "Nothing to do: specified level is higher than current level."); + else + { + if (nNumber < 1) + nNumber = 1; + SetXP(oTarget, _prc_inc_LevelToXP(nNumber-1)); //Level down to the the level before the 1st we want to change + SetXP(oTarget, nStartXP); //Level back up to our starting XP + } + } + } + else if (GetStringMatchesAbbreviation(sCommandName, CMD_SPECIAL)) + { + bResult = TRUE; + + string sSpecialCommandName = GetStringWord(sCommand, 2); + + if (GetStringMatchesAbbreviation(sSpecialCommandName, CMD_REST)) + { + if (!DEBUG) + HelpText(oPC, "This command only works if DEBUG = TRUE"); + else + PRCForceRest(oTarget); + } + else if (GetStringMatchesAbbreviation(sSpecialCommandName, CMD_HANDLE_FORCE_REST_1) && + GetStringMatchesAbbreviation(GetStringWord(sCommand, 3), CMD_HANDLE_FORCE_REST_2) && + GetStringMatchesAbbreviation(GetStringWord(sCommand, 4), CMD_HANDLE_FORCE_REST_3) + ) + { + StartForcedRestDetector(oTarget); + } + } + else if(GetStringMatchesAbbreviation(sCommandName, CMD_CHK_PP)) + { + bResult = TRUE; + TellCharacterPowerPointStatus(oPC); + } + + return bResult; +} diff --git a/src/include/prc_inc_chat_pow.nss b/src/include/prc_inc_chat_pow.nss new file mode 100644 index 0000000..aced79a --- /dev/null +++ b/src/include/prc_inc_chat_pow.nss @@ -0,0 +1,125 @@ +//:://///////////////////////////////////////////// +//:: Debug Command include +//:: prc_inc_chat_pow.nss +//:://///////////////////////////////////////////// + +/* +Command summary: + +~~pow [value] + Set Power Attack to the specified value +[value can be 0-5 for Power Attack, 0-24 for Improved Power Attack] + +~~pow [value] [q1|q2|q3] + Set Power Attack for the specified quickslot to the specified value +[value can be 0-5 for Power Attack, 0-24 for Improved Power Attack] +*/ + +#include "prc_inc_chat" + +const string CMD_POWER_ATTACK = "pow-erattack"; + +const string QS1_VAR_NAME = "PRC_PowerAttackQuickselect_2797"; +const string QS2_VAR_NAME = "PRC_PowerAttackQuickselect_2798"; +const string QS3_VAR_NAME = "PRC_PowerAttackQuickselect_2799"; + +int PowerAttack_ProcessChatCommand_Help(object oPC, string sCommand) +{ + string sCommandName = GetStringWord(sCommand, 2); + int nLevel = sCommandName != ""; + int bResult = FALSE; + + if (!nLevel) + { + HelpText(oPC, "=== PRC POWER ATTACK COMMANDS"); + HelpText(oPC, ""); + } + + if(GetStringMatchesAbbreviation(sCommandName, CMD_POWER_ATTACK) || !nLevel) + { + if (nLevel) + { + bResult = TRUE; + HelpText(oPC, "=== POWER ATTACK COMMAND: " + CMD_POWER_ATTACK); + HelpText(oPC, ""); + } + + HelpText(oPC, "~~" + CMD_POWER_ATTACK + " "); + if (nLevel) + HelpText(oPC, " Prints the current setting for the specified quickslot."); + HelpText(oPC, "~~" + CMD_POWER_ATTACK + " "); + if (nLevel) + HelpText(oPC, " Set the specified quickslot to the given value."); + HelpText(oPC, ""); + } + + //TODO: add a command to set the power attack value correctly without the quickslot + //To work correctly with the existing power attack code, the effects need to be added within a spell so that the + //spell id can be recorded and later used to remove them. + + return bResult; +} + +int PowerAttack_ProcessChatCommand(object oPC, string sCommand) +{ + int bResult = FALSE; + + string sCommandName = GetStringWord(sCommand, 1); + string sNewValue = GetStringWord(sCommand, 2); + int nNewValue = StringToInt(sNewValue); + + if(GetStringMatchesAbbreviation(sCommandName, CMD_POWER_ATTACK)) + { + bResult = TRUE; + + string sQuickslot = GetStringWord(sCommand, 2); + string sNewValue = GetStringWord(sCommand, 3); + if (sNewValue == "") + { + if (sQuickslot == "q1") + HelpText(oPC, "Power Attack Quickslot 1: " + IntToString(GetPersistantLocalInt(oPC, QS1_VAR_NAME))); + else if (sQuickslot == "q2") + HelpText(oPC, "Power Attack Quickslot 2: " + IntToString(GetPersistantLocalInt(oPC, QS2_VAR_NAME))); + else if (sQuickslot == "q3") + HelpText(oPC, "Power Attack Quickslot 3: " + IntToString(GetPersistantLocalInt(oPC, QS3_VAR_NAME))); + else + HelpText(oPC, "Invalid Power Attack Quickslot Number: " + sQuickslot); + } + else + { + int nNewValue = StringToInt(sNewValue); + if (sNewValue != IntToString(nNewValue)) + HelpText(oPC, "Power Attack value is not a number: " + sNewValue); + else if (nNewValue < 0) + HelpText(oPC, "Value is too small for Power Attack: " + sNewValue); + else if (!GetHasFeat(FEAT_POWER_ATTACK, oPC)) + HelpText(oPC, "Power Attack feat required for value: " + sNewValue); + else if (nNewValue > 5 && !GetHasFeat(FEAT_IMPROVED_POWER_ATTACK, oPC)) + HelpText(oPC, "Improved Power Attack feat required for value: " + sNewValue); + else if (nNewValue > 24) + HelpText(oPC, "Value is too large for Improved Power Attack: " + sNewValue); + else + { + if (sQuickslot == "q1") + { + SetPersistantLocalInt(oPC, QS1_VAR_NAME, nNewValue); + HelpText(oPC, "Power Attack Quickslot 1 set to: " + IntToString(nNewValue)); + } + else if (sQuickslot == "q2") + { + SetPersistantLocalInt(oPC, QS2_VAR_NAME, nNewValue); + HelpText(oPC, "Power Attack Quickslot 2 set to: " + IntToString(nNewValue)); + } + else if (sQuickslot == "q3") + { + SetPersistantLocalInt(oPC, QS3_VAR_NAME, nNewValue); + HelpText(oPC, "Power Attack Quickslot 3 set to: " + IntToString(nNewValue)); + } + else + HelpText(oPC, "Invalid Power Attack Quickslot Number: " + sQuickslot); + } + } + } + + return bResult; +} diff --git a/src/include/prc_inc_chat_shf.nss b/src/include/prc_inc_chat_shf.nss new file mode 100644 index 0000000..008ab1d --- /dev/null +++ b/src/include/prc_inc_chat_shf.nss @@ -0,0 +1,220 @@ +//:://///////////////////////////////////////////// +//:: PnP Shifter Chat Command include +//:: prc_inc_chat_shf +//:://///////////////////////////////////////////// + +#include "prc_inc_chat" +#include "prc_inc_shifting" + +const string CMD_GREATER_WILDSHAPE = "gw"; +const string CMD_SHIFT = "s-hift"; +const string CMD_EPIC_SHIFT = "e-pic"; +const string CMD_UNSHIFT = "u-nshift"; +const string CMD_LIST = "l-ist"; +const string CMD_INFO = "i-nfo"; +const string CMD_MARK = "mark"; +const string CMD_UNMARK = "unmark"; +const string CMD_DELETE = "delete"; + +int PnPShifter_ProcessChatCommand_Help(object oPC, string sCommand) +{ + string sCommandName = GetStringWord(sCommand, 2); + int nLevel = sCommandName != ""; + int bResult = FALSE; + + if (!nLevel) + { + HelpText(oPC, "=== PNP SHIFTER COMMANDS"); + HelpText(oPC, ""); + } + + if(GetStringMatchesAbbreviation(sCommandName, CMD_GREATER_WILDSHAPE) || !nLevel) + { + if (nLevel) + { + bResult = TRUE; + HelpText(oPC, "=== PNP SHIFTER COMMAND: " + CMD_GREATER_WILDSHAPE + " (Greater Wildshape)"); + HelpText(oPC, ""); + } + + HelpText(oPC, "~~" + CMD_GREATER_WILDSHAPE + " " + CMD_LIST + " "); + if (nLevel) + HelpText(oPC, " Lists known shapes that match ; if is omitted, lists all known shapes."); + HelpText(oPC, "~~" + CMD_GREATER_WILDSHAPE + " " + CMD_INFO + " "); + if (nLevel) + HelpText(oPC, " Lists shapes that match ; if an unambiguous match is found, prints information about it."); + HelpText(oPC, "~~" + CMD_GREATER_WILDSHAPE + " " + CMD_SHIFT + " "); + if (nLevel) + HelpText(oPC, " Searches for shapes that match ; if an unambiguous match is found, shifts into it."); + HelpText(oPC, "~~" + CMD_GREATER_WILDSHAPE + " " + CMD_EPIC_SHIFT + " "); + if (nLevel) + HelpText(oPC, " Searches for shapes that match ; if an unambiguous match is found, epic shifts into it."); + HelpText(oPC, "~~" + CMD_GREATER_WILDSHAPE + " " + CMD_UNSHIFT); + if (nLevel) + HelpText(oPC, " Unshifts back into true form."); + HelpText(oPC, "~~" + CMD_GREATER_WILDSHAPE + " " + CMD_MARK + " "); + if (nLevel) + HelpText(oPC, " Marks the specified shape for deletion."); + HelpText(oPC, "~~" + CMD_GREATER_WILDSHAPE + " " + CMD_UNMARK + " "); + if (nLevel) + HelpText(oPC, " Removes the shape's deletion mark, if any."); + HelpText(oPC, "~~" + CMD_GREATER_WILDSHAPE + " " + CMD_DELETE + " yes"); + if (nLevel) + HelpText(oPC, " Deletes all shapes marked for deletion. Note that the word 'yes' is required as part of the command in order to confirm the deletion."); + if (nLevel) + { + HelpText(oPC, ""); + HelpText(oPC, "'" + CMD_GREATER_WILDSHAPE + "' stands for 'Greater Wildshape'"); + HelpText(oPC, " must match a known shape, is case-insenstive, and can be:"); + HelpText(oPC, " '.': matches the shape the PC is currently shifted into"); + HelpText(oPC, " A number: matches the shape with the given number. The numbers can be found found using command '~~gw list''."); + HelpText(oPC, " 'Q1' through 'Q10': matches the shape in the specified quickslot"); + HelpText(oPC, " A resref: if you don't know what this means, ignore this option. The resref can be found found using command '~~gw list'."); + HelpText(oPC, " Part of the name of a shape:"); + HelpText(oPC, " If there is exactly one exact match, that will be used."); + HelpText(oPC, " Otherwise, if there is exactly one shape whose name starts with , that will be used."); + HelpText(oPC, " Otherwise, if there is exactly one shape whose name contains , that will be used."); + HelpText(oPC, " Otherwise, no shape matches and nothing will happen."); + } + HelpText(oPC, ""); + } + + return bResult; +} + +void _prc_inc_ChatShift(object oPC, string sShapeName, int bEpic) +{ + //See if a valid shape was specified + if(sShapeName == "") + return; + + string sResRef = FindResRefFromString(oPC, SHIFTER_TYPE_SHIFTER, sShapeName, FALSE); + if(sResRef == "") + return; + + //Make sure we're not affected by a condition that prevents shifting + effect eTest = GetFirstEffect(oPC); + int nEType; + while(GetIsEffectValid(eTest)) + { + nEType = GetEffectType(eTest); + if(nEType == EFFECT_TYPE_CUTSCENE_PARALYZE + || nEType == EFFECT_TYPE_DAZED + || nEType == EFFECT_TYPE_PARALYZE + || nEType == EFFECT_TYPE_PETRIFY + || nEType == EFFECT_TYPE_SLEEP + || nEType == EFFECT_TYPE_STUNNED) + return; + eTest = GetNextEffect(oPC); + } + + //If we have at least one use of a suitable feat remaining, shift + int nPaidFeat = GWSPay(oPC, bEpic); + if(nPaidFeat) + { + if(!ShiftIntoResRef(oPC, SHIFTER_TYPE_SHIFTER, sResRef, bEpic)) + GWSRefund(oPC, nPaidFeat); + } + else + FloatingTextStrRefOnCreature(16828373, oPC, FALSE); // "You didn't have (Epic) Greater Wildshape uses available." +} + +void _prc_inc_ListShapes(object oShifter, int nShifterType, string sFindString) +{ + FindResRefFromString(oShifter, nShifterType, sFindString, TRUE); +} + +void _prc_inc_ChatMark(object oPC, string sShapeName, int bMark) +{ + if (sShapeName == "") + return; + + string sResRef = FindResRefFromString(oPC, SHIFTER_TYPE_SHIFTER, sShapeName, FALSE); + if (sResRef == "") + return; + + int nIndex = _prc_inc_shifting_GetIsTemplateStored(oPC, SHIFTER_TYPE_SHIFTER, sResRef); + if (!nIndex) + return; + + SetStoredTemplateDeleteMark(oPC, SHIFTER_TYPE_SHIFTER, nIndex-1, bMark); +} + +int PnPShifter_ProcessChatCommand(object oPC, string sCommand) +{ + if(!GetLevelByClass(CLASS_TYPE_PNP_SHIFTER, oPC)) + return FALSE; + + int bResult = FALSE; + if(GetStringWord(sCommand, 1) == CMD_GREATER_WILDSHAPE) + { + bResult = TRUE; + string sWord = GetStringWord(sCommand, 2); + + object oTemplate; + string sShape, sResRef; + if(GetStringMatchesAbbreviation(sWord, CMD_SHIFT)) + { + sShape = GetStringWordToEnd(sCommand, 3); + _prc_inc_ChatShift(oPC, sShape, FALSE); + } + else if(GetStringMatchesAbbreviation(sWord, CMD_EPIC_SHIFT)) + { + sShape = GetStringWordToEnd(sCommand, 3); + _prc_inc_ChatShift(oPC, sShape, TRUE); + } + else if(GetStringMatchesAbbreviation(sWord, CMD_UNSHIFT)) + { + UnShift(oPC); + } + else if(GetStringMatchesAbbreviation(sWord, CMD_LIST)) + { + sShape = GetStringWordToEnd(sCommand, 3); + DelayCommand(0.0f, _prc_inc_ListShapes(oPC, SHIFTER_TYPE_SHIFTER, sShape)); + } + else if(GetStringMatchesAbbreviation(sWord, CMD_INFO)) + { + sShape = GetStringWordToEnd(sCommand, 3); + if(sShape != "") + { + sResRef = FindResRefFromString(oPC, SHIFTER_TYPE_SHIFTER, sShape, FALSE); + if(sResRef != "") + { + oTemplate = _prc_inc_load_template_from_resref(sResRef, GetHitDice(oPC)); + if(GetIsObjectValid(oTemplate)) + { + DelayCommand(0.0, _prc_inc_PrintShape(oPC, oTemplate, FALSE)); + DelayCommand(10.0, MyDestroyObject(oTemplate)); + } + } + } + } + else if(GetStringMatchesAbbreviation(sWord, CMD_MARK)) + { + sShape = GetStringWordToEnd(sCommand, 3); + _prc_inc_ChatMark(oPC, sShape, TRUE); + HelpText(oPC, "Shape marked for deletion"); + } + else if(GetStringMatchesAbbreviation(sWord, CMD_UNMARK)) + { + sShape = GetStringWordToEnd(sCommand, 3); + _prc_inc_ChatMark(oPC, sShape, FALSE); + HelpText(oPC, "Shape no longer marked for deletion"); + } + else if(GetStringMatchesAbbreviation(sWord, CMD_DELETE)) + { + if (GetStringWordToEnd(sCommand, 3) == "yes") + { + DelayCommand(0.0f, DeleteMarkedStoredTemplates(oPC, SHIFTER_TYPE_SHIFTER)); + HelpText(oPC, "Marked shapes deleted"); + } + else + HelpText(oPC, "Marked shapes not deleted: please enter 'yes' after the word 'delete' to confirm"); + } + else + { + HelpText(oPC, "Unrecognize " + CMD_GREATER_WILDSHAPE + " command: " + sWord); + } + } + return bResult; +} diff --git a/src/include/prc_inc_clsfunc.nss b/src/include/prc_inc_clsfunc.nss new file mode 100644 index 0000000..4d1ffcb --- /dev/null +++ b/src/include/prc_inc_clsfunc.nss @@ -0,0 +1,1741 @@ +/* + Class functions. + This scripts holds all functions used for classes in includes. + This prevents us from having one include for each class or set of classes. + + Stratovarius +*/ + + + +////////////////Begin Generic//////////////// + +// Function Definitions: + +// Include Files: +#include "prc_inc_spells" +//#include "prc_alterations" +//#include "prcsp_engine" +//#include "prc_inc_function" +//#include "prc_x2_itemprop" +//#include "prc_class_const" +//#include "prc_feat_const" +//#include "prc_ipfeat_const" +//#include "inc_utility" +// +//#include "pnp_shft_poly" +//#include "x2_inc_spellhook" +//#include "prc_inc_combat" +//#include "prc_inc_sp_tch" + +////////////////End Generic//////////////// + +//::void main (){} + + +////////////////Begin Drunken Master////////////////////// + + +// Function Definitions: + +// Searches oPC's inventory and finds the first valid alcoholic beverage container +// (empty) and returns TRUE if a proper container was found. This function takes +// action and returns a boolean. +int UseBottle(object oPC); + +// Searches oPC's inventory for an alcoholic beverage and if one is found it's +// destroyed and replaced by an empty container. This function is only used in +// the Breath of Fire spell script. +int UseAlcohol(object oPC = OBJECT_SELF); + +// Removes all Alcohol effects for oTarget. Used in B o Flame. +void RemoveAlcoholEffects(object oTarget = OBJECT_SELF); + +// Creates an empty bottle on oPC. +// sTag: the tag of the alcoholic beverage used (ale, spirits, wine) +void CreateBottleOnObject(object oPC, string sTag); + + +// Applies Drunk Like a Demno effects +void DrunkLikeDemon(); + +// Add the non-drunken master drinking effects. +void MakeDrunk(int nSpellID); + +// Have the drunken master say one of 6 phrases. +void DrunkenMasterSpeakString(); + +// Creates an empty bottle on oPC. +// nBeverage: the spell id of the alcoholic beverage used (ale, spirits, wine) +void DrunkenMasterCreateEmptyBottle(int nSpellID); + +// Determines the DC needed to save against the cast spell-like ability +// replace PRCGetSaveDC +int GetSpellDCSLA(object oCaster, int iSpelllvl,int iAbi = ABILITY_WISDOM); + +void DoArchmageHeirophantSLA(object oPC, object oTarget, location lTarget, int nSLAID); + +// Functions: +int UseBottle(object oPC) +{ + object oItem = GetFirstItemInInventory(oPC); + //search oPC for a bottle: + string sTag; + while(oItem != OBJECT_INVALID) + { + sTag = GetTag(oItem); + if(sTag == "NW_IT_THNMISC001" + || sTag == "NW_IT_THNMISC002" + || sTag == "NW_IT_THNMISC003" + || sTag == "NW_IT_THNMISC004") + { + SetPlotFlag(oItem, FALSE); + DestroyObject(oItem); + return TRUE; + } + else + oItem = GetNextItemInInventory(); + } + return FALSE; +} + +int UseAlcohol(object oPC = OBJECT_SELF) +{ + object oItem = GetFirstItemInInventory(oPC); + //search oPC for alcohol: + string sTag = GetTag(oItem); + while(oItem != OBJECT_INVALID) + { + if(sTag == "NW_IT_MPOTION021" + || sTag == "NW_IT_MPOTION022" + || sTag == "NW_IT_MPOTION023" + || sTag == "DragonsBreath") + { + SetPlotFlag(oItem, FALSE); + if(GetItemStackSize(oItem) > 1) + { + SetItemStackSize(oItem, GetItemStackSize(oItem) - 1); + // Create an Empty Bottle: + CreateBottleOnObject(oPC, sTag); + return TRUE; + } + else + { + DestroyObject(oItem); + // Create an Empty Bottle: + CreateBottleOnObject(oPC, sTag); + return TRUE; + } + } + else + oItem = GetNextItemInInventory(); + } + return FALSE; +} + +void CreateBottleOnObject(object oPC, string sTag) +{ + if(sTag == "NW_IT_MPOTION021") // Ale + { + CreateItemOnObject("nw_it_thnmisc002", oPC); + } + else if(sTag == "NW_IT_MPOTION022") // Spirits + { + CreateItemOnObject("nw_it_thnmisc003", oPC); + } + else if(sTag == "NW_IT_MPOTION023") // Wine + { + CreateItemOnObject("nw_it_thnmisc004", oPC); + } + else // Other beverage + { + CreateItemOnObject("nw_it_thnmisc001", oPC); + } +} + +int GetIsDrunk(object oTarget = OBJECT_SELF) +{ + return GetHasSpellEffect(406, oTarget) + || GetHasSpellEffect(407, oTarget) + || GetHasSpellEffect(408, oTarget); +} + +void RemoveAlcoholEffects(object oTarget = OBJECT_SELF) +{ + PRCRemoveSpellEffects(406, OBJECT_SELF, oTarget); + PRCRemoveSpellEffects(407, OBJECT_SELF, oTarget); + PRCRemoveSpellEffects(408, OBJECT_SELF, oTarget); +} + +void DrunkenRage() +{ + float fDuration = GetLevelByClass(CLASS_TYPE_DRUNKEN_MASTER) > 9 ? HoursToSeconds(3) : HoursToSeconds(1); + + effect eLink = EffectLinkEffects(EffectAbilityIncrease(ABILITY_STRENGTH, 4), EffectAbilityIncrease(ABILITY_CONSTITUTION, 4)); + eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_WILL, 2)); + eLink = EffectLinkEffects(eLink, EffectACDecrease(2)); + eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_BLUR)); + eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_AURA_FIRE)); + eLink = ExtraordinaryEffect(eLink); + + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, OBJECT_SELF, fDuration); + + FloatingTextStringOnCreature("Drunken Rage Activated", OBJECT_SELF); +} + +void DrunkLikeDemon() +{ + // A Drunken Master has had a drink. Add effects: + effect eLink = EffectLinkEffects(EffectAbilityIncrease(ABILITY_STRENGTH, 1), EffectAbilityIncrease(ABILITY_CONSTITUTION, 1)); + eLink = EffectLinkEffects(eLink, EffectAbilityDecrease(ABILITY_WISDOM, 1)); + eLink = EffectLinkEffects(eLink, EffectAbilityDecrease(ABILITY_INTELLIGENCE, 1)); + eLink = EffectLinkEffects(eLink, EffectAbilityDecrease(ABILITY_DEXTERITY, 1)); + eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_BLUR)); + + //run checks to see if Dex Modifier will be changed: + if(!(GetAbilityModifier(ABILITY_DEXTERITY) % 2)) + { + //restore AC, Ref save and Tumble to previous values + eLink = EffectLinkEffects(eLink, EffectACIncrease(1)); + eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_REFLEX, 1)); + eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_TUMBLE, 1)); + } + eLink = ExtraordinaryEffect(eLink); + + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, OBJECT_SELF, HoursToSeconds(1)); + + FloatingTextStringOnCreature("You are Drunk Like a Demon", OBJECT_SELF); +} + +void MakeDrunk(int nSpellID) +{ + if(Random(100) < 40) + AssignCommand(OBJECT_SELF, ActionPlayAnimation(ANIMATION_LOOPING_TALK_LAUGHING)); + else + AssignCommand(OBJECT_SELF, ActionPlayAnimation(ANIMATION_LOOPING_PAUSE_DRUNK)); + + int nPoints; + switch(nSpellID) + { + case 406: nPoints = 1; break;//Ale + case 407: nPoints = 2; break;//Wine + case 408: nPoints = 3; break;//Spirits + } + + //ApplyAbilityDamage(oTarget, ABILITY_INTELLIGENCE, nPoints, DURATION_TYPE_TEMPORARY, TRUE, 60.0); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectAbilityDecrease(ABILITY_INTELLIGENCE, nPoints)), OBJECT_SELF, 60.0); + AssignCommand(OBJECT_SELF, ActionSpeakStringByStrRef(10499)); +} + +void DrunkenMasterSpeakString() +{ + switch(d6()) + { + case 1: AssignCommand(OBJECT_SELF, ActionSpeakString("Now that's the stuff!")); break; + case 2: AssignCommand(OBJECT_SELF, ActionSpeakString("That one really hit the spot!")); break; + case 3: AssignCommand(OBJECT_SELF, ActionSpeakString("That should keep me warm!")); break; + case 4: AssignCommand(OBJECT_SELF, ActionSpeakString("Good stuff!")); break; + case 5: AssignCommand(OBJECT_SELF, ActionSpeakString("Bless the Wine Gods!")); break; + case 6: AssignCommand(OBJECT_SELF, ActionSpeakString("Just what I needed!")); break; + } +} + +void DrunkenMasterCreateEmptyBottle(int nSpellID) +{ + switch(nSpellID) + { + case 406: CreateItemOnObject("nw_it_thnmisc002", OBJECT_SELF); break;//Ale + case 407: CreateItemOnObject("nw_it_thnmisc004", OBJECT_SELF); break;//Wine + case 408: CreateItemOnObject("nw_it_thnmisc003", OBJECT_SELF); break;//Spirits + default: CreateItemOnObject("nw_it_thnmisc001", OBJECT_SELF); break;//Other + } +} + +////////////////End Drunken Master////////////////// + +////////////////Begin Samurai////////////////// + +// This function is probably utterly broken: the match found variable is not reset in the loop and the returned value will be equal to the last match - Ornedan +int GetPropertyValue(object oWeapon, int iType, int iSubType = -1, int bDebug = FALSE); + +int GetPropertyValue(object oWeapon, int iType, int iSubType = -1, int bDebug = FALSE) +{ + int bReturn = -1; + if(oWeapon == OBJECT_INVALID){return FALSE;} + int bMatch = FALSE; + if (GetItemHasItemProperty(oWeapon, iType)) + { + if(bDebug){AssignCommand(GetFirstPC(), SpeakString("It has the property."));} + itemproperty ip = GetFirstItemProperty(oWeapon); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == iType) + { + if(bDebug){AssignCommand(GetFirstPC(), SpeakString("Again..."));} + bMatch = TRUE; + if (iSubType > -1) + { + if(bDebug){AssignCommand(GetFirstPC(), SpeakString("Subtype Required."));} + if(GetItemPropertySubType(ip) != iSubType) + { + if(bDebug){AssignCommand(GetFirstPC(), SpeakString("Subtype wrong."));} + bMatch = FALSE; + } + else + { + if(bDebug){AssignCommand(GetFirstPC(), SpeakString("Subtype Correct."));} + } + } + } + if (bMatch) + { + if(bDebug){AssignCommand(GetFirstPC(), SpeakString("Match found."));} + if (GetItemPropertyCostTableValue(ip) > -1) + { + if(bDebug){AssignCommand(GetFirstPC(), SpeakString("Cost value found, returning."));} + bReturn = GetItemPropertyCostTableValue(ip); + } + else + { + if(bDebug){AssignCommand(GetFirstPC(), SpeakString("No cost value for property, returning TRUE."));} + bReturn = 1; + } + } + else + { + if(bDebug){AssignCommand(GetFirstPC(), SpeakString("Match not found."));} + } + ip = GetNextItemProperty(oWeapon); + } + } + return bReturn; +} + + +void WeaponUpgradeVisual(); + +object GetSamuraiToken(object oSamurai); + +void WeaponUpgradeVisual() +{ + object oPC = GetPCSpeaker(); + int iCost = GetLocalInt(oPC, "CODI_SAM_WEAPON_COST"); + object oToken = GetSamuraiToken(oPC); + int iToken = StringToInt(GetTag(oToken)); + int iGold = GetGold(oPC); + if(iGold + iToken < iCost) + { + SendMessageToPC(oPC, "You sense the gods are angered!"); + AdjustAlignment(oPC, ALIGNMENT_CHAOTIC, 25, FALSE); + object oWeapon = GetItemPossessedBy(oPC, "codi_sam_mw"); + DestroyObject(oWeapon); + return; + } + else if(iToken <= iCost) + { + iCost = iCost - iToken; + DestroyObject(oToken); + TakeGoldFromCreature(iCost, oPC, TRUE); + } + else if (iToken > iCost) + { + object oNewToken = CopyObject(oToken, GetLocation(oPC), oPC, IntToString(iToken - iCost)); + DestroyObject(oToken); + } + effect eVis = EffectVisualEffect(VFX_FNF_DISPEL_DISJUNCTION); + AssignCommand(oPC, ClearAllActions()); + AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE,1.0,6.0)); + AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2)); + DelayCommand(0.1, SetCommandable(FALSE, oPC)); + DelayCommand(6.5, SetCommandable(TRUE, oPC)); + DelayCommand(5.0,ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oPC))); +} + +object GetSamuraiToken(object oSamurai) +{ + object oItem = GetFirstItemInInventory(oSamurai); + while(oItem != OBJECT_INVALID) + { + if(GetResRef(oItem) == "codi_sam_token") + { + return oItem; + } + oItem = GetNextItemInInventory(oSamurai); + } + return OBJECT_INVALID; +} + + + + +////////////////End Samurai////////////////// + +////////////////Begin Vile Feat////////////////// + + +int Vile_Feat(int iTypeWeap) +{ + switch(iTypeWeap) + { + case BASE_ITEM_BASTARDSWORD: return GetHasFeat(FEAT_VILE_MARTIAL_BASTARDSWORD); + case BASE_ITEM_BATTLEAXE: return GetHasFeat(FEAT_VILE_MARTIAL_BATTLEAXE); + case BASE_ITEM_CLUB: return GetHasFeat(FEAT_VILE_MARTIAL_CLUB); + case BASE_ITEM_DAGGER: return GetHasFeat(FEAT_VILE_MARTIAL_DAGGER); + case BASE_ITEM_DART: return GetHasFeat(FEAT_VILE_MARTIAL_DART); + case BASE_ITEM_DIREMACE: return GetHasFeat(FEAT_VILE_MARTIAL_DIREMACE); + case BASE_ITEM_DOUBLEAXE: return GetHasFeat(FEAT_VILE_MARTIAL_DOUBLEAXE); + case BASE_ITEM_DWARVENWARAXE: return GetHasFeat(FEAT_VILE_MARTIAL_DWAXE); + case BASE_ITEM_GREATAXE: return GetHasFeat(FEAT_VILE_MARTIAL_GREATAXE); + case BASE_ITEM_GREATSWORD: return GetHasFeat(FEAT_VILE_MARTIAL_GREATSWORD); + case BASE_ITEM_HALBERD: return GetHasFeat(FEAT_VILE_MARTIAL_HALBERD); + case BASE_ITEM_HANDAXE: return GetHasFeat(FEAT_VILE_MARTIAL_HANDAXE); + case BASE_ITEM_HEAVYCROSSBOW: return GetHasFeat(FEAT_VILE_MARTIAL_HEAVYCROSSBOW); + case BASE_ITEM_HEAVYFLAIL: return GetHasFeat(FEAT_VILE_MARTIAL_HEAVYFLAIL); + case BASE_ITEM_KAMA: return GetHasFeat(FEAT_VILE_MARTIAL_KAMA); + case BASE_ITEM_KATANA: return GetHasFeat(FEAT_VILE_MARTIAL_KATANA); + case BASE_ITEM_KUKRI: return GetHasFeat(FEAT_VILE_MARTIAL_KUKRI); + case BASE_ITEM_LIGHTCROSSBOW: return GetHasFeat(FEAT_VILE_MARTIAL_LIGHTCROSSBOW); + case BASE_ITEM_LIGHTFLAIL: return GetHasFeat(FEAT_VILE_MARTIAL_LIGHTFLAIL); + case BASE_ITEM_LIGHTHAMMER: return GetHasFeat(FEAT_VILE_MARTIAL_LIGHTHAMMER); + case BASE_ITEM_LIGHTMACE: return GetHasFeat(FEAT_VILE_MARTIAL_MACE); + case BASE_ITEM_LONGBOW: return GetHasFeat(FEAT_VILE_MARTIAL_LONGBOW); + case BASE_ITEM_LONGSWORD: return GetHasFeat(FEAT_VILE_MARTIAL_LONGSWORD); + case BASE_ITEM_MORNINGSTAR: return GetHasFeat(FEAT_VILE_MARTIAL_MORNINGSTAR); + case BASE_ITEM_QUARTERSTAFF: return GetHasFeat(FEAT_VILE_MARTIAL_QUARTERSTAFF); + case BASE_ITEM_MAGICSTAFF: return GetHasFeat(FEAT_VILE_MARTIAL_QUARTERSTAFF); + case BASE_ITEM_RAPIER: return GetHasFeat(FEAT_VILE_MARTIAL_RAPIER); + case BASE_ITEM_SCIMITAR: return GetHasFeat(FEAT_VILE_MARTIAL_SCIMITAR); + case BASE_ITEM_SCYTHE: return GetHasFeat(FEAT_VILE_MARTIAL_SCYTHE); + case BASE_ITEM_SHORTBOW: return GetHasFeat(FEAT_VILE_MARTIAL_SHORTBOW); + case BASE_ITEM_SHORTSPEAR: return GetHasFeat(FEAT_VILE_MARTIAL_SPEAR); + case BASE_ITEM_SHORTSWORD: return GetHasFeat(FEAT_VILE_MARTIAL_SHORTSWORD); + case BASE_ITEM_SHURIKEN: return GetHasFeat(FEAT_VILE_MARTIAL_SHURIKEN); + case BASE_ITEM_SLING: return GetHasFeat(FEAT_VILE_MARTIAL_SLING); + case BASE_ITEM_SICKLE: return GetHasFeat(FEAT_VILE_MARTIAL_SICKLE); + case BASE_ITEM_TWOBLADEDSWORD: return GetHasFeat(FEAT_VILE_MARTIAL_TWOBLADED); + case BASE_ITEM_WARHAMMER: return GetHasFeat(FEAT_VILE_MARTIAL_WARHAMMER); + case BASE_ITEM_WHIP: return GetHasFeat(FEAT_VILE_MARTIAL_WHIP); + case BASE_ITEM_TRIDENT: return GetHasFeat(FEAT_VILE_MARTIAL_TRIDENT); + + //:: New items + case BASE_ITEM_ELVEN_LIGHTBLADE: return (GetHasFeat(FEAT_VILE_MARTIAL_SHORTSWORD) || + GetHasFeat(FEAT_VILE_MARTIAL_RAPIER) || + GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_LIGHTBLADE)); + + case BASE_ITEM_ELVEN_THINBLADE: return (GetHasFeat(FEAT_VILE_MARTIAL_LONGSWORD) || + GetHasFeat(FEAT_VILE_MARTIAL_RAPIER) || + GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_THINBLADE)); + + case BASE_ITEM_ELVEN_COURTBLADE: return GetHasFeat(FEAT_VILE_MARTIAL_GREATSWORD || + GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_COURTBLADE)); + + case BASE_ITEM_DOUBLE_SCIMITAR: return GetHasFeat(FEAT_VILE_MARTIAL_DBL_SCIMITAR); + case BASE_ITEM_EAGLE_CLAW: return GetHasFeat(FEAT_VILE_MARTIAL_EAGLE_CLAW); + case BASE_ITEM_FALCHION: return GetHasFeat(FEAT_VILE_MARTIAL_FALCHION); + case BASE_ITEM_GOAD: return GetHasFeat(FEAT_VILE_MARTIAL_GOAD); + case BASE_ITEM_HEAVY_MACE: return GetHasFeat(FEAT_VILE_MARTIAL_HEAVY_MACE); + case BASE_ITEM_HEAVY_PICK: return GetHasFeat(FEAT_VILE_MARTIAL_HEAVY_PICK); + case BASE_ITEM_KATAR: return GetHasFeat(FEAT_VILE_MARTIAL_KATAR); + case BASE_ITEM_LIGHT_LANCE: return GetHasFeat(FEAT_VILE_MARTIAL_LIGHT_LANCE); + case BASE_ITEM_LIGHT_PICK: return GetHasFeat(FEAT_VILE_MARTIAL_LIGHT_PICK); + case BASE_ITEM_MAUL: return GetHasFeat(FEAT_VILE_MARTIAL_MAUL); + case BASE_ITEM_NUNCHAKU: return GetHasFeat(FEAT_VILE_MARTIAL_NUNCHAKU); + case BASE_ITEM_SAI: return GetHasFeat(FEAT_VILE_MARTIAL_SAI); + case BASE_ITEM_SAP: return GetHasFeat(FEAT_VILE_MARTIAL_SAP); + } + + return FALSE; + +} + +////////////////End Vile Feat////////////////// + +////////////////Begin Soul Inc////////////////// + +const int IPRP_CONST_ONHIT_DURATION_5_PERCENT_1_ROUNDS = 20; + +int GetSanctifedMartialFeat(int iTypeWeap) +{ + switch(iTypeWeap) + { + case BASE_ITEM_BASTARDSWORD: return FEAT_SANCTIFY_MARTIAL_BASTARDSWORD; + case BASE_ITEM_BATTLEAXE: return FEAT_SANCTIFY_MARTIAL_BATTLEAXE; + case BASE_ITEM_CLUB: return FEAT_SANCTIFY_MARTIAL_CLUB; + case BASE_ITEM_DAGGER: return FEAT_SANCTIFY_MARTIAL_DAGGER; + case BASE_ITEM_DART: return FEAT_SANCTIFY_MARTIAL_DART; + case BASE_ITEM_DIREMACE: return FEAT_SANCTIFY_MARTIAL_DIREMACE; + case BASE_ITEM_DOUBLEAXE: return FEAT_SANCTIFY_MARTIAL_DOUBLEAXE; + case BASE_ITEM_DWARVENWARAXE: return FEAT_SANCTIFY_MARTIAL_DWAXE; + case BASE_ITEM_GREATAXE: return FEAT_SANCTIFY_MARTIAL_GREATAXE; + case BASE_ITEM_GREATSWORD: return FEAT_SANCTIFY_MARTIAL_GREATSWORD; + case BASE_ITEM_HALBERD: return FEAT_SANCTIFY_MARTIAL_HALBERD; + case BASE_ITEM_HANDAXE: return FEAT_SANCTIFY_MARTIAL_HANDAXE; + case BASE_ITEM_HEAVYCROSSBOW: return FEAT_SANCTIFY_MARTIAL_HEAVYCROSSBOW; + case BASE_ITEM_HEAVYFLAIL: return FEAT_SANCTIFY_MARTIAL_HEAVYFLAIL; + case BASE_ITEM_KAMA: return FEAT_SANCTIFY_MARTIAL_KAMA; + case BASE_ITEM_KATANA: return FEAT_SANCTIFY_MARTIAL_KATANA; + case BASE_ITEM_KUKRI: return FEAT_SANCTIFY_MARTIAL_KUKRI; + case BASE_ITEM_LIGHTCROSSBOW: return FEAT_SANCTIFY_MARTIAL_LIGHTCROSSBOW; + case BASE_ITEM_LIGHTFLAIL: return FEAT_SANCTIFY_MARTIAL_LIGHTFLAIL; + case BASE_ITEM_LIGHTHAMMER: return FEAT_SANCTIFY_MARTIAL_LIGHTHAMMER; + case BASE_ITEM_LIGHTMACE: return FEAT_SANCTIFY_MARTIAL_MACE; + case BASE_ITEM_LONGBOW: return FEAT_SANCTIFY_MARTIAL_LONGBOW; + case BASE_ITEM_LONGSWORD: return FEAT_SANCTIFY_MARTIAL_LONGSWORD; + case BASE_ITEM_MORNINGSTAR: return FEAT_SANCTIFY_MARTIAL_MORNINGSTAR; + case BASE_ITEM_QUARTERSTAFF: return FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF; + case BASE_ITEM_MAGICSTAFF: return FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF; + case BASE_ITEM_RAPIER: return FEAT_SANCTIFY_MARTIAL_RAPIER; + case BASE_ITEM_SCIMITAR: return FEAT_SANCTIFY_MARTIAL_SCIMITAR; + case BASE_ITEM_SCYTHE: return FEAT_SANCTIFY_MARTIAL_SCYTHE; + case BASE_ITEM_SHORTBOW: return FEAT_SANCTIFY_MARTIAL_SHORTBOW; + case BASE_ITEM_SHORTSPEAR: return FEAT_SANCTIFY_MARTIAL_SPEAR; + case BASE_ITEM_SHORTSWORD: return FEAT_SANCTIFY_MARTIAL_SHORTSWORD; + case BASE_ITEM_SHURIKEN: return FEAT_SANCTIFY_MARTIAL_SHURIKEN; + case BASE_ITEM_SLING: return FEAT_SANCTIFY_MARTIAL_SLING; + case BASE_ITEM_SICKLE: return FEAT_SANCTIFY_MARTIAL_SICKLE; + case BASE_ITEM_TWOBLADEDSWORD: return FEAT_SANCTIFY_MARTIAL_TWOBLADED; + case BASE_ITEM_WARHAMMER: return FEAT_SANCTIFY_MARTIAL_WARHAMMER; + case BASE_ITEM_WHIP: return FEAT_SANCTIFY_MARTIAL_WHIP; + case BASE_ITEM_TRIDENT: return FEAT_SANCTIFY_MARTIAL_TRIDENT; + + //new items + case BASE_ITEM_ELVEN_LIGHTBLADE: return FEAT_SANCTIFY_MARTIAL_SHORTSWORD || + FEAT_SANCTIFY_MARTIAL_RAPIER || + FEAT_SANCTIFY_MARTIAL_ELVEN_LIGHTBLADE; + + case BASE_ITEM_ELVEN_THINBLADE: return FEAT_SANCTIFY_MARTIAL_LONGSWORD || + FEAT_SANCTIFY_MARTIAL_RAPIER || + FEAT_SANCTIFY_MARTIAL_ELVEN_THINBLADE; + + case BASE_ITEM_ELVEN_COURTBLADE: return FEAT_SANCTIFY_MARTIAL_GREATSWORD || + FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE; + + case BASE_ITEM_DOUBLE_SCIMITAR: return FEAT_SANCTIFY_MARTIAL_DBL_SCIMITAR; + case BASE_ITEM_EAGLE_CLAW: return FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW; + case BASE_ITEM_FALCHION: return FEAT_SANCTIFY_MARTIAL_FALCHION; + case BASE_ITEM_GOAD: return FEAT_SANCTIFY_MARTIAL_GOAD; + case BASE_ITEM_HEAVY_MACE: return FEAT_SANCTIFY_MARTIAL_HEAVY_MACE; + case BASE_ITEM_HEAVY_PICK: return FEAT_SANCTIFY_MARTIAL_HEAVY_PICK; + case BASE_ITEM_KATAR: return FEAT_SANCTIFY_MARTIAL_KATAR; + case BASE_ITEM_LIGHT_LANCE: return FEAT_SANCTIFY_MARTIAL_LIGHT_LANCE; + case BASE_ITEM_LIGHT_PICK: return FEAT_SANCTIFY_MARTIAL_LIGHT_PICK; + case BASE_ITEM_MAUL: return FEAT_SANCTIFY_MARTIAL_MAUL; + case BASE_ITEM_NUNCHAKU: return FEAT_SANCTIFY_MARTIAL_NUNCHAKU; + case BASE_ITEM_SAI: return FEAT_SANCTIFY_MARTIAL_SAI; + case BASE_ITEM_SAP: return FEAT_SANCTIFY_MARTIAL_SAP; + } + + return FALSE; +} + +int Sanctify_Feat(int iTypeWeap) +{ + switch(iTypeWeap) + { + case BASE_ITEM_BASTARDSWORD: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_BASTARDSWORD); + case BASE_ITEM_BATTLEAXE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_BATTLEAXE); + case BASE_ITEM_CLUB: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_CLUB); + case BASE_ITEM_DAGGER: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_DAGGER); + case BASE_ITEM_DART: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_DART); + case BASE_ITEM_DIREMACE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_DIREMACE); + case BASE_ITEM_DOUBLEAXE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_DOUBLEAXE); + case BASE_ITEM_DWARVENWARAXE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_DWAXE); + case BASE_ITEM_GREATAXE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_GREATAXE); + case BASE_ITEM_GREATSWORD: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_GREATSWORD); + case BASE_ITEM_HALBERD: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_HALBERD); + case BASE_ITEM_HANDAXE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_HANDAXE); + case BASE_ITEM_HEAVYCROSSBOW: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_HEAVYCROSSBOW); + case BASE_ITEM_HEAVYFLAIL: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_HEAVYFLAIL); + case BASE_ITEM_KAMA: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_KAMA); + case BASE_ITEM_KATANA: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_KATANA); + case BASE_ITEM_KUKRI: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_KUKRI); + case BASE_ITEM_LIGHTCROSSBOW: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_LIGHTCROSSBOW); + case BASE_ITEM_LIGHTFLAIL: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_LIGHTFLAIL); + case BASE_ITEM_LIGHTHAMMER: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_LIGHTHAMMER); + case BASE_ITEM_LIGHTMACE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_MACE); + case BASE_ITEM_LONGBOW: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_LONGBOW); + case BASE_ITEM_LONGSWORD: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_LONGSWORD); + case BASE_ITEM_MORNINGSTAR: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_MORNINGSTAR); + case BASE_ITEM_QUARTERSTAFF: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF); + case BASE_ITEM_MAGICSTAFF: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF); + case BASE_ITEM_RAPIER: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_RAPIER); + case BASE_ITEM_SCIMITAR: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_SCIMITAR); + case BASE_ITEM_SCYTHE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_SCYTHE); + case BASE_ITEM_SHORTBOW: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_SHORTBOW); + case BASE_ITEM_SHORTSPEAR: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_SPEAR); + case BASE_ITEM_SHORTSWORD: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_SHORTSWORD); + case BASE_ITEM_SHURIKEN: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_SHURIKEN); + case BASE_ITEM_SLING: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_SLING); + case BASE_ITEM_SICKLE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_SICKLE); + case BASE_ITEM_TWOBLADEDSWORD: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_TWOBLADED); + case BASE_ITEM_WARHAMMER: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_WARHAMMER); + case BASE_ITEM_WHIP: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_WHIP); + case BASE_ITEM_TRIDENT: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_TRIDENT); + + //:: New items + case BASE_ITEM_ELVEN_LIGHTBLADE: return (GetHasFeat(FEAT_SANCTIFY_MARTIAL_SHORTSWORD) || + GetHasFeat(FEAT_SANCTIFY_MARTIAL_RAPIER) || + GetHasFeat(FEAT_SANCTIFY_MARTIAL_ELVEN_LIGHTBLADE)); + + case BASE_ITEM_ELVEN_THINBLADE: return (GetHasFeat(FEAT_SANCTIFY_MARTIAL_LONGSWORD) || + GetHasFeat(FEAT_SANCTIFY_MARTIAL_RAPIER) || + GetHasFeat(FEAT_SANCTIFY_MARTIAL_ELVEN_THINBLADE)); + + case BASE_ITEM_ELVEN_COURTBLADE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_GREATSWORD || + GetHasFeat(FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE)); + + case BASE_ITEM_DOUBLE_SCIMITAR: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_DBL_SCIMITAR); + case BASE_ITEM_EAGLE_CLAW: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW); + case BASE_ITEM_FALCHION: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_FALCHION); + case BASE_ITEM_GOAD: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_GOAD); + case BASE_ITEM_HEAVY_MACE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_HEAVY_MACE); + case BASE_ITEM_HEAVY_PICK: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_HEAVY_PICK); + case BASE_ITEM_KATAR: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_KATAR); + case BASE_ITEM_LIGHT_LANCE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_LIGHT_LANCE); + case BASE_ITEM_LIGHT_PICK: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_LIGHT_PICK); + case BASE_ITEM_MAUL: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_MAUL); + case BASE_ITEM_NUNCHAKU: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_NUNCHAKU); + case BASE_ITEM_SAI: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_SAI); + case BASE_ITEM_SAP: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_SAP); + } + + return FALSE; +} + +int DamageConv(int iMonsDmg) +{ + + switch(iMonsDmg) + { + case IP_CONST_MONSTERDAMAGE_1d4: return 1; + case IP_CONST_MONSTERDAMAGE_1d6: return 2; + case IP_CONST_MONSTERDAMAGE_1d8: return 3; + case IP_CONST_MONSTERDAMAGE_1d10: return 4; + case IP_CONST_MONSTERDAMAGE_1d12: return 5; + case IP_CONST_MONSTERDAMAGE_1d20: return 6; + + case IP_CONST_MONSTERDAMAGE_2d4: return 10; + case IP_CONST_MONSTERDAMAGE_2d6: return 11; + case IP_CONST_MONSTERDAMAGE_2d8: return 12; + case IP_CONST_MONSTERDAMAGE_2d10: return 13; + case IP_CONST_MONSTERDAMAGE_2d12: return 14; + case IP_CONST_MONSTERDAMAGE_2d20: return 15; + + case IP_CONST_MONSTERDAMAGE_3d4: return 20; + case IP_CONST_MONSTERDAMAGE_3d6: return 21; + case IP_CONST_MONSTERDAMAGE_3d8: return 22; + case IP_CONST_MONSTERDAMAGE_3d10: return 23; + case IP_CONST_MONSTERDAMAGE_3d12: return 24; + case IP_CONST_MONSTERDAMAGE_3d20: return 25; + + + } + + + return 0; +} + +int ConvMonsterDmg(int iMonsDmg) +{ + + switch(iMonsDmg) + { + case 1: return IP_CONST_MONSTERDAMAGE_1d4; + case 2: return IP_CONST_MONSTERDAMAGE_1d6; + case 3: return IP_CONST_MONSTERDAMAGE_1d8; + case 4: return IP_CONST_MONSTERDAMAGE_1d10; + case 5: return IP_CONST_MONSTERDAMAGE_1d12; + case 6: return IP_CONST_MONSTERDAMAGE_1d20; + case 10: return IP_CONST_MONSTERDAMAGE_2d4; + case 11: return IP_CONST_MONSTERDAMAGE_2d6; + case 12: return IP_CONST_MONSTERDAMAGE_2d8; + case 13: return IP_CONST_MONSTERDAMAGE_2d10; + case 14: return IP_CONST_MONSTERDAMAGE_2d12; + case 15: return IP_CONST_MONSTERDAMAGE_2d20; + case 20: return IP_CONST_MONSTERDAMAGE_3d4; + case 21: return IP_CONST_MONSTERDAMAGE_3d6; + case 22: return IP_CONST_MONSTERDAMAGE_3d8; + case 23: return IP_CONST_MONSTERDAMAGE_3d10; + case 24: return IP_CONST_MONSTERDAMAGE_3d12; + case 25: return IP_CONST_MONSTERDAMAGE_3d20; + + } + + return 0; +} + +int MonsterDamage(object oItem) +{ + int iBonus; + int iTemp; + itemproperty ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_MONSTER_DAMAGE) + { + iTemp = GetItemPropertyCostTableValue(ip); + iBonus = iTemp > iBonus ? iTemp : iBonus; + } + ip = GetNextItemProperty(oItem); + } + + return iBonus; +} + +int FeatIniDmg(object oItem) +{ + itemproperty ip = GetFirstItemProperty(oItem); + while (GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_BONUS_FEAT) + { + if(GetItemPropertySubType(ip) == IP_CONST_FEAT_WeapFocCreature) + return 1; + } + ip = GetNextItemProperty(oItem); + } + return 0; +} + +void AddIniDmg(object oPC) +{ + + int bUnarmedDmg = GetHasFeat(FEAT_INCREASE_DAMAGE1, oPC) + + GetHasFeat(FEAT_INCREASE_DAMAGE2, oPC); + + if(!bUnarmedDmg) + return; + + object oCweapB = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B,oPC); + object oCweapL = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L,oPC); + object oCweapR = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R,oPC); + + int iDmg; + int iConv; + int iStr = GetAbilityModifier(ABILITY_STRENGTH, oPC); + int iWis = GetAbilityModifier(ABILITY_WISDOM, oPC); + iWis = iWis > iStr ? iWis : 0; + + + /*if(GetHasFeat(FEAT_INTUITIVE_ATTACK, oPC)) + { + SetCompositeBonusT(oCweapB,"",iWis,ITEM_PROPERTY_ATTACK_BONUS); + SetCompositeBonusT(oCweapL,"",iWis,ITEM_PROPERTY_ATTACK_BONUS); + SetCompositeBonusT(oCweapR,"",iWis,ITEM_PROPERTY_ATTACK_BONUS); + } + if (GetHasFeat(FEAT_RAVAGEGOLDENICE, oPC)) + { + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2),oCweapB,9999.0); + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2),oCweapL,9999.0); + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2),oCweapR,9999.0); + }*/ + + + if ( oCweapB != OBJECT_INVALID && !FeatIniDmg(oCweapB)) + { + iDmg = MonsterDamage(oCweapB); + iConv = DamageConv(iDmg) + bUnarmedDmg; + iConv = (iConv > 6 && iConv < 10) ? 6 : iConv; + iConv = (iConv > 15 && iConv < 20) ? 15 : iConv; + iConv = (iConv > 25) ? 25 : iConv; + iConv = ConvMonsterDmg(iConv); + TotalAndRemoveProperty(oCweapB,ITEM_PROPERTY_MONSTER_DAMAGE,-1); + AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyMonsterDamage(iConv),oCweapB); + //AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_WeapFocCreature),oCweapB); + IPSafeAddItemProperty(oCweapB, PRCItemPropertyBonusFeat(IP_CONST_FEAT_WeapFocCreature), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + } + if ( oCweapL != OBJECT_INVALID && !FeatIniDmg(oCweapL)) + { + iDmg = MonsterDamage(oCweapL); + iConv = DamageConv(iDmg) + bUnarmedDmg; + iConv = (iConv > 6 && iConv < 10) ? 6 : iConv; + iConv = (iConv > 15 && iConv < 20) ? 15 : iConv; + iConv = (iConv > 25) ? 25 : iConv; + iConv = ConvMonsterDmg(iConv); + TotalAndRemoveProperty(oCweapL,ITEM_PROPERTY_MONSTER_DAMAGE,-1); + AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyMonsterDamage(iConv),oCweapL); + //AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_WeapFocCreature),oCweapL); + IPSafeAddItemProperty(oCweapL, PRCItemPropertyBonusFeat(IP_CONST_FEAT_WeapFocCreature), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + } + if ( oCweapR != OBJECT_INVALID && !FeatIniDmg(oCweapR)) + { + iDmg = MonsterDamage(oCweapR); + iConv = DamageConv(iDmg) + bUnarmedDmg; + iConv = (iConv > 6 && iConv < 10) ? 6 : iConv; + iConv = (iConv > 15 && iConv < 20) ? 15 : iConv; + iConv = (iConv > 25) ? 25 : iConv; + iConv = ConvMonsterDmg(iConv); + TotalAndRemoveProperty(oCweapR,ITEM_PROPERTY_MONSTER_DAMAGE,-1); + AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyMonsterDamage(iConv),oCweapR); + //AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_WeapFocCreature),oCweapR); + IPSafeAddItemProperty(oCweapR, PRCItemPropertyBonusFeat(IP_CONST_FEAT_WeapFocCreature), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + } +} + +void AddCriti(object oPC,object oSkin,int ip_feat_crit,int nFeat) +{ + // Do not add multiple instances of the same bonus feat iprop, it lags the game + AddSkinFeat(nFeat, ip_feat_crit, oSkin, oPC); +} + +void ImpCrit(object oPC,object oSkin) +{ + if(GetHasFeat(FEAT_WEAPON_FOCUS_BASTARD_SWORD, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_BASTARD_SWORD, FEAT_IMPROVED_CRITICAL_BASTARD_SWORD); + if(GetHasFeat(FEAT_WEAPON_FOCUS_BATTLE_AXE, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_BATTLE_AXE, FEAT_IMPROVED_CRITICAL_BATTLE_AXE); + if(GetHasFeat(FEAT_WEAPON_FOCUS_CLUB, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_CLUB, FEAT_IMPROVED_CRITICAL_CLUB); + if(GetHasFeat(FEAT_WEAPON_FOCUS_DAGGER, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_DAGGER, FEAT_IMPROVED_CRITICAL_DAGGER); + if(GetHasFeat(FEAT_WEAPON_FOCUS_DART, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_DART, FEAT_IMPROVED_CRITICAL_DART); + if(GetHasFeat(FEAT_WEAPON_FOCUS_DIRE_MACE, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_DIRE_MACE, FEAT_IMPROVED_CRITICAL_DIRE_MACE); + if(GetHasFeat(FEAT_WEAPON_FOCUS_DOUBLE_AXE, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_DOUBLE_AXE, FEAT_IMPROVED_CRITICAL_DOUBLE_AXE); + if(GetHasFeat(FEAT_WEAPON_FOCUS_DWAXE, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_DWAXE, FEAT_IMPROVED_CRITICAL_DWAXE); + if(GetHasFeat(FEAT_WEAPON_FOCUS_GREAT_AXE, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_GREAT_AXE, FEAT_IMPROVED_CRITICAL_GREAT_AXE); + if(GetHasFeat(FEAT_WEAPON_FOCUS_GREAT_SWORD, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_GREAT_SWORD, FEAT_IMPROVED_CRITICAL_GREAT_SWORD); + if(GetHasFeat(FEAT_WEAPON_FOCUS_HALBERD, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_HALBERD, FEAT_IMPROVED_CRITICAL_HALBERD); + if(GetHasFeat(FEAT_WEAPON_FOCUS_HAND_AXE, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_HAND_AXE, FEAT_IMPROVED_CRITICAL_HAND_AXE); + if(GetHasFeat(FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_HEAVY_CROSSBOW, FEAT_IMPROVED_CRITICAL_HEAVY_CROSSBOW); + if(GetHasFeat(FEAT_WEAPON_FOCUS_HEAVY_FLAIL, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_HEAVY_FLAIL, FEAT_IMPROVED_CRITICAL_HEAVY_FLAIL); + if(GetHasFeat(FEAT_WEAPON_FOCUS_KAMA, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_KAMA, FEAT_IMPROVED_CRITICAL_KAMA); + if(GetHasFeat(FEAT_WEAPON_FOCUS_KATANA, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_KATANA, FEAT_IMPROVED_CRITICAL_KATANA); + if(GetHasFeat(FEAT_WEAPON_FOCUS_KUKRI, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_KUKRI, FEAT_IMPROVED_CRITICAL_KUKRI); + if(GetHasFeat(FEAT_WEAPON_FOCUS_LIGHT_CROSSBOW, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_LIGHT_CROSSBOW, FEAT_IMPROVED_CRITICAL_LIGHT_CROSSBOW); + if(GetHasFeat(FEAT_WEAPON_FOCUS_LIGHT_FLAIL, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_LIGHT_FLAIL, FEAT_IMPROVED_CRITICAL_LIGHT_FLAIL); + if(GetHasFeat(FEAT_WEAPON_FOCUS_LIGHT_HAMMER, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_LIGHT_HAMMER, FEAT_IMPROVED_CRITICAL_LIGHT_HAMMER); + if(GetHasFeat(FEAT_WEAPON_FOCUS_LIGHT_MACE, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_LIGHT_MACE, FEAT_IMPROVED_CRITICAL_LIGHT_MACE); + if(GetHasFeat(FEAT_WEAPON_FOCUS_LONG_SWORD, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_LONG_SWORD, FEAT_IMPROVED_CRITICAL_LONG_SWORD); + if(GetHasFeat(FEAT_WEAPON_FOCUS_LONGBOW, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_LONGBOW, FEAT_IMPROVED_CRITICAL_LONGBOW); + if(GetHasFeat(FEAT_WEAPON_FOCUS_MORNING_STAR, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_MORNING_STAR, FEAT_IMPROVED_CRITICAL_MORNING_STAR); + if(GetHasFeat(FEAT_WEAPON_FOCUS_RAPIER, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_RAPIER, FEAT_IMPROVED_CRITICAL_RAPIER); + if(GetHasFeat(FEAT_WEAPON_FOCUS_SCIMITAR, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_SCIMITAR, FEAT_IMPROVED_CRITICAL_SCIMITAR); + if(GetHasFeat(FEAT_WEAPON_FOCUS_SCYTHE, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_SCYTHE, FEAT_IMPROVED_CRITICAL_SCYTHE); + if(GetHasFeat(FEAT_WEAPON_FOCUS_SHORT_SWORD, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_SHORT_SWORD, FEAT_IMPROVED_CRITICAL_SHORT_SWORD); + if(GetHasFeat(FEAT_WEAPON_FOCUS_SHORTBOW, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_SHORTBOW, FEAT_IMPROVED_CRITICAL_SHORTBOW); + if(GetHasFeat(FEAT_WEAPON_FOCUS_SHURIKEN, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_SHURIKEN, FEAT_IMPROVED_CRITICAL_SHURIKEN); + if(GetHasFeat(FEAT_WEAPON_FOCUS_SICKLE, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_SICKLE, FEAT_IMPROVED_CRITICAL_SICKLE); + if(GetHasFeat(FEAT_WEAPON_FOCUS_SLING, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_SLING, FEAT_IMPROVED_CRITICAL_SLING); + if(GetHasFeat(FEAT_WEAPON_FOCUS_SPEAR, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_SPEAR, FEAT_IMPROVED_CRITICAL_SPEAR); + if(GetHasFeat(FEAT_WEAPON_FOCUS_STAFF, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_STAFF, FEAT_IMPROVED_CRITICAL_STAFF); + if(GetHasFeat(FEAT_WEAPON_FOCUS_THROWING_AXE, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_THROWING_AXE, FEAT_IMPROVED_CRITICAL_THROWING_AXE); + if(GetHasFeat(FEAT_WEAPON_FOCUS_TWO_BLADED_SWORD, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_TWO_BLADED_SWORD, FEAT_IMPROVED_CRITICAL_TWO_BLADED_SWORD); + if(GetHasFeat(FEAT_WEAPON_FOCUS_WAR_HAMMER, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_WAR_HAMMER, FEAT_IMPROVED_CRITICAL_WAR_HAMMER); + if(GetHasFeat(FEAT_WEAPON_FOCUS_WHIP, oPC)) AddCriti(oPC, oSkin, IP_CONST_FEAT_IMPROVED_CRITICAL_WHIP, FEAT_IMPROVED_CRITICAL_WHIP); + +} + +////////////////End Soul Inc////////////////// + +////////////////Begin Martial Strike////////////////// + +void MartialStrike() +{ + object oItem; + object oPC = OBJECT_SELF; + + int iEquip=GetLocalInt(oPC,"ONEQUIP"); + int iType; + + if (iEquip==2) + { + + if (!GetHasFeat(FEAT_HOLY_MARTIAL_STRIKE)) return; + + oItem=GetItemLastEquipped(); + iType= GetBaseItemType(oItem); + + switch (iType) + { + case BASE_ITEM_BOLT: + case BASE_ITEM_BULLET: + case BASE_ITEM_ARROW: + iType=GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND)); + break; + case BASE_ITEM_SHORTBOW: + case BASE_ITEM_LONGBOW: + oItem=GetItemInSlot(INVENTORY_SLOT_ARROWS); + break; + case BASE_ITEM_LIGHTCROSSBOW: + case BASE_ITEM_HEAVYCROSSBOW: + oItem=GetItemInSlot(INVENTORY_SLOT_BOLTS); + break; + case BASE_ITEM_SLING: + oItem=GetItemInSlot(INVENTORY_SLOT_BULLETS); + break; + } + + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6),oItem,9999.0); + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVisualEffect(ITEM_VISUAL_HOLY),oItem,9999.0); + SetLocalInt(oItem,"MartialStrik",1); + } + else if (iEquip==1) + { + oItem=GetItemLastUnequipped(); + iType= GetBaseItemType(oItem); + + switch (iType) + { + case BASE_ITEM_BOLT: + case BASE_ITEM_BULLET: + case BASE_ITEM_ARROW: + iType=GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND)); + break; + case BASE_ITEM_SHORTBOW: + case BASE_ITEM_LONGBOW: + oItem=GetItemInSlot(INVENTORY_SLOT_ARROWS); + break; + case BASE_ITEM_LIGHTCROSSBOW: + case BASE_ITEM_HEAVYCROSSBOW: + oItem=GetItemInSlot(INVENTORY_SLOT_BOLTS); + break; + case BASE_ITEM_SLING: + oItem=GetItemInSlot(INVENTORY_SLOT_BULLETS); + break; + } + + if ( GetLocalInt(oItem,"MartialStrik")) + { + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGEBONUS_2d6, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_VISUALEFFECT,ITEM_VISUAL_HOLY,-1,1,"",-1,DURATION_TYPE_TEMPORARY); + DeleteLocalInt(oItem,"MartialStrik"); + } + + } + else + { + + if (!GetHasFeat(FEAT_HOLY_MARTIAL_STRIKE)) return; + + oItem=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC); + iType= GetBaseItemType(oItem); + + switch (iType) + { + case BASE_ITEM_BOLT: + case BASE_ITEM_BULLET: + case BASE_ITEM_ARROW: + iType=GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND)); + break; + case BASE_ITEM_SHORTBOW: + case BASE_ITEM_LONGBOW: + oItem=GetItemInSlot(INVENTORY_SLOT_ARROWS); + break; + case BASE_ITEM_LIGHTCROSSBOW: + case BASE_ITEM_HEAVYCROSSBOW: + oItem=GetItemInSlot(INVENTORY_SLOT_BOLTS); + break; + case BASE_ITEM_SLING: + oItem=GetItemInSlot(INVENTORY_SLOT_BULLETS); + break; + } + + if (!GetLocalInt(oItem,"MartialStrik")) + { + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6),oItem,9999.0); + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVisualEffect(ITEM_VISUAL_HOLY),oItem,9999.0); + SetLocalInt(oItem,"MartialStrik",1); + } + oItem=GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC); + iType= GetBaseItemType(oItem); + if ( !GetLocalInt(oItem,"MartialStrik")) + { + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6),oItem,9999.0); + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVisualEffect(ITEM_VISUAL_HOLY),oItem,9999.0); + SetLocalInt(oItem,"MartialStrik",1); + } + } + + +} + + +void UnholyStrike() +{ + object oItem; + object oPC = OBJECT_SELF; + + int iEquip=GetLocalInt(oPC,"ONEQUIP"); + int iType; + + if (iEquip==2) + { + + if (!GetHasFeat(FEAT_UNHOLY_STRIKE)) return; + + oItem=GetItemLastEquipped(); + iType= GetBaseItemType(oItem); + + switch (iType) + { + case BASE_ITEM_BOLT: + case BASE_ITEM_BULLET: + case BASE_ITEM_ARROW: + iType=GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND)); + break; + case BASE_ITEM_SHORTBOW: + case BASE_ITEM_LONGBOW: + oItem=GetItemInSlot(INVENTORY_SLOT_ARROWS); + break; + case BASE_ITEM_LIGHTCROSSBOW: + case BASE_ITEM_HEAVYCROSSBOW: + oItem=GetItemInSlot(INVENTORY_SLOT_BOLTS); + break; + case BASE_ITEM_SLING: + oItem=GetItemInSlot(INVENTORY_SLOT_BULLETS); + break; + } + + + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_GOOD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6),oItem,9999.0); + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVisualEffect(ITEM_VISUAL_EVIL),oItem,9999.0); + SetLocalInt(oItem,"UnholyStrik",1); + } + else if (iEquip==1) + { + oItem=GetItemLastUnequipped(); + iType= GetBaseItemType(oItem); + + switch (iType) + { + case BASE_ITEM_BOLT: + case BASE_ITEM_BULLET: + case BASE_ITEM_ARROW: + iType=GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND)); + break; + case BASE_ITEM_SHORTBOW: + case BASE_ITEM_LONGBOW: + oItem=GetItemInSlot(INVENTORY_SLOT_ARROWS); + break; + case BASE_ITEM_LIGHTCROSSBOW: + case BASE_ITEM_HEAVYCROSSBOW: + oItem=GetItemInSlot(INVENTORY_SLOT_BOLTS); + break; + case BASE_ITEM_SLING: + oItem=GetItemInSlot(INVENTORY_SLOT_BULLETS); + break; + } + + if ( GetLocalInt(oItem,"UnholyStrik")) + { + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_GOOD,IP_CONST_DAMAGEBONUS_2d6, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_VISUALEFFECT,ITEM_VISUAL_EVIL,-1,1,"",-1,DURATION_TYPE_TEMPORARY); + DeleteLocalInt(oItem,"UnholyStrik"); + } + + } + else + { + + if (!GetHasFeat(FEAT_UNHOLY_STRIKE)) return; + + oItem=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC); + iType= GetBaseItemType(oItem); + + switch (iType) + { + case BASE_ITEM_BOLT: + case BASE_ITEM_BULLET: + case BASE_ITEM_ARROW: + iType=GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND)); + break; + case BASE_ITEM_SHORTBOW: + case BASE_ITEM_LONGBOW: + oItem=GetItemInSlot(INVENTORY_SLOT_ARROWS); + break; + case BASE_ITEM_LIGHTCROSSBOW: + case BASE_ITEM_HEAVYCROSSBOW: + oItem=GetItemInSlot(INVENTORY_SLOT_BOLTS); + break; + case BASE_ITEM_SLING: + oItem=GetItemInSlot(INVENTORY_SLOT_BULLETS); + break; + } + + if (!GetLocalInt(oItem,"UnholyStrik")) + { + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_GOOD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6),oItem,9999.0); + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVisualEffect(ITEM_VISUAL_EVIL),oItem,9999.0); + SetLocalInt(oItem,"UnholyStrik",1); + } + oItem=GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC); + iType= GetBaseItemType(oItem); + if ( !GetLocalInt(oItem,"UnholyStrik")) + { + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_GOOD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6),oItem,9999.0); + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVisualEffect(ITEM_VISUAL_EVIL),oItem,9999.0); + SetLocalInt(oItem,"UnholyStrik",1); + } + } + + +} + +////////////////End Martial Strike////////////////// + +////////////////Begin Soldier of Light Spells////////////////// +/* As far as I can tell, not used at all - Ornedan +void spellsCureMod(int nCasterLvl ,int nDamage, int nMaxExtraDamage, int nMaximized, int vfx_impactHurt, int vfx_impactHeal, int nSpellID) +{ + //Declare major variables + object oTarget = PRCGetSpellTargetObject(); + int nHeal; + int nMetaMagic = PRCGetMetaMagicFeat(); + effect eVis = EffectVisualEffect(vfx_impactHurt); + effect eVis2 = EffectVisualEffect(vfx_impactHeal); + effect eHeal, eDam; + + int nExtraDamage = nCasterLvl; // * figure out the bonus damage + if (nExtraDamage > nMaxExtraDamage) + { + nExtraDamage = nMaxExtraDamage; + } + // * if low or normal difficulty is treated as MAXIMIZED + if(GetIsPC(oTarget) && GetGameDifficulty() < GAME_DIFFICULTY_CORE_RULES) + { + nDamage = nMaximized + nExtraDamage; + } + else + { + nDamage = nDamage + nExtraDamage; + } + + + //Make metamagic checks + int iBlastFaith = BlastInfidelOrFaithHeal(OBJECT_SELF, oTarget, DAMAGE_TYPE_POSITIVE, TRUE); + if (nMetaMagic & METAMAGIC_MAXIMIZE || iBlastFaith) + { + nDamage = nMaximized + nExtraDamage; + // * if low or normal difficulty then MAXMIZED is doubled. + if(GetIsPC(OBJECT_SELF) && GetGameDifficulty() < GAME_DIFFICULTY_CORE_RULES) + { + nDamage = nDamage + nExtraDamage; + } + } + if (nMetaMagic & METAMAGIC_EMPOWER || GetHasFeat(FEAT_HEALING_DOMAIN_POWER)) + { + nDamage = nDamage + (nDamage/2); + } + + + if (MyPRCGetRacialType(oTarget) != RACIAL_TYPE_UNDEAD) + { + //Figure out the amount of damage to heal + nHeal = nDamage; + //Set the heal effect + eHeal = EffectHeal(nHeal); + //Apply heal effect and VFX impact + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nSpellID, FALSE)); + + + } + //Check that the target is undead + else + { + int nTouch = PRCDoMeleeTouchAttack(oTarget);; + if (nTouch > 0) + { + if(!GetIsReactionTypeFriendly(oTarget)) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nSpellID)); + if (!PRCDoResistSpell(OBJECT_SELF, oTarget,nCasterLvl+add_spl_pen(OBJECT_SELF))) + { + eDam = EffectDamage(nDamage,DAMAGE_TYPE_NEGATIVE); + //Apply the VFX impact and effects + DelayCommand(1.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget)); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } + } + } + } +} +*/ +////////////////End Soldier of Light Spells////////////////// + +////////////////Begin Master Harper Instruments////////////////// + +void ActiveModeCIMM(object oTarget) +{ + if(!GetLocalInt(oTarget,"use_CIMM") ) + { + string sScript = GetModuleOverrideSpellscript(); + if (sScript != "mh_spell_at_inst") + { + SetLocalString(OBJECT_SELF,"temp_spell_at_inst",sScript); + SetLocalString(OBJECT_SELF, "PRC_OVERRIDE_SPELLSCRIPT", "mh_spell_at_inst"); + } + SetLocalInt(OBJECT_SELF,"nb_spell_at_inst",GetLocalInt(OBJECT_SELF,"nb_spell_at_inst")+1); + FloatingTextStrRefOnCreature(16825240,oTarget); + SetLocalInt(oTarget,"use_CIMM",TRUE); + } +} + +void UnactiveModeCIMM(object oTarget) +{ + if(GetLocalInt(oTarget,"use_CIMM") ) + { + string sScript = GetModuleOverrideSpellscript(); + SetLocalInt(OBJECT_SELF,"nb_spell_at_inst",GetLocalInt(OBJECT_SELF,"nb_spell_at_inst")-1); + if (sScript == "mh_spell_at_inst" && GetLocalInt(OBJECT_SELF,"nb_spell_at_inst") == 0) + { + SetLocalString(OBJECT_SELF, "PRC_OVERRIDE_SPELLSCRIPT", GetLocalString(OBJECT_SELF,"temp_spell_at_inst")); + GetLocalString(OBJECT_SELF,"temp_spell_at_inst"); + SetLocalString(OBJECT_SELF,"temp_spell_at_inst",""); + } + FloatingTextStrRefOnCreature(16825241,oTarget); + SetLocalInt(oTarget,"use_CIMM",FALSE); + } +} + +////////////////End Master Harper Instruments////////////////// + +////////////////Begin Minstrel of the Edge////////////////// + +// Goes a bit further than RemoveSpellEffects -- makes sure to remove ALL effects +// made by the Singer+Song. +void RemoveSongEffects(int iSong, object oCaster, object oTarget) +{ + effect eCheck = GetFirstEffect(oTarget); + while (GetIsEffectValid(eCheck)) + { + if (GetEffectCreator(eCheck) == oCaster && GetEffectSpellId(eCheck) == iSong) + RemoveEffect(oTarget, eCheck); + eCheck = GetNextEffect(oTarget); + } +} + +// Stores a Song recipient to the PC as a local variable, and creates a list by using +// an index variable. +void StoreSongRecipient(object oRecipient, object oSinger, int iSongID, int iDuration = 0) +{ + int iSlot = GetLocalInt(oSinger, "SONG_SLOT"); + int iIndex = GetLocalInt(oSinger, "SONG_INDEX_" + IntToString(iSlot)) + 1; + string sIndex = "SONG_INDEX_" + IntToString(iSlot); + string sRecip = "SONG_RECIPIENT_" + IntToString(iIndex) + "_" + IntToString(iSlot); + string sSong = "SONG_IN_USE_" + IntToString(iSlot); + + // Store the recipient into the current used slot + SetLocalObject(oSinger, sRecip, oRecipient); + + // Store the song information + SetLocalInt(oSinger, sSong, iSongID); + + // Store the index of creatures we're on + SetLocalInt(oSinger, sIndex, iIndex); +} + +// Removes all effects given by the previous song from all creatures who recieved it. +// Now allows for two "slots", which means you can perform two songs at a time. +void RemoveOldSongEffects(object oSinger, int iSongID) +{ + object oCreature; + int iSlotNow = GetLocalInt(oSinger, "SONG_SLOT"); + int iSlot; + int iNumRecip; + int iSongInUse; + int iIndex; + string sIndex; + string sRecip; + string sSong; + + if (GetHasFeat(FEAT_MINSTREL_GREATER_MINSTREL_SONG, oSinger)) + { + // If you use the same song twice in a row you + // should deal with the same slot again... + if (GetLocalInt(oSinger, "SONG_IN_USE_" + IntToString(iSlotNow)) == iSongID) + iSlot = iSlotNow; + // Otherwise, we should toggle between slot "1" and slot "0" + else + iSlot = (iSlotNow == 1) ? 0 : 1; + } + else + { + iSlot = 0; + } + + // Save the toggle we're on for later. + SetLocalInt(oSinger, "SONG_SLOT", iSlot); + + // Find the proper variable names based on slot + sIndex = "SONG_INDEX_" + IntToString(iSlot); + sSong = "SONG_IN_USE_" + IntToString(iSlot); + + // Store the local variables into script variables + iNumRecip = GetLocalInt(oSinger, sIndex); + iSongInUse = GetLocalInt(oSinger, sSong); + + // Reset the local variables + SetLocalInt(oSinger, sIndex, 0); + SetLocalInt(oSinger, sSong, 0); + + // Removes any effects from the caster first + RemoveSongEffects(iSongInUse, oSinger, oSinger); + + // Removes any effects from the recipients + for (iIndex = 1 ; iIndex <= iNumRecip ; iIndex++) + { + sRecip = "SONG_RECIPIENT_" + IntToString(iIndex) + "_" + IntToString(iSlot); + oCreature = GetLocalObject(oSinger, sRecip); + + RemoveSongEffects(iSongInUse, oSinger, oCreature); + } +} + + +////////////////End Minstrel of the Edge////////////////// + +////////////////Begin Arcane Duelist////////////////// + +void FlurryEffects(object oPC) +{ + effect Effect1 = EffectModifyAttacks(1); + effect Effect2 = EffectAttackDecrease(2, ATTACK_BONUS_MISC); + + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, Effect1, oPC, RoundsToSeconds(10)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, Effect2, oPC, RoundsToSeconds(10)); + +} + +void CheckCombatDexAttack(object oPC) +{ +//object oPC = GetLocalObject(OBJECT_SELF, "PC_IN_COMBAT_WITH_DEXATTACK_ON"); +int iCombat = GetIsInCombat(oPC); +object oWeapon = GetLocalObject(oPC, "CHOSEN_WEAPON"); + + if(iCombat == TRUE && GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC) == oWeapon) + { + DelayCommand(6.0, CheckCombatDexAttack(oPC)); + } + else + { + FloatingTextStringOnCreature("Dexterous Attack Mode Deactivated", oPC, FALSE); + effect eEffects = GetFirstEffect(oPC); + while (GetIsEffectValid(eEffects)) + { + + if (GetEffectType(eEffects) == EFFECT_TYPE_ATTACK_INCREASE && GetEffectSpellId(eEffects) == 1761) // dextrous attack + { + RemoveEffect(oPC, eEffects); + } + + eEffects = GetNextEffect(oPC); + } + DeleteLocalObject(OBJECT_SELF, "PC_IN_COMBAT_WITH_DEXATTACK_ON"); + } +} + +void SPMakeAttack(object oTarget, object oImage) +{ + int iDead = GetIsDead(oTarget); + + if(iDead == FALSE) + { + PrintString("TARGET AINT DEAD"); + DelayCommand(6.0, SPMakeAttack(oTarget, oImage)); + AssignCommand(oImage, ActionAttack(oTarget, FALSE)); + } + if(iDead == TRUE) + { + PrintString("TARGET BE DEAD AS A DOORNAIL"); + DestroyObject(oImage, 0.0); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3), GetLocation(oImage), 0.0); + } + +} + +////////////////End Arcane Duelist////////////////// + +////////////////Begin Corpsecrafter////////////// + +void CorpseCrafter(object oPC, object oSummon) +{ + // Hijacking this function because it's already in the right places + if (GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oPC) >= 8) + { + if (DEBUG) DoDebug("Corpsecrafter: Dread Necro"); + int nHD = GetHitDice(oSummon); + effect eHP = EffectTemporaryHitpoints(nHD * 2); + effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, 4); + effect eDex = EffectAbilityIncrease(ABILITY_DEXTERITY, 4); + eHP = SupernaturalEffect(eHP); + eStr = SupernaturalEffect(EffectLinkEffects(eStr, eDex)); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHP, oSummon); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStr, oSummon); + } + if (GetHasFeat(FEAT_CORPSECRAFTER, oPC)) + { + if (DEBUG) DoDebug("Corpsecrafter: Corpsecrafter"); + int nHD = GetHitDice(oSummon); + effect eHP = EffectTemporaryHitpoints(nHD * 2); + effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, 4); + eHP = SupernaturalEffect(eHP); + eStr = SupernaturalEffect(eStr); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHP, oSummon); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStr, oSummon); + } + if (GetHasFeat(FEAT_BOLSTER_RESISTANCE, oPC)) + { + if (DEBUG) DoDebug("Corpsecrafter: Bolster Resistance"); + effect eTurn = EffectTurnResistanceIncrease(4); + eTurn = SupernaturalEffect(eTurn); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eTurn, oSummon); + } + if (GetHasFeat(FEAT_DEADLY_CHILL, oPC)) + { + if (DEBUG) DoDebug("Corpsecrafter: Deadly Chill"); + effect eChill = EffectDamageIncrease(DAMAGE_BONUS_1d6, DAMAGE_TYPE_COLD); + eChill = SupernaturalEffect(eChill); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eChill, oSummon); + } + if (GetHasFeat(FEAT_HARDENED_FLESH, oPC)) + { + if (DEBUG) DoDebug("Corpsecrafter: Hardened Flesh"); + effect eAC = EffectACIncrease(2); + eAC = SupernaturalEffect(eAC); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAC, oSummon); + } + if (GetHasFeat(FEAT_NIMBLE_BONES, oPC)) + { + if (DEBUG) DoDebug("Corpsecrafter: Nimble Bones"); + object oSkin = GetPCSkin(oPC); + itemproperty iInit = PRCItemPropertyBonusFeat(IP_CONST_FEAT_IMPROVED_INIT); + //AddItemProperty(DURATION_TYPE_PERMANENT, iInit, oSkin); + IPSafeAddItemProperty(oSkin, iInit, 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + + // Speed boost, average speed is 30 feet, so a 10 foot boost is a 33% boost + effect eSpeed = EffectMovementSpeedIncrease(33); + eSpeed = SupernaturalEffect(eSpeed); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSpeed, oSummon); + } + if (GetHasFeat(FEAT_DESTRUCTION_RETRIBUTION, oPC)) + { + if (DEBUG) DoDebug("Corpsecrafter: Destruction Retribution"); + SetLocalInt(oSummon, "DestructionRetribution", TRUE); + } +} + +////////////////Begin Ninja////////////// + +void Ninja_DecrementKi (object oPC, int iExcept = -1) +{ + if (iExcept != FEAT_KI_POWER) + DecrementRemainingFeatUses(oPC, FEAT_KI_POWER); + if (iExcept != FEAT_GHOST_STEP) + DecrementRemainingFeatUses(oPC, FEAT_GHOST_STEP); + if (iExcept != FEAT_GHOST_STRIKE) + DecrementRemainingFeatUses(oPC, FEAT_GHOST_STRIKE); + if (iExcept != FEAT_GHOST_WALK) + DecrementRemainingFeatUses(oPC, FEAT_GHOST_WALK); + if (iExcept != FEAT_KI_DODGE) + DecrementRemainingFeatUses(oPC, FEAT_KI_DODGE); + // for testing only + SetLocalInt(oPC, "prc_ninja_ki", GetLocalInt(oPC, "prc_ninja_ki") - 1); + ExecuteScript("prc_ninjca", oPC); +} + +int Ninja_AbilitiesEnabled (object oPC) +{ + object oLefthand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC); + + if (GetBaseAC(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC)) > 0 || + GetBaseItemType(oLefthand) == BASE_ITEM_SMALLSHIELD || + GetBaseItemType(oLefthand) == BASE_ITEM_LARGESHIELD || + GetBaseItemType(oLefthand) == BASE_ITEM_TOWERSHIELD) + return FALSE; + // all Ki powers will not function when encumbered + if (GetIsEncumbered(oPC)) + return FALSE; + return TRUE; +} + +////////////////End Ninja////////////// + +////////////////Begin Virtuoso////////////// + +//Decrements the daily uses of Virtuoso Performance by the +// correct amount, returns FALSE if there are insufficient +// uses remaining to use the current feat +int VirtuosoPerformanceDecrement(object oPC, int nSpellID) +{ + int nDecrement = 0; + int nDifference = 1122; //hack, difference in number between feat and spell 2da lines + switch(nSpellID) + { + case SPELL_VIRTUOSO_SUSTAINING_SONG: + case SPELL_VIRTUOSO_CALUMNY: + case SPELL_VIRTUOSO_GREATER_CALUMNY: nDecrement = 1; break; + + case SPELL_VIRTUOSO_MINDBENDING_MELODY: + case SPELL_VIRTUOSO_MAGICAL_MELODY: + case SPELL_VIRTUOSO_REVEALING_MELODY: nDecrement = 2; break; + + case SPELL_VIRTUOSO_SHARP_NOTE: + case SPELL_VIRTUOSO_JARRING_SONG: + case SPELL_VIRTUOSO_SONG_OF_FURY: nDecrement = 3; break; + } + if(!nDecrement) return FALSE; //sanity check + int nUses = GetPersistantLocalInt(oPC, "Virtuoso_Performance_Uses"); + if(nUses >= nDecrement) + { + SetPersistantLocalInt(oPC, "Virtuoso_Performance_Uses", nUses - nDecrement); + int nFeat, nDec; + for(nFeat = FEAT_VIRTUOSO_SUSTAINING_SONG; nFeat <= FEAT_VIRTUOSO_PERFORMANCE; nFeat++) + { + nDec = nDecrement; + if(nFeat == (nSpellID + nDifference)) + nDec--; //already decremented once by being used + for(; nDec > 0; nDec--) + DecrementRemainingFeatUses(oPC, nFeat); + } + return TRUE; + } + else + { //refund feat use :P + IncrementRemainingFeatUses(oPC, nSpellID + nDifference); + return FALSE; + } +} + +////////////////End Virtuoso////////////// + + +///////////////Archmage & Heirophant SLAs /////////// + +void DoArchmageHeirophantSLA(object oPC, object oTarget, location lTarget, int nSLAID) +{ + int nSLAFeatID = -1; //feat ID of the SLA in use + int nSLASpellID = -1;//spell ID of the SLA in use NOT THE SPELL BEING CAST + //get the SLAFeatID + int SLA_ID; + switch(SLA_ID) + { + case 1: nSLAFeatID = FEAT_SPELL_LIKE_ABILITY_1; break; + case 2: nSLAFeatID = FEAT_SPELL_LIKE_ABILITY_2; break; + case 3: nSLAFeatID = FEAT_SPELL_LIKE_ABILITY_3; break; + case 4: nSLAFeatID = FEAT_SPELL_LIKE_ABILITY_4; break; + case 5: nSLAFeatID = FEAT_SPELL_LIKE_ABILITY_5; break; + } + //get the spellID of the spell your trying to cast + //+1 offset for unassigned + int nSpellID = GetPersistantLocalInt(oPC, "PRC_SLA_SpellID_"+IntToString(nSLAID))-1; + //test if already stored + if(nSpellID == -1) + { + //not stored + FloatingTextStringOnCreature("This SLA has not been stored yet\nThe next spell you cast will be assigned to this SLA", oPC); + SetLocalInt(oPC, "PRC_SLA_Store", nSLAID); + DelayCommand(18.0, + DeleteLocalInt(oPC, "PRC_SLA_Store")); + return; + } + else + { + //stored, recast it + int nSpellClass = GetPersistantLocalInt(oPC, "PRC_SLA_Class_"+IntToString(nSLAID)); + int nMetamagic = GetPersistantLocalInt(oPC, "PRC_SLA_Meta_"+IntToString(nSLAID)); + int nSpellLevel = PRCGetSpellLevelForClass(nSpellID, nSpellClass); + int nBaseDC = 10 + nSpellLevel + GetDCAbilityModForClass(nSpellClass, oPC); + //since this is targetted using a generic feat, + //make sure were within range and target is valid for this spell + //get current distance + /*string sRange = Get2DACache("spells", "Range", nSpellID); + float fDist; + if(GetIsObjectValid(oTarget)) + fDist = GetDistanceToObject(oTarget); + else + fDist = GetDistanceBetweenLocations(GetLocation(oPC), lTarget); + //check distance is allowed + if(fDist < 0.0 + || (sRange == "T" && fDist > 2.25) + || (sRange == "S" && fDist > 8.0 ) + || (sRange == "M" && fDist > 20.0 ) + || (sRange == "L" && fDist > 40.0 ) + ) + { + //out of range + FloatingTextStringOnCreature("You are out of range", oPC); + //replace the useage + IncrementRemainingFeatUses(oPC, nSLAFeatID); + //end the script + return; + }*/ + //check object type + int nTargetType = HexToInt(Get2DACache("spells", "TargetType", nSpellID)); + /* + # 0x01 = 1 = Self + # 0x02 = 2 = Creature + # 0x04 = 4 = Area/Ground + # 0x08 = 8 = Items + # 0x10 = 16 = Doors + # 0x20 = 32 = Placeables + */ + int nCaster = nTargetType & 1; + int nCreature = nTargetType & 2; + int nLocation = nTargetType & 4; + int nItem = nTargetType & 8; + int nDoor = nTargetType & 16; + int nPlaceable = nTargetType & 32; + int nTargetValid = TRUE; + //test targetting self + if(oTarget == OBJECT_SELF) + { + if(!nCaster) + { + nTargetValid = FALSE; + FloatingTextStringOnCreature("You cannot target yourself", oPC); + } + } + //test targetting others + else if(GetIsObjectValid(oTarget)) + { + switch(GetObjectType(oTarget)) + { + case OBJECT_TYPE_CREATURE: + if(!nCreature) + { + nTargetValid = FALSE; + FloatingTextStringOnCreature("You cannot target creatures", oPC); + } + break; + case OBJECT_TYPE_ITEM: + if(!nItem) + { + nTargetValid = FALSE; + FloatingTextStringOnCreature("You cannot target items", oPC); + } + break; + case OBJECT_TYPE_DOOR: + if(!nDoor) + { + nTargetValid = FALSE; + FloatingTextStringOnCreature("You cannot target doors", oPC); + } + break; + case OBJECT_TYPE_PLACEABLE: + if(!nPlaceable) + { + nTargetValid = FALSE; + FloatingTextStringOnCreature("You cannot target placeables", oPC); + } + break; + } + } + //test if can target a location + else if(GetIsObjectValid(GetAreaFromLocation(lTarget))) + { + if(!nLocation) + { + nTargetValid = FALSE; + FloatingTextStringOnCreature("You cannot target locations", oPC); + } + } + //target was not valid, abort + if(!nTargetValid) + { + //replace the useage + IncrementRemainingFeatUses(oPC, nSLAFeatID); + //end the script + return; + } + //actually cast it at this point + //note that these are instant-spells, so we have to add the animation part too + /*if(GetIsObjectValid(oTarget)) + ActionCastFakeSpellAtObject(nSpellID, oTarget); + else + ActionCastFakeSpellAtLocation(nSpellID, lTarget);*/ + ActionDoCommand(ActionCastSpell(nSpellID, 0, nBaseDC, 0, nMetamagic, nSpellClass, 0, 0, OBJECT_INVALID, FALSE)); + } +} + +/////////////// End Archmage & Heirophant SLAs /////////// + +////////////////////////Alienist////////////////////////// +int GetPhobia(object oPC) +{ + int nPhobia = GetPersistantLocalInt(oPC, "Alienist_Phobia"); + if(nPhobia < 1) + { + nPhobia = Random(16) + 1; + SetPersistantLocalInt(oPC, "Alienist_Phobia", nPhobia); + } + return nPhobia; +} + +int GetPhobiaRace(int nPhobia) +{ + switch(nPhobia) + { + case 1: return RACIAL_TYPE_ABERRATION; + case 2: return RACIAL_TYPE_ANIMAL; + case 3: return RACIAL_TYPE_BEAST; + case 4: return RACIAL_TYPE_CONSTRUCT; + case 5: return RACIAL_TYPE_DRAGON; + case 6: return RACIAL_TYPE_HUMANOID_GOBLINOID; + case 7: return RACIAL_TYPE_HUMANOID_MONSTROUS; + case 8: return RACIAL_TYPE_HUMANOID_ORC; + case 9: return RACIAL_TYPE_HUMANOID_REPTILIAN; + case 10: return RACIAL_TYPE_ELEMENTAL; + case 11: return RACIAL_TYPE_FEY; + case 12: return RACIAL_TYPE_GIANT; + case 13: return RACIAL_TYPE_MAGICAL_BEAST; + case 14: return RACIAL_TYPE_SHAPECHANGER; + case 15: return RACIAL_TYPE_UNDEAD; + case 16: return RACIAL_TYPE_VERMIN; + case 17: return RACIAL_TYPE_OOZE; + case 18: return RACIAL_TYPE_PLANT; + } + return -1;//error +} + +int GetPhobiaFeat(int nPhobia) +{ + switch(nPhobia) + { + case 1: return IP_CONST_PHOBIA_ABERRATION; + case 2: return IP_CONST_PHOBIA_ANIMAL; + case 3: return IP_CONST_PHOBIA_BEAST; + case 4: return IP_CONST_PHOBIA_CONSTRUCT; + case 5: return IP_CONST_PHOBIA_DRAGON; + case 6: return IP_CONST_PHOBIA_GOBLINOID; + case 7: return IP_CONST_PHOBIA_MONSTROUS; + case 8: return IP_CONST_PHOBIA_ORC; + case 9: return IP_CONST_PHOBIA_REPTILIAN; + case 10: return IP_CONST_PHOBIA_ELEMENTAL; + case 11: return IP_CONST_PHOBIA_FEY; + case 12: return IP_CONST_PHOBIA_GIANT; + case 13: return IP_CONST_PHOBIA_MAGICAL_BEAST; + case 14: return IP_CONST_PHOBIA_SHAPECHANGER; + case 15: return IP_CONST_PHOBIA_UNDEAD; + case 16: return IP_CONST_PHOBIA_VERMIN; + } + return -1;//error +} + +/////////////////////DragonSong Lyrist//////////////////////// + +void RemoveOldSongs(object oPC) +{ + if(GetHasSpellEffect(SPELL_DSL_SONG_STRENGTH, oPC)) PRCRemoveEffectsFromSpell(oPC, SPELL_DSL_SONG_STRENGTH); + if(GetHasSpellEffect(SPELL_DSL_SONG_COMPULSION, oPC)) PRCRemoveEffectsFromSpell(oPC, SPELL_DSL_SONG_COMPULSION); + if(GetHasSpellEffect(SPELL_DSL_SONG_SPEED, oPC)) PRCRemoveEffectsFromSpell(oPC, SPELL_DSL_SONG_SPEED); + if(GetHasSpellEffect(SPELL_DSL_SONG_FEAR, oPC)) PRCRemoveEffectsFromSpell(oPC, SPELL_DSL_SONG_FEAR); + if(GetHasSpellEffect(SPELL_DSL_SONG_HEALING, oPC)) PRCRemoveEffectsFromSpell(oPC, SPELL_DSL_SONG_HEALING); +} + + +// Eldritch Theurge class requires arcane spellcasting and eldritch blast. +// If a character is an Eldritch Theruge we know that she must have levels in Warlock +// since in NWN character can have max 3 classes. We also know that Eldritch Theurge +// is at positon 3 (unless player is cheating). +// So we just need to check the third class. +int GetETArcaneClass(object oPC) +{ + + int nClass = GetPrimaryArcaneClass(oPC); + + /* int nClass = GetClassByPosition(1, oPC); + if(nClass == CLASS_TYPE_WARLOCK) + nClass = GetClassByPosition(2, oPC); */ + return nClass; +} + diff --git a/src/include/prc_inc_combat.nss b/src/include/prc_inc_combat.nss new file mode 100644 index 0000000..3cdbab5 --- /dev/null +++ b/src/include/prc_inc_combat.nss @@ -0,0 +1,9269 @@ +//:://///////////////////////////////////////////// +//:: Combat Simulation System +//::////////////////////////////////////////////// +//:: Created By: Oni5115 +//:: Created On: July 16, 2004 +//:: Modified by motu99 On: April 7, 2007 +//::////////////////////////////////////////////// +//:: Code based on Aaon Graywolf's inc_combat.nss +//:: and Soul Taker's additions in inc_combat2.nss +//::////////////////////////////////////////////// +//:: Adds a great deal of additional functionality +//:: to the older combat system to make combat simulation +//:: more accurate and much easier to use. +//::////////////////////////////////////////////// +//:: Current Features: +//::////////////////////////////////////////////// +//:: Easy to use function for performing an entire attack round. PerformAttackRound +//:: Easy to use function for performing a single attack. PerformAttack +//:: Proper calculation of attack bonus including any bonus effects on weapon or spells. +//:: Proper calculation of weapon damage including any bonus effects or spell effects. +//:: Proper calculation of bonus, main, and off-hand attacks. +//:: Support for off-hand attacks from double (sided) weapons +//:: Proper calculation of enemy AC. +//:: Proper application of sneak attacks. +//:: Proper application of touch attacks. +//:: All On Hit: Cast Spell abilities working +//:: All On Hit: Unique Power abilities working +//:: All On Hit: properties working (daze, stun, vorpal, poison, disease, etc.) +//:: All known weapon/spell damage bonuses are counted +//:: +//::////////////////////////////////////////////// +//:: Support for the following feats: +//::////////////////////////////////////////////// +//:: Weapon Focus, Epic Weapon Focus, Epic Prowess, +//:: Improved Critical, Overwhelming Critical, Devastating Critical +//:: Weapon Specialization, Epic Weapon Specialization, +//:: Weapon Finesse, Inuitive Attack, Zen Archery, +//:: +//:: Expertise, Improved Expertise, +//:: Cleave, Great Cleave, Circle Kick, +//:: Power Attack, Improved Power Attack, Supreme Power Attack, +//:: Power Shot, Improved Power Shot, Supreme Power Shot, +//:: +//:: Rapid Shot, Rapid Reload, Extra Shot, Flurry of Blows, +//:: Martial Flurry, Furious Assult, One Strike Two Cuts, +//:: +//:: Epic Dodge, Self Concealment I-V, Blind Fight, Crippling Strike +//:: +//:: All Arcane Archer and Weapon Master Feats. +//:: Favored Enemy, Bane of Enemies, +//:: Battle Training, Divine Might, Bard Song, Thundering Rage +//:: large vs small creature size +//:: +//:: Note: If you notice any feats missing let Oni5115 know +//:: They might be accounted for, but not added to the list; +//:: or they might not be implemented yet. +//:: +//::////////////////////////////////////////////// +//:: Current Limitations: +//::////////////////////////////////////////////// +//:: +//:: Coup De Grace does not take into account bonus damage [Except from touch attack spells] +//:: Calculation of Enemy AC does not take into account bonus vs. racial type or alignment type. +//:: Weapon Range is not taken into account in melee combat (whenever we are within 10 feet, we will apply the damage) +//:: a few "hardwired" spells on weapon and armor of the type IP_CONST_ONHIT_ +//:: are not yet implemented (but we now know how to do them, so hopefully in a later release) +//:: +//::////////////////////////////////////////////// +//:: Tested: +//::////////////////////////////////////////////// +//:: Weapon Information and Damage +//:: Elemental Information and Damage +//:: Sneak Attack Functions +//:: On Hit: Cast Spell +//:: On Hit: Unique Power +//:: On Hit: properties +//:: Perform Attack Round +//:: Perform Attack +//:: Dark Fire and Flame Weapon +//:: Cleave, Great Cleave +//::////////////////////////////////////////////// +//:: Things to Test: +//::////////////////////////////////////////////// +//:: On Hit: Slay Race/Alignment Group/Alignment +//:: Wounding, Disease, Poison, +//:: +//:: Bug Fix for Sanctuary/invis/stealth not being removed +//:: Coup De Grace +//:: Circle Kick +//:: Unarmed Damage Calculation (motu99: partially tested) +//:: +//:: Blinding Speed (should count as haste effect) +//::////////////////////////////////////////////// +//:: Known Bugs: +//::////////////////////////////////////////////// +//:: +//:: GetIsFlanked does not work reliably +//:: AB calculation (mostly done at beginning of round) ignores situational adjustments (such as when attackers come within melee range of a ranged attacker) +//:: Damage calculation (partly done at beginning or round) ignores situational adjustments (for instance, favored enemy bonus is not adjusted when defender changes) +//:: +//::////////////////////////////////////////////// + +// various modes for the prc-combat routines (these are bit-flags) + +// should be used when PerformAttack or PerformAttackRound are run from a heartbeat +// and the aurora engine runs in parallel to prc scripted combat (such as for more than 2 +// offhand attacks or natural weapon attacks). Ensures that when we are not physically attacking +// any more, the scripted combat is aborted +const int PRC_COMBATMODE_HB = 1; + +// allows a switch of target (mostly used when scripted combat and aurora combat run in parallel) +const int PRC_COMBATMODE_ALLOW_TARGETSWITCH = 2; + +// will not abort a scripted melee attack (or attack round), when the target is out of range and cannot be reached with a five foot step +// not applicable for scripted ranged attacks (these are always executed, because so far the range of ranged weapons is not well implemented) +const int PRC_COMBATMODE_ABORT_WHEN_OUT_OF_RANGE = 4; + +// if set, will issue an ActionAttack Command on the last attack of a scripted attack round +// if used in PerformAttack(). will issue an ActionAttack command after the (single) attack +const int PRC_COMBATMODE_ACTIONATTACK_ON_LAST = 8; + +// will bypass damage reduction, if on +const int PRC_COMBATMODE_BYPASS_DR = 16; // not yet implemented + +// constant ints for touch attacks +// using these helps determing which type of touch attack to perform. +// using the spell versions if your spell does not use a weapon. +const int TOUCH_ATTACK_MELEE = 1; +const int TOUCH_ATTACK_RANGED = 2; +const int TOUCH_ATTACK_MELEE_SPELL = 3; +const int TOUCH_ATTACK_RANGED_SPELL = 4; + +// Distances +const float MELEE_RANGE_FEET = 10.; +const float MELEE_RANGE_METERS = 3.05; +const float RANGE_15_FEET_IN_METERS = 4.92; +const float RANGE_5_FEET_IN_METERS = 1.64; + +// maximum distance (in meters) where we actually rush to do an attack +const float fMaxAttackDistance = 20.; + +// constants that determine at what class or skill levels specific classes get specific feats or abilities +const int WEAPON_MASTER_LEVEL_KI_CRITICAL = 7; +const int WEAPON_MASTER_LEVEL_INCREASED_MULTIPLIER = 5; +const int WEAPON_MASTER_LEVEL_SUPERIOR_WEAPON_FOCUS = 5; +const int WEAPON_MASTER_LEVEL_EPIC_SUPERIOR_WEAPON_FOCUS = 13; + +const int RANGER_LEVEL_DUAL_WIELD = 1; +const int RANGER_LEVEL_ITWF = 9; + +const int TEMPEST_LEVEL_STWF = 10; +const int TEMPEST_LEVEL_GTWF = 5; +const int TEMPEST_LEVEL_ITWF = 1; +const int TEMPEST_LEVEL_ABS_AMBIDEX = 8; + +const int BARD_LEVEL_FOR_BARD_SONG_AB_2 = 8; +const int BARD_PERFORM_SKILL_FOR_BARD_SONG_AB_2 = 15; +const int BARD_LEVEL_FOR_BARD_SONG_DAM_2 = 3; +const int BARD_PERFORM_SKILL_FOR_BARD_SONG_DAM_2 = 9; +const int BARD_LEVEL_FOR_BARD_SONG_DAM_3 = 14; +const int BARD_PERFORM_SKILL_FOR_BARD_SONG_DAM_3 = 21; + +//consts for weapon sizes (should be equal to creature sizes) +const int WEAPON_SIZE_SMALL = CREATURE_SIZE_SMALL; + +// spell id constants + +// motu99: this is the spell number for the Create magic tatoo spell that increases AB by 2; +// not sure if it is a bug; in prc_spell_const the create_magic_tatoo spell has a number of 3166 +// fluffyamoeba - it's line 3166 in spells.2da atm, so getting rid of this +// const int SPELL_CREATE_MAGIC_TATOO_2 = 3167; + +// motu99: these spell numbers appeared directly in the code +// don't know why. Put them here with a "_2" extension, so we can check what the real constants are +// const int SPELL_BARD_SONG_2 = 411; +// const int SPELL_BARD_CURSE_SONG_2 = 644; +const int SPELL_HELLINFERNO_2 = 762; +// const int SPELL_DIVINE_WRATH_2 = 622; SPELLABILITY_DC_DIVINE_WRATH in nwscript.nss +//const int SPELL_CLERIC_WAR_DOMAIN_POWER_2 = 380; not used, also in nwscript.nss +const int SPELL_EPIC_DEADEYE_2 = 4013; + +const int DEBUG_BATTLE_ARDOR = FALSE; +const int DEBUG_BATTLE_CUNNING = FALSE; +const int DEBUG_BATTLE_FLANKING = FALSE; + +//::///////////////////////////////////////////////////////////////// +//:: Simple utility functions (# attacks, BAB) - might want to copy those inline +//::///////////////////////////////////////////////////////////////// + +// calculates the BAB that a pure fighter with the Hit Dice (characer level) would have +int GetFighterBAB(int iHD); + +// calculates the BAB that the character had at level 20 +// assumes that we are above level 20! +int GetLevel20BAB(int iBAB, int iHD); + +// calculates the # attacks, for normal weapons (non-monk); no maximum if called with high iBAB +int GetAttacks(int iBAB, int iHD); + +// calculates the (bioware) number of attacks for an unarmed monk (maximum: 6 attacks) +// this is the Bioware implementation, which includes BAB from other classes and caps at 6 +int GetMonkAttacks(int iBAB, int iHD); + +// calculates the number of unarmed attacks for an unarmed class (usually monk) with iMonkLevel unarmed levels +// maximum: 5 attacks; iMonkLevels should include levels from all "unarmed" PrC classes, such as brawler etc. +// use GetUBABLevel to calculate the total number of "unarmed" class levels +int GetPnPMonkAttacks(int iMonkLevel); + + +//::////////////////////////////////////////////// +//:: Weapon Information Functions +//::////////////////////////////////////////////// + +// Returns DAMAGE_TYPE_* const of weapon +int GetDamageTypeByWeaponType(int iWeaponType); +int GetWeaponDamageType(object oWeap); + +// returns TRUE if weapon is ranged +// checks for bow, crossbow, sling, dart, throwing axe, shuriken, but also ammo: arrow, bullet, bolt +int GetIsRangedWeaponType(int iWeaponType); + +// returns TRUE if weapon is a throwing weapon +// checks for dart, throwing axe, shuriken +int GetIsThrowingWeaponType(int iWeaponType); + +// returns true if weapon is two-handed +// does not include double weapons +int GetIsTwoHandedMeleeWeaponType(int iWeaponType); +int GetIsTwoHandedMeleeWeapon(object oWeap); + +// returns true if it is a creature weapon, one of the following base types: +// CBLUDGWEAPON, CPIERCWEAPON, CSLASHWEAPON +int GetIsCreatureWeaponType(int iWeaponType); +int GetIsCreatureWeapon(object oWeap); + +// returns true, if unarmed (base_item_invalid), glove or creature weapon +int GetIsNaturalWeaponType(int iWeaponType); +int GetIsNaturalWeapon(object oWeap); + +// returns true if the weapon is a simple weapon +// returns 1 if simple melee weapon +// returns 2 if ranged simple weapon +int GetIsSimpleWeaponType(int iWeaponType); +int GetIsSimpleWeapon(object oWeap); + +// returns true, if unarmed (base_item_invalid) or kama +// does not check for gloves or bracers +int GetIsMonkWeaponTypeOrUnarmed(int iWeaponType); +int GetIsMonkWeaponOrUnarmed(object oWeap); + +// returns true, if not unarmed (base_item_invalid), not shield, and not torch +// implicitly assumes, that iWeaponType is the base item type of the object held in the left hand. +// This can only be a weapon, a shield, or a torch +int GetIsOffhandWeaponType(int iWeaponType); +int GetIsOffhandWeapon(object oWeapL); + +// returns true, if it is a double sided weapon +int GetIsDoubleSidedWeaponType(int iWeaponType); +int GetIsDoubleSidedWeapon(object oWeap); + +// similar to GetFeatByWeaponType(), but should be much faster, +// because it only loops once over the weapon types +// and returns all feats relevant for the weapon in a struct +struct WeaponFeat GetAllFeatsOfWeaponType(int iWeaponType); + +// Returns the low end of oWeap's critical threat range +// Accounts for Keen and Improved Critical bonuses +int GetWeaponCriticalRange(object oPC, object oWeap); + +// returns the critical multiplier of the weapons base type +int GetCriticalMultiplierOfWeaponType(int iWeaponType); + +// Returns the players critical hit damage multiplier +// takes into account weapon master's increased critical feat +int GetWeaponCritcalMultiplier(object oPC, object oWeap); + +// returns the inventory slot (constant) in which to look for the ammunition +int GetAmmunitionInventorySlotFromWeaponType(int iWeaponType); + +// Return the proper ammunition based on the weapon +object GetAmmunitionFromWeaponType(int iWeaponType, object oAttacker); +object GetAmmunitionFromWeapon(object oWeapon, object oAttacker); + + +//::////////////////////////////////////////////// +//:: Combat Information Functions +//::////////////////////////////////////////////// + +// Returns true if melee attacker within 15 feet +// motu99: This actually was (and is) 10 feet +int GetMeleeAttackers15ft(object oPC = OBJECT_SELF); + +// estimates how much the range between oAttacker and oDefender is reduced due to the size of both creatures +// will add a meter for every size integer above CREATURE_SIZE_MEDIUM +float GetSizeAdjustment(object oDefender, object oAttacker); + +// Returns true if melee attacker is in range to attack target (e.g. 10 feet) +// if bSizeAdjustment is True, it will consider the creatures sizes +int GetIsInMeleeRange(object oDefender, object oAttacker, int bSizeAdjustment = TRUE); + +// returns the sum of all class levels that give an unarmed base attack bonus (UBAB) +int GetUBABLevel(object oPC); + +// if a creature weapon is equipped in the right slot (INVENTORY_SLOT_CWEAPON_R,) +// it randomly selects one of the (up to three) creature weapons in the right/left/back +// creature weapon slots with a chance right/left/back of 5:5:2 +// if no creature weapon is equipped, returns gloves (or base_item_invalid, of no gloves) +object GetUnarmedWeapon(object oPC); + +// Returns true if player has nothing in the right hand +int GetIsUnarmed(object oPC); + +// returns true if we have something in the left creature weapon slot, or if we have monk levels +int GetIsUnarmedFighter(object oPC); + +// Returns true if player is a monk and has a monk weapon equipped (or is unarmed) +int GetHasMonkWeaponEquipped(object oPC); + +// returns true, if we have a cross bow equipped and do not posses the rapid reload feat +int GetHasCrossBowEquippedWithoutRapidReload(object oPC); + +// Returns number of "normal" attacks per round for the main hand +// returns the correct number of unarmed attacks, if oPC has monk levels and has a monk weapon equipped or is unarmed +// returns only one attack, if wielding a cross-bow without the rapid reload feat (unless bIgnoreCrossBow = TRUE) +// does not include any "bonus" attacks from Haste, combat modes (flurry of blows), class specifics (One Strike Two Cuts) etc. +// However, the number of "normal" attacks might be increased due to special (attack) boni to BAB from spells (such as Tenser's or Divine Power) +// in order to calculate the attack # with such boni, call the function with a non-zero value of iBABBonus (negative values are possible) +// the minimum # attacks returned is always 1; the maximum number returned is 5 (for armed and unarmed combat) +// if the PRC_BIOWARE_MONK_ATTACKS switch is on, the maximum number returned is 6 (only for monk attacks - unarmed or kama) +int GetMainHandAttacks(object oPC, int iBABBonus = 0, int bIgnoreCrossBow = FALSE); + +// Returns number of offhand attacks per round for off-hand +// needs number of mainhand attacks in order to ensure, that offhand attacks are always less or equal mainhand attacks +// also needs number of mainhand attacks, if the oPC has the perfect two weapon fighting (PTWF) feat +// the function will calculate the number of mainhandattacks (without bonus attacks) on its own, if passed iMainHandAttacks = 0 +// otherwise it will assume that the (non-zero) number given to iMainHandAttacks is the correct number of mainhand attacks +// if you want the number of main hand attacks to include bonus attacks, calc the Mainhandattacks yourself and add whatever bonus attacks you like +int GetOffHandAttacks(object oPC, int iMainHandAttacks = 0); + +// Returns a specific alignment property. +// Returns a line number from iprp_alignment.2da +// Used to determine the attack and damage bonuses vs. alignments +int GetItemPropAlignment(int iGoodEvil,int iLawChaos); + +//::////////////////////////////////////////////// +//:: Other utility functions +//::////////////////////////////////////////////// + +int GetAttackModVersusDefender(object oDefender, object oAttacker, object oWeapon, int iTouchAttackType = FALSE); + +int GetDiceMaxRoll(int iDamageConst); + +// all of the ten ip dice constants are supposed to lie between 6 and 15 +int GetIsDiceConstant(int iDice); + +// returns the highest critical bonus damage constant on the weapon +// note that this is the IP_DAMAGE_CONSTANT, not the damage itself +// only compares the damage constants, so does not differentiate between dice and constant damage (and assumes, that damage constants are ordered appropriately) +int GetMassiveCriticalBonusDamageConstantOfWeapon(object oWeapon); + +// Find nearest valid living enemy creature, that is not oOldDefender, within the specified range (measured in meters) of oAttacker +// if there is no valid living target within the specified range, return the first target (valid or unvalid) found out of range +// the range fDistance is measured in meters; default distance is 3.05 meters (= 10 feet = melee range) +object FindNearestNewEnemyWithinRange(object oAttacker, object oOldDefender, float fDistance = MELEE_RANGE_METERS); + +// finds the nearest valid enemy that is not oOldDefender +// (should only return living enemies, but bioware functions used in the code was bugged, so it might return a valid, but dead enemy) +object FindNearestNewEnemy(object oAttacker, object oOldDefender); + +// finds the nearest valid enemy +object FindNearestEnemy(object oAttacker); + +// clears all actions (but not the combat state) and moves to the location or oTarget +void ClearAllActionsAndMoveToObject(object oTarget, float fRange = 2.0); + +// checksall equipped items of the oPC for the Haste property +int GetHasHasteItemProperty(object oPC); + +// calculates bonus attacks and their associated penalties due to spell effects on oAttacker, such as Haste, One Strike Two Cuts, etc. +// does not include bonus attacks and penalties from combat modes, such as flurry of blows +struct BonusAttacks GetBonusAttacks(object oAttacker); + +// equips the first ammunition it finds in the inventory that works with the (ranged) weapon in the right hand +// returns the equipped new ammunition +object EquipAmmunition(object oPC); + +//Gets the total damage reduction of a creature for a given weapon +//if any new damage reduction spells/powers/etc are added, add to this function +struct DamageReducers GetTotalReduction(object oPC, object oTarget, object oWeapon); + +//::////////////////////////////////////////////// +//:: Debug Functions +//::////////////////////////////////////////////// + +// returns the name of the ACTION_* constant +string GetActionName(int iAction); + +// experimental, not yet used +int GetIsPhysicalCombatAction(int iAction); + +// used in AttackLoopLogic in order to have prc combat and aurora combat running smoothly +// checks whether the anticipated target (oDefender) selected by prc combat must be changed +// due to actions taken by the aurora engine (or the player character) +// returns the most suitable target for the next prc attack +object CheckForChangeOfTarget(object oAttacker, object oDefender, int bAllowSwitchOfTarget = FALSE); + +// returns name of the ITEM_PROPERTY_* constant +// removed as unused +// string GetItemPropertyName(int iItemType); + +// returns name of the EFFECT_TYPE_* const +// removed as unused +//string GetEffectTypeName(int iEffectType); + +// returns name of the DAMAGE_BONUS_* constant +// removed as unused +// string GetDamageBonusConstantName(int iDamageType); + +// returns name of the IP_CONST_DAMAGEBONUS_* constant +// removed as unused +// string GetIPDamageBonusConstantName(int iDamageType); +// moved to inc_debug and renamed +// string DebugStringEffect(effect eEffect); +// replaced with DebugProp2Str() +// string DebugStringItemProperty(itemproperty ip); + + +//::////////////////////////////////////////////// +//:: Attack Bonus Functions +//::////////////////////////////////////////////// + +// Returns the magical attack bonus modifier on the attacker +// checks for all the spells and determines the proper bonuses/penalties +int GetMagicalAttackBonus(object oAttacker, object oTarget); + +// Returns Weapon Attack bonus or penalty +// inlcuding race and alignment checks +int GetWeaponAttackBonusItemProperty(object oWeap, object oDefender); + +// Returns the proper AC for the defender vs. this attacker. +// takes into account being denied dex bonus to ac, etc. +int GetDefenderAC(object oDefender, object oAttacker, int bIsTouchAttack = FALSE); + +// Returns the Attack Bonus for oAttacker attacking oDefender +// iOffhand = 0 means attack is from main hand (default) +// iOffhand = 1 for an off-hand attack +int GetAttackBonus(object oDefender, object oAttacker, object oWeap, int iOffhand = 0, int iTouchAttackType = FALSE); + +// Returns 0 on miss, 1 on hit, and 2 on Critical hit +// Works for both Ranged and Melee Attacks +// iOffhand 0 = main; 1 = off-hand +// iAttackBonus 0 = calculate it; Anything else and it will use that value and will not calculate it. +// This is mainly for when you call PerformAttackRound to do multiple attacks, +// so that it does not have to recalculate all the bonuses for every attack made. +// int iMod = 0; iMod just modifies the attack roll. +// If you are coding an attack that reduces the attack roll, put the number in the iMod slot. +// bShowFeedback tells the script to show the script feedback +// fDelay is the amount of time to delay the display of feedback +int GetAttackRoll(object oDefender, object oAttacker, object oWeapon, int iOffhand = 0, int iAttackBonus = 0, int iMod = 0, int bShowFeedback = TRUE, float fDelay = 0.0, int iTouchAttackType = FALSE); + +//::////////////////////////////////////////////// +//:: Damage Bonus Functions +//::////////////////////////////////////////////// + +// returns sum of levels of all classes that have favored enemies +int GetFavoredEnemyLevel(object oAttacker); + +// returns the feat constant for the favored enemy feat versus a specific racial type +int GetFavoredEnemyFeat(int iRacialType); + +// Returns Favored Enemy Bonus Damage +// int GetFavoredEnemeyDamageBonus(object oDefender, object oAttacker); // old functions, replaced by the new one: +int GetFavoredEnemyDamageBonus(object oDefender, object oAttacker); + +// Get Mighty Weapon Bonus +int GetMightyWeaponBonus(object oWeap); + +// Returns the Enhancement Bonus of oWeapon +// Can also return - enhancements (penalties) +int GetWeaponEnhancement(object oWeapon, object oDefender, object oAttacker); + +// Used to return the Enhancement Bonus for monks +// called by GetAttackDamage to make sure monks +// get proper damage power for cutting through DR +// Note: Calls GetWeaponEnhancement as well, so when determining Damage Power +// Just use GetMonkEnhancement instead. +int GetMonkEnhancement(object oWeapon, object oDefender, object oAttacker); + +// Returns the DAMAGE_POWER_* of a weapon +// For monks send gloves instead of weapon +// function makes use of above enhancement functions +// to determine Enhancement vs. Alignment and everything +int GetDamagePowerConstant(object oWeapon, object oDefender, object oAttacker); + +// Returns Enhancement bonus on Ammunition +// oWeap = Weapon used by Attacker +int GetAmmunitionEnhancement(object oWeapon, object oDefender, object oAttacker); + +// Returns an integer amount of damage from a constant +// iDamageConst = DAMAGE_BONUS_* or IP_CONST_DAMAGEBONUS_* +int GetDamageByConstant(int iDamageConst, int iItemProp); + +// Utility function used by GetWeaponBonusDamage to store the damage constants +// Prevents same code from being written multiple times for various damage properties +struct BonusDamage GetItemPropertyDamageConstant(int iDamageType, int iDice, struct BonusDamage weapBonusDam); + +// Returns a struct filled with IP damage constants for the given weapon. +// Used to add elemental damage to combat system. +// Can also get information from Weapon Ammunition if used in place of oWeapon +struct BonusDamage GetWeaponBonusDamage(object oWeapon, object oTarget); + +// gets the Dice parameters (dice side, number of dice to roll) from a monster weapon +struct Dice GetWeaponMonsterDamage(object oWeapon); + +// Stores bonus damage from spells into the struct +struct BonusDamage GetMagicalBonusDamage(object oAttacker, object oTarget); + +// Returns damage caused by each attack that should remain constant the whole round +// Mainly things from feat, strength bonus, etc. +// iOffhand = 0 means attack is from main hand (default) +// iOffhand = 1 for an off-hand attack +int GetWeaponDamagePerRound(object oDefender, object oAttacker, object oWeap, int iOffhand = 0); + +// Returns Damage dealt by weapon +// Works for both Ranged and Melee Attacks +// Defaults typically calculate everything for you, but cacheing the data and reusing it +// can make things run faster so I left them as optional parameters. +// sWeaponBonusDamage = result of a call to GetWeaponBonusDamage +// sSpellBonusDamage = result of a call to GetMagicalBonusDamage +// iOffhand: 0 = main; 1 = off-hand +// iDamage: 0 = calculate the GetWeaponDamagePerRound; Anything else and it will use that value +// and will not calculate it. This is mainly for when you call PerformAttackRound +// to do multiple attacks, so that it does not have to recalculate all the bonuses +// for every attack made. +// bIsCritical = FALSE is not a critical; true is a critical hit. (Function checks for crit immunity). +// iNumDice: 0 = calculate it; Anything else is the number of dice rolled +// iNumSides: 0 = calculate it; Anything else is the sides of the dice rolled +// iCriticalMultiplier: 0 = calculate it; Anything else is the damage multiplier on a critical hit +effect GetAttackDamage(object oDefender, object oAttacker, object oWeapon, struct BonusDamage sWeaponBonusDamage, struct BonusDamage sSpellBonusDamage, int iOffhand = 0, int iDamage = 0, int bIsCritical = FALSE, int iNumDice = 0, int iNumSides = 0, int iCriticalMultiplier = 0); + +//::////////////////////////////////////////////// +//:: Attack Logic Functions +//::////////////////////////////////////////////// + +// utility function to apply any onhit-property (found on an item) to oTarget +// assumes that the Item Property Type of ip is ITEM_PROPERTY_ON_HIT_PROPERTIES +// cycles through all the known subtypes in order to properly perform the action +struct OnHitSpell DoOnHitProperties(itemproperty ip, object oTarget); + +// same as DoOnHitProperties, only cycles through on Monster hit subtypes +// e.g. the item property type must be ITEM_PROPERTY_ON_MONSTER_HIT +void DoOnMonsterHit(itemproperty ip, object oTarget); + +// Called by ApplyOnHitAbilities +// properly applies on hit abilties with a X% chance of firing that last Y rounds. +// in other words... on hit stun, daze, sleep, blindness, etc. +// iDurationVal - iprp_onhitdur.2da entry number +// eAbility - the proper effect this ability will apply to the target (will be applied temporarily) +// eVis - the visual effect to apply (will be applied instantly) +void ApplyOnHitDurationAbiltiies(object oTarget, int iDurationVal, effect eAbility, effect eVis); + +// applies any On Hit abilities like spells, vampiric regen, poison, vorpal, stun, etc. +// if you sent a WEAPON +// oTarget = one being hit | oItemWielder = one attacking +// if you send ARMOR +// oTarget = one attacking | oItemWielder = one being hit +void ApplyOnHitAbilities(object oTarget, object oItemWielder, object oItem); + +// Due to the lack of a proper sleep function in order to delay attacks properly +// I needed to make a separate function to control the logic of each attack. +// AttackLoopMain calls this function, which in turn uses a delay and calls AttackLoopMain. +// This allowed a proper way to delay the function. +void AttackLoopLogic(object oDefender, object oAttacker, + int iBonusAttacks, int iMainAttacks, int iOffHandAttacks, int iMod, + struct AttackLoopVars sAttackVars, struct BonusDamage sMainWeaponDamage, + struct BonusDamage sOffHandWeaponDamage, struct BonusDamage sSpellBonusDamage, + int iOffhand, int bIsCleaveAttack); + +// Function used by PerformAttackRound to control the flow of logic +// this function calls AttackLoopLogic which then calls this function again +// making them recursive until the AttackLoopMain stops calling AttackLoopLogic +void AttackLoopMain(object oDefender, object oAttacker, + int iBonusAttacks, int iMainAttacks, int iOffHandAttacks, int iMod, + struct AttackLoopVars sAttackVars, struct BonusDamage sMainWeaponDamage, + struct BonusDamage sOffHandWeaponDamage, struct BonusDamage sSpellBonusDamage); + +/** + * Performs a full attack round and can add in bonus damage damage/effects. + * Will perform all attacks and accounts for weapontype, haste, twf, tempest twf, etc. + * If the first attack hits, a local int called "PRCCombat_StruckByAttack" will be TRUE + * on the target for 1 second. + * + * @param oDefender The object being attacked. + * @param oAttacker The object doing the attacks. + * + * @param eSpecialEffect Any special Vfx or other effects the attack should use IF successful. + * @param eDuration specifies the duration of the applied effect(s) + * 0.0 = DURATION_TYPE_INSTANT, effect lasts 0.0 seconds. + * >0.0 = DURATION_TYPE_TEMPORARY, effect lasts the amount of time put in here. + * <0.0 = DURATION_TYPE_PERMAMENT!!!!! Effect lasts until dispelled. + + * @param iAttackBonusMod Is the attack modifier - Will effect all attacks if bEffectAllAttacks is on. + * @param iDamageModifier Should be either a DAMAGE_BONUS_* constant or an integer amount of damage. + * Give an integer if the attack effects ONLY the first attack! + * @param iDamageType DAMAGE_TYPE_* constant. + * + * @param bEffectAllAttacks If FALSE will only effect first attack, otherwise effects all attacks. + * + * @param sMessageSuccess Message to display on a successful hit. (i.e. "*Sneak Attack Hit*") + * @param sMessageFailure Message to display on a failure to hit. (i.e. "*Sneak Attack Miss*") + * + * @param bApplyTouchToAll Applies a touch attack to all attacks - FALSE if only first attack is a touch attack. + * @param iTouchAttackType TOUCH_ATTACK_* const - melee, ranged, spell melee, spell ranged + * + * @param bInstantAttack If TRUE, all attacks are performed at the same time, instead of over a round. + * Default: FALSE + * @param bCombatModeFlags various bit-wise flags that control the scripted combat + * see PRC_COMBATMODE_* constants for more info + */ +void PerformAttackRound(object oDefender, object oAttacker, + effect eSpecialEffect, float eDuration = 0.0, int iAttackBonusMod = 0, + int iDamageModifier = 0, int iDamageType = 0, int bEffectAllAttacks = FALSE, + string sMessageSuccess = "", string sMessageFailure = "", + int bApplyTouchToAll = FALSE, int iTouchAttackType = FALSE, + int bInstantAttack = FALSE, int bCombatModeFlags = 0); + +/** +// Performs a single attack and can add in bonus damage damage/effects +// If the first attack hits, a local int called "PRCCombat_StruckByAttack" will be TRUE +// on the target for 1 second. +// [Note that even though you only perform a single attack, there could be more than 1 attack, +// if the attacker has a feat like cleave or circle kick. The local int is NOT set on the bonus attacks! +// +// eSpecialEffect - any special Vfx or other effects the attack should use IF successful. +// eDuration - specifies the duration of the applied effect(s) +// 0.0 = DURATION_TYPE_INSTANT, effect lasts 0.0 seconds. +// >0.0 = DURATION_TYPE_TEMPORARY, effect lasts the amount of time put in here. +// <0.0 = DURATION_TYPE_PERMAMENT!!!!! Effect lasts until dispelled. +// iAttackBonusMod is the attack modifier +// iDamageModifier - is always an integer in PerformAttack() +// [Note that iDamageModifier might be a DAMAGE_BONUS_* const in PerformAttackRound] +// iDamageType = DAMAGE_TYPE_* +// sMessageSuccess - message to display on a successful hit. (i.e. "*Sneak Attack Hit*") +// sMessageFailure - message to display on a failure to hit. (i.e. "*Sneak Attack Miss*") +// iTouchAttackType - TOUCH_ATTACK_* const - melee, ranged, spell melee, spell ranged +// oRightHandOverride - item to use as if in the right hand +// oLeftHandOverride - item to use as if in the left hand +// nHandednessOverride - if TRUE, count as offhand attack +// bCombatModeFlags - various bit-wise flags that control the scripted combat +// see PRC_COMBATMODE_* constants for more info +*/ +void PerformAttack(object oDefender, object oAttacker, + effect eSpecialEffect, float eDuration = 0.0, int iAttackBonusMod = 0, + int iDamageModifier = 0, int iDamageType = 0, + string sMessageSuccess = "", string sMessageFailure = "", + int iTouchAttackType = FALSE, + object oRightHandOverride = OBJECT_INVALID, object oLeftHandOverride = OBJECT_INVALID, + int nHandednessOverride = 0, int bCombatModeFlags = 0); // motu99: changed default of nHandednessOverride to FALSE (was -1) + +//::///////////////////////////////////////// +//:: Structs +//::///////////////////////////////////////// + +// stores all Feat constants that apply to a particular weapon base type +struct WeaponFeat +{ + int Focus; + int Specialization; + int EpicFocus; + int EpicSpecialization; + int ImprovedCritical; + int OverwhelmingCritical; + int DevastatingCritical; + int WeaponOfChoice; + int SanctifyMartialStrike; + int VileMartialStrike; +}; + +struct WeaponFeat InitWeaponFeat(int value) +{ + struct WeaponFeat sFeat; + sFeat.Focus = value; + sFeat.Specialization = value; + sFeat.EpicFocus = value; + sFeat.EpicSpecialization = value; + sFeat.ImprovedCritical = value; + sFeat.OverwhelmingCritical = value; + sFeat.DevastatingCritical = value; + sFeat.WeaponOfChoice = value; + sFeat.SanctifyMartialStrike = value; + sFeat.VileMartialStrike = value; + return sFeat; +} + +struct BonusDamage +{ + // dice_* vars are for the damage bonus IP that are NdX dice elemental damage + int dice_Acid, dice_Cold, dice_Fire, dice_Elec, dice_Son; + int dice_Div, dice_Neg, dice_Pos; + int dice_Mag; + int dice_Slash, dice_Pier, dice_Blud; + + // dam_* vars are for +/- X damage bonuses + int dam_Acid, dam_Cold, dam_Fire, dam_Elec, dam_Son; + int dam_Div, dam_Neg, dam_Pos; + int dam_Mag; + int dam_Slash, dam_Pier, dam_Blud; +}; + +struct AttackLoopVars +{ + // most of these variables don't change during the attack loop logic, they are just + // recursively passed back to the function. + + // the delay of the functions recursion and the duration of the eSpecialEffect + float fDelay, eDuration; + + // does the special effect apply to all attacks? is it a ranged weapon? + int bEffectAllAttacks, bIsRangedWeapon; + + // Ammo if it is a ranged weapon, and both main and off-hand weapons + object oAmmo, oWeaponR, oWeaponL; + + // all the main hand weapon data + int iMainNumDice, iMainNumSides, iMainCritMult, iMainAttackBonus, iMainWeaponDamageRound; + + // all the off hand weapon data + int iOffHandNumDice, iOffHandNumSides, iOffHandCritMult, iOffHandAttackBonus, iOffHandWeaponDamageRound; + + // special effect applied on first attack, or all attacks + effect eSpecialEffect; + //when the new PRC effect system is in place, this will be a reference to a local effect on the module + //that exists temporarilly and will be destroyed at the end + //string sEffectLocalName; + + // the damage modifier and damage type for extra damage from special attacks + int iDamageModifier, iDamageType; + + // string displayed on a successful hit, or a miss + string sMessageSuccess, sMessageFailure; + + // ints for internal logic (they can change during the attack or attack round) + int iCleaveAttacks; // number of cleave attacks performed in the round; does not count cleaves within cleaves + int iCircleKick; // number of circle kicks per round (only one allowed) + int iAttackNumber; // number of attacks already performed in the round; does not count double or triple cleaves + int bUseMonkAttackMod; // if true, we use the monk attack modifier (-3 instead of -5 for additional attacks per round) + int bApplyTouchToAll; // duplicates the parameter of PerformAttackRound() for use in Attack logic functions + int iTouchAttackType; // duplicates the parameter of PerformAttack() and PerformAttackRound() for use in Attack logic functions + int bFiveFootStep; // determines whether we already did a five foot step in the full combat round + int bMode; // flag wit bitwise settings that determines various combat mode settings, such as offhand attack checks etc. +}; + +// used to calculate the BonusAttacks (due to spell effects such as Haste, One Strike Two Cuts or similar) +// and the attack penalty associated with the bonus attacks +struct BonusAttacks +{ + int iNumber; + int iPenalty; +}; + +// used to store sides and number of dice to be rolled +struct Dice +{ + int iNum; + int iSides; +}; + +// stores SpellID and DC of an onhit spell +struct OnHitSpell +{ + int iSpellID; + int iDC; +}; + +//internal struct to store damage reduction +struct DamReduction +{ + int nRedLevel; + int nRedAmount; +}; + +//struct of damage reduction/resistance. +//First value is for static reduction like DR 5/- +//second value is for persent immunities like 25% Slashing Immunity +struct DamageReducers +{ + int nStaticReductions; + int nPercentReductions; +}; + +// "quasi global" Vars needed to pass information between AttackLoopMain and AttackLoopLogic or other utitily functions used by these two + +/* +// motu99: these vars work similar to locals attached to an object. They have global scope, but in contrast to the so called locals they have limited lifetime. +// GLOBAL SCOPE: the variables are defined outside of any function, thus they are visible by all functions (and are initialized when main() starts up) +// They are compiled into the code of any main() function created by the system, if that main() calls a prc_inc_combat function that uses these variables (such as PerformAttack) +// LIMITED LIFETIME: These global scope vars only "live" as long as the main() function started within the context of an object (usally an event or an action assigned to a PC or NPC) has not terminated +// Whenever the main() function is called anew, all quasi-global variables are initialized to their default values +// WARNING: no changes from the last call to the main() function are remembered! +// USE: These variables are used to pass information between functions that execute within a single main(). They are much faster to access than the so called locals attached to an object +// LIMITATIONS: They do not persist over a DelayCommand() or AssignCommand() call. Whenever you call a function via DelayCommand or AssignCommand +// the system creates a new (!) main() function in order to actually execute the function. So any function called via DelayCommand or AssignCommand will have +// all of its quasi-global variables initialzed to their default values! The values of these variables at the time when the DelayCommand() or AssignCommand() was executed, +// are *not remembered* and not transferred to the function called within the DelayCommand() or AssignCommand(). +// Therefore when AttackLoopLogic() calls AttackLoopMain() in a DelayCommand(), in order to do any left over attacks in the round after a proper delay, +// all these variables are initialized to their default values. If one wants to remember the values of these variables, one has to pass them to the function directly +// (either as individual parameters, or as a collection of parameters in a struct) +*/ + +/* +// motu99: moved these "quasi globals" to the struct AttackLoopVars, so that they are remembered from one DelayCommand to the next +int iCleaveAttacks = 0; +int iCircleKick = 0; +*/ +// motu99: Still using these quasi-globals to communicate between functions *within one* single attack +int bFirstAttack; +int bUseMonkAttackMod; + +int bIsVorpalWeaponEquiped = FALSE; +int iVorpalSaveDC = 0; + +// #include "prc_x2_itemprop" +//#include "prc_inc_racial" // includes prc_feat_const, prc_class_const +// #include "prc_inc_function" +// #include "prc_inc_sneak" +#include "prc_inc_unarmed" // includes prc_spell_const, inc_utility +// #include "prc_inc_util" +//#include "inc_utility" +// #include "inc_abil_damage" +// #include "inc_epicspelldef" +#include "prc_inc_onhit" +#include "prc_misc_const" +#include "prc_inc_fork" + +//::///////////////////////////////////////////////////////////////////////////// +//:: Utility functions (BAB, # Attacks) - mostly used inline, but good to have them here to copy +//::///////////////////////////////////////////////////////////////////////////// + +//returns a struct describing the applicable damage reductions with the given weapon and target +struct DamReduction OvercomeDR(object oTarget) +{ + struct DamReduction nBestDamageReduction; + int nBestDamageResistance = 0; + int nApplicableReduction; + struct DamReduction nCurrentReduction; + nCurrentReduction.nRedLevel = DAMAGE_POWER_NORMAL; + nCurrentReduction.nRedAmount = 0; + nBestDamageReduction = nCurrentReduction; + + //loop through spell/power effects first + effect eLoop=GetFirstEffect(oTarget); + + while (GetIsEffectValid(eLoop)) + { + int nSpellID = GetEffectSpellId(eLoop); + + //Stoneskin + if( nSpellID == 172 + || nSpellID == 342 + || nSpellID == SPELL_URDINNIR_STONESKIN) + { + nCurrentReduction.nRedLevel = DAMAGE_POWER_PLUS_FIVE; + nCurrentReduction.nRedAmount = 10; + } + //GreaterStoneskin + if( nSpellID == 74) + { + nCurrentReduction.nRedLevel = DAMAGE_POWER_PLUS_FIVE; + nCurrentReduction.nRedAmount = 20; + } + //Premonition + if( nSpellID == 134) + { + nCurrentReduction.nRedLevel = DAMAGE_POWER_PLUS_FIVE; + nCurrentReduction.nRedAmount = 30; + } + //Ghostly Visage + if( nSpellID == 351 + || nSpellID == 605 + || nSpellID == 120) + { + nCurrentReduction.nRedLevel = DAMAGE_POWER_PLUS_ONE; + nCurrentReduction.nRedAmount = 5; + } + //Ethereal Visage + if( nSpellID == 121) + { + nCurrentReduction.nRedLevel = DAMAGE_POWER_PLUS_THREE; + nCurrentReduction.nRedAmount = 20; + } + //Shadow Shield and Shadow Evade(best case) + if( nSpellID == 160 + || nSpellID == 477 + || nSpellID == SPELL_SHADOWSHIELD) + { + nCurrentReduction.nRedLevel = DAMAGE_POWER_PLUS_THREE; + nCurrentReduction.nRedAmount = 10; + } + //Iron Body + if( nSpellID == POWER_IRONBODY) + { + nCurrentReduction.nRedLevel = DAMAGE_POWER_PLUS_FIVE; + nCurrentReduction.nRedAmount = 15; + } + //Shadow Body + if( nSpellID == POWER_SHADOWBODY) + { + nCurrentReduction.nRedLevel = DAMAGE_POWER_PLUS_ONE; + nCurrentReduction.nRedAmount = 10; + } + + //if it applies and prevents more damage, replace + if(nCurrentReduction.nRedLevel > nApplicableReduction + && nCurrentReduction.nRedAmount > nBestDamageReduction.nRedAmount) + nBestDamageReduction = nCurrentReduction; + + + eLoop=GetNextEffect(oTarget); + } + + //now loop through items + int nSlot; + object oItem; + int nSubType; + + for (nSlot=0; nSlot nApplicableReduction*/) + { + //if (DEBUG) DoDebug("Item Property is Damage Reduction"); + int nReduce = GetItemPropertyCostTableValue(ipLoop) * 5; + if (nReduce > nBestDamageReduction.nRedAmount) + nBestDamageReduction.nRedAmount = nReduce; + } + + //Next itemproperty on the list... + ipLoop=GetNextItemProperty(oItem); + } + }//end validity check + }//end for + //if(DEBUG) DoDebug("Best Reduction: " + IntToString(nBestDamageReduction.nRedAmount)); + + return nBestDamageReduction; +} + +// calculates the BAB that a pure fighter with the Hit Dice (characer level) would have +int GetFighterBAB(int iHD) +{ + return ((iHD > 20) ? (20 + (iHD -19)/2) : iHD); +} + +// assumes that we are above level 20! +// otherwise function call makes no sense, because we don't yet have a level 20 BAB +// and the BAB is used "as is" in order to calculate the number of main hand attacks +int GetLevel20BAB(int iBAB, int iHD) +{ + // subtract half of the character levels beyond 20 + return (iBAB - (iHD-19)/2); +} + +// calculates the # attacks, for normal weapons (non-monk) +int GetAttacks(int iBAB, int iHD) +{ + return ((iHD > 20) ? ((iBAB -(iHD-17)/2)/5 +1) : ((iBAB-1)/ 5+1)); +} + +// calculates the number of attacks for an unarmed monk +// this is the Bioware implementation, which includes BAB from other classes and caps at 6 +int GetMonkAttacks(int iBAB, int iHD) +{ + return ((iHD > 20) ? PRCMin(6,((iBAB - (iHD-17)/2)/3 +1)) : PRCMin(6,((iBAB-1) / 3 +1))); +} + +int GetPnPMonkAttacks(int iMonkLevel) +{ + if(iMonkLevel < 6) return 1; + else if (iMonkLevel < 10) return 2; + else if (iMonkLevel < 14) return 3; + else if (iMonkLevel < 18) return 4; + else return 5; +} + + +//::////////////////////////////////////////////// +//:: Weapon Information Functions +//::////////////////////////////////////////////// + + +// @TODO: include CEP stuff in the weapon information functions +// maybe we should use the 2das instead of "hardwiring" everything +// [don't know how slow cached calls to look up 2das are] +// we could also use a switch to decide whether to use "hardwired" fast calls, or "safer" calls to 2das +// x - since cache functions were already used in some spellscripts I've edited this function to use them as well + +int GetDamageTypeByWeaponType(int iWeaponType) +{ + switch(StringToInt(Get2DACache("baseitems", "WeaponType", iWeaponType))) + { + case 1: return DAMAGE_TYPE_PIERCING; + case 2: return DAMAGE_TYPE_BLUDGEONING; + case 3: return DAMAGE_TYPE_SLASHING; + case 4: return 5; //DAMAGE_TYPE_PIERCING | DAMAGE_TYPE_SLASHING; + case 5: return 3; //DAMAGE_TYPE_PIERCING | DAMAGE_TYPE_BLUDGEONING; + } + return DAMAGE_TYPE_BLUDGEONING; // Every place expects a default, and most errors appear to be on unarmed. +} + +int GetWeaponDamageType(object oWeap) +{ + return GetDamageTypeByWeaponType(GetBaseItemType(oWeap)); +} + +int DamageTypeToIPConst(int nDamageType) +{ + switch(nDamageType) + { + case DAMAGE_TYPE_ACID: return IP_CONST_DAMAGETYPE_ACID; + case DAMAGE_TYPE_BLUDGEONING: return IP_CONST_DAMAGETYPE_BLUDGEONING; + case DAMAGE_TYPE_COLD: return IP_CONST_DAMAGETYPE_COLD; + case DAMAGE_TYPE_DIVINE: return IP_CONST_DAMAGETYPE_DIVINE; + case DAMAGE_TYPE_ELECTRICAL: return IP_CONST_DAMAGETYPE_ELECTRICAL; + case DAMAGE_TYPE_FIRE: return IP_CONST_DAMAGETYPE_FIRE; + case DAMAGE_TYPE_MAGICAL: return IP_CONST_DAMAGETYPE_MAGICAL; + case DAMAGE_TYPE_NEGATIVE: return IP_CONST_DAMAGETYPE_NEGATIVE; + case DAMAGE_TYPE_PIERCING: return IP_CONST_DAMAGETYPE_PIERCING; + case DAMAGE_TYPE_POSITIVE: return IP_CONST_DAMAGETYPE_POSITIVE; + case DAMAGE_TYPE_SLASHING: return IP_CONST_DAMAGETYPE_SLASHING; + case DAMAGE_TYPE_SONIC: return IP_CONST_DAMAGETYPE_SONIC; + } + return IP_CONST_DAMAGETYPE_PHYSICAL; +} + +int GetIsRangedWeaponType(int iWeaponType) +{ + switch(iWeaponType) + { + case BASE_ITEM_LONGBOW: return TRUE; + case BASE_ITEM_SHORTBOW: return TRUE; + case BASE_ITEM_LIGHTCROSSBOW: return TRUE; + case BASE_ITEM_HEAVYCROSSBOW: return TRUE; + case BASE_ITEM_SLING: return TRUE; + + case BASE_ITEM_THROWINGAXE: return TRUE; + case BASE_ITEM_DART: return TRUE; + case BASE_ITEM_SHURIKEN: return TRUE; + + case BASE_ITEM_ARROW: return TRUE; + case BASE_ITEM_BOLT: return TRUE; + case BASE_ITEM_BULLET: return TRUE; + } + return FALSE; +} + +int GetIsThrowingWeaponType(int iWeaponType) +{ + return iWeaponType == BASE_ITEM_THROWINGAXE + || iWeaponType == BASE_ITEM_DART + || iWeaponType == BASE_ITEM_SHURIKEN; +} + +int GetIsTwoHandedMeleeWeaponType(int iWeaponType) +{ + switch(iWeaponType) + { + case BASE_ITEM_GREATAXE: return TRUE; + case BASE_ITEM_GREATSWORD: return TRUE; + case BASE_ITEM_HALBERD: return TRUE; + case BASE_ITEM_SHORTSPEAR: return TRUE; + case BASE_ITEM_HEAVYFLAIL: return TRUE; + case BASE_ITEM_SCYTHE: return TRUE; + case BASE_ITEM_QUARTERSTAFF: return TRUE; + case BASE_ITEM_MAGICSTAFF: return TRUE; + case BASE_ITEM_ELVEN_COURTBLADE: return TRUE; + case BASE_ITEM_MAUL: return TRUE; + case BASE_ITEM_FALCHION: return TRUE; + } + return FALSE; +} + +int GetIsTwoHandedMeleeWeapon(object oWeap) +{ + return GetIsTwoHandedMeleeWeaponType(GetBaseItemType(oWeap)); +} + +int GetIsCreatureWeaponType(int iWeaponType) +{ +// any of the three creature weapon types that produce bludgeoning, piercing or slashing damage + return ( iWeaponType == BASE_ITEM_CBLUDGWEAPON + || iWeaponType == BASE_ITEM_CPIERCWEAPON + || iWeaponType == BASE_ITEM_CSLASHWEAPON + || iWeaponType == BASE_ITEM_CSLSHPRCWEAP + ); +} + +int GetIsCreatureWeapon(object oWeap) +{ + return GetIsCreatureWeaponType(GetBaseItemType(oWeap)); +} + +int GetIsNaturalWeaponType(int iWeaponType) +{ +// a natural weapon is either a creature weapon, or an unarmed weapon (BASE_ITEM_INVALID) or a glove (for unarmed monks) + + return ( iWeaponType == BASE_ITEM_INVALID + || iWeaponType == BASE_ITEM_GLOVES + || GetIsCreatureWeaponType(iWeaponType) + ); +} + +int GetIsNaturalWeapon(object oWeap) +{ + return GetIsNaturalWeaponType(GetBaseItemType(oWeap)); +} + +int GetIsSimpleWeaponType(int iWeaponType) +{ + switch (iWeaponType) + { + case BASE_ITEM_MORNINGSTAR: return 1; + case BASE_ITEM_QUARTERSTAFF: return 1; + case BASE_ITEM_MAGICSTAFF: return 1; + case BASE_ITEM_SHORTSPEAR: return 1; + case BASE_ITEM_HEAVYCROSSBOW: return 1; + case BASE_ITEM_INVALID: return 1; + case BASE_ITEM_CBLUDGWEAPON: return 1; + case BASE_ITEM_CPIERCWEAPON: return 1; + case BASE_ITEM_CSLASHWEAPON: return 1; + case BASE_ITEM_CSLSHPRCWEAP: return 1; + case BASE_ITEM_GLOVES: return 1; + case BASE_ITEM_BRACER: return 1; + + case BASE_ITEM_CLUB: return 2; + case BASE_ITEM_DAGGER: return 2; + case BASE_ITEM_LIGHTMACE: return 2; + case BASE_ITEM_SICKLE: return 2; + case BASE_ITEM_SLING: return 2; + case BASE_ITEM_DART: return 2; + case BASE_ITEM_LIGHTCROSSBOW: return 2; + } + + return 0; +} + +int GetIsSimpleWeapon(object oWeap) +{ + return GetIsSimpleWeaponType(GetBaseItemType(oWeap)); +} + +int GetIsMonkWeaponTypeOrUnarmed(int iWeaponType) +// returns TRUE if nothing or a kama in the right hand +{ + return ( iWeaponType == BASE_ITEM_INVALID + || iWeaponType == BASE_ITEM_KAMA + || iWeaponType == BASE_ITEM_SAI + || iWeaponType == BASE_ITEM_TORCH + || iWeaponType == BASE_ITEM_SHURIKEN + || iWeaponType == BASE_ITEM_NUNCHAKU + ); +} + +int GetIsMonkWeaponOrUnarmed(object oWeap) +// returns TRUE if nothing or a kama in the right hand +{ + return GetIsMonkWeaponTypeOrUnarmed(GetBaseItemType(oWeap)); +} + +// this function will return true on *any item* that is not invalid, shield or torch +int GetIsOffhandWeaponType(int iWeaponType) +// implicitly assumes, that iWeaponType is the base item type of the object held in the left hand. +// This can only be a weapon, a shield, or a torch (or nothing) +// returns TRUE; unless there is nothing in the left hand or a shield or a torch +// also works if we pass a double-sided weapon to this function +// note that we do not check for ranged weapons or two-handers or whether the base item is a weapon at all. +{ + return ( iWeaponType != BASE_ITEM_INVALID + && iWeaponType != BASE_ITEM_LARGESHIELD + && iWeaponType != BASE_ITEM_SMALLSHIELD + && iWeaponType != BASE_ITEM_TOWERSHIELD + && iWeaponType != BASE_ITEM_TORCH + ); +} + +// returns TRUE; unless the oWeapL is an invalid object, a shield or a torch +int GetIsOffhandWeapon(object oWeapL) +// implicitly assumes, that oWeapL is the object held in the left hand. This can only be a weapon, a shield, or a torch +{ + return GetIsOffhandWeaponType(GetBaseItemType(oWeapL)); +} + +// returns TRUE for a double sided weapon type +int GetIsDoubleSidedWeaponType(int iWeaponType) +{ + return ( iWeaponType == BASE_ITEM_DIREMACE + || iWeaponType == BASE_ITEM_DOUBLEAXE + || iWeaponType == BASE_ITEM_TWOBLADEDSWORD + ); +} + +// returns TRUE for a double sided weapon +int GetIsDoubleSidedWeapon(object oWeap) +{ + return GetIsDoubleSidedWeaponType(GetBaseItemType(oWeap)); +} + +// similar to GetFeatByWeaponType(), but should be much faster, because it only loops once over the weapon types and returns all feats relevant for the weapon in a struct +struct WeaponFeat GetAllFeatsOfWeaponType(int iWeaponType) +{ + struct WeaponFeat sFeat = InitWeaponFeat(-1); + + switch(iWeaponType) + { + case BASE_ITEM_CBLUDGWEAPON: + case BASE_ITEM_CPIERCWEAPON: + case BASE_ITEM_CSLASHWEAPON: + case BASE_ITEM_CSLSHPRCWEAP: + case BASE_ITEM_INVALID: { + sFeat.Focus = FEAT_WEAPON_FOCUS_UNARMED_STRIKE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_UNARMED_STRIKE; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_UNARMED; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_UNARMED; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_UNARMED_STRIKE; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_UNARMED; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_UNARMED; + sFeat.WeaponOfChoice = -1; + sFeat.SanctifyMartialStrike = -1; + sFeat.VileMartialStrike = -1; + break; + } + case BASE_ITEM_BASTARDSWORD: { + sFeat.Focus = FEAT_WEAPON_FOCUS_BASTARD_SWORD; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_BASTARD_SWORD; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_BASTARDSWORD; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_BASTARDSWORD; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_BASTARD_SWORD; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_BASTARDSWORD; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_BASTARDSWORD; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_BASTARDSWORD; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_BASTARDSWORD; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_BASTARDSWORD; + break; + } + case BASE_ITEM_BATTLEAXE: { + sFeat.Focus = FEAT_WEAPON_FOCUS_BATTLE_AXE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_BATTLE_AXE; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_BATTLEAXE; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_BATTLEAXE; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_BATTLE_AXE; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_BATTLEAXE; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_BATTLEAXE; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_BATTLEAXE; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_BATTLEAXE; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_BATTLEAXE; + break; + } + case BASE_ITEM_CLUB: { + sFeat.Focus = FEAT_WEAPON_FOCUS_CLUB; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_CLUB; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_CLUB; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_CLUB; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_CLUB; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_CLUB; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_CLUB; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_CLUB; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_CLUB; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_CLUB; + break; + } + case BASE_ITEM_DAGGER: { + sFeat.Focus = FEAT_WEAPON_FOCUS_DAGGER; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_DAGGER; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_DAGGER; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_DAGGER; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_DAGGER; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_DAGGER; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_DAGGER; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_DAGGER; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_DAGGER; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_DAGGER; + break; + } + case BASE_ITEM_DART: { + sFeat.Focus = FEAT_WEAPON_FOCUS_DART; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_DART; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_DART; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_DART; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_DART; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_DART; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_DART; + sFeat.WeaponOfChoice = -1; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_DART; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_DART; + break; + } + case BASE_ITEM_DIREMACE: { + sFeat.Focus = FEAT_WEAPON_FOCUS_DIRE_MACE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_DIRE_MACE; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_DIREMACE; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_DIREMACE; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_DIRE_MACE; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_DIREMACE; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_DIREMACE; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_DIREMACE; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_DIREMACE; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_DIREMACE; + break; + } + case BASE_ITEM_DOUBLEAXE: { + sFeat.Focus = FEAT_WEAPON_FOCUS_DOUBLE_AXE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_DOUBLE_AXE; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_DOUBLEAXE; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_DOUBLEAXE; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_DOUBLE_AXE; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_DOUBLEAXE; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_DOUBLEAXE; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_DOUBLEAXE; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_DOUBLEAXE; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_DOUBLEAXE; + break; + } + case BASE_ITEM_DWARVENWARAXE: { + sFeat.Focus = FEAT_WEAPON_FOCUS_DWAXE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_DWAXE; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_DWAXE; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_DWAXE; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_DWAXE; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_DWAXE; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_DWAXE; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_DWAXE; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_DWAXE; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_DWAXE; + break; + } + case BASE_ITEM_GREATAXE: { + sFeat.Focus = FEAT_WEAPON_FOCUS_GREAT_AXE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_GREAT_AXE; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_GREATAXE; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_GREATAXE; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_GREAT_AXE; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_GREATAXE; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_GREATAXE; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_GREATAXE; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_GREATAXE; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_GREATAXE; + break; + } + case BASE_ITEM_GREATSWORD: { + sFeat.Focus = FEAT_WEAPON_FOCUS_GREAT_SWORD; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_GREAT_SWORD; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_GREATSWORD; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_GREATSWORD; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_GREAT_SWORD; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_GREATSWORD; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_GREATSWORD; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_GREATSWORD; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_GREATSWORD; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_GREATSWORD; + break; + } + case BASE_ITEM_HALBERD: { + sFeat.Focus = FEAT_WEAPON_FOCUS_HALBERD; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_HALBERD; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_HALBERD; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_HALBERD; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_HALBERD; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_HALBERD; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_HALBERD; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_HALBERD; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_HALBERD; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_HALBERD; + break; + } + case BASE_ITEM_HANDAXE: { + sFeat.Focus = FEAT_WEAPON_FOCUS_HAND_AXE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_HAND_AXE; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_HANDAXE; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_HANDAXE; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_HAND_AXE; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_HANDAXE; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_HANDAXE; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_HANDAXE; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_HANDAXE; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_HANDAXE; + break; + } + case BASE_ITEM_HEAVYCROSSBOW: { + sFeat.Focus = FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_HEAVY_CROSSBOW; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_HEAVYCROSSBOW; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVYCROSSBOW; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_HEAVY_CROSSBOW; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVYCROSSBOW; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_HEAVYCROSSBOW; + sFeat.WeaponOfChoice = -1; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_HEAVYCROSSBOW; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_HEAVYCROSSBOW; + break; + } + case BASE_ITEM_HEAVYFLAIL: { + sFeat.Focus = FEAT_WEAPON_FOCUS_HEAVY_FLAIL; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_HEAVY_FLAIL; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_HEAVYFLAIL; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVYFLAIL; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_HEAVY_FLAIL; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVYFLAIL; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_HEAVYFLAIL; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_HEAVYFLAIL; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_HEAVYFLAIL; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_HEAVYFLAIL; + break; + } + case BASE_ITEM_KAMA: { + sFeat.Focus = FEAT_WEAPON_FOCUS_KAMA; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_KAMA; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_KAMA; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_KAMA; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_KAMA; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_KAMA; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_KAMA; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_KAMA; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_KAMA; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_KAMA; + break; + } + case BASE_ITEM_KATANA: { + sFeat.Focus = FEAT_WEAPON_FOCUS_KATANA; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_KATANA; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_KATANA; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_KATANA; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_KATANA; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_KATANA; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_KATANA; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_KATANA; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_KATANA; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_KATANA; + break; + } + case BASE_ITEM_KUKRI: { + sFeat.Focus = FEAT_WEAPON_FOCUS_KUKRI; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_KUKRI; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_KUKRI; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_KUKRI; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_KUKRI; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_KUKRI; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_KUKRI; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_KUKRI; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_KUKRI; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_KUKRI; + break; + } + case BASE_ITEM_LIGHTCROSSBOW: { + sFeat.Focus = FEAT_WEAPON_FOCUS_LIGHT_CROSSBOW; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_LIGHT_CROSSBOW; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_LIGHTCROSSBOW; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTCROSSBOW; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_LIGHT_CROSSBOW; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTCROSSBOW; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTCROSSBOW; + sFeat.WeaponOfChoice = -1; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_LIGHTCROSSBOW; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_LIGHTCROSSBOW; + break; + } + case BASE_ITEM_LIGHTFLAIL: { + sFeat.Focus = FEAT_WEAPON_FOCUS_LIGHT_FLAIL; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_LIGHT_FLAIL; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_LIGHTFLAIL; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTFLAIL; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_LIGHT_FLAIL; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTFLAIL; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTFLAIL; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_LIGHTFLAIL; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_LIGHTFLAIL; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_LIGHTFLAIL; + break; + } + case BASE_ITEM_LIGHTHAMMER: { + sFeat.Focus = FEAT_WEAPON_FOCUS_LIGHT_HAMMER; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_LIGHT_HAMMER; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_LIGHTHAMMER; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTHAMMER; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_LIGHT_HAMMER; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTHAMMER; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTHAMMER; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_LIGHTHAMMER; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_LIGHTHAMMER; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_LIGHTHAMMER; + break; + } + case BASE_ITEM_LIGHTMACE: { + sFeat.Focus = FEAT_WEAPON_FOCUS_LIGHT_MACE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_LIGHT_MACE; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_LIGHTMACE; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTMACE; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_LIGHT_MACE; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTMACE; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTMACE; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_LIGHTMACE; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_LIGHTMACE; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_LIGHTMACE; + break; + } + case BASE_ITEM_LONGBOW: { + sFeat.Focus = FEAT_WEAPON_FOCUS_LONGBOW; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_LONGBOW; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_LONGBOW; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_LONGBOW; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_LONGBOW; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_LONGBOW; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_LONGBOW; + sFeat.WeaponOfChoice = -1; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_LONGBOW; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_LONGBOW; + break; + } + case BASE_ITEM_LONGSWORD: { + sFeat.Focus = FEAT_WEAPON_FOCUS_LONG_SWORD; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_LONG_SWORD; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_LONGSWORD; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_LONG_SWORD; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_LONGSWORD; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_LONGSWORD; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_LONGSWORD; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_LONGSWORD; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_LONGSWORD; + break; + } + case BASE_ITEM_MORNINGSTAR: { + sFeat.Focus = FEAT_WEAPON_FOCUS_MORNING_STAR; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_MORNING_STAR; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_MORNINGSTAR; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_MORNINGSTAR; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_MORNING_STAR; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_MORNINGSTAR; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_MORNINGSTAR; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_MORNINGSTAR; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_MORNINGSTAR; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_MORNINGSTAR; + break; + } + case BASE_ITEM_QUARTERSTAFF: { + sFeat.Focus = FEAT_WEAPON_FOCUS_STAFF; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_STAFF; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_QUARTERSTAFF; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_QUARTERSTAFF; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_STAFF; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_QUARTERSTAFF; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_QUARTERSTAFF; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_QUARTERSTAFF; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_QUARTERSTAFF; + break; + } + case BASE_ITEM_MAGICSTAFF: { + sFeat.Focus = FEAT_WEAPON_FOCUS_STAFF; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_STAFF; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_QUARTERSTAFF; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_QUARTERSTAFF; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_STAFF; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_QUARTERSTAFF; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_QUARTERSTAFF; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_QUARTERSTAFF; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_QUARTERSTAFF; + break; + } + case BASE_ITEM_RAPIER: { + sFeat.Focus = FEAT_WEAPON_FOCUS_RAPIER; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_RAPIER; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_RAPIER; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_RAPIER; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_RAPIER; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_RAPIER; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_RAPIER; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_RAPIER; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_RAPIER; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_RAPIER; + break; + } + case BASE_ITEM_SCIMITAR: { + sFeat.Focus = FEAT_WEAPON_FOCUS_SCIMITAR; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_SCIMITAR; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_SCIMITAR; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_SCIMITAR; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_SCIMITAR; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_SCIMITAR; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_SCIMITAR; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_SCIMITAR; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_SCIMITAR; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_SCIMITAR; + break; + } + case BASE_ITEM_SCYTHE: { + sFeat.Focus = FEAT_WEAPON_FOCUS_SCYTHE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_SCYTHE; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_SCYTHE; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_SCYTHE; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_SCYTHE; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_SCYTHE; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_SCYTHE; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_SCYTHE; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_SCYTHE; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_SCYTHE; + break; + } + case BASE_ITEM_SHORTBOW: { + sFeat.Focus = FEAT_WEAPON_FOCUS_SHORTBOW; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_SHORTBOW; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_SHORTBOW; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTBOW; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_SHORTBOW; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTBOW; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_SHORTBOW; + sFeat.WeaponOfChoice = -1; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_SHORTBOW; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_SHORTBOW; + break; + } + case BASE_ITEM_SHORTSPEAR: { + sFeat.Focus = FEAT_WEAPON_FOCUS_SPEAR; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_SPEAR; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_SHORTSPEAR; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTSPEAR; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_SPEAR; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTSPEAR; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_SHORTSPEAR; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_SHORTSPEAR; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_SHORTSPEAR; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_SHORTSPEAR; + break; + } + case BASE_ITEM_SHORTSWORD: { + sFeat.Focus = FEAT_WEAPON_FOCUS_SHORT_SWORD; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_SHORT_SWORD; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_SHORTSWORD; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTSWORD; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_SHORT_SWORD; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTSWORD; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_SHORTSWORD; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_SHORTSWORD; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_SHORTSWORD; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_SHORTSWORD; + break; + } + case BASE_ITEM_SHURIKEN: { + sFeat.Focus = FEAT_WEAPON_FOCUS_SHURIKEN; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_SHURIKEN; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_SHURIKEN; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_SHURIKEN; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_SHURIKEN; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_SHURIKEN; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_SHURIKEN; + sFeat.WeaponOfChoice = -1; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_SHURIKEN; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_SHURIKEN; + break; + } + case BASE_ITEM_SICKLE: { + sFeat.Focus = FEAT_WEAPON_FOCUS_SICKLE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_SICKLE; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_SICKLE; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_SICKLE; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_SICKLE; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_SICKLE; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_SICKLE; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_SICKLE; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_SICKLE; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_SICKLE; + break; + } + case BASE_ITEM_SLING: { + sFeat.Focus = FEAT_WEAPON_FOCUS_SLING; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_SLING; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_SLING; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_SLING; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_SLING; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_SLING; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_SLING; + sFeat.WeaponOfChoice = -1; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_SLING; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_SLING; + break; + } + case BASE_ITEM_THROWINGAXE: { + sFeat.Focus = FEAT_WEAPON_FOCUS_THROWING_AXE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_THROWING_AXE; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_THROWINGAXE; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_THROWINGAXE; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_THROWING_AXE; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_THROWINGAXE; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_THROWINGAXE; + sFeat.WeaponOfChoice = -1; + sFeat.SanctifyMartialStrike = -1; + sFeat.VileMartialStrike = -1; + break; + } + case BASE_ITEM_TRIDENT: { + sFeat.Focus = FEAT_WEAPON_FOCUS_TRIDENT; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_TRIDENT; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_TRIDENT; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_TRIDENT; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_TRIDENT; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_TRIDENT; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_TRIDENT; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_TRIDENT; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_TRIDENT; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_TRIDENT; + break; + } + case BASE_ITEM_TWOBLADEDSWORD: { + sFeat.Focus = FEAT_WEAPON_FOCUS_TWO_BLADED_SWORD; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_TWO_BLADED_SWORD; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_TWOBLADEDSWORD; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_TWOBLADEDSWORD; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_TWO_BLADED_SWORD; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_TWOBLADEDSWORD; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_TWOBLADEDSWORD; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_TWOBLADEDSWORD; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_TWOBLADED; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_TWOBLADED; + break; + } + case BASE_ITEM_WARHAMMER: { + sFeat.Focus = FEAT_WEAPON_FOCUS_WAR_HAMMER; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_WAR_HAMMER; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_WARHAMMER; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_WARHAMMER; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_WAR_HAMMER; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_WARHAMMER; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_WARHAMMER; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_WARHAMMER; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_WARHAMMER; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_WARHAMMER; + break; + } + case BASE_ITEM_WHIP: { + sFeat.Focus = FEAT_WEAPON_FOCUS_WHIP; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_WHIP; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_WHIP; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_WHIP; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_WHIP; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_WHIP; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_WHIP; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_WHIP; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_WHIP; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_WHIP; + break; + } + case BASE_ITEM_DOUBLE_SCIMITAR: { + sFeat.Focus = FEAT_WEAPON_FOCUS_DOUBLE_SCIMITAR; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_DBL_SCIMITAR; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_DBL_SCIMITAR; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_DBL_SCIMITAR; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_DBL_SCIMITAR; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_DBL_SCIMITAR; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_DBL_SCIMITAR; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_DBL_SCIMITAR; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_DBL_SCIMITAR; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_DBL_SCIMITAR; + break; + } + case BASE_ITEM_EAGLE_CLAW: { + sFeat.Focus = FEAT_WEAPON_FOCUS_EAGLE_CLAW; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_EAGLE_CLAW; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_EAGLE_CLAW; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_EAGLE_CLAW; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_EAGLE_CLAW; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_EAGLE_CLAW; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_EAGLE_CLAW; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_EAGLE_CLAW; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_EAGLE_CLAW; + break; + } + case BASE_ITEM_ELVEN_COURTBLADE: { + sFeat.Focus = FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_ELVEN_COURTBLADE; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_ELVEN_COURTBLADE; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_ELVEN_COURTBLADE; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_ELVEN_COURTBLADE; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_ELVEN_COURTBLADE; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_ELVEN_COURTBLADE; + break; + } + case BASE_ITEM_ELVEN_THINBLADE: { + sFeat.Focus = FEAT_WEAPON_FOCUS_ELVEN_THINBLADE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_ELVEN_THINBLADE; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_ELVEN_THINBLADE; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_THINBLADE; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_ELVEN_THINBLADE; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_ELVEN_THINBLADE; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_ELVEN_THINBLADE; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_ELVEN_THINBLADE; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_ELVEN_THINBLADE; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_ELVEN_THINBLADE; + break; + } + case BASE_ITEM_ELVEN_LIGHTBLADE: { + sFeat.Focus = FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_ELVEN_LIGHTBLADE; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_ELVEN_LIGHTBLADE; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_ELVEN_LIGHTBLADE; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_ELVEN_LIGHTBLADE; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_ELVEN_LIGHTBLADE; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_ELVEN_LIGHTBLADE; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_ELVEN_LIGHTBLADE; + break; + } + case BASE_ITEM_FALCHION: { + sFeat.Focus = FEAT_WEAPON_FOCUS_FALCHION; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_FALCHION; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_FALCHION; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_FALCHION; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_FALCHION; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_FALCHION; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_FALCHION; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_FALCHION; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_FALCHION; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_FALCHION; + break; + } + case BASE_ITEM_GOAD: { + sFeat.Focus = FEAT_WEAPON_FOCUS_GOAD; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_GOAD; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_GOAD; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_GOAD; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_GOAD; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_GOAD; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_GOAD; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_GOAD; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_GOAD; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_GOAD; + break; + } + case BASE_ITEM_HEAVY_MACE: { + sFeat.Focus = FEAT_WEAPON_FOCUS_HEAVY_MACE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_HEAVY_MACE; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_HEAVY_MACE; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_MACE; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_HEAVY_MACE; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVY_MACE; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_HEAVY_MACE; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_HEAVY_MACE; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_HEAVY_MACE; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_HEAVY_MACE; + break; + } + case BASE_ITEM_HEAVY_PICK: { + sFeat.Focus = FEAT_WEAPON_FOCUS_HEAVY_PICK; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_HEAVY_PICK; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_HEAVY_PICK; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_PICK; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_HEAVY_PICK; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVY_PICK; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_HEAVY_PICK; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_HEAVY_PICK; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_HEAVY_PICK; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_HEAVY_PICK; + break; + } + case BASE_ITEM_KATAR: { + sFeat.Focus = FEAT_WEAPON_FOCUS_LIGHT_LANCE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_KATAR; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_KATAR; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_KATAR; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_KATAR; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_KATAR; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_KATAR; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_KATAR; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_KATAR; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_KATAR; + break; + } + case BASE_ITEM_LIGHT_LANCE: { + sFeat.Focus = FEAT_WEAPON_FOCUS_LIGHT_LANCE; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_LIGHT_LANCE; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_LIGHT_LANCE; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_LANCE; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_LIGHT_LANCE; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHT_LANCE; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_LIGHT_LANCE; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_LIGHT_LANCE; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_LIGHT_LANCE; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_LIGHT_LANCE; + break; + } + case BASE_ITEM_LIGHT_PICK: { + sFeat.Focus = FEAT_WEAPON_FOCUS_LIGHT_PICK; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_LIGHT_PICK; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_LIGHT_PICK; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_PICK; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_LIGHT_PICK; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHT_PICK; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_LIGHT_PICK; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_LIGHT_PICK; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_LIGHT_PICK; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_LIGHT_PICK; + break; + } + case BASE_ITEM_MAUL: { + sFeat.Focus = FEAT_WEAPON_FOCUS_MAUL; + sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_MAUL; + sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_MAUL; + sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_MAUL; + sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_MAUL; + sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_MAUL; + sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_MAUL; + sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_MAUL; + sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_MAUL; + sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_MAUL; + break; + } + // If the feat is blank when we get here, do a lookup series + if (!sFeat.Focus) + { + sFeat.Focus = StringToInt(Get2DACache("baseitems", "WeaponFocusFeat", iWeaponType)); + sFeat.Specialization = StringToInt(Get2DACache("baseitems", "WeaponSpecializationFeat", iWeaponType));; + sFeat.EpicFocus = StringToInt(Get2DACache("baseitems", "EpicWeaponFocusFeat", iWeaponType));; + sFeat.EpicSpecialization = StringToInt(Get2DACache("baseitems", "EpicWeaponSpecializationFeat", iWeaponType));; + sFeat.ImprovedCritical = StringToInt(Get2DACache("baseitems", "WeaponImprovedCriticalFeat", iWeaponType));; + sFeat.OverwhelmingCritical = StringToInt(Get2DACache("baseitems", "EpicWeaponOverwhelmingCriticalFeat", iWeaponType));; + sFeat.DevastatingCritical = StringToInt(Get2DACache("baseitems", "EpicWeaponDevastatingCriticalFeat", iWeaponType));; + sFeat.WeaponOfChoice = StringToInt(Get2DACache("baseitems", "WeaponOfChoiceFeat", iWeaponType));; + sFeat.SanctifyMartialStrike = StringToInt(Get2DACache("baseitems", "SanctifyMartialStrike", iWeaponType));; + sFeat.VileMartialStrike = StringToInt(Get2DACache("baseitems", "VileMartialStrike", iWeaponType));; + break; + } + } + return sFeat; +} + +// returns the proper ammunition inventory slot based on iWeaponType +// if not longbow, crossbow or sling, returns right hand slot +// right hand slot is the correct slot for darts, shuriken and throwing axes +// this does not check whether the weapon type actually is a ranged type +int GetAmmunitionInventorySlotFromWeaponType(int iWeaponType) +{ + switch (iWeaponType) + { + case BASE_ITEM_LONGBOW: return INVENTORY_SLOT_ARROWS; + case BASE_ITEM_SHORTBOW: return INVENTORY_SLOT_ARROWS; + case BASE_ITEM_HEAVYCROSSBOW: return INVENTORY_SLOT_BOLTS; + case BASE_ITEM_LIGHTCROSSBOW: return INVENTORY_SLOT_BOLTS; + case BASE_ITEM_SLING: return INVENTORY_SLOT_BULLETS; +// case BASE_ITEM_DART: return INVENTORY_SLOT_RIGHTHAND; +// case BASE_ITEM_SHURIKEN: return INVENTORY_SLOT_RIGHTHAND; +// case BASE_ITEM_THROWINGAXE: return INVENTORY_SLOT_RIGHTHAND; + } + return INVENTORY_SLOT_RIGHTHAND; +} + +// for a ranged weapon type it will return the ammunition (if there is any) +// for throwing weapons the ammunition is the weapon itself, so it returns whatever oAttacker holds in his right hand +// Note that this does not check whether iWeaponType is weapon. For all non-ranged weapons (and any other types) +// it will return whatever object oAttacker holds in his right hand +object GetAmmunitionFromWeaponType(int iWeaponType, object oAttacker) +{ + return GetItemInSlot(GetAmmunitionInventorySlotFromWeaponType(iWeaponType), oAttacker); +} + +// for a ranged weapon it will return the ammunition (if there is any) +// for throwing weapons the ammunition is the weapon itself, so it returns whatever oAttacker holds in his right hand +// Note that this does not check whether oWeapon is a weapon. For all non-ranged weapons (or any other object) +// it will return whatever object oAttacker holds in his right hand +object GetAmmunitionFromWeapon(object oWeapon, object oAttacker) +{ + return GetAmmunitionFromWeaponType(GetBaseItemType(oWeapon), oAttacker); +} + +int GetWeaponCriticalRange(object oPC, object oWeap) +// for a ranged weapon we should call this *after* we have ammo equipped, because it checks the ammo for keen +// if we (re)equip the ammo later, we don't get the right keen property +{ + //no weapon, touch attacks mainly + if(!GetIsObjectValid(oWeap)) + return 20; + + int iWeaponType = GetBaseItemType(oWeap); + + // threat range of base weapon + int nThreat = StringToInt(Get2DACache("baseitems", "CritThreat", iWeaponType)); + + // find out all feat constant for this particular weapon type + struct WeaponFeat sWeaponFeat = GetAllFeatsOfWeaponType(iWeaponType); + + int bImpCrit = GetHasFeat(sWeaponFeat.ImprovedCritical, oPC); + int bKeen; + + if (GetIsRangedWeaponType(iWeaponType)) // ranged weapon, ? + { // then replace oWeap with the ammution + oWeap = GetAmmunitionFromWeaponType(iWeaponType, oPC); + } + + // check weapon (or ammo) for keen property + bKeen = GetItemHasItemProperty(oWeap, ITEM_PROPERTY_KEEN); + + // motu99: original calculation was not correct, would multiply threat range with factor of 2 for every feat + // or do PnP rules do it differently than nwn? + // also weapon master gets Ki Critical Feat at level 7, which increases the threat range by 2 + int nThreatMultiplier = 1; + if(bKeen) nThreatMultiplier++; + if(bImpCrit) nThreatMultiplier++; + + nThreat *= nThreatMultiplier; + + // motu99: instead of checking the weapon master level, we might want to check for the KiCriticalFeat + // because the PC could have been granted this feat by other means (unlikely, because we still need a WeaponOfChoice for the feat to work) + int iWeaponMasterLevel = GetLevelByClass(CLASS_TYPE_WEAPON_MASTER, oPC); + if( iWeaponMasterLevel >= WEAPON_MASTER_LEVEL_KI_CRITICAL + && GetHasFeat(sWeaponFeat.WeaponOfChoice, oPC)) + nThreat += 2; + + return (21 - nThreat); +} + +// calculates the critical multiplier of the base weapon type +int GetCriticalMultiplierOfWeaponType(int iWeaponType) +{ + // no weapon, touch attacks mainly + if (iWeaponType == BASE_ITEM_INVALID || GetIsCreatureWeaponType(iWeaponType)) + return 2; + else + return StringToInt(Get2DACache("baseitems", "CritHitMult", iWeaponType)); +} + +// includes weapon master enhancements +int GetWeaponCritcalMultiplier(object oPC, object oWeap) +{ + int iWeaponType = GetBaseItemType(oWeap); + int iCriticalMultiplier = GetCriticalMultiplierOfWeaponType(iWeaponType); + + // check for weapon master Increased Multiplier feat, gained at level 7 + // motu99: actually, we do not check for the feat, but rather for the weapon master level + //(this is faster, but problematic if other classes than WM can have this feat) + int iWeaponMasterLevel = GetLevelByClass(CLASS_TYPE_WEAPON_MASTER, oPC); + if (iWeaponMasterLevel >= WEAPON_MASTER_LEVEL_INCREASED_MULTIPLIER + && GetHasFeat(GetWeaponOfChoiceFeatOfWeaponType(iWeaponType), oPC)) + iCriticalMultiplier += 1; + + return iCriticalMultiplier; +} + + +//::////////////////////////////////////////////// +//:: Combat Information Functions +//::////////////////////////////////////////////// + +int GetMeleeAttackers15ft(object oPC = OBJECT_SELF) +// motu99: this is (and was) actually 10 feet +{ + //if (DEBUG) DoDebug("Entering GetMeleeAttackers15ft"); + object oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION,REPUTATION_TYPE_ENEMY,oPC,1,CREATURE_TYPE_IS_ALIVE,TRUE); + + if (oTarget == OBJECT_INVALID) + return FALSE; + + float fDistance = GetDistanceBetween(oPC,oTarget); + if (GetLocalInt(oPC, "DWBurningBrand")) + fDistance -= RANGE_5_FEET_IN_METERS; + if (GetLocalInt(oPC, "SDGiantsStance")) + fDistance -= RANGE_5_FEET_IN_METERS; + if (GetLocalInt(oPC, "IHDancingBladeForm")) + fDistance -= RANGE_5_FEET_IN_METERS; + + //if (DEBUG) DoDebug("Exiting GetMeleeAttackers15ft"); + return fDistance <= MELEE_RANGE_METERS; +} + +int GetIsInMeleeRange(object oDefender, object oAttacker, int bSizeAdjustment = TRUE) +{ + //if (DEBUG) DoDebug("Entering GetIsInMeleeRange"); + // Throw attack + if(GetLocalInt(oAttacker, "IHLightningThrow")) return TRUE; + + float fDistance = GetDistanceBetween(oDefender, oAttacker); + if (bSizeAdjustment) + fDistance -= GetSizeAdjustment(oDefender, oAttacker); + if (GetLocalInt(oAttacker, "DWBurningBrand")) + fDistance -= RANGE_5_FEET_IN_METERS; + if (GetLocalInt(oAttacker, "SDGiantsStance")) + fDistance -= RANGE_5_FEET_IN_METERS; + if (GetLocalInt(oAttacker, "IHDancingBladeForm")) + fDistance -= RANGE_5_FEET_IN_METERS; + + //Shadowblade Far Shadow + if(GetLocalInt(oAttacker, "PRC_SB_FARSHAD")) fDistance -= FeetToMeters(10.0); + + //Umbral Disciple Kiss of the Shadows + if(GetEssentiaInvested(oAttacker, MELD_UMBRAL_KISS)) fDistance -= FeetToMeters(5.0 * GetEssentiaInvested(oAttacker, MELD_UMBRAL_KISS)); + + /*// Charging needs a little futzing sometimes. + if (GetLocalInt(oAttacker, "PCIsCharging")) fDistance -= FeetToMeters(10.0); + + // So does Tome of Battle + if (GetLocalInt(oAttacker, "PCIsInitiating")) fDistance -= FeetToMeters(10.0); */ + + // This is an adjustment because things seem to have just a little too much error otherwise + fDistance -= RANGE_5_FEET_IN_METERS; + + //if (DEBUG) DoDebug("Exiting GetIsInMeleeRange"); + return fDistance <= MELEE_RANGE_METERS; +} + +object GetUnarmedWeapon(object oPC) +{ + // get the right creature weapon + object oWeapon = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC); + + // if they have a claw weapon of some sort + if( GetIsObjectValid(oWeapon) ) + { + // should emulate how rare a critters special attack is + // by making them random with 5:5:2 ratio + // can be tweaked though + int iRandom = d12(); + if(iRandom <= 5) + return oWeapon; + else if(iRandom <= 10) + { + object oCritterL = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC); + if (GetIsObjectValid(oCritterL)) + oWeapon = oCritterL; + } + else + { + object oCritterB = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oPC); + if (GetIsObjectValid(oCritterB)) + oWeapon = oCritterB; + } + } + else // we don't have a (right) critter weapon + { + object oGlove = GetItemInSlot(INVENTORY_SLOT_ARMS, oPC); + // motu99: this will also return bracers (don't know if we want this; if not, check here whether base item type is glove) + if (GetIsObjectValid(oGlove)) + oWeapon = oGlove; + else + oWeapon = OBJECT_INVALID; + } + return oWeapon; +} + +// returns TRUE if nothing in the right hand +int GetIsUnarmed(object oPC) +{ + return GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC) == OBJECT_INVALID; +} + +// returns true if we have something in the left creature weapon slot, or if we have monk levels +// [unarmed PrC classes with a creature weapon apparently have their creature weapon in the left creature slot] +int GetIsUnarmedFighter(object oPC) +{ + return GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC) != OBJECT_INVALID + || GetLevelByClass(CLASS_TYPE_MONK, oPC); +} + +// motu99: includes PrC classes with an unarmed base attack bonus progression in the calculation +// any new PrCs that add to UBAB should be included in this function +int GetUBABLevel(object oPC) +{ + int iMonkLevel = 0; + iMonkLevel += GetLevelByClass(CLASS_TYPE_MONK, oPC); + iMonkLevel += GetLevelByClass(CLASS_TYPE_DRUNKEN_MASTER, oPC); + iMonkLevel += GetLevelByClass(CLASS_TYPE_INITIATE_DRACONIC, oPC); + iMonkLevel += GetLevelByClass(CLASS_TYPE_RED_AVENGER, oPC); + iMonkLevel += GetLevelByClass(CLASS_TYPE_SHOU, oPC); + iMonkLevel += GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oPC); + iMonkLevel += GetLevelByClass(CLASS_TYPE_SACREDFIST, oPC); + iMonkLevel += GetLevelByClass(CLASS_TYPE_HENSHIN_MYSTIC, oPC); + iMonkLevel += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oPC); + iMonkLevel += GetLevelByClass(CLASS_TYPE_SHADOW_SUN_NINJA, oPC); + return iMonkLevel; +} + +// only returns true, if oPC has at least one monk level and if (s)he is unarmed or has a kama equipped +int GetHasMonkWeaponEquipped(object oPC) +{ + if (GetLevelByClass(CLASS_TYPE_MONK, oPC)) + { + return GetIsMonkWeaponOrUnarmed(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)); + } + return FALSE; +} + +// we use this in GetMainHandAttacks in order to find out, whether cross-bow special +// rules override the usual # of main hand attacks (Cross-bows without the rapid reload feat +// only get one attack per round, regardless of the # of "normal" mainhand attacks) +int GetHasCrossBowEquippedWithoutRapidReload(object oPC) +{ + object oWeapR = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + if (oWeapR != OBJECT_INVALID) + { + int iWeaponType = GetBaseItemType(oWeapR); + if( (iWeaponType == BASE_ITEM_HEAVYCROSSBOW || iWeaponType == BASE_ITEM_LIGHTCROSSBOW) + && !GetHasFeat(FEAT_RAPID_RELOAD, oPC) ) + { + return TRUE; + } + } + return FALSE; +} + +// only does a full calculation if the local int "OverrideBaseAttackCount" is zero or does not exist, +// otherwise just returns the local int "OverrideBaseAttackCount" (unless we wield a crossbow, see below) +// note that GetMainHandAttacks() does not set the local int "OverrideBaseAttackCount", you have to do this yourself +// calculation only calculates "normal" main hand attacks; e.g. it does not include increased attacks from spells (Tensers, Divine Power) +// calculation does not include bonus attacks (from Haste, combat modes etc.) +// the number of "normal" attacks might be increased due to special attack boni to BAB from spells (such as Tenser's or Divine Power) +// in order to calculate the attack # with such boni, call the function with a non-zero value of iBABBonus (negative values are possible) +// the minimum # attacks returned is always 1; the maximum number returned is 5 (for armed and unarmed combat) +// if the PRC_BIOWARE_MONK_ATTACKS switch is on, the maximum number returned is 6 (only for monk attacks) +int GetMainHandAttacks(object oPC, int iBABBonus = 0, int bIgnoreCrossBow = FALSE) +{ + // crossbows special rules + // if they wield a crossbow and don't have rapid reload, then only 1 attack per round + if (!bIgnoreCrossBow && GetHasCrossBowEquippedWithoutRapidReload(oPC)) + return 1; + + int iBAB = GetLocalInt(oPC, "OverrideBaseAttackCount"); + if(iBAB) return iBAB; + + if (DEBUG) if(iBABBonus > 20 || iBABBonus < 0) DoDebug("WARNING: GetMainHandAttacks is called with an unusual BAB-bonus = "+IntToString(iBABBonus)); + + int iCharLevel = GetHitDice(oPC); + iBAB = GetBaseAttackBonus(oPC) + iBABBonus; + + bUseMonkAttackMod = FALSE; + int iNumAttacks = GetAttacks(iBAB, iCharLevel); + if (iNumAttacks > 5) iNumAttacks = 5; + + if(GetHasMonkWeaponEquipped(oPC)) + { + int iNumMonkAttacks; + + // motu99: moved up here, because we want monk progression whenever we have a kama equipped or are unarmed, + // it is for the PC to decide, whether he will use the unarmed progression. If unarmed combat gives him less attacks + // than armed combat, its his decision. + bUseMonkAttackMod = TRUE; + + if(GetPRCSwitch(PRC_BIOWARE_MONK_ATTACKS)) // motu99: added switch to reenable bioware's (strange) monk UBAB progression + { + iNumMonkAttacks = GetMonkAttacks(iBAB, iCharLevel); + } + else + { + //note this is the correct PnP monk 3.0 progression + //not biowares progression including other classes + // add in unarmed PrC's so that they stack for number of unarmed attacks + iNumMonkAttacks = GetPnPMonkAttacks(GetUBABLevel(oPC)); + } + + // only use number of attacks from unarmed (UBAB) progression, if the number + // of attacks from UBAB is higher than number of attacks from "normal" BAB + // motu99: Why do we try to "correct" the decision of the PC here? + if(iNumMonkAttacks > iNumAttacks) + { + iNumAttacks = iNumMonkAttacks; + } + } + if (GetLocalInt(oPC, "CombatMoveAttack")) iNumAttacks -= 1; + if (iNumAttacks <= 0) iNumAttacks = 1; + return iNumAttacks; +} + +// iMainHandAttacks (second parameter) can be given to speed up the calculation of main hand attacks +// or to override any value that would otherwise be calculated by the function GetMainHandAttacks() +// the number of main hand attacks is always calculated in this function, because we need it to ensure +// that the number of offhand attacks never exceed the number of main hand attacks +// if iMainHandAttacks == 0, GetOffHandAttacks() calculates the number of main hand attacks (without taking any bonus attacks into account) +// if iMainHandAttacks != 0, GetOffHandAttacks() just assumes that this is the number if main hand attacks (without checking) +// function only returns a non-zero value, if we are using an offhand or a double sided weapon +int GetOffHandAttacks(object oPC, int iMainHandAttacks = 0) +{ + object oWeapR = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + + // no offhand attacks if unarmed + if (oWeapR == OBJECT_INVALID) + return 0; + + int iWeaponTypeR = GetBaseItemType(oWeapR); + int iWeaponTypeL; + int bHasDoubleSidedWeapon = FALSE; + + int iOffHandAttacks = 0; + + // motu99: added double sided weapons + if(GetIsDoubleSidedWeaponType(iWeaponTypeR)) + { +//DoDebug("GetOffHandAttacks: found double sided weapon"); + iWeaponTypeL = iWeaponTypeR; + bHasDoubleSidedWeapon = TRUE; + } + else + iWeaponTypeL = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)); + + if(bHasDoubleSidedWeapon || GetIsOffhandWeaponType(iWeaponTypeL)) + { + // they are wielding two weapons (or double sided weapon) so at least 1 off-hand attack + iOffHandAttacks = 1; + + if (!iMainHandAttacks) + iMainHandAttacks = GetMainHandAttacks(oPC); // these are main hand attacks without bonus attacks + + int bHasPTWF = GetHasFeat(FEAT_PERFECT_TWO_WEAPON_FIGHTING, oPC); + + if(bHasPTWF) {iOffHandAttacks = iMainHandAttacks;} + else if(GetHasFeat(FEAT_SUPREME_TWO_WEAPON_FIGHTING, oPC) ) iOffHandAttacks = 4; + else if(GetHasFeat(FEAT_GREATER_TWO_WEAPON_FIGHTING, oPC) ) iOffHandAttacks = 3; + else if(GetHasFeat(FEAT_IMPROVED_TWO_WEAPON_FIGHTING, oPC) ) iOffHandAttacks = 2; + + // ranger who wears medium or heavy armor looses improved two weapon fighting (and any higher feats) + int iRangerLevel = GetLevelByClass(CLASS_TYPE_RANGER, oPC); + if (iRangerLevel) + { + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC); + int iArmorType = GetArmorType(oArmor); + if(iArmorType == ARMOR_TYPE_MEDIUM || iArmorType == ARMOR_TYPE_HEAVY) + iOffHandAttacks =1; +/* + else if (iOffHandAttacks <=1 && iRangerLevel >= RANGER_LEVEL_ITWF) // code only needed, if ITWF feat of ranger does not show up in GetHasFeat() + iOffHandAttacks = 2; +*/ + } + + // a tempest using double sided weapons or wearing medium or heavy armor looses GTWF and STWF feats + int iTempestLevel = GetLevelByClass(CLASS_TYPE_TEMPEST, oPC); + if(iTempestLevel) + { + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC); + int iArmorType = GetArmorType(oArmor); + if(bHasDoubleSidedWeapon || iArmorType == ARMOR_TYPE_MEDIUM || iArmorType == ARMOR_TYPE_HEAVY) + iOffHandAttacks = 1; +/* + else if (!bHasPTWF) // this code is only needed, if the STWF, GTWF and ITWF feats do not show up in GetHasFeat() + { + if(iTempestLevel >= TEMPEST_LEVEL_STWF) + iOffHandAttacks = 4; + else if (iTempestLevel >= TEMPEST_LEVEL_GTWF && iOffHandAttacks < 3) + iOffHandAttacks = 3; + else if (iTempestLevel >= TEMPEST_LEVEL_ITWF && iOffHandAttacks < 2) + iOffHandAttacks = 2; + } +*/ + } + + +// motu99: not sure if there a rule that offhand attacks must always be less or equal main hand attacks (+Bonus attacks)? +// motu99: commented out for testing (remove comments after testing!) +/* + if (!iMainHandAttacks) + iMainHandAttacks = GetMainHandAttacks(oPC); // these are main hand attacks without bonus attacks + + if(iOffHandAttacks > iMainHandAttacks) + { + iOffHandAttacks = iMainHandAttacks; + } +*/ + // prevents dual kama monk abuse + // motu99: added switch to reenable bioware behaviour + if(iWeaponTypeL == BASE_ITEM_KAMA && !GetPRCSwitch(PRC_BIOWARE_MONK_ATTACKS)) + iOffHandAttacks = 0; + + } + if (DEBUG) DoDebug("GetOffHandAttacks: iOffHandAttacks = " + IntToString(iOffHandAttacks)); + return iOffHandAttacks; +} + +// this returns a number between 0 and 8 signalling a specific alignment +int GetItemPropAlignment(int iGoodEvil,int iLawChaos) +{ + int Align; + + switch(iGoodEvil) + { + case ALIGNMENT_GOOD: + Align = 0; + break; + case ALIGNMENT_NEUTRAL: + Align = 1; + break; + case ALIGNMENT_EVIL: + Align = 2; + break; + } + switch(iLawChaos) + { + case ALIGNMENT_LAWFUL: + Align += 0; + break; + case ALIGNMENT_NEUTRAL: + Align += 3; + break; + case ALIGNMENT_CHAOTIC: + Align += 6; + break; + } + return Align; +} + +//::////////////////////////////////////////////// +//:: Attack Bonus Functions +//::////////////////////////////////////////////// + +/** @todo + * This needs fixing. Possible fixes: + * 1) Wait until Primo gets the effects code done + * 2) Add all missing stuff here (motu99: addedmost missing things) + * 3) Make all spells that apply AB bonus or penalty update a local variable that tracks the total of such effects. + * Have dispellation monitors to decrement the variable by same when the spell ends + */ + + +// motu99: functions used for debugging +// might move these to "inc_utility" or delete +// there are better functions (using 2da lookups) in inc_utility +// +// string GetIPDamageBonusConstantName(int iDamageType) +// { + // switch(iDamageType) + // { + // case IP_CONST_DAMAGEBONUS_1: return "IP_CONST_DAMAGEBONUS_1"; + // case IP_CONST_DAMAGEBONUS_2: return "IP_CONST_DAMAGEBONUS_2"; + // case IP_CONST_DAMAGEBONUS_3: return "IP_CONST_DAMAGEBONUS_3"; + // case IP_CONST_DAMAGEBONUS_4: return "IP_CONST_DAMAGEBONUS_4"; + // case IP_CONST_DAMAGEBONUS_5: return "IP_CONST_DAMAGEBONUS_5"; + // case IP_CONST_DAMAGEBONUS_6: return "IP_CONST_DAMAGEBONUS_6"; + // case IP_CONST_DAMAGEBONUS_7: return "IP_CONST_DAMAGEBONUS_7"; + // case IP_CONST_DAMAGEBONUS_8: return "IP_CONST_DAMAGEBONUS_8"; + // case IP_CONST_DAMAGEBONUS_9: return "IP_CONST_DAMAGEBONUS_9"; + // case IP_CONST_DAMAGEBONUS_10: return "IP_CONST_DAMAGEBONUS_10"; + // case IP_CONST_DAMAGEBONUS_11: return "IP_CONST_DAMAGEBONUS_11"; + // case IP_CONST_DAMAGEBONUS_12: return "IP_CONST_DAMAGEBONUS_12"; + // case IP_CONST_DAMAGEBONUS_13: return "IP_CONST_DAMAGEBONUS_13"; + // case IP_CONST_DAMAGEBONUS_14: return "IP_CONST_DAMAGEBONUS_14"; + // case IP_CONST_DAMAGEBONUS_15: return "IP_CONST_DAMAGEBONUS_15"; + // case IP_CONST_DAMAGEBONUS_16: return "IP_CONST_DAMAGEBONUS_16"; + // case IP_CONST_DAMAGEBONUS_17: return "IP_CONST_DAMAGEBONUS_17"; + // case IP_CONST_DAMAGEBONUS_18: return "IP_CONST_DAMAGEBONUS_18"; + // case IP_CONST_DAMAGEBONUS_19: return "IP_CONST_DAMAGEBONUS_19"; + // case IP_CONST_DAMAGEBONUS_20: return "IP_CONST_DAMAGEBONUS_20"; + // case IP_CONST_DAMAGEBONUS_1d4: return "IP_CONST_DAMAGEBONUS_1d4"; + // case IP_CONST_DAMAGEBONUS_1d6: return "IP_CONST_DAMAGEBONUS_1d6"; + // case IP_CONST_DAMAGEBONUS_1d8: return "IP_CONST_DAMAGEBONUS_1d8"; + // case IP_CONST_DAMAGEBONUS_1d10: return "IP_CONST_DAMAGEBONUS_1d10"; + // case IP_CONST_DAMAGEBONUS_1d12: return "IP_CONST_DAMAGEBONUS_1d12"; + // case IP_CONST_DAMAGEBONUS_2d10: return "IP_CONST_DAMAGEBONUS_2d10"; + // case IP_CONST_DAMAGEBONUS_2d12: return "IP_CONST_DAMAGEBONUS_2d12"; + // case IP_CONST_DAMAGEBONUS_2d4: return "IP_CONST_DAMAGEBONUS_2d4"; + // case IP_CONST_DAMAGEBONUS_2d6: return "IP_CONST_DAMAGEBONUS_2d6"; + // case IP_CONST_DAMAGEBONUS_2d8: return "IP_CONST_DAMAGEBONUS_2d8"; + // } + // return "unknown"; +// } + +// string GetDamageBonusConstantName(int iDamageType) +// { + // switch(iDamageType) + // { + // case DAMAGE_BONUS_1: return "DAMAGE_BONUS_1"; + // case DAMAGE_BONUS_2: return "DAMAGE_BONUS_2"; + // case DAMAGE_BONUS_3: return "DAMAGE_BONUS_3"; + // case DAMAGE_BONUS_4: return "DAMAGE_BONUS_4"; + // case DAMAGE_BONUS_5: return "DAMAGE_BONUS_5"; + // case DAMAGE_BONUS_6: return "DAMAGE_BONUS_6"; + // case DAMAGE_BONUS_7: return "DAMAGE_BONUS_7"; + // case DAMAGE_BONUS_8: return "DAMAGE_BONUS_8"; + // case DAMAGE_BONUS_9: return "DAMAGE_BONUS_9"; + // case DAMAGE_BONUS_10: return "DAMAGE_BONUS_10"; + // case DAMAGE_BONUS_11: return "DAMAGE_BONUS_11"; + // case DAMAGE_BONUS_12: return "DAMAGE_BONUS_12"; + // case DAMAGE_BONUS_13: return "DAMAGE_BONUS_13"; + // case DAMAGE_BONUS_14: return "DAMAGE_BONUS_14"; + // case DAMAGE_BONUS_15: return "DAMAGE_BONUS_15"; + // case DAMAGE_BONUS_16: return "DAMAGE_BONUS_16"; + // case DAMAGE_BONUS_17: return "DAMAGE_BONUS_17"; + // case DAMAGE_BONUS_18: return "DAMAGE_BONUS_18"; + // case DAMAGE_BONUS_19: return "DAMAGE_BONUS_19"; + // case DAMAGE_BONUS_20: return "DAMAGE_BONUS_20"; + // case DAMAGE_BONUS_1d10: return "DAMAGE_BONUS_1d10"; + // case DAMAGE_BONUS_1d12: return "DAMAGE_BONUS_1d12"; + // case DAMAGE_BONUS_1d4: return "DAMAGE_BONUS_1d4"; + // case DAMAGE_BONUS_1d6: return "DAMAGE_BONUS_1d6"; + // case DAMAGE_BONUS_1d8: return "DAMAGE_BONUS_1d8"; + // case DAMAGE_BONUS_2d10: return "DAMAGE_BONUS_2d10"; + // case DAMAGE_BONUS_2d12: return "DAMAGE_BONUS_2d12"; + // case DAMAGE_BONUS_2d4: return "DAMAGE_BONUS_2d4"; + // case DAMAGE_BONUS_2d6: return "DAMAGE_BONUS_2d6"; + // case DAMAGE_BONUS_2d8: return "DAMAGE_BONUS_2d8"; + // } + // return "unknown"; +// } + +// string GetEffectTypeName(int iEffectType) +// { + // switch(iEffectType) + // { + // case EFFECT_TYPE_ABILITY_DECREASE: return "EFFECT_TYPE_ABILITY_DECREASE"; + // case EFFECT_TYPE_ABILITY_INCREASE: return "EFFECT_TYPE_ABILITY_INCREASE"; + // case EFFECT_TYPE_AC_DECREASE: return "EFFECT_TYPE_AC_DECREASE"; + // case EFFECT_TYPE_AC_INCREASE: return "EFFECT_TYPE_AC_INCREASE"; + // case EFFECT_TYPE_ARCANE_SPELL_FAILURE: return "EFFECT_TYPE_ARCANE_SPELL_FAILURE"; + // case EFFECT_TYPE_AREA_OF_EFFECT: return "EFFECT_TYPE_AREA_OF_EFFECT"; + // case EFFECT_TYPE_ATTACK_DECREASE: return "EFFECT_TYPE_ATTACK_DECREASE"; + // case EFFECT_TYPE_ATTACK_INCREASE: return "EFFECT_TYPE_ATTACK_INCREASE"; + // case EFFECT_TYPE_BEAM: return "EFFECT_TYPE_BEAM"; + // case EFFECT_TYPE_BLINDNESS: return "EFFECT_TYPE_BLINDNESS"; + // case EFFECT_TYPE_CHARMED: return "EFFECT_TYPE_CHARMED"; + // case EFFECT_TYPE_CONCEALMENT: return "EFFECT_TYPE_CONCEALMENT"; + // case EFFECT_TYPE_CONFUSED: return "EFFECT_TYPE_CONFUSED"; + // case EFFECT_TYPE_CURSE: return "EFFECT_TYPE_CURSE"; + // case EFFECT_TYPE_CUTSCENE_PARALYZE: return "EFFECT_TYPE_CUTSCENE_PARALYZE"; + // case EFFECT_TYPE_CUTSCENEGHOST: return "EFFECT_TYPE_CUTSCENEGHOST"; + // case EFFECT_TYPE_CUTSCENEIMMOBILIZE: return "EFFECT_TYPE_CUTSCENEIMMOBILIZE"; + // case EFFECT_TYPE_DAMAGE_DECREASE: return "EFFECT_TYPE_DAMAGE_DECREASE"; + // case EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE: return "EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE"; + // case EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE: return "EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE"; + // case EFFECT_TYPE_DAMAGE_INCREASE: return "EFFECT_TYPE_DAMAGE_INCREASE"; + // case EFFECT_TYPE_DAMAGE_REDUCTION: return "EFFECT_TYPE_DAMAGE_REDUCTION"; + // case EFFECT_TYPE_DAMAGE_RESISTANCE: return "EFFECT_TYPE_DAMAGE_RESISTANCE"; + // case EFFECT_TYPE_DARKNESS: return "EFFECT_TYPE_DARKNESS"; + // case EFFECT_TYPE_DAZED: return "EFFECT_TYPE_DAZED"; + // case EFFECT_TYPE_DEAF: return "EFFECT_TYPE_DEAF"; + // case EFFECT_TYPE_DISAPPEARAPPEAR: return "EFFECT_TYPE_DISAPPEARAPPEAR"; + // case EFFECT_TYPE_DISEASE: return "EFFECT_TYPE_DISEASE"; + // case EFFECT_TYPE_DISPELMAGICALL: return "EFFECT_TYPE_DISPELMAGICALL"; + // case EFFECT_TYPE_DISPELMAGICBEST: return "EFFECT_TYPE_DISPELMAGICBEST"; + // case EFFECT_TYPE_DOMINATED: return "EFFECT_TYPE_DOMINATED"; + // case EFFECT_TYPE_ELEMENTALSHIELD: return "EFFECT_TYPE_ELEMENTALSHIELD"; + // case EFFECT_TYPE_ENEMY_ATTACK_BONUS: return "EFFECT_TYPE_ENEMY_ATTACK_BONUS"; + // case EFFECT_TYPE_ENTANGLE: return "EFFECT_TYPE_ENTANGLE"; + // case EFFECT_TYPE_ETHEREAL: return "EFFECT_TYPE_ETHEREAL"; + // case EFFECT_TYPE_FRIGHTENED: return "EFFECT_TYPE_FRIGHTENED"; + // case EFFECT_TYPE_HASTE: return "EFFECT_TYPE_HASTE"; + // case EFFECT_TYPE_IMMUNITY: return "EFFECT_TYPE_IMMUNITY"; + // case EFFECT_TYPE_IMPROVEDINVISIBILITY: return "EFFECT_TYPE_IMPROVEDINVISIBILITY"; + // case EFFECT_TYPE_INVALIDEFFECT: return "EFFECT_TYPE_INVALIDEFFECT"; + // case EFFECT_TYPE_INVISIBILITY: return "EFFECT_TYPE_INVISIBILITY"; + // case EFFECT_TYPE_INVULNERABLE: return "EFFECT_TYPE_INVULNERABLE"; + // case EFFECT_TYPE_MISS_CHANCE: return "EFFECT_TYPE_MISS_CHANCE"; + // case EFFECT_TYPE_MOVEMENT_SPEED_DECREASE: return "EFFECT_TYPE_MOVEMENT_SPEED_DECREASE"; + // case EFFECT_TYPE_MOVEMENT_SPEED_INCREASE: return "EFFECT_TYPE_MOVEMENT_SPEED_INCREASE"; + // case EFFECT_TYPE_NEGATIVELEVEL: return "EFFECT_TYPE_NEGATIVELEVEL"; + // case EFFECT_TYPE_PARALYZE: return "EFFECT_TYPE_PARALYZE"; + // case EFFECT_TYPE_PETRIFY: return "EFFECT_TYPE_PETRIFY"; + // case EFFECT_TYPE_POISON: return "EFFECT_TYPE_POISON"; + // case EFFECT_TYPE_POLYMORPH: return "EFFECT_TYPE_POLYMORPH"; + // case EFFECT_TYPE_REGENERATE: return "EFFECT_TYPE_REGENERATE"; + // case EFFECT_TYPE_RESURRECTION: return "EFFECT_TYPE_RESURRECTION"; + // case EFFECT_TYPE_SANCTUARY: return "EFFECT_TYPE_SANCTUARY"; + // case EFFECT_TYPE_SAVING_THROW_DECREASE : return "EFFECT_TYPE_SAVING_THROW_DECREASE "; + // case EFFECT_TYPE_SAVING_THROW_INCREASE: return "EFFECT_TYPE_SAVING_THROW_INCREASE"; + // case EFFECT_TYPE_SEEINVISIBLE: return "EFFECT_TYPE_SEEINVISIBLE"; + // case EFFECT_TYPE_SILENCE: return "EFFECT_TYPE_SILENCE"; + // case EFFECT_TYPE_SKILL_DECREASE: return "EFFECT_TYPE_SKILL_DECREASE"; + // case EFFECT_TYPE_SKILL_INCREASE: return "EFFECT_TYPE_SKILL_INCREASE"; + // case EFFECT_TYPE_SLEEP: return "EFFECT_TYPE_SLEEP"; + // case EFFECT_TYPE_SLOW: return "EFFECT_TYPE_SLOW"; + // case EFFECT_TYPE_SPELL_FAILURE: return "EFFECT_TYPE_SPELL_FAILURE"; + // case EFFECT_TYPE_SPELL_IMMUNITY: return "EFFECT_TYPE_SPELL_IMMUNITY"; + // case EFFECT_TYPE_SPELL_RESISTANCE_DECREASE: return "EFFECT_TYPE_SPELL_RESISTANCE_DECREASE"; + // case EFFECT_TYPE_SPELL_RESISTANCE_INCREASE: return "EFFECT_TYPE_SPELL_RESISTANCE_INCREASE"; + // case EFFECT_TYPE_SPELLLEVELABSORPTION: return "EFFECT_TYPE_SPELLLEVELABSORPTION"; + // case EFFECT_TYPE_STUNNED: return "EFFECT_TYPE_STUNNED"; + // case EFFECT_TYPE_SWARM: return "EFFECT_TYPE_SWARM"; + // case EFFECT_TYPE_TEMPORARY_HITPOINTS: return "EFFECT_TYPE_TEMPORARY_HITPOINTS"; + // case EFFECT_TYPE_TIMESTOP: return "EFFECT_TYPE_TIMESTOP"; + // case EFFECT_TYPE_TRUESEEING: return "EFFECT_TYPE_TRUESEEING"; + // case EFFECT_TYPE_TURN_RESISTANCE_DECREASE: return "EFFECT_TYPE_TURN_RESISTANCE_DECREASE"; + // case EFFECT_TYPE_TURN_RESISTANCE_INCREASE: return "EFFECT_TYPE_TURN_RESISTANCE_INCREASE"; + // case EFFECT_TYPE_TURNED: return "EFFECT_TYPE_TURNED"; + // case EFFECT_TYPE_ULTRAVISION: return "EFFECT_TYPE_ULTRAVISION"; + // case EFFECT_TYPE_VISUALEFFECT: return "EFFECT_TYPE_VISUALEFFECT"; + // } + // return "unknown"; +// } + +// string GetItemPropertyName(int iItemType) +// { + // switch(iItemType) + // { + // case ITEM_PROPERTY_ABILITY_BONUS: return "ITEM_PROPERTY_ABILITY_BONUS"; + // case ITEM_PROPERTY_AC_BONUS: return "ITEM_PROPERTY_AC_BONUS"; + // case ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP: return "ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP"; + // case ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE: return "ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE"; + // case ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP: return "ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP"; + // case ITEM_PROPERTY_AC_BONUS_VS_SPECIFIC_ALIGNMENT: return "ITEM_PROPERTY_AC_BONUS_VS_SPECIFIC_ALIGNMENT"; + // case ITEM_PROPERTY_ARCANE_SPELL_FAILURE: return "ITEM_PROPERTY_ARCANE_SPELL_FAILURE"; + // case ITEM_PROPERTY_ATTACK_BONUS: return "ITEM_PROPERTY_ATTACK_BONUS"; + // case ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP: return "ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP"; + // case ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP: return "ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP"; +// // case ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNEMENT: return "ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNEMENT"; + // case ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT: return "ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT"; + // case ITEM_PROPERTY_BASE_ITEM_WEIGHT_REDUCTION: return ""; + // case ITEM_PROPERTY_BONUS_FEAT: return "ITEM_PROPERTY_BONUS_FEAT"; + // case ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N: return "ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N"; +// // case ITEM_PROPERTY_BOOMERANG: return "ITEM_PROPERTY_BOOMERANG"; + // case ITEM_PROPERTY_CAST_SPELL: return "ITEM_PROPERTY_CAST_SPELL"; + // case ITEM_PROPERTY_DAMAGE_BONUS: return "ITEM_PROPERTY_DAMAGE_BONUS"; + // case ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP: return "ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP"; + // case ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP: return "ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP"; + // case ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT: return "ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT"; + // case ITEM_PROPERTY_DAMAGE_REDUCTION: return "ITEM_PROPERTY_DAMAGE_REDUCTION"; + // case ITEM_PROPERTY_DAMAGE_RESISTANCE: return "ITEM_PROPERTY_DAMAGE_RESISTANCE"; + // case ITEM_PROPERTY_DAMAGE_VULNERABILITY: return "ITEM_PROPERTY_DAMAGE_VULNERABILITY"; +// // case ITEM_PROPERTY_DANCING: return "ITEM_PROPERTY_DANCING"; + // case ITEM_PROPERTY_DARKVISION: return "ITEM_PROPERTY_DARKVISION"; + // case ITEM_PROPERTY_DECREASED_ABILITY_SCORE: return "ITEM_PROPERTY_DECREASED_ABILITY_SCORE"; + // case ITEM_PROPERTY_DECREASED_AC: return "ITEM_PROPERTY_DECREASED_AC"; + // case ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER: return "ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER"; + // case ITEM_PROPERTY_DECREASED_DAMAGE: return "ITEM_PROPERTY_DECREASED_DAMAGE"; + // case ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER: return "ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER"; + // case ITEM_PROPERTY_DECREASED_SAVING_THROWS: return "ITEM_PROPERTY_DECREASED_SAVING_THROWS"; + // case ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC: return "ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC"; + // case ITEM_PROPERTY_DECREASED_SKILL_MODIFIER: return "ITEM_PROPERTY_DECREASED_SKILL_MODIFIER"; +// // case ITEM_PROPERTY_DOUBLE_STACK: return "ITEM_PROPERTY_DOUBLE_STACK"; +// // case ITEM_PROPERTY_ENHANCED_CONTAINER_BONUS_SLOTS: return "ITEM_PROPERTY_ENHANCED_CONTAINER_BONUS_SLOTS"; + // case ITEM_PROPERTY_ENHANCED_CONTAINER_REDUCED_WEIGHT: return "ITEM_PROPERTY_ENHANCED_CONTAINER_REDUCED_WEIGHT"; + // case ITEM_PROPERTY_ENHANCEMENT_BONUS: return "ITEM_PROPERTY_ENHANCEMENT_BONUS"; + // case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP: return "ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP"; + // case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP: return "ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP"; + // case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT: return "ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT"; +// // case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNMENT: return "ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNMENT"; + // case ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE: return "ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE"; + // case ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE: return "ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE"; + // case ITEM_PROPERTY_FREEDOM_OF_MOVEMENT: return "ITEM_PROPERTY_FREEDOM_OF_MOVEMENT"; + // case ITEM_PROPERTY_HASTE: return "ITEM_PROPERTY_HASTE"; + // case ITEM_PROPERTY_HEALERS_KIT: return "ITEM_PROPERTY_HEALERS_KIT"; + // case ITEM_PROPERTY_HOLY_AVENGER: return "ITEM_PROPERTY_HOLY_AVENGER"; + // case ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE: return "ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE"; + // case ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS: return "ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS"; +// // case ITEM_PROPERTY_IMMUNITY_SPECIFIC_SCHOOL: return "ITEM_PROPERTY_IMMUNITY_SPECIFIC_SCHOOL"; + // case ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL: return "ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL"; + // case ITEM_PROPERTY_IMMUNITY_SPELL_SCHOOL: return "ITEM_PROPERTY_IMMUNITY_SPELL_SCHOOL"; + // case ITEM_PROPERTY_IMMUNITY_SPELLS_BY_LEVEL: return "ITEM_PROPERTY_IMMUNITY_SPELLS_BY_LEVEL"; + // case ITEM_PROPERTY_IMPROVED_EVASION: return "ITEM_PROPERTY_IMPROVED_EVASION"; + // case ITEM_PROPERTY_KEEN: return "ITEM_PROPERTY_KEEN"; + // case ITEM_PROPERTY_LIGHT: return "ITEM_PROPERTY_LIGHT"; + // case ITEM_PROPERTY_MASSIVE_CRITICALS: return "ITEM_PROPERTY_MASSIVE_CRITICALS"; + // case ITEM_PROPERTY_MIGHTY: return "ITEM_PROPERTY_MIGHTY"; + // case ITEM_PROPERTY_MIND_BLANK: return "ITEM_PROPERTY_MIND_BLANK"; + // case ITEM_PROPERTY_MONSTER_DAMAGE: return "ITEM_PROPERTY_MONSTER_DAMAGE"; + // case ITEM_PROPERTY_NO_DAMAGE: return "ITEM_PROPERTY_NO_DAMAGE"; + // case ITEM_PROPERTY_ON_HIT_PROPERTIES: return "ITEM_PROPERTY_ON_HIT_PROPERTIES"; + // case ITEM_PROPERTY_ON_MONSTER_HIT: return "ITEM_PROPERTY_ON_MONSTER_HIT"; + // case ITEM_PROPERTY_ONHITCASTSPELL: return "ITEM_PROPERTY_ONHITCASTSPELL"; + // case ITEM_PROPERTY_POISON: return "ITEM_PROPERTY_POISON"; + // case ITEM_PROPERTY_REGENERATION: return "ITEM_PROPERTY_REGENERATION"; + // case ITEM_PROPERTY_REGENERATION_VAMPIRIC: return "ITEM_PROPERTY_REGENERATION_VAMPIRIC"; + // case ITEM_PROPERTY_SAVING_THROW_BONUS: return "ITEM_PROPERTY_SAVING_THROW_BONUS"; + // case ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC: return "ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC"; + // case ITEM_PROPERTY_SKILL_BONUS: return "ITEM_PROPERTY_SKILL_BONUS"; + // case ITEM_PROPERTY_SPECIAL_WALK: return "ITEM_PROPERTY_SPECIAL_WALK"; + // case ITEM_PROPERTY_SPELL_RESISTANCE: return "ITEM_PROPERTY_SPELL_RESISTANCE"; + // case ITEM_PROPERTY_THIEVES_TOOLS: return "ITEM_PROPERTY_THIEVES_TOOLS"; + // case ITEM_PROPERTY_TRAP: return "ITEM_PROPERTY_TRAP"; + // case ITEM_PROPERTY_TRUE_SEEING: return "ITEM_PROPERTY_TRUE_SEEING"; + // case ITEM_PROPERTY_TURN_RESISTANCE: return "ITEM_PROPERTY_TURN_RESISTANCE"; + // case ITEM_PROPERTY_UNLIMITED_AMMUNITION: return "ITEM_PROPERTY_UNLIMITED_AMMUNITION"; + // case ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP: return "ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP"; + // case ITEM_PROPERTY_USE_LIMITATION_CLASS: return "ITEM_PROPERTY_USE_LIMITATION_CLASS"; + // case ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE: return "ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE"; + // case ITEM_PROPERTY_USE_LIMITATION_SPECIFIC_ALIGNMENT: return "ITEM_PROPERTY_USE_LIMITATION_SPECIFIC_ALIGNMENT"; + // case ITEM_PROPERTY_USE_LIMITATION_TILESET: return "ITEM_PROPERTY_USE_LIMITATION_TILESET"; + // case ITEM_PROPERTY_VISUALEFFECT: return "ITEM_PROPERTY_VISUALEFFECT"; +// // case ITEM_PROPERTY_VORPAL: return "ITEM_PROPERTY_VORPAL"; + // case ITEM_PROPERTY_WEIGHT_INCREASE: return "ITEM_PROPERTY_WEIGHT_INCREASE"; + // case ITEM_PROPERTY_WOUNDING: return "ITEM_PROPERTY_WOUNDING"; + // } + // return "unknown"; +// } + +// returns a string with basic information about an effect found on a PC +// string DebugStringEffect(effect eEffect) +// { + // string sString = ""; +// + // int nType = GetEffectType(eEffect); + // sString += "Effect; Type = " + IntToString(nType) + " (" + GetEffectTypeName(nType) + ")"; +// + // int nSpell = GetEffectSpellId(eEffect); + // sString += ", SpellID: " + IntToString(nSpell); +// + // int nSubType = GetEffectSubType(eEffect); + // sString += ", Subtype: " + IntToString(nSubType); +// + // int nDurationType = GetEffectDurationType(eEffect); + // sString += ", Duration: " + IntToString(nDurationType); +// + // object oCreator = GetEffectCreator(eEffect); + // sString += ", Creator: " + GetName(oCreator); +// + // return sString; +// } + +// returns a string with basic information about an item property (found on an item) +// we could also use DebugIProp2Str(itemproperty ip) from "inc_utility" +// or ItemPropertyToString(itemproperty ip) from "inc_utility" (which uses 2da and tlk lookups) + +// replaced calls with DebugIProp2Str() in inc_debug +// string DebugStringItemProperty(itemproperty ip) +// { +// // return DebugIProp2Str(ip); +// // return ItemPropertyToString(ip); + // int iType = GetItemPropertyType(ip); + // int iValue = GetItemPropertyCostTableValue(ip); + // int iSubType = GetItemPropertySubType(ip); + // int iParam1 = GetItemPropertyParam1Value(ip); + // return "IP, Type = " + IntToString(iType) + " (" + GetItemPropertyName(iType) + "), Cost = " + IntToString(iValue) + ", Subtype = " + IntToString(iSubType) + ", Param1 = " + IntToString(iParam1); +// } + +// motu99: modified this code so that it now works with PRC 3.1d +int GetMagicalAttackBonus(object oAttacker, object oTarget) +{ +// motu99: added createMagicTatoo, Heroism, GreaterHeroism, MantleOfEgregiousMight, Deadeye Sense +// @TODO: research if all AB increasing spells are covered; find a way to get AB-increase directly from effect +//ebonfowl: this function now pulls attack increasing effects automatically + + int iMagicBonus = 0; + int nType = 0; + int iEffectSubtype = 0; + int nSpell = 0; + + object oCaster; + + effect eEffect = GetFirstEffect(oAttacker); + + while(GetIsEffectValid(eEffect)) + { + nType = GetEffectType(eEffect); + iEffectSubtype = GetEffectInteger(eEffect, 1); + nSpell = GetEffectSpellId(eEffect); +// DoDebug("GetMagicalAttackBonus: found "+ DebugStringEffect(eEffect)); + int iBonus = 0; + + int iRace = MyPRCGetRacialType(oTarget); + + int iEffectRace = GetEffectInteger(eEffect, 2); + + int iGoodEvil = GetAlignmentGoodEvil(oTarget); + int iLawChaos = GetAlignmentLawChaos(oTarget); + + int iEffectLawChaos = GetEffectInteger(eEffect, 3); + int iEffectGoodEvil = GetEffectInteger(eEffect, 4); + + if(nType == EFFECT_TYPE_ATTACK_INCREASE && iEffectSubtype == 0) + { +// motu99: If the aurora engine can determine the attack increase due to all of these spells +// we should also be able to get the attack increase directly +// this would reduce the effort going through all spells (and not catching any new spells, unless we meticously update the code) + + if(iEffectRace != 28) + { + if(iEffectRace == iRace) + { + //Define racial type-based attack increase and load into struct + iBonus = GetEffectInteger(eEffect, 0); + iMagicBonus += iBonus; + } + } + else if(iEffectLawChaos != 0 || iEffectGoodEvil != 0) + { + if(iEffectLawChaos == iLawChaos || iEffectGoodEvil == iGoodEvil) + { + //Define alignment-based attack increase and load into struct + iBonus = GetEffectInteger(eEffect, 0); + iMagicBonus += iBonus; + } + } + else if(iEffectLawChaos == 0 && iEffectGoodEvil == 0 && iEffectRace == 28) + { + //Define generic attack increase and load into struct + iBonus = GetEffectInteger(eEffect, 0); + iMagicBonus += iBonus; + } + +/* switch(nSpell) + { +// case 2732: // Tempest absolute ambidex (calculated independent from spell effect) +// iMagicBonus += 2; +// break; + + case SPELL_AID: + iMagicBonus += 1; + break; + + case SPELL_BLESS: + iMagicBonus += 1; + break; + + case SPELL_PRAYER: + iMagicBonus += 1; + break; + + case SPELL_WAR_CRY: + iMagicBonus += 2; + break; + + case SPELL_BATTLETIDE: + iMagicBonus += 2; + break; + + case SPELL_TRUE_STRIKE: + iMagicBonus += 20; + break; + + case SPELL_EPIC_DEADEYE_2: + iMagicBonus += 20; + break; + + case SPELL_DIVINE_PROTECTION: + iMagicBonus += 1; + break; + + case SPELL_CREATE_MAGIC_TATTOO: // motu99: don't know if this ever finds anything - fluffyamoeba: does now + iMagicBonus += 2; + break; + + case SPELL_HEROISM: + iMagicBonus += 2; + break; + + case SPELL_GREATER_HEROISM: + iMagicBonus += 4; + break; + + case SPELL_MANTLE_OF_EGREG_MIGHT: + iMagicBonus += 4; + break; + + case SPELL_RECITATION: + iMagicBonus += 2; + break; + + case SPELL_DIVINE_FAVOR: { + iMagicBonus++; // at least one point increase + +// motu99: normally divine favor can only be cast on self, but what with runes? +// so we should find out the caster of the spell (same as with bard song, see below) + oCaster = GetEffectCreator(eEffect); + if(!GetIsObjectValid(oCaster)) // if we cannot find the caster, we assume the attacker was the caster + oCaster = oAttacker; + + iBonus = GetLevelByTypeDivine(oCaster); + iBonus /= 3; + if(iBonus > 4) iBonus = 4; // we already have one increase, so can only be four more + + iMagicBonus += iBonus; + break; + } + case SPELL_DIVINE_POWER: + iBonus = GetFighterBAB(GetHitDice(oAttacker)) - GetBaseAttackBonus(oAttacker); + iMagicBonus += iBonus; + break; + + // // Cleric War Domain Power + // case SPELL_CLERIC_WAR_DOMAIN_POWER_2: +// // here we implicitly assume, that the war domain power SLA can only be cast on oneself + // iBonus = GetLevelByTypeDivine(oAttacker); // GetLevelByClass(CLASS_TYPE_CLERIC, oAttacker); // motu99: changed to divine caster levels + // iBonus /= 5; + // iBonus++; +// + // iMagicBonus += iBonus; + // break; + + // SPELL_DIVINE_WRATH + case SPELLABILITY_DC_DIVINE_WRATH: {// motu99: didn't check this piece of code + iBonus = GetLevelByClass(CLASS_TYPE_DIVINECHAMPION, oAttacker); + iBonus /= 5; + iBonus -= 1; + if(iBonus < 0) iBonus = 0; + else iBonus *= 2; + + iBonus += 3; + iMagicBonus += iBonus; + break; + } + case SPELL_TENSERS_TRANSFORMATION: { + // find out caster level (should be stored in local int on oAttacker) + iBonus = GetLocalInt(oAttacker, "CasterLvl_TensersTrans"); + + // if there is no local int, we have to find out the caster level (is not very accurate) + if (!iBonus) + { + // Tenser's could have been cast on us by someone else (rune or scroll), so find out caster + oCaster = GetEffectCreator(eEffect); + if(!GetIsObjectValid(oCaster)) // if we cannot find the caster, we assume the attacker was the caster + oCaster = oAttacker; + + iBonus = GetLevelByTypeArcane(oCaster); + } + + iBonus /= 2; + iMagicBonus += iBonus; + break; + } + // Bard's Song + case SPELL_BARD_SONG: { + oCaster = GetEffectCreator(eEffect); + if(!GetIsObjectValid(oCaster)) // if we cannot find the caster, we assume the attacker was the caster + oCaster = oAttacker; + + iMagicBonus++; // at least one point increase + if(GetIsObjectValid(oCaster)) + { + if( GetLevelByClass(CLASS_TYPE_BARD, oCaster) >= BARD_LEVEL_FOR_BARD_SONG_AB_2 + && GetSkillRank(SKILL_PERFORM, oCaster) >= BARD_PERFORM_SKILL_FOR_BARD_SONG_AB_2) + iMagicBonus++; + } + break; + } + }*/ + } + + else if(nType == EFFECT_TYPE_ATTACK_DECREASE && iEffectSubtype == 0) + { + if(iEffectRace != 28) + { + if(iEffectRace == iRace) + { + //Define racial type-based attack decrease and load into struct + iBonus = GetEffectInteger(eEffect, 0); + iMagicBonus -= iBonus; + } + } + else if(iEffectLawChaos != 0 || iEffectGoodEvil != 0) + { + if(iEffectLawChaos == iLawChaos || iEffectGoodEvil == iGoodEvil) + { + //Define alignment-based attack decrease and load into struct + iBonus = GetEffectInteger(eEffect, 0); + iMagicBonus -= iBonus; + } + } + else if(iEffectLawChaos == 0 && iEffectGoodEvil == 0 && iEffectRace == 28) + { + //Define generic attack decrease and load into struct + iBonus = GetEffectInteger(eEffect, 0); + iMagicBonus -= iBonus; + } + + /* + switch(nSpell) + { + case SPELL_BANE: + iMagicBonus -= 1; + break; + + case SPELL_PRAYER: + iMagicBonus -= 1; + break; + + case SPELL_FLARE: + iMagicBonus -= 1; + break; + + case SPELL_GHOUL_TOUCH: + iMagicBonus -= 2; + break; + + case SPELL_DOOM: + iMagicBonus -= 2; + break; + + case SPELL_SCARE: + iMagicBonus -= 2; + break; + + case SPELL_RECITATION: + iMagicBonus -= 2; + break; + + case SPELL_BATTLETIDE: + iMagicBonus -= 2; + break; + + case SPELL_CURSE_OF_PETTY_FAILING: + iMagicBonus -= 2; + break; + + case SPELL_LEGIONS_CURSE_OF_PETTY_FAILING: + iMagicBonus -= 2; + break; + + case SPELL_BESTOW_CURSE: + iMagicBonus -= 4; + break; + + // SPELL_HELLINFERNO + case SPELL_HELLINFERNO_2: + iMagicBonus -= 4; + break; + + case SPELL_BIGBYS_INTERPOSING_HAND: + iMagicBonus -= 10; + break; + + // Bard's Curse Song + case SPELL_BARD_CURSE_SONG: { + oCaster = GetEffectCreator(eEffect); + if(!GetIsObjectValid(oCaster)) // if we cannot find the caster, we assume the attacker was the caster + oCaster = oAttacker; + + iMagicBonus--; + + if(GetIsObjectValid(oCaster)) + { + if( GetLevelByClass(CLASS_TYPE_BARD, oCaster) >= BARD_LEVEL_FOR_BARD_SONG_AB_2 + && GetSkillRank(SKILL_PERFORM, oCaster) >= BARD_PERFORM_SKILL_FOR_BARD_SONG_AB_2) + iMagicBonus--; + } + break; + } + // Power Shot + case SPELL_PA_POWERSHOT: + iMagicBonus -= 5; + break; + + case SPELL_PA_IMP_POWERSHOT: + iMagicBonus -= 10; + break; + + case SPELL_PA_SUP_POWERSHOT: + iMagicBonus -= 15; + break; + }*/ + } + + eEffect = GetNextEffect(oAttacker); + } + return iMagicBonus; +} + +// this function only calculates pure attack boni on the weapon, enhancement boni are calculated elsewhere +// it takes boni or penalties due to alignment into account +// it calculates the maximum of all boni and subtracts the maximum of all penalties +int GetWeaponAttackBonusItemProperty(object oWeap, object oDefender) +{ + int iBonus = 0; + int iPenalty = 0; + int iTemp; + + int iRace = MyPRCGetRacialType(oDefender); + + int iGoodEvil = GetAlignmentGoodEvil(oDefender); + int iLawChaos = GetAlignmentLawChaos(oDefender); + int iAlignSpecific = GetItemPropAlignment(iGoodEvil, iLawChaos); + int iAlignGroup; + + itemproperty ip = GetFirstItemProperty(oWeap); + while(GetIsItemPropertyValid(ip)) + { + iTemp = 0; + int iIpType=GetItemPropertyType(ip); + switch(iIpType) + { + case ITEM_PROPERTY_ATTACK_BONUS: + iTemp = GetItemPropertyCostTableValue(ip); + break; + + case ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER: + iTemp - GetItemPropertyCostTableValue(ip); + break; + + case ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP: + iAlignGroup = GetItemPropertySubType(ip); + + if (iAlignGroup == ALIGNMENT_NEUTRAL) + { + if (iAlignGroup == iLawChaos) iTemp = GetItemPropertyCostTableValue(ip); + } + else if (iAlignGroup == iGoodEvil || iAlignGroup == iLawChaos || iAlignGroup == IP_CONST_ALIGNMENTGROUP_ALL) + { + iTemp = GetItemPropertyCostTableValue(ip); + } + break; + + case ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP: + if(GetItemPropertySubType(ip) == iRace ) + { + iTemp = GetItemPropertyCostTableValue(ip); + } + break; + + case ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT: + if(GetItemPropertySubType(ip) == iAlignSpecific ) + { + iTemp = GetItemPropertyCostTableValue(ip); + } + break; + } + + if (iTemp > iBonus) + iBonus = iTemp; + else if(iTemp < iPenalty) + iPenalty = iTemp; + + ip = GetNextItemProperty(oWeap); + } + iBonus -= iPenalty; + return iBonus; +} + +int GetDefenderAC(object oDefender, object oAttacker, int bIsTouchAttack = FALSE) +{ + int iAC = GetAC(oDefender); + int iDexMod = GetAbilityModifier(ABILITY_DEXTERITY, oDefender); + int bIsHelpless = GetIsHelpless(oDefender); + int bGetIsDeniedDexBonus = GetIsDeniedDexBonusToAC(oDefender, oAttacker); + int bIsStunned = PRCGetHasEffect(EFFECT_TYPE_STUNNED, oDefender); + + // helpless enemies have an effective dexterity of 0 (for -5 ac) + if(bIsHelpless) + { + iAC -= 5; + } + //if (DEBUG) DoDebug("GetDefenderAC: End Section #1"); + // remove the dexterity modifier to AC, based on armor limits + if(bGetIsDeniedDexBonus || bIsHelpless ) + { + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oDefender); + int iArmorType = GetItemACBase(oArmor); + int iDexMax = 100; + + // remove any bonus AC from boots (it's Dodge AC) + iAC -= GetItemACValue( GetItemInSlot(INVENTORY_SLOT_BOOTS, oDefender) ); + + // remove bonus AC from having tumble skill. + // this is only for ranks, not items/feats/etc + int iTumble = GetSkill(oDefender, SKILL_TUMBLE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); + iTumble -= iDexMod; + iTumble /= 5; + iAC -= iTumble; + + // change the max dex mod based on armor value + if(iArmorType == 8) iDexMax = 1; + else if(iArmorType == 7) iDexMax = 1; + else if(iArmorType == 5) iDexMax = 2; + else if(iArmorType == 4) iDexMax = 4; + else if(iArmorType == 3) iDexMax = 4; + else if(iArmorType == 2) iDexMax = 6; + else if(iArmorType == 1) iDexMax = 8; + + // if their dex mod exceeds the max for their current armor + if(iDexMod > iDexMax) iDexMod = iDexMax; + //if (DEBUG) DoDebug("GetDefenderAC: End Section #2"); + // remove any dex bonus to AC + iAC -= iDexMod; + + // remove any bonuses applied to PrC Skins + iAC -= GetItemACValue( GetItemInSlot(INVENTORY_SLOT_CARMOUR, oDefender) ); + + // if the skin AC bonus was racial "natural" AC, add it back in. + // but only if it is not a touch attack + if(!bIsTouchAttack) + { +// motu99: This calculation is quite costly; has to loop through all feats of OBJECT_SELF several times (up to 22 times) +// if performance is an issue, better make one single loop, checking for the highest of the feats and return that +//[feats seem to be item properties on the creature / PC, so could we loop through all item properties on the characters? not sure] + if ( GetHasFeat(FEAT_NATARM_19) ) iAC += 19; + else if( GetHasFeat(FEAT_NATARM_18) ) iAC += 18; + else if( GetHasFeat(FEAT_NATARM_17) ) iAC += 17; + else if( GetHasFeat(FEAT_NATARM_16) ) iAC += 16; + else if( GetHasFeat(FEAT_NATARM_15) ) iAC += 15; + else if( GetHasFeat(FEAT_NATARM_14) ) iAC += 14; + else if( GetHasFeat(FEAT_NATARM_13) ) iAC += 13; + else if( GetHasFeat(FEAT_NATARM_12) ) iAC += 12; + else if( GetHasFeat(FEAT_NATARM_11) ) iAC += 11; + else if( GetHasFeat(FEAT_NATARM_10) ) iAC += 10; + else if( GetHasFeat(FEAT_NATARM_9) ) iAC += 9; + else if( GetHasFeat(FEAT_NATARM_8) ) iAC += 8; + else if( GetHasFeat(FEAT_NATARM_7) ) iAC += 7; + else if( GetHasFeat(FEAT_NATARM_6) ) iAC += 6; + else if( GetHasFeat(FEAT_NATARM_5) ) iAC += 5; + else if( GetHasFeat(FEAT_NATARM_4) ) iAC += 4; + else if( GetHasFeat(FEAT_NATARM_3) ) iAC += 3; + else if( GetHasFeat(FEAT_NATARM_2) ) iAC += 2; + else if( GetHasFeat(FEAT_NATARM_1) ) iAC += 1; + //if (DEBUG) DoDebug("GetDefenderAC: End Section #3"); + } + } + + // if helpless or stunned, can't use shield + if(bIsHelpless || bIsStunned) + { + iAC -= GetItemACValue( GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oDefender) ); + } + + // AC rules are different for a touch attack + // no shield, armor, or natural armor bonuses apply. + if(bIsTouchAttack) + { + //if (DEBUG) DoDebug("GetDefenderAC: End Section #4"); + // Temporary storage, needed for Elude Touch + int nNormalAC = iAC; + + // remove Armor AC + iAC -= GetItemACValue( GetItemInSlot(INVENTORY_SLOT_CHEST, oDefender) ); + + // remove natural armor AC + iAC -= GetItemACValue( GetItemInSlot(INVENTORY_SLOT_NECK, oDefender) ); + + // remove shield bonus - only if it has not been removed already + if(!bIsHelpless && !bIsStunned) + iAC -= GetItemACValue( GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oDefender) ); + + // Remove AC from skin - only if it has not been removed already + if(!(bGetIsDeniedDexBonus || bIsHelpless)) + iAC -= GetItemACValue( GetItemInSlot(INVENTORY_SLOT_CARMOUR, oDefender) ); + + // Wilders get to add cha bonus to touch attacks only, but cannot exceed normal AC that way + if(GetHasFeat(FEAT_WILDER_ELUDE_TOUCH, oDefender)) + iAC = PRCMin(iAC + GetAbilityModifier(ABILITY_CHARISMA, oDefender), nNormalAC); + } + //if (DEBUG) DoDebug("GetDefenderAC: End Section #5"); + return iAC; +} + + +// motu99: restructured code for better efficiency / readability March 16, 2007 +// note that the attack boni calculated here also depend on the defender +// (for instance if weapon has an attack/enhancement bonus vs. specific alignments) + +// the only source of defender specific AB in this function is the attacker's weapon +// if efficiency becomes an issue, it might be better to remember the defender (or its race/alignment), +// so that AB and other stuff will only be recalculated when the defender changes. + +// at the current time, GetAttackBonus is calculated at the beginning of the round, but not for every attack. +// therefore, if the defender changes during the round, weapon boni versus specific enemy races or alignments are not properly accounted for +// so we eventually might want to move that part out of GetAttackBonus. +// also if we switch weapons during a combat round, this will not be not noticed until the beginning of the next round, when GetAttackBonus is called anew + +// the following AB-sources are taken into account: (* = depends on Defender) +// Base Attack Bonus - iBAB +// Ability modifier due to Str/Dex/Wis - iAbilityBonus [motu99: could change during a round, if enemy does ability decreasing attacks] +// Bonus from Feats - iFeatBonus (Weapon Focus, Specialization, Prowess, Good aim) [motu99: will change during the round, if we equip other weapons, or if defenders comes into melee range for a ranged attack (with/without Point Blank Shot)] +// Two Weapon Fighting penalties - iTWFPenalty (is subtracted) [motu99: will change during the round, if we equip other weapons] +// Bonus / Penalties from combat modes - iCombatModeBonus (Flurry of Blows is treated elsewhere) [motu99: the PC can change the combat mode during a round] +// Magical Boni from Spells on Attacker - iMagicBonus [motu99: might not last through the round, or could be dispelled] +// * Boni on Weapon - iWeaponAttackBonus, iWeaponEnhancement [motu99: will change during the round, if defender's race or alignment changes] +int GetAttackBonus(object oDefender, object oAttacker, object oWeap, int iOffhand = 0, int iTouchAttackType = FALSE) +{ +// note that oWeap could be gloves (for an unarmed monk) or a creature weapon +// passing gloves or ammunition to this function may not work well with the override feature in PerformAttack() +// [in order to calculate dual wielding penalties GetAttackBonus does not look up the weapon override variables, it looks directly into the inventory slots] +// possible solution: pass right and left weapons to this function! (but make sure, that GetAttackBonus is not used in other prc sources,unless you want to modify these sources!!) + + struct WeaponFeat sWeaponFeat; // holds all the feats relevant for the weapon (or rather weapon base type) + int iAttackBonus = 0; + int iCappedAttackBonus = 0; //ebonfowl: bonuses are added to this value and truncated at the global attack limit if they are of the variety that are capped in normal combat. Can be disabled via the switch PRC_CAPPED_ATTACK_BONUS. + int iCappedRightBonus = 0; //ebonfowl: these are EffectAttackIncrease bonuses applied specifically to the right hand which add to the capped limit + int iCappedRightPen = 0; //ebonfowl: same as above but penalties + int iCappedLeftBonus = 0; //ebonfowl: these are EffectAttackIncrease bonuses applied specifically to the left hand which add to the capped limit + int iCappedLeftPen = 0; //ebonfowl: same as above but penalties + int iAbilityBonus = 0; // boni from abilities (Str, Dex, Wis) - also depends on feats (Finesse, Intuitive Attack) and type of attack (touch, melee, ranged) + int iFeatBonus = 0; // boni from feats (mostly weapon specific: weapon focus, specialization, prowess, weapon of choice) + int iMagicBonus = 0; // boni from AB increasing spells or spell effects on attacker + int iCombatModeBonus = 0; // boni / penalties from Combat Mode + int iTWFPenalty = 0; // penalty from two weapon fighting + int iBAB = GetBaseAttackBonus(oAttacker); + // DoDebug("entering GetAttackBonus() for Weapon " + GetName(oWeap) + ", Attacker: " + GetName(oAttacker) + ", Defender: " + GetName(oDefender)); + int iWeaponAttackBonus = GetWeaponAttackBonusItemProperty(oWeap, oDefender); + int iWeaponType = GetBaseItemType(oWeap); + int iCombatMode = GetLastAttackMode(oAttacker); + int iStr = GetAbilityModifier(ABILITY_STRENGTH, oAttacker); + int iDex = GetAbilityModifier(ABILITY_DEXTERITY, oAttacker); + int iWis = GetAbilityModifier(ABILITY_WISDOM, oAttacker); // needed for ZenArchery and intuitive attack + int bIsRangedWeapon = GetIsRangedWeaponType(iWeaponType); // = GetWeaponRanged(oWeap); + + // uses GetMonkEnhancement in case a glove/creature weapon is passed as oWeapon + int iWeaponEnhancement = GetMonkEnhancement(oWeap, oDefender, oAttacker); + + if (GetLocalInt(oAttacker, "BABOverride")) iBAB = GetLocalInt(oAttacker, "BABOverride"); + + // weapon specific feats + sWeaponFeat = GetAllFeatsOfWeaponType(iWeaponType); + + int bFocus = 0; + int bEpicFocus = 0; + int bIsRangedTouchAttack = iTouchAttackType == TOUCH_ATTACK_RANGED || iTouchAttackType == TOUCH_ATTACK_RANGED_SPELL; + + if(bIsRangedTouchAttack) + { + // Weapon Focus(Ray) applies to touch attacks(motu99: ranged only?) + bFocus = GetHasFeat(FEAT_WEAPON_FOCUS_RAY, oAttacker); + if (bFocus) // no need to look for epic focus, if we don't have focus + bEpicFocus = GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_RAY, oAttacker); + } + else + { // no touch attack, normal weapon focus feats + bFocus = GetHasFeat(sWeaponFeat.Focus, oAttacker); + if (bFocus) // no need to look for epic focus, if we don't have focus + bEpicFocus = GetHasFeat(sWeaponFeat.EpicFocus, oAttacker); + } + + int bEpicProwess = GetHasFeat(FEAT_EPIC_PROWESS, oAttacker); + + // attack bonus from feats + if(bFocus) iFeatBonus += 1; + if(bEpicFocus) iFeatBonus += 2; + if(bEpicProwess) iFeatBonus += 1; + + +// if(bWeaponOfChoice) iFeatBonus += (GetLevelByClass(CLASS_TYPE_WEAPON_MASTER, oAttacker) / 5); +// motu99: original calculation was not correct: Gimoire says that we get AB +1 at level 5, another +1 at level 13 and +1 every third level thereafter +// lets hope Grimoire was right, otherwise I'll be off on a trip to Canossa + int iWeaponMasterLevel = GetLevelByClass(CLASS_TYPE_WEAPON_MASTER, oAttacker); + + // only look for weapon of choice and related AB increase, if we have enough weapon master levels for the superior weapon focus feat + if(iWeaponMasterLevel >= WEAPON_MASTER_LEVEL_SUPERIOR_WEAPON_FOCUS) + { + int bWeaponOfChoice = GetHasFeat(sWeaponFeat.WeaponOfChoice, oAttacker); + + if (bWeaponOfChoice) + { + iFeatBonus++; + if (iWeaponMasterLevel >= WEAPON_MASTER_LEVEL_EPIC_SUPERIOR_WEAPON_FOCUS) + iFeatBonus += (iWeaponMasterLevel-WEAPON_MASTER_LEVEL_EPIC_SUPERIOR_WEAPON_FOCUS)/3 +1; + } + } + + + if(!bIsRangedWeapon && !bIsRangedTouchAttack) // first do calculations for "normal" melee weapons (includes unarmed, even torches) + { + //this is the attack bonus from ability for melee combat only + //ranged combat goes further down + + // Melee Specific Rules + int bIsFinessableWeapon = FALSE; + int iCreatureSize = PRCGetCreatureSize(oAttacker); + int iWeaponSize = StringToInt(Get2DACache("baseitems", "WeaponSize", iWeaponType)); + + if(iWeaponType == BASE_ITEM_KATANA) + { // if we wield a katana, see if we have the katana finesse feat; if yes we have a finessable weapon + bIsFinessableWeapon = GetHasFeat(FEAT_KATANA_FINESSE, oAttacker); + } + else if(GetTag(oWeap) == "prc_eldrtch_glv") + { + bIsFinessableWeapon = GetHasFeat(FEAT_WEAPON_FINESSE, oAttacker); + } + else if(GetIsNaturalWeapon(oWeap)) + { // all "natural" weapons are finessable (the critters have them from their birth - if they cannot use DEX for their own limbs ...) + bIsFinessableWeapon = GetHasFeat(FEAT_WEAPON_FINESSE, oAttacker); + } + // motu99: added a switch in order to have sensible rules for small creatures, don't know it its PnP, but assume so + else if(GetPRCSwitch(PRC_SMALL_CREATURE_FINESSE) && iWeaponSize < iCreatureSize) + { // with the switch on, weapon is only finessable if its size is smaller than the creature size + bIsFinessableWeapon = GetHasFeat(FEAT_WEAPON_FINESSE, oAttacker); + } + // switch is off, so normal bioware rules: finessable weapons are rapiers and small or tiny weapons (size <= 2) + else if(iWeaponType == BASE_ITEM_RAPIER || iWeaponSize <= WEAPON_SIZE_SMALL) + { + bIsFinessableWeapon = GetHasFeat(FEAT_WEAPON_FINESSE, oAttacker); + } + + // now increase attack bonus from stats for melee + // str normally unless exceptional circumstances + // if(iStr > bTempBonus) // motu99: that is strange, this code prehibits any attack penalties due to low strength for melee weapons; removed this check + iAbilityBonus = iStr; + + // if we have a finessable weapon, we take Dex whenever it is higher than Str + if(bIsFinessableWeapon) + { + if(iDex > iAbilityBonus) iAbilityBonus = iDex; + } + + // Two Weapon Fighting Penalties + // NwN only allows melee weapons to be dual wielded + // motu99: this calculation partly ignores the weapon overrides we might have passed to PerformAttack() + + int iOffhandWeaponType; + int bIsDoubleSidedWeapon = FALSE; + + // motu99: added check for double sided weapons + if(GetIsDoubleSidedWeaponType(iWeaponType)) + { + bIsDoubleSidedWeapon = TRUE; + // iOffhandWeaponType = iWeaponType; // motu99 don't need this + } + else + { // if it is an offhand attack, we assume the weapon given to us in oWeap is the offhand weapon + if (iOffhand) + { + iOffhandWeaponType = iWeaponType; + } + else // otherwise we must look in the left hand slot (this ignores any overrides from PerformAttack) + { + iOffhandWeaponType = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oAttacker)); + } + } + + //ebonfowl: now checking for attack bonuses and penalties that are hand-specific, only the highest applies in each case + + if(iOffhand) //ebonfowl: is it an off-hand attack? + { + effect eEffect = GetFirstEffect(oAttacker); + int nType, iEffectSubtype; + + while(GetIsEffectValid(eEffect)) + { + nType = GetEffectType(eEffect); + iEffectSubtype = GetEffectInteger(eEffect, 1); + + int iBonus = 0; + + int iRace = MyPRCGetRacialType(oDefender); + + int iEffectRace = GetEffectInteger(eEffect, 2); + + int iGoodEvil = GetAlignmentGoodEvil(oDefender); + int iLawChaos = GetAlignmentLawChaos(oDefender); + + int iEffectLawChaos = GetEffectInteger(eEffect, 3); + int iEffectGoodEvil = GetEffectInteger(eEffect, 4); + + if(nType == EFFECT_TYPE_ATTACK_INCREASE && iEffectSubtype == 2) + { + if(iEffectRace != 28) + { + if(iEffectRace == iRace) + { + //Define racial type-based attack increase and set the bonus if the highest one on that hand + iBonus = GetEffectInteger(eEffect, 0); + if(iBonus > iCappedLeftBonus) iCappedLeftBonus = iBonus; + } + } + else if(iEffectLawChaos != 0 || iEffectGoodEvil != 0) + { + if(iEffectLawChaos == iLawChaos || iEffectGoodEvil == iGoodEvil) + { + //Define alignment-based attack increase and set the bonus if the highest one on that hand + iBonus = GetEffectInteger(eEffect, 0); + if(iBonus > iCappedLeftBonus) iCappedLeftBonus = iBonus; + } + } + else if(iEffectLawChaos == 0 && iEffectGoodEvil == 0 && iEffectRace == 28) + { + //Define generic attack increase and set the bonus if the highest one on that hand + iBonus = GetEffectInteger(eEffect, 0); + if(iBonus > iCappedLeftBonus) iCappedLeftBonus = iBonus; + } + + } + else if(nType == EFFECT_TYPE_ATTACK_DECREASE && iEffectSubtype == 2) + { + if(iEffectRace != 28) + { + if(iEffectRace == iRace) + { + //Define racial type-based attack increase and set the bonus if the highest one on that hand + iBonus = GetEffectInteger(eEffect, 0); + if(iBonus > iCappedLeftPen) iCappedLeftPen = iBonus; + } + } + else if(iEffectLawChaos != 0 || iEffectGoodEvil != 0) + { + if(iEffectLawChaos == iLawChaos || iEffectGoodEvil == iGoodEvil) + { + //Define alignment-based attack increase and set the bonus if the highest one on that hand + iBonus = GetEffectInteger(eEffect, 0); + if(iBonus > iCappedLeftPen) iCappedLeftPen = iBonus; + } + } + else if(iEffectLawChaos == 0 && iEffectGoodEvil == 0 && iEffectRace == 28) + { + //Define generic attack increase and set the bonus if the highest one on that hand + iBonus = GetEffectInteger(eEffect, 0); + if(iBonus > iCappedLeftPen) iCappedLeftPen = iBonus; + } + + } + + eEffect = GetNextEffect(oAttacker); + } + + iCappedLeftBonus -= iCappedLeftPen; + } + else //ebonfowl: anything else will be a main-hand attack + { + effect eEffect = GetFirstEffect(oAttacker); + int nType, iEffectSubtype; + + while(GetIsEffectValid(eEffect)) + { + nType = GetEffectType(eEffect); + iEffectSubtype = GetEffectInteger(eEffect, 1); + + int iBonus = 0; + + int iRace = MyPRCGetRacialType(oDefender); + + int iEffectRace = GetEffectInteger(eEffect, 2); + + int iGoodEvil = GetAlignmentGoodEvil(oDefender); + int iLawChaos = GetAlignmentLawChaos(oDefender); + + int iEffectLawChaos = GetEffectInteger(eEffect, 3); + int iEffectGoodEvil = GetEffectInteger(eEffect, 4); + + if(nType == EFFECT_TYPE_ATTACK_INCREASE && iEffectSubtype == 1) + { + if(iEffectRace != 28) + { + if(iEffectRace == iRace) + { + //Define racial type-based attack increase and set the bonus if the highest one on that hand + iBonus = GetEffectInteger(eEffect, 0); + if(iBonus > iCappedRightBonus) iCappedRightBonus = iBonus; + } + } + else if(iEffectLawChaos != 0 || iEffectGoodEvil != 0) + { + if(iEffectLawChaos == iLawChaos || iEffectGoodEvil == iGoodEvil) + { + //Define alignment-based attack increase and set the bonus if the highest one on that hand + iBonus = GetEffectInteger(eEffect, 0); + if(iBonus > iCappedRightBonus) iCappedRightBonus = iBonus; + } + } + else if(iEffectLawChaos == 0 && iEffectGoodEvil == 0 && iEffectRace == 28) + { + //Define generic attack increase and set the bonus if the highest one on that hand + iBonus = GetEffectInteger(eEffect, 0); + if(iBonus > iCappedRightBonus) iCappedRightBonus = iBonus; + } + + } + else if(nType == EFFECT_TYPE_ATTACK_DECREASE && iEffectSubtype == 1) + { + if(iEffectRace != 28) + { + if(iEffectRace == iRace) + { + //Define racial type-based attack increase and set the bonus if the highest one on that hand + iBonus = GetEffectInteger(eEffect, 0); + if(iBonus > iCappedRightPen) iCappedRightPen = iBonus; + } + } + else if(iEffectLawChaos != 0 || iEffectGoodEvil != 0) + { + if(iEffectLawChaos == iLawChaos || iEffectGoodEvil == iGoodEvil) + { + //Define alignment-based attack increase and set the bonus if the highest one on that hand + iBonus = GetEffectInteger(eEffect, 0); + if(iBonus > iCappedRightPen) iCappedRightPen = iBonus; + } + } + else if(iEffectLawChaos == 0 && iEffectGoodEvil == 0 && iEffectRace == 28) + { + //Define generic attack increase and set the bonus if the highest one on that hand + iBonus = GetEffectInteger(eEffect, 0); + if(iBonus > iCappedRightPen) iCappedRightPen = iBonus; + } + + } + + eEffect = GetNextEffect(oAttacker); + } + + iCappedRightBonus -= iCappedRightPen; + } + + if(bIsDoubleSidedWeapon || GetIsOffhandWeaponType(iOffhandWeaponType)) + { + int bOffHandLight; + + if(bIsDoubleSidedWeapon) + bOffHandLight = TRUE; + else + { // find out offhand weapon size, to see if it is light + int iOffhandWeaponSize; + if (iOffhandWeaponType == iWeaponType) + iOffhandWeaponSize = iWeaponSize; + else + iOffhandWeaponSize = StringToInt(Get2DACache("baseitems", "WeaponSize", iOffhandWeaponType)); + + // is the size appropriate for a light weapon? + bOffHandLight = (iOffhandWeaponSize < iCreatureSize); // motu99: added creature size + } + + int bHasTWF = FALSE; + int bHasAmbidex = FALSE; + + // since there is no way to determine the value of AB effects + // applied to a PC, I had to add Absolute Ambidexterity here + + int bHasAbsoluteAmbidex = FALSE; + + if(GetHasFeat(FEAT_AMBIDEXTERITY, oAttacker) ) bHasAmbidex = TRUE; // motu99: Ambidex and TWF were mixed up, changed that + if(GetHasFeat(FEAT_TWO_WEAPON_FIGHTING, oAttacker) ) bHasTWF = TRUE; + if(GetHasFeat(FEAT_ABSOLUTE_AMBIDEX, oAttacker) ) bHasAbsoluteAmbidex = TRUE; + + if(GetLevelByClass(CLASS_TYPE_RANGER, oAttacker) >= RANGER_LEVEL_DUAL_WIELD) + { + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oAttacker); + int iArmorType = GetArmorType(oArmor); + if(iArmorType != ARMOR_TYPE_MEDIUM && iArmorType != ARMOR_TYPE_HEAVY) + { + bHasTWF = TRUE; + bHasAmbidex = TRUE; + } + else + { // ranger looses all dual wielding abilities if in medium armor or higher + bHasTWF = FALSE; + bHasAmbidex = FALSE; + } + + } + + // a tempest using two sided weapons or in medium or heavy armor looses absolute ambidex feat + int iTempestLevel = GetLevelByClass(CLASS_TYPE_TEMPEST, oAttacker); + int nBloodclaw = GetLevelByClass(CLASS_TYPE_BLOODCLAW_MASTER, oAttacker); + if(iTempestLevel) + { + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oAttacker); + int iArmorType = GetArmorType(oArmor); + if(bIsDoubleSidedWeapon || iArmorType == ARMOR_TYPE_MEDIUM || iArmorType == ARMOR_TYPE_HEAVY) + bHasAbsoluteAmbidex = FALSE; + else if (iTempestLevel >= TEMPEST_LEVEL_ABS_AMBIDEX || nBloodclaw >= 2) + bHasAbsoluteAmbidex = TRUE; + } + + if(iOffhand && !bHasAmbidex) iTWFPenalty = 10; // motu99: old code was wrong, because of confusing variable name (what should have been called iOffhand was called iMainHand) + else iTWFPenalty = 6; + + if(bHasTWF) iTWFPenalty -= 2; + if(bOffHandLight) iTWFPenalty -= 2; + if(bHasAbsoluteAmbidex) iTWFPenalty -= 2; // motu99: actually, if the absoluteambidex adds a permanent +2 to AB, this should be deleted + + } + // power attack can only be used in melee + // Handle the PRC Power Attack BA pay, if any. + iCombatModeBonus -= GetLocalInt(oAttacker, "PRC_PowerAttack_Level"); + + // Power Attack combat modes. The stacking of these with PRC Power attack is handled by the PRC PA scripts + if (iCombatMode == COMBAT_MODE_POWER_ATTACK) iCombatModeBonus -= 5; + else if(iCombatMode == COMBAT_MODE_IMPROVED_POWER_ATTACK) iCombatModeBonus -= 10; + +// motu99: might have to add flurry combat mode (is covered in initialization of PerformAttack and PerformAttackRound, but it can change) +// if (iCombatMode == COMBAT_MODE_FLURRY_OF_BLOWS) iCombatModeBonus -= 2; + + // dirty fighting, although a combat mode, should not be checked here, because we forfeit all attacks in the round when we use it + + } + else // Ranged Specific Rules + { + // range penalty not yet accounted for as the 2da's are messed up + // the range increment for throwing axes is 63, while it's 20 for bows??? + + // dex or wis bonus + if(iWis > iDex && GetHasFeat(FEAT_ZEN_ARCHERY, oAttacker)) + iAbilityBonus = iWis; + else + iAbilityBonus = iDex; + + if(GetMeleeAttackers15ft(oAttacker)) // motu99: The function actually checks if attackers are within 10 feet + { + if(GetHasFeat(FEAT_POINT_BLANK_SHOT,oAttacker)) + iFeatBonus += 1; + else + iFeatBonus -= 4; + } + + // Halfling +1 bonus for throwing weapons + if (GetIsThrowingWeaponType(iWeaponType) && GetHasFeat(FEAT_GOOD_AIM, oAttacker)) + iFeatBonus += 1; // we add this to the feat bonus, because it only depends on the feat and the weapon used, not on the defender + } + + // if they have intuitive attack feat, checks if wisdom is highest, + // this applies to ranged attacks with crossbows and slings, + // and melee attacks with any other simple weapon, but not to touch attacks + // motu99: optimized the sequence of checks (least expensive check first) + if( iWis > iAbilityBonus + && GetIsSimpleWeaponType(iWeaponType) + && GetHasFeat(FEAT_INTUITIVE_ATTACK, oAttacker) ) + iAbilityBonus = iWis; + + //touch attacks always use dex, no matter what. Therefore override any calculations we have done so far + if(iTouchAttackType) + iAbilityBonus = iDex; + + // Expertise penalties apply to all attack rolls + if (iCombatMode == COMBAT_MODE_EXPERTISE) iCombatModeBonus -= 5; + else if(iCombatMode == COMBAT_MODE_IMPROVED_EXPERTISE) iCombatModeBonus -= 10; + + // get the magical attack bonus on the attacker from AB increasing spells + iMagicBonus = GetMagicalAttackBonus(oAttacker, oDefender); + + // everything starts from BAB + iAttackBonus = iBAB; + + // adds boni from feats + iAttackBonus += iFeatBonus; + + // adds ability modifiers to attack bonus + iAttackBonus += iAbilityBonus; + + // subtracts two weapon fighting penalties (iTWFPenalty is always positive or zero) + iAttackBonus -= iTWFPenalty; + + // adds bonus from combat modes (these are actually penalties, so iCombatModeBonus is always negative) + iAttackBonus += iCombatModeBonus; + + // Adds all spell bonuses / penalties on the PC + iCappedAttackBonus += iMagicBonus; + + // up to now iAttackBonus should be independent of Defender, so it is likely to remain constant during a whole round + // however, combat mode can change, weapons can be equipped / unequipped (not always starts a new combat round) + // spells can run out during the round, etc. + + // adds weapon enhancement to the bonus + iCappedAttackBonus += iWeaponEnhancement; + + // adds weapon attack boni to the bonus + iCappedAttackBonus += iWeaponAttackBonus; + + //ebonfowl: adds handedness attack bonus to the capped total + //You can add both as this is attack-specific so one will always be 0 + //Hand-specfic penalties are already subtracted out at this point + iCappedAttackBonus += iCappedLeftBonus; + iCappedAttackBonus += iCappedRightBonus; + + //ebonfowl: cutoff iCappedAttackBonus at the limit set globally if PRC_CAPPED_ATTACK_BONUS is TRUE + + if(GetPRCSwitch(PRC_CAPPED_ATTACK_BONUS)) + { + int iAttackBonusCap = GetAttackBonusLimit(); + + if (iCappedAttackBonus > iAttackBonusCap) iCappedAttackBonus = iAttackBonusCap; + } + + //ebonfowl: adds the capped effects to the other effects for the final total + + iAttackBonus += iCappedAttackBonus; + + if (GetPRCSwitch(PRC_COMBAT_DEBUG)) + { + string sDebugFeedback = PRC_TEXT_WHITE; + sDebugFeedback += ("AB = " + IntToString(iAttackBonus) + " : "); + sDebugFeedback += ("BAB (" + IntToString(iBAB) + ")"); + sDebugFeedback += (" + Feats (" + IntToString(iFeatBonus) + ")"); + sDebugFeedback += (" + Stat Bonus (" + IntToString(iAbilityBonus) + ")"); + sDebugFeedback += (" - TWF Penalty (" + IntToString(iTWFPenalty) + ")"); + sDebugFeedback += (" - Combat Mode (" + IntToString(-iCombatModeBonus) + ")"); + sDebugFeedback += (" + Spells (" + IntToString(iMagicBonus) + ")"); + sDebugFeedback += (" + WeapEnh (" + IntToString(iWeaponEnhancement) + ")"); + sDebugFeedback += (" + WeapAB (" + IntToString(iWeaponAttackBonus) + ")"); + DoDebug(sDebugFeedback); + } + + return iAttackBonus; +} + +// this is to be used in GetAttackRoll since it needs to be checked every attack instead of each round. +int GetAttackModVersusDefender(object oDefender, object oAttacker, object oWeapon, int iTouchAttackType = FALSE) +{ + int iAttackMod = 0; + + // add bonus +2 for flanking, invisible attacker, attacking blind opponent + // motu99: Note that GetIsFlanked does not work reliably (at least in PRC 3.1c) + if( GetIsFlanked(oDefender, oAttacker) ) + { + if (DEBUG_BATTLE_FLANKING) FloatingTextStringOnCreature("**** FLANKING AB BONUS ****", oDefender); + if (DEBUG_BATTLE_FLANKING) DoDebug("Flanking bonus to AB", oDefender); + iAttackMod += 2; + if(GetLocalInt(oAttacker, "UmbralStrike")) iAttackMod += 2; +// DoDebug("GetAttackModVersusDefender: Defender flanked"); + } + //if (DEBUG) DoDebug("GetAttackModVersusDefender: End Section #1"); + if ( ( PRCGetHasEffect(EFFECT_TYPE_INVISIBILITY, oAttacker) + || PRCGetHasEffect(EFFECT_TYPE_IMPROVEDINVISIBILITY, oAttacker) + && !GetHasFeat(FEAT_BLIND_FIGHT, oDefender) + ) + || PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, oDefender) + ) + iAttackMod += 2; + + // +2 attack bonus if they are stunned or frightened + if( PRCGetHasEffect(EFFECT_TYPE_STUNNED, oDefender) + || PRCGetHasEffect(EFFECT_TYPE_FRIGHTENED, oDefender) ) + { + iAttackMod += 2; +// DoDebug("GetAttackModVersusDefender: Defender frightened or stunned"); + } + //if (DEBUG) DoDebug("GetAttackModVersusDefender: End Section #2"); + int bIsMeleeWeapon = !GetWeaponRanged(oWeapon); + int bIsRangedTouchAttack = iTouchAttackType == TOUCH_ATTACK_RANGED || iTouchAttackType == TOUCH_ATTACK_RANGED_SPELL; + if(bIsRangedTouchAttack) + bIsMeleeWeapon = FALSE; + + int bIsKnockedDown = GetHasFeatEffect(FEAT_KNOCKDOWN, oDefender) || GetHasFeatEffect(FEAT_IMPROVED_KNOCKDOWN, oDefender); + + if(bIsMeleeWeapon) + { + // +4 to attack in melee against a helpless target. + if(GetIsHelpless(oDefender)) iAttackMod += 4; + + // +4 attack bonus to a prone target (in melee) / -4 in ranged combat + if(bIsKnockedDown) iAttackMod += 4; + } + else // ranged combat + { + // -4 attack bonus to a prone target in ranged combat + if(bIsKnockedDown) iAttackMod -= 4; + } + //if (DEBUG) DoDebug("GetAttackModVersusDefender: End Section #3"); + + // Battle training (Gnomes and Dwarves) + // adds +1 based on enemy race +// int iRacialType = MyPRCGetRacialType(oAttacker); // motu99: don't need the attacker race, just check for the feats! +// if(iRacialType == RACIAL_TYPE_DWARF || iRacialType == RACIAL_TYPE_GNOME) + { + int bOrcTrain = GetHasFeat(FEAT_BATTLE_TRAINING_VERSUS_ORCS, oAttacker); + int bGobTrain = GetHasFeat(FEAT_BATTLE_TRAINING_VERSUS_GOBLINS, oAttacker); + int bLizTrain = GetHasFeat(FEAT_BATTLE_TRAINING_VERSUS_REPTILIANS, oAttacker); + int iEnemyRace = MyPRCGetRacialType(oDefender); + + if(bOrcTrain && iEnemyRace == RACIAL_TYPE_HUMANOID_ORC) iAttackMod += 1; + if(bGobTrain && iEnemyRace == RACIAL_TYPE_HUMANOID_GOBLINOID) iAttackMod += 1; + if(bLizTrain && iEnemyRace == RACIAL_TYPE_HUMANOID_REPTILIAN) iAttackMod += 1; + } + //if (DEBUG) DoDebug("GetAttackModVersusDefender: End Section #4"); +// if( GetHasFeat(FEAT_SMALL, oAttacker) || GetHasFeat(FEAT_LARGE, oAttacker) ) // don't really need the feat, just check for size difference + { + int iDefenderSize = PRCGetCreatureSize(oDefender); + int iAttackerSize = PRCGetCreatureSize(oAttacker); + if(iAttackerSize < iDefenderSize) // we could also use size difference to calculate the attack mod; have to check PnP rules + iAttackMod++; + if(iAttackerSize > iDefenderSize) + iAttackMod--; + } +// DoDebug("GetAttackModVersusDefender() returns " + IntToString(iAttackMod)); + //if (DEBUG) DoDebug("GetAttackModVersusDefender: End Section #5"); + return iAttackMod; +} + +int GetAttackRoll(object oDefender, object oAttacker, object oWeapon, int iOffhand = 0, int iAttackBonus = 0, int iMod = 0, int bShowFeedback = TRUE, float fDelay = 0.0, int iTouchAttackType = FALSE) +// returns 1 on a normal hit +// returns 2 on a critical hit +// never returns a 2, if defender is critical immune +{ + if (!iAttackBonus) // only calculate attack bonus, if not already done so + iAttackBonus = GetAttackBonus(oDefender, oAttacker, oWeapon, iOffhand, iTouchAttackType); + + int iDiceRoll = d20(); + //if (DEBUG) DoDebug("Starting DSPerfectOrder"); + // All rolls = 11 for this guy + if (GetLocalInt(oAttacker, "DSPerfectOrder")) + iDiceRoll = 11; + //if (DEBUG) DoDebug("Ending DSPerfectOrder"); + //string sDebugFeedback = ""; + //if (DEBUG) DoDebug("GetAttackRoll: Line #1"); + //int bDebug = GetPRCSwitch(PRC_COMBAT_DEBUG); + //if (DEBUG) DoDebug("GetAttackRoll: Line #2"); + //if (bDebug) sDebugFeedback += "d20 (" + IntToString(iDiceRoll) + ")"; + //if (DEBUG) DoDebug("GetAttackRoll: Line #3"); + //if (bDebug) sDebugFeedback += " + AB (" + IntToString(iAttackBonus) + ")"; + //if (DEBUG) DoDebug("GetAttackRoll: Line #4"); + iAttackBonus += iMod; + // Divine Fury ability + if(GetLocalInt(oAttacker, "RKVDivineFury")) + iAttackBonus += 4; + + // Master of Nine + if(GetLevelByClass(CLASS_TYPE_MASTER_OF_NINE, oAttacker) > 2) + { + int nLastClass = GetLocalInt(oAttacker, "PRC_CurrentManeuver_InitiatingClass") - 1;//GetInitiatingClass(oAttacker); + if(nLastClass == CLASS_TYPE_WARBLADE + || nLastClass == CLASS_TYPE_SWORDSAGE + || nLastClass == CLASS_TYPE_CRUSADER) + { + // Increases maneuver attacks by 2 + iAttackBonus += 2; + } + } + + // Shadow Sun Ninja + if(GetLocalInt(oAttacker, "SSN_DARKWL")) + { + effect eSSN = GetFirstEffect(oDefender); + while(GetIsEffectValid(eSSN)) + { + if(GetEffectType(eSSN) == EFFECT_TYPE_BLINDNESS) + { + iAttackBonus += 4; + break; + } + eSSN = GetNextEffect(oDefender); + } + } + //if (DEBUG) DoDebug("GetAttackRoll: Line #5"); + //if(bDebug) sDebugFeedback += " - APR penalty (" + IntToString(iMod * -1) + ")"; + //if (DEBUG) DoDebug("Starting GetAttackModVersusDefender"); + int iDefenderMod = GetAttackModVersusDefender(oDefender, oAttacker, oWeapon, iTouchAttackType); + iAttackBonus += iDefenderMod; + + SetLocalInt(oAttacker, "PRCAttackBonus", iDiceRoll + iAttackBonus); + DelayCommand(1.5, DeleteLocalInt(oAttacker, "PRCAttackBonus")); + + //if(bDebug) sDebugFeedback += " + Atk vs Def Adj (" + IntToString(iDefenderMod) + ")"; + + //if (DEBUG) DoDebug("Starting GetDefenderAC"); + int iEnemyAC = GetDefenderAC(oDefender, oAttacker, iTouchAttackType); + + //if (bDebug) sDebugFeedback += " *versus* AC (" + IntToString(iEnemyAC) + ")"; + //if (bDebug) sDebugFeedback = COLOR_WHITE + "Attack Roll = " + IntToString(iAttackBonus + iDiceRoll) + ": " + sDebugFeedback; + //if (DEBUG) DoDebug("GetAttackRoll: End Section #1"); + int iWeaponType = GetBaseItemType(oWeapon); + int iCritThreat = GetWeaponCriticalRange(oAttacker, oWeapon); + + //If using Killing Shot, ciritical range improves by 2; + if(GetLocalInt(oAttacker, "KillingShotCritical") ) + { + iCritThreat -= 2; + DeleteLocalInt(oAttacker, "KillingShotCritical"); + } + + // print off-hand of off-hand attack + string sFeedback =""; + if(iOffhand) sFeedback += PRC_TEXT_ORANGE + GetStringByStrRef(1559)/*"Off Hand"*/ + " : "; + + // change color of attacker if it is Player or NPC + if(GetIsPC(oAttacker)) sFeedback += PRC_TEXT_LIGHT_BLUE; + else sFeedback += PRC_TEXT_LIGHT_PURPLE; + + // display name of attacker + sFeedback += GetName(oAttacker); + + int bIsMeleeTouchAttack = iTouchAttackType == TOUCH_ATTACK_MELEE || iTouchAttackType == TOUCH_ATTACK_MELEE_SPELL; + int bIsRangedTouchAttack = iTouchAttackType == TOUCH_ATTACK_RANGED || iTouchAttackType == TOUCH_ATTACK_RANGED_SPELL; + // show proper message for touch attacks or normal attacks. + if(bIsRangedTouchAttack) + sFeedback += PRC_TEXT_PURPLE + " attempts ranged touch attack on "; + else if(bIsMeleeTouchAttack) + sFeedback += PRC_TEXT_PURPLE + " attempts touch attack on "; + else + sFeedback += PRC_TEXT_ORANGE + " attacks "; + + sFeedback += GetName(oDefender) + ": "; + //if (DEBUG) DoDebug("GetAttackRoll: End Section #2"); + int iReturn = 0; + // roll concealment check + int iConcealment = GetIsConcealed(oDefender, oAttacker); + int iConcealRoll = d100(); + int bEnemyIsConcealed = FALSE; + + if(iConcealRoll <= iConcealment) + { + // Those with blind-fight get a re-roll + if( GetHasFeat(FEAT_BLIND_FIGHT, oAttacker) ) + { + iConcealRoll = d100(); + } + + if(iConcealRoll <= iConcealment) + { + bEnemyIsConcealed = TRUE; + sFeedback += "*"+GetStringByStrRef(514)/*miss*/+"*: (Enemy is Concealed)"; + iReturn = 0; + } + } + // if (DEBUG) DoDebug("GetAttackRoll: End Section #3"); + if (!bEnemyIsConcealed) + { + // Autmatically dodge the first attack of each round + if(bFirstAttack && GetHasFeat(FEAT_EPIC_DODGE, oDefender)) + { + sFeedback += "*"+GetStringByStrRef(514)/*miss*/+"*: (Enemy Dodged)"; + iReturn = 0; + } + + // did we hit? meaning we overcome the enemy's AC and did not roll a one (iDiceRoll == 1) + int bHit = iDiceRoll + iAttackBonus > iEnemyAC && iDiceRoll != 1; + + // Check for a critical threat + if( iDiceRoll == 20 // we always score a critical hit on a twenty + || (bHit && iDiceRoll >= iCritThreat) ) // otherwise we must have hit and overcome the critical threat range + { + sFeedback += "*Critical Hit*: (" + IntToString(iDiceRoll) + " + " + IntToString(iAttackBonus) + " = " + IntToString(iDiceRoll + iAttackBonus) + "): "; + + //Roll again to see if we scored a critical hit + //FistOfRaziels of over level 3 automatically confirm critical hits + //when smiting evil + int iCritThreatRoll; + if(GetLocalInt(oAttacker, "FistOfRazielSpecialSmiteCritical") ) + { + iCritThreatRoll = 10000; + DeleteLocalInt(oAttacker, "FistOfRazielSpecialSmiteCritical"); + } + else + { + iCritThreatRoll = d20(); + if (GetLocalInt(oDefender, "BoneCrusher")) iCritThreatRoll += 10; + if (GetLevelByClass(CLASS_TYPE_WARBLADE, oAttacker) >= 3) + { + iCritThreatRoll += GetAbilityModifier(ABILITY_INTELLIGENCE, oAttacker); //Warblade Battle Ardorr + if (DEBUG_BATTLE_ARDOR) DoDebug("Warblade Battle Ardor critical attack threat roll bonus"); + } + } + // if (DEBUG) DoDebug("GetAttackRoll: End Section #4"); + + if(!GetIsImmune(oDefender, IMMUNITY_TYPE_CRITICAL_HIT) ) + { + sFeedback += "*Threat Roll*: (" + IntToString(iCritThreatRoll) + " + " + IntToString(iAttackBonus) + " = " + IntToString(iCritThreatRoll + iAttackBonus) + ")"; + if(iCritThreatRoll + iAttackBonus > iEnemyAC) iReturn = 2; + else iReturn = 1; + } + else + { + sFeedback += "*Target Immune to Critical Hits*"; + iReturn = 1; + } + } + //Just a regular hit + else if(bHit) + { + sFeedback += "*hit*: (" + IntToString(iDiceRoll) + " + " + IntToString(iAttackBonus) + " = " + IntToString(iDiceRoll + iAttackBonus) + ")"; + iReturn = 1; + } + //Missed + else + { + sFeedback += "*miss*: (" + IntToString(iDiceRoll) + " + " + IntToString(iAttackBonus) + " = " + IntToString(iDiceRoll + iAttackBonus) + ")"; + iReturn = 0; + } + //if (DEBUG) DoDebug("GetAttackRoll: End Section #5"); + } + //arrow VFX + //this is done with crossbows and other ranged weapons + //at least you see some projectile rather than none at all + if(GetIsRangedWeaponType(iWeaponType)) + { + if(iReturn) + AssignCommand(oAttacker, ApplyEffectToObject(DURATION_TYPE_INSTANT, + EffectVisualEffect(NORMAL_ARROW, FALSE), oDefender)); + else + AssignCommand(oAttacker, ApplyEffectToObject(DURATION_TYPE_INSTANT, + EffectVisualEffect(NORMAL_ARROW, TRUE), oDefender)); + } + + if(bShowFeedback) + { + SendMessageToPC(oAttacker, sFeedback); // DelayCommand(fDelay, SendMessageToPC(oAttacker, sFeedback)); + //if (bDebug) SendMessageToPC(oAttacker, sDebugFeedback); + } + // if (DEBUG) DoDebug("GetAttackRoll: End Section #6"); + return iReturn; +} + +//::////////////////////////////////////////////// +//:: Damage Bonus Functions +//::////////////////////////////////////////////// + +int GetFavoredEnemyFeat(int iRacialType) +{ + switch(iRacialType) + { + case RACIAL_TYPE_DWARF: return FEAT_FAVORED_ENEMY_DWARF; + case RACIAL_TYPE_ELF: return FEAT_FAVORED_ENEMY_ELF; + case RACIAL_TYPE_GNOME: return FEAT_FAVORED_ENEMY_GNOME; + case RACIAL_TYPE_HALFLING: return FEAT_FAVORED_ENEMY_HALFLING; + case RACIAL_TYPE_HALFELF: return FEAT_FAVORED_ENEMY_HALFELF; + case RACIAL_TYPE_HALFORC: return FEAT_FAVORED_ENEMY_HALFORC; + case RACIAL_TYPE_HUMAN: return FEAT_FAVORED_ENEMY_HUMAN; + case RACIAL_TYPE_ABERRATION: return FEAT_FAVORED_ENEMY_ABERRATION; + case RACIAL_TYPE_ANIMAL: return FEAT_FAVORED_ENEMY_ANIMAL; + case RACIAL_TYPE_BEAST: return FEAT_FAVORED_ENEMY_BEAST; + case RACIAL_TYPE_CONSTRUCT: return FEAT_FAVORED_ENEMY_CONSTRUCT; + case RACIAL_TYPE_DRAGON: return FEAT_FAVORED_ENEMY_DRAGON; + case RACIAL_TYPE_HUMANOID_GOBLINOID: return FEAT_FAVORED_ENEMY_GOBLINOID; + case RACIAL_TYPE_HUMANOID_MONSTROUS: return FEAT_FAVORED_ENEMY_MONSTROUS; + case RACIAL_TYPE_HUMANOID_ORC: return FEAT_FAVORED_ENEMY_ORC; + case RACIAL_TYPE_HUMANOID_REPTILIAN: return FEAT_FAVORED_ENEMY_REPTILIAN; + case RACIAL_TYPE_ELEMENTAL: return FEAT_FAVORED_ENEMY_ELEMENTAL; + case RACIAL_TYPE_FEY: return FEAT_FAVORED_ENEMY_FEY; + case RACIAL_TYPE_GIANT: return FEAT_FAVORED_ENEMY_GIANT; + case RACIAL_TYPE_MAGICAL_BEAST: return FEAT_FAVORED_ENEMY_MAGICAL_BEAST; + case RACIAL_TYPE_OUTSIDER: return FEAT_FAVORED_ENEMY_OUTSIDER; + case RACIAL_TYPE_SHAPECHANGER: return FEAT_FAVORED_ENEMY_SHAPECHANGER; + case RACIAL_TYPE_UNDEAD: return FEAT_FAVORED_ENEMY_UNDEAD; + case RACIAL_TYPE_VERMIN: return FEAT_FAVORED_ENEMY_VERMIN; + case RACIAL_TYPE_PLANT: return FEAT_FAVORED_ENEMY_PLANT; + case RACIAL_TYPE_OOZE: return FEAT_FAVORED_ENEMY_OOZE; + } + return -1; +} + +int GetFavoredEnemyLevel(object oAttacker) +{ + return (GetLevelByClass(CLASS_TYPE_HARPER, oAttacker) + + GetLevelByClass(CLASS_TYPE_RANGER, oAttacker) + + GetLevelByClass(CLASS_TYPE_ULTIMATE_RANGER, oAttacker) // motu99: added ultimate ranger. might have to add more + // Additional PRC's + // + GetLevelByClass(CLASS_TYPE_*, oAttacker) + ); +} + +int GetFavoredEnemyDamageBonus(object oDefender, object oAttacker) +{ + int iRangerLevel = GetFavoredEnemyLevel(oAttacker); + + // Exit if the class can not have a favored enemy + // Prevents lots of useless code from running + if(!iRangerLevel) + return 0; + + int iDamageBonus = 0; + +// float fDistance = GetDistanceBetween(oAttacker, oDefender); +// if(fDistance <= FeetToMeters(30.0f) ) // motu99: Do you have to be within 30 feet to gain favorite enemy boni? +// { + int iRacialType = MyPRCGetRacialType(oDefender); + if(GetHasFeat(GetFavoredEnemyFeat(iRacialType), oAttacker)) + { + iDamageBonus = (iRangerLevel / 5) + 1; + // add in 2d6 damage for bane of enemies + if(GetHasFeat(FEAT_EPIC_BANE_OF_ENEMIES, oAttacker)) + iDamageBonus += d6(2); + } +// } + + return iDamageBonus; +} + +int GetMightyWeaponBonus(object oWeap) +{ + int iMighty = 0; + int iTemp = 0; + itemproperty ip = GetFirstItemProperty(oWeap); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_MIGHTY) + iTemp = GetItemPropertyCostTableValue(ip); + + if(iTemp > iMighty) iMighty = iTemp; + + ip = GetNextItemProperty(oWeap); + } + return iMighty; +} + +int GetWeaponEnhancement(object oWeapon, object oDefender, object oAttacker) +{ +// this function determines the maximum enhancement bonus from the weapon and subtracts the maximum penalty + int iEnhancement = 0; + int iPenalty = 0; + int iTemp; + + int iRace = MyPRCGetRacialType(oDefender); + + int iGoodEvil = GetAlignmentGoodEvil(oDefender); + int iLawChaos = GetAlignmentLawChaos(oDefender); + int iAlignSp = GetItemPropAlignment(iGoodEvil,iLawChaos); + int iAlignGr; + + itemproperty ip = GetFirstItemProperty(oWeapon); + while(GetIsItemPropertyValid(ip)) + { + iTemp = 0; + int iItemPropType = GetItemPropertyType(ip); + switch(iItemPropType) + { + case ITEM_PROPERTY_ENHANCEMENT_BONUS: + iTemp = GetItemPropertyCostTableValue(ip); // motu99: was iTemp = GetDamageByConstant(GetItemPropertyCostTableValue(ip), TRUE); but this returned wrong values + break; + + case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT: + if(GetItemPropertySubType(ip) == iAlignSp) iTemp = GetItemPropertyCostTableValue(ip); + break; + + case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP: + iAlignGr = GetItemPropertySubType(ip); + if (iAlignGr == ALIGNMENT_NEUTRAL) + { + if (iAlignGr == iLawChaos) iTemp = GetItemPropertyCostTableValue(ip); // motu99: was iTemp = GetDamageByConstant(GetItemPropertyCostTableValue(ip), TRUE); but that seemed as wrong as ITEM_PROPERTY_ENHANCEMENT_BONUS + } + else if (iAlignGr == iGoodEvil || iAlignGr == iLawChaos || iAlignGr == IP_CONST_ALIGNMENTGROUP_ALL) + iTemp = GetItemPropertyCostTableValue(ip); // motu99: was iTemp = GetDamageByConstant(GetItemPropertyCostTableValue(ip), TRUE); but that seemed as wrong as ITEM_PROPERTY_ENHANCEMENT_BONUS + break; + + case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP: + if(GetItemPropertySubType(ip) == iRace) iTemp = GetItemPropertyCostTableValue(ip); + break; + + // detects holy avenger property and adds proper enhancement bonus + case ITEM_PROPERTY_HOLY_AVENGER: + iTemp = 5; + break; + + case ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER: + iTemp = -GetItemPropertyCostTableValue(ip); // motu99: was iTemp = -GetDamageByConstant(GetItemPropertyCostTableValue(ip), TRUE); but that seemed as wrong as ITEM_PROPERTY_ENHANCEMENT_BONUS + break; + + } + + if(iTemp > 0) + { + if (iTemp > iEnhancement) iEnhancement = iTemp; + } + else + { + if(iTemp < iPenalty) iPenalty = iTemp; + } + + ip = GetNextItemProperty(oWeapon); + } + + iEnhancement -= iPenalty; + + //if ranged check for ammo + if(GetWeaponRanged(oWeapon) ) + { + // Adds ammo bonus if it is higher than weapon bonus + int iAmmoEnhancement = GetAmmunitionEnhancement(oWeapon, oDefender, oAttacker); + if(iAmmoEnhancement > iEnhancement) iEnhancement = iAmmoEnhancement; + + // Arcane Archer Enchant Arrow Bonus + int iAALevel = GetLevelByClass(CLASS_TYPE_ARCANE_ARCHER, oAttacker); + int iAAEnchantArrow = 0; + + if(iAALevel > 0) iAAEnchantArrow = ((iAALevel + 1) / 2); + if(iAAEnchantArrow > iEnhancement) iEnhancement = iAAEnchantArrow; + } + + return iEnhancement; +} + +int GetMonkEnhancement(object oWeapon, object oDefender, object oAttacker) +{ + int iMonkEnhancement = GetWeaponEnhancement(oWeapon, oDefender, oAttacker); + int iTemp; + + // returns enhancement bonus for ki strike + if(GetIsNaturalWeapon(oWeapon)) + { + if(GetHasFeat(FEAT_EPIC_IMPROVED_KI_STRIKE_5, oAttacker)) iTemp = 5; + else if(GetHasFeat(FEAT_EPIC_IMPROVED_KI_STRIKE_4, oAttacker)) iTemp = 4; + else if(GetHasFeat(FEAT_KI_STRIKE, oAttacker) ) + { + int iMonkLevel = GetLevelByClass(CLASS_TYPE_MONK, oAttacker); + iTemp = 1; + if(iMonkLevel > 12) iTemp = 2; + if(iMonkLevel > 15) iTemp = 3; + } + if(iTemp > iMonkEnhancement) iMonkEnhancement = iTemp; + } + + return iMonkEnhancement; +} + +int GetDamagePowerConstant(object oWeapon, object oDefender, object oAttacker) +{ +// motu99: call to GetMonkEnhancement is executed several times; first for attack bonus, then for enhancement, now for damage power +// better store the iEnhancement value (from attack bonus calculation) and use it later to determine damage + int iDamagePower = GetMonkEnhancement(oWeapon, oDefender, oAttacker); + + // Determine Damage Power (Enhancement Bonus of Weapon) + // Damage Power 6 is Magical and hits everything + // So for +6 and higher are actually 7-21, so add +1 + if(iDamagePower > 5) iDamagePower += 1; + if(iDamagePower < 0 ) iDamagePower = 0; + + //if (DEBUG) DoDebug("prc_inc_combat DamagePowerConstant "+IntToString(iDamagePower)); + + return iDamagePower; +} + +// motu99: Didn't check this +int GetAmmunitionEnhancement(object oWeapon, object oDefender, object oAttacker) +{ + int iTemp; + int iBonus, iDamageType; + int iType = GetBaseItemType(oWeapon); + + + int iRace = MyPRCGetRacialType(oDefender); + + int iGoodEvil = GetAlignmentGoodEvil(oDefender); + int iLawChaos = GetAlignmentLawChaos(oDefender); + int iAlignSp = GetItemPropAlignment(iGoodEvil, iLawChaos); + int iAlignGr; + + object oAmmu = GetAmmunitionFromWeapon(oWeapon, oAttacker); + int iBase = GetBaseItemType(oAmmu); + + //Get Damage Bonus Properties from oWeapon + itemproperty ip = GetFirstItemProperty(oWeapon); + while(GetIsItemPropertyValid(ip)) + { + int iCostVal = GetItemPropertyCostTableValue(ip); + int iPropType = GetItemPropertyType(ip); + if(iPropType == ITEM_PROPERTY_DAMAGE_BONUS) + { + iDamageType = GetItemPropertyParam1Value(ip); + + if( (iBase == BASE_ITEM_BOLT || iBase == BASE_ITEM_ARROW) && iDamageType == IP_CONST_DAMAGETYPE_PIERCING ) + { + iTemp = GetDamageByConstant(iCostVal, TRUE); + iBonus = iTemp> iBonus ? iTemp:iBonus ; + } + else if ( iBase == BASE_ITEM_BULLET && iDamageType == IP_CONST_DAMAGETYPE_BLUDGEONING ) + { + iTemp = GetDamageByConstant(iCostVal, TRUE); + iBonus = iTemp> iBonus ? iTemp:iBonus ; + } + } + if(iPropType == ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP) + { + iAlignGr = GetItemPropertySubType(ip); + iDamageType = GetItemPropertyParam1Value(ip); + + int bIsAttackingAlignment = FALSE; + + if (iAlignGr == ALIGNMENT_NEUTRAL) + { + if (iAlignGr == iLawChaos) bIsAttackingAlignment = TRUE; + } + else if (iAlignGr == iGoodEvil || iAlignGr == iLawChaos || iAlignGr == IP_CONST_ALIGNMENTGROUP_ALL) + bIsAttackingAlignment = FALSE; + + if(bIsAttackingAlignment) + { + if ( (iBase == BASE_ITEM_BOLT || iBase == BASE_ITEM_ARROW) && iDamageType == IP_CONST_DAMAGETYPE_PIERCING ) + { + iTemp = GetDamageByConstant(iCostVal, TRUE); + iBonus = iTemp> iBonus ? iTemp:iBonus ; + } + else if ( iBase == BASE_ITEM_BULLET && iDamageType == IP_CONST_DAMAGETYPE_BLUDGEONING ) + { + iTemp = GetDamageByConstant(iCostVal, TRUE); + iBonus = iTemp> iBonus ? iTemp:iBonus ; + } + } + } + if(iPropType == ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT) + { + if(GetItemPropertySubType(ip) == iAlignSp) iTemp = GetItemPropertyCostTableValue(ip); + else iTemp = 0; + + iDamageType = GetItemPropertyParam1Value(ip); + + if ( (iBase == BASE_ITEM_BOLT || iBase == BASE_ITEM_ARROW) && iDamageType == IP_CONST_DAMAGETYPE_PIERCING ) + { + iTemp = GetDamageByConstant(iCostVal, TRUE); + iBonus = iTemp> iBonus ? iTemp:iBonus ; + } + else if ( iBase == BASE_ITEM_BULLET && iDamageType == IP_CONST_DAMAGETYPE_BLUDGEONING ) + { + iTemp = GetDamageByConstant(iCostVal, TRUE); + iBonus = iTemp> iBonus ? iTemp:iBonus ; + } + } + if(iPropType == ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP) + { + if(GetItemPropertySubType(ip) == iRace) iTemp = GetItemPropertyCostTableValue(ip); + else iTemp = 0; iTemp = 0; + + iDamageType = GetItemPropertyParam1Value(ip); + + if ( (iBase == BASE_ITEM_BOLT || iBase == BASE_ITEM_ARROW) && iDamageType == IP_CONST_DAMAGETYPE_PIERCING ) + { + iTemp = GetDamageByConstant(iCostVal, TRUE); + iBonus = iTemp> iBonus ? iTemp:iBonus ; + } + else if ( iBase == BASE_ITEM_BULLET && iDamageType == IP_CONST_DAMAGETYPE_BLUDGEONING ) + { + iTemp = GetDamageByConstant(iCostVal, TRUE); + iBonus = iTemp> iBonus ? iTemp:iBonus ; + } + } + ip = GetNextItemProperty(oWeapon); + } + return iBonus; +} + +int GetDamageByConstant(int iDamageConst, int iItemProp) +{ + if(iItemProp) + { + switch(iDamageConst) + { + case IP_CONST_DAMAGEBONUS_1: + return 1; + case IP_CONST_DAMAGEBONUS_2: + return 2; + case IP_CONST_DAMAGEBONUS_3: + return 3; + case IP_CONST_DAMAGEBONUS_4: + return 4; + case IP_CONST_DAMAGEBONUS_5: + return 5; + case IP_CONST_DAMAGEBONUS_6: + return 6; + case IP_CONST_DAMAGEBONUS_7: + return 7; + case IP_CONST_DAMAGEBONUS_8: + return 8; + case IP_CONST_DAMAGEBONUS_9: + return 9; + case IP_CONST_DAMAGEBONUS_10: + return 10; + case IP_CONST_DAMAGEBONUS_11: + return 11; + case IP_CONST_DAMAGEBONUS_12: + return 12; + case IP_CONST_DAMAGEBONUS_13: + return 13; + case IP_CONST_DAMAGEBONUS_14: + return 14; + case IP_CONST_DAMAGEBONUS_15: + return 15; + case IP_CONST_DAMAGEBONUS_16: + return 16; + case IP_CONST_DAMAGEBONUS_17: + return 17; + case IP_CONST_DAMAGEBONUS_18: + return 18; + case IP_CONST_DAMAGEBONUS_19: + return 19; + case IP_CONST_DAMAGEBONUS_20: + return 20; + case IP_CONST_DAMAGEBONUS_1d4: + return d4(1); + case IP_CONST_DAMAGEBONUS_1d6: + return d6(1); + case IP_CONST_DAMAGEBONUS_1d8: + return d8(1); + case IP_CONST_DAMAGEBONUS_1d10: + return d10(1); + case IP_CONST_DAMAGEBONUS_1d12: + return d12(1); + case IP_CONST_DAMAGEBONUS_2d4: + return d4(2); + case IP_CONST_DAMAGEBONUS_2d6: + return d6(2); + case IP_CONST_DAMAGEBONUS_2d8: + return d8(2); + case IP_CONST_DAMAGEBONUS_2d10: + return d10(2); + case IP_CONST_DAMAGEBONUS_2d12: + return d12(2); + case IP_CONST_DAMAGEBONUS_3d4: + return d4(3); + case IP_CONST_DAMAGEBONUS_4d4: + return d4(4); + case IP_CONST_DAMAGEBONUS_5d4: + return d4(5); + case IP_CONST_DAMAGEBONUS_6d4: + return d4(6); + case IP_CONST_DAMAGEBONUS_7d4: + return d4(7); + case IP_CONST_DAMAGEBONUS_8d4: + return d4(8); + case IP_CONST_DAMAGEBONUS_9d4: + return d4(9); + case IP_CONST_DAMAGEBONUS_10d4: + return d4(10); + case IP_CONST_DAMAGEBONUS_3d6: + return d6(3); + case IP_CONST_DAMAGEBONUS_4d6: + return d6(4); + case IP_CONST_DAMAGEBONUS_5d6: + return d6(5); + case IP_CONST_DAMAGEBONUS_6d6: + return d6(6); + case IP_CONST_DAMAGEBONUS_7d6: + return d6(7); + case IP_CONST_DAMAGEBONUS_8d6: + return d6(8); + case IP_CONST_DAMAGEBONUS_9d6: + return d6(9); + case IP_CONST_DAMAGEBONUS_10d6: + return d6(10); + case IP_CONST_DAMAGEBONUS_3d8: + return d8(3); + case IP_CONST_DAMAGEBONUS_4d8: + return d8(4); + case IP_CONST_DAMAGEBONUS_5d8: + return d8(5); + case IP_CONST_DAMAGEBONUS_6d8: + return d8(6); + case IP_CONST_DAMAGEBONUS_7d8: + return d8(7); + case IP_CONST_DAMAGEBONUS_8d8: + return d8(8); + case IP_CONST_DAMAGEBONUS_9d8: + return d8(9); + case IP_CONST_DAMAGEBONUS_10d8: + return d8(10); + case IP_CONST_DAMAGEBONUS_3d10: + return d10(3); + case IP_CONST_DAMAGEBONUS_4d10: + return d10(4); + case IP_CONST_DAMAGEBONUS_5d10: + return d10(5); + case IP_CONST_DAMAGEBONUS_6d10: + return d10(6); + case IP_CONST_DAMAGEBONUS_7d10: + return d10(7); + case IP_CONST_DAMAGEBONUS_8d10: + return d10(8); + case IP_CONST_DAMAGEBONUS_9d10: + return d10(9); + case IP_CONST_DAMAGEBONUS_10d10: + return d10(10); + case IP_CONST_DAMAGEBONUS_3d12: + return d12(3); + case IP_CONST_DAMAGEBONUS_4d12: + return d12(4); + case IP_CONST_DAMAGEBONUS_5d12: + return d12(5); + case IP_CONST_DAMAGEBONUS_6d12: + return d12(6); + case IP_CONST_DAMAGEBONUS_7d12: + return d12(7); + case IP_CONST_DAMAGEBONUS_8d12: + return d12(8); + case IP_CONST_DAMAGEBONUS_9d12: + return d12(9); + case IP_CONST_DAMAGEBONUS_10d12: + return d12(10); + case IP_CONST_DAMAGEBONUS_1d3: + return d3(1); + case IP_CONST_DAMAGEBONUS_4d3: + return d3(4); + case IP_CONST_DAMAGEBONUS_21: + return 21; + case IP_CONST_DAMAGEBONUS_22: + return 22; + case IP_CONST_DAMAGEBONUS_23: + return 23; + case IP_CONST_DAMAGEBONUS_24: + return 24; + case IP_CONST_DAMAGEBONUS_25: + return 25; + case IP_CONST_DAMAGEBONUS_26: + return 26; + case IP_CONST_DAMAGEBONUS_27: + return 27; + case IP_CONST_DAMAGEBONUS_28: + return 28; + case IP_CONST_DAMAGEBONUS_29: + return 29; + case IP_CONST_DAMAGEBONUS_30: + return 30; + case IP_CONST_DAMAGEBONUS_31: + return 31; + case IP_CONST_DAMAGEBONUS_32: + return 32; + case IP_CONST_DAMAGEBONUS_33: + return 33; + case IP_CONST_DAMAGEBONUS_34: + return 34; + case IP_CONST_DAMAGEBONUS_35: + return 35; + case IP_CONST_DAMAGEBONUS_36: + return 36; + case IP_CONST_DAMAGEBONUS_37: + return 37; + case IP_CONST_DAMAGEBONUS_38: + return 38; + case IP_CONST_DAMAGEBONUS_39: + return 39; + case IP_CONST_DAMAGEBONUS_40: + return 40; + case IP_CONST_DAMAGEBONUS_41: + return 41; + case IP_CONST_DAMAGEBONUS_42: + return 42; + case IP_CONST_DAMAGEBONUS_43: + return 43; + case IP_CONST_DAMAGEBONUS_44: + return 44; + case IP_CONST_DAMAGEBONUS_45: + return 45; + case IP_CONST_DAMAGEBONUS_46: + return 46; + case IP_CONST_DAMAGEBONUS_47: + return 47; + case IP_CONST_DAMAGEBONUS_48: + return 48; + case IP_CONST_DAMAGEBONUS_49: + return 49; + case IP_CONST_DAMAGEBONUS_50: + return 50; + + } + } + else + { + switch(iDamageConst) + { + case DAMAGE_BONUS_1: + return 1; + case DAMAGE_BONUS_2: + return 2; + case DAMAGE_BONUS_3: + return 3; + case DAMAGE_BONUS_4: + return 4; + case DAMAGE_BONUS_5: + return 5; + case DAMAGE_BONUS_6: + return 6; + case DAMAGE_BONUS_7: + return 7; + case DAMAGE_BONUS_8: + return 8; + case DAMAGE_BONUS_9: + return 9; + case DAMAGE_BONUS_10: + return 10; + case DAMAGE_BONUS_11: + return 11; // motu99: The following up to DAMAGE_BONUS_20 all returned 10; doesn't seem right, changed it + case DAMAGE_BONUS_12: + return 12; + case DAMAGE_BONUS_13: + return 13; + case DAMAGE_BONUS_14: + return 14; + case DAMAGE_BONUS_15: + return 15; + case DAMAGE_BONUS_16: + return 16; + case DAMAGE_BONUS_17: + return 17; + case DAMAGE_BONUS_18: + return 18; + case DAMAGE_BONUS_19: + return 19; + case DAMAGE_BONUS_20: + return 20; + case DAMAGE_BONUS_1d4: + return d4(1); + case DAMAGE_BONUS_1d6: + return d6(1); + case DAMAGE_BONUS_1d8: + return d8(1); + case DAMAGE_BONUS_1d10: + return d10(1); + case DAMAGE_BONUS_1d12: + return d12(1); + case DAMAGE_BONUS_2d4: + return d4(2); + case DAMAGE_BONUS_2d6: + return d6(2); + case DAMAGE_BONUS_2d8: + return d8(2); + case DAMAGE_BONUS_2d10: + return d10(2); + case DAMAGE_BONUS_2d12: + return d12(2); + case DAMAGE_BONUS_21: + return 21; + case DAMAGE_BONUS_22: + return 22; + case DAMAGE_BONUS_23: + return 23; + case DAMAGE_BONUS_24: + return 24; + case DAMAGE_BONUS_25: + return 25; + case DAMAGE_BONUS_26: + return 26; + case DAMAGE_BONUS_27: + return 27; + case DAMAGE_BONUS_28: + return 28; + case DAMAGE_BONUS_29: + return 29; + case DAMAGE_BONUS_30: + return 30; + case DAMAGE_BONUS_31: + return 31; + case DAMAGE_BONUS_32: + return 32; + case DAMAGE_BONUS_33: + return 33; + case DAMAGE_BONUS_34: + return 34; + case DAMAGE_BONUS_35: + return 35; + case DAMAGE_BONUS_36: + return 36; + case DAMAGE_BONUS_37: + return 37; + case DAMAGE_BONUS_38: + return 38; + case DAMAGE_BONUS_39: + return 39; + case DAMAGE_BONUS_40: + return 40; + case DAMAGE_BONUS_41: + return 41; + case DAMAGE_BONUS_42: + return 42; + case DAMAGE_BONUS_43: + return 43; + case DAMAGE_BONUS_44: + return 44; + case DAMAGE_BONUS_45: + return 45; + case DAMAGE_BONUS_46: + return 46; + case DAMAGE_BONUS_47: + return 47; + case DAMAGE_BONUS_48: + return 48; + case DAMAGE_BONUS_49: + return 49; + case DAMAGE_BONUS_50: + return 50; + } + } + return 0; +} + +int GetDiceMaxRoll(int iDamageConst) +// Gets the maximum roll of the dice; zero if no dice constant +{ + switch(iDamageConst) + { + case IP_CONST_DAMAGEBONUS_1d4: + return 4; + case IP_CONST_DAMAGEBONUS_1d6: + return 6; + case IP_CONST_DAMAGEBONUS_1d8: + return 8; + case IP_CONST_DAMAGEBONUS_1d10: + return 10; + case IP_CONST_DAMAGEBONUS_1d12: + return 12; + case IP_CONST_DAMAGEBONUS_2d4: + return 8; + case IP_CONST_DAMAGEBONUS_2d6: + return 12; + case IP_CONST_DAMAGEBONUS_2d8: + return 16; + case IP_CONST_DAMAGEBONUS_2d10: + return 20; + case IP_CONST_DAMAGEBONUS_2d12: + return 24; + } + return 0; +} + +// all of the ten ip dice constants are supposed to lie between 6 and 15 +int GetIsDiceConstant(int iDice) +{ + return (iDice > 5 && iDice < 16); +} + + +// motu99: quite expensive: Passing the whole struct, filling in one single value, passing it out again +// practically disabled this function by pasting its code directly into GetWeaponBonusDamage() +struct BonusDamage GetItemPropertyDamageConstant(int iDamageType, int iDice, struct BonusDamage weapBonusDam) +{ + switch(iDamageType) + { + case -1: + break; + + case IP_CONST_DAMAGETYPE_ACID: + if(GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Acid) weapBonusDam.dice_Acid = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Acid) weapBonusDam.dam_Acid = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_COLD: + if(GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Cold) weapBonusDam.dice_Cold = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Cold) weapBonusDam.dam_Cold = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_FIRE: + if(GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Fire) weapBonusDam.dice_Fire = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Fire) weapBonusDam.dam_Fire = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_ELECTRICAL: + if(GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Elec) weapBonusDam.dice_Elec = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Elec) weapBonusDam.dam_Elec = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_SONIC: + if(GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Son) weapBonusDam.dice_Son = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Son) weapBonusDam.dam_Son = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_DIVINE: + if(GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Div) weapBonusDam.dice_Div = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Div) weapBonusDam.dam_Div = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_NEGATIVE: + if(GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Neg) weapBonusDam.dice_Neg = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Neg) weapBonusDam.dam_Neg = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_POSITIVE: + if(GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Pos) weapBonusDam.dice_Pos = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Pos) weapBonusDam.dam_Pos = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_MAGICAL: + if(GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Mag) weapBonusDam.dice_Mag = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Mag) weapBonusDam.dam_Mag = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_BLUDGEONING: + if(GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Blud) weapBonusDam.dice_Blud = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Blud) weapBonusDam.dam_Blud = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_PIERCING: + if(GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Pier) weapBonusDam.dice_Pier = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Pier) weapBonusDam.dam_Pier = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_SLASHING: + if(GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Slash) weapBonusDam.dice_Slash = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Slash) weapBonusDam.dam_Slash = iDice; + } + break; + } + + return weapBonusDam; +} + + + +// motu99: generally it does not make too much sense to precalculate the WeaponDamage on the beginning of the round and store the various damage types in a large struct +// the reason is that the calculation is quite cheap on CPU time (weapons don't have many item properties to loop through) +// so that passing the large struct back and forth between AttackLoopLogic() and AttackLoopMain() takes more time than the calculation itself + +// @TODO: change logic of AttackLoopLogic() such, that we calculate the damage directly in GetDamage() when we hit! +// then we need not store the dice constants, but rather do the rolls directly, merely summing up the real damage +// for the various damage types in one single struct (with half the members than here) +// also note, that some damage depends on the enemy (alignment, race etc.), so it can change during one round +struct BonusDamage GetWeaponBonusDamage(object oWeapon, object oTarget) +{ + struct BonusDamage weapBonusDam; // lets hope that everything is initialized to zero + + int iDamageType; + int iDice; + int iDamage; + int iDamageDarkfire=0; + int iDamageFlameWeapon=0; + + int iRace = MyPRCGetRacialType(oTarget); + + int iGoodEvil = GetAlignmentGoodEvil(oTarget); + int iLawChaos = GetAlignmentLawChaos(oTarget); + int iAlignSp = GetItemPropAlignment(iGoodEvil,iLawChaos); + int iAlignGr; + + int iSpellType; + + itemproperty ip = GetFirstItemProperty(oWeapon); + while(GetIsItemPropertyValid(ip)) + { + iDamageType = -1; // always reset damage type to -1 (no damage) + int ipType = GetItemPropertyType(ip); +// DoDebug("GetWeaponBonusDamage() found " + DebugIProp2Str(ip)); + switch(ipType) + { + // normal damage + case ITEM_PROPERTY_DAMAGE_BONUS: + iDice = GetItemPropertyCostTableValue(ip); + iDamageType = GetItemPropertySubType(ip); + break; + + // Checks weapon for Holy Avenger property + case ITEM_PROPERTY_HOLY_AVENGER: + iAlignGr = GetItemPropertySubType(ip); + if (iAlignGr == ALIGNMENT_EVIL) + { + iDamageType = IP_CONST_DAMAGETYPE_DIVINE; + iDice = IP_CONST_DAMAGEBONUS_1d6; + } + break; + + case ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP: + iAlignGr = GetItemPropertySubType(ip); + iDice = GetItemPropertyCostTableValue(ip); + if (iAlignGr == ALIGNMENT_NEUTRAL) + { + if (iAlignGr == iLawChaos) iDamageType = GetItemPropertyParam1Value(ip); + } + else if (iAlignGr == iGoodEvil || iAlignGr == iLawChaos || iAlignGr == IP_CONST_ALIGNMENTGROUP_ALL) + { + iDamageType = GetItemPropertyParam1Value(ip); + } + break; + + case ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP: + if(GetItemPropertySubType(ip) == iRace) + { + iDamageType = GetItemPropertyParam1Value(ip); + iDice = GetItemPropertyCostTableValue(ip); + } + break; + + case ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT: + if(GetItemPropertySubType(ip) == iAlignSp) + { + iDamageType = GetItemPropertyParam1Value(ip); + iDice = GetItemPropertyCostTableValue(ip); + } + break; + + /* motu99: Apr 7, 2007: made onhitcastspell system work (at least for flame weapon and darkfire), so this is not needed here! + + case ITEM_PROPERTY_ONHITCASTSPELL: + iSpellType = GetItemPropertySubType(ip); + iDamage = GetItemPropertyCostTableValue(ip)+1; // spell level: always one to low +DoDebug("GetWeaponBonusDamage() found onhitcastspell with Spell type: " + IntToString(iSpellType) +" and spell level (ItemPropertyCostTableValue): " + IntToString(iDamage)); + switch(iSpellType) + { + // dark fire 1d6 + X dmg. X = CasterLevel/2 + case IP_CONST_ONHIT_CASTSPELL_ONHIT_DARKFIRE: + + // iDamageType = IP_CONST_DAMAGETYPE_FIRE; + // iDice = IP_CONST_DAMAGEBONUS_1d6; + + iDamage /= 2; + if(iDamage > 10) iDamage = 10; + + if(iDamage > iDamageDarkfire) iDamageDarkfire = iDamage; + break; + + // flame blade 1d4 + X dmg. X = CasterLevel/2; motu99: in Grimoire it says +1 per casterlevel + case IP_CONST_ONHIT_CASTSPELL_ONHIT_FIREDAMAGE: + + // iDamageType = IP_CONST_DAMAGETYPE_FIRE; + // iDice = IP_CONST_DAMAGEBONUS_1d4; + + +// iDamage /= 2; // motu99: changed this, because it should be +1 per casterlevel according to Grimoire + if(iDamage > 10) iDamage = 10; + + if(iDamage > iDamageFlameWeapon) iDamageFlameWeapon = iDamage; + break; + } + +*/ // motu99: end ONHITCASTSPELL (for Darkfire and Flame Weapon) + + } + + // weapBonusDam = GetItemPropertyDamageConstant(iDamageType, iDice, weapBonusDam); // motu99: don't need this any more, because we fill in the struct here + + // before we look for another itemproperty we fill in the the struct + //to find the right struct subelement we check iDamageType; the amount of damage is found in iDice + // for any damage of the same type, we take the maximum damage + // fire damage from flame weapon and darkfire are treated in a special way at the end of the function. + switch (iDamageType) + { + case -1: + break; + + case IP_CONST_DAMAGETYPE_SLASHING: + if (GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Slash) weapBonusDam.dice_Slash = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Slash) weapBonusDam.dam_Slash = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_PIERCING: + if (GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Pier) weapBonusDam.dice_Pier = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Pier) weapBonusDam.dam_Pier = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_BLUDGEONING: + if (GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Blud) weapBonusDam.dice_Blud = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Blud) weapBonusDam.dam_Blud = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_FIRE: + if (GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Fire) weapBonusDam.dice_Fire = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Fire) weapBonusDam.dam_Fire = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_ELECTRICAL: + if (GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Elec) weapBonusDam.dice_Elec = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Elec) weapBonusDam.dam_Elec = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_COLD: + if (GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Cold) weapBonusDam.dice_Cold = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Cold) weapBonusDam.dam_Cold = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_ACID: + if (GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Acid) weapBonusDam.dice_Acid = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Acid) weapBonusDam.dam_Acid = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_SONIC: + if (GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Son) weapBonusDam.dice_Son = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Son) weapBonusDam.dam_Son = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_DIVINE: + if (GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Div) weapBonusDam.dice_Div = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Div) weapBonusDam.dam_Div = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_NEGATIVE: + if (GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Neg) weapBonusDam.dice_Neg = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Neg) weapBonusDam.dam_Neg = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_POSITIVE: + if (GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Pos) weapBonusDam.dice_Pos = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Pos) weapBonusDam.dam_Pos = iDice; + } + break; + + case IP_CONST_DAMAGETYPE_MAGICAL: + if (GetIsDiceConstant(iDice)) // is a dice constant + { + if(iDice > weapBonusDam.dice_Mag) weapBonusDam.dice_Mag = iDice; + } + else // is +1 to +20 + { + if(iDice > weapBonusDam.dam_Mag) weapBonusDam.dam_Mag = iDice; + } + break; + + } + + ip = GetNextItemProperty(oWeapon); + } + // we are through + // now add flame weapon and darkfire damage +/* +// motu99: Not using this any more, rather using prc_onhitcast to do any onhitcast spells on the weapon + int bStack = GetPRCSwitch(PRC_FLAMEWEAPON_DARKFIRE_STACK); + + if(bStack) + iDamage = iDamageDarkfire + iDamageFlameWeapon; + else + // otherwise we take the maximum + iDamage = PRCMax(iDamageDarkfire, iDamageFlameWeapon); + if(iDamage) + { + // now either (if stacking) add the spell's fire damage to any other fire damage that is already on the weapon, + // or take the maximum of all fire damage types on the weapon(if not stacking) + if(bStack) + iDamage += GetDamageByConstant(weapBonusDam.dam_Fire, TRUE); + else + iDamage = PRCMax(GetDamageByConstant(weapBonusDam.dam_Fire, TRUE), iDamage); + + if(iDamage > 20) iDamage = 20; // make sure that the damage does not exceed 20 + // convert integer damage back to DamageBonusConstant + iDamage = IPGetDamageBonusConstantFromNumber(iDamage); + weapBonusDam.dam_Fire = iDamage; + + // check if there is already a dice constant for "normal" fire damage and find out the maximum dice roll + iDice = GetDiceMaxRoll(weapBonusDam.dice_Fire); + if(bStack) + { // calculate the maximum of all three dice rolls (flame weapon damage, darkfire damage, normal fire damage) + if (iDamageDarkfire) iDice += 6; + if (iDamageFlameWeapon) iDice += 4; + // now take the dice roll that is closest to the combined dice roll of all three + if (iDice < 5) weapBonusDam.dice_Fire = IP_CONST_DAMAGEBONUS_1d4; + else if (iDice < 7) weapBonusDam.dice_Fire = IP_CONST_DAMAGEBONUS_1d6; + else if (iDice < 9) weapBonusDam.dice_Fire = IP_CONST_DAMAGEBONUS_2d4; + else if (iDice < 11) weapBonusDam.dice_Fire = IP_CONST_DAMAGEBONUS_1d10; + else if (iDice < 13) weapBonusDam.dice_Fire = IP_CONST_DAMAGEBONUS_2d6; + else if (iDice < 17) weapBonusDam.dice_Fire = IP_CONST_DAMAGEBONUS_2d8; + else if (iDice < 21) weapBonusDam.dice_Fire = IP_CONST_DAMAGEBONUS_2d10; + else weapBonusDam.dice_Fire = IP_CONST_DAMAGEBONUS_2d12; + } + else + { // if the Darkfire d6 dice is highest, take that, otherwise if the flameweapon d4 dice is highest, take that + if(iDamageDarkfire && iDice < 6) weapBonusDam.dice_Fire = IP_CONST_DAMAGEBONUS_1d6; + else if (iDamageFlameWeapon && iDice < 4) weapBonusDam.dice_Fire = IP_CONST_DAMAGEBONUS_1d4; + } + } +*/ + return weapBonusDam; +} + +// finds any ITEM_PROPERTY_MONSTER_DAMAGE on the weapon and returns the dice number and sides for this type of damage +// note that this returns the first such damage property. Won't work when there are several ITEM_PROPERTY_MONSTER_DAMAGE properties +// on the weapon (this should not happen, really) +struct Dice GetWeaponMonsterDamage(object oWeapon) +{ + struct Dice sDice; // lets hope that everything is initialized to zero + + itemproperty ip = GetFirstItemProperty(oWeapon); + while(GetIsItemPropertyValid(ip)) + { + int ipType = GetItemPropertyType(ip); + if (ipType == ITEM_PROPERTY_MONSTER_DAMAGE) + { +// DoDebug("GetWeaponMonsterDamage() found " + DebugIProp2Str(ip)); + int iDamage = GetItemPropertyCostTableValue(ip); + sDice.iSides = StringToInt(Get2DACache("iprp_monstcost", "Die", iDamage)); + sDice.iNum = StringToInt(Get2DACache("iprp_monstcost", "NumDice", iDamage)); + return sDice; + } + ip = GetNextItemProperty(oWeapon); + } + + return sDice; +} + +// contrary to GetWeaponBonusDamage this usually remains constant during the round (unless the spells happen to expire in that round, or are dispelled) +struct BonusDamage GetMagicalBonusDamage(object oAttacker, object oTarget) +{ +// this searches for spell effects on the attacker that increase damage +// note that these stack, because they are from different spells (you shouldn't be able to cast a spell of the same type at you twice) +// contrary to GetWeaponBonusDamage this does not fill in the IP damage bonus constants, but directly fills in the damage +// @TODO: research if all damage affecting spells are covered; might also look if there is a better way to find out the caster level of the effect creator, in particular if we are casting from scrolls or runes +// note that this does not look for alignment or race specific effects. I think I recall that some spells increase damage only versus specific enemies +// @TODO: check for any such spells and add them to this function +//ebonfowl: this function has been updated to work automatically, it will now capture all damage effects, get their values and damage types, and add the appropriate bonus/decrement to the struct + + struct BonusDamage spellBonusDam; + + effect eEffect; + int nDamage, eType, eSpellID, nEssentia, nBonus, nDamageType; + string sTag; + + object oCaster; + int nCharismaBonus, nLvl; + + eEffect = GetFirstEffect(oAttacker); + while (GetIsEffectValid(eEffect) ) + { + eType = GetEffectType(eEffect); + sTag = GetEffectTag(eEffect); + + int iRace = MyPRCGetRacialType(oTarget); + + int iEffectRace = GetEffectInteger(eEffect, 2); + + int iGoodEvil = GetAlignmentGoodEvil(oTarget); + int iLawChaos = GetAlignmentLawChaos(oTarget); + + int iEffectLawChaos = GetEffectInteger(eEffect, 3); + int iEffectGoodEvil = GetEffectInteger(eEffect, 4); + + if (eType == EFFECT_TYPE_DAMAGE_INCREASE) + { + if(iEffectRace != 28) + { + if(iEffectRace == iRace) + { + //Define racial type-based damage and load into struct + nBonus = GetEffectInteger(eEffect, 0); + nDamage = GetDamageByConstant(nBonus, FALSE); + nDamageType = GetEffectInteger(eEffect, 1); + switch(nDamageType) + { + case DAMAGE_TYPE_ACID: + spellBonusDam.dam_Acid += nDamage; + break; + + case DAMAGE_TYPE_BASE_WEAPON: + spellBonusDam.dam_Slash += nDamage; + break; + + case DAMAGE_TYPE_BLUDGEONING: + spellBonusDam.dam_Blud += nDamage; + break; + + case DAMAGE_TYPE_COLD: + spellBonusDam.dam_Cold += nDamage; + break; + + case DAMAGE_TYPE_DIVINE: + spellBonusDam.dam_Div += nDamage; + break; + + case DAMAGE_TYPE_ELECTRICAL: + spellBonusDam.dam_Elec += nDamage; + break; + + case DAMAGE_TYPE_FIRE: + spellBonusDam.dam_Fire += nDamage; + break; + + case DAMAGE_TYPE_MAGICAL: + spellBonusDam.dam_Mag += nDamage; + break; + + case DAMAGE_TYPE_NEGATIVE: + spellBonusDam.dam_Neg += nDamage; + break; + + case DAMAGE_TYPE_PIERCING: + spellBonusDam.dam_Pier += nDamage; + break; + + case DAMAGE_TYPE_POSITIVE: + spellBonusDam.dam_Pos += nDamage; + break; + + case DAMAGE_TYPE_SLASHING: + spellBonusDam.dam_Slash += nDamage; + break; + + case DAMAGE_TYPE_SONIC: + spellBonusDam.dam_Son += nDamage; + break; + } + } + } + else if(iEffectLawChaos != 0 || iEffectGoodEvil != 0) + { + if(iEffectLawChaos == iLawChaos || iEffectGoodEvil == iGoodEvil) + { + //Define alignment-based damage and load into struct + nBonus = GetEffectInteger(eEffect, 0); + nDamage = GetDamageByConstant(nBonus, FALSE); + nDamageType = GetEffectInteger(eEffect, 1); + switch(nDamageType) + { + case DAMAGE_TYPE_ACID: + spellBonusDam.dam_Acid += nDamage; + break; + + case DAMAGE_TYPE_BASE_WEAPON: + spellBonusDam.dam_Slash += nDamage; + break; + + case DAMAGE_TYPE_BLUDGEONING: + spellBonusDam.dam_Blud += nDamage; + break; + + case DAMAGE_TYPE_COLD: + spellBonusDam.dam_Cold += nDamage; + break; + + case DAMAGE_TYPE_DIVINE: + spellBonusDam.dam_Div += nDamage; + break; + + case DAMAGE_TYPE_ELECTRICAL: + spellBonusDam.dam_Elec += nDamage; + break; + + case DAMAGE_TYPE_FIRE: + spellBonusDam.dam_Fire += nDamage; + break; + + case DAMAGE_TYPE_MAGICAL: + spellBonusDam.dam_Mag += nDamage; + break; + + case DAMAGE_TYPE_NEGATIVE: + spellBonusDam.dam_Neg += nDamage; + break; + + case DAMAGE_TYPE_PIERCING: + spellBonusDam.dam_Pier += nDamage; + break; + + case DAMAGE_TYPE_POSITIVE: + spellBonusDam.dam_Pos += nDamage; + break; + + case DAMAGE_TYPE_SLASHING: + spellBonusDam.dam_Slash += nDamage; + break; + + case DAMAGE_TYPE_SONIC: + spellBonusDam.dam_Son += nDamage; + break; + } + } + } + else if(iEffectLawChaos == 0 && iEffectGoodEvil == 0 && iEffectRace == 28) + { + //Define generic damage and load into struct + nBonus = GetEffectInteger(eEffect, 0); + nDamage = GetDamageByConstant(nBonus, FALSE); + nDamageType = GetEffectInteger(eEffect, 1); + switch(nDamageType) + { + case DAMAGE_TYPE_ACID: + spellBonusDam.dam_Acid += nDamage; + break; + + case DAMAGE_TYPE_BASE_WEAPON: + spellBonusDam.dam_Slash += nDamage; + break; + + case DAMAGE_TYPE_BLUDGEONING: + spellBonusDam.dam_Blud += nDamage; + break; + + case DAMAGE_TYPE_COLD: + spellBonusDam.dam_Cold += nDamage; + break; + + case DAMAGE_TYPE_DIVINE: + spellBonusDam.dam_Div += nDamage; + break; + + case DAMAGE_TYPE_ELECTRICAL: + spellBonusDam.dam_Elec += nDamage; + break; + + case DAMAGE_TYPE_FIRE: + spellBonusDam.dam_Fire += nDamage; + break; + + case DAMAGE_TYPE_MAGICAL: + spellBonusDam.dam_Mag += nDamage; + break; + + case DAMAGE_TYPE_NEGATIVE: + spellBonusDam.dam_Neg += nDamage; + break; + + case DAMAGE_TYPE_PIERCING: + spellBonusDam.dam_Pier += nDamage; + break; + + case DAMAGE_TYPE_POSITIVE: + spellBonusDam.dam_Pos += nDamage; + break; + + case DAMAGE_TYPE_SLASHING: + spellBonusDam.dam_Slash += nDamage; + break; + + case DAMAGE_TYPE_SONIC: + spellBonusDam.dam_Son += nDamage; + break; + } + } + +/* Remove this to re-enable the functions you commented out -ebonfowl + eSpellID = GetEffectSpellId(eEffect); + + switch(eSpellID) + { + case SPELL_PRAYER: + spellBonusDam.dam_Slash += 1; + break; + + case SPELL_WAR_CRY: + spellBonusDam.dam_Slash += 2; + break; + + case SPELL_BATTLETIDE: + spellBonusDam.dam_Mag += 2; + break; + + // Bard Song + case SPELL_BARD_SONG: + oCaster = GetEffectCreator(eEffect); + if(!GetIsObjectValid(oCaster)) // if we cannot find the caster, we assume the attacker was the caster + oCaster = oAttacker; + nDamage = 1; + if (GetIsObjectValid(oCaster)) + { + int nLvl = GetLevelByClass(CLASS_TYPE_BARD, oCaster); + int iPerform = GetSkillRank(SKILL_PERFORM, oCaster); + + if (nLvl>=BARD_LEVEL_FOR_BARD_SONG_DAM_3 && iPerform>= BARD_PERFORM_SKILL_FOR_BARD_SONG_DAM_3) + nDamage = 3; + else if (nLvl>= BARD_LEVEL_FOR_BARD_SONG_DAM_2 && iPerform>= BARD_PERFORM_SKILL_FOR_BARD_SONG_DAM_2) + nDamage = 2; + } + spellBonusDam.dam_Blud += nDamage; + break; + + case SPELL_DIVINE_MIGHT: + // divine damage + // find out the caster (should be the attacker, but beware of runes) + oCaster = GetEffectCreator(eEffect); + if(!GetIsObjectValid(oCaster)) // if we cannot find the caster, we assume the attacker was the caster + oCaster = oAttacker; + + nDamage = 1 + GetHasFeat(FEAT_EPIC_DIVINE_MIGHT, oCaster); + nCharismaBonus = GetAbilityModifier(ABILITY_CHARISMA,oCaster) * nDamage; + + if(nCharismaBonus > 1) nDamage = nCharismaBonus; + else nDamage = 1; + + spellBonusDam.dam_Div += nDamage; + break; + + // Divine Wrath + case SPELLABILITY_DC_DIVINE_WRATH: + // magical damage + // here the caster must be the attacker (could not be cast on a rune) + oCaster = oAttacker; + + nDamage = 3; + nLvl = GetLevelByClass(CLASS_TYPE_DIVINECHAMPION, oCaster); + nLvl = (nLvl / 5)-1; // motu99: didn't check this + + if (nLvl > 6) nDamage = 15; + else if (nLvl > 5) nDamage = 12; + else if (nLvl > 4) nDamage = 10; + else if (nLvl > 3) nDamage = 8; + else if (nLvl > 2) nDamage = 6; + else if (nLvl > 1) nDamage = 4; + + spellBonusDam.dam_Mag += nDamage; + break; + + case SPELL_DIVINE_FAVOR: + // divine + // find out the caster (should be the attacker, but beware of runes) + oCaster = GetEffectCreator(eEffect); + if(!GetIsObjectValid(oCaster)) // if we cannot find the caster, we assume the attacker was the caster + oCaster = oAttacker; + + nDamage = 1; + if (GetIsObjectValid(oCaster)) + { + nLvl = GetLevelByTypeDivine(oCaster); // GetLevelByClass(CLASS_TYPE_PALADIN, oAttacker) + GetLevelByClass(CLASS_TYPE_CLERIC, oAttacker); + nLvl /= 3; + + if(nLvl > 4) nLvl = 4; + } + nDamage += nLvl; + spellBonusDam.dam_Div += nDamage; + break; + + // Power Shot + case SPELL_PA_POWERSHOT: + spellBonusDam.dam_Pier += 5; + break; + + case SPELL_PA_IMP_POWERSHOT: + spellBonusDam.dam_Pier += 10; + break; + + case SPELL_PA_SUP_POWERSHOT: + spellBonusDam.dam_Pier += 15; + break; + + case MELD_BLUESTEEL_BRACERS: + nDamage = GetEssentiaInvested(oAttacker, MELD_BLUESTEEL_BRACERS); + spellBonusDam.dam_Mag += nDamage; + break; + + case MELD_LUCKY_DICE: + spellBonusDam.dam_Slash += 1; + break; + + case MELD_BLOODWAR_GAUNTLETS: + nDamage = GetEssentiaInvested(oAttacker, MELD_BLOODWAR_GAUNTLETS); + spellBonusDam.dam_Slash += nDamage; + break; + + case MELD_IRONSOUL_WEAPON: + nEssentia = GetEssentiaInvested(oAttacker, MELD_IRONSOUL_WEAPON); + nDamage = nEssentia*2; + spellBonusDam.dam_Blud += nDamage; + break; + + case MELD_INCANDESCENT_STRIKE: + nDamage = GetEssentiaInvested(oAttacker, MELD_INCANDESCENT_STRIKE); + spellBonusDam.dam_Slash += nDamage; + break; + + case MELD_INCARNUM_RADIANCE: + nLvl = GetLevelByClass(CLASS_TYPE_INCARNATE, oAttacker); + nBonus = 1 + nLvl/5; + nDamage = nBonus*2; + spellBonusDam.dam_Slash += nDamage; + break; + + case MELD_BLADEMELD_HANDS: + spellBonusDam.dam_Pos += 1; + break; + } + + //General effect damage bonuses requiring tags go here + //ebonfowl + + if(sTag == "LolthsMeatBonus") + { + spellBonusDam.dam_Div += 1; + } + else if(sTag == "RageClawsBonus") + { + spellBonusDam.dam_Slash += 2; + } + else if(sTag == "RidingBracersBonus") + { + spellBonusDam.dam_Slash += 2; + } + else if(sTag == "TotemAvatarBonus") + { + nEssentia = GetEssentiaInvested(oAttacker, MELD_TOTEM_AVATAR); + nDamage = 0; + if (GetIsMeldBound(oAttacker, MELD_TOTEM_AVATAR) == CHAKRA_SHOULDERS) nDamage += 2; + if (GetIsMeldBound(oAttacker, MELD_TOTEM_AVATAR) == CHAKRA_TOTEM) nDamage += nEssentia; + spellBonusDam.dam_Slash += nDamage; + } + else if(sTag == "MaulingGauntletsBonus") + { + nEssentia = GetEssentiaInvested(oAttacker, MELD_MAULING_GAUNTLETS); + nDamage = nEssentia*2; + spellBonusDam.dam_Slash += nDamage; + } + + //Now we are checking for damage bonuses versus specific racial types and adding those + //Any damage bonus effect versus racial types should go here + //If the effect can be identified by SpellID place it in the switch + //Otherwise tag the effect in the relevant script and identify it below the switch in the conditional + //ebonfowl + + int iRace = MyPRCGetRacialType(oTarget); + + int iEffectRace = GetEffectInteger(eEffect, 2); + + if(iEffectRace != 28) + { + if(iEffectRace == iRace) + { + switch(eSpellID) + { + case MELD_NECROCARNUM_WEAPON: + nEssentia = GetEssentiaInvested(oAttacker, MELD_NECROCARNUM_WEAPON); + nDamage = FloatToInt(nEssentia*1.5); + spellBonusDam.dam_Neg += nDamage; + break; + + case MELD_HEART_OF_FIRE: + nEssentia = GetEssentiaInvested(oAttacker, MELD_HEART_OF_FIRE); + nDamage = nEssentia; + spellBonusDam.dam_Slash += nDamage; + break; + + case MELD_APPARITION_RIBBON: + nEssentia = GetEssentiaInvested(oAttacker, MELD_APPARITION_RIBBON); + nDamage = nEssentia*2; + spellBonusDam.dam_Slash += nDamage; + break; + } + + //Conditional for tagged racial damage effects + + if(sTag == "AzureEnmityBonus") + { + nEssentia = GetEssentiaInvestedFeat(oAttacker, FEAT_AZURE_ENMITY); + nDamage = nEssentia; + spellBonusDam.dam_Slash += nDamage; + } + } + } + + //Now we are checking for damage bonuses versus specific alignments and adding those + //Any damage bonus effect versus alignments should go here + //If the effect can be identified by SpellID place it in the switch + //Otherwise tag the effect in the relevant script and identify it below the switch in the conditional + //ebonfowl + + int iGoodEvil = GetAlignmentGoodEvil(oTarget); + int iLawChaos = GetAlignmentLawChaos(oTarget); + + int iEffectLawChaos = GetEffectInteger(eEffect, 3); + int iEffectGoodEvil = GetEffectInteger(eEffect, 4); + + //Single alignment effects here + + if(iEffectLawChaos != 0 || iEffectGoodEvil != 0) + { + if(iEffectLawChaos == iLawChaos || iEffectGoodEvil == iGoodEvil) + { + switch(eSpellID) + { + case MELD_BLADEMELD_SOUL: + nDamage = d6(1); + spellBonusDam.dam_Slash += nDamage; + break; + + case MELD_OPEN_SOUL_CHAKRA: + spellBonusDam.dam_Pos += 2; + break; + } + + //Conditional for tagged alignment damage effects + } + } + + //Effects that have the potential to double-dip on alignment go here + + + /* + // prevents power shot and power attack from stacking + if(!GetHasFeatEffect(FEAT_PA_POWERSHOT, oAttacker) && + !GetHasFeatEffect(FEAT_PA_IMP_POWERSHOT, oAttacker) && + !GetHasFeatEffect(FEAT_PA_SUP_POWERSHOT, oAttacker) ) + { + switch(eSpellID) + { + case SPELL_POWER_ATTACK10: + spellBonusDam.dam_Slash += 10; + break; + case SPELL_POWER_ATTACK9: + spellBonusDam.dam_Slash += 9; + break; + case SPELL_POWER_ATTACK8: + spellBonusDam.dam_Slash += 8; + break; + case SPELL_POWER_ATTACK7: + spellBonusDam.dam_Slash += 7; + break; + case SPELL_POWER_ATTACK6: + spellBonusDam.dam_Slash += 6; + break; + case SPELL_POWER_ATTACK5: + spellBonusDam.dam_Slash += 5; + break; + case SPELL_POWER_ATTACK4: + spellBonusDam.dam_Slash += 4; + break; + case SPELL_POWER_ATTACK3: + spellBonusDam.dam_Slash += 3; + break; + case SPELL_POWER_ATTACK2: + spellBonusDam.dam_Slash += 2; + break; + case SPELL_POWER_ATTACK1: + spellBonusDam.dam_Slash += 1; + break; + case SPELL_SUPREME_POWER_ATTACK: + spellBonusDam.dam_Slash += 20; + break; + } + } + */ + + } + else if (eType == EFFECT_TYPE_DAMAGE_DECREASE) + { + if(iEffectRace != 28) + { + if(iEffectRace == iRace) + { + //Define racial type-based damage and load into struct + nBonus = GetEffectInteger(eEffect, 0); + nDamage = GetDamageByConstant(nBonus, FALSE); + nDamageType = GetEffectInteger(eEffect, 1); + switch(nDamageType) + { + case DAMAGE_TYPE_ACID: + spellBonusDam.dam_Acid -= nDamage; + break; + + case DAMAGE_TYPE_BASE_WEAPON: + spellBonusDam.dam_Slash -= nDamage; + break; + + case DAMAGE_TYPE_BLUDGEONING: + spellBonusDam.dam_Blud -= nDamage; + break; + + case DAMAGE_TYPE_COLD: + spellBonusDam.dam_Cold -= nDamage; + break; + + case DAMAGE_TYPE_DIVINE: + spellBonusDam.dam_Div -= nDamage; + break; + + case DAMAGE_TYPE_ELECTRICAL: + spellBonusDam.dam_Elec -= nDamage; + break; + + case DAMAGE_TYPE_FIRE: + spellBonusDam.dam_Fire -= nDamage; + break; + + case DAMAGE_TYPE_MAGICAL: + spellBonusDam.dam_Mag -= nDamage; + break; + + case DAMAGE_TYPE_NEGATIVE: + spellBonusDam.dam_Neg -= nDamage; + break; + + case DAMAGE_TYPE_PIERCING: + spellBonusDam.dam_Pier -= nDamage; + break; + + case DAMAGE_TYPE_POSITIVE: + spellBonusDam.dam_Pos -= nDamage; + break; + + case DAMAGE_TYPE_SLASHING: + spellBonusDam.dam_Slash -= nDamage; + break; + + case DAMAGE_TYPE_SONIC: + spellBonusDam.dam_Son -= nDamage; + break; + } + } + } + else if(iEffectLawChaos != 0 || iEffectGoodEvil != 0) + { + if(iEffectLawChaos == iLawChaos || iEffectGoodEvil == iGoodEvil) + { + //Define alignment-based damage and load into struct + nBonus = GetEffectInteger(eEffect, 0); + nDamage = GetDamageByConstant(nBonus, FALSE); + nDamageType = GetEffectInteger(eEffect, 1); + switch(nDamageType) + { + case DAMAGE_TYPE_ACID: + spellBonusDam.dam_Acid -= nDamage; + break; + + case DAMAGE_TYPE_BASE_WEAPON: + spellBonusDam.dam_Slash -= nDamage; + break; + + case DAMAGE_TYPE_BLUDGEONING: + spellBonusDam.dam_Blud -= nDamage; + break; + + case DAMAGE_TYPE_COLD: + spellBonusDam.dam_Cold -= nDamage; + break; + + case DAMAGE_TYPE_DIVINE: + spellBonusDam.dam_Div -= nDamage; + break; + + case DAMAGE_TYPE_ELECTRICAL: + spellBonusDam.dam_Elec -= nDamage; + break; + + case DAMAGE_TYPE_FIRE: + spellBonusDam.dam_Fire -= nDamage; + break; + + case DAMAGE_TYPE_MAGICAL: + spellBonusDam.dam_Mag -= nDamage; + break; + + case DAMAGE_TYPE_NEGATIVE: + spellBonusDam.dam_Neg -= nDamage; + break; + + case DAMAGE_TYPE_PIERCING: + spellBonusDam.dam_Pier -= nDamage; + break; + + case DAMAGE_TYPE_POSITIVE: + spellBonusDam.dam_Pos -= nDamage; + break; + + case DAMAGE_TYPE_SLASHING: + spellBonusDam.dam_Slash -= nDamage; + break; + + case DAMAGE_TYPE_SONIC: + spellBonusDam.dam_Son -= nDamage; + break; + } + } + } + else if(iEffectLawChaos == 0 && iEffectGoodEvil == 0 && iEffectRace == 28) + { + //Define generic damage and load into struct + nBonus = GetEffectInteger(eEffect, 0); + nDamage = GetDamageByConstant(nBonus, FALSE); + nDamageType = GetEffectInteger(eEffect, 1); + switch(nDamageType) + { + case DAMAGE_TYPE_ACID: + spellBonusDam.dam_Acid -= nDamage; + break; + + case DAMAGE_TYPE_BASE_WEAPON: + spellBonusDam.dam_Slash -= nDamage; + break; + + case DAMAGE_TYPE_BLUDGEONING: + spellBonusDam.dam_Blud -= nDamage; + break; + + case DAMAGE_TYPE_COLD: + spellBonusDam.dam_Cold -= nDamage; + break; + + case DAMAGE_TYPE_DIVINE: + spellBonusDam.dam_Div -= nDamage; + break; + + case DAMAGE_TYPE_ELECTRICAL: + spellBonusDam.dam_Elec -= nDamage; + break; + + case DAMAGE_TYPE_FIRE: + spellBonusDam.dam_Fire -= nDamage; + break; + + case DAMAGE_TYPE_MAGICAL: + spellBonusDam.dam_Mag -= nDamage; + break; + + case DAMAGE_TYPE_NEGATIVE: + spellBonusDam.dam_Neg -= nDamage; + break; + + case DAMAGE_TYPE_PIERCING: + spellBonusDam.dam_Pier -= nDamage; + break; + + case DAMAGE_TYPE_POSITIVE: + spellBonusDam.dam_Pos -= nDamage; + break; + + case DAMAGE_TYPE_SLASHING: + spellBonusDam.dam_Slash -= nDamage; + break; + + case DAMAGE_TYPE_SONIC: + spellBonusDam.dam_Son -= nDamage; + break; + } + } + + /* + switch(eSpellID) + { + case SPELLABILITY_HOWL_DOOM: + case SPELLABILITY_GAZE_DOOM: + case SPELL_DOOM: + spellBonusDam.dam_Mag -= 2; + break; + + case SPELL_GHOUL_TOUCH: + spellBonusDam.dam_Mag -= 2; + break; + + case SPELL_BATTLETIDE: + spellBonusDam.dam_Mag -= 2; + break; + + case SPELL_PRAYER: + spellBonusDam.dam_Slash -= 1; + break; + + case SPELL_SCARE: + spellBonusDam.dam_Mag -= 2; + break; + + // Hell Inferno + case SPELL_HELLINFERNO_2: + spellBonusDam.dam_Mag -= 4; + break; + + // Curse Song + case SPELL_BARD_CURSE_SONG: + // find out the caster (a bard in the vicinity, but beware of runes) + oCaster = GetEffectCreator(eEffect); + if(!GetIsObjectValid(oCaster)) // if we cannot find the caster, we assume the attacker was the caster + oCaster = oAttacker; + + nDamage = 1; + + if (GetIsObjectValid(oCaster)) + { + nLvl = GetLevelByClass(CLASS_TYPE_BARD, oCaster); + int iPerform = GetSkillRank(SKILL_PERFORM, oCaster); + + if (nLvl>=BARD_LEVEL_FOR_BARD_SONG_DAM_3 && iPerform>= BARD_PERFORM_SKILL_FOR_BARD_SONG_DAM_3) + nDamage = 3; + else if (nLvl>= BARD_LEVEL_FOR_BARD_SONG_DAM_2 && iPerform>= BARD_PERFORM_SKILL_FOR_BARD_SONG_DAM_2) + nDamage = 2; + } + spellBonusDam.dam_Blud -= nDamage; + } + */ + } + eEffect = GetNextEffect(oAttacker); + } + return spellBonusDam; +} + +// motu99: This partially depends on the defender, which might change during a round. But usually it is only calculated once at beginning of round +int GetWeaponDamagePerRound(object oDefender, object oAttacker, object oWeap, int iOffhand = 0) +{ + string sDebugMessage = PRC_TEXT_WHITE; + int bDebug = GetPRCSwitch(PRC_COMBAT_DEBUG); + + int iDamage = 0; + int iWeaponType = GetBaseItemType(oWeap); + + int iStr = GetAbilityModifier(ABILITY_STRENGTH, oAttacker); + + // ranged weapon specific rules + if(GetIsRangedWeaponType(iWeaponType)) + { + // add mighty weapon strength damage + int iMighty = GetMightyWeaponBonus(oWeap); + if(iMighty > 0) + { + if(iStr > iMighty) iStr = iMighty; + + iDamage += iStr; + if (bDebug) sDebugMessage += "Mighty (" + IntToString(iStr) + ")"; + } + } + // melee weapon rules + else + { + // double str bonus to damage + if(GetIsTwoHandedMeleeWeaponType(iWeaponType)) + iStr += iStr/2; + + // off-hand weapons deal half str bonus + if(iOffhand) + iStr /= 2; + + iDamage += iStr; + + if (bDebug) sDebugMessage += "Str Bonus (" + IntToString(iStr) + ")"; + + // Handle the damage bonus from PRC Power Attack + iDamage += GetLocalInt(oAttacker, "PRC_PowerAttack_DamageBonus"); + } + + // weapon specializations + int iSpecializationBonus = 0; + + // determine the feat constants appropriate for the weapon base type + struct WeaponFeat sWeaponFeat = GetAllFeatsOfWeaponType(iWeaponType); + + // check for specialization feat + if(GetHasFeat(sWeaponFeat.Specialization, oAttacker)) + { + iSpecializationBonus += 2; + + // now check for epic specialization feat, can only have it, if we already have specialization + // +4 of epic specialization stacks with "normal" specialization + if(GetHasFeat(sWeaponFeat.EpicSpecialization, oAttacker)) + iSpecializationBonus += 4; + } + + iDamage += iSpecializationBonus; + if (bDebug) sDebugMessage += " + WeapSpec (" + IntToString(iSpecializationBonus) + ")"; + + // adds weapon enhancement bonus to damage + int iEnhancement = GetWeaponEnhancement(oWeap, oDefender, oAttacker); // motu: we are calling this quite often (for attack rolls, for damage, etc); better call it once at beginning of round and remember + iDamage += iEnhancement; + if (bDebug) sDebugMessage += " + WeapEnh (" + IntToString(iEnhancement) + ")"; + + // support for power attack and expertise modes + int iCombatMode = GetLastAttackMode(oAttacker); + if( iCombatMode == COMBAT_MODE_POWER_ATTACK /*&& + !GetHasSpellEffect(SPELL_SUPREME_POWER_ATTACK) && + !GetHasSpellEffect(SPELL_POWER_ATTACK10) && + !GetHasSpellEffect(SPELL_POWER_ATTACK9) && + !GetHasSpellEffect(SPELL_POWER_ATTACK8) && + !GetHasSpellEffect(SPELL_POWER_ATTACK7) && + !GetHasSpellEffect(SPELL_POWER_ATTACK6) && + !GetHasSpellEffect(SPELL_POWER_ATTACK5) && + !GetHasSpellEffect(SPELL_POWER_ATTACK4) && + !GetHasSpellEffect(SPELL_POWER_ATTACK3) && + !GetHasSpellEffect(SPELL_POWER_ATTACK2) && + !GetHasSpellEffect(SPELL_POWER_ATTACK1) */) + { + iDamage += 5; + if (bDebug) sDebugMessage += " + PowAtk (" + IntToString(5) + ")"; + } + else if( iCombatMode == COMBAT_MODE_IMPROVED_POWER_ATTACK /*&& + !GetHasSpellEffect(SPELL_SUPREME_POWER_ATTACK) && + !GetHasSpellEffect(SPELL_POWER_ATTACK10) && + !GetHasSpellEffect(SPELL_POWER_ATTACK9) && + !GetHasSpellEffect(SPELL_POWER_ATTACK8) && + !GetHasSpellEffect(SPELL_POWER_ATTACK7) && + !GetHasSpellEffect(SPELL_POWER_ATTACK6) && + !GetHasSpellEffect(SPELL_POWER_ATTACK5) && + !GetHasSpellEffect(SPELL_POWER_ATTACK4) && + !GetHasSpellEffect(SPELL_POWER_ATTACK3) && + !GetHasSpellEffect(SPELL_POWER_ATTACK2) && + !GetHasSpellEffect(SPELL_POWER_ATTACK1) */) + { + iDamage += 10; + if (bDebug) sDebugMessage += " + ImpPowAtk (" + IntToString(10) + ")"; + } + + // calculates bonus damage for Favored Enemies + // this is just added each round to help prevent lag + // can be moved if this becomes an issue of course. + int iFavoredEnemyBonus = GetFavoredEnemyDamageBonus(oDefender, oAttacker); + iDamage += iFavoredEnemyBonus; + + // Damage from the Shadow Blade feat + iDamage += GetLocalInt(oAttacker, "ShadowBladeDam"); + + if (bDebug) sDebugMessage += " + FavEnmy (" + IntToString(iFavoredEnemyBonus) + ")"; + if (bDebug) sDebugMessage = PRC_TEXT_WHITE + "Weapon Damage = " + IntToString(iDamage) + ": " + sDebugMessage; + if (bDebug) DoDebug(sDebugMessage); + + return iDamage; +} + +// returns the highest critical bonus damage constant on the weapon +// note that this is the IP_DAMAGE_CONSTANT, not the damage itself +// only compares the damage constants, so does not differentiate between dice and constant damage (and assumes, that damage constants are ordered appropriately) +int GetMassiveCriticalBonusDamageConstantOfWeapon(object oWeapon) +{ + int iMassCritBonusDamage = 0; + int iCostVal; + + itemproperty ip = GetFirstItemProperty(oWeapon); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_MASSIVE_CRITICALS) + { + // get the damage constant + iCostVal = GetItemPropertyCostTableValue(ip); + + // is the damage constant higher than our highest yet? + if(iCostVal > iMassCritBonusDamage) + { + iMassCritBonusDamage = iCostVal; + } + } + ip = GetNextItemProperty(oWeapon); + } + // convert damage constant to an integer + return iMassCritBonusDamage; +} + +// this function assumes that we have scored a hit; it returns the damage effect that we need to apply to the Defender +// if we kill the critter immediately ( devastating crit), we return an invalid effect, because we don't need to apply any damage to an already dead defender +effect GetAttackDamage(object oDefender, object oAttacker, object oWeapon, struct BonusDamage sWeaponBonusDamage, struct BonusDamage sSpellBonusDamage, int iOffhand = 0, int iDamage = 0, int bIsCritical = FALSE, int iNumDice = 0, int iNumSides = 0, int iCriticalMultiplier = 0) +{ +// we assume that critical immunity of defender has been already checked in the calling function +// and that the bIsCritical flag is only true, if we scored a critical hit against a non-critical immune defender + + int iWeaponType = GetBaseItemType(oWeapon); + effect eDeath; + + // create an invalid effect to check whether we did a death attack or not + effect eLink = eDeath; + + // first check Devastating Critical + if(bIsCritical && GetHasFeat(GetDevastatingCriticalFeatOfWeaponType(iWeaponType), oAttacker) ) + { + // DC = 10 + 1/2 char level + str mod. + int iStr = GetAbilityModifier(ABILITY_STRENGTH, oAttacker); + int iLevelMod = GetHitDice(oAttacker) / 2; + int iSaveDC = 10 + iStr + iLevelMod; + + if(!FortitudeSave(oDefender, iSaveDC, SAVING_THROW_TYPE_NONE, oAttacker) ) + { + string sMes = "*Devastating Critical*"; + if (DEBUG) + { + sMes = "scripted " + sMes; +// SendMessageToPC(oAttacker, sMes); + } + FloatingTextStringOnCreature(sMes, oAttacker, FALSE); + + // circumvents death immunity... since anyone CDG'ed is dead. + eDeath = EffectDamage(9999, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_ENERGY); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oDefender); + } + } + + // if we didn't score a devastating critical, proceed normally + if(eLink == eDeath) + { + string sDebugMessage = ""; + int bDebug = GetPRCSwitch(PRC_COMBAT_DEBUG); + int iWeaponDamage = 0; + int iBonusWeaponDamage = 0; + int iMassCritBonusDamage = 0; + + // only read the data if it is not already given + if(!iNumSides) iNumSides = StringToInt(Get2DACache("baseitems", "DieToRoll", iWeaponType)); + if(!iNumDice) iNumDice = StringToInt(Get2DACache("baseitems", "NumDice", iWeaponType)); + if(bIsCritical && !iCriticalMultiplier) iCriticalMultiplier = GetWeaponCritcalMultiplier(oAttacker, oWeapon); + + // Returns proper unarmed damage if they are a monk + // or have a creature weapon from a PrC class. - Brawler, Shou, IoDM, etc. + // Note: When using PerformAttackRound gloves are passed to this function + // as oWeapon, so this will not be called twice. + if( iWeaponType == BASE_ITEM_INVALID && GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oAttacker) != OBJECT_INVALID + || iWeaponType == BASE_ITEM_INVALID && GetLevelByClass(CLASS_TYPE_MONK, oAttacker) ) + { + int iUnarmedDamage = FindUnarmedDamage(oAttacker); + iNumSides = StringToInt(Get2DACache("iprp_monstcost", "Die", iUnarmedDamage)); + iNumDice = StringToInt(Get2DACache("iprp_monstcost", "NumDice", iUnarmedDamage)); + } + else if(iWeaponType == BASE_ITEM_INVALID) + { + // unarmed non-monk 1d3 damage + iNumSides = 3; + iNumDice = 1; + } + + int iDiceRoll = 0; + //Roll the base damage dice. + if(iNumSides == 2) iDiceRoll = d2(iNumDice); + if(iNumSides == 3) iDiceRoll = d3(iNumDice); + if(iNumSides == 4) iDiceRoll = d4(iNumDice); + if(iNumSides == 6) iDiceRoll = d6(iNumDice); + if(iNumSides == 8) iDiceRoll = d8(iNumDice); + if(iNumSides == 10) iDiceRoll = d10(iNumDice); + if(iNumSides == 12) iDiceRoll = d12(iNumDice); + if(iNumSides == 20) iDiceRoll = d20(iNumDice); + + // Normal rolling + iWeaponDamage += iDiceRoll; + //if (DEBUG) DoDebug("Starting Aura of Chaos"); + // Aura of Chaos rerolls and adds if the dice rolled is max. + if (GetLocalInt(oAttacker, "DSChaos")) + { + // Maximum possible result + while ((iNumSides * iNumDice) == iDiceRoll) + { + // This should cover things properly + if(iNumSides == 2) iDiceRoll = d2(iNumDice); + if(iNumSides == 3) iDiceRoll = d3(iNumDice); + if(iNumSides == 4) iDiceRoll = d4(iNumDice); + if(iNumSides == 6) iDiceRoll = d6(iNumDice); + if(iNumSides == 8) iDiceRoll = d8(iNumDice); + if(iNumSides == 10) iDiceRoll = d10(iNumDice); + if(iNumSides == 12) iDiceRoll = d12(iNumDice); + if(iNumSides == 20) iDiceRoll = d20(iNumDice); + + // Chaos bonuses + iWeaponDamage += iDiceRoll; + } + } + //if (DEBUG) DoDebug("Ending Aura of Chaos"); + + if (bDebug) sDebugMessage += IntToString(iNumDice) + "d" + IntToString(iNumSides) + " (" + IntToString(iDiceRoll) + ")"; + + int iOCRoll = 0; + // Determine Massive Critical Bonuses + if(bIsCritical) + { // note that critical hit immuniy already has been checked in the attack roll, so we need not check it here + + // get the highest massive critical bonus damage constant on the weapon + iMassCritBonusDamage = GetMassiveCriticalBonusDamageConstantOfWeapon(oWeapon); + + // convert it to an integer, if not zero + if (iMassCritBonusDamage) + iMassCritBonusDamage = GetDamageByConstant(iMassCritBonusDamage, TRUE); + + if(GetHasFeat(FEAT_EPIC_THUNDERING_RAGE, oAttacker) && GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oAttacker) ) + iMassCritBonusDamage += d8(2); + + + // if player has Overwhelming Critical with this weapon type. + if(GetHasFeat(GetOverwhelmingCriticalFeatOfWeaponType(iWeaponType), oAttacker) ) + { + // should do +1d6 damage, 2d6 if crit X 3, 3d6 if X4, etc. + int iOCDice = iCriticalMultiplier - 1; + if(iOCDice < 1) iOCDice = 1; + iOCRoll = d6(iOCDice); + } + } + + // Get bonus damage, unless we already calculated it + if(iDamage) iBonusWeaponDamage = iDamage; + else iBonusWeaponDamage = GetWeaponDamagePerRound(oDefender, oAttacker, oWeapon, iOffhand); + + // dpr = damage per round (assumed to be the same on every attack) + if (bDebug) sDebugMessage += " + Weap Bon DPR (" + IntToString(iBonusWeaponDamage) + ")"; + + iWeaponDamage += iBonusWeaponDamage; + + // PnP Rules State: + // Extra Damage over and above a weapons normal damage + // such as that dealt by a sneak attack or special ability of + // a flaming sword are not multiplied when you score a critical hit + // so no magical effects or bonuses are doubled. + + if(bIsCritical) + { + // determine critical damage + if (bDebug) sDebugMessage += " + Crit (" + IntToString(iWeaponDamage * (iCriticalMultiplier-1)) + ") [* " + IntToString(iCriticalMultiplier) + "]"; + iWeaponDamage *= iCriticalMultiplier; + + if(iMassCritBonusDamage) + { + iWeaponDamage += iMassCritBonusDamage; + if (bDebug) sDebugMessage += " + MassCrit (" + IntToString(iMassCritBonusDamage) + ")"; + } + + if(iOCRoll) + { + iWeaponDamage += iOCRoll; + if (bDebug) sDebugMessage += " + OvwhlmgCrit (" + IntToString(iOCRoll) + ")"; + } + } + + int iOldWeaponDamage = iWeaponDamage; + // add weapon bonus melee damage (constant damage) + iWeaponDamage += GetDamageByConstant(sWeaponBonusDamage.dam_Blud, TRUE); + iWeaponDamage += GetDamageByConstant(sWeaponBonusDamage.dam_Pier, TRUE); + iWeaponDamage += GetDamageByConstant(sWeaponBonusDamage.dam_Slash, TRUE); + + // add weapon bonus melee damage (dice damage) + iWeaponDamage += GetDamageByConstant(sWeaponBonusDamage.dice_Blud, TRUE); + iWeaponDamage += GetDamageByConstant(sWeaponBonusDamage.dice_Pier, TRUE); + iWeaponDamage += GetDamageByConstant(sWeaponBonusDamage.dice_Slash, TRUE); + + // weapon physical bonus damage - BPS = bludgeoning Piercing Slashing + if (bDebug) sDebugMessage += " + Weap Bon Phys (" + IntToString(iWeaponDamage - iOldWeaponDamage) + ")"; + iOldWeaponDamage = iWeaponDamage; + + // damage from spells is stored as solid number (note, these are not spells on the weapon, such as darkfire) + iWeaponDamage += sSpellBonusDamage.dam_Blud; + iWeaponDamage += sSpellBonusDamage.dam_Pier; + iWeaponDamage += sSpellBonusDamage.dam_Slash; + + iWeaponDamage += sSpellBonusDamage.dice_Blud; // motu99: Shouldn't we roll the dice? + iWeaponDamage += sSpellBonusDamage.dice_Pier; + iWeaponDamage += sSpellBonusDamage.dice_Slash; + + // motu99: why do we store different physical damage types (Bludg, Pierc, Slash) in the WeaponBonusDamage struct + // when we sum up all physical damage here and only use the weapon base damage type? + // wouldn't it be better to keep the different physical damage types separate and link them in one effect? + + // spell physical bonus damage + if (bDebug) sDebugMessage += " + Spell Phys (" + IntToString(iWeaponDamage - iOldWeaponDamage) + ")"; + + // Logic to determine if enemy can be sneak attacked + // and to add sneak attack damage + int iSneakDamage = 0; + if(GetCanSneakAttack(oDefender, oAttacker) ) + { + int iSneakDice = GetTotalSneakAttackDice(oAttacker); + if(iSneakDice > 0) + { + iSneakDamage = GetSneakAttackDamage(iSneakDice); + iWeaponDamage += iSneakDamage; + if (bDebug) sDebugMessage += " + Sneak (" + IntToString(iSneakDamage) + ")"; + + string sMes = "*Sneak Attack*"; + if (DEBUG) sMes = "scripted "+ sMes; + FloatingTextStringOnCreature(sMes, oAttacker, FALSE); +// SendMessageToPC(oAttacker, sMes); + } + + if(GetHasFeat(FEAT_CRIPPLING_STRIKE, oAttacker) ) + { + //effect eCrippleStrike = EffectAbilityDecrease(ABILITY_STRENGTH, 2); + //ApplyEffectToObject(DURATION_TYPE_INSTANT, eCrippleStrike, oDefender); + ApplyAbilityDamage(oDefender, ABILITY_STRENGTH, 2, DURATION_TYPE_PERMANENT, TRUE); + } + } + + // Elemental damage effects + int iAcid, iCold, iFire, iElec, iSon; + int iDiv, iNeg, iPos; + int iMag; + + // first only do the constant damage effects (no dice rolls) on the weapon and from spells + iAcid = sSpellBonusDamage.dam_Acid; + iAcid += GetDamageByConstant(sWeaponBonusDamage.dam_Acid, TRUE); + + iCold = sSpellBonusDamage.dam_Cold; + iCold += GetDamageByConstant(sWeaponBonusDamage.dam_Cold, TRUE); + + iFire = sSpellBonusDamage.dam_Fire; + iFire += GetDamageByConstant(sWeaponBonusDamage.dam_Fire, TRUE); + + iElec = sSpellBonusDamage.dam_Elec; + iElec += GetDamageByConstant(sWeaponBonusDamage.dam_Elec, TRUE); + + iSon = sSpellBonusDamage.dam_Son; + iSon += GetDamageByConstant(sWeaponBonusDamage.dam_Son, TRUE); + + iDiv = sSpellBonusDamage.dam_Div; + iDiv += GetDamageByConstant(sWeaponBonusDamage.dam_Div, TRUE); + + iNeg = sSpellBonusDamage.dam_Neg; + iNeg += GetDamageByConstant(sWeaponBonusDamage.dam_Neg, TRUE); + + iPos = sSpellBonusDamage.dam_Pos; + iPos += GetDamageByConstant(sWeaponBonusDamage.dam_Pos, TRUE); + + iMag = sSpellBonusDamage.dam_Mag; + iMag += GetDamageByConstant(sWeaponBonusDamage.dam_Mag, TRUE); + + + // now add the dice damage from the weapon and spells + iAcid += GetDamageByConstant(sSpellBonusDamage.dice_Acid, TRUE); + iAcid += GetDamageByConstant(sWeaponBonusDamage.dice_Acid, TRUE); + + iCold += GetDamageByConstant(sSpellBonusDamage.dice_Cold, TRUE); + iCold += GetDamageByConstant(sWeaponBonusDamage.dice_Cold, TRUE); + + iFire += GetDamageByConstant(sSpellBonusDamage.dice_Fire, TRUE); + iFire += GetDamageByConstant(sWeaponBonusDamage.dice_Fire, TRUE); + + iElec += GetDamageByConstant(sSpellBonusDamage.dice_Elec, TRUE); + iElec += GetDamageByConstant(sWeaponBonusDamage.dice_Elec, TRUE); + + iSon += GetDamageByConstant(sSpellBonusDamage.dice_Son, TRUE); + iSon += GetDamageByConstant(sWeaponBonusDamage.dice_Son, TRUE); + + iDiv += GetDamageByConstant(sSpellBonusDamage.dice_Div, TRUE); + iDiv += GetDamageByConstant(sWeaponBonusDamage.dice_Div, TRUE); + + iNeg += GetDamageByConstant(sSpellBonusDamage.dice_Neg, TRUE); + iNeg += GetDamageByConstant(sWeaponBonusDamage.dice_Neg, TRUE); + + iPos += GetDamageByConstant(sSpellBonusDamage.dice_Pos, TRUE); + iPos += GetDamageByConstant(sWeaponBonusDamage.dice_Pos, TRUE); + + iMag += GetDamageByConstant(sSpellBonusDamage.dice_Mag, TRUE); + iMag += GetDamageByConstant(sWeaponBonusDamage.dice_Mag, TRUE); + + // Magical damage is not multiplied by criticals, at least not in PnP + // Since it is in NwN, I left it default on in a switch. + // Can be turned off to better emulate PnP rules. + // motu99: moved this down, because where it was before we only criticalled the constant damage, but not the dice damage + if(bIsCritical && !GetPRCSwitch(PRC_PNP_ELEMENTAL_DAMAGE)) + { + iAcid *=iCriticalMultiplier; + iCold *= iCriticalMultiplier; + iFire *= iCriticalMultiplier; + iElec *= iCriticalMultiplier; + iSon *= iCriticalMultiplier; + + iDiv *= iCriticalMultiplier; + iNeg *= iCriticalMultiplier; + iPos *= iCriticalMultiplier; + + iMag *= iCriticalMultiplier; + } + + if (bDebug) + { + if (iAcid) sDebugMessage += PRC_TEXT_GREEN + " + Acid (" + IntToString(iAcid) + ")"; + if (iCold) sDebugMessage += PRC_TEXT_LIGHT_BLUE + " + Cold (" + IntToString(iCold) + ")"; + if (iFire) sDebugMessage += PRC_TEXT_RED + " + Fire (" + IntToString(iFire) + ")"; + if (iElec) sDebugMessage += PRC_TEXT_DARK_BLUE + " + Elec (" + IntToString(iElec) + ")"; + if (iSon) sDebugMessage += PRC_TEXT_LIGHT_ORANGE + " + Son (" + IntToString(iSon) + ")"; + if (iDiv) sDebugMessage += PRC_TEXT_PURPLE + " + Div (" + IntToString(iDiv) + ")"; + if (iNeg) sDebugMessage += PRC_TEXT_GRAY + " + Neg (" + IntToString(iNeg) + ")"; + if (iPos) sDebugMessage += " + Pos (" + IntToString(iPos) + ")"; + if (iMag) sDebugMessage += PRC_TEXT_PURPLE + " + Mag (" + IntToString(iMag) + ")"; + } + + // sum up all magical damage, as we need it later + int iMagicalDamage = iAcid + iCold + iFire + iElec + iSon + iDiv + iNeg + iPos + iMag; + + // just in case damage is somehow less than 1 + if(iWeaponDamage < 1) iWeaponDamage = 1; + //if (DEBUG) DoDebug("Starting NightmareBlade"); + // Nightmare Blades double to quadruple the damage dealt for the normal attack + if (GetLocalInt(oDefender, "NightmareBlade") > 0) iWeaponDamage = iWeaponDamage * GetLocalInt(oDefender, "NightmareBlade"); + //if (DEBUG) DoDebug("Ending NightmareBlade"); + // create an invalid effect to return on a coup de grace + + // the rest of the code for a Coup De Grace + int bDisableCoupDeGrace = GetPRCSwitch(PRC_DISABLE_COUP_DE_GRACE); + if (!bDisableCoupDeGrace && !GetLocalInt(oAttacker, "PactQuality"+IntToString(VESTIGE_BUER)) && GetHasSpellEffect(VESTIGE_BUER, oAttacker)) bDisableCoupDeGrace = TRUE; + + if(bFirstAttack && bIsCritical && !bDisableCoupDeGrace && GetIsHelpless(oDefender)) + { + // DC = 10 + damage dealt. + int iSaveDC = 10; + iSaveDC += iWeaponDamage; + iSaveDC += iMagicalDamage; + + if(!FortitudeSave(oDefender, iSaveDC, SAVING_THROW_TYPE_NONE, oAttacker) ) + { + string sMes = "*Coup De Grace*"; + FloatingTextStringOnCreature(sMes, oAttacker, FALSE); +// SendMessageToPC(oAttacker, sMes); + + // circumvents death immunity... since anyone CDG'ed is dead. + effect eDeath = EffectDamage(9999, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_ENERGY); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oDefender); + } + } + + // if we didn't succeed in our coup the grace, apply the damage + if (eLink == eDeath) + { + // motu99: inefficient, because this calls GetWeaponEnhancement(), which already was called in AttackLoopLogic() or PerformAttack() + // @TODO: store weaponEnhancement value and make new function that takes this value + int iDamagePower = GetDamagePowerConstant(oWeapon, oDefender, oAttacker); + int iDamageType = GetDamageTypeByWeaponType(iWeaponType); + //if (DEBUG) DoDebug("prc_inc_combat Calculating Damage"); + // When this maneuver is in effect, weapon damage is fire + // Also put here so it doesn't muck up things looking for weapon damage type + if (GetLocalInt(oAttacker, "DWBurningBrand")) iDamageType = DAMAGE_TYPE_FIRE; + // Swordsage Insightful Strike, grants wisdom to damage on maneuvers + if (GetLocalInt(oAttacker, "InsightfulStrike")) + { + iWeaponDamage += GetAbilityModifier(ABILITY_WISDOM, oAttacker); + } + // RKV Divine Fury grants 1d10 bonus damage + if (GetLocalInt(oAttacker, "RKVDivineFury")) + { + iWeaponDamage += d10(); + DeleteLocalInt(oAttacker, "RKVDivineFury"); + } + // Blade Meditation grants 10 bonus damage + if (GetLocalInt(oAttacker, "BladeMeditationDamage")) + { + iWeaponDamage += 1; + DeleteLocalInt(oAttacker, "BladeMeditationDamage"); + } + // Warblade Battle Cunning: Int To Damage on Flatfoots. + if (GetLevelByClass(CLASS_TYPE_WARBLADE, oAttacker) >= 7 && (GetIsFlanked(oDefender, oAttacker) || GetIsDeniedDexBonusToAC(oDefender, oAttacker))) + { + if (DEBUG_BATTLE_CUNNING) + { + FloatingTextStringOnCreature("**** BATTLE CUNNING BONUS ****", oDefender); + DoDebug("Battle Cunning damage bonus"); + } + iWeaponDamage += GetAbilityModifier(ABILITY_INTELLIGENCE, oAttacker); + } + if (GetLevelByClass(CLASS_TYPE_MASTER_OF_NINE, oAttacker) >= 3) + { + // Check the persistent locals + int i, nCount; + for(i = 1; i <= 9; i++) + { + // Loop over all disciplines, and total up how many he knows + nCount += GetPersistantLocalInt(oAttacker, "MasterOfNine" + IntToString(i)); + } + + iWeaponDamage += nCount; + } + // Bypass damage reduction if set + // Done by increasing total damage done to bypass existing DR taking immunity into account + if(GetLocalInt(oAttacker, "MoveIgnoreDR")) + { + struct DamageReducers drReduced = GetTotalReduction(oAttacker, oDefender, oWeapon); + int nRedDR = drReduced.nStaticReductions * 100 / (100 - drReduced.nPercentReductions); + iWeaponDamage += nRedDR; + if(DEBUG) DoDebug("Damage increased by " + IntToString(nRedDR) + " to ignore DR"); + } + // Shadow Sun Ninja + if (GetLocalInt(oAttacker, "SSN_DARKWL")) + { + effect eSSN = GetFirstEffect(oDefender); + while(GetIsEffectValid(eSSN)) + { + if(GetEffectType(eSSN) == EFFECT_TYPE_BLINDNESS) + { + iWeaponDamage += 4; + break; + } + eSSN = GetNextEffect(oDefender); + } + } + // This is for the Lightning Throw Maneuver. + if (GetLocalInt(oAttacker, "LightningThrowSave")) iWeaponDamage /= 2; + //if (DEBUG) DoDebug("Ending LightningThrowSave"); + + if (iDamagePower > 0) + { + struct DamReduction nDR = OvercomeDR(oDefender); + if (iDamagePower >= nDR.nRedLevel) + iWeaponDamage += nDR.nRedAmount; + + if (DEBUG) DoDebug("Overcoming DR "+IntToString(nDR.nRedAmount)); + } + + int nNoDamage = FALSE; + itemproperty ip = GetFirstItemProperty(oWeapon); + while(GetIsItemPropertyValid(ip)) + { + int ipType = GetItemPropertyType(ip); + if (ipType == ITEM_PROPERTY_NO_DAMAGE) + { + nNoDamage = TRUE; + if (DEBUG) DoDebug("nNoDamage is TRUE"); + eLink = EffectLinkEffects(EffectDamage(1), EffectHeal(1)); + } + + ip = GetNextItemProperty(oWeapon); + } + + if (!nNoDamage) + { + // motu99: why do we store different physical damage types (Bludg, Pierc, Slash) in the WeaponBonusDamage struct + // when we sum up all physical damage here and only use the weapon base damage type? + // wouldn't it be better to keep the different physical damage types separate and link them in one effect? + effect eEffect = PRCEffectDamage(oDefender, iWeaponDamage, iDamageType, iDamagePower); + //if (DEBUG) DoDebug("prc_inc_combat WeaponDamage: "+IntToString(iWeaponDamage)+" DamageType" +IntToString(iDamageType)+" DamagePower "+IntToString(iDamagePower)); + // create eLink starting with the melee weapon damage eEffect (calculated above) + // then add all the other possible effects. + eLink = eEffect; + + if (iAcid > 0) eLink = EffectLinkEffects(EffectLinkEffects(eLink, EffectDamage(iAcid, DAMAGE_TYPE_ACID)), EffectVisualEffect(VFX_COM_HIT_ACID)); + if (iCold > 0) eLink = EffectLinkEffects(EffectLinkEffects(eLink, EffectDamage(iCold, DAMAGE_TYPE_COLD)), EffectVisualEffect(VFX_COM_HIT_FROST )); + if (iFire > 0) eLink = EffectLinkEffects(EffectLinkEffects(eLink, EffectDamage(iFire, DAMAGE_TYPE_FIRE)), EffectVisualEffect(VFX_IMP_FLAME_S)); + if (iElec > 0) eLink = EffectLinkEffects(EffectLinkEffects(eLink, EffectDamage(iElec, DAMAGE_TYPE_ELECTRICAL)), EffectVisualEffect(VFX_COM_HIT_ELECTRICAL )); + if (iSon > 0) eLink = EffectLinkEffects(EffectLinkEffects(eLink, EffectDamage(iSon, DAMAGE_TYPE_SONIC)), EffectVisualEffect(VFX_COM_HIT_SONIC )); + + if (iDiv > 0) eLink = EffectLinkEffects(EffectLinkEffects(eLink, EffectDamage(iDiv, DAMAGE_TYPE_DIVINE)), EffectVisualEffect(VFX_COM_HIT_DIVINE)); + if (iNeg > 0) eLink = EffectLinkEffects(EffectLinkEffects(eLink, EffectDamage(iNeg, DAMAGE_TYPE_NEGATIVE)), EffectVisualEffect(VFX_COM_HIT_NEGATIVE )); + if (iPos > 0) eLink = EffectLinkEffects(EffectLinkEffects(eLink, EffectDamage(iPos, DAMAGE_TYPE_POSITIVE)), EffectVisualEffect(VFX_COM_HIT_DIVINE)); + + if (iMag > 0) eLink = EffectLinkEffects(EffectLinkEffects(eLink, EffectDamage(iMag, DAMAGE_TYPE_MAGICAL)), EffectVisualEffect(VFX_COM_HIT_DIVINE)); + } + } + if (bDebug) sDebugMessage = PRC_TEXT_WHITE + "Damage = " + IntToString(iWeaponDamage +iMagicalDamage) + ": " + sDebugMessage; + if (bDebug) DoDebug(sDebugMessage); + } + return eLink; +} + + +//::////////////////////////////////////////////// +//:: Attack Logic Functions +//::////////////////////////////////////////////// + +// adapted from prc_alterations +void ActionCastSpellFromPlaceable(int iSpell, object oTarget, int iCasterLvl, int nMetaMagic = METAMAGIC_ANY, object oCaster = OBJECT_SELF) +{ + object oCastingObject = CreateObject(OBJECT_TYPE_PLACEABLE, "x0_rodwonder", GetLocation(oCaster)); + + AssignCommand(oCastingObject, ActionCastSpellAtObject(iSpell, oTarget, nMetaMagic, TRUE, iCasterLvl, PROJECTILE_PATH_TYPE_DEFAULT, TRUE)); + + DestroyObject(oCastingObject, 6.0); +} + + +void ApplyOnHitDurationAbiltiies(object oTarget, int iDurationVal, effect eAbility, effect eVis) +{ + int iChance = StringToInt( Get2DACache("iprp_onhitdur", "EffectChance", iDurationVal) ); + int iRoll = d100(); + + if(iRoll <= iChance) + { + int iDuration = StringToInt( Get2DACache("iprp_onhitdur", "DurationRounds", iDurationVal) ); +// effect eLink = EffectLinkEffects(eAbility, eVis); // motu99: The visual effect eVis is instant, so linking with the temporary eAbility is not a good idea +// ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(iDuration) ); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAbility, oTarget, RoundsToSeconds(iDuration) ); + } +} + +// motu99: added saving throws (most were missing) +// @TODO: check if all saving throws are correct (will? fortitude?) and are called with appropriate SAVING_THROW_TYPE_* +// might also have to replace the Bioware saving throws with PRCMySavingThrow, eventually + +// Note, that for the IP_CONST_ONHIT_ constants, where is a spell that should be cast +// (such as IP_CONST_ONHIT_KNOCK, IP_CONST_ONHIT_LESSERDISPEL, etc.) +// we have to call the Impact spell scripts directly, because the commands ActionCastSpell* do not work within PRC combat! +/* +// the reason why we can't cast the onhitcast spells as a normal spellcast action is, that the spell casts are inserted into the action queue of the PRC attacker, +// but as long as the attacker is in physical combat (which is always the case for PerformAttack or PerformAttackRound), the (physical) attack action is +// at the top of the action queue and remains there throughout the whole combat process (which can be several rounds) +// Now the spell cast actions are inserted *after* the physical attack action, and therefore the spell cast actions are never executed +// (unless we stop attacking - which usually only happens if all enemies or the PC is dead) +// We can circumvent the problem with the action queue, by calling the Impact spell scripts directly. The problem with this approach is, that we are lacking +// the internal setup (done in the ActionCastSpell* commands), which is required so that the spell scripts receive the essential information they need. +// This essential information is retreived (in the spell script) via the functions GetSpellCastItem, GetSpellTarget etc. +// Unfortunately these information functions do not return sensible values when the impact spell scripts are called directly, +// because the necessary setup (usually done in ActionCastSpell*) has not been done +// What needs to be done, therefore, is to let the spell script know - by other means - what the essential parameters are +//(for onhit cast spells we usually need SpellTarget and SpellCastItem) +// As we don't know how Bioware passes the information to the GetSpellCastItem(), GetSpellTarget() etc. functions (most likely by local objects stored on the caster) +// the most straight forward approach seems to be, to replace all calls to GetSpellCastItem(), GetSpellTarget() etc. in all of the onhitcast spell impact scripts +// with PRC-wrapper functions, that use special local ints/objects (set on the caster or the module) in order to communicate the essential parameters to the spell impact script +// The only thing we then need to do, is to properly set up these local ints/objects by ourselves, before we execute +// the impact spell scripts, and delete them right after execution (so that they don't interfere with the normal spellcasting process) +// See ExecuteSpellScript() in prc_inc_spells how this can be done +*/ +struct OnHitSpell DoOnHitProperties(itemproperty ip, object oTarget) +{ + // covers poison, vorpal, stun, disease, etc. + // ipSubType = IP_CONST_ONHIT_* + // ipCostVal = IP_CONST_ONHIT_SAVEDC_* + +// int iType = GetItemPropertyType(ip); + struct OnHitSpell sSpell; + int iDC = GetItemPropertyCostTableValue(ip); + int iSubType = GetItemPropertySubType(ip); + int iParam1 = GetItemPropertyParam1Value(ip); + + // change to proper save DC + if (iDC < 0) iDC = 0; + else if (iDC > 6) iDC = 6; + iDC += (14 + iDC); + +/* + // change to proper save DC + if(iDC < 10) + { + switch (iDC) + { + case 0: iDC = 14; + break; + case 1: iDC = 16; + break; + case 2: iDC = 18; + break; + case 3: iDC = 20; + break; + case 4: iDC = 22; + break; + case 5: iDC = 24; + break; + case 6: iDC = 26; + break; + } + } +*/ + + // sMes += " | I have On Hit: "; + + // motu99: moved variable declations out of switch statement, because declaration within produced a stack underflow error + // we could also enclose the statements in the case with curly brackets {}, (seems to work in other places), but got paranoid after 4 hours of tracking down the error + effect eEffect; + effect eVis; + int iStat; + string sDiseaseType; + + // alignment code +// int iGoodEvil = GetAlignmentGoodEvil(oTarget); +// int iLawChaos = GetAlignmentLawChaos(oTarget); +// int iAlignSpecific = GetItemPropAlignment(iGoodEvil, iLawChaos); + + switch (iSubType) + { + // set global vars for vorpal + case IP_CONST_ONHIT_VORPAL: + { + bIsVorpalWeaponEquiped = TRUE; + iVorpalSaveDC = iDC; + break; + } + // iParam1 should be the ammout of levels to drain + case IP_CONST_ONHIT_LEVELDRAIN: + { + if( !FortitudeSave(oTarget, iDC, SAVING_THROW_TYPE_NEGATIVE) ) + { + if(iParam1 < 1) iParam1 = 1; + + eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + + eEffect = SupernaturalEffect( EffectNegativeLevel(iParam1) ); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oTarget); + } + break; + } + // NEEDS TESTING + case IP_CONST_ONHIT_WOUNDING: + { + if( !FortitudeSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + if(iParam1 < 1) iParam1 = 1; + iParam1 = -iParam1; + + eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + + // in theory this will drain them 1 HP per round. + eEffect = ExtraordinaryEffect( EffectRegenerate(iParam1, 6.0 ) ); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, 9999.0); + } + break; + } + // motu99: ActionCastSpell* will not work within scripted combat + // @TODO: call the spell scripts directly via ExecuteSpellScript() and modify the spell scripts, + // so that they can retrieve the SpellTarget and the SpellCastItem (use the PRC wrappers) + // see new onhitcast section in prc_inc_spells for details + + /** WARNING: + // It is extremely unsafe to call the spell scripts from within a loop over item properties + // But DoOnHitProperties() is called from such a loop (the loop is done in ApplyOnHitAbilities) + // So what we must do, is to pass the spell ID back to ApplyOnHitAbilities, there store it in an array + // and then execute all impact spell scripts AFTER we have cycled through the item properties! + // see prc_inc_spells (in particular the routines ApplyAllOnHitCastSpellsOnItem*) for details + */ + case IP_CONST_ONHIT_KNOCK: + { + sSpell.iSpellID = SPELL_KNOCK; + // ActionCastSpellAtObject(SPELL_KNOCK, oTarget, METAMAGIC_ANY, TRUE, iDC, PROJECTILE_PATH_TYPE_DEFAULT, TRUE); + break; + } + case IP_CONST_ONHIT_LESSERDISPEL: + { + sSpell.iSpellID = SPELL_LESSER_DISPEL; + // ActionCastSpellAtObject(SPELL_LESSER_DISPEL, oTarget, METAMAGIC_ANY, TRUE, iDC, PROJECTILE_PATH_TYPE_DEFAULT, TRUE); + break; + } + case IP_CONST_ONHIT_DISPELMAGIC: + { + sSpell.iSpellID = SPELL_DISPEL_MAGIC; + // ActionCastSpellAtObject(SPELL_DISPEL_MAGIC, oTarget, METAMAGIC_ANY, TRUE, iDC, PROJECTILE_PATH_TYPE_DEFAULT, TRUE); + break; + } + case IP_CONST_ONHIT_GREATERDISPEL: + { + sSpell.iSpellID = SPELL_GREATER_DISPELLING; + // ActionCastSpellAtObject(SPELL_GREATER_DISPELLING, oTarget, METAMAGIC_ANY, TRUE, iDC, PROJECTILE_PATH_TYPE_DEFAULT, TRUE); + break; + } + case IP_CONST_ONHIT_MORDSDISJUNCTION: + { + sSpell.iSpellID = SPELL_MORDENKAINENS_DISJUNCTION; + // ActionCastSpellAtObject(SPELL_MORDENKAINENS_DISJUNCTION, oTarget, METAMAGIC_ANY, TRUE, iDC, PROJECTILE_PATH_TYPE_DEFAULT, TRUE); + break; + } + // iParam1 = iprp_abilities.2da + // both have the same effect in game + // this "poison" property is 1d2 ability damage + // not the actial poison.2da poison abilities. + case IP_CONST_ONHIT_ITEMPOISON: + case IP_CONST_ONHIT_ABILITYDRAIN: + { + if( !FortitudeSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + if (iParam1 <= 0) iStat = ABILITY_STRENGTH; + else if (iParam1 == 1) iStat = ABILITY_DEXTERITY; + else if (iParam1 == 2) iStat = ABILITY_CONSTITUTION; + else if (iParam1 == 3) iStat = ABILITY_INTELLIGENCE; + else if (iParam1 == 4) iStat = ABILITY_WISDOM; + else iStat = ABILITY_CHARISMA; + + eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + + //eEffect = EffectAbilityDecrease(iStat, d2() ); + //ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oTarget); + ApplyAbilityDamage(oTarget, iStat, d2(), DURATION_TYPE_PERMANENT, TRUE); + } + break; + } + // ipParam1 = disease.2da + case IP_CONST_ONHIT_DISEASE: + { + if( !FortitudeSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + + sDiseaseType = Get2DACache("disease", "Type", iParam1); + eEffect = EffectDisease(iParam1); + + if(sDiseaseType == "EXTRA") eEffect = ExtraordinaryEffect(eEffect); + else if(sDiseaseType == "SUPER") eEffect = SupernaturalEffect(eEffect); + + eVis = EffectVisualEffect(VFX_IMP_DISEASE_S); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oTarget); + } + break; + } + // ipParam1 = IPRP_ALIGNMENT + case IP_CONST_ONHIT_SLAYALIGNMENT: + { + // int iGoodEvil = GetAlignmentGoodEvil(oTarget); + // int iLawChaos = GetAlignmentLawChaos(oTarget); + // int iAlignSpecific = GetItemPropAlignment(GetAlignmentGoodEvil(oTarget), GetAlignmentLawChaos(oTarget)); + + // ipParam1 - specific alignment + if(iParam1 == GetItemPropAlignment(GetAlignmentGoodEvil(oTarget), GetAlignmentLawChaos(oTarget))) + { + if( !FortitudeSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eVis = EffectVisualEffect(VFX_IMP_DEATH); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + + // circumvent death immunity + eEffect = EffectDamage(9999, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_ENERGY); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oTarget); + } + } + break; + } + + // ipParam1 = IPRP_ALIGNGRP + case IP_CONST_ONHIT_SLAYALIGNMENTGROUP: + { + // int iGoodEvil = GetAlignmentGoodEvil(oTarget); + // int iLawChaos = GetAlignmentLawChaos(oTarget); + + // ipParam1 - alignment group + if( iParam1 == IP_CONST_ALIGNMENTGROUP_ALL + || iParam1 == GetAlignmentGoodEvil(oTarget) + || iParam1 == GetAlignmentLawChaos(oTarget)) + { + if( !FortitudeSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eVis = EffectVisualEffect(VFX_IMP_DEATH); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + + // circumvent death immunity + eEffect = EffectDamage(9999, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_ENERGY); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oTarget); + } + } + break; + } + // ipParam1 = racialtypes.2da + case IP_CONST_ONHIT_SLAYRACE: + { + if(iParam1 == MyPRCGetRacialType(oTarget) ) + { + if( !FortitudeSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + + eVis = EffectVisualEffect(VFX_IMP_DEATH); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + + // circumvent death immunity + eEffect = EffectDamage(9999, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_ENERGY); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oTarget); + } + } + break; + } + // ipParam1 = iprp_onhitdur.2da + case IP_CONST_ONHIT_BLINDNESS: + { + if( !FortitudeSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eEffect = EffectBlindness(); + eVis = EffectVisualEffect(VFX_IMP_BLIND_DEAF_M); + ApplyOnHitDurationAbiltiies(oTarget, iParam1, eEffect, eVis); + } + break; + } + case IP_CONST_ONHIT_CONFUSION: + { + if( !WillSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eEffect = PRCEffectConfused(); + eVis = EffectVisualEffect(VFX_IMP_CONFUSION_S); + ApplyOnHitDurationAbiltiies(oTarget, iParam1, eEffect, eVis); + } + break; + } + case IP_CONST_ONHIT_DAZE: + { + if( !WillSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eEffect = EffectDazed(); + eVis = EffectVisualEffect(VFX_IMP_DAZED_S); + ApplyOnHitDurationAbiltiies(oTarget, iParam1, eEffect, eVis); + } + break; + } + case IP_CONST_ONHIT_DEAFNESS: + { + if( !FortitudeSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eEffect = EffectDeaf(); + eVis = EffectVisualEffect(VFX_IMP_BLIND_DEAF_M); + ApplyOnHitDurationAbiltiies(oTarget, iParam1, eEffect, eVis); + } + break; + } + case IP_CONST_ONHIT_DOOM: + { + if( !WillSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eEffect = EffectAttackDecrease(2); + eEffect = EffectLinkEffects(eEffect, EffectDamageDecrease(2, DAMAGE_TYPE_BLUDGEONING|DAMAGE_TYPE_PIERCING|DAMAGE_TYPE_SLASHING)); + eEffect = EffectLinkEffects(eEffect, EffectSavingThrowDecrease(SAVING_THROW_ALL, 2)); + eEffect = EffectLinkEffects(eEffect, EffectSkillDecrease(SKILL_ALL_SKILLS, 2)); + eVis = EffectVisualEffect(VFX_IMP_DOOM); + ApplyOnHitDurationAbiltiies(oTarget, iParam1, eEffect, eVis); + } + break; + } + case IP_CONST_ONHIT_FEAR: + { + if( !WillSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eEffect = EffectFrightened(); + eVis = EffectVisualEffect(VFX_IMP_HEAD_EVIL); + ApplyOnHitDurationAbiltiies(oTarget, iParam1, eEffect, eVis); + } + break; + } + case IP_CONST_ONHIT_HOLD: + { + if( !WillSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eEffect = EffectParalyze(); + eVis = EffectVisualEffect(VFX_DUR_FREEZE_ANIMATION); + ApplyOnHitDurationAbiltiies(oTarget, iParam1, eEffect, eVis); + } + break; + } + case IP_CONST_ONHIT_SILENCE: + { + if( !WillSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eEffect = EffectSilence(); + eVis = EffectVisualEffect(VFX_IMP_SILENCE); + ApplyOnHitDurationAbiltiies(oTarget, iParam1, eEffect, eVis); + } + break; + } + case IP_CONST_ONHIT_SLEEP: + { + if( !WillSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eEffect = EffectSleep(); + eVis = EffectVisualEffect(VFX_IMP_SLEEP); + ApplyOnHitDurationAbiltiies(oTarget, iParam1, eEffect, eVis); + } + break; + } + case IP_CONST_ONHIT_SLOW: + { + if( !WillSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eEffect = EffectSlow(); + eVis = EffectVisualEffect(VFX_IMP_SLOW); + ApplyOnHitDurationAbiltiies(oTarget, iParam1, eEffect, eVis); + } + break; + } + case IP_CONST_ONHIT_STUN: + { + if( !WillSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eEffect = EffectStunned(); + eVis = EffectVisualEffect(VFX_IMP_STUN); + ApplyOnHitDurationAbiltiies(oTarget, iParam1, eEffect, eVis); + } + break; + } + default: + { + if (DEBUG) DoDebug("DoOnHitProperties: subtype not known, iSubType = " + IntToString(iSubType)); + break; + } + } + + if (sSpell.iSpellID) + sSpell.iDC = iDC; + + return sSpell; +} + +// motu99: added saving throws (most were missing) +// @TODO: check if all saving throws are correct (will? fortitude?) and are called with appropriate SAVING_THROW_TYPE_* +// might also have to replace the Bioware saving throws with PRCMySavingThrow, eventually +void DoOnMonsterHit(itemproperty ip, object oTarget) +{ +// int iType = GetItemPropertyType(ip); + int iDC = GetItemPropertyCostTableValue(ip); + int iSubType = GetItemPropertySubType(ip); + int iParam1 = GetItemPropertyParam1Value(ip); + + // change to proper save DC + if (iDC < 0) iDC = 0; + else if (iDC > 6) iDC = 6; + iDC += (14 + iDC); +/* + if(iDC < 10) + { + switch (iDC) + { + case 0: iDC = 14; + break; + case 1: iDC = 16; + break; + case 2: iDC = 18; + break; + case 3: iDC = 20; + break; + case 4: iDC = 22; + break; + case 5: iDC = 24; + break; + case 6: iDC = 26; + break; + } + } +*/ + + // motu99: moved variable declations out of switch statement, because declaration within produced a stack underflow error + // we could also enclose the statements in the case with curly brackets {}, but got paranoid after 4 hours of tracking down the error + effect eEffect; + effect eVis; + int iStat; + string sDiseaseType; + + switch(iSubType) + { + // ipParam1 should be the ammout of levels to drain + case IP_CONST_ONMONSTERHIT_LEVELDRAIN: + { + if( !FortitudeSave(oTarget, iDC, SAVING_THROW_TYPE_NEGATIVE) ) + { + if(iParam1 < 1) iParam1 = 1; + + eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + + eEffect = SupernaturalEffect( EffectNegativeLevel(iParam1) ); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oTarget); + } + break; + } + // NEEDS TESTING + case IP_CONST_ONMONSTERHIT_WOUNDING: + { + if( !FortitudeSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + if(iParam1 < 1) iParam1 = 1; + iParam1 = -iParam1; + + eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + + // in theory this will drain them 1 HP per round. + eEffect = ExtraordinaryEffect( EffectRegenerate(iParam1, 6.0 ) ); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, 9999.0); + } + break; + } + // iParam1 = iprp_abilities.2da + // both have the same effect in game + // this "poison" property is 1d2 ability damage + // not the actial poison.2da poison abilities. + case IP_CONST_ONMONSTERHIT_POISON: + case IP_CONST_ONMONSTERHIT_ABILITYDRAIN: + { + if( !FortitudeSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + if (iParam1 <= 0) iStat = ABILITY_STRENGTH; + else if (iParam1 == 1) iStat = ABILITY_DEXTERITY; + else if (iParam1 == 2) iStat = ABILITY_CONSTITUTION; + else if (iParam1 == 3) iStat = ABILITY_INTELLIGENCE; + else if (iParam1 == 4) iStat = ABILITY_WISDOM; + else iStat = ABILITY_CHARISMA; + + eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + + //eEffect = EffectAbilityDecrease(iStat, d2() ); + //ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oTarget); + ApplyAbilityDamage(oTarget, iStat, d2(), DURATION_TYPE_PERMANENT, TRUE); + } + break; + } + // ipParam1 = disease.2da + case IP_CONST_ONMONSTERHIT_DISEASE: + { + if( !FortitudeSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + sDiseaseType = Get2DACache("disease", "Type", iParam1); + eEffect = EffectDisease(iParam1); + + if(sDiseaseType == "EXTRA") eEffect = ExtraordinaryEffect(eEffect); + else if(sDiseaseType == "SUPER") eEffect = SupernaturalEffect(eEffect); + + eVis = EffectVisualEffect(VFX_IMP_DISEASE_S); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oTarget); + } + break; + } + case IP_CONST_ONMONSTERHIT_CONFUSION: + { + if( !WillSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eEffect = PRCEffectConfused(); + eVis = EffectVisualEffect(VFX_IMP_CONFUSION_S); + ApplyOnHitDurationAbiltiies(oTarget, iParam1, eEffect, eVis); + } + break; + } + case IP_CONST_ONMONSTERHIT_DOOM: + { + if( !WillSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eEffect = EffectAttackDecrease(2); + eEffect = EffectLinkEffects(eEffect, EffectDamageDecrease(2, DAMAGE_TYPE_BLUDGEONING|DAMAGE_TYPE_PIERCING|DAMAGE_TYPE_SLASHING)); + eEffect = EffectLinkEffects(eEffect, EffectSavingThrowDecrease(SAVING_THROW_ALL, 2)); + eEffect = EffectLinkEffects(eEffect, EffectSkillDecrease(SKILL_ALL_SKILLS, 2)); + + eVis = EffectVisualEffect(VFX_IMP_DOOM); + ApplyOnHitDurationAbiltiies(oTarget, iParam1, eEffect, eVis); + } + break; + } + case IP_CONST_ONMONSTERHIT_FEAR: + { + if( !WillSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eEffect = EffectFrightened(); + eVis = EffectVisualEffect(VFX_IMP_HEAD_EVIL); + ApplyOnHitDurationAbiltiies(oTarget, iParam1, eEffect, eVis); + } + break; + } + case IP_CONST_ONMONSTERHIT_SLOW: + { + if( !WillSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eEffect = EffectSlow(); + eVis = EffectVisualEffect(VFX_IMP_SLOW); + ApplyOnHitDurationAbiltiies(oTarget, iParam1, eEffect, eVis); + } + break; + } + case IP_CONST_ONMONSTERHIT_STUN: + { + if( !WillSave(oTarget, iDC, SAVING_THROW_TYPE_NONE) ) + { + eEffect = EffectStunned(); + eVis = EffectVisualEffect(VFX_IMP_STUN); + ApplyOnHitDurationAbiltiies(oTarget, iParam1, eEffect, eVis); + } + break; + } + default: + { + if(DEBUG) DoDebug("DoOnMonsterHit: item property subtype not known, ipSubType = "+ IntToString(iSubType)); + break; + } + } +} + + + +// motu99: modified function so that it does not produce a stack underflow error +// added saving throws (could be done more elegantly, but why bother, if it works) +// @TODO: check if all saving throws are correct (will? fortitude?) and are called with appropriate SAVING_THROW_TYPE_* + +// made modifications to onhitcast system, so that onhitcasting should work - in principle - with all onhitcast spells +// ( modifications to the spell scripts are required, in PRC 3.1d only done for Darkfire and Flame Weapon) +// @TODO: do the necessary modifications for all impact spell scripts (see prc_inc_spells, what to do) +void ApplyOnHitAbilities(object oTarget, object oItemWielder, object oItem) +{ +// string sMes = ""; + + // motu99: moved declaration of these variables outside of switch statement + // because it says in NWNLexicon that you cannot declare / initialize a variable in a case statement + // in the old version the function produced a stack underflow run-time error (hard to track down: compiler does not issue a compilation warning!) + int iNr; + int iType; + int iSubType; + int iCostVal; + int iParam1; + int bOnHitCastSpell = FALSE; + struct OnHitSpell sSpell; + array_create(oItemWielder, "ohspl"); // This is used here and in prc_inc_onhit + + effect eEffect; + + itemproperty ip = GetFirstItemProperty(oItem); + + while(GetIsItemPropertyValid(ip)) + { + iType = GetItemPropertyType(ip); + + switch (iType) + { + case ITEM_PROPERTY_REGENERATION_VAMPIRIC: + { + iCostVal = GetItemPropertyCostTableValue(ip); + eEffect = EffectHeal(iCostVal); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oItemWielder, 0.0); + break; + } + case ITEM_PROPERTY_ONHITCASTSPELL: + { + // route all on-hit cast spells through the prc_onhitcast script + // originally prc_onhitcast was only meant for unique powers, + // but it has been extended to do all other onhit cast spells on the weapon + // in order to bypass the biobug, that will only execute the first onhitcast spell on an item + bOnHitCastSpell = TRUE; + break; + } + case ITEM_PROPERTY_ON_HIT_PROPERTIES: + { + sSpell = DoOnHitProperties(ip, oTarget); + + // was it a spell that must be cast? + if (sSpell.iSpellID) + { + iNr++; + // store the spell ID in an array and execute the spell later, this is safer than trying to execute the spell script directly + array_set_int(oItemWielder, "ohspl", iNr, sSpell.iSpellID); + + iNr++; + array_set_int(oItemWielder, "ohspl", iNr, sSpell.iDC); + } + break; + } + // much like above but for creature weapons + case ITEM_PROPERTY_ON_MONSTER_HIT: + { + DoOnMonsterHit(ip, oTarget); + break; + } + // poisons from poison.2da + case ITEM_PROPERTY_POISON: + { + // @TODO: check if poison requires a Fortitude save + iSubType = GetItemPropertySubType(ip); + eEffect = EffectPoison( iSubType ); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oTarget); + + eEffect = EffectVisualEffect(VFX_IMP_POISON_L); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oTarget); + break; + } + default: + { + break; + } + } // end switch iType + ip = GetNextItemProperty(oItem); + } + + // now route all on hit cast spells through "prc_onhitcast" + if (bOnHitCastSpell) + { + ApplyOnHitUniquePower(oTarget, oItem, oItemWielder); + } + + // now execute the spell scripts (note that the local array will not be deleted) + while (iNr) + { + sSpell.iDC = array_get_int(oItemWielder, "ohspl", iNr); + iNr--; + sSpell.iSpellID = array_get_int(oItemWielder, "ohspl", iNr); + iNr--; + // we might have to determine an appropriate caster level (minimum for spell?) and an appropriate class from the spellID + CastSpellAtObject(sSpell.iSpellID, oTarget, METAMAGIC_NONE, 0, 0, sSpell.iDC, OBJECT_INVALID, oItemWielder); + } + +// FloatingTextStringOnCreature(sMes, oAttacker); +} + +/** +// these files formerly contained references to the local object "PRC_CombatSystem_OnHitCastSpell_Item" +// references to this local int have been replaced by calls to PRCGetSpellCastItem() +scripts.hak: - prc_evnt_bonebld + - prc_evnt_strmtl + - prc_onhitcast +psionics.hak: psi_sk_onhit +*/ + +// checks all inventory slots for the haste item property +// we need this, because looping over all effects on the oPC does not find Haste from items +int GetHasHasteItemProperty(object oPC) +{ + int nInventorySlot; + object oItem; + + for (nInventorySlot = 0; nInventorySlot < NUM_INVENTORY_SLOTS; nInventorySlot++) + { + oItem = GetItemInSlot(nInventorySlot, oPC); + + if(GetIsObjectValid(oItem)) + { + if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_HASTE) ) + return TRUE; + } + } + return FALSE; +} + +struct BonusAttacks GetBonusAttacks(object oAttacker) +{ + int iSpell; + struct BonusAttacks sBonusAttacks; + int bHasHaste = FALSE; + int bMartialFlurry = FALSE; + + effect eEffect = GetFirstEffect(oAttacker); + + // loop through all effects as long as they are valid + while(GetIsEffectValid(eEffect)) + { + // might have to guard against multiple haste effects, so we set a flag + // could do this with the spell effects as well, but these should be only once on the PC + if (GetEffectType(eEffect) == EFFECT_TYPE_HASTE) + bHasHaste = TRUE; + else + { + iSpell = GetEffectSpellId(eEffect); + switch(iSpell) + { + case SPELL_FURIOUS_ASSAULT: + sBonusAttacks.iNumber++; + sBonusAttacks.iPenalty += 2; + break; + + case SPELL_MARTIAL_FLURRY_LIGHT: + case SPELL_MARTIAL_FLURRY_ALL: + bMartialFlurry = TRUE; + break; + + case SPELL_EXTRASHOT: + case SPELL_ONE_STRIKE_TWO_CUTS: // hopefully this spell is only on, if a katana is equipped + sBonusAttacks.iNumber++; + break; + } + } + eEffect = GetNextEffect(oAttacker); + } + + // if there is no Haste effect directly on the PC, check for haste on equipped items + if (!bHasHaste) + bHasHaste = GetHasHasteItemProperty(oAttacker); + + if (bHasHaste) + sBonusAttacks.iNumber++; + + if (bMartialFlurry) + { + sBonusAttacks.iNumber++; + sBonusAttacks.iPenalty += 2; + } + + return sBonusAttacks; +} + +// equips the first ammunition it finds in the inventory that works with the (ranged) weapon in the right hand +// returns the equipped new ammunition +object EquipAmmunition(object oPC) +{ +// no sanity checks other than invalid right hand weapon; assumes we are really wielding a ranged weapon +// if called with a non ranged weapon, it will equip a weapon of the same base type from the inventory, if it finds one + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + if (oWeapon == OBJECT_INVALID) + return oWeapon; + + int iWeaponType = GetBaseItemType(oWeapon); + int iAmmoSlot = GetAmmunitionInventorySlotFromWeaponType(iWeaponType); + int iNeededAmmoType; + + if (iAmmoSlot == INVENTORY_SLOT_ARROWS) + iNeededAmmoType = BASE_ITEM_ARROW; + else if (iAmmoSlot == INVENTORY_SLOT_BOLTS) + iNeededAmmoType = BASE_ITEM_BOLT; + else if (iAmmoSlot == INVENTORY_SLOT_BULLETS) + iNeededAmmoType = BASE_ITEM_BULLET; + else // darts, throwing axes or shuriken + iNeededAmmoType = iWeaponType; + + int bNotEquipped = TRUE; + object oItem = GetFirstItemInInventory(oPC); + + while (GetIsObjectValid(oItem) && bNotEquipped) + { + int iAmmoType = GetBaseItemType(oItem); + if( iAmmoType == iNeededAmmoType) + { + AssignCommand(oPC, ActionEquipItem(oItem, iAmmoSlot)); + bNotEquipped = FALSE; + } + oItem = GetNextItemInInventory(oPC); + } + + return oItem; +} + + + +object FindNearestEnemy(object oAttacker) +{ + return GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, oAttacker, 1, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, -1, -1); +} + +object FindNearestNewEnemy(object oAttacker, object oOldDefender) +{ + // Find nearest enemy creature that is not the oOldDefender + int iCreatureCounter = 1; + + object oTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, oAttacker, iCreatureCounter, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, -1, -1); + + // if there is no valid target at all, return directly + if (!GetIsObjectValid(oTarget)) + return OBJECT_INVALID; + + // skip over any old defender + else if (oTarget == oOldDefender) + { + iCreatureCounter++; + oTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, oAttacker, iCreatureCounter, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, -1, -1); + } + + // either the target is invalid, or we found our closest target that is not the old defender + // if this creature is not the closest living, no other will (unless GetNearestCreature is bugged, and returns dead creatures) + return oTarget; +} + +// Find nearest (valid) living enemy creature, that is not oOldDefender and that is within the specified range (in meters) +// default range is melee distance (=10 feet, 3.05 meters) +// If there is no (valid) living enemy within range, return the closest (living) enemy out of range +// If the first valid (supposedly living) creature found out of range is dead, or there is no (living) creature out of range, return OBJECT_INVALID +object FindNearestNewEnemyWithinRange(object oAttacker, object oOldDefender, float fDistance = MELEE_RANGE_METERS) +{ + int iCreatureCounter = 1; + object oTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, oAttacker, iCreatureCounter, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, -1, -1); + + // is the old defender valid? + int bOldDefenderValid = oOldDefender != OBJECT_INVALID; + + // skip over any target that is equal to the old defender + // this only makes sense if old defender is a valid object + if(bOldDefenderValid && oTarget == oOldDefender) + { + iCreatureCounter++; + oTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, oAttacker, iCreatureCounter, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, -1, -1); + } + + // if oTarget is invalid, there is no new enemy, so we return + if (!GetIsObjectValid(oTarget)) + return OBJECT_INVALID; + // we only return non-dead targets + else if (!GetIsDead(oTarget)) + return oTarget; + + // in the unlikely case that we found a dead, but valid target we only look for new candidate targets + // as long as the distance to our last found (valid but dead) candidate target is within the specified range + while (GetDistanceBetween(oTarget, oAttacker) <= fDistance) + { + iCreatureCounter++; + oTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, oAttacker, iCreatureCounter, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, -1, -1); + + // skip over any target that is equal to the old defender + // this only makes sense if old defender is a valid object + if(bOldDefenderValid && oTarget == oOldDefender) + { + iCreatureCounter++; + oTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, oAttacker, iCreatureCounter, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, -1, -1); + } + + // if there is no valid target, we abort + if (!GetIsObjectValid(oTarget)) + return OBJECT_INVALID; + // otherwise we only return non-dead targets + else if (!GetIsDead(oTarget)) + return oTarget; + } + // the last candidate target must have been valid, but dead and out of range, so we return OBJECT_INVALID + // we could also return the dead target, but that does not really make sense + return OBJECT_INVALID; +} + +// debug function, might move this to inc_utility +string GetActionName(int iAction) +{ + switch(iAction) + { + case ACTION_ANIMALEMPATHY: return "ACTION_ANIMALEMPATHY"; + case ACTION_ATTACKOBJECT: return "ACTION_ATTACKOBJECT"; + case ACTION_CASTSPELL: return "ACTION_CASTSPELL"; + case ACTION_CLOSEDOOR: return "ACTION_CLOSEDOOR"; + case ACTION_COUNTERSPELL: return "ACTION_COUNTERSPELL"; + case ACTION_DIALOGOBJECT: return "ACTION_DIALOGOBJECT"; + case ACTION_DISABLETRAP: return "ACTION_DISABLETRAP"; + case ACTION_DROPITEM: return "ACTION_DROPITEM"; + case ACTION_EXAMINETRAP: return "ACTION_EXAMINETRAP"; + case ACTION_FLAGTRAP: return "ACTION_FLAGTRAP"; + case ACTION_FOLLOW: return "ACTION_FOLLOW"; + case ACTION_HEAL: return "ACTION_HEAL"; + case ACTION_INVALID: return "ACTION_INVALID"; + case ACTION_ITEMCASTSPELL: return "ACTION_ITEMCASTSPELL"; + case ACTION_KIDAMAGE: return "ACTION_KIDAMAGE"; + case ACTION_LOCK: return "ACTION_LOCK"; + case ACTION_MOVETOPOINT: return "ACTION_MOVETOPOINT"; + case ACTION_OPENDOOR: return "ACTION_OPENDOOR"; + case ACTION_OPENLOCK: return "ACTION_OPENLOCK"; + case ACTION_PICKPOCKET: return "ACTION_PICKPOCKET"; + case ACTION_PICKUPITEM: return "ACTION_PICKUPITEM"; + case ACTION_RANDOMWALK: return "ACTION_RANDOMWALK"; + case ACTION_RECOVERTRAP: return "ACTION_RECOVERTRAP"; + case ACTION_REST: return "ACTION_REST"; + case ACTION_SETTRAP: return "ACTION_SETTRAP"; + case ACTION_SIT: return "ACTION_SIT"; + case ACTION_SMITEGOOD: return "ACTION_SMITEGOOD"; + case ACTION_TAUNT: return "ACTION_TAUNT"; + case ACTION_USEOBJECT: return "ACTION_USEOBJECT"; + case ACTION_WAIT: return "ACTION_WAIT"; + } + return "unknown"; +} + +//returns a struct describing the applicable damage reductions with the given weapon and target +struct DamageReducers GetTotalReduction(object oPC, object oTarget, object oWeapon) +{ + int nDamageType = GetWeaponDamageType(oWeapon); + //Note: DamageType is a bitwise number. 1 is B, 2 is P, 4 is S. + //if(DEBUG) DoDebug("Damage Type: " + IntToString(nDamageType)); + int nAttackBonus = GetMonkEnhancement(oWeapon, oTarget, oPC); + + //handling for ammo + if(oWeapon == GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC) + || oWeapon == GetItemInSlot(INVENTORY_SLOT_BULLETS, oPC) + || oWeapon == GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC)) + nAttackBonus = GetWeaponAttackBonusItemProperty(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC), oTarget); + + if(DEBUG) DoDebug("Weapon Atk Bonus: " + IntToString(nAttackBonus)); + + struct DamReduction nBestDamageReduction; + int nBestDamageResistance = 0; + int nApplicableReduction; + int nBestImmunutyLevel; + struct DamReduction nCurrentReduction; + nCurrentReduction.nRedLevel = DAMAGE_POWER_NORMAL; + nCurrentReduction.nRedAmount = 0; + nBestDamageReduction = nCurrentReduction; + + if(nAttackBonus < 1) nApplicableReduction = DAMAGE_POWER_NORMAL; + else nApplicableReduction = IPGetDamageBonusConstantFromNumber(nAttackBonus); + + + //loop through spell/power effects first + effect eLoop=GetFirstEffect(oTarget); + + while (GetIsEffectValid(eLoop)) + { + int nSpellID = GetEffectSpellId(eLoop); + + //Stoneskin + if( nSpellID == 172 + || nSpellID == 342 + || nSpellID == SPELL_URDINNIR_STONESKIN) + { + nCurrentReduction.nRedLevel = DAMAGE_POWER_PLUS_FIVE; + nCurrentReduction.nRedAmount = 10; + } + //GreaterStoneskin + if( nSpellID == 74) + { + nCurrentReduction.nRedLevel = DAMAGE_POWER_PLUS_FIVE; + nCurrentReduction.nRedAmount = 20; + } + //Premonition + if( nSpellID == 134) + { + nCurrentReduction.nRedLevel = DAMAGE_POWER_PLUS_FIVE; + nCurrentReduction.nRedAmount = 30; + } + //Ghostly Visage + if( nSpellID == 351 + || nSpellID == 605 + || nSpellID == 120) + { + nCurrentReduction.nRedLevel = DAMAGE_POWER_PLUS_ONE; + nCurrentReduction.nRedAmount = 5; + } + //Ethereal Visage + if( nSpellID == 121) + { + nCurrentReduction.nRedLevel = DAMAGE_POWER_PLUS_THREE; + nCurrentReduction.nRedAmount = 20; + } + //Shadow Shield and Shadow Evade(best case) + if( nSpellID == 160 + || nSpellID == 477 + || nSpellID == SPELL_SHADOWSHIELD) + { + nCurrentReduction.nRedLevel = DAMAGE_POWER_PLUS_THREE; + nCurrentReduction.nRedAmount = 10; + } + //Iron Body + if( nSpellID == POWER_IRONBODY) + { + nCurrentReduction.nRedLevel = DAMAGE_POWER_PLUS_FIVE; + nCurrentReduction.nRedAmount = 15; + } + //Oak Body + if( nSpellID == POWER_OAKBODY && nDamageType == DAMAGE_TYPE_SLASHING) + { + nBestDamageResistance = 10; + } + //Shadow Body + if( nSpellID == POWER_SHADOWBODY) + { + nCurrentReduction.nRedLevel = DAMAGE_POWER_PLUS_ONE; + nCurrentReduction.nRedAmount = 10; + } + + //if it applies and prevents more damage, replace + if(nCurrentReduction.nRedLevel > nApplicableReduction + && nCurrentReduction.nRedAmount > nBestDamageReduction.nRedAmount) + nBestDamageReduction = nCurrentReduction; + + + eLoop=GetNextEffect(oTarget); + } + + //now loop through items + int nSlot; + object oItem; + itemproperty ipResist = ItemPropertyDamageResistance(nDamageType, IP_CONST_DAMAGERESIST_5); + int nSubType; + + for (nSlot=0; nSlot nBestDamageResistance) nBestDamageResistance = nResist; + } + } + + if(GetItemPropertyType(ipLoop) == ITEM_PROPERTY_DAMAGE_REDUCTION/* + && GetItemPropertySubType(ipLoop) > nApplicableReduction*/) + { + int nReduce = GetItemPropertyCostTableValue(ipLoop) * 5; + if (nReduce > nBestDamageReduction.nRedAmount) + nBestDamageReduction.nRedAmount = nReduce; + } + + if(GetItemPropertyType(ipLoop) == ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE) + { + nSubType = GetItemPropertySubType(ipLoop); + if(nSubType == 0) nSubType = 1; + if(nSubType == 1) nSubType = 2; + if(nSubType == 2) nSubType = 4; + if((nSubType & nDamageType) == nSubType) + { + int nImmune = 0; + if(GetItemPropertyCostTableValue(ipLoop) == 1) + nImmune = 5; + else if(GetItemPropertyCostTableValue(ipLoop) == 2) + nImmune = 10; + else if(GetItemPropertyCostTableValue(ipLoop) == 3) + nImmune = 25; + else if(GetItemPropertyCostTableValue(ipLoop) == 4) + nImmune = 50; + else if(GetItemPropertyCostTableValue(ipLoop) == 5) + nImmune = 75; + else if(GetItemPropertyCostTableValue(ipLoop) == 6) + nImmune = 90; + else if(GetItemPropertyCostTableValue(ipLoop) == 7) + nImmune = 100; + + if(nImmune > nBestImmunutyLevel) nBestImmunutyLevel = nImmune; + } + } + + //Next itemproperty on the list... + ipLoop=GetNextItemProperty(oItem); + } + + //}//end item prop check + + }//end validity check + }//end for + if(DEBUG) DoDebug("Best Resistance: " + IntToString(nBestDamageResistance)); + if(DEBUG) DoDebug("Best Reduction: " + IntToString(nBestDamageReduction.nRedAmount)); + if(DEBUG) DoDebug("Best Percent Immune: " + IntToString(nBestImmunutyLevel)); + + struct DamageReducers drOverallReduced; + drOverallReduced.nStaticReductions = nBestDamageResistance + nBestDamageReduction.nRedAmount; + drOverallReduced.nPercentReductions = nBestImmunutyLevel; + + return drOverallReduced; +} + + +// experimental: not functional +// checks the action type (to be determined by a call to GetCurrentAction()) and returns TRUE, +// if this action type is compatible with being in physical combat +// (physical combat - including touch attack spells - is the combat done by PerformAttack and PerformAttackRound) +// motu99: so far not clear, whether the categorization of the actions is sensible, +// @TODO: either comment out or comment in the appropriate line, if the categorization for a specific actions must be changed +// this function should eventually be used by AttackLoopLogic() in order to determine, whether oAttacker shall attack a new target or do nothing +//(for instance, we would do nothing when the player has decided to cast a spell, run away or do any other non physical combat action) +int GetIsPhysicalCombatAction(int iAction) +{ + switch(iAction) + { +// case ACTION_ANIMALEMPATHY: return TRUE; + case ACTION_ATTACKOBJECT: return TRUE; +// case ACTION_ANIMALEMPATHY: return TRUE; +// case ACTION_CASTSPELL: return TRUE; +// case ACTION_CLOSEDOOR: return TRUE; +// case ACTION_COUNTERSPELL: return TRUE; // not clear if we can counterspell while physically attacking, probably not +// case ACTION_DIALOGOBJECT: return TRUE; +// case ACTION_DISABLETRAP: return TRUE; + case ACTION_DROPITEM: return TRUE; +// case ACTION_EXAMINETRAP: return TRUE; +// case ACTION_FLAGTRAP: return TRUE; +// case ACTION_FOLLOW: return TRUE; +// case ACTION_HEAL: return TRUE; + case ACTION_INVALID: return TRUE; +// case ACTION_ITEMCASTSPELL: return TRUE; + case ACTION_KIDAMAGE: return TRUE; +// case ACTION_LOCK: return TRUE; + case ACTION_MOVETOPOINT: return TRUE; +// case ACTION_OPENDOOR: return TRUE; +// case ACTION_OPENLOCK: return TRUE; +// case ACTION_PICKPOCKET: return TRUE; +// case ACTION_PICKUPITEM: return TRUE; +// case ACTION_RANDOMWALK: return TRUE; +// case ACTION_RECOVERTRAP: return TRUE; +// case ACTION_REST: return TRUE; +// case ACTION_SETTRAP: return TRUE; +// case ACTION_SIT: return TRUE; + case ACTION_SMITEGOOD: return TRUE; + case ACTION_TAUNT: return TRUE; +// case ACTION_USEOBJECT: return TRUE; +// case ACTION_WAIT: return TRUE; + } + return FALSE; +} + +float GetSizeAdjustment(object oDefender, object oAttacker) +{ + int iSize = PRCGetCreatureSize(oAttacker) - CREATURE_SIZE_MEDIUM; +//DoDebug("GetSizeAdjustment: attacker size = "+IntToString(iSize)); + if (iSize < 0) + iSize = 0; + + int iSize2 = PRCGetCreatureSize(oDefender) - CREATURE_SIZE_MEDIUM; +//DoDebug("GetSizeAdjustment: defender size = "+IntToString(iSize2)); + if (iSize2 < 0) + iSize2 = 0; + + // for size above medium add a meter per (size - creature_size_medium) + return(IntToFloat(iSize+iSize2)); +} + +// this function is needed in order to have the aurora combat system and scripted prc combat to run smoothly in parallel +// oDefender is the target selected by the prc combat functions +// CheckForChangeOfTarget() tries to return the "best" target for the next (prc) attack +object CheckForChangeOfTarget(object oAttacker, object oDefender, int bAllowSwitchOfTarget = FALSE) +{ +// First we determine the attempted (or last attacked) target (oTarget) and check if it is equal to oDefender. +// If they are not equal, the preference is on oTarget, as it was the last attempted (last attacked) target +// (oTarget most likely reflects the last actions of the aurora combat system, and this most likely reflects the human player's wishes) +// we never switch targets if it is a ranged attack, unless our preferred target (oTarget) is invalid or dead +// if we are in melee combat, we never switch targets if our preferred target (oTarget) is already in melee range +// if we are in melee combat and our preferred target is out of melee range, we switch targets if we can find another target (usually oDefender) in melee range +// if both the preferred target and the closest other target are out of melee range (and both live), we only switch targets +// when the distance to the other target is 2 feet closer than the distance to our preferred target (oTarget) + + // find the target on which we are currently attempting an attack + object oTarget = GetAttemptedAttackTarget(); + + // if dead or invalid, try the last target we actually attacked - quite likely this will be equal to GetAttemptedTarget(), + // but it might still be worthwhile to try + if (!GetIsObjectValid(oTarget) || GetIsDead(oTarget)) + oTarget = GetAttackTarget(oAttacker); + + // check whether we might have to change targets + // find the "best pick" of oDefender and oTarget and make it oTarget + if (oTarget != oDefender) + { + //if (DEBUG) DoDebug(PRC_TEXT_WHITE + "PRC combat system: prc_inc_combat and aurora engine have selected different targets."); + // our preference is for oTarget, on which we attempted the most recent attack + // so we will return oTarget, unless + // the attempted (or last attacked) target is invalid or dead + if (!GetIsObjectValid(oTarget) || GetIsDead(oTarget)) + { + oTarget = oDefender; + } + // if oTarget lives, we replace oTarget only if + else if ( bAllowSwitchOfTarget // we have allowed a switch of targets (this should never be the case for a ranged attack) + && !GetIsInMeleeRange(oTarget, oAttacker) // oTarget is not in melee range + && GetIsObjectValid(oDefender) // oDefender is valid + && !GetIsDead(oDefender) // oDefender lives + // and the distance to oDefender is more than two feet (0.67 meters) less than to oTarget + && GetDistanceBetween(oAttacker, oDefender) + 0.67 < GetDistanceBetween(oAttacker, oTarget) ) + { + oTarget = oDefender; + } + } + + // our best pick for oTarget might still be dead + // this would only happen, when oDefender and oTarget are both dead or invalid + if( !GetIsObjectValid(oTarget) || GetIsDead(oTarget)) + { + // motu99: in the original code we aborted no matter what + // but I think we should at least try to find a valid target + // as long as we are still attacking, it is quite natural to look for + // new enemies and attack them, instead of just standing around, taking the + // hits and waiting for the human player to select our target for us +/* + // it really only makes sense to look for a new target, if we are still attacking + // otherwise our actions will interfere with any other (non-combat) actions (such as running away, drinking potions, etc.) + // OTOH this is a combat function, so we implicitly assume that we are still in combat + // (we should have checked this on every entry to AttackLoopLogic() or AttackLoopMain(), therefore it is commented out here) + if (GetCurrentAction(oAttacker) != ACTION_ATTACKOBJECT) + return OBJECT_INVALID; +*/ + oTarget = FindNearestEnemy(oAttacker); + + // if the nearest (living) enemy is dead or invalid still, we must abort + if(!GetIsObjectValid(oTarget) || GetIsDead(oTarget)) + { + return OBJECT_INVALID; + } + } + // oTarget lives, but (s)he might be out of melee range, so find a closer target if the switch permits (and we are not doing ranged combat) + else if (bAllowSwitchOfTarget) + { + // only attempt a target switch, if oTarget is not in melee range + if (!GetIsInMeleeRange(oTarget, oAttacker)) + { + // find the nearest enemy (this could well be oTarget) + oDefender = FindNearestEnemy(oAttacker); + + // if oTarget is already the closest enemy, then we are finished + if (oDefender == oTarget) + return oTarget; + + // only makes sense to switch targets, if oDefender lives + if (GetIsObjectValid(oDefender) && !GetIsDead(oDefender)) + { + // if oDefender is in melee range, than that is our preferred choice + if(GetIsInMeleeRange(oDefender, oAttacker)) + oTarget = oDefender; + + // oTarget and oDefender are both out of melee range. + // in this case our preference is still on oTarget! So we articially increase the distance to oDefender by 2 feet before we compare + if (GetDistanceBetween(oAttacker, oDefender) + 0.67 <= GetDistanceBetween(oAttacker, oTarget)) + oTarget = oDefender; + } + } + } + + return oTarget; +} + +// this is to cancel any other "move to location" commands +// it will not reset the combat status +// note that if you make several calls to PerformAttack() via AssignCommand(DelayCommand(fDelay, PerformAttack())) +// this might cancel any PerformAttack() actions that are still in the "pipeline" +// so better change the order to DelayCommand(fDelay, AssignCommand(PerformAttack())) +// or just don't use AssignCommand +void ClearAllActionsAndMoveToLocation(object oTarget) +{ + ClearAllActions(); + ActionMoveToLocation(GetLocation(oTarget), TRUE); +} + +void ClearAllActionsAndAttack(object oTarget) +{ + ClearAllActions(); + ActionAttack(oTarget); +} + +void ClearAllActionsAndMoveToObject(object oTarget, float fRange = 2.0) +{ + ClearAllActions(); + ActionMoveToObject(oTarget, TRUE, fRange); +} + +void ClearAllActionsMoveToObjectAndAttack(object oTarget, float fRange = 2.0) +{ + ClearAllActions(); + ActionMoveToObject(oTarget, TRUE, fRange); + ActionAttack(oTarget); +} + +// AttackLoopLogic actually does the attack, e.g. it does all the rolls, and then calculates and applies the damage +/** +// INTERNAL LOGIC: + +// AttackLoopLogic is called with the number of attacks left *after* the attack is done +// This info is needed,when we call AttackLoopMain() at the end of the AttackLoopLogic in order to schedule more attacks. +// AttackLoopLogic will *first* do the attack with the parameters given, +// it will only check iBonusAttacks, iMainhandAttacks and iOffhandAttacks later +// in order to decrement the Attack-modifier after it actually did the attack + +// When doing the attack,we first make some checks (if defender is still valid) and whether we actually can attack the defender +// in order to run smoothly with the parallel running aurora system, we will select the "best" target for the next attack + +// if we are in melee combat, the target is out of melee range, but a 5 foot step can bring us into range, we do the 5 foot step +// we can only do a 5 foot step once in a full combat round. If we cannot get into melee range with a 5 foot step, we cancel +// the full attack round and do a move action to the target (we do this by an ActionAttack() command, so that +// the aurora engine will initiate a new full combat round as soon as we are in melee range) + +// if we found a target in range, and it is the first attack, the attacker will be put out of stealth mode or invisibility etc. +// then we check whether oDefender helpless. If so, we can coup the grace him. We forfeit all remaining attacks and try the coup + +// if oAttacker does not do a coup de grace, we roll a normal attack roll +// if the attack roll hits, AttackLoopLogic applies the damage, including any special effects +// special effects can be applied to all attacks, or only to the first attack in the round. + +// if we hit on our attack (and applied the damage), AttackLoopLogic determines whether it can do a circle kick +// if we can do the circle kick (e.g. have the feat, there is a different target in melee range, and we did not already do +// a circle kick in the round) AttackLoopLogic calls itself recursively to do the circle kick + +// after the attack was performed (successful or not), AttackLoopLogic checks whether the defender is dead +// if (s)he dead, AttackLoopLogic will look for a new defender + +// it the new defender is in melee range (and it actually was oAttacker that killed it), we check for the +// cleave feat, and do the cleave by calling AttackLoopLogic recursively + +// if the new defender is out of range, we move to it (unless we have a ranged weapon), and hope we +// are in range on the next attack + +// when AttackLoopLogic has done the attack (with all associated cleave and circle kick attacks), it checks whether there are any attacks left in the round +// if so, it decrements the AB-modifier for multiple attacks and calls AttackLoopMain (with the proper delay) to schedule the next attack +*/ +void AttackLoopLogic(object oDefender, object oAttacker, + int iBonusAttacks, int iMainAttacks, int iOffHandAttacks, int iMod, + struct AttackLoopVars sAttackVars, struct BonusDamage sMainWeaponDamage, + struct BonusDamage sOffHandWeaponDamage, struct BonusDamage sSpellBonusDamage, + int iOffhand, int bIsCleaveAttack) +{ + + int iAction = GetCurrentAction(oAttacker); + bFirstAttack = !sAttackVars.iAttackNumber; + + if (DEBUG) DoDebug("entered AttackLoopLogic: bFirstAttack = " + IntToString(bFirstAttack) + ", cleave = " + IntToString(bIsCleaveAttack) + ", current action = " + GetActionName(iAction)); + if (DEBUG) DoDebug("AttackLoopLogic: iMainAttacks = " + IntToString(iMainAttacks) + ", iOffHandAttacks = " + IntToString(iOffHandAttacks) + ", iBonusAttacks = " + IntToString(iBonusAttacks)); + + int bIsRangedAttack = sAttackVars.bIsRangedWeapon || sAttackVars.iTouchAttackType == TOUCH_ATTACK_RANGED_SPELL || sAttackVars.iTouchAttackType == TOUCH_ATTACK_RANGED; + + // check for valid target etc., but only if it is not a cleave or circle kick (in this case we checked all of this before) + if (!bIsCleaveAttack) + { + // if we are not attacking, abort (we loose all attacks which might be left in the round) + // we only check for an abort, if we are in the heartbeat combat mode (such as natural weapon + // attacks, or offhand attacks scheduled from a HB and running in parallel with aurora physical combat) + if ((sAttackVars.bMode & PRC_COMBATMODE_HB)) + { + // the following check only works, if PRC and aurora combat systems run in parallel, so that aurora sets the attack action properly + // we check the current action, and if it is not equal to ACTION_ATTACKOBJECT or ACTION_MOVETOPOINT, we return + // if PRC combat is to do an attack regardless of the current action state of oAttacker + // we must set the local int "prc_action_attack" to TRUE in advance (and then delete it with a DelayCommand() after we did the attack) + if (iAction != ACTION_ATTACKOBJECT && iAction != ACTION_MOVETOPOINT) +// if(!GetIsPhysicalCombatAction(GetCurrentAction(oAttacker))) + { + if (DEBUG) DoDebug("AttackLoopLogic: current action is not ACTION_ATTACKOBJECT or ACTION_MOVETOPOINT - aborting"); + return; + } + } + + // now determine whether it makes sense to switch to a better target in the following function CheckForChangeOfTarget() + // if the original target lives, we only allow a switch to a better target, if it is not a ranged attack and we set the respective PRC switch + int bAllowSwitchOfTarget = !bIsRangedAttack && GetPRCSwitch(PRC_ALLOW_SWITCH_OF_TARGET); + if (sAttackVars.bMode & PRC_COMBATMODE_ALLOW_TARGETSWITCH) + { + // now catch any changes in targeting that the parallell running aurora engine might have enforced and return the best target + oDefender = CheckForChangeOfTarget(oAttacker, oDefender, bAllowSwitchOfTarget); + } + + // if after all the trouble looking for a valid target we did not find one, abort the attack + if(oDefender == OBJECT_INVALID || GetIsDead(oDefender)) + { + if (DEBUG) DoDebug(PRC_TEXT_WHITE + "AttackLoopLogic: no enemies left - aborting"); + return; + } + + // If oDefender is not within melee range and it is not a ranged attack + // move to oDefender so that we can attack next round. We give up all remaining attacks in the round, unless we can do a 5 foot step + if(!bIsRangedAttack && !GetIsInMeleeRange(oDefender, oAttacker)) + { + // can we do a 5 foot step in order to get into melee range? + float fDistance = GetDistanceBetween(oDefender, oAttacker) - GetSizeAdjustment(oDefender, oAttacker); + if (DEBUG) DoDebug(PRC_TEXT_WHITE + "AttackLoopLogic: target is out of melee range, size adjusted distance = "+FloatToString(fDistance)+", size adjustment = "+FloatToString(GetSizeAdjustment(oDefender, oAttacker))); + if (!sAttackVars.bFiveFootStep && fDistance <= RANGE_15_FEET_IN_METERS) + { + if (DEBUG) DoDebug(PRC_TEXT_WHITE + "AttackLoopLogic: waiting for aurora engine to do 5 foot step to move to melee range of " + GetName(oDefender) + ", current action: " + GetActionName(GetCurrentAction(oAttacker))); + + // motu99: The problem is, in order to move into range we must clear the attack action, otherwise the move will not be done + // If we clear the attack action, we must issue an ActionAttack after the move + // But this will initiate a new combat round (cutting off any attacks left from the old round) + // The ugly workaround is to just wait and hope the aurora engine does the move for us + // therefore the following statement is commented out + // ClearAllActionsMoveToObjectAndAttack(oDefender, MELEE_RANGE_METERS-1.); + + sAttackVars.bFiveFootStep = TRUE; // remember that we did a five foot step + + // now call attackLoopLogic with a delay and exactly the same parameters (and hope we are in range then) + DelayCommand(1.0, + AttackLoopLogic(oDefender, oAttacker, iBonusAttacks, iMainAttacks, iOffHandAttacks, + iMod, sAttackVars, sMainWeaponDamage, sOffHandWeaponDamage, sSpellBonusDamage, + iOffhand, bIsCleaveAttack)); + // this return statement will not give up any pending attacks, because we called AttackLoopLogic in a DelayCommand beforehand + return; + } + else if (fDistance <= fMaxAttackDistance) + { + // Our closest enemy is out of melee range (e.g. more than 10 feet away) and we cannot do a 5 foot step to get into range + // This means we need a full move action, e.g. we must give up all remaining attacks in the round + // so we call ActionAttack() in order to move to our enemy and let the aurora engine start a new combat round + // against oDefender, whenever we are in range + if (DEBUG) DoDebug(PRC_TEXT_WHITE + "AttackLoopLogic: doing full move action to get into melee range of " + GetName(oDefender) + ", current action: " + GetActionName(GetCurrentAction(oAttacker))); + + // Note that in general we do not wan't to use the ActionAttack() command within PRC combat, because this will initiate + // a new attack round by the aurora engine. But here the rules require us to start a new combat round anyway. + // AssignCommand(oAttacker, ClearAllActionsAndAttack(oDefender)); + ClearAllActions(); + ActionAttack(oDefender); + + // now determine whether we abort the scripted combat round, or if we just delay the next attack (and hope we are in range then) + if (sAttackVars.bMode & PRC_COMBATMODE_ABORT_WHEN_OUT_OF_RANGE) + { + // The following return statement will terminate the whole combat round + return; + } + else + { + // call attackLoopLogic with a delay and exactly the same parameters (and hope we are in range then) + DelayCommand(1.0, + AttackLoopLogic(oDefender, oAttacker, iBonusAttacks, iMainAttacks, iOffHandAttacks, + iMod, sAttackVars, sMainWeaponDamage, sOffHandWeaponDamage, sSpellBonusDamage, + iOffhand, bIsCleaveAttack)); + // this return statement will not give up any pending attacks, because we called AttackLoopLogic in a DelayCommand beforehand + return; + } + } + else + { + // our closest enemy is so far away, it does not make sense to attack it; just drop the attack + if (DEBUG) DoDebug(PRC_TEXT_WHITE + "AttackLoopLogic: target " + GetName(oDefender) + " is too far away, current action: " + GetActionName(GetCurrentAction(oAttacker))); + // The following return statement will terminate the whole combat round + return; + } + } + + // Since we are attacking, remove sanctuary / invisibility effects. + // Only bother to do this on the first attack... + // as they won't have the effect anymore on subsequent iterations. + if (bFirstAttack) + { + // FrikaC: Ghost strike doesn't cancel ethereal / invisible + if( !GetLocalInt(oAttacker, "prc_ghost_strike") + && ( PRCGetHasEffect(EFFECT_TYPE_INVISIBILITY, oAttacker) + || PRCGetHasEffect(EFFECT_TYPE_SANCTUARY, oAttacker) + ) + ) + { // now remove sanctuary and invisibility effects from attacker + // if (DEBUG) DoDebug("AttackLoopLogic: remove invisibility and sanctuary"); + + effect eEffect = GetFirstEffect(oAttacker); + while (GetIsEffectValid(eEffect) ) + { + int iType = GetEffectType(eEffect); + if( iType == EFFECT_TYPE_INVISIBILITY || iType == EFFECT_TYPE_SANCTUARY ) + // motu99: Why delay? What with instant attacks? + DelayCommand(0.01, RemoveEffect(oAttacker, eEffect)); + + eEffect = GetNextEffect(oAttacker); + } + } + + // take the player out of stealth mode + if(GetActionMode(oAttacker, ACTION_MODE_STEALTH) ) + { + // if (DEBUG) DoDebug("AttackLoopLogic: take attacker out of stealth mode"); + SetActionMode(oAttacker, ACTION_MODE_STEALTH, FALSE); + } + } + } + + // everything is set in order to actually do the attack + + effect eDamage; + effect eInvalid; + string sMes = ""; + int iAttackRoll = 0; + int bIsCritcal = FALSE; + + // set duration type of special effect based on passed value + int iDurationType = DURATION_TYPE_INSTANT; + if (sAttackVars.eDuration > 0.0) iDurationType = DURATION_TYPE_TEMPORARY; + if (sAttackVars.eDuration < 0.0) iDurationType = DURATION_TYPE_PERMANENT; + + // check defender HP before attacking + // motu99: HP check is most likely redundant, because we checked for a dead oDefender beforehand + if(GetCurrentHitPoints(oDefender) > 0) + { +// DoDebug("AttackLoopLogic: found living target - " + GetName(oDefender)); + + // weapon variables have to be initialized for the hand that does the attack + object oWeapon; + int iAttackBonus; + int iWeaponDamageRound; + int iNumDice; + int iNumSides; + int iCritMult; + struct BonusDamage sWeaponDamage; + + if (iOffhand) + { // if attack is from left hand set vars to left hand values + oWeapon = sAttackVars.oWeaponL; + iAttackBonus = sAttackVars.iOffHandAttackBonus; + iWeaponDamageRound = sAttackVars.iOffHandWeaponDamageRound; + iNumDice = sAttackVars.iOffHandNumDice; + iNumSides = sAttackVars.iOffHandNumSides; + iCritMult = sAttackVars.iOffHandCritMult; + sWeaponDamage = sOffHandWeaponDamage; + } + else + { // attack is from main hand, set vars to right hand values + oWeapon = sAttackVars.oWeaponR; + iAttackBonus = sAttackVars.iMainAttackBonus; + iWeaponDamageRound = sAttackVars.iMainWeaponDamageRound; + iNumDice = sAttackVars.iMainNumDice; + iNumSides = sAttackVars.iMainNumSides; + iCritMult = sAttackVars.iMainCritMult; + sWeaponDamage = sMainWeaponDamage; + } + + int bIsTouchAttackSpell = sAttackVars.iTouchAttackType == TOUCH_ATTACK_RANGED_SPELL || sAttackVars.iTouchAttackType == TOUCH_ATTACK_MELEE_SPELL; + int bHasCriticalImmunity = GetIsImmune(oDefender, IMMUNITY_TYPE_CRITICAL_HIT, oAttacker); + + // will be true on any instant death effects (Coup de Grace, devastating critical) + int bInstantKill = FALSE; + + // Coup De Grace + // Automatic critical hit: Fort save DC: 10 + damage dealt + // Note: The rest of the code is in GetAttackDamage + // this is because that part has the damage dealt in it. + + // motu99: Do we always want a coup de grace? A strong fighter might do better without (cleaving several enemies to death in a round) + // maybe we should use a switch in order to disable automatic coup de grace? + // this should be a switch on the PC, not the module, and we need to access it via the PRC-menu + int bDisableCoupDeGrace = GetPRCSwitch(PRC_DISABLE_COUP_DE_GRACE); + + if (!bDisableCoupDeGrace && !GetLocalInt(oAttacker, "PactQuality"+IntToString(VESTIGE_BUER)) && GetHasSpellEffect(VESTIGE_BUER, oAttacker)) bDisableCoupDeGrace = TRUE; + + if( !bDisableCoupDeGrace + && bFirstAttack + && !bHasCriticalImmunity + && GetIsHelpless(oDefender)) + { + if(DEBUG) DoDebug(PRC_TEXT_WHITE + "AttackLoopLogic: attempting coup the grace"); + // make hit a crit + iAttackRoll = 2; + + // remove all other attacks this round + // you give up all other attacks to make a coupe de grace + iBonusAttacks = 0; + iMainAttacks = 0; + iOffHandAttacks = 0; + + // apply the CDG directly, if spell ability (otherwise do it in the GetDamageRoll() function) + if(bIsTouchAttackSpell) + { + // DC = 10 + damage dealt. + int iSaveDC = 10; + int iDamage = sAttackVars.iDamageModifier; + + // if the attack effects all attacks use DAMAGE_BONUS_* const + if(sAttackVars.bEffectAllAttacks) iDamage = GetDamageByConstant(iDamage, FALSE); + + iSaveDC += iDamage; + + if (DEBUG) DoDebug("AttackLoopLogic: coup de grace as a spell like touch attack - trying fortitude save with DC = " + IntToString(iSaveDC)); + if(!FortitudeSave(oDefender, iSaveDC, SAVING_THROW_TYPE_NONE, oAttacker) ) + { + sMes = "*Coup De Grace*"; + if (DEBUG) + { + sMes = "scripted " + sMes; + //SendMessageToPC(oAttacker, sMes); + } + + FloatingTextStringOnCreature(sMes, oAttacker, FALSE); + + // circumvents death immunity... since anyone CDG'ed is dead. + effect eDeath = EffectDamage(9999, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_ENERGY); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oDefender); + if (GetIsDead(oDefender)) + bInstantKill = TRUE; + } + } + } // End Coup de Grace (CDG) + else + { + // if not CDG, perform normal attack roll + if (DEBUG) DoDebug("AttackLoopLogic: do normal attack roll"); + iAttackRoll = GetAttackRoll(oDefender, oAttacker, oWeapon, iOffhand, iAttackBonus, iMod, TRUE, 0.0, sAttackVars.iTouchAttackType); + } + + // was it a critical? + if(iAttackRoll == 2) + { + bIsCritcal = TRUE; + SetLocalInt(oDefender, "PRCCombat_CriticalHit", TRUE); + DelayCommand(1.0, DeleteLocalInt(oDefender, "PRCCombat_CriticalHit")); + } + + // This sets a local variable on the target that is struck + // Allows you to apply saves and such based on the success or failure + if(bFirstAttack && iAttackRoll) + { + if (DEBUG) DoDebug("AttackLoopLogic: hit on first attack - setting PRC local int"); + SetLocalInt(oDefender, "PRCCombat_StruckByAttack", TRUE); + DelayCommand(1.0, DeleteLocalInt(oDefender, "PRCCombat_StruckByAttack")); + } + + // if critical hit and vorpal weapon, apply vorpal effect, but only if we didn't coup de grace them before + if(!bInstantKill && bIsCritcal && bIsVorpalWeaponEquiped) + { + if (DEBUG) DoDebug(PRC_TEXT_WHITE + "AttackLoopLogic: critical hit with vorpal weapon effect - Defender must do fortitude save with DC " + IntToString(iVorpalSaveDC)); + if( !FortitudeSave(oDefender, iVorpalSaveDC, SAVING_THROW_TYPE_NONE) ) + { + sMes = "*Vorpal Blade*"; + if (DEBUG) + { + sMes = "scripted " + sMes; + //SendMessageToPC(oAttacker, sMes); + } + FloatingTextStringOnCreature(sMes, oAttacker, FALSE); + + effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oDefender); + + effect eDeath = EffectDamage(9999, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_ENERGY); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oDefender); + if (GetIsDead(oDefender)) + bInstantKill = TRUE; + } + } // end of code for vorpal weapon + + // reset global vorpal variables + bIsVorpalWeaponEquiped = FALSE; + iVorpalSaveDC = 0; + + int bDoSpecialEffect = ( bFirstAttack || sAttackVars.bEffectAllAttacks ); + // now do the messages + if(iAttackRoll) + { // messages for *hit* + // motu99: moved this from special effects section to here + // Don't quite sure if the sMessageSuccess/sMessageFailure strings are only for special attacks, or all attacks + // I would assume all. If not correct, move this code to the "special effects" section + if(bDoSpecialEffect && sAttackVars.sMessageSuccess != "") + FloatingTextStringOnCreature(sAttackVars.sMessageSuccess, oAttacker, FALSE); + if (DEBUG) + SendMessageToPC(oAttacker, sAttackVars.sMessageSuccess); + + // if this attack is a cleave attack or a circle kick + if(bIsCleaveAttack) + { // motu99: 3 means circle kick, 2 means great cleave, 1 is normal cleave (don't need to check for feats twice) + if(bIsCleaveAttack == 3) + sMes = "*Circle Kick Hit*"; + else if(bIsCleaveAttack == 2) + sMes = "*Great Cleave Hit*"; + else + sMes = "*Cleave Attack Hit*"; + + FloatingTextStringOnCreature(sMes, oAttacker, FALSE); + } + } + else // messages for *miss* + { + if(bDoSpecialEffect && sAttackVars.sMessageFailure != "") + FloatingTextStringOnCreature(sAttackVars.sMessageFailure, oAttacker, FALSE); + if (DEBUG) SendMessageToPC(oAttacker, sAttackVars.sMessageFailure); + + // we tried a cleave attack and missed + if(bIsCleaveAttack) + { + if(bIsCleaveAttack == 3) + sMes = "*Circle Kick Miss*"; + else if(bIsCleaveAttack == 2) + sMes = "*Great Cleave Miss*"; + else + sMes = "*Cleave Attack Miss*"; + + FloatingTextStringOnCreature(sMes, oAttacker, FALSE); + } + } // end of code for messages + + // now do the real stuff + // if we hit the enemy (and did not kill it instantly by CDG or vorpal) + if(!bInstantKill && iAttackRoll) + { + // only calculate damage if it is not a touch attack spell + if (!bIsTouchAttackSpell) + eDamage = GetAttackDamage(oDefender, oAttacker, oWeapon, sWeaponDamage, sSpellBonusDamage, iOffhand, iWeaponDamageRound, bIsCritcal, iNumDice, iNumSides, iCritMult); +/* + // apply the damage after a short delay + // motu99: why delay? If we delay, we cannot check for cleave later on + DelayCommand(0.01, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oDefender)); +*/ + // apply the damage directly, unless there is none + if (eDamage != eInvalid) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oDefender); +/* + // apply any on hit abilities from attackers weapon to defender shortly after damage; motu99: why delay? Check for dead target (and cleave/circle kick) is useless if we apply the damage outside AttackLoopLogic + DelayCommand(0.02,ApplyOnHitAbilities(oDefender, oAttacker, oWeapon)); +*/ + // apply on hit abilities of the attackers weapon to the defendor + ApplyOnHitAbilities(oDefender, oAttacker, oWeapon); + + // motu99: if it is a ranged attack, also apply the on hit abilities of the ammunition to the target + // (don't know if this makes sense, but there are blessed arrows and other stuff) + if (sAttackVars.oAmmo != OBJECT_INVALID && sAttackVars.oAmmo != oWeapon) + ApplyOnHitAbilities(oDefender, oAttacker, sAttackVars.oAmmo); + + // immediately apply any on hit abilities from defenders armor to attacker + // the bioware engine applies the onhit abilities of the armor in the context of the defender; we do it in the context of the attacker (so that we can apply the abilities instantly) + // If in the future we must do it the Bioware way, we have to use AssignCommand(oDefender, AppyOnHitAbilities(oAttacker, oDefender, oArmor)), which will apply the onhit + // capabilities of the armor in the context of oDefender. However, AssignCommands are executed AFTER the script is finished, so this will not be an instant application + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oDefender); + if( GetIsObjectValid(oArmor) ) + ApplyOnHitAbilities(oAttacker, oDefender, oArmor); + } + + // we hit: now do special effect (either applies to all attacks or to the first attack) + if(bDoSpecialEffect) + { + if (DEBUG) DoDebug("AttackLoopLogic: looking for special effects"); + // motu99: don't know if this works with negative damage + // if not, change "!= 0" to "> 0" + if(sAttackVars.iDamageModifier != 0) + { + int iDamagePower; + int iDamage; + + if (bIsTouchAttackSpell) // set damage power to normal for a touch spell + iDamagePower = DAMAGE_POWER_NORMAL; + else // otherwise, calculate damage power + iDamagePower = GetDamagePowerConstant(oWeapon, oDefender, oAttacker); + + // if special applies only to first attack, the damage should be given directly + iDamage = sAttackVars.iDamageModifier; + + // otherwise (special applies to all attacks) the damage given should be a DAMAGE_BONUS_* const + // motu99: don't know why this is handled so, but it says so in the description of PerformAttack(), so we do it + if (!bFirstAttack) + iDamage = GetDamageByConstant(iDamage, FALSE); + // Bypass damage reduction for effect damage if set + if(GetLocalInt(oAttacker, "MoveIgnoreDR")) + { + struct DamageReducers drReduced = GetTotalReduction(oAttacker, oDefender, oWeapon); + int nRedDR = drReduced.nStaticReductions * 100 / (100 - drReduced.nPercentReductions); + iDamage += nRedDR; + if(DEBUG) DoDebug("Damage increased by " + IntToString(nRedDR) + " to ignore DR with effects"); + } + if(DEBUG) DoDebug("AttackLoopLogic: found special effect (iDamageModifier = "+IntToString(iDamage)+") - now applying damage"); + + // apply the special effect damage + // motu99: maybe we should link this damage to the "normal" weapon damage? + effect eBonusDamage = EffectDamage(iDamage, sAttackVars.iDamageType, iDamagePower); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eBonusDamage, oDefender); + } + + // apply any special effects + // motu99: added check for invalid effect + if(sAttackVars.eSpecialEffect != eInvalid) + { + if (DEBUG) DoDebug("AttackLoopLogic: found special effect (eSpecialEffect) - now applying effect"); + //struct PRCeffect eSpecialEffect = GetLocalPRCEffect(GetModule(), sAttackVars.sEffectLocalName); + ApplyEffectToObject(iDurationType, sAttackVars.eSpecialEffect, oDefender, sAttackVars.eDuration); + } + } + } // end of code for a *hit* (iAttackRoll > 0), excluding instant kills (bInstantKill == FALSE) + + // stuff we have to do after an attack, regardless if we missed or not + // not the first attack any more + sAttackVars.iAttackNumber++; + bFirstAttack = !sAttackVars.iAttackNumber; + + // Code to remove ammo from inventory after an attack is made + if( sAttackVars.bIsRangedWeapon ) + { + if (DEBUG) DoDebug("AttackLoopLogic: reducing ammunition"); + SetItemStackSize(sAttackVars.oAmmo, (GetItemStackSize(sAttackVars.oAmmo) - 1) ); + } + + // code for circle kick + // DoDebug("AttackLoopLogic: check for circle kick"); + if( iAttackRoll // only if we scored a hit + && sAttackVars.iCircleKick == 0 // only if we didn't yet do a circle kick + && GetHasMonkWeaponEquipped(oAttacker) // we must be unarmed (or wield a kama) + && GetHasFeat(FEAT_CIRCLE_KICK, oAttacker) ) // and we need the feat + { + if (DEBUG) DoDebug(PRC_TEXT_WHITE + "AttackLoopLogic: *hit* - now attempting circle kick"); + // Find nearest enemy creature within 10 feet + /* + // motu99: logic is screwed. Mostly we will be taking the second nearest creature, because we discard the nearest before looking whether it is valid and in range + int iVal = 1; + int bHasValidTarget = FALSE; + int bIsWithinRange = TRUE; + object oTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, oAttacker, iVal, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, -1, -1); + while(GetIsObjectValid(oTarget) && !bHasValidTarget && bIsWithinRange ) + { + iVal += 1; + oTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, oAttacker, iVal, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, -1, -1); + + // will cause the loop to end on a valid target + if(oTarget != oDefender && GetIsInMeleeRange(oDefender, oAttacker) ) + bHasValidTarget = TRUE; + + // will cause the loop to end if there are no valid enemies within range + if(!GetIsInMeleeRange(oDefender, oAttacker) ) + bIsWithinRange = FALSE; + } + */ + object oCircleKickDefender = FindNearestNewEnemyWithinRange(oAttacker, oDefender); + if( GetIsObjectValid(oCircleKickDefender) + && !GetIsDead(oCircleKickDefender) + && GetIsInMeleeRange(oCircleKickDefender, oAttacker) ) + { + // DoDebug("AttackLoopLogic: found valid target for circle kick " + GetName(oCircleKickDefender)); + + // remember that we did a circle kick in the round (so we cannot do any more) + sAttackVars.iCircleKick++; + // not sure, if circle kick comes at full AB, assumed so (if not, comment iMod in again) + AttackLoopLogic(oDefender, oAttacker, iBonusAttacks, iMainAttacks, iOffHandAttacks, 0 /*iMod*/, sAttackVars, sMainWeaponDamage, sOffHandWeaponDamage, sSpellBonusDamage, iOffhand, 3); + } + else + { + if(DEBUG) DoDebug("AttackLoopLogic: no valid target for circle kick"); + } + } // end code for circle kick + + } // end of code for oDefender with hitpoints HP > 0 + else + { // this stub is for any code possibly required for the case when oDefender had HP <= 0 on entry + } + + // we are now through with the original attack sequence + // now we check HP of enemy to see if they are alive still or not + // note that defender could have been below 1 HP from the beginning - we can see whether we actually killed it in *this* attack, if iAttackRoll > 0 + // motu99: problem in original code was, that damage application was delayed (except for a coup de grace), + // so we couldn't have noticed in the following checks whether they would be dead; changed that + //if (DEBUG) DoDebug("AttackLoopLogic: check for dead enemy"); + if(!GetIsObjectValid(oDefender) || GetCurrentHitPoints(oDefender) <= 0) + { + //if (DEBUG) DoDebug("AttackLoopLogic: enemy dead or invalid after attack"); + + // if enemy is dead find a new target (we are absolutely free in choosing a new one, so we take the closest) + oDefender = FindNearestEnemy(oAttacker); + + // if there is no new valid target, then no more attacks + if( !GetIsObjectValid(oDefender) || GetIsDead(oDefender)) + { + oDefender = OBJECT_INVALID; + if(DEBUG) DoDebug(PRC_TEXT_WHITE + "No new valid targets to attack - Aborting"); + return; + } + if (DEBUG) DoDebug(PRC_TEXT_WHITE+"AttackLoopLogic: old target dead or invalid, found new target - " + GetName(oDefender)); + + if (!bIsRangedAttack) // if it is not a ranged attack, we check if we are in range for a cleave + { + if(!GetIsInMeleeRange(oDefender, oAttacker)) + { + if (GetDistanceBetween(oDefender, oAttacker) <= fMaxAttackDistance) + { + if (DEBUG) DoDebug(PRC_TEXT_WHITE+"AttackLoopLogic: new target not in melee range - move to and attack new target; current action = " + GetActionName(GetCurrentAction(oAttacker))); + // if no enemy is close enough, move to the nearest target and attack + // note that this will initiate a new combat round by the aurora engine + // ClearAllActionsMoveToObjectAndAttack(oDefender, MELEE_RANGE_METERS-1.); + ClearAllActions(); + ActionAttack(oDefender); + } + else + { + if (DEBUG) DoDebug(PRC_TEXT_WHITE+"AttackLoopLogic: new target not in melee range and too far away - do nothing; current action = " + GetActionName(GetCurrentAction(oAttacker))); + } + + // motu99: commented out the return statement, because we still want to continue fighting + // and hope that we are in melee range when the next attack within the current round actually occurs + // returning means abort; so we forfeit any attacks that might still be left in the round! + // However, we might have to check whether the distance is too large to be covered + // according to PnP rules we can at most do a 5 foot step without canceling the full attack round + // return; + } + else if (iAttackRoll) + { // we did an attack that must have killed the original defender, we are within melee range of the new defender + // we are not wielding a ranged weapon, so we are ready to cleave, if we have the feats + if (DEBUG) DoDebug("AttackLoopLogic: old target dead and new target in melee range - check for cleave"); + + int bHasCleave = 0; + if(GetHasFeat(FEAT_GREAT_CLEAVE, oAttacker)) + bHasCleave = 2; + else if(sAttackVars.iCleaveAttacks == 0 && GetHasFeat(FEAT_CLEAVE, oAttacker)) + bHasCleave = 1; + + if(bHasCleave) + { + if (DEBUG) DoDebug(PRC_TEXT_WHITE + "AttackLoopLogic: we can cleave - initiate cleave attack"); + // perform cleave + // recall this function with Cleave = TRUE + sAttackVars.iCleaveAttacks++; // note that due to the recursive calls this does not count any subsequent cleaves in the cleave attack itself! + // cleave attacks come at the AB of the attack that killed the critter, so use current value of iMod + AttackLoopLogic(oDefender, oAttacker, iBonusAttacks, iMainAttacks, iOffHandAttacks, iMod, sAttackVars, sMainWeaponDamage, sOffHandWeaponDamage, sSpellBonusDamage, iOffhand, bHasCleave); + } + } + } + } + + // we are through + + // if it was a cleave attack, return directly from the recursive call (we don't wan't to decrement iMod, nor do we want to call AttackLoopMain at this point) + // by returning to the instance of AttackLoopLogic that called the cleave, we will eventually land in the instance of AttackLoopLogic() that initiated the cleave(s). + // This (first) instance, however, does have bIsCleaveAttack = FALSE, so when we are eventually through with all recursive cleave attacks, + // we will not return in that (first) instance (which would mean giving up all left over attacks in the round). Rather we check whether there are still + // attacks left in the round and call AttackLoopMain with an appropriate delay in order to do the next one. + if (bIsCleaveAttack) + return; + + // now calculate whether we must decrement the attack bonus (iMod) + if(iBonusAttacks > 0) + { + iBonusAttacks --; + } + // only decrement iMod, if we are not performing a cleave attack and are through with all bonus attacks + //else if(iBonusAttacks < 0) + else if (0 >= iBonusAttacks) + { + if (iOffHandAttacks > 0 && iMainAttacks == iOffHandAttacks) + { + // Has the same number of main and off-hand attacks left + // thus the player has attacked with both main and off-hand + // and should now have -5 to their next attack iterations. + if (DEBUG) DoDebug("AttackLoopLogic: Decrement iMod Offhand"); + if(!sAttackVars.bUseMonkAttackMod) iMod -= 5; + else iMod -= 3; + } + else if(iOffHandAttacks == 0) + { + // if iOffHandAttacks = 0 and through with all bonus attacks + // then the player only has main hand attacks + // thus they should have their attack decremented + + // motu99: off hand attacks should be decremented by -5, even when we wield a monk weapon. Not yet implemented, because we need different iMods for mainhand and offhand + if(!sAttackVars.bUseMonkAttackMod) iMod -= 5; + if (DEBUG) DoDebug("AttackLoopLogic: Decrement iMod Mainhand"); + else iMod -= 3; + } + } + + if (DEBUG) DoDebug("AttackLoopLogic: go back to main attack loop with APR penalty of " + IntToString(iMod)); + // go back to main part of loop, but only if there are still attacks left + if (iBonusAttacks > 0 || iOffHandAttacks + iMainAttacks > 0) + DelayCommand(sAttackVars.fDelay, AttackLoopMain(oDefender, oAttacker, iBonusAttacks, iMainAttacks, iOffHandAttacks, iMod, sAttackVars, sMainWeaponDamage, sOffHandWeaponDamage, sSpellBonusDamage) ); + else if ( sAttackVars.bMode & PRC_COMBATMODE_ACTIONATTACK_ON_LAST) + ActionAttack(oDefender); +} + +void AttackLoopMain(object oDefender, object oAttacker, + int iBonusAttacks, int iMainAttacks, int iOffHandAttacks, + int iMod, struct AttackLoopVars sAttackVars, struct BonusDamage sMainWeaponDamage, + struct BonusDamage sOffHandWeaponDamage, struct BonusDamage sSpellBonusDamage) +{ + if(DEBUG) DoDebug("Entered AttackLoopMain: bonus attacks = " + IntToString(iBonusAttacks)+", main attacks = "+IntToString(iMainAttacks)+", offhand attacks = "+IntToString(iOffHandAttacks)); + + // ugly workaround to make this global available for other functions after a call to DelayCommand or AssignCommand + bUseMonkAttackMod = sAttackVars.bUseMonkAttackMod; + + // turn off touch attack if var says it only applies to first attack + if (sAttackVars.iAttackNumber && !sAttackVars.bApplyTouchToAll) sAttackVars.iTouchAttackType == FALSE; + + // turn off AB-mod if var says it only applies to first attack + if (sAttackVars.iAttackNumber && !sAttackVars.bEffectAllAttacks) iMod = 0; + + // perform all bonus attacks + if(iBonusAttacks > 0) + { // motu99: with perfect two weapon fighting (PTWF) there could be bonus attacks in the offhand as well! + // however, here we are assuming that all bonus attacks are from the main hand alone + // @TODO: find a way to implement PTWF with bonus attacks in main and offhand + if(DEBUG) DoDebug("AttackLoopMain: Calling AttackLoopLogic - bonus"); + iBonusAttacks --; + // note that attacklooplogic is called with attacks that are left + AttackLoopLogic(oDefender, oAttacker, iBonusAttacks, iMainAttacks, iOffHandAttacks, iMod, sAttackVars, sMainWeaponDamage, sOffHandWeaponDamage, sSpellBonusDamage, 0, FALSE); + } + // perform main attack, if there are at least as many main hand attacks left as off-hand attacks + else if(iMainAttacks > 0 && iMainAttacks >= iOffHandAttacks) + { + if(DEBUG) DoDebug("AttackLoopMain: Calling AttackLoopLogic - main hand"); + iMainAttacks --; + AttackLoopLogic(oDefender, oAttacker, iBonusAttacks, iMainAttacks, iOffHandAttacks, iMod, sAttackVars, sMainWeaponDamage, sOffHandWeaponDamage, sSpellBonusDamage, 0, FALSE); + } + // if there are more offhand attacks left than mainhand attacks, do those + else if(iOffHandAttacks > 0) + { + if(DEBUG) DoDebug("AttackLoopMain: Calling AttackLoopLogic - offhand"); + iOffHandAttacks --; + AttackLoopLogic(oDefender, oAttacker, iBonusAttacks, iMainAttacks, iOffHandAttacks, iMod, sAttackVars, sMainWeaponDamage, sOffHandWeaponDamage, sSpellBonusDamage, 1, FALSE); + } +// DoDebug("Exiting AttackLoopMain: no attacks left"); +} + +void PerformAttackRound(object oDefender, object oAttacker, + effect eSpecialEffect, float eDuration = 0.0, int iAttackBonusMod = 0, + int iDamageModifier = 0, int iDamageType = 0, int bEffectAllAttacks = FALSE, + string sMessageSuccess = "", string sMessageFailure = "", + int bApplyTouchToAll = FALSE, int iTouchAttackType = FALSE, + int bInstantAttack = FALSE, int bCombatModeFlags = 0) +{ +// if (DEBUG) DoDebug("Entered PerformAttackRound"); + + // create struct for attack loop logic + struct AttackLoopVars sAttackVars; + + // store the combat mode flags + sAttackVars.bMode = bCombatModeFlags; + + // set variables required in attack loop logic + sAttackVars.oWeaponR = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oAttacker); + sAttackVars.oWeaponL = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oAttacker); + + // weapon base item type of right hand weapon + int iMainhandWeaponType = GetBaseItemType(sAttackVars.oWeaponR); + + sAttackVars.bIsRangedWeapon = GetIsRangedWeaponType(iMainhandWeaponType); + sAttackVars.iDamageModifier = iDamageModifier; + sAttackVars.iDamageType = iDamageType; + + sAttackVars.eSpecialEffect = eSpecialEffect; + //post prc-effectness + //sAttackVars.sEffectLocalName = "CombatStructEffect_"+ObjectToString(oDefender)+"_"+ObjectToString(oAttacker); + //SetLocalPRCEffect(GetModule(), sAttackVars.sEffectLocalName, eSpecialEffect); + //this says e but is really a float + sAttackVars.eDuration = eDuration; + sAttackVars.bEffectAllAttacks = bEffectAllAttacks; + sAttackVars.bApplyTouchToAll = bApplyTouchToAll; + sAttackVars.iTouchAttackType = iTouchAttackType; + sAttackVars.sMessageSuccess = sMessageSuccess; + sAttackVars.sMessageFailure = sMessageFailure; + + // are they using a two handed weapon? + int bIsTwoHandedMeleeWeapon = GetIsTwoHandedMeleeWeaponType(iMainhandWeaponType); + + // are they unarmed? + int bIsUnarmed = FALSE; + if(iMainhandWeaponType == BASE_ITEM_INVALID) + bIsUnarmed = TRUE; + + // if player is unarmed use gloves as weapon + if(bIsUnarmed) + sAttackVars.oWeaponR = GetItemInSlot(INVENTORY_SLOT_ARMS, oAttacker); + + int bIsUsingTwoWeapons = FALSE; + int iOffhandWeaponType = GetBaseItemType(sAttackVars.oWeaponL); + + // is the player is using two weapons or double sided weapons? + if(GetIsOffhandWeaponType(iOffhandWeaponType)) + bIsUsingTwoWeapons = TRUE; + else if(GetIsDoubleSidedWeaponType(iMainhandWeaponType)) // motu99: included double sided weapons + { + bIsUsingTwoWeapons = TRUE; + iOffhandWeaponType = iMainhandWeaponType; + sAttackVars.oWeaponL = sAttackVars.oWeaponR; + } + + + // determine extra bonus damage from spells (on the attacker) + //Now checks defender for alignment and racial type -ebonfowl + struct BonusDamage sSpellBonusDamage = GetMagicalBonusDamage(oAttacker, oDefender); + + // structs for damage on main and offhand weapons + struct BonusDamage sMainWeaponDamage; + struct BonusDamage sOffHandWeaponDamage; + + // find out the number of bonus attacks from haste and spell like abilities and the penalties associated with them + struct BonusAttacks sBonusAttacks = GetBonusAttacks(oAttacker); + + // find out last attack mode to check whether it gives us bonus attacks (and penalties) + int iLastAttackMode = GetLastAttackMode(oAttacker); + if( iLastAttackMode == COMBAT_MODE_FLURRY_OF_BLOWS || iLastAttackMode == COMBAT_MODE_RAPID_SHOT ) + { + sBonusAttacks.iNumber ++; + sBonusAttacks.iPenalty += 2; + } + + // number of attacks with main hand + int iMainHandAttacks = GetMainHandAttacks(oAttacker); + + // ugly workaround (GetMainHandAttacks calculated this, and returns it in the quasi-global) + sAttackVars.bUseMonkAttackMod = bUseMonkAttackMod; + + // determine main hand attack bonus and damage that remains constant througout a round + if (iMainHandAttacks || sBonusAttacks.iNumber) + { + // determine attack bonus + sAttackVars.iMainAttackBonus = GetAttackBonus(oDefender, oAttacker, sAttackVars.oWeaponR, 0); + + // Determine physical damage per round (cached for multiple use) + sAttackVars.iMainWeaponDamageRound = GetWeaponDamagePerRound(oDefender, oAttacker, sAttackVars.oWeaponR, 0); + + + + // variables that store extra damage dealt + sMainWeaponDamage = GetWeaponBonusDamage(sAttackVars.oWeaponR, oDefender); + + if (!bIsUnarmed) + { + // we are using a weapon: get weapon information + sAttackVars.iMainNumSides = StringToInt(Get2DACache("baseitems", "DieToRoll", iMainhandWeaponType)); + sAttackVars.iMainNumDice = StringToInt(Get2DACache("baseitems", "NumDice", iMainhandWeaponType)); + } + // we are unarmed, now check if we are a monk or have a creature weapon from a PrC class. - Brawler, Shou, IoDM, etc. + else if(GetIsUnarmedFighter(oAttacker)) + { + int iDamage = FindUnarmedDamage(oAttacker); + sAttackVars.iMainNumSides = StringToInt(Get2DACache("iprp_monstcost", "Die", iDamage)); + sAttackVars.iMainNumDice = StringToInt(Get2DACache("iprp_monstcost", "NumDice", iDamage)); + } + // we are unarmed and not a monk or a PrC class with a creature weapon + // so we use normal fists + else + { + sAttackVars.iMainNumSides = 3; + sAttackVars.iMainNumDice = 1; + } + sAttackVars.iMainCritMult = GetWeaponCritcalMultiplier(oAttacker, sAttackVars.oWeaponR); + } + + // off-hand variables + int iOffHandAttacks = 0; + +/* motu99: these are zero anyway + sAttackVars.iOffHandAttackBonus = 0; + sAttackVars.iOffHandWeaponDamageRound = 0; + sAttackVars.iOffHandNumSides = 0; + sAttackVars.iOffHandNumDice = 0; + sAttackVars.iOffHandCritMult = 0; +*/ + + // only run offhand code if using two weapons + if(bIsUsingTwoWeapons) + { + iOffHandAttacks = GetOffHandAttacks(oAttacker); + + // check if double sided weapon + if (iMainHandAttacks && sAttackVars.oWeaponL == sAttackVars.oWeaponR) + { + // double sided weapon: Just copy from main hand (but beware that AB -4 if no ambidex feat!) + sAttackVars.iOffHandAttackBonus = sAttackVars.iMainAttackBonus; + if (!GetHasFeat(FEAT_AMBIDEXTERITY, oAttacker)) + sAttackVars.iOffHandAttackBonus -= 4; + sOffHandWeaponDamage = sMainWeaponDamage; + sAttackVars.iOffHandWeaponDamageRound = sAttackVars.iMainWeaponDamageRound; + + sAttackVars.iOffHandNumSides = sAttackVars.iMainNumSides; + sAttackVars.iOffHandNumDice = sAttackVars.iMainNumDice; + sAttackVars.iOffHandCritMult = sAttackVars.iMainCritMult; + } + else // any other (non double sided) weapon: calculate + { + sAttackVars.iOffHandAttackBonus = GetAttackBonus(oDefender, oAttacker, sAttackVars.oWeaponL, 1); + sOffHandWeaponDamage = GetWeaponBonusDamage(sAttackVars.oWeaponL, oDefender); + sAttackVars.iOffHandWeaponDamageRound = GetWeaponDamagePerRound(oDefender, oAttacker, sAttackVars.oWeaponL, 1); + + sAttackVars.iOffHandNumSides = StringToInt(Get2DACache("baseitems", "DieToRoll", iOffhandWeaponType)); + sAttackVars.iOffHandNumDice = StringToInt(Get2DACache("baseitems", "NumDice", iOffhandWeaponType)); + sAttackVars.iOffHandCritMult = GetWeaponCritcalMultiplier(oAttacker, sAttackVars.oWeaponL); + } + } + + // Code to equip new ammo + // Equips new ammo if they don't have enough ammo for the whole attack round + // or if they have no ammo equipped. + if(!sAttackVars.bIsRangedWeapon) + { + sAttackVars.oAmmo = OBJECT_INVALID; + } + else + { + sAttackVars.oAmmo = GetAmmunitionFromWeapon(sAttackVars.oWeaponR, oAttacker); + + // if there is no ammunition search inventory for ammo + if( sAttackVars.oAmmo == OBJECT_INVALID + || GetItemStackSize(sAttackVars.oAmmo) <= (iMainHandAttacks + sBonusAttacks.iNumber +1) ) + { + sAttackVars.oAmmo = EquipAmmunition(oAttacker); + } + + struct BonusDamage sAmmoDamage = GetWeaponBonusDamage(sAttackVars.oAmmo, oDefender); + + // if these values are better than the weapon, then use these. + if(sAmmoDamage.dam_Acid > sMainWeaponDamage.dam_Acid) sMainWeaponDamage.dam_Acid = sAmmoDamage.dam_Acid; + if(sAmmoDamage.dam_Cold > sMainWeaponDamage.dam_Cold) sMainWeaponDamage.dam_Cold = sAmmoDamage.dam_Cold; + if(sAmmoDamage.dam_Fire > sMainWeaponDamage.dam_Fire) sMainWeaponDamage.dam_Fire = sAmmoDamage.dam_Fire; + if(sAmmoDamage.dam_Elec > sMainWeaponDamage.dam_Elec) sMainWeaponDamage.dam_Elec = sAmmoDamage.dam_Elec; + if(sAmmoDamage.dam_Son > sMainWeaponDamage.dam_Son) sMainWeaponDamage.dam_Son = sAmmoDamage.dam_Son; + + if(sAmmoDamage.dam_Div > sMainWeaponDamage.dam_Div) sMainWeaponDamage.dam_Div = sAmmoDamage.dam_Div; + if(sAmmoDamage.dam_Neg > sMainWeaponDamage.dam_Neg) sMainWeaponDamage.dam_Neg = sAmmoDamage.dam_Neg; + if(sAmmoDamage.dam_Pos > sMainWeaponDamage.dam_Pos) sMainWeaponDamage.dam_Pos = sAmmoDamage.dam_Pos; + + if(sAmmoDamage.dam_Mag > sMainWeaponDamage.dam_Mag) sMainWeaponDamage.dam_Mag = sAmmoDamage.dam_Mag; + + if(sAmmoDamage.dam_Blud > sMainWeaponDamage.dam_Blud) sMainWeaponDamage.dam_Blud = sAmmoDamage.dam_Blud; + if(sAmmoDamage.dam_Pier > sMainWeaponDamage.dam_Pier) sMainWeaponDamage.dam_Pier = sAmmoDamage.dam_Pier; + if(sAmmoDamage.dam_Slash > sMainWeaponDamage.dam_Slash) sMainWeaponDamage.dam_Slash = sAmmoDamage.dam_Slash; + + if(sAmmoDamage.dice_Acid > sMainWeaponDamage.dice_Acid) sMainWeaponDamage.dice_Acid = sAmmoDamage.dice_Acid; + if(sAmmoDamage.dice_Cold > sMainWeaponDamage.dice_Cold) sMainWeaponDamage.dice_Cold = sAmmoDamage.dice_Cold; + if(sAmmoDamage.dice_Fire > sMainWeaponDamage.dice_Fire) sMainWeaponDamage.dice_Fire = sAmmoDamage.dice_Fire; + if(sAmmoDamage.dice_Elec > sMainWeaponDamage.dice_Elec) sMainWeaponDamage.dice_Elec = sAmmoDamage.dice_Elec; + if(sAmmoDamage.dice_Son > sMainWeaponDamage.dice_Son) sMainWeaponDamage.dice_Son = sAmmoDamage.dice_Son; + + if(sAmmoDamage.dice_Div > sMainWeaponDamage.dice_Div) sMainWeaponDamage.dice_Div = sAmmoDamage.dice_Div; + if(sAmmoDamage.dice_Neg > sMainWeaponDamage.dice_Neg) sMainWeaponDamage.dice_Neg = sAmmoDamage.dice_Neg; + if(sAmmoDamage.dice_Pos > sMainWeaponDamage.dice_Pos) sMainWeaponDamage.dice_Pos = sAmmoDamage.dice_Pos; + + if(sAmmoDamage.dice_Mag > sMainWeaponDamage.dice_Mag) sMainWeaponDamage.dice_Mag = sAmmoDamage.dice_Mag; + + if(sAmmoDamage.dice_Blud > sMainWeaponDamage.dice_Blud) sMainWeaponDamage.dice_Blud = sAmmoDamage.dice_Blud; + if(sAmmoDamage.dice_Pier > sMainWeaponDamage.dice_Pier) sMainWeaponDamage.dice_Pier = sAmmoDamage.dice_Pier; + if(sAmmoDamage.dice_Slash > sMainWeaponDamage.dice_Slash) sMainWeaponDamage.dice_Slash = sAmmoDamage.dice_Slash; + } + + sAttackVars.iMainAttackBonus -= sBonusAttacks.iPenalty; + sAttackVars.iOffHandAttackBonus -= sBonusAttacks.iPenalty; + + // determines the delay between effect application + // to make the system run like the normal combat system. + if(bInstantAttack)// If the full attack is to happen at once + sAttackVars.fDelay = 0.075; // Have some delay in order to avoid being a total resource hog + else + sAttackVars.fDelay = (5.5 / (iMainHandAttacks + sBonusAttacks.iNumber + iOffHandAttacks)); + + // sets iMods to iAttackBonusMod + // used in AttackLoopLogic to decrement attack bonus for attacks. + int iMod = 0; + iMod += iAttackBonusMod; + + // motu99: where do we set the global bFirstAttack and the other global variables ? Shouldn't we set them here? + // Or are they initialized whenever the main() function that calls PerformAttack() or PerformAttackRound() is entered? + // (In this case they would be like local ints attached to the PC or the module, whoever is the caller if the main() function) + AttackLoopMain(oDefender, oAttacker, sBonusAttacks.iNumber, iMainHandAttacks, iOffHandAttacks, iMod, sAttackVars, sMainWeaponDamage, sOffHandWeaponDamage, sSpellBonusDamage); +} + +// changed Default of nHandednessOverride = 0 (was -1), which means that on default we *now* do a *mainhand* attack; +// only with nHandednessOverride = TRUE (explicitly set) we *now* do an offhand attack +// in the old version, defaulting this variable to -1 was highly confusing (and caused more incorrect calls to PerformAttack than correct ones) +// therefore it seemed justified to change the calling logic of this function +// @TODO: check if all calls to PerformAttack are correct with respect to mainhand/offhand attacks +void PerformAttack(object oDefender, object oAttacker, + effect eSpecialEffect, float eDuration = 0.0, int iAttackBonusMod = 0, + int iDamageModifier = 0, int iDamageType = 0, + string sMessageSuccess = "", string sMessageFailure = "", + int iTouchAttackType = FALSE, + object oRightHandOverride = OBJECT_INVALID, object oLeftHandOverride = OBJECT_INVALID, + int nHandednessOverride = 0, int bCombatModeFlags = 0) +{ +// if (DEBUG) DoDebug("Entered PerformAttack"); + + // create struct for attack loop logic + struct AttackLoopVars sAttackVars; + + // store the combat mode flags + sAttackVars.bMode = bCombatModeFlags; + + // set variables required in attack loop logic + // first for right hand + if (oRightHandOverride == OBJECT_INVALID) + sAttackVars.oWeaponR = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oAttacker); + else + sAttackVars.oWeaponR = oRightHandOverride; + + // now for left hand + if (oLeftHandOverride == OBJECT_INVALID) + sAttackVars.oWeaponL = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oAttacker); + else + sAttackVars.oWeaponL = oLeftHandOverride; + + // weapon base item type of right hand weapon + int iMainhandWeaponType = GetBaseItemType(sAttackVars.oWeaponR); + sAttackVars.bIsRangedWeapon = GetIsRangedWeaponType(iMainhandWeaponType); + sAttackVars.iDamageModifier = iDamageModifier; + sAttackVars.iDamageType = iDamageType; + + sAttackVars.eSpecialEffect = eSpecialEffect; + //post prc-effectness + //sAttackVars.sEffectLocalName = "CombatStructEffect_"+ObjectToString(oDefender)+"_"+ObjectToString(oAttacker); + //SetLocalPRCEffect(GetModule(), sAttackVars.sEffectLocalName, eSpecialEffect); + //this says e but is really a float + sAttackVars.eDuration = eDuration; + sAttackVars.bEffectAllAttacks = FALSE; // not really necessary, because default value of int in struct is false + sAttackVars.bApplyTouchToAll = FALSE; // not really necessary, because default value of int in struct is false + sAttackVars.iTouchAttackType = iTouchAttackType; + sAttackVars.sMessageSuccess = sMessageSuccess; + sAttackVars.sMessageFailure = sMessageFailure; + + // are they using a two handed weapon? + int bIsTwoHandedMeleeWeapon = GetIsTwoHandedMeleeWeaponType(iMainhandWeaponType); + + // are they unarmed? + int bIsUnarmed = FALSE; + if(iMainhandWeaponType == BASE_ITEM_INVALID) + { + bIsUnarmed = TRUE; + // if player is unarmed use gloves as weapon + sAttackVars.oWeaponR = GetItemInSlot(INVENTORY_SLOT_ARMS, oAttacker); + } + + int bIsUsingTwoWeapons = FALSE; + int iOffhandWeaponType = GetBaseItemType(sAttackVars.oWeaponL); + + // is the player is using two weapons or double sided weapons? + if(GetIsOffhandWeaponType(iOffhandWeaponType)) // motu99: this could also be a (secondary) creature weapon + bIsUsingTwoWeapons = TRUE; + else if(GetIsDoubleSidedWeaponType(iMainhandWeaponType)) // motu99: included double sided weapons + { + bIsUsingTwoWeapons = TRUE; + iOffhandWeaponType = iMainhandWeaponType; + sAttackVars.oWeaponL = sAttackVars.oWeaponR; + } + + int iMainHandAttacks = 0; + int iOffHandAttacks = 0; + + // number of attacks with main hand + if(nHandednessOverride) + { + // sanity checks + if (!bIsUsingTwoWeapons) + { + DoDebug("PerformAttack: offhand attack, but no offhand weapon wielded - aborting"); + return; + } + iOffHandAttacks = 1; + } + else + iMainHandAttacks = 1; + + // determine extra bonus damage from spells (on the attacker) + //Now checks the defender for racial type and alignment bonus damage -ebonfowl + struct BonusDamage sSpellBonusDamage = GetMagicalBonusDamage(oAttacker, oDefender); + + // structs for damage on main and offhand weapons + struct BonusDamage sMainWeaponDamage; + struct BonusDamage sOffHandWeaponDamage; + + // find out the number of bonus attacks from haste and spell like abilities and the penalties associated with them + // we only need the penalties here! + struct BonusAttacks sBonusAttacks = GetBonusAttacks(oAttacker); + +// DoDebug("PerformAttack() found bonus attacks = " + IntToString(sBonusAttacks.iNumber) + " with penalty " + IntToString(sBonusAttacks.iPenalty)); + + // find out last attack mode to check whether it gives us bonus attacks (and penalties) + int iLastAttackMode = GetLastAttackMode(oAttacker); + if( iLastAttackMode == COMBAT_MODE_FLURRY_OF_BLOWS || iLastAttackMode == COMBAT_MODE_RAPID_SHOT ) + { + sBonusAttacks.iNumber ++; + sBonusAttacks.iPenalty += 2; + } + + + // determine main hand attack bonus and damage that remains constant througout a round + if (iMainHandAttacks) + { + // motu99: all the following three variables do *not* remain constant during the round, because they depend on the defender, and the defender can change + + // determine attack bonus + sAttackVars.iMainAttackBonus = GetAttackBonus(oDefender, oAttacker, sAttackVars.oWeaponR, 0); + + // Determine physical damage per round (cached for multiple use) + sAttackVars.iMainWeaponDamageRound = GetWeaponDamagePerRound(oDefender, oAttacker, sAttackVars.oWeaponR, 0); + + // variables that store extra damage dealt + sMainWeaponDamage = GetWeaponBonusDamage(sAttackVars.oWeaponR, oDefender); + + if (!bIsUnarmed) + { + // we are using a weapon: get weapon information + + // through the overrides we could have been passed a creature weapon as main hand weapon + // (creature weapons usually are equipped in the "special" CWEAPON_R/L/B inventory slots) + if (GetIsCreatureWeaponType(iMainhandWeaponType)) + { + struct Dice sDice; + sDice = GetWeaponMonsterDamage(sAttackVars.oWeaponR); + sAttackVars.iMainNumSides = sDice.iSides; + sAttackVars.iMainNumDice = sDice.iNum; + } + else + { // we are wielding a "normal" weapon + sAttackVars.iMainNumSides = StringToInt(Get2DACache("baseitems", "DieToRoll", iMainhandWeaponType)); + sAttackVars.iMainNumDice = StringToInt(Get2DACache("baseitems", "NumDice", iMainhandWeaponType)); + } + } + // we are unarmed, now check if we are a monk or have a creature weapon from a PrC class. - Brawler, Shou, IoDM, etc. + else if(GetIsUnarmedFighter(oAttacker)) + { + int iDamage = FindUnarmedDamage(oAttacker); + sAttackVars.iMainNumSides = StringToInt(Get2DACache("iprp_monstcost", "Die", iDamage)); + sAttackVars.iMainNumDice = StringToInt(Get2DACache("iprp_monstcost", "NumDice", iDamage)); + } + // we are unarmed and not a monk or a PrC class with a creature weapon + // so we use normal fists + else + { + sAttackVars.iMainNumSides = 3; + sAttackVars.iMainNumDice = 1; + } + sAttackVars.iMainCritMult = GetWeaponCritcalMultiplier(oAttacker, sAttackVars.oWeaponR); + + } + + // only run if off hand attack + if(iOffHandAttacks) + { + sAttackVars.iOffHandAttackBonus = GetAttackBonus(oDefender, oAttacker, sAttackVars.oWeaponL, 1); + sOffHandWeaponDamage = GetWeaponBonusDamage(sAttackVars.oWeaponL, oDefender); + sAttackVars.iOffHandWeaponDamageRound = GetWeaponDamagePerRound(oDefender, oAttacker, sAttackVars.oWeaponL, 1); + + // we are using a weapon: get weapon information + if (GetIsCreatureWeaponType(iOffhandWeaponType)) + { + // if we were passed a creature weapon, we need to do a special calculation + struct Dice sDice; + sDice = GetWeaponMonsterDamage(sAttackVars.oWeaponL); + sAttackVars.iOffHandNumSides = sDice.iSides; + sAttackVars.iOffHandNumDice = sDice.iNum; + } + else + { + // we are wielding a "normal" offhand weapon + sAttackVars.iOffHandNumSides = StringToInt(Get2DACache("baseitems", "DieToRoll", iOffhandWeaponType)); + sAttackVars.iOffHandNumDice = StringToInt(Get2DACache("baseitems", "NumDice", iOffhandWeaponType)); + } + + sAttackVars.iOffHandCritMult = GetWeaponCritcalMultiplier(oAttacker, sAttackVars.oWeaponL); +// DoDebug("PerformAttack() found offhand weapon damage " + IntToString(sAttackVars.iOffHandNumDice) + "d" + IntToString(sAttackVars.iOffHandNumSides) + " with crit mult: " + IntToString(sAttackVars.iOffHandCritMult)); + } + + // Code to equip new ammo + // Equips new ammo if they don't have enough ammo for the whole attack round + // or if they have no ammo equipped. + if(!sAttackVars.bIsRangedWeapon) + { + sAttackVars.oAmmo = OBJECT_INVALID; + } + else // we have a ranged weapon: this can only be a main hand attack + { + if (iOffHandAttacks) + { + DoDebug("PerformAttack: offhand attack while using a ranged weapon - aborting"); + return; + } + sAttackVars.oAmmo = GetAmmunitionFromWeapon(sAttackVars.oWeaponR, oAttacker); + + // if there is no ammunition search inventory for ammo + if( sAttackVars.oAmmo == OBJECT_INVALID + || GetItemStackSize(sAttackVars.oAmmo) <= 2) + { + sAttackVars.oAmmo = EquipAmmunition(oAttacker); + } + + // note that this does not include any on hit properties of the ammunition + // we take care of these in AttackLoopLogic + struct BonusDamage sAmmoDamage = GetWeaponBonusDamage(sAttackVars.oAmmo, oDefender); + + // if these values are better than the weapon, then use these. + if(sAmmoDamage.dam_Acid > sMainWeaponDamage.dam_Acid) sMainWeaponDamage.dam_Acid = sAmmoDamage.dam_Acid; + if(sAmmoDamage.dam_Cold > sMainWeaponDamage.dam_Cold) sMainWeaponDamage.dam_Cold = sAmmoDamage.dam_Cold; + if(sAmmoDamage.dam_Fire > sMainWeaponDamage.dam_Fire) sMainWeaponDamage.dam_Fire = sAmmoDamage.dam_Fire; + if(sAmmoDamage.dam_Elec > sMainWeaponDamage.dam_Elec) sMainWeaponDamage.dam_Elec = sAmmoDamage.dam_Elec; + if(sAmmoDamage.dam_Son > sMainWeaponDamage.dam_Son) sMainWeaponDamage.dam_Son = sAmmoDamage.dam_Son; + + if(sAmmoDamage.dam_Div > sMainWeaponDamage.dam_Div) sMainWeaponDamage.dam_Div = sAmmoDamage.dam_Div; + if(sAmmoDamage.dam_Neg > sMainWeaponDamage.dam_Neg) sMainWeaponDamage.dam_Neg = sAmmoDamage.dam_Neg; + if(sAmmoDamage.dam_Pos > sMainWeaponDamage.dam_Pos) sMainWeaponDamage.dam_Pos = sAmmoDamage.dam_Pos; + + if(sAmmoDamage.dam_Mag > sMainWeaponDamage.dam_Mag) sMainWeaponDamage.dam_Mag = sAmmoDamage.dam_Mag; + + if(sAmmoDamage.dam_Blud > sMainWeaponDamage.dam_Blud) sMainWeaponDamage.dam_Blud = sAmmoDamage.dam_Blud; + if(sAmmoDamage.dam_Pier > sMainWeaponDamage.dam_Pier) sMainWeaponDamage.dam_Pier = sAmmoDamage.dam_Pier; + if(sAmmoDamage.dam_Slash > sMainWeaponDamage.dam_Slash) sMainWeaponDamage.dam_Slash = sAmmoDamage.dam_Slash; + + if(sAmmoDamage.dice_Acid > sMainWeaponDamage.dice_Acid) sMainWeaponDamage.dice_Acid = sAmmoDamage.dice_Acid; + if(sAmmoDamage.dice_Cold > sMainWeaponDamage.dice_Cold) sMainWeaponDamage.dice_Cold = sAmmoDamage.dice_Cold; + if(sAmmoDamage.dice_Fire > sMainWeaponDamage.dice_Fire) sMainWeaponDamage.dice_Fire = sAmmoDamage.dice_Fire; + if(sAmmoDamage.dice_Elec > sMainWeaponDamage.dice_Elec) sMainWeaponDamage.dice_Elec = sAmmoDamage.dice_Elec; + if(sAmmoDamage.dice_Son > sMainWeaponDamage.dice_Son) sMainWeaponDamage.dice_Son = sAmmoDamage.dice_Son; + + if(sAmmoDamage.dice_Div > sMainWeaponDamage.dice_Div) sMainWeaponDamage.dice_Div = sAmmoDamage.dice_Div; + if(sAmmoDamage.dice_Neg > sMainWeaponDamage.dice_Neg) sMainWeaponDamage.dice_Neg = sAmmoDamage.dice_Neg; + if(sAmmoDamage.dice_Pos > sMainWeaponDamage.dice_Pos) sMainWeaponDamage.dice_Pos = sAmmoDamage.dice_Pos; + + if(sAmmoDamage.dice_Mag > sMainWeaponDamage.dice_Mag) sMainWeaponDamage.dice_Mag = sAmmoDamage.dice_Mag; + + if(sAmmoDamage.dice_Blud > sMainWeaponDamage.dice_Blud) sMainWeaponDamage.dice_Blud = sAmmoDamage.dice_Blud; + if(sAmmoDamage.dice_Pier > sMainWeaponDamage.dice_Pier) sMainWeaponDamage.dice_Pier = sAmmoDamage.dice_Pier; + if(sAmmoDamage.dice_Slash > sMainWeaponDamage.dice_Slash) sMainWeaponDamage.dice_Slash = sAmmoDamage.dice_Slash; + } + + // determines the delay between effect application + // to make the system run like the normal combat system. + sAttackVars.fDelay = 0.1; + sAttackVars.iMainAttackBonus -= sBonusAttacks.iPenalty; + sAttackVars.iOffHandAttackBonus -= sBonusAttacks.iPenalty; + + if(nHandednessOverride) + AttackLoopMain(oDefender, oAttacker, 0, 0, 1, iAttackBonusMod, sAttackVars, sMainWeaponDamage, sOffHandWeaponDamage, sSpellBonusDamage); + else + AttackLoopMain(oDefender, oAttacker, 0, 1, 0, iAttackBonusMod, sAttackVars, sMainWeaponDamage, sOffHandWeaponDamage, sSpellBonusDamage); +} + +//:: void main (){} \ No newline at end of file diff --git a/src/include/prc_inc_combmove.nss b/src/include/prc_inc_combmove.nss new file mode 100644 index 0000000..b81aab4 --- /dev/null +++ b/src/include/prc_inc_combmove.nss @@ -0,0 +1,2338 @@ +//:://///////////////////////////////////////////// +//:: Combat Maneuver include: +//:: prc_inc_combmove +//:://///////////////////////////////////////////// +/** @file + Defines various functions and other stuff that + do something related to the combat maneuvers + + Things: + Grapple + Trip + Bullrush + Charge + Overrun + Disarm + + @author Stratovarius + @date Created - 2008.4.20 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const int GRAPPLE_ATTACK = 1; +const int GRAPPLE_OPPONENT_WEAPON = 2; +const int GRAPPLE_ESCAPE = 3; +const int GRAPPLE_TOB_CRUSHING = 4; +const int GRAPPLE_DAMAGE = 5; +const int GRAPPLE_PIN = 6; + +const int DEBUG_COMBAT_MOVE = FALSE; + +const int COMBAT_MOVE_GRAPPLE = 1; +const int COMBAT_MOVE_BULLRUSH = 2; +const int COMBAT_MOVE_OVERRUN = 3; +const int COMBAT_MOVE_TRIP = 4; +const int COMBAT_MOVE_DISARM = 5; +const int COMBAT_MOVE_SHIELD_BASH = 6; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Returns the total bonus to checks for chosen combat move + * + * @param oPC The PC + * @param CombatMove The combat move to check + * @param nDefender Do the benefits apply when defending only? + * @param nAttacker Do the benefits apply when attacking only? + * @return Total bonus + */ +int GetCombatMoveCheckBonus(object oPC, int nCombatMove, int nDefender = FALSE, int nAttacker = FALSE); + +/** + * Marks a PC is charging for a round + * + * @param oPC The PC + */ +void SetIsCharging(object oPC); + +/** + * Get whether a PC is charging for a round + * + * @param oPC The PC + * @return TRUE or FALSE + */ +int GetIsCharging(object oPC); + +/** + * This will do a complete PnP charge attack + * Only call EITHER Attack OR Bull Rush + * + * @param oPC The PC + * @param oTarget The Target + * @param nDoAttack Do an attack at the end of a charge or not + * @param nGenerateAoO Does the movement generate an AoO + * @param nDamage A damage bonus on the charge + * @param nDamageType Damage type of the bonus. + * @param nBullRush Do a Bull Rush at the end of a charge + * @param nExtraBonus An extra bonus to grant the PC on the Bull rush + * @param nBullAoO Does the bull rush attempt generate an AoO + * @param nMustFollow Does the Bull rush require the pushing PC to follow the target + * @param nAttack Bonus to the attack roll // I forgot to add it before, I'm an idiot ok? + * @param nPounce FALSE for normal behaviour, TRUE to do a full attack at the end of a charge // Same comment as above + * + * @return TRUE if the attack or Bull rush hits, else FALSE + */ +void DoCharge(object oPC, object oTarget, int nDoAttack = TRUE, int nGenerateAoO = TRUE, int nDamage = 0, int nDamageType = -1, int nBullRush = FALSE, int nExtraBonus = 0, int nBullAoO = TRUE, int nMustFollow = TRUE, int nAttack = 0, int nPounce = FALSE); + +/** + * This will do a complete PnP Bull rush + * + * @param oPC The PC + * @param oTarget The Target + * @param nExtraBonus An extra bonus to grant the PC + * @param nGenerateAoO Does the Bull rush attempt generate an AoO + * @param nMustFollow Does the Bull rush require the pushing PC to follow the target + * @param nNoMove PC does not need to move to the target, used for spells + * @param nAbility Override the PC's Strength score with something else + * + * @return TRUE if the Bull rush succeeds, else FALSE + */ +void DoBullRush(object oPC, object oTarget, int nExtraBonus, int nGenerateAoO = TRUE, int nMustFollow = TRUE, int nNoMove = FALSE, int nAbility = 0); + +/** + * This will do a complete PnP Trip + * + * @param oPC The PC + * @param oTarget The Target + * @param nExtraBonus An extra bonus to grant the PC + * @param nGenerateAoO Does the Trip attempt generate an AoO + * @param nCounterTrip Can the target attempt a counter trip if you fail + * @param nSkipTouch Skip the melee touch attack or not + * @param nAbi This overrides the PC's ability modifier with the input value + * + * @return TRUE if the Trip succeeds, else FALSE + * It sets a local int known as TripDifference that is the amount you succeeded or failed by. + */ +int DoTrip(object oPC, object oTarget, int nExtraBonus, int nGenerateAoO = TRUE, int nCounterTrip = TRUE, int nSkipTouch = FALSE, int nAbi = 0); + +/** + * Will take an int and transform it into one of the DAMAGE_BONUS constants (From 1 to 50). + * + * @param nCheck Int to convert + * @return DAMAGE_BONUS_1 to DAMAGE_BONUS_50 + */ +int GetIntToDamage(int nCheck); + +/** + * This will do a complete PnP Grapple + * + * @param oPC The PC + * @param oTarget The Target + * @param nExtraBonus An extra bonus to grant the PC + * @param nGenerateAoO Does the Grapple attempt generate an AoO + * @param nSkipTouch Skip the melee touch attack or not + * + * @return TRUE if the Grapple succeeds, else FALSE + */ +int DoGrapple(object oPC, object oTarget, int nExtraBonus, int nGenerateAoO = TRUE, int nSkipTouch = FALSE); + +/** + * Marks a target as grappled. + * + * @param oTarget The Target + */ +void SetGrapple(object oTarget); + +/** + * Returns true or false if the creature is grappled. + * + * @param oTarget Person to check + * + * @return TRUE or FALSE + */ +int GetGrapple(object oTarget); + +/** + * Saves the grapple target for the PC + * + * @param oPC The PC + * @param oTarget The Target + */ +void SetGrappleTarget(object oPC, object oTarget); + +/** + * Returns the grapple target for the PC + * + * @param oPC The PC + */ +object GetGrappleTarget(object oPC); + +/** + * Marks a target as pinned. + * + * @param oTarget The Target + */ +void SetIsPinned(object oTarget); + +/** + * Returns true or false if the creature is pinned. + * + * @param oTarget Person to check + * + * @return TRUE or FALSE + */ +int GetIsPinned(object oTarget); + +/** + * Removes the Pinned condition + * + * @param oTarget The Target + */ +void BreakPin(object oTarget); + +/** + * Ends a grapple between the two creatures + * + * @param oPC The PC + * @param oTarget The Target + */ +void EndGrapple(object oPC, object oTarget); + +/** + * The options that can be performed during a grapple. Returns success or fail of the grapple check. + * + * @param oPC The PC + * @param oTarget The Target + * @param nExtraBonus An extra bonus to grant the PC + * @param nSwitch The options to use. One of: GRAPPLE_ATTACK, GRAPPLE_OPPONENT_WEAPON, GRAPPLE_ESCAPE, GRAPPLE_TOB_CRUSHING + * + * To-Do - Add Grapple to Move, add Pin Target, add Pin options + */ +int DoGrappleOptions(object oPC, object oTarget, int nExtraBonus, int nSwitch = -1); + +/** + * Returns true or false if the creature's right hand weapon is light + * + * @param oPC Person to check + * + * @return TRUE or FALSE + */ +int GetIsLightWeapon(object oPC); + +/** + * This will do a complete PnP Overrun. See tob_stdr_bldrrll for an example of how to use. + * Overrun is part of a move action. + * + * @param oPC The PC + * @param oTarget The Target + * @param nExtraBonus An extra bonus to grant the PC + * @param nGenerateAoO Does the Overrun attempt generate an AoO + * @param nAvoid Can the target avoid you + * @param nCounterTrip Can the target attempt a counter if you fail + * + * @return TRUE if the Overrun succeeds, else FALSE + * It sets a local int known as OverrunDifference that is the amount you succeeded or failed by. + */ +void DoOverrun(object oPC, object oTarget, location lTarget, int nGenerateAoO = TRUE, int nExtraBonus = 0, int nAvoid = TRUE, int nCounter = TRUE); + +/** + * This will do a complete PnP Disarm + * + * @param oPC The PC + * @param oTarget The Target + * @param nExtraBonus An extra bonus to grant the PC + * @param nGenerateAoO Does the attempt generate an AoO + * @param nCounter Can the target attempt a counter disarm if you fail + * + * @return TRUE if the Disarm succeeds, else FALSE +*/ +int DoDisarm(object oPC, object oTarget, int nExtraBonus = 0, int nGenerateAoO = TRUE, int nCounter = TRUE); + +// * returns the size modifier for grappling +int PRCGetSizeModifier(object oCreature); + +/** + * Does the knockback for the Tiger Blooded Tome of Battle feat. + * Is here because it uses Bull Rush code. + * + * @param oInitiator Hitter + * @param oTarget Guess what + */ +void TigerBlooded(object oInitiator, object oTarget); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "prc_inc_combat" +#include "prc_inc_sp_tch" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +void _DoBullRushKnockBack(object oTarget, object oPC, float fFeet) +{ + // Calculate how far the creature gets pushed + float fDistance = FeetToMeters(fFeet); + // Determine if they hit a wall on the way + location lPC = GetLocation(oPC); + location lTargetOrigin = GetLocation(oTarget); + vector vAngle = AngleToVector(GetRelativeAngleBetweenLocations(lPC, lTargetOrigin)); + vector vTargetOrigin = GetPosition(oTarget); + vector vTarget = vTargetOrigin + (vAngle * fDistance); + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("Initialized _DoBullRushKnockBack", oPC, FALSE); + if(!LineOfSightVector(vTargetOrigin, vTarget)) + { + // Hit a wall, binary search for the wall + float fEpsilon = 1.0f; // Search precision + float fLowerBound = 0.0f; // The lower search bound, initialise to 0 + float fUpperBound = fDistance; // The upper search bound, initialise to the initial distance + fDistance = fDistance / 2; // The search position, set to middle of the range + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("_DoBullRushKnockBack: If Statement", oPC, FALSE); + + do{ + // Create test vector for this iteration + vTarget = vTargetOrigin + (vAngle * fDistance); + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("_DoBullRushKnockBack: DO Loop", oPC, FALSE); + // Determine which bound to move. + if(LineOfSightVector(vTargetOrigin, vTarget)) + fLowerBound = fDistance; + else + fUpperBound = fDistance; + + // Get the new middle point + fDistance = (fUpperBound + fLowerBound) / 2; + }while(fabs(fUpperBound - fLowerBound) > fEpsilon); + } + + // Create the final target vector + vTarget = vTargetOrigin + (vAngle * fDistance); + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("_DoBullRushKnockBack: Final Vector", oPC, FALSE); + // Move the target + location lTargetDestination = Location(GetArea(oTarget), vTarget, GetFacing(oTarget)); + AssignCommand(oTarget, ClearAllActions(TRUE)); + AssignCommand(oTarget, JumpToLocation(lTargetDestination)); + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("_DoBullRushKnockBack: Jumped", oPC, FALSE); +} + +int _DoGrappleCheck(object oPC, object oTarget, int nExtraBonus, int nSwitch = -1) +{ + // The basic modifiers + int nPCBAB = GetBaseAttackBonus(oPC); + int nTargetBAB = GetBaseAttackBonus(oTarget); + int nPCStr = GetAbilityModifier(ABILITY_STRENGTH, oPC); + int nTargetStr = GetAbilityModifier(ABILITY_STRENGTH, oTarget); + int nPCBonus = PRCGetSizeModifier(oPC); + int nTargetBonus = PRCGetSizeModifier(oTarget); + // Other ability bonuses + nPCBonus += GetCombatMoveCheckBonus(oPC, COMBAT_MOVE_GRAPPLE, FALSE, TRUE); + nTargetBonus += GetCombatMoveCheckBonus(oTarget, COMBAT_MOVE_GRAPPLE, TRUE); + // Extra bonus + nPCBonus += nExtraBonus; + + if (GetHasFeat(FEAT_IMPROVED_GRAPPLE, oPC)) nPCBonus += 4; + if (GetHasFeat(FEAT_IMPROVED_GRAPPLE, oTarget)) nTargetBonus += 4; + nTargetBonus += GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oTarget); //Only applies on defense + if (nSwitch == GRAPPLE_ESCAPE) + nPCBonus += GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oPC); // And when escaping + + //cant grapple incorporeal or ethereal things + if((GetIsEthereal(oTarget) && !GetIsEthereal(oPC)) + || GetIsIncorporeal(oTarget)) + { + FloatingTextStringOnCreature("You cannot grapple an Ethereal or Incorporeal creature",oPC, FALSE); + return FALSE; + } + + int nPCCheck = nPCBAB + nPCStr + nPCBonus + d20(); + int nTargetCheck = nTargetBAB + nTargetStr + nTargetBonus + d20(); + // Now roll the ability check + SendMessageToPC(oPC, "PC Grapple Check: "+IntToString(nPCCheck)+" vs "+IntToString(nTargetCheck)); + if (GetIsPC(oTarget)) + SendMessageToPC(oTarget, "Enemy Grapple Check: "+IntToString(nPCCheck)+" vs "+IntToString(nTargetCheck)); + if (nPCCheck >= nTargetCheck) + { + return TRUE; + } + + // Didn't grapple successfully + return FALSE; +} + +void _DoCurlingWaveStrike(object oPC, object oTarget) +{ + if (GetLocalInt(oPC, "CurlingWaveStrike")) return; // Escape if this has already happened + location lTarget = GetLocation(oPC); + int nContinue = TRUE; + // Use the function to get the closest creature as a target + object oAreaTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE); + while(GetIsObjectValid(oAreaTarget) && nContinue) + { + // All enemies in range get a free AoO shot + if(oAreaTarget != oPC && // Don't hit yourself + GetIsInMeleeRange(oPC, oAreaTarget) && // They must be in melee range + GetIsEnemy(oAreaTarget, oPC) && // Only enemies are valid targets + oAreaTarget != oTarget) // Can't hit the same guy twice + { + // Once we're here, perform the second trip + DoTrip(oPC, oAreaTarget, 0); + nContinue = FALSE; // Break the loop + } + + //Select the next target within the spell shape. + oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE); + } + + // Stop this being an eternal loop + SetLocalInt(oPC, "CurlingWaveStrikeLoop", TRUE); + DelayCommand(0.5, DeleteLocalInt(oPC, "CurlingWaveStrikeLoop")); + + // Once a round + SetLocalInt(oPC, "CurlingWaveStrikeRound", TRUE); + DelayCommand(6.0, DeleteLocalInt(oPC, "CurlingWaveStrikeRound")); +} + +// Returns 0 on a fail +// Returns 1 on a successful overrun +// Returns 2 on an avoid +void _DoOverrunCheck(object oPC, object oTarget, location lTarget, int nGenerateAoO = TRUE, int nExtraBonus = 0, int nAvoid = TRUE, int nCounter = TRUE) +{ + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("_DoOverrunCheck: Initialized", oPC, FALSE); + // Stops loops + if (GetLocalInt(oPC, "Overrun") != 2 && !GetLocalInt(oPC, "BoulderRoll")) return; + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("_DoOverrunCheck: Loop Protect", oPC, FALSE); + + if(!nGenerateAoO) + { + // Huge bonus to tumble to prevent AoOs from movement + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSkillIncrease(SKILL_TUMBLE, 50), oPC, 6.0); + } + // The basic modifiers + int nSucceed = FALSE; + int nPCStat, nTargetStat; + // Use the higher of the two mods + if (GetAbilityModifier(ABILITY_STRENGTH, oPC) > GetAbilityModifier(ABILITY_DEXTERITY, oPC)) + nPCStat = GetAbilityModifier(ABILITY_STRENGTH, oPC) + GetCombatMoveCheckBonus(oPC, COMBAT_MOVE_OVERRUN, FALSE, TRUE); + else + nPCStat = GetAbilityModifier(ABILITY_DEXTERITY, oPC) + GetCombatMoveCheckBonus(oPC, COMBAT_MOVE_OVERRUN, FALSE, TRUE); + // Use the higher of the two mods + if (GetAbilityModifier(ABILITY_STRENGTH, oTarget) > GetAbilityModifier(ABILITY_DEXTERITY, oTarget)) + nTargetStat = GetAbilityModifier(ABILITY_STRENGTH, oTarget) + GetCombatMoveCheckBonus(oTarget, COMBAT_MOVE_OVERRUN, TRUE); + else + nTargetStat = GetAbilityModifier(ABILITY_DEXTERITY, oTarget) + GetCombatMoveCheckBonus(oTarget, COMBAT_MOVE_OVERRUN, TRUE); + // Get mods for size + int nPCBonus = PRCGetSizeModifier(oPC); + int nTargetBonus = PRCGetSizeModifier(oTarget); + //Warblade Battle Skill bonus + if (GetLevelByClass(CLASS_TYPE_WARBLADE, oPC) >= 11) + { + nPCBonus += GetAbilityModifier(ABILITY_INTELLIGENCE, oPC); + if (DEBUG_COMBAT_MOVE) DoDebug("Warblade Battle Skill Overrun bonus (attacker)"); + } + if (GetLevelByClass(CLASS_TYPE_WARBLADE, oTarget) >= 11) + { + nTargetBonus += GetAbilityModifier(ABILITY_INTELLIGENCE, oTarget); + if (DEBUG_COMBAT_MOVE) DoDebug("Warblade Battle Skill Overrun bonus (defender)"); + } + if (GetHasFeat(FEAT_IMPROVED_OVERRUN, oPC)) //Can't avoid an overrun now + { + nPCBonus += 4; + nAvoid = FALSE; + } + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("_DoOverrunCheck: Modifiers Complete", oPC, FALSE); + // Do the AoO for an overrun attempt + if (nGenerateAoO) + { + // Perform the Attack + effect eNone; + DelayCommand(0.0, PerformAttack(oPC, oTarget, eNone, 0.0, 0, 0, 0, "Attack of Opportunity Hit", "Attack of Opportunity Miss")); + FloatingTextStringOnCreature(GetName(oTarget)+" Overrun Attack of Opportunity", oPC, FALSE); + } + int nPCCheck = nPCStat + nPCBonus + nExtraBonus + d20(); + int nTargetCheck = nTargetStat + nTargetBonus + d20(); + + // The target has the option to avoid. Smaller targets will avoid if allowed. + if (nPCBonus > nTargetBonus && nAvoid) + { + FloatingTextStringOnCreature(GetName(oTarget) + " has successfully avoided you", oPC, FALSE); + // You didn't knock down the target, but neither did it stop you. Keep on chugging. + SetLocalInt(oPC, "Overrun", 2); + AssignCommand(oPC, ActionForceMoveToLocation(lTarget, TRUE)); + return; + } + // Now roll the ability check + SendMessageToPC(oPC, "Overrun Check: "+IntToString(nPCCheck)+" vs "+IntToString(nTargetCheck)); + if (nPCCheck >= nTargetCheck) + { + FloatingTextStringOnCreature("You have succeeded on your Overrun attempt",oPC, FALSE); + // Knock em down + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oTarget, 6.0); + nSucceed = TRUE; + SetLocalInt(oPC, "OverrunDifference", nPCCheck - nTargetCheck); + DeleteLocalInt(oPC, "OverrunDifference"); + effect eNone; + if (GetHasFeat(FEAT_CENTAUR_TRAMPLE, oPC)) PerformAttack(oPC, oTarget, eNone, 0.0, 0, 0, 0, "Centaur Trample Hit", "Centaur Trample Miss", FALSE, GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC)); + AssignCommand(oPC, ActionForceMoveToLocation(lTarget, TRUE)); + DelayCommand(7.05, AssignCommand(oTarget, ClearAllActions(TRUE))); + DelayCommand(7.05, AssignCommand(oTarget, ActionAttack(oPC))); + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("_DoOverrunCheck: oTarget Assign Command "+GetName(oTarget), oPC, FALSE); + } + else // If you fail, enemy gets a counter Overrun attempt, using Strength + { + nTargetStat = GetAbilityModifier(ABILITY_STRENGTH, oTarget) + GetCombatMoveCheckBonus(oTarget, COMBAT_MOVE_OVERRUN, FALSE, TRUE); + FloatingTextStringOnCreature("You have failed on your Overrun attempt",oPC, FALSE); + AssignCommand(oPC, ClearAllActions(TRUE)); + AssignCommand(oPC, JumpToLocation(GetLocation(oTarget))); + // Roll counter Overrun attempt + nTargetCheck = nTargetStat + nTargetBonus + d20(); + nPCCheck = nPCStat + nPCBonus + d20(); + // If counters aren't allowed, don't knock em down + // Its down here to allow the text message to go through + SendMessageToPC(oPC, "Enemy Overrun Counter Check: "+IntToString(nPCCheck)+" vs "+IntToString(nTargetCheck)); + if (nTargetCheck >= nPCCheck && nCounter) + { + // Knock em down + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oPC, 6.0); + } + SetLocalInt(oPC, "OverrunDifference", nTargetCheck - nPCCheck); + DelayCommand(2.0, DeleteLocalInt(oPC, "OverrunDifference")); + } + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("_DoOverrunCheck: Ending, nSucceed "+IntToString(nSucceed), oPC, FALSE); + SetLocalInt(oPC, "Overrun", nSucceed); +} + +int _ChargeDamage(object oPC) +{ + int nDam; + int nSize = PRCGetSizeModifier(oPC); + + if (GetHasFeat(FEAT_GREATER_POWERFUL_CHARGE, oPC)) nSize += 4; + + if(GetHasFeat(FEAT_POWERFUL_CHARGE, oPC) && nSize == 0) nDam += d8(); + else if(GetHasFeat(FEAT_POWERFUL_CHARGE, oPC) && nSize == 4) nDam += d6(2); + else if(GetHasFeat(FEAT_POWERFUL_CHARGE, oPC) && nSize == 8) nDam += d6(3); + else if(GetHasFeat(FEAT_POWERFUL_CHARGE, oPC) && nSize == 12) nDam += d6(4); + else if(GetHasFeat(FEAT_POWERFUL_CHARGE, oPC) && nSize == 16) nDam += d6(6); + + if (GetHasFeat(FEAT_RHINO_TRIBE_CHARGE, oPC)) nDam += d6(2); + // Using a natural attack only + if (GetHasSpellEffect(VESTIGE_AMON, oPC) && GetLocalInt(oPC, "AmonRam") && !GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC))) nDam += d8(); + + nDam += GetEssentiaInvestedFeat(oPC, FEAT_COBALT_CHARGE); + + // Doesn't appear to be added to charging normally, so brute forcing it here + nDam += GetEssentiaInvested(oPC, MELD_INCANDESCENT_STRIKE); + + return nDam; +} + +int _ChargeAttack(object oPC, object oTarget, int nAtk) +{ + nAtk += 2; // Add to whatever the bonus was before + int nAC = 2; + + if(GetHasFeat(FEAT_FURIOUS_CHARGE, oPC)) nAtk += 2; + if(GetHasFeat(FEAT_RECKLESS_CHARGE, oPC)) + { + nAtk += 2; + nAC += 2; + } + if(GetHasFeat(FEAT_GREAT_STAG_BERSERKER, oPC)) // Yes, it's the same feat as Reckless Charge + { + nAtk += 2; + nAC += 2; + } + if(GetHasFeat(FEAT_SIDESTEP_CHARGE, oTarget)) nAtk -= 4; + if(GetLevelByClass(CLASS_TYPE_WARFORGED_JUGGERNAUT, oPC) >= 2) nAtk += 1; + if(GetLevelByClass(CLASS_TYPE_WARFORGED_JUGGERNAUT, oPC) >= 4) nAtk += 1; + + effect eCharge = EffectLinkEffects(EffectACDecrease(nAC), EffectMovementSpeedIncrease(99)); + eCharge = ExtraordinaryEffect(eCharge); + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCharge, oPC, 6.0); + + nAtk += GetEssentiaInvestedFeat(oPC, FEAT_COBALT_CHARGE); + + // Done this way because otherwise the attack bonus isn't used properly + return nAtk; +} + +void _SuperiorBullRush(object oPC, object oTarget) +{ + int nDam = d6(); + if(GetLevelByClass(CLASS_TYPE_WARFORGED_JUGGERNAUT, oPC) >= 4) nDam = d8(); + nDam += GetAbilityModifier(ABILITY_STRENGTH, oPC); + + if (GetIsCharging(oPC)) + { + int nSize = PRCGetSizeModifier(oPC); + + if (GetHasFeat(FEAT_GREATER_POWERFUL_CHARGE, oPC)) nSize += 4; + + if(GetHasFeat(FEAT_POWERFUL_CHARGE, oPC) && nSize == 0) nDam += d8(); + else if(GetHasFeat(FEAT_POWERFUL_CHARGE, oPC) && nSize == 4) nDam += d6(2); + else if(GetHasFeat(FEAT_POWERFUL_CHARGE, oPC) && nSize == 8) nDam += d6(3); + else if(GetHasFeat(FEAT_POWERFUL_CHARGE, oPC) && nSize == 12) nDam += d6(4); + else if(GetHasFeat(FEAT_POWERFUL_CHARGE, oPC) && nSize == 16) nDam += d6(6); + } + + effect eDeath = EffectDamage(nDam, DAMAGE_TYPE_PIERCING); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget); + FloatingTextStringOnCreature("Superior Bull Rush Hit", oPC, FALSE); +} + +void _DoBullrushCheck(object oPC, object oTarget, int nExtraBonus, int nMustFollow = TRUE, int nAbility = 0) +{ + // The basic modifiers + int nPCStr = GetAbilityModifier(ABILITY_STRENGTH, oPC); + int nTargetStr = GetAbilityModifier(ABILITY_STRENGTH, oTarget); + if (nAbility > 0) nPCStr = nAbility; // Use the override if it exists + int nPCBonus = PRCGetSizeModifier(oPC); + int nTargetBonus = PRCGetSizeModifier(oTarget); + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("DoBullRush: Initialized", oPC, FALSE); + //Warblade Battle Skill bonus + if (GetLevelByClass(CLASS_TYPE_WARBLADE, oPC) >= 11) + { + nPCBonus += GetAbilityModifier(ABILITY_INTELLIGENCE, oPC); + if (DEBUG_COMBAT_MOVE) DoDebug("Warblade Battle Skill Bull Rush bonus (attacker)"); + } + if (GetLevelByClass(CLASS_TYPE_WARBLADE, oTarget) >= 11) + { + nTargetBonus += GetAbilityModifier(ABILITY_INTELLIGENCE, oTarget); + if (DEBUG_COMBAT_MOVE) DoDebug("Warblade Battle Skill Bull Rush bonus (defender)"); + } + if (GetHasFeat(FEAT_IMPROVED_BULLRUSH, oPC)) nPCBonus += 4; + effect eNone; + // Get a +2 bonus for charging during a bullrush + if (GetIsCharging(oPC)) nPCBonus += 2; + // Other ability bonuses + nPCBonus += GetCombatMoveCheckBonus(oPC, COMBAT_MOVE_BULLRUSH, FALSE, TRUE); + nTargetBonus += GetCombatMoveCheckBonus(oPC, COMBAT_MOVE_BULLRUSH, TRUE); + // Extra bonus + nPCBonus += nExtraBonus; + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("DoBullRush: End of Bonuses", oPC, FALSE); + + if (GetLocalInt(oPC, "SlingDireWind_BullRush")) //Special roll + { + nPCStr = 15; + nPCBonus = 0; + nMustFollow = FALSE; + } + else if (GetLocalInt(oPC, "RonoveBullRush")) //Special roll + { + nPCStr = GetLocalInt(oPC, "RonoveBullRush"); + nPCBonus = 0; + nMustFollow = FALSE; + } + + // Ability check + int nPCCheck = nPCStr + nPCBonus + d20(); + int nTargetCheck = nTargetStr + nTargetBonus + d20(); + SendMessageToPC(oPC, "Bull Rush Check: "+IntToString(nPCCheck)+" vs "+IntToString(nTargetCheck)); + + // Now roll the ability check + if (nPCCheck >= nTargetCheck) + { + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("DoBullRush: Successful Hit", oPC, FALSE); + // Knock them back 5 feet + float fFeet = 5.0; + // For every 5 points greater, knock back an additional 5 feet. + fFeet += 5.0 * ((nPCCheck - nTargetCheck) / 5); + // This weapon of legacy adds 5 feet to a successful bull rush + if(GetLocalInt(oPC, "Caladbolg_Bullrush")) fFeet += 5.0; + // Max pushback from this one is 5.0 + if (GetLocalInt(oPC, "SlingDireWind_BullRush")) fFeet = 5.0; + SetLocalInt(oPC, "Bullrush", TRUE); + DelayCommand(3.0, DeleteLocalInt(oPC, "Bullrush")); + // Shedu Crown negates the knockback + if (GetHasSpellEffect(18767, oTarget)) fFeet = 0.0; + _DoBullRushKnockBack(oTarget, oPC, fFeet); + if(GetLevelByClass(CLASS_TYPE_WARFORGED_JUGGERNAUT, oPC)) _SuperiorBullRush(oPC, oTarget); + // If the PC has to keep pushing to knock back, move the PC along + if (nMustFollow) + { + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("DoBullRush: Following", oPC, FALSE); + AssignCommand(oPC, ClearAllActions(TRUE)); + AssignCommand(oPC, JumpToLocation(GetLocation(oTarget))); + } + if(GetHasFeat(FEAT_RAMPAGING_BULL_RUSH, oPC) && GetHasSpellEffect(SPELLABILITY_BARBARIAN_RAGE, oPC)) + DelayCommand(0.1, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectKnockdown(), oTarget, RoundsToSeconds(1))); + } + else + FloatingTextStringOnCreature("You have failed your Bull Rush Attempt",oPC, FALSE); + + // Let people know if we made the hit or not + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("DoBullRush: Exit", oPC, FALSE); +} + +int _CountPinRounds(object oTarget) +{ + int nPin = GetLocalInt(oTarget, "PinnedRounds"); + SetLocalInt(oTarget, "PinnedRounds", nPin+1); + + return nPin+1; +} + +void _DoReapingMauler(object oPC, object oTarget, int nRounds) +{ + int nClass = GetLevelByClass(CLASS_TYPE_REAPING_MAULER, oPC); + if (3 > nClass) return; + + if (!GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT)) + { + if (nRounds >= 3 && nClass >= 5) // Devastating Grapple + { + int nDC = 15 + GetAbilityModifier(ABILITY_WISDOM, oPC); + if(!FortitudeSave(oTarget, nDC, SAVING_THROW_TYPE_NONE, oPC)) + { + FloatingTextStringOnCreature("Devastating Grapple Success", oPC, FALSE); + effect eDeath = EffectDamage(9999, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_ENERGY); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget); + } + } + else + { + int nDC = 10 + nClass + GetAbilityModifier(ABILITY_WISDOM, oPC); + if(!FortitudeSave(oTarget, nDC, SAVING_THROW_TYPE_NONE, oPC)) + { + SetLocalInt(oTarget, "UnconsciousGrapple", TRUE); + // Unconscious effects + effect eUncon = EffectLinkEffects(EffectStunned(), EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED)); + eUncon = EffectLinkEffects(eUncon, EffectKnockdown()); + float fDur = d3() * 6.0; + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(eUncon), oTarget, fDur); + FloatingTextStringOnCreature("Sleeper Lock Success", oPC, FALSE); + DelayCommand(fDur, DeleteLocalInt(oTarget, "UnconsciousGrapple")); + } + } + } +} + +void _PostCharge(object oPC, object oTarget) +{ + int nSpellId = PRCGetSpellId(); + if (DEBUG) DoDebug("_PostCharge nSpellId: "+IntToString(nSpellId)); + effect eNone; + int nSucceed = GetLocalInt(oTarget, "PRCCombat_StruckByAttack"); + if(GetHasFeat(FEAT_SIDESTEP_CHARGE, oTarget) && nSucceed == FALSE) + DelayCommand(0.0, PerformAttack(oPC, oTarget, eNone, 0.0, 0, 0, -1, "Sidestep Charge Hit", "Sidestep Charge Miss")); + + //Gorebrute Elite Knockdown + if(GetLocalInt(oPC, "ShifterGore") && GetHasFeat(FEAT_GOREBRUTE_ELITE, oPC) && nSucceed) + { + //Knockdown check + int nEnemyStr = d20() + GetAbilityModifier(ABILITY_STRENGTH, oTarget); + int nYourStr = d20() + GetAbilityModifier(ABILITY_STRENGTH, oPC); + SendMessageToPC(oPC, "Opposed Knockdown Check: Rolled " + IntToString(nYourStr) + " vs " + IntToString(nEnemyStr)); + SendMessageToPC(oTarget, "Opposed Knockdown Check: Rolled " + IntToString(nEnemyStr) + " vs " + IntToString(nYourStr)); + if(nYourStr > nEnemyStr) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectKnockdown(), oTarget, 6.0); + } + + if (nSpellId == MOVE_DS_DOOM_CHARGE && nSucceed) + { + effect eLink = EffectVisualEffect(VFX_DUR_ROOTED_TO_SPOT); + eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_BLUDGEONING, 10)); + eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_PIERCING, 10)); + eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_SLASHING, 10)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, 6.0); + } + else if (nSpellId == MOVE_DS_LAW_BEARER && nSucceed) + { + effect eLink = EffectVisualEffect(VFX_DUR_ROOTED_TO_SPOT); + eLink = EffectLinkEffects(eLink, EffectACIncrease(5)); + eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, 5)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, 6.0); + } + else if (nSpellId == MOVE_DS_RADIANT_CHARGE && nSucceed) + { + effect eLink = EffectVisualEffect(VFX_DUR_ROOTED_TO_SPOT); + eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_BLUDGEONING, 10)); + eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_PIERCING, 10)); + eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_SLASHING, 10)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, 6.0); + } + else if (nSpellId == MOVE_DS_TIDE_CHAOS && nSucceed) + { + effect eLink = EffectLinkEffects(EffectVisualEffect(VFX_DUR_BLUR), EffectConcealment(50)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, 6.0); + } + else if (nSpellId == MOVE_WR_WAR_MASTERS_CHARGE && nSucceed) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectStunned()), oTarget, 6.0); + } + // Applies to all charges, Thunderstep Boots meld + if (GetHasSpellEffect(MELD_THUNDERSTEP_BOOTS, oPC) && nSucceed) + { + int nDice = GetEssentiaInvested(oPC, MELD_STRONGHEART_VEST) + 1; + ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(d4(nDice), DAMAGE_TYPE_SONIC)), oTarget); + if (GetIsMeldBound(oTarget, MELD_THUNDERSTEP_BOOTS) == CHAKRA_FEET) + { + int nDC = GetMeldshaperDC(oPC, CLASS_TYPE_SOULBORN, MELD_STRONGHEART_VEST); + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, 6.0); + } + } + // Applies to all charges, Urskan Greaves meld + if (GetHasSpellEffect(MELD_URSKAN_GREAVES, oPC) && nSucceed) + { + int nDice = GetEssentiaInvested(oPC, MELD_URSKAN_GREAVES); + if (GetIsMeldBound(oTarget, MELD_URSKAN_GREAVES) == CHAKRA_FEET) + ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(d4(nDice), DAMAGE_TYPE_BLUDGEONING)), oTarget); + } +} + +void _DoTrampleDamage(object oPC, object oTarget) +{ + int nPCSize = PRCGetSizeModifier(oPC); + int nTargetSize = PRCGetSizeModifier(oTarget); + + // Have to be equal to your size or smaller + if (nPCSize >= nTargetSize) + { + int nDamage = d8(); + if (nPCSize == 4) nDamage = d6(2); // Large + else if (nPCSize == -4) nDamage = d6(); // Small + int nDC = GetMeldshaperDC(oPC, CLASS_TYPE_SOULBORN, PRCGetSpellId()); + + nDamage += FloatToInt(GetAbilityModifier(ABILITY_STRENGTH, oPC) * 1.5); + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_NONE); + if (nDamage > 0) + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage, DAMAGE_TYPE_BLUDGEONING), oTarget); + } +} + +void _HeartOfFireGrapple(object oPC, object oTarget) +{ + if (GetIsMeldBound(oTarget, MELD_HEART_OF_FIRE) == CHAKRA_WAIST) + { + int nEssentia = GetEssentiaInvested(oPC, MELD_HEART_OF_FIRE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(nEssentia), DAMAGE_TYPE_FIRE), oTarget); + } +} + +int _TotemAvatar(object oPC, int nCombatMove) +{ + int nReturn; + + if (GetIsMeldBound(oPC, MELD_HEART_OF_FIRE) == CHAKRA_FEET && nCombatMove != COMBAT_MOVE_GRAPPLE) + nReturn = 4; + + if (nCombatMove == COMBAT_MOVE_GRAPPLE || + nCombatMove == COMBAT_MOVE_BULLRUSH || + nCombatMove == COMBAT_MOVE_OVERRUN || + nCombatMove == COMBAT_MOVE_TRIP) + nReturn += 4; + + return nReturn; +} + +int _UrskanGreaves(object oPC) +{ + int nReturn; + + if (GetIsMeldBound(oPC, MELD_URSKAN_GREAVES) == CHAKRA_TOTEM) + nReturn = 2 + GetEssentiaInvested(oPC, MELD_URSKAN_GREAVES); + + return nReturn; +} + +void _ShieldBashDamage(object oPC, object oTarget, int nRoll, int nHand, int nDamage, int nDamageType, int nType) +{ + int nDam = d3(); + if (nType == BASE_ITEM_LARGESHIELD) nDam = d4(); + int nStr = GetAbilityModifier(ABILITY_STRENGTH, oPC)/2; // Default to offhand + if (nHand) nStr = GetAbilityModifier(ABILITY_STRENGTH, oPC); // Onhand attack + int nBash = GetLocalInt(oPC, "BashingEnchant"); + if (nBash && nType == BASE_ITEM_LARGESHIELD) nDam = d8(); + else if (nBash && nType == BASE_ITEM_SMALLSHIELD) nDam = d6(); + + nDam += nStr; + nDam += nBash; + // Critical hit + if (nRoll == 2) + { + if (nType == BASE_ITEM_LARGESHIELD) nDam += d4(); + else nDam += d3(); + nDam += nStr; + nDam += nBash; + nDamage *= 2; + } + effect eLink = EffectDamage(nDam, DAMAGE_TYPE_BLUDGEONING); + if (nDamage) eLink = EffectLinkEffects(eLink, EffectDamage(nDamage, nDamageType)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, ExtraordinaryEffect(eLink), oTarget); + + //Extra damage from Energized Shield and Lesser Energized Shield + int nType = GetLocalInt(oPC, "EnShieldType"); + int nD6 = GetLocalInt(oPC, "EnShieldD6"); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nType, d6(nD6)), oTarget); +} + +void _BariaurChargeDamage(object oPC, object oTarget, int nRoll, int nDamBonus) +{ + int nDam = d6(2) + GetAbilityModifier(ABILITY_STRENGTH, oPC) + nDamBonus; // Onhand attack + if (nRoll == 2) nDam += d6(2) + GetAbilityModifier(ABILITY_STRENGTH, oPC) + nDamBonus; + + ApplyEffectToObject(DURATION_TYPE_INSTANT, ExtraordinaryEffect(EffectDamage(nDam, DAMAGE_TYPE_BLUDGEONING)), oTarget); +} + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int GetCombatMoveCheckBonus(object oPC, int nCombatMove, int nDefender = FALSE, int nAttacker = FALSE) +{ + int nBonus = 0; + if(nCombatMove == COMBAT_MOVE_GRAPPLE) + { + if(GetHasSpellEffect(MOVE_SD_STONEFOOT_STANCE, oPC)) nBonus += 2; + if(GetLevelByClass(CLASS_TYPE_REAPING_MAULER, oPC) >= 2) nBonus += 1; + if(GetLevelByClass(CLASS_TYPE_REAPING_MAULER, oPC) >= 4) nBonus += 1; + if(GetHasFeat(FEAT_LEGENDARY_WRESTLER, oPC)) nBonus += 10; + if(GetRacialType(oPC) == RACIAL_TYPE_CHITINE) nBonus += 4; + if(GetHasSpellEffect(MELD_GIRALLON_ARMS, oPC)) nBonus += (2 + GetEssentiaInvested(oPC, MELD_GIRALLON_ARMS)); // MELD_GIRALLON_ARMS + if(GetLocalInt(oPC, "BullybashersGrapple")) nBonus += 4; + if(GetLocalInt(oPC, "BullybashersGiant")) nBonus += 4; + if(GetHasFeat(FEAT_OPEN_LESSER_CHAKRA_ARMS, oPC)) nBonus += 2; + if(GetHasFeat(FEAT_ABERRANT_DEEPSPAWN, oPC)) nBonus += 2; + if(GetHasFeat(FEAT_ABERRANT_LIMBS, oPC)) nBonus += 2; + if(GetHasSpellEffect(POWER_GRIP_IRON, oPC)) nBonus += GetLocalInt(oPC, "Psi_GripOfIron"); + } + else if(nCombatMove == COMBAT_MOVE_BULLRUSH) + { + if(GetHasSpellEffect(MOVE_SD_STONEFOOT_STANCE, oPC)) nBonus += 2; + if(GetHasSpellEffect(MOVE_SS_STEP_WIND, oPC)) nBonus += 4; + if(GetLevelByClass(CLASS_TYPE_WARFORGED_JUGGERNAUT, oPC)) nBonus += GetAbilityModifier(ABILITY_STRENGTH, oPC); + if(GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC) >= 3) nBonus += GetAbilityModifier(ABILITY_INTELLIGENCE, oPC); + if(GetLocalInt(oPC, "LuckyDiceAbility")) nBonus += 1; + if(GetHasSpellEffect(MELD_MAULING_GAUNTLETS, oPC)) nBonus += (2 + (2 * GetEssentiaInvested(oPC, MELD_MAULING_GAUNTLETS))); // MELD_MAULING_GAUNTLETS + if(GetHasSpellEffect(MELD_SPHINX_CLAWS, oPC)) nBonus += (1 + GetEssentiaInvested(oPC, MELD_SPHINX_CLAWS)); // MELD_SPHINX_CLAWS + if(GetLocalInt(oPC, "EventideCrux")) nBonus += 4; + } + else if(nCombatMove == COMBAT_MOVE_OVERRUN) + { + if(GetHasSpellEffect(MOVE_SD_STONEFOOT_STANCE, oPC)) nBonus += 2; + if(GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC) >= 3) nBonus += GetAbilityModifier(ABILITY_INTELLIGENCE, oPC); + if(GetLocalInt(oPC, "LuckyDiceAbility")) nBonus += 1; + if(GetHasSpellEffect(MELD_MAULING_GAUNTLETS, oPC)) nBonus += (2 + (2 * GetEssentiaInvested(oPC, MELD_MAULING_GAUNTLETS))); // MELD_MAULING_GAUNTLETS + if(GetHasSpellEffect(MELD_SPHINX_CLAWS, oPC)) nBonus += (1 + GetEssentiaInvested(oPC, MELD_SPHINX_CLAWS)); // MELD_SPHINX_CLAWS + if(GetLocalInt(oPC, "EventideCrux")) nBonus += 4; + } + else if(nCombatMove == COMBAT_MOVE_TRIP) + { + if(GetHasSpellEffect(MOVE_SD_STONEFOOT_STANCE, oPC)) nBonus += 2; + if(GetHasSpellEffect(MOVE_SS_STEP_WIND, oPC)) nBonus += 4; + if(GetHasFeat(FEAT_WOLF_BERSERKER, oPC)) nBonus += 4; + if(GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC) >= 3) nBonus += GetAbilityModifier(ABILITY_INTELLIGENCE, oPC); + if(GetLocalInt(oPC, "LuckyDiceAbility")) nBonus += 1; + if(GetHasSpellEffect(MELD_MAULING_GAUNTLETS, oPC)) nBonus += (2 + (2 * GetEssentiaInvested(oPC, MELD_MAULING_GAUNTLETS))); // MELD_MAULING_GAUNTLETS + if(GetHasSpellEffect(MELD_SPHINX_CLAWS, oPC)) nBonus += (1 + GetEssentiaInvested(oPC, MELD_SPHINX_CLAWS)); // MELD_SPHINX_CLAWS + if(GetLocalInt(oPC, "EventideCrux")) nBonus += 4; + } + else if(nCombatMove == COMBAT_MOVE_DISARM) + { + if(GetHasSpellEffect(MELD_BLADEMELD_CROWN, oPC)) nBonus += 4; + } + + if (nAttacker) + { + if(nCombatMove == COMBAT_MOVE_GRAPPLE) + { + if(GetLocalInt(oPC, "Flay_Grapple")) nBonus += 4; + } + else if(nCombatMove == COMBAT_MOVE_BULLRUSH) + { + if(GetLocalInt(oPC, "Caladbolg_Bullrush")) nBonus += 4; + if (GetLocalInt(oPC, "Marshal_ArtWar")) nBonus += GetLocalInt(oPC, "Marshal_ArtWar"); + if (GetEssentiaInvestedFeat(oPC, FEAT_COBALT_POWER)) nBonus += GetEssentiaInvestedFeat(oPC, FEAT_COBALT_POWER); + if(GetHasFeat(FEAT_RAMPAGING_BULL_RUSH, oPC) && GetHasSpellEffect(SPELLABILITY_BARBARIAN_RAGE, oPC)) nBonus -= 4; // Yes, minus is correct + } + else if(nCombatMove == COMBAT_MOVE_OVERRUN) + { + nBonus += _UrskanGreaves(oPC); + if (GetEssentiaInvestedFeat(oPC, FEAT_COBALT_POWER)) nBonus += GetEssentiaInvestedFeat(oPC, FEAT_COBALT_POWER); + } + else if(nCombatMove == COMBAT_MOVE_TRIP) + { + if (GetEssentiaInvestedFeat(oPC, FEAT_COBALT_EXPERTISE)) nBonus += GetEssentiaInvestedFeat(oPC, FEAT_COBALT_EXPERTISE); + if (GetLocalInt(oPC, "Marshal_ArtWar")) nBonus += GetLocalInt(oPC, "Marshal_ArtWar"); + } + else if(nCombatMove == COMBAT_MOVE_DISARM) + { + if(GetLocalInt(oPC, "Caladbolg_Disarm")) nBonus += 4; + if (GetLocalInt(oPC, "Marshal_ArtWar")) nBonus += GetLocalInt(oPC, "Marshal_ArtWar"); + if (GetEssentiaInvestedFeat(oPC, FEAT_COBALT_EXPERTISE)) nBonus += GetEssentiaInvestedFeat(oPC, FEAT_COBALT_EXPERTISE); + int IsDisarmWeap = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)); + if (IsDisarmWeap == BASE_ITEM_HEAVYFLAIL || IsDisarmWeap == BASE_ITEM_LIGHTFLAIL || IsDisarmWeap == BASE_ITEM_DIREMACE || IsDisarmWeap == BASE_ITEM_WHIP || IsDisarmWeap == BASE_ITEM_NUNCHAKU) nBonus += 2; + if (GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_SAI) nBonus += 4; + } + } + else if (nDefender) + { + if(GetHasFeat(FEAT_MOUNTAIN_STANCE, oPC)) nBonus += 2; + if(GetHasSpellEffect(SPELL_UNMOVABLE, oPC)) nBonus += 20; + if(GetHasFeat(FEAT_SHIELD_WARD, oPC)) + { + int nBase = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)); + if (nBase == BASE_ITEM_SMALLSHIELD || nBase == BASE_ITEM_LARGESHIELD || nBase == BASE_ITEM_TOWERSHIELD) + nBonus += GetItemACValue(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)); + } + + if(nCombatMove == COMBAT_MOVE_GRAPPLE) + { + if(GetHasSpellEffect(MOVE_SD_ROOT_MOUNTAIN, oPC)) nBonus += 10; + nBonus += _TotemAvatar(oPC, nCombatMove); + if(GetHasSpellEffect(MELD_BLADEMELD_WAIST, oPC)) nBonus += 4; + } + else if(nCombatMove == COMBAT_MOVE_BULLRUSH) + { + if(GetLocalInt(oPC, "Steadfast_Rooted")) nBonus += 4; + if(GetHasSpellEffect(MOVE_SD_ROOT_MOUNTAIN, oPC)) nBonus += 10; + if(GetHasSpellEffect(MELD_BEHIR_GORGET, oPC)) nBonus += 4; // MELD_BEHIR_GORGET + if(GetHasSpellEffect(MELD_GORGON_MASK, oPC)) nBonus += (2 + GetEssentiaInvested(oPC, MELD_GORGON_MASK)); // MELD_GORGON_MASK + nBonus += _TotemAvatar(oPC, nCombatMove); + if(GetHasSpellEffect(MELD_BLADEMELD_WAIST, oPC)) nBonus += 4; + if(GetRacialType(oPC) == RACIAL_TYPE_BARIAUR) nBonus += 4; + if(GetRacialType(oPC) == RACIAL_TYPE_WILDREN) nBonus += 4; + } + else if(nCombatMove == COMBAT_MOVE_OVERRUN) + { + if(GetHasSpellEffect(MOVE_SD_ROOT_MOUNTAIN, oPC)) nBonus += 10; + if(GetHasSpellEffect(MELD_GORGON_MASK, oPC)) nBonus += (2 + GetEssentiaInvested(oPC, MELD_GORGON_MASK)); // MELD_GORGON_MASK + nBonus += _TotemAvatar(oPC, nCombatMove); + if(GetHasSpellEffect(MELD_BLADEMELD_WAIST, oPC)) nBonus += 4; + } + else if(nCombatMove == COMBAT_MOVE_TRIP) + { + if(GetLocalInt(oPC, "Steadfast_Rooted")) nBonus += 4; + if(GetHasSpellEffect(MOVE_SD_ROOT_MOUNTAIN, oPC)) nBonus += 10; + if(GetHasSpellEffect(MELD_BEHIR_GORGET, oPC)) nBonus += 4; // MELD_BEHIR_GORGET + if(GetHasSpellEffect(MELD_GORGON_MASK, oPC)) nBonus += (2 + GetEssentiaInvested(oPC, MELD_GORGON_MASK)); // MELD_GORGON_MASK + nBonus += _TotemAvatar(oPC, nCombatMove); + if(GetHasSpellEffect(MELD_BLADEMELD_WAIST, oPC)) nBonus += 4; + if(GetRacialType(oPC) == RACIAL_TYPE_BARIAUR) nBonus += 4; + if(GetRacialType(oPC) == RACIAL_TYPE_WILDREN) nBonus += 4; + } + else if(nCombatMove == COMBAT_MOVE_DISARM) + { + if(GetRacialType(oPC) == RACIAL_TYPE_CHITINE) nBonus += 4; + } + } + if(DEBUG) DoDebug("GetCombatMoveCheckBonus: nBonus " + IntToString(nBonus)); + return nBonus; +} + +void SetIsCharging(object oPC) +{ + SetLocalInt(oPC, "PCIsCharging", TRUE); + // You count as having charged for the entire round + DelayCommand(6.0, DeleteLocalInt(oPC, "PCIsCharging")); +} + +int GetIsCharging(object oPC) +{ + return GetLocalInt(oPC, "PCIsCharging"); +} + +/** + * @brief Initiates a charge action by the player character (PC) toward a target. + * + * This function handles movement, potential attack resolution, damage calculations, + * bull rush attempts, and special feat/ability conditions such as Pounce or Flying Kick. + * + * @param oPC The creature performing the charge (usually the player character). + + * @param oTarget The target of the charge. + + * @param nDoAttack If TRUE (default), the PC will perform an attack after charging. + + * @param nGenerateAoO If TRUE (default), movement may provoke attacks of opportunity (AoOs). + * If FALSE, a high temporary Tumble bonus is applied to prevent AoOs. + + * @param nDamage Initial base damage to apply on a successful hit. Modified by feats or abilities. + + * @param nDamageType The type of damage to apply. Set to -1 (default) to use weapon damage type. + + * @param nBullRush If TRUE, attempt to initiate a Bull Rush after the attack. + + * @param nExtraBonus Additional bonus damage or attack modifiers. Defaults to 0. + + * @param nBullAoO If TRUE (default), allows AoOs triggered during Bull Rush resolution. + + * @param nMustFollow If TRUE (default), the PC will always move toward the target even if it's invalid later. + + * @param nAttack Attack bonus override for the charge attack. 0 = use default or calculate. + + * @param nPounce If TRUE, the PC can perform a full attack on the charge. Determined automatically if not set. + */ +void DoCharge(object oPC, object oTarget, int nDoAttack = TRUE, int nGenerateAoO = TRUE, int nDamage = 0, int nDamageType = -1, int nBullRush = FALSE, int nExtraBonus = 0, int nBullAoO = TRUE, int nMustFollow = TRUE, int nAttack = 0, int nPounce = FALSE) +{ + if(!nGenerateAoO) + { + // Huge bonus to tumble to prevent AoOs from movement + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSkillIncrease(SKILL_TUMBLE, 50), oPC, 6.0); + } + // Return value + int nSucceed = FALSE; + // PnP rules use feet, might as well convert it now. + float fDistance = MetersToFeet(GetDistanceBetweenLocations(GetLocation(oPC), GetLocation(oTarget))); + if(fDistance >= 10.0) + { + // Mark the PC as charging + SetIsCharging(oPC); + + nDamage += _ChargeDamage(oPC); + nAttack = _ChargeAttack(oPC, oTarget, nAttack); // This now takes into account charge feats + effect eNone; + + // Move to the target + AssignCommand(oPC, ClearAllActions()); + AssignCommand(oPC, ActionMoveToObject(oTarget, TRUE)); + if(nDoAttack) // Perform the Attack + { + // Dread Carapace Totem Bind + if(GetIsIncarnumUser(oPC)) + { + if (GetIsMeldBound(oPC, MELD_DREAD_CARAPACE) == CHAKRA_TOTEM) // CHAKRA_TOTEM + { + location lTargetLocation = GetLocation(oPC); + int nSaveDC = GetMeldshaperDC(oPC, CLASS_TYPE_TOTEMIST, MELD_DREAD_CARAPACE); // MELD_DREAD_CARAPACE + + object oDreadTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(60.0), lTargetLocation, FALSE, OBJECT_TYPE_CREATURE); + while(GetIsObjectValid(oDreadTarget)) + { + if(GetIsEnemy(oPC, oDreadTarget)) + { + if(!PRCMySavingThrow(SAVING_THROW_WILL, oDreadTarget, nSaveDC, SAVING_THROW_TYPE_FEAR)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectShaken(), oDreadTarget, 6.0); + + } + //Select the next target within the spell shape. + oDreadTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(60.0), lTargetLocation, FALSE, OBJECT_TYPE_CREATURE); + } + } + + if (GetIsMeldBound(oPC, MELD_SPHINX_CLAWS) == CHAKRA_HANDS && !GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC))) // CHAKRA_HANDS, empty hand + nPounce = TRUE; + } + + // Flying Kick feat + if(GetHasFeat(FEAT_FLYING_KICK, oPC) && (GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC) == OBJECT_INVALID)) + nDamage += d12(); + if(GetHasFeat(FEAT_LION_TRIBE_WARRIOR, oPC) && GetIsLightWeapon(oPC) && !IPGetIsMeleeWeapon(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC))) // No melee weapon in your off hand + nPounce = TRUE; + if(GetHasFeat(FEAT_SNOW_TIGER_BERSERKER, oPC) && GetIsLightWeapon(oPC)) + nPounce = TRUE; + if(GetHasFeat(FEAT_CATFOLK_POUNCE, oPC) && GetIsDeniedDexBonusToAC(oTarget, oPC, TRUE)) + nPounce = TRUE; + if(GetItemPossessedBy(oPC, "WOL_Shishio") == GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC) && GetLocalInt(oPC, "Shishio_Pounce")) + nPounce = TRUE; + if(GetLevelByClass(CLASS_TYPE_CELEBRANT_SHARESS, oPC) >= 5) + nPounce = TRUE; + if(GetRacialType(oPC) == RACIAL_TYPE_MARRUSAULT) + nPounce = TRUE; + if (GetHasSpellEffect(VESTIGE_CHUPOCLOPS, oPC) && GetLocalInt(oPC, "ExploitVestige") != VESTIGE_CHUPOCLOPS_POUNCE) + nPounce = TRUE; + + // Checks for a White Raven Stance + // If it exists, +1 damage/initiator level + if(GetLocalInt(oPC, "LeadingTheCharge")) + nDamage += GetLocalInt(oPC, "LeadingTheCharge"); + if(nDamageType == -1) // If the damage type isn't set + { + object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + nDamageType = GetWeaponDamageType(oWeap); + } + + float fDelay = FeetToMeters(fDistance)/10; + + if(nPounce) // Uses instant attack in order to make sure they all go off in the alloted period of time. + DelayCommand(fDelay, PerformAttackRound(oTarget, oPC, eNone, 0.0, nAttack, nDamage, nDamageType, FALSE, "Charge Hit", "Charge Miss", FALSE, FALSE, TRUE)); + else if(GetLocalInt(oPC, "BariaurCharge")) // Bariaur Charge + { + int nRoll = GetAttackRoll(oTarget, oPC, OBJECT_INVALID, 0, 0, nAttack); + _BariaurChargeDamage(oPC, oTarget, nRoll, nDamage); + DeleteLocalInt(oPC, "BariaurCharge"); + } + else if(GetLocalInt(oPC, "ShifterGore")) //Gorebrute shifter option + { + string sResRef = "prc_shftr_gore_"; + int nSize = PRCGetCreatureSize(oPC); + if(GetHasFeat(FEAT_SHIFTER_SAVAGERY) && GetHasFeatEffect(FEAT_FRENZY, oTarget)) + nSize += 2; + if(nSize > CREATURE_SIZE_COLOSSAL) + nSize = CREATURE_SIZE_COLOSSAL; + sResRef += GetAffixForSize(nSize); + object oHorns = CreateItemOnObject(sResRef, oPC); + DelayCommand(fDelay, PerformAttack(oTarget, oPC, eNone, 0.0, nAttack, nDamage + (GetHitDice(oPC) / 4), DAMAGE_TYPE_PIERCING, "Horns Hit", "Horns Miss", FALSE, oHorns)); + DestroyObject(oHorns); + } + else if(GetLocalInt(oPC, "ShifterClaw")) //Razorclaw Elite shifted option + { + object oWeaponL = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC); + object oWeaponR = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC); + DelayCommand(fDelay, PerformAttack(oTarget, oPC, eNone, 0.0, nAttack, nDamage, DAMAGE_TYPE_SLASHING, "Claw Hit", "Claw Miss", FALSE, oWeaponR, oWeaponL)); + DelayCommand(fDelay, PerformAttack(oTarget, oPC, eNone, 0.0, nAttack, nDamage, DAMAGE_TYPE_SLASHING, "Claw Hit", "Claw Miss", FALSE, oWeaponR, oWeaponL, 1)); + } + else + { + if(GetHasFeat(FEAT_TWO_WEAPON_POUNCE, oPC) && IPGetIsMeleeWeapon(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC))) + { + nAttack -= 2; + DelayCommand(fDelay, PerformAttack(oTarget, oPC, eNone, 0.0, nAttack, nDamage, nDamageType, "Two Weapon Pounce Hit", "Two Weapon Pounce Miss", FALSE, OBJECT_INVALID, OBJECT_INVALID, TRUE)); + } + else if (GetLocalInt(oPC, "TigerFangCharge")) // Grants one extra attack at the end of a charge + DelayCommand(fDelay, PerformAttack(oTarget, oPC, eNone, 0.0, nAttack, nDamage, nDamageType, "Frenzied Charge Hit", "Frenzied Charge Miss", FALSE, OBJECT_INVALID, OBJECT_INVALID, TRUE)); + DelayCommand(fDelay, PerformAttack(oTarget, oPC, eNone, 0.0, nAttack, nDamage, nDamageType, "Charge Hit", "Charge Miss")); + } + DelayCommand(fDelay, _PostCharge(oPC, oTarget)); + } + if(nBullRush) + { + DoBullRush(oPC, oTarget, nExtraBonus, nBullAoO, nMustFollow); + FloatingTextStringOnCreature("You are bull rushing " + GetName(oTarget), oPC); + } + } + else + { + FloatingTextStringOnCreature("You are too close to charge " + GetName(oTarget), oPC); + } +} + +void DoBullRush(object oPC, object oTarget, int nExtraBonus, int nGenerateAoO = TRUE, int nMustFollow = TRUE, int nNoMove = FALSE, int nAbility = 0) +{ + if (!nNoMove) + { + // Move to the target + AssignCommand(oPC, ClearAllActions()); + AssignCommand(oPC, ActionMoveToObject(oTarget, TRUE)); + } + effect eNone; + + // Do the AoO for moving into the enemy square + if (nGenerateAoO) + { + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("DoBullRush: AoO Start", oPC, FALSE); + location lTarget = GetLocation(oPC); + // Use the function to get the closest creature as a target + object oAreaTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE); + while(GetIsObjectValid(oAreaTarget)) + { + // All enemies in range get a free AoO shot + if(oAreaTarget != oPC && // Don't hit yourself + GetIsInMeleeRange(oPC, oAreaTarget) && // They must be in melee range + GetIsEnemy(oAreaTarget, oPC)) // Only enemies are going to take AoOs + { + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("DoBullRush: AoO Part 1", oPC, FALSE); + if (!GetHasFeat(FEAT_IMPROVED_BULLRUSH, oPC) || oAreaTarget != oTarget) //Improved Bullrush means the defender can't take the AoO + { + // Perform the Attack + DelayCommand(0.0, PerformAttack(oPC, oAreaTarget, eNone, 0.0, 0, 0, 0, "Attack of Opportunity Hit", "Attack of Opportunity Miss")); + FloatingTextStringOnCreature(GetName(oAreaTarget)+" Bull Rush Attack of Opportunity", oPC, FALSE); + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("DoBullRush: AoO Part 2", oPC, FALSE); + } + } + + //Select the next target within the spell shape. + oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE); + } + } + float fDelay = PRCGetSpellEffectDelay(GetLocation(oPC), oTarget) * 2.5; + if (nNoMove) fDelay = 0.1; // No need for a delay if it's a spell + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("DoBullrush: Delay: "+FloatToString(fDelay), oPC, FALSE); + DelayCommand(fDelay,_DoBullrushCheck(oPC, oTarget, nExtraBonus, nMustFollow, nAbility)); +} + +int DoTrip(object oPC, object oTarget, int nExtraBonus, int nGenerateAoO = TRUE, int nCounterTrip = TRUE, int nSkipTouch = FALSE, int nAbi = 0) +{ + // The basic modifiers + int nSucceed = FALSE; + effect eNone; + int nPCStat, nTargetStat; + // Use the higher of the two mods + if (GetAbilityModifier(ABILITY_STRENGTH, oPC) > GetAbilityModifier(ABILITY_DEXTERITY, oPC)) + nPCStat = GetAbilityModifier(ABILITY_STRENGTH, oPC); + else + nPCStat = GetAbilityModifier(ABILITY_DEXTERITY, oPC); + // Use the higher of the two mods + if (GetAbilityModifier(ABILITY_STRENGTH, oTarget) > GetAbilityModifier(ABILITY_DEXTERITY, oTarget)) + nTargetStat = GetAbilityModifier(ABILITY_STRENGTH, oTarget); + else + nTargetStat = GetAbilityModifier(ABILITY_DEXTERITY, oTarget); + // Override + if (nAbi > 0) nPCStat = nAbi; + // Get mods for size + int nPCBonus = PRCGetSizeModifier(oPC) + GetCombatMoveCheckBonus(oPC, COMBAT_MOVE_TRIP, FALSE, TRUE); + int nTargetBonus = PRCGetSizeModifier(oTarget) + GetCombatMoveCheckBonus(oTarget, COMBAT_MOVE_TRIP, TRUE); + //Warblade Battle Skill bonus + if (GetLevelByClass(CLASS_TYPE_WARBLADE, oPC) >= 11) + { + nPCBonus += GetAbilityModifier(ABILITY_INTELLIGENCE, oPC); + if (DEBUG_COMBAT_MOVE) DoDebug("Warblade Battle Skill Trip bonus (attacker)"); + } + if (GetLevelByClass(CLASS_TYPE_WARBLADE, oTarget) >= 11) + { + nTargetBonus += GetAbilityModifier(ABILITY_INTELLIGENCE, oTarget); + if (DEBUG_COMBAT_MOVE) DoDebug("Warblade Battle Skill Trip bonus (defender)"); + } + if (GetHasFeat(FEAT_IMPROVED_TRIP, oPC)) nPCBonus += 4; + // Do the AoO for a trip attempt + if (nGenerateAoO && !GetHasFeat(FEAT_IMPROVED_TRIP, oPC)) + { + // Perform the Attack + effect eNone; + DelayCommand(0.0, PerformAttack(oPC, oTarget, eNone, 0.0, 0, 0, 0, "Attack of Opportunity Hit", "Attack of Opportunity Miss")); + } + int nPCCheck = nPCStat + nPCBonus + nExtraBonus + d20(); + int nTargetCheck = nTargetStat + nTargetBonus + d20(); + + int nTouch; + if (nSkipTouch == TRUE) nTouch = TRUE; + else nTouch = PRCDoMeleeTouchAttack(oTarget, TRUE, oPC); + + // Gotta touch them + if (nTouch) + { + SendMessageToPC(oPC, "Trip Check: "+IntToString(nPCCheck)+" vs "+IntToString(nTargetCheck)); + // Now roll the ability check + if (nPCCheck >= nTargetCheck) + { + // Knock em down + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oTarget, 6.0); + nSucceed = TRUE; + SetLocalInt(oPC, "TripDifference", nPCCheck - nTargetCheck); + DelayCommand(2.0, DeleteLocalInt(oPC, "TripDifference")); + + if (!GetLocalInt(oPC, "CurlingWaveStrikeLoop")) // Neither of these trigger when Curling Wave Strike Loop protection is active + { + if (GetHasFeat(FEAT_CURLING_WAVE_STRIKE, oPC) && !GetLocalInt(oPC, "CurlingWaveStrikeRound")) // Once a round + _DoCurlingWaveStrike(oPC, oTarget); + else if (GetHasFeat(FEAT_IMPROVED_TRIP, oPC)) // Do the free Improved Trip attack + DelayCommand(0.0, PerformAttack(oTarget, oPC, eNone, 0.0, 0, 0, 0, "Improved Trip Free Attack Hit", "Improved Trip Free Attack Miss")); + } + } + else // If you fail, enemy gets a counter trip attempt, using Strength + { + nTargetStat = GetAbilityModifier(ABILITY_STRENGTH, oTarget) + GetCombatMoveCheckBonus(oTarget, COMBAT_MOVE_TRIP, FALSE, TRUE); + FloatingTextStringOnCreature("You have failed on your Trip attempt",oPC, FALSE); + // Roll counter trip attempt + nTargetCheck = nTargetStat + nTargetBonus + d20(); + nPCCheck = nPCStat + nPCBonus + d20(); + // If counters aren't allowed, don't knock em down + // Its down here to allow the text message to go through + SendMessageToPC(oPC, "Enemy Counter Trip Check: "+IntToString(nPCCheck)+" vs "+IntToString(nTargetCheck)); + if (nTargetCheck >= nPCCheck && nCounterTrip) + { + // Knock em down + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oPC, 6.0); + } + SetLocalInt(oPC, "TripDifference", nTargetCheck - nPCCheck); + DelayCommand(2.0, DeleteLocalInt(oPC, "TripDifference")); + } + } + else + FloatingTextStringOnCreature("You have failed on your Trip attempt",oPC, FALSE); + + // Now we do the rest of the attacks in the round, regardless, remembering to bump down the iteratives + SetLocalInt(oPC, "CombatMoveAttack", TRUE); + DelayCommand(5.5, DeleteLocalInt(oPC, "CombatMoveAttack")); + if (GetBaseAttackBonus(oPC) >= 6) PerformAttackRound(oTarget, oPC, eNone, 0.0, -5); + DelayCommand(0.25, AssignCommand(oPC, ActionAttack(oTarget))); + + // Let people know if we made the hit or not + return nSucceed; +} + +int GetIntToDamage(int nCheck) +{ + switch(nCheck) + { + case 1: return DAMAGE_BONUS_1; + case 2: return DAMAGE_BONUS_2; + case 3: return DAMAGE_BONUS_3; + case 4: return DAMAGE_BONUS_4; + case 5: return DAMAGE_BONUS_5; + case 6: return DAMAGE_BONUS_6; + case 7: return DAMAGE_BONUS_7; + case 8: return DAMAGE_BONUS_8; + case 9: return DAMAGE_BONUS_9; + case 10: return DAMAGE_BONUS_10; + case 11: return DAMAGE_BONUS_11; + case 12: return DAMAGE_BONUS_12; + case 13: return DAMAGE_BONUS_13; + case 14: return DAMAGE_BONUS_14; + case 15: return DAMAGE_BONUS_15; + case 16: return DAMAGE_BONUS_16; + case 17: return DAMAGE_BONUS_17; + case 18: return DAMAGE_BONUS_18; + case 19: return DAMAGE_BONUS_19; + case 20: return DAMAGE_BONUS_20; + case 21: return DAMAGE_BONUS_21; + case 22: return DAMAGE_BONUS_22; + case 23: return DAMAGE_BONUS_23; + case 24: return DAMAGE_BONUS_24; + case 25: return DAMAGE_BONUS_25; + case 26: return DAMAGE_BONUS_26; + case 27: return DAMAGE_BONUS_27; + case 28: return DAMAGE_BONUS_28; + case 29: return DAMAGE_BONUS_29; + case 30: return DAMAGE_BONUS_30; + case 31: return DAMAGE_BONUS_31; + case 32: return DAMAGE_BONUS_32; + case 33: return DAMAGE_BONUS_33; + case 34: return DAMAGE_BONUS_34; + case 35: return DAMAGE_BONUS_35; + case 36: return DAMAGE_BONUS_36; + case 37: return DAMAGE_BONUS_37; + case 38: return DAMAGE_BONUS_38; + case 39: return DAMAGE_BONUS_39; + case 40: return DAMAGE_BONUS_40; + case 41: return DAMAGE_BONUS_41; + case 42: return DAMAGE_BONUS_42; + case 43: return DAMAGE_BONUS_43; + case 44: return DAMAGE_BONUS_44; + case 45: return DAMAGE_BONUS_45; + case 46: return DAMAGE_BONUS_46; + case 47: return DAMAGE_BONUS_47; + case 48: return DAMAGE_BONUS_48; + case 49: return DAMAGE_BONUS_49; + case 50: return DAMAGE_BONUS_50; + } + return -1; +} + +/** + * @brief Attempts to initiate a grapple between the PC and the target creature. + * + * @param oPC The player character initiating the grapple attempt. + * @param oTarget The target creature to be grappled. + * @param nExtraBonus Additional bonus added to the grapple check (e.g., from feats, spells, items). + * @param nGenerateAoO If TRUE, the target is allowed an Attack of Opportunity unless the PC has Improved Grapple. + * Defaults to TRUE. + * @param nSkipTouch If TRUE, the melee touch attack step is skipped (assumes auto-hit). + * Useful when a touch attack was already resolved elsewhere. + * + * @return TRUE if the grapple attempt succeeds, FALSE otherwise. + */ +int DoGrapple(object oPC, object oTarget, int nExtraBonus, int nGenerateAoO = TRUE, int nSkipTouch = FALSE) +{ + if (GetGrapple(oTarget)) + { + FloatingTextStringOnCreature("You cannot grapple a creature that is already grappled.", oPC, FALSE); + return FALSE; + } + if(GetHasSpellEffect(SPELL_FREEDOM_OF_MOVEMENT, oTarget)) + { + FloatingTextStringOnCreature("You cannot grapple a creature under the effect of Freedom of Movement", oPC, FALSE); + return FALSE; + } + + if (IPGetHasItemPropertyOnCharacter(oTarget, ITEM_PROPERTY_FREEDOM_OF_MOVEMENT)) + { + FloatingTextStringOnCreature("You cannot grapple a creature under the effect of Freedom of Movement.", oPC, FALSE); + return FALSE; + } + if (GetIsImmune(oTarget, IMMUNITY_TYPE_ENTANGLE)) + { + FloatingTextStringOnCreature("This creature is immune to grappling.", oPC, FALSE); + return FALSE; + } + + object oGlaive = GetItemPossessedBy(oPC, "prc_eldrtch_glv"); + if(GetIsObjectValid(oGlaive)) + DestroyObject(oGlaive); + + int nSucceed = FALSE; + effect eNone; + // Do the AoO for trying a grapple + if (nGenerateAoO && !GetHasFeat(FEAT_IMPROVED_GRAPPLE, oPC)) + { + // Perform the Attack + DelayCommand(0.0, PerformAttack(oPC, oTarget, eNone, 0.0, 0, 0, 0, "Attack of Opportunity Hit", "Attack of Opportunity Miss")); + + if (GetLocalInt(oPC, "PRCCombat_StruckByAttack")) + { + FloatingTextStringOnCreature("You have failed at your Grapple Attempt.", oPC, FALSE); + return FALSE; + } + } + + int nTouch; + if (nSkipTouch == TRUE) nTouch = TRUE; + else nTouch = PRCDoMeleeTouchAttack(oTarget, TRUE, oPC); + + // Gotta touch them + if (nTouch) + { + // Now roll the ability check + if (_DoGrappleCheck(oPC, oTarget, nExtraBonus)) + { + FloatingTextStringOnCreature("You have successfully grappled " + GetName(oTarget), oPC, FALSE); + int nBearFang = GetLocalInt(oPC, "BearFangGrapple"); + SetGrapple(oPC); + SetGrapple(oTarget); + SetLocalInt(oPC, "GrappleOriginator", TRUE); + effect eHold = EffectCutsceneParalyze(); + effect eEntangle = EffectVisualEffect(VFX_DUR_SPELLTURNING_R); + effect eLink = EffectLinkEffects(eHold, eEntangle); + //apply the effect + if (!GetLocalInt(oPC, "Flay_Grapple")) ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(eLink), oPC, 9999.0); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(eLink), oTarget, 9999.0); + nSucceed = TRUE; + + if (nBearFang) // Grants a bonus attack on hit + { + // Attack with a -4 penalty + DelayCommand(0.0, PerformAttack(oTarget, oPC, eNone, 0.0, -4, 0, 0, "Bear Fang Attack Hit", "Bear Fang Attack Miss")); + DeleteLocalInt(oPC, "BearFangGrapple"); + } + else + { + // Now hit them with an unarmed strike + object oWeap = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC); + effect eDam = GetAttackDamage(oTarget, oPC, oWeap, GetWeaponBonusDamage(oWeap, oTarget), GetMagicalBonusDamage(oPC, oTarget)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); + } + _HeartOfFireGrapple(oPC, oTarget); + + // If you kill them with this, best to clean up right away + if (GetIsDead(oTarget) || !GetIsObjectValid(oTarget)) + { + EndGrapple(oPC, oTarget); + // Remove the hooks + if(DEBUG) DoDebug("prc_grapple: Removing eventhooks"); + RemoveEventScript(oPC, EVENT_ONHEARTBEAT, "prc_grapple", TRUE, FALSE); + FloatingTextStringOnCreature("Your target is dead, ending grapple", oPC, FALSE); + } + else + { + // Hook in the events and save the target for an ongoing grapple + if(DEBUG) DoDebug("prc_grapple: Adding eventhooks"); + SetGrappleTarget(oPC, oTarget); + AddEventScript(oPC, EVENT_ONHEARTBEAT, "prc_grapple", TRUE, FALSE); + } + } + else + FloatingTextStringOnCreature("You have failed your Grapple Attempt", oPC, FALSE); + } + + // Let people know if we made the hit or not + return nSucceed; +} + +void SetGrapple(object oTarget) +{ + SetLocalInt(oTarget, "IsGrappled", TRUE); +} + +int GetGrapple(object oTarget) +{ + return GetLocalInt(oTarget, "IsGrappled"); +} + +void SetGrappleTarget(object oPC, object oTarget) +{ + SetLocalObject(oPC, "GrappleTarget", oTarget); +} + +object GetGrappleTarget(object oPC) +{ + return GetLocalObject(oPC, "GrappleTarget"); +} + +void SetIsPinned(object oTarget) +{ + SetLocalInt(oTarget, "IsPinned", TRUE); +} + +int GetIsPinned(object oTarget) +{ + return GetLocalInt(oTarget, "IsPinned"); +} + +void BreakPin(object oTarget) +{ + DeleteLocalInt(oTarget, "IsPinned"); + DeleteLocalInt(oTarget, "PinnedRounds"); +} + +void EndGrapple(object oPC, object oTarget) +{ + DeleteLocalInt(oPC, "IsGrappled"); + DeleteLocalInt(oTarget, "IsGrappled"); + DeleteLocalInt(oTarget, "PinnedRounds"); + DeleteLocalObject(oPC, "GrappleTarget"); + DeleteLocalInt(oTarget, "UnconsciousGrapple"); + DeleteLocalInt(oPC, "GrappleOriginator"); + DeleteLocalInt(oPC, "ScorpionLight"); + DeleteLocalInt(oPC, "Flay_Grapple"); + RemoveEventScript(oPC, EVENT_ITEM_ONHIT, "wol_m_flay", TRUE, FALSE); + BreakPin(oTarget); + effect eBad = GetFirstEffect(oTarget); + //Search for negative effects + while(GetIsEffectValid(eBad)) + { + int nInt = GetEffectSpellId(eBad); + if (GetEffectType(eBad) == EFFECT_TYPE_CUTSCENE_PARALYZE) + { + RemoveEffect(oTarget, eBad); + } + eBad = GetNextEffect(oTarget); + } + eBad = GetFirstEffect(oPC); + //Search for negative effects + while(GetIsEffectValid(eBad)) + { + int nInt = GetEffectSpellId(eBad); + if (GetEffectType(eBad) == EFFECT_TYPE_CUTSCENE_PARALYZE) + { + RemoveEffect(oPC, eBad); + } + eBad = GetNextEffect(oPC); + } +} + +int DoGrappleOptions(object oPC, object oTarget, int nExtraBonus, int nSwitch = -1) +{ + effect eNone; + + int nSuccess = _DoGrappleCheck(oPC, oTarget, nExtraBonus, nSwitch); + // This applies on all grapples regardless of success or failure + _HeartOfFireGrapple(oPC, oTarget); + if(GetHasSpellEffect(SPELL_FREEDOM_OF_MOVEMENT, oTarget)) + { + nSuccess = TRUE; + nSwitch = GRAPPLE_ESCAPE; + } + + if (nSwitch == GRAPPLE_ATTACK) + { + // Must be a light weapon, and succeed at the grapple check + if (nSuccess && (GetIsLightWeapon(oPC) || GetLevelByClass(CLASS_TYPE_WARFORGED_JUGGERNAUT, oPC) || GetHasFeat(FEAT_SPIKED_BODY, oPC)||GetHasFeat(FEAT_NATURAL_SPIKES))) + { + if (GetIsMeldBound(oTarget, MELD_RAGECLAWS) == CHAKRA_TOTEM && !GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC))) // CHAKRA_TOTEM + { + DelayCommand(0.0, PerformAttack(oTarget, oPC, eNone, 0.0, 0, 0, 0, "Rageclaws Hit", "Rageclas Miss")); + DelayCommand(0.0, PerformAttack(oTarget, oPC, eNone, 0.0, 0, 0, 0, "Rageclaws Hit", "Rageclas Miss")); + } + else if (GetHasSpellEffect(MOVE_TC_WOLVERINE_STANCE, oPC)) + { + int nDam = 0; + if (PRCGetCreatureSize(oTarget) > PRCGetCreatureSize(oPC)) nDam = 4; + DelayCommand(0.0, PerformAttack(oTarget, oPC, eNone, 0.0, 0, nDam, 0, "Wolverine Stance Hit", "Wolverine Stance Miss")); + } + else if(GetLevelByClass(CLASS_TYPE_WARFORGED_JUGGERNAUT, oPC)) + { + int nDam = d6(); + if(GetLevelByClass(CLASS_TYPE_WARFORGED_JUGGERNAUT, oPC) >= 4) nDam = d8(); + + effect eDeath = EffectDamage(nDam, DAMAGE_TYPE_PIERCING); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget); + FloatingTextStringOnCreature("Warforged Juggernaut Armor Spikes Hit", oPC, FALSE); + } + else if(GetHasFeat(FEAT_SPIKED_BODY, oPC)) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(), DAMAGE_TYPE_PIERCING), oTarget); + FloatingTextStringOnCreature("Spiked Body Hit", oPC, FALSE); + } + else if(GetHasFeat(FEAT_NATURAL_SPIKES, oPC)) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(), DAMAGE_TYPE_PIERCING), oTarget); + FloatingTextStringOnCreature("Natural Spikes Hit", oPC, FALSE); + } + else + { + // Attack with a -4 penalty + int nPen = -4; + if (GetLocalInt(oPC, "ScorpionLight")) nPen = 0; + DelayCommand(0.0, PerformAttack(oTarget, oPC, eNone, 0.0, nPen, 0, 0, "Grapple Light Weapon Attack Hit", "Grapple Light Weapon Attack Miss")); + } + } + else + FloatingTextStringOnCreature("You have failed your Grapple Light Weapon Attack Attempt",oPC, FALSE); + } + else if (nSwitch == GRAPPLE_OPPONENT_WEAPON) + { + // Must be a light weapon, and succeed at the grapple check + if (nSuccess && GetIsLightWeapon(oTarget)) + { + // Attack with a -4 penalty + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + DelayCommand(0.0, PerformAttack(oTarget, oPC, eNone, 0.0, -4, 0, 0, "Grapple Opponent's Weapon Hit", "Grapple Opponent's Weapon Miss", FALSE, oWeapon)); + } + else + FloatingTextStringOnCreature("You have failed your Grapple Opponent's Weapon Attempt",oPC, FALSE); + } + else if (nSwitch == GRAPPLE_DAMAGE) + { + // Must be a light weapon, and succeed at the grapple check + if (GetLocalInt(oPC, "Flay_Grapple")) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d3()+5), oTarget); + FloatingTextStringOnCreature("Flay Constrict", oPC, FALSE); + } + else if (GetLevelByClass(CLASS_TYPE_BLACK_BLOOD_CULTIST, oPC) >= 8) + { + // Now hit them with a lot of unarmed strikes + object oWeap = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC); + effect eDam = GetAttackDamage(oTarget, oPC, oWeap, GetWeaponBonusDamage(oWeap, oTarget), GetMagicalBonusDamage(oPC, oTarget)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); + oWeap = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC); + eDam = GetAttackDamage(oTarget, oPC, oWeap, GetWeaponBonusDamage(oWeap, oTarget), GetMagicalBonusDamage(oPC, oTarget)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); + oWeap = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oPC); + eDam = GetAttackDamage(oTarget, oPC, oWeap, GetWeaponBonusDamage(oWeap, oTarget), GetMagicalBonusDamage(oPC, oTarget)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); + // Rend damage is double claw damage + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d8(2) + (2 * GetAbilityModifier(ABILITY_STRENGTH, oPC)), DAMAGE_TYPE_SLASHING), oTarget); + FloatingTextStringOnCreature("Savage Grapple Hit",oPC, FALSE); + } + else if (GetHasFeat(FEAT_OWLBEAR_BERSERKER, oPC)) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6()), oTarget); + FloatingTextStringOnCreature("Owlbear Berserker Hit",oPC, FALSE); + } + else if (nSuccess) + { + // Now hit them with an unarmed strike + object oWeap = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC); + effect eDam = GetAttackDamage(oTarget, oPC, oWeap, GetWeaponBonusDamage(oWeap, oTarget), GetMagicalBonusDamage(oPC, oTarget)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); + FloatingTextStringOnCreature("Grapple Unarmed Damage Hit",oPC, FALSE); + } + else + FloatingTextStringOnCreature("You have failed your Grapple Unarmed Damage Attempt",oPC, FALSE); + + // This is bonus damage that applies to successful grappling of any of the above + if (GetHasSpellEffect(VESTIGE_ZAGAN, oPC) && GetLocalInt(oPC, "ExploitVestige") != VESTIGE_ZAGAN_CONSTRICT && nSuccess) + { + int nDam = d8() + GetAbilityModifier(ABILITY_STRENGTH, oPC) + GetAbilityModifier(ABILITY_STRENGTH, oPC)/2; + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDam), oTarget); + FloatingTextStringOnCreature("Zagan Constrict Hit",oPC, FALSE); + } + } + else if (nSwitch == GRAPPLE_ESCAPE) + { + // Must be a light weapon, and succeed at the grapple check + if (nSuccess) + { + if (GetIsPinned(oPC)) + { + BreakPin(oPC); + if (GetIsPC(oPC)) + FloatingTextStringOnCreature("You have escaped the pin", oPC, FALSE); + else + FloatingTextStringOnCreature("Your target has escaped your pin", oTarget, FALSE); + } + else + { + EndGrapple(oPC, oTarget); + + if (GetIsPC(oPC)) + { + // Remove the hooks + if(DEBUG) DoDebug("prc_grapple: Removing eventhooks"); + RemoveEventScript(oPC, EVENT_ONHEARTBEAT, "prc_grapple", TRUE, FALSE); + FloatingTextStringOnCreature("You have escaped the grapple", oPC, FALSE); + } + else + { + // Remove the hooks + if(DEBUG) DoDebug("prc_grapple: Removing eventhooks"); + RemoveEventScript(oTarget, EVENT_ONHEARTBEAT, "prc_grapple", TRUE, FALSE); + FloatingTextStringOnCreature("Your target has escaped your grapple", oTarget, FALSE); + // Target is valid and we know it's an enemy and we're in combat + DelayCommand(0.25, AssignCommand(oTarget, ActionAttack(oPC))); + } + } + } + else + FloatingTextStringOnCreature("You have failed your Grapple Escape Attempt",oPC, FALSE); + } + else if (nSwitch == GRAPPLE_TOB_CRUSHING && GetHasSpellEffect(MOVE_SD_CRUSHING_WEIGHT, oPC)) + { + // Constrict for 2d6 + 1.5 Strength + if (nSuccess) + { + int nDam = FloatToInt(d6(2) + (GetAbilityModifier(ABILITY_STRENGTH, oPC) * 1.5)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDam), oTarget); + FloatingTextStringOnCreature("Crushing Weight Success",oPC, FALSE); + } + else + FloatingTextStringOnCreature("You have failed your Crushing Weight Attempt",oPC, FALSE); + } + else if (nSwitch == GRAPPLE_PIN) + { + // Pins the target + if (nSuccess) + { + FloatingTextStringOnCreature("You have pinned your target", oPC, FALSE); + SetIsPinned(oTarget); + int nClass = GetLevelByClass(CLASS_TYPE_REAPING_MAULER, oPC); + if (nClass) + { + int nRounds = _CountPinRounds(oTarget); + _DoReapingMauler(oPC, oTarget, nRounds); + } + if (GetHasFeat(FEAT_EARTHS_EMBRACE, oPC)) + { + // Add in unarmed damage + int nDamageSize = FindUnarmedDamage(oPC); + + int nDie = StringToInt(Get2DACache("iprp_monstcost", "Die", nDamageSize)); + int nNum = StringToInt(Get2DACache("iprp_monstcost", "NumDice", nDamageSize)); + int nRoll; + + //Potential die options + if(nDie == 4) nRoll = d4(nNum); + else if(nDie == 6) nRoll = d6(nNum); + else if(nDie == 8) nRoll = d8(nNum); + else if(nDie == 10) nRoll = d10(nNum); + else if(nDie == 12) nRoll = d12(nNum); + else if(nDie == 20) nRoll = d20(nNum); + + FloatingTextStringOnCreature("Earth's Embrace chokes the life from your foe", oPC, FALSE); + + int nDam = d12() + nRoll; + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDam, DAMAGE_TYPE_BLUDGEONING), oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectACDecrease(4)), oPC, 6.0); + } + } + else + FloatingTextStringOnCreature("You have failed your Grapple Pin Attempt",oPC, FALSE); + } + else + { + FloatingTextStringOnCreature("DoGrappleOptions: Error, invalid option "+IntToString(nSwitch)+" passed to function by "+GetName(oPC),oPC, FALSE); + FloatingTextStringOnCreature("DoGrappleOptions: Error, GetGrapple(oPC) "+IntToString(GetGrapple(oPC))+" GetGrapple(oTarget) "+IntToString(GetGrapple(oTarget)),oPC, FALSE); + return FALSE; + } + + return nSuccess; +} + +int GetIsLightWeapon(object oPC) +{ + // You may use any weapon in a grapple with this stance. + if (GetHasSpellEffect(MOVE_TC_WOLVERINE_STANCE, oPC)) return TRUE; + int nSize = PRCGetCreatureSize(oPC); + object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + int nWeaponSize = GetWeaponSize(oItem); + // is the size appropriate for a light weapon? + return (nWeaponSize < nSize); +} + +void DoOverrun(object oPC, object oTarget, location lTarget, int nGenerateAoO = TRUE, int nExtraBonus = 0, int nAvoid = TRUE, int nCounter = TRUE) +{ + effect eCharge = SupernaturalEffect(EffectMovementSpeedIncrease(99)); // Just to speed things up a bit + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCharge, oPC, 5.0); + SetLocalInt(oPC, "Overrun", 2); // This tells _DoOverrunCheck it's a valid call + float fLength = GetDistanceBetweenLocations(GetLocation(oPC), lTarget); + vector vOrigin = GetPosition(oPC); + + if (GetIsMeldBound(oPC, MELD_URSKAN_GREAVES) == CHAKRA_TOTEM) + nAvoid = FALSE; + if (GetHasFeat(FEAT_CENTAUR_TRAMPLE, oPC)) + nAvoid = FALSE; + + // Step one is check to see if we're using oTarget or not + if (GetIsObjectValid(oTarget)) + { + lTarget = GetLocation(oTarget); + fLength = GetDistanceBetweenLocations(GetLocation(oPC), lTarget); + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("DoOverrun: Valid Target", oPC, FALSE); + } + else + oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE, vOrigin); // Only change targets if invalid + + // Move the PC to the location + AssignCommand(oPC, ClearAllActions(TRUE)); + AssignCommand(oPC, ActionForceMoveToLocation(lTarget, TRUE)); + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("DoOverrun: Distance: "+FloatToString(fLength), oPC, FALSE); + + // Loop over targets in the line shape + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("DoOverrun: First Target: "+GetName(oTarget), oPC, FALSE); + while(GetIsObjectValid(oTarget)) // Find the targets + { + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("DoOverrun: Loop 1, Target: "+GetName(oTarget), oPC, FALSE); + if(oTarget != oPC && GetIsEnemy(oTarget, oPC)) // Don't overrun friends or yourself + { + float fDelay = PRCGetSpellEffectDelay(GetLocation(oPC), oTarget) * 2.5; + if (DEBUG_COMBAT_MOVE) FloatingTextStringOnCreature("DoOverrun: Loop 2, Delay: "+FloatToString(fDelay), oPC, FALSE); + DelayCommand(fDelay,_DoOverrunCheck(oPC, oTarget, lTarget, nGenerateAoO, nExtraBonus, nAvoid, nCounter)); + }// end if - Target validity check + // Get next target + oTarget = MyNextObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE, vOrigin); + }// end while - Target loop + + // Clean up + DelayCommand(3.0,DeleteLocalInt(oPC, "Overrun")); +} + +int PRCGetSizeModifier(object oCreature) +{ + int nSize = PRCGetCreatureSize(oCreature); + + //Powerful Build bonus + if(GetHasFeat(FEAT_RACE_POWERFUL_BUILD, oCreature)) + nSize++; + //Make sure it doesn't overflow + if(nSize > CREATURE_SIZE_COLOSSAL) nSize = CREATURE_SIZE_COLOSSAL; + int nModifier = 0; + + // Jotunbrud + if(GetHasFeat(FEAT_JOTUNBRUD, oCreature) && nSize == CREATURE_SIZE_MEDIUM) + nSize++; + + // Oddly, this overrides everything else and just sets your size as large + if (GetHasSpellEffect(VESTIGE_ZAGAN, oCreature) && GetLocalInt(oCreature, "ExploitVestige") != VESTIGE_ZAGAN_GRAPPLE) + nSize = CREATURE_SIZE_LARGE; + + switch (nSize) + { + case CREATURE_SIZE_TINY: nModifier = -8; break; + case CREATURE_SIZE_SMALL: nModifier = -4; break; + case CREATURE_SIZE_MEDIUM: nModifier = 0; break; + case CREATURE_SIZE_LARGE: nModifier = 4; break; + case CREATURE_SIZE_HUGE: nModifier = 8; break; + case CREATURE_SIZE_GARGANTUAN: nModifier = 12; break; + case CREATURE_SIZE_COLOSSAL: nModifier = 16; break; + } + return nModifier; +} + +void TigerBlooded(object oInitiator, object oTarget) +{ + // Got to have the feat first and hit the opponent + if (!GetHasFeat(FEAT_TIGER_BLOODED, oInitiator)) return; + if (!GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) return; + + if(GetHasSpellEffect(SPELLABILITY_BARBARIAN_RAGE, oInitiator) || + GetIsPolyMorphedOrShifted(oInitiator) || + GetHasSpellEffect(SPELL_SPELL_RAGE, oInitiator) || + GetHasSpellEffect(SPELL_BLOOD_FRENZY, oInitiator) || + GetHasSpellEffect(SPELL_FRENZY, oInitiator) || + GetHasSpellEffect(SPELL_INSPIRE_FRENZY, oInitiator) || + GetHasSpellEffect(SPELL_TRIBAL_FRENZY , oInitiator) || + GetHasSpellEffect(INVOKE_WILD_FRENZY, oInitiator)) + { + int nHD = GetHitDice(oInitiator)/2; + int nStr = GetAbilityModifier(ABILITY_STRENGTH, oInitiator); + int nDC = 10 + nHD + nStr; + + if (PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC) && PRCGetSizeModifier(oInitiator) >= PRCGetSizeModifier(oTarget)) + { + _DoBullRushKnockBack(oTarget, oInitiator, 5.0); + FloatingTextStringOnCreature("Tiger Blooded Knockback", oInitiator, FALSE); + } + } +} + +int DoDisarm(object oPC, object oTarget, int nExtraBonus = 0, int nGenerateAoO = TRUE, int nCounter = TRUE) +{ + object oTargetWep = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + + if (!GetIsObjectValid(oTargetWep) || GetPlotFlag(oTargetWep) || (!GetIsCreatureDisarmable(oTarget) && !GetPRCSwitch(PRC_PNP_DISARM)) || GetLocalInt(oTarget, "TigerFangDisarm")) + { + FloatingTextStringOnCreature("Target is not a legal target", oPC, FALSE); + AssignCommand(oPC, ActionAttack(oTarget)); + return FALSE; + } + + // The basic modifiers + int nSucceed = FALSE; + object oPCWep = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + effect eNone; + GetAttackRoll(oTarget, oPC, oPCWep, 0, 0, 0, FALSE); + GetAttackRoll(oPC, oTarget, oTargetWep, 0, 0, 0, FALSE); + int nPCAttack = GetLocalInt(oPC, "PRCAttackBonus"); + int nTargetAttack = GetLocalInt(oTarget, "PRCAttackBonus"); + + nPCAttack += GetCombatMoveCheckBonus(oPC, COMBAT_MOVE_DISARM, FALSE, TRUE); + nTargetAttack += GetCombatMoveCheckBonus(oTarget, COMBAT_MOVE_DISARM, TRUE); + + int nPCSize = PRCGetCreatureSize(oPC); + int nPCWeaponSize = GetWeaponSize(oPCWep); + int nTGSize = PRCGetCreatureSize(oTarget); + int nTGWeaponSize = GetWeaponSize(oTargetWep); + + // Two-handed weapon + if (nPCWeaponSize >= nPCSize + 1) + nPCAttack += 4; + if (nTGWeaponSize >= nTGSize + 1) + nTargetAttack += 4; + // Light weapon or unarmed + if ((nPCSize > nPCWeaponSize) || !GetIsObjectValid(oPCWep)) + nPCAttack -= 4; + if (nTGSize > nTGWeaponSize) + nTargetAttack -= 4; + + //Larger combatant gets a +4 bonus per size difference, applied as a bonus or penalty to the PCAttack + nPCAttack += (nPCSize - nTGSize) * 4; + + //Warblade Battle Skill bonus + if (GetLevelByClass(CLASS_TYPE_WARBLADE, oPC) >= 11) + { + nPCAttack += GetAbilityModifier(ABILITY_INTELLIGENCE, oPC); + if (DEBUG_COMBAT_MOVE) DoDebug("Warblade Battle Skill Disarm bonus (attacker)"); + } + if (GetLevelByClass(CLASS_TYPE_WARBLADE, oTarget) >= 11) + { + nTargetAttack += GetAbilityModifier(ABILITY_INTELLIGENCE, oTarget); + if (DEBUG_COMBAT_MOVE) DoDebug("Warblade Battle Skill Disarm bonus (defender)"); + } + if (GetHasFeat(FEAT_PRC_IMP_DISARM, oPC)) + // Check if oPC is the same as oTarget and return immediately + if (oPC == oTarget) + { + FloatingTextStringOnCreature("You can't Disarm yourself.", oPC, FALSE); + return FALSE; + } + + if (GetHasFeat(FEAT_PRC_IMP_DISARM, oPC)) + { + nPCAttack += 4; + nGenerateAoO = FALSE; + nCounter = FALSE; + } + + // Do the AoO for a trip attempt + if (nGenerateAoO) + { + // Perform the Attack + effect eNone; + DelayCommand(0.0, PerformAttack(oPC, oTarget, eNone, 0.0, 0, 0, 0, "Attack of Opportunity Hit", "Attack of Opportunity Miss")); + if (GetLocalInt(oPC, "PRCCombat_StruckByAttack")) + { + FloatingTextStringOnCreature("You have failed at your Disarm Attempt.", oPC, FALSE); + return FALSE; + } + } + + + SendMessageToPC(oPC, "Disarm Check: "+IntToString(nPCAttack)+" vs "+IntToString(nTargetAttack)); + // Now the outcome + if (nPCAttack >= nTargetAttack) + { + // Disarm em + nSucceed = TRUE; + + // Unarmed + if (!GetIsObjectValid(oPCWep)) + { + object oCopy = CopyObject(oTargetWep, GetLocation(oPC), oPC); + DestroyObject(oTargetWep); + SetDroppableFlag(oCopy, TRUE); + SetStolenFlag(oCopy, FALSE); + } + else + { + AssignCommand(oTarget, ClearAllActions(TRUE)); + SetDroppableFlag(oTargetWep, TRUE); + SetStolenFlag(oTargetWep, FALSE); + //AssignCommand(oTarget, ActionPutDownItem(oTargetWep)); + ForcePutDown(oTarget, oTargetWep, INVENTORY_SLOT_RIGHTHAND); + } + if (GetHasFeat(FEAT_STEAL_AND_STRIKE, oPC)) + { + int nRight = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)); + int nLeft = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)); + if (nLeft == BASE_ITEM_KUKRI && nRight == BASE_ITEM_RAPIER) + PerformAttack(oPC, oTarget, eNone, 0.0, 0, 0, 0, "Steal and Strike Hit", "Steal and Strike Miss", FALSE, OBJECT_INVALID, GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC), TRUE); + } + } + else if (nCounter) // If you fail, enemy gets a counter attempt + { + FloatingTextStringOnCreature("You have failed on your disarm attempt",oPC, FALSE); + DoDisarm(oTarget, oPC, 0, FALSE, FALSE); + } + else + FloatingTextStringOnCreature("You have failed on your disarm attempt",oPC, FALSE); + + // Keep Attacking + //AssignCommand(oPC, ActionAttack(oTarget)); + // Now we do the rest of the attacks in the round, regardless, remembering to bump down the iteratives + SetLocalInt(oPC, "CombatMoveAttack", TRUE); + DelayCommand(5.5, DeleteLocalInt(oPC, "CombatMoveAttack")); + if (GetBaseAttackBonus(oPC) >= 6) PerformAttackRound(oTarget, oPC, eNone, 0.0, -5); + DelayCommand(0.25, AssignCommand(oPC, ActionAttack(oTarget))); + + // Let people know if we made the hit or not + return nSucceed; +} + +void DoTrample(object oPC, object oTarget, location lTarget) +{ + effect eCharge = SupernaturalEffect(EffectMovementSpeedIncrease(99)); // Just to speed things up a bit + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCharge, oPC, 5.5); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSkillIncrease(SKILL_TUMBLE, 50), oPC, 5.5); + float fLength = GetDistanceBetweenLocations(GetLocation(oPC), lTarget); + vector vOrigin = GetPosition(oPC); + + // Step one is check to see if we're using oTarget or not + if (GetIsObjectValid(oTarget)) + { + lTarget = GetLocation(oTarget); + fLength = GetDistanceBetweenLocations(GetLocation(oPC), lTarget); + } + else + oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE, vOrigin); // Only change targets if invalid + + // Move the PC to the location + AssignCommand(oPC, ClearAllActions(TRUE)); + AssignCommand(oPC, ActionForceMoveToLocation(lTarget, TRUE)); + + // Loop over targets in the line shape + while(GetIsObjectValid(oTarget)) // Find the targets + { + if(oTarget != oPC && GetIsEnemy(oTarget, oPC)) // Don't overrun friends or yourself + { + float fDelay = PRCGetSpellEffectDelay(GetLocation(oPC), oTarget) * 2.5; + DelayCommand(fDelay, _DoTrampleDamage(oPC, oTarget)); + }// end if - Target validity check + // Get next target + oTarget = MyNextObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE, vOrigin); + }// end while - Target loop +} + +void DoShieldBash(object oPC, object oTarget, int nAtk = 0, int nDamage = 0, int nDamageType = 0, int nCharge = FALSE, int nPounce = FALSE, int nSlam = FALSE, int nInstant = FALSE) +{ + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC); + int nType = GetBaseItemType(oShield); + effect eNone; + // Can only bash with small or large shields, not tower + if (nType != BASE_ITEM_LARGESHIELD && nType != BASE_ITEM_SMALLSHIELD) + { + FloatingTextStringOnCreature("You do not have a legal shield equipped!", oPC, FALSE); + PerformAttackRound(oTarget, oPC, eNone); + return; + } + + int nTWFeat, nPenOn, nPenOff; + // Check for TWF feats that matter for this + if(GetHasFeat(FEAT_SUPREME_TWO_WEAPON_FIGHTING, oPC)) nTWFeat = 4; + else if(GetHasFeat(FEAT_GREATER_TWO_WEAPON_FIGHTING, oPC)) nTWFeat = 3; + else if(GetHasFeat(FEAT_IMPROVED_TWO_WEAPON_FIGHTING, oPC)) nTWFeat = 2; + else if(GetHasFeat(FEAT_TWO_WEAPON_FIGHTING, oPC)) nTWFeat = 1; + + // Number of attacks with the shield. You always get at least one. + int nAttacks = 1; + if (nTWFeat == 4) nAttacks = 4; + else if (nTWFeat == 3) nAttacks = 3; + else if (nTWFeat == 2) nAttacks = 2; + + // Attack penalty for two weapon fighting. Small shields count as light weapons. Large shields as one-handed weapons. + if(GetHasFeat(FEAT_AGILE_SHIELD_FIGHTER, oPC)) + { + nPenOn = -2; + nPenOff = -2; + } + else if (nTWFeat && (nType == BASE_ITEM_SMALLSHIELD || (nType == BASE_ITEM_LARGESHIELD && GetHasFeat(FEAT_OTWF, oPC)))) + { + nPenOn = -2; + nPenOff = -2; + } + else if (nTWFeat && nType == BASE_ITEM_LARGESHIELD) // TWF with a One-handed weapon + { + nPenOn = -4; + nPenOff = -4; + } + else if (nType == BASE_ITEM_SMALLSHIELD) // Light weapon, no TWF + { + nPenOn = -4; + nPenOff = -8; + } + else // One-handed weapon, no TWF + { + nPenOn = -6; + nPenOff = -10; + } + // Add bashing to attack rolls. _ShieldBashDamage gets it for damage + nAtk += GetLocalInt(oPC, "BashingEnchant"); + + // Add in any passed along bonuses + nPenOn += nAtk; + nPenOff += nAtk; + + // Do the attacks, including main hand + //Pouncing Charge + if (nCharge && nPounce) + { + PerformAttackRound(oTarget, oPC, eNone, 0.0, nPenOn, nDamage, nDamageType, FALSE, "Pouncing Charge Hit", "Pouncing Charge Miss", FALSE, FALSE, TRUE); + int i; + for(i = 1; i <= nAttacks; i++) + { + // Account for iteratives on TWF + int nIter = 5-(5*i); + int nRoll = GetAttackRoll(oTarget, oPC, oShield, 1, 0, nPenOff-nIter); + if (nRoll) + { + _ShieldBashDamage(oPC, oTarget, nRoll, FALSE, nDamage, nDamageType, nType); + + // The only way to get here is Shield Charge, so we know they have this effect + DoTrip(oPC, oTarget, 0, FALSE, FALSE); + } + } + } + else if (nCharge && !nPounce) // Charging without pounce, so only one attack + { + PerformAttack(oTarget, oPC, eNone, 0.0, nPenOn, nDamage, nDamageType, "Charge Hit", "Charge Miss"); + + int nRoll = GetAttackRoll(oTarget, oPC, oShield, 1, 0, nPenOff); + if (nRoll) + { + _ShieldBashDamage(oPC, oTarget, nRoll, FALSE, nDamage, nDamageType, nType); + // The only way to get here is Shield Charge, so we know they have this effect + DoTrip(oPC, oTarget, 0, FALSE, FALSE); + } + } + else if (nSlam) // Shield Slam only + { + int nRoll = GetAttackRoll(oTarget, oPC, oShield, 1, 0, nPenOff); + if (nRoll) + { + // GetAttackRoll doesn't set this, so we set it manually + SetLocalInt(oTarget, "PRCCombat_StruckByAttack", TRUE); + DelayCommand(1.0, DeleteLocalInt(oTarget, "PRCCombat_StruckByAttack")); + _ShieldBashDamage(oPC, oTarget, nRoll, TRUE, nDamage, nDamageType, nType); + // Shield slam stun + int nDC = 10 + GetHitDice(oPC)/2 + GetAbilityModifier(ABILITY_STRENGTH, oPC); + if (!GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT)) + { + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE)) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, 6.0); + } + } + FloatingTextStringOnCreature("Shield Slam Hit!", oPC, FALSE); + // If it's a charge and we're here, we've hit with the attack + if (nCharge) DoTrip(oPC, oTarget, 0, FALSE, FALSE); + } + else + FloatingTextStringOnCreature("Shield Slam Missed!", oPC, FALSE); + } + else if (nInstant) // Shield Counter only, currently + { + int nRoll = GetAttackRoll(oTarget, oPC, oShield, 1, 0, nPenOff); + if (nRoll) + { + // GetAttackRoll doesn't set this, so we set it manually + SetLocalInt(oTarget, "PRCCombat_StruckByAttack", TRUE); + DelayCommand(1.0, DeleteLocalInt(oTarget, "PRCCombat_StruckByAttack")); + _ShieldBashDamage(oPC, oTarget, nRoll, TRUE, nDamage, nDamageType, nType); + // Enemy misses their next attack + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST), oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectAttackDecrease(20)), oTarget, 3.0); + FloatingTextStringOnCreature("Shield Counter Hit!", oPC, FALSE); + } + else + FloatingTextStringOnCreature("Shield Counter Missed!", oPC, FALSE); + } + else // No charge, no pounce, so regular combat + { + PerformAttackRound(oTarget, oPC, eNone, 0.0, nPenOn, nDamage, nDamageType); + int i; + for(i = 1; i <= nAttacks; i++) + { + // Account for iteratives on TWF + int nIter = 5-(5*i); + int nRoll = GetAttackRoll(oTarget, oPC, oShield, 1, 0, nPenOff-nIter); + if (nRoll) + { + _ShieldBashDamage(oPC, oTarget, nRoll, FALSE, nDamage, nDamageType, nType); + } + } + } + + // No shield benefit for the next round, unless you have Improved Shield Bash + if(!GetHasFeat(FEAT_IMPROVED_SHIELD_BASH, oPC)) ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectACDecrease(GetItemACValue(oShield)), oPC, 6.0); + + // Target is valid and we know it's an enemy and we're in combat + DelayCommand(0.25, AssignCommand(oPC, ActionAttack(oTarget))); +} + +void DoShieldCharge(object oPC, object oTarget, int nSlam = FALSE) +{ + // PnP rules use feet, might as well convert it now. + float fDistance = MetersToFeet(GetDistanceBetweenLocations(GetLocation(oPC), GetLocation(oTarget))); + if(fDistance >= 10.0) + { + // Mark the PC as charging + SetIsCharging(oPC); + + int nPounce = FALSE; + int nDamageType = DAMAGE_TYPE_BASE_WEAPON; + int nDamage = _ChargeDamage(oPC); + int nAttack = _ChargeAttack(oPC, oTarget, nAttack); // This now takes into account charge feats + effect eNone; + + // Move to the target + AssignCommand(oPC, ClearAllActions()); + AssignCommand(oPC, ActionMoveToObject(oTarget, TRUE)); + + // Dread Carapace Totem Bind + if(GetIsIncarnumUser(oPC)) + { + if (GetIsMeldBound(oPC, MELD_DREAD_CARAPACE) == CHAKRA_TOTEM) // CHAKRA_TOTEM + { + location lTargetLocation = GetLocation(oPC); + int nSaveDC = GetMeldshaperDC(oPC, CLASS_TYPE_TOTEMIST, MELD_DREAD_CARAPACE); // MELD_DREAD_CARAPACE + + object oDreadTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(60.0), lTargetLocation, FALSE, OBJECT_TYPE_CREATURE); + while(GetIsObjectValid(oDreadTarget)) + { + if(GetIsEnemy(oPC, oDreadTarget)) + { + if(!PRCMySavingThrow(SAVING_THROW_WILL, oDreadTarget, nSaveDC, SAVING_THROW_TYPE_FEAR)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectShaken(), oDreadTarget, 6.0); + + } + //Select the next target within the spell shape. + oDreadTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(60.0), lTargetLocation, FALSE, OBJECT_TYPE_CREATURE); + } + } + } + + // Flying Kick feat + if(GetHasFeat(FEAT_FLYING_KICK, oPC) && (GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC) == OBJECT_INVALID)) + nDamage += d12(); + if(GetHasFeat(FEAT_SNOW_TIGER_BERSERKER, oPC) && GetIsLightWeapon(oPC)) + nPounce = TRUE; + if(GetHasFeat(FEAT_CATFOLK_POUNCE, oPC) && GetIsDeniedDexBonusToAC(oTarget, oPC, TRUE)) + nPounce = TRUE; + if(GetItemPossessedBy(oPC, "WOL_Shishio") == GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC) && GetLocalInt(oPC, "Shishio_Pounce")) + nPounce = TRUE; + if(GetLevelByClass(CLASS_TYPE_CELEBRANT_SHARESS, oPC) >= 5) + nPounce = TRUE; + if(GetRacialType(oPC) == RACIAL_TYPE_MARRUSAULT) + nPounce = TRUE; + + // Checks for a White Raven Stance + // If it exists, +1 damage/initiator level + if(GetLocalInt(oPC, "LeadingTheCharge")) + nDamage += GetLocalInt(oPC, "LeadingTheCharge"); + if(nDamageType == -1) // If the damage type isn't set + { + object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + nDamageType = GetWeaponDamageType(oWeap); + } + + float fDelay = FeetToMeters(fDistance)/10; + DelayCommand(fDelay, DoShieldBash(oPC, oTarget, nAttack, nDamage, nDamageType, TRUE, nPounce, nSlam)); + DelayCommand(fDelay, _PostCharge(oPC, oTarget)); + } + else + { + FloatingTextStringOnCreature("You are too close to charge " + GetName(oTarget), oPC); + } +} + +//:: Test void +//:: void main (){} \ No newline at end of file diff --git a/src/include/prc_inc_core.nss b/src/include/prc_inc_core.nss new file mode 100644 index 0000000..30af518 --- /dev/null +++ b/src/include/prc_inc_core.nss @@ -0,0 +1,757 @@ +/* Core functions taken from high up the branch + which are needed lower. */ + +//:: Updated for .35 by Jaysyn 2023/03/10 + +////////////////////////////////////////////////// +/* Function Prototypes */ +////////////////////////////////////////////////// + +//:: Returns true if oCaster's race can naturally cast sorcerer spells. +int GetIsRHDSorcerer(object oCaster = OBJECT_SELF); + +//:: Returns true if oCaster's race can naturally cast bard spells. +int GetIsRHDBard(object oCaster = OBJECT_SELF); + +// wrapper for getspelltargetlocation +location PRCGetSpellTargetLocation(object oCaster = OBJECT_SELF); + +// Avoids adding passive spellcasting to the character's action queue by +// creating an object specifically to cast the spell on the character. +// +// NOTE: The spell script must refer to the PC as PRCGetSpellTargetObject() +// otherwise this function WILL NOT WORK. Do not make any assumptions +// about the PC being OBJECT_SELF. +void ActionCastSpellOnSelf(int iSpell, int nMetaMagic = METAMAGIC_NONE, object oTarget = OBJECT_SELF); + +// This is a wrapper function that causes OBJECT_SELF to fire the defined spell +// at the defined level. The target is automatically the object or location +// that the user selects. Useful for SLA's to perform the casting of a true +// spell. This is useful because: +// +// 1) If the original's spell script is updated, so is this one. +// 2) The spells are identified as the true spell. That is, they ARE the true spell. +// 3) Spellhooks (such as item crafting) that can only identify true spells +// will easily work. +// +// This function should only be used when SLA's are meant to simulate true +// spellcasting abilities, such as those seen when using feats with subradials +// to simulate spellbooks. +void ActionCastSpell(int iSpell, int iCasterLev = 0, int iBaseDC = 0, int iTotalDC = 0, + int nMetaMagic = METAMAGIC_NONE, int nClass = CLASS_TYPE_INVALID, + int bUseOverrideTargetLocation=FALSE, int bUseOverrideTargetObject=FALSE, + object oOverrideTarget=OBJECT_INVALID, int bInstantCast=TRUE, int bUseOverrideMetaMagic=FALSE); + +/** + * Checks whether the given creature is committing an action, or + * under such effects that cause a breach of concentration. + * + * @param oConcentrator The creature to test + * @return TRUE if concentration is broken, FALSE otherwise + */ +int GetBreakConcentrationCheck(object oConcentrator); + +/** + * Checks for breaks in concentration for an ongoing effect, and removes + * the effect if concentration is broken. + * + * @param oCaster The creature who cast the effect + * @param SpellID The id of the spell the effect belongs to + * @param oTarget The creature or object that is the target of the effect + * @param nDuration The duration the effect lasts in seconds. + */ +void CheckConcentrationOnEffect(object oCaster, int SpellID, object oTarget, int nDuration); + +// gets the spell level adjustment to the nMetaMagic, including boni from the Improved Metamagic (epic) feat +int GetMetaMagicSpellLevelAdjustment(int nMetaMagic); + +// Returns true if a spellcaster +int GetIsBioSpellCastClass(int nClass); + +// Returns true for spell casters with spellbooks +int GetIsNSBClass(int nClass); + +// returns the spelllevel of nSpell as it can be cast by oCreature +int PRCGetSpellLevel(object oCreature, int nSpell); + +// returns if a character should be using the newspellbook when casting +int UseNewSpellBook(object oCreature); + +// wrapper for GetHasSpell, works for newspellbook 'fake' spells too +// should return 0 if called with a normal spell when a character should be using the newspellbook +int PRCGetHasSpell(int nRealSpellID, object oCreature = OBJECT_SELF); + +// checks if oPC knows the specified spell +// only works for classes that use the PRC spellbook, there is currently no way to do this for Bioware spellcasters +int PRCGetIsRealSpellKnown(int nRealSpellID, object oPC = OBJECT_SELF); + +// checks if oPC knows the specified spell +// only works for classes that use the PRC spellbook, there is currently no way to do this for Bioware spellcasters +// this will only check the spellbook of the class specified +int PRCGetIsRealSpellKnownByClass(int nRealSpellID, int nClass, object oPC = OBJECT_SELF); + +//routes to action cast spell, but puts a wrapper around to tell other functions its a +//SLA, so dont craft etc +//also defaults the totalDC to 10+spellevel+chamod +// moved from prc_inc_racial +void DoRacialSLA(int nSpellID, int nCasterlevel = 0, int nTotalDC = 0, int bInstantCast = FALSE); + +/** + * Deletes a stored manifestation structure. + * + * @param oObject The object on which the structure is stored + * @param sName The name under which the structure is stored + */ +void DeleteLocalManifestation(object oObject, string sName); + +/** + * Deletes a stored mystery structure. + * + * @param oObject The object on which the structure is stored + * @param sName The name under which the structure is stored + */ +void DeleteLocalMystery(object oObject, string sName); + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +// metamagic spell level adjustments for Bioware provided metamagic feats +const int METAMAGIC_EXTEND_LEVEL = 1; +const int METAMAGIC_SILENT_LEVEL = 1; +const int METAMAGIC_STILL_LEVEL = 1; +const int METAMAGIC_EMPOWER_LEVEL = 2; +const int METAMAGIC_MAXIMIZE_LEVEL = 3; +const int METAMAGIC_QUICKEN_LEVEL = 4; + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "lookup_2da_spell" +#include "inc_lookups" +#include "prc_inc_damage" +#include "prc_inc_sb_const" // Spell Book Constants +#include "x0_i0_position" + +/* + access to prc_inc_nwscript via prc_inc_damage + access to PRCGetSpell* via prc_inc_damage +*/ + + +////////////////////////////////////////////////// +/* Function Definitions */ +////////////////////////////////////////////////// + +//:: Returns true if oCaster's race can naturally cast sorcerer spells. +int GetIsRHDSorcerer(object oCaster = OBJECT_SELF) +{ + int nRace = GetRacialType(oCaster); + + return (nRace == RACIAL_TYPE_ARANEA || + nRace == RACIAL_TYPE_ARKAMOI || + nRace == RACIAL_TYPE_DRIDER || + nRace == RACIAL_TYPE_HOBGOBLIN_WARSOUL || + nRace == RACIAL_TYPE_MARRUTACT || + nRace == RACIAL_TYPE_RAKSHASA || + nRace == RACIAL_TYPE_REDSPAWN_ARCANISS); +} + +//:: Returns true if oCaster's race can naturally cast bard spells. +int GetIsRHDBard(object oCaster = OBJECT_SELF) +{ + int nRace = GetRacialType(oCaster); + + return (nRace == RACIAL_TYPE_GLOURA); +} + +//wrapper for GetSpellTargetLocation() +location PRCGetSpellTargetLocation(object oCaster = OBJECT_SELF) +{ + // check if there is an override location on the module, and return that + // bioware did not define a LOCATION_INVALID const, so we must signal a valid override location by setting a local int on the module + if(GetLocalInt(GetModule(), PRC_SPELL_TARGET_LOCATION_OVERRIDE)) + { + if (DEBUG) DoDebug("PRCGetSpellTargetLocation: found override target location on module"); + return GetLocalLocation(GetModule(), PRC_SPELL_TARGET_LOCATION_OVERRIDE); + } + + + // check if there is an override location on the caster, and return that + // bioware did not define a LOCATION_INVALID const, so we signal a valid override location by setting a local int on oCaster + if (GetLocalInt(oCaster, PRC_SPELL_TARGET_LOCATION_OVERRIDE)) + { + if (DEBUG) DoDebug("PRCGetSpellTargetLocation: found override target location on caster "+GetName(oCaster)); + return GetLocalLocation(oCaster, PRC_SPELL_TARGET_LOCATION_OVERRIDE); + } + + + // The rune/gem/skull always targets the one who activates it. + object oItem = PRCGetSpellCastItem(oCaster); + if(GetIsObjectValid(oItem) && (GetResRef(oItem) == "prc_rune_1" || + GetResRef(oItem) == "prc_skulltalis" || GetTag(oItem) == "prc_attunegem")) + return GetLocation(GetItemPossessor(oItem)); + + if (GetLocalInt(oCaster, "BlackLabyrinth") && d10() < 3) + return GenerateNewLocationFromLocation(GetSpellTargetLocation(), FeetToMeters(5.0*d4()), IntToFloat(Random(360)), IntToFloat(Random(360))); + + // if we made it here, we must use Bioware's function + return GetSpellTargetLocation(); +} + +void ActionCastSpellOnSelf(int iSpell, int nMetaMagic = METAMAGIC_NONE, object oTarget = OBJECT_SELF) +{ + if(!GetIsObjectValid(oTarget)) oTarget = OBJECT_SELF; + object oCastingObject = CreateObject(OBJECT_TYPE_PLACEABLE, "x0_rodwonder", GetLocation(oTarget)); + + AssignCommand(oCastingObject, ActionCastSpellAtObject(iSpell, oTarget, nMetaMagic, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE)); + if (DEBUG) DoDebug("ActionCastSpellOnSelf: Casting Spell "+IntToString(iSpell)+" on "+GetName(oTarget)); + + DestroyObject(oCastingObject, 6.0); +} + +void ActionCastSpell(int iSpell, int iCasterLev = 0, int iBaseDC = 0, int iTotalDC = 0, + int nMetaMagic = METAMAGIC_NONE, int nClass = CLASS_TYPE_INVALID, + int bUseOverrideTargetLocation=FALSE, int bUseOverrideTargetObject=FALSE, + object oOverrideTarget=OBJECT_INVALID, int bInstantCast=TRUE, int bUseOverrideMetaMagic=FALSE) +{ + + //if its a hostile spell, clear the action queue + //this stops people stacking hostile spells to be instacast + //at the end, for example when coming out of invisibility + // X - hope this is not needed if spells are cast normally + //if(Get2DACache("spells", "HostileSetting", iSpell) == "1" && bInstantCast) + // ClearAllActions(); + + object oTarget = PRCGetSpellTargetObject(); + location lLoc = PRCGetSpellTargetLocation(); + + //set the overriding values + if (iCasterLev != 0) + ActionDoCommand(SetLocalInt(OBJECT_SELF, PRC_CASTERLEVEL_OVERRIDE, iCasterLev)); + if (iTotalDC != 0) + ActionDoCommand(SetLocalInt(OBJECT_SELF, PRC_DC_TOTAL_OVERRIDE, iTotalDC)); + if (iBaseDC != 0) + ActionDoCommand(SetLocalInt(OBJECT_SELF, PRC_DC_BASE_OVERRIDE, iBaseDC)); + if (nClass != CLASS_TYPE_INVALID) + ActionDoCommand(SetLocalInt(OBJECT_SELF, PRC_CASTERCLASS_OVERRIDE, nClass)); + if (bUseOverrideMetaMagic) + ActionDoCommand(SetLocalInt(OBJECT_SELF, PRC_METAMAGIC_OVERRIDE, nMetaMagic)); + else if (nMetaMagic != METAMAGIC_NONE) + ActionDoCommand(SetLocalInt(OBJECT_SELF, PRC_METAMAGIC_ADJUSTMENT, nMetaMagic)); + if (bUseOverrideTargetLocation) + { + ActionDoCommand(SetLocalInt(OBJECT_SELF, PRC_SPELL_TARGET_LOCATION_OVERRIDE, TRUE)); + //location must be set outside of this function at the moment + //cant pass a location into a function as an optional parameter + //go bioware for not defining an invalid location constant + } + if (bUseOverrideTargetObject) + { + ActionDoCommand(SetLocalInt(OBJECT_SELF, PRC_SPELL_TARGET_OBJECT_OVERRIDE, TRUE)); + ActionDoCommand(SetLocalObject(OBJECT_SELF, PRC_SPELL_TARGET_OBJECT_OVERRIDE, oOverrideTarget)); + } + ActionDoCommand(SetLocalInt(OBJECT_SELF, "UsingActionCastSpell", TRUE)); + + if(DEBUG) DoDebug("ActionCastSpell SpellId: " + IntToString(iSpell)); + if(DEBUG) DoDebug("ActionCastSpell Caster Level: " + IntToString(iCasterLev)); + if(DEBUG) DoDebug("ActionCastSpell Base DC: " + IntToString(iBaseDC)); + if(DEBUG) DoDebug("ActionCastSpell Total DC: " + IntToString(iTotalDC)); + if(DEBUG) DoDebug("ActionCastSpell Metamagic: " + IntToString(nMetaMagic)); + if(DEBUG) DoDebug("ActionCastSpell Caster Class: " + IntToString(nClass)); + if(DEBUG) DoDebug("ActionCastSpell Target: " + GetName(oTarget)); + if(DEBUG) DoDebug("ActionCastSpell Override Target: " + GetName(oOverrideTarget)); + + //cast the spell + if (GetIsObjectValid(oOverrideTarget)) + ActionCastSpellAtObject(iSpell, oOverrideTarget, nMetaMagic, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, bInstantCast); + else if (GetIsObjectValid(oTarget)) + ActionCastSpellAtObject(iSpell, oTarget, nMetaMagic, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, bInstantCast); + else + ActionCastSpellAtLocation(iSpell, lLoc, nMetaMagic, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, bInstantCast); + + ActionDoCommand(DeleteLocalInt(OBJECT_SELF, "UsingActionCastSpell")); + + //clean up afterwards + if(bInstantCast)//give scripts time to read the variables + { + if (iCasterLev != 0) + ActionDoCommand(DelayCommand(1.0, DeleteLocalInt(OBJECT_SELF, PRC_CASTERLEVEL_OVERRIDE))); + if (iTotalDC != 0) + ActionDoCommand(DelayCommand(1.0, DeleteLocalInt(OBJECT_SELF, PRC_DC_TOTAL_OVERRIDE))); + if (iBaseDC != 0) + ActionDoCommand(DelayCommand(1.0, DeleteLocalInt(OBJECT_SELF, PRC_DC_BASE_OVERRIDE))); + if (nClass != CLASS_TYPE_INVALID) + ActionDoCommand(DelayCommand(1.0, DeleteLocalInt(OBJECT_SELF, PRC_CASTERCLASS_OVERRIDE))); + if (nMetaMagic != METAMAGIC_NONE) + ActionDoCommand(DelayCommand(1.0, DeleteLocalInt(OBJECT_SELF, PRC_METAMAGIC_OVERRIDE))); + if (bUseOverrideTargetLocation) + { + ActionDoCommand(DelayCommand(1.0, DeleteLocalInt(OBJECT_SELF, PRC_SPELL_TARGET_LOCATION_OVERRIDE))); + //location must be set outside of this function at the moment + //cant pass a location into a function as an optional parameter + //go bioware for not defining an invalid location constant + } + if (bUseOverrideTargetObject) + { + ActionDoCommand(DelayCommand(1.0, DeleteLocalInt(OBJECT_SELF, PRC_SPELL_TARGET_OBJECT_OVERRIDE))); + ActionDoCommand(DelayCommand(1.0, DeleteLocalObject(OBJECT_SELF, PRC_SPELL_TARGET_OBJECT_OVERRIDE))); + } + } + else + { + if (iCasterLev != 0) + ActionDoCommand(DeleteLocalInt(OBJECT_SELF, PRC_CASTERLEVEL_OVERRIDE)); + if (iTotalDC != 0) + ActionDoCommand(DeleteLocalInt(OBJECT_SELF, PRC_DC_TOTAL_OVERRIDE)); + if (iBaseDC != 0) + ActionDoCommand(DeleteLocalInt(OBJECT_SELF, PRC_DC_BASE_OVERRIDE)); + if (nClass != CLASS_TYPE_INVALID) + ActionDoCommand(DeleteLocalInt(OBJECT_SELF, PRC_CASTERCLASS_OVERRIDE)); + if (bUseOverrideMetaMagic) + ActionDoCommand(DeleteLocalInt(OBJECT_SELF, PRC_METAMAGIC_OVERRIDE)); + else if (nMetaMagic != METAMAGIC_NONE) + ActionDoCommand(DeleteLocalInt(OBJECT_SELF, PRC_METAMAGIC_ADJUSTMENT)); + if (bUseOverrideTargetLocation) + { + ActionDoCommand(DeleteLocalInt(OBJECT_SELF, PRC_SPELL_TARGET_LOCATION_OVERRIDE)); + //location must be set outside of this function at the moment + //cant pass a location into a function as an optional parameter + //go bioware for not defining an invalid location constant + } + if (bUseOverrideTargetObject) + { + ActionDoCommand(DeleteLocalInt(OBJECT_SELF, PRC_SPELL_TARGET_OBJECT_OVERRIDE)); + ActionDoCommand(DeleteLocalObject(OBJECT_SELF, PRC_SPELL_TARGET_OBJECT_OVERRIDE)); + } + } + + +/* +//The problem with this approace is that the effects are then applies by the original spell, which could go wrong. What to do? + SetLocalInt(OBJECT_SELF, PRC_SPELLID_OVERRIDE, GetSpellId()); + DelayCommand(1.0, DeleteLocalInt(OBJECT_SELF, PRC_SPELLID_OVERRIDE)); + string sScript = Get2DACache("spells", "ImpactScript", iSpell); + ExecuteScript(sScript, OBJECT_SELF); +*/ +} + +int GetBreakConcentrationCheck(object oConcentrator) +{ + if (GetHasSpellEffect(VESTIGE_DAHLVERNAR, oConcentrator) && !GetLocalInt(oConcentrator, "PactQuality"+IntToString(VESTIGE_DAHLVERNAR))) return TRUE; + + int nAction = GetCurrentAction(oConcentrator); + // creature doing anything that requires attention and breaks concentration + if (nAction == ACTION_DISABLETRAP || nAction == ACTION_TAUNT || + nAction == ACTION_PICKPOCKET || nAction == ACTION_ATTACKOBJECT || + nAction == ACTION_COUNTERSPELL || nAction == ACTION_FLAGTRAP || + nAction == ACTION_CASTSPELL || nAction == ACTION_ITEMCASTSPELL) + { + return TRUE; + } + //suffering a mental effect + effect e1 = GetFirstEffect(oConcentrator); + int nType; + while (GetIsEffectValid(e1)) + { + nType = GetEffectType(e1); + if (nType == EFFECT_TYPE_STUNNED || nType == EFFECT_TYPE_PARALYZE || + nType == EFFECT_TYPE_SLEEP || nType == EFFECT_TYPE_FRIGHTENED || + nType == EFFECT_TYPE_PETRIFY || nType == EFFECT_TYPE_CONFUSED || + nType == EFFECT_TYPE_DOMINATED || nType == EFFECT_TYPE_POLYMORPH) + { + return TRUE; + } + e1 = GetNextEffect(oConcentrator); + } + // add to on damage event + AddEventScript(oConcentrator, EVENT_VIRTUAL_ONDAMAGED, "prc_od_conc", FALSE, FALSE); + if(GetLocalInt(oConcentrator, "CONC_BROKEN")) // won't be set first time around regardless + { + DeleteLocalInt(oConcentrator, "CONC_BROKEN"); // reset for next spell + return TRUE; + } + return FALSE; +} + +void CheckConcentrationOnEffect(object oCaster, int SpellID, object oTarget, int nDuration) +{ + int nDur = GetLocalInt(oCaster, "Conc" + IntToString(SpellID)); + if(GetBreakConcentrationCheck(oCaster) == TRUE && nDur < nDuration) + { + FloatingTextStringOnCreature("*Concentration Broken*", oCaster); + DeleteLocalInt(oCaster, "Conc" + IntToString(SpellID)); + PRCRemoveSpellEffects(SpellID, oCaster, oTarget); + } + else if(nDur < nDuration) + { + SetLocalInt(oCaster, "Conc" + IntToString(SpellID), nDur + 3); + DelayCommand(3.0, CheckConcentrationOnEffect(oCaster, SpellID, oTarget, nDuration)); + } + else + { + DeleteLocalInt(oCaster, "Conc" + IntToString(SpellID)); + } +} + +int PRCGetSpellLevelForClass(int nSpell, int nClass) +{ + string sSpellLevel = ""; + if (nClass == CLASS_TYPE_WIZARD || nClass == CLASS_TYPE_SORCERER) + sSpellLevel = Get2DACache("spells", "Wiz_Sorc", nSpell); + else if (nClass == CLASS_TYPE_RANGER) + sSpellLevel = Get2DACache("spells", "Ranger", nSpell); + else if (nClass == CLASS_TYPE_PALADIN) + sSpellLevel = Get2DACache("spells", "Paladin", nSpell); + else if (nClass == CLASS_TYPE_DRUID) + sSpellLevel = Get2DACache("spells", "Druid", nSpell); + else if (nClass == CLASS_TYPE_CLERIC || nClass == CLASS_TYPE_UR_PRIEST || nClass == CLASS_TYPE_OCULAR) + sSpellLevel = Get2DACache("spells", "Cleric", nSpell); + else if (nClass == CLASS_TYPE_BARD) + sSpellLevel = Get2DACache("spells", "Bard", nSpell); + else if (nClass == CLASS_TYPE_CULTIST_SHATTERED_PEAK) + sSpellLevel = Get2DACache("spells", "Cultist", nSpell); + else if (nClass == CLASS_TYPE_NENTYAR_HUNTER) + sSpellLevel = Get2DACache("spells", "Nentyar", nSpell); + else if (nClass == CLASS_TYPE_SHADOWLORD) + sSpellLevel = Get2DACache("spells", "Telflammar", nSpell); + else if (nClass == CLASS_TYPE_SLAYER_OF_DOMIEL) + sSpellLevel = Get2DACache("spells", "Domiel", nSpell); + else if (nClass == CLASS_TYPE_SOHEI) + sSpellLevel = Get2DACache("spells", "Sohei", nSpell); + else if (nClass == CLASS_TYPE_VASSAL) + sSpellLevel = Get2DACache("spells", "Bahamut", nSpell); + else if (nClass == CLASS_TYPE_BLACKGUARD) + sSpellLevel = Get2DACache("spells", "Blackguard", nSpell); + else if (nClass == CLASS_TYPE_KNIGHT_CHALICE) + sSpellLevel = Get2DACache("spells", "Chalice", nSpell); + else if (nClass == CLASS_TYPE_KNIGHT_MIDDLECIRCLE) + sSpellLevel = Get2DACache("spells", "MiddleCircle", nSpell); + else if (nClass == CLASS_TYPE_SOLDIER_OF_LIGHT) + sSpellLevel = Get2DACache("spells", "SoLight", nSpell); + else if (nClass == CLASS_TYPE_BLIGHTER) + sSpellLevel = Get2DACache("spells", "Blighter", nSpell); + else if (nClass == CLASS_TYPE_HEALER) + sSpellLevel = Get2DACache("spells", "Healer", nSpell); + else if (nClass == CLASS_TYPE_SHAMAN) + sSpellLevel = Get2DACache("spells", "Shaman", nSpell); + else if (nClass == CLASS_TYPE_INVALID) + sSpellLevel = Get2DACache("spells", "Innate", nSpell); + + if (sSpellLevel != "") + return StringToInt(sSpellLevel); + + // 2009-9-21: Support real spell ID's. -N-S + // PRCGetSpellLevel() is called several times in the Bioware spellhooking script. + // That means it will always pass a "real" spell ID to this function, but new-spellbook users won't have the real spell! + // GetSpellLevel() takes the fake spell ID, so this function was always failing. + //int nSpellLevel = GetSpellLevel(nSpell, nClass); + int nSpellLevel = -1; + int nSpellbookID = RealSpellToSpellbookID(nClass, nSpell); + if (nSpellbookID == -1) + nSpellLevel = GetSpellLevel(nSpell, nClass); + else + { + string sFile = GetFileForClass(nClass); + string sSpellLevel = Get2DACache(sFile, "Level", nSpellbookID); + if (sSpellLevel != "") + nSpellLevel = StringToInt(sSpellLevel); + } + + return nSpellLevel; +} + +// returns the spelllevel of nSpell as it can be cast by oCreature +int PRCGetSpellLevel(object oCreature, int nSpell) +{ + /*if (!PRCGetHasSpell(nSpell, oCreature)) + return -1;*/ + + int nClass = PRCGetLastSpellCastClass(); + int nSpellLevel = PRCGetSpellLevelForClass(nSpell, nClass); + if (nSpellLevel != -1) + return nSpellLevel; + + int i; + for (i=1;i<=8;i++) + { + nClass = GetClassByPosition(i, oCreature); + int nCharLevel = GetLevelByClass(nClass, oCreature); + if (nCharLevel) + { + nSpellLevel = PRCGetSpellLevelForClass(nSpell, nClass); + if (nSpellLevel != -1) + return nSpellLevel; + } + } + + //return innate level + return StringToInt(Get2DACache("spells", "Innate", nSpell)); +} + +// gets the spell level adjustment to the nMetaMagic, including boni from the Improved Metamagic (epic) feat +int GetMetaMagicSpellLevelAdjustment(int nMetaMagic) +{ + int nAdj; + if (nMetaMagic == 0) return nAdj; + + if (nMetaMagic & METAMAGIC_EXTEND) nAdj += METAMAGIC_EXTEND_LEVEL; + if (nMetaMagic & METAMAGIC_SILENT) nAdj += METAMAGIC_SILENT_LEVEL; + if (nMetaMagic & METAMAGIC_STILL) nAdj += METAMAGIC_STILL_LEVEL; + if (nMetaMagic & METAMAGIC_EMPOWER) nAdj += METAMAGIC_EMPOWER_LEVEL; + if (nMetaMagic & METAMAGIC_MAXIMIZE) nAdj += METAMAGIC_MAXIMIZE_LEVEL; + if (nMetaMagic & METAMAGIC_QUICKEN) nAdj += METAMAGIC_QUICKEN_LEVEL; + + return nAdj; +} + +int GetIsBioSpellCastClass(int nClass) +{ + return nClass == CLASS_TYPE_WIZARD + || nClass == CLASS_TYPE_SORCERER && !GetIsRHDSorcerer() + || nClass == CLASS_TYPE_BARD && !GetIsRHDBard() + || nClass == CLASS_TYPE_CLERIC + || nClass == CLASS_TYPE_HEALER + || nClass == CLASS_TYPE_BLIGHTER + || nClass == CLASS_TYPE_BLACKGUARD + || nClass == CLASS_TYPE_UR_PRIEST + || nClass == CLASS_TYPE_OCULAR + || nClass == CLASS_TYPE_SLAYER_OF_DOMIEL + || nClass == CLASS_TYPE_CULTIST_SHATTERED_PEAK + || nClass == CLASS_TYPE_NENTYAR_HUNTER + || nClass == CLASS_TYPE_SHADOWLORD + || nClass == CLASS_TYPE_SOHEI + || nClass == CLASS_TYPE_SOLDIER_OF_LIGHT + || nClass == CLASS_TYPE_VASSAL + || nClass == CLASS_TYPE_KNIGHT_MIDDLECIRCLE + || nClass == CLASS_TYPE_KNIGHT_CHALICE + || nClass == CLASS_TYPE_SHAMAN + || nClass == CLASS_TYPE_DRUID + || nClass == CLASS_TYPE_PALADIN + || nClass == CLASS_TYPE_RANGER; +} + +int GetIsNSBClass(int nClass) +{ + return !GetIsBioSpellCastClass(nClass) + && GetSpellbookTypeForClass(nClass) != SPELLBOOK_TYPE_INVALID; +} + +// returns if a character should be using the newspellbook when casting +int UseNewSpellBook(object oCreature) +{ + int i; + for (i = 1; i <= 8; i++) + { + int nClass = GetClassByPosition(i, oCreature); + if(GetIsNSBClass(nClass)) + return TRUE; + } + + // Special case + if(GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCreature)) + return TRUE; + + int nPrimaryArcane = GetPrimaryArcaneClass(oCreature); + + //check they have bard/sorc in first arcane slot + if(nPrimaryArcane != CLASS_TYPE_BARD && nPrimaryArcane != CLASS_TYPE_SORCERER) + return FALSE; + //check they have arcane PrC or Draconic Breath/Arcane Grace + if(!GetArcanePRCLevels(oCreature, nPrimaryArcane) + && !(GetHasFeat(FEAT_DRACONIC_GRACE, oCreature) || GetHasFeat(FEAT_DRACONIC_BREATH, oCreature))) + return FALSE; + //check if the newspellbooks are disabled + if((GetPRCSwitch(PRC_SORC_DISALLOW_NEWSPELLBOOK) && nPrimaryArcane == CLASS_TYPE_SORCERER) || + (GetPRCSwitch(PRC_BARD_DISALLOW_NEWSPELLBOOK) && nPrimaryArcane == CLASS_TYPE_BARD)) + return FALSE; + //check they have bard/sorc levels + if(!GetLevelByClass(CLASS_TYPE_BARD) && !GetLevelByClass(CLASS_TYPE_SORCERER)) + return FALSE; + + //at this point, they should be using the new spellbook + return TRUE; +} + +// wrapper for GetHasSpell, works for newspellbook 'fake' spells too (and metamagic) +// should return 0 if called with a normal spell when a character should be using the newspellbook +int PRCGetHasSpell(int nRealSpellID, object oCreature = OBJECT_SELF) +{ + if(!PRCGetIsRealSpellKnown(nRealSpellID, oCreature)) + return 0; + int nUses = GetHasSpell(nRealSpellID, oCreature); + + int nClass, nSpellbookID, nCount, nMeta, i, j; + int nSpellbookType, nSpellLevel; + string sFile, sFeat; + for(i = 1; i <= 8; i++) + { + nClass = GetClassByPosition(i, oCreature); + sFile = GetFileForClass(nClass); + nSpellbookType = GetSpellbookTypeForClass(nClass); + nSpellbookID = RealSpellToSpellbookID(nClass, nRealSpellID); + nMeta = RealSpellToSpellbookIDCount(nClass, nRealSpellID); + if (nSpellbookID != -1) + { //non-spellbook classes should return -1 + for(j = nSpellbookID; j <= nSpellbookID + nMeta; j++) + { + sFeat = Get2DACache(sFile, "ReqFeat", j); + if(sFeat != "") + { + if(!GetHasFeat(StringToInt(sFeat), oCreature)) + continue; + } + if(nSpellbookType == SPELLBOOK_TYPE_PREPARED) + { + nCount = persistant_array_get_int(oCreature, "NewSpellbookMem_" + IntToString(nClass), j); + if(DEBUG) DoDebug("PRCGetHasSpell: NewSpellbookMem_" + IntToString(nClass) + "[" + IntToString(j) + "] = " + IntToString(nCount)); + if(nCount > 0) + { + nUses += nCount; + } + } + else if(nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS) + { + nSpellLevel = StringToInt(Get2DACache(sFile, "Level", j)); + nCount = persistant_array_get_int(oCreature, "NewSpellbookMem_" + IntToString(nClass), nSpellLevel); + if(DEBUG) DoDebug("PRCGetHasSpell: NewSpellbookMem_" + IntToString(nClass) + "[" + IntToString(j) + "] = " + IntToString(nCount)); + if(nCount > 0) + { + nUses += nCount; + } + } + } + } + } + + if(DEBUG) DoDebug("PRCGetHasSpell: RealSpellID = " + IntToString(nRealSpellID) + ", Uses = " + IntToString(nUses)); + return nUses; +} + +// checks if oPC knows the specified spell +// only works for classes that use the PRC spellbook, there is currently no way to do this for Bioware spellcasters +int PRCGetIsRealSpellKnown(int nRealSpellID, object oPC = OBJECT_SELF) +{ + if(GetHasSpell(nRealSpellID, oPC)) //FUGLY HACK: bioware class having uses of the spell + return TRUE; // means they know the spell (close enough) + int nClass; + int nClassSlot = 1; + while(nClassSlot <= 8) + { + nClass = GetClassByPosition(nClassSlot, oPC); + if(GetIsDivineClass(nClass) || GetIsArcaneClass(nClass)) + if(PRCGetIsRealSpellKnownByClass(nRealSpellID, nClass, oPC)) + return TRUE; + nClassSlot++; + } + // got here means no match + return FALSE; +} + +// checks if oPC knows the specified spell +// only works for classes that use the PRC spellbook, there is currently no way to do this for Bioware spellcasters +// this will only check the spellbook of the class specified +int PRCGetIsRealSpellKnownByClass(int nRealSpellID, int nClass, object oPC = OBJECT_SELF) +{ + // check for whether bard and sorc are using the prc spellbooks + if (nClass == CLASS_TYPE_BARD || nClass == CLASS_TYPE_SORCERER) + { + if(!UseNewSpellBook(oPC)) + return FALSE; + } + + // get the cls_spell_***.2da index for the real spell + int nSpellbookSpell = RealSpellToSpellbookID(nClass, nRealSpellID); + // if the spell does not exist in the spellbook, return FALSE + if (nSpellbookSpell == -1) + return FALSE; + // next check if the PC is high enough level to know the spell + string sFile = GetFileForClass(nClass); + int nSpellLevel = -1; + string sSpellLevel = Get2DACache(sFile, "Level", nSpellbookSpell); + if (sSpellLevel != "") + nSpellLevel = StringToInt(sSpellLevel); + if ((GetLevelByClass(nClass) < nSpellLevel) || nSpellLevel == -1) + return FALSE; // not high enough level + // at this stage, prepared casters know the spell and only spontaneous classes need checking + // there are exceptions and these need hardcoding: + + if((GetSpellbookTypeForClass(nClass) == SPELLBOOK_TYPE_PREPARED) && nClass != CLASS_TYPE_ARCHIVIST) + return TRUE; + + // spontaneous casters have all their known spells as hide feats + // get the featID of the spell + int nFeatID = StringToInt(Get2DACache(sFile, "FeatID", nSpellbookSpell)); + if (GetHasFeat(nFeatID, oPC)) + return TRUE; + + return FALSE; +} + +//routes to action cast spell, but puts a wrapper around to tell other functions its a +//SLA, so dont craft etc +//also defaults th totalDC to 10+spellevel+chamod +//this is Base DC, not total DC. SLAs are still spells, so spell focus should still apply. +void DoRacialSLA(int nSpellID, int nCasterlevel = 0, int nTotalDC = 0, int bInstantCast = FALSE) +{ + if(DEBUG) DoDebug("Spell DC passed to DoRacialSLA: " + IntToString(nTotalDC)); + if(nTotalDC == 0) + nTotalDC = 10 + +StringToInt(Get2DACache("spells", "Innate", nSpellID)) + +GetAbilityModifier(ABILITY_CHARISMA); + + ActionDoCommand(SetLocalInt(OBJECT_SELF, "SpellIsSLA", TRUE)); + if(DEBUG) DoDebug("Spell DC entered in ActionCastSpell: " + IntToString(nTotalDC)); + ActionCastSpell(nSpellID, nCasterlevel, 0, nTotalDC, METAMAGIC_NONE, CLASS_TYPE_INVALID, FALSE, FALSE, OBJECT_INVALID, bInstantCast); + //ActionCastSpell(nSpellID, nCasterlevel, 0, nTotalDC); + ActionDoCommand(DeleteLocalInt(OBJECT_SELF, "SpellIsSLA")); +} + +void DeleteLocalManifestation(object oObject, string sName) +{ + DeleteLocalObject(oObject, sName + "_oManifester"); + + DeleteLocalInt(oObject, sName + "_bCanManifest"); + DeleteLocalInt(oObject, sName + "_nPPCost"); + DeleteLocalInt(oObject, sName + "_nPsiFocUsesRemain"); + DeleteLocalInt(oObject, sName + "_nManifesterLevel"); + DeleteLocalInt(oObject, sName + "_nSpellID"); + + DeleteLocalInt(oObject, sName + "_nTimesAugOptUsed_1"); + DeleteLocalInt(oObject, sName + "_nTimesAugOptUsed_2"); + DeleteLocalInt(oObject, sName + "_nTimesAugOptUsed_3"); + DeleteLocalInt(oObject, sName + "_nTimesAugOptUsed_4"); + DeleteLocalInt(oObject, sName + "_nTimesAugOptUsed_5"); + DeleteLocalInt(oObject, sName + "_nTimesGenericAugUsed"); + + DeleteLocalInt(oObject, sName + "_bChain"); + DeleteLocalInt(oObject, sName + "_bEmpower"); + DeleteLocalInt(oObject, sName + "_bExtend"); + DeleteLocalInt(oObject, sName + "_bMaximize"); + DeleteLocalInt(oObject, sName + "_bSplit"); + DeleteLocalInt(oObject, sName + "_bTwin"); + DeleteLocalInt(oObject, sName + "_bWiden"); + DeleteLocalInt(oObject, sName + "_bQuicken"); +} + +void DeleteLocalMystery(object oObject, string sName) +{ + DeleteLocalObject(oObject, sName + "_oShadow"); + + DeleteLocalInt(oObject, sName + "_bCanMyst"); + DeleteLocalInt(oObject, sName + "_nShadowcasterLevel"); + DeleteLocalInt(oObject, sName + "_nMystId"); + DeleteLocalInt(oObject, sName + "_nPen"); + DeleteLocalInt(oObject, sName + "_bIgnoreSR"); + + DeleteLocalInt(oObject, sName + "_bEmpower"); + DeleteLocalInt(oObject, sName + "_bExtend"); + DeleteLocalInt(oObject, sName + "_bMaximize"); + DeleteLocalInt(oObject, sName + "_bQuicken"); + + DeleteLocalInt(oObject, sName + "_nSaveDC"); + DeleteLocalFloat(oObject, sName + "_fDur"); +} + +//::void main (){} \ No newline at end of file diff --git a/src/include/prc_inc_damage.nss b/src/include/prc_inc_damage.nss new file mode 100644 index 0000000..869514c --- /dev/null +++ b/src/include/prc_inc_damage.nss @@ -0,0 +1,397 @@ +//:://///////////////////////////////////////////// +//:: Ability Damage application +//:: prc_inc_damage +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Internal constants */ +////////////////////////////////////////////////// + +const string VIRTUAL_ABILITY_SCORE = "PRC_Virtual_Ability_Score_"; +const string UbHealable_ABILITY_DAMAGE = "PRC_UbHealableAbilityDamage_"; +const string ABILITY_DAMAGE_SPECIALS = "PRC_Ability_Damage_Special_Effects_Flags"; +const string ABILITY_DAMAGE_MONITOR = "PRC_Ability_Monitor"; +const int ABILITY_DAMAGE_EFFECT_PARALYZE = 1; +const int ABILITY_DAMAGE_EFFECT_KNOCKDOWN = 2; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Gets the amount of ubHealable ability damage suffered by the creature to given ability + * + * @param oTarget The creature whose ubHealable ability damage to examine + * @param nAbility One of the ABILITY_* constants + */ +int GetUnHealableAbilityDamage(object oTarget, int nAbility); + +/** + * Removes the specified amount of normally unHealable ability damage from the target + * + * @param oTarget The creature to restore + * @param nAbility Ability to restore, one of the ABILITY_* constants + * @param nAmount Amount to restore the ability by, should be > 0 for the function + * to have any effect + */ +void RecoverUnHealableAbilityDamage(object oTarget, int nAbility, int nAmount); + +/** + * Applies the ability damage to the given target. Handles the virtual loss of + * ability scores below 3 and the effects of reaching 0 and making the damage + * ubHealable by standard means if requested. + * + * + * @param oTarget The creature about to take ability damage + * @param nAbility One of the ABILITY_* constants + * @param nAmount How much to reduce the ability score by + * @param nDurationType One of the DURATION_TYPE_* contants + * @param bHealable Whether the damage is healable by normal means or not. + * Implemented by applying the damage as an iprop on the hide + * + * The following are passed to SPApplyEffectToObject: + * @param fDuration If temporary, the duration. If this is -1.0, the damage + * will be applied so that it wears off at the rate of 1 point + * per ingame day. + * @param bDispellable Is the effect dispellable? If FALSE, the system will delay + * the application of the effect a short moment (10ms) to break + * spellID association. This will make effects from the same + * source stack with themselves. + * @param oSource Object causing the ability damage + */ +void ApplyAbilityDamage(object oTarget, int nAbility, int nAmount, int nDurationType, int bHealable = TRUE, + float fDuration = 0.0f, int bDispellable = FALSE, object oSource = OBJECT_SELF); + +// Similar funcionality to ApplyAbilityDamage() but used only for alcohol effects +// If you add new Alcohol effects or modify ApplyAbilityDamage() function, you +// should update this function as well. +void ApplyAlcoholEffect(object oTarget, int nAmount, float fDuration); + +/** + * Sets the values of ability decrease on target's hide to be the same as the value + * tracked on the target object itself. This is called with delay from ScrubPCSkin() + * in order to synchronise the tracked value of ubHealable damage with that actually + * present on the hide. + * Please call this if you do similar operations on the hide. + * + * @param oTarget The creature whose hide and tracked value to synchronise. + */ +void ReApplyUnhealableAbilityDamage(object oTarget); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +//#include "prc_inc_racial" +#include "prc_effect_inc" +#include "inc_item_props" + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + + +void ApplyAbilityDamage(object oTarget, int nAbility, int nAmount, int nDurationType, int bHealable = TRUE, + float fDuration = 0.0f, int bDispellable = FALSE, object oSource = OBJECT_SELF) +{ + // Immunity check + if(GetIsImmune(oTarget, IMMUNITY_TYPE_ABILITY_DECREASE, oSource)) + return; + + if (GetLocalInt(oTarget, "IncarnumDefenseCE") && nAbility == ABILITY_STRENGTH) + return; + + if (GetIsMeldBound(oTarget, MELD_VITALITY_BELT) == CHAKRA_WAIST && nAbility == ABILITY_CONSTITUTION) + return; + + if (GetHasSpellEffect(VESTIGE_DAHLVERNAR, oTarget) && nAbility == ABILITY_WISDOM && GetLocalInt(oTarget, "ExploitVestige") != VESTIGE_DAHLVERNAR_MAD_SOUL) + return; + + // Strongheart Vest reduces by Essentia amount + 1. If it's bound, reduces ability drain as well + if (GetHasSpellEffect(MELD_STRONGHEART_VEST, oTarget) && bHealable) + { + int nEssentia = GetEssentiaInvested(oTarget, MELD_STRONGHEART_VEST); + nAmount = nAmount - (nEssentia + 1); + // If there's no damage, jump out. + if (0 >= nAmount) return; + } + else if (GetIsMeldBound(oTarget, MELD_STRONGHEART_VEST) == CHAKRA_WAIST && !bHealable) + { + int nEssentia = GetEssentiaInvested(oTarget, MELD_STRONGHEART_VEST); + nAmount = nAmount - (nEssentia + 1); + // If there's no damage, jump out. + if (0 >= nAmount) return; + } + + // Get the value of the stat before anything is done + int nStartingValue = GetAbilityScore(oTarget, nAbility); + + // First, apply the whole damage as an effect + //SendMessageToPC(GetFirstPC(), "Applying " + IntToString(nAmount) + " damage to stat " + IntToString(nAbility)); + if(bHealable) + { + // Is the damage temporary and specified to heal at the PnP rate + if(nDurationType == DURATION_TYPE_TEMPORARY && fDuration == -1.0f) + { + int i; + for(i = 1; i <= nAmount; i++) + DelayCommand(0.01f, ApplyEffectToObject(nDurationType, bDispellable ? TagEffect(EffectAbilityDecrease(nAbility, 1), IntToString(nAbility)+IntToString(1)) : TagEffect(SupernaturalEffect(EffectAbilityDecrease(nAbility, 1)), IntToString(nAbility)+IntToString(1)), oTarget, HoursToSeconds(24) * i)); + } + else if(!bDispellable) + { + DelayCommand(0.01f, ApplyEffectToObject(nDurationType, TagEffect(SupernaturalEffect(EffectAbilityDecrease(nAbility, nAmount)), IntToString(nAbility)+IntToString(nAmount)), oTarget, fDuration)); + } + else + { + ApplyEffectToObject(nDurationType, TagEffect(EffectAbilityDecrease(nAbility, nAmount), IntToString(nAbility)+IntToString(nAmount)), oTarget, fDuration); + } + } + // Non-healable damage + else + { + int nIPType; + int nTotalAmount; + string sVarName = "PRC_UbHealableAbilityDamage_"; + switch(nAbility) + { + case ABILITY_STRENGTH: nIPType = IP_CONST_ABILITY_STR; sVarName += "STR"; break; + case ABILITY_DEXTERITY: nIPType = IP_CONST_ABILITY_DEX; sVarName += "DEX"; break; + case ABILITY_CONSTITUTION: nIPType = IP_CONST_ABILITY_CON; sVarName += "CON"; break; + case ABILITY_INTELLIGENCE: nIPType = IP_CONST_ABILITY_INT; sVarName += "INT"; break; + case ABILITY_WISDOM: nIPType = IP_CONST_ABILITY_WIS; sVarName += "WIS"; break; + case ABILITY_CHARISMA: nIPType = IP_CONST_ABILITY_CHA; sVarName += "CHA"; break; + + default: + WriteTimestampedLogEntry("Unknown nAbility passed to ApplyAbilityDamage: " + IntToString(nAbility)); + return; + } + + // Sum the damage being added with damage that was present previously + nTotalAmount = GetLocalInt(oTarget, sVarName) + nAmount; + + // Apply the damage + SetCompositeBonus(GetPCSkin(oTarget), sVarName, nTotalAmount, ITEM_PROPERTY_DECREASED_ABILITY_SCORE, nIPType); + + // Also store the amount of damage on the PC itself so it can be restored at a later date. + SetLocalInt(oTarget, sVarName, nTotalAmount); + + // Schedule recovering if the damage is temporary + if(nDurationType == DURATION_TYPE_TEMPORARY) + { + // If the damage is specified to heal at the PnP rate, schedule one point to heal per day + if(fDuration == -1.0f) + { + int i; + for(i = 1; i <= nAmount; i++) + DelayCommand(HoursToSeconds(24) * i, RecoverUnHealableAbilityDamage(oTarget, nAbility, 1)); + } + // Schedule everything to heal at once + else + DelayCommand(fDuration, RecoverUnHealableAbilityDamage(oTarget, nAbility, nAmount)); + } + } + + // The system is off by default + if(!GetPRCSwitch(PRC_PNP_ABILITY_DAMAGE_EFFECTS)) + return; + + // If the target is at the minimum supported by NWN, check if they have had their ability score reduced below already + if(nStartingValue == 3) + nStartingValue = GetLocalInt(oTarget, VIRTUAL_ABILITY_SCORE + IntToString(nAbility)) ? + GetLocalInt(oTarget, VIRTUAL_ABILITY_SCORE + IntToString(nAbility)) - 1 : + nStartingValue; + + // See if any of the damage goes into the virtual area of score < 3 + if(nStartingValue - nAmount < 3) + { + int nVirtual = nStartingValue - nAmount; + if(nVirtual < 0) nVirtual = 0; + + // Mark the virtual value + SetLocalInt(oTarget, VIRTUAL_ABILITY_SCORE + IntToString(nAbility), nVirtual + 1); + + // Cause effects for being at 0 + if(nVirtual == 0) + { + // Apply the effects + switch(nAbility) + { + // Lying down + case ABILITY_STRENGTH: + case ABILITY_INTELLIGENCE: + case ABILITY_WISDOM: + case ABILITY_CHARISMA: + // Do not apply duplicate effects + /*if(!(GetLocalInt(oTarget, ABILITY_DAMAGE_SPECIALS) & ABILITY_DAMAGE_EFFECT_PARALYZE)) + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectCutsceneParalyze(), oTarget);*/ + if(!(GetLocalInt(oTarget, ABILITY_DAMAGE_SPECIALS) & ABILITY_DAMAGE_EFFECT_KNOCKDOWN)) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectKnockdown(), oTarget, 9999.0f); + SetLocalInt(oTarget, ABILITY_DAMAGE_SPECIALS, GetLocalInt(oTarget, ABILITY_DAMAGE_SPECIALS) | ABILITY_DAMAGE_EFFECT_KNOCKDOWN); + } + //break; + + // Paralysis + case ABILITY_DEXTERITY: + // Do not apply duplicate effects + if(!(GetLocalInt(oTarget, ABILITY_DAMAGE_SPECIALS) & ABILITY_DAMAGE_EFFECT_PARALYZE)) + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectCutsceneParalyze(), oTarget); + SetLocalInt(oTarget, ABILITY_DAMAGE_SPECIALS, GetLocalInt(oTarget, ABILITY_DAMAGE_SPECIALS) | ABILITY_DAMAGE_EFFECT_PARALYZE); + } + break; + + // Death + case ABILITY_CONSTITUTION: + // Non-constitution score critters avoid this one + if(!(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD || + MyPRCGetRacialType(oTarget) == RACIAL_TYPE_CONSTRUCT + ) ) + { + DeathlessFrenzyCheck(oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDeath()), oTarget); + + } + break; + + default: + WriteTimestampedLogEntry("Unknown nAbility passed to ApplyAbilityDamage: " + IntToString(nAbility)); + return; + } + + // Start the monitor HB if it is not active yet + if(GetThreadState(ABILITY_DAMAGE_MONITOR, oTarget) == THREAD_STATE_DEAD) + SpawnNewThread(ABILITY_DAMAGE_MONITOR, "prc_abil_monitor", 1.0f, oTarget); + + // Note the ability score for monitoring + SetLocalInt(oTarget, ABILITY_DAMAGE_MONITOR, GetLocalInt(oTarget, ABILITY_DAMAGE_MONITOR) | (1 << nAbility)); + } + } +} + +void ApplyAlcoholEffect(object oTarget, int nAmount, float fDuration) +{ + // Immunity check + if(GetIsImmune(oTarget, IMMUNITY_TYPE_ABILITY_DECREASE)) + return; + + // Get the value of the stat before anything is done + int nStartingValue = GetAbilityScore(oTarget, ABILITY_INTELLIGENCE); + + // First, apply the whole damage as an effect + DelayCommand(0.01f, AssignCommand(GetPCSkin(oTarget), ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectAbilityDecrease(ABILITY_INTELLIGENCE, nAmount)), oTarget, fDuration))); + + // The system is off by default + if(!GetPRCSwitch(PRC_PNP_ABILITY_DAMAGE_EFFECTS)) + return; + + // If the target is at the minimum supported by NWN, check if they have had their ability score reduced below already + if(nStartingValue == 3) + nStartingValue = GetLocalInt(oTarget, VIRTUAL_ABILITY_SCORE + IntToString(ABILITY_INTELLIGENCE)) ? + GetLocalInt(oTarget, VIRTUAL_ABILITY_SCORE + IntToString(ABILITY_INTELLIGENCE)) - 1 : + nStartingValue; + + // See if any of the damage goes into the virtual area of score < 3 + if(nStartingValue - nAmount < 3) + { + int nVirtual = nStartingValue - nAmount; + if(nVirtual < 0) nVirtual = 0; + + // Mark the virtual value + SetLocalInt(oTarget, VIRTUAL_ABILITY_SCORE + IntToString(ABILITY_INTELLIGENCE), nVirtual + 1); + + // Cause effects for being at 0 + if(!nVirtual) + { + // Do not apply duplicate effects + /*if(!(GetLocalInt(oTarget, ABILITY_DAMAGE_SPECIALS) & ABILITY_DAMAGE_EFFECT_PARALYZE)) + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectCutsceneParalyze(), oTarget);*/ + if(!(GetLocalInt(oTarget, ABILITY_DAMAGE_SPECIALS) & ABILITY_DAMAGE_EFFECT_KNOCKDOWN)) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectKnockdown(), oTarget, 9999.0f); + SetLocalInt(oTarget, ABILITY_DAMAGE_SPECIALS, GetLocalInt(oTarget, ABILITY_DAMAGE_SPECIALS) | ABILITY_DAMAGE_EFFECT_KNOCKDOWN); + } + + // Start the monitor HB if it is not active yet + if(GetThreadState(ABILITY_DAMAGE_MONITOR, oTarget) == THREAD_STATE_DEAD) + SpawnNewThread(ABILITY_DAMAGE_MONITOR, "prc_abil_monitor", 1.0f, oTarget); + + // Note the ability score for monitoring + SetLocalInt(oTarget, ABILITY_DAMAGE_MONITOR, GetLocalInt(oTarget, ABILITY_DAMAGE_MONITOR) | (1 << ABILITY_INTELLIGENCE)); + } + } +} + +void ReApplyUnhealableAbilityDamage(object oTarget) +{ + object oSkin = GetPCSkin(oTarget); + SetCompositeBonus(oSkin, "PRC_UbHealableAbilityDamage_STR", + GetLocalInt(oTarget, "PRC_UbHealableAbilityDamage_STR"), + ITEM_PROPERTY_DECREASED_ABILITY_SCORE, IP_CONST_ABILITY_STR); + SetCompositeBonus(oSkin, "PRC_UbHealableAbilityDamage_DEX", + GetLocalInt(oTarget, "PRC_UbHealableAbilityDamage_DEX"), + ITEM_PROPERTY_DECREASED_ABILITY_SCORE, IP_CONST_ABILITY_DEX); + SetCompositeBonus(oSkin, "PRC_UbHealableAbilityDamage_CON", + GetLocalInt(oTarget, "PRC_UbHealableAbilityDamage_CON"), + ITEM_PROPERTY_DECREASED_ABILITY_SCORE, IP_CONST_ABILITY_CON); + SetCompositeBonus(oSkin, "PRC_UbHealableAbilityDamage_INT", + GetLocalInt(oTarget, "PRC_UbHealableAbilityDamage_INT"), + ITEM_PROPERTY_DECREASED_ABILITY_SCORE, IP_CONST_ABILITY_INT); + SetCompositeBonus(oSkin, "PRC_UbHealableAbilityDamage_WIS", + GetLocalInt(oTarget, "PRC_UbHealableAbilityDamage_WIS"), + ITEM_PROPERTY_DECREASED_ABILITY_SCORE, IP_CONST_ABILITY_WIS); + SetCompositeBonus(oSkin, "PRC_UbHealableAbilityDamage_CHA", + GetLocalInt(oTarget, "PRC_UbHealableAbilityDamage_CHA"), + ITEM_PROPERTY_DECREASED_ABILITY_SCORE, IP_CONST_ABILITY_CHA); +} + +int GetUnHealableAbilityDamage(object oTarget, int nAbility) +{ + int nIPType; + string sVarName = "PRC_UbHealableAbilityDamage_"; + switch(nAbility) + { + case ABILITY_STRENGTH: sVarName += "STR"; break; + case ABILITY_DEXTERITY: sVarName += "DEX"; break; + case ABILITY_CONSTITUTION: sVarName += "CON"; break; + case ABILITY_INTELLIGENCE: sVarName += "INT"; break; + case ABILITY_WISDOM: sVarName += "WIS"; break; + case ABILITY_CHARISMA: sVarName += "CHA"; break; + + default: + WriteTimestampedLogEntry("Unknown nAbility passed to GetUnHealableAbilityDamage: " + IntToString(nAbility)); + return FALSE; + } + + return GetLocalInt(oTarget, sVarName); +} + + +void RecoverUnHealableAbilityDamage(object oTarget, int nAbility, int nAmount) +{ + // Sanity check, one should not be able to cause more damage via this function, ApplyAbilityDamage() is for that. + if(nAmount < 0) return; + + int nIPType, nNewVal; + string sVarName = "PRC_UbHealableAbilityDamage_"; + switch(nAbility) + { + case ABILITY_STRENGTH: nIPType = IP_CONST_ABILITY_STR; sVarName += "STR"; break; + case ABILITY_DEXTERITY: nIPType = IP_CONST_ABILITY_DEX; sVarName += "DEX"; break; + case ABILITY_CONSTITUTION: nIPType = IP_CONST_ABILITY_CON; sVarName += "CON"; break; + case ABILITY_INTELLIGENCE: nIPType = IP_CONST_ABILITY_INT; sVarName += "INT"; break; + case ABILITY_WISDOM: nIPType = IP_CONST_ABILITY_WIS; sVarName += "WIS"; break; + case ABILITY_CHARISMA: nIPType = IP_CONST_ABILITY_CHA; sVarName += "CHA"; break; + + default: + WriteTimestampedLogEntry("Unknown nAbility passed to ApplyAbilityDamage: " + IntToString(nAbility)); + return; + } + + nNewVal = GetLocalInt(oTarget, sVarName) - nAmount; + if(nNewVal < 0) nNewVal = 0; + + SetCompositeBonus(GetPCSkin(oTarget), sVarName, nNewVal, ITEM_PROPERTY_DECREASED_ABILITY_SCORE, nIPType); + SetLocalInt(oTarget, sVarName, nNewVal); +} diff --git a/src/include/prc_inc_descrptr.nss b/src/include/prc_inc_descrptr.nss new file mode 100644 index 0000000..bbee255 --- /dev/null +++ b/src/include/prc_inc_descrptr.nss @@ -0,0 +1,260 @@ +//:://///////////////////////////////////////////// +//:: Magic descriptors and subschools include +//:: prc_inc_descrptr +//:://///////////////////////////////////////////// +/** @file prc_inc_descrptr + A set of constants and functions for managing + spell's / power's / other stuffs's descriptors + and sub{school|discipline|whatever}s. + + The functions SetDescriptor() and SetSubschool() + should be called at the beginning of the + spellscript, before spellhook or equivalent. + + The values are stored on the module object and + are automatically cleaned up after script + execution terminates (ie, DelayCommand(0.0f)). + This is a potential gotcha, as the descriptor + and subschool data will no longer be available + during the spell's delayed operations. An + ugly workaround would be to set the descriptor + values again in such cases. + If you come up with an elegant solution, please + try to generalise it and change this as needed. + + + @author Ornedan + @date Created - 2006.06.30 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +// The descriptor and subschool constants are bit flags for easy combination and lookup +const int DESCRIPTOR_ACID = 0x00001; +const int DESCRIPTOR_AIR = 0x00002; +const int DESCRIPTOR_CHAOTIC = 0x00004; +const int DESCRIPTOR_COLD = 0x00008; +const int DESCRIPTOR_DARKNESS = 0x00010; +const int DESCRIPTOR_DEATH = 0x00020; +const int DESCRIPTOR_EARTH = 0x00040; +const int DESCRIPTOR_ELECTRICITY = 0x00080; +const int DESCRIPTOR_EVIL = 0x00100; +const int DESCRIPTOR_FEAR = 0x00200; +const int DESCRIPTOR_FIRE = 0x00400; +const int DESCRIPTOR_FORCE = 0x00800; +const int DESCRIPTOR_GOOD = 0x01000; +const int DESCRIPTOR_LANGUAGEDEPENDENT = 0x02000; +const int DESCRIPTOR_LAWFUL = 0x04000; +const int DESCRIPTOR_LIGHT = 0x08000; +const int DESCRIPTOR_MINDAFFECTING = 0x10000; +const int DESCRIPTOR_SONIC = 0x20000; +const int DESCRIPTOR_WATER = 0x40000; +// update if any of elemental descriptors change! +// int DESCRIPTOR_ELEMENTAL = DESCRIPTOR_ACID | DESCRIPTOR_COLD | DESCRIPTOR_ELECTRICITY | DESCRIPTOR_FIRE | DESCRIPTOR_SONIC; +const int DESCRIPTOR_ELEMENTAL = 0x20489; + +const int SUBSCHOOL_CALLING = 0x00001; +const int SUBSCHOOL_CHARM = 0x00002; +const int SUBSCHOOL_COMPULSION = 0x00004; +const int SUBSCHOOL_CREATION = 0x00008; +const int SUBSCHOOL_FIGMENT = 0x00010; +const int SUBSCHOOL_GLAMER = 0x00020; +const int SUBSCHOOL_HEALING = 0x00040; +const int SUBSCHOOL_PATTERN = 0x00080; +const int SUBSCHOOL_PHANTASM = 0x00100; +const int SUBSCHOOL_POLYMORPH = 0x00200; +const int SUBSCHOOL_SCRYING = 0x00400; +const int SUBSCHOOL_SHADOW = 0x00800; +const int SUBSCHOOL_SUMMONING = 0x01000; +const int SUBSCHOOL_TELEPORTATION = 0x02000; + +const string PRC_DESCRIPTOR = "PRC_Descriptor"; +const string PRC_SUBSCHOOL = "PRC_Subschool"; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Sets the descriptor of currently being cast spell / power / whatever + * to be the given value. This should be called before spellhook / powerhook + * / whateverhook. + * + * If the magic in question has multiple descriptors, they should be OR'd together. + * For example, Phantasmal Killer would call the function thus: + * SetDescriptor(DESCRIPTOR_FEAR | DESCRIPTOR_MINDAFFECTING); + * + * This will override values set in prc_spells.2da + * + * @param nfDescriptorFlags The descriptors of a spell / power / X being currently used + */ +void SetDescriptor(int nfDescriptorFlags, object oPC = OBJECT_SELF); + +/** + * Sets the subschool / subdiscipline / subwhatever of currently being cast + * spell / power / whatever to be the given value. This should be called before + * spellhook / powerhook / whateverhook. + * + * If the magic in question has multiple subschools, they should be OR'd together. + * For example, Mislead would call the function thus: + * SetDescriptor(SUBSCHOOL_FIGMENT | SUBSCHOOL_GLAMER); + * + * This will override values set in prc_spells.2da + * + * @param nfSubschoolFlags The subschools of a spell / power / X being currently used + */ +void SetSubschool(int nfSubschoolFlags, object oPC = OBJECT_SELF); + +/** + * Tests whether a magic being currently used has the given descriptor. + * + * NOTE: Multiple descriptors may be tested for at once. If so, the return value + * will be true only if all the descriptors tested for are present. Doing so is + * technically a misuse of this function. + * + * + * @param nSpellID row number of tested spell in spells.2da + * @param nDescriptorFlag The descriptor to test for + * @return TRUE if the magic being used has the given descriptor(s), FALSE otherwise + */ +int GetHasDescriptor(int nSpellID, int nDescriptorFlag); + +/** + * Returns TRUE if given spell has one of the elemental descriptors + * (acid, cold, electricity, fire or sonic) + * + * @param nSpellID row number of tested spell in spells.2da + * @return ID of elemental descriptor or FALSE + */ +int GetIsElementalSpell(int nSpellID, int nDescriptor = -1); + +/** + * Tests whether a magic being currently used is of the given subschool. + * + * NOTE: Multiple subschools may be tested for at once. If so, the return value + * will be true only if all the subschools tested for are present. Doing so is + * technically a misuse of this function. + * + * + * @param nSpellID row number of tested spell in spells.2da + * @param nDescriptorFlag The subschool to test for + * @return TRUE if the magic being used is of the given subschool(s), FALSE otherwise + */ +int GetIsOfSubschool(int nSpellID, int nSubschoolFlag); + +/** + * Returns an integer value containing the bitflags of descriptors set in prc_spells.2da + * for a given SpellID + * + * @param nSpellID row number of tested spell in spells.2da + * @return The converted raw integer value from prc_spells.2da + */ +int GetDescriptorFlags(int nSpellID); + +/** + * Returns an integer value containing the bitflags of subschools set in prc_spells.2da + * for a given SpellID + * + * @param nSpellID row number of tested spell in spells.2da + * @return The converted raw integer value from prc_spells.2da + */ +int GetSubschoolFlags(int nSpellID); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "inc_2dacache" // already has access via inc_utility +//#include "inc_utility" + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +void SetDescriptor(int nfDescriptorFlags, object oPC = OBJECT_SELF) +{ + // Store the value + SetLocalInt(oPC, PRC_DESCRIPTOR, nfDescriptorFlags); + + // Queue cleanup. No duplicacy checks, this function is not particularly likely to be called more than once anyway + DelayCommand(0.0f, DeleteLocalInt(oPC, PRC_DESCRIPTOR)); +} + +void SetSubschool(int nfSubschoolFlags, object oPC = OBJECT_SELF) +{ + // Store the value + SetLocalInt(oPC, PRC_SUBSCHOOL, nfSubschoolFlags); + + // Queue cleanup. No duplicacy checks, this function is not particularly likely to be called more than once anyway + DelayCommand(0.0f, DeleteLocalInt(oPC, PRC_SUBSCHOOL)); +} + +int GetHasDescriptor(int nSpellID, int nDescriptorFlag) +{ + //check for descriptor override + int nDescriptor = GetLocalInt(OBJECT_SELF, PRC_DESCRIPTOR); + if(!nDescriptor) + nDescriptor = GetDescriptorFlags(nSpellID); + + if(nDescriptorFlag & DESCRIPTOR_ELEMENTAL) + { + return nDescriptorFlag & GetIsElementalSpell(nSpellID, nDescriptor); + } + + return nDescriptor & nDescriptorFlag; +} + +int GetIsElementalSpell(int nSpellID, int nDescriptor = -1) +{ + if(nDescriptor == -1) + { + //check for descriptor override + nDescriptor = GetLocalInt(OBJECT_SELF, PRC_DESCRIPTOR); + if(!nDescriptor) + nDescriptor = GetDescriptorFlags(nSpellID); + } + + int nMastery = GetLocalInt(OBJECT_SELF, "archmage_mastery_elements"); + + //mastery of elements is active + if(nMastery) + { + switch(nMastery) + { + case DAMAGE_TYPE_ACID: return DESCRIPTOR_ACID; + case DAMAGE_TYPE_COLD: return DESCRIPTOR_COLD; + case DAMAGE_TYPE_ELECTRICAL: return DESCRIPTOR_ELECTRICITY; + case DAMAGE_TYPE_FIRE: return DESCRIPTOR_FIRE; + case DAMAGE_TYPE_SONIC: return DESCRIPTOR_SONIC; + } + } + + return nDescriptor & DESCRIPTOR_ELEMENTAL; +} + +int GetIsOfSubschool(int nSpellID, int nSubschoolFlag) +{ + //check for subschool override + int nSubschool = GetLocalInt(OBJECT_SELF, PRC_SUBSCHOOL); + if(!nSubschool) + nSubschool = GetSubschoolFlags(nSpellID); + return (nSubschool & nSubschoolFlag); +} + +int GetDescriptorFlags(int nSpellID) +{ + return HexToInt(Get2DACache("prc_spells", "Descriptor", nSpellID)); +} + +int GetSubschoolFlags(int nSpellID) +{ + return HexToInt(Get2DACache("prc_spells", "Subschool", nSpellID)); +} + +// Test main +//void main(){} diff --git a/src/include/prc_inc_domain.nss b/src/include/prc_inc_domain.nss new file mode 100644 index 0000000..6b2f1ce --- /dev/null +++ b/src/include/prc_inc_domain.nss @@ -0,0 +1,586 @@ +//:://///////////////////////////////////////////// +//:: PRC Bonus Domains +//:: prc_inc_domain.nss +//::////////////////////////////////////////////// +//:: Handles all of the code for bonus domains. +//::////////////////////////////////////////////// +//:: Created By: Stratovarius. +//:: Created On: August 31st, 2005 +//::////////////////////////////////////////////// + +//:: Updated for .35 by Jaysyn 2023/03/10 + + +// Function returns the domain in the input slot. +// A person can have a maximum of 5 bonus domains. +int GetBonusDomain(object oPC, int nSlot); + +// Function will add a bonus domain to the stored list on the character. +void AddBonusDomain(object oPC, int nDomain); + +// Uses the slot and level to find the appropriate spell, then casts it using ActionCastSpell +// It will also decrement a spell from that level +// If the domain does not have an appropriate spell for that level, an error message appears and nothing happens +void CastDomainSpell(object oPC, int nSlot, int nLevel); + +// Takes the domain and spell level and uses it to find the appropriate spell. +// Right now it uses 2da reads on the domains.2da, although it could be scripted if desired. +int GetDomainSpell(int nDomain, int nLevel, object oPC); + +// Takes the spell level, and returns the radial feat for that level. +// Used in case there is no spell of the appropriate level. +int SpellLevelToFeat(int nLevel); + +// Will return the domain name as a string +// This is used to tell a PC what domains he has in what slot +string GetDomainName(int nDomain); + +// This is the starter function, and fires from Enter and Levelup +// It checks all of the bonus domain feats, and gives the PC the correct domains +void CheckBonusDomains(object oPC); + +// Returns the spell to be burned for CastDomainSpell +int GetBurnableSpell(object oPC, int nLevel); + +// Returns the Domain Power feat +int GetDomainFeat(int nDomain); + +// Returns the Uses per day of the feat entered +int GetDomainFeatUsesPerDay(int nFeat, object oPC); + +// This counts down the number of times a domain has been used in a day +// Returns TRUE if the domain use is valid +// Returns FALSE if the player is out of uses per day +int DecrementDomainUses(int nDomain, object oPC); + +// Used to determine which domain has cast the Turn Undead spell +// Returns the domain constant +int GetTurningDomain(int nSpell); + +// Checks to see if the player has a domain. +// Looks for the domain power constants since every domain has those +int GetHasDomain(object oPC, int nDomain); + +// Cleans the ints that limit the domain spells to being cast 1/day +void BonusDomainRest(object oPC); + +//#include "prc_inc_clsfunc" +#include "prc_alterations" +#include "prc_getbest_inc" +#include "inc_dynconv" + +int GetBonusDomain(object oPC, int nSlot) +{ + /*string sName = "PRCBonusDomain" + IntToString(nSlot); + // Return value in case there is nothing in the slot + int nDomain = 0; + nDomain = GetPersistantLocalInt(oPC, sName);*/ + + return GetPersistantLocalInt(oPC, "PRCBonusDomain" + IntToString(nSlot)); +} + +void AddBonusDomain(object oPC, int nDomain) +{ + //if(DEBUG) DoDebug("AddBonusDomain is running."); + + // Loop through the domain slots to see if there is an open one. + int nSlot = 1; + int nTest = GetBonusDomain(oPC, nSlot); + while(nTest > 0 && 5 >= nSlot) + { + nSlot += 1; + // If the test domain and the domain to be added are the same + // shut down the function, since you don't want to add a domain twice. + if(nTest == nDomain) + { + //FloatingTextStringOnCreature("You already have this domain as a bonus domain.", oPC, FALSE); + return; + } + nTest = GetBonusDomain(oPC, nSlot); + } + // If you run out of slots, display message and end function + if (nSlot > 5) + { + FloatingTextStringOnCreature("You have more than 5 bonus domains, your last domain is lost.", oPC, FALSE); + return; + } + + // If we're here, we know we have an open slot, so we add the domain into it. + string sName = "PRCBonusDomain" + IntToString(nSlot); + SetPersistantLocalInt(oPC, sName, nDomain); + FloatingTextStringOnCreature("You have " + GetStringByStrRef(StringToInt(Get2DACache("prc_domains", "Name", nDomain - 1))) + " as a bonus domain", oPC, FALSE); +} + +int TestSpellTarget(object oPC, object oTarget, int nSpell) +{ + int nTargetType = ~(HexToInt(Get2DACache("spells", "TargetType", nSpell))); + + if(oTarget == oPC && nTargetType & 1) + { + SendMessageToPC(oPC, "You cannot target yourself!"); + return FALSE; + } + else if(GetIsObjectValid(oTarget)) + { + int nObjectType = GetObjectType(oTarget); + if(nObjectType == OBJECT_TYPE_CREATURE && nTargetType & 2) + { + SendMessageToPC(oPC, "You cannot target creatures"); + return FALSE; + } + else if(nObjectType == OBJECT_TYPE_ITEM && nTargetType & 8) + { + SendMessageToPC(oPC, "You cannot target items"); + return FALSE; + } + else if(nObjectType == OBJECT_TYPE_DOOR && nTargetType & 16) + { + SendMessageToPC(oPC, "You cannot target doors"); + return FALSE; + } + else if(nObjectType == OBJECT_TYPE_PLACEABLE && nTargetType & 32) + { + SendMessageToPC(oPC, "You cannot target placeables"); + return FALSE; + } + } + else if(nTargetType & 4) + { + SendMessageToPC(oPC, "You cannot target locations"); + return FALSE; + } + return TRUE; +} + +// Classes using new spellbook systems are handeled separately +int GetIsBioDivineClass(int nClass) +{ + return nClass == CLASS_TYPE_CLERIC + || nClass == CLASS_TYPE_DRUID + || nClass == CLASS_TYPE_PALADIN + || nClass == CLASS_TYPE_SHAMAN + || nClass == CLASS_TYPE_UR_PRIEST + || nClass == CLASS_TYPE_RANGER; +} + +void CastDomainSpell(object oPC, int nSlot, int nLevel) +{ + if(GetLocalInt(oPC, "DomainCastSpell" + IntToString(nLevel))) //Already cast a spell of this level? + { + FloatingTextStringOnCreature("You have already cast your domain spell for level " + IntToString(nLevel), oPC, FALSE); + return; + } + + int nSpell = GetDomainSpell(GetBonusDomain(oPC, nSlot), nLevel, oPC); + // If there is no spell for that level, you cant cast it. + if(nSpell == -1) + return; + + // Subradial spells are handled through conversation + int bSubRadial = Get2DACache("spells", "SubRadSpell1", nSpell) != ""; + + // Domain casting feats use generic targeting, so check if spell can be cast at selected target + object oTarget = GetSpellTargetObject(); + if(!bSubRadial && !TestSpellTarget(oPC, oTarget, nSpell)) + return; + + int nClass, nCount, nMetamagic = METAMAGIC_NONE; + + // Mystic is a special case - checked first + if(GetLevelByClass(CLASS_TYPE_MYSTIC, oPC) || GetLevelByClass(CLASS_TYPE_NIGHTSTALKER, oPC)) + { + // Mystics can use metamagic with domain spells + nClass = GetLevelByClass(CLASS_TYPE_MYSTIC, oPC) ? CLASS_TYPE_MYSTIC : CLASS_TYPE_NIGHTSTALKER; + nMetamagic = GetLocalInt(oPC, "MetamagicFeatAdjust"); + int nSpellLevel = nLevel; + if(nMetamagic) + { + //Need to check if metamagic can be applied to a spell + int nMetaTest; + int nMetaType = HexToInt(Get2DACache("spells", "MetaMagic", nSpell)); + + switch(nMetamagic) + { + case METAMAGIC_NONE: nMetaTest = 1; break; //no need to change anything + case METAMAGIC_EMPOWER: nMetaTest = nMetaType & 1; nSpellLevel += 2; break; + case METAMAGIC_EXTEND: nMetaTest = nMetaType & 2; nSpellLevel += 1; break; + case METAMAGIC_MAXIMIZE: nMetaTest = nMetaType & 4; nSpellLevel += 3; break; + case METAMAGIC_QUICKEN: nMetaTest = nMetaType & 8; nSpellLevel += 4; break; + case METAMAGIC_SILENT: nMetaTest = nMetaType & 16; nSpellLevel += 1; break; + case METAMAGIC_STILL: nMetaTest = nMetaType & 32; nSpellLevel += 1; break; + } + if(!nMetaTest)//can't use selected metamagic with this spell + { + nMetamagic = METAMAGIC_NONE; + ActionDoCommand(SendMessageToPC(oPC, "You can't use "+GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpell)))+"with selected metamagic.")); + nSpellLevel = nLevel; + } + else if(nLevel > 9)//now test the spell level + { + nMetamagic = METAMAGIC_NONE; + ActionDoCommand(SendMessageToPC(oPC, "Modified spell level is to high! Casting spell without metamagic")); + nSpellLevel = nLevel; + } + else if(GetLocalInt(oPC, "PRC_metamagic_state") == 1) + SetLocalInt(oPC, "MetamagicFeatAdjust", 0); + } + + nCount = persistant_array_get_int(oPC, "NewSpellbookMem_" + IntToString(CLASS_TYPE_MYSTIC), nSpellLevel); + // we can't cast metamagiced version of the spell - assuming that player want to cast the spell anyway + if(!nCount) + nCount = persistant_array_get_int(oPC, "NewSpellbookMem_" + IntToString(CLASS_TYPE_MYSTIC), nLevel); + // Do we have slots available? + if(nCount) + { + // Prepare to cast the spell + nLevel = nSpellLevel;//correct the spell level if we're using metamagic + SetLocalInt(oPC, "NSB_Class", nClass); + SetLocalInt(oPC, "NSB_SpellLevel", nLevel); + } + } + + // checking 'newspellbook' classes is much faster than checking bioware spellbooks + if(!nCount) + { + int n; + for(n = 1; n < 9; n++) + { + nClass = GetClassByPosition(n, oPC); + + // Check to see if you can burn a spell of that slot or if the person has already + // cast all of their level X spells for the day + if(!GetIsBioDivineClass(nClass)) + { + int nSpellbook = GetSpellbookTypeForClass(nClass); + if(nSpellbook == SPELLBOOK_TYPE_SPONTANEOUS) + { + nCount = persistant_array_get_int(oPC, "NewSpellbookMem_" + IntToString(nClass), nLevel); + if(nCount) + {// Prepare to cast the spell + SetLocalInt(oPC, "NSB_Class", nClass); + SetLocalInt(oPC, "NSB_SpellLevel", nLevel); + } + } + else if(nSpellbook == SPELLBOOK_TYPE_PREPARED) + { + string sArray = "NewSpellbookMem_"+IntToString(nClass); + string sIDX = "SpellbookIDX" + IntToString(nLevel) + "_" + IntToString(nClass); + int i, nSpellbookID, nMax = persistant_array_get_size(oPC, sIDX); + for(i = 0; i < nMax; i++) + { + nSpellbookID = persistant_array_get_int(oPC, sIDX, i); + nCount = persistant_array_get_int(oPC, sArray, nSpellbookID); + if(nCount) + { + SetLocalInt(oPC, "NSB_Class", nClass); + SetLocalInt(oPC, "NSB_SpellbookID", nSpellbookID); + break; + } + } + } + } + if(nCount) + //we have found valid spell slot, no point in running this loop again + break; + } + } + + // test bioware spellbooks + if(!nCount) + { + nCount = GetBurnableSpell(oPC, nLevel) + 1;//fix for Acid Fog spell + if(nCount) + { + SetLocalInt(oPC, "Domain_BurnableSpell", nCount); + nClass = GetPrimaryDivineClass(oPC); + } + } + + //No spell left to burn? Tell the player that. + if(!nCount) + { + FloatingTextStringOnCreature("You have no spells left to trade for a domain spell.", oPC, FALSE); + return; + } + + SetLocalInt(oPC, "DomainCast", nLevel); + if(bSubRadial) + { + SetLocalInt(oPC, "DomainOrigSpell", nSpell); + SetLocalInt(oPC, "DomainCastClass", nClass); + SetLocalObject(oPC, "DomainTarget", oTarget); + SetLocalLocation(oPC, "DomainTarget", GetSpellTargetLocation()); + StartDynamicConversation("prc_domain_conv", oPC, DYNCONV_EXIT_NOT_ALLOWED, FALSE, TRUE, oPC); + } + else + { + if(nMetamagic & METAMAGIC_QUICKEN) + { + //Adding Auto-Quicken III for one round - deleted after casting is finished. + object oSkin = GetPCSkin(oPC); + int nCastDur = StringToInt(Get2DACache("spells", "ConjTime", nSpell)) + StringToInt(Get2DACache("spells", "CastTime", nSpell)); + itemproperty ipAutoQuicken = ItemPropertyBonusFeat(IP_CONST_NSB_AUTO_QUICKEN); + ActionDoCommand(AddItemProperty(DURATION_TYPE_TEMPORARY, ipAutoQuicken, oSkin, nCastDur/1000.0f)); + } + int nDC = 10 + nLevel + GetDCAbilityModForClass(nClass, oPC); + ActionCastSpell(nSpell, 0, nDC, 0, nMetamagic, nClass, FALSE, FALSE, OBJECT_INVALID, FALSE); + ActionDoCommand(DeleteLocalInt(oPC, "DomainCast")); + } +} + +int GetDomainSpell(int nDomain, int nLevel, object oPC) +{ + // The -1 on nDomains is to adjust from a base 1 to a base 0 system. + string sSpell = Get2DACache("prc_domains", "Level_" + IntToString(nLevel), (nDomain - 1)); + if (DEBUG) DoDebug("Domain Spell: " + sSpell); + //if (DEBUG) DoDebug("GetDomainSpell has fired"); + int nSpell = -1; + if(sSpell == "") + { + FloatingTextStringOnCreature("You do not have a domain spell of that level.", oPC, FALSE); + //int nFeat = SpellLevelToFeat(nLevel); + //IncrementRemainingFeatUses(oPC, nFeat); + } + else + { + nSpell = StringToInt(sSpell); + } + + return nSpell; +} + +int SpellLevelToFeat(int nLevel) +{ + switch(nLevel) + { + case 1: return FEAT_CAST_DOMAIN_LEVEL_ONE; + case 2: return FEAT_CAST_DOMAIN_LEVEL_TWO; + case 3: return FEAT_CAST_DOMAIN_LEVEL_THREE; + case 4: return FEAT_CAST_DOMAIN_LEVEL_FOUR; + case 5: return FEAT_CAST_DOMAIN_LEVEL_FIVE; + case 6: return FEAT_CAST_DOMAIN_LEVEL_SIX; + case 7: return FEAT_CAST_DOMAIN_LEVEL_SEVEN; + case 8: return FEAT_CAST_DOMAIN_LEVEL_EIGHT; + case 9: return FEAT_CAST_DOMAIN_LEVEL_NINE; + } + + return -1; +} + +string GetDomainName(int nDomain) +{ + string sName; + // Check that the domain slot is not empty + if(nDomain) + { + sName = Get2DACache("prc_domains", "Name", (nDomain - 1)); + sName = GetStringByStrRef(StringToInt(sName)); + } + else + sName = GetStringByStrRef(6497); // "Empty Slot" + + return sName; +} + +void CheckBonusDomains(object oPC) +{ + int nBonusDomain, nDomainFeat; + int nSlot = 1; + while(nSlot < 6) + { + nBonusDomain = GetBonusDomain(oPC, nSlot); + nDomainFeat = GetDomainFeat(nBonusDomain); + if(!GetHasFeat(nDomainFeat, oPC)) SetPersistantLocalInt(oPC, "PRCBonusDomain" + IntToString(nSlot), 0); + //SendMessageToPC(oPC, "PRCBonusDomain"+IntToString(nSlot)" = "+IntToString(nBonusDomain)); + //SendMessageToPC(oPC, "PRCBonusDomain"+IntToString(nSlot)" feat = "+IntToString(GetDomainFeat(nDomainFeat))); + nSlot += 1; + } + + if (GetHasFeat(FEAT_BONUS_DOMAIN_AIR, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_AIR); + if (GetHasFeat(FEAT_BONUS_DOMAIN_ANIMAL, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_ANIMAL); + if (GetHasFeat(FEAT_BONUS_DOMAIN_DEATH, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_DEATH); + if (GetHasFeat(FEAT_BONUS_DOMAIN_DESTRUCTION, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_DESTRUCTION); + if (GetHasFeat(FEAT_BONUS_DOMAIN_EARTH, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_EARTH); + if (GetHasFeat(FEAT_BONUS_DOMAIN_EVIL, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_EVIL); + if (GetHasFeat(FEAT_BONUS_DOMAIN_FIRE, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_FIRE); + if (GetHasFeat(FEAT_BONUS_DOMAIN_GOOD, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_GOOD); + if (GetHasFeat(FEAT_BONUS_DOMAIN_HEALING, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_HEALING); + if (GetHasFeat(FEAT_BONUS_DOMAIN_KNOWLEDGE, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_KNOWLEDGE); + if (GetHasFeat(FEAT_BONUS_DOMAIN_MAGIC, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_MAGIC); + if (GetHasFeat(FEAT_BONUS_DOMAIN_PLANT, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_PLANT); + if (GetHasFeat(FEAT_BONUS_DOMAIN_PROTECTION, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_PROTECTION); + if (GetHasFeat(FEAT_BONUS_DOMAIN_STRENGTH, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_STRENGTH); + if (GetHasFeat(FEAT_BONUS_DOMAIN_SUN, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_SUN); + if (GetHasFeat(FEAT_BONUS_DOMAIN_TRAVEL, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_TRAVEL); + if (GetHasFeat(FEAT_BONUS_DOMAIN_TRICKERY, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_TRICKERY); + if (GetHasFeat(FEAT_BONUS_DOMAIN_WAR, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_WAR); + if (GetHasFeat(FEAT_BONUS_DOMAIN_WATER, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_WATER); + if (GetHasFeat(FEAT_BONUS_DOMAIN_DARKNESS, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_DARKNESS); + if (GetHasFeat(FEAT_BONUS_DOMAIN_STORM, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_STORM); + if (GetHasFeat(FEAT_BONUS_DOMAIN_METAL, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_METAL); + if (GetHasFeat(FEAT_BONUS_DOMAIN_PORTAL, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_PORTAL); + if (GetHasFeat(FEAT_BONUS_DOMAIN_FORCE, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_FORCE); + if (GetHasFeat(FEAT_BONUS_DOMAIN_SLIME, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_SLIME); + if (GetHasFeat(FEAT_BONUS_DOMAIN_TYRANNY, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_TYRANNY); + if (GetHasFeat(FEAT_BONUS_DOMAIN_DOMINATION, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_DOMINATION); + if (GetHasFeat(FEAT_BONUS_DOMAIN_SPIDER, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_SPIDER); + if (GetHasFeat(FEAT_BONUS_DOMAIN_UNDEATH, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_UNDEATH); + if (GetHasFeat(FEAT_BONUS_DOMAIN_TIME, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_TIME); + if (GetHasFeat(FEAT_BONUS_DOMAIN_DWARF, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_DWARF); + if (GetHasFeat(FEAT_BONUS_DOMAIN_CHARM, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_CHARM); + if (GetHasFeat(FEAT_BONUS_DOMAIN_ELF, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_ELF); + if (GetHasFeat(FEAT_BONUS_DOMAIN_FAMILY, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_FAMILY); + if (GetHasFeat(FEAT_BONUS_DOMAIN_FATE, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_FATE); + if (GetHasFeat(FEAT_BONUS_DOMAIN_GNOME, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_GNOME); + if (GetHasFeat(FEAT_BONUS_DOMAIN_ILLUSION, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_ILLUSION); + if (GetHasFeat(FEAT_BONUS_DOMAIN_HATRED, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_HATRED); + if (GetHasFeat(FEAT_BONUS_DOMAIN_HALFLING, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_HALFLING); + if (GetHasFeat(FEAT_BONUS_DOMAIN_NOBILITY, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_NOBILITY); + if (GetHasFeat(FEAT_BONUS_DOMAIN_OCEAN, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_OCEAN); + if (GetHasFeat(FEAT_BONUS_DOMAIN_ORC, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_ORC); + if (GetHasFeat(FEAT_BONUS_DOMAIN_RENEWAL, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_RENEWAL); + if (GetHasFeat(FEAT_BONUS_DOMAIN_RETRIBUTION, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_RETRIBUTION); + if (GetHasFeat(FEAT_BONUS_DOMAIN_RUNE, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_RUNE); + if (GetHasFeat(FEAT_BONUS_DOMAIN_SPELLS, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_SPELLS); + if (GetHasFeat(FEAT_BONUS_DOMAIN_SCALEYKIND, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_SCALEYKIND); + if (GetHasFeat(FEAT_BONUS_DOMAIN_BLIGHTBRINGER, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_BLIGHTBRINGER); + if (GetHasFeat(FEAT_BONUS_DOMAIN_DRAGON, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_DRAGON); + if (GetHasFeat(FEAT_BONUS_DOMAIN_COLD, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_COLD); + if (GetHasFeat(FEAT_BONUS_DOMAIN_WINTER, oPC)) AddBonusDomain(oPC, PRC_DOMAIN_WINTER); + + //if (DEBUG) FloatingTextStringOnCreature("Check Bonus Domains is running", oPC, FALSE); +} + +int GetBurnableSpell(object oPC, int nLevel) +{ + int nBurnableSpell = -1; + + if (nLevel == 1) nBurnableSpell = GetBestL1Spell(oPC, nBurnableSpell); + else if (nLevel == 2) nBurnableSpell = GetBestL2Spell(oPC, nBurnableSpell); + else if (nLevel == 3) nBurnableSpell = GetBestL3Spell(oPC, nBurnableSpell); + else if (nLevel == 4) nBurnableSpell = GetBestL4Spell(oPC, nBurnableSpell); + else if (nLevel == 5) nBurnableSpell = GetBestL5Spell(oPC, nBurnableSpell); + else if (nLevel == 6) nBurnableSpell = GetBestL6Spell(oPC, nBurnableSpell); + else if (nLevel == 7) nBurnableSpell = GetBestL7Spell(oPC, nBurnableSpell); + else if (nLevel == 8) nBurnableSpell = GetBestL8Spell(oPC, nBurnableSpell); + else if (nLevel == 9) nBurnableSpell = GetBestL9Spell(oPC, nBurnableSpell); + + return nBurnableSpell; +} + +int GetDomainFeat(int nDomain) +{ + // The -1 on nDomain is to adjust from a base 1 to a base 0 system. + // Returns the domain power feat + return StringToInt(Get2DACache("domains", "GrantedFeat", nDomain - 1)); +} + +int GetDomainFeatUsesPerDay(int nFeat, object oPC) +{ + int nUses = StringToInt(Get2DACache("feat", "USESPERDAY", nFeat)); + // These are the domains that have ability based uses per day + if (nUses == 33) + { + // The Strength domain, which uses Strength when the Cleric has Kord levels + // Without Kord levels, its 1 use per day + if(nFeat == FEAT_STRENGTH_DOMAIN_POWER) + { + nUses = 1; + if(GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oPC)) nUses = GetAbilityModifier(ABILITY_STRENGTH, oPC); + // Catching exceptions + if(nUses < 1) nUses = 1; + } + if(nFeat == FEAT_SUN_DOMAIN_POWER) + { + if(GetHasFeat(FEAT_BONUS_DOMAIN_SUN, oPC) && GetLevelByClass(CLASS_TYPE_MYSTIC, oPC)) + { + nUses = GetHasFeat(FEAT_EXTRA_TURNING, oPC) ? 7 : 3; + nUses += GetAbilityModifier(ABILITY_CHARISMA, oPC); + } + else + nUses = 1; + } + + // All other ones so far are the Charisma based turning domains + nUses = 3 + GetAbilityModifier(ABILITY_CHARISMA, oPC); + } + + return nUses; +} + +int DecrementDomainUses(int nDomain, object oPC) +{ + int nReturn = TRUE; + int nUses = GetLocalInt(oPC, "BonusDomainUsesPerDay" + GetDomainName(nDomain)); + // If there is still a valid use left, remove it + if (nUses >= 1) SetLocalInt(oPC, "BonusDomainUsesPerDay" + GetDomainName(nDomain), (nUses - 1)); + // Tell the player how many uses he has left + else // He has no more uses for the day + { + nReturn = FALSE; + } + + FloatingTextStringOnCreature("You have " + IntToString(nUses - 1) + " uses per day left of the " + GetDomainName(nDomain) + " power.", oPC, FALSE); + + return nReturn; +} + +int GetTurningDomain(int nSpell) +{ + switch(nSpell) + { + case SPELL_TURN_REPTILE: return PRC_DOMAIN_SCALEYKIND; + case SPELL_TURN_OOZE: return PRC_DOMAIN_SLIME; + case SPELL_TURN_SPIDER: return PRC_DOMAIN_SPIDER; + case SPELL_TURN_PLANT: return PRC_DOMAIN_PLANT; + case SPELL_TURN_AIR: return PRC_DOMAIN_AIR; + case SPELL_TURN_EARTH: return PRC_DOMAIN_EARTH; + case SPELL_TURN_FIRE: return PRC_DOMAIN_FIRE; + case SPELL_TURN_WATER: return PRC_DOMAIN_WATER; + case SPELL_TURN_BLIGHTSPAWNED: return PRC_DOMAIN_BLIGHTBRINGER; + } + + return -1; +} + +int GetHasDomain(object oPC, int nDomain) +{ + // Get the domain power feat for the appropriate domain + int nFeat = GetDomainFeat(nDomain); + + return GetHasFeat(nFeat, oPC); +} + +void BonusDomainRest(object oPC) +{ + // Bonus Domain ints that limit you to casting 1/day per level + int i; + for (i = 1; i < 10; i++) + { + DeleteLocalInt(oPC, "DomainCastSpell" + IntToString(i)); + } + + // This is code to stop you from using the Domain per day abilities more than you should be able to + int i2; + // Highest domain constant is 62 + for (i2 = 1; i2 < 63; i2++) + { + // This is to ensure they only get the ints set for the domains they do have + if (GetHasDomain(oPC, i2)) + { + // Store the number of uses a day here + SetLocalInt(oPC, "BonusDomainUsesPerDay" + GetDomainName(i2), GetDomainFeatUsesPerDay(GetDomainFeat(i2), oPC)); + } + } +} + +int GetDomainCasterLevel(object oPC) +{ + return GetLevelByClass(CLASS_TYPE_CLERIC, oPC) + + GetLevelByClass(CLASS_TYPE_MYSTIC, oPC) + + GetLevelByClass(CLASS_TYPE_SHAMAN, oPC) + + GetLevelByClass(CLASS_TYPE_TEMPLAR, oPC) + + GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oPC) + + GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oPC) + + GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oPC); +} \ No newline at end of file diff --git a/src/include/prc_inc_dragsham.nss b/src/include/prc_inc_dragsham.nss new file mode 100644 index 0000000..dacdaf0 --- /dev/null +++ b/src/include/prc_inc_dragsham.nss @@ -0,0 +1,188 @@ + +// Metabreath Feats - Not implemented yet. +/** const int FEAT_CLINGING_BREATH = 5000; +const int FEAT_LINGERING_BREATH = 5001; +const int FEAT_ENLARGE_BREATH = 5002; +const int FEAT_HEIGHTEN_BREATH = 5003; +const int FEAT_MAXIMIZE_BREATH = 5004; +const int FEAT_QUICKEN_BREATH = 5005; +const int FEAT_RECOVER_BREATH = 5006; +const int FEAT_SHAPE_BREATH = 5007; +const int FEAT_SPLIT_BREATH = 5008; +const int FEAT_SPREADING_BREATH = 5009; +const int FEAT_EXTEND_SPREADING_BREATH = 5010; +const int FEAT_TEMPEST_BREATH = 5011; **/ + +// Dragon Shaman Aura flag +//const int DRAGON_SHAMAN_AURA_ACTIVE = 5000; + +#include "prc_inc_nwscript" + +int GetIsDragonblooded(object oPC); + +// returns the damage type of dragon that the PC has a totem for. Checks for the presence of the +// various feats that are present indicating such. This is necessary for determining the type +// of breath weapon and the type of damage immunity. +int GetDragonDamageType(int nTotem); + +// Used to create a flag on the caster and store the Aura currently being run. +//int StartDragonShamanAura(object oCaster, int nSpellId); + +// Resets the available ToV points; for use after rest or on enter. +void ResetTouchOfVitality(object oPC); + +// Applies any metabreath feats that the dragon shaman may have to his breathweapon +//int ApplyMetaBreathFeatMods( int nDuration, object oCaster ); + +int GetIsDragonblooded(object oPC) +{ + int nRace = GetRacialType(oPC); + if(nRace == RACIAL_TYPE_KOBOLD + || nRace == RACIAL_TYPE_SPELLSCALE + || nRace == RACIAL_TYPE_DRAGONBORN + || nRace == RACIAL_TYPE_STONEHUNTER_GNOME + || nRace == RACIAL_TYPE_SILVERBROW_HUMAN + || nRace == RACIAL_TYPE_FORESTLORD_ELF + || nRace == RACIAL_TYPE_FIREBLOOD_DWARF + || nRace == RACIAL_TYPE_GLIMMERSKIN_HALFING + || nRace == RACIAL_TYPE_FROSTBLOOD_ORC + || nRace == RACIAL_TYPE_SUNSCORCH_HOBGOBLIN + || nRace == RACIAL_TYPE_VILETOOTH_LIZARDFOLK) + return TRUE; + + if(GetLevelByClass(CLASS_TYPE_DRAGON_DISCIPLE, oPC) > 9) + return TRUE; + + if(GetHasFeat(FEAT_DRAGONTOUCHED, oPC) + || GetHasFeat(FEAT_DRACONIC_DEVOTEE, oPC) + || GetHasFeat(FEAT_DRAGON, oPC) + || GetHasFeat(DRAGON_BLOODED, oPC)) + return TRUE; + + //Draconic Heritage qualifies for dragonblood + if(GetHasFeat(FEAT_DRACONIC_HERITAGE_BK, oPC) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_BL, oPC) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_GR, oPC) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_RD, oPC) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_WH, oPC) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_AM, oPC) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_CR, oPC) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_EM, oPC) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_SA, oPC) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_TP, oPC) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_BS, oPC) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_BZ, oPC) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_CP, oPC) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_GD, oPC) + || GetHasFeat(FEAT_DRACONIC_HERITAGE_SR, oPC)) + return TRUE; + + return FALSE; +} + +int GetDragonDamageType(int nTotem) +{ + int nDamageType = nTotem == FEAT_DRAGONSHAMAN_BLACK ? DAMAGE_TYPE_ACID: + nTotem == FEAT_DRAGONSHAMAN_BLUE ? DAMAGE_TYPE_ELECTRICAL: + nTotem == FEAT_DRAGONSHAMAN_BRASS ? DAMAGE_TYPE_FIRE: + nTotem == FEAT_DRAGONSHAMAN_BRONZE ? DAMAGE_TYPE_ELECTRICAL: + nTotem == FEAT_DRAGONSHAMAN_COPPER ? DAMAGE_TYPE_ACID: + nTotem == FEAT_DRAGONSHAMAN_GOLD ? DAMAGE_TYPE_FIRE: + nTotem == FEAT_DRAGONSHAMAN_GREEN ? DAMAGE_TYPE_ACID: + nTotem == FEAT_DRAGONSHAMAN_RED ? DAMAGE_TYPE_FIRE: + nTotem == FEAT_DRAGONSHAMAN_SILVER ? DAMAGE_TYPE_COLD: + nTotem == FEAT_DRAGONSHAMAN_WHITE ? DAMAGE_TYPE_COLD: + -1; + + return nDamageType; +} + +void ResetTouchOfVitality(object oPC) +{ + if(GetHasFeat(FEAT_DRAGONSHAMAN_TOUCHVITALITY, oPC)) + { + int nChaBonus = GetAbilityModifier(ABILITY_CHARISMA, oPC); + if(nChaBonus < 0) nChaBonus = 0; + int nVitPoints = 2 * GetLevelByClass(CLASS_TYPE_DRAGON_SHAMAN, oPC) * nChaBonus; + SetLocalInt(oPC, "DRAGON_SHAMAN_TOUCH_REMAIN", nVitPoints); + string sMes = "Healing power: " + IntToString(nVitPoints) + " points."; + FloatingTextStringOnCreature(sMes, oPC, FALSE); + } + if(GetHasFeat(FEAT_ABERRANT_DURABLE_FORM, oPC)) + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectTemporaryHitpoints(GetAberrantFeatCount(oPC)), oPC); +} + +int GetMarshalAuraPower(object oPC) +{ + int iMarshalLevel = GetLevelByClass(CLASS_TYPE_MARSHAL, oPC); + int nBonus; + if(iMarshalLevel > 19) + nBonus = iMarshalLevel / 5; + else if(iMarshalLevel > 13) + nBonus = 3; + else if(iMarshalLevel > 6) + nBonus = 2; + else if(iMarshalLevel > 1) + nBonus = 1; + + return nBonus; +} + +int GetDragonShamanAuraPower(object oPC) +{ + int iDragonShamanLevel = GetLevelByClass(CLASS_TYPE_DRAGON_SHAMAN, oPC); + int nBonus = (iDragonShamanLevel / 5) + 1; + + return nBonus; +} + +int GetExtraAuraPower(object oPC) +{ + int nBonus; + if(GetIsDragonblooded(oPC)) + { + int nHD = GetHitDice(oPC); + if(nHD > 19) + nBonus = 4; + else if(nHD > 13) + nBonus = 3; + else if(nHD > 6) + nBonus = 2; + else + nBonus = 1; + } + + return nBonus; + } + +int GetAuraBonus(object oPC) +{ + int nAuraBonus = GetDragonShamanAuraPower(oPC); + int nMarshalBonus = GetMarshalAuraPower(oPC); + int nExtraBonus = GetExtraAuraPower(oPC); + + if(nMarshalBonus > nAuraBonus) + nAuraBonus = nMarshalBonus; + + if(nExtraBonus > nAuraBonus) + nAuraBonus = nExtraBonus; + + return nAuraBonus; +} + +object GetAuraObject(object oShaman, string sTag) +{ + location lTarget = GetLocation(oShaman); + object oAura = GetFirstObjectInShape(SHAPE_SPHERE, 1.0f, lTarget, FALSE, OBJECT_TYPE_AREA_OF_EFFECT); + while(GetIsObjectValid(oAura)) + { + if((GetAreaOfEffectCreator(oAura) == oShaman) //was cast by shaman + && GetTag(oAura) == sTag //it's a draconic aura + && !GetLocalInt(oAura, "SpellID")) //and was not setup before + { + return oAura; + } + oAura = GetNextObjectInShape(SHAPE_SPHERE, 1.0f, lTarget, FALSE, OBJECT_TYPE_AREA_OF_EFFECT); + } + return OBJECT_INVALID; +} diff --git a/src/include/prc_inc_drugfunc.nss b/src/include/prc_inc_drugfunc.nss new file mode 100644 index 0000000..d40e850 --- /dev/null +++ b/src/include/prc_inc_drugfunc.nss @@ -0,0 +1,92 @@ +//::////////////////////////////////////////////// +//:: Drug system functions +//:: prc_inc_drugfunc +//::////////////////////////////////////////////// +/** @file + A bunch of functions common to the drug + scripts. + + @author Ornedan + @data Created 2006.05.29 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Structures */ +////////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Increments the overdose tracking counter by one for the given drug and queues + * decrementing it by one after the given period. + * The value of this counter is what will be returned by GetHasOverdosed(). + * + */ +void IncrementOverdoseTracker(object oDrugUser, string sODIdentifier, float fODPeriod); + +/** + * Checks if the given drug user is currently in the overdose period of the given drug. + * The value returned is the number of drug uses in the overdose period of which is + * currently active. + * + * @param oDrugUser A creature using a drug. + * @param sODIdentifier The name of the drug's overdose identifier. + * @return The current value of the overdose variable - how many drug uses of + * the given drug are right now in their overdose period. + */ +int GetOverdoseCounter(object oDrugUser, string sODIdentifier); + + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +/** Internal function. + * Implements the decrementing of the overdose counters. + * + * @param oDrugUser A creature using a drug. + * @param sODIdentifier The name of the drug's overdose identifier. + */ +void _prc_inc_drugfunc_DecrementOverdoseTracker(object oDrugUser, string sODIdentifier) +{ + // Delete the variable if decrementing would it would make it 0 + if(GetLocalInt(oDrugUser, sODIdentifier) <= 1) + DeleteLocalInt(oDrugUser, sODIdentifier); + else + SetLocalInt(oDrugUser, sODIdentifier, GetLocalInt(oDrugUser, sODIdentifier) - 1); +} + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +void IncrementOverdoseTracker(object oDrugUser, string sODIdentifier, float fODPeriod) +{ + SetLocalInt(oDrugUser, sODIdentifier, GetLocalInt(oDrugUser, sODIdentifier) + 1); + DelayCommand(fODPeriod, _prc_inc_drugfunc_DecrementOverdoseTracker(oDrugUser, sODIdentifier)); +} + + +int GetOverdoseCounter(object oDrugUser, string sODIdentifier) +{ + return GetLocalInt(oDrugUser, sODIdentifier); +} + + +// Test main +//void main(){} diff --git a/src/include/prc_inc_effect.nss b/src/include/prc_inc_effect.nss new file mode 100644 index 0000000..aadb468 --- /dev/null +++ b/src/include/prc_inc_effect.nss @@ -0,0 +1,1900 @@ +/* + +This include file details the PRC replacement for biowares effect variable type +It is required so that we can access the components of an effect much as we can +with itemproperties. +Also useful for storing things like metamagic, spell level, etc + + +Primogenitor +*/ + +struct PRCeffect{ + effect eEffect; + int nEffectType; + int nEffectSubtype; + int nDurationType; + float fDuration; + int nVersesRace; + int nVersesTraps; + int nVersesAlignmentOrder; + int nVersesAlignmentMoral; + + //these are the subcomponents + //probably more here than needed, but better safe than sorry! + int nVar1; object oVar1; string sVar1; location lVar1; float fVar1; + int nVar2; object oVar2; string sVar2; location lVar2; float fVar2; + int nVar3; object oVar3; string sVar3; location lVar3; float fVar3; + int nVar4; object oVar4; string sVar4; location lVar4; float fVar4; + int nVar5; object oVar5; string sVar5; location lVar5; float fVar5; + int nVar6; object oVar6; string sVar6; location lVar6; float fVar6; + int nVar7; object oVar7; string sVar7; location lVar7; float fVar7; + int nVar8; object oVar8; string sVar8; location lVar8; float fVar8; + int nVar9; object oVar9; string sVar9; location lVar9; float fVar9; + + int nLinkedCount; + int nLinkedID; + //linked effects are stored in an array on the module with the prefix PRC_LinkEffects_X + //where X is an ID number that is incremented for each new effect that has linked effects + + int nSpellID; + int nCasterLevel; + object oCaster; + int nMetamagic; + int nSpellLevel; + int nWeave; +}; + +//get/set local handlers +void SetLocalPRCEffect(object oObject, string sVarName, struct PRCeffect eValue); +struct PRCeffect GetLocalPRCEffect(object oObject, string sVarName); +void DeleteLocalPRCEffect(object oObject, string sVarName); + +//default constructor +struct PRCeffect GetNewPRCEffectBase(); + +// Get the first in-game effect on oCreature. +struct PRCeffect PRCGetFirstEffect(object oCreature); + +// Get the next in-game effect on oCreature. +struct PRCeffect PRCGetNextEffect(object oCreature); + +// * Returns TRUE if eEffect is a valid effect. The effect must have been applied to +// * an object or else it will return FALSE +int PRCGetIsEffectValid(struct PRCeffect prceEffect); + +// Get the duration type (DURATION_TYPE_*) of eEffect. +// * Return value if eEffect is not valid: -1 +int PRCGetEffectDurationType(struct PRCeffect prceEffect); + +// Get the subtype (SUBTYPE_*) of eEffect. +// * Return value on error: 0 +int PRCGetEffectSubType(struct PRCeffect prceEffect); + +// Get the object that created eEffect. +// * Returns OBJECT_INVALID if eEffect is not a valid effect. +object PRCGetEffectCreator(struct PRCeffect prceEffect); + +// Get the effect type (EFFECT_TYPE_*) of eEffect. +// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT +int PRCGetEffectType(struct PRCeffect prceEffect); + +// Get the spell (SPELL_*) that applied eSpellEffect. +// * Returns -1 if eSpellEffect was applied outside a spell script. +int PRCGetEffectSpellId(struct PRCeffect prceEffect); + +// gets the real effect based on an effect structure +// should never be needed outside the effect system itself +effect GetEffectOnObjectFromPRCEffect(struct PRCeffect prceEffect, object oObject); + +// Remove eEffect from oCreature. +// * No return value +void PRCRemoveEffect(object oCreature, struct PRCeffect eEffect); + +// Set the subtype of eEffect to Magical and return eEffect. +// (Effects default to magical if the subtype is not set) +// Magical effects are removed by resting, and by dispel magic +struct PRCeffect PRCMagicalEffect(struct PRCeffect eEffect); + +// Set the subtype of eEffect to Supernatural and return eEffect. +// (Effects default to magical if the subtype is not set) +// Permanent supernatural effects are not removed by resting +struct PRCeffect PRCSupernaturalEffect(struct PRCeffect eEffect); + +// Set the subtype of eEffect to Extraordinary and return eEffect. +// (Effects default to magical if the subtype is not set) +// Extraordinary effects are removed by resting, but not by dispel magic +struct PRCeffect PRCExtraordinaryEffect(struct PRCeffect eEffect); + +// Set eEffect to be versus a specific alignment. +// - eEffect +// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL +// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL +struct PRCeffect PRCVersusAlignmentEffect(struct PRCeffect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL); + +// Set eEffect to be versus nRacialType. +// - eEffect +// - nRacialType: RACIAL_TYPE_* +struct PRCeffect PRCVersusRacialTypeEffect(struct PRCeffect eEffect, int nRacialType); + +// Set eEffect to be versus traps. +struct PRCeffect PRCVersusTrapEffect(struct PRCeffect eEffect); + +// Create a Heal effect. This should be applied as an instantaneous effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. +struct PRCeffect PRCEffectHeal(int nDamageToHeal); + +// Create a Damage effect +// - nDamageAmount: amount of damage to be dealt. This should be applied as an +// instantaneous effect. +// - nDamageType: DAMAGE_TYPE_* +// - nDamagePower: DAMAGE_POWER_* +struct PRCeffect PRCEffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_MAGICAL, int nDamagePower=DAMAGE_POWER_NORMAL); + +// Create an Ability Increase effect +// - bAbilityToIncrease: ABILITY_* +struct PRCeffect PRCEffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy); + +// Create a Damage Resistance effect that removes the first nAmount points of +// damage of type nDamageType, up to nLimit (or infinite if nLimit is 0) +// - nDamageType: DAMAGE_TYPE_* +// - nAmount +// - nLimit +struct PRCeffect PRCEffectDamageResistance(int nDamageType, int nAmount, int nLimit=0); + +// Create a Summon Creature effect. The creature is created and placed into the +// caller's party/faction. +// - sCreatureResref: Identifies the creature to be summoned +// - nVisualEffectId: VFX_* +// - fDelaySeconds: There can be delay between the visual effect being played, and the +// creature being added to the area +// - nUseAppearAnimation: should this creature play it's "appear" animation when it is +// summoned. If zero, it will just fade in somewhere near the target. If the value is 1 +// it will use the appear animation, and if it's 2 it will use appear2 (which doesn't exist for most creatures) +struct PRCeffect PRCEffectSummonCreature(string sCreatureResref, int nVisualEffectId=VFX_NONE, float fDelaySeconds=0.0f, int nUseAppearAnimation=0); + +// Create a Resurrection effect. This should be applied as an instantaneous effect. +struct PRCeffect PRCEffectResurrection(); + +// Create an AC Increase effect +// - nValue: size of AC increase +// - nModifyType: AC_*_BONUS +// - nDamageType: DAMAGE_TYPE_* +// * Default value for nDamageType should only ever be used in this function prototype. +struct PRCeffect PRCEffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// Create a Saving Throw Increase effect +// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) +// SAVING_THROW_ALL +// SAVING_THROW_FORT +// SAVING_THROW_REFLEX +// SAVING_THROW_WILL +// - nValue: size of the Saving Throw increase +// - nSaveType: SAVING_THROW_TYPE_* (e.g. SAVING_THROW_TYPE_ACID ) +struct PRCeffect PRCEffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// Create an Attack Increase effect +// - nBonus: size of attack bonus +// - nModifierType: ATTACK_BONUS_* +struct PRCeffect PRCEffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC); + +// Create a Damage Reduction effect +// - nAmount: amount of damage reduction +// - nDamagePower: DAMAGE_POWER_* +// - nLimit: How much damage the effect can absorb before disappearing. +// Set to zero for infinite +struct PRCeffect PRCEffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0); + +// Create a Damage Increase effect +// - nBonus: DAMAGE_BONUS_* +// - nDamageType: DAMAGE_TYPE_* +// NOTE! You *must* use the DAMAGE_BONUS_* constants! Using other values may +// result in odd behaviour. +struct PRCeffect PRCEffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_MAGICAL); + + +// Create an Entangle effect +// When applied, this effect will restrict the creature's movement and apply a +// (-2) to all attacks and a -4 to AC. +struct PRCeffect PRCEffectEntangle(); + +// Create a Death effect +// - nSpectacularDeath: if this is TRUE, the creature to which this effect is +// applied will die in an extraordinary fashion +// - nDisplayFeedback +struct PRCeffect PRCEffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE); + +// Create a Knockdown effect +// This effect knocks creatures off their feet, they will sit until the effect +// is removed. This should be applied as a temporary effect with a 3 second +// duration minimum (1 second to fall, 1 second sitting, 1 second to get up). +struct PRCeffect PRCEffectKnockdown(); + +// Create a Curse effect. +// - nStrMod: strength modifier +// - nDexMod: dexterity modifier +// - nConMod: constitution modifier +// - nIntMod: intelligence modifier +// - nWisMod: wisdom modifier +// - nChaMod: charisma modifier +struct PRCeffect PRCEffectCurse(int nStrMod=1, int nDexMod=1, int nConMod=1, int nIntMod=1, int nWisMod=1, int nChaMod=1); + +// Create a Paralyze effect +struct PRCeffect PRCEffectParalyze(); + +// Create a Spell Immunity effect. +// There is a known bug with this function. There *must* be a parameter specified +// when this is called (even if the desired parameter is SPELL_ALL_SPELLS), +// otherwise an effect of type EFFECT_TYPE_INVALIDEFFECT will be returned. +// - nImmunityToSpell: SPELL_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nImmunityToSpell is +// invalid. +struct PRCeffect PRCEffectSpellImmunity(int nImmunityToSpell=SPELL_ALL_SPELLS); + +// Create a Deaf effect +struct PRCeffect PRCEffectDeaf(); + +// Create a Sleep effect +struct PRCeffect PRCEffectSleep(); + +// Create a Charm effect +struct PRCeffect PRCEffectCharmed(); + +// Create a Confuse effect +struct PRCeffect PRCEffectConfused(); + +// Create a Frighten effect +struct PRCeffect PRCEffectFrightened(); + +// Create a Dominate effect +struct PRCeffect PRCEffectDominated(); + +// Create a Daze effect +struct PRCeffect PRCEffectDazed(); + +// Create a Stun effect +struct PRCeffect PRCEffectStunned(); + +// Create a Regenerate effect. +// - nAmount: amount of damage to be regenerated per time interval +// - fIntervalSeconds: length of interval in seconds +struct PRCeffect PRCEffectRegenerate(int nAmount, float fIntervalSeconds); + +// Create a Movement Speed Increase effect. +// - nPercentChange - range 0 through 99 +// eg. +// 0 = no change in speed +// 50 = 50% faster +// 99 = almost twice as fast +struct PRCeffect PRCEffectMovementSpeedIncrease(int nPercentChange); + +// Create an Area Of struct PRCeffect PRCEffect in the area of the creature it is applied to. +// If the scripts are not specified, default ones will be used. +struct PRCeffect PRCEffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript=""); + +// * Create a Visual Effect that can be applied to an object. +// - nVisualEffectId +// - nMissEffect: if this is TRUE, a random vector near or past the target will +// be generated, on which to play the effect +struct PRCeffect PRCEffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE); + +// Link the two supplied effects, returning eChildEffect as a child of +// eParentEffect. +// Note: When applying linked effects if the target is immune to all valid +// effects all other effects will be removed as well. This means that if you +// apply a visual effect and a silence effect (in a link) and the target is +// immune to the silence effect that the visual effect will get removed as well. +// Visual Effects are not considered "valid" effects for the purposes of +// determining if an effect will be removed or not and as such should never be +// packaged *only* with other visual effects in a link. +struct PRCeffect PRCEffectLinkEffects(struct PRCeffect eChildEffect, struct PRCeffect eParentEffect ); + +// Create a Beam effect. +// - nBeamVisualEffect: VFX_BEAM_* +// - oEffector: the beam is emitted from this creature +// - nBodyPart: BODY_NODE_* +// - bMissEffect: If this is TRUE, the beam will fire to a random vector near or +// past the target +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nBeamVisualEffect is +// not valid. +struct PRCeffect PRCEffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE); + +// Create a Spell Resistance Increase effect. +// - nValue: size of spell resistance increase +struct PRCeffect PRCEffectSpellResistanceIncrease(int nValue); + +// Create a Poison effect. +// - nPoisonType: POISON_* +struct PRCeffect PRCEffectPoison(int nPoisonType); + +// Create a Disease effect. +// - nDiseaseType: DISEASE_* +struct PRCeffect PRCEffectDisease(int nDiseaseType); + +// Create a Silence effect. +struct PRCeffect PRCEffectSilence(); + +// Create a Haste effect. +struct PRCeffect PRCEffectHaste(); + +// Create a Slow effect. +struct PRCeffect PRCEffectSlow(); + +// Create an Immunity effect. +// - nImmunityType: IMMUNITY_TYPE_* +struct PRCeffect PRCEffectImmunity(int nImmunityType); + +// Creates a Damage Immunity Increase effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +struct PRCeffect PRCEffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity); + +// Create a Temporary Hitpoints effect. +// - nHitPoints: a positive integer +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. +struct PRCeffect PRCEffectTemporaryHitpoints(int nHitPoints); + +// Create a Skill Increase effect. +// - nSkill: SKILL_* +// - nValue +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +struct PRCeffect PRCEffectSkillIncrease(int nSkill, int nValue); + +// Create a Turned effect. +// Turned effects are supernatural by default. +struct PRCeffect PRCEffectTurned(); + +// Create a Hit Point Change When Dying effect. +// - fHitPointChangePerRound: this can be positive or negative, but not zero. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if fHitPointChangePerRound is 0. +struct PRCeffect PRCEffectHitPointChangeWhenDying(float fHitPointChangePerRound); + +// Create an Ability Decrease effect. +// - nAbility: ABILITY_* +// - nModifyBy: This is the amount by which to decrement the ability +struct PRCeffect PRCEffectAbilityDecrease(int nAbility, int nModifyBy); + +// Create an Attack Decrease effect. +// - nPenalty +// - nModifierType: ATTACK_BONUS_* +struct PRCeffect PRCEffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC); + +// Create a Damage Decrease effect. +// - nPenalty +// - nDamageType: DAMAGE_TYPE_* +struct PRCeffect PRCEffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_MAGICAL); + +// Create a Damage Immunity Decrease effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +struct PRCeffect PRCEffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity); + +// Create an AC Decrease effect. +// - nValue +// - nModifyType: AC_* +// - nDamageType: DAMAGE_TYPE_* +// * Default value for nDamageType should only ever be used in this function prototype. +struct PRCeffect PRCEffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL); + +// Create a Movement Speed Decrease effect. +// - nPercentChange - range 0 through 99 +// eg. +// 0 = no change in speed +// 50 = 50% slower +// 99 = almost immobile +struct PRCeffect PRCEffectMovementSpeedDecrease(int nPercentChange); + +// Create a Saving Throw Decrease effect. +// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) +// SAVING_THROW_ALL +// SAVING_THROW_FORT +// SAVING_THROW_REFLEX +// SAVING_THROW_WILL +// - nValue: size of the Saving Throw decrease +// - nSaveType: SAVING_THROW_TYPE_* (e.g. SAVING_THROW_TYPE_ACID ) +struct PRCeffect PRCEffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL); + +// Create a Skill Decrease effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +struct PRCeffect PRCEffectSkillDecrease(int nSkill, int nValue); + +// Create a Spell Resistance Decrease effect. +struct PRCeffect PRCEffectSpellResistanceDecrease(int nValue); + +// Create an Invisibility effect. +// - nInvisibilityType: INVISIBILITY_TYPE_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType +// is invalid. +struct PRCeffect PRCEffectInvisibility(int nInvisibilityType); + +// Create a Concealment effect. +// - nPercentage: 1-100 inclusive +// - nMissChanceType: MISS_CHANCE_TYPE_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +struct PRCeffect PRCEffectConcealment(int nPercentage, int nMissType=MISS_CHANCE_TYPE_NORMAL); + +// Create a Darkness effect. +struct PRCeffect PRCEffectDarkness(); + +// Create a Dispel Magic All effect. +// If no parameter is specified, USE_CREATURE_LEVEL will be used. This will +// cause the dispel effect to use the level of the creature that created the +// effect. +struct PRCeffect PRCEffectDispelMagicAll(int nCasterLevel=USE_CREATURE_LEVEL); + +// Create an Ultravision effect. +struct PRCeffect PRCEffectUltravision(); + +// Create a Negative Level effect. +// - nNumLevels: the number of negative levels to apply. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nNumLevels > 100. +struct PRCeffect PRCEffectNegativeLevel(int nNumLevels, int bHPBonus=FALSE); + +// Create a Polymorph effect. +struct PRCeffect PRCEffectPolymorph(int nPolymorphSelection, int nLocked=FALSE); + +// Create a Sanctuary effect. +// - nDifficultyClass: must be a non-zero, positive number +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDifficultyClass <= 0. +struct PRCeffect PRCEffectSanctuary(int nDifficultyClass); + +// Create a True Seeing effect. +struct PRCeffect PRCEffectTrueSeeing(); + +// Create a See Invisible effect. +struct PRCeffect PRCEffectSeeInvisible(); + +// Create a Time Stop effect. +struct PRCeffect PRCEffectTimeStop(); + +// Create a Blindness effect. +struct PRCeffect PRCEffectBlindness(); + +// Create a Spell Level Absorption effect. +// - nMaxSpellLevelAbsorbed: maximum spell level that will be absorbed by the +// effect +// - nTotalSpellLevelsAbsorbed: maximum number of spell levels that will be +// absorbed by the effect +// - nSpellSchool: SPELL_SCHOOL_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if: +// nMaxSpellLevelAbsorbed is not between -1 and 9 inclusive, or nSpellSchool +// is invalid. +struct PRCeffect PRCEffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=SPELL_SCHOOL_GENERAL ); + +// Create a Dispel Magic Best effect. +// If no parameter is specified, USE_CREATURE_LEVEL will be used. This will +// cause the dispel effect to use the level of the creature that created the +// effect. +struct PRCeffect PRCEffectDispelMagicBest(int nCasterLevel=USE_CREATURE_LEVEL); + +// Create a Miss Chance effect. +// - nPercentage: 1-100 inclusive +// - nMissChanceType: MISS_CHANCE_TYPE_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +struct PRCeffect PRCEffectMissChance(int nPercentage, int nMissChanceType=MISS_CHANCE_TYPE_NORMAL); + +// Create a Disappear/Appear effect. +// The object will "fly away" for the duration of the effect and will reappear +// at lLocation. +// - nAnimation determines which appear and disappear animations to use. Most creatures +// only have animation 1, although a few have 2 (like beholders) +struct PRCeffect PRCEffectDisappearAppear(location lLocation, int nAnimation=1); + +// Create a Disappear effect to make the object "fly away" and then destroy +// itself. +// - nAnimation determines which appear and disappear animations to use. Most creatures +// only have animation 1, although a few have 2 (like beholders) +struct PRCeffect PRCEffectDisappear(int nAnimation=1); + +// Create an Appear effect to make the object "fly in". +// - nAnimation determines which appear and disappear animations to use. Most creatures +// only have animation 1, although a few have 2 (like beholders) +struct PRCeffect PRCEffectAppear(int nAnimation=1); + +// Create a Modify Attacks effect to add attacks. +// - nAttacks: maximum is 5, even with the effect stacked +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nAttacks > 5. +struct PRCeffect PRCEffectModifyAttacks(int nAttacks); + +// Create a Damage Shield effect which does (nDamageAmount + nRandomAmount) +// damage to any melee attacker on a successful attack of damage type nDamageType. +// - nDamageAmount: an integer value +// - nRandomAmount: DAMAGE_BONUS_* +// - nDamageType: DAMAGE_TYPE_* +// NOTE! You *must* use the DAMAGE_BONUS_* constants! Using other values may +// result in odd behaviour. +struct PRCeffect PRCEffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType); + +// Create a Swarm effect. +// - nLooping: If this is TRUE, for the duration of the effect when one creature +// created by this effect dies, the next one in the list will be created. If +// the last creature in the list dies, we loop back to the beginning and +// sCreatureTemplate1 will be created, and so on... +// - sCreatureTemplate1 +// - sCreatureTemplate2 +// - sCreatureTemplate3 +// - sCreatureTemplate4 +struct PRCeffect PRCEffectSwarm(int nLooping, string sCreatureTemplate1, string sCreatureTemplate2="", string sCreatureTemplate3="", string sCreatureTemplate4=""); + +// Create a Turn Resistance Decrease effect. +// - nHitDice: a positive number representing the number of hit dice for the +/// decrease +struct PRCeffect PRCEffectTurnResistanceDecrease(int nHitDice); + +// Create a Turn Resistance Increase effect. +// - nHitDice: a positive number representing the number of hit dice for the +// increase +struct PRCeffect PRCEffectTurnResistanceIncrease(int nHitDice); + +// returns an effect that will petrify the target +// * currently applies EffectParalyze and the stoneskin visual effect. +struct PRCeffect PRCEffectPetrify(); + +// returns an effect that is guaranteed to paralyze a creature. +// this effect is identical to EffectParalyze except that it cannot be resisted. +struct PRCeffect PRCEffectCutsceneParalyze(); + +// Returns an effect that is guaranteed to dominate a creature +// Like EffectDominated but cannot be resisted +struct PRCeffect PRCEffectCutsceneDominated(); + +// Creates an effect that inhibits spells +// - nPercent - percentage of failure +// - nSpellSchool - the school of spells affected. +struct PRCeffect PRCEffectSpellFailure(int nPercent=100, int nSpellSchool=SPELL_SCHOOL_GENERAL); + +// Returns an effect of type EFFECT_TYPE_ETHEREAL which works just like EffectSanctuary +// except that the observers get no saving throw +struct PRCeffect PRCEffectEthereal(); + +// Creates a cutscene ghost effect, this will allow creatures +// to pathfind through other creatures without bumping into them +// for the duration of the effect. +struct PRCeffect PRCEffectCutsceneGhost(); + +// Returns an effect that when applied will paralyze the target's legs, rendering +// them unable to walk but otherwise unpenalized. This effect cannot be resisted. +struct PRCeffect PRCEffectCutsceneImmobilize(); + +// Apply eEffect at lLocation. +void PRCApplyEffectAtLocation(int nDurationType, struct PRCeffect prceEffect, location lLocation, float fDuration=0.0f); + +//#include "inc_dispel" + +void PRCApplyEffectAtLocation(int nDurationType, struct PRCeffect prceEffect, location lLocation, float fDuration=0.0f) +{ + ApplyEffectAtLocation(nDurationType, prceEffect.eEffect, lLocation, fDuration); +} + +//get/set local handlers +void SetLocalPRCEffect(object oObject, string sVarName, struct PRCeffect eValue) +{ + SetLocalInt (oObject, sVarName+".nEffectType", eValue.nEffectType); + SetLocalInt (oObject, sVarName+".nEffectSubtype", eValue.nEffectSubtype); + SetLocalInt (oObject, sVarName+".nDurationType", eValue.nDurationType); + SetLocalFloat (oObject, sVarName+".fDuration", eValue.fDuration); + SetLocalInt (oObject, sVarName+".nVersesRace", eValue.nVersesRace); + SetLocalInt (oObject, sVarName+".nVersesTraps", eValue.nVersesTraps); + SetLocalInt (oObject, sVarName+".nVersesAlignmentOrder", eValue.nVersesAlignmentOrder); + SetLocalInt (oObject, sVarName+".nVersesAlignmentMoral", eValue.nVersesAlignmentMoral); + SetLocalInt (oObject, sVarName+".nLinkedCount", eValue.nLinkedCount); + SetLocalInt (oObject, sVarName+".nLinkedID", eValue.nLinkedID); + SetLocalInt (oObject, sVarName+".nSpellID", eValue.nSpellID); + SetLocalInt (oObject, sVarName+".nCasterLevel", eValue.nCasterLevel); + SetLocalObject (oObject, sVarName+".oCaster", eValue.oCaster); + SetLocalInt (oObject, sVarName+".nMetamagic", eValue.nMetamagic); + SetLocalInt (oObject, sVarName+".nSpellLevel", eValue.nSpellLevel); + SetLocalInt (oObject, sVarName+".nWeave", eValue.nWeave); + SetLocalInt (oObject, sVarName+".nVar1", eValue.nVar1); + SetLocalInt (oObject, sVarName+".nVar2", eValue.nVar2); + SetLocalInt (oObject, sVarName+".nVar3", eValue.nVar3); + SetLocalInt (oObject, sVarName+".nVar4", eValue.nVar4); + SetLocalInt (oObject, sVarName+".nVar5", eValue.nVar5); + SetLocalInt (oObject, sVarName+".nVar6", eValue.nVar6); + SetLocalInt (oObject, sVarName+".nVar7", eValue.nVar7); + SetLocalInt (oObject, sVarName+".nVar8", eValue.nVar8); + SetLocalInt (oObject, sVarName+".nVar9", eValue.nVar9); + SetLocalObject (oObject, sVarName+".oVar1", eValue.oVar1); + SetLocalObject (oObject, sVarName+".oVar2", eValue.oVar2); + SetLocalObject (oObject, sVarName+".oVar3", eValue.oVar3); + SetLocalObject (oObject, sVarName+".oVar1", eValue.oVar4); + SetLocalObject (oObject, sVarName+".oVar5", eValue.oVar5); + SetLocalObject (oObject, sVarName+".oVar6", eValue.oVar6); + SetLocalObject (oObject, sVarName+".oVar7", eValue.oVar7); + SetLocalObject (oObject, sVarName+".oVar8", eValue.oVar8); + SetLocalObject (oObject, sVarName+".oVar9", eValue.oVar9); + SetLocalString (oObject, sVarName+".sVar1", eValue.sVar1); + SetLocalString (oObject, sVarName+".sVar2", eValue.sVar2); + SetLocalString (oObject, sVarName+".sVar3", eValue.sVar3); + SetLocalString (oObject, sVarName+".sVar4", eValue.sVar4); + SetLocalString (oObject, sVarName+".sVar5", eValue.sVar5); + SetLocalString (oObject, sVarName+".sVar6", eValue.sVar6); + SetLocalString (oObject, sVarName+".sVar7", eValue.sVar7); + SetLocalString (oObject, sVarName+".sVar8", eValue.sVar8); + SetLocalString (oObject, sVarName+".sVar9", eValue.sVar9); + SetLocalLocation(oObject, sVarName+".lVar1", eValue.lVar1); + SetLocalLocation(oObject, sVarName+".lVar2", eValue.lVar2); + SetLocalLocation(oObject, sVarName+".lVar3", eValue.lVar3); + SetLocalLocation(oObject, sVarName+".lVar4", eValue.lVar4); + SetLocalLocation(oObject, sVarName+".lVar5", eValue.lVar5); + SetLocalLocation(oObject, sVarName+".lVar6", eValue.lVar6); + SetLocalLocation(oObject, sVarName+".lVar7", eValue.lVar7); + SetLocalLocation(oObject, sVarName+".lVar8", eValue.lVar8); + SetLocalLocation(oObject, sVarName+".lVar9", eValue.lVar9); + SetLocalFloat (oObject, sVarName+".fVar1", eValue.fVar1); + SetLocalFloat (oObject, sVarName+".fVar2", eValue.fVar2); + SetLocalFloat (oObject, sVarName+".fVar3", eValue.fVar3); + SetLocalFloat (oObject, sVarName+".fVar4", eValue.fVar4); + SetLocalFloat (oObject, sVarName+".fVar5", eValue.fVar5); + SetLocalFloat (oObject, sVarName+".fVar6", eValue.fVar6); + SetLocalFloat (oObject, sVarName+".fVar7", eValue.fVar7); + SetLocalFloat (oObject, sVarName+".fVar8", eValue.fVar8); + SetLocalFloat (oObject, sVarName+".fVar9", eValue.fVar9); +} +struct PRCeffect GetLocalPRCEffect(object oObject, string sVarName) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nEffectType= GetLocalInt (oObject, sVarName+".nEffectType"); + eReturn.nEffectSubtype= GetLocalInt (oObject, sVarName+".nEffectSubtype"); + eReturn.nDurationType= GetLocalInt (oObject, sVarName+".nDurationType"); + eReturn.fDuration= GetLocalFloat (oObject, sVarName+".fDuration"); + eReturn.nVersesRace= GetLocalInt (oObject, sVarName+".nVersesRace"); + eReturn.nVersesTraps= GetLocalInt (oObject, sVarName+".nVersesTraps"); + eReturn.nVersesAlignmentOrder=GetLocalInt(oObject,sVarName+".nVersesAlignmentOrder"); + eReturn.nVersesAlignmentMoral=GetLocalInt(oObject,sVarName+".nVersesAlignmentMoral"); + eReturn.nLinkedCount= GetLocalInt (oObject, sVarName+".nLinkedCount"); + eReturn.nLinkedID= GetLocalInt (oObject, sVarName+".nLinkedID"); + eReturn.nSpellID= GetLocalInt (oObject, sVarName+".nSpellID"); + eReturn.nCasterLevel= GetLocalInt (oObject, sVarName+".nCasterLevel"); + eReturn.oCaster= GetLocalObject (oObject, sVarName+".oCaster"); + eReturn.nMetamagic= GetLocalInt (oObject, sVarName+".nMetamagic"); + eReturn.nSpellLevel= GetLocalInt (oObject, sVarName+".nSpellLevel"); + eReturn.nWeave= GetLocalInt (oObject, sVarName+".nWeave"); + eReturn.nVar1= GetLocalInt (oObject, sVarName+".nVar1"); + eReturn.nVar2= GetLocalInt (oObject, sVarName+".nVar2"); + eReturn.nVar3= GetLocalInt (oObject, sVarName+".nVar3"); + eReturn.nVar4= GetLocalInt (oObject, sVarName+".nVar4"); + eReturn.nVar5= GetLocalInt (oObject, sVarName+".nVar5"); + eReturn.nVar6= GetLocalInt (oObject, sVarName+".nVar6"); + eReturn.nVar7= GetLocalInt (oObject, sVarName+".nVar7"); + eReturn.nVar8= GetLocalInt (oObject, sVarName+".nVar8"); + eReturn.nVar9= GetLocalInt (oObject, sVarName+".nVar9"); + eReturn.oVar1= GetLocalObject (oObject, sVarName+".oVar1"); + eReturn.oVar2= GetLocalObject (oObject, sVarName+".oVar2"); + eReturn.oVar3= GetLocalObject (oObject, sVarName+".oVar3"); + eReturn.oVar4= GetLocalObject (oObject, sVarName+".oVar4"); + eReturn.oVar5= GetLocalObject (oObject, sVarName+".oVar5"); + eReturn.oVar6= GetLocalObject (oObject, sVarName+".oVar6"); + eReturn.oVar7= GetLocalObject (oObject, sVarName+".oVar7"); + eReturn.oVar8= GetLocalObject (oObject, sVarName+".oVar8"); + eReturn.oVar9= GetLocalObject (oObject, sVarName+".oVar9"); + eReturn.sVar1= GetLocalString (oObject, sVarName+".sVar1"); + eReturn.sVar2= GetLocalString (oObject, sVarName+".sVar2"); + eReturn.sVar3= GetLocalString (oObject, sVarName+".sVar3"); + eReturn.sVar4= GetLocalString (oObject, sVarName+".sVar4"); + eReturn.sVar5= GetLocalString (oObject, sVarName+".sVar5"); + eReturn.sVar6= GetLocalString (oObject, sVarName+".sVar6"); + eReturn.sVar7= GetLocalString (oObject, sVarName+".sVar7"); + eReturn.sVar8= GetLocalString (oObject, sVarName+".sVar8"); + eReturn.sVar9= GetLocalString (oObject, sVarName+".sVar9"); + eReturn.lVar1= GetLocalLocation(oObject, sVarName+".lVar1"); + eReturn.lVar2= GetLocalLocation(oObject, sVarName+".lVar2"); + eReturn.lVar3= GetLocalLocation(oObject, sVarName+".lVar3"); + eReturn.lVar4= GetLocalLocation(oObject, sVarName+".lVar4"); + eReturn.lVar5= GetLocalLocation(oObject, sVarName+".lVar5"); + eReturn.lVar6= GetLocalLocation(oObject, sVarName+".lVar6"); + eReturn.lVar7= GetLocalLocation(oObject, sVarName+".lVar7"); + eReturn.lVar8= GetLocalLocation(oObject, sVarName+".lVar8"); + eReturn.lVar9= GetLocalLocation(oObject, sVarName+".lVar9"); + eReturn.fVar1= GetLocalFloat (oObject, sVarName+".fVar1"); + eReturn.fVar2= GetLocalFloat (oObject, sVarName+".fVar2"); + eReturn.fVar3= GetLocalFloat (oObject, sVarName+".fVar3"); + eReturn.fVar4= GetLocalFloat (oObject, sVarName+".fVar4"); + eReturn.fVar5= GetLocalFloat (oObject, sVarName+".fVar5"); + eReturn.fVar6= GetLocalFloat (oObject, sVarName+".fVar6"); + eReturn.fVar7= GetLocalFloat (oObject, sVarName+".fVar7"); + eReturn.fVar8= GetLocalFloat (oObject, sVarName+".fVar8"); + eReturn.fVar9= GetLocalFloat (oObject, sVarName+".fVar9"); + return eReturn; +} + +void DeleteLocalPRCEffect(object oObject, string sVarName) +{ + DeleteLocalInt (oObject, sVarName+".nEffectType"); + DeleteLocalInt (oObject, sVarName+".nEffectSubtype"); + DeleteLocalInt (oObject, sVarName+".nDurationType"); + DeleteLocalFloat (oObject, sVarName+".fDuration"); + DeleteLocalInt (oObject, sVarName+".nVersesRace"); + DeleteLocalInt (oObject, sVarName+".nVersesTraps"); + DeleteLocalInt (oObject, sVarName+".nVersesAlignmentOrder"); + DeleteLocalInt (oObject, sVarName+".nVersesAlignmentMoral"); + DeleteLocalInt (oObject, sVarName+".nLinkedCount"); + DeleteLocalInt (oObject, sVarName+".nLinkedID"); + DeleteLocalInt (oObject, sVarName+".nSpellID"); + DeleteLocalInt (oObject, sVarName+".nCasterLevel"); + DeleteLocalObject (oObject, sVarName+".oCaster"); + DeleteLocalInt (oObject, sVarName+".nMetamagic"); + DeleteLocalInt (oObject, sVarName+".nSpellLevel"); + DeleteLocalInt (oObject, sVarName+".nWeave"); + DeleteLocalInt (oObject, sVarName+".nVar1"); + DeleteLocalInt (oObject, sVarName+".nVar2"); + DeleteLocalInt (oObject, sVarName+".nVar3"); + DeleteLocalInt (oObject, sVarName+".nVar4"); + DeleteLocalInt (oObject, sVarName+".nVar5"); + DeleteLocalInt (oObject, sVarName+".nVar6"); + DeleteLocalInt (oObject, sVarName+".nVar7"); + DeleteLocalInt (oObject, sVarName+".nVar8"); + DeleteLocalInt (oObject, sVarName+".nVar9"); + DeleteLocalObject (oObject, sVarName+".oVar1"); + DeleteLocalObject (oObject, sVarName+".oVar2"); + DeleteLocalObject (oObject, sVarName+".oVar3"); + DeleteLocalObject (oObject, sVarName+".oVar1"); + DeleteLocalObject (oObject, sVarName+".oVar5"); + DeleteLocalObject (oObject, sVarName+".oVar6"); + DeleteLocalObject (oObject, sVarName+".oVar7"); + DeleteLocalObject (oObject, sVarName+".oVar8"); + DeleteLocalObject (oObject, sVarName+".oVar9"); + DeleteLocalString (oObject, sVarName+".sVar1"); + DeleteLocalString (oObject, sVarName+".sVar2"); + DeleteLocalString (oObject, sVarName+".sVar3"); + DeleteLocalString (oObject, sVarName+".sVar4"); + DeleteLocalString (oObject, sVarName+".sVar5"); + DeleteLocalString (oObject, sVarName+".sVar6"); + DeleteLocalString (oObject, sVarName+".sVar7"); + DeleteLocalString (oObject, sVarName+".sVar8"); + DeleteLocalString (oObject, sVarName+".sVar9"); + DeleteLocalLocation(oObject, sVarName+".lVar1"); + DeleteLocalLocation(oObject, sVarName+".lVar2"); + DeleteLocalLocation(oObject, sVarName+".lVar3"); + DeleteLocalLocation(oObject, sVarName+".lVar4"); + DeleteLocalLocation(oObject, sVarName+".lVar5"); + DeleteLocalLocation(oObject, sVarName+".lVar6"); + DeleteLocalLocation(oObject, sVarName+".lVar7"); + DeleteLocalLocation(oObject, sVarName+".lVar8"); + DeleteLocalLocation(oObject, sVarName+".lVar9"); + DeleteLocalFloat (oObject, sVarName+".fVar1"); + DeleteLocalFloat (oObject, sVarName+".fVar2"); + DeleteLocalFloat (oObject, sVarName+".fVar3"); + DeleteLocalFloat (oObject, sVarName+".fVar4"); + DeleteLocalFloat (oObject, sVarName+".fVar5"); + DeleteLocalFloat (oObject, sVarName+".fVar6"); + DeleteLocalFloat (oObject, sVarName+".fVar7"); + DeleteLocalFloat (oObject, sVarName+".fVar8"); + DeleteLocalFloat (oObject, sVarName+".fVar9"); + +} + +//default constructor +struct PRCeffect GetNewPRCEffectBase() +{ + //not sure if anything needs to be here at the moment + struct PRCeffect eReturn; + return eReturn; +} + +//new effect-related functions +string GetIdentifierFromEffect(effect eEffect) +{ + string sReturn; + sReturn += IntToString(GetEffectType(eEffect))+"_"; + sReturn += IntToString(GetEffectSubType(eEffect))+"_"; + sReturn += ObjectToString(GetEffectCreator(eEffect))+"_"; + sReturn += IntToString(GetEffectSpellId(eEffect))+"_"; + sReturn += IntToString(GetEffectDurationType(eEffect)); + return sReturn; +} + +//replacements of the bioware functions +//just one or two here + +// Get the first in-game effect on oCreature. +struct PRCeffect PRCGetFirstEffect(object oCreature) +{ + effect eEffect = GetFirstEffect(oCreature); + string sID = GetIdentifierFromEffect(eEffect); + struct PRCeffect prceEffect = GetLocalPRCEffect(oCreature, sID); + prceEffect.eEffect = eEffect; + return prceEffect; +} + +// Get the next in-game effect on oCreature. +struct PRCeffect PRCGetNextEffect(object oCreature) +{ + effect eEffect = GetNextEffect(oCreature); + string sID = GetIdentifierFromEffect(eEffect); + struct PRCeffect prceEffect = GetLocalPRCEffect(oCreature, sID); + prceEffect.eEffect = eEffect; + return prceEffect; +} + +// * Returns TRUE if eEffect is a valid effect. The effect must have been applied to +// * an object or else it will return FALSE +int PRCGetIsEffectValid(struct PRCeffect prceEffect) +{ + return GetIsEffectValid(prceEffect.eEffect); +} + +effect GetEffectOnObjectFromPRCEffect(struct PRCeffect prceEffect, object oObject) +{ + effect eTest; + //quick check, no loop + if(!GetHasSpellEffect(prceEffect.nSpellID, oObject)) + return eTest; + + eTest = GetFirstEffect(oObject); + while(GetIsEffectValid(eTest)) + { + if(GetEffectType(eTest) == prceEffect.nEffectType + && GetEffectSubType(eTest) == prceEffect.nEffectSubtype + && GetEffectCreator(eTest) == prceEffect.oCaster + && GetEffectSpellId(eTest) == prceEffect.nSpellID + && GetEffectDurationType(eTest) == prceEffect.nDurationType) + return eTest; + eTest = GetNextEffect(oObject); + } + return eTest; +} + +// Remove eEffect from oCreature. +// * No return value +void PRCRemoveEffect(object oCreature, struct PRCeffect eEffect) +{ + + +} + +// Get the duration type (DURATION_TYPE_*) of eEffect. +// * Return value if eEffect is not valid: -1 +int PRCGetEffectDurationType(struct PRCeffect prceEffect) +{ + return prceEffect.nDurationType; +} + +// Get the subtype (SUBTYPE_*) of eEffect. +// * Return value on error: 0 +int PRCGetEffectSubType(struct PRCeffect prceEffect) +{ + return prceEffect.nEffectSubtype; +} + +// Get the object that created eEffect. +// * Returns OBJECT_INVALID if eEffect is not a valid effect. +object PRCGetEffectCreator(struct PRCeffect prceEffect) +{ + return prceEffect.oCaster; +} + +// Get the effect type (EFFECT_TYPE_*) of eEffect. +// * Return value if eEffect is invalid: EFFECT_INVALIDEFFECT +int PRCGetEffectType(struct PRCeffect prceEffect) +{ + return prceEffect.nEffectType; +} + +// Get the spell (SPELL_*) that applied eSpellEffect. +// * Returns -1 if eSpellEffect was applied outside a spell script. +int PRCGetEffectSpellId(struct PRCeffect prceEffect) +{ + return prceEffect.nSpellID; +} + +// Set the subtype of eEffect to Magical and return eEffect. +// (Effects default to magical if the subtype is not set) +// Magical effects are removed by resting, and by dispel magic +struct PRCeffect PRCMagicalEffect(struct PRCeffect eEffect) +{ + eEffect.nEffectSubtype = SUBTYPE_MAGICAL; + eEffect.eEffect = MagicalEffect(eEffect.eEffect); + return eEffect; +} + +// Set the subtype of eEffect to Supernatural and return eEffect. +// (Effects default to magical if the subtype is not set) +// Permanent supernatural effects are not removed by resting +struct PRCeffect PRCSupernaturalEffect(struct PRCeffect eEffect) +{ + eEffect.nEffectSubtype = SUBTYPE_SUPERNATURAL; + eEffect.eEffect = SupernaturalEffect(eEffect.eEffect); + return eEffect; +} + +// Set the subtype of eEffect to Extraordinary and return eEffect. +// (Effects default to magical if the subtype is not set) +// Extraordinary effects are removed by resting, but not by dispel magic +struct PRCeffect PRCExtraordinaryEffect(struct PRCeffect eEffect) +{ + eEffect.nEffectSubtype = SUBTYPE_EXTRAORDINARY; + eEffect.eEffect = ExtraordinaryEffect(eEffect.eEffect); + return eEffect; +} + + +// Set eEffect to be versus a specific alignment. +// - eEffect +// - nLawChaos: ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_ALL +// - nGoodEvil: ALIGNMENT_GOOD/ALIGNMENT_EVIL/ALIGNMENT_ALL +struct PRCeffect PRCVersusAlignmentEffect(struct PRCeffect eEffect, int nLawChaos=ALIGNMENT_ALL, int nGoodEvil=ALIGNMENT_ALL) +{ + eEffect.nVersesAlignmentOrder = nLawChaos; + eEffect.nVersesAlignmentMoral = nGoodEvil; + eEffect.eEffect = VersusAlignmentEffect(eEffect.eEffect, nLawChaos, nGoodEvil); + return eEffect; +} + +// Set eEffect to be versus nRacialType. +// - eEffect +// - nRacialType: RACIAL_TYPE_* +struct PRCeffect PRCVersusRacialTypeEffect(struct PRCeffect eEffect, int nRacialType) +{ + eEffect.nVersesRace = nRacialType; + eEffect.eEffect = VersusRacialTypeEffect(eEffect.eEffect, nRacialType); + return eEffect; +} + +// Set eEffect to be versus traps. +struct PRCeffect PRCVersusTrapEffect(struct PRCeffect eEffect) +{ + eEffect.nVersesTraps = TRUE; + eEffect.eEffect = VersusTrapEffect(eEffect.eEffect); + return eEffect; +} + + +//actual constructors + +// Create a Heal effect. This should be applied as an instantaneous effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDamageToHeal < 0. +struct PRCeffect PRCEffectHeal(int nDamageToHeal) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nDamageToHeal; + eReturn.eEffect = EffectHeal(nDamageToHeal); + return eReturn; +} + +// Create a Damage effect +// - nDamageAmount: amount of damage to be dealt. This should be applied as an +// instantaneous effect. +// - nDamageType: DAMAGE_TYPE_* +// - nDamagePower: DAMAGE_POWER_* +struct PRCeffect PRCEffectDamage(int nDamageAmount, int nDamageType=DAMAGE_TYPE_MAGICAL, int nDamagePower=DAMAGE_POWER_NORMAL) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nDamageAmount; + eReturn.nVar2 = nDamageType; + eReturn.nVar3 = nDamagePower; + eReturn.eEffect = EffectDamage(nDamageAmount,nDamageType,nDamagePower); + return eReturn; +} + +// Create an Ability Increase effect +// - bAbilityToIncrease: ABILITY_* +struct PRCeffect PRCEffectAbilityIncrease(int nAbilityToIncrease, int nModifyBy) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nAbilityToIncrease; + eReturn.nVar2 = nModifyBy; + eReturn.eEffect = EffectAbilityIncrease(nAbilityToIncrease,nModifyBy); + return eReturn; +} + +// Create a Damage Resistance effect that removes the first nAmount points of +// damage of type nDamageType, up to nLimit (or infinite if nLimit is 0) +// - nDamageType: DAMAGE_TYPE_* +// - nAmount +// - nLimit +struct PRCeffect PRCEffectDamageResistance(int nDamageType, int nAmount, int nLimit=0) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nDamageType; + eReturn.nVar2 = nAmount; + eReturn.nVar3 = nLimit; + eReturn.eEffect = EffectDamageResistance(nDamageType,nAmount,nLimit); + return eReturn; +} + +// Create a Resurrection effect. This should be applied as an instantaneous effect. +struct PRCeffect PRCEffectResurrection() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectResurrection(); + return eReturn; +} + +// Create a Summon Creature effect. The creature is created and placed into the +// caller's party/faction. +// - sCreatureResref: Identifies the creature to be summoned +// - nVisualEffectId: VFX_* +// - fDelaySeconds: There can be delay between the visual effect being played, and the +// creature being added to the area +// - nUseAppearAnimation: should this creature play it's "appear" animation when it is +// summoned. If zero, it will just fade in somewhere near the target. If the value is 1 +// it will use the appear animation, and if it's 2 it will use appear2 (which doesn't exist for most creatures) +struct PRCeffect PRCEffectSummonCreature(string sCreatureResref, int nVisualEffectId=VFX_NONE, float fDelaySeconds=0.0f, int nUseAppearAnimation=0) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.sVar1 = sCreatureResref; + eReturn.nVar1 = nVisualEffectId; + eReturn.fVar1 = fDelaySeconds; + eReturn.nVar2 = nUseAppearAnimation; + eReturn.eEffect = EffectSummonCreature(sCreatureResref,nVisualEffectId,fDelaySeconds,nUseAppearAnimation); + return eReturn; +} + +// Create an AC Increase effect +// - nValue: size of AC increase +// - nModifyType: AC_*_BONUS +// - nDamageType: DAMAGE_TYPE_* +// * Default value for nDamageType should only ever be used in this function prototype. +struct PRCeffect PRCEffectACIncrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nValue; + eReturn.nVar2 = nModifyType; + eReturn.nVar3 = nDamageType; + eReturn.eEffect = EffectACIncrease(nValue,nModifyType,nDamageType); + return eReturn; +} + +// Create a Saving Throw Increase effect +// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) +// SAVING_THROW_ALL +// SAVING_THROW_FORT +// SAVING_THROW_REFLEX +// SAVING_THROW_WILL +// - nValue: size of the Saving Throw increase +// - nSaveType: SAVING_THROW_TYPE_* (e.g. SAVING_THROW_TYPE_ACID ) +struct PRCeffect PRCEffectSavingThrowIncrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nSave; + eReturn.nVar2 = nValue; + eReturn.nVar3 = nSaveType; + eReturn.eEffect = EffectSavingThrowIncrease(nSave,nValue,nSaveType); + return eReturn; +} + +// Create an Attack Increase effect +// - nBonus: size of attack bonus +// - nModifierType: ATTACK_BONUS_* +struct PRCeffect PRCEffectAttackIncrease(int nBonus, int nModifierType=ATTACK_BONUS_MISC) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nBonus; + eReturn.nVar2 = nModifierType; + eReturn.eEffect = EffectAttackIncrease(nBonus,nModifierType); + return eReturn; +} + +// Create a Damage Reduction effect +// - nAmount: amount of damage reduction +// - nDamagePower: DAMAGE_POWER_* +// - nLimit: How much damage the effect can absorb before disappearing. +// Set to zero for infinite +struct PRCeffect PRCEffectDamageReduction(int nAmount, int nDamagePower, int nLimit=0) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nAmount; + eReturn.nVar2 = nDamagePower; + eReturn.nVar3 = nLimit; + eReturn.eEffect = EffectDamageReduction(nAmount,nDamagePower,nLimit); + return eReturn; +} + +// Create a Damage Increase effect +// - nBonus: DAMAGE_BONUS_* +// - nDamageType: DAMAGE_TYPE_* +// NOTE! You *must* use the DAMAGE_BONUS_* constants! Using other values may +// result in odd behaviour. +struct PRCeffect PRCEffectDamageIncrease(int nBonus, int nDamageType=DAMAGE_TYPE_MAGICAL) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nBonus; + eReturn.nVar2 = nDamageType; + eReturn.eEffect = EffectDamageIncrease(nBonus,nDamageType); + return eReturn; +} + + +// Create an Entangle effect +// When applied, this effect will restrict the creature's movement and apply a +// (-2) to all attacks and a -4 to AC. +struct PRCeffect PRCEffectEntangle() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectEntangle(); + return eReturn; +} + +// Create a Death effect +// - nSpectacularDeath: if this is TRUE, the creature to which this effect is +// applied will die in an extraordinary fashion +// - nDisplayFeedback +struct PRCeffect PRCEffectDeath(int nSpectacularDeath=FALSE, int nDisplayFeedback=TRUE) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nSpectacularDeath; + eReturn.nVar2 = nDisplayFeedback; + eReturn.eEffect = EffectDeath(nSpectacularDeath,nDisplayFeedback); + return eReturn; +} + +// Create a Knockdown effect +// This effect knocks creatures off their feet, they will sit until the effect +// is removed. This should be applied as a temporary effect with a 3 second +// duration minimum (1 second to fall, 1 second sitting, 1 second to get up). +struct PRCeffect PRCEffectKnockdown() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectKnockdown(); + return eReturn; +} + +// Create a Curse effect. +// - nStrMod: strength modifier +// - nDexMod: dexterity modifier +// - nConMod: constitution modifier +// - nIntMod: intelligence modifier +// - nWisMod: wisdom modifier +// - nChaMod: charisma modifier +struct PRCeffect PRCEffectCurse(int nStrMod=1, int nDexMod=1, int nConMod=1, int nIntMod=1, int nWisMod=1, int nChaMod=1) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nStrMod; + eReturn.nVar2 = nDexMod; + eReturn.nVar3 = nConMod; + eReturn.nVar4 = nIntMod; + eReturn.nVar5 = nWisMod; + eReturn.nVar6 = nChaMod; + eReturn.eEffect = EffectCurse(nStrMod,nDexMod,nConMod,nIntMod,nWisMod,nChaMod); + return eReturn; +} + +// Create a Paralyze effect +struct PRCeffect PRCEffectParalyze() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectParalyze(); + return eReturn; +} + +// Create a Spell Immunity effect. +// There is a known bug with this function. There *must* be a parameter specified +// when this is called (even if the desired parameter is SPELL_ALL_SPELLS), +// otherwise an effect of type EFFECT_TYPE_INVALIDEFFECT will be returned. +// - nImmunityToSpell: SPELL_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nImmunityToSpell is +// invalid. +struct PRCeffect PRCEffectSpellImmunity(int nImmunityToSpell=SPELL_ALL_SPELLS) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nImmunityToSpell; + eReturn.eEffect = EffectSpellImmunity(nImmunityToSpell); + return eReturn; +} + +// Create a Deaf effect +struct PRCeffect PRCEffectDeaf() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectDeaf(); + return eReturn; +} + +// Create a Sleep effect +struct PRCeffect PRCEffectSleep() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectSleep(); + return eReturn; +} + +// Create a Charm effect +struct PRCeffect PRCEffectCharmed() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectCharmed(); + return eReturn; +} + +// Create a Confuse effect +struct PRCeffect PRCEffectConfused() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectConfused(); + return eReturn; +} + +// Create a Frighten effect +struct PRCeffect PRCEffectFrightened() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectFrightened(); + return eReturn; +} + +// Create a Dominate effect +struct PRCeffect PRCEffectDominated() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectDominated(); + return eReturn; +} + +// Create a Daze effect +struct PRCeffect PRCEffectDazed() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectDazed(); + return eReturn; +} + +// Create a Stun effect +struct PRCeffect PRCEffectStunned() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectSilence(); + return eReturn; +} + +// Create a Regenerate effect. +// - nAmount: amount of damage to be regenerated per time interval +// - fIntervalSeconds: length of interval in seconds +struct PRCeffect PRCEffectRegenerate(int nAmount, float fIntervalSeconds) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nAmount; + eReturn.fVar1 = fIntervalSeconds; + eReturn.eEffect = EffectRegenerate(nAmount,fIntervalSeconds); + return eReturn; +} + +// Create a Movement Speed Increase effect. +// - nPercentChange - range 0 through 99 +// eg. +// 0 = no change in speed +// 50 = 50% faster +// 99 = almost twice as fast +struct PRCeffect PRCEffectMovementSpeedIncrease(int nPercentChange) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nPercentChange; + eReturn.eEffect = EffectMovementSpeedIncrease(nPercentChange); + return eReturn; +} + +// Create an Area Of struct PRCeffect PRCEffect in the area of the creature it is applied to. +// If the scripts are not specified, default ones will be used. +struct PRCeffect PRCEffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript="") +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nAreaEffectId; + eReturn.sVar1 = sOnEnterScript; + eReturn.sVar2 = sHeartbeatScript; + eReturn.sVar3 = sOnExitScript; + eReturn.eEffect = EffectAreaOfEffect(nAreaEffectId,sOnEnterScript,sHeartbeatScript, sOnExitScript); + return eReturn; +} + +// * Create a Visual Effect that can be applied to an object. +// - nVisualEffectId +// - nMissEffect: if this is TRUE, a random vector near or past the target will +// be generated, on which to play the effect +struct PRCeffect PRCEffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nVisualEffectId; + eReturn.nVar2 = nMissEffect; + eReturn.eEffect = EffectVisualEffect(nVisualEffectId,nMissEffect); + return eReturn; +} + +// Link the two supplied effects, returning eChildEffect as a child of +// eParentEffect. +// Note: When applying linked effects if the target is immune to all valid +// effects all other effects will be removed as well. This means that if you +// apply a visual effect and a silence effect (in a link) and the target is +// immune to the silence effect that the visual effect will get removed as well. +// Visual Effects are not considered "valid" effects for the purposes of +// determining if an effect will be removed or not and as such should never be +// packaged *only* with other visual effects in a link. +struct PRCeffect PRCEffectLinkEffects(struct PRCeffect eChildEffect, struct PRCeffect eParentEffect ) +{ + //need to actually do something here + eParentEffect.eEffect = EffectLinkEffects(eChildEffect.eEffect, eParentEffect.eEffect); + return eParentEffect; +} + +// Create a Beam effect. +// - nBeamVisualEffect: VFX_BEAM_* +// - oEffector: the beam is emitted from this creature +// - nBodyPart: BODY_NODE_* +// - bMissEffect: If this is TRUE, the beam will fire to a random vector near or +// past the target +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nBeamVisualEffect is +// not valid. +struct PRCeffect PRCEffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nBeamVisualEffect; + eReturn.oVar1 = oEffector; + eReturn.nVar2 = nBodyPart; + eReturn.nVar3 = bMissEffect; + eReturn.eEffect = EffectBeam(nBeamVisualEffect, oEffector, nBodyPart, bMissEffect); + return eReturn; +} + +// Create a Spell Resistance Increase effect. +// - nValue: size of spell resistance increase +struct PRCeffect PRCEffectSpellResistanceIncrease(int nValue) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nValue; + eReturn.eEffect = EffectSpellResistanceIncrease(nValue); + return eReturn; +} + +// Create a Poison effect. +// - nPoisonType: POISON_* +struct PRCeffect PRCEffectPoison(int nPoisonType) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nPoisonType; + eReturn.eEffect = EffectPoison(nPoisonType); + return eReturn; +} + +// Create a Disease effect. +// - nDiseaseType: DISEASE_* +struct PRCeffect PRCEffectDisease(int nDiseaseType) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nDiseaseType; + eReturn.eEffect = EffectDisease(nDiseaseType); + return eReturn; +} + +// Create a Silence effect. +struct PRCeffect PRCEffectSilence() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectSilence(); + return eReturn; +} + +// Create a Haste effect. +struct PRCeffect PRCEffectHaste() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectHaste(); + return eReturn; +} + +// Create a Slow effect. +struct PRCeffect PRCEffectSlow() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectSlow(); + return eReturn; +} + +// Create an Immunity effect. +// - nImmunityType: IMMUNITY_TYPE_* +struct PRCeffect PRCEffectImmunity(int nImmunityType) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nImmunityType; + eReturn.eEffect = EffectImmunity(nImmunityType); + return eReturn; +} + +// Creates a Damage Immunity Increase effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +struct PRCeffect PRCEffectDamageImmunityIncrease(int nDamageType, int nPercentImmunity) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nDamageType; + eReturn.nVar2 = nPercentImmunity; + eReturn.eEffect = EffectDamageImmunityIncrease(nDamageType,nPercentImmunity); + return eReturn; +} + +// Create a Temporary Hitpoints effect. +// - nHitPoints: a positive integer +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nHitPoints < 0. +struct PRCeffect PRCEffectTemporaryHitpoints(int nHitPoints) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nHitPoints; + eReturn.eEffect = EffectTemporaryHitpoints(nHitPoints); + return eReturn; +} + +// Create a Skill Increase effect. +// - nSkill: SKILL_* +// - nValue +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +struct PRCeffect PRCEffectSkillIncrease(int nSkill, int nValue) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nSkill; + eReturn.nVar2 = nValue; + eReturn.eEffect = EffectSkillIncrease(nSkill,nValue); + return eReturn; +} + +// Create a Turned effect. +// Turned effects are supernatural by default. +struct PRCeffect PRCEffectTurned() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectTurned(); + return eReturn; +} + +// Create a Hit Point Change When Dying effect. +// - fHitPointChangePerRound: this can be positive or negative, but not zero. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if fHitPointChangePerRound is 0. +struct PRCeffect PRCEffectHitPointChangeWhenDying(float fHitPointChangePerRound) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.fVar1 = fHitPointChangePerRound; + eReturn.eEffect = EffectHitPointChangeWhenDying(fHitPointChangePerRound); + return eReturn; +} + +// Create an Ability Decrease effect. +// - nAbility: ABILITY_* +// - nModifyBy: This is the amount by which to decrement the ability +struct PRCeffect PRCEffectAbilityDecrease(int nAbility, int nModifyBy) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nAbility; + eReturn.nVar2 = nModifyBy; + eReturn.eEffect = EffectAbilityDecrease(nAbility,nModifyBy); + return eReturn; +} + +// Create an Attack Decrease effect. +// - nPenalty +// - nModifierType: ATTACK_BONUS_* +struct PRCeffect PRCEffectAttackDecrease(int nPenalty, int nModifierType=ATTACK_BONUS_MISC) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nPenalty; + eReturn.nVar2 = nModifierType; + eReturn.eEffect = EffectAttackDecrease(nPenalty,nModifierType); + return eReturn; +} + +// Create a Damage Decrease effect. +// - nPenalty +// - nDamageType: DAMAGE_TYPE_* +struct PRCeffect PRCEffectDamageDecrease(int nPenalty, int nDamageType=DAMAGE_TYPE_MAGICAL) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nPenalty; + eReturn.nVar2 = nDamageType; + eReturn.eEffect = EffectDamageDecrease(nPenalty,nDamageType); + return eReturn; +} + +// Create a Damage Immunity Decrease effect. +// - nDamageType: DAMAGE_TYPE_* +// - nPercentImmunity +struct PRCeffect PRCEffectDamageImmunityDecrease(int nDamageType, int nPercentImmunity) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nDamageType; + eReturn.nVar2 = nPercentImmunity; + eReturn.eEffect = EffectDamageImmunityDecrease(nDamageType,nPercentImmunity); + return eReturn; +} + +// Create an AC Decrease effect. +// - nValue +// - nModifyType: AC_* +// - nDamageType: DAMAGE_TYPE_* +// * Default value for nDamageType should only ever be used in this function prototype. +struct PRCeffect PRCEffectACDecrease(int nValue, int nModifyType=AC_DODGE_BONUS, int nDamageType=AC_VS_DAMAGE_TYPE_ALL) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nValue; + eReturn.nVar2 = nModifyType; + eReturn.nVar3 = nDamageType; + eReturn.eEffect = EffectACDecrease(nValue,nModifyType,nDamageType); + return eReturn; +} + +// Create a Movement Speed Decrease effect. +// - nPercentChange - range 0 through 99 +// eg. +// 0 = no change in speed +// 50 = 50% slower +// 99 = almost immobile +struct PRCeffect PRCEffectMovementSpeedDecrease(int nPercentChange) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nPercentChange; + eReturn.eEffect = EffectMovementSpeedIncrease(nPercentChange); + return eReturn; +} + +// Create a Saving Throw Decrease effect. +// - nSave: SAVING_THROW_* (not SAVING_THROW_TYPE_*) +// SAVING_THROW_ALL +// SAVING_THROW_FORT +// SAVING_THROW_REFLEX +// SAVING_THROW_WILL +// - nValue: size of the Saving Throw decrease +// - nSaveType: SAVING_THROW_TYPE_* (e.g. SAVING_THROW_TYPE_ACID ) +struct PRCeffect PRCEffectSavingThrowDecrease(int nSave, int nValue, int nSaveType=SAVING_THROW_TYPE_ALL) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nSave; + eReturn.nVar2 = nValue; + eReturn.nVar3 = nSaveType; + eReturn.eEffect = EffectSavingThrowDecrease(nSave,nValue,nSaveType); + return eReturn; +} + +// Create a Skill Decrease effect. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nSkill is invalid. +struct PRCeffect PRCEffectSkillDecrease(int nSkill, int nValue) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nSkill; + eReturn.nVar2 = nValue; + eReturn.eEffect = EffectSkillDecrease(nSkill,nValue); + return eReturn; +} + +// Create a Spell Resistance Decrease effect. +struct PRCeffect PRCEffectSpellResistanceDecrease(int nValue) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nValue; + eReturn.eEffect = EffectSpellResistanceDecrease(nValue); + return eReturn; +} + +// Create an Invisibility effect. +// - nInvisibilityType: INVISIBILITY_TYPE_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nInvisibilityType +// is invalid. +struct PRCeffect PRCEffectInvisibility(int nInvisibilityType) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nInvisibilityType; + eReturn.eEffect = EffectInvisibility(nInvisibilityType); + return eReturn; +} + +// Create a Concealment effect. +// - nPercentage: 1-100 inclusive +// - nMissChanceType: MISS_CHANCE_TYPE_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +struct PRCeffect PRCEffectConcealment(int nPercentage, int nMissType=MISS_CHANCE_TYPE_NORMAL) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nPercentage; + eReturn.nVar2 = nMissType; + eReturn.eEffect = EffectConcealment(nPercentage,nMissType); + return eReturn; +} + +// Create a Darkness effect. +struct PRCeffect PRCEffectDarkness() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectDarkness(); + return eReturn; +} + +// Create a Dispel Magic All effect. +// If no parameter is specified, USE_CREATURE_LEVEL will be used. This will +// cause the dispel effect to use the level of the creature that created the +// effect. +struct PRCeffect PRCEffectDispelMagicAll(int nCasterLevel=USE_CREATURE_LEVEL) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nCasterLevel; + eReturn.eEffect = EffectDispelMagicAll(nCasterLevel); + return eReturn; +} + +// Create an Ultravision effect. +struct PRCeffect PRCEffectUltravision() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectUltravision(); + return eReturn; +} + +// Create a Negative Level effect. +// - nNumLevels: the number of negative levels to apply. +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nNumLevels > 100. +struct PRCeffect PRCEffectNegativeLevel(int nNumLevels, int bHPBonus=FALSE) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nNumLevels; + eReturn.nVar2 = bHPBonus; + eReturn.eEffect = EffectNegativeLevel(nNumLevels,bHPBonus); + return eReturn; +} + +// Create a Polymorph effect. +struct PRCeffect PRCEffectPolymorph(int nPolymorphSelection, int nLocked=FALSE) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nPolymorphSelection; + eReturn.nVar2 = nLocked; + eReturn.eEffect = EffectPolymorph(nPolymorphSelection,nLocked); + return eReturn; +} + +// Create a Sanctuary effect. +// - nDifficultyClass: must be a non-zero, positive number +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nDifficultyClass <= 0. +struct PRCeffect PRCEffectSanctuary(int nDifficultyClass) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nDifficultyClass; + eReturn.eEffect = EffectSanctuary(nDifficultyClass); + return eReturn; +} + +// Create a True Seeing effect. +struct PRCeffect PRCEffectTrueSeeing() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectTrueSeeing(); + return eReturn; +} + +// Create a See Invisible effect. +struct PRCeffect PRCEffectSeeInvisible() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectSeeInvisible(); + return eReturn; +} + +// Create a Time Stop effect. +struct PRCeffect PRCEffectTimeStop() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectTimeStop(); + return eReturn; +} + +// Create a Blindness effect. +struct PRCeffect PRCEffectBlindness() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectBlindness(); + return eReturn; +} + +// Create a Spell Level Absorption effect. +// - nMaxSpellLevelAbsorbed: maximum spell level that will be absorbed by the +// effect +// - nTotalSpellLevelsAbsorbed: maximum number of spell levels that will be +// absorbed by the effect +// - nSpellSchool: SPELL_SCHOOL_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if: +// nMaxSpellLevelAbsorbed is not between -1 and 9 inclusive, or nSpellSchool +// is invalid. +struct PRCeffect PRCEffectSpellLevelAbsorption(int nMaxSpellLevelAbsorbed, int nTotalSpellLevelsAbsorbed=0, int nSpellSchool=SPELL_SCHOOL_GENERAL ) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nMaxSpellLevelAbsorbed; + eReturn.nVar2 = nTotalSpellLevelsAbsorbed; + eReturn.nVar3 = nSpellSchool; + eReturn.eEffect = EffectSpellLevelAbsorption(nMaxSpellLevelAbsorbed,nTotalSpellLevelsAbsorbed,nSpellSchool); + return eReturn; +} + +// Create a Dispel Magic Best effect. +// If no parameter is specified, USE_CREATURE_LEVEL will be used. This will +// cause the dispel effect to use the level of the creature that created the +// effect. +struct PRCeffect PRCEffectDispelMagicBest(int nCasterLevel=USE_CREATURE_LEVEL) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nCasterLevel; + eReturn.eEffect = EffectDispelMagicBest(nCasterLevel); + return eReturn; +} + +// Create a Miss Chance effect. +// - nPercentage: 1-100 inclusive +// - nMissChanceType: MISS_CHANCE_TYPE_* +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nPercentage < 1 or +// nPercentage > 100. +struct PRCeffect PRCEffectMissChance(int nPercentage, int nMissChanceType=MISS_CHANCE_TYPE_NORMAL) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nPercentage; + eReturn.nVar2 = nMissChanceType; + eReturn.eEffect = EffectMissChance(nPercentage,nMissChanceType); + return eReturn; +} + +// Create a Disappear/Appear effect. +// The object will "fly away" for the duration of the effect and will reappear +// at lLocation. +// - nAnimation determines which appear and disappear animations to use. Most creatures +// only have animation 1, although a few have 2 (like beholders) +struct PRCeffect PRCEffectDisappearAppear(location lLocation, int nAnimation=1) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.lVar1 = lLocation; + eReturn.nVar1 = nAnimation; + eReturn.eEffect = EffectDisappearAppear(lLocation,nAnimation); + return eReturn; +} + +// Create a Disappear effect to make the object "fly away" and then destroy +// itself. +// - nAnimation determines which appear and disappear animations to use. Most creatures +// only have animation 1, although a few have 2 (like beholders) +struct PRCeffect PRCEffectDisappear(int nAnimation=1) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nAnimation; + eReturn.eEffect = EffectDisappear(nAnimation); + return eReturn; +} + +// Create an Appear effect to make the object "fly in". +// - nAnimation determines which appear and disappear animations to use. Most creatures +// only have animation 1, although a few have 2 (like beholders) +struct PRCeffect PRCEffectAppear(int nAnimation=1) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nAnimation; + eReturn.eEffect = EffectAppear(nAnimation); + return eReturn; +} + +// Create a Modify Attacks effect to add attacks. +// - nAttacks: maximum is 5, even with the effect stacked +// * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT if nAttacks > 5. +struct PRCeffect PRCEffectModifyAttacks(int nAttacks) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectModifyAttacks(nAttacks); + return eReturn; +} + +// Create a Damage Shield effect which does (nDamageAmount + nRandomAmount) +// damage to any melee attacker on a successful attack of damage type nDamageType. +// - nDamageAmount: an integer value +// - nRandomAmount: DAMAGE_BONUS_* +// - nDamageType: DAMAGE_TYPE_* +// NOTE! You *must* use the DAMAGE_BONUS_* constants! Using other values may +// result in odd behaviour. +struct PRCeffect PRCEffectDamageShield(int nDamageAmount, int nRandomAmount, int nDamageType) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nDamageAmount; + eReturn.nVar2 = nRandomAmount; + eReturn.nVar3 = nDamageType; + eReturn.eEffect = EffectDamageShield(nDamageAmount,nRandomAmount,nDamageType); + return eReturn; +} + +// Create a Swarm effect. +// - nLooping: If this is TRUE, for the duration of the effect when one creature +// created by this effect dies, the next one in the list will be created. If +// the last creature in the list dies, we loop back to the beginning and +// sCreatureTemplate1 will be created, and so on... +// - sCreatureTemplate1 +// - sCreatureTemplate2 +// - sCreatureTemplate3 +// - sCreatureTemplate4 +struct PRCeffect PRCEffectSwarm(int nLooping, string sCreatureTemplate1, string sCreatureTemplate2="", string sCreatureTemplate3="", string sCreatureTemplate4="") +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nLooping; + eReturn.sVar1 = sCreatureTemplate1; + eReturn.sVar2 = sCreatureTemplate2; + eReturn.sVar3 = sCreatureTemplate3; + eReturn.sVar4 = sCreatureTemplate4; + eReturn.eEffect = EffectSwarm(nLooping,sCreatureTemplate1,sCreatureTemplate2,sCreatureTemplate3,sCreatureTemplate4); + return eReturn; +} + +// Create a Turn Resistance Decrease effect. +// - nHitDice: a positive number representing the number of hit dice for the +/// decrease +struct PRCeffect PRCEffectTurnResistanceDecrease(int nHitDice) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nHitDice; + eReturn.eEffect = EffectTurnResistanceDecrease(nHitDice); + return eReturn; +} + +// Create a Turn Resistance Increase effect. +// - nHitDice: a positive number representing the number of hit dice for the +// increase +struct PRCeffect PRCEffectTurnResistanceIncrease(int nHitDice) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nHitDice; + eReturn.eEffect = EffectTurnResistanceIncrease(nHitDice); + return eReturn; +} + +// returns an effect that will petrify the target +// * currently applies EffectParalyze and the stoneskin visual effect. +struct PRCeffect PRCEffectPetrify() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectPetrify(); + return eReturn; +} + +// returns an effect that is guaranteed to paralyze a creature. +// this effect is identical to EffectParalyze except that it cannot be resisted. +struct PRCeffect PRCEffectCutsceneParalyze() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectCutsceneParalyze(); + return eReturn; +} + +// Returns an effect that is guaranteed to dominate a creature +// Like EffectDominated but cannot be resisted +struct PRCeffect PRCEffectCutsceneDominated() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectCutsceneDominated(); + return eReturn; +} + +// Creates an effect that inhibits spells +// - nPercent - percentage of failure +// - nSpellSchool - the school of spells affected. +struct PRCeffect PRCEffectSpellFailure(int nPercent=100, int nSpellSchool=SPELL_SCHOOL_GENERAL) +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.nVar1 = nPercent; + eReturn.nVar2 = nSpellSchool; + eReturn.eEffect = EffectSpellFailure(nPercent,nSpellSchool); + return eReturn; +} + +// Returns an effect of type EFFECT_TYPE_ETHEREAL which works just like EffectSanctuary +// except that the observers get no saving throw +struct PRCeffect PRCEffectEthereal() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectEthereal(); + return eReturn; +} + +// Creates a cutscene ghost effect, this will allow creatures +// to pathfind through other creatures without bumping into them +// for the duration of the effect. +struct PRCeffect PRCEffectCutsceneGhost() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectCutsceneGhost(); + return eReturn; +} + +// Returns an effect that when applied will paralyze the target's legs, rendering +// them unable to walk but otherwise unpenalized. This effect cannot be resisted. +struct PRCeffect PRCEffectCutsceneImmobilize() +{ + struct PRCeffect eReturn = GetNewPRCEffectBase(); + eReturn.eEffect = EffectCutsceneImmobilize(); + return eReturn; +} \ No newline at end of file diff --git a/src/include/prc_inc_factotum.nss b/src/include/prc_inc_factotum.nss new file mode 100644 index 0000000..46be9c4 --- /dev/null +++ b/src/include/prc_inc_factotum.nss @@ -0,0 +1,279 @@ +/* + * Factotum general functions handling. + * + * @author Stratovarius - 2019.12.21 + */ + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Stores SpellIds for Arcane Dilettante + * + * @param oPC PC to target + * @param nSpell SpellID to store + */ +void PrepareArcDilSpell(object oPC, int nSpell); + +/** + * Returns TRUE if there are more spells to learn + * + * @param oPC PC to target + */ +void PrepareArcDilSpell(object oPC, int nSpell); + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const int FACTOTUM_SLOT_1 = 3887; +const int FACTOTUM_SLOT_2 = 3888; +const int FACTOTUM_SLOT_3 = 3889; +const int FACTOTUM_SLOT_4 = 3890; +const int FACTOTUM_SLOT_5 = 3891; +const int FACTOTUM_SLOT_6 = 3892; +const int FACTOTUM_SLOT_7 = 3893; +const int FACTOTUM_SLOT_8 = 3894; + +const int BRILLIANCE_SLOT_1 = 3917; +const int BRILLIANCE_SLOT_2 = 3918; +const int BRILLIANCE_SLOT_3 = 3919; + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + +#include "prc_inc_function" + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +void PrepareArcDilSpell(object oPC, int nSpell) +{ + if (DEBUG) DoDebug("PrepareArcDilSpell "+IntToString(nSpell)); + int nClass = GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC); + + // Done like this because you can only have a certain amount at a given level + if (!GetLocalInt(oPC, "ArcDilSpell1") && nClass >= 2) SetLocalInt(oPC, "ArcDilSpell1", nSpell); + else if (!GetLocalInt(oPC, "ArcDilSpell2") && nClass >= 4) SetLocalInt(oPC, "ArcDilSpell2", nSpell); + else if (!GetLocalInt(oPC, "ArcDilSpell3") && nClass >= 7) SetLocalInt(oPC, "ArcDilSpell3", nSpell); + else if (!GetLocalInt(oPC, "ArcDilSpell4") && nClass >= 9) SetLocalInt(oPC, "ArcDilSpell4", nSpell); + else if (!GetLocalInt(oPC, "ArcDilSpell5") && nClass >= 12) SetLocalInt(oPC, "ArcDilSpell5", nSpell); + else if (!GetLocalInt(oPC, "ArcDilSpell6") && nClass >= 14) SetLocalInt(oPC, "ArcDilSpell6", nSpell); + else if (!GetLocalInt(oPC, "ArcDilSpell7") && nClass >= 17) SetLocalInt(oPC, "ArcDilSpell7", nSpell); + else if (!GetLocalInt(oPC, "ArcDilSpell8") && nClass >= 20) SetLocalInt(oPC, "ArcDilSpell8", nSpell); +} + +int GetMaxLearnedArcDil(object oPC) +{ + int nClass = GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC); + int nCount, nMax; + if (GetLocalInt(oPC, "ArcDilSpell1")) nCount++; + if (GetLocalInt(oPC, "ArcDilSpell2")) nCount++; + if (GetLocalInt(oPC, "ArcDilSpell3")) nCount++; + if (GetLocalInt(oPC, "ArcDilSpell4")) nCount++; + if (GetLocalInt(oPC, "ArcDilSpell5")) nCount++; + if (GetLocalInt(oPC, "ArcDilSpell6")) nCount++; + if (GetLocalInt(oPC, "ArcDilSpell7")) nCount++; + if (GetLocalInt(oPC, "ArcDilSpell8")) nCount++; + + if(nClass >= 2) nMax++; + if(nClass >= 4) nMax++; + if(nClass >= 7) nMax++; + if(nClass >= 9) nMax++; + if(nClass >= 12) nMax++; + if(nClass >= 14) nMax++; + if(nClass >= 17) nMax++; + if(nClass >= 20) nMax++; + + int nReturn = FALSE; + if (nMax > nCount) nReturn = TRUE; + + return nReturn; +} + +int GetFactotumSlot(object oPC) +{ + int nSlot = PRCGetSpellId(); + if (nSlot == FACTOTUM_SLOT_1) return GetLocalInt(oPC, "ArcDilSpell1"); + if (nSlot == FACTOTUM_SLOT_2) return GetLocalInt(oPC, "ArcDilSpell2"); + if (nSlot == FACTOTUM_SLOT_3) return GetLocalInt(oPC, "ArcDilSpell3"); + if (nSlot == FACTOTUM_SLOT_4) return GetLocalInt(oPC, "ArcDilSpell4"); + if (nSlot == FACTOTUM_SLOT_5) return GetLocalInt(oPC, "ArcDilSpell5"); + if (nSlot == FACTOTUM_SLOT_6) return GetLocalInt(oPC, "ArcDilSpell6"); + if (nSlot == FACTOTUM_SLOT_7) return GetLocalInt(oPC, "ArcDilSpell7"); + if (nSlot == FACTOTUM_SLOT_8) return GetLocalInt(oPC, "ArcDilSpell8"); + + if (nSlot == BRILLIANCE_SLOT_1) return GetLocalInt(oPC, "CunningAbility1"); + if (nSlot == BRILLIANCE_SLOT_2) return GetLocalInt(oPC, "CunningAbility2"); + if (nSlot == BRILLIANCE_SLOT_3) return GetLocalInt(oPC, "CunningAbility3"); + + return -1; +} + +void CheckFactotumSlots(object oPC) +{ + int i; + for (i = 1; i <= 8; i++) + { + string sSpell = "ArcDilSpell"; + int nSpell = GetLocalInt(oPC, sSpell+IntToString(i)); + sSpell = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpell))); + + if (nSpell > 0) FloatingTextStringOnCreature("Arcane Dilettante Slot "+IntToString(i)+" is "+sSpell, oPC, FALSE); + } +} + +void CheckBrillianceSlots(object oPC) +{ + int i; + for (i = 1; i <= 3; i++) + { + string sSpell = "CunningAbility"; + int nSpell = GetLocalInt(oPC, sSpell+IntToString(i)); + sSpell = GetStringByStrRef(StringToInt(Get2DACache("feat", "FEAT", nSpell))); + + if (nSpell > 0) FloatingTextStringOnCreature("Cunning Brilliance Slot "+IntToString(i)+" is "+sSpell, oPC, FALSE); + } +} + +void ClearFactotumSlots(object oPC) +{ + int i; + for (i = 1; i <= 50; i++) + { + DeleteLocalInt(oPC, "ArcDilSpell"+IntToString(i)); + DeleteLocalInt(oPC, "CunningKnowledge"+IntToString(i)); + DeleteLocalInt(oPC, "CunningAbility"+IntToString(i)); + } + DeleteLocalInt(oPC, "CunningBrillianceCount"); + DeleteLocalInt(oPC, "CunningBrilliance"); +} + +int GetMaxArcDilSpellLevel(object oPC) +{ + int nClass = GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC); + int nMax = -1; + + if(nClass >= 18) nMax = 7; + else if(nClass >= 15) nMax = 6; + else if(nClass >= 13) nMax = 5; + else if(nClass >= 10) nMax = 4; + else if(nClass >= 8) nMax = 3; + else if(nClass >= 5) nMax = 2; + else if(nClass >= 3) nMax = 1; + else if(nClass >= 2) nMax = 0; + + if (DEBUG) DoDebug("GetMaxArcDilSpellLevel "+IntToString(nMax)); + + return nMax; +} + +void SetInspiration(object oPC) +{ + int nInspiration = 2; + int nClass = GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC); + + if(nClass >= 20) nInspiration = 10; + else if(nClass >= 17) nInspiration = 8; + else if(nClass >= 14) nInspiration = 7; + else if(nClass >= 11) nInspiration = 6; + else if(nClass >= 8) nInspiration = 5; + else if(nClass >= 5) nInspiration = 4; + else if(nClass >= 2) nInspiration = 3; + + int i, nFont; + for(i = FEAT_FONT_INSPIRATION_1; i <= FEAT_FONT_INSPIRATION_10; i++) + if(GetHasFeat(i, oPC)) nFont++; + + nInspiration += nFont * (1 + nFont + 1) / 2; + SetLocalInt(oPC, "InspirationPool", nInspiration); + FloatingTextStringOnCreature("Encounter begins with "+IntToString(nInspiration)+" inspiration", oPC, FALSE); +} + +void ClearInspiration(object oPC) +{ + DeleteLocalInt(oPC, "InspirationPool"); + FloatingTextStringOnCreature("Encounter ends, inspiration lost", oPC, FALSE); +} + +int ExpendInspiration(object oPC, int nCost) +{ + int nInspiration = GetLocalInt(oPC, "InspirationPool"); + if (nInspiration >= nCost) + { + SetLocalInt(oPC, "InspirationPool", nInspiration-nCost); + FloatingTextStringOnCreature("You have "+IntToString(nInspiration-nCost)+" inspiration remaining this encounter", oPC, FALSE); + return TRUE; + } + + FloatingTextStringOnCreature("You do not have enough inspiration", oPC, FALSE); + return FALSE; +} + +void MarkAbilitySaved(object oPC, int nAbil) +{ + if (DEBUG) DoDebug("MarkAbilitySaved nAbil is "+IntToString(nAbil)); + + if (!GetLocalInt(oPC, "CunningAbility1")) SetLocalInt(oPC, "CunningAbility1", nAbil); + else if (!GetLocalInt(oPC, "CunningAbility2")) SetLocalInt(oPC, "CunningAbility2", nAbil); + else if (!GetLocalInt(oPC, "CunningAbility3")) SetLocalInt(oPC, "CunningAbility3", nAbil); +} + +int GetIsAbilitySaved(object oPC, int nAbil) +{ + int i, nCount, nTest; + for (i = 0; i <= 3; i++) + { + nTest = GetLocalInt(oPC, "CunningAbility"+IntToString(i)); + if (nTest == nAbil) + nCount = TRUE; + } + if (DEBUG) DoDebug("GetIsAbilitySaved is "+IntToString(nCount)); + return nCount; +} + +void FactotumTriggerAbil(object oPC, int nAbil) +{ + object oSkin = GetPCSkin(oPC); + itemproperty ipIP; + if (nAbil == FEAT_BARBARIAN_RAGE) + ExecuteScript("NW_S1_BarbRage", oPC); + else if (nAbil == FEAT_BARBARIAN_ENDURANCE) + ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_BarbEndurance); + else if (nAbil == FEAT_SNEAK_ATTACK) + { + SetLocalInt(oPC, "FactotumSneak", TRUE); + DelayCommand(0.1, ExecuteScript("prc_sneak_att", oPC)); + DelayCommand(59.9, DeleteLocalInt(oPC, "FactotumSneak")); + DelayCommand(60.0, ExecuteScript("prc_sneak_att", oPC)); + } + else if (nAbil == 3665) // Mettle + { + SetLocalInt(oPC, "FactotumMettle", TRUE); + DelayCommand(60.0, DeleteLocalInt(oPC, "FactotumMettle")); + } + else if (nAbil == FEAT_CRUSADER_SMITE) + ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_CRUSADER_SMITE); + + IPSafeAddItemProperty(oSkin, ipIP, 60.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); +} + +/*void AddCunningBrillianceAbility(object oPC, int nAbil) +{ + if (DEBUG) DoDebug("AddCunningBrillianceAbility "+IntToString(nAbil)); + + object oSkin = GetPCSkin(oPC); + itemproperty ipIP; + + if (nAbil == FEAT_BARBARIAN_ENDURANCE) + ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_BarbEndurance); + else if (nAbil == FEAT_BARBARIAN_RAGE) + ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_RAGE); + + IPSafeAddItemProperty(oSkin, ipIP, 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + MarkAbilitySaved(oPC, nAbil); +} +*/ diff --git a/src/include/prc_inc_fork.nss b/src/include/prc_inc_fork.nss new file mode 100644 index 0000000..b6b672e --- /dev/null +++ b/src/include/prc_inc_fork.nss @@ -0,0 +1,847 @@ +/** + * @file + * + * Functions used to get weapon data. + * + * Mostly functions moved from prc_inc_combat. Used to get weapon data and weapon-related feats based on weapon type. + * Used by the combat system, weapon restriction/proficiency system and for deity weapons (eg. favoured soul) + */ + +//:: Test void +//void main (){} + +////////////////////////////////////////////////// +/* Constant definitions */ +////////////////////////////////////////////////// + +// used to select certain types of feats associated with a weapon. +const int FEAT_TYPE_FOCUS = 1; +const int FEAT_TYPE_SPECIALIZATION = 2; +const int FEAT_TYPE_EPIC_FOCUS = 3; +const int FEAT_TYPE_EPIC_SPECIALIZATION = 4; +const int FEAT_TYPE_IMPROVED_CRITICAL = 5; +const int FEAT_TYPE_OVERWHELMING_CRITICAL = 6; +const int FEAT_TYPE_DEVASTATING_CRITICAL = 7; +const int FEAT_TYPE_WEAPON_OF_CHOICE = 8; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Returns the appropriate weapon feat given a weapon type. + * + * Similar to GetFeatByWeaponType(), but should be a bit faster, because it does not use strings + * + * @param iWeaponType BASE_ITEM_* constant for the weapon + * @param iFeatType One of: + * FEAT_TYPE_FOCUS, + * FEAT_TYPE_EPIC_FOCUS, + * FEAT_TYPE_SPECIALIZATION, + * FEAT_TYPE_EPIC_SPECIALIZATION, + * FEAT_TYPE_OVERWHELMING_CRITICAL, + * FEAT_TYPE_DEVASTATING_CRITICAL, + * FEAT_TYPE_WEAPON_OF_CHOICE. + * + * @return Appropriate weapon feat number based on arguments. + */ +int GetFeatOfWeaponType(int iWeaponType, int iFeatType); + +/** + * Returns the weapon focus feat associated with the basetype of the weapon. + * + * Creature weapon types count as unarmed for this function. Will return unarmed strike weapon focus + * feat if base item is invalid. + * + * @param iWeaponType The BASE_TYPE_* of the weapon. + * @return The weapon focus feat associated with the weapon or unarmed if either a + * creature weapon or BASE_ITEM_INVALID is passed as argument. + */ +int GetFocusFeatOfWeaponType(int iWeaponType); + +/** + * Returns the weapon specialization feat associated with the basetype of the weapon + * + * Creature weapon types count as unarmed for this function. Will return unarmed strike weapon specialization + * feat if base item is invalid. + * + * @param iWeaponType The BASE_TYPE_* of the weapon. + * @return The weapon specialization feat associated with the weapon or unarmed if either a + * creature weapon or BASE_ITEM_INVALID is passed as argument. + */ +int GetSpecializationFeatOfWeaponType(int iWeaponType); + +/** + * Returns the epic weapon focus feat associated with the basetype of the weapon + * + * Creature weapon types count as unarmed for this function. Will return unarmed strike epic weapon focus + * feat if base item is invalid. + * + * @param iWeaponType The BASE_TYPE_* of the weapon. + * @return The epic weapon focus feat associated with the weapon or unarmed if either a + * creature weapon or BASE_ITEM_INVALID is passed as argument. + */ +int GetEpicFocusFeatOfWeaponType(int iWeaponType); + +/** + * Returns the epic weapon specialization feat associated with the basetype of the weapon + * + * Creature weapon types count as unarmed for this function. Will return unarmed strike epic weapon + * specialization feat if base item is invalid. + * + * @param iWeaponType The BASE_TYPE_* of the weapon. + * @return The epic weapon specialization feat associated with the weapon or unarmed + * if either a creature weapon or BASE_ITEM_INVALID is passed as argument. + */ +int GetEpicSpecializationFeatOfWeaponType(int iWeaponType); + +/** + * Returns the improved critical feat associated with the basetype of the weapon + * + * Creature weapon types count as unarmed for this function. Will return unarmed strike improved + * critical feat if base item is invalid. + * + * @param iWeaponType The BASE_TYPE_* of the weapon. + * @return The improved critical feat associated with the weapon or unarmed + * if either a creature weapon or BASE_ITEM_INVALID is passed as argument. + */ +int GetImprovedCriticalFeatOfWeaponType(int iWeaponType); + +/** + * Returns the overwhelming critical feat associated with the basetype of the weapon + * + * Creature weapon types count as unarmed for this function. Will return unarmed strike overwhelming + * critical feat if base item is invalid. + * + * @param iWeaponType The BASE_TYPE_* of the weapon. + * @return The overwhelming critical feat associated with the weapon or unarmed + * if either a creature weapon or BASE_ITEM_INVALID is passed as argument. + */ +int GetOverwhelmingCriticalFeatOfWeaponType(int iWeaponType); + +/** + * Returns the devastating critical feat associated with the basetype of the weapon + * + * Creature weapon types count as unarmed for this function. Will return unarmed strike devastating + * critical feat if base item is invalid. + * + * @param iWeaponType The BASE_TYPE_* of the weapon. + * @return The devastating critical feat associated with the weapon or unarmed + * if either a creature weapon or BASE_ITEM_INVALID is passed as argument. + */ +int GetDevastatingCriticalFeatOfWeaponType(int iWeaponType); + +/** + * Returns the weapon of choice feat associated with the basetype of the weapon + * + * Only melee weapons can be weapons of choice. Creature weapon types count as unarmed for this function, so + * will return -1 along with ranged weapons and invalid base items. + * + * @param iWeaponType The BASE_TYPE_* of the weapon. + * @return The devastating critical feat associated with a melee weapon or -1 if + * ranged or creature weapons, or BASE_ITEM_INVALID is passed as argument. + */ +int GetWeaponOfChoiceFeatOfWeaponType(int iWeaponType); + +/** + * Returns the value of the WeaponType column in baseitem.2da. + * + * The number returned will be zero for any Base Item type that is not a weapon, + * it will have different (positive) numbers for different weapon types + * + * @param iBaseType The BASE_TYPE_* of the weapon. + * @return the weapon type of the weapon or 0 if not a weapon + */ +int GetIsWeaponType(int iBaseType); + +/** + * Returns the value of the WeaponType column in baseitem.2da. + * + * The number returned will be zero for any item that is not a weapon, + * it will have different (positive) numbers for different weapon types + * + * @param oItem The item to test. + * @return the weapon type of the weapon or 0 if not a weapon + */ +int GetIsWeapon(object oItem); + +/** + * Gets the size of the weapon. Hard-coded some weapon types to allow large + * races double-wield two-handed weapons (imagine Ogre with two greatswords ;) ) + * + * @param oItem The item to test. + * @return The size of the weapon, -1 if oItem is not a weapon. + */ +int GetWeaponSize(object oWeapon); + +/** + * Returns TRUE if item is a shield + * + * @param oItem The item to test. + * @return TRUE if a shield, otherwise FALSE + */ +int GetIsShield(object oItem); + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + +#include "prc_misc_const" +#include "prc_feat_const" +#include "inc_2dacache" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Function Definitions */ +////////////////////////////////////////////////// + +int GetFeatOfWeaponType(int iWeaponType, int iFeatType) +{ + switch(iFeatType) + { + case FEAT_TYPE_FOCUS: return GetFocusFeatOfWeaponType(iWeaponType); + case FEAT_TYPE_SPECIALIZATION: return GetSpecializationFeatOfWeaponType(iWeaponType); + case FEAT_TYPE_EPIC_FOCUS: return GetEpicFocusFeatOfWeaponType(iWeaponType); + case FEAT_TYPE_EPIC_SPECIALIZATION: return GetEpicSpecializationFeatOfWeaponType(iWeaponType); + case FEAT_TYPE_IMPROVED_CRITICAL: return GetImprovedCriticalFeatOfWeaponType(iWeaponType); + case FEAT_TYPE_OVERWHELMING_CRITICAL: return GetOverwhelmingCriticalFeatOfWeaponType(iWeaponType); + case FEAT_TYPE_DEVASTATING_CRITICAL: return GetDevastatingCriticalFeatOfWeaponType(iWeaponType); + case FEAT_TYPE_WEAPON_OF_CHOICE: return GetWeaponOfChoiceFeatOfWeaponType(iWeaponType); + } + return -1; +} + +int GetFocusFeatOfWeaponType(int iWeaponType) +{ + switch(iWeaponType) + { + case BASE_ITEM_CBLUDGWEAPON: + case BASE_ITEM_CPIERCWEAPON: + case BASE_ITEM_CSLASHWEAPON: + case BASE_ITEM_CSLSHPRCWEAP: + case BASE_ITEM_INVALID: return FEAT_WEAPON_FOCUS_UNARMED_STRIKE; + case BASE_ITEM_BASTARDSWORD: return FEAT_WEAPON_FOCUS_BASTARD_SWORD; + case BASE_ITEM_BATTLEAXE: return FEAT_WEAPON_FOCUS_BATTLE_AXE; + case BASE_ITEM_CLUB: return FEAT_WEAPON_FOCUS_CLUB; + case BASE_ITEM_DAGGER: return FEAT_WEAPON_FOCUS_DAGGER; + case BASE_ITEM_DART: return FEAT_WEAPON_FOCUS_DART; + case BASE_ITEM_DIREMACE: return FEAT_WEAPON_FOCUS_DIRE_MACE; + case BASE_ITEM_DOUBLEAXE: return FEAT_WEAPON_FOCUS_DOUBLE_AXE; + case BASE_ITEM_DWARVENWARAXE: return FEAT_WEAPON_FOCUS_DWAXE; + case BASE_ITEM_GREATAXE: return FEAT_WEAPON_FOCUS_GREAT_AXE; + case BASE_ITEM_GREATSWORD: return FEAT_WEAPON_FOCUS_GREAT_SWORD; + case BASE_ITEM_HALBERD: return FEAT_WEAPON_FOCUS_HALBERD; + case BASE_ITEM_HANDAXE: return FEAT_WEAPON_FOCUS_HAND_AXE; + case BASE_ITEM_HEAVYCROSSBOW: return FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW; + case BASE_ITEM_HEAVYFLAIL: return FEAT_WEAPON_FOCUS_HEAVY_FLAIL; + case BASE_ITEM_KAMA: return FEAT_WEAPON_FOCUS_KAMA; + case BASE_ITEM_KATANA: return FEAT_WEAPON_FOCUS_KATANA; + case BASE_ITEM_KUKRI: return FEAT_WEAPON_FOCUS_KUKRI; + case BASE_ITEM_LIGHTCROSSBOW: return FEAT_WEAPON_FOCUS_LIGHT_CROSSBOW; + case BASE_ITEM_LIGHTFLAIL: return FEAT_WEAPON_FOCUS_LIGHT_FLAIL; + case BASE_ITEM_LIGHTHAMMER: return FEAT_WEAPON_FOCUS_LIGHT_HAMMER; + case BASE_ITEM_LIGHTMACE: return FEAT_WEAPON_FOCUS_LIGHT_MACE; + case BASE_ITEM_LONGBOW: return FEAT_WEAPON_FOCUS_LONGBOW; + case BASE_ITEM_LONGSWORD: return FEAT_WEAPON_FOCUS_LONG_SWORD; + case BASE_ITEM_MORNINGSTAR: return FEAT_WEAPON_FOCUS_MORNING_STAR; + case BASE_ITEM_QUARTERSTAFF: return FEAT_WEAPON_FOCUS_STAFF; + case BASE_ITEM_MAGICSTAFF: return FEAT_WEAPON_FOCUS_STAFF; + case BASE_ITEM_RAPIER: return FEAT_WEAPON_FOCUS_RAPIER; + case BASE_ITEM_SCIMITAR: return FEAT_WEAPON_FOCUS_SCIMITAR; + case BASE_ITEM_SCYTHE: return FEAT_WEAPON_FOCUS_SCYTHE; + case BASE_ITEM_SHORTBOW: return FEAT_WEAPON_FOCUS_SHORTBOW; + case BASE_ITEM_SHORTSPEAR: return FEAT_WEAPON_FOCUS_SPEAR; + case BASE_ITEM_SHORTSWORD: return FEAT_WEAPON_FOCUS_SHORT_SWORD; + case BASE_ITEM_SHURIKEN: return FEAT_WEAPON_FOCUS_SHURIKEN; + case BASE_ITEM_SICKLE: return FEAT_WEAPON_FOCUS_SICKLE; + case BASE_ITEM_SLING: return FEAT_WEAPON_FOCUS_SLING; + case BASE_ITEM_THROWINGAXE: return FEAT_WEAPON_FOCUS_THROWING_AXE; + case BASE_ITEM_TRIDENT: return FEAT_WEAPON_FOCUS_TRIDENT; + case BASE_ITEM_TWOBLADEDSWORD: return FEAT_WEAPON_FOCUS_TWO_BLADED_SWORD; + case BASE_ITEM_WARHAMMER: return FEAT_WEAPON_FOCUS_WAR_HAMMER; + case BASE_ITEM_WHIP: return FEAT_WEAPON_FOCUS_WHIP; + + //:: new item types + case BASE_ITEM_DOUBLE_SCIMITAR: return FEAT_WEAPON_FOCUS_DOUBLE_SCIMITAR; + case BASE_ITEM_EAGLE_CLAW: return FEAT_WEAPON_FOCUS_EAGLE_CLAW; + case BASE_ITEM_ELVEN_COURTBLADE: return FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE; + case BASE_ITEM_ELVEN_LIGHTBLADE: return FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE; + case BASE_ITEM_ELVEN_THINBLADE: return FEAT_WEAPON_FOCUS_ELVEN_THINBLADE; + case BASE_ITEM_FALCHION: return FEAT_WEAPON_FOCUS_FALCHION; + case BASE_ITEM_GOAD: return FEAT_WEAPON_FOCUS_GOAD; + case BASE_ITEM_HEAVY_MACE: return FEAT_WEAPON_FOCUS_HEAVY_MACE; + case BASE_ITEM_HEAVY_PICK: return FEAT_WEAPON_FOCUS_HEAVY_PICK; + case BASE_ITEM_KATAR: return FEAT_WEAPON_FOCUS_KATAR; + case BASE_ITEM_LIGHT_LANCE: return FEAT_WEAPON_FOCUS_LIGHT_LANCE; + case BASE_ITEM_LIGHT_PICK: return FEAT_WEAPON_FOCUS_LIGHT_PICK; + case BASE_ITEM_MAUL: return FEAT_WEAPON_FOCUS_MAUL; + case BASE_ITEM_NUNCHAKU: return FEAT_WEAPON_FOCUS_NUNCHAKU; + case BASE_ITEM_SAI: return FEAT_WEAPON_FOCUS_SAI; + case BASE_ITEM_SAP: return FEAT_WEAPON_FOCUS_SAP; + } + return -1; +} + +int GetSpecializationFeatOfWeaponType(int iWeaponType) +{ + switch(iWeaponType) + { + case BASE_ITEM_CBLUDGWEAPON: + case BASE_ITEM_CPIERCWEAPON: + case BASE_ITEM_CSLASHWEAPON: + case BASE_ITEM_CSLSHPRCWEAP: + case BASE_ITEM_INVALID: return FEAT_WEAPON_SPECIALIZATION_UNARMED_STRIKE; + case BASE_ITEM_BASTARDSWORD: return FEAT_WEAPON_SPECIALIZATION_BASTARD_SWORD; + case BASE_ITEM_BATTLEAXE: return FEAT_WEAPON_SPECIALIZATION_BATTLE_AXE; + case BASE_ITEM_CLUB: return FEAT_WEAPON_SPECIALIZATION_CLUB; + case BASE_ITEM_DAGGER: return FEAT_WEAPON_SPECIALIZATION_DAGGER; + case BASE_ITEM_DART: return FEAT_WEAPON_SPECIALIZATION_DART; + case BASE_ITEM_DIREMACE: return FEAT_WEAPON_SPECIALIZATION_DIRE_MACE; + case BASE_ITEM_DOUBLEAXE: return FEAT_WEAPON_SPECIALIZATION_DOUBLE_AXE; + case BASE_ITEM_DWARVENWARAXE: return FEAT_WEAPON_SPECIALIZATION_DWAXE ; + case BASE_ITEM_GREATAXE: return FEAT_WEAPON_SPECIALIZATION_GREAT_AXE; + case BASE_ITEM_GREATSWORD: return FEAT_WEAPON_SPECIALIZATION_GREAT_SWORD; + case BASE_ITEM_HALBERD: return FEAT_WEAPON_SPECIALIZATION_HALBERD; + case BASE_ITEM_HANDAXE: return FEAT_WEAPON_SPECIALIZATION_HAND_AXE; + case BASE_ITEM_HEAVYCROSSBOW: return FEAT_WEAPON_SPECIALIZATION_HEAVY_CROSSBOW; + case BASE_ITEM_HEAVYFLAIL: return FEAT_WEAPON_SPECIALIZATION_HEAVY_FLAIL; + case BASE_ITEM_KAMA: return FEAT_WEAPON_SPECIALIZATION_KAMA; + case BASE_ITEM_KATANA: return FEAT_WEAPON_SPECIALIZATION_KATANA; + case BASE_ITEM_KUKRI: return FEAT_WEAPON_SPECIALIZATION_KUKRI; + case BASE_ITEM_LIGHTCROSSBOW: return FEAT_WEAPON_SPECIALIZATION_LIGHT_CROSSBOW; + case BASE_ITEM_LIGHTFLAIL: return FEAT_WEAPON_SPECIALIZATION_LIGHT_FLAIL; + case BASE_ITEM_LIGHTHAMMER: return FEAT_WEAPON_SPECIALIZATION_LIGHT_HAMMER; + case BASE_ITEM_LIGHTMACE: return FEAT_WEAPON_SPECIALIZATION_LIGHT_MACE; + case BASE_ITEM_LONGBOW: return FEAT_WEAPON_SPECIALIZATION_LONGBOW; + case BASE_ITEM_LONGSWORD: return FEAT_WEAPON_SPECIALIZATION_LONG_SWORD; + case BASE_ITEM_MORNINGSTAR: return FEAT_WEAPON_SPECIALIZATION_MORNING_STAR; + case BASE_ITEM_QUARTERSTAFF: return FEAT_WEAPON_SPECIALIZATION_STAFF; + case BASE_ITEM_MAGICSTAFF: return FEAT_WEAPON_SPECIALIZATION_STAFF; + case BASE_ITEM_RAPIER: return FEAT_WEAPON_SPECIALIZATION_RAPIER; + case BASE_ITEM_SCIMITAR: return FEAT_WEAPON_SPECIALIZATION_SCIMITAR; + case BASE_ITEM_SCYTHE: return FEAT_WEAPON_SPECIALIZATION_SCYTHE; + case BASE_ITEM_SHORTBOW: return FEAT_WEAPON_SPECIALIZATION_SHORTBOW; + case BASE_ITEM_SHORTSPEAR: return FEAT_WEAPON_SPECIALIZATION_SPEAR; + case BASE_ITEM_SHORTSWORD: return FEAT_WEAPON_SPECIALIZATION_SHORT_SWORD; + case BASE_ITEM_SHURIKEN: return FEAT_WEAPON_SPECIALIZATION_SHURIKEN; + case BASE_ITEM_SICKLE: return FEAT_WEAPON_SPECIALIZATION_SICKLE; + case BASE_ITEM_SLING: return FEAT_WEAPON_SPECIALIZATION_SLING; + case BASE_ITEM_THROWINGAXE: return FEAT_WEAPON_SPECIALIZATION_THROWING_AXE; + case BASE_ITEM_TRIDENT: return FEAT_WEAPON_SPECIALIZATION_TRIDENT; + case BASE_ITEM_TWOBLADEDSWORD: return FEAT_WEAPON_SPECIALIZATION_TWO_BLADED_SWORD; + case BASE_ITEM_WARHAMMER: return FEAT_WEAPON_SPECIALIZATION_WAR_HAMMER; + case BASE_ITEM_WHIP: return FEAT_WEAPON_SPECIALIZATION_WHIP; + + //:: new item types + case BASE_ITEM_DOUBLE_SCIMITAR: return FEAT_WEAPON_SPECIALIZATION_DBL_SCIMITAR; + case BASE_ITEM_EAGLE_CLAW: return FEAT_WEAPON_SPECIALIZATION_EAGLE_CLAW; + case BASE_ITEM_ELVEN_LIGHTBLADE: return FEAT_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE; + case BASE_ITEM_ELVEN_THINBLADE: return FEAT_WEAPON_SPECIALIZATION_ELVEN_THINBLADE; + case BASE_ITEM_ELVEN_COURTBLADE: return FEAT_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE; + case BASE_ITEM_FALCHION: return FEAT_WEAPON_SPECIALIZATION_FALCHION; + case BASE_ITEM_GOAD: return FEAT_WEAPON_SPECIALIZATION_GOAD; + case BASE_ITEM_HEAVY_MACE: return FEAT_WEAPON_SPECIALIZATION_HEAVY_MACE; + case BASE_ITEM_HEAVY_PICK: return FEAT_WEAPON_SPECIALIZATION_HEAVY_PICK; + case BASE_ITEM_KATAR: return FEAT_WEAPON_SPECIALIZATION_KATAR; + case BASE_ITEM_LIGHT_LANCE: return FEAT_WEAPON_SPECIALIZATION_LIGHT_LANCE; + case BASE_ITEM_LIGHT_PICK: return FEAT_WEAPON_SPECIALIZATION_LIGHT_PICK; + case BASE_ITEM_MAUL: return FEAT_WEAPON_SPECIALIZATION_MAUL; + case BASE_ITEM_NUNCHAKU: return FEAT_WEAPON_SPECIALIZATION_NUNCHAKU; + case BASE_ITEM_SAI: return FEAT_WEAPON_SPECIALIZATION_SAI; + case BASE_ITEM_SAP: return FEAT_WEAPON_SPECIALIZATION_SAP; + } + return -1; +} + +int GetEpicFocusFeatOfWeaponType(int iWeaponType) +{ + switch(iWeaponType) + { + case BASE_ITEM_CBLUDGWEAPON: + case BASE_ITEM_CPIERCWEAPON: + case BASE_ITEM_CSLASHWEAPON: + case BASE_ITEM_CSLSHPRCWEAP: + case BASE_ITEM_INVALID: return FEAT_EPIC_WEAPON_FOCUS_UNARMED; + case BASE_ITEM_BASTARDSWORD: return FEAT_EPIC_WEAPON_FOCUS_BASTARDSWORD; + case BASE_ITEM_BATTLEAXE: return FEAT_EPIC_WEAPON_FOCUS_BATTLEAXE; + case BASE_ITEM_CLUB: return FEAT_EPIC_WEAPON_FOCUS_CLUB; + case BASE_ITEM_DAGGER: return FEAT_EPIC_WEAPON_FOCUS_DAGGER; + case BASE_ITEM_DART: return FEAT_EPIC_WEAPON_FOCUS_DART; + case BASE_ITEM_DIREMACE: return FEAT_EPIC_WEAPON_FOCUS_DIREMACE; + case BASE_ITEM_DOUBLEAXE: return FEAT_EPIC_WEAPON_FOCUS_DOUBLEAXE; + case BASE_ITEM_DWARVENWARAXE: return FEAT_EPIC_WEAPON_FOCUS_DWAXE; + case BASE_ITEM_GREATAXE: return FEAT_EPIC_WEAPON_FOCUS_GREATAXE; + case BASE_ITEM_GREATSWORD: return FEAT_EPIC_WEAPON_FOCUS_GREATSWORD; + case BASE_ITEM_HALBERD: return FEAT_EPIC_WEAPON_FOCUS_HALBERD; + case BASE_ITEM_HANDAXE: return FEAT_EPIC_WEAPON_FOCUS_HANDAXE; + case BASE_ITEM_HEAVYCROSSBOW: return FEAT_EPIC_WEAPON_FOCUS_HEAVYCROSSBOW; + case BASE_ITEM_HEAVYFLAIL: return FEAT_EPIC_WEAPON_FOCUS_HEAVYFLAIL; + case BASE_ITEM_KAMA: return FEAT_EPIC_WEAPON_FOCUS_KAMA; + case BASE_ITEM_KATANA: return FEAT_EPIC_WEAPON_FOCUS_KATANA; + case BASE_ITEM_KUKRI: return FEAT_EPIC_WEAPON_FOCUS_KUKRI; + case BASE_ITEM_LIGHTCROSSBOW: return FEAT_EPIC_WEAPON_FOCUS_LIGHTCROSSBOW; + case BASE_ITEM_LIGHTFLAIL: return FEAT_EPIC_WEAPON_FOCUS_LIGHTFLAIL; + case BASE_ITEM_LIGHTHAMMER: return FEAT_EPIC_WEAPON_FOCUS_LIGHTHAMMER; + case BASE_ITEM_LIGHTMACE: return FEAT_EPIC_WEAPON_FOCUS_LIGHTMACE; + case BASE_ITEM_LONGBOW: return FEAT_EPIC_WEAPON_FOCUS_LONGBOW; + case BASE_ITEM_LONGSWORD: return FEAT_EPIC_WEAPON_FOCUS_LONGSWORD; + case BASE_ITEM_MORNINGSTAR: return FEAT_EPIC_WEAPON_FOCUS_MORNINGSTAR; + case BASE_ITEM_QUARTERSTAFF: return FEAT_EPIC_WEAPON_FOCUS_QUARTERSTAFF; + case BASE_ITEM_MAGICSTAFF: return FEAT_EPIC_WEAPON_FOCUS_QUARTERSTAFF; + case BASE_ITEM_RAPIER: return FEAT_EPIC_WEAPON_FOCUS_RAPIER; + case BASE_ITEM_SCIMITAR: return FEAT_EPIC_WEAPON_FOCUS_SCIMITAR; + case BASE_ITEM_SCYTHE: return FEAT_EPIC_WEAPON_FOCUS_SCYTHE; + case BASE_ITEM_SHORTBOW: return FEAT_EPIC_WEAPON_FOCUS_SHORTBOW; + case BASE_ITEM_SHORTSPEAR: return FEAT_EPIC_WEAPON_FOCUS_SHORTSPEAR; + case BASE_ITEM_SHORTSWORD: return FEAT_EPIC_WEAPON_FOCUS_SHORTSWORD; + case BASE_ITEM_SHURIKEN: return FEAT_EPIC_WEAPON_FOCUS_SHURIKEN; + case BASE_ITEM_SICKLE: return FEAT_EPIC_WEAPON_FOCUS_SICKLE; + case BASE_ITEM_SLING: return FEAT_EPIC_WEAPON_FOCUS_SLING; + case BASE_ITEM_THROWINGAXE: return FEAT_EPIC_WEAPON_FOCUS_THROWINGAXE; + case BASE_ITEM_TRIDENT: return FEAT_EPIC_WEAPON_FOCUS_TRIDENT; + case BASE_ITEM_TWOBLADEDSWORD: return FEAT_EPIC_WEAPON_FOCUS_TWOBLADEDSWORD; + case BASE_ITEM_WARHAMMER: return FEAT_EPIC_WEAPON_FOCUS_WARHAMMER; + case BASE_ITEM_WHIP: return FEAT_EPIC_WEAPON_FOCUS_WHIP; + + //:: new item types + case BASE_ITEM_DOUBLE_SCIMITAR: return FEAT_EPIC_WEAPON_FOCUS_DBL_SCIMITAR; + case BASE_ITEM_EAGLE_CLAW: return FEAT_EPIC_WEAPON_FOCUS_EAGLE_CLAW; + case BASE_ITEM_ELVEN_LIGHTBLADE: return FEAT_EPIC_WEAPON_FOCUS_ELVEN_LIGHTBLADE; + case BASE_ITEM_ELVEN_THINBLADE: return FEAT_EPIC_WEAPON_FOCUS_ELVEN_THINBLADE; + case BASE_ITEM_ELVEN_COURTBLADE: return FEAT_EPIC_WEAPON_FOCUS_ELVEN_COURTBLADE; + case BASE_ITEM_FALCHION: return FEAT_EPIC_WEAPON_FOCUS_FALCHION; + case BASE_ITEM_GOAD: return FEAT_EPIC_WEAPON_FOCUS_GOAD; + case BASE_ITEM_HEAVY_MACE: return FEAT_EPIC_WEAPON_FOCUS_HEAVY_MACE; + case BASE_ITEM_HEAVY_PICK: return FEAT_EPIC_WEAPON_FOCUS_HEAVY_PICK; + case BASE_ITEM_KATAR: return FEAT_EPIC_WEAPON_FOCUS_KATAR; + case BASE_ITEM_LIGHT_LANCE: return FEAT_EPIC_WEAPON_FOCUS_LIGHT_LANCE; + case BASE_ITEM_LIGHT_PICK: return FEAT_EPIC_WEAPON_FOCUS_LIGHT_PICK; + case BASE_ITEM_MAUL: return FEAT_EPIC_WEAPON_FOCUS_MAUL; + case BASE_ITEM_NUNCHAKU: return FEAT_EPIC_WEAPON_FOCUS_NUNCHAKU; + case BASE_ITEM_SAI: return FEAT_EPIC_WEAPON_FOCUS_SAI; + case BASE_ITEM_SAP: return FEAT_EPIC_WEAPON_FOCUS_SAP; + } + return -1; +} + +int GetEpicSpecializationFeatOfWeaponType(int iWeaponType) +{ + switch(iWeaponType) + { + case BASE_ITEM_CBLUDGWEAPON: + case BASE_ITEM_CPIERCWEAPON: + case BASE_ITEM_CSLASHWEAPON: + case BASE_ITEM_CSLSHPRCWEAP: + case BASE_ITEM_INVALID: return FEAT_EPIC_WEAPON_SPECIALIZATION_UNARMED; + case BASE_ITEM_BASTARDSWORD: return FEAT_EPIC_WEAPON_SPECIALIZATION_BASTARDSWORD; + case BASE_ITEM_BATTLEAXE: return FEAT_EPIC_WEAPON_SPECIALIZATION_BATTLEAXE; + case BASE_ITEM_CLUB: return FEAT_EPIC_WEAPON_SPECIALIZATION_CLUB; + case BASE_ITEM_DAGGER: return FEAT_EPIC_WEAPON_SPECIALIZATION_DAGGER; + case BASE_ITEM_DART: return FEAT_EPIC_WEAPON_SPECIALIZATION_DART; + case BASE_ITEM_DIREMACE: return FEAT_EPIC_WEAPON_SPECIALIZATION_DIREMACE; + case BASE_ITEM_DOUBLEAXE: return FEAT_EPIC_WEAPON_SPECIALIZATION_DOUBLEAXE; + case BASE_ITEM_DWARVENWARAXE: return FEAT_EPIC_WEAPON_SPECIALIZATION_DWAXE; + case BASE_ITEM_GREATAXE: return FEAT_EPIC_WEAPON_SPECIALIZATION_GREATAXE; + case BASE_ITEM_GREATSWORD: return FEAT_EPIC_WEAPON_SPECIALIZATION_GREATSWORD; + case BASE_ITEM_HALBERD: return FEAT_EPIC_WEAPON_SPECIALIZATION_HALBERD; + case BASE_ITEM_HANDAXE: return FEAT_EPIC_WEAPON_SPECIALIZATION_HANDAXE; + case BASE_ITEM_HEAVYCROSSBOW: return FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVYCROSSBOW; + case BASE_ITEM_HEAVYFLAIL: return FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVYFLAIL; + case BASE_ITEM_KAMA: return FEAT_EPIC_WEAPON_SPECIALIZATION_KAMA; + case BASE_ITEM_KATANA: return FEAT_EPIC_WEAPON_SPECIALIZATION_KATANA; + case BASE_ITEM_KUKRI: return FEAT_EPIC_WEAPON_SPECIALIZATION_KUKRI; + case BASE_ITEM_LIGHTCROSSBOW: return FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTCROSSBOW; + case BASE_ITEM_LIGHTFLAIL: return FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTFLAIL; + case BASE_ITEM_LIGHTHAMMER: return FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTHAMMER; + case BASE_ITEM_LIGHTMACE: return FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTMACE; + case BASE_ITEM_LONGBOW: return FEAT_EPIC_WEAPON_SPECIALIZATION_LONGBOW; // motu99: Longbow and Longsword were interchanged. Corrected that + case BASE_ITEM_LONGSWORD: return FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD; + case BASE_ITEM_MORNINGSTAR: return FEAT_EPIC_WEAPON_SPECIALIZATION_MORNINGSTAR; + case BASE_ITEM_QUARTERSTAFF: return FEAT_EPIC_WEAPON_SPECIALIZATION_QUARTERSTAFF; + case BASE_ITEM_MAGICSTAFF: return FEAT_EPIC_WEAPON_SPECIALIZATION_QUARTERSTAFF; + case BASE_ITEM_RAPIER: return FEAT_EPIC_WEAPON_SPECIALIZATION_RAPIER; + case BASE_ITEM_SCIMITAR: return FEAT_EPIC_WEAPON_SPECIALIZATION_SCIMITAR; + case BASE_ITEM_SCYTHE: return FEAT_EPIC_WEAPON_SPECIALIZATION_SCYTHE; + case BASE_ITEM_SHORTBOW: return FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTBOW; + case BASE_ITEM_SHORTSPEAR: return FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTSPEAR; + case BASE_ITEM_SHORTSWORD: return FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTSWORD; + case BASE_ITEM_SHURIKEN: return FEAT_EPIC_WEAPON_SPECIALIZATION_SHURIKEN; + case BASE_ITEM_SICKLE: return FEAT_EPIC_WEAPON_SPECIALIZATION_SICKLE; + case BASE_ITEM_SLING: return FEAT_EPIC_WEAPON_SPECIALIZATION_SLING; + case BASE_ITEM_THROWINGAXE: return FEAT_EPIC_WEAPON_SPECIALIZATION_THROWINGAXE; + case BASE_ITEM_TRIDENT: return FEAT_EPIC_WEAPON_SPECIALIZATION_TRIDENT; + case BASE_ITEM_TWOBLADEDSWORD: return FEAT_EPIC_WEAPON_SPECIALIZATION_TWOBLADEDSWORD; + case BASE_ITEM_WARHAMMER: return FEAT_EPIC_WEAPON_SPECIALIZATION_WARHAMMER; + case BASE_ITEM_WHIP: return FEAT_EPIC_WEAPON_SPECIALIZATION_WHIP; + + //:: new item types + case BASE_ITEM_DOUBLE_SCIMITAR: return FEAT_EPIC_WEAPON_SPECIALIZATION_DBL_SCIMITAR; + case BASE_ITEM_EAGLE_CLAW: return FEAT_EPIC_WEAPON_SPECIALIZATION_EAGLE_CLAW; + case BASE_ITEM_ELVEN_LIGHTBLADE: return FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE; + case BASE_ITEM_ELVEN_THINBLADE: return FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_THINBLADE; + case BASE_ITEM_ELVEN_COURTBLADE: return FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE; + case BASE_ITEM_FALCHION: return FEAT_EPIC_WEAPON_SPECIALIZATION_FALCHION; + case BASE_ITEM_GOAD: return FEAT_EPIC_WEAPON_SPECIALIZATION_GOAD; + case BASE_ITEM_HEAVY_MACE: return FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_MACE; + case BASE_ITEM_HEAVY_PICK: return FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_PICK; + case BASE_ITEM_KATAR: return FEAT_EPIC_WEAPON_SPECIALIZATION_KATAR; + case BASE_ITEM_LIGHT_LANCE: return FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_LANCE; + case BASE_ITEM_LIGHT_PICK: return FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_PICK; + case BASE_ITEM_MAUL: return FEAT_EPIC_WEAPON_SPECIALIZATION_MAUL; + case BASE_ITEM_NUNCHAKU: return FEAT_EPIC_WEAPON_SPECIALIZATION_NUNCHAKU; + case BASE_ITEM_SAI: return FEAT_EPIC_WEAPON_SPECIALIZATION_SAI; + case BASE_ITEM_SAP: return FEAT_EPIC_WEAPON_SPECIALIZATION_SAP; + } + return -1; +} + +int GetImprovedCriticalFeatOfWeaponType(int iWeaponType) +{ + switch(iWeaponType) + { + case BASE_ITEM_CBLUDGWEAPON: + case BASE_ITEM_CPIERCWEAPON: + case BASE_ITEM_CSLASHWEAPON: + case BASE_ITEM_CSLSHPRCWEAP: + case BASE_ITEM_INVALID: return FEAT_IMPROVED_CRITICAL_UNARMED_STRIKE; + case BASE_ITEM_BASTARDSWORD: return FEAT_IMPROVED_CRITICAL_BASTARD_SWORD; + case BASE_ITEM_BATTLEAXE: return FEAT_IMPROVED_CRITICAL_BATTLE_AXE; + case BASE_ITEM_CLUB: return FEAT_IMPROVED_CRITICAL_CLUB; + case BASE_ITEM_DAGGER: return FEAT_IMPROVED_CRITICAL_DAGGER; + case BASE_ITEM_DART: return FEAT_IMPROVED_CRITICAL_DART; + case BASE_ITEM_DIREMACE: return FEAT_IMPROVED_CRITICAL_DIRE_MACE; + case BASE_ITEM_DOUBLEAXE: return FEAT_IMPROVED_CRITICAL_DOUBLE_AXE; + case BASE_ITEM_DWARVENWARAXE: return FEAT_IMPROVED_CRITICAL_DWAXE ; + case BASE_ITEM_GREATAXE: return FEAT_IMPROVED_CRITICAL_GREAT_AXE; + case BASE_ITEM_GREATSWORD: return FEAT_IMPROVED_CRITICAL_GREAT_SWORD; + case BASE_ITEM_HALBERD: return FEAT_IMPROVED_CRITICAL_HALBERD; + case BASE_ITEM_HANDAXE: return FEAT_IMPROVED_CRITICAL_HAND_AXE; + case BASE_ITEM_HEAVYCROSSBOW: return FEAT_IMPROVED_CRITICAL_HEAVY_CROSSBOW; + case BASE_ITEM_HEAVYFLAIL: return FEAT_IMPROVED_CRITICAL_HEAVY_FLAIL; + case BASE_ITEM_KAMA: return FEAT_IMPROVED_CRITICAL_KAMA; + case BASE_ITEM_KATANA: return FEAT_IMPROVED_CRITICAL_KATANA; + case BASE_ITEM_KUKRI: return FEAT_IMPROVED_CRITICAL_KUKRI; + case BASE_ITEM_LIGHTCROSSBOW: return FEAT_IMPROVED_CRITICAL_LIGHT_CROSSBOW; + case BASE_ITEM_LIGHTFLAIL: return FEAT_IMPROVED_CRITICAL_LIGHT_FLAIL; + case BASE_ITEM_LIGHTHAMMER: return FEAT_IMPROVED_CRITICAL_LIGHT_HAMMER; + case BASE_ITEM_LIGHTMACE: return FEAT_IMPROVED_CRITICAL_LIGHT_MACE; + case BASE_ITEM_LONGBOW: return FEAT_IMPROVED_CRITICAL_LONGBOW; + case BASE_ITEM_LONGSWORD: return FEAT_IMPROVED_CRITICAL_LONG_SWORD; + case BASE_ITEM_MORNINGSTAR: return FEAT_IMPROVED_CRITICAL_MORNING_STAR; + case BASE_ITEM_QUARTERSTAFF: return FEAT_IMPROVED_CRITICAL_STAFF; + case BASE_ITEM_MAGICSTAFF: return FEAT_IMPROVED_CRITICAL_STAFF; + case BASE_ITEM_RAPIER: return FEAT_IMPROVED_CRITICAL_RAPIER; + case BASE_ITEM_SCIMITAR: return FEAT_IMPROVED_CRITICAL_SCIMITAR; + case BASE_ITEM_SCYTHE: return FEAT_IMPROVED_CRITICAL_SCYTHE; + case BASE_ITEM_SHORTBOW: return FEAT_IMPROVED_CRITICAL_SHORTBOW; + case BASE_ITEM_SHORTSPEAR: return FEAT_IMPROVED_CRITICAL_SPEAR; + case BASE_ITEM_SHORTSWORD: return FEAT_IMPROVED_CRITICAL_SHORT_SWORD; + case BASE_ITEM_SHURIKEN: return FEAT_IMPROVED_CRITICAL_SHURIKEN; + case BASE_ITEM_SICKLE: return FEAT_IMPROVED_CRITICAL_SICKLE; + case BASE_ITEM_SLING: return FEAT_IMPROVED_CRITICAL_SLING; + case BASE_ITEM_THROWINGAXE: return FEAT_IMPROVED_CRITICAL_THROWING_AXE; + case BASE_ITEM_TRIDENT: return FEAT_IMPROVED_CRITICAL_TRIDENT; + case BASE_ITEM_TWOBLADEDSWORD: return FEAT_IMPROVED_CRITICAL_TWO_BLADED_SWORD; + case BASE_ITEM_WARHAMMER: return FEAT_IMPROVED_CRITICAL_WAR_HAMMER; + case BASE_ITEM_WHIP: return FEAT_IMPROVED_CRITICAL_WHIP; + + //:: new item types + case BASE_ITEM_DOUBLE_SCIMITAR: return FEAT_IMPROVED_CRITICAL_DBL_SCIMITAR; + case BASE_ITEM_EAGLE_CLAW: return FEAT_IMPROVED_CRITICAL_EAGLE_CLAW; + case BASE_ITEM_ELVEN_LIGHTBLADE: return FEAT_IMPROVED_CRITICAL_ELVEN_LIGHTBLADE; + case BASE_ITEM_ELVEN_THINBLADE: return FEAT_IMPROVED_CRITICAL_ELVEN_THINBLADE; + case BASE_ITEM_ELVEN_COURTBLADE: return FEAT_IMPROVED_CRITICAL_ELVEN_COURTBLADE; + case BASE_ITEM_FALCHION: return FEAT_IMPROVED_CRITICAL_FALCHION; + case BASE_ITEM_GOAD: return FEAT_IMPROVED_CRITICAL_GOAD; + case BASE_ITEM_HEAVY_MACE: return FEAT_IMPROVED_CRITICAL_HEAVY_MACE; + case BASE_ITEM_HEAVY_PICK: return FEAT_IMPROVED_CRITICAL_HEAVY_PICK; + case BASE_ITEM_KATAR: return FEAT_IMPROVED_CRITICAL_KATAR; + case BASE_ITEM_LIGHT_LANCE: return FEAT_IMPROVED_CRITICAL_LIGHT_LANCE; + case BASE_ITEM_LIGHT_PICK: return FEAT_IMPROVED_CRITICAL_LIGHT_PICK; + case BASE_ITEM_MAUL: return FEAT_IMPROVED_CRITICAL_MAUL; + case BASE_ITEM_NUNCHAKU: return FEAT_IMPROVED_CRITICAL_NUNCHAKU; + case BASE_ITEM_SAI: return FEAT_IMPROVED_CRITICAL_SAI; + case BASE_ITEM_SAP: return FEAT_IMPROVED_CRITICAL_SAP; + } + return -1; +} + +int GetOverwhelmingCriticalFeatOfWeaponType(int iWeaponType) +{ + switch(iWeaponType) + { + case BASE_ITEM_CBLUDGWEAPON: + case BASE_ITEM_CPIERCWEAPON: + case BASE_ITEM_CSLASHWEAPON: + case BASE_ITEM_CSLSHPRCWEAP: + case BASE_ITEM_INVALID: return FEAT_EPIC_OVERWHELMING_CRITICAL_UNARMED; + case BASE_ITEM_BASTARDSWORD: return FEAT_EPIC_OVERWHELMING_CRITICAL_BASTARDSWORD; + case BASE_ITEM_BATTLEAXE: return FEAT_EPIC_OVERWHELMING_CRITICAL_BATTLEAXE; + case BASE_ITEM_CLUB: return FEAT_EPIC_OVERWHELMING_CRITICAL_CLUB; + case BASE_ITEM_DAGGER: return FEAT_EPIC_OVERWHELMING_CRITICAL_DAGGER; + case BASE_ITEM_DART: return FEAT_EPIC_OVERWHELMING_CRITICAL_DART; + case BASE_ITEM_DIREMACE: return FEAT_EPIC_OVERWHELMING_CRITICAL_DIREMACE; + case BASE_ITEM_DOUBLEAXE: return FEAT_EPIC_OVERWHELMING_CRITICAL_DOUBLEAXE; + case BASE_ITEM_DWARVENWARAXE: return FEAT_EPIC_OVERWHELMING_CRITICAL_DWAXE ; + case BASE_ITEM_GREATAXE: return FEAT_EPIC_OVERWHELMING_CRITICAL_GREATAXE; + case BASE_ITEM_GREATSWORD: return FEAT_EPIC_OVERWHELMING_CRITICAL_GREATSWORD; + case BASE_ITEM_HALBERD: return FEAT_EPIC_OVERWHELMING_CRITICAL_HALBERD; + case BASE_ITEM_HANDAXE: return FEAT_EPIC_OVERWHELMING_CRITICAL_HANDAXE; + case BASE_ITEM_HEAVYCROSSBOW: return FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVYCROSSBOW; + case BASE_ITEM_HEAVYFLAIL: return FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVYFLAIL; + case BASE_ITEM_KAMA: return FEAT_EPIC_OVERWHELMING_CRITICAL_KAMA; + case BASE_ITEM_KATANA: return FEAT_EPIC_OVERWHELMING_CRITICAL_KATANA; + case BASE_ITEM_KUKRI: return FEAT_EPIC_OVERWHELMING_CRITICAL_KUKRI; + case BASE_ITEM_LIGHTCROSSBOW: return FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTCROSSBOW; + case BASE_ITEM_LIGHTFLAIL: return FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTFLAIL; + case BASE_ITEM_LIGHTHAMMER: return FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTHAMMER; + case BASE_ITEM_LIGHTMACE: return FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTMACE; + case BASE_ITEM_LONGBOW: return FEAT_EPIC_OVERWHELMING_CRITICAL_LONGBOW; + case BASE_ITEM_LONGSWORD: return FEAT_EPIC_OVERWHELMING_CRITICAL_LONGSWORD; + case BASE_ITEM_MORNINGSTAR: return FEAT_EPIC_OVERWHELMING_CRITICAL_MORNINGSTAR; + case BASE_ITEM_QUARTERSTAFF: return FEAT_EPIC_OVERWHELMING_CRITICAL_QUARTERSTAFF; + case BASE_ITEM_MAGICSTAFF: return FEAT_EPIC_OVERWHELMING_CRITICAL_QUARTERSTAFF; + case BASE_ITEM_RAPIER: return FEAT_EPIC_OVERWHELMING_CRITICAL_RAPIER; + case BASE_ITEM_SCIMITAR: return FEAT_EPIC_OVERWHELMING_CRITICAL_SCIMITAR; + case BASE_ITEM_SCYTHE: return FEAT_EPIC_OVERWHELMING_CRITICAL_SCYTHE; + case BASE_ITEM_SHORTBOW: return FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTBOW; + case BASE_ITEM_SHORTSPEAR: return FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTSPEAR; + case BASE_ITEM_SHORTSWORD: return FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTSWORD; + case BASE_ITEM_SHURIKEN: return FEAT_EPIC_OVERWHELMING_CRITICAL_SHURIKEN; + case BASE_ITEM_SICKLE: return FEAT_EPIC_OVERWHELMING_CRITICAL_SICKLE; + case BASE_ITEM_SLING: return FEAT_EPIC_OVERWHELMING_CRITICAL_SLING; + case BASE_ITEM_THROWINGAXE: return FEAT_EPIC_OVERWHELMING_CRITICAL_THROWINGAXE; + case BASE_ITEM_TRIDENT: return FEAT_EPIC_OVERWHELMING_CRITICAL_TRIDENT; + case BASE_ITEM_TWOBLADEDSWORD: return FEAT_EPIC_OVERWHELMING_CRITICAL_TWOBLADEDSWORD; + case BASE_ITEM_WARHAMMER: return FEAT_EPIC_OVERWHELMING_CRITICAL_WARHAMMER; + case BASE_ITEM_WHIP: return FEAT_EPIC_OVERWHELMING_CRITICAL_WHIP; + + //:: new item types + case BASE_ITEM_DOUBLE_SCIMITAR: return FEAT_EPIC_OVERWHELMING_CRITICAL_DBL_SCIMITAR; + case BASE_ITEM_EAGLE_CLAW: return FEAT_EPIC_OVERWHELMING_CRITICAL_EAGLE_CLAW; + case BASE_ITEM_ELVEN_LIGHTBLADE: return FEAT_EPIC_OVERWHELMING_CRITICAL_ELVEN_LIGHTBLADE; + case BASE_ITEM_ELVEN_THINBLADE: return FEAT_EPIC_OVERWHELMING_CRITICAL_ELVEN_THINBLADE; + case BASE_ITEM_ELVEN_COURTBLADE: return FEAT_EPIC_OVERWHELMING_CRITICAL_ELVEN_COURTBLADE; + case BASE_ITEM_FALCHION: return FEAT_EPIC_OVERWHELMING_CRITICAL_FALCHION; + case BASE_ITEM_GOAD: return FEAT_EPIC_OVERWHELMING_CRITICAL_GOAD; + case BASE_ITEM_HEAVY_MACE: return FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVY_MACE; + case BASE_ITEM_HEAVY_PICK: return FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVY_PICK; + case BASE_ITEM_KATAR: return FEAT_EPIC_OVERWHELMING_CRITICAL_KATAR; + case BASE_ITEM_LIGHT_LANCE: return FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHT_LANCE; + case BASE_ITEM_LIGHT_PICK: return FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHT_PICK; + case BASE_ITEM_MAUL: return FEAT_EPIC_OVERWHELMING_CRITICAL_MAUL; + case BASE_ITEM_NUNCHAKU: return FEAT_EPIC_OVERWHELMING_CRITICAL_NUNCHAKU; + case BASE_ITEM_SAI: return FEAT_EPIC_OVERWHELMING_CRITICAL_SAI; + case BASE_ITEM_SAP: return FEAT_EPIC_OVERWHELMING_CRITICAL_SAP; + } + return -1; +} + +int GetDevastatingCriticalFeatOfWeaponType(int iWeaponType) +{ + switch(iWeaponType) + { + case BASE_ITEM_CBLUDGWEAPON: + case BASE_ITEM_CPIERCWEAPON: + case BASE_ITEM_CSLASHWEAPON: + case BASE_ITEM_CSLSHPRCWEAP: + case BASE_ITEM_INVALID: return FEAT_EPIC_DEVASTATING_CRITICAL_UNARMED; + case BASE_ITEM_BASTARDSWORD: return FEAT_EPIC_DEVASTATING_CRITICAL_BASTARDSWORD; + case BASE_ITEM_BATTLEAXE: return FEAT_EPIC_DEVASTATING_CRITICAL_BATTLEAXE; + case BASE_ITEM_CLUB: return FEAT_EPIC_DEVASTATING_CRITICAL_CLUB; + case BASE_ITEM_DAGGER: return FEAT_EPIC_DEVASTATING_CRITICAL_DAGGER; + case BASE_ITEM_DART: return FEAT_EPIC_DEVASTATING_CRITICAL_DART; + case BASE_ITEM_DIREMACE: return FEAT_EPIC_DEVASTATING_CRITICAL_DIREMACE; + case BASE_ITEM_DOUBLEAXE: return FEAT_EPIC_DEVASTATING_CRITICAL_DOUBLEAXE; + case BASE_ITEM_DWARVENWARAXE: return FEAT_EPIC_DEVASTATING_CRITICAL_DWAXE ; + case BASE_ITEM_GREATAXE: return FEAT_EPIC_DEVASTATING_CRITICAL_GREATAXE; + case BASE_ITEM_GREATSWORD: return FEAT_EPIC_DEVASTATING_CRITICAL_GREATSWORD; + case BASE_ITEM_HALBERD: return FEAT_EPIC_DEVASTATING_CRITICAL_HALBERD; + case BASE_ITEM_HANDAXE: return FEAT_EPIC_DEVASTATING_CRITICAL_HANDAXE; + case BASE_ITEM_HEAVYCROSSBOW: return FEAT_EPIC_DEVASTATING_CRITICAL_HEAVYCROSSBOW; + case BASE_ITEM_HEAVYFLAIL: return FEAT_EPIC_DEVASTATING_CRITICAL_HEAVYFLAIL; + case BASE_ITEM_KAMA: return FEAT_EPIC_DEVASTATING_CRITICAL_KAMA; + case BASE_ITEM_KATANA: return FEAT_EPIC_DEVASTATING_CRITICAL_KATANA; + case BASE_ITEM_KUKRI: return FEAT_EPIC_DEVASTATING_CRITICAL_KUKRI; + case BASE_ITEM_LIGHTCROSSBOW: return FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTCROSSBOW; + case BASE_ITEM_LIGHTFLAIL: return FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTFLAIL; + case BASE_ITEM_LIGHTHAMMER: return FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTHAMMER; + case BASE_ITEM_LIGHTMACE: return FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTMACE; + case BASE_ITEM_LONGBOW: return FEAT_EPIC_DEVASTATING_CRITICAL_LONGBOW; + case BASE_ITEM_LONGSWORD: return FEAT_EPIC_DEVASTATING_CRITICAL_LONGSWORD; + case BASE_ITEM_MORNINGSTAR: return FEAT_EPIC_DEVASTATING_CRITICAL_MORNINGSTAR; + case BASE_ITEM_QUARTERSTAFF: return FEAT_EPIC_DEVASTATING_CRITICAL_QUARTERSTAFF; + case BASE_ITEM_MAGICSTAFF: return FEAT_EPIC_DEVASTATING_CRITICAL_QUARTERSTAFF; + case BASE_ITEM_RAPIER: return FEAT_EPIC_DEVASTATING_CRITICAL_RAPIER; + case BASE_ITEM_SCIMITAR: return FEAT_EPIC_DEVASTATING_CRITICAL_SCIMITAR; + case BASE_ITEM_SCYTHE: return FEAT_EPIC_DEVASTATING_CRITICAL_SCYTHE; + case BASE_ITEM_SHORTBOW: return FEAT_EPIC_DEVASTATING_CRITICAL_SHORTBOW; + case BASE_ITEM_SHORTSPEAR: return FEAT_EPIC_DEVASTATING_CRITICAL_SHORTSPEAR; + case BASE_ITEM_SHORTSWORD: return FEAT_EPIC_DEVASTATING_CRITICAL_SHORTSWORD; + case BASE_ITEM_SHURIKEN: return FEAT_EPIC_DEVASTATING_CRITICAL_SHURIKEN; + case BASE_ITEM_SICKLE: return FEAT_EPIC_DEVASTATING_CRITICAL_SICKLE; + case BASE_ITEM_SLING: return FEAT_EPIC_DEVASTATING_CRITICAL_SLING; + case BASE_ITEM_THROWINGAXE: return FEAT_EPIC_DEVASTATING_CRITICAL_THROWINGAXE; + case BASE_ITEM_TRIDENT: return FEAT_EPIC_DEVASTATING_CRITICAL_TRIDENT; + case BASE_ITEM_TWOBLADEDSWORD: return FEAT_EPIC_DEVASTATING_CRITICAL_TWOBLADEDSWORD; + case BASE_ITEM_WARHAMMER: return FEAT_EPIC_DEVASTATING_CRITICAL_WARHAMMER; + case BASE_ITEM_WHIP: return FEAT_EPIC_DEVASTATING_CRITICAL_WHIP; + + //:: new item types + case BASE_ITEM_DOUBLE_SCIMITAR: return FEAT_EPIC_DEVASTATING_CRITICAL_DBL_SCIMITAR; + case BASE_ITEM_EAGLE_CLAW: return FEAT_EPIC_DEVASTATING_CRITICAL_EAGLE_CLAW; + case BASE_ITEM_ELVEN_LIGHTBLADE: return FEAT_EPIC_DEVASTATING_CRITICAL_ELVEN_LIGHTBLADE; + case BASE_ITEM_ELVEN_THINBLADE: return FEAT_EPIC_DEVASTATING_CRITICAL_ELVEN_THINBLADE; + case BASE_ITEM_ELVEN_COURTBLADE: return FEAT_EPIC_DEVASTATING_CRITICAL_ELVEN_COURTBLADE; + case BASE_ITEM_FALCHION: return FEAT_EPIC_DEVASTATING_CRITICAL_FALCHION; + case BASE_ITEM_GOAD: return FEAT_EPIC_DEVASTATING_CRITICAL_GOAD; + case BASE_ITEM_HEAVY_MACE: return FEAT_EPIC_DEVASTATING_CRITICAL_HEAVY_MACE; + case BASE_ITEM_HEAVY_PICK: return FEAT_EPIC_DEVASTATING_CRITICAL_HEAVY_PICK; + case BASE_ITEM_KATAR: return FEAT_EPIC_DEVASTATING_CRITICAL_KATAR; + case BASE_ITEM_LIGHT_LANCE: return FEAT_EPIC_DEVASTATING_CRITICAL_LIGHT_LANCE; + case BASE_ITEM_LIGHT_PICK: return FEAT_EPIC_DEVASTATING_CRITICAL_LIGHT_PICK; + case BASE_ITEM_MAUL: return FEAT_EPIC_DEVASTATING_CRITICAL_MAUL; + case BASE_ITEM_NUNCHAKU: return FEAT_EPIC_DEVASTATING_CRITICAL_NUNCHAKU; + case BASE_ITEM_SAI: return FEAT_EPIC_DEVASTATING_CRITICAL_SAI; + case BASE_ITEM_SAP: return FEAT_EPIC_DEVASTATING_CRITICAL_SAP; + } + return -1; +} + +int GetWeaponOfChoiceFeatOfWeaponType(int iWeaponType) +{ + switch(iWeaponType) + { + case BASE_ITEM_BASTARDSWORD: return FEAT_WEAPON_OF_CHOICE_BASTARDSWORD; + case BASE_ITEM_BATTLEAXE: return FEAT_WEAPON_OF_CHOICE_BATTLEAXE; + case BASE_ITEM_CLUB: return FEAT_WEAPON_OF_CHOICE_CLUB; + case BASE_ITEM_DAGGER: return FEAT_WEAPON_OF_CHOICE_DAGGER; + case BASE_ITEM_DIREMACE: return FEAT_WEAPON_OF_CHOICE_DIREMACE; + case BASE_ITEM_DOUBLEAXE: return FEAT_WEAPON_OF_CHOICE_DOUBLEAXE; + case BASE_ITEM_DWARVENWARAXE: return FEAT_WEAPON_OF_CHOICE_DWAXE ; + case BASE_ITEM_GREATAXE: return FEAT_WEAPON_OF_CHOICE_GREATAXE; + case BASE_ITEM_GREATSWORD: return FEAT_WEAPON_OF_CHOICE_GREATSWORD; + case BASE_ITEM_HALBERD: return FEAT_WEAPON_OF_CHOICE_HALBERD; + case BASE_ITEM_HANDAXE: return FEAT_WEAPON_OF_CHOICE_HANDAXE; + case BASE_ITEM_HEAVYFLAIL: return FEAT_WEAPON_OF_CHOICE_HEAVYFLAIL; + case BASE_ITEM_KAMA: return FEAT_WEAPON_OF_CHOICE_KAMA; + case BASE_ITEM_KATANA: return FEAT_WEAPON_OF_CHOICE_KATANA; + case BASE_ITEM_KUKRI: return FEAT_WEAPON_OF_CHOICE_KUKRI; + case BASE_ITEM_LIGHTFLAIL: return FEAT_WEAPON_OF_CHOICE_LIGHTFLAIL; + case BASE_ITEM_LIGHTHAMMER: return FEAT_WEAPON_OF_CHOICE_LIGHTHAMMER; + case BASE_ITEM_LIGHTMACE: return FEAT_WEAPON_OF_CHOICE_LIGHTMACE; + case BASE_ITEM_LONGSWORD: return FEAT_WEAPON_OF_CHOICE_LONGSWORD; + case BASE_ITEM_MORNINGSTAR: return FEAT_WEAPON_OF_CHOICE_MORNINGSTAR; + case BASE_ITEM_QUARTERSTAFF: return FEAT_WEAPON_OF_CHOICE_QUARTERSTAFF; + case BASE_ITEM_MAGICSTAFF: return FEAT_WEAPON_OF_CHOICE_QUARTERSTAFF; + case BASE_ITEM_RAPIER: return FEAT_WEAPON_OF_CHOICE_RAPIER; + case BASE_ITEM_SCIMITAR: return FEAT_WEAPON_OF_CHOICE_SCIMITAR; + case BASE_ITEM_SCYTHE: return FEAT_WEAPON_OF_CHOICE_SCYTHE; + case BASE_ITEM_SHORTSPEAR: return FEAT_WEAPON_OF_CHOICE_SHORTSPEAR; + case BASE_ITEM_SHORTSWORD: return FEAT_WEAPON_OF_CHOICE_SHORTSWORD; + case BASE_ITEM_SICKLE: return FEAT_WEAPON_OF_CHOICE_SICKLE; + case BASE_ITEM_TRIDENT: return FEAT_WEAPON_OF_CHOICE_TRIDENT; + case BASE_ITEM_TWOBLADEDSWORD: return FEAT_WEAPON_OF_CHOICE_TWOBLADEDSWORD; + case BASE_ITEM_WARHAMMER: return FEAT_WEAPON_OF_CHOICE_WARHAMMER; + case BASE_ITEM_WHIP: return FEAT_WEAPON_OF_CHOICE_WHIP; + + //:: new item types + case BASE_ITEM_DOUBLE_SCIMITAR: return FEAT_WEAPON_OF_CHOICE_DBL_SCIMITAR; + case BASE_ITEM_EAGLE_CLAW: return FEAT_WEAPON_OF_CHOICE_EAGLE_CLAW; + case BASE_ITEM_ELVEN_LIGHTBLADE: return FEAT_WEAPON_OF_CHOICE_ELVEN_LIGHTBLADE; + case BASE_ITEM_ELVEN_THINBLADE: return FEAT_WEAPON_OF_CHOICE_ELVEN_THINBLADE; + case BASE_ITEM_ELVEN_COURTBLADE: return FEAT_WEAPON_OF_CHOICE_ELVEN_COURTBLADE; + case BASE_ITEM_FALCHION: return FEAT_WEAPON_OF_CHOICE_FALCHION; + case BASE_ITEM_GOAD: return FEAT_WEAPON_OF_CHOICE_GOAD; + case BASE_ITEM_HEAVY_MACE: return FEAT_WEAPON_OF_CHOICE_HEAVY_MACE; + case BASE_ITEM_HEAVY_PICK: return FEAT_WEAPON_OF_CHOICE_HEAVY_PICK; + case BASE_ITEM_KATAR: return FEAT_WEAPON_OF_CHOICE_KATAR; + case BASE_ITEM_LIGHT_LANCE: return FEAT_WEAPON_OF_CHOICE_LIGHT_LANCE; + case BASE_ITEM_LIGHT_PICK: return FEAT_WEAPON_OF_CHOICE_LIGHT_PICK; + case BASE_ITEM_MAUL: return FEAT_WEAPON_OF_CHOICE_MAUL; + case BASE_ITEM_NUNCHAKU: return FEAT_WEAPON_OF_CHOICE_NUNCHAKU; + case BASE_ITEM_SAI: return FEAT_WEAPON_OF_CHOICE_SAI; + case BASE_ITEM_SAP: return FEAT_WEAPON_OF_CHOICE_SAP; + } + return -1; +} + +int GetIsWeaponType(int iBaseType) +{ + return StringToInt(Get2DACache("baseitems", "WeaponType", iBaseType)); +} + +int GetIsWeapon(object oItem) +{ + return GetIsWeaponType(GetBaseItemType(oItem)); +} + +int GetWeaponSize(object oWeapon) +{ + if(!GetIsWeapon(oWeapon)) + return -1; + + int iBaseType = GetBaseItemType(oWeapon); + + // weapons hard-coded by PRC + switch(iBaseType) + { + case BASE_ITEM_LONGBOW: + case BASE_ITEM_HALBERD: + case BASE_ITEM_GREATSWORD: + case BASE_ITEM_GREATAXE: + case BASE_ITEM_HEAVYFLAIL: + case BASE_ITEM_QUARTERSTAFF: + case BASE_ITEM_MAGICSTAFF: + case BASE_ITEM_SCYTHE: + case BASE_ITEM_SHORTSPEAR: + case BASE_ITEM_ELVEN_COURTBLADE: + case BASE_ITEM_MAUL: + case BASE_ITEM_FALCHION: + return 4; + } + + return StringToInt(Get2DACache("baseitems", "WeaponSize", iBaseType)); +} + +int GetIsShield(object oItem) +{ + switch(GetBaseItemType(oItem)) + { + case BASE_ITEM_LARGESHIELD: + case BASE_ITEM_SMALLSHIELD: + case BASE_ITEM_TOWERSHIELD: + return TRUE; + } + return FALSE; +} + +// Special check for weapons with modified WeaponSize entry +// aka "Two-handed weapons equipped as one-handed" +// checks if size returned by GetWeaponSize() is different than setting in baseitems.2da +int PRCLargeWeaponCheck(int iBaseType, int nSize) +{ + string sTest; + switch(iBaseType) + { + case BASE_ITEM_HALBERD: + case BASE_ITEM_GREATSWORD: + case BASE_ITEM_GREATAXE: + case BASE_ITEM_HEAVYFLAIL: + case BASE_ITEM_QUARTERSTAFF: + case BASE_ITEM_MAGICSTAFF: + case BASE_ITEM_SCYTHE: + case BASE_ITEM_SHORTSPEAR: + case BASE_ITEM_ELVEN_COURTBLADE: + case BASE_ITEM_MAUL: + case BASE_ITEM_FALCHION: + { + sTest = Get2DAString("baseitems", "WeaponSize", iBaseType); + break; + } + } + return sTest != "" && sTest != IntToString(nSize); +} \ No newline at end of file diff --git a/src/include/prc_inc_function.nss b/src/include/prc_inc_function.nss new file mode 100644 index 0000000..93f7aa1 --- /dev/null +++ b/src/include/prc_inc_function.nss @@ -0,0 +1,2374 @@ +//:://///////////////////////////////////////////// +//:: [PRC Feat Router] +//:: [prc_inc_function.nss] +//::////////////////////////////////////////////// +//:: This file serves as a hub for the various +//:: PRC passive feat functions. If you need to +//:: add passive feats for a new PRC, link them here. +//:: +//:: This file also contains a few multi-purpose +//:: PRC functions that need to be included in several +//:: places, ON DIFFERENT PRCS. Make local include files +//:: for any functions you use ONLY on ONE PRC. +//::////////////////////////////////////////////// +//:: Created By: Aaon Graywolf +//:: Created On: Dec 19, 2003 +//::////////////////////////////////////////////// + +//:: Updated for 8 class slots by Jaysyn 2024/02/05 + +//-------------------------------------------------------------------------- +// This is the "event" that is called to re-evalutate PRC bonuses. Currently +// it is fired by OnEquip, OnUnequip and OnLevel. If you want to move any +// classes into this event, just copy the format below. Basically, this function +// is meant to keep the code looking nice and clean by routing each class's +// feats to their own self-contained script +//-------------------------------------------------------------------------- + +//:: Test Void +//void main (){} + + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const int TEMPLATE_SLA_START = 16304; +const int TEMPLATE_SLA_END = 16400; + +const string PRC_ScrubPCSkin_Generation = "PRC_ScrubPCSkin_Generation"; +const string PRC_EvalPRCFeats_Generation = "PRC_EvalPRCFeats_Generation"; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +void EvalPRCFeats(object oPC); + +int BlastInfidelOrFaithHeal(object oCaster, object oTarget, int iEnergyType, int iDisplayFeedback); + +void ScrubPCSkin(object oPC, object oSkin); + +void DeletePRCLocalInts(object oSkin); + +void DelayedAddIPFeats(int nExpectedGeneration, object oPC); + +void DelayedReApplyUnhealableAbilityDamage(int nExpectedGeneration, object oPC); + +int nbWeaponFocus(object oPC); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +// Minimalist includes +#include "prc_inc_util" +#include "prc_inc_spells" +#include "prc_inc_stunfist" +#include "inc_nwnx_funcs" +#include "prc_template_con" + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +void DeleteCharacterData(object oPC) +{ + DeletePersistantLocalString(oPC, "PRC_Class_Script1"); + DeletePersistantLocalString(oPC, "PRC_Class_Script2"); + DeletePersistantLocalString(oPC, "PRC_Class_Script3"); + DeletePersistantLocalString(oPC, "PRC_Class_Script4"); + DeletePersistantLocalString(oPC, "PRC_Class_Script5"); + DeletePersistantLocalString(oPC, "PRC_Class_Script6"); + DeletePersistantLocalString(oPC, "PRC_Class_Script7"); + DeletePersistantLocalString(oPC, "PRC_Class_Script8"); + DeletePersistantLocalInt(oPC, "PRC_Class_Data"); +} + +void SetupCharacterData(object oPC) +{ + // iData format: + // 0x01 - run alternate magic system setup + // 0x02 - add new metamagic feats for spontaneous casters + // 0x04 - run reduced arcane spell failure check + // use bitwise to combine flags + + int i, iData, iShifting; + for(i = 1; i <= 8; i++) + { + int nClassType = GetClassByPosition(i, oPC); + if(nClassType != CLASS_TYPE_INVALID) + { + string sScript; + switch(nClassType) + { + case CLASS_TYPE_ABJURANT_CHAMPION: sScript = "prc_abchamp"; break; + case CLASS_TYPE_ACOLYTE: sScript = "prc_acolyte"; break; + case CLASS_TYPE_ALIENIST: sScript = "prc_alienist"; break; + case CLASS_TYPE_ARCANE_DUELIST: sScript = "prc_arcduel"; break; + case CLASS_TYPE_ARCHIVIST: sScript = "prc_archivist"; iData |= 0x01; break; + case CLASS_TYPE_ASSASSIN: iData |= 0x03; break; + case CLASS_TYPE_BAELNORN: sScript = "prc_baelnorn"; break; + case CLASS_TYPE_BARD: iData |= 0x07; break; + case CLASS_TYPE_BATTLESMITH: sScript = "prc_battlesmith"; break; + case CLASS_TYPE_BEGUILER: iData |= 0x03; break; + case CLASS_TYPE_BINDER: sScript = "bnd_binder"; break; + case CLASS_TYPE_BFZ: sScript = "prc_bfz"; break; + case CLASS_TYPE_BLACK_BLOOD_CULTIST: sScript = "prc_bbc"; break; + case CLASS_TYPE_BLACKGUARD: sScript = "prc_blackguard"; break; + case CLASS_TYPE_BLADESINGER: sScript = "prc_bladesinger"; iData |= 0x04; break; + case CLASS_TYPE_BLIGHTLORD: sScript = "prc_blightlord"; break; + case CLASS_TYPE_BLOODCLAW_MASTER: sScript = "tob_bloodclaw"; break; + case CLASS_TYPE_BONDED_SUMMONNER: sScript = "prc_bondedsumm"; break; + case CLASS_TYPE_CELEBRANT_SHARESS: iData |= 0x03; break; + case CLASS_TYPE_CHILD_OF_NIGHT: sScript = "shd_childnight"; break; + case CLASS_TYPE_COC: sScript = "prc_coc"; break; + case CLASS_TYPE_COMBAT_MEDIC: sScript = "prc_cbtmed"; break; + case CLASS_TYPE_CONTEMPLATIVE: sScript = "prc_contemplate"; break; + case CLASS_TYPE_CRUSADER: sScript = "tob_crusader"; iData |= 0x01; break; + case CLASS_TYPE_CULTIST_SHATTERED_PEAK: sScript = "prc_shatterdpeak"; break; + case CLASS_TYPE_CW_SAMURAI: sScript = "prc_cwsamurai"; break; + case CLASS_TYPE_DEEPSTONE_SENTINEL: sScript = "tob_deepstone"; break; + case CLASS_TYPE_DIAMOND_DRAGON: sScript = "psi_diadra"; break; + case CLASS_TYPE_DISC_BAALZEBUL: sScript = "prc_baalzebul"; break; + case CLASS_TYPE_DISCIPLE_OF_ASMODEUS: sScript = "prc_discasmodeus"; break; + case CLASS_TYPE_DISCIPLE_OF_MEPH: sScript = "prc_discmeph"; break; + case CLASS_TYPE_DISPATER: sScript = "prc_dispater"; break; + case CLASS_TYPE_DRAGON_DEVOTEE: sScript = "prc_dragdev"; break; + case CLASS_TYPE_DRAGON_DISCIPLE: sScript = "prc_dradis"; break; + case CLASS_TYPE_DRAGON_SHAMAN: sScript = "prc_dragonshaman"; break; + case CLASS_TYPE_DRAGONFIRE_ADEPT: sScript = "inv_drgnfireadpt"; iData |= 0x01; break; + case CLASS_TYPE_DREAD_NECROMANCER: sScript = "prc_dreadnecro"; iData |= 0x03; break; + case CLASS_TYPE_DRUID: iShifting = TRUE; break; + case CLASS_TYPE_DRUNKEN_MASTER: sScript = "prc_drunk"; break; + case CLASS_TYPE_DUELIST: sScript = "prc_duelist"; break; + case CLASS_TYPE_DUSKBLADE: sScript = "prc_duskblade"; iData |= 0x03; break; + case CLASS_TYPE_ENLIGHTENEDFIST: sScript = "prc_enlfis"; break; + case CLASS_TYPE_ELEMENTAL_SAVANT: sScript = "prc_elemsavant"; break; + case CLASS_TYPE_ETERNAL_BLADE: sScript = "tob_eternalblade"; break; + case CLASS_TYPE_FACTOTUM: sScript = "prc_factotum"; break; + case CLASS_TYPE_FAVOURED_SOUL: sScript = "prc_favouredsoul"; iData |= 0x03; break; + case CLASS_TYPE_FISTRAZIEL: sScript = "prc_fistraziel"; break; + case CLASS_TYPE_FIST_OF_ZUOKEN: sScript = "psi_zuoken"; iData |= 0x01; break; + case CLASS_TYPE_FOCHLUCAN_LYRIST: sScript = "prc_fochlyr"; break; + case CLASS_TYPE_FOE_HUNTER: sScript = "prc_foe_hntr"; break; + case CLASS_TYPE_FORESTMASTER: sScript = "prc_forestmaster"; break; + case CLASS_TYPE_FORSAKER: sScript = "prc_forsaker"; break; + case CLASS_TYPE_FRE_BERSERKER: sScript = "prc_frebzk"; break; + case CLASS_TYPE_FROSTRAGER: sScript = "prc_frostrager"; break; + case CLASS_TYPE_FROST_MAGE: sScript = "prc_frostmage"; break; + case CLASS_TYPE_HALFLING_WARSLINGER: sScript = "prc_warsling"; break; + case CLASS_TYPE_HARPER: iData |= 0x03; break; + case CLASS_TYPE_HEARTWARDER: sScript = "prc_heartwarder"; break; + case CLASS_TYPE_HENSHIN_MYSTIC: sScript = "prc_henshin"; break; + case CLASS_TYPE_HEXBLADE: iData |= 0x03; break; + case CLASS_TYPE_HEXTOR: sScript = "prc_hextor"; break; + case CLASS_TYPE_IAIJUTSU_MASTER: sScript = "prc_iaijutsu_mst"; break; + case CLASS_TYPE_INCARNATE: sScript = "moi_incarnate"; break; + case CLASS_TYPE_INCARNUM_BLADE: sScript = "moi_iblade"; break; + case CLASS_TYPE_INITIATE_DRACONIC: sScript = "prc_initdraconic"; break; + case CLASS_TYPE_IRONMIND: sScript = "psi_ironmind"; break; + case CLASS_TYPE_IRONSOUL_FORGEMASTER: sScript = "moi_ironsoul"; break; + case CLASS_TYPE_JADE_PHOENIX_MAGE: sScript = "tob_jadephoenix"; break; + case CLASS_TYPE_JUDICATOR: sScript = "prc_judicator"; break; + case CLASS_TYPE_JUSTICEWW: iData |= 0x03; break; + case CLASS_TYPE_KNIGHT: sScript = "prc_knight"; break; + case CLASS_TYPE_KNIGHT_CHALICE: sScript = "prc_knghtch"; break; + case CLASS_TYPE_KNIGHT_WEAVE: iData |= 0x03; break; + case CLASS_TYPE_KNIGHT_SACRED_SEAL: sScript = "bnd_kss"; break; + case CLASS_TYPE_LASHER: sScript = "prc_lasher"; break; + case CLASS_TYPE_LEGENDARY_DREADNOUGHT: sScript = "prc_legendread"; break; + case CLASS_TYPE_LICH: sScript = "pnp_lich_level"; break; + case CLASS_TYPE_MAGEKILLER: sScript = "prc_magekill"; break; + case CLASS_TYPE_MASTER_HARPER: sScript = "prc_masterh"; break; + case CLASS_TYPE_MASTER_OF_NINE: sScript = "tob_masterofnine"; break; + case CLASS_TYPE_MASTER_OF_SHADOW: sScript = "shd_mastershadow"; break; + case CLASS_TYPE_MIGHTY_CONTENDER_KORD: sScript = "prc_contendkord"; break; + case CLASS_TYPE_MORNINGLORD: sScript = "prc_morninglord"; break; + case CLASS_TYPE_NIGHTSHADE: sScript = "prc_nightshade"; break; + case CLASS_TYPE_NINJA: sScript = "prc_ninjca"; break; + case CLASS_TYPE_OLLAM: sScript = "prc_ollam"; break; + case CLASS_TYPE_OOZEMASTER: sScript = "prc_oozemstr"; break; + case CLASS_TYPE_ORDER_BOW_INITIATE: sScript = "prc_ootbi"; break; + case CLASS_TYPE_PEERLESS: sScript = "prc_peerless"; break; + case CLASS_TYPE_PNP_SHIFTER : iShifting = TRUE; break; + case CLASS_TYPE_PRC_EYE_OF_GRUUMSH: sScript = "prc_eog"; break; + case CLASS_TYPE_PSION: iData |= 0x01; break; + case CLASS_TYPE_PSYWAR: iData |= 0x01; break; + case CLASS_TYPE_PSYCHIC_ROGUE: sScript = "psi_psyrogue"; iData |= 0x01; break; + case CLASS_TYPE_PYROKINETICIST: sScript = "psi_pyro"; break; + case CLASS_TYPE_RAGE_MAGE: iData |= 0x04; break; + case CLASS_TYPE_REAPING_MAULER : sScript = "prc_reapmauler"; break; + case CLASS_TYPE_RUBY_VINDICATOR: sScript = "tob_rubyknight"; break; + case CLASS_TYPE_RUNESCARRED: sScript = "prc_runescarred"; break; + case CLASS_TYPE_SACREDFIST: sScript = "prc_sacredfist"; break; + case CLASS_TYPE_SANCTIFIED_MIND: sScript = "psi_sancmind"; break; + case CLASS_TYPE_SAPPHIRE_HIERARCH: sScript = "moi_sapphire"; break; + case CLASS_TYPE_SCOUT: sScript = "prc_scout"; break; + case CLASS_TYPE_SERENE_GUARDIAN: sScript = "prc_sereneguard"; break; + case CLASS_TYPE_SHADOW_ADEPT: sScript = "prc_shadowadept"; break; + case CLASS_TYPE_SHADOWCASTER: sScript = "shd_shadowcaster"; iData |= 0x01; break; + case CLASS_TYPE_SHADOWSMITH: iData |= 0x01; break; + case CLASS_TYPE_SHADOW_SUN_NINJA: sScript = "tob_shadowsun"; break; + case CLASS_TYPE_SHADOWBLADE: sScript = "prc_sb_shdstlth"; break; + case CLASS_TYPE_SHADOWMIND: sScript = "psi_shadowmind"; break; + case CLASS_TYPE_SHADOWBANE_STALKER: sScript = "prc_shadstalker"; break; + case CLASS_TYPE_SHADOW_THIEF_AMN: sScript = "prc_amn"; break; + case CLASS_TYPE_SHAMAN: sScript = "prc_shaman"; break; + case CLASS_TYPE_SHINING_BLADE: sScript = "prc_sbheir"; break; + case CLASS_TYPE_SHOU: sScript = "prc_shou"; break; + case CLASS_TYPE_SKULLCLAN_HUNTER: sScript = "prc_skullclan"; break; + case CLASS_TYPE_SLAYER_OF_DOMIEL: sScript = "prc_slayerdomiel"; break; + case CLASS_TYPE_SOHEI: sScript = "prc_sohei"; break; + case CLASS_TYPE_SOLDIER_OF_LIGHT: sScript = "prc_soldoflight"; break; + case CLASS_TYPE_SORCERER: iData |= 0x03; break; + case CLASS_TYPE_SOULBORN: sScript = "moi_soulborn"; break; + case CLASS_TYPE_SOUL_EATER: iShifting = TRUE; break; + case CLASS_TYPE_SOULKNIFE: sScript = "psi_sk_clseval"; break; + case CLASS_TYPE_SPELLSWORD: sScript = "prc_spellswd"; iData |= 0x04; break; + case CLASS_TYPE_SPINEMELD_WARRIOR: sScript = "moi_spinemeld"; break; + case CLASS_TYPE_STORMLORD: sScript = "prc_stormlord"; break; + case CLASS_TYPE_SUBLIME_CHORD: sScript = "prc_schord"; iData |= 0x03; break; + case CLASS_TYPE_SUEL_ARCHANAMACH: iData |= 0x03; break; + case CLASS_TYPE_SWASHBUCKLER: sScript = "prc_swashbuckler"; break; + case CLASS_TYPE_SWIFT_WING: sScript = "prc_swiftwing"; break; + case CLASS_TYPE_SWORDSAGE: sScript = "tob_swordsage"; iData |= 0x01; break; + case CLASS_TYPE_TALON_OF_TIAMAT: sScript = "prc_talontiamat"; break; + case CLASS_TYPE_TEMPEST: sScript = "prc_tempest"; break; + case CLASS_TYPE_TEMPUS: sScript = "prc_battletempus"; break; + case CLASS_TYPE_TENEBROUS_APOSTATE: sScript = "bnd_tenebrous"; break; + case CLASS_TYPE_THAYAN_KNIGHT: sScript = "prc_thayknight"; break; + case CLASS_TYPE_THRALL_OF_GRAZZT_A: sScript = "tog"; break; + case CLASS_TYPE_THRALLHERD: sScript = "psi_thrallherd"; break; + case CLASS_TYPE_TOTEMIST: sScript = "moi_totemist"; break; + case CLASS_TYPE_TOTEM_RAGER: sScript = "moi_totemrager"; break; + case CLASS_TYPE_TRUENAMER: sScript = "true_truenamer"; iData |= 0x01; break; + case CLASS_TYPE_VASSAL: sScript = "prc_vassal"; break; + case CLASS_TYPE_VIGILANT: sScript = "prc_vigilant"; break; + case CLASS_TYPE_WARBLADE: sScript = "tob_warblade"; iData |= 0x01; break; + case CLASS_TYPE_WARCHIEF: sScript = "prc_warchief"; break; + case CLASS_TYPE_WARFORGED_JUGGERNAUT: sScript = "prc_juggernaut"; break; + case CLASS_TYPE_WARLOCK: sScript = "inv_warlock"; iData |= 0x01; break; + case CLASS_TYPE_WARMAGE: iData |= 0x03; break; + case CLASS_TYPE_WARMIND: sScript = "psi_warmind"; iData |= 0x01; break; + case CLASS_TYPE_WEREWOLF: sScript = "prc_werewolf"; break; + case CLASS_TYPE_WILDER: iData |= 0x01; break; + + // Races that can cast spells + case CLASS_TYPE_DRAGON: iData |= 0x03; break; + case CLASS_TYPE_SHAPECHANGER: iData |= 0x03; break; + case CLASS_TYPE_OUTSIDER: iData |= 0x03; break; + case CLASS_TYPE_ABERRATION: iData |= 0x03; break; + case CLASS_TYPE_MONSTROUS: iData |= 0x03; break; + case CLASS_TYPE_FEY: iData |= 0x03; break; + } + if(sScript != "") + SetPersistantLocalString(oPC, "PRC_Class_Script"+IntToString(i), sScript); + } + if (DEBUG) DoDebug("SetupCharacterData Class: " + IntToString(nClassType)); + if (DEBUG) DoDebug("SetupCharacterData Data: " + IntToString(iData)); + } + if(iData) + SetPersistantLocalInt(oPC, "PRC_Class_Data", iData); + + if(iShifting) + SetPersistantLocalInt(oPC, "PRC_UNI_SHIFT_SCRIPT", 1); + + //Setup class info for onleveldown script + int nCharData = ((GetClassByPosition(8, oPC) & 0xFF) << 56) | + ((GetClassByPosition(7, oPC) & 0xFF) << 48) | + ((GetClassByPosition(6, oPC) & 0xFF) << 40) | + ((GetClassByPosition(5, oPC) & 0xFF) << 32) | + ((GetClassByPosition(4, oPC) & 0xFF) << 24) | + ((GetClassByPosition(3, oPC) & 0xFF) << 16) | + ((GetClassByPosition(2, oPC) & 0xFF) << 8) | + (GetClassByPosition(1, oPC) & 0xFF); + + SetPersistantLocalInt(oPC, "PRC_Character_Data", nCharData); +} + +void DelayedExecuteScript(int nExpectedGeneration, string sScriptName, object oPC) +{ + if (nExpectedGeneration != GetLocalInt(oPC, PRC_EvalPRCFeats_Generation)) + { + //Generation has changed, so don't apply the effect + return; + } + ExecuteScript(sScriptName, oPC); +} + +void DelayedReApplyUnhealableAbilityDamage(int nExpectedGeneration, object oPC) +{ + if (nExpectedGeneration != GetLocalInt(oPC, PRC_ScrubPCSkin_Generation)) + { + //Generation has changed, so don't apply the effect + return; + } + ReApplyUnhealableAbilityDamage(oPC); +} + +int ToBFeats(object oPC) +{ + if(GetHasFeat(FEAT_SHADOW_BLADE, oPC) || + GetHasFeat(FEAT_RAPID_ASSAULT, oPC) || + GetHasFeat(FEAT_DESERT_WIND_DODGE, oPC) || + GetHasFeat(FEAT_DESERT_FIRE, oPC) || + GetHasFeat(FEAT_IRONHEART_AURA, oPC) || + GetHasFeat(FEAT_SHADOW_TRICKSTER, oPC) || + GetHasFeat(FEAT_WHITE_RAVEN_DEFENSE, oPC) || + GetHasFeat(FEAT_DEVOTED_BULWARK, oPC) || + GetHasFeat(FEAT_SNAP_KICK, oPC) || + GetHasFeat(FEAT_THREE_MOUNTAINS, oPC) || + GetHasFeat(FEAT_VAE_SCHOOL, oPC) || + GetHasFeat(FEAT_INLINDL_SCHOOL, oPC) || + GetHasFeat(FEAT_XANIQOS_SCHOOL, oPC) || + GetHasFeat(FEAT_SHIELD_WALL, oPC) || + GetHasFeat(FEAT_CROSSBOW_SNIPER, oPC) || + GetHasFeat(FEAT_CRESCENT_MOON, oPC) || + GetHasFeat(FEAT_QUICK_STAFF, oPC) || + GetHasFeat(FEAT_BEAR_FANG, oPC) || + GetHasFeat(FEAT_IMPROVED_RAPID_SHOT, oPC) || + GetHasFeat(FEAT_DIRE_FLAIL_SMASH, oPC) || + GetHasFeat(FEAT_SHIELD_SPECIALIZATION_LIGHT, oPC) || + GetHasFeat(FEAT_SHIELD_SPECIALIZATION_HEAVY, oPC) || + GetHasFeat(FEAT_FOCUSED_SHIELD, oPC) || + GetHasFeat(FEAT_SHIELDMATE, oPC) || + GetHasFeat(FEAT_IMPROVED_SHIELDMATE, oPC) || + GetHasFeat(FEAT_SHIELDED_CASTING, oPC) || + GetHasFeat(FEAT_BLADE_MEDITATION_DESERT_WIND , oPC) || + GetHasFeat(FEAT_BLADE_MEDITATION_DEVOTED_SPIRIT, oPC) || + GetHasFeat(FEAT_BLADE_MEDITATION_DIAMOND_MIND , oPC) || + GetHasFeat(FEAT_BLADE_MEDITATION_IRON_HEART , oPC) || + GetHasFeat(FEAT_BLADE_MEDITATION_SETTING_SUN , oPC) || + GetHasFeat(FEAT_BLADE_MEDITATION_SHADOW_HAND , oPC) || + GetHasFeat(FEAT_BLADE_MEDITATION_STONE_DRAGON , oPC) || + GetHasFeat(FEAT_BLADE_MEDITATION_TIGER_CLAW , oPC) || + GetHasFeat(FEAT_BLADE_MEDITATION_WHITE_RAVEN , oPC) || + GetRacialType(oPC) == RACIAL_TYPE_RETH_DEKALA || + GetRacialType(oPC) == RACIAL_TYPE_HADRIMOI) + return TRUE; + + return FALSE; +} + +void EvalPRCFeats(object oPC) +{ + // Player is currently making character in ConvoCC + // don't run EvalPRCFeats() yet + if(oPC == GetLocalObject(GetModule(), "ccc_active_pc")) + return; + + int nGeneration = PRC_NextGeneration(GetLocalInt(oPC, PRC_EvalPRCFeats_Generation)); + if (DEBUG > 1) DoDebug("EvalPRCFeats Generation: " + IntToString(nGeneration)); + SetLocalInt(oPC, PRC_EvalPRCFeats_Generation, nGeneration); + + //permanent ability changes + if(GetPRCSwitch(PRC_NWNX_FUNCS)) + ExecuteScript("prc_nwnx_funcs", oPC); + + //Add IP Feats to the hide + DelayCommand(0.0f, DelayedAddIPFeats(nGeneration, oPC)); + + // If there is a bonus domain, it will always be in the first slot, so just check that. + // It also runs things that clerics with those domains need + if (GetPersistantLocalInt(oPC, "PRCBonusDomain1") > 0 || GetLevelByClass(CLASS_TYPE_CLERIC, oPC) || GetLevelByClass(CLASS_TYPE_SHAMAN, oPC)) + DelayCommand(0.1f, ExecuteScript("prc_domain_skin", oPC)); + + // special add atk bonus equal to Enhancement + ExecuteScript("ft_sanctmartial", oPC); + + //hook in the weapon size restrictions script + //ExecuteScript("prc_restwpnsize", oPC); //<- Script no longer exists + + //Route the event to the appropriate class specific scripts + int i, iData; + string sScript; + for (i = 1; i <= 8; i++) + { + sScript = GetPersistantLocalString(oPC, "PRC_Class_Script"+IntToString(i)); + if(sScript != "") + { + if (DEBUG) DoDebug("PRC_Class_Script: "+sScript); + ExecuteScript(sScript, oPC); + } + } + + iData = GetPersistantLocalInt(oPC, "PRC_Class_Data"); + + // Handle alternate caster types gaining new stuff + if(iData & 0x01) + ExecuteScript("prc_amagsys_gain", oPC); + + // Add ip feats for spontaneous casters using metamagic + if(iData & 0x02) + ExecuteScript("prc_metamagic", oPC); + + // Handle classes with reduced arcane spell failure + if(iData & 0x04) + ExecuteScript("prc_reducedasf", oPC); + + if(GetPersistantLocalInt(oPC, "PRC_UNI_SHIFT_SCRIPT")) + //Executing shifter-related stuff like this has these advantages: + //1) All races and classes that need it can get it without a different script needing to be created for each. + //2) PCs with shifter-related stuff from multiple classes or races don't run the same functions multiple times. + ExecuteScript("prc_uni_shift", oPC); + + // Templates + //these go here so feats can be reused + ExecuteScript("prc_templates", oPC); + + // Feats + //these are here so if templates add them the if check runs after the template was applied + ExecuteScript("prc_feats", oPC); + + if (ToBFeats(oPC)) + ExecuteScript("tob_feats", oPC); + + if (GetIsIncarnumUser(oPC) || GetRacialType(oPC) == RACIAL_TYPE_JAEBRIN) + ExecuteScript("moi_events", oPC); + + if (GetIsBinder(oPC)) + ExecuteScript("bnd_events", oPC); + + // check if character with crafting feat has appropriate base item in her inventory + // x - moved from prc_onhb_indiv.nss + if(GetPRCSwitch(PRC_CRAFTING_BASE_ITEMS)) + DelayCommand(0.5f, ExecuteScript("prc_crftbaseitms", oPC)); + + // Add the teleport management feats. + // 2005.11.03: Now added to all base classes on 1st level - Ornedan +// ExecuteScript("prc_tp_mgmt_eval", oPC); + + // Size changes. Removed due to double-dipping most size adjustments + //ExecuteScript("prc_size", oPC); + + // Speed changes + // The local int is for when items are requipped too quickly and this script bugs out + if (!GetLocalInt(oPC, "PRCSpeedDelay")) + { + ExecuteScript("prc_speed", oPC); + SetLocalInt(oPC, "PRCSpeedDelay", TRUE); + DelayCommand(0.15, DeleteLocalInt(oPC, "PRCSpeedDelay")); + } + + // ACP system + if((GetIsPC(oPC) && + (GetPRCSwitch(PRC_ACP_MANUAL) || + GetPRCSwitch(PRC_ACP_AUTOMATIC) + ) + ) || + (!GetIsPC(oPC) && + GetPRCSwitch(PRC_ACP_NPC_AUTOMATIC) + ) + ) + ExecuteScript("acp_auto", oPC); + +// this is handled inside the PRC Options conversation now. +/* // Epic spells + if((GetCasterLvl(CLASS_TYPE_CLERIC, oPC) >= 21 || + GetCasterLvl(CLASS_TYPE_DRUID, oPC) >= 21 || + GetCasterLvl(CLASS_TYPE_SORCERER, oPC) >= 21 || + GetCasterLvl(CLASS_TYPE_FAVOURED_SOUL, oPC) >= 21 || + GetCasterLvl(CLASS_TYPE_HEALER, oPC) >= 21 || + GetCasterLvl(CLASS_TYPE_WIZARD, oPC) >= 21 + ) && + !GetHasFeat(FEAT_EPIC_SPELLCASTING_REST, oPC) + ) + { + IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(IP_CONST_FEAT_EPIC_REST), 0.0f, + X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + }*/ + + // Miscellaneous + ExecuteScript("prc_sneak_att", oPC); + ExecuteScript("race_skin", oPC); + ExecuteScript("prc_mithral", oPC); + if(GetPRCSwitch(PRC_ENFORCE_RACIAL_APPEARANCE) && GetIsPC(oPC)) + ExecuteScript("race_appear", oPC); + + //Reserve Feats + if(!GetLocalInt(oPC, "ReserveFeatsRunning")) + { + if(GetHasFeat(FEAT_HOLY_WARRIOR, oPC) || + GetHasFeat(FEAT_MYSTIC_BACKLASH, oPC) || + GetHasFeat(FEAT_ACIDIC_SPLATTER, oPC) || + GetHasFeat(FEAT_FIERY_BURST, oPC) || + GetHasFeat(FEAT_STORM_BOLT, oPC) || + GetHasFeat(FEAT_WINTERS_BLAST, oPC) || + GetHasFeat(FEAT_CLAP_OF_THUNDER, oPC) || + GetHasFeat(FEAT_SICKENING_GRASP, oPC) || + GetHasFeat(FEAT_TOUCH_OF_HEALING, oPC) || + GetHasFeat(FEAT_DIMENSIONAL_JAUNT, oPC) || + GetHasFeat(FEAT_CLUTCH_OF_EARTH, oPC) || + GetHasFeat(FEAT_BORNE_ALOFT, oPC) || + GetHasFeat(FEAT_PROTECTIVE_WARD, oPC) || + GetHasFeat(FEAT_SHADOW_VEIL, oPC) || + GetHasFeat(FEAT_SUNLIGHT_EYES, oPC) || + GetHasFeat(FEAT_TOUCH_OF_DISTRACTION, oPC) || + GetHasFeat(FEAT_UMBRAL_SHROUD, oPC) || + GetHasFeat(FEAT_CHARNEL_MIASMA, oPC) || + GetHasFeat(FEAT_DROWNING_GLANCE, oPC) || + GetHasFeat(FEAT_INVISIBLE_NEEDLE, oPC) || + GetHasFeat(FEAT_SUMMON_ELEMENTAL, oPC) || + GetHasFeat(FEAT_DIMENSIONAL_REACH, oPC) || + GetHasFeat(FEAT_HURRICANE_BREATH, oPC) || + GetHasFeat(FEAT_MINOR_SHAPESHIFT, oPC) || + GetHasFeat(FEAT_FACECHANGER, oPC)) + { + ExecuteScript("prc_reservefeat", oPC); + } + } + + /*if(// Psionics + GetLevelByClass(CLASS_TYPE_PSION, oPC) || + GetLevelByClass(CLASS_TYPE_WILDER, oPC) || + GetLevelByClass(CLASS_TYPE_PSYWAR, oPC) || + GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oPC) || + GetLevelByClass(CLASS_TYPE_WARMIND, oPC) || + // New spellbooks + GetLevelByClass(CLASS_TYPE_BARD, oPC) || + GetLevelByClass(CLASS_TYPE_SORCERER, oPC) || + GetLevelByClass(CLASS_TYPE_SUEL_ARCHANAMACH, oPC) || + GetLevelByClass(CLASS_TYPE_FAVOURED_SOUL, oPC) || + GetLevelByClass(CLASS_TYPE_MYSTIC, oPC) || + GetLevelByClass(CLASS_TYPE_HEXBLADE, oPC) || + GetLevelByClass(CLASS_TYPE_DUSKBLADE, oPC) || + GetLevelByClass(CLASS_TYPE_WARMAGE, oPC) || + GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER,oPC) || + GetLevelByClass(CLASS_TYPE_JUSTICEWW, oPC) || + GetLevelByClass(CLASS_TYPE_WITCH, oPC) || + GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oPC) || + GetLevelByClass(CLASS_TYPE_ARCHIVIST, oPC) || + GetLevelByClass(CLASS_TYPE_BEGUILER, oPC) || + GetLevelByClass(CLASS_TYPE_HARPER, oPC) || + GetLevelByClass(CLASS_TYPE_TEMPLAR, oPC) || + // Truenaming + GetLevelByClass(CLASS_TYPE_TRUENAMER, oPC) || + // Tome of Battle + GetLevelByClass(CLASS_TYPE_CRUSADER, oPC) || + GetLevelByClass(CLASS_TYPE_SWORDSAGE, oPC) || + GetLevelByClass(CLASS_TYPE_WARBLADE, oPC) || + // Invocations + GetLevelByClass(CLASS_TYPE_DRAGONFIRE_ADEPT, oPC) || + GetLevelByClass(CLASS_TYPE_WARLOCK, oPC) || + // Racial casters + (GetLevelByClass(CLASS_TYPE_OUTSIDER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_RAKSHASA) + ) + { + DelayCommand(1.0, DelayedExecuteScript(nGeneration, "prc_amagsys_gain", oPC)); + + //add selectable metamagic feats for spontaneous spellcasters + ExecuteScript("prc_metamagic", oPC); + }*/ + + // Gathers all the calls to UnarmedFists & Feats to one place. + // Must be after all evaluationscripts that need said functions. + //if(GetLocalInt(oPC, "CALL_UNARMED_FEATS") || GetLocalInt(oPC, "CALL_UNARMED_FISTS")) // ExecuteScript() is pretty expensive, do not run it needlessly - 20060702, Ornedan + ExecuteScript("unarmed_caller", oPC); + + // Gathers all the calls to SetBaseAttackBonus() to one place + // Must be after all evaluationscripts that need said function. + ExecuteScript("prc_bab_caller", oPC); + + // Classes an invoker can take + if( GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oPC) || + GetLevelByClass(CLASS_TYPE_ACOLYTE, oPC) || + GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oPC) || + GetLevelByClass(CLASS_TYPE_ARCTRICK, oPC) || + GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oPC) || + GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oPC) || + GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oPC) || + GetLevelByClass(CLASS_TYPE_MAESTER, oPC) || + GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oPC) || + GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oPC) || + GetLevelByClass(CLASS_TYPE_VIRTUOSO, oPC) || + GetLevelByClass(CLASS_TYPE_WILD_MAGE, oPC)) + { + //Arcane caster first class position, take arcane + if(GetFirstArcaneClassPosition(oPC) == 1) + SetLocalInt(oPC, "INV_Caster", 1); + //Invoker first class position. take invoker + else if(GetClassByPosition(1, oPC) == CLASS_TYPE_WARLOCK || GetClassByPosition(1, oPC) == CLASS_TYPE_DRAGONFIRE_ADEPT) + SetLocalInt(oPC, "INV_Caster", 2); + //Non arcane first class position, invoker second. Take invoker + else if(GetFirstArcaneClassPosition(oPC) ==0 && (GetClassByPosition(2, oPC) == CLASS_TYPE_WARLOCK || GetClassByPosition(2, oPC) == CLASS_TYPE_DRAGONFIRE_ADEPT)) + SetLocalInt(oPC, "INV_Caster", 2); + //last class would be Non-invoker first class position, arcane second position. take arcane. + else + SetLocalInt(oPC, "INV_Caster", 1); + + //:: Set arcane or invocation bonus caster levels + if ( GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oPC) > 0 && + GetHasFeat(FEAT_ABCHAMP_NONE, oPC) ) + { + SetLocalInt(oPC, "INV_Caster", 1); + } + else + { + SetLocalInt(oPC, "INV_Caster", 2); + } + + if ( GetLevelByClass(CLASS_TYPE_ACOLYTE, oPC) > 0 && + GetHasFeat(FEAT_AOTS_NONE, oPC) || GetHasFeat(FEAT_AOTS_MYSTERY_SHADOWCASTER, oPC) || GetHasFeat(FEAT_AOTS_MYSTERY_SHADOWSMITH, oPC)) + { + SetLocalInt(oPC, "INV_Caster", 1); + } + else + { + SetLocalInt(oPC, "INV_Caster", 2); + } + + if ( GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oPC) > 0 && + GetHasFeat(FEAT_ANIMA_NONE, oPC) ) + { + SetLocalInt(oPC, "INV_Caster", 1); + } + else + { + SetLocalInt(oPC, "INV_Caster", 2); + } + + if ( GetLevelByClass(CLASS_TYPE_ARCTRICK, oPC) > 0 && + GetHasFeat(FEAT_ARCTRICK_NONE, oPC) ) + { + SetLocalInt(oPC, "INV_Caster", 1); + } + else + { + SetLocalInt(oPC, "INV_Caster", 2); + } + + if ( GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oPC) > 0 && + GetHasFeat(FEAT_BLDMAGUS_NONE, oPC) ) + { + SetLocalInt(oPC, "INV_Caster", 1); + } + else + { + SetLocalInt(oPC, "INV_Caster", 2); + } + + if ( GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oPC) > 0 && + GetHasFeat(FEAT_ASMODEUS_NONE, oPC) || GetHasFeat(FEAT_ASMODEUS_MYSTERY_SHADOWCASTER, oPC) || GetHasFeat(FEAT_ASMODEUS_MYSTERY_SHADOWSMITH, oPC)) + { + SetLocalInt(oPC, "INV_Caster", 1); + } + else + { + SetLocalInt(oPC, "INV_Caster", 2); + } + + if ( GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oPC) > 0 && + GetHasFeat(FEAT_ENLIGHTENEDFIST_NONE, oPC) ) + { + SetLocalInt(oPC, "INV_Caster", 1); + } + else + { + SetLocalInt(oPC, "INV_Caster", 2); + } + + if ( GetLevelByClass(CLASS_TYPE_MAESTER, oPC) > 0 && + GetHasFeat(FEAT_MAESTER_NONE, oPC) ) + { + SetLocalInt(oPC, "INV_Caster", 1); + } + else + { + SetLocalInt(oPC, "INV_Caster", 2); + } + + if ( GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oPC) > 0 && + GetHasFeat(FEAT_TIAMAT_NONE, oPC) || GetHasFeat(FEAT_TIAMAT_MYSTERY_SHADOWCASTER, oPC) || GetHasFeat(FEAT_TIAMAT_MYSTERY_SHADOWSMITH, oPC)) + { + SetLocalInt(oPC, "INV_Caster", 1); + } + else + { + SetLocalInt(oPC, "INV_Caster", 2); + } + + if ( GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oPC) > 0 && + GetHasFeat(FEAT_UNSEEN_NONE, oPC) ) + { + SetLocalInt(oPC, "INV_Caster", 1); + } + else + { + SetLocalInt(oPC, "INV_Caster", 2); + } + + if ( GetLevelByClass(CLASS_TYPE_VIRTUOSO, oPC) > 0 && + GetHasFeat(FEAT_VIRTUOSO_NONE, oPC) ) + { + SetLocalInt(oPC, "INV_Caster", 1); + } + else + { + SetLocalInt(oPC, "INV_Caster", 2); + } + + if ( GetLevelByClass(CLASS_TYPE_WILD_MAGE, oPC) > 0 && + GetHasFeat(FEAT_WILDMAGE_NONE, oPC) ) + { + SetLocalInt(oPC, "INV_Caster", 1); + } + else + { + SetLocalInt(oPC, "INV_Caster", 2); + } + +/* //Arcane caster first class position, take arcane + if(GetFirstArcaneClassPosition(oPC) == 1) + SetLocalInt(oPC, "INV_Caster", 1); + //Invoker first class position. take invoker + else if(GetClassByPosition(1, oPC) == CLASS_TYPE_WARLOCK || GetClassByPosition(1, oPC) == CLASS_TYPE_DRAGONFIRE_ADEPT) + SetLocalInt(oPC, "INV_Caster", 2); + //Non arcane first class position, invoker second. Take invoker + else if(GetFirstArcaneClassPosition(oPC) ==0 && (GetClassByPosition(2, oPC) == CLASS_TYPE_WARLOCK || GetClassByPosition(2, oPC) == CLASS_TYPE_DRAGONFIRE_ADEPT)) + SetLocalInt(oPC, "INV_Caster", 2); + //last class would be Non-invoker first class position, arcane second position. take arcane. + else + SetLocalInt(oPC, "INV_Caster", 1); */ + } +} + +void DelayedAddIPFeats(int nExpectedGeneration, object oPC) +{ + if (nExpectedGeneration != GetLocalInt(oPC, PRC_EvalPRCFeats_Generation)) + { + //Generation has changed, so don't apply the effect + return; + } + + object oSkin = GetPCSkin(oPC); + + //Horse menu + AddSkinFeat(FEAT_HORSE_MENU, 40, oSkin, oPC); + + // Switch convo feat + //Now everyone gets it at level 1, but just to be on the safe side + AddSkinFeat(FEAT_OPTIONS_CONVERSATION, 229, oSkin, oPC); + + //PnP familiars + if(GetHasFeat(FEAT_SUMMON_FAMILIAR, oPC) && GetPRCSwitch(PRC_PNP_FAMILIARS)) + IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(IP_CONST_PNP_FAMILIAR), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING); + else if(!GetHasFeat(FEAT_SUMMON_FAMILIAR, oPC) || !GetPRCSwitch(PRC_PNP_FAMILIARS)) + RemoveItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_PNP_FAMILIAR)); + + //PnP Spell Schools + if(GetPRCSwitch(PRC_PNP_SPELL_SCHOOLS) + && GetLevelByClass(CLASS_TYPE_WIZARD, oPC) + && !GetIsPolyMorphedOrShifted(oPC) + && !GetHasFeat(FEAT_PNP_SPELL_SCHOOL_GENERAL, oPC) + && !GetHasFeat(FEAT_PNP_SPELL_SCHOOL_ABJURATION, oPC) + && !GetHasFeat(FEAT_PNP_SPELL_SCHOOL_CONJURATION, oPC) + && !GetHasFeat(FEAT_PNP_SPELL_SCHOOL_DIVINATION, oPC) + && !GetHasFeat(FEAT_PNP_SPELL_SCHOOL_ENCHANTMENT, oPC) + && !GetHasFeat(FEAT_PNP_SPELL_SCHOOL_EVOCATION, oPC) + && !GetHasFeat(FEAT_PNP_SPELL_SCHOOL_ILLUSION, oPC) + && !GetHasFeat(FEAT_PNP_SPELL_SCHOOL_NECROMANCY, oPC) + && !GetHasFeat(FEAT_PNP_SPELL_SCHOOL_TRANSMUTATION, oPC) + //&& !PRCGetHasEffect(EFFECT_TYPE_POLYMORPH, oPC) //so it doesnt pop up on polymorphing + //&& !GetLocalInt(oSkin, "nPCShifted") //so it doenst pop up on shifting + ) + { + if(GetXP(oPC))// ConvoCC compatibility fix + ExecuteScript("prc_pnp_shcc_s", oPC); + } + + /*//Arcane Archer old imbue arrow + if(GetLevelByClass(CLASS_TYPE_ARCANE_ARCHER, oPC) >= 2 + && !GetHasFeat(FEAT_PRESTIGE_IMBUE_ARROW, oPC) + && GetPRCSwitch(PRC_PNP_SPELL_SCHOOLS)) + { + //add the old feat to the hide + IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(IP_CONST_FEAT_FEAT_PRESTIGE_IMBUE_ARROW), 0.0f, + X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + }*/ + + //handle PnP sling switch + if(GetPRCSwitch(PRC_PNP_SLINGS)) + { + if(GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_SLING) + IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC), + ItemPropertyMaxRangeStrengthMod(20), + 999999.9); + } +} + +void TemplateSLAs(object oPC) +{ + int i; + for(i = TEMPLATE_SLA_START; i <= TEMPLATE_SLA_END; i++) + { + DeleteLocalInt(oPC, "TemplateSLA_"+IntToString(i)); + } +} + +void DeletePRCLocalInts(object oSkin) +{ + // This will get rid of any SetCompositeAttackBonus LocalInts: + object oPC = GetItemPossessor(oSkin); + DeleteLocalInt(oPC, "CompositeAttackBonusR"); + DeleteLocalInt(oPC, "CompositeAttackBonusL"); + + //Do not use DelayCommand for this--it's too dangerous: + //if SetCompositeAttackBonus is called at the wrong time the result will be incorrect. + DeleteNamedComposites(oPC, "PRC_ComAttBon"); + + // PRCGetClassByPosition and PRCGetLevelByPosition cleanup + // not needed now that GetClassByPosition() works for custom classes + // DeleteLocalInt(oPC, "PRC_ClassInPos1"); + // DeleteLocalInt(oPC, "PRC_ClassInPos2"); + // DeleteLocalInt(oPC, "PRC_ClassInPos3"); + // DeleteLocalInt(oPC, "PRC_ClassLevelInPos1"); + // DeleteLocalInt(oPC, "PRC_ClassLevelInPos2"); + // DeleteLocalInt(oPC, "PRC_ClassLevelInPos3"); + + //persistant local token object cache + //looks like logging off then back on without the server rebooting breaks it + //I guess because the token gets a new ID, but the local still points to the old one + DeleteLocalObject(oPC, "PRC_HideTokenCache"); + + DeleteLocalInt(oSkin, "PRC_ArcaneSpellFailure"); + + DeleteLocalInt(oPC, "PRC_SwiftActionUsed"); + DeleteLocalInt(oPC, "PRC_MoveActionUsed"); + + // In order to work with the PRC system we need to delete some locals for each + // PRC that has a hide + + //Do not use DelayCommand for this--it's too dangerous: + //if SetCompositeBonus is called between the time EvalPRCFeats removes item properties + //and the time this delayed command is executed, the result will be incorrect. + //Since this error case actually happens frequently with any delay here, just don't do it. + DeleteNamedComposites(oSkin, "PRC_CBon"); + + if (DEBUG) DoDebug("Clearing class flags"); + + // Elemental Savants + DeleteLocalInt(oSkin,"ElemSavantResist"); + DeleteLocalInt(oSkin,"ElemSavantPerfection"); + DeleteLocalInt(oSkin,"ElemSavantImmMind"); + DeleteLocalInt(oSkin,"ElemSavantImmParal"); + DeleteLocalInt(oSkin,"ElemSavantImmSleep"); + // HeartWarder + DeleteLocalInt(oSkin,"FeyType"); + // OozeMaster + DeleteLocalInt(oSkin,"IndiscernibleCrit"); + DeleteLocalInt(oSkin,"IndiscernibleBS"); + DeleteLocalInt(oSkin,"OneOozeMind"); + DeleteLocalInt(oSkin,"OneOozePoison"); + // Storm lord + DeleteLocalInt(oSkin,"StormLResElec"); + // Spell sword + DeleteLocalInt(oSkin,"SpellswordSFBonusNormal"); + DeleteLocalInt(oSkin,"SpellswordSFBonusEpic"); + // Acolyte of the skin + DeleteLocalInt(oSkin,"AcolyteSymbBonus"); + DeleteLocalInt(oSkin,"AcolyteResistanceCold"); + DeleteLocalInt(oSkin,"AcolyteResistanceFire"); + DeleteLocalInt(oSkin,"AcolyteResistanceAcid"); + DeleteLocalInt(oSkin,"AcolyteResistanceElectric"); + // Battleguard of Tempus + DeleteLocalInt(oSkin,"FEAT_WEAP_TEMPUS"); + // Bonded Summoner + DeleteLocalInt(oSkin,"BondResEle"); + DeleteLocalInt(oSkin,"BondSubType"); + // Disciple of Meph + DeleteLocalInt(oSkin,"DiscMephResist"); + DeleteLocalInt(oSkin,"DiscMephGlove"); + // Initiate of Draconic Mysteries + DeleteLocalInt(oSkin,"IniSR"); + DeleteLocalInt(oSkin,"IniStunStrk"); + // Man at Arms + DeleteLocalInt(oSkin,"ManArmsCore"); + // Telflammar Shadowlord + DeleteLocalInt(oSkin,"ShaDiscorp"); + // Vile Feats + DeleteLocalInt(oSkin,"DeformGaunt"); + DeleteLocalInt(oSkin,"DeformObese"); + // Sneak Attack + DeleteLocalInt(oSkin,"RogueSneakDice"); + DeleteLocalInt(oSkin,"BlackguardSneakDice"); + // Sacred Fist + DeleteLocalInt(oSkin,"SacFisMv"); + // Minstrel + DeleteLocalInt(oSkin,"MinstrelSFBonus"); //:: @todo Make ASF reduction compositable + // Nightshade + DeleteLocalInt(oSkin,"ImmuNSWeb"); + DeleteLocalInt(oSkin,"ImmuNSPoison"); + // Soldier of Light + DeleteLocalInt(oSkin,"ImmuPF"); + // Ultimate Ranger + DeleteLocalInt(oSkin,"URImmu"); + // Thayan Knight + DeleteLocalInt(oSkin,"ThayHorror"); + DeleteLocalInt(oSkin,"ThayZulkFave"); + DeleteLocalInt(oSkin,"ThayZulkChamp"); + // Black Flame Zealot + DeleteLocalInt(oSkin,"BFZHeart"); + // Henshin Mystic + DeleteLocalInt(oSkin,"Happo"); + DeleteLocalInt(oSkin,"HMInvul"); + //Blightlord + DeleteLocalInt(oSkin, "WntrHeart"); + DeleteLocalInt(oSkin, "BlightBlood"); + // Contemplative + DeleteLocalInt(oSkin, "ContempDisease"); + DeleteLocalInt(oSkin, "ContempPoison"); + DeleteLocalInt(oSkin, "ContemplativeDR"); + DeleteLocalInt(oSkin, "ContemplativeSR"); + // Dread Necromancer + DeleteLocalInt(oSkin, "DNDamageResist"); + // Warsling Sniper + DeleteLocalInt(oPC, "CanRicochet"); + // Blood Magus + DeleteLocalInt(oSkin, "ThickerThanWater"); + //:: Crusader + DeleteLocalInt(oPC, "DelayedDamageHB"); + //:: Factotum + DeleteLocalInt(oPC, "InspirationHB"); + + // Feats + DeleteLocalInt(oPC, "ForceOfPersonalityWis"); + DeleteLocalInt(oPC, "ForceOfPersonalityCha"); + DeleteLocalInt(oPC, "InsightfulReflexesInt"); + DeleteLocalInt(oPC, "InsightfulReflexesDex"); + DeleteLocalInt(oSkin, "TactileTrapsmithSearchIncrease"); + DeleteLocalInt(oSkin, "TactileTrapsmithDisableIncrease"); + DeleteLocalInt(oSkin, "TactileTrapsmithSearchDecrease"); + DeleteLocalInt(oSkin, "TactileTrapsmithDisableDecrease"); + + // Warmind + DeleteLocalInt(oSkin, "EnduringBody"); + + // Ironmind + DeleteLocalInt(oSkin, "IronMind_DR"); + + // Suel Archanamach + DeleteLocalInt(oSkin, "SuelArchanamachSpellFailure"); + + // Favoured Soul + DeleteLocalInt(oSkin, "FavouredSoulResistElementAcid"); + DeleteLocalInt(oSkin, "FavouredSoulResistElementCold"); + DeleteLocalInt(oSkin, "FavouredSoulResistElementElec"); + DeleteLocalInt(oSkin, "FavouredSoulResistElementFire"); + DeleteLocalInt(oSkin, "FavouredSoulResistElementSonic"); + DeleteLocalInt(oSkin, "FavouredSoulDR"); + + // Domains + DeleteLocalInt(oSkin, "StormDomainPower"); + + // Skullclan Hunter + DeleteLocalInt(oSkin, "SkullClanFear"); + DeleteLocalInt(oSkin, "SkullClanDisease"); + DeleteLocalInt(oSkin, "SkullClanProtectionEvil"); + DeleteLocalInt(oSkin, "SkullClanSwordLight"); + DeleteLocalInt(oSkin, "SkullClanParalysis"); + DeleteLocalInt(oSkin, "SkullClanAbilityDrain"); + DeleteLocalInt(oSkin, "SkullClanLevelDrain"); + + // Sohei + DeleteLocalInt(oSkin, "SoheiDamageResist"); + + // Dragon Disciple + DeleteLocalInt(oPC, "DragonDiscipleBreathWeaponUses"); + + //Dragon Shaman + DeleteLocalInt(oPC, "DragonShamanTotem"); + + //Warblade + DeleteLocalInt(oSkin, "PRC_WEAPON_APTITUDE_APPLIED"); + + //Shifter(PnP) + DeleteLocalInt(oSkin, "PRC_SHIFTER_TEMPLATE_APPLIED"); + + DeleteLocalInt(oPC, "ScoutFreeMove"); + DeleteLocalInt(oPC, "ScoutFastMove"); + DeleteLocalInt(oPC, "ScoutBlindsight"); + + //Truenamer + // Called elsewhere now + /*int UtterID; + for(UtterID = 3526; UtterID <= 3639; UtterID++) // All utterances + DeleteLocalInt(oPC, "PRC_LawOfResistance" + IntToString(UtterID)); + for(UtterID = 3418; UtterID <= 3431; UtterID++) // Syllable of Detachment to Word of Heaven, Greater + DeleteLocalInt(oPC, "PRC_LawOfResistance" + IntToString(UtterID));*/ + + //Invocations + DeleteLocalInt(oPC, "ChillingFogLock"); + //Endure Exposure wearing off + array_delete(oPC, "BreathProtected"); + DeleteLocalInt(oPC, "DragonWard"); + + //Scry on Familiar + DeleteLocalInt(oPC, "Scry_Familiar"); + + // Undead HD + DeleteLocalInt(oPC, "PRCUndeadHD"); + DeleteLocalInt(oPC, "PRCUndeadFSPen"); + + //Template Spell-Like Abilities + DelayCommand(0.5f, TemplateSLAs(oPC)); + + // future PRCs Go below here +} + +void ScrubPCSkin(object oPC, object oSkin) +{ + int nGeneration = PRC_NextGeneration(GetLocalInt(oPC, PRC_ScrubPCSkin_Generation)); + if (DEBUG > 1) DoDebug("ScrubPCSkin Generation: " + IntToString(nGeneration)); + SetLocalInt(oPC, PRC_ScrubPCSkin_Generation, nGeneration); + + int iCode = GetHasFeat(FEAT_SF_CODE,oPC); + int ipType, st; + if(!(/*GetIsPolyMorphedOrShifted(oPC) || */GetIsObjectValid(GetMaster(oPC)))) + { + itemproperty ip = GetFirstItemProperty(oSkin); + while(GetIsItemPropertyValid(ip)) + { + // Insert Logic here to determine if we spare a property + ipType = GetItemPropertyType(ip); + if(ipType == ITEM_PROPERTY_BONUS_FEAT) + { + // Check for specific Bonus Feats + // Reference iprp_feats.2da + st = GetItemPropertySubType(ip); + + // Spare 400 through 570 and 398 -- epic spells & spell effects + //also spare the new spellbook feats (1000-12000 & 17701-24704 + //also spare the psionic, trunaming, tob, invocation feats (12000-16000) + // spare template, tob stuff (16300-17700) + // changed by fluffyamoeba so that iprp weapon specialization, dev crit, epic weapon focus, epic weapon spec + // overwhelming crit and weapon of choice are no longer skipped. + if ((st < 400 || st > 570) + && st != 102 //:: ACP Feats + && st != 586 //:: ACP Feats + && st != 587 //:: ACP Feats + && st != 398 + && (st < 1000 || st > 13520) + //&& (st < 1000 || st > 13999) + //&& (st < 14501 || st > 15999) + && (st < 16300 || st > 24704) + && (st < 223 || st > 226) // draconic feats + && (st < 229 || st > 249) // Pnp spellschool feats and PRC options feat (231-249 & 229) + && st != 259 // 259 - psionic focus + && (st < 141 || st > 200) // 141 - shadowmaster shades, 142-151 bonus domains casting feats, 152 - 200 bonus domain powers + && st != 26000 // Bullybasher Giant Bearing + && ( (st == IP_CONST_FEAT_PRC_POWER_ATTACK_QUICKS_RADIAL || + st == IP_CONST_FEAT_POWER_ATTACK_SINGLE_RADIAL || + st == IP_CONST_FEAT_POWER_ATTACK_FIVES_RADIAL) ? // Remove the PRC Power Attack radials if the character no longer has Power Attack + !GetHasFeat(FEAT_POWER_ATTACK, oPC) : + TRUE // If the feat is not relevant to this clause, always pass + ) + ) + RemoveItemProperty(oSkin, ip); + } + else if(ipType == ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N) + { + //bonus spellslots code here + //st = GetItemPropertySubType(ip); + RemoveItemProperty(oSkin, ip); + } + else + RemoveItemProperty(oSkin, ip); + + // Get the next property + ip = GetNextItemProperty(oSkin); + } + } + if(iCode) + AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(381),oSkin); + + // Schedule restoring the unhealable ability damage + DelayCommand(0.1f, DelayedReApplyUnhealableAbilityDamage(nGeneration, oPC)); + + // Remove all natural weapons too + // ClearNaturalWeapons(oPC); + // Done this way to remove prc_inc_natweap and prc_inc_combat from the include + // Should help with compile speeds and the like + //array_delete(oPC, "ARRAY_NAT_SEC_WEAP_RESREF"); + //array_delete(oPC, "ARRAY_NAT_PRI_WEAP_RESREF"); + //array_delete(oPC, "ARRAY_NAT_PRI_WEAP_ATTACKS"); +} + +int BlastInfidelOrFaithHeal(object oCaster, object oTarget, int iEnergyType, int iDisplayFeedback) +{ + //Don't bother doing anything if iEnergyType isn't either positive/negative energy + if(iEnergyType != DAMAGE_TYPE_POSITIVE && iEnergyType != DAMAGE_TYPE_NEGATIVE) + return FALSE; + + //If the target is undead and damage type is negative + //or if the target is living and damage type is positive + //then we're healing. Otherwise, we're harming. + int iTombTainted = GetHasFeat(FEAT_TOMB_TAINTED_SOUL, oTarget) && GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD; + int iHeal = ( iEnergyType == DAMAGE_TYPE_NEGATIVE && (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD || iTombTainted)) || + ( iEnergyType == DAMAGE_TYPE_POSITIVE && MyPRCGetRacialType(oTarget) != RACIAL_TYPE_UNDEAD && !iTombTainted); + int iRetVal = FALSE; + int iAlignDif = CompareAlignment(oCaster, oTarget); + string sFeedback = ""; + + if(iHeal){ + if((GetHasFeat(FEAT_FAITH_HEALING, oCaster) && iAlignDif < 2)){ + iRetVal = TRUE; + sFeedback = "Faith Healing"; + } + } + else{ + if((GetHasFeat(FEAT_BLAST_INFIDEL, oCaster) && iAlignDif >= 2)){ + iRetVal = TRUE; + sFeedback = "Blast Infidel"; + } + } + + if(iDisplayFeedback) FloatingTextStringOnCreature(sFeedback, oCaster); + return iRetVal; +} + +int GetShiftingFeats(object oPC) +{ + int nNumFeats; + nNumFeats = GetHasFeat(FEAT_BEASTHIDE_ELITE, oPC) + + GetHasFeat(FEAT_DREAMSIGHT_ELITE, oPC) + + GetHasFeat(FEAT_GOREBRUTE_ELITE, oPC) + + GetHasFeat(FEAT_LONGSTRIDE_ELITE, oPC) + + GetHasFeat(FEAT_LONGTOOTH_ELITE, oPC) + + GetHasFeat(FEAT_RAZORCLAW_ELITE, oPC) + + GetHasFeat(FEAT_WILDHUNT_ELITE, oPC) + + GetHasFeat(FEAT_EXTRA_SHIFTER_TRAIT, oPC) + + GetHasFeat(FEAT_HEALING_FACTOR, oPC) + + GetHasFeat(FEAT_SHIFTER_AGILITY, oPC) + + GetHasFeat(FEAT_SHIFTER_DEFENSE, oPC) + + GetHasFeat(FEAT_GREATER_SHIFTER_DEFENSE, oPC) + + GetHasFeat(FEAT_SHIFTER_FEROCITY, oPC) + + GetHasFeat(FEAT_SHIFTER_INSTINCTS, oPC) + + GetHasFeat(FEAT_SHIFTER_SAVAGERY, oPC); + + return nNumFeats; +} + +//Including DelayedApplyEffectToObject here because it is often used in conjunction with EvalPRCFeats and I don't know a better place to put it +void DelayedApplyEffectToObject(int nExpectedGeneration, int nCurrentGeneration, int nDuration, effect eEffect, object oTarget, float fDuration) +{ + if (nExpectedGeneration != nCurrentGeneration) + { + //Generation has changed, so don't apply the effect + return; + } + ApplyEffectToObject(nDuration, eEffect, oTarget, fDuration); +} + +//Including DelayedApplyEffectToObject here because it is often used in conjunction with EvalPRCFeats and I don't know a better place to put it +void DelayApplyEffectToObject(float fDelay, string sGenerationName, int nDuration, effect eEffect, object oTarget, float fDuration = 0.0f) +{ + /* + There are a couple of problems that can arise in code that removes and reapplies effects; + this function helps deal with those problems. One example of a typical place where these problems + frequently arise is in the class scripts called by the EvalPRCFeats function. + + The first problem is that when code removes and immediately reapplies a series of effects, + some of those effects may not actually be reapplied. This is because the RemoveEffect() function + doesn't actually remove an effect, it marks it to be removed later--when the currently running + script finishes. If any of the effects we reapply matches one of the effects marked to be + removed, that reapplied effect will be removed when the currently running script finishes + and so will be unexpectedly missing. To illustrate: + 1) We start with effect A and B. + 2) The application function is called; it removes all effects and reapplies effects B and C. + 3) The actual removal happens when the script ends: effect A and B are removed. + End result: we have only effect C instead of the expected B and C. + The solution to this is to reapply the effects later using DelayCommand(). + + This introduces a new problem. If the function that removes and reapplies the effects is called + multiple times quickly, it can queue up a series of delayed applications. This causes two problems: + if the data on which the effects are calculated changes, the earlier delayed applications can + apply effects that should no longer be used, but they are anyway because the delayed code doesn't + know this. To illustrate: + 1) The application function is called; it removes all effects, schedules delayed application of effect A. + 2) The application function is called again; it removes all effects, schedules delayed application of effect B. + 3) Delayed application of effect A occurs. + 4) Delayed application of effect B occurs. + End result: we have both effect A and B instead of the expected result, B alone. + Another problem is that we can end up with multiple copies of the same effect. + If this happens enough, it can cause "Effect List overflow" errors. Also, if the effect stacks + with itself, this gives a greater bonus or penalty than it should. To illustrate: + 1) The application function is called; it removes all effects, schedules delayed application of effect C. + 2) The application function is called; it removes all effects, schedules delayed application of effect C. + 3) Delayed application of effect C occurs. + 4) Delayed application of effect C occurs. + End result: we have effect C twice instead of just once. + The solution is to both these problems is for the application function to increment an integer each time it + is called and to pass this to the delayed application function. The delayed application actually happens only + if the generation when it runs is the same as the generation when it was scheduled. To illustrate: + 1) We start with effect A and B applied. + 2) The application function is called: it increments generation to 2, schedules delayed application of effect B and C. + 3) The application function is called: it increments generation to 3, schedules delayed application of effect C. + 4) The generation 2 delayed application function executes: it sees that the current generation is 3 and simply exits, doing nothing. + 5) The generation 3 delayed application function executes: it sees that the current generation is 3, so it applies effect C. + End result: we have one copy of effect C, which is what we wanted. + */ + + if (fDelay < 0.0f || GetStringLength(sGenerationName) == 0) + { + ApplyEffectToObject(nDuration, eEffect, oTarget, fDuration); + } + else + { + int nExpectedGeneration = GetLocalInt(oTarget, sGenerationName); //This gets the generation now + DelayCommand( + fDelay, + DelayedApplyEffectToObject( + nExpectedGeneration, + GetLocalInt(oTarget, sGenerationName), //This is delayed by the DelayCommand, so it gets the generation when DelayedApplyEffectToObject is actually executed + nDuration, + eEffect, + oTarget, + fDuration + ) + ); + } +} + +//Including DelayedAddItemProperty here to keep it with DelayedApplyEffectToObject, though more properly it should probably be in inc_item_props.nss +void DelayedAddItemProperty(int nExpectedGeneration, int nCurrentGeneration, int nDurationType, itemproperty ipProperty, object oItem, float fDuration) +{ + if (nExpectedGeneration != nCurrentGeneration) + { + //Generation has changed, so don't apply the effect + return; + } + AddItemProperty(nDurationType, ipProperty, oItem, fDuration); +} + +//Including DelayAddItemProperty here to keep it with DelayApplyEffectToObject, though more properly it should probably be in inc_item_props.nss +void DelayAddItemProperty(float fDelay, object oGenerationHolder, string sGenerationName, int nDurationType, itemproperty ipProperty, object oItem, float fDuration = 0.0f) +{ + /* + There are a couple of problems that can arise in code that removes and reapplies item properties; + this function helps deal with those problems. One example of a typical place where these problems + frequently arise is in the class scripts called by the EvalPRCFeats function. + + The first problem is that when code removes and immediately reapplies a series of item properties, + some of those properties may not actually be reapplied. This is because the RemoveItemProperty() function + doesn't actually remove a property, it marks it to be removed later--when the currently running + script finishes. If any of the properties we reapply matches one of the properties marked to be + removed, that reapplied property will be removed when the currently running script finishes + and so will be unexpectedly missing. To illustrate: + 1) We start with properties A and B. + 2) The application function is called; it removes all properties and reapplies properties B and C. + 3) The actual removal happens when the script ends: property A and B are removed. + End result: we have only property C instead of the expected B and C. + The solution to this is to reapply the properties later using DelayCommand(). + + This introduces a new problem. If the function that removes and reapplies the properties is called + multiple times quickly, it can queue up a series of delayed applications. This causes two problems: + if the data on which the properties are calculated changes, the earlier delayed applications can + apply properties that should no longer be used, but they are anyway because the delayed code doesn't + know this. To illustrate: + 1) The application function is called; it removes all properties, schedules delayed application of property A. + 2) The application function is called again; it removes all properties, schedules delayed application of property B. + 3) Delayed application of property A occurs. + 4) Delayed application of property B occurs. + End result: we have both property A and B instead of the expected result, B alone. + Another problem is that we can end up with multiple copies of the same property. + If this happens enough, it can cause "Effect List overflow" errors. Also, if the property stacks + with itself, this gives a greater bonus or penalty than it should. To illustrate: + 1) The application function is called; it removes all properties, schedules delayed application of property C. + 2) The application function is called; it removes all properties, schedules delayed application of property C. + 3) Delayed application of property C occurs. + 4) Delayed application of property C occurs. + End result: we have property C twice instead of just once. + The solution is to both these problems is for the application function to increment an integer each time it + is called and to pass this to the delayed application function. The delayed application actually happens only + if the generation when it runs is the same as the generation when it was scheduled. To illustrate: + 1) We start with property A and B applied. + 2) The application function is called: it increments generation to 2, schedules delayed application of property B and C. + 3) The application function is called: it increments generation to 3, schedules delayed application of property C. + 4) The generation 2 delayed application function executes: it sees that the current generation is 3 and simply exits, doing nothing. + 5) The generation 3 delayed application function executes: it sees that the current generation is 3, so it applies property C. + End result: we have one copy of property C, which is what we wanted. + */ + + if (fDelay < 0.0f || GetStringLength(sGenerationName) == 0) + { + AddItemProperty(nDurationType, ipProperty, oItem, fDuration); + } + else + { + int nExpectedGeneration = GetLocalInt(oGenerationHolder, sGenerationName); //This gets the generation now + DelayCommand( + fDelay, + DelayedAddItemProperty( + nExpectedGeneration, + GetLocalInt(oGenerationHolder, sGenerationName), //This is delayed by the DelayCommand, so it gets the generation when DelayedAddItemProperty is actually executed + nDurationType, + ipProperty, + oItem, + fDuration + ) + ); + } +} + +/** + * @brief Sets the number of remaining uses per day for a feat based on an ability modifier. + * + * This function calculates the number of daily uses for a feat (`iFeat`) that a creature (`oPC`) + * possesses, based on their ability modifier (default: Charisma). It first removes any existing + * remaining uses and then reassigns the number based on the effective modifier. + * + * @param oPC The creature object for whom the feat usage is being set. + * @param iFeat The feat constant (e.g., FEAT_WHATEVER) to set uses for. + * @param iAbiMod (Optional) The ability score to base the uses on (e.g., ABILITY_CHARISMA). + * Use -1 to ignore ability modifiers. Defaults to ABILITY_CHARISMA. + * @param iMod (Optional) A flat modifier to add to the calculated ability modifier. Default is 0. + * @param iMin (Optional) The minimum number of uses to allow (even if the ability modifier is low). Default is 1. + * + * @note + * If the creature does not have the feat, no changes are made. + * If the ability modifier is negative or zero, it is treated as zero. + * If `iAbiMod` is -1, the ability modifier is ignored and `iMod` alone is used. + * The final number of uses will never be below `iMin`. + * + * @see GetAbilityModifier() + * @see GetHasFeat() + * @see DecrementRemainingFeatUses() + * @see IncrementRemainingFeatUses() + */ +void FeatUsePerDay(object oPC, int iFeat, int iAbiMod = ABILITY_CHARISMA, int iMod = 0, int iMin = 1) +{ + if(!GetHasFeat(iFeat,oPC)) + return; + + int iAbi = GetAbilityModifier(iAbiMod, oPC); + iAbi = (iAbi > 0) ? iAbi : 0; + + if (iAbiMod == -1) iAbi = 0; + iAbi += iMod; + + if(iAbi < iMin) + iAbi = iMin; + + while(GetHasFeat(iFeat, oPC)) + DecrementRemainingFeatUses(oPC, iFeat); + + while(iAbi) + { + IncrementRemainingFeatUses(oPC, iFeat); + iAbi--; + } +} + +void DomainUses(object oPC) +{ + int nUses; + if(!GetHasFeat(FEAT_BONUS_DOMAIN_STRENGTH, oPC) || PRC_Funcs_GetFeatKnown(oPC, FEAT_STRENGTH_DOMAIN_POWER)) + { + nUses = GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oPC) ? GetAbilityModifier(ABILITY_STRENGTH, oPC) : 1; + FeatUsePerDay(oPC, FEAT_STRENGTH_DOMAIN_POWER, -1, nUses); + } + if(GetHasFeat(FEAT_BONUS_DOMAIN_SUN, oPC) && GetLevelByClass(CLASS_TYPE_MYSTIC, oPC) && PRC_Funcs_GetFeatKnown(oPC, FEAT_SUN_DOMAIN_POWER)) + { + nUses = GetHasFeat(FEAT_EXTRA_TURNING, oPC) ? 7 : 3; + FeatUsePerDay(oPC, FEAT_SUN_DOMAIN_POWER, ABILITY_CHARISMA, nUses); + } + else if(!GetHasFeat(FEAT_BONUS_DOMAIN_SUN, oPC) || PRC_Funcs_GetFeatKnown(oPC, FEAT_SUN_DOMAIN_POWER)) + FeatUsePerDay(oPC, FEAT_SUN_DOMAIN_POWER, -1, 1); + + if(!GetHasFeat(FEAT_BONUS_DOMAIN_BLIGHTBRINGER, oPC) || PRC_Funcs_GetFeatKnown(oPC, FEAT_DOMAIN_POWER_BLIGHTBRINGER)) + FeatUsePerDay(oPC, FEAT_DOMAIN_POWER_BLIGHTBRINGER, ABILITY_CHARISMA, 3); + if(!GetHasFeat(FEAT_BONUS_DOMAIN_AIR, oPC) || PRC_Funcs_GetFeatKnown(oPC, FEAT_AIR_DOMAIN_POWER)) + FeatUsePerDay(oPC, FEAT_AIR_DOMAIN_POWER, ABILITY_CHARISMA, 3); + if(!GetHasFeat(FEAT_BONUS_DOMAIN_EARTH, oPC) || PRC_Funcs_GetFeatKnown(oPC, FEAT_EARTH_DOMAIN_POWER)) + FeatUsePerDay(oPC, FEAT_EARTH_DOMAIN_POWER, ABILITY_CHARISMA, 3); + if(!GetHasFeat(FEAT_BONUS_DOMAIN_FIRE, oPC) || PRC_Funcs_GetFeatKnown(oPC, FEAT_FIRE_DOMAIN_POWER)) + FeatUsePerDay(oPC, FEAT_FIRE_DOMAIN_POWER, ABILITY_CHARISMA, 3); + if(!GetHasFeat(FEAT_BONUS_DOMAIN_WATER, oPC) || PRC_Funcs_GetFeatKnown(oPC, FEAT_WATER_DOMAIN_POWER)) + FeatUsePerDay(oPC, FEAT_WATER_DOMAIN_POWER, ABILITY_CHARISMA, 3); + if(!GetHasFeat(FEAT_BONUS_DOMAIN_SLIME, oPC) || PRC_Funcs_GetFeatKnown(oPC, FEAT_DOMAIN_POWER_SLIME)) + FeatUsePerDay(oPC, FEAT_DOMAIN_POWER_SLIME, ABILITY_CHARISMA, 3); + if(!GetHasFeat(FEAT_BONUS_DOMAIN_SPIDER, oPC) || PRC_Funcs_GetFeatKnown(oPC, FEAT_DOMAIN_POWER_SPIDER)) + FeatUsePerDay(oPC, FEAT_DOMAIN_POWER_SPIDER, ABILITY_CHARISMA, 3); + if(!GetHasFeat(FEAT_BONUS_DOMAIN_SCALEYKIND, oPC) || PRC_Funcs_GetFeatKnown(oPC, FEAT_DOMAIN_POWER_SCALEYKIND)) + FeatUsePerDay(oPC, FEAT_DOMAIN_POWER_SCALEYKIND, ABILITY_CHARISMA, 3); + if(!GetHasFeat(FEAT_BONUS_DOMAIN_PLANT, oPC) || PRC_Funcs_GetFeatKnown(oPC, FEAT_PLANT_DOMAIN_POWER)) + FeatUsePerDay(oPC, FEAT_PLANT_DOMAIN_POWER, ABILITY_CHARISMA, 3); +} + +void HathranFear(object oPC) +{ + if(!GetHasFeat(FEAT_HATH_FEAR1, oPC)) + return; + + int nLevel = GetLevelByClass(CLASS_TYPE_HATHRAN, oPC); + int nUses = 0; + + // Base uses based on progression + if (nLevel >= 8) + { + nUses = 3; + } + else if (nLevel >= 6) + { + nUses = 2; + } + else if (nLevel >= 3) + { + nUses = 1; + } + + // Add +1 per 3 levels gained above 9 + if (nLevel > 9) + { + int nBonusLevels = nLevel - 9; + nUses += nBonusLevels / 3; + } + + FeatUsePerDay(oPC, FEAT_HATH_FEAR1, -1, nUses); + +} + + +void MephlingBreath(object oPC) //:: Mephlings +{ + if(!GetHasFeat(FEAT_MEPHLING_BREATH, oPC)) + return; + + int nMephBreath = ((1 + GetHitDice(oPC)) / 4); + + FeatUsePerDay(oPC, FEAT_MEPHLING_BREATH, -1, nMephBreath); +} + +void FeatAlaghar(object oPC) +{ + int iAlagharLevel = GetLevelByClass(CLASS_TYPE_ALAGHAR, oPC); + + if (!iAlagharLevel) return; + + int iClangStrike = iAlagharLevel/3; + int iClangMight = (iAlagharLevel - 1)/3; + int iRockburst = (iAlagharLevel + 2)/4; + + FeatUsePerDay(oPC, FEAT_CLANGEDDINS_STRIKE, -1, iClangStrike); + FeatUsePerDay(oPC, FEAT_CLANGEDDINS_MIGHT, -1, iClangMight); + FeatUsePerDay(oPC, FEAT_ALAG_ROCKBURST, -1, iRockburst); +} + +void FeatDiabolist(object oPC) +{ + int Diabol = GetLevelByClass(CLASS_TYPE_DIABOLIST, oPC); + + if (!Diabol) return; + + int iUse = (Diabol + 3)/3; + + FeatUsePerDay(oPC,FEAT_DIABOL_DIABOLISM_1,-1,iUse); + FeatUsePerDay(oPC,FEAT_DIABOL_DIABOLISM_2,-1,iUse); + FeatUsePerDay(oPC,FEAT_DIABOL_DIABOLISM_3,-1,iUse); +} + +void FeatNinja (object oPC) +{ + int iNinjaLevel = GetLevelByClass(CLASS_TYPE_NINJA, oPC); + // Ascetic Stalker + if (GetHasFeat(FEAT_ASCETIC_STALKER, oPC)) + iNinjaLevel += GetLevelByClass(CLASS_TYPE_MONK, oPC); + + // Martial Stalker + if (GetHasFeat(FEAT_MARTIAL_STALKER, oPC)) + iNinjaLevel += GetLevelByClass(CLASS_TYPE_FIGHTER, oPC); + + if (!iNinjaLevel) return; + + int nUsesLeft = iNinjaLevel / 2; + if (nUsesLeft < 1) + nUsesLeft = 1; + + // Expanded Ki Pool + if (GetHasFeat(FEAT_EXPANDED_KI_POOL, oPC)) nUsesLeft += 3; + + FeatUsePerDay(oPC, FEAT_KI_POWER, ABILITY_WISDOM, nUsesLeft); + FeatUsePerDay(oPC, FEAT_GHOST_STEP, ABILITY_WISDOM, nUsesLeft); + FeatUsePerDay(oPC, FEAT_GHOST_STRIKE, ABILITY_WISDOM, nUsesLeft); + FeatUsePerDay(oPC, FEAT_GHOST_WALK, ABILITY_WISDOM, nUsesLeft); + FeatUsePerDay(oPC, FEAT_KI_DODGE, ABILITY_WISDOM, nUsesLeft); + + SetLocalInt(oPC, "prc_ninja_ki", nUsesLeft); +} + +void DrowJudicator(object oPC) +{ + int iJudicator = GetLevelByClass(CLASS_TYPE_JUDICATOR, oPC); + + if (iJudicator < 1) return; + + int nUses = 3; // base 3 uses at 10th level + + if (iJudicator > 10) + { + nUses += (iJudicator - 10) / 3; // +1 use per 3 levels above 10 + } + + FeatUsePerDay(oPC, FEAT_SELVETARMS_WRATH, -1, nUses); +} + +void Oozemaster(object oPC) +{ + if (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oPC) < 10) return; + + int iOozeLvl = GetLevelByClass(CLASS_TYPE_OOZEMASTER, oPC); + int nUses = 5; // base 5 uses at 10th level + + if (iOozeLvl > 10) + { + nUses += (iOozeLvl - 10) / 2; // +1 use per 2 levels above 10 + } + + FeatUsePerDay(oPC, FEAT_OOZY_GLOB5, -1, nUses); +} + +/* void Oozemaster(object oPC) +{ + if (GetLevelByClass(CLASS_TYPE_OOZEMASTER, oPC) < 4) return; + + int iOozeLvl = GetLevelByClass(CLASS_TYPE_OOZEMASTER, oPC); + int nUses = 2 + 2 * ((iOozeLvl - 4) / 3); + + FeatUsePerDay(oPC, FEAT_OOZY_GLOB5, -1, nUses); +} */ + +void EyeOfGruumsh(object oPC) +{ + if (GetLevelByClass(CLASS_TYPE_PRC_EYE_OF_GRUUMSH, oPC) < 4) return; + + int iEOGLevel = GetLevelByClass(CLASS_TYPE_PRC_EYE_OF_GRUUMSH, oPC); + int nUses = 2 + 2 * ((iEOGLevel - 4) / 3); + + FeatUsePerDay(oPC, FEAT_BLINDING_SPITTLE, -1, nUses); +} + +void BarbarianRage(object oPC) +{ + if(!GetHasFeat(FEAT_BARBARIAN_RAGE, oPC)) return; + + int nUses = (GetLevelByClass(CLASS_TYPE_BARBARIAN, oPC) + GetLevelByClass(CLASS_TYPE_BLACK_BLOOD_CULTIST, oPC) + GetLevelByClass(CLASS_TYPE_PRC_EYE_OF_GRUUMSH, oPC)) / 4 + 1; + nUses += (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oPC) + 2) / 5; + nUses += (GetLevelByClass(CLASS_TYPE_BATTLERAGER, oPC) + 1) / 2; + nUses += (GetLevelByClass(CLASS_TYPE_CELEBRANT_SHARESS, oPC) + 2) / 4; + nUses += GetLevelByClass(CLASS_TYPE_RUNESCARRED, oPC) ? ((GetLevelByClass(CLASS_TYPE_RUNESCARRED, oPC) / 4) + 1) : 0; + nUses += (GetLevelByClass(CLASS_TYPE_TOTEM_RAGER, oPC) + 4) / 6; + + if(GetHasFeat(FEAT_EXTRA_RAGE, oPC)) nUses += 2; + + FeatUsePerDay(oPC, FEAT_BARBARIAN_RAGE, -1, nUses); + FeatUsePerDay(oPC, FEAT_GREATER_RAGE, -1, nUses); + + int nLevel = GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oPC); + if (nLevel > 0) + { + // Spell Rage: starts at 1st level, +1 use every 5 Rage Mage levels + int nUses = 1 + ((nLevel - 1) / 5); + + FeatUsePerDay(oPC, FEAT_SPELL_RAGE, -1, nUses); + } +/* if(GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oPC) > 0) + { + if(GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oPC) > 9) + nUses = 3; + else if(GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oPC) > 4) + nUses = 2; + else + nUses = 1; + + FeatUsePerDay(oPC, FEAT_SPELL_RAGE, -1, nUses); + } */ +} + +void BardSong(object oPC) +{ + // This is used to set the number of bardic song uses per day, as bardic PrCs can increase it + // or other classes can grant it on their own + if(!GetHasFeat(FEAT_BARD_SONGS, oPC)) return; + + int nTotal = GetLevelByClass(CLASS_TYPE_BARD, oPC); + nTotal += GetLevelByClass(CLASS_TYPE_DIRGESINGER, oPC); + nTotal += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oPC); + nTotal += GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oPC); + nTotal += GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oPC) / 2; + + if(GetHasFeat(FEAT_EXTRA_MUSIC, oPC)) nTotal += 4; + + FeatUsePerDay(oPC, FEAT_BARD_SONGS, -1, nTotal); +} + +void FeatVirtuoso(object oPC) +{ + int iVirtuosoLevel = GetLevelByClass(CLASS_TYPE_VIRTUOSO, oPC); + if (!iVirtuosoLevel) return; + + int nUses = GetLevelByClass(CLASS_TYPE_BARD, oPC) + iVirtuosoLevel; + if(GetHasFeat(FEAT_EXTRA_MUSIC, oPC)) nUses += 4; + SetPersistantLocalInt(oPC, "Virtuoso_Performance_Uses", nUses); + int nFeat; + for(nFeat = FEAT_VIRTUOSO_SUSTAINING_SONG; nFeat <= FEAT_VIRTUOSO_PERFORMANCE; nFeat++) + { + FeatUsePerDay(oPC, nFeat, -1, nUses); + } +} + +void HexCurse(object oPC) +{ + int iHexLevel = GetLevelByClass(CLASS_TYPE_HEXBLADE, oPC); + + if (!iHexLevel) return; + + //Hexblade's Curse + int nUses = (iHexLevel + 3) / 4; // every 4 levels get 1 more use + FeatUsePerDay(oPC, FEAT_HEXCURSE, ABILITY_CHARISMA, nUses); + + //Swift Cast + if(iHexLevel > 13) + nUses = (iHexLevel + 2) / 4; + else if(iHexLevel > 10) + nUses = 3; + else if(iHexLevel > 7) + nUses = 2; + else if(iHexLevel > 5) + nUses = 1; + else + nUses = 0; + FeatUsePerDay(oPC, FEAT_SWIFT_CAST, -1, nUses); +} + +void FeatShadowblade(object oPC) +{ + int iShadowLevel = GetLevelByClass(CLASS_TYPE_SHADOWBLADE, oPC); + if (!iShadowLevel) return; + + FeatUsePerDay(oPC, FEAT_UNERRING_STRIKE, -1, iShadowLevel); + FeatUsePerDay(oPC, FEAT_UNEXPECTED_STRIKE, -1, iShadowLevel); + FeatUsePerDay(oPC, FEAT_EPHEMERAL_WEAPON, -1, iShadowLevel); + FeatUsePerDay(oPC, FEAT_SHADOWY_STRIKE, -1, iShadowLevel); + FeatUsePerDay(oPC, FEAT_FAR_SHADOW, -1, iShadowLevel); +} + +void FeatIronMind(object oPC) +{ + int iIronmindLvl = GetLevelByClass(CLASS_TYPE_IRONMIND, oPC); + if (iIronmindLvl <= 0) return; + + int nBonus; + + // Armoured Mind: starts at level 1 + if (iIronmindLvl >= 1) + { + nBonus = 1 + (iIronmindLvl - 1) / 3; + FeatUsePerDay(oPC, FEAT_ARMOURED_MIND, -1, nBonus); + } + + // Mind Over Body: starts at level 3 + if (iIronmindLvl >= 3) + { + nBonus = 1 + (iIronmindLvl - 3) / 3; + FeatUsePerDay(oPC, FEAT_MIND_OVER_BODY, -1, nBonus); + } +} + +void FeatNoble(object oPC) +{ + int iNobleLevel = GetLevelByClass(CLASS_TYPE_NOBLE, oPC); + if (!iNobleLevel) return; + + int nBonus = 0; + if (iNobleLevel >= 17) nBonus = 5; + else if (iNobleLevel >= 13) nBonus = 4; + else if (iNobleLevel >= 9) nBonus = 3; + else if (iNobleLevel >= 5) nBonus = 2; + else if (iNobleLevel >= 2) nBonus = 1; + + FeatUsePerDay(oPC, FEAT_NOBLE_CONFIDENCE, -1, nBonus); + + nBonus = (iNobleLevel - 11) / 3 + 1; + + FeatUsePerDay(oPC, FEAT_NOBLE_GREATNESS, -1, nBonus); +} + +void DarkKnowledge(object oPC) +{ + int iArchivistLevel = GetLevelByClass(CLASS_TYPE_ARCHIVIST, oPC); + if(!iArchivistLevel) return; + + int nUses = (iArchivistLevel / 3) + 3; + FeatUsePerDay(oPC, FEAT_DK_TACTICS, -1, nUses); + FeatUsePerDay(oPC, FEAT_DK_PUISSANCE, -1, nUses); + FeatUsePerDay(oPC, FEAT_DK_FOE, -1, nUses); + FeatUsePerDay(oPC, FEAT_DK_DREADSECRET, -1, nUses); + FeatUsePerDay(oPC, FEAT_DK_FOREKNOWLEDGE, -1, nUses); +} + +void FeatImbueArrow(object oPC) +{ + if(GetPRCSwitch(PRC_USE_NEW_IMBUE_ARROW)) + FeatUsePerDay(oPC, FEAT_PRESTIGE_IMBUE_ARROW, -1, 0, 0); +} + +void DragonDisciple(object oPC) +{ + if(!GetHasFeat(FEAT_DRAGON_DIS_BREATH, oPC)) + return; + + //Dragon Disciples that do not possess any breath weapon + if(GetHasFeat(FEAT_CHIANG_LUNG_DRAGON, oPC) + || GetHasFeat(FEAT_PAN_LUNG_DRAGON, oPC) + || GetHasFeat(FEAT_SHEN_LUNG_DRAGON, oPC) + || GetHasFeat(FEAT_TUN_MI_LUNG_DRAGON, oPC) + || GetHasFeat(FEAT_YU_LUNG_DRAGON, oPC)) + DecrementRemainingFeatUses(oPC, FEAT_DRAGON_DIS_BREATH); +} + +void Warlock(object oPC) +{ + if(GetHasFeat(FEAT_FIENDISH_RESILIENCE, oPC)) + { + //Add daily Uses of Fiendish Resilience for epic warlock + if(GetHasFeat(FEAT_EPIC_FIENDISH_RESILIENCE_I, oPC)) + { + int nFeatAmt = 0; + int bDone = FALSE; + while(!bDone) + { + if(nFeatAmt >= 9) + bDone = TRUE; + else if(GetHasFeat(FEAT_EPIC_FIENDISH_RESILIENCE_II + nFeatAmt, oPC)) + nFeatAmt++; + else + bDone = TRUE; + } + nFeatAmt++; + FeatUsePerDay(oPC, FEAT_FIENDISH_RESILIENCE, -1, nFeatAmt); + } + else + FeatUsePerDay(oPC, FEAT_FIENDISH_RESILIENCE, -1, 1); + } + + //Hellfire infusion + int nCha = GetAbilityModifier(ABILITY_CHARISMA, oPC); + FeatUsePerDay(oPC, FEAT_HELLFIRE_INFUSION, -1, nCha); + + //Eldritch Spellweave + nCha += 3; + FeatUsePerDay(oPC, FEAT_ELDRITCH_SPELLWEAVE, -1, nCha); +} + +void KotMC(object oPC) +{ + int iKotMCLevel = GetLevelByClass(CLASS_TYPE_KNIGHT_MIDDLECIRCLE, oPC); + if(!iKotMCLevel) return; + + int nUses = iKotMCLevel / 3; + FeatUsePerDay(oPC, FEAT_KOTMC_TRUE_STRIKE, -1, nUses); +} + +void Ravager(object oPC) +{ + int nRavager = GetLevelByClass(CLASS_TYPE_RAVAGER, oPC); + int nUses; + + if (nRavager < 1) return; + + if (nRavager < 4) + nUses = 1; + else if (nRavager < 7) + nUses = 2; + else if (nRavager < 11) + nUses = 3; + else + nUses = 4 + ((nRavager - 11) / 5); // +1 every 5 levels after 11 + + FeatUsePerDay(oPC, FEAT_PAIN_TOUCH, -1, nUses); + + if(!GetHasFeat(FEAT_AURA_OF_FEAR, oPC)) return; + + nUses = 0; + + if (nRavager < 5) + nUses = 1; + else if (nRavager < 8) + nUses = 2; + else if (nRavager < 12) + nUses = 3; + else if (nRavager < 17) + nUses = 4; + else + nUses = 5 + ((nRavager - 17) / 5); // +1 every 5 levels after 17 + + FeatUsePerDay(oPC, FEAT_AURA_OF_FEAR, -1, nUses); + + if(!GetHasFeat(FEAT_CRUELEST_CUT, oPC)) return; + + nUses = 0; + + if (nRavager < 6) + nUses = 1; + else if (nRavager < 9) + nUses = 2; + else if (nRavager < 13) + nUses = 3; + else if (nRavager < 18) + nUses = 4; + else + nUses = 5 + ((nRavager - 18) / 5); // +1 every 5 levels after 18 + + FeatUsePerDay(oPC, FEAT_CRUELEST_CUT, -1, nUses); + + if(!GetHasFeat(FEAT_VISAGE_OF_TERROR, oPC)) return; + + nUses = 0; + + nUses = 1 + ((nRavager - 10) / 5); // +1 every 5 levels after 10 + + FeatUsePerDay(oPC, FEAT_VISAGE_OF_TERROR, -1, nUses); + +} + + +void Templar(object oPC) +{ + if(!GetHasFeat(FEAT_SECULAR_AUTHORITY, oPC)) return; + + int nTemplar = GetLevelByClass(CLASS_TYPE_TEMPLAR, oPC); + int nUses = nTemplar + ((GetHitDice(oPC) - nTemplar) / 4); + FeatUsePerDay(oPC, FEAT_SECULAR_AUTHORITY, -1, nUses); +} + +void FeatRacial(object oPC) +{ + //Shifter bonus shifting uses + int nRace = GetRacialType(oPC); + if(nRace == RACIAL_TYPE_SHIFTER) + { + int nShiftFeats = GetShiftingFeats(oPC); + int nBonusShiftUses = (nShiftFeats / 2) + 1; + FeatUsePerDay(oPC, FEAT_SHIFTER_SHIFTING, -1, nBonusShiftUses); + } + else if(nRace == RACIAL_TYPE_FORESTLORD_ELF) + { + int nUses = GetHitDice(oPC) / 5 + 1; + FeatUsePerDay(oPC, FEAT_FORESTLORD_TREEWALK, -1, nUses); + } +} + +void CombatMedic(object oPC) +{ + int iCombMed = GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oPC); + if(!iCombMed) return; + + FeatUsePerDay(oPC, FEAT_HEALING_KICKER_1, ABILITY_WISDOM, iCombMed); + FeatUsePerDay(oPC, FEAT_HEALING_KICKER_2, ABILITY_WISDOM, iCombMed); + FeatUsePerDay(oPC, FEAT_HEALING_KICKER_3, ABILITY_WISDOM, iCombMed); +} + +void MasterOfShrouds(object oPC) +{ + if(!GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oPC)) return; + + FeatUsePerDay(oPC, FEAT_MOS_UNDEAD_1, ABILITY_CHARISMA, 3); + FeatUsePerDay(oPC, FEAT_MOS_UNDEAD_2, ABILITY_CHARISMA, 3); + FeatUsePerDay(oPC, FEAT_MOS_UNDEAD_3, ABILITY_CHARISMA, 3); + FeatUsePerDay(oPC, FEAT_MOS_UNDEAD_4, ABILITY_CHARISMA, 3); +} + +void SLAUses(object oPC) +{ + if(!GetHasFeat(FEAT_SPELL_LIKE_ABILITY_1, oPC)) return; + + FeatUsePerDay(oPC, FEAT_SPELL_LIKE_ABILITY_1, -1, GetPersistantLocalInt(oPC, "PRC_SLA_Uses_1")); + FeatUsePerDay(oPC, FEAT_SPELL_LIKE_ABILITY_2, -1, GetPersistantLocalInt(oPC, "PRC_SLA_Uses_2")); + FeatUsePerDay(oPC, FEAT_SPELL_LIKE_ABILITY_3, -1, GetPersistantLocalInt(oPC, "PRC_SLA_Uses_3")); + FeatUsePerDay(oPC, FEAT_SPELL_LIKE_ABILITY_4, -1, GetPersistantLocalInt(oPC, "PRC_SLA_Uses_4")); + FeatUsePerDay(oPC, FEAT_SPELL_LIKE_ABILITY_5, -1, GetPersistantLocalInt(oPC, "PRC_SLA_Uses_5")); +} + +void ShadowShieldUses(object oPC) +{ + if(!GetHasFeat(FEAT_SA_SHIELDSHADOW, oPC)) return; + FeatUsePerDay(oPC, FEAT_SA_SHIELDSHADOW, -1, GetPrCAdjustedCasterLevelByType(TYPE_ARCANE, oPC)); +} + +void BlighterFeats(object oPC) +{ + int nClass = GetLevelByClass(CLASS_TYPE_BLIGHTER, oPC); + if (nClass <= 0) return; + + // Phase 1: Levels 3–10 + int nWildShapeUses = 0; + if (nClass >= 3) + { + int nPhase1 = (nClass <= 10) ? nClass : 10; + nWildShapeUses = 1 + ((nPhase1 - 3) / 2); + } + + // Phase 2: Additional uses every 4 levels after 10 + if (nClass > 10) + { + nWildShapeUses += ((nClass - 11) / 4) + 1; + } + + // Contagious Touch: starts at level 5, +1 use every 2 levels + int nTouchUses = 0; + if (nClass >= 5) + { + nTouchUses = 1 + ((nClass - 5) / 2); + } + + FeatUsePerDay(oPC, FEAT_UNDEAD_WILD_SHAPE, -1, nWildShapeUses); + FeatUsePerDay(oPC, FEAT_CONTAGIOUS_TOUCH, -1, nTouchUses); +} + + + +/* void BlighterFeats(object oPC) +{ + int nClass = GetLevelByClass(CLASS_TYPE_BLIGHTER, oPC); + if(0 >= nClass) return; + + if (nClass == 3) + FeatUsePerDay(oPC, FEAT_UNDEAD_WILD_SHAPE, -1, 1); + else if (nClass == 4) + FeatUsePerDay(oPC, FEAT_UNDEAD_WILD_SHAPE, -1, 2); + else if (nClass == 5) + { + FeatUsePerDay(oPC, FEAT_UNDEAD_WILD_SHAPE, -1, 2); + FeatUsePerDay(oPC, FEAT_CONTAGIOUS_TOUCH, -1, 1); + } + else if (nClass == 6) + { + FeatUsePerDay(oPC, FEAT_UNDEAD_WILD_SHAPE, -1, 3); + FeatUsePerDay(oPC, FEAT_CONTAGIOUS_TOUCH, -1, 1); + } + else if (nClass == 7) + { + FeatUsePerDay(oPC, FEAT_UNDEAD_WILD_SHAPE, -1, 3); + FeatUsePerDay(oPC, FEAT_CONTAGIOUS_TOUCH, -1, 2); + } + else if (nClass == 8) + { + FeatUsePerDay(oPC, FEAT_UNDEAD_WILD_SHAPE, -1, 4); + FeatUsePerDay(oPC, FEAT_CONTAGIOUS_TOUCH, -1, 2); + } + else if (nClass == 9) + { + FeatUsePerDay(oPC, FEAT_UNDEAD_WILD_SHAPE, -1, 4); + FeatUsePerDay(oPC, FEAT_CONTAGIOUS_TOUCH, -1, 3); + } + else + { + FeatUsePerDay(oPC, FEAT_UNDEAD_WILD_SHAPE, -1, 5); + FeatUsePerDay(oPC, FEAT_CONTAGIOUS_TOUCH, -1, 3); + } +} */ + +void MysteryFeats(object oPC) +{ + int nClass = GetLevelByClass(CLASS_TYPE_CHILD_OF_NIGHT, oPC); + if(nClass > 0) + { + if (nClass >= 10) + FeatUsePerDay(oPC, FEAT_CLOAK_SHADOWS, -1, 2); + else if (nClass >= 6) + FeatUsePerDay(oPC, FEAT_CLOAK_SHADOWS, -1, 3); + else + FeatUsePerDay(oPC, FEAT_CLOAK_SHADOWS, -1, 1); + + if (nClass >= 7) + FeatUsePerDay(oPC, FEAT_DANCING_SHADOWS, -1, 2); + else + FeatUsePerDay(oPC, FEAT_DANCING_SHADOWS, -1, 1); + } + nClass = GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oPC); + if (nClass >= 2) + { + int nUses; + if (nClass < 5) + nUses = 1; + else if (nClass < 8) + nUses = 2; + else + nUses = 3 + (nClass - 8) / 3; + + FeatUsePerDay(oPC, FEAT_INNATE_COUNTERSPELL, -1, nUses); + } +/* { + if (nClass >= 8) + FeatUsePerDay(oPC, FEAT_INNATE_COUNTERSPELL, -1, 3); + else if (nClass >= 5) + FeatUsePerDay(oPC, FEAT_INNATE_COUNTERSPELL, -1, 2); + else + FeatUsePerDay(oPC, FEAT_INNATE_COUNTERSPELL, -1, 1); + } */ + nClass = GetLevelByClass(CLASS_TYPE_SHADOWSMITH, oPC); + if(nClass > 0) + { + FeatUsePerDay(oPC, FEAT_TOUCH_SHADOW , -1, nClass); + FeatUsePerDay(oPC, FEAT_SHROUD_SHADOW , -1, nClass); + FeatUsePerDay(oPC, FEAT_SHADOW_CRAFT , -1, nClass/2); + FeatUsePerDay(oPC, FEAT_ARMOR_SHADOW , -1, nClass/2); + FeatUsePerDay(oPC, FEAT_ARMOR_SHADOW_Q, -1, nClass/2); + } +} + +void WildMage(object oPC) +{ + int nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oPC); + + if (nClass >= 2) + { + int nUses = 1 + ((nClass - 2) / 3); + FeatUsePerDay(oPC, FEAT_WILD_MAGE_RANDOM_DEFLECTOR, -1, nUses); + } +} +/* void WildMage(object oPC) +{ + int nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oPC); + if(nClass > 0) + { + if (nClass >= 8) + FeatUsePerDay(oPC, FEAT_WILD_MAGE_RANDOM_DEFLECTOR, -1, 2); + else if (nClass >= 5) + FeatUsePerDay(oPC, FEAT_WILD_MAGE_RANDOM_DEFLECTOR, -1, 3); + else + FeatUsePerDay(oPC, FEAT_WILD_MAGE_RANDOM_DEFLECTOR, -1, 1); + } +} */ + +void Factotum(object oPC) +{ + int nClass = GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC); + if(nClass > 0) + { + if (nClass >= 20) + { + FeatUsePerDay(oPC, FEAT_OPPORTUNISTIC_PIETY_TURN, ABILITY_WISDOM, 6); + FeatUsePerDay(oPC, FEAT_OPPORTUNISTIC_PIETY_HEAL, ABILITY_WISDOM, 6); + } + else if (nClass >= 15) + { + FeatUsePerDay(oPC, FEAT_OPPORTUNISTIC_PIETY_TURN, ABILITY_WISDOM, 5); + FeatUsePerDay(oPC, FEAT_OPPORTUNISTIC_PIETY_HEAL, ABILITY_WISDOM, 5); + } + else if (nClass >= 10) + { + FeatUsePerDay(oPC, FEAT_OPPORTUNISTIC_PIETY_TURN, ABILITY_WISDOM, 4); + FeatUsePerDay(oPC, FEAT_OPPORTUNISTIC_PIETY_HEAL, ABILITY_WISDOM, 4); + } + else + { + FeatUsePerDay(oPC, FEAT_OPPORTUNISTIC_PIETY_TURN, ABILITY_WISDOM, 3); + FeatUsePerDay(oPC, FEAT_OPPORTUNISTIC_PIETY_HEAL, ABILITY_WISDOM, 3); + } + } +} + +/* void Factotum(object oPC) +{ + int nClass = GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC); + if(nClass > 0) + { + if (nClass >= 20) + { + FeatUsePerDay(oPC, FEAT_OPPORTUNISTIC_PIETY_TURN, ABILITY_WISDOM, 0, 6); + FeatUsePerDay(oPC, FEAT_OPPORTUNISTIC_PIETY_HEAL, ABILITY_WISDOM, 0, 6); + } + else if (nClass >= 15) + { + FeatUsePerDay(oPC, FEAT_OPPORTUNISTIC_PIETY_TURN, ABILITY_WISDOM, 0, 5); + FeatUsePerDay(oPC, FEAT_OPPORTUNISTIC_PIETY_HEAL, ABILITY_WISDOM, 0, 5); + } + else if (nClass >= 10) + { + FeatUsePerDay(oPC, FEAT_OPPORTUNISTIC_PIETY_TURN, ABILITY_WISDOM, 0, 4); + FeatUsePerDay(oPC, FEAT_OPPORTUNISTIC_PIETY_HEAL, ABILITY_WISDOM, 0, 4); + } + else + { + FeatUsePerDay(oPC, FEAT_OPPORTUNISTIC_PIETY_TURN, ABILITY_WISDOM, 0, 3); + FeatUsePerDay(oPC, FEAT_OPPORTUNISTIC_PIETY_HEAL, ABILITY_WISDOM, 0, 3); + } + } +} */ + +void Sharess(object oPC) +{ + int nClass = GetLevelByClass(CLASS_TYPE_CELEBRANT_SHARESS, oPC); + if(nClass > 0) + { + FeatUsePerDay(oPC, FEAT_CELEBRANT_SHARESS_FASCINATE , -1, 0, nClass); + FeatUsePerDay(oPC, FEAT_CELEBRANT_SHARESS_CONFUSE , -1, 0, nClass); + FeatUsePerDay(oPC, FEAT_CELEBRANT_SHARESS_DOMINATE , -1, 0, nClass); + } +} + +void SoulbornDefense(object oPC) +{ + int nClass = GetLevelByClass(CLASS_TYPE_SOULBORN, oPC); + if(nClass > 0) + { + if (nClass >= 37) + FeatUsePerDay(oPC, FEAT_SHARE_INCARNUM_DEFENSE, -1, 0, 8); + else if (nClass >= 33) + FeatUsePerDay(oPC, FEAT_SHARE_INCARNUM_DEFENSE, -1, 0, 7); + else if (nClass >= 29) + FeatUsePerDay(oPC, FEAT_SHARE_INCARNUM_DEFENSE, -1, 0, 6); + else if (nClass >= 25) + FeatUsePerDay(oPC, FEAT_SHARE_INCARNUM_DEFENSE, -1, 0, 5); + else if (nClass >= 21) + FeatUsePerDay(oPC, FEAT_SHARE_INCARNUM_DEFENSE, -1, 0, 4); + else if (nClass >= 17) + FeatUsePerDay(oPC, FEAT_SHARE_INCARNUM_DEFENSE, -1, 0, 3); + else if (nClass >= 13) + FeatUsePerDay(oPC, FEAT_SHARE_INCARNUM_DEFENSE, -1, 0, 2); + else + FeatUsePerDay(oPC, FEAT_SHARE_INCARNUM_DEFENSE, -1, 0, 1); + } +} + +void TotemistReshape(object oPC) +{ + int nClass = GetLevelByClass(CLASS_TYPE_TOTEMIST, oPC); + if(nClass > 0) + { + if (nClass >= 40) + FeatUsePerDay(oPC, FEAT_REBIND_TOTEM_SOULMELD, -1, 0, 9); + else if (nClass >= 36) + FeatUsePerDay(oPC, FEAT_REBIND_TOTEM_SOULMELD, -1, 0, 8); + else if (nClass >= 32) + FeatUsePerDay(oPC, FEAT_REBIND_TOTEM_SOULMELD, -1, 0, 7); + else if (nClass >= 28) + FeatUsePerDay(oPC, FEAT_REBIND_TOTEM_SOULMELD, -1, 0, 6); + else if (nClass >= 24) + FeatUsePerDay(oPC, FEAT_REBIND_TOTEM_SOULMELD, -1, 0, 5); + else if (nClass >= 20) + FeatUsePerDay(oPC, FEAT_REBIND_TOTEM_SOULMELD, -1, 0, 4); + else if (nClass >= 16) + FeatUsePerDay(oPC, FEAT_REBIND_TOTEM_SOULMELD, -1, 0, 3); + else if (nClass >= 12) + FeatUsePerDay(oPC, FEAT_REBIND_TOTEM_SOULMELD, -1, 0, 2); + else + FeatUsePerDay(oPC, FEAT_REBIND_TOTEM_SOULMELD, -1, 0, 1); + } +} + +void CWSamurai(object oPC) +{ + int nClass = GetLevelByClass(CLASS_TYPE_CW_SAMURAI, oPC); + if(nClass > 0) + { + if (nClass >= 17) + FeatUsePerDay(oPC, FEAT_KIAI_SMITE, -1, 0, 4); + else if (nClass >= 12) + FeatUsePerDay(oPC, FEAT_KIAI_SMITE, -1, 0, 3); + else if (nClass >= 7) + FeatUsePerDay(oPC, FEAT_KIAI_SMITE, -1, 0, 2); + else + FeatUsePerDay(oPC, FEAT_KIAI_SMITE, -1, 0, 1); + } +} + +void CrusaderSmite(object oPC) +{ + int nClass = GetLevelByClass(CLASS_TYPE_CRUSADER, oPC); + if(nClass > 0) + { + if (nClass >= 18) + FeatUsePerDay(oPC, FEAT_CRUSADER_SMITE, -1, 0, 2); + else + FeatUsePerDay(oPC, FEAT_CRUSADER_SMITE, -1, 0, 1); + } +} + +void AnimaMage(object oPC) +{ + int nClass = GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oPC); + if(nClass > 0) + { + int nUses; + // Levels 1-6: 1 use + if(nClass < 7) + { + nUses = 1; + } + // Levels 7-8: 2 uses + else if(nClass < 9) + { + nUses = 2; + } + // Levels 9-10: 3 uses + else if(nClass <= 10) + { + nUses = 3; + } + // Levels above 10: 1 additional use per 3 levels + else + { + nUses = 3 + ((nClass - 10) / 3); + } + FeatUsePerDay(oPC, FEAT_ANIMA_VESTIGE_METAMAGIC, -1, 0, nUses); + } +} + +/* void AnimaMage(object oPC) +{ + int nClass = GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oPC); + if(nClass > 0) + { + if (nClass >= 9) + FeatUsePerDay(oPC, FEAT_ANIMA_VESTIGE_METAMAGIC, -1, 0, 3); + else if (nClass >= 7) + FeatUsePerDay(oPC, FEAT_ANIMA_VESTIGE_METAMAGIC, -1, 0, 2); + else + FeatUsePerDay(oPC, FEAT_ANIMA_VESTIGE_METAMAGIC, -1, 0, 1); + } +} */ + +void FeatSpecialUsePerDay(object oPC) +{ + FeatUsePerDay(oPC, FEAT_WWOC_WIDEN_SPELL, ABILITY_CHARISMA, GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oPC)); + FeatUsePerDay(oPC, FEAT_FIST_DAL_QUOR_STUNNING_STRIKE, -1, GetLevelByClass(CLASS_TYPE_FIST_DAL_QUOR, oPC)); + FeatUsePerDay(oPC, FEAT_AD_FALSE_KEENNESS, -1, GetLevelByClass(CLASS_TYPE_ARCANE_DUELIST, oPC)); + FeatUsePerDay(oPC, FEAT_LASHER_STUNNING_SNAP, -1, GetLevelByClass(CLASS_TYPE_LASHER, oPC)); + FeatUsePerDay(oPC, FEAT_AD_BLUR, -1, GetLevelByClass(CLASS_TYPE_ARCANE_DUELIST, oPC)); + FeatUsePerDay(oPC, FEAT_SHADOW_RIDE, -1, GetLevelByClass(CLASS_TYPE_CRINTI_SHADOW_MARAUDER, oPC)); + FeatUsePerDay(oPC, FEAT_SHADOWJUMP, -1, GetLevelByClass(CLASS_TYPE_SHADOWLORD, oPC)); + FeatUsePerDay(oPC, FEAT_SHADOWBANE_SMITE, -1, (GetLevelByClass(CLASS_TYPE_SHADOWBANE_INQUISITOR, oPC)+2)/4); + FeatUsePerDay(oPC, FEAT_INCARNUM_RADIANCE, -1, (GetLevelByClass(CLASS_TYPE_INCARNATE, oPC)+2)/5); + FeatUsePerDay(oPC, FEAT_RAPID_MELDSHAPING, -1, (GetLevelByClass(CLASS_TYPE_INCARNATE, oPC)+1)/6); + FeatUsePerDay(oPC, FEAT_SMITE_OPPOSITION, -1, (GetLevelByClass(CLASS_TYPE_SOULBORN, oPC)+5)/5); + FeatUsePerDay(oPC, FEAT_SMITE_CHAOS, -1, (GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oPC)+2)/3); + FeatUsePerDay(oPC, FEAT_INCANDESCENT_OVERLOAD, -1, (GetLevelByClass(CLASS_TYPE_INCANDESCENT_CHAMPION, oPC)-1)/3); + FeatUsePerDay(oPC, FEAT_NECROCARNATE_SOULSHIELD, -1, GetLevelByClass(CLASS_TYPE_NECROCARNATE, oPC)/2); + FeatUsePerDay(oPC, FEAT_SCION_DANTALION_SCHOLARSHIP, -1, GetLevelByClass(CLASS_TYPE_SCION_DANTALION, oPC)); + FeatUsePerDay(oPC, FEAT_SMITE_GOOD_ALIGN, -1, (GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oPC)+1)/2); + FeatUsePerDay(oPC, FEAT_DOA_LEARN_SECRETS, -1, (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oPC)+1)/2); + FeatUsePerDay(oPC, FEAT_BLIGHTTOUCH, -1, (GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oPC) - 1) / 2); + FeatUsePerDay(oPC, FEAT_FIST_OF_IRON, ABILITY_WISDOM, 3); + FeatUsePerDay(oPC, FEAT_SMITE_UNDEAD, ABILITY_CHARISMA, 3); + FeatUsePerDay(oPC, FEAT_COC_WRATH, ABILITY_CHARISMA, 3); + FeatUsePerDay(oPC, FEAT_KILLOREN_ASPECT_D, ABILITY_CHARISMA); + FeatUsePerDay(oPC, FEAT_AVENGING_STRIKE, ABILITY_CHARISMA, 0, 1); + FeatUsePerDay(oPC, FEAT_INCARNUM_BLADE_REBIND, ABILITY_CONSTITUTION, 1); + FeatUsePerDay(oPC, FEAT_WITCHBORN_INTEGUMENT, ABILITY_CONSTITUTION, 1); + FeatUsePerDay(oPC, FEAT_LIPS_RAPTUR); + FeatUsePerDay(oPC, FEAT_COMMAND_SPIDERS, ABILITY_CHARISMA, 3); + FeatUsePerDay(oPC, FEAT_FM_FOREST_DOMINION, ABILITY_CHARISMA, 3); + FeatUsePerDay(oPC, FEAT_SOD_DEATH_TOUCH, -1, (GetLevelByClass(CLASS_TYPE_SLAYER_OF_DOMIEL, oPC)+4)/4); + FeatUsePerDay(oPC, FEAT_SUEL_DISPELLING_STRIKE, -1, (GetLevelByClass(CLASS_TYPE_SUEL_ARCHANAMACH, oPC) + 2) / 4); + FeatDiabolist(oPC); + FeatAlaghar(oPC); + ShadowShieldUses(oPC); + CombatMedic(oPC); + FeatNinja(oPC); + FeatNoble(oPC); + MasterOfShrouds(oPC); + HexCurse(oPC); + FeatRacial(oPC); + FeatShadowblade(oPC); + SoulbornDefense(oPC); + FeatIronMind(oPC); + + int nDread = GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oPC); + if (nDread >= 1) + {//:: Enervating Touch + if (nDread >= 17) + { + FeatUsePerDay(oPC, FEAT_DN_ENERVATING_TOUCH, -1, nDread); + } + else + { + FeatUsePerDay(oPC, FEAT_DN_ENERVATING_TOUCH, -1, nDread/2); + } + } + + if (nDread >= 3) + {//:: Negative Energy Burst + int NegBurstUses = 0; + + if (nDread >= 8) + { + // Gains 1 more daily use of Negative Energy Burst every 5 levels after 3rd + int additionalUses = (nDread - 3) / 5; + NegBurstUses += 1 + additionalUses; + FeatUsePerDay(oPC, FEAT_DN_NEG_NRG_BURST, -1, NegBurstUses); + } + else if (nDread >= 3) + { + // Dread Necromancer gains 1 use at level 3 + NegBurstUses += 1; + FeatUsePerDay(oPC, FEAT_DN_NEG_NRG_BURST, -1, NegBurstUses); + } + } + if (nDread >= 7) + {//:: Scabrous Touch + int ScabUses = 0; + + // Gains 1 more daily use every 5 levels after 21 + if (nDread >= 26) + { + int additionalUses = (nDread - 21) / 5; + ScabUses += 4 + additionalUses; + FeatUsePerDay(oPC, FEAT_DN_SCABROUS_TOUCH, -1, ScabUses); + } + // Epic Dread Necromancer gains 1 more daily use at level 21 + else if (nDread >= 21) + { + ScabUses += 4; + FeatUsePerDay(oPC, FEAT_DN_SCABROUS_TOUCH, -1, ScabUses); + } + else if (nDread >= 16) + { + ScabUses += 3; + FeatUsePerDay(oPC, FEAT_DN_SCABROUS_TOUCH, -1, ScabUses); + } + else if (nDread >= 11) + { + ScabUses += 2; + FeatUsePerDay(oPC, FEAT_DN_SCABROUS_TOUCH, -1, ScabUses); + } + + else + { + ScabUses += 1; + FeatUsePerDay(oPC, FEAT_DN_SCABROUS_TOUCH, -1, ScabUses); + } + } + + SLAUses(oPC); + DomainUses(oPC); + BardSong(oPC); + EyeOfGruumsh(oPC); + BarbarianRage(oPC); + FeatVirtuoso(oPC); + ResetExtraStunfistUses(oPC); + DarkKnowledge(oPC); + FeatImbueArrow(oPC); + DragonDisciple(oPC); + Warlock(oPC); + KotMC(oPC); + Templar(oPC); + BlighterFeats(oPC); + MysteryFeats(oPC); + WildMage(oPC); + Factotum(oPC); + Sharess(oPC); + TotemistReshape(oPC); + CWSamurai(oPC); + CrusaderSmite(oPC); + AnimaMage(oPC); + MephlingBreath(oPC); + HathranFear(oPC); + Oozemaster(oPC); + DrowJudicator(oPC); + Ravager(oPC); +} + diff --git a/src/include/prc_inc_hextor.nss b/src/include/prc_inc_hextor.nss new file mode 100644 index 0000000..affe360 --- /dev/null +++ b/src/include/prc_inc_hextor.nss @@ -0,0 +1,61 @@ +#include "prc_feat_const" + +const string BRUTAL_STRIKE_MODE_VAR = "PRC_BRUTAL_STRIKE_MODE"; + +int _prc_inc_hextor_BrutalStrikeFeatCount(object oPC) +{ + if(GetHasFeat(FEAT_BSTRIKE_12, oPC)) + return 12; + else if (GetHasFeat(FEAT_BSTRIKE_11, oPC)) + return 11; + else if (GetHasFeat(FEAT_BSTRIKE_10, oPC)) + return 10; + else if (GetHasFeat(FEAT_BSTRIKE_9, oPC)) + return 9; + else if (GetHasFeat(FEAT_BSTRIKE_8, oPC)) + return 8; + else if (GetHasFeat(FEAT_BSTRIKE_7, oPC)) + return 7; + else if (GetHasFeat(FEAT_BSTRIKE_6, oPC)) + return 6; + else if (GetHasFeat(FEAT_BSTRIKE_5, oPC)) + return 5; + else if (GetHasFeat(FEAT_BSTRIKE_4, oPC)) + return 4; + else if (GetHasFeat(FEAT_BSTRIKE_3, oPC)) + return 3; + else if (GetHasFeat(FEAT_BSTRIKE_2, oPC)) + return 2; + else if (GetHasFeat(FEAT_BSTRIKE_1, oPC)) + return 1; + + return 0; +} + +void _prc_inc_hextor_ApplyBrutalStrike(object oPC, int nBonus) +{ + object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + if (!GetIsObjectValid(oWeap)) + { + oWeap = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC); + if (!GetIsObjectValid(oWeap)) + { + oWeap = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC); + if (!GetIsObjectValid(oWeap)) + oWeap = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oPC); + } + } + int nDamageType = (!GetIsObjectValid(oWeap)) ? DAMAGE_TYPE_BLUDGEONING : GetItemDamageType(oWeap); + + effect eBrutalStrike; + if (GetLocalInt(oPC, BRUTAL_STRIKE_MODE_VAR)) + eBrutalStrike = EffectAttackIncrease(nBonus); + else + eBrutalStrike = EffectDamageIncrease(nBonus, nDamageType); + eBrutalStrike = ExtraordinaryEffect(eBrutalStrike); + + PRCRemoveEffectsFromSpell(oPC, SPELL_HEXTOR_DAMAGE); + PRCRemoveEffectsFromSpell(oPC, SPELL_HEXTOR_MODE); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBrutalStrike, oPC); +} diff --git a/src/include/prc_inc_itmrstr.nss b/src/include/prc_inc_itmrstr.nss new file mode 100644 index 0000000..156f530 --- /dev/null +++ b/src/include/prc_inc_itmrstr.nss @@ -0,0 +1,558 @@ +/* + + This include governs all the new itemproperties + Both restrictions and features + +*/ +//:: Updated for .35 by Jaysyn 2023/03/10 + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const string PLAYER_SPEED_INCREASE = "player_speed_increase"; +const string PLAYER_SPEED_DECREASE = "player_speed_decrease"; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +int DoUMDCheck(object oItem, object oPC, int nDCMod); + +int CheckPRCLimitations(object oItem, object oPC = OBJECT_INVALID); + +/** + * Non-returning wrapper for CheckPRCLimitations. + */ +void VoidCheckPRCLimitations(object oItem, object oPC = OBJECT_INVALID); + +void CheckForPnPHolyAvenger(object oItem); + + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "inc_utility" +#include "prc_inc_newip" + + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +/*void _prc_inc_itmrstr_ApplySpeedModification(object oPC, int nEffectType, int nSpeedMod) +{ + if(DEBUG) DoDebug("_prc_inc_itmrstr_ApplySpeedModification(" + DebugObject2Str(oPC) + ", " + IntToString(nEffectType) + ", " + IntToString(nSpeedMod) + ")"); + // The skin object should be OBJECT_SELF here + // Clean up existing speed modification + effect eTest = GetFirstEffect(oPC); + while(GetIsEffectValid(eTest)) + { + if(GetEffectCreator(eTest) == OBJECT_SELF && + GetEffectType(eTest) == nEffectType && + GetEffectSubType(eTest) == SUBTYPE_SUPERNATURAL + ) + RemoveEffect(oPC, eTest); + eTest = GetNextEffect(oPC); + } + + // Apply speed mod if there is any + if(nSpeedMod > 0) + { + effect eSpeedMod = SupernaturalEffect(nEffectType == EFFECT_TYPE_MOVEMENT_SPEED_INCREASE ? + EffectMovementSpeedIncrease(nSpeedMod) : + EffectMovementSpeedDecrease(nSpeedMod) + ); + /// @todo Determine if the delay is actually needed here + DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSpeedMod, oPC)); + } +} + +void _prc_inc_itmrstr_ApplySpeedIncrease(object oPC) +{ + // Get target speed modification value. Limit to 99, since that's the effect constructor maximum value + int nSpeedMod = PRCMin(99, GetLocalInt(oPC, PLAYER_SPEED_INCREASE)); + object oSkin = GetPCSkin(oPC); + + AssignCommand(oSkin, _prc_inc_itmrstr_ApplySpeedModification(oPC, EFFECT_TYPE_MOVEMENT_SPEED_INCREASE, nSpeedMod)); +} + + +void _prc_inc_itmrstr_ApplySpeedDecrease(object oPC) +{ + // Get target speed modification value. Limit to 99, since that's the effect constructor maximum value + int nSpeedMod = GetLocalInt(oPC, PLAYER_SPEED_DECREASE); + object oSkin = GetPCSkin(oPC); + + AssignCommand(oSkin, _prc_inc_itmrstr_ApplySpeedModification(oPC, EFFECT_TYPE_MOVEMENT_SPEED_DECREASE, nSpeedMod)); +}*/ + +void _prc_inc_itmrstr_ApplyAoE(object oPC, object oItem, int nSubType, int nCost) +{ + int nAoEID = StringToInt(Get2DACache("iprp_aoe", "AoEID", nSubType)); + string sTag = Get2DACache("vfx_persistent", "LABEL", nAoEID); + effect eAoE = EffectAreaOfEffect(nAoEID, + Get2DACache("iprp_aoe", "EnterScript", nSubType), + Get2DACache("iprp_aoe", "HBScript", nSubType), + Get2DACache("iprp_aoe", "ExitScript", nSubType)); + + // The item applies the AoE effect + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAoE, oPC); + + // Get an object reference to the newly created AoE + location lLoc = GetLocation(oPC); + object oAoE = GetFirstObjectInShape(SHAPE_SPHERE, 1.0f, lLoc, FALSE, OBJECT_TYPE_AREA_OF_EFFECT); + while(GetIsObjectValid(oAoE)) + { + // Test if we found the correct AoE + if(GetTag(oAoE) == sTag && + !GetLocalInt(oAoE, "PRC_AoE_IPRP_Init") + ) + { + SetLocalInt(oAoE, "PRC_AoE_IPRP_Init", TRUE); + break; + } + // Didn't find, get next + oAoE = GetNextObjectInShape(SHAPE_SPHERE, 1.0f, lLoc, FALSE, OBJECT_TYPE_AREA_OF_EFFECT); + } + if(!GetIsObjectValid(oAoE)) DoDebug("ERROR: _prc_inc_itmrstr_ApplyAoE: Can't find AoE created by " + DebugObject2Str(oItem)); + + // Set caster level override on the AoE + SetLocalInt(oAoE, PRC_CASTERLEVEL_OVERRIDE, nCost); + //if(DEBUG) DoDebug("_prc_inc_itmrstr_ApplyAoE: AoE level: " + IntToString(nCost)); +} + +void _prc_inc_itmrstr_ApplyWizardry(object oPC, object oItem, int nSpellLevel, string sType) +{ + //properties were already applied - happens when loading a saved game + if(GetLocalInt(oItem, "PRC_Wizardry"+IntToString(nSpellLevel))) + return; + + SetLocalInt(oItem, "PRC_Wizardry"+IntToString(nSpellLevel), TRUE); + int nClass, nSlots, i; + for(i = 1; i <= 8; i++) + { + nClass = GetClassByPosition(i, oPC); + if((sType == "A" && GetIsArcaneClass(nClass)) || (sType == "D" && GetIsDivineClass(nClass))) + { + if(GetAbilityScoreForClass(nClass, oPC) < nSpellLevel + 10) + continue; + + int nSpellSlotLevel = GetSpellslotLevel(nClass, oPC) - 1; + string sFile = Get2DACache("classes", "SpellGainTable", nClass); + nSlots = StringToInt(Get2DACache(sFile, "SpellLevel" + IntToString(nSpellLevel), nSpellSlotLevel)); + //if(DEBUG) DoDebug("Adding "+IntToString(nSlots)" bonus slots for "+IntToString(nClass)" class."); + + if(nSlots) + { + string sVar = "PRC_IPRPBonSpellSlots_" + IntToString(nClass) + "_" + IntToString(nSpellLevel); + int j = 0; + while(j < nSlots) + { + //DoDebug(IntToString(j)); + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyBonusLevelSpell(nClass, nSpellLevel), oItem); + //nsb compatibility + SetLocalInt(oPC, sVar, (GetLocalInt(oPC, sVar) + 1)); + j++; + } + } + } + } + SetPlotFlag(oItem, TRUE); +} + +void _prc_inc_itmrstr_RemoveWizardry(object oPC, object oItem, int nSpellLevel, string sType) +{ + DeleteLocalInt(oItem, "PRC_Wizardry"+IntToString(nSpellLevel)); + SetPlotFlag(oItem, FALSE); + itemproperty ipTest = GetFirstItemProperty(oItem); + string sVar; + while(GetIsItemPropertyValid(ipTest)) + { + if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N) + { + if(GetItemPropertyCostTableValue(ipTest) == nSpellLevel) + { + int nClass = GetItemPropertySubType(ipTest); + if((sType == "A" && GetIsArcaneClass(nClass)) || (sType == "D" && GetIsDivineClass(nClass))) + { + RemoveItemProperty(oItem, ipTest); + //remove bonus slots from nsb classes + sVar = "PRC_IPRPBonSpellSlots_" + IntToString(nClass) + "_" + IntToString(nSpellLevel); + SetLocalInt(oPC, sVar, (GetLocalInt(oPC, sVar) - 1)); + int nCount, nSpellbook = GetSpellbookTypeForClass(nClass); + string sArray = "NewSpellbookMem_"+IntToString(nClass); + if(nSpellbook == SPELLBOOK_TYPE_SPONTANEOUS) + { + nCount = persistant_array_get_int(oPC, sArray, nSpellLevel); + if(nCount) + { + nCount--; + persistant_array_set_int(oPC, sArray, nSpellLevel, nCount); + } + } + else if(nSpellbook == SPELLBOOK_TYPE_PREPARED) + { + string sIDX = "SpellbookIDX" + IntToString(nSpellLevel) + "_" + IntToString(nClass); + int i, nSpellbookID, nMax = persistant_array_get_size(oPC, sIDX) - 1; + for(i = nMax; i >= 0; i--) + { + nSpellbookID = persistant_array_get_int(oPC, sIDX, i); + nCount = persistant_array_get_int(oPC, sArray, nSpellbookID); + if(nCount) + { + nCount--; + persistant_array_set_int(oPC, sArray, nSpellbookID, nCount); + break; + } + } + } + } + } + } + ipTest = GetNextItemProperty(oItem); + } +} + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int GetUMDForItemCost(object oItem) +{ + string s2DAEntry; + int nValue = GetGoldPieceValue(oItem); + int n2DAValue = StringToInt(s2DAEntry); + int i; + while(n2DAValue < nValue) + { + s2DAEntry = Get2DACache("skillvsitemcost", "DeviceCostMax", i); + n2DAValue = StringToInt(s2DAEntry); + i++; + } + i--; + string s2DAReqSkill = Get2DACache("skillvsitemcost", "SkillReq_Class", i); + if(s2DAReqSkill == "") + return -1; + return StringToInt(s2DAReqSkill); +} + +//this is a scripted version of the bioware UMD check for using restricted items +//this also applies effects relating to new itemproperties +int DoUMDCheck(object oItem, object oPC, int nDCMod) +{ + + //doesnt have UMD + if(!GetHasSkill(SKILL_USE_MAGIC_DEVICE, oPC)) + return FALSE; + + int nSkill = GetSkillRank(SKILL_USE_MAGIC_DEVICE, oPC); + int nReqSkill = GetUMDForItemCost(oItem); + //class is a dc20 test + nReqSkill = nReqSkill - 20 + nDCMod; + if(nReqSkill > nSkill) + return FALSE; + else + return TRUE; +} + +void VoidCheckPRCLimitations(object oItem, object oPC = OBJECT_INVALID) +{ + CheckPRCLimitations(oItem, oPC); +} + +//tests for use restrictions +//also appies effects for those IPs tat need them +/// @todo Rename. It's not just limitations anymore +int CheckPRCLimitations(object oItem, object oPC = OBJECT_INVALID) +{ + // Sanity check - the item needs to be valid + if(!GetIsObjectValid(oItem)) + return FALSE; /// @todo Might be better to auto-pass the limitation aspect in case of invalid item + + // In case no item owner was given, find it out + if(!GetIsObjectValid(oPC)) + oPC = GetItemPossessor(oItem); + + // Sanity check - the item needs to be in some creature's possession for this function to make sense + if(!GetIsObjectValid(oPC)) + return FALSE; + + // Equip and Unequip events need some special handling + int bUnequip = GetItemLastUnequipped() == oItem && GetLocalInt(oPC, "ONEQUIP") == 1; + int bEquip = GetItemLastEquipped() == oItem && GetLocalInt(oPC, "ONEQUIP") == 2; + + // Use restriction and UMD use + int bPass = TRUE; + int nUMDDC = 0; + + // Speed modification. Used to determine if effects need to be applied + int nSpeedIncrease = GetLocalInt(oPC, PLAYER_SPEED_INCREASE); + int nSpeedDecrease = GetLocalInt(oPC, PLAYER_SPEED_DECREASE); + + // Loop over all itemproperties on the item + itemproperty ipTest = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipTest)) + { + int ipType = GetItemPropertyType(ipTest); + /* Use restrictions. All of these can be skipped when unequipping */ + if(!bUnequip) + { + if (ipType == ITEM_PROPERTY_USE_LIMITATION_ABILITY_SCORE) + { + int nValue = GetItemPropertyCostTableValue(ipTest); + if(GetAbilityScore(oPC, GetItemPropertySubType(ipTest), TRUE) < nValue) + bPass = FALSE; + nUMDDC += nValue - 15; + } + else if(ipType == ITEM_PROPERTY_USE_LIMITATION_SKILL_RANKS) + { + int nValue = GetItemPropertyCostTableValue(ipTest); + if(GetSkillRank(GetItemPropertySubType(ipTest), oPC) < nValue) + bPass = FALSE; + nUMDDC += nValue - 10; + } + else if(ipType == ITEM_PROPERTY_USE_LIMITATION_SPELL_LEVEL) + { + int nLevel = GetItemPropertyCostTableValue(ipTest); + if(GetLocalInt(oPC, "PRC_AllSpell" + IntToString(nLevel))) + bPass = FALSE; + nUMDDC += (nLevel * 2) - 20; + } + else if(ipType == ITEM_PROPERTY_USE_LIMITATION_ARCANE_SPELL_LEVEL) + { + int nLevel = GetItemPropertyCostTableValue(ipTest); + if(GetLocalInt(oPC, "PRC_ArcSpell" + IntToString(nLevel))) + bPass = FALSE; + nUMDDC += (nLevel * 2) - 20; + } + else if(ipType == ITEM_PROPERTY_USE_LIMITATION_DIVINE_SPELL_LEVEL) + { + int nLevel = GetItemPropertyCostTableValue(ipTest); + if(GetLocalInt(oPC, "PRC_DivSpell" + IntToString(nLevel))) + bPass = FALSE; + nUMDDC += (nLevel * 2) - 20; + } + else if(ipType == ITEM_PROPERTY_USE_LIMITATION_SNEAK_ATTACK) + { + int nLevel = GetItemPropertyCostTableValue(ipTest); + if(GetLocalInt(oPC, "PRC_SneakLevel" + IntToString(nLevel))) + bPass = FALSE; + nUMDDC += (nLevel * 2) - 20; + } + else if(ipType == ITEM_PROPERTY_USE_LIMITATION_GENDER) + { + if(GetGender(oPC) != GetItemPropertySubType(ipTest)) + bPass = FALSE; + nUMDDC += 5; + } + } + + /* Properties that apply effects. Unequip should cause cleanup here */ + if(ipType == ITEM_PROPERTY_SPEED_INCREASE) + { + int iItemAdjust; + switch(GetItemPropertyCostTableValue(ipTest)) + { + case 0: iItemAdjust = 10; break; + case 1: iItemAdjust = 20; break; + case 2: iItemAdjust = 30; break; + case 3: iItemAdjust = 40; break; + case 4: iItemAdjust = 50; break; + case 5: iItemAdjust = 60; break; + case 6: iItemAdjust = 70; break; + case 7: iItemAdjust = 80; break; + case 8: iItemAdjust = 90; break; + case 9: iItemAdjust = 100; break; + } + if(bUnequip) + nSpeedIncrease -= iItemAdjust; + else if(bEquip) + nSpeedIncrease += iItemAdjust; + } + else if(ipType == ITEM_PROPERTY_SPEED_DECREASE) + { + int iItemAdjust; + switch(GetItemPropertyCostTableValue(ipTest)) + { + case 0: iItemAdjust = 10; break; + case 1: iItemAdjust = 20; break; + case 2: iItemAdjust = 30; break; + case 3: iItemAdjust = 40; break; + case 4: iItemAdjust = 50; break; + case 5: iItemAdjust = 60; break; + case 6: iItemAdjust = 70; break; + case 7: iItemAdjust = 80; break; + case 8: iItemAdjust = 90; break; + case 9: iItemAdjust = 99; break; + } + if(bUnequip) + nSpeedDecrease -= iItemAdjust; + else if(bEquip) + nSpeedDecrease += iItemAdjust; + } + else if(ipType == ITEM_PROPERTY_PNP_HOLY_AVENGER) + { + if(bEquip) + { + int nPaladinLevels = GetLevelByClass(CLASS_TYPE_PALADIN, oPC); + if(!nPaladinLevels) + { + //not a paladin? fake it + //not really a true PnP test + //instead it sets the paladin level + //to the UMD ranks minus the amount required + //to use a class restricted item of that value + int nSkill = GetSkillRank(SKILL_USE_MAGIC_DEVICE, oPC); + if(nSkill) + { + int nReqSkill = GetUMDForItemCost(oItem); + nSkill -= nReqSkill; + if(nSkill > 0) + nPaladinLevels = nSkill; + } + } + + // Add Holy Avenger specials for Paladins (or successfull fake-Paladins) + if(nPaladinLevels) + { + DelayCommand(0.1, IPSafeAddItemProperty(oItem, + ItemPropertyEnhancementBonus(5), 99999.9)); + DelayCommand(0.1, IPSafeAddItemProperty(oItem, + ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL, + IP_CONST_DAMAGETYPE_DIVINE, IP_CONST_DAMAGEBONUS_2d6), 99999.9)); + //this is a normal dispel magic useage, should be specific + DelayCommand(0.1, IPSafeAddItemProperty(oItem, + ItemPropertyCastSpell(IP_CONST_CASTSPELL_DISPEL_MAGIC_5, + IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE), 99999.9)); + DelayCommand(0.1, IPSafeAddItemProperty(oItem, + ItemPropertyCastSpellCasterLevel(SPELL_DISPEL_MAGIC, + nPaladinLevels), 99999.9)); + } + // Non-Paladin's get +2 enhancement bonus + else + { + DelayCommand(0.1, IPSafeAddItemProperty(oItem, + ItemPropertyEnhancementBonus(2), 99999.9)); + + // Remove Paladin specials + IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_ENHANCEMENT_BONUS, DURATION_TYPE_TEMPORARY, -1); + IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP, DURATION_TYPE_TEMPORARY, IP_CONST_ALIGNMENTGROUP_EVIL); + IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_CAST_SPELL, DURATION_TYPE_TEMPORARY); + IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_CAST_SPELL_CASTER_LEVEL, DURATION_TYPE_TEMPORARY); + } + } + else if(bUnequip) + { + IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_ENHANCEMENT_BONUS, + DURATION_TYPE_TEMPORARY, -1); + IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP, + DURATION_TYPE_TEMPORARY, IP_CONST_ALIGNMENTGROUP_EVIL); + IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_CAST_SPELL, + DURATION_TYPE_TEMPORARY); + IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_CAST_SPELL_CASTER_LEVEL, + DURATION_TYPE_TEMPORARY); + } + } + else if(ipType == ITEM_PROPERTY_AREA_OF_EFFECT) + { + + // This should only happen on equip or unequip + if(bEquip || bUnequip) + { + // Remove existing AoE + effect eTest = GetFirstEffect(oPC); + while(GetIsEffectValid(eTest)) + { + if(GetEffectCreator(eTest) == oItem + && GetEffectType(eTest) == EFFECT_TYPE_AREA_OF_EFFECT) + { + RemoveEffect(oPC, eTest); + if(DEBUG) DoDebug("CheckPRCLimitations: Removing old AoE effect"); + } + eTest = GetNextEffect(oPC); + } + + // Create new AoE - Only when equipping + if(bEquip) + { + AssignCommand(oItem, _prc_inc_itmrstr_ApplyAoE(oPC, oItem, GetItemPropertySubType(ipTest), GetItemPropertyCostTable(ipTest))); + }// end if - Equip event + }// end if - Equip or Unequip event + }// end if - AoE iprp + else if(ipType == ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N) + { + // Only equippable items can provide bonus spell slots + if(bEquip || bUnequip) + { + int nSubType = GetItemPropertySubType(ipTest); + int nCost = GetItemPropertyCostTable(ipTest); + SetLocalInt(oPC, + "PRC_IPRPBonSpellSlots_" + IntToString(nSubType) + "_" + IntToString(nCost), + GetLocalInt(oPC, + "PRC_IPRPBonSpellSlots_" + IntToString(nSubType) + "_" + IntToString(nCost) + ) + + (bEquip ? 1 : -1) + ); + } + } + else if(ipType == ITEM_PROPERTY_WIZARDRY) + { + int nCost = GetItemPropertyCostTableValue(ipTest); + if(bEquip) + AssignCommand(oItem, _prc_inc_itmrstr_ApplyWizardry(oPC, oItem, nCost, "A")); + else if(bUnequip) + AssignCommand(oItem, _prc_inc_itmrstr_RemoveWizardry(oPC, oItem, nCost, "A")); + } + else if(ipType == ITEM_PROPERTY_DIVINITY) + { + int nCost = GetItemPropertyCostTableValue(ipTest); + if(bEquip) + AssignCommand(oItem, _prc_inc_itmrstr_ApplyWizardry(oPC, oItem, nCost, "D")); + else if(bUnequip) + AssignCommand(oItem, _prc_inc_itmrstr_RemoveWizardry(oPC, oItem, nCost, "D")); + } + + ipTest = GetNextItemProperty(oItem); + }// end while - Loop over all itemproperties + + // Determine if speed modification totals had changed + if(nSpeedDecrease != GetLocalInt(oPC, PLAYER_SPEED_DECREASE)) + { + SetLocalInt(oPC, PLAYER_SPEED_DECREASE, nSpeedDecrease); + //_prc_inc_itmrstr_ApplySpeedDecrease(oPC); + } + if(nSpeedIncrease != GetLocalInt(oPC, PLAYER_SPEED_INCREASE)) + { + SetLocalInt(oPC, PLAYER_SPEED_INCREASE, nSpeedIncrease); + //_prc_inc_itmrstr_ApplySpeedIncrease(oPC); + } + + // If some restriction would prevent item use, perform UMD skill check + // Skip in case of unequip + if(!bUnequip && !bPass) + bPass = DoUMDCheck(oItem, oPC, nUMDDC); + + return bPass; +} + +void CheckForPnPHolyAvenger(object oItem) +{ + if(!GetPRCSwitch(PRC_PNP_HOLY_AVENGER_IPROP)) + return; + itemproperty ipTest = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipTest)) + { + if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_HOLY_AVENGER) + { + DelayCommand(0.1, RemoveItemProperty(oItem, ipTest)); + DelayCommand(0.1, IPSafeAddItemProperty(oItem, ItemPropertyPnPHolyAvenger())); + } + ipTest = GetNextItemProperty(oItem); + } +} + +//:: Test Void +//void main (){} \ No newline at end of file diff --git a/src/include/prc_inc_leadersh.nss b/src/include/prc_inc_leadersh.nss new file mode 100644 index 0000000..32b67a5 --- /dev/null +++ b/src/include/prc_inc_leadersh.nss @@ -0,0 +1,1061 @@ +//:: Updated for .35 by Jaysyn 2023/03/10 + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const string COHORT_DATABASE = "PRCCOHORTS"; +const string COHORT_TAG = "prc_cohort"; + +//in the database there is the folloxing data structures: +/* + int CohortCount (total number of cohorts) + object Cohort_X_obj (cohort itself) + string Cohort_X_name (cohort name) + int Cohort_X_race (cohort race) + int Cohort_X_class1 (cohort class pos1) + int Cohort_X_class2 (cohort class pos2) + int Cohort_X_class3 (cohort class pos3) + int Cohort_X_class4 (cohort class pos4) + int Cohort_X_class5 (cohort class pos5) + int Cohort_X_class6 (cohort class pos6) + int Cohort_X_class7 (cohort class pos7) + int Cohort_X_class8 (cohort class pos8) + int Cohort_X_order (cohort law/chaos measure) + int Cohort_X_moral (cohort good/evil measure) + int Cohort_X_ethran (cohort has ethran feat) + string Cohort_X_cdkey (cdkey of owning player) +*/ + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +int GetMaximumCohortCount(object oPC); +object GetCohort(int nID, object oPC); +int GetCurrentCohortCount(object oPC); +int GetCohortMaxLevel(int nLeadership, object oPC); +void RegisterAsCohort(object oPC); +object AddCohortToPlayer(int nCohortID, object oPC); +void AddCohortToPlayerByObject(object oCohort, object oPC, int bDoSetup = TRUE); +void RemoveCohortFromPlayer(object oCohort, object oPC); +int GetLeadershipScore(object oPC = OBJECT_SELF); +void CheckHB(object oPC); +void AddPremadeCohortsToDB(); +void StoreCohort(object oCohort); + + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "prc_feat_const" +#include "nw_o2_coninclude" +//#include "inc_utility" +#include "inc_ecl" +#include "inc_nwnx_funcs" +//#include "pnp_shft_poly" //for DoRandomAppearance + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +object AddCohortToPlayer(int nCohortID, object oPC) +{ + object oCohort = RetrieveCampaignObject(COHORT_DATABASE, "Cohort_"+IntToString(nCohortID)+"_obj", GetLocation(oPC)); + //give it a tag + AssignCommand(oCohort, SetIsDestroyable(TRUE, FALSE, FALSE)); + DestroyObject(oCohort); + oCohort = CopyObject(oCohort, GetLocation(oPC), OBJECT_INVALID, COHORT_TAG); + SetLocalInt(oCohort, "CohortID", nCohortID); + //pass it to the next function + AddCohortToPlayerByObject(oCohort, oPC); + return oCohort; +} + +//changes portrait, head, and appearance +//based on the target race with a degree of randomization. +//This should only be used on NPCs, not players. +void DoRandomAppearance(int nRace, object oTarget = OBJECT_SELF) +{ + //store current appearance to be safe + int nAppearance; //appearance to change into + int nHeadMax; //max head ID, changed to random 1-max + int nGender = GetGender(oTarget); + int nPortraitMin;//minimum row in portraits.2da + int nPortraitMax;//maximum row in portraits.2da + switch(nRace) + { + case RACIAL_TYPE_DWARF: + nAppearance = APPEARANCE_TYPE_DWARF; + if(nGender == GENDER_MALE) + { nHeadMax = 10; nPortraitMin = 9; nPortraitMax = 17; } + else + { nHeadMax = 12; nPortraitMin = 1; nPortraitMax = 8; } + break; + case RACIAL_TYPE_ELF: + nAppearance = APPEARANCE_TYPE_ELF; + if(nGender == GENDER_MALE) + { nHeadMax = 10; nPortraitMin = 31; nPortraitMax = 40; } + else + { nHeadMax = 16; nPortraitMin = 18; nPortraitMax = 30; } + break; + case RACIAL_TYPE_HALFELF: + nAppearance = APPEARANCE_TYPE_HALF_ELF; + if(nGender == GENDER_MALE) + { nHeadMax = 18; nPortraitMin = 93; nPortraitMax = 112; } + else + { nHeadMax = 15; nPortraitMin = 67; nPortraitMax = 92; } + break; + case RACIAL_TYPE_HALFORC: + nAppearance = APPEARANCE_TYPE_HALF_ORC; + if(nGender == GENDER_MALE) + { nHeadMax = 11; nPortraitMin = 134; nPortraitMax = 139; } + else + { nHeadMax = 1; nPortraitMin = 130; nPortraitMax = 133; } + break; + case RACIAL_TYPE_HUMAN: + nAppearance = APPEARANCE_TYPE_HUMAN; + if(nGender == GENDER_MALE) + { nHeadMax = 18; nPortraitMin = 93; nPortraitMax = 112; } + else + { nHeadMax = 15; nPortraitMin = 67; nPortraitMax = 92; } + break; + case RACIAL_TYPE_HALFLING: + nAppearance = APPEARANCE_TYPE_HALFLING; + if(nGender == GENDER_MALE) + { nHeadMax = 8; nPortraitMin = 61; nPortraitMax = 66; } + else + { nHeadMax = 11; nPortraitMin = 54; nPortraitMax = 59; } + break; + case RACIAL_TYPE_GNOME: + nAppearance = APPEARANCE_TYPE_GNOME; + if(nGender == GENDER_MALE) + { nHeadMax = 11; nPortraitMin = 47; nPortraitMax = 53; } + else + { nHeadMax = 9; nPortraitMin = 41; nPortraitMax = 46; } + break; + default: //not a normal race, abort + return; + } + //change the appearance + SetCreatureAppearanceType(oTarget, nAppearance); + + //need to be delayed a bit otherwise you get "supergnome" and "exploded elf" effects + DelayCommand(1.1, SetCreatureBodyPart(CREATURE_PART_RIGHT_SHIN, d2(), oTarget)); + DelayCommand(1.2, SetCreatureBodyPart(CREATURE_PART_LEFT_SHIN, d2(), oTarget)); + DelayCommand(1.3, SetCreatureBodyPart(CREATURE_PART_RIGHT_THIGH, d2(), oTarget)); + DelayCommand(1.4, SetCreatureBodyPart(CREATURE_PART_LEFT_THIGH, d2(), oTarget)); + DelayCommand(1.5, SetCreatureBodyPart(CREATURE_PART_TORSO, d2(), oTarget)); + DelayCommand(1.6, SetCreatureBodyPart(CREATURE_PART_RIGHT_FOREARM, d2(), oTarget)); + DelayCommand(1.7, SetCreatureBodyPart(CREATURE_PART_LEFT_FOREARM, d2(), oTarget)); + DelayCommand(1.8, SetCreatureBodyPart(CREATURE_PART_RIGHT_BICEP, d2(), oTarget)); + DelayCommand(1.9, SetCreatureBodyPart(CREATURE_PART_LEFT_BICEP, d2(), oTarget)); + + //dont do these body parts, they dont have tattoos and weird things could happen + //SetCreatureBodyPart(CREATURE_PART_BELT, d2(), oTarget); + //SetCreatureBodyPart(CREATURE_PART_NECK, d2(), oTarget); + //SetCreatureBodyPart(CREATURE_PART_RIGHT_SHOULDER, d2(), oTarget); + //SetCreatureBodyPart(CREATURE_PART_LEFT_SHOULDER, d2(), oTarget); + //SetCreatureBodyPart(CREATURE_PART_RIGHT_HAND, d2(), oTarget); + //SetCreatureBodyPart(CREATURE_PART_LEFT_HAND, d2(), oTarget); + //SetCreatureBodyPart(CREATURE_PART_PELVIS, d2(), oTarget); + //SetCreatureBodyPart(CREATURE_PART_RIGHT_FOOT, d2(), oTarget); + //SetCreatureBodyPart(CREATURE_PART_LEFT_FOOT, d2(), oTarget); + //randomise the head + DelayCommand(2.0, SetCreatureBodyPart(CREATURE_PART_HEAD, Random(nHeadMax)+1, oTarget)); + + //remove any wings/tails + SetCreatureWingType(CREATURE_WING_TYPE_NONE, oTarget); + SetCreatureTailType(CREATURE_TAIL_TYPE_NONE, oTarget); + + int nPortraitID = Random(nPortraitMax-nPortraitMin+1)+nPortraitMin; + string sPortraitResRef = Get2DACache("portraits", "BaseResRef", nPortraitID); + sPortraitResRef = GetStringLeft(sPortraitResRef, GetStringLength(sPortraitResRef)-1); //trim the trailing _ + SetPortraitResRef(oTarget, sPortraitResRef); + SetPortraitId(oTarget, nPortraitID); +} + +void CancelGreatFeats(object oSpawn) +{ + //store how many Great X feats they have + //this is to fix a bioware bug where de-leveling doesnt remove the stat bonus + int nGreatStr; + int nGreatDex; + int nGreatCon; + int nGreatInt; + int nGreatWis; + int nGreatCha; + if (GetHasFeat(FEAT_EPIC_GREAT_STRENGTH_10, oSpawn)) nGreatStr = 10; + else if(GetHasFeat(FEAT_EPIC_GREAT_STRENGTH_9, oSpawn)) nGreatStr = 9; + else if(GetHasFeat(FEAT_EPIC_GREAT_STRENGTH_8, oSpawn)) nGreatStr = 8; + else if(GetHasFeat(FEAT_EPIC_GREAT_STRENGTH_7, oSpawn)) nGreatStr = 7; + else if(GetHasFeat(FEAT_EPIC_GREAT_STRENGTH_6, oSpawn)) nGreatStr = 6; + else if(GetHasFeat(FEAT_EPIC_GREAT_STRENGTH_5, oSpawn)) nGreatStr = 5; + else if(GetHasFeat(FEAT_EPIC_GREAT_STRENGTH_4, oSpawn)) nGreatStr = 4; + else if(GetHasFeat(FEAT_EPIC_GREAT_STRENGTH_3, oSpawn)) nGreatStr = 3; + else if(GetHasFeat(FEAT_EPIC_GREAT_STRENGTH_2, oSpawn)) nGreatStr = 2; + else if(GetHasFeat(FEAT_EPIC_GREAT_STRENGTH_1, oSpawn)) nGreatStr = 1; + if (GetHasFeat(FEAT_EPIC_GREAT_DEXTERITY_10, oSpawn)) nGreatDex = 10; + else if(GetHasFeat(FEAT_EPIC_GREAT_DEXTERITY_9, oSpawn)) nGreatDex = 9; + else if(GetHasFeat(FEAT_EPIC_GREAT_DEXTERITY_8, oSpawn)) nGreatDex = 8; + else if(GetHasFeat(FEAT_EPIC_GREAT_DEXTERITY_7, oSpawn)) nGreatDex = 7; + else if(GetHasFeat(FEAT_EPIC_GREAT_DEXTERITY_6, oSpawn)) nGreatDex = 6; + else if(GetHasFeat(FEAT_EPIC_GREAT_DEXTERITY_5, oSpawn)) nGreatDex = 5; + else if(GetHasFeat(FEAT_EPIC_GREAT_DEXTERITY_4, oSpawn)) nGreatDex = 4; + else if(GetHasFeat(FEAT_EPIC_GREAT_DEXTERITY_3, oSpawn)) nGreatDex = 3; + else if(GetHasFeat(FEAT_EPIC_GREAT_DEXTERITY_2, oSpawn)) nGreatDex = 2; + else if(GetHasFeat(FEAT_EPIC_GREAT_DEXTERITY_1, oSpawn)) nGreatDex = 1; + if (GetHasFeat(FEAT_EPIC_GREAT_CONSTITUTION_10, oSpawn)) nGreatCon = 10; + else if(GetHasFeat(FEAT_EPIC_GREAT_CONSTITUTION_9, oSpawn)) nGreatCon = 9; + else if(GetHasFeat(FEAT_EPIC_GREAT_CONSTITUTION_8, oSpawn)) nGreatCon = 8; + else if(GetHasFeat(FEAT_EPIC_GREAT_CONSTITUTION_7, oSpawn)) nGreatCon = 7; + else if(GetHasFeat(FEAT_EPIC_GREAT_CONSTITUTION_6, oSpawn)) nGreatCon = 6; + else if(GetHasFeat(FEAT_EPIC_GREAT_CONSTITUTION_5, oSpawn)) nGreatCon = 5; + else if(GetHasFeat(FEAT_EPIC_GREAT_CONSTITUTION_4, oSpawn)) nGreatCon = 4; + else if(GetHasFeat(FEAT_EPIC_GREAT_CONSTITUTION_3, oSpawn)) nGreatCon = 3; + else if(GetHasFeat(FEAT_EPIC_GREAT_CONSTITUTION_2, oSpawn)) nGreatCon = 2; + else if(GetHasFeat(FEAT_EPIC_GREAT_CONSTITUTION_1, oSpawn)) nGreatCon = 1; + if (GetHasFeat(FEAT_EPIC_GREAT_INTELLIGENCE_10, oSpawn)) nGreatInt = 10; + else if(GetHasFeat(FEAT_EPIC_GREAT_INTELLIGENCE_9, oSpawn)) nGreatInt = 9; + else if(GetHasFeat(FEAT_EPIC_GREAT_INTELLIGENCE_8, oSpawn)) nGreatInt = 8; + else if(GetHasFeat(FEAT_EPIC_GREAT_INTELLIGENCE_7, oSpawn)) nGreatInt = 7; + else if(GetHasFeat(FEAT_EPIC_GREAT_INTELLIGENCE_6, oSpawn)) nGreatInt = 6; + else if(GetHasFeat(FEAT_EPIC_GREAT_INTELLIGENCE_5, oSpawn)) nGreatInt = 5; + else if(GetHasFeat(FEAT_EPIC_GREAT_INTELLIGENCE_4, oSpawn)) nGreatInt = 4; + else if(GetHasFeat(FEAT_EPIC_GREAT_INTELLIGENCE_3, oSpawn)) nGreatInt = 3; + else if(GetHasFeat(FEAT_EPIC_GREAT_INTELLIGENCE_2, oSpawn)) nGreatInt = 2; + else if(GetHasFeat(FEAT_EPIC_GREAT_INTELLIGENCE_1, oSpawn)) nGreatInt = 1; + if (GetHasFeat(FEAT_EPIC_GREAT_WISDOM_10, oSpawn)) nGreatWis = 10; + else if(GetHasFeat(FEAT_EPIC_GREAT_WISDOM_9, oSpawn)) nGreatWis = 9; + else if(GetHasFeat(FEAT_EPIC_GREAT_WISDOM_8, oSpawn)) nGreatWis = 8; + else if(GetHasFeat(FEAT_EPIC_GREAT_WISDOM_7, oSpawn)) nGreatWis = 7; + else if(GetHasFeat(FEAT_EPIC_GREAT_WISDOM_6, oSpawn)) nGreatWis = 6; + else if(GetHasFeat(FEAT_EPIC_GREAT_WISDOM_5, oSpawn)) nGreatWis = 5; + else if(GetHasFeat(FEAT_EPIC_GREAT_WISDOM_4, oSpawn)) nGreatWis = 4; + else if(GetHasFeat(FEAT_EPIC_GREAT_WISDOM_3, oSpawn)) nGreatWis = 3; + else if(GetHasFeat(FEAT_EPIC_GREAT_WISDOM_2, oSpawn)) nGreatWis = 2; + else if(GetHasFeat(FEAT_EPIC_GREAT_WISDOM_1, oSpawn)) nGreatWis = 1; + if (GetHasFeat(FEAT_EPIC_GREAT_CHARISMA_10, oSpawn)) nGreatCha = 10; + else if(GetHasFeat(FEAT_EPIC_GREAT_CHARISMA_9, oSpawn)) nGreatCha = 9; + else if(GetHasFeat(FEAT_EPIC_GREAT_CHARISMA_8, oSpawn)) nGreatCha = 8; + else if(GetHasFeat(FEAT_EPIC_GREAT_CHARISMA_7, oSpawn)) nGreatCha = 7; + else if(GetHasFeat(FEAT_EPIC_GREAT_CHARISMA_6, oSpawn)) nGreatCha = 6; + else if(GetHasFeat(FEAT_EPIC_GREAT_CHARISMA_5, oSpawn)) nGreatCha = 5; + else if(GetHasFeat(FEAT_EPIC_GREAT_CHARISMA_4, oSpawn)) nGreatCha = 4; + else if(GetHasFeat(FEAT_EPIC_GREAT_CHARISMA_3, oSpawn)) nGreatCha = 3; + else if(GetHasFeat(FEAT_EPIC_GREAT_CHARISMA_2, oSpawn)) nGreatCha = 2; + else if(GetHasFeat(FEAT_EPIC_GREAT_CHARISMA_1, oSpawn)) nGreatCha = 1; + + //apply penalties to counter the GreatX feats + if(GetPRCSwitch(PRC_NWNX_FUNCS)) + { + if(nGreatStr) PRC_Funcs_ModAbilityScore(oSpawn, ABILITY_STRENGTH, -nGreatStr); + if(nGreatDex) PRC_Funcs_ModAbilityScore(oSpawn, ABILITY_DEXTERITY, -nGreatDex); + if(nGreatCon) PRC_Funcs_ModAbilityScore(oSpawn, ABILITY_CONSTITUTION, -nGreatCon); + if(nGreatInt) PRC_Funcs_ModAbilityScore(oSpawn, ABILITY_INTELLIGENCE, -nGreatInt); + if(nGreatWis) PRC_Funcs_ModAbilityScore(oSpawn, ABILITY_WISDOM, -nGreatWis); + if(nGreatCha) PRC_Funcs_ModAbilityScore(oSpawn, ABILITY_CHARISMA, -nGreatCha); + } + else + { + if(nGreatStr) + ApplyEffectToObject(DURATION_TYPE_PERMANENT, + SupernaturalEffect(EffectAbilityDecrease(ABILITY_STRENGTH, nGreatStr)), + oSpawn); + if(nGreatDex) + ApplyEffectToObject(DURATION_TYPE_PERMANENT, + SupernaturalEffect(EffectAbilityDecrease(ABILITY_DEXTERITY, nGreatDex)), + oSpawn); + if(nGreatCon) + ApplyEffectToObject(DURATION_TYPE_PERMANENT, + SupernaturalEffect(EffectAbilityDecrease(ABILITY_CONSTITUTION, nGreatCon)), + oSpawn); + if(nGreatInt) + ApplyEffectToObject(DURATION_TYPE_PERMANENT, + SupernaturalEffect(EffectAbilityDecrease(ABILITY_INTELLIGENCE, nGreatInt)), + oSpawn); + if(nGreatWis) + ApplyEffectToObject(DURATION_TYPE_PERMANENT, + SupernaturalEffect(EffectAbilityDecrease(ABILITY_WISDOM, nGreatWis)), + oSpawn); + if(nGreatCha) + ApplyEffectToObject(DURATION_TYPE_PERMANENT, + SupernaturalEffect(EffectAbilityDecrease(ABILITY_CHARISMA, nGreatCha)), + oSpawn); + } +} + +void AddCohortToPlayerByObject(object oCohort, object oPC, int bDoSetup = TRUE) +{ + //add it to the pc + int nMaxHenchmen = GetMaxHenchmen(); + SetMaxHenchmen(99); + AddHenchman(oPC, oCohort); + SetMaxHenchmen(nMaxHenchmen); + object oSkin = GetPCSkin(oCohort); + + if(bDoSetup) + { + //if it was a premade one, give it a random name + //randomize its appearance using DoRandomAppearance + if(GetResRef(oCohort) != "") + { + string sName; + //first name + switch(MyPRCGetRacialType(oCohort)) + { + case RACIAL_TYPE_DWARF: + if(GetGender(oCohort) == GENDER_FEMALE) + sName += RandomName(NAME_FIRST_DWARF_FEMALE); + else + sName += RandomName(NAME_FIRST_DWARF_MALE); + break; + case RACIAL_TYPE_ELF: + if(GetGender(oCohort) == GENDER_FEMALE) + sName += RandomName(NAME_FIRST_ELF_FEMALE); + else + sName += RandomName(NAME_FIRST_ELF_MALE); + break; + case RACIAL_TYPE_GNOME: + if(GetGender(oCohort) == GENDER_FEMALE) + sName += RandomName(NAME_FIRST_GNOME_FEMALE); + else + sName += RandomName(NAME_FIRST_GNOME_MALE); + break; + case RACIAL_TYPE_HUMAN: + if(GetGender(oCohort) == GENDER_FEMALE) + sName += RandomName(NAME_FIRST_HUMAN_FEMALE); + else + sName += RandomName(NAME_FIRST_HUMAN_MALE); + break; + case RACIAL_TYPE_HALFELF: + if(GetGender(oCohort) == GENDER_FEMALE) + sName += RandomName(NAME_FIRST_HALFELF_FEMALE); + else + sName += RandomName(NAME_FIRST_HALFELF_MALE); + break; + case RACIAL_TYPE_HALFORC: + if(GetGender(oCohort) == GENDER_FEMALE) + sName += RandomName(NAME_FIRST_HALFORC_FEMALE); + else + sName += RandomName(NAME_FIRST_HALFORC_MALE); + break; + case RACIAL_TYPE_HALFLING: + if(GetGender(oCohort) == GENDER_FEMALE) + sName += RandomName(NAME_FIRST_HALFLING_FEMALE); + else + sName += RandomName(NAME_FIRST_HALFLING_MALE); + break; + } + sName += " "; + //surname + switch(MyPRCGetRacialType(oCohort)) + { + case RACIAL_TYPE_DWARF: + sName += RandomName(NAME_LAST_DWARF); + break; + case RACIAL_TYPE_ELF: + sName += RandomName(NAME_LAST_ELF); + break; + case RACIAL_TYPE_GNOME: + sName += RandomName(NAME_LAST_GNOME); + break; + case RACIAL_TYPE_HUMAN: + sName += RandomName(NAME_LAST_HUMAN); + break; + case RACIAL_TYPE_HALFELF: + sName += RandomName(NAME_LAST_HALFELF); + break; + case RACIAL_TYPE_HALFORC: + sName += RandomName(NAME_LAST_HALFORC); + break; + case RACIAL_TYPE_HALFLING: + sName += RandomName(NAME_LAST_HALFLING); + break; + } + //sanity check + if(sName == " ") + sName = ""; + //change the name + AssignCommand(oCohort, SetName(oCohort, sName)); + + //use disguise code to alter head etc + DoRandomAppearance(MyPRCGetRacialType(oCohort), oCohort); + + //DoRandomAppearance removed wings/tails need to re-add + if(GetRacialType(oCohort) == RACIAL_TYPE_FEYRI) + SetCreatureWingType(CREATURE_WING_TYPE_DEMON, oCohort); + else if(GetRacialType(oCohort) == RACIAL_TYPE_AVARIEL) + SetCreatureWingType(CREATURE_WING_TYPE_BIRD, oCohort); + else if(GetRacialType(oCohort) == RACIAL_TYPE_GLOURA) + SetCreatureWingType(CREATURE_WING_TYPE_BUTTERFLY, oCohort); + } + //if its a custom made cohort, need to cancel GreatX feats + else + CancelGreatFeats(oCohort); + + //set it to the pcs level + int nLevel = GetCohortMaxLevel(GetLeadershipScore(oPC), oPC); + SetXP(oCohort, nLevel*(nLevel-1)*500); + SetLocalInt(oCohort, "MastersXP", GetXP(oPC)); + DelayCommand(1.0, AssignCommand(oCohort, SetIsDestroyable(FALSE, TRUE, TRUE))); + DelayCommand(1.0, AssignCommand(oCohort, SetLootable(oCohort, TRUE))); + //set its maximum level lag + if(GetCurrentCohortCount(oPC) <= GetPRCSwitch(PRC_BONUS_COHORTS)) + { + //bonus cohort, no cap + } + else if(GetPRCSwitch(PRC_THRALLHERD_LEADERSHIP) + && GetLevelByClass(CLASS_TYPE_THRALLHERD, oPC) + && GetCurrentCohortCount(oPC) <= GetPRCSwitch(PRC_BONUS_COHORTS)+1) + { + //thrallherd with switch, 1 level lag + SetLocalInt(oCohort, "CohortLevelLag", 1); + } + else if(GetPRCSwitch(PRC_THRALLHERD_LEADERSHIP) + && GetLevelByClass(CLASS_TYPE_THRALLHERD, oPC) >= 10 + && GetCurrentCohortCount(oPC) <= GetPRCSwitch(PRC_BONUS_COHORTS)+2) + { + //twofold master with switch, 2 level lag + SetLocalInt(oCohort, "CohortLevelLag", 2); + } + else + { + //other cohort have a 2 level lag + SetLocalInt(oCohort, "CohortLevelLag", 2); + } + + //strip its equipment & inventory + object oTest = GetFirstItemInInventory(oCohort); + object oToken = GetHideToken(oCohort); + while(GetIsObjectValid(oTest)) + { + if(GetHasInventory(oTest)) + { + object oTest2 = GetFirstItemInInventory(oTest); + while(GetIsObjectValid(oTest2)) + { + // Avoid blowing up the hide and token that just had the eventscripts stored on them + if(oTest2 != oSkin && oTest2 != oToken) + DestroyObject(oTest2); + oTest2 = GetNextItemInInventory(oTest); + } + } + // Avoid blowing up the hide and token that just had the eventscripts stored on them + if(oTest != oSkin && oTest != oToken) + DestroyObject(oTest); + oTest = GetNextItemInInventory(oCohort); + } + int nSlot; + for(nSlot = 0;nSlot<14;nSlot++) + { + oTest = GetItemInSlot(nSlot, oCohort); + DestroyObject(oTest); + } + //get rid of any gold it has + TakeGoldFromCreature(GetGold(oCohort), oCohort, TRUE); + } + //clean up any leftovers on the skin + ScrubPCSkin(oCohort, oSkin); + DeletePRCLocalInts(oSkin); + + //turn on its scripts + //normal MoB set + AddEventScript(oCohort, EVENT_VIRTUAL_ONPHYSICALATTACKED, "prc_ai_mob_attck", TRUE, FALSE); + AddEventScript(oCohort, EVENT_VIRTUAL_ONBLOCKED, "prc_ai_mob_block", TRUE, FALSE); + AddEventScript(oCohort, EVENT_VIRTUAL_ONCOMBATROUNDEND, "prc_ai_mob_combt", TRUE, FALSE); + AddEventScript(oCohort, EVENT_VIRTUAL_ONDAMAGED, "prc_ai_mob_damag", TRUE, FALSE); + AddEventScript(oCohort, EVENT_VIRTUAL_ONDISTURBED, "prc_ai_mob_distb", TRUE, FALSE); + AddEventScript(oCohort, EVENT_VIRTUAL_ONPERCEPTION, "prc_ai_mob_percp", TRUE, FALSE); + AddEventScript(oCohort, EVENT_VIRTUAL_ONSPAWNED, "prc_ai_mob_spawn", TRUE, FALSE); + AddEventScript(oCohort, EVENT_VIRTUAL_ONSPELLCASTAT, "prc_ai_mob_spell", TRUE, FALSE); + AddEventScript(oCohort, EVENT_VIRTUAL_ONDEATH, "prc_ai_mob_death", TRUE, FALSE); + AddEventScript(oCohort, EVENT_VIRTUAL_ONRESTED, "prc_ai_mob_rest", TRUE, FALSE); + AddEventScript(oCohort, EVENT_VIRTUAL_ONUSERDEFINED, "prc_ai_mob_userd", TRUE, FALSE); + //dont run this, cohort-specific script replaces it + //AddEventScript(oCohort, EVENT_VIRTUAL_ONCONVERSATION, "prc_ai_mob_conv", TRUE, TRUE); + AddEventScript(oCohort, EVENT_VIRTUAL_ONHEARTBEAT, "prc_ai_mob_heart", TRUE, FALSE); + //cohort specific ones + AddEventScript(oCohort, EVENT_VIRTUAL_ONCONVERSATION, "prc_ai_coh_conv", TRUE, FALSE); + AddEventScript(oCohort, EVENT_VIRTUAL_ONHEARTBEAT, "prc_ai_coh_hb", TRUE, FALSE); + + //mark the master on the cohort + SetLocalObject(oCohort, "MasterObject", oPC); + + //DEBUG + //various tests + if (DEBUG) DoDebug("Cohort Name="+GetName(oCohort)); + if (DEBUG) DoDebug("Cohort HD="+IntToString(GetHitDice(oCohort))); + if (DEBUG) DoDebug("Cohort XP="+IntToString(GetXP(oCohort))); + if (DEBUG) DoDebug("Cohort GetIsPC="+IntToString(GetIsPC(oCohort))); + + // And now gear it up + if (!GetPRCSwitch(PRC_DISABLE_COHORT_STARTING_GEAR)) + { + int i; + int nHD = GetHitDice(oCohort); + for(i = 0;i= 3) nLeadership += GetLevelByClass(CLASS_TYPE_SHADOW_THIEF_AMN, oPC) - 2; + //without epic leadership its capped at 25 + if(!GetHasFeat(FEAT_EPIC_LEADERSHIP, oPC) && nLeadership > 25) + nLeadership = 25; + + return nLeadership; +} + +void StoreCohort(object oCohort) +{ + int nCohortCount = GetCampaignInt(COHORT_DATABASE, "CohortCount"); + int i; + for(i=0;i 1) + return; + SetLocalInt(oPC, "CohortCheckHB", GetLocalInt(oPC, "CohortCheckHB")+1); + DelayCommand(0.99, + SetLocalInt(oPC, "CohortCheckHB", GetLocalInt(oPC, "CohortCheckHB")-1)); + SetCommandable(FALSE, oPC); + if(GetHitDice(oPC) == 40) + { + StoreCohort(oPC); + //restore previous xp amound + SetXP(oPC, GetLocalInt(oPC, "OriginalXP")); + //tell the player what was done + SendMessageToPC(oPC, "Character registered as cohort."); + //remove the non-commandabiltiy + SetCommandable(TRUE, oPC); + // Clean up + DeletePersistantLocalInt(oPC, "RegisteringAsCohort"); + DeleteLocalInt(oPC, "OriginalXP"); + //stop the psuedoHB + return; + } + DelayCommand(1.0, CheckHB(oPC)); +} + +void RegisterAsCohort(object oPC) +{ + string sMessage; + sMessage += "This will register you character to be selected as a cohort.\n"; + sMessage += "As part of this process, you have to levelup to level 40.\n"; + sMessage += "Once you reach level 40, your character will be stored.\n"; + sMessage += "Then when the character is used as a cohort, it will follow that levelup path.\n"; + sMessage += "Any changes to the cohort will not apply to the original character.\n"; + //SendMessageToPC(oPC, sMessage); + FloatingTextStringOnCreature(sMessage, oPC); + + SetLocalInt(oPC, "OriginalXP", GetXP(oPC)); + SetXP(oPC, 40*(40-1)*500); + SetPersistantLocalInt(oPC, "RegisteringAsCohort", TRUE); + AssignCommand(GetModule(), CheckHB(oPC)); +} + +int LeadershipScore2CohortLevel(int nLeadership) +{ + switch(nLeadership) + { + case 1: return 0; + case 2: return 1; + case 3: return 2; + case 4: + case 5: return 3; + case 6: return 4; + case 7: + case 8: return 5; + case 9: return 6; + case 10: + case 11: return 7; + case 12: return 8; + case 13: return 9; + case 14: + case 15: return 10; + case 16: return 11; + case 17: + case 18: return 12; + case 19: return 13; + case 20: return 14; + case 21: + case 22: return 15; + case 23: return 16; + case 24: + case 25: return 17; + case 26: + case 27: return 18; + case 28: + case 29: return 19; + case 30: + case 31: return 20; + case 32: + case 33: return 21; + case 34: + case 35: return 22; + case 36: + case 37: return 23; + case 38: + case 39: return 24; + case 40: + case 41: return 25; + case 42: + case 43: return 26; + case 44: + case 45: return 27; + case 46: + case 47: return 28; + case 48: + case 49: return 29; + case 50: + case 51: return 30; + case 52: + case 53: return 31; + case 54: + case 55: return 32; + case 56: + case 57: return 33; + case 58: + case 59: return 34; + case 60: return 35; + case 61: + case 62: return 36; + case 63: + case 64: return 37; + case 65: + case 66: return 38; + case 67: + case 68: return 39; + case 69: + case 70: return 40; + } + return 0; +} + +int GetCohortMaxLevel(int nLeadership, object oPC) +{ + //if its a bonus cohort, use the players ECL + int nMasterLevel = GetECL(oPC); + if(GetCurrentCohortCount(oPC) <= GetPRCSwitch(PRC_BONUS_COHORTS)) + return nMasterLevel; + int nLevel = LeadershipScore2CohortLevel(nLeadership); + //apply a level lag + if(GetPRCSwitch(PRC_THRALLHERD_LEADERSHIP) + && GetLevelByClass(CLASS_TYPE_THRALLHERD, oPC) + && GetCurrentCohortCount(oPC) <= GetPRCSwitch(PRC_BONUS_COHORTS)+1) + { + //thrallherd with switch, 1 level lag + if(nLevel > nMasterLevel-1) + nLevel = nMasterLevel-1; + } + else if(GetPRCSwitch(PRC_THRALLHERD_LEADERSHIP) + && GetLevelByClass(CLASS_TYPE_THRALLHERD, oPC) >= 10 + && GetCurrentCohortCount(oPC) <= GetPRCSwitch(PRC_BONUS_COHORTS)+2) + { + //twofold master with switch, 2 level lag + if(nLevel > nMasterLevel-2) + nLevel = nMasterLevel-2; + } + else + { + //other cohort have a 2 level lag + if(nLevel > nMasterLevel-2) + nLevel = nMasterLevel-2; + if (GetHasFeat(FEAT_IMPROVED_COHORT, oPC)) nLevel += 1; + } + //really, leadership should be capped at 25 / 17HD + //but this is a sanity check + if(nLevel > 20 + && !GetHasFeat(FEAT_EPIC_LEADERSHIP, oPC)) + nLevel = 20; + return nLevel; +} + +int GetCurrentCohortCount(object oPC) +{ + int nCount; + object oTest; + object oOldTest; + int i = 1; + oTest = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, i); + while(GetIsObjectValid(oTest) && oTest != oOldTest) + { + if(GetTag(oTest) == COHORT_TAG) + nCount++; + i++; + oOldTest = oTest; + oTest = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, i); + } + return nCount; +} + +object GetCohort(int nID, object oPC) +{ + int nCount; + object oTest; + object oOldTest; + int i = 1; + oTest = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, i); + while(GetIsObjectValid(oTest) && oTest != oOldTest) + { + if(GetTag(oTest) == COHORT_TAG) + nCount++; + if(nCount == nID) + return oTest; + i++; + oOldTest = oTest; + oTest = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, i); + } + return OBJECT_INVALID; +} + +int GetMaximumCohortCount(object oPC) +{ + int nCount; + if(!GetLevelByClass(CLASS_TYPE_THRALLHERD, oPC)) + { + if(GetHasFeat(FEAT_LEADERSHIP, oPC)) + nCount++; + if(GetHasFeat(FEAT_LEGENDARY_COMMANDER, oPC)) + nCount++; + } + //thrallherd with switch + else if(GetPRCSwitch(PRC_THRALLHERD_LEADERSHIP)) + { + nCount++; + //twofold masteer + if(GetLevelByClass(CLASS_TYPE_THRALLHERD, oPC) > 9) + nCount++; + } + //hathran class + if(GetHasFeat(FEAT_HATH_COHORT, oPC)) + nCount++; + //orc warlord with switch + if(GetHasFeat(FEAT_GATHER_HORDE_I, oPC) + && GetPRCSwitch(PRC_ORC_WARLORD_COHORT)) + nCount++; + nCount += GetPRCSwitch(PRC_BONUS_COHORTS); + return nCount; +} + +int GetIsCohortChoiceValid(string sName, int nRace, int nClass1, int nClass2, int nClass3, int nClass4, int nClass5, int nClass6, int nClass7, int nClass8, int nOrder, int nMoral, int nEthran, string sKey, int nDeleted, object oPC) +{ + //has been deleted + if(nDeleted) + { + DoDebug("GetIsCohortChoiceValid() is FALSE because cohort had been deleted"); + return FALSE; + } + + int bIsValid = TRUE; + int nCohortCount = GetMaximumCohortCount(oPC); + int i; + //another players cohort + if(GetPCPublicCDKey(oPC) != "" + && GetPCPublicCDKey(oPC) != sKey) + { + DoDebug("GetIsCohortChoiceValid() is FALSE because cdkey is incorrect"); + bIsValid = FALSE; + } + //is character + if(bIsValid + && GetName(oPC) == sName) + { + DoDebug("GetIsCohortChoiceValid() is FALSE because name is in use"); + bIsValid = FALSE; + } + //is already a cohort + if(bIsValid && sName != "") + { + for(i=1;i<=nCohortCount;i++) + { + object oCohort = GetCohort(i, oPC); + if(GetName(oCohort) == sName) + { + DoDebug("GetIsCohortChoiceValid() is FALSE because cohort is already in use."); + bIsValid = FALSE; + } + } + } + //hathran + if(bIsValid + && GetHasFeat(FEAT_HATH_COHORT, oPC)) + { + int nEthranBarbarianCount = 0; + for(i=1;i<=nCohortCount;i++) + { + object oCohort = GetCohort(i, oPC); + if(GetIsObjectValid(oCohort) + &&(GetHasFeat(FEAT_HATH_COHORT, oCohort) + || GetLevelByClass(CLASS_TYPE_BARBARIAN, oCohort))) + nEthranBarbarianCount++; + } + //must have at least one ethran or barbarian + if(!nEthranBarbarianCount + && GetCurrentCohortCount(oPC) >= GetMaximumCohortCount(oPC)-1 + && !nEthran + && nClass1 != CLASS_TYPE_BARBARIAN + && nClass2 != CLASS_TYPE_BARBARIAN + && nClass3 != CLASS_TYPE_BARBARIAN + && nClass4 != CLASS_TYPE_BARBARIAN + && nClass5 != CLASS_TYPE_BARBARIAN + && nClass6 != CLASS_TYPE_BARBARIAN + && nClass7 != CLASS_TYPE_BARBARIAN + && nClass8 != CLASS_TYPE_BARBARIAN) + bIsValid = FALSE; + } + //OrcWarlord + if(bIsValid + && GetHasFeat(FEAT_GATHER_HORDE_I, oPC) + && GetPRCSwitch(PRC_ORC_WARLORD_COHORT)) + { + int nOrcCount = 0; + for(i=1;i<=nCohortCount;i++) + { + object oCohort = GetCohort(i, oPC); + if(GetIsObjectValid(oCohort) + && (MyPRCGetRacialType(oCohort) == RACIAL_TYPE_HUMANOID_ORC + || MyPRCGetRacialType(oCohort) == RACIAL_TYPE_HALFORC)) + nOrcCount++; + } + //must have at least one orc + if(!nOrcCount + && GetCurrentCohortCount(oPC) >= GetMaximumCohortCount(oPC)-1 + && nRace != RACIAL_TYPE_HUMANOID_ORC + && nRace != RACIAL_TYPE_HALFORC + && nRace != RACIAL_TYPE_GRAYORC + && nRace != RACIAL_TYPE_OROG + && nRace != RACIAL_TYPE_TANARUKK + && nRace != RACIAL_TYPE_FROSTBLOOD_ORC + ) + bIsValid = FALSE; + } + //Undead Leadership + //Wild Cohort + //not implemented yet + //return result + return bIsValid; +} + +int GetIsCohortChoiceValidByID(int nID, object oPC) +{ + string sID = IntToString(nID); + string sName = GetCampaignString( COHORT_DATABASE, "Cohort_"+sID+"_name"); + int nRace = GetCampaignInt( COHORT_DATABASE, "Cohort_"+sID+"_race"); + int nClass1=GetCampaignInt( COHORT_DATABASE, "Cohort_"+sID+"_class1"); + int nClass2=GetCampaignInt( COHORT_DATABASE, "Cohort_"+sID+"_class2"); + int nClass3=GetCampaignInt( COHORT_DATABASE, "Cohort_"+sID+"_class3"); + int nClass4=GetCampaignInt( COHORT_DATABASE, "Cohort_"+sID+"_class4"); + int nClass5=GetCampaignInt( COHORT_DATABASE, "Cohort_"+sID+"_class5"); + int nClass6=GetCampaignInt( COHORT_DATABASE, "Cohort_"+sID+"_class6"); + int nClass7=GetCampaignInt( COHORT_DATABASE, "Cohort_"+sID+"_class7"); + int nClass8=GetCampaignInt( COHORT_DATABASE, "Cohort_"+sID+"_class8"); + int nOrder= GetCampaignInt( COHORT_DATABASE, "Cohort_"+sID+"_order"); + int nMoral= GetCampaignInt( COHORT_DATABASE, "Cohort_"+sID+"_moral"); + int nEthran=GetCampaignInt( COHORT_DATABASE, "Cohort_"+sID+"_ethran"); + string sKey = GetCampaignString( COHORT_DATABASE, "Cohort_"+sID+"_cdkey"); + int nDeleted = GetCampaignInt(COHORT_DATABASE, "Cohort_"+sID+"_deleted"); + return GetIsCohortChoiceValid(sName, nRace, nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8, nOrder, nMoral, nEthran, sKey, nDeleted, oPC); +} + +int GetCanRegister(object oPC) +{ + int bReturn = TRUE; + int i; + int nCohortCount = GetCampaignInt(COHORT_DATABASE, "CohortCount"); + for(i=0;i 0), the listener + will destroy itself once that time has run out. + It will also destroy itself if it has been set to listen + to a particular object and that object ceases being valid. + + + Regarding the patterns used, taken from NWN Lexicon: + + >From Noel (Bioware): + >** will match zero or more characters + >*w one or more whitespace + >*n one or more numeric + >*p one or more punctuation + >*a one or more alphabetic + >| is or + >( and ) can be used for blocks + > + >- setting a creature to listen for "**" will match any string + >- telling him to listen for "**funk**" will match any string that contains the word "funk". + >- "**(bash|open|unlock)**(chest|door)**" will match strings like "open the door please" or "he just bashed that chest!" + + If several patterns would match the same string, the one + added first using AddPattern will be the one matched. +*/ +//::////////////////////////////////////////////// +//:: Created By: Ornedan +//:: Created On: 19.06.2005 +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Constant defintions */ +////////////////////////////////////////////////// + +//const string LISTENER_STORE_VARIABLE = "PRC_SGListener_Last_Heard_String"; +//const int PRC_GENERIC_LISTENER_FIRST_PATTERN_NUMBER = 0xffff; +const string PRC_GENERIC_LISTENER_SCRIPT_NAME = "prc_glist_onhb"; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Creates a new listener. See prc_inc_listener header for details. + * + * @param sScriptToCall The name of the script to call when the listener hears something matching it's pattern. + * @param lSpawnAt Location to spawnt the listener at. This is ignored if oListenTo is a valid object. + * @param sPattern A regular expression defining the pattern of strings the listener listens to. + * Defaults to everything. + * @param oListenTo Object to listen to. If this is specified, the listener will be spawned by it instead of at + * lSpawnAt and will attempt to follow it around. It will also only fire the script for + * strings spoken by this object. + * @param fTTL How long the listener will exist. Once this runs out, the listener will self-destruct. A + * value of 0.0f or less means the listener is permanent (unless the object it is listening + * to ceases being valid if one was specified). + * NOTE: Due to some weirdness in when the listener actually starts listening, it won't + * actually hear anything for the first 3 or so seconds of it's existence. + * seconds of this duration + * @param bNotify If this is TRUE, the listener will give a notice when it's spawned to either the target it's + * listening to, or everyone in the area it's listening in. + * + * @return The newly created listener. + */ +object SpawnListener(string sScriptToCall, location lSpawnAt, + string sPattern = "**", object oListenTo = OBJECT_INVALID, float fTTL = 0.0f, int bNotify = TRUE, string sNewTag = ""); + +/** + * Adds a new pattern for the specified listener to listen to. Not recommended for use with + * creatures other than those created with SpawnListener(). + * + * @param oListener The listener object to add the pattern to. + * @param sPattern A regular expression defining the pattern of strings the listener listens to. + * @param sScriptToCall The name of the script to call when the listener hears something matching the + * given pattern. + */ +void AddPattern(object oListener, string sPattern, string sScriptToCall); + +/** + * Nulls the listener's listening patterns and destroys it. Use this instead of + * DestroyObject(), because + * 1) Destruction is not immediate, so nulling the listening patterns is required + * to make sure it does not register any more strings in the meantime. + * 2) The listener is normally set undestroyable, which this function undoes + * automatically. + * + * @param oListener The listener object to destroy. + * @param bFirst Whether the function is being run for the first time, + * or it has already recuresed. When calling, always leave + * this to default (ie, TRUE). + */ +void DestroyListener(object oListener, int bFirst = TRUE); + +//#include "inc_utility" +#include "prc_alterations" + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +object SpawnListener(string sScriptToCall, location lSpawnAt, + string sPattern = "**", object oListenTo = OBJECT_INVALID, float fTTL = 0.0f, int bNotify = TRUE, string sNewTag = "") +{ + // Check for whether we are listening to a single object or at a location + if(GetIsObjectValid(oListenTo)) // Use GetIsObjectValid instead of direct comparison to OBJECT_INVALID, because using an invalid location may crash the game. + lSpawnAt = GetLocation(oListenTo); + + object oListener = CreateObject(OBJECT_TYPE_CREATURE, "prc_gen_listener", lSpawnAt, FALSE, sNewTag); + // Paranoia check + if(!GetIsObjectValid(oListener)) + { + string sErr = "prc_inc_listener: SpawnListener(): ERROR: created listener is invalid!\n" + + "sScriptToCall = '" + sScriptToCall + "'\n" + + "lSpawnAt = " + DebugLocation2Str(lSpawnAt) + "\n" + + "sPattern = '" + sPattern + "'\n" + + "oListenTo = " + DebugObject2Str(oListenTo) + "\n" + + "fTTL = " + FloatToString(fTTL) + "\n" + + "bNotify = " + DebugBool2String(bNotify) + "\n"; + if(DEBUG) DoDebug(sErr); + else WriteTimestampedLogEntry(sErr); + return OBJECT_INVALID; + } + + // A few more tricks to make sure the listener will will not be affected by anything + SetImmortal(oListener, TRUE); + SetPlotFlag(oListener, TRUE); + AssignCommand(oListener, SetIsDestroyable(FALSE, FALSE, FALSE)); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectCutsceneGhost(), oListener); + // Or seen + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY), oListener, 9999.0f); + + // Set the number of heartbeats until refreshing the invisbility VFX + SetLocalInt(oListener, "PRC_GenericListener_VFXRefreshTimer", 1500); + + // The actual listening part + SetListening(oListener, TRUE); + AddPattern(oListener, sPattern, sScriptToCall); + + // Store data for use in heartbeat depending on whether listening to a single creature or an area + if(GetIsObjectValid(oListenTo)) + { + SetLocalInt(oListener, "PRC_GenericListener_ListenToSingle", TRUE); + SetLocalObject(oListener, "PRC_GenericListener_ListeningTo", oListenTo); + + // Make the listener start following the target + AssignCommand(oListener, ActionForceFollowObject(oListenTo)); + } + else + SetLocalLocation(oListener, "PRC_GenericListener_ListeningLocation", lSpawnAt); + + // Has limited duration? + if(fTTL > 0.0f) + { + DelayCommand(fTTL, DestroyListener(oListener)); + + // Paranoia - also set a timer so that the listener destroys itself on hearbeat once it's time is up + SetLocalInt(oListener, "PRC_GenericListener_HasLimitedDuration", TRUE); + SetLocalInt(oListener, "PRC_GenericListener_DestroyTimer", FloatToInt(fTTL + 6.0f) / 6); + } + + // Should we send a notice that the listener is working + if(!bNotify) + SetLocalInt(oListener, "PRC_GenericListener_NoNotification", TRUE); + + AddEventScript(oListener, EVENT_ONHEARTBEAT, PRC_GENERIC_LISTENER_SCRIPT_NAME, TRUE, FALSE); + + return oListener; +} + +void AddPattern(object oListener, string sPattern, string sScriptToCall) +{ + // Get the index to store the pattern in + int nPattern = GetLocalInt(oListener, "PRC_GenericListener_FreePattern"); + + SetListenPattern(oListener, sPattern, nPattern); + SetLocalString(oListener, "PRC_GenericListener_ListenScript_" + IntToString(nPattern), sScriptToCall); + + SetLocalInt(oListener, "PRC_GenericListener_FreePattern", nPattern + 1); +} + +void DestroyListener(object oListener, int bFirst = TRUE) +{ + if(bFirst) + { + int nMax = GetLocalInt(oListener, "PRC_GenericListener_FreePattern"); + int i; + for(i = 0; i < nMax; i++) + { + SetListenPattern(oListener, "", i); + DeleteLocalString(oListener, "PRC_GenericListener_ListenScript_" + IntToString(i)); + } + + SetCommandable(TRUE, oListener); + AssignCommand(oListener, ClearAllActions()); + + RemoveEventScript(oListener, EVENT_ONHEARTBEAT, PRC_GENERIC_LISTENER_SCRIPT_NAME, TRUE, FALSE); + } + + AssignCommand(oListener, SetIsDestroyable(TRUE, FALSE, FALSE)); + AssignCommand(oListener, DestroyObject(oListener)); + + DestroyObject(oListener); + + DelayCommand(0.5f, DestroyListener(oListener, FALSE)); +} diff --git a/src/include/prc_inc_material.nss b/src/include/prc_inc_material.nss new file mode 100644 index 0000000..f69e26d --- /dev/null +++ b/src/include/prc_inc_material.nss @@ -0,0 +1,989 @@ +//:: // Material ItemProperty library // +//:://////////////////////////////////////////////////////////////////////////// +//:: prc_inc_material +//:: +//:: Contains constants and functions for use with material itemproperties +//:: +//:: Original by Axe Murderer +//:: +//:://////////////////////////////////////////////////////////////////////////// +#include "prc_x2_itemprop" + +//:: Material Type Constants +//:://////////////////////////////////////////////////////////////////////////// +const int MATERIAL_TYPE_INVALID = -1; +const int MATERIAL_TYPE_UNKNOWN = 0; +const int MATERIAL_TYPE_BONE = 1; +const int MATERIAL_TYPE_CERAMIC = 2; +const int MATERIAL_TYPE_CRYSTAL = 3; +const int MATERIAL_TYPE_FABRIC = 4; +const int MATERIAL_TYPE_LEATHER = 5; +const int MATERIAL_TYPE_METAL = 6; +const int MATERIAL_TYPE_PAPER = 7; +const int MATERIAL_TYPE_ROPE = 8; +const int MATERIAL_TYPE_STONE = 9; +const int MATERIAL_TYPE_WOOD = 10; + +const string MATERIAL_TYPE_NAME_INVALID = ""; +const string MATERIAL_TYPE_NAME_UNKNOWN = "Unknown"; +const string MATERIAL_TYPE_NAME_BONE = "Bone"; +const string MATERIAL_TYPE_NAME_CERAMIC = "Ceramic"; +const string MATERIAL_TYPE_NAME_CRYSTAL = "Crystal"; +const string MATERIAL_TYPE_NAME_FABRIC = "Fabric"; +const string MATERIAL_TYPE_NAME_LEATHER = "Leather"; +const string MATERIAL_TYPE_NAME_METAL = "Metal"; +const string MATERIAL_TYPE_NAME_PAPER = "Paper"; +const string MATERIAL_TYPE_NAME_ROPE = "Rope"; +const string MATERIAL_TYPE_NAME_STONE = "Stone"; +const string MATERIAL_TYPE_NAME_WOOD = "Wood"; + +//:: Material Itemproperty Constants +//:://////////////////////////////////////////////////////////////////////////////// +//:: Bioware Materials +const int IP_MATERIAL_INVALID = -1; +const int IP_MATERIAL_UNKNOWN = 0; +const int IP_MATERIAL_ADAMANTINE = 1; +const int IP_MATERIAL_BRASS = 2; +const int IP_MATERIAL_BRONZE = 3; +const int IP_MATERIAL_CARBON = 4; +const int IP_MATERIAL_COLD_IRON = 5; +const int IP_MATERIAL_COPPER = 6; +const int IP_MATERIAL_DARKSTEEL = 7; +const int IP_MATERIAL_GOLD = 8; +const int IP_MATERIAL_IRON = 9; +const int IP_MATERIAL_LEAD = 10; +const int IP_MATERIAL_MITHRAL = 11; +const int IP_MATERIAL_PLATINUM = 12; +const int IP_MATERIAL_SILVER = 13; +const int IP_MATERIAL_SILVER_ALCHEMICAL = 14; +const int IP_MATERIAL_STEEL = 15; +const int IP_MATERIAL_BONE = 16; +const int IP_MATERIAL_HIDE = 17; +const int IP_MATERIAL_HIDE_SALAMANDER = 18; +const int IP_MATERIAL_HIDE_UMBER_HULK = 19; +const int IP_MATERIAL_HIDE_WYVERN = 20; +const int IP_MATERIAL_HIDE_DRAGON_BLACK = 21; +const int IP_MATERIAL_HIDE_DRAGON_BLUE = 22; +const int IP_MATERIAL_HIDE_DRAGON_BRASS = 23; +const int IP_MATERIAL_HIDE_DRAGON_BRONZE = 24; +const int IP_MATERIAL_HIDE_DRAGON_COPPER = 25; +const int IP_MATERIAL_HIDE_DRAGON_GOLD = 26; +const int IP_MATERIAL_HIDE_DRAGON_GREEN = 27; +const int IP_MATERIAL_HIDE_DRAGON_RED = 28; +const int IP_MATERIAL_HIDE_DRAGON_SILVER = 29; +const int IP_MATERIAL_HIDE_DRAGON_WHITE = 30; +const int IP_MATERIAL_LEATHER = 31; +const int IP_MATERIAL_SCALE = 32; +const int IP_MATERIAL_CLOTH = 33; +const int IP_MATERIAL_COTTON = 34; +const int IP_MATERIAL_SILK = 35; +const int IP_MATERIAL_WOOL = 36; +const int IP_MATERIAL_WOOD = 37; +const int IP_MATERIAL_WOOD_IRONWOOD = 38; +const int IP_MATERIAL_WOOD_DUSKWOOD = 39; +const int IP_MATERIAL_WOOD_DARKWOOD_ZALANTAR = 40; +const int IP_MATERIAL_WOOD_ASH = 41; +const int IP_MATERIAL_WOOD_YEW = 42; +const int IP_MATERIAL_WOOD_OAK = 43; +const int IP_MATERIAL_WOOD_PINE = 44; +const int IP_MATERIAL_WOOD_CEDAR = 45; +const int IP_MATERIAL_ELEMENTAL = 46; +const int IP_MATERIAL_ELEMENTAL_AIR = 47; +const int IP_MATERIAL_ELEMENTAL_EARTH = 48; +const int IP_MATERIAL_ELEMENTAL_FIRE = 49; +const int IP_MATERIAL_ELEMENTAL_WATER = 50; +const int IP_MATERIAL_GEM = 51; +const int IP_MATERIAL_GEM_ALEXANDRITE = 52; +const int IP_MATERIAL_GEM_AMETHYST = 53; +const int IP_MATERIAL_GEM_AVENTURINE = 54; +const int IP_MATERIAL_GEM_BELJURIL = 55; +const int IP_MATERIAL_GEM_BLOODSTONE = 56; +const int IP_MATERIAL_GEM_BLUE_DIAMOND = 57; +const int IP_MATERIAL_GEM_CANARY_DIAMOND = 58; +const int IP_MATERIAL_GEM_DIAMOND = 59; +const int IP_MATERIAL_GEM_EMERALD = 60; +const int IP_MATERIAL_GEM_FIRE_AGATE = 61; +const int IP_MATERIAL_GEM_FIRE_OPAL = 62; +const int IP_MATERIAL_GEM_FLUORSPAR = 63; +const int IP_MATERIAL_GEM_GARNET = 64; +const int IP_MATERIAL_GEM_GREENSTONE = 65; +const int IP_MATERIAL_GEM_JACINTH = 66; +const int IP_MATERIAL_GEM_KINGS_TEAR = 67; +const int IP_MATERIAL_GEM_MALACHITE = 68; +const int IP_MATERIAL_GEM_OBSIDIAN = 69; +const int IP_MATERIAL_GEM_PHENALOPE = 70; +const int IP_MATERIAL_GEM_ROGUE_STONE = 71; +const int IP_MATERIAL_GEM_RUBY = 72; +const int IP_MATERIAL_GEM_SAPPHIRE = 73; +const int IP_MATERIAL_GEM_STAR_SAPPHIRE = 74; +const int IP_MATERIAL_GEM_TOPAZ = 75; +const int IP_MATERIAL_GEM_CRYSTAL_DEEP = 76; +const int IP_MATERIAL_GEM_CRYSTAL_MUNDANE = 77; +const int IP_MATERIAL_PAPER = 100; +const int IP_MATERIAL_GLASS = 101; +const int IP_MATERIAL_ICE = 102; +const int IP_MATERIAL_ROPE_HEMP = 103; +const int IP_MATERIAL_STONE = 104; +const int IP_MATERIAL_DEEP_CORAL = 105; +const int IP_MATERIAL_WOOD_LIVING = 106; +const int IP_MATERIAL_OBDURIUM = 107; +const int IP_MATERIAL_WOOD_BRONZE = 108; +const int IP_MATERIAL_BYESHK = 109; +const int IP_MATERIAL_CALOMEL = 110; +const int IP_MATERIAL_CRYSTEEL_RIEDRAN = 111; +const int IP_MATERIAL_DENSEWOOD = 112; +const int IP_MATERIAL_DRAGONSHARD = 113; +const int IP_MATERIAL_IRON_FLAMETOUCHED = 114; +const int IP_MATERIAL_LIVEWOOD = 115; +const int IP_MATERIAL_MOURNLODE_PURPLE = 116; +const int IP_MATERIAL_SOARWOOD = 117; +const int IP_MATERIAL_TARGATH = 118; +const int IP_MATERIAL_ASTRAL_DRIFTMETAL = 119; +const int IP_MATERIAL_ATANDUR = 120; +const int IP_MATERIAL_BLENDED_QUARTZ = 121; +const int IP_MATERIAL_CHITIN = 122; +const int IP_MATERIAL_DARKLEAF_ELVEN = 123; +const int IP_MATERIAL_DLARUN = 124; +const int IP_MATERIAL_DUSTWOOD = 125; +const int IP_MATERIAL_ELUKIAN_CLAY = 126; +const int IP_MATERIAL_ENTROPIUM = 127; +const int IP_MATERIAL_GREENSTEEL_BAATORIAN = 128; +const int IP_MATERIAL_HIZAGKUUR = 129; +const int IP_MATERIAL_IRON_FEVER = 130; +const int IP_MATERIAL_IRON_GEHENNAN_MORGHUTH = 131; +const int IP_MATERIAL_LEAFWEAVE = 132; +const int IP_MATERIAL_LIVING_METAL = 133; +const int IP_MATERIAL_MINDSTEEL_URDRUKAR = 134; +const int IP_MATERIAL_TRUESTEEL_SOLANIAN = 135; +const int IP_MATERIAL_WOOD_AGAFARI = 136; +const int IP_MATERIAL_CRYSTAL_DASL = 137; +const int IP_MATERIAL_DRAKE_IVORY = 138; +const int IP_MATERIAL_ROPE_GIANT_HAIR = 139; +const int IP_MATERIAL_OBSIDIAN = 140; +const int IP_MATERIAL_BAMBOO = 141; +const int IP_MATERIAL_POTTERY = 142; +const int IP_MATERIAL_GLASSTEEL = 143; +const int IP_NUM_MATERIALS = 143; + +const string IP_MATERIAL_NAME_INVALID = ""; +const string IP_MATERIAL_NAME_UNKNOWN = "Unknown"; +const string IP_MATERIAL_NAME_ADAMANTINE = "Adamantine"; +const string IP_MATERIAL_NAME_BRASS = "Brass"; +const string IP_MATERIAL_NAME_BRONZE = "Bronze"; +const string IP_MATERIAL_NAME_CARBON = "Carbon"; +const string IP_MATERIAL_NAME_COLD_IRON = "Cold Iron"; +const string IP_MATERIAL_NAME_COPPER = "Copper"; +const string IP_MATERIAL_NAME_DARKSTEEL = "Darksteel"; +const string IP_MATERIAL_NAME_GOLD = "Gold"; +const string IP_MATERIAL_NAME_IRON = "Iron"; +const string IP_MATERIAL_NAME_LEAD = "Lead"; +const string IP_MATERIAL_NAME_MITHRAL = "Mithral"; +const string IP_MATERIAL_NAME_PLATINUM = "Platinum"; +const string IP_MATERIAL_NAME_SILVER = "Silver"; +const string IP_MATERIAL_NAME_SILVER_ALCHEMICAL = "Alchemical Silver"; +const string IP_MATERIAL_NAME_STEEL = "Steel"; +const string IP_MATERIAL_NAME_BONE = "Bone"; +const string IP_MATERIAL_NAME_HIDE = "Hide"; +const string IP_MATERIAL_NAME_HIDE_SALAMANDER = "Salamander Hide"; +const string IP_MATERIAL_NAME_HIDE_UMBER_HULK = "Umber Hulk Hide"; +const string IP_MATERIAL_NAME_HIDE_WYVERN = "Wyvern Hide"; +const string IP_MATERIAL_NAME_HIDE_DRAGON_BLACK = "Black Dragon Hide"; +const string IP_MATERIAL_NAME_HIDE_DRAGON_BLUE = "Blue Dragon Hide"; +const string IP_MATERIAL_NAME_HIDE_DRAGON_BRASS = "Brass Dragon Hide"; +const string IP_MATERIAL_NAME_HIDE_DRAGON_BRONZE = "Bronze Dragon Hide"; +const string IP_MATERIAL_NAME_HIDE_DRAGON_COPPER = "Copper Dragon Hide"; +const string IP_MATERIAL_NAME_HIDE_DRAGON_GOLD = "Gold Dragon Hide"; +const string IP_MATERIAL_NAME_HIDE_DRAGON_GREEN = "Green Dragon Hide"; +const string IP_MATERIAL_NAME_HIDE_DRAGON_RED = "Red Dragon Hide"; +const string IP_MATERIAL_NAME_HIDE_DRAGON_SILVER = "Silver Dragon Hide"; +const string IP_MATERIAL_NAME_HIDE_DRAGON_WHITE = "White Dragon Hide"; +const string IP_MATERIAL_NAME_LEATHER = "Leather Hide"; +const string IP_MATERIAL_NAME_SCALE = "Scale"; +const string IP_MATERIAL_NAME_CLOTH = "Cloth"; +const string IP_MATERIAL_NAME_COTTON = "Cotton"; +const string IP_MATERIAL_NAME_SILK = "Silk"; +const string IP_MATERIAL_NAME_WOOL = "Wool"; +const string IP_MATERIAL_NAME_WOOD = "Wood"; +const string IP_MATERIAL_NAME_WOOD_IRONWOOD = "Ironwood"; +const string IP_MATERIAL_NAME_WOOD_DUSKWOOD = "Duskwood"; +const string IP_MATERIAL_NAME_WOOD_DARKWOOD_ZALANTAR = "Zalantar Darkwood"; +const string IP_MATERIAL_NAME_WOOD_ASH = "Ash"; +const string IP_MATERIAL_NAME_WOOD_YEW = "Yew"; +const string IP_MATERIAL_NAME_WOOD_OAK = "Oak"; +const string IP_MATERIAL_NAME_WOOD_PINE = "Pine"; +const string IP_MATERIAL_NAME_WOOD_CEDAR = "Cedar"; +const string IP_MATERIAL_NAME_ELEMENTAL = "Elemental"; +const string IP_MATERIAL_NAME_ELEMENTAL_AIR = "Air Elemental"; +const string IP_MATERIAL_NAME_ELEMENTAL_EARTH = "Earth Elemental"; +const string IP_MATERIAL_NAME_ELEMENTAL_FIRE = "Fire Elemental"; +const string IP_MATERIAL_NAME_ELEMENTAL_WATER = "Water Elemental"; +const string IP_MATERIAL_NAME_GEM = "Gem"; +const string IP_MATERIAL_NAME_GEM_ALEXANDRITE = "Alexandrite"; +const string IP_MATERIAL_NAME_GEM_AMETHYST = "Amethyst"; +const string IP_MATERIAL_NAME_GEM_AVENTURINE = "Aventurine"; +const string IP_MATERIAL_NAME_GEM_BELJURIL = "Beljuril"; +const string IP_MATERIAL_NAME_GEM_BLOODSTONE = "Bloodstone"; +const string IP_MATERIAL_NAME_GEM_BLUE_DIAMOND = "Blue Diamond"; +const string IP_MATERIAL_NAME_GEM_CANARY_DIAMOND = "Carary Diamond"; +const string IP_MATERIAL_NAME_GEM_DIAMOND = "Diamond"; +const string IP_MATERIAL_NAME_GEM_EMERALD = "Emerald"; +const string IP_MATERIAL_NAME_GEM_FIRE_AGATE = "Agate"; +const string IP_MATERIAL_NAME_GEM_FIRE_OPAL = "Opal"; +const string IP_MATERIAL_NAME_GEM_FLUORSPAR = "Fluorspar"; +const string IP_MATERIAL_NAME_GEM_GARNET = "Garnet"; +const string IP_MATERIAL_NAME_GEM_GREENSTONE = "Greenstone"; +const string IP_MATERIAL_NAME_GEM_JACINTH = "Jacinth"; +const string IP_MATERIAL_NAME_GEM_KINGS_TEAR = "King's Tear"; +const string IP_MATERIAL_NAME_GEM_MALACHITE = "Malachite"; +const string IP_MATERIAL_NAME_GEM_OBSIDIAN = "Obsidian"; +const string IP_MATERIAL_NAME_GEM_PHENALOPE = "Phenalope"; +const string IP_MATERIAL_NAME_GEM_ROGUE_STONE = "Rogue Stone"; +const string IP_MATERIAL_NAME_GEM_RUBY = "Ruby"; +const string IP_MATERIAL_NAME_GEM_SAPPHIRE = "Sapphire"; +const string IP_MATERIAL_NAME_GEM_STAR_SAPPHIRE = "Star Sapphire"; +const string IP_MATERIAL_NAME_GEM_TOPAZ = "Topaz"; +const string IP_MATERIAL_NAME_GEM_CRYSTAL_DEEP = "Deep Crystal"; +const string IP_MATERIAL_NAME_GEM_CRYSTAL_MUNDANE = "Mundane Crystal"; +const string IP_MATERIAL_NAME_PAPER = "Paper"; +const string IP_MATERIAL_NAME_GLASS = "Glass"; +const string IP_MATERIAL_NAME_ICE = "Ice"; +const string IP_MATERIAL_NAME_ROPE_HEMP = "Hemp Rope"; +const string IP_MATERIAL_NAME_STONE = "Stone"; +const string IP_MATERIAL_NAME_DEEP_CORAL = "Deep Coral"; +const string IP_MATERIAL_NAME_WOOD_LIVING = "Living Wood"; +const string IP_MATERIAL_NAME_OBDURIUM = "Obdurium"; +const string IP_MATERIAL_NAME_WOOD_BRONZE = "Bronze Wood"; +const string IP_MATERIAL_NAME_BYESHK = "Byeshk"; +const string IP_MATERIAL_NAME_CALOMEL = "Calomel"; +const string IP_MATERIAL_NAME_CRYSTEEL_RIEDRAN = "Riedran Crysteel"; +const string IP_MATERIAL_NAME_DENSEWOOD = "Densewood"; +const string IP_MATERIAL_NAME_DRAGONSHARD = "Dragonshard"; +const string IP_MATERIAL_NAME_IRON_FLAMETOUCHED = "Flametouched Iron"; +const string IP_MATERIAL_NAME_LIVEWOOD = "Livewood"; +const string IP_MATERIAL_NAME_MOURNLODE_PURPLE = "Purple Mournlode"; +const string IP_MATERIAL_NAME_SOARWOOD = "Soarwood"; +const string IP_MATERIAL_NAME_TARGATH = "Targath"; +const string IP_MATERIAL_NAME_ASTRAL_DRIFTMETAL = "Astral Driftmetal"; +const string IP_MATERIAL_NAME_ATANDUR = "Atandur"; +const string IP_MATERIAL_NAME_BLENDED_QUARTZ = "Blended Quartz"; +const string IP_MATERIAL_NAME_CHITIN = "Chitin"; +const string IP_MATERIAL_NAME_DARKLEAF_ELVEN = "Elven Darkleaf"; +const string IP_MATERIAL_NAME_DLARUN = "Dlarun"; +const string IP_MATERIAL_NAME_DUSTWOOD = "Dustwood"; +const string IP_MATERIAL_NAME_ELUKIAN_CLAY = "Elukian Clay"; +const string IP_MATERIAL_NAME_ENTROPIUM = "Entropium"; +const string IP_MATERIAL_NAME_GREENSTEEL_BAATORIAN = "Baatorian Greensteel"; +const string IP_MATERIAL_NAME_HIZAGKUUR = "Hizagkuur"; +const string IP_MATERIAL_NAME_IRON_FEVER = "Fever Iron"; +const string IP_MATERIAL_NAME_IRON_GEHENNAN_MORGHUTH = "Gehennan Morghuth Iron"; +const string IP_MATERIAL_NAME_LEAFWEAVE = "Leafweave"; +const string IP_MATERIAL_NAME_LIVING_METAL = "Living Metal"; +const string IP_MATERIAL_NAME_MINDSTEEL_URDRUKAR = "Urdrukar Mindsteel"; +const string IP_MATERIAL_NAME_TRUESTEEL_SOLANIAN = "Solanian Truesteel"; +const string IP_MATERIAL_NAME_WOOD_AGAFARI = "Agafari"; +const string IP_MATERIAL_NAME_CRYSTAL_DASL = "Dasl"; +const string IP_MATERIAL_NAME_DRAKE_IVORY = "Drake Ivory"; +const string IP_MATERIAL_NAME_ROPE_GIANT_HAIR = "Giant Hair Rope"; +const string IP_MATERIAL_NAME_OBSIDIAN = "Obsidian"; +const string IP_MATERIAL_NAME_BAMBOO = "Bamboo"; +const string IP_MATERIAL_NAME_POTTERY = "Pottery"; +const string IP_MATERIAL_NAME_GLASSTEEL = "Glassteel"; + +//:://///////////////////////////////////////////////////////////// +// GetMaterialName( int iMaterialType, int bLowerCase = FALSE) +// Given a material type this function returns its name as a string. +//:://///////////////////////////////////////////////////////////// +// Parameters: int iMaterialType - the material type number IP_MATERIAL_* +// int bLowerCase - if TRUE the returned string is all lower case +// if FALSE the returned string is first letter cap. +// +// Returns: the name of the material type as a string IP_MATERIAL_NAME_*. +// Returns IP_MATERIAL_NAME_INVALID if the material type is invalid. +//:://///////////////////////////////////////////////////////////// +string GetMaterialName( int iMaterialType, int bLowerCase = FALSE); +string GetMaterialName( int iMaterialType, int bLowerCase = FALSE) +{ if( iMaterialType == IP_MATERIAL_INVALID) return IP_MATERIAL_NAME_INVALID; + + string sName = ""; + switch( iMaterialType) + { case IP_MATERIAL_UNKNOWN: sName = IP_MATERIAL_NAME_UNKNOWN; break; + case IP_MATERIAL_ADAMANTINE: sName = IP_MATERIAL_NAME_ADAMANTINE; break; + case IP_MATERIAL_BRASS: sName = IP_MATERIAL_NAME_BRASS; break; + case IP_MATERIAL_BRONZE: sName = IP_MATERIAL_NAME_BRONZE; break; + case IP_MATERIAL_CARBON: sName = IP_MATERIAL_NAME_CARBON; break; + case IP_MATERIAL_COLD_IRON: sName = IP_MATERIAL_NAME_COLD_IRON; break; + case IP_MATERIAL_COPPER: sName = IP_MATERIAL_NAME_COPPER; break; + case IP_MATERIAL_DARKSTEEL: sName = IP_MATERIAL_NAME_DARKSTEEL; break; + case IP_MATERIAL_GOLD: sName = IP_MATERIAL_NAME_GOLD; break; + case IP_MATERIAL_IRON: sName = IP_MATERIAL_NAME_IRON; break; + case IP_MATERIAL_LEAD: sName = IP_MATERIAL_NAME_LEAD; break; + case IP_MATERIAL_MITHRAL: sName = IP_MATERIAL_NAME_MITHRAL; break; + case IP_MATERIAL_PLATINUM: sName = IP_MATERIAL_NAME_PLATINUM; break; + case IP_MATERIAL_SILVER: sName = IP_MATERIAL_NAME_SILVER; break; + case IP_MATERIAL_SILVER_ALCHEMICAL: sName = IP_MATERIAL_NAME_SILVER_ALCHEMICAL; break; + case IP_MATERIAL_STEEL: sName = IP_MATERIAL_NAME_STEEL; break; + case IP_MATERIAL_BONE: sName = IP_MATERIAL_NAME_BONE; break; + case IP_MATERIAL_HIDE: sName = IP_MATERIAL_NAME_HIDE; break; + case IP_MATERIAL_HIDE_SALAMANDER: sName = IP_MATERIAL_NAME_HIDE_SALAMANDER; break; + case IP_MATERIAL_HIDE_UMBER_HULK: sName = IP_MATERIAL_NAME_HIDE_UMBER_HULK; break; + case IP_MATERIAL_HIDE_WYVERN: sName = IP_MATERIAL_NAME_HIDE_WYVERN; break; + case IP_MATERIAL_HIDE_DRAGON_BLACK: sName = IP_MATERIAL_NAME_HIDE_DRAGON_BLACK; break; + case IP_MATERIAL_HIDE_DRAGON_BLUE: sName = IP_MATERIAL_NAME_HIDE_DRAGON_BLUE; break; + case IP_MATERIAL_HIDE_DRAGON_BRASS: sName = IP_MATERIAL_NAME_HIDE_DRAGON_BRASS; break; + case IP_MATERIAL_HIDE_DRAGON_BRONZE: sName = IP_MATERIAL_NAME_HIDE_DRAGON_BRONZE; break; + case IP_MATERIAL_HIDE_DRAGON_COPPER: sName = IP_MATERIAL_NAME_HIDE_DRAGON_COPPER; break; + case IP_MATERIAL_HIDE_DRAGON_GOLD: sName = IP_MATERIAL_NAME_HIDE_DRAGON_GOLD; break; + case IP_MATERIAL_HIDE_DRAGON_GREEN: sName = IP_MATERIAL_NAME_HIDE_DRAGON_GREEN; break; + case IP_MATERIAL_HIDE_DRAGON_RED: sName = IP_MATERIAL_NAME_HIDE_DRAGON_RED; break; + case IP_MATERIAL_HIDE_DRAGON_SILVER: sName = IP_MATERIAL_NAME_HIDE_DRAGON_SILVER; break; + case IP_MATERIAL_HIDE_DRAGON_WHITE: sName = IP_MATERIAL_NAME_HIDE_DRAGON_WHITE; break; + case IP_MATERIAL_LEATHER: sName = IP_MATERIAL_NAME_LEATHER; break; + case IP_MATERIAL_SCALE: sName = IP_MATERIAL_NAME_SCALE; break; + case IP_MATERIAL_COTTON: sName = IP_MATERIAL_NAME_COTTON; break; + case IP_MATERIAL_CLOTH: sName = IP_MATERIAL_NAME_CLOTH; break; + case IP_MATERIAL_SILK: sName = IP_MATERIAL_NAME_SILK; break; + case IP_MATERIAL_WOOL: sName = IP_MATERIAL_NAME_WOOL; break; + case IP_MATERIAL_WOOD: sName = IP_MATERIAL_NAME_WOOD; break; + case IP_MATERIAL_WOOD_IRONWOOD: sName = IP_MATERIAL_NAME_WOOD_IRONWOOD; break; + case IP_MATERIAL_WOOD_DUSKWOOD: sName = IP_MATERIAL_NAME_WOOD_DUSKWOOD; break; + case IP_MATERIAL_WOOD_DARKWOOD_ZALANTAR: sName = IP_MATERIAL_NAME_WOOD_DARKWOOD_ZALANTAR; break; + case IP_MATERIAL_WOOD_ASH: sName = IP_MATERIAL_NAME_WOOD_ASH; break; + case IP_MATERIAL_WOOD_YEW: sName = IP_MATERIAL_NAME_WOOD_YEW; break; + case IP_MATERIAL_WOOD_OAK: sName = IP_MATERIAL_NAME_WOOD_OAK; break; + case IP_MATERIAL_WOOD_PINE: sName = IP_MATERIAL_NAME_WOOD_PINE; break; + case IP_MATERIAL_WOOD_CEDAR: sName = IP_MATERIAL_NAME_WOOD_CEDAR; break; + case IP_MATERIAL_ELEMENTAL: sName = IP_MATERIAL_NAME_ELEMENTAL; break; + case IP_MATERIAL_ELEMENTAL_AIR: sName = IP_MATERIAL_NAME_ELEMENTAL_AIR; break; + case IP_MATERIAL_ELEMENTAL_EARTH: sName = IP_MATERIAL_NAME_ELEMENTAL_EARTH; break; + case IP_MATERIAL_ELEMENTAL_FIRE: sName = IP_MATERIAL_NAME_ELEMENTAL_FIRE; break; + case IP_MATERIAL_ELEMENTAL_WATER: sName = IP_MATERIAL_NAME_ELEMENTAL_WATER; break; + case IP_MATERIAL_GEM: sName = IP_MATERIAL_NAME_GEM; break; + case IP_MATERIAL_GEM_ALEXANDRITE: sName = IP_MATERIAL_NAME_GEM_ALEXANDRITE; break; + case IP_MATERIAL_GEM_AMETHYST: sName = IP_MATERIAL_NAME_GEM_AMETHYST; break; + case IP_MATERIAL_GEM_AVENTURINE: sName = IP_MATERIAL_NAME_GEM_AVENTURINE; break; + case IP_MATERIAL_GEM_BELJURIL: sName = IP_MATERIAL_NAME_GEM_BELJURIL; break; + case IP_MATERIAL_GEM_BLOODSTONE: sName = IP_MATERIAL_NAME_GEM_BLOODSTONE; break; + case IP_MATERIAL_GEM_BLUE_DIAMOND: sName = IP_MATERIAL_NAME_GEM_BLUE_DIAMOND; break; + case IP_MATERIAL_GEM_CANARY_DIAMOND: sName = IP_MATERIAL_NAME_GEM_CANARY_DIAMOND; break; + case IP_MATERIAL_GEM_DIAMOND: sName = IP_MATERIAL_NAME_GEM_DIAMOND; break; + case IP_MATERIAL_GEM_EMERALD: sName = IP_MATERIAL_NAME_GEM_EMERALD; break; + case IP_MATERIAL_GEM_FIRE_AGATE: sName = IP_MATERIAL_NAME_GEM_FIRE_AGATE; break; + case IP_MATERIAL_GEM_FIRE_OPAL: sName = IP_MATERIAL_NAME_GEM_FIRE_OPAL; break; + case IP_MATERIAL_GEM_FLUORSPAR: sName = IP_MATERIAL_NAME_GEM_FLUORSPAR; break; + case IP_MATERIAL_GEM_GARNET: sName = IP_MATERIAL_NAME_GEM_GARNET; break; + case IP_MATERIAL_GEM_GREENSTONE: sName = IP_MATERIAL_NAME_GEM_GREENSTONE; break; + case IP_MATERIAL_GEM_JACINTH: sName = IP_MATERIAL_NAME_GEM_JACINTH; break; + case IP_MATERIAL_GEM_KINGS_TEAR: sName = IP_MATERIAL_NAME_GEM_KINGS_TEAR; break; + case IP_MATERIAL_GEM_MALACHITE: sName = IP_MATERIAL_NAME_GEM_MALACHITE; break; + case IP_MATERIAL_GEM_OBSIDIAN: sName = IP_MATERIAL_NAME_GEM_OBSIDIAN; break; + case IP_MATERIAL_GEM_PHENALOPE: sName = IP_MATERIAL_NAME_GEM_PHENALOPE; break; + case IP_MATERIAL_GEM_ROGUE_STONE: sName = IP_MATERIAL_NAME_GEM_ROGUE_STONE; break; + case IP_MATERIAL_GEM_RUBY: sName = IP_MATERIAL_NAME_GEM_RUBY; break; + case IP_MATERIAL_GEM_SAPPHIRE: sName = IP_MATERIAL_NAME_GEM_SAPPHIRE; break; + case IP_MATERIAL_GEM_STAR_SAPPHIRE: sName = IP_MATERIAL_NAME_GEM_STAR_SAPPHIRE; break; + case IP_MATERIAL_GEM_TOPAZ: sName = IP_MATERIAL_NAME_GEM_TOPAZ; break; + case IP_MATERIAL_GEM_CRYSTAL_DEEP: sName = IP_MATERIAL_NAME_GEM_CRYSTAL_DEEP; break; + case IP_MATERIAL_GEM_CRYSTAL_MUNDANE: sName = IP_MATERIAL_NAME_GEM_CRYSTAL_MUNDANE; break; + case IP_MATERIAL_PAPER: sName = IP_MATERIAL_NAME_PAPER; break; + case IP_MATERIAL_GLASS: sName = IP_MATERIAL_NAME_GLASS; break; + case IP_MATERIAL_ICE: sName = IP_MATERIAL_NAME_ICE; break; + case IP_MATERIAL_ROPE_HEMP: sName = IP_MATERIAL_NAME_ROPE_HEMP; break; + case IP_MATERIAL_STONE: sName = IP_MATERIAL_NAME_STONE; break; + case IP_MATERIAL_DEEP_CORAL: sName = IP_MATERIAL_NAME_DEEP_CORAL; break; + case IP_MATERIAL_WOOD_LIVING: sName = IP_MATERIAL_NAME_WOOD_LIVING; break; + case IP_MATERIAL_OBDURIUM: sName = IP_MATERIAL_NAME_OBDURIUM; break; + case IP_MATERIAL_WOOD_BRONZE: sName = IP_MATERIAL_NAME_WOOD_BRONZE; break; + case IP_MATERIAL_BYESHK: sName = IP_MATERIAL_NAME_BYESHK; break; + case IP_MATERIAL_CALOMEL: sName = IP_MATERIAL_NAME_CALOMEL; break; + case IP_MATERIAL_CRYSTEEL_RIEDRAN: sName = IP_MATERIAL_NAME_CRYSTEEL_RIEDRAN; break; + case IP_MATERIAL_DENSEWOOD: sName = IP_MATERIAL_NAME_DENSEWOOD; break; + case IP_MATERIAL_DRAGONSHARD: sName = IP_MATERIAL_NAME_DRAGONSHARD; break; + case IP_MATERIAL_IRON_FLAMETOUCHED: sName = IP_MATERIAL_NAME_IRON_FLAMETOUCHED; break; + case IP_MATERIAL_LIVEWOOD: sName = IP_MATERIAL_NAME_LIVEWOOD; break; + case IP_MATERIAL_MOURNLODE_PURPLE: sName = IP_MATERIAL_NAME_MOURNLODE_PURPLE; break; + case IP_MATERIAL_SOARWOOD: sName = IP_MATERIAL_NAME_SOARWOOD; break; + case IP_MATERIAL_TARGATH: sName = IP_MATERIAL_NAME_TARGATH; break; + case IP_MATERIAL_ASTRAL_DRIFTMETAL: sName = IP_MATERIAL_NAME_ASTRAL_DRIFTMETAL; break; + case IP_MATERIAL_ATANDUR: sName = IP_MATERIAL_NAME_ATANDUR; break; + case IP_MATERIAL_BLENDED_QUARTZ: sName = IP_MATERIAL_NAME_BLENDED_QUARTZ; break; + case IP_MATERIAL_CHITIN: sName = IP_MATERIAL_NAME_CHITIN; break; + case IP_MATERIAL_DARKLEAF_ELVEN: sName = IP_MATERIAL_NAME_DARKLEAF_ELVEN; break; + case IP_MATERIAL_DLARUN: sName = IP_MATERIAL_NAME_DLARUN; break; + case IP_MATERIAL_DUSTWOOD: sName = IP_MATERIAL_NAME_DUSTWOOD; break; + case IP_MATERIAL_ELUKIAN_CLAY: sName = IP_MATERIAL_NAME_ELUKIAN_CLAY; break; + case IP_MATERIAL_ENTROPIUM: sName = IP_MATERIAL_NAME_ENTROPIUM; break; + case IP_MATERIAL_GREENSTEEL_BAATORIAN: sName = IP_MATERIAL_NAME_GREENSTEEL_BAATORIAN; break; + case IP_MATERIAL_HIZAGKUUR: sName = IP_MATERIAL_NAME_HIZAGKUUR; break; + case IP_MATERIAL_IRON_FEVER: sName = IP_MATERIAL_NAME_IRON_FEVER; break; + case IP_MATERIAL_IRON_GEHENNAN_MORGHUTH: sName = IP_MATERIAL_NAME_IRON_GEHENNAN_MORGHUTH; break; + case IP_MATERIAL_LEAFWEAVE: sName = IP_MATERIAL_NAME_LEAFWEAVE; break; + case IP_MATERIAL_LIVING_METAL: sName = IP_MATERIAL_NAME_LIVING_METAL; break; + case IP_MATERIAL_MINDSTEEL_URDRUKAR: sName = IP_MATERIAL_NAME_MINDSTEEL_URDRUKAR; break; + case IP_MATERIAL_TRUESTEEL_SOLANIAN: sName = IP_MATERIAL_NAME_TRUESTEEL_SOLANIAN; break; + case IP_MATERIAL_WOOD_AGAFARI: sName = IP_MATERIAL_NAME_WOOD_AGAFARI; break; + case IP_MATERIAL_CRYSTAL_DASL: sName = IP_MATERIAL_NAME_CRYSTAL_DASL; break; + case IP_MATERIAL_DRAKE_IVORY: sName = IP_MATERIAL_NAME_DRAKE_IVORY; break; + case IP_MATERIAL_ROPE_GIANT_HAIR: sName = IP_MATERIAL_NAME_ROPE_GIANT_HAIR; break; + case IP_MATERIAL_OBSIDIAN: sName = IP_MATERIAL_NAME_OBSIDIAN; break; + case IP_MATERIAL_BAMBOO: sName = IP_MATERIAL_NAME_BAMBOO; break; + case IP_MATERIAL_POTTERY: sName = IP_MATERIAL_NAME_POTTERY; break; + case IP_MATERIAL_GLASSTEEL: sName = IP_MATERIAL_NAME_GLASSTEEL; break; + + default: return ""; + } + + return (bLowerCase ? GetStringLowerCase( sName) : sName); +} + + +//:://///////////////////////////////////////////////////////////// +// int GetIPMaterial( string sMaterialName) +// Given a material name this function returns its type number (2da row) +//:://///////////////////////////////////////////////////////////// +// Parameters: string sMaterialName - the material name IP_MATERIAL_NAME_* +// +// Returns: the material type number IP_MATERIAL_* of the specified material +// name or IP_MATERIAL_INVALID if the type could not be determined +// from the specified name. +//:://///////////////////////////////////////////////////////////// +int GetIPMaterial( string sMaterialName); +int GetIPMaterial( string sMaterialName) +{ if( sMaterialName == IP_MATERIAL_NAME_INVALID) return IP_MATERIAL_INVALID; + + sMaterialName = GetStringUpperCase( sMaterialName); + if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_UNKNOWN)) return IP_MATERIAL_UNKNOWN; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_ADAMANTINE)) return IP_MATERIAL_ADAMANTINE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_BRASS)) return IP_MATERIAL_BRASS; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_BRONZE)) return IP_MATERIAL_BRONZE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_CARBON)) return IP_MATERIAL_CARBON; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_COLD_IRON)) return IP_MATERIAL_COLD_IRON; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_COPPER)) return IP_MATERIAL_COPPER; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_DARKSTEEL)) return IP_MATERIAL_DARKSTEEL; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GOLD)) return IP_MATERIAL_GOLD; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_IRON)) return IP_MATERIAL_IRON; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_LEAD)) return IP_MATERIAL_LEAD; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_MITHRAL)) return IP_MATERIAL_MITHRAL; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_PLATINUM)) return IP_MATERIAL_PLATINUM; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_SILVER)) return IP_MATERIAL_SILVER; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_SILVER_ALCHEMICAL)) return IP_MATERIAL_SILVER_ALCHEMICAL; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_STEEL)) return IP_MATERIAL_STEEL; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_BONE)) return IP_MATERIAL_BONE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_HIDE)) return IP_MATERIAL_HIDE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_HIDE_SALAMANDER)) return IP_MATERIAL_HIDE_SALAMANDER; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_HIDE_UMBER_HULK)) return IP_MATERIAL_HIDE_UMBER_HULK; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_HIDE_WYVERN)) return IP_MATERIAL_HIDE_WYVERN; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_HIDE_DRAGON_BLACK)) return IP_MATERIAL_HIDE_DRAGON_BLACK; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_HIDE_DRAGON_BLUE)) return IP_MATERIAL_HIDE_DRAGON_BLUE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_HIDE_DRAGON_BRASS)) return IP_MATERIAL_HIDE_DRAGON_BRASS; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_HIDE_DRAGON_BRONZE)) return IP_MATERIAL_HIDE_DRAGON_BRONZE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_HIDE_DRAGON_COPPER)) return IP_MATERIAL_HIDE_DRAGON_COPPER; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_HIDE_DRAGON_GOLD)) return IP_MATERIAL_HIDE_DRAGON_GOLD; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_HIDE_DRAGON_GREEN)) return IP_MATERIAL_HIDE_DRAGON_GREEN; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_HIDE_DRAGON_RED)) return IP_MATERIAL_HIDE_DRAGON_RED; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_HIDE_DRAGON_SILVER)) return IP_MATERIAL_HIDE_DRAGON_SILVER; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_HIDE_DRAGON_WHITE)) return IP_MATERIAL_HIDE_DRAGON_WHITE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_LEATHER)) return IP_MATERIAL_LEATHER; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_SCALE)) return IP_MATERIAL_SCALE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_COTTON)) return IP_MATERIAL_COTTON; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_CLOTH)) return IP_MATERIAL_CLOTH; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_SILK)) return IP_MATERIAL_SILK; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_WOOL)) return IP_MATERIAL_WOOL; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_WOOD)) return IP_MATERIAL_WOOD; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_WOOD_IRONWOOD)) return IP_MATERIAL_WOOD_IRONWOOD; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_WOOD_DUSKWOOD)) return IP_MATERIAL_WOOD_DUSKWOOD; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_WOOD_DARKWOOD_ZALANTAR)) return IP_MATERIAL_WOOD_DARKWOOD_ZALANTAR; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_WOOD_ASH)) return IP_MATERIAL_WOOD_ASH; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_WOOD_YEW)) return IP_MATERIAL_WOOD_YEW; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_WOOD_OAK)) return IP_MATERIAL_WOOD_OAK; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_WOOD_PINE)) return IP_MATERIAL_WOOD_PINE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_WOOD_CEDAR)) return IP_MATERIAL_WOOD_CEDAR; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_ELEMENTAL)) return IP_MATERIAL_ELEMENTAL; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_ELEMENTAL_AIR)) return IP_MATERIAL_ELEMENTAL_AIR; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_ELEMENTAL_EARTH)) return IP_MATERIAL_ELEMENTAL_EARTH; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_ELEMENTAL_FIRE)) return IP_MATERIAL_ELEMENTAL_FIRE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_ELEMENTAL_WATER)) return IP_MATERIAL_ELEMENTAL_WATER; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM)) return IP_MATERIAL_GEM; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_ALEXANDRITE)) return IP_MATERIAL_GEM_ALEXANDRITE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_AMETHYST)) return IP_MATERIAL_GEM_AMETHYST; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_AVENTURINE)) return IP_MATERIAL_GEM_AVENTURINE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_BELJURIL)) return IP_MATERIAL_GEM_BELJURIL; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_BLOODSTONE)) return IP_MATERIAL_GEM_BLOODSTONE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_BLUE_DIAMOND)) return IP_MATERIAL_GEM_BLUE_DIAMOND; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_CANARY_DIAMOND)) return IP_MATERIAL_GEM_CANARY_DIAMOND; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_DIAMOND)) return IP_MATERIAL_GEM_DIAMOND; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_EMERALD)) return IP_MATERIAL_GEM_EMERALD; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_FIRE_AGATE)) return IP_MATERIAL_GEM_FIRE_AGATE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_FIRE_OPAL)) return IP_MATERIAL_GEM_FIRE_OPAL; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_FLUORSPAR)) return IP_MATERIAL_GEM_FLUORSPAR; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_GARNET)) return IP_MATERIAL_GEM_GARNET; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_GREENSTONE)) return IP_MATERIAL_GEM_GREENSTONE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_JACINTH)) return IP_MATERIAL_GEM_JACINTH; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_KINGS_TEAR)) return IP_MATERIAL_GEM_KINGS_TEAR; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_MALACHITE)) return IP_MATERIAL_GEM_MALACHITE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_OBSIDIAN)) return IP_MATERIAL_GEM_OBSIDIAN; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_PHENALOPE)) return IP_MATERIAL_GEM_PHENALOPE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_ROGUE_STONE)) return IP_MATERIAL_GEM_ROGUE_STONE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_RUBY)) return IP_MATERIAL_GEM_RUBY; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_SAPPHIRE)) return IP_MATERIAL_GEM_SAPPHIRE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_STAR_SAPPHIRE)) return IP_MATERIAL_GEM_STAR_SAPPHIRE; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_TOPAZ)) return IP_MATERIAL_GEM_TOPAZ; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_CRYSTAL_DEEP)) return IP_MATERIAL_GEM_CRYSTAL_DEEP; + else if( sMaterialName == GetStringUpperCase( IP_MATERIAL_NAME_GEM_CRYSTAL_MUNDANE)) return IP_MATERIAL_GEM_CRYSTAL_MUNDANE; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_PAPER)) return IP_MATERIAL_PAPER; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_GLASS)) return IP_MATERIAL_GLASS; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_ICE)) return IP_MATERIAL_ICE; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_ROPE_HEMP)) return IP_MATERIAL_ROPE_HEMP; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_STONE)) return IP_MATERIAL_STONE; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_DEEP_CORAL)) return IP_MATERIAL_DEEP_CORAL; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_WOOD_LIVING)) return IP_MATERIAL_WOOD_LIVING; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_OBDURIUM)) return IP_MATERIAL_OBDURIUM; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_WOOD_BRONZE)) return IP_MATERIAL_WOOD_BRONZE; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_BYESHK)) return IP_MATERIAL_BYESHK; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_CALOMEL)) return IP_MATERIAL_CALOMEL; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_CRYSTEEL_RIEDRAN)) return IP_MATERIAL_CRYSTEEL_RIEDRAN; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_DENSEWOOD)) return IP_MATERIAL_DENSEWOOD; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_DRAGONSHARD)) return IP_MATERIAL_DRAGONSHARD; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_IRON_FLAMETOUCHED)) return IP_MATERIAL_IRON_FLAMETOUCHED; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_LIVEWOOD)) return IP_MATERIAL_LIVEWOOD; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_MOURNLODE_PURPLE)) return IP_MATERIAL_MOURNLODE_PURPLE; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_SOARWOOD)) return IP_MATERIAL_SOARWOOD; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_TARGATH)) return IP_MATERIAL_TARGATH; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_ASTRAL_DRIFTMETAL)) return IP_MATERIAL_ASTRAL_DRIFTMETAL; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_ATANDUR)) return IP_MATERIAL_ATANDUR; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_BLENDED_QUARTZ)) return IP_MATERIAL_BLENDED_QUARTZ; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_CHITIN)) return IP_MATERIAL_CHITIN; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_DARKLEAF_ELVEN)) return IP_MATERIAL_DARKLEAF_ELVEN; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_DLARUN)) return IP_MATERIAL_DLARUN; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_DUSTWOOD)) return IP_MATERIAL_DUSTWOOD; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_ELUKIAN_CLAY)) return IP_MATERIAL_ELUKIAN_CLAY; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_ENTROPIUM)) return IP_MATERIAL_ENTROPIUM; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_GREENSTEEL_BAATORIAN)) return IP_MATERIAL_GREENSTEEL_BAATORIAN; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_HIZAGKUUR)) return IP_MATERIAL_HIZAGKUUR; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_IRON_FEVER)) return IP_MATERIAL_IRON_FEVER; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_IRON_GEHENNAN_MORGHUTH)) return IP_MATERIAL_IRON_GEHENNAN_MORGHUTH; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_LEAFWEAVE)) return IP_MATERIAL_LEAFWEAVE; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_LIVING_METAL)) return IP_MATERIAL_LIVING_METAL; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_MINDSTEEL_URDRUKAR)) return IP_MATERIAL_MINDSTEEL_URDRUKAR; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_TRUESTEEL_SOLANIAN)) return IP_MATERIAL_TRUESTEEL_SOLANIAN; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_WOOD_AGAFARI)) return IP_MATERIAL_WOOD_AGAFARI; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_CRYSTAL_DASL)) return IP_MATERIAL_CRYSTAL_DASL; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_DRAKE_IVORY)) return IP_MATERIAL_DRAKE_IVORY; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_ROPE_GIANT_HAIR)) return IP_MATERIAL_ROPE_GIANT_HAIR; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_OBSIDIAN)) return IP_MATERIAL_OBSIDIAN; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_BAMBOO)) return IP_MATERIAL_BAMBOO; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_POTTERY)) return IP_MATERIAL_POTTERY; + else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_GLASSTEEL)) return IP_MATERIAL_GLASSTEEL; + + return IP_MATERIAL_INVALID; +} + + +//:://///////////////////////////////////////////////////////////// +// string IPGetMaterialName( itemproperty ipMaterial, int bLowerCase = FALSE) +// Given an itempropety this function returns the material name of the property +// as a string if it is a material property. If the specified itemproperty is +// not a material property it returns IP_MATERIAL_NAME_INVALID. +//:://///////////////////////////////////////////////////////////// +// Parameters: itemproperty ipMaterial - the itemproperty to check +// int bLowerCase - if TRUE the returned name is all lower case +// if FALSE the returned name is first letter cap +// +// Returns: the material name IP_MATERIAL_NAME_* of the material itemproperty +// or IP_MATERIAL_NAME_INVALID if the itemproperty is not a material +// itemproperty or is an invalid itemproperty. +//:://///////////////////////////////////////////////////////////// +string IPGetMaterialName( itemproperty ipMaterial, int bLowerCase = FALSE); +string IPGetMaterialName( itemproperty ipMaterial, int bLowerCase = FALSE) +{ + int iType = GetItemPropertyType( ipMaterial); + int iMaterial = GetItemPropertyCostTableValue( ipMaterial); + if( !GetIsItemPropertyValid( ipMaterial) || (iType != ITEM_PROPERTY_MATERIAL) || (iMaterial < IP_MATERIAL_UNKNOWN) || (iMaterial > IP_NUM_MATERIALS)) return IP_MATERIAL_NAME_INVALID; + + return GetMaterialName( iMaterial, bLowerCase); +} + + +//:://///////////////////////////////////////////////////////////// +// int IPGetMaterialType( itemproperty ipMaterial) +// Given an itempropety this function returns the material type of the property +// if it is a material itemproperty. If the specified itemproperty is invalid or +// not a material property it returns IP_MATERIAL_INVALID. +//:://///////////////////////////////////////////////////////////// +// Parameters: itemproperty ipMaterial - the itemproperty to check +// +// Returns: the material type IP_MATERIAL_* of the material itemproperty or +// IP_MATERIAL_INVALID if the itemproperty is not a material itemproperty +// or is an invalid itemproperty. +//:://///////////////////////////////////////////////////////////// +int IPGetMaterialType( itemproperty ipMaterial); +int IPGetMaterialType( itemproperty ipMaterial) +{ + int iType = GetItemPropertyType( ipMaterial); + int iMaterial = GetItemPropertyCostTableValue( ipMaterial); + if( !GetIsItemPropertyValid( ipMaterial) || (iType != ITEM_PROPERTY_MATERIAL) || (iMaterial < IP_MATERIAL_UNKNOWN) || (iMaterial > IP_NUM_MATERIALS)) return IP_MATERIAL_INVALID; + return (((iMaterial > IP_MATERIAL_INVALID) && (iMaterial <= IP_NUM_MATERIALS)) ? iMaterial : IP_MATERIAL_INVALID); +} + + +//:://///////////////////////////////////////////////////////////// +// itemproperty ItemPropertyMaterialByName( string sMaterialName) +// Given a valid material name this function returns a new material itemproperty of +// that type or and invalid itemproperty if the material name is not recognized. +//:://///////////////////////////////////////////////////////////// +// Parameters: string sMaterialName - the material name IP_MATERIAL_NAME_* +// +// Returns: a material itemproperty or an invalid itempropery if the specified +// material name is unrecognized. +//:://///////////////////////////////////////////////////////////// +itemproperty ItemPropertyMaterialByName( string sMaterialName); +itemproperty ItemPropertyMaterialByName( string sMaterialName) +{ + return ItemPropertyMaterial( GetIPMaterial( sMaterialName)); +} + + +//:://///////////////////////////////////////////////////////////// +// void IPAddMaterialProperty( int iMaterialType, int nDurationType, object oItem, float fDuration = 0.0f) +// Adds a material itempropery specified by material type to an item for a +// given duration type and duration. +//:://///////////////////////////////////////////////////////////// +// Parameters: int iMaterialType - the material type IP_MATERIAL_* +// int nDurationType - the duration type +// DURATION_TYPE_TEMPORARY, must also supply a duration +// DURATION_TYPE_PERMANENT, duration is ignored +// object oItem - the item to add the itempropery to. +// float fDuration - the duration in seconds that the itemproperty +// will stay on the item before being automatically +// removed. Ignored if duration type is permanent. +// Default = 0.0 seconds. +// +// Returns: none. Note this does not check to see if the material property already +// exists on the item and can add duplicate material properties to it. +//:://///////////////////////////////////////////////////////////// +void IPAddMaterialProperty( int iMaterialType, int nDurationType, object oItem, float fDuration = 0.0f); +void IPAddMaterialProperty( int iMaterialType, int nDurationType, object oItem, float fDuration = 0.0f) +{ + itemproperty ipMaterial = ItemPropertyMaterial( iMaterialType); + if( GetIsItemPropertyValid( ipMaterial)) AddItemProperty( nDurationType, ipMaterial, oItem, fDuration); +} + + +//:://///////////////////////////////////////////////////////////// +// void IPAddMaterialPropertyByName( string sMaterialName, int nDurationType, object oItem, float fDuration = 0.0f) +// Adds a material itempropery specified by material name to an item for a +// given duration type and duration. +//:://///////////////////////////////////////////////////////////// +// Parameters: string sMaterialName - the material name IP_MATERIAL_NAME_* +// int nDurationType - the duration type +// DURATION_TYPE_TEMPORARY, must also supply a duration +// DURATION_TYPE_PERMANENT, duration is ignored +// object oItem - the item to add the itempropery to. +// float fDuration - the duration in seconds that the itemproperty +// will stay on the item before being automatically +// removed. Ignored if duration type is permanent. +// Default = 0.0 seconds. +// +// Returns: none. Note this does not check to see if the material property already +// exists on the item and can add duplicate material properties to it. +//:://///////////////////////////////////////////////////////////// +void IPAddMaterialPropertyByName( string sMaterialName, int nDurationType, object oItem, float fDuration = 0.0f); +void IPAddMaterialPropertyByName( string sMaterialName, int nDurationType, object oItem, float fDuration = 0.0f) +{ + IPAddMaterialProperty( GetIPMaterial( sMaterialName), nDurationType, oItem, fDuration); +} + + +//:://///////////////////////////////////////////////////////////// +// void IPSafeAddMaterialProperty( int iMaterialType, object oItem, float fDuration = 0.0f, int nAddItemPropertyPolicy = X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, int bIgnoreDurationType = FALSE, int bIgnoreSubType = FALSE) +// Adds a material itempropery specified by material type to an item for a +// given duration. Checks to see if a material itemproperty of the same type +// already exists on the item and adds the new one based on the add/drop policy +// and ignore parameters specified. +//:://///////////////////////////////////////////////////////////// +// Parameters: int iMaterialType - the material type IP_MATERIAL_* +// object oItem - the item to add the itempropery to. +// float fDuration - 0.0 for permanent, anything else is temporary +// Default = 0.0 +// int nAddItemPropertyPolicy - the add/drop policy to use X2_IP_ADDPROP_POLICY_* +// Default = X2_IP_ADDPROP_POLICY_REPLACE_EXISTING +// int bIgnoreDurationType - TRUE or FALSE to ignore existing itemproperty duration types. +// Default = FALSE +// int bIgnoreSubType - TRUE or FALSE to ignore existing itemproperty subtypes +// Default = FALSE +// +// Returns: none. +//:://///////////////////////////////////////////////////////////// +void IPSafeAddMaterialProperty( int iMaterialType, object oItem, float fDuration = 0.0f, int nAddItemPropertyPolicy = X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, int bIgnoreDurationType = FALSE, int bIgnoreSubType = FALSE); +void IPSafeAddMaterialProperty( int iMaterialType, object oItem, float fDuration = 0.0f, int nAddItemPropertyPolicy = X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, int bIgnoreDurationType = FALSE, int bIgnoreSubType = FALSE) +{ + itemproperty ipMaterial = ItemPropertyMaterial( iMaterialType); + if( GetIsItemPropertyValid( ipMaterial)) IPSafeAddItemProperty( oItem, ipMaterial, fDuration, nAddItemPropertyPolicy, bIgnoreDurationType, bIgnoreSubType); +} + + +//:://///////////////////////////////////////////////////////////// +// void IPSafeAddMaterialPropertyByName( string sMaterialName, object oItem, float fDuration = 0.0f, int nAddItemPropertyPolicy = X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, int bIgnoreDurationType = FALSE, int bIgnoreSubType = FALSE) +// Adds a material itempropery specified by material name to an item for a +// given duration. Checks to see if a material itemproperty of the same type +// already exists on the item and adds the new one based on the add/drop policy +// and ignore parameters specified. +//:://///////////////////////////////////////////////////////////// +// Parameters: string sMaterialName - the material name IP_MATERIAL_NAME_* +// object oItem - the item to add the itempropery to. +// float fDuration - 0.0 for permanent, anything else is temporary +// Default = 0.0 +// int nAddItemPropertyPolicy - the add/drop policy to use X2_IP_ADDPROP_POLICY_* +// Default = X2_IP_ADDPROP_POLICY_REPLACE_EXISTING +// int bIgnoreDurationType - TRUE or FALSE to ignore existing itemproperty duration types. +// Default = FALSE +// int bIgnoreSubType - TRUE or FALSE to ignore existing itemproperty subtypes +// Default = FALSE +// +// Returns: none. +//:://///////////////////////////////////////////////////////////// +void IPSafeAddMaterialPropertyByName( string sMaterialName, object oItem, float fDuration = 0.0f, int nAddItemPropertyPolicy = X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, int bIgnoreDurationType = FALSE, int bIgnoreSubType = FALSE); +void IPSafeAddMaterialPropertyByName( string sMaterialName, object oItem, float fDuration = 0.0f, int nAddItemPropertyPolicy = X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, int bIgnoreDurationType = FALSE, int bIgnoreSubType = FALSE) +{ + IPSafeAddMaterialProperty( GetIPMaterial( sMaterialName), oItem, fDuration, nAddItemPropertyPolicy, bIgnoreDurationType, bIgnoreSubType); +} + + +//:://///////////////////////////////////////////////////////////// +// int GetItemHasMaterial( object oItem, int iMaterialType) +// Given a valid item and material type, this function returns TRUE if the +// item has an itemproperty of the specified type on it. +//:://///////////////////////////////////////////////////////////// +// Parameters: object oItem - the item to check. +// int iMaterialType - the material type to check for IP_MATERIAL_* +// +// Returns: TRUE if the item is a valid item and has a material itemproperty of +// the specified type on it. FALSE otherwise. +//:://///////////////////////////////////////////////////////////// +int GetItemHasMaterial( object oItem, int iMaterialType); +int GetItemHasMaterial( object oItem, int iMaterialType) +{ + if( !GetIsObjectValid( oItem) || (GetObjectType( oItem) != OBJECT_TYPE_ITEM) || + (iMaterialType <= IP_MATERIAL_INVALID) || (iMaterialType > IP_NUM_MATERIALS)) return FALSE; + + itemproperty ipMaterial = GetFirstItemProperty( oItem); + while( GetIsItemPropertyValid( ipMaterial)) + { + if( IPGetMaterialType( ipMaterial) == iMaterialType) return TRUE; + ipMaterial = GetNextItemProperty( oItem); + } + + return FALSE; +} + + +//:://///////////////////////////////////////////////////////////// +// int GetItemHasMaterialByName( object oItem, string sMaterialName) +// Given a valid item and material name, this function returns TRUE if the +// item has an itemproperty of the specified type on it. +//:://///////////////////////////////////////////////////////////// +// Parameters: object oItem - the item to check. +// string sMaterialName - the material Name to check for IP_MATERIAL_NAME_* +// +// Returns: TRUE if the item is a valid item and has a material itemproperty of +// the specified type on it. FALSE otherwise. +//:://///////////////////////////////////////////////////////////// +int GetItemHasMaterialByName( object oItem, string sMaterialName); +int GetItemHasMaterialByName( object oItem, string sMaterialName) +{ + return GetItemHasMaterial( oItem, GetIPMaterial( sMaterialName)); +} + + //:: Returns the general type of material nMaterial is. +int GetMaterialType(int nMaterial); +int GetMaterialType(int nMaterial) +{ + if ( nMaterial == IP_MATERIAL_INVALID ) + return MATERIAL_TYPE_INVALID; + + else if ( nMaterial == IP_MATERIAL_BONE + || nMaterial == IP_MATERIAL_SCALE + || nMaterial == IP_MATERIAL_CHITIN + || nMaterial == IP_MATERIAL_DRAKE_IVORY ) + return MATERIAL_TYPE_BONE; + + else if ( nMaterial == IP_MATERIAL_ELUKIAN_CLAY + || nMaterial == IP_MATERIAL_POTTERY ) + return MATERIAL_TYPE_CERAMIC; + + else if ( nMaterial == IP_MATERIAL_CLOTH + || nMaterial == IP_MATERIAL_COTTON + || nMaterial == IP_MATERIAL_SILK + || nMaterial == IP_MATERIAL_WOOL ) + return MATERIAL_TYPE_FABRIC; + + else if ( nMaterial == IP_MATERIAL_GEM + || nMaterial == IP_MATERIAL_GEM_ALEXANDRITE + || nMaterial == IP_MATERIAL_GEM_AMETHYST + || nMaterial == IP_MATERIAL_GEM_AVENTURINE + || nMaterial == IP_MATERIAL_GEM_BELJURIL + || nMaterial == IP_MATERIAL_GEM_BLOODSTONE + || nMaterial == IP_MATERIAL_GEM_BLUE_DIAMOND + || nMaterial == IP_MATERIAL_GEM_CANARY_DIAMOND + || nMaterial == IP_MATERIAL_GEM_DIAMOND + || nMaterial == IP_MATERIAL_GEM_EMERALD + || nMaterial == IP_MATERIAL_GEM_FIRE_AGATE + || nMaterial == IP_MATERIAL_GEM_FIRE_OPAL + || nMaterial == IP_MATERIAL_GEM_FLUORSPAR + || nMaterial == IP_MATERIAL_GEM_GARNET + || nMaterial == IP_MATERIAL_GEM_GREENSTONE + || nMaterial == IP_MATERIAL_GEM_JACINTH + || nMaterial == IP_MATERIAL_GEM_KINGS_TEAR + || nMaterial == IP_MATERIAL_GEM_MALACHITE + || nMaterial == IP_MATERIAL_GEM_OBSIDIAN + || nMaterial == IP_MATERIAL_GEM_PHENALOPE + || nMaterial == IP_MATERIAL_GEM_ROGUE_STONE + || nMaterial == IP_MATERIAL_GEM_RUBY + || nMaterial == IP_MATERIAL_GEM_SAPPHIRE + || nMaterial == IP_MATERIAL_GEM_STAR_SAPPHIRE + || nMaterial == IP_MATERIAL_GEM_TOPAZ + || nMaterial == IP_MATERIAL_GEM_CRYSTAL_DEEP + || nMaterial == IP_MATERIAL_GEM_CRYSTAL_MUNDANE + || nMaterial == IP_MATERIAL_GLASS + || nMaterial == IP_MATERIAL_ICE + || nMaterial == IP_MATERIAL_CRYSTAL_DASL + || nMaterial == IP_MATERIAL_OBSIDIAN + || nMaterial == IP_MATERIAL_GLASSTEEL) + return MATERIAL_TYPE_CRYSTAL; + + else if ( nMaterial == IP_MATERIAL_HIDE + || nMaterial == IP_MATERIAL_HIDE_SALAMANDER + || nMaterial == IP_MATERIAL_HIDE_UMBER_HULK + || nMaterial == IP_MATERIAL_HIDE_WYVERN + || nMaterial == IP_MATERIAL_HIDE_DRAGON_BLACK + || nMaterial == IP_MATERIAL_HIDE_DRAGON_BLUE + || nMaterial == IP_MATERIAL_HIDE_DRAGON_BRASS + || nMaterial == IP_MATERIAL_HIDE_DRAGON_BRONZE + || nMaterial == IP_MATERIAL_HIDE_DRAGON_COPPER + || nMaterial == IP_MATERIAL_HIDE_DRAGON_GOLD + || nMaterial == IP_MATERIAL_HIDE_DRAGON_GREEN + || nMaterial == IP_MATERIAL_HIDE_DRAGON_RED + || nMaterial == IP_MATERIAL_HIDE_DRAGON_SILVER + || nMaterial == IP_MATERIAL_HIDE_DRAGON_WHITE + || nMaterial == IP_MATERIAL_LEATHER + || nMaterial == IP_MATERIAL_LEAFWEAVE ) + return MATERIAL_TYPE_LEATHER; + + else if ( nMaterial == IP_MATERIAL_ADAMANTINE + || nMaterial == IP_MATERIAL_BRASS + || nMaterial == IP_MATERIAL_COLD_IRON + || nMaterial == IP_MATERIAL_DARKSTEEL + || nMaterial == IP_MATERIAL_MITHRAL + || nMaterial == IP_MATERIAL_SILVER_ALCHEMICAL + || nMaterial == IP_MATERIAL_STEEL + || nMaterial == IP_MATERIAL_BYESHK + || nMaterial == IP_MATERIAL_CALOMEL + || nMaterial == IP_MATERIAL_CRYSTEEL_RIEDRAN + || nMaterial == IP_MATERIAL_IRON_FLAMETOUCHED + || nMaterial == IP_MATERIAL_MOURNLODE_PURPLE + || nMaterial == IP_MATERIAL_TARGATH + || nMaterial == IP_MATERIAL_ASTRAL_DRIFTMETAL + || nMaterial == IP_MATERIAL_ATANDUR + || nMaterial == IP_MATERIAL_BLENDED_QUARTZ + || nMaterial == IP_MATERIAL_DLARUN + || nMaterial == IP_MATERIAL_ENTROPIUM + || nMaterial == IP_MATERIAL_GREENSTEEL_BAATORIAN + || nMaterial == IP_MATERIAL_HIZAGKUUR + || nMaterial == IP_MATERIAL_IRON_FEVER + || nMaterial == IP_MATERIAL_IRON_GEHENNAN_MORGHUTH + || nMaterial == IP_MATERIAL_LIVING_METAL + || nMaterial == IP_MATERIAL_MINDSTEEL_URDRUKAR + || nMaterial == IP_MATERIAL_TRUESTEEL_SOLANIAN + || nMaterial == IP_MATERIAL_BRONZE + || nMaterial == IP_MATERIAL_COPPER + || nMaterial == IP_MATERIAL_GOLD + || nMaterial == IP_MATERIAL_IRON + || nMaterial == IP_MATERIAL_LEAD + || nMaterial == IP_MATERIAL_PLATINUM + || nMaterial == IP_MATERIAL_SILVER + || nMaterial == IP_MATERIAL_OBDURIUM ) + return MATERIAL_TYPE_METAL; + + else if ( nMaterial == IP_MATERIAL_PAPER ) + return MATERIAL_TYPE_PAPER; + + else if ( nMaterial == IP_MATERIAL_ROPE_HEMP + || nMaterial == IP_MATERIAL_ROPE_GIANT_HAIR ) + return MATERIAL_TYPE_ROPE; + + else if ( nMaterial == IP_MATERIAL_CARBON + || nMaterial == IP_MATERIAL_ELEMENTAL + || nMaterial == IP_MATERIAL_ELEMENTAL_AIR + || nMaterial == IP_MATERIAL_ELEMENTAL_EARTH + || nMaterial == IP_MATERIAL_ELEMENTAL_FIRE + || nMaterial == IP_MATERIAL_ELEMENTAL_WATER + || nMaterial == IP_MATERIAL_STONE + || nMaterial == IP_MATERIAL_DEEP_CORAL + || nMaterial == IP_MATERIAL_DRAGONSHARD ) + return MATERIAL_TYPE_STONE; + + else if ( nMaterial == IP_MATERIAL_WOOD + || nMaterial == IP_MATERIAL_WOOD_IRONWOOD + || nMaterial == IP_MATERIAL_WOOD_DUSKWOOD + || nMaterial == IP_MATERIAL_WOOD_DARKWOOD_ZALANTAR + || nMaterial == IP_MATERIAL_WOOD_ASH + || nMaterial == IP_MATERIAL_WOOD_YEW + || nMaterial == IP_MATERIAL_WOOD_OAK + || nMaterial == IP_MATERIAL_WOOD_PINE + || nMaterial == IP_MATERIAL_WOOD_CEDAR + || nMaterial == IP_MATERIAL_WOOD_LIVING + || nMaterial == IP_MATERIAL_WOOD_BRONZE + || nMaterial == IP_MATERIAL_DENSEWOOD + || nMaterial == IP_MATERIAL_LIVEWOOD + || nMaterial == IP_MATERIAL_SOARWOOD + || nMaterial == IP_MATERIAL_DARKLEAF_ELVEN + || nMaterial == IP_MATERIAL_DUSTWOOD + || nMaterial == IP_MATERIAL_WOOD_AGAFARI + || nMaterial == IP_MATERIAL_BAMBOO ) + return MATERIAL_TYPE_WOOD; + + else { return MATERIAL_TYPE_UNKNOWN; } +} + + //:: Returns the name of nMaterialType as a string. +string GetMaterialTypeName(int nMaterialType, int bLowerCase = FALSE); +string GetMaterialTypeName(int nMaterialType, int bLowerCase = FALSE) +{ + string sName; + + sName = Get2DACache("prc_materialtype", "Name", nMaterialType); + + if (sName == "") + sName = "Invalid"; + + return (bLowerCase ? GetStringLowerCase( sName) : sName); +} + +//:: Returns the Hardness of a material. +int GetIPMaterialHardness(int nMaterial); +int GetIPMaterialHardness(int nMaterial) +{ + int nHardness; + nHardness = StringToInt(Get2DACache("prc_material", "Hardness", nMaterial)); + + if (nHardness < 0) + nHardness = 1000; + + return nHardness; +} + +//:: Returns the Hit Points Per Inch of a material. +int GetIPMaterialHitPointMod(int nMaterial); +int GetIPMaterialHitPointMod(int nMaterial) +{ + int nHPMod; + nHPMod = StringToInt(Get2DACache("prc_material", "HitPointsPerInch", nMaterial)); + + if (nHPMod < 1) + nHPMod = 1000; + + return nHPMod; +} + + + +//:: void main(){} diff --git a/src/include/prc_inc_nat_hb.nss b/src/include/prc_inc_nat_hb.nss new file mode 100644 index 0000000..c8f7c27 --- /dev/null +++ b/src/include/prc_inc_nat_hb.nss @@ -0,0 +1,470 @@ +void DoNaturalWeaponHB(object oPC = OBJECT_SELF); + +#include "prc_inc_combat" +#include "prc_inc_template" + +object GetProperTarget(object oPC, object oTarget) +{ + location lTarget = GetLocation(oPC); + // Use the function to get the closest creature as a target + object oAreaTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, lTarget, TRUE, OBJECT_TYPE_CREATURE); + while(GetIsObjectValid(oAreaTarget)) + { + if(oAreaTarget != oPC && // Not you. + GetIsEnemy(oPC, oAreaTarget) && // Enemies only, please + GetIsInMeleeRange(oPC, oAreaTarget)) // They must be in melee range + { + return oAreaTarget; + } + //Select the next target within the spell shape. + oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, lTarget, TRUE, OBJECT_TYPE_CREATURE); + } + + return oTarget; +} + +void DoNaturalAttack(object oWeapon) +{ + //if weapon is not valid, abort + if(!GetIsObjectValid(oWeapon)) + return; + + // object oTarget = GetAttackTarget(); + object oTarget = GetAttemptedAttackTarget(); + + // motu99: The following checks should be made by PerformAttack(), so they are somewhat redundant + + /* + //no point attacking plot + if(GetPlotFlag(oTarget)) + return; + */ + if (DEBUG) DoDebug("DoNaturalAttack oTarget1 "+GetName(oTarget)); + object oPC = OBJECT_SELF; + + // Make sure you don't hit yourself. Some idiot didn't check that. + if (GetIsFriend(oPC, oTarget) || oPC == oTarget) + oTarget = GetProperTarget(oPC, oTarget); + + if (DEBUG) DoDebug("DoNaturalAttack oTarget2 "+GetName(oTarget)); + + // if not melee/ranged fighting, abort + if (!GetIsObjectValid(oTarget)) + return; + + // natural attacks are (usually) not ranged attacks, so PerformAttack() will move to a target, if it is out of melee range + // However, we do not want to run to the target if we are in the midst of doing ranged attacks, e.g. if we have a ranged + // weapon equipped (and are still out of melee range, so we can effectively do ranged attacks) + // so check for a ranged weapon in the right hand slot and abort if we have one and are out of melee range + object oWeaponR = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + if(GetIsObjectValid(oWeaponR) + && GetIsRangedWeaponType(GetBaseItemType(oWeaponR)) + && !GetIsInMeleeRange(oTarget, oPC)) + return; + /* + //if not fighting, abort + // motu99: PRCGetIsFighting() not only checks. whether GetAttemptedAttackTarget() (relevant for melee attacks) returns a valid object + // it also checks whether we have attempted to attack a valid target with a spell + // but spell attacks don't make sense for natural attacks (which are pure melee), so commented out + if(!PRCGetIsFighting(oPC)) + { + DoDebug(COLOR_WHITE + "DoNaturalAttack(): not fighting any more - aborting"); + return; + } + */ + + //null effect + effect eInvalid; + string sMessageSuccess; + string sMessageFailure; + if(DEBUG) + { + sMessageSuccess += GetName(oWeapon); + //add attack + sMessageSuccess += " natural attack"; + //copy it to failure + sMessageFailure = sMessageSuccess; + //add hit/miss + sMessageSuccess += " hit"; + sMessageFailure += " miss"; + //add stars around messages + sMessageSuccess = "*"+sMessageSuccess+"*"; + sMessageFailure = "*"+sMessageFailure+"*"; + } + + //secondary attacks are -5 to hit + int nAttackMod = -5; + if (GetHasTemplate(TEMPLATE_GRAVETOUCHED_GHOUL, oPC)) nAttackMod = -2; // This is a standin for multiattack + /* + //check for (Improved) Multiattack + if(GetHasFeat(FEAT_IMPROVED_MULTIATTACK, oPC)) + nAttackMod = 0; + else if(GetHasFeat(FEAT_MULTIATTACK, oPC)) + nAttackMod = -2; + */ + //secondary attacks are half strength (we use offhand for this) + + // set the prc combat mode + int bCombatMode = PRC_COMBATMODE_HB & PRC_COMBATMODE_ALLOW_TARGETSWITCH & PRC_COMBATMODE_ABORT_WHEN_OUT_OF_RANGE; + + int nEssentia = GetEssentiaInvested(oPC, MELD_GIRALLON_ARMS); + if (nEssentia) IPSafeAddItemProperty(oWeapon, ItemPropertyEnhancementBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE); + int nStrHalf = GetAbilityModifier(ABILITY_STRENGTH, oPC)/2; + nStrHalf = nStrHalf * -1; + + if(DEBUG) DoDebug(PRC_TEXT_WHITE + "initiating a secondary natural attack with "+GetName(oWeapon)+", attack mod " + IntToString(nAttackMod) + ", nStrHalf " + IntToString(nStrHalf)); + + PerformAttack(oTarget, + oPC, // + eInvalid, //effect eSpecialEffect, + 0.0, //float eDuration = 0.0 + nAttackMod, //int iAttackBonusMod = 0 + nStrHalf, //int iDamageModifier = Half strength + DAMAGE_TYPE_SLASHING, //int iDamageType = DAMAGE_TYPE_SLASHING, otherwise it uses magical damage. + sMessageSuccess, //sMessageSuccess + sMessageFailure, //sMessageFailure + FALSE, //int iTouchAttackType = FALSE + oWeaponR, // we should have something in the right hand (might need it for some calculations) + oWeapon, // we put the creature weapon in the left hand slot + FALSE, //offhand override (for half strength) + bCombatMode // prc scripted combat mode + ); +} + +void DoOffhandAttack(int nAttackMod) +{ + object oPC = OBJECT_SELF; + object oWeapon = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC); + + + // check for offhand or double sided weapon, if not - return + if (!GetIsOffhandWeapon(oWeapon)) + { + object oWeaponR = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + if (!GetIsDoubleSidedWeapon(oWeaponR)) + return; + oWeapon = oWeaponR; + } + + // object oTarget = GetAttackTarget(); + object oTarget = GetAttemptedAttackTarget(); + + // motu99: The following checks should be made by PerformAttack(), so they are somewhat redundant + /* + //no point attacking plot + if(GetPlotFlag(oTarget)) + return; + */ + // Make sure you don't hit yourself. Some idiot didn't check that. + if (GetIsFriend(oPC, oTarget) || oPC == oTarget) + oTarget = GetProperTarget(oPC, oTarget); + + // if not melee fighting, abort + if (!GetIsObjectValid(oTarget)) + return; + + /* + //if not fighting, abort + if(!PRCGetIsFighting(oPC)) + { + DoDebug(COLOR_WHITE + "DoOffhandAttack(): not fighting any more - aborting"); + return; + } + */ + string sMessageSuccess; + string sMessageFailure; + if (DEBUG) + { + sMessageSuccess += GetName(oWeapon); + //add attack + sMessageSuccess += " scripted offhand"; + //copy it to failure + sMessageFailure = sMessageSuccess; + //add hit/miss + sMessageSuccess += " hit"; + sMessageFailure += " miss"; + //add stars around messages + sMessageSuccess = "*"+sMessageSuccess+"*"; + sMessageFailure = "*"+sMessageFailure+"*"; + } + + //null effect + effect eInvalid; + + // set the prc combat mode + int bCombatMode = PRC_COMBATMODE_HB & PRC_COMBATMODE_ALLOW_TARGETSWITCH & PRC_COMBATMODE_ABORT_WHEN_OUT_OF_RANGE; + + if (DEBUG) DoDebug(PRC_TEXT_WHITE + "initiating an overflow offhand attack with "+GetName(oWeapon)+" and attack mod "+IntToString(nAttackMod)); + + PerformAttack(oTarget, + oPC, // + eInvalid, //effect eSpecialEffect, + 0.0, //float eDuration = 0.0 + nAttackMod, //int iAttackBonusMod = 0 + 0, //int iDamageModifier = 0 + DAMAGE_TYPE_SLASHING, //int iDamageType = DAMAGE_TYPE_SLASHING, otherwise it uses magical damage. + sMessageSuccess, //sMessageSuccess, //string sMessageSuccess = "" + sMessageFailure, //sMessageFailure, //string sMessageFailure = "" + FALSE, //int iTouchAttackType = FALSE + oWeapon, //object oRightHandOverride = OBJECT_INVALID, + oWeapon, //object oLeftHandOverride = OBJECT_INVALID, + 1, // offhand attack + bCombatMode // prc combat mode + ); +} + +void DoOverflowOnhandAttack(int nAttackMod) +{ + object oPC = OBJECT_SELF; + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + + //if weapon is not valid, abort + if(!GetIsObjectValid(oWeapon)) + return; + + // object oTarget = GetAttackTarget(); + object oTarget = GetAttemptedAttackTarget(); + + // motu99: The following checks should be made by PerformAttack(), so they are somewhat redundant + /* + //no point attacking plot + if(GetPlotFlag(oTarget)) + return; + */ + // Make sure you don't hit yourself. Some idiot didn't check that. + if (GetIsFriend(oPC, oTarget) || oPC == oTarget) + oTarget = GetProperTarget(oPC, oTarget); + + // if not melee fighting, abort + if (!GetIsObjectValid(oTarget)) + return; + + /* + //if not fighting, abort + if(!PRCGetIsFighting(oPC)) + { + DoDebug(COLOR_WHITE + "DoOverflowOnhandAttack(): not fighting any more - aborting"); + return; + } + */ + string sMessageSuccess; + string sMessageFailure; + if (DEBUG) + { + sMessageSuccess += GetName(oWeapon); + //add attack + sMessageSuccess += " scripted overflow"; + //copy it to failure + sMessageFailure = sMessageSuccess; + //add hit/miss + sMessageSuccess += " hit"; + sMessageFailure += " miss"; + //add stars around messages + sMessageSuccess = "*"+sMessageSuccess+"*"; + sMessageFailure = "*"+sMessageFailure+"*"; + } + + //null effect + effect eInvalid; + + // set the prc combat mode + int bCombatMode = PRC_COMBATMODE_HB & PRC_COMBATMODE_ALLOW_TARGETSWITCH & PRC_COMBATMODE_ABORT_WHEN_OUT_OF_RANGE; + + if (DEBUG) DoDebug(PRC_TEXT_WHITE+"initiating an overflow onhand attack with "+GetName(oWeapon)+" and attack mod "+IntToString(nAttackMod)); + + PerformAttack(oTarget, + oPC, // + eInvalid, //effect eSpecialEffect, + 0.0, //float eDuration = 0.0 + nAttackMod, //int iAttackBonusMod = 0 + 0, //int iDamageModifier = 0 + DAMAGE_TYPE_SLASHING, //int iDamageType = DAMAGE_TYPE_SLASHING, otherwise it uses magical damage. + sMessageSuccess,//sMessageSuccess, //string sMessageSuccess = "" + sMessageFailure,//sMessageFailure, //string sMessageFailure = "" + FALSE, //int iTouchAttackType = FALSE + oWeapon, //object oRightHandOverride = OBJECT_INVALID, + OBJECT_INVALID, //object oLeftHandOverride = OBJECT_INVALID + 0, + bCombatMode + ); +} + +void DoNaturalWeaponHB(object oPC = OBJECT_SELF) +{ + //not in combat, abort + if(!GetIsInCombat(oPC)) + return; + +// if(DEBUG) DoDebug("entered DoNaturalWeaponHB"); + + float fDelay = 0.1 + IntToFloat(Random(10))/100.0; + + //no natural weapons, abort + //in a different form, abort for now fix it later + if(array_exists(oPC, ARRAY_NAT_SEC_WEAP_RESREF) + && !GetIsPolyMorphedOrShifted(oPC)) + { + // DoDebug("DoNaturalWeaponHB: creature has natural secondary weapons"); + UpdateSecondaryWeaponSizes(oPC); + int i; + while(i < array_get_size(oPC, ARRAY_NAT_SEC_WEAP_RESREF)) + { + //get the resref to use + string sResRef = array_get_string(oPC, ARRAY_NAT_SEC_WEAP_RESREF, i); + //if null, move to next + if(sResRef != "") + { + //get the created item + object oWeapon = GetObjectByTag(sResRef); + if(!GetIsObjectValid(oWeapon)) + { + object oLimbo = GetObjectByTag("HEARTOFCHAOS"); + location lLimbo = GetLocation(oLimbo); + if(!GetIsObjectValid(oLimbo)) + lLimbo = GetStartingLocation(); + oWeapon = CreateObject(OBJECT_TYPE_ITEM, sResRef, lLimbo); + } + + // DoDebug(COLOR_WHITE + "DoNaturalWeaponHB: scheduling a secondary natural attack with "+GetName(oWeapon)+" at delay "+FloatToString(fDelay)); + //do the attack within a delay + /* + // motu99: commented this out; AssignCommand ist not needed, because OBJECT_SELF is oPC - using AssignCommand will only degrade performance + AssignCommand(oPC, DelayCommand(fDelay, DoNaturalAttack(oWeapon))); + */ + + DelayCommand(fDelay, DoNaturalAttack(oWeapon)); + + //calculate the delay to use next time + fDelay += 2.05; + if(fDelay > 6.0) + fDelay -= 6.0; + } + i++; + } + } + + int iMod = 5; // motu99: added check for monk weapon + if(GetHasMonkWeaponEquipped(oPC)) iMod = 3; + + // check for overflow (main hand) attacks + int nOverflowAttackCount = GetLocalInt(oPC, "OverflowBaseAttackCount"); + if(nOverflowAttackCount) + { + int i; + // the first overflow attack would be the seventh main hand attack, at an AB of -30 + int nAttackPenalty = -6 * iMod; // -30 for normal bab, -18 for monks + // DoDebug("DoNaturalWeaponHB(): number of scripted overflow attacks: "+IntToString(nOverflowAttackCount)); + for(i = 0; i < nOverflowAttackCount; i++) + { + // DoDebug(COLOR_WHITE + "DoNaturalWeaponHB(): scheduling a scripted overflow attack with attack mod "+IntToString(nAttackPenalty)+" at delay "+FloatToString(fDelay)); + /* + // motu99: see comment above why this is commented out + AssignCommand(oPC, DelayCommand(fDelay, DoOverflowOnhandAttack(nAttackPenalty))); + */ + DelayCommand(fDelay, DoOverflowOnhandAttack(nAttackPenalty)); + + //calculate the delay to use + fDelay += 2.05; + if(fDelay > 6.0) + fDelay -= 6.0; + //calculate new attack penalty + nAttackPenalty -= iMod; // motu99: usually -5, for monks -3 (unarmed or kama) + } + } + + // motu99: this is only here for debugging in order to test PerformAttackRound() + // must be deleted after debugging!!! + //if (GetPRCSwitch(PRC_PNP_TRUESEEING)) DelayCommand(0.01, DoOffhandAttackRound()); + + + // check for overflow offhand attacks + int nOffhandAttackCount = GetLocalInt(oPC, "OffhandOverflowAttackCount"); +// if (DEBUG) DoDebug("DoNaturalWeaponHB: number of scripted offhand attacks = "+IntToString(nOffhandAttackCount)); + if(nOffhandAttackCount) + { + int i; + int nAttackPenalty = -2 * iMod; // offhand attacks always come at -5 per additional attack (but for monks we assume -3) + for(i = 0; i < nOffhandAttackCount; i++) + { + // DoDebug(COLOR_WHITE + "DoNaturalWeaponHB(): scheduling a scripted offhand attack with attack mod "+IntToString(nAttackPenalty)+" at delay "+FloatToString(fDelay)); + + DelayCommand(fDelay, DoOffhandAttack(nAttackPenalty)); + + //calculate the delay to use + fDelay += 2.05; + if(fDelay > 6.0) + fDelay -= 6.0; + //calculate new attack penalty + nAttackPenalty -= iMod; + } + } +} + +/* + * motu99's test functions. Not actually used by PRC scripts + */ + +// motu99: This is only for test purposes (in order to test PerformAttackRound()) +void DoOffhandAttackRound(object oPC = OBJECT_SELF) +{ + // object oTarget = GetAttackTarget(); + object oTarget = GetAttemptedAttackTarget(); + + // motu99: The following checks should be made by PerformAttack(), so they are somewhat redundant +/* + //no point attacking plot + if(GetPlotFlag(oTarget)) + return; +*/ + // if not melee fighting, abort + if (!GetIsObjectValid(oTarget)) + return; +/* + //if not fighting, abort + if(!PRCGetIsFighting(oPC)) + { + DoDebug(COLOR_WHITE + "DoOffhandAttack(): not fighting any more - aborting"); + return; + } +*/ + string sMessageSuccess; + string sMessageFailure; + if (DEBUG) + { +// sMessageSuccess += GetName(oWeapon); + //add attack +// sMessageSuccess += " scripted offhand"; + //copy it to failure +// sMessageFailure = sMessageSuccess; + //add hit/miss + sMessageSuccess += "s hit"; + sMessageFailure += "s miss"; + //add stars around messages + sMessageSuccess = "*"+sMessageSuccess+"*"; + sMessageFailure = "*"+sMessageFailure+"*"; + } + + //null effect + effect eInvalid; + + // set the prc combat mode + int bCombatMode = PRC_COMBATMODE_HB & PRC_COMBATMODE_ALLOW_TARGETSWITCH & PRC_COMBATMODE_ABORT_WHEN_OUT_OF_RANGE; + + DoDebug(PRC_TEXT_WHITE + "initiating an overflow offhand attack round"); + + PerformAttackRound(oTarget, // object oDefender + oPC, // object oAttacker, + eInvalid, // effect eSpecialEffect, + 0.0, // float eDuration = 0.0, + 0, // int iAttackBonusMod = 0, + 0, // int iDamageModifier = 0, + 0, // int iDamageType = 0, + TRUE, // int bEffectAllAttacks = FALSE, + sMessageSuccess, // string sMessageSuccess = "", + sMessageFailure, // string sMessageFailure = "", + 0, // int bApplyTouchToAll = FALSE, + 0, // int iTouchAttackType = FALSE, + 0, //int bInstantAttack = FALSE); + bCombatMode // CombatMode + ); +} diff --git a/src/include/prc_inc_natweap.nss b/src/include/prc_inc_natweap.nss new file mode 100644 index 0000000..8d3668b --- /dev/null +++ b/src/include/prc_inc_natweap.nss @@ -0,0 +1,425 @@ +/* + + prc_inc_natweap.nss + + Natural Weapon include + + This include controlls natural weapons. + These are different to unarmed weapons. + + From the SRD: + + Natural Weapons + + Natural weapons are weapons that are physically a part of a creature. A creature making a melee attack with + a natural weapon is considered armed and does not provoke attacks of opportunity. Likewise, it threatens any + space it can reach. Creatures do not receive additional attacks from a high base attack bonus when using + natural weapons. The number of attacks a creature can make with its natural weapons depends on the type of + the attackl generally, a creature can make one bite attack, one attack per claw or tentacle, one gore attack, + one sting attack, or one slam attack (although Large creatures with arms or arm-like limbs can make a slam + attack with each arm). Refer to the individual monster descriptions. + + Unless otherwise noted, a natural weapon threatens a critical hit on a natural attack roll of 20. + + When a creature has more than one natural weapon, one of them (or sometimes a pair or set of them) is the + primary weapon. All the creature’s remaining natural weapons are secondary. + + The primary weapon is given in the creature’s Attack entry, and the primary weapon or weapons is given first + in the creature’s Full Attack entry. A creature’s primary natural weapon is its most effective natural attack, + usually by virtue of the creature’s physiology, training, or innate talent with the weapon. An attack with a + primary natural weapon uses the creature’s full attack bonus. Attacks with secondary natural weapons are less + effective and are made with a -5 penalty on the attack roll, no matter how many there are. (Creatures with the + Multiattack feat take only a -2 penalty on secondary attacks.) This penalty applies even when the creature + makes a single attack with the secondary weapon as part of the attack action or as an attack of opportunity. + + Natural weapons have types just as other weapons do. The most common are summarized below. + + Bite + The creature attacks with its mouth, dealing piercing, slashing, and bludgeoning damage. + + Claw or Talon + The creature rips with a sharp appendage, dealing piercing and slashing damage. + + Gore + The creature spears the opponent with an antler, horn, or similar appendage, dealing piercing damage. + + Slap or Slam + The creature batters opponents with an appendage, dealing bludgeoning damage. + + Sting + The creature stabs with a stinger, dealing piercing damage. Sting attacks usually deal damage from poison in + addition to hit point damage. + + Tentacle + The creature flails at opponents with a powerful tentacle, dealing bludgeoning (and sometimes slashing) damage. + + The main differences are: + + *) There are primary and secondary natural weapons. + + *) Natural weapons do not get additional attacks at higher BAB + + *) Primary natural weapon is at full BAB with full str bonus + + *) Secondary natural weaponss are at -5 (or -2 with Multiattack, or no penalty for Improved Multiattack) + with half strength bonus + + *) If a creature has a weapon in its "hands", it may still use non-claw attacks. For example, a double axe + plus a bite. + + *) A creature with both natural claw weapons and unarmed attacks, for example a Monk Werewolf, can choose + to either use natural claw weapons or unarmed attacks, but not both. + + + Implementation notes: + + *) Primary natural weapons use the creature inventory slots so the animation works + + *) Secondary natural weapons use the heartbeat and the scripted combat engine + + *) Since bioware divides the 6 second combat round into 3 flurries, secondary weapons try to respect those + flurries. + + *) The target for secondary weapons GetAttackTarget() is used. + + *) Since initiative is hardcoded, we cant use that at all. Relies on heartbeat scripts instead. +*/ + +void AddNaturalSecondaryWeapon(object oPC, string sResRef, int nCount = 1); +int GetIsUsingPrimaryNaturalWeapons(object oPC); +void SetIsUsingPrimaryNaturalWeapons(object oPC, int nNatural); +void ClearNaturalWeapons(object oPC); +void UpdateSecondaryWeaponSizes(object oPC, int nSize = -1); +string GetAffixForSize(int nSize); +void SetPrimaryNaturalWeapon(object oPC, int nIndex); +void RemoveNaturalPrimaryWeapon(object oPC, string sResRef); +void NaturalSecondaryWeaponTempCheck(object oManifester, object oTarget, int nSpellID, + int nBeatsRemaining, string sResref); +void NaturalPrimaryWeaponTempCheck(object oManifester, object oTarget, int nSpellID, + int nBeatsRemaining, string sResref); + +//the name of the array that the resrefs of the natural weapons are stored in +const string ARRAY_NAT_SEC_WEAP_RESREF = "ARRAY_NAT_SEC_WEAP_RESREF"; +const string ARRAY_NAT_PRI_WEAP_RESREF = "ARRAY_NAT_PRI_WEAP_RESREF"; +const string ARRAY_NAT_PRI_WEAP_ATTACKS = "ARRAY_NAT_PRI_WEAP_ATTACKS"; +const string NATURAL_WEAPON_ATTACK_COUNT = "NATURAL_WEAPON_ATTACK_COUNT"; + +//#include "prc_alterations" + +#include "inc_utility" +#include "prc_inc_spells" + +string GetAffixForSize(int nSize) +{ + switch(nSize) + { + case CREATURE_SIZE_FINE: return "f"; + case CREATURE_SIZE_DIMINUTIVE: return "d"; + case CREATURE_SIZE_SMALL: return "s"; + case CREATURE_SIZE_MEDIUM: return "m"; + case CREATURE_SIZE_LARGE: return "l"; + case CREATURE_SIZE_HUGE: return "h"; + case CREATURE_SIZE_GARGANTUAN: return "g"; + case CREATURE_SIZE_COLOSSAL: return "c"; + default: return "l"; + } + return ""; +} + +void EquipNaturalWeaponCheck(object oPC, object oItem) +{ + if(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC) != oItem) + MyDestroyObject(oItem); + //else + // DelayCommand(10.0, + // EquipNaturalWeaponCheck(oPC, oItem)); +} + +object EquipNaturalWeapon(object oPC, string sResRef) +{ + object oObject = GetItemPossessedBy(oPC, sResRef); + if (DEBUG) DoDebug("EquipNaturalWeapon Step #1 ResRef "+sResRef); + if(GetIsObjectValid(oObject)) + { + if(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC) == oObject) + return oObject; + + MyDestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC)); + } + else + { + oObject = CreateItemOnObject(sResRef, oPC); + SetIdentified(oObject, TRUE); + } + if (DEBUG) DoDebug("EquipNaturalWeapon Step #2"); + ForceEquip(oPC, oObject, INVENTORY_SLOT_CWEAPON_L); + //AssignCommand(oPC, DelayCommand(10.0, EquipNaturalWeaponCheck(oPC, oObject))); + FloatingTextStringOnCreature("Equipped "+GetName(oObject)+" as Primary Natural Weapon", oPC, FALSE); + return oObject; +} + +void UpdateNaturalWeaponSizes(object oPC) +{ + int nSize = PRCGetCreatureSize(oPC); + int nLastSize = GetLocalInt(oPC, "NaturalWeaponCreatureSize"); + if(nSize == nLastSize) + return; + SetLocalInt(oPC, "NaturalWeaponCreatureSize", nSize); + string sCurrent = "_"+GetAffixForSize(nSize); + //secondary + UpdateSecondaryWeaponSizes(oPC, nSize); + //primary + int i; + for(i=0; i 1) + { + //get the object thats going to apply the effect + //this strips previous effects too + object oWP = GetObjectToApplyNewEffect("WP_PrimaryNaturalWeapEffect", oPC, TRUE); + AssignCommand(oWP, ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(EffectModifyAttacks(nAttackCount-1)), oPC))); + } +} + +void SetPrimaryNaturalWeapon(object oPC, int nIndex) +{ + if(!array_exists(oPC, ARRAY_NAT_PRI_WEAP_RESREF)) + array_create(oPC, ARRAY_NAT_PRI_WEAP_RESREF); + if(!array_exists(oPC, ARRAY_NAT_PRI_WEAP_ATTACKS)) + array_create(oPC, ARRAY_NAT_PRI_WEAP_ATTACKS); + if (DEBUG) DoDebug("SetPrimaryNaturalWeapon Step #1"); + int nOverride = GetPersistantLocalInt(oPC, "NaturalWeaponPlayerOverride"); + if (DEBUG) DoDebug("SetPrimaryNaturalWeapon nIndex "+IntToString(nIndex)+", nOverride "+IntToString(nOverride)); + if(nOverride) nIndex = nOverride; + if(nIndex == -1) + { + //remove natural weapons + DestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC)); + DestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC)); + DestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oPC)); + DeleteLocalInt(oPC, NATURAL_WEAPON_ATTACK_COUNT); + return; + } + string sResRef = array_get_string(oPC, ARRAY_NAT_PRI_WEAP_RESREF, nIndex); + if (DEBUG) DoDebug("SetPrimaryNaturalWeapon Step #2 resref is "+sResRef); + if(sResRef == "") + return; + object oNaturalWeapon = EquipNaturalWeapon(oPC, sResRef); + SetPrimaryNaturalWeaponAttacks(oPC, nIndex); +} + +int GetPrimaryNaturalWeaponCount(object oPC) +{ + return array_get_size(oPC, ARRAY_NAT_PRI_WEAP_RESREF); +} + + +void NaturalPrimaryWeaponTempCheck(object oManifester, object oTarget, int nSpellID, + int nBeatsRemaining, string sResRef) +{ + if(!((nBeatsRemaining-- == 0) || // Has the power ended since the last beat, or does the duration run out now + PRCGetDelayedSpellEffectsExpired(nSpellID, oTarget, oManifester) || // Has the power been dispelled + PRCGetHasEffect(EFFECT_TYPE_POLYMORPH, oTarget) // Has the target been polymorphed + ) + ) + { + // Schedule next HB + DelayCommand(6.0f, NaturalPrimaryWeaponTempCheck(oManifester, oTarget, nSpellID, nBeatsRemaining, sResRef)); + } + // Power expired + else + { + if(DEBUG) DoDebug(sResRef+": Power expired, exiting HB"); + PRCRemoveSpellEffects(nSpellID, oManifester, oTarget); + RemoveNaturalPrimaryWeapon(oTarget, sResRef); + } +} \ No newline at end of file diff --git a/src/include/prc_inc_newip.nss b/src/include/prc_inc_newip.nss new file mode 100644 index 0000000..ea4bc98 --- /dev/null +++ b/src/include/prc_inc_newip.nss @@ -0,0 +1,491 @@ +//:: New itemproperties +const int ITEM_PROPERTY_USE_LIMITATION_ABILITY_SCORE = 95; +const int ITEM_PROPERTY_USE_LIMITATION_SKILL_RANKS = 96; +const int ITEM_PROPERTY_USE_LIMITATION_SPELL_LEVEL = 88; +const int ITEM_PROPERTY_USE_LIMITATION_ARCANE_SPELL_LEVEL = 89; +const int ITEM_PROPERTY_USE_LIMITATION_DIVINE_SPELL_LEVEL = 90; +const int ITEM_PROPERTY_USE_LIMITATION_SNEAK_ATTACK = 91; +const int ITEM_PROPERTY_USE_LIMITATION_GENDER = 150; +const int ITEM_PROPERTY_SPEED_INCREASE = 133; +const int ITEM_PROPERTY_SPEED_DECREASE = 134; +const int ITEM_PROPERTY_AREA_OF_EFFECT = 100; +const int ITEM_PROPERTY_CAST_SPELL_CASTER_LEVEL = 94; +const int ITEM_PROPERTY_CAST_SPELL_METAMAGIC = 92; +const int ITEM_PROPERTY_CAST_SPELL_DC = 93; +const int ITEM_PROPERTY_PNP_HOLY_AVENGER = 101; +const int ITEM_PROPERTY_WIZARDRY = 102; +const int ITEM_PROPERTY_DIVINITY = 103; +const int ITEM_PROPERTY_ECHOBLADE = 104; + +//:: AoE itemproperties +const int IP_CONST_AOE_DARKNESS = 0; +const int IP_CONST_AOE_DEEPER_DARKNESS = 1; +const int IP_CONST_AOE_CIRCLE_VS_EVIL = 2; +const int IP_CONST_AOE_CIRCLE_VS_GOOD = 3; +const int IP_CONST_AOE_CIRCLE_VS_LAW = 4; +const int IP_CONST_AOE_CIRCLE_VS_CHAOS = 5; +const int IP_CONST_AOE_DAMNING_DARKNESS = 6; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +//new function to return a PRC caster level itemproperty +//will putput to log file if it doesnt work +//relys on blueprints containing these itemproperties +itemproperty ItemPropertyCastSpellCasterLevel(int nSpell, int nLevel); + +//new function to return a PRC metamagic itemproperty +//will putput to log file if it doesnt work +//relys on blueprints containing these itemproperties +//nMetamagic should be a METAMAGIC_* constant +itemproperty ItemPropertyCastSpellMetamagic(int nSpell, int nMetamagic); + +//new function to return a PRC DC itemproperty +//will putput to log file if it doesnt work +//relys on blueprints containing these itemproperties +itemproperty ItemPropertyCastSpellDC(int nSpell, int nDC); + +//new function to return a PRC AoE itemproperty +//will putput to log file if it doesnt work +//relys on blueprints containing these itemproperties +//nIPAoEID is defined in iprp_aoe & IP_CONST_AOE_* +itemproperty ItemPropertyAreaOfEffect(int nIPAoEID, int nLevel); + +//returns the PRCs new PnP Holy Avenger +//for paladins, +5 +2d6 divine vs evil, castspell:dispel magic @ casterlevel = paladinlevels +//or non paladins, +2 +itemproperty ItemPropertyPnPHolyAvenger(); + +//new function to return a PRC wizardry itemproperty +//will putput to log file if it doesnt work +//relys on blueprints containing these itemproperties +itemproperty ItemPropertyWizardry(int nSpellLevel); + +//new function to return a PRC Divinity itemproperty +//will putput to log file if it doesnt work +//relys on blueprints containing these itemproperties +itemproperty ItemPropertyDivinity(int nSpellLevel); + +//returns Echoblade itemproperty +itemproperty ItemPropertyEchoblade(); + +//not implemented +itemproperty ItemPropertyLimitUseByAbility(int nAbility, int nMinScore); +//not implemented +itemproperty ItemPropertyLimitUseBySkill(int nSkill, int nMinScore); +//not implemented +itemproperty ItemPropertyLimitUseBySpellcasting(int nLevel); +//not implemented +itemproperty ItemPropertyLimitUseByArcaneSpellcasting(int nLevel); +//not implemented +itemproperty ItemPropertyLimitUseByDivineSpellcasting(int nLevel); +//not implemented +itemproperty ItemPropertyLimitUseBySneakAttackDice(int nDice); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "prc_x2_itemprop" +//#include "prc_alterations" + + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +itemproperty ItemPropertyCastSpellMetamagic(int nSpell, int nMetamagic) +{ + //convert nSpell into reference to iprip_spells.2da + nSpell = IPGetIPConstCastSpellFromSpellID(nSpell); + + itemproperty ipReturn; + string sResRef = "prc_ip" + IntToString(ITEM_PROPERTY_CAST_SPELL_METAMAGIC) + "_" + IntToString(nSpell); + object oChest = GetObjectByTag("HEARTOFCHAOS");//use the crafting chest + object oItem = CreateItemOnObject(sResRef, oChest); + DestroyObject(oItem); + switch(nMetamagic) + { + case METAMAGIC_NONE: + return ipReturn;//doenst work as an IP + nMetamagic = 0; + break; + case METAMAGIC_EMPOWER: + nMetamagic = 2; + break; + case METAMAGIC_EXTEND: + nMetamagic = 3; + break; + case METAMAGIC_MAXIMIZE: + nMetamagic = 4; + break; + case METAMAGIC_QUICKEN: + return ipReturn;//doenst work as an IP + nMetamagic = 1; + break; + case METAMAGIC_SILENT: + return ipReturn;//doenst work as an IP + nMetamagic = 5; + break; + case METAMAGIC_STILL: + return ipReturn;//doenst work as an IP + nMetamagic = 6; + break; + } + ipReturn = GetFirstItemProperty(oItem); + int i; + for(i=0;i 16029) //not newspellbook spell or psionic power + { + //does not apply to spellscripts triggered by feats + if(Get2DACache("spells", "FeatID", nSpellID) != "") + return oBWTarget; + + //either a feat, or a spell, check to make doubly sure, in the case of monster abilities + if( + (Get2DACache("spells", "Wiz_Sorc", nSpellID) == "") && + (Get2DACache("spells", "Cleric", nSpellID) == "") && + (Get2DACache("spells", "Bard", nSpellID) == "") && + (Get2DACache("spells", "Druid", nSpellID) == "") && + (Get2DACache("spells", "Paladin", nSpellID) == "") && + (Get2DACache("spells", "Ranger", nSpellID) == "") + ) + return oBWTarget; //we shouldn't be checking feats or other spellbooks + } + + // Force missile mage reflects all magic missiles + if (GetLevelByClass(CLASS_TYPE_FMM, oBWTarget) >= 4 && nSpellID == SPELL_MAGIC_MISSILE) + return oCaster; + + int bTouch = GetStringUpperCase(Get2DACache("spells", "Range", nSpellID)) == "T"; + // Reddopsi power causes spells and powers to rebound onto the caster. + if(GetLocalInt(oBWTarget, "PRC_Power_Reddopsi_Active") && // Reddopsi is active on the target + !GetLocalInt(oCaster, "PRC_Power_Reddopsi_Active") && // And not on the manifester + !(nSpellID == SPELL_LESSER_DISPEL || // And the spell/power is not a dispelling one + nSpellID == SPELL_DISPEL_MAGIC || + nSpellID == SPELL_GREATER_DISPELLING || + nSpellID == SPELL_MORDENKAINENS_DISJUNCTION || + nSpellID == POWER_DISPELPSIONICS + ) && + !bTouch // And the spell/power is not touch range + ) + return oCaster; + + if(GetLocalInt(oBWTarget, "PRC_SPELL_TURNING") && + !(nSpellID == SPELL_LESSER_DISPEL || // And the spell/power is not a dispelling one + nSpellID == SPELL_DISPEL_MAGIC || + nSpellID == SPELL_GREATER_DISPELLING || + nSpellID == SPELL_MORDENKAINENS_DISJUNCTION || + nSpellID == POWER_DISPELPSIONICS) && + !bTouch + ) + { + int nSpellLevel = StringToInt(Get2DACache("spells", "Innate", nSpellID));//lookup_spell_innate(nSpellID)); + object oTarget = oBWTarget; + int nLevels = GetLocalInt(oTarget, "PRC_SPELL_TURNING_LEVELS"); + int bCasterTurning = GetLocalInt(oCaster, "PRC_SPELL_TURNING"); + int nCasterLevels = GetLocalInt(oCaster, "PRC_SPELL_TURNING_LEVELS"); + if(!bCasterTurning) + { + if(nSpellLevel > nLevels) + { + if((Random(nSpellLevel) + 1) <= nLevels) + oTarget = oCaster; + } + else + oTarget = oCaster; + } + else + { + if((Random(nCasterLevels + nLevels) + 1) <= nLevels) + oTarget = oCaster; + nCasterLevels -= nSpellLevel; + if(nCasterLevels < 0) nCasterLevels = 0; + SetLocalInt(oCaster, "PRC_SPELL_TURNING_LEVELS", nCasterLevels); + } + nLevels -= nSpellLevel; + if(nLevels < 0) nLevels = 0; + SetLocalInt(oBWTarget, "PRC_SPELL_TURNING_LEVELS", nLevels); + return oTarget; + } + } + + // 50% chance of this happening + if(GetHasSpellEffect(SPELL_BLINK, oBWTarget) && d2() == 2) + return OBJECT_INVALID; + + // The rune/gem/skull always targets the one who activates it. + object oItem = PRCGetSpellCastItem(oCaster); + if(GetIsObjectValid(oItem) && (GetResRef(oItem) == "prc_rune_1" || + GetResRef(oItem) == "prc_skulltalis" || GetTag(oItem) == "prc_attunegem")) + { + if(DEBUG) DoDebug(GetName(oCaster) + " has cast a spell using a rune"); + // Making sure that the owner of the item is correct + if (GetIsObjectValid(GetItemPossessor(oItem))) + { + if(DEBUG) DoDebug(GetName(oCaster) + " is the owner of the Spellcasting item"); + return GetItemPossessor(oItem); + } + } + + + // return Bioware's target + return oBWTarget; +} + +/** + * PRCGetSpellCastItem(object oCaster = OBJECT_SELF) + * wrapper function for GetSpellCastItem() + * + * Note that we are giving preference for the local object, "PRC_SPELLCASTITEM_OVERRIDE", stored on oCaster + * Therefore it is absolutely essential, in order to have this variable not interfere with "normal" spell casting, + * to delete it *immediately after* the spell script executed. All of this is taken care of in the function + * ExecuteSpellScript(), which should be used instead of any direct calls to the spell scripts. + * In particular, NEVER MANUALLY set the overrides. You might ruin the whole spell casting system! + * + * Another possibility would have been, to give preference to the GetSpellCastItem() call and only fetch the + * local object "PRC_SPELLCASTITEM_OVERRIDE" when GetSpellCastItem() returns an invalid object. + * This is how it is was done in the PRC 3.1c version of prc_onhitcast (lines 58-61), and in psi_sk_onhit, prc_evnt_bonebld, prc_evnt_strmtl + * [In those scripts the local (override) object was called "PRC_CombatSystem_OnHitCastSpell_Item". In order to be consistent with + * the naming conventions of the other override variables, I changed the name of the override object to PRC_SPELLCASTITEM_OVERRIDE + * and provided the wrapper PRCGetSpellCastItem for an easy use of the onhitcast system] + * However, that approach DOES NOT WORK, because Bioware didn't bother to implement GetSpellCastItem() properly. + * In a proper implementation GetSpellCastItem() word return OBJECT_INVALID, when called outside of an item spell script, + * But this is not the case. GetSpellCastItem() will always return the item, from which (according to Bioware's knowledge) + * the last item spell was cast. As long as the item still exists, the call to GetSpellCastItem() will always return a valid item, + * even if the item spell long expired and we are casting a completely differnt spell. So GetSpellCastItem() practically + * NEVER returns an invalid object. [We only get an invalid object, when we didn't yet cast any item spell at all] + * + * Possible caveats: + * You should never cast spells as an action, when the local override object "PRC_SPELLCASTITEM_OVERRIDE" + * is set (and subsequently deleted) *outside* the action script. This also pertains to other override variables, such as + * PRC_SPELL_TARGET_OBJECT_OVERRIDE, PRC_METAMAGIC_OVERRIDE, etc. + * If you set (and delete) a local override (object or int) *within* one single action, thats ok. For instance putting + * ExecuteSpellScript() into an ActionDoCommand, an AssignCommand or a DelayCommand will work. + * But (manually) setting "PRC_SPELLCASTITEM_OVERRIDE", then calling ActionCastSpellAt* + * (which will insert the spell cast action into the action queue) and after that trying to delete the overrides + * via a DelayCommand or an AssignCommand(), often just guessing how long it takes the spell cast action to run, + * will most likely break any other spell casting that is done between manually setting the override and deleting it. + * So please follow the advise to never MANUALLY set the override variables. Use the functions provided here + * (ExecuteSpellScript, CastSpellAtObject, CastSpellAtLocation, etc. ) or - if you must - build your own + * functions by using the provided functions either directly or as templates (they show you how to do things right) + */ +object PRCGetSpellCastItem(object oCaster = OBJECT_SELF) +{ + // if the local object "PRC_SPELLCASTITEM_OVERRIDE" is valid, we take it without even looking for anything else + object oItem = GetLocalObject(oCaster, PRC_SPELLCASTITEM_OVERRIDE); + if (GetIsObjectValid(oItem)) + { + // OBJECT_SELF counts as invalid item + if (oItem == OBJECT_SELF) + { + oItem = OBJECT_INVALID; + } + + if (DEBUG) DoDebug("PRCGetSpellCastItem: found override spell cast item = "+GetName(oItem)+", original item = " + GetName(GetSpellCastItem())); + return oItem; + } + + // otherwise simply return Bioware's GetSpellCastItem + oItem = GetSpellCastItem(); + if (DEBUG) DoDebug("PRCGetSpellCastItem: no override, returning bioware spell cast item = "+GetName(oItem)); + return oItem; + /* + // motu99: disabled the old stuff; was only used in three scripts (changed them) + // and couldn't work anyway (because of Bioware's improper implementation of GetSpellCastItem) + // if Bioware's functions doesn't return a valid object, maybe the scripted combat system will + if(!GetIsObjectValid(oItem)) + oItem = GetLocalObject(oPC, "PRC_CombatSystem_OnHitCastSpell_Item"); + */ +} + +itemproperty PRCItemPropertyBonusFeat(int nBonusFeatID) +{ + string sTag = "PRC_IPBF_"+IntToString(nBonusFeatID); + object oTemp = GetObjectByTag(sTag); + if(!GetIsObjectValid(oTemp)) + { + if(DEBUG) DoDebug("PRCItemPropertyBonusFeat() : Cache object " + sTag + " is not valid, creating"); + location lLimbo; + object oLimbo = GetObjectByTag("HEARTOFCHAOS"); + if(GetIsObjectValid(oLimbo)) + lLimbo = GetLocation(oLimbo); + else + lLimbo = GetStartingLocation(); + oTemp = CreateObject(OBJECT_TYPE_ITEM, "base_prc_skin", lLimbo, FALSE, sTag); + } + itemproperty ipReturn = GetFirstItemProperty(oTemp); + if(!GetIsItemPropertyValid(ipReturn)) + { + if(DEBUG) DoDebug("PRCItemPropertyBonusFeat() : Itemproperty was not present on cache object, adding"); + ipReturn = ItemPropertyBonusFeat(nBonusFeatID); + AddItemProperty(DURATION_TYPE_PERMANENT, ipReturn, oTemp); + } + return ipReturn; +} + +int GetPRCIsSkillSuccessful(object oCreature, int nSkill, int nDifficulty, int nRollOverride = -1) +{ + int nRanks = GetSkillRank(nSkill, oCreature); + if(nRollOverride > 20) + { + nRollOverride = 20; + if(DEBUG) DoDebug("GetPRCIsSkillSuccessful: nRollOverride > 20"); + } + if(nRollOverride < 0 || (nSkill + nRollOverride) < nDifficulty) + return GetIsSkillSuccessful(oCreature, nSkill, nDifficulty); + else + { //we're going to fake a skill check here + SendMessageToPC(oCreature, + PRC_TEXT_LIGHT_BLUE + GetName(oCreature) + PRC_TEXT_DARK_BLUE + " : " + + GetStringByStrRef(StringToInt(Get2DACache("skills", "Name", nSkill))) + " : *" + + (((nRollOverride + nRanks) >= nDifficulty) ? GetStringByStrRef(5352) : ((nDifficulty > nRanks + 20) ? GetStringByStrRef(8101) : GetStringByStrRef(5353))) + "* : " + + "(" + IntToString(nRollOverride) + " + " + IntToString(nRanks) + " = " + IntToString(nRollOverride + nRanks) + " vs. DC: " + IntToString(nDifficulty) + ")" + ); + } + return (nRollOverride + nRanks >= nDifficulty); +} + +int PRCGetCreatureSize(object oObject = OBJECT_SELF, int nSizeMask = PRC_SIZEMASK_ALL) +{ + //int nSize = GetCreatureSize(oObject); + int nSize = StringToInt(Get2DAString("appearance", "SizeCategory", GetAppearanceType(oObject))); + if (DEBUG) DoDebug("Appearance-based GetCreatureSize, returning size: "+IntToString(nSize)); + if (DEBUG) DoDebug("Bioware GetCreatureSize, returning size: "+IntToString(GetCreatureSize(oObject))); + //CEP adds other sizes, take them into account too + if(nSize == 20) + nSize = CREATURE_SIZE_DIMINUTIVE; + else if(nSize == 21) + nSize = CREATURE_SIZE_FINE; + else if(nSize == 22) + nSize = CREATURE_SIZE_GARGANTUAN; + else if(nSize == 23) + nSize = CREATURE_SIZE_COLOSSAL; + + if(nSizeMask & PRC_SIZEMASK_NORMAL) + { + if(GetHasFeat(FEAT_SIZE_DECREASE_6, oObject)) + nSize += -6; + else if(GetHasFeat(FEAT_SIZE_DECREASE_5, oObject)) + nSize += -5; + else if(GetHasFeat(FEAT_SIZE_DECREASE_4, oObject)) + nSize += -4; + else if(GetHasFeat(FEAT_SIZE_DECREASE_3, oObject)) + nSize += -3; + else if(GetHasFeat(FEAT_SIZE_DECREASE_2, oObject)) + nSize += -2; + else if(GetHasFeat(FEAT_SIZE_DECREASE_1, oObject)) + nSize += -1; + + if(GetHasFeat(FEAT_SIZE_INCREASE_6, oObject)) + nSize += 6; + else if(GetHasFeat(FEAT_SIZE_INCREASE_5, oObject)) + nSize += 5; + else if(GetHasFeat(FEAT_SIZE_INCREASE_4, oObject)) + nSize += 4; + else if(GetHasFeat(FEAT_SIZE_INCREASE_3, oObject)) + nSize += 3; + else if(GetHasFeat(FEAT_SIZE_INCREASE_2, oObject)) + nSize += 2; + else if(GetHasFeat(FEAT_SIZE_INCREASE_1, oObject)) + nSize += 1; + } + + if(nSizeMask & PRC_SIZEMASK_NOABIL + || ((nSizeMask & PRC_SIZEMASK_NORMAL) && GetPRCSwitch(PRC_DRAGON_DISCIPLE_SIZE_CHANGES))) + { + if(GetHasFeat(FEAT_DRACONIC_SIZE_INCREASE_2, oObject)) + nSize += 2; + else if(GetHasFeat(FEAT_DRACONIC_SIZE_INCREASE_1, oObject)) + nSize += 1; + } + + if(nSizeMask & PRC_SIZEMASK_SIMPLE) + { + // Size changing powers + // Compression: Size decreased by one or two categories, depending on augmentation + if(GetLocalInt(oObject, "PRC_Power_Compression_SizeReduction")) + nSize -= GetLocalInt(oObject, "PRC_Power_Compression_SizeReduction"); + // Expansion: Size increase by one or two categories, depending on augmentation + if(GetLocalInt(oObject, "PRC_Power_Expansion_SizeIncrease")) + nSize += GetLocalInt(oObject, "PRC_Power_Expansion_SizeIncrease"); + } + + if(nSize < CREATURE_SIZE_FINE) + nSize = CREATURE_SIZE_FINE; + if(nSize > CREATURE_SIZE_COLOSSAL) + nSize = CREATURE_SIZE_COLOSSAL; + if (DEBUG) DoDebug("PRCGetCreatureSize, returning size: "+IntToString(nSize)); + return nSize; +} + +int GetIsChakraBound(object oMeldshaper, int nChakra) +{ + int nTest = GetLocalInt(oMeldshaper, "BoundMeld"+IntToString(nChakra)); + + if (DEBUG) DoDebug("GetIsChakraBound is "+IntToString(nTest)); + return nTest; +} + +int GetMaxEssentiaCapacity(object oMeldshaper, int nClass, int nMeld) +{ + int nMax = 1; // Always can invest one + int nHD = GetHitDice(oMeldshaper); + if (nHD >= 31) nMax = 5; + else if (nHD >= 18) nMax = 4; + else if (nHD >= 12) nMax = 3; + else if (nHD >= 6) nMax = 2; + + if (nClass == CLASS_TYPE_INCARNATE && GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper) >= 3) nMax++; + if (nClass == CLASS_TYPE_INCARNATE && GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper) >= 15) nMax++; + + if (nClass == CLASS_TYPE_TOTEMIST && GetIsMeldBound(oMeldshaper, nMeld) == CHAKRA_TOTEM) nMax++; + if (nClass == CLASS_TYPE_TOTEMIST && GetLevelByClass(CLASS_TYPE_TOTEMIST, oMeldshaper) >= 15 && GetIsMeldBound(oMeldshaper, nMeld) == CHAKRA_TOTEM) nMax++; + + if (nClass == CLASS_TYPE_TOTEMIST && GetLevelByClass(CLASS_TYPE_TOTEM_RAGER, oMeldshaper) >= 10 && GetIsMeldBound(oMeldshaper, nMeld) == CHAKRA_TOTEM) nMax++; + + if (GetIsNecrocarnumMeld(nMeld) && GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper) >= 9) nMax++; + if (GetLocalInt(oMeldshaper, "DivineSoultouch")) nMax += 1; + if (GetLocalInt(oMeldshaper, "IncandescentOverload")) + { + if (GetAbilityModifier(ABILITY_CHARISMA, oMeldshaper) > 1) + nMax += GetAbilityModifier(ABILITY_CHARISMA, oMeldshaper); + else + nMax += 1; + } + if (GetExpandedSoulmeld(oMeldshaper, nMeld)) nMax += 1; + + if (DEBUG) DoDebug("GetMaxEssentiaCapacity: nHD "+IntToString(nHD)+" nMax "+IntToString(nMax)); + return nMax; +} + +int GetEssentiaInvested(object oMeldshaper, int nMeld = -1) +{ + if (nMeld == -1) nMeld = PRCGetSpellId(); + + if (GetLocalInt(oMeldshaper, "PerfectMeldshaper")) return GetMaxEssentiaCapacity(oMeldshaper, CLASS_TYPE_INCARNATE, -1); + + int nReturn = GetLocalInt(oMeldshaper, "MeldEssentia"+IntToString(nMeld)); + if (GetLocalInt(oMeldshaper, "TotemEmbodiment") == nMeld) nReturn = nReturn * 2; + if (GetLocalInt(oMeldshaper, "TotemEmbodiment2") == nMeld) nReturn = nReturn * 2; + if (DEBUG) DoDebug("GetEssentiaInvested nMeld "+IntToString(nMeld)+" nReturn "+IntToString(nReturn)); + return nReturn; +} + +int GetIsMeldBound(object oMeldshaper, int nMeld = -1) +{ + if (nMeld == -1) nMeld = PRCGetSpellId(); + int i, nBind, nTest; + for (i = 1; i <= 22; i++) + { + nTest = GetLocalInt(oMeldshaper, "BoundMeld"+IntToString(i)); + if (nTest == nMeld) // If it's been marked as bound + nBind = i; + } + //FloatingTextStringOnCreature("GetIsMeldBound: nMeld "+IntToString(nMeld)+" nBind "+IntToString(nBind), oMeldshaper); + if (DEBUG) DoDebug("GetIsMeldBound is "+IntToString(nBind)); + + return nBind; // Return which Chakra it's bound to +} + +int GetMeldshaperAbilityOfClass(int nClass, object oMeldshaper) +{ + // Incarnates use Wisdom for DC, everyone else uses Con + if (nClass == CLASS_TYPE_INCARNATE || GetHasFeat(FEAT_UNDEAD_MELDSHAPER, oMeldshaper)) + return ABILITY_WISDOM; + else + return ABILITY_CONSTITUTION; + + // Technically, never gets here but the compiler does not realise that + return -1; +} + +int GetMeldshaperDC(object oMeldshaper, int nClass, int nMeldId) +{ + int nAbi = GetAbilityModifier(GetMeldshaperAbilityOfClass(nClass, oMeldshaper), oMeldshaper) + GetEssentiaInvested(oMeldshaper, nMeldId); + + // DC is 10 + ability + int nDC = 10 + nAbi; + if (GetIsNecrocarnumMeld(nMeldId) && GetHasFeat(FEAT_NECROCARNUM_ACOLYTE, oMeldshaper)) nDC += 1; + if (DEBUG) DoDebug("GetMeldshaperDC: nAbi "+IntToString(nAbi)+" nMeldId "+IntToString(nMeldId)); + return nDC; +} + +int GetEssentiaInvestedFeat(object oMeldshaper, int nFeat) +{ + int nReturn = GetLocalInt(oMeldshaper, "FeatEssentia"+IntToString(nFeat)); + if (DEBUG) DoDebug("GetEssentiaInvestedFeat nFeat "+IntToString(nFeat)+" nReturn "+IntToString(nReturn)); + return nReturn; +} + +int GetIsNecrocarnumMeld(int nMeld) +{ + int nReturn = FALSE; + + if (nMeld == MELD_NECROCARNUM_CIRCLET || + nMeld == MELD_NECROCARNUM_MANTLE || + nMeld == MELD_NECROCARNUM_SHROUD || + nMeld == MELD_NECROCARNUM_TOUCH || + nMeld == MELD_NECROCARNUM_VESTMENTS || + nMeld == MELD_NECROCARNUM_WEAPON) + nReturn = TRUE; + + if (DEBUG) DoDebug("GetIsNecrocarnumMeld nReturn "+IntToString(nReturn)); + return nReturn; +} + +int DoubleChakraToChakra(int nChakra) +{ + if (nChakra == CHAKRA_DOUBLE_CROWN ) return CHAKRA_CROWN; + if (nChakra == CHAKRA_DOUBLE_FEET ) return CHAKRA_FEET; + if (nChakra == CHAKRA_DOUBLE_HANDS ) return CHAKRA_HANDS; + if (nChakra == CHAKRA_DOUBLE_ARMS ) return CHAKRA_ARMS; + if (nChakra == CHAKRA_DOUBLE_BROW ) return CHAKRA_BROW; + if (nChakra == CHAKRA_DOUBLE_SHOULDERS) return CHAKRA_SHOULDERS; + if (nChakra == CHAKRA_DOUBLE_THROAT ) return CHAKRA_THROAT; + if (nChakra == CHAKRA_DOUBLE_WAIST ) return CHAKRA_WAIST; + if (nChakra == CHAKRA_DOUBLE_HEART ) return CHAKRA_HEART; + if (nChakra == CHAKRA_DOUBLE_SOUL ) return CHAKRA_SOUL; + if (nChakra == CHAKRA_DOUBLE_TOTEM ) return CHAKRA_TOTEM; + + return nChakra; +} + +int GetExpandedSoulmeld(object oMeldshaper, int nMeld) +{ + int i, nCount, nTest; + for (i = 1; i <= 5; i++) + { + nTest = GetLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(i)); + if (nTest == nMeld) + nCount = TRUE; + } + if (DEBUG) DoDebug("GetExpandedSoulmeld is "+IntToString(nCount)); + return nCount; +} + +int GetIsSoulmeldCapacityUsed(object oMeldshaper) +{ + // If we have the feat and it's not marked as used + if (GetHasFeat(FEAT_EXPANDED_SOULMELD_CAPACITY_1, oMeldshaper) && !GetLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(1))) return FALSE; + else if (GetHasFeat(FEAT_EXPANDED_SOULMELD_CAPACITY_2, oMeldshaper) && !GetLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(2))) return FALSE; + else if (GetHasFeat(FEAT_EXPANDED_SOULMELD_CAPACITY_3, oMeldshaper) && !GetLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(3))) return FALSE; + else if (GetHasFeat(FEAT_EXPANDED_SOULMELD_CAPACITY_4, oMeldshaper) && !GetLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(4))) return FALSE; + else if (GetHasFeat(FEAT_EXPANDED_SOULMELD_CAPACITY_5, oMeldshaper) && !GetLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(5))) return FALSE; + + return TRUE; +} + +void SetIsSoulmeldCapacityUsed(object oMeldshaper, int nMeld) +{ + // This is called from a place where we've just checked there was an empty slot + if (GetHasFeat(FEAT_EXPANDED_SOULMELD_CAPACITY_1, oMeldshaper) && !GetLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(1))) SetLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(1), nMeld); + else if (GetHasFeat(FEAT_EXPANDED_SOULMELD_CAPACITY_2, oMeldshaper) && !GetLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(2))) SetLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(2), nMeld); + else if (GetHasFeat(FEAT_EXPANDED_SOULMELD_CAPACITY_3, oMeldshaper) && !GetLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(3))) SetLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(3), nMeld); + else if (GetHasFeat(FEAT_EXPANDED_SOULMELD_CAPACITY_4, oMeldshaper) && !GetLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(4))) SetLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(4), nMeld); + else if (GetHasFeat(FEAT_EXPANDED_SOULMELD_CAPACITY_5, oMeldshaper) && !GetLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(5))) SetLocalInt(oMeldshaper, "ExpandedSoulmeld"+IntToString(5), nMeld); +} + +int GetIsMeldShaped(object oMeldshaper, int nMeld, int nClass) +{ + int i, nCount, nTest; + for (i = 0; i <= 20; i++) + { + nTest = GetLocalInt(oMeldshaper, "ShapedMeld"+IntToString(nClass)+IntToString(i)); + if (nTest == nMeld) // If it's been marked as shaped for that class + nCount = TRUE; + } + if (DEBUG) DoDebug("GetIsMeldShaped is "+IntToString(nCount)); + return nCount; +} + +int GetMeldShapedClass(object oMeldshaper, int nMeld) +{ + int nClass; + if (GetIsMeldShaped(oMeldshaper, nMeld, CLASS_TYPE_INCARNATE)) nClass = CLASS_TYPE_INCARNATE; + else if (GetIsMeldShaped(oMeldshaper, nMeld, CLASS_TYPE_SOULBORN)) nClass = CLASS_TYPE_SOULBORN; + else if (GetIsMeldShaped(oMeldshaper, nMeld, CLASS_TYPE_TOTEMIST)) nClass = CLASS_TYPE_TOTEMIST; + else if (GetIsMeldShaped(oMeldshaper, nMeld, CLASS_TYPE_SPINEMELD_WARRIOR)) nClass = CLASS_TYPE_SPINEMELD_WARRIOR; + + return nClass; +} + +int GetIsIncarnumUser(object oMeldshaper) +{ + return 0!=(GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper) + || GetLevelByClass(CLASS_TYPE_SOULBORN, oMeldshaper) + || GetLevelByClass(CLASS_TYPE_TOTEMIST, oMeldshaper) + || GetLevelByClass(CLASS_TYPE_INCANDESCENT_CHAMPION, oMeldshaper) + || GetHasFeat(FEAT_HEART_INCARNUM, oMeldshaper) + || GetHasFeat(FEAT_INCARNUM_FORTIFIED_BODY, oMeldshaper) + || GetHasFeat(FEAT_INVEST_ESSENTIA_CONV, oMeldshaper) + || GetLevelByClass(CLASS_TYPE_SPINEMELD_WARRIOR, oMeldshaper)); +} + +int GetIsBinder(object oBinder) +{ + return !(!(GetLevelByClass(CLASS_TYPE_BINDER, oBinder) + || GetHasFeat(FEAT_BIND_VESTIGE, oBinder) + || GetRacialType(oBinder) == RACIAL_TYPE_KARSITE)); +} + +int GetAberrantFeatCount(object oPC) +{ + int i, nCount; + for (i = 5387; i <= 5398; i++) + { + if (GetHasFeat(i, oPC)) + nCount++; + } + if (DEBUG) DoDebug("GetAberrantFeatCount is "+IntToString(nCount)); + return nCount; +} + +//:: Test Void +//:: void main (){} \ No newline at end of file diff --git a/src/include/prc_inc_onhit.nss b/src/include/prc_inc_onhit.nss new file mode 100644 index 0000000..3f0da67 --- /dev/null +++ b/src/include/prc_inc_onhit.nss @@ -0,0 +1,1037 @@ +/* + ---------------- + prc_inc_onhit.nss + ---------------- + + functions for instant spell casting + and onhitcasting + + created April 15, 2007 by motu99 + */ + + +/** + * new functions for a highly flexible onhitcast system + * and for instant spell casting (without having to assign an action) + * added by motu99; April 15, 2007 + * + * most of this has been tested; some is still beta + * + * In principle these functions should allow us to + * i) instantly cast *any* type of spell listed in spells.2da + * ii) put any conceivable spell (and as many as we like) on an item + * + * i) instant spell casting + * The new functions CastSpellAtObject() and CastSpellAtLocation() will cast any spell listed in spells.2da + * instantaneously, without having to insert the spell into the action queue of the caster + * (and thus not knowing when the spell actually will be done, if ever). + * + * ii) onhit casting + * We can now "convert" any type of spell (listed in spells.2da) to an onhitcast spell + * we can put as many onhitcast spells on an item as we want + * all onhitcast spells on an item will be cast automatically, when the bearer of the item + * has scored a hit (item = weapon) or has received a hit (item= armor) + */ + +/** + * Making your spells compatible with PRC instant spell casting + * using the provided functions CastSpellAtObject() and CastSpellAtLocation() + * + * What you have to do: + * + * Insert PRC wrappers into the spell script + * + * How do you do it? + * + * Edit your spell script, replacing all calls to the spell "information" functions + * - GetSpellCastItem, + * - GetSpellTargetObject, + * - GetSpellTargetLocation, + * - GetMetaMagicFeat, + * - GetCasterLevel, + * - GetSpellID + * - GetLastSpellCastClass, +* - etc. + * with the respective PRC wrappers + * [just add "PRC" to the left of the name of the respective "information" function] + * + * Nothing else needs to be done + * + * However, you might want to check, whether you should use PRC functions for other things, + * as the Bioware functions don't take the special abilities of the PRC-classes into account. + * For instance you might want to use: + * - PRCDoResistSpell + * - PRCMySavingThrow + * - PRCGetHasSpell + * - PRCGetSpellLevel + * - MyFirstObjectInShape + * - MyNextObjectInShape + * - PRCGetSaveDC + * - PRCGetSaveDC + * - PRCDoResistSpell + * - PRCGetSpellResistance + * - etc. + * + */ + +/** + * Making your onhitcast spells compatible with PRC onhitcast: + * + * What you have to do: + * i) insert PRC wrappers into the impact spell script + * ii) route the impact script through prc_onhitcast + * iii) register your onhitcast spell in the (two) 2das + * iv) provide a way to place your onhitcast spells on the item + * v) provide a way to retrieve the caster level, save dc, etc. from the item + * + * How do you do it? + * + * i) insert PRC wrappers into the impact spell script + * see the isntructions for instant spell casting + * + * ii) route the impact script through prc_onhitcast + * [do this only for onhitcast spells! Not for "normal" spells!] + * + * if you want to convert a "normal" spell to an onhitcast spell, + * it is strongly advised to make a new spell script + * + * In order to circumvent the bioware bug, according to + * which only the first onhitcast spell on an item is executed, + * we must route all onhitcast spells through prc_onhitcast. + * + * This is done very conveniently by placing the following code + * into the body of the main function of your onhitcast impact spell script: + * + * if(!ContinueOnHitCastSpell()) return; + * + * Put this at the very beginning of the main() + * See "x2_s3_flamingd" for an example + * + * iii) register your spell in the 2das + * [if your spell is operational, you probably have done this before] + * + * add a line in the two 2da files + * - spells.2da + * - iprp_onhitspell.2da + * look up some onhitcast spells in the 2das to see what must be done + * see the instructions under iv) for further explanation + * + * iv) provide a way to place your onhitcast spells on the item + * [if your spell is operational you might have done this before] + * + * usually the placement of an onhitcast spell on an item is done by a "normal" spell. + * For instance the "normal" Flame Weapon spell will put a special onhitcast + * item property on the weapon you targeted with the "normal" spell. The item property + * has an integer valued subtye, that defines what spell is to be called on a hit. + * See "x2_s0_enhweap" for an example how to put the onhitcast spell item property + * on an item. + * + * How does the engine find the spell, that it is supposed to call on a hit, + * from the item property? + * + * The integer valued item property subtype specifies a line in iprp_onhitspell.2da. + * For the flame weapon spell it is line # 124. The column "SpellIndex" in + * iprp_onhitspell.2da points contains the spellID of the Impact Spell Script. This + * is the spell script that will be executed on a hit. For the flame weapon spell it is # 696. +* That number specifies a line in spells.2da. This line contains all information about + * the spell, in particular the name of the spell script that should be executed to actually + * apply the spell's onhit effects. You find the script's name in the column "ImpactScript". + * [Note that the flame weapon spell itself occupies a different line # 542 in spells.2da] + * The impact script for the "onhit" part of the flame weapon spell, as can be read + * off from the column "ImpactScript" on line #696 of spells.2da is "X2_S3_FlamingD" + * This is the string we must pass to ExecuteScript() in order to apply the onhitcast spell. + * [Note that the script name does not distinguish between lower and higher case letters] + * + * v) provide a way to retrieve the caster level, save dc, etc. from the item + * A "problem" in onhit casting is, that the item from which a spell is cast, must not + * necessarily be in the possession of the caster, who put the spell on the item. + * It might even be that the caster is not there any more (dead, exited the module) + * Therefore we must provide a way to retrieve important information about the + * spell (such as caster level, save DC, metamagics, etc.) from the item. This can + * be done (in a more or less standard way) via item properties, or (in a non-standard) + * way by storing the required information in local ints / objects attached to the item. + * If you place the relevant information as item properties on the item, you can retrieve + * the information with the standard PRC wrappers PRCGetCasterLevel, PRCGetMetaMagicFeat etc. + * in the impact spell script. If you place the relevant information in local ints / objects + * stored on the item, you must set up your impact spell script in a "non-standard" way, + * so that it retrieves the necessary information via the local variables on the item. + * The second route has been used for the flame weapon and darkfire impact spell + * scripts (x2_s3_flamingd, x2_s3_darkfire). The first route might be preferrable + * when you want to put a "normal" already existing spell on an item and don't want + * to modify the impact spell script extensively. +*/ + +////////////////////////////////////////////////// +/* Function Prototypes */ +////////////////////////////////////////////////// + +/** + * ExecuteSpellScript: + * + * instantly executes the spell script sScript via ExecuteScript in the context of oCaster + * (meaning that oCaster is considered to be the caster) + * does not perform any checks, whether oCaster can actually cast the spell + * [You can do the checks in the spell script, for instance by calling X2PreSpellCastCode] + * + * Remark motu99: + * no prespell code, no caster checks: This appears to be the general behavior of most onhitcast spells: + * As far as I could tell, the onhitcast spells on weapon and armor generally do not call X2PreSpellCastCode + * and - of course - the caster (or rather the item possessor) must not necessarily have to ability to cast spells + * (a fighter can use a weapon with "flame weapon" on hit, although it was not *he* who originally + * put the spell on the weapon) + * + * ExecuteSpellScript sets local override ints/objects/locations on oCaster just before execution + * and deletes them immediately after execution. + * Overrides are generally required, so that the PRC-wrapper functions in the spell scripts can determine + * - the target oTarget of the spell (accessed in the spell script via PRCGetSpellTargetObject), + * - the location lLocation for an AoE spell (accessed in the spell script via PRCGetSpellTargetLocation) + * - the metamagic feat of the spell nMetamagic (accessed in the spell script via PRCGetMetaMagicFeat) + * - the casterlevel nCasterLevel (accessed in the spell script via PRCGetCasterLevel) + * - the spell cast item oItem (accessed in the spell script via PRCGetSpellCastItem) + * - etc. + * + * If default values for the parameters oTarget, nMetaMagic, nCasterLevel, oItem etc. are passed to ExecuteSpellScript, + * it does not set any overrides for the PRC-wrapper functions. In this case you have to rely on the "standard" logic in + * the PRC wrapper functions to properly determine the correct values. + * The standard logic generally works fine for nCasterLevel, but might not work as expected for oTarget, nMetaMagic + * and oItem - depending from where you call ExecuteSpellScript. + * If you call ExecuteSpellScript from *within a spell script* (so that the PRC - or Bioware's - initialization + * codes had a chance to set up things nicely) then the spell "information" functions PRCGetSpellTargetObject, + * PRCGetMetaMagicFeat etc. will most likely return sensible values. (even the Bioware functions might return useful info) + * However, if you call ExecuteSpellScript *outside of a spell script*, nobody will have done any setup for you. + * In that case you are strongly advised to setup things manually, e.g. determine oTarget, nMetaMagic, nCasterLevel, + * oItem, etc. on your own and pass them to ExecuteSpellScript without relying on the "standard" logic to do the guessing for you. + * + * In principle ExecuteSpellScript(), in combination with the PRC-wrappers, is the only functions you really need for instantaneous spell casting. + * Most other functions, such as CastSpellAtObject, CastSpellAtLocation are provided as a convenience. + * They mimic the behavior of Bioware's ActionCastSpell* commands. They all eventually call ExecuteSpellScript + */ +void ExecuteSpellScript(string sScript, location lTargetLocation, object oTarget = OBJECT_INVALID, int nSpellID = 0, int nMetaMagic = METAMAGIC_ANY, int nCasterLevel = 0, int nCasterClass = 0, int nSaveDC = 0, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF); + +/** + * CastSpellAtObject: + * + * similar to Bioware's ActionCastSpellAtObject + * + * Will instantaneously cast the spell with index iSpellNr at oTarget + * The spell is not inserted into the action queue of oCaster, no checks whether oCaster can actually cast the spell + * oTarget is the spell's target, oItem (if required) the item from which the spell is cast, oCaster (or OBJECT_SELF) is considered to be the caster + * tested for flame weapon and darkfire impact spell scripts, but should eventually work for all spells (see below) + * + * in order to work, the spell scripts associated with iSpellNr (via spells.2da) must use the PRC-wrapper functions!!! + * Besides the established wrappers (PRCGetSpellTargetObject, PRCGetCasterLevel, PRCGetMetaMagicFeat, PRCGetSpellId etc.) + * we need a new PRC-wrapper function to replace SpellCastItem(). Not surprising the wrapper is named PRCGetSpellCastItem() + * It would be a good idea for any spell coder, who wants to remain compatible with the PRC, to check his spell scripts, + * whether all calls to Bioware's spell information functions have been replaced by the respective PRC wrapper functions. + * [As far as I could tell, this is not done consistently] + * + * If default values for oTarget, nMetaMagic, nCasterLevel and oItem are supplied, no override variables are set + * In this case the PRC-wrapper functions (or Bioware's original functions) must determine the SpellTargetObject, + * the SpellCastItem etc. through their "standard" logic. This might or might not work. + * For more information see the description in ExecuteSpellScript() + */ +void CastSpellAtObject(int nSpellID, object oTarget = OBJECT_INVALID, int nMetaMagic = METAMAGIC_ANY, int nCasterLevel = 0, int nCasterClass = 0, int nSaveDC = 0, object oItem = OBJECT_INVALID, object oCaster = OBJECT_SELF); + +// instantaneously casts an area of effect spell at location lTargetLocation +// works similar to ActionCastSpellAtLocation, but casts the spell instantly +// See the description of CastSpellAtObject, how instant spell casting work +void CastSpellAtLocation(int nSpellID, location lTargetLocation, int nMetaMagic = METAMAGIC_ANY, int nCasterLevel = 0, int nCasterClass = 0, int nSaveDC = 0, object oItem = OBJECT_INVALID, object oCaster = OBJECT_SELF); + +// applies the onhitcast spell with subtype iSubType (situated on oItem ) to oTarget +// will look up the spell script that must be executed through "iprp_onhitspell.2da" and "spells.2da" +// if default values for oTarget, oItem are supplied, no override variables are set +// for more information see the description in ExecuteSpellScript() +void ApplyOnHitCastSpellSubType(int iSubType, object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF); + +// applies the onhitcast spell darkdire (situated on oItem) to oTarget +// will look up the spell script that must be executed through "iprp_onhitspell.2da" and "spells.2da" +// if default values for oTarget, oItem are supplied, no override variables are set +// for more information see the description in ExecuteSpellScript() +void ApplyOnHitDarkfire(object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF); + +// applies the onhitcast spell flame weapon (situated on oItem) to oTarget +// will look up the spell script that must be executed through "iprp_onhitspell.2da" and "spells.2da" +// if default values for oTarget, oItem are supplied, no override variables are set +// for more information see the description in ExecuteSpellScript() +void ApplyOnHitFlameWeapon(object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF); + +// applies the onhitcast spell unique power (situated on oItem) to oTarget +// actually this will call the script "prc_onhitcast" (hardcoded), e.g. it will *not* look up the 2das (as the other functions do) +// if default values for oTarget, oItem are supplied, no override variables are set +// for more information see the description in ExecuteSpellScript() +void ApplyOnHitUniquePower(object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF); + +// applies all on hit cast spells on oItem to oTarget +// will look up the spell scripts that must be executed in "iprp_onhitspell.2da" and "spells.2da" +// Uses a "safe" to cycle through the item properties, without interfering with any other loops +// over item properties (that for instance could be initiated in the spell scripts) +// Always use this function to cycle through and execute several onhitcast spells on an item!! +// If default values for oTarget, oItem are supplied, no override variables are set +// for more information see the description in ExecuteSpellScript() +void ApplyAllOnHitCastSpellsOnItem(object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF); + +// applies all on hit cast spells on oItem, excluding any spell-subtype given in iExcludeSubType, to oTarget +// will look up the spell script that must be executed in "iprp_onhitspell.2da" and "spells.2da" +// Uses a "safe" to cycle through the item properties, without interfering with any other loops +// over item properties (that for instance could be initiated in the spell scripts) +// Always use this function to cycle through and execute several onhitcast spells on an item!! +// if default values for oTarget, oItem are supplied, no override variables are set +// for more information see the description in ExecuteSpellScript() +void ApplyAllOnHitCastSpellsOnItemExcludingSubType(int iExcludeSubType, object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF); + +// returns True, if oItem has at least one onhitcast spell on it (can be any subtype) +int GetHasOnHitCastSpell(object oItem); + +// returns True, if the oItem has an onhitcast spell with the given subtype +int GetHasOnHitCastSpellSubType(int iSubType, object oItem); + +// returns True, if we have the onhit flame weapon spell on oItem +int GetHasOnHitFlameWeapon(object oItem); + +// returns True, if we have the onhit darkfire spell on oItem +int GetHasOnHitDarkfire(object oItem); + +// returns True, if we have the onhit unique power spell on oItem +int GetHasOnHitUniquePower(object oItem); + +// returns true, when prc_onhitcast is running, e.g. the spell script is called from there +int GetIsPrcOnhitcastRunning(object oSpellOrigin = OBJECT_SELF); + +// to be used ONLY in "pure" on-hit cast spell scripts, in order to route all +// onhitcast spells through the unique power script (prc_onhitcast) +// This function should be placed at the beginning of any pure onhitcast spell script +// If the onhitcast spell script contains a call to X2PreSpellCastCode(), replace that call with a call to ContinueOnHitCastSpell() +// This code needs to be in the spell script, in order to neutralize a Biobug +// (Bioware only executes the first onhitcast spell found on an item) +// Checks the local int "prc_ohc"; if it does not find the int, it assumes the spell script was called +// directly by the aurora engine. In that case it will call prc_onhitcast and return FALSE, +// FALSE meaning that the spell script should be aborted +// if the function returns TRUE; the spell script was called from prc_onhitcast. In this case prc_onhitcast +// guarantees the execution of all onhitcast spells on an item, so the spell script should continue to run +/** + * Remark motu99: + * The behavior of ContinueOnHitCastSpell is very similar to that of X2PreSpellCastCode() + * In fact, it should replace any instances of X2PreSpellCastCode() for "pure" onhitcast spells. + * + * For spells that are not exclusively onhitcast spells (e.g. normal spells that some mages + * can put on a weapon), we should not use ContinueOnHitCastSpell, but rather call X2PreSpellCastCode. + * In this case X2PreSpellCastCode (in x2_inc_spellhook) will have to check, whether the spell script was + * called via an onhitcast event connected to a successful physical attack and route to prc_onhitcast in such a case + * (Such a general check from X2PreSpellCastCode is not 100% reliable, because of Biowares buggy implementation. + * However, the function GetIsOnHitCastSpell() provided here will do a very good job at guessing.) + * + * For pure onhitcast spells it is safer and much more efficient to use ContinueOnHitCastSpell instead + * of X2PreSpellCastCode. + */ +int ContinueOnHitCastSpell(object oSpellOrigin = OBJECT_SELF); + +// Checks, whether the spell just running is an onhitcast spell, cast from an item +// Function is to be used in X2PreSpellCastCode() for any onhitcast specific modifications +// (its main use is to fix the Bioware bug, that runs only the first onhitcast spell on a weapon or armor) +// The check is not 100% reliable, because Bioware does not delete the spellcastitem after a spell code has finished. +// So if GetSpellCastItem returns a valid item, we still don't know if we are running an onhitcast event, +// even if the item is a weapon or armor. The item could be an old item used in a previous spell script. +// (for instance, sequencer's robes count as armor) +// In order to find out, whether the spell was actually cast from a weapon/armor in a physical attack action +// we check whether the current action is ACTION_ATTACKOBJECT and whether the attempted attack +// target is equal to the spell's target +int GetIsOnHitCastSpell(object oSpellTarget = OBJECT_INVALID, object oSpellCastItem = OBJECT_SELF, object oSpellOrigin = OBJECT_SELF); + +// this will force the instantaneous execution of any onhitcast spell script, even if it is set up to be +// routed through prc_onhitcast (for more info on forced execution look at the code of ContinueOnHitCastSpell) +// For more info on functionality, see the description/code of ExecuteSpellScript() +void ForceExecuteSpellScript(string sScript, location lTargetLocation, object oTarget = OBJECT_INVALID, int nSpellID = 0, int nMetaMagic = METAMAGIC_ANY, int nCasterLevel = 0, int nCasterClass = 0, int nSaveDC = 0, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF); + +// this will force the instantaneous execution of any onhitcast spell script with iSpellNr, as given in spells.2da +// The spell script will be executed, even if it has been set up to be routed through prc_onhitcast +// (for more info on forced execution look at the code of ContinueOnHitCastSpell) +// for more info on functionality, see the description/code of CastSpellAtObject +void ForceCastSpellAtObject(int nSpellID, object oTarget = OBJECT_INVALID, int nMetaMagic = METAMAGIC_ANY, int nCasterLevel = 0, int nCasterClass = 0, int nSaveDC = 0, object oItem = OBJECT_INVALID, object oCaster = OBJECT_SELF); +void ForceCastSpellAtLocation(int nSpellID, location lTargetLocation, int nMetaMagic = METAMAGIC_ANY, int nCasterLevel = 0, int nCasterClass = 0, int nSaveDC = 0, object oItem = OBJECT_INVALID, object oCaster = OBJECT_SELF); + +// forces the instantaneous application of the onhitcast spell with subtype iSubType (situated on oItem) to oTarget +// will force apply the spell scripts even if they have internally been set up to be routed through prc_onhitcast +// (for more info on forced execution look at the code of ContinueOnHitCastSpell) +// for more info on functionality, see the description/code of ApplyOnHitCastSpellSubType +void ForceApplyOnHitCastSpellSubType(int iSubType, object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF); + +// instantaneously applies all on hit cast spells on oItem to oTarget +// will force apply the spell scripts even if they have internally been set up to be routed through prc_onhitcast +// (for more info on forced execution look at the code of ContinueOnHitCastSpell) +// for more info on functionality, see the description/code of ApplyAllOnHitCastSpellsOnItem +// This is the safe way to loop through the item properties, without interfering with any other loops over item properties in the spell scripts +void ForceApplyAllOnHitCastSpellsOnItem(object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF); + +// most likely we will never need the following function: +// instantaneously applies all on hit cast spells on oItem, excluding any spell-subtype given in iExcludeSubType, to oTarget +// will force apply the spell scripts even if they have internally been set up to be routed through prc_onhitcast +// (for more info on forced execution look at the code of ContinueOnHitCastSpell) +// for more info on functionality, see the description/code of ApplyAllOnHitCastSpellsOnItemExcludingSubType +// Uses a "safe" way to loop through the item properties, without interfering with any other loops over item properties in the spell scripts +void ForceApplyAllOnHitCastSpellsOnItemExcludingSubType(int iExcludeSubType, object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "inc_abil_damage" + + +////////////////////////////////////////////////// +/* Function Definitions */ +////////////////////////////////////////////////// + +/** + * ExecuteSpellScript + * executes the spell script sScript via ExecuteScript in the context of oCaster + * sets local override ints/objects on oCaster before execution (and deletes them immediately after execution) + * oTarget, nMetaMagic, nCasterLevel, oItem, nSpellID, nCasterClass, lTargetLocation + * can be accessed in the spell script via PRC-wrappers + * + * known caveats: + * Using calls to PRCGetMetaMagicFeat() in onhitcast spells can be dangerous, because PRCGetMetaMagicFeat() + * will cycle through the item properties in order to find out whether there are any properties + * of the type ITEM_PROPERTY_CAST_SPELL_METAMAGIC. This is problematic, because prc_onhitcast must also + * cycle through the item properties, in order to find out what onhitcast spells are on the item. + * If we are not careful, we might find ourselves with two nested loops over item properties. But the current implementation + * of GetFirstItemProperty and GetNextItemProperty does not allow nested loops. Nested loops generally result + * in unpredictable behavior (such as infinitely returning the same item property on GetNextItemProperty) + * + * Remark motu99: + * The above described problem ALWAYS occurs when there are nested loops over item properties or effects. + * Therefore generally it is a bad idea to call anything complicated (e.g. a spell script!) within a loop over item properties + * or effects, in particular if you don't know every detail of the so called function. If the called function contains just + * one single call to GetFirst* or GetNext* (this could happen deep in the function's code - possibly in a utility function + * several calling levels deeper), this will mess up your next call to GetNext*. + * I provided a "safe" way to cycle through all onhitcast spells on an item: ApplyAllOnHitCastSpellsOnItem + * + * known limitations: + * some spell scripts need the cast class (e.g. did we cast the spell as a cleric, a wizard, a druid etc.) + * in instantaneous casting we do not select the spell from a spellbook (which is always tied to a certain class), so that the aurora + * engine cannot set a sensible value for GetLastSpellCastClass(). Thus, if the spell script needs it, we must determine the cast + * class ourselves, pass it to ExecuteSpellScript and make sure we call the PRC wrapper PRCGetLastSpellCastClass in the spell script + * + * In the current implementation the spell's save DC is not calculated correctly. It generally returns the minimum DC. + * The reason is, that PRCGetSaveDC (in prc_add_spell_dc.nss) has not yet been updated to handle instant spell casting. + * In particular, PRCGetSaveDC calls Biowares GetSpellDC(), which returns the minimum DC when called *outside* a + * spell script. As instant spellcasting is usually called from outside a spell script, we get only get the minimum DC. + * @TODO: In order to determine the correct DC, we need to know the casting class [this will anable us to select the + * correct ability adjustments - for instance INT for Wizards, CHA for sorcerers, etc.]. So whenever there is a + * cast class override, we should not call Bioware's GetSpellDC, but rather calculate the DC directly. + * + * some spell scripts need the spell ID. It is automatically set by CastSpellAtObject or CastSpellAtLocation. We can set it in + * ExecuteSpellScript as well. + * + * some spell scripts make calls to GetLastSpell(). We might need a PRC wrapper to catch those. + * In any case, PRCGetSpellId will give us the correct spell ID. GetLastSpell seems to be used in OnSpellCastAt events + * From the NWNLexicon: GetLastSpell is for use in OnSpellCastAt script, it gets the ID (SPELL_*) of the spell that was cast. + * It will not return the true spell value, but whatever value is put into the EventSpellCastAt() - therefore, sub-dial spells like + * Polymorph will mearly return SPELL_POLYMORPH not the sub spell number + * + * some spell scripts make calls to GetLastSpellCaster(). In a spell script OBJECT_SELF should be the caster. Its not clear + * what a call to GetLastSpellCaster() will return. Might have to look into this + * + */ +void ExecuteSpellScript(string sScript, location lTargetLocation, object oTarget = OBJECT_INVALID, int nSpellID = 0, int nMetaMagic = METAMAGIC_ANY, int nCasterLevel = 0, int nCasterClass = 0, int nSaveDC = 0, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF) +{ + if(DEBUG) DoDebug("ExecuteSpellScript: executing script "+sScript); + + // create an invalid location by not assigning anything to it (hope this works) + location lInvalid; + + // tell the impact spell script where the target area is + if (lTargetLocation != lInvalid) + { + SetLocalInt(oCaster, PRC_SPELL_TARGET_LOCATION_OVERRIDE, TRUE); + SetLocalLocation(oCaster, PRC_SPELL_TARGET_LOCATION_OVERRIDE, lTargetLocation); + } + + // tell the impact spell script who the target is + if (oTarget != OBJECT_INVALID) + SetLocalObject(oCaster, PRC_SPELL_TARGET_OBJECT_OVERRIDE, oTarget); + + // tell the impact spell script what the spell cast item is + if (oItem != OBJECT_SELF) + { +//DoDebug("ExecuteSpellScript: setting override spell cast item = "+GetName(oItem)); + if (oItem == OBJECT_INVALID) + SetLocalObject(oCaster, PRC_SPELLCASTITEM_OVERRIDE, oCaster); + else + SetLocalObject(oCaster, PRC_SPELLCASTITEM_OVERRIDE, oItem); + } + + // override the caster level, but only if necessary + if (nCasterLevel) + SetLocalInt(oCaster, PRC_CASTERLEVEL_OVERRIDE, nCasterLevel); + + // tell the impact spell script the metamagic we want to use + if (nMetaMagic != METAMAGIC_ANY) + SetLocalInt(oCaster, PRC_METAMAGIC_OVERRIDE, nMetaMagic); + + // tell the impact spell script the spellID we want to use + // check for zero is problematic becauseSPELL_ACID_FOG == 0 + if (nSpellID) + SetLocalInt(oCaster, PRC_SPELLID_OVERRIDE, nSpellID); + + // tell the impact spell script the caster class we want to use + // check for zero is problematic, because CLASS_TYPE_BARBARIAN == 0 + // But Barbarians cannot cast spells (UMD? SPA?), so this should work + if (nCasterClass) + SetLocalInt(oCaster, PRC_CASTERCLASS_OVERRIDE, nCasterClass); + + if (nSaveDC) + SetLocalInt(oCaster, PRC_SAVEDC_OVERRIDE, nSaveDC); + + // execute the impact spell script in the context of oCaster + ExecuteScript(sScript, oCaster); + +/** + * motu99: If we were paranoid, we could delete all local ints and objects, regardless if we set them beforehand, + * as a "countermeasure" against any future scripter, who might disregard the given advise, set the overrides manually + * and then forget to delete them. + * However, as long as scripters follow the advise, and use ExecuteSpellScript and the other functions provided here, + * never manually setting the overrides, we can be sure, that these variables are not misused. + * In the unlikely case that somebody did not play by the rules, and managed to break "normal" spell casting by improperly + * using the overrides, and we cannot locate where and what he did, we might have to resort to the last measure, deleting + * all overrides on every call to ExecuteSpellScript() and ExecuteAoESpellScript() + * If we delete the overrides indiscriminately, we MUST ALWAYS call ExecuteSpellScript with NON-DEFAULT values. + * Otherwise we are in trouble when we do multiple calls to ExecuteScript from a loop: We might accidentally delete + * any overrides that we set on some previous call to ExecuteSpellScript. At that point we are at the mercy of + * Bioware's functions to provide the correct values, which does not always work (to put it mildly) + * Note that some measure of safety is provided through the fact, that we set the overrides on oCaster, and not on the module +*/ + // cleanup (we only delete those locals that we set before) + if (lTargetLocation != lInvalid) + { + DeleteLocalInt(oCaster, PRC_SPELL_TARGET_LOCATION_OVERRIDE); + // DeleteLocalLocation(oCaster, PRC_SPELL_TARGET_LOCATION_OVERRIDE); + } + + if (oItem != OBJECT_SELF) + DeleteLocalObject(oCaster, PRC_SPELLCASTITEM_OVERRIDE); + + if (oTarget != OBJECT_INVALID) + DeleteLocalObject(oCaster, PRC_SPELL_TARGET_OBJECT_OVERRIDE); + + if (nMetaMagic != METAMAGIC_ANY) + DeleteLocalInt(oCaster, PRC_METAMAGIC_OVERRIDE); + + if (nCasterLevel) + DeleteLocalInt(oCaster, PRC_CASTERLEVEL_OVERRIDE); + + if (nSpellID) + DeleteLocalInt(oCaster, PRC_SPELLID_OVERRIDE); + + if (nCasterClass) + DeleteLocalInt(oCaster, PRC_CASTERCLASS_OVERRIDE); + + if (nSaveDC) + DeleteLocalInt(oCaster, PRC_SAVEDC_OVERRIDE); + + if (DEBUG) DoDebug("ExecuteSpellScript: done executing script "+sScript); +} + +// ExecuteSpellScript will set PRC_SPELLID_OVERRIDE, so that we know what spell we are casting +// However, SPELL_ACID_FOG has a SpellID of zero, so we might have problems with this particular spell +void CastSpellAtObject(int nSpellID, object oTarget = OBJECT_INVALID, int nMetaMagic = METAMAGIC_ANY, int nCasterLevel = 0, int nCasterClass = 0, int nSaveDC = 0, object oItem = OBJECT_INVALID, object oCaster = OBJECT_SELF) +{ + // get the name of the impact spell script (for ExecuteScript) + // nSpellID points to a row in spells.2da + string sScript = Get2DACache("spells", "ImpactScript", nSpellID); + + if(sScript == "" || sScript == "****") + return; + + // create an invalid location + location lInvalid; + + // execute the spell script + ExecuteSpellScript(sScript, lInvalid, oTarget, nSpellID, nMetaMagic, nCasterLevel, nCasterClass, nSaveDC, oItem, oCaster); +} + +// works similar to ActionCastSpellAtLocation, only casts spell instantly (without saving throw etc. +// See description of CastSpellAtObject, how instant spells work +void CastSpellAtLocation(int nSpellID, location lTargetLocation, int nMetaMagic = METAMAGIC_ANY, int nCasterLevel = 0, int nCasterClass = 0, int nSaveDC = 0, object oItem = OBJECT_INVALID, object oCaster = OBJECT_SELF) +{ + // get the name of the impact spell script (for ExecuteScript) + string sScript = Get2DACache("spells", "ImpactScript", nSpellID); + + if(sScript == "" || sScript == "****") + return; + + // execute the spell script + ExecuteSpellScript(sScript, lTargetLocation, OBJECT_INVALID, nSpellID, nMetaMagic, nCasterLevel, nCasterClass, nSaveDC, oItem, oCaster); +} + +void ApplyOnHitCastSpellSubType(int iSubType, object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF) +{ + // get the spellID of the onhitspell + int iSpellID = StringToInt( Get2DACache("iprp_onhitspell", "SpellIndex", iSubType) ); + + // now execute the impact spell script + CastSpellAtObject(iSpellID, oTarget, METAMAGIC_ANY, 0, 0, 0, oItem, oCaster); +} + +void ApplyOnHitDarkfire(object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF) +{ + ApplyOnHitCastSpellSubType(IP_CONST_ONHIT_CASTSPELL_ONHIT_DARKFIRE, oTarget, oItem, oCaster); +} + +void ApplyOnHitFlameWeapon(object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF) +{ + ApplyOnHitCastSpellSubType(IP_CONST_ONHIT_CASTSPELL_ONHIT_FIREDAMAGE, oTarget, oItem, oCaster); +} + +void ApplyOnHitUniquePower(object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF) +{ + location lInvalid; + // ApplyOnHitCastSpellSubType(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, oTarget, METAMAGIC_ANY, 0, oItem, oCaster); + // unique power hardwired to "prc_onhitcast". If we want to go through the 2das, we should revert to the commented out line of code above + ExecuteSpellScript("prc_onhitcast", lInvalid, oTarget, 0, METAMAGIC_ANY, 0, 0, 0, oItem, oCaster); +} + +void ApplyAllOnHitCastSpellsOnItem(object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF) +{ + int iSubType; + int iNr = 0; + if(!array_exists(oCaster, "ohspl")) + array_create(oCaster, "ohspl"); + + // remember the item that was passed to the function (in case it is invalid we simply pass it through to the function that does the spells) + object oItemPassed = oItem; + + // we need an item in order to cycle over item properties + // if OBJECT_INVALID was given, we must use the "standard" logic in PRCGetSpellCastItem to determine the item + if (oItem == OBJECT_SELF) + oItem = PRCGetSpellCastItem(oCaster); + + itemproperty ip = GetFirstItemProperty(oItem); + + while(GetIsItemPropertyValid(ip)) + { +// DoDebug("ApplyAllOnHitCastSpellsExcludingSubType: found " + DebugIProp2Str(ip)); + if (GetItemPropertyType(ip) ==ITEM_PROPERTY_ONHITCASTSPELL) + { + // retrieve the spell ID + iSubType = GetItemPropertySubType(ip); + // we found a new onhit spell, so increment iNr + iNr++; + // store the spell ID in an array and execute the spell later, this is safer than trying to execute the spell script directly + // lets hope that nobody else uses our name "ohspl" for the array + array_set_int(oCaster, "ohspl", iNr, iSubType); + } + ip = GetNextItemProperty(oItem); + } + + // now execute the spell scripts (note that the local array will not be deleted) + while (iNr) + { + iSubType = array_get_int(oCaster, "ohspl", iNr); +//DoDebug("ApplyAllOnHitCastSpellsExcludingSubType: executing onhitcastspell subtype # " + IntToString(iSubType)); + ApplyOnHitCastSpellSubType(iSubType, oTarget, oItemPassed, oCaster); + iNr--; + } + array_delete(oCaster, "ohspl"); +} + +void ApplyAllOnHitCastSpellsOnItemExcludingSubType(int iExcludeSubType, object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF) +{ + int iSubType; + int iNr = 0; + if(!array_exists(oCaster, "ohspl")) + array_create(oCaster, "ohspl"); + + // remember the item that was passed to the function (in case it is invalid we pass it through to the spell cast functions) + object oItemPassed = oItem; + + if (oItem == OBJECT_SELF) + { + oItem = PRCGetSpellCastItem(oCaster); +//DoDebug("ApplyAllOnHitCastSpellsOnItemExcludingSubType: item = OBJECT_SELF, determining item by standard logic, item = " +GetName(oItem)); + } + + itemproperty ip = GetFirstItemProperty(oItem); + + while(GetIsItemPropertyValid(ip)) + { +// DoDebug("ApplyAllOnHitCastSpellsExcludingSubType: found " + DebugIProp2Str(ip)); + if (GetItemPropertyType(ip) ==ITEM_PROPERTY_ONHITCASTSPELL) + { + iSubType = GetItemPropertySubType(ip); + if(iSubType == iExcludeSubType) // if(iSubType ==IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER) // == 125 + { + ip = GetNextItemProperty(oItem); + continue; //skip over OnHit:CastSpell:UniquePower otherwise it would TMI. + } + // we found a new onhit spell, so increment iNr + iNr++; + // store the spell ID in an array and execute the spell later, this is safer than trying to execute the spell script directly + // lets hope that nobody else uses our name "ohspl" for the array + array_set_int(oCaster, "ohspl", iNr, iSubType); + } + ip = GetNextItemProperty(oItem); + } + + // now execute the spell scripts (note that the local array will not be deleted) + while (iNr) + { + iSubType = array_get_int(oCaster, "ohspl", iNr); +//DoDebug("ApplyAllOnHitCastSpellsExcludingSubType: executing onhitcastspell subtype # " + IntToString(iSubType)); + ApplyOnHitCastSpellSubType(iSubType, oTarget, oItemPassed, oCaster); + iNr--; + } + array_delete(oCaster, "ohspl"); +} + +// returns true, if oItem has at least one onhitcast spell (of any subtype) +int GetHasOnHitCastSpell(object oItem) +{ + itemproperty ip = GetFirstItemProperty(oItem); + + while(GetIsItemPropertyValid(ip)) + { + if (GetItemPropertyType(ip) ==ITEM_PROPERTY_ONHITCASTSPELL) + { + return TRUE; + } + ip = GetNextItemProperty(oItem); + } + return FALSE; +} + +// returns true, if oItem has an onhitcast spell with the given subtype +int GetHasOnHitCastSpellSubType(int iSubType, object oItem) +{ + itemproperty ip = GetFirstItemProperty(oItem); + + while(GetIsItemPropertyValid(ip)) + { + + if (GetItemPropertyType(ip) ==ITEM_PROPERTY_ONHITCASTSPELL + && GetItemPropertySubType(ip) == iSubType) + { + return TRUE; + } + ip = GetNextItemProperty(oItem); + } + return FALSE; +} + +// returns True, if we have the onhit flame weapon spell on the item +int GetHasOnHitFlameWeapon(object oItem) +{ + return GetHasOnHitCastSpellSubType(IP_CONST_ONHIT_CASTSPELL_ONHIT_FIREDAMAGE, oItem); +} + +// returns True, if we have the onhit darkfire spell on the item +int GetHasOnHitDarkfire(object oItem) +{ + return GetHasOnHitCastSpellSubType(IP_CONST_ONHIT_CASTSPELL_ONHIT_DARKFIRE, oItem); +} + +// returns True, if we have the onhit unique power spell on the item +int GetHasOnHitUniquePower(object oItem) +{ + return GetHasOnHitCastSpellSubType(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, oItem); +} + + +int GetIsPrcOnhitcastRunning(object oSpellOrigin = OBJECT_SELF) +{ + return GetLocalInt(oSpellOrigin, "prc_ohc"); +} + + +// to be used only in on-hit cast spell scripts, in order to route the spell through the unique power script (prc_onhitcast) +int ContinueOnHitCastSpell(object oSpellOrigin = OBJECT_SELF) +{ + // if the local int "frc_ohc" is on, then we never route the spell through prc_onhitcast + // rather we continue the execution of the onhitcast script; so return True in this case + if (GetLocalInt(oSpellOrigin, "frc_ohc")) + { + // signal to caller that it can continue execution (no rerouting to prc_onhitcast) + return TRUE; + } + + // now check whether we were called from prc_onhitcast + int bCalledByPRC = GetIsPrcOnhitcastRunning(oSpellOrigin); + + // if not, call prc_onhitcast + if (!bCalledByPRC) + { + if (DEBUG) DoDebug("onhitcast spell script not called through prc_onhitcast - now routing to prc_onhitcast"); + ExecuteScript("prc_onhitcast", oSpellOrigin); + } + // signal to calling function, whether it should terminate execution, because we rerouted the call (e.g. bCalledByPRC=FALSE) + // or whether it should continue execution, because we were called from prc_onhitcast (e.g. bCalledByPRC=TRUE) + return bCalledByPRC; +} + + +// Checks, whether the spell just running is an onhitcast spell, cast from an item (weapon or armor) during an attack action +// Due to Biowares buggy implementation the check is not 100% reliable +int GetIsOnHitCastSpell(object oSpellTarget = OBJECT_INVALID, object oSpellCastItem = OBJECT_SELF, object oSpellOrigin = OBJECT_SELF) +{ + // determine spell cast item (if not already given) + if (oSpellCastItem == OBJECT_SELF) + oSpellCastItem = PRCGetSpellCastItem(oSpellOrigin); + + // spell cast item must be valid (but it could still be an item from a previous item spell) + if (!GetIsObjectValid(oSpellCastItem)) + { + if (DEBUG) DoDebug("GetIsOnHitCastSpell: no valid spell cast item, returning FALSE"); + return FALSE; + } + + // onhitcasting affects weapons and armor; find out which + int iBaseType = GetBaseItemType(oSpellCastItem); + + object oAttacker; + object oDefender; + int iWeaponType; + + // is the spellcast item an armor? + // Then it could be an onhitcast event from the armor of the defender + // the aurora engine executes the onhitcast spell in the context of the bearer of the armor, e.g. the defender + if (iBaseType == BASE_ITEM_ARMOR) + { + + // find the target, if not already given + if (oSpellTarget == OBJECT_INVALID) + oSpellTarget = PRCGetSpellTargetObject(oSpellOrigin); + + // the spell target of the armor onhitspell is the melee attacker (e.g. oSpellTarget = melee attacker). + // The aurora engine exeutes the onhit spell in the context of the melee defender (e.g. oSpellOrigin = melee defender) + oAttacker = oSpellTarget; + oDefender = oSpellOrigin; + + if (DEBUG) DoDebug("GetIsOnHitCastSpell: item "+GetName(oSpellCastItem)+" is armor; attacker = "+GetName(oAttacker)+", defender = "+GetName(oDefender)); + } + // is the spell type item a weapon? + else if (iWeaponType == StringToInt(Get2DACache("baseitems", "WeaponType", iBaseType))) + { + // determine the target, if not already given + if (oSpellTarget == OBJECT_INVALID) + oSpellTarget = PRCGetSpellTargetObject(oSpellOrigin); + + oAttacker = oSpellOrigin; + oDefender = oSpellTarget; + + if (DEBUG) DoDebug("GetIsOnHitCastSpell: item "+GetName(oSpellCastItem)+" is weapon [#"+IntToString(iWeaponType)+"]; attacker = "+GetName(oAttacker)+", defender = "+GetName(oDefender)); + } + else + { + if (DEBUG) DoDebug("GetIsOnHitCastSpell: item "+GetName(oSpellCastItem)+" is neither weapon nor armor; returning FALSE"); + return FALSE; + } + + + // the spell origin must possess the item that cast the spell (at least for the aurora engine, in prc_inc_combat that may differ) + if (GetItemPossessor(oSpellCastItem) != oSpellOrigin) + { + if (DEBUG) DoDebug("GetIsOnHitCastSpell: the spell cast item is not in the possession of the creature in which context the spell is executed"); + return FALSE; + } + + // the attacker must be physically attacking (only then onhitcasting makes sense) + // however, Bioware seems to set the action to ACTION_INVALID during the spell script + int iAction = GetCurrentAction(oAttacker); + if (DEBUG) DoDebug("GetIsOnHitCastSpell: current action of attacker = "+IntToString(GetCurrentAction(oAttacker))); + + if (iAction != ACTION_INVALID && iAction != ACTION_ATTACKOBJECT) + { + if (DEBUG) DoDebug("GetIsOnHitCastSpell: current action of attacker = "+IntToString(GetCurrentAction(oAttacker))+" is not compatible with onhitcasting, return FALSE"); + return FALSE; + } + + // the attacker should actually be (melee) attacking the defender + if (GetAttackTarget(oAttacker) != oDefender) + { + if (DEBUG) DoDebug("GetIsOnHitCastSpell: melee attacker of onhitcast spell is not attacking the melee defender, return FALSE"); + return FALSE; + } + + // if we made it here, it is an onhitcast spell + return TRUE; +} + +// this will force the execution of any onhitcast spell script, even if it is set up to be +// routed through prc_onhitcast (see the description for the function ContinueOnHitCastSpell) +void ForceExecuteSpellScript(string sScript, location lTargetLocation, object oTarget = OBJECT_INVALID, int nSpellID = 0, int nMetaMagic = METAMAGIC_ANY, int nCasterLevel = 0, int nCasterClass = 0, int nSaveDC = 0, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF) +{ + // set the local int, that tells the spell script that we want to force its execution + SetLocalInt(oCaster, "frc_ohc", TRUE); + + // now call the spell script + ExecuteSpellScript(sScript, lTargetLocation, oTarget, nSpellID, nMetaMagic, nCasterLevel, nCasterClass, nSaveDC, oItem, oCaster); + + // delete the local int for forced execution + DeleteLocalInt(oCaster, "frc_ohc"); +} + +// this will force the instant execution of any onhitcast spell script with nSpellID, as given in spells.2da +// The spell script will be executed, even if it has been set up to be routed through prc_onhitcast +// (for more info, see the description of the function ContinueOnHitCastSpell) +void ForceCastSpellAtObject(int nSpellID, object oTarget = OBJECT_INVALID, int nMetaMagic = METAMAGIC_ANY, int nCasterLevel = 0, int nCasterClass = 0, int nSaveDC = 0, object oItem = OBJECT_INVALID, object oCaster = OBJECT_SELF) +{ + // get the name of the impact spell script (for ExecuteSpellScript) + string sScript = Get2DACache("spells", "ImpactScript", nSpellID); + + if(sScript == "" || sScript == "****") + return; + + // create an invalid location + location lInvalid; + + // now force-execute the spell script + ForceExecuteSpellScript(sScript, lInvalid, oTarget, nSpellID, nMetaMagic, nCasterLevel, nCasterClass, nSaveDC, oItem, oCaster); + +} + +// this will force the instant execution of any AoE onhitcast spell script with nSpellID, as given in spells.2da +// The spell script will be executed, even if it has been set up to be routed through prc_onhitcast +// (for more info, see the description of the function ContinueOnHitCastSpell) +void ForceCastSpellAtLocation(int nSpellID, location lTargetLocation, int nMetaMagic = METAMAGIC_ANY, int nCasterLevel = 0, int nCasterClass = 0, int nSaveDC = 0, object oItem = OBJECT_INVALID, object oCaster = OBJECT_SELF) +{ + // get the name of the impact spell script (for ExecuteSpellScript) + string sScript = Get2DACache("spells", "ImpactScript", nSpellID); + + if(sScript == "" || sScript == "****") + return; + + // now force-execute the spell script + ForceExecuteSpellScript(sScript, lTargetLocation, OBJECT_INVALID, nSpellID, nMetaMagic, nCasterLevel, nCasterClass, nSaveDC, oItem, oCaster); + +} + +// forces the application of the onhitcast spell (situated on oItem) with subtype iSubType to oTarget, in the context of oCaster +void ForceApplyOnHitCastSpellSubType(int iSubType, object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF) +{ + // get the spellID of the onhitspell + int iSpellID = StringToInt( Get2DACache("iprp_onhitspell", "SpellIndex", iSubType) ); + + // now force-execute the impact spell script + ForceCastSpellAtObject(iSpellID, oTarget, METAMAGIC_ANY, 0, 0, 0, oItem, oCaster); +} + +// applies all on hit cast spells on oItem to oTarget in the context of oCaster +// will force apply the spell scripts even if they have internally been set up to be routed through prc_onhitcast +// (for more info, see the description of the function ContinueOnHitCastSpell) +// This is the safe way to do this, without interfering with any other loops over item properties in the spell scripts that are called +void ForceApplyAllOnHitCastSpellsOnItem(object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF) +{ + // set the local int, that tells the spell scripts that we want to force their execution + SetLocalInt(oCaster, "frc_ohc", TRUE); + + // now apply all onhitcast spells on the item + ApplyAllOnHitCastSpellsOnItem(oTarget, oItem, oCaster); + + // delete the local int for forced execution + DeleteLocalInt(oCaster, "frc_ohc"); +} + +// applies all on hit cast spells on oItem, excluding any spell-subtype given in iExcludeSubType, to oTarget in the context of oCaster +// will force apply the spell scripts even if they have internally been set up to be routed through prc_onhitcast +// (for more info, see the description of the function ContinueOnHitCastSpell) +// This is the safe way to do this, without interfering with any other loops over item properties in the spell scripts that are called +void ForceApplyAllOnHitCastSpellsOnItemExcludingSubType(int iExcludeSubType, object oTarget = OBJECT_INVALID, object oItem = OBJECT_SELF, object oCaster = OBJECT_SELF) +{ + // set the local int, that tells the spell scripts that we want to force their execution + SetLocalInt(oCaster, "frc_ohc", TRUE); + + // now apply all onhitcast spells on the item + ApplyAllOnHitCastSpellsOnItemExcludingSubType(iExcludeSubType, oTarget, oItem, oCaster); + + // delete the local int for forced execution + DeleteLocalInt(oCaster, "frc_ohc"); +} + +const string PRC_CUSTOM_ONHIT_USECOUNT = "prc_custom_onhit_usecount"; +const string PRC_CUSTOM_ONHIT_DONOTREMOVE = "prc_custom_onhit_donotremove"; +const string PRC_CUSTOM_ONHIT_SIGNATURE = "prc_custom_onhit_signature_"; + +int HasOnHitUniquePowerOnHit(object oItem) +{ + int bFound = FALSE; + itemproperty iProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(iProperty)) + { + if (GetItemPropertyType(iProperty) == ITEM_PROPERTY_ONHITCASTSPELL && + GetItemPropertySubType(iProperty) == IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER && + GetItemPropertyDurationType(iProperty) == DURATION_TYPE_PERMANENT + ) + { + bFound = TRUE; + break; + } + iProperty = GetNextItemProperty(oItem); + } + return FALSE; +} + +void Add_OnHitUniquePower(object oItem, string sCallerSignature) +{ + int nUseCount; + itemproperty iProperty; + + if (!GetLocalInt(oItem, PRC_CUSTOM_ONHIT_SIGNATURE + sCallerSignature)) //Prevent double-add by same caller + { + nUseCount = GetLocalInt(oItem, PRC_CUSTOM_ONHIT_USECOUNT); + SetLocalInt(oItem, PRC_CUSTOM_ONHIT_USECOUNT, nUseCount+1); + if (!nUseCount && HasOnHitUniquePowerOnHit(oItem)) + SetLocalInt(oItem, PRC_CUSTOM_ONHIT_DONOTREMOVE, TRUE); + + //To work properly, all other OnHit properties must be added a after the OnHit: Unique Power property-- + //Make sure this is the case by removing all of them and adding them back properly. + //This is necessary because only the first OnHit property actually fires; + //ours will fire the others, but the others won't allow ours to fire unless ours is first. + + iProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(iProperty)) + { + if (GetItemPropertyType(iProperty) == ITEM_PROPERTY_ONHITCASTSPELL && + GetItemPropertyDurationType(iProperty) == DURATION_TYPE_PERMANENT + ) + { + RemoveItemProperty(oItem, iProperty); + if (GetItemPropertySubType(iProperty) != IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER) + DelayCommand(0.0, AddItemProperty(GetItemPropertyDurationType(iProperty), iProperty, oItem)); + } + iProperty = GetNextItemProperty(oItem); + } + + //Add our On Hit Cast Spell: Unique Power property (which will fire the others as well) + + iProperty = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1); + IPSafeAddItemProperty(oItem, iProperty); + + SetLocalInt(oItem, PRC_CUSTOM_ONHIT_SIGNATURE + sCallerSignature, TRUE); + } +} + +void Remove_OnHitUniquePower(object oItem, string sCallerSignature) +{ + int nUseCount; + itemproperty iProperty; + + if (GetLocalInt(oItem, PRC_CUSTOM_ONHIT_SIGNATURE + sCallerSignature)) //Prevent remove for caller that didn't add + { + nUseCount = GetLocalInt(oItem, PRC_CUSTOM_ONHIT_USECOUNT); + SetLocalInt(oItem, PRC_CUSTOM_ONHIT_USECOUNT, nUseCount-1); + if (nUseCount == 1 && !GetLocalInt(oItem, PRC_CUSTOM_ONHIT_DONOTREMOVE)) + { + iProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(iProperty)) + { + if (GetItemPropertyType(iProperty) == ITEM_PROPERTY_ONHITCASTSPELL && + GetItemPropertySubType(iProperty) == IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER && + GetItemPropertyDurationType(iProperty) == DURATION_TYPE_PERMANENT + ) + RemoveItemProperty(oItem, iProperty); + iProperty = GetNextItemProperty(oItem); + } + } + + SetLocalInt(oItem, PRC_CUSTOM_ONHIT_SIGNATURE + sCallerSignature, FALSE); + } +} diff --git a/src/include/prc_inc_racial.nss b/src/include/prc_inc_racial.nss new file mode 100644 index 0000000..101d794 --- /dev/null +++ b/src/include/prc_inc_racial.nss @@ -0,0 +1,103 @@ +// Useful includes for dealing with races. + +//function prototypes +//use this to get class/race adjusted racial type back to one of the bioware bases +//includes shifter changed forms +int MyPRCGetRacialType(object oCreature); + +// Guess what this does +int GetIsWarforged(object oCreature); +// DoRacialSLA() moved to prc_inc_core as it is used by other spell-like scripts, not just race specific + + +#include "prc_class_const" +#include "prc_feat_const" +#include "prc_racial_const" + +int MyPRCGetRacialType(object oCreature) +{ + // Shadow Sun Ninja - Ballance of Light and Dark + if(GetLocalInt(oCreature, "SSN_BALANCE_LD")) + return RACIAL_TYPE_UNDEAD; + if(GetHasFeat(FEAT_UNDEAD_HD, oCreature)) + return RACIAL_TYPE_UNDEAD; + + // Class-based racial type changes + if(GetLevelByClass(CLASS_TYPE_LICH,oCreature) > 3) + return RACIAL_TYPE_UNDEAD; + if(GetLevelByClass(CLASS_TYPE_MONK, oCreature) > 19 + || GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCreature) > 9 + || GetLevelByClass(CLASS_TYPE_ACOLYTE, oCreature) > 9 + || GetLevelByClass(CLASS_TYPE_INCANDESCENT_CHAMPION, oCreature) > 9) + return RACIAL_TYPE_OUTSIDER; + if(GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCreature) > 9) + return RACIAL_TYPE_OOZE; + if(GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oCreature) > 9) + return RACIAL_TYPE_ELEMENTAL; + if(GetLevelByClass(CLASS_TYPE_DRAGONDISCIPLE, oCreature) > 9) + return RACIAL_TYPE_DRAGON; + if (GetLevelByClass(CLASS_TYPE_WEREWOLF, oCreature) > 9) + return RACIAL_TYPE_SHAPECHANGER; + if (GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCreature) > 9) + return RACIAL_TYPE_FEY; + if (GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCreature) > 7) + return RACIAL_TYPE_PLANT; + + // PRC Shifting Polymorph -caused racial type override. Stored with offset +1 to differentiate value 0 from non-existence + int nShiftingOverrideRace = GetLocalInt(oCreature, "PRC_ShiftingOverride_Race"); + if(nShiftingOverrideRace) + return nShiftingOverrideRace - 1; + + // Race pack racial type feats + if(GetHasFeat(FEAT_OUTSIDER, oCreature)) + return RACIAL_TYPE_OUTSIDER; + if(GetHasFeat(FEAT_ELEMENTAL, oCreature)) + return RACIAL_TYPE_ELEMENTAL; + if(GetHasFeat(FEAT_LIVING_CONSTRUCT, oCreature)) + return RACIAL_TYPE_CONSTRUCT; + if(GetHasFeat(FEAT_PLANT, oCreature)) + return RACIAL_TYPE_PLANT; + if(GetHasFeat(FEAT_ABERRATION, oCreature)) + return RACIAL_TYPE_ABERRATION; + if(GetHasFeat(FEAT_DRAGON, oCreature)) + return RACIAL_TYPE_DRAGON; + if(GetHasFeat(FEAT_SHAPECHANGER, oCreature)) + return RACIAL_TYPE_SHAPECHANGER; + if(GetHasFeat(FEAT_GIANT, oCreature)) + return RACIAL_TYPE_GIANT; + if(GetHasFeat(FEAT_FEY, oCreature)) + return RACIAL_TYPE_FEY; + if(GetHasFeat(FEAT_MONSTEROUS, oCreature)) + return RACIAL_TYPE_HUMANOID_MONSTROUS; + if(GetHasFeat(FEAT_BEAST, oCreature)) + return RACIAL_TYPE_BEAST; + if(GetHasFeat(FEAT_DWARVEN, oCreature)) + return RACIAL_TYPE_DWARF; + if(GetHasFeat(FEAT_ELVEN, oCreature)) + return RACIAL_TYPE_ELF; + if(GetHasFeat(FEAT_GNOMISH, oCreature)) + return RACIAL_TYPE_GNOME; + if(GetHasFeat(FEAT_HALFLING, oCreature)) + return RACIAL_TYPE_HALFLING; + if(GetHasFeat(FEAT_ORCISH, oCreature)) + return RACIAL_TYPE_HUMANOID_ORC; + if(GetHasFeat(FEAT_HUMAN, oCreature)) + return RACIAL_TYPE_HUMAN; + if(GetHasFeat(FEAT_GOBLINOID, oCreature)) + return RACIAL_TYPE_HUMANOID_GOBLINOID; + if(GetHasFeat(FEAT_REPTILIAN, oCreature)) + return RACIAL_TYPE_HUMANOID_REPTILIAN; + if(GetHasFeat(FEAT_VERMIN, oCreature)) + return RACIAL_TYPE_VERMIN; + + return GetRacialType(oCreature); +} + +int GetIsWarforged(object oCreature) +{ + int nRace = GetRacialType(oCreature); + + if (nRace == RACIAL_TYPE_WARFORGED || nRace == RACIAL_TYPE_WARFORGED_CHARGER) return TRUE; + + return FALSE; +} \ No newline at end of file diff --git a/src/include/prc_inc_s_det.nss b/src/include/prc_inc_s_det.nss new file mode 100644 index 0000000..907154e --- /dev/null +++ b/src/include/prc_inc_s_det.nss @@ -0,0 +1,496 @@ +//:://///////////////////////////////////////////// +//:: Include file for Detect Alignment spells +//:: prc_inc_s_det +//::////////////////////////////////////////////// +/** @file + +This file handles the Detect Evil/Law/Chaos/Good series of spells +If there are other detect spells, they can probably be put in here too. + + @author Primogenitor +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +#include "prc_inc_spells" +#include "prc_add_spell_dc" +//#include "inc_draw" Provided by inc_utility +//#include "inc_utility" Provided by prc_alterations + +//this is the main detection function +void DetectAlignmentRound(int nRound, location lLoc, int nGoodEvil, int nLawChaos, string sAura, int nBeamVFX); + +// Detect Magic +void DetectMagicAura(int nRound, location lLoc, int nBeamVFX, float fDist); + +const int AURA_STRENGTH_DIM = 1; +const int AURA_STRENGTH_FAINT = 2; +const int AURA_STRENGTH_MODERATE = 3; +const int AURA_STRENGTH_STRONG = 4; +const int AURA_STRENGTH_OVERWHELMING = 5; + +int GetIsUndetectable(object oTarget, object oCaster)//fix this +{ + int nUndetectable = FALSE; + if(GetHasSpellEffect(SPELL_UNDETECTABLE_ALINGMENT, oTarget) || + GetHasSpellEffect(SPELL_NONDETECTION, oTarget) || + GetLevelByClass(CLASS_TYPE_WILD_MAGE, oTarget) >= 6 || + GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oTarget) >= 5 || + GetHasSpellEffect(MELD_ENIGMA_HELM, oTarget) || + GetRacialType(oTarget) == RACIAL_TYPE_SKULK) // MELD_ENIGMA_HELM + { + int nDC = PRCGetSaveDC(OBJECT_SELF, oTarget, SPELL_UNDETECTABLE_ALINGMENT); + //if you dont beat the saving throw of the spell, you cant detect them + if(!PRCMySavingThrow(SAVING_THROW_WILL, oCaster, nDC, SAVING_THROW_TYPE_NONE)) + nUndetectable = TRUE; + } + return nUndetectable; +} + +string AlignmentAuraLocal(int nGoodEvil, int nLawChaos) +{ + if (nGoodEvil == ALIGNMENT_GOOD) return "PRC_AURA_GOOD"; + else if(nGoodEvil == ALIGNMENT_EVIL) return "PRC_AURA_EVIL"; + else if(nLawChaos == ALIGNMENT_LAWFUL) return "PRC_AURA_LAW"; + else if(nLawChaos == ALIGNMENT_CHAOTIC) return "PRC_AURA_CHAOS"; + + return ""; +} + +int GetAuraStrength(object oTarget, int nGoodEvil, int nLawChaos)//add new classes +{ + int nPower = GetLocalInt(oTarget, AlignmentAuraLocal(nGoodEvil, nLawChaos)); + + // Only creatures proceed past this point. + if (GetObjectType(oTarget) != OBJECT_TYPE_CREATURE) + return nPower; + + int nRace = MyPRCGetRacialType(oTarget); + if(nRace == RACIAL_TYPE_OUTSIDER) + nPower = GetHitDice(oTarget); + else if((nRace == RACIAL_TYPE_UNDEAD && nGoodEvil==ALIGNMENT_EVIL)//undead only for evils + || nRace == RACIAL_TYPE_ELEMENTAL) + nPower = GetHitDice(oTarget)/2; + else + nPower = GetHitDice(oTarget)/5; + if(GetPrCAdjustedCasterLevel(CLASS_TYPE_CLERIC, oTarget) > nPower) + nPower = GetPrCAdjustedCasterLevel(CLASS_TYPE_CLERIC, oTarget); + if(GetPrCAdjustedCasterLevel(CLASS_TYPE_ANTI_PALADIN, oTarget) > nPower) + nPower = GetPrCAdjustedCasterLevel(CLASS_TYPE_ANTI_PALADIN, oTarget); + +/*CLASS_TYPE_CLERIC +CLASS_TYPE_ANTI_PALADIN +Dragon shaman +blackguard*/ + return nPower; +} + +string GetNounForStrength(int nStrength) +{ + switch(nStrength) + { + case AURA_STRENGTH_DIM: return GetStringByStrRef(16832039); //"dimly" + case AURA_STRENGTH_FAINT: return GetStringByStrRef(16832040); //"faintly" + case AURA_STRENGTH_MODERATE: return GetStringByStrRef(16832041); //"moderately" + case AURA_STRENGTH_STRONG: return GetStringByStrRef(16832042); //"strongly" + case AURA_STRENGTH_OVERWHELMING: return GetStringByStrRef(16832043); //"overwhelmingly" + } + return ""; +} + +void ApplyEffectDetectAuraOnObject(int nStrength, object oTarget, int nVFX) +{ + location lLoc = GetLocation(oTarget); + //float fRadius = (IntToFloat(GetCreatureSize(oTarget))*0.5)+0.5; //this is graphics related, not rules + float fRadius = StringToFloat(Get2DACache("appearance", "CREPERSPACE", GetAppearanceType(oTarget))); + location lCenter; + vector vCenter = GetPositionFromLocation(lLoc); + switch(nStrength) + { + //yes fallthroughs here + case AURA_STRENGTH_OVERWHELMING: + vCenter.z += (fRadius/2.0); + lCenter = Location(GetAreaFromLocation(lLoc), vCenter, 0.0); + BeamPentacle(DURATION_TYPE_TEMPORARY, nVFX, lCenter, fRadius, 6.2f, "", 1.0f, 0.0f); + case AURA_STRENGTH_STRONG: + vCenter.z += (fRadius/2.0); + lCenter = Location(GetAreaFromLocation(lLoc), vCenter, 0.0); + BeamPentacle(DURATION_TYPE_TEMPORARY, nVFX, lCenter, fRadius, 6.2f, "", 1.0f, 0.0f); + case AURA_STRENGTH_MODERATE: + vCenter.z += (fRadius/2.0); + lCenter = Location(GetAreaFromLocation(lLoc), vCenter, 0.0); + BeamPentacle(DURATION_TYPE_TEMPORARY, nVFX, lCenter, fRadius, 6.2f, "", 1.0f, 0.0f); + case AURA_STRENGTH_FAINT: + vCenter.z += (fRadius/2.0); + lCenter = Location(GetAreaFromLocation(lLoc), vCenter, 0.0); + BeamPentacle(DURATION_TYPE_TEMPORARY, nVFX, lCenter, fRadius, 6.2f, "", 1.0f, 0.0f); + case AURA_STRENGTH_DIM: + vCenter.z += (fRadius/2.0); + lCenter = Location(GetAreaFromLocation(lLoc), vCenter, 0.0); + BeamPentacle(DURATION_TYPE_TEMPORARY, nVFX, lCenter, fRadius, 6.2f, "", 1.0f, 0.0f); + } +} + +void DetectAlignmentRound(int nRound, location lLoc, int nGoodEvil, int nLawChaos, string sAura, int nBeamVFX) +{ + object oCaster = OBJECT_SELF; + int nSpellID = GetSpellId(); + + if(!GetHasSpellEffect(nSpellID, oCaster)) + return; + + //if concentration is broken, abort + if(GetBreakConcentrationCheck(oCaster) && nRound != 0) + { + FloatingTextStringOnCreature(GetStringByStrRef(16832000)/*"Concentration broken."*/, oCaster, FALSE); + PRCRemoveEffectsFromSpell(oCaster, nSpellID); + return; + } + + location lNew = GetLocation(oCaster); + + //if you move/turn, restart the process / abort if moved more than 2 m + if(lLoc != lNew) + { + if(GetDistanceBetweenLocations(lLoc, lNew) > 2.0) + { + PRCRemoveEffectsFromSpell(oCaster, nSpellID); + FloatingTextStringOnCreature("You have moved too far, ending Detection", oCaster, FALSE); + return; + } + else + nRound = 1; + } + if(nRound < 0) + nRound = 1; + //sanity check + if(nRound > 4) + nRound = 4; + + // Generate a target location in front of us. + float fFacing = GetFacing(oCaster); + vector vPos = GetPosition(oCaster); + location lTarget = Location(GetArea(oCaster), + Vector(vPos.x + cos(fFacing), vPos.y + sin(fFacing), vPos.z), + fFacing); + + object oTest = GetFirstObjectInShape(SHAPE_SPELLCONE, 20.0, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_ITEM | OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_AREA_OF_EFFECT); + int nStrongestAura; + int nAuraCount; + while(GetIsObjectValid(oTest)) + { + if(DEBUG) DoDebug("DetectAlignmentRound() : Round = "+IntToString(nRound)+"from "+GetName(oCaster)+" of "+GetName(oTest)); + + int nUndetectable = GetIsUndetectable(oTest, oCaster); //you cannot be detected if this is true + if((GetAlignmentGoodEvil(oTest) == nGoodEvil || nGoodEvil == -1) + && (GetAlignmentLawChaos(oTest) == nLawChaos || nLawChaos == -1) + && ((sAura == GetStringByStrRef(5018)) ? MyPRCGetRacialType(oTest) == RACIAL_TYPE_UNDEAD : TRUE) + && oTest != oCaster + && !nUndetectable) + { + if(nRound == 1) + { + //presence/absence + //ApplyEffectDetectAuraOnObject(AURA_STRENGTH_MODERATE, oCaster, nBeamVFX); + FloatingTextStringOnCreature(PRCGetRGB(15,5,5) + GetStringByStrRef(16832001)// "You detect the presense of" + + " " + (nLawChaos != -1 ? // "good" and "evil" work as both substantives and adjectives, but not so for "lawful" and "chaotic" + (nLawChaos == ALIGNMENT_LAWFUL ? + GetStringByStrRef(4957) // "law" + : GetStringByStrRef(4958) // "chaos" + ) + : sAura + ) + + ".", + oCaster, FALSE); + break;//end while loop + } + + int nStrength; + int nRawStrength = GetAuraStrength(oTest, nGoodEvil, nLawChaos); + + if(nRawStrength == 0) + nStrength = AURA_STRENGTH_DIM; + else if(nRawStrength == 1) + nStrength = AURA_STRENGTH_FAINT; + else if(nRawStrength >= 2 && nRawStrength <= 4) + nStrength = AURA_STRENGTH_MODERATE; + else if(nRawStrength >= 5 && nRawStrength <= 10) + nStrength = AURA_STRENGTH_STRONG; + else if(nRawStrength >= 11) + nStrength = AURA_STRENGTH_OVERWHELMING; + + if(nRound == 2) + { + //number & strongest + nAuraCount++; + if(nStrength > nStrongestAura) + nStrongestAura = nStrength; + //if overwhelming then can stun + int nOpposingGoodEvil; + if(nGoodEvil == ALIGNMENT_EVIL) + nOpposingGoodEvil = ALIGNMENT_GOOD; + else if(nGoodEvil == ALIGNMENT_GOOD) + nOpposingGoodEvil = ALIGNMENT_EVIL; + else + nOpposingGoodEvil = -1; + int nOpposingLawChaos; + if(nLawChaos == ALIGNMENT_CHAOTIC) + nOpposingLawChaos = ALIGNMENT_LAWFUL; + else if(nLawChaos == ALIGNMENT_LAWFUL) + nOpposingLawChaos = ALIGNMENT_CHAOTIC; + else + nOpposingLawChaos = -1; + + if(nStrength == AURA_STRENGTH_OVERWHELMING + && (GetAlignmentGoodEvil(oCaster)==nOpposingGoodEvil || nOpposingGoodEvil == -1) + && (GetAlignmentLawChaos(oCaster)==nOpposingLawChaos || nOpposingLawChaos == -1) + && nRawStrength > GetHitDice(oCaster)*2) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oCaster, 6.0); + } + } + else if(nRound >= 3) + { + if(nRound == 3) + ActionDoCommand(FloatingTextStringOnCreature(PRCGetRGB(15,16-(nStrength*3),16-(nStrength*3)) + GetName(oTest) + " " + GetStringByStrRef(16832044)/*"feels"*/ + " "+GetNounForStrength(nStrength)+" "+sAura+".", oCaster, FALSE)); + //strength & location + ActionDoCommand(ApplyEffectDetectAuraOnObject(nStrength, oTest, nBeamVFX)); + } + } + oTest = GetNextObjectInShape(SHAPE_SPELLCONE, 20.0, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_ITEM | OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_AREA_OF_EFFECT); + } + if(nRound == 2) + { + //reporting + //ApplyEffectDetectAuraOnObject(nStrongestAura, oCaster, nBeamVFX); + FloatingTextStringOnCreature(PRCGetRGB(15,16-(nStrongestAura*3),16-(nStrongestAura*3)) + GetStringByStrRef(16832045)/*"You detected"*/ + " " + IntToString(nAuraCount) + " " + GetNounForStrength(nStrongestAura) + " " + sAura + " " + GetStringByStrRef(16832046)/*"auras"*/ + ".", oCaster, FALSE); + } + + //ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE, 1.0, 6.0); + nRound++; + + DelayCommand(6.0f, ActionDoCommand(DetectAlignmentRound(nRound, lNew, nGoodEvil, nLawChaos, sAura, nBeamVFX))); +} + +int GetMagicAuraStrength(object oTarget) +{ + int nPower; + effect eLook = GetFirstEffect(oTarget); + while (GetIsEffectValid(eLook)) + { + int nSpellLvl = PRCGetSpellLevelForClass(GetEffectSpellId(eLook), CLASS_TYPE_INVALID); + if (nSpellLvl > nPower) nPower = nSpellLvl; + + eLook = GetNextEffect(oTarget); + } + + return nPower; +} + +void DetectMagicAura(int nRound, location lLoc, int nBeamVFX, float fDist) +{ + object oCaster = OBJECT_SELF; + int nSpellID = GetSpellId(); + + if(!GetHasSpellEffect(nSpellID, oCaster)) + return; + + //if concentration is broken, abort + if(GetBreakConcentrationCheck(oCaster) && nRound != 0) + { + FloatingTextStringOnCreature(GetStringByStrRef(16832000)/*"Concentration broken."*/, oCaster, FALSE); + PRCRemoveEffectsFromSpell(oCaster, nSpellID); + return; + } + + location lNew = GetLocation(oCaster); + + //if you move/turn, restart the process / abort if moved more than 2 m + if(lLoc != lNew) + { + if(GetDistanceBetweenLocations(lLoc, lNew) > 2.0) + { + PRCRemoveEffectsFromSpell(oCaster, nSpellID); + FloatingTextStringOnCreature("You have moved too far, ending Detection", oCaster, FALSE); + return; + } + else + nRound = 1; + } + if(nRound < 0) + nRound = 1; + //sanity check + if(nRound > 4) + nRound = 4; + + // Generate a target location in front of us. + float fFacing = GetFacing(oCaster); + vector vPos = GetPosition(oCaster); + location lTarget = Location(GetArea(oCaster), + Vector(vPos.x + cos(fFacing), vPos.y + sin(fFacing), vPos.z), + fFacing); + + object oTest = GetFirstObjectInShape(SHAPE_SPELLCONE, fDist, lTarget, TRUE, OBJECT_TYPE_CREATURE); + int nStrongestAura; + int nAuraCount; + while(GetIsObjectValid(oTest)) + { + if(DEBUG) DoDebug("DetectMagicAura() : Round = "+IntToString(nRound)+"from "+GetName(oCaster)+" of "+GetName(oTest)); + + // You cannot be detected if this is true + if(!GetIsUndetectable(oTest, oCaster)) + { + if(nRound == 1) + { + FloatingTextStringOnCreature("You detect the presence of magic.", oCaster, FALSE); + break;//end while loop + } + + int nStrength; + int nRawStrength = GetMagicAuraStrength(oTest); + + if(nRawStrength == 0) + nStrength = AURA_STRENGTH_DIM; + else if(nRawStrength >= 1 && nRawStrength <= 3) + nStrength = AURA_STRENGTH_FAINT; + else if(nRawStrength >= 4 && nRawStrength <= 6) + nStrength = AURA_STRENGTH_MODERATE; + else if(nRawStrength >= 7 && nRawStrength <= 9) + nStrength = AURA_STRENGTH_STRONG; + else if(nRawStrength >= 10) + nStrength = AURA_STRENGTH_OVERWHELMING; + + if(nRound == 2) + { + //number & strongest + nAuraCount++; + if(nStrength > nStrongestAura) + nStrongestAura = nStrength; + } + else if(nRound >= 3) + { + if(nRound == 3) + ActionDoCommand(FloatingTextStringOnCreature(PRCGetRGB(15,16-(nStrength*3),16-(nStrength*3)) + GetName(oTest) + " feels affected by "+GetNounForStrength(nStrength)+" magic.", oCaster, FALSE)); + //strength & location + ActionDoCommand(ApplyEffectDetectAuraOnObject(nStrength, oTest, nBeamVFX)); + } + } + oTest = GetNextObjectInShape(SHAPE_SPELLCONE, fDist, lTarget, TRUE, OBJECT_TYPE_CREATURE); + } + if(nRound == 2) + { + //reporting + //ApplyEffectDetectAuraOnObject(nStrongestAura, oCaster, nBeamVFX); + FloatingTextStringOnCreature(PRCGetRGB(15,16-(nStrongestAura*3),16-(nStrongestAura*3)) + GetStringByStrRef(16832045)/*"You detected"*/ + " " + IntToString(nAuraCount) + " " + GetNounForStrength(nStrongestAura) + " magical " + GetStringByStrRef(16832046)/*"auras"*/ + ".", oCaster, FALSE); + } + + //ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE, 1.0, 6.0); + nRound++; + + DelayCommand(6.0f, ActionDoCommand(DetectMagicAura(nRound, lNew, nBeamVFX, fDist))); +} + +void DetectRaceAura(int nRound, int nRace, location lLoc, int nBeamVFX, float fDist) +{ + object oCaster = OBJECT_SELF; + int nSpellID = GetSpellId(); + + if(!GetHasSpellEffect(nSpellID, oCaster)) + return; + + //if concentration is broken, abort + if(GetBreakConcentrationCheck(oCaster) && nRound != 0) + { + FloatingTextStringOnCreature(GetStringByStrRef(16832000)/*"Concentration broken."*/, oCaster, FALSE); + PRCRemoveEffectsFromSpell(oCaster, nSpellID); + return; + } + + location lNew = GetLocation(oCaster); + + //if you move/turn, restart the process / abort if moved more than 2 m + if(lLoc != lNew) + { + if(GetDistanceBetweenLocations(lLoc, lNew) > 2.0) + { + PRCRemoveEffectsFromSpell(oCaster, nSpellID); + FloatingTextStringOnCreature("You have moved too far, ending Detection", oCaster, FALSE); + return; + } + else + nRound = 1; + } + if(nRound < 0) + nRound = 1; + //sanity check + if(nRound > 4) + nRound = 4; + + // Generate a target location in front of us. + float fFacing = GetFacing(oCaster); + vector vPos = GetPosition(oCaster); + location lTarget = Location(GetArea(oCaster), + Vector(vPos.x + cos(fFacing), vPos.y + sin(fFacing), vPos.z), + fFacing); + + object oTest = GetFirstObjectInShape(SHAPE_SPELLCONE, fDist, lTarget, TRUE, OBJECT_TYPE_CREATURE); + int nStrongestAura; + int nAuraCount; + while(GetIsObjectValid(oTest)) + { + if(DEBUG) DoDebug("DetectMagicAura() : Round = "+IntToString(nRound)+"from "+GetName(oCaster)+" of "+GetName(oTest)); + + // You cannot be detected if this is true + if(!GetIsUndetectable(oTest, oCaster) && GetObjectType(oTest) == OBJECT_TYPE_CREATURE) + { + if(nRound == 1) + { + FloatingTextStringOnCreature("You detect the presence of the chosen race.", oCaster, FALSE); + break;//end while loop + } + + int nStrength, nRawStrength; + int nCheck = MyPRCGetRacialType(oTest); + // Detect Living is -1 + if(nRace == nCheck || (nRace == -1 && PRCGetIsAliveCreature(oTest))) + nRawStrength = GetHitDice(oTest); + + if(nRawStrength >= 0 && nRawStrength <= 1) + nStrength = AURA_STRENGTH_FAINT; + else if(nRawStrength >= 2 && nRawStrength <= 4) + nStrength = AURA_STRENGTH_MODERATE; + else if(nRawStrength >= 5 && nRawStrength <= 10) + nStrength = AURA_STRENGTH_STRONG; + else if(nRawStrength >= 11) + nStrength = AURA_STRENGTH_OVERWHELMING; + + if(nRound == 2) + { + //number & strongest + nAuraCount++; + if(nStrength > nStrongestAura) + nStrongestAura = nStrength; + } + else if(nRound >= 3) + { + if(nRound == 3) + ActionDoCommand(FloatingTextStringOnCreature(PRCGetRGB(15,16-(nStrength*3),16-(nStrength*3)) + GetName(oTest) + " finds the greatest aura is "+GetNounForStrength(nStrength)+".", oCaster, FALSE)); + //strength & location + ActionDoCommand(ApplyEffectDetectAuraOnObject(nStrength, oTest, nBeamVFX)); + } + } + oTest = GetNextObjectInShape(SHAPE_SPELLCONE, fDist, lTarget, TRUE, OBJECT_TYPE_CREATURE); + } + if(nRound == 2) + { + //reporting + //ApplyEffectDetectAuraOnObject(nStrongestAura, oCaster, nBeamVFX); + FloatingTextStringOnCreature(PRCGetRGB(15,16-(nStrongestAura*3),16-(nStrongestAura*3)) + GetStringByStrRef(16832045)/*"You detected"*/ + " " + IntToString(nAuraCount) + " " + GetNounForStrength(nStrongestAura) + " racial " + GetStringByStrRef(16832046)/*"auras"*/ + ".", oCaster, FALSE); + } + + //ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE, 1.0, 6.0); + nRound++; + + DelayCommand(6.0f, ActionDoCommand(DetectRaceAura(nRound, nRace, lNew, nBeamVFX, fDist))); +} \ No newline at end of file diff --git a/src/include/prc_inc_sb_const.nss b/src/include/prc_inc_sb_const.nss new file mode 100644 index 0000000..b523806 --- /dev/null +++ b/src/include/prc_inc_sb_const.nss @@ -0,0 +1,20 @@ +/* + Constants file for the Spellbook functions + Linked to via prc_inc_core for wider access +*/ + + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const int SPELLBOOK_IPRP_FEATS_START = 5000; +const int SPELLBOOK_IPRP_FEATS_END = 11999; + +// range #2 +const int SPELLBOOK_IPRP_FEATS_START2 = 18001; +const int SPELLBOOK_IPRP_FEATS_END2 = 24704; + +const int SPELLBOOK_TYPE_INVALID = 0; +const int SPELLBOOK_TYPE_PREPARED = 1; +const int SPELLBOOK_TYPE_SPONTANEOUS = 2; diff --git a/src/include/prc_inc_sbheir.nss b/src/include/prc_inc_sbheir.nss new file mode 100644 index 0000000..aa29bf8 --- /dev/null +++ b/src/include/prc_inc_sbheir.nss @@ -0,0 +1,169 @@ +//:://///////////////////////////////////////////// +//:: Shining Blade of Heironeous include +//:: prc_inc_sbheir +//:://///////////////////////////////////////////// + +#include "prc_inc_util" +#include "inc_item_props" + +const int SHINING_BLADE_LEVEL_SHOCK = 1; +const int SHINING_BLADE_LEVEL_HOLY = 2; +const int SHINING_BLADE_LEVEL_BRILLIANT = 3; + +const string PRC_ShiningBlade_Generation = "PRC_ShiningBlade_Generation"; +const string PRC_ShiningBlade_Level = "PRC_ShiningBladeLevel"; +const string PRC_ShiningBlade_Duration = "PRC_ShiningBladeDuration"; + +void ShiningBlade_RemoveProperties(object oWeapon, int nLevel) +{ + itemproperty iTest = GetFirstItemProperty(oWeapon); + while(GetIsItemPropertyValid(iTest)) + { + int bRemove = FALSE; + if (GetItemPropertyDurationType(iTest) == DURATION_TYPE_TEMPORARY) + { + switch(GetItemPropertyType(iTest)) + { + case ITEM_PROPERTY_DAMAGE_BONUS: + if (nLevel >= SHINING_BLADE_LEVEL_SHOCK) + bRemove = (GetItemPropertySubType(iTest) == IP_CONST_DAMAGETYPE_ELECTRICAL) && (GetItemPropertyCostTableValue(iTest) == DAMAGE_BONUS_1d6); + break; + case ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP: + if (nLevel >= SHINING_BLADE_LEVEL_HOLY) + bRemove = (GetItemPropertySubType(iTest) == IP_CONST_ALIGNMENTGROUP_EVIL) && (GetItemPropertyParam1Value(iTest) == IP_CONST_DAMAGETYPE_DIVINE) && (GetItemPropertyCostTableValue(iTest) == DAMAGE_BONUS_2d6); + break; + case ITEM_PROPERTY_LIGHT: + if (nLevel >= SHINING_BLADE_LEVEL_BRILLIANT) + bRemove = TRUE; + break; + } + } + if (bRemove) + RemoveItemProperty(oWeapon, iTest); + iTest = GetNextItemProperty(oWeapon); + } +} + +void ShockBlade_ApplyProperties(object oWeapon, int nDuration) +{ + //Remove any old properties + + ShiningBlade_RemoveProperties(oWeapon, SHINING_BLADE_LEVEL_SHOCK); + + //Add the new properties + + if (nDuration) + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL, DAMAGE_BONUS_1d6), oWeapon, RoundsToSeconds(nDuration)); +} + +void HolyBlade_ApplyProperties(object oWeapon, int nDuration) +{ + //Remove any old properties + + ShiningBlade_RemoveProperties(oWeapon, SHINING_BLADE_LEVEL_HOLY); + + //Add the new properties + + if (nDuration) + { + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL, DAMAGE_BONUS_1d6), oWeapon, RoundsToSeconds(nDuration)); + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL, IP_CONST_DAMAGETYPE_DIVINE, DAMAGE_BONUS_2d6), oWeapon, RoundsToSeconds(nDuration)); + } +} + +void BrilliantBlade_ApplyProperties(object oWeapon, int nDuration) +{ + //Remove any old properies + + ShiningBlade_RemoveProperties(oWeapon, SHINING_BLADE_LEVEL_BRILLIANT); + + //Add the new properties + + if (nDuration) + { + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL, DAMAGE_BONUS_1d6), oWeapon, RoundsToSeconds(nDuration)); + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL, IP_CONST_DAMAGETYPE_DIVINE, DAMAGE_BONUS_2d6), oWeapon, RoundsToSeconds(nDuration)); + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyLight(IP_CONST_LIGHTBRIGHTNESS_BRIGHT, IP_CONST_LIGHTCOLOR_WHITE), oWeapon, RoundsToSeconds(nDuration)); + } +} + +void BrilliantBlade_ApplyAttackBonuses(object oPC, int bOnHand, int bOffHand) +{ + //ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectAttackIncrease(20, nAttackBonusHand)), oPC, RoundsToSeconds(nDuration)); + //This applies the attack bonus only to hands currently containing longsword, + //but incorrectly the bonus is still active if the longsword is exchanged for another weapon. + + //AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyAttackBonus(20), oWeapon, RoundsToSeconds(nDuration)); + //This adds the bonus only to the correct wielded weapon(s), but won't increase AB with + //a longsword that one is not wielding at the time the bonus is applied. + //Note: theoretically, we should increase the AB of the weapon by 20, not set it to 20; however, since the AB + //cap is 20, and the AB of a weapon is included in the cap, it makes little practical difference. + //NOTE: this provide +20 DR penetration, so it's a no-go (see http://nwn.wikia.com/wiki/Damage_reduction) + + SetCompositeAttackBonus(oPC, "SB_BrilliantBlade_R", bOnHand?20:0, ATTACK_BONUS_ONHAND); + SetCompositeAttackBonus(oPC, "SB_BrilliantBlade_L", bOffHand?20:0, ATTACK_BONUS_OFFHAND); +} + +void ShiningBlade_ApplyProperties(object oWeapon, int nDuration, int nLevel) +{ + switch(nLevel) + { + case SHINING_BLADE_LEVEL_SHOCK: + ShockBlade_ApplyProperties(oWeapon, nDuration); + break; + + case SHINING_BLADE_LEVEL_HOLY: + HolyBlade_ApplyProperties(oWeapon, nDuration); + break; + + case SHINING_BLADE_LEVEL_BRILLIANT: + BrilliantBlade_ApplyProperties(oWeapon, nDuration); + break; + } +} + +void ShiningBlade_ApplyAttackBonuses(object oPC, int bOnHand, int bOffHand, int nLevel) +{ + if (nLevel >= SHINING_BLADE_LEVEL_BRILLIANT) + BrilliantBlade_ApplyAttackBonuses(oPC, bOnHand, bOffHand); + else + BrilliantBlade_ApplyAttackBonuses(oPC, FALSE, FALSE); +} + +void ShiningBlade_ExpireBonuses(object oPC, int nGeneration, int nLevel) +{ + int nShiningBladeGeneration = GetLocalInt(oPC, PRC_ShiningBlade_Generation); + if (nGeneration == nShiningBladeGeneration) + { + if (DEBUG) DoDebug("Expiring Shining Blade bonuses"); + + //Zero out variables so that equipping a weapon doesn't reapply the expired bonuses + SetLocalInt(oPC, PRC_ShiningBlade_Duration, 0); + SetLocalInt(oPC, PRC_ShiningBlade_Level, 0); + + //Expire bonsues on wielded weapons + object oOnHandWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + object oOffHandWeapon = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC); + if (GetBaseItemType(oOnHandWeapon) == BASE_ITEM_LONGSWORD) + ShiningBlade_RemoveProperties(oOnHandWeapon, nLevel); + if (GetBaseItemType(oOffHandWeapon) == BASE_ITEM_LONGSWORD) + ShiningBlade_RemoveProperties(oOffHandWeapon, nLevel); + + //Expire attack bonuses + ShiningBlade_ApplyAttackBonuses(oPC, FALSE, FALSE, nLevel); + } + else + { + //The Brilliant/Holy/Shock Blade feat has been used again since this removal was scheduled, + //so don't expire--the next application of the feat will expire them + //when *it's* time runs out. + if (DEBUG) DoDebug("Not expiring Shining Blade bonuses: " + IntToString(nGeneration) + ", " + IntToString(nShiningBladeGeneration)); + } +} + +void ShiningBlade_ScheduleBonusExpiration(object oPC, int nDuration, int nLevel) +{ + int nGeneration = PRC_NextGeneration(GetLocalInt(oPC, PRC_ShiningBlade_Generation)); + SetLocalInt(oPC, PRC_ShiningBlade_Generation, nGeneration); + DelayCommand(RoundsToSeconds(nDuration), ShiningBlade_ExpireBonuses(oPC, nGeneration, nLevel)); +} diff --git a/src/include/prc_inc_scry.nss b/src/include/prc_inc_scry.nss new file mode 100644 index 0000000..0178f0a --- /dev/null +++ b/src/include/prc_inc_scry.nss @@ -0,0 +1,596 @@ +//:://///////////////////////////////////////////// +//:: Scrying include +//:: prc_inc_scry +//:://///////////////////////////////////////////// +/** @file + This include contains all of the code that is used + to scry. At the moment, this is the basic scrying + and will be expanded with the additional material + as coding goes along. This is based on the code + of the Baelnorn Project written by Ornedan. + + All the operations work only on PCs, as there is no + AI that could have NPCs take any advantage of the + system. +*/ +//::////////////////////////////////////////////// +//:: Created By: Stratovarius +//:: Created On: 30.04.2007 +//::////////////////////////////////////////////// + +#include "psi_inc_psifunc" +#include "inc_utility" +#include "true_utter_const" +#include "shd_myst_const" + +/////////////////////// +/* Public Constants */ +/////////////////////// + +const string COPY_LOCAL_NAME = "Scry_Copy"; +const string ALREADY_IMMORTAL_LOCAL_NAME = "Scry_ImmortalAlready"; +const float SCRY_HB_DELAY = 1.0f; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * ONLY CALL THIS FUNCTION + * Does all of the necessary set up for scrying + * Also checks for all of the anti-scrying features + * if oPC == oTarget, will use PRCGetSpellLocation + * as the location for the effects to begin + * + * @param oPC The PC on whom to operate. + * @param oTarget The object to target + */ +void ScryMain(object oPC, object oTarget); + +/** + * Moves all of the PC's items to the copy creature + * Switches locations of the two creatures + * + * @param oPC The PC on whom to operate. + * @param oCopy The copy of the PC + */ +void DoScryBegin(object oPC, object oCopy); + +/** + * Undoes all the effects of DoScryBegin + * + * @param oPC The PC on whom to operate. + * @param oCopy The copy of the PC + */ +void DoScryEnd(object oPC, object oCopy); + +/** + * Runs tests to see if the Scry effect can still continue. + * If the copy is dead, end Scry and kill the PC. + * + * @param oPC The PC on whom to operate. + * @param oCopy The copy of the PC + */ +void ScryMonitor(object oPC, object oCopy); + +/** + * Reverses ApplyScryEffects + * + * @param oPC The PC on whom to operate. + */ +void RemoveScryEffects(object oPC); + +/** + * Checks whether the PC is scrying or not + * + * @param oPC The PC on whom to operate. + */ +int GetIsScrying(object oPC); + +/** + * Does the Discern Location content + * + * @param oPC The PC on whom to operate. + * @param oTarget The spell Target + */ +void DiscernLocation(object oPC, object oTarget); + +/** + * Does the Locate Creature and Object content + * + * @param oPC The PC on whom to operate. + * @param oTarget The spell Target + */ +void LocateCreatureOrObject(object oPC, object oTarget); + +/** + * Prevents the copy from dropping goods when dead. + * + * @param oImage The PC's copy. + */ +void CleanCopy(object oImage); + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +void ScryMain(object oPC, object oTarget) +{ + // Get the main variables used. + object oCopy = GetLocalObject(oPC, COPY_LOCAL_NAME); + effect eLight = EffectVisualEffect(VFX_IMP_HEALING_X , FALSE); + effect eGlow = EffectVisualEffect(VFX_DUR_ETHEREAL_VISAGE, FALSE); + // Use prestored variables because of time delay + int nCasterLevel = GetLocalInt(oPC, "ScryCasterLevel"); + int nSpell = PRCGetSpellId(); //GetLocalInt(oPC, "ScrySpellId"); + int nDC = GetLocalInt(oPC, "ScrySpellDC"); + float fDur = GetLocalFloat(oPC, "ScryDuration"); + if(DEBUG) DoDebug("prc_inc_scry: Beginning ScryMain. nSpell: " + IntToString(nSpell)); + + if (oPC != oTarget) // No hitting yourself with defenses + { + if(GetHasSpellEffect(POWER_REMOTE_VIEW_TRAP, oTarget)) + { + effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_S); + // Failed Save + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_NONE)) + { + FloatingTextStringOnCreature("You have been caught in a Remote View Trap", oPC, FALSE); + eVis = EffectLinkEffects(eVis, EffectDamage(d6(8), DAMAGE_TYPE_ELECTRICAL)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + return; + } + else + { + FloatingTextStringOnCreature("You have saved against a Remote View Trap", oPC, FALSE); + eVis = EffectLinkEffects(eVis, EffectDamage(d6(4), DAMAGE_TYPE_ELECTRICAL)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } + } + if(GetHasSpellEffect(SPELL_SEQUESTER, oTarget) || GetHasSpellEffect(POWER_SEQUESTER, oTarget)) + { + // Spell auto-fails if this is the case + FloatingTextStringOnCreature(GetName(oTarget) + " has been Sequestered.", oPC, FALSE); + return; + } + if(GetHasSpellEffect(SPELL_OBSCURE_OBJECT, oTarget)) + { + // Spell auto-fails if this is the case + FloatingTextStringOnCreature(GetName(oTarget) + " has been Obscured.", oPC, FALSE); + return; + } + if(GetHasSpellEffect(SPELL_NONDETECTION, oTarget) || GetLevelByClass(CLASS_TYPE_WILD_MAGE, oTarget) >= 6 || GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oTarget) >= 5 || GetHasSpellEffect(MELD_ENIGMA_HELM, oTarget) || GetRacialType(oTarget) == RACIAL_TYPE_SKULK) + { + // Caster level check or the Divination fails. + int nTarget = PRCGetCasterLevel(oTarget) + 11; + if (GetRacialType(oTarget) == RACIAL_TYPE_SKULK && 20 > nTarget) nTarget = 20; + if(nTarget > nCasterLevel + d20()) + { + FloatingTextStringOnCreature(GetName(oTarget) + " has Nondetection active.", oPC, FALSE); + return; + } + } + if(GetHasSpellEffect(POWER_ESCAPE_DETECTION, oTarget)) + { + // Caster level check or the Divination fails. + // Max of 10 + if(PRCMax(10, GetManifesterLevel(oTarget)) + 13 > nCasterLevel + d20()) + { + FloatingTextStringOnCreature(GetName(oTarget) + " has Escape Detection active.", oPC, FALSE); + return; + } + } + if(GetHasSpellEffect(POWER_DETECT_REMOTE_VIEWING, oTarget)) + { + // Caster level check for the target to learn where the caster is + if(GetManifesterLevel(oTarget) + d20() >= nCasterLevel + d20()) + { + FloatingTextStringOnCreature(GetName(oPC) + " is viewing you from " + GetName(GetArea(oPC)), oTarget, FALSE); + } + } + } + // Discern Location skips all of this + if(nSpell == SPELL_DISCERN_LOCATION) + { + DiscernLocation(oPC, oTarget); + return; + } + // So do the Locate Twins + if(nSpell == SPELL_LOCATE_CREATURE || nSpell == SPELL_LOCATE_OBJECT || nSpell == MYST_TRAIL_OF_HAZE) + { + LocateCreatureOrObject(oPC, oTarget); + return; + } + + if(nSpell != SPELL_CLAIRAUDIENCE_AND_CLAIRVOYANCE && nSpell != POWER_CLAIRTANGENT_HAND && nSpell != SPELL_PNP_SCRY_FAMILIAR + && nSpell != POWER_CLAIRVOYANT_SENSE && nSpell != TRUE_SEE_THE_NAMED && oPC != oTarget) // No save if you target yourself. + { + //Make SR Check + if(PRCDoResistSpell(oPC, oTarget, nCasterLevel)) + { + FloatingTextStringOnCreature(GetName(oTarget) + " made Spell Resistance check vs Scrying", oPC, FALSE); + DoScryEnd(oPC, oCopy); + return; + } + //Save + if(PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS)) + { + FloatingTextStringOnCreature(GetName(oTarget) + " saved vs Scrying", oPC, FALSE); + DoScryEnd(oPC, oCopy); + return; + } + } + + if(DEBUG) DoDebug("prc_inc_scry running.\n" + + "oPC = '" + GetName(oPC) + "' - '" + GetTag(oPC) + "' - " + ObjectToString(oPC) + + "Copy exists: " + DebugBool2String(GetIsObjectValid(oCopy)) + ); + + location lTarget = GetLocation(oTarget); + if (oTarget == oPC || !GetIsObjectValid(oTarget)) // Some spells just target ground for this + lTarget = PRCGetSpellTargetLocation(); + // Create the copy + oCopy = CopyObject(oPC, lTarget, OBJECT_INVALID, GetName(oPC) + "_" + COPY_LOCAL_NAME); + CleanCopy(oCopy); + // Attempted Fix to the Copy get's murdered problem. + int nMaxHenchmen = GetMaxHenchmen(); + SetMaxHenchmen(99); + AddHenchman(oPC, oCopy); + SetMaxHenchmen(nMaxHenchmen); + SetIsTemporaryFriend(oPC, oCopy, FALSE); + // Set the copy to be undestroyable, so that it won't vanish to the ether + // along with the PC's items. + AssignCommand(oCopy, SetIsDestroyable(FALSE, FALSE, FALSE)); + // Make the copy immobile and minimize the AI on it + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(EffectCutsceneImmobilize()), oCopy); + SetAILevel(oCopy, AI_LEVEL_VERY_LOW); + + // Store a referece to the copy on the PC + SetLocalObject(oPC, COPY_LOCAL_NAME, oCopy); + + //Set Immortal flag on the PC or if they were already immortal, + //leave a note about it on them. + if(GetImmortal(oPC)) + { + if(DEBUG) DoDebug("prc_inc_scry: The PC was already immortal"); + SetLocalInt(oPC, ALREADY_IMMORTAL_LOCAL_NAME, TRUE); + } + else + { + if(DEBUG) DoDebug("prc_inc_scry: Setting PC immortal"); + SetImmortal(oPC, TRUE); + DeleteLocalInt(oPC, ALREADY_IMMORTAL_LOCAL_NAME); // Paranoia + } + + // Do VFX on PC and copy + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLight, oCopy); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLight, oPC); + + // Do the switching around + DoScryBegin(oPC, oCopy); + + //Set up duration marker for ending effect + DelayCommand(fDur, SetLocalInt(oPC, "SCRY_EXPIRED", 1)); +} + +// Moves the PC's items to the copy and switches their locations around +void DoScryBegin(object oPC, object oCopy) +{ + if(DEBUG) DoDebug("prc_inc_scry: DoScryBegin():\n" + + "oPC = '" + GetName(oPC) + "'\n" + + "oCopy = '" + GetName(oCopy) + "'" + ); + // Make sure both objects are valid + if(!GetIsObjectValid(oCopy) || !GetIsObjectValid(oPC)){ + if(DEBUG) DoDebug("DoScryBegin called, but one of the parameters wasn't a valid object. Object status:" + + "\nPC - " + (GetIsObjectValid(oPC) ? "valid":"invalid") + + "\nCopy - " + (GetIsObjectValid(oCopy) ? "valid":"invalid") + ); + + // Some cleanup before aborting + if(!GetLocalInt(oPC, ALREADY_IMMORTAL_LOCAL_NAME)) + { + SetImmortal(oPC, FALSE); + DeleteLocalInt(oPC, ALREADY_IMMORTAL_LOCAL_NAME); + } + MyDestroyObject(oCopy); + DeleteLocalInt(oPC, "Scry_Active"); + RemoveScryEffects(oPC); + + return; + } + + // Set a local on the PC telling that it's a scry. This is used + // to keep the PC from picking up or losing objects. + // Also stops it from casting spells + SetLocalInt(oPC, "Scry_Active", TRUE); + + // Start a pseudo-hb to monitor the status of both PC and copy + DelayCommand(SCRY_HB_DELAY, ScryMonitor(oPC, oCopy)); + + // Add eventhooks + + if(DEBUG) DoDebug("AddEventScripts"); + + AddEventScript(oPC, EVENT_ONPLAYEREQUIPITEM, "prc_scry_event", TRUE, FALSE); // OnEquip + AddEventScript(oPC, EVENT_ONACQUIREITEM, "prc_scry_event", TRUE, FALSE); // OnAcquire + AddEventScript(oPC, EVENT_ONPLAYERREST_STARTED, "prc_scry_event", FALSE, FALSE); // OnRest + AddEventScript(oPC, EVENT_ONCLIENTENTER, "prc_scry_event", TRUE, FALSE); //OnClientEnter + + // Adjust reputation so the target monster doesn't attack you + //ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectCharmed()), oTarget, GetLocalFloat(oPC, "ScryDuration")); + // Swap the copy and PC + location lPC = GetLocation(oPC); + location lCopy = GetLocation(oCopy); + DelayCommand(1.5f,AssignCommand(oPC, JumpToLocation(lCopy))); + DelayCommand(1.5f,AssignCommand(oCopy, JumpToLocation(lPC))); +} + +// Switches the PC's inventory back from the copy and returns the PC to the copy's location. +void DoScryEnd(object oPC, object oCopy) +{ + if(DEBUG) DoDebug("prc_inc_scry: DoScryEnd():\n" + + "oPC = '" + GetName(oPC) + "'\n" + + "oCopy = '" + GetName(oCopy) + "'" + ); + + //effect eGlow = EffectVisualEffect(VFX_DUR_ETHEREAL_VISAGE, FALSE); + effect eLight = EffectVisualEffect(VFX_IMP_HEALING_X , FALSE); + + // Remove Immortality from the PC if necessary + if(!GetLocalInt(oPC, ALREADY_IMMORTAL_LOCAL_NAME)) + SetImmortal(oPC, FALSE); + + // Remove the VFX and the attack penalty from all spells. + PRCRemoveSpellEffects(SPELL_SCRY , oPC, oPC); + PRCRemoveSpellEffects(SPELL_GREATER_SCRYING , oPC, oPC); + PRCRemoveSpellEffects(SPELL_DISCERN_LOCATION , oPC, oPC); + PRCRemoveSpellEffects(SPELL_LOCATE_CREATURE , oPC, oPC); + PRCRemoveSpellEffects(SPELL_LOCATE_OBJECT , oPC, oPC); + PRCRemoveSpellEffects(SPELL_ARCANE_EYE , oPC, oPC); + PRCRemoveSpellEffects(MYST_BEND_PERSPECTIVE , oPC, oPC); + PRCRemoveSpellEffects(MYST_FAR_SIGHT , oPC, oPC); + PRCRemoveSpellEffects(MYST_EPHEMERAL_IMAGE , oPC, oPC); + PRCRemoveSpellEffects(SPELL_SHADOWDOUBLE , oPC, oPC); + PRCRemoveSpellEffects(SPELL_OBSCURE_OBJECT , oPC, oPC); + PRCRemoveSpellEffects(SPELL_SEQUESTER , oPC, oPC); + PRCRemoveSpellEffects(SPELL_PNP_SCRY_FAMILIAR, oPC, oPC); + PRCRemoveSpellEffects(SPELL_CLAIRAUDIENCE_AND_CLAIRVOYANCE, oPC, oPC); + + // Remove the local signifying that the PC is a projection + DeleteLocalInt(oPC, "Scry_Active"); + + // Remove the local signifying projection being terminated by an external cause + DeleteLocalInt(oPC, "Scry_Abort"); + + // Remove the heartbeat HP tracking local + DeleteLocalInt(oPC, "Scry_HB_HP"); + // Delete all of the marker ints for the spell + DeleteLocalInt(oPC, "ScryCasterLevel"); + DeleteLocalInt(oPC, "ScrySpellId"); + DeleteLocalInt(oPC, "ScrySpellDC"); + DeleteLocalFloat(oPC, "ScryDuration"); + + // Remove weapons nerfing + RemoveScryEffects(oPC); + + // Remove eventhooks + RemoveEventScript(oPC, EVENT_ONPLAYEREQUIPITEM, "prc_scry_event", TRUE, FALSE); // OnEquip + RemoveEventScript(oPC, EVENT_ONACQUIREITEM, "prc_scry_event", TRUE, FALSE); // OnAcquire + RemoveEventScript(oPC, EVENT_ONPLAYERREST_STARTED, "prc_scry_event", FALSE, FALSE); // OnRest + RemoveEventScript(oPC, EVENT_ONCLIENTENTER, "prc_scry_event", TRUE, FALSE); //OnClientEnter + + // Move PC and inventory + location lCopy = GetLocation(oCopy); + DelayCommand(1.5f, AssignCommand(oPC, JumpToLocation(lCopy))); + + // Set the PC's hitpoints to be whatever the copy has + int nOffset = GetCurrentHitPoints(oCopy) - GetCurrentHitPoints(oPC); + if(nOffset > 0) + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(nOffset), oPC); + else if (nOffset < 0) + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(-nOffset, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_ENERGY), oPC); + + // Schedule deletion of the copy + DelayCommand(0.3f, MyDestroyObject(oCopy)); + + //Delete the object reference + DeleteLocalObject(oPC, COPY_LOCAL_NAME); + + // VFX + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eLight, lCopy, 3.0); + DestroyObject(oCopy); + + //Remove duration marker + DeleteLocalInt(oPC, "SCRY_EXPIRED"); +} + +//Runs tests to see if the projection effect can still continue. +//If the PC has reached 1 HP, end projection normally. +//If the copy is dead, end projection and kill the PC. +void ScryMonitor(object oPC, object oCopy) +{ + if(DEBUG) DoDebug("prc_inc_scry: ScryMonitor():\n" + + "oPC = '" + GetName(oPC) + "'\n" + + "oCopy = '" + GetName(oCopy) + "'" + ); + // Abort if the projection is no longer marked as being active + if(!GetLocalInt(oPC, "Scry_Active")) + return; + + // Some paranoia in case something interfered and either PC or copy has been destroyed + if(!(GetIsObjectValid(oPC) && GetIsObjectValid(oCopy))){ + WriteTimestampedLogEntry("Baelnorn Projection hearbeat aborting due to an invalid object. Object status:" + + "\nPC - " + (GetIsObjectValid(oPC) ? "valid":"invalid") + + "\nCopy - " + (GetIsObjectValid(oCopy) ? "valid":"invalid")); + return; + } + + // Start the actual work by checking the copy's status. The death thing should take priority + if(GetIsDead(oCopy)) + { + if (DEBUG) DoDebug("prc_inc_scry: Copy is dead, killing PC"); + DoScryEnd(oPC, oCopy); + effect eKill = EffectDamage(9999, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_ENERGY); + DelayCommand(3.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eKill, oPC)); + } + else + { + // Check if the "projection" has been destroyed or if some other event has caused the projection to end + if(GetLocalInt(oPC, "Scry_Abort")) + { + if(DEBUG) DoDebug("prc_inc_scry: ScryMonitor(): The Projection has been terminated, ending projection"); + DoScryEnd(oPC, oCopy); + } + else + { + // This makes sure you are invisible. + //AssignCommand(oPC, ClearAllActions(TRUE)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectEthereal()), oPC, SCRY_HB_DELAY + 0.3); + DelayCommand(SCRY_HB_DELAY, ScryMonitor(oPC, oCopy)); + } + + //If duration expired, end effect + if(GetLocalInt(oPC, "SCRY_EXPIRED")) + { + DoScryEnd(oPC, oCopy); + } + // End due to being in combat, except when ephemeral image + if(GetIsInCombat(oPC) && GetLocalInt(oPC, "ScrySpellId") != MYST_EPHEMERAL_IMAGE) + { + DoScryEnd(oPC, oCopy); + if(DEBUG) DoDebug("prc_inc_scry: ScryMonitor(): Scryer in combat, ending projection"); + AssignCommand(oPC, ClearAllActions(TRUE)); + } + // In PnP, once you lose line of effect, the spell ends + float fDistance = FeetToMeters(100.0 + GetLocalInt(oPC, "ScryCasterLevel") * 10.0); + if (GetLocalInt(oPC, "ScrySpellId") == MYST_EPHEMERAL_IMAGE && GetDistanceBetween(oPC, oCopy) > fDistance) + { + DoScryEnd(oPC, oCopy); + if(DEBUG) DoDebug("prc_inc_scry: ScryMonitor(): Ephemeral Image distance exceeded, ending projection"); + AssignCommand(oPC, ClearAllActions(TRUE)); + } + } +} + +//Undoes changes made in ApplyScryEffects(). +void RemoveScryEffects(object oPC) +{ + if(DEBUG) DoDebug("prc_inc_scry: RemoveScryEffects():\n" + + "oPC = '" + GetName(oPC) + "'" + ); + effect eCheck = GetFirstEffect(oPC); + while(GetIsEffectValid(eCheck)){ + if(GetEffectSpellId(eCheck) == GetLocalInt(oPC, "ScrySpellId")) + { + RemoveEffect(oPC, eCheck); + } + eCheck = GetNextEffect(oPC); + } + + // Remove the no-damage property from all weapons it was added to + int i; + object oWeapon; + for(i = 0; i < array_get_size(oPC, "Scry_Nerfed"); i++) + { + oWeapon = array_get_object(oPC, "Scry_Nerfed", i); + IPRemoveMatchingItemProperties(oWeapon, ITEM_PROPERTY_NO_DAMAGE, DURATION_TYPE_PERMANENT); + } + + array_delete(oPC, "Scry_Nerfed"); +} + +int GetIsScrying(object oPC) +{ + return GetLocalInt(oPC, "Scry_Active"); +} + +void DiscernLocation(object oPC, object oTarget) +{ + // Tells the name of the area the target is in + // Yes, this is a little crappy for an 8th level spell. + FloatingTextStringOnCreature(GetName(oTarget) + " is in " + GetName(GetArea(oTarget)), oPC, FALSE); + + // Delete all of the marker ints for the spell + DeleteLocalInt(oPC, "ScryCasterLevel"); + DeleteLocalInt(oPC, "ScrySpellId"); + DeleteLocalInt(oPC, "ScrySpellDC"); + DeleteLocalFloat(oPC, "ScryDuration"); +} + +void LocateCreatureOrObject(object oPC, object oTarget) +{ + location lPC = GetLocation(oPC); + location lTarget = GetLocation(oTarget); + // Cause the caller to face the target + SetFacingPoint(GetPosition(oTarget)); + // Now spit out the distance + float fDist = GetDistanceBetweenLocations(lPC, lTarget); + FloatingTextStringOnCreature(GetName(oTarget) + " is " + FloatToString(MetersToFeet(fDist)) + " feet away from you.", oPC, FALSE); + + // Delete all of the marker ints for the spell + DeleteLocalInt(oPC, "ScryCasterLevel"); + DeleteLocalInt(oPC, "ScrySpellId"); + DeleteLocalInt(oPC, "ScrySpellDC"); + DeleteLocalFloat(oPC, "ScryDuration"); +} + +void CleanCopy(object oImage) +{ + SetLootable(oImage, FALSE); + // remove inventory contents + object oItem = GetFirstItemInInventory(oImage); + while(GetIsObjectValid(oItem)) + { + SetPlotFlag(oItem,FALSE); + if(GetHasInventory(oItem)) + { + object oItem2 = GetFirstItemInInventory(oItem); + while(GetIsObjectValid(oItem2)) + { + object oItem3 = GetFirstItemInInventory(oItem2); + while(GetIsObjectValid(oItem3)) + { + SetPlotFlag(oItem3,FALSE); + DestroyObject(oItem3); + oItem3 = GetNextItemInInventory(oItem2); + } + SetPlotFlag(oItem2,FALSE); + DestroyObject(oItem2); + oItem2 = GetNextItemInInventory(oItem); + } + } + DestroyObject(oItem); + oItem = GetNextItemInInventory(oImage); + } + // remove non-visible equipped items + int i; + for(i=0;i 0 ) + { + // Get the item in this slot. + oItem = GetItemInSlot(nSlot, oCreature); + if ( oItem != OBJECT_INVALID ) + { + // Loop through oItem's item properties. + ipBypass = GetFirstItemProperty(oItem); + while ( GetIsItemPropertyValid(ipBypass) ) + { + // See if ipBypass is what we want to bypass. + if ( GetItemPropertyType(ipBypass) == nType && + GetItemPropertySubType(ipBypass) == nSubType && + GetItemPropertyDurationType(ipBypass) == DURATION_TYPE_PERMANENT ) + { + // Remove ipBypass for a split second. + RemoveItemProperty(oItem, ipBypass); + DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT, ipBypass, oItem)); + } + // Next item property. + ipBypass = GetNextItemProperty(oItem); + }//while (ipBypass) + }//if (oItem) + }//while (nSlot) +} + +void _prc_inc_shifting_ApplyStatPenalties(object oCreature, object oPropertyHolder, int nDeltaSTR, int nDeltaDEX, int nDeltaCON) +{ + //The immunity properties removed by _prc_inc_shifting_ApplyStatPenalties aren't actually removed until this script + //finishes running, so we delay adding the penalties until after that happens. Re-adding the removed immunity properties + //is delayed even longer (schedulded by _prc_inc_shifting_BypassItemProperties) so that it happens after the penalties have been applied. + _prc_inc_shifting_BypassItemProperties(oCreature, IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN); + if(nDeltaSTR < 0) + DelayCommand(0.0, SetCompositeBonus(oPropertyHolder, "Shifting_AbilityAdjustmentSTRPenalty", -nDeltaSTR, ITEM_PROPERTY_DECREASED_ABILITY_SCORE, IP_CONST_ABILITY_STR)); + if(nDeltaDEX < 0) + DelayCommand(0.0, SetCompositeBonus(oPropertyHolder, "Shifting_AbilityAdjustmentDEXPenalty", -nDeltaDEX, ITEM_PROPERTY_DECREASED_ABILITY_SCORE, IP_CONST_ABILITY_DEX)); + if(nDeltaCON < 0) + DelayCommand(0.0, SetCompositeBonus(oPropertyHolder, "Shifting_AbilityAdjustmentCONPenalty", -nDeltaCON, ITEM_PROPERTY_DECREASED_ABILITY_SCORE, IP_CONST_ABILITY_CON)); +} + +//TODO: use ForceEquip() in inc_utility instead? +void SafeEquipItem(object oShifter, object oItem, int nSlot, float fDelay = 1.0f) +{ + if (GetIsObjectValid(oItem) && GetItemInSlot(nSlot, oShifter) != oItem) + { + AssignCommand(oShifter, ActionEquipItem(oItem, nSlot)); + if (fDelay < 9.0f) //Don't repeat forever + DelayCommand(fDelay, SafeEquipItem(oShifter, oItem, nSlot, fDelay * 2)); //Try increasing delays until it works + } +} + +void _prc_inc_shifting_ApplyEffects(object oShifter, int bShifting) +{ + if (GetLocalInt(oShifter, "PRC_Shifter_AffectsToApply")) + { + if(bShifting) + { + SetLocalInt(oShifter, "PRC_SHIFTER_APPLY_ALL_SPELL_EFFECTS", TRUE); + //The only place this is ever removed is by the spell script after it is used. + //This prevents race conditions where this function is called again + //and changes the value to FALSE before the spell script had a chance to use it. + } + + if (GetLocalInt(oShifter, "PRC_Shifter_Use_RodOfWonder")) + { + if (DEBUG_EFFECTS || DEBUG) + DoDebug("ADDING EFFECTS: ROD OF WONDER"); + object oCastingObject = CreateObject(OBJECT_TYPE_PLACEABLE, "x0_rodwonder", GetLocation(oShifter)); + AssignCommand(oCastingObject, ActionCastSpellAtObject(SPELL_SHIFTING_EFFECTS, oShifter, METAMAGIC_NONE, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE)); + //Handled by spell code: DestroyObject(oCastingObject, 6.0); + } + else + { + if (DEBUG_EFFECTS || DEBUG) + DoDebug("ADDING EFFECTS: ALTERNATE"); + CastSpellAtObject(SPELL_SHIFTING_EFFECTS, oShifter, METAMAGIC_NONE, 0, 0, 0, OBJECT_INVALID, oShifter); + } + } +} + +void _prc_inc_shifting_RemoveSpellEffects_RodOfWonder(object oShifter, int bApplyAll) +{ + effect eTest = GetFirstEffect(oShifter); + while(GetIsEffectValid(eTest)) + { + if(GetEffectSpellId(eTest) == SPELL_SHIFTING_EFFECTS) + { + if (GetEffectType(eTest) == EFFECT_TYPE_TEMPORARY_HITPOINTS) + { + int nHPBonus = GetLocalInt(oShifter, "PRC_Shifter_ExtraCON_HPBonus"); + if (bApplyAll || !nHPBonus) + { + if(DEBUG_EFFECTS || DEBUG) + DoDebug("Removing temp HP: " + IntToString(bApplyAll) + ", " + IntToString(nHPBonus)); + RemoveEffect(oShifter, eTest); + } + else if(DEBUG_EFFECTS || DEBUG) + DoDebug("Skipped removing temp HP" + IntToString(bApplyAll) + ", " + IntToString(nHPBonus)); + } + else if (GetEffectType(eTest) == EFFECT_TYPE_INVISIBILITY) + { + int bHarmlessInvisible = GetLocalInt(oShifter, "PRC_Shifter_HarmlessInvisible"); + if (bApplyAll || !bHarmlessInvisible) + { + if(DEBUG_EFFECTS || DEBUG) + DoDebug("Removing invisibility" + IntToString(bApplyAll) + ", " + IntToString(bHarmlessInvisible)); + RemoveEffect(oShifter, eTest); + } + else if(DEBUG_EFFECTS || DEBUG) + DoDebug("Skipped removing invisibility" + IntToString(bApplyAll) + ", " + IntToString(bHarmlessInvisible)); + } + else + RemoveEffect(oShifter, eTest); + } + eTest = GetNextEffect(oShifter); + } +} + +void _prc_inc_shifting_RemoveSpellEffects_CastSpellAtObject(object oShifter, int bApplyAll) +{ + effect eTest = GetFirstEffect(oShifter); + while(GetIsEffectValid(eTest)) + { + int nSpellId = GetEffectSpellId(eTest); + //TODO: Is THERE ANY WAY TO SET THE SPELL ID CORRECTLY INSTEAD OF IT BEING -1? + //EvalPRCFeats seems to call scripts using the ExecuteScript function and the spell id is set correctly. How does this happen? + if(nSpellId == SPELL_SHIFTING_EFFECTS || nSpellId == -1) + { + switch(GetEffectType(eTest)) + { + case EFFECT_TYPE_ATTACK_INCREASE: + case EFFECT_TYPE_ATTACK_DECREASE: + case EFFECT_TYPE_DAMAGE_INCREASE: + case EFFECT_TYPE_DAMAGE_DECREASE: + case EFFECT_TYPE_SAVING_THROW_INCREASE: + case EFFECT_TYPE_SAVING_THROW_DECREASE: + case EFFECT_TYPE_SKILL_INCREASE: + case EFFECT_TYPE_SKILL_DECREASE: + case EFFECT_TYPE_AC_INCREASE: + case EFFECT_TYPE_AC_DECREASE: + RemoveEffect(oShifter, eTest); + break; + + case EFFECT_TYPE_TEMPORARY_HITPOINTS: + { + int nHPBonus = GetLocalInt(oShifter, "PRC_Shifter_ExtraCON_HPBonus"); + if (bApplyAll || !nHPBonus) + RemoveEffect(oShifter, eTest); + else if(DEBUG_EFFECTS || DEBUG) + DoDebug("Skipped removing temp HP" + IntToString(bApplyAll) + ", " + IntToString(nHPBonus)); + break; + } + + case EFFECT_TYPE_INVISIBILITY: + { + int bHarmlessInvisible = GetLocalInt(oShifter, "PRC_Shifter_HarmlessInvisible"); + if (bApplyAll || !bHarmlessInvisible) + RemoveEffect(oShifter, eTest); + else if(DEBUG_EFFECTS || DEBUG) + DoDebug("Skipped removing invisibility" + IntToString(bApplyAll) + ", " + IntToString(bHarmlessInvisible)); + break; + } + } + } + eTest = GetNextEffect(oShifter); + } + if(GetLocalInt(oShifter, "ReserveFeatsRunning")) + DelayCommand(0.1f, ExecuteScript("prc_reservefeat", oShifter)); +} + +void _prc_inc_shifting_RemoveSpellEffects(object oShifter, int bApplyAll) +{ + if (GetLocalInt(oShifter, "PRC_Shifter_Use_RodOfWonder")) + { + if(DEBUG_EFFECTS || DEBUG) + DoDebug("REMOVING EFFECTS: ROD OF WONDER"); + if(!GetLocalInt(oShifter, "PRC_Shifter_Using_RodOfWonder")) + { + //Remove effects of other approach if just switching to this one. + //This may remove too many effects, but shifting should force the effects + //that should not have been removed to be re-added, and they won't be + //removed again. + SetLocalInt(oShifter, "PRC_Shifter_Using_RodOfWonder", TRUE); + _prc_inc_shifting_RemoveSpellEffects_CastSpellAtObject(oShifter, bApplyAll); + } + _prc_inc_shifting_RemoveSpellEffects_RodOfWonder(oShifter, bApplyAll); + } + else + { + /* + This method has advantages and disadvantages compared to the Rod of Wonder method. + Advantages: + * It's instantaneous; if the system is busy (e.g., in a really difficult fight) + the Rod of Wonder sometimes takes 10-15 seconds, which can literally kill you + Disadvantages: + * It can't tell which effects it added, so it sometimes has to remove too many + (e.g., it might perhaps remove race-related AC bonus, etc.) + //TODO: if I can come up with a better way to mark or detect which effects were added here, this can be fixed + //Check GetEffectCreator? Tie the effect to a unique object so we can identify it? + + Even with the disadvantages, for the builds I've used I find that the advantages make this method preferable. + However, for some builds or environments the Rod of Wonder might still be preferable, so provide the user with an option + by means of the PRC_Shifter_Use_RodOfWonder variable. + */ + if(DEBUG_EFFECTS || DEBUG) + DoDebug("REMOVING EFFECTS: ALTERNATE"); + _prc_inc_shifting_RemoveSpellEffects_CastSpellAtObject(oShifter, bApplyAll); + } +} + +void _prc_inc_shifting_DeleteEffectInts(object oShifter) +{ + DeleteLocalInt(oShifter, "PRC_SHIFTER_EXTRA_STR_WEAPON_MAINHAND"); + DeleteLocalInt(oShifter, "PRC_SHIFTER_EXTRA_STR_WEAPON_OFFHAND"); + DeleteLocalInt(oShifter, "PRC_SHIFTER_EXTRA_DEX_ARMOR"); + DeleteLocalInt(oShifter, "PRC_Shifter_ExtraSTR"); + DeleteLocalInt(oShifter, "PRC_Shifter_ExtraSTR_Feats"); + DeleteLocalInt(oShifter, "PRC_Shifter_ExtraSTR_AttackBonus"); + DeleteLocalInt(oShifter, "PRC_Shifter_ExtraSTR_DamageBonus"); + DeleteLocalInt(oShifter, "PRC_Shifter_ExtraSTR_DamageType"); + DeleteLocalInt(oShifter, "PRC_Shifter_ExtraSTR_SaveAndSkillBonus"); + DeleteLocalInt(oShifter, "PRC_Shifter_ExtraDEX"); + DeleteLocalInt(oShifter, "PRC_Shifter_ExtraDEX_Feats"); + DeleteLocalInt(oShifter, "PRC_Shifter_ExtraDEX_ACBonus"); + DeleteLocalInt(oShifter, "PRC_Shifter_ExtraDEX_SaveAndSkillBonus"); + DeleteLocalInt(oShifter, "PRC_Shifter_ExtraCON"); + DeleteLocalInt(oShifter, "PRC_Shifter_ExtraCON_Feats"); + DeleteLocalInt(oShifter, "PRC_Shifter_ExtraCON_HPBonus"); + DeleteLocalInt(oShifter, "PRC_Shifter_ExtraCON_SaveAndSkillBonus"); + + DeleteLocalInt(oShifter, "PRC_Shifter_NaturalAC"); + DeleteLocalInt(oShifter, SHIFTER_RESTRICT_SPELLS); + DeleteLocalInt(oShifter, "PRC_Shifter_HarmlessInvisible"); + + DeleteLocalInt(oShifter, SHIFTER_OVERRIDE_RACE); + int nShiftingTrueRace = GetPersistantLocalInt(oShifter, SHIFTER_TRUE_RACE); + if(nShiftingTrueRace) + PRC_Funcs_SetRace(oShifter, nShiftingTrueRace - 1); //Offset by 1 to differentiate value 0 from non-existence + + DeleteLocalInt(oShifter, "PRC_Shifter_AffectsToApply"); +} + +int _prc_inc_shifting_HasExtraFeat(object oPC, string sRemovedFeatList, object oTemplate, int nFeat, int nIPFeat) +{ + if (nFeat == -1 || nIPFeat == -1) + return FALSE; + int bPCHasFeat = GetHasFeat(nFeat, oPC); + string sIPFeat = "("+IntToString(nIPFeat)+")"; + int bDeleted = (FindSubString(sRemovedFeatList, sIPFeat) != -1); + int bTemplateHasFeat = GetHasFeat(nFeat, oTemplate); + return (bPCHasFeat && !bDeleted) || bTemplateHasFeat; +} + +void _prc_inc_shifting_AddExtraFeat(object oPC, string sRemovedFeatList, object oPropertyHolder, int nIPFeat, string sFeatTrackingVariable) +{ + string sIPFeat = "("+IntToString(nIPFeat)+")"; + itemproperty iProp = ItemPropertyBonusFeat(nIPFeat); + if (FindSubString(sRemovedFeatList, sIPFeat) != -1) //TODO: skip this check and always use the delay? + { + //An item property for the same feat was present before and was removed; + //but removed item properties aren't actually removed until the script + //ends. However, this means that the new one we add here is removed. + //So, delay adding it until after the removal takes place. + DelayCommand(0.0f, IPSafeAddItemProperty(oPropertyHolder, iProp, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING)); + } + else + IPSafeAddItemProperty(oPropertyHolder, iProp, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING); + SetLocalString(oPC, sFeatTrackingVariable, GetLocalString(oPC, sFeatTrackingVariable) + sIPFeat); +} + +int _prc_inc_shifting_TryAddExtraFeat(object oPC, string sRemovedFeatList, object oTemplate, object oPropertyHolder, int nFeat, int nIPFeat, string sFeatTrackingVariable) +{ + int nAddedCount = 0; + if (!_prc_inc_shifting_HasExtraFeat(oPC, sRemovedFeatList, oTemplate, nFeat, nIPFeat)) + { + _prc_inc_shifting_AddExtraFeat(oPC, sRemovedFeatList, oPropertyHolder, nIPFeat, sFeatTrackingVariable); + nAddedCount = 1; + } + return nAddedCount; +} + +int _prc_inc_shifting_TryAddExtraFeats(object oPC, string sRemovedFeatList, object oTemplate, object oPropertyHolder, int nFeatStart, int nFeatEnd, int nIPFeatStart, int nCount, string sFeatTrackingVariable) +{ + int nAddedCount = 0; + int nIPFeat = -1; + int nFeat; + //Find which feats should be added + for (nFeat = nFeatStart; nAddedCount < nCount && nFeat <= nFeatEnd; nFeat++) + { + nIPFeat = nIPFeatStart + (nFeat - nFeatStart); + if (!_prc_inc_shifting_HasExtraFeat(oPC, sRemovedFeatList, oTemplate, nFeat, nIPFeat)) + nAddedCount += 1; + } + //Only need to add the last one, since they're cumulative + if (nAddedCount) + _prc_inc_shifting_AddExtraFeat(oPC, sRemovedFeatList, oPropertyHolder, nIPFeat, sFeatTrackingVariable); + return nAddedCount; +} +/* +void _prc_inc_shifting_SetSTR(object oShifter, int nSTR) +{ + PRC_Funcs_SetAbilityScore(oShifter, ABILITY_STRENGTH, nSTR); + //NWNX does not take into account any racial ability bonus/penalty. For instance, if the race has a + //+2 STR bonus, and we try to set STR to 10, it will instead set to 12. Handle that here. + int nErrorSTR = nSTR - GetAbilityScore(oShifter, ABILITY_STRENGTH, TRUE); + if (nErrorSTR) + PRC_Funcs_SetAbilityScore(oShifter, ABILITY_STRENGTH, nSTR + nErrorSTR); +} + +void _prc_inc_shifting_SetDEX(object oShifter, int nDEX) +{ + PRC_Funcs_SetAbilityScore(oShifter, ABILITY_DEXTERITY, nDEX); + //NWNX does not take into account any racial ability bonus/penalty. For instance, if the race has a + //+2 DEX bonus, and we try to set DEX to 10, it will instead set to 12. Handle that here. + int nErrorDEX = nDEX - GetAbilityScore(oShifter, ABILITY_DEXTERITY, TRUE); + if (nErrorDEX) + PRC_Funcs_SetAbilityScore(oShifter, ABILITY_DEXTERITY, nDEX + nErrorDEX); +} + +void _prc_inc_shifting_SetCON(object oShifter, int nCON) +{ + PRC_Funcs_SetAbilityScore(oShifter, ABILITY_CONSTITUTION, nCON); + //NWNX does not take into account any racial ability bonus/penalty. For instance, if the race has a + //+2 CON bonus, and we try to set CON to 10, it will instead set to 12. Handle that here. + int nErrorCON = nCON - GetAbilityScore(oShifter, ABILITY_CONSTITUTION, TRUE); + if (nErrorCON) + PRC_Funcs_SetAbilityScore(oShifter, ABILITY_CONSTITUTION, nCON + nErrorCON); +} + +void _prc_inc_shifting_SetINT(object oShifter, int nINT) +{ + PRC_Funcs_SetAbilityScore(oShifter, ABILITY_INTELLIGENCE, nINT); + //NWNX does not take into account any racial ability bonus/penalty. For instance, if the race has a + //+2 INT bonus, and we try to set INT to 10, it will instead set to 12. Handle that here. + int nErrorINT = nINT - GetAbilityScore(oShifter, ABILITY_INTELLIGENCE, TRUE); + if (nErrorINT) + PRC_Funcs_SetAbilityScore(oShifter, ABILITY_INTELLIGENCE, nINT + nErrorINT); +} + +void _prc_inc_shifting_SetWIS(object oShifter, int nWIS) +{ + PRC_Funcs_SetAbilityScore(oShifter, ABILITY_WISDOM, nWIS); + //NWNX does not take into account any racial ability bonus/penalty. For instance, if the race has a + //+2 WIS bonus, and we try to set WIS to 10, it will instead set to 12. Handle that here. + int nErrorWIS = nWIS - GetAbilityScore(oShifter, ABILITY_WISDOM, TRUE); + if (nErrorWIS) + PRC_Funcs_SetAbilityScore(oShifter, ABILITY_WISDOM, nWIS + nErrorWIS); +} + +void _prc_inc_shifting_SetCHA(object oShifter, int nCHA) +{ + PRC_Funcs_SetAbilityScore(oShifter, ABILITY_CHARISMA, nCHA); + //NWNX does not take into account any racial ability bonus/penalty. For instance, if the race has a + //+2 CHA bonus, and we try to set CHA to 10, it will instead set to 12. Handle that here. + int nErrorCHA = nCHA - GetAbilityScore(oShifter, ABILITY_CHARISMA, TRUE); + if (nErrorCHA) + PRC_Funcs_SetAbilityScore(oShifter, ABILITY_CHARISMA, nCHA + nErrorCHA); +} +*/ +void _prc_inc_shifting_ApplyTemplate(object oShifter, int nIndex, int nShifterType, object oTemplate, int bShifting, object oShifterPropertyHolder1=OBJECT_INVALID, object oShifterPropertyHolder2=OBJECT_INVALID) +{ + int nShapeGeneration = GetLocalInt(oShifter, PRC_Shifter_ShapeGeneration); + if (nShapeGeneration != nIndex) + { + //Don't apply properties that were scheduled when we were in another shape + if (DEBUG_APPLY_PROPERTIES) + DoDebug("_prc_inc_shifting_ApplyTemplate, exiting--old shape, Shifter Index: " + IntToString(nShapeGeneration)); + return; + } + + if(!GetIsObjectValid(oShifterPropertyHolder1)) + { + //Put some properties on skin because they won't work otherwise-- + //e.g., OnHit properties that should fire when the Shifter is hit by + //an enemy don't fire if they're not on the hide. + //Also, for some reason stat penalty item properties simply won't + //apply on creature weapons but work correctly on the skin. + //All properties applied to the skin need to be reapplied + //whenever the skin is scrubbed. + oShifterPropertyHolder1 = GetPCSkin(oShifter); + } + int bSkinScrubbed = !GetLocalInt(oShifterPropertyHolder1, "PRC_SHIFTER_TEMPLATE_APPLIED"); + //TODO: Use PRC_ScrubPCSkin_Generation instead? + SetLocalInt(oShifterPropertyHolder1, "PRC_SHIFTER_TEMPLATE_APPLIED", TRUE); //This gets cleared by DeletePRCLocalInts (after sleeping, etc.). + + int bApplyProperties1 = bSkinScrubbed; + + if(!GetIsObjectValid(oShifterPropertyHolder2)) + { + object oShifterCWpR = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oShifter); + object oShifterCWpL = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oShifter); + object oShifterCWpB = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oShifter); + //Put some properties on a creature weapon, because having them removed and re-added causes issues + //(e.g. having CON increase removed when your HP is low enough can kill you). + //These properties never need to be reapplied because the creature weapons are never scrubbed. + oShifterPropertyHolder2 = OBJECT_INVALID; + if(GetIsObjectValid(oShifterCWpR)) + oShifterPropertyHolder2 = oShifterCWpR; + if(GetIsObjectValid(oShifterCWpL)) + oShifterPropertyHolder2 = oShifterCWpL; + if(GetIsObjectValid(oShifterCWpB)) + oShifterPropertyHolder2 = oShifterCWpB; + } + int bApplyProperties2 = bShifting && GetIsObjectValid(oShifterPropertyHolder2); + + object oTemplateHide = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oTemplate); + + int bNeedSpellCast = FALSE; //Indicates whether there are any effects that require the spell to apply them + + if(nShifterType != SHIFTER_TYPE_CHANGESHAPE && + nShifterType != SHIFTER_TYPE_HUMANOIDSHAPE) + { + // Copy all itemproperties from the source's hide. No need to check for validity of oTemplateHide - it not + // existing works the same as it existing, but having no iprops. + if(bApplyProperties1) + _prc_inc_shifting_CopyAllItemProperties(oTemplateHide, oShifterPropertyHolder1); + } + + _prc_inc_shifting_DeleteEffectInts(oShifter); + + + + // Ability score adjustments - doesn't apply to Change Shape + if(nShifterType != SHIFTER_TYPE_CHANGESHAPE && + nShifterType != SHIFTER_TYPE_HUMANOIDSHAPE && + nShifterType != SHIFTER_TYPE_ALTER_SELF && + nShifterType != SHIFTER_TYPE_DISGUISE_SELF && + nShifterType != SHIFTER_TYPE_ARANEA) + { + struct _prc_inc_ability_info_struct rInfoStruct = _prc_inc_shifter_GetAbilityInfo(oTemplate, oShifter); + + if (DEBUG_ABILITY_BOOST_CALCULATIONS || DEBUG) + { + DoDebug("Template Creature STR/DEX/CON: " + IntToString(rInfoStruct.nTemplateSTR) + "/" + IntToString(rInfoStruct.nTemplateDEX) + "/" + IntToString(rInfoStruct.nTemplateCON)); + DoDebug("Shifter STR/DEX/CON: " + IntToString(rInfoStruct.nShifterSTR) + "/" + IntToString(rInfoStruct.nShifterDEX) + "/" + IntToString(rInfoStruct.nShifterCON)); + DoDebug("Delta STR/DEX/CON: " + IntToString(rInfoStruct.nDeltaSTR) + "/" + IntToString(rInfoStruct.nDeltaDEX) + "/" + IntToString(rInfoStruct.nDeltaCON)); + DoDebug("Item STR/DEX/CON: " + IntToString(rInfoStruct.nItemSTR) + "/" + IntToString(rInfoStruct.nItemDEX) + "/" + IntToString(rInfoStruct.nItemCON)); + DoDebug("Item Delta STR/DEX/CON: " + IntToString(rInfoStruct.nItemDeltaSTR) + "/" + IntToString(rInfoStruct.nItemDeltaDEX) + "/" + IntToString(rInfoStruct.nItemDeltaCON)); + DoDebug("Extra STR/DEX/CON: " + IntToString(rInfoStruct.nExtraSTR) + "/" + IntToString(rInfoStruct.nExtraDEX) + "/" + IntToString(rInfoStruct.nExtraCON)); + } + + // Set the ability score adjustments as composite bonuses + + { + if(bApplyProperties2 || bApplyProperties1) + { + + //set ability bonus in engine to allow for bonuses greater than 12 (default engine limit) + //SetAbilityBonusLimit(127); + SetAbilityBonusLimit (GetPRCSwitch(PRC_PNP_SHIFTER_BONUS)); + + //clear any existing ability boosts + effect eEffect = GetFirstEffect(oShifter); + while(GetIsEffectValid(eEffect)) + + { + if(GetEffectTag(eEffect) == "ShifterAbilities") + RemoveEffect(oShifter,eEffect); + eEffect = GetNextEffect(oShifter); + } + + //New upper limit checks based on the max bonus of +127 to ability scores, also checking against PRC switch -Barmlot + if (rInfoStruct.nDeltaSTR > 127) + rInfoStruct.nDeltaSTR = 127; + if (rInfoStruct.nDeltaSTR > Max_Bonus) + rInfoStruct.nDeltaSTR = Max_Bonus; + if (rInfoStruct.nDeltaDEX > 127) + rInfoStruct.nDeltaDEX = 127; + if (rInfoStruct.nDeltaDEX > Max_Bonus) + rInfoStruct.nDeltaDEX = Max_Bonus; + if (rInfoStruct.nDeltaCON > 127) + rInfoStruct.nDeltaCON = 127; + if (rInfoStruct.nDeltaCON > Max_Bonus) + rInfoStruct.nDeltaCON = Max_Bonus; + + effect eNewStr; + effect eNewDex; + effect eNewCon; + + //Not sure this positive/negative check is necessary as EffectAbilityIncrease seems to take a signed integer, leaving as is -Barmlot + if (rInfoStruct.nDeltaSTR > 0) + eNewStr = EffectAbilityIncrease(IP_CONST_ABILITY_STR, rInfoStruct.nDeltaSTR); + else + eNewStr = EffectAbilityDecrease(IP_CONST_ABILITY_STR, rInfoStruct.nDeltaSTR); + if (rInfoStruct.nDeltaDEX > 0) + eNewDex = EffectAbilityIncrease(IP_CONST_ABILITY_DEX, rInfoStruct.nDeltaDEX); + else + eNewDex = EffectAbilityDecrease(IP_CONST_ABILITY_DEX, rInfoStruct.nDeltaDEX); + if (rInfoStruct.nDeltaCON > 0) + eNewCon = EffectAbilityIncrease(IP_CONST_ABILITY_CON, rInfoStruct.nDeltaCON); + else + eNewCon = EffectAbilityDecrease(IP_CONST_ABILITY_CON, rInfoStruct.nDeltaCON); + + + + ePhysicalStats = EffectLinkEffects(eNewStr, eNewDex); + ePhysicalStats = EffectLinkEffects(ePhysicalStats, eNewCon); + ePhysicalStats = TagEffect(ePhysicalStats, "ShifterAbilities"); + + if (GetLevelByClass(CLASS_TYPE_PNP_SHIFTER, oShifter) > 5) + ePhysicalStats = SupernaturalEffect(ePhysicalStats); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,ePhysicalStats,oShifter); + } + } + } + // Approximately figure out the template's natural AC bonus + if (nShifterType != SHIFTER_TYPE_CHANGESHAPE && + nShifterType != SHIFTER_TYPE_HUMANOIDSHAPE && + nShifterType != SHIFTER_TYPE_DISGUISE_SELF && + nShifterType != SHIFTER_TYPE_ARANEA) + { + int nNaturalAC = _prc_inc_CreatureNaturalAC(oTemplate); + if(nNaturalAC > 0) + { + bNeedSpellCast = TRUE; + SetLocalInt(oShifter, "PRC_Shifter_NaturalAC", nNaturalAC); + } + } + + // Feats - read from shifter_feats.2da, check if template has it and copy over if it does + // Delayed, since this takes way too long + if(bApplyProperties1) + { + if(nShifterType != SHIFTER_TYPE_CHANGESHAPE + && nShifterType != SHIFTER_TYPE_HUMANOIDSHAPE + && nShifterType != SHIFTER_TYPE_ALTER_SELF + && nShifterType != SHIFTER_TYPE_DISGUISE_SELF + && nShifterType != SHIFTER_TYPE_ARANEA) + { + //Copy feats in chunks because shapes with *many* feats were giving TMI errors + string sFeat; + int CHUNK_SIZE = 25; //50 was too big, so use 25 + int i = 0; + while((sFeat = Get2DACache("shifter_feats", "Feat", i)) != "") + { + DelayCommand(0.0f, _prc_inc_shifting_CopyFeats(oShifter, oTemplate, oShifterPropertyHolder1, i, i+CHUNK_SIZE)); + i += CHUNK_SIZE; + } + } + + DelayCommand(0.1f, _prc_inc_shifting_AddCreatureWeaponFeats(oShifter, oShifterPropertyHolder1)); + + DelayCommand(1.0f, DoWeaponsEquip(oShifter)); //Since our weapon proficiency feats may have changed, reapply weapon feat simulations + //TODO: Handle armor also? + //TODO: Should actually unequip weapon if incorrect size, armor if not proficient (but this might be a pain). + } + + // Casting restrictions if our - inaccurate - check indicates the template can't cast spells + if(!_prc_inc_shifting_GetCanFormCast(oTemplate) && !GetHasFeat(FEAT_PRESTIGE_SHIFTER_NATURALSPELL, oShifter)) + SetLocalInt(oShifter, SHIFTER_RESTRICT_SPELLS, TRUE); + + // Harmless stuff gets invisibility + if(_prc_inc_shifting_GetIsCreatureHarmless(oTemplate)) + { + bNeedSpellCast = TRUE; + SetLocalInt(oShifter, "PRC_Shifter_HarmlessInvisible", TRUE); + } + + //Override racial type. + //Change shape doesn't include this, but there is a feat that gives it to Changelings + if((nShifterType != SHIFTER_TYPE_CHANGESHAPE + && nShifterType != SHIFTER_TYPE_SHIFTER + && nShifterType != SHIFTER_TYPE_POLYMORPH + && nShifterType != SHIFTER_TYPE_DRUID + && nShifterType != SHIFTER_TYPE_HUMANOIDSHAPE + && nShifterType != SHIFTER_TYPE_ALTER_SELF + && nShifterType != SHIFTER_TYPE_DISGUISE_SELF + && nShifterType != SHIFTER_TYPE_ARANEA) + || GetHasFeat(FEAT_RACIAL_EMULATION)) + { + int nRace = MyPRCGetRacialType(oTemplate); + SetLocalInt(oShifter, SHIFTER_OVERRIDE_RACE, nRace + 1); //Offset by 1 to differentiate value 0 from non-existence + + if(GetPersistantLocalInt(oShifter, SHIFTER_TRUE_RACE)) //Only change race if we can get back again when we unshift! + PRC_Funcs_SetRace(oShifter, nRace); + } + + // If something needs permanent effects applied, create a placeable to do the casting in order to bind the effects to a spellID + if(bNeedSpellCast) + { + SetLocalInt(oShifter, PRC_Shifter_ApplyEffects_EvalPRC_Generation, GetLocalInt(oShifter, PRC_EvalPRCFeats_Generation)); + SetLocalInt(oShifter, "PRC_Shifter_AffectsToApply", TRUE); + _prc_inc_shifting_ApplyEffects(oShifter, bShifting); + } + else + { + DeleteLocalInt(oShifter, "PRC_SHIFTER_APPLY_ALL_SPELL_EFFECTS"); + _prc_inc_shifting_RemoveSpellEffects(oShifter, TRUE); + } +} + +/** Internal function. + * Implements the actual shifting bit. Copies creature items, changes appearance, etc + * + * @param oShifter The creature shifting + * @param nShifterType SHIFTER_TYPE_* + * @param oTemplate The template creature + * @param bGainSpellLikeAbilities Whether to create the SLA item + */ +void _prc_inc_shifting_ShiftIntoTemplateAux(object oShifter, int nShifterType, object oTemplate, int bGainSpellLikeAbilities) +{ + if(DEBUG) DoDebug("prc_inc_shifting: _ShiftIntoResRefAux():\n" + + "oShifter = " + DebugObject2Str(oShifter) + "\n" + + "nShifterType = " + IntToString(nShifterType) + "\n" + + "oTemplate = " + DebugObject2Str(oTemplate) + "\n" + + "bGainSpellLikeAbilities = " + DebugBool2String(bGainSpellLikeAbilities) + "\n" + ); + + string sFormName = GetName(oTemplate); + int nRequiredShifterLevel = _prc_inc_shifting_ShifterLevelRequirement(oTemplate); + int nRequiredCharacterLevel = _prc_inc_shifting_CharacterLevelRequirement(oTemplate); + float fChallengeRating = GetChallengeRating(oTemplate); + + // Make sure the template creature is still valid + if(!GetIsObjectValid(oTemplate) || GetObjectType(oTemplate) != OBJECT_TYPE_CREATURE) + { + if(DEBUG) DoDebug("prc_inc_shifting: _ShiftIntoTemplateAux(): ERROR: oTemplate is not a valid object or not a creature: " + DebugObject2Str(oTemplate)); + /// @todo Write a better error message + SendMessageToPCByStrRef(oShifter, STRREF_TEMPLATE_FAILURE); // "Polymorph failed: Failed to create a template of the creature to polymorph into." + + // On failure, unset the mutex right away + SetLocalInt(oShifter, SHIFTER_SHIFT_MUTEX, FALSE); + } + else + { + // Queue unsetting the mutex. Done here so that even if something breaks along the way, this has a good chance of getting executed + DelayCommand(SHIFTER_MUTEX_UNSET_DELAY, SetLocalInt(oShifter, SHIFTER_SHIFT_MUTEX, FALSE)); + + /* Start the actual shifting */ + + // First, clear the shifter's action queue. We'll be assigning a bunch of commands that should get executed ASAP + AssignCommand(oShifter, ClearAllActions(TRUE)); + + // Get the shifter's creature items + object oShifterHide = GetPCSkin(oShifter); // Use the PRC wrapper for this to make sure we get the right object + object oShifterCWpR = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oShifter); + object oShifterCWpL = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oShifter); + object oShifterCWpB = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oShifter); + + // Get the template's creature items + object oTemplateHide = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oTemplate); + object oTemplateCWpR = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTemplate); + object oTemplateCWpL = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTemplate); + object oTemplateCWpB = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTemplate); + + //Changelings don't get the natural attacks + object oCreatureWeapon = OBJECT_INVALID; + if(nShifterType != SHIFTER_TYPE_DISGUISE_SELF) + { + // Handle creature weapons - replace any old weapons with new + // Delete old natural weapons + if(GetIsObjectValid(oShifterCWpR)) MyDestroyObject(oShifterCWpR); + if(GetIsObjectValid(oShifterCWpL)) MyDestroyObject(oShifterCWpL); + if(GetIsObjectValid(oShifterCWpB)) MyDestroyObject(oShifterCWpB); + oShifterCWpR = oShifterCWpL = oShifterCWpR = OBJECT_INVALID; + + // Copy the template's weapons and assign equipping + + if(GetIsObjectValid(oTemplateCWpR)) + { + oShifterCWpR = CopyItem(oTemplateCWpR, oShifter, TRUE); + oCreatureWeapon = oShifterCWpR; + SetIdentified(oShifterCWpR, TRUE); + SafeEquipItem(oShifter, oShifterCWpR, INVENTORY_SLOT_CWEAPON_R); + } + if(GetIsObjectValid(oTemplateCWpL)) + { + oShifterCWpL = CopyItem(oTemplateCWpL, oShifter, TRUE); + oCreatureWeapon = oShifterCWpL; + SetIdentified(oShifterCWpL, TRUE); + SafeEquipItem(oShifter, oShifterCWpL, INVENTORY_SLOT_CWEAPON_L); + } + if(GetIsObjectValid(oTemplateCWpB)) + { + oShifterCWpB = CopyItem(oTemplateCWpB, oShifter, TRUE); + oCreatureWeapon = oShifterCWpB; + SetIdentified(oShifterCWpB, TRUE); + SafeEquipItem(oShifter, oShifterCWpB, INVENTORY_SLOT_CWEAPON_B); + } + if (!GetIsObjectValid(oCreatureWeapon)) + { + //Make a dummy creature weapon that doesn't do anything except hold properties--it is never used as a weapon + //Don't do this if using NWNX funcs: the properties that would normally be applied to the creature + //weapon aren't needed, since NWNX funcs makes the changes directly to the creature instead. + oShifterCWpB = CreateItemOnObject("pnp_shft_cweap", oShifter); //create a shifter blank creature weapon + SetIdentified(oShifterCWpB, TRUE); + oCreatureWeapon = oShifterCWpB; + SafeEquipItem(oShifter, oShifterCWpB, INVENTORY_SLOT_CWEAPON_B); + } + } + //Hide isn't modified for Change Shape - Special Qualities don't transfer + if(nShifterType != SHIFTER_TYPE_CHANGESHAPE && + nShifterType != SHIFTER_TYPE_HUMANOIDSHAPE && + nShifterType != SHIFTER_TYPE_ARANEA) + { + // Handle hide + // Nuke old props and composite bonus tracking - they will be re-evaluated later + ScrubPCSkin(oShifter, oShifterHide); + DeletePRCLocalInts(oShifterHide); + } + + //Do this here instead of letting EvalPRCFeats do it below so that it happens sooner + _prc_inc_shifting_ApplyTemplate(oShifter, GetLocalInt(oShifter, PRC_Shifter_ShapeGeneration), nShifterType, oTemplate, TRUE, oShifterHide, oCreatureWeapon); + + // Ability score adjustments - doesn't apply to Change Shape + if(nShifterType != SHIFTER_TYPE_CHANGESHAPE && + nShifterType != SHIFTER_TYPE_HUMANOIDSHAPE && + nShifterType != SHIFTER_TYPE_ALTER_SELF && + nShifterType != SHIFTER_TYPE_DISGUISE_SELF && + nShifterType != SHIFTER_TYPE_ARANEA) + { + // Get the base delta + int nCreatureCON = GetAbilityScore(oTemplate, ABILITY_CONSTITUTION, TRUE); + int nHealHP = GetHitDice(oShifter) + nCreatureCON; //TODO: Need to take into account Great Constitution and Epic Toughness? + if(!GetPRCSwitch(PRC_PNP_REST_HEALING)) + { + //Wildshape is supposed to heal the same amount as a night's sleep, which by default NWN rules + //is full healing. That would be overpowered, so we'll use only double the PnP healing amount here. + nHealHP *= 2; + } + + { + //Preserve HP loss we had before shifting, but first heal by the amount that wildshaping is supposed to + //(one hitpoint per hit die plus one hitpoint per point of CON) + //Since we temporarily fully healed before shifting, we can assume we have full HP before damaging or healing. + int nOriginalMaxHP = GetLocalInt(oShifter, SHIFTER_ORIGINALMAXHP); + if(nOriginalMaxHP) + { + int nOriginalHP = GetLocalInt(oShifter, SHIFTER_ORIGINALHP); + int nDamageAmount = nOriginalMaxHP - nOriginalHP - nHealHP; + if(nDamageAmount > 0) + { + //TODO: make sure the full damage amount is applied + //(e.g., try a different damage type if immune to this one, + //or damage multiple times if full damage is prevented due + //to partial immunity, etc.). + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamageAmount), oShifter); + } + else + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(-nDamageAmount), oShifter); + SetLocalInt(oShifter, SHIFTER_ORIGINALMAXHP, 0); + } + else + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(nHealHP), oShifter); + } + } + + // If requested, generate an item for using SLAs + if(bGainSpellLikeAbilities) + { + object oSLAItem = CreateItemOnObject(SHIFTING_SLAITEM_RESREF, oShifter); + // Delayed to prevent potential TMI + DelayCommand(0.0f, _prc_inc_shifting_CreateShifterActiveAbilitiesItem(oShifter, oTemplate, oSLAItem)); + } + + // Change the appearance to that of the template + if(GetAppearanceType(oTemplate) > 5) + SetAppearanceData(oShifter, GetAppearanceData(oTemplate)); + else + { + SetAppearanceData(oShifter, GetAppearanceData(oTemplate)); + SetLocalInt(oShifter, "DynamicAppearance", TRUE); + SetCreatureAppearanceType(oShifter, GetAppearanceType(oTemplate)); + } + + // Some VFX + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_POLYMORPH), oShifter); + + // Set the shiftedness marker + SetPersistantLocalInt(oShifter, SHIFTER_ISSHIFTED_MARKER, TRUE); + + if(nShifterType == SHIFTER_TYPE_ALTER_SELF || + (nShifterType == SHIFTER_TYPE_DISGUISE_SELF + && GetRacialType(oShifter) != RACIAL_TYPE_CHANGELING + && !GetLocalInt(oShifter, "MaskOfFleshInvocation") + && !GetLocalInt(oShifter, "HasFaceChanger"))) + { + int nShiftedNumber = GetPersistantLocalInt(oShifter, "nTimesShifted"); + if(nShiftedNumber > 9) nShiftedNumber = 0; + nShiftedNumber++; + SetPersistantLocalInt(oShifter, "nTimesShifted", nShiftedNumber); + int nMetaMagic = PRCGetMetaMagicFeat(); + int nDuration = PRCGetCasterLevel(oShifter) * 10; + if ((nMetaMagic & METAMAGIC_EXTEND)) + { + nDuration *= 2; + } + DelayCommand(TurnsToSeconds(nDuration), ForceUnshift(oShifter, nShiftedNumber)); + } + + else if(GetLocalInt(oShifter, "HumanoidShapeInvocation")) + { + int nShiftedNumber = GetPersistantLocalInt(oShifter, "nTimesShifted"); + if(nShiftedNumber > 9) nShiftedNumber = 0; + nShiftedNumber++; + SetPersistantLocalInt(oShifter, "nTimesShifted", nShiftedNumber); + DelayCommand(HoursToSeconds(24), ForceUnshift(oShifter, nShiftedNumber)); + } + + else if(GetLocalInt(oShifter, "MaskOfFleshInvocation")) + { + int nShiftedNumber = GetPersistantLocalInt(oShifter, "nTimesShifted"); + if(nShiftedNumber > 9) nShiftedNumber = 0; + nShiftedNumber++; + SetPersistantLocalInt(oShifter, "nTimesShifted", nShiftedNumber); + int nDuration = GetLocalInt(oShifter, "MaskOfFleshInvocation"); + DelayCommand(HoursToSeconds(nDuration), ForceUnshift(oShifter, nShiftedNumber)); + } + + else if(GetLocalInt(oShifter, "HasFaceChanger")) + { + int nShiftedNumber = GetPersistantLocalInt(oShifter, "nTimesShifted"); + if(nShiftedNumber > 9) nShiftedNumber = 0; + nShiftedNumber++; + SetPersistantLocalInt(oShifter, "nTimesShifted", nShiftedNumber); + int nDuration = GetLocalInt(oShifter, "FaceChangerBonus"); + DelayCommand(RoundsToSeconds(nDuration), ForceUnshift(oShifter, nShiftedNumber)); + } + + // Run the class & feat evaluation code + SetPersistantLocalString(oShifter, "PRC_SHIFTING_TEMPLATE_RESREF", GetResRef(oTemplate)); + SetPersistantLocalInt(oShifter, "PRC_SHIFTING_SHIFTER_TYPE", nShifterType); + + _prc_inc_shifting_EvalPRCFeats(oShifter, oShifterHide); + } + + // Print shift information--this is slow, so wait until shifting is done + int bDebug = GetLocalInt(oShifter, "prc_shift_debug"); + DelayCommand(SHIFTER_SHAPE_PRINT_DELAY, _prc_inc_PrintShape(oShifter, oTemplate, bDebug)); + + // Destroy the template creature--we need the template to print, so wait until that's done + DelayCommand(SHIFTER_TEMPLATE_DESTROY_DELAY, MyDestroyObject(oTemplate)); +} + +/** Internal function. + * Does the actual work in unshifting. Restores creature items and + * appearance. If oTemplate is valid, _prc_inc_shifting_ShiftIntoTemplateAux() + * will be called once unshifting is finished. + * + * NOTE: This assumes that all polymorph effects have already been removed. + * + * @param oShifter Creature to unshift + * + * Reshift parameters: + * @param nShifterType Passed to _prc_inc_shifting_ShiftIntoTemplateAux() when reshifting. + * @param oTemplate Passed to _prc_inc_shifting_ShiftIntoTemplateAux() when reshifting. + * @param bGainSpellLikeAbilities Passed to _prc_inc_shifting_ShiftIntoTemplateAux() when reshifting. + */ +void _prc_inc_shifting_UnShiftAux(object oShifter, int nShifterType, object oTemplate, int bGainSpellLikeAbilities) +{ + int bReshift = GetIsObjectValid(oTemplate); + + effect eEffect = GetFirstEffect(oShifter); + while(GetIsEffectValid(eEffect)) + { + if(GetEffectTag(eEffect) == "ShifterAbilities") + RemoveEffect(oShifter,eEffect); + eEffect = GetNextEffect(oShifter); + } + + // Get the shifter's creature items + object oShifterHide = GetPCSkin(oShifter); // Use the PRC wrapper for this to make sure we get the right object + object oShifterCWpR = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oShifter); + object oShifterCWpL = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oShifter); + object oShifterCWpB = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oShifter); + + int nAdjustHP = bReshift && ( + nShifterType != SHIFTER_TYPE_CHANGESHAPE + && nShifterType != SHIFTER_TYPE_HUMANOIDSHAPE + && nShifterType != SHIFTER_TYPE_ALTER_SELF + && nShifterType != SHIFTER_TYPE_DISGUISE_SELF + && nShifterType != SHIFTER_TYPE_ARANEA + //TODO?: && nShifterType != SHIFTER_TYPE_NONE + ); + if(nAdjustHP) + { + int nOriginalHP = GetCurrentHitPoints(oShifter); + int nOriginalMaxHP = GetMaxHitPoints(oShifter); + SetLocalInt(oShifter, SHIFTER_ORIGINALHP, nOriginalHP); + SetLocalInt(oShifter, SHIFTER_ORIGINALMAXHP, nOriginalMaxHP); + + //Before unshifting, fully heal the shifter. After shifting, some of the added hitpoints will be taken away again. + //This is to prevent the Shifter from dying when shifting from one high CON form to another high CON form + //due to the temporary loss of CON caused by shifting into the low-CON true form in between. + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(nOriginalMaxHP), oShifter); + + } + + // Clear the hide. We'll have to run EvalPRCFeats() later on + ScrubPCSkin(oShifter, oShifterHide); + DeletePRCLocalInts(oShifterHide); + GetPersistantLocalInt(oShifter, SHIFTER_TRUEAPPEARANCE); + //HACK: For some reason, the next call to this function after the line above it returns FALSE even if it should return TRUE, + //but the next call to it after that returns the correct result. So, call it here: this makes it return the correct + //result for the RestoreTrueAppearance call below. + //TODO: REMOVE when workaround no longer needed + //TODO: is this because of the delays in DeletePRCLocalInts? + + // Nuke the creature weapons. If the normal form is supposed to have natural weapons, they'll get re-constructed + if(GetIsObjectValid(oShifterCWpR)) MyDestroyObject(oShifterCWpR); + if(GetIsObjectValid(oShifterCWpL)) MyDestroyObject(oShifterCWpL); + if(GetIsObjectValid(oShifterCWpB)) MyDestroyObject(oShifterCWpB); + + object oSLAItem = GetItemPossessedBy(oShifter, SHIFTING_SLAITEM_TAG); + int bCheckForAuraEffects = FALSE; + if(GetIsObjectValid(oSLAItem)) + { + MyDestroyObject(oSLAItem); + bCheckForAuraEffects = TRUE; + } + + // Remove effects + _prc_inc_shifting_DeleteEffectInts(oShifter); + + if (!bReshift) + _prc_inc_shifting_RemoveSpellEffects(oShifter, TRUE); + + effect eTest = GetFirstEffect(oShifter); + if (bCheckForAuraEffects) + { + while(GetIsEffectValid(eTest)) + { + int nEffectSpellID = GetEffectSpellId(eTest); + + if(nEffectSpellID == SPELLABILITY_AURA_BLINDING || + nEffectSpellID == SPELLABILITY_AURA_COLD || + nEffectSpellID == SPELLABILITY_AURA_ELECTRICITY || + nEffectSpellID == SPELLABILITY_AURA_FEAR || + nEffectSpellID == SPELLABILITY_AURA_FIRE || + nEffectSpellID == SPELLABILITY_AURA_MENACE || + nEffectSpellID == SPELLABILITY_AURA_PROTECTION || + nEffectSpellID == SPELLABILITY_AURA_STUN || + nEffectSpellID == SPELLABILITY_AURA_UNEARTHLY_VISAGE || + nEffectSpellID == SPELLABILITY_AURA_UNNATURAL || + nEffectSpellID == SPELLABILITY_DRAGON_FEAR + ) + { + RemoveEffect(oShifter, eTest); + } + + eTest = GetNextEffect(oShifter); + } + } + + // Restore appearance + if(!RestoreTrueAppearance(oShifter)) + { + string sError = "prc_inc_shifting: _UnShiftAux(): ERROR: Unable to restore true form for " + DebugObject2Str(oShifter); + if(DEBUG) DoDebug(sError); + else WriteTimestampedLogEntry(sError); + } + + // Unset the shiftedness marker + SetPersistantLocalInt(oShifter, SHIFTER_ISSHIFTED_MARKER, FALSE); + + _prc_inc_shifting_EvalPRCFeats(oShifter, oShifterHide); + + // Queue reshifting to happen if needed. Let a short while pass so any fallout from the unshift gets handled + if(bReshift) + DelayCommand(1.0f, _prc_inc_shifting_ShiftIntoTemplateAux(oShifter, nShifterType, oTemplate, bGainSpellLikeAbilities)); + else + SetLocalInt(oShifter, SHIFTER_SHIFT_MUTEX, FALSE); +} + +/** Internal function. + * A polymorph effect was encountered during unshifting and removed. We need to + * wait until it's actually removed (instead of merely gone from the active effects + * list on oShifter) before calling _prc_inc_shifting_UnShiftAux(). + * This is done by tracking the contents of the creature armour slot. The object in + * it will change when the polymorph is really removed. + * + * @param oShifter The creature whose creature armour slot to monitor. + * @param oSkin The skin object that was in the slot when the UnShift() call that triggered + * this was run. + * @param nRepeats Number of times this function has repeated the delay. Used to track timeout + */ +void _prc_inc_shifting_UnShiftAux_SeekPolyEnd(object oShifter, object oSkin, int nRepeats = 0) +{ + // Over 15 seconds passed, something is wrong + if(nRepeats++ > 100) + { + if(DEBUG) DoDebug("prc_inc_shifting: _UnShiftAux_SeekPolyEnd(): ERROR: Repeated over 100 times, skin object remains the same."); + return; + } + + // See if the skin object has changed. When it does, the polymorph is genuinely gone instead of just being removed from the effects list + if(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oShifter) == oSkin) + DelayCommand(0.15f, _prc_inc_shifting_UnShiftAux_SeekPolyEnd(oShifter, oSkin, nRepeats)); + // It's gone, finish unshifting + else + _prc_inc_shifting_UnShiftAux(oShifter, SHIFTER_TYPE_NONE, OBJECT_INVALID, FALSE); +} + +object _prc_inc_load_template_from_resref(string sResRef, int nHD) +{ + /* Create the template to shift into */ + // Get the waypoint in Limbo where shifting template creatures are spawned + object oSpawnWP = GetWaypointByTag(SHIFTING_TEMPLATE_WP_TAG); + // Paranoia check - the WP should be built into the area data of Limbo + if(!GetIsObjectValid(oSpawnWP)) + { + if(DEBUG) DoDebug("prc_inc_shifting: ShiftIntoResRef(): ERROR: Template spawn waypoint does not exist."); + // Create the WP + oSpawnWP = CreateObject(OBJECT_TYPE_WAYPOINT, "nw_waypoint001", GetLocation(GetObjectByTag("HEARTOFCHAOS")), FALSE, SHIFTING_TEMPLATE_WP_TAG); + } + + // Get the WP's location + location lSpawn = GetLocation(oSpawnWP); + + // And spawn an instance of the given template there + object oTemplate = CreateObject(OBJECT_TYPE_CREATURE, sResRef, lSpawn); + + /* + Some modules create low-level templates and level them up. + Until now, when we tried learning the higher-level version, we ended up with the + lower-level template instead. This level-up code takes care of that. + + Properly, we should remember what level we actually learned it at and only level that + far, instead of leveling up to our current level. I've chosen to do it this way + for the following reasons: + > Doing it properly is more intrusive and more error-prone coding. For now, at least, + I don't think it makes sense to do that. + > Doing it properly way would litter our known shapes list with the same creature at different + levels, when all we really want is the highest level one we can use. + > From a role-playing point of view, shapes implemented that way by a module are presumably + common in the module, so a shifter would be pretty familiar with them and so would generally + have learned the highest level he can shift into. + */ + int bTemplateCanLevel = FALSE; + if (LevelUpHenchman(oTemplate)) + { + bTemplateCanLevel = TRUE; + MyDestroyObject(oTemplate); + oTemplate = CreateObject(OBJECT_TYPE_CREATURE, sResRef, lSpawn); + } + if(bTemplateCanLevel) + { + int nNeedLevels = nHD - GetHitDice(oTemplate); + if (GetPRCSwitch(PNP_SHFT_USECR)) + { + int i; + for (i=0; i<40; i+=1) + { + if (GetChallengeRating(oTemplate) > IntToFloat(nHD)) + break; + if (!LevelUpHenchman(oTemplate)) + break; + } + nNeedLevels = GetHitDice(oTemplate); + if (GetChallengeRating(oTemplate) > IntToFloat(nHD)) + nNeedLevels -= 1; + MyDestroyObject(oTemplate); + oTemplate = CreateObject(OBJECT_TYPE_CREATURE, sResRef, lSpawn); + nNeedLevels -= GetHitDice(oTemplate); + } + while (nNeedLevels > 0) + { + if (!LevelUpHenchman(oTemplate)) + break; + nNeedLevels -= 1; + } + SetLocalInt(oTemplate, "prc_template_can_level", 1); + } + + return oTemplate; +} + +string _prc_inc_get_stored_name_from_template(object oTemplate) +{ + string sSuffix; + if(GetLocalInt(oTemplate, "prc_template_can_level")) + sSuffix = "+"; + string sResult = GetStringByStrRef(57438+0x01000000); + sResult = ReplaceString(sResult, "%(NAME)", GetName(oTemplate)); + sResult = ReplaceString(sResult, "%(SL)", IntToString(_prc_inc_shifting_ShifterLevelRequirement(oTemplate))); + sResult = ReplaceString(sResult, "%(CL)", IntToString(GetHitDice(oTemplate)) + sSuffix); + sResult = ReplaceString(sResult, "%(CR)", FloatToString(GetChallengeRating(oTemplate), 4, 1) + sSuffix); + return sResult; +} + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int StoreCurrentRaceAsTrueRace(object oShifter) +{ + if (GetPersistantLocalInt(oShifter, SHIFTER_ISSHIFTED_MARKER)) + return FALSE; + + if (IsPolymorphed(oShifter)) + return FALSE; + + SetPersistantLocalInt(oShifter, SHIFTER_TRUE_RACE, MyPRCGetRacialType(oShifter) + 1); + + return TRUE; +} + +int StoreCurrentAppearanceAsTrueAppearance(object oShifter, int bCarefull = TRUE) +{ + // If requested, check that the creature isn't shifted or polymorphed + if(bCarefull) + { + if (GetPersistantLocalInt(oShifter, SHIFTER_ISSHIFTED_MARKER)) + return FALSE; + + if (IsPolymorphed(oShifter)) + return FALSE; + } + + // Get the appearance data + struct appearancevalues appval = GetAppearanceData(oShifter); + + // Store it + SetPersistantLocalAppearancevalues(oShifter, SHIFTER_TRUEAPPEARANCE, appval); + SetPersistantLocalInt(oShifter, "TrueFormAppearanceType", GetAppearanceType(oShifter)); + + // Set a marker that tells that the true appearance is stored + SetPersistantLocalInt(oShifter, SHIFTER_TRUEAPPEARANCE, TRUE); + + return TRUE; +} + +int RestoreTrueAppearance(object oShifter) +{ + // Check for the "true appearance stored" marker. Abort if it's not present + if(!GetPersistantLocalInt(oShifter, SHIFTER_TRUEAPPEARANCE)) + return FALSE; + + // See if the character is polymorphed. Won't restore the appearance if it is + if (IsPolymorphed(oShifter)) + return FALSE; + + // We got this far, everything should be OK + // Retrieve the appearance data + struct appearancevalues appval = GetPersistantLocalAppearancevalues(oShifter, SHIFTER_TRUEAPPEARANCE); + + // Apply it to the creature + SetAppearanceData(oShifter, appval); + + if(GetLocalInt(oShifter, "DynamicAppearance")) + { + SetCreatureAppearanceType(oShifter, GetPersistantLocalInt(oShifter, "TrueFormAppearanceType")); + DeleteLocalInt(oShifter, "DynamicAppearance"); + } + + // Inform caller of success + return TRUE; +} + + +// Storage functions // + +int StoreShiftingTemplate(object oShifter, int nShifterType, object oTarget) +{ + // Some paranoia - both the target and the object to store on must be valid. And PCs are never legal for storage - PC resref should be always empty + if(!(GetIsObjectValid(oShifter) && GetIsObjectValid(oTarget) && GetResRef(oTarget) != "")) + return FALSE; + + string sResRefsArray = SHIFTER_RESREFS_ARRAY + IntToString(nShifterType); + string sNamesArray = SHIFTER_NAMES_ARRAY + IntToString(nShifterType); + string sRacialTypeArray = SHIFTER_RACIALTYPE_ARRAY + IntToString(nShifterType); + + // Determine array existence + if(!persistant_array_exists(oShifter, sResRefsArray)) + persistant_array_create(oShifter, sResRefsArray); + if(!persistant_array_exists(oShifter, sNamesArray)) + persistant_array_create(oShifter, sNamesArray); + if(!persistant_array_exists(oShifter, sRacialTypeArray)) + persistant_array_create(oShifter, sRacialTypeArray); + + // Get the storeable data + string sResRef = GetResRef(oTarget); + string sName = _prc_inc_get_stored_name_from_template(oTarget); + string sRacialType = IntToString(MyPRCGetRacialType(oTarget)); + int nArraySize = persistant_array_get_size(oShifter, sResRefsArray); + + // Check for the template already being present + if(_prc_inc_shifting_GetIsTemplateStored(oShifter, nShifterType, sResRef)) + return FALSE; + + persistant_array_set_string(oShifter, sResRefsArray, nArraySize, sResRef); + persistant_array_set_string(oShifter, sNamesArray, nArraySize, sName); + persistant_array_set_string(oShifter, sRacialTypeArray, nArraySize, sRacialType); + + return TRUE; +} + +int GetNumberOfStoredTemplates(object oShifter, int nShifterType) +{ + if(!persistant_array_exists(oShifter, SHIFTER_RESREFS_ARRAY + IntToString(nShifterType))) + return 0; + + return persistant_array_get_size(oShifter, SHIFTER_RESREFS_ARRAY + IntToString(nShifterType)); +} + +string GetStoredTemplate(object oShifter, int nShifterType, int nIndex) +{ + return persistant_array_get_string(oShifter, SHIFTER_RESREFS_ARRAY + IntToString(nShifterType), nIndex); +} + +string GetStoredTemplateFilter(object oShifter, int nShifterType) +{ + string sResult = "|"; + int nCount = GetNumberOfStoredTemplates(oShifter, nShifterType); + int i; + for(i=0; i nArraySize) + return FALSE; + + string sName = persistant_array_get_string(oShifter, sNamesArray, nIndex); + return GetStringLeft(sName, nDeletedPrefixLen) == SHIFTER_DELETED_SHAPE_PREFIX; +} + +void SetStoredTemplateDeleteMark(object oShifter, int nShifterType, int nIndex, int bMark) +{ + int nDeletedPrefixLen = GetStringLength(SHIFTER_DELETED_SHAPE_PREFIX); + string sNamesArray = SHIFTER_NAMES_ARRAY + IntToString(nShifterType); + + if(!persistant_array_exists(oShifter, sNamesArray)) + return; + + int nArraySize = persistant_array_get_size(oShifter, sNamesArray); + if (nIndex > nArraySize) + return; + + string sName = persistant_array_get_string(oShifter, sNamesArray, nIndex); + if (GetStringLeft(sName, nDeletedPrefixLen) == SHIFTER_DELETED_SHAPE_PREFIX) + { + if (!bMark) + sName = GetStringRight(sName, GetStringLength(sName)-nDeletedPrefixLen); + } + else + { + if (bMark) + sName = SHIFTER_DELETED_SHAPE_PREFIX + sName; + } + persistant_array_set_string(oShifter, sNamesArray, nIndex, sName); +} + +void DeleteMarkedStoredTemplates(object oShifter, int nShifterType, int nSrc=0, int nDst=0) +{ + int nDeletedPrefixLen = GetStringLength(SHIFTER_DELETED_SHAPE_PREFIX); + string sResRefsArray = SHIFTER_RESREFS_ARRAY + IntToString(nShifterType); + string sNamesArray = SHIFTER_NAMES_ARRAY + IntToString(nShifterType); + string sRacialTypeArray = SHIFTER_RACIALTYPE_ARRAY + IntToString(nShifterType); + + // Determine array existence + if(!persistant_array_exists(oShifter, sResRefsArray)) + return; + if(!persistant_array_exists(oShifter, sNamesArray)) + return; + int nRacialTypeArrayExists = persistant_array_exists(oShifter, sRacialTypeArray); + + // Move array entries, skipping the marked ones + int nCount = 0, nArraySize = persistant_array_get_size(oShifter, sResRefsArray); + string sName, sResRef, sRace; + while(nSrc < nArraySize && nCount++ < CHUNK_SIZE) + { + sName = persistant_array_get_string(oShifter, sNamesArray, nSrc); + if (GetStringLeft(sName, nDeletedPrefixLen) != SHIFTER_DELETED_SHAPE_PREFIX) + { + if (nSrc != nDst) + { + persistant_array_set_string(oShifter, sNamesArray, nDst, sName); + sResRef = persistant_array_get_string(oShifter, sResRefsArray, nSrc); + persistant_array_set_string(oShifter, sResRefsArray, nDst, sResRef); + if (nRacialTypeArrayExists) + { + sRace = persistant_array_get_string(oShifter, sRacialTypeArray, nSrc); + persistant_array_set_string(oShifter, sRacialTypeArray, nDst, sRace); + } + } + nDst++; + } + else + { + DoDebug("Deleting shape: " + sName); + } + nSrc++; + } + + if (nSrc < nArraySize) + DelayCommand(0.0f, DeleteMarkedStoredTemplates(oShifter, nShifterType, nSrc, nDst)); + else + { + // Shrink the arrays + persistant_array_shrink(oShifter, sResRefsArray, nDst); + persistant_array_shrink(oShifter, sNamesArray, nDst); + if(nRacialTypeArrayExists) + persistant_array_shrink(oShifter, sRacialTypeArray, nDst); + } +} + + +// Shifting-related functions + +int GetCreatureIsKnown(object oShifter, int nShifterType, object oTemplate) +{ + int nReturn = 0; + + if(GetIsObjectValid(oShifter) && GetIsObjectValid(oTemplate)) + nReturn = _prc_inc_shifting_GetIsTemplateStored(oShifter, nShifterType, GetResRef(oTemplate)); + + return nReturn; +} + +string FindResRefFromString(object oShifter, int nShifterType, string sFindString, int bList) +{ + string sResRef, sResRefsArray = SHIFTER_RESREFS_ARRAY + IntToString(nShifterType); + string sName, sNamesArray = SHIFTER_NAMES_ARRAY + IntToString(nShifterType); + int nResRef, nArraySize = persistant_array_get_size(oShifter, sResRefsArray); + + //Check for current shape + + if(sFindString == ".") + { + sResRef = GetPersistantLocalString(oShifter, "PRC_SHIFTING_TEMPLATE_RESREF"); + if(sResRef == "") + DoDebug("Current shape match: NOT SHIFTED"); + else + { + nResRef = _prc_inc_shifting_GetIsTemplateStored(oShifter, nShifterType, sResRef) - 1; + if(nResRef >= 0) + sName = persistant_array_get_string(oShifter, sNamesArray, nResRef); + else + sName = "???"; + DoDebug("Current shape match: " + IntToString(nResRef+1) + " = " + sName + " [" + sResRef + "]"); + } + return sResRef; + } + + //Check for shape numbers + + int nShapeNumberMatch = StringToInt(sFindString); + if(nShapeNumberMatch >= 1 && nShapeNumberMatch <= nArraySize) + { + nShapeNumberMatch -= 1; + sName = persistant_array_get_string(oShifter, sNamesArray, nShapeNumberMatch); + sResRef = persistant_array_get_string(oShifter, sResRefsArray, nShapeNumberMatch); + DoDebug("Shape number match: #" + IntToString(nShapeNumberMatch+1) + " = " + sName + " [" + sResRef + "]"); + return sResRef; + } + + //Check for quick shift slots numbers + + string sFirstLetter = GetStringLeft(sFindString, 1); + if(sFirstLetter == "q" || sFirstLetter == "Q") + { + int nQuickSlotMatch = StringToInt(GetStringRight(sFindString, GetStringLength(sFindString)-1)); + if(nQuickSlotMatch >= 1 && nQuickSlotMatch <= 10) + { + sResRef = GetPersistantLocalString(oShifter, "PRC_Shifter_Quick_" + IntToString(nQuickSlotMatch) + "_ResRef"); + nResRef = _prc_inc_shifting_GetIsTemplateStored(oShifter, nShifterType, sResRef) - 1; + if(nResRef >= 0) + sName = persistant_array_get_string(oShifter, sNamesArray, nResRef); + else + sName = "???"; + if(sResRef == "") + DoDebug("Quickslot match: Q" + IntToString(nQuickSlotMatch) + " = EMPTY QUICKSLOT"); + else + DoDebug("Quickslot match: Q" + IntToString(nQuickSlotMatch) + " = " + sName + " [" + sResRef + "]"); + return sResRef; + } + } + + //Check for matching resref first (exact case) + + int nResRefMatch = _prc_inc_shifting_GetIsTemplateStored(oShifter, nShifterType, sFindString) - 1; + if(nResRefMatch >= 0) + { + sName = persistant_array_get_string(oShifter, sNamesArray, nResRefMatch); + sResRef = persistant_array_get_string(oShifter, sResRefsArray, nResRefMatch); + DoDebug("ResRef match: "+ IntToString(nResRefMatch+1) + " = " + sName + " [" + sResRef + "]"); + return sResRef; + } + + //Check for matching name next (ignoring case) + + sFindString = GetStringLowerCase(sFindString); + + int nExactMatch = -1, nPrefixMatch = -1, nPartialMatch = -1; + int nExactMatchCount = 0, nPrefixMatchCount = 0, nPartialMatchCount = 0; + int i, nFind; + string sLowerName; + for(i = 0; i < nArraySize; i++) + { + sName = persistant_array_get_string(oShifter, sNamesArray, i); + nFind = FindSubString(sName, " ("); + if(nFind != -1) + sName = GetStringLeft(sName, nFind); //Remove the part in parens that tells shape HD, CR, etc. + sLowerName = GetStringLowerCase(sName); + + if (bList && sFindString == "") + { + sName = persistant_array_get_string(oShifter, sNamesArray, i); + sResRef = persistant_array_get_string(oShifter, sResRefsArray, i); + DoDebug("#" + IntToString(i+1) + " = " + sName + " [" + sResRef + "]"); + } + else if(sFindString == sLowerName) + { + nExactMatch = i; + nExactMatchCount += 1; + sName = persistant_array_get_string(oShifter, sNamesArray, nExactMatch); + sResRef = persistant_array_get_string(oShifter, sResRefsArray, nExactMatch); + DoDebug("Exact match: #" + IntToString(i+1) + " = " + sName + " [" + sResRef + "]"); + } + else + { + //TODO: multi-word prefix matches + nFind = FindSubString(sLowerName, sFindString); + if(nFind == 0) + { + nPrefixMatch = i; + nPrefixMatchCount += 1; + sName = persistant_array_get_string(oShifter, sNamesArray, nPrefixMatch); + sResRef = persistant_array_get_string(oShifter, sResRefsArray, nPrefixMatch); + DoDebug("Beginning match: #" + IntToString(i+1) + " = " + sName + " [" + sResRef + "]"); + } + else if(nFind > 0) + { + nPartialMatch = i; + nPartialMatchCount += 1; + sName = persistant_array_get_string(oShifter, sNamesArray, nPartialMatch); + sResRef = persistant_array_get_string(oShifter, sResRefsArray, nPartialMatch); + DoDebug("Middle match: #" + IntToString(i+1) + " = " + sName + " [" + sResRef + "]"); + } + } + } + + if(nExactMatchCount) + { + if(nExactMatchCount > 1) + { + DoDebug("TOO MANY EXACT MATCHES (" +IntToString(nExactMatchCount) + " found)"); + return ""; + } + sName = persistant_array_get_string(oShifter, sNamesArray, nExactMatch); + sResRef = persistant_array_get_string(oShifter, sResRefsArray, nExactMatch); + DoDebug("FINAL MATCH: #" + IntToString(nExactMatch+1) + " = " + sName + " [" + sResRef + "]"); + return sResRef; + } + if(nPrefixMatchCount) + { + if(nPrefixMatchCount > 1) + { + DoDebug("TOO MANY BEGINNING MATCHES (" +IntToString(nPrefixMatchCount) + " found)"); + return ""; + } + sName = persistant_array_get_string(oShifter, sNamesArray, nPrefixMatch); + sResRef = persistant_array_get_string(oShifter, sResRefsArray, nPrefixMatch); + DoDebug("FINAL MATCH: #" + IntToString(nPrefixMatch+1) + " = " + sName + " [" + sResRef + "]"); + return sResRef; + } + if(nPartialMatchCount) + { + if(nPartialMatchCount > 1) + { + DoDebug("TOO MANY MIDDLE MATCHES (" +IntToString(nPartialMatchCount) + " found)"); + return ""; + } + sName = persistant_array_get_string(oShifter, sNamesArray, nPartialMatch); + sResRef= persistant_array_get_string(oShifter, sResRefsArray, nPartialMatch); + DoDebug("FINAL MATCH: #" + IntToString(nPartialMatch+1) + " = " + sName + " [" + sResRef + "]"); + return sResRef; + } + + DoDebug("NO MATCH"); + + return ""; +} + +int GetCanShiftIntoCreature(object oShifter, int nShifterType, object oTemplate) +{ + if (!GetPersistantLocalInt(oShifter, "PRC_UNI_SHIFT_SCRIPT")) + { + SetPersistantLocalInt(oShifter, "PRC_UNI_SHIFT_SCRIPT", 1); + ExecuteScript("prc_uni_shift", oShifter); + } + + // Base assumption: Can shift into the target + int bReturn = TRUE; + + // Some basic checks + if(GetIsObjectValid(oShifter) && GetIsObjectValid(oTemplate)) + { + // PC check + if(GetIsPC(oTemplate)) + { + bReturn = FALSE; + SendMessageToPCByStrRef(oShifter, STRREF_NOPOLYTOPC); // "You cannot polymorph into a PC." + } + // Shifting prevention feat + else if(GetHasFeat(SHIFTER_BLACK_LIST, oTemplate)) + { + bReturn = FALSE; + SendMessageToPCByStrRef(oShifter, STRREF_FORBIDPOLY); // "Target cannot be polymorphed into." + } + + // Test switch-based limitations + if(bReturn) + { + int nSize = PRCGetCreatureSize(oTemplate); + int nRacialType = MyPRCGetRacialType(oTemplate); + + // Size switches + if(nSize >= CREATURE_SIZE_HUGE && GetPRCSwitch(PNP_SHFT_S_HUGE)) + bReturn = FALSE; + if(nSize == CREATURE_SIZE_LARGE && GetPRCSwitch(PNP_SHFT_S_LARGE)) + bReturn = FALSE; + if(nSize == CREATURE_SIZE_MEDIUM && GetPRCSwitch(PNP_SHFT_S_MEDIUM)) + bReturn = FALSE; + if(nSize == CREATURE_SIZE_SMALL && GetPRCSwitch(PNP_SHFT_S_SMALL)) + bReturn = FALSE; + if(nSize <= CREATURE_SIZE_TINY && GetPRCSwitch(PNP_SHFT_S_TINY)) + bReturn = FALSE; + + // Type switches + if(nRacialType == RACIAL_TYPE_OUTSIDER && GetPRCSwitch(PNP_SHFT_F_OUTSIDER)) + bReturn = FALSE; + if(nRacialType == RACIAL_TYPE_ELEMENTAL && GetPRCSwitch(PNP_SHFT_F_ELEMENTAL)) + bReturn = FALSE; + if(nRacialType == RACIAL_TYPE_CONSTRUCT && GetPRCSwitch(PNP_SHFT_F_CONSTRUCT)) + bReturn = FALSE; + if(nRacialType == RACIAL_TYPE_UNDEAD && GetPRCSwitch(PNP_SHFT_F_UNDEAD)) + bReturn = FALSE; + if(nRacialType == RACIAL_TYPE_DRAGON && GetPRCSwitch(PNP_SHFT_F_DRAGON)) + bReturn = FALSE; + if(nRacialType == RACIAL_TYPE_ABERRATION && GetPRCSwitch(PNP_SHFT_F_ABERRATION)) + bReturn = FALSE; + if(nRacialType == RACIAL_TYPE_OOZE && GetPRCSwitch(PNP_SHFT_F_OOZE)) + bReturn = FALSE; + if(nRacialType == RACIAL_TYPE_MAGICAL_BEAST && GetPRCSwitch(PNP_SHFT_F_MAGICALBEAST)) + bReturn = FALSE; + if(nRacialType == RACIAL_TYPE_GIANT && GetPRCSwitch(PNP_SHFT_F_GIANT)) + bReturn = FALSE; + if(nRacialType == RACIAL_TYPE_VERMIN && GetPRCSwitch(PNP_SHFT_F_VERMIN)) + bReturn = FALSE; + if(nRacialType == RACIAL_TYPE_BEAST && GetPRCSwitch(PNP_SHFT_F_BEAST)) + bReturn = FALSE; + if(nRacialType == RACIAL_TYPE_ANIMAL && GetPRCSwitch(PNP_SHFT_F_ANIMAL)) + bReturn = FALSE; + if(nRacialType == RACIAL_TYPE_HUMANOID_MONSTROUS && GetPRCSwitch(PNP_SHFT_F_MONSTROUSHUMANOID)) + bReturn = FALSE; + if(GetPRCSwitch(PNP_SHFT_F_HUMANOID) && + (nRacialType == RACIAL_TYPE_DWARF || + nRacialType == RACIAL_TYPE_ELF || + nRacialType == RACIAL_TYPE_GNOME || + nRacialType == RACIAL_TYPE_HUMAN || + nRacialType == RACIAL_TYPE_HALFORC || + nRacialType == RACIAL_TYPE_HALFELF || + nRacialType == RACIAL_TYPE_HALFLING || + nRacialType == RACIAL_TYPE_HUMANOID_ORC || + nRacialType == RACIAL_TYPE_HUMANOID_REPTILIAN + )) + bReturn = FALSE; + + if(!bReturn) + SendMessageToPCByStrRef(oShifter, STRREF_SETTINGFORBID); // "The module settings prevent this creature from being polymorphed into." + } + + // Still OK, test HD or CR + if(bReturn) + { + // Check target's HD or CR + int nShifterHD = GetHitDice(oShifter); + int nTemplateHD = _prc_inc_shifting_CharacterLevelRequirement(oTemplate); + if(nTemplateHD > nShifterHD) + { + bReturn = FALSE; + // "You need X more character levels before you can take on that form." + SendMessageToPC(oShifter, GetStringByStrRef(STRREF_YOUNEED) + " " + IntToString(nTemplateHD - nShifterHD) + " " + GetStringByStrRef(STRREF_MORECHARLVL)); + } + + if(nShifterType == SHIFTER_TYPE_ALTER_SELF && nTemplateHD > 5) + { + bReturn = FALSE; + SendMessageToPC(oShifter, "This creature is too high a level to copy with this spell."); + } + }// end if - Checking HD or CR + + // Move onto shifting type-specific checks if there haven't been any problems yet + if(bReturn) + { + if(nShifterType == SHIFTER_TYPE_SHIFTER) + { + int nShifterLevel = GetLevelByClass(CLASS_TYPE_PNP_SHIFTER, oShifter); + + int nRacialType = MyPRCGetRacialType(oTemplate); + + // Fey and shapechangers are forbidden targets for PnP Shifter + if(nRacialType == RACIAL_TYPE_FEY || nRacialType == RACIAL_TYPE_SHAPECHANGER) + { + bReturn = FALSE; + SendMessageToPCByStrRef(oShifter, STRREF_PNPSFHT_FEYORSSHIFT); // "You cannot use PnP Shifter abilities to polymorph into this creature." + } + else + { + // Test level required + int nLevelRequired = _prc_inc_shifting_ShifterLevelRequirement(oTemplate); + if(nLevelRequired > nShifterLevel) + { + bReturn = FALSE; + // "You need X more PnP Shifter levels before you can take on that form." + SendMessageToPC(oShifter, GetStringByStrRef(STRREF_YOUNEED) + " " + IntToString(nLevelRequired - nShifterLevel) + " " + GetStringByStrRef(STRREF_PNPSHFT_MORELEVEL)); + } + }// end else - Not outright forbidden due to target being Fey or Shapeshifter + }// end if - PnP Shifter checks + + //Change Shape checks + else if(nShifterType == SHIFTER_TYPE_HUMANOIDSHAPE) + { + int nTargetSize = PRCGetCreatureSize(oTemplate); + int nRacialType = MyPRCGetRacialType(oTemplate); + int nShifterSize = PRCGetCreatureSize(oShifter); + + int nSizeDiff = nTargetSize - nShifterSize; + + if(nSizeDiff > 1 || nSizeDiff < -1) + { + bReturn = FALSE; + SendMessageToPC(oShifter, "This creature is too large or too small."); + } + + if(!(nRacialType == RACIAL_TYPE_DWARF || + nRacialType == RACIAL_TYPE_ELF || + nRacialType == RACIAL_TYPE_GNOME || + nRacialType == RACIAL_TYPE_HUMAN || + nRacialType == RACIAL_TYPE_HALFORC || + nRacialType == RACIAL_TYPE_HALFELF || + nRacialType == RACIAL_TYPE_HALFLING || + nRacialType == RACIAL_TYPE_HUMANOID_ORC || + nRacialType == RACIAL_TYPE_HUMANOID_REPTILIAN + )) + { + bReturn = FALSE; + SendMessageToPC(oShifter, "This creature is not a humanoid racial type."); + } + } + + //Changeling check + else if(nShifterType == SHIFTER_TYPE_DISGUISE_SELF && GetRacialType(oShifter) == RACIAL_TYPE_CHANGELING) + { + int nSize = PRCGetCreatureSize(oTemplate); + int nRacialType = MyPRCGetRacialType(oTemplate); + int nShifterSize = PRCGetCreatureSize(oShifter); + + if(nSize != nShifterSize) + { + bReturn = FALSE; + SendMessageToPC(oShifter, "This creature is too large or too small."); + } + + if(!(nRacialType == RACIAL_TYPE_DWARF || + nRacialType == RACIAL_TYPE_ELF || + nRacialType == RACIAL_TYPE_GNOME || + nRacialType == RACIAL_TYPE_HUMAN || + nRacialType == RACIAL_TYPE_HALFORC || + nRacialType == RACIAL_TYPE_HALFELF || + nRacialType == RACIAL_TYPE_HALFLING || + nRacialType == RACIAL_TYPE_HUMANOID_ORC || + nRacialType == RACIAL_TYPE_HUMANOID_REPTILIAN + )) + { + bReturn = FALSE; + SendMessageToPC(oShifter, "This creature is not a humanoid racial type."); + } + } + + //Generic check + else if(nShifterType == SHIFTER_TYPE_CHANGESHAPE + || nShifterType == SHIFTER_TYPE_ALTER_SELF + || (nShifterType == SHIFTER_TYPE_DISGUISE_SELF && GetRacialType(oShifter) != RACIAL_TYPE_CHANGELING)) + { + int nTargetSize = PRCGetCreatureSize(oTemplate); + int nTargetRacialType = MyPRCGetRacialType(oTemplate); + int nShifterSize = PRCGetCreatureSize(oShifter); + int nShifterRacialType = MyPRCGetRacialType(oShifter); + + int nSizeDiff = nTargetSize - nShifterSize; + + if(nSizeDiff > 1 || nSizeDiff < -1) + { + bReturn = FALSE; + SendMessageToPC(oShifter, "This creature is too large or too small."); + } + + if(!(nTargetRacialType == nShifterRacialType || + //check for humanoid type + ((nTargetRacialType == RACIAL_TYPE_DWARF || + nTargetRacialType == RACIAL_TYPE_ELF || + nTargetRacialType == RACIAL_TYPE_GNOME || + nTargetRacialType == RACIAL_TYPE_HUMAN || + nTargetRacialType == RACIAL_TYPE_HALFORC || + nTargetRacialType == RACIAL_TYPE_HALFELF || + nTargetRacialType == RACIAL_TYPE_HALFLING || + nTargetRacialType == RACIAL_TYPE_HUMANOID_ORC || + nTargetRacialType == RACIAL_TYPE_HUMANOID_REPTILIAN + ) && + (nShifterRacialType == RACIAL_TYPE_DWARF || + nShifterRacialType == RACIAL_TYPE_ELF || + nShifterRacialType == RACIAL_TYPE_GNOME || + nShifterRacialType == RACIAL_TYPE_HUMAN || + nShifterRacialType == RACIAL_TYPE_HALFORC || + nShifterRacialType == RACIAL_TYPE_HALFELF || + nShifterRacialType == RACIAL_TYPE_HALFLING || + nShifterRacialType == RACIAL_TYPE_HUMANOID_ORC || + nShifterRacialType == RACIAL_TYPE_HUMANOID_REPTILIAN + )) + )) + { + bReturn = FALSE; + SendMessageToPC(oShifter, "This creature is a different racial type."); + } + } + }// end if - Check shifting list specific stuff + } + // Failed one of the basic checks + else + bReturn = FALSE; + + return bReturn; +} + +int ShiftIntoCreature(object oShifter, int nShifterType, object oTemplate, int bGainSpellLikeAbilities = FALSE) +{ + // Just grab the resref and move on + return ShiftIntoResRef(oShifter, nShifterType, GetResRef(oTemplate), bGainSpellLikeAbilities); +} + +int ShiftIntoResRef(object oShifter, int nShifterType, string sResRef, int bGainSpellLikeAbilities = FALSE) +{ + if (!GetPersistantLocalInt(oShifter, "PRC_UNI_SHIFT_SCRIPT")) + { + SetPersistantLocalInt(oShifter, "PRC_UNI_SHIFT_SCRIPT", 1); + ExecuteScript("prc_uni_shift", oShifter); + } + + // Make sure there is nothing that would prevent the successful execution of the shift from happening + if(!_prc_inc_shifting_GetCanShift(oShifter)) + return FALSE; + + /* Create the template to shift into */ + object oTemplate = _prc_inc_load_template_from_resref(sResRef, GetHitDice(oShifter)); + + // Make sure the template creature was successfully created. We have nothing to do if it wasn't + if(!GetIsObjectValid(oTemplate)) + { + if(DEBUG) DoDebug("prc_inc_shifting: ShiftIntoResRef(): ERROR: Failed to create creature from template resref: " + sResRef); + SendMessageToPCByStrRef(oShifter, STRREF_TEMPLATE_FAILURE); // "Polymorph failed: Failed to create a template of the creature to polymorph into." + } + else + { + // See if the shifter can in fact shift into the given template + if(GetCanShiftIntoCreature(oShifter, nShifterType, oTemplate)) + { + // It can - activate mutex + SetLocalInt(oShifter, SHIFTER_SHIFT_MUTEX, TRUE); + SetLocalInt(oShifter, SHIFTER_ORIGINALMAXHP, 0); + + int nShapeGeneration = GetLocalInt(oShifter, PRC_Shifter_ShapeGeneration); + SetLocalInt(oShifter, PRC_Shifter_ShapeGeneration, nShapeGeneration+1); + if (DEBUG_APPLY_PROPERTIES) + DoDebug("ShiftIntoResRef, Shifter Index: " + IntToString(nShapeGeneration+1)); + + // Unshift if already shifted and then proceed with shifting into the template + // Also, give other stuff 100ms to execute in between + if(GetPersistantLocalInt(oShifter, SHIFTER_ISSHIFTED_MARKER)) + DelayCommand(0.1f, _prc_inc_shifting_UnShiftAux(oShifter, nShifterType, oTemplate, bGainSpellLikeAbilities)); + else + DelayCommand(0.1f, _prc_inc_shifting_ShiftIntoTemplateAux(oShifter, nShifterType, oTemplate, bGainSpellLikeAbilities)); + + // Return that we were able to successfully start shifting + return TRUE; + } + } + + // We didn't reach the success branch for some reason + return FALSE; +} + +int GWSPay(object oShifter, int bEpic) +{ + int nFeat = 0; + + if(!bEpic) + { + // First try paying using Greater Wildshape uses + if(GetHasFeat(FEAT_PRESTIGE_SHIFTER_GWSHAPE_1, oShifter)) + { + DecrementRemainingFeatUses(oShifter, FEAT_PRESTIGE_SHIFTER_GWSHAPE_1); + nFeat = FEAT_PRESTIGE_SHIFTER_GWSHAPE_1; + + // If we would reach 0 uses this way, see if we could pay with Druid Wildshape uses instead + if(!GetHasFeat(FEAT_PRESTIGE_SHIFTER_GWSHAPE_1, oShifter) && + GetPersistantLocalInt(oShifter, "PRC_Shifter_UseDruidWS") && + GetHasFeat(FEAT_WILD_SHAPE, oShifter) + ) + { + IncrementRemainingFeatUses(oShifter, FEAT_PRESTIGE_SHIFTER_GWSHAPE_1); + DecrementRemainingFeatUses(oShifter, FEAT_WILD_SHAPE); + nFeat = FEAT_WILD_SHAPE; + } + } + // Otherwise try paying with Druid Wildshape uses + else if(GetPersistantLocalInt(oShifter, "PRC_Shifter_UseDruidWS") && + GetHasFeat(FEAT_WILD_SHAPE, oShifter) + ) + { + DecrementRemainingFeatUses(oShifter, FEAT_WILD_SHAPE); + nFeat = FEAT_WILD_SHAPE; + } + } + // Epic shift, uses Epic Greater Wildshape + else if(GetHasFeat(FEAT_PRESTIGE_SHIFTER_EGWSHAPE_1, oShifter)) + { + DecrementRemainingFeatUses(oShifter, FEAT_PRESTIGE_SHIFTER_EGWSHAPE_1); + nFeat = FEAT_PRESTIGE_SHIFTER_EGWSHAPE_1; + } + + return nFeat; +} + +void GWSRefund(object oShifter, int nRefundFeat) +{ + IncrementRemainingFeatUses(oShifter, nRefundFeat); +} + +int UnShift(object oShifter, int bRemovePoly = TRUE, int bIgnoreShiftingMutex = FALSE) +{ + // Shifting mutex is set and we are not told to ignore it, so abort right away + if(GetLocalInt(oShifter, SHIFTER_SHIFT_MUTEX) && !bIgnoreShiftingMutex) + { + DelayCommand(SHIFTER_MUTEX_UNSET_DELAY, SetLocalInt(oShifter, SHIFTER_SHIFT_MUTEX, FALSE)); //In case the mutex got stuck, unstick it + return UNSHIFT_FAIL; + } + + // Check for polymorph effects + int bHadPoly = FALSE; + effect eTest = GetFirstEffect(oShifter); + while(GetIsEffectValid(eTest)) + { + if(GetEffectType(eTest) == EFFECT_TYPE_POLYMORPH) + // Depending on whether we are supposed to remove them or not either remove the effect or abort + if(bRemovePoly) + { + bHadPoly = UNSHIFT_FAIL; + RemoveEffect(oShifter, eTest); + } + else + return FALSE; + + eTest = GetNextEffect(oShifter); + } + + // Check for true form being stored + if(!GetPersistantLocalInt(oShifter, SHIFTER_TRUEAPPEARANCE)) + return UNSHIFT_FAIL; + + // The unshifting should always proceed succesfully from this point on, so set the mutex + SetLocalInt(oShifter, SHIFTER_SHIFT_MUTEX, TRUE); + SetLocalInt(oShifter, SHIFTER_ORIGINALMAXHP, 0); + DeletePersistantLocalString(oShifter, "PRC_SHIFTING_TEMPLATE_RESREF"); + DeletePersistantLocalInt(oShifter, "PRC_SHIFTING_SHIFTER_TYPE"); + + int nShapeGeneration = GetLocalInt(oShifter, PRC_Shifter_ShapeGeneration); + SetLocalInt(oShifter, PRC_Shifter_ShapeGeneration, nShapeGeneration+1); + if (DEBUG_APPLY_PROPERTIES) + DoDebug("UnShift, Shifter Index: " + IntToString(nShapeGeneration+1)); + + // If we had a polymorph effect present, start the removal monitor + if(bHadPoly) + { + DelayCommand(0.1f, _prc_inc_shifting_UnShiftAux_SeekPolyEnd(oShifter, GetItemInSlot(INVENTORY_SLOT_CARMOUR, oShifter))); + return UNSHIFT_SUCCESS_DELAYED; + } + else + { + _prc_inc_shifting_UnShiftAux(oShifter, SHIFTER_TYPE_NONE, OBJECT_INVALID, FALSE); + DeletePersistantLocalInt(oShifter, "TempShifted"); + return UNSHIFT_SUCCESS; + } +} + + +// Appearance data functions + +struct appearancevalues GetAppearanceData(object oTemplate) +{ + struct appearancevalues appval; + // The appearance type + appval.nAppearanceType = GetAppearanceType(oTemplate); + // Body parts + appval.nBodyPart_RightFoot = GetCreatureBodyPart(CREATURE_PART_RIGHT_FOOT, oTemplate); + appval.nBodyPart_LeftFoot = GetCreatureBodyPart(CREATURE_PART_LEFT_FOOT, oTemplate); + appval.nBodyPart_RightShin = GetCreatureBodyPart(CREATURE_PART_RIGHT_SHIN, oTemplate); + appval.nBodyPart_LeftShin = GetCreatureBodyPart(CREATURE_PART_LEFT_SHIN, oTemplate); + appval.nBodyPart_RightThigh = GetCreatureBodyPart(CREATURE_PART_RIGHT_THIGH, oTemplate); + appval.nBodyPart_LeftThight = GetCreatureBodyPart(CREATURE_PART_LEFT_THIGH, oTemplate); + appval.nBodyPart_Pelvis = GetCreatureBodyPart(CREATURE_PART_PELVIS, oTemplate); + appval.nBodyPart_Torso = GetCreatureBodyPart(CREATURE_PART_TORSO, oTemplate); + appval.nBodyPart_Belt = GetCreatureBodyPart(CREATURE_PART_BELT, oTemplate); + appval.nBodyPart_Neck = GetCreatureBodyPart(CREATURE_PART_NECK, oTemplate); + appval.nBodyPart_RightForearm = GetCreatureBodyPart(CREATURE_PART_RIGHT_FOREARM, oTemplate); + appval.nBodyPart_LeftForearm = GetCreatureBodyPart(CREATURE_PART_LEFT_FOREARM, oTemplate); + appval.nBodyPart_RightBicep = GetCreatureBodyPart(CREATURE_PART_RIGHT_BICEP, oTemplate); + appval.nBodyPart_LeftBicep = GetCreatureBodyPart(CREATURE_PART_LEFT_BICEP, oTemplate); + appval.nBodyPart_RightShoulder = GetCreatureBodyPart(CREATURE_PART_RIGHT_SHOULDER, oTemplate); + appval.nBodyPart_LeftShoulder = GetCreatureBodyPart(CREATURE_PART_LEFT_SHOULDER, oTemplate); + appval.nBodyPart_RightHand = GetCreatureBodyPart(CREATURE_PART_RIGHT_HAND, oTemplate); + appval.nBodyPart_LeftHand = GetCreatureBodyPart(CREATURE_PART_LEFT_HAND, oTemplate); + appval.nBodyPart_Head = GetCreatureBodyPart(CREATURE_PART_HEAD, oTemplate); + // Wings + appval.nWingType = GetCreatureWingType(oTemplate); + // Tail + appval.nTailType = GetCreatureTailType(oTemplate); + // Portrait ID + appval.nPortraitID = GetPortraitId(oTemplate); + // Portrait resref + appval.sPortraitResRef = GetPortraitResRef(oTemplate); + // Footstep type + appval.nFootStepType = GetFootstepType(oTemplate); + // Gender + appval.nGender = GetGender(oTemplate); + /* Commented out until 1.69 + // Skin color + appval.nSkinColor = GetColor(oTemplate, COLOR_CHANNEL_SKIN); + // Hair color + appval.nHairColor = GetColor(oTemplate, COLOR_CHANNEL_HAIR); + // Tattoo 1 color + appval.nTat1Color = GetColor(oTemplate, COLOR_CHANNEL_TATTOO_1); + // Tattoo 2 color + appval.nTat2Color = GetColor(oTemplate, COLOR_CHANNEL_TATTOO_2); + */ + + + return appval; +} + +void SetAppearanceData(object oTarget, struct appearancevalues appval) +{ +//DoDebug("Setting the appearance of " + DebugObject2Str(oTarget) + "to:\n" + DebugAppearancevalues2Str(appval)); + // The appearance type + SetCreatureAppearanceType(oTarget, appval.nAppearanceType); + // Body parts - Delayed, since it seems not delaying this makes the body part setting fail, instead resulting in no visible + // parts. Some interaction with SetCreatureAppearance(), maybe? + // Applies to NWN1 1.68. Kudos to Primogenitor for originally figuring this out - Ornedan + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_RIGHT_FOOT , appval.nBodyPart_RightFoot , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_LEFT_FOOT , appval.nBodyPart_LeftFoot , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_RIGHT_SHIN , appval.nBodyPart_RightShin , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_LEFT_SHIN , appval.nBodyPart_LeftShin , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_RIGHT_THIGH , appval.nBodyPart_RightThigh , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_LEFT_THIGH , appval.nBodyPart_LeftThight , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_PELVIS , appval.nBodyPart_Pelvis , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_TORSO , appval.nBodyPart_Torso , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_BELT , appval.nBodyPart_Belt , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_NECK , appval.nBodyPart_Neck , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_RIGHT_FOREARM , appval.nBodyPart_RightForearm , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_LEFT_FOREARM , appval.nBodyPart_LeftForearm , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_RIGHT_BICEP , appval.nBodyPart_RightBicep , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_LEFT_BICEP , appval.nBodyPart_LeftBicep , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_RIGHT_SHOULDER , appval.nBodyPart_RightShoulder , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_LEFT_SHOULDER , appval.nBodyPart_LeftShoulder , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_RIGHT_HAND , appval.nBodyPart_RightHand , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_LEFT_HAND , appval.nBodyPart_LeftHand , oTarget)); + DelayCommand(1.0f, SetCreatureBodyPart(CREATURE_PART_HEAD , appval.nBodyPart_Head , oTarget)); + // Wings + SetCreatureWingType(appval.nWingType, oTarget); + // Tail + SetCreatureTailType(appval.nTailType, oTarget); + // Footstep type + SetFootstepType(appval.nFootStepType, oTarget); + + /* Portrait stuff */ + // If the portrait ID is not PORTRAIT_INVALID, use it. This will also set the resref + if(appval.nPortraitID != PORTRAIT_INVALID) + SetPortraitId(oTarget, appval.nPortraitID); + // Otherwise, use the portrait resref. This will set portrait ID to PORTRAIT_INVALID + else + SetPortraitResRef(oTarget, appval.sPortraitResRef); + + //replace with SetGender if 1.69 adds it + if(GetGender(oTarget) != appval.nGender && appval.nAppearanceType < 7) + { + if(GetPrimaryArcaneClass(oTarget) != CLASS_TYPE_INVALID) + SetPortraitId(oTarget, 1061); //generic wizard port + else if(GetPrimaryDivineClass(oTarget) != CLASS_TYPE_INVALID) + SetPortraitId(oTarget, 1033); //generic cleric port + else + SetPortraitId(oTarget, 1043); //generic fighter port + } + + /* Commented out until 1.69 + // Skin color + SetColor(oTarget, COLOR_CHANNEL_SKIN, appval.nSkinColor); + // Hair color + SetColor(oTemplate, COLOR_CHANNEL_HAIR, appval.nHairColor); + // Tattoo 2 color + SetColor(oTemplate, COLOR_CHANNEL_TATTOO_1, appval.nTat1Color); + // Tattoo 1 color + SetColor(oTemplate, COLOR_CHANNEL_TATTOO_2, appval.nTat2Color); + */ +} + +struct appearancevalues GetLocalAppearancevalues(object oStore, string sName) +{ + struct appearancevalues appval; + // The appearance type + appval.nAppearanceType = GetPersistantLocalInt(oStore, sName + "nAppearanceType"); + // Body parts + appval.nBodyPart_RightFoot = GetPersistantLocalInt(oStore, sName + "nBodyPart_RightFoot"); + appval.nBodyPart_LeftFoot = GetPersistantLocalInt(oStore, sName + "nBodyPart_LeftFoot"); + appval.nBodyPart_RightShin = GetPersistantLocalInt(oStore, sName + "nBodyPart_RightShin"); + appval.nBodyPart_LeftShin = GetPersistantLocalInt(oStore, sName + "nBodyPart_LeftShin"); + appval.nBodyPart_RightThigh = GetPersistantLocalInt(oStore, sName + "nBodyPart_RightThigh"); + appval.nBodyPart_LeftThight = GetPersistantLocalInt(oStore, sName + "nBodyPart_LeftThight"); + appval.nBodyPart_Pelvis = GetPersistantLocalInt(oStore, sName + "nBodyPart_Pelvis"); + appval.nBodyPart_Torso = GetPersistantLocalInt(oStore, sName + "nBodyPart_Torso"); + appval.nBodyPart_Belt = GetPersistantLocalInt(oStore, sName + "nBodyPart_Belt"); + appval.nBodyPart_Neck = GetPersistantLocalInt(oStore, sName + "nBodyPart_Neck"); + appval.nBodyPart_RightForearm = GetPersistantLocalInt(oStore, sName + "nBodyPart_RightForearm"); + appval.nBodyPart_LeftForearm = GetPersistantLocalInt(oStore, sName + "nBodyPart_LeftForearm"); + appval.nBodyPart_RightBicep = GetPersistantLocalInt(oStore, sName + "nBodyPart_RightBicep"); + appval.nBodyPart_LeftBicep = GetPersistantLocalInt(oStore, sName + "nBodyPart_LeftBicep"); + appval.nBodyPart_RightShoulder = GetPersistantLocalInt(oStore, sName + "nBodyPart_RightShoulder"); + appval.nBodyPart_LeftShoulder = GetPersistantLocalInt(oStore, sName + "nBodyPart_LeftShoulder"); + appval.nBodyPart_RightHand = GetPersistantLocalInt(oStore, sName + "nBodyPart_RightHand"); + appval.nBodyPart_LeftHand = GetPersistantLocalInt(oStore, sName + "nBodyPart_LeftHand"); + appval.nBodyPart_Head = GetPersistantLocalInt(oStore, sName + "nBodyPart_Head"); + // Wings + appval.nWingType = GetPersistantLocalInt(oStore, sName + "nWingType"); + // Tail + appval.nTailType = GetPersistantLocalInt(oStore, sName + "nTailType"); + // Portrait ID + appval.nPortraitID = GetPersistantLocalInt(oStore, sName + "nPortraitID"); + // Portrait resref + appval.sPortraitResRef = GetPersistantLocalString(oStore, sName + "sPortraitResRef"); + // Footstep type + appval.nFootStepType = GetPersistantLocalInt(oStore, sName + "nFootStepType"); + // Gender + appval.nGender = GetPersistantLocalInt(oStore, sName + "nGender"); + + // Skin color + appval.nSkinColor = GetPersistantLocalInt(oStore, sName + "nSkinColor"); + // Hair color + appval.nHairColor = GetPersistantLocalInt(oStore, sName + "nHairColor"); + // Tattoo 1 color + appval.nTat1Color = GetPersistantLocalInt(oStore, sName + "nTat1Color"); + // Tattoo 2 color + appval.nTat2Color = GetPersistantLocalInt(oStore, sName + "nTat2Color"); + + + return appval; +} + +void SetLocalAppearancevalues(object oStore, string sName, struct appearancevalues appval) +{ + // The appearance type + SetPersistantLocalInt(oStore, sName + "nAppearanceType" , appval.nAppearanceType ); + // Body parts + SetPersistantLocalInt(oStore, sName + "nBodyPart_RightFoot" , appval.nBodyPart_RightFoot ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_LeftFoot" , appval.nBodyPart_LeftFoot ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_RightShin" , appval.nBodyPart_RightShin ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_LeftShin" , appval.nBodyPart_LeftShin ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_RightThigh" , appval.nBodyPart_RightThigh ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_LeftThight" , appval.nBodyPart_LeftThight ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_Pelvis" , appval.nBodyPart_Pelvis ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_Torso" , appval.nBodyPart_Torso ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_Belt" , appval.nBodyPart_Belt ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_Neck" , appval.nBodyPart_Neck ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_RightForearm" , appval.nBodyPart_RightForearm ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_LeftForearm" , appval.nBodyPart_LeftForearm ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_RightBicep" , appval.nBodyPart_RightBicep ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_LeftBicep" , appval.nBodyPart_LeftBicep ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_RightShoulder", appval.nBodyPart_RightShoulder ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_LeftShoulder" , appval.nBodyPart_LeftShoulder ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_RightHand" , appval.nBodyPart_RightHand ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_LeftHand" , appval.nBodyPart_LeftHand ); + SetPersistantLocalInt(oStore, sName + "nBodyPart_Head" , appval.nBodyPart_Head ); + // Wings + SetPersistantLocalInt(oStore, sName + "nWingType" , appval.nWingType ); + // Tail + SetPersistantLocalInt(oStore, sName + "nTailType" , appval.nTailType ); + // Portrait ID + SetPersistantLocalInt(oStore, sName + "nPortraitID" , appval.nPortraitID ); + // Portrait resref + SetPersistantLocalString(oStore, sName + "sPortraitResRef" , appval.sPortraitResRef ); + // Footstep type + SetPersistantLocalInt(oStore, sName + "nFootStepType" , appval.nFootStepType ); + //Gender + SetPersistantLocalInt(oStore, sName + "nGender" , appval.nGender ); + + // Skin color + SetPersistantLocalInt(oStore, sName + "nSkinColor" , appval.nSkinColor ); + // Hair color + SetPersistantLocalInt(oStore, sName + "nHairColor" , appval.nHairColor ); + // Tattoo 1 color + SetPersistantLocalInt(oStore, sName + "nTat1Color" , appval.nTat1Color ); + // Tattoo 2 color + SetPersistantLocalInt(oStore, sName + "nTat2Color" , appval.nTat2Color ); + +} + +void DeleteLocalAppearancevalues(object oStore, string sName) +{ + // The appearance type + DeletePersistantLocalInt(oStore, sName + "nAppearanceType"); + // Body parts + DeletePersistantLocalInt(oStore, sName + "nBodyPart_RightFoot"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_LeftFoot"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_RightShin"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_LeftShin"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_RightThigh"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_LeftThight"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_Pelvis"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_Torso"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_Belt"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_Neck"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_RightForearm"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_LeftForearm"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_RightBicep"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_LeftBicep"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_RightShoulder"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_LeftShoulder"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_RightHand"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_LeftHand"); + DeletePersistantLocalInt(oStore, sName + "nBodyPart_Head"); + // Wings + DeletePersistantLocalInt(oStore, sName + "nWingType"); + // Tail + DeletePersistantLocalInt(oStore, sName + "nTailType"); + // Portrait ID + DeletePersistantLocalInt(oStore, sName + "nPortraitID"); + // Portrait resref + DeletePersistantLocalString(oStore, sName + "sPortraitResRef"); + // Footstep type + DeletePersistantLocalInt(oStore, sName + "nFootStepType"); + // Gender + DeletePersistantLocalInt(oStore, sName + "nGender"); + // Skin color + DeletePersistantLocalInt(oStore, sName + "nSkinColor"); + // Hair color + DeletePersistantLocalInt(oStore, sName + "nHairColor"); + // Tattoo 1 color + DeletePersistantLocalInt(oStore, sName + "nTat1Color"); + // Tattoo 2 color + DeletePersistantLocalInt(oStore, sName + "nTat2Color"); +} + +struct appearancevalues GetPersistantLocalAppearancevalues(object oStore, string sName) +{ + return GetLocalAppearancevalues(oStore, sName); +} + +void SetPersistantLocalAppearancevalues(object oStore, string sName, struct appearancevalues appval) +{ + SetLocalAppearancevalues(oStore, sName, appval); +} + +void DeletePersistantLocalAppearancevalues(object oStore, string sName) +{ + DeleteLocalAppearancevalues(oStore, sName); +} + +void ForceUnshift(object oShifter, int nShiftedNumber) +{ + if(GetPersistantLocalInt(oShifter, "nTimesShifted") == nShiftedNumber) + UnShift(oShifter); +} + +string DebugAppearancevalues2Str(struct appearancevalues appval) +{ + return "Appearance type = " + IntToString(appval.nAppearanceType) + "\n" + + "Body part - Right Foot = " + IntToString(appval.nBodyPart_RightFoot ) + "\n" + + "Body part - Left Foot = " + IntToString(appval.nBodyPart_LeftFoot ) + "\n" + + "Body part - Right Shin = " + IntToString(appval.nBodyPart_RightShin ) + "\n" + + "Body part - Left Shin = " + IntToString(appval.nBodyPart_LeftShin ) + "\n" + + "Body part - Right Thigh = " + IntToString(appval.nBodyPart_RightThigh ) + "\n" + + "Body part - Left Thigh = " + IntToString(appval.nBodyPart_LeftThight ) + "\n" + + "Body part - Pelvis = " + IntToString(appval.nBodyPart_Pelvis ) + "\n" + + "Body part - Torso = " + IntToString(appval.nBodyPart_Torso ) + "\n" + + "Body part - Belt = " + IntToString(appval.nBodyPart_Belt ) + "\n" + + "Body part - Neck = " + IntToString(appval.nBodyPart_Neck ) + "\n" + + "Body part - Right Forearm = " + IntToString(appval.nBodyPart_RightForearm ) + "\n" + + "Body part - Left Forearm = " + IntToString(appval.nBodyPart_LeftForearm ) + "\n" + + "Body part - Right Bicep = " + IntToString(appval.nBodyPart_RightBicep ) + "\n" + + "Body part - Left Bicep = " + IntToString(appval.nBodyPart_LeftBicep ) + "\n" + + "Body part - Right Shoulder = " + IntToString(appval.nBodyPart_RightShoulder) + "\n" + + "Body part - Left Shoulder = " + IntToString(appval.nBodyPart_LeftShoulder ) + "\n" + + "Body part - Right Hand = " + IntToString(appval.nBodyPart_RightHand ) + "\n" + + "Body part - Left Hand = " + IntToString(appval.nBodyPart_LeftHand ) + "\n" + + "Body part - Head = " + IntToString(appval.nBodyPart_Head ) + "\n" + + "Wings = " + IntToString(appval.nWingType) + "\n" + + "Tail = " + IntToString(appval.nTailType) + "\n" + + "Portrait ID = " + (appval.nPortraitID == PORTRAIT_INVALID ? "PORTRAIT_INVALID" : IntToString(appval.nPortraitID)) + "\n" + + "Portrait ResRef = " + appval.sPortraitResRef + "\n" + + "Footstep type = " + IntToString(appval.nFootStepType) + "\n" + + "Gender = " + IntToString(appval.nGender) + "\n" + + "Skin color = " + IntToString(appval.nSkinColor) + "\n" + + "Hair color = " + IntToString(appval.nHairColor) + "\n" + + "Tattoo 1 color = " + IntToString(appval.nTat1Color) + "\n" + + "Tattoo 2 color = " + IntToString(appval.nTat2Color) + "\n" + ; +} + +int IsPolymorphed(object oPC) +{ + effect eTest = GetFirstEffect(oPC); + while(GetIsEffectValid(eTest)) + { + if(GetEffectType(eTest) == EFFECT_TYPE_POLYMORPH) + return TRUE; + eTest = GetNextEffect(oPC); + } + return FALSE; +} + +void HandleTrueShape(object oPC) +{ + if(!GetPersistantLocalInt(oPC, SHIFTER_TRUEAPPEARANCE)) + StoreCurrentAppearanceAsTrueAppearance(oPC, TRUE); + + if(!GetPersistantLocalInt(oPC, SHIFTER_TRUE_RACE)) + StoreCurrentRaceAsTrueRace(oPC); +} + +void HandleApplyShiftEffects(object oPC) +{ + if (IsPolymorphed(oPC)) + return; + DelayCommand(0.0f, _prc_inc_shifting_ApplyEffects(oPC, TRUE)); +} + +void HandleApplyShiftTemplate(object oPC) +{ + if (IsPolymorphed(oPC)) + return; + + string sResRef; + int nShifterType; + int nShapeGeneration; + object oTemplate; + + if(GetLocalInt(oPC, SHIFTER_SHIFT_MUTEX)) + { + //If shifting, the following is already being handled + //by the shifting code so don't do it again here. + return; + } + + sResRef = GetPersistantLocalString(oPC, "PRC_SHIFTING_TEMPLATE_RESREF"); + if(sResRef != "") + { + oTemplate = _prc_inc_load_template_from_resref(sResRef, GetHitDice(oPC)); + if(GetIsObjectValid(oTemplate)) + { + nShifterType = GetPersistantLocalInt(oPC, "PRC_SHIFTING_SHIFTER_TYPE"); + nShapeGeneration = GetLocalInt(oPC, PRC_Shifter_ShapeGeneration); + if (DEBUG_APPLY_PROPERTIES) + DoDebug("HandleApplyShiftTemplate, Shifter Index: " + IntToString(nShapeGeneration)); + DelayCommand(0.0f, _prc_inc_shifting_ApplyTemplate(oPC, nShapeGeneration, nShifterType, oTemplate, FALSE, GetPCSkin(oPC))); + } + } +} + +int PnPShifterFeats() +{ + if(GetPRCSwitch(PRC_NWNX_FUNCS)) + { + //If any stats have been changed by NWNX, this could qualify the PC for feats they should + //not actually qualify for, so force unshifting before levelling up. + if(GetPersistantLocalInt(OBJECT_SELF, "Shifting_NWNXSTRAdjust") + || GetPersistantLocalInt(OBJECT_SELF, "Shifting_NWNXDEXAdjust") + || GetPersistantLocalInt(OBJECT_SELF, "Shifting_NWNXCONAdjust")) + { + FloatingTextStringOnCreature("You must unshift before levelling up.", OBJECT_SELF, FALSE); //TODO: TLK entry + return TRUE; + } + } + return FALSE; +} + +// Test main +// void main(){} diff --git a/src/include/prc_inc_skills.nss b/src/include/prc_inc_skills.nss new file mode 100644 index 0000000..0674604 --- /dev/null +++ b/src/include/prc_inc_skills.nss @@ -0,0 +1,396 @@ +//::////////////////////////////////////////////// +/* + This file is for the code/const for any custom skills. +*/ +//::////////////////////////////////////////////// + +/** + * Returns the height differential between the two locations. + * Return value is in feet. + */ +float GetHeight(location lPC, location lTarget); + +// * Returns true or false depending on whether the creature is flying +// * or not +int PRCIsFlying(object oCreature); + +// * Returns true or false depending on whether the creature has flying +// * mount or not +int PRCHasFlyingMount(object oCreature); + +#include "prc_inc_clsfunc" +#include "moi_inc_moifunc" +#include "x3_inc_horse" + +//::////////////////////////////////////////////// +//:: Skill Functions +//::////////////////////////////////////////////// + +// returns true if they pass the jump check +// also handles animations and knockdown +int PerformJump(object oPC, location lLoc, int bDoKnockDown = TRUE) +{ + object oArea = GetArea(oPC); + int bCanFly = FALSE; + // if jumping is disabled in this place. + if( GetLocalInt(oArea, "AreaJumpOff") == TRUE ) + { + SendMessageToPC(oPC, "Jumping is not allowed in this area."); + return FALSE; + } + + // Simulate "leap of the clouds", or RDD's having wings can "fly" + if((GetLevelByClass(CLASS_TYPE_MONK, oPC) >= 7 + || GetLevelByClass(CLASS_TYPE_NINJA_SPY, oPC) >= 3 + || PRCIsFlying(oPC)) + && GetLocalInt(oArea, "AreaFlyOff") == FALSE) + bCanFly = TRUE; + + // This meld allows someone to fly when bound to a chakra + if (GetIsMeldBound(oPC, MELD_ACROBAT_BOOTS)) + bCanFly = TRUE; + + // This meld allows someone to fly when bound to a chakra + if (GetIsMeldBound(oPC, MELD_MANTICORE_BELT) == CHAKRA_WAIST) + bCanFly = TRUE; + + //ebonfowl: Can fly temporarily when using Borne Aloft + if (GetLocalInt(oPC, "BorneAloft")) + bCanFly = TRUE; + + // can't fly while mounted + if (HorseGetIsMounted(oPC) && !PRCHasFlyingMount(oPC)) + bCanFly = FALSE; + + // Height restriction on jumping + if (GetHeight(GetLocation(oPC), lLoc) > 8.0 && !bCanFly) + { + SendMessageToPC(oPC, "The target location is too high to jump to. Please pick a lower target."); + return FALSE; + } + + // Immobilized creatures can't jump + effect eCheck = GetFirstEffect(oPC); + int nCheck; + while(GetIsEffectValid(eCheck)){ + nCheck = GetEffectType(eCheck); + if(nCheck == EFFECT_TYPE_CUTSCENEIMMOBILIZE || + nCheck == EFFECT_TYPE_ENTANGLE) + { + SendMessageToPC(oPC, "You cannot move."); + return FALSE; + } + + eCheck = GetNextEffect(oPC); + } + + int bIsRunningJump = FALSE; + int bPassedJumpCheck = FALSE; + int iMinJumpDistance = 0; + int iMaxJumpDistance = 6; + int iDivisor = 1; + int iJumpDistance = 0; + int bIsInHeavyArmor = FALSE; + + // Goliaths and Garguns treat all jumps as running + if(GetRacialType(oPC) == RACIAL_TYPE_GOLIATH || GetRacialType(oPC) == RACIAL_TYPE_FERAL_GARGUN) + bIsRunningJump = TRUE; + + int iDistance = FloatToInt(MetersToFeet(GetDistanceBetweenLocations(GetLocation(oPC), lLoc ) ) ); + + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC); + int AC = GetBaseAC(oArmor); + if(AC >= 6) bIsInHeavyArmor = TRUE; + + // Jump check rules depend on a running jump or standing jump + // running jumps require at least 20 feet run length + if (iDistance >= 18 && !bIsInHeavyArmor) bIsRunningJump = TRUE; + + int iBonus = 0; + if (GetHasFeat(FEAT_GREAT_LEAP, oPC)) + { + if (Ninja_AbilitiesEnabled(oPC)) + { + bIsRunningJump = TRUE; + iBonus = 4; + } + } + if (GetHasSpellEffect(MOVE_TC_LEAPING_DRAGON, oPC)) + { + bIsRunningJump = TRUE; + //iBonus = 10; //:: This is granted in the stance. + } + // PnP rules are height * 6 for run and height * 2 for jump. + // I can't get height so that is assumed to be 6. + // Changed maxed jump distance because the NwN distance is rather short + // at least compared to height it is. + if(bIsRunningJump) + { + iMinJumpDistance = 5; + iDivisor = 1; + iMaxJumpDistance *= 6; + } + else + { + iMinJumpDistance = 3; + iDivisor = 2; + iMaxJumpDistance *= 3; + } + + // skill 28 = jump + int iJumpRoll = d20() + GetSkillRank(SKILL_JUMP, oPC) + iBonus + GetAbilityModifier(ABILITY_STRENGTH, oPC); + + if(bCanFly) + { + iMaxJumpDistance *= 100; + iJumpRoll *= 100; + } + + // Use Dex instead of Strength + if (GetHasFeat(FEAT_AGILE_ATHLETE, oPC)) + { + iJumpRoll -= GetAbilityModifier(ABILITY_STRENGTH, oPC); + iJumpRoll += GetAbilityModifier(ABILITY_DEXTERITY, oPC); + } + + if(GetSkillRank(SKILL_TUMBLE, oPC, TRUE) >= 5) iJumpRoll += 2; + + // Jump distance is determined by the number exceeding 10 + // divided based on running or standing jump. + iJumpRoll -= 10; + if(iJumpRoll < 1) iJumpRoll = 1; + iJumpRoll /= iDivisor; + iJumpDistance = iMinJumpDistance + iJumpRoll; + + // Hadozee gliding doubles jump distance + if(GetRacialType(oPC) == RACIAL_TYPE_HADOZEE) + { + iMaxJumpDistance *= 2; + iJumpDistance *= 2; + } + + if(iJumpDistance >= iDistance && iDistance <= iMaxJumpDistance) + { + // they passed jump check + bPassedJumpCheck = TRUE; + + effect eJump = EffectDisappearAppear(lLoc); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eJump, oPC, 3.1); + } + else + { + // they failed jump check + FloatingTextStringOnCreature("Jump check failed.", oPC); + bPassedJumpCheck = FALSE; + + if(bDoKnockDown) + { + effect eKnockDown = EffectKnockdown(); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eKnockDown, oPC); + } + } + + return bPassedJumpCheck; +} + +float GetHeight(location lPC, location lTarget) +{ + vector vPC = GetPositionFromLocation(lPC); + vector vTarget = GetPositionFromLocation(lTarget); + + return MetersToFeet(vTarget.z - vPC.z); +} + +float GetDistanceForClimbing(object oPC, location lLoc) +{ + object oArea = GetAreaFromLocation(lLoc); + vector vTest1 = GetPositionFromLocation(GetLocation(oPC)); + vector vTest2 = GetPositionFromLocation(lLoc); + float fDistance = GetDistanceBetweenLocations(Location(oArea, Vector(vTest1.x, vTest1.y, 0.0), 0.0), + Location(oArea, Vector(vTest2.x, vTest2.y, 0.0), 0.0)); + + return MetersToFeet(fDistance); +} + +int DoClimb(object oPC, location lLoc, int bDoKnockDown = TRUE) +{ + // check to see if abort due to being mounted + if(HorseGetIsMounted(oPC)) + return FALSE; // abort + + // if Climbing is disabled in this place. + if(GetLocalInt(GetArea(oPC), "AreaClimbOff") == TRUE) + { + SendMessageToPC(oPC, "Climbing is not allowed in this area."); + return FALSE; + } + + // Immobilized creatures can't Climb + effect eCheck = GetFirstEffect(oPC); + int nCheck; + while(GetIsEffectValid(eCheck)) + { + nCheck = GetEffectType(eCheck); + if(nCheck == EFFECT_TYPE_CUTSCENEIMMOBILIZE || + nCheck == EFFECT_TYPE_ENTANGLE) + { + SendMessageToPC(oPC, "You cannot move."); + return FALSE; + } + + eCheck = GetNextEffect(oPC); + } + + if(GetDistanceForClimbing(oPC, lLoc) > 10.0) + { + SendMessageToPC(oPC, "The target location is too far away to climb to. Please pick a closer target."); + return FALSE; + } + // Height restriction on climbing. Has to be at least 5 up or 5 down. + if(5.0 > GetHeight(GetLocation(oPC), lLoc) && GetHeight(GetLocation(oPC), lLoc) > -5.0) + { + SendMessageToPC(oPC, "The target location is too low to climb to. Please pick a higher target."); + return FALSE; + } + int bPassedClimbCheck = FALSE; + + int iClimbRoll = d20() + GetSkillRank(SKILL_CLIMB, oPC) + GetAbilityModifier(ABILITY_STRENGTH, oPC); + + // Flat DC, one of the hardest + if(iClimbRoll >= 25) + { + // they passed Climb check + bPassedClimbCheck = TRUE; + + effect eClimb = EffectDisappearAppear(lLoc); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eClimb, oPC, 3.1); + } + else + { + // they failed Climb check + FloatingTextStringOnCreature("Climb check failed.", oPC); + + if(bDoKnockDown) + { + effect eKnockDown = EffectKnockdown(); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnockDown, oPC, 5.0); + } + } + + return bPassedClimbCheck; +} + +// * Returns true or false depending on whether the creature is flying +// * or not +int PRCIsFlying(object oCreature) +{ + int nAppearance = GetAppearanceType(oCreature); + int nWings = GetCreatureWingType(oCreature); + int bFlying = FALSE; + switch(nAppearance) + { + case APPEARANCE_TYPE_PARROT: + case APPEARANCE_TYPE_BAT: + case APPEARANCE_TYPE_BAT_HORROR: + case APPEARANCE_TYPE_DRAGON_BLACK: + case APPEARANCE_TYPE_DRAGON_BLUE: + case APPEARANCE_TYPE_DRAGON_BRASS: + case APPEARANCE_TYPE_DRAGON_BRONZE: + case APPEARANCE_TYPE_DRAGON_COPPER: + case APPEARANCE_TYPE_DRAGON_GOLD: + case APPEARANCE_TYPE_DRAGON_GREEN: + case APPEARANCE_TYPE_DRAGON_PRIS: + case APPEARANCE_TYPE_DRAGON_RED: + case APPEARANCE_TYPE_DRAGON_SHADOW: + case APPEARANCE_TYPE_DRAGON_SILVER: + case APPEARANCE_TYPE_DRAGON_WHITE: + case APPEARANCE_TYPE_ELEMENTAL_AIR: + case APPEARANCE_TYPE_ELEMENTAL_AIR_ELDER: + case APPEARANCE_TYPE_FAIRY: + case APPEARANCE_TYPE_GARGOYLE: + case APPEARANCE_TYPE_HELMED_HORROR: + case APPEARANCE_TYPE_LANTERN_ARCHON: + case APPEARANCE_TYPE_QUASIT: + case APPEARANCE_TYPE_IMP: + case APPEARANCE_TYPE_MEPHIT_AIR: + case APPEARANCE_TYPE_MEPHIT_DUST: + case APPEARANCE_TYPE_MEPHIT_EARTH: + case APPEARANCE_TYPE_MEPHIT_FIRE: + case APPEARANCE_TYPE_MEPHIT_ICE: + case APPEARANCE_TYPE_MEPHIT_MAGMA: + case APPEARANCE_TYPE_MEPHIT_OOZE: + case APPEARANCE_TYPE_MEPHIT_SALT: + case APPEARANCE_TYPE_MEPHIT_STEAM: + case APPEARANCE_TYPE_MEPHIT_WATER: + case APPEARANCE_TYPE_WILL_O_WISP: + case APPEARANCE_TYPE_FALCON: + case APPEARANCE_TYPE_RAVEN: + case APPEARANCE_TYPE_SHADOW: + case APPEARANCE_TYPE_SHADOW_FIEND: + case APPEARANCE_TYPE_SPECTRE: + case APPEARANCE_TYPE_SUCCUBUS: + case APPEARANCE_TYPE_ALLIP: + case APPEARANCE_TYPE_WRAITH: + case APPEARANCE_TYPE_SEAGULL_FLYING: + case APPEARANCE_TYPE_SPHINX: + case APPEARANCE_TYPE_GYNOSPHINX: + case APPEARANCE_TYPE_MANTICORE: + case APPEARANCE_TYPE_COCKATRICE: + case APPEARANCE_TYPE_FAERIE_DRAGON: + case APPEARANCE_TYPE_PSEUDODRAGON: + case APPEARANCE_TYPE_WYRMLING_BLACK: + case APPEARANCE_TYPE_WYRMLING_BLUE: + case APPEARANCE_TYPE_WYRMLING_BRASS: + case APPEARANCE_TYPE_WYRMLING_BRONZE: + case APPEARANCE_TYPE_WYRMLING_COPPER: + case APPEARANCE_TYPE_WYRMLING_GOLD: + case APPEARANCE_TYPE_WYRMLING_GREEN: + case APPEARANCE_TYPE_WYRMLING_RED: + case APPEARANCE_TYPE_WYRMLING_SILVER: + case APPEARANCE_TYPE_WYRMLING_WHITE: + case APPEARANCE_TYPE_DEVIL: + case APPEARANCE_TYPE_BEHOLDER: + case APPEARANCE_TYPE_BEHOLDER_MAGE: + case APPEARANCE_TYPE_BEHOLDER_EYEBALL: + case APPEARANCE_TYPE_DRACOLICH: + case APPEARANCE_TYPE_HARPY: + case APPEARANCE_TYPE_DEMI_LICH: + case 455: // Wyvern: Adult + case 456: // Wyvern: Great + case 457: // Wyvern: Juvenile + case 458: // Wyvern: Young + case APPEARANCE_TYPE_BEHOLDER_MOTHER: + bFlying = TRUE; + } + if(!bFlying + && ((nWings > 0 && nWings < 79) || nWings == 90))//CEP and Project Q wing models + bFlying = TRUE; + + if (GetHasSpellEffect(MOVE_SH_BALANCE_SKY, oCreature)) + bFlying = TRUE; + + if (GetLocalInt(oCreature, "GeryonFlight")) + bFlying = TRUE; + + if(GetRacialType(oCreature) == RACIAL_TYPE_GLOURA) + bFlying = TRUE; + + if(GetRacialType(oCreature) == RACIAL_TYPE_AVARIEL) + bFlying = TRUE; + + if(GetRacialType(oCreature) == RACIAL_TYPE_FEYRI) + bFlying = TRUE; + + if(GetRacialType(oCreature) == RACIAL_TYPE_SPIRETOPDRAGON) + bFlying = TRUE; + + return bFlying; +} + +int PRCHasFlyingMount(object oCreature) +{ + int nMount = GetCreatureTailType(oCreature); + int bFlying = FALSE; + //no flying mounts in original NWN - TODO: add check for CEP mounts + return bFlying; +} \ No newline at end of file diff --git a/src/include/prc_inc_skin.nss b/src/include/prc_inc_skin.nss new file mode 100644 index 0000000..d227d60 --- /dev/null +++ b/src/include/prc_inc_skin.nss @@ -0,0 +1,139 @@ +//:://///////////////////////////////////////////// +//:: skin include +//:: prc_inc_skin +//:://///////////////////////////////////////////// +/** @file + This include contains GetPCSkin(). If only using + this function please include this directly and not via + the entire spell engine :p + + Is included by inc_persist_loca for persistent + local variables +*/ +//::////////////////////////////////////////////// +//:: Created By: fluffyamoeba +//:: Created On: 2008-4-23 +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Sets up the pcskin object on oPC. + * If it already exists, simply return it. Otherwise, create and equip it. + * + * @param oPC The creature whose skin object to look for. + * @return Either the skin found or the skin created. + */ +object GetPCSkin(object oPC); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "inc_debug" + +////////////////////////////////////////////////// +/* private functions */ +////////////////////////////////////////////////// +// to duplicate ForceEquip() from inc_utility + +void _ForceEquipSkin(object oPC, object oSkin, int nThCall = 0) +{ + // Make sure that the object we are attempting equipping is the latest one to be ForceEquipped into this slot + if(GetIsObjectValid(GetLocalObject(oPC, "ForceEquipToSlot_17")) + && GetLocalObject(oPC, "ForceEquipToSlot_17") != oSkin) + return; + + // Fail on non-commandable NPCs after ~1min + if(!GetIsPC(oPC) && !GetCommandable(oPC) && nThCall > 60) + { + WriteTimestampedLogEntry("ForceEquip() failed on non-commandable NPC: " + DebugObject2Str(oPC) + " for item: " + DebugObject2Str(oSkin)); + return; + } + + float fDelay; + + // Check if the equipping has already happened + if(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC) != oSkin) + { + // Test and increment the control counter + if(nThCall++ == 0) + { + // First, try to do the equipping non-intrusively and give the target a reasonable amount of time to do it + AssignCommand(oPC, ActionEquipItem(oSkin, INVENTORY_SLOT_CARMOUR)); + fDelay = 1.0f; + + // Store the item to be equipped in a local variable to prevent contest between two different calls to ForceEquip + SetLocalObject(oPC, "ForceEquipToSlot_17", oSkin); + } + else + { + // Nuke the target's action queue. This should result in "immediate" equipping of the item + if(GetIsPC(oPC) || nThCall > 5) // Skip nuking NPC action queue at first, since that can cause problems. 5 = magic number here. May need adjustment + { + if(!GetIsObjectValid(oSkin)) + { + oSkin = GetPCSkin(oPC); + return; + } + else + { + AssignCommand(oPC, ClearAllActions()); + AssignCommand(oPC, ActionEquipItem(oSkin, INVENTORY_SLOT_CARMOUR)); + } + } + // Use a lenghtening delay in order to attempt handling lag and possible other interference. From 0.1s to 1s + fDelay = (nThCall < 10 ? nThCall : 10) / 10.0f; // yes this is the same as PRCMin(nThCall, 10) + } + + // Loop + DelayCommand(fDelay, _ForceEquipSkin(oPC, oSkin, nThCall)); + } + // It has, so clean up + else + DeleteLocalObject(oPC, "ForceEquipToSlot_17"); +} + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +object GetPCSkin(object oPC) +{ + // According to a bug report, this is being called on non-creature objects. This should catch the culprit + if(DEBUG) Assert(GetObjectType(oPC) == OBJECT_TYPE_CREATURE, "GetObjectType(oPC) == OBJECT_TYPE_CREATURE", "GetPRCSkin() called on non-creature object: " + DebugObject2Str(oPC), "prc_inc_skin", "object GetPCSkin(object oPC)"); + object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC); + if(!GetIsObjectValid(oSkin)) + { + //oSkin = GetLocalObject(oPC, "PRCSkinCache"); + //if(!GetIsObjectValid(oSkin)) + { + //Added this check to prevent creation of extra skins on module entry + oSkin = GetItemPossessedBy(oPC, "base_prc_skin"); + if(GetIsObjectValid(oSkin)) + { + _ForceEquipSkin(oPC, oSkin, INVENTORY_SLOT_CARMOUR); + //AssignCommand(oPC, ActionEquipItem(oSkin, INVENTORY_SLOT_CARMOUR)); + } + else + { + oSkin = CreateItemOnObject("base_prc_skin", oPC); + _ForceEquipSkin(oPC, oSkin, INVENTORY_SLOT_CARMOUR); + //AssignCommand(oPC, ActionEquipItem(oSkin, INVENTORY_SLOT_CARMOUR)); + + // The skin should not be droppable + SetDroppableFlag(oSkin, FALSE); + // other scripts should not be able to destroy the skin + AssignCommand(oSkin, SetIsDestroyable(FALSE)); + } + + // Cache the skin reference for further lookups during the same script + //SetLocalObject(oPC, "PRCSkinCache", oSkin); + //DelayCommand(0.0f, DeleteLocalObject(oPC, "PRCSkinCache")); + } + } + return oSkin; +} + diff --git a/src/include/prc_inc_smite.nss b/src/include/prc_inc_smite.nss new file mode 100644 index 0000000..f982f3b --- /dev/null +++ b/src/include/prc_inc_smite.nss @@ -0,0 +1,500 @@ +/* +Smite Evil: Once per day, a paladin of 2nd level or higher may +attempt to smite evil with one normal melee attack. She adds her +Charisma modifier (if positive) to her attack roll and deals 1 extra +point of damage per level. For example, a 13th-level paladin armed +with a longsword would deal 1d8+13 points of damage, plus any +additional bonuses for high Strength or magical effects that +normally apply. If the paladin accidentally smites a creature that is +not evil, the smite has no effect but it is still used up for that day. +*/ +/* +Good + Anti-paldin + Blackguard + Fiendish Template + Half-fiend Template +Evil + Paladin + Fist of Raziel + Celestial Template + Half-celestial Template +Undead + Soldier of Light +Infidel + Champion of Bane + Champion of Torm +CW Samurai + Kiai +*/ + +const int SMITE_TYPE_GOOD_ANTIPALADIN = 11; +const int SMITE_TYPE_GOOD_BLACKGUARD = 12; //not used, biowares is adequate +const int SMITE_TYPE_GOOD_TEMPLATE_FIENDISH = 13; +const int SMITE_TYPE_GOOD_TEMPLATE_HALF_FIEND = 14; + +const int SMITE_TYPE_EVIL_PALADIN = 21; //not used, biowares is adequate +const int SMITE_TYPE_EVIL_FIST_OF_RAZIEL = 22; +const int SMITE_TYPE_EVIL_TEMPLATE_CELESTIAL = 23; +const int SMITE_TYPE_EVIL_TEMPLATE_HALF_CELESTIAL = 24; + +const int SMITE_TYPE_UNDEAD = 31; + +const int SMITE_TYPE_INFIDEL = 41; + +const int SMITE_TYPE_KIAI = 51; +const int SMITE_TYPE_CRUSADER = 52; +const int SMITE_TYPE_SHADOWBANE = 53; +const int SMITE_TYPE_KILLOREN = 54; +const int SMITE_TYPE_TEMPLATE_MINERAL = 55; +const int SMITE_TYPE_CULTIST = 56; +const int SMITE_TYPE_SOULBORN = 57; +const int SMITE_TYPE_CHAOS = 58; +const int SMITE_TYPE_RAMETHENE = 59; +const int SMITE_TYPE_ANDRAS = 60; +const int SMITE_TYPE_TRIAD = 61; +const int SMITE_TYPE_DESHARIS = 62; + +//this calculates damage and stuff from class and type +//takes epic smiting feats etc into account +//takes FoR special smiteing abilities into account too +//It DOES NOT decrease smites remaining +void DoSmite(object oPC, object oTarget, int nType); + +#include "prc_inc_combat" +#include "prc_inc_racial" +#include "bnd_inc_bndfunc" +#include "prc_inc_factotum" + +void DoSmite(object oPC, object oTarget, int nType) +{ + effect eSmite; //effect OnHit + int nDamage; + int nDamageType; + int nAttack; + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + string sHit; + string sMiss; + string sFailedTarget; + string sFailedSmiter; + int nTargetInvalid = !GetIsObjectValid(oTarget); + int nSmiterInvalid = !GetIsObjectValid(oPC); + if(nType == SMITE_TYPE_EVIL_FIST_OF_RAZIEL + || nType == SMITE_TYPE_EVIL_PALADIN + || nType == SMITE_TYPE_EVIL_TEMPLATE_CELESTIAL + || nType == SMITE_TYPE_EVIL_TEMPLATE_HALF_CELESTIAL) + { + eSmite = EffectVisualEffect(VFX_COM_HIT_DIVINE); + + if(nType == SMITE_TYPE_EVIL_PALADIN) + { + nDamage = GetLevelByClass(CLASS_TYPE_PALADIN, oPC) + + GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oPC) + + GetLevelByClass(CLASS_TYPE_DIVINE_CHAMPION, oPC); + nAttack = GetAbilityModifier(ABILITY_CHARISMA, oPC); + if(nAttack < 1) + nAttack = 1; + } + else if(nType == SMITE_TYPE_EVIL_FIST_OF_RAZIEL) + { + nDamage = GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oPC) + + GetLevelByClass(CLASS_TYPE_PALADIN, oPC) + + GetLevelByClass(CLASS_TYPE_DIVINE_CHAMPION, oPC); + nAttack = GetAbilityModifier(ABILITY_CHARISMA, oPC); + if(nAttack < 1) + nAttack = 1; + } + else if(nType == SMITE_TYPE_EVIL_TEMPLATE_CELESTIAL) + { + nDamage = GetHitDice(oPC); + if(nDamage > 20) + nDamage = 20; + } + else if(nType == SMITE_TYPE_EVIL_TEMPLATE_HALF_CELESTIAL) + { + nDamage = GetHitDice(oPC); + if(nDamage > 20) + nDamage = 20; + } + + nDamageType = DAMAGE_TYPE_DIVINE; + sFailedTarget = "Smite Failed: target is not Evil"; + sFailedSmiter = "Smite Failed: you are not Good"; + sHit = "Smite Evil Hit"; + sMiss = "Smite Evil Missed"; + if(GetAlignmentGoodEvil(oTarget) != ALIGNMENT_EVIL) + nTargetInvalid = TRUE; + if(GetAlignmentGoodEvil(oPC) != ALIGNMENT_GOOD) + nSmiterInvalid = TRUE; + + //Fist of Raziel special stuff + if(nType == SMITE_TYPE_EVIL_FIST_OF_RAZIEL) + { + int nClass = GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oPC); + //good aligned weapon (+1 enhancement to break DR) + if(nClass) + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyEnhancementBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL, 1), oWeapon, 0.1); + + //criticals always hit + if(nClass >= 3) + SetLocalInt(oPC, "FistOfRazielSpecialSmiteCritical", TRUE); + + //2d8 vs outsiders or undead + if(nClass >= 7 && (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_OUTSIDER || MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)) + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL, DAMAGE_TYPE_DIVINE, IP_CONST_DAMAGEBONUS_2d8), oWeapon, 0.1); + + //these are either or, not both + else if(nClass >= 5) + AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL, DAMAGE_TYPE_DIVINE, IP_CONST_DAMAGEBONUS_2d6), oWeapon, 0.1); + + //chain bolt stuff + if(nClass >= 9) + { + int nTargetCount = 5; + int i = 1; + object oSecondTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oPC, i); + //GetFirstObjectInShape(SHAPE_SPHERE, + // RADIUS_SIZE_LARGE, GetLocation(oPC), TRUE, OBJECT_TYPE_CREATURE); + while(GetIsObjectValid(oSecondTarget) && nTargetCount > 0 && GetDistanceBetween(oPC, oSecondTarget) < FeetToMeters(30.0)) + { + if(GetAlignmentGoodEvil(oSecondTarget) == ALIGNMENT_EVIL && oTarget != oSecondTarget) + { + int nDamage; + if(MyPRCGetRacialType(oSecondTarget) == RACIAL_TYPE_OUTSIDER || MyPRCGetRacialType(oSecondTarget) == RACIAL_TYPE_UNDEAD) + nDamage = d8(2); + else + nDamage = d6(2); + nDamage = PRCGetReflexAdjustedDamage(nDamage, oSecondTarget, 15+(GetAbilityModifier(ABILITY_CHARISMA, oPC)/2), SAVING_THROW_TYPE_NONE, oPC); + effect eDamage = EffectDamage(nDamage, DAMAGE_TYPE_DIVINE); + effect eBeam = EffectBeam(VFX_BEAM_HOLY, oPC, BODY_NODE_HAND); + effect eVFX = EffectVisualEffect(VFX_COM_HIT_DIVINE); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oSecondTarget); + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBeam, oSecondTarget, 0.5); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVFX, oSecondTarget); + nTargetCount --; + } + i++; + oSecondTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oPC, i); + } + } + } + } + + else if(nType == SMITE_TYPE_GOOD_ANTIPALADIN + || nType == SMITE_TYPE_GOOD_BLACKGUARD) + { + eSmite = EffectVisualEffect(VFX_COM_HIT_DIVINE); + if(nType == SMITE_TYPE_GOOD_BLACKGUARD) + { + nDamage = GetLevelByClass(CLASS_TYPE_BLACKGUARD, oPC) + + GetLevelByClass(CLASS_TYPE_ANTI_PALADIN, oPC); + nAttack = GetAbilityModifier(ABILITY_CHARISMA, oPC); + if(nAttack < 1) + nAttack = 1; + } + else if(nType == SMITE_TYPE_GOOD_ANTIPALADIN) + { + nDamage = GetLevelByClass(CLASS_TYPE_ANTI_PALADIN, oPC) + + GetLevelByClass(CLASS_TYPE_BLACKGUARD, oPC); + nAttack = GetAbilityModifier(ABILITY_CHARISMA, oPC); + if(nAttack < 1) + nAttack = 1; + } + else if(nType == SMITE_TYPE_GOOD_TEMPLATE_FIENDISH) + { + nDamage = GetHitDice(oPC); + if(nDamage > 20) + nDamage = 20; + } + else if(nType == SMITE_TYPE_GOOD_TEMPLATE_HALF_FIEND) + { + nDamage = GetHitDice(oPC); + if(nDamage > 20) + nDamage = 20; + } + nDamageType = DAMAGE_TYPE_DIVINE; + sFailedTarget = "Smite Failed: target is not Good"; + sFailedSmiter = "Smite Failed: you are not Evil"; + sHit = "Smite Good Hit"; + sMiss = "Smite Good Missed"; + if(GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD) + nTargetInvalid = TRUE; + if(GetAlignmentGoodEvil(OBJECT_SELF) != ALIGNMENT_EVIL) + nSmiterInvalid = TRUE; + } + + else if(nType == SMITE_TYPE_UNDEAD) + { + eSmite = EffectVisualEffect(VFX_COM_HIT_DIVINE); + nAttack = GetAbilityModifier(ABILITY_WISDOM, oPC); + nDamage = GetLevelByClass(CLASS_TYPE_SOLDIER_OF_LIGHT, oPC); + nDamageType = DAMAGE_TYPE_POSITIVE; + sFailedTarget = "Smite Failed: target is not Undead"; + sFailedSmiter = "Smite Failed: you are not Good"; + sHit = "Smite Undead Hit"; + sMiss = "Smite Undead Missed"; + if(MyPRCGetRacialType(oTarget) != RACIAL_TYPE_UNDEAD) + nTargetInvalid = TRUE; + if(GetAlignmentGoodEvil(OBJECT_SELF) != ALIGNMENT_GOOD) + nSmiterInvalid = TRUE; + } + + else if(nType == SMITE_TYPE_INFIDEL) + { + eSmite = EffectVisualEffect(VFX_COM_HIT_DIVINE); + nDamage = GetLevelByClass(CLASS_TYPE_DIVINE_CHAMPION, oPC) //CoT + + GetLevelByClass(CLASS_TYPE_PALADIN, oPC); + nAttack = GetAbilityModifier(ABILITY_CHARISMA, oPC); + string sDeity = "Torm"; + nDamageType = DAMAGE_TYPE_POSITIVE; + if(nAttack < 1) + nAttack = 1; + sFailedTarget = "Smite Failed: target has the same deity"; + sFailedSmiter = "Smite Failed: you do not follow your deity"; + sHit = "Smite Infidel Hit"; + sMiss = "Smite Infidel Missed"; + if(GetStringLowerCase(GetDeity(oTarget))== GetStringLowerCase(GetDeity(oPC))) + nTargetInvalid = TRUE; + if(GetStringLowerCase(GetDeity(oPC)) != GetStringLowerCase(sDeity)) + nSmiterInvalid = TRUE; + } + + else if(nType == SMITE_TYPE_KIAI) + { + eSmite = EffectVisualEffect(VFX_COM_HIT_DIVINE); + nDamage = GetAbilityModifier(ABILITY_CHARISMA, oPC); + if(nDamage < 1) + nDamage = 1; + nAttack = GetAbilityModifier(ABILITY_CHARISMA, oPC); + if(nAttack < 1) + nAttack = 1; + nDamageType = DAMAGE_TYPE_DIVINE; + sFailedTarget = "Target cannot be invalid"; + sFailedSmiter = "Smite Failed: you are not Lawful"; + sHit = "Kiai Smite Hit"; + sMiss = "Kiai Smite Missed"; + if(GetAlignmentLawChaos(OBJECT_SELF) != ALIGNMENT_LAWFUL) + nSmiterInvalid = TRUE; + } + + else if(nType == SMITE_TYPE_CRUSADER) + { + eSmite = EffectVisualEffect(VFX_COM_HIT_DIVINE); + nDamage = GetAbilityModifier(ABILITY_CHARISMA, oPC); + if(nDamage < 1) + nDamage = 0; // Can't go negative + nAttack = GetLevelByClass(CLASS_TYPE_CRUSADER, oPC); + + // Factotum Cunning Brilliance + if (GetIsAbilitySaved(oPC, FEAT_CRUSADER_SMITE)) + nAttack = GetLevelByClass(CLASS_TYPE_FACTOTUM); + + nDamageType = DAMAGE_TYPE_MAGICAL; + sFailedTarget = "Target cannot be invalid"; + sFailedSmiter = "Smite Failed: Report Error"; + sHit = "Crusader Smite Hit"; + sMiss = "Crusader Smite Missed"; + } + + else if(nType == SMITE_TYPE_SHADOWBANE) + { + eSmite = EffectVisualEffect(VFX_COM_HIT_DIVINE); + nDamage = GetLevelByClass(CLASS_TYPE_SHADOWBANE_INQUISITOR, oPC); + if(nDamage < 1) + nDamage = 0; + nAttack = GetAbilityModifier(ABILITY_CHARISMA, oPC); + if(nAttack < 1) + nAttack = 0; + nDamageType = DAMAGE_TYPE_DIVINE; + sFailedTarget = "Target cannot be invalid"; + sFailedSmiter = "Smite Failed: You don't exist"; + sHit = "Shadowbane Smite Hit"; + sMiss = "Shadowbane Smite Missed"; + } + + else if(nType == SMITE_TYPE_KILLOREN) + { + eSmite = EffectVisualEffect(VFX_COM_HIT_DIVINE); + nDamage = GetHitDice(oPC); + if(nDamage < 1) + nDamage = 0; + nAttack = GetAbilityModifier(ABILITY_CHARISMA, oPC); + if(nAttack < 1) + nAttack = 0; + nDamageType = DAMAGE_TYPE_MAGICAL; + sFailedTarget = "Target cannot be invalid"; + sFailedSmiter = "Aspect of the Destroyer Failed: You don't exist"; + sHit = "Aspect of the Destroyer Hit"; + sMiss = "Aspect of the Destroyer Missed"; + } + + else if(nType == SMITE_TYPE_TEMPLATE_MINERAL) + { + eSmite = EffectVisualEffect(VFX_IMP_ACID_L); + nDamage = GetHitDice(oPC); + if(nDamage < 1) + nDamage = 0; + nAttack = GetAbilityModifier(ABILITY_CONSTITUTION, oPC); + if(nAttack < 1) + nAttack = 0; + nDamageType = DAMAGE_TYPE_MAGICAL; + sFailedTarget = "Target cannot be invalid"; + sFailedSmiter = "Earth Strike Failed"; + sHit = "Earth Strike Hit"; + sMiss = "Earth Strike Missed"; + } + + else if(nType == SMITE_TYPE_CULTIST) + { + eSmite = EffectVisualEffect(VFX_COM_HIT_FROST); + nDamage = GetLevelByClass(CLASS_TYPE_CULTIST_SHATTERED_PEAK, oPC); + if(nDamage < 1) + nDamage = 0; + nAttack = GetAbilityModifier(ABILITY_CHARISMA, oPC); + if(nAttack < 1) + nAttack = 0; + nDamageType = DAMAGE_TYPE_MAGICAL; + sFailedTarget = "Target cannot be invalid"; + sFailedSmiter = "Smite Mage Failed: You don't exist"; + sHit = "Smite Mage Hit"; + sMiss = "Smite Mage Missed"; + } + + else if(nType == SMITE_TYPE_SOULBORN) + { + eSmite = EffectVisualEffect(VFX_FNF_STRIKE_HOLY); + nDamage = GetLevelByClass(CLASS_TYPE_SOULBORN, oPC); + if(nDamage < 1) + nDamage = 0; + nAttack = GetAbilityModifier(ABILITY_CHARISMA, oPC); + if(nAttack < 1) + nAttack = 0; + nDamageType = DAMAGE_TYPE_DIVINE; + sFailedTarget = "Target cannot be invalid"; + sFailedSmiter = "Smite Opposition Failed: You don't exist"; + sHit = "Smite Opposition Hit"; + sMiss = "Smite Opposition Missed"; + } + + else if(nType == SMITE_TYPE_CHAOS) + { + eSmite = EffectVisualEffect(VFX_FNF_STRIKE_HOLY); + nDamage = GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oPC); + if(nDamage < 1) + nDamage = 0; + nAttack = GetAbilityModifier(ABILITY_CHARISMA, oPC); + if(nAttack < 1) + nAttack = 0; + nDamageType = DAMAGE_TYPE_DIVINE; + sFailedTarget = "Target cannot be invalid"; + sFailedSmiter = "Smite Chaos Failed: You don't exist"; + sHit = "Smite Chaos Hit"; + sMiss = "Smite Chaos Missed"; + } + + else if(nType == SMITE_TYPE_RAMETHENE) + { + eSmite = EffectVisualEffect(VFX_COM_HIT_FIRE); + nDamage = d6(PRCGetCreatureSize(oTarget)-3); + if(nDamage < 1) + nDamage = 0; + nAttack = 0; + nDamageType = DAMAGE_TYPE_MAGICAL; + sFailedTarget = "Target cannot be invalid"; + sFailedSmiter = "Dragon Smite Failed: You don't exist"; + sHit = "Dragon Smite Hit"; + sMiss = "Dragon Smite Missed"; + } + + else if(nType == SMITE_TYPE_ANDRAS) + { + eSmite = EffectVisualEffect(VFX_FNF_STRIKE_HOLY); + nDamage = GetBinderLevel(oPC, VESTIGE_ANDRAS); + if(nDamage < 1) + nDamage = 0; + nAttack = GetAbilityModifier(ABILITY_CHARISMA, oPC); + if(nAttack < 1) + nAttack = 0; + nDamageType = DAMAGE_TYPE_DIVINE; + sFailedTarget = "Target cannot be invalid"; + sFailedSmiter = "Smite Good or Evil Failed: You don't exist"; + sHit = "Smite Good or Evil Hit"; + sMiss = "Smite Good or Evil Missed"; + } + + else if(nType == SMITE_TYPE_TRIAD) + { + eSmite = EffectVisualEffect(VFX_FNF_STRIKE_HOLY); + nDamage = GetBinderLevel(oPC, VESTIGE_THETRIAD); + if(nDamage < 1) + nDamage = 0; + nAttack = GetAbilityModifier(ABILITY_CHARISMA, oPC); + if(nAttack < 1) + nAttack = 0; + nDamageType = DAMAGE_TYPE_DIVINE; + sFailedTarget = "Target cannot be invalid"; + sFailedSmiter = "Smite Evil Failed: You don't exist"; + sHit = "Smite Evil Hit"; + sMiss = "Smite Evil Missed"; + } + + else if(nType == SMITE_TYPE_DESHARIS) + { + eSmite = EffectVisualEffect(VFX_FNF_STRIKE_HOLY); + nDamage = GetBinderLevel(oPC, VESTIGE_DESHARIS); + if(nDamage < 1) + nDamage = 0; + nAttack = GetAbilityModifier(ABILITY_CHARISMA, oPC); + if(nAttack < 1) + nAttack = 0; + nDamageType = DAMAGE_TYPE_DIVINE; + sFailedTarget = "Target cannot be invalid"; + sFailedSmiter = "Smite Natural Soul Failed: You don't exist"; + sHit = "Smite Natural Soul Hit"; + sMiss = "Smite Natural Soul Missed"; + } + + //check target is valid + //and show message if not + if(nTargetInvalid) + FloatingTextStringOnCreature(sFailedTarget, oPC); + + //check smiter is valid + //and show message if not + else if(nSmiterInvalid) + FloatingTextStringOnCreature(sFailedSmiter, oPC); + + //check for ranged weapon + //ranged smite was never finished + //if it was, here would be the place to put it! + else if (GetWeaponRanged(oWeapon) && !GetHasFeat(FEAT_RANGED_SMITE, oPC)) + FloatingTextStringOnCreature("Smite Failed: cannot use ranged weapon", oPC); + + //passed checks, do the actual smite + else + { + // Extra smite damage + nDamage += GetEssentiaInvestedFeat(oPC, FEAT_SAPPHIRE_SMITE); + //add epic smiting damage + int iEpicSmite = GetHasFeat(FEAT_EPIC_GREAT_SMITING_1) ? 2:1; + iEpicSmite = GetHasFeat(FEAT_EPIC_GREAT_SMITING_2) ? 3:iEpicSmite; + iEpicSmite = GetHasFeat(FEAT_EPIC_GREAT_SMITING_3) ? 4:iEpicSmite; + iEpicSmite = GetHasFeat(FEAT_EPIC_GREAT_SMITING_4) ? 5:iEpicSmite; + iEpicSmite = GetHasFeat(FEAT_EPIC_GREAT_SMITING_5) ? 6:iEpicSmite; + iEpicSmite = GetHasFeat(FEAT_EPIC_GREAT_SMITING_6) ? 7:iEpicSmite; + iEpicSmite = GetHasFeat(FEAT_EPIC_GREAT_SMITING_7) ? 8:iEpicSmite; + iEpicSmite = GetHasFeat(FEAT_EPIC_GREAT_SMITING_8) ? 9:iEpicSmite; + iEpicSmite = GetHasFeat(FEAT_EPIC_GREAT_SMITING_9) ? 10:iEpicSmite; + iEpicSmite = GetHasFeat(FEAT_EPIC_GREAT_SMITING_10)? 11:iEpicSmite; + nDamage *= iEpicSmite; + + //Double damage if has Devastating Smite active + if(GetHasSpellEffect(SPELL_DEVASTATING_SMITE, oPC)) nDamage += nDamage; + + //whew, now we can do the actual smite through the combat engine + PerformAttackRound(oTarget, oPC, eSmite, 0.0, nAttack, nDamage, nDamageType, FALSE, sHit, sMiss); + + // Target is valid and we know it's an enemy and we're in combat + DelayCommand(0.25, AssignCommand(oPC, ActionAttack(oTarget))); + } +} \ No newline at end of file diff --git a/src/include/prc_inc_sneak.nss b/src/include/prc_inc_sneak.nss new file mode 100644 index 0000000..3c75aa8 --- /dev/null +++ b/src/include/prc_inc_sneak.nss @@ -0,0 +1,730 @@ + +// * Various functions to determine sneak dice. + +// * Used to find the total sneak dice a character is capable of. +int GetTotalSneakAttackDice(object oPC); + +// * Used to find the total rogue sneak dice a character is capable of. +// ----------------------------------------------------------------------------------------- +// Future PRC's go here. DO NOT ADD ROGUE/BLACKGUARD/ASSASSIN SNEAK ATTACKS AS CLASS FEATS. +// Placeholder feats are fine, even encouraged. Example: "Ranged Sneak Attack +1d6". +// The feat should do nothing, just show that you have the bonus. +// ----------------------------------------------------------------------------------------- +int GetRogueSneak(object oPC); + +// * Used to find the total blackguard sneak dice a character is capable of. +int GetBlackguardSneak(object oPC); + +// * Used to find the total assassin sneak dice a character is capable of. +int GetAssassinSneak(object oPC); + +// * Used to find how much a character has taken "Improved Sneak Attack". +int GetEpicFeatSneak(object oPC); + +//::////////////////////////////////////////////// +//:: Sneak Attack Functions +//::////////////////////////////////////////////// + +// Checks if attacker is flanking the defender or not +int GetIsFlanked(object oDefender, object oAttacker); + +// Checks if an AoE spell is flanking the defender +int GetIsAOEFlanked(object oDefender, object oAttacker); + +// Determines if a creature is helpless. +// (effective dex modifier of 0, and can be Coup De Graced). +int GetIsHelpless(object oDefender); + +// Returns if oDefender is denied dex bonus to AC from spells +// int nIgnoreUD - ignores Uncanny Dodge +int GetIsDeniedDexBonusToAC(object oDefender, object oAttacker, int nIgnoreUD = FALSE); + +// Returns FALSE if oDefender has no concealment +// or the int amount of concealment on the defender. +int GetIsConcealed(object oDefender, object oAttacker); + +// Returns true if the Attacker can Sneak Attack the target +int GetCanSneakAttack(object oDefender, object oAttacker); + +// Returns Sneak Attack Damage +int GetSneakAttackDamage(int iSneakAttackDice); + +//Returns applicable elemental type for Dragonfire Strike +int GetDragonfireDamageType(object oPC); + +// * Used to find the total favoured enemy bonus a character is capable of. +int GetFavouredEnemyBonus(object oPC); + +//::////////////////////////////////////////////// +//:: Includes +//::////////////////////////////////////////////// + +//#include "prc_class_const" +//#include "prc_feat_const" +#include "tob_move_const" +#include "prc_x2_itemprop" + +//::////////////////////////////////////////////// +//:: Definitions +//::////////////////////////////////////////////// + +int GetTotalSneakAttackDice(object oPC) +{ + int iSneakAttackDice = GetRogueSneak(oPC) + GetBlackguardSneak(oPC) + + GetAssassinSneak(oPC) + GetEpicFeatSneak(oPC); + return iSneakAttackDice; +} + +int GetRogueSneak(object oPC) +{ + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + int nWeaponType = GetBaseItemType(oWeapon); + + int iClassLevel; + int iRogueSneak = 0; + + // Rogue + iClassLevel = GetLevelByClass(CLASS_TYPE_ROGUE, oPC); + // Daring Outlaw + if (iClassLevel && GetHasFeat(FEAT_DARING_OUTLAW, oPC)) + iClassLevel += GetLevelByClass(CLASS_TYPE_SWASHBUCKLER, oPC); + if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2; + + // Arcane Trickster (Epic) + iClassLevel = GetLevelByClass(CLASS_TYPE_ARCTRICK, oPC); + if (iClassLevel >= 12) iRogueSneak += (iClassLevel - 10) / 2; + + // Black Flame Zealot + iClassLevel = GetLevelByClass(CLASS_TYPE_BFZ, oPC); + if (iClassLevel) iRogueSneak += iClassLevel / 3; + + // Nightshade + iClassLevel = GetLevelByClass(CLASS_TYPE_NIGHTSHADE, oPC); + if (iClassLevel) iRogueSneak += iClassLevel / 3; + + // Outlaw Crimson Road + //iClassLevel = GetLevelByClass(CLASS_TYPE_OUTLAW_CRIMSON_ROAD, oPC); + //if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2; + + // Temple Raider + //iClassLevel = GetLevelByClass(CLASS_TYPE_TEMPLE_RAIDER, oPC); + //if (iClassLevel>= 2) iRogueSneak += (iClassLevel + 1) / 3; + + // Ghost-Faced Killer + iClassLevel = GetLevelByClass(CLASS_TYPE_GHOST_FACED_KILLER, oPC); + if (iClassLevel >= 2) iRogueSneak += ((iClassLevel + 1) / 3); + + // Ninja + iClassLevel = GetLevelByClass(CLASS_TYPE_NINJA, oPC); + if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2; + + // Shadow Thief of Amn + iClassLevel = GetLevelByClass(CLASS_TYPE_SHADOW_THIEF_AMN, oPC); + if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2; + + // Slayer of Domiel + iClassLevel = GetLevelByClass(CLASS_TYPE_SLAYER_OF_DOMIEL, oPC); + if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2; + + // Crinti Shadow Marauder + iClassLevel = GetLevelByClass(CLASS_TYPE_CRINTI_SHADOW_MARAUDER, oPC); + if (iClassLevel) iRogueSneak += iClassLevel / 2; + + // Cultist of the Shattered Peak + iClassLevel = GetLevelByClass(CLASS_TYPE_CULTIST_SHATTERED_PEAK, oPC); + if (iClassLevel) iRogueSneak += iClassLevel / 2; + + // Skullclan Hunter + iClassLevel = GetLevelByClass(CLASS_TYPE_SKULLCLAN_HUNTER, oPC); + if (iClassLevel) iRogueSneak += iClassLevel / 3; + + // Shadowmind + iClassLevel = GetLevelByClass(CLASS_TYPE_SHADOWMIND, oPC); + if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2; + + // Psychic Rogue + iClassLevel = GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oPC); + if (iClassLevel) iRogueSneak += (iClassLevel + 2) / 3; + + // Unseen Seer + iClassLevel = GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oPC); + if (iClassLevel) iRogueSneak += (iClassLevel + 2) / 3; + + // Fist of Dal Quor + iClassLevel = GetLevelByClass(CLASS_TYPE_FIST_DAL_QUOR, oPC); + if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2; + + // Umbral Disciple + iClassLevel = GetLevelByClass(CLASS_TYPE_UMBRAL_DISCIPLE, oPC); + if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 3; + + // Dragon Devotee and Hand of the Winged Masters + int nBonusFeatDice = 0; + int nCount; + + // First check for 10d6 to 6d6 (second 2DA range: 24905–24901) + for(nCount = FEAT_SPECIAL_SNEAK_ATTACK_10D6; nCount >= FEAT_SPECIAL_SNEAK_ATTACK_6D6; nCount--) + { + if (GetHasFeat(nCount, oPC)) + { + nBonusFeatDice = nCount - FEAT_SPECIAL_SNEAK_ATTACK_6D6 + 6; + //if (DEBUG) DoDebug("prc_inc_sneak: Bonus Sneak Dice: " + IntToString(nBonusFeatDice)); + break; + } + } + // If nothing found yet, check original range 5d6 to 1d6 + if (nBonusFeatDice == 0) + { + for(nCount = FEAT_SPECIAL_SNEAK_ATTACK_5D6; nCount >= FEAT_SPECIAL_SNEAK_ATTACK_1D6; nCount--) + { + if (GetHasFeat(nCount, oPC)) + { + nBonusFeatDice = nCount - FEAT_SPECIAL_SNEAK_ATTACK_1D6 + 1; + //if (DEBUG) DoDebug("prc_inc_sneak: Bonus Sneak Dice: " + IntToString(nBonusFeatDice)); + break; + } + } + } + +/* //Dragon Devotee and Hand of the Winged Masters + int nBonusFeatDice = 0; + int nCount; + for(nCount = FEAT_SPECIAL_SNEAK_ATTACK_5D6; nCount >= FEAT_SPECIAL_SNEAK_ATTACK_1D6; nCount--) + { + if (GetHasFeat(nCount,oPC)) + { + nBonusFeatDice = nCount - FEAT_SPECIAL_SNEAK_ATTACK_1D6 + 1; + //if (DEBUG) DoDebug("prc_inc_sneak: Bonus Sneak Dice: " + IntToString(nBonusFeatDice)); + break; + } + } */ + + //:: Shadowbane Inquisitor + iClassLevel = GetLevelByClass(CLASS_TYPE_SHADOWBANE_INQUISITOR, oPC); + if (iClassLevel >= 4) + { + iRogueSneak += 1 + (iClassLevel - 4) / 3; + } + +/* // Shadowbane Inquisitor + iClassLevel = GetLevelByClass(CLASS_TYPE_SHADOWBANE_INQUISITOR, oPC); + if (iClassLevel >= 4) iRogueSneak++; + if (iClassLevel >= 7) iRogueSneak++; + if (iClassLevel >= 10) iRogueSneak++; */ + + // Shadowbane Stalker + iClassLevel = GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER, oPC); + if (iClassLevel) iRogueSneak += iClassLevel / 3; + + //Naztharune Rakshasa racial sneak attack + if(GetHasFeat(FEAT_RACIAL_SNEAK_6D6)) iRogueSneak += 6; + + if (GetRacialType(oPC) == RACIAL_TYPE_MARRULURK) iRogueSneak += 2; + + if(nWeaponType == BASE_ITEM_LONGBOW || nWeaponType == BASE_ITEM_SHORTBOW) + { + // Peerless Archer + iClassLevel = GetLevelByClass(CLASS_TYPE_PEERLESS, oPC); + if (iClassLevel) iRogueSneak += (iClassLevel + 2) / 3; + } + else if(nWeaponType == BASE_ITEM_SLING) + { + // Halfling Warslinger + iClassLevel = GetLevelByClass(CLASS_TYPE_HALFLING_WARSLINGER, oPC); + if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2; + } + else if(nWeaponType == BASE_ITEM_WHIP) + { + // Lasher + iClassLevel = GetLevelByClass(CLASS_TYPE_LASHER, oPC); + if (iClassLevel > 0) iRogueSneak += ((iClassLevel - 1) / 4) + 1; + } + + //Justice of Weald and Woe + iClassLevel = GetLevelByClass(CLASS_TYPE_JUSTICEWW, oPC); + if(iClassLevel > 1) iRogueSneak++; + if(iClassLevel > 6) iRogueSneak++; + + //Shadowblade + iClassLevel = GetLevelByClass(CLASS_TYPE_SHADOWBLADE, oPC); + if (iClassLevel) iRogueSneak += (iClassLevel + 1) / 2; + + + if(GetHasSpellEffect(MOVE_SH_ASSASSINS_STANCE, oPC)) + { + iRogueSneak += 2; + } + + if(GetLocalInt(oPC, "SacredStrike")) + { + iRogueSneak += GetLocalInt(oPC, "SacredStrike"); + } + if(GetLocalInt(oPC, "PsyRogueSneak")) + { + iRogueSneak += GetLocalInt(oPC, "PsyRogueSneak"); + } + if(GetLocalInt(oPC, "CunningStrike")) + { + iRogueSneak += 1; + } + if(GetLocalInt(oPC, "UmbralSneak")) + { + iRogueSneak += GetLocalInt(oPC, "UmbralSneak"); + } + if(GetLocalInt(oPC, "MalphasSneak")) + { + iRogueSneak += GetLocalInt(oPC, "MalphasSneak"); + } + if(GetLocalInt(oPC, "AndroSneak")) + { + iRogueSneak += GetLocalInt(oPC, "AndroSneak"); + } + if (GetLocalInt(oPC, "FactotumSneak")) + { + iRogueSneak += (GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC) + 1) / 2; + } + + if(iRogueSneak > 0) //the feats only apply if you already have Sneak Attack + iRogueSneak += nBonusFeatDice; + + // ----------------------------------------------------------------------------------------- + // Future PRC's go here. DO NOT ADD ROGUE/BLACKGUARD/ASSASSIN SNEAK ATTACKS AS CLASS FEATS. + // Placeholder feats are fine, even encouraged. Example: "Ranged Sneak Attack +1d6". + // The feat should do nothing, just show that you have the bonus. + // ----------------------------------------------------------------------------------------- + + //if (DEBUG) DoDebug("prc_inc_sneak: Rogue Sneak Dice: " + IntToString(iRogueSneak)); + return iRogueSneak; +} + +// -------------------------------------------------- +// PLEASE DO NOT ADD ANY NEW CLASSES TO THIS FUNCTION +// -------------------------------------------------- +int GetBlackguardSneak(object oPC) +{ + int iClassLevel; + int iBlackguardSneak = 0; + + // Blackguard + iClassLevel = GetLevelByClass(CLASS_TYPE_BLACKGUARD, oPC); + if (iClassLevel) iBlackguardSneak += (iClassLevel - 1) / 3; + if ((iClassLevel) && (GetLevelByClass(CLASS_TYPE_PALADIN) >= 5)) iBlackguardSneak++; // bonus for pal/bg + + // Ninja Spy + iClassLevel = GetLevelByClass(CLASS_TYPE_NINJA_SPY, oPC); + if (iClassLevel) iBlackguardSneak += (iClassLevel + 1) / 3; + + // Arcane Trickster (Pre-Epic) + iClassLevel = GetLevelByClass(CLASS_TYPE_ARCTRICK, oPC); + if ((iClassLevel >= 2) && (iClassLevel < 11)) iBlackguardSneak += iClassLevel / 2; + if (iClassLevel >= 11) iBlackguardSneak += 5; + + //:: Disciple of Baalzebul + iClassLevel = GetLevelByClass(CLASS_TYPE_DISC_BAALZEBUL, oPC); + if (iClassLevel >= 2) + { + iBlackguardSneak += 1 + (iClassLevel - 2) / 3; + } + +/* // Disciple of Baalzebul + iClassLevel = GetLevelByClass(CLASS_TYPE_DISC_BAALZEBUL, oPC); + if ((iClassLevel >= 2) && (iClassLevel < 5)) iBlackguardSneak++; + if ((iClassLevel >= 5) && (iClassLevel < 8)) iBlackguardSneak += 2; + if (iClassLevel >= 8) iBlackguardSneak += 3; */ + + //if (DEBUG) DoDebug("prc_inc_sneak: Blackguard Sneak Dice: " + IntToString(iBlackguardSneak)); + return iBlackguardSneak; +} + +// -------------------------------------------------- +// PLEASE DO NOT ADD ANY NEW CLASSES TO THIS FUNCTION +// -------------------------------------------------- +int GetAssassinSneak(object oPC) +{ + int iClassLevel; + int iAssassinSneakDice = 0; + + // Assassin + iClassLevel = GetLevelByClass(CLASS_TYPE_ASSASSIN, oPC); + if (iClassLevel) iAssassinSneakDice += (iClassLevel + 1) / 2; + + // Telflammar Shadowlord + if(GetLevelByClass(CLASS_TYPE_SHADOWLORD, oPC) > 5) iAssassinSneakDice++; + + //if (DEBUG) DoDebug("prc_inc_sneak: Assassin Sneak Dice: " + IntToString(iAssassinSneakDice)); + return iAssassinSneakDice; +} + +int GetEpicFeatSneak(object oPC) +{ + int iEpicFeatDice = 0; + int iCount; + + // Basically searches top-down for improved sneak attack feats until it finds one. + for(iCount = FEAT_EPIC_IMPROVED_SNEAK_ATTACK_10; iCount >= FEAT_EPIC_IMPROVED_SNEAK_ATTACK_1; iCount--) + { + if (GetHasFeat(iCount,oPC)) + { + iEpicFeatDice = (iCount + 1) - FEAT_EPIC_IMPROVED_SNEAK_ATTACK_1; + break; + } + } + + //if (DEBUG) DoDebug("prc_inc_sneak: Epic Sneak Dice: " + IntToString(iEpicFeatDice)); + return iEpicFeatDice; +} + +//::////////////////////////////////////////////// +//:: Sneak Attack Function Definitions +//::////////////////////////////////////////////// + +int GetIsFlanked(object oDefender, object oAttacker) +{ + int bReturnVal = FALSE; + //if (DEBUG) DoDebug("Starting GetIsFlanked"); + + if(GetIsObjectValid(oAttacker) && GetIsObjectValid(oDefender)) + { + // I am assuming that if the Defender is facing away from the + // Attacker then the Defender is flanked, as NWN "turns" an + // attacker towards the defender + + vector vDefender = AngleToVector(GetFacing(oDefender)); + vector vAttacker = AngleToVector(GetFacing(oAttacker)); + vector vResult = vDefender + vAttacker; + //if (DEBUG) DoDebug("GetIsFlanked: End Section #1"); + float iMagDefender = VectorMagnitude(vDefender); + float iMagResult = VectorMagnitude(vResult); + + // If the magnitude of the Defenders facing vector is greater than the + // result of the magnitude of the vector addition of the Attackers and + // Defenders facing then the Defender is flanked. + + if(iMagDefender < iMagResult) + { + bReturnVal = TRUE; + } + } +//if (DEBUG) DoDebug("GetIsFlanked: End Section #2"); + return bReturnVal; +} + +// Checks if an AoE spell is against someone distracted in meleee combat +int GetIsAOEFlanked(object oDefender, object oAttacker) +{ + int bReturnVal = TRUE; + + // if they are not in combat then they are automatically flanked (surprise round) + if(!PRCGetIsFighting(oDefender) || !GetIsInCombat(oDefender) ) + { + // checks if they are attacking something other than the caster + object oTarget = GetAttackTarget(oDefender); + if(oTarget == oAttacker) bReturnVal = FALSE; + } + + return bReturnVal; +} + +int GetIsHelpless(object oDefender) +{ + // Does not apply when grappled + if (GetLocalInt(oDefender, "IsGrappled") && !GetLocalInt(oDefender, "UnconsciousGrapple")) return FALSE; + + // PnP describes a helpless defender as + // A helpless foe - one who is bound, held, sleeping, paralyzed, + // unconscious, or otherwise at your mercy - is an easy target. + return ( PRCGetHasEffect(EFFECT_TYPE_PARALYZE, oDefender) + || PRCGetHasEffect(EFFECT_TYPE_SLEEP, oDefender) + || PRCGetHasEffect(EFFECT_TYPE_PETRIFY, oDefender) + || PRCGetHasEffect(EFFECT_TYPE_CUTSCENE_PARALYZE, oDefender) ); +} + +int GetIsDeniedDexBonusToAC(object oDefender, object oAttacker, int nIgnoreUD = FALSE) +{ + int bIsDeniedDex = FALSE; + int bDefenderHasTrueSight = PRCGetHasEffect(EFFECT_TYPE_TRUESEEING, oDefender); + int bDefenderCanSeeInvisble = PRCGetHasEffect(EFFECT_TYPE_SEEINVISIBLE, oDefender); + int bDefenderIsKnockedDown = GetHasFeatEffect(FEAT_KNOCKDOWN, oDefender) || GetHasFeatEffect(FEAT_IMPROVED_KNOCKDOWN, oDefender); + + // if the player is helpess, they are automatically denied dex bonus. + if( GetIsHelpless(oDefender) ) return TRUE; + + // Forces it + if (GetLocalInt(oAttacker, "PRC_SB_UNEXPECTED")) return TRUE; + + // if the player is not fighting, then this is the "surprise round" + if( !PRCGetIsFighting(oDefender) || !GetIsInCombat(oDefender) ) + { + bIsDeniedDex = TRUE; + } + + // In NwN, knocked down targets are counted as denied dex bonus to AC. + if( bDefenderIsKnockedDown ) bIsDeniedDex = TRUE; + + // if defender has spell effect on them causing them to be denied dex bonus to AC. + if( PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, oDefender) ) bIsDeniedDex = TRUE; + else if( PRCGetHasEffect(EFFECT_TYPE_ENTANGLE, oDefender) ) bIsDeniedDex = TRUE; + else if( PRCGetHasEffect(EFFECT_TYPE_FRIGHTENED, oDefender) ) bIsDeniedDex = TRUE; + else if( PRCGetHasEffect(EFFECT_TYPE_STUNNED, oDefender) ) bIsDeniedDex = TRUE; + + // Note: This is wrong by PnP rules... but Bioware allows auto sneaks on Dazed targets. + // to keep in tune with the game engine I'll leave this active. + else if( PRCGetHasEffect(EFFECT_TYPE_DAZED, oDefender) ) bIsDeniedDex = TRUE; + + // if attacker is invisvisible/hiding/etc. + else if( PRCGetHasEffect(EFFECT_TYPE_INVISIBILITY, oAttacker) && !bDefenderHasTrueSight && !bDefenderCanSeeInvisble ) + { + bIsDeniedDex = TRUE; + } + else if( PRCGetHasEffect(EFFECT_TYPE_IMPROVEDINVISIBILITY, oAttacker) && !bDefenderHasTrueSight && !bDefenderCanSeeInvisble ) + { + bIsDeniedDex = TRUE; + } + else if( !GetObjectSeen(oAttacker, oDefender) ) + { + bIsDeniedDex = TRUE; + } + + // Check for Uncanny Dodge Vs. Sneak Attack. + if( GetHasFeat(FEAT_UNCANNY_DODGE_2, oDefender) && !nIgnoreUD ) + { + if(GetLevelByClass(CLASS_TYPE_DWARVENDEFENDER, oDefender)) + return FALSE; + + // +4 because a rogue has to be 4 levels higher to flank + int iUncannyDodgeLevels = GetLevelByClass(CLASS_TYPE_ASSASSIN , oDefender) + + GetLevelByClass(CLASS_TYPE_BARBARIAN , oDefender) + + GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE , oDefender) + + GetLevelByClass(CLASS_TYPE_ROGUE , oDefender) + + GetLevelByClass(CLASS_TYPE_SHADOWDANCER, oDefender) + + 4; + + int iSneakAttackLevels = GetLevelByClass(CLASS_TYPE_BOWMAN , oAttacker) + + GetLevelByClass(CLASS_TYPE_NINJA , oAttacker) + + GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE , oAttacker) + + GetLevelByClass(CLASS_TYPE_ROGUE , oAttacker) + + // add other sneak attacking PrC's here + + GetLevelByClass(CLASS_TYPE_ARCTRICK , oAttacker) + + GetLevelByClass(CLASS_TYPE_ASSASSIN , oAttacker) + + GetLevelByClass(CLASS_TYPE_BFZ , oAttacker) + + GetLevelByClass(CLASS_TYPE_BLACKGUARD , oAttacker) + + GetLevelByClass(CLASS_TYPE_BLARCHER , oAttacker) + + GetLevelByClass(CLASS_TYPE_DISC_BAALZEBUL , oAttacker) + + GetLevelByClass(CLASS_TYPE_FIST_DAL_QUOR , oAttacker) + + GetLevelByClass(CLASS_TYPE_GHOST_FACED_KILLER , oAttacker) + + GetLevelByClass(CLASS_TYPE_HALFLING_WARSLINGER, oAttacker) + + GetLevelByClass(CLASS_TYPE_JUSTICEWW , oAttacker) + + GetLevelByClass(CLASS_TYPE_LASHER , oAttacker) + + GetLevelByClass(CLASS_TYPE_NIGHTSHADE , oAttacker) + + GetLevelByClass(CLASS_TYPE_NINJA_SPY , oAttacker) + + GetLevelByClass(CLASS_TYPE_PEERLESS , oAttacker) + + GetLevelByClass(CLASS_TYPE_SHADOWBLADE , oAttacker) + + GetLevelByClass(CLASS_TYPE_SHADOWLORD , oAttacker) + + GetLevelByClass(CLASS_TYPE_SHADOWMIND , oAttacker) + + GetLevelByClass(CLASS_TYPE_SKULLCLAN_HUNTER , oAttacker) + + GetLevelByClass(CLASS_TYPE_SLAYER_OF_DOMIEL , oAttacker); + + if(iUncannyDodgeLevels > iSneakAttackLevels) + { + bIsDeniedDex = FALSE; + } + } + + return bIsDeniedDex; +} + +int GetIsConcealed(object oDefender, object oAttacker) +{ + int bIsConcealed = FALSE; + + int bAttackerHasTrueSight = PRCGetHasEffect(EFFECT_TYPE_TRUESEEING, oAttacker); + int bAttackerCanSeeInvisble = PRCGetHasEffect(EFFECT_TYPE_SEEINVISIBLE, oAttacker); + int bAttackerUltraVision = PRCGetHasEffect(EFFECT_TYPE_ULTRAVISION, oAttacker); + + if(GetHasFeat(FEAT_EPIC_SELF_CONCEALMENT_50, oDefender) ) bIsConcealed = 50; + else if(GetHasFeat(FEAT_EPIC_SELF_CONCEALMENT_40, oDefender) ) bIsConcealed = 40; + else if(GetHasFeat(FEAT_EPIC_SELF_CONCEALMENT_30, oDefender) ) bIsConcealed = 30; + else if(GetHasFeat(FEAT_EPIC_SELF_CONCEALMENT_20, oDefender) ) bIsConcealed = 20; + else if(GetHasFeat(FEAT_EPIC_SELF_CONCEALMENT_10, oDefender) ) bIsConcealed = 10; + + // darkness, invisible, imp invisible + else if(GetStealthMode(oDefender) == STEALTH_MODE_ACTIVATED && !GetObjectSeen(oDefender, oAttacker) ) bIsConcealed = TRUE; + else if(PRCGetHasEffect(EFFECT_TYPE_SANCTUARY, oDefender) && !bAttackerHasTrueSight ) + { + // if they player is hidden you know enough to try attacking, give 50% miss chance + // as that is the highest concealment normally allowed. + // couldn't find any rules that governed this though. + bIsConcealed = 50; + } + else if(PRCGetHasEffect(EFFECT_TYPE_INVISIBILITY, oDefender) && !bAttackerHasTrueSight && !bAttackerCanSeeInvisble ) + { + bIsConcealed = 50; + } + else if(PRCGetHasEffect(EFFECT_TYPE_IMPROVEDINVISIBILITY, oDefender) && !bAttackerHasTrueSight && !bAttackerCanSeeInvisble ) + { + bIsConcealed = 50; + } + else if(PRCGetHasEffect(EFFECT_TYPE_DARKNESS, oDefender) && !bAttackerHasTrueSight && !bAttackerUltraVision) + { + bIsConcealed = 50; + } + else if(GetHasFeatEffect(FEAT_EMPTY_BODY, oDefender) ) + { + bIsConcealed = 50; + } + //else if(PRCGetHasEffect(EFFECT_TYPE_ETHEREAL, oDefender) && !bAttackerHasTrueSight && !bAttackerCanSeeInvisble ) + //{ + // bIsConcealed = TRUE; + //} + + // spell effects + else if(GetHasSpellEffect(1764 , oDefender) && !bAttackerHasTrueSight) // blur spell + { + bIsConcealed = 20; + } + else if(GetHasSpellEffect(SPELL_DISPLACEMENT , oDefender) && !bAttackerHasTrueSight) + { + bIsConcealed = 50; + } + else if(GetHasSpellEffect(SPELL_SHADOW_EVADE , oDefender) && !bAttackerHasTrueSight) + { + int iSDlevel = GetLevelByClass(CLASS_TYPE_SHADOWDANCER, oDefender); + if(iSDlevel <= 4) bIsConcealed = 5; + if(iSDlevel <= 6) bIsConcealed = 10; + if(iSDlevel <= 8) bIsConcealed = 15; + if(iSDlevel <= 10) bIsConcealed = 20; + } + + // this is the catch-all effect + else if(PRCGetHasEffect(EFFECT_TYPE_CONCEALMENT, oDefender) && !bAttackerHasTrueSight) + { + if(bIsConcealed == FALSE) bIsConcealed = TRUE; + } + + if(GetLocalInt(oAttacker, "PRC_SB_UNERRING")) + { + bIsConcealed = FALSE; + return bIsConcealed; + } + return bIsConcealed; +} + +int GetCanSneakAttack(object oDefender, object oAttacker) +{ + //cant sneak non-creatures + if(GetObjectType(oDefender) != OBJECT_TYPE_CREATURE) + return FALSE; + + // Can't sneak attack if you're in a grapple + if(GetLocalInt(oAttacker, "IsGrappled")) + return FALSE; + + int bReturnVal = FALSE; + int bIsInRange = FALSE; + int bIsFlanked = GetIsFlanked(oDefender, oAttacker); + int bIsDeniedDex = GetIsDeniedDexBonusToAC(oDefender, oAttacker); + + float fDistance = GetDistanceBetween(oAttacker, oDefender); + if(fDistance <= FeetToMeters(30.0f) ) bIsInRange = TRUE; + + // Is only run if enemy is indeed flanked or denied dex bonus to AC + // otherwise there is no reason to check further + if(bIsFlanked || bIsDeniedDex && bIsInRange) + { + // so far they can be sneaked + bReturnVal = TRUE; + + // checking for other factors that remove sneak attack + if( GetIsImmune(oDefender, IMMUNITY_TYPE_CRITICAL_HIT, OBJECT_INVALID) ) bReturnVal = FALSE; + if( GetIsImmune(oDefender, IMMUNITY_TYPE_SNEAK_ATTACK, OBJECT_INVALID) ) bReturnVal = FALSE; + // Skullclan Hunters can sneak attack undead, so they return true here. + if( GetLevelByClass(CLASS_TYPE_SKULLCLAN_HUNTER, oAttacker) && GetRacialType(oDefender) == RACIAL_TYPE_UNDEAD) bReturnVal = TRUE; + + if( GetIsConcealed(oDefender, oAttacker) ) + bReturnVal = FALSE; + } + + return bReturnVal; +} + +int GetSneakAttackDamage(int iSneakAttackDice) +{ + int iSneakAttackDamage = d6(iSneakAttackDice); + return iSneakAttackDamage; +} + +int GetDragonfireDamageType(object oPC) +{ + //Elemental Immunities for various dragon types. + int iType = GetHasFeat(FEAT_BLACK_DRAGON, oPC) ? DAMAGE_TYPE_ACID : + GetHasFeat(FEAT_BROWN_DRAGON, oPC) ? DAMAGE_TYPE_ACID : + GetHasFeat(FEAT_COPPER_DRAGON, oPC) ? DAMAGE_TYPE_ACID : + GetHasFeat(FEAT_GREEN_DRAGON, oPC) ? DAMAGE_TYPE_ACID : + GetHasFeat(FEAT_BRASS_DRAGON, oPC) ? DAMAGE_TYPE_FIRE : + GetHasFeat(FEAT_GOLD_DRAGON, oPC) ? DAMAGE_TYPE_FIRE : + GetHasFeat(FEAT_RED_DRAGON, oPC) ? DAMAGE_TYPE_FIRE : + GetHasFeat(FEAT_LUNG_WANG_DRAGON, oPC) ? DAMAGE_TYPE_FIRE : + GetHasFeat(FEAT_BATTLE_DRAGON, oPC) ? DAMAGE_TYPE_SONIC : + GetHasFeat(FEAT_EMERALD_DRAGON, oPC) ? DAMAGE_TYPE_SONIC : + GetHasFeat(FEAT_HOWLING_DRAGON, oPC) ? DAMAGE_TYPE_SONIC : + GetHasFeat(FEAT_BLUE_DRAGON, oPC) ? DAMAGE_TYPE_ELECTRICAL : + GetHasFeat(FEAT_BRONZE_DRAGON, oPC) ? DAMAGE_TYPE_ELECTRICAL : + GetHasFeat(FEAT_OCEANUS_DRAGON, oPC) ? DAMAGE_TYPE_ELECTRICAL : + GetHasFeat(FEAT_SAPPHIRE_DRAGON, oPC) ? DAMAGE_TYPE_ELECTRICAL : + GetHasFeat(FEAT_SONG_DRAGON, oPC) ? DAMAGE_TYPE_ELECTRICAL : + GetHasFeat(FEAT_SHEN_LUNG_DRAGON, oPC) ? DAMAGE_TYPE_ELECTRICAL : + GetHasFeat(FEAT_CRYSTAL_DRAGON, oPC) ? DAMAGE_TYPE_COLD : + GetHasFeat(FEAT_TOPAZ_DRAGON, oPC) ? DAMAGE_TYPE_COLD : + GetHasFeat(FEAT_SILVER_DRAGON, oPC) ? DAMAGE_TYPE_COLD : + GetHasFeat(FEAT_WHITE_DRAGON, oPC) ? DAMAGE_TYPE_COLD : + GetHasFeat(FEAT_DRACONIC_HERITAGE_BK, oPC) ? DAMAGE_TYPE_ACID : + GetHasFeat(FEAT_DRACONIC_HERITAGE_CP, oPC) ? DAMAGE_TYPE_ACID : + GetHasFeat(FEAT_DRACONIC_HERITAGE_GR, oPC) ? DAMAGE_TYPE_ACID : + GetHasFeat(FEAT_DRACONIC_HERITAGE_BS, oPC) ? DAMAGE_TYPE_FIRE : + GetHasFeat(FEAT_DRACONIC_HERITAGE_GD, oPC) ? DAMAGE_TYPE_FIRE : + GetHasFeat(FEAT_DRACONIC_HERITAGE_RD, oPC) ? DAMAGE_TYPE_FIRE : + GetHasFeat(FEAT_DRACONIC_HERITAGE_EM, oPC) ? DAMAGE_TYPE_SONIC : + GetHasFeat(FEAT_DRACONIC_HERITAGE_BL, oPC) ? DAMAGE_TYPE_ELECTRICAL : + GetHasFeat(FEAT_DRACONIC_HERITAGE_BZ, oPC) ? DAMAGE_TYPE_ELECTRICAL : + GetHasFeat(FEAT_DRACONIC_HERITAGE_SA, oPC) ? DAMAGE_TYPE_ELECTRICAL : + GetHasFeat(FEAT_DRACONIC_HERITAGE_CR, oPC) ? DAMAGE_TYPE_COLD : + GetHasFeat(FEAT_DRACONIC_HERITAGE_TP, oPC) ? DAMAGE_TYPE_COLD : + GetHasFeat(FEAT_DRACONIC_HERITAGE_SR, oPC) ? DAMAGE_TYPE_COLD : + GetHasFeat(FEAT_DRACONIC_HERITAGE_WH, oPC) ? DAMAGE_TYPE_COLD : + GetHasFeat(FEAT_KOB_DRAGONWROUGHT_BK, oPC) ? DAMAGE_TYPE_ACID : + GetHasFeat(FEAT_KOB_DRAGONWROUGHT_CP, oPC) ? DAMAGE_TYPE_ACID : + GetHasFeat(FEAT_KOB_DRAGONWROUGHT_GR, oPC) ? DAMAGE_TYPE_ACID : + GetHasFeat(FEAT_KOB_DRAGONWROUGHT_BS, oPC) ? DAMAGE_TYPE_FIRE : + GetHasFeat(FEAT_KOB_DRAGONWROUGHT_GD, oPC) ? DAMAGE_TYPE_FIRE : + GetHasFeat(FEAT_KOB_DRAGONWROUGHT_RD, oPC) ? DAMAGE_TYPE_FIRE : + GetHasFeat(FEAT_KOB_DRAGONWROUGHT_EM, oPC) ? DAMAGE_TYPE_SONIC : + GetHasFeat(FEAT_KOB_DRAGONWROUGHT_BL, oPC) ? DAMAGE_TYPE_ELECTRICAL : + GetHasFeat(FEAT_KOB_DRAGONWROUGHT_BZ, oPC) ? DAMAGE_TYPE_ELECTRICAL : + GetHasFeat(FEAT_KOB_DRAGONWROUGHT_SA, oPC) ? DAMAGE_TYPE_ELECTRICAL : + GetHasFeat(FEAT_KOB_DRAGONWROUGHT_CR, oPC) ? DAMAGE_TYPE_COLD : + GetHasFeat(FEAT_KOB_DRAGONWROUGHT_TP, oPC) ? DAMAGE_TYPE_COLD : + GetHasFeat(FEAT_KOB_DRAGONWROUGHT_SR, oPC) ? DAMAGE_TYPE_COLD : + GetHasFeat(FEAT_KOB_DRAGONWROUGHT_WH, oPC) ? DAMAGE_TYPE_COLD : + DAMAGE_TYPE_FIRE; // If none match, make the itemproperty invalid + + return iType; +} + +int GetFavouredEnemyBonus(object oPC) +{ + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + int nWeaponType = GetBaseItemType(oWeapon); + + int nClass; + int nFE = 0; + + // Ranger + nClass = GetLevelByClass(CLASS_TYPE_RANGER, oPC); + if (nClass) nFE += nClass/5 + 1; + + if (DEBUG) DoDebug("prc_inc_sneak: Favoured Enemy Bonus: " + IntToString(nFE)); + return nFE; +} + +//;: void main (){} \ No newline at end of file diff --git a/src/include/prc_inc_sp_tch.nss b/src/include/prc_inc_sp_tch.nss new file mode 100644 index 0000000..45dc2b4 --- /dev/null +++ b/src/include/prc_inc_sp_tch.nss @@ -0,0 +1,169 @@ +int PRCDoRangedTouchAttack(object oTarget, int nDisplayFeedback = TRUE, object oCaster = OBJECT_SELF, int nAttackBonus = 0); +int PRCDoMeleeTouchAttack(object oTarget, int nDisplayFeedback = TRUE, object oCaster = OBJECT_SELF, int nAttackBonus = 0); + +//#include "prc_inc_sneak" +#include "prc_inc_combat" +//#include "prc_inc_template" + +int PRCDoRangedTouchAttack(object oTarget, int nDisplayFeedback = TRUE, object oCaster = OBJECT_SELF, int nAttackBonus = 0) +{ + if(GetLocalInt(oTarget, "Dymond_Deflect")) + { + DeleteLocalInt(oTarget, "Dymond_Deflect"); + return FALSE; + } + if(GetLocalInt(oCaster, "AttackHasHit")) + return GetLocalInt(oCaster, "AttackHasHit"); + string sCacheName = "AttackHasHit_"+ObjectToString(oTarget); + if(GetLocalInt(oCaster, sCacheName)) + return GetLocalInt(oCaster, sCacheName); + if(GetPersistantLocalInt(oCaster, "template_102")) // TEMPLATE_DEMILICH + nAttackBonus += GetHitDice(oCaster); + if(GetLocalInt(oCaster, "WarsoulTyrant")) // Hobgoblin Warsoul + nAttackBonus += GetLocalInt(oCaster, "WarsoulTyrant"); + + if(GetHasFeat(FEAT_SHIELD_WARD, oTarget)) + { + int nBase = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget)); + if (nBase == BASE_ITEM_SMALLSHIELD || nBase == BASE_ITEM_LARGESHIELD || nBase == BASE_ITEM_TOWERSHIELD) + nAttackBonus -= GetItemACValue(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget)); + } + else if(GetHasFeat(FEAT_PARRYING_SHIELD, oTarget)) // Yes, these two are mostly identical + { + int nBase = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget)); + if (nBase == BASE_ITEM_SMALLSHIELD || nBase == BASE_ITEM_LARGESHIELD || nBase == BASE_ITEM_TOWERSHIELD) + nAttackBonus -= GetItemACValue(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget)); + } + + int nResult = GetAttackRoll(oTarget,oCaster,OBJECT_INVALID,0,nAttackBonus,0,nDisplayFeedback,0.0,TOUCH_ATTACK_RANGED_SPELL); + //Ranged Recall only applies on misses, need a swift action + if (GetHasFeat(FEAT_RANGED_RECALL, oCaster) && nResult == 0) + { + int nRecall = GetLocalInt(oCaster, "RangedRecall"); + // Only get three uses a day + if (3 > nRecall) + { + if (TakeSwiftAction(oCaster)) + { + SetLocalInt(oCaster, "RangedRecall", nRecall+1); + // Reroll with a -5 penalty + nResult = GetAttackRoll(oTarget,oCaster,OBJECT_INVALID,0,nAttackBonus-5,0,nDisplayFeedback,0.0,TOUCH_ATTACK_MELEE_SPELL); + } + } + } + SetLocalInt(oCaster, sCacheName, nResult); + DelayCommand(1.0, DeleteLocalInt(oCaster, sCacheName)); + return nResult; +} + +int PRCDoMeleeTouchAttack(object oTarget, int nDisplayFeedback = TRUE, object oCaster = OBJECT_SELF, int nAttackBonus = 0) +{ + if(GetLocalInt(oCaster, "AttackHasHit")) + return GetLocalInt(oCaster, "AttackHasHit"); + string sCacheName = "AttackHasHit_"+ObjectToString(oTarget); + if(GetLocalInt(oCaster, sCacheName)) + return GetLocalInt(oCaster, sCacheName); + if(GetPersistantLocalInt(oCaster, "template_102")) // TEMPLATE_DEMILICH + nAttackBonus += GetHitDice(oCaster); + if(GetLocalInt(oCaster, "WarsoulTyrant")) // Hobgoblin Warsoul + nAttackBonus += GetLocalInt(oCaster, "WarsoulTyrant"); + if(GetHasFeat(FEAT_SHIELD_WARD, oTarget)) + { + int nBase = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget)); + if (nBase == BASE_ITEM_SMALLSHIELD || nBase == BASE_ITEM_LARGESHIELD || nBase == BASE_ITEM_TOWERSHIELD) + nAttackBonus -= GetItemACValue(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget)); + } + else if(GetHasFeat(FEAT_PARRYING_SHIELD, oTarget)) // Yes, these two are mostly identical + { + int nBase = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget)); + if (nBase == BASE_ITEM_SMALLSHIELD || nBase == BASE_ITEM_LARGESHIELD || nBase == BASE_ITEM_TOWERSHIELD) + nAttackBonus -= GetItemACValue(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget)); + } + int nResult = GetAttackRoll(oTarget,oCaster,OBJECT_INVALID,0,nAttackBonus,0,nDisplayFeedback,0.0,TOUCH_ATTACK_MELEE_SPELL); + SetLocalInt(oCaster, sCacheName, nResult); + DelayCommand(1.0, DeleteLocalInt(oCaster, sCacheName)); + return nResult; +} + +// return sneak attack damage for a spell +// requires caster, target, and spell damage type +int SpellSneakAttackDamage(object oCaster, object oTarget) +{ + if (GetLocalInt(oCaster, "NoSpellSneak")) + return 0; + + int numDice = GetTotalSneakAttackDice(oCaster); + + if(numDice != 0 && GetCanSneakAttack(oTarget, oCaster) ) + { + FloatingTextStringOnCreature("*Sneak Attack Spell*", oCaster, TRUE); + return GetSneakAttackDamage(numDice); + } + else + { + return 0; + } +} + +//Applies damage from touch attacks, +// returns result of attack roll +// +// object oCaster, the attacker +// object oTarget, the victim +// int iAttackRoll, the result of a touch +// attack roll, 1 for hit, 2 for +// critical hit +// int iDamage, the normal amount of damage done +// int iDamageType, the damage type +// int iDamageType2, the 2nd damage type +// if 2 types of damage are applied +int ApplyTouchAttackDamage(object oCaster, object oTarget, int iAttackRoll, int iDamage, int iDamageType, int iDamageType2 = -1) +{ + iDamage *= iAttackRoll; + if(iDamage) + { + if(!GetPRCSwitch(PRC_SPELL_SNEAK_DISABLE)) + iDamage += SpellSneakAttackDamage(oCaster, oTarget); + + effect eDamage; + if(iDamageType2 == -1) + eDamage = PRCEffectDamage(oTarget, iDamage, iDamageType); + else + { //for touch attacks with 2 damage types, 1st damage type has priority + eDamage = PRCEffectDamage(oTarget, iDamage / 2, iDamageType); + eDamage = EffectLinkEffects(eDamage, EffectDamage(iDamage - (iDamage / 2), iDamageType2)); + } + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget); + } + + return iAttackRoll; +} + +//routes to DoRacialSLA, but checks that the ray hits first +//not sure how this will work if the spell does multiple touch attack, hopefully that shouldnt apply +//this is Base DC, not total DC. SLAs are still spells, so spell focus should still apply. +void DoSpellRay(int nSpellID, int nCasterlevel = 0, int nTotalDC = 0) +{ + int nAttack = PRCDoRangedTouchAttack(PRCGetSpellTargetObject()); + if(nAttack) + { + ActionDoCommand(SetLocalInt(OBJECT_SELF, "AttackHasHit", nAttack)); //preserve crits + if(DEBUG) DoDebug("Spell DC passed to DoSpellRay: " + IntToString(nTotalDC)); + DoRacialSLA(nSpellID, nCasterlevel, nTotalDC, TRUE); + ActionDoCommand(DeleteLocalInt(OBJECT_SELF, "AttackHasHit")); + } +} + +//routes to DoRacialSLA, but checks that the rouch hits first +//not sure how this will work if the spell does multiple touch attack, hopefully that shouldnt apply +//this is Base DC, not total DC. SLAs are still spells, so spell focus should still apply. +void DoSpellMeleeTouch(int nSpellID, int nCasterlevel = 0, int nTotalDC = 0) +{ + int nAttack = PRCDoMeleeTouchAttack(PRCGetSpellTargetObject()); + if(nAttack) + { + ActionDoCommand(SetLocalInt(OBJECT_SELF, "AttackHasHit", nAttack)); //preserve crits + DoRacialSLA(nSpellID, nCasterlevel, nTotalDC); + ActionDoCommand(DeleteLocalInt(OBJECT_SELF, "AttackHasHit")); + } +} \ No newline at end of file diff --git a/src/include/prc_inc_spells.nss b/src/include/prc_inc_spells.nss new file mode 100644 index 0000000..98e812d --- /dev/null +++ b/src/include/prc_inc_spells.nss @@ -0,0 +1,3236 @@ +/* + ---------------- + prc_inc_spells + ---------------- + + 7/25/04 by WodahsEht + + Contains many useful functions for determining caster level, mostly. The goal + is to consolidate all caster level functions to this -- existing caster level + functions will be wrapped around the main function. + + In the future, all new PrC's that add to caster levels should be added to + the GetArcanePRCLevels and GetDivinePRCLevels functions. Very little else should + be necessary, except when new casting feats are created. +*/ + +//:: Updated for .35 by Jaysyn 2023/03/10 + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +//:: Handles psuedo-Foritifcation +void DoFortification(object oPC = OBJECT_SELF, int nFortification = 25); + +/** + * Adjusts the base class level (NOT caster level) of the class by any spellcasting PrCs + * @param nClass a base casting class (divine or arcane) + * @return The level of the class, adjusted for any appropriate PrC levels + */ +int GetPrCAdjustedClassLevel(int nClass, object oCaster = OBJECT_SELF); + +/** + * Adjusts the base caster level of the class by any spellcasting PrCs plus Practised Spellcasting feats if appropriate + * @param nClass a base casting class + * @param bAdjustForPractisedSpellcaster add practiced spellcaster feat to caster level. TRUE by default + * @return the caster level in the class, adjusted by any PrC levels and practised spellcaster feats as appropriate + */ +int GetPrCAdjustedCasterLevel(int nClassType, object oCaster = OBJECT_SELF, int bAdjustForPractisedSpellcaster = TRUE); + +/** + * finds the highest arcane or divine caster level, adjusting the base caster level of the class by any + * spellcasting PrCs plus Practised Spellcasting feats if appropriate + * @param nClassType TYPE_DIVINE or TYPE_ARCANE + * @param bAdjustForPractisedSpellcaster add practiced spellcaster feat to caster level. TRUE by default + * @return the highest arcane/divine caster level adjusted by any PrC levels and practised spellcaster feats as appropriate + */ +int GetPrCAdjustedCasterLevelByType(int nClassType, object oCaster = OBJECT_SELF, int bAdjustForPractisedSpellcaster = TRUE); + +// Returns the best "feat-adjusted" arcane levels of the PC in question. +// Considers feats that situationally adjust caster level. +int GetLevelByTypeArcaneFeats(object oCaster = OBJECT_SELF, int iSpellID = -1); + +// Returns the best "feat-adjusted" divine levels of the PC in question. +// Considers feats that situationally adjust caster level. +int GetLevelByTypeDivineFeats(object oCaster = OBJECT_SELF, int iSpellID = -1); + +//Returns Reflex Adjusted Damage. Is a wrapper function that allows the +//DC to be adjusted based on conditions that cannot be done using iprops +//such as saves vs spellschools, or other adjustments +int PRCGetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus=OBJECT_SELF); + +//Is a wrapper function that allows the DC to be adjusted based on conditions +//that cannot be done using iprops, such as saves vs spellschool. +//If bImmunityCheck == FALSE: returns 0 if failure or immune, 1 if success - same as MySavingThrow +//If bImmunityCheck == TRUE: returns 0 if failure, 1 if success, 2 if immune +int PRCMySavingThrow(int nSavingThrow, object oTarget, int nDC, int nSaveType=SAVING_THROW_TYPE_NONE, object oSaveVersus = OBJECT_SELF, float fDelay = 0.0, int bImmunityCheck = FALSE); + +// Finds caster levels by specific types (see the constants below). +int GetCasterLvl(int iTypeSpell, object oCaster = OBJECT_SELF); + +// Calculates bonus damage to a spell for Spell Betrayal Ability +int SpellBetrayalDamage(object oTarget, object oCaster); + +// Calculates damage to a spell for Spellstrike Ability +int SpellStrikeDamage(object oTarget, object oCaster); + +// Create a Damage effect +// - oTarget: spell target +// - nDamageAmount: amount of damage to be dealt. This should be applied as an +// instantaneous effect. +// - nDamageType: DAMAGE_TYPE_* +// - nDamagePower: DAMAGE_POWER_* +// Used to add Warmage's Edge to spells. +effect PRCEffectDamage(object oTarget, int nDamageAmount, int nDamageType=DAMAGE_TYPE_MAGICAL, int nDamagePower=DAMAGE_POWER_NORMAL, int nMetaMagic=METAMAGIC_NONE); + +/** + * Adds damage to all arcane spells based on the number of dice + */ +int SpellDamagePerDice(object oCaster, int nDice); + +int IsSpellDamageElemental(int nDamageType); + +// Get altered damage type for energy sub feats. +// nDamageType - The DAMAGE_TYPE_xxx constant of the damage. All types other +// than elemental damage types are ignored. +// oCaster - caster object. +// moved from spinc_common, possibly somewhat redundant +int PRCGetElementalDamageType(int nDamageType, object oCaster = OBJECT_SELF); + +// Adds the bonus damage from both Spell Betrayal and Spellstrike together +int ApplySpellBetrayalStrikeDamage(object oTarget, object oCaster, int bShowTextString = TRUE); + +// wrapper for DecrementRemainingSpellUses, works for newspellbook 'fake' spells too +void PRCDecrementRemainingSpellUses(object oCreature, int nSpell); + +/** + * Determines and applies the alignment shift for using spells/powers with the + * [Evil] descriptor. The amount of adjustment is equal to the square root of + * the caster's distance from pure evil. + * In other words, the amount of shift is higher the farther the caster is from + * pure evil, with the extremes being 10 points of shift at pure good and 0 + * points of shift at pure evil. + * + * Does nothing if the PRC_SPELL_ALIGNMENT_SHIFT switch is not set. + * + * @param oPC The caster whose alignment to adjust + */ +//void SPEvilShift(object oPC); + +/** + * Determines and applies the alignment shift for using spells/powers with the + * [Good] descriptor. The amount of adjustment is equal to the square root of + * the caster's distance from pure good. + * In other words, the amount of shift is higher the farther the caster is from + * pure good, with the extremes being 10 points of shift at pure evil and 0 + * points of shift at pure good. + * + * Does nothing if the PRC_SPELL_ALIGNMENT_SHIFT switch is not set. + * + * @param oPC The caster whose alignment to adjust + */ +//void SPGoodShift(object oPC); + +/** + * Applies the corruption cost for Corrupt spells. + * + * @param oPC The caster of the Corrupt spell + * @param oTarget The target of the spell. + * Not used for anything, should probably remove - Ornedan + * @param nAbility ABILITY_* of the ability to apply the cost to + * @param nCost The amount of stat damage or drain to apply + * @param bDrain If this is TRUE, the cost is applied as ability drain. + * If FALSE, as ability damage. + */ +void DoCorruptionCost(object oPC, int nAbility, int nCost, int bDrain); + +// This function is used in the spellscripts +// It functions as Evasion for Fortitude and Will partial saves +// This means the "partial" section is ignored +// nSavingThrow takes either SAVING_THROW_WILL or SAVING_THROW_FORT +int GetHasMettle(object oTarget, int nSavingThrow = SAVING_THROW_WILL); + +// Applies all of the effects needed to set a creature incorporeal +// You need to set the creature incorporeal in the feat/spell/effect itself if using nPermanent = TRUE +// nSuperOrEx: 0 is normal, 1 is Supernatural, 2 is Extraordinary +void SetIncorporeal(object oTarget, float fDuration, int nSuperOrEx, int nPermanent = FALSE); + +// Test for incorporeallity of the target +// useful for targetting loops when incorporeal creatures +// wouldnt be affected +int GetIsIncorporeal(object oTarget); + +/** Tests if a creature is living. Should be called on creatures. + * Dead and not-alive creatures return FALSE + * Returns FALSE for non-creature objects. + */ +int PRCGetIsAliveCreature(object oTarget); + +// Gets the total number of HD of controlled undead +// i.e from Animate Dead, Ghoul Gauntlet or similar +// Dominated undead from Turn Undead do not count +int GetControlledUndeadTotalHD(object oPC = OBJECT_SELF); + +// Gets the total number of HD of controlled evil outsiders +// i.e from call dretch, call lemure, or similar +// Dominated outsiders from Turn Undead etc do not count +int GetControlledFiendTotalHD(object oPC = OBJECT_SELF); + +// Gets the total number of HD of controlled good outsiders +// i.e from call favoured servants +// Dominated outsiders from Turn Undead etc do not count +int GetControlledCelestialTotalHD(object oPC = OBJECT_SELF); + +/** + * Multisummon code, to be run before the summoning effect is applied. + * Normally, this will only perform the multisummon trick of setting + * pre-existing summons indestructable if PRC_MULTISUMMON is set. + * + * @param oPC The creature casting the summoning spell + * @param bOverride If this is set, ignores the value of PRC_MULTISUMMON switch + */ +void MultisummonPreSummon(object oPC = OBJECT_SELF, int bOverride = FALSE); + +/** + * Sets up all of the AoE's variables, but only if they aren't already set. + * + * This sets many things that would have been checked against GetAreaOfEffectCreator() + * as local ints making it so the AoE can now function entirely independantly of its caster. + * - The only problem is that this will never be called until the AoE does a heartbeat or + * something. + * + * Since some functions (ie PRCGetLastSpellcastClass() can not work outside of the spell script + * sometimes SetAllAoEInts() was storing incorrect vaules for 'new spellbook' classes. + * I modified the function and moved it to main spell script, so it should work correctly now. - x + * + * @param SpellID Spell ID to store on the AoE. + * @param oAoE AoE object to store the variables on + * @param nBaseSaveDC save DC to store on the AoE + * @param SpecDispel Stored on the AoE (dunno what it's for) + * @param nCasterLevel Caster level to store on the AoE. If default used, gets + * caster level from the AoE creator. + */ +void SetAllAoEInts(int SpellID, object oAoE, int nBaseSaveDC, int SpecDispel = 0 , int nCasterLevel = 0); + +// * Applies the effects of FEAT_AUGMENT_SUMMON to summoned creatures. +void AugmentSummonedCreature(string sResRef); + +// ----------------- +// BEGIN SPELLSWORD +// ----------------- + +//This function returns 1 only if the object oTarget is the object +//the weapon hit when it channeled the spell sSpell or if there is no +//channeling at all +int ChannelChecker(string sSpell, object oTarget); + +//If a spell is being channeled, we store its target and its name +void StoreSpellVariables(string sString,int nDuration); + +//Replacement for The MaximizeOrEmpower function +int PRCMaximizeOrEmpower(int nDice, int nNumberOfDice, int nMeta, int nBonus = 0); + +//This checks if the spell is channeled and if there are multiple spells +//channeled, which one is it. Then it checks in either case if the spell +//has the metamagic feat the function gets and returns TRUE or FALSE accordingly +//int CheckMetaMagic(int nMeta,int nMMagic); +//not needed now there is PRCGetMetaMagicFeat() + +//wrapper for biowares GetMetaMagicFeat() +//used for spellsword and items +// bClearFeatFlags - clear metamagic feat info (sudden meta, divine meta etc.)- set it to FALSE if you're +// going to use PRCGetMetaMagicFeat() more than once for a single spell +// (ie. first in spellhook code, next in spell script) +int PRCGetMetaMagicFeat(object oCaster = OBJECT_SELF, int bClearFeatFlags = TRUE); + +// This function rolls damage and applies metamagic feats to the damage. +// nDamageType - The DAMAGE_TYPE_xxx constant for the damage, or -1 for no +// a non-damaging effect. +// nDice - number of dice to roll. +// nDieSize - size of dice, i.e. d4, d6, d8, etc. +// nBonusPerDie - Amount of bonus damage per die. +// nBonus - Amount of overall bonus damage. +// nMetaMagic - metamagic constant, if -1 GetMetaMagic() is called. +// returns - the damage rolled with metamagic applied. +int PRCGetMetaMagicDamage(int nDamageType, int nDice, int nDieSize, + int nBonusPerDie = 0, int nBonus = 0, int nMetaMagic = -1); + +// Function to save the school of the currently cast spell in a variable. This should be +// called at the beginning of the script to set the spell school (passing the school) and +// once at the end of the script (with no arguments) to delete the variable. +// nSchool - SPELL_SCHOOL_xxx constant to set, if general then the variable is +// deleted. +// moved from spinc_common and renamed +void PRCSetSchool(int nSchool = SPELL_SCHOOL_GENERAL); + +/** + * Signals a spell has been cast. Acts as a wrapper to fire EVENT_SPELL_CAST_AT + * via SignalEvent() + * @param oTarget Target of the spell. + * @param bHostile TRUE if the spell is a hostile act. + * @param nSpellID Spell ID or -1 if PRCGetSpellId() should be used. + * @param oCaster Object doing the casting. + */ +void PRCSignalSpellEvent(object oTarget, int bHostile = TRUE, int nSpellID = -1, object oCaster = OBJECT_SELF); + +//GetFirstObjectInShape wrapper for changing the AOE of the channeled spells (Spellsword Channel Spell) +object MyFirstObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +//GetNextObjectInShape wrapper for changing the AOE of the channeled spells (Spellsword Channel Spell) +object MyNextObjectInShape(int nShape, float fSize, location lTarget, int bLineOfSight=FALSE, int nObjectFilter=OBJECT_TYPE_CREATURE, vector vOrigin=[0.0,0.0,0.0]); + +// * Kovi. removes any effects from this type of spell +// * i.e., used in Mage Armor to remove any previous +// * mage armors +void PRCRemoveEffectsFromSpell(object oTarget, int SpellID); + +// * Get Scaled Effect +effect PRCGetScaledEffect(effect eStandard, object oTarget); + +// * Searchs through a persons effects and removes all those of a specific type. +void PRCRemoveSpecificEffect(int nEffectTypeID, object oTarget); + +// * Returns true if Target is a humanoid +int PRCAmIAHumanoid(object oTarget); + +// * Get Difficulty Duration +int PRCGetScaledDuration(int nActualDuration, object oTarget); + +// * Will pass back a linked effect for all the protection from alignment spells. The power represents the multiplier of strength. +// * That is instead of +3 AC and +2 Saves a power of 2 will yield +6 AC and +4 Saves. +effect PRCCreateProtectionFromAlignmentLink(int nAlignment, int nPower = 1); + +// * Returns the time in seconds that the effect should be delayed before application. +float PRCGetSpellEffectDelay(location SpellTargetLocation, object oTarget); + +// * This is a wrapper for how Petrify will work in Expansion Pack 1 +// * Scripts affected: flesh to stone, breath petrification, gaze petrification, touch petrification +// * nPower : This is the Hit Dice of a Monster using Gaze, Breath or Touch OR it is the Caster Spell of +// * a spellcaster +// * nFortSaveDC: pass in this number from the spell script +void PRCDoPetrification(int nPower, object oSource, object oTarget, int nSpellID, int nFortSaveDC); + +int PRCGetDelayedSpellEffectsExpired(int nSpell_ID, object oTarget, object oCaster); + +int PRCGetSpellUsesLeft(int nRealSpellID, object oCreature = OBJECT_SELF); +// ----------------- +// END SPELLSWORD +// ----------------- + +// Functions mostly only useful within the scope of this include +int BWSavingThrow(int nSavingThrow, object oTarget, int nDC, int nSaveType = SAVING_THROW_TYPE_NONE, object oSaveVersus = OBJECT_SELF, float fDelay = 0.0); + +// This function holds all functions that are supposed to run before the actual +// spellscript gets run. If this functions returns FALSE, the spell is aborted +// and the spellscript will not run +int X2PreSpellCastCode(); + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +// this could also be put into in prc_inc_switches +const string PRC_SAVEDC_OVERRIDE = "PRC_SAVEDC_OVERRIDE"; + +const int TYPE_ARCANE = -1; +const int TYPE_DIVINE = -2; + + +//Changed to use CLASS_TYPE_* instead +//const int TYPE_SORCERER = 2; +//const int TYPE_WIZARD = 3; +//const int TYPE_BARD = 4; +//const int TYPE_CLERIC = 11; +//const int TYPE_DRUID = 12; +//const int TYPE_RANGER = 13; +//const int TYPE_PALADIN = 14; + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +//#include "inc_abil_damage" +//#include "prc_inc_castlvl" +//#include "lookup_2da_spell" + +// ** THIS ORDER IS IMPORTANT ** + +//#include "inc_lookups" // access via prc_inc_core +#include "inc_newspellbook" + +//#include "prc_inc_core" // Compiler won't allow access via inc_newspellbook + +#include "inc_vfx_const" +#include "spinc_necro_cyst" +#include "true_utter_const" +//#include "shd_myst_const" +//#include "prc_spellhook" +#include "prc_inc_sneak" +#include "prcsp_engine" +//#include "prc_inc_descrptr" +#include "inc_item_props" + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int GetPrCAdjustedClassLevel(int nClass, object oCaster = OBJECT_SELF) +{ + int iTemp; + // is it arcane, divine or neither? + if(GetIsArcaneClass(nClass, oCaster) && nClass != CLASS_TYPE_SUBLIME_CHORD) + { + if (GetPrimaryArcaneClass(oCaster) == nClass) // adjust for any PrCs + iTemp = GetArcanePRCLevels(oCaster, nClass); + } + else if(GetIsDivineClass(nClass, oCaster)) + { + if (GetPrimaryDivineClass(oCaster) == nClass) // adjust for any PrCs + iTemp = GetDivinePRCLevels(oCaster, nClass); + } + else // a non-caster class or a PrC + { + return 0; + } + // add the caster class levels + return iTemp += GetLevelByClass(nClass, oCaster); +} + +int GetPrCAdjustedCasterLevel(int nClass, object oCaster = OBJECT_SELF, int bAdjustForPractisedSpellcaster = TRUE) +{ + int iTemp; + iTemp = GetPrCAdjustedClassLevel(nClass, oCaster); + iTemp = iTemp / GetCasterLevelModifier(nClass); + if (bAdjustForPractisedSpellcaster) + iTemp += PracticedSpellcasting(oCaster, nClass, iTemp); + return iTemp; +} + +int GetPrCAdjustedCasterLevelByType(int nClassType, object oCaster = OBJECT_SELF, int bAdjustForPractisedSpellcaster = TRUE) +{ + int nClassLvl; + int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8; + int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl; + + nClass1 = GetClassByPosition(1, oCaster); + nClass2 = GetClassByPosition(2, oCaster); + nClass3 = GetClassByPosition(3, oCaster); + nClass4 = GetClassByPosition(4, oCaster); + nClass5 = GetClassByPosition(5, oCaster); + nClass6 = GetClassByPosition(6, oCaster); + nClass7 = GetClassByPosition(7, oCaster); + nClass8 = GetClassByPosition(8, oCaster); + + if(nClassType == TYPE_ARCANE && (GetFirstArcaneClassPosition(oCaster) > 0)) + { + if (GetIsArcaneClass(nClass1, oCaster)) nClass1Lvl = GetPrCAdjustedCasterLevel(nClass1, oCaster, bAdjustForPractisedSpellcaster); + if (GetIsArcaneClass(nClass2, oCaster)) nClass2Lvl = GetPrCAdjustedCasterLevel(nClass2, oCaster, bAdjustForPractisedSpellcaster); + if (GetIsArcaneClass(nClass3, oCaster)) nClass3Lvl = GetPrCAdjustedCasterLevel(nClass3, oCaster, bAdjustForPractisedSpellcaster); + if (GetIsArcaneClass(nClass4, oCaster)) nClass4Lvl = GetPrCAdjustedCasterLevel(nClass4, oCaster, bAdjustForPractisedSpellcaster); + if (GetIsArcaneClass(nClass5, oCaster)) nClass5Lvl = GetPrCAdjustedCasterLevel(nClass5, oCaster, bAdjustForPractisedSpellcaster); + if (GetIsArcaneClass(nClass6, oCaster)) nClass6Lvl = GetPrCAdjustedCasterLevel(nClass6, oCaster, bAdjustForPractisedSpellcaster); + if (GetIsArcaneClass(nClass7, oCaster)) nClass7Lvl = GetPrCAdjustedCasterLevel(nClass7, oCaster, bAdjustForPractisedSpellcaster); + if (GetIsArcaneClass(nClass8, oCaster)) nClass8Lvl = GetPrCAdjustedCasterLevel(nClass8, oCaster, bAdjustForPractisedSpellcaster); + } + else if (nClassType == TYPE_DIVINE && (GetFirstDivineClassPosition(oCaster) > 0)) + { + if (GetIsDivineClass(nClass1, oCaster)) nClass1Lvl = GetPrCAdjustedCasterLevel(nClass1, oCaster, bAdjustForPractisedSpellcaster); + if (GetIsDivineClass(nClass2, oCaster)) nClass2Lvl = GetPrCAdjustedCasterLevel(nClass2, oCaster, bAdjustForPractisedSpellcaster); + if (GetIsDivineClass(nClass3, oCaster)) nClass3Lvl = GetPrCAdjustedCasterLevel(nClass3, oCaster, bAdjustForPractisedSpellcaster); + if (GetIsDivineClass(nClass4, oCaster)) nClass4Lvl = GetPrCAdjustedCasterLevel(nClass4, oCaster, bAdjustForPractisedSpellcaster); + if (GetIsDivineClass(nClass5, oCaster)) nClass5Lvl = GetPrCAdjustedCasterLevel(nClass5, oCaster, bAdjustForPractisedSpellcaster); + if (GetIsDivineClass(nClass6, oCaster)) nClass6Lvl = GetPrCAdjustedCasterLevel(nClass6, oCaster, bAdjustForPractisedSpellcaster); + if (GetIsDivineClass(nClass7, oCaster)) nClass7Lvl = GetPrCAdjustedCasterLevel(nClass7, oCaster, bAdjustForPractisedSpellcaster); + if (GetIsDivineClass(nClass8, oCaster)) nClass8Lvl = GetPrCAdjustedCasterLevel(nClass8, oCaster, bAdjustForPractisedSpellcaster); + } + int nHighest = nClass1Lvl; + if (nClass2Lvl > nHighest) nHighest = nClass2Lvl; + if (nClass3Lvl > nHighest) nHighest = nClass3Lvl; + if (nClass4Lvl > nHighest) nHighest = nClass4Lvl; + if (nClass5Lvl > nHighest) nHighest = nClass5Lvl; + if (nClass6Lvl > nHighest) nHighest = nClass6Lvl; + if (nClass7Lvl > nHighest) nHighest = nClass7Lvl; + if (nClass8Lvl > nHighest) nHighest = nClass8Lvl; + return nHighest; +} + +int GetLevelByTypeArcaneFeats(object oCaster = OBJECT_SELF, int iSpellID = -1) +{ + int iFirstArcane = GetPrimaryArcaneClass(oCaster); + int iBest = 0; + int iClass1 = GetClassByPosition(1, oCaster); + int iClass2 = GetClassByPosition(2, oCaster); + int iClass3 = GetClassByPosition(3, oCaster); + int iClass4 = GetClassByPosition(4, oCaster); + int iClass5 = GetClassByPosition(5, oCaster); + int iClass6 = GetClassByPosition(6, oCaster); + int iClass7 = GetClassByPosition(7, oCaster); + int iClass8 = GetClassByPosition(8, oCaster); + + int iClass1Lev = GetLevelByPosition(1, oCaster); + int iClass2Lev = GetLevelByPosition(2, oCaster); + int iClass3Lev = GetLevelByPosition(3, oCaster); + int iClass4Lev = GetLevelByPosition(4, oCaster); + int iClass5Lev = GetLevelByPosition(5, oCaster); + int iClass6Lev = GetLevelByPosition(6, oCaster); + int iClass7Lev = GetLevelByPosition(7, oCaster); + int iClass8Lev = GetLevelByPosition(8, oCaster); + + if (iSpellID = -1) iSpellID = PRCGetSpellId(oCaster); + + int iBoost = ShadowWeave(oCaster, iSpellID) + + FireAdept(oCaster, iSpellID) + + DomainPower(oCaster, iSpellID) + + StormMagic(oCaster) + + CormanthyranMoonMagic(oCaster) + + DraconicPower(oCaster); + + if (iClass1 == CLASS_TYPE_HEXBLADE) iClass1Lev = (iClass1Lev >= 4) ? (iClass1Lev / 2) : 0; + if (iClass2 == CLASS_TYPE_HEXBLADE) iClass2Lev = (iClass2Lev >= 4) ? (iClass2Lev / 2) : 0; + if (iClass3 == CLASS_TYPE_HEXBLADE) iClass3Lev = (iClass3Lev >= 4) ? (iClass3Lev / 2) : 0; + if (iClass4 == CLASS_TYPE_HEXBLADE) iClass4Lev = (iClass4Lev >= 4) ? (iClass4Lev / 2) : 0; + if (iClass5 == CLASS_TYPE_HEXBLADE) iClass5Lev = (iClass5Lev >= 4) ? (iClass5Lev / 2) : 0; + if (iClass6 == CLASS_TYPE_HEXBLADE) iClass6Lev = (iClass6Lev >= 4) ? (iClass6Lev / 2) : 0; + if (iClass7 == CLASS_TYPE_HEXBLADE) iClass7Lev = (iClass7Lev >= 4) ? (iClass7Lev / 2) : 0; + if (iClass8 == CLASS_TYPE_HEXBLADE) iClass8Lev = (iClass8Lev >= 4) ? (iClass8Lev / 2) : 0; + + if (iClass1 == iFirstArcane) iClass1Lev += GetArcanePRCLevels(oCaster, iClass1); + if (iClass2 == iFirstArcane) iClass2Lev += GetArcanePRCLevels(oCaster, iClass2); + if (iClass3 == iFirstArcane) iClass3Lev += GetArcanePRCLevels(oCaster, iClass3); + if (iClass4 == iFirstArcane) iClass4Lev += GetArcanePRCLevels(oCaster, iClass4); + if (iClass5 == iFirstArcane) iClass5Lev += GetArcanePRCLevels(oCaster, iClass5); + if (iClass6 == iFirstArcane) iClass6Lev += GetArcanePRCLevels(oCaster, iClass6); + if (iClass7 == iFirstArcane) iClass7Lev += GetArcanePRCLevels(oCaster, iClass7); + if (iClass8 == iFirstArcane) iClass8Lev += GetArcanePRCLevels(oCaster, iClass8); + + iClass1Lev += iBoost; + iClass2Lev += iBoost; + iClass3Lev += iBoost; + iClass4Lev += iBoost; + iClass5Lev += iBoost; + iClass6Lev += iBoost; + iClass7Lev += iBoost; + iClass8Lev += iBoost; + + iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev); + iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev); + iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev); + iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass4Lev); + iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass5Lev); + iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass6Lev); + iClass7Lev += PracticedSpellcasting(oCaster, iClass7, iClass7Lev); + iClass8Lev += PracticedSpellcasting(oCaster, iClass8, iClass8Lev); + + if (!GetIsArcaneClass(iClass1, oCaster)) iClass1Lev = 0; + if (!GetIsArcaneClass(iClass2, oCaster)) iClass2Lev = 0; + if (!GetIsArcaneClass(iClass3, oCaster)) iClass3Lev = 0; + if (!GetIsArcaneClass(iClass4, oCaster)) iClass4Lev = 0; + if (!GetIsArcaneClass(iClass5, oCaster)) iClass5Lev = 0; + if (!GetIsArcaneClass(iClass6, oCaster)) iClass6Lev = 0; + if (!GetIsArcaneClass(iClass7, oCaster)) iClass7Lev = 0; + if (!GetIsArcaneClass(iClass8, oCaster)) iClass8Lev = 0; + + if (iClass1Lev > iBest) iBest = iClass1Lev; + if (iClass2Lev > iBest) iBest = iClass2Lev; + if (iClass3Lev > iBest) iBest = iClass3Lev; + if (iClass4Lev > iBest) iBest = iClass4Lev; + if (iClass5Lev > iBest) iBest = iClass5Lev; + if (iClass6Lev > iBest) iBest = iClass6Lev; + if (iClass7Lev > iBest) iBest = iClass7Lev; + if (iClass8Lev > iBest) iBest = iClass8Lev; + + return iBest; +} + +int GetLevelByTypeDivineFeats(object oCaster = OBJECT_SELF, int iSpellID = -1) +{ + int iFirstDivine = GetPrimaryDivineClass(oCaster); + int iBest = 0; + int iClass1 = GetClassByPosition(1, oCaster); + int iClass2 = GetClassByPosition(2, oCaster); + int iClass3 = GetClassByPosition(3, oCaster); + int iClass4 = GetClassByPosition(4, oCaster); + int iClass5 = GetClassByPosition(5, oCaster); + int iClass6 = GetClassByPosition(6, oCaster); + int iClass7 = GetClassByPosition(7, oCaster); + int iClass8 = GetClassByPosition(8, oCaster); + + int iClass1Lev = GetLevelByPosition(1, oCaster); + int iClass2Lev = GetLevelByPosition(2, oCaster); + int iClass3Lev = GetLevelByPosition(3, oCaster); + int iClass4Lev = GetLevelByPosition(4, oCaster); + int iClass5Lev = GetLevelByPosition(5, oCaster); + int iClass6Lev = GetLevelByPosition(6, oCaster); + int iClass7Lev = GetLevelByPosition(7, oCaster); + int iClass8Lev = GetLevelByPosition(8, oCaster); + + if (iSpellID = -1) iSpellID = PRCGetSpellId(oCaster); + + int iBoost = ShadowWeave(oCaster, iSpellID) + + FireAdept(oCaster, iSpellID) + + DomainPower(oCaster, iSpellID) + + CormanthyranMoonMagic(oCaster) + + StormMagic(oCaster); + + if (iClass1 == CLASS_TYPE_PALADIN + || iClass1 == CLASS_TYPE_RANGER + || iClass1 == CLASS_TYPE_ANTI_PALADIN) + iClass1Lev = iClass1Lev / 2; + if (iClass2 == CLASS_TYPE_PALADIN + || iClass2 == CLASS_TYPE_RANGER + || iClass2 == CLASS_TYPE_ANTI_PALADIN) + iClass2Lev = iClass2Lev / 2; + if (iClass3 == CLASS_TYPE_PALADIN + || iClass3 == CLASS_TYPE_RANGER + || iClass3 == CLASS_TYPE_ANTI_PALADIN) + iClass3Lev = iClass3Lev / 2; + if (iClass4 == CLASS_TYPE_PALADIN + || iClass4 == CLASS_TYPE_RANGER + || iClass4 == CLASS_TYPE_ANTI_PALADIN) + iClass4Lev = iClass4Lev / 2; + if (iClass5 == CLASS_TYPE_PALADIN + || iClass5 == CLASS_TYPE_RANGER + || iClass5 == CLASS_TYPE_ANTI_PALADIN) + iClass5Lev = iClass5Lev / 2; + if (iClass6 == CLASS_TYPE_PALADIN + || iClass6 == CLASS_TYPE_RANGER + || iClass6 == CLASS_TYPE_ANTI_PALADIN) + iClass6Lev = iClass6Lev / 2; + if (iClass7 == CLASS_TYPE_PALADIN + || iClass7 == CLASS_TYPE_RANGER + || iClass7 == CLASS_TYPE_ANTI_PALADIN) + iClass7Lev = iClass7Lev / 2; + if (iClass8 == CLASS_TYPE_PALADIN + || iClass8 == CLASS_TYPE_RANGER + || iClass8 == CLASS_TYPE_ANTI_PALADIN) + iClass8Lev = iClass7Lev / 2; + + if (iClass1 == iFirstDivine) iClass1Lev += GetDivinePRCLevels(oCaster, iClass1); + if (iClass2 == iFirstDivine) iClass2Lev += GetDivinePRCLevels(oCaster, iClass2); + if (iClass3 == iFirstDivine) iClass3Lev += GetDivinePRCLevels(oCaster, iClass3); + if (iClass4 == iFirstDivine) iClass4Lev += GetDivinePRCLevels(oCaster, iClass4); + if (iClass5 == iFirstDivine) iClass5Lev += GetDivinePRCLevels(oCaster, iClass5); + if (iClass6 == iFirstDivine) iClass6Lev += GetDivinePRCLevels(oCaster, iClass6); + if (iClass7 == iFirstDivine) iClass7Lev += GetDivinePRCLevels(oCaster, iClass7); + if (iClass8 == iFirstDivine) iClass8Lev += GetDivinePRCLevels(oCaster, iClass8); + + iClass1Lev += iBoost; + iClass2Lev += iBoost; + iClass3Lev += iBoost; + iClass4Lev += iBoost; + iClass5Lev += iBoost; + iClass6Lev += iBoost; + iClass7Lev += iBoost; + iClass8Lev += iBoost; + + iClass1Lev += PracticedSpellcasting(oCaster, iClass1, iClass1Lev); + iClass2Lev += PracticedSpellcasting(oCaster, iClass2, iClass2Lev); + iClass3Lev += PracticedSpellcasting(oCaster, iClass3, iClass3Lev); + iClass4Lev += PracticedSpellcasting(oCaster, iClass4, iClass4Lev); + iClass5Lev += PracticedSpellcasting(oCaster, iClass5, iClass5Lev); + iClass6Lev += PracticedSpellcasting(oCaster, iClass6, iClass6Lev); + iClass7Lev += PracticedSpellcasting(oCaster, iClass7, iClass7Lev); + iClass8Lev += PracticedSpellcasting(oCaster, iClass8, iClass8Lev); + + if (!GetIsDivineClass(iClass1, oCaster)) iClass1Lev = 0; + if (!GetIsDivineClass(iClass2, oCaster)) iClass2Lev = 0; + if (!GetIsDivineClass(iClass3, oCaster)) iClass3Lev = 0; + if (!GetIsDivineClass(iClass4, oCaster)) iClass4Lev = 0; + if (!GetIsDivineClass(iClass5, oCaster)) iClass5Lev = 0; + if (!GetIsDivineClass(iClass6, oCaster)) iClass6Lev = 0; + if (!GetIsDivineClass(iClass7, oCaster)) iClass7Lev = 0; + if (!GetIsDivineClass(iClass8, oCaster)) iClass8Lev = 0; + + if (iClass1Lev > iBest) iBest = iClass1Lev; + if (iClass2Lev > iBest) iBest = iClass2Lev; + if (iClass3Lev > iBest) iBest = iClass3Lev; + if (iClass4Lev > iBest) iBest = iClass4Lev; + if (iClass5Lev > iBest) iBest = iClass5Lev; + if (iClass6Lev > iBest) iBest = iClass6Lev; + if (iClass7Lev > iBest) iBest = iClass7Lev; + if (iClass8Lev > iBest) iBest = iClass8Lev; + + return iBest; +} + +// looks up the spell level for the arcane caster classes (Wiz_Sorc, Bard) in spells.2da. +// Caveat: some onhitcast spells don't have any spell-levels listed for any class +int GetIsArcaneSpell (int iSpellId) +{ + return Get2DACache("spells", "Wiz_Sorc", iSpellId) != "" + || Get2DACache("spells", "Bard", iSpellId) != ""; +} + +// looks up the spell level for the divine caster classes (Cleric, Druid, Ranger, Paladin) in spells.2da. +// Caveat: some onhitcast spells don't have any spell-levels listed for any class +int GetIsDivineSpell (int iSpellId) +{ + return Get2DACache("spells", "Cleric", iSpellId) != "" + || Get2DACache("spells", "Druid", iSpellId) != "" + || Get2DACache("spells", "Ranger", iSpellId) != "" + || Get2DACache("spells", "Paladin", iSpellId) != ""; +} + +int BWSavingThrow(int nSavingThrow, object oTarget, int nDC, int nSaveType = SAVING_THROW_TYPE_NONE, object oSaveVersus = OBJECT_SELF, float fDelay = 0.0) +{ + // GZ: sanity checks to prevent wrapping around + if (nDC < 1) nDC = 1; + else if (nDC > 255) nDC = 255; + + int bValid = 0; + int nEff; + + //some maneuvers allow people to use skill check instead of a save + if(nSavingThrow == SAVING_THROW_FORT) + { + bValid = GetLocalInt(oTarget, "MindOverBody") ? + GetIsSkillSuccessful(oTarget, SKILL_CONCENTRATION, nDC) : + FortitudeSave(oTarget, nDC, nSaveType, oSaveVersus); + if(bValid == 1) nEff = VFX_IMP_FORTITUDE_SAVING_THROW_USE; + } + else if(nSavingThrow == SAVING_THROW_REFLEX) + { + bValid = GetLocalInt(oTarget, "ActionBeforeThought") ? + GetIsSkillSuccessful(oTarget, SKILL_CONCENTRATION, nDC) : + ReflexSave(oTarget, nDC, nSaveType, oSaveVersus); + if(bValid == 1) nEff = VFX_IMP_REFLEX_SAVE_THROW_USE; + } + else if(nSavingThrow == SAVING_THROW_WILL) + { + bValid = GetLocalInt(oTarget, "MomentOfPerfectMind") ? + GetIsSkillSuccessful(oTarget, SKILL_CONCENTRATION, nDC) : + WillSave(oTarget, nDC, nSaveType, oSaveVersus); + if(bValid == 1) nEff = VFX_IMP_WILL_SAVING_THROW_USE; + } + + /* + return 0 = FAILED SAVE + return 1 = SAVE SUCCESSFUL + return 2 = IMMUNE TO WHAT WAS BEING SAVED AGAINST + */ + if(bValid == 0) + { + int nSpellID = PRCGetSpellId(oSaveVersus); + if(nSaveType == SAVING_THROW_TYPE_DEATH + || nSpellID == SPELL_WEIRD + || nSpellID == SPELL_FINGER_OF_DEATH) + //&& nSpellID != SPELL_HORRID_WILTING) + { + if(fDelay > 0.0f) DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oTarget)); + else ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oTarget); + } + } + else //if(bValid == 1 || bValid == 2) + { + if(bValid == 2) nEff = VFX_IMP_MAGIC_RESISTANCE_USE; + + if(fDelay > 0.0f) DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(nEff), oTarget)); + else ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(nEff), oTarget); + } + return bValid; +} + +void PRCBonusDamage(object oTarget, object oCaster = OBJECT_SELF) +{ + // Does nothing, left here so files don't need to be edited. +} + +// Bonus damage to a spell for Spell Betrayal Ability +int SpellBetrayalDamage(object oTarget, object oCaster) +{ + int iDam = 0; + + // Combine caster and spell ID into a unique key + int nSpellId = PRCGetSpellId(); + string sFlag = "BETRAYAL_" + ObjectToString(oCaster) + "_" + IntToString(nSpellId); + + // Only apply once per spell cast from this caster + if (GetLocalInt(oTarget, sFlag)) + return 0; + + int ThrallLevel = GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + + GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_D, oCaster); + + if (ThrallLevel >= 2) + { + if (GetIsDeniedDexBonusToAC(oTarget, oCaster, TRUE)) + { + ThrallLevel /= 2; + iDam = d6(ThrallLevel); + + // Mark target as affected for this spell instance by this caster + SetLocalInt(oTarget, sFlag, TRUE); + DelayCommand(2.5, DeleteLocalInt(oTarget, sFlag)); + } + } + + return iDam; +} + + +/* int SpellBetrayalDamage(object oTarget, object oCaster) +{ + int iDam = 0; + int ThrallLevel = GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_D, oCaster); + + if(ThrallLevel >= 2) + { + if( GetIsDeniedDexBonusToAC(oTarget, oCaster, TRUE) ) + { + ThrallLevel /= 2; + iDam = d6(ThrallLevel); + } + } + + return iDam; +} */ + +// Bonus damage to a spell for Spellstrike Ability +int SpellStrikeDamage(object oTarget, object oCaster) +{ + int iDam = 0; + int ThrallLevel = GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_D, oCaster); + + // Combine caster and spell ID into a unique key + int nSpellId = PRCGetSpellId(); + string sFlag = "SPELL_STRIKE_" + ObjectToString(oCaster) + "_" + IntToString(nSpellId); + + if(ThrallLevel >= 6) + { + if( GetIsAOEFlanked(oTarget, oCaster) ) + { + ThrallLevel /= 4; + iDam = d6(ThrallLevel); + // Mark target as affected for this spell instance by this caster + SetLocalInt(oTarget, sFlag, TRUE); + DelayCommand(2.5, DeleteLocalInt(oTarget, sFlag)); + } + } + + return iDam; +} + +// Adds the bonus damage from both Spell Betrayal and Spellstrike together +int ApplySpellBetrayalStrikeDamage(object oTarget, object oCaster, int bShowTextString = TRUE) +{ + int iDam = 0; + int iBetrayalDam = SpellBetrayalDamage(oTarget, oCaster); + int iStrikeDam = SpellStrikeDamage(oTarget, oCaster); + string sMes = ""; + + if(iStrikeDam > 0 && iBetrayalDam > 0) sMes ="*Spellstrike Betrayal Sucess*"; + else if(iBetrayalDam > 0) sMes ="*Spell Betrayal Sucess*"; + else if(iStrikeDam > 0) sMes ="*Spellstrike Sucess*"; + + if(bShowTextString) FloatingTextStringOnCreature(sMes, oCaster, TRUE); + + iDam = iBetrayalDam + iStrikeDam; + + // debug code + //sMes = "Spell Betrayal / Spellstrike Bonus Damage: " + IntToString(iBetrayalDam) + " + " + IntToString(iStrikeDam) + " = " + IntToString(iDam); + //DelayCommand( 1.0, FloatingTextStringOnCreature(sMes, oCaster, TRUE) ); + + return iDam; +} + +int SpellDamagePerDice(object oCaster, int nDice) +{ + // Arcane only + if (!GetIsArcaneClass(PRCGetLastSpellCastClass(oCaster))) + return 0; + + int nDam = 0; + nDam += GetLocalInt(oCaster, "StrengthFromMagic") * nDice * 2; + + if (GetLocalInt(oCaster, "WarsoulTyrant")) + nDam += nDice * GetHitDice(oCaster); + + if (DEBUG) DoDebug("SpellDamagePerDice returning "+IntToString(nDam)+" for "+GetName(oCaster)); + + return nDam; +} + +int PRCMySavingThrow(int nSavingThrow, object oTarget, int nDC, int nSaveType = SAVING_THROW_TYPE_NONE, object oSaveVersus = OBJECT_SELF, float fDelay = 0.0, int bImmunityCheck = FALSE) +{ + int nSpell = PRCGetSpellId(oSaveVersus); + int nSpellSchool = GetSpellSchool(nSpell); + + //If bImmunityCheck == FALSE: returns 0 if failure or immune, 1 if success - same as MySavingThrow + //If bImmunityCheck == TRUE: returns 0 if failure, 1 if success, 2 if immune + + // Enigma Helm Crown Bind + if (GetIsMeldBound(oTarget, MELD_ENIGMA_HELM) == CHAKRA_CROWN && GetIsOfSubschool(nSpell, SUBSCHOOL_CHARM)) + return 2; + + // Planar Ward + if (GetHasSpellEffect(MELD_PLANAR_WARD, oTarget) && (GetIsOfSubschool(nSpell, SUBSCHOOL_CHARM) || GetIsOfSubschool(nSpell, SUBSCHOOL_COMPULSION))) + return 2; + + // Chucoclops influence makes you autofail fear saves + if (GetHasSpellEffect(VESTIGE_CHUPOCLOPS, oTarget) && !GetLocalInt(oTarget, "PactQuality"+IntToString(VESTIGE_CHUPOCLOPS)) && nSaveType == SAVING_THROW_TYPE_FEAR) + return 1; + + // Iron Mind's Mind Over Body, allows them to treat other saves as will saves up to 3/day. + // No point in having it trigger when its a will save. + if(nSavingThrow != SAVING_THROW_WILL && GetLocalInt(oTarget, "IronMind_MindOverBody")) + { + nSavingThrow = SAVING_THROW_WILL; + DeleteLocalInt(oTarget, "IronMind_MindOverBody"); + } + + // Handle the target having Force of Will and being targeted by a psionic power + if(nSavingThrow != SAVING_THROW_WILL && + ((nSpell > 14000 && nSpell < 14360) || + (nSpell > 15350 && nSpell < 15470) + ) && + GetHasFeat(FEAT_FORCE_OF_WILL, oTarget) && + !GetLocalInt(oTarget, "ForceOfWillUsed") && + // Only use will save if it's better + ((nSavingThrow == SAVING_THROW_FORT ? GetFortitudeSavingThrow(oTarget) : GetReflexSavingThrow(oTarget)) > GetWillSavingThrow(oTarget)) + ) + { + nSavingThrow = SAVING_THROW_WILL; + SetLocalInt(oTarget, "ForceOfWillUsed", TRUE); + DelayCommand(6.0f, DeleteLocalInt(oTarget, "ForceOfWillUsed")); + // "Force of Will used for this round." + FloatingTextStrRefOnCreature(16826670, oTarget, FALSE); + } + + //TouchOfDistraction + if (GetLocalInt(oTarget, "HasTouchOfDistraction") && (nSavingThrow = SAVING_THROW_REFLEX)) + { + nDC += 2; + DeleteLocalInt(oTarget, "HasTouchOfDistraction"); + } + + //Diamond Defense + if(GetLocalInt(oTarget, "PRC_TOB_DIAMOND_DEFENSE")) + nDC -= GetLocalInt(oTarget, "PRC_TOB_DIAMOND_DEFENSE"); + + // Master of Nine + if(GetLevelByClass(CLASS_TYPE_MASTER_OF_NINE, oSaveVersus) > 2) + { + int nLastClass = GetLocalInt(oSaveVersus, "PRC_CurrentManeuver_InitiatingClass") - 1; + if(nLastClass == CLASS_TYPE_WARBLADE + || nLastClass == CLASS_TYPE_SWORDSAGE + || nLastClass == CLASS_TYPE_CRUSADER) + { + // Increases maneuver DCs by 1 + nDC += 1; + } + } + + // Incarnum Resistance + if(GetHasFeat(FEAT_INCARNUM_RESISTANCE, oTarget) && nSpell > 18900 && nSpell < 18969) + nDC -= 2; + + // This is done here because it is possible to tell the saving throw type here + // it works by lowering the DC rather than adding to the save + // same net effect but slightly different numbers + if(nSaveType == SAVING_THROW_TYPE_MIND_SPELLS) + { + //Thayan Knights auto-fail mind spells cast by red wizards + if(GetLevelByClass(CLASS_TYPE_RED_WIZARD, oSaveVersus) + && GetLevelByClass(CLASS_TYPE_THAYAN_KNIGHT, oTarget)) + return 0; + // Tyranny Domain increases the DC of mind spells by +2. + if(GetHasFeat(FEAT_DOMAIN_POWER_TYRANNY, oSaveVersus)) + nDC += 2; + // +2 bonus on saves against mind affecting, done here + if(GetLevelByClass(CLASS_TYPE_FIST_DAL_QUOR, oTarget) > 1) + nDC -= 2; + // Scorpion's Resolve gives a +4 bonus on mind affecting saves + if(GetHasFeat(FEAT_SCORPIONS_RESOLVE, oTarget)) + nDC -= 4; + // Warped Mind gives a bonus on mind affecting equal to half aberrant + if(GetHasFeat(FEAT_ABERRANT_WARPED_MIND, oTarget)) + nDC -= GetAberrantFeatCount(oTarget)/2; + } + else if(nSaveType == SAVING_THROW_TYPE_FEAR) + { + // Unnatural Will adds Charisma to saves against fear + if(GetHasFeat(FEAT_UNNATURAL_WILL, oTarget)) + nDC -= GetAbilityModifier(ABILITY_CHARISMA, oTarget); + // Krinth have +4 saves against Fear + if(GetRacialType(oTarget) == RACIAL_TYPE_KRINTH) + nDC -= 4; + // Turlemoi/Lashemoi have -4 saves against Fear + if(GetRacialType(oTarget) == RACIAL_TYPE_LASHEMOI || GetRacialType(oTarget) == RACIAL_TYPE_TURLEMOI || GetLocalInt(oTarget, "SpeedFromPain") >= 3) + nDC += 4; + } + else if(nSaveType == SAVING_THROW_TYPE_NEGATIVE) + { + // +4 bonus on saves against negative energy, done here + if(GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oTarget) > 8) + nDC -= 4; + // Jergal's Pact gives a +2 bonus on negative energy saves + if(GetHasFeat(FEAT_JERGALS_PACT, oTarget)) + nDC -= 2; + } + else if(nSaveType == SAVING_THROW_TYPE_DISEASE) + { + // Plague Resistant gives a +4 bonus on disease saves + if(GetHasFeat(FEAT_PLAGUE_RESISTANT, oTarget)) + nDC -= 4; + // +4/+2 bonus on saves against disease, done here + if(GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oTarget) > 13) + nDC -= 4; + else if(GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oTarget) > 3) + nDC -= 2; + } + else if(nSaveType == SAVING_THROW_TYPE_POISON) + { + // +4/+2 bonus on saves against poison, done here + if(GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oTarget) > 13) + nDC -= 4; + else if(GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oTarget) > 3) + nDC -= 2; + if(GetHasFeat(FEAT_POISON_4, oTarget)) + nDC -= 4; + if(GetHasFeat(FEAT_POISON_3, oTarget)) + nDC -= 3; + if(GetRacialType(oTarget) == RACIAL_TYPE_EXTAMINAAR && nSavingThrow == SAVING_THROW_FORT) + nDC -= 2; + if(GetRacialType(oTarget) == RACIAL_TYPE_MONGRELFOLK) + nDC -= 1; + } + else if(nSaveType == SAVING_THROW_TYPE_FIRE) + { + // Bloodline of Fire gives a +4 bonus on fire saves + if(GetHasFeat(FEAT_BLOODLINE_OF_FIRE, oTarget)) + nDC -= 4; + if(GetHasFeat(FEAT_HARD_FIRE, oTarget)) + nDC -= 1 + (GetHitDice(oTarget) / 5); + // +2 vs fire for Halfgiant + if(GetHasFeat(FEAT_ACCLIMATED_FIRE, oTarget)) + nDC -= 2; + // +2 vs fire for Heat Endurance feat + if(GetHasFeat(FEAT_HEAT_ENDURANCE, oTarget)) + nDC -= 2; + } + else if(nSaveType == SAVING_THROW_TYPE_COLD) + { + if(GetHasFeat(FEAT_HARD_WATER, oTarget)) + nDC -= 1 + (GetHitDice(oTarget) / 5); + // +2 vs cold for Cold Endurance feat + if(GetHasFeat(FEAT_COLD_ENDURANCE, oTarget)) + nDC -= 2; + // +2 vs cold for Winterhide Shifter trait + if(GetHasFeat(FEAT_SHIFTER_WINTERHIDE, oTarget)) + nDC -= 2; + } + else if(nSaveType == SAVING_THROW_TYPE_ELECTRICITY) + { + if(GetHasFeat(FEAT_HARD_AIR, oTarget)) + nDC -= 1 + (GetHitDice(oTarget) / 5); + else if(GetHasFeat(FEAT_HARD_ELEC, oTarget)) + nDC -= 2; + } + else if(nSaveType == SAVING_THROW_TYPE_SONIC) + { + if(GetHasFeat(FEAT_HARD_AIR, oTarget)) + nDC -= 1 + (GetHitDice(oTarget) / 5); + } + else if(nSaveType == SAVING_THROW_TYPE_ACID) + { + if(GetHasFeat(FEAT_HARD_EARTH, oTarget)) + nDC -= 1 + (GetHitDice(oTarget) / 5); + } + + // This is done here because it is possible to tell the spell school here + // it works by lowering the DC rather than adding to the save + // same net effect but slightly different numbers + if(nSpellSchool == SPELL_SCHOOL_TRANSMUTATION) + { + // Full Moon's Trick - +2 vs Transmutation spels + if(GetLocalInt(oTarget, "FullMoon_Trans")) + nDC -= 2; + if(GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oTarget) >= 2) + nDC -= 4; + } + + // Sapphire Heirarch gets +4 against Chaos and Transmutation effects + if(GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oTarget) >= 2 && GetHasDescriptor(nSpell, DESCRIPTOR_CHAOTIC)) + nDC -= 4; + + // Charming Veil Brow bind grants Essentia bonus on saves against charm and compulsion + if(GetIsOfSubschool(nSpell, SUBSCHOOL_CHARM) || GetIsOfSubschool(nSpell, SUBSCHOOL_COMPULSION)) + { + if (GetIsMeldBound(oTarget, MELD_CHARMING_VEIL) == CHAKRA_BROW) + nDC -= GetEssentiaInvested(oTarget, MELD_CHARMING_VEIL); + } + + // Krinth get +1 save against Shadow spells + if (GetIsOfSubschool(nSpell, SUBSCHOOL_SHADOW) && GetRacialType(oTarget) == RACIAL_TYPE_KRINTH) + nDC -= 1; + + //Psionic race save boosts - +1 vs all spells for Xeph + if(GetHasFeat(FEAT_XEPH_SPELLHARD, oTarget)) + nDC -= 1; + + // Apostate - 1/2 HD bonus to resist divine spells + if(GetHasFeat(FEAT_APOSTATE, oTarget)) + { + //if divine + if(GetIsDivineClass(PRCGetLastSpellCastClass(oSaveVersus))) + nDC -= GetHitDice(oTarget) / 2; + } + + // Hammer of Witches - +1 bonus against Arcane spells + if(GetIsObjectValid(GetItemPossessedBy(oTarget, "WOL_HammerWitches"))) + { + if(GetIsArcaneClass(PRCGetLastSpellCastClass(oSaveVersus))) + nDC -= 1; + } + + // Cultist of the Shattered Peak - +1 bonus against Arcane spells + if(GetLevelByClass(CLASS_TYPE_CULTIST_SHATTERED_PEAK, oTarget)) + { + if(GetIsArcaneClass(PRCGetLastSpellCastClass(oSaveVersus))) + nDC -= 1; + } + + //Insightful Divination + if(GetLocalInt(oTarget, "Insightful Divination")) + { + nDC -= GetLocalInt(oTarget, "Insightful Divination"); + DeleteLocalInt(oTarget, "Insightful Divination"); + } + + // Phierans Resolve - +4 bonus vs spells with evil descriptor + if(GetHasSpellEffect(SPELL_PHIERANS_RESOLVE, oTarget) && GetHasDescriptor(nSpell, DESCRIPTOR_EVIL)) + nDC -= 4; + + //spell school modificators + int nSchool = GetLocalInt(oSaveVersus, "X2_L_LAST_SPELLSCHOOL_VAR"); + if(nSchool == SPELL_SCHOOL_NECROMANCY) + { + // Necrotic Cyst penalty on Necromancy spells + if(GetPersistantLocalInt(oTarget, NECROTIC_CYST_MARKER)) + nDC += 2; + } + else if(nSchool == SPELL_SCHOOL_ILLUSION) + { + // Piercing Sight gives a +4 bonus on illusion saves + if(GetHasFeat(FEAT_PIERCING_SIGHT, oTarget)) + nDC -= 4; + // Adds +2 to Illusion DCs + if(GetLocalInt(oSaveVersus, "ShadowTrickster")) + nDC += 2; + // Illusion Veil Meld + if(GetHasSpellEffect(MELD_ILLUSION_VEIL, oSaveVersus)) + nDC += 1; + // Illusion Veil Meld + if(GetHasSpellEffect(MELD_ILLUSION_VEIL, oTarget)) + nDC -= GetEssentiaInvested(oTarget, MELD_ILLUSION_VEIL); + if(GetRacialType(oTarget) == RACIAL_TYPE_MONGRELFOLK) + nDC -= 1; + } + else if(nSchool == SPELL_SCHOOL_ENCHANTMENT) + { + //check if Unsettling Enchantment applies + if(GetHasFeat(FEAT_UNSETTLING_ENCHANTMENT, oSaveVersus) && !GetIsImmune(oTarget, IMMUNITY_TYPE_MIND_SPELLS)) + { + effect eLink = EffectLinkEffects(EffectACDecrease(2), EffectAttackDecrease(2)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0); + } + if(GetRacialType(oTarget) == RACIAL_TYPE_KILLOREN) + nDC -= 2; + if(GetLocalInt(oTarget, "KillorenAncient")) + nDC -= 2; + if(GetRacialType(oTarget) == RACIAL_TYPE_MONGRELFOLK) + nDC -= 1; + } + + // Hexblade gets a bonus against spells equal to his Charisma (Min +1) + if(nSchool && GetLevelByClass(CLASS_TYPE_HEXBLADE, oTarget)) + { + int nHexCha = GetAbilityModifier(ABILITY_CHARISMA, oTarget); + if (nHexCha < 1) nHexCha = 1; + nDC -= nHexCha; + } + + // Totemist gets a save v magical beasts + if(MyPRCGetRacialType(oSaveVersus) == RACIAL_TYPE_MAGICAL_BEAST && GetLevelByClass(CLASS_TYPE_TOTEMIST, oTarget) >= 3) + nDC -= 3; + + int nSaveRoll = BWSavingThrow(nSavingThrow, oTarget, nDC, nSaveType, oSaveVersus, fDelay); + + // If the spell is save immune then the link must be applied in order to get the true immunity + // to be resisted. That is the reason for returing false and not true. True blocks the + // application of effects. + if(nSaveRoll == 2 && !bImmunityCheck) + return 0; + + // Failed the save - check if we can reroll + if(!nSaveRoll) + { + if(nSaveType == SAVING_THROW_TYPE_MIND_SPELLS) + { + // Bond Of Loyalty + if(GetLocalInt(oTarget, "BondOfLoyalty")) + { + // Reroll + nSaveRoll = BWSavingThrow(nSavingThrow, oTarget, nDC, nSaveType, oSaveVersus, fDelay); + DeleteLocalInt(oTarget, "BondOfLoyalty"); + } + } + else if(nSaveType == SAVING_THROW_TYPE_FEAR) + { + // Call To Battle Reroll + if(GetLocalInt(oTarget, "CallToBattle")) + { + // Reroll + nSaveRoll = BWSavingThrow(nSavingThrow, oTarget, nDC, nSaveType, oSaveVersus, fDelay); + DeleteLocalInt(oTarget, "CallToBattle"); + } + } + + // Second Chance power reroll + if(!nSaveRoll && GetLocalInt(oTarget, "PRC_Power_SecondChance_Active") // Second chance is active + && !GetLocalInt(oTarget, "PRC_Power_SecondChance_UserForRound")) // And hasn't yet been used for this round + { + // Reroll + nSaveRoll = BWSavingThrow(nSavingThrow, oTarget, nDC, nSaveType, oSaveVersus, fDelay); + + // Can't use this ability again for a round + SetLocalInt(oTarget, "PRC_Power_SecondChance_UserForRound", TRUE); + DelayCommand(6.0f, DeleteLocalInt(oTarget, "PRC_Power_SecondChance_UserForRound")); + } + + // Zealous Surge Reroll + if(!nSaveRoll && GetLocalInt(oTarget, "ZealousSurge")) + { + // Reroll + nSaveRoll = BWSavingThrow(nSavingThrow, oTarget, nDC, nSaveType, oSaveVersus, fDelay); + + // Ability Used + DeleteLocalInt(oTarget, "ZealousSurge"); + } + + // Balam's Cunning Reroll + if(!nSaveRoll && GetLocalInt(oTarget, "BalamCunning")) + { + // Reroll + nSaveRoll = BWSavingThrow(nSavingThrow, oTarget, nDC, nSaveType, oSaveVersus, fDelay); + + // Ability Used + DeleteLocalInt(oTarget, "BalamCunning"); + } + + if(!nSaveRoll) + { + if(nSavingThrow == SAVING_THROW_REFLEX) + { + // Dive for Cover reroll + if(GetHasFeat(FEAT_DIVE_FOR_COVER, oTarget)) + { + // Reroll + nSaveRoll = BWSavingThrow(nSavingThrow, oTarget, nDC, nSaveType, oSaveVersus, fDelay); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectKnockdown(), oTarget, 6.0); + } + } + // Impetuous Endurance - fortitude or will save + else if(GetLevelByClass(CLASS_TYPE_KNIGHT, oTarget) > 16) + { + // Reroll + nSaveRoll = BWSavingThrow(nSavingThrow, oTarget, nDC, nSaveType, oSaveVersus, fDelay); + } + } + } + //Serene Guardian Unclouded Mind + int nSerene = GetLevelByClass(CLASS_TYPE_SERENE_GUARDIAN, oTarget); + //Applies on failed will saves from 9th level on + if (nSaveRoll == 1 && nSavingThrow == SAVING_THROW_WILL && nSerene >= 9) + { + if (GetIsSkillSuccessful(oTarget, SKILL_CONCENTRATION, nDC)) // Concentration check to beat the DC + nSaveRoll = 0; + } + + // Iron Mind Barbed Mind ability + if(nSaveRoll == 1 && nSaveType == SAVING_THROW_TYPE_MIND_SPELLS) + { + // Only works in Heavy Armour + if(GetLevelByClass(CLASS_TYPE_IRONMIND, oTarget) > 9 + && GetBaseAC(GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget)) > 5) + { + // Spell/Power caster takes 1d6 damage and 1 Wisdom damage + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(), DAMAGE_TYPE_MAGICAL), oSaveVersus); + ApplyAbilityDamage(oSaveVersus, ABILITY_WISDOM, 1, DURATION_TYPE_TEMPORARY, TRUE, -1.0); + } + } + + // Hobgoblin Warsoul spell eater + if(nSaveRoll == 1 && GetRacialType(oTarget) == RACIAL_TYPE_HOBGOBLIN_WARSOUL) + { + //Apply the Aid VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HOLY_AID), oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAttackIncrease(2), oTarget, 6.0); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectTemporaryHitpoints(5), oTarget, 60.0); + } + + return nSaveRoll; +} + + +int PRCGetReflexAdjustedDamage(int nDamage, object oTarget, int nDC, int nSaveType = SAVING_THROW_TYPE_NONE, object oSaveVersus = OBJECT_SELF) +{ + int nEvasion; + if(GetHasFeat(FEAT_IMPROVED_EVASION, oTarget)) + nEvasion = 2; + else if(GetHasFeat(FEAT_EVASION, oTarget)) + nEvasion = 1; + + // Grants evasion against dragons, don't override if they've already gotit + object oWOL = GetItemPossessedBy(oTarget, "WOL_CrimsonRuination"); + if(oWOL != GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget) && MyPRCGetRacialType(oSaveVersus) == RACIAL_TYPE_DRAGON && 1 > nEvasion) + nEvasion = 1; + + // This ability removes evasion from the target + if(GetLocalInt(oTarget, "TrueConfoundingResistance")) + { + if(nEvasion) + nEvasion -= 1; + else + nDC += 2; + } + + //Get saving throw result + int nSaveRoll = PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC, nSaveType, oSaveVersus); + + //save success + if(nSaveRoll) + nDamage = nEvasion ? 0 : nDamage / 2; + //save failed - check improved evasion + else if(nEvasion == 2) + nDamage = nDamage / 2; + + return nDamage; +} + +// function for internal use in GetCasterLvl + +// caster level for arcane base classes (with practiced spellcaster feats) +int GetCasterLvlArcane(int iClassType, object oCaster) +{ + if (GetPrimaryArcaneClass(oCaster) == iClassType) + return GetLevelByTypeArcane(oCaster); + + int iTemp = GetLevelByClass(iClassType, oCaster); + iTemp += PracticedSpellcasting(oCaster, iClassType, iTemp); + return iTemp; +} + +// caster level for classes with half progression +int GetCasterLvlArcaneSemi(int iClassType, object oCaster) +{ + if (GetPrimaryArcaneClass(oCaster) == iClassType) + return GetLevelByTypeArcane(oCaster); + + int iTemp = GetLevelByClass(iClassType, oCaster) / 2; + iTemp += PracticedSpellcasting(oCaster, iClassType, iTemp); + return iTemp; +} + +// caster level for divine base classes (with practiced spellcaster feats) +int GetCasterLvlDivine(int iClassType, object oCaster) +{ + if (GetPrimaryDivineClass(oCaster) == iClassType) + return GetLevelByTypeDivine(oCaster); + + int iTemp = GetLevelByClass(iClassType, oCaster); + iTemp += PracticedSpellcasting(oCaster, iClassType, iTemp); + return iTemp; +} + +// caster level for classes with half progression +int GetCasterLvlDivineSemi(int iClassType, object oCaster) +{ + if (GetPrimaryDivineClass(oCaster) == iClassType) + return GetLevelByTypeDivine(oCaster); + + int iTemp = GetLevelByClass(iClassType, oCaster) / 2; + iTemp += PracticedSpellcasting(oCaster, iClassType, iTemp); + return iTemp; +} + +int GetCasterLvl(int iTypeSpell, object oCaster = OBJECT_SELF) +{ + switch (iTypeSpell) + { + case TYPE_ARCANE: + return GetLevelByTypeArcane(oCaster); + + case TYPE_DIVINE: + return GetLevelByTypeDivine(oCaster); + + case CLASS_TYPE_SORCERER: + { + if (GetPrimaryArcaneClass(oCaster) == CLASS_TYPE_SORCERER) + return GetLevelByTypeArcane(oCaster); + + if(!GetLevelByClass(CLASS_TYPE_SORCERER, oCaster)) + { + int iTemp; + int nRace = GetRacialType(oCaster); + + //Aranea include shapechanger HD as sorc + if(nRace == RACIAL_TYPE_ARANEA) + iTemp = GetLevelByClass(CLASS_TYPE_SHAPECHANGER, oCaster); + + //Rakshasa include outsider HD as sorc + if(nRace == RACIAL_TYPE_RAKSHASA) + iTemp = GetLevelByClass(CLASS_TYPE_OUTSIDER, oCaster); + + //Drider include aberration HD as sorc + if(nRace == RACIAL_TYPE_DRIDER) + iTemp = GetLevelByClass(CLASS_TYPE_ABERRATION, oCaster); + + //Arkamoi + Redspawn include MH HD as sorc + if(nRace == RACIAL_TYPE_ARKAMOI) + iTemp = GetLevelByClass(CLASS_TYPE_MONSTROUS, oCaster); + if(nRace == RACIAL_TYPE_HOBGOBLIN_WARSOUL) + iTemp = GetLevelByClass(CLASS_TYPE_MONSTROUS, oCaster); + if(nRace == RACIAL_TYPE_REDSPAWN_ARCANISS) + iTemp = GetLevelByClass(CLASS_TYPE_MONSTROUS, oCaster)*3/4; + if(nRace == RACIAL_TYPE_MARRUTACT) + iTemp = GetLevelByClass(CLASS_TYPE_MONSTROUS, oCaster)*6/7; + + iTemp += PracticedSpellcasting(oCaster, CLASS_TYPE_SORCERER, iTemp); + iTemp += DraconicPower(oCaster); + return iTemp; + } + } + + case CLASS_TYPE_BARD: + { + if (GetPrimaryArcaneClass(oCaster) == CLASS_TYPE_BARD) + return GetLevelByTypeArcane(oCaster); + + if(!GetLevelByClass(CLASS_TYPE_BARD, oCaster)) + { + int iTemp; + int nRace = GetRacialType(oCaster); + + //Gloura include fey HD as bard + if(nRace == RACIAL_TYPE_GLOURA) + iTemp = GetLevelByClass(CLASS_TYPE_FEY, oCaster); + + iTemp += PracticedSpellcasting(oCaster, CLASS_TYPE_BARD, iTemp); + iTemp += DraconicPower(oCaster); + return iTemp; + } + } + + case CLASS_TYPE_ASSASSIN: + case CLASS_TYPE_CELEBRANT_SHARESS: + case CLASS_TYPE_BEGUILER: + case CLASS_TYPE_CULTIST_SHATTERED_PEAK: + case CLASS_TYPE_DREAD_NECROMANCER: + case CLASS_TYPE_DUSKBLADE: + case CLASS_TYPE_SHADOWLORD: + case CLASS_TYPE_SUEL_ARCHANAMACH: + case CLASS_TYPE_WARMAGE: + case CLASS_TYPE_WIZARD: + return GetCasterLvlArcane(iTypeSpell, oCaster); + + case CLASS_TYPE_HEXBLADE: + return GetCasterLvlArcaneSemi(iTypeSpell, oCaster); + + case CLASS_TYPE_ARCHIVIST: + case CLASS_TYPE_BLACKGUARD: + case CLASS_TYPE_BLIGHTER: + case CLASS_TYPE_CLERIC: + case CLASS_TYPE_DRUID: + case CLASS_TYPE_FAVOURED_SOUL: + case CLASS_TYPE_HEALER: + case CLASS_TYPE_KNIGHT_CHALICE: + case CLASS_TYPE_KNIGHT_MIDDLECIRCLE: + case CLASS_TYPE_NENTYAR_HUNTER: + case CLASS_TYPE_OCULAR: + case CLASS_TYPE_SHAMAN: + case CLASS_TYPE_SLAYER_OF_DOMIEL: + case CLASS_TYPE_SOLDIER_OF_LIGHT: + case CLASS_TYPE_UR_PRIEST: + case CLASS_TYPE_VASSAL: + return GetCasterLvlDivine(iTypeSpell, oCaster); + + case CLASS_TYPE_PALADIN: + case CLASS_TYPE_RANGER: + case CLASS_TYPE_SOHEI: + return GetCasterLvlDivineSemi(iTypeSpell, oCaster); + } + return 0; +} + + +////////////////Begin Spellsword////////////////// + +void SetAllAoEInts(int SpellID, object oAoE, int nBaseSaveDC, int SpecDispel = 0, int nCasterLevel = 0) +{ + if(!GetLocalInt(oAoE, "X2_AoE_BaseSaveDC"))//DC should always be > 0 + { + SetLocalInt(oAoE, "X2_AoE_SpellID", SpellID); + SetLocalInt(oAoE, "X2_AoE_BaseSaveDC", nBaseSaveDC); + if(SpecDispel) SetLocalInt(oAoE, "X2_AoE_SpecDispel", SpecDispel); + if(!nCasterLevel) nCasterLevel = PRCGetCasterLevel(); + SetLocalInt(oAoE, "X2_AoE_Caster_Level", nCasterLevel); + if(GetHasFeat(FEAT_SHADOWWEAVE)) SetLocalInt(oAoE, "X2_AoE_Weave", TRUE); + } +} + +//GetNextObjectInShape wrapper for changing the AOE of the channeled spells +object MyNextObjectInShape(int nShape, + float fSize, location lTarget, + int bLineOfSight = FALSE, + int nObjectFilter = OBJECT_TYPE_CREATURE, + vector vOrigin=[0.0, 0.0, 0.0]) +{ + object oCaster = OBJECT_SELF; + + // War Wizard of Cormyr's Widen Spell ability + float fMulti = GetLocalFloat(oCaster, PRC_SPELL_AREA_SIZE_MULTIPLIER); + //if(DEBUG) DoDebug("Original Spell Size: " + FloatToString(fSize)+"\n" + "Widened Multiplier: " + FloatToString(fMulti)); + + float fHFInfusion = GetLocalFloat(oCaster, "PRC_HF_Infusion_Wid"); + if(fHFInfusion > 0.0f) + { + object oItem = PRCGetSpellCastItem(oCaster); + if(GetIsObjectValid(oItem) && GetItemPossessor(oItem) == oCaster) + { + //Hellfire Infusion - doesn't work on scrolls and potions + int nType = GetBaseItemType(oItem); + if(nType != BASE_ITEM_POTIONS && nType != BASE_ITEM_ENCHANTED_POTION + && nType != BASE_ITEM_SCROLL && nType != BASE_ITEM_ENCHANTED_SCROLL) + { + fMulti = fHFInfusion; + DelayCommand(1.0, DeleteLocalFloat(oCaster, "PRC_HF_Infusion_Wid")); + } + } + } + + if(fMulti > 0.0) + { + fSize *= fMulti; + if(DEBUG) DoDebug("New Spell Size: " + FloatToString(fSize)); + } + + if(GetLocalInt(oCaster, "spellswd_aoe") == 1) + { + return OBJECT_INVALID; + } + + return GetNextObjectInShape(nShape,fSize,lTarget,bLineOfSight,nObjectFilter,vOrigin); +} + +//GetFirstObjectInShape wrapper for changing the AOE of the channeled spells +object MyFirstObjectInShape(int nShape, + float fSize, location lTarget, + int bLineOfSight = FALSE, + int nObjectFilter = OBJECT_TYPE_CREATURE, + vector vOrigin=[0.0, 0.0, 0.0]) +{ + object oCaster = OBJECT_SELF; + + //int on caster for the benefit of spellfire wielder resistance + // string sName = "IsAOE_" + IntToString(GetSpellId()); + string sName = "IsAOE_" + IntToString(PRCGetSpellId(oCaster)); + + SetLocalInt(oCaster, sName, 1); + DelayCommand(0.1, DeleteLocalInt(oCaster, sName)); + + // War Wizard of Cormyr's Widen Spell ability + float fMulti = GetLocalFloat(oCaster, PRC_SPELL_AREA_SIZE_MULTIPLIER); + //if(DEBUG) DoDebug("Original Spell Size: " + FloatToString(fSize)+"\n" + "Widened Multiplier: " + FloatToString(fMulti)); + + float fHFInfusion = GetLocalFloat(oCaster, "PRC_HF_Infusion_Wid"); + if(fHFInfusion > 0.0f) + { + object oItem = PRCGetSpellCastItem(oCaster); + if(GetIsObjectValid(oItem) && GetItemPossessor(oItem) == oCaster) + { + //Hellfire Infusion - doesn't work on scrolls and potions + int nType = GetBaseItemType(oItem); + if(nType != BASE_ITEM_POTIONS && nType != BASE_ITEM_ENCHANTED_POTION + && nType != BASE_ITEM_SCROLL && nType != BASE_ITEM_ENCHANTED_SCROLL) + { + fMulti = fHFInfusion; + DelayCommand(1.0, DeleteLocalFloat(oCaster, "PRC_HF_Infusion_Wid")); + } + } + } + + if(fMulti > 0.0) + { + fSize *= fMulti; + if(DEBUG) DoDebug("New Spell Size: " + FloatToString(fSize)); + + // This allows it to affect the entire casting + DelayCommand(1.0, DeleteLocalFloat(oCaster, PRC_SPELL_AREA_SIZE_MULTIPLIER)); + } + + if(GetLocalInt(oCaster, "spellswd_aoe") == 1) + { + return PRCGetSpellTargetObject(oCaster); + } + + return GetFirstObjectInShape(nShape,fSize,lTarget,bLineOfSight,nObjectFilter,vOrigin); +} + + +//This checks if the spell is channeled and if there are multiple spells +//channeled, which one is it. Then it checks in either case if the spell +//has the metamagic feat the function gets and returns TRUE or FALSE accordingly +//Also used by the new spellbooks for the same purpose +/* replaced by wrapper for GetMetaMagicFeat instead + Not necessarily. This may still be a usefule level of abstraction - Ornedan + */ +int CheckMetaMagic(int nMeta,int nMMagic) +{ + return nMeta & nMMagic; +} + +int PRCGetMetaMagicFeat(object oCaster = OBJECT_SELF, int bClearFeatFlags = TRUE) +{ + int nOverride = GetLocalInt(oCaster, PRC_METAMAGIC_OVERRIDE); + if(nOverride) + { + if (DEBUG) DoDebug("PRCGetMetaMagicFeat: found override metamagic = "+IntToString(nOverride)+", original = "+IntToString(GetMetaMagicFeat())); + return nOverride; + } + + object oItem = PRCGetSpellCastItem(oCaster); + + // we assume that we are casting from an item, if the item is valid and the item belongs to oCaster + // however, we cannot be sure because of Bioware's inadequate implementation of GetSpellCastItem + if(GetIsObjectValid(oItem) && GetItemPossessor(oItem) == oCaster) + { + int nFeat; + + //check item for metamagic + itemproperty ipTest = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipTest)) + { + if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_CAST_SPELL_METAMAGIC) + { + int nSubType = GetItemPropertySubType(ipTest); + nSubType = StringToInt(Get2DACache("iprp_spells", "SpellIndex", nSubType)); + if(nSubType == PRCGetSpellId(oCaster)) + { + int nCostValue = GetItemPropertyCostTableValue(ipTest); + if(nCostValue == -1 && DEBUG) + DoDebug("Problem examining itemproperty"); + switch(nCostValue) + { + //bitwise "addition" equivalent to nFeat = (nFeat | nSSFeat) + case 1: nFeat |= METAMAGIC_QUICKEN; break; + case 2: nFeat |= METAMAGIC_EMPOWER; break; + case 3: nFeat |= METAMAGIC_EXTEND; break; + case 4: nFeat |= METAMAGIC_MAXIMIZE; break; + case 5: nFeat |= METAMAGIC_SILENT; break; + case 6: nFeat |= METAMAGIC_STILL; break; + } + } + } + ipTest = GetNextItemProperty(oItem); + } + if (DEBUG) DoDebug("PRCGetMetaMagicFeat: item casting with item = "+GetName(oItem)+", found metamagic = "+IntToString(nFeat)); + + //Hellfire Infusion - doesn't work on scrolls and potions + int nType = GetBaseItemType(oItem); + if(nType != BASE_ITEM_POTIONS && nType != BASE_ITEM_ENCHANTED_POTION + && nType != BASE_ITEM_SCROLL && nType != BASE_ITEM_ENCHANTED_SCROLL) + { + nFeat |= GetLocalInt(oCaster, "PRC_HF_Infusion"); + if(bClearFeatFlags) DeleteLocalInt(oCaster, "PRC_HF_Infusion"); + } + + //apply metamagic adjustment (chanell spell) + nFeat |= GetLocalInt(oCaster, PRC_METAMAGIC_ADJUSTMENT); + return nFeat; + } + + if(GetLocalInt(oCaster, "PRC_SPELL_EVENT")) + { + if (DEBUG) DoDebug("PRCGetMetaMagicFeat: found spell event metamagic = "+IntToString(GetLocalInt(oCaster, "PRC_SPELL_METAMAGIC"))+", original = "+IntToString(GetMetaMagicFeat())); + return GetLocalInt(oCaster, "PRC_SPELL_METAMAGIC"); + } + + int nFeat = GetMetaMagicFeat(); + if(nFeat == METAMAGIC_ANY) + // work around for spontaneous casters (bard or sorcerer) having all metamagic turned on when using ActionCastSpell* + nFeat = METAMAGIC_NONE; + + nFeat |= GetLocalInt(oCaster, PRC_METAMAGIC_ADJUSTMENT); + + int nClass = PRCGetLastSpellCastClass(oCaster); + // Suel Archanamach's Extend spells they cast on themselves. + // Only works for Suel Spells, and not any other caster type they might have + // Since this is a spellscript, it assumes OBJECT_SELF is the caster + if(nClass == CLASS_TYPE_SUEL_ARCHANAMACH + && GetLevelByClass(CLASS_TYPE_SUEL_ARCHANAMACH) >= 3) + { + // Check that they cast on themselves + // if (oCaster == PRCGetSpellTargetObject()) + if(oCaster == PRCGetSpellTargetObject(oCaster)) + { + // Add extend to the metamagic feat using bitwise math + nFeat |= METAMAGIC_EXTEND; + } + } + //Code for the Abjurant Champion. Works similar to the Suel Archamamach but + //their extend only works on abjuration spells they cast. + if(GetHasFeat(FEAT_EXTENDED_ABJURATION, oCaster) + && GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION) >= 1) + { + int nSpellSchool = GetLocalInt(oCaster, "X2_L_LAST_SPELLSCHOOL_VAR"); + // Check that they cast an abjuration spell + if(nSpellSchool == SPELL_SCHOOL_ABJURATION) + { + // Add extend to the metamagic feat using bitwise math + nFeat |= METAMAGIC_EXTEND; + if (DEBUG) FloatingTextStringOnCreature("Extended Abjuration Applied", oCaster, FALSE); + } + } + // Magical Contraction, Truenaming Utterance + if(GetHasSpellEffect(UTTER_MAGICAL_CONTRACTION_R, oCaster)) + //(GetLocalInt(oCaster, "TrueMagicalContraction")) + { + nFeat |= METAMAGIC_EMPOWER; + } + // Sudden Metamagic + int nSuddenMeta = GetLocalInt(oCaster, "SuddenMeta"); + if(nSuddenMeta) + { + nFeat |= nSuddenMeta; + if(bClearFeatFlags) + DeleteLocalInt(oCaster, "SuddenMeta"); + } + + int nDivMeta = GetLocalInt(oCaster, "DivineMeta"); + if(nDivMeta) + { + if(GetIsDivineClass(nClass, oCaster)) + { + nFeat |= nDivMeta; + if(bClearFeatFlags) + DeleteLocalInt(oCaster, "DivineMeta"); + } + } + + int nSpelldance = GetLocalInt(oCaster, "Spelldance"); + if(nSpelldance) + { + nFeat |= nSpelldance; + if (DEBUG) FloatingTextStringOnCreature("Metamagic Spelldances applied", oCaster, FALSE); + } + + int nSpellLevel = PRCGetSpellLevel(oCaster, PRCGetSpellId()); + if (GetLocalInt(oCaster, "Aradros_Extend")/* && GetIsArcaneClass(nClass, oCaster)*/) + { + if (DEBUG) DoDebug("PRCGetMetaMagicFeat: GetIsArcaneClass is TRUE"); + int nHD = GetHitDice(oCaster); + if (nHD >= 12 && 6 >= nSpellLevel) + { + nFeat |= METAMAGIC_EXTEND; + DeleteLocalInt(oCaster, "Aradros_Extend"); + if (DEBUG) FloatingTextStringOnCreature("Aradros Extend Applied", oCaster, FALSE); + } + else if (3 >= nSpellLevel) + { + nFeat |= METAMAGIC_EXTEND; + DeleteLocalInt(oCaster, "Aradros_Extend"); + if (DEBUG) FloatingTextStringOnCreature("Aradros Extend Applied", oCaster, FALSE); + } + } + + if (DEBUG) DoDebug("PRCGetMetaMagicFeat: nSpellLevel " +IntToString(nSpellLevel)+", PRCGetSpellId " +IntToString(PRCGetSpellId())+", nClass " +IntToString(nClass)); + if (DEBUG) DoDebug("PRCGetMetaMagicFeat: returning " +IntToString(nFeat)); + return nFeat; +} + +//Wrapper for The MaximizeOrEmpower function +int PRCMaximizeOrEmpower(int nDice, int nNumberOfDice, int nMeta, int nBonus = 0) +{ + int i, nDamage; + for (i = 1; i <= nNumberOfDice; i++) + { + nDamage = nDamage + Random(nDice) + 1; + } + + //Resolve metamagic + if(nMeta & METAMAGIC_MAXIMIZE) + nDamage = nDice * nNumberOfDice; + if(nMeta & METAMAGIC_EMPOWER) + nDamage = nDamage + nDamage / 2; + + return nDamage + nBonus; +} + +float PRCGetMetaMagicDuration(float fDuration, int nMeta = -1) +{ + if(nMeta == -1) // no metamagic value was passed, so get it here + nMeta = PRCGetMetaMagicFeat(); + + if(nMeta & METAMAGIC_EXTEND) + fDuration *= 2; + + return fDuration; +} + +int PRCGetMetaMagicDamage(int nDamageType, int nDice, int nDieSize, + int nBonusPerDie = 0, int nBonus = 0, int nMetaMagic = -1) +{ + // If the metamagic argument wasn't given get it. + if (-1 == nMetaMagic) nMetaMagic = PRCGetMetaMagicFeat(); + + // Roll the damage, applying metamagic. + int nDamage = PRCMaximizeOrEmpower(nDieSize, nDice, nMetaMagic, (nBonusPerDie * nDice) + nBonus); + return nDamage; +} + +void PRCSetSchool(int nSchool = SPELL_SCHOOL_GENERAL) +{ + // Remove the last value in case it is there and set the new value if it is NOT general. + if(SPELL_SCHOOL_GENERAL != nSchool) + SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", nSchool); + else + DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR"); +} + +void PRCSignalSpellEvent(object oTarget, int bHostile = TRUE, int nSpellID = -1, object oCaster = OBJECT_SELF) +{ + if (-1 == nSpellID) nSpellID = PRCGetSpellId(); + + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(oCaster, nSpellID, bHostile)); +} +/* +void SPEvilShift(object oPC) +{ + // Check for alignment shift switch being active + if(GetPRCSwitch(PRC_SPELL_ALIGNMENT_SHIFT)) + { + // Amount of adjustment is equal to the square root of your distance from pure evil. + // In other words, the amount of shift is higher the farther you are from pure evil, with the + // extremes being 10 points of shift at pure good and 0 points of shift at pure evil. + AdjustAlignment(oPC, ALIGNMENT_EVIL, FloatToInt(sqrt(IntToFloat(GetGoodEvilValue(oPC)))), FALSE); + } +} + +void SPGoodShift(object oPC) +{ + // Check for alignment shift switch being active + if(GetPRCSwitch(PRC_SPELL_ALIGNMENT_SHIFT)) + { + // Amount of adjustment is equal to the square root of your distance from pure good. + // In other words, the amount of shift is higher the farther you are from pure good, with the + // extremes being 10 points of shift at pure evil and 0 points of shift at pure good. + AdjustAlignment(oPC, ALIGNMENT_GOOD, FloatToInt(sqrt(IntToFloat(100 - GetGoodEvilValue(oPC)))), FALSE); + } +}*/ + +void DoCorruptionCost(object oPC, int nAbility, int nCost, int bDrain) +{ + // Undead redirect all damage & drain to Charisma, sez http://www.wizards.com/dnd/files/BookVileFAQ12102002.zip + if(MyPRCGetRacialType(oPC) == RACIAL_TYPE_UNDEAD) + nAbility = ABILITY_CHARISMA; + + //Exalted Raiment + if(GetHasSpellEffect(SPELL_EXALTED_RAIMENT, GetItemInSlot(INVENTORY_SLOT_CHEST, oPC))) + { + nCost -= 1; + + if(nCost < 1) + nCost = 1; + } + + if (GetHasFeat(FEAT_FAVORED_ZULKIRS, oPC)) nCost -= 1; + + // Is it ability drain? + if(bDrain) + ApplyAbilityDamage(oPC, nAbility, nCost, DURATION_TYPE_PERMANENT, TRUE); + // Or damage + else + ApplyAbilityDamage(oPC, nAbility, nCost, DURATION_TYPE_TEMPORARY, TRUE, -1.0f); +} + +//:: Fix by TiredByFirelight +void MultisummonPreSummon(object oPC = OBJECT_SELF, int bOverride = FALSE) +{ + if(!GetPRCSwitch(PRC_MULTISUMMON) && !bOverride) + return; + int nCount = GetPRCSwitch(PRC_MULTISUMMON); + if(bOverride) + nCount = bOverride; + if(nCount < 0 + || nCount == 1) + nCount = 99; + if(nCount > 99) + nCount = 99; + + object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC, nCount); + if(!GetIsObjectValid(oSummon) && !GetLocalInt(oSummon, "RFSummonedElemental")) + { + oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC, 1); + AssignCommand(oSummon, SetIsDestroyable(FALSE, FALSE, FALSE)); + AssignCommand(oSummon, DelayCommand(0.3, SetIsDestroyable(TRUE, FALSE, FALSE))); + } +} + +/* void MultisummonPreSummon(object oPC = OBJECT_SELF, int bOverride = FALSE) +{ + if(!GetPRCSwitch(PRC_MULTISUMMON) && !bOverride) + return; + int i=1; + int nCount = GetPRCSwitch(PRC_MULTISUMMON); + if(bOverride) + nCount = bOverride; + if(nCount < 0 + || nCount == 1) + nCount = 99; + if(nCount > 99) + nCount = 99; + object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC, i); + while(GetIsObjectValid(oSummon) && !GetLocalInt(oSummon, "RFSummonedElemental") && i < nCount) + { + AssignCommand(oSummon, SetIsDestroyable(FALSE, FALSE, FALSE)); + AssignCommand(oSummon, DelayCommand(0.3, SetIsDestroyable(TRUE, FALSE, FALSE))); + i++; + oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC, i); + } +} */ + + +//This function returns 1 only if the object oTarget is the object +//the weapon hit when it channeled the spell sSpell or if there is no +//channeling at all +int ChannelChecker(string sSpell, object oTarget) +{ + int nSpell = GetLocalInt(GetAreaOfEffectCreator(), sSpell+"channeled"); + int nTarget = GetLocalInt(oTarget, sSpell+"target"); + if(nSpell == 1 && nTarget == 1) + { + return 1; + } + else if(nSpell != 1 && nTarget != 1) + { + return 1; + } + else + { + return 0; + } +} + +//If a spell is being channeled, we store its target and its name +void StoreSpellVariables(string sString,int nDuration) +{ + object oCaster = OBJECT_SELF; + object oTarget = GetSpellTargetObject(); //using prc version could cause problems + + if(GetLocalInt(oCaster,"spellswd_aoe") == 1) + { + SetLocalInt(oCaster, sString+"channeled",1); + SetLocalInt(oTarget, sString+"target",1); + } + DelayCommand(RoundsToSeconds(nDuration),DeleteLocalInt(oTarget, sString+"target")); + DelayCommand(RoundsToSeconds(nDuration),DeleteLocalInt(oCaster, sString+"channeled")); +} + +effect ChannelingVisual() +{ + return EffectVisualEffect(VFX_DUR_SPELLTURNING); +} + +////////////////End Spellsword////////////////// + + +int GetHasMettle(object oTarget, int nSavingThrow = SAVING_THROW_WILL) +{ + if(GetLevelByClass(CLASS_TYPE_HEXBLADE, oTarget) > 2) return TRUE; + if(GetLevelByClass(CLASS_TYPE_SOHEI, oTarget) > 8) return TRUE; + if(GetLevelByClass(CLASS_TYPE_CRUSADER, oTarget) > 12) return TRUE; + if(GetLocalInt(oTarget, "FactotumMettle")) return TRUE; + + if(nSavingThrow = SAVING_THROW_WILL) + { + // Iron Mind's ability only functions in Heavy Armour + if(GetLevelByClass(CLASS_TYPE_IRONMIND, oTarget) > 4 + && GetBaseAC(GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget)) > 5) + return TRUE; + // Fill out the line below to add another class with Will mettle + // if (GetLevelByClass(CLASS_TYPE_X, oTarget) >= X) return TRUE; + } + /*else if(nSavingThrow = SAVING_THROW_FORT) + { + // Add Classes with Fort mettle here + // if (GetLevelByClass(CLASS_TYPE_X, oTarget) >= X) return TRUE; + }*/ + + return FALSE; +} + +void DoCommandSpell(object oCaster, object oTarget, int nSpellId, int nDuration, int nCaster) +{ + if(DEBUG) DoDebug("DoCommandSpell: SpellId: " + IntToString(nSpellId)); + if(DEBUG) DoDebug("Command Spell: Begin"); + if(nSpellId == SPELL_COMMAND_APPROACH + || nSpellId == SPELL_GREATER_COMMAND_APPROACH + || nSpellId == 18359 //MYST_VOICE_SHADOW_APPROACH + || nSpellId == SPELL_DOA_COMMAND_APPROACH + || nSpellId == SPELL_DOA_GREATER_COMMAND_APPROACH) + { + // Force the target to approach the caster + if(DEBUG) DoDebug("Command Spell: Approach"); + AssignCommand(oTarget, ClearAllActions(TRUE)); + AssignCommand(oTarget, ActionForceMoveToObject(oCaster, TRUE)); + } + // Creatures that can't be disarmed ignore this + else if(nSpellId == SPELL_COMMAND_DROP + || nSpellId == SPELL_GREATER_COMMAND_DROP + || nSpellId == 18360 //MYST_VOICE_SHADOW_DROP + || nSpellId == SPELL_DOA_COMMAND_DROP + || nSpellId == SPELL_DOA_GREATER_COMMAND_DROP) + { + if(GetIsCreatureDisarmable(oTarget) && !GetPRCSwitch(PRC_PNP_DISARM)) + { + // Force the target to drop what its holding + if(DEBUG) DoDebug("Command Spell: Drop"); + AssignCommand(oTarget, ClearAllActions(TRUE)); + object oTargetWep = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + SetDroppableFlag(oTargetWep, TRUE); + SetStolenFlag(oTargetWep, FALSE); + AssignCommand(oTarget, ActionPutDownItem(oTargetWep)); + /*oTargetWep = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget); + SetDroppableFlag(oTargetWep, TRUE); + SetStolenFlag(oTargetWep, FALSE); + AssignCommand(oTarget, ActionPutDownItem(oTargetWep)); */ + } + else + { + FloatingTextStringOnCreature(GetName(oTarget) + " is not disarmable.", oCaster, FALSE); + } + } + else if(nSpellId == SPELL_COMMAND_FALL + || nSpellId == SPELL_GREATER_COMMAND_FALL + || nSpellId == 18361 //MYST_VOICE_SHADOW_FALL + || nSpellId == SPELL_DOA_COMMAND_FALL + || nSpellId == SPELL_DOA_GREATER_COMMAND_FALL) + { + // Force the target to fall down + if(DEBUG) DoDebug("Command Spell: Fall"); + AssignCommand(oTarget, ClearAllActions(TRUE)); + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectKnockdown(), oTarget, RoundsToSeconds(nDuration),TRUE,-1,nCaster); + } + else if(nSpellId == SPELL_COMMAND_FLEE + || nSpellId == SPELL_GREATER_COMMAND_FLEE + || nSpellId == 18362 //MYST_VOICE_SHADOW_FLEE + || nSpellId == SPELL_DOA_COMMAND_FLEE + || nSpellId == SPELL_DOA_GREATER_COMMAND_FLEE) + { + // Force the target to flee the caster + if(DEBUG) DoDebug("Command Spell: Flee"); + AssignCommand(oTarget, ClearAllActions(TRUE)); + AssignCommand(oTarget, ActionMoveAwayFromObject(oCaster, TRUE)); + } + else if(nSpellId == SPELL_COMMAND_HALT + || nSpellId == SPELL_GREATER_COMMAND_HALT + || nSpellId == 18363 //MYST_VOICE_SHADOW_HALT + || nSpellId == SPELL_DOA_COMMAND_HALT + || nSpellId == SPELL_DOA_GREATER_COMMAND_HALT) + { + // Force the target to stand still + if(DEBUG) DoDebug("Command Spell: Stand"); + AssignCommand(oTarget, ClearAllActions(TRUE)); + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneParalyze(), oTarget, RoundsToSeconds(nDuration),TRUE,-1,nCaster); + } + else // Catch errors here + { + FloatingTextStringOnCreature("sp_command/sp_greatcommand: Error, Unknown SpellId", oCaster, FALSE); + } + if(DEBUG) DoDebug("Command Spell: End"); +} + +void SetIncorporeal(object oTarget, float fDuration, int nSuperOrEx, int nPermanent = FALSE) +{ + if (!GetIsObjectValid(oTarget)) + return; //No point working + + // Immune to non-magical weapons, ignore physical objects + effect eIncorporeal = EffectLinkEffects(EffectDamageReduction(100, DAMAGE_POWER_PLUS_ONE, 0), EffectCutsceneGhost()); + eIncorporeal = EffectLinkEffects(eIncorporeal, EffectDamageImmunityIncrease(DAMAGE_TYPE_BLUDGEONING, 50)); // 50% chance of magical weapons not working. Done as 50% Damage Immunity + eIncorporeal = EffectLinkEffects(eIncorporeal, EffectDamageImmunityIncrease(DAMAGE_TYPE_SLASHING, 50)); + eIncorporeal = EffectLinkEffects(eIncorporeal, EffectDamageImmunityIncrease(DAMAGE_TYPE_PIERCING, 50)); + eIncorporeal = EffectLinkEffects(eIncorporeal, EffectMissChance(50, MISS_CHANCE_TYPE_VS_MELEE)); // 50% melee miss chance to hit non-incorporeal targets. That's going to be everything + eIncorporeal = EffectLinkEffects(eIncorporeal, EffectSkillIncrease(SKILL_MOVE_SILENTLY, 99)); // Cannot be heard + eIncorporeal = EffectLinkEffects(eIncorporeal, EffectVisualEffect(VFX_DUR_ETHEREAL_VISAGE)); // Visual effect + + // No Strength Score, use Dex for melee attacks too + int nStr = GetAbilityScore(oTarget, ABILITY_STRENGTH); + int nDex = GetAbilityModifier(ABILITY_DEXTERITY, oTarget); + int nPen; + + if (nStr>10) + { + nPen = nStr - 10; + eIncorporeal = EffectLinkEffects(eIncorporeal, EffectAbilityDecrease(ABILITY_STRENGTH, nPen)); // Reduce Strength to 10 + + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if (GetIsObjectValid(oWeapon) && IPGetIsMeleeWeapon(oWeapon)) + { + IPSafeAddItemProperty(oWeapon, ItemPropertyAttackBonus(nDex), fDuration); //Dex has to be done as a melee weapon bonus + } + oWeapon = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget); + if (GetIsObjectValid(oWeapon) && IPGetIsMeleeWeapon(oWeapon)) + { + IPSafeAddItemProperty(oWeapon, ItemPropertyAttackBonus(nDex), fDuration); //Dex has to be done as a melee weapon bonus + } + oWeapon = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTarget); + if (GetIsObjectValid(oWeapon)) // We know these are melee weapons + { + IPSafeAddItemProperty(oWeapon, ItemPropertyAttackBonus(nDex), fDuration); //Dex has to be done as a melee weapon bonus + } + oWeapon = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTarget); + if (GetIsObjectValid(oWeapon)) // We know these are melee weapons + { + IPSafeAddItemProperty(oWeapon, ItemPropertyAttackBonus(nDex), fDuration); //Dex has to be done as a melee weapon bonus + } + oWeapon = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTarget); + if (GetIsObjectValid(oWeapon)) // We know these are melee weapons + { + IPSafeAddItemProperty(oWeapon, ItemPropertyAttackBonus(nDex), fDuration); //Dex has to be done as a melee weapon bonus + } + } + + SetLocalInt(oTarget, "Incorporeal", TRUE); + if (!nPermanent) DelayCommand(fDuration, DeleteLocalInt(oTarget, "Incorporeal")); + + if (nSuperOrEx == 1) + eIncorporeal = SupernaturalEffect(eIncorporeal); + else if (nSuperOrEx == 2) + eIncorporeal = ExtraordinaryEffect(eIncorporeal); + + if (nPermanent) + SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eIncorporeal, oTarget); + else + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eIncorporeal, oTarget, fDuration, FALSE, -1, -1); +} + +int GetIsIncorporeal(object oTarget) +{ + //Check for local int + if(GetPersistantLocalInt(oTarget, "Is_Incorporeal")) + return TRUE; + + //Check for local int + if(GetLocalInt(oTarget, "Incorporeal")) + return TRUE; + + //check for feat + if(GetHasFeat(FEAT_INCORPOREAL, oTarget)) + return TRUE; + + //base it on appearance + int nAppear = GetAppearanceType(oTarget); + if(nAppear == APPEARANCE_TYPE_ALLIP + || nAppear == APPEARANCE_TYPE_SHADOW + || nAppear == APPEARANCE_TYPE_SHADOW_FIEND + || nAppear == APPEARANCE_TYPE_SPECTRE + || nAppear == APPEARANCE_TYPE_WRAITH) + return TRUE; + + //Return value + return FALSE; +} + +int GetIsEthereal(object oTarget) +{ + return GetPersistantLocalInt(oTarget, "Is_Ethereal") + || GetHasFeat(FEAT_ETHEREAL, oTarget); +} + +int PRCGetIsAliveCreature(object oTarget) +{ + int bAlive = TRUE; + // non-creatures aren't alive + if (GetObjectType(oTarget) != OBJECT_TYPE_CREATURE) + return FALSE; // night of the living waypoints :p + + int nType = MyPRCGetRacialType(oTarget); + + //Non-living races, excluding warforged + if(nType == RACIAL_TYPE_UNDEAD || + (nType == RACIAL_TYPE_CONSTRUCT && !GetIsWarforged(oTarget))) bAlive = FALSE; + + //If they're dead :P + if(GetIsDead(oTarget)) bAlive = FALSE; + + //return + return bAlive; +} + +int GetControlledUndeadTotalHD(object oPC = OBJECT_SELF) +{ + int nTotalHD; + int i = 1; + object oSummonTest = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC, i); + while(GetIsObjectValid(oSummonTest)) + { + if(MyPRCGetRacialType(oSummonTest) == RACIAL_TYPE_UNDEAD) + nTotalHD += GetHitDice(oSummonTest); + if(DEBUG)FloatingTextStringOnCreature(GetName(oSummonTest)+" is summon number "+IntToString(i), oPC); + i++; + oSummonTest = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC, i); + } + return nTotalHD; +} + + +int GetControlledFiendTotalHD(object oPC = OBJECT_SELF) +{ + int nTotalHD; + int i = 1; + object oSummonTest = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC, i); + while(GetIsObjectValid(oSummonTest)) + { + if(MyPRCGetRacialType(oSummonTest) == RACIAL_TYPE_OUTSIDER + && GetAlignmentGoodEvil(oSummonTest) == ALIGNMENT_EVIL) + nTotalHD += GetHitDice(oSummonTest); + if(DEBUG)FloatingTextStringOnCreature(GetName(oSummonTest)+" is summon number "+IntToString(i), oPC); + i++; + oSummonTest = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC, i); + } + return nTotalHD; +} + +int GetControlledCelestialTotalHD(object oPC = OBJECT_SELF) +{ + int nTotalHD; + int i = 1; + object oSummonTest = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC, i); + while(GetIsObjectValid(oSummonTest)) + { + if(MyPRCGetRacialType(oSummonTest) == RACIAL_TYPE_OUTSIDER + && GetAlignmentGoodEvil(oSummonTest) == ALIGNMENT_GOOD) + nTotalHD += GetHitDice(oSummonTest); + if(DEBUG)FloatingTextStringOnCreature(GetName(oSummonTest)+" is summon number "+IntToString(i), oPC); + i++; + oSummonTest = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC, i); + } + return nTotalHD; +} + +//:: Handles psuedo-Foritifcation +void DoFortification(object oPC = OBJECT_SELF, int nFortification = 25) +{ + if(DEBUG) DoDebug("prc_inc_spells >> DoFortification() is running."); + + // Get or create the player's skin object + object oHide = GetPCSkin(oPC); + + int nRace = GetRacialType(oPC); + + //else if (nRace == RACIAL_TYPE_WARFORGED && !GetHasFeat(FEAT_IMPROVED_FORTIFICATION, oPC) && !GetHasFeat(FEAT_UNARMORED_BODY, oPC)) + if (nFortification == FORTIFICATION_LIGHT) + { + // Apply immunity properties for 1 seconds + if(DEBUG) DoDebug("Applying Light Fortification"); + IPSafeAddItemProperty(oHide, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS), 1.0f); + IPSafeAddItemProperty(oHide, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB), 1.0f); + + // Schedule the next toggle in 4 seconds + DelayCommand(4.0f, DoFortification(oPC, FORTIFICATION_LIGHT)); + } + + else if (nFortification == FORTIFICATION_MEDIUM) //nRace == RACIAL_TYPE_RETH_DEKALA) + { + // Apply immunity properties for 2 seconds + if(DEBUG) DoDebug("Applying Medium Fortification"); + IPSafeAddItemProperty(oHide, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS), 2.0f); + IPSafeAddItemProperty(oHide, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB), 2.0f); + + // Schedule the next toggle in 4 seconds + DelayCommand(4.0f, DoFortification(oPC, FORTIFICATION_MEDIUM)); + } + + //else if (nRace == RACIAL_TYPE_WARFORGED_CHARGER && !GetHasFeat(FEAT_IMPROVED_FORTIFICATION, oPC) && !GetHasFeat(FEAT_UNARMORED_BODY, oPC)) + else if (nFortification == FORTIFICATION_MODERATE) + { + // Apply immunity properties for 3 seconds + if(DEBUG) DoDebug("Applying Moderate Fortification"); + IPSafeAddItemProperty(oHide, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS), 3.0f); + IPSafeAddItemProperty(oHide, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB), 3.0f); + + // Schedule the next toggle in 4 seconds + DelayCommand(4.0f, DoFortification(oPC, FORTIFICATION_MODERATE)); + } + else if (nFortification == FORTIFICATION_HEAVY) + { + // Apply immunity properties permenently + if(DEBUG) DoDebug("Applying Heavy Fortification"); + IPSafeAddItemProperty(oHide, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS)); + IPSafeAddItemProperty(oHide, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB)); + } +} + + +// wrapper for DecrementRemainingSpellUses, works for newspellbook 'fake' spells too +// should also find and decrement metamagics for newspellbooks +void PRCDecrementRemainingSpellUses(object oCreature, int nSpell) +{ + if (!UseNewSpellBook(oCreature) && GetHasSpell(nSpell, oCreature)) + { + DecrementRemainingSpellUses(oCreature, nSpell); + return; + } + + int nClass, nSpellbookID, nCount, nMeta, i, j; + int nSpellbookType, nSpellLevel; + string sFile, sFeat; + for(i = 1; i <= 8; i++) + { + nClass = GetClassByPosition(i, oCreature); + sFile = GetFileForClass(nClass); + nSpellbookType = GetSpellbookTypeForClass(nClass); + nSpellbookID = RealSpellToSpellbookID(nClass, nSpell); + nMeta = RealSpellToSpellbookIDCount(nClass, nSpell); + if (nSpellbookID != -1) + { //non-spellbook classes should return -1 + for(j = nSpellbookID; j <= nSpellbookID + nMeta; j++) + { + sFeat = Get2DACache(sFile, "ReqFeat", j); + if(sFeat != "") + { + if(!GetHasFeat(StringToInt(sFeat), oCreature)) + continue; + } + nSpellLevel = StringToInt(Get2DACache(sFile, "Level", j)); + + if(nSpellbookType == SPELLBOOK_TYPE_PREPARED) + { + nCount = persistant_array_get_int(oCreature, "NewSpellbookMem_" + IntToString(nClass), j); + if(DEBUG) DoDebug("PRCDecrementRemainingSpellUses: NewSpellbookMem_" + IntToString(nClass) + "[" + IntToString(j) + "] = " + IntToString(nCount)); + if(nCount > 0) + { + persistant_array_set_int(oCreature, "NewSpellbookMem_" + IntToString(nClass), j, nCount - 1); + return; + } + } + else if(nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS) + { + nCount = persistant_array_get_int(oCreature, "NewSpellbookMem_" + IntToString(nClass), nSpellLevel); + if(DEBUG) DoDebug("PRCDecrementRemainingSpellUses: NewSpellbookMem_" + IntToString(nClass) + "[" + IntToString(j) + "] = " + IntToString(nCount)); + if(nCount > 0) + { + persistant_array_set_int(oCreature, "NewSpellbookMem_" + IntToString(nClass), nSpellLevel, nCount - 1); + return; + } + } + } + } + } + if(DEBUG) DoDebug("PRCDecrementRemainingSpellUses: Spell " + IntToString(nSpell) + " not found"); +} + +// +// This function determines if spell damage is elemental +// +int IsSpellDamageElemental(int nDamageType) +{ + return nDamageType & 2480;// 2480 = (DAMAGE_TYPE_ACID | DAMAGE_TYPE_COLD | DAMAGE_TYPE_ELECTRICAL | DAMAGE_TYPE_FIRE | DAMAGE_TYPE_SONIC) +} + + +// This function converts spell damage into the correct type +// TODO: Change the name to consistent (large churn project). +// +// Updated by: TiredByFirelight +int ChangedElementalDamage(object oCaster, int nDamageType) +{ + + // None of the stuff here works when items are involved + if (GetIsObjectValid(PRCGetSpellCastItem())) return nDamageType; + + int nNewType; + + //eldritch spellweave + if(GetIsObjectValid(GetLocalObject(oCaster, "SPELLWEAVE_TARGET"))) + { + int nEssence = GetLocalInt(oCaster, "BlastEssence"); + + if(nEssence == INVOKE_BRIMSTONE_BLAST) + nNewType = DAMAGE_TYPE_FIRE; + + else if(nEssence == INVOKE_HELLRIME_BLAST) + nNewType = DAMAGE_TYPE_COLD; + + else if(nEssence == INVOKE_UTTERDARK_BLAST) + nNewType = DAMAGE_TYPE_NEGATIVE; + + else if(nEssence == INVOKE_VITRIOLIC_BLAST) + nNewType = DAMAGE_TYPE_ACID; + + //save new type for other functions + if(nNewType) + SetLocalInt(oCaster, "archmage_mastery_elements", nNewType); + } + else + // Check if an override is set + nNewType = GetLocalInt(oCaster, "archmage_mastery_elements"); + + // If so, check if the spell qualifies for a change + if (!nNewType || !IsSpellDamageElemental(nDamageType)) + nNewType = nDamageType; + + if (GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster) >= 4 && ((nDamageType == DAMAGE_TYPE_COLD)||nNewType == DAMAGE_TYPE_COLD)) + { + nNewType = DAMAGE_TYPE_CUSTOM8; // Untyped + SendMessageToPC(oCaster, "Piercing Cold - Spell ignores resistance or immunities to cold."); + + } + + return nNewType; +} +/* int ChangedElementalDamage(object oCaster, int nDamageType) +{ + + // None of the stuff here works when items are involved + if (GetIsObjectValid(PRCGetSpellCastItem())) return nDamageType; + + int nNewType; + + //eldritch spellweave + if(GetIsObjectValid(GetLocalObject(oCaster, "SPELLWEAVE_TARGET"))) + { + int nEssence = GetLocalInt(oCaster, "BlastEssence"); + + if(nEssence == INVOKE_BRIMSTONE_BLAST) + nNewType = DAMAGE_TYPE_FIRE; + + else if(nEssence == INVOKE_HELLRIME_BLAST) + nNewType = DAMAGE_TYPE_COLD; + + else if(nEssence == INVOKE_UTTERDARK_BLAST) + nNewType = DAMAGE_TYPE_NEGATIVE; + + else if(nEssence == INVOKE_VITRIOLIC_BLAST) + nNewType = DAMAGE_TYPE_ACID; + + //save new type for other functions + if(nNewType) + SetLocalInt(oCaster, "archmage_mastery_elements", nNewType); + } + else + // Check if an override is set + nNewType = GetLocalInt(oCaster, "archmage_mastery_elements"); + + // If so, check if the spell qualifies for a change + if (!nNewType || !IsSpellDamageElemental(nDamageType)) + nNewType = nDamageType; + + return nNewType; +} + */ +//used in scripts after ChangedElementalDamage() to determine saving throw type +int ChangedSaveType(int nDamageType) +{ + switch(nDamageType) + { + case DAMAGE_TYPE_ACID: return SAVING_THROW_TYPE_ACID; + case DAMAGE_TYPE_COLD: return SAVING_THROW_TYPE_COLD; + case DAMAGE_TYPE_ELECTRICAL: return SAVING_THROW_TYPE_ELECTRICITY; + case DAMAGE_TYPE_FIRE: return SAVING_THROW_TYPE_FIRE; + case DAMAGE_TYPE_SONIC: return SAVING_THROW_TYPE_SONIC; + case DAMAGE_TYPE_DIVINE: return SAVING_THROW_TYPE_DIVINE; + case DAMAGE_TYPE_NEGATIVE: return SAVING_THROW_TYPE_NEGATIVE; + case DAMAGE_TYPE_POSITIVE: return SAVING_THROW_TYPE_POSITIVE; + } + return SAVING_THROW_TYPE_NONE;//if it ever gets here, than the function was used incorrectly +} + +// this is possibly used in variations elsewhere +int PRCGetElementalDamageType(int nDamageType, object oCaster = OBJECT_SELF) +{ + switch(nDamageType) + { + case DAMAGE_TYPE_ACID: + case DAMAGE_TYPE_COLD: + case DAMAGE_TYPE_ELECTRICAL: + case DAMAGE_TYPE_FIRE: + case DAMAGE_TYPE_SONIC: + nDamageType = ChangedElementalDamage(oCaster, nDamageType); + } + return nDamageType; +} + +int GetHasBaneMagic(int nRace) +{ + switch(nRace) + { + case RACIAL_TYPE_ABERRATION: return GetHasFeat(FEAT_BANE_MAGIC_ABERRATION); + case RACIAL_TYPE_ANIMAL: return GetHasFeat(FEAT_BANE_MAGIC_ANIMAL); + case RACIAL_TYPE_BEAST: return GetHasFeat(FEAT_BANE_MAGIC_BEAST); + case RACIAL_TYPE_CONSTRUCT: return GetHasFeat(FEAT_BANE_MAGIC_CONSTRUCT); + case RACIAL_TYPE_DRAGON: return GetHasFeat(FEAT_BANE_MAGIC_DRAGON); + case RACIAL_TYPE_DWARF: return GetHasFeat(FEAT_BANE_MAGIC_DWARF); + case RACIAL_TYPE_ELEMENTAL: return GetHasFeat(FEAT_BANE_MAGIC_ELEMENTAL); + case RACIAL_TYPE_ELF: return GetHasFeat(FEAT_BANE_MAGIC_ELF); + case RACIAL_TYPE_FEY: return GetHasFeat(FEAT_BANE_MAGIC_FEY); + case RACIAL_TYPE_GIANT: return GetHasFeat(FEAT_BANE_MAGIC_GIANT); + case RACIAL_TYPE_GNOME: return GetHasFeat(FEAT_BANE_MAGIC_GNOME); + case RACIAL_TYPE_HALFELF: return GetHasFeat(FEAT_BANE_MAGIC_HALFELF); + case RACIAL_TYPE_HALFLING: return GetHasFeat(FEAT_BANE_MAGIC_HALFLING); + case RACIAL_TYPE_HALFORC: return GetHasFeat(FEAT_BANE_MAGIC_HALFORC); + case RACIAL_TYPE_HUMAN: return GetHasFeat(FEAT_BANE_MAGIC_HUMAN); + case RACIAL_TYPE_HUMANOID_GOBLINOID: return GetHasFeat(FEAT_BANE_MAGIC_HUMANOID_GOBLINOID); + case RACIAL_TYPE_HUMANOID_MONSTROUS: return GetHasFeat(FEAT_BANE_MAGIC_HUMANOID_MONSTROUS); + case RACIAL_TYPE_HUMANOID_ORC: return GetHasFeat(FEAT_BANE_MAGIC_HUMANOID_ORC); + case RACIAL_TYPE_HUMANOID_REPTILIAN: return GetHasFeat(FEAT_BANE_MAGIC_HUMANOID_REPTILIAN); + case RACIAL_TYPE_MAGICAL_BEAST: return GetHasFeat(FEAT_BANE_MAGIC_MAGICAL_BEAST); + case RACIAL_TYPE_OUTSIDER: return GetHasFeat(FEAT_BANE_MAGIC_OUTSIDER); + case RACIAL_TYPE_SHAPECHANGER: return GetHasFeat(FEAT_BANE_MAGIC_SHAPECHANGER); + case RACIAL_TYPE_UNDEAD: return GetHasFeat(FEAT_BANE_MAGIC_UNDEAD); + case RACIAL_TYPE_VERMIN: return GetHasFeat(FEAT_BANE_MAGIC_VERMIN); + } + return FALSE; +} + +void DoPiercingCold(object oCaster, object oTarget, int nDamageAmount, int nCurrentHP) +{ + // Get change in HP from spell damage being applied + int nTest = nCurrentHP - GetCurrentHitPoints(oTarget); + // If there's no damage resistance, nTest and nDamageAmount should be equal + if (nDamageAmount > nTest) + { + // Apply the difference to ignore resist + effect eDam = EffectDamage(nDamageAmount - nTest, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_ENERGY); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); + effect eVis = EffectVisualEffect(VFX_IMP_FROST_L); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + //FloatingTextStringOnCreature("Piercing Cold Triggered", oCaster, FALSE); + } +} + +void BreakDR(object oCaster, object oTarget, int nDamageAmount, int nCurrentHP) +{ + // Get change in HP from spell damage being applied + int nTest = nCurrentHP - GetCurrentHitPoints(oTarget); + // If there's no damage resistance, nTest and nDamageAmount should be equal + if (nDamageAmount > nTest) + { + // Apply the difference to ignore resist + effect eDam = EffectDamage(nDamageAmount - nTest, DAMAGE_TYPE_POSITIVE, DAMAGE_POWER_ENERGY); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); + } +} + +effect PRCEffectDamage(object oTarget, int nDamageAmount, int nDamageType=DAMAGE_TYPE_MAGICAL, int nDamagePower=DAMAGE_POWER_NORMAL, int nMetaMagic=METAMAGIC_NONE) +{ + object oCaster = OBJECT_SELF; + + // Incorporeal creatures have a 50% chance of not being hurt by damage other than Magical/Divine/Negative + if (GetLocalInt(oTarget, "Incorporeal") && nDamageType != DAMAGE_TYPE_MAGICAL && nDamageType != DAMAGE_TYPE_NEGATIVE && nDamageType != DAMAGE_TYPE_DIVINE) + { + if (d2() == 1) // 50% chance + { + if (GetIsPC(oTarget)) + FloatingTextStringOnCreature("Spell missed due to Incorporeality", oTarget, FALSE); + effect eEffect; + return eEffect; // Null return + } + } + + // None of the stuff here works when items are involved + if (!GetIsObjectValid(PRCGetSpellCastItem())) + { + if(PRCGetLastSpellCastClass(oCaster) == CLASS_TYPE_WARMAGE && !GetLocalInt(oTarget, "WarmageEdgeDelay")) + { + // Warmage Edge + nDamageAmount += GetAbilityModifier(ABILITY_INTELLIGENCE); + if(GetHasFeat(FEAT_TYPE_EXTRA_EDGE)) + { + // Extra Edge feat. + nDamageAmount += (GetLevelByClass(CLASS_TYPE_WARMAGE) / 4) + 1; + } + SetLocalInt(oTarget, "WarmageEdgeDelay", TRUE); + DelayCommand(0.25, DeleteLocalInt(oTarget, "WarmageEdgeDelay")); + } + + if(GetHasSpellEffect(MELD_ARCANE_FOCUS, oCaster) && !GetLocalInt(oTarget, "ArcaneFocusDelay")) + { + nDamageAmount += 1 + GetEssentiaInvested(oCaster, MELD_ARCANE_FOCUS); + SetLocalInt(oTarget, "ArcaneFocusDelay", TRUE); + DelayCommand(0.25, DeleteLocalInt(oTarget, "ArcaneFocusDelay")); + if (DEBUG) DoDebug("ArcaneFocus Damage Applied"); + } + + // Thrall of Grazzt damage + nDamageAmount += SpellBetrayalDamage(oTarget, oCaster); + + int nRace = MyPRCGetRacialType(oTarget); + + //Bane Magic + if(GetHasBaneMagic(nRace)) + nDamageAmount += d6(2); + + //Eldritch Spellweave + if(oTarget == GetLocalObject(oCaster, "SPELLWEAVE_TARGET")) + { + //Bane blast essence is active ;) + if(nRace == ((GetLocalInt(oCaster, "EssenceData") >>> 16) & 0xFF) - 1) + { + DeleteLocalObject(oCaster, "SPELLWEAVE_TARGET"); + nDamageAmount += d6(2); + } + } + + // Piercing Evocation + if(GetHasFeat(FEAT_PIERCING_EVOCATION) && GetLocalInt(oCaster, "X2_L_LAST_SPELLSCHOOL_VAR") == SPELL_SCHOOL_EVOCATION) + { + // Elemental damage only + if(IsSpellDamageElemental(nDamageType)) + { + // Damage magical, max 10 to magical + if(nDamageAmount > 10) + { + nDamageAmount -= 10; + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(10), oTarget); + } + else + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamageAmount), oTarget); + effect eEffect; + return eEffect; // Null return + } + } + } + + // This is done here so it affects all spells + if(GetLocalInt(oCaster, "Diabolism")) + { + //FloatingTextStringOnCreature("Diabolism is active", oCaster, FALSE); + int iDiabolistLevel = GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster); + DelayCommand(3.0, DeleteLocalInt(oCaster, "Diabolism")); + + if(iDiabolistLevel) + { + int nDice = (iDiabolistLevel + 5) / 5; + int nDamage = d6(nDice); + int nDamageType = DAMAGE_TYPE_DIVINE; + + if(GetLocalInt(oCaster, "VileDiabolism")) + { + //FloatingTextStringOnCreature("Vile Diabolism is active", oCaster, FALSE); + nDamage /= 2; + nDamageType = DAMAGE_TYPE_POSITIVE; + DeleteLocalInt(oCaster, "VileDiabolism"); + } + + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage, nDamageType), oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_LOS_EVIL_10), oTarget); + } + } + + //:: Get the current spell being cast + int nCurrentSpell = PRCGetSpellId(); + + //:: Skip Reserve Feat spellIDs + if (nCurrentSpell < 19359 || nCurrentSpell > 19396) + { + //:: Piercing Cold for the Frost Mage + if (GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster) >= 4 && nDamageType == DAMAGE_TYPE_COLD) + { + int nCurrentHP = GetCurrentHitPoints(oTarget); + DelayCommand(0.1, DoPiercingCold(oCaster, oTarget, nDamageAmount, nCurrentHP)); + } + } + +/* // Piercing Cold for the Frost Mage + if (GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster) >= 4 && nDamageType == DAMAGE_TYPE_COLD) + { + int nCurrentHP = GetCurrentHitPoints(oTarget); + DelayCommand(0.1, DoPiercingCold(oCaster, oTarget, nDamageAmount, nCurrentHP)); + } */ + + // Die DR die + if (GetLocalInt(oCaster, "MoveIgnoreDR")) + { + int nCurrentHP = GetCurrentHitPoints(oTarget); + DelayCommand(0.1, BreakDR(oCaster, oTarget, nDamageAmount, nCurrentHP)); + } + } + + // Frostrager heals on cold damage when raging. 1 heal for every 2 cold damage. + if (GetLocalInt(oTarget, "Frostrage") && nDamageType == DAMAGE_TYPE_COLD) + { + nDamageAmount /= 2; + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(nDamageAmount), oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FROST_L), oTarget); + + FloatingTextStringOnCreature("Absorb Cold healed " + IntToString(nDamageAmount), oTarget, FALSE); + effect eEffect; + return eEffect; //Doesn't hurt him + } + // Phoenix Belt gains fast healing when hit by fire damage + if (GetHasSpellEffect(MELD_PHOENIX_BELT, oTarget) && nDamageType == DAMAGE_TYPE_FIRE) + { + int nEssentia = GetEssentiaInvested(oTarget, MELD_PHOENIX_BELT); + int nResist = nEssentia * 5; + int nDur; + if (nDamageAmount >= nResist) nDur = nResist; + else nDur = nDamageAmount; + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectRegenerate(1, 6.0), oTarget, RoundsToSeconds(nDur+1)); + } + + return EffectDamage(nDamageAmount, nDamageType, nDamagePower); +} + +// * Kovi. removes any effects from this type of spell +// * i.e., used in Mage Armor to remove any previous +// * mage armors +void PRCRemoveEffectsFromSpell(object oTarget, int SpellID) +{ + effect eLook = GetFirstEffect(oTarget); + while(GetIsEffectValid(eLook)) + { + if(GetEffectSpellId(eLook) == SpellID) + RemoveEffect(oTarget, eLook); + + eLook = GetNextEffect(oTarget); + } +} + +void PRCRemoveSpecificEffect(int nEffectTypeID, object oTarget) +{ + //Search through the valid effects on the target. + effect eAOE = GetFirstEffect(oTarget); + while (GetIsEffectValid(eAOE)) + { + if (GetEffectType(eAOE) == nEffectTypeID) + { + //If the effect was created by the spell then remove it + RemoveEffect(oTarget, eAOE); + } + //Get next effect on the target + eAOE = GetNextEffect(oTarget); + } +} + +effect PRCGetScaledEffect(effect eStandard, object oTarget) +{ + int nDiff = GetGameDifficulty(); + int nEffType = GetEffectType(eStandard); + + if(GetIsPC(oTarget) || GetIsPC(GetMaster(oTarget))) + { + if(nEffType == EFFECT_TYPE_FRIGHTENED) + { + if(nDiff == GAME_DIFFICULTY_VERY_EASY) + { + return EffectAttackDecrease(-2); + } + else if(nDiff == GAME_DIFFICULTY_EASY) + { + return EffectAttackDecrease(-4); + } + } + if(nDiff == GAME_DIFFICULTY_VERY_EASY && + (nEffType == EFFECT_TYPE_PARALYZE || + nEffType == EFFECT_TYPE_STUNNED || + nEffType == EFFECT_TYPE_CONFUSED)) + { + return EffectDazed(); + } + if(nEffType == EFFECT_TYPE_CHARMED + || nEffType == EFFECT_TYPE_DOMINATED) + { + return EffectDazed(); + } + } + return eStandard; +} + +int PRCAmIAHumanoid(object oTarget) +{ + int nRacial = MyPRCGetRacialType(oTarget); + if(nRacial == RACIAL_TYPE_DWARF + || nRacial == RACIAL_TYPE_HALFELF + || nRacial == RACIAL_TYPE_HALFORC + || nRacial == RACIAL_TYPE_ELF + || nRacial == RACIAL_TYPE_GNOME + || nRacial == RACIAL_TYPE_HUMANOID_GOBLINOID + || nRacial == RACIAL_TYPE_HALFLING + || nRacial == RACIAL_TYPE_HUMAN + || nRacial == RACIAL_TYPE_HUMANOID_MONSTROUS + || nRacial == RACIAL_TYPE_HUMANOID_ORC + || nRacial == RACIAL_TYPE_HUMANOID_REPTILIAN) + { + return TRUE; + } + return FALSE; +} + +int PRCGetScaledDuration(int nActualDuration, object oTarget) +{ + int nDiff = GetGameDifficulty(); + int nNew = nActualDuration; + if(GetIsPC(oTarget) && nActualDuration > 3) + { + if(nDiff == GAME_DIFFICULTY_VERY_EASY + || nDiff == GAME_DIFFICULTY_EASY) + { + nNew = nActualDuration / 4; + } + else if(nDiff == GAME_DIFFICULTY_NORMAL) + { + nNew = nActualDuration / 2; + } + if(nNew == 0) + { + nNew = 1; + } + } + return nNew; +} + +effect PRCCreateProtectionFromAlignmentLink(int nAlignment, int nPower = 1) +{ + int nFinal = nPower * 2; + int nAlignmentLC; + int nAlignmentGE; + effect eDur; + + switch(nAlignment) + { + case ALIGNMENT_LAWFUL:{ + nAlignmentLC = ALIGNMENT_LAWFUL; + nAlignmentGE = ALIGNMENT_ALL; + eDur = EffectVisualEffect(VFX_DUR_PROTECTION_EVIL_MINOR); + break;} + case ALIGNMENT_CHAOTIC:{ + nAlignmentLC = ALIGNMENT_CHAOTIC; + nAlignmentGE = ALIGNMENT_ALL; + eDur = EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MINOR); + break;} + case ALIGNMENT_GOOD:{ + nAlignmentLC = ALIGNMENT_ALL; + nAlignmentGE = ALIGNMENT_GOOD; + eDur = EffectVisualEffect(VFX_DUR_PROTECTION_EVIL_MINOR); + break;} + case ALIGNMENT_EVIL:{ + nAlignmentLC = ALIGNMENT_ALL; + nAlignmentGE = ALIGNMENT_EVIL; + eDur = EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MINOR); + break;} + } + + //construct final effect + effect eLink = EffectACIncrease(nFinal, AC_DEFLECTION_BONUS); + eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, nFinal)); + eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_MIND_SPELLS)); + //make it vs alignment + eLink = VersusAlignmentEffect(eLink, nAlignmentLC, nAlignmentGE); + //add duration vfx + eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE)); + eLink = EffectLinkEffects(eLink, eDur); + + return eLink; +} + +float PRCGetSpellEffectDelay(location SpellTargetLocation, object oTarget) +{ + float fDelay = GetDistanceBetweenLocations(SpellTargetLocation, GetLocation(oTarget))/20; + return fDelay; +} + +// * returns true if the creature has flesh +int PRCIsImmuneToPetrification(object oCreature) +{ + int nAppearance = GetAppearanceType(oCreature); + int bImmune = FALSE; + + if (GetHasSpellEffect(VESTIGE_HAAGENTI, oCreature) && GetLocalInt(oCreature, "ExploitVestige") != VESTIGE_HAAGENTI_IMMUNE_TRANS) bImmune = TRUE; + + switch (nAppearance) + { + case APPEARANCE_TYPE_BASILISK: + case APPEARANCE_TYPE_COCKATRICE: + case APPEARANCE_TYPE_MEDUSA: + case APPEARANCE_TYPE_ALLIP: + case APPEARANCE_TYPE_ELEMENTAL_AIR: + case APPEARANCE_TYPE_ELEMENTAL_AIR_ELDER: + case APPEARANCE_TYPE_ELEMENTAL_EARTH: + case APPEARANCE_TYPE_ELEMENTAL_EARTH_ELDER: + case APPEARANCE_TYPE_ELEMENTAL_FIRE: + case APPEARANCE_TYPE_ELEMENTAL_FIRE_ELDER: + case APPEARANCE_TYPE_ELEMENTAL_WATER: + case APPEARANCE_TYPE_ELEMENTAL_WATER_ELDER: + case APPEARANCE_TYPE_GOLEM_STONE: + case APPEARANCE_TYPE_GOLEM_IRON: + case APPEARANCE_TYPE_GOLEM_CLAY: + case APPEARANCE_TYPE_GOLEM_BONE: + case APPEARANCE_TYPE_GORGON: + case APPEARANCE_TYPE_HEURODIS_LICH: + case APPEARANCE_TYPE_LANTERN_ARCHON: + case APPEARANCE_TYPE_SHADOW: + case APPEARANCE_TYPE_SHADOW_FIEND: + case APPEARANCE_TYPE_SHIELD_GUARDIAN: + case APPEARANCE_TYPE_SKELETAL_DEVOURER: + case APPEARANCE_TYPE_SKELETON_CHIEFTAIN: + case APPEARANCE_TYPE_SKELETON_COMMON: + case APPEARANCE_TYPE_SKELETON_MAGE: + case APPEARANCE_TYPE_SKELETON_PRIEST: + case APPEARANCE_TYPE_SKELETON_WARRIOR: + case APPEARANCE_TYPE_SKELETON_WARRIOR_1: + case APPEARANCE_TYPE_SPECTRE: + case APPEARANCE_TYPE_WILL_O_WISP: + case APPEARANCE_TYPE_WRAITH: + case APPEARANCE_TYPE_BAT_HORROR: + case 405: // Dracolich: + case 415: // Alhoon + case 418: // shadow dragon + case 420: // mithral golem + case 421: // admantium golem + case 430: // Demi Lich + case 469: // animated chest + case 474: // golems + case 475: // golems + bImmune = TRUE; + } + + int nRacialType = MyPRCGetRacialType(oCreature); + switch(nRacialType) + { + case RACIAL_TYPE_ELEMENTAL: + case RACIAL_TYPE_CONSTRUCT: + case RACIAL_TYPE_OOZE: + case RACIAL_TYPE_UNDEAD: + bImmune = TRUE; + } + + // 01/08/07 Racial feat for petrification immunity + if(GetHasFeat(FEAT_IMMUNE_PETRIFICATION)) bImmune = TRUE; + + // 03/07/2005 CraigW - Petrification immunity can also be granted as an item property. + if ( ResistSpell(OBJECT_SELF,oCreature) == 2 ) + { + bImmune = TRUE; + } + + // * GZ: Sept 2003 - Prevent people from petrifying DM, resulting in GUI even when + // effect is not successful. + if (!GetPlotFlag(oCreature) && GetIsDM(oCreature)) + { + bImmune = FALSE; + } + return bImmune; +} + +// * This is a wrapper for how Petrify will work in Expansion Pack 1 +// * Scripts affected: flesh to stone, breath petrification, gaze petrification, touch petrification +// * nPower : This is the Hit Dice of a Monster using Gaze, Breath or Touch OR it is the Caster Spell of +// * a spellcaster +// * nFortSaveDC: pass in this number from the spell script +void PRCDoPetrification(int nPower, object oSource, object oTarget, int nSpellID, int nFortSaveDC) +{ + + if(!GetIsReactionTypeFriendly(oTarget)) + { + // * exit if creature is immune to petrification + if(PRCIsImmuneToPetrification(oTarget)) + return; + + float fDifficulty = 0.0; + int bIsPC = GetIsPC(oTarget); + int bShowPopup = FALSE; + + // * calculate Duration based on difficulty settings + int nGameDiff = GetGameDifficulty(); + switch (nGameDiff) + { + case GAME_DIFFICULTY_VERY_EASY: + case GAME_DIFFICULTY_EASY: + case GAME_DIFFICULTY_NORMAL: + fDifficulty = RoundsToSeconds(nPower); // One Round per hit-die or caster level + break; + case GAME_DIFFICULTY_CORE_RULES: + case GAME_DIFFICULTY_DIFFICULT: + bShowPopup = TRUE; + break; + } + + int nSaveDC = nFortSaveDC; + effect ePetrify = EffectPetrify(); + + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + + effect eLink = EffectLinkEffects(eDur, ePetrify); + + // Let target know the negative spell has been cast + SignalEvent(oTarget, + EventSpellCastAt(OBJECT_SELF, nSpellID)); + //SpeakString(IntToString(nSpellID)); + + // Do a fortitude save check + if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nSaveDC)) + { + // Save failed; apply paralyze effect and VFX impact + + /// * The duration is permanent against NPCs but only temporary against PCs + if (bIsPC == TRUE) + { + if (bShowPopup == TRUE) + { + // * under hardcore rules or higher, this is an instant death + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget); + //only pop up death panel if switch is not set + if(!GetPRCSwitch(PRC_NO_PETRIFY_GUI)) + DelayCommand(2.75, PopUpDeathGUIPanel(oTarget, FALSE , TRUE, 40579)); + //run the PRC Ondeath code + //no way to run the normal module ondeath code too + //so a execute script has been added for builders to take advantage of + DelayCommand(2.75, ExecuteScript("prc_ondeath", oTarget)); + DelayCommand(2.75, ExecuteScript("prc_pw_petrific", oTarget)); + // if in hardcore, treat the player as an NPC + bIsPC = FALSE; + //fDifficulty = TurnsToSeconds(nPower); // One turn per hit-die + } + else + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDifficulty); + } + else + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget); + } + // April 2003: Clearing actions to kick them out of conversation when petrified + AssignCommand(oTarget, ClearAllActions(TRUE)); + } + } + +} + +//------------------------------------------------------------------------------ +// GZ: 2003-Oct-15 +// A different approach for timing these spells that has the positive side +// effects of making the spell dispellable as well. +// I am using the VFX applied by the spell to track the remaining duration +// instead of adding the remaining runtime on the stack +// +// This function returns FALSE if a delayed Spell effect from nSpell_ID has +// expired. See x2_s0_bigby4.nss for details +//------------------------------------------------------------------------------ +int PRCGetDelayedSpellEffectsExpired(int nSpell_ID, object oTarget, object oCaster) +{ + + if (!GetHasSpellEffect(nSpell_ID,oTarget) ) + { + DeleteLocalInt(oTarget,"XP2_L_SPELL_SAVE_DC_" + IntToString (nSpell_ID)); + return TRUE; + } + + //-------------------------------------------------------------------------- + // GZ: 2003-Oct-15 + // If the caster is dead or no longer there, cancel the spell, as it is + // directed + //-------------------------------------------------------------------------- + if( !GetIsObjectValid(oCaster)) + { + GZPRCRemoveSpellEffects(nSpell_ID, oTarget); + DeleteLocalInt(oTarget,"XP2_L_SPELL_SAVE_DC_" + IntToString (nSpell_ID)); + return TRUE; + } + + if (GetIsDead(oCaster)) + { + DeleteLocalInt(oTarget,"XP2_L_SPELL_SAVE_DC_" + IntToString (nSpell_ID)); + GZPRCRemoveSpellEffects(nSpell_ID, oTarget); + return TRUE; + } + + return FALSE; + +} + +// Much similar to PRCGetHasSpell, but used for JPM to get spells left not counting metamagic +int PRCGetSpellUsesLeft(int nRealSpellID, object oCreature = OBJECT_SELF) +{ + if(!PRCGetIsRealSpellKnown(nRealSpellID, oCreature)) + return 0; + int nUses = GetHasSpell(nRealSpellID, oCreature); + + int nClass, nSpellbookID, nCount, i, j; + int nSpellbookType, nSpellLevel; + string sFile, sFeat; + for(i = 1; i <= 8; i++) + { + nClass = GetClassByPosition(i, oCreature); + sFile = GetFileForClass(nClass); + nSpellbookType = GetSpellbookTypeForClass(nClass); + nSpellbookID = RealSpellToSpellbookID(nClass, nRealSpellID); + if (nSpellbookID != -1) + { //non-spellbook classes should return -1 + sFeat = Get2DACache(sFile, "ReqFeat", j); + if(sFeat != "") + { + if(!GetHasFeat(StringToInt(sFeat), oCreature)) + continue; + } + if(nSpellbookType == SPELLBOOK_TYPE_PREPARED) + { + nCount = persistant_array_get_int(oCreature, "NewSpellbookMem_" + IntToString(nClass), j); + if(DEBUG) DoDebug("PRCGetHasSpell(Prepared Caster): NewSpellbookMem_" + IntToString(nClass) + "[" + IntToString(j) + "] = " + IntToString(nCount)); + if(nCount > 0) + { + nUses += nCount; + } + } + else if(nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS) + { + nSpellLevel = StringToInt(Get2DACache(sFile, "Level", j)); + nCount = persistant_array_get_int(oCreature, "NewSpellbookMem_" + IntToString(nClass), nSpellLevel); + if(DEBUG) DoDebug("PRCGetHasSpell(Spontaneous Caster): NewSpellbookMem_" + IntToString(nClass) + "[" + IntToString(j) + "] = " + IntToString(nCount)); + if(nCount > 0) + { + nUses += nCount; + } + } + } + } + + if(DEBUG) DoDebug("PRCGetHasSpell: RealSpellID = " + IntToString(nRealSpellID) + ", Uses = " + IntToString(nUses)); + return nUses; +} + +// * Applies the effects of FEAT_AUGMENT_SUMMON to summoned creatures. +void AugmentSummonedCreature(string sResRef) +{ + if(GetHasFeat(FEAT_AUGMENT_SUMMON)) + { + int i = 1; + object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, OBJECT_SELF); + while(GetIsObjectValid(oSummon)) + { + if(GetResRef(oSummon) == sResRef && !GetLocalInt(oSummon, "Augmented")) + { + effect eLink = EffectAbilityIncrease(ABILITY_STRENGTH, 4); + eLink = EffectLinkEffects(eLink, EffectAbilityIncrease(ABILITY_CONSTITUTION, 4)); + eLink = UnyieldingEffect(eLink); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oSummon); + SetLocalInt(oSummon, "Augmented", TRUE); + } + i++; + oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, OBJECT_SELF, i); + } + } + if(sResRef == "prc_sum_treant") + { + int i = 1; + object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, OBJECT_SELF); + while(GetIsObjectValid(oSummon)) + { + if(GetResRef(oSummon) == sResRef) + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_PROT_BARKSKIN), oSummon); + } + i++; + oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, OBJECT_SELF, i); + } + } + if(GetHasFeat(FEAT_BECKON_THE_FROZEN)) + { + int i = 1; + object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, OBJECT_SELF); + while(GetIsObjectValid(oSummon)) + { + if(GetResRef(oSummon) == sResRef && !GetLocalInt(oSummon, "BeckonTheFrozen")) + { + effect eLink = EffectVisualEffect(VFX_DUR_CHILL_SHIELD); + eLink = EffectLinkEffects(eLink, EffectDamageImmunityDecrease(DAMAGE_TYPE_FIRE, 50)); + eLink = EffectLinkEffects(eLink, EffectDamageImmunityIncrease(DAMAGE_TYPE_COLD, 100)); + eLink = EffectLinkEffects(eLink, EffectDamageIncrease(DAMAGE_BONUS_1d6, DAMAGE_TYPE_COLD)); + eLink = UnyieldingEffect(eLink); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oSummon); + SetLocalInt(oSummon, "BeckonTheFrozen", TRUE); + } + i++; + oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, OBJECT_SELF, i); + } + } +} + +object GetAreaOfEffectObject(location lTarget, string sTag, object oCaster = OBJECT_SELF) +{ + object oAoE = GetFirstObjectInShape(SHAPE_SPHERE, 1.0f, lTarget, FALSE, OBJECT_TYPE_AREA_OF_EFFECT); + while(GetIsObjectValid(oAoE)) + { + if((GetAreaOfEffectCreator(oAoE) == oCaster) //was created by oCaster + && GetTag(oAoE) == sTag //has required tag + && !GetLocalInt(oAoE, "X2_AoE_BaseSaveDC")) //and wasn't setup before + { + return oAoE; + } + oAoE = GetNextObjectInShape(SHAPE_SPHERE, 1.0f, lTarget, FALSE, OBJECT_TYPE_AREA_OF_EFFECT); + } + return OBJECT_INVALID; +} + +string GetAreaOfEffectTag(int nAoE) +{ + return Get2DACache("vfx_persistent", "LABEL", nAoE); +} + +int CheckTurnUndeadUses(object oPC, int nUses) +{ + int i; + while(i < nUses) + { + if(GetHasFeat(FEAT_TURN_UNDEAD, oPC)) + { + DecrementRemainingFeatUses(oPC, FEAT_TURN_UNDEAD); + i++; + } + else + break; + } + if(i < nUses) + { + while(i) + { + IncrementRemainingFeatUses(oPC, FEAT_TURN_UNDEAD); + i--; + } + return FALSE; + } + return TRUE; +} + +// this will execute the prespellcastcode, whose full functionality is incoded in X2PreSpellCastCode2(), +// as a script, to save loading time for spells scripts and reduce memory usage of NWN +// the prespellcode takes up roughly 250 kByte compiled code, meaning that every spell script that +// calls it directly as a function (e.g.: X2PreSpellCastCode2) will be between 100 kByte to 250 kByte +// larger, than a spell script calling the prespellcode via ExecuteScript (e.g. X2PreSpellCastCode) +// Although ExecuteScript is slightly slower than a direct function call, quite likely overall performance is +// increased, because for every new spell 100-250 kByte less code need to be loaded into memory +// and NWN has more free memory available to keep more spells scripts (and other crucial scripts) +//in RAM + +int X2PreSpellCastCode() +{ + object oCaster = OBJECT_SELF; + + // SetLocalInt(oCaster, "PSCC_Ret", 0); + ExecuteScript("prc_prespell", oCaster); + + int nReturn = GetLocalInt(oCaster, "PSCC_Ret"); + // DeleteLocalInt(oCaster, "PSCC_Ret"); + + return nReturn; +} + +//:: Test Void +// void main (){} \ No newline at end of file diff --git a/src/include/prc_inc_stunfist.nss b/src/include/prc_inc_stunfist.nss new file mode 100644 index 0000000..748367f --- /dev/null +++ b/src/include/prc_inc_stunfist.nss @@ -0,0 +1,191 @@ +///////////////////////////////////////////////////////////////// +// notes: +// "normal" stunning fist uses are what is normally given, not taking into account the PrC +// "extra" stunning fist uses are what uses that come from PrC classes, they can be converted into "normal" uses and dont do anything by themselves +// this is to work around the hardcoded limit of the "normal" stunning fist uses + +// Try to expend a number of stunning fist uses, returns true if succesfull +int ExpendStunfistUses(object oPC, int nUses); + +// Reset extra stunning fist uses to the extra uses/day a character has (use on rest) +void ResetExtraStunfistUses(object oPC); + +// Get remaining "normal" stunning fist uses +int GetNormalRemainingStunfistUses(object oPC); + +// Get remaining "extra" stunning fist uses +int GetExtraRemainingStunfistUses(object oPC); + +// Get total remaining stunning fist uses +int GetTotalRemainingStunfistUses(object oPC); + +// Get amount of "normal" stunning fist uses/day a character has +int GetNormalStunfistUsesPerDay(object oPC); + +// Get amount of "extra" stunning fist uses/day a character has +int GetExtraStunfistUsesPerDay(object oPC); + +// Get total amount of stunning fist uses/day a character has +int GetTotalStunFistUsesPerDay(object oPC); + +// Set remaining "normal" stunning fist uses +void SetNormalRemainingStunfistUses(object oPC, int nUses); + +// Set remaining "extra" stunning fist uses +void SetExtraRemainingStunfistUses(object oPC, int nUses); + +// Convert "extra" stunning fist uses to "normal" (BW) stunning fist uses +void ConvertStunFistUses(object oPC); + +//================================ + +// Minimalist includes + +#include "prc_feat_const" +#include "prc_class_const" +#include "inc_item_props" +#include "prc_ipfeat_const" +//#include "prc_alterations" + +// Try to expend a number of stunning fist uses, returns true if succesfull +int ExpendStunfistUses(object oPC, int nUses) +{ + if (GetTotalRemainingStunfistUses(oPC) < nUses) + { + SendMessageToPC(oPC, "You don't have enough uses for this feat!"); + return FALSE; + } + + ConvertStunFistUses(oPC); + + while (nUses) + { + nUses--; + DecrementRemainingFeatUses(oPC, FEAT_STUNNING_FIST); + ConvertStunFistUses(oPC); + } + + return TRUE; +} + +// Reset extra stunning fist uses to the extra uses/day a character has (use on rest) +void ResetExtraStunfistUses(object oPC) +{ + object oSkin = GetPCSkin(oPC); + int nUses = GetExtraStunfistUsesPerDay(oPC); + + if (nUses && !GetLocalInt(oPC, "PRCExtraStunningMessage")) + { + SetLocalInt(oPC, "PRCExtraStunningMessage", TRUE); + DelayCommand(3.001f, SendMessageToPC(oPC, "You gained extra stunning fist uses per day, use the feat 'PrC Extra Stunning'")); + DelayCommand(3.002f, SendMessageToPC(oPC, "to convert those uses into normal stunning fist uses")); + } + + SetExtraRemainingStunfistUses(oPC, nUses); +} + +void ConvertStunFistUses(object oPC) +{ + while (GetNormalRemainingStunfistUses(oPC) < GetNormalStunfistUsesPerDay(oPC) && GetHasFeat(FEAT_PRC_EXTRA_STUNNING, oPC)) + { + IncrementRemainingFeatUses(oPC, FEAT_STUNNING_FIST); + DecrementRemainingFeatUses(oPC, FEAT_PRC_EXTRA_STUNNING); + } +} + +// Get remaining "normal" stunning fist uses +int GetNormalRemainingStunfistUses(object oPC) +{ + int nUses = 0; + while (GetHasFeat(FEAT_STUNNING_FIST, oPC)) + { + nUses++; + DecrementRemainingFeatUses(oPC, FEAT_STUNNING_FIST); + } + + SetNormalRemainingStunfistUses(oPC, nUses); + return nUses; +} + +// Get remaining "extra" stunning fist uses +int GetExtraRemainingStunfistUses(object oPC) +{ + int nUses = 0; + while (GetHasFeat(FEAT_PRC_EXTRA_STUNNING, oPC)) + { + nUses++; + DecrementRemainingFeatUses(oPC, FEAT_PRC_EXTRA_STUNNING); + } + + SetExtraRemainingStunfistUses(oPC, nUses); + + return nUses; +} + +// Get total remaining stunning fist uses +int GetTotalRemainingStunfistUses(object oPC) +{ + return GetNormalRemainingStunfistUses(oPC) + GetExtraRemainingStunfistUses(oPC); +} + +// Get amount of "normal" stunning fist uses/day a character has +int GetNormalStunfistUsesPerDay(object oPC) +{ + int nUses = GetNormalRemainingStunfistUses(oPC); + int nMaxUses = nUses; + while (nMaxUses == GetNormalRemainingStunfistUses(oPC)) + { + IncrementRemainingFeatUses(oPC, FEAT_STUNNING_FIST); + nMaxUses++; + } + nMaxUses--; + SetNormalRemainingStunfistUses(oPC, nUses); + return nMaxUses; +} + +// Get amount of "extra" stunning fist uses/day a character has +int GetExtraStunfistUsesPerDay(object oPC) +{ + int nUses = 0; + + // classes/effects which give extra stunning fist uses/day should be added here + nUses += GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oPC); + nUses += GetLevelByClass(CLASS_TYPE_SHADOW_SUN_NINJA, oPC); + nUses += GetLocalInt(oPC, "LiPengStun"); + + return nUses; +} + +// Get total amount of stunning fist uses/day a character has +int GetTotalStunFistUsesPerDay(object oPC) +{ + return GetNormalStunfistUsesPerDay(oPC) + GetExtraStunfistUsesPerDay(oPC); +} + +// Set remaining "normal" stunning fist uses +void SetNormalRemainingStunfistUses(object oPC, int nUses) +{ + while (GetHasFeat(FEAT_STUNNING_FIST, oPC)) + { + DecrementRemainingFeatUses(oPC, FEAT_STUNNING_FIST); + } + + while (nUses--) + { + IncrementRemainingFeatUses(oPC, FEAT_STUNNING_FIST); + } +} + +// Set remaining "extra" stunning fist uses +void SetExtraRemainingStunfistUses(object oPC, int nUses) +{ + while (GetHasFeat(FEAT_PRC_EXTRA_STUNNING, oPC)) + { + DecrementRemainingFeatUses(oPC, FEAT_PRC_EXTRA_STUNNING); + } + + while (nUses--) + { + IncrementRemainingFeatUses(oPC, FEAT_PRC_EXTRA_STUNNING); + } +} \ No newline at end of file diff --git a/src/include/prc_inc_switch.nss b/src/include/prc_inc_switch.nss new file mode 100644 index 0000000..4913e3d --- /dev/null +++ b/src/include/prc_inc_switch.nss @@ -0,0 +1,2969 @@ +/** + * @file + * This file defines names of switches that can be used to modify + * the behaviour of certain parts of the PRC pack. + * It also contains functions for getting and setting the values of + * these switches and in addition some functions dealing with the + * implementation of certain switches. + */ + + /* + + Creating your personal switch settings + For singleplayer, you can create a 2da file and place it in the overide + Then via the PRC Options switch you can read that 2da and it will + use it to set switches for you. + This will not work in multiplayer. + An example is below. Copy and paste it into a plain text file saved + as personal_switch.2da + + If there is a file named personal_switch.2da then it will be loaded + at module load and the switches set accordingly. + + +2DA V2.0 + + SwitchName SwitchType SwitchValue +0 FOO float 3.14159 +1 BAR int 12321 +2 BAZ string "Go For The Eyes Boo, Go For The Eyes!" +3 PRC_PNP_TRUESEEING int 1 +4 PRC_TIMESTOP_LOCAL int 1 +5 PRC_TIMESTOP_NO_HOSTILE int 1 +6 PRC_TIMESTOP_BLANK_PC int 1 +7 PRC_PNP_ELEMENTAL_SWARM int 1 +8 PRC_PNP_TENSERS_TRANSFORMATION int 1 +9 PRC_PNP_BLACK_BLADE_OF_DISASTER int 1 +10 PRC_PNP_FIND_TRAPS int 1 +11 PRC_PNP_DARKNESS int 1 +12 PRC_PNP_DARKNESS_35ED int 1 +13 PRC_PNP_ANIMATE_DEAD int 1 +14 PRC_35ED_WORD_OF_FAITH int 1 +15 PRC_CREATE_UNDEAD_UNCONTROLLED int 1 +16 PRC_CREATE_UNDEAD_PERMANENT int 1 +17 PRC_SLEEP_NO_HD_CAP int 1 +18 PRC_USE_NEW_IMBUE_ARROW int 1 +19 PRC_ORC_WARLORD_COHORT int 1 +20 PRC_LICH_ALTER_SELF_DISABLE int 1 +21 PRC_TRUE_NECROMANCER_ALTERNATE_VISUAL int 1 +22 PRC_THRALLHERD_LEADERSHIP int 1 +23 PRC_PNP_UNIMPINGED int 1 +24 PRC_PNP_IMPENETRABILITY int 1 +25 PRC_PNP_DULLBLADES int 1 +26 PRC_PNP_CHAMPIONS_VALOR int 1 +27 PRC_STAFF_CASTER_LEVEL int 1 +28 PRC_PNP_ABILITY_DAMAGE_EFFECTS int 1 +29 PRC_PNP_REST_HEALING int 1 +30 PRC_PNP_SOMATIC_COMPOMENTS int 1 +31 PRC_PNP_SOMATIC_ITEMS int 1 +32 PRC_MULTISUMMON int 1 +33 PRC_SUMMON_ROUND_PER_LEVEL int 1 +34 PRC_PNP_FAMILIAR_FEEDING int 1 +35 PRC_PNP_HOLY_AVENGER_IPROP int 1 +36 PRC_PNP_SLINGS int 1 +37 PRC_PNP_RACIAL_SPEED int 1 +38 PRC_PNP_ARMOR_SPEED int 1 +39 PRC_REMOVE_PLAYER_SPEED int 1 +40 PRC_BREW_POTION_CASTER_LEVEL int 1 +41 PRC_SCRIBE_SCROLL_CASTER_LEVEL int 1 +42 PRC_CRAFT_WAND_CASTER_LEVEL int 1 +43 PRC_CRAFTING_BASE_ITEMS int 1 +44 PRC_XP_USE_SIMPLE_LA int 1 +45 PRC_XP_USE_SIMPLE_RACIAL_HD int 1 + */ + + /* This variable MUST be updated with every new version of the PRC!!! */ + + const string PRC_VERSION = "PRC 3.9.0"; + + /* This variable MUST be updated every time 'assemble_spellbooks.bat' is run!!! */ + + const string AMS_VERSION = "AMS_1.7.6"; + +/******************************************************************************\ +* Spell switches * +\******************************************************************************/ + +/** Material Components + * Set switch to 1 to activate this + * This allows material components in NWN through the materialcomp.2da + * Just put the SpellID and UTC resref in, MINUS the .utc on the end. + * This also requires the names of the items, formatted like so ("" included): "Object Name" + * + * Set switch to 2 to activate this + * Deducts gold instead of requiring material components + * Put the gold value in the Cost column + + * Set switch to 3 to activate both at the same time + * WARNING: This will slow spellcasting down due to 2da reads and inventory loops + */ +const string PRC_MATERIAL_COMPONENTS = "PRC_MATERIAL_COMPONENTS"; + +const string PRC_DISABLE_COMPONENTS_SHOP = "PRC_DISABLE_COMPONENTS_SHOP"; + +/** Bioware True Seeing can see stealthed creatures. + * This replaces the trueseeing effect with a See Invisible + Ultravision + Spot bonus. + * This affects the spell and power True Seeing and the Dragon Disciple class + */ +const string PRC_PNP_TRUESEEING = "PRC_PNP_TRUESEEING"; + +/** + * PRC_PNP_TRUESEEING must be on. + * Value of spot skill bonus that True Seeing grants. + * Defaults to +15 if not set. + */ +const string PRC_PNP_TRUESEEING_SPOT_BONUS = "PRC_PNP_TRUESEEING_SPOT_BONUS"; + +/** Remove the cap PRC added to this spell */ +const string PRC_BIOWARE_GRRESTORE = "PRC_BIOWARE_GRRESTORE"; +/** Remove the cap PRC added to this spell */ +const string PRC_BIOWARE_HEAL = "PRC_BIOWARE_HEAL"; +/** Remove the cap PRC added to this spell */ +const string PRC_BIOWARE_MASS_HEAL = "PRC_BIOWARE_MASS_HEAL"; +/** Remove the cap PRC added to this spell */ +const string PRC_BIOWARE_HARM = "PRC_BIOWARE_HARM"; +/** Remove the cap PRC added to this spell */ +const string PRC_BIOWARE_NEUTRALIZE_POISON = "PRC_BIOWARE_NEUTRALIZE_POISON"; +/** Remove the cap PRC added to this spell */ +const string PRC_BIOWARE_REMOVE_DISEASE = "PRC_BIOWARE_REMOVE_DISEASE"; + +/** + * This replaces the 3.0 Spell Focus bonuses with the 3.5 edition ones + */ +const string PRC_35_SPELL_FOCUS = "PRC_35_SPELL_FOCUS"; + +/* Blindness/Deafness effect is permanent */ +const string PRC_PNP_BLINDNESS_DEAFNESS = "PRC_PNP_BLINDNESS_DEAFNESS"; + +/** + * Sets caltrops duration in seconds. + * Defaults = permanent + */ +const string PRC_CALTROPS_DURATION = "PRC_CALTROPS_DURATION"; + +/*** + * Timestop has Bioware durations (9 seconds or 18 for Greater Timestop) rather + * than PnP durations (1d4+1 or 2d4+2) + */ +const string PRC_TIMESTOP_BIOWARE_DURATION = "PRC_TIMESTOP_BIOWARE_DURATION"; + +/** + * Timestop has only a local affect, i.e doesn't stop people on the other areas of the module. + * Note that AOEs continue to act during a timestop, and durations/delayed events still occur. + */ +const string PRC_TIMESTOP_LOCAL = "PRC_TIMESTOP_LOCAL"; + +/** + * PRC_TIMESTOP_LOCAL must be enabled. + * Caster can't perform any hostile actions while in timestop. + */ +const string PRC_TIMESTOP_NO_HOSTILE = "PRC_TIMESTOP_NO_HOSTILE"; + +/** + * PRC_TIMESTOP_LOCAL must be enabled. + * PCs can't see anything while stopped. + * This might look to the player like their game crashed. + */ +const string PRC_TIMESTOP_BLANK_PC = "PRC_TIMESTOP_BLANK_PC"; + +/** + * Instead of Bioware's sequential summons it creates multiple elementals. + * Only works if PRC_MULTISUMMON is on + */ +const string PRC_PNP_ELEMENTAL_SWARM = "PRC_PNP_ELEMENTAL_SWARM"; + +/** + * If you pass a save, you can't be affected by that aura for 24h. + * NOTE: Not implemented yet + */ +const string PRC_PNP_FEAR_AURAS = "PRC_PNP_FEAR_AURAS"; + +/** + * Not a polymorph but ability bonuses instead. + */ +const string PRC_PNP_TENSERS_TRANSFORMATION = "PRC_PNP_TENSERS_TRANSFORMATION"; + +/** + * Less powerful, more PnP accurate version. + * Caster must concentrate to maintain it. + */ +const string PRC_PNP_BLACK_BLADE_OF_DISASTER = "PRC_PNP_BLACK_BLADE_OF_DISASTER"; + +/** + * Traps are only shown, not disarmed + */ +const string PRC_PNP_FIND_TRAPS = "PRC_PNP_FIND_TRAPS"; + +/** + * PnP Darkness + * Is a mobile AOE based off an item + */ +const string PRC_PNP_DARKNESS = "PRC_PNP_DARKNESS"; + +/** + * Bioware Invisibility, Improved Invisibility + */ +const string PRC_BIOWARE_INVISIBILITY = "PRC_BIOWARE_INVISIBILITY"; + +/** + * 3.5ed Darkness + * Gives 20% concelement rather than bioware darkness + */ +const string PRC_PNP_DARKNESS_35ED = "PRC_PNP_DARKNESS_35ED"; + +/** + * Undead summons are permanent, but can only have 4HD/casterlevel in total + * Does not enforce the requirement for a corpse + * Also applies to ghoul gauntlet which otherwise will create one ghoul + * if you dont already have a summon + */ +const string PRC_PNP_ANIMATE_DEAD = "PRC_PNP_ANIMATE_DEAD"; + +/** + * This sets the HP limit for Symbol of Death, Symbol of Fear and Symbol of Stunning + * spells. Default = 150. + */ +const string PRC_SYMBOL_HP_LIMIT = "PRC_SYMBOL_HP_LIMIT"; + +/** + * "Word of Faith" spells use 3.5 ed rules rather than 3.0ed + * basically instead of 12+ / <12 / <8 / <4 its relative to caster level + * at >=CL / = 1. + * Default: 1 + */ +const string PRC_USES_PER_WEAPON_POISON_COUNT = "PRC_USES_PER_WEAPON_POISON_COUNT"; + +/** + * Size of the die rolled when determining the amount of hits the poison will + * work on. If this is set, the value should be at least 2. + * Default: Dice aren't rolled. + */ +const string PRC_USES_PER_WEAPON_POISON_DIE = "PRC_USES_PER_WEAPON_POISON_DIE"; + +/** + * This is the name of the script to be run when someone attempts to poison food to + * check if the targeted item is food. The default script returns FALSE for everything, + * so you must define your own to have this functionality. + * + * This switch has string values instead of integers. + * + * Default: poison_is_food <- an example script, just returns false + * + * @see poison_is_food + */ +const string PRC_POISON_IS_FOOD_SCRIPT_NAME = "PRC_POISON_IS_FOOD_SCRIPT_NAME"; + +/** + * This switch determines whether a creature equipping a poisoned item is assumed to be + * acting smartly in that it attempts to clean the item first. If it's not set, the + * creature just directly equips the item and gets poisoned. + * + * Default: Off, the creature gets poisoned without any checks + * + * @see poison_onequip + */ +const string PRC_POISON_ALLOW_CLEAN_IN_EQUIP = "PRC_POISON_ALLOW_CLEAN_IN_EQUIP"; + +/** + * + * Default: crafting requires only gold and xp + */ +const string PRC_CRAFT_POISON_USE_INGREDIENST = "PRC_CRAFT_POISON_USE_INGREDIENST"; + +/******************************************************************************\ +* PRGT system switches * +\******************************************************************************/ + +//these three are strings not switches +const string PRC_PRGT_XP_SCRIPT_TRIGGERED = "PRC_PRGT_XP_SCRIPT_TRIGGERED"; +const string PRC_PRGT_XP_SCRIPT_DISARMED = "PRC_PRGT_XP_SCRIPT_DISARMED"; +const string PRC_PRGT_XP_SCRIPT_RECOVERED = "PRC_PRGT_XP_SCRIPT_RECOVERED"; + +/** + * @TODO: Write description. + */ +const string PRC_PRGT_XP_AWARD_FOR_TRIGGERED = "PRC_PRGT_XP_AWARD_FOR_TRIGGERED"; + +/** + * @TODO: Write description. + */ +const string PRC_PRGT_XP_AWARD_FOR_RECOVERED = "PRC_PRGT_XP_AWARD_FOR_RECOVERED"; + +/** + * @TODO: Write description. + */ +const string PRC_PRGT_XP_AWARD_FOR_DISARMED = "PRC_PRGT_XP_AWARD_FOR_DISARMED"; + + + +/******************************************************************************\ +* Psionics switches * +\******************************************************************************/ + +/** + * If this is set, use ac_appearances.2da to determine an Astral Construct's + * appearance instead of the values hardcoded into the script. + */ +const string PRC_PSI_ASTRAL_CONSTRUCT_USE_2DA = "ASTRAL_CONSTRUCT_USE_2DA"; + +/** + * If this is set, Astral Construct's duration will be multiplied by given + * number. Examples: + * 10 - duration is equal to 1 minute per manifester level + * 600 - duration is equal to 1 hour per manifester level + */ +const string PRC_PSI_ASTRAL_CONSTRUCT_DUR_MOD = "PRC_PSI_ASTRAL_CONSTRUCT_DUR_MOD"; + + +/** + * If this is set, The Astral Seed power will attempt to use the provided string as + * the ResRef to create the Astral Seed object instead of the of the phylactery + * ResRef("x2_plc_phylact"). + * May be used by builders to create an object that CAN be destroyed, or has other traits, + * as desired. + * Type: String + * Values: "" [Default] (Blank, or not set: Use default phylactery ResRef for Astral Seed) + * STRING (Entered String will be used as the ResRef of created Astral Seed object) + */ +const string PRC_PSI_ASTRAL_SEED_RESREF = "PRC_PSI_ASTRAL_SEED_RESREF"; + +/** + * By default the Astral Seed power respawns the player, and then makes them immobile for + * 24-game-hours. + * If this switch is set, it will adjust the imobility time period; shortening it, lengthing it, or + * effectively eliminating it. + * Type: Int + * Values: 0 [Default] (Not set: Use default 24 hour duration) + * -1 (Any negative value will result in a fixed duratoion of 2 seconds, which effectively eliminates the wait period) + * 1 (Any potitive value: multiply duration by the value provided and then divide result by 1000. + * Values less than 1000 will shorten the duration, values higher than 1000 will lengthen it.) + */ +const string PRC_PSI_ASTRAL_SEED_RESPAWN_DELAY_X1000 = "PRC_PSI_ASTRAL_SEED_RESPAWN_DELAY_X1000"; + +/** + * By default, when the Astral Seed power is activated upon death, the user loses one level's + * worth of XP. This may not be compatabile with all death and respawn systems. + * If this flag is set, the XP loss is completely eliminated. The standard PRC event hook script + * of "prc_pw_astralseed" may be used to script any additional effects to occure upon Astral Seed + * respawning, including scripting specific XP loss amount. + * Type: Int + * Values: 0 [Default] (Not set: lose 1 level worth of XP upon Astral Seed respawn) + * 1 (Any potitive value: Remove all XP loss from Astral Seed respawn) + */ +const string PRC_PSI_ASTRAL_SEED_RESPAWN_NO_LEVEL_LOSS = "PRC_PSI_ASTRAL_SEED_RESPAWN_NO_LEVEL_LOSS"; + + +/** + * Setting this switch active makes Psychic Reformation only allow one to + * reselect psionic powers instead of fully rebuilding their character. + * + * Possible values: + * 0 = Off, Psychic Reformation behaves as specified in the power + * description. That is, the target is deleveled by a certain + * amount and then releveled back to where they were. + * Nonzero, not 2 = On, Psychic Reformation only nulls a selected number of + * the target's selected powers and allows reselection. + * 2 = On, and the XP cost is reduced to 25 per level reformed. + */ +const string PRC_PSI_PSYCHIC_REFORMATION_NERF = "PRC_PSI_PSYCHIC_REFORMATION_NERF"; + +/** + * Determines how Rapid Metabolism works. + * When set, heals the feat possessor by their Hit Dice + Constitution modifier + * every 24h. + * Default: Heals the feat possessor by 1 + their Constitution modifier every + * turn (60s). + */ +const string PRC_PNP_RAPID_METABOLISM = "PRC_PNP_RAPID_METABOLISM"; + +/** + * Determines how the epic feat Improved Metapsionics works. + * When set, the total cost of metapsionics applied to power being manifested is + * summed and Improved Metapsionics cost reduction is applied to the sum. + * Default: Improved Metapsionics cost reduction is applied separately to each + * metapsionic used with power being manifested. + */ +const string PRC_PSI_IMP_METAPSIONICS_USE_SUM = "PRC_PSI_IMP_METAPSIONICS_USE_SUM"; + + +/** + * A switch a player can personally toggle. If this is set, their augmentation level + * is considered to be the amount of PP they are willing to pay for augmentation. + * Default: A player's augmentation level is the number of times to augment the power. + */ +const string PRC_PLAYER_SWITCH_AUGMENT_IS_PP = "PRC_PLAYER_SWITCH_AUGMENT_IS_PP"; + +/** + * A switch a player can personally toggle. If set, the metapsionics code attempts + * to avoid exceeding the manifester level cap by skipping application of + * such active metapsionic feats where the cost would cause manifester level cap to + * be exceeded. Quicken Power is exempt from ever being skipped if it is active. + */ +const string PRC_PLAYER_SWITCH_AUTOMETAPSI = "PRC_PLAYER_SWITCH_AUTOMETAPSI"; + +/******************************************************************************\ +* PnP Polymorphing switches * +\******************************************************************************/ + +/** + * These switches are used to limit the targets that can be used with the + * PRC Polymorph / Shifting mechanics. + * + * Remember, mimicing uses the targetting instance, whereas + * shifting into that form again later creats a new instance from + * the resref. Thus if you modify creatures after they have been + * placed from the palette, odd things may happen. + * + * Also if you give any monster the "Archetypal Form" feat, the players + * will not be able to take that monsters shape. + */ + +/** + * If set, the system compares user HD to target CR. + * Default: user HD is compared to target HD + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_USECR = "PNP_SHFT_USECR"; + +/** + * If set, the system does not allow target creatures of size Huge or greater. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_S_HUGE = "PNP_SHFT_S_HUGE"; + +/** + * If set, the system does not allow target creatures of size Large. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_S_LARGE = "PNP_SHFT_S_LARGE"; + +/** + * If set, the system does not allow target creatures of size Medium. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_S_MEDIUM = "PNP_SHFT_S_MEDIUM"; + +/** + * If set, the system does not allow target creatures of size Small. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_S_SMALL = "PNP_SHFT_S_SMALL"; + +/** + * If set, the system does not allow target creatures of size Tiny or smaller. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_S_TINY = "PNP_SHFT_S_TINY"; + +/** + * If set, the system does not allow target creatures of type Outsider. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_F_OUTSIDER = "PNP_SHFT_F_OUTSIDER"; + +/** + * If set, the system does not allow target creatures of type Elemental. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_F_ELEMENTAL = "PNP_SHFT_F_ELEMENTAL"; + +/** + * If set, the system does not allow target creatures of type Construct. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_F_CONSTRUCT = "PNP_SHFT_F_CONSTRUCT"; + +/** + * If set, the system does not allow target creatures of type Undead. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_F_UNDEAD = "PNP_SHFT_F_UNDEAD"; + +/** + * If set, the system does not allow target creatures of type Dragon. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_F_DRAGON = "PNP_SHFT_F_DRAGON"; + +/** + * If set, the system does not allow target creatures of type Aberration. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_F_ABERRATION = "PNP_SHFT_F_ABERRATION"; + +/** + * If set, the system does not allow target creatures of type Ooze. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_F_OOZE = "PNP_SHFT_F_OOZE"; + +/** + * If set, the system does not allow target creatures of type Magical Beast. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_F_MAGICALBEAST = "PNP_SHFT_F_MAGICALBEAST"; + +/** + * If set, the system does not allow target creatures of type Giant. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_F_GIANT = "PNP_SHFT_F_GIANT"; + +/** + * If set, the system does not allow target creatures of type Vermin. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_F_VERMIN = "PNP_SHFT_F_VERMIN"; + +/** + * If set, the system does not allow target creatures of type Beast. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_F_BEAST = "PNP_SHFT_F_BEAST"; + +/** + * If set, the system does not allow target creatures of type Animal. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_F_ANIMAL = "PNP_SHFT_F_ANIMAL"; + +/** + * If set, the system does not allow target creatures of type Monstrous Humanoid. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_F_MONSTROUSHUMANOID = "PNP_SHFT_F_MONSTROUSHUMANOID"; + +/** + * If set, the system does not allow target creatures of type Humanoid. + * Values: 0 is not set, anything else is set. + */ +const string PNP_SHFT_F_HUMANOID = "PNP_SHFT_F_HUMANOID"; + +/******************************************************************************\ +* Combat System Switches * +\******************************************************************************/ + +/** + * ebonfowl: when TRUE critical hits will not multiply elemental melee damage + * from effects in scripted combat + */ +const string PRC_PNP_ELEMENTAL_DAMAGE = "PRC_PNP_ELEMENTAL_DAMAGE"; + +/** + * TODO: Write description. + */ +const string PRC_SPELL_SNEAK_DISABLE = "PRC_SPELL_SNEAK_DISABLE"; + +/** + * Use 3.5 edition unarmed damage progression instead of 3.0 edition. + * Default: Use 3.0 unarmed damage progression. + */ +const string PRC_3_5e_FIST_DAMAGE = "PRC_3_5e_FIST_DAMAGE"; + +/** + * Use a Brawler character's size as a part of determining their unarmed + * damage. + * Default: A Brawler's size is ignored. + */ +const string PRC_BRAWLER_SIZE = "PRC_BRAWLER_SIZE"; + +/** + * Use appearance size rather than racial-determined size + * This also means it includes bonuses from classes and spells + */ +const string PRC_APPEARANCE_SIZE = "PRC_APPEARANCE_SIZE"; + +/** + * This reenables the Bioware Monk attack progression, with up to 6 monk attacks per round +*/ +const string PRC_BIOWARE_MONK_ATTACKS ="PRC_BIOWARE_MONK_ATTACKS"; + +/** + * This switch (if on) takes care that only light weapons (one size smaller than the creature size) + * are finessable, meaning that small races can only finesse tiny weapons + */ +const string PRC_SMALL_CREATURE_FINESSE ="PRC_SMALL_CREATURE_FINESSE"; + +/** + * turns on combat debugging for scripted combat, + * similar to Bioware's dm_enablecombatdebugging 1 + * will show a lot of info about the attack and damage rolls + */ +const string PRC_COMBAT_DEBUG = "PRC_COMBAT_DEBUG"; + +/** + * switches on Biowares Divine Power version (bonus atacks come at full AB) + */ +const string PRC_BIOWARE_DIVINE_POWER = "PRC_BIOWARE_DIVINE_POWER"; + +/** + * if True, allows us to select a better target in prc combat functions + * by switching from one target to another (closer) target + * only relevant for melee combat (we never switch targets on ranged combat) + */ +const string PRC_ALLOW_SWITCH_OF_TARGET = "PRC_ALLOW_SWITCH_OF_TARGET"; + +/** + * disable coup the grace on first attack in round + */ +const string PRC_DISABLE_COUP_DE_GRACE = "PRC_DISABLE_COUP_DE_GRACE"; + +/** + * limit to the (non-dice) damage of a flame weapon or darkfire spell + * if the switch is not set or zero, non-dice damage of flame weapon or darkfire is limited to 10 + * it is recommended not to set these switches higher than 10 + */ +const string PRC_FLAME_WEAPON_DAMAGE_MAX = "PRC_FLAME_WEAPON_DAMAGE_MAX"; +const string PRC_DARKFIRE_DAMAGE_MAX = "PRC_DARKFIRE_DAMAGE_MAX"; + +/** + * ebonfowl: when this switch is not FALSE, the attack bonus is capped as it is in-game, if FALSE, + * attack bonus is uncapped + */ +const string PRC_CAPPED_ATTACK_BONUS = "PRC_CAPPED_ATTACK_BONUS"; + + +/******************************************************************************\ +* Craft System Switches * +\******************************************************************************/ + +/* + * Completely disable the PRC Crafting System + */ +const string PRC_DISABLE_CRAFT = "PRC_DISABLE_CRAFT"; + +/* + * Disables epic crafting + */ +const string PRC_DISABLE_CRAFT_EPIC = "PRC_DISABLE_CRAFT_EPIC"; + +/* + * Set this on an area to disable crafting within that area + * Best used in conjunction with the time elapsing and no-rest + * This applies to both PRC Crafting and biowares scroll/wand/potions + */ +const string PRC_AREA_DISABLE_CRAFTING = "PRC_AREA_DISABLE_CRAFTING"; + +/* + * Inverts the behavior of previous switch + * Will disable crafting on all areas BUT ones with the + * PRC_AREA_DISABLE_CRAFTING switch set + * Only works for new crafting system + */ +const string PRC_AREA_DISABLE_CRAFTING_INVERT = "PRC_AREA_DISABLE_CRAFTING_INVERT"; + +/* + * Multiply the delay (in seconds) after the creation of an item in which a PC + * can't craft anything. This is divided by 100 to get a float. + * Normally, it's set to the market price of the item. Set + * it to less than 100 to reduce it instead. (default: 0). + * + * This is independant of PRC_PLAYER_TIME + * + */ +const string PRC_CRAFT_TIMER_MULTIPLIER = "PRC_CRAFT_TIMER_MULTIPLIER"; + +/* + * Absolute maximum delay (in seconds) where crafting is disabled for a PC, + * regardless of the item's market price. By default it's 0 (meaning that there's + * no delay at all). + * + * This is independant of PRC_PLAYER_TIME + * + */ +const string PRC_CRAFT_TIMER_MAX = "PRC_CRAFT_TIMER_MAX"; + +/* + * Absolute minimum delay (in seconds) where crafting is disabled for a PC, + * regardless of the item's market price. By default it's 0 (meaning that there's + * no delay at all). + * + * This is independant of PRC_PLAYER_TIME + * + */ +const string PRC_CRAFT_TIMER_MIN = "PRC_CRAFT_TIMER_MIN"; + +/** + * These three switches modify Bioware crafting so that the items produced have the + * casterlevel of the spellcaster who created them. Normally under Bioware, it is possible + * for a level 3 caster to produce level 9 items and for a level 40 caster to only produce + * level 5 items. + * This also allows metamagic to apply to crafting. i.e you produce a wand of maximized fireball + * + * @see PRC_SCRIBE_SCROLL_CASTER_LEVEL + * @see PRC_CRAFT_WAND_CASTER_LEVEL + */ +const string PRC_BREW_POTION_CASTER_LEVEL = "PRC_BREW_POTION_CASTER_LEVEL"; + +/* + * These three switches modify Bioware crafting so that the items produced have the + * casterlevel of the spellcaster who created them. Normally under Bioware, it is possible + * for a level 3 caster to produce level 9 items and for a level 40 caster to only produce + * level 5 items. + * This also allows metamagic to apply to crafting. i.e you produce a wand of maximized fireball + * + * @see PRC_BREW_POTION_CASTER_LEVEL + * @see PRC_CRAFT_WAND_CASTER_LEVEL + */ +const string PRC_SCRIBE_SCROLL_CASTER_LEVEL = "PRC_SCRIBE_SCROLL_CASTER_LEVEL"; + +/* + * These three switches modify Bioware crafting so that the items produced have the + * casterlevel of the spellcaster who created them. Normally under Bioware, it is possible + * for a level 3 caster to produce level 9 items and for a level 40 caster to only produce + * level 5 items. + * This also allows metamagic to apply to crafting. i.e you produce a wand of maximized fireball + * + * @see PRC_BREW_POTION_CASTER_LEVEL + * @see PRC_SCRIBE_SCROLL_CASTER_LEVEL + */ +const string PRC_CRAFT_WAND_CASTER_LEVEL = "PRC_CRAFT_WAND_CASTER_LEVEL"; + +/* + * As above, except it applies to rods + */ +const string PRC_CRAFT_ROD_CASTER_LEVEL = "PRC_CRAFT_ROD_CASTER_LEVEL"; + +/* + * As above, except it applies to staffs + */ +const string PRC_CRAFT_STAFF_CASTER_LEVEL = "PRC_CRAFT_STAFF_CASTER_LEVEL"; + +/* + * Characters with a crafting feat always have the appropriate base item in their inventory + */ +const string PRC_CRAFTING_BASE_ITEMS = "PRC_CRAFTING_BASE_ITEMS"; + +/* + * Max level of spells brewed into potions + * defaults to 3 + */ +const string X2_CI_BREWPOTION_MAXLEVEL = "X2_CI_BREWPOTION_MAXLEVEL"; + +/* + * cost modifier of spells brewed into poitions + * defaults to 50 + */ +const string X2_CI_BREWPOTION_COSTMODIFIER = "X2_CI_BREWPOTION_COSTMODIFIER"; + +/* + * cost modifier of spells scribed into scrolls + * defaults to 25 + */ +const string X2_CI_SCRIBESCROLL_COSTMODIFIER = "X2_CI_SCRIBESCROLL_COSTMODIFIER"; + +/* + * Max level of spells crafted into wands + * defaults to 4 + */ +const string X2_CI_CRAFTWAND_MAXLEVEL = "X2_CI_CRAFTWAND_MAXLEVEL"; + +/* + * cost modifier of spells crafted into wands + * defaults to 750 + */ +const string X2_CI_CRAFTWAND_COSTMODIFIER = "X2_CI_CRAFTWAND_COSTMODIFIER"; + +/* + * cost modifier of spells crafted into rods + * note that adding a second spell costs 75% and 3 or more costs 50% + * defaults to 750 + */ +const string X2_CI_CRAFTROD_COSTMODIFIER = "X2_CI_CRAFTROD_COSTMODIFIER"; + +/* + * cost modifier of spells crafted into staffs + * note that adding a second spell costs 75% and 3 or more costs 50% + * defaults to 750 + */ +const string X2_CI_CRAFTSTAFF_COSTMODIFIER = "X2_CI_CRAFTSTAFF_COSTMODIFIER"; + +/** + * Allows the use of arbitrary itemproperties and uses NWN item costs + * ie. not PnP + */ +const string PRC_CRAFTING_ARBITRARY = "PRC_CRAFTING_ARBITRARY"; + +/** + * Scales the item costs overall for the purposes of crafting + * defaults to 100 + */ +const string PRC_CRAFTING_COST_SCALE = "PRC_CRAFTING_COST_SCALE"; + +/** + * Scales the item costs for mundane item crafting + * defaults to 100 + */ +const string PRC_CRAFTING_MUNDANE_COST_SCALE = "PRC_CRAFTING_MUNDANE_COST_SCALE"; + +/** + * Sets crafting time per 1000gp in market price: + * 1 - off, no time required + * 2 - round + * 3 - turn + * 4 - hour + * 5 - day + * defaults to 1 hour/1000gp + */ +const string PRC_CRAFTING_TIME_SCALE = "PRC_CRAFTING_TIME_SCALE"; + +/** + * TO DISABLE SPECIFIC PROPERTIES: + * + * Set a switch with the name: + * + * PRC_CRAFT_DISABLE__ + * + * where the 2da files are named craft_* (lower case) + * or itempropdef in the case of arbitrary crafting + * + * eg. PRC_CRAFT_DISABLE_itempropdef_15 + * + * disables all castspell properties in arbitrary crafting mode + */ + +/******************************************************************************\ +* Teleport System Switches * +\******************************************************************************/ + +/** + * Defines the maximum number of teleport target locations a PC may store. + * Default: 50 + */ +const string PRC_TELEPORT_MAX_TARGET_LOCATIONS = "PRC_TELEPORT_MAX_TARGET_LOCATIONS"; + +/** + * If this is set, all spells/powers/effects with the [Teleportation] descriptor + * (ie, their scripts use GetCanTeleport()) fail. + * + * Default: Off + */ +const string PRC_DISABLE_TELEPORTATION = "PRC_DISABLE_TELEPORTATION"; + +/** + * If a local integer variable by this name is set on an area, certain + * teleportation destinations are unavailable based on the value of the variable. + * This affects the return value of GetCanTeleport() when the bMovesCreature parameter + * is true. + * + * Possible values are a bitwise combinations of the following: + * PRC_DISABLE_TELEPORTATION_FROM_AREA + * PRC_DISABLE_TELEPORTATION_TO_AREA + * PRC_DISABLE_TELEPORTATION_WITHIN_AREA + */ +const string PRC_DISABLE_TELEPORTATION_IN_AREA = "PRC_DISABLE_TELEPORTATION_IN_AREA"; + +/** + * A value of PRC_DISABLE_TELEPORTATION_IN_AREA. This disables teleporting + * from the area in question to other areas. + */ +const int PRC_DISABLE_TELEPORTATION_FROM_AREA = 0x1; + +/** + * A value of PRC_DISABLE_TELEPORTATION_IN_AREA. This disables teleporting + * from other areas to the area in question. + */ +const int PRC_DISABLE_TELEPORTATION_TO_AREA = 0x2; + +/** + * A value of PRC_DISABLE_TELEPORTATION_IN_AREA. This disables both teleporting + * from area in question to another location in that same area. + */ +const int PRC_DISABLE_TELEPORTATION_WITHIN_AREA = 0x4; + +/** + * Forces spells/powers/effects that use GetTeleportError() to behave in a + * specific way when their destination is in an area on which this local + * variable is set. + * Based on the value of this variable, such a spell/power will always behave in + * a way described by one of the entries of Teleport results table. This happens + * even if the spell/power would normally ignore the table. + * + * Default: Each spell / power behaves by it's normal specification. + * + * Values: + * PRC_FORCE_TELEPORTATION_RESULT_ONTARGET + * PRC_FORCE_TELEPORTATION_RESULT_OFFTARGET + * PRC_FORCE_TELEPORTATION_RESULT_WAYOFFTARGET + * PRC_FORCE_TELEPORTATION_RESULT_MISHAP + */ +const string PRC_FORCE_TELEPORTATION_RESULT = "PRC_FORCE_TELEPORTATION_RESULT"; + +/** + * A value of PRC_FORCE_TELEPORTATION_RESULT. This makes the spells affected by + * the variable always succeed. + */ +const int PRC_FORCE_TELEPORTATION_RESULT_ONTARGET = 1; + +/** + * A value of PRC_FORCE_TELEPORTATION_RESULT. This makes the spells affected by + * the variable always dump the target(s) in a random location in the same area. + */ +const int PRC_FORCE_TELEPORTATION_RESULT_OFFTARGET = 2; + +/** + * A value of PRC_FORCE_TELEPORTATION_RESULT. This makes the spells affected by + * the variable always dump the target(s) in a random location among the users's + * stored teleport choices, or if there are no others, just stay where the user is. + */ +const int PRC_FORCE_TELEPORTATION_RESULT_WAYOFFTARGET = 3; + +/** + * A value of PRC_FORCE_TELEPORTATION_RESULT. This makes the spells affected by + * the variable always do the following: + * // Mishap: + * // You and anyone else teleporting with you have gotten “scrambled.” + * // You each take 1d10 points of damage, and you reroll on the chart to see where you wind up. + * // For these rerolls, roll 1d20+80. Each time “Mishap” comes up, the characters take more damage and must reroll. + */ +const int PRC_FORCE_TELEPORTATION_RESULT_MISHAP = 4; + +/** + * If a variable by this name is non-zero on a creature, that creature cannot + * teleport. If you use this in your own scripts, please do not set it to + * a static value or directly remove it. + * Instead, increase it's value by one when the disabling occurs and decrease + * by one when the disabling turns off. This is required in order to be able to + * handle overlapping sources of forbiddance. + * + * Note: This stops all effects with the [Teleportation] descriptor, by causing + * GetCanTeleport() to always return FALSE. + */ +const string PRC_DISABLE_CREATURE_TELEPORT = "PRC_DISABLE_CREATURE_TELEPORT"; + + +/******************************************************************************\ +* Persistent World switches * +\******************************************************************************/ + +/** + * Persistant time tracking. + * When the first player logs on, the clock is set forward to the last time that + * player logged off. + */ +const string PRC_PW_TIME = "PRC_PW_TIME"; + +/** + * Number of rounds between exporting characters (1 round = 6 seconds). + */ +const string PRC_PW_PC_AUTOEXPORT = "PRC_PW_PC_AUTOEXPORT"; + +/** + * A player's HP is stored via persistant locals every HB and restored on logon. + */ +const string PRC_PW_HP_TRACKING = "PRC_PW_HP_TRACKING"; + +/** + * A player's location is stored via persistant locals every HB and restored + * on logon. + */ +const string PRC_PW_LOCATION_TRACKING = "PRC_PW_LOCATION_TRACKING"; + +/** + * Player places map pins are tracked via persistant locals and restored on logon + */ +const string PRC_PW_MAPPIN_TRACKING = "PRC_PW_MAPPIN_TRACKING"; + +/** + * Being dead is stored via persistant locals and restored on logon. + */ +const string PRC_PW_DEATH_TRACKING = "PRC_PW_DEATH_TRACKING"; + +/** + * Spells cast are tracked via persistant locals and restored on logon + */ +const string PRC_PW_SPELL_TRACKING = "PRC_PW_SPELL_TRACKING"; + +/** + * Players cant logon for this many minutes after a server load + */ +const string PRC_PW_LOGON_DELAY = "PRC_PW_LOGON_DELAY"; + + + +/******************************************************************************\ +* XP system switches * +\******************************************************************************/ + +/** + * This modifies the amount of XP a character recieves based on Level Adjustment + * - Doesn't take racial hit dice into account. + * - Should work with any prior XP system. + * - Use this on pre-exisitng modules. + */ +const string PRC_XP_USE_SIMPLE_LA = "PRC_XP_USE_SIMPLE_LA"; + +/** + * Any new characters entering the module are automatically given racial hit dice + * Unlike PnP, they do not get to select what feats/skills the racial HD grant + * Instead the default bioware package will be used. + * Do not use if the ConvoCCs racial hit dice option is in use. + */ +const string PRC_XP_USE_SIMPLE_RACIAL_HD = "PRC_XP_USE_SIMPLE_RACIAL_HD"; + +/** + * Characters must earn their racial HD through the normal levelup process + * Player must still take all their racial HD before they can take more + * than one level in a non-racial class. + * PRC_XP_USE_SIMPLE_RACIAL_HD must be on, and the convoCC racial hit dice option + * must be off + */ +const string PRC_XP_USE_SIMPLE_RACIAL_HD_NO_FREE_XP = "PRC_XP_USE_SIMPLE_RACIAL_HD_NO_FREE_XP"; + +/** + * Characters are given racial HD via LevelupHenchman so can't select feats etc + * Uses the default packages for each class, which are poor to say the least + * PRC_XP_USE_SIMPLE_RACIAL_HD must be on, and the convoCC racial hit dice option + * must be off + */ +const string PRC_XP_USE_SIMPLE_RACIAL_HD_NO_SELECTION = "PRC_XP_USE_SIMPLE_RACIAL_HD_NO_SELECTION"; + +/** + * Enables PRC XP system. + * This may cause balance issues with pre-exisiting modules, so it is recomended + * that only builders use this and do extensive playtesting and tweaking for + * balance. + * + * Uses the dmgxp.2da file which is a copy of the XP tables in the DMG and ELH + * these are based on the formula of 13.3333 encounters of CR = ECL to advance + * a level. + * Encounters of CR > ECL+8 or CR < ECL-8 dont give XP. + * Tables are setup so that parties' levels will converge over time. + */ +const string PRC_XP_USE_PNP_XP = "PRC_XP_USE_PNP_XP"; + +/** + * PRC XP system will use default bioware xptable.2da instead of dmgxp.2da + */ +const string PRC_XP_USE_BIOWARE_XPTABLE = "PRC_XP_USE_BIOWARE_XPTABLE"; + +/** + * This value is divided by 100 when applied so a value of 100 is equivalent to 1.0 + * slider for PnP XP system, multiplier for final XP amount + * This can also be set on individual PCs for the same result. If it is not set, then + * it defaults to 1.0. + */ +const string PRC_XP_SLIDER_x100 = "PRC_XP_SLIDER_x100"; + +/** + * Player groups will get small xp bonuses. Formula is group size - 1 * switch/100 + * so with a default value of 10 (10%) a party of 4 PCs receives 30% XP bonus + */ +const string PRC_XP_GROUP_BONUS = "PRC_XP_GROUP_BONUS"; + +/** + * Use ECL for NPCs instead of CR. + * Should be close, but I dont know how Bioware CR calculations work with the + * PRC races. + * Also note ECL is a measure of power in a campaign, wheras CR is measure of + * power in a single encounter. Thus ECL weights use/day abilitieis more than + * CR does. + */ +const string PRC_XP_USE_ECL_NOT_CR = "PRC_XP_USE_ECL_NOT_CR"; + +/** + * If this is set, ECL = LA + racial hit dice + * EVEN IF THE CHARACTER DOESNT HAVE ANY RACIAL HIT DICE! + * So it penalizes the power races far more than PnP because they don't get any + * of the other benefits of racial hit dice (BAB, HP, saves, skills, feats, etc) + */ +const string PRC_XP_INCLUDE_RACIAL_HIT_DIE_IN_LA = "PRC_XP_INCLUDE_RACIAL_HIT_DIE_IN_LA"; + +/** + * These values are divided by 100 when applied so a value of 100 is equivalent + * to 1.0. + * This is for purposes of party size for dividing XP awards by. + * By PnP only PCs would count, and possibly henchmen too, but you might want to + * tweak others for balance purposes, for example to hinder a solo wizard with + * dozens of summons. + */ +const string PRC_XP_PC_PARTY_COUNT_x100 = "PRC_XP_PC_PARTY_COUNT_x100"; +const string PRC_XP_HENCHMAN_PARTY_COUNT_x100 = "PRC_XP_HENCHMAN_PARTY_COUNT_x100"; +const string PRC_XP_DOMINATED_PARTY_COUNT_x100 = "PRC_XP_DOMINATED_PARTY_COUNT_x100"; +const string PRC_XP_ANIMALCOMPANION_PARTY_COUNT_x100 = "PRC_XP_ANIMALCOMPANION_PARTY_COUNT_x100"; +const string PRC_XP_FAMILIAR_PARTY_COUNT_x100 = "PRC_XP_FAMILIAR_PARTY_COUNT_x100"; +const string PRC_XP_SUMMONED_PARTY_COUNT_x100 = "PRC_XP_SUMMONED_PARTY_COUNT_x100"; +const string PRC_XP_UNKNOWN_PARTY_COUNT_x100 = "PRC_XP_UNKNOWN_PARTY_COUNT_x100"; + +/** + * Use SetXP rather than GiveXP. Will bypass any possible Bioware interference. + */ +const string PRC_XP_USE_SETXP = "PRC_XP_USE_SETXP"; + +/** + * Give XP to NPCs + */ +const string PRC_XP_GIVE_XP_TO_NPCS = "PRC_XP_GIVE_XP_TO_NPCS"; + +/** + * Setting this switch will turn off the messages about being too far awy to gain XP + */ +const string PRC_XP_DISABLE_SPAM = "PRC_XP_DISABLE_SPAM"; + +/** + * PCs must be in the same area as the CR to gain XP. + * Helps stop powerlevelling by detering low level characters hanging around + * with 1 very strong char. + */ +const string PRC_XP_MUST_BE_IN_AREA = "PRC_XP_MUST_BE_IN_AREA"; + +/** + * Maximum distance that a PC must be to gain XP. + * Helps stop powerlevelling by detering low level characters hanging around + * with 1 very strong char. + */ +const string PRC_XP_MAX_PHYSICAL_DISTANCE = "PRC_XP_MAX_PHYSICAL_DISTANCE"; + +/** + * Maximum level difference in levels between killer and PC being awarded XP. + * Helps stop powerlevelling by detering low level characters hanging around + * with 1 very strong char. + */ +const string PRC_XP_MAX_LEVEL_DIFF = "PRC_XP_MAX_LEVEL_DIFF"; + +/** + * Gives XP to NPCs when no PCs are in their faction + * This might cause lag if large numebrs of NPCs in the same faction. + */ +const string PRC_XP_GIVE_XP_TO_NON_PC_FACTIONS = "PRC_XP_GIVE_XP_TO_NON_PC_FACTIONS"; + + + + +/******************************************************************************\ +* Database and Letoscript switches * +\******************************************************************************/ + +/** + * Set this if you want to use the bioware db for 2da caching + * the value is the number of Hbs between caching runs + * Defaults to 300 (30 mins) if not set + * cache will be flushed automatically when the PRC version changes + * If this is set to -1 or lower, it is never stored for persistance over + * module restarts. + * The bioware database will bloat infinitely on Linux, due to biowares poor + * handling. + */ +const string PRC_USE_BIOWARE_DATABASE = "PRC_USE_BIOWARE_DATABASE"; + +/** + * Set this if you are using NWNX and any sort of database. + */ +const string PRC_USE_DATABASE = "PRC_USE_DATABASE"; + +/** + * Set this if you are using SQLite (the built-in database in NWNX-ODBC2). + * This will use transactions and SQLite specific syntax. + */ +const string PRC_DB_SQLITE = "PRC_DB_SQLITE"; + +/** + * This is the interval of each transaction. By default it is 600 seconds. + * Shorter will mean slower, but less data lost in the event of a server crash. + * Longer is visa versa. + */ +const string PRC_DB_SQLITE_INTERVAL = "PRC_DB_SQLITE_INTERVAL"; + +/** + * Set this if you are using MySQL. + * This will not use transactions and will use MySQL specific syntax + */ +const string PRC_DB_MYSQL = "PRC_DB_MYSQL"; + + +/** + * [DEFUNCT] + * This will precache 2da files into the database. + * The first time a module runs with this set it will lag a lot for a long time + * as the game does 2da reads. + * Afterwards it will be much faster. + * This is a really, really long lag. Like days/weeks type length. + * This is not the "normal" precaching that the spellbooks & psionics does. + */ +const string PRC_DB_PRECACHE = "PRC_DB_PRECACHE"; + +/** + * [DEFUNCT] + * TODO: Write description. + */ +const string PRC_USE_LETOSCRIPT = "PRC_USE_LETOSCRIPT"; + +/** + * [DEFUNCT] + * Set this to 1 if using build 18 + */ +const string PRC_LETOSCRIPT_PHEONIX_SYNTAX = "PRC_LETOSCRIPT_PHEONIX_SYNTAX"; + +/** + * [DEFUNCT] + * Set this to 1 to have Letoscript convert stat boosts on the hide to + * permanent ones. + */ +const string PRC_LETOSCRIPT_FIX_ABILITIES = "PRC_LETOSCRIPT_FIX_ABILITIES"; + +/** + * [DEFUNCT] + * Letoscript needs a string named PRC_LETOSCRIPT_NWN_DIR set to the + * directory of NWN. If it doesnt work, try different slash options: // \\ / \ + */ +const string PRC_LETOSCRIPT_NWN_DIR = "PRC_LETOSCRIPT_NWN_DIR"; + +/** + * [DEFUNCT] + * Switch so that Unicorn will use the SQL database for SCO/RCO + * Must have the zeoslib.dlls installed for this + * + * UNTESTED!!! + */ +const string PRC_LETOSCRIPT_UNICORN_SQL = "PRC_LETOSCRIPT_UNICORN_SQL"; + +/** + * [DEFUNCT] + * This is a string, not integer. + * If the IP is set, Letoscript will use ActivatePortal instead of booting. + * The IP and Password must be correct for your server or bad things will happen. + * - If your IP is non-static make sure this is kept up to date. + * + * See the Lexicon entry on ActivatePortal for more information. + * + * @see PRC_LETOSCRIPT_PORTAL_PASSWORD + */ +const string PRC_LETOSCRIPT_PORTAL_IP = "PRC_LETOSCRIPT_PORTAL_IP"; + +/** + * [DEFUNCT] + * This is a string, not integer. + * If the IP is set, Letoscript will use ActivatePortal instead of booting. + * The IP and Password must be correct for your server or bad things will happen. + * - If your IP is non-static make sure this is kept up to date. + * + * See the Lexicon entry on ActivatePortal for more information. + * + * @see PRC_LETOSCRIPT_PORTAL_IP + */ +const string PRC_LETOSCRIPT_PORTAL_PASSWORD = "PRC_LETOSCRIPT_PORTAL_PASSWORD"; + +/** + * [DEFUNCT] + * If set you must be using Unicorn. + * Will use getnewest bic instead of filename reconstruction (which fails if + * multiple characters have the same name) + */ +const string PRC_LETOSCRIPT_GETNEWESTBIC = "PRC_LETOSCRIPT_GETNEWESTBIC"; + +//This switch is set automatically after prc_onmodload detects NWNX_Funcs plugin +const string PRC_NWNX_FUNCS = "PRC_NWNX_FUNCS"; + + +/******************************************************************************\ +* ConvoCC switches [DEFUNCT] * +\******************************************************************************/ + +/** + * [DEFUNCT] + * Activates the ConvoCC. + * This doesn't turn on the database and letoscript as well, which you must + * do yourself. + * + * @see PRC_USE_DATABASE + * @see PRC_USE_LETOSCRIPT + */ +const string PRC_CONVOCC_ENABLE = "PRC_CONVOCC_ENABLE"; + +/** + * [DEFUNCT] + * Avariel characters have bird wings. + */ +const string PRC_CONVOCC_AVARIEL_WINGS = "PRC_CONVOCC_AVARIEL_WINGS"; + +/** + * [DEFUNCT] + * Fey'ri characters have bat wings. + */ +const string PRC_CONVOCC_FEYRI_WINGS = "PRC_CONVOCC_FEYRI_WINGS"; + +/** + * [DEFUNCT] + * Aasimar characters have the option of angel wings + * Note: Not set by PRC_CONVOCC_ENFORCE_PNP_RACIAL as it isn't part of PnP + */ + +const string PRC_CONVOCC_AASIMAR_WINGS = "PRC_CONVOCC_AASIMAR_WINGS"; + +/** + * [DEFUNCT] + * Fey'ri characters have a demonic tail. + */ +const string PRC_CONVOCC_FEYRI_TAIL = "PRC_CONVOCC_FEYRI_TAIL"; + +/** + * [DEFUNCT] + * Teifling characters have the option of a demonic tail. + */ +const string PRC_CONVOCC_TIEFLING_TAIL = "PRC_CONVOCC_TIEFLING_TAIL"; + +/** + * [DEFUNCT] + * Force Drow characters to be of the correct gender for their race. + */ +const string PRC_CONVOCC_DROW_ENFORCE_GENDER = "PRC_CONVOCC_DROW_ENFORCE_GENDER"; + +/** + *[DEFUNCT] + * Force Genasi clerics to select the relevant elemental domain as one of + * their feats. + */ +const string PRC_CONVOCC_GENASI_ENFORCE_DOMAINS = "PRC_CONVOCC_GENASI_ENFORCE_DOMAINS"; + +/** + *[DEFUNCT] + * Female Rakshasa use the female rakshasa model. Use together with PRC_CONVOCC_USE_RACIAL_APPEARANCES + * @see PRC_CONVOCC_USE_RACIAL_APPEARANCES + */ +const string PRC_CONVOCC_RAKSHASA_FEMALE_APPEARANCE = "PRC_CONVOCC_RAKSHASA_FEMALE_APPEARANCE"; + +/** + *[DEFUNCT] + * A combination switch to turn on all the racial enforcement settings. + * @see PRC_CONVOCC_RAKSHASA_FEMALE_APPEARANCE + * @see PRC_CONVOCC_GENASI_ENFORCE_DOMAINS + * @see PRC_CONVOCC_DROW_ENFORCE_GENDER + * @see PRC_CONVOCC_TIEFLING_TAIL + * @see PRC_CONVOCC_FEYRI_TAIL + * @see PRC_CONVOCC_FEYRI_WINGS + * @see PRC_CONVOCC_AVARIEL_WINGS + */ +const string PRC_CONVOCC_ENFORCE_PNP_RACIAL = "PRC_CONVOCC_ENFORCE_PNP_RACIAL"; + +/** + * [DEFUNCT] + * Note: feat enforcement switches don't do anything (TODO?) + */ + +/** Separate enforcement of feats with special restrictions. */ +const string PRC_CONVOCC_ENFORCE_BLOOD_OF_THE_WARLORD= "PRC_CONVOCC_ENFORCE_BLOOD_OF_THE_WARLORD"; +/** Separate enforcement of feats with special restrictions. */ +const string PRC_CONVOCC_ENFORCE_FEAT_NIMBUSLIGHT = "PRC_CONVOCC_ENFORCE_FEAT_NIMBUSLIGHT"; +/** Separate enforcement of feats with special restrictions. */ +const string PRC_CONVOCC_ENFORCE_FEAT_HOLYRADIANCE = "PRC_CONVOCC_ENFORCE_FEAT_HOLYRADIANCE"; +/** Separate enforcement of feats with special restrictions. */ +const string PRC_CONVOCC_ENFORCE_FEAT_SERVHEAVEN = "PRC_CONVOCC_ENFORCE_FEAT_SERVHEAVEN"; +/** Separate enforcement of feats with special restrictions. */ +const string PRC_CONVOCC_ENFORCE_FEAT_SAC_VOW = "PRC_CONVOCC_ENFORCE_FEAT_SAC_VOW"; +/** Separate enforcement of feats with special restrictions. */ +const string PRC_CONVOCC_ENFORCE_FEAT_VOW_OBED = "PRC_CONVOCC_ENFORCE_FEAT_VOW_OBED"; +/** Separate enforcement of feats with special restrictions. */ +const string PRC_CONVOCC_ENFORCE_FEAT_THRALL_TO_DEMON= "PRC_CONVOCC_ENFORCE_FEAT_THRALL_TO_DEMON"; +/** Separate enforcement of feats with special restrictions. */ +const string PRC_CONVOCC_ENFORCE_FEAT_DISCIPLE_OF_DARKNESS="PRC_CONVOCC_ENFORCE_FEAT_DISCIPLE_OF_DARKNESS"; +/** Separate enforcement of feats with special restrictions. */ +const string PRC_CONVOCC_ENFORCE_FEAT_LICHLOVED = "PRC_CONVOCC_ENFORCE_FEAT_LICHLOVED"; +/** Separate enforcement of feats with special restrictions. */ +const string PRC_CONVOCC_ENFORCE_FEAT_EVIL_BRANDS = "PRC_CONVOCC_ENFORCE_FEAT_EVIL_BRANDS"; +/** Separate enforcement of feats with special restrictions. */ +const string PRC_CONVOCC_ENFORCE_FEAT_VILE_WILL_DEFORM="PRC_CONVOCC_ENFORCE_FEAT_VILE_WILL_DEFORM"; +/** Separate enforcement of feats with special restrictions. */ +const string PRC_CONVOCC_ENFORCE_FEAT_VILE_DEFORM_OBESE="PRC_CONVOCC_ENFORCE_FEAT_VILE_DEFORM_OBESE"; +/** Separate enforcement of feats with special restrictions. */ +const string PRC_CONVOCC_ENFORCE_FEAT_VILE_DEFORM_GAUNT="PRC_CONVOCC_ENFORCE_FEAT_VILE_DEFORM_GAUNT"; +/** Separate enforcement of feats with special restrictions. */ +const string PRC_CONVOCC_ENFORCE_FEAT_LOLTHS_MEAT = "PRC_CONVOCC_ENFORCE_FEAT_LOLTHS_MEAT"; + + +/** + *[DEFUNCT] + * A combination switch to turn on all the feat enforcement settings. Doesn't do anything + */ +const string PRC_CONVOCC_ENFORCE_FEATS = "PRC_CONVOCC_ENFORCE_FEATS"; + +/** + * [DEFUNCT] + * Stops players from changing their wings. Turning this on gives players only the "none" choice + * at the wing stage of the convoCC. Use in conjuction with the wing switches. + * @see PRC_CONVOCC_AVARIEL_WINGS + * @see PRC_CONVOCC_FEYRI_WINGS + * @see PRC_CONVOCC_AASIMAR_WINGS + */ +const string PRC_CONVOCC_DISALLOW_CUSTOMISE_WINGS = "PRC_CONVOCC_DISALLOW_CUSTOMISE_WINGS"; + +/** + * [DEFUNCT] + * Stops players from changing their tail. Turning this on gives players only the "none" choice + * at the tail stage of the convoCC. Use in conjuction with the tail switches. + * @see PRC_CONVOCC_FEYRI_TAIL + * @see PRC_CONVOCC_TIEFLING_TAIL + */ +const string PRC_CONVOCC_DISALLOW_CUSTOMISE_TAIL = "PRC_CONVOCC_DISALLOW_CUSTOMISE_TAIL"; + +/** + * [DEFUNCT] + * Stops players from changing their model at all. Doesn't do anything + */ +const string PRC_CONVOCC_DISALLOW_CUSTOMISE_MODEL = "PRC_CONVOCC_DISALLOW_CUSTOMISE_MODEL"; + +/** + * [DEFUNCT] + * Players are only given a choice of appearances that match their race. For most races, this is the + * default appearance defined in racialtypes.2da. + * @see PRC_CONVOCC_RAKSHASA_FEMALE_APPEARANCE + */ +const string PRC_CONVOCC_USE_RACIAL_APPEARANCES = "PRC_CONVOCC_USE_RACIAL_APPEARANCES"; +/** + * [DEFUNCT] + * Player can only choose a portrait that matches their race as in portraits.2da. Because + * Bioware's elf, dwarf etc. subrace portraits are labelled as eg. 'elf' not 'drow' and because + * half elves have no portraits, this is actually done on appearance and not on race for PCs using + * Bioware's PC appearance models. + */ +const string PRC_CONVOCC_USE_RACIAL_PORTRAIT = "PRC_CONVOCC_USE_RACIAL_PORTRAIT"; + +/** + * [DEFUNCT] + * Players can only select from the player voicesets. NPC voicesets are not + * complete, so wont play sounds for many things such as emotes. + */ +const string PRC_CONVOCC_ONLY_PLAYER_VOICESETS = "PRC_CONVOCC_ONLY_PLAYER_VOICESETS"; + +/** + * [DEFUNCT] + * Only allows players to select voiceset of the same gender as their character. + */ +const string PRC_CONVOCC_RESTRICT_VOICESETS_BY_SEX = "PRC_CONVOCC_RESTRICT_VOICESETS_BY_SEX"; + +/** + * [DEFUNCT] + * Allow players to keep their exisiting voiceset. + * The ConvoCC cannot allow players to select custom voiceset, so the only way + * for players to have them is to select them in the Bioware character creator + * and then select to keep them in the ConvoCC. + */ +const string PRC_CONVOCC_ALLOW_TO_KEEP_VOICESET = "PRC_CONVOCC_ALLOW_TO_KEEP_VOICESET"; + +/** + * [DEFUNCT] + * Allow players to keep their exisiting portrait. + * The ConvoCC cannot allow players to select custom portraits, so the only way + * for players to have them is to select them in the Bioware character creator + * and then select to keep them in the ConvoCC. + */ +const string PRC_CONVOCC_ALLOW_TO_KEEP_PORTRAIT = "PRC_CONVOCC_ALLOW_TO_KEEP_PORTRAIT"; + +/** + * [DEFUNCT] + * Only allow players to select portraits of the same gender as their character. + * Most of the NPC portraits do not have a gender so are also removed. + */ +const string PRC_CONVOCC_RESTRICT_PORTRAIT_BY_SEX = "PRC_CONVOCC_RESTRICT_PORTRAIT_BY_SEX"; + +/** + * [DEFUNCT] + * This option give players the ability to start with racial hit dice for some + * of the more powerful races. These are defined in ECL.2da. + * For these races, players do not pick a class in the ConvoCC but instead + * select 1 or more levels in a racial class (such as monsterous humanoid, or + * outsider). + * This is not a complete ECL system, it merely gives players the racial hit + * dice component of their race. It does not make any measure of the Level + * Adjustment component. For example, a pixie has no racial hit dice, but has a + * +4 level adjustment. Doesn't do anything + */ +const string PRC_CONVOCC_ENABLE_RACIAL_HITDICE = "PRC_CONVOCC_ENABLE_RACIAL_HITDICE"; + +/** + * [DEFUNCT] + * This option allows players to keep their skillpoints from one level to + * the next, if they want to. + */ +const string PRC_CONVOCC_ALLOW_SKILL_POINT_ROLLOVER = "PRC_CONVOCC_ALLOW_SKILL_POINT_ROLLOVER"; + +/** + * [DEFUNCT] + * This will identify new characters based on XP as in v1.3 + * This is less secure than using the encrypted key. + * @see PRC_CONVOCC_ENCRYPTION_KEY + */ +const string PRC_CONVOCC_USE_XP_FOR_NEW_CHAR = "PRC_CONVOCC_USE_XP_FOR_NEW_CHAR"; + +/** + * [DEFUNCT] + * This is the key used to encrypt characters' names if USE_XP_FOR_NEW_CHAR + * is false in order to identify returning characters. It should be in the + * range 1-100. + * If USE_XP_FOR_NEW_CHAR is true along with this, then returning characters + * will be encrypted too, so once everone has logged on at least once, + * USE_XP_FOR_NEW_CHAR can be set to false for greater security. + * + * WARNING: Changing this value after some PCs have gone through the convoCC will + * cause them to have to go through it again. The encryption uses the player's + * public CD key, so they won't be able to log into their account from different + * NWN installs as the key won't match using this system + */ +const string PRC_CONVOCC_ENCRYPTION_KEY = "PRC_CONVOCC_ENCRYPTION_KEY"; + +/** + * [DEFUNCT] + * As requested, an option to alter the amount of points available in the stat + * point-buy at character creation. + * Default: 30 + */ +const string PRC_CONVOCC_STAT_POINTS = "PRC_CONVOCC_STAT_POINTS"; + +/** + * [DEFUNCT] + * As requested, if set this will give a number of bonus feats equal to this + * value to each created character, similar to human Quick To Master feat. + */ +const string PRC_CONVOCC_BONUS_FEATS = "PRC_CONVOCC_BONUS_FEATS"; + +/** + * [DEFUNCT] + * As requested, this will cap the maximum a stat can start at, excluding racial + * modifies. + * Default: 18 + */ +const string PRC_CONVOCC_MAX_STAT = "PRC_CONVOCC_MAX_STAT"; + +/** + * [DEFUNCT] + * As requested, this will change the skill point multplier at level 1. + * Default: 4 + */ +const string PRC_CONVOCC_SKILL_MULTIPLIER = "PRC_CONVOCC_SKILL_MULTIPLIER"; + +/** + * [DEFUNCT] + * As requested, this will give a bonus to skill points after multiplication. + */ +const string PRC_CONVOCC_SKILL_BONUS = "PRC_CONVOCC_SKILL_BONUS"; + +/** + * [DEFUNCT] + * When set, the convoCC NO LONGER STARTS AUTOMATICALLY on logging in. It must be called + * by a script in the module. This allows the module builder to start the convoCC from a + * particular area or trigger's On Enter event. The script should call the convoCC with + * ExecuteScript("prc_ccc_main", oPC) where oPC is the PC. It's advisable to check the + * entering object is a PC and not a NPC or DM. + */ + +const string PRC_CONVOCC_CUSTOM_START_LOCATION = "PRC_CONVOCC_CUSTOM_START_LOCATION"; + +/** + * [DEFUNCT] + * When set, this switch causes a custom script to be used to determine whether a PC should go + * through the convoCC or not. + * The script must: + * - be called "ccc_custom_enter" + * - set the local int "CONVOCC_LAST_STATUS" on the PC (OBJECT_SELF) + * - include prc_ccc_const (for the constants the local int can be set to) + * otherwise the PC will always be booted + * + * possible values for CONVOCC_LAST_STATUS: + * CONVOCC_ENTER_BOOT_PC (causes the PC to get kicked) + * CONVOCC_ENTER_NEW_PC (causes the PC to go through the convoCC) + * CONVOCC_ENTER_RETURNING_PC (causes the PC to skip the convoCC) + * + * This switch will completely bypass the convoCC methods for determining whether to run the + * convoCC on an entering PC, so if necessary, your custom marker for 'done' would be set + * in 'ccc_custom_exit' + * @see PRC_CONVOCC_CUSTOM_EXIT_SCRIPT + */ +const string PRC_CONVOCC_CUSTOM_ENTER_SCRIPT = "PRC_CONVOCC_CUSTOM_ENTER_SCRIPT"; + +/** + * [DEFUNCT] + * When set, this switch causes a custom script to be executed at the last stage of the convoCC, + * just before booting the player. The script must be named 'ccc_custom_exit'. + * Possible uses include: giving PCs gold and/or equipment, giving PCs PW items + * (even plot items get removed at the start of the convoCC), setting a new persistant location, + * setting a custom marker for having done the convoCC in conjunction with + * 'ccc_custom_enter' + * @see PRC_CONVOCC_CUSTOM_ENTER_SCRIPT + */ + +const string PRC_CONVOCC_CUSTOM_EXIT_SCRIPT = "PRC_CONVOCC_CUSTOM_EXIT_SCRIPT"; + +/******************************************************************************\ +* Truenaming switches * +\******************************************************************************/ + +/** + * Sets the CR Multiplier for Evolving Mind utterances + * This is divided by 100 to get a float. + * Ex: To multiply by 1.5, set this value to 150 + * + * The formula used is (CR * Multiplier) + 15 + * + * defaults to PnP: (CR * 2) + 15 + */ +const string PRC_TRUENAME_CR_MULTIPLIER = "PRC_TRUENAME_CR_MULTIPLIER"; + +/** + * Gives a bonus based on Truenamer level + * PC Truenamer level is divided by this value + * Ex: To give a bonus equal to 1/2 Truenamer level, set this to 2 + * + * The formula used is (CR * Multiplier) + 15 - Bonus + * + * defaults to PnP: 0/No bonus + */ +const string PRC_TRUENAME_LEVEL_BONUS = "PRC_TRUENAME_LEVEL_BONUS"; + +/** + * Sets the Constant value added to the DC + * Ex: To make the constant 10, simply set this value to 10 + * + * The formula used is (CR * Multiplier) + Constant + * + * defaults to PnP: +15. + */ +const string PRC_TRUENAME_DC_CONSTANT = "PRC_TRUENAME_DC_CONSTANT"; + +/** + * Turns off the Law of Sequence when set to 1 + * + * defaults to PnP: On + */ +const string PRC_LAW_OF_SEQUENCE = "PRC_LAW_OF_SEQUENCE"; + +/** + * Turns off the Law of Resistance when set to 1 + * + * defaults to PnP: On + */ +const string PRC_LAW_OF_RESISTANCE = "PRC_LAW_OF_RESISTANCE"; + +/** + * Sets the Constant value added to the DC + * Ex: To make the constant 10, simply set this value to 10 + * + * The formula used is Constant + (2 * Utterance Level) + * + * defaults to PnP: +25. + */ +const string PRC_PERFECTED_MAP_CONSTANT = "PRC_PERFECTED_MAP_CONSTANT"; + +/** + * Sets the Multiplier value added to the DC + * Ex: To make the multiplier 4, simply set this value to 4 + * + * The formula used is 25 + (Multiplier * Utterance Level) + * + * defaults to PnP: 2. + */ +const string PRC_PERFECTED_MAP_MULTIPLIER = "PRC_PERFECTED_MAP_MULTIPLIER"; + +/******************************************************************************\ +* Binding switches * +\******************************************************************************/ + +/** + * Sets how many seconds it takes to contact a vestige. + * Any number less than 6 is ignored + */ +const string PRC_CONTACT_VESTIGE_TIMER = "PRC_CONTACT_VESTIGE_TIMER"; + +/** + * Sets how many seconds it takes to bind a vestige. + * Any number less than 12 is ignored + */ +const string PRC_BIND_VESTIGE_TIMER = "PRC_BIND_VESTIGE_TIMER"; + +/******************************************************************************\ +* Encounter switches * +\******************************************************************************/ + +/** Encounter areas + * Setting this will disable access to the encounter areas from the PRC Options convo + */ +const string PRC_DISABLE_ENCOUNTERS = "PRC_DISABLE_ENCOUNTERS"; + +/** + * This script prevents hacking to another user account without Master Server Authentication + * + * Stores public cd keys for each account in database. In case the key was registered with + * another account player is booted from the server. + * + * All credits go to FunkySwerve + */ +const string PRC_PW_SECURITY_CD_CHECK = "PRC_PW_SECURITY_CD_CHECK"; + + +/******************************************************************************\ +* Debugging Switches * +\******************************************************************************/ + +/** + * Toggles everything guarded by "if(DEBUG)". Mostly calls to DoDebug(). + */ +const string PRC_DEBUG = "PRC_DEBUG"; + + + + +/////////////////////// +// Function protypes // +/////////////////////// +/* NOTE: if you are looking for a function that used to be in here, it's probably in inc_switch_setup */ + +/** + * Checks the state of a PRC switch. + * NOTE: This will only work with switches that use integer values. You + * must get the value of non-integer-valued switches manually. + * + * @param sSwitch One of the PRC_* constant strings defined in prc_inc_switch + * @return The value of the switch queried + */ +int GetPRCSwitch(string sSwitch); + +/** + * Sets a PRC switch state. + * NOTE: As this will only set switches with integer values, you will need + * to manually set the (few) switches that should have a value other than + * integer. + * + * @param sSwitch One of the PRC_* constant strings defined in prc_inc_switch + * @param nState The integer value to set the switch to + */ +void SetPRCSwitch(string sSwitch, int nState); + +//const string PRC_FILE_END_TOKEN = "prc_fe_tkn"; + +////////////////////////// +// Function definitions // +////////////////////////// + +int GetPRCSwitch(string sSwitch) +{ + return GetLocalInt(GetModule(), sSwitch); +} + +void SetPRCSwitch(string sSwitch, int nState) +{ + SetLocalInt(GetModule(), sSwitch, nState); +} + + +// void main (){} diff --git a/src/include/prc_inc_teleport.nss b/src/include/prc_inc_teleport.nss new file mode 100644 index 0000000..08317d2 --- /dev/null +++ b/src/include/prc_inc_teleport.nss @@ -0,0 +1,901 @@ +//:://///////////////////////////////////////////// +//:: Teleport include +//:: prc_inc_teleport +//:://///////////////////////////////////////////// +/** @file + This include contains operations to maintain + an array of metalocations used as teleport target + locations on a PC. In addition, there is a function + for starting a conversation for the PC to select a + location from their array. + + All the operations work only on PCs, as there is no + AI that could have NPCs take any advantage of the + system. +*/ +//::////////////////////////////////////////////// +//:: Created By: Ornedan +//:: Created On: 29.05.2005 +//::////////////////////////////////////////////// + +#include "prc_inc_combat" +#include "inc_dynconv" + +/////////////////////// +/* Public Constants */ +/////////////////////// + +/** + * The name of the array where GetTeleportingObjects() stores the creatures it has + * determined should teleport with the current spell. + */ +const string PRC_TELEPORTING_OBJECTS_ARRAY = "PRC_TeleportingObjectList"; + +/** + * The number of the teleport quickselection slots. Also the index number of the highest slot, + * as they are numbered starting from 1. + */ +const int PRC_NUM_TELEPORT_QUICKSELECTS = 2; + +/** + * A constant for the value of slot parameter used when accessing the active quickselection. + */ +const int PRC_TELEPORT_ACTIVE_QUICKSELECTION = -1; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Starts the conversation for selecting the target location for a teleport. + * Once the PC has made his/her/it's selection, the result is stored on the + * PC and the callbackscript is run. + * + * @param oPC The PC that will make the selection. + * @param sCallbackScript The name of the script to run once the PC has made + * their decision. + * @param sCallbackVar The name of the local variable where the PC's choice + * will be stored. + * @param bMeta If this is TRUE, the result will be stored as a + * metalocation. Otherwise it will be stored as a location. + * @param bForce If this is TRUE, an attempt will be made to make sure + * the PC will make the choice. ClearAllActions will be + * called to prevent other activity from interfering with + * the conversation strating and the PC will not be allowed + * to abort the conversation. + */ +void ChooseTeleportTargetLocation(object oPC, string sCallbackScript, string sCallbackVar, + int bMeta = FALSE, int bForce = FALSE); + +/** + * Returns the first teleport target location in the array and initialises + * the iteration counter for calls to GetNextStoredTeleportTargetLocation(). + * + * @param oPC The PC on whose array to operate. + * @return The first element of the array or the location of oPC if the + * array is empty. + */ +struct metalocation GetFirstStoredTeleportTargetLocation(object oPC); + +/** + * Returns the element at the current value of the iteration counter and + * increments the counter. + * + * @param oPC The PC on whose array to operate. + * @return The next element in the array or null metalocation if the + * iteration has reached the end of the array or if the iteration + * counter hasn't been initialised. + * + * @see GetFirstStoredTeleportTargetLocation + */ +struct metalocation GetNextStoredTeleportTargetLocation(object oPC); + +/** + * Returns the teleport target location stored at the given index in the array. + * This function does not interfere with the iteration counter used by + * GetFirstStoredTeleportTargetLocation and GetNextStoredTeleportTargetLocation. + * + * @param oPC The PC on whose array to operate. + * @param nInd The array index from which to retrieve the location. + * @return The teleport target location stored at the given index, or null + * metalocation if the index was out of array bounds. + */ +struct metalocation GetNthStoredTeleportTargetLocation(object oPC, int nInd); + +/** + * Returns the number of elements in the teleport target locations array on the + * PC. + * + * @param oPC The PC on whose array to operate. + * @return The number of locations stored in the array. + */ +int GetNumberOfStoredTeleportTargetLocations(object oPC); + +/** + * Checks whether the PC has a teleport quickselection active and if so, + * whether it contains a valid metalocation. + * + * @param oPC The PC whose quickselection to check. + * @param nSlot The quickselection slot to check. Valid values are PRC_TELEPORT_ACTIVE_QUICKSELECTION, + * which checks the active quickselection and numbers from 1 to PRC_NUM_TELEPORT_QUICKSELECTS. + * + * @return TRUE if the PC has a quickselection active and it is + * a valid metalocation, FALSE otherwise. + */ +int GetHasTeleportQuickSelection(object oPC, int nSlot = PRC_TELEPORT_ACTIVE_QUICKSELECTION); + +/** + * Gets the given creature's active teleport quickselection, if any. + * + * @param oPC The PC whose quickselection to check. + * @param bClear Whether to clear the quickselection after getting it. + * @return The PC's active quickselection, or null metalocation + * if there is none. + */ +struct metalocation GetActiveTeleportQuickSelection(object oPC, int bClear = FALSE); + +/** + * Gets the contents of one of the given creature's quickselect slots. Or the + * active quickselection if the slot parameter is -1. + * + * @param oPC The PC whose quickselection to get. + * @param nSlot The slot to get from. Valid values are PRC_TELEPORT_ACTIVE_QUICKSELECTION, + * which returns the active quickselection and numbers from 1 to PRC_NUM_TELEPORT_QUICKSELECTS. + * + * @return The quickselection in the given slot, or null metalocation if the + * slot was empty. Also returns null metalocation on error. + */ +struct metalocation GetTeleportQuickSelection(object oPC, int nSlot = PRC_TELEPORT_ACTIVE_QUICKSELECTION); + +/** + * Sets one of the PC's teleport quickselections to the given value. + * Has no effect on error. + * + * @param oPC The PC whose quickselection to set. + * @param mlocL The metalocation to be stored. + * + * @param nSlot The slot to store the metalocation in. Valid values are PRC_TELEPORT_ACTIVE_QUICKSELECTION, + * which sets the active quickselection and numbers from 1 to PRC_NUM_TELEPORT_QUICKSELECTS. + */ +void SetTeleportQuickSelection(object oPC, struct metalocation mlocL, int nSlot = PRC_TELEPORT_ACTIVE_QUICKSELECTION); + +/** + * Deletes the contents of a teleport quickselection slot on the given creature. + * + * @param oPC The PC whose quickselection to delete. + * @param nSlot The quickselection slot to clear. + */ +void RemoveTeleportQuickSelection(object oPC, int nSlot = PRC_TELEPORT_ACTIVE_QUICKSELECTION); + +/** + * Removes the teleport target location last returned by GetFirstStoredTeleportTargetLocation + * or GetNextStoredTeleportTargetLocation from the PCs array. + * Resets the iteration counter to prevent possible errors. + * + * @param oPC The PC on whose array to operate. + */ +void RemoveCurrentTeleportTargetLocation(object oPC); + +/** + * Removes the teleport target location at the given index in the PCs array. The + * elements after the removed index will be moved down so there will not be empty + * elements in the middle of the array. + * Resets the iteration counter to prevent possible errors. + * + * @param oPC The PC on whose array to operate. + * @param nInd The index from which to delete. + */ +void RemoveNthTeleportTargetLocation(object oPC, int nInd); + +/** + * Adds a location to the end of the teleport target array of the given PC. + * Implemented by constructing a metalocation out of locToAdd and sName and + * calling AddTeleportTargetLocationAsMeta. + * + * @param oPC The PC to whose teleport target location array the + * location is to be added. + * @param locToAdd The location to store. + * @param sName The name of the teleport target location. + * + * @return TRUE if the addition was successfull, FALSE otherwise. + */ +int AddTeleportTargetLocation(object oPC, location locToAdd, string sName); + +/** + * Adds a metalocation to the end of the teleport target array of the given PC. + * + * @param oPC The PC to whose teleport target location array the + * metalocation is to be added. + * @param mlocToAdd The metalocation to store. + * + * @return TRUE if the addition was successfull, FALSE otherwise. + */ +int AddTeleportTargetLocationAsMeta(object oPC, struct metalocation mlocToAdd); + +/** + * Creates a map pin for each of the given PC's teleport target locations that do not + * have a map pin created for them yet. Is not totally reliable. + * Known problems: + * Cannot detect if a map pin created for a location has been deleted. + * + * @param oPC The PC for whom to create the map pins. + */ +void TeleportLocationsToMapPins(object oPC); + +/** + * This function checks whether the given creature can teleport from + * it's current location. It is intended to be run within teleport + * spellscripts. + * + * @param oCreature A creature casting a teleportation spell. + * @param lTarget The location the creature is going to teleport to. + * @param bInform If this is true, the creature is sent a message if + * it is not allowed to teleport. + * @param bPublic Used as the bBroadcastToFaction parameter of + * FloatingTextStringOnCreature() when informing oCreature + * of error. + * @return TRUE if the creature can teleport, FALSE if it can't. + */ +int GetCanTeleport(object oCreature, location lTarget, int bMovesCreature = FALSE, int bInform = FALSE, int bPublic = FALSE); + +/** + * Common code for teleportation spells that: + * 1) Always teleport the caster. + * 2) Can be used to teleport other willing targets within touch range. + * 2b) The amount of these additional targets is limited to + * 1 / 3 caster|manifester levels. + * + * The results will be stored in a local array on the caster, + * retrievable using functions from prc_inc_array. + * The name of the array is contained within the constant PRC_TELEPORTING_OBJECTS_ARRAY. + * + * @param oCaster The object casting the teleportation spell + * @param nCasterLvl The caster level of oCaster when casting the spell in question. + * @param bSelfOrParty If this is TRUE, willing creatures (party members) + * within 10ft of oCaster are taken along. If FALSE, + * only the caster is teleported. + */ +void GetTeleportingObjects(object oCaster, int nCasterLvl, int bSelfOrParty); + +/** + * Determines whether the given teleportation target location can be used, or whether + * the effect causing the teleportation errors, changing the target location. + * Any inter-area teleportation effects should use this check even if they normally + * always work correctly. + * + * @param lOriginal The original destination of the teleport. + * @param oUser The user of the teleportation causing effect. + * @param bNormallyErroless Whether the effect causing the teleprotation can normally + * error. May be overridden by variables set on the target area. + * @param bRecursing Whether the function was called again due to Mishap being + * rolled or not. This should always be left FALSE. + * + * @return Either lOrignal, or another location based on the error roll. + */ +location GetTeleportError(location lOriginal, object oUser, int bNormallyErroless = FALSE, int bRecursing = FALSE); + +/** + * Increments a marker on the target that will cause it to be unable to be + * teleported. ie. GetCanTeleport() will return FALSE for the target. + * Uses of DisallowTeleport() stack, so for example, if the function has + * been called twice for a particular target, that target needs to have + * AllowTeleport called on it twice before it can teleport again (or once with + * the bClearAll parameter TRUE) + * + * @param oTarget Target object to forbide the teleportation of. + */ +void DisallowTeleport(object oTarget); + +/** + * Reverse of DisallowTeleport(), a call to this function makes the target + * eligible for teleportation again. + * NOTE: multiple forbiddances stack, and by default uses of this function + * only reduces the forbiddace. + * + * @param oTarget Target to allow teleportation for again. + * @param bClearAll If TRUE, fully clears the forbiddance marker, otherwise + * just decrements the value by one. + */ +void AllowTeleport(object oTarget, int bClearAll = FALSE); + +/** + * Performs full attack on eligible target at the end of a teleport sequence + * + * @param oPC The caller + */ +void ShadowPounce(object oPC); + +////////////////////////////////////////////////// +/* Internal Constants - nothing to see here :D */ +////////////////////////////////////////////////// + +/// Internal constant - Name of the array where the teleport target locations are stored. +const string PRC_TELEPORT_ARRAY_NAME = "PRC_TeleportLocation_Array"; +/// Internal constant - Name of personal switch telling whether to create map pins for a particular PC's stored locations. +const string PRC_TELEPORT_CREATE_MAP_PINS = "PRC_Teleport_CreateMapPins"; +/// Internal constant - Name of personal switch telling how long the listener will wait for the player to speak a name when a new location is stored. +const string PRC_TELEPORT_NAMING_TIMER_VARNAME = "PRC_Teleport_NamingListenerDuration"; +/// Internal constant - Name of personal swithc telling whether to automatically store the latest location the character rested at +const string PRC_TELEPORT_ONREST_MARKLOCATION = "PRC_Teleport_OnRest_MarkLocation"; + + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +void ChooseTeleportTargetLocation(object oPC, string sCallbackScript, string sCallbackVar, + int bMeta = FALSE, int bForce = TRUE) +{ +/* // The system is only useful to PCs. If it is at some point implemented for NPCs, change this. + if(!GetIsPC(oPC)) return;*/ + + // Make sure the PC has the feats for marking locations + ExecuteScript("prc_tp_mgmt_eval", oPC); + + int nSpellID = GetSpellId(); + + // Handle Word of Recall spell + if(nSpellID == SPELL_WORD_OF_RECALL_SELF + || nSpellID == SPELL_WORD_OF_RECALL_PARTY) + { + struct metalocation mlocL = GetLocalMetalocation(oPC, "PRC_WordOfRecall"); + + if(GetIsMetalocationInModule(mlocL)) + { + // Store the return value under the requested name and as the requested type + if(bMeta) + SetLocalMetalocation(oPC, sCallbackVar, mlocL); + else + SetLocalLocation(oPC, sCallbackVar, MetalocationToLocation(mlocL)); + + // Break the script execution association between this one and the callback script + // by delaying it. Probably unnecessary, but it will clear potential interference + // caused by things done in this execution + DelayCommand(0.2f, ExecuteScript(sCallbackScript, oPC)); + } + else + { + FloatingTextStrRefOnCreature(16789977, oPC, FALSE); + } + } + // Handle possible quickselection + else if(GetHasTeleportQuickSelection(oPC, PRC_TELEPORT_ACTIVE_QUICKSELECTION)) + { + // Get the quickselected metalocation and clear it + struct metalocation mlocL = GetActiveTeleportQuickSelection(oPC, TRUE); + int bTransViaPlants = GetLocalInt(oPC, "PRC_TransportViaPlants"); + DeleteLocalInt(oPC, "PRC_TransportViaPlants"); + object oArea = GetAreaFromMetalocation(mlocL); + + if((bTransViaPlants && GetIsAreaNatural(oArea) && !GetIsAreaInterior(oArea)) + || !bTransViaPlants) + { + // Store the return value under the requested name and as the requested type + if(bMeta) + SetLocalMetalocation(oPC, sCallbackVar, mlocL); + else + SetLocalLocation(oPC, sCallbackVar, MetalocationToLocation(mlocL)); + + // Break the script execution association between this one and the callback script + // by delaying it. Probably unnecessary, but it will clear potential interference + // caused by things done in this execution + DelayCommand(0.2f, ExecuteScript(sCallbackScript, oPC)); + } + else + { + SendMessageToPCByStrRef(oPC, 16789931); + } + } + // We have to go look at the stored array, so make sure it contains at least one entry + else if(!GetPersistantLocalInt(oPC, PRC_TELEPORT_ARRAY_NAME)) + {// "You do not have any locations marked for teleporting to!" + SendMessageToPCByStrRef(oPC, 16825305); + + // Store the PC's location + if(bMeta) + SetLocalMetalocation(oPC, sCallbackVar, LocationToMetalocation(GetLocation(oPC))); + else + SetLocalLocation(oPC, sCallbackVar, GetLocation(oPC)); + + // Break the script execution association between this one and the callback script + // by delaying it. Probably unnecessary, but it will clear potential interference + // caused by things done in this execution + DelayCommand(0.2f, ExecuteScript(sCallbackScript, oPC)); + } + // No quickselection was active and there is at least one location to select, so run the + // conversation to find out where the user wants to go + else + { + SetLocalString(oPC, "PRC_TeleportTargetSelection_CallbackScript", sCallbackScript); + SetLocalString(oPC, "PRC_TeleportTargetSelection_ReturnStoreName", sCallbackVar); + SetLocalInt(oPC, "PRC_TeleportTargetSelection_ReturnAsMetalocation", bMeta); + + StartDynamicConversation("prc_teleprt_conv", oPC, + bForce ? DYNCONV_EXIT_NOT_ALLOWED : DYNCONV_EXIT_ALLOWED_SHOW_CHOICE, + !bForce, bForce, oPC); + } +} + +struct metalocation GetFirstStoredTeleportTargetLocation(object oPC) +{ + // Return null if the array is empty + if(!GetPersistantLocalInt(oPC, PRC_TELEPORT_ARRAY_NAME)) + return LocationToMetalocation(GetLocation(oPC), "Error: No stored locations! Returned current location of " + GetName(oPC)); + + // Set the iterator value for subsequent calls to GetNextStoredTeleportTargetLocation() + SetLocalInt(oPC, "PRC_Teleport_Array_Iterator", 1); + // Clean away the iterator on script execution end + DelayCommand(0.0f, DeleteLocalInt(oPC, "PRC_Teleport_Array_Iterator")); + + return GetPersistantLocalMetalocation(oPC, PRC_TELEPORT_ARRAY_NAME + "_0"); +} + +struct metalocation GetNextStoredTeleportTargetLocation(object oPC) +{ + // Return null if GetFirstStoredTeleportTargetLocation() hasn't been called previously + int nInd = GetLocalInt(oPC, "PRC_Teleport_Array_Iterator"); + if(!nInd) return GetNullMetalocation(); + + // If the iteration has reached the end of the array, delete the iteration counter and return null + if(nInd > GetPersistantLocalInt(oPC, PRC_TELEPORT_ARRAY_NAME) - 1) + { + DeleteLocalInt(oPC, "PRC_Teleport_Array_Iterator"); + return GetNullMetalocation(); + } + + // Increment iterator and return the value + SetLocalInt(oPC, "PRC_Teleport_Array_Iterator", nInd + 1); + return GetPersistantLocalMetalocation(oPC, PRC_TELEPORT_ARRAY_NAME + "_" + IntToString(nInd)); +} + +struct metalocation GetNthStoredTeleportTargetLocation(object oPC, int nInd) +{ + // If out of lower or upper bound, return null + if(nInd < 0 || nInd > GetPersistantLocalInt(oPC, PRC_TELEPORT_ARRAY_NAME) - 1) + return GetNullMetalocation(); + + // Return the nth stored location + return GetPersistantLocalMetalocation(oPC, PRC_TELEPORT_ARRAY_NAME + "_" + IntToString(nInd)); +} + +int GetNumberOfStoredTeleportTargetLocations(object oPC) +{ + return GetPersistantLocalInt(oPC, PRC_TELEPORT_ARRAY_NAME); +} + +int GetHasTeleportQuickSelection(object oPC, int nSlot = PRC_TELEPORT_ACTIVE_QUICKSELECTION) +{ + //SendMessageToPC(oPC, "GetLocalInt(oPC, PRC_Teleport_Quickselection): " + IntToString(GetLocalInt(oPC, "PRC_Teleport_Quickselection"))); + //SendMessageToPC(oPC, "GetIsMetalocationValid(GetLocalMetalocation(oPC, PRC_Teleport_Quickselection)): " + IntToString(GetIsMetalocationValid(GetLocalMetalocation(oPC, "PRC_Teleport_Quickselection")))); + if(nSlot < -1 || !nSlot || nSlot > PRC_NUM_TELEPORT_QUICKSELECTS) + return FALSE; + + if(nSlot == PRC_TELEPORT_ACTIVE_QUICKSELECTION) + return GetLocalInt(oPC, "PRC_Teleport_Quickselection");/* && + GetIsMetalocationValid(GetLocalMetalocation(oPC, "PRC_Teleport_Quickselection"));*/ + else + return GetLocalInt(oPC, "PRC_Teleport_QuickSelection_" + IntToString(nSlot)); +} + +struct metalocation GetActiveTeleportQuickSelection(object oPC, int bClear = FALSE) +{ + if(GetHasTeleportQuickSelection(oPC, PRC_TELEPORT_ACTIVE_QUICKSELECTION)) + { + struct metalocation mlocL = GetLocalMetalocation(oPC, "PRC_Teleport_Quickselection"); + if(bClear) + RemoveTeleportQuickSelection(oPC, PRC_TELEPORT_ACTIVE_QUICKSELECTION); + return mlocL; + } + else + return GetNullMetalocation(); +} + +struct metalocation GetTeleportQuickSelection(object oPC, int nSlot = PRC_TELEPORT_ACTIVE_QUICKSELECTION) +{ + // Make sure the slot is within allowed range + if(nSlot < -1 || !nSlot || nSlot > PRC_NUM_TELEPORT_QUICKSELECTS) + return GetNullMetalocation(); + + // The active quickselection was asked + if(nSlot == PRC_TELEPORT_ACTIVE_QUICKSELECTION) + return GetActiveTeleportQuickSelection(oPC, FALSE); + // The contents of a slot were asked, an the slot in question is not empty + else if(GetLocalInt(oPC, "PRC_Teleport_QuickSelection_" + IntToString(nSlot))) + return GetLocalMetalocation(oPC, "PRC_Teleport_QuickSelection_" + IntToString(nSlot)); + // The slot is empty + else + return GetNullMetalocation(); +} + +void SetTeleportQuickSelection(object oPC, struct metalocation mlocL, int nSlot = PRC_TELEPORT_ACTIVE_QUICKSELECTION) +{ + // Make sure the slot is within allowed range + if(nSlot < -1 || !nSlot || nSlot > PRC_NUM_TELEPORT_QUICKSELECTS) + return; + + // Set either the active selection, or a slot depending on nSlot + if(nSlot == PRC_TELEPORT_ACTIVE_QUICKSELECTION) + { + SetLocalInt(oPC, "PRC_Teleport_Quickselection", TRUE); // Mark quickselection as active + SetLocalMetalocation(oPC, "PRC_Teleport_Quickselection", mlocL); + } + else + { + SetLocalInt(oPC, "PRC_Teleport_QuickSelection_" + IntToString(nSlot), TRUE); // Mark quickselection as existing + SetLocalMetalocation(oPC, "PRC_Teleport_QuickSelection_" + IntToString(nSlot), mlocL); + } +} + +void RemoveTeleportQuickSelection(object oPC, int nSlot = PRC_TELEPORT_ACTIVE_QUICKSELECTION) +{ + DeleteLocalInt(oPC, "PRC_Teleport_Quickselection"); + DeleteLocalMetalocation(oPC, "PRC_Teleport_Quickselection"); +} + +void RemoveCurrentTeleportTargetLocation(object oPC) +{ + // Return if GetFirstStoredTeleportTargetLocation() or GetNextStoredTeleportTargetLocation() hasn't been called previously. + int nInd = GetLocalInt(oPC, "PRC_Teleport_Array_Iterator"); + if(!nInd) return; + + // Remove the location + RemoveNthTeleportTargetLocation(oPC, nInd); + + // Delete the iteration counter to keep potential errors down. + DeleteLocalInt(oPC, "PRC_Teleport_Array_Iterator"); +} + +void RemoveNthTeleportTargetLocation(object oPC, int nInd) +{ + // If out of lower or upper bound, return + if(nInd < 0 || nInd > GetPersistantLocalInt(oPC, PRC_TELEPORT_ARRAY_NAME) - 1) + return; + + // Get the index of the last element in the array and move elements back if needed + int nMax = GetPersistantLocalInt(oPC, PRC_TELEPORT_ARRAY_NAME) - 1; + for(; nInd < nMax; nInd++) + { + SetPersistantLocalMetalocation(oPC, PRC_TELEPORT_ARRAY_NAME + "_" + IntToString(nInd), + GetPersistantLocalMetalocation(oPC, PRC_TELEPORT_ARRAY_NAME + "_" + IntToString(nInd + 1)) + ); + // Move the map pin existence marker if it's present + if(GetLocalInt(oPC, PRC_TELEPORT_ARRAY_NAME + "_HasMapPin_" + IntToString(nInd + 1))) + SetLocalInt(oPC, PRC_TELEPORT_ARRAY_NAME + "_HasMapPin_" + IntToString(nInd), TRUE); + } + + // Remove the last element and mark the size change + DeletePersistantLocalMetalocation(oPC, PRC_TELEPORT_ARRAY_NAME + "_" + IntToString(nMax)); + DeleteLocalInt(oPC, PRC_TELEPORT_ARRAY_NAME + "_HasMapPin_" + IntToString(nMax)); + SetPersistantLocalInt(oPC, PRC_TELEPORT_ARRAY_NAME, nMax); + + // Delete the iteration counter to keep potential errors down. + DeleteLocalInt(oPC, "PRC_Teleport_Array_Iterator"); +} + +int AddTeleportTargetLocation(object oPC, location locToAdd, string sName) +{ + return AddTeleportTargetLocationAsMeta(oPC, LocationToMetalocation(locToAdd, sName)); +} + +int AddTeleportTargetLocationAsMeta(object oPC, struct metalocation mlocToAdd) +{ + // Make sure the metalocation is valid + if(!GetIsMetalocationValid(mlocToAdd)) + {// "Location could not be marked due to technical limitations - unable to uniquely identify area." + SendMessageToPCByStrRef(oPC, 16825304); + return FALSE; + } + + // Array size check. If no limit is defined via switch, default to 50. + int nInd = GetPersistantLocalInt(oPC, PRC_TELEPORT_ARRAY_NAME); // Array elements begin at index 0 + int nMax = GetPRCSwitch(PRC_TELEPORT_MAX_TARGET_LOCATIONS) ? + GetPRCSwitch(PRC_TELEPORT_MAX_TARGET_LOCATIONS) : + 50; + if(nInd >= nMax) + {// You have reached the maximum allowed teleport locations ( ).\nYou must remove at least one stored location before you can add new locations. + SendMessageToPC(oPC, GetStringByStrRef(16825294) + IntToString(nMax) + GetStringByStrRef(16825295)); + return FALSE; + } + + // All checks passed, store the location, increment array size and return + SetPersistantLocalMetalocation(oPC, PRC_TELEPORT_ARRAY_NAME + "_" + IntToString(nInd), mlocToAdd); + SetPersistantLocalInt(oPC, PRC_TELEPORT_ARRAY_NAME, nInd + 1); + return TRUE; +} + +void TeleportLocationsToMapPins(object oPC) +{ + // This function is only useful for PCs + if(!GetIsPC(oPC)) return; + + // Iterate over all stored metalocations + int nMax = GetNumberOfStoredTeleportTargetLocations(oPC); + int i; + for(; i < nMax; i++) + { + // Add map pins to those locations that do not already have one + if(!GetLocalInt(oPC, PRC_TELEPORT_ARRAY_NAME + "_HasMapPin_" + IntToString(i))) + { + CreateMapPinFromMetalocation(GetNthStoredTeleportTargetLocation(oPC, i) , oPC); + SetLocalInt(oPC, PRC_TELEPORT_ARRAY_NAME + "_HasMapPin_" + IntToString(i), TRUE); + } + } +} + + +int GetCanTeleport(object oCreature, location lTarget, int bMovesCreature = FALSE, int bInform = FALSE, int bPublic = FALSE) +{ + int bReturn = TRUE; + // First, check global switch to turn off teleporting + if(GetPRCSwitch(PRC_DISABLE_TELEPORTATION)) + bReturn = FALSE; + + // If the creature would be actually moved around, do some extra tests + if(bMovesCreature) + { + // Check area-specific variables + object oSourceArea = GetArea(oCreature); + object oTargetArea = GetAreaFromLocation(lTarget); + // Teleportation is between areas + if(oSourceArea != oTargetArea) + { + // Check forbiddance variable on the current area + if(GetLocalInt(oSourceArea, PRC_DISABLE_TELEPORTATION_IN_AREA) & PRC_DISABLE_TELEPORTATION_FROM_AREA) + bReturn = FALSE; + // Check forbiddance variable on the target area + if(GetLocalInt(oTargetArea, PRC_DISABLE_TELEPORTATION_IN_AREA) & PRC_DISABLE_TELEPORTATION_TO_AREA) + bReturn = FALSE; + } + // Teleportation within an area + else if(GetLocalInt(oSourceArea, PRC_DISABLE_TELEPORTATION_IN_AREA) & PRC_DISABLE_TELEPORTATION_WITHIN_AREA) + bReturn = FALSE; + } + + + // Check forbiddance variable on the creature + if(GetLocalInt(oCreature, PRC_DISABLE_CREATURE_TELEPORT)) + bReturn = FALSE; + + // Tell the creature about failure, if necessary + if(bInform & !bReturn) + { + // "Something prevents your extra-dimensional movement!" + FloatingTextStrRefOnCreature(16825298, oCreature, bPublic); + } + + return bReturn; +} + +void GetTeleportingObjects(object oCaster, int nCasterLvl, int bSelfOrParty) +{ + // Store list of objects to teleport in an array on the caster + // First, null the array + array_delete(oCaster, PRC_TELEPORTING_OBJECTS_ARRAY); + array_create(oCaster, PRC_TELEPORTING_OBJECTS_ARRAY); + + // Init array index variable + int i = 0; + + // Casting Dimension Door always teleports at least the caster + array_set_object(oCaster, PRC_TELEPORTING_OBJECTS_ARRAY, i++, oCaster); + + // If teleporting party, get all faction members fitting in within 10 feet. (Should be dependent on caster's reach, + // but that would mean < Small creatures could not teleport their party at all and even Mediums with their 5 foot + // reach might have trouble considering the position tracking code's shakiness) + if(bSelfOrParty) + { + // Carry amount variables + int nMaxCarry = nCasterLvl / 3, + nCarry = 0, + nIncrease; + + nMaxCarry += GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster); + + location lSelf = GetLocation(oCaster); + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(10.0f), lSelf); + while(GetIsObjectValid(oTarget)) + { + // Check if the target is member of the same faction as the caster. If it is, teleport it along. + if(GetFactionEqual(oCaster, oTarget) && oTarget != oCaster) + { + // Calculate how many carry slots the creature would take + nIncrease = GetCreatureSize(oTarget) == CREATURE_SIZE_HUGE ? 4 : + GetCreatureSize(oTarget) == CREATURE_SIZE_LARGE ? 2 : + 1; + + // Add others if the caster can carry them + if(nCarry + nIncrease <= nMaxCarry) + { + nCarry += nIncrease; + array_set_object(oCaster, PRC_TELEPORTING_OBJECTS_ARRAY, i++, oTarget); + } + // Otherwise inform the caster that they couldn't take the creature along + else // "You do not have anough carrying capacity to teleport X" + SendMessageToPC(oCaster, GetStringByStrRef(16825302) + " " + GetName(oTarget)); + } + + oTarget = GetNextObjectInShape(SHAPE_SPHERE, FeetToMeters(10.0f), lSelf); + } + } + /* + // Targeting one other being in addition to self. If it's hostile, it gets SR and a Will save. + else if(nSpellID = SPELLID_TELEPORT_TARGET) + { + object oTarget = PRCGetSpellTargetObject(); + if(GetIsHostile()) + { + PRCSignalSpellEvent(oTarget, TRUE, nSpellID); // Let the target know it was cast a spell at + + //SR + if(!PRCDoResistSpell(oCaster, oTarget, nCasterLevel + SPGetPenetr())) + { + // Will save + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget, oCaster), SAVING_THROW_TYPE_SPELL)) + { + array_set_object(oCaster, PRC_TELEPORTING_OBJECTS_ARRAY, i++, oTarget); + } } } + // Not hostile, just add it to the list. + else + { + PRCSignalSpellEvent(oTarget, FALSE, nSpellID); // Let the target know it was cast a spell at + array_set_object(oCaster, PRC_TELEPORTING_OBJECTS_ARRAY, i++, oTarget); + } + } + */ +} + +location GetTeleportError(location lOriginal, object oUser, int bNormallyErroless = FALSE, int bRecursing = FALSE) +{ + if(DEBUG) DoDebug("prc_inc_teleport: GetTeleportError():\n" + + "lOriginal = " + DebugLocation2Str(lOriginal) + "\n" + + "oUser = " + DebugObject2Str(oUser) + "\n" + + "bNormallyErroless = " + DebugBool2String(bNormallyErroless) + "\n" + + "bRecursing = " + DebugBool2String(bRecursing) + "\n" + ); + + int nOverrideValue = GetLocalInt(GetAreaFromLocation(lOriginal), PRC_FORCE_TELEPORTATION_RESULT); + + // If the effect cannot normally error and there is no override active, just return lOriginal + if(bNormallyErroless && !nOverrideValue) + return lOriginal; + + // Roll for the result. If recursing from a mishap, roll d20 + 80, otherwise roll d100 + int nRoll = bRecursing ? d20() + 80 : d100(); + + if (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oUser) >= 3) + { + // Roll twice, take the better roll + int nRoll2 = bRecursing ? d20() + 80 : d100(); + if (nRoll > nRoll2) nRoll = nRoll2; + } + + // If an override value is specified, force the roll value. Override only applies in the first call, not on subsequent times + if(nOverrideValue && !bRecursing) + { + switch(nOverrideValue) + { + case PRC_FORCE_TELEPORTATION_RESULT_ONTARGET: nRoll = 1; break; + case PRC_FORCE_TELEPORTATION_RESULT_OFFTARGET: nRoll = 91; break; + case PRC_FORCE_TELEPORTATION_RESULT_WAYOFFTARGET: nRoll = 95; break; + case PRC_FORCE_TELEPORTATION_RESULT_MISHAP: nRoll = 99; break; + } + } + + if (GetLocalInt(GetAreaFromLocation(lOriginal), "BlackLabyrinthTeleport")) nRoll = 91; + + int nLabyrinth = GetLocalInt(oUser, "BlackLabyrinthTeleport"); + if(!PRCMySavingThrow(SAVING_THROW_WILL, oUser, nLabyrinth, SAVING_THROW_TYPE_SPELL) && nLabyrinth) nRoll = 99; + else if (nLabyrinth) nRoll = 91; + + if(DEBUG) DoDebug("prc_inc_teleport: GetTeleportError(): Roll is " + IntToString(nRoll) + ", forced = " + DebugBool2String(nOverrideValue)); + + /* On Target Off Target Way Off Target Mishap + * 01–90 91–94 95–98 99–100 + */ + // On Target - Return original location + if(nRoll <= 90) + { + if(DEBUG) DoDebug("prc_inc_teleport: GetTeleportError(): On Target - Returning original location"); + return lOriginal; + } + // Off Target - Get a random location in same area + else if(nRoll <= 94) + { + object oArea = GetAreaFromLocation(lOriginal); + int nAreaW = GetAreaWidth(oArea); + int nAreaH = GetAreaHeight(oArea); + + vector vNew = Vector(Random(nAreaW) * 10.0f + 5.0f, + Random(nAreaH) * 10.0f + 5.0f, + GetPositionFromLocation(lOriginal).z + ); + location lNew = Location(oArea, vNew, 0.0f); + if(DEBUG) DoDebug("prc_inc_teleport: GetTeleportError(): Off Target - Returning " + DebugLocation2Str(lNew)); + return lNew; + } + // Way Off Target - Random location among stored teleport choices, or if there are no others, just stay where the user is + else if(nRoll <= 98) + { + int nLocs = GetNumberOfStoredTeleportTargetLocations(oUser); + int nRand = Random(nLocs); + location lReplacement = MetalocationToLocation(GetNthStoredTeleportTargetLocation(oUser, nRand)); + + if(DEBUG) DoDebug("prc_inc_teleport: GetTeleportError(): Way Off Target - Replacement location rolled: " + DebugLocation2Str(lReplacement) + "\n" + + "Replacement location is useable: " + DebugBool2String(!(nLocs == 0 || lReplacement == lOriginal)) + ); + + if(nLocs == 0 || lReplacement == lOriginal) + return GetLocation(oUser); + else + return lReplacement; + } + // Mishap: + // You and anyone else teleporting with you have gotten “scrambled.” + // You each take 1d10 points of damage, and you reroll on the chart to see where you wind up. + // For these rerolls, roll 1d20+80. Each time “Mishap” comes up, the characters take more damage and must reroll. + else + { + if(DEBUG) DoDebug("prc_inc_teleport: GetTeleportError(): Mishap - damaging people"); + object oTarget; + int i; + for(i = 0; i < array_get_size(oUser, PRC_TELEPORTING_OBJECTS_ARRAY); i++) + { + oTarget = array_get_object(oUser, PRC_TELEPORTING_OBJECTS_ARRAY, i); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d10(), DAMAGE_TYPE_MAGICAL), oTarget); + } + + return GetTeleportError(lOriginal, oUser, bNormallyErroless, TRUE); + } +} + +void DisallowTeleport(object oTarget) +{ + if(DEBUG) DoDebug("DisallowTeleport():\n" + + "oTarget = " + DebugObject2Str(oTarget) + "\n" + + "\n" + + "New blocking variable value: " + IntToString(GetLocalInt(oTarget, PRC_DISABLE_CREATURE_TELEPORT) + 1) + "\n" + ); + SetLocalInt(oTarget, PRC_DISABLE_CREATURE_TELEPORT, + GetLocalInt(oTarget, PRC_DISABLE_CREATURE_TELEPORT) + 1 + ); +} + +void AllowTeleport(object oTarget, int bClearAll = FALSE) +{ + if(DEBUG) DoDebug("AllowTeleport():\n" + + "oTarget = " + DebugObject2Str(oTarget) + "\n" + + "bClearAll = " + DebugBool2String(bClearAll) + "\n" + + "\n" + + "Old blocking variable value: " + IntToString(GetLocalInt(oTarget, PRC_DISABLE_CREATURE_TELEPORT)) + ); + int nValue = GetLocalInt(oTarget, PRC_DISABLE_CREATURE_TELEPORT) - 1; + if((nValue > 0) && !bClearAll) + SetLocalInt(oTarget, PRC_DISABLE_CREATURE_TELEPORT, nValue); + else + DeleteLocalInt(oTarget, PRC_DISABLE_CREATURE_TELEPORT); + + if(DEBUG) DoDebug("New blocking variable value: " + (((nValue > 0) && !bClearAll) ? IntToString(nValue) : "Deleted")); +} + +void ShadowPounce(object oPC) +{ + if (GetHasFeat(FEAT_SHADOW_POUNCE, oPC)) + { + location lTarget = GetLocation(oPC); + // Use the function to get the closest creature as a target + object oAreaTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE); + while(GetIsObjectValid(oAreaTarget)) + { + if(oAreaTarget != oPC && // Not you + GetIsInMeleeRange(oPC, oAreaTarget) && // They must be in melee range + GetIsEnemy(oAreaTarget, oPC)) // Only enemies + { + PerformAttackRound(oAreaTarget, oPC, EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY), 0.0, 0, 0, 0, TRUE, "Shadow Pounce Hit", "Shadow Pounce Miss", FALSE, FALSE, TRUE); + break; //End loop + } + //Select the next target within the spell shape. + oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE); + } + } +} \ No newline at end of file diff --git a/src/include/prc_inc_template.nss b/src/include/prc_inc_template.nss new file mode 100644 index 0000000..e5550ef --- /dev/null +++ b/src/include/prc_inc_template.nss @@ -0,0 +1,318 @@ +//:://///////////////////////////////////////////// +//:: Name Template and Weapons of Legacy Include +//:: FileName prc_inc_template +//::////////////////////////////////////////////// +/* + This is the main include file for the template system + Deals with applying templates and interacting with the 2da + + This does the above, but for the benefits of Weapons of + Legacy as well, since they function similarly to templates. +*/ +//::////////////////////////////////////////////// +//:: Created By: Primogenitor +//:: Created On: 18/4/06 +//::////////////////////////////////////////////// + +//void main (){} + +//Checks if the target has the template or not. +//returns 1 if it does, 0 if it doesnt or if its an invalid target +int GetHasTemplate(int nTemplate, object oPC = OBJECT_SELF); + +//Get total template ECL +int GetTemplateLA(object oPC); + +//add a template to the creature +//will not work if it already has the template +//will not work on non-creatures +//if bApply is false, this can test if the template is applicable or not +int ApplyTemplateToObject(int nTemplate, object oPC = OBJECT_SELF, int bApply = TRUE); + +int RemoveTemplateFromObject(int nTemplate, object oPC = OBJECT_SELF); + +/** + * Determines whether the PC is a legal target for the weapon of legacy + * If so, spawns and equips the item, as well as charging them gold for it + * + * @param oPC The new owner of the Weapon of Legacy + */ +int ApplyWoLToObject(int nWoL, object oPC = OBJECT_SELF, int bApply = TRUE); + +/** + * Determines whether the PC has too many hit points and removes them + * This is a Hit Point Loss penalty applied by weapons of legacy + * + * @param oPC The owner of the Weapon of Legacy + */ +void WoLHealthPenaltyHB(object oPC); + +/** + * Burns one spell per day of the chosen spell level + * This is a Spell Slot penalty applied by weapons of legacy + * + * @param oPC The owner of the Weapon of Legacy + * @param nSlot The level of spell to expend + */ +void WoLSpellSlotPenalty(object oPC, int nSlot); + +/** + * Applies the Weapon of Legacy Rituals + * + * @param oPC The owner of the Weapon of Legacy + */ +void UpgradeLegacy(object oPC); + +/** + * Gets uses per day of Legacy abilities + * + * @param oPC The owner of the Weapon of Legacy + * @param nSLA The SLA to check + */ +int GetLegacyUses(object oPC, int nSLA); + +/** + * Sets uses per day of Legacy abilities + * + * @param oPC The owner of the Weapon of Legacy + * @param nSLA The SLA to set + */ +void SetLegacyUses(object oPC, int nSLA); + +/** + * Clears all uses per day on rest + * + * @param oPC The owner of the Weapon of Legacy + */ +void ClearLegacyUses(object oPC); + +#include "prc_inc_function" +#include "prc_template_con" +#include "inc_persist_loca" +#include "prc_inc_burn" + +int GetHasTemplate(int nTemplate, object oPC = OBJECT_SELF) +{ + int bHasTemplate = GetPersistantLocalInt(oPC, "template_"+IntToString(nTemplate)); + if(bHasTemplate && DEBUG) + DoDebug("GetHasTemplate("+IntToString(nTemplate)+", "+GetName(oPC)+") is true"); + return bHasTemplate; +} + +int GetTemplateLA(object oPC) +{ + return GetPersistantLocalInt(oPC, "template_LA"); + /* + //Loop could TMI avoid it + int nLA; + //loop over all templates and see if the player has them + int i; + for(i=0;i<200;i++) + { + if(GetHasTemplate(i, oPC)) + nLA += StringToInt(Get2DACache("templates", "LA", i)); + } + return nLA;*/ +} + +int RemoveTemplateFromObject(int nTemplate, object oPC = OBJECT_SELF) +{ + //:: Sanity check + if(!GetHasTemplate(nTemplate, oPC)) + return FALSE; + + //:: Remove the template from the array + if(persistant_array_exists(oPC, "templates")) + { + persistant_array_shrink(oPC, "templates", persistant_array_get_size(oPC, "templates")-nTemplate); + persistant_array_delete(oPC, "templates"); + } + + //:: Delete template's markers + DeletePersistantLocalInt(oPC, "template_"+IntToString(nTemplate)); + DeletePersistantLocalInt(oPC, "template_LA"); + + DelayCommand(0.01, EvalPRCFeats(oPC)); + return TRUE; +} + +int ApplyTemplateToObject(int nTemplate, object oPC = OBJECT_SELF, int bApply = TRUE) +{ + //templates never stack, so dont let them + if(GetHasTemplate(nTemplate, oPC)) + return FALSE; + + //sanity checks + if(GetObjectType(oPC) != OBJECT_TYPE_CREATURE) + return FALSE; + if(nTemplate < 0 || nTemplate > 250) + return FALSE; + + //test if it can be applied + string sScript = Get2DACache("templates", "TestScript", nTemplate); + if(sScript != "" + && ExecuteScriptAndReturnInt(sScript, oPC)) + return FALSE; + + //if not applying it, abort at this point + if(!bApply) + return TRUE; + + //run the application script + sScript = Get2DACache("templates", "SetupScript", nTemplate); + if(sScript != "") + ExecuteScript(sScript, oPC); + + //mark the PC as possessing the template + SetPersistantLocalInt(oPC, "template_"+IntToString(nTemplate), TRUE); + //adjust the LA marker accordingly + if (!(GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oPC) >= 20 && nTemplate == TEMPLATE_LICH)) + { + if(DEBUG) DoDebug("ApplyTemplateToObject(): Adding Template LA"); + SetPersistantLocalInt(oPC, "template_LA", + GetPersistantLocalInt(oPC, "template_LA")+StringToInt(Get2DACache("templates", "LA", nTemplate))); + } + //add the template to the array + if(!persistant_array_exists(oPC, "templates")) + persistant_array_create(oPC, "templates"); + persistant_array_set_int(oPC, "templates", persistant_array_get_size(oPC, "templates"), nTemplate); + + + //run the main PRC feat system so we trigger any other feats we've borrowed + DelayCommand(0.01, EvalPRCFeats(oPC)); + //ExecuteScript("prc_feat", oPC); + //ran, evaluated, done + return TRUE; +} + +int ApplyWoLToObject(int nWoL, object oPC = OBJECT_SELF, int bApply = TRUE) +{ + //Weapons of Legacy never stack, so dont let them + if(GetPersistantLocalInt(oPC, "LegacyOwner")) + return FALSE; + + //sanity checks + if(GetObjectType(oPC) != OBJECT_TYPE_CREATURE) + return FALSE; + if(nWoL < 0 || nWoL > 200) + return FALSE; + + //test if it can be applied + string sScript = Get2DACache("wol_items", "TestScript", nWoL); + if(sScript != "" && ExecuteScriptAndReturnInt(sScript, oPC)) + return FALSE; + + // Need to be able to pay for it + int nGold = StringToInt(Get2DACache("wol_items", "Cost", nWoL)); + if (nGold > GetGold(oPC)) + return FALSE; + + //if not applying the weapon of legacy, abort at this point + if(!bApply) + return TRUE; + + //mark the PC as possessing a Weapon of Legacy. You only get one, so we store the number + SetPersistantLocalInt(oPC, "LegacyOwner", nWoL); + // Pay for the item, create it and equip it + TakeGoldFromCreature(nGold, oPC, TRUE); + object oWoL = CreateItemOnObject(Get2DACache("wol_items", "ResRef", nWoL), oPC); + SetIdentified(oWoL, TRUE); + SetDroppableFlag(oWoL, FALSE); + SetItemCursedFlag(oWoL, TRUE); + AssignCommand(oWoL, SetIsDestroyable(FALSE, FALSE, FALSE)); + SetName(oWoL, GetStringByStrRef(StringToInt(Get2DACache("wol_items", "Name", nWoL)))); + DelayCommand(0.25, AssignCommand(oPC, ActionEquipItem(oWoL, StringToInt(Get2DACache("wol_items", "Slot", nWoL))))); + + // Make the twin + if (GetTag(oWoL) == "WOL_Devious") + { + oWoL = CreateItemOnObject("prc_wol_vicious", oPC); + SetIdentified(oWoL, TRUE); + SetDroppableFlag(oWoL, FALSE); + SetItemCursedFlag(oWoL, TRUE); + AssignCommand(oWoL, SetIsDestroyable(FALSE, FALSE, FALSE)); + DelayCommand(0.25, AssignCommand(oPC, ActionEquipItem(oWoL, INVENTORY_SLOT_LEFTHAND))); + } + + //run the main PRC feat system so we trigger any other feats we've borrowed + DelayCommand(0.01, EvalPRCFeats(oPC)); + //ran, evaluated, done + return TRUE; +} + +void WoLHealthPenaltyHB(object oPC) +{ + int nCurHP = GetCurrentHitPoints(oPC); + int nMaxHP = GetMaxHitPoints(oPC); + int nPen = GetLocalInt(oPC, "WoLHealthPenalty"); + + // Does the PC have too many hit points? + if (nCurHP > (nMaxHP - nPen)) + { + int nDam = nCurHP - (nMaxHP - nPen); + //if (!GetIsResting(oPC))ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDam, DAMAGE_TYPE_POSITIVE), oPC); + if (!GetIsResting(oPC)) SetCurrentHitPoints(oPC, nMaxHP - nPen); + } + DelayCommand(0.25, WoLHealthPenaltyHB(oPC)); +} + +void WoLSpellSlotPenalty(object oPC, int nSlot) +{ + if (DEBUG) DoDebug("WoLSpellSlotPenalty nSlot "+IntToString(nSlot)); + if (GetLocalInt(oPC, "WOLSlotBurned")) return; // Already burned for the day + + if (nSlot > 0) + { + SetLocalInt(oPC, "BurnSpellLevel", nSlot); + BurnSpell(oPC); + DeleteLocalInt(oPC, "BurnSpellLevel"); + SetLocalInt(oPC, "WOLSlotBurned", TRUE); + } +} + +void UpgradeLegacy(object oPC) +{ + int nLegacy = GetPersistantLocalInt(oPC, "LegacyRitual"); + SetPersistantLocalInt(oPC, "LegacyRitual", nLegacy+1); + // Apply the feat and the updated abilities + ExecuteScript("prc_templates", oPC); +} + +int GetLegacyUses(object oPC, int nSLA) +{ + // This makes sure everything is stored using the proper number + return GetLocalInt(oPC, "PRC_WoLUses" + IntToString(nSLA)); +} + +void SetLegacyUses(object oPC, int nSLA) +{ + // Uses are stored for each SLA by SpellId + int nNum = GetLocalInt(oPC, "PRC_WoLUses" + IntToString(nSLA)); + // Store the number of times per day its been cast succesfully + SetLocalInt(oPC, "PRC_WoLUses" + IntToString(nSLA), (nNum + 1)); +} + +void ClearLegacyUses(object oPC) +{ + // Uses are stored by SpellId + // So we loop em all and blow em away + // i is the SpellId + int i; + for(i = 16390; i < 16600; i++) + { + DeleteLocalInt(oPC, "PRC_WoLUses" + IntToString(i)); + } + + // Clear markers on rest + DeleteLocalInt(oPC, "WOLSlotBurned"); + DeleteLocalInt(oPC, "WoLPsiPointsPenalty"); + DeleteLocalInt(oPC, "AradrosTHP"); + DeleteLocalInt(oPC, "WarriorsSurgeUse"); +} + +void JumpToEncounterArea(object oPC, int nWoL) +{ + SetLocalLocation(oPC, "EA_Return", GetLocation(oPC)); + CreateArea(Get2DACache("wol_items", "Area", nWoL)); + DelayCommand(1.5, AssignCommand(oPC, JumpToLocation(GetLocation(GetWaypointByTag(Get2DACache("wol_items", "Waypoint", nWoL)))))); +} \ No newline at end of file diff --git a/src/include/prc_inc_turning.nss b/src/include/prc_inc_turning.nss new file mode 100644 index 0000000..5504819 --- /dev/null +++ b/src/include/prc_inc_turning.nss @@ -0,0 +1,650 @@ +//:://///////////////////////////////////////////// +//:: Turn undead include +//:: prc_inc_turning +//:://///////////////////////////////////////////// +/** @file + Defines functions that seem to have something + to do with Turn Undead (and various other + stuff). +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + + + + + + + + + + + + +//gets the number of class levels that count for turning +int GetTurningClassLevel(object oCaster = OBJECT_SELF, int nTurnType = SPELL_TURN_UNDEAD); + +//Returns the turning charisma modifier of OBJECT_SELF +int GetTurningCharismaMod(int nTurnType); + +//this adjusts the highest HD of undead turned +int GetTurningCheckResult(int nLevel, int nTurningCheck); + +//gets the equivalent HD total for turning purposes +//includes turn resistance and SR for outsiders +int GetHitDiceForTurning(object oTarget, int nTurnType, int nTargetRace); + +int GetCommandedTotalHD(int nTurnType = SPELL_TURN_UNDEAD, int bUndeadMastery = FALSE); + +//various sub-turning effect funcions +void DoTurn(object oTarget); +void DoDestroy(object oTarget); +void DoRebuke(object oTarget); +void DoCommand(object oTarget); + +// This uses the turn type to determine whether the target should be turned or rebuked +// Return values: +// 0 - target can not be turned/rebuked +// 1 - target can be rebuked +// 2 - target can be turned +int GetIsTurnOrRebuke(object oTarget, int nTurnType, int nTargetRace); + +// What this does is check to see if there is an discrete word +// That matches the input, and if there is returns TRUE +// (please use sName string in lowercase) +int CheckTargetName(object oTarget, string sName); + +int GetIsAirCreature(object oCreature, int nAppearance); +int GetIsEarthCreature(object oCreature, int nAppearance); +int GetIsFireCreature(object oCreature, int nAppearance); +int GetIsWaterCreature(object oCreature, int nAppearance); +int GetIsColdCreature(object oCreature, int nAppearance); +int GetIsReptile(object oCreature, int nAppearance); +int GetIsSpider(object oCreature, int nAppearance); + +// Does the cold damage for this feat +void FaithInTheFrost(object oPC, object oTarget); + +// Does the fire damage for this feat +void LightOfAurifar(object oPC, object oTarget); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "prc_inc_racial" +#include "inc_utility" +#include "bnd_inc_bndfunc" +#include "prc_inc_template" + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +const int ACTION_REBUKE = 1; +const int ACTION_TURN = 2; + +//private function +int GetIsTurnOrRebuke(object oTarget, int nTurnType, int nTargetRace) +{ + //is not an enemy + if(GetIsFriend(oTarget)/* || GetFactionEqual(oTarget)*/) + return FALSE; + + //already turned + //NOTE: At the moment this breaks down in "turning conflicts" where clerics try to + //turn each others undead. Fix later. + //if(GetHasSpellEffect(nTurnType, oTarget)) + // return FALSE; + if(PRCGetHasEffect(EFFECT_TYPE_TURNED, oTarget)) + return FALSE; + + int nTargetAppearance = GetAppearanceType(oTarget); + int nReturn = FALSE; + + switch(nTurnType) + { + case SPELL_TURN_UNDEAD: + { + if(nTargetRace == RACIAL_TYPE_UNDEAD) + { + // Evil clerics rebuke undead, otherwise turn + // Dread Necro, True Necro and Master of Shrouds always rebuke or command + if(GetAlignmentGoodEvil(OBJECT_SELF) == ALIGNMENT_EVIL + || GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER) + || GetLevelByClass(CLASS_TYPE_TRUENECRO) + || GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS) + || GetLevelByClass(CLASS_TYPE_NIGHTSTALKER) > 3) + nReturn = ACTION_REBUKE; + else + nReturn = ACTION_TURN; + } + else if(nTargetRace == RACIAL_TYPE_OUTSIDER && GetHasFeat(FEAT_EPIC_PLANAR_TURNING)) + { + // Evil clerics turn non-evil outsiders, and rebuke evil outsiders + if(GetAlignmentGoodEvil(OBJECT_SELF) == ALIGNMENT_EVIL) + { + if(GetAlignmentGoodEvil(oTarget) != ALIGNMENT_EVIL) + nReturn = ACTION_TURN; + else + nReturn = ACTION_REBUKE; + } + // Good clerics turn non-good outsiders, and rebuke good outsiders + else + { + if(GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD) + nReturn = ACTION_TURN; + else + nReturn = ACTION_REBUKE; + } + } + break; + } + case SPELL_TURN_OUTSIDER: + { + if(nTargetRace == RACIAL_TYPE_OUTSIDER) + { + // Evil clerics turn non-evil outsiders, and rebuke evil outsiders + if(GetAlignmentGoodEvil(OBJECT_SELF) == ALIGNMENT_EVIL) + { + if(GetAlignmentGoodEvil(oTarget) != ALIGNMENT_EVIL) + nReturn = ACTION_TURN; + else + nReturn = ACTION_REBUKE; + } + // Good clerics turn non-good outsiders, and rebuke good outsiders + else + { + if(GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD) + nReturn = ACTION_TURN; + else + nReturn = ACTION_REBUKE; + } + } + break; + } + case SPELL_TURN_BLIGHTSPAWNED: + { + // Rebuke/Command blightspawned, either by tag from Blight touch + // Or from having a Blightlord master + if(GetTag(oTarget) == "prc_blightspawn" || GetLevelByClass(CLASS_TYPE_BLIGHTLORD, GetMaster(oTarget))) + { + nReturn = ACTION_REBUKE; + } + // Rebuke/Command evil animals and plants + else if(nTargetRace == RACIAL_TYPE_ANIMAL || nTargetRace == RACIAL_TYPE_PLANT) + { + if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL) + nReturn = ACTION_REBUKE; + } + break; + } + case SPELL_TURN_OOZE: + { + // Slime domain rebukes or commands oozes + if(nTargetRace == RACIAL_TYPE_OOZE) + nReturn = ACTION_REBUKE; + + break; + } + case SPELL_TURN_PLANT: + { + // Plant domain rebukes or commands plants + if(GetPRCSwitch(PRC_BIOWARE_PLANT_DOMAIN_POWER)) + { + if(nTargetRace == RACIAL_TYPE_VERMIN) + nReturn = ACTION_TURN; + } + else + { + if(nTargetRace == RACIAL_TYPE_PLANT) + nReturn = ACTION_REBUKE; + } + break; + } + case SPELL_TURN_AIR: + { + if(GetIsAirCreature(oTarget, nTargetAppearance)) + nReturn = ACTION_REBUKE; + + else if(GetIsEarthCreature(oTarget, nTargetAppearance)) + nReturn = ACTION_TURN; + + break; + } + case SPELL_TURN_EARTH: + { + if(GetIsAirCreature(oTarget, nTargetAppearance)) + nReturn = ACTION_TURN; + + else if(GetIsEarthCreature(oTarget, nTargetAppearance)) + nReturn = ACTION_REBUKE; + + break; + } + case SPELL_TURN_FIRE: + { + if(GetIsFireCreature(oTarget, nTargetAppearance)) + nReturn = ACTION_REBUKE; + + else if(GetIsWaterCreature(oTarget, nTargetAppearance)) + nReturn = ACTION_TURN; + + break; + } + case SPELL_TURN_WATER: + { + if(GetIsFireCreature(oTarget, nTargetAppearance)) + nReturn = ACTION_TURN; + + else if(GetIsWaterCreature(oTarget, nTargetAppearance)) + nReturn = ACTION_REBUKE; + + break; + } + case SPELL_TURN_REPTILE: + { + if(GetIsReptile(oTarget, nTargetAppearance)) + nReturn = ACTION_REBUKE; + + break; + } + case SPELL_TURN_SPIDER: + { + if(GetIsSpider(oTarget, nTargetAppearance)) + nReturn = ACTION_REBUKE; + + break; + } + case SPELL_TURN_COLD: + { + if(GetIsFireCreature(oTarget, nTargetAppearance)) + nReturn = ACTION_TURN; + + else if(GetIsColdCreature(oTarget, nTargetAppearance)) + nReturn = ACTION_REBUKE; + + break; + } + } + + //always turn baelnorns & archliches + if(GetLevelByClass(CLASS_TYPE_BAELNORN, oTarget) || GetHasFeat(FEAT_TEMPLATE_ARCHLICH_MARKER, oTarget)) //:: Archlich + nReturn = ACTION_TURN; + + //Immunity check + if(nReturn == ACTION_TURN && GetHasFeat(FEAT_TURNING_IMMUNITY, oTarget)) + nReturn = FALSE; + + if(nReturn == ACTION_REBUKE && GetHasFeat(FEAT_IMMUNITY_TO_REBUKING, oTarget)) + nReturn = FALSE; + + return nReturn; +} +//ok +void DoTurn(object oTarget) +{ + //create the effect + effect eTurn = EffectLinkEffects(EffectTurned(), EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR)); + eTurn = EffectLinkEffects(eTurn, EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE)); + eTurn = SupernaturalEffect(eTurn); + //apply the effect for 60 seconds + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eTurn, oTarget, 60.0); + FaithInTheFrost(OBJECT_SELF, oTarget); + LightOfAurifar(OBJECT_SELF, oTarget); +} +//ok +void DoDestroy(object oTarget) +{ + //supernatural so it penetrates immunity to death + ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDeath()), oTarget);//EffectDeath(TRUE)? +} + +void DoRebuke(object oTarget) +{ + //rebuke effect + //The character is frozen in fear and can take no actions. + //A cowering character takes a -2 penalty to Armor Class and loses + //her Dexterity bonus (if any). + //create the effect + effect eRebuke = EffectEntangle(); //this removes dex bonus + eRebuke = EffectLinkEffects(eRebuke, EffectACDecrease(2)); + eRebuke = EffectLinkEffects(eRebuke, EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR)); + eRebuke = EffectLinkEffects(eRebuke, EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE)); + //apply the effect for 60 seconds + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eRebuke, oTarget, 60.0); + //handle unable to take actions + AssignCommand(oTarget, ClearAllActions()); + AssignCommand(oTarget, DelayCommand(60.0, SetCommandable(TRUE))); + AssignCommand(oTarget, SetCommandable(FALSE)); + FaithInTheFrost(OBJECT_SELF, oTarget); + LightOfAurifar(OBJECT_SELF, oTarget); +} +//ok +void DoCommand(object oTarget) +{ + //create the effect + //supernatural will last over resting + ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(EffectCutsceneDominated()), oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DOMINATE_S), oTarget); +} +//ok +int GetTurningCheckResult(int nLevel, int nTurningCheck) +{ + switch(nTurningCheck) + { + case 0: + return nLevel-4; + case 1: + case 2: + case 3: + return nLevel-3; + case 4: + case 5: + case 6: + return nLevel-2; + case 7: + case 8: + case 9: + return nLevel-1; + case 10: + case 11: + case 12: + return nLevel; + case 13: + case 14: + case 15: + return nLevel+1; + case 16: + case 17: + case 18: + return nLevel+2; + case 19: + case 20: + case 21: + return nLevel+3; + default: + if(nTurningCheck < 0) + return nLevel-4; + else + return nLevel+4; + } + //somethings gone wrong here + return 0; +} + +int GetTurningClassLevel(object oCaster = OBJECT_SELF, int nTurnType = SPELL_TURN_UNDEAD) +{ + int nLevel, nTemp; + + if (nTurnType == SPELL_OPPORTUNISTIC_PIETY_TURN) + return GetLevelByClass(CLASS_TYPE_FACTOTUM, oCaster); + + //Baelnorn & Archlich adds all class levels. + if(GetLevelByClass(CLASS_TYPE_BAELNORN, oCaster) || GetHasFeat(FEAT_TEMPLATE_ARCHLICH_MARKER, oCaster)) //:: Archlich + nLevel = GetHitDice(oCaster); + else + { + //full classes + nLevel += GetLevelByClass(CLASS_TYPE_CLERIC, oCaster); + nLevel += GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oCaster); + nLevel += GetLevelByClass(CLASS_TYPE_TRUENECRO); + nLevel += GetLevelByClass(CLASS_TYPE_SOLDIER_OF_LIGHT, oCaster); + nLevel += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); + nLevel += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster); + nLevel += GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster); + nLevel += GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster); + nLevel += GetLevelByClass(CLASS_TYPE_UR_PRIEST, oCaster); + if (!GetIsVestigeExploited(oCaster, VESTIGE_TENEBROUS_TURN_UNDEAD) && GetHasSpellEffect(VESTIGE_TENEBROUS, oCaster)) nLevel += GetBinderLevel(oCaster, VESTIGE_TENEBROUS); + + //Mystics with sun domain can turn undead + if(GetHasFeat(FEAT_BONUS_DOMAIN_SUN, oCaster)) + nLevel += GetLevelByClass(CLASS_TYPE_MYSTIC, oCaster); + + //offset classes + nTemp = GetLevelByClass(CLASS_TYPE_PALADIN, oCaster)-3; + //Seek Eternal Rest + if (GetHasSpellEffect(SPELL_SEEK_ETERNAL_REST, oCaster)) nTemp = GetLevelByClass(CLASS_TYPE_PALADIN, oCaster); + if(nTemp > 0)nLevel += nTemp; + nTemp = GetLevelByClass(CLASS_TYPE_SHAMAN, oCaster)-2; + if(nTemp > 0) nLevel += nTemp; + nTemp = GetLevelByClass(CLASS_TYPE_TEMPLAR, oCaster)-3; + if(nTemp > 0) nLevel += nTemp; + nTemp = GetLevelByClass(CLASS_TYPE_BLACKGUARD, oCaster)-2; + if(nTemp > 0) nLevel += nTemp; + nTemp = GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster)-2; + if(nTemp > 0) nLevel += nTemp; + nTemp = GetLevelByClass(CLASS_TYPE_NIGHTSTALKER, oCaster)-3; + if(nTemp > 0) nLevel += nTemp; + + //not undead turning classes + if(nTurnType == SPELL_TURN_SPIDER) + nLevel += GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster); + else if(nTurnType == SPELL_TURN_BLIGHTSPAWNED) + nLevel += GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster); + else if(nTurnType == SPELL_TURN_OUTSIDER) + { + nTemp = GetLevelByClass(CLASS_TYPE_ANTI_PALADIN, oCaster)-3; + if(nTemp > 0) nLevel += nTemp; + } + } + + //Improved turning feat + nLevel += GetHasFeat(FEAT_IMPROVED_TURNING, oCaster); + + //Phylactery of Undead Turning + if(GetTag(GetItemInSlot(INVENTORY_SLOT_NECK, oCaster)) == "prc_turnphyl") + nLevel += 4; + //Weapon of Legacy bonuses + nLevel += GetLocalInt(oCaster, "WOLTurning"); + + return nLevel; +} +//ok +int GetTurningCharismaMod(int nTurnType) +{ + int nChaMod = GetAbilityModifier(ABILITY_CHARISMA); + + //Heartwarder adds two to cha checks + if(GetHasFeat(FEAT_HEART_PASSION)) + nChaMod += 2; + + if(nTurnType == SPELL_TURN_UNDEAD) + { + //Hierophants Mastery of Energy + if(GetHasFeat(FEAT_MASTER_OF_ENERGY)) + nChaMod += 4; + + //Consecrate spell + if(GetHasSpellEffect(SPELL_CONSECRATE)) + nChaMod += 3; + + //Desecrate spell + if(GetHasSpellEffect(SPELL_DES_20) || GetHasSpellEffect(SPELL_DES_100) || GetHasSpellEffect(SPELL_DESECRATE)) + nChaMod -= 3; + } + + return nChaMod; +} +//ok +int GetHitDiceForTurning(object oTarget, int nTurnType, int nTargetRace) +{ + //Hit Dice + Turn Resistance + int nHD = GetHitDice(oTarget) + GetTurnResistanceHD(oTarget); + + if(GetHasFeat(FEAT_TURN_SUBMISSION, oTarget)) + nHD -= 4; + + //Outsiders get SR (halved if turner has planar turning) + if(nTargetRace == RACIAL_TYPE_OUTSIDER) + { + int nSR = PRCGetSpellResistance(oTarget, OBJECT_SELF); + if(nTurnType == SPELL_TURN_OUTSIDER || GetHasFeat(FEAT_EPIC_PLANAR_TURNING)) + nSR /= 2; + nHD += nSR; + } + + return nHD; +} +//ok +int GetCommandedTotalHD(int nTurnType = SPELL_TURN_UNDEAD, int bUndeadMastery = FALSE) +{ + int nCommandedTotalHD; + object oTest = GetFirstFactionMember(OBJECT_SELF, FALSE); + while(GetIsObjectValid(oTest)) + { + if(GetMaster(oTest) == OBJECT_SELF && GetAssociateType(oTest) == ASSOCIATE_TYPE_DOMINATED) + { + int nRace = MyPRCGetRacialType(oTest); + int nTestHD = GetHitDiceForTurning(oTest, nTurnType, nRace); + if(nRace != RACIAL_TYPE_UNDEAD && bUndeadMastery) + nTestHD *= 10; + nCommandedTotalHD += nTestHD; + } + oTest = GetNextFactionMember(OBJECT_SELF, FALSE); + } + return nCommandedTotalHD; +} + +int CheckTargetName(object oTarget, string sName) +{ + return FindSubString(GetStringLowerCase(GetName(oTarget)), sName) > -1; +} +//ok - elemental savant/bonded summoner? +int GetIsAirCreature(object oCreature, int nAppearance) +{ + return nAppearance == APPEARANCE_TYPE_ELEMENTAL_AIR + || nAppearance == APPEARANCE_TYPE_ELEMENTAL_AIR_ELDER + || nAppearance == APPEARANCE_TYPE_INVISIBLE_STALKER + || nAppearance == APPEARANCE_TYPE_MEPHIT_AIR + || nAppearance == APPEARANCE_TYPE_MEPHIT_DUST + || nAppearance == APPEARANCE_TYPE_MEPHIT_ICE + || nAppearance == APPEARANCE_TYPE_WILL_O_WISP + || nAppearance == APPEARANCE_TYPE_DRAGON_GREEN + || nAppearance == APPEARANCE_TYPE_WYRMLING_GREEN; + //|| CheckTargetName(oCreature, "air")) // This last one is to catch anything named with Air that doesnt use the appearances +} +//ok +int GetIsEarthCreature(object oCreature, int nAppearance) +{ + return nAppearance == APPEARANCE_TYPE_ELEMENTAL_EARTH + || nAppearance == APPEARANCE_TYPE_ELEMENTAL_EARTH_ELDER + || nAppearance == APPEARANCE_TYPE_GARGOYLE + || nAppearance == APPEARANCE_TYPE_MEPHIT_EARTH + || nAppearance == APPEARANCE_TYPE_MEPHIT_SALT + || nAppearance == APPEARANCE_TYPE_DRAGON_BLUE + || nAppearance == APPEARANCE_TYPE_DRAGON_COPPER + || nAppearance == APPEARANCE_TYPE_WYRMLING_BLUE + || nAppearance == APPEARANCE_TYPE_WYRMLING_COPPER; + //|| CheckTargetName(oCreature, "earth")) // As above +} +//ok +int GetIsFireCreature(object oCreature, int nAppearance) +{ + return nAppearance == APPEARANCE_TYPE_ELEMENTAL_FIRE + || nAppearance == APPEARANCE_TYPE_ELEMENTAL_FIRE_ELDER + || nAppearance == APPEARANCE_TYPE_AZER_MALE + || nAppearance == APPEARANCE_TYPE_AZER_FEMALE + || nAppearance == APPEARANCE_TYPE_GIANT_FIRE + || nAppearance == APPEARANCE_TYPE_GIANT_FIRE_FEMALE + || nAppearance == APPEARANCE_TYPE_MEPHIT_FIRE + || nAppearance == APPEARANCE_TYPE_MEPHIT_MAGMA + || nAppearance == APPEARANCE_TYPE_MEPHIT_STEAM + || nAppearance == APPEARANCE_TYPE_DRAGON_BRASS + || nAppearance == APPEARANCE_TYPE_DRAGON_GOLD + || nAppearance == APPEARANCE_TYPE_DRAGON_RED + || nAppearance == APPEARANCE_TYPE_WYRMLING_BRASS + || nAppearance == APPEARANCE_TYPE_WYRMLING_GOLD + || nAppearance == APPEARANCE_TYPE_WYRMLING_RED + || nAppearance == APPEARANCE_TYPE_DOG_HELL_HOUND; + //|| CheckTargetName(oCreature, "fire")) // This last one is to catch anything named with Fire that doesnt use the appearances +} +//ok +int GetIsWaterCreature(object oCreature, int nAppearance) +{ + return nAppearance == APPEARANCE_TYPE_ELEMENTAL_WATER + || nAppearance == APPEARANCE_TYPE_ELEMENTAL_WATER_ELDER + || nAppearance == APPEARANCE_TYPE_MEPHIT_WATER + || nAppearance == APPEARANCE_TYPE_MEPHIT_OOZE + || nAppearance == APPEARANCE_TYPE_DRAGON_BLACK + || nAppearance == APPEARANCE_TYPE_DRAGON_BRONZE + || nAppearance == APPEARANCE_TYPE_WYRMLING_BLACK + || nAppearance == APPEARANCE_TYPE_WYRMLING_BRONZE; + //|| CheckTargetName(oCreature, "water")) // As above +} +//only animals in PnP +int GetIsReptile(object oCreature, int nAppearance) +{ + if(nAppearance == APPEARANCE_TYPE_KOBOLD_A + || nAppearance == APPEARANCE_TYPE_KOBOLD_B + || nAppearance == APPEARANCE_TYPE_KOBOLD_CHIEF_A + || nAppearance == APPEARANCE_TYPE_KOBOLD_CHIEF_B + || nAppearance == APPEARANCE_TYPE_KOBOLD_SHAMAN_A + || nAppearance == APPEARANCE_TYPE_KOBOLD_SHAMAN_B + || nAppearance == APPEARANCE_TYPE_LIZARDFOLK_A + || nAppearance == APPEARANCE_TYPE_LIZARDFOLK_B + || nAppearance == APPEARANCE_TYPE_LIZARDFOLK_WARRIOR_A + || nAppearance == APPEARANCE_TYPE_LIZARDFOLK_WARRIOR_B + || nAppearance == APPEARANCE_TYPE_LIZARDFOLK_SHAMAN_A + || nAppearance == APPEARANCE_TYPE_LIZARDFOLK_SHAMAN_B + || nAppearance == 451 //Trog + || nAppearance == 452 //Trog Warrior + || nAppearance == 453 //Trog Cleric + || nAppearance == 178 //Black Cobra + || nAppearance == 183 //Cobra + || nAppearance == 194) //Gold Cobra + //|| CheckTargetName(oCreature, "scale") + //|| CheckTargetName(oCreature, "snake") + //|| CheckTargetName(oCreature, "reptile")) // Reptilian names + { + return TRUE; + } + return FALSE; +} + +int GetIsSpider(object oCreature, int nAppearance) +{ + return GetLevelByClass(CLASS_TYPE_VERMIN, oCreature) + && (nAppearance == APPEARANCE_TYPE_SPIDER_DEMON + || nAppearance == APPEARANCE_TYPE_SPIDER_DIRE + || nAppearance == APPEARANCE_TYPE_SPIDER_GIANT + || nAppearance == APPEARANCE_TYPE_SPIDER_SWORD + || nAppearance == APPEARANCE_TYPE_SPIDER_PHASE + || nAppearance == APPEARANCE_TYPE_SPIDER_WRAITH + || nAppearance == 463); //Maggris + //|| CheckTargetName(oCreature, "spider"); // Duh +} + +int GetIsColdCreature(object oCreature, int nAppearance) +{ + return nAppearance == APPEARANCE_TYPE_DOG_WINTER_WOLF + || nAppearance == APPEARANCE_TYPE_DRAGON_WHITE + || nAppearance == APPEARANCE_TYPE_GIANT_FROST + || nAppearance == APPEARANCE_TYPE_GIANT_FROST_FEMALE + || nAppearance == APPEARANCE_TYPE_MEPHIT_ICE + || nAppearance == APPEARANCE_TYPE_WYRMLING_WHITE + || nAppearance == APPEARANCE_TYPE_DRAGON_SILVER + || nAppearance == APPEARANCE_TYPE_WYRMLING_SILVER; + //|| CheckTargetName(oCreature, "water")) // As above +} + +void FaithInTheFrost(object oPC, object oTarget) +{ + if (GetHasFeat(FEAT_FAITH_IN_THE_FROST, oPC)) + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(GetAbilityModifier(ABILITY_CHARISMA, oPC), DAMAGE_TYPE_COLD), oTarget); +} + +void LightOfAurifar(object oPC, object oTarget) +{ + if (GetHasFeat(FEAT_LIGHT_OF_AURIFAR, oPC)) + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(2), DAMAGE_TYPE_FIRE), oTarget); +} + +// Test main +//void main(){} + + diff --git a/src/include/prc_inc_unarmed.nss b/src/include/prc_inc_unarmed.nss new file mode 100644 index 0000000..a08f912 --- /dev/null +++ b/src/include/prc_inc_unarmed.nss @@ -0,0 +1,596 @@ +//::////////////////////////////////////////////// +//:: Unarmed evaluation include +//:: prc_inc_unarmed +//::////////////////////////////////////////////// +/* + Handles attack bonus, damage and itemproperties + for creature weapons created based on class + and race abilities. +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + + +////////////////////////////////////////////////// +/* Constant declarations */ +////////////////////////////////////////////////// + +const int ITEM_PROPERTY_WOUNDING = 69; + +const string CALL_UNARMED_FEATS = "CALL_UNARMED_FEATS"; +const string CALL_UNARMED_FISTS = "CALL_UNARMED_FISTS"; +const string UNARMED_CALLBACK = "UNARMED_CALLBACK"; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + + +// Determines the amount of unarmed damage a character can do +// ========================================================== +// oCreature a creature whose unarmed damage dice are +// being evaluated +// +// Returns one of the IP_CONST_MONSTERDAMAGE_* constants +int FindUnarmedDamage(object oCreature); + +// Adds appropriate unarmed feats to the skin. Goes with UnarmedFists() +// ==================================================================== +// oCreature a creature whose unarmed combat feats to handle +// +// Do not call this directly from your evaluation script. Instead, set +// the local variable CALL_UNARMED_FEATS on the creature to TRUE. +// This is done to avoid bugs from redundant calls to these functions. +void UnarmedFeats(object oCreature); + +// Creates/strips a creature weapon and applies bonuses. Goes with UnarmedFeats() +// ============================================================================== +// oCreature a creature whose creature weapon to handle +// +// Do not call this directly from your evaluation script. Instead, set +// the local variable CALL_UNARMED_FISTS on the creature to TRUE. +// This is done to avoid bugs from redundant calls to these functions. +// +// If you are going to add properties to the creature weapons, hook +// your script for callback after this is evaluated by calling +// AddEventScript(oPC, CALLBACKHOOK_UNARMED, "your_script", FALSE, FALSE); +// When the callback is running, a local int UNARMED_CALLBACK will be +// set on OBJECT_SELF +void UnarmedFists(object oCreature); + +/** + * Determines whether the given object is one of the PRC creature weapons based + * on it's resref and tag. Resref is tested first, then tag. + * + * @param oTest Object to test + * @return TRUE if the object is a PRC creature weapon, FALSE otherwise + */ +int GetIsPRCCreatureWeapon(object oTest); + +/** + * Determines the average damage of a IP_CONST_MONSTERDAMAGE_*** constant. + * Used to compare different unarmed damages. + * + * @param iDamage IP_CONST_MONSTERDAMAGE_*** constant + * @return average damage of that constant + */ +float DamageAvg(int iDamage); + +//#include "prc_alterations" +//#include "pnp_shft_poly" +//#include "prc_feat_const" +//#include "prc_ipfeat_const" +//#include "prc_class_const" +//#include "prc_racial_const" +//#include "prc_spell_const" +//#include "inc_utility" +#include "prc_inc_natweap" + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +// Clean up any extras in the inventory. +void CleanExtraFists(object oCreature) +{ + int nItemType; + object oItem = GetFirstItemInInventory(oCreature); + object oCWPB = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oCreature); + object oCWPL = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oCreature); + object oCWPR = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oCreature); + object oCSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oCreature); + + while(GetIsObjectValid(oItem)) + { + nItemType = GetBaseItemType(oItem); + + if(nItemType == BASE_ITEM_CBLUDGWEAPON || + nItemType == BASE_ITEM_CPIERCWEAPON || + nItemType == BASE_ITEM_CREATUREITEM || + nItemType == BASE_ITEM_CSLASHWEAPON || + nItemType == BASE_ITEM_CSLSHPRCWEAP + ) + { + if(oItem != oCWPB && + oItem != oCWPL && + oItem != oCWPR && + oItem != oCSkin + ) + MyDestroyObject(oItem); + } + oItem = GetNextItemInInventory(oCreature); + } +} + +int GetIsPRCCreatureWeapon(object oTest) +{ + string sTest = GetStringUpperCase(GetResRef(oTest)); + + return // First, test ResRef + sTest == "PRC_UNARMED_B" || + sTest == "PRC_UNARMED_S" || + sTest == "PRC_UNARMED_P" || + sTest == "PRC_UNARMED_SP" || + sTest == "NW_IT_CREWPB010" || // Legacy item, should not be used anymore + // If resref doesn't match, try tag + (sTest = GetStringUpperCase(GetTag(oTest))) == "PRC_UNARMED_B" || + sTest == "PRC_UNARMED_S" || + sTest == "PRC_UNARMED_P" || + sTest == "PRC_UNARMED_SP" || + sTest == "NW_IT_CREWPB010" + ; +} + +// Remove the unarmed penalty effect +void RemoveUnarmedAttackEffects(object oCreature) +{ + effect e = GetFirstEffect(oCreature); + + while (GetIsEffectValid(e)) + { + if (GetEffectSpellId(e) == SPELL_UNARMED_ATTACK_PEN) + RemoveEffect(oCreature, e); + + e = GetNextEffect(oCreature); + } +} + +// Add the unarmed penalty effect -- the DR piercing property gives an unwanted +// attack bonus. This clears it up. +void ApplyUnarmedAttackEffects(object oCreature) +{ + object oCastingObject = CreateObject(OBJECT_TYPE_PLACEABLE, "x0_rodwonder", GetLocation(OBJECT_SELF)); + + AssignCommand(oCastingObject, ActionCastSpellAtObject(SPELL_UNARMED_ATTACK_PEN, oCreature, METAMAGIC_NONE, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE)); + + DestroyObject(oCastingObject, 6.0); +} + +// Determines the amount of damage a character can do. +// IoDM: +1 dice at level 4, +2 dice at level 8 +// Sacred Fist: Levels add to monk levels, or stand alone as monk levels. +// Shou: 1d6 at level 1, 1d8 at level 2, 1d10 at level 3, 2d6 at level 5 +// Monk: 1d6 at level 1, 1d8 at level 4, 1d10 at level 8, 2d6 at level 12, 2d8 at level 16, 2d10 at level 20 +// Frostrager: 1d6 at level 1, 1d8 at level 4 +int FindUnarmedDamage(object oCreature) +{ + int iDamage = 0; + int iMonk = GetLevelByClass(CLASS_TYPE_MONK, oCreature) + GetLocalInt(oCreature, "LiPengMonk"); + int iShou = GetLevelByClass(CLASS_TYPE_SHOU, oCreature); + int iBrawler = GetLevelByClass(CLASS_TYPE_BRAWLER, oCreature); + int iSacredFist = GetLevelByClass(CLASS_TYPE_SACREDFIST, oCreature); + int iEnlightenedFist = GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCreature); + int iHenshin = GetLevelByClass(CLASS_TYPE_HENSHIN_MYSTIC, oCreature); + int iZuoken = GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oCreature); + int iShadowSunNinja = GetLevelByClass(CLASS_TYPE_SHADOW_SUN_NINJA, oCreature); + int iFrost = GetLevelByClass(CLASS_TYPE_FROSTRAGER, oCreature); + int iAscetic = GetLevelByClass(CLASS_TYPE_NINJA, oCreature); + int iRonove; + int iMonkDamage = 1; + int iShouDamage = 1; + int iBrawlerDamage = 1; + int iFrostDamage = 1; + int iSUSDamage = 1; + int iDieIncrease = 0; + int iSize; + + if (GetHasSpellEffect(VESTIGE_RONOVE, oCreature) && GetLevelByClass(CLASS_TYPE_BINDER, oCreature)) iRonove = GetLocalInt(oCreature, "RonovesFists"); + + // if the creature is shifted, use model size + // otherwise, we want to stick to what the feats say they "should" be. + // No making pixies with Dragon Appearance for "huge" fist damage. + if( GetIsPolyMorphedOrShifted(oCreature) + || GetPRCSwitch(PRC_APPEARANCE_SIZE)) + { + iSize = PRCGetCreatureSize(oCreature) - CREATURE_SIZE_MEDIUM + 5; // medium is size 5 for us + } + else + { + // Determine creature size by feats. + iSize = 5; // medium is size 5 for us + if (GetHasFeat(FEAT_TINY, oCreature)) iSize = 3; + if (GetHasFeat(FEAT_SMALL, oCreature)) iSize = 4; + if (GetHasFeat(FEAT_LARGE, oCreature)) iSize = 6; + if (GetHasFeat(FEAT_HUGE, oCreature)) iSize = 7; + // include size changes + iSize += PRCGetCreatureSize(oCreature) - PRCGetCreatureSize(oCreature, PRC_SIZEMASK_NONE); + // cap if needed + if (iSize < 1) iSize = 1; + if (iSize > 9) iSize = 9; + } + + // Sacred Fist cannot add their levels if they've broken their code. + if (GetHasFeat(FEAT_SF_CODE, oCreature)) iSacredFist = 0; + + // several classes add their levels to the monk class, + // or use monk progression if the character has no monk levels + iMonk += iSacredFist + iHenshin + iEnlightenedFist + iShou + iZuoken + iShadowSunNinja; + + // Superior Unarmed Strike + if (GetHasFeat(FEAT_SUPERIOR_UNARMED_STRIKE, oCreature)) + { + iMonk += 4; + int nHD = GetHitDice(oCreature); + if (nHD >= 16) iSUSDamage = IP_CONST_MONSTERDAMAGE_2d6; + else if (nHD >= 12) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d10; + else if (nHD >= 8) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d8; + else if (nHD >= 4) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d6; + else if (nHD >= 3) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d4; + } + + // Ascetic Stalker + if (GetHasFeat(FEAT_ASCETIC_STALKER, oCreature)) + iMonk += iAscetic; + + // In 3.0e, Monk progression stops after level 16: + if (iMonk > 16 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE) ) iMonk = 16; + // in 3.5e, monk progression stops at 20. + else if(iMonk > 20) iMonk = 20; + + // Ronove is in place of monk, does not stack + if (iRonove > iMonk) iMonk = iRonove; + + // monks damage progesses every four levels, starts at 1d6 + if (iMonk > 0) + iMonkDamage = iMonk / 4 + 3; + + // For medium monks in 3.0e skip 2d8 and go to 1d20 + if(iSize == 5 && iMonkDamage == 7 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE) ) iMonkDamage = 8; + + // Shou Disciple either adds its level to existing class or does its own damage, depending + // on which is better. Here we will determine how much damage the Shou Disciple does + // without stacking. + if (iShou > 0) iShouDamage = iShou + 2; // Lv. 1: 1d6, Lv. 2: 1d8, Lv. 3: 1d10 + if (iShou > 3) iShouDamage--; // Lv. 4: 1d10, Lv. 5: 2d6 + iShouDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iShouDamage)); + + // Frostrager does not stack with other damage types + if (iFrost > 0) iFrostDamage = IP_CONST_MONSTERDAMAGE_1d6; // Lv. 1: 1d6 + if (iFrost > 3) iFrostDamage = IP_CONST_MONSTERDAMAGE_1d8; // Lv. 3: 1d8 + + // Brawler follows monk progression except for the last one (3d8) + if (iBrawler > 0) iBrawlerDamage = iBrawler / 6 + 3; // 1d6, 1d8, 1d10, 2d6, 2d8, 2d10 + if (iBrawler >= 36) iBrawlerDamage += 2; // 3d8 + + // Monks and monk-like classes deal no additional damage when wearing any armor, at + // least in NWN. This is to reflect that. No shields too. + if (iMonkDamage > 1) + { + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature); + int bShieldEq = GetBaseItemType(oShield) == BASE_ITEM_SMALLSHIELD || + GetBaseItemType(oShield) == BASE_ITEM_LARGESHIELD || + GetBaseItemType(oShield) == BASE_ITEM_TOWERSHIELD; + + if (GetBaseAC(oArmor) > 0 || bShieldEq) + { + iMonkDamage = 1; + } + } + +// Shou Disciples can wear light armor + if (iShouDamage > 1) + { + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature); + int bShieldEq = GetBaseItemType(oShield) == BASE_ITEM_SMALLSHIELD || + GetBaseItemType(oShield) == BASE_ITEM_LARGESHIELD || + GetBaseItemType(oShield) == BASE_ITEM_TOWERSHIELD; + + if (GetBaseAC(oArmor) > 3 || bShieldEq) + { + iShouDamage = 1; + } + } + + // For Initiate of Draconic Mysteries + if (GetHasFeat(FEAT_INCREASE_DAMAGE2, oCreature)) iDieIncrease = 2; + else if (GetHasFeat(FEAT_INCREASE_DAMAGE1, oCreature)) iDieIncrease = 1; + + //:: Expansion / Compression powers + int nExpansion = GetLocalInt(oCreature, "PRC_Power_Expansion_SizeIncrease"); + int nCompression = GetLocalInt(oCreature, "PRC_Power_Compression_SizeReduction"); + + if (nExpansion) + { + iSize += nExpansion; + } + + if (nCompression) + { + iSize -= nCompression; + } + + iMonkDamage += iDieIncrease; + iShouDamage += iDieIncrease; + iBrawlerDamage += iDieIncrease; + iFrostDamage += iDieIncrease; + iSUSDamage += iDieIncrease; + + //FloatingTextStringOnCreature("prc_inc_unarmed: Size is: "+IntToString(iSize)+".", oCreature); + //FloatingTextStringOnCreature("prc_inc_unarmed: Pre 2DA Lookup >> iMonkDamage = "+IntToString(iMonkDamage)+".", oCreature); + + // now, read the damage from the table in unarmed_dmg.2da + iMonkDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iMonkDamage)); + iShouDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iShouDamage)); + + //FloatingTextStringOnCreature("prc_inc_unarmed: Post 2DA Lookup >> iMonkDamage = "+IntToString(iMonkDamage)+".", oCreature); + + // Medium+ monks have some special values on the table in 3.0: + if (iSize >= 5 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE)) + { + if (iMonkDamage == IP_CONST_MONSTERDAMAGE_2d6) iMonkDamage = IP_CONST_MONSTERDAMAGE_1d12; + if (iMonkDamage == IP_CONST_MONSTERDAMAGE_2d10) iMonkDamage = IP_CONST_MONSTERDAMAGE_1d20; + } + + iDamage = iMonkDamage; + // Future unarmed classes: if you do your own damage, add in "comparisons" below here. + iDamage = (DamageAvg(iShouDamage ) > DamageAvg(iDamage)) ? iShouDamage : iDamage; + iDamage = (DamageAvg(iFrostDamage ) > DamageAvg(iDamage)) ? iFrostDamage : iDamage; + iDamage = (DamageAvg(iSUSDamage ) > DamageAvg(iDamage)) ? iSUSDamage : iDamage; + + if (DEBUG) DoDebug("prc_inc_unarmed: iDamage "+IntToString(iDamage)); + + return iDamage; +} + +// Adds appropriate feats to the skin. Stolen from SoulTaker + expanded with overwhelming/devastating critical. +void UnarmedFeats(object oCreature) +{ + // If we are polymorphed/shifted, do not mess with the creature weapon. + if (GetIsPolyMorphedOrShifted(oCreature)) return; + + object oSkin = GetPCSkin(oCreature); + + if (!GetHasFeat(FEAT_WEAPON_PROFICIENCY_CREATURE, oCreature)) + AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_CREATURE),oSkin); + + //only roll unarmed feats into creature feats when not using natural weapons + if(!GetIsUsingPrimaryNaturalWeapons(oCreature)) + { + if (GetHasFeat(FEAT_WEAPON_FOCUS_UNARMED_STRIKE, oCreature) && !GetHasFeat(FEAT_WEAPON_FOCUS_CREATURE, oCreature)) + AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_WeapFocCreature),oSkin); + + if (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_UNARMED_STRIKE, oCreature) && !GetHasFeat(FEAT_WEAPON_SPECIALIZATION_CREATURE, oCreature)) + AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_WeapSpecCreature),oSkin); + + if (GetHasFeat(FEAT_IMPROVED_CRITICAL_UNARMED_STRIKE, oCreature) && !GetHasFeat(FEAT_IMPROVED_CRITICAL_CREATURE, oCreature)) + AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_ImpCritCreature),oSkin); + + if (GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_UNARMED, oCreature) && !GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_CREATURE, oCreature)) + AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_WeapEpicFocCreature),oSkin); + + if (GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_UNARMED, oCreature) && !GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_CREATURE, oCreature)) + AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_WeapEpicSpecCreature),oSkin); + + if (GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_UNARMED, oCreature) && !GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_CREATURE, oCreature)) + AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_OVERCRITICAL_CREATURE),oSkin); + + if (GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_UNARMED, oCreature) && !GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_CREATURE, oCreature)) + AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_DEVCRITICAL_CREATURE),oSkin); + } +} + +// Creates/strips a creature weapon and applies bonuses. Large chunks stolen from SoulTaker. +void UnarmedFists(object oCreature) +{ + // If we are polymorphed/shifted, do not mess with the creature weapon. + if (GetIsPolyMorphedOrShifted(oCreature)) return; + + RemoveUnarmedAttackEffects(oCreature); + + object oRighthand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature); + object oLefthand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature); + object oWeapL = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oCreature); + + + // Clean up the mess of extra fists made on taking first level. + DelayCommand(6.0f, CleanExtraFists(oCreature)); + + // Determine the character's capacity to pierce DR. + // only applies when not using natural weapons + if(!GetIsUsingPrimaryNaturalWeapons(oCreature)) + { + + int iRace = GetRacialType(oCreature); + int iMonk = GetLevelByClass(CLASS_TYPE_MONK, oCreature) + GetLocalInt(oCreature, "LiPengMonk"); + int iShou = GetLevelByClass(CLASS_TYPE_SHOU, oCreature); + int iSacFist = GetLevelByClass(CLASS_TYPE_SACREDFIST, oCreature); + int iHenshin = GetLevelByClass(CLASS_TYPE_HENSHIN_MYSTIC, oCreature); + int iIoDM = GetLevelByClass(CLASS_TYPE_INITIATE_DRACONIC, oCreature); + int iBrawler = GetLevelByClass(CLASS_TYPE_BRAWLER, oCreature); + int iZuoken = GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oCreature); + int iShadowSunNinja = GetLevelByClass(CLASS_TYPE_SHADOW_SUN_NINJA, oCreature); + int iAscetic = GetLevelByClass(CLASS_TYPE_NINJA, oCreature); + + // Sacred Fists who break their code get no benefits. + if (GetHasFeat(FEAT_SF_CODE,oCreature)) iSacFist = 0; + + // The monk adds all these classes. + int iMonkEq = iMonk + iShou + iSacFist + iHenshin + iZuoken + iShadowSunNinja; + + // Ascetic Stalker + if (GetHasFeat(FEAT_ASCETIC_STALKER, oCreature)) + iMonkEq += iAscetic; + + // Determine the type of damage the character should do. + string sWeapType; + if (GetHasFeat(FEAT_CLAWDRAGON, oCreature)) + sWeapType = "PRC_UNARMED_S"; + else + sWeapType = "PRC_UNARMED_B"; + + + // Equip the creature weapon. + if (!GetIsObjectValid(oWeapL) || GetTag(oWeapL) != sWeapType) + { + if (GetHasItem(oCreature, sWeapType)) + { + oWeapL = GetItemPossessedBy(oCreature, sWeapType); + SetIdentified(oWeapL, TRUE); + AssignCommand(oCreature, ActionEquipItem(oWeapL, INVENTORY_SLOT_CWEAPON_L)); + } + else + { + oWeapL = CreateItemOnObject(sWeapType, oCreature); + SetIdentified(oWeapL, TRUE); + AssignCommand(oCreature,ActionEquipItem(oWeapL, INVENTORY_SLOT_CWEAPON_L)); + } + } + + int iKi = (iMonkEq > 9) ? 1 : 0; + iKi = (iMonkEq > 12) ? 2 : iKi; + iKi = (iMonkEq > 15) ? 3 : iKi; + + int iDragClaw = GetHasFeat(FEAT_CLAWDRAGON,oCreature) ? 1: 0; + iDragClaw = GetHasFeat(FEAT_CLAWENH2,oCreature) ? 2: iDragClaw; + iDragClaw = GetHasFeat(FEAT_CLAWENH3,oCreature) ? 3: iDragClaw; + + int iBrawlEnh = iBrawler / 6; + + int iEpicKi = GetHasFeat(FEAT_EPIC_IMPROVED_KI_STRIKE_4,oCreature) ? 1 : 0 ; + iEpicKi = GetHasFeat(FEAT_EPIC_IMPROVED_KI_STRIKE_5,oCreature) ? 2 : iEpicKi ; + + // The total enhancement to the fist is the sum of all the enhancements above + int iEnh = iKi + iDragClaw + iBrawlEnh + iEpicKi; + + // Strip the Fist. + itemproperty ip = GetFirstItemProperty(oWeapL); + while (GetIsItemPropertyValid(ip)) + { + RemoveItemProperty(oWeapL, ip); + ip = GetNextItemProperty(oWeapL); + } + + // Leave the fist blank if weapons are equipped. The only way a weapon will + // be equipped on the left hand is if there is a weapon in the right hand. + if (GetIsObjectValid(oRighthand)) return; + + // Add glove bonuses. + object oItem = GetItemInSlot(INVENTORY_SLOT_ARMS,oCreature); + int iGloveEnh = 0; + if (GetIsObjectValid(oItem)) + { + int iType = GetBaseItemType(oItem); + if (iType == BASE_ITEM_GLOVES) + { + ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip)) + { + iType = GetItemPropertyType(ip); + switch (iType) + { + case ITEM_PROPERTY_DAMAGE_BONUS: + case ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP: + case ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP: + case ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT: + case ITEM_PROPERTY_ON_HIT_PROPERTIES: + case ITEM_PROPERTY_ONHITCASTSPELL: + case ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE: + case ITEM_PROPERTY_KEEN: + case ITEM_PROPERTY_MASSIVE_CRITICALS: + case ITEM_PROPERTY_POISON: + case ITEM_PROPERTY_REGENERATION_VAMPIRIC: + case ITEM_PROPERTY_WOUNDING: + case ITEM_PROPERTY_DECREASED_DAMAGE: + case ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER: + DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ip,oWeapL)); + break; + case ITEM_PROPERTY_ATTACK_BONUS: + int iCost = GetItemPropertyCostTableValue(ip); + iGloveEnh = (iCost>iGloveEnh) ? iCost:iGloveEnh; + iEnh = (iCost>iEnh) ? iCost:iEnh; + break; + } + ip = GetNextItemProperty(oItem); + } + // handles these seperately so as not to create "attack penalties vs. xxxx" + ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip)) + { + iType = GetItemPropertyType(ip); + switch (iType) + { + case ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT: + case ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP: + case ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP: + if (GetItemPropertyCostTableValue(ip) > iEnh) + DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ip,oWeapL)); + break; + } + ip = GetNextItemProperty(oItem); + } + } + } + + // Add damage resistance penetration. + DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyAttackBonus(iEnh), oWeapL)); + + // Cool VFX when striking unarmed + if (iMonkEq > 9) + //DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT, PRCItemPropertyBonusFeat(IP_CONST_FEAT_KI_STRIKE), oWeapL)); + DelayCommand(0.1, IPSafeAddItemProperty(oWeapL, PRCItemPropertyBonusFeat(IP_CONST_FEAT_KI_STRIKE), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE)); + + // This adds creature weapon finesse and a penalty to offset the DR penetration attack bonus. + SetLocalInt(oCreature, "UnarmedEnhancement", iEnh); + SetLocalInt(oCreature, "UnarmedEnhancementGlove", iGloveEnh); + } + + // Weapon finesse or intuitive attack? + SetLocalInt(oCreature, "UsingCreature", TRUE); + ExecuteScript("prc_intuiatk", oCreature); + DelayCommand(1.0f, DeleteLocalInt(oCreature, "UsingCreature")); + ApplyUnarmedAttackEffects(oCreature); + + // Add the appropriate damage to the fist. + int iMonsterDamage = FindUnarmedDamage(oCreature); + AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyMonsterDamage(iMonsterDamage),oWeapL); + + // Add OnHitCast: Unique if necessary. Frostrager level 5 grants Rend too + if(GetHasFeat(FEAT_REND, oCreature) || GetLevelByClass(CLASS_TYPE_FROSTRAGER, oCreature) > 4) + IPSafeAddItemProperty(oWeapL, + ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1)); + + // Friendly message to remind players that certain things won't appear correct. + if (GetLocalInt(oCreature, "UnarmedSubSystemMessage") != TRUE + && GetHasSpellEffect(SPELL_UNARMED_ATTACK_PEN, oCreature)) + { + SetLocalInt(oCreature, "UnarmedSubSystemMessage", TRUE); + DelayCommand(3.001f, SendMessageToPC(oCreature, "This character uses the PRC's unarmed system. This system has been created to")); + DelayCommand(3.002f, SendMessageToPC(oCreature, "work around many Aurora engine bugs and limitations. Your attack roll may appear to be")); + DelayCommand(3.003f, SendMessageToPC(oCreature, "incorrect on the character's stats. However, the attack rolls should be correct in")); + DelayCommand(3.004f, SendMessageToPC(oCreature, "combat. Disregard any attack effects that seem extra: they are part of the workaround.")); + DelayCommand(600.0f, DeleteLocalInt(oCreature, "UnarmedSubSystemMessage")); + } +} + +float DamageAvg(int iDamage) +{ + int iDie = StringToInt(Get2DACache("iprp_monstcost", "Die", iDamage)); + int iNum = StringToInt(Get2DACache("iprp_monstcost", "NumDice", iDamage)); + + return IntToFloat(iNum * (iDie+1)) / 2; +} + +//:: void main (){} diff --git a/src/include/prc_inc_util.nss b/src/include/prc_inc_util.nss new file mode 100644 index 0000000..0d4ac47 --- /dev/null +++ b/src/include/prc_inc_util.nss @@ -0,0 +1,228 @@ +/////////////////////////////////////////////////////////////////////////////// +// VARIABLE DECLARATIONS +/////////////////////////////////////////////////////////////////////////////// + +const string PRC_Rest_Generation = "PRC_Rest_Generation"; +const string PRC_Rest_Generation_Check = "PRC_Rest_Generation_Check"; +const string PRC_ForcedRestDetector_Generation = "PRC_ForcedRestDetector_Generation"; + +/////////////////////////////////////////////////////////////////////////////// +// INCLUDES +/////////////////////////////////////////////////////////////////////////////// + +#include "prc_alterations" + +/////////////////////////////////////////////////////////////////////////////// +// FUNCTION DECLARATIONS +/////////////////////////////////////////////////////////////////////////////// + +// Returns the number of henchmen a player has. +int GetNumHenchmen(object oPC); + +// returns the float time in seconds to close the given distance +float GetTimeToCloseDistance(float fMeters, object oPC, int bIsRunning = FALSE); + +/* PRC ForceRest wrapper + * + * ForceRest does not trigger the module's OnRest event, nor will the targeted player show up + * when GetLastPCRested is used. This wrapper can be used to ForceRest a target, while still + * running the PRC's OnRest script. + */ +void PRCForceRest(object oPC); +void PRCForceRested(object oPC); + +/////////////////////////////////////////////////////////////////////////////// +// FUNCTION DEFINITIONS +/////////////////////////////////////////////////////////////////////////////// + +int GetNumHenchmen(object oPC) +{ + if (!GetIsPC(oPC)) return -1; + + int nLoop, nCount; + for (nLoop = 1; nLoop <= GetMaxHenchmen(); nLoop++) + { + if (GetIsObjectValid(GetHenchman(oPC, nLoop))) + nCount++; + } + + return nCount; +} + +float GetTimeToCloseDistance(float fMeters, object oPC, int bIsRunning = FALSE) +{ + float fTime = 0.0; + float fSpeed = 0.0; + + int iMoveRate = GetMovementRate(oPC); + + switch(iMoveRate) + { + case 0: + fSpeed = 2.0; + break; + case 1: + fSpeed = 0.0; + break; + case 2: + fSpeed = 0.75; + break; + case 3: + fSpeed = 1.25; + break; + case 4: + fSpeed = 1.75; + break; + case 5: + fSpeed = 2.25; + break; + case 6: + fSpeed = 2.75; + break; + case 7: + fSpeed = 2.0; // could change to creature default in the appearance.2da. + break; + case 8: + fSpeed = 5.50; + break; + } + + // movement speed doubled if running + if(bIsRunning) fSpeed *= 2.0; + + // other effects that can change movement speed + if( PRCGetHasEffect(EFFECT_TYPE_HASTE, oPC) ) fSpeed *= 2.0; + if( PRCGetHasEffect(EFFECT_TYPE_MOVEMENT_SPEED_INCREASE, oPC) ) fSpeed *= 2.0; + + if( PRCGetHasEffect(EFFECT_TYPE_SLOW, oPC) ) fSpeed /= 2.0; + if( PRCGetHasEffect(EFFECT_TYPE_MOVEMENT_SPEED_DECREASE, oPC) ) fSpeed /= 2.0; + + if( GetHasFeat(FEAT_BARBARIAN_ENDURANCE, oPC) ) fSpeed *= 1.1; // 10% gain + if( GetHasFeat(FEAT_MONK_ENDURANCE, oPC) ) + { + float fBonus = 0.1 * (GetLevelByClass(CLASS_TYPE_MONK, oPC) / 3 ); + if (fBonus > 0.90) fBonus = 0.9; + + fBonus += 1.0; + fSpeed *= fBonus; + } + + // final calculation + fTime = fMeters / fSpeed; + + return fTime; +} + +int PRC_NextGeneration(int nCurrentGeneration) +{ + nCurrentGeneration++; + if (nCurrentGeneration > 30000) + nCurrentGeneration = 1; + return nCurrentGeneration; +} + +//TODO: TRIED THIS CLEANER VERSION AND IT DIDN'T WORK; FIX IT AND USE IT LATER +// effect _prc_inc_ForcedRestDetectorEffect() +// { +// //Create an extraordinary effect, which is removed only by resting. +// //Therefore, if it disappears, we know that resting has happened. +// return ExtraordinaryEffect(EffectVisualEffect(VFX_DUR_CESSATE_NEUTRAL)); +// //TODO: this could match effects that are not ours. Make it more unique somehow. +// } +// +// void _prc_inc_ApplyForcedRestDetectorEffect(object oPC) +// { +// ApplyEffectToObject(DURATION_TYPE_PERMANENT, _prc_inc_ForcedRestDetectorEffect(), oPC); +// } +// +// int _prc_inc_TestForcedRestDetectorEffect(effect eEffect) +// { +// effect eTestEffect = _prc_inc_ForcedRestDetectorEffect(); +// return GetEffectType(eEffect) == GetEffectType(eTestEffect) && +// GetEffectSubType(eEffect) == GetEffectSubType(eTestEffect) && +// GetEffectDurationType(eEffect) == GetEffectDurationType(eTestEffect) && +// GetEffectSpellId(eEffect) == -1; +// } + +void _prc_inc_ApplyForcedRestDetectorEffect(object oPC) +{ + //Apply an extraordinary effect, which is removed only by resting + ApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(EffectVisualEffect(VFX_DUR_CESSATE_NEUTRAL)), oPC); + //TODO: this could match effects that are not ours. Make it more unique somehow. +} + +int _prc_inc_TestForcedRestDetectorEffect(effect eEffect) +{ + return GetEffectType(eEffect) == EFFECT_TYPE_VISUALEFFECT && GetEffectSubType(eEffect) == SUBTYPE_EXTRAORDINARY && GetEffectDurationType(eEffect) == DURATION_TYPE_PERMANENT && GetEffectSpellId(eEffect) == -1; + //TODO: this could match effects that are not ours. Make it more unique somehow. +} + +void _prc_inc_ForcedRestDetector(object oPC, int nExpectedGeneration) +{ + int nGeneration = GetLocalInt(oPC, PRC_ForcedRestDetector_Generation); + if (nGeneration != nExpectedGeneration) + { + //There's another forced rest detector running, so stop ourselves and let that one continue + DoDebug("STOPPING DUPLICATE FORCED REST DETECTOR"); + return; + } + nGeneration = PRC_NextGeneration(nGeneration); + SetLocalInt(oPC, PRC_ForcedRestDetector_Generation, nGeneration); + + int nRestGeneration = GetLocalInt(oPC, PRC_Rest_Generation); + int nRestGenerationCheck = GetLocalInt(oPC, PRC_Rest_Generation_Check); + if (nRestGeneration != nRestGenerationCheck) + { + //A normal rest happened, and the delayed commands it schedules may still + //be executing or waiting to execute, so do nothing and check back later. + SetLocalInt(oPC, PRC_Rest_Generation_Check, nRestGeneration); + DelayCommand(10.0f, _prc_inc_ApplyForcedRestDetectorEffect(oPC)); + DelayCommand(10.1f, _prc_inc_ForcedRestDetector(oPC, nGeneration)); + } + else + { + int bFound = FALSE; + effect eEffect = GetFirstEffect(oPC); + while (GetIsEffectValid(eEffect)) + { + if (_prc_inc_TestForcedRestDetectorEffect(eEffect)) + { + bFound = TRUE; + break; + } + eEffect = GetNextEffect(oPC); + } + + if (!bFound) + { + DoDebug("FORCED REST DETECTED"); + PRCForceRested(oPC); //This executes the normal resting code, which will be detected above the next time this function executes + } + + //Schedule next check + DelayCommand(1.0f, _prc_inc_ForcedRestDetector(oPC, nGeneration)); + } +} + +void StartForcedRestDetector(object oPC) +{ + //TODO: make a way for the detector to detect that forced rest has already happened, or else do it here now (but how?) + DoDebug("STARTING FORCED REST DETECTOR"); + _prc_inc_ApplyForcedRestDetectorEffect(oPC); + SetLocalInt(oPC, PRC_Rest_Generation_Check, GetLocalInt(oPC, PRC_Rest_Generation)); + int nGeneration = GetLocalInt(oPC, PRC_ForcedRestDetector_Generation); + DelayCommand(1.0f, _prc_inc_ForcedRestDetector(oPC, nGeneration)); +} + +void PRCForceRest(object oPC) +{ + ForceRest(oPC); + PRCForceRested(oPC); +} + +void PRCForceRested(object oPC) +{ + //The PC has been forced rested--fix the problems this causes. + SetLocalInt(oPC, "PRC_ForceRested", 1); + ExecuteScript("prc_rest", oPC); +} \ No newline at end of file diff --git a/src/include/prc_inc_wpnrest.nss b/src/include/prc_inc_wpnrest.nss new file mode 100644 index 0000000..9dcf65a --- /dev/null +++ b/src/include/prc_inc_wpnrest.nss @@ -0,0 +1,1126 @@ +//:://///////////////////////////////////////////// +//:: Weapon Restriction System Include +//:: prc_inc_restwpn.nss +//:://///////////////////////////////////////////// +/* + Functions to support PnP Weapon Proficiency and + weapon feat chain simulation +*/ +//::////////////////////////////////////////////// +//:: Created By: Fox +//:: Created On: Feb 2, 2008 +//::////////////////////////////////////////////// + +#include "prc_inc_fork" +#include "inc_item_props" +#include "prc_x2_itemprop" + +/** + * All of the following functions use the following parameters: + * + * @param oPC The character weilding the weapon + * @param oItem The item in question. + * @param nHand The hand the weapon is wielded in. In the form of + * ATTACK_BONUS_ONHAND or ATTACK_BONUS_OFFHAND. + */ +void DoRacialEquip(object oPC, int nBaseType); + + //return if PC has proficiency in an item +int IsProficient(object oPC, int nBaseItem) +{ + switch(nBaseItem) + { + //special case: counts as simple for chitine + case BASE_ITEM_SHORTSWORD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC) + || GetHasFeat(FEAT_MINDBLADE, oPC) + || (GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) && GetRacialType(oPC) == RACIAL_TYPE_CHITINE) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SHORTSWORD, oPC); + + case BASE_ITEM_CLUB: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_CLUB, oPC); + + case BASE_ITEM_HEAVYCROSSBOW: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_HEAVY_XBOW, oPC); + + case BASE_ITEM_LIGHTCROSSBOW: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_LIGHT_XBOW, oPC); + + case BASE_ITEM_DAGGER: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DAGGER, oPC); + + case BASE_ITEM_LONGSWORD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) + || GetHasFeat(FEAT_MINDBLADE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_LONGSWORD, oPC); + + case BASE_ITEM_BATTLEAXE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) + || (GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) && GetRacialType(oPC) == RACIAL_TYPE_GNOLL) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_BATTLEAXE, oPC); + + case BASE_ITEM_BASTARDSWORD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC) + || GetHasFeat(FEAT_MINDBLADE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_BASTARD_SWORD, oPC); + + case BASE_ITEM_LIGHTFLAIL: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_LIGHT_FLAIL, oPC); + + case BASE_ITEM_WARHAMMER: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_WARHAMMER, oPC); + + case BASE_ITEM_LONGBOW: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_LONGBOW, oPC); + + case BASE_ITEM_LIGHTMACE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_LIGHT_MACE, oPC); + + case BASE_ITEM_HALBERD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_HALBERD, oPC); + + case BASE_ITEM_SHORTBOW: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oPC) + || (GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) && GetRacialType(oPC) == RACIAL_TYPE_GNOLL) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SHORTBOW, oPC); + + case BASE_ITEM_TWOBLADEDSWORD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_TWO_BLADED_SWORD, oPC); + + case BASE_ITEM_GREATSWORD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_GREATSWORD, oPC); + + case BASE_ITEM_GREATAXE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_GREATAXE, oPC); + + case BASE_ITEM_DART: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DART, oPC); + + case BASE_ITEM_DIREMACE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_DIRE_MACE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC); + + case BASE_ITEM_DOUBLEAXE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_DOUBLE_AXE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC); + + case BASE_ITEM_HEAVYFLAIL: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_HEAVY_FLAIL, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC); + + case BASE_ITEM_LIGHTHAMMER: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_LIGHT_HAMMER, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC); + + case BASE_ITEM_HANDAXE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_HANDAXE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oPC); + + case BASE_ITEM_KAMA: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_KAMA, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC); + + case BASE_ITEM_KATANA: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_KATANA, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC); + + case BASE_ITEM_KUKRI: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_KUKRI, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC); + + case BASE_ITEM_MORNINGSTAR: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MORNINGSTAR, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC); + + case BASE_ITEM_QUARTERSTAFF: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_QUARTERSTAFF, oPC) + ||GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oPC); + + case BASE_ITEM_MAGICSTAFF: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_QUARTERSTAFF, oPC) + ||GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oPC); + + case BASE_ITEM_RAPIER: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_RAPIER, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oPC); + + case BASE_ITEM_SCIMITAR: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SCIMITAR, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC); + + case BASE_ITEM_SCYTHE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SCYTHE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC); + + case BASE_ITEM_SHORTSPEAR: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SHORTSPEAR, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC); + + case BASE_ITEM_SHURIKEN: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SHURIKEN, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oPC); + + case BASE_ITEM_SICKLE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SICKLE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC); + + case BASE_ITEM_SLING: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SLING, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC); + + case BASE_ITEM_THROWINGAXE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_THROWING_AXE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) + || GetHasFeat(FEAT_MINDBLADE, oPC); + + case BASE_ITEM_CSLASHWEAPON: + case BASE_ITEM_CPIERCWEAPON: + case BASE_ITEM_CBLUDGWEAPON: + case BASE_ITEM_CSLSHPRCWEAP: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_CREATURE, oPC); + + case BASE_ITEM_TRIDENT: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_TRIDENT, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC); + + case BASE_ITEM_DOUBLE_SCIMITAR: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_DOUBLE_SCIMITAR, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC); + + case BASE_ITEM_FALCHION: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_FALCHION, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC); + + case BASE_ITEM_GOAD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_GOAD, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC); + + case BASE_ITEM_HEAVY_MACE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_HEAVY_MACE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC); + + case BASE_ITEM_HEAVY_PICK: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_HEAVY_PICK, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC); + + case BASE_ITEM_LIGHT_PICK: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_LIGHT_PICK, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC); + + case BASE_ITEM_KATAR: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_KATAR, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC); + + case BASE_ITEM_MAUL: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MAUL, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC); + + case BASE_ITEM_NUNCHAKU: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_NUNCHAKU, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC); + + case BASE_ITEM_SAI: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SAI, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC); + + case BASE_ITEM_SAP: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SAP, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC); + + //special case: counts as martial for dwarves + case BASE_ITEM_DWARVENWARAXE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_DWARVEN_WARAXE, oPC) + || (GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) && GetHasFeat(FEAT_DWARVEN, oPC)) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC); + + case BASE_ITEM_WHIP: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_WHIP, oPC) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC); + + case BASE_ITEM_ELVEN_LIGHTBLADE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC) + || (GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) && MyPRCGetRacialType(oPC) == RACIAL_TYPE_ELF) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELVEN_LIGHTBLADE, oPC); + + case BASE_ITEM_ELVEN_THINBLADE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC) + || (GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) && MyPRCGetRacialType(oPC) == RACIAL_TYPE_ELF) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELVEN_THINBLADE, oPC); + + case BASE_ITEM_ELVEN_COURTBLADE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC) + || (GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) && MyPRCGetRacialType(oPC) == RACIAL_TYPE_ELF) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELVEN_COURTBLADE, oPC); + + //special case: counts as martial for asherati + case BASE_ITEM_EAGLE_CLAW: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC) + || (GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oPC) && GetRacialType(oPC) == RACIAL_TYPE_ASHERATI) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EAGLE_CLAW, oPC); + } + + return TRUE; +} + +//gets the main weapon proficiency feat needed for a given weapon - mostly for Favored Soul +int GetWeaponProfFeatByType(int nBaseType) +{ + switch(nBaseType) + { + case BASE_ITEM_CLUB: + return FEAT_WEAPON_PROFICIENCY_CLUB; + + case BASE_ITEM_QUARTERSTAFF: + return FEAT_WEAPON_PROFICIENCY_QUARTERSTAFF; + + case BASE_ITEM_MAGICSTAFF: + return FEAT_WEAPON_PROFICIENCY_QUARTERSTAFF; + + case BASE_ITEM_DAGGER: + return FEAT_WEAPON_PROFICIENCY_DAGGER; + + case BASE_ITEM_HEAVYCROSSBOW: + return FEAT_WEAPON_PROFICIENCY_HEAVY_XBOW; + + case BASE_ITEM_LIGHTCROSSBOW: + return FEAT_WEAPON_PROFICIENCY_LIGHT_XBOW; + + case BASE_ITEM_SHORTSWORD: + return FEAT_WEAPON_PROFICIENCY_SHORTSWORD; + + case BASE_ITEM_LONGSWORD: + return FEAT_WEAPON_PROFICIENCY_LONGSWORD; + + case BASE_ITEM_BATTLEAXE: + return FEAT_WEAPON_PROFICIENCY_BATTLEAXE; + + case BASE_ITEM_BASTARDSWORD: + return FEAT_WEAPON_PROFICIENCY_BASTARD_SWORD; + + case BASE_ITEM_LIGHTFLAIL: + return FEAT_WEAPON_PROFICIENCY_LIGHT_FLAIL; + + case BASE_ITEM_WARHAMMER: + return FEAT_WEAPON_PROFICIENCY_WARHAMMER; + + case BASE_ITEM_LONGBOW: + return FEAT_WEAPON_PROFICIENCY_LONGBOW; + + case BASE_ITEM_LIGHTMACE: + return FEAT_WEAPON_PROFICIENCY_LIGHT_MACE; + + case BASE_ITEM_HALBERD: + return FEAT_WEAPON_PROFICIENCY_HALBERD; + + case BASE_ITEM_SHORTBOW: + return FEAT_WEAPON_PROFICIENCY_SHORTBOW; + + case BASE_ITEM_TWOBLADEDSWORD: + return FEAT_WEAPON_PROFICIENCY_TWO_BLADED_SWORD; + + case BASE_ITEM_GREATSWORD: + return FEAT_WEAPON_PROFICIENCY_GREATSWORD; + + case BASE_ITEM_GREATAXE: + return FEAT_WEAPON_PROFICIENCY_GREATAXE; + + case BASE_ITEM_DART: + return FEAT_WEAPON_PROFICIENCY_DART; + + case BASE_ITEM_DIREMACE: + return FEAT_WEAPON_PROFICIENCY_DIRE_MACE; + + case BASE_ITEM_DOUBLEAXE: + return FEAT_WEAPON_PROFICIENCY_DOUBLE_AXE; + + case BASE_ITEM_HEAVYFLAIL: + return FEAT_WEAPON_PROFICIENCY_HEAVY_FLAIL; + + case BASE_ITEM_LIGHTHAMMER: + return FEAT_WEAPON_PROFICIENCY_LIGHT_HAMMER; + + case BASE_ITEM_HANDAXE: + return FEAT_WEAPON_PROFICIENCY_HANDAXE; + + case BASE_ITEM_KAMA: + return FEAT_WEAPON_PROFICIENCY_KAMA; + + case BASE_ITEM_KATANA: + return FEAT_WEAPON_PROFICIENCY_KATANA; + + case BASE_ITEM_KUKRI: + return FEAT_WEAPON_PROFICIENCY_KUKRI; + + case BASE_ITEM_MORNINGSTAR: + return FEAT_WEAPON_PROFICIENCY_MORNINGSTAR; + + case BASE_ITEM_RAPIER: + return FEAT_WEAPON_PROFICIENCY_RAPIER; + + case BASE_ITEM_SCIMITAR: + return FEAT_WEAPON_PROFICIENCY_SCIMITAR; + + case BASE_ITEM_SCYTHE: + return FEAT_WEAPON_PROFICIENCY_SCYTHE; + + case BASE_ITEM_SHORTSPEAR: + return FEAT_WEAPON_PROFICIENCY_SHORTSPEAR; + + case BASE_ITEM_SHURIKEN: + return FEAT_WEAPON_PROFICIENCY_SHURIKEN; + + case BASE_ITEM_SICKLE: + return FEAT_WEAPON_PROFICIENCY_SICKLE; + + case BASE_ITEM_SLING: + return FEAT_WEAPON_PROFICIENCY_SLING; + + case BASE_ITEM_THROWINGAXE: + return FEAT_WEAPON_PROFICIENCY_THROWING_AXE; + + case BASE_ITEM_CSLASHWEAPON: + return FEAT_WEAPON_PROFICIENCY_CREATURE; + + case BASE_ITEM_CPIERCWEAPON: + return FEAT_WEAPON_PROFICIENCY_CREATURE; + + case BASE_ITEM_CBLUDGWEAPON: + return FEAT_WEAPON_PROFICIENCY_CREATURE; + + case BASE_ITEM_CSLSHPRCWEAP: + return FEAT_WEAPON_PROFICIENCY_CREATURE; + + case BASE_ITEM_TRIDENT: + return FEAT_WEAPON_PROFICIENCY_TRIDENT; + + case BASE_ITEM_DWARVENWARAXE: + return FEAT_WEAPON_PROFICIENCY_DWARVEN_WARAXE; + + case BASE_ITEM_WHIP: + return FEAT_WEAPON_PROFICIENCY_WHIP; + + case BASE_ITEM_ELVEN_LIGHTBLADE: + return FEAT_WEAPON_PROFICIENCY_ELVEN_LIGHTBLADE; + + case BASE_ITEM_ELVEN_THINBLADE: + return FEAT_WEAPON_PROFICIENCY_ELVEN_THINBLADE; + + case BASE_ITEM_ELVEN_COURTBLADE: + return FEAT_WEAPON_PROFICIENCY_ELVEN_COURTBLADE; + + case BASE_ITEM_HEAVY_PICK: + return FEAT_WEAPON_PROFICIENCY_HEAVY_PICK; + + case BASE_ITEM_LIGHT_PICK: + return FEAT_WEAPON_PROFICIENCY_LIGHT_PICK; + + case BASE_ITEM_SAI: + return FEAT_WEAPON_PROFICIENCY_SAI; + + case BASE_ITEM_NUNCHAKU: + return FEAT_WEAPON_PROFICIENCY_NUNCHAKU; + + case BASE_ITEM_FALCHION: + return FEAT_WEAPON_PROFICIENCY_FALCHION; + + case BASE_ITEM_SAP: + return FEAT_WEAPON_PROFICIENCY_SAP; + + case BASE_ITEM_KATAR: + return FEAT_WEAPON_PROFICIENCY_KATAR; + + case BASE_ITEM_HEAVY_MACE: + return FEAT_WEAPON_PROFICIENCY_HEAVY_MACE; + + case BASE_ITEM_MAUL: + return FEAT_WEAPON_PROFICIENCY_MAUL; + + case BASE_ITEM_DOUBLE_SCIMITAR: + return FEAT_WEAPON_PROFICIENCY_DOUBLE_SCIMITAR; + + case BASE_ITEM_GOAD: + return FEAT_WEAPON_PROFICIENCY_GOAD; + + case BASE_ITEM_EAGLE_CLAW: + return FEAT_WEAPON_PROFICIENCY_EAGLE_CLAW; + + default: + return FEAT_WEAPON_PROFICIENCY_SIMPLE; + } + + return 0; +} + +//resolves Weapon Prof feats to their ItemProp counterparts +int GetWeaponProfIPFeat(int nWeaponProfFeat) +{ + return nWeaponProfFeat - 3300; +} + +//:: Handles the feat emulation chain for Elven Lightblades +void DoEquipLightblade(object oPC, object oItem) +{ + effect eLightblade; + int bHasEffect; + + //:: Weapon Focus + if(GetHasFeat(FEAT_WEAPON_FOCUS_SHORT_SWORD, oPC) || GetHasFeat(FEAT_WEAPON_FOCUS_RAPIER, oPC)) + { + eLightblade = EffectBonusFeat(FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE); + bHasEffect = TRUE; + + //:: Epic Weapon Focus + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_SHORTSWORD, oPC) || GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_RAPIER, oPC)) + { + eLightblade = EffectLinkEffects(eLightblade, EffectBonusFeat(FEAT_EPIC_WEAPON_FOCUS_ELVEN_LIGHTBLADE)); + } + //:: Weapon Specialization + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SHORT_SWORD, oPC) || GetHasFeat(FEAT_WEAPON_SPECIALIZATION_RAPIER, oPC)) + { + eLightblade = EffectLinkEffects(eLightblade, EffectBonusFeat(FEAT_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE)); + + //:: Epic Weapon Specialization + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTSWORD, oPC) || GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_RAPIER, oPC)) + { + eLightblade = EffectLinkEffects(eLightblade, EffectBonusFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE)); + } + } + } + //:: Improved Critical + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_SHORT_SWORD, oPC) || GetHasFeat(FEAT_IMPROVED_CRITICAL_RAPIER, oPC)) + { + eLightblade = EffectLinkEffects(eLightblade, EffectBonusFeat(FEAT_IMPROVED_CRITICAL_ELVEN_LIGHTBLADE)); + bHasEffect = TRUE; + } + + if (bHasEffect) + { + eLightblade = TagEffect(eLightblade, "LIGHTBLADE_FEAT_EMULATATION"); + eLightblade = SupernaturalEffect(eLightblade); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLightblade, oPC); + } +} + +/* //handles the feat chain for Elven Lightblades +void DoEquipLightblade(object oPC, object oItem) +{ + if(DEBUG) DoDebug("Checking Lightblade feats"); // optimised as some feats are prereq for others + if(GetHasFeat(FEAT_WEAPON_FOCUS_SHORT_SWORD, oPC) || GetHasFeat(FEAT_WEAPON_FOCUS_RAPIER, oPC)) + { + SetCompositeAttackBonus(oPC, "LightbladeWF" + IntToString(nHand), 1, nHand); + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_SHORTSWORD, oPC) || GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_RAPIER, oPC)) + SetCompositeAttackBonus(oPC, "LightbladeEpicWF" + IntToString(nHand), 2, nHand); + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SHORT_SWORD, oPC) || GetHasFeat(FEAT_WEAPON_SPECIALIZATION_RAPIER, oPC)) + { + SetCompositeDamageBonusT(oItem, "LightbladeWS", 2); + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTSWORD, oPC) || GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_RAPIER, oPC)) + SetCompositeDamageBonusT(oItem, "LightbladeEpicWS", 4); + } + } + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_SHORT_SWORD, oPC) || GetHasFeat(FEAT_IMPROVED_CRITICAL_RAPIER, oPC)) + IPSafeAddItemProperty(oItem, ItemPropertyKeen(), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); +} + */ + +//:: Handles the feat emulation chain for Elven Thinblades +void DoEquipThinblade(object oPC, object oItem) +{ + effect eThinblade; + int bHasEffect; + + //:: Weapon Focus + if(GetHasFeat(FEAT_WEAPON_FOCUS_LONG_SWORD, oPC) || GetHasFeat(FEAT_WEAPON_FOCUS_RAPIER, oPC)) + { + eThinblade = EffectBonusFeat(FEAT_WEAPON_FOCUS_ELVEN_THINBLADE); + bHasEffect = TRUE; + + //:: Epic Weapon Focus + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_LONGSWORD, oPC) || GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_RAPIER, oPC)) + { + eThinblade = EffectLinkEffects(eThinblade, EffectBonusFeat(FEAT_EPIC_WEAPON_FOCUS_ELVEN_THINBLADE)); + } + //:: Weapon Specialization + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LONG_SWORD, oPC) || GetHasFeat(FEAT_WEAPON_SPECIALIZATION_RAPIER, oPC)) + { + eThinblade = EffectLinkEffects(eThinblade, EffectBonusFeat(FEAT_WEAPON_SPECIALIZATION_ELVEN_THINBLADE)); + + //:: Epic Weapon Specialization + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD, oPC) || GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_RAPIER, oPC)) + { + eThinblade = EffectLinkEffects(eThinblade, EffectBonusFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_THINBLADE)); + } + } + } + //:: Improved Critical + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_LONG_SWORD, oPC) || GetHasFeat(FEAT_IMPROVED_CRITICAL_RAPIER, oPC)) + { + eThinblade = EffectLinkEffects(eThinblade, EffectBonusFeat(FEAT_IMPROVED_CRITICAL_ELVEN_THINBLADE)); + bHasEffect = TRUE; + } + + if (bHasEffect) + { + eThinblade = TagEffect(eThinblade, "THINBLADE_FEAT_EMULATATION"); + eThinblade = SupernaturalEffect(eThinblade); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eThinblade, oPC); + } +} + +/* //handles the feat chain for Elven Thinblades +void DoEquipThinblade(object oPC, object oItem, int nHand) +{ + if(GetHasFeat(FEAT_WEAPON_FOCUS_LONG_SWORD, oPC) || GetHasFeat(FEAT_WEAPON_FOCUS_RAPIER, oPC)) + { + SetCompositeAttackBonus(oPC, "ThinbladeWF" + IntToString(nHand), 1, nHand); + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_LONGSWORD, oPC) || GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_RAPIER, oPC)) + SetCompositeAttackBonus(oPC, "ThinbladeEpicWF" + IntToString(nHand), 2, nHand); + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LONG_SWORD, oPC) || GetHasFeat(FEAT_WEAPON_SPECIALIZATION_RAPIER, oPC)) + { + SetCompositeDamageBonusT(oItem, "ThinbladeWS", 2); + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD, oPC) || GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_RAPIER, oPC)) + SetCompositeDamageBonusT(oItem, "ThinbladeEpicWS", 4); + } + } + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_LONG_SWORD, oPC) || GetHasFeat(FEAT_IMPROVED_CRITICAL_RAPIER, oPC)) + IPSafeAddItemProperty(oItem, ItemPropertyKeen(), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); +} */ + +//:: Handles the feat emulation chain for Elven Courtblades +void DoEquipCourtblade(object oPC, object oItem) +{ + effect eCourtblade; + int bHasEffect; + + //:: Weapon Focus + if(GetHasFeat(FEAT_WEAPON_FOCUS_GREAT_SWORD, oPC)) + { + eCourtblade = EffectBonusFeat(FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE); + bHasEffect = TRUE; + + //:: Epic Weapon Focus + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_GREATSWORD, oPC)) + { + eCourtblade = EffectLinkEffects(eCourtblade, EffectBonusFeat(FEAT_EPIC_WEAPON_FOCUS_ELVEN_COURTBLADE)); + } + //:: Weapon Specialization + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_GREAT_SWORD, oPC)) + { + eCourtblade = EffectLinkEffects(eCourtblade, EffectBonusFeat(FEAT_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE)); + + //:: Epic Weapon Specialization + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_GREATSWORD, oPC)) + { + eCourtblade = EffectLinkEffects(eCourtblade, EffectBonusFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE)); + } + } + } + //:: Improved Critical + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_GREAT_SWORD, oPC)) + { + eCourtblade = EffectLinkEffects(eCourtblade, EffectBonusFeat(FEAT_IMPROVED_CRITICAL_ELVEN_COURTBLADE)); + bHasEffect = TRUE; + } + + if (bHasEffect) + { + eCourtblade = TagEffect(eCourtblade, "COURTBLADE_FEAT_EMULATATION"); + eCourtblade = SupernaturalEffect(eCourtblade); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eCourtblade, oPC); + } +} + +/* void DoEquipCourtblade(object oPC, object oItem, int nHand) +{ + if(GetHasFeat(FEAT_WEAPON_FOCUS_GREAT_SWORD, oPC)) + { + SetCompositeAttackBonus(oPC, "CourtbladeWF" + IntToString(nHand), 1, nHand); + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_GREATSWORD, oPC)) + SetCompositeAttackBonus(oPC, "CourtbladeEpicWF" + IntToString(nHand), 2, nHand); + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_GREAT_SWORD, oPC)) + { + SetCompositeDamageBonusT(oItem, "CourtbladeWS", 2); + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_GREATSWORD, oPC)) + SetCompositeDamageBonusT(oItem, "CourtbladeEpicWS", 4); + } + } + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_GREAT_SWORD, oPC)) + IPSafeAddItemProperty(oItem, ItemPropertyKeen(), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); +} */ + +//clears any bonuses used to simulate feat chains on unequip +//:: None of this should be needed now -Jaysyn +void DoWeaponFeatUnequip(object oPC, object oItem, int nHand) +{ + // fluffyamoeba - going to assume redundant local var clearing isn't worth tradeoff + int nBaseType = GetBaseItemType(oItem); + if(nBaseType == BASE_ITEM_ELVEN_LIGHTBLADE) + { + if(DEBUG) DoDebug("Clearing Lightblade variables."); + SetCompositeAttackBonus(oPC, "LightbladeWF" + IntToString(nHand), 0, nHand); + SetCompositeAttackBonus(oPC, "LightbladeEpicWF" + IntToString(nHand), 0, nHand); + SetCompositeDamageBonusT(oItem, "LightbladeWS", 0); + SetCompositeDamageBonusT(oItem, "LightbladeEpicWS", 0); + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_SHORT_SWORD, oPC) || GetHasFeat(FEAT_IMPROVED_CRITICAL_RAPIER, oPC)) + RemoveSpecificProperty(oItem, ITEM_PROPERTY_KEEN, -1, -1, 1, "", -1, DURATION_TYPE_TEMPORARY); + } + else if(nBaseType == BASE_ITEM_ELVEN_THINBLADE) + { + SetCompositeAttackBonus(oPC, "ThinbladeWF" + IntToString(nHand), 0, nHand); + SetCompositeAttackBonus(oPC, "ThinbladeEpicWF" + IntToString(nHand), 0, nHand); + SetCompositeDamageBonusT(oItem, "ThinbladeWS", 0); + SetCompositeDamageBonusT(oItem, "ThinbladeEpicWS", 0); + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_LONG_SWORD, oPC) || GetHasFeat(FEAT_IMPROVED_CRITICAL_RAPIER, oPC)) + RemoveSpecificProperty(oItem, ITEM_PROPERTY_KEEN, -1, -1, 1, "", -1, DURATION_TYPE_TEMPORARY); + } + else if(nBaseType == BASE_ITEM_ELVEN_COURTBLADE) + { + SetCompositeAttackBonus(oPC, "CourtbladeWF" + IntToString(nHand), 0, nHand); + SetCompositeAttackBonus(oPC, "CourtbladeEpicWF" + IntToString(nHand), 0, nHand); + SetCompositeDamageBonusT(oItem, "CourtbladeWS", 0); + SetCompositeDamageBonusT(oItem, "CourtbladeEpicWS", 0); + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_GREAT_SWORD, oPC)) + RemoveSpecificProperty(oItem, ITEM_PROPERTY_KEEN, -1, -1, 1, "", -1, DURATION_TYPE_TEMPORARY); + } +} + +int IsMeleeWeapon(int nBaseItemType) +{ + // Reject invalid base item values. + if (nBaseItemType == BASE_ITEM_INVALID) + { + return FALSE; + } + + // Only want melee weapons, exclude all others. + switch (nBaseItemType) + { + case BASE_ITEM_ALCHEMY: + case BASE_ITEM_AMULET: + case BASE_ITEM_ARMOR: + case BASE_ITEM_ARROW: + case BASE_ITEM_BELT: + case BASE_ITEM_BLANK_POTION: + case BASE_ITEM_BLANK_SCROLL: + case BASE_ITEM_BLANK_WAND: + case BASE_ITEM_BOLT: + case BASE_ITEM_BOOK: + case BASE_ITEM_BOOTS: + case BASE_ITEM_BRACER: + case BASE_ITEM_BULLET: + case BASE_ITEM_CLOAK: + case BASE_ITEM_CRAFTED_ROD: + case BASE_ITEM_CRAFTED_STAFF: + case BASE_ITEM_CRAFTMATERIALMED: + case BASE_ITEM_CRAFTMATERIALSML: + case BASE_ITEM_CREATUREITEM: + case BASE_ITEM_ENCHANTED_POTION: + case BASE_ITEM_ENCHANTED_SCROLL: + case BASE_ITEM_ENCHANTED_WAND: + case BASE_ITEM_GEM: + case BASE_ITEM_GLOVES: + case BASE_ITEM_GOLD: + case BASE_ITEM_GOLEM: + case BASE_ITEM_GRENADE: + case BASE_ITEM_HEALERSKIT: + case BASE_ITEM_HEAVYCROSSBOW: + case BASE_ITEM_HELMET: + case BASE_ITEM_KEY: + case BASE_ITEM_LARGEBOX: + case BASE_ITEM_LARGESHIELD: + case BASE_ITEM_LIGHTCROSSBOW: + case BASE_ITEM_LONGBOW: + case BASE_ITEM_MAGICROD: + case BASE_ITEM_MAGICSTAFF: + case BASE_ITEM_MAGICWAND: + case BASE_ITEM_MISCLARGE: + case BASE_ITEM_MISCMEDIUM: + case BASE_ITEM_MISCSMALL: + case BASE_ITEM_MISCTALL: + case BASE_ITEM_MISCTHIN: + case BASE_ITEM_MISCWIDE: + case BASE_ITEM_POISON: + case BASE_ITEM_POTIONS: + case BASE_ITEM_RING: + case BASE_ITEM_SCROLL: + case BASE_ITEM_SHORTBOW: + case BASE_ITEM_SHURIKEN: + case BASE_ITEM_SLING: + case BASE_ITEM_SMALLSHIELD: + case BASE_ITEM_SPELLSCROLL: + case BASE_ITEM_THIEVESTOOLS: + case BASE_ITEM_THROWINGAXE: + case BASE_ITEM_TORCH: + case BASE_ITEM_TOWERSHIELD: + case BASE_ITEM_TRAPKIT: + return FALSE; + } + + // Everything else assumed to be melee weapon. + return TRUE; +} + +int IsWeaponMartial(int nBaseItemType, object oPC) +{ + switch(nBaseItemType) + { + case BASE_ITEM_SHORTSWORD: + case BASE_ITEM_LONGSWORD: + case BASE_ITEM_BATTLEAXE: + case BASE_ITEM_LIGHTFLAIL: + case BASE_ITEM_WARHAMMER: + case BASE_ITEM_LONGBOW: + case BASE_ITEM_HALBERD: + case BASE_ITEM_SHORTBOW: + case BASE_ITEM_GREATSWORD: + case BASE_ITEM_GREATAXE: + case BASE_ITEM_HEAVYFLAIL: + case BASE_ITEM_LIGHTHAMMER: + case BASE_ITEM_HANDAXE: + case BASE_ITEM_RAPIER: + case BASE_ITEM_SCIMITAR: + case BASE_ITEM_TRIDENT: + case BASE_ITEM_THROWINGAXE: + case BASE_ITEM_SCYTHE: + case BASE_ITEM_SAP: + case BASE_ITEM_MAUL: + case BASE_ITEM_FALCHION: + case BASE_ITEM_HEAVY_PICK: + case BASE_ITEM_LIGHT_PICK: + case BASE_ITEM_LIGHT_LANCE: + return TRUE; + + //special case: counts as martial for dwarves + case BASE_ITEM_DWARVENWARAXE: + if(GetHasFeat(FEAT_DWARVEN, oPC)) + return TRUE; + + //special case: counts as martial for asherati + case BASE_ITEM_EAGLE_CLAW: + if(GetRacialType(oPC) == RACIAL_TYPE_ASHERATI) + return TRUE; + + + default: + return FALSE; + } + return FALSE; +} + +int IsWeaponExotic(int nBaseItemType) +{ + switch(nBaseItemType) + { + case BASE_ITEM_BASTARDSWORD: + case BASE_ITEM_TWOBLADEDSWORD: + case BASE_ITEM_DIREMACE: + case BASE_ITEM_DOUBLEAXE: + case BASE_ITEM_KAMA: + case BASE_ITEM_KATANA: + case BASE_ITEM_KUKRI: + case BASE_ITEM_SHURIKEN: + case BASE_ITEM_DWARVENWARAXE: + case BASE_ITEM_WHIP: + case BASE_ITEM_ELVEN_LIGHTBLADE: + case BASE_ITEM_ELVEN_COURTBLADE: + case BASE_ITEM_ELVEN_THINBLADE: + case BASE_ITEM_SAI: + case BASE_ITEM_NUNCHAKU: + case BASE_ITEM_DOUBLE_SCIMITAR: + case BASE_ITEM_EAGLE_CLAW: + return TRUE; + } + + return FALSE; +} + +//checks to see if the PC can wield the weapon. If not, applies a -4 penalty. +void DoProficiencyCheck(object oPC, object oItem, int nHand) +{ + int bProficient = FALSE; + int nBase = GetBaseItemType(oItem); + + bProficient = IsProficient(oPC, nBase); + if (!bProficient) + { + if (nHand == ATTACK_BONUS_ONHAND) + { + SetCompositeAttackBonus(oPC, "Unproficient" + IntToString(ATTACK_BONUS_ONHAND), -4, ATTACK_BONUS_ONHAND); + } + if (nHand == ATTACK_BONUS_OFFHAND) + { + SetCompositeAttackBonus(oPC, "Unproficient" + IntToString(ATTACK_BONUS_OFFHAND), -4, ATTACK_BONUS_OFFHAND); + } + + // Handle specific double-sided weapon logic + if (nBase == BASE_ITEM_DOUBLEAXE || nBase == BASE_ITEM_TWOBLADEDSWORD || nBase == BASE_ITEM_DIREMACE || nBase == BASE_ITEM_DOUBLE_SCIMITAR) + { // This should only affect offhand if the main hand is these types + SetCompositeAttackBonus(oPC, "Unproficient" + IntToString(ATTACK_BONUS_OFFHAND), -4, ATTACK_BONUS_OFFHAND); + } + } + else + { + SetCompositeAttackBonus(oPC, "Unproficient" + IntToString(ATTACK_BONUS_ONHAND), 0, ATTACK_BONUS_ONHAND); + SetCompositeAttackBonus(oPC, "Unproficient" + IntToString(ATTACK_BONUS_OFFHAND), 0, ATTACK_BONUS_OFFHAND); + } + +} + +//checks to see if the PC can wield the weapon. If not, applies a -4 penalty. +/* void DoProficiencyCheck(object oPC, object oItem, int nHand) +{ + int bProficient = FALSE; + + int nBase = GetBaseItemType(oItem); + bProficient = IsProficient(oPC, nBase); + + // Warlock special code + if (GetTag(oItem) == "prc_eldrtch_glv") + bProficient = TRUE; + // Incarnate Weapon + if (GetTag(oItem) == "moi_incarnatewpn") + bProficient = TRUE; + // Skarn Spine + if (GetTag(oItem) == "skarn_spine") + bProficient = TRUE; + + if(!bProficient) + { + if (DEBUG) DoDebug(GetName(oPC)+" is non-proficient with "+GetName(oItem)); + SetCompositeAttackBonus(oPC, "Unproficient" + IntToString(nHand), -4, ATTACK_BONUS_ONHAND); + if(nBase == BASE_ITEM_DOUBLEAXE || nBase == BASE_ITEM_TWOBLADEDSWORD || nBase == BASE_ITEM_DIREMACE || nBase == BASE_ITEM_DOUBLE_SCIMITAR) + SetCompositeAttackBonus(oPC, "Unproficient" + IntToString(ATTACK_BONUS_OFFHAND), -4, ATTACK_BONUS_OFFHAND); + } + else + { + SetCompositeAttackBonus(oPC, "Unproficient" + IntToString(nHand), 0, ATTACK_BONUS_ONHAND); + if(nBase == BASE_ITEM_DOUBLEAXE || nBase == BASE_ITEM_TWOBLADEDSWORD || nBase == BASE_ITEM_DIREMACE || nBase == BASE_ITEM_DOUBLE_SCIMITAR) + SetCompositeAttackBonus(oPC, "Unproficient" + IntToString(ATTACK_BONUS_OFFHAND), 0, ATTACK_BONUS_OFFHAND); + } +} + */ + +void DoWeaponEquip(object oPC, object oItem, int nHand) +{ + if(GetIsDM(oPC) || !GetIsWeapon(oItem)) return; + + if(GetTag(oItem) == "prc_eldrtch_glv") return; + if(GetTag(oItem) == "PRC_PYRO_LASH_WHIP") return; + + //initialize variables + int nRealSize = PRCGetCreatureSize(oPC); //size for Finesse/TWF + int nSize = nRealSize; //size for equipment restrictions + int nWeaponSize = GetWeaponSize(oItem); + int nStrMod = GetAbilityModifier(ABILITY_STRENGTH, oPC); + int nElfFinesse = GetAbilityModifier(ABILITY_DEXTERITY, oPC) - nStrMod; + int nTHFDmgBonus = nStrMod / 2; + int nBaseType = GetBaseItemType(oItem); + + //Powerful Build bonus + if(GetHasFeat(FEAT_RACE_POWERFUL_BUILD, oPC)) + nSize++; + //Monkey Grip + if(GetHasFeat(FEAT_MONKEY_GRIP, oPC)) + { + nSize++; + // If you try and use the big weapons + if (nWeaponSize > nRealSize) + { + SetCompositeAttackBonus(oPC, "MonkeyGripL", -2, ATTACK_BONUS_OFFHAND); + SetCompositeAttackBonus(oPC, "MonkeyGripR", -2, ATTACK_BONUS_ONHAND); + } + else + { + SetCompositeAttackBonus(oPC, "MonkeyGripL", 0, ATTACK_BONUS_OFFHAND); + SetCompositeAttackBonus(oPC, "MonkeyGripR", 0, ATTACK_BONUS_ONHAND); + } + + } + + if(DEBUG) DoDebug("prc_inc_wpnrest - Weapon size: " + IntToString(nWeaponSize)); + if(DEBUG) DoDebug("prc_inc_wpnrest - Character Size: " + IntToString(nSize)); + + //check to make sure it's not too large, or that you're not trying to TWF with 2-handers + if((nWeaponSize > 1 + nSize && nHand == ATTACK_BONUS_ONHAND) + || ((nWeaponSize > nSize || GetWeaponSize(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) > nSize) && nHand == ATTACK_BONUS_OFFHAND)) + { + if(DEBUG) DoDebug("prc_inc_wpnrest: Forcing unequip due to size"); + if(nHand == ATTACK_BONUS_OFFHAND) + nHand = INVENTORY_SLOT_LEFTHAND; + else + nHand = INVENTORY_SLOT_RIGHTHAND; + // Force unequip + ForceUnequip(oPC, oItem, nHand); + } + +//:: Oversized TWF +//:: Check if the player is a Ranger, wearing medium/heavy armor, and does not have Two-Weapon Fighting feat + int bIsRestricted = FALSE; + + // Check if the player has levels in the Ranger class + if (GetLevelByClass(CLASS_TYPE_RANGER, oPC) > 0) + { + // Check if the player is wearing medium or heavy armor + int nArmorType = GetArmorType(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC)); + if (nArmorType == ARMOR_TYPE_MEDIUM || nArmorType == ARMOR_TYPE_HEAVY) + { + // Check if the player does not have the Two-Weapon Fighting feat + if (!GetHasFeat(FEAT_TWO_WEAPON_FIGHTING, oPC)) + { + // Set the restricted flag to TRUE if all conditions are met + bIsRestricted = TRUE; + } + } + } + //:: Proceed with OSTWF bonuses if the restrictions are not met + if (!bIsRestricted) + { + if (GetHasFeat(FEAT_OTWF, oPC)) + { + // When wielding a one-handed weapon in your off hand, you take penalties for fighting with two weapons as if you were wielding a light weapon in your off hand + if (nWeaponSize == nRealSize && nHand == ATTACK_BONUS_OFFHAND) + { + SetCompositeAttackBonus(oPC, "OTWFL", 2, ATTACK_BONUS_OFFHAND); + SetCompositeAttackBonus(oPC, "OTWFR", 2, ATTACK_BONUS_ONHAND); + } + else + { + SetCompositeAttackBonus(oPC, "OTWFL", 0, ATTACK_BONUS_OFFHAND); + SetCompositeAttackBonus(oPC, "OTWFR", 0, ATTACK_BONUS_ONHAND); + } + + } + } + + //check for proficiency + DoProficiencyCheck(oPC, oItem, nHand); + +//:: This is no longer needed with NWN:EE - Jaysyn +/* //simulate Weapon Finesse for Elven *blades + if((nBaseType == BASE_ITEM_ELVEN_LIGHTBLADE || nBaseType == BASE_ITEM_ELVEN_THINBLADE + || nBaseType == BASE_ITEM_ELVEN_COURTBLADE) && GetHasFeat(FEAT_WEAPON_FINESSE, oPC) && nElfFinesse > 0) + { + if(nHand == ATTACK_BONUS_ONHAND) + SetCompositeAttackBonus(oPC, "ElfFinesseRH", nElfFinesse, nHand); + else if(nHand == ATTACK_BONUS_OFFHAND) + SetCompositeAttackBonus(oPC, "ElfFinesseLH", nElfFinesse, nHand); + } */ + //Two-hand damage bonus + if(!GetWeaponRanged(oItem) && PRCLargeWeaponCheck(nBaseType, nWeaponSize) + && (nWeaponSize == nSize + 1 || (nWeaponSize == nRealSize + 1 && GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC) == OBJECT_INVALID) && nRealSize > CREATURE_SIZE_SMALL)) + { + if(DEBUG) DoDebug("prc_inc_wpnrest - Two-hand Damage Bonus (Before Enhancement): " + IntToString(nTHFDmgBonus)); + nTHFDmgBonus += IPGetWeaponEnhancementBonus(oItem, ITEM_PROPERTY_ENHANCEMENT_BONUS, FALSE);//include temp effects here + if(DEBUG) DoDebug("prc_inc_wpnrest - Two-hand Damage Bonus: " + IntToString(nTHFDmgBonus)); + SetCompositeDamageBonusT(oItem, "THFBonus", nTHFDmgBonus); + } + + //if a 2-hander, then unequip shield/offhand weapon + if(nWeaponSize == 1 + nSize && nHand == ATTACK_BONUS_ONHAND) + // Force unequip + ForceUnequip(oPC, GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC), INVENTORY_SLOT_LEFTHAND); + + //apply TWF penalty if a one-handed, not light weapon in offhand - -4/-4 etc isntead of -2/-2 + //Does not apply to small races due to weapon size-up. Stupid size equip hardcoded restrictions. + if(nWeaponSize == nRealSize && nHand == ATTACK_BONUS_OFFHAND && nRealSize > CREATURE_SIZE_MEDIUM) + { + // Assign penalty + if(DEBUG) DoDebug("prc_inc_wpnrest - OTWFPenalty: " + IntToString(-2)); + SetCompositeAttackBonus(oPC, "OTWFPenalty", -2); + } + else + { + SetCompositeAttackBonus(oPC, "OTWFPenalty", 0); + } + + + //:: Handle feat emulation Elven Blades + if(nBaseType == BASE_ITEM_ELVEN_LIGHTBLADE) + DoEquipLightblade(oPC, oItem); + else if(nBaseType == BASE_ITEM_ELVEN_THINBLADE) + DoEquipThinblade(oPC, oItem); + else if(nBaseType == BASE_ITEM_ELVEN_COURTBLADE) + DoEquipCourtblade(oPC, oItem); + + DoRacialEquip(oPC, nBaseType); +} + +void DoWeaponsEquip(object oPC) +{ + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + DelayCommand(0.2, DoWeaponEquip(oPC, oWeapon, ATTACK_BONUS_ONHAND)); + oWeapon = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC); + DelayCommand(0.2, DoWeaponEquip(oPC, oWeapon, ATTACK_BONUS_OFFHAND)); +} + +void DoRacialEquip(object oPC, int nBaseType) +{ + if(GetRacialType(oPC) == RACIAL_TYPE_NEANDERTHAL) + { + if (nBaseType == BASE_ITEM_CLUB || + nBaseType == BASE_ITEM_SHORTSPEAR || + nBaseType == BASE_ITEM_QUARTERSTAFF || + nBaseType == BASE_ITEM_SHORTBOW || + nBaseType == BASE_ITEM_SLING || + nBaseType == BASE_ITEM_THROWINGAXE) + { + SetCompositeAttackBonus(oPC, "PrimitiveWeapon", 1); + } + else + SetCompositeAttackBonus(oPC, "PrimitiveWeapon", 0); + } +} + +//:: void main (){} \ No newline at end of file diff --git a/src/include/prc_ip_srcost.nss b/src/include/prc_ip_srcost.nss new file mode 100644 index 0000000..f166843 --- /dev/null +++ b/src/include/prc_ip_srcost.nss @@ -0,0 +1,49 @@ +const int IP_CONST_SPELLRESISTANCEBONUS_34 = 12; +const int IP_CONST_SPELLRESISTANCEBONUS_36 = 13; +const int IP_CONST_SPELLRESISTANCEBONUS_38 = 14; +const int IP_CONST_SPELLRESISTANCEBONUS_40 = 15; +const int IP_CONST_SPELLRESISTANCEBONUS_42 = 16; +const int IP_CONST_SPELLRESISTANCEBONUS_44 = 17; +const int IP_CONST_SPELLRESISTANCEBONUS_46 = 18; +const int IP_CONST_SPELLRESISTANCEBONUS_48 = 19; +const int IP_CONST_SPELLRESISTANCEBONUS_50 = 20; +const int IP_CONST_SPELLRESISTANCEBONUS_52 = 21; +const int IP_CONST_SPELLRESISTANCEBONUS_54 = 22; +const int IP_CONST_SPELLRESISTANCEBONUS_56 = 23; +const int IP_CONST_SPELLRESISTANCEBONUS_58 = 24; +const int IP_CONST_SPELLRESISTANCEBONUS_60 = 25; +const int IP_CONST_SPELLRESISTANCEBONUS_11 = 26; +const int IP_CONST_SPELLRESISTANCEBONUS_13 = 27; +const int IP_CONST_SPELLRESISTANCEBONUS_15 = 28; +const int IP_CONST_SPELLRESISTANCEBONUS_17 = 29; +const int IP_CONST_SPELLRESISTANCEBONUS_19 = 30; +const int IP_CONST_SPELLRESISTANCEBONUS_21 = 31; +const int IP_CONST_SPELLRESISTANCEBONUS_23 = 32; +const int IP_CONST_SPELLRESISTANCEBONUS_25 = 33; +const int IP_CONST_SPELLRESISTANCEBONUS_27 = 34; +const int IP_CONST_SPELLRESISTANCEBONUS_29 = 35; +const int IP_CONST_SPELLRESISTANCEBONUS_31 = 36; +const int IP_CONST_SPELLRESISTANCEBONUS_33 = 37; +const int IP_CONST_SPELLRESISTANCEBONUS_35 = 38; +const int IP_CONST_SPELLRESISTANCEBONUS_37 = 39; +const int IP_CONST_SPELLRESISTANCEBONUS_39 = 40; +const int IP_CONST_SPELLRESISTANCEBONUS_41 = 41; +const int IP_CONST_SPELLRESISTANCEBONUS_43 = 42; +const int IP_CONST_SPELLRESISTANCEBONUS_45 = 43; +const int IP_CONST_SPELLRESISTANCEBONUS_47 = 44; +const int IP_CONST_SPELLRESISTANCEBONUS_49 = 45; +const int IP_CONST_SPELLRESISTANCEBONUS_51 = 46; +const int IP_CONST_SPELLRESISTANCEBONUS_53 = 47; +const int IP_CONST_SPELLRESISTANCEBONUS_55 = 48; +const int IP_CONST_SPELLRESISTANCEBONUS_57 = 49; +const int IP_CONST_SPELLRESISTANCEBONUS_59 = 50; +const int IP_CONST_SPELLRESISTANCEBONUS_61 = 51; +const int IP_CONST_SPELLRESISTANCEBONUS_1 = 52; +const int IP_CONST_SPELLRESISTANCEBONUS_2 = 53; +const int IP_CONST_SPELLRESISTANCEBONUS_3 = 54; +const int IP_CONST_SPELLRESISTANCEBONUS_4 = 55; +const int IP_CONST_SPELLRESISTANCEBONUS_5 = 56; +const int IP_CONST_SPELLRESISTANCEBONUS_6 = 57; +const int IP_CONST_SPELLRESISTANCEBONUS_7 = 58; +const int IP_CONST_SPELLRESISTANCEBONUS_8 = 59; +const int IP_CONST_SPELLRESISTANCEBONUS_9 = 60; diff --git a/src/include/prc_ipfeat_const.nss b/src/include/prc_ipfeat_const.nss new file mode 100644 index 0000000..a1829be --- /dev/null +++ b/src/include/prc_ipfeat_const.nss @@ -0,0 +1,1600 @@ + +//const int FEAT_WEAPON_FOCUS_WHIP = 993; +//const int FEAT_IMPROVED_CRITICAL_WHIP = 995; + +//::: iprp_feats + +const int IP_CONST_FEAT_IMPROVED_CRITICAL_UNARMED = 20; +const int IP_CONST_FEAT_WEAPON_FINESSE = 95; +const int IP_CONST_FEAT_TRACK = 94; +const int IP_CONST_FEAT_IMPROVED_UNARMED_STRIKE = 93; +const int IP_CONST_FEAT_TRAPFINDING = 392; +const int IP_CONST_FEAT_DEFLECT_ARROWS = 92; +const int IP_CONST_FEAT_AWESOME_BLOW = 571; +const int IP_CONST_FEAT_PRC_ATTACK = 572; +const int IP_CONST_FEAT_BANE_MAGIC_DRAGON = 91; +const int IP_CONST_FEAT_BONES_EARTH = 90; +const int IP_CONST_FEAT_BREATHLESS = 574; +const int IP_CONST_FEAT_IMPROVED_BULL_RUSH = 89; +const int IP_CONST_FEAT_WATER_BREATHING = 575; +const int IP_CONST_FEAT_TURN_UNDEAD = 88; +const int IP_CONST_FEAT_THUG = 576; +const int IP_CONST_FEAT_MOUNTED_COMBAT = 577; +const int IP_CONST_FEAT_MOUNTED_ARCHERY = 578; +const int IP_CONST_FEAT_PRC_DEATH_ATTACK = 579; +const int IP_CONST_FEAT_RAGE = 87; +const int IP_CONST_FEAT_BLINDSIGHT_60_FT = 4670; +const int IP_CONST_FEAT_DAYLIGHTADAPT = 581; + +//:: Crafting feats +const int IP_FEAT_FEAT_SCRIBE_SCROLL = 4340; +const int IP_FEAT_FEAT_BREW_POTION = 4339; +const int IP_FEAT_FEAT_CRAFT_WONDROUS = 4342; +const int IP_FEAT_FEAT_CRAFT_ARMS_ARMOR = 4343; +const int IP_FEAT_FEAT_CRAFT_WAND = 4341; +const int IP_FEAT_FEAT_CRAFT_ROD = 4344; +const int IP_FEAT_FEAT_CRAFT_STAFF = 4345; +const int IP_FEAT_FEAT_FORGE_RING = 4346; + +//:: Sneak Attacks +const int IP_CONST_FEAT_ROGUE_SA_1D6 = 32; +const int IP_CONST_FEAT_ROGUE_SA_2D6 = 33; +const int IP_CONST_FEAT_ROGUE_SA_3D6 = 34; +const int IP_CONST_FEAT_ROGUE_SA_4D6 = 301; +const int IP_CONST_FEAT_ROGUE_SA_5D6 = 39; +const int IP_CONST_FEAT_ROGUE_SA_6D6 = 302; +const int IP_CONST_FEAT_ROGUE_SA_7D6 = 303; +const int IP_CONST_FEAT_ROGUE_SA_8D6 = 304; +const int IP_CONST_FEAT_ROGUE_SA_9D6 = 305; +const int IP_CONST_FEAT_ROGUE_SA_10D6 = 306; +const int IP_CONST_FEAT_ROGUE_SA_11D6 = 307; +const int IP_CONST_FEAT_ROGUE_SA_12D6 = 308; +const int IP_CONST_FEAT_ROGUE_SA_13D6 = 309; +const int IP_CONST_FEAT_ROGUE_SA_14D6 = 310; +const int IP_CONST_FEAT_ROGUE_SA_15D6 = 311; +const int IP_CONST_FEAT_ROGUE_SA_16D6 = 312; +const int IP_CONST_FEAT_ROGUE_SA_17D6 = 313; +const int IP_CONST_FEAT_ROGUE_SA_18D6 = 314; +const int IP_CONST_FEAT_ROGUE_SA_19D6 = 315; +const int IP_CONST_FEAT_ROGUE_SA_20D6 = 316; + +const int IP_CONST_FEAT_BG_SA_1D6 = 276; +const int IP_CONST_FEAT_BG_SA_2D6 = 277; +const int IP_CONST_FEAT_BG_SA_3D6 = 278; +const int IP_CONST_FEAT_BG_SA_4D6 = 279; +const int IP_CONST_FEAT_BG_SA_5D6 = 280; +const int IP_CONST_FEAT_BG_SA_6D6 = 281; +const int IP_CONST_FEAT_BG_SA_7D6 = 282; +const int IP_CONST_FEAT_BG_SA_8D6 = 283; +const int IP_CONST_FEAT_BG_SA_9D6 = 284; +const int IP_CONST_FEAT_BG_SA_10D6 = 285; +const int IP_CONST_FEAT_BG_SA_11D6 = 286; +const int IP_CONST_FEAT_BG_SA_12D6 = 287; +const int IP_CONST_FEAT_BG_SA_13D6 = 288; +const int IP_CONST_FEAT_BG_SA_14D6 = 289; +const int IP_CONST_FEAT_BG_SA_15D6 = 290; + +const int IP_CONST_FEAT_EPIC_SA_1D6 = 291; +const int IP_CONST_FEAT_EPIC_SA_2D6 = 292; +const int IP_CONST_FEAT_EPIC_SA_3D6 = 293; +const int IP_CONST_FEAT_EPIC_SA_4D6 = 294; +const int IP_CONST_FEAT_EPIC_SA_5D6 = 295; +const int IP_CONST_FEAT_EPIC_SA_6D6 = 296; +const int IP_CONST_FEAT_EPIC_SA_7D6 = 297; +const int IP_CONST_FEAT_EPIC_SA_8D6 = 298; +const int IP_CONST_FEAT_EPIC_SA_9D6 = 299; +const int IP_CONST_FEAT_EPIC_SA_10D6 = 300; + +const int IP_CONST_FEAT_DEATHATTACK = 317; +const int IP_CONST_FEAT_DEATHATTACK2 = 318; +const int IP_CONST_FEAT_DEATHATTACK3 = 319; +const int IP_CONST_FEAT_DEATHATTACK4 = 320; +const int IP_CONST_FEAT_DEATHATTACK5 = 321; +const int IP_CONST_FEAT_DEATHATTACK6 = 322; +const int IP_CONST_FEAT_DEATHATTACK7 = 323; +const int IP_CONST_FEAT_DEATHATTACK8 = 324; +const int IP_CONST_FEAT_DEATHATTACK9 = 325; +const int IP_CONST_FEAT_DEATHATTACK10 = 326; +const int IP_CONST_FEAT_DEATHATTACK11 = 327; +const int IP_CONST_FEAT_DEATHATTACK12 = 328; +const int IP_CONST_FEAT_DEATHATTACK13 = 329; +const int IP_CONST_FEAT_DEATHATTACK14 = 330; +const int IP_CONST_FEAT_DEATHATTACK15 = 331; +const int IP_CONST_FEAT_DEATHATTACK16 = 332; +const int IP_CONST_FEAT_DEATHATTACK17 = 333; +const int IP_CONST_FEAT_DEATHATTACK18 = 334; +const int IP_CONST_FEAT_DEATHATTACK19 = 335; +const int IP_CONST_FEAT_DEATHATTACK20 = 336; + +const int IP_CONST_FEAT_BarbEndurance = 337; +const int IP_CONST_FEAT_WeapFocCreature = 338; +const int IP_CONST_FEAT_ImpCritCreature = 339; +const int IP_CONST_FEAT_WeapSpecCreature = 340; +const int IP_CONST_FEAT_WeapEpicFocCreature = 341; +const int IP_CONST_FEAT_WeapEpicSpecCreature = 342; + +const int IP_CONST_FEAT_IMPROVED_CRITICAL_DAGGER = 343; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_DART = 344; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_HEAVY_CROSSBOW = 345; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_LIGHT_CROSSBOW = 346; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_LIGHT_MACE = 347; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_MORNING_STAR = 348; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_STAFF = 349; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_SPEAR = 350; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_SICKLE = 351; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_SLING = 352; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_LONGBOW = 353; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_SHORTBOW = 354; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_SHORT_SWORD = 355; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_RAPIER = 356; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_SCIMITAR = 357; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_LONG_SWORD = 358; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_GREAT_SWORD = 359; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_HAND_AXE = 360; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_THROWING_AXE = 361; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_BATTLE_AXE = 362; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_GREAT_AXE = 363; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_HALBERD = 364; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_LIGHT_HAMMER = 365; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_LIGHT_FLAIL = 366; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_WAR_HAMMER = 367; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_HEAVY_FLAIL = 368; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_KAMA = 369; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_KUKRI = 370; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_SHURIKEN = 371; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_SCYTHE = 372; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_KATANA = 373; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_BASTARD_SWORD = 374; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_DIRE_MACE = 375; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_DOUBLE_AXE = 376; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_TWO_BLADED_SWORD = 377; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_CLUB = 378; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_DWAXE = 379; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_WHIP = 380; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_MINDBLADE = 388; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_LIGHT_LANCE = 15927; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_HEAVY_PICK = 15928; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_LIGHT_PICK = 15929; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_SAI = 15930; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_NUNCHAKU = 15931; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_FALCHION = 15932; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_SAP = 15933; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_KATAR = 15934; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_HEAVY_MACE = 15935; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_MAUL = 15936; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_DBL_SCIMITAR = 15937; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_GOAD = 15938; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_ELVEN_LIGHTBLADE = 15979; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_ELVEN_THINBLADE = 15987; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_ELVEN_COURTBLADE = 15995; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_EAGLE_CLAW = 15876; +const int IP_CONST_FEAT_IMPROVED_CRITICAL_TRIDENT = 15877; + + +const int IP_CONST_FEAT_SF_CODE = 381; +const int IP_CONST_FEAT_UNCANNY_DODGE1 = 382; +const int IP_CONST_FEAT_LOWLIGHT_VISION = 383; +const int IP_CONST_FEAT_NEW_PWATK = 384; +const int IP_CONST_FEAT_NEW_IPWATK = 385; +const int IP_CONST_FEAT_DARKVISION = 391; + +const int IP_CONST_FEAT_EPIC_AUTO_STILL_I = 204; +const int IP_CONST_FEAT_EPIC_AUTO_STILL_II = 205; +const int IP_CONST_FEAT_EPIC_AUTO_STILL_III = 206; +const int IP_CONST_FEAT_EPIC_AUTO_QUICKEN_I = 207; +const int IP_CONST_FEAT_EPIC_AUTO_QUICKEN_II = 208; +const int IP_CONST_FEAT_EPIC_AUTO_QUICKEN_III = 209; +const int IP_CONST_FEAT_EPIC_AUTO_SILENT_I = 210; +const int IP_CONST_FEAT_EPIC_AUTO_SILENT_II = 211; +const int IP_CONST_FEAT_EPIC_AUTO_SILENT_III = 212; + + +const int IP_CONST_FEAT_KI_STRIKE = 254; + +const int IP_CONST_FEAT_REND = 255; +const int IP_CONST_FEAT_SPELL10 = 256; +//const int IP_CONST_FEAT_MOBILITY = 27; // Provided by Bioware in 1.66 +//const int IP_CONST_FEAT_WHIRLWIND = 29; // ------------||------------- +const int IP_CONST_FEAT_BLINDFIGHT = 257; +const int IP_CONST_FEAT_SPRINGATTACK = 258; +const int IP_CONST_FEAT_EVASION = 386; +const int IP_CONST_FEAT_IMPEVASION = 387; +const int IP_CONST_FEAT_GREAT_CLEAVE = 260; +const int IP_CONST_FEAT_IMPROVED_INIT = 261; +const int IP_CONST_FEAT_BLOODED = 270; + +const int IP_CONST_FEAT_POWER_ATTACK_SINGLE_RADIAL = 252; +const int IP_CONST_FEAT_POWER_ATTACK_FIVES_RADIAL = 253; +const int IP_CONST_FEAT_PRC_POWER_ATTACK_QUICKS_RADIAL = 262; + +const int IP_CONST_FEAT_TELEPORT_MANAGEMENT_RADIAL = 263; + +const int IP_CONST_FEAT_EPIC_REST = 399; + +//:: Psionic System Feats +const int IP_CONST_FEAT_PSIONIC_FOCUS = 259; +const int IP_CONST_FEAT_AUGMENT_PSIONICS_QUICKSELECTS = 584; +const int IP_CONST_FEAT_AUGMENT_PSIONICS_DIGITS_0_4 = 585; +const int IP_CONST_FEAT_AUGMENT_PSIONICS_DIGITS_5_9 = 586; +const int IP_CONST_FEAT_AUGMENT_PSIONICS_TENS = 587; +const int IP_CONST_FEAT_AUGMENT_QUICKSELECTS_2 = 586; + + +//:: PnP Weapon Feats +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_SHORTSWORD = 4601; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_LONGSWORD = 4602; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_BATTLEAXE = 4603; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_BASTARD_SWORD = 4604; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_LIGHT_FLAIL = 4605; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_WARHAMMER = 4606; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_LONGBOW = 4607; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_LIGHT_MACE = 4608; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_HALBERD = 4609; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_SHORTBOW = 4610; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_TWO_BLADED_SWORD = 4611; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_GREATSWORD = 4612; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_GREATAXE = 4613; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_DART = 4614; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_DIRE_MACE = 4615; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_DOUBLE_AXE = 4616; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_HEAVY_FLAIL = 4617; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_LIGHT_HAMMER = 4618; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_HANDAXE = 4619; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_KAMA = 4620; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_KATANA = 4621; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_KUKRI = 4622; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_MORNINGSTAR = 4623; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_RAPIER = 4624; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_SCIMITAR = 4625; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_SCYTHE = 4626; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_SHORTSPEAR = 4627; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_SHURIKEN = 4628; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_SICKLE = 4629; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_SLING = 4630; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_THROWING_AXE = 4631; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_TRIDENT = 4632; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_DWARVEN_WARAXE = 4633; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_WHIP = 4634; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_ELVEN_LIGHTBLADE = 4635; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_ELVEN_THINBLADE = 4636; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_ELVEN_COURTBLADE = 4637; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_LIGHT_LANCE = 4638; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_HEAVY_PICK = 4639; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_LIGHT_PICK = 4640; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_SAI = 4641; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_NUNCHUKU = 4642; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_FALCHION = 4643; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_SAP = 4644; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_KATAR = 4645; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_HEAVY_MACE = 4646; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_MAUL = 4647; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_DOUBLE_SCIMITAR = 4648; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_GOAD = 4649; +const int IP_CONST_FEAT_WEAPON_PROFICIENCY_EAGLE_CLAW = 4650; + +const int IP_CONST_FEAT_WEAPON_FOCUS_CLUB = 100; +const int IP_CONST_FEAT_WEAPON_FOCUS_DAGGER = 101; +const int IP_CONST_FEAT_WEAPON_FOCUS_DART = 102; +const int IP_CONST_FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW = 103; +const int IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_CROSSBOW = 104; +const int IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_MACE = 105; +const int IP_CONST_FEAT_WEAPON_FOCUS_MORNING_STAR = 106; +const int IP_CONST_FEAT_WEAPON_FOCUS_STAFF = 107; +const int IP_CONST_FEAT_WEAPON_FOCUS_SPEAR = 108; +const int IP_CONST_FEAT_WEAPON_FOCUS_SICKLE = 109; +const int IP_CONST_FEAT_WEAPON_FOCUS_SLING = 110; +const int IP_CONST_FEAT_WEAPON_FOCUS_UNARMED_STRIKE = 111; +const int IP_CONST_FEAT_WEAPON_FOCUS_LONGBOW = 112; +const int IP_CONST_FEAT_WEAPON_FOCUS_SHORTBOW = 113; +const int IP_CONST_FEAT_WEAPON_FOCUS_SHORT_SWORD = 114; +const int IP_CONST_FEAT_WEAPON_FOCUS_RAPIER = 115; +const int IP_CONST_FEAT_WEAPON_FOCUS_SCIMITAR = 116; +const int IP_CONST_FEAT_WEAPON_FOCUS_LONG_SWORD = 117; +const int IP_CONST_FEAT_WEAPON_FOCUS_GREAT_SWORD = 118; +const int IP_CONST_FEAT_WEAPON_FOCUS_HAND_AXE = 119; +const int IP_CONST_FEAT_WEAPON_FOCUS_THROWING_AXE = 120; +const int IP_CONST_FEAT_WEAPON_FOCUS_BATTLE_AXE = 121; +const int IP_CONST_FEAT_WEAPON_FOCUS_GREAT_AXE = 122; +const int IP_CONST_FEAT_WEAPON_FOCUS_HALBERD = 123; +const int IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_HAMMER = 124; +const int IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_FLAIL = 125; +const int IP_CONST_FEAT_WEAPON_FOCUS_WAR_HAMMER = 126; +const int IP_CONST_FEAT_WEAPON_FOCUS_HEAVY_FLAIL = 127; +const int IP_CONST_FEAT_WEAPON_FOCUS_KAMA = 128; +const int IP_CONST_FEAT_WEAPON_FOCUS_KUKRI = 129; +const int IP_CONST_FEAT_WEAPON_FOCUS_SHURIKEN = 130; +const int IP_CONST_FEAT_WEAPON_FOCUS_SCYTHE = 131; +const int IP_CONST_FEAT_WEAPON_FOCUS_KATANA = 132; +const int IP_CONST_FEAT_WEAPON_FOCUS_BASTARD_SWORD = 133; +const int IP_CONST_FEAT_WEAPON_FOCUS_DIRE_MACE = 134; +const int IP_CONST_FEAT_WEAPON_FOCUS_DOUBLE_AXE = 135; +const int IP_CONST_FEAT_WEAPON_FOCUS_TWO_BLADED_SWORD = 136; +const int IP_CONST_FEAT_WEAPON_FOCUS_DWAXE = 137; +const int IP_CONST_FEAT_WEAPON_FOCUS_WHIP = 138; +const int IP_CONST_FEAT_WEAPON_FOCUS_MINDBLADE = 139; +const int IP_CONST_FEAT_WEAPON_FOCUS_RAY = 140; +const int IP_CONST_FEAT_WEAPON_FOCUS_TRIDENT = 1072; +const int IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_LANCE = 15879; +const int IP_CONST_FEAT_WEAPON_FOCUS_HEAVY_PICK = 15880; +const int IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_PICK = 15881; +const int IP_CONST_FEAT_WEAPON_FOCUS_SAI = 15882; +const int IP_CONST_FEAT_WEAPON_FOCUS_NUNCHAKU = 15883; +const int IP_CONST_FEAT_WEAPON_FOCUS_FALCHION = 15884; +const int IP_CONST_FEAT_WEAPON_FOCUS_SAP = 15885; +const int IP_CONST_FEAT_WEAPON_FOCUS_KATAR = 15886; +const int IP_CONST_FEAT_WEAPON_FOCUS_HEAVY_MACE = 15887; +const int IP_CONST_FEAT_WEAPON_FOCUS_MAUL = 15888; +const int IP_CONST_FEAT_WEAPON_FOCUS_DOUBLE_SCIMITAR = 15889; +const int IP_CONST_FEAT_WEAPON_FOCUS_GOAD = 15890; +const int IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE = 15975; +const int IP_CONST_FEAT_WEAPON_FOCUS_EAGLE_CLAW = 15878; +const int IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_THINBLADE = 15983; +const int IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE = 15991; + +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_CLUB = 16000; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_DAGGER = 16001; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_DART = 16002; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_HEAVY_CROSSBOW = 16003; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_LIGHT_CROSSBOW = 16004; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_LIGHT_MACE = 16005; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_MORNING_STAR = 16006; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_STAFF = 16007; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_SPEAR = 16008; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_SICKLE = 16009; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_SLING = 16010; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_UNARMED_STRIKE = 16011; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_LONGBOW = 16012; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_SHORTBOW = 16013; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_SHORT_SWORD = 16014; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_RAPIER = 16015; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_SCIMITAR = 16016; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_LONG_SWORD = 16017; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_GREAT_SWORD = 16018; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_HAND_AXE = 16019; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_THROWING_AXE = 16020; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_BATTLE_AXE = 16021; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_GREAT_AXE = 16022; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_HALBERD = 16023; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_LIGHT_HAMMER = 16024; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_LIGHT_FLAIL = 16025; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_WAR_HAMMER = 16026; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_HEAVY_FLAIL = 16027; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_KAMA = 16028; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_KUKRI = 16029; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_SHURIKEN = 16030; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_SCYTHE = 16031; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_KATANA = 16032; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_BASTARD_SWORD = 16033; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_DIRE_MACE = 16034; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_DOUBLE_AXE = 16035; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_TWO_BLADED_SWORD = 16036; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_DWAXE = 16037; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_WHIP = 16038; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_MINDBLADE = 16039; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_EAGLE_CLAW = 594; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_TRIDENT = 582; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_LIGHT_LANCE = 15903; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_HEAVY_PICK = 15904; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_LIGHT_PICK = 15905; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_SAI = 15906; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_NUNCHAKU = 15907; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_FALCHION = 15908; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_SAP = 15909; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_KATAR = 15910; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_HEAVY_MACE = 15911; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_MAUL = 15912; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_DBL_SCIMITAR = 15913; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_GOAD = 15914; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE = 15977; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_ELVEN_THINBLADE = 15985; +const int IP_CONST_FEAT_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE = 15993; + +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_CLUB = 16050; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_DAGGER = 16051; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_DART = 16052; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_HEAVYCROSSBOW = 16053; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTCROSSBOW = 16054; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTMACE = 16055; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_MORNINGSTAR = 16056; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_QUARTERSTAFF = 16057; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_SHORTSPEAR = 16058; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_SICKLE = 16059; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_SLING = 16060; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_UNARMED = 16061; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_LONGBOW = 16062; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_SHORTBOW = 16063; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_SHORTSWORD = 16064; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_RAPIER = 16065; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_SCIMITAR = 16066; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_LONGSWORD = 16067; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_GREATSWORD = 16068; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_HANDAXE = 16069; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_THROWINGAXE = 16070; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_BATTLEAXE = 16071; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_GREATAXE = 16072; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_HALBERD = 16073; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTHAMMER = 16074; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTFLAIL = 16075; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_WARHAMMER = 16076; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_HEAVYFLAIL = 16077; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_KAMA = 16078; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_KUKRI = 16079; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_SHURIKEN = 16080; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_SCYTHE = 16081; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_KATANA = 16082; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_BASTARDSWORD = 16083; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_DIREMACE = 16084; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_DOUBLEAXE = 16085; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_TWOBLADEDSWORD = 16086; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_DWAXE = 16087; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_WHIP = 16088; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_MINDBLADE = 16089; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_EAGLE_CLAW = 594; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_TRIDENT = 584; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_LIGHT_LANCE = 15951; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_HEAVY_PICK = 15952; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_LIGHT_PICK = 15953; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_SAI = 15954; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_NUNCHAKU = 15955; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_FALCHION = 15956; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_SAP = 15957; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_KATAR = 15958; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_HEAVY_MACE = 15959; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_MAUL = 15960; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_DBL_SCIMITAR = 15961; +const int IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_GOAD = 15962; +const int IP_CONST_FEAT_DEVASTATING_CRITICAL_ELVEN_LIGHTBLADE = 15981; +const int IP_CONST_FEAT_DEVASTATING_CRITICAL_ELVEN_THINBLADE = 15989; +const int IP_CONST_FEAT_DEVASTATING_CRITICAL_ELVEN_COURTBLADE = 15997; + +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_CLUB = 16100; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_DAGGER = 16101; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_DART = 16102; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_HEAVY_CROSSBOW = 16103; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_LIGHT_CROSSBOW = 16104; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_LIGHT_MACE = 16105; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_MORNING_STAR = 16106; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_STAFF = 16107; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_SPEAR = 16108; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_SICKLE = 16109; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_SLING = 16110; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_UNARMED_STRIKE = 16111; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_LONGBOW = 16112; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_SHORTBOW = 16113; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_SHORT_SWORD = 16114; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_RAPIER = 16115; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_SCIMITAR = 16116; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_LONG_SWORD = 16117; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_GREAT_SWORD = 16118; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_HAND_AXE = 16119; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_THROWING_AXE = 16120; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_BATTLE_AXE = 16121; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_GREAT_AXE = 16122; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_HALBERD = 16123; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_LIGHT_HAMMER = 16124; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_LIGHT_FLAIL = 16125; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_WAR_HAMMER = 16126; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_HEAVY_FLAIL = 16127; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_KAMA = 16128; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_KUKRI = 16129; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_SHURIKEN = 16130; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_SCYTHE = 16131; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_KATANA = 16132; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_BASTARD_SWORD = 16133; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_DIRE_MACE = 16134; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_DOUBLE_AXE = 16135; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_TWO_BLADED_SWORD = 16136; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_DWAXE = 16137; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_WHIP = 16138; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_MINDBLADE = 16139; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_RAY = 16140; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_LIGHT_LANCE = 15891; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_HEAVY_PICK = 15892; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_LIGHT_PICK = 15893; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_SAI = 15894; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_NUNCHAKU = 15895; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_FALCHION = 15896; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_SAP = 15897; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_KATAR = 15898; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_HEAVY_MACE = 15899; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_MAUL = 15900; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_DBL_SCIMITAR = 15901; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_GOAD = 15902; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_ELVEN_LIGHTBLADE = 15976; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_ELVEN_THINBLADE = 15984; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_ELVEN_COURTBLADE = 15992; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_EAGLE_CLAW = 588; +const int IP_CONST_FEAT_EPIC_WEAPON_FOCUS_TRIDENT = 585; + +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_CLUB = 16150; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_DAGGER = 16151; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_DART = 16152; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_CROSSBOW = 16153; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_CROSSBOW = 16154; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_MACE = 16155; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_MORNING_STAR = 16156; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_STAFF = 16157; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_SPEAR = 16158; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_SICKLE = 16159; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_SLING = 16160; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_UNARMED_STRIKE = 16161; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_LONGBOW = 16162; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTBOW = 16163; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_SHORT_SWORD = 16164; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_RAPIER = 16165; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_SCIMITAR = 16166; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_LONG_SWORD = 16167; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_GREAT_SWORD = 16168; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_HAND_AXE = 16169; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_THROWING_AXE = 16170; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_BATTLE_AXE = 16171; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_GREAT_AXE = 16172; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_HALBERD = 16173; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_HAMMER = 16174; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_FLAIL = 16175; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_WAR_HAMMER = 16176; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_FLAIL = 16177; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_KAMA = 16178; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_KUKRI = 16179; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_SHURIKEN = 16180; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_SCYTHE = 16181; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_KATANA = 16182; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_BASTARD_SWORD = 16183; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_DIRE_MACE = 16184; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_DOUBLE_AXE = 16185; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_TWO_BLADED_SWORD = 16186; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_DWAXE = 16187; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_WHIP = 16188; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_MINDBLADE = 16189; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_EAGLE_CLAW = 591; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_TRIDENT = 586; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_LANCE = 15915; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_PICK = 15916; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_PICK = 15917; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_SAI = 15918; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_NUNCHAKU = 15919; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_FALCHION = 15920; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_SAP = 15921; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_KATAR = 15922; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_MACE = 15923; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_MAUL = 15924; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_DBL_SCIMITAR = 15925; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_GOAD = 15926; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE = 15978; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_THINBLADE = 15986; +const int IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE = 15994; + +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_CLUB = 16200; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_DAGGER = 16201; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_DART = 16202; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVYCROSSBOW = 16203; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTCROSSBOW = 16204; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTMACE = 16205; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_MORNINGSTAR = 16206; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_QUARTERSTAFF = 16207; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTSPEAR = 16208; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_SICKLE = 16209; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_SLING = 16210; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_UNARMED = 16211; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_LONGBOW = 16212; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTBOW = 16213; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTSWORD = 16214; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_RAPIER = 16215; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_SCIMITAR = 16216; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_LONGSWORD = 16217; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_GREATSWORD = 16218; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_HANDAXE = 16219; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_THROWINGAXE = 16220; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_BATTLEAXE = 16221; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_GREATAXE = 16222; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_HALBERD = 16223; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTHAMMER = 16224; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTFLAIL = 16225; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_WARHAMMER = 16226; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVYFLAIL = 16227; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_KAMA = 16228; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_KUKRI = 16229; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_SHURIKEN = 16230; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_SCYTHE = 16231; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_KATANA = 16232; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_BASTARDSWORD = 16233; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_DIREMACE = 16234; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_DOUBLEAXE = 16235; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_TWOBLADEDSWORD = 16236; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_DWAXE = 16237; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_WHIP = 16238; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_MINDBLADE = 16239; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_EAGLE_CLAW = 594; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_TRIDENT = 587; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHT_LANCE = 15939; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVY_PICK = 15940; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHT_PICK = 15941; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_SAI = 15942; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_NUNCHAKU = 15943; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_FALCHION = 15944; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_SAP = 15945; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_KATAR = 15946; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVY_MACE = 15947; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_MAUL = 15948; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_DBL_SCIMITAR = 15949; +const int IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_GOAD = 15950; +const int IP_CONST_FEAT_OVERWHELMING_CRITICAL_ELVEN_LIGHTBLADE = 15980; +const int IP_CONST_FEAT_OVERWHELMING_CRITICAL_ELVEN_THINBLADE = 15988; +const int IP_CONST_FEAT_OVERWHELMING_CRITICAL_ELVEN_COURTBLADE = 15996; + +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_SICKLE = 16250; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_KAMA = 16251; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_KUKRI = 16252; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_CLUB = 16253; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_DAGGER = 16254; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_LIGHTMACE = 16255; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_MORNINGSTAR = 16256; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_QUARTERSTAFF = 16257; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_SHORTSPEAR = 16258; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_SHORTSWORD = 16259; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_RAPIER = 16260; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_SCIMITAR = 16261; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_LONGSWORD = 16262; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_GREATSWORD = 16263; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_HANDAXE = 16264; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_BATTLEAXE = 16265; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_GREATAXE = 16266; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_HALBERD = 16267; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_LIGHTHAMMER = 16268; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_LIGHTFLAIL = 16269; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_WARHAMMER = 16270; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_HEAVYFLAIL = 16271; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_SCYTHE = 16272; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_KATANA = 16273; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_BASTARDSWORD = 16274; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_DIREMACE = 16275; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_DOUBLEAXE = 16276; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_TWOBLADEDSWORD = 16277; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_DWAXE = 16278; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_WHIP = 16279; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_MINDBLADE = 16280; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_TRIDENT = 595; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_EAGLE_CLAW = 596; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_LIGHT_LANCE = 15963; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_HEAVY_PICK = 15964; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_LIGHT_PICK = 15965; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_SAI = 15966; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_NUNCHAKU = 15967; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_FALCHION = 15968; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_SAP = 15969; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_KATAR = 15970; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_HEAVY_MACE = 15971; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_MAUL = 15972; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_DBL_SCIMITAR = 15973; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_GOAD = 15974; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_ELVEN_LIGHTBLADE = 15982; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_ELVEN_THINBLADE = 15990; +const int IP_CONST_FEAT_WEAPON_OF_CHOICE_ELVEN_COURTBLADE = 15998; + +const int IP_CONST_FEAT_SUPERIOR_WEAPON_FOCUS = 24811; +const int IP_CONST_FEAT_EPIC_SUPERIOR_WEAPON_FOCUS = 24812; + +// Arcane Archer +const int IP_CONST_FEAT_FEAT_PRESTIGE_IMBUE_ARROW = 390; + +const int IP_CONST_FEAT_DIEHARD = 96; + +//undead feats +const int IP_CONST_FEAT_UNDEAD_HD = 213; +const int IP_CONST_FEAT_IMMUNITY_ABILITY_DECREASE = 214; +const int IP_CONST_FEAT_IMMUNITY_CRITICAL = 215; +const int IP_CONST_FEAT_IMMUNITY_DEATH = 216; +const int IP_CONST_FEAT_IMMUNITY_DISEASE = 217; +const int IP_CONST_FEAT_IMMUNITY_MIND_SPELLS = 218; +const int IP_CONST_FEAT_IMMUNITY_PARALYSIS = 219; +const int IP_CONST_FEAT_IMMUNITY_POISON = 220; +const int IP_CONST_FEAT_IMMUNITY_SNEAKATTACK = 221; + + +// IP_CONST_CASTSPELL + +const int IP_CONST_CASTSPELL_BLESSWEAPON_10 = 13; +const int IP_CONST_CASTSPELL_MAGICWEAPON_2 = 479; +const int IP_CONST_CASTSPELL_GREATERMAGICWEAPON_10 = 511; +const int IP_CONST_CASTSPELL_GREATERMAGICWEAPON_11 = 512; +const int IP_CONST_CASTSPELL_HOLY_SWORD_15 = 473; + +const int IP_CONST_CASTSPELL_GRENADE_POISONVIAL = 1140; +const int IP_CONST_CASTSPELL_POISON_WEAPON = 1141; +const int IP_CONST_CASTSPELL_POISON_ITEM = 1142; +const int IP_CONST_CASTSPELL_POISON_FOOD = 1143; +const int IP_CONST_CASTSPELL_CLEAN_POISON_OFF = 1144; + +const int IP_CONST_CASTSPELL_MINDBLADE_LUCKY = 1171; + + + +// IP_CONST_ONHIT_CASTSPELL +// Note: Do not add anything to this section, since multiple onhit properties conflict with each other. Instead implement your stuff via eventhook to EVENT_ONHIT. +const int IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE = 200; +const int IP_CONST_ONHIT_CASTSPELL_NIGHTSHADEPOISON = 201; +const int IP_CONST_ONHIT_CASTSPELL_LINGDMG = 202; +const int IP_CONST_CASTSPELL_ELDRITCH_GLAIVE_ONHIT = 205; + +//:: DAMAGE_BONUS_ [iprp_damagecost.2da] +const int DAMAGE_BONUS_21 = 73; +const int DAMAGE_BONUS_22 = 74; +const int DAMAGE_BONUS_23 = 75; +const int DAMAGE_BONUS_24 = 76; +const int DAMAGE_BONUS_25 = 77; +const int DAMAGE_BONUS_26 = 78; +const int DAMAGE_BONUS_27 = 79; +const int DAMAGE_BONUS_28 = 80; +const int DAMAGE_BONUS_29 = 81; +const int DAMAGE_BONUS_30 = 82; +const int DAMAGE_BONUS_31 = 83; +const int DAMAGE_BONUS_32 = 84; +const int DAMAGE_BONUS_33 = 85; +const int DAMAGE_BONUS_34 = 86; +const int DAMAGE_BONUS_35 = 87; +const int DAMAGE_BONUS_36 = 88; +const int DAMAGE_BONUS_37 = 89; +const int DAMAGE_BONUS_38 = 90; +const int DAMAGE_BONUS_39 = 91; +const int DAMAGE_BONUS_40 = 92; +const int DAMAGE_BONUS_41 = 93; +const int DAMAGE_BONUS_42 = 94; +const int DAMAGE_BONUS_43 = 95; +const int DAMAGE_BONUS_44 = 96; +const int DAMAGE_BONUS_45 = 97; +const int DAMAGE_BONUS_46 = 98; +const int DAMAGE_BONUS_47 = 99; +const int DAMAGE_BONUS_48 = 100; +const int DAMAGE_BONUS_49 = 101; +const int DAMAGE_BONUS_50 = 102; + +//:: IP_CONST_DAMAGEBONUS [iprp_damagecost.2da] +const int IP_CONST_DAMAGEBONUS_11 = 21; +const int IP_CONST_DAMAGEBONUS_12 = 22; +const int IP_CONST_DAMAGEBONUS_13 = 23; +const int IP_CONST_DAMAGEBONUS_14 = 24; +const int IP_CONST_DAMAGEBONUS_15 = 25; +const int IP_CONST_DAMAGEBONUS_16 = 26; +const int IP_CONST_DAMAGEBONUS_17 = 27; +const int IP_CONST_DAMAGEBONUS_18 = 28; +const int IP_CONST_DAMAGEBONUS_19 = 29; +const int IP_CONST_DAMAGEBONUS_20 = 30; +const int IP_CONST_DAMAGEBONUS_3d6 = 31; +const int IP_CONST_DAMAGEBONUS_4d6 = 32; +const int IP_CONST_DAMAGEBONUS_5d6 = 33; +const int IP_CONST_DAMAGEBONUS_6d6 = 34; +const int IP_CONST_DAMAGEBONUS_7d6 = 35; +const int IP_CONST_DAMAGEBONUS_8d6 = 36; +const int IP_CONST_DAMAGEBONUS_3d4 = 37; +const int IP_CONST_DAMAGEBONUS_4d4 = 38; +const int IP_CONST_DAMAGEBONUS_5d4 = 39; +const int IP_CONST_DAMAGEBONUS_6d4 = 40; +const int IP_CONST_DAMAGEBONUS_3d8 = 41; +const int IP_CONST_DAMAGEBONUS_4d8 = 42; +const int IP_CONST_DAMAGEBONUS_5d8 = 43; +const int IP_CONST_DAMAGEBONUS_6d8 = 44; +const int IP_CONST_DAMAGEBONUS_7d8 = 45; +const int IP_CONST_DAMAGEBONUS_8d8 = 46; +const int IP_CONST_DAMAGEBONUS_9d8 = 47; +const int IP_CONST_DAMAGEBONUS_10d8 = 48; +const int IP_CONST_DAMAGEBONUS_7d4 = 49; +const int IP_CONST_DAMAGEBONUS_8d4 = 50; +const int IP_CONST_DAMAGEBONUS_9d4 = 51; +const int IP_CONST_DAMAGEBONUS_10d4 = 52; +const int IP_CONST_DAMAGEBONUS_9d6 = 53; +const int IP_CONST_DAMAGEBONUS_10d6 = 54; +const int IP_CONST_DAMAGEBONUS_3d10 = 55; +const int IP_CONST_DAMAGEBONUS_4d10 = 56; +const int IP_CONST_DAMAGEBONUS_5d10 = 57; +const int IP_CONST_DAMAGEBONUS_6d10 = 58; +const int IP_CONST_DAMAGEBONUS_7d10 = 59; +const int IP_CONST_DAMAGEBONUS_8d10 = 60; +const int IP_CONST_DAMAGEBONUS_9d10 = 61; +const int IP_CONST_DAMAGEBONUS_10d10 = 62; +const int IP_CONST_DAMAGEBONUS_3d12 = 63; +const int IP_CONST_DAMAGEBONUS_4d12 = 64; +const int IP_CONST_DAMAGEBONUS_5d12 = 65; +const int IP_CONST_DAMAGEBONUS_6d12 = 66; +const int IP_CONST_DAMAGEBONUS_7d12 = 67; +const int IP_CONST_DAMAGEBONUS_8d12 = 68; +const int IP_CONST_DAMAGEBONUS_9d12 = 69; +const int IP_CONST_DAMAGEBONUS_10d12 = 70; +const int IP_CONST_DAMAGEBONUS_1d3 = 71; +const int IP_CONST_DAMAGEBONUS_4d3 = 72; +const int IP_CONST_DAMAGEBONUS_21 = 73; +const int IP_CONST_DAMAGEBONUS_22 = 74; +const int IP_CONST_DAMAGEBONUS_23 = 75; +const int IP_CONST_DAMAGEBONUS_24 = 76; +const int IP_CONST_DAMAGEBONUS_25 = 77; +const int IP_CONST_DAMAGEBONUS_26 = 78; +const int IP_CONST_DAMAGEBONUS_27 = 79; +const int IP_CONST_DAMAGEBONUS_28 = 80; +const int IP_CONST_DAMAGEBONUS_29 = 81; +const int IP_CONST_DAMAGEBONUS_30 = 82; +const int IP_CONST_DAMAGEBONUS_31 = 83; +const int IP_CONST_DAMAGEBONUS_32 = 84; +const int IP_CONST_DAMAGEBONUS_33 = 85; +const int IP_CONST_DAMAGEBONUS_34 = 86; +const int IP_CONST_DAMAGEBONUS_35 = 87; +const int IP_CONST_DAMAGEBONUS_36 = 88; +const int IP_CONST_DAMAGEBONUS_37 = 89; +const int IP_CONST_DAMAGEBONUS_38 = 90; +const int IP_CONST_DAMAGEBONUS_39 = 91; +const int IP_CONST_DAMAGEBONUS_40 = 92; +const int IP_CONST_DAMAGEBONUS_41 = 93; +const int IP_CONST_DAMAGEBONUS_42 = 94; +const int IP_CONST_DAMAGEBONUS_43 = 95; +const int IP_CONST_DAMAGEBONUS_44 = 96; +const int IP_CONST_DAMAGEBONUS_45 = 97; +const int IP_CONST_DAMAGEBONUS_46 = 98; +const int IP_CONST_DAMAGEBONUS_47 = 99; +const int IP_CONST_DAMAGEBONUS_48 = 100; +const int IP_CONST_DAMAGEBONUS_49 = 101; +const int IP_CONST_DAMAGEBONUS_50 = 102; + + +// IP_CONST_IMMUNITYSPELL +const int IP_CONST_IMMUNITYSPELL_BOLT_WEB = 239; +const int IP_CONST_IMMUNITYSPELL_SHADOW_WEB = 240; +const int IP_CONST_IMMUNITYSPELL_BELETITH_WEB = 241; +const int IP_CONST_IMMUNITYSPELL_NS_WEB = 242; + + +// IP_CONST_ONHIT_SAVEDC [iprp_onhitcost.2da] +const int IP_CONST_ONHIT_SAVEDC_10 = 10; +const int IP_CONST_ONHIT_SAVEDC_11 = 11; +const int IP_CONST_ONHIT_SAVEDC_12 = 12; +const int IP_CONST_ONHIT_SAVEDC_13 = 13; +const int IP_CONST_ONHIT_SAVEDC_15 = 15; +const int IP_CONST_ONHIT_SAVEDC_17 = 17; +const int IP_CONST_ONHIT_SAVEDC_19 = 19; +const int IP_CONST_ONHIT_SAVEDC_21 = 21; +const int IP_CONST_ONHIT_SAVEDC_23 = 23; +const int IP_CONST_ONHIT_SAVEDC_25 = 25; +const int IP_CONST_ONHIT_SAVEDC_27 = 27; +const int IP_CONST_ONHIT_SAVEDC_28 = 28; +const int IP_CONST_ONHIT_SAVEDC_29 = 29; +const int IP_CONST_ONHIT_SAVEDC_30 = 30; +const int IP_CONST_ONHIT_SAVEDC_31 = 31; +const int IP_CONST_ONHIT_SAVEDC_32 = 32; +const int IP_CONST_ONHIT_SAVEDC_33 = 33; +const int IP_CONST_ONHIT_SAVEDC_34 = 34; +const int IP_CONST_ONHIT_SAVEDC_35 = 35; +const int IP_CONST_ONHIT_SAVEDC_36 = 36; +const int IP_CONST_ONHIT_SAVEDC_37 = 37; +const int IP_CONST_ONHIT_SAVEDC_38 = 38; +const int IP_CONST_ONHIT_SAVEDC_39 = 39; +const int IP_CONST_ONHIT_SAVEDC_40 = 40; +const int IP_CONST_ONHIT_SAVEDC_41 = 41; +const int IP_CONST_ONHIT_SAVEDC_42 = 42; +const int IP_CONST_ONHIT_SAVEDC_43 = 43; +const int IP_CONST_ONHIT_SAVEDC_44 = 44; +const int IP_CONST_ONHIT_SAVEDC_45 = 45; +const int IP_CONST_ONHIT_SAVEDC_46 = 46; +const int IP_CONST_ONHIT_SAVEDC_47 = 47; +const int IP_CONST_ONHIT_SAVEDC_48 = 48; +const int IP_CONST_ONHIT_SAVEDC_49 = 49; +const int IP_CONST_ONHIT_SAVEDC_50 = 50; +const int IP_CONST_ONHIT_SAVEDC_51 = 51; +const int IP_CONST_ONHIT_SAVEDC_52 = 52; +const int IP_CONST_ONHIT_SAVEDC_53 = 53; +const int IP_CONST_ONHIT_SAVEDC_54 = 54; +const int IP_CONST_ONHIT_SAVEDC_55 = 55; +const int IP_CONST_ONHIT_SAVEDC_56 = 56; +const int IP_CONST_ONHIT_SAVEDC_57 = 57; +const int IP_CONST_ONHIT_SAVEDC_58 = 58; +const int IP_CONST_ONHIT_SAVEDC_59 = 59; +const int IP_CONST_ONHIT_SAVEDC_60 = 60; +const int IP_CONST_ONHIT_SAVEDC_61 = 61; +const int IP_CONST_ONHIT_SAVEDC_62 = 62; +const int IP_CONST_ONHIT_SAVEDC_63 = 63; +const int IP_CONST_ONHIT_SAVEDC_64 = 64; +const int IP_CONST_ONHIT_SAVEDC_65 = 65; +const int IP_CONST_ONHIT_SAVEDC_66 = 66; +const int IP_CONST_ONHIT_SAVEDC_67 = 67; +const int IP_CONST_ONHIT_SAVEDC_68 = 68; +const int IP_CONST_ONHIT_SAVEDC_69 = 69; +const int IP_CONST_ONHIT_SAVEDC_70 = 70; + + +// Creature Epic Criticals +const int IP_CONST_FEAT_DEVCRITICAL_CREATURE = 271; +const int IP_CONST_FEAT_OVERCRITICAL_CREATURE = 272; +//const int IP_CONST_FEAT_WEAPON_PROF_CREATURE = 38; // provided by Bioware in 1.66 + +// Epic DR +const int IP_CONST_FEAT_EPIC_DR_3 = 273; +const int IP_CONST_FEAT_EPIC_DR_6 = 274; +const int IP_CONST_FEAT_EPIC_DR_9 = 275; + +//IP_CONST_DAMAGETYPE +//const int IP_CONST_DAMAGETYPE_BLOOD = 15; //:: Not a 3e PnP damage type +const int IP_CONST_DAMAGETYPE_POISON = 16; +//const int IP_CONST_DAMAGETYPE_SHADOW = 17; //:: Not a 3e PnP damage type +const int IP_CONST_DAMAGETYPE_PSYCHIC = 18; +//const int IP_CONST_DAMAGETYPE_NECROTIC = 19; //:: This is from 4e D&D +const int IP_CONST_DAMAGETYPE_RADIANT = 20; +const int IP_CONST_DAMAGETYPE_FORCE = 21; +const int IP_CONST_DAMAGETYPE_UNTYPED = 22; +const int IP_CONST_DAMAGETYPE_VILE = 23; + +//IP_CONST_DAMAGESOAK +const int IP_CONST_DAMAGESOAK_1_HP = 11; +const int IP_CONST_DAMAGESOAK_2_HP = 12; +const int IP_CONST_DAMAGESOAK_3_HP = 13; +const int IP_CONST_DAMAGESOAK_4_HP = 14; +const int IP_CONST_DAMAGESOAK_6_HP = 15; +const int IP_CONST_DAMAGESOAK_7_HP = 16; +const int IP_CONST_DAMAGESOAK_8_HP = 17; +const int IP_CONST_DAMAGESOAK_9_HP = 18; +const int IP_CONST_DAMAGESOAK_11_HP = 19; +const int IP_CONST_DAMAGESOAK_12_HP = 20; +const int IP_CONST_DAMAGESOAK_13_HP = 21; +const int IP_CONST_DAMAGESOAK_14_HP = 22; +const int IP_CONST_DAMAGESOAK_16_HP = 23; +const int IP_CONST_DAMAGESOAK_17_HP = 24; +const int IP_CONST_DAMAGESOAK_18_HP = 25; +const int IP_CONST_DAMAGESOAK_19_HP = 26; +const int IP_CONST_DAMAGESOAK_21_HP = 27; +const int IP_CONST_DAMAGESOAK_22_HP = 28; +const int IP_CONST_DAMAGESOAK_23_HP = 29; +const int IP_CONST_DAMAGESOAK_24_HP = 30; +const int IP_CONST_DAMAGESOAK_26_HP = 31; +const int IP_CONST_DAMAGESOAK_27_HP = 32; +const int IP_CONST_DAMAGESOAK_28_HP = 33; +const int IP_CONST_DAMAGESOAK_29_HP = 34; +const int IP_CONST_DAMAGESOAK_31_HP = 35; +const int IP_CONST_DAMAGESOAK_32_HP = 36; +const int IP_CONST_DAMAGESOAK_33_HP = 37; +const int IP_CONST_DAMAGESOAK_34_HP = 38; +const int IP_CONST_DAMAGESOAK_36_HP = 39; +const int IP_CONST_DAMAGESOAK_37_HP = 40; +const int IP_CONST_DAMAGESOAK_38_HP = 41; +const int IP_CONST_DAMAGESOAK_39_HP = 42; +const int IP_CONST_DAMAGESOAK_41_HP = 43; +const int IP_CONST_DAMAGESOAK_42_HP = 44; +const int IP_CONST_DAMAGESOAK_43_HP = 45; +const int IP_CONST_DAMAGESOAK_44_HP = 46; +const int IP_CONST_DAMAGESOAK_46_HP = 47; +const int IP_CONST_DAMAGESOAK_47_HP = 48; +const int IP_CONST_DAMAGESOAK_48_HP = 49; +const int IP_CONST_DAMAGESOAK_49_HP = 50; + +//IP_CONST_DAMAGERESIST +const int IP_CONST_DAMAGERESIST_500 = 20; // immunity alternative +const int IP_CONST_DAMAGERESIST_1 = 21; +const int IP_CONST_DAMAGERESIST_2 = 22; +const int IP_CONST_DAMAGERESIST_3 = 23; +const int IP_CONST_DAMAGERESIST_4 = 24; +const int IP_CONST_DAMAGERESIST_6 = 25; +const int IP_CONST_DAMAGERESIST_7 = 26; +const int IP_CONST_DAMAGERESIST_8 = 27; +const int IP_CONST_DAMAGERESIST_9 = 28; + +const int IP_CONST_FEAT_SHADOWMASTER_SHADES = 141; + +//IP_CONST_REDUCEDWEIGHT +const int IP_CONST_REDUCEDWEIGHT_50_PERCENT = 6; + +// IP_CONST_MONSTERDAMAGE +const int IP_CONST_MONSTERDAMAGE_7d4 = 58; + +//ACP feats +const int IP_CONST_ACP_QUICK_FEAT = 98; +const int IP_CONST_ACP_HEAVY_FEAT = 582; +const int IP_CONST_ACP_UNARMED_FEAT = 583; +//const int IP_CONST_ACP_FEAT = 98; + +// Improved Combat Casting +const int IP_CONST_IMP_CC = 97; + +// Cast Bonus Domain Radial Feats +const int IP_CONST_FEAT_CAST_DOMAIN_LEVEL_ONE = 142; +const int IP_CONST_FEAT_CAST_DOMAIN_LEVEL_TWO = 143; +const int IP_CONST_FEAT_CAST_DOMAIN_LEVEL_THREE = 144; +const int IP_CONST_FEAT_CAST_DOMAIN_LEVEL_FOUR = 145; +const int IP_CONST_FEAT_CAST_DOMAIN_LEVEL_FIVE = 146; +const int IP_CONST_FEAT_CAST_DOMAIN_LEVEL_SIX = 147; +const int IP_CONST_FEAT_CAST_DOMAIN_LEVEL_SEVEN = 148; +const int IP_CONST_FEAT_CAST_DOMAIN_LEVEL_EIGHT = 149; +const int IP_CONST_FEAT_CAST_DOMAIN_LEVEL_NINE = 150; +const int IP_CONST_FEAT_CHECK_DOMAIN_SLOTS = 151; + +// Bonus Domain Power Feats +const int IP_CONST_FEAT_WAR_DOMAIN = 152; +const int IP_CONST_FEAT_STRENGTH_DOMAIN = 153; +const int IP_CONST_FEAT_PROTECTION_DOMAIN = 154; +const int IP_CONST_FEAT_LUCK_DOMAIN = 155; +const int IP_CONST_FEAT_DEATH_DOMAIN = 156; +const int IP_CONST_FEAT_AIR_DOMAIN = 157; +const int IP_CONST_FEAT_ANIMAL_DOMAIN = 158; +const int IP_CONST_FEAT_DESTRUCTION_DOMAIN = 159; +const int IP_CONST_FEAT_EARTH_DOMAIN = 160; +const int IP_CONST_FEAT_EVIL_DOMAIN = 161; +const int IP_CONST_FEAT_FIRE_DOMAIN = 162; +const int IP_CONST_FEAT_GOOD_DOMAIN = 163; +const int IP_CONST_FEAT_HEALING_DOMAIN = 164; +const int IP_CONST_FEAT_KNOWLEDGE_DOMAIN = 165; +const int IP_CONST_FEAT_MAGIC_DOMAIN = 166; +const int IP_CONST_FEAT_PLANT_DOMAIN = 167; +const int IP_CONST_FEAT_SUN_DOMAIN = 168; +const int IP_CONST_FEAT_TRAVEL_DOMAIN = 169; +const int IP_CONST_FEAT_TRICKERY_DOMAIN = 170; +const int IP_CONST_FEAT_WATER_DOMAIN = 171; +const int IP_CONST_FEAT_DARKNESS_DOMAIN = 172; +const int IP_CONST_FEAT_METAL_DOMAIN = 173; +const int IP_CONST_FEAT_STORM_DOMAIN = 174; +const int IP_CONST_FEAT_PORTAL_DOMAIN = 175; +const int IP_CONST_FEAT_DWARF_DOMAIN = 176; +const int IP_CONST_FEAT_ORC_DOMAIN = 177; +const int IP_CONST_FEAT_FORCE_DOMAIN = 178; +const int IP_CONST_FEAT_SLIME_DOMAIN = 179; +const int IP_CONST_FEAT_TIME_DOMAIN = 180; +const int IP_CONST_FEAT_CHARM_DOMAIN = 181; +const int IP_CONST_FEAT_SPELLS_DOMAIN = 182; +const int IP_CONST_FEAT_RUNE_DOMAIN = 183; +const int IP_CONST_FEAT_FATE_DOMAIN = 184; +const int IP_CONST_FEAT_DOMINATION_DOMAIN = 185; +const int IP_CONST_FEAT_UNDEATH_DOMAIN = 186; +const int IP_CONST_FEAT_FAMILY_DOMAIN = 187; +const int IP_CONST_FEAT_HALFLING_DOMAIN = 188; +const int IP_CONST_FEAT_ILLUSION_DOMAIN = 189; +const int IP_CONST_FEAT_HATRED_DOMAIN = 190; +const int IP_CONST_FEAT_NOBILITY_DOMAIN = 191; +const int IP_CONST_FEAT_RETRIBUTION_DOMAIN = 192; +const int IP_CONST_FEAT_SCALEYKIND_DOMAIN = 193; +const int IP_CONST_FEAT_GNOME_DOMAIN = 194; +const int IP_CONST_FEAT_ELF_DOMAIN = 195; +const int IP_CONST_FEAT_RENEWAL_DOMAIN = 196; +const int IP_CONST_FEAT_SPIDER_DOMAIN = 197; +const int IP_CONST_FEAT_TYRANNY_DOMAIN = 198; +const int IP_CONST_FEAT_OCEAN_DOMAIN = 199; +const int IP_CONST_FEAT_BLIGHTBRINGER = 200; +const int IP_CONST_FEAT_DRAGON_DOMAIN = 397; +const int IP_CONST_FEAT_COLD_DOMAIN = 230; +const int IP_CONST_FEAT_WINTER_DOMAIN = 232; + +// Lasher +const int IP_CONST_FEAT_IMPROVED_KNOCKDOWN = 264; +const int IP_CONST_FEAT_IMPROVED_DISARM = 265; + +// Spellfire +const int IP_CONST_FEAT_SPELLFIRE_INCREASE = 266; +const int IP_CONST_FEAT_SPELLFIRE_DECREASE = 267; +const int IP_CONST_FEAT_SPELLFIRE_QUICKSELECT = 268; + +//RotD & Dragon Magic +const int IP_CONST_FEAT_DRAGON = 396; +const int IP_CONST_FEAT_DRAGON_IMMUNE = 395; +const int IP_CONST_FEAT_TOUGHNESS = 394; +const int IP_CONST_FEAT_DRACONIC_GRACE_1_5 = 223; +const int IP_CONST_FEAT_DRACONIC_GRACE_6_9 = 224; +const int IP_CONST_FEAT_DRACONIC_BREATH_1_5 = 225; +const int IP_CONST_FEAT_DRACONIC_BREATH_6_9 = 226; + +// Status markers +const int IP_CONST_FEAT_INCORPOREAL = 227; +const int IP_CONST_FEAT_ETHEREAL = 228; + +//Racial feats +const int IP_CONST_FEAT_KEEN_SENSES = 86; +const int IP_CONST_FEAT_CRAFTGUILD = 4987; +const int IP_CONST_FEAT_TECHGUILD = 4988; +const int IP_CONST_FEAT_REMAIN_CONCIOUS = 269; +const int IP_CONST_FEAT_SHIFTER_BEASTHIDE = 4993; +const int IP_CONST_FEAT_SHIFTER_DREAMSIGHT = 4994; +const int IP_CONST_FEAT_SHIFTER_GOREBRUTE = 4995; +const int IP_CONST_FEAT_SHIFTER_LONGSTRIDE = 4996; +const int IP_CONST_FEAT_SHIFTER_LONGTOOTH = 4997; +const int IP_CONST_FEAT_SHIFTER_RAZORCLAW = 4998; +const int IP_CONST_FEAT_SHIFTER_WILDHUNT = 4999; +const int IP_CONST_FEAT_SHIFTER_WINTERHIDE = 4986; +const int IP_CONST_FEAT_TRACKLESS_STEP = 393; +const int IP_CONST_FEAT_MOUNTAIN_FOLK = 4989; +const int IP_CONST_FEAT_BAMBOO_FOLK = 4990; +const int IP_CONST_FEAT_RIVER_FOLK = 4991; +const int IP_CONST_FEAT_SEA_FOLK = 4992; +const int IP_CONST_FEAT_FAST_HEALING_1 = 4382; +const int IP_CONST_FEAT_TURNING_IMMUNITY = 4381; +const int IP_CONST_FEAT_IMMUNITY_TO_REBUKING = 4380; + +// Template Feats +const int IP_CONST_FEAT_TEMPLATE_CELESTIAL_SMITE_EVIL = 16301; +const int IP_CONST_FEAT_TEMPLATE_CELESTIAL_MARKER = 16302; +const int IP_CONST_FEAT_TEMPLATE_FIENDISH_SMITE_GOOD = 16303; +const int IP_CONST_FEAT_TEMPLATE_FIENDISH_MARKER = 16304; +const int IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_SMITE_EVIL = 16305; +const int IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_PROTECTION = 16306; +const int IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_BLESS = 16307; +const int IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_AID = 16308; +const int IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_DETECT = 16309; +const int IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_CURE_SERIOUS = 16310; +const int IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_NEUTRALIZE_POISON = 16311; +//const int IP_CONST_FEAT_TEMPLATE_FIENDISH_MARKER = 16312; +const int IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_REMOVE_DISEASE= 16313; +//const int IP_CONST_FEAT_TEMPLATE_FIENDISH_MARKER = 16314; +const int IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_HOLY_WORD = 16315; +const int IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_HOLY_AURA = 16316; +//const int IP_CONST_FEAT_TEMPLATE_FIENDISH_MARKER = 16317; +const int IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_MASS_CHARM = 16318; +const int IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_SUMMON_IX = 16319; +const int IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_RESURRECTION = 16320; +const int IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_DAYLIGHT = 16321; +const int IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_MARKER = 16322; +const int IP_CONST_FEAT_TEMPLATE_NECROPOLITAN_MARKER = 16323; +const int IP_CONST_FEAT_TEMPLATE_HALF_FIENDISH_SMITE_GOOD = 16324; +const int IP_CONST_FEAT_TEMPLATE_HALF_FIENDISH_DARKNESS = 16325; +const int IP_CONST_FEAT_TEMPLATE_HALF_FIENDISH_DESECRATE = 16326; +const int IP_CONST_FEAT_TEMPLATE_HALF_FIENDISH_UNHOLY_BLIGHT = 16327; +const int IP_CONST_FEAT_TEMPLATE_HALF_FIENDISH_POISON = 16328; +const int IP_CONST_FEAT_TEMPLATE_HALF_FIENDISH_CONTAGION = 16329; +const int IP_CONST_FEAT_TEMPLATE_HALF_FIENDISH_BLASPHEMY = 16330; +const int IP_CONST_FEAT_TEMPLATE_HALF_FIENDISH_UNHOLY_AURA = 16331; +const int IP_CONST_FEAT_TEMPLATE_HALF_FIENDISH_UNHALLOW = 16332; +const int IP_CONST_FEAT_TEMPLATE_HALF_FIENDISH_HORRID_WILTING= 16333; +const int IP_CONST_FEAT_TEMPLATE_HALF_FIENDISH_SUMMON_IX = 16334; +const int IP_CONST_FEAT_TEMPLATE_HALF_FIENDISH_DESTRUCTION = 16335; +const int IP_CONST_FEAT_TEMPLATE_HALF_FIENDISH_MARKER = 16336; +const int IP_CONST_FEAT_TEMPLATE_LICH_FEAR_AURA = 16337; +const int IP_CONST_FEAT_TEMPLATE_LICH_PARALYZING_TOUCH = 16338; +const int IP_CONST_FEAT_TEMPLATE_LICH_APPEARANCE = 16339; +const int IP_CONST_FEAT_TEMPLATE_LICH_MARKER = 16340; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_ALTER_SELF = 16341; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_ASTRAL_PROJECTION = 16342; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_CREATE_GREATER_UNDEAD = 16343; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_CREATE_UNDEAD = 16344; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_DEATH_KNELL = 16345; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_ENERVATION = 16346; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_GREATER_DISPEL_MAGIC = 16347; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_HARM = 16348; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_I = 16349; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_II = 16350; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_III = 16351; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_IV = 16352; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_V = 16353; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_VI = 16354; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_VII = 16355; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_VIII = 16356; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_SUMMON_CREATURE_IX = 16357; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_TELEKINESIS = 16358; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_WEIRD = 16359; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_GREATER_PLANAR_ALLY = 16360; +const int IP_CONST_FEAT_TEMPLATE_DEMILICH_MARKER = 16361; +const int IP_CONST_FEAT_HDRAGON_BREATHWEAPON = 16362; +const int IP_CONST_FEAT_HD_CHROMATICBLACK_MARKER = 16363; +const int IP_CONST_FEAT_HD_CHROMATICBLUE_MARKER = 16364; +const int IP_CONST_FEAT_HD_CHROMATICGREEN_MARKER = 16365; +const int IP_CONST_FEAT_HD_CHROMATICRED_MARKER = 16366; +const int IP_CONST_FEAT_HD_CHROMATICWHITE_MARKER = 16367; +const int IP_CONST_FEAT_HD_GEMAMETHYST_MARKER = 16368; +const int IP_CONST_FEAT_HD_GEMCRYSTAL_MARKER = 16369; +const int IP_CONST_FEAT_HD_GEMEMERALD_MARKER = 16370; +const int IP_CONST_FEAT_HD_GEMSAPPHIRE_MARKER = 16371; +const int IP_CONST_FEAT_HD_GEMTOPAZ_MARKER = 16372; +const int IP_CONST_FEAT_HD_LUNGCHIANGLUNG_MARKER = 16373; +const int IP_CONST_FEAT_HD_LUNGLILUNG_MARKER = 16374; +const int IP_CONST_FEAT_HD_LUNGLUNGWANG_MARKER = 16375; +const int IP_CONST_FEAT_HD_LUNGPANLUNG_MARKER = 16376; +const int IP_CONST_FEAT_HD_LUNGSHENLUNG_MARKER = 16377; +const int IP_CONST_FEAT_HD_LUNGTIENLUNG_MARKER = 16378; +const int IP_CONST_FEAT_HD_LUNGTUNMILUNG_MARKER = 16379; +const int IP_CONST_FEAT_HD_METALLICBRASS_MARKER = 16380; +const int IP_CONST_FEAT_HD_METALLICBRONZE_MARKER = 16381; +const int IP_CONST_FEAT_HD_METALLICCOPPER_MARKER = 16382; +const int IP_CONST_FEAT_HD_METALLICGOLD_MARKER = 16383; +const int IP_CONST_FEAT_HD_METALLICSILVER_MARKER = 16384; +const int IP_CONST_FEAT_HD_OBSCUREBATTLE_MARKER = 16385; +const int IP_CONST_FEAT_HD_OBSCUREBROWN_MARKER = 16386; +const int IP_CONST_FEAT_HD_OBSCURECHAOS_MARKER = 16387; +const int IP_CONST_FEAT_HD_OBSCUREDEEP_MARKER = 16388; +const int IP_CONST_FEAT_HD_OBSCUREETHEREAL_MARKER = 16389; +const int IP_CONST_FEAT_HD_OBSCUREFANG_MARKER = 16390; +const int IP_CONST_FEAT_HD_OBSCUREHOWLING_MARKER = 16391; +const int IP_CONST_FEAT_HD_OBSCUREOCEANUS_MARKER = 16392; +const int IP_CONST_FEAT_HD_OBSCUREPYROCLASTIC_MARKER = 16393; +const int IP_CONST_FEAT_HD_OBSCURERADIANT_MARKER = 16394; +const int IP_CONST_FEAT_HD_OBSCURERUST_MARKER = 16395; +const int IP_CONST_FEAT_HD_OBSCURESHADOW_MARKER = 16396; +const int IP_CONST_FEAT_HD_OBSCURESONG_MARKER = 16397; +const int IP_CONST_FEAT_HD_OBSCURESTYX_MARKER = 16398; +const int IP_CONST_FEAT_HD_OBSCURETARTERIAN_MARKER = 16399; +const int IP_CONST_FEAT_EARTH_STRIKE = 4379; +const int IP_CONST_FEAT_IMMUNITY_TO_SLEEP = 16400; +const int IP_CONST_FEAT_BLOODED_WAR_CRY = 573; +const int IP_CONST_FEAT_OUTSIDER_RACIAL_TYPE = 24819; +const int IP_CONST_FEAT_REGENERATION_5 = 24820; +const int IP_CONST_FEAT_SCENT = 24821; +const int IP_CONST_FEAT_GIANT_RACIAL_TYPE = 24822; + +const int IP_CONST_FEAT_TEMPLATE_ARCHLICH_MARKER = 16401; //:: Archlich +const int IP_CONST_FEAT_TEMPLATE_TURN_UNDEAD = 16402; +const int IP_CONST_FEAT_TEMPLATE_PROJECTION = 24823; +const int IP_CONST_FEAT_TEMPLATE_END_PROJECTION = 24824; +const int IP_CONST_FEAT_TEMPLATE_ANIMATE_DEAD = 24825; +const int IP_CONST_FEAT_TEMPLATE_SAINT_SLA_BLESS = 16403; //:: Saint +//const int IP_CONST_FEAT_TEMPLATE_SAINT_SLA_GUIDANCE = 16404; +const int IP_CONST_FEAT_TEMPLATE_SAINT_SLA_RESISTANCE = 16405; +const int IP_CONST_FEAT_TEMPLATE_SAINT_SLA_VIRTUE = 16406; +const int IP_CONST_FEAT_TEMPLATE_SAINT_PROTECTIVE_AURA = 16407; +const int IP_CONST_FEAT_TEMPLATE_SAINT_HOLY_POWER = 16408; + +// Tome of Battle +const int IP_CONST_FEAT_RISING_PHOENIX = 4395; +const int IP_CONST_FEAT_UNCANNY_DODGE2 = 389; +const int IP_CONST_FEAT_CRUSADER_SMITE = 580; + +//Alienist +const int IP_CONST_PHOBIA_ABERRATION = 24705; +const int IP_CONST_PHOBIA_ANIMAL = 24706; +const int IP_CONST_PHOBIA_BEAST = 24707; +const int IP_CONST_PHOBIA_CONSTRUCT = 24708; +const int IP_CONST_PHOBIA_DRAGON = 24709; +const int IP_CONST_PHOBIA_GOBLINOID = 24710; +const int IP_CONST_PHOBIA_MONSTROUS = 24711; +const int IP_CONST_PHOBIA_ORC = 24712; +const int IP_CONST_PHOBIA_REPTILIAN = 24713; +const int IP_CONST_PHOBIA_ELEMENTAL = 24714; +const int IP_CONST_PHOBIA_FEY = 24715; +const int IP_CONST_PHOBIA_GIANT = 24716; +const int IP_CONST_PHOBIA_MAGICAL_BEAST = 24717; +const int IP_CONST_PHOBIA_SHAPECHANGER = 24718; +const int IP_CONST_PHOBIA_UNDEAD = 24719; +const int IP_CONST_PHOBIA_VERMIN = 24720; + +//PnP Familiars +const int IP_CONST_PNP_FAMILIAR = 231; + +// Metamagic Feat Abilities +const int IP_CONST_FEAT_EXTEND_SPELL_ABILITY = 4692; +const int IP_CONST_FEAT_SILENT_SPELL_ABILITY = 4693; +const int IP_CONST_FEAT_STILL_SPELL_ABILITY = 4694; +const int IP_CONST_FEAT_EMPOWER_SPELL_ABILITY = 4695; +const int IP_CONST_FEAT_MAXIMIZE_SPELL_ABILITY = 4696; +const int IP_CONST_FEAT_QUICKEN_SPELL_ABILITY = 4697; +//for use with New Spellbook System +const int IP_CONST_JPM_AUTO_QUICKEN = 4687; +const int IP_CONST_NSB_IMP_COMBAT_CAST = 4688; +const int IP_CONST_NSB_AUTO_STILL = 4689; +const int IP_CONST_NSB_AUTO_QUICKEN = 4690; +const int IP_CONST_NSB_AUTO_SILENT = 4691; + +//:: Sanctify Martial Strike +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_SICKLE = 24721; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_DWARVENAXE = 24722; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_CLUB = 24723; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_DAGGER = 24724; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_LIGHTMACE = 24725; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_MORNINGSTAR = 24726; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF = 24727; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_SHORTSPEAR = 24728; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_SHORTSWORD = 24729; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_RAPIER = 24730; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_SCIMITAR = 24731; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_LONGSWORD = 24732; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_GREATSWORD = 24733; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_HANDAXE = 24734; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_BATTLEAXE = 24735; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_GREATAXE = 24736; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_HALBERD = 24737; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_LIGHTHAMMER = 24738; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_LIGHTFLAIL = 24739; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_WARHAMMER = 24740; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_HEAVYFLAIL = 24741; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_SCYTHE = 24742; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_KATANA = 24743; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_BASTARDSWORD = 24744; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_DIREMACE = 24745; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_DOUBLEAXE = 24746; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_TWOBLADEDSWORD = 24747; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_KAMA = 24748; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_KUKRI = 24749; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_HEAVYCROSSBOW = 24750; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_LIGHTCROSSBOW = 24751; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_SLING = 24752; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_LONGBOW = 24753; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_SHORTBOW = 24754; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_SHURIKEN = 24755; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_DART = 24756; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_WHIP = 24757; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_TRIDENT = 24758; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_MINDBLADE = 24759; +//:: New Weapons +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW = 26550; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_LIGHT_LANCE = 26551; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_HEAVY_PICK = 26552; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_LIGHT_PICK = 26553; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_SAI = 26554; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_NUNCHAKU = 26555; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_FALCHION = 26556; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_SAP = 26557; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_KATAR = 26558; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_HEAVY_MACE = 26559; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_MAUL = 26560; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_DBL_SCIMITAR = 26561; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_GOAD = 26562; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_ELVEN_LIGHTBLADE = 26563; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_ELVEN_THINBLADE = 26564; +const int IP_CONST_FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE = 26565; + +//:: Vile Martial Strike +const int IP_CONST_FEAT_VILE_MARTIAL_CLUB = 24760; +const int IP_CONST_FEAT_VILE_MARTIAL_DAGGER = 24761; +const int IP_CONST_FEAT_VILE_MARTIAL_LIGHTMACE = 24762; +const int IP_CONST_FEAT_VILE_MARTIAL_MORNINGSTAR = 24763; +const int IP_CONST_FEAT_VILE_MARTIAL_QUARTERSTAFF = 24764; +const int IP_CONST_FEAT_VILE_MARTIAL_SHORTSPEAR = 24765; +const int IP_CONST_FEAT_VILE_MARTIAL_SHORTSWORD = 24766; +const int IP_CONST_FEAT_VILE_MARTIAL_RAPIER = 24767; +const int IP_CONST_FEAT_VILE_MARTIAL_SCIMITAR = 24768; +const int IP_CONST_FEAT_VILE_MARTIAL_LONGSWORD = 24769; +const int IP_CONST_FEAT_VILE_MARTIAL_GREATSWORD = 24770; +const int IP_CONST_FEAT_VILE_MARTIAL_HANDAXE = 24771; +const int IP_CONST_FEAT_VILE_MARTIAL_BATTLEAXE = 24772; +const int IP_CONST_FEAT_VILE_MARTIAL_GREATAXE = 24773; +const int IP_CONST_FEAT_VILE_MARTIAL_HALBERD = 24774; +const int IP_CONST_FEAT_VILE_MARTIAL_LIGHTHAMMER = 24775; +const int IP_CONST_FEAT_VILE_MARTIAL_LIGHTFLAIL = 24776; +const int IP_CONST_FEAT_VILE_MARTIAL_WARHAMMER = 24777; +const int IP_CONST_FEAT_VILE_MARTIAL_HEAVYFLAIL = 24778; +const int IP_CONST_FEAT_VILE_MARTIAL_SCYTHE = 24779; +const int IP_CONST_FEAT_VILE_MARTIAL_KATANA = 24780; +const int IP_CONST_FEAT_VILE_MARTIAL_BASTARDSWORD = 24781; +const int IP_CONST_FEAT_VILE_MARTIAL_DIREMACE = 24782; +const int IP_CONST_FEAT_VILE_MARTIAL_DOUBLEAXE = 24783; +const int IP_CONST_FEAT_VILE_MARTIAL_TWOBLADEDSWORD = 24784; +const int IP_CONST_FEAT_VILE_MARTIAL_KAMA = 24785; +const int IP_CONST_FEAT_VILE_MARTIAL_KUKRI = 24786; +const int IP_CONST_FEAT_VILE_MARTIAL_HEAVYCROSSBOW = 24787; +const int IP_CONST_FEAT_VILE_MARTIAL_LIGHTCROSSBOW = 24788; +const int IP_CONST_FEAT_VILE_MARTIAL_SLING = 24789; +const int IP_CONST_FEAT_VILE_MARTIAL_LONGBOW = 24790; +const int IP_CONST_FEAT_VILE_MARTIAL_SHORTBOW = 24791; +const int IP_CONST_FEAT_VILE_MARTIAL_SHURIKEN = 24792; +const int IP_CONST_FEAT_VILE_MARTIAL_DART = 24793; +const int IP_CONST_FEAT_VILE_MARTIAL_SICKLE = 24794; +const int IP_CONST_FEAT_VILE_MARTIAL_DWARVENAXE = 24795; +const int IP_CONST_FEAT_VILE_MARTIAL_WHIP = 24796; +const int IP_CONST_FEAT_VILE_MARTIAL_TRIDENT = 24797; +const int IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE = 24798; + +//:: New Weapons +const int IP_CONST_FEAT_VILE_MARTIAL_EAGLE_CLAW = 26500; +const int IP_CONST_FEAT_VILE_MARTIAL_LIGHT_LANCE = 26501; +const int IP_CONST_FEAT_VILE_MARTIAL_HEAVY_PICK = 26502; +const int IP_CONST_FEAT_VILE_MARTIAL_LIGHT_PICK = 26503; +const int IP_CONST_FEAT_VILE_MARTIAL_SAI = 26504; +const int IP_CONST_FEAT_VILE_MARTIAL_NUNCHAKU = 26505; +const int IP_CONST_FEAT_VILE_MARTIAL_FALCHION = 26506; +const int IP_CONST_FEAT_VILE_MARTIAL_SAP = 26507; +const int IP_CONST_FEAT_VILE_MARTIAL_KATAR = 26508; +const int IP_CONST_FEAT_VILE_MARTIAL_HEAVY_MACE = 26509; +const int IP_CONST_FEAT_VILE_MARTIAL_MAUL = 26510; +const int IP_CONST_FEAT_VILE_MARTIAL_DBL_SCIMITAR = 26511; +const int IP_CONST_FEAT_VILE_MARTIAL_GOAD = 26512; +const int IP_CONST_FEAT_VILE_MARTIAL_ELVEN_LIGHTBLADE = 26513; +const int IP_CONST_FEAT_VILE_MARTIAL_ELVEN_THINBLADE = 26514; +const int IP_CONST_FEAT_VILE_MARTIAL_ELVEN_COURTBLADE = 26515; + + +//Epic Dodge, Epic Prowess +const int IP_CONST_FEAT_EPIC_DODGE = 24799; +const int IP_CONST_FEAT_EPIC_PROWESS = 24810; + +//Epic Toughness +const int IP_CONST_FEAT_EPIC_TOUGHNESS_1 = 24800; +const int IP_CONST_FEAT_EPIC_TOUGHNESS_2 = 24801; +const int IP_CONST_FEAT_EPIC_TOUGHNESS_3 = 24802; +const int IP_CONST_FEAT_EPIC_TOUGHNESS_4 = 24803; +const int IP_CONST_FEAT_EPIC_TOUGHNESS_5 = 24804; +const int IP_CONST_FEAT_EPIC_TOUGHNESS_6 = 24805; +const int IP_CONST_FEAT_EPIC_TOUGHNESS_7 = 24806; +const int IP_CONST_FEAT_EPIC_TOUGHNESS_8 = 24807; +const int IP_CONST_FEAT_EPIC_TOUGHNESS_9 = 24808; +const int IP_CONST_FEAT_EPIC_TOUGHNESS_10 = 24809; + +//Eye of Beholder +const int IP_FEAT_RAY_CHARM_PERSON = 4678; +const int IP_FEAT_RAY_CHARM_MONSTER = 4679; +const int IP_FEAT_RAY_SLEEP = 4680; +const int IP_FEAT_RAY_FLESH_TO_STONE = 4681; +const int IP_FEAT_RAY_DISINTEGRATE = 4682; +const int IP_FEAT_RAY_FEAR = 4683; +const int IP_FEAT_RAY_SLOW = 4684; +const int IP_FEAT_RAY_INFLICT_MODERATE_WOUNDS = 4685; +const int IP_FEAT_RAY_FINGER_OF_DEATH = 4686; + +//Hellfire Warlock +const int IP_FEAT_HELLFIRE_SPEAR = 4671; +const int IP_FEAT_HELLFIRE_GLAIVE = 4672; +const int IP_FEAT_HELLFIRE_BLOW = 4673; +const int IP_FEAT_HELLFIRE_CHAIN = 4674; +const int IP_FEAT_HELLFIRE_CONE = 4675; +const int IP_FEAT_HELLFIRE_LINE = 4676; +const int IP_FEAT_HELLFIRE_DOOM = 4677; + +// Player's Handbook +const int IP_CONST_FEAT_IMPROVED_GRAPPLE = 222; +const int IP_CONST_FEAT_IMPROVED_TRIP = 4394; +const int IP_CONST_FEAT_PRC_IMPROVED_DISARM = 4393; +const int IP_CONST_FEAT_GREAT_FORTITUDE = 202; +const int IP_CONST_FEAT_SCRIBE_SCROLL = 203; + +// Weapons of Legacy Feats +const int IP_CONST_FEAT_LEAST_LEGACY = 4390; +const int IP_CONST_FEAT_LESSER_LEGACY = 4391; +const int IP_CONST_FEAT_GREATER_LEGACY = 4392; + +// Sandstorm +const int IP_CONST_FEAT_IMP_HEAT_ENDURANCE = 4388; +const int IP_CONST_FEAT_HEAT_ENDURANCE = 4389; + +// Frostburn +const int IP_CONST_FEAT_IMP_COLD_ENDURANCE = 4386; +const int IP_CONST_FEAT_COLD_ENDURANCE = 4387; + +// Combat Maneuver +const int IP_CONST_FEAT_COMBAT_MOVE_1 = 4383; +const int IP_CONST_FEAT_COMBAT_MOVE_2 = 4384; +const int IP_CONST_FEAT_COMBAT_MOVE_3 = 4385; + + + +/*////////////////////////////////////////////////// +//////////////// SHADOWCASTING////////////////////// +//////////////////////////////////////////////////*/ + +const int IP_CONST_FEAT_MYST_FLICKER = 4538; +const int IP_CONST_FEAT_DARK_SOUL = 4537; +const int IP_CONST_FEAT_UMBRAL_FIST = 4367; + +const int IP_CONST_FEAT_PATH_FOCUS_CLOAK_SHADOWS = 4411; +const int IP_CONST_FEAT_PATH_FOCUS_DARK_TERRAIN = 4412; +const int IP_CONST_FEAT_PATH_FOCUS_EBON_WHISPERS = 4413; +const int IP_CONST_FEAT_PATH_FOCUS_EYES_DARKNESS = 4414; +const int IP_CONST_FEAT_PATH_FOCUS_SHUTTERS_CLOUDS = 4415; +const int IP_CONST_FEAT_PATH_FOCUS_TOUCH_TWILIGHT = 4416; +const int IP_CONST_FEAT_PATH_FOCUS_UMBRAL_MIND = 4417; +const int IP_CONST_FEAT_PATH_FOCUS_BLACK_MAGIC = 4418; +const int IP_CONST_FEAT_PATH_FOCUS_BODY_SOUL = 4419; +const int IP_CONST_FEAT_PATH_FOCUS_DARK_REFLECTIONS = 4420; +const int IP_CONST_FEAT_PATH_FOCUS_EBON_ROADS = 4421; +const int IP_CONST_FEAT_PATH_FOCUS_ELEMENTAL_SHADOWS = 4422; +const int IP_CONST_FEAT_PATH_FOCUS_UNBINDING_SHADE = 4423; +const int IP_CONST_FEAT_PATH_FOCUS_VEIL_SHADOWS = 4424; +const int IP_CONST_FEAT_PATH_FOCUS_BREATH_TWILIGHT = 4425; +const int IP_CONST_FEAT_PATH_FOCUS_DARK_METAMORPHOSIS = 4426; +const int IP_CONST_FEAT_PATH_FOCUS_EBON_WALLS = 4427; +const int IP_CONST_FEAT_PATH_FOCUS_EYES_NIGHT_SKY = 4428; +const int IP_CONST_FEAT_PATH_FOCUS_HEART_SOUL = 4429; +const int IP_CONST_FEAT_PATH_FOCUS_SHADOW_CALLING = 4430; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_CLOAK_SHADOWS = 4431; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_DARK_TERRAIN = 4432; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_EBON_WHISPERS = 4433; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_EYES_DARKNESS = 4434; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_SHUTTERS_CLOUDS = 4435; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_TOUCH_TWILIGHT = 4436; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_UMBRAL_MIND = 4437; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_BLACK_MAGIC = 4438; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_BODY_SOUL = 4439; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_DARK_REFLECTIONS = 4440; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_EBON_ROADS = 4441; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_ELEMENTAL_SHADOWS = 4442; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_UNBINDING_SHADE = 4443; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_VEIL_SHADOWS = 4444; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_BREATH_TWILIGHT = 4445; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_DARK_METAMORPHOSIS = 4446; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_EBON_WALLS = 4447; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_EYES_NIGHT_SKY = 4448; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_HEART_SOUL = 4449; +const int IP_CONST_FEAT_GREATER_PATH_FOCUS_SHADOW_CALLING = 4450; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_CLOAK_SHADOWS = 4451; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_DARK_TERRAIN = 4452; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_EBON_WHISPERS = 4453; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_EYES_DARKNESS = 4454; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_SHUTTERS_CLOUDS = 4455; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_TOUCH_TWILIGHT = 4456; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_UMBRAL_MIND = 4457; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_BLACK_MAGIC = 4458; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_BODY_SOUL = 4459; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_DARK_REFLECTIONS = 4460; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_EBON_ROADS = 4461; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_ELEMENTAL_SHADOWS = 4462; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_UNBINDING_SHADE = 4463; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_VEIL_SHADOWS = 4464; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_BREATH_TWILIGHT = 4465; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_DARK_METAMORPHOSIS = 4466; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_EBON_WALLS = 4467; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_EYES_NIGHT_SKY = 4468; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_HEART_SOUL = 4469; +const int IP_CONST_FEAT_NOCTURNAL_CASTER_SHADOW_CALLING = 4470; +const int IP_CONST_FEAT_FAV_MYST_BENDPERSPECTIVE = 4471; +const int IP_CONST_FEAT_FAV_MYST_CARPETSHADOW = 4472; +const int IP_CONST_FEAT_FAV_MYST_DUSKANDDAWN = 4473; +const int IP_CONST_FEAT_FAV_MYST_LIFEFADES = 4474; +const int IP_CONST_FEAT_FAV_MYST_MESMERIZINGSHADE = 4475; +const int IP_CONST_FEAT_FAV_MYST_STEELSHADOWS = 4476; +const int IP_CONST_FEAT_FAV_MYST_VOICEOFSHADOW = 4477; +const int IP_CONST_FEAT_FAV_MYST_BLACKFIRE = 4478; +const int IP_CONST_FEAT_FAV_MYST_CONGRESSSHADOWS = 4479; +const int IP_CONST_FEAT_FAV_MYST_FLESHFAILS = 4480; +const int IP_CONST_FEAT_FAV_MYST_PIERCINGSIGHT = 4481; +const int IP_CONST_FEAT_FAV_MYST_SHADOWSKIN = 4482; +const int IP_CONST_FEAT_FAV_MYST_SIGHTECLIPSED = 4483; +const int IP_CONST_FEAT_FAV_MYST_THOUGHTSSHADOW = 4484; +const int IP_CONST_FEAT_FAV_MYST_AFRAIDOFTHEDARK = 4485; +const int IP_CONST_FEAT_FAV_MYST_CLINGINGDARKNESS = 4486; +const int IP_CONST_FEAT_FAV_MYST_DANCINGSHADOWS = 4487; +const int IP_CONST_FEAT_FAV_MYST_FLICKER = 4488; +const int IP_CONST_FEAT_FAV_MYST_KILLINGSHADOWS = 4489; +const int IP_CONST_FEAT_FAV_MYST_SHARPSHADOWS = 4490; +const int IP_CONST_FEAT_FAV_MYST_UMBRALTOUCH = 4491; +const int IP_CONST_FEAT_FAV_MYST_AURAOFSHADE = 4492; +const int IP_CONST_FEAT_FAV_MYST_BOLSTER = 4493; +const int IP_CONST_FEAT_FAV_MYST_SHADOWEVOCATION = 4494; +const int IP_CONST_FEAT_FAV_MYST_SHADOWVISION = 4495; +const int IP_CONST_FEAT_FAV_MYST_SHADOWSFADE = 4496; +const int IP_CONST_FEAT_FAV_MYST_STEPINTOSHADOW = 4497; +const int IP_CONST_FEAT_FAV_MYST_WARPSPELL = 4498; +const int IP_CONST_FEAT_FAV_MYST_CURTAINSHADOWS = 4499; +const int IP_CONST_FEAT_FAV_MYST_DARKAIR = 4500; +const int IP_CONST_FEAT_FAV_MYST_ECHOSPELL = 4501; +const int IP_CONST_FEAT_FAV_MYST_FEIGNLIFE = 4502; +const int IP_CONST_FEAT_FAV_MYST_LANGUOR = 4503; +const int IP_CONST_FEAT_FAV_MYST_PASSINTOSHADOW = 4504; +const int IP_CONST_FEAT_FAV_MYST_UNRAVELDWEOMER = 4505; +const int IP_CONST_FEAT_FAV_MYST_FLOODSHADOWS = 4506; +const int IP_CONST_FEAT_FAV_MYST_GREATERSHADOWEVOCATION = 4507; +const int IP_CONST_FEAT_FAV_MYST_SHADOWINVESTITURE = 4508; +const int IP_CONST_FEAT_FAV_MYST_SHADOWSTORM = 4509; +const int IP_CONST_FEAT_FAV_MYST_SHADOWSFADE_GREATER = 4510; +const int IP_CONST_FEAT_FAV_MYST_UNVEIL = 4511; +const int IP_CONST_FEAT_FAV_MYST_VOYAGESHADOW = 4512; +const int IP_CONST_FEAT_FAV_MYST_DARKSOUL = 4513; +const int IP_CONST_FEAT_FAV_MYST_EPHEMERALIMAGE = 4514; +const int IP_CONST_FEAT_FAV_MYST_LIFEFADESGREATER = 4515; +const int IP_CONST_FEAT_FAV_MYST_PRISONNIGHT = 4516; +const int IP_CONST_FEAT_FAV_MYST_UMBRALSERVANT = 4517; +const int IP_CONST_FEAT_FAV_MYST_TRUTHREVEALED = 4518; +const int IP_CONST_FEAT_FAV_MYST_FARSIGHT = 4519; +const int IP_CONST_FEAT_FAV_MYST_GRFLESHFAILS = 4520; +const int IP_CONST_FEAT_FAV_MYST_SHADOWPLAGUE = 4521; +const int IP_CONST_FEAT_FAV_MYST_SOULPUPPET = 4522; +const int IP_CONST_FEAT_FAV_MYST_TOMBNIGHT = 4523; +const int IP_CONST_FEAT_FAV_MYST_UMBRALBODY = 4524; +const int IP_CONST_FEAT_FAV_MYST_ARMYSHADOW = 4525; +const int IP_CONST_FEAT_FAV_MYST_CONSUMEESSENCE = 4526; +const int IP_CONST_FEAT_FAV_MYST_EPHEMERALSTORM = 4527; +const int IP_CONST_FEAT_FAV_MYST_REFLECTIONS = 4528; +const int IP_CONST_FEAT_FAV_MYST_SHADOWSURGE = 4529; +const int IP_CONST_FEAT_FAV_MYST_SHADOWTIME = 4530; +const int IP_CONST_FEAT_SHADOW_CAST = 4531; +const int IP_CONST_FEAT_EMPOWER_MYSTERY = 4532; +const int IP_CONST_FEAT_EXTEND_MYSTERY = 4533; +const int IP_CONST_FEAT_MAXIMIZE_MYSTERY = 4534; +const int IP_CONST_FEAT_QUICKEN_MYSTERY = 4535; +const int IP_CONST_FEAT_STILL_MYSTERY = 4536; +const int IP_CONST_FEAT_DARK_TEMPLATE_MARKER = 4410; + +// Web Enhancement +const int IP_CONST_PATH_FOCUS_NIGHTS_LONG_FINGERS = 4358; +const int IP_CONST_PATH_FOCUS_DARKENED_ALLEYS = 4359; +const int IP_CONST_PATH_FOCUS_SHADOWSCAPE = 4360; +const int IP_CONST_GREATER_PATH_FOCUS_NIGHTS_LONG_FINGERS = 4361; +const int IP_CONST_GREATER_PATH_FOCUS_DARKENED_ALLEYS = 4362; +const int IP_CONST_GREATER_PATH_FOCUS_SHADOWSCAPE = 4363; +const int IP_CONST_NOCTURNAL_CASTER_NIGHTS_LONG_FINGERS = 4364; +const int IP_CONST_NOCTURNAL_CASTER_DARKENED_ALLEYS = 4365; +const int IP_CONST_NOCTURNAL_CASTER_SHADOWSCAPE = 4366; +const int IP_CONST_FAV_MYST_QUICKERTHANTHEEYE = 4349; +const int IP_CONST_FAV_MYST_TRAILHAZE = 4350; +const int IP_CONST_FAV_MYST_UMBRALFIST = 4351; +const int IP_CONST_FAV_MYST_FEARFULGLOOM = 4352; +const int IP_CONST_FAV_MYST_SICKENINGSHADOW = 4353; +const int IP_CONST_FAV_MYST_DEADLYSHADE = 4354; +const int IP_CONST_FAV_MYST_GRASPINGSHADOWS = 4355; +const int IP_CONST_FAV_MYST_MENAGERIEDARKNESS = 4356; +const int IP_CONST_FAV_MYST_BLACKLABYRINTH = 4357; + +/*////////////////////////////////////////////////// +//////////////// END SHADOWCASTING////////////////// +//////////////////////////////////////////////////*/ \ No newline at end of file diff --git a/src/include/prc_misc_const.nss b/src/include/prc_misc_const.nss new file mode 100644 index 0000000..0575811 --- /dev/null +++ b/src/include/prc_misc_const.nss @@ -0,0 +1,414 @@ +/** @file + * + * Include file for various constants that don't really belong in any of the other files, + * but aren't numerous enough to warrant their own. + */ + + //::////////////////////////////////////////////// + //:: New base item types +//::////////////////////////////////////////////// + +const int BASE_ITEM_GOLEM = 23; //:: not actually used for anything else +const int BASE_ITEM_LIGHT_LANCE = 92; +const int BASE_ITEM_ALCHEMY = 99; //:: not actually used for anything else +const int BASE_ITEM_POISON = 100; //:: not actually used for anything else +const int BASE_ITEM_HEAVY_PICK = 115; +const int BASE_ITEM_LIGHT_PICK = 116; +const int BASE_ITEM_SAI = 117; +const int BASE_ITEM_NUNCHAKU = 118; +const int BASE_ITEM_FALCHION = 119; +const int BASE_ITEM_SAP = 120; +const int BASE_ITEM_KATAR = 121; +const int BASE_ITEM_HEAVY_MACE = 122; +const int BASE_ITEM_MAUL = 123; +const int BASE_ITEM_DOUBLE_SCIMITAR = 124; +const int BASE_ITEM_GOAD = 125; +const int BASE_ITEM_EAGLE_CLAW = 126; +const int BASE_ITEM_CRAFTED_ROD = 199; +const int BASE_ITEM_CRAFTED_STAFF = 201; +const int BASE_ITEM_ELVEN_LIGHTBLADE = 202; +const int BASE_ITEM_ELVEN_THINBLADE = 203; +const int BASE_ITEM_ELVEN_COURTBLADE = 204; + +//::////////////////////////////////////////////// +//:: Player Health Const +//::////////////////////////////////////////////// + +const int ALIVE = 0; +const int BLEEDING = 1; +const int STABLE = 2; +const int DISABLED = 3; +const int DEAD = 4; +const int ALTERED_STATE = 5; + +//::////////////////////////////////////////////// +//:: Area of Effect Const +//::////////////////////////////////////////////// + +const int AOE_MOB_PESTILENCE = 150; +const int AOE_PER_TELEPORTATIONCIRCLE = 151; +const int AOE_PER_DEEPER_DARKNESS = 213; +const int AOE_PER_OBSCURING_MIST = 141; +const int AOE_PER_ACHAIERAI = 206; +const int AOE_PER_UTTERDARK = 205; +const int AOE_PER_DAMNDARK = 203; +const int VFX_MOB_BRILLIANT_EMANATION = 204; +const int AOE_PER_BLNDGLORY = 183; +const int VFX_AOE_RAIN_OF_BLACK_TULIPS = 182; +const int VFX_AOE_RAIN_OF_ROSES = 181; +const int AOE_PER_REPEL_VERMIN = 180; +const int AOE_PER_SOLID_FOG = 179; +const int AOE_PER_REPULSION = 178; +const int AOE_PER_CALM_EMOTIONS = 177; +const int VFX_PER_AVASMASS = 141; +const int VFX_PER_SICKEN_EVIL = 176; +const int VFX_PER_SLEET_STORM = 175; +const int VFX_PER_OTILUKES_RESILIENT_SPHERE = 174; +const int VFX_PER_PRISMATIC_SPHERE = 173; +const int VFX_MOB_RING_OF_BLADES = 172; +const int VFX_PER_PRISMATIC_WALL = 171; +const int AOE_PER_FIRE_TRAP = 170; +const int AOE_PER_PYROTECHNICS_SMOKE = 169; +const int VFX_PER_SNARE = 168; +const int AOE_MOB_MOUNTAIN_AVALANCHE = 167; +const int VFX_MOB_DAYLIGHT = 109; +const int VFX_MOB_CLOUDY_CONJURATION = 99; +const int AOE_PER_CRACKLEPOWDER = 98; +const int AOE_MOB_LUMINOUS_ARMOR = 97; +const int VFX_PER_GREEN_FOG = 96; +const int VFX_PER_RAIN_OF_BLOOD = 95; +const int VFX_PER_RAIN_OF_FROGS = 94; +const int VFX_PER_VIOLET_RAIN = 93; +const int AOE_PER_WALLFROST = 207; +const int AOE_PER_CONSECRATE = 115; +const int AOE_PER_DESECRATE = 111; +const int AOE_PER_WALLDISPEL = 116; + +// Psionic Area of Effects +const int AOE_PER_PSIGREASE = 131; +const int AOE_PER_ESHAMBLER = 132; +const int AOE_PER_ENERGYWALL = 133; +const int AOE_MOB_CATAPSI = 134; +const int AOE_PER_NULL_PSIONICS_FIELD = 135; +const int AOE_MOB_FORM_DOOM = 136; +const int AOE_PER_ENERGYWALL_WIDENED = 137; +const int AOE_PER_ESHAMBLER_WIDENED = 138; +const int AOE_PER_NULL_PSIONICS_FIELD_WIDENED = 139; +const int VFX_PER_NEW_TIMESTOP = 140; + + +// Invisible Area of Effects +const int VFX_PER_5_FT_INVIS = 184; +const int VFX_PER_10_FT_INVIS = 185; +const int VFX_PER_15_FT_INVIS = 186; +const int VFX_PER_20_FT_INVIS = 187; +const int VFX_PER_25_FT_INVIS = 188; +const int VFX_PER_30_FT_INVIS = 189; +const int VFX_PER_5M_INVIS = 190; +const int VFX_PER_10M_INVIS = 191; +const int VFX_PER_15M_INVIS = 192; +const int VFX_PER_20M_INVIS = 193; +const int VFX_PER_25M_INVIS = 194; +const int VFX_PER_30M_INVIS = 195; +const int VFX_PER_35M_INVIS = 196; +const int VFX_PER_40M_INVIS = 197; +const int VFX_PER_45M_INVIS = 198; +const int VFX_PER_50M_INVIS = 199; + +// Knight Area of Effects +const int AOE_MOB_BULWARK_DEFENSE = 162; +const int AOE_MOB_VIGILANT_DEFENDER = 163; + +//Exhaled Barrier Area of Effect +const int AOE_PER_WALLBREATH = 152; + +//Racial AOEs +const int AOE_PER_NYMPH_BLINDING = 225; + +// DNecro Area of Effects +const int AOE_MOB_DN_FEAR_AURA = 254; + +// DragonShaman/Marshal Auras +const int AOE_MOB_DRACONIC_AURA_1 = 153; +const int AOE_MOB_DRACONIC_AURA_2 = 154; +const int AOE_MOB_MARSHAL_MINOR_AURA = 155; +const int AOE_MOB_MARSHAL_MAJOR_AURA = 156; + +//::////////////////////////////////////////////// +//:: Disease Const +//::////////////////////////////////////////////// + +const int DISEASE_CONTAGION_BLINDING_SICKNESS = 20; +const int DISEASE_CONTAGION_CACKLE_FEVER = 21; +const int DISEASE_CONTAGION_FILTH_FEVER = 22; +const int DISEASE_CONTAGION_MINDFIRE = 23; +const int DISEASE_CONTAGION_RED_ACHE = 24; +const int DISEASE_CONTAGION_SHAKES = 25; +const int DISEASE_CONTAGION_SLIMY_DOOM = 26; +const int DISEASE_PESTILENCE = 51; +const int DISEASE_BLUE_GUTS = 53; +const int DISEASE_SOUL_ROT = 54; +const int DISEASE_AGONY_ADDICTION = 55; +const int DISEASE_BACCARAN_ADDICTION = 56; +const int DISEASE_DEVILWEED_ADDICTION = 57; +const int DISEASE_LUHIX_ADDICTION = 58; +const int DISEASE_MUSHROOM_POWDER_ADDICTION = 59; +const int DISEASE_SANNISH_ADDICTION = 60; +const int DISEASE_TERRAN_BRANDY_ADDICTION = 61; +const int DISEASE_VODARE_ADDICTION = 62; + +//::////////////////////////////////////////////// +//:: Poison Const +//::////////////////////////////////////////////// + +const int POISON_TINY_CENTIPEDE_POISON = 122; +const int POISON_MEDIUM_CENTIPEDE_POISON = 123; +const int POISON_LARGE_CENTIPEDE_POISON = 124; +const int POISON_HUGE_CENTIPEDE_POISON = 125; +const int POISON_GARGANTUAN_CENTIPEDE_POISON = 126; +const int POISON_COLOSSAL_CENTIPEDE_POISON = 127; + +const int POISON_TINY_SCORPION_VENOM = 128; +const int POISON_SMALL_SCORPION_VENOM = 129; +const int POISON_MEDIUM_SCORPION_VENOM = 130; +const int POISON_HUGE_SCORPION_VENOM = 131; +const int POISON_GARGANTUAN_SCORPION_VENOM = 132; +const int POISON_COLOSSAL_SCOPRION_VENOM = 133; + +const int POISON_EYEBLAST = 134; +const int POISON_BALOR_BILE = 135; +const int POISON_VILESTAR = 136; +const int POISON_SASSON_JUICE = 137; + +const int POISON_SUFFERFUME = 138; +const int POISON_URTHANYK = 139; +const int POISON_MIST_OF_NOURN = 140; +const int POISON_ISHENTAV = 141; +const int POISON_BURNING_ANGEL_WING_FUMES = 142; + +const int POISON_RAVAGE_GOLDEN_ICE = 100; +const int POISON_RAVAGE_CELESTIAL_LIGHTSBLOOD = 143; +const int POISON_RAVAGE_JADE_WATER = 144; +const int POISON_RAVAGE_PURIFIED_COUATL_VENOM = 145; +const int POISON_RAVAGE_UNICORN_BLOOD = 146; + +//::////////////////////////////////////////////// +//:: Skill Const +//::////////////////////////////////////////////// + +const int SKILL_JUMP = 28; +const int SKILL_TRUESPEAK = 29; +const int SKILL_SENSE_MOTIVE = 30; +const int SKILL_MARTIAL_LORE = 31; +const int SKILL_BALANCE = 32; +const int SKILL_IAIJUTSU_FOCUS = 33; // moved for ride +const int SKILL_CRAFT_ALCHEMY = 34; +const int SKILL_CRAFT_POISON = 35; +const int SKILL_PSICRAFT = 36; +const int SKILL_CLIMB = 37; +const int SKILL_CRAFT_GENERAL = 38; + +//::////////////////////////////////////////////// +//:: Size Const +//::////////////////////////////////////////////// + +const int CREATURE_SIZE_FINE = -1; +/** + * Yes, this is the same as CREATURE_SIZE_INVALID, live with it. + * If it weren't, the constants wouldn't be straight series any longer. + */ +const int CREATURE_SIZE_DIMINUTIVE = 0; +const int CREATURE_SIZE_GARGANTUAN = 6; +const int CREATURE_SIZE_COLOSSAL = 7; + + +//::////////////////////////////////////////////// +//:: Psionic Discipline Const +//::////////////////////////////////////////////// + +// Psionic Disciplines +const int DISCIPLINE_NONE = 0; +const int DISCIPLINE_PSYCHOMETABOLISM = 1; +const int DISCIPLINE_PSYCHOKINESIS = 2; +const int DISCIPLINE_PSYCHOPORTATION = 3; +const int DISCIPLINE_CLAIRSENTIENCE = 4; +const int DISCIPLINE_METACREATIVITY = 5; +const int DISCIPLINE_TELEPATHY = 6; + + +//::////////////////////////////////////////////// +//:: Polymorph Const +//::////////////////////////////////////////////// + +const int POLYMORPH_TYPE_BAT = 47; +const int POLYMORPH_TYPE_WOLF_0 = 133; +const int POLYMORPH_TYPE_WOLF_1 = 134; +const int POLYMORPH_TYPE_WOLF_2 = 135; +const int POLYMORPH_TYPE_WEREWOLF_0 = 136; +const int POLYMORPH_TYPE_WEREWOLF_1 = 137; +const int POLYMORPH_TYPE_WEREWOLF_2 = 138; + +const int POLYMORPH_TYPE_WOLF_0s = 139; +const int POLYMORPH_TYPE_WOLF_1s = 140; +const int POLYMORPH_TYPE_WOLF_2s = 141; +const int POLYMORPH_TYPE_WEREWOLF_0s = 142; +const int POLYMORPH_TYPE_WEREWOLF_1s = 143; +const int POLYMORPH_TYPE_WEREWOLF_2s = 144; + +const int POLYMORPH_TYPE_WOLF_0l = 145; +const int POLYMORPH_TYPE_WOLF_1l = 146; +const int POLYMORPH_TYPE_WOLF_2l = 147; +const int POLYMORPH_TYPE_WEREWOLF_0l = 148; +const int POLYMORPH_TYPE_WEREWOLF_1l = 149; +const int POLYMORPH_TYPE_WEREWOLF_2l = 150; + +//:: Wild Shape: Plant +const int POLYMORPH_TYPE_TREANT = 160; +const int POLYMORPH_TYPE_SHAMBLING_MOUND = 161; +const int POLYMORPH_TYPE_TWIG_BLIGHT = 162; +const int POLYMORPH_TYPE_MYCONID = 163; +const int POLYMORPH_TYPE_ALGOID = 164; + +//:://///////////////// +//:: DOMAIN CONSTANTS +//:: These constants are off by 1 to allow 0 to be the FALSE return value. +//:://///////////////// + +const int PRC_DOMAIN_AIR = 1; +const int PRC_DOMAIN_ANIMAL = 2; +const int PRC_DOMAIN_DEATH = 4; +const int PRC_DOMAIN_DESTRUCTION = 5; +const int PRC_DOMAIN_EARTH = 6; +const int PRC_DOMAIN_EVIL = 7; +const int PRC_DOMAIN_FIRE = 8; +const int PRC_DOMAIN_GOOD = 9; +const int PRC_DOMAIN_HEALING = 10; +const int PRC_DOMAIN_KNOWLEDGE = 11; +const int PRC_DOMAIN_MAGIC = 14; +const int PRC_DOMAIN_PLANT = 15; +const int PRC_DOMAIN_PROTECTION = 16; +const int PRC_DOMAIN_STRENGTH = 17; +const int PRC_DOMAIN_SUN = 18; +const int PRC_DOMAIN_TRAVEL = 19; +const int PRC_DOMAIN_TRICKERY = 20; +const int PRC_DOMAIN_WAR = 21; +const int PRC_DOMAIN_WATER = 22; +const int PRC_DOMAIN_DARKNESS = 31; +const int PRC_DOMAIN_STORM = 32; +const int PRC_DOMAIN_METAL = 33; +const int PRC_DOMAIN_PORTAL = 34; +const int PRC_DOMAIN_FORCE = 35; +const int PRC_DOMAIN_SLIME = 36; +const int PRC_DOMAIN_TYRANNY = 37; +const int PRC_DOMAIN_DOMINATION = 38; +const int PRC_DOMAIN_SPIDER = 39; +const int PRC_DOMAIN_UNDEATH = 40; +const int PRC_DOMAIN_TIME = 41; +const int PRC_DOMAIN_DWARF = 42; +const int PRC_DOMAIN_CHARM = 43; +const int PRC_DOMAIN_ELF = 44; +const int PRC_DOMAIN_FAMILY = 45; +const int PRC_DOMAIN_FATE = 46; +const int PRC_DOMAIN_GNOME = 47; +const int PRC_DOMAIN_ILLUSION = 48; +const int PRC_DOMAIN_HATRED = 49; +const int PRC_DOMAIN_HALFLING = 50; +const int PRC_DOMAIN_NOBILITY = 51; +const int PRC_DOMAIN_OCEAN = 52; +const int PRC_DOMAIN_ORC = 53; +const int PRC_DOMAIN_RENEWAL = 54; +const int PRC_DOMAIN_RETRIBUTION = 55; +const int PRC_DOMAIN_RUNE = 56; +const int PRC_DOMAIN_SPELLS = 57; +const int PRC_DOMAIN_SCALEYKIND = 58; +const int PRC_DOMAIN_BLIGHTBRINGER = 59; +const int PRC_DOMAIN_DRAGON = 60; +const int PRC_DOMAIN_COLD = 61; +const int PRC_DOMAIN_WINTER = 62; + +//::////////////////////////////////////////////// +//:: Trap Const +//::////////////////////////////////////////////// + +const int TRAP_BASE_TYPE_PRGT = 100; +const int TRAP_BASE_TYPE_TELECIRCLE = 101; +const int TRAP_BASE_TYPE_SYMBOL = 102; + +//::////////////////////////////////////////////// +//:: Breath Const +//::////////////////////////////////////////////// + +const int BREATH_NORMAL = 0; +const int BREATH_PYROCLASTIC = 1; +const int BREATH_SHADOW = 2; +const int BREATH_SWIFT_WING = 3; +const int BREATH_TOPAZ = 4; +const int BREATH_PARALYZE = 5; +const int BREATH_SLEEP = 6; +const int BREATH_SLOW = 7; +const int BREATH_WEAKENING = 8; +const int BREATH_SICKENING = 9; + +// ONHIT Spells +const int IP_CONST_ONHIT_CASTSPELL_DRAGONFIRE = 203; +const int IP_CONST_ONHIT_KAPAK_POISON = 204; + + +//::////////////////////////////////////////////// +//:: Wing Const +//::////////////////////////////////////////////// + +const int PRC_WING_TYPE_DRAGON_BRASS = 59; +const int PRC_WING_TYPE_DRAGON_BRONZE = 60; +const int PRC_WING_TYPE_DRAGON_COPPER = 61; +const int PRC_WING_TYPE_DRAGON_SILVER = 62; +const int PRC_WING_TYPE_DRAGON_GOLD = 63; +const int PRC_WING_TYPE_DRAGON_WHITE = 64; +const int PRC_WING_TYPE_DRAGON_BLACK = 65; +const int PRC_WING_TYPE_DRAGON_GREEN = 66; +const int PRC_WING_TYPE_DRAGON_BLUE = 67; +const int PRC_WING_TYPE_DRAGON_RED = 68; +const int PRC_WING_TYPE_DRAGON_BRASS2 = 69; +const int PRC_WING_TYPE_DRAGON_BRONZE2 = 70; +const int PRC_WING_TYPE_DRAGON_COPPER2 = 71; +const int PRC_WING_TYPE_DRAGON_SILVER2 = 72; +const int PRC_WING_TYPE_DRAGON_GOLD2 = 73; +const int PRC_WING_TYPE_DRAGON_WHITE2 = 74; +const int PRC_WING_TYPE_DRAGON_BLACK2 = 75; +const int PRC_WING_TYPE_DRAGON_GREEN2 = 76; +const int PRC_WING_TYPE_DRAGON_BLUE2 = 77; +const int PRC_WING_TYPE_DRAGON_RED2 = 78; + +//::////////////////////////////////////////////// +//:: Tail Const +//::////////////////////////////////////////////// + +const int PRC_TAIL_TYPE_DRAGON_BRASS = 4; +const int PRC_TAIL_TYPE_DRAGON_BRONZE = 5; +const int PRC_TAIL_TYPE_DRAGON_COPPER = 6; +const int PRC_TAIL_TYPE_DRAGON_SILVER = 7; +const int PRC_TAIL_TYPE_DRAGON_GOLD = 8; +const int PRC_TAIL_TYPE_DRAGON_BLACK = 9; +const int PRC_TAIL_TYPE_DRAGON_BLUE = 10; +const int PRC_TAIL_TYPE_DRAGON_GREEN = 11; +const int PRC_TAIL_TYPE_DRAGON_RED = 12; +const int PRC_TAIL_TYPE_DRAGON_WHITE = 13; + +//Morninglord +const int MOD_DAWN_START_HOUR = 6; +const float INTERVAL_BLESSING_OF_DAWN = 15.0; + +//Healer +const int ASSOCIATE_TYPE_CELESTIALCOMPANION = 9; + +//::////////////////////////////////////////////// +//:: Fortification Constants +//::////////////////////////////////////////////// + +const int FORTIFICATION_LIGHT = 25; +const int FORTIFICATION_MEDIUM = 50; +const int FORTIFICATION_MODERATE = 75; +const int FORTIFICATION_HEAVY = 100; + + +//:: void main (){} \ No newline at end of file diff --git a/src/include/prc_nui_com_inc.nss b/src/include/prc_nui_com_inc.nss new file mode 100644 index 0000000..bf9bc51 --- /dev/null +++ b/src/include/prc_nui_com_inc.nss @@ -0,0 +1,530 @@ +#include "prc_nui_consts" +#include "inc_newspellbook" +#include "psi_inc_psifunc" +#include "inc_lookups" +#include "nw_inc_nui" + +// +// GetCurrentSpellLevel +// Gets the current spell level the class can achieve at the current +// caster level (ranging from 0-9) +// +// Arguments: +// nClass:int the ClassID +// nLevel:int the caster level +// +// Returns: +// int the circle the class can achieve currently +// +int GetCurrentSpellLevel(int nClass, int nLevel); + +// +// GetMaxSpellLevel +// Gets the highest possible circle the class can achieve (from 0-9) +// +// Arguments: +// nClass:int the ClassID +// +// Returns: +// int the highest circle that can be achieved +// +int GetMaxSpellLevel(int nClass); + +// +// GetMinSpellLevel +// Gets the lowest possible circle the class can achieve (from 0-9) +// +// Arguments: +// nClass:int the ClassID +// +// Returns: +// int the lowest circle that can be achieved +// +int GetMinSpellLevel(int nClass); + +// +// GetHighestLevelPossibleInClass +// Given a class Id this will determine what the max level of a class can be +// achieved +// +// Arguments: +// nClass:int the ClassID +// +// Returns: +// int the highest possible level the class can achieve +// +int GetHighestLevelPossibleInClass(int nClass); + +// +// GetClassSpellbookFile +// Gets the class 2da spellbook/ability for the given class Id +// +// Arguments: +// nClass:int the classID +// +// Returns: +// string the 2da file name for the spell/abilities of the ClassID +// +string GetClassSpellbookFile(int nClass); + +// +// GetBinderSpellToFeatDictionary +// Sets up the Binder Spell Dictionary that is used to match a binder's vestige +// to their feat. This is constructed based off the binder's known location of +// their feat and spell ranges in the base 2das respectivly. After constructing +// this it will be saved to the player locally as a cached result since we do +// not need to call this again. +// +// Argument: +// oPlayer:object the player +// +// Returns: +// json:Dictionary a dictionary of mapping between the SpellID +// and the FeatID of a vestige ability +// +json GetBinderSpellToFeatDictionary(object oPlayer=OBJECT_SELF); + +// +// GetSpellLevelIcon +// Takes the spell circle int and gets the icon appropriate for it (i.e. 0 turns +// into "ir_cantrips" +// +// Arguments: +// spellLevel:int the spell level we want the icon for +// +// Returns: +// string the spell level icon +// +string GetSpellLevelIcon(int spellLevel); + +// +// GetSpellLevelToolTip +// Gets the spell level tool tip text based on the int spell level provided (i.e. +// 0 turns into "Cantrips") +// +// Arguments: +// spellLevel:int the spell level we want the tooltip for +// +// Returns: +// string the spell level toop tip +// +string GetSpellLevelToolTip(int spellLevel); + +// +// GetSpellIcon +// Gets the spell icon based off the spellId, or featId supplied +// +// Arguments: +// nClass:int the class Id +// featId:int the featId we can use the icon for +// spellId:int the spell Id we want the icon for +// +// Returns: +// json:String the string of the icon we want. +// +json GetSpellIcon(int spellId, int featId=0, int nClass=0); +string GetSpellName(int spellId, int realSpellID=0, int featId=0, int nClass=0); + +// +// GreyOutButton +// Takes NUI Button along with it's width and height and greys it out it with a drawn +// colored rectangle to represent it's not been selected or not valid. +// +// Arguments: +// jButton:json the NUI Button +// w:float the width of the button +// h:float the height of the button +// +// Returns: +// json the NUI button greyed out +// +json GreyOutButton(json jButton, float w, float h); + +// +// CreateGreyOutRectangle +// Creates a grey out rectangle for buttons +// +// Arguments: +// w:float the width of the button +// h:float the height of the button +// +// Returns: +// json the transparant black rectangle +// +json CreateGreyOutRectangle(float w, float h); + +void CreateSpellDescriptionNUI(object oPlayer, int featID, int spellId=0, int realSpellId=0, int nClass=0); +void ClearSpellDescriptionNUI(object oPlayer=OBJECT_SELF); + +int GetCurrentSpellLevel(int nClass, int nLevel) +{ + int currentLevel = nLevel; + + // ToB doesn't have a concept of spell levels, but still match up to it + if(nClass == CLASS_TYPE_WARBLADE + || nClass == CLASS_TYPE_SWORDSAGE + || nClass == CLASS_TYPE_CRUSADER + || nClass == CLASS_TYPE_SHADOWCASTER) + { + return 9; + } + + + // Binders don't really have a concept of spell level + if (nClass == CLASS_TYPE_BINDER + || nClass == CLASS_TYPE_DRAGON_SHAMAN) // they can only reach 1st circle + return 1; + + //Shadowsmith has no concept of spell levels + if (nClass == CLASS_TYPE_SHADOWSMITH) + return 2; + + if (nClass == CLASS_TYPE_WARLOCK + || nClass == CLASS_TYPE_DRAGONFIRE_ADEPT) + return 4; + + // Spont casters have their own function + if(GetSpellbookTypeForClass(nClass) == SPELLBOOK_TYPE_SPONTANEOUS + || nClass == CLASS_TYPE_ARCHIVIST) + { + + int maxLevel = GetMaxSpellLevelForCasterLevel(nClass, currentLevel); + return maxLevel; + } + else + { + // everyone else uses this + string spellLevel2da = GetAMSKnownFileName(nClass); + + currentLevel = nLevel - 1; // Level is 1 off of the row in the 2da + + if (nClass == CLASS_TYPE_FIST_OF_ZUOKEN + || nClass == CLASS_TYPE_PSION + || nClass == CLASS_TYPE_PSYWAR + || nClass == CLASS_TYPE_WILDER + || nClass == CLASS_TYPE_PSYCHIC_ROGUE + || nClass == CLASS_TYPE_WARMIND) + currentLevel = GetManifesterLevel(OBJECT_SELF, nClass, TRUE) - 1; + + int totalLevel = Get2DARowCount(spellLevel2da); + + // in case we somehow go over bounds just don't :) + if (currentLevel >= totalLevel) + currentLevel = totalLevel - 1; + + //Psionics have MaxPowerLevel as their column name + string columnName = "MaxPowerLevel"; + + //Invokers have MaxInvocationLevel + if (nClass == CLASS_TYPE_WARLOCK + || nClass == CLASS_TYPE_DRAGON_SHAMAN + || nClass == CLASS_TYPE_DRAGONFIRE_ADEPT) + columnName = "MaxInvocationLevel"; + + // Truenamers have 3 sets of utterances, ranging from 1-6, EvolvingMind covers the entire range + if (nClass == CLASS_TYPE_TRUENAMER) + { + columnName = "EvolvingMind"; + spellLevel2da = "cls_true_maxlvl"; //has a different 2da we want to look at + } + + if (nClass == CLASS_TYPE_BINDER) + { + columnName = "VestigeLvl"; + spellLevel2da = "cls_bind_binder"; + } + + // ToB doesn't have a concept of this, but we don't care. + + int maxLevel = StringToInt(Get2DACache(spellLevel2da, columnName, currentLevel)); + return maxLevel; + } +} + +int GetMinSpellLevel(int nClass) +{ + // again sponts have their own function + if(GetSpellbookTypeForClass(nClass) == SPELLBOOK_TYPE_SPONTANEOUS + || nClass == CLASS_TYPE_ARCHIVIST) + { + return GetMinSpellLevelForCasterLevel(nClass, GetHighestLevelPossibleInClass(nClass)); + } + else + { + if (nClass == CLASS_TYPE_FIST_OF_ZUOKEN + || nClass == CLASS_TYPE_PSION + || nClass == CLASS_TYPE_PSYWAR + || nClass == CLASS_TYPE_WILDER + || nClass == CLASS_TYPE_PSYCHIC_ROGUE + || nClass == CLASS_TYPE_WARMIND + || nClass == CLASS_TYPE_WARBLADE + || nClass == CLASS_TYPE_SWORDSAGE + || nClass == CLASS_TYPE_CRUSADER + || nClass == CLASS_TYPE_WARLOCK + || nClass == CLASS_TYPE_DRAGONFIRE_ADEPT + || nClass == CLASS_TYPE_DRAGON_SHAMAN + || nClass == CLASS_TYPE_SHADOWCASTER + || nClass == CLASS_TYPE_SHADOWSMITH + || nClass == CLASS_TYPE_BINDER) + return 1; + + return GetCurrentSpellLevel(nClass, 1); + } + +} + +int GetMaxSpellLevel(int nClass) +{ + if (nClass == CLASS_TYPE_WILDER + || nClass == CLASS_TYPE_PSION) + return 9; + if (nClass == CLASS_TYPE_PSYCHIC_ROGUE + || nClass == CLASS_TYPE_FIST_OF_ZUOKEN + || nClass == CLASS_TYPE_WARMIND) + return 5; + if (nClass == CLASS_TYPE_PSYWAR) + return 6; + + return GetCurrentSpellLevel(nClass, GetHighestLevelPossibleInClass(nClass)); +} + +int GetHighestLevelPossibleInClass(int nClass) +{ + string sFile; + + //sponts have their spells in the classes.2da + if(GetSpellbookTypeForClass(nClass) == SPELLBOOK_TYPE_SPONTANEOUS + || nClass == CLASS_TYPE_ARCHIVIST) + { + sFile = Get2DACache("classes", "SpellGainTable", nClass); + } + else + { + // everyone else uses this + sFile = GetAMSKnownFileName(nClass); + + if (nClass == CLASS_TYPE_TRUENAMER) + { + sFile = "cls_true_maxlvl"; //has a different 2da we want to look at + } + + if (nClass == CLASS_TYPE_BINDER) + { + sFile = "cls_bind_binder"; + } + } + + return Get2DARowCount(sFile); +} + +string GetClassSpellbookFile(int nClass) +{ + string sFile; + // Spontaneous casters use a specific file name structure + if(GetSpellbookTypeForClass(nClass) == SPELLBOOK_TYPE_SPONTANEOUS + || nClass == CLASS_TYPE_ARCHIVIST) + { + sFile = GetFileForClass(nClass); + } + // everyone else uses this structure + else + { + sFile = GetAMSDefinitionFileName(nClass); + + if (nClass == CLASS_TYPE_BINDER) + { + sFile = "vestiges"; + } + } + + return sFile; +} + +string GetSpellLevelIcon(int spellLevel) +{ + switch (spellLevel) + { + case 0: return "ir_cantrips"; + case 1: return "ir_level1"; + case 2: return "ir_level2"; + case 3: return "ir_level3"; + case 4: return "ir_level4"; + case 5: return "ir_level5"; + case 6: return "ir_level6"; + case 7: return "ir_level789"; + case 8: return "ir_level789"; + case 9: return "ir_level789"; + } + + return ""; +} + +string GetSpellLevelToolTip(int spellLevel) +{ + switch (spellLevel) + { + case 0: return "Cantrips"; + case 1: return "Level 1"; + case 2: return "Level 2"; + case 3: return "Level 3"; + case 4: return "Level 4"; + case 5: return "Level 5"; + case 6: return "Level 6"; + case 7: return "Level 7"; + case 8: return "Level 8"; + case 9: return "Level 9"; + } + + return ""; +} + + +json GetSpellIcon(int spellId,int featId=0,int nClass=0) +{ + // Binder's spells don't have the FeatID on the spells.2da, so we have to use + // the mapping we constructed to get it. + if (nClass == CLASS_TYPE_BINDER) + { + json binderDict = GetBinderSpellToFeatDictionary(); + int nFeatID = JsonGetInt(JsonObjectGet(binderDict, IntToString(spellId))); + return JsonString(Get2DACache("feat", "Icon", featId)); + } + + if (featId) + return JsonString(Get2DACache("feat", "Icon", featId)); + + int masterSpellID = StringToInt(Get2DACache("spells", "Master", spellId)); + + // if this is a sub radial spell, then we use spell's icon instead + if (masterSpellID) + return JsonString(Get2DACache("spells", "IconResRef", spellId)); + + // the FeatID holds the accurate spell icon, not the SpellID + int nFeatID = StringToInt(Get2DACache("spells", "FeatID", spellId)); + + return JsonString(Get2DACache("feat", "Icon", nFeatID)); +} + +string GetSpellName(int spellId, int realSpellID=0, int featId=0, int nClass=0) +{ + if ((nClass == CLASS_TYPE_SHADOWSMITH + || nClass == CLASS_TYPE_SHADOWCASTER) && spellId) + return GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", spellId))); + if (nClass == CLASS_TYPE_TRUENAMER && featId) + return GetStringByStrRef(StringToInt(Get2DACache("feat", "FEAT", featId))); + if (realSpellID) + return GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", realSpellID))); + if (spellId) + return GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", spellId))); + if (featId) + return GetStringByStrRef(StringToInt(Get2DACache("feat", "FEAT", featId))); + + return GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", spellId))); +} + +json GetBinderSpellToFeatDictionary(object oPlayer=OBJECT_SELF) +{ + // a dictionary of + json binderDict = GetLocalJson(oPlayer, NUI_SPELLBOOK_BINDER_DICTIONARY_CACHE_VAR); + // if this hasn't been created, create it now. + if (binderDict == JsonNull()) + binderDict = JsonObject(); + else + return binderDict; + + // the starting row for binder spells + int spellIndex = 19070; + // the starting row for binder feats + int featIndex = 9030; + //the end of the binder spells/feats + while (spellIndex <= 19156 && featIndex <= 9104) + { + // get the SpellID tied to the feat + int spellID = StringToInt(Get2DACache("feat", "SPELLID", featIndex)); + // if the spellID matches the current index, then this is the spell + // attached to the feat + if (spellID == spellIndex) + { + binderDict = JsonObjectSet(binderDict, IntToString(spellID), JsonInt(featIndex)); + + // move to next spell/feat + featIndex++; + spellIndex++; + } + // else we have reached a subdial spell + else + { + // loop through until we reach back at spellID + while (spellIndex < spellID) + { + int masterSpell = StringToInt(Get2DACache("spells", "Master", spellIndex)); + + // add the sub radial to the dict, tied to the master's FeatID + int featId = JsonGetInt(JsonObjectGet(binderDict, IntToString(masterSpell))); + binderDict = JsonObjectSet(binderDict, IntToString(spellIndex), JsonInt(featId)); + + spellIndex++; + } + + + // some feats overlap the same FeatID, can cause this to get stuck. + // if it happens then move on + if (spellIndex > spellID) + featIndex++; + } + } + + // cache the result + SetLocalJson(oPlayer, NUI_SPELLBOOK_BINDER_DICTIONARY_CACHE_VAR, binderDict); + return binderDict; +} + +json GreyOutButton(json jButton, float w, float h) +{ + json retValue = jButton; + + json jBorders = JsonArray(); + jBorders = JsonArrayInsert(jBorders, CreateGreyOutRectangle(w, h)); + + return NuiDrawList(jButton, JsonBool(FALSE), jBorders); +} + +json CreateGreyOutRectangle(float w, float h) +{ + // set the points of the button shape + json jPoints = JsonArray(); + jPoints = JsonArrayInsert(jPoints, JsonFloat(0.0)); + jPoints = JsonArrayInsert(jPoints, JsonFloat(0.0)); + + jPoints = JsonArrayInsert(jPoints, JsonFloat(0.0)); + jPoints = JsonArrayInsert(jPoints, JsonFloat(h)); + + jPoints = JsonArrayInsert(jPoints, JsonFloat(w)); + jPoints = JsonArrayInsert(jPoints, JsonFloat(h)); + + jPoints = JsonArrayInsert(jPoints, JsonFloat(w)); + jPoints = JsonArrayInsert(jPoints, JsonFloat(0.0)); + + jPoints = JsonArrayInsert(jPoints, JsonFloat(0.0)); + jPoints = JsonArrayInsert(jPoints, JsonFloat(0.0)); + + return NuiDrawListPolyLine(JsonBool(TRUE), NuiColor(0, 0, 0, 127), JsonBool(TRUE), JsonFloat(2.0), jPoints); +} + +void CreateSpellDescriptionNUI(object oPlayer, int featID, int spellId=0, int realSpellId=0, int nClass=0) +{ + SetLocalInt(oPlayer, NUI_SPELL_DESCRIPTION_FEATID_VAR, featID); + SetLocalInt(oPlayer, NUI_SPELL_DESCRIPTION_SPELLID_VAR, spellId); + SetLocalInt(oPlayer, NUI_SPELL_DESCRIPTION_REAL_SPELLID_VAR, realSpellId); + SetLocalInt(oPlayer, NUI_SPELL_DESCRIPTION_CLASSID_VAR, nClass); + ExecuteScript("prc_nui_dsc_view", oPlayer); +} + +void ClearSpellDescriptionNUI(object oPlayer=OBJECT_SELF) +{ + DeleteLocalInt(oPlayer, NUI_SPELL_DESCRIPTION_FEATID_VAR); + DeleteLocalInt(oPlayer, NUI_SPELL_DESCRIPTION_SPELLID_VAR); + DeleteLocalInt(oPlayer, NUI_SPELL_DESCRIPTION_REAL_SPELLID_VAR); + DeleteLocalInt(oPlayer, NUI_SPELL_DESCRIPTION_CLASSID_VAR); +} + diff --git a/src/include/prc_nui_consts.nss b/src/include/prc_nui_consts.nss new file mode 100644 index 0000000..e1e9c5c --- /dev/null +++ b/src/include/prc_nui_consts.nss @@ -0,0 +1,158 @@ +//:://///////////////////////////////////////////// +//:: NUI Constants +//:: prc_nui_consts +//::////////////////////////////////////////////// +/* + This file holds all the constants used by the various PRC NUI scripts. +*/ +//::////////////////////////////////////////////// +//:: Created By: Rakiov +//:: Created On: 24.05.2005 +//::////////////////////////////////////////////// + +const int NUI_PAYLOAD_BUTTON_LEFT_CLICK = 0; +const int NUI_PAYLOAD_BUTTON_MIDDLE_CLICK = 1; +const int NUI_PAYLOAD_BUTTON_RIGHT_CLICK = 2; + + +////////////////////////////////////////////////// +// // +// NUI Spellbook // +// // +////////////////////////////////////////////////// + +// This is the NUI Spellbook window ID +const string PRC_SPELLBOOK_NUI_WINDOW_ID = "prcSpellbookNui"; + +// This is the base Id for the Class buttons in the NUI Spellbook, the ID will +// have the ClassID attached to it (i.e. spellbookClassButton_123) +const string PRC_SPELLBOOK_NUI_CLASS_BUTTON_BASEID = "spellbookClassButton_"; + +// This is the base Id for the Spell Circle buttons in the NUI Spellbook, the ID will +// have the Circle attached to it (i.e. spellbookCircleButton__6) +const string PRC_SPELLBOOK_NUI_CIRCLE_BUTTON_BASEID = "spellbookCircleButton_"; + +// This is the base Id for the Spell Buttons in the NUI Spellbook, the ID will +// have the SpellbookId (the row of the class's spell's 2da or equivalent) +// attached to it (i.e. spellbookSpellButton_6) +const string PRC_SPELLBOOK_NUI_SPELL_BUTTON_BASEID = "spellbookSpellButton_"; + +// This is the base Id for the Meta Feat buttons in the NUI Spellbook, the ID will +// have the FeatID attached to it (i.e. spellbookMetaButton_12345) +const string PRC_SPELLBOOK_NUI_META_BUTTON_BASEID = "spellbookMetaButton_"; + +// This is the selected ClassID var used to store what class was selected to the Player +// locally +const string PRC_SPELLBOOK_SELECTED_CLASSID_VAR = "prcSpellbookSelectedClassID"; + +// This is the selected Circle var used to store what spell circle was selected +// to the Player locally +const string PRC_SPELLBOOK_SELECTED_CIRCLE_VAR = "prcSpellbookSelectedCircle"; + +// This is the Spellbook NUI geomeotry var, used to allow the location and sizing +// of the NUI to be remembered if it is ever rerendered. +const string PRC_SPELLBOOK_NUI_GEOMETRY_VAR = "sbNuiGeometry"; + +// This is the Selected SpellID Var, used to tell the OnTarget script what spell +// we are using after manual targetting +const string NUI_SPELLBOOK_SELECTED_SPELLID_VAR = "NUI_Spellbook_SpellId"; + +// This is the Selected FeatID Var, used to tell the OnTarget script what feat +// we are using after manual targetting +const string NUI_SPELLBOOK_SELECTED_FEATID_VAR = "NUI_Spellbook_FeatID"; + +// This is the Selected SubSpellID Var, used in conjuncture with the Selected FeatID +// to allow radial spells to work (it needs the master spell's featID and the sub spell's +// SpellID for it to work. +const string NUI_SPELLBOOK_SELECTED_SUBSPELL_SPELLID_VAR = "NUI_Spellbook_SubSpellID"; + +// This is the OnTarget action var saved to the player locally to say if we are +// using the NUI Spellbook spell or not. +const string NUI_SPELLBOOK_ON_TARGET_ACTION_VAR = "ONPLAYERTARGET_ACTION"; + +// This is a Boolean to tell the target script if the selected feat is a persoanl feat +// and can only be used on the executing object. +const string NUI_SPELLBOOK_ON_TARGET_IS_PERSONAL_FEAT = "NUI_Spellbook_IsPersonalFeat"; + +const string NUI_SPELL_DESCRIPTION_WINDOW_ID = "NUI_Spell_Description"; +const string NUI_SPELL_DESCRIPTION_OK_BUTTON = "NUIDescriptionOKButton"; + +// This is the limit of how many spell buttons we can have in a row before we +// need to start a new row on the NUI Spellbook. +const int NUI_SPELLBOOK_SPELL_BUTTON_LENGTH = 9; + +const string NUI_SPELLBOOK_BINDER_DICTIONARY_CACHE_VAR = "NUI_Spellbook_GetBinderSpellToFeatDictionaryCache"; +const string NUI_SPELLBOOK_CLASS_STANCES_CACHE_BASE_VAR = "NUI_Spellbook_GetToBStanceSpellListCache_"; +const string NUI_SPELLBOOK_CLASS_SHAPES_CACHE_BASE_VAR = "NUI_Spellbook_GetInvokerShapeSpellListCache_"; +const string NUI_SPELLBOOK_CLASS_ESSENCE_CACHE_BASE_VAR = "NUISpellbookClassEssence_"; + + + +////////////////////////////////////////////////// +// // +// NUI Power Attack // +// // +////////////////////////////////////////////////// + +// The Window ID for the Power Attack NUI +const string NUI_PRC_POWER_ATTACK_WINDOW = "nui_prc_power_attack_window"; + +// LocalVar for the geometry of the Power Attack NUI window +const string NUI_PRC_PA_GEOMETRY_VAR = "paNuiGeometry"; + +// Event For Left "-" button of the Power Attack NUI +const string NUI_PRC_PA_LEFT_BUTTON_EVENT = "nui_prc_pa_left_button_event"; +// Event For Right "+" Button of the Power Attack NUI +const string NUI_PRC_PA_RIGHT_BUTTON_EVENT = "nui_prc_pa_right_button_event"; + +// Bind for Text of the Power Attack NUI saying what the current Power Attack level is +const string NUI_PRC_PA_TEXT_BIND = "nui_prc_pa_text_bind"; +// Left Button Enabled Bind for Power Attack NUI +const string NUI_PRC_PA_LEFT_BUTTON_ENABLED_BIND = "leftButtonEnabled"; +// Right Button Enabled Bind for Power Attack NUI +const string NUI_PRC_PA_RIGHT_BUTTON_ENABLED_BIND = "rightButtonEnabled"; + +////////////////////////////////////////////////// +// // +// NUI Level Up // +// // +////////////////////////////////////////////////// + +const string NUI_LEVEL_UP_WINDOW_ID = "prcLevelUpNui"; + +const string NUI_LEVEL_UP_SPELL_CIRCLE_BUTTON_BASEID = "NuiLevelUpCircleButton_"; +const string NUI_LEVEL_UP_SPELL_BUTTON_BASEID = "NuiLevelUpSpellButton_"; +const string NUI_LEVEL_UP_SPELL_DISABLED_BUTTON_BASEID = "NuiLevelUpDisabledSpellButton_"; +const string NUI_LEVEL_UP_SPELL_CHOSEN_BUTTON_BASEID = "NuiLevelUpChosenSpellButton_"; +const string NUI_LEVEL_UP_SPELL_CHOSEN_DISABLED_BUTTON_BASEID = "NuiLevelUpDisabledChosenSpellButton_"; +const string NUI_LEVEL_UP_DONE_BUTTON = "NuiLevelUpDoneButton"; +const string NUI_LEVEL_UP_RESET_BUTTON = "NuiLevelUpResetButton"; + +const string NUI_LEVEL_UP_SELECTED_CLASS_VAR = "NUILevelUpSelectedClass"; +const string NUI_LEVEL_UP_SELECTED_CIRCLE_VAR = "NUILevelUpSelectedCircle"; +const string NUI_LEVEL_UP_KNOWN_SPELLS_VAR = "NUILevelUpKnownSpells"; +const string NUI_LEVEL_UP_CHOSEN_SPELLS_VAR = "NUILevelUpChosenSpells"; +const string NUI_LEVEL_UP_EXPANDED_KNOW_LIST_VAR = "NUILevelUpExpKnowList"; +const string NUI_LEVEL_UP_POWER_LIST_VAR = "NUILevelUpPowerList"; +const string NUI_LEVEL_UP_DISCIPLINE_INFO_VAR = "GetDisciplineInfoObjectCache_"; +const string NUI_LEVEL_UP_SPELLID_LIST_VAR = "NUILevelUpSpellIDList_"; +const string NUI_LEVEL_UP_REMAINING_CHOICES_CACHE_VAR = "NUIRemainingChoicesCache"; +const string NUI_LEVEL_UP_RELEARN_LIST_VAR = "NUILevelUpRelearnList"; +const string NUI_LEVEL_UP_ARCHIVIST_NEW_SPELLS_LIST_VAR = "NUILevelUpArchivistNewSpellsList"; + +const string NUI_LEVEL_UP_EXPANDED_CHOICES_VAR = "NUIExpandedChoices"; +const string NUI_LEVEL_UP_EPIC_EXPANDED_CHOICES_VAR = "NUIEpicExpandedChoices"; + +const int NUI_LEVEL_UP_MANEUVER_PREREQ_LIMIT = 6; + +const string NUI_LEVEL_UP_MANEUVER_TOTAL = "ManeuverTotal"; +const string NUI_LEVEL_UP_STANCE_TOTAL = "StanceTotal"; + +const string NUI_LEVEL_UP_SPELLBOOK_OBJECT_CACHE_VAR = "GetSpellListObjectCache_"; +const string NUI_LEVEL_UP_KNOWN_INVOCATIONS_CACHE_VAR = "GetInvokerKnownListObjectCache_"; + +const string NUI_SPELL_DESCRIPTION_FEATID_VAR = "NUISpellDescriptionFeatID"; +const string NUI_SPELL_DESCRIPTION_CLASSID_VAR = "NUISpellDescriptionClassID"; +const string NUI_SPELL_DESCRIPTION_SPELLID_VAR = "NUISpellDescriptionSpellID"; +const string NUI_SPELL_DESCRIPTION_REAL_SPELLID_VAR = "NUISpellDescriptionRealSpellID"; + diff --git a/src/include/prc_nui_lv_inc.nss b/src/include/prc_nui_lv_inc.nss new file mode 100644 index 0000000..e59e1b0 --- /dev/null +++ b/src/include/prc_nui_lv_inc.nss @@ -0,0 +1,3342 @@ +//:://///////////////////////////////////////////// +//:: PRC Level Up NUI +//:: prc_nui_lv_inc +//::////////////////////////////////////////////// +/* + This is the logic for the Level Up NUI, holding all the functions needed for + the NUI to operate properly and allow leveling up in different classes. +*/ +//::////////////////////////////////////////////// +//:: Created By: Rakiov +//:: Created On: 20.06.2005 +//::////////////////////////////////////////////// + +#include "prc_nui_com_inc" +#include "tob_inc_tobfunc" +#include "tob_inc_moveknwn" +#include "inv_inc_invfunc" +#include "shd_inc_mystknwn" +#include "shd_inc_shdfunc" +#include "true_inc_truknwn" +#include "true_inc_trufunc" + +//////////////////////////////////////////////////////////////////////////// +/// /// +/// Spont Casters / Base /// +/// /// +//////////////////////////////////////////////////////////////////////////// + +// +// GetSpellListObject +// Gets the JSON Object representation of a class's spellbook 2da. This function +// will cache it's result to the object given to it to avoid further calculations +// and will not clear itself since it does not change. +// +// Arguments: +// nClass:int the ClassID +// oPC:Object the player +// +// Returns: +// Json:Dictionary a dictionary of each circle's spellbook Ids. +// +json GetSpellListObject(int nClass, object oPC=OBJECT_SELF); + +// +// GetKnownSpellListObject +// Gets the JSON Object representation of a player's known spell list. This function +// will temporarily cache it's result to the object given to avoid further calculations. +// However this should be cleared after done using the level up screen or reset. +// +// Arguments: +// nClass:int the ClassID +// oPC:Object the player +// +// Returns: +// Json:Dictionary a dictionary of each circle's known spellbook Ids. +// +json GetKnownSpellListObject(int nClass, object oPC=OBJECT_SELF); + +// +// GetKnownSpellListObject +// Gets the JSON Object representation of a player's chosen spell list. This function +// will temporarily cache it's result to the object given to avoid further calculations. +// However this should be cleared after done using the level up screen or reset. +// +// Arguments: +// nClass:int the ClassID +// oPC:Object the player +// +// Returns: +// Json:Dictionary a dictionary of each circle's chosen spellbook Ids. +// +json GetChosenSpellListObject(int nClass, object oPC=OBJECT_SELF); + +// +// ShouldAddSpellToSpellButtons +// Given a classId and a spellbookId, if the player knows the spell already we +// should not add the spell, otherwise we should +// +// Arguments: +// nClass:int Class ID +// spellbookId:int the spell book ID +// oPC:object the player +// +// Returns: +// int:Boolean TRUE if spell should be added, FALSE otherwise +// +int ShouldAddSpellToSpellButtons(int nClass, int spellbookId, object oPC=OBJECT_SELF); + +// +// OpenNUILevelUpWindow +// Opens the Level Up NUI window for the provided class +// +// Arguments: +// nClass:int the ClassID +// +void OpenNUILevelUpWindow(int nClass, object oPC=OBJECT_SELF); + +// +// CloseNUILevelUpWindow +// Closes the NUI Level Up Window if its open +// +void CloseNUILevelUpWindow(object oPC=OBJECT_SELF); + +// +// GetTrueClassType +// Gets the true class Id for a provided class Id, mostly for RHD and for +// ToB prestige classes +// +// Arguments: +// nClass:int classId +// +// Returns: +// int the true classId based off nClass +// +int GetTrueClassType(int nClass, object oPC=OBJECT_SELF); + +// +// GetRemainingSpellChoices +// Gets the remaining spell choices for a class at the given circle by checking its +// chosen spells and comparing it against the total spells allowed. This value +// is cached on the player and cleared everytime the window is refreshed/closed +// +// Arguments: +// nClass:int the class id +// circleLevel:int the circle being checked +// +// Returns: +// int the amount of choices left at the circle +// +int GetRemainingSpellChoices(int nClass, int circleLevel, object oPC=OBJECT_SELF); + +// +// ShouldSpellButtonBeEnabled +// Checks whether a spell button should be enabled either because all choices have +// been made, replacing spells isn't allowed, or for various other reasons +// +// Arguments: +// nClass:int class id +// circleLevel:int the chosen circle +// spellbookId:int the chosen spell +// +// Returns: +// int:Boolean TRUE if spell button should be enabled, FALSE otherwise +// +int ShouldSpellButtonBeEnabled(int nClass, int circleLevel, int spellbookId, object oPC=OBJECT_SELF); + +// +// AddSpellToChosenList +// Adds spell to the chosen spells list +// +// Arguments: +// nClass:int the classId +// spellbookId:int the spellbook Id +// spellCircle:int the current circle of the spell +// +void AddSpellToChosenList(int nClass, int spellbookId, int spellCircle, object oPC=OBJECT_SELF); + +// +// RemoveSpellFromChosenList +// Removes a spell from the chosen spell list +// +// Arguments: +// nClass:int the class id +// spellbookId:int the spellbook Id +// spellCircle:int the circle of the spell +// +void RemoveSpellFromChosenList(int nClass, int spellbookId, int spellCircle, object oPC=OBJECT_SELF); + +// +// LearnSpells +// gives the player the spells they want to learn based off of the chosen spell +// list in a stored variable +// +// Arguments: +// nClass:int the classId +// +void LearnSpells(int nClass, object oPC=OBJECT_SELF); + +// +// RemoveSpells +// removes spells from the player that they may know currently but aren't selected +// based off lists in stored variables +// +// Arguments: +// nClass:int the classId +// +void RemoveSpells(int nClass, object oPC=OBJECT_SELF); + +// +// FinishLevelUp +// Finishes level up NUI by removing spells, learning spells, clearing cache, then closing the NUI +// +// Arguments: +// nClass:int the class id +// +void FinishLevelUp(int nClass, object oPC=OBJECT_SELF); + +// +// ClearLevelUpNUICaches +// Clears the cache (stored local variables) for the level up NUI so it is +// ready to be used for a new level up +// +// Arguments: +// nClass:int class id +// oPC:object the player object this is stored under +// +void ClearLevelUpNUICaches(int nClass, object oPC=OBJECT_SELF); + +// +// SpellIsWithinObject +// checks whether a spell is within a JSON Object structure used by the remaining +// spells object and known spells object, following this structure +// { +// "circleLevel:int": [ 1,2,3...,spellId], +// ... +// } +// +// Arguments +// nClass:int classId +// spellbookId:int the spellbook Id +// circleLevel:int the chosen circle of the spell +// spellList;JsonObject the spell list object being checked +// +// Returns: +// int:Boolean TRUE if it is in the object, FALSE otherwise +// +int SpellIsWithinObject(int nClass, int spellbookId, int circleLevel, json spellList, object oPC=OBJECT_SELF); + +// +// IsLevelUpNUIOpen +// Checks if the Level Up NUI is open for the player or not +// +// Arguments: +// oPC:object the player object +// +// Returns: +// int:Boolean TRUE if it is, FALSE otherwise +// +int IsLevelUpNUIOpen(object oPC=OBJECT_SELF); + +// +// IsClassAllowedToUseLevelUpNUI +// Is the provided class allowed to use the level up NUI +// +// Arguments: +// nClass:int class id +// +// Returns: +// int:Boolean TRUE if it can, FALSE otherwise +// +int IsClassAllowedToUseLevelUpNUI(int nClass); + +// +// EnabledChosenButton +// determines if a chosen spell button should be enabled or not. It may not due to +// class restrictions, replacing is not enabled, or other reason +// +// Arguments: +// nClass:int the class id +// spellbookId: the spellbook Id +// circleLevel: the spell's circle +// +// Returns: +// int:Boolean TRUE if it should be enabled, FALSE otherwise +// +int EnableChosenButton(int nClass, int spellbookId, int circleLevel, object oPC=OBJECT_SELF); + +// +// ResetChoices +// Action for the Level Up NUI's 'Reset' button, resets choices by clearing the cache of +// the user so their choices are forgotten and they can start over. +// +// Arguments: +// oPC:object the player object +// +void ResetChoices(object oPC=OBJECT_SELF); + +// +// RemoveSpellKnown +// Removes a spell from a player based off class id. This is for classes that +// aren't spont casters where we have to go in and adjust persistant arrays +// to say if a spell is known or not. +// +// Arguments: +// nClass:int class id +// spellbookId:int the spellbook Id +// oPC:object the player object +// nList:int the list we are removing the spell from (extra invocations or expanded knowledge) +// +void RemoveSpellKnown(int nClass, int spellbookId, object oPC=OBJECT_SELF, int nList=0); + +// +// GetSpellIDsKnown +// Gets the SpellIDs list of the given class and list and returns it as a JsonObject following this structure +// { +// "spellId:int": TRUE, +// ... +// } +// +// This is to keep lookups at O(1) processing time. This value is cached and is +// cleared when the player finishes level up +// +// Arguments: +// nClass:int class id +// oPC:object the player object +// nList:int the list we are checking if provided (extra invocations or expanded knowledge) +// +// Returns: +// JsonObject the list of spell ids the class knows in JsonObject format +// +json GetSpellIDsKnown(int nClass, object oPC=OBJECT_SELF, int nList=0); + +// +// ReasonForDisabledSpell +// Provides the reason for why a spell choice is disabled +// +// Arguments: +// nClass:int the class id +// spellbookId:int the spellbook Id +// +// Returns: +// string the reason for the disabled button, empty string otherwise +// +string ReasonForDisabledSpell(int nClass, int spellbookId, object oPC=OBJECT_SELF); + +// +// ReasonForDisabledChosen +// Provides the reason for why a chosen spell button is disabled +// +// Arguments: +// nClass:int the class id +// spellbookId:int the spellbook Id +// +// Returns: +// string the reason for the disabled button, empty string otherwise +// +string ReasonForDisabledChosen(int nClass, int spellbookId, object oPC=OBJECT_SELF); + +// +// GetExpandedChoicesList +// Gets the expanded choices list for a class (the list of expanded knowledge or +// extra invocations). It follows this structure +// +// { +// "spellId:int": TRUE, +// ... +// } +// This is cached to reduce process times and is cleared everytime the window is refreshed/closed +// +// Arguments: +// nClass:int the class id +// +// Returns: +// JsonObject the object representation of the expanded choices +// +json GetExpandedChoicesList(int nClass, object oPC=OBJECT_SELF); + +// +// GetExpandedChoicesList +// Gets the epic expanded choices list for a class (the list of expanded knowledge or +// extra invocations). It follows this structure +// +// { +// "spellId:int": TRUE, +// ... +// } +// This is cached to reduce process times and is cleared everytime the window is refreshed/closed +// +// Arguments: +// nClass:int the class id +// +// Returns: +// JsonObject the object representation of the expanded choices +// +json GetEpicExpandedChoicesList(int nClass, object oPC=OBJECT_SELF); + +// +// GetRemainingExpandedChoices +// Gets the remaining expanded choices for a class based off list, comparing the +// total number of choices allowed and the total number chosen +// +// Arguments: +// nClass: class id +// nList: the list we are checking (extra invocations/expanded knowledge) +// +// Returns: +// int the amount of choices left +// +int GetRemainingExpandedChoices(int nClass, int nList, object oPC=OBJECT_SELF); +// +// IsSpellInExpandedChoices +// tells if a spell is in the expanded choices list or not +// +// Arguments: +// nClass:int class id +// nList:int the list we are checking (extra invocations/expanded knowledge) +// spellId:int the spell id (not the spellbook id) +// +// Returns +// int:Boolean TRUE if it is a expanded choice, FALSE otherwise +// +int IsSpellInExpandedChoices(int nClass, int nList, int spellId, object oPC=OBJECT_SELF); + +// +// GetChosenReplaceListObject +// The chosen list of spells we wish to replace for PnP replacing if Bioware replacing +// is disabled. This is cached and is cleared when the player is finished leveling +// or resets their choices +// +// Arguments: +// oPC:object the player +// +// Returns: +// json the list of spells chosen to replace +// +json GetChosenReplaceListObject(object oPC=OBJECT_SELF); + +//////////////////////////////////////////////////////////////////////////// +/// /// +/// Psionics /// +/// /// +//////////////////////////////////////////////////////////////////////////// + +// +// IsExpKnowledgePower +// checks if a spell is a expanded knowledge spell +// +// Arguments: +// nClass:int class id +// spellbookId:int the spellbook Id +// +// Returns: +// int:Boolean TRUE if the spell is a expanded knowledge spell, FALSE otherwise +// +int IsExpKnowledgePower(int nClass, int spellbookId); + +// +// GetExpKnowledgePowerListRequired +// Tells what list the spell should be added to based on if it was added to the +// expanded choices or epic expanded choices list +// +// Arguments: +// nClass:int the class id +// spellbookId:int the spellbook Id +// +// Returns: +// int -1 for the expanded knowledge list, -2 for the epic expanded knowledge +// list, 0 if just add it to the normal class list +// +int GetExpKnowledgePowerListRequired(int nClass, int spellbookId, object oPC=OBJECT_SELF); + +// +// GetCurrentPowerList +// Gets the current chosen powers list. This is cached and is cleared when the +// player either finishs leveling up or resets. +// +// Arguments: +// oPC:object the player object +// +// Returns: +// JsonArray the list of chosen powers wanting to learn +// +json GetCurrentPowerList(object oPC=OBJECT_SELF); + +// +// ShouldAddPower +// Tells if the power should be added to the list of choices or not. It may not +// be added because its an expanded knowledge choice and you have no more expanded +// knowledge slots, or it may be a restricted spell like psions list +// +// Arguments: +// nClass:int the class id +// spellbookId:int the spellbook id +// +// Returns: +// int:Boolean TRUE if it should be added, FALSE otherwise +// +int ShouldAddPower(int nClass, int spellbookId, object oPC=OBJECT_SELF); + +// +// LearnPowers +// learns the list of chosen powers for the player based off their chosen power list +// +// Arguments: +// nClass:int class id +// oPC:object the player object where stored variables are +// +void LearnPowers(int nClass, object oPC=OBJECT_SELF); + +// +// GetMaxPowerLevelForClass +// gets the max power level for the player based off their level and the class's +// known 2da +// +// Arguments: +// nClass:int the class id +// oPC:object the player +// +// Returns: +// int the max power level (circle) the player can achieve on that class +// +int GetMaxPowerLevelForClass(int nClass, object oPC=OBJECT_SELF); + +// +// GetRemainingPowerChoices +// Gets the remaining power choices the character has at the given chosen circle/power level +// +// Arguments: +// nClass:int class id +// chosenCircle:int the chosen circle/power level +// oPC:object the player +// extra:int should we add the expanded knowledge choices or not +// +// Returns: +// int the number of choices left at the given circle +// +int GetRemainingPowerChoices(int nClass, int chosenCircle, object oPC=OBJECT_SELF, int extra=TRUE); + +//////////////////////////////////////////////////////////////////////////// +/// /// +/// Initiators /// +/// /// +//////////////////////////////////////////////////////////////////////////// + +// +// GetDisciplineInfoObject +// Gets the disciplien info for the given class, telling what the chosen spells +// disicpline is, what type of maneuever it is, the different totals, and prerequisites. +// This is cached and is cleared when the window is refreshed/closed +// +// Argument: +// nClass:int class id +// +// Returns: +// JsonObject the object representation of the chosen spells discipline info +// +json GetDisciplineInfoObject(int nClass, object oPC=OBJECT_SELF); + +// +// HasPreRequisitesForManeuver +// Does the player have the prerequisites for the given spell based off their chosen +// spell list +// +// Arguments: +// nClass:int the class id +// spellbookId:int the spellbook id +// oPC:object the player object with stored variables +// +// Returns: +// int:Boolean, TRUE if you have the prerequisites, FALSE otherwise +// +int HasPreRequisitesForManeuver(int nClass, int spellbookId, object oPC=OBJECT_SELF); + +// +// GetMaxInitiatorCircle +// gets the max circle/level a player can obtain with the given class +// +// Arguments: +// nClass:int the class id +// oPC:object the player +// +// Returns: +// int the highest circle the player can achieve with the class +// +int GetMaxInitiatorCircle(int nClass, object oPC=OBJECT_SELF); + +// +// GetRemainingManeuverChoices +// Gets remaining maneuever choices for the player +// +// Arguments: +// nClass:int class id +// oPC:object the player +// +// Returns: +// int the remaining maneuevers choices +// +int GetRemainingManeuverChoices(int nClass, object oPC=OBJECT_SELF); + +// +// GetRemainingStanceChoices +// Gets remaining stance choices for the player +// +// Arguments: +// nClass:int class id +// oPC:object the player +// +// Returns: +// int the remaining stance choices +// +int GetRemainingStanceChoices(int nClass, object oPC=OBJECT_SELF); + +// +// IsRequiredForOtherManeuvers +// Checks the given prerequisite number and the chosen spells to see if removing it +// will cause it to fail the requirement for other maneuevers +// +// Arguments: +// nClass:int the class id +// prereq:int the chosen spells prerequisite number of maneuevers needed +// discipline:string the chosen spells discipline +// +// Returns: +// int:Boolean TRUE if it is required, FALSE otherwise +// +int IsRequiredForOtherManeuvers(int nClass, int prereq, string discipline, object oPC=OBJECT_SELF); + +// +// IsAllowedDiscipline +// checks to see if the given spell is a allowed discipline for a class +// +// Arguments: +// nClass:int class id +// spellbookId:int the spellbook id +// +// Returns: +// int:boolean TRUE if it is allowed, FALSE otherwise +// +int IsAllowedDiscipline(int nClass, int spellbookId, object oPC=OBJECT_SELF); + +// +// AddSpellDisciplineInfo +// Adds the maneuver's discipline info to the class's discpline object +// +// Arguments: +// sFile:string the class's spell 2da +// spellbookId:int the spellbook Id +// classDisc:JsonObject the class discipline object we are adding to +// +// Returns: +// json:Object the classDisc with the given spells information added +// +json AddSpellDisciplineInfo(string sFile, int spellbookId, json classDisc); + +// +// IsRequiredForToBPRCClass +// tells if a given maneuver is needed to satisfy a PRC's prerequsitie +// +// Arguments: +// nClass:int class id +// spellbookId:int the spellbook id +// +// Returns: +// int:Boolean TRUE if the maneuver is required for a PRC, FALSE otherwise. +// +int IsRequiredForToBPRCClass(int nClass, int spellbookId, object oPC=OBJECT_SELF); + +//////////////////////////////////////////////////////////////////////////// +/// /// +/// Invokers /// +/// /// +//////////////////////////////////////////////////////////////////////////// + +// +// GetInvokerKnownListObject +// gets the invokers known invocations list in object format, needed to tell how many +// of each invocation level does a person know at a given level. This is cached on the +// player and not cleared since it never changes. +// +// Arguments: +// nClass:int class id +// +// Returns: +// json:Object the list of invocations known in json format +// +json GetInvokerKnownListObject(int nClass, object oPC=OBJECT_SELF); + +// +// GetRemainingInvocationChoices +// Gets the remaining invocation choices left +// +// Arguments: +// nClass:int class id +// chosenCircle:int the chosen circle we are checking +// oPC:Object the player +// extra:int should we count the number of extra invocations we have left +// +// Returns: +// int the amount of choices left at the given circle +// +int GetRemainingInvocationChoices(int nClass, int chosenCircle, object oPC=OBJECT_SELF, int extra=TRUE); + +// +// IsExtraChoiceInvocation +// tells if a given spell is a extra invocation choice +// +// Arguments: +// nClass:int class id +// spellbookId:int the spellbook id +// +// Returns: +// int;Boolean TRUE if it is a extra choice, FALSE otherwise +// +int IsExtraChoiceInvocation(int nClass, int spellbookId, object oPC=OBJECT_SELF); + +//////////////////////////////////////////////////////////////////////////// +/// /// +/// Truenamer /// +/// /// +//////////////////////////////////////////////////////////////////////////// + +// +// GetRemainingTruenameChoices +// gets the remaining truename choices left at the given lexicon type +// +// Arguments: +// nClass:int class id +// nType:int the lexicon +// +// Returns: +// int the amount of truename choices left for the given lexicon +// +int GetRemainingTruenameChoices(int nClass, int nType, object oPC=OBJECT_SELF); + +// +// GetLexiconCircleKnownAtLevel +// gets the known circle level for a given lexicon +// +// Arguments: +// nLevel:int the level to check +// nType:int the lexicon we are checking +// +// Returns: +// int the highest circle we can achieve +// +int GetLexiconCircleKnownAtLevel(int nLevel, int nType); + +//////////////////////////////////////////////////////////////////////////// +/// /// +/// Archivist /// +/// /// +//////////////////////////////////////////////////////////////////////////// + +json GetArchivistNewSpellsList(object oPC=OBJECT_SELF); + +//////////////////////////////////////////////////////////////////////////// +/// /// +/// Spont Casters / Base /// +/// /// +//////////////////////////////////////////////////////////////////////////// + +int IsLevelUpNUIOpen(object oPC=OBJECT_SELF) +{ + int nPreviousToken = NuiFindWindow(oPC, NUI_LEVEL_UP_WINDOW_ID); + if (nPreviousToken != 0) + { + return TRUE; + } + + return FALSE; +} + +int IsClassAllowedToUseLevelUpNUI(int nClass) +{ + + if (GetSpellbookTypeForClass(nClass) == SPELLBOOK_TYPE_SPONTANEOUS) + return TRUE; + + if (nClass == CLASS_TYPE_PSYWAR + || nClass == CLASS_TYPE_PSYCHIC_ROGUE + || nClass == CLASS_TYPE_PSION + || nClass == CLASS_TYPE_FIST_OF_ZUOKEN + || nClass == CLASS_TYPE_WILDER + || nClass == CLASS_TYPE_WARMIND) + return TRUE; + + if (nClass == CLASS_TYPE_WARBLADE + || nClass == CLASS_TYPE_SWORDSAGE + || nClass == CLASS_TYPE_CRUSADER) + return TRUE; + + if (nClass == CLASS_TYPE_WARLOCK + || nClass == CLASS_TYPE_DRAGONFIRE_ADEPT + || nClass == CLASS_TYPE_DRAGON_SHAMAN) + return TRUE; + + if (nClass == CLASS_TYPE_SHADOWCASTER + || nClass == CLASS_TYPE_SHADOWSMITH) + return TRUE; + + if (nClass == CLASS_TYPE_TRUENAMER) + return TRUE; + + if (nClass == CLASS_TYPE_ARCHIVIST) + return TRUE; + + return FALSE; +} + +int SpellIsWithinObject(int nClass, int spellbookId, int circleLevel, json spellList, object oPC=OBJECT_SELF) +{ + // check to see if the spell circle isn't empty + json currentList = JsonObjectGet(spellList, IntToString(circleLevel)); + if (currentList == JsonNull()) + return FALSE; + + int totalSpells = JsonGetLength(currentList); + + // then loop through the spell list and find the spell. + int i; + for (i = 0; i < totalSpells; i++) + { + int currentSpell = JsonGetInt(JsonArrayGet(currentList, i)); + if (currentSpell == spellbookId) + return TRUE; + } + + return FALSE; +} + +int AllSpellsAreChosen(int nClass, object oPC=OBJECT_SELF) +{ + // we need the max number of circles a class has. + json spellList = GetSpellListObject(nClass, oPC); + json spellCircles = JsonObjectKeys(spellList); + int totalCircles = JsonGetLength(spellCircles); + + int i; + for (i = 0; i < totalCircles; i++) + { + // loop through each circle and check if you have any remaining choices left + // if you do or you have a deficit then you need to remove or add something + // until you get 0 + int spellCircle = StringToInt(JsonGetString(JsonArrayGet(spellCircles, i))); + int remainingChoices = GetRemainingSpellChoices(nClass, spellCircle, oPC); + if (remainingChoices < 0 || remainingChoices > 0) + return FALSE; + } + + return TRUE; +} + +void AddSpellToChosenList(int nClass, int spellbookId, int spellCircle, object oPC=OBJECT_SELF) +{ + if (GetIsInvocationClass(nClass)) + { + // get the remaining invocation choices left without extra feats + // if it is 0 then we are adding the chosen invocation to the extra lists + int totalInvocations = GetRemainingInvocationChoices(nClass, spellCircle, oPC, FALSE); + if (totalInvocations == 0) + { + string sFile = GetClassSpellbookFile(nClass); + if (GetRemainingExpandedChoices(nClass, INVOCATION_LIST_EXTRA, oPC)) + { + json expList = GetExpandedChoicesList(nClass, oPC); + string spellId = Get2DACache(sFile, "SpellID", spellbookId); + expList = JsonObjectSet(expList, spellId, JsonBool(TRUE)); + SetLocalJson(oPC, NUI_LEVEL_UP_EXPANDED_CHOICES_VAR, expList); + } + else if (GetRemainingExpandedChoices(nClass, INVOCATION_LIST_EXTRA_EPIC, oPC)) + { + json expList = GetEpicExpandedChoicesList(nClass, oPC); + string spellId = Get2DACache(sFile, "SpellID", spellbookId); + expList = JsonObjectSet(expList, spellId, JsonBool(TRUE)); + SetLocalJson(oPC, NUI_LEVEL_UP_EPIC_EXPANDED_CHOICES_VAR, expList); + } + } + } + if (GetIsPsionicClass(nClass)) + { + // if the power is a expanded knowledge than we immediatly add it to the + // extra list, otherwise check to make sure we have made all choices in our + // base list first before adding it to the extra list. + if (IsExpKnowledgePower(nClass, spellbookId) + || GetRemainingPowerChoices(nClass, spellCircle, oPC, FALSE) == 0) + { + string sFile = GetClassSpellbookFile(nClass); + if (GetRemainingExpandedChoices(nClass, POWER_LIST_EXP_KNOWLEDGE, oPC)) + { + json expList = GetExpandedChoicesList(nClass, oPC); + string spellId = Get2DACache(sFile, "SpellID", spellbookId); + expList = JsonObjectSet(expList, spellId, JsonBool(TRUE)); + SetLocalJson(oPC, NUI_LEVEL_UP_EXPANDED_CHOICES_VAR, expList); + } + else if (GetRemainingExpandedChoices(nClass, POWER_LIST_EPIC_EXP_KNOWLEDGE, oPC)) + { + json expList = GetEpicExpandedChoicesList(nClass, oPC); + string spellId = Get2DACache(sFile, "SpellID", spellbookId); + expList = JsonObjectSet(expList, spellId, JsonBool(TRUE)); + SetLocalJson(oPC, NUI_LEVEL_UP_EPIC_EXPANDED_CHOICES_VAR, expList); + } + } + + // add the power to the current power list. + json currPowerList = GetCurrentPowerList(oPC); + currPowerList = JsonArrayInsert(currPowerList, JsonInt(spellbookId)); + SetLocalJson(oPC, NUI_LEVEL_UP_POWER_LIST_VAR, currPowerList); + } + + if (nClass == CLASS_TYPE_ARCHIVIST) + { + json newSpells = GetArchivistNewSpellsList(oPC); + newSpells = JsonArrayInsert(newSpells, JsonInt(spellbookId)); + SetLocalJson(oPC, NUI_LEVEL_UP_ARCHIVIST_NEW_SPELLS_LIST_VAR, newSpells); + } + + // base logic for spont casters, add the spell to the ChosenSpells JSON object + // by adding it to it's appropriate circle. + json chosenSpells = GetChosenSpellListObject(nClass, oPC); + json spellsAtCircle = JsonObjectGet(chosenSpells, IntToString(spellCircle)); + if (spellsAtCircle == JsonNull()) + spellsAtCircle = JsonArray(); + spellsAtCircle = JsonArrayInsert(spellsAtCircle, JsonInt(spellbookId)); + chosenSpells = JsonObjectSet(chosenSpells, IntToString(spellCircle), spellsAtCircle); + SetLocalJson(oPC, NUI_LEVEL_UP_CHOSEN_SPELLS_VAR, chosenSpells); + + // if we are not using bioware unlearning logic, then we need to limit the + // amount of spells we can replace. + if (!GetPRCSwitch(PRC_BIO_UNLEARN)) + { + json unlearnList = GetChosenReplaceListObject(oPC); + // if the spell belongs to the unlearn list, then remove it to make room + // for a new spell. + if (JsonObjectGet(unlearnList, IntToString(spellbookId)) != JsonNull()) + { + unlearnList = JsonObjectDel(unlearnList, IntToString(spellbookId)); + SetLocalJson(oPC, NUI_LEVEL_UP_RELEARN_LIST_VAR, unlearnList); + } + } +} + +void RemoveSpellFromChosenList(int nClass, int spellbookId, int spellCircle, object oPC=OBJECT_SELF) +{ + json chosenSpells = GetChosenSpellListObject(nClass, oPC); + json spellsAtCircle = JsonObjectGet(chosenSpells, IntToString(spellCircle)); + if (spellsAtCircle == JsonNull()) + spellsAtCircle = JsonArray(); + + int totalSpells = JsonGetLength(spellsAtCircle); + + // find the spell at the circle in the chosen list and remove it. + int i; + for (i = 0; i < totalSpells; i++) + { + if (spellbookId == JsonGetInt(JsonArrayGet(spellsAtCircle, i))) + { + spellsAtCircle = JsonArrayDel(spellsAtCircle, i); + break; + } + } + + chosenSpells = JsonObjectSet(chosenSpells, IntToString(spellCircle), spellsAtCircle); + SetLocalJson(oPC, NUI_LEVEL_UP_CHOSEN_SPELLS_VAR, chosenSpells); + + // if we re not using bioware unlearn logic we need to limit how many spells + // can be replaced + if (!GetPRCSwitch(PRC_BIO_UNLEARN)) + { + json knownSpells = GetKnownSpellListObject(nClass, oPC); + json spellListAtCircle = JsonObjectGet(knownSpells, IntToString(spellCircle)); + int totalSpells = JsonGetLength(spellListAtCircle); + + // with the list of known spells, check the selected circle and see if the + // current spell belongs in the already known spell list. + for (i = 0; i < totalSpells; i++) + { + int chosenSpell = JsonGetInt(JsonArrayGet(spellListAtCircle, i)); + if (chosenSpell == spellbookId) + { + // if it does we need to add the spell to the unlearn JSON object to track what spells + // are being replaced. + json unlearnList = GetChosenReplaceListObject(oPC); + unlearnList = JsonObjectSet(unlearnList, IntToString(spellbookId), JsonBool(TRUE)); + SetLocalJson(oPC, NUI_LEVEL_UP_RELEARN_LIST_VAR, unlearnList); + break; + } + } + } + + if (GetIsPsionicClass(nClass)) + { + string sFile = GetClassSpellbookFile(nClass); + string spellId = Get2DACache(sFile, "SpellID", spellbookId); + + // for psionics we need to check if the removed spell was a expanded knowledge choice + // or not. The id of the list is -1 or -2. + int i; + for (i == -1; i >= -2; i--) + { + json expList = (i == -1) ? GetExpandedChoicesList(nClass, oPC) : + GetEpicExpandedChoicesList(nClass, oPC); + + //if the spell belongs in the expanded knowledge list, then we need + // to remove it. + if (JsonObjectGet(expList, spellId) != JsonNull()) + { + expList = JsonObjectDel(expList, spellId); + if (i == POWER_LIST_EXP_KNOWLEDGE) + SetLocalJson(oPC, NUI_LEVEL_UP_EXPANDED_CHOICES_VAR, expList); + else + SetLocalJson(oPC, NUI_LEVEL_UP_EPIC_EXPANDED_CHOICES_VAR, expList); + } + } + + // then we need to remove the power from the selected powers list. + json currPowerChoices = GetCurrentPowerList(oPC); + int totalPowers = JsonGetLength(currPowerChoices); + + for (i = 0; i < totalPowers; i++) + { + if (spellbookId == JsonGetInt(JsonArrayGet(currPowerChoices, i))) + { + currPowerChoices = JsonArrayDel(currPowerChoices, i); + break; + } + } + + SetLocalJson(oPC, NUI_LEVEL_UP_POWER_LIST_VAR, currPowerChoices); + } + if (GetIsInvocationClass(nClass)) + { + string sFile = GetClassSpellbookFile(nClass); + string spellId = Get2DACache(sFile, "SpellID", spellbookId); + + // for invocations we need to check if the spell was added to the extra + // invocations list, the list ids are the invalid class id, and -2 + int i; + for (i = 0; i <= 1; i++) + { + json expList = (i == 0) ? GetExpandedChoicesList(nClass, oPC) : + GetEpicExpandedChoicesList(nClass, oPC); + + // if the spell was found, remove it. + if (JsonObjectGet(expList, spellId) != JsonNull()) + { + expList = JsonObjectDel(expList, spellId); + if (i == 0) + SetLocalJson(oPC, NUI_LEVEL_UP_EXPANDED_CHOICES_VAR, expList); + else + SetLocalJson(oPC, NUI_LEVEL_UP_EPIC_EXPANDED_CHOICES_VAR, expList); + } + } + } + if (nClass == CLASS_TYPE_ARCHIVIST) + { + json newSpells = GetArchivistNewSpellsList(oPC); + int totalNew = JsonGetLength(newSpells); + + int i; + for (i = 0; i < totalNew; i++) + { + int newSpellbookId = JsonGetInt(JsonArrayGet(newSpells, i)); + if (newSpellbookId == spellbookId) + { + newSpells = JsonArrayDel(newSpells, i); + SetLocalJson(oPC, NUI_LEVEL_UP_ARCHIVIST_NEW_SPELLS_LIST_VAR, newSpells); + break; + } + } + } +} + +void OpenNUILevelUpWindow(int nClass, object oPC=OBJECT_SELF) +{ + CloseNUILevelUpWindow(oPC); + // set the NUI to the given classId + int currentClass = GetLocalInt(oPC, NUI_LEVEL_UP_SELECTED_CLASS_VAR); + // we need to clear the cache if it was used before to avoid weird behaviors + ClearLevelUpNUICaches(currentClass, oPC); + // sometimes we are given a different classId instead of the base, we need to + // figure out what the true base class is (mostly true for RHD) + int chosenClass = GetTrueClassType(nClass, oPC); + SetLocalInt(oPC, NUI_LEVEL_UP_SELECTED_CLASS_VAR, chosenClass); + + ExecuteScript("prc_nui_lv_view", oPC); +} + +int GetTrueClassType(int nClass, object oPC=OBJECT_SELF) +{ + if (nClass == CLASS_TYPE_JADE_PHOENIX_MAGE + || nClass == CLASS_TYPE_MASTER_OF_NINE + || nClass == CLASS_TYPE_DEEPSTONE_SENTINEL + || nClass == CLASS_TYPE_BLOODCLAW_MASTER + || nClass == CLASS_TYPE_RUBY_VINDICATOR + || nClass == CLASS_TYPE_ETERNAL_BLADE + || nClass == CLASS_TYPE_SHADOW_SUN_NINJA) + { + int trueClass = GetPrimaryBladeMagicClass(oPC); + return trueClass; + } + + if ((nClass == CLASS_TYPE_SHAPECHANGER + && GetRacialType(oPC) == RACIAL_TYPE_ARANEA) + || (nClass == CLASS_TYPE_OUTSIDER + && GetRacialType(oPC) == RACIAL_TYPE_RAKSHASA) + || (nClass == CLASS_TYPE_ABERRATION + && GetRacialType(oPC) == RACIAL_TYPE_DRIDER) + || (nClass == CLASS_TYPE_MONSTROUS + && GetRacialType(oPC) == RACIAL_TYPE_ARKAMOI) + || (nClass == CLASS_TYPE_MONSTROUS + && GetRacialType(oPC) == RACIAL_TYPE_HOBGOBLIN_WARSOUL) + || (nClass == CLASS_TYPE_MONSTROUS + && GetRacialType(oPC) == RACIAL_TYPE_REDSPAWN_ARCANISS) + || (nClass == CLASS_TYPE_MONSTROUS + && GetRacialType(oPC) == RACIAL_TYPE_MARRUTACT)) + return CLASS_TYPE_SORCERER; + if (nClass == CLASS_TYPE_FEY + && GetRacialType(oPC) == RACIAL_TYPE_GLOURA) + return CLASS_TYPE_BARD; + + return nClass; +} + +void CloseNUILevelUpWindow(object oPC=OBJECT_SELF) +{ + int currentClass = GetLocalInt(oPC, NUI_LEVEL_UP_SELECTED_CLASS_VAR); + // if we are refreshing the NUI but not finished we need to clear some caching done + // to save computation time as they will need to be reprocessed. + DeleteLocalJson(oPC, NUI_LEVEL_UP_DISCIPLINE_INFO_VAR + IntToString(currentClass)); + SetLocalInt(oPC, NUI_LEVEL_UP_REMAINING_CHOICES_CACHE_VAR, -20); + int nPreviousToken = NuiFindWindow(oPC, NUI_LEVEL_UP_WINDOW_ID); + if (nPreviousToken != 0) + { + NuiDestroy(oPC, nPreviousToken); + } +} + +int ShouldSpellButtonBeEnabled(int nClass, int circleLevel, int spellbookId, object oPC=OBJECT_SELF) +{ + // logic for psionics + if (GetIsPsionicClass(nClass)) + { + int maxLevel = GetMaxPowerLevelForClass(nClass, oPC); + if (circleLevel > maxLevel) + return FALSE; + + // if its an expanded knowledge choice and we have already made all our + // exp knowledge choices then it needs to be disabled. + if (IsExpKnowledgePower(nClass, spellbookId)) + { + int remainingExp = GetRemainingExpandedChoices(nClass, POWER_LIST_EXP_KNOWLEDGE, oPC) + + GetRemainingExpandedChoices(nClass, POWER_LIST_EPIC_EXP_KNOWLEDGE, oPC); + if (!remainingExp) + return FALSE; + } + } + + if (GetIsShadowMagicClass(nClass)) + { + // mysteries are weird, the circles are sectioned by 1-3, 4-6, 7-9 + // if you do not have at least 2 choices from a circle you can't progress up + // so you can have access to circles 1,2,4,7,8 + int nType = 1; + if (circleLevel >= 4 && circleLevel <= 6) + nType = 2; + if (circleLevel >= 7 && circleLevel <= 9) + nType = 3; + int maxPossibleCircle = GetMaxMysteryLevelLearnable(oPC, nClass, nType); + if (circleLevel > maxPossibleCircle) + return FALSE; + } + + if (GetIsTruenamingClass(nClass)) + { + string sFile = GetClassSpellbookFile(nClass); + int lexicon = StringToInt(Get2DACache(sFile, "Lexicon", spellbookId)); + // each lexicon learns at different rates + int maxCircle = GetLexiconCircleKnownAtLevel(GetLevelByClass(nClass, oPC), lexicon); + if (circleLevel > maxCircle) + return FALSE; + + if (GetRemainingTruenameChoices(nClass, lexicon, oPC)) + return TRUE; + return FALSE; + } + + // logic for ToB + if (GetIsBladeMagicClass(nClass)) + { + if (circleLevel > GetMaxInitiatorCircle(nClass, oPC)) + return FALSE; + + // if you do not have the prerequisite amount of maneuevers to learn + // the maneuever, then you can't learn it. + if (!HasPreRequisitesForManeuver(nClass, spellbookId, oPC)) + return FALSE; + + // maneuvers and stances have their own seperate limits + string sFile = GetClassSpellbookFile(nClass); + int type = StringToInt(Get2DACache(sFile, "Type", spellbookId)); + if (type == MANEUVER_TYPE_BOOST + || type == MANEUVER_TYPE_COUNTER + || type == MANEUVER_TYPE_STRIKE + || type == MANEUVER_TYPE_MANEUVER) + { + int remainingMan = GetRemainingManeuverChoices(nClass, oPC); + if (remainingMan) + return TRUE; + return FALSE; + } + if (type == MANEUVER_TYPE_STANCE) + { + int remainingStance = GetRemainingStanceChoices(nClass, oPC); + if (remainingStance) + return TRUE; + return FALSE; + } + } + + if (nClass == CLASS_TYPE_ARCHIVIST) + { + int maxLevel = GetMaxSpellLevelForCasterLevel(nClass, GetCasterLevelByClass(nClass, oPC)); + if (circleLevel > maxLevel) + return FALSE; + } + + // default logic + // determine remaining Spell/Power choices left for player, if there is any + // remaining, enable the buttons. + if (GetRemainingSpellChoices(nClass, circleLevel, oPC)) + return TRUE; + + return FALSE; +} + +int ShouldAddSpellToSpellButtons(int nClass, int spellbookId, object oPC=OBJECT_SELF) +{ + json chosenSpells = GetChosenSpellListObject(nClass, oPC); + string sFile = GetClassSpellbookFile(nClass); + + string spellLevel = Get2DACache(sFile, "Level", spellbookId); + json chosenSpellsAtCircle = JsonObjectGet(chosenSpells, spellLevel); + + int chosenSpellCount = JsonGetLength(chosenSpellsAtCircle); + + // if the spell is in the chosen list, then don't add it to the available list + int i; + for (i = 0; i < chosenSpellCount; i++) + { + int chosenSpellId = JsonGetInt(JsonArrayGet(chosenSpellsAtCircle, i)); + if (chosenSpellId == spellbookId) + return FALSE; + } + + if (GetIsBladeMagicClass(nClass)) + return IsAllowedDiscipline(nClass, spellbookId, oPC); + + // if a psionic class we need to see if the power is a expanded knowledge + // choice and if we should show it or not + if (GetIsPsionicClass(nClass)) + return ShouldAddPower(nClass, spellbookId, oPC); + + // for these set of classes we need to only allow 'advanced learning' + // spells to be added + if (nClass == CLASS_TYPE_BEGUILER + || nClass == CLASS_TYPE_DREAD_NECROMANCER + || nClass == CLASS_TYPE_WARMAGE) + { + int advancedLearning = StringToInt(Get2DACache(sFile, "AL", spellbookId)); + if (advancedLearning) + return TRUE; + return FALSE; + } + + if (nClass == CLASS_TYPE_ARCHIVIST) + { + int nLevel = GetLevelByClass(nClass, oPC); + if ((StringToInt(spellLevel) == 0) && (nLevel == 1)) + return FALSE; + int advancedLearning = StringToInt(Get2DACache(sFile, "AL", spellbookId)); + if (advancedLearning) + return FALSE; + } + + return TRUE; +} + +json GetChosenSpellListObject(int nClass, object oPC=OBJECT_SELF) +{ + json retValue = GetLocalJson(oPC, NUI_LEVEL_UP_CHOSEN_SPELLS_VAR); + // if this isn't set yet then we the chosen currently is the known spells + if (retValue == JsonNull()) + { + retValue = GetKnownSpellListObject(nClass, oPC); + SetLocalJson(oPC, NUI_LEVEL_UP_CHOSEN_SPELLS_VAR, retValue); + } + + return retValue; +} + +json GetKnownSpellListObject(int nClass, object oPC=OBJECT_SELF) +{ + json retValue = GetLocalJson(oPC, NUI_LEVEL_UP_KNOWN_SPELLS_VAR); + if (retValue == JsonNull()) + retValue = JsonObject(); + else + return retValue; + + string sFile = GetClassSpellbookFile(nClass); + int totalSpells = Get2DARowCount(sFile); + + if (nClass == CLASS_TYPE_ARCHIVIST) + { + int i; + for (i = 0; i < 10; i++) + { + string sSpellbook = GetSpellsKnown_Array(nClass, i); + + int nSize = persistant_array_get_size(oPC, sSpellbook); + + int j; + for (j = 0; j < nSize; j++) + { + int knownSpellbookID = persistant_array_get_int(oPC, sSpellbook, j); + // we store things in a JSON Object where the spell circle + // is the key to a JsonArray of spellbookIds. + json spellList = JsonObjectGet(retValue, IntToString(i)); + if (spellList == JsonNull()) + spellList = JsonArray(); + spellList = JsonArrayInsert(spellList, JsonInt(knownSpellbookID)); + retValue = JsonObjectSet(retValue, IntToString(i), spellList); + } + } + } + else + { + // loop through all the spells in the class's 2da + int i; + for (i = 0; i < totalSpells; i++) + { + int featId = StringToInt(Get2DACache(sFile, "FeatID", i)); + // if you have the feat, you know the spell + if (featId && GetHasFeat(featId, oPC, TRUE)) + { + string spellLevel = Get2DACache(sFile, "Level", i); + int nSpellLevel = StringToInt(spellLevel); + // some spells have **** as their level, so make sure we have + // parsed it correctly + if (IntToString(nSpellLevel) == spellLevel) + { + // we store things in a JSON Object where the spell circle + // is the key to a JsonArray of spellbookIds. + json spellList = JsonObjectGet(retValue, spellLevel); + if (spellList == JsonNull()) + spellList = JsonArray(); + spellList = JsonArrayInsert(spellList, JsonInt(i)); + retValue = JsonObjectSet(retValue, spellLevel, spellList); + } + } + } + } + + SetLocalJson(oPC, NUI_LEVEL_UP_KNOWN_SPELLS_VAR, retValue); + return retValue; +} + +json GetSpellListObject(int nClass, object oPC=OBJECT_SELF) +{ + json retValue = GetLocalJson(oPC, NUI_LEVEL_UP_SPELLBOOK_OBJECT_CACHE_VAR + IntToString(nClass)); + if (retValue == JsonNull()) + retValue = JsonObject(); + else + return retValue; + + string sFile = GetClassSpellbookFile(nClass); + int totalSpells = Get2DARowCount(sFile); + + // loop through all the spells in the 2da and convert it to a JSON Object representation + int i; + for (i = 0; i < totalSpells; i++) + { + string spellLevel = Get2DACache(sFile, "Level", i); + int nSpellLevel = StringToInt(spellLevel); + // some spells in the list have **** as spell level. We need to ignore them + if (IntToString(nSpellLevel) == spellLevel) + { + if (nClass == CLASS_TYPE_ARCHIVIST) + { + int reqFeat = StringToInt(Get2DACache(sFile, "ReqFeat", i)); + if (!reqFeat) + { + json spellList = JsonObjectGet(retValue, spellLevel); + if (spellList == JsonNull()) + spellList = JsonArray(); + spellList = JsonArrayInsert(spellList, JsonInt(i)); + retValue = JsonObjectSet(retValue, spellLevel, spellList); + } + } + else + { + json spellList = JsonObjectGet(retValue, spellLevel); + if (spellList == JsonNull()) + spellList = JsonArray(); + spellList = JsonArrayInsert(spellList, JsonInt(i)); + retValue = JsonObjectSet(retValue, spellLevel, spellList); + } + } + } + + SetLocalJson(oPC, NUI_LEVEL_UP_SPELLBOOK_OBJECT_CACHE_VAR + IntToString(nClass), retValue); + return retValue; +} + +int GetRemainingSpellChoices(int nClass, int circleLevel, object oPC=OBJECT_SELF) +{ + int chosenCircle = GetLocalInt(oPC, NUI_LEVEL_UP_SELECTED_CIRCLE_VAR); + int remainingChoices = 0; + + // we only want to cache on the current circle. + if (chosenCircle == circleLevel) + { + remainingChoices = GetLocalInt(oPC, NUI_LEVEL_UP_REMAINING_CHOICES_CACHE_VAR); + // -20 is the chosen number to say there is no cache set since 0 is + // a valid option + if (remainingChoices != -20) + return remainingChoices; + } + + // logic for psionics + if (GetIsPsionicClass(nClass)) + remainingChoices = GetRemainingPowerChoices(nClass, circleLevel, oPC); + + // logic for ToB + if (GetIsBladeMagicClass(nClass)) + remainingChoices = (GetRemainingManeuverChoices(nClass, oPC) + + GetRemainingStanceChoices(nClass, oPC)); + + // logic for Invokers + if (GetIsInvocationClass(nClass)) + remainingChoices = GetRemainingInvocationChoices(nClass, circleLevel, oPC); + + // logic for mysteries + if (GetIsShadowMagicClass(nClass)) + { + int totalChosen = 0; + json chosenSpells = GetChosenSpellListObject(nClass, oPC); + json circles = JsonObjectKeys(chosenSpells); + int totalCircles = JsonGetLength(circles); + + int i; + for (i = 0; i < totalCircles; i++) + { + // loop through each circle and add its total spells together since + // we don't care about where you spend your spells, only the amount + string currentCircle = JsonGetString(JsonArrayGet(circles, i)); + json spellList = JsonObjectGet(chosenSpells, currentCircle); + if (spellList != JsonNull()) + totalChosen += JsonGetLength(spellList); + } + + int maxKnown = GetMaxMysteryCount(oPC, nClass); + remainingChoices = (maxKnown - totalChosen); + } + + if (GetIsTruenamingClass(nClass)) + remainingChoices = GetRemainingTruenameChoices(nClass, -1, oPC); + + if (nClass == CLASS_TYPE_ARCHIVIST) + { + int nLevel = GetLevelByClass(CLASS_TYPE_ARCHIVIST, oPC); + int spellsAvailable; + if (nLevel == 1) + spellsAvailable = (3 + GetAbilityModifier(ABILITY_INTELLIGENCE, oPC)); + else + spellsAvailable = 2; + + json newSpells = GetArchivistNewSpellsList(oPC); + int totalNewSpells = JsonGetLength(newSpells); + remainingChoices = (spellsAvailable - totalNewSpells); + } + if (GetSpellbookTypeForClass(nClass) == SPELLBOOK_TYPE_SPONTANEOUS) + { + json chosenSpells = GetChosenSpellListObject(nClass, oPC); + int totalSpellsKnown = 0; + int casterLevel = GetCasterLevelByClass(nClass, oPC); + + // these specific classes only learn at specific rates + int advancedLearning = 0; + // beguiler learns every 4th level starting on 3 + if (nClass == CLASS_TYPE_BEGUILER) + advancedLearning = ((casterLevel+1)/4); + // dread learns every 4th level + if (nClass == CLASS_TYPE_DREAD_NECROMANCER) + advancedLearning = (casterLevel/4); + // warmage is a bastard child that choses when it learns a spell whenever + // it decides it feels like it wants to + if (nClass == CLASS_TYPE_WARMAGE) + { + if (casterLevel >= 3) // 1 choice + advancedLearning++; + if (casterLevel >= 6) // 2 choice + advancedLearning++; + if (casterLevel >= 11) // 3 choice + advancedLearning++; + if (casterLevel >= 16) // 4 choice + advancedLearning++; + if (casterLevel >= 24) // 5 choice + advancedLearning++; + if (casterLevel >= 28) // 6 choice + advancedLearning++; + if (casterLevel >= 32) // 7 choice + advancedLearning++; + if (casterLevel >= 36) // 8 choice + advancedLearning++; + if (casterLevel >= 40) // 9 choice + advancedLearning++; + } + + if (advancedLearning) + { + int maxSpellLevel = GetMaxSpellLevelForCasterLevel(nClass, casterLevel); + // can't learn what you can't achieve + if (circleLevel > maxSpellLevel) + remainingChoices = 0; + else + { + int chosenSpellsAmount = 0; + + json circles = JsonObjectKeys(chosenSpells); + int totalCircles = JsonGetLength(circles); + string sFile = GetClassSpellbookFile(nClass); + + int i; + for (i = 0; i <= totalCircles; i++) + { + string currentCircle = JsonGetString(JsonArrayGet(circles, i)); + json spellList = JsonObjectGet(chosenSpells, currentCircle); + if ((spellList != JsonNull())) + { + // loop through the spells of a given circle and count how + // many advanced learning spells you know + int numOfSpells = JsonGetLength(spellList); + int j; + for (j = 0; j < numOfSpells; j++) + { + int nSpellbookID = JsonGetInt(JsonArrayGet(spellList, j)); + int isAL = StringToInt(Get2DACache(sFile, "AL", nSpellbookID)); + if (isAL) + chosenSpellsAmount++; + } + } + } + + remainingChoices = (advancedLearning - chosenSpellsAmount); + } + } + else + { + // default logic for spont casters + totalSpellsKnown = GetSpellKnownMaxCount(casterLevel, circleLevel, nClass, oPC); + // Favoured Soul has more 0 choices than there are spells for some reason + if (nClass == CLASS_TYPE_FAVOURED_SOUL && circleLevel == 0 && totalSpellsKnown > 6) + totalSpellsKnown = 6; + + // logic for spont casters + json selectedCircle = JsonObjectGet(chosenSpells, IntToString(circleLevel)); + if (selectedCircle == JsonNull()) + return totalSpellsKnown; + + int selectedSpellCount = JsonGetLength(selectedCircle); + remainingChoices = (totalSpellsKnown - selectedSpellCount); + } + } + + if (chosenCircle == circleLevel) + SetLocalInt(oPC, NUI_LEVEL_UP_REMAINING_CHOICES_CACHE_VAR, remainingChoices); + return remainingChoices; +} + +void FinishLevelUp(int nClass, object oPC=OBJECT_SELF) +{ + RemoveSpells(nClass, oPC); + LearnSpells(nClass, oPC); + if (nClass == CLASS_TYPE_ARCHIVIST) + { + int nLevel = GetLevelByClass(nClass, oPC); + SetPersistantLocalInt(oPC, "LastSpellGainLevel", nLevel); + } + if (GetIsBladeMagicClass(nClass)) + { + DeletePersistantLocalInt(oPC, "AllowedDisciplines"); + } + ClearLevelUpNUICaches(nClass, oPC); +} + +void ClearLevelUpNUICaches(int nClass, object oPC=OBJECT_SELF) +{ + // clear the chosen spells you made + DeleteLocalJson(oPC, NUI_LEVEL_UP_CHOSEN_SPELLS_VAR); + // clear the known spells you have + DeleteLocalJson(oPC, NUI_LEVEL_UP_KNOWN_SPELLS_VAR); + SetLocalInt(oPC, NUI_LEVEL_UP_SELECTED_CIRCLE_VAR, -1); + DeleteLocalInt(oPC, NUI_LEVEL_UP_SELECTED_CLASS_VAR); + // clear the psionics selected choices + DeleteLocalJson(oPC, NUI_LEVEL_UP_POWER_LIST_VAR); + // clear the expanded choices for psionics and invokers + DeleteLocalJson(oPC, NUI_LEVEL_UP_EXPANDED_CHOICES_VAR); + DeleteLocalJson(oPC, NUI_LEVEL_UP_EPIC_EXPANDED_CHOICES_VAR); + // clear the PnP replace list + DeleteLocalJson(oPC, NUI_LEVEL_UP_RELEARN_LIST_VAR); + DeleteLocalJson(oPC, NUI_LEVEL_UP_ARCHIVIST_NEW_SPELLS_LIST_VAR); + // for invocation and psionics we grab the list of known extra spells and cache it + // so we need to clear those caches + if (GetIsInvocationClass(nClass)) + { + DeleteLocalJson(oPC, NUI_LEVEL_UP_SPELLID_LIST_VAR + IntToString(nClass) + "_0"); + DeleteLocalJson(oPC, NUI_LEVEL_UP_SPELLID_LIST_VAR + IntToString(nClass) + "_" + IntToString(INVOCATION_LIST_EXTRA)); + DeleteLocalJson(oPC, NUI_LEVEL_UP_SPELLID_LIST_VAR + IntToString(nClass) + "_" + IntToString(INVOCATION_LIST_EXTRA_EPIC)); + } + if (GetIsPsionicClass(nClass)) + { + DeleteLocalJson(oPC, NUI_LEVEL_UP_SPELLID_LIST_VAR + IntToString(nClass) + "_0"); + DeleteLocalJson(oPC, NUI_LEVEL_UP_SPELLID_LIST_VAR + IntToString(nClass) + "_" + IntToString(POWER_LIST_EXP_KNOWLEDGE)); + DeleteLocalJson(oPC, NUI_LEVEL_UP_SPELLID_LIST_VAR + IntToString(nClass) + "_" + IntToString(POWER_LIST_EPIC_EXP_KNOWLEDGE)); + } + // for ToB we need to clear all the discipline info for determining PrC choice validity + if (GetIsBladeMagicClass(nClass)) + { + DeleteLocalJson(oPC, NUI_LEVEL_UP_DISCIPLINE_INFO_VAR + IntToString(CLASS_TYPE_SWORDSAGE)); + DeleteLocalJson(oPC, NUI_LEVEL_UP_DISCIPLINE_INFO_VAR + IntToString(CLASS_TYPE_WARBLADE)); + DeleteLocalJson(oPC, NUI_LEVEL_UP_DISCIPLINE_INFO_VAR + IntToString(CLASS_TYPE_CRUSADER)); + } +} + +void RemoveSpells(int nClass, object oPC=OBJECT_SELF) +{ + // we don't remove on psionic classes and archivist + if (GetIsPsionicClass(nClass) || nClass == CLASS_TYPE_ARCHIVIST) + return; + + json knownSpells = GetKnownSpellListObject(nClass, oPC); + json chosenSpells = GetChosenSpellListObject(nClass, oPC); + json spellCircles = JsonObjectKeys(knownSpells); + int totalCircles = JsonGetLength(spellCircles); + + // loop through all the known spells circles + int i; + for (i = 0; i < totalCircles; i++) + { + string sSpellLevel = JsonGetString(JsonArrayGet(spellCircles, i)); + int nSpellLevel = StringToInt(sSpellLevel); + + json chosenCircle = JsonObjectGet(knownSpells, sSpellLevel); + int totalSpells = JsonGetLength(chosenCircle); + + // loop through the spell list at the given circle + int y; + for (y = 0; y < totalSpells; y++) + { + int nSpellbookID = JsonGetInt(JsonArrayGet(chosenCircle, y)); + // if the spell is not a chosen spell, then it was removed + if (!SpellIsWithinObject(nClass, nSpellbookID, nSpellLevel, chosenSpells, oPC)) + { + if (GetIsInvocationClass(nClass)) + { + string sFile = GetClassSpellbookFile(nClass); + string spellId = Get2DACache(sFile, "SpellID", nSpellbookID); + int chosenList = 0; + // check to see if its a extra invocation choice and set it's chosen list + if (GetHasFeat(FEAT_EXTRA_INVOCATION_I, oPC)) + { + json expList = GetSpellIDsKnown(nClass, oPC, INVOCATION_LIST_EXTRA); + if (JsonObjectGet(expList, spellId) != JsonNull()) + chosenList = INVOCATION_LIST_EXTRA; + } + if (GetHasFeat(FEAT_EPIC_EXTRA_INVOCATION_I, oPC)) + { + json expList = GetSpellIDsKnown(nClass, oPC, INVOCATION_LIST_EXTRA_EPIC); + if (JsonObjectGet(expList, spellId) != JsonNull()) + chosenList = INVOCATION_LIST_EXTRA_EPIC; + } + RemoveSpellKnown(nClass, nSpellbookID, oPC, chosenList); + } + if (GetIsBladeMagicClass(nClass) || GetIsShadowMagicClass(nClass)) + RemoveSpellKnown(nClass, nSpellbookID, oPC); + + if (GetSpellbookTypeForClass(nClass) == SPELLBOOK_TYPE_SPONTANEOUS) + { + string sFile = GetClassSpellbookFile(nClass); + string sSpellBook = GetSpellsKnown_Array(nClass); + // remove the spell from the spellbook + array_extract_int(oPC, sSpellBook, nSpellbookID); + // wipe the spell from the player + int ipFeatID = StringToInt(Get2DACache(sFile, "IPFeatID", nSpellbookID)); + WipeSpellFromHide(ipFeatID, oPC); + } + } + } + } +} + +void LearnSpells(int nClass, object oPC=OBJECT_SELF) +{ + if (GetIsPsionicClass(nClass)) + { + LearnPowers(nClass, oPC); + return; + } + + json chosenSpells = GetChosenSpellListObject(nClass, oPC); + json knownSpells = GetKnownSpellListObject(nClass, oPC); + json spellCircles = JsonObjectKeys(chosenSpells); + int totalCircles = JsonGetLength(spellCircles); + + // loop through chosen spells circles + int i; + for (i = 0; i < totalCircles; i++) + { + string sSpellLevel = JsonGetString(JsonArrayGet(spellCircles, i)); + int nSpellLevel = StringToInt(sSpellLevel); + + json chosenCircle = JsonObjectGet(chosenSpells, sSpellLevel); + int totalSpells = JsonGetLength(chosenCircle); + + // loop through the spell list at the circle + int y; + for (y = 0; y < totalSpells; y++) + { + int nSpellbookID = JsonGetInt(JsonArrayGet(chosenCircle, y)); + // if the spell is not in the known spell list then it was newly added + if (!SpellIsWithinObject(nClass, nSpellbookID, nSpellLevel, knownSpells, oPC)) + { + if (GetIsTruenamingClass(nClass)) + { + string sFile = GetClassSpellbookFile(nClass); + // find out what lexicon it belongs to and add it to that + int lexicon = StringToInt(Get2DACache(sFile, "Lexicon", nSpellbookID)); + AddUtteranceKnown(oPC, nClass, nSpellbookID, lexicon, TRUE, GetHitDice(oPC)); + } + + if (GetIsShadowMagicClass(nClass)) + AddMysteryKnown(oPC, nClass, nSpellbookID, TRUE, GetHitDice(oPC)); + + if (GetIsInvocationClass(nClass)) + { + string sFile = GetClassSpellbookFile(nClass); + string spellId = Get2DACache(sFile, "SpellID", nSpellbookID); + int chosenList = nClass; + json expList = GetExpandedChoicesList(nClass, oPC); + // if the invocation belongs to the extra or epic extra list + // then we need to provide those list ids instead. + if (JsonObjectGet(expList, spellId) != JsonNull()) + chosenList = INVOCATION_LIST_EXTRA; + expList = GetEpicExpandedChoicesList(nClass, oPC); + if (JsonObjectGet(expList, spellId) != JsonNull()) + chosenList = INVOCATION_LIST_EXTRA_EPIC; + AddInvocationKnown(oPC, chosenList, nSpellbookID, TRUE, GetHitDice(oPC)); + } + + if (GetIsBladeMagicClass(nClass)) + { + string sFile = GetClassSpellbookFile(nClass); + int maneuverType = StringToInt(Get2DACache(sFile, "Type", nSpellbookID)); + // we save our moves either to stance or maneuever + if (maneuverType != MANEUVER_TYPE_STANCE) + maneuverType = MANEUVER_TYPE_MANEUVER; + + AddManeuverKnown(oPC, nClass, nSpellbookID, maneuverType, TRUE, GetHitDice(oPC)); + } + int nSpellbookType = GetSpellbookTypeForClass(nClass); + if (nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS + || nClass == CLASS_TYPE_ARCHIVIST) + { + // these classes have their own syste, + if (nClass == CLASS_TYPE_BEGUILER + || nClass == CLASS_TYPE_DREAD_NECROMANCER + || nClass == CLASS_TYPE_WARMAGE) + { + int casterLevel = GetCasterLevelByClass(nClass, oPC); + // this is taken from prc_s_spellgain as it is coupled with the + // dynamic dialogue system + int advancedLearning = 0; + // beguilers learn every 4th level starting on 3rd + if (nClass == CLASS_TYPE_BEGUILER) + advancedLearning = ((casterLevel+1)/4); + // dread learns every 4th level + if (nClass == CLASS_TYPE_DREAD_NECROMANCER) + advancedLearning = (casterLevel/4); + if (nClass == CLASS_TYPE_WARMAGE) + { + if (casterLevel >= 3) + advancedLearning++; + } + + if (advancedLearning) + { + // incremenet the total advanced learning known + int nAdvLearn = GetPersistantLocalInt(oPC, "AdvancedLearning_"+IntToString(nClass)); + nAdvLearn++; + SetPersistantLocalInt(oPC, "AdvancedLearning_"+IntToString(nClass), nAdvLearn); + } + } + + // get location of persistant storage on the hide + string sSpellbook = GetSpellsKnown_Array(nClass, nSpellLevel); + //object oToken = GetHideToken(oPC); + + // Create spells known persistant array if it is missing + int nSize = persistant_array_get_size(oPC, sSpellbook); + if (nSize < 0) + { + persistant_array_create(oPC, sSpellbook); + nSize = 0; + } + + // Mark the spell as known (e.g. add it to the end of oPCs spellbook) + persistant_array_set_int(oPC, sSpellbook, nSize, nSpellbookID); + + if (nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS) + { + // add spell + string sFile = GetClassSpellbookFile(nClass); + string sArrayName = "NewSpellbookMem_" + IntToString(nClass); + int featId = StringToInt(Get2DACache(sFile, "FeatID", nSpellbookID)); + int ipFeatID = StringToInt(Get2DACache(sFile, "IPFeatID", nSpellbookID)); + AddSpellUse(oPC, nSpellbookID, nClass, sFile, sArrayName, nSpellbookType, GetPCSkin(oPC), featId, ipFeatID); + } + } + } + } + } +} + +int EnableChosenButton(int nClass, int spellbookId, int circleLevel, object oPC=OBJECT_SELF) +{ + if (GetIsPsionicClass(nClass) + || GetIsShadowMagicClass(nClass) + || GetIsTruenamingClass(nClass) + || nClass == CLASS_TYPE_DREAD_NECROMANCER + || nClass == CLASS_TYPE_BEGUILER + || nClass == CLASS_TYPE_WARMAGE + || nClass == CLASS_TYPE_ARCHIVIST) + { + json knownSpells = GetKnownSpellListObject(nClass, oPC); + json currentCircle = JsonObjectGet(knownSpells, IntToString(circleLevel)); + int totalSpells = JsonGetLength(currentCircle); + int i; + for (i = 0; i < totalSpells; i++) + { + // if spell belongs to known spells, then disable, we don't allow + // replacing for these classes. + int currentSpellbookId = JsonGetInt(JsonArrayGet(currentCircle, i)); + if (currentSpellbookId == spellbookId) + return FALSE; + } + + } + + if (GetIsBladeMagicClass(nClass)) + { + string sFile = GetClassSpellbookFile(nClass); + int prereqs = StringToInt(Get2DACache(sFile, "Prereqs", spellbookId)); + string discipline = Get2DACache(sFile, "Discipline", spellbookId); + // if the maneuver is required for others to exist, t hen disable it + if (IsRequiredForOtherManeuvers(nClass, prereqs, discipline, oPC)) + return FALSE; + // if it is required for a PRC to exist, then disable it. + if (IsRequiredForToBPRCClass(nClass, spellbookId, oPC)) + return FALSE; + } + + if (GetIsInvocationClass(nClass)) + { + // dragon Shamans can't replace + if (nClass == CLASS_TYPE_DRAGON_SHAMAN) + { + json invokKnown = GetSpellIDsKnown(nClass, oPC); + string sFile = GetClassSpellbookFile(nClass); + string spellId = Get2DACache(sFile, "SpellID", spellbookId); + json chosenSpell = JsonObjectGet(invokKnown, spellId); + if (chosenSpell != JsonNull()) + return FALSE; + } + } + + // If we do not use the bioware unlearn system, we follow PnP + if (!GetPRCSwitch(PRC_BIO_UNLEARN)) + { + json knownSpells = GetKnownSpellListObject(nClass, oPC); + json currentCircle = JsonObjectGet(knownSpells, IntToString(circleLevel)); + int totalSpells = JsonGetLength(currentCircle); + int i; + for (i = 0; i < totalSpells; i++) + { + int currentSpellbookId = JsonGetInt(JsonArrayGet(currentCircle, i)); + // if the spell belongs to the known spell list, then we need to determine + if (currentSpellbookId == spellbookId) + { + json unlearnList = GetChosenReplaceListObject(oPC); + int totalUnlearned = JsonGetLength(unlearnList); + int totalAllowed = GetPRCSwitch(PRC_UNLEARN_SPELL_MAXNR); + // we default to 1 if no max number of unlearns is set + if (!totalAllowed) + totalAllowed = 1; + // we cannot replace a spell if we have more than or equal to the + // amount of relearns allowed, therefore disable. + return totalUnlearned < totalAllowed; + } + } + + } + + return TRUE; +} + +void ResetChoices(object oPC=OBJECT_SELF) +{ + // reset choices made so far + DeleteLocalJson(oPC, NUI_LEVEL_UP_CHOSEN_SPELLS_VAR); + DeleteLocalJson(oPC, NUI_LEVEL_UP_POWER_LIST_VAR); + DeleteLocalJson(oPC, NUI_LEVEL_UP_EXPANDED_CHOICES_VAR); + DeleteLocalJson(oPC, NUI_LEVEL_UP_EPIC_EXPANDED_CHOICES_VAR); + DeleteLocalJson(oPC, NUI_LEVEL_UP_RELEARN_LIST_VAR); + DeleteLocalJson(oPC, NUI_LEVEL_UP_ARCHIVIST_NEW_SPELLS_LIST_VAR); +} + +void RemoveSpellKnown(int nClass, int spellbookId, object oPC=OBJECT_SELF, int nList=0) +{ + string sBase; + string levelArrayBaseId; + string generalArrayBaseId; + string totalCountId; + + string sFile = GetClassSpellbookFile(nClass); + int chosenList = (nList != 0) ? nList : nClass; + int spellID = StringToInt(Get2DACache(sFile, "SpellID", spellbookId)); + + // if statements are to change the location of the spellbook we are grabbing + if (GetIsShadowMagicClass(nClass)) + { + sBase = _MYSTERY_LIST_NAME_BASE + IntToString(chosenList); + levelArrayBaseId = _MYSTERY_LIST_LEVEL_ARRAY; + generalArrayBaseId = _MYSTERY_LIST_GENERAL_ARRAY; + totalCountId = _MYSTERY_LIST_TOTAL_KNOWN; + } + + if (GetIsInvocationClass(nClass)) + { + sBase = _INVOCATION_LIST_NAME_BASE + IntToString(chosenList); + levelArrayBaseId = _INVOCATION_LIST_LEVEL_ARRAY; + generalArrayBaseId = _INVOCATION_LIST_GENERAL_ARRAY; + totalCountId = _INVOCATION_LIST_TOTAL_KNOWN; + } + + if (GetIsBladeMagicClass(nClass)) + { + int maneuverType = StringToInt(Get2DACache(sFile, "Type", spellbookId)); + if (maneuverType != MANEUVER_TYPE_STANCE) maneuverType = MANEUVER_TYPE_MANEUVER; + sBase = _MANEUVER_LIST_NAME_BASE + IntToString(chosenList) + IntToString(maneuverType); + levelArrayBaseId = _MANEUVER_LIST_LEVEL_ARRAY; + generalArrayBaseId = _MANEUVER_LIST_GENERAL_ARRAY; + totalCountId = _MANEUVER_LIST_TOTAL_KNOWN; + } + + if (GetIsTruenamingClass(nClass)) + { + string lexicon = Get2DACache(sFile, "Lexicon", spellbookId); + sBase = _UTTERANCE_LIST_NAME_BASE + IntToString(chosenList) + lexicon; + levelArrayBaseId = _UTTERANCE_LIST_LEVEL_ARRAY; + generalArrayBaseId = _UTTERANCE_LIST_GENERAL_ARRAY; + totalCountId = _UTTERANCE_LIST_TOTAL_KNOWN; + } + + string sTestArray; + + int found = FALSE; + + int i; + for (i = 1; i <= GetHitDice(oPC); i++) + { + sTestArray = sBase + levelArrayBaseId + IntToString(i); + if (persistant_array_exists(oPC, sTestArray)) + { + // if we found the spell, then we remove it. + if (persistant_array_extract_int(oPC, sTestArray, spellID) >= 0) + { + found = TRUE; + break; + } + } + } + + if (!found) + { + // if not found we check the general list where spells aren't set to a level. + sTestArray = sBase + generalArrayBaseId; + if (persistant_array_exists(oPC, sTestArray)) + { + //if we could not find the spell here, something went wrong + if (persistant_array_extract_int(oPC, sTestArray, spellID) < 0) + { + SendMessageToPC(oPC, "Could not find spellID " + IntToString(spellID) + " in the class's spellbook!"); + return; + } + } + } + + // decrement the amount of spells known. + SetPersistantLocalInt(oPC, sBase + totalCountId, + GetPersistantLocalInt(oPC, sBase + totalCountId) - 1 + ); + + // if ToB we need to decrement the specific discipline as well. + if (GetIsBladeMagicClass(nClass)) + { + int maneuverType = StringToInt(Get2DACache(sFile, "Type", spellbookId)); + if (maneuverType == MANEUVER_TYPE_BOOST + || maneuverType == MANEUVER_TYPE_COUNTER + || maneuverType == MANEUVER_TYPE_STRIKE + || maneuverType == MANEUVER_TYPE_MANEUVER) + maneuverType = MANEUVER_TYPE_MANEUVER; + string sDisciplineArray = _MANEUVER_LIST_DISCIPLINE + IntToString(maneuverType) + "_" + Get2DACache(sFile, "Discipline", spellbookId); + SetPersistantLocalInt(oPC, sDisciplineArray, + GetPersistantLocalInt(oPC, sDisciplineArray) - 1); + } + + // remove spell from player + int ipFeatID = StringToInt(Get2DACache(sFile, "IPFeatID", spellbookId)); + itemproperty ipFeat = PRCItemPropertyBonusFeat(ipFeatID); + object oSkin = GetPCSkin(oPC); + RemoveItemProperty(oSkin, ipFeat); + CheckAndRemoveFeat(oSkin, ipFeat); +} + +json GetSpellIDsKnown(int nClass, object oPC=OBJECT_SELF, int nList=0) +{ + json spellIds = GetLocalJson(oPC, NUI_LEVEL_UP_SPELLID_LIST_VAR + IntToString(nClass) + "_" + IntToString(nList)); + if (spellIds == JsonNull()) + spellIds = JsonObject(); + else + return spellIds; + + string sBase; + string levelArrayBaseId; + string generalArrayBaseId; + // if we are given a listId then use that instead, used for extra choices and + // expanded knowledge + int chosenList = (nList != 0) ? nList : nClass; + // these if checks are for setting class specific ids + if (nClass == CLASS_TYPE_DRAGON_SHAMAN + || nClass == CLASS_TYPE_DRAGONFIRE_ADEPT + || nClass == CLASS_TYPE_WARLOCK) + { + sBase = _INVOCATION_LIST_NAME_BASE + IntToString(chosenList); + levelArrayBaseId = _INVOCATION_LIST_LEVEL_ARRAY; + generalArrayBaseId = _INVOCATION_LIST_GENERAL_ARRAY; + } + if (GetIsPsionicClass(nClass)) + { + sBase = _POWER_LIST_NAME_BASE + IntToString(chosenList); + levelArrayBaseId = _POWER_LIST_LEVEL_ARRAY; + generalArrayBaseId = _POWER_LIST_GENERAL_ARRAY; + } + + // go through the level list and translate the spellIds into a JSON Object + // structure for easier access. + int i; + for (i = 1; i <= GetHitDice(oPC); i++) + { + string sTestArray = sBase + levelArrayBaseId + IntToString(i); + if (persistant_array_exists(oPC, sTestArray)) + { + int nSize = persistant_array_get_size(oPC, sTestArray); + + int j; + for (j = 0; j < nSize; j++) + { + spellIds = JsonObjectSet(spellIds, IntToString(persistant_array_get_int(oPC, sTestArray, j)), JsonBool(TRUE)); + } + } + } + + // go through the general list and translate the spellIds into a JSON Object + // structure for easier access. + string sTestArray = sBase + generalArrayBaseId; + if (persistant_array_exists(oPC, sTestArray)) + { + int nSize = persistant_array_get_size(oPC, sTestArray); + + int j; + for (j = 0; j < nSize; j++) + { + spellIds = JsonObjectSet(spellIds, IntToString(persistant_array_get_int(oPC, sTestArray, j)), JsonBool(TRUE)); + } + } + + SetLocalJson(oPC, NUI_LEVEL_UP_SPELLID_LIST_VAR + IntToString(nClass) + "_" + IntToString(nList), spellIds); + return spellIds; +} + +string ReasonForDisabledSpell(int nClass, int spellbookId, object oPC=OBJECT_SELF) +{ + string sFile = GetClassSpellbookFile(nClass); + int circleLevel = StringToInt(Get2DACache(sFile, "Level", spellbookId)); + + // logic for psionics + if (GetIsPsionicClass(nClass)) + { + int maxLevel = GetMaxPowerLevelForClass(nClass, oPC); + if (circleLevel > maxLevel) + return "You are unable to learn at this level currently."; + + // if its an expanded knowledge choice and we have already made all our + // exp knowledge choices then it needs to be disabled. + if (IsExpKnowledgePower(nClass, spellbookId)) + { + int remainingExp = GetRemainingExpandedChoices(nClass, POWER_LIST_EXP_KNOWLEDGE, oPC) + + GetRemainingExpandedChoices(nClass, POWER_LIST_EPIC_EXP_KNOWLEDGE, oPC); + if (!remainingExp) + return "You have no more expanded knowledge choices left."; + } + } + + if (GetIsShadowMagicClass(nClass)) + { + // mysteries are weird, the circles are sectioned by 1-3, 4-6, 7-9 + // if you do not have at least 2 choices from a circle you can't progress up + // so you can have access to circles 1,2,4,7,8 + int nType = 1; + if (circleLevel >= 4 && circleLevel <= 6) + nType = 2; + if (circleLevel >= 7 && circleLevel <= 9) + nType = 3; + int maxPossibleCircle = GetMaxMysteryLevelLearnable(oPC, nClass, nType); + if (circleLevel > maxPossibleCircle) + return "You are unable to learn at this level currently."; + } + + if (GetIsTruenamingClass(nClass)) + { + int lexicon = StringToInt(Get2DACache(sFile, "Lexicon", spellbookId)); + // each lexicon learns at different rates + int maxCircle = GetLexiconCircleKnownAtLevel(GetLevelByClass(nClass, oPC), lexicon); + if (circleLevel > maxCircle) + return "You are unable to learn at this level currently."; + + if (GetRemainingTruenameChoices(nClass, lexicon, oPC)) + return ""; + return "You have made all your truenaming choices."; + } + + // logic for ToB + if (GetIsBladeMagicClass(nClass)) + { + if (circleLevel > GetMaxInitiatorCircle(nClass, oPC)) + return "You are unable to learn at this level currently."; + + // if you do not have the prerequisite amount of maneuevers to learn + // the maneuever, then you can't learn it. + if (!HasPreRequisitesForManeuver(nClass, spellbookId, oPC)) + return "You do not have the prerequisites for this maneuver."; + + // maneuvers and stances have their own seperate limits + int type = StringToInt(Get2DACache(sFile, "Type", spellbookId)); + if (type == MANEUVER_TYPE_BOOST + || type == MANEUVER_TYPE_COUNTER + || type == MANEUVER_TYPE_STRIKE + || type == MANEUVER_TYPE_MANEUVER) + { + int remainingMan = GetRemainingManeuverChoices(nClass, oPC); + if (remainingMan) + return ""; + return "You have made all your maneuver choices."; + } + if (type == MANEUVER_TYPE_STANCE) + { + int remainingStance = GetRemainingStanceChoices(nClass, oPC); + if (remainingStance) + return ""; + return "You have made all your stance choices."; + } + } + + // default logic + // determine remaining Spell/Power choices left for player, if there is any + // remaining, enable the buttons. + if (GetRemainingSpellChoices(nClass, circleLevel, oPC)) + return ""; + + return "You have made all your spell choices."; +} + +string ReasonForDisabledChosen(int nClass, int spellbookId, object oPC=OBJECT_SELF) +{ + string sFile = GetClassSpellbookFile(nClass); + int circleLevel = StringToInt(Get2DACache(sFile, "Level", spellbookId)); + + + if (GetIsPsionicClass(nClass) + || GetIsShadowMagicClass(nClass) + || GetIsTruenamingClass(nClass) + || nClass == CLASS_TYPE_DREAD_NECROMANCER + || nClass == CLASS_TYPE_BEGUILER + || nClass == CLASS_TYPE_WARMAGE) + { + json knownSpells = GetKnownSpellListObject(nClass, oPC); + json currentCircle = JsonObjectGet(knownSpells, IntToString(circleLevel)); + int totalSpells = JsonGetLength(currentCircle); + int i; + for (i = 0; i < totalSpells; i++) + { + // if spell belongs to known spells, then disable, we don't allow + // replacing for these classes. + int currentSpellbookId = JsonGetInt(JsonArrayGet(currentCircle, i)); + if (currentSpellbookId == spellbookId) + return "You cannot replace spells as this class."; + } + + } + + if (GetIsBladeMagicClass(nClass)) + { + int prereqs = StringToInt(Get2DACache(sFile, "Prereqs", spellbookId)); + string discipline = Get2DACache(sFile, "Discipline", spellbookId); + // if the maneuver is required for others to exist, t hen disable it + if (IsRequiredForOtherManeuvers(nClass, prereqs, discipline, oPC)) + return "This maneuver is required for another maneuver."; + // if it is required for a PRC to exist, then disable it. + if (IsRequiredForToBPRCClass(nClass, spellbookId, oPC)) + return "This maneuver is reuquired for a PRC class."; + } + + if (GetIsInvocationClass(nClass)) + { + // dragon Shamans can't replace + if (nClass == CLASS_TYPE_DRAGON_SHAMAN) + { + json invokKnown = GetSpellIDsKnown(nClass, oPC); + string spellId = Get2DACache(sFile, "SpellID", spellbookId); + json chosenSpell = JsonObjectGet(invokKnown, spellId); + if (chosenSpell != JsonNull()) + return "You cannot replace invocations as this class."; + } + } + + // If we do not use the bioware unlearn system, we follow PnP + if (!GetPRCSwitch(PRC_BIO_UNLEARN)) + { + json knownSpells = GetKnownSpellListObject(nClass, oPC); + json currentCircle = JsonObjectGet(knownSpells, IntToString(circleLevel)); + int totalSpells = JsonGetLength(currentCircle); + int i; + for (i = 0; i < totalSpells; i++) + { + int currentSpellbookId = JsonGetInt(JsonArrayGet(currentCircle, i)); + // if the spell belongs to the known spell list, then we need to determine + if (currentSpellbookId == spellbookId) + { + json unlearnList = GetChosenReplaceListObject(oPC); + int totalUnlearned = JsonGetLength(unlearnList); + int totalAllowed = GetPRCSwitch(PRC_UNLEARN_SPELL_MAXNR); + // we default to 1 if no max number of unlearns is set + if (!totalAllowed) + totalAllowed = 1; + // we cannot replace a spell if we have more than or equal to the + // amount of relearns allowed, therefore disable. + if (totalUnlearned < totalAllowed) + return ""; + return "You can only replace " + IntToString(totalAllowed) + " spells during level up."; + } + } + + } + + return ""; +} + +json GetExpandedChoicesList(int nClass, object oPC=OBJECT_SELF) +{ + json expandedChoices = GetLocalJson(oPC, NUI_LEVEL_UP_EXPANDED_CHOICES_VAR); + if (expandedChoices != JsonNull()) + return expandedChoices; + + if (GetIsPsionicClass(nClass)) + expandedChoices = GetSpellIDsKnown(nClass, oPC, POWER_LIST_EXP_KNOWLEDGE); + else + expandedChoices = GetSpellIDsKnown(nClass, oPC, INVOCATION_LIST_EXTRA); + + SetLocalJson(oPC, NUI_LEVEL_UP_EXPANDED_CHOICES_VAR, expandedChoices); + return expandedChoices; +} + +int GetRemainingExpandedChoices(int nClass, int nList, object oPC=OBJECT_SELF) +{ + int remainingChoices = 0; + + json expandedList = (nList == INVOCATION_LIST_EXTRA || nList == POWER_LIST_EXP_KNOWLEDGE ) ? GetExpandedChoicesList(nClass, oPC) + : GetEpicExpandedChoicesList(nClass, oPC); + int expChoicesCount = JsonGetLength(JsonObjectKeys(expandedList)); + int maxExpChoices = (GetIsPsionicClass(nClass)) ? GetMaxPowerCount(oPC, nList) + : GetMaxInvocationCount(oPC, nList); + remainingChoices += (maxExpChoices - expChoicesCount); + + return remainingChoices; +} + +json GetEpicExpandedChoicesList(int nClass, object oPC=OBJECT_SELF) +{ + json expandedChoices = GetLocalJson(oPC, NUI_LEVEL_UP_EPIC_EXPANDED_CHOICES_VAR); + if (expandedChoices != JsonNull()) + return expandedChoices; + + if (GetIsPsionicClass(nClass)) + expandedChoices = GetSpellIDsKnown(nClass, oPC, POWER_LIST_EPIC_EXP_KNOWLEDGE); + else + expandedChoices = GetSpellIDsKnown(nClass, oPC, INVOCATION_LIST_EXTRA_EPIC); + + SetLocalJson(oPC, NUI_LEVEL_UP_EPIC_EXPANDED_CHOICES_VAR, expandedChoices); + return expandedChoices; +} + +int IsSpellInExpandedChoices(int nClass, int nList, int spellId, object oPC=OBJECT_SELF) +{ + json expList = (nList == POWER_LIST_EXP_KNOWLEDGE || nList == INVOCATION_LIST_EXTRA) ? GetExpandedChoicesList(nClass, oPC) + : GetEpicExpandedChoicesList(nClass, oPC); + + return (JsonObjectGet(expList, IntToString(spellId)) != JsonNull()); +} + +json GetChosenReplaceListObject(object oPC=OBJECT_SELF) +{ + json replaceList = GetLocalJson(oPC, NUI_LEVEL_UP_RELEARN_LIST_VAR); + if (replaceList == JsonNull()) + replaceList = JsonObject(); + else + return replaceList; + + SetLocalJson(oPC, NUI_LEVEL_UP_RELEARN_LIST_VAR, replaceList); + return replaceList; +} + +//////////////////////////////////////////////////////////////////////////// +/// /// +/// Psionics /// +/// /// +//////////////////////////////////////////////////////////////////////////// + + +int IsExpKnowledgePower(int nClass, int spellbookId) +{ + string sFile = GetClassSpellbookFile(nClass); + int isExp = StringToInt(Get2DACache(sFile, "Exp", spellbookId)); + return isExp; +} + +json GetCurrentPowerList(object oPC=OBJECT_SELF) +{ + json retValue = GetLocalJson(oPC, NUI_LEVEL_UP_POWER_LIST_VAR); + if (retValue == JsonNull()) + retValue = JsonArray(); + else + return retValue; + + SetLocalJson(oPC, NUI_LEVEL_UP_POWER_LIST_VAR, retValue); + return retValue; +} + +int ShouldAddPower(int nClass, int spellbookId, object oPC=OBJECT_SELF) +{ + string sFile = GetClassSpellbookFile(nClass); + int featId = StringToInt(Get2DACache(sFile, "FeatID", spellbookId)); + int isExp = StringToInt(Get2DACache(sFile, "Exp", spellbookId)); + // if you don't have the prereqs for a power then don't add it. Specific for + // psions + if (!CheckPowerPrereqs(featId, oPC)) + return FALSE; + // if the power is a expanded knowledge power + if (isExp) + { + // and we have a expanded knowledge choice left to make then show + // the button + int addPower = FALSE; + int maxLevel = GetMaxPowerLevelForClass(nClass, oPC); + int currentCircle = GetLocalInt(oPC, NUI_LEVEL_UP_SELECTED_CIRCLE_VAR); + + int choicesLeft = GetRemainingExpandedChoices(nClass, POWER_LIST_EXP_KNOWLEDGE, oPC); + if (choicesLeft && (currentCircle <= (maxLevel-1))) + addPower = TRUE; + choicesLeft = GetRemainingExpandedChoices(nClass, POWER_LIST_EPIC_EXP_KNOWLEDGE, oPC); + if (choicesLeft) + addPower = TRUE; + // otherwise don't show the button. + return addPower; + } + + return TRUE; +} + +void LearnPowers(int nClass, object oPC=OBJECT_SELF) +{ + // add normal powers + json powerList = GetCurrentPowerList(oPC); + int totalPowers = JsonGetLength(powerList); + int i; + for (i = 0; i < totalPowers; i++) + { + int nSpellbookID = JsonGetInt(JsonArrayGet(powerList, i)); + // get the expanded knowledge list we are adding to if any + int expKnow = GetExpKnowledgePowerListRequired(nClass, nSpellbookID, oPC); + AddPowerKnown(oPC, nClass, nSpellbookID, TRUE, GetManifesterLevel(oPC, nClass, TRUE), expKnow); + } +} + +int GetExpKnowledgePowerListRequired(int nClass, int spellbookId, object oPC=OBJECT_SELF) +{ + string sFile = GetClassSpellbookFile(nClass); + + int i; + // expanded knowledge is -1, epic epxanded knowledge is -2 + for (i = -1; i >= -2; i--) + { + int spellId = StringToInt(Get2DACache(sFile, "SpellID", spellbookId)); + if (IsSpellInExpandedChoices(nClass, i, spellId, oPC)) + return i; + } + + return 0; +} + +int GetMaxPowerLevelForClass(int nClass, object oPC=OBJECT_SELF) +{ + string sFile = GetAMSKnownFileName(nClass); + int nLevel = GetManifesterLevel(oPC, nClass, TRUE); + // index is level - 1 since it starts at 0. + int maxLevel = StringToInt(Get2DACache(sFile, "MaxPowerLevel", nLevel-1)); + return maxLevel; +} + +int GetRemainingPowerChoices(int nClass, int chosenCircle, object oPC=OBJECT_SELF, int extra=TRUE) +{ + int remaining = 0; + + int maxLevel = GetMaxPowerLevelForClass(nClass, oPC); + if (chosenCircle > maxLevel) + return 0; + + json choices = GetCurrentPowerList(oPC); + int totalChoices = JsonGetLength(choices); + int allowedChoices = GetMaxPowerCount(oPC, nClass); + int alreadyChosen = GetPowerCount(oPC, nClass); + string sFile = GetClassSpellbookFile(nClass); + + int i = 0; + for (i = 0; i < totalChoices; i++) + { + int spellbookId = JsonGetInt(JsonArrayGet(choices, i)); + int spellId = StringToInt(Get2DACache(sFile, "SpellID", spellbookId)); + //if the power is a expanded knowledge choice, don't count it + if (!IsSpellInExpandedChoices(nClass, POWER_LIST_EXP_KNOWLEDGE, spellId, oPC) + && !IsSpellInExpandedChoices(nClass, POWER_LIST_EPIC_EXP_KNOWLEDGE, spellId, oPC)) + remaining++; + } + remaining = (allowedChoices - remaining - alreadyChosen); + + // if this is true we count expanded knowledge choices + if (extra) + { + if (GetHasFeat(FEAT_EXPANDED_KNOWLEDGE_1, oPC) && (chosenCircle <= (maxLevel-1))) + { + int totalExp = GetMaxPowerCount(oPC, POWER_LIST_EXP_KNOWLEDGE); + json expChoices = GetExpandedChoicesList(nClass, oPC); + int choicesCount = JsonGetLength(JsonObjectKeys(expChoices)); + remaining += (totalExp - choicesCount); + } + if (GetHasFeat(FEAT_EPIC_EXPANDED_KNOWLEDGE_1, oPC)) + { + int totalExp = GetMaxPowerCount(oPC, POWER_LIST_EPIC_EXP_KNOWLEDGE); + json expChoices = GetEpicExpandedChoicesList(nClass, oPC); + int choicesCount = JsonGetLength(JsonObjectKeys(expChoices)); + remaining += (totalExp - choicesCount); + } + } + + return remaining; +} + +//////////////////////////////////////////////////////////////////////////// +/// /// +/// Initiators /// +/// /// +//////////////////////////////////////////////////////////////////////////// + +json GetDisciplineInfoObject(int nClass, object oPC=OBJECT_SELF) +{ + json disciplineInfo = GetLocalJson(oPC, NUI_LEVEL_UP_DISCIPLINE_INFO_VAR + IntToString(nClass)); + if (disciplineInfo == JsonNull()) + disciplineInfo = JsonObject(); + else + return disciplineInfo; + + int chosenClass = GetLocalInt(oPC, NUI_LEVEL_UP_SELECTED_CLASS_VAR); + string sFile = GetClassSpellbookFile(nClass); + + //if this is not the chosen class then we do not have a chosen spell list + // need to go through the class's 2da and check if you know the spell or not. + if (nClass != chosenClass) + { + int totalSpells = Get2DARowCount(sFile); + + int i; + for (i = 0; i < totalSpells; i++) + { + int featId = StringToInt(Get2DACache(sFile, "FeatID", i)); + if (featId && GetHasFeat(featId, oPC, TRUE)) + disciplineInfo = AddSpellDisciplineInfo(sFile, i, disciplineInfo); + } + } + else + { + json chosenMans = GetChosenSpellListObject(nClass, oPC); + + json circles = JsonObjectKeys(chosenMans); + int totalCircles = JsonGetLength(circles); + + int i; + for (i = 0; i < totalCircles; i++) + { + string currentCircle = JsonGetString(JsonArrayGet(circles, i)); + json currentList = JsonObjectGet(chosenMans, currentCircle); + int totalSpells = JsonGetLength(currentList); + + int y; + for (y = 0; y < totalSpells; y++) + { + int spellbookId = JsonGetInt(JsonArrayGet(currentList, y)); + disciplineInfo = AddSpellDisciplineInfo(sFile, spellbookId, disciplineInfo); + } + } + } + + SetLocalJson(oPC, NUI_LEVEL_UP_DISCIPLINE_INFO_VAR + IntToString(nClass), disciplineInfo); + return disciplineInfo; +} + +int IsRequiredForOtherManeuvers(int nClass, int prereq, string discipline, object oPC=OBJECT_SELF) +{ + json discInfo = GetDisciplineInfoObject(nClass, oPC); + + int total = 0; + + // loop through each prereq level and add up it's totals (ie how many maneuevrs + // do we know with 0,1,2...,n prereqs. + int i; + for (i = 0; i <= prereq; i++) + { + + json currDisc = JsonObjectGet(discInfo, discipline); + string discKey = ("Prereq_" + IntToString(i)); + int currentDiscPrereq = JsonGetInt(JsonObjectGet(currDisc, discKey)); + total += currentDiscPrereq; + } + + // then from above the given prereq check if we have any prereq maneuevers taken + for (i = (prereq+1); i < NUI_LEVEL_UP_MANEUVER_PREREQ_LIMIT; i++) + { + json currDisc = JsonObjectGet(discInfo, discipline); + string discKey = ("Prereq_" + IntToString(i)); + json discPrereq = JsonObjectGet(currDisc, discKey); + if (discPrereq != JsonNull()) + { + // if we do take the total and subtract by one, if it is lower than + // than the prereq needed, it is required + if (total - 1 < i) + return TRUE; + + // otherwise add how many we have and move up and keep trying. + int currentDiscPrereq = JsonGetInt(discPrereq); + total += currentDiscPrereq; + } + } + + return FALSE; +} + +int HasPreRequisitesForManeuver(int nClass, int spellbookId, object oPC=OBJECT_SELF) +{ + string sFile = GetClassSpellbookFile(nClass); + int prereqs = StringToInt(Get2DACache(sFile, "Prereqs", spellbookId)); + if (!prereqs) + return TRUE; + string discipline = Get2DACache(sFile, "Discipline", spellbookId); + json discInfo = GetDisciplineInfoObject(nClass, oPC); + json chosenDisc = JsonObjectGet(discInfo, discipline); + if (chosenDisc != JsonNull()) + { + int nManCount = JsonGetInt(JsonObjectGet(chosenDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + if (nManCount >= prereqs) + return TRUE; + } + + return FALSE; +} + +int GetMaxInitiatorCircle(int nClass, object oPC=OBJECT_SELF) +{ + int initiatorLevel = GetInitiatorLevel(oPC, nClass); + // initiators learn by ceiling(classLevel) + int highestCircle = (initiatorLevel + 1) / 2; + if (highestCircle > 9) + return 9; + return highestCircle; +} + +int GetRemainingManeuverChoices(int nClass, object oPC=OBJECT_SELF) +{ + json discInfo = GetDisciplineInfoObject(nClass, oPC); + + json jManAmount = JsonObjectGet(discInfo, NUI_LEVEL_UP_MANEUVER_TOTAL); + int nManAmount = 0; + if (jManAmount != JsonNull()) + nManAmount = JsonGetInt(jManAmount); + + int maxAmount = GetMaxManeuverCount(oPC, nClass, MANEUVER_TYPE_MANEUVER); + + return maxAmount - nManAmount; +} + +int GetRemainingStanceChoices(int nClass, object oPC=OBJECT_SELF) +{ + json discInfo = GetDisciplineInfoObject(nClass, oPC); + + json jStanceAmount = JsonObjectGet(discInfo, NUI_LEVEL_UP_STANCE_TOTAL); + int nStanceAmount = 0; + if (jStanceAmount != JsonNull()) + nStanceAmount = JsonGetInt(jStanceAmount); + + int maxAmount = GetMaxManeuverCount(oPC, nClass, MANEUVER_TYPE_STANCE); + + return maxAmount - nStanceAmount; +} + +int IsAllowedDiscipline(int nClass, int spellbookId, object oPC=OBJECT_SELF) +{ + // logic carried over from private function in discipline inc functions + // uses bitwise matching to tell if the discipline is allowed or not + string sFile = GetClassSpellbookFile(nClass); + int discipline = StringToInt(Get2DACache(sFile, "Discipline", spellbookId)); + + int nOverride = GetPersistantLocalInt(oPC, "AllowedDisciplines"); + if(nOverride == 0) + { + switch(nClass) + { + case CLASS_TYPE_CRUSADER: nOverride = 322; break;//DISCIPLINE_DEVOTED_SPIRIT + DISCIPLINE_STONE_DRAGON + DISCIPLINE_WHITE_RAVEN + case CLASS_TYPE_SWORDSAGE: nOverride = 245; break;//DISCIPLINE_DESERT_WIND + DISCIPLINE_DIAMOND_MIND + DISCIPLINE_SETTING_SUN + DISCIPLINE_SHADOW_HAND + DISCIPLINE_STONE_DRAGON + DISCIPLINE_TIGER_CLAW + case CLASS_TYPE_WARBLADE: nOverride = 460; break;//DISCIPLINE_DIAMOND_MIND + DISCIPLINE_IRON_HEART + DISCIPLINE_STONE_DRAGON + DISCIPLINE_TIGER_CLAW + DISCIPLINE_WHITE_RAVEN + } + } + return nOverride & discipline; +} + +int IsRequiredForToBPRCClass(int nClass, int spellbookId, object oPC=OBJECT_SELF) +{ + int currentClassPos = 1; + // loop through all the classes and look for a PRC + while (currentClassPos) + { + int currentClass = GetClassByPosition(currentClassPos, oPC); + // if we reached a non existant class, we reached the end. + if (currentClass != CLASS_TYPE_INVALID) + { + string sFile = GetClassSpellbookFile(nClass); + int discipline = StringToInt(Get2DACache(sFile, "Discipline", spellbookId)); + + // check if the class is a ToB PRC Class and if the current spell's + // discipline is used for it. + int isUsed = FALSE; + if (currentClass == CLASS_TYPE_DEEPSTONE_SENTINEL + && (discipline == DISCIPLINE_STONE_DRAGON)) + isUsed = TRUE; + if (currentClass == CLASS_TYPE_BLOODCLAW_MASTER + && (discipline == DISCIPLINE_TIGER_CLAW)) + isUsed = TRUE; + if (currentClass == CLASS_TYPE_RUBY_VINDICATOR + && (discipline == DISCIPLINE_DEVOTED_SPIRIT)) + isUsed = TRUE; + if (currentClass == CLASS_TYPE_JADE_PHOENIX_MAGE) + isUsed = TRUE; + if (currentClass == CLASS_TYPE_MASTER_OF_NINE) + isUsed = TRUE; + if (currentClass == CLASS_TYPE_ETERNAL_BLADE + && (discipline == DISCIPLINE_DEVOTED_SPIRIT + || discipline == DISCIPLINE_DIAMOND_MIND)) + isUsed = TRUE; + if (currentClass == CLASS_TYPE_SHADOW_SUN_NINJA + && (discipline == DISCIPLINE_SETTING_SUN + || discipline == DISCIPLINE_SHADOW_HAND)) + isUsed = TRUE; + + // if any of the above was true than we need to check if this spell + // is required for a PRC + if (isUsed) + { + // get the discipline info for all BladeMagic classes if we have them. + json discInfo = GetDisciplineInfoObject(nClass, oPC); + json classDisc2Info = JsonObject(); + json classDisc3Info = JsonObject(); + if (nClass == CLASS_TYPE_SWORDSAGE) + { + if (GetLevelByClass(CLASS_TYPE_WARBLADE, oPC)) + classDisc2Info = GetDisciplineInfoObject(CLASS_TYPE_WARBLADE, oPC); + if (GetLevelByClass(CLASS_TYPE_CRUSADER, oPC)) + classDisc3Info = GetDisciplineInfoObject(CLASS_TYPE_CRUSADER, oPC); + } + if (nClass == CLASS_TYPE_CRUSADER) + { + if (GetLevelByClass(CLASS_TYPE_WARBLADE, oPC)) + classDisc2Info = GetDisciplineInfoObject(CLASS_TYPE_WARBLADE, oPC); + if (GetLevelByClass(CLASS_TYPE_SWORDSAGE, oPC)) + classDisc3Info = GetDisciplineInfoObject(CLASS_TYPE_SWORDSAGE, oPC); + } + if (nClass == CLASS_TYPE_WARBLADE) + { + if (GetLevelByClass(CLASS_TYPE_CRUSADER, oPC)) + classDisc2Info = GetDisciplineInfoObject(CLASS_TYPE_CRUSADER, oPC); + if (GetLevelByClass(CLASS_TYPE_SWORDSAGE, oPC)) + classDisc3Info = GetDisciplineInfoObject(CLASS_TYPE_SWORDSAGE, oPC); + } + + // Time to begin checking the PRCs + // this should follow the same logic as here + // https://gitea.raptio.us/Jaysyn/PRC8/src/commit/797442d3da7c9c8e1fcf585b97e2ff1cbe56045b/nwn/nwnprc/trunk/scripts/prc_prereq.nss#L991 + + // Check Deepstone Sentinel + if (currentClass == CLASS_TYPE_DEEPSTONE_SENTINEL) + { + // we need to look for 2 Stone Dragon Maneuvers and 1 Stone Dragon + // Stance. So add up the other MagicBlade classes and see if it is satisfied. + int stoneDMan, stoneDStance = 0; + json currentDisc = JsonObjectGet(classDisc2Info, IntToString(discipline)); + if (currentDisc != JsonNull()) + { + stoneDMan += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + stoneDStance += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + if (stoneDMan >= 2 && stoneDStance >= 1) + return FALSE; + } + + currentDisc = JsonObjectGet(classDisc3Info, IntToString(discipline)); + if (currentDisc != JsonNull()) + { + stoneDMan += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + stoneDStance += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + if (stoneDMan >= 2 && stoneDStance >= 1) + return FALSE; + } + // if it still isn't satisfied than the current class is required + // for it to exist. Check to see if it is safe to remove the maneuever + currentDisc = JsonObjectGet(discInfo, IntToString(discipline)); + if (currentDisc != JsonNull()) + { + stoneDMan += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + stoneDStance += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + int type = StringToInt(Get2DACache(sFile, "Type", spellbookId)); + //if the current maneuver is a stance, check to see if it is safe to remove + if (type == MANEUVER_TYPE_STANCE) + { + if (stoneDStance - 1 >= 1) + return FALSE; + } + else + { + // if it is not a stance we can just check the maneuevers in general + if (stoneDMan - 1 >= 2) + return FALSE; + } + + // this maneuver is required and should not be removed. + return TRUE; + } + } + + // Check Bloodclaw Master + if (currentClass == CLASS_TYPE_BLOODCLAW_MASTER) + { + // bloodclaw needs 3 Tiger Claw maneuevers + int tigerCMan = 0; + json currentDisc = JsonObjectGet(classDisc2Info, IntToString(discipline)); + if (currentDisc != JsonNull()) + { + tigerCMan += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + tigerCMan += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + if (tigerCMan >= 3) + return FALSE; + } + currentDisc = JsonObjectGet(classDisc3Info, IntToString(discipline)); + if (currentDisc != JsonNull()) + { + tigerCMan += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + tigerCMan += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + if (tigerCMan >= 3) + return FALSE; + } + currentDisc = JsonObjectGet(discInfo, IntToString(discipline)); + if (currentDisc != JsonNull()) + { + tigerCMan += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + tigerCMan += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + if (tigerCMan-1 >= 3) + return FALSE; + return TRUE; + } + } + + if (currentClass == CLASS_TYPE_RUBY_VINDICATOR) + { + // Ruby Vindicator needs 1 stance and 1 maneuever from Devoted Spirit + int stance = 0; + int maneuver = 0; + json currentDisc = JsonObjectGet(classDisc2Info, IntToString(discipline)); + if (currentDisc != JsonNull()) + { + stance += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + maneuver += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + if (stance >= 1 && maneuver >= 1) + return FALSE; + } + currentDisc = JsonObjectGet(classDisc3Info, IntToString(discipline)); + if (currentDisc != JsonNull()) + { + stance += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + maneuver += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + if (stance >= 1 && maneuver >= 1) + return FALSE; + } + currentDisc = JsonObjectGet(discInfo, IntToString(discipline)); + if (currentDisc != JsonNull()) + { + stance += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + maneuver += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + int type = StringToInt(Get2DACache(sFile, "Type", spellbookId)); + if (type == MANEUVER_TYPE_STANCE) + { + if (stance - 1 >= 1) + return FALSE; + return TRUE; + } + if (maneuver - 1 >= 1) + return FALSE; + return TRUE; + } + } + + if (currentClass == CLASS_TYPE_JADE_PHOENIX_MAGE) + { + // Jade Phoenix needs 1 stance and 2 maneuvers of any type + int stance = 0; + int maneuver = 0; + json currentDisc = JsonObjectGet(classDisc2Info, IntToString(discipline)); + if (currentDisc != JsonNull()) + { + stance += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + maneuver += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + if (stance >= 1 && maneuver >= 2) + return FALSE; + } + currentDisc = JsonObjectGet(classDisc3Info, IntToString(discipline)); + if (currentDisc != JsonNull()) + { + stance += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + maneuver += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + if (stance >= 1 && maneuver >= 2) + return FALSE; + } + currentDisc = JsonObjectGet(discInfo, IntToString(discipline)); + if (currentDisc != JsonNull()) + { + stance += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + maneuver += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + int type = StringToInt(Get2DACache(sFile, "Type", spellbookId)); + if (type == MANEUVER_TYPE_STANCE) + { + if ((stance - 1 >= 1) && (maneuver -1 >= 2)) + return FALSE; + return TRUE; + } + if (maneuver - 1 >= 2) + return FALSE; + return TRUE; + } + } + + if (currentClass == CLASS_TYPE_MASTER_OF_NINE) + { + // master of nine needs 1 maneuever from 6 different disciplines + + int totalDiscCount = 0; + int currentClassAndDiscUsed = 0; + int i; + // loop through each possible discipline + for (i = 0; i <= 256; i++) + { + int found = 0; + // only disciplines that exist are stored, and only those + // that are used are stored, so we can loop through and + // find what disciplines we do or don't know. + json currentDisc = JsonObjectGet(classDisc2Info, IntToString(i)); + if (currentDisc != JsonNull()) + found = 1; + + if (!found) + { + json currentDisc = JsonObjectGet(classDisc3Info, IntToString(i)); + if (currentDisc != JsonNull()) + found = 1; + } + + if (!found) + { + json currentDisc = JsonObjectGet(discInfo, IntToString(i)); + if (currentDisc != JsonNull()) + { + if (i == discipline) + currentClassAndDiscUsed = 1; + found = 1; + } + } + + totalDiscCount += found; + } + // if we have more maneuevers than 6, it is not required + if (totalDiscCount > 6) + return FALSE; + // however if we have 6 and this discipline was grabbed we need to make sure it is safe to remove + if (currentClassAndDiscUsed) + { + // if we were to remove this discipline and it is 5 or less total disciplines we have now + // it is important + if (totalDiscCount - 1 >= 6) + return FALSE; + json currentDisc = JsonObjectGet(discInfo, IntToString(discipline)); + int stance = JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + int maneuver = JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + // if we were to remove this discipline and are left with no more than + // this was important and it can't be removed + if ((stance + maneuver - 1) >= 1) + return FALSE; + return TRUE; + } + return FALSE; + } + + if (currentClass == CLASS_TYPE_ETERNAL_BLADE) + { + //Eternal blade 2 Devoted Spirits OR 2 Diamond Mind + int nTotal = 0; + json currentDisc = JsonObjectGet(classDisc2Info, IntToString(DISCIPLINE_DEVOTED_SPIRIT)); + if (currentDisc != JsonNull()) + { + nTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + nTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + // stances here count as a maneuver so we need to count 2 + // to account for that + if (nTotal >= 2) + return FALSE; + } + currentDisc = JsonObjectGet(classDisc2Info, IntToString(DISCIPLINE_DIAMOND_MIND)); + if (currentDisc != JsonNull()) + { + nTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + nTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + // stances here count as a maneuver so we need to count 2 + // to account for that + if (nTotal >= 2) + return FALSE; + } + currentDisc = JsonObjectGet(classDisc3Info, IntToString(DISCIPLINE_DEVOTED_SPIRIT)); + if (currentDisc != JsonNull()) + { + nTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + nTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + // stances here count as a maneuver so we need to count 2 + // to account for that + if (nTotal >= 2) + return FALSE; + } + currentDisc = JsonObjectGet(classDisc3Info, IntToString(DISCIPLINE_DIAMOND_MIND)); + if (currentDisc != JsonNull()) + { + nTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + nTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + // stances here count as a maneuver so we need to count 2 + // to account for that + if (nTotal >= 2) + return FALSE; + } + currentDisc = JsonObjectGet(discInfo, IntToString(discipline)); + if (currentDisc != JsonNull()) + { + nTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + nTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + if ((nTotal - 1) >= 2) + return FALSE; + return TRUE; + } + } + + if (currentClass == CLASS_TYPE_SHADOW_SUN_NINJA) + { + // Shadow Sun Ninja needs 1 lvl2 Setting Sun OR Shadow Hand maneuever + // 1 Setting Sun maneuver AND 1 Shadow Hand maneuver + int nLvl2 = 0; + int shadowHTotal; + int settingSTotal; + + json currentDisc = JsonObjectGet(classDisc2Info, IntToString(DISCIPLINE_SHADOW_HAND)); + if (currentDisc != JsonNull()) + { + shadowHTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + shadowHTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + nLvl2 += JsonGetInt(JsonObjectGet(currentDisc, "Level2_" + IntToString(MANEUVER_TYPE_STANCE))); + nLvl2 += JsonGetInt(JsonObjectGet(currentDisc, "Level2_" + IntToString(MANEUVER_TYPE_MANEUVER))); + // stances here count as a maneuver so we need to count 2 + // to account for that + if (nLvl2 && shadowHTotal && settingSTotal && (shadowHTotal >= 2 || settingSTotal >= 2)) + return FALSE; + } + currentDisc = JsonObjectGet(classDisc2Info, IntToString(DISCIPLINE_SETTING_SUN)); + if (currentDisc != JsonNull()) + { + settingSTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + settingSTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + nLvl2 += JsonGetInt(JsonObjectGet(currentDisc, "Level2_" + IntToString(MANEUVER_TYPE_STANCE))); + nLvl2 += JsonGetInt(JsonObjectGet(currentDisc, "Level2_" + IntToString(MANEUVER_TYPE_MANEUVER))); + // stances here count as a maneuver so we need to count 2 + // to account for that + if (nLvl2 && shadowHTotal && settingSTotal && (shadowHTotal >= 2 || settingSTotal >= 2)) + return FALSE; + } + currentDisc = JsonObjectGet(classDisc3Info, IntToString(DISCIPLINE_SHADOW_HAND)); + if (currentDisc != JsonNull()) + { + shadowHTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + shadowHTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + nLvl2 += JsonGetInt(JsonObjectGet(currentDisc, "Level2_" + IntToString(MANEUVER_TYPE_STANCE))); + nLvl2 += JsonGetInt(JsonObjectGet(currentDisc, "Level2_" + IntToString(MANEUVER_TYPE_MANEUVER))); + // stances here count as a maneuver so we need to count 2 + // to account for that + if (nLvl2 && shadowHTotal && settingSTotal && (shadowHTotal >= 2 || settingSTotal >= 2)) + return FALSE; + } + currentDisc = JsonObjectGet(classDisc2Info, IntToString(DISCIPLINE_SETTING_SUN)); + if (currentDisc != JsonNull()) + { + settingSTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + settingSTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + nLvl2 += JsonGetInt(JsonObjectGet(currentDisc, "Level2_" + IntToString(MANEUVER_TYPE_STANCE))); + nLvl2 += JsonGetInt(JsonObjectGet(currentDisc, "Level2_" + IntToString(MANEUVER_TYPE_MANEUVER))); + // stances here count as a maneuver so we need to count 2 + // to account for that + if (nLvl2 && shadowHTotal && settingSTotal && (shadowHTotal >= 2 || settingSTotal >= 2)) + return FALSE; + } + currentDisc = JsonObjectGet(discInfo, IntToString(DISCIPLINE_SHADOW_HAND)); + if (currentDisc != JsonNull()) + { + shadowHTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + shadowHTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + nLvl2 += JsonGetInt(JsonObjectGet(currentDisc, "Level2_" + IntToString(MANEUVER_TYPE_STANCE))); + nLvl2 += JsonGetInt(JsonObjectGet(currentDisc, "Level2_" + IntToString(MANEUVER_TYPE_MANEUVER))); + } + currentDisc = JsonObjectGet(discInfo, IntToString(DISCIPLINE_SETTING_SUN)); + if (currentDisc != JsonNull()) + { + settingSTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_STANCE))); + settingSTotal += JsonGetInt(JsonObjectGet(currentDisc, IntToString(MANEUVER_TYPE_MANEUVER))); + nLvl2 += JsonGetInt(JsonObjectGet(currentDisc, "Level2_" + IntToString(MANEUVER_TYPE_STANCE))); + nLvl2 += JsonGetInt(JsonObjectGet(currentDisc, "Level2_" + IntToString(MANEUVER_TYPE_MANEUVER))); + } + int level = StringToInt(Get2DACache(sFile, "Level", spellbookId)); + if (level == 2) + nLvl2 -= 1; + if (discipline == DISCIPLINE_SHADOW_HAND) + shadowHTotal -= 1; + else + settingSTotal -= 1; + + return !(nLvl2 && shadowHTotal && settingSTotal && (shadowHTotal >= 2 || settingSTotal >= 2)); + } + } + + currentClassPos += 1; + } + else + currentClassPos = 0; + } + + return FALSE; +} + +json AddSpellDisciplineInfo(string sFile, int spellbookId, json classDisc) +{ + json classDiscCopy = classDisc; + int discipline = StringToInt(Get2DACache(sFile, "Discipline", spellbookId)); + int type = StringToInt(Get2DACache(sFile, "Type", spellbookId)); + int level = StringToInt(Get2DACache(sFile, "Level", spellbookId)); + int prereq = StringToInt(Get2DACache(sFile, "Prereqs", spellbookId)); + + json jDisc = JsonObjectGet(classDisc, IntToString(discipline)); + if (jDisc == JsonNull()) + jDisc = JsonObject(); + + string levelKey = "Level" + IntToString(level) + "_" + IntToString(type); + int nTypeTotal = (JsonGetInt(JsonObjectGet(jDisc, levelKey)) + 1); + jDisc = JsonObjectSet(jDisc, levelKey, JsonInt(nTypeTotal)); + + nTypeTotal = (JsonGetInt(JsonObjectGet(jDisc, IntToString(type))) + 1); + jDisc = JsonObjectSet(jDisc, IntToString(type), JsonInt(nTypeTotal)); + + if (type != MANEUVER_TYPE_MANEUVER + && type != MANEUVER_TYPE_STANCE) + { + levelKey = "Level" + IntToString(level) + "_" + IntToString(MANEUVER_TYPE_MANEUVER); + nTypeTotal = (JsonGetInt(JsonObjectGet(jDisc, levelKey)) + 1); + jDisc = JsonObjectSet(jDisc, levelKey, JsonInt(nTypeTotal)); + + nTypeTotal = (JsonGetInt(JsonObjectGet(jDisc, IntToString(MANEUVER_TYPE_MANEUVER))) + 1); + jDisc = JsonObjectSet(jDisc, IntToString(MANEUVER_TYPE_MANEUVER), JsonInt(nTypeTotal)); + } + + string prereqKey = "Prereq_" + IntToString(prereq); + int nPrereqTotal = (JsonGetInt(JsonObjectGet(jDisc, prereqKey)) + 1); + jDisc = JsonObjectSet(jDisc, prereqKey, JsonInt(nPrereqTotal)); + + if (type == MANEUVER_TYPE_STANCE) + { + nTypeTotal = (JsonGetInt(JsonObjectGet(classDisc, NUI_LEVEL_UP_STANCE_TOTAL)) + 1); + classDiscCopy = JsonObjectSet(classDiscCopy, NUI_LEVEL_UP_STANCE_TOTAL, JsonInt(nTypeTotal)); + } + else + { + nTypeTotal = (JsonGetInt(JsonObjectGet(classDisc, NUI_LEVEL_UP_MANEUVER_TOTAL)) + 1); + classDiscCopy = JsonObjectSet(classDiscCopy, NUI_LEVEL_UP_MANEUVER_TOTAL, JsonInt(nTypeTotal)); + } + + return JsonObjectSet(classDiscCopy, IntToString(discipline), jDisc); +} + +//////////////////////////////////////////////////////////////////////////// +/// /// +/// Invokers /// +/// /// +//////////////////////////////////////////////////////////////////////////// + +json GetInvokerKnownListObject(int nClass, object oPC=OBJECT_SELF) +{ + json knownObject = GetLocalJson(oPC, NUI_LEVEL_UP_KNOWN_INVOCATIONS_CACHE_VAR + IntToString(nClass)); + if (knownObject == JsonNull()) + knownObject = JsonObject(); + else + return knownObject; + + string sFile = GetAMSKnownFileName(nClass); + int totalRows = Get2DARowCount(sFile); + int maxInvocLevel = StringToInt(Get2DACache(sFile, "MaxInvocationLevel", totalRows-1)); + json previousInvocList = JsonObject(); + + int i; + for (i = 1; i <= maxInvocLevel; i++) + { + previousInvocList = JsonObjectSet(previousInvocList, IntToString(i), JsonInt(0)); + } + + for (i = 0; i < totalRows; i++) + { + int maxInvocation = StringToInt(Get2DACache(sFile, "MaxInvocationLevel", i)); + int invocationKnown = StringToInt(Get2DACache(sFile, "InvocationKnown", i)); + json invocList = previousInvocList; + + int previousInvocTotal = 0; + if (i > 0) + previousInvocTotal = StringToInt(Get2DACache(sFile, "InvocationKnown", i-1)); + int previousInvocAmount = JsonGetInt(JsonObjectGet(previousInvocList, IntToString(maxInvocation))); + int currentInvocationAmount = (invocationKnown - previousInvocTotal + previousInvocAmount); + + invocList = JsonObjectSet(invocList, IntToString(maxInvocation), JsonInt(currentInvocationAmount)); + knownObject = JsonObjectSet(knownObject, IntToString(i+1), invocList); + previousInvocList = invocList; + } + + SetLocalJson(oPC, NUI_LEVEL_UP_KNOWN_INVOCATIONS_CACHE_VAR + IntToString(nClass), knownObject); + return knownObject; +} + +int GetRemainingInvocationChoices(int nClass, int chosenCircle, object oPC=OBJECT_SELF, int extra=TRUE) +{ + int remaining = 0; + int nLevel = GetInvokerLevel(oPC, nClass); + + json knownObject = GetInvokerKnownListObject(nClass, oPC); + json chosenInv = GetChosenSpellListObject(nClass, oPC); + json currentLevelKnown = JsonObjectGet(knownObject, IntToString(nLevel)); + + int totalCircles = JsonGetLength(JsonObjectKeys(currentLevelKnown)); + + // logic goes we are given a set amount of invocations at each circle. We can + // take from a circle above us, but not below us. So we need to make sure + // we have a legal amount of choices + int i; + for (i = 1; i <= totalCircles; i++) + { + int currentChosen = 0; + json chosenSpells = JsonObjectGet(chosenInv, IntToString(i)); + if (chosenSpells != JsonNull()) + { + int totalChosen = JsonGetLength(chosenSpells); + int j; + for (j = 0; j < totalChosen; j++) + { + int spellbookId = JsonGetInt(JsonArrayGet(chosenSpells, j)); + // only count non extra invocation choices + if (!IsExtraChoiceInvocation(nClass, spellbookId, oPC)) + currentChosen += 1; + } + } + + int allowedAtCircle = JsonGetInt(JsonObjectGet(currentLevelKnown, IntToString(i))); + + remaining = (allowedAtCircle - currentChosen + remaining); + // if the circle is below the chosen circle and we have a positive remaining, + // we set it to 0 because we cannot use lower circle spells on higher circle. + // however if thge value is negative then we carry it over because we + // have a deficit and need to account for it by using the spells of the + // next circle. + if (i < chosenCircle && remaining > 0) + remaining = 0; + } + + + // count extra and epic invocation choices + if (extra) + { + string sFile = GetAMSKnownFileName(nClass); + int maxCircle = StringToInt(Get2DACache(sFile, "MaxInvocationLevel", nLevel-1)); + + if (GetHasFeat(FEAT_EXTRA_INVOCATION_I, oPC) && (chosenCircle <= (maxCircle-1))) + { + int totalExp = GetMaxInvocationCount(oPC, INVOCATION_LIST_EXTRA); + json expChoices = GetExpandedChoicesList(nClass, oPC); + int choicesCount = JsonGetLength(JsonObjectKeys(expChoices)); + remaining += (totalExp - choicesCount); + } + if (GetHasFeat(FEAT_EPIC_EXTRA_INVOCATION_I, oPC)) + { + int totalExp = GetMaxInvocationCount(oPC, INVOCATION_LIST_EXTRA_EPIC); + json expChoices = GetEpicExpandedChoicesList(nClass, oPC); + int choicesCount = JsonGetLength(JsonObjectKeys(expChoices)); + remaining += (totalExp - choicesCount); + } + } + + return remaining; +} + +int IsExtraChoiceInvocation(int nClass, int spellbookId, object oPC=OBJECT_SELF) +{ + string sFile = GetClassSpellbookFile(nClass); + string spellId = Get2DACache(sFile, "SpellID", spellbookId); + json extraChoices = GetExpandedChoicesList(nClass, oPC); + json chosenSpell = JsonObjectGet(extraChoices, spellId); + if (chosenSpell != JsonNull()) + return TRUE; + + extraChoices = GetEpicExpandedChoicesList(nClass, oPC); + chosenSpell = JsonObjectGet(extraChoices, spellId); + if (chosenSpell != JsonNull()) + return TRUE; + + return FALSE; +} + +//////////////////////////////////////////////////////////////////////////// +/// /// +/// Truenamer /// +/// /// +//////////////////////////////////////////////////////////////////////////// + +int GetRemainingTruenameChoices(int nClass, int nType, object oPC=OBJECT_SELF) +{ + string sFile = GetClassSpellbookFile(nClass); + json chosenSpells = GetChosenSpellListObject(nClass, oPC); + json circles = JsonObjectKeys(chosenSpells); + int totalCircles = JsonGetLength(circles); + + int remainingChoices = 0; + + int i; + for (i = 0; i < totalCircles; i++) + { + json spellList = JsonObjectGet(chosenSpells, JsonGetString(JsonArrayGet(circles, i))); + if (spellList != JsonNull()) + { + int totalChoices = JsonGetLength(spellList); + + int j; + for (j = 0; j < totalChoices; j++) + { + int spellbookId = JsonGetInt(JsonArrayGet(spellList, j)); + int lexicon = StringToInt(Get2DACache(sFile, "Lexicon", spellbookId)); + // -1 means count all lexicons + if (nType == -1 || lexicon == nType) + remainingChoices += 1; + } + } + } + + int maxChoices; + // if -1 we count all lexicons to get total remaining + if (nType == -1) + maxChoices = (GetMaxUtteranceCount(oPC, nClass, LEXICON_CRAFTED_TOOL) + + GetMaxUtteranceCount(oPC, nClass, LEXICON_EVOLVING_MIND) + + GetMaxUtteranceCount(oPC, nClass, LEXICON_PERFECTED_MAP)); + else + maxChoices = GetMaxUtteranceCount(oPC, nClass, nType); + return (maxChoices - remainingChoices); +} + +int GetLexiconCircleKnownAtLevel(int nLevel, int nType) +{ + + string sFile = "cls_true_maxlvl"; + + string columnName; + if (nType == LEXICON_EVOLVING_MIND) + columnName = "EvolvingMind"; + else if (nType == LEXICON_CRAFTED_TOOL) + columnName = "CraftedTool"; + else + columnName = "PerfectedMap"; + + return StringToInt(Get2DACache(sFile, columnName, nLevel-1)); +} + +//////////////////////////////////////////////////////////////////////////// +/// /// +/// Archivist /// +/// /// +//////////////////////////////////////////////////////////////////////////// + +json GetArchivistNewSpellsList(object oPC=OBJECT_SELF) +{ + json retValue = GetLocalJson(oPC, NUI_LEVEL_UP_ARCHIVIST_NEW_SPELLS_LIST_VAR); + if (retValue == JsonNull()) + retValue = JsonArray(); + else + return retValue; + + SetLocalJson(oPC, NUI_LEVEL_UP_ARCHIVIST_NEW_SPELLS_LIST_VAR, retValue); + return retValue; +} + +//:: void main(){} \ No newline at end of file diff --git a/src/include/prc_nui_sb_inc.nss b/src/include/prc_nui_sb_inc.nss new file mode 100644 index 0000000..409044f --- /dev/null +++ b/src/include/prc_nui_sb_inc.nss @@ -0,0 +1,848 @@ +//:://///////////////////////////////////////////// +//:: PRC Spellbook Script +//:: prc_nui_sb_inc +//::////////////////////////////////////////////// +/* + This is the script that handles some backend work for the PRC Spellbook + NUI View +*/ +//::////////////////////////////////////////////// +//:: Created By: Rakiov +//:: Created On: 24.05.2005 +//::////////////////////////////////////////////// + +#include "prc_nui_com_inc" + +// +// GetSpellListForCircle +// Gets the spell list for a specified class at the specified circle. +// +// Arguments: +// oPlayer:object the player +// nClass:int the ClassID +// circle:int the circle we want to grab for +// +// Returns: +// json:Array a list of all the spellIDs of the given circle +// +json GetSpellListForCircle(object oPlayer, int nClass, int circle); + +// +// GetSupportedNUISpellbookClasses +// Gets the list of support PRC classes that can use the NUi spellbook that +// the player has. +// +// Arguments: +// oPlayer:object the player this is being determined for +// +// Returns: +// json:int list of class ids that have the player has that can use the +// NUI spellbook. +// +json GetSupportedNUISpellbookClasses(object oPlayer); + +// +// IsSpellKnown +// Returns whether the player with the given class, spell file, and spellbook id +// knows the spell or not +// +// Arguments: +// oPlayer;Object the player +// nClass:int the class ID +// spellId:int the spell ID to check +// +// Returns: +// int:Boolean TRUE if spell is known, FALSE otherwise +// +int IsSpellKnown(object oPlayer, int nClass, int spellId); + +// +// IsClassAllowedToUseNUISpellbook +// Takes a player and a classId and determines if thee class is allowed to +// be using the NUI spellbook. +// +// Arguments: +// oPlayer:Object the player +// nClass:int the ClassID +// +// Returns: +// int:Boolean TRUE if allowed to use the spellbook, FALSE otherwise +// +int IsClassAllowedToUseNUISpellbook(object oPlayer, int nClass); + +// +// CanClassUseMetamagicFeats +// Given a class id determines if it is allowed to use the Metamagic feats +// +// Arguments: +// nClass:int the ClassID +// +// Returns: +// int:Boolean TRUE if allowed to use the set of feats, FALSE otherwise +// +int CanClassUseMetamagicFeats(int nClass); + +// +// CanClassUseSuddenMetamagicFeats +// Given a class id determines if it is allowed to use the Sudden Metamagic feats +// +// Arguments: +// nClass:int the ClassID +// +// Returns: +// int:Boolean TRUE if allowed to use the set of feats, FALSE otherwise +// +int CanClassUseSuddenMetamagicFeats(int nClass); + +// +// CanClassUseMetaPsionicFeats +// Given a class id determines if it is allowed to use the MetaPsionic feats +// +// Arguments: +// nClass:int the ClassID +// +// Returns: +// int:Boolean TRUE if allowed to use the set of feats, FALSE otherwise +// +int CanClassUseMetaPsionicFeats(int nClass); + +// +// CanClassUseMetaMysteryFeats +// Given a class id determines if it is allowed to use the MetaMystery feats +// +// Arguments: +// nClass:int the ClassID +// +// Returns: +// int:Boolean TRUE if allowed to use the set of feats, FALSE otherwise +// +int CanClassUseMetaMysteryFeats(int nClass); + +// +// GetMetaMagicFeatList +// Gets the list of MetaMagic featIDs +// +// Returns: +// json:Array the list of FeatIDs associated with the meta feats +// +json GetMetaMagicFeatList(); + +// +// GetSuddenMetaMagicFeatList +// Gets the list of Sudden MetaMagic featIDs +// +// Returns: +// json:Array the list of FeatIDs associated with the meta feats +// +json GetSuddenMetaMagicFeatList(); + +// +// GetMetaPsionicFeatList +// Gets the list of MetaPsionic featIDs +// +// Returns: +// json:Array the list of FeatIDs associated with the meta feats +// +json GetMetaPsionicFeatList(); + +// +// GetMetaMagicMysteryList +// Gets the list of MetaMystery featIDs +// +// Returns: +// json:Array the list of FeatIDs associated with the meta feats +// +json GetMetaMysteryFeatList(); + +// +// GetTrueClassIfRHD +// Checks to make sure if the provided RHD class and player's race +// match up to give them their proper spell caster class (ie Glouras have +// bard spells and thus should be treated like a bard class) +// +// Arguments: +// oPlayer:object the player +// nClass:int the ClassID +// +// Returns: +// int the true ClassID to use, otherwise nClass +// +int GetTrueClassIfRHD(object oPlayer, int nClass); + +// +// ShouldAddSpell +// Given a spellId and a class, determines if the spell should be added to the +// spellbook (as some are added in it's own special row or for other reasons) +// +// Arguments: +// nClass:int the ClassID +// spellId:int the SpellID +// oPlayer:object the player +// +// Returns: +// int:Boolean TRUE if the spell should be added, FALSE otherwise +// +int ShouldAddSpell(int nClass, int spellId, object oPlayer=OBJECT_SELF); + +// +// GetToBStanceSpellList +// Gets the ToB Stance Spell List for the given class +// +// Arguments: +// nClass:int ClassID +// oPlayer:object the player +// +// Returns: +// json:Array the list of stances' SpellIDs +// +json GetToBStanceSpellList(int nClass, object oPlayer=OBJECT_SELF); + +// +// GetInvokerShapeSpellList +// Gets the Invoker Shapes Spell List for the given class +// +// Arguments: +// nClass:int ClassID +// oPlayer:object the player +// +// Returns: +// json:Array the list of shapes' SpellIDs +// +json GetInvokerShapeSpellList(int nClass, object oPlayer=OBJECT_SELF); + +// +// GetInvokerEssenceSpellList +// Gets the Invoker Essences Spell List for the given class +// +// Arguments: +// nClass:int ClassID +// oPlayer:object the player +// +// Returns: +// json:Array the list of essences' SpellIDs +// +json GetInvokerEssenceSpellList(int nClass, object oPlayer=OBJECT_SELF); + +// +// JsonArrayContainsInt +// A helper function that takes a json array list and sees if the int item is within i +// +// Arguments: +// list:json:Array the list of ints +// item:int the item we are looking for +// +// Returns: +// int:Boolean TRUE if item is found, FALSE otherwise +// +int JsonArrayContainsInt(json list, int item); + +// +// IsSpellbookNUIOpen +// Checks to see if the Spellbook NUI is open on a given player. +// +// Arguments: +// oPC:object the player +// +// Returns: +// int:Boolean TRUE if window is open, FALSE otherwise +// +int IsSpellbookNUIOpen(object oPC); + +json GetSpellListForCircle(object oPlayer, int nClass, int circle) +{ + json retValue = JsonArray(); + string sFile = GetClassSpellbookFile(nClass); + int totalSpells; + json binderDictKeys; + //Special case for Binder since they don't have their own spellbook 2da + if (nClass == CLASS_TYPE_BINDER) + { + json binderDict = GetBinderSpellToFeatDictionary(oPlayer); + + // we loop through the list of SpellIDs + binderDictKeys = JsonObjectKeys(binderDict); + totalSpells = JsonGetLength(binderDictKeys); + } + else + totalSpells = Get2DARowCount(sFile); + + int i; + for (i = 0; i < totalSpells; i++) + { + int currentSpell; + if (nClass == CLASS_TYPE_BINDER) + currentSpell = StringToInt(JsonGetString(JsonArrayGet(binderDictKeys, i))); + else + currentSpell = StringToInt(Get2DACache(sFile, "SpellID", i)); + + if (ShouldAddSpell(nClass, currentSpell, oPlayer)) + { + string sSpellLevel = Get2DACache("spells", "Innate", currentSpell); + int iSpellLevel = StringToInt(sSpellLevel); + + if (nClass == CLASS_TYPE_BINDER && IsSpellKnown(oPlayer, nClass, currentSpell)) + { + retValue = JsonArrayInsert(retValue, JsonInt(currentSpell)); + } + else if ((iSpellLevel == circle && IntToString(iSpellLevel) == sSpellLevel)) + { + // We add the spell if it is known and is not a radial master spell (since those don't work) + if (IsSpellKnown(oPlayer, nClass, currentSpell)) + retValue = JsonArrayInsert(retValue, JsonInt(i)); + } + } + } + + return retValue; +} + +int ShouldAddSpell(int nClass, int spellId, object oPlayer=OBJECT_SELF) +{ + int isRadialMasterSpell = StringToInt(Get2DACache("spells", "SubRadSpell1", spellId)); + // We don't add radial master spells + if (isRadialMasterSpell) + return FALSE; + // we don't add essences and shapes + if (nClass == CLASS_TYPE_WARLOCK + || nClass == CLASS_TYPE_DRAGONFIRE_ADEPT + || nClass == CLASS_TYPE_DRAGON_SHAMAN) + { + json ignoreList = GetInvokerShapeSpellList(nClass, oPlayer); + if (JsonArrayContainsInt(ignoreList, spellId)) + return FALSE; + ignoreList = GetInvokerEssenceSpellList(nClass, oPlayer); + if (JsonArrayContainsInt(ignoreList, spellId)) + return FALSE; + } + // we don't add stances + if (nClass == CLASS_TYPE_WARBLADE + || nClass == CLASS_TYPE_SWORDSAGE + || nClass == CLASS_TYPE_CRUSADER) + { + json ignoreList = GetToBStanceSpellList(nClass, oPlayer); + if (JsonArrayContainsInt(ignoreList, spellId)) + return FALSE; + } + + return TRUE; +} + +json GetSupportedNUISpellbookClasses(object oPlayer) +{ + json retValue = JsonArray(); + int i = 1; + while(i >= 1) + { + int classId = GetClassByPosition(i, oPlayer); + if (classId != CLASS_TYPE_INVALID) + { + if (IsClassAllowedToUseNUISpellbook(oPlayer, classId)) + { + classId = GetTrueClassIfRHD(oPlayer, classId); + retValue = JsonArrayInsert(retValue, JsonInt(classId)); + } + i++; + } + else + { + i = -1; + } + } + + return retValue; +} + +int IsSpellKnown(object oPlayer, int nClass, int spellId) +{ + // special case for Binders since they don't have a spell book 2da. + if (nClass == CLASS_TYPE_BINDER) + { + json binderDict = GetBinderSpellToFeatDictionary(oPlayer); + int featID = JsonGetInt(JsonObjectGet(binderDict, IntToString(spellId))); + return GetHasFeat(featID, oPlayer); + } + + int currentSpell = spellId; + int masterSpell = StringToInt(Get2DACache("spells", "Master", currentSpell)); + if (masterSpell) // If this is not 0 then this is a radial spell, check the radial master + currentSpell = masterSpell; + + string sFeatID = Get2DACache("spells", "FeatID", currentSpell); + int iFeatID = StringToInt(sFeatID); + + if (IntToString(iFeatID) == sFeatID) + return GetHasFeat(iFeatID, oPlayer); + + return FALSE; +} + +int IsClassAllowedToUseNUISpellbook(object oPlayer, int nClass) +{ + // This controls who can use the Spellbook NUI, if for some reason you don't + // want a class to be allowed to use this you can comment out their line here + + // Bard and Sorc are allowed if they took a PRC that makes them use the spellbook + if ((nClass == CLASS_TYPE_BARD || nClass == CLASS_TYPE_SORCERER) + && GetPrCAdjustedClassLevel(nClass, oPlayer) > GetLevelByClass(nClass, oPlayer)) + return TRUE; + + // Arcane Spont + if (nClass == CLASS_TYPE_ASSASSIN + || nClass == CLASS_TYPE_BEGUILER + || nClass == CLASS_TYPE_CELEBRANT_SHARESS + || nClass == CLASS_TYPE_DREAD_NECROMANCER + || nClass == CLASS_TYPE_DUSKBLADE + || nClass == CLASS_TYPE_HARPER + || nClass == CLASS_TYPE_HEXBLADE + || nClass == CLASS_TYPE_KNIGHT_WEAVE + || nClass == CLASS_TYPE_SHADOWLORD + || nClass == CLASS_TYPE_SUBLIME_CHORD + || nClass == CLASS_TYPE_SUEL_ARCHANAMACH + || nClass == CLASS_TYPE_WARMAGE) + return TRUE; + + // Psionics + if (nClass == CLASS_TYPE_FIST_OF_ZUOKEN + || nClass == CLASS_TYPE_PSION + || nClass == CLASS_TYPE_PSYWAR + || nClass == CLASS_TYPE_WILDER + || nClass == CLASS_TYPE_PSYCHIC_ROGUE + || nClass == CLASS_TYPE_WARMIND) + return TRUE; + + // Invokers + if (nClass == CLASS_TYPE_WARLOCK + || nClass == CLASS_TYPE_DRAGON_SHAMAN + || nClass == CLASS_TYPE_DRAGONFIRE_ADEPT) + return TRUE; + + // Divine Spont + if (nClass == CLASS_TYPE_ARCHIVIST //while technically prepared, they use the spont system of casting + || nClass == CLASS_TYPE_FAVOURED_SOUL + || nClass == CLASS_TYPE_JUSTICEWW) + return TRUE; + + // ToB Classes + if (nClass == CLASS_TYPE_WARBLADE + || nClass == CLASS_TYPE_SWORDSAGE + || nClass == CLASS_TYPE_CRUSADER) + return TRUE; + + // Mystery Classes + if (nClass == CLASS_TYPE_SHADOWCASTER + || nClass == CLASS_TYPE_SHADOWSMITH) + return TRUE; + + // Truenamers + if (nClass == CLASS_TYPE_TRUENAMER) + return TRUE; + + // RHD Casters + if ((nClass == CLASS_TYPE_SHAPECHANGER + && GetRacialType(oPlayer) == RACIAL_TYPE_ARANEA + && !GetLevelByClass(CLASS_TYPE_SORCERER)) + || (nClass == CLASS_TYPE_OUTSIDER + && GetRacialType(oPlayer) == RACIAL_TYPE_RAKSHASA + && !GetLevelByClass(CLASS_TYPE_SORCERER)) + || (nClass == CLASS_TYPE_ABERRATION + && GetRacialType(oPlayer) == RACIAL_TYPE_DRIDER + && !GetLevelByClass(CLASS_TYPE_SORCERER)) + || (nClass == CLASS_TYPE_MONSTROUS + && GetRacialType(oPlayer) == RACIAL_TYPE_ARKAMOI + && !GetLevelByClass(CLASS_TYPE_SORCERER)) + || (nClass == CLASS_TYPE_MONSTROUS + && GetRacialType(oPlayer) == RACIAL_TYPE_HOBGOBLIN_WARSOUL + && !GetLevelByClass(CLASS_TYPE_SORCERER)) + || (nClass == CLASS_TYPE_MONSTROUS + && GetRacialType(oPlayer) == RACIAL_TYPE_REDSPAWN_ARCANISS + && !GetLevelByClass(CLASS_TYPE_SORCERER)) + || (nClass == CLASS_TYPE_MONSTROUS + && GetRacialType(oPlayer) == RACIAL_TYPE_MARRUTACT + && !GetLevelByClass(CLASS_TYPE_SORCERER)) + || (nClass == CLASS_TYPE_FEY + && GetRacialType(oPlayer) == RACIAL_TYPE_GLOURA + && !GetLevelByClass(CLASS_TYPE_BARD))) + return TRUE; + + // Binders + if (nClass == CLASS_TYPE_BINDER) + return TRUE; + + return FALSE; +} + +int GetTrueClassIfRHD(object oPlayer, int nClass) +{ + if (nClass == CLASS_TYPE_SHAPECHANGER + && GetRacialType(oPlayer) == RACIAL_TYPE_ARANEA) + return CLASS_TYPE_SORCERER; + if (nClass == CLASS_TYPE_OUTSIDER + && GetRacialType(oPlayer) == RACIAL_TYPE_RAKSHASA) + return CLASS_TYPE_SORCERER; + if (nClass == CLASS_TYPE_ABERRATION + && GetRacialType(oPlayer) == RACIAL_TYPE_DRIDER) + return CLASS_TYPE_SORCERER; + if (nClass == CLASS_TYPE_MONSTROUS + && GetRacialType(oPlayer) == RACIAL_TYPE_ARKAMOI) + return CLASS_TYPE_SORCERER; + if (nClass == CLASS_TYPE_MONSTROUS + && GetRacialType(oPlayer) == RACIAL_TYPE_HOBGOBLIN_WARSOUL) + return CLASS_TYPE_SORCERER; + if (nClass == CLASS_TYPE_MONSTROUS + && GetRacialType(oPlayer) == RACIAL_TYPE_REDSPAWN_ARCANISS) + return CLASS_TYPE_SORCERER; + if (nClass == CLASS_TYPE_MONSTROUS + && GetRacialType(oPlayer) == RACIAL_TYPE_MARRUTACT) + return CLASS_TYPE_SORCERER; + if (nClass == CLASS_TYPE_FEY + && GetRacialType(oPlayer) == RACIAL_TYPE_GLOURA) + return CLASS_TYPE_BARD; + + return nClass; +} + +int CanClassUseMetamagicFeats(int nClass) +{ + // I don't want to spend the time looping through each class's + // feat 2da so this is the list of all classes that are allowed to use the + // Spellbook NUI and can use Metamagic + return (nClass == CLASS_TYPE_ASSASSIN + || nClass == CLASS_TYPE_BARD + || nClass == CLASS_TYPE_SORCERER + || nClass == CLASS_TYPE_BEGUILER + || nClass == CLASS_TYPE_DREAD_NECROMANCER + || nClass == CLASS_TYPE_DUSKBLADE + || nClass == CLASS_TYPE_HEXBLADE + || nClass == CLASS_TYPE_JUSTICEWW + || nClass == CLASS_TYPE_SUBLIME_CHORD + || nClass == CLASS_TYPE_SUEL_ARCHANAMACH + || nClass == CLASS_TYPE_FAVOURED_SOUL + || nClass == CLASS_TYPE_WARMAGE); +} + +int CanClassUseSuddenMetamagicFeats(int nClass) +{ + // I don't want to spend the time looping through each class's + // feat 2da so this is the list of all classes that are allowed to use the + // Spellbook NUI and can use Sudden Metamagic + return (nClass == CLASS_TYPE_SHADOWLORD + || nClass == CLASS_TYPE_ARCHIVIST + || nClass == CLASS_TYPE_ASSASSIN + || nClass == CLASS_TYPE_BARD + || nClass == CLASS_TYPE_BEGUILER + || nClass == CLASS_TYPE_DREAD_NECROMANCER + || nClass == CLASS_TYPE_DUSKBLADE + || nClass == CLASS_TYPE_FAVOURED_SOUL + || nClass == CLASS_TYPE_HEXBLADE + || nClass == CLASS_TYPE_JUSTICEWW + || nClass == CLASS_TYPE_KNIGHT_WEAVE + || nClass == CLASS_TYPE_SUBLIME_CHORD + || nClass == CLASS_TYPE_SORCERER + || nClass == CLASS_TYPE_SUEL_ARCHANAMACH + || nClass == CLASS_TYPE_WARMAGE); +} + +int CanClassUseMetaPsionicFeats(int nClass) +{ + // I don't want to spend the time looping through each class's + // feat 2da so this is the list of all classes that are allowed to use the + // Spellbook NUI and can use Metapsionics + return (nClass == CLASS_TYPE_FIST_OF_ZUOKEN + || nClass == CLASS_TYPE_PSION + || nClass == CLASS_TYPE_PSYCHIC_ROGUE + || nClass == CLASS_TYPE_PSYWAR + || nClass == CLASS_TYPE_WARMIND + || nClass == CLASS_TYPE_WILDER); +} + +int CanClassUseMetaMysteryFeats(int nClass) +{ + // I don't want to spend the time looping through each class's + // feat 2da so this is the list of all classes that are allowed to use the + // Spellbook NUI and can use Metamysteries + return (nClass == CLASS_TYPE_SHADOWCASTER + || nClass == CLASS_TYPE_SHADOWSMITH); +} + +json GetMetaMagicFeatList() +{ + json metaFeats = JsonArray(); + int spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_EXTEND_SPELL_ABILITY)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_EMPOWER_SPELL_ABILITY)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_MAXIMIZE_SPELL_ABILITY)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_QUICKEN_SPELL_ABILITY)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_STILL_SPELL_ABILITY)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_SILENT_SPELL_ABILITY)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + + return metaFeats; +} + +json GetSuddenMetaMagicFeatList() +{ + json metaFeats = JsonArray(); + int spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_SUDDEN_EXTEND)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_SUDDEN_EMPOWER)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_SUDDEN_MAXIMIZE)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_SUDDEN_WIDEN)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + + return metaFeats; +} + +json GetMetaPsionicFeatList() +{ + json metaFeats = JsonArray(); + int spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_EXTEND_POWER)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_EMPOWER_POWER)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_MAXIMIZE_POWER)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_QUICKEN_POWER)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_WIDEN_POWER)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_CHAIN_POWER)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_TWIN_POWER)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_SPLIT_PSIONIC_RAY)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + + return metaFeats; +} + +json GetMetaMysteryFeatList() +{ + json metaFeats = JsonArray(); + int spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_EXTEND_MYSTERY)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_EMPOWER_MYSTERY)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_MAXIMIZE_MYSTERY)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_QUICKEN_MYSTERY)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_STILL_MYSTERY)); + metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId)); + + return metaFeats; +} + +json GetToBStanceSpellList(int nClass, object oPlayer=OBJECT_SELF) +{ + // caching + json stanceSpells = GetLocalJson(oPlayer, NUI_SPELLBOOK_CLASS_STANCES_CACHE_BASE_VAR + IntToString(nClass)); + if (stanceSpells == JsonNull()) + stanceSpells = JsonArray(); + else + return stanceSpells; + + string sFile = GetClassSpellbookFile(nClass); + int totalRows = Get2DARowCount(sFile); + + int i; + for (i = 0; i < totalRows; i++) + { + int Type = StringToInt(Get2DACache(sFile, "Type", i)); + if (Type == 1) + { + int spellId = StringToInt(Get2DACache(sFile, "SpellID", i)); + stanceSpells = JsonArrayInsert(stanceSpells, JsonInt(spellId)); + } + } + + SetLocalJson(oPlayer, NUI_SPELLBOOK_CLASS_STANCES_CACHE_BASE_VAR + IntToString(nClass), stanceSpells); + return stanceSpells; +} + +json GetInvokerShapeSpellList(int nClass, object oPlayer=OBJECT_SELF) +{ + // caching + json shapeSpells = GetLocalJson(oPlayer, NUI_SPELLBOOK_CLASS_SHAPES_CACHE_BASE_VAR + IntToString(nClass)); + if (shapeSpells == JsonNull()) + shapeSpells = JsonArray(); + else + return shapeSpells; + + string sFile = GetClassSpellbookFile(nClass); + int totalRows = Get2DARowCount(sFile); + + if (nClass == CLASS_TYPE_WARLOCK) + { + // Add the ELdritch Blast shapes + // TODO: Replace these magic SpellID ints with consts + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(INVOKE_ELDRITCH_BLAST)); + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(18216)); // Eldritch Chain + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(18245)); // Eldritch Cone + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(18261)); // Eldritch Doom + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(18172)); // Glaive + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(18246)); // Eldritch Line + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(18173)); // Eldritch Spear + } + + if (nClass == CLASS_TYPE_DRAGON_SHAMAN) + { + // Add the Dragon Shaman Auras + int spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_ENERGY)); + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_ENERGYSHLD)); + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_INSIGHT)); + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_MAGICPOWER)); + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_POWER)); + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_PRESENCE)); + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_RESISTANCE)); + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_RESOLVE)); + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_SENSES)); + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_STAMINA)); + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_SWIFTNESS)); + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_TOUGHNESS)); + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_VIGOR)); + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId)); + } + + if (nClass == CLASS_TYPE_DRAGONFIRE_ADEPT) + { + // Add Dragon Adept Breaths + // TODO: Replace these magic SpellID ints with consts + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2102)); // Fire Cone + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2103)); // Fire Line + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2104)); // Frost Cone + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2105)); // Electric Line + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2106)); // Sickness Cone + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2108)); // Acid Cone + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2109)); // Acid Line + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2111)); // Slow Cone + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2112)); // Weakening Cone + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2115)); // Sleep Cone + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2116)); // Thunder Cone + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2117)); // Bahamut Line + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2118)); // Force Line + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2119)); // Paralyzation Line + shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2120)); // Tiamat Breath + } + + + SetLocalJson(oPlayer, NUI_SPELLBOOK_CLASS_SHAPES_CACHE_BASE_VAR + IntToString(nClass), shapeSpells); + return shapeSpells; +} + +json GetInvokerEssenceSpellList(int nClass, object oPlayer=OBJECT_SELF) +{ + //caching + json essenceSpells = GetLocalJson(oPlayer, NUI_SPELLBOOK_CLASS_ESSENCE_CACHE_BASE_VAR + IntToString(nClass)); + if (essenceSpells == JsonNull()) + essenceSpells = JsonArray(); + else + return essenceSpells; + + if (nClass == CLASS_TYPE_WARLOCK) + { + // Add Eldritch Essences + // TODO: Replace these magic SpellID ints with consts + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18177)); // Hideous Blow + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18189)); // Baneful Abberation + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18190)); // Baneful Beast + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18191)); // Baneful Construct + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18192)); // Baneful Dragon + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18193)); // Baneful Dwarf + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18194)); // Baneful Elemental + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18195)); // Baneful Elf + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18196)); // baneful Fey + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18197)); // Baneful Giant + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18198)); // Baneful Goblinoid + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18199)); // Baneful Gnome + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18200)); // Baneful Halfling + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18201)); // Baneful Human + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18202)); // Baneful Monsterous + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18203)); // Baneful Orc + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18204)); // Baneful Outsider + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18205)); // Baneful Plant + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18206)); // Baneful Reptilian + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18207)); // Baneful Shapechanger + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18208)); // Baneful Undead + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18209)); // Baneful Vermin + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18210)); // Beshadowed Blast + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18240)); // Bewitching Blast + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18257)); // Binding Blast + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18211)); // Brimstone Blast + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18175)); // Frightful Blast + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18176)); // Hammer Blast + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18183)); // Sickening Blast + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HEALING_BLAST)); + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HELLFIRE_BLAST)); + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HELLFIRE_BLOW)); + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HELLFIRE_CHAIN)); + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HELLFIRE_CONE)); + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HELLFIRE_DOOM)); + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HELLFIRE_GLAIVE)); + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HELLFIRE_LINE)); + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HELLFIRE_SPEAR)); + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18220)); // Hellrime Blast + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18177)); // Hideous Blow + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18249)); // Hindering Blast + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18251)); // Noxious Blast + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18253)); // Penetrating Blast + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18267)); // Utterdark Blast + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18255)); // Vitriolic Blast + } + + if (nClass == CLASS_TYPE_DRAGONFIRE_ADEPT) + { + // Add the Dragonfire Adept Shapes + int spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_SHAPED_ADEPTBREATH)); + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_CLOUD_ADEPTBREATH)); + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(spellId)); + spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_ENDURE_ADEPTBREATH)); + essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(spellId)); + } + + SetLocalJson(oPlayer, NUI_SPELLBOOK_CLASS_ESSENCE_CACHE_BASE_VAR + IntToString(nClass), essenceSpells); + return essenceSpells; +} + +int JsonArrayContainsInt(json list, int item) +{ + int totalCount = JsonGetLength(list); + + int i; + for (i = 0; i < totalCount; i++) + { + if (JsonGetInt(JsonArrayGet(list, i)) == item) + return TRUE; + } + + return FALSE; +} + +int IsSpellbookNUIOpen(object oPC) +{ + int nPreviousToken = NuiFindWindow(oPC, PRC_SPELLBOOK_NUI_WINDOW_ID); + if (nPreviousToken != 0) + { + return TRUE; + } + + return FALSE; +} diff --git a/src/include/prc_nui_sbd_inc.nss b/src/include/prc_nui_sbd_inc.nss new file mode 100644 index 0000000..4f84658 --- /dev/null +++ b/src/include/prc_nui_sbd_inc.nss @@ -0,0 +1,98 @@ +//:://///////////////////////////////////////////// +//:: PRC Spellbook Description NUI +//:: prc_nui_sbd_inc +//::////////////////////////////////////////////// +/* + This is the view for the Spell Description NUI +*/ +//::////////////////////////////////////////////// +//:: Created By: Rakiov +//:: Created On: 29.05.2005 +//::////////////////////////////////////////////// +#include "nw_inc_nui" +#include "prc_nui_consts" +#include "inc_2dacache" + +// +// CreateSpellDescriptionNUI +// Creates a Spell Description NUI mimicing the description GUI of NWN +// +// Arguments: +// oPlayer:Object the player object +// featID:int the FeatID +// spellId:int the SpellID +// realSpellId:int the RealSpellID +// +void CreateSpellDescriptionNUI(object oPlayer, int featID, int spellId=0, int realSpellId=0); + +void CreateSpellDescriptionNUI(object oPlayer, int featID, int spellId=0, int realSpellId=0) +{ + // look for existing window and destroy + int nPreviousToken = NuiFindWindow(OBJECT_SELF, NUI_SPELL_DESCRIPTION_WINDOW_ID); + if(nPreviousToken != 0) + { + NuiDestroy(OBJECT_SELF, nPreviousToken); + } + + // in order of accuracy for names it goes RealSpellID > SpellID > FeatID + string spellName; + if (realSpellId) + spellName = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", realSpellId))); + else if (spellId) + spellName = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", spellId))); + else + spellName = GetStringByStrRef(StringToInt(Get2DACache("feat", "FEAT", featID))); + // Descriptions and Icons are accuratly stored on the feat + string spellDesc = GetStringByStrRef(StringToInt(Get2DACache("feat", "DESCRIPTION", featID))); + string spellIcon = Get2DACache("feat", "ICON", featID); + + json jRoot = JsonArray(); + json jGroup = JsonArray(); + + json jRow = JsonArray(); + + json jImage = NuiImage(JsonString(spellIcon), JsonInt(NUI_ASPECT_EXACT), JsonInt(NUI_HALIGN_LEFT), JsonInt(NUI_VALIGN_TOP)); + jImage = NuiWidth(jImage, 32.0f); + jRow = JsonArrayInsert(jRow, jImage); + jRow = NuiCol(jRow); + jGroup = JsonArrayInsert(jGroup, jRow); + + jRow = JsonArray(); + json jText = NuiText(JsonString(spellDesc), FALSE, NUI_SCROLLBARS_AUTO); + jRow = JsonArrayInsert(jRow, jText); + jRow = NuiCol(jRow); + jGroup = JsonArrayInsert(jGroup, jRow); + + jGroup = NuiRow(jGroup); + jGroup = NuiGroup(jGroup, TRUE, NUI_SCROLLBARS_NONE); + jRoot = JsonArrayInsert(jRoot, jGroup); + + jRow = JsonArray(); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + json jButton = NuiId(NuiButton(JsonString("OK")), NUI_SPELL_DESCRIPTION_OK_BUTTON); + jButton = NuiWidth(jButton, 175.0f); + jButton = NuiHeight(jButton, 48.0f); + jRow = JsonArrayInsert(jRow, jButton); + jRow = NuiRow(jRow); + + jRoot = JsonArrayInsert(jRoot, jRow); + jRoot = NuiCol(jRoot); + + + // This is the main window with jRoot as the main pane. It includes titles and parameters (more on those later) + json nui = NuiWindow(jRoot, JsonString(spellName), NuiBind("geometry"), NuiBind("resizable"), JsonBool(FALSE), NuiBind("closable"), NuiBind("transparent"), NuiBind("border")); + + // finally create it and it'll return us a non-zero token. + int nToken = NuiCreate(oPlayer, nui, NUI_SPELL_DESCRIPTION_WINDOW_ID); + + // get the geometry of the window in case we opened this before and have a + // preference for location + json geometry = NuiRect(893.0f,346.0f, 426.0f, 446.0f); + + // Set the binds to their default values + NuiSetBind(oPlayer, nToken, "geometry", geometry); + NuiSetBind(oPlayer, nToken, "resizable", JsonBool(FALSE)); + NuiSetBind(oPlayer, nToken, "closable", JsonBool(FALSE)); + NuiSetBind(oPlayer, nToken, "transparent", JsonBool(FALSE)); + NuiSetBind(oPlayer, nToken, "border", JsonBool(TRUE)); +} diff --git a/src/include/prc_racial_const.nss b/src/include/prc_racial_const.nss new file mode 100644 index 0000000..f99b8e6 --- /dev/null +++ b/src/include/prc_racial_const.nss @@ -0,0 +1,316 @@ +// Racialtypes + +//Greyhawk Races +const int RACIAL_TYPE_DERRO = 999; + +//Darksun races +const int RACIAL_TYPE_AARAKOCRA = 999; +const int RACIAL_TYPE_DS_DWARF = 999; +const int RACIAL_TYPE_DS_ELF = 999; +const int RACIAL_TYPE_DS_HALFELF = 999; +const int RACIAL_TYPE_DS_HALFGIANT = 999; +const int RACIAL_TYPE_DS_HALFLING = 999; +const int RACIAL_TYPE_MUL = 999; +const int RACIAL_TYPE_PTERRAN = 999; +const int RACIAL_TYPE_THRIKREEN = 999; + +//Dragonlance Races +const int RACIAL_TYPE_BAAZ = 999; +const int RACIAL_TYPE_BOZAK = 999; +const int RACIAL_TYPE_DARK_DWARF = 999; +const int RACIAL_TYPE_GULLY_DWARF = 999; +const int RACIAL_TYPE_IRDA = 999; +const int RACIAL_TYPE_KAGONESTI_ELF = 999; +const int RACIAL_TYPE_KAPAK = 999; +const int RACIAL_TYPE_KENDER = 999; +const int RACIAL_TYPE_KRYNN_HOGRE = 999; +const int RACIAL_TYPE_KRYNN_MINOTAUR = 999; +const int RACIAL_TYPE_SILVANESTI_ELF = 999; +const int RACIAL_TYPE_TINK_GNOME = 999; + +//Eberron Races +const int RACIAL_TYPE_WARFORGED_CHARGER = 145; +const int RACIAL_TYPE_SHIFTER = 146; +const int RACIAL_TYPE_CHANGELING = 147; +const int RACIAL_TYPE_KALASHTAR = 148; +const int RACIAL_TYPE_WARFORGED = 149; +const int RACIAL_TYPE_ZAKYA_RAKSHASA = 150; +const int RACIAL_TYPE_EMPTY_VESSEL = 154; + +//Planescape Races +const int RACIAL_TYPE_BARIAUR = 207; +const int RACIAL_TYPE_BLADELING = 195; +const int RACIAL_TYPE_CHAOND = 196; +const int RACIAL_TYPE_NATHRI = 237; +const int RACIAL_TYPE_TULADHARA = 197; +const int RACIAL_TYPE_ZENYRTHRI = 206; + +//Ravenloft Races +const int RACIAL_TYPE_HVISTANI = 146; +const int RACIAL_TYPE_VISTANI = 147; + +//:: Rokugan/Kara-Tur Races +const int RACIAL_TYPE_TASLOI = 140; +const int RACIAL_TYPE_SPIRIT_FOLK = 243; +const int RACIAL_TYPE_KOROBKURU = 245; +const int RACIAL_TYPE_NEZUMI = 246; + + +//Spelljammer Races +const int RACIAL_TYPE_SCRO = 182; +const int RACIAL_TYPE_XIXCHIL = 181; + +// DMG +const int RACIAL_TYPE_PLANT = 52; + +//Draconic Races +const int RACIAL_TYPE_DRAGONBORN = 128; +const int RACIAL_TYPE_SPELLSCALE = 129; +const int RACIAL_TYPE_REDSPAWN_ARCANISS = 72; +const int RACIAL_TYPE_SPIRETOPDRAGON = 77; + +//Fey-type Races +const int RACIAL_TYPE_BRALANI = 159; +const int RACIAL_TYPE_BROWNIE = 53; +const int RACIAL_TYPE_GRIG = 133; +const int RACIAL_TYPE_JAEBRIN = 78; +const int RACIAL_TYPE_NIXIE = 134; +const int RACIAL_TYPE_NYMPH = 135; +const int RACIAL_TYPE_PIXIE = 226; +const int RACIAL_TYPE_SATYR = 136; +const int RACIAL_TYPE_HYBSIL = 66; + +//Outsider Races +const int RACIAL_TYPE_ASURA = 80; +const int RACIAL_TYPE_AZER = 227; +const int RACIAL_TYPE_BUOMMANS = 238; +const int RACIAL_TYPE_DJINNI = 81; +const int RACIAL_TYPE_EFREETI = 82; +const int RACIAL_TYPE_FORMIAN = 232; +const int RACIAL_TYPE_GITHYANKI = 222; +const int RACIAL_TYPE_GITHZERAI = 223; +const int RACIAL_TYPE_GLOAMING = 83; +const int RACIAL_TYPE_HOUND_ARCHON = 84; +const int RACIAL_TYPE_KHAASTA = 94; +const int RACIAL_TYPE_JANNI = 85; +const int RACIAL_TYPE_MEPHIT_AIR = 86; +const int RACIAL_TYPE_MEPHIT_EARTH = 87; +const int RACIAL_TYPE_MEPHIT_FIRE = 88; +const int RACIAL_TYPE_MEPHIT_WATER = 89; +const int RACIAL_TYPE_MEPHLING_AIR = 90; +const int RACIAL_TYPE_MEPHLING_EARTH = 91; +const int RACIAL_TYPE_MEPHLING_FIRE = 92; +const int RACIAL_TYPE_MEPHLING_WATER = 93; +const int RACIAL_TYPE_NERAPHIM = 235; +const int RACIAL_TYPE_RAKSHASA = 224; +const int RACIAL_TYPE_SALAMANDER = 95; +const int RACIAL_TYPE_SHADE = 210; +const int RACIAL_TYPE_SPIKER = 239; +const int RACIAL_TYPE_WILDREN = 240; +const int RACIAL_TYPE_NAZTHARUNE_RAKSHASA = 96; +const int RACIAL_TYPE_RETH_DEKALA = 67; + +//Planetouched Races +const int RACIAL_TYPE_AASIMAR = 198; +const int RACIAL_TYPE_AIR_GEN = 199; +const int RACIAL_TYPE_EARTH_GEN = 200; +const int RACIAL_TYPE_FEYRI = 201; +const int RACIAL_TYPE_FIRE_GEN = 202; +const int RACIAL_TYPE_MORTIF = 132; +const int RACIAL_TYPE_TANARUKK = 203; +const int RACIAL_TYPE_TIEFLING = 204; +const int RACIAL_TYPE_WATER_GEN = 205; +const int RACIAL_TYPE_SHADOWSWYFT = 236; + +//Serpent Kingdom and Reptillian Races +const int RACIAL_TYPE_ABOM_YUAN = 228; +const int RACIAL_TYPE_ASABI = 999; +const int RACIAL_TYPE_ASABI_STINGTAIL = 999; +const int RACIAL_TYPE_KUOTOA = 999; +const int RACIAL_TYPE_LIZARDFOLK = 219; +const int RACIAL_TYPE_LIZARDKING = 68; +const int RACIAL_TYPE_MEDUSA = 69; +const int RACIAL_TYPE_OPHIDIAN = 999; +const int RACIAL_TYPE_POISON_DUSK = 248; +const int RACIAL_TYPE_PURE_YUAN = 220; +const int RACIAL_TYPE_SAHUAGIN = 71; +const int RACIAL_TYPE_SK_YUANTI = 233; +const int RACIAL_TYPE_TREN = 72; +const int RACIAL_TYPE_VILETOOTH_LIZARDFOLK = 112; +const int RACIAL_TYPE_MUCKDWELLER = 74; + +//Underdark Races +const int RACIAL_TYPE_ARANEA = 75; +const int RACIAL_TYPE_BEHOLDER = -1; +const int RACIAL_TYPE_DRIDER = 50; +const int RACIAL_TYPE_GRIMLOCK = 77; +const int RACIAL_TYPE_ILLITHID = 225; +const int RACIAL_TYPE_IMASKARI = 230; +const int RACIAL_TYPE_SLYTH = 78; +const int RACIAL_TYPE_TROGLODYTE = 234; +const int RACIAL_TYPE_UMBER_HULK = 79; +const int RACIAL_TYPE_GLOURA = 73; + +//Other Monsterous Races +const int RACIAL_TYPE_CENTAUR = 208; +const int RACIAL_TYPE_CATFOLK = 209; +const int RACIAL_TYPE_DIABOLUS = 113; +const int RACIAL_TYPE_DIOPSID = 114; +const int RACIAL_TYPE_DRAGONKIN = 58; +const int RACIAL_TYPE_ETTERCAP = 73; +const int RACIAL_TYPE_FIRENEWT = 59; +const int RACIAL_TYPE_GARGOYLE = 185; +const int RACIAL_TYPE_KIRLANAN = 60; +const int RACIAL_TYPE_LUPIN = 186; +const int RACIAL_TYPE_PTERAFOLK = 61; +const int RACIAL_TYPE_RAPTORAN = 130; +const int RACIAL_TYPE_SAURIAL_BLADEBACK = 62; +const int RACIAL_TYPE_SAURIAL_FINHEAD = 63; +const int RACIAL_TYPE_SAURIAL_FLYER = 64; +const int RACIAL_TYPE_SAURIAL_HORNHEAD = 65; +const int RACIAL_TYPE_TORTLE = 118; +const int RACIAL_TYPE_VOLODNI = 131; +const int RACIAL_TYPE_WEMIC = 51; +const int RACIAL_TYPE_ARKAMOI = 68; +const int RACIAL_TYPE_LASHEMOI = 69; +const int RACIAL_TYPE_TURLEMOI = 70; +const int RACIAL_TYPE_HADRIMOI = 71; + +// XPH +const int RACIAL_TYPE_DROMITE = 249; +const int RACIAL_TYPE_ELAN = 250; +const int RACIAL_TYPE_MAENADS = 252; +const int RACIAL_TYPE_PH_HALFGIANT = 251; +const int RACIAL_TYPE_XEPH = 253; + +//Unapproachable East +const int RACIAL_TYPE_HAGSPAWN = 58; +const int RACIAL_TYPE_TAER = 59; + +//Races of the Wild +const int RACIAL_TYPE_KILLOREN = 244; + +// Underdark +const int RACIAL_TYPE_CHITINE = 76; + +//Frostburn +const int RACIAL_TYPE_NEANDERTHAL = 61; +const int RACIAL_TYPE_FROST_FOLK = 62; +const int RACIAL_TYPE_ULDRA = 63; + +//Magic of Incarnum +const int RACIAL_TYPE_AZURIN = 130; +const int RACIAL_TYPE_DUSKLING = 129; +const int RACIAL_TYPE_RILKAN = 128; +const int RACIAL_TYPE_SKARN = 127; + +//Races of Destiny +const int RACIAL_TYPE_ILLUMIAN = 120; +const int RACIAL_TYPE_MONGRELFOLK = 121; +const int RACIAL_TYPE_SHARAKIM = 122; +const int RACIAL_TYPE_UNDERFOLK = 123; +const int RACIAL_TYPE_SKULK = 124; +const int RACIAL_TYPE_DOPPELGANGER = 125; + +//Races of Stone +const int RACIAL_TYPE_GOLIATH = 55; +const int RACIAL_TYPE_FERAL_GARGUN = 56; +const int RACIAL_TYPE_STONECHILD = 57; + +//Sandstorm +const int RACIAL_TYPE_ASHERATI = 115; +const int RACIAL_TYPE_BHUKA = 116; +const int RACIAL_TYPE_MARRULURK = 117; +const int RACIAL_TYPE_CRUCIAN = 118; +const int RACIAL_TYPE_MARRUSAULT = 119; +const int RACIAL_TYPE_MARRUTACT = 120; + +//Stormwrack +const int RACIAL_TYPE_DARFELLAN = 117; +const int RACIAL_TYPE_HADOZEE = 180; + +//Champions of Ruin +const int RACIAL_TYPE_KRINTH = 54; +const int RACIAL_TYPE_EXTAMINAAR = 64; + +// Tome of Magic +const int RACIAL_TYPE_KARSITE = 65; + +/* Standard Races */ + +//:: Human +const int RACIAL_TYPE_SILVERBROW_HUMAN = 110; + +//:: Elf +const int RACIAL_TYPE_AQELF = 161; +const int RACIAL_TYPE_AVARIEL = 162; +const int RACIAL_TYPE_DROW_FEMALE = 163; +const int RACIAL_TYPE_DROW_MALE = 164; +const int RACIAL_TYPE_FORESTLORD_ELF = 107; +const int RACIAL_TYPE_HALFDROW = 183; +const int RACIAL_TYPE_SNOW_ELF = 165; +const int RACIAL_TYPE_STAR_ELF = 160; +const int RACIAL_TYPE_SUN_ELF = 166; +const int RACIAL_TYPE_WILD_ELF = 167; +const int RACIAL_TYPE_WOOD_ELF = 168; +const int RACIAL_TYPE_GREY_ELF = 169; + +//:: Dwarf +const int RACIAL_TYPE_ARC_DWARF = 151; +const int RACIAL_TYPE_DREAM_DWARF = 157; +const int RACIAL_TYPE_FIREBLOOD_DWARF = 106; +const int RACIAL_TYPE_FROST_DWARF = 158; +const int RACIAL_TYPE_GOLD_DWARF = 152; +const int RACIAL_TYPE_DUERGAR = 153; +const int RACIAL_TYPE_GLACIER_DWARF = 154; +const int RACIAL_TYPE_URDINNIR = 155; +const int RACIAL_TYPE_WILD_DWARF = 156; + +//:: Gnome +const int RACIAL_TYPE_CHAOS_GNOME = 177; +const int RACIAL_TYPE_DEEP_GNOME = 174; +const int RACIAL_TYPE_FIRE_GNOME = 173; +const int RACIAL_TYPE_FOR_GNOME = 175; +const int RACIAL_TYPE_ICE_GNOME = 178; +const int RACIAL_TYPE_ROCK_GNOME = 176; +const int RACIAL_TYPE_STONEHUNTER_GNOME = 105; +const int RACIAL_TYPE_SVIRFNEBLIN = 174; +const int RACIAL_TYPE_WHISPER_GNOME = 179; + +//:: Halfling +const int RACIAL_TYPE_DEEP_HALFLING = 194; +const int RACIAL_TYPE_GHOSTWISE_HALFLING = 190; +const int RACIAL_TYPE_GLIMMERSKIN_HALFING = 109; +const int RACIAL_TYPE_JARREN = 189; +const int RACIAL_TYPE_SHOAL_HALFLING = 188; +const int RACIAL_TYPE_STRONGHEART_HALFLING = 192; +const int RACIAL_TYPE_TALLFELLOW_HALFLING = 193; +const int RACIAL_TYPE_TUNDRA_HALFLING = 191; + +//:: Goblinoid +const int RACIAL_TYPE_BLUE_GOBLIN = 143; +const int RACIAL_TYPE_DEKANTER = 142; +const int RACIAL_TYPE_GOBLIN = 213; +const int RACIAL_TYPE_SNOW_GOBLIN = 141; +const int RACIAL_TYPE_BUGBEAR = 217; +const int RACIAL_TYPE_HOBGOBLIN = 221; +const int RACIAL_TYPE_SUNSCORCH_HOBGOBLIN = 111; +const int RACIAL_TYPE_VARAG = 232; +const int RACIAL_TYPE_HOBGOBLIN_WARSOUL = 233; + +//:: "Greenskin" Races +const int RACIAL_TYPE_FLIND = 211; +const int RACIAL_TYPE_FROSTBLOOD_ORC = 108; +const int RACIAL_TYPE_GNOLL = 216; +const int RACIAL_TYPE_GRAYORC = 184; +const int RACIAL_TYPE_HALFOGRE = 229; +const int RACIAL_TYPE_KOBOLD = 215; +const int RACIAL_TYPE_MINOTAUR = 218; +const int RACIAL_TYPE_OGRE = 212; +const int RACIAL_TYPE_OMAGE = 211; +const int RACIAL_TYPE_OROG = 187; +const int RACIAL_TYPE_ORC = 214; +const int RACIAL_TYPE_TROLL = 231; + + + diff --git a/src/include/prc_shifter_info.nss b/src/include/prc_shifter_info.nss new file mode 100644 index 0000000..2a9ed78 --- /dev/null +++ b/src/include/prc_shifter_info.nss @@ -0,0 +1,1436 @@ + +//:: Updated for .35 by Jaysyn 2023/03/10 + +#include "prc_inc_function" +#include "inc_nwnx_funcs" + +//:: Test Void +//void main (){} + + +const int DEBUG_NATURAL_AC_CALCULATION = FALSE; +int MAX_BONUS = GetPRCSwitch(PRC_PNP_SHIFTER_BONUS); +const int MAX_PENALTY = 10; +int NWNX_STR_LIMIT = 100 - MAX_BONUS; + +struct _prc_inc_ability_info_struct{ + int nTemplateSTR; + int nTemplateDEX; + int nTemplateCON; + + int nShifterSTR; + int nShifterDEX; + int nShifterCON; + + int nDeltaSTR; + int nDeltaDEX; + int nDeltaCON; + + int nItemSTR; + int nItemDEX; + int nItemCON; + + int nExtraSTR; + int nExtraDEX; + int nExtraCON; + + int nItemDeltaSTR; + int nItemDeltaDEX; + int nItemDeltaCON; +}; + +//TODO: also count item penalties? +struct _prc_inc_ability_info_struct _prc_inc_CountItemAbilities(object oCreature) +{ + struct _prc_inc_ability_info_struct rInfoStruct; + rInfoStruct.nItemSTR = 0; + rInfoStruct.nItemDEX = 0; + rInfoStruct.nItemCON = 0; + + object oItem; + itemproperty iProperty; + int nSlot; + for(nSlot = 0; nSlot < NUM_INVENTORY_SLOTS; nSlot++) + { + switch (nSlot) + { + case INVENTORY_SLOT_CARMOUR: + case INVENTORY_SLOT_CWEAPON_R: + case INVENTORY_SLOT_CWEAPON_L: + case INVENTORY_SLOT_CWEAPON_B: + break; + + default: + { + oItem = GetItemInSlot(nSlot, oCreature); + if (GetIsObjectValid(oItem)) + { + iProperty = GetFirstItemProperty(oItem); + while (GetIsItemPropertyValid(iProperty)) + { + if (GetItemPropertyType(iProperty) == ITEM_PROPERTY_ABILITY_BONUS && + GetItemPropertyDurationType(iProperty) == DURATION_TYPE_PERMANENT + ) + { + int nSubType = GetItemPropertySubType(iProperty); + int nCostTableValue = GetItemPropertyCostTableValue(iProperty); + if (nSubType == IP_CONST_ABILITY_STR) + rInfoStruct.nItemSTR += nCostTableValue; + else if (nSubType == IP_CONST_ABILITY_DEX) + rInfoStruct.nItemDEX += nCostTableValue; + else if (nSubType == IP_CONST_ABILITY_CON) + rInfoStruct.nItemCON += nCostTableValue; + } + // Next item property. + iProperty = GetNextItemProperty(oItem); + } + } + } + } + } + return rInfoStruct; +} + +struct _prc_inc_ability_info_struct _prc_inc_shifter_GetAbilityInfo(object oTemplate, object oShifter) +{ + int bFuncs = GetPRCSwitch(PRC_NWNX_FUNCS); + + //Initialize with item ability bonuses + + struct _prc_inc_ability_info_struct rInfoStruct = _prc_inc_CountItemAbilities(oShifter); + + //Get template creature abilities + + rInfoStruct.nTemplateSTR = GetAbilityScore(oTemplate, ABILITY_STRENGTH, TRUE); + rInfoStruct.nTemplateDEX = GetAbilityScore(oTemplate, ABILITY_DEXTERITY, TRUE); + rInfoStruct.nTemplateCON = GetAbilityScore(oTemplate, ABILITY_CONSTITUTION, TRUE); + //TODO: merge in "Ability Bonus: Strength" from item property from template hide here (not too important, as not many templates use this) + //TODO: merge in "Ability Bonus: Dexterity" from item property from template hide here (not too important, as not many templates use this) + //TODO: merge in "Ability Bonus: Constitution" from item property from template hide here (not too important, as not many templates use this) + + //Calculate how they compare to the shifter's abilities + + rInfoStruct.nShifterSTR = GetAbilityScore(oShifter, ABILITY_STRENGTH, TRUE); + rInfoStruct.nShifterDEX = GetAbilityScore(oShifter, ABILITY_DEXTERITY, TRUE); + rInfoStruct.nShifterCON = GetAbilityScore(oShifter, ABILITY_CONSTITUTION, TRUE); + + rInfoStruct.nDeltaSTR = rInfoStruct.nTemplateSTR - rInfoStruct.nShifterSTR; + rInfoStruct.nDeltaDEX = rInfoStruct.nTemplateDEX - rInfoStruct.nShifterDEX; + rInfoStruct.nDeltaCON = rInfoStruct.nTemplateCON - rInfoStruct.nShifterCON; + + //Handle stat boosting items + if (rInfoStruct.nItemSTR > MAX_BONUS) + rInfoStruct.nItemSTR = MAX_BONUS; + else if (rInfoStruct.nItemSTR < -MAX_PENALTY) + rInfoStruct.nItemSTR = -MAX_PENALTY; + + if (rInfoStruct.nItemDEX > MAX_BONUS) + rInfoStruct.nItemDEX = MAX_BONUS; + else if (rInfoStruct.nItemDEX < -MAX_PENALTY) + rInfoStruct.nItemDEX = -MAX_PENALTY; + + if (rInfoStruct.nItemCON > MAX_BONUS) + rInfoStruct.nItemCON = MAX_BONUS; + else if (rInfoStruct.nItemCON < -MAX_PENALTY) + rInfoStruct.nItemCON = -MAX_PENALTY; + + //Handle changes that exceed bonus or penalty caps + + rInfoStruct.nItemDeltaSTR = rInfoStruct.nDeltaSTR + rInfoStruct.nItemSTR; + if (bFuncs) + { + //NWNX boosts aren't capped, so we don't need to handle caps, generally speaking. + rInfoStruct.nExtraSTR = 0; + + //However, due to a Bioware issue, if STR, including bonuses, goes greater than 100, + //the amount of weight the PC can carry drops to 0. So, cap STR to make sure this doesn't happen. + + if (rInfoStruct.nTemplateSTR > NWNX_STR_LIMIT) + { + rInfoStruct.nExtraSTR = rInfoStruct.nTemplateSTR - NWNX_STR_LIMIT; + rInfoStruct.nTemplateSTR = NWNX_STR_LIMIT; + rInfoStruct.nDeltaSTR = rInfoStruct.nTemplateSTR - rInfoStruct.nShifterSTR; + } + } + else if (rInfoStruct.nItemDeltaSTR > MAX_BONUS) + rInfoStruct.nExtraSTR = rInfoStruct.nItemDeltaSTR - MAX_BONUS; + else if(rInfoStruct.nItemDeltaSTR < -MAX_PENALTY) + rInfoStruct.nExtraSTR = rInfoStruct.nItemDeltaSTR + MAX_PENALTY; + + rInfoStruct.nItemDeltaDEX = rInfoStruct.nDeltaDEX + rInfoStruct.nItemDEX; + if (bFuncs) + rInfoStruct.nExtraDEX = 0; //NWNX boosts aren't capped, so we don't need to handle caps + else if (rInfoStruct.nItemDeltaDEX > MAX_BONUS) + rInfoStruct.nExtraDEX = rInfoStruct.nItemDeltaDEX - MAX_BONUS; + else if(rInfoStruct.nItemDeltaDEX < -MAX_PENALTY) + rInfoStruct.nExtraDEX = rInfoStruct.nItemDeltaDEX + MAX_PENALTY; + + rInfoStruct.nItemDeltaCON = rInfoStruct.nDeltaCON + rInfoStruct.nItemCON; + if (bFuncs) + rInfoStruct.nExtraCON = 0; //NWNX boosts aren't capped, so we don't need to handle caps + else if (rInfoStruct.nItemDeltaCON > MAX_BONUS) + rInfoStruct.nExtraCON = rInfoStruct.nItemDeltaCON - MAX_BONUS; + else if(rInfoStruct.nItemDeltaCON < -MAX_PENALTY) + rInfoStruct.nExtraCON = rInfoStruct.nItemDeltaCON + MAX_PENALTY; + + return rInfoStruct; +} + +int _prc_inc_GetItemACBonus(object oItem) +{ + int nArmorBonus = 0; + itemproperty iProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(iProp)) + { + if(GetItemPropertyType(iProp) == ITEM_PROPERTY_AC_BONUS && GetItemPropertyDurationType(iProp) == DURATION_TYPE_PERMANENT) + nArmorBonus = PRCMax(nArmorBonus, GetItemPropertyCostTableValue(iProp)); //TODO: pick the biggest? the first? stack them? + iProp = GetNextItemProperty(oItem); + } + return nArmorBonus; +} + +int _prc_inc_GetArmorMaxDEXBonus(object oArmor, int nMaxDexACBonus = 100) +{ + if (GetIsObjectValid(oArmor)) + { + int nArmorAC = GetItemACValue(oArmor) - _prc_inc_GetItemACBonus(oArmor); //Exclude magical AC bonus to figure out armor type + switch(nArmorAC) + { + //TODO: CAN THESE BE LOOKED UP IN A 2DA OR SOMEWHERE? + case 8: case 7: case 6: + nMaxDexACBonus = 1; break; + case 5: + nMaxDexACBonus = 2; break; + case 4: case 3: + nMaxDexACBonus = 4; break; + case 2: + nMaxDexACBonus = 6; break; + case 1: + nMaxDexACBonus = 8; break; + } + } + return nMaxDexACBonus; +} + +struct _prc_inc_ac_info_struct{ + int nArmorBase; + int nArmorBonus; + + int nShieldBase; + int nShieldBonus; + + int nDodgeBonus; + int nNaturalBonus; + int nDeflectionBonus; + + int nDEXBonus; +}; + +struct _prc_inc_ac_info_struct _prc_inc_ACInfo(object oTemplate) +{ + struct _prc_inc_ac_info_struct ac_info; + + object oArmorItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oTemplate); + ac_info.nArmorBonus = _prc_inc_GetItemACBonus(oArmorItem); + ac_info.nArmorBase = GetItemACValue(oArmorItem) - ac_info.nArmorBonus; + + ac_info.nDodgeBonus = GetItemACValue(GetItemInSlot(INVENTORY_SLOT_BOOTS, oTemplate)); + ac_info.nNaturalBonus = GetItemACValue(GetItemInSlot(INVENTORY_SLOT_NECK, oTemplate)); + + ac_info.nDeflectionBonus = GetItemACValue(GetItemInSlot(INVENTORY_SLOT_HEAD, oTemplate)); + ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTemplate))); + ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CLOAK, oTemplate))); + ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oTemplate))); + ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_LEFTRING, oTemplate))); + ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_BELT, oTemplate))); + ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_ARROWS, oTemplate))); + ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_BULLETS, oTemplate))); + ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_BOLTS, oTemplate))); + ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTemplate))); + ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTemplate))); + ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTemplate))); + ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oTemplate))); + + object oOffHandItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTemplate); + ac_info.nShieldBase = 0; + ac_info.nShieldBonus = 0; + switch (GetBaseItemType(oOffHandItem)) + { + case BASE_ITEM_SMALLSHIELD: + ac_info.nShieldBase = 1; + ac_info.nShieldBonus = GetItemACValue(oOffHandItem) - ac_info.nShieldBase; + break; + case BASE_ITEM_LARGESHIELD: + ac_info.nShieldBase = 2; + ac_info.nShieldBonus = GetItemACValue(oOffHandItem) - ac_info.nShieldBase; + break; + case BASE_ITEM_TOWERSHIELD: + ac_info.nShieldBase = 3; + ac_info.nShieldBonus = GetItemACValue(oOffHandItem) - ac_info.nShieldBase; + break; + default: //A weapon + ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(oOffHandItem)); + break; + } + + object oArmsItem = GetItemInSlot(INVENTORY_SLOT_ARMS, oTemplate); + switch (GetBaseItemType(oArmsItem)) + { + case BASE_ITEM_BRACER: + ac_info.nShieldBonus = PRCMax(ac_info.nShieldBonus, GetItemACValue(oArmsItem)); + break; + case BASE_ITEM_GLOVES: + default: + ac_info.nDeflectionBonus = PRCMax(ac_info.nDeflectionBonus, GetItemACValue(oArmsItem)); + break; + } + + if (ac_info.nArmorBonus > 20) + ac_info.nArmorBonus = 20; + if (ac_info.nDodgeBonus > 20) + ac_info.nDodgeBonus = 20; + if (ac_info.nNaturalBonus > 20) + ac_info.nNaturalBonus = 20; + if (ac_info.nDeflectionBonus > 20) + ac_info.nDeflectionBonus = 20; + if (ac_info.nShieldBonus > 20) + ac_info.nShieldBonus = 20; + + ac_info.nDEXBonus = PRCMin(GetAbilityModifier(ABILITY_DEXTERITY, oTemplate), _prc_inc_GetArmorMaxDEXBonus(oArmorItem)); + //TODO: make sure this isn't < 0? + + return ac_info; +} + +//Estimate natural AC of the creature oTemplate +int _prc_inc_CreatureNaturalAC(object oTemplate) +{ + struct _prc_inc_ac_info_struct ac_info = _prc_inc_ACInfo(oTemplate); + + //TODO: GetAC(oTemplate) often returns an AC different (usually higher) than the combat debugging log indicates it should be. + //Note that combat debugging doesn't report DEX bonus, Monk WIS bonus, etc.; where does this come in? + int nNaturalAC = GetAC(oTemplate) + - 10 // Adjust for base AC + - ac_info.nDEXBonus // And Dex bonus + - ac_info.nArmorBase // Etc... + - ac_info.nArmorBonus + - ac_info.nDodgeBonus + - ac_info.nNaturalBonus + - ac_info.nDeflectionBonus + - ac_info.nShieldBase + - ac_info.nShieldBonus; + + //TODO: + //Subtract +4 Dodge bonus if template has Haste? + //Subtract +1 AC / each 5 points of the Tumble skill? + //Subtract Monk AC from level progression? + //Subtract WIS AC if Monk/Ninja, etc.? + //Make sure nNaturalAC is not < 0 (it was for me once using the old method of calculation, which is why I created this new one) + + if (DEBUG_NATURAL_AC_CALCULATION || DEBUG) + { + DoDebug("_prc_inc_CreatureNaturalAC: total ac: " + IntToString(GetAC(oTemplate))); + DoDebug("_prc_inc_CreatureNaturalAC: base ac: " + IntToString(10)); + DoDebug("_prc_inc_CreatureNaturalAC: armor base ac: " + IntToString(ac_info.nArmorBase)); + DoDebug("_prc_inc_CreatureNaturalAC: armor bonus ac: " + IntToString(ac_info.nArmorBonus)); + DoDebug("_prc_inc_CreatureNaturalAC: shield base ac: " + IntToString(ac_info.nShieldBase)); + DoDebug("_prc_inc_CreatureNaturalAC: shield bonus ac: " + IntToString(ac_info.nShieldBonus)); + DoDebug("_prc_inc_CreatureNaturalAC: dodge bonus ac: " + IntToString(ac_info.nDodgeBonus)); + DoDebug("_prc_inc_CreatureNaturalAC: natural bonus ac: " + IntToString(ac_info.nNaturalBonus)); + DoDebug("_prc_inc_CreatureNaturalAC: deflection bonus ac: " + IntToString(ac_info.nDeflectionBonus)); + DoDebug("_prc_inc_CreatureNaturalAC: dex ac: " + IntToString(ac_info.nDEXBonus)); + DoDebug("_prc_inc_CreatureNaturalAC: calculated natural ac: " + IntToString(nNaturalAC)); + } + + //TODO: combat debugging shows actual natural AC (as well as other type); compare with that to debug. + + return nNaturalAC; +} + +int _prc_inc_GetFeatDeathAttackLevel(int nFeat) +{ + switch(nFeat) + { + case FEAT_PRESTIGE_DEATH_ATTACK_1: return 1; + case FEAT_PRESTIGE_DEATH_ATTACK_2: return 2; + case FEAT_PRESTIGE_DEATH_ATTACK_3: return 3; + case FEAT_PRESTIGE_DEATH_ATTACK_4: return 4; + case FEAT_PRESTIGE_DEATH_ATTACK_5: return 5; + case FEAT_PRESTIGE_DEATH_ATTACK_6: return 6; + case FEAT_PRESTIGE_DEATH_ATTACK_7: return 7; + case FEAT_PRESTIGE_DEATH_ATTACK_8: return 8; + case FEAT_PRESTIGE_DEATH_ATTACK_9: return 9; + case FEAT_PRESTIGE_DEATH_ATTACK_10: return 10; + case FEAT_PRESTIGE_DEATH_ATTACK_11: return 11; + case FEAT_PRESTIGE_DEATH_ATTACK_12: return 12; + case FEAT_PRESTIGE_DEATH_ATTACK_13: return 13; + case FEAT_PRESTIGE_DEATH_ATTACK_14: return 14; + case FEAT_PRESTIGE_DEATH_ATTACK_15: return 15; + case FEAT_PRESTIGE_DEATH_ATTACK_16: return 16; + case FEAT_PRESTIGE_DEATH_ATTACK_17: return 17; + case FEAT_PRESTIGE_DEATH_ATTACK_18: return 18; + case FEAT_PRESTIGE_DEATH_ATTACK_19: return 19; + case FEAT_PRESTIGE_DEATH_ATTACK_20: return 20; + } + return 0; +} + +int _prc_inc_GetHasFeat(object oTemplate, int nFeat) +{ + //If oTemplate has the feat FEAT_SNEAK_ATTACK_10, GetHasFeat() always says + //it has FEAT_PRESTIGE_DEATH_ATTACK_1 through FEAT_PRESTIGE_DEATH_ATTACK_20, + //whether it actually does or not. Work around this as follows: + int nSuppress=0; + int FEAT_SNEAK_ATTACK_10 = 353; + if(GetHasFeat(FEAT_SNEAK_ATTACK_10, oTemplate)) + { + int nFeatDeathAttackLevel = _prc_inc_GetFeatDeathAttackLevel(nFeat); + if(nFeatDeathAttackLevel) + { + int nActualDeathAttackLevel = 0; + nActualDeathAttackLevel += (GetLevelByClass(CLASS_TYPE_ASSASSIN, oTemplate) + 1) / 2; + //TODO: Add other classes here? OR use GetTotalSneakAttackDice(), etc. from prc_inc_sneak instead? + if(nFeatDeathAttackLevel > nActualDeathAttackLevel) + nSuppress = 1; + } + } + + return GetHasFeat(nFeat, oTemplate) && !nSuppress; +} + +int _prc_inc_shifting_GetIsCreatureHarmless(object oTemplate) +{ + return GetChallengeRating(oTemplate) < 1.0; +} + +int _prc_inc_shifting_CharacterLevelRequirement(object oTemplate) +{ + return GetPRCSwitch(PNP_SHFT_USECR) ? FloatToInt(GetChallengeRating(oTemplate)) : GetHitDice(oTemplate); +} + +int _prc_inc_shifting_ShifterLevelRequirement(object oTemplate) +{ + int nRacialType = MyPRCGetRacialType(oTemplate); + int nSize = PRCGetCreatureSize(oTemplate); + int nLevelRequired = 0; + + // Size tests + if(nSize >= CREATURE_SIZE_HUGE) + nLevelRequired = PRCMax(nLevelRequired, 7); + if(nSize == CREATURE_SIZE_LARGE) + nLevelRequired = PRCMax(nLevelRequired, 3); + if(nSize == CREATURE_SIZE_MEDIUM) + nLevelRequired = PRCMax(nLevelRequired, 1); + if(nSize == CREATURE_SIZE_SMALL) + nLevelRequired = PRCMax(nLevelRequired, 1); + if(nSize <= CREATURE_SIZE_TINY) + nLevelRequired = PRCMax(nLevelRequired, 3); + + // Type tests + if(nRacialType == RACIAL_TYPE_OUTSIDER) + nLevelRequired = PRCMax(nLevelRequired, 9); + if(nRacialType == RACIAL_TYPE_ELEMENTAL) + nLevelRequired = PRCMax(nLevelRequired, 9); + if(nRacialType == RACIAL_TYPE_CONSTRUCT) + nLevelRequired = PRCMax(nLevelRequired, 8); + if(nRacialType == RACIAL_TYPE_UNDEAD) + nLevelRequired = PRCMax(nLevelRequired, 8); + if(nRacialType == RACIAL_TYPE_DRAGON) + nLevelRequired = PRCMax(nLevelRequired, 7); + if(nRacialType == RACIAL_TYPE_ABERRATION) + nLevelRequired = PRCMax(nLevelRequired, 6); + if(nRacialType == RACIAL_TYPE_OOZE) + nLevelRequired = PRCMax(nLevelRequired, 6); + if(nRacialType == RACIAL_TYPE_MAGICAL_BEAST) + nLevelRequired = PRCMax(nLevelRequired, 5); + if(nRacialType == RACIAL_TYPE_GIANT) + nLevelRequired = PRCMax(nLevelRequired, 4); + if(nRacialType == RACIAL_TYPE_VERMIN) + nLevelRequired = PRCMax(nLevelRequired, 4); + if(nRacialType == RACIAL_TYPE_BEAST) + nLevelRequired = PRCMax(nLevelRequired, 3); + if(nRacialType == RACIAL_TYPE_ANIMAL) + nLevelRequired = PRCMax(nLevelRequired, 2); + if(nRacialType == RACIAL_TYPE_HUMANOID_MONSTROUS) + nLevelRequired = PRCMax(nLevelRequired, 2); + if(nRacialType == RACIAL_TYPE_DWARF || + nRacialType == RACIAL_TYPE_ELF || + nRacialType == RACIAL_TYPE_GNOME || + nRacialType == RACIAL_TYPE_HUMAN || + nRacialType == RACIAL_TYPE_HALFORC || + nRacialType == RACIAL_TYPE_HALFELF || + nRacialType == RACIAL_TYPE_HALFLING || + nRacialType == RACIAL_TYPE_HUMANOID_ORC || + nRacialType == RACIAL_TYPE_HUMANOID_REPTILIAN + ) + nLevelRequired = PRCMax(nLevelRequired, 1); + + return nLevelRequired; +} + +int _prc_inc_shifting_GetCanFormCast(object oTemplate) +{ + int nRacialType = MyPRCGetRacialType(oTemplate); + + // Need to have hands, and the ability to speak + + switch (nRacialType) + { + case RACIAL_TYPE_ABERRATION: + case RACIAL_TYPE_ANIMAL: + case RACIAL_TYPE_BEAST: + case RACIAL_TYPE_MAGICAL_BEAST: + case RACIAL_TYPE_VERMIN: + case RACIAL_TYPE_OOZE: +// case RACIAL_TYPE_PLANT: + // These forms can't cast spells + return FALSE; + case RACIAL_TYPE_DWARF: + case RACIAL_TYPE_ELF: + case RACIAL_TYPE_GNOME: + case RACIAL_TYPE_HALFLING: + case RACIAL_TYPE_HALFELF: + case RACIAL_TYPE_HALFORC: + case RACIAL_TYPE_HUMAN: + case RACIAL_TYPE_CONSTRUCT: + case RACIAL_TYPE_DRAGON: + case RACIAL_TYPE_HUMANOID_GOBLINOID: + case RACIAL_TYPE_HUMANOID_MONSTROUS: + case RACIAL_TYPE_HUMANOID_ORC: + case RACIAL_TYPE_HUMANOID_REPTILIAN: + case RACIAL_TYPE_ELEMENTAL: + case RACIAL_TYPE_FEY: + case RACIAL_TYPE_GIANT: + case RACIAL_TYPE_OUTSIDER: + case RACIAL_TYPE_SHAPECHANGER: + case RACIAL_TYPE_UNDEAD: + // Break and go return TRUE at the end of the function + break; + + default:{ + if(DEBUG) DoDebug("prc_inc_shifting: _GetCanFormCast(): Unknown racial type: " + IntToString(nRacialType)); + } + } + + return TRUE; +} + +string _prc_inc_AbilityTypeString(int nAbilityType) +{ + return GetStringByStrRef(StringToInt(Get2DACache("iprp_abilities", "Name", nAbilityType))); +} + +string _prc_inc_AlignmentGroupString(int nAlignmentGroup) +{ + return GetStringByStrRef(StringToInt(Get2DACache("iprp_aligngrp", "Name", nAlignmentGroup))); +} + +string _prc_inc_BonusFeatTypeString(int nBonusFeatType) +{ + return GetStringByStrRef(StringToInt(Get2DACache("iprp_feats", "Name", nBonusFeatType))); +} + +string _prc_inc_ClassTypeString(int nClassType) +{ + return GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", nClassType))); +} + +string _prc_inc_CostTableEntryString(int nCostTable, int nCostTableValue) +{ + string sCostTableName = Get2DACache("iprp_costtable", "Name", nCostTable); + if(sCostTableName == "" || sCostTableName == "****") + return "??? (" + IntToString(nCostTable) + " / " + IntToString(nCostTableValue) + ")"; + string sCostTableEntry = Get2DACache(sCostTableName, "Name", nCostTableValue); + if(sCostTableEntry == "" || sCostTableEntry == "****") + return "??? (" + sCostTableName + " / " + IntToString(nCostTableValue) + ")"; + return GetStringByStrRef(StringToInt(sCostTableEntry)); +} + +string _prc_inc_DamageTypeString(int nDamageType) +{ + return GetStringByStrRef(StringToInt(Get2DACache("iprp_damagetype", "Name", nDamageType))); +} + +string _prc_inc_ImmunityTypeString(int nImmunityType) +{ + return GetStringByStrRef(StringToInt(Get2DACache("iprp_immunity", "Name", nImmunityType))); +} + +string _prc_inc_OnHitSpellTypeString(int nOnHitSpellType) +{ + return GetStringByStrRef(StringToInt(Get2DACache("iprp_onhitspell", "Name", nOnHitSpellType))); +} + +string _prc_inc_OnHitTypeString(int nOnHitSpellType) +{ + return GetStringByStrRef(StringToInt(Get2DACache("iprp_onhit", "Name", nOnHitSpellType))); +} + +string _prc_inc_OnMonsterHitTypeString(int nOnMonsterHitType) +{ + return GetStringByStrRef(StringToInt(Get2DACache("iprp_monsterhit", "Name", nOnMonsterHitType))); +} + +string _prc_inc_SavingThrowElementTypeString(int nSavingThrowType) +{ + return GetStringByStrRef(StringToInt(Get2DACache("iprp_saveelement", "Name", nSavingThrowType))); +} + +string _prc_inc_SavingThrowTypeString(int nSavingThrowType) +{ + return GetStringByStrRef(StringToInt(Get2DACache("iprp_savingthrow", "Name", nSavingThrowType))); +} + +string _prc_inc_SkillTypeString(int nSkillType) +{ + return GetStringByStrRef(StringToInt(Get2DACache("skills", "Name", nSkillType))); +} + +string _prc_inc_SpecialWalkTypeString(int nWalkType) +{ + return GetStringByStrRef(StringToInt(Get2DACache("iprp_walk", "Name", nWalkType))); +} + +string _prc_inc_SpellSchoolTypeString(int nSpellSchoolType) +{ + return GetStringByStrRef(StringToInt(Get2DACache("iprp_spellshl", "Name", nSpellSchoolType))); +} + +string _prc_inc_SpellTypeString(int nOnHitSpellType) +{ + return GetStringByStrRef(StringToInt(Get2DACache("iprp_spells", "Name", nOnHitSpellType))); +} + +string _prc_inc_VisualEffectString(int nVisualEffect) +{ + //TODO: Look up in 2da (which one?) + switch(nVisualEffect) + { + case ITEM_VISUAL_ACID: + return "Acid"; + case ITEM_VISUAL_COLD: + return "Cold"; + case ITEM_VISUAL_ELECTRICAL: + return "Electrical"; + case ITEM_VISUAL_FIRE: + return "Fire"; + case ITEM_VISUAL_SONIC: + return "Sonic"; + case ITEM_VISUAL_HOLY: + return "Holy"; + case ITEM_VISUAL_EVIL: + return "Evil"; + } + return "???"; +} + +string _prc_inc_ItemPropertyString(itemproperty iprop) +{ + int nType = GetItemPropertyType(iprop); + int nSubType = GetItemPropertySubType(iprop); + int nDurationType = GetItemPropertyDurationType(iprop); + int nParam1 = GetItemPropertyParam1(iprop); + int nParam1Value = GetItemPropertyParam1Value(iprop); + int nCostTable = GetItemPropertyCostTable(iprop); + int nCostTableValue = GetItemPropertyCostTableValue(iprop); + string sType = IntToString(nType); + string sSubType = IntToString(nSubType); + string sDurationType = IntToString(nDurationType); + string sParam1 = IntToString(nParam1); + string sParam1Value = IntToString(nParam1Value); + string sCostTable = IntToString(nCostTable); + string sCostTableValue = IntToString(nCostTableValue); + string sResult = + "Typ: " + sType + "; " + + "SubTyp: " + sSubType + "; " + + "DurTyp: " + sDurationType + "; " + + "Parm: " + sParam1 + "; " + + "ParmVal: " + sParam1Value + "; " + + "CTab: " + sCostTable + "; " + + "CVal: " + sCostTableValue; + string sTypeName = GetStringByStrRef(StringToInt(Get2DACache("itempropdef", "Name", nType))); + switch (nType) + { + //TODO: these are all the possible cases; need to handle more of them. + //DONE case ITEM_PROPERTY_ABILITY_BONUS: + //DONE case ITEM_PROPERTY_AC_BONUS: + // case ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP: + // case ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE: + // case ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP: + // case ITEM_PROPERTY_AC_BONUS_VS_SPECIFIC_ALIGNMENT: + //DONE case ITEM_PROPERTY_ENHANCEMENT_BONUS: + //DONE case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP: + // case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP: + // case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT: + // case ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER + //DONE case ITEM_PROPERTY_BASE_ITEM_WEIGHT_REDUCTION + //DONE case ITEM_PROPERTY_BONUS_FEAT: + // case ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N: + //DONE case ITEM_PROPERTY_CAST_SPELL: + //DONE case ITEM_PROPERTY_DAMAGE_BONUS: + //DONE case ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP: + //case ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP: + //case ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT: + //DONE case ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE: + // case ITEM_PROPERTY_DECREASED_DAMAGE: + //DONE case ITEM_PROPERTY_DAMAGE_REDUCTION: + //DONE case ITEM_PROPERTY_DAMAGE_RESISTANCE: + //DONE case ITEM_PROPERTY_DAMAGE_VULNERABILITY: + //DONE case ITEM_PROPERTY_DARKVISION: + //DONE case ITEM_PROPERTY_DECREASED_ABILITY_SCORE: + // case ITEM_PROPERTY_DECREASED_AC: + // case ITEM_PROPERTY_DECREASED_SKILL_MODIFIER: //TODO: e.g. S1-Tomb of Horrors: DesertDragon + // case ITEM_PROPERTY_ENHANCED_CONTAINER_REDUCED_WEIGHT: + //DONE case ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE: + // case ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE: + //DONE case ITEM_PROPERTY_HASTE: + // case ITEM_PROPERTY_HOLY_AVENGER: + //DONE case ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS: + //DONE case ITEM_PROPERTY_IMPROVED_EVASION: + //DONE case ITEM_PROPERTY_SPELL_RESISTANCE: + //DONE case ITEM_PROPERTY_SAVING_THROW_BONUS: + //DONE case ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC: + //DONE case ITEM_PROPERTY_KEEN: + //DONE case ITEM_PROPERTY_LIGHT: + // case ITEM_PROPERTY_MIGHTY: + // case ITEM_PROPERTY_MIND_BLANK: + // case ITEM_PROPERTY_NO_DAMAGE: + //DONE case ITEM_PROPERTY_ON_HIT_PROPERTIES: + //DONE case ITEM_PROPERTY_DECREASED_SAVING_THROWS: + //DONE case ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC: + //DONE case ITEM_PROPERTY_REGENERATION: + //DONE case ITEM_PROPERTY_SKILL_BONUS: + //DONE case ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL: + //DONE case ITEM_PROPERTY_IMMUNITY_SPELL_SCHOOL: + // case ITEM_PROPERTY_THIEVES_TOOLS: + //DONE case ITEM_PROPERTY_ATTACK_BONUS: + //DONE case ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP: + // case ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP: + // case ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT: + // case ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER: + // case ITEM_PROPERTY_UNLIMITED_AMMUNITION: + // case ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP: + // case ITEM_PROPERTY_USE_LIMITATION_CLASS: + // case ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE: + // case ITEM_PROPERTY_USE_LIMITATION_SPECIFIC_ALIGNMENT: + // case ITEM_PROPERTY_USE_LIMITATION_TILESET: + //DONE case ITEM_PROPERTY_REGENERATION_VAMPIRIC: + // case ITEM_PROPERTY_TRAP: + //DONE case ITEM_PROPERTY_TRUE_SEEING: + //DONE case ITEM_PROPERTY_ON_MONSTER_HIT: + //DONE case ITEM_PROPERTY_TURN_RESISTANCE: + //DONE case ITEM_PROPERTY_MASSIVE_CRITICALS: + //DONE case ITEM_PROPERTY_FREEDOM_OF_MOVEMENT: + //DONE case ITEM_PROPERTY_MONSTER_DAMAGE: + //DONE case ITEM_PROPERTY_IMMUNITY_SPELLS_BY_LEVEL: + //DONE case ITEM_PROPERTY_SPECIAL_WALK: + // case ITEM_PROPERTY_HEALERS_KIT: + // case ITEM_PROPERTY_WEIGHT_INCREASE: + //DONE case ITEM_PROPERTY_ONHITCASTSPELL: + //DONE case ITEM_PROPERTY_VISUALEFFECT: + // case ITEM_PROPERTY_ARCANE_SPELL_FAILURE: + + //Completely ignore + case ITEM_PROPERTY_BASE_ITEM_WEIGHT_REDUCTION: + return ""; + + //Property name only + case ITEM_PROPERTY_DARKVISION: + case ITEM_PROPERTY_FREEDOM_OF_MOVEMENT: + case ITEM_PROPERTY_HASTE: + case ITEM_PROPERTY_IMPROVED_EVASION: + case ITEM_PROPERTY_KEEN: + case ITEM_PROPERTY_TRUE_SEEING: + return sTypeName; + + //Interpret cost table information + case ITEM_PROPERTY_AC_BONUS: + case ITEM_PROPERTY_ATTACK_BONUS: + case ITEM_PROPERTY_ENHANCEMENT_BONUS: + case ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL: + case ITEM_PROPERTY_IMMUNITY_SPELLS_BY_LEVEL: + case ITEM_PROPERTY_LIGHT: + case ITEM_PROPERTY_MASSIVE_CRITICALS: + case ITEM_PROPERTY_MONSTER_DAMAGE: + case ITEM_PROPERTY_REGENERATION: + case ITEM_PROPERTY_SPELL_RESISTANCE: + case ITEM_PROPERTY_TURN_RESISTANCE: + return sTypeName + ": " + _prc_inc_CostTableEntryString(nCostTable, nCostTableValue); + + //Interpret cost table information; interpret subtype as damage type + case ITEM_PROPERTY_DAMAGE_BONUS: + case ITEM_PROPERTY_DAMAGE_RESISTANCE: + case ITEM_PROPERTY_DAMAGE_VULNERABILITY: + case ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE: + return sTypeName + ": " + _prc_inc_CostTableEntryString(nCostTable, nCostTableValue) + " " + _prc_inc_DamageTypeString(nSubType); + + //Interpret cost table information; interpret subtype as racial group + case ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP: + case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP: + return sTypeName + ": " + _prc_inc_AlignmentGroupString(nSubType) + " " + _prc_inc_CostTableEntryString(nCostTable, nCostTableValue); + + //Special handling + case ITEM_PROPERTY_ABILITY_BONUS: + case ITEM_PROPERTY_DECREASED_ABILITY_SCORE: + return sTypeName + ": " + _prc_inc_AbilityTypeString(nSubType) + " " + _prc_inc_CostTableEntryString(nCostTable, nCostTableValue); + case ITEM_PROPERTY_BONUS_FEAT: + return sTypeName + ": " + _prc_inc_BonusFeatTypeString(nSubType); + case ITEM_PROPERTY_CAST_SPELL: + return sTypeName + ": " + _prc_inc_SpellTypeString(nSubType) + " " + _prc_inc_CostTableEntryString(nCostTable, nCostTableValue); + case ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP: + return sTypeName + ": " + _prc_inc_AlignmentGroupString(nSubType) + " " + _prc_inc_CostTableEntryString(nCostTable, nCostTableValue) + " " + _prc_inc_DamageTypeString(nParam1Value); + case ITEM_PROPERTY_DAMAGE_REDUCTION: + return sTypeName + ": " + _prc_inc_CostTableEntryString(nCostTable, nCostTableValue) + " / " + IntToString(StringToInt(sSubType)+1); + case ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE: + case ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE: + return sTypeName + ": " + _prc_inc_DamageTypeString(nSubType); + case ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS: + return sTypeName + ": " + _prc_inc_ImmunityTypeString(nSubType); + case ITEM_PROPERTY_IMMUNITY_SPELL_SCHOOL: + return sTypeName + ": " + _prc_inc_SpellSchoolTypeString(nSubType); + case ITEM_PROPERTY_ON_HIT_PROPERTIES: + return sTypeName + ": " + _prc_inc_OnHitTypeString(nSubType) + " " + _prc_inc_CostTableEntryString(nCostTable, nCostTableValue); + case ITEM_PROPERTY_ONHITCASTSPELL: + return sTypeName + ": " + _prc_inc_OnHitSpellTypeString(nSubType) + " " + _prc_inc_CostTableEntryString(nCostTable, nCostTableValue); + case ITEM_PROPERTY_ON_MONSTER_HIT: + return sTypeName + ": " + _prc_inc_OnMonsterHitTypeString(nSubType) + " " + IntToString(nCostTableValue+1); + case ITEM_PROPERTY_SKILL_BONUS: + return sTypeName + ": " + _prc_inc_SkillTypeString(nSubType) + " " + _prc_inc_CostTableEntryString(nCostTable, nCostTableValue); + case ITEM_PROPERTY_SPECIAL_WALK: + return sTypeName + ": " + _prc_inc_SpecialWalkTypeString(nSubType); + case ITEM_PROPERTY_REGENERATION_VAMPIRIC: + return sTypeName + ": " + _prc_inc_CostTableEntryString(nCostTable, nCostTableValue); + case ITEM_PROPERTY_VISUALEFFECT: + return sTypeName + ": " + _prc_inc_VisualEffectString(nSubType); + + case ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC: + case ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC: + return sTypeName + ": " + _prc_inc_SavingThrowTypeString(nSubType) + " " + _prc_inc_CostTableEntryString(nCostTable, nCostTableValue); + + case ITEM_PROPERTY_DECREASED_SAVING_THROWS: + case ITEM_PROPERTY_SAVING_THROW_BONUS: + return sTypeName + ": " + _prc_inc_SavingThrowElementTypeString(nSubType) + " " + _prc_inc_CostTableEntryString(nCostTable, nCostTableValue); + } + return sTypeName + " (" + sResult + ")"; +} + +string _prc_inc_EffectString(effect eEffect) +{ + int nType = GetEffectType(eEffect); + int nSubType = GetEffectSubType(eEffect); + int nDurationType = GetEffectDurationType(eEffect); + int nSpellId = GetEffectSpellId(eEffect); + string sType = IntToString(nType); + string sSubType = IntToString(nSubType); + string sDurationType = IntToString(nDurationType); + string sSpellId = IntToString(nSpellId); + + //Decode type if possible + //TODO: look up in 2da (which one?) instead of having a big switch statement + switch (nType) + { + case EFFECT_TYPE_INVALIDEFFECT : sType = "EFFECT_TYPE_INVALIDEFFECT"; break; + case EFFECT_TYPE_DAMAGE_RESISTANCE : sType = "EFFECT_TYPE_DAMAGE_RESISTANCE"; break; + //case EFFECT_TYPE_ABILITY_BONUS : sType = "EFFECT_TYPE_ABILITY_BONUS"; break; + case EFFECT_TYPE_REGENERATE : sType = "EFFECT_TYPE_REGENERATE"; break; + //case EFFECT_TYPE_SAVING_THROW_BONUS : sType = "EFFECT_TYPE_SAVING_THROW_BONUS"; break; + //case EFFECT_TYPE_MODIFY_AC : sType = "EFFECT_TYPE_MODIFY_AC"; break; + //case EFFECT_TYPE_ATTACK_BONUS : sType = "EFFECT_TYPE_ATTACK_BONUS"; break; + case EFFECT_TYPE_DAMAGE_REDUCTION : sType = "EFFECT_TYPE_DAMAGE_REDUCTION"; break; + //case EFFECT_TYPE_DAMAGE_BONUS : sType = "EFFECT_TYPE_DAMAGE_BONUS"; break; + case EFFECT_TYPE_TEMPORARY_HITPOINTS : sType = "EFFECT_TYPE_TEMPORARY_HITPOINTS"; break; + //case EFFECT_TYPE_DAMAGE_IMMUNITY : sType = "EFFECT_TYPE_DAMAGE_IMMUNITY"; break; + case EFFECT_TYPE_ENTANGLE : sType = "EFFECT_TYPE_ENTANGLE"; break; + case EFFECT_TYPE_INVULNERABLE : sType = "EFFECT_TYPE_INVULNERABLE"; break; + case EFFECT_TYPE_DEAF : sType = "EFFECT_TYPE_DEAF"; break; + case EFFECT_TYPE_RESURRECTION : sType = "EFFECT_TYPE_RESURRECTION"; break; + case EFFECT_TYPE_IMMUNITY : sType = "EFFECT_TYPE_IMMUNITY"; break; + //case EFFECT_TYPE_BLIND : sType = "EFFECT_TYPE_BLIND"; break; + case EFFECT_TYPE_ENEMY_ATTACK_BONUS : sType = "EFFECT_TYPE_ENEMY_ATTACK_BONUS"; break; + case EFFECT_TYPE_ARCANE_SPELL_FAILURE : sType = "EFFECT_TYPE_ARCANE_SPELL_FAILURE"; break; + //case EFFECT_TYPE_MOVEMENT_SPEED : sType = "EFFECT_TYPE_MOVEMENT_SPEED"; break; + case EFFECT_TYPE_AREA_OF_EFFECT : sType = "EFFECT_TYPE_AREA_OF_EFFECT"; break; + case EFFECT_TYPE_BEAM : sType = "EFFECT_TYPE_BEAM"; break; + //case EFFECT_TYPE_SPELL_RESISTANCE : sType = "EFFECT_TYPE_SPELL_RESISTANCE"; break; + case EFFECT_TYPE_CHARMED : sType = "EFFECT_TYPE_CHARMED"; break; + case EFFECT_TYPE_CONFUSED : sType = "EFFECT_TYPE_CONFUSED"; break; + case EFFECT_TYPE_FRIGHTENED : sType = "EFFECT_TYPE_FRIGHTENED"; break; + case EFFECT_TYPE_DOMINATED : sType = "EFFECT_TYPE_DOMINATED"; break; + case EFFECT_TYPE_PARALYZE : sType = "EFFECT_TYPE_PARALYZE"; break; + case EFFECT_TYPE_DAZED : sType = "EFFECT_TYPE_DAZED"; break; + case EFFECT_TYPE_STUNNED : sType = "EFFECT_TYPE_STUNNED"; break; + case EFFECT_TYPE_SLEEP : sType = "EFFECT_TYPE_SLEEP"; break; + case EFFECT_TYPE_POISON : sType = "EFFECT_TYPE_POISON"; break; + case EFFECT_TYPE_DISEASE : sType = "EFFECT_TYPE_DISEASE"; break; + case EFFECT_TYPE_CURSE : sType = "EFFECT_TYPE_CURSE"; break; + case EFFECT_TYPE_SILENCE : sType = "EFFECT_TYPE_SILENCE"; break; + case EFFECT_TYPE_TURNED : sType = "EFFECT_TYPE_TURNED"; break; + case EFFECT_TYPE_HASTE : sType = "EFFECT_TYPE_HASTE"; break; + case EFFECT_TYPE_SLOW : sType = "EFFECT_TYPE_SLOW"; break; + case EFFECT_TYPE_ABILITY_INCREASE : sType = "EFFECT_TYPE_ABILITY_INCREASE"; break; + case EFFECT_TYPE_ABILITY_DECREASE : sType = "EFFECT_TYPE_ABILITY_DECREASE"; break; + case EFFECT_TYPE_ATTACK_INCREASE : sType = "EFFECT_TYPE_ATTACK_INCREASE"; break; + case EFFECT_TYPE_ATTACK_DECREASE : sType = "EFFECT_TYPE_ATTACK_DECREASE"; break; + case EFFECT_TYPE_DAMAGE_INCREASE : sType = "EFFECT_TYPE_DAMAGE_INCREASE"; break; + case EFFECT_TYPE_DAMAGE_DECREASE : sType = "EFFECT_TYPE_DAMAGE_DECREASE"; break; + case EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE : sType = "EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE"; break; + case EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE : sType = "EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE"; break; + case EFFECT_TYPE_AC_INCREASE : sType = "EFFECT_TYPE_AC_INCREASE"; break; + case EFFECT_TYPE_AC_DECREASE : sType = "EFFECT_TYPE_AC_DECREASE"; break; + case EFFECT_TYPE_MOVEMENT_SPEED_INCREASE : sType = "EFFECT_TYPE_MOVEMENT_SPEED_INCREASE"; break; + case EFFECT_TYPE_MOVEMENT_SPEED_DECREASE : sType = "EFFECT_TYPE_MOVEMENT_SPEED_DECREASE"; break; + case EFFECT_TYPE_SAVING_THROW_INCREASE : sType = "EFFECT_TYPE_SAVING_THROW_INCREASE"; break; + case EFFECT_TYPE_SAVING_THROW_DECREASE : sType = "EFFECT_TYPE_SAVING_THROW_DECREASE"; break; + case EFFECT_TYPE_SPELL_RESISTANCE_INCREASE : sType = "EFFECT_TYPE_SPELL_RESISTANCE_INCREASE"; break; + case EFFECT_TYPE_SPELL_RESISTANCE_DECREASE : sType = "EFFECT_TYPE_SPELL_RESISTANCE_DECREASE"; break; + case EFFECT_TYPE_SKILL_INCREASE : sType = "EFFECT_TYPE_SKILL_INCREASE"; break; + case EFFECT_TYPE_SKILL_DECREASE : sType = "EFFECT_TYPE_SKILL_DECREASE"; break; + case EFFECT_TYPE_INVISIBILITY : sType = "EFFECT_TYPE_INVISIBILITY"; break; + case EFFECT_TYPE_IMPROVEDINVISIBILITY : sType = "EFFECT_TYPE_IMPROVEDINVISIBILITY"; break; + case EFFECT_TYPE_DARKNESS : sType = "EFFECT_TYPE_DARKNESS"; break; + case EFFECT_TYPE_DISPELMAGICALL : sType = "EFFECT_TYPE_DISPELMAGICALL"; break; + case EFFECT_TYPE_ELEMENTALSHIELD : sType = "EFFECT_TYPE_ELEMENTALSHIELD"; break; + case EFFECT_TYPE_NEGATIVELEVEL : sType = "EFFECT_TYPE_NEGATIVELEVEL"; break; + case EFFECT_TYPE_POLYMORPH : sType = "EFFECT_TYPE_POLYMORPH"; break; + case EFFECT_TYPE_SANCTUARY : sType = "EFFECT_TYPE_SANCTUARY"; break; + case EFFECT_TYPE_TRUESEEING : sType = "EFFECT_TYPE_TRUESEEING"; break; + case EFFECT_TYPE_SEEINVISIBLE : sType = "EFFECT_TYPE_SEEINVISIBLE"; break; + case EFFECT_TYPE_TIMESTOP : sType = "EFFECT_TYPE_TIMESTOP"; break; + case EFFECT_TYPE_BLINDNESS : sType = "EFFECT_TYPE_BLINDNESS"; break; + case EFFECT_TYPE_SPELLLEVELABSORPTION : sType = "EFFECT_TYPE_SPELLLEVELABSORPTION"; break; + case EFFECT_TYPE_DISPELMAGICBEST : sType = "EFFECT_TYPE_DISPELMAGICBEST"; break; + case EFFECT_TYPE_ULTRAVISION : sType = "EFFECT_TYPE_ULTRAVISION"; break; + case EFFECT_TYPE_MISS_CHANCE : sType = "EFFECT_TYPE_MISS_CHANCE"; break; + case EFFECT_TYPE_CONCEALMENT : sType = "EFFECT_TYPE_CONCEALMENT"; break; + case EFFECT_TYPE_SPELL_IMMUNITY : sType = "EFFECT_TYPE_SPELL_IMMUNITY"; break; + case EFFECT_TYPE_VISUALEFFECT : sType = "EFFECT_TYPE_VISUALEFFECT"; break; + case EFFECT_TYPE_DISAPPEARAPPEAR : sType = "EFFECT_TYPE_DISAPPEARAPPEAR"; break; + case EFFECT_TYPE_SWARM : sType = "EFFECT_TYPE_SWARM"; break; + case EFFECT_TYPE_TURN_RESISTANCE_DECREASE : sType = "EFFECT_TYPE_TURN_RESISTANCE_DECREASE"; break; + case EFFECT_TYPE_TURN_RESISTANCE_INCREASE : sType = "EFFECT_TYPE_TURN_RESISTANCE_INCREASE"; break; + case EFFECT_TYPE_PETRIFY : sType = "EFFECT_TYPE_PETRIFY"; break; + case EFFECT_TYPE_CUTSCENE_PARALYZE : sType = "EFFECT_TYPE_CUTSCENE_PARALYZE"; break; + case EFFECT_TYPE_ETHEREAL : sType = "EFFECT_TYPE_ETHEREAL"; break; + case EFFECT_TYPE_SPELL_FAILURE : sType = "EFFECT_TYPE_SPELL_FAILURE"; break; + case EFFECT_TYPE_CUTSCENEGHOST : sType = "EFFECT_TYPE_CUTSCENEGHOST"; break; + case EFFECT_TYPE_CUTSCENEIMMOBILIZE : sType = "EFFECT_TYPE_CUTSCENEIMMOBILIZE"; break; + } + + //Decode subtype if possible + //TODO: look up in 2da (which one?) instead of having a switch statement + switch (nSubType) + { + case SUBTYPE_MAGICAL : sSubType = "SUBTYPE_MAGICAL"; break; + case SUBTYPE_SUPERNATURAL : sSubType = "SUBTYPE_SUPERNATURAL"; break; + case SUBTYPE_EXTRAORDINARY : sSubType = "SUBTYPE_EXTRAORDINARY"; break; + } + + //Decode duration type if possible + //TODO: look up in 2da (which one?) instead of having a switch statement + switch (nDurationType) + { + case DURATION_TYPE_INSTANT : sDurationType = "DURATION_TYPE_INSTANT"; break; + case DURATION_TYPE_TEMPORARY : sDurationType = "DURATION_TYPE_TEMPORARY"; break; + case DURATION_TYPE_PERMANENT : sDurationType = "DURATION_TYPE_PERMANENT"; break; + } + + string sResult = + "EFFECT Type: " + sType + "; " + + "SubType: " + sSubType + "; " + + "DurationType: " + sDurationType + "; " + + "SpellId: " + sSpellId; + + return sResult; +} + +void _prc_inc_PrintShapeInfo(object oPC, string sMessage) +{ + if(!GetLocalInt(oPC, "PRC_SuppressChatPrint")) + SendMessageToPC(oPC, sMessage); //Send to chat window in game + if(GetLocalInt(oPC, "PRC_EnableLogPrint")) + PrintString(sMessage); //Write to log file for reference +} + +void _prc_inc_PrintClassInfo(string sPrefix, object oPC, object oTemplate, int nClassType) +{ + if (nClassType != CLASS_TYPE_INVALID) + { + int nLevel = GetLevelByClass(nClassType, oTemplate); + string sClassName = _prc_inc_ClassTypeString(nClassType); + _prc_inc_PrintShapeInfo(oPC, sPrefix + sClassName + " (" + IntToString(nLevel) + ")"); + } +} + +void _prc_inc_PrintItemProperty(string sPrefix, object oPC, itemproperty iProp, int bIncludeTemp = FALSE) +{ + int nDurationType = GetItemPropertyDurationType(iProp); + if(nDurationType == DURATION_TYPE_PERMANENT || (bIncludeTemp && nDurationType == DURATION_TYPE_TEMPORARY)) + { + string sPropString = _prc_inc_ItemPropertyString(iProp); + if(sPropString != "") + { + if (nDurationType == DURATION_TYPE_TEMPORARY) + sPropString = GetStringByStrRef(57473+0x01000000) + sPropString; //"TEMPORARY: " + _prc_inc_PrintShapeInfo(oPC, sPrefix + sPropString); + } + } +} + +void _prc_inc_PrintAllItemProperties(string sPrefix, object oPC, object oItem, int bIncludeTemp = FALSE) +{ + itemproperty iProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(iProp)) + { + _prc_inc_PrintItemProperty(sPrefix, oPC, iProp, bIncludeTemp); + iProp = GetNextItemProperty(oItem); + } +} + +void _prc_inc_PrintEffect(string sPrefix, object oPC, effect eEffect) +{ + if (GetEffectType(eEffect) == EFFECT_TYPE_INVALIDEFFECT) + { + //An effect with type EFFECT_TYPE_INVALID is added for each item property + //They are also added for a couple of other things (Knockdown, summons, etc.) + //Just skip these + } + else + { + string sEffectString = _prc_inc_EffectString(eEffect); + if(sEffectString != "") + _prc_inc_PrintShapeInfo(oPC, sPrefix + sEffectString); + } +} + +void _prc_inc_PrintAllEffects(string sPrefix, object oPC, object oItem) +{ + effect eEffect = GetFirstEffect(oItem); + while(GetIsEffectValid(eEffect)) + { + _prc_inc_PrintEffect(sPrefix, oPC, eEffect); + eEffect = GetNextEffect(oItem); + } +} + +//NOTE: THIS FUNCTION HAS A LOT OF CODE IN COMMON WITH _prc_inc_shifting_CreateShifterActiveAbilitiesItem +//TODO: PUT SOME OF IT IN A SHARED FUNCTION THAT THEY BOTH CALL +void _prc_inc_shifting_PrintShifterActiveAbilities(object oPC, object oTemplate) +{ + string sPrefix = GetStringByStrRef(57437+0x01000000); //"Epic Wildshape Spell-Like Abilities:" + _prc_inc_PrintShapeInfo(oPC, "=== " + sPrefix); + + int bPrinted = FALSE; + + object oTemplateHide = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oTemplate); + itemproperty iProp = GetFirstItemProperty(oTemplateHide); + while(GetIsItemPropertyValid(iProp)) + { + if(GetItemPropertyDurationType(iProp) == DURATION_TYPE_PERMANENT && GetItemPropertyType(iProp) == ITEM_PROPERTY_CAST_SPELL) + { + _prc_inc_PrintItemProperty("=== ", oPC, iProp); + bPrinted = TRUE; + } + iProp = GetNextItemProperty(oTemplateHide); + } + + // Loop over shifter_abilitie.2da + string sNumUses; + int nSpell, nNumUses, nProps; + int i = 0; + while(nSpell = StringToInt(Get2DACache("shifter_abilitie", "Spell", i))) + { + // See if the template has this spell + if(GetHasSpell(nSpell, oTemplate)) + { + // Determine the number of uses from the 2da + sNumUses = Get2DACache("shifter_abilitie", "IPCSpellNumUses", i); + if(sNumUses == "1_USE_PER_DAY") + nNumUses = IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY; + else if(sNumUses == "2_USES_PER_DAY") + nNumUses = IP_CONST_CASTSPELL_NUMUSES_2_USES_PER_DAY; + else if(sNumUses == "3_USES_PER_DAY") + nNumUses = IP_CONST_CASTSPELL_NUMUSES_3_USES_PER_DAY; + else if(sNumUses == "4_USES_PER_DAY") + nNumUses = IP_CONST_CASTSPELL_NUMUSES_4_USES_PER_DAY; + else if(sNumUses == "5_USES_PER_DAY") + nNumUses = IP_CONST_CASTSPELL_NUMUSES_5_USES_PER_DAY; + else if(sNumUses == "UNLIMITED_USE") + nNumUses = IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE; + else{ + if(DEBUG) DoDebug("prc_inc_shifting: _prc_inc_shifting_PrintShifterActiveAbilities(): Unknown IPCSpellNumUses in shifter_abilitie.2da line " + IntToString(i) + ": " + sNumUses); + nNumUses = -1; + } + + // Create the itemproperty and print it + iProp = ItemPropertyCastSpell(StringToInt(Get2DACache("shifter_abilitie", "IPSpell", i)), nNumUses); + _prc_inc_PrintItemProperty("=== ", oPC, iProp); + bPrinted = TRUE; + //TODO: DESTROY iProp? + + // Increment property counter + nProps += 1; + } + + // Increment loop counter + i += 1; + } + + if(!bPrinted) + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(57481+0x01000000)); //"None" +} + +void _prc_inc_shifting_PrintFeats(object oPC, object oTemplate, int nStartIndex, int nLimitIndex) +{ + //Loop over shifter_feats.2da + string sFeat; + int i = nStartIndex; + while((i < nLimitIndex) && (sFeat = Get2DACache("shifter_feats", "Feat", i)) != "") + { + if (_prc_inc_GetHasFeat(oTemplate, StringToInt(sFeat))) + { + string sFeatName = GetStringByStrRef(StringToInt(Get2DACache("feat", "Feat", StringToInt(sFeat)))); + _prc_inc_PrintShapeInfo(oPC, "=== " + sFeatName); + } + i += 1; + } +} + +void _prc_inc_PrintNaturalAC(object oPC, object oTemplate) +{ + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(57435+0x01000000) + " " + IntToString(_prc_inc_CreatureNaturalAC(oTemplate))); //Natural AC of form +} + +//TODO: TLK Entries +void _prc_inc_PrintDebugItem(object oPC, string oItemType, object oItem) +{ + if (GetIsObjectValid(oItem)) + { + _prc_inc_PrintShapeInfo(oPC, "===================================="); + _prc_inc_PrintShapeInfo(oPC, "====== " + oItemType); + _prc_inc_PrintShapeInfo(oPC, "====== NAME: " + GetName(oItem)); + _prc_inc_PrintShapeInfo(oPC, "====== RESREF: " + GetResRef(oItem)); + _prc_inc_PrintShapeInfo(oPC, "====== ITEM PROPERTIES ======"); + _prc_inc_PrintAllItemProperties("=== ", oPC, oItem, TRUE); + _prc_inc_PrintShapeInfo(oPC, "====== EFFECTS ======"); + _prc_inc_PrintAllEffects("=== ", oPC, oItem); + _prc_inc_PrintShapeInfo(oPC, "====== OTHER ======"); + if (GetObjectType(oItem) == OBJECT_TYPE_CREATURE) + { + _prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(1, oItem)); + _prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(2, oItem)); + _prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(3, oItem)); + _prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(4, oItem)); + _prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(5, oItem)); + _prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(6, oItem)); + _prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(7, oItem)); + _prc_inc_PrintClassInfo("=== ", oPC, oItem, GetClassByPosition(8, oItem)); + + _prc_inc_PrintShapeInfo(oPC, "------"); + + _prc_inc_PrintShapeInfo(oPC, "====== Main hand weapon: " + (GetIsWeaponEffective(oItem, FALSE) ? "Effective" : "Ineffective")); + _prc_inc_PrintShapeInfo(oPC, "====== Off hand weapon: " + (GetIsWeaponEffective(oItem, TRUE) ? "Effective" : "Ineffective")); + _prc_inc_PrintShapeInfo(oPC, "====== Immortal: " + (GetImmortal(oItem) ? "Yes" : "No")); + _prc_inc_PrintShapeInfo(oPC, "------"); + + _prc_inc_PrintShapeInfo(oPC, "====== Level: " + IntToString(GetHitDice(oItem))); + _prc_inc_PrintShapeInfo(oPC, "====== CR: " + FloatToString(GetChallengeRating(oItem), 4, 1)); + _prc_inc_PrintShapeInfo(oPC, "====== Caster Level: " + IntToString(GetCasterLevel(oItem))); + _prc_inc_PrintShapeInfo(oPC, "====== XP: " + IntToString(GetXP(oItem))); + _prc_inc_PrintShapeInfo(oPC, "====== Alignment: " + IntToString(GetLawChaosValue(oItem)) + " / " + IntToString(GetGoodEvilValue(oItem))); + //TODO: + // int GetAlignmentLawChaos(object oCreature); + // int GetAlignmentGoodEvil(object oCreature); + _prc_inc_PrintShapeInfo(oPC, "------"); + + _prc_inc_PrintShapeInfo(oPC, "====== BAB: " + IntToString(GetBaseAttackBonus(oItem))); + _prc_inc_PrintShapeInfo(oPC, "====== HP: " + IntToString(GetCurrentHitPoints(oItem)) + " / " + IntToString(GetMaxHitPoints(oItem))); + _prc_inc_PrintShapeInfo(oPC, "====== AC: " + IntToString(GetAC(oItem))); + _prc_inc_PrintShapeInfo(oPC, "====== SR: " + IntToString(GetSpellResistance(oItem))); + _prc_inc_PrintShapeInfo(oPC, "------"); + + //TODO: look up names in 2da/TLK? + _prc_inc_PrintShapeInfo(oPC, "====== STR: " + IntToString(GetAbilityScore(oItem, ABILITY_STRENGTH)) + " (" + IntToString(GetAbilityModifier(ABILITY_STRENGTH, oItem)) + ")"); + _prc_inc_PrintShapeInfo(oPC, "====== DEX: " + IntToString(GetAbilityScore(oItem, ABILITY_DEXTERITY)) + " (" + IntToString(GetAbilityModifier(ABILITY_DEXTERITY, oItem)) + ")"); + _prc_inc_PrintShapeInfo(oPC, "====== CON: " + IntToString(GetAbilityScore(oItem, ABILITY_CONSTITUTION)) + " (" + IntToString(GetAbilityModifier(ABILITY_CONSTITUTION, oItem)) + ")"); + _prc_inc_PrintShapeInfo(oPC, "====== INT: " + IntToString(GetAbilityScore(oItem, ABILITY_INTELLIGENCE)) + " (" + IntToString(GetAbilityModifier(ABILITY_INTELLIGENCE, oItem)) + ")"); + _prc_inc_PrintShapeInfo(oPC, "====== WIS: " + IntToString(GetAbilityScore(oItem, ABILITY_WISDOM)) + " (" + IntToString(GetAbilityModifier(ABILITY_WISDOM, oItem)) + ")"); + _prc_inc_PrintShapeInfo(oPC, "====== CHA: " + IntToString(GetAbilityScore(oItem, ABILITY_CHARISMA)) + " (" + IntToString(GetAbilityModifier(ABILITY_CHARISMA, oItem)) + ")"); + _prc_inc_PrintShapeInfo(oPC, "------"); + + //TODO: look up names in 2da/TLK? + _prc_inc_PrintShapeInfo(oPC, "====== Fortitude: " + IntToString(GetFortitudeSavingThrow(oItem))); + _prc_inc_PrintShapeInfo(oPC, "====== Will: " + IntToString(GetWillSavingThrow(oItem))); + _prc_inc_PrintShapeInfo(oPC, "====== Reflex: " + IntToString(GetReflexSavingThrow(oItem))); + _prc_inc_PrintShapeInfo(oPC, "------"); + + int i = 0; + string sSkillName; + while((sSkillName = Get2DACache("skills", "Name", i)) != "") + { + sSkillName = GetStringByStrRef(StringToInt(sSkillName)); + _prc_inc_PrintShapeInfo(oPC, "====== " + sSkillName + ": " + IntToString(GetSkillRank(i, oItem))); + i += 1; + } + _prc_inc_PrintShapeInfo(oPC, "------"); + + _prc_inc_PrintShapeInfo(oPC, "====== Gender: " + IntToString(GetGender(oItem))); //TODO: look up values in 2da? + _prc_inc_PrintShapeInfo(oPC, "====== Size: " + IntToString(GetCreatureSize(oItem))); //TODO: look up values in 2da? + _prc_inc_PrintShapeInfo(oPC, "====== Race: " + IntToString(GetRacialType(oItem))); //TODO: look up values in 2da? + _prc_inc_PrintShapeInfo(oPC, "====== Speed: " + IntToString(GetMovementRate(oItem))); //TODO: look up values in 2da? + _prc_inc_PrintShapeInfo(oPC, "====== Dead: " + (GetIsDead(oItem) ? "Yes" : "No")); + _prc_inc_PrintShapeInfo(oPC, "====== Tag: " + GetTag(oItem)); + _prc_inc_PrintShapeInfo(oPC, "====== Object Type: " + IntToString(GetObjectType(oItem))); //TODO: look up values in 2da? + + //TODO?: + //int GetGold(object oTarget=OBJECT_SELF); + //location GetLocalLocation(object oObject, string sVarName); + // vector GetPositionFromLocation(location lLocation); + // object GetAreaFromLocation(location lLocation); + // float GetFacingFromLocation(location lLocation); + //int GetCommandable(object oTarget=OBJECT_SELF); + //int GetIsListening(object oObject); + //int GetReputation(object oSource, object oTarget); + //location GetLocation(object oObject); + //int GetIsPC(object oCreature); + // int GetIsEnemy(object oTarget, object oSource=OBJECT_SELF); + // int GetIsFriend(object oTarget, object oSource=OBJECT_SELF); + // int GetIsNeutral(object oTarget, object oSource=OBJECT_SELF); + // int GetStealthMode(object oCreature); + // int GetDetectMode(object oCreature); + // int GetDefensiveCastingMode(object oCreature); + // int GetAppearanceType(object oCreature); + // int GetWeight(object oTarget=OBJECT_SELF); //Gets the weight of an item, or the total carried weight of a creature in tenths of pounds (as per the baseitems.2da). + // int GetAILevel(object oTarget=OBJECT_SELF); + // int GetActionMode(object oCreature, int nMode); + // int GetArcaneSpellFailure(object oCreature); + // int GetLootable( object oCreature ); + // int GetIsCreatureDisarmable(object oCreature); + // string GetDeity(object oCreature); + // string GetSubRace(object oTarget); + // int GetAge(object oCreature); + //int GetPlotFlag(object oTarget=OBJECT_SELF); + } + else + _prc_inc_PrintShapeInfo(oPC, "====== AC: " + IntToString(GetItemACValue(oItem))); + _prc_inc_PrintShapeInfo(oPC, "===================================="); + } +} + +//TODO: TLK Entries +void _prc_inc_ShapePrintDebug(object oPC, object oTarget, int bForceLogPrint) +{ + int nSaveValue = GetLocalInt(oPC, "PRC_EnableLogPrint"); + if (bForceLogPrint) + SetLocalInt(oPC, "PRC_EnableLogPrint", TRUE); + + DelayCommand(0.0, _prc_inc_PrintDebugItem(oPC, "CREATURE", oTarget)); + DelayCommand(0.0, _prc_inc_PrintDebugItem(oPC, "CREATURE SKIN", GetItemInSlot(INVENTORY_SLOT_CARMOUR, oTarget))); + DelayCommand(0.0, _prc_inc_PrintDebugItem(oPC, "RIGHT CREATURE WEAPON", GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTarget))); + DelayCommand(0.0, _prc_inc_PrintDebugItem(oPC, "LEFT CREATURE WEAPON", GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTarget))); + DelayCommand(0.0, _prc_inc_PrintDebugItem(oPC, "SPECIAL CREATURE WEAPON", GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTarget))); + + int nSlot; + for(nSlot = 0; nSlot < NUM_INVENTORY_SLOTS; nSlot++) + { + switch (nSlot) + { + case INVENTORY_SLOT_CARMOUR: + case INVENTORY_SLOT_CWEAPON_R: + case INVENTORY_SLOT_CWEAPON_L: + case INVENTORY_SLOT_CWEAPON_B: + break; + + default: + DelayCommand(0.0, _prc_inc_PrintDebugItem(oPC, "INVENTORY ITEM " + IntToString(nSlot) + ": ", GetItemInSlot(nSlot, oTarget))); + } + } + + if (bForceLogPrint) + DelayCommand(0.1, SetLocalInt(oPC, "PRC_EnableLogPrint", nSaveValue)); +} + +//TODO: Add nShifterType parameter so that only applicable information is printed? +void _prc_inc_PrintShape(object oPC, object oTemplate, int bForceLogPrint) +{ + int nSaveValue = GetLocalInt(oPC, "PRC_EnableLogPrint"); + if (bForceLogPrint) + SetLocalInt(oPC, "PRC_EnableLogPrint", TRUE); + + _prc_inc_PrintShapeInfo(oPC, "================================================="); + + //Basic information + + _prc_inc_PrintShapeInfo(oPC, "=== " + GetName(oTemplate)); + _prc_inc_PrintShapeInfo(oPC, "=== " + GetResRef(oTemplate)); + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef((StringToInt(Get2DACache("racialtypes", "Name", MyPRCGetRacialType(oTemplate)))))); + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(57420+0x01000000) + IntToString(_prc_inc_shifting_ShifterLevelRequirement(oTemplate))); //"Required Shifter Level: " + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(57421+0x01000000) + IntToString(_prc_inc_shifting_CharacterLevelRequirement(oTemplate))); //"Required Character Level: " + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(57436+0x01000000) + FloatToString(GetChallengeRating(oTemplate), 4, 1)); //"Challenge Rating: " + + _prc_inc_PrintShapeInfo(oPC, "=========="); + + _prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(1, oTemplate)); + _prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(2, oTemplate)); + _prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(3, oTemplate)); + _prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(4, oTemplate)); + _prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(5, oTemplate)); + _prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(6, oTemplate)); + _prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(7, oTemplate)); + _prc_inc_PrintClassInfo("=== ", oPC, oTemplate, GetClassByPosition(8, oTemplate)); + + _prc_inc_PrintShapeInfo(oPC, "=========="); + + //Harmlessly invisible? + + if(_prc_inc_shifting_GetIsCreatureHarmless(oTemplate)) + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(57424+0x01000000)); //"Harmlessly Invisible" + + //Able to cast spells without Natural Spell? + + if(!_prc_inc_shifting_GetCanFormCast(oTemplate) && !GetHasFeat(FEAT_PRESTIGE_SHIFTER_NATURALSPELL, oTemplate)) + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(57477+0x01000000)); //"Cannot cast spells" + else + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(57476+0x01000000)); //"Can cast spells" + + //Natural AC + + _prc_inc_PrintNaturalAC(oPC, oTemplate); + + //STR, DEX, CON + + struct _prc_inc_ability_info_struct rInfoStruct = _prc_inc_shifter_GetAbilityInfo(oTemplate, oPC); + + //Extra information related to STR, DEX, CON + + string sExtra, sBonusOrPenalty = GetStringByStrRef(57427+0x01000000); + sExtra = " (" + sBonusOrPenalty + (rInfoStruct.nDeltaSTR>=0?"+":"") + IntToString(rInfoStruct.nDeltaSTR) + ")"; + _prc_inc_PrintShapeInfo(oPC, "=== " + _prc_inc_AbilityTypeString(0) + " " + IntToString(rInfoStruct.nTemplateSTR) + sExtra); + sExtra = " (" + sBonusOrPenalty + (rInfoStruct.nDeltaDEX>=0?"+":"") + IntToString(rInfoStruct.nDeltaDEX) + ")"; + _prc_inc_PrintShapeInfo(oPC, "=== " + _prc_inc_AbilityTypeString(1) + " " + IntToString(rInfoStruct.nTemplateDEX) + sExtra); + sExtra = " (" + sBonusOrPenalty + (rInfoStruct.nDeltaCON>=0?"+":"") + IntToString(rInfoStruct.nDeltaCON) + ")"; + _prc_inc_PrintShapeInfo(oPC, "=== " + _prc_inc_AbilityTypeString(2) + " " + IntToString(rInfoStruct.nTemplateCON) + sExtra); + + _prc_inc_PrintShapeInfo(oPC, "------"); + + int i = 0; + string sSkillName; + string sSTRBasedSkills, sDEXBasedSkills, sCONBasedSkills; + while((sSkillName = Get2DACache("skills", "Name", i)) != "") + { + sSkillName = GetStringByStrRef(StringToInt(sSkillName)); + string sSkillKeyAbility = Get2DACache("skills", "KeyAbility", i); + if (sSkillKeyAbility == "STR") + sSTRBasedSkills += sSkillName + ", "; + else if (sSkillKeyAbility == "DEX") + sDEXBasedSkills += sSkillName + ", "; + else if (sSkillKeyAbility == "CON") + sCONBasedSkills += sSkillName + ", "; + i += 1; + } + if (GetStringLength(sSTRBasedSkills)) + sSTRBasedSkills = GetStringLeft(sSTRBasedSkills, GetStringLength(sSTRBasedSkills) - 2); //Remove the final ", " + if (GetStringLength(sDEXBasedSkills)) + sDEXBasedSkills = GetStringLeft(sDEXBasedSkills, GetStringLength(sDEXBasedSkills) - 2); //Remove the final ", " + if (GetStringLength(sCONBasedSkills)) + sCONBasedSkills = GetStringLeft(sCONBasedSkills, GetStringLength(sCONBasedSkills) - 2); //Remove the final ", " + + int nSTRBonus = rInfoStruct.nExtraSTR / 2; + if (nSTRBonus > 0) + { + //TODO: cap AB bonus + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(60544+0x01000000) + " +" + IntToString(nSTRBonus)); //Attack increase from STR increase + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(60546+0x01000000) + " +" + IntToString(nSTRBonus)); //Damage increase from STR increase + _prc_inc_PrintShapeInfo(oPC, "=== " + ReplaceString(GetStringByStrRef(60528+0x01000000), "%(SKILLS)", sSTRBasedSkills) + " +" + IntToString(nSTRBonus)); //Skill bonus from STR increase + } + else if (nSTRBonus < 0) + { + //TODO: cap AB penalty--at what? + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(60545+0x01000000) + " " + IntToString(nSTRBonus)); //Attack decrease from STR decrease + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(60547+0x01000000) + " " + IntToString(nSTRBonus)); //Damage decrease from STR decrease + _prc_inc_PrintShapeInfo(oPC, "=== " + ReplaceString(GetStringByStrRef(60529+0x01000000), "%(SKILLS)", sSTRBasedSkills) + " " + IntToString(nSTRBonus)); //Skill penalty from STR decrease + } + + int nDEXBonus = rInfoStruct.nExtraDEX / 2; + if (nDEXBonus > 0) + { + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(60548+0x01000000) + " +" + IntToString(nDEXBonus)); //AC increase from DEX increase + _prc_inc_PrintShapeInfo(oPC, "=== " + ReplaceString(GetStringByStrRef(60530+0x01000000), "%(SKILLS)", sDEXBasedSkills) + " +" + IntToString(nDEXBonus)); //Skill bonus from DEX increase + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(60531+0x01000000) + " +" + IntToString(nDEXBonus)); //Saving throw bonus from DEX increase + } + else if (nDEXBonus < 0) + { + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(60549+0x01000000) + " " + IntToString(nDEXBonus)); //AC decrease from DEX increase + _prc_inc_PrintShapeInfo(oPC, "=== " + ReplaceString(GetStringByStrRef(60532+0x01000000), "%(SKILLS)", sDEXBasedSkills) + " " + IntToString(nDEXBonus)); //Skill penalty from DEX decrease + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(60533+0x01000000) + " " + IntToString(nDEXBonus)); //Saving throw penalty from DEX decrease + } + + int nCONBonus = rInfoStruct.nExtraCON / 2; + if (nCONBonus > 0) + { + _prc_inc_PrintShapeInfo(oPC, "=== " + ReplaceString(GetStringByStrRef(60534+0x01000000), "%(SKILLS)", sCONBasedSkills) + " +" + IntToString(nCONBonus)); //Skill bonus from CON increase + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(60535+0x01000000) + " +" + IntToString(nCONBonus)); //Saving throw bonus from CON increase + int tempHP = rInfoStruct.nExtraCON * GetHitDice(oPC); + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(57431+0x01000000) + " " + IntToString(tempHP)); //Temporary HP from CON increase + } + else if (nCONBonus < 0) + { + _prc_inc_PrintShapeInfo(oPC, "=== " + ReplaceString(GetStringByStrRef(60536+0x01000000), "%(SKILLS)", sCONBasedSkills) + " " + IntToString(nCONBonus)); //Skill penalty from CON decrease + _prc_inc_PrintShapeInfo(oPC, "=== " + GetStringByStrRef(60537+0x01000000) + " " + IntToString(nCONBonus)); //Saving throw penalty from CON decrease + } + + _prc_inc_PrintShapeInfo(oPC, "=========="); + + //Hide and creature weapon properties + + object oTemplateCWpR = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTemplate); + object oTemplateCWpL = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTemplate); + object oTemplateCWpB = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTemplate); + object oTemplateHide = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oTemplate); + + if(GetIsObjectValid(oTemplateCWpR)) + { + string sPrefix = GetStringByStrRef(57432+0x01000000); //"Right Creature Weapon:" + _prc_inc_PrintShapeInfo(oPC, "=== " + sPrefix); + _prc_inc_PrintAllItemProperties("=== ", oPC, oTemplateCWpR); + } + + if(GetIsObjectValid(oTemplateCWpL)) + { + string sPrefix = GetStringByStrRef(57433+0x01000000); //"Left Creature Weapon:" + _prc_inc_PrintShapeInfo(oPC, "=== " + sPrefix); + _prc_inc_PrintAllItemProperties("=== ", oPC, oTemplateCWpL); + } + + if(GetIsObjectValid(oTemplateCWpB)) + { + string sPrefix = GetStringByStrRef(57434+0x01000000); //"Special Attack Creature Weapon:" + _prc_inc_PrintShapeInfo(oPC, "=== " + sPrefix); + _prc_inc_PrintAllItemProperties("=== ", oPC, oTemplateCWpB); + } + + if(GetIsObjectValid(oTemplateHide)) + _prc_inc_PrintAllItemProperties("=== ", oPC, oTemplateHide); + + //Spell-like abilities + + _prc_inc_shifting_PrintShifterActiveAbilities(oPC, oTemplate); + + //Feats + + i = 0; + string sFeat; + int CHUNK_SIZE = 25; //50 was too big, so use 25 + + while((sFeat = Get2DACache("shifter_feats", "Feat", i)) != "") + { + DelayCommand(0.0f, _prc_inc_shifting_PrintFeats(oPC, oTemplate, i, i+CHUNK_SIZE)); + i += CHUNK_SIZE; + } + DelayCommand(0.0f, _prc_inc_PrintShapeInfo(oPC, "=================================================")); + + if (bForceLogPrint) + DelayCommand(0.1, SetLocalInt(oPC, "PRC_EnableLogPrint", nSaveValue)); + + if (GetLocalInt(oPC, "prc_shift_debug")) + DelayCommand(0.2f, _prc_inc_ShapePrintDebug(oPC, oTemplate, bForceLogPrint)); +} diff --git a/src/include/prc_sp_func.nss b/src/include/prc_sp_func.nss new file mode 100644 index 0000000..233090f --- /dev/null +++ b/src/include/prc_sp_func.nss @@ -0,0 +1,341 @@ +/* + prc_sp_func + + Additional spell functions for holding the + charge (also works for psionics) + + By: Flaming_Sword + Created: January 31, 2006 *complete rewrite + Modified: May 27, 2006 + + From Player's Handbook 3.5ed p141: + + Holding the Charge: If you don't discharge the + spell in the round when you cast the sepll, + you can hold the discharge of the spell + (hold the charge) indefinitely. You can + continue to make touch attacks round after + round. You can touch one friend as a standard + action or up to six friends as a full-round + action. If you touch anything or anyone while + holding a charge, even unintentionally, the + spell discharges. If you cast another spell, + the touch spell dissipates. Alternatively, you + may make a normal unarmed attack (or an attack + with a natural weapon) while holding a charge. + In this case you aren't considered armed and you + provoke attacks of opportunity as normal for + the attack. (If your unarmed attacks or natural + weapon attack doesn't provoke attacks of + opportunity, neither dies this attack. If the + attack hits, you deal normal damage for your + unarmed attack or natural weapon and the spell + discharges. If the attack misses, you are still + holding the charge. + + Conclusion: + Holy crap! Charges stay if your touch attacks miss! + +*/ + +// need declaration for this here +int IsTouchSpell(int nSpellID); +void CleanSpellVariables(object oPC); +void SetLocalSpellVariables(object oCaster, int nCharges = 1, int nSpellIDOverride = -1); +void DecrementSpellCharges(object oPC); +void RunSpellScript(object oPC, int nSpellID, int nEventType); +void RunImpactScript(object oPC, int nSpellID, int nEventType); +int IsCure(int nSpellID); +int IsMassCure(int nSpellID); +int IsMassInflict(int nSpellID); +int IsHeal(int nSpellID); +int IsMassHealHarm(int nSpellID); +int CheckRemoveEffects(int nSpellID, int nEffectType); +int IsRaySpell(int nSpell); + +//constant declarations in case they change +const string PRC_SPELL_CHARGE_COUNT = "PRC_SPELL_CHARGE_COUNT"; +const string PRC_SPELL_CHARGE_SPELLID = "PRC_SPELL_CHARGE_SPELLID"; +const string PRC_SPELL_CHARGE_LEVEL = "PRC_SPELL_CHARGE_LEVEL"; +const string PRC_SPELL_CONC_TARGET = "PRC_SPELL_CONC_TARGET"; +const string PRC_SPELL_METAMAGIC = "PRC_SPELL_METAMAGIC"; + +const string PRC_POWER_HOLD_MANIFESTATION = "PRC_POWER_HOLD_MANIFESTATION"; + +const string PRC_SPELL_EVENT = "PRC_SPELL_EVENT"; + +const string PRC_SPELL_HOLD = "PRC_SPELL_HOLD"; + +const int PRC_SPELL_EVENT_NONE = 0; +const int PRC_SPELL_EVENT_ATTACK = 1; +const int PRC_SPELL_EVENT_CONCENTRATION = 2; + +const int FEAT_SPELLS_TOUCH_ATTACK = 4092; +const int FEAT_SPELLS_RANGED_ATTACK = 4093; +const int FEAT_SPELLS_CONCENTRATION_TARGET = 4094; +const int FEAT_SPELLS_HOLD_CHARGE_TOGGLE = 4095; + +const int SPELLS_SPELLS_TOUCH_ATTACK = 3042; +const int SPELLS_SPELLS_RANGED_ATTACK = 3043; +const int SPELLS_SPELLS_CONCENTRATION_TARGET = 3044; +const int SPELLS_SPELLS_HOLD_CHARGE_TOGGLE = 3045; + +#include "prc_alterations" +#include "prc_inc_unarmed" +//#include "psi_inc_manifest" +//#include "spinc_common" +//#include "prc_spell_const" +//#include "prc_inc_combat" + +//Deletes local variables used for spell functions +// To be called (or copied) on rest, from spellhook +void CleanSpellVariables(object oPC) +{ + DeleteLocalInt(oPC, PRC_SPELL_CHARGE_COUNT); + DeleteLocalInt(oPC, PRC_SPELL_CHARGE_SPELLID); + DeleteLocalInt(oPC, PRC_SPELL_CHARGE_LEVEL); + DeleteLocalObject(oPC, PRC_SPELL_CONC_TARGET); + DeleteLocalInt(oPC, PRC_SPELL_HOLD); + DeleteLocalInt(oPC, PRC_SPELL_METAMAGIC); + DeleteLocalManifestation(oPC, PRC_POWER_HOLD_MANIFESTATION); + DeleteLocalMystery(oPC, "MYST_HOLD_MYST"); +} + +//Returns whether a spell is a touch spell +// nSpellID, the spell id (row in spells.2da) of the spell +int IsTouchSpell(int nSpellID) +{ + return (Get2DACache("spells", "Range", nSpellID) == "T"); +} + +//Sets local variables for the new spell functions +// object oCaster, the caster of the spell +// int nCharges, the number of charges for a spell +// int nSpellIDOverride, for overriding a SpellID +void SetLocalSpellVariables(object oCaster, int nCharges = 1, int nSpellIDOverride = -1) +{ + int nTemp = (nSpellIDOverride == -1) ? PRCGetSpellId() : nSpellIDOverride; + SetLocalInt(oCaster, PRC_SPELL_CHARGE_SPELLID, nTemp); + SetLocalInt(oCaster, PRC_SPELL_CHARGE_COUNT, nCharges); + SetLocalInt(oCaster, PRC_SPELL_CHARGE_LEVEL, PRCGetCasterLevel(oCaster)); + SetLocalInt(oCaster, PRC_SPELL_METAMAGIC, PRCGetMetaMagicFeat()); + FloatingTextStringOnCreature("*Holding the Charge*", oCaster); + + object oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oCaster); + if (GetIsPRCCreatureWeapon(oItem)) { + RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "prc_sp_event", TRUE, FALSE); + // Add eventhook to the item + AddEventScript(oItem, EVENT_ITEM_ONHIT, "prc_sp_event", TRUE, FALSE); + + // Add the OnHitCastSpell: Unique needed to trigger the event + IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 91234.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + } +} + +//Decrements the number of spell charges +// object oPC, the subject losing a charge +void DecrementSpellCharges(object oPC) +{ + int nCharges= GetLocalInt(oPC, PRC_SPELL_CHARGE_COUNT); + SetLocalInt(oPC, PRC_SPELL_CHARGE_COUNT, nCharges - 1); + FloatingTextStringOnCreature("Charges Remaining: " + IntToString(nCharges - 1), oPC); +} + +//Called from scripts, will run a spell script with local int for flags +// NOTE: Flags must be interpreted by the spell script +// This lets spell scripts handle events the way they want +// +// object oPC, the subject running the script +// int nSpellID, the spellid of the spell to run +// int nEventType, an integer containing flags defining events to use +void RunSpellScript(object oPC, int nSpellID, int nEventType) +{ + ClearAllActions(); //clears queue to prevent exploits + SetLocalInt(oPC, PRC_SPELL_EVENT, nEventType); + ActionCastSpell(nSpellID, 0, 0, 0, GetLocalInt(oPC, PRC_SPELL_METAMAGIC)); + DelayCommand(3.0, DeleteLocalInt(oPC, PRC_SPELL_EVENT)); +} + +//Called from scripts, will run a spell script with local int for flags +// NOTE: This directly executes the impactscript of the spell, which mean +// the spellid of any effect that get applied will be wrong. +// Only use this when you are sure no effect will be apllied, +// or if you really need to bypass the action queue. +void RunImpactScript(object oPC, int nSpellID, int nEventType) +{ + // we dont want to be running a 'fake' spellscript, as that will + // use ActionCastSpell, which is exactly what we are trying to avoid + int nRealSpell = GetPowerFromSpellID(nSpellID); + if (nRealSpell == -1) + nRealSpell = nSpellID; + + SetLocalInt(oPC, PRC_SPELL_EVENT, nEventType); + SetLocalInt(oPC, PRC_SPELLID_OVERRIDE, nRealSpell); + + string sScript = Get2DACache("spells", "ImpactScript", nRealSpell); + + ExecuteScript(sScript, oPC); + + DeleteLocalInt(oPC, PRC_SPELL_EVENT); + DeleteLocalInt(oPC, PRC_SPELLID_OVERRIDE); +} + +//Returns true if the spell is one of the cure spells +int IsCure(int nSpellID) +{ + return ((nSpellID >= SPELL_CURE_CRITICAL_WOUNDS) && (nSpellID <= SPELL_CURE_SERIOUS_WOUNDS)); +} + +//Returns true if the spell is one of the mass cure spells +int IsMassCure(int nSpellID) +{ + return ((nSpellID >= SPELL_MASS_CURE_LIGHT) && (nSpellID <= SPELL_MASS_CURE_CRITICAL)); +} + +//Returns true if the spell is one of the mass inflict spells +int IsMassInflict(int nSpellID) +{ + return ((nSpellID >= SPELL_MASS_INFLICT_LIGHT) && (nSpellID <= SPELL_MASS_INFLICT_CRITICAL)); +} + +//Returns true for the spell Heal +int IsHeal(int nSpellID) +{ + return nSpellID == SPELL_HEAL + || nSpellID == SPELL_MASS_HEAL; +} + +//Returns true for the Mass Heal spell (Mass Harm if it ever gets made) +int IsMassHealHarm(int nSpellID) +{ + return nSpellID == SPELL_MASS_HEAL + || nSpellID == SPELL_MASS_HARM; +} + +//Returns whether an effect should be removed +int CheckRemoveEffects(int nSpellID, int nEffectType) +{ + switch(nSpellID) + { + case SPELL_GREATER_RESTORATION: + { + return(nEffectType == EFFECT_TYPE_ABILITY_DECREASE || + nEffectType == EFFECT_TYPE_AC_DECREASE || + nEffectType == EFFECT_TYPE_ATTACK_DECREASE || + nEffectType == EFFECT_TYPE_DAMAGE_DECREASE || + nEffectType == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE || + nEffectType == EFFECT_TYPE_SAVING_THROW_DECREASE || + nEffectType == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE || + nEffectType == EFFECT_TYPE_SKILL_DECREASE || + nEffectType == EFFECT_TYPE_BLINDNESS || + nEffectType == EFFECT_TYPE_DEAF || + nEffectType == EFFECT_TYPE_CURSE || + nEffectType == EFFECT_TYPE_DISEASE || + nEffectType == EFFECT_TYPE_POISON || + nEffectType == EFFECT_TYPE_PARALYZE || + nEffectType == EFFECT_TYPE_CHARMED || + nEffectType == EFFECT_TYPE_DOMINATED || + nEffectType == EFFECT_TYPE_DAZED || + nEffectType == EFFECT_TYPE_CONFUSED || + nEffectType == EFFECT_TYPE_FRIGHTENED || + nEffectType == EFFECT_TYPE_NEGATIVELEVEL || + nEffectType == EFFECT_TYPE_SLOW || + nEffectType == EFFECT_TYPE_STUNNED); + } + case SPELL_RESTORATION: + { + return(nEffectType == EFFECT_TYPE_ABILITY_DECREASE || + nEffectType == EFFECT_TYPE_AC_DECREASE || + nEffectType == EFFECT_TYPE_ATTACK_DECREASE || + nEffectType == EFFECT_TYPE_DAMAGE_DECREASE || + nEffectType == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE || + nEffectType == EFFECT_TYPE_SAVING_THROW_DECREASE || + nEffectType == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE || + nEffectType == EFFECT_TYPE_SKILL_DECREASE || + nEffectType == EFFECT_TYPE_BLINDNESS || + nEffectType == EFFECT_TYPE_DEAF || + nEffectType == EFFECT_TYPE_PARALYZE || + nEffectType == EFFECT_TYPE_NEGATIVELEVEL); + break; + } + case SPELL_LESSER_RESTORATION: + { + return(nEffectType == EFFECT_TYPE_ABILITY_DECREASE || + nEffectType == EFFECT_TYPE_AC_DECREASE || + nEffectType == EFFECT_TYPE_ATTACK_DECREASE || + nEffectType == EFFECT_TYPE_DAMAGE_DECREASE || + nEffectType == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE || + nEffectType == EFFECT_TYPE_SAVING_THROW_DECREASE || + nEffectType == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE || + nEffectType == EFFECT_TYPE_SKILL_DECREASE); + break; + } + case SPELL_REMOVE_BLINDNESS_AND_DEAFNESS: + { + return nEffectType == EFFECT_TYPE_BLINDNESS + || nEffectType == EFFECT_TYPE_DEAF; + } + case SPELL_REMOVE_CURSE: + { + return nEffectType == EFFECT_TYPE_CURSE; + } + case SPELL_CALM_EMOTIONS: + { + return nEffectType == EFFECT_TYPE_FRIGHTENED + || nEffectType == EFFECT_TYPE_CONFUSED; + } + case SPELLABILITY_REMOVE_DISEASE: + case SPELL_REMOVE_DISEASE: + { + return (nEffectType == EFFECT_TYPE_DISEASE || + (GetPRCSwitch(PRC_BIOWARE_REMOVE_DISEASE) && + nEffectType == EFFECT_TYPE_ABILITY_DECREASE)); + } + case SPELL_NEUTRALIZE_POISON: + { + return (nEffectType == EFFECT_TYPE_POISON || + nEffectType == EFFECT_TYPE_DISEASE || + (GetPRCSwitch(PRC_BIOWARE_NEUTRALIZE_POISON) && + nEffectType == EFFECT_TYPE_ABILITY_DECREASE)); + } + case SPELL_PANACEA: + { + return (EFFECT_TYPE_BLINDNESS == nEffectType || + EFFECT_TYPE_CONFUSED == nEffectType || + EFFECT_TYPE_DAZED == nEffectType || + EFFECT_TYPE_DEAF == nEffectType || + EFFECT_TYPE_DISEASE == nEffectType || + EFFECT_TYPE_FRIGHTENED == nEffectType || + EFFECT_TYPE_PARALYZE == nEffectType || + EFFECT_TYPE_POISON == nEffectType || + EFFECT_TYPE_SLEEP == nEffectType || + EFFECT_TYPE_STUNNED == nEffectType); + } + } + return FALSE; +} + +int IsRaySpell(int nSpell) +{ + int nRealSpell = GetPowerFromSpellID(nSpell); + if (nRealSpell != -1) + nSpell = nRealSpell; + return nSpell == SPELL_AVASCULAR_MASS // avascular mass + || nSpell == SPELL_AVASCULATE // avasculate + || nSpell == SPELL_DIMENSIONAL_ANCHOR // dimensional anchor + || nSpell == SPELL_DISINTEGRATE // disintegrate + || nSpell == SPELL_POLAR_RAY // polar ray + || nSpell == SPELL_SLASHING_DARKNESS // slashing darkness + || nSpell == SPELL_RAY_OF_FROST // ray of frost + || nSpell == SPELL_ENERGY_DRAIN // energy drain + || nSpell == SPELL_ENERVATION // enervate + || nSpell == SPELL_RAY_OF_ENFEEBLEMENT // ray of enfeeblement + || nSpell == SPELL_NEGATIVE_ENERGY_RAY // negative energy ray + || nSpell == SPELL_SEARING_LIGHT // searing light + || nSpell == SPELL_SEEKING_RAY // seeking ray + || nSpell == SPELL_SCORCHING_RAY // scorching ray + || nSpell == SPELL_PRISMATIC_RAY // prismatic ray + || nSpell == SPELL_ELECTRIC_JOLT // Electric Jolt +// || nSpell == 0) // + ; +} diff --git a/src/include/prc_spell_const.nss b/src/include/prc_spell_const.nss new file mode 100644 index 0000000..b90a3dc --- /dev/null +++ b/src/include/prc_spell_const.nss @@ -0,0 +1,1597 @@ +//const int FOOBAR = -1; // Comment or uncomment whenever the compiler croaks on an error code 5. + +//:: NUI Spell constants +const int SPELL_NUI_POWER_ATTACK = 2691; + +//spell +const int SPELL_MAJOR_MAGIC_MISSILE = 2247; +const int SPELL_GREAT_WALL_OF_DISPEL = 2096; +const int SPELL_SOL_CONSECRATE = 2108; +const int SPELL_BLACKLIGHT = 2091; + +// bard +const int SPELL_BARD_SONG = 411; +const int SPELL_BARD_CURSE_SONG = 644; + +//:: Epic Level Handbook +const int SPELL_EPIC_SWARM_OF_ARROWS = 17996; + +//:: Bloodclaw Master +const int SPELL_BCM_RENDING_CLAWS = 17997; + +//:: Complete Warrior +const int SPELL_RANGED_DISARM = 3493; + +//:: Tome of Battle +const int SPELL_TOB_SNAP_KICK = 3794; + +//marshal +const int SPELL_MINAUR_DEMFORT = 3500; +const int SPELL_MINAUR_FORCEWILL = 3501; +const int SPELL_MINAUR_WATCHEYE = 3502; +const int SPELL_MINAUR_BOOSTCHA = 3503; +const int SPELL_MINAUR_BOOSTCON = 3504; +const int SPELL_MINAUR_BOOSTDEX = 3505; +const int SPELL_MINAUR_BOOSTINT = 3506; +const int SPELL_MINAUR_BOOSTSTR = 3507; +const int SPELL_MINAUR_BOOSTWIS = 3508; +const int SPELL_MINAUR_DETCAST = 3509; +const int SPELL_MINAUR_ARTOFWAR = 3510; +const int SPELL_MAJAUR_MOT_ARDOR = 3511; +const int SPELL_MAJAUR_MOT_CARE = 3512; +const int SPELL_MAJAUR_RES_TROOPS = 3513; +const int SPELL_MAJAUR_MOT_URGE = 3514; +const int SPELL_MAJAUR_HARD_SOLDIER = 3515; +const int SPELL_MAJAUR_MOT_ATTACK = 3516; +const int SPELL_MAJAUR_STEAD_HAND = 3517; +const int SPELL_GRANT_MOVE_ACTION = 3518; +const int SPELL_MAJAUR_MOT_CHA = 3519; +const int SPELL_MAJAUR_MOT_CON = 3520; +const int SPELL_MAJAUR_MOT_DEX = 3521; +const int SPELL_MAJAUR_MOT_INT = 3522; +const int SPELL_MAJAUR_MOT_STR = 3523; +const int SPELL_MAJAUR_MOT_WIS = 3524; + +//oozemaster +const int SPELL_SLIME_WAVE = 2023; + +//damage increase spells for ActionCastSpellOnSelf +const int SPELL_SET_COMPOSITE_ATTACK_BONUS = 2732; +const int SPELL_UNARMED_ATTACK_PEN = 2734; +const int SPELL_BATTLERAGER_DAMAGE = 2728; +const int SPELL_HEXTOR_DAMAGE = 2729; +const int SPELL_HEXTOR_MODE = 3859; +const int SPELL_THAYANKNIGHT_DAMAGE = 2730; +const int SPELL_MANATARMS_DAMAGE = 2731; +const int SPELL_KNIGHTCHALICE_DAMAGE = 2733; +const int SPELL_SWASH_DAMAGE = 3210; +const int SPELL_COC_DAMAGE = 3211; +const int SPELL_OOTBI_GREATER_WEAPON_FOCUS = 2436; +const int SPELL_INTUITIVE_ATK = 2090; +const int SPELL_SHIFTING_EFFECTS = 1918; + +//heartwarder +const int SPELL_LIPS_RAPTUR = 2210; +const int SPELL_TEARS_EVERGOLD = 2211; +const int SPELL_ELE_CONF_FIRE = 2213; +const int SPELL_ELE_CONF_WATER = 2214; +const int SPELL_ELE_CONF_EARTH = 2215; +const int SPELL_ELE_CONF_AIR = 2216; +const int IP_CONST_CASTSPELL_LIPS_RAPTURE_1 =550; + +// Frenzied Berserker Spells +const int SPELL_FRENZY = 2700; +const int SPELL_INSPIRE_FRENZY = 2701; +const int SPELL_SUPREME_POWER_ATTACK = 2702; +const int SPELL_REMOVE_FRENZY = 2703; + +// Eye of Gruumsh +const int SPELL_COMMAND_THE_HORDE = 2708; +const int SPELL_BLINDING_SPITTLE = 2709; +const int SPELL_BLINDSIGHT_5_FT = 2710; +const int SPELL_BLINDSIGHT_10_FT = 2711; + +// Orc Warlord +const int SPELL_OW_INSPIRE_COURAGE = 2712; +const int SPELL_FINAL_RAGE = 2713; +const int SPELL_RELEASE_HORDE = 2714; +const int SPELL_GATHER_HORDE_I = 2715; +const int SPELL_GATHER_HORDE_II = 2716; +const int SPELL_BLOOD_OF_THE_WARLORD = 2721; + +// Tempest Spells +const int SPELL_T_TWO_WEAPON_FIGHTING = 2705; + +// Runecaster Spells +const int SPELL_RUNE_CHANT = 1623; + +// Duelist +const int SPELL_ELABORATE_PARRY = 2722; +const int SPELL_ELABORATE_PARRY_P = 2723; +const int SPELL_ELABORATE_PARRY_FD = 2724; +const int SPELL_ELABORATE_PARRY_E = 2725; +const int SPELL_ELABORATE_PARRY_IE = 2726; + +// Master Harper +const int SPELLABILITY_AURA_LLIIRA = 3991; +const int SPELLABILITY_LYCANBANE = 3993; +const int SPELLABILITY_MIELIKKI = 3992; + +//Drow Judicator +const int SPELL_COMMAND_SPIDERS = 1728; +const int SPELL_SUMMON_MYRLOCHAR = 1616; +const int SPELL_SUMMON_MONSTROUS = 1614; +const int SPELL_SUMMON_SWORDSPID = 1615; +const int SPELL_SUMMON_PHASESPID = 1617; +const int SPELL_SELVETARMS_WRATH = 1612; + +// Foe Hunter Spells +const int SPELL_RANCOR = 2706; +const int SPELL_FH_DEATH_ATTACK = 2707; + +//Legendary Dread Spell +const int SPELL_UNMOVABLE = 2750; //CONSTANT + +//Iaijutsu Master Spell +const int SPELL_ONE_STRIKE_TWO_CUTS = 2761; //CONSTANT + +// Fist Raziel Spell +const int SPELL_SMITE_RAZIEL = 2217; +const int SPELL_SU_CIRCEVIL = 2218; + +// bonded +const int SPELL_POLYMORPH_ELEM = 2235 ; + +// Initiate of Draconic +const int SPELL_SHAPEDRAGONGOLD = 2239; +const int SPELL_SHAPEDRAGONRED = 2240; +const int SPELL_SHAPEDRAGONPRYS = 2241; +const int SPELL_SHAPE_INCREASE_DAMAGE = 2258; + +// Bladesinger +const int SPELL_SONG_OF_FURY = 2200; + +//True Necromancer +const int SPELL_DES_20 = 3988; +const int SPELL_DES_100 = 3987; + +//Thrall of Orcus +const int SPELL_TO_CARRION = 1558; + +//Frostrager +const int SPELL_ONETWO_PUNCH = 2705; + +//Serene Guardian +const int SPELL_SERENE_PAIN = 1569; +const int SPELL_SERENE_DAMAGE = 1570; +const int SPELL_SERENE_STAGGER = 1571; +const int SPELL_SERENE_CONFOUND = 1572; +const int SPELL_SERENE_SOUL = 1573; + +//Shou Disciple +const int SPELL_MARTIAL_FLURRY_LIGHT = 2725; +const int SPELL_MARTIAL_FLURRY_ALL = 2726; + +// Sacred Fist +const int SPELL_SACREDSPEED = 2123; +const int SPELL_INNERARMOR = 2124; +const int SPELL_SACREDFLAME = 2125; + +// Shadow Adept +const int SPELL_SHADOWSHIELD = 2126; +const int SPELL_SHADOWWALK = 2127; +const int SPELL_SHADOWDOUBLE = 2128; + +// Nightshade +const int SPELL_NS_WEB = 2130; + +// Shadowlord +const int SHAD_INVISIBILITY_SPHERE = 2230; +const int SHAD_DARKNESS = 2226; + +// Brawler +const int SPELL_BRAWLER_EXTRA_ATT = 2161; + +// Minstrel of the Edge +const int SPELL_MINSTREL_SONG_SLEEP = 2157; +const int SPELL_MINSTREL_SONG_SILENCE = 2158; +const int SPELL_MINSTREL_SONG_HASTE = 2159; +const int SPELL_MINSTREL_SONG_SLOW = 2160; +const int SPELL_MINSTREL_SONG_CHARM = 2145; +const int SPELL_MINSTREL_SONG_IMM_FEAR = 2147; +const int SPELL_MINSTREL_SONG_SHIELD_AC = 2148; +const int SPELL_MINSTREL_SONG_SONIC_WEAP = 2149; +const int SPELL_MINSTREL_SONG_STRENGTH = 2150; +const int SPELL_MINSTREL_SONG_CONSTITUTION = 2151; +const int SPELL_MINSTREL_SONG_DEXTERITY = 2152; +const int SPELL_MINSTREL_SONG_INTELLIGENCE = 2153; +const int SPELL_MINSTREL_SONG_WISDOM = 2154; +const int SPELL_MINSTREL_SONG_CHARISMA = 2155; +const int SPELL_MINSTREL_SONG_WOUND_WHISP = 2156; + +// Ultimate Ranger +const int SPELL_UR_FAVORITE_ENEMY = 2134; +const int SPELL_UR_HAWK_TOTEM = 2140; +const int SPELL_UR_HIPS = 2143; + +// Dragonsong +const int SPELL_DSL_SONG_STRENGTH = 2135; +const int SPELL_DSL_SONG_COMPULSION = 2136; +const int SPELL_DSL_SONG_SPEED = 2137; +const int SPELL_DSL_SONG_FEAR = 2138; +const int SPELL_DSL_SONG_HEALING = 2139; + +//Anti-Paladin +const int SPELL_ANTIPAL_BULLS_STRENGTH = 2041; +const int SPELL_ANTIPAL_DARKNESS = 2042; +const int SPELL_ANTIPAL_DESECRATE = 2043; +const int SPELL_ANTIPAL_INFLICT_LIGHT_WOUNDS = 2037; +const int SPELL_ANTIPAL_INFLICT_MODERATE_WOUNDS = 2048; +const int SPELL_ANTIPAL_INFLICT_SERIOUS_WOUNDS = 2054; +const int SPELL_ANTIPAL_MAGIC_CIRCLE_AGAINST_GOOD = 2049; +const int SPELL_ANTIPAL_AURAFEAR = 2089; +const int SPELL_APAL_MOUNT = 2052; + +// Complete Adv Ninja +const int SPELL_GHOST_STEP = 2742; + +//:: Forest Master (Faiths & Pantheons, pg. 193) +const int SPELL_FM_FORESTDOMINION = 2472; +const int SPELL_FM_GREATMALLETRADIALMASTER = 2473; +const int SPELL_FM_ICYMALLET = 2474; +const int SPELL_FM_SHOCKMALLET = 2475; +const int SPELL_FM_DEEPROOTS = 2476; + +// Spell Feat Generic +const int SPELL_WANDER_UNSEEN = 4071; +const int SPELL_MANYSHOT2 = 2246; +const int SPELL_MANYSHOT3 = 2248; +const int SPELL_MANYSHOT4 = 2249; +const int SPELL_MANYSHOT5 = 2208; +const int SPELL_MANYSHOT6 = 2209; +const int SPELL_PINPOINTACCURACY2 = 2204; +const int SPELL_PINPOINTACCURACY4 = 2205; +const int SPELL_PINPOINTACCURACY6 = 2206; +const int SPELL_EXTRASHOT = 2201; +const int NimbusOfLight = 2032; +const int SPELL_HOLYRADIANCE = 2196; +const int SPELL_RAVAGEGOLDENICE = 2190; +const int ServanOfHeaven = 2033; +const int SPELL_STIGMATA2 = 2193; +const int SPELL_STIGMATA3 = 2194; +const int SPELL_STIGMATA4 = 2195; +const int SPELL_STIGMATA5 = 2192; +const int Ranged_Smite = 2034; + +const int SPELL_POWER_ATTACK1 = 2171; +const int SPELL_POWER_ATTACK2 = 2172; +const int SPELL_POWER_ATTACK3 = 2173; +const int SPELL_POWER_ATTACK4 = 2174; +const int SPELL_POWER_ATTACK5 = 2175; +const int SPELL_POWER_ATTACK6 = 2177; +const int SPELL_POWER_ATTACK7 = 2178; +const int SPELL_POWER_ATTACK8 = 2179; +const int SPELL_POWER_ATTACK9 = 2180; +const int SPELL_POWER_ATTACK10 = 2181; +const int SPELL_FURIOUS_ASSAULT = 2182; +const int SPELL_DIVINE_RESISTANCE = 2166; +const int SPELL_DIVINE_CLEANSING = 2165; +const int SPELL_DIVINE_VIGOR = 2164; +const int SPELL_EPIC_DIVINE_VIGOR = 2162; + +// VFX Persistant +const int VFX_MOB_CIRCEVIL_NODIS = 110 ; + + +// Custom Spell ID's +const int SPELL_ANIMATE_OBJECT = 1790; +const int SPELL_ANIMAL_TRANCE = 1574; +const int SPELL_BLINK = 1575; +const int SPELL_DETECT_MAGIC = 1576; +const int SPELL_ENTHRALL = 2063; +const int SPELL_ACID_ORB = 3100; +const int SPELL_COLD_ORB = 3101; +const int SPELL_ELECTRIC_ORB = 3102; +const int SPELL_FIRE_ORB = 3103; +const int SPELL_SONIC_ORB = 3104; +const int SPELL_ACID_STORM = 3106; +const int SPELL_BLAST_OF_FLAME = 3110; +const int SPELL_BURNING_BOLT = 3109; +const int SPELL_DISINTEGRATE = 3111; +const int SPELL_ENERGY_IMMUNITY = 3113; +const int SPELL_ICE_BURST = 3105; +const int SPELL_LOWER_SR = 3126; +const int SPELL_MANTLE_OF_EGREG_MIGHT = 3112; +const int SPELL_MASS_BULLS_STRENGTH = 3119; +const int SPELL_MASS_CATS_GRACE = 3120; +const int SPELL_MASS_EAGLES_SPLENDOR = 3121; +const int SPELL_MASS_ENDURANCE = 3122; +const int SPELL_MASS_FOXS_CUNNING = 3123; +const int SPELL_MASS_HOLD_MONSTER = 3108; +const int SPELL_MASS_HOLD_PERSON = 3107; +const int SPELL_MASS_OWLS_WISDOM = 3124; +const int SPELL_MASS_ULTRAVISION = 3125; +const int SPELL_SERPENTS_SIGH = 3127; +const int SPELL_SERPENTS_SIGH_BOLT_ACID = 3128; +const int SPELL_SERPENTS_SIGH_BOLT_LIGHTNING = 3129; +const int SPELL_SERPENTS_SIGH_CONE_ACID = 3130; +const int SPELL_SERPENTS_SIGH_CONE_COLD = 3131; +const int SPELL_SERPENTS_SIGH_CONE_FIRE = 3132; +const int SPELL_HEROISM = 3133; +const int SPELL_GREATER_HEROISM = 3134; +const int SPELL_MASS_CURE_LIGHT = 3135; +const int SPELL_MASS_CURE_MODERATE = 3136; +const int SPELL_MASS_CURE_SERIOUS = 3137; +const int SPELL_MASS_CURE_CRITICAL = 3138; +const int SPELL_RIGHTEOUS_MIGHT = 3139; +const int SPELL_RECITATION = 3140; +const int SPELL_FORCEBLAST = 3141; +const int SPELL_GLITTERDUST = 3142; +const int SPELL_MORDENKAINENS_MAGNIFICENT_MANSION = 3143; +const int SPELL_LESSER_ACID_ORB = 3144; +const int SPELL_LESSER_COLD_ORB = 3145; +const int SPELL_LESSER_ELECTRIC_ORB = 3146; +const int SPELL_LESSER_FIRE_ORB = 3147; +const int SPELL_LESSER_SONIC_ORB = 3148; +const int SPELL_BALEFUL_TRANSPOSITION = 3149; +const int SPELL_BENIGN_TRANSPOSITION = 3150; +const int SPELL_CONVICTION = 3151; +const int SPELL_LEGIONS_CONVICTION = 3152; +const int SPELL_CURSE_OF_IMPENDING_BLADES = 3153; +const int SPELL_LEGIONS_CURSE_OF_IMPENDING_BLADES = 3154; +const int SPELL_CURSE_OF_PETTY_FAILING = 3155; +const int SPELL_LEGIONS_CURSE_OF_PETTY_FAILING = 3156; +const int SPELL_DIVINE_PROTECTION = 3157; +const int SPELL_FIREBURST = 3158; +const int SPELL_GREATER_FIREBURST = 3159; +const int SPELL_LIONHEART = 3160; +const int SPELL_LIVING_UNDEATH = 3161; +const int SPELL_PANACEA = 3162; +const int SPELL_LEGIONS_SHIELD_OF_FAITH = 3163; +const int SPELL_SLASHING_DARKNESS = 3164; +const int SPELL_ANGAZZARS_SCORCHER = 3165; +const int SPELL_CREATE_MAGIC_TATTOO = 3166; +const int SPELL_FLASHBURST = 3168; +const int SPELL_FLENSING = 3169; +const int SPELL_SHADOW_SPRAY = 3170; +const int SPELL_SNILLOCS_SNOWBALL_SWARM = 3171; +const int SPELL_BELTYNS_BURNING_BLOOD = 3172; +const int SPELL_ILYYKURS_MANTLE = 3173; +const int SPELL_IMPROVED_MAGE_ARMOR = 3174; +const int SPELL_NYBORS_GENTLE_REMINDER = 3175; +const int SPELL_NYBORS_STERN_REPROOF = 3176; +const int SPELL_SINSABURS_BALEFUL_BOLT = 3177; +const int SPELL_SNILLOCS_SNOWBALL = 3178; +const int SPELL_SOULSCOUR = 3179; +const int SPELL_SPHERE_OF_ULTIMATE_DESTRUCTION = 3180; +const int SPELL_CLARITY_OF_MIND = 3181; +const int SPELL_MASS_DROWN = 3182; +const int SPELL_HAIL_OF_STONE = 3183; +const int SPELL_SPIDERSKIN = 3184; +const int SPELL_VISCID_GLOB = 3185; +const int SPELL_WORD_OF_BALANCE = 3186; +const int SPELL_GREENFIRE = 3187; +const int SPELL_CHILL_TOUCH = 1791; +const int SPELL_POX = 2886; +const int SPELL_PESTILENCE = 2887; +const int SPELL_DETECT_EVIL = 3201; +const int SPELL_DETECT_GOOD = 3202; +const int SPELL_DETECT_LAW = 3203; +const int SPELL_DETECT_CHAOS = 3204; +const int SPELL_UNDETECTABLE_ALINGMENT = 3205; +const int SPELL_UNHOLYSWORD = 3206; +const int SPELL_DEEPER_DARKNESS = 3207; +const int SPELL_HOLY_WORD = 3220; +const int SPELL_BLASPHEMY = 3221; +const int SPELL_DICTUM = 3222; +const int SPELL_WORD_OF_CHAOS = 3223; +const int SPELL_BLUR = 3208; +const int SPELL_MIRROR_IMAGE = 3209; +const int SPELL_INSANITY = 3212; +//const int SPELL_IRON_BODY = 3213; +const int SPELL_DIMENSIONAL_ANCHOR = 2889; +const int SPELL_DIMENSION_DOOR = 2890; +const int SPELL_DIMENSION_DOOR_SELF = 2891; +const int SPELL_DIMENSION_DOOR_PARTY = 2892; +const int SPELL_DIMENSION_DOOR_DIRDIST_SELF = 2896; +const int SPELL_DIMENSION_DOOR_DIRDIST_PARTY = 2897; +const int SPELL_MAZE = 2888; +const int SPELL_GREATER_TELEPORT = 2893; +const int SPELL_GREATER_TELEPORT_SELF = 2894; +const int SPELL_GREATER_TELEPORT_PARTY = 2895; +const int SPELL_TELEPORTATION_CIRCLE = 2877; +const int SPELL_DIMENSIONAL_LOCK = 2898; +const int SPELL_TELEPORT = 2874; +const int SPELL_TELEPORT_SELF = 2875; +const int SPELL_TELEPORT_PARTY = 2876; +const int SPELL_BLOOD_OF_THE_MARTYR = 3099; +const int SPELL_POLAR_RAY = 3098; +const int SPELL_COMMAND_APPROACH = 3093; +const int SPELL_COMMAND_DROP = 3094; +const int SPELL_COMMAND_FALL = 3095; +const int SPELL_COMMAND_FLEE = 3096; +const int SPELL_COMMAND_HALT = 3097; +const int SPELL_GREATER_COMMAND_APPROACH = 3087; +const int SPELL_GREATER_COMMAND_DROP = 3088; +const int SPELL_GREATER_COMMAND_FALL = 3089; +const int SPELL_GREATER_COMMAND_FLEE = 3090; +const int SPELL_GREATER_COMMAND_HALT = 3091; +const int SPELL_VISION_OF_HEAVEN = 3083; +const int SPELL_SWORD_OF_CONSCIENCE = 3084; +const int SPELL_OBSCURING_MIST = 3085; +const int SPELL_SHOUT = 1953; +const int SPELL_SHOUT_GREATER = 1954; +const int SPELL_SPELL_JUMP = 2070; +const int SPELL_IRON_BODY = 2071; +const int SPELL_ENLARGE_PERSON = 2072; +const int SPELL_ENLARGE_PERSON_MASS = 2073; +const int SPELL_REDUCE_PERSON = 2074; +const int SPELL_REDUCE_PERSON_MASS = 2075; +const int SPELL_ANTIMAGIC_FIELD = 2076; +const int SPELL_NONDETECTION = 2077; +const int SPELL_RAINBOW_PATTERN = 2078; +const int SPELL_MAGE_HAND = 2079; +const int SPELL_DETECT_UNDEAD = 2080; +const int SPELL_PNP_SCARE = 1789; +const int SPELL_CONTAGIOUS_TOUCH = 2227; +const int SPELL_SUDDEN_STALAGMITE = 3827; +const int SPELL_BONES_OF_THE_EARTH = 3828; +const int SPELL_PHANTOM_STEED = 2347; +const int SPELL_GASEOUS_FORM = 2348; + +//:: Racial spell additions +const int SPIRETOP_FOG_CLOUD_BREATH = 1487; //:: Spiretop Dragon +const int MEPHLING_BREATH_WEAPON = 1488; //:: Mephlings +const int SPELL_ARANEA_ALTER = 1489; //:: Aranea +const int SPELL_ARANEA_ALTER_HUMANOID = 1490; +const int SPELL_ARANEA_ALTER_HYBRID = 1491; +const int SPELL_ARANEA_ALTER_SPIDER = 1492; +const int SPELL_ARANEA_WEB = 1493; +const int SPELL_MUCK_SQUIRT = 1494; //:: Muckdweller +const int SPELL_RAKSHASA_DISGUISE = 1951; +const int SPELL_FEYRI_ALTER = 1955; +const int SPELL_NIXIE_WATERBREATHING = 1956; +const int SPELL_URDINNIR_STONESKIN = 1957; +const int SPELL_RACE_DARKNESS = 1958; +const int SPELL_RACE_DAZE = 1959; +const int SPELL_RACE_LIGHT = 1960; +const int SPELL_SVIRF_BLINDDEAF = 1961; +const int SPELL_DUERGAR_INVIS = 1962; +const int SPELL_ILLITHID_CHARM_MONSTER = 1963; +const int SPELL_RACE_CHARM_PERSON = 1964; +const int SPELL_AVARIEL_DIVE = 1966; +const int SPELL_MINOTAUR_CHARGE = 1967; +const int SPELL_RACE_BLUR = 1968; +const int SPELL_FEYRI_ENERVATION = 1969; +const int SPELL_RACE_ENTANGLE = 1970; +const int SPELL_RACE_FEAR = 1971; +const int SPELL_RACE_CLAIR = 1972; +const int SPELL_RACE_NEUTRALIZE_POISON = 1973; +const int SPELL_PIXIE_CONFUSION = 1974; +const int SPELL_PIXIE_IMPINVIS = 1975; +const int SPELL_PIXIE_DISPEL = 1976; +const int SPELL_RACE_CHILLTOUCH = 1977; +const int SPELL_RACE_SILENCE = 1989; +const int SPELL_RACE_MAGE_HAND = 1990; +const int SPELL_HOUND_AURAMENACE = 2905; +const int SPELL_HOUND_AID = 2930; +const int SPELL_HOUND_CONTFLAME = 2932; +const int SPELL_HOUND_DETECTEVIL = 2933; +const int SPELL_HOUND_DISGUISE = 2936; +const int SPELL_HOUND_MAGICCIRCLE = 2934; +const int SPELL_HOUND_TELEPORT = 2935; +const int SPELL_ZENYTH_TRUE_STRIKE = 2937; +const int SPELL_RACIAL_CIRCLE_VS_GOOD = 2938; +const int SPELL_RACIAL_CIRCLE_VS_EVIL = 2939; +const int SPELL_RACIAL_CIRCLE_VS_LAW = 2940; +const int SPELL_RACIAL_CIRCLE_VS_CHAOS = 2941; +const int SPELL_NATHRI_EXPEDITIOUS_RETREAT = 2943; +const int SPELL_BLADELING_RAZOR_STORM = 2944; +const int SPELL_DRIDER_DETECTGOOD = 2945; +const int SPELL_DRIDER_DETECTLAW = 2946; +const int SPELL_KAPAK_APPLY_SALIVA = 2947; +const int SPELL_KAPAK_ONHIT_POISON = 2948; +const int SPELL_IRDA_FLARE = 2922; +const int SPELL_ZAKYA_VAMPIRIC_TOUCH = 1996; +const int SPELL_MINOR_SHAPE_CHANGE = 2907; +const int SPELL_CHANGLING_CHANGE_SHAPE_LEARN = 1943; +const int SPELL_CHANGLING_CHANGE_SHAPE_OPTIONS = 1944; +const int SPELL_CHANGLING_CHANGE_SHAPE_TRUE = 1945; +const int SPELL_CHANGLING_CHANGE_SHAPE_QS1 = 1946; +const int SPELL_CHANGLING_CHANGE_SHAPE_QS2 = 1947; +const int SPELL_IRDA_CHANGE_SHAPE_LEARN = 1937; +const int SPELL_IRDA_CHANGE_SHAPE_OPTIONS = 1938; +const int SPELL_IRDA_CHANGE_SHAPE_TRUE = 1939; +const int SPELL_IRDA_CHANGE_SHAPE_QS1 = 1940; +const int SPELL_IRDA_CHANGE_SHAPE_QS2 = 1941; +const int SPELL_QUICK_CHANGE_SHAPE_LEARN = 2909; +const int SPELL_QUICK_CHANGE_SHAPE_OPTIONS = 2910; +const int SPELL_QUICK_CHANGE_SHAPE_TRUE = 2911; +const int SPELL_QUICK_CHANGE_SHAPE_QS1 = 2912; +const int SPELL_QUICK_CHANGE_SHAPE_QS2 = 2913; +const int SPELL_FEYRI_CHANGE_SHAPE_LEARN = 2951; +const int SPELL_FEYRI_CHANGE_SHAPE_OPTIONS = 2952; +const int SPELL_FEYRI_CHANGE_SHAPE_TRUE = 2953; +const int SPELL_FEYRI_CHANGE_SHAPE_QS1 = 2954; +const int SPELL_FEYRI_CHANGE_SHAPE_QS2 = 2955; +const int SPELL_NYMPH_DIMDOOR_SELF = 2957; +const int SPELL_NYMPH_DIMDOOR_PARTY = 2958; +const int SPELL_NYMPH_DIMDOOR_DIST_SELF = 2959; +const int SPELL_NYMPH_DIMDOOR_DIST_PARTY = 2960; +const int SPELL_NYMPH_STUNNING_GLANCE = 1948; +const int SPELL_NYMPH_BLINDING_BEAUTY = 1949; +const int SPELL_GRIG_PYROTECHNICS_FIREWORKS = 2915; +const int SPELL_GRIG_PYROTECHNICS_SMOKE = 2916; +const int SPELL_BRALANI_LIGHTNING_BOLT = 2917; +const int SPELL_BRALANI_CURE_SERIOUS_WOUNDS = 2918; +const int SPELL_BRALANI_MIRROR_IMAGE = 2920; +const int SPELL_BRALANI_GUST_OF_WIND = 2919; +const int SPELL_RAKSHASA_CHANGE_SHAPE_LEARN = 2962; +const int SPELL_RAKSHASA_CHANGE_SHAPE_OPTIONS = 2963; +const int SPELL_RAKSHASA_CHANGE_SHAPE_TRUE = 2964; +const int SPELL_RAKSHASA_CHANGE_SHAPE_QS1 = 2965; +const int SPELL_RAKSHASA_CHANGE_SHAPE_QS2 = 2966; +const int SPELL_FORESTLORD_TREEWALK_SELECTED = 2967; +const int SPELL_FORESTLORD_TREEWALK_DIRDIST = 2968; +const int SPELL_ASHRATI_BODYLAMP = 2289; +const int SPELL_ASHRATI_DAZZLE = 2332; +const int SPELL_HYBSIL_MIRROR_IMAGE = 1578; +const int SPELL_HYBSIL_DANCLIGHTS = 1579; +const int SPELL_HYBSIL_JUMP = 1580; +const int SPELL_ARKAMOI_STRENGTH = 19011; +const int SPELL_LASHEMOI_STRENGTH = 19012; +const int SPELL_TURLEMOI_STRENGTH = 19013; +const int SPELL_HADRIMOI_STRENGTH = 19014; +const int SPELL_GLOURA_GRACE = 19015; + +// Poison system spells +const int SPELL_POISONED_WEAPON = 2880; +const int SPELL_GRENADE_POISONVIAL = 2881; +const int SPELL_POISON_WEAPON = 2882; +const int SPELL_POISON_ITEM = 2883; +const int SPELL_POISON_FOOD = 2884; +const int SPELL_CLEAN_POISON_OFF = 2885; + + +// Psionic feat spells +const int SPELL_FEAT_SPEED_OF_THOUGHT_BONUS = 2820; + +// Active feat spells +const int SPELL_JUMP = 2727; + +// Havoc Mage +const int SPELL_BATTLECAST = 2025; + +// Lasher +const int SPELL_LASHER_THIRD_HAND = 1910; +const int SPELL_LASHER_CRACK_FATE = 1911; +const int SPELL_LASHER_STUN_SNAP = 1912; +const int SPELL_LASHER_DEATH_SPIRAL = 1913; +const int SPELL_LASHER_LASHW = 1914; +const int SPELL_LASHER_CRACK_DOOM = 1917; + +// Warchief +const int SPELL_TRIBAL_FRENZY = 1597; + + +//Baelnorn +const int SPELL_END_PROJECTION = 2899; +const int SPELL_BAELNORN_PROJECTION = 2902; +const int SPELL_BAELNORN_TOUCH = 2903; +const int SPELL_BAELN_EYES = 2027; + +//Peerless Archer Feats +const int SPELL_PA_FLETCH_1 = 1515; +const int SPELL_PA_FLETCH_2 = 1516; +const int SPELL_PA_FLETCH_3 = 1517; +const int SPELL_PA_FLETCH_4 = 1518; +const int SPELL_PA_FLETCH_5 = 1519; +const int SPELL_PA_POWERSHOT = 1520; +const int SPELL_PA_IMP_POWERSHOT = 1521; +const int SPELL_PA_SUP_POWERSHOT = 1522; + +//Tenjac's spells +const int SPELL_AVASCULATE = 2851; +const int SPELL_AVASCULAR_MASS = 2852; +const int SPELL_OTILUKES_RS = 2853; +const int SPELL_NECROTIC_AWARENESS = 2854; +const int SPELL_NECROTIC_CYST = 2855; +const int SPELL_NECROTIC_BLOAT = 2856; +const int SPELL_NECROTIC_DOMINATION = 2857; +const int SPELL_NECROTIC_BURST = 2858; +const int SPELL_NECROTIC_ERUPTION = 2859; +const int SPELL_NECROTIC_EMPOWERMENT = 2860; +const int SPELL_NECROTIC_TERMINATION = 2861; +const int SPELL_GHOUL_GAUNTLET = 2862; +const int SPELL_ENERGY_EBB = 2863; +const int SPELL_NIGHTS_CARESS = 2864; + +const int SPELL_ENERGIZE_POTION_ACID = 2489; +const int SPELL_ENERGIZE_POTION_COLD = 2490; +const int SPELL_ENERGIZE_POTION_ELECTRICITY = 2491; +const int SPELL_ENERGIZE_POTION_FIRE = 2492; +const int SPELL_ENERGIZE_POTION_SONIC = 2493; +const int SPELL_DIVINE_SACRIFICE_2 = 2494; +const int SPELL_DIVINE_SACRIFICE_4 = 2495; +const int SPELL_DIVINE_SACRIFICE_6 = 2496; +const int SPELL_DIVINE_SACRIFICE_8 = 2497; +const int SPELL_DIVINE_SACRIFICE_10 = 2498; +const int SPELL_COMMAND_UNDEAD = 2499; + +const int SPELL_ABERRATE = 2512; +const int SPELL_ABSORB_STRENGTH = 2513; +const int SPELL_ABYSSAL_MIGHT = 2514; +const int SPELL_ANGRY_ACHE = 2515; +const int SPELL_APOCALYPSE_FROM_THE_SKY = 2516; +const int SPELL_APOCALYPSE_FROM_THE_SKY_FIRE = 2517; +const int SPELL_APOCALYPSE_FROM_THE_SKY_ACID = 2518; +const int SPELL_APOCALYPSE_FROM_THE_SKY_SONIC = 2519; +const int SPELL_BESTOW_WOUND = 2520; +const int SPELL_BODAK_BIRTH = 2521; +const int SPELL_BONEBLADE = 2522; +const int SPELL_BONEBLADE_GREATSWORD = 2523; +const int SPELL_BONEBLADE_LONGSWORD = 2524; +const int SPELL_BONEBLADE_SHORTSWORD = 2525; +const int SPELL_BONEBLAST = 2526; +const int SPELL_CALL_DRETCH_HORDE = 2527; +const int SPELL_CALL_LEMURE_HORDE = 2528; +const int SPELL_CLAWS_OF_THE_BEBILITH = 2529; +const int SPELL_CLAWS_OF_THE_SAVAGE = 2530; +const int SPELL_CLOUD_OF_THE_ACHAIERAI = 2531; +const int SPELL_CLUTCH_OF_ORCUS = 2532; +const int SPELL_CRUSHING_FIST_OF_SPITE = 2533; +const int SPELL_CURSE_OF_THE_PUTRID_HUSK = 2534; +const int SPELL_DAMNING_DARKNESS = 2535; +const int SPELL_DEATH_BY_THORNS = 2536; +const int SPELL_DEMONCALL = 2537; +const int SPELL_DEMONFLESH = 2538; +const int SPELL_DESPOIL = 2539; +const int SPELL_DEVILS_EGO = 2540; +const int SPELL_DEVILS_EYE = 2541; +const int SPELL_DEVILS_TAIL = 2542; +const int SPELL_DREAD_WORD = 2543; +const int SPELL_DRUG_RESISTANCE = 2544; +const int SPELL_ECTOPLASMIC_ENCHANCEMENT = 2545; +const int SPELL_ETERNITY_OF_TORTURE = 2546; +const int SPELL_EVIL_EYE = 2547; +const int SPELL_EYE_OF_THE_BEHOLDER = 2548; +const int SPELL_EVIL_WEATHER = 2549; +const int SPELL_EVIL_WEATHER_RAIN_OF_BLOOD = 2550; +const int SPELL_EVIL_WEATHER_VIOLET_RAIN = 2551; +const int SPELL_EVIL_WEATHER_GREEN_FOG = 2552; +const int SPELL_EVIL_WEATHER_RAIN_OF_FISH = 2553; +const int SPELL_EXTRACT_DRUG = 2554; +const int SPELL_EXTRACT_BACCARAN = 2555; +const int SPELL_EXTRACT_VODARE = 2556; +const int SPELL_EXTRACT_SANNISH = 2557; +const int SPELL_EXTRACT_MUSHROOM_POWDER = 2558; +const int SPELL_FANGS_OF_THE_VAMPIRE_KING = 2559; +const int SPELL_FIENDISH_CLARITY = 2560; +const int SPELL_FLESH_ARMOR = 2561; +const int SPELL_FLESH_RIPPER = 2562; +const int SPELL_GRIM_REVENGE = 2563; +const int SPELL_GUTWRENCH = 2564; +const int SPELL_HEARTACHE = 2565; +const int SPELL_HEARTCLUTCH = 2566; +const int SPELL_HELLFIRE = 2567; +const int SPELL_HELLFIRE_STORM = 2568; +const int SPELL_HELLS_POWER = 2569; +const int SPELL_LAHMS_FINGER_DARTS = 2570; +const int SPELL_LIQUID_PAIN = 2571; +const int SPELL_MORALITY_UNDONE = 2572; +const int SPELL_POWER_LEECH = 2573; +const int SPELL_RAPTURE_OF_RUPTURE = 2574; +const int SPELL_REALITY_BLIND = 2575; +const int SPELL_RED_FESTER = 2576; +const int SPELL_RESONATING_RESISTANCE = 2577; +const int SPELL_ROTTING_CURSE_OF_URFESTRA = 2578; +const int SPELL_SEETHING_EYEBANE = 2579; +const int SPELL_SHRIVELING = 2580; +const int SPELL_SONG_OF_FESTERING_DEATH = 2581; +const int SPELL_SORROW = 2582; +const int SPELL_EXALTED_RAIMENT = 2583; +const int SPELL_SPORES_OF_THE_VROCK = 2584; +const int SPELL_STUNNING_SCREECH = 2585; +const int SPELL_STOP_HEART = 2586; +const int SPELL_THOUSAND_NEEDLES = 2587; +const int SPELL_TONGUE_OF_BAALZEBUL = 2588; +const int SPELL_TOUCH_OF_JUIBLEX = 2589; +const int SPELL_UNHEAVENED = 2590; +const int SPELL_UNLIVING_WEAPON = 2591; +const int SPELL_UTTERDARK = 2592; +const int SPELL_WAVE_OF_GRIEF = 2593; +const int SPELL_WAVE_OF_PAIN = 2594; +const int SPELL_WRACK = 2595; +const int SPELL_WRETCHED_BLIGHT = 2596; +const int SPELL_AGONY = 2597; +const int SPELL_BACCARAN = 2598; +const int SPELL_DEVILWEED = 2599; +const int SPELL_LUHIX = 2600; +const int SPELL_MUSHROOM_POWDER = 2601; +const int SPELL_SANNISH = 2602; +const int SPELL_TERRAN_BRANDY = 2603; +const int SPELL_VODARE = 2604; +const int SPELL_LESSER_SHIVERING_TOUCH = 2605; +const int SPELL_SHIVERING_TOUCH = 2606; +const int SPELL_AYAILLAS_RADIANT_BURST = 2607; +const int SPELL_BRILLIANT_EMANATION = 2608; +const int SPELL_DIVINE_INSPIRATION = 2609; +const int SPELL_DIAMOND_SPRAY = 2610; +const int SPELL_DRAGON_CLOUD = 2611; +const int SPELL_EXALTED_FURY = 2612; +const int SPELL_HAMMER_OF_RIGHTEOUSNESS = 2613; +const int SPELL_PHIERANS_RESOLVE = 2614; +const int SPELL_PHOENIX_FIRE = 2615; +const int SPELL_RAIN_OF_EMBERS = 2616; +const int SPELL_SICKEN_EVIL = 2617; +const int SPELL_STORM_OF_SHARDS = 2618; +const int SPELL_SUNMANTLE = 2619; +const int SPELL_TWILIGHT_LUCK = 2620; +const int SPELL_AMBER_SARCOPHAGUS = 2621; +const int SPELL_BLINDING_GLORY = 2622; +const int SPELL_BOLT_OF_GLORY = 2623; +const int SPELL_CALL_FAITHFUL_SERVANTS = 2624; +const int SPELL_CELESTIAL_BLOOD = 2625; +const int SPELL_CHAAVS_LAUGH = 2626; +const int SPELL_CONVERT_WAND = 2627; +const int SPELL_DANCING_WEB = 2628; +const int SPELL_DIVINE_SACRIFICE = 2629; +const int SPELL_ELATION = 2630; +const int SPELL_ENERGIZE_POTION = 2631; +const int SPELL_EYES_OF_THE_AVORAL = 2632; +const int SPELL_INSPIRED_AIM = 2633; +const int SPELL_LANTERN_LIGHT = 2634; +const int SPELL_LAST_JUDGEMENT = 2635; +const int SPELL_LUMINOUS_ARMOR = 2636; +const int SPELL_GREATER_LUMINOUS_ARMOR = 2637; +const int SPELL_RAIN_OF_BLACK_TULIPS = 2638; +const int SPELL_RAIN_OF_ROSES = 2639; +const int SPELL_RAY_OF_HOPE = 2640; +const int SPELL_RIGHTEOUS_SMITE = 2641; +const int SPELL_STARMANTLE = 2642; +const int SPELL_TOMB_OF_LIGHT = 2643; +const int SPELL_MASOCHISM = 2644; +const int SPELL_ADDICTION = 2645; +const int SPELL_ADDICTION_TERRAN_BRANDY = 2646; +const int SPELL_ADDICTION_MUSHROOM_POWDER = 2647; +const int SPELL_ADDICTION_VODARE = 2648; +const int SPELL_ADDICTION_AGONY = 2649; + +const int SPELL_ANIMALISTIC_POWER = 1741; +const int SPELL_BIGBYS_STRIKING_FIST = 1742; +const int SPELL_BIGBYS_TRIPPING_HAND = 1743; +const int SPELL_BLADE_OF_BLOOD = 1744; +const int SPELL_BLADE_OF_BLOOD_NRM = 1745; +const int SPELL_BLADE_OF_BLOOD_EMP = 1746; +const int SPELL_AUGMENT_FAMILIAR = 1796; +const int SPELL_FALSE_LIFE = 1799; +const int SPELL_PROTECTION_FROM_ARROWS = 1800; +const int SPELL_TOUCH_OF_IDIOCY = 1801; +const int SPELL_DEEP_SLUMBER = 1802; +const int SPELL_HOUND_OF_DOOM = 1803; +const int SPELL_REPEL_VERMIN = 1804; +const int SPELL_BALEFUL_POLYMORPH = 1805; +const int SPELL_BREAK_ENCHANTMENT = 1806; +const int SPELL_CURSED_BLADE = 1807; +const int SPELL_SOLID_FOG = 1808; +const int SPELL_DETECT_SCRYING = 1809; + +const int SPELL_CHANNELED_PYROBURST = 1810; +const int SPELL_CHANNELED_PYROBURST_1 = 1811; +const int SPELL_CHANNELED_PYROBURST_2 = 1812; +const int SPELL_CHANNELED_PYROBURST_3 = 1813; +const int SPELL_CHANNELED_PYROBURST_4 = 1814; +const int SPELL_CROWN_OF_MIGHT = 1815; +const int SPELL_CROWN_OF_PROTECTION = 1816; +const int SPELL_LESSER_DEFLECT = 1817; +const int SPELL_DEFLECT = 1797; +const int SPELL_DIMENSION_HOP = 1818; +const int SPELL_DISPELLING_TOUCH = 1819; +const int SPELL_DOOM_SCARABS = 1820; +const int SPELL_ENERGY_AEGIS = 1821; +const int SPELL_ENERGY_AEGIS_ACID = 1822; +const int SPELL_ENERGY_AEGIS_COLD = 1823; +const int SPELL_ENERGY_AEGIS_ELEC = 1824; +const int SPELL_ENERGY_AEGIS_FIRE = 1825; +const int SPELL_ENERGY_AEGIS_SONIC = 1826; +const int SPELL_ENERGY_SURGE = 1827; +const int SPELL_ENERGY_SURGE_ACID = 1828; +const int SPELL_ENERGY_SURGE_COLD = 1829; +const int SPELL_ENERGY_SURGE_ELEC = 1830; +const int SPELL_ENERGY_SURGE_FIRE = 1831; +const int SPELL_ENERGY_SURGE_SONIC = 1832; +const int SPELL_HALT = 1833; +const int SPELL_KELGORES_FIRE_ORB = 1834; +const int SPELL_REGROUP = 1835; +const int SPELL_ROUSE = 1836; +const int SPELL_SEEKING_RAY = 1837; +const int SPELL_SLASHING_DISPEL = 1838; +const int SPELL_SONIC_SHIELD = 1839; +const int SPELL_SURE_STRIKE = 1840; +const int SPELL_TRUE_RESURRECTION = 1855; +const int SPELL_CALM_EMOTIONS = 1852; +const int SPELL_FROGS_AND_FISH = 2646; +const int SPELL_REPULSION = 1853; + +const int SPELL_SARCOPHAGUS_OF_STONE = 3662; +const int SPELL_ARROW_OF_BONE = 3663; +const int SPELL_DRACONIC_MIGHT = 3664; +const int SPELL_EXTRACT_WATER_ELEMENTAL = 3665; +const int SPELL_HEART_RIPPER = 3666; +const int SPELL_LIFE_BOLT = 3667; +const int SPELL_RAINBOW_BLAST = 3668; +const int SPELL_TOWERING_OAK = 3669; +const int SPELL_LIFE_BOLT_1_BOLT = 3670; +const int SPELL_LIFE_BOLT_2_BOLTS = 3671; +const int SPELL_LIFE_BOLT_3_BOLTS = 3672; +const int SPELL_LIFE_BOLT_4_BOLTS = 3673; +const int SPELL_LIFE_BOLT_5_BOLTS = 3674; + +const int SPELL_DISRUPT_UNDEAD = 3675; +const int SPELL_OTILUKES_RESILIENT_SPHERE = 3676; +const int SPELL_FIST_OF_STONE = 3677; +const int SPELL_BLADES_OF_FIRE = 3678; +const int SPELL_FIRE_TRAP = 3679; +const int SPELL_PYROTECHNICS = 3680; +const int SPELL_ICE_KNIFE = 3681; +const int SPELL_MASS_FIRE_SHIELD_RED = 3682; +const int SPELL_WHIRLING_BLADE = 3683; +const int SPELL_PNP_FIRE_SHIELD = 3684; +const int SPELL_RING_OF_BLADES = 3685; +const int SPELL_SLEET_STORM = 3686; +const int SPELL_ORB_OF_FORCE = 3687; +const int SPELL_MASS_FIRE_SHIELD = 3688; +const int SPELL_PRISMATIC_RAY = 3689; +const int SPELL_FIRE_SEEDS = 3690; +const int SPELL_OTILUKES_FREEZING_SPHERE = 3691; +const int SPELL_WAVES_OF_EXHAUSTION = 3692; +const int SPELL_PRISMATIC_WALL = 3693; +const int SPELL_SCINTILLATING_PATTERN = 3694; +const int SPELL_PRISMATIC_SPHERE = 3695; +const int SPELL_PYROTECHNICS_FIREWORKS = 3696; +const int SPELL_PYROTECHNICS_SMOKE = 3697; +const int SPELL_GREATER_DISRUPT_UNDEAD = 3698; +const int SPELL_PNP_FIRE_SHIELD_RED = 3699; +const int SPELL_PNP_FIRE_SHIELD_BLUE = 3700; +const int SPELL_MASS_FIRE_SHIELD_BLUE = 3701; +const int SPELL_SHOCKING_GRASP = 3055; +const int SPELL_GLIBNESS = 2081; + +const int SPELL_ARROW_STORM = 3702; +const int SPELL_ARROW_SPLIT = 3703; +const int SPELL_BLOODFREEZE_ARROW = 3704; +const int SPELL_DOUBLESTRIKE_ARROW = 3706; +const int SPELL_DETECT_FAVORED_ENEMIES = 3707; +const int SPELL_DARKFLAME_ARROW = 3708; +const int SPELL_HEAL_ANIMAL_COMPANION = 3709; +const int SPELL_SHADOW_ARROW = 3710; +const int SPELL_SNARE = 3711; +const int SPELL_SPELLSLAYER_ARROW = 3712; + +const int SPELL_DAYLIGHT = 2971; +const int SPELL_CLOSE_WOUNDS = 1849; +const int SPELL_REVIVIFY = 1850; +const int SPELL_BLESS_WATER = 1851; +const int SPELL_PRC_HOLY_AURA = 1854; +const int SPELL_FORESIGHT = 1856; + +// Spells added for the Dread Necro +const int SPELL_HIDE_FROM_UNDEAD = 3432; +const int SPELL_CRUSHING_DESPAIR = 3433; +const int SPELL_HALT_UNDEAD = 3434; +const int SPELL_EYEBITE = 3435; +const int SPELL_SONG_OF_DISCORD = 3436; +const int SPELL_FIRE_IN_THE_BLOOD = 3437; +const int SPELL_VILE_DEATH = 3438; +const int SPELL_PLAGUE_OF_UNDEAD = 3439; +const int SPELL_DREADNECRO_FEARAURA = 3444; + +const int SPELL_BRILLIANT_ENERGY_ARROW = 3394; +const int SPELL_HIDE_FROM_ANIMALS = 3395; +const int SPELL_LONGSTRIDER = 3396; +const int SPELL_SERPENT_ARROW = 3397; +const int SPELL_TREESHAPE = 3398; +const int SPELL_WATER_BREATHING = 3399; +const int SPELL_FOG_CLOUD = 1998; + +const int SPELL_ACIDIC_FIRE = 3713; +const int SPELL_ALCHEMISTS_FROST = 3714; +const int SPELL_ALCHEMICAL_SLEEPING_GAS = 3715; +const int SPELL_ALCHEMISTS_SPARK = 3716; +const int SPELL_BLEND_CREAM = 3717; +const int SPELL_BRITTLEBONE = 3718; +const int SPELL_CRACKLEPOWDER = 3719; +const int SPELL_EMBALMING_FIRE = 3720; +const int SPELL_FAREYE_OIL = 3721; +const int SPELL_FESTERING_BOMB = 3722; +const int SPELL_FLASH_PELLET = 3723; +const int SPELL_HEALEARS_BALM = 3724; +const int SPELL_KEENEAR_POWDER = 3725; +const int SPELL_LOCKSLIP_GREASE = 3726; +const int SPELL_NATURES_DRAUGHT = 3727; +const int SPELL_NERV = 3728; +const int SPELL_SCREAMING_FLASK = 3729; +const int SPELL_SOFTFOOT = 3730; +const int SPELL_WEEPING_STONE = 3731; +const int SPELL_BILE_DROPPINGS = 3732; +const int SPELL_SHEDDEN = 3733; +const int SPELL_SHEDDEN2 = 3734; +const int SPELL_SHEDDEN3 = 3735; +const int SPELL_SHEDDEN4 = 3736; +const int SPELL_SHEDDEN5 = 3737; + +//3.3 Tenjac feats +const int SPELL_DARK_SPEECH = 3837; +const int SPELL_DARK_SPEECH_DREAD = 3838; +const int SPELL_DARK_SPEECH_POWER = 3839; +const int SPELL_CHOSEN_EVIL_ATTACK = 3845; +const int SPELL_CHOSEN_EVIL_SKILL = 3846; +const int SPELL_CHOSEN_EVIL_SAVE = 3847; + +//Disguise self +const int SPELL_DISGUISE_SELF_LEARN = 2840; +const int SPELL_DISGUISE_SELF_OPTIONS = 2841; +const int SPELL_DISGUISE_SELF_QS1 = 2842; +const int SPELL_DISGUISE_SELF_QS2 = 2843; +const int SPELL_DISGUISE_SELF_QS3 = 2844; +const int SPELL_ALTER_SELF_LEARN = 2846; +const int SPELL_ALTER_SELF_OPTIONS = 2847; +const int SPELL_ALTER_SELF_QS1 = 2848; +const int SPELL_ALTER_SELF_QS2 = 2849; +const int SPELL_ALTER_SELF_QS3 = 2850; + +// Stuff with previously missing constants +const int SPELL_SCORCHING_RAY = 3056; + +// Passive feats +const int SPELL_FORCE_PERSONALITY = 1915; +const int SPELL_INSIGHTFUL_REFLEXES = 1916; + +// Spellfire +const int SPELL_SPELLFIRE_WIELDER = 3013; +const int SPELL_SPELLFIRE_INCREASE = 3014; +const int SPELL_SPELLFIRE_DECREASE = 3015; +const int SPELL_SPELLFIRE_QUICKSELECT = 3016; +const int SPELL_SPELLFIRE_ATTACK = 3017; +const int SPELL_SPELLFIRE_HEAL = 3018; +const int SPELL_SPELLFIRE_CHECK = 3019; +const int SPELL_SPELLFIRE_PLUS_ONE = 3020; +const int SPELL_SPELLFIRE_PLUS_FIVE = 3021; +const int SPELL_SPELLFIRE_PLUS_TEN = 3022; +const int SPELL_SPELLFIRE_PLUS_TWENTY = 3023; +const int SPELL_SPELLFIRE_MINUS_ONE = 3024; +const int SPELL_SPELLFIRE_MINUS_FIVE = 3025; +const int SPELL_SPELLFIRE_MINUS_TEN = 3026; +const int SPELL_SPELLFIRE_MINUS_TWENTY = 3027; +const int SPELL_SPELLFIRE_CHECK_EXP = 3028; +const int SPELL_SPELLFIRE_QUICKSELECT_CHANGE = 3029; +const int SPELL_SPELLFIRE_QUICKSELECT_1 = 3030; +const int SPELL_SPELLFIRE_QUICKSELECT_2 = 3031; +const int SPELL_SPELLFIRE_QUICKSELECT_3 = 3032; +const int SPELL_SPELLFIRE_DRAIN_CHARGED = 3033; +const int SPELL_SPELLFIRE_RAPID_BLAST = 3034; +const int SPELL_SPELLFIRE_RAPID_BLAST_TWO = 3035; +const int SPELL_SPELLFIRE_RAPID_BLAST_THREE = 3036; +const int SPELL_SPELLFIRE_DRAIN_PERMANENT = 3037; +const int SPELL_SPELLFIRE_CHARGE_ITEM = 3038; +const int SPELL_SPELLFIRE_CROWN = 3039; +const int SPELL_SPELLFIRE_MAELSTROM = 3040; +const int SPELL_SPELLFIRE_ABSORB = 3041; + +////////////////////////////////////////////////// +/* Turning Constants */ +////////////////////////////////////////////////// + +const int SPELL_TURN_UNDEAD = 308; +const int SPELL_TURN_REPTILE = 1726; +const int SPELL_TURN_OOZE = 1727; +const int SPELL_TURN_SPIDER = 1728; +const int SPELL_TURN_PLANT = 1729; +const int SPELL_TURN_AIR = 1730; +const int SPELL_TURN_EARTH = 1731; +const int SPELL_TURN_FIRE = 1732; +const int SPELL_TURN_WATER = 1733; +const int SPELL_TURN_BLIGHTSPAWNED = 1734; +const int SPELL_TURN_OUTSIDER = 2259; +const int SPELL_TURN_COLD = 3497; + +// Slayer of Domiel +const int SPELL_SLAYER_DOMIEL_DIVINE_GRACE = 2748; + +// Disciple of Asmodeus +const int SPELL_DISCIPLE_ASMODEUS_DREAD_MIGHT = 3059; +const int SPELL_DISCIPLE_ASMODEUS_DEVIL_CORN = 3060; +const int SPELL_DISCIPLE_ASMODEUS_DEVIL_GEL = 3061; +const int SPELL_DISCIPLE_ASMODEUS_DEVIL_GLAB = 3062; +const int SPELL_DISCIPLE_ASMODEUS_DEVIL_HAM = 3063; +const int SPELL_DISCIPLE_ASMODEUS_DEVIL_OSY = 3064; +const int SPELL_DOA_COMMAND_APPROACH = 3078; +const int SPELL_DOA_COMMAND_DROP = 3079; +const int SPELL_DOA_COMMAND_FALL = 3080; +const int SPELL_DOA_COMMAND_FLEE = 3081; +const int SPELL_DOA_COMMAND_HALT = 3082; +const int SPELL_DOA_GREATER_COMMAND_APPROACH = 3072; +const int SPELL_DOA_GREATER_COMMAND_DROP = 3073; +const int SPELL_DOA_GREATER_COMMAND_FALL = 3074; +const int SPELL_DOA_GREATER_COMMAND_FLEE = 3075; +const int SPELL_DOA_GREATER_COMMAND_HALT = 3076; + +// Soulknife +const int SPELL_MINDBLADE_LUCKY = 2429; + +// More Spell IDs (new spells) +const int SPELL_MASS_INFLICT_LIGHT = 3213; +const int SPELL_MASS_INFLICT_MODERATE = 3214; +const int SPELL_MASS_INFLICT_SERIOUS = 3215; +const int SPELL_MASS_INFLICT_CRITICAL = 3216; +const int SPELL_GREATER_HARM = 3217; +const int SPELL_MASS_HARM = 3218; + +// Virtuoso + const int SPELL_VIRTUOSO_SUSTAINING_SONG = 3046; + const int SPELL_VIRTUOSO_CALUMNY = 3047; + const int SPELL_VIRTUOSO_JARRING_SONG = 3048; + const int SPELL_VIRTUOSO_SHARP_NOTE = 3049; + const int SPELL_VIRTUOSO_MINDBENDING_MELODY = 3050; + const int SPELL_VIRTUOSO_GREATER_CALUMNY = 3051; + const int SPELL_VIRTUOSO_MAGICAL_MELODY = 3052; + const int SPELL_VIRTUOSO_SONG_OF_FURY = 3053; + const int SPELL_VIRTUOSO_REVEALING_MELODY = 3054; + + // PRC Extra Stunning Feat + const int SPELL_PRC_EXTRA_STUNNING = 2500; + + // Enlightened Fist + const int SPELL_EF_FIST_OF_ENERGY = 2501; + const int SPELL_EF_FIST_OF_ENERGY_FIRE = 2502; + const int SPELL_EF_FIST_OF_ENERGY_ELECTRICITY = 2503; + const int SPELL_EF_SPELL_SELECT = 2504; + const int SPELL_EF_SPELL_SELECT_CONVO = 2505; + const int SPELL_EF_SPELL_SELECT_QUICK1 = 2506; + const int SPELL_EF_SPELL_SELECT_QUICK2 = 2507; + const int SPELL_EF_SPELL_SELECT_QUICK3 = 2508; + const int SPELL_EF_SPELL_SELECT_QUICK4 = 2509; + const int SPELL_EF_ARCANE_FIST = 2510; + const int SPELL_EF_ARCANE_REJUVENATION = 2511; + +// Scrying Spells +const int SPELL_SCRY = 3219; +const int SPELL_GREATER_SCRYING = 3655; +const int SPELL_DISCERN_LOCATION = 3656; +const int SPELL_LOCATE_CREATURE = 3657; +const int SPELL_LOCATE_OBJECT = 3658; +const int SPELL_ARCANE_EYE = 3659; +const int SPELL_OBSCURE_OBJECT = 3660; +const int SPELL_SEQUESTER = 3661; +const int SPELL_END_SCRY = 1798; +const int SPELL_PNP_SCRY_FAMILIAR = 2699; + +// Knight Spells +const int SPELL_VIGILANT_DEFENDER = 1778; +const int SPELL_BULWARK_DEFENSE = 1777; +const int SPELL_FIGHT_CHALLENGE = 1770; + +//Draconic Feat Spells +const int SPELL_DRACONIC_GRACE_1 = 1862; +const int SPELL_DRACONIC_GRACE_2 = 1863; +const int SPELL_DRACONIC_GRACE_3 = 1864; +const int SPELL_DRACONIC_GRACE_4 = 1865; +const int SPELL_DRACONIC_GRACE_5 = 1866; +const int SPELL_DRACONIC_GRACE_6 = 1867; +const int SPELL_DRACONIC_GRACE_7 = 1868; +const int SPELL_DRACONIC_GRACE_8 = 1869; +const int SPELL_DRACONIC_GRACE_9 = 1870; +const int SPELL_DRACONIC_BREATH_1 = 1871; +const int SPELL_DRACONIC_BREATH_2 = 1872; +const int SPELL_DRACONIC_BREATH_3 = 1873; +const int SPELL_DRACONIC_BREATH_4 = 1874; +const int SPELL_DRACONIC_BREATH_5 = 1875; +const int SPELL_DRACONIC_BREATH_6 = 1876; +const int SPELL_DRACONIC_BREATH_7 = 1877; +const int SPELL_DRACONIC_BREATH_8 = 1878; +const int SPELL_DRACONIC_BREATH_9 = 1879; +const int SPELL_DRAGONFIRE_STRIKE_TOGGLE = 1890; + +//Swift Wing Abilities +const int SPELL_BREATH_OF_LIFE = 1880; +const int SPELL_SWIFT_WING_WINGS = 1881; + +//Talon of Tiamat Abilities +const int SPELL_TOT_FRIGHTFUL_PRESENCE = 1882; +const int SPELL_TOT_DOMINATE_DRAGON = 1883; +const int SPELL_TOT_COLD_CONE = 1885; +const int SPELL_TOT_ACID_LINE = 1886; +const int SPELL_TOT_ACID_CONE = 1887; +const int SPELL_TOT_ELEC_LINE = 1888; +const int SPELL_TOT_FIRE_CONE = 1889; + +//Hand of the Winged Masters Abilites +const int SPELL_TRUE_STEALTH = 1891; + +//Dragon Shaman Abilities +const int SPELL_DRAGON_SHAMAN_TOUCH = 3767; +const int SPELL_DRAGON_SHAMAN_TOUCH_MINOR = 3768; +const int SPELL_DRAGON_SHAMAN_TOUCH_RESTORE = 3769; +const int SPELL_DRAGON_SHAMAN_TOUCH_MAJOR = 3770; +const int SPELL_DRACONIC_AURA_PRESENCE = 3760; +const int SPELL_DRACONIC_AURA_VIGOR = 3761; +const int SPELL_DRACONIC_AURA_TOUGHNESS = 3762; +const int SPELL_DRACONIC_AURA_ENERGY_SHIELD = 3763; +const int SPELL_DRACONIC_AURA_RESISTANCE = 3764; +const int SPELL_DRACONIC_AURA_POWER = 3765; +const int SPELL_DRACONIC_AURA_SENSES = 3766; +const int SPELL_DRACONIC_AURA_INSIGHT = 3772; +const int SPELL_DRACONIC_AURA_RESOLVE = 3773; +const int SPELL_DRACONIC_AURA_STAMINA = 3774; +const int SPELL_DRACONIC_AURA_SWIFTNESS = 3775; +const int SPELL_DRACONIC_AURA_MAGICPOWER = 3813; +const int SPELL_DRACONIC_AURA_ENERGY = 3817; +const int SPELL_DRAGON_SHAMAN_BREATH = 3771; +const int SPELL_DRAGON_SHAMAN_BREATH_FIRE = 19282; +const int SPELL_DRAGON_SHAMAN_BREATH_COLD = 19283; +const int SPELL_DRAGON_SHAMAN_BREATH_ELEC = 19284; +const int SPELL_DRAGON_SHAMAN_BREATH_ACID = 19285; + + +//Other Draconic Auras +const int SPELL_MARSHAL_AURA_SENSES = 3787; +const int SPELL_MARSHAL_AURA_PRESENCE = 3781; +const int SPELL_MARSHAL_AURA_RESISTACID = 3782; +const int SPELL_MARSHAL_AURA_RESISTCOLD = 3783; +const int SPELL_MARSHAL_AURA_RESISTELEC = 3784; +const int SPELL_MARSHAL_AURA_RESISTFIRE = 3785; +const int SPELL_MARSHAL_AURA_TOUGHNESS = 3790; +const int SPELL_MARSHAL_AURA_INSIGHT = 3780; +const int SPELL_MARSHAL_AURA_RESOLVE = 3786; +const int SPELL_MARSHAL_AURA_STAMINA = 3788; +const int SPELL_MARSHAL_AURA_SWIFTNESS = 3789; +const int SPELL_MARSHAL_AURA_MAGICPOWER = 3814; +const int SPELL_MARSHAL_AURA_ENERGYACID = 3818; +const int SPELL_MARSHAL_AURA_ENERGYCOLD = 3819; +const int SPELL_MARSHAL_AURA_ENERGYELEC = 3820; +const int SPELL_MARSHAL_AURA_ENERGYFIRE = 3821; +const int SPELL_SECOND_AURA_PRESENCE = 3791; +const int SPELL_SECOND_AURA_VIGOR = 3792; +const int SPELL_SECOND_AURA_TOUGHNESS = 3793; +const int SPELL_SECOND_AURA_ENERGY_SHIELD = 3794; +const int SPELL_SECOND_AURA_RESISTANCE = 3795; +const int SPELL_SECOND_AURA_POWER = 3796; +const int SPELL_SECOND_AURA_SENSES = 3797; +const int SPELL_SECOND_AURA_INSIGHT = 3798; +const int SPELL_SECOND_AURA_RESOLVE = 3799; +const int SPELL_SECOND_AURA_STAMINA = 3800; +const int SPELL_SECOND_AURA_SWIFTNESS = 3801; +const int SPELL_SECOND_AURA_RESISTACID = 3802; +const int SPELL_SECOND_AURA_RESISTCOLD = 3803; +const int SPELL_SECOND_AURA_RESISTELEC = 3804; +const int SPELL_SECOND_AURA_RESISTFIRE = 3805; +const int SPELL_SECOND_AURA_MAGICPOWER = 3816; +const int SPELL_SECOND_AURA_ENERGYACID = 3827; +const int SPELL_SECOND_AURA_ENERGYCOLD = 3828; +const int SPELL_SECOND_AURA_ENERGYELEC = 3829; +const int SPELL_SECOND_AURA_ENERGYFIRE = 3830; +const int SPELL_SECOND_AURA_ENERGY = 3826; +const int SPELL_BONUS_AURA_RESISTACID = 3776; +const int SPELL_BONUS_AURA_RESISTCOLD = 3777; +const int SPELL_BONUS_AURA_RESISTELEC = 3778; +const int SPELL_BONUS_AURA_RESISTFIRE = 3779; +const int SPELL_BONUS_AURA_INSIGHT = 3806; +const int SPELL_BONUS_AURA_PRESENCE = 3807; +const int SPELL_BONUS_AURA_RESOLVE = 3808; +const int SPELL_BONUS_AURA_SENSES = 3809; +const int SPELL_BONUS_AURA_STAMINA = 3810; +const int SPELL_BONUS_AURA_SWIFTNESS = 3811; +const int SPELL_BONUS_AURA_TOUGHNESS = 3812; +const int SPELL_BONUS_AURA_MAGICPOWER = 3815; +const int SPELL_BONUS_AURA_ENERGYACID = 3822; +const int SPELL_BONUS_AURA_ENERGYCOLD = 3823; +const int SPELL_BONUS_AURA_ENERGYELEC = 3824; +const int SPELL_BONUS_AURA_ENERGYFIRE = 3825; + +// Dragon Magic Spells +const int SPELL_DRAGON_ALLY = 3388; + +//Metabreath +const int SPELL_HEIGHTEN_CONV = 2985; +const int SPELL_HEIGHTEN_OFF = 2986; +const int SPELL_HEIGHTEN_QS1 = 2987; +const int SPELL_HEIGHTEN_QS2 = 2988; +const int SPELL_CLINGING_CONV = 2973; +const int SPELL_CLINGING_OFF = 2974; +const int SPELL_CLINGING_QS1 = 2975; +const int SPELL_CLINGING_QS2 = 2976; +const int SPELL_CLINGING_QS3 = 2977; +const int SPELL_LINGERING_CONV = 2979; +const int SPELL_LINGERING_OFF = 2980; +const int SPELL_LINGERING_QS1 = 2981; +const int SPELL_LINGERING_QS2 = 2982; +const int SPELL_LINGERING_QS3 = 2983; + +//Breath Effects +const int BREATH_FIRE_CONE = 2102; +const int BREATH_FIRE_LINE = 2103; +const int BREATH_FROST_CONE = 2104; +const int BREATH_ELECTRIC_LINE = 2105; +const int BREATH_SICKENING_CONE = 2106; +const int BREATH_ACID_CONE = 2108; +const int BREATH_ACID_LINE = 2109; +const int BREATH_SHAPED_BREATH = 2110; +const int BREATH_SLOW_CONE = 2111; +const int BREATH_WEAKENING_CONE = 2112; +const int BREATH_CLOUD_BREATH = 2113; +const int BREATH_ENDURING_BREATH = 2114; +const int BREATH_SLEEP_CONE = 2115; +const int BREATH_THUNDER_CONE = 2116; +const int BREATH_BAHAMUT_LINE = 2117; +const int BREATH_FORCE_LINE = 2118; +const int BREATH_PARALYZE_CONE = 2119; +const int BREATH_FIVEFOLD_TIAMAT = 2120; + +// Pyrokineticist +const int SPELL_FIRE_LASH = 1892; +const int SPELL_BOLT_OF_FIRE = 1893; +const int SPELL_NIMBUS = 1894; +const int SPELL_NIMBUS_TOUCH_ATTACK = 1895; +const int SPELL_FIREWALK = 1896; +const int SPELL_HEAT_DEATH = 1897; +const int SPELL_PYRO_CONFLAGRATION = 1898; + +// Heroes of Horror +const int SPELL_SUMMON_UNDEAD_1 = 1784; +const int SPELL_SUMMON_UNDEAD_2 = 1785; +const int SPELL_SUMMON_UNDEAD_3 = 1786; +const int SPELL_SUMMON_UNDEAD_4 = 1787; +const int SPELL_SUMMON_UNDEAD_5 = 1788; + +// Archivist +const int SPELL_DK_TACTICS = 19004; +const int SPELL_DK_PUISSANCE = 19005; +const int SPELL_DK_FOE = 19006; +const int SPELL_DK_DREADSECRET = 19007; +const int SPELL_DK_FOREKNOWLEDGE = 19008; + +//Rage Mage +const int SPELL_SPELL_RAGE = 19001; +const int SPELL_WARRIOR_CRY = 19002; + +// Metamagic Feat Abilities +const int SPELL_EXTEND_SPELL_ABILITY = 3449; +const int SPELL_SILENT_SPELL_ABILITY = 3450; +const int SPELL_STILL_SPELL_ABILITY = 3451; +const int SPELL_EMPOWER_SPELL_ABILITY = 3452; +const int SPELL_MAXIMIZE_SPELL_ABILITY = 3453; +const int SPELL_QUICKEN_SPELL_ABILITY = 3454; + +// Flaming_Sword's Spells +const int SPELL_SHIELD_OTHER = 3848; + +//Soul Eater +const int SPELL_SE_ENERGY_DRAIN = 2788; + +//OnHit Cast Spell: Unique Property +const int SPELL_ACTIVATE_ITEM_ONHITSPELLCAST = 700; + +//Runscared Berserker - special version of Dimension Door spell +const int SPELL_RUNE_DIMENSION_DOOR = 2053; +const int SPELL_RUNE_DIMENSION_DOOR_DIRDIST_SELF = 2054; +const int SPELL_RUNE_DIMENSION_DOOR_DIRDIST_PARTY = 2055; + +const int SPELL_SUMMON_CREATURE_VII_AIR = 3189; +const int SPELL_SUMMON_CREATURE_VII_EARTH = 3190; +const int SPELL_SUMMON_CREATURE_VII_FIRE = 3191; +const int SPELL_SUMMON_CREATURE_VII_WATER = 3192; +const int SPELL_SUMMON_CREATURE_VIII_AIR = 3193; +const int SPELL_SUMMON_CREATURE_VIII_EARTH = 3194; +const int SPELL_SUMMON_CREATURE_VIII_FIRE = 3195; +const int SPELL_SUMMON_CREATURE_VIII_WATER = 3196; +const int SPELL_SUMMON_CREATURE_IX_AIR = 3197; +const int SPELL_SUMMON_CREATURE_IX_EARTH = 3198; +const int SPELL_SUMMON_CREATURE_IX_FIRE = 3199; +const int SPELL_SUMMON_CREATURE_IX_WATER = 3200; + +//:: Player's Handbook Spells +const int SPELL_SPIRITUAL_WEAPON = 17249; + +//:: Player's Handbook II Spells +const int SPELL_CHASING_PERFECTION = 2479; + +//:: Spell Compendium Spells +const int SPELL_SPIRIT_WORM = 17248; +const int SPELL_FORCE_MISSILES = 2480; + +//:: Masters of the Wild Spells +const int SPELL_REGEN_LIGHT_WOUNDS = 17243; +const int SPELL_REGEN_MODERATE_WOUNDS = 17244; +const int SPELL_REGEN_SERIOUS_WOUNDS = 17245; +const int SPELL_REGEN_CRITICAL_WOUNDS = 17246; +const int SPELL_SPEED_WIND = 17247; +const int SPELL_TORTISE_SHELL = 17250; + +//x +const int SPELL_TENSERS_FLOATING_DISK = 3849; +const int SPELL_WOLFSKIN = 3850; +const int SPELL_TRUE_CASTING = 3851; +const int SPELL_MASS_SPELL_RESISTANCE = 3852; +const int SPELL_MAGIC_STONE = 3853; +const int SPELL_CW_RAIN = 3855; +const int SPELL_CW_SNOW = 3856; +const int SPELL_CW_CLEAR = 3857; +const int SPELL_GREATER_PLANAR_ALLY = 1505; +const int SPELL_LESSER_PLANAR_ALLY = 1504; +const int SPELL_READ_MAGIC = 1500; +const int SPELL_SOBRIETY = 1501; +const int SPELL_DANCING_LIGHTS = 1499; +const int SPELL_CRAFTERS_BLESSING = 1502; +const int SPELL_CRAFTERS_CURSE = 1503; +const int SPELL_DAZE_MONSTER = 1510; +const int SPELL_ETERNAL_CHARM_MONSTER = 1506; +const int SPELL_ETERNAL_CHARM_PERSON = 1507; +const int SPELL_WEAPON_OF_IMPACT = 1508; +const int SPELL_SHILLELAGH = 1509; +const int SPELL_CURSE_WATER = 1511; +const int SPELL_MISLEAD = 1512; +const int SPELL_POWER_WORD_BLIND = 1513; +const int SPELL_GLYPH_OF_WARDING_ACID = 3858; +const int SPELL_GLYPH_OF_WARDING_COLD = 3859; +const int SPELL_GLYPH_OF_WARDING_ELECTRICITY = 3860; +const int SPELL_GLYPH_OF_WARDING_FIRE = 3861; +const int SPELL_GLYPH_OF_WARDING_SONIC = 3862; +const int SPELL_GREATER_GLYPH_OF_WARDING_ACID = 3864; +const int SPELL_GREATER_GLYPH_OF_WARDING_COLD = 3865; +const int SPELL_GREATER_GLYPH_OF_WARDING_ELECTRICITY= 3866; +const int SPELL_GREATER_GLYPH_OF_WARDING_FIRE = 3867; +const int SPELL_GREATER_GLYPH_OF_WARDING_SONIC = 3868; +const int SPELL_ELDER_GLYPH_OF_WARDING_ACID = 3870; +const int SPELL_ELDER_GLYPH_OF_WARDING_COLD = 3871; +const int SPELL_ELDER_GLYPH_OF_WARDING_ELECTRICITY = 3872; +const int SPELL_ELDER_GLYPH_OF_WARDING_FIRE = 3873; +const int SPELL_ELDER_GLYPH_OF_WARDING_SONIC = 3874; +const int SPELL_SPELL_GLYPH = 0; +const int SPELL_GREATER_SPELL_GLYPH = 0; +const int SPELL_ELDER_SPELL_GLYPH = 0; +const int SPELL_DEATH_KNELL = 1568; +const int SPELL_ELEMENTAL_STRIKE_ACID = 3876; +const int SPELL_ELEMENTAL_STRIKE_COLD = 3877; +const int SPELL_ELEMENTAL_STRIKE_ELECRICITY = 3878; +const int SPELL_ELEMENTAL_STRIKE_FIRE = 3879; +const int SPELL_ELEMENTAL_STRIKE_SONIC = 3880; +const int SPELL_WORD_OF_RECALL_SELF = 3882; +const int SPELL_WORD_OF_RECALL_PARTY = 3883; +const int SPELL_TRANSPORT_VIA_PLANTS_SELF = 3885; +const int SPELL_TRANSPORT_VIA_PLANTS_PARTY = 3886; +const int SPELL_PRC_DARKVISION = 0; +const int SPELL_MASS_INVISIBILITY = 0; +const int SPELL_PRC_UNHOLY_AURA = 0; +const int SPELL_OPEN_CLOSE = 0; +const int SPELL_PRC_ETHEREALNESS = 0; +const int SPELL_ETHEREAL_JAUNT = 0; +const int SPELL_GUIDANCE_SKILL = 0; +const int SPELL_GUIDANCE_SAVE = 0; +const int SPELL_GUIDANCE_ATTACK = 0; +const int SPELL_KNOW_DIRECTION = 0; +const int SPELL_WIZARD_SIGHT = 0; +const int SPELL_HOLY_SMITE = 0; +const int SPELL_UNHOLY_BLIGHT = 0; +const int SPELL_CHAOS_HAMMER = 0; +const int SPELL_ORDERS_WRATH = 0; +const int SPELL_CALM_ANIMALS = 0; +const int SPELL_HAND_OF_SORCERER_KINGS = 0; +const int SPELL_POWER_WORD_SILENCE = 0; +const int SPELL_ETERNAL_SLEEP = 0; +const int SPELL_GREATER_BESTOW_CURSE = 0; +const int SPELL_FAERIE_FIRE = 2924; +const int SPELL_MASS_AID = 2853; +const int SPELL_SYMBOL_OF_DEATH = 2481; +const int SPELL_SYMBOL_OF_FEAR = 2482; +const int SPELL_SYMBOL_OF_STUNING = 2483; +const int SPELL_SYMBOL_OF_INSANITY = 2484; +const int SPELL_SYMBOL_OF_PAIN = 2485; +const int SPELL_SYMBOL_OF_PERSUASION = 2486; +const int SPELL_SYMBOL_OF_SLEEP = 2487; +const int SPELL_SYMBOL_OF_WEAKNESS = 2488; +const int SPELL_VIGOR = 3459; +const int SPELL_LESSER_VIGOR = 3460; +const int SPELL_MASS_LESSER_VIGOR = 3461; +const int SPELL_VIGOROUS_CIRCLE = 3462; +const int SPELL_GREATER_RESISTANCE = 3457; +const int SPELL_SUPERIOR_RESISTANCE = 3458; +const int SPELL_TROGLODYTE_STENCH = 17255; + +// Combat Maneuver SpellIds +const int COMBAT_GRAPPLE = 3475; +const int COMBAT_BULL_RUSH = 3476; +const int COMBAT_OVERRUN = 3477; +const int COMBAT_TRIP = 3478; +const int COMBAT_CHARGE = 3479; +const int COMBAT_CHARGE_BULL_RUSH = 3480; +const int COMBAT_DISARM = 3491; +const int COMBAT_SHIELD_BASH = 2344; +const int COMBAT_SHIELD_CHARGE = 2345; +const int COMBAT_SHIELD_SLAM = 2346; + +// Battlesmith +const int BATTLESMITH_BOOST = 2233; + +// Spelldancer +const int SPELLDANCE_ENTHRALL = 2064; + +// PHB +const int SPELL_CHANGESTAFF = 1600; +const int SPELL_RAGE = 1601; +const int SPELL_TOUCH_FATIGUE = 3803; +const int SPELL_HALLOW = 3830; +const int SPELL_CONSECRATE = 2167; +const int SPELL_DESECRATE = 2342; + +// Factotum +const int SPELL_CUNNING_INSIGHT_ATTACK = 3895; +const int SPELL_CUNNING_INSIGHT_DAMAGE = 3896; +const int SPELL_CUNNING_INSIGHT_SAVES = 3897; +const int SPELL_CUNNING_DEFENSE = 3898; +const int SPELL_CUNNING_STRIKE = 3899; +const int SPELL_CUNNING_SURGE = 3900; +const int SPELL_CUNNING_BREACH = 3901; +const int SPELL_CUNNING_DODGE = 3902; +const int SPELL_CUNNING_KNOWLEDGE = 3903; +const int SPELL_OPPORTUNISTIC_PIETY_HEAL = 3904; +const int SPELL_OPPORTUNISTIC_PIETY_TURN = 3905; + +// Celebrant of Sharess +const int SPELL_SHARESS_FASCINATE = 3907; + +// Unapproachable East +const int SPELL_FORCE_ORB = 3912; + +// Spell Compendium +const int SPELL_BLASTOFFORCE = 2343; + +//Paladin Pack +const int SPELL_ALIGNED_AURA = 3922; +const int SPELL_ANGELSKIN = 3923; +const int SPELL_AXIOMATIC_STORM = 3924; +const int SPELL_BLADEBANE = 3925; +const int SPELL_BLESSED_AIM = 3926; +const int SPELL_BLESSING_OF_THE_RIGHTEOUS = 3927; +const int SPELL_CLEAR_MIND = 3928; +const int SPELL_CLOAK_OF_BRAVERY = 3929; +const int SPELL_DIAMONDSTEEL = 3930; +const int SPELL_LESSER_ASPECT_OF_THE_DIETY = 3931; +const int SPELL_LAWFUL_SWORD = 3932; +const int SPELL_LESSER_AURA_OF_COLD = 3933; +const int SPELL_AURA_OF_THE_SUN = 3934; +const int SPELL_RIGHTEOUS_FURY = 3935; +const int SPELL_SEEK_ETERNAL_REST = 3936; +const int SPELL_STRENGTH_OF_STONE = 3937; +const int SPELL_UNDEAD_BANE_WEAPON = 3938; +const int SPELL_LESSER_VISAGE_OF_THE_DIETY = 3939; +const int SPELL_ALIGNED_AURA_CHAOS = 3940; +const int SPELL_ALIGNED_AURA_EVIL = 3941; +const int SPELL_ALIGNED_AURA_GOOD = 3942; +const int SPELL_ALIGNED_AURA_LAW = 3943; +const int SPELL_AXIOMATIC_WATER = 3944; +const int SPELL_BLAZE_OF_LIGHT = 3945; +const int SPELL_CALL_MOUNT = 3946; +const int SPELL_CASTIGATE = 3947; +const int SPELL_CHECKMATES_LIGHT = 3948; +const int SPELL_CONDUIT_OF_LIGHT = 3949; +const int SPELL_CURSE_OF_THE_BRUTE = 3950; +const int SPELL_DENOUNCE = 3951; +const int SPELL_DEVASTATING_SMITE = 3952; +const int SPELL_ENERGIZED_SHIELD_FIRE = 3953; +const int SPELL_ENERGIZED_SHIELD_COLD = 3954; +const int SPELL_ENERGIZED_SHIELD = 3955; +const int SPELL_LESSER_ENERGIZED_SHIELD = 3956; +const int SPELL_ESTANAS_STEW = 3957; +const int SPELL_FAVOR_OF_THE_MARTYR = 3958; +const int SPELL_FORCEWARD = 3959; +const int SPELL_GLORY_OF_THE_MARTYR = 3960; +const int SPELL_HOLY_FIRE = 3961; +const int SPELL_HOLY_STORM = 3962; +const int SPELL_INVOKE_THE_CERULEAN_SIGN = 3963; +const int SPELL_IRRESISTIBLE_FORCE = 3964; +const int SPELL_LEGIONS_MAGIC_WEAPON = 3965; +const int SPELL_MAJOR_RESISTANCE = 3966; +const int SPELL_METEORIC_STRIKE = 3967; +const int SPELL_QUICK_MARCH = 3968; +const int SPELL_RESIST_ENERGY = 3969; +const int SPELL_REVENANCE = 3970; +const int SPELL_RHINOS_RUSH = 3971; +const int SPELL_RIGHTEOUS_AURA = 3972; +const int SPELL_ENERGIZED_SHIELD_ELEC = 3973; +const int SPELL_SHIELD_OF_WARDING = 3974; +const int SPELL_SMITE_HERETIC = 3975; +const int SPELL_SMITE_OF_SACRED_FIRE = 3976; +const int SPELL_SOLDIERS_OF_SANCTITY = 3977; +const int SPELL_SOUL_OF_LIGHT = 3978; +const int SPELL_SOUL_OF_ORDER = 3979; +const int SPELL_STABILIZE = 3980; +const int SPELL_STRATEGIC_CHARGE = 3981; +const int SPELL_ENERGIZED_SHIELD_ACID = 3982; +const int SPELL_TRUE_PRAYER_OF_THE_CHOSEN = 3983; +const int SPELL_ENERGIZED_SHIELD_SONIC = 3984; +const int SPELL_UNMOVABLE_OBJECT = 3985; +const int SPELL_VISION_OF_GLORY = 2633; +const int SPELL_ALIGNED_AURA_DISCHARGE = 2469; +const int SPELL_LESSER_ENERGIZED_SHIELD_FIRE = 2471; +const int SPELL_LESSER_ENERGIZED_SHIELD_COLD = 2472; +const int SPELL_LESSER_ENERGIZED_SHIELD_ELEC = 2473; +const int SPELL_LESSER_ENERGIZED_SHIELD_ACID = 2474; +const int SPELL_LESSER_ENERGIZED_SHIELD_SONIC = 2475; +const int SPELL_RESIST_ENERGY_FIRE = 2476; +const int SPELL_RESIST_ENERGY_COLD = 2477; +const int SPELL_RESIST_ENERGY_ELEC = 2478; +const int SPELL_RESIST_ENERGY_ACID = 2479; +const int SPELL_RESIST_ENERGY_SONIC = 2480; + + +//Bright Evening Star +const int SPELL_BES_ENTHRALLING_LIGHT = 16581; +const int SPELL_BES_BLINDING_FLASH = 16582; +const int SPELL_BES_SILVER_STARLIGHT = 16583; + +//Shadow Conjuration +const int SPELL_SHADOWMASTER_QS1 = 3745; +const int SPELL_SHADOWMASTER_QS2 = 3746; +const int SPELL_SHADOWMASTER_QS3 = 3747; +const int SPELL_SHADOWMASTER_QS4 = 3748; +const int SPELL_SHADOWMASTER_QS5 = 3749; +const int SPELL_PNP_SHADES = 19341; +const int SPELL_PNP_SHADES_QS1 = 19342; +const int SPELL_PNP_SHADES_QS2 = 19343; +const int SPELL_PNP_SHADES_QS3 = 19344; +const int SPELL_PNP_SHADES_QS4 = 19345; +const int SPELL_PNP_SHADES_QS5 = 19346; +const int SPELL_PNP_SHADOW_CONJURATION = 19347; +const int SPELL_PNP_SHADOW_CONJURATION_QS1 = 19348; +const int SPELL_PNP_SHADOW_CONJURATION_QS2 = 19349; +const int SPELL_PNP_SHADOW_CONJURATION_QS3 = 19350; +const int SPELL_PNP_SHADOW_CONJURATION_QS4 = 19351; +const int SPELL_PNP_SHADOW_CONJURATION_QS5 = 19352; +const int SPELL_PNP_GREATER_SHADOW_CONJURATION = 19353; +const int SPELL_PNP_GREATER_SHADOW_CONJURATION_QS1 = 19354; +const int SPELL_PNP_GREATER_SHADOW_CONJURATION_QS2 = 19355; +const int SPELL_PNP_GREATER_SHADOW_CONJURATION_QS3 = 19356; +const int SPELL_PNP_GREATER_SHADOW_CONJURATION_QS4 = 19357; +const int SPELL_PNP_GREATER_SHADOW_CONJURATION_QS5 = 19358; + +//Incarnum Melds +const int SPELL_MOI_NECROCARNUM_WEAPON = 18756; + +//Reserve Feats +const int SPELL_MYSTIC_BACKLASH = 19359; +const int SPELL_ACIDIC_SPLATTER = 19360; +const int SPELL_FIERY_BURST = 19361; +const int SPELL_STORM_BOLT = 19362; +const int SPELL_WINTERS_BLAST = 19363; +const int SPELL_CLAP_OF_THUNDER = 19364; +const int SPELL_SICKENING_GRASP = 19365; +const int SPELL_TOUCH_OF_HEALING = 19366; +const int SPELL_DIMENSIONAL_JAUNT = 19367; +const int SPELL_CLUTCH_OF_EARTH = 19368; +const int SPELL_BORNE_ALOFT = 19369; +const int SPELL_PROTECTIVE_WARD = 19370; +const int SPELL_SHADOW_VEIL = 19371; +const int SPELL_SUNLIGHT_EYES = 19372; +const int SPELL_TOUCH_OF_DISTRACTION = 19373; +const int SPELL_UMBRAL_SHROUD = 19374; +const int SPELL_CHARNEL_MIASMA = 19375; +const int SPELL_DROWNING_GLANCE = 19376; +const int SPELL_INVISIBLE_NEEDLE = 19377; +const int SPELL_SUMMON_ELEMENTAL_AIR = 19379; +const int SPELL_SUMMON_ELEMENTAL_EARTH = 19380; +const int SPELL_SUMMON_ELEMENTAL_FIRE = 19381; +const int SPELL_SUMMON_ELEMENTAL_WATER = 19382; +const int SPELL_DIMENSIONAL_REACH = 19383; +const int SPELL_HURRICANE_BREATH = 19384; +const int SPELL_MINOR_SHAPESHIFT_MIGHT = 19386; +const int SPELL_MINOR_SHAPESHIFT_MOBILITY = 19387; +const int SPELL_MINOR_SHAPESHIFT_SAVAGERY = 19388; +const int SPELL_MINOR_SHAPESHIFT_SPEED = 19389; +const int SPELL_MINOR_SHAPESHIFT_VIGOR = 19390; +const int SPELL_FACECHANGER_OPTIONS = 19393; +const int SPELL_FACECHANGER_QS1 = 19394; +const int SPELL_FACECHANGER_QS2 = 19395; +const int SPELL_FACECHANGER_QS3 = 19396; + +//:: Saint Template +const int SAINT_PROTECTIVE_AURA = 16386; \ No newline at end of file diff --git a/src/include/prc_spellf_inc.nss b/src/include/prc_spellf_inc.nss new file mode 100644 index 0000000..753680f --- /dev/null +++ b/src/include/prc_spellf_inc.nss @@ -0,0 +1,527 @@ +/* + + prc_spellf_inc.nss - Spellfire functions + + + + By: Flaming_Sword + Created: February 15, 2006 + Modified: February 15, 2006 + + Naming conventions: + nExpend <-> GetPersistantLocalInt(oPC, "SpellfireLevelExpend"); + nStored <-> GetPersistantLocalInt(oPC, "SpellfireLevelStored"); + +*/ + +//#include "inc_utility" +//#include "prc_alterations" +#include "prc_inc_sp_tch" +#include "prcsp_engine" +//int CheckSpellfire(object oCaster, object oTarget, int bFriendly = FALSE); + +//Spellfire Functions + +//Verifies levels to expend, returns new levels to expend +int SpellfireVerifyExpend(object oPC, int nExpend, int nStored) +{ + int nCON = GetAbilityScore(oPC, ABILITY_CONSTITUTION); + + //sanity check, at least 1, capped by CON and stored + if(nExpend < 1) + { + nExpend = 1; + SetPersistantLocalInt(oPC, "SpellfireLevelExpend", nExpend); + } + if(nExpend > nCON) nExpend = nCON; //in case CON has changed + if(nExpend > nStored) nExpend = nStored; //can't spend more than you've got + + return nExpend; +} + +//Adjusts the number of spellfire levels expended +//in the next use of spellfire +void AdjustSpellfire(object oPC, int nAdjust) +{ + int nExpend = GetPersistantLocalInt(oPC, "SpellfireLevelExpend"); + nExpend += nAdjust; + if(nExpend < 1) nExpend = 1; //at least 1 + SetPersistantLocalInt(oPC, "SpellfireLevelExpend", nExpend); + SendMessageToPC(oPC, "Spellfire levels to expend: " + IntToString(nExpend)); +} + +//Sets flag to change quickselects a la psionics +void SpellfireQuickselectChange(object oPC) +{ + SetLocalInt(oPC, "Spellfire_Quickselect_Change", 1); //set flag + SendMessageToPC(oPC, "Select a quickselect to store the current setting"); + DelayCommand(10.0, DeleteLocalInt(oPC, "Spellfire_Quickselect_Change")); //auto-delete +} + +//Sets or changes quickselects +void SpellfireQuickselect(object oPC, int nSpellID) +{ + int nExpend; + if(GetLocalInt(oPC, "Spellfire_Quickselect_Change")) + { + nExpend = GetPersistantLocalInt(oPC, "SpellfireLevelExpend"); + SetPersistantLocalInt(oPC, "Spellfire_Quickselect_" + IntToString(nSpellID), nExpend); + SendMessageToPC(oPC, "Quickselect " + IntToString(nSpellID - SPELL_SPELLFIRE_QUICKSELECT_1 + 1) + " set to " + IntToString(nExpend)); + DeleteLocalInt(oPC, "Spellfire_Quickselect_Change"); + } + else + { + nExpend = GetPersistantLocalInt(oPC, "Spellfire_Quickselect_" + IntToString(nSpellID)); + SetPersistantLocalInt(oPC, "SpellfireLevelExpend", nExpend); + SendMessageToPC(oPC, "Spellfire levels to expend: " + IntToString(nExpend)); + } +} + +//Expends spellfire and returns the new value +int ExpendSpellfire(object oPC) +{ + int nStored = GetPersistantLocalInt(oPC, "SpellfireLevelStored"); + if(!nStored) return 0; + int nExpend = GetPersistantLocalInt(oPC, "SpellfireLevelExpend"); + + nExpend = SpellfireVerifyExpend(oPC, nExpend, nStored); + + nStored -= nExpend; + SetPersistantLocalInt(oPC, "SpellfireLevelStored", nStored); + return nExpend; +} + +//Applies spellfire damage to target +void SpellfireDamage(object oCaster, object oTarget, int nRoll, int nDamage, int bMaelstrom = FALSE) +{ + if(bMaelstrom) + { + //nDamage += ApplySpellBetrayalStrikeDamage(oTarget, oCaster); + ApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDamage / 2, DAMAGE_TYPE_MAGICAL), oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage - (nDamage / 2), DAMAGE_TYPE_FIRE), oTarget); + } + else + ApplyTouchAttackDamage(oCaster, oTarget, nRoll, nDamage, DAMAGE_TYPE_MAGICAL, DAMAGE_TYPE_FIRE); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_SPELLF_FLAME), oTarget); +} + +//Spellfire attack roll -> damage +void SpellfireAttackRoll(object oCaster, object oTarget, int nExpend, int iMod = 0, int nDC = 20, int bBeam = FALSE, int bMaelstrom = FALSE) +{ + int nRoll, nDamage; + + //Account for Energy Draconic Aura + if (GetLocalInt(oCaster, "FireEnergyAura") > 0) + { + nDC += GetLocalInt(oCaster, "FireEnergyAura"); + } + + //Weapon Focus (spellfire) applies to spellfire only + if(GetHasFeat(FEAT_WEAPON_FOCUS_SPELLFIRE, oCaster)) iMod++; + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_SPELLFIRE, oCaster)) iMod += 2; + + if(oCaster == oTarget) //yeah, like you could miss with a touch attack on yourself + { + nRoll = 1; + nDamage = d6(nExpend); + } + else + { + nRoll = bMaelstrom ? 1 : GetAttackRoll(oTarget, oCaster, GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCaster), 0, 0, iMod, TRUE, 0.0, TRUE); + nDamage = PRCGetReflexAdjustedDamage(d6(nExpend), oTarget, nDC, SAVING_THROW_TYPE_NONE, oCaster); + } + if(bBeam) + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_SPELLFIRE, oCaster, BODY_NODE_HAND, !nRoll), oTarget, 1.2 /*+ (0.5 * IntToFloat(nAttacks))*/); + if(nRoll && nDamage) + SpellfireDamage(oCaster, oTarget, nRoll, nDamage, bMaelstrom); +} + +//Hits target with spellfire, implements rapid blast +void SpellfireAttack(object oCaster, object oTarget, int bBeam, int nAttacks = 1) +{ + if(!GetPersistantLocalInt(oCaster, "SpellfireLevelStored")) + { + SendMessageToPC(oCaster, "You have no more stored spellfire levels"); + return; + } + int nLevel = GetLevelByClass(CLASS_TYPE_SPELLFIRE, oCaster); + if(nAttacks > ((nLevel / 4) + 1)) + { + SendMessageToPC(oCaster, "You do not have enough Spellfire Channeler levels use this feat"); + return; + } + int iMod = 0; + int i; + //looping attacks + //SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_SPELLFIRE, oCaster, BODY_NODE_HAND, !nRoll), oTarget, 1.2 + (0.5 * IntToFloat(nAttacks))); + SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_SPELLFIRE_ATTACK)); + for(i = 0; i < nAttacks; i++) + DelayCommand(0.5 * IntToFloat(i), SpellfireAttackRoll(oCaster, oTarget, ExpendSpellfire(oCaster), iMod - (2 * i), 20, bBeam)); + //longer effect for more blasts + DelayCommand(0.1, SendMessageToPC(oCaster, "Spellfire levels stored: " + IntToString(GetPersistantLocalInt(oCaster, "SpellfireLevelStored")))); +} + +//Heals target +void SpellfireHeal(object oCaster, object oTarget) +{ + if(!GetPersistantLocalInt(oCaster, "SpellfireLevelStored")) + { + SendMessageToPC(oCaster, "You have no more stored spellfire levels"); + return; + } + int nExpend = ExpendSpellfire(oCaster); + int nHeal = 2 * nExpend; + if(GetHasFeat(FEAT_SPELLFIRE_IMPROVED_HEALING, oCaster)) + nHeal = d4(nExpend) + nExpend; + + SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(nHeal), oTarget); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_SPELLF_HEAL), oTarget); + DelayCommand(0.1, SendMessageToPC(oCaster, "Spellfire levels stored: " + IntToString(GetPersistantLocalInt(oCaster, "SpellfireLevelStored")))); +} + +//Maelstrom of fire +void SpellfireMaelstrom(object oCaster) +{ + if(!GetPersistantLocalInt(oCaster, "SpellfireLevelStored")) + { + SendMessageToPC(oCaster, "You have no more stored spellfire levels"); + return; + } + int nLevel = GetLevelByClass(CLASS_TYPE_SPELLFIRE, oCaster); + int nCHA = GetAbilityModifier(ABILITY_CHARISMA, oCaster); + int nDC = 10 + nLevel + nCHA; + + //Account for Energy Draconic Aura + if (GetLocalInt(oCaster, "FireEnergyAura") > 0) + { + nDC += GetLocalInt(oCaster, "FireEnergyAura"); + } + + //expend once, hit multiple targets + int nExpend = ExpendSpellfire(oCaster); + float fDelay; + location lTarget = GetLocation(oCaster); + effect eExplode = EffectVisualEffect(VFX_FNF_SPELLF_EXP); + //KABOOM! + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget); + object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + while(GetIsObjectValid(oTarget)) + { + if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster)) + { //ripped off fireball + SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_SPELLFIRE_MAELSTROM)); + //Get the distance between the explosion and the target to calculate delay + fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget)) / 20; + DelayCommand(fDelay, SpellfireAttackRoll(oCaster, oTarget, nExpend, 0, nDC, FALSE, TRUE)); + } + oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + } +} + +//Returns the caster level of an item with the cast spell property +int GetItemCasterLevelFromCastSpell(object oItem, itemproperty ip) +{ + int nCostTableValue = GetItemPropertyCostTableValue(ip); + int nSubtype = GetItemPropertySubType(ip); + int nCasterLevel = StringToInt(Get2DACache("iprp_spells", "CasterLvl", nSubtype)); + + itemproperty ip2 = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip2)) + { + if(GetItemPropertyType(ip2) == ITEM_PROPERTY_CAST_SPELL_CASTER_LEVEL && + //temporary caster level? i think not. + GetItemPropertyDurationType(ip2) == DURATION_TYPE_PERMANENT && + GetItemPropertySubType(ip2) == nSubtype) + { + int nNewCasterLevel = GetItemPropertyCostTableValue(ip2); //caster level property + if(nNewCasterLevel > nCasterLevel) nCasterLevel = nNewCasterLevel; + break; + } + ip2 = GetNextItemProperty(oItem); + } + return nCasterLevel; +} + +//Returns TRUE if an item is drained +int SpellfireDrainItem(object oPC, object oItem, int bCharged = TRUE, int bSingleUse = TRUE) +{ + if(GetIsObjectValid(oItem) && GetIsMagicItem(oItem)) + { //drain charged item + if(bCharged) //because big compound if statements are messy + { + int nBase = GetBaseItemType(oItem); + int nExpend = GetPersistantLocalInt(oPC, "SpellfireLevelExpend"); + if(nExpend < 1) + { + nExpend = 1; + SetPersistantLocalInt(oPC, "SpellfireLevelExpend", nExpend); + } + int nStored = GetPersistantLocalInt(oPC, "SpellfireLevelStored"); + int nCap = SpellfireMax(oPC) - nStored; + itemproperty ip; + int nSubType; + int nStack = GetItemStackSize(oItem); + int nCharges = GetItemCharges(oItem); + if(nCharges) //charged item + { + nExpend = PRCMin(PRCMin(nCharges, nCap), nExpend); //capped by charges and capacity + SetItemCharges(oItem, nCharges - nExpend); //will destroy item if all charges drained + AddSpellfireLevels(oPC, nExpend); //adds 1 level/charge + return TRUE; + } + ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip)) //single use item + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_CAST_SPELL && + GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT && + GetItemPropertyCostTableValue(ip) == IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE) + { + if(DEBUG) + { + DoDebug("SpellfireDrainItem(): nBase = " + IntToString(nBase), oPC); + DoDebug("SpellfireDrainItem(): nStack = " + IntToString(nStack), oPC); + DoDebug("SpellfireDrainItem(): nCap = " + IntToString(nCap), oPC); + DoDebug("SpellfireDrainItem(): nExpend = " + IntToString(nExpend), oPC); + } + nSubType = GetItemPropertySubType(ip); + //hardcoded filter + if(!( + (nSubType >= 329 && nSubType <= 344) || + (nSubType == 359) || + (nSubType >= 400 && nSubType <= 409) || + (nSubType >= 411 && nSubType <= 446) || + (nSubType >= 490 && nSubType <= 500) || + (nSubType == 513) || + (nSubType >= 521 && nSubType <= 537) || + (nSubType >= 750 && nSubType <= 851) || + (nSubType >= 1201) + )) + { + + if((nBase == BASE_ITEM_POTIONS) || + (nBase == BASE_ITEM_SCROLL) || + (nBase == BASE_ITEM_SPELLSCROLL) || + (nBase == BASE_ITEM_BLANK_POTION) || + (nBase == BASE_ITEM_BLANK_SCROLL) || + (nBase == BASE_ITEM_ENCHANTED_POTION) || + (nBase == BASE_ITEM_ENCHANTED_SCROLL) + ) + { + nExpend = PRCMin(PRCMin(nStack, nCap), nExpend); //capped by charges and capacity + if(nExpend == nStack) + DestroyObject(oItem); + else + SetItemStackSize(oItem, nStack - nExpend); //modifies stack size as scrolls/potions are used up + AddSpellfireLevels(oPC, nExpend); //adds 1 level/charge + return TRUE; + } + else + { + RemoveItemProperty(oItem, ip); //just removes the cast spell property + AddSpellfireLevels(oPC, 1); //adds 1 level + return TRUE; + } + } + } + ip = GetNextItemProperty(oItem); + } + } + else //drain permanent item + { + itemproperty ip = GetFirstItemProperty(oItem); + int nCostTableValue = GetItemPropertyCostTableValue(ip); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_CAST_SPELL && + GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT && + nCostTableValue >= IP_CONST_CASTSPELL_NUMUSES_0_CHARGES_PER_USE) + { + nCostTableValue = GetItemPropertyCostTableValue(ip); + int nSubtype = GetItemPropertySubType(ip); + int nLevel = GetItemCasterLevelFromCastSpell(oItem, ip) / 2; + RemoveItemProperty(oItem, ip); //just removes the cast spell property + AddSpellfireLevels(oPC, nLevel); //adds half the caster level + + DelayCommand(HoursToSeconds(24), //reapplying property + IPSafeAddItemProperty(oItem, + ItemPropertyCastSpell(nSubtype, nCostTableValue), + 0.0, + X2_IP_ADDPROP_POLICY_KEEP_EXISTING)); + return 1; + } + ip = GetNextItemProperty(oItem); + } + } + } + return 0; +} + +//Returns "'s" if sName has no s at the end, otherwise "'" +string Name_s(string sName = "") +{ + return (GetStringRight(sName, 1) == "s") ? "'" : "'s"; +} + +//Finds an item to drain, favours equipped items +//WARNING: This will loop through every item property on every item +// until the right conditions are met +void SpellfireDrain(object oPC, object oTarget, int bCharged = TRUE, int bExemptCreatureItems = TRUE, int bSingleUse = TRUE) +{ + object oItem; + int nObjectType = GetObjectType(oTarget); + string sMessage_oPC = ""; + string sMessage_oTarget = ""; + string sName_oPC = GetName(oPC); + string sName_oTarget = GetName(oTarget); + int bFound = 0; + + if(nObjectType == OBJECT_TYPE_ITEM) + { + oItem = oTarget; + int nBase = GetBaseItemType(oItem); + if(GetPRCSwitch(PRC_SPELLFIRE_DISALLOW_DRAIN_SCROLL_POTION) && + ((nBase == BASE_ITEM_POTIONS) || + (nBase == BASE_ITEM_SCROLL) || + (nBase == BASE_ITEM_BLANK_POTION) || + (nBase == BASE_ITEM_BLANK_SCROLL) + ) + ) + { + sMessage_oPC = "Draining charges from scrolls and potions is not allowed"; + } + else if(SpellfireDrainItem(oPC, oItem, bCharged)) + { + bFound = 1; + sMessage_oPC = "You drained " + sName_oTarget; + } + } + else if(nObjectType == OBJECT_TYPE_CREATURE) + { + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, 10, SAVING_THROW_TYPE_NONE, oPC)) + { + //creature items exempt + int nSlotMax = bExemptCreatureItems ? INVENTORY_SLOT_CWEAPON_L : NUM_INVENTORY_SLOTS; + //int nCharges = 0; + int i; + for(i = 0; i < nSlotMax; i++) + { + oItem = GetItemInSlot(i, oTarget); + if(SpellfireDrainItem(oPC, oItem, bCharged)) + { + bFound = 1; + break; + } + } + oItem = GetFirstItemInInventory(oTarget); + if(bFound != 1) + { + while(GetIsObjectValid(oItem)) + { + if(SpellfireDrainItem(oPC, oItem, bCharged)) + { + bFound = 1; + break; + } + } + } + //search function + if(bFound) + { + sMessage_oPC = "You drained " + GetName(oItem) + " from " + sName_oTarget; + //sMessage_oTarget = sName_oPC + " drained " + GetName(oItem) " from you"; + } + else + { + sMessage_oPC = "You tried to drain one of " + sName_oTarget + Name_s(sName_oTarget) + " items, but failed"; + sMessage_oTarget = sName_oPC + " tried to drain one of your items, but failed"; + } + } + else + { + sMessage_oPC = sName_oTarget + " resisted your attempt to drain one of items"; + sMessage_oTarget = "You resisted " + sName_oPC + Name_s(sName_oPC) + " attempt to drain one of your items"; + } + } + else if(DEBUG) + DoDebug("SpellfireDrain(): Invalid target object", oPC); + + if(bFound && !bCharged) + { + string s24 = " for 24 hours"; + sMessage_oPC += s24; + sMessage_oTarget += s24; + } + + if(GetIsPC(oPC) && sMessage_oPC != "") SendMessageToPC(oPC, sMessage_oPC); + if(GetIsPC(oTarget) && sMessage_oTarget != "") SendMessageToPC(oTarget, sMessage_oTarget); +} + +//Toggles a flag +void SpellfireToggleAbsorbFriendly(object oPC) +{ + if(GetLocalInt(oPC, "SpellfireAbsorbFriendly")) + { + DeleteLocalInt(oPC, "SpellfireAbsorbFriendly"); + FloatingTextStringOnCreature("*Absorb Friendly Spells Off*", oPC); + } + else + { + SetLocalInt(oPC, "SpellfireAbsorbFriendly", 1); + FloatingTextStringOnCreature("*Absorb Friendly Spells On*", oPC); + } +} + +//Charges items +void SpellfireChargeItem(object oPC, object oItem) +{ + int nObjectType = GetObjectType(oItem); + if(nObjectType == OBJECT_TYPE_ITEM) + { + int nExpend = ExpendSpellfire(oPC); + int nCharges = GetItemCharges(oItem); + int nNewCharges = nExpend + nCharges; + if(nNewCharges > 50) + { + AddSpellfireLevels(oPC, nNewCharges - 50); + nNewCharges = 50; + } + SetItemCharges(oItem, nCharges + nExpend); + //Assuming 50 is the maximum + //refunding excess charges + } + else if(DEBUG) + DoDebug("SpellfireChargeItem(): Invalid target object", oPC); +} + +//Applies Crown of Fire effects. Other effects are implemented +//through heartbeat and onhit scripts +void SpellfireCrown(object oPC) +{ + if(GetLocalInt(oPC, "SpellfireCrown")) + { + DeleteLocalInt(oPC, "SpellfireCrown"); + PRCRemoveEffectsFromSpell(oPC, SPELL_SPELLFIRE_CROWN); + FloatingTextStringOnCreature("*Crown of Fire Deactivated*", oPC); + } + else + { + if(GetPersistantLocalInt(oPC, "SpellfireLevelStored") < 10) + { + SendMessageToPC(oPC, "You do not have enough stored spellfire levels"); + return; + } + SetLocalInt(oPC, "SpellfireCrown", 1); + effect eDmgred = EffectDamageReduction(10, DAMAGE_POWER_PLUS_ONE); + effect eResist = EffectSpellResistanceIncrease(32); + effect eCrown = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_POSITIVE); + effect eFlame = EffectVisualEffect(VFX_DUR_ELEMENTAL_SHIELD); + effect eLight = EffectVisualEffect(VFX_DUR_LIGHT_WHITE_20); + effect eLink = EffectLinkEffects(eDmgred, eResist); + eLink = EffectLinkEffects(eLink, eCrown); + eLink = EffectLinkEffects(eLink, eFlame); + eLink = EffectLinkEffects(eLink, eLight); + SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oPC); + FloatingTextStringOnCreature("*Crown of Fire Activated*", oPC); + } +} + diff --git a/src/include/prc_spellhook.nss b/src/include/prc_spellhook.nss new file mode 100644 index 0000000..796bdcb --- /dev/null +++ b/src/include/prc_spellhook.nss @@ -0,0 +1,35 @@ +/** + * PRC spellhook code for non-AMS spells. The actual work is done in + * prc_prespell.nss + * @author fluffyamoeba + * @date 2008-4-24 + */ + + +// This function holds all functions that are supposed to run before the actual +// spellscript gets run. If this functions returns FALSE, the spell is aborted +// and the spellscript will not run +int X2PreSpellCastCode(); + +// this will execute the prespellcastcode, whose full functionality is incoded in X2PreSpellCastCode2(), +// as a script, to save loading time for spells scripts and reduce memory usage of NWN +// the prespellcode takes up roughly 250 kByte compiled code, meaning that every spell script that +// calls it directly as a function (e.g.: X2PreSpellCastCode2) will be between 100 kByte to 250 kByte +// larger, than a spell script calling the prespellcode via ExecuteScript (e.g. X2PreSpellCastCode) +// Although ExecuteScript is slightly slower than a direct function call, quite likely overall performance is +// increased, because for every new spell 100-250 kByte less code need to be loaded into memory +// and NWN has more free memory available to keep more spells scripts (and other crucial scripts) +//in RAM + +int X2PreSpellCastCode() +{ + object oCaster = OBJECT_SELF; + + // SetLocalInt(oCaster, "PSCC_Ret", 0); + ExecuteScript("prc_prespell", oCaster); + + int nReturn = GetLocalInt(oCaster, "PSCC_Ret"); + // DeleteLocalInt(oCaster, "PSCC_Ret"); + + return nReturn; +} diff --git a/src/include/prc_string_inc.nss b/src/include/prc_string_inc.nss new file mode 100644 index 0000000..f590b4c --- /dev/null +++ b/src/include/prc_string_inc.nss @@ -0,0 +1,74 @@ +//:://///////////////////////////////////////////// +//:: String Util +//:: prc_string_inc +//::////////////////////////////////////////////// +/* + A util class for providing useful string functions. +*/ +//::////////////////////////////////////////////// +//:: Created By: Rakiov +//:: Created On: 22.05.2005 +//::////////////////////////////////////////////// + +#include "inc_utility" + +// +// StringSplit +// Takes a string and splits it by " " into a json list of strings +// i.e. "this is a test" returns +// { +// "this", +// "is", +// "a", +// "test" +// } +// +// Parameters: +// string input the string input +// +// Returns: +// json the json list of words +// +json StringSplit(string input); + +json StringSplit(string input) +{ + json retValue = JsonArray(); + + string subString = ""; + //trim any whitespace characters first + string currString = PRCTrimString(input); + + // loop until we process the whole string + while(currString != "") + { + string currChar = GetStringLeft(currString, 1); + if (currChar != "" && currChar != " ") + { + // if the current character isn't nothing or whitespace, then add it + // to the current sub string. + subString += currChar; + } + else + { + // otherwise if the substring is not empty, then add it to the list + // of words to return + if(subString != "") + { + retValue = JsonArrayInsert(retValue, JsonString(subString)); + subString = ""; + } + } + + // pop and move to next character + currString = GetStringRight(currString, GetStringLength(currString)-1); + } + + // if there is any sub string left at the end of the loop, add it to the list + if(subString != "") + { + retValue = JsonArrayInsert(retValue, JsonString(subString)); + } + + return retValue; +} diff --git a/src/include/prc_template_con.nss b/src/include/prc_template_con.nss new file mode 100644 index 0000000..fc15544 --- /dev/null +++ b/src/include/prc_template_con.nss @@ -0,0 +1,468 @@ +//Template and Weapons of Legacy constants + +/*////////////////////////////////////////////////// +//////////////// Templates ///////////////////////// +//////////////////////////////////////////////////*/ + +//:: Outsiders +const int TEMPLATE_FIENDISH = 0; +const int TEMPLATE_CELESTIAL = 1; +const int TEMPLATE_HALF_FIEND = 2; +const int TEMPLATE_HALF_CELESTIAL = 3; + +//:: Dragons +const int TEMPLATE_HALF_DRAGON = 4; + +//:: Undead +const int TEMPLATE_CURST = 26; +const int TEMPLATE_GRAVETOUCHED_GHOUL = 29; +const int TEMPLATE_CRYPTSPAWN = 30; +const int TEMPLATE_ARCHLICH = 99; +const int TEMPLATE_LICH = 101; +const int TEMPLATE_DEMILICH = 102; +const int TEMPLATE_NECROPOLITAN = 105; +const int TEMPLATE_ALHOON = 106; + + +//:: General +const int TEMPLATE_DARK = 25; +const int TEMPLATE_MINERAL_WARRIOR = 27; +const int TEMPLATE_BLOODED_ONE = 28; +const int TEMPLATE_HALF_TROLL = 31; +const int TEMPLATE_SAINT = 32; + +//:: Half-dragon sub-templates +const int TEMPLATE_HDRAGON_CHROMATIC_BLACK = 1; +const int TEMPLATE_HDRAGON_CHROMATIC_BLUE = 2; +const int TEMPLATE_HDRAGON_CHROMATIC_GREEN = 3; +const int TEMPLATE_HDRAGON_CHROMATIC_RED = 4; +const int TEMPLATE_HDRAGON_CHROMATIC_WHITE = 5; +const int TEMPLATE_HDRAGON_GEM_AMETHYST = 6; +const int TEMPLATE_HDRAGON_GEM_CRYSTAL = 7; +const int TEMPLATE_HDRAGON_GEM_EMERALD = 8; +const int TEMPLATE_HDRAGON_GEM_SAPPHIRE = 9; +const int TEMPLATE_HDRAGON_GEM_TOPAZ = 10; +const int TEMPLATE_HDRAGON_LUNG_CHIANGLUNG = 11; +const int TEMPLATE_HDRAGON_LUNG_LILUNG = 12; +const int TEMPLATE_HDRAGON_LUNG_LUNGWANG = 13; +const int TEMPLATE_HDRAGON_LUNG_PANLUNG = 14; +const int TEMPLATE_HDRAGON_LUNG_SHENLUNG = 15; +const int TEMPLATE_HDRAGON_LUNG_TIENLUNG = 16; +const int TEMPLATE_HDRAGON_LUNG_TUNMILUNG = 17; +const int TEMPLATE_HDRAGON_METALLIC_BRASS = 18; +const int TEMPLATE_HDRAGON_METALLIC_BRONZE = 19; +const int TEMPLATE_HDRAGON_METALLIC_COPPER = 20; +const int TEMPLATE_HDRAGON_METALLIC_GOLD = 21; +const int TEMPLATE_HDRAGON_METALLIC_SILVER = 22; +const int TEMPLATE_HDRAGON_OBSCURE_BATTLE = 23; +const int TEMPLATE_HDRAGON_OBSCURE_BROWN = 24; +const int TEMPLATE_HDRAGON_OBSCURE_CHAOS = 25; +const int TEMPLATE_HDRAGON_OBSCURE_DEEP = 26; +const int TEMPLATE_HDRAGON_OBSCURE_ETHEREAL = 27; +const int TEMPLATE_HDRAGON_OBSCURE_FANG = 28; +const int TEMPLATE_HDRAGON_OBSCURE_HOWLING = 29; +const int TEMPLATE_HDRAGON_OBSCURE_OCEANUS = 30; +const int TEMPLATE_HDRAGON_OBSCURE_PYROCLASTIC = 31; +const int TEMPLATE_HDRAGON_OBSCURE_RADIANT = 32; +const int TEMPLATE_HDRAGON_OBSCURE_RUST = 33; +const int TEMPLATE_HDRAGON_OBSCURE_SHADOW = 34; +const int TEMPLATE_HDRAGON_OBSCURE_SONG = 35; +const int TEMPLATE_HDRAGON_OBSCURE_STYX = 36; +const int TEMPLATE_HDRAGON_OBSCURE_TARTERIAN = 37; + +/*////////////////////////////////////////////////// +//////////////// Weapons of Legacy////////////////// +//////////////////////////////////////////////////*/ + +const int WOL_BOW_BLACK_ARCHER = 2; +const int WOL_CAPUT_MORTUUM = 6; +const int WOL_STEADFAST = 7; +const int WOL_FLAY = 8; +const int WOL_CRIMSON_RUINATION = 9; +const int WOL_DEVIOUS = 10; +const int WOL_SIMPLE_BOW = 11; +const int WOL_SACARAB_ARADROS = 12; + +/*////////////////////////////////////////////////// +//////////////// Weapons of Legacy SLAs //////////// +//////////////////////////////////////////////////*/ + +const int WOL_BBB_EYES_SHADOW = 16390; +const int WOL_BBB_LONGSTRIDER = 16391; +const int WOL_BBB_SOLACE = 16392; +const int WOL_BBB_FRIEND_SHADOWS = 16393; +const int WOL_BBB_DENY_DEMONWEB = 16394; +const int WOL_BBB_DROWSEEKER = 16395; +const int WOL_BBB_SHOCKING_SHOT = 16396; +const int WOL_BBB_PIERCE_BLACK_HEART = 16397; +const int WOL_STEADFAST_VIGOR = 16398; +const int WOL_STEADFAST_SLOW = 16399; +const int WOL_FLAY_SNAKE_STING = 16400; +const int WOL_FLAY_WHIP_WRAP = 16401; +const int WOL_CR_FROZEN_FATE = 16402; +const int WOL_DEVIOUS_DETECT_THOUGHTS = 16403; +const int WOL_SIMPLEBOW_TRUE_SEEING = 16404; +const int WOL_SIMPLEBOW_PRESCIENCE = 16405; +const int WOL_SIMPLEBOW_FOCUS = 16406; +const int WOL_ARADROS_EXTEND = 16407; +const int WOL_ARADROS_EXTEND_ACID = 16409; +const int WOL_ARADROS_EXTEND_COLD = 16410; +const int WOL_ARADROS_EXTEND_ELEC = 16411; +const int WOL_ARADROS_EXTEND_FIRE = 16412; +const int WOL_ARADROS_EXTEND_SONIC = 16413; +const int WOL_GUURGAL_FORCE = 16414; +const int WOL_GUURGAL_RAGE = 16415; +const int WOL_DIVSPARK_FEAR = 16416; +const int WOL_DIVSPARK_LIGHT = 16417; +const int WOL_WARGIRDS_HASTE = 16418; +const int WOL_WARGIRDS_STONESKIN = 16419; +const int WOL_DW_FIERY_SLASH = 16420; +const int WOL_DW_HOWLING_WIND = 16421; +const int WOL_DW_FAN_FLAMES = 16422; +const int WOL_DW_DUST_DESERT = 16423; +const int WOL_MS_VIRTUE_DENIED = 16424; +const int WOL_MS_KISS_DEATH = 16425; +const int WOL_MS_BATTLE_SHRIEK = 16426; +const int WOL_MS_RUINOUS_HOWL = 16427; +const int WOL_NS_FISHES = 16428; +const int WOL_NS_KRAKEN = 16429; +const int WOL_NS_SCION = 16430; +const int WOL_NS_SEA_CHILDREN = 16431; +const int WOL_UR_SWIFT = 16432; +const int WOL_UR_HEALING = 16433; +const int WOL_UR_SAVAGE = 16434; +const int WOL_FC_MARK_TARGET = 16435; +const int WOL_FC_MORALE = 16436; +const int WOL_FC_FIREBALL = 16437; +const int WOL_SB_STALK = 16438; +const int WOL_SB_ETHEREAL = 16439; +const int WOL_EXORD_GUIDANCE = 16440; +const int WOL_EXORD_CURE = 16441; +const int WOL_EXORD_DISMISSAL = 16442; +const int WOL_CALAD_IMPRISON = 16443; +const int WOL_WITCHES_DETECT = 16444; +const int WOL_WITCHES_SPELLBREAKER = 16445; +const int WOL_WITCHES_AMF = 16446; +const int WOL_WITCHES_DISPEL = 16447; +const int WOL_WITCHES_MANTLE = 16448; +const int WOL_DIREWIND_STUN = 16449; +const int WOL_DIREWIND_GUST = 16450; +const int WOL_DIREWIND_WALL = 16451; +const int WOL_TREEBRO_SHILL = 16452; +const int WOL_TREEBRO_EMPATHY = 16453; +const int WOL_TREEBRO_ENTANGLE = 16454; +const int WOL_TREEBRO_INSIGHT = 16455; +const int WOL_TREEBRO_CHANGESTAFF = 16456; +const int WOL_FULLMOON_RAGE = 16457; +const int WOL_FULLMOON_INVIS = 16458; +const int WOL_FIEND_DARKVIS = 16459; +const int WOL_FIEND_DETECT = 16460; +const int WOL_SCALES_DETECT = 16461; +const int WOL_SCALES_CURE = 16462; +const int WOL_SCALES_KNELL = 16463; +const int WOL_SCALES_ENERV = 16464; +const int WOL_SCALES_HEAL = 16465; +const int WOL_SCALES_FINGER = 16466; +const int WOL_SHISHIO_CHARM = 16467; +const int WOL_SHISHIO_SUMMON = 16468; +const int WOL_SHISHIO_POLY = 16469; +const int WOL_SHISHIO_SHOUT = 16470; +const int WOL_DYMOND_BOLTS = 16471; +const int WOL_DYMOND_DEFLECT = 16472; +const int WOL_DYMOND_DAYLIGHT = 16473; +const int WOL_DYMOND_CURE = 16474; +const int WOL_DYMOND_BANISH = 16475; +const int WOL_SUNSWORD_DAY = 16476; +const int WOL_SUNSWORD_WARD = 16477; +const int WOL_SUNSWORD_BANISH = 16478; +const int WOL_SUNSWORD_UNDEATH = 16479; +const int WOL_BLACKRAZOR_DETECT = 16480; +const int WOL_BLACKRAZOR_KNELL = 16481; +const int WOL_BLACKRAZOR_HASTE = 16482; +const int WOL_RAMETHENE_DETECT = 16483; +const int WOL_RAMETHENE_SMITE = 16484; +const int WOL_RAMETHENE_RESIST = 16485; +const int WOL_RAMETHENE_CLOUD = 16486; +const int WOL_RAMETHENE_MAX = 16487; +const int WOL_RAMETHENE_WILT = 16488; +const int WOL_WYRMBANE_FEAR = 16489; +const int WOL_WYRMBANE_BOLT = 16490; +const int WOL_WYRMBANE_EMP = 16491; +const int WOL_WYRMBANE_BREATH = 16492; +const int WOL_WHELM_DETECT_GIANT = 16493; +const int WOL_WHELM_LOCATE_OBJECT = 16494; +const int WOL_WHELM_DETECT_GOBLIN = 16495; +const int WOL_RAVENKIND_DANCING_LIGHT = 16496; +const int WOL_RAVENKIND_LIGHT = 16497; +const int WOL_RAVENKIND_FLARE = 16498; +const int WOL_RAVENKIND_DETECT_UNDEAD = 16499; +const int WOL_RAVENKIND_HALT = 16500; +const int WOL_RAVENKIND_CURE = 16501; +const int WOL_RAVENKIND_DAYLIGHT = 16502; +const int WOL_RAVENKIND_WARD = 16503; +const int WOL_RAVENKIND_BREAK = 16504; +const int WOL_RAVENKIND_HEAL = 16505; +const int WOL_LAST_CITADEL_ATTACK = 16506; +const int WOL_LAST_CITADEL_PRAYER = 16507; +const int WOL_LAST_CITADEL_FEAR = 16508; +const int WOL_LAST_CITADEL_CURE = 16509; +const int WOL_LAST_CITADEL_BLADE = 16510; +const int WOL_LAST_CITADEL_HEAL = 16511; +const int WOL_UNFETTERED_MINOTAUR = 16512; +const int WOL_UNFETTERED_ENLARGE = 16513; +const int WOL_UNFETTERED_ETHEREAL = 16514; +const int WOL_UNFETTERED_STONESKIN = 16515; +const int WOL_UNFETTERED_SWORD = 16516; +const int WOL_HILLCRUSHER_EARTHEN_MIGHT = 16517; +const int WOL_HILLCRUSHER_SOFTEN_EARTH = 16518; +const int WOL_HILLCRUSHER_FANGS_OF_STONE = 16519; +const int WOL_HILLCRUSHER_RAISE_THE_EARTH = 16520; +const int WOL_HILLCRUSHER_SHAKE_THE_EARTH = 16521; +const int WOL_DWTOB_BURNING_BLADE = 16522; +const int WOL_DWTOB_FAN_THE_FLAMES = 16523; +const int WOL_DWTOB_WYRMS_FLAME = 16524; +const int WOL_FAITHFUL_STRIKE = 16525; +const int WOL_FAITHFUL_DETECT = 16526; +const int WOL_FAITHFUL_LR = 16527; +const int WOL_FAITHFUL_RESTORE = 16528; +const int WOL_FAITHFUL_RESILIENCY = 16529; +const int WOL_FAITHFUL_IMMORTAL = 16530; +const int WOL_SUPERNAL_NIGHTMARE_BLADE = 16531; +const int WOL_SUPERNAL_PSYCHIC_POISE = 16532; +const int WOL_SUPERNAL_HASTE = 16533; +const int WOL_SUPERNAL_FREEDOM = 16534; +const int WOL_SUPERNAL_TIMESTOP = 16535; +const int WOL_KAMATE_STEEL_WIND = 16536; +const int WOL_KAMATE_SHOCK = 16537; +const int WOL_KAMATE_LIGHTNING = 16538; +const int WOL_KAMATE_CHAIN = 16539; +const int WOL_KAMATE_TRUE_STRIKE = 16540; +const int WOL_EVENTIDE_COMET = 16541; +const int WOL_EVENTIDE_BAFFLE = 16542; +const int WOL_EVENTIDE_INVIS = 16543; +const int WOL_UMBRAL_INVIS = 16544; +const int WOL_UMBRAL_INCORP = 16545; +const int WOL_UMBRAL_SPEED_WEAPON = 16546; +const int WOL_TIGER_FANG_CHARGE = 16547; +const int WOL_TIGER_FANG_BATTLE = 16548; +const int WOL_TIGER_FANG_HASTE = 16549; +const int WOL_BULLY_SILLY = 16550; +const int WOL_BULLY_STONE = 16551; +const int WOL_BULLY_CHAIN = 16552; +const int WOL_BULLY_GIANT = 16553; +const int WOL_LORESTEALER_READ = 16554; +const int WOL_LORESTEALER_DETECT = 16555; +const int WOL_LORESTEALER_AXE = 16556; +const int WOL_DURINDANA_DAYLIGHT = 16557; +const int WOL_DURINDANA_WARD = 16558; +const int WOL_DURINDANA_HALLOW = 16559; +const int WOL_DURINDANA_DAZZLE = 16560; +const int WOL_THAAS_DETECT = 16561; +const int WOL_THAAS_OBSTRUCT = 16562; +const int WOL_THAAS_BANISH = 16563; +const int WOL_THAAS_TELEPORT = 16564; +const int WOL_QUICKSPUR_SHIELD = 16565; +const int WOL_QUICKSPUR_RESIST = 16566; +const int WOL_QUICKSPUR_STEED = 16567; +const int WOL_QUICKSPUR_BLUR = 16568; +const int WOL_QUICKSPUR_STONE = 16569; +const int WOL_BES_FIRE_OF_THE_HEART = 16570; +const int WOL_BES_ENTHRALLING_LIGHT = 16571; +const int WOL_BES_COLOR_SPRAY = 16572; +const int WOL_BES_BLINDING_FLASH = 16573; +const int WOL_BES_SHOOTING_STARS = 16574; +const int WOL_BES_GLITTERING_MOTES = 16575; +const int WOL_BES_TWINKLE = 16576; +const int WOL_BES_SILVER_STARLIGHT = 16577; +const int WOL_BES_STARLIGHT_DISPELLING = 16578; +const int WOL_BES_TALES_IN_THE_SKY = 16579; +const int WOL_BES_CALL_DOWN_A_STAR = 16580; + +/*////////////////////////////////////////////////// +//////////////// Weapons of Legacy iprps /////////// +//////////////////////////////////////////////////*/ + +const int IP_CONST_FEAT_EYES_SHADOW = 1000; +const int IP_CONST_FEAT_LONGSTRIDER = 1001; +const int IP_CONST_FEAT_SOLACE = 1002; +const int IP_CONST_FEAT_FRIEND_SHADOWS = 1003; +const int IP_CONST_FEAT_DENY_DEMONWEB = 1004; +const int IP_CONST_FEAT_DROWSEEKER = 1005; +const int IP_CONST_FEAT_SHOCKING_SHOT = 1006; +const int IP_CONST_FEAT_PIERCE_BLACK_HEART = 1007; +const int IP_CONST_FEAT_STEADFAST_VIGOR = 1008; +const int IP_CONST_FEAT_STEADFAST_SLOW = 1009; +const int IP_CONST_FEAT_FLAY_SNAKE_STING = 1010; +const int IP_CONST_FEAT_FLAY_WHIP_WRAP = 1011; +const int IP_CONST_FEAT_CR_FROZEN_FATE = 1012; +const int IP_CONST_FEAT_DEVIOUS_THOUGHTS = 1013; +const int IP_CONST_FEAT_SIMPLEBOW_TRUE_SEEING = 1014; +const int IP_CONST_FEAT_SIMPLEBOW_PRESCIENCE = 1015; +const int IP_CONST_FEAT_SIMPLEBOW_FOCUS = 1016; +const int IP_CONST_FEAT_ARADROS_EXTEND = 1017; +const int IP_CONST_FEAT_ARADROS_SURVIVE = 1018; +const int IP_CONST_FEAT_GUURGAL_FORCE = 1019; +const int IP_CONST_FEAT_GUURGAL_RAGE = 1020; +const int IP_CONST_FEAT_DIVSPARK_FEAR = 1021; +const int IP_CONST_FEAT_DIVSPARK_LIGHT = 1022; +const int IP_CONST_FEAT_WARGIRDS_HASTE = 1023; +const int IP_CONST_FEAT_WARGIRDS_STONESKIN = 1024; +const int IP_CONST_FEAT_DW_FIERY_SLASH = 1025; +const int IP_CONST_FEAT_DW_HOWLING_WIND = 1026; +const int IP_CONST_FEAT_DW_FAN_FLAMES = 1027; +const int IP_CONST_FEAT_DW_DUST_DESERT = 1028; +const int IP_CONST_FEAT_MS_VIRTUE_DENIED = 1029; +const int IP_CONST_FEAT_MS_KISS_DEATH = 1030; +const int IP_CONST_FEAT_MS_BATTLE_SHRIEK = 1031; +const int IP_CONST_FEAT_MS_RUINOUS_HOWL = 1032; +const int IP_CONST_FEAT_NS_FISHES = 1033; +const int IP_CONST_FEAT_NS_KRAKEN = 1034; +const int IP_CONST_FEAT_NS_SCION = 1035; +const int IP_CONST_FEAT_NS_SEA_CHILDREN = 1036; +const int IP_CONST_FEAT_UR_SWIFT = 1037; +const int IP_CONST_FEAT_UR_HEALING = 1038; +const int IP_CONST_FEAT_UR_SAVAGE = 1039; +const int IP_CONST_FEAT_FC_MARK_TARGET = 1040; +const int IP_CONST_FEAT_FC_MORALE = 1041; +const int IP_CONST_FEAT_FC_FIREBALL = 1042; +const int IP_CONST_FEAT_SB_STALK = 1043; +const int IP_CONST_FEAT_SB_ETHEREAL = 1044; +const int IP_CONST_FEAT_EXORD_GUIDANCE = 1045; +const int IP_CONST_FEAT_EXORD_CURE = 1046; +const int IP_CONST_FEAT_EXORD_DISMISSAL = 1047; +const int IP_CONST_FEAT_CALAD_IMPRISON = 1048; +const int IP_CONST_FEAT_WITCHES_DETECT = 1049; +const int IP_CONST_FEAT_WITCHES_SPELLBREAKER = 1050; +const int IP_CONST_FEAT_WITCHES_AMF = 1051; +const int IP_CONST_FEAT_WITCHES_DISPEL = 1052; +const int IP_CONST_FEAT_WITCHES_MANTLE = 1053; +const int IP_CONST_FEAT_DIREWIND_STUN = 1054; +const int IP_CONST_FEAT_DIREWIND_GUST = 1055; +const int IP_CONST_FEAT_DIREWIND_WALL = 1056; +const int IP_CONST_FEAT_TREEBRO_SHILL = 1057; +const int IP_CONST_FEAT_TREEBRO_EMPATHY = 1058; +const int IP_CONST_FEAT_TREEBRO_ENTANGLE = 1059; +const int IP_CONST_FEAT_TREEBRO_INSIGHT = 1060; +const int IP_CONST_FEAT_TREEBRO_CHANGESTAFF = 1061; +const int IP_CONST_FEAT_FULLMOON_RAGE = 1062; +const int IP_CONST_FEAT_FULLMOON_INVIS = 1063; +const int IP_CONST_FEAT_FIEND_DARKVIS = 1064; +const int IP_CONST_FEAT_FIEND_DETECT = 1065; +const int IP_CONST_FEAT_SCALES_DETECT = 1066; +const int IP_CONST_FEAT_SCALES_CURE = 1067; +const int IP_CONST_FEAT_SCALES_KNELL = 1068; +const int IP_CONST_FEAT_SCALES_ENERV = 1069; +const int IP_CONST_FEAT_SCALES_HEAL = 1070; +const int IP_CONST_FEAT_SCALES_FINGER = 1071; +const int IP_CONST_FEAT_SHISHIO_CHARM = 1072; +const int IP_CONST_FEAT_SHISHIO_SUMMON = 1073; +const int IP_CONST_FEAT_SHISHIO_POLY = 1074; +const int IP_CONST_FEAT_SHISHIO_SHOUT = 1075; +const int IP_CONST_FEAT_DYMOND_BOLTS = 1076; +const int IP_CONST_FEAT_DYMOND_DEFLECT = 1077; +const int IP_CONST_FEAT_DYMOND_DAYLIGHT = 1078; +const int IP_CONST_FEAT_DYMOND_CURE = 1079; +const int IP_CONST_FEAT_DYMOND_BANISH = 1080; +const int IP_CONST_FEAT_SUNSWORD_DAY = 1081; +const int IP_CONST_FEAT_SUNSWORD_WARD = 1082; +const int IP_CONST_FEAT_SUNSWORD_BANISH = 1083; +const int IP_CONST_FEAT_SUNSWORD_UNDEATH = 1084; +const int IP_CONST_FEAT_BLACKRAZOR_DETECT = 1085; +const int IP_CONST_FEAT_BLACKRAZOR_KNELL = 1086; +const int IP_CONST_FEAT_BLACKRAZOR_HASTE = 1087; +const int IP_CONST_FEAT_RAMETHENE_DETECT = 1088; +const int IP_CONST_FEAT_RAMETHENE_SMITE = 1089; +const int IP_CONST_FEAT_RAMETHENE_RESIST = 1090; +const int IP_CONST_FEAT_RAMETHENE_CLOUD = 1091; +const int IP_CONST_FEAT_RAMETHENE_MAX = 1092; +const int IP_CONST_FEAT_RAMETHENE_WILT = 1093; +const int IP_CONST_FEAT_WYRMBANE_FEAR = 1094; +const int IP_CONST_FEAT_WYRMBANE_BOLT = 1095; +const int IP_CONST_FEAT_WYRMBANE_EMP = 1096; +const int IP_CONST_FEAT_WYRMBANE_BREATH = 1097; +const int IP_CONST_FEAT_WHELM_DETECT_GIANT = 1098; +const int IP_CONST_FEAT_WHELM_LOCATE_OBJECT = 1099; +const int IP_CONST_FEAT_WHELM_DETECT_GOBLIN = 1100; +const int IP_CONST_FEAT_RAVENKIND_DANCE = 1101; +const int IP_CONST_FEAT_RAVENKIND_FLARE = 1102; +const int IP_CONST_FEAT_RAVENKIND_LIGHT = 1103; +const int IP_CONST_FEAT_RAVENKIND_DETECT = 1104; +const int IP_CONST_FEAT_RAVENKIND_HALT = 1105; +const int IP_CONST_FEAT_RAVENKIND_CURE = 1106; +const int IP_CONST_FEAT_RAVENKIND_DAYLIGHT = 1107; +const int IP_CONST_FEAT_RAVENKIND_WARD = 1108; +const int IP_CONST_FEAT_RAVENKIND_BREAK = 1109; +const int IP_CONST_FEAT_RAVENKIND_HEAL = 1110; +const int IP_CONST_FEAT_LAST_CITADEL_ATTACK = 1111; +const int IP_CONST_FEAT_LAST_CITADEL_PRAYER = 1112; +const int IP_CONST_FEAT_LAST_CITADEL_FEAR = 1113; +const int IP_CONST_FEAT_LAST_CITADEL_CURE = 1114; +const int IP_CONST_FEAT_LAST_CITADEL_BLADE = 1115; +const int IP_CONST_FEAT_LAST_CITADEL_HEAL = 1116; +const int IP_CONST_FEAT_UNFETTERED_MINOTAUR = 1117; +const int IP_CONST_FEAT_UNFETTERED_ENLARGE = 1118; +const int IP_CONST_FEAT_UNFETTERED_ETHEREAL = 1119; +const int IP_CONST_FEAT_UNFETTERED_STONESKIN = 1120; +const int IP_CONST_FEAT_UNFETTERED_SWORD = 1121; +const int IP_CONST_FEAT_HC_EARTHEN_MIGHT = 1122; +const int IP_CONST_FEAT_HC_SOFTEN_EARTH = 1123; +const int IP_CONST_FEAT_HC_FANGS_OF_STONE = 1124; +const int IP_CONST_FEAT_HC_RAISE_THE_EARTH = 1125; +const int IP_CONST_FEAT_HC_SHAKE_THE_EARTH = 1126; +const int IP_CONST_FEAT_DWTOB_BURNING_BLADE = 1127; +const int IP_CONST_FEAT_DWTOB_FAN_THE_FLAMES = 1128; +const int IP_CONST_FEAT_DWTOB_WYRMS_FLAME = 1129; +const int IP_CONST_FEAT_FAITHFUL_DETECT = 1130; +const int IP_CONST_FEAT_FAITHFUL_LR = 1131; +const int IP_CONST_FEAT_FAITHFUL_RESTORE = 1132; +const int IP_CONST_FEAT_FAITHFUL_RESILIENCY = 1133; +const int IP_CONST_FEAT_FAITHFUL_IMMORTAL = 1134; +const int IP_CONST_FEAT_SUPERNAL_NIGHTMARE = 1135; +const int IP_CONST_FEAT_SUPERNAL_PSYCHIC_POISE = 1136; +const int IP_CONST_FEAT_SUPERNAL_HASTE = 1137; +const int IP_CONST_FEAT_SUPERNAL_FREEDOM = 1138; +const int IP_CONST_FEAT_SUPERNAL_TIMESTOP = 1139; +const int IP_CONST_FEAT_KAMATE_STEEL_WIND = 1140; +const int IP_CONST_FEAT_KAMATE_SHOCK = 1141; +const int IP_CONST_FEAT_KAMATE_LIGHTNING = 1142; +const int IP_CONST_FEAT_KAMATE_CHAIN = 1143; +const int IP_CONST_FEAT_KAMATE_TRUE_STRIKE = 1144; +const int IP_CONST_FEAT_EVENTIDE_COMET = 1145; +const int IP_CONST_FEAT_EVENTIDE_BAFFLE = 1146; +const int IP_CONST_FEAT_EVENTIDE_INVIS = 1147; +const int IP_CONST_FEAT_UMBRAL_INVIS = 1148; +const int IP_CONST_FEAT_UMBRAL_INCORP = 1149; +const int IP_CONST_FEAT_TIGER_FANG_CHARGE = 1150; +const int IP_CONST_FEAT_TIGER_FANG_BATTLE = 1151; +const int IP_CONST_FEAT_TIGER_FANG_HASTE = 1152; +const int IP_CONST_FEAT_BULLY_SILLY = 1153; +const int IP_CONST_FEAT_BULLY_STONE = 1154; +const int IP_CONST_FEAT_BULLY_CHAIN = 1155; +const int IP_CONST_FEAT_BULLY_GIANT = 26000; +const int IP_CONST_FEAT_LORESTEALER_READ = 1156; +const int IP_CONST_FEAT_LORESTEALER_DETECT = 1157; +const int IP_CONST_FEAT_LORESTEALER_AXE = 1158; +const int IP_CONST_FEAT_DURINDANA_DAYLIGHT = 1159; +const int IP_CONST_FEAT_DURINDANA_WARD = 1160; +const int IP_CONST_FEAT_DURINDANA_HALLOW = 1161; +const int IP_CONST_FEAT_DURINDANA_DAZZLE = 1162; +const int IP_CONST_FEAT_THAAS_DETECT = 1163; +const int IP_CONST_FEAT_THAAS_OBSTRUCT = 1164; +const int IP_CONST_FEAT_THAAS_BANISH = 1165; +const int IP_CONST_FEAT_THAAS_TELEPORT = 1166; +const int IP_CONST_FEAT_QUICKSPUR_SHIELD = 1167; +const int IP_CONST_FEAT_QUICKSPUR_RESIST = 1168; +const int IP_CONST_FEAT_QUICKSPUR_STEED = 1169; +const int IP_CONST_FEAT_QUICKSPUR_BLUR = 1170; +const int IP_CONST_FEAT_QUICKSPUR_STONE = 1171; +const int IP_CONST_FEAT_BES_FIRE_OF_THE_HEART = 1172; +const int IP_CONST_FEAT_BES_ENTHRALLING_LIGHT = 1173; +const int IP_CONST_FEAT_BES_COLOR_SPRAY = 1174; +const int IP_CONST_FEAT_BES_BLINDING_FLASH = 1175; +const int IP_CONST_FEAT_BES_SHOOTING_STARS = 1176; +const int IP_CONST_FEAT_BES_GLITTERING_MOTES = 1177; +const int IP_CONST_FEAT_BES_TWINKLE = 1178; +const int IP_CONST_FEAT_BES_SILVER_STARLIGHT = 1179; +const int IP_CONST_FEAT_BES_STARLIGHT_DISPELLING = 1180; +const int IP_CONST_FEAT_BES_TALES_IN_THE_SKY = 1181; +const int IP_CONST_FEAT_BES_CALL_DOWN_A_STAR = 1182; diff --git a/src/include/prc_weap_apt.nss b/src/include/prc_weap_apt.nss new file mode 100644 index 0000000..8fa1043 --- /dev/null +++ b/src/include/prc_weap_apt.nss @@ -0,0 +1,526 @@ +//::////////////////////////////////////////////// +//:: Warblade - Weapon Aptitude +//:: prc_weap_apt +//::////////////////////////////////////////////// +/** @file + Allows Warblade to chose aptitude weapon. +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +#include "inc_dynconv" +#include "prc_feat_const" +#include "prc_inc_combat" + +const string OPTION_FOCUS_WEAPON_1 = "PRC_WEAPAPT_FOCUS_1"; +const string OPTION_CRITICAL_WEAPON_1 = "PRC_WEAPAPT_CRITICAL_1"; +const string OPTION_FOCUS_WEAPON_2 = "PRC_WEAPAPT_FOCUS_2"; +const string OPTION_CRITICAL_WEAPON_2 = "PRC_WEAPAPT_CRITICAL_2"; + +const string WEAPON_FILE = "prc_weap_items"; + +//:: Test void +//:: void main (){} + +int GetFeatItemProperty(int nFeatNumber, int nStart, int nEnd) +{ + if (nFeatNumber >= 0) + { + int i; + for(i=nStart; i<=nEnd; i++) + { + string sFeat = Get2DACache("iprp_feats", "FeatIndex", i); + if(sFeat == "") + continue; + int nFeat = StringToInt(sFeat); + if(nFeat == nFeatNumber) + return i; + } + } + return -1; +} + +int GetWeaponFocusFeatItemProperty(int nFeatNumber) +{ + int nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_CLUB, IP_CONST_FEAT_WEAPON_FOCUS_RAY); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_TRIDENT, IP_CONST_FEAT_WEAPON_FOCUS_TRIDENT); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_LANCE, IP_CONST_FEAT_WEAPON_FOCUS_GOAD); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_EAGLE_CLAW, IP_CONST_FEAT_WEAPON_FOCUS_EAGLE_CLAW); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_THINBLADE, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_THINBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WeapFocCreature, IP_CONST_FEAT_WeapFocCreature); + if(nItemProperty != -1) return nItemProperty; + return -1; +} + +int GetEpicWeaponFocusFeatItemProperty(int nFeatNumber) +{ + int nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_WEAPON_FOCUS_TRIDENT, IP_CONST_FEAT_EPIC_WEAPON_FOCUS_TRIDENT); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_WEAPON_FOCUS_EAGLE_CLAW, IP_CONST_FEAT_EPIC_WEAPON_FOCUS_EAGLE_CLAW); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_WEAPON_FOCUS_CLUB, IP_CONST_FEAT_EPIC_WEAPON_FOCUS_RAY); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_WEAPON_FOCUS_LIGHT_LANCE, IP_CONST_FEAT_EPIC_WEAPON_FOCUS_GOAD); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_WEAPON_FOCUS_ELVEN_LIGHTBLADE, IP_CONST_FEAT_EPIC_WEAPON_FOCUS_ELVEN_LIGHTBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_WEAPON_FOCUS_ELVEN_THINBLADE, IP_CONST_FEAT_EPIC_WEAPON_FOCUS_ELVEN_THINBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_WEAPON_FOCUS_ELVEN_COURTBLADE, IP_CONST_FEAT_EPIC_WEAPON_FOCUS_ELVEN_COURTBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WeapEpicFocCreature, IP_CONST_FEAT_WeapEpicFocCreature); + if(nItemProperty != -1) return nItemProperty; + return -1; +} + +int GetWeaponSpecializationFeatItemProperty(int nFeatNumber) +{ + int nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_SPECIALIZATION_CLUB, IP_CONST_FEAT_WEAPON_SPECIALIZATION_MINDBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_SPECIALIZATION_TRIDENT, IP_CONST_FEAT_WEAPON_SPECIALIZATION_TRIDENT); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_SPECIALIZATION_EAGLE_CLAW, IP_CONST_FEAT_WEAPON_SPECIALIZATION_EAGLE_CLAW); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_SPECIALIZATION_LIGHT_LANCE, IP_CONST_FEAT_WEAPON_SPECIALIZATION_GOAD); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE, IP_CONST_FEAT_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_SPECIALIZATION_ELVEN_THINBLADE, IP_CONST_FEAT_WEAPON_SPECIALIZATION_ELVEN_THINBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE, IP_CONST_FEAT_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WeapSpecCreature, IP_CONST_FEAT_WeapSpecCreature); + if(nItemProperty != -1) return nItemProperty; + return -1; +} + +int GetEpicWeaponSpecializationFeatItemProperty(int nFeatNumber) +{ + int nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_EAGLE_CLAW, IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_EAGLE_CLAW); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_TRIDENT, IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_TRIDENT); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_CLUB, IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_MINDBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_LANCE, IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_GOAD); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE, IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_THINBLADE, IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_THINBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE, IP_CONST_FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WeapEpicSpecCreature, IP_CONST_FEAT_WeapEpicSpecCreature); + if(nItemProperty != -1) return nItemProperty; + return -1; +} + +int GetImprovedCriticalFeatItemProperty(int nFeatNumber) +{ + int nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_IMPROVED_CRITICAL_DAGGER, IP_CONST_FEAT_IMPROVED_CRITICAL_MINDBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_IMPROVED_CRITICAL_LIGHT_LANCE, IP_CONST_FEAT_IMPROVED_CRITICAL_GOAD); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_IMPROVED_CRITICAL_ELVEN_LIGHTBLADE, IP_CONST_FEAT_IMPROVED_CRITICAL_ELVEN_LIGHTBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_IMPROVED_CRITICAL_ELVEN_THINBLADE, IP_CONST_FEAT_IMPROVED_CRITICAL_ELVEN_THINBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_IMPROVED_CRITICAL_ELVEN_COURTBLADE, IP_CONST_FEAT_IMPROVED_CRITICAL_ELVEN_COURTBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_IMPROVED_CRITICAL_EAGLE_CLAW, IP_CONST_FEAT_IMPROVED_CRITICAL_EAGLE_CLAW); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_IMPROVED_CRITICAL_TRIDENT, IP_CONST_FEAT_IMPROVED_CRITICAL_TRIDENT); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_ImpCritCreature, IP_CONST_FEAT_ImpCritCreature); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_IMPROVED_CRITICAL_UNARMED, IP_CONST_FEAT_IMPROVED_CRITICAL_UNARMED); + if(nItemProperty != -1) return nItemProperty; + return -1; +} + +int GetOverwhelmingCriticalFeatItemProperty(int nFeatNumber) +{ + int nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_TRIDENT, IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_TRIDENT); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_EAGLE_CLAW, IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_EAGLE_CLAW); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_CLUB, IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_MINDBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHT_LANCE, IP_CONST_FEAT_EPIC_OVERWHELMING_CRITICAL_GOAD); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_OVERWHELMING_CRITICAL_ELVEN_LIGHTBLADE, IP_CONST_FEAT_OVERWHELMING_CRITICAL_ELVEN_LIGHTBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_OVERWHELMING_CRITICAL_ELVEN_THINBLADE, IP_CONST_FEAT_OVERWHELMING_CRITICAL_ELVEN_THINBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_OVERWHELMING_CRITICAL_ELVEN_COURTBLADE, IP_CONST_FEAT_OVERWHELMING_CRITICAL_ELVEN_COURTBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_OVERCRITICAL_CREATURE, IP_CONST_FEAT_OVERCRITICAL_CREATURE); + if(nItemProperty != -1) return nItemProperty; + return -1; +} + +int GetDevastatingCriticalFeatItemProperty(int nFeatNumber) +{ + int nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_TRIDENT, IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_TRIDENT); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_EAGLE_CLAW, IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_EAGLE_CLAW); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_LIGHT_LANCE, IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_MINDBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_DEVASTATING_CRITICAL_ELVEN_LIGHTBLADE, IP_CONST_FEAT_DEVASTATING_CRITICAL_ELVEN_LIGHTBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_DEVASTATING_CRITICAL_ELVEN_THINBLADE, IP_CONST_FEAT_DEVASTATING_CRITICAL_ELVEN_THINBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_DEVASTATING_CRITICAL_ELVEN_COURTBLADE, IP_CONST_FEAT_DEVASTATING_CRITICAL_ELVEN_COURTBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_CLUB, IP_CONST_FEAT_EPIC_DEVASTATING_CRITICAL_MINDBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_DEVCRITICAL_CREATURE, IP_CONST_FEAT_DEVCRITICAL_CREATURE); + if(nItemProperty != -1) return nItemProperty; + return -1; +} + +int GetWeaponOfChoiceFeatItemProperty(int nFeatNumber) +{ + int nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_OF_CHOICE_TRIDENT, IP_CONST_FEAT_WEAPON_OF_CHOICE_TRIDENT); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_OF_CHOICE_EAGLE_CLAW, IP_CONST_FEAT_WEAPON_OF_CHOICE_EAGLE_CLAW); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_OF_CHOICE_SICKLE, IP_CONST_FEAT_WEAPON_OF_CHOICE_MINDBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_OF_CHOICE_LIGHT_LANCE, IP_CONST_FEAT_WEAPON_OF_CHOICE_GOAD); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_OF_CHOICE_ELVEN_LIGHTBLADE, IP_CONST_FEAT_WEAPON_OF_CHOICE_ELVEN_LIGHTBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_OF_CHOICE_ELVEN_THINBLADE, IP_CONST_FEAT_WEAPON_OF_CHOICE_ELVEN_THINBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_OF_CHOICE_ELVEN_COURTBLADE, IP_CONST_FEAT_WEAPON_OF_CHOICE_ELVEN_COURTBLADE); + if(nItemProperty != -1) return nItemProperty; + + return -1; +} + +int GetSanctifyMartialStrikeFeatItemProperty(int nFeatNumber) +{ + int nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_SANCTIFY_MARTIAL_SICKLE, IP_CONST_FEAT_SANCTIFY_MARTIAL_MINDBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW, IP_CONST_FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE); + if(nItemProperty != -1) return nItemProperty; + return -1; +} + +int GetVileMartialStrikeFeatItemProperty(int nFeatNumber) +{ + int nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_VILE_MARTIAL_CLUB, IP_CONST_FEAT_VILE_MARTIAL_TRIDENT); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE, IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE); + if(nItemProperty != -1) return nItemProperty; + nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_VILE_MARTIAL_EAGLE_CLAW, IP_CONST_FEAT_VILE_MARTIAL_ELVEN_COURTBLADE); + if(nItemProperty != -1) return nItemProperty; + return -1; +} + +struct WeaponFeat TakeWeaponFeatCensus(object oPC) +{ + struct WeaponFeat rWeaponFeatCensus = InitWeaponFeat(0); + + int i = 0; + while(Get2DACache(WEAPON_FILE, "label", i) != "") //until we hit a nonexistant line + { + int nIndex = StringToInt(Get2DACache(WEAPON_FILE, "BaseItemsIndex", i)); + struct WeaponFeat rWeaponFeats = GetAllFeatsOfWeaponType(nIndex); + + //Weapon Focus line of feats + if(rWeaponFeats.Focus != -1 && GetHasFeat(rWeaponFeats.Focus, oPC)) + { + rWeaponFeatCensus.Focus += 1; + int bEpicFocus = FALSE; + if(rWeaponFeats.EpicFocus != -1 && GetHasFeat(rWeaponFeats.EpicFocus, oPC)) + { + rWeaponFeatCensus.EpicFocus += 1; + bEpicFocus = TRUE; + } + if(rWeaponFeats.Specialization != -1 && GetHasFeat(rWeaponFeats.Specialization, oPC)) + { + rWeaponFeatCensus.Specialization += 1; + if(rWeaponFeats.EpicSpecialization != -1 && bEpicFocus && GetHasFeat(rWeaponFeats.EpicSpecialization, oPC)) + rWeaponFeatCensus.EpicSpecialization += 1; + } + if(rWeaponFeats.WeaponOfChoice != -1 && GetHasFeat(rWeaponFeats.WeaponOfChoice, oPC)) + rWeaponFeatCensus.WeaponOfChoice += 1; + if(rWeaponFeats.SanctifyMartialStrike != -1 && GetHasFeat(rWeaponFeats.SanctifyMartialStrike, oPC)) + rWeaponFeatCensus.SanctifyMartialStrike += 1; + if(rWeaponFeats.VileMartialStrike != -1 && GetHasFeat(rWeaponFeats.VileMartialStrike, oPC)) + rWeaponFeatCensus.VileMartialStrike += 1; + } + + //Improved Critical line of feats + if(rWeaponFeats.ImprovedCritical != -1 && GetHasFeat(rWeaponFeats.ImprovedCritical, oPC)) + { + rWeaponFeatCensus.ImprovedCritical += 1; + if(rWeaponFeats.OverwhelmingCritical != -1 && GetHasFeat(rWeaponFeats.OverwhelmingCritical, oPC)) + { + rWeaponFeatCensus.OverwhelmingCritical += 1; + if(rWeaponFeats.DevastatingCritical != -1 && GetHasFeat(rWeaponFeats.DevastatingCritical, oPC)) + rWeaponFeatCensus.DevastatingCritical += 1; + } + } + + i++; //go to next line + } + + if(GetHasFeat(FEAT_WEAPON_FOCUS_APTITUDE_1, oPC)) + rWeaponFeatCensus.Focus += 1; + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_APTITUDE_1, oPC)) + rWeaponFeatCensus.Specialization += 1; + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_APTITUDE_1, oPC)) + rWeaponFeatCensus.EpicFocus += 1; + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_APTITUDE_1, oPC)) + rWeaponFeatCensus.EpicSpecialization += 1; + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_APTITUDE_1, oPC)) + rWeaponFeatCensus.ImprovedCritical += 1; + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_APTITUDE_1, oPC)) + rWeaponFeatCensus.OverwhelmingCritical += 1; + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_APTITUDE_1, oPC)) + rWeaponFeatCensus.DevastatingCritical += 1; + if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_APTITUDE_1, oPC)) + rWeaponFeatCensus.WeaponOfChoice += 1; + if(GetHasFeat(FEAT_SANCTIFY_MARTIAL_STRIKE_APTITUDE_1, oPC)) + rWeaponFeatCensus.SanctifyMartialStrike += 1; + if(GetHasFeat(FEAT_VILE_MARTIAL_STRIKE_APTITUDE_1, oPC)) + rWeaponFeatCensus.VileMartialStrike += 1; + + if(GetHasFeat(FEAT_WEAPON_FOCUS_APTITUDE_2, oPC)) + rWeaponFeatCensus.Focus += 1; + if(GetHasFeat(FEAT_WEAPON_SPECIALIZATION_APTITUDE_2, oPC)) + rWeaponFeatCensus.Specialization += 1; + if(GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_APTITUDE_2, oPC)) + rWeaponFeatCensus.EpicFocus += 1; + if(GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_APTITUDE_2, oPC)) + rWeaponFeatCensus.EpicSpecialization += 1; + if(GetHasFeat(FEAT_IMPROVED_CRITICAL_APTITUDE_2, oPC)) + rWeaponFeatCensus.ImprovedCritical += 1; + if(GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_APTITUDE_2, oPC)) + rWeaponFeatCensus.OverwhelmingCritical += 1; + if(GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_APTITUDE_2, oPC)) + rWeaponFeatCensus.DevastatingCritical += 1; + if(GetHasFeat(FEAT_WEAPON_OF_CHOICE_APTITUDE_2, oPC)) + rWeaponFeatCensus.WeaponOfChoice += 1; + if(GetHasFeat(FEAT_SANCTIFY_MARTIAL_STRIKE_APTITUDE_2, oPC)) + rWeaponFeatCensus.SanctifyMartialStrike += 1; + if(GetHasFeat(FEAT_VILE_MARTIAL_STRIKE_APTITUDE_2, oPC)) + rWeaponFeatCensus.VileMartialStrike += 1; + + return rWeaponFeatCensus; +} + +int WeaponItemType(object oWeapon) +{ + if(oWeapon == OBJECT_INVALID) + return BASE_ITEM_INVALID; //Unarmed strike + else + { + int nWeaponItemType = GetBaseItemType(oWeapon); + if(StringToInt(Get2DACache("baseitems", "WeaponType", nWeaponItemType)) > 0) + return nWeaponItemType; + else + return -1; + } +} + +object MainHandWeapon(object oPC) +{ + return GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); +} + +object OffHandWeapon(object oPC) +{ + return GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC); +} + +void DoApplyWeaponAptitude(object oPC, struct WeaponFeat rWeaponFeatCensus, int nWeaponFeatThreshold, string sFocusWeaponOption, string sCriticalWeaponOption) +{ + object oPCHide = GetPCSkin(oPC); + + int nFocusWeaponIndex = GetLocalInt(oPC, sFocusWeaponOption); + if(nFocusWeaponIndex) + { + int nFocusWeaponType = StringToInt(Get2DACache(WEAPON_FILE, "BaseItemsIndex", nFocusWeaponIndex-1)); + if(nFocusWeaponType == BASE_ITEM_INVALID+1) + nFocusWeaponType = WeaponItemType(MainHandWeapon(oPC)); + else if (nFocusWeaponType == BASE_ITEM_INVALID+2) + nFocusWeaponType = WeaponItemType(OffHandWeapon(oPC)); + + if(nFocusWeaponType != -1) + { + struct WeaponFeat rWeaponFeats = GetAllFeatsOfWeaponType(nFocusWeaponType); + + if(rWeaponFeatCensus.Focus >= nWeaponFeatThreshold) + { + int nFeat = rWeaponFeats.Focus; + int nItemProperty = GetWeaponFocusFeatItemProperty(nFeat); + if(DEBUG) DoDebug("Focus: " + IntToString(nFeat) + ", " + IntToString(nItemProperty)); + if (nItemProperty != -1) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyBonusFeat(nItemProperty), oPCHide); + } + + if(rWeaponFeatCensus.EpicFocus >= nWeaponFeatThreshold) + { + int nFeat = rWeaponFeats.EpicFocus; + int nItemProperty = GetEpicWeaponFocusFeatItemProperty(nFeat); + if(DEBUG) DoDebug("Epic Focus: " + IntToString(nFeat) + ", " + IntToString(nItemProperty)); + if (nItemProperty != -1) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyBonusFeat(nItemProperty), oPCHide); + } + + if(rWeaponFeatCensus.Specialization >= nWeaponFeatThreshold) + { + int nFeat = rWeaponFeats.Specialization; + int nItemProperty = GetWeaponSpecializationFeatItemProperty(nFeat); + if(DEBUG) DoDebug("Specialization: " + IntToString(nFeat) + ", " + IntToString(nItemProperty)); + if (nItemProperty != -1) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyBonusFeat(nItemProperty), oPCHide); + } + + if(rWeaponFeatCensus.EpicSpecialization >= nWeaponFeatThreshold) + { + int nFeat = rWeaponFeats.EpicSpecialization; + int nItemProperty = GetEpicWeaponSpecializationFeatItemProperty(nFeat); + if(DEBUG) DoDebug("Epic Specialization: " + IntToString(nFeat) + ", " + IntToString(nItemProperty)); + if (nItemProperty != -1) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyBonusFeat(nItemProperty), oPCHide); + } + + if(rWeaponFeatCensus.WeaponOfChoice >= nWeaponFeatThreshold) + { + int nFeat = rWeaponFeats.WeaponOfChoice; + int nItemProperty = GetWeaponOfChoiceFeatItemProperty(nFeat); + if(DEBUG) DoDebug("Weapon of Choice: " + IntToString(nFeat) + ", " + IntToString(nItemProperty)); + if (nItemProperty != -1) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyBonusFeat(nItemProperty), oPCHide); + } + + if(rWeaponFeatCensus.SanctifyMartialStrike >= nWeaponFeatThreshold) + { + int nFeat = rWeaponFeats.SanctifyMartialStrike; + int nItemProperty = GetSanctifyMartialStrikeFeatItemProperty(nFeat); + if(DEBUG) DoDebug("Sanctify Martial Strike: " + IntToString(nFeat) + ", " + IntToString(nItemProperty)); + if (nItemProperty != -1) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyBonusFeat(nItemProperty), oPCHide); + } + + if(rWeaponFeatCensus.VileMartialStrike >= nWeaponFeatThreshold) + { + int nFeat = rWeaponFeats.VileMartialStrike; + int nItemProperty = GetVileMartialStrikeFeatItemProperty(nFeat); + if(DEBUG) DoDebug("Vile Martial Strike: " + IntToString(nFeat) + ", " + IntToString(nItemProperty)); + if (nItemProperty != -1) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyBonusFeat(nItemProperty), oPCHide); + } + + if(rWeaponFeatCensus.ImprovedCritical >= nWeaponFeatThreshold) + { + int nFeat = rWeaponFeats.ImprovedCritical; + int nItemProperty = GetImprovedCriticalFeatItemProperty(nFeat); + if(DEBUG) DoDebug("Improved Critical: " + IntToString(nFeat) + ", " + IntToString(nItemProperty)); + if (nItemProperty != -1) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyBonusFeat(nItemProperty), oPCHide); + } + + if(rWeaponFeatCensus.OverwhelmingCritical >= nWeaponFeatThreshold) + { + int nFeat = rWeaponFeats.OverwhelmingCritical; + int nItemProperty = GetOverwhelmingCriticalFeatItemProperty(nFeat); + if(DEBUG) DoDebug("Overwhelming Critical: " + IntToString(nFeat) + ", " + IntToString(nItemProperty)); + if (nItemProperty != -1) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyBonusFeat(nItemProperty), oPCHide); + } + + if(rWeaponFeatCensus.DevastatingCritical >= nWeaponFeatThreshold) + { + int nFeat = rWeaponFeats.DevastatingCritical; + int nItemProperty = GetDevastatingCriticalFeatItemProperty(nFeat); + if(DEBUG) DoDebug("Devastating Critical: " + IntToString(nFeat) + ", " + IntToString(nItemProperty)); + if (nItemProperty != -1) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyBonusFeat(nItemProperty), oPCHide); + } + } + } + +/* int nCriticalWeaponIndex = GetLocalInt(oPC, sCriticalWeaponOption); + if(nCriticalWeaponIndex) + { + int nCriticalWeaponType = StringToInt(Get2DACache(WEAPON_FILE, "BaseItemsIndex", nCriticalWeaponIndex-1)); + if(nCriticalWeaponType == BASE_ITEM_INVALID+1) + nCriticalWeaponType = WeaponItemType(MainHandWeapon(oPC)); + else if (nCriticalWeaponType == BASE_ITEM_INVALID+2) + nCriticalWeaponType = WeaponItemType(OffHandWeapon(oPC)); + + if(nCriticalWeaponType != -1) + { + struct WeaponFeat rWeaponFeats = GetAllFeatsOfWeaponType(nCriticalWeaponType); + + if(rWeaponFeatCensus.ImprovedCritical >= nWeaponFeatThreshold) + { + int nFeat = rWeaponFeats.ImprovedCritical; + int nItemProperty = GetImprovedCriticalFeatItemProperty(nFeat); + if(DEBUG) DoDebug("Improved Critical: " + IntToString(nFeat) + ", " + IntToString(nItemProperty)); + if (nItemProperty != -1) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyBonusFeat(nItemProperty), oPCHide); + } + + if(rWeaponFeatCensus.OverwhelmingCritical >= nWeaponFeatThreshold) + { + int nFeat = rWeaponFeats.OverwhelmingCritical; + int nItemProperty = GetOverwhelmingCriticalFeatItemProperty(nFeat); + if(DEBUG) DoDebug("Overwhelming Critical: " + IntToString(nFeat) + ", " + IntToString(nItemProperty)); + if (nItemProperty != -1) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyBonusFeat(nItemProperty), oPCHide); + } + + if(rWeaponFeatCensus.DevastatingCritical >= nWeaponFeatThreshold) + { + int nFeat = rWeaponFeats.DevastatingCritical; + int nItemProperty = GetDevastatingCriticalFeatItemProperty(nFeat); + if(DEBUG) DoDebug("Devastating Critical: " + IntToString(nFeat) + ", " + IntToString(nItemProperty)); + if (nItemProperty != -1) + AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyBonusFeat(nItemProperty), oPCHide); + } + } + }*/ +} + +void ApplyWeaponAptitude(object oPC, int bAllowDuringCombat) +{ + if(!bAllowDuringCombat && GetIsInCombat(oPC)) + { + FloatingTextStringOnCreature(GetStringByStrRef(16837722), oPC, FALSE); + IncrementRemainingFeatUses(oPC, FEAT_WEAPON_APTITUDE); + return; + } + + struct WeaponFeat rWeaponFeatCensus = TakeWeaponFeatCensus(oPC); + DoApplyWeaponAptitude(oPC, rWeaponFeatCensus, 1, OPTION_FOCUS_WEAPON_1, OPTION_CRITICAL_WEAPON_1); + //DoApplyWeaponAptitude(oPC, rWeaponFeatCensus, 2, OPTION_FOCUS_WEAPON_2, OPTION_CRITICAL_WEAPON_2); + SetLocalInt(oPC, "PRC_WEAPON_APTITUDE_APPLIED", 1); + SetLocalInt(GetPCSkin(oPC), "PRC_WEAPON_APTITUDE_APPLIED", 1); +} diff --git a/src/include/prc_x2_craft.nss b/src/include/prc_x2_craft.nss new file mode 100644 index 0000000..5834f63 --- /dev/null +++ b/src/include/prc_x2_craft.nss @@ -0,0 +1,2946 @@ +//:://///////////////////////////////////////////// +//:: prc_x2_craft +//:: Copyright (c) 2003 Bioare Corp. +//::////////////////////////////////////////////// +/* + + Central include for crafting feat and + crafting skill system. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Georg Zoeller +//:: Created On: 2003-05-09 +//:: Last Updated On: 2003-10-14 +//::////////////////////////////////////////////// + + +struct craft_struct +{ + int nRow; + string sResRef; + int nDC; + int nCost; + string sLabel; +}; + +struct craft_receipe_struct +{ + int nMode; + object oMajor; + object oMinor; +}; + +struct craft_cost_struct +{ + int nGoldCost; + int nXPCost; + int nTimeCost; +}; + +const string X2_CI_CRAFTSKILL_CONV ="x2_p_craftskills"; + +// Brew Potion related Constants +/* moved to be code switches + +const int X2_CI_BREWPOTION_MAXLEVEL = 3; // Max Level for potions +const int X2_CI_BREWPOTION_COSTMODIFIER = 50; // gp Brew Potion XPCost Modifier + +// Scribe Scroll related constants +const int X2_CI_SCRIBESCROLL_COSTMODIFIER = 25; // Scribescroll Cost Modifier + +// Craft Wand related constants +const int X2_CI_CRAFTWAND_MAXLEVEL = 4; +const int X2_CI_CRAFTWAND_COSTMODIFIER = 750; +*/ +const int X2_CI_BREWPOTION_FEAT_ID = 944; // Brew Potion feat simulation +const int X2_CI_SCRIBESCROLL_FEAT_ID = 945; +const int X2_CI_CRAFTWAND_FEAT_ID = 946; +const int X2_CI_CRAFTROD_FEAT_ID = 2927; +const int X2_CI_CRAFTROD_EPIC_FEAT_ID = 3490; +const int X2_CI_CRAFTSTAFF_FEAT_ID = 2928; +const int X2_CI_CRAFTSTAFF_EPIC_FEAT_ID = 3491; +const string X2_CI_BREWPOTION_NEWITEM_RESREF = "x2_it_pcpotion"; // ResRef for new potion item +const string X2_CI_SCRIBESCROLL_NEWITEM_RESREF = "x2_it_pcscroll"; // ResRef for new scroll item +const string X2_CI_CRAFTWAND_NEWITEM_RESREF = "x2_it_pcwand"; +//const string X2_CI_CRAFTROD_NEWITEM_RESREF = "x2_it_pcwand"; +//const string X2_CI_CRAFTSTAFF_NEWITEM_RESREF = "x2_it_pcwand"; + +// 2da for the craftskills +const string X2_CI_CRAFTING_WP_2DA = "des_crft_weapon" ; +const string X2_CI_CRAFTING_AR_2DA = "des_crft_armor" ; +const string X2_CI_CRAFTING_MAT_2DA = "des_crft_mat"; + + +// 2da for matching spells to properties +const string X2_CI_CRAFTING_SP_2DA = "des_crft_spells" ; +// Base custom token for item modification conversations (do not change unless you want to change the conversation too) +const int X2_CI_CRAFTINGSKILL_CTOKENBASE = 13220; + +// Base custom token for DC item modification conversations (do not change unless you want to change the conversation too) +const int X2_CI_CRAFTINGSKILL_DC_CTOKENBASE = 14220; + +// Base custom token for DC item modification conversations (do not change unless you want to change the conversation too) +const int X2_CI_CRAFTINGSKILL_GP_CTOKENBASE = 14320; + +// Base custom token for DC item modification conversations (do not change unless you want to change the conversation too) +const int X2_CI_MODIFYARMOR_GP_CTOKENBASE = 14420; + +//How many items per 2da row in X2_IP_CRAFTING_2DA, do not change>4 until you want to create more conversation condition scripts as well +const int X2_CI_CRAFTING_ITEMS_PER_ROW = 5; + +// name of the scroll 2da +const string X2_CI_2DA_SCROLLS = "des_crft_scroll"; + +const int X2_CI_CRAFTMODE_INVALID = 0; +const int X2_CI_CRAFTMODE_CONTAINER = 1; // no longer used, but left in for the community to reactivate +const int X2_CI_CRAFTMODE_BASE_ITEM = 2; +const int X2_CI_CRAFTMODE_ASSEMBLE = 3; + +const int X2_CI_MAGICTYPE_INVALID = 0; +const int X2_CI_MAGICTYPE_ARCANE = 1; +const int X2_CI_MAGICTYPE_DIVINE = 2; + +const int X2_CI_MODMODE_INVALID = 0; +const int X2_CI_MODMODE_ARMOR = 1; +const int X2_CI_MODMODE_WEAPON = 2; + +// Runecrafting constants +const int PRC_RUNE_BASECOST = 0; +const int PRC_RUNE_CHARGES = 1; +const int PRC_RUNE_PERDAY = 2; +const int PRC_RUNE_MAXCHARGES = 3; +const int PRC_RUNE_MAXUSESPERDAY = 4; +// Attune Gem constants +const int PRC_GEM_BASECOST = 5; +const int PRC_GEM_PERLEVEL = 6; +// Craft Skull Talisman constants +const int PRC_SKULL_BASECOST = 7; + +// * Returns TRUE if an item is a Craft Base Item +// * to be used in spellscript that can be cast on items - i.e light +int CIGetIsCraftFeatBaseItem( object oItem ); + +// * Checks if the last spell cast was used to brew potion and will do the brewing process. +// * Returns TRUE if the spell was indeed used to brew a potion (regardless of the actual outcome of the brewing process) +// * Meant to be used in spellscripts only +int CICraftCheckBrewPotion(object oSpellTarget, object oCaster, int nID = 0); + +// * Checks if the last spell cast was used to scribe a scroll and handles the scribe scroll process +// * Returns TRUE if the spell was indeed used to scribe a scroll (regardless of the actual outcome) +// * Meant to be used in spellscripts only +int CICraftCheckScribeScroll(object oSpellTarget, object oCaster, int nID = 0); + +// * Create a new potion item based on the spell nSpellID on the creator +object CICraftBrewPotion(object oCreator, int nSpellID ); + +// * Create a new scroll item based on the spell nSpellID on the creator +object CICraftScribeScroll(object oCreator, int nSpellID); + + +// * Checks if the caster intends to use his item creation feats and +// * calls appropriate item creation subroutine if conditions are met (spell cast on correct item, etc). +// * Returns TRUE if the spell was used for an item creation feat +int CIGetSpellWasUsedForItemCreation(object oSpellTarget); + +// This function checks whether Inscribe Rune is turned on +// and if so, deducts the appropriate experience and gold +// then creates the rune in the caster's inventory. +// This will also cause the spell to fail if turned on. +int InscribeRune(object oTarget = OBJECT_INVALID, object oCaster = OBJECT_INVALID, int nSpell = 0); + +// This function checks whether Attune Gem is turned on +// and if so, deducts the appropriate experience and gold +// then creates the gem in the caster's inventory. +// This will also cause the spell to fail if turned on. +int AttuneGem(object oTarget = OBJECT_INVALID, object oCaster = OBJECT_INVALID, int nSpell = 0); + +// Gets the Magical Artisan feat given a particular crafting feat +int GetMagicalArtisanFeat(int nCraftingFeat); + +// Gets the modified gold cost taking cost reduction feats and cost +// scaling switches into account +int GetModifiedGoldCost(int nCost, object oPC, int nCraftingFeat); + +// Gets the modified xp cost taking cost reduction feats and cost +// scaling switches into account +int GetModifiedXPCost(int nCost, object oPC, int nCraftingFeat); + +// Gets the modified time cost taking cost reduction feats and cost +// scaling switches into account +int GetModifiedTimeCost(int nCost, object oPC, int nCraftingFeat); + +// Imbue item check for warlocks, returns TRUE if a spell requirement is met +int CheckImbueItem(object oPC, int nSpell); + +// Gets PnP xp cost given a gold cost and whether the item is epic +int GetPnPItemXPCost(int nCost, int bEpic); + +// Returns a struct containing gold, xp and time costs given the base cost and other arguments +struct craft_cost_struct GetModifiedCostsFromBase(int nCost, object oPC, int nCraftingFeat, int bEpic); + +// Additional checking for emulating spells during crafting +int CheckAlternativeCrafting(object oPC, int nSpell, struct craft_cost_struct costs); + +// Returns the maximum of caster level used and other effective levels from emulating spells +int GetAlternativeCasterLevel(object oPC, int nLevel); + +////////////////////////////////////////////////// +/* Include section */ +////////////////////////////////////////////////// + +//#include "prc_x2_itemprop" +//#include "x2_inc_switches" +#include "prc_inc_newip" +#include "prc_inc_spells" +#include "prc_add_spell_dc" + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + + +// * Returns the innate level of a spell. If bDefaultZeroToOne is given +// * Level 0 spell will be returned as level 1 spells +int CIGetSpellInnateLevel(int nSpellID, int bDefaultZeroToOne = FALSE) +{ + int nRet = StringToInt(Get2DACache(X2_CI_CRAFTING_SP_2DA, "Level", nSpellID)); + if (nRet == 0 && bDefaultZeroToOne == TRUE) // Was missing the "bDefaultZeroToOne == TRUE" check, fixed to match specification - Ornedan + nRet = 1; + + return nRet; +} + +// * Makes oPC do a Craft check using nSkill to create the item supplied in sResRe +// * If oContainer is specified, the item will be created there. +// * Throwing weapons are created with stack sizes of 10, ammo with 20 +// * oPC - The player crafting +// * nSkill - SKILL_CRAFT_WEAPON or SKILL_CRAFT_ARMOR, +// * sResRef - ResRef of the item to be crafted +// * nDC - DC to beat to succeed +// * oContainer - if a container is specified, create item inside +object CIUseCraftItemSkill(object oPC, int nSkill, string sResRef, int nDC, object oContainer = OBJECT_INVALID); + +// * Returns TRUE if a spell is prevented from being used with one of the crafting feats +int CIGetIsSpellRestrictedFromCraftFeat(int nSpellID, int nFeatID); + +// * Return craftitemstructdata +struct craft_struct CIGetCraftItemStructFrom2DA(string s2DA, int nRow, int nItemNo); + +// * Return the type of magic as one of the following constants +// * const int X2_CI_MAGICTYPE_INVALID = 0; +// * const int X2_CI_MAGICTYPE_ARCANE = 1; +// * const int X2_CI_MAGICTYPE_DIVINE = 2; +// * Parameters: +// * nClass - CLASS_TYPE_* constant +int CI_GetClassMagicType(int nClass) +{ + if(GetIsArcaneClass(nClass)) + return X2_CI_MAGICTYPE_ARCANE; + else if(GetIsDivineClass(nClass)) + return X2_CI_MAGICTYPE_DIVINE; + + return X2_CI_MAGICTYPE_INVALID; +} + +string GetMaterialComponentTag(int nPropID) +{ + string sRet = Get2DACache("des_matcomp","comp_tag",nPropID); + return sRet; +} + + +// ----------------------------------------------------------------------------- +// Return true if oItem is a crafting target item +// ----------------------------------------------------------------------------- +int CIGetIsCraftFeatBaseItem(object oItem) +{ + int nBt = GetBaseItemType(oItem); + // blank scroll, empty potion, wand + if (nBt == BASE_ITEM_BLANK_POTION || + nBt == BASE_ITEM_BLANK_SCROLL || + nBt == BASE_ITEM_BLANK_WAND || + nBt == BASE_ITEM_CRAFTED_ROD || + nBt == BASE_ITEM_CRAFTED_STAFF) + return TRUE; + else + return FALSE; +} + + +// ----------------------------------------------------------------------------- +// Georg, 2003-06-12 +// Create a new playermade potion object with properties matching nSpellID and return it +// ----------------------------------------------------------------------------- +object CICraftBrewPotion(object oCreator, int nSpellID ) +{ + + int nPropID = IPGetIPConstCastSpellFromSpellID(nSpellID); + + object oTarget; + // * GZ 2003-09-11: If the current spell cast is not acid fog, and + // * returned property ID is 0, bail out to prevent + // * creation of acid fog items. + if (nPropID == 0 && nSpellID != 0) + { + FloatingTextStrRefOnCreature(84544,oCreator); + return OBJECT_INVALID; + } + + /* //just a tad retarded, don't you think? other crafting feats are not similarly restricted + //Uses per day + int nUsesAllowed; + + if(GetHasFeat(FEAT_BREW_4PERDAY,oCreator)) nUsesAllowed = 4; + + else if(GetHasFeat(FEAT_BREW_3PERDAY, oCreator)) nUsesAllowed = 3; + + else if(GetHasFeat(FEAT_BREW_2PERDAY, oCreator)) nUsesAllowed = 2; + + else nUsesAllowed = 1; + + int nUsed = GetLocalInt(oCreator, "PRC_POTIONS_BREWED"); + + if(nUsed >= nUsesAllowed) + { + SendMessageToPC(oCreator, "You must rest before you can brew any more potions"); + return OBJECT_INVALID; + } + */ + + int nCasterLevel = GetAlternativeCasterLevel(oCreator, PRCGetCasterLevel(oCreator)); + + if (nPropID != -1) + { + itemproperty ipProp = ItemPropertyCastSpell(nPropID,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); + oTarget = CreateItemOnObject(X2_CI_BREWPOTION_NEWITEM_RESREF,oCreator); + AddItemProperty(DURATION_TYPE_PERMANENT,ipProp,oTarget); + if(GetPRCSwitch(PRC_BREW_POTION_CASTER_LEVEL)) + { + itemproperty ipLevel = ItemPropertyCastSpellCasterLevel(nSpellID, nCasterLevel); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLevel,oTarget); + itemproperty ipMeta = ItemPropertyCastSpellMetamagic(nSpellID, PRCGetMetaMagicFeat()); + AddItemProperty(DURATION_TYPE_PERMANENT,ipMeta,oTarget); + itemproperty ipDC = ItemPropertyCastSpellDC(nSpellID, PRCGetSaveDC(PRCGetSpellTargetObject(), OBJECT_SELF)); + AddItemProperty(DURATION_TYPE_PERMANENT,ipDC,oTarget); + } + + //Increment usage + //SetLocalInt(oCreator, "PRC_POTIONS_BREWED", nUsed++); + } + return oTarget; +} + +// ----------------------------------------------------------------------------- +// Wrapper for the crafting cost calculation, returns GP required +// ----------------------------------------------------------------------------- +int CIGetCraftGPCost(int nLevel, int nMod, string sCasterLevelSwitch) +{ + int nLvlRow = IPGetIPConstCastSpellFromSpellID(PRCGetSpellId()); + int nCLevel;// = StringToInt(Get2DACache("iprp_spells","CasterLvl",nLvlRow)); + //PRC modification + if(GetPRCSwitch(sCasterLevelSwitch)) + { + nCLevel = PRCGetCasterLevel(); + } + else + { + nCLevel = StringToInt(Get2DACache("iprp_spells","CasterLvl",nLvlRow)); + } + + // ------------------------------------------------------------------------- + // in case we don't get a valid CLevel, use spell level instead + // ------------------------------------------------------------------------- + if (nCLevel ==0) + { + nCLevel = nLevel; + } + int nRet = nCLevel * nLevel * nMod; + return nRet; + +} + +// ----------------------------------------------------------------------------- +// Georg, 2003-06-12 +// Create a new playermade wand object with properties matching nSpellID +// and return it +// ----------------------------------------------------------------------------- +object CICraftCraftWand(object oCreator, int nSpellID ) +{ + int nPropID = IPGetIPConstCastSpellFromSpellID(nSpellID); + + object oTarget; + // * GZ 2003-09-11: If the current spell cast is not acid fog, and + // * returned property ID is 0, bail out to prevent + // * creation of acid fog items. + if (nPropID == 0 && nSpellID != 0) + { + FloatingTextStrRefOnCreature(84544,oCreator); + return OBJECT_INVALID; + } + + + //int nClass = PRCGetLastSpellCastClass(); + int nCasterLevel = GetAlternativeCasterLevel(oCreator, PRCGetCasterLevel(oCreator)); + + if (nPropID != -1) + { + itemproperty ipProp = ItemPropertyCastSpell(nPropID,IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE); + oTarget = CreateItemOnObject(X2_CI_CRAFTWAND_NEWITEM_RESREF,oCreator); + AddItemProperty(DURATION_TYPE_PERMANENT,ipProp,oTarget); + + if(GetPRCSwitch(PRC_CRAFT_WAND_CASTER_LEVEL)) + { + itemproperty ipLevel = ItemPropertyCastSpellCasterLevel(nSpellID, nCasterLevel); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLevel,oTarget); + itemproperty ipMeta = ItemPropertyCastSpellMetamagic(nSpellID, PRCGetMetaMagicFeat()); + AddItemProperty(DURATION_TYPE_PERMANENT,ipMeta,oTarget); + itemproperty ipDC = ItemPropertyCastSpellDC(nSpellID, PRCGetSaveDC(PRCGetSpellTargetObject(), OBJECT_SELF)); + AddItemProperty(DURATION_TYPE_PERMANENT,ipDC,oTarget); + } + + //int nType = CI_GetClassMagicType(nClass); + //itemproperty ipLimit; + + /* //this is a bit silly, really, removed in line with other crafting types + if (nType == X2_CI_MAGICTYPE_DIVINE) + { + ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_PALADIN); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget); + ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_RANGER); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget); + ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_DRUID); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget); + ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_CLERIC); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget); + } + else if (nType == X2_CI_MAGICTYPE_ARCANE) + { + ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_WIZARD); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget); + ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_SORCERER); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget); + ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_BARD); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget); + } + + if(nClass != CLASS_TYPE_WARLOCK) + { + ipLimit = ItemPropertyLimitUseByClass(nClass); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget); + } + */ + + int nCharges = nCasterLevel + d20(); + + if (nCharges == 0) // stupi cheaters + { + nCharges = 10+d20(); + } + // Hard core rule mode enabled + if (GetModuleSwitchValue(MODULE_SWITCH_ENABLE_CRAFT_WAND_50_CHARGES)) + { + SetItemCharges(oTarget,50); + } + else + { + SetItemCharges(oTarget,nCharges); + } + // TODOL Add use restrictions there when item becomes available + } + return oTarget; +} + +// ----------------------------------------------------------------------------- +// Georg, 2003-06-12 +// Create and Return a magic wand with an item property +// matching nSpellID. Charges are set to d20 + casterlevel +// capped at 50 max +// ----------------------------------------------------------------------------- +object CICraftScribeScroll(object oCreator, int nSpellID) +{ + int nPropID = IPGetIPConstCastSpellFromSpellID(nSpellID); + object oTarget; + // Handle optional material components + string sMat = GetMaterialComponentTag(nPropID); + if (sMat != "") + { + object oMat = GetItemPossessedBy(oCreator,sMat); + if (oMat== OBJECT_INVALID) + { + FloatingTextStrRefOnCreature(83374, oCreator); // Missing material component + return OBJECT_INVALID; + } + else + { + DestroyObject (oMat); + } + } + + // get scroll resref from scrolls lookup 2da + int nClass =PRCGetLastSpellCastClass (); + string sClass = ""; + switch (nClass) + { + case CLASS_TYPE_WIZARD: + sClass = "Wiz_Sorc"; + break; + + case CLASS_TYPE_SORCERER: + sClass = "Wiz_Sorc"; + break; + case CLASS_TYPE_CLERIC: + case CLASS_TYPE_UR_PRIEST: + sClass = "Cleric"; + break; + case CLASS_TYPE_PALADIN: + sClass = "Paladin"; + break; + case CLASS_TYPE_DRUID: + case CLASS_TYPE_BLIGHTER: + sClass = "Druid"; + break; + case CLASS_TYPE_RANGER: + sClass = "Ranger"; + break; + case CLASS_TYPE_BARD: + sClass = "Bard"; + break; + } + string sResRef; + if (sClass != "") + { + sResRef = Get2DACache(X2_CI_2DA_SCROLLS,sClass,nSpellID); + if (sResRef != "") + { + oTarget = CreateItemOnObject(sResRef,oCreator); + } + + } + else + { + sResRef = "craft_scroll"; + oTarget = CreateItemOnObject(sResRef ,oCreator); + RemoveItemProperty(oTarget, GetFirstItemProperty(oTarget)); + itemproperty ipSpell = ItemPropertyCastSpell(nPropID, IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); + AddItemProperty(DURATION_TYPE_PERMANENT,ipSpell,oTarget); + } + if(GetPRCSwitch(PRC_SCRIBE_SCROLL_CASTER_LEVEL)) + { + int nCasterLevel = GetAlternativeCasterLevel(oCreator, PRCGetCasterLevel(oCreator)); + itemproperty ipLevel = ItemPropertyCastSpellCasterLevel(nSpellID, nCasterLevel); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLevel,oTarget); + itemproperty ipMeta = ItemPropertyCastSpellMetamagic(nSpellID, PRCGetMetaMagicFeat()); + AddItemProperty(DURATION_TYPE_PERMANENT,ipMeta,oTarget); + itemproperty ipDC = ItemPropertyCastSpellDC(nSpellID, PRCGetSaveDC(PRCGetSpellTargetObject(), OBJECT_SELF)); + AddItemProperty(DURATION_TYPE_PERMANENT,ipDC,oTarget); + } + + if (oTarget == OBJECT_INVALID) + { + WriteTimestampedLogEntry("prc_x2_craft::CICraftScribeScroll failed - Resref: " + sResRef + " Class: " + sClass + "(" +IntToString(nClass) +") " + " SpellID " + IntToString (nSpellID)); + } + return oTarget; +} + +// ----------------------------------------------------------------------------- +// Returns TRUE if the player used the last spell to brew a potion +// ----------------------------------------------------------------------------- +int CICraftCheckBrewPotion(object oSpellTarget, object oCaster, int nID = 0) +{ + + if(nID == 0) nID = PRCGetSpellId(); + + object oSpellTarget = PRCGetSpellTargetObject(); + object oCaster = OBJECT_SELF; + int nLevel = CIGetSpellInnateLevel(nID,TRUE); + if(GetPRCSwitch(PRC_BREW_POTION_CASTER_LEVEL)) + { + int nMetaMagic = PRCGetMetaMagicFeat(); + switch(nMetaMagic) + { + case METAMAGIC_EMPOWER: + nLevel += 2; + break; + case METAMAGIC_EXTEND: + nLevel += 1; + break; + case METAMAGIC_MAXIMIZE: + nLevel += 3; + break; +/* case METAMAGIC_QUICKEN: + nLevel += 1; + break; + case METAMAGIC_SILENT: + nLevel += 5; + break; + case METAMAGIC_STILL: + nLevel += 6; + break; +These dont work as IPs since they are hardcoded */ + } + } + + // ------------------------------------------------------------------------- + // check if brew potion feat is there + // ------------------------------------------------------------------------- + if (GetHasFeat(X2_CI_BREWPOTION_FEAT_ID, oCaster) != TRUE) + { + FloatingTextStrRefOnCreature(40487, oCaster); // Item Creation Failed - Don't know how to create that type of item + return TRUE; + } + + // ------------------------------------------------------------------------- + // check if spell is below maxlevel for brew potions + // ------------------------------------------------------------------------- + int nPotionMaxLevel = GetPRCSwitch(X2_CI_BREWPOTION_MAXLEVEL); + if(nPotionMaxLevel == 0) + nPotionMaxLevel = 3; + + //Master Alchemist + + if(GetHasFeat(FEAT_BREW_POTION_9TH, oCaster)) nPotionMaxLevel = 9; + else if(GetHasFeat(FEAT_BREW_POTION_8TH, oCaster)) nPotionMaxLevel = 8; + else if(GetHasFeat(FEAT_BREW_POTION_7TH, oCaster)) nPotionMaxLevel = 7; + else if(GetHasFeat(FEAT_BREW_POTION_6TH, oCaster)) nPotionMaxLevel = 6; + else if(GetHasFeat(FEAT_BREW_POTION_5TH, oCaster)) nPotionMaxLevel = 5; + else if(GetHasFeat(FEAT_BREW_POTION_4TH, oCaster)) nPotionMaxLevel = 4; + + if (nLevel > nPotionMaxLevel) + { + FloatingTextStrRefOnCreature(76416, oCaster); + return TRUE; + } + + // ------------------------------------------------------------------------- + // Check if the spell is allowed to be used with Brew Potions + // ------------------------------------------------------------------------- + if (CIGetIsSpellRestrictedFromCraftFeat(nID, X2_CI_BREWPOTION_FEAT_ID)) + { + FloatingTextStrRefOnCreature(83450, oCaster); + return TRUE; + } + + // ------------------------------------------------------------------------- + // XP/GP Cost Calculation + // ------------------------------------------------------------------------- + int nCostModifier = GetPRCSwitch(X2_CI_BREWPOTION_COSTMODIFIER); + if(nCostModifier == 0) + nCostModifier = 50; + int nCost = CIGetCraftGPCost(nLevel, nCostModifier, PRC_BREW_POTION_CASTER_LEVEL); + + struct craft_cost_struct costs = GetModifiedCostsFromBase(nCost, oCaster, FEAT_BREW_POTION, FALSE); + + // ------------------------------------------------------------------------- + // Does Player have enough gold? + // ------------------------------------------------------------------------- + //if (GetGold(oCaster) < nGoldCost) + if(!GetHasGPToSpend(oCaster, costs.nGoldCost)) + { + FloatingTextStrRefOnCreature(3786, oCaster); // Item Creation Failed - not enough gold! + return TRUE; + } + + int nHD = GetHitDice(oCaster); + int nMinXPForLevel = ((nHD * (nHD - 1)) / 2) * 1000; + int nNewXP = GetXP(oCaster) - costs.nXPCost; + + + // ------------------------------------------------------------------------- + // check for sufficient XP to cast spell + // ------------------------------------------------------------------------- + //if (nMinXPForLevel > nNewXP || nNewXP == 0 ) + if (!GetHasXPToSpend(oCaster, costs.nXPCost)) + { + FloatingTextStrRefOnCreature(3785, oCaster); // Item Creation Failed - Not enough XP + return TRUE; + } + + //check spell emulation + if(!CheckAlternativeCrafting(oCaster, nID, costs)) + { + FloatingTextStringOnCreature("*Crafting failed!*", oCaster, FALSE); + return TRUE; + } + + // ------------------------------------------------------------------------- + // Here we brew the new potion + // ------------------------------------------------------------------------- + object oPotion = CICraftBrewPotion(oCaster, nID); + + // ------------------------------------------------------------------------- + // Verify Results + // ------------------------------------------------------------------------- + if (GetIsObjectValid(oPotion)) + { + //TakeGoldFromCreature(nGoldCost, oCaster, TRUE); + //SetXP(oCaster, nNewXP); + SpendXP(oCaster, costs.nXPCost); + SpendGP(oCaster, costs.nGoldCost); + DestroyObject (oSpellTarget); + FloatingTextStrRefOnCreature(8502, oCaster); // Item Creation successful + + //advance time here + if(!costs.nTimeCost) costs.nTimeCost = 1; + AdvanceTimeForPlayer(oCaster, RoundsToSeconds(costs.nTimeCost)); + string sName; + sName = Get2DACache("spells", "Name", nID); + sName = "Potion of "+GetStringByStrRef(StringToInt(sName)); + SetName(oPotion, sName); + return TRUE; + } + else + { + FloatingTextStrRefOnCreature(76417, oCaster); // Item Creation Failed + return TRUE; + } + +} + + + +// ----------------------------------------------------------------------------- +// Returns TRUE if the player used the last spell to create a scroll +// ----------------------------------------------------------------------------- +int CICraftCheckScribeScroll(object oSpellTarget, object oCaster, int nID = 0) +{ + if(nID == 0) nID = PRCGetSpellId(); + + // ------------------------------------------------------------------------- + // check if scribe scroll feat is there + // ------------------------------------------------------------------------- + if (GetHasFeat(X2_CI_SCRIBESCROLL_FEAT_ID, oCaster) != TRUE) + { + FloatingTextStrRefOnCreature(40487, oCaster); // Item Creation Failed - Don't know how to create that type of item + return TRUE; + } + + // ------------------------------------------------------------------------- + // Check if the spell is allowed to be used with Scribe Scroll + // ------------------------------------------------------------------------- + if (CIGetIsSpellRestrictedFromCraftFeat(nID, X2_CI_SCRIBESCROLL_FEAT_ID)) + { + FloatingTextStrRefOnCreature(83451, oCaster); // can not be used with this feat + return TRUE; + } + + // ------------------------------------------------------------------------- + // XP/GP Cost Calculation + // ------------------------------------------------------------------------- + int nLevel = CIGetSpellInnateLevel(nID,TRUE); + int nCostModifier = GetPRCSwitch(X2_CI_SCRIBESCROLL_COSTMODIFIER); + if(nCostModifier == 0) + nCostModifier = 25; + int nCost = CIGetCraftGPCost(nLevel, nCostModifier, PRC_SCRIBE_SCROLL_CASTER_LEVEL); + + struct craft_cost_struct costs = GetModifiedCostsFromBase(nCost, oCaster, FEAT_SCRIBE_SCROLL, FALSE); + + if(GetPRCSwitch(PRC_SCRIBE_SCROLL_CASTER_LEVEL)) + { + int nMetaMagic = PRCGetMetaMagicFeat(); + switch(nMetaMagic) + { + case METAMAGIC_EMPOWER: + nLevel += 2; + break; + case METAMAGIC_EXTEND: + nLevel += 1; + break; + case METAMAGIC_MAXIMIZE: + nLevel += 3; + break; +/* case METAMAGIC_QUICKEN: + nLevel += 1; + break; + case METAMAGIC_SILENT: + nLevel += 5; + break; + case METAMAGIC_STILL: + nLevel += 6; + break; +These dont work as IPs since they are hardcoded */ + } + } + + // ------------------------------------------------------------------------- + // Does Player have enough gold? + // ------------------------------------------------------------------------- + if(!GetHasGPToSpend(oCaster, costs.nGoldCost)) + { + FloatingTextStrRefOnCreature(3786, oCaster); // Item Creation Failed - not enough gold! + return TRUE; + } + + int nHD = GetHitDice(oCaster); + int nMinXPForLevel = ((nHD * (nHD - 1)) / 2) * 1000; + int nNewXP = GetXP(oCaster) - costs.nXPCost; + + // ------------------------------------------------------------------------- + // check for sufficient XP to cast spell + // ------------------------------------------------------------------------- + //if (nMinXPForLevel > nNewXP || nNewXP == 0 ) + if (!GetHasXPToSpend(oCaster, costs.nXPCost)) + { + FloatingTextStrRefOnCreature(3785, oCaster); // Item Creation Failed - Not enough XP + return TRUE; + } + + //check spell emulation + if(!CheckAlternativeCrafting(oCaster, nID, costs)) + { + FloatingTextStringOnCreature("*Crafting failed!*", oCaster, FALSE); + return TRUE; + } + + // ------------------------------------------------------------------------- + // Here we scribe the scroll + // ------------------------------------------------------------------------- + object oScroll = CICraftScribeScroll(oCaster, nID); + + // ------------------------------------------------------------------------- + // Verify Results + // ------------------------------------------------------------------------- + if (GetIsObjectValid(oScroll)) + { + //---------------------------------------------------------------------- + // Some scrollsare ar not identified ... fix that here + //---------------------------------------------------------------------- + SetIdentified(oScroll,TRUE); + ActionPlayAnimation (ANIMATION_FIREFORGET_READ,1.0); + SpendXP(oCaster, costs.nXPCost); + SpendGP(oCaster, costs.nGoldCost); + DestroyObject (oSpellTarget); + FloatingTextStrRefOnCreature(8502, oCaster); // Item Creation successful + + //advance time here + if(!costs.nTimeCost) costs.nTimeCost = 1; + AdvanceTimeForPlayer(oCaster, RoundsToSeconds(costs.nTimeCost)); + return TRUE; + } + else + { + FloatingTextStrRefOnCreature(76417, oCaster); // Item Creation Failed + return TRUE; + } + + return FALSE; +} + + +// ----------------------------------------------------------------------------- +// Returns TRUE if the player used the last spell to craft a wand +// ----------------------------------------------------------------------------- +int CICraftCheckCraftWand(object oSpellTarget, object oCaster, int nID = 0) +{ + + if(nID == 0) nID = PRCGetSpellId(); + + // ------------------------------------------------------------------------- + // check if craft wand feat is there + // ------------------------------------------------------------------------- + if (GetHasFeat(X2_CI_CRAFTWAND_FEAT_ID, oCaster) != TRUE) + { + FloatingTextStrRefOnCreature(40487, oCaster); // Item Creation Failed - Don't know how to create that type of item + return TRUE; // tried item creation but do not know how to do it + } + + // ------------------------------------------------------------------------- + // Check if the spell is allowed to be used with Craft Wand + // ------------------------------------------------------------------------- + if (CIGetIsSpellRestrictedFromCraftFeat(nID, X2_CI_CRAFTWAND_FEAT_ID)) + { + FloatingTextStrRefOnCreature(83452, oCaster); // can not be used with this feat + return TRUE; + } + + int nLevel = CIGetSpellInnateLevel(nID,TRUE); + if(GetPRCSwitch(PRC_CRAFT_WAND_CASTER_LEVEL)) + { + int nMetaMagic = PRCGetMetaMagicFeat(); + switch(nMetaMagic) + { + case METAMAGIC_EMPOWER: + nLevel += 2; + break; + case METAMAGIC_EXTEND: + nLevel += 1; + break; + case METAMAGIC_MAXIMIZE: + nLevel += 3; + break; +/* case METAMAGIC_QUICKEN: + nLevel += 1; + break; + case METAMAGIC_SILENT: + nLevel += 5; + break; + case METAMAGIC_STILL: + nLevel += 6; + break; +These dont work as IPs since they are hardcoded */ + } + } + + // ------------------------------------------------------------------------- + // check if spell is below maxlevel for craft want + // ------------------------------------------------------------------------- + int nMaxLevel = GetPRCSwitch(X2_CI_CRAFTWAND_MAXLEVEL); + if(nMaxLevel == 0) + nMaxLevel = 4; + if (nLevel > nMaxLevel) + { + FloatingTextStrRefOnCreature(83623, oCaster); + return TRUE; + } + + // ------------------------------------------------------------------------- + // XP/GP Cost Calculation + // ------------------------------------------------------------------------- + int nCostMod = GetPRCSwitch(X2_CI_CRAFTWAND_COSTMODIFIER); + if(nCostMod == 0) + nCostMod = 750; + int nCost = CIGetCraftGPCost(nLevel, nCostMod, PRC_CRAFT_WAND_CASTER_LEVEL); + + struct craft_cost_struct costs = GetModifiedCostsFromBase(nCost, oCaster, FEAT_CRAFT_WAND, FALSE); + + // ------------------------------------------------------------------------- + // Does Player have enough gold? + // ------------------------------------------------------------------------- + if(!GetHasGPToSpend(oCaster, costs.nGoldCost)) + { + FloatingTextStrRefOnCreature(3786, oCaster); // Item Creation Failed - not enough gold! + return TRUE; + } + + // more calculations on XP cost + int nHD = GetHitDice(oCaster); + int nMinXPForLevel = ((nHD * (nHD - 1)) / 2) * 1000; + int nNewXP = GetXP(oCaster) - costs.nXPCost; + + // ------------------------------------------------------------------------- + // check for sufficient XP to cast spell + // ------------------------------------------------------------------------- + if (!GetHasXPToSpend(oCaster, costs.nXPCost)) + { + FloatingTextStrRefOnCreature(3785, oCaster); // Item Creation Failed - Not enough XP + return TRUE; + } + + //check spell emulation + if(!CheckAlternativeCrafting(oCaster, nID, costs)) + { + FloatingTextStringOnCreature("*Crafting failed!*", oCaster, FALSE); + return TRUE; + } + + // ------------------------------------------------------------------------- + // Here we craft the wand + // ------------------------------------------------------------------------- + object oWand = CICraftCraftWand(oCaster, nID); + + // ------------------------------------------------------------------------- + // Verify Results + // ------------------------------------------------------------------------- + if (GetIsObjectValid(oWand)) + { + SpendXP(oCaster, costs.nXPCost); + SpendGP(oCaster, costs.nGoldCost); + DestroyObject (oSpellTarget); + FloatingTextStrRefOnCreature(8502, oCaster); // Item Creation successful + + //advance time here + if(!costs.nTimeCost) costs.nTimeCost = 1; + AdvanceTimeForPlayer(oCaster, RoundsToSeconds(costs.nTimeCost)); + string sName; + sName = Get2DACache("spells", "Name", nID); + sName = "Wand of "+GetStringByStrRef(StringToInt(sName)); + SetName(oWand, sName); + return TRUE; + } + else + { + FloatingTextStrRefOnCreature(76417, oCaster); // Item Creation Failed + return TRUE; + } + + return FALSE; +} + +int CICraftCheckCraftStaff(object oSpellTarget, object oCaster, int nSpellID = 0) +{ + + if(nSpellID == 0) nSpellID = PRCGetSpellId(); + int nCasterLevel = GetAlternativeCasterLevel(oCaster, PRCGetCasterLevel(oCaster)); + int bSuccess = TRUE; + int nCount = 0; + itemproperty ip = GetFirstItemProperty(oSpellTarget); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_CAST_SPELL) + nCount++; + ip = GetNextItemProperty(oSpellTarget); + } + if(nCount >= 8) + { + FloatingTextStringOnCreature("* Failure - Too many castspell itemproperties *", oCaster); + return TRUE; + } + if(!GetHasFeat(X2_CI_CRAFTSTAFF_FEAT_ID, oCaster)) + { + FloatingTextStrRefOnCreature(40487, oCaster); // Item Creation Failed - Don't know how to create that type of item + return TRUE; // tried item creation but do not know how to do it + } + int nMetaMagic = PRCGetMetaMagicFeat(); + if(nMetaMagic && !GetHasFeat(X2_CI_CRAFTSTAFF_EPIC_FEAT_ID, oCaster)) + { + FloatingTextStringOnCreature("* Failure - You must be able to craft epic staves to apply metamagic *", oCaster); + return TRUE; // tried item creation but do not know how to do it + } + if(CIGetIsSpellRestrictedFromCraftFeat(nSpellID, X2_CI_CRAFTSTAFF_FEAT_ID)) + { + FloatingTextStrRefOnCreature(16829169, oCaster); // can not be used with this feat + return TRUE; + } + int nLevel = CIGetSpellInnateLevel(nSpellID,TRUE); + if(GetPRCSwitch(PRC_CRAFT_STAFF_CASTER_LEVEL)) + { + switch(nMetaMagic) + { + case METAMAGIC_EMPOWER: + nLevel += 2; + break; + case METAMAGIC_EXTEND: + nLevel += 1; + break; + case METAMAGIC_MAXIMIZE: + nLevel += 3; + break; +/* case METAMAGIC_QUICKEN: + nLevel += 1; + break; + case METAMAGIC_SILENT: + nLevel += 5; + break; + case METAMAGIC_STILL: + nLevel += 6; + break; +These dont work as IPs since they are hardcoded */ + } + } + int nCostMod = GetPRCSwitch(X2_CI_CRAFTSTAFF_COSTMODIFIER); + if(!nCostMod) nCostMod = 750; + int nLvlRow = IPGetIPConstCastSpellFromSpellID(nSpellID); + int nCLevel = StringToInt(Get2DACache("iprp_spells","CasterLvl",nLvlRow)); + int nCost = CIGetCraftGPCost(nLevel, nCostMod, PRC_CRAFT_STAFF_CASTER_LEVEL); + + //discount for second or 3+ spells + if(nCount+1 == 2) + nCost = (nCost*3)/4; + else if(nCount+1 >= 3) + nCost = nCost/2; + + //takes epic xp costs into account + struct craft_cost_struct costs = GetModifiedCostsFromBase(nCost, oCaster, FEAT_CRAFT_STAFF, (nMetaMagic > 0)); + + if(costs.nGoldCost < 1) costs.nXPCost = 1; + if(costs.nXPCost < 1) costs.nXPCost = 1; + //if(GetGold(oCaster) < nGoldCost) // enough gold? + if (!GetHasGPToSpend(oCaster, costs.nGoldCost)) + { + FloatingTextStrRefOnCreature(3786, oCaster); // Item Creation Failed - not enough gold! + return TRUE; + } + int nHD = GetHitDice(oCaster); + int nMinXPForLevel = (nHD * (nHD - 1)) * 500; + int nNewXP = GetXP(oCaster) - costs.nXPCost; + //if (nMinXPForLevel > nNewXP || nNewXP == 0 ) + if (!GetHasXPToSpend(oCaster, costs.nXPCost)) + { + FloatingTextStrRefOnCreature(3785, oCaster); // Item Creation Failed - Not enough XP + return TRUE; + } + //check spell emulation + if(!CheckAlternativeCrafting(oCaster, nSpellID, costs)) + { + FloatingTextStringOnCreature("*Crafting failed!*", oCaster, FALSE); + return TRUE; + } + int nPropID = IPGetIPConstCastSpellFromSpellID(nSpellID); + if (nPropID == 0 && nSpellID != 0) + { + FloatingTextStrRefOnCreature(84544,oCaster); + return TRUE; + } + if (nPropID != -1) + { + AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyCastSpell(nPropID,IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE),oSpellTarget); + + if(GetPRCSwitch(PRC_CRAFT_STAFF_CASTER_LEVEL)) + { + AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyCastSpellCasterLevel(nSpellID, nCasterLevel),oSpellTarget); + AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyCastSpellMetamagic(nSpellID, PRCGetMetaMagicFeat()),oSpellTarget); + AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyCastSpellDC(nSpellID, PRCGetSaveDC(PRCGetSpellTargetObject(), OBJECT_SELF)),oSpellTarget); + } + } + else + bSuccess = FALSE; + + if(bSuccess) + { + //TakeGoldFromCreature(nGoldCost, oCaster, TRUE); + //SetXP(oCaster, nNewXP); + SpendXP(oCaster, costs.nXPCost); + SpendGP(oCaster, costs.nGoldCost); + //DestroyObject (oSpellTarget); + FloatingTextStrRefOnCreature(8502, oCaster); // Item Creation successful + + //advance time here + if(!costs.nTimeCost) costs.nTimeCost = 1; + AdvanceTimeForPlayer(oCaster, RoundsToSeconds(costs.nTimeCost)); + string sName; + sName = GetName(oCaster)+"'s Magic Staff"; + //sName = Get2DACache("spells", "Name", nID); + //sName = "Wand of "+GetStringByStrRef(StringToInt(sName)); + SetName(oSpellTarget, sName); + SetItemCursedFlag(oSpellTarget, FALSE); + SetDroppableFlag(oSpellTarget, TRUE); + return TRUE; + } + else + { + FloatingTextStrRefOnCreature(76417, oCaster); // Item Creation Failed + return TRUE; + } + return TRUE; +} + +int CICraftCheckCraftRod(object oSpellTarget, object oCaster, int nSpellID = 0) +{ + + if(nSpellID == 0) nSpellID = PRCGetSpellId(); + int nCasterLevel = GetAlternativeCasterLevel(oCaster, PRCGetCasterLevel(oCaster)); + int bSuccess = TRUE; + int nCount = 0; + itemproperty ip = GetFirstItemProperty(oSpellTarget); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_CAST_SPELL) + nCount++; + ip = GetNextItemProperty(oSpellTarget); + } + if(nCount >= 8) + { + FloatingTextStringOnCreature("* Failure - Too many castspell itemproperties *", oCaster); + return TRUE; + } + if(!GetHasFeat(X2_CI_CRAFTROD_FEAT_ID, oCaster)) + { + FloatingTextStrRefOnCreature(40487, oCaster); // Item Creation Failed - Don't know how to create that type of item + return TRUE; // tried item creation but do not know how to do it + } + int nMetaMagic = PRCGetMetaMagicFeat(); + if(nMetaMagic && !GetHasFeat(X2_CI_CRAFTROD_EPIC_FEAT_ID, oCaster)) + { + FloatingTextStringOnCreature("* Failure - You must be able to craft epic rods to apply metamagic *", oCaster); + return TRUE; // tried item creation but do not know how to do it + } + if(CIGetIsSpellRestrictedFromCraftFeat(nSpellID, X2_CI_CRAFTROD_FEAT_ID)) + { + FloatingTextStrRefOnCreature(16829169, oCaster); // can not be used with this feat + return TRUE; + } + int nLevel = CIGetSpellInnateLevel(nSpellID,TRUE); + if(GetPRCSwitch(PRC_CRAFT_ROD_CASTER_LEVEL)) + { + switch(nMetaMagic) + { + case METAMAGIC_EMPOWER: + nLevel += 2; + break; + case METAMAGIC_EXTEND: + nLevel += 1; + break; + case METAMAGIC_MAXIMIZE: + nLevel += 3; + break; +/* case METAMAGIC_QUICKEN: + nLevel += 1; + break; + case METAMAGIC_SILENT: + nLevel += 5; + break; + case METAMAGIC_STILL: + nLevel += 6; + break; +These dont work as IPs since they are hardcoded */ + } + } + int nCostMod = GetPRCSwitch(X2_CI_CRAFTROD_COSTMODIFIER); + if(!nCostMod) nCostMod = 750; + int nLvlRow = IPGetIPConstCastSpellFromSpellID(nSpellID); + int nCLevel = StringToInt(Get2DACache("iprp_spells","CasterLvl",nLvlRow)); + int nCost = CIGetCraftGPCost(nLevel, nCostMod, PRC_CRAFT_ROD_CASTER_LEVEL); + + //discount for second or 3+ spells + if(nCount+1 == 2) + nCost = (nCost*3)/4; + else if(nCount+1 >= 3) + nCost = nCost/2; + + //takes epic xp costs into account + struct craft_cost_struct costs = GetModifiedCostsFromBase(nCost, oCaster, FEAT_CRAFT_ROD, (nMetaMagic > 0)); + + if(costs.nGoldCost < 1) costs.nXPCost = 1; + if(costs.nXPCost < 1) costs.nXPCost = 1; + //if(GetGold(oCaster) < nGoldCost) // enough gold? + if (!GetHasGPToSpend(oCaster, costs.nGoldCost)) + { + FloatingTextStrRefOnCreature(3786, oCaster); // Item Creation Failed - not enough gold! + return TRUE; + } + int nHD = GetHitDice(oCaster); + int nMinXPForLevel = (nHD * (nHD - 1)) * 500; + int nNewXP = GetXP(oCaster) - costs.nXPCost; + //if (nMinXPForLevel > nNewXP || nNewXP == 0 ) + if (!GetHasXPToSpend(oCaster, costs.nXPCost)) + { + FloatingTextStrRefOnCreature(3785, oCaster); // Item Creation Failed - Not enough XP + return TRUE; + } + //check spell emulation + if(!CheckAlternativeCrafting(oCaster, nSpellID, costs)) + { + FloatingTextStringOnCreature("*Crafting failed!*", oCaster, FALSE); + return TRUE; + } + int nPropID = IPGetIPConstCastSpellFromSpellID(nSpellID); + if (nPropID == 0 && nSpellID != 0) + { + FloatingTextStrRefOnCreature(84544,oCaster); + return TRUE; + } + if (nPropID != -1) + { + AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyCastSpell(nPropID,IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE),oSpellTarget); + + if(GetPRCSwitch(PRC_CRAFT_ROD_CASTER_LEVEL)) + { + AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyCastSpellMetamagic(nSpellID, PRCGetMetaMagicFeat()),oSpellTarget); + } + } + else + bSuccess = FALSE; + + if(bSuccess) + { + //TakeGoldFromCreature(nGoldCost, oCaster, TRUE); + //SetXP(oCaster, nNewXP); + SpendXP(oCaster, costs.nXPCost); + SpendGP(oCaster, costs.nGoldCost); + //DestroyObject (oSpellTarget); + FloatingTextStrRefOnCreature(8502, oCaster); // Item Creation successful + + //advance time here + if(!costs.nTimeCost) costs.nTimeCost = 1; + AdvanceTimeForPlayer(oCaster, RoundsToSeconds(costs.nTimeCost)); + string sName; + sName = GetName(oCaster)+"'s Magic Rod"; + //sName = Get2DACache("spells", "Name", nID); + //sName = "Wand of "+GetStringByStrRef(StringToInt(sName)); + SetName(oSpellTarget, sName); + SetItemCursedFlag(oSpellTarget, FALSE); + SetDroppableFlag(oSpellTarget, TRUE); + return TRUE; + } + else + { + FloatingTextStrRefOnCreature(76417, oCaster); // Item Creation Failed + return TRUE; + } + return TRUE; +} + +int InscribeRune(object oTarget = OBJECT_INVALID, object oCaster = OBJECT_INVALID, int nSpell = 0) +{ + if(!GetIsObjectValid(oCaster)) oCaster = OBJECT_SELF; + // Get the item used to cast the spell + object oItem = GetSpellCastItem(); + if(GetResRef(oItem) == "prc_rune_1") + { + string sName = GetName(GetItemPossessor(oItem)); + if (DEBUG) FloatingTextStringOnCreature(sName + " has just cast a rune spell", oCaster, FALSE); + + if(DEBUG) DoDebug("Checking for One Use runes"); + // This check is used to clear up the one use runes + itemproperty ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_CAST_SPELL) + { + if(DEBUG) DoDebug("Rune can cast spells"); + if (GetItemPropertyCostTableValue(ip) == 5) // Only one use runes have 2 charges per use + { + if(DEBUG) DoDebug("Rune has 2 charges a use, marking it a one use rune"); + // Give it enough time for the spell to finish casting + DestroyObject(oItem, 1.0); + if(DEBUG) DoDebug("Rune destroyed."); + } + } + + ip = GetNextItemProperty(oItem); + } + } + + // If Inscribing is turned off, the spell functions as normal + if(!GetLocalInt(oCaster, "InscribeRune")) return TRUE; + + // No point being in here if you don't have runes. + if(!GetHasFeat(FEAT_INSCRIBE_RUNE, oCaster)) + { + FloatingTextStrRefOnCreature(40487, oCaster); // Item Creation Failed - Don't know how to create that type of item + return TRUE; // tried item creation but do not know how to do it + } + + // No point scribing runes from items, and its not allowed. + if (oItem != OBJECT_INVALID) + { + FloatingTextStringOnCreature("You cannot scribe a rune from an item.", oCaster, FALSE); + return TRUE; + } + + if(!GetIsObjectValid(oTarget)) oTarget = PRCGetSpellTargetObject(); + int nCaster = GetAlternativeCasterLevel(oCaster, PRCGetCasterLevel(oCaster)); + int nDC = PRCGetSaveDC(oTarget, oCaster); + if(!nSpell) nSpell = PRCGetSpellId(); + int nSpellLevel = 0; + int nClass = GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster); + + // This accounts for the fact that there is no bonus to runecraft at level 10 + // Also adjusts it to fit the epic progression, which starts at 13 + if (nClass >= 10) nClass -= 3; + // Bonus to Runecrafting checks from the Runecaster class + int nRuneCraft = (nClass + 2)/3; + // Runecraft local int that counts uses/charges + int nCount = GetLocalInt(oCaster, "RuneCounter"); + + int nLastClass = PRCGetLastSpellCastClass(); + if (nLastClass == CLASS_TYPE_CLERIC || nLastClass == CLASS_TYPE_UR_PRIEST) nSpellLevel = StringToInt(lookup_spell_cleric_level(nSpell)); + else if (nLastClass == CLASS_TYPE_DRUID) nSpellLevel = StringToInt(lookup_spell_druid_level(nSpell)); + else if (nLastClass == CLASS_TYPE_WIZARD || nLastClass == CLASS_TYPE_SORCERER) nSpellLevel = StringToInt(lookup_spell_level(nSpell)); + // If none of these work, check the innate level of the spell + if (nSpellLevel == 0) nSpellLevel = StringToInt(lookup_spell_innate(nSpell)); + // Minimum level. + if (nSpellLevel == 0) nSpellLevel = 1; + + // This will be modified with Runecaster code later. + int nCharges = 1; + if (GetLocalInt(oCaster, "RuneCharges")) nCharges = nCount; + if (GetLocalInt(oCaster, "RuneUsesPerDay")) + { + // 5 is the max uses per day + if (nCount > 5) nCount = 5; + int nMaxUses = StringToInt(Get2DACache("prc_rune_craft", "Cost", PRC_RUNE_MAXUSESPERDAY)); + if (nCount > nMaxUses) nCount = nMaxUses; + nCharges = nCount; + } + // Can't have no charges + if (nCharges == 0) nCharges = 1; + int nMaxCharges = StringToInt(Get2DACache("prc_rune_craft", "Cost", PRC_RUNE_MAXCHARGES)); + if (nCount > nMaxCharges) nCharges = nMaxCharges; + + FloatingTextStringOnCreature("Spell Level: " + IntToString(nSpellLevel), OBJECT_SELF, FALSE); + FloatingTextStringOnCreature("Caster Level: " + IntToString(nCaster), OBJECT_SELF, FALSE); + FloatingTextStringOnCreature("Number of Charges: " + IntToString(nCharges), OBJECT_SELF, FALSE); + + // Gold cost multipler, varies depending on the ability used to craft + int nMultiplier = StringToInt(Get2DACache("prc_rune_craft", "Cost", PRC_RUNE_BASECOST)); + if (nClass > 0) nMultiplier /= 2; + if (GetLocalInt(oCaster, "RuneCharges")) nMultiplier = StringToInt(Get2DACache("prc_rune_craft", "Cost", PRC_RUNE_CHARGES)); + if (GetLocalInt(oCaster, "RuneUsesPerDay")) nMultiplier = StringToInt(Get2DACache("prc_rune_craft", "Cost", PRC_RUNE_PERDAY)); + + // Cost of the rune in gold and XP + int nCost = nSpellLevel * nCaster * nCharges * nMultiplier; + + struct craft_cost_struct costs = GetModifiedCostsFromBase(nCost, oCaster, FEAT_INSCRIBE_RUNE, FALSE); + + FloatingTextStringOnCreature("Gold Cost: " + IntToString(costs.nGoldCost), OBJECT_SELF, FALSE); + FloatingTextStringOnCreature("XP Cost: " + IntToString(costs.nXPCost), OBJECT_SELF, FALSE); + + // See if the caster has enough gold and XP to scribe a rune, and that he passes the skill check. + int nHD = GetHitDice(oCaster); + int nMinXPForLevel = ((nHD * (nHD - 1)) / 2) * 1000; + int nNewXP = GetXP(oCaster) - costs.nXPCost; + int nGold = GetGold(oCaster); + int nNewGold = nGold - costs.nGoldCost; + int nCheck = FALSE; + // Does the PC have Maximize Rune turned on? + int nMaximize = 0; + if (GetLocalInt(oCaster, "MaximizeRune")) nMaximize = 5; + // The check does not use GetIsSkillSuccessful so it doesn't show on the PC + if ((GetSkillRank(SKILL_CRAFT_ARMOR, oCaster) + d20() + nRuneCraft) >= (20 + nSpellLevel + nMaximize)) nCheck = TRUE; + + + if (!GetHasGPToSpend(oCaster, costs.nGoldCost)) + { + FloatingTextStringOnCreature("You do not have enough gold to scribe this rune.", oCaster, FALSE); + // Since they don't have enough, the spell casts normally + return TRUE; + } + if (!GetHasXPToSpend(oCaster, costs.nXPCost) ) + { + FloatingTextStringOnCreature("You do not have enough experience to scribe this rune.", oCaster, FALSE); + // Since they don't have enough, the spell casts normally + return TRUE; + } + if (!nCheck) + { + FloatingTextStringOnCreature("You have failed the craft check to scribe this rune.", oCaster, FALSE); + // Since they don't have enough, the spell casts normally + return TRUE; + } + + // Steal all the code from craft wand. + // The reason craft wand is used is because it is possible to create runes with charges using the Runecaster class. + int nPropID = IPGetIPConstCastSpellFromSpellID(nSpell); + + // * GZ 2003-09-11: If the current spell cast is not acid fog, and + // * returned property ID is 0, bail out to prevent + // * creation of acid fog items. + if (nPropID == 0 && nSpell != 0) + { + FloatingTextStrRefOnCreature(84544,oCaster); + return TRUE; + } + + //check spell emulation + if(!CheckAlternativeCrafting(oCaster, nSpell, costs)) + { + FloatingTextStringOnCreature("*Crafting failed!*", oCaster, FALSE); + return TRUE; + } + + if (nPropID != -1) + { + // This part is always done + int nRuneChant = 0; + if (nClass >= 30) nRuneChant = 10; + else if (nClass >= 27) nRuneChant = 9; + else if (nClass >= 24) nRuneChant = 8; + else if (nClass >= 21) nRuneChant = 7; + else if (nClass >= 18) nRuneChant = 6; + else if (nClass >= 15) nRuneChant = 5; + else if (nClass >= 12) nRuneChant = 4; + else if (nClass >= 9) nRuneChant = 3; + else if (nClass >= 5) nRuneChant = 2; + else if (nClass >= 2) nRuneChant = 1; + + // Since we know they can now pay for it, create the rune stone + object oRune = CreateItemOnObject("prc_rune_1", oCaster, 1, IntToString(nRuneChant)); + + // If they have this active, the bonuses are already added, so skip + // If they don't, add the bonuses down below + if(GetHasSpellEffect(SPELL_RUNE_CHANT)) + nRuneChant = 0; + + itemproperty ipLevel = ItemPropertyCastSpellCasterLevel(nSpell, PRCGetCasterLevel()); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLevel,oRune); + itemproperty ipMeta = ItemPropertyCastSpellMetamagic(nSpell, PRCGetMetaMagicFeat()); + AddItemProperty(DURATION_TYPE_PERMANENT,ipMeta,oRune); + itemproperty ipDC = ItemPropertyCastSpellDC(nSpell, PRCGetSaveDC(PRCGetSpellTargetObject(), OBJECT_SELF) + nRuneChant); + AddItemProperty(DURATION_TYPE_PERMANENT,ipDC,oRune); + // If Maximize Rune is turned on and we pass the check, add the Maximize IProp + if (GetLocalInt(oCaster, "MaximizeRune")) + { + itemproperty ipMax = ItemPropertyCastSpellMetamagic(nSpell, METAMAGIC_MAXIMIZE); + AddItemProperty(DURATION_TYPE_PERMANENT,ipMax,oRune); + } + + // If its uses per day instead of charges, we do some different stuff here + if (GetLocalInt(oCaster, "RuneUsesPerDay")) + { + int nIPUses; + if (nCount == 1) nIPUses = IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY; + else if (nCount == 2) nIPUses = IP_CONST_CASTSPELL_NUMUSES_2_USES_PER_DAY; + else if (nCount == 3) nIPUses = IP_CONST_CASTSPELL_NUMUSES_3_USES_PER_DAY; + else if (nCount == 4) nIPUses = IP_CONST_CASTSPELL_NUMUSES_4_USES_PER_DAY; + // Caps out at 5 per day + else if (nCount >= 5) nIPUses = IP_CONST_CASTSPELL_NUMUSES_5_USES_PER_DAY; + + itemproperty ipProp = ItemPropertyCastSpell(nPropID,nIPUses); + AddItemProperty(DURATION_TYPE_PERMANENT,ipProp,oRune); + } + else if (nCharges == 1) // This is to handle one use runes so the spellhooking works + { + itemproperty ipProp = ItemPropertyCastSpell(nPropID,IP_CONST_CASTSPELL_NUMUSES_2_CHARGES_PER_USE); + AddItemProperty(DURATION_TYPE_PERMANENT,ipProp,oRune); + // This is done so the item exists when it is used for the game to read data off of + nCharges = 3; + } + else // Do the normal charges + { + itemproperty ipProp = ItemPropertyCastSpell(nPropID,IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE); + AddItemProperty(DURATION_TYPE_PERMANENT,ipProp,oRune); + } + SetItemCharges(oRune,nCharges); + SetXP(oCaster,nNewXP); + TakeGoldFromCreature(costs.nGoldCost, oCaster, TRUE); + + //advance time here + if(!costs.nTimeCost) costs.nTimeCost = 1; + AdvanceTimeForPlayer(oCaster, RoundsToSeconds(costs.nTimeCost)); + string sName; + sName = Get2DACache("spells", "Name", nSpell); + sName = "Rune of "+GetStringByStrRef(StringToInt(sName)); + if(GetLocalInt(oCaster, "MaximizeRune")) + sName = "Maximized "+sName; + SetName(oRune, sName); + } + + // If we have made it this far, they have crafted the rune and the spell has been used up, so it returns false. + return FALSE; +} + +int AttuneGem(object oTarget = OBJECT_INVALID, object oCaster = OBJECT_INVALID, int nSpell = 0) +{ + if(!GetIsObjectValid(oCaster)) oCaster = OBJECT_SELF; + // Get the item used to cast the spell + object oItem = GetSpellCastItem(); + if (GetTag(oItem) == "prc_attunegem") + { + string sName = GetName(GetItemPossessor(oItem)); + if (DEBUG) FloatingTextStringOnCreature(sName + " has just cast a gem spell", oCaster, FALSE); + + if(DEBUG) DoDebug("Checking for One Use Gems"); + // This check is used to clear up the one use Gems + itemproperty ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_CAST_SPELL) + { + if(DEBUG) DoDebug("Gem can cast spells"); + if (GetItemPropertyCostTableValue(ip) == 5) // Only one use Gems have 2 charges per use + { + if(DEBUG) DoDebug("Gem has 2 charges a use, marking it a one use Gem"); + // Give it enough time for the spell to finish casting + DestroyObject(oItem, 1.0); + if(DEBUG) DoDebug("Gem destroyed."); + } + } + + ip = GetNextItemProperty(oItem); + } + } + + // If Attune Gem is turned off, the spell functions as normal + if(!GetLocalInt(oCaster, "AttuneGem")) return TRUE; + + // No point being in here if you don't have Gems. + if(!GetHasFeat(FEAT_ATTUNE_GEM, oCaster)) + { + FloatingTextStrRefOnCreature(40487, oCaster); // Item Creation Failed - Don't know how to create that type of item + return TRUE; // tried item creation but do not know how to do it + } + + // No point scribing Gems from items, and its not allowed. + if (oItem != OBJECT_INVALID) + { + FloatingTextStringOnCreature("You cannot scribe a Gem from an item.", oCaster, FALSE); + return TRUE; + } + // oTarget here should be the gem. If it's not, fail. + if(!GetIsObjectValid(oTarget)) oTarget = PRCGetSpellTargetObject(); + // Only accepts bioware gems + if (GetStringLeft(GetResRef(oTarget), 5) == "it_gem") + { + FloatingTextStringOnCreature("Spell target is not a valid gem.", oCaster, FALSE); + // And out we go + return TRUE; + } + + int nCaster = GetAlternativeCasterLevel(oCaster, PRCGetCasterLevel(oCaster)); + int nDC = PRCGetSaveDC(oTarget, oCaster); + if(!nSpell) nSpell = PRCGetSpellId(); + int nSpellLevel; + + if (PRCGetLastSpellCastClass() == CLASS_TYPE_CLERIC || PRCGetLastSpellCastClass() == CLASS_TYPE_UR_PRIEST) nSpellLevel = StringToInt(lookup_spell_cleric_level(nSpell)); + else if (PRCGetLastSpellCastClass() == CLASS_TYPE_DRUID) nSpellLevel = StringToInt(lookup_spell_druid_level(nSpell)); + else if (PRCGetLastSpellCastClass() == CLASS_TYPE_WIZARD || PRCGetLastSpellCastClass() == CLASS_TYPE_SORCERER) nSpellLevel = StringToInt(lookup_spell_level(nSpell)); + // If none of these work, check the innate level of the spell + if (nSpellLevel == 0) nSpellLevel = StringToInt(lookup_spell_innate(nSpell)); + // Minimum level. + if (nSpellLevel == 0) nSpellLevel = 1; + + int nCharges = 1; + + FloatingTextStringOnCreature("Spell Level: " + IntToString(nSpellLevel), OBJECT_SELF, FALSE); + FloatingTextStringOnCreature("Caster Level: " + IntToString(nCaster), OBJECT_SELF, FALSE); + FloatingTextStringOnCreature("Number of Charges: " + IntToString(nCharges), OBJECT_SELF, FALSE); + + // Gold cost multipler, varies depending on the ability used to craft + int nMultiplier = StringToInt(Get2DACache("prc_rune_craft", "Cost", PRC_GEM_BASECOST)); + + // Cost of the Gem in gold and XP + int nCost = nSpellLevel * nCaster * nMultiplier; + + struct craft_cost_struct costs = GetModifiedCostsFromBase(nCost, oCaster, FEAT_ATTUNE_GEM, FALSE); + + FloatingTextStringOnCreature("Gold Cost: " + IntToString(costs.nGoldCost), OBJECT_SELF, FALSE); + FloatingTextStringOnCreature("XP Cost: " + IntToString(costs.nXPCost), OBJECT_SELF, FALSE); + + // See if the caster has enough gold and XP to scribe a Gem, and that he passes the skill check. + int nHD = GetHitDice(oCaster); + int nMinXPForLevel = ((nHD * (nHD - 1)) / 2) * 1000; + int nNewXP = GetXP(oCaster) - costs.nXPCost; + int nGold = GetGold(oCaster); + int nNewGold = nGold - costs.nGoldCost; + int nCheck = FALSE; + + if (!GetHasGPToSpend(oCaster, costs.nGoldCost)) + { + FloatingTextStringOnCreature("You do not have enough gold to scribe this Gem.", oCaster, FALSE); + // Since they don't have enough, the spell casts normally + return TRUE; + } + if (!GetHasXPToSpend(oCaster, costs.nXPCost) ) + { + FloatingTextStringOnCreature("You do not have enough experience to scribe this Gem.", oCaster, FALSE); + // Since they don't have enough, the spell casts normally + return TRUE; + } + + // Is the gem worth enough? + int nGemGold = GetGoldPieceValue(oTarget); + int nGemLevel = nGemGold / StringToInt(Get2DACache("prc_rune_craft", "Cost", PRC_GEM_PERLEVEL)); + if (nGemLevel > 9) nGemLevel = 9; + if (nSpellLevel > nGemLevel) + { + FloatingTextStringOnCreature("Gem is not high enough level for this spell", oCaster, FALSE); + // The spell casts normally + return TRUE; + } + + // Steal all the code from craft wand. + int nPropID = IPGetIPConstCastSpellFromSpellID(nSpell); + + // * GZ 2003-09-11: If the current spell cast is not acid fog, and + // * returned property ID is 0, bail out to prevent + // * creation of acid fog items. + if (nPropID == 0 && nSpell != 0) + { + FloatingTextStrRefOnCreature(84544,oCaster); + return TRUE; + } + + //check spell emulation + if(!CheckAlternativeCrafting(oCaster, nSpell, costs)) + { + FloatingTextStringOnCreature("*Crafting failed!*", oCaster, FALSE); + return TRUE; + } + + if (nPropID != -1) + { + itemproperty ipLevel = ItemPropertyCastSpellCasterLevel(nSpell, PRCGetCasterLevel()); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLevel, oTarget); + itemproperty ipMeta = ItemPropertyCastSpellMetamagic(nSpell, PRCGetMetaMagicFeat()); + AddItemProperty(DURATION_TYPE_PERMANENT,ipMeta, oTarget); + itemproperty ipDC = ItemPropertyCastSpellDC(nSpell, PRCGetSaveDC(PRCGetSpellTargetObject(), OBJECT_SELF)); + AddItemProperty(DURATION_TYPE_PERMANENT,ipDC, oTarget); + +/* if (nCharges == 1) // This is to handle one use Gems so the spellhooking works + { + itemproperty ipProp = ItemPropertyCastSpell(nPropID,IP_CONST_CASTSPELL_NUMUSES_2_CHARGES_PER_USE); + AddItemProperty(DURATION_TYPE_PERMANENT,ipProp, oTarget); + // This is done so the item exists when it is used for the game to read data off of + nCharges = 3; + } */ + + int nUseType = IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE; + if (nCharges == 1) + { + nUseType = IP_CONST_CASTSPELL_NUMUSES_2_CHARGES_PER_USE; + nCharges = 3; + } + itemproperty ipProp = ItemPropertyCastSpell(nPropID, nUseType); + AddItemProperty(DURATION_TYPE_PERMANENT, ipProp, oTarget); + + if (GetIsObjectValid(oTarget)) + { + itemproperty ipCurrent = GetFirstItemProperty(oTarget); + int bFound = FALSE; + while (GetIsItemPropertyValid(ipCurrent)) + { + if (GetItemPropertyType(ipCurrent) == ITEM_PROPERTY_CAST_SPELL) + { + FloatingTextStringOnCreature("? CastSpell IP successfully added", oCaster, FALSE); + bFound = TRUE; + break; + } + ipCurrent = GetNextItemProperty(oTarget); + } + + if (!bFound) + { + FloatingTextStringOnCreature("? CastSpell IP NOT FOUND on item", oCaster, FALSE); + } + } + else + { + FloatingTextStringOnCreature("? oTarget is invalid", oCaster, FALSE); + } + + SetItemCharges(oTarget, nCharges); + SetXP(oCaster, nNewXP); + TakeGoldFromCreature(costs.nGoldCost, oCaster, TRUE); + + string sName; + sName = Get2DACache("spells", "Name", nSpell); + sName = "Gem of "+GetStringByStrRef(StringToInt(sName)); + SetName(oTarget, sName); + + // This is done to allow the item to be set properly, and then alter the tag + object oNewGem = CopyObject(oTarget, GetLocation(oCaster), oCaster, "prc_attunegem"); + DestroyObject(oTarget, 0.1); + } + + // If we have made it this far, they have crafted the Gem and the spell has been used up, so it returns false. + return FALSE; +} + +int CraftSkullTalisman(object oTarget = OBJECT_INVALID, object oCaster = OBJECT_INVALID, int nSpell = 0) +{ + if(!GetIsObjectValid(oCaster)) oCaster = OBJECT_SELF; + // Get the item used to cast the spell + object oItem = GetSpellCastItem(); + if (GetTag(oItem) == "prc_skulltalis") + { + string sName = GetName(GetItemPossessor(oItem)); + if (DEBUG) FloatingTextStringOnCreature(sName + " has just cast a skull talisman spell", oCaster, FALSE); + + if (DEBUG) DoDebug("Checking for One Use Skulls"); + // This check is used to clear up the one use SkullTalismans + itemproperty ip = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ip)) + { + if(GetItemPropertyType(ip) == ITEM_PROPERTY_CAST_SPELL) + { + if (DEBUG) DoDebug("Skull Talisman can cast spells"); + if (GetItemPropertyCostTableValue(ip) == 5) // Only one use Skull Talismans have 2 charges per use + { + if(DEBUG) DoDebug("Skull Talisman has 2 charges a use, marking it a one use Skull Talisman"); + // Give it enough time for the spell to finish casting + DestroyObject(oItem, 1.0); + if(DEBUG) DoDebug("Skull Talisman destroyed."); + } + } + + ip = GetNextItemProperty(oItem); + } + } + + // If Inscribing is turned off, the spell functions as normal + if(!GetLocalInt(oCaster, "CraftSkullTalisman")) return TRUE; + + // No point being in here if you don't have SkullTalismans. + if(!GetHasFeat(FEAT_CRAFT_SKULL_TALISMAN, oCaster)) + { + FloatingTextStrRefOnCreature(40487, oCaster); // Item Creation Failed - Don't know how to create that type of item + return TRUE; // tried item creation but do not know how to do it + } + + // No point scribing SkullTalismans from items, and its not allowed. + if (oItem != OBJECT_INVALID) + { + FloatingTextStringOnCreature("You cannot scribe a Skull Talisman from an item.", oCaster, FALSE); + return TRUE; + } + // oTarget here should be the Caster. + if(!GetIsObjectValid(oTarget)) oTarget = PRCGetSpellTargetObject(); + + int nCaster = GetAlternativeCasterLevel(oCaster, PRCGetCasterLevel(oCaster)); + int nDC = PRCGetSaveDC(oTarget, oCaster); + if(!nSpell) nSpell = PRCGetSpellId(); + int nSpellLevel; + + if (PRCGetLastSpellCastClass() == CLASS_TYPE_CLERIC || PRCGetLastSpellCastClass() == CLASS_TYPE_UR_PRIEST) nSpellLevel = StringToInt(lookup_spell_cleric_level(nSpell)); + else if (PRCGetLastSpellCastClass() == CLASS_TYPE_DRUID) nSpellLevel = StringToInt(lookup_spell_druid_level(nSpell)); + else if (PRCGetLastSpellCastClass() == CLASS_TYPE_WIZARD || PRCGetLastSpellCastClass() == CLASS_TYPE_SORCERER) nSpellLevel = StringToInt(lookup_spell_level(nSpell)); + // If none of these work, check the innate level of the spell + if (nSpellLevel == 0) nSpellLevel = StringToInt(lookup_spell_innate(nSpell)); + // Minimum level. + if (nSpellLevel == 0) nSpellLevel = 1; + + int nCharges = 1; + + FloatingTextStringOnCreature("Spell Level: " + IntToString(nSpellLevel), OBJECT_SELF, FALSE); + FloatingTextStringOnCreature("Caster Level: " + IntToString(nCaster), OBJECT_SELF, FALSE); + + // Gold cost multipler, varies depending on the ability used to craft + int nMultiplier = StringToInt(Get2DACache("prc_rune_craft", "Cost", PRC_SKULL_BASECOST)); + + // Cost of the Skull Talisman in gold and XP + int nCost = nSpellLevel * nCaster * nMultiplier; + + struct craft_cost_struct costs = GetModifiedCostsFromBase(nCost, oCaster, FEAT_CRAFT_SKULL_TALISMAN, FALSE); + + FloatingTextStringOnCreature("Gold Cost: " + IntToString(costs.nGoldCost), OBJECT_SELF, FALSE); + FloatingTextStringOnCreature("XP Cost: " + IntToString(costs.nXPCost), OBJECT_SELF, FALSE); + + // See if the caster has enough gold and XP to scribe a Skull Talisman, and that he passes the skill check. + int nHD = GetHitDice(oCaster); + int nMinXPForLevel = ((nHD * (nHD - 1)) / 2) * 1000; + int nNewXP = GetXP(oCaster) - costs.nXPCost; + int nGold = GetGold(oCaster); + int nNewGold = nGold - costs.nGoldCost; + int nCheck = FALSE; + + if (!GetHasGPToSpend(oCaster, costs.nGoldCost)) + { + FloatingTextStringOnCreature("You do not have enough gold to scribe this SkullTalisman.", oCaster, FALSE); + // Since they don't have enough, the spell casts normally + return TRUE; + } + if (!GetHasXPToSpend(oCaster, costs.nXPCost) ) + { + FloatingTextStringOnCreature("You do not have enough experience to scribe this SkullTalisman.", oCaster, FALSE); + // Since they don't have enough, the spell casts normally + return TRUE; + } + + // Create the item to have all the effects applied to + oTarget = CreateItemOnObject("prc_skulltalis", oCaster, 1); + + // Steal all the code from craft wand. + int nPropID = IPGetIPConstCastSpellFromSpellID(nSpell); + + // * GZ 2003-09-11: If the current spell cast is not acid fog, and + // * returned property ID is 0, bail out to prevent + // * creation of acid fog items. + if (nPropID == 0 && nSpell != 0) + { + FloatingTextStrRefOnCreature(84544,oCaster); + return TRUE; + } + + //check spell emulation + if(!CheckAlternativeCrafting(oCaster, nSpell, costs)) + { + FloatingTextStringOnCreature("*Crafting failed!*", oCaster, FALSE); + return TRUE; + } + + if (nPropID != -1) + { + itemproperty ipLevel = ItemPropertyCastSpellCasterLevel(nSpell, PRCGetCasterLevel()); + AddItemProperty(DURATION_TYPE_PERMANENT,ipLevel,oTarget); + itemproperty ipMeta = ItemPropertyCastSpellMetamagic(nSpell, PRCGetMetaMagicFeat()); + AddItemProperty(DURATION_TYPE_PERMANENT,ipMeta,oTarget); + itemproperty ipDC = ItemPropertyCastSpellDC(nSpell, PRCGetSaveDC(PRCGetSpellTargetObject(), OBJECT_SELF)); + AddItemProperty(DURATION_TYPE_PERMANENT,ipDC,oTarget); + + if (nCharges == 1) // This is to handle one use Skull Talismans so the spellhooking works + { + itemproperty ipProp = ItemPropertyCastSpell(nPropID,IP_CONST_CASTSPELL_NUMUSES_2_CHARGES_PER_USE); + AddItemProperty(DURATION_TYPE_PERMANENT,ipProp,oTarget); + // This is done so the item exists when it is used for the game to read data off of + nCharges = 3; + } + + SetItemCharges(oTarget, nCharges); + SetXP(oCaster, nNewXP); + TakeGoldFromCreature(costs.nGoldCost, oCaster, TRUE); + + string sName; + sName = Get2DACache("spells", "Name", nSpell); + sName = "Skull Talisman of "+ GetStringByStrRef(StringToInt(sName)); + SetName(oTarget, sName); + + // This is done to allow the item to be set properly, and then alter the tag + CopyObject(oTarget, GetLocation(oCaster), oCaster, "prc_skulltalis"); + DestroyObject(oTarget, 0.1); + } + + // If we have made it this far, they have crafted the Skull Talisman and the spell has been used up, so it returns false. + return FALSE; +} + + +// ----------------------------------------------------------------------------- +// Georg, July 2003 +// Checks if the caster intends to use his item creation feats and +// calls appropriate item creation subroutine if conditions are met +// (spell cast on correct item, etc). +// Returns TRUE if the spell was used for an item creation feat +// ----------------------------------------------------------------------------- +int CIGetSpellWasUsedForItemCreation(object oSpellTarget) +{ + object oCaster = OBJECT_SELF; + + // ------------------------------------------------------------------------- + // Spell cast on crafting base item (blank scroll, etc) ? + // ------------------------------------------------------------------------- + if (!CIGetIsCraftFeatBaseItem(oSpellTarget)) + { + return FALSE; // not blank scroll baseitem + } + else + { + // --------------------------------------------------------------------- + // Check Item Creation Feats were disabled through x2_inc_switches + // --------------------------------------------------------------------- + if (GetModuleSwitchValue(MODULE_SWITCH_DISABLE_ITEM_CREATION_FEATS) == TRUE) + { + FloatingTextStrRefOnCreature(83612, oCaster); // * Item creation feats are not enabled in this module * + return FALSE; + } + if (GetLocalInt(GetArea(oCaster), PRC_AREA_DISABLE_CRAFTING)) + { + FloatingTextStrRefOnCreature(16832014, oCaster); // * Item creation feats are not enabled in this area * + return FALSE; + } + + // --------------------------------------------------------------------- + // Ensure that item creation does not work one item was cast on another + // --------------------------------------------------------------------- + if (GetSpellCastItem() != OBJECT_INVALID) + { + FloatingTextStrRefOnCreature(83373, oCaster); // can not use one item to enchant another + return TRUE; + } + + // --------------------------------------------------------------------- + // Ok, what kind of feat the user wants to use by examining the base itm + // --------------------------------------------------------------------- + int nBt = GetBaseItemType(oSpellTarget); + int nRet = FALSE; + switch (nBt) + { + case BASE_ITEM_BLANK_POTION : + // ------------------------------------------------- + // Brew Potion + // ------------------------------------------------- + nRet = CICraftCheckBrewPotion(oSpellTarget,oCaster); + break; + + + case BASE_ITEM_BLANK_SCROLL : + // ------------------------------------------------- + // Scribe Scroll + // ------------------------------------------------- + nRet = CICraftCheckScribeScroll(oSpellTarget,oCaster); + break; + + + case BASE_ITEM_BLANK_WAND : + // ------------------------------------------------- + // Craft Wand + // ------------------------------------------------- + nRet = CICraftCheckCraftWand(oSpellTarget,oCaster); + break; + + case BASE_ITEM_CRAFTED_ROD : + // ------------------------------------------------- + // Craft Rod + // ------------------------------------------------- + nRet = CICraftCheckCraftRod(oSpellTarget,oCaster); + break; + + case BASE_ITEM_CRAFTED_STAFF : + // ------------------------------------------------- + // Craft Staff + // ------------------------------------------------- + nRet = CICraftCheckCraftStaff(oSpellTarget,oCaster); + break; + + // you could add more crafting basetypes here.... + } + + return nRet; + + } + +} + +// ----------------------------------------------------------------------------- +// Makes oPC do a Craft check using nSkill to create the item supplied in sResRe +// If oContainer is specified, the item will be created there. +// Throwing weapons are created with stack sizes of 10, ammo with 20 +// ----------------------------------------------------------------------------- +object CIUseCraftItemSkill(object oPC, int nSkill, string sResRef, int nDC, object oContainer = OBJECT_INVALID) +{ + int bSuccess = GetIsSkillSuccessful(oPC, nSkill, nDC); + object oNew; + if (bSuccess) + { + // actual item creation + // if a crafting container was specified, create inside + int bFix; + if (oContainer == OBJECT_INVALID) + { + //------------------------------------------------------------------ + // We create the item in the work container to get rid of the + // stackable item problems that happen when we create the item + // directly on the player + //------------------------------------------------------------------ + if (GetLevelByClass(CLASS_TYPE_IRONSOUL_FORGEMASTER, oPC)) + oNew = CreateItemOnObject(sResRef,IPGetIPWorkContainer(oPC),1,GetName(oPC)); + else + oNew = CreateItemOnObject(sResRef,IPGetIPWorkContainer(oPC)); + bFix = TRUE; + } + else + { + if (GetLevelByClass(CLASS_TYPE_IRONSOUL_FORGEMASTER, oPC)) + oNew = CreateItemOnObject(sResRef,oContainer,1,GetName(oPC)); + else + oNew = CreateItemOnObject(sResRef,oContainer); + } + + int nBase = GetBaseItemType(oNew); + if (nBase == BASE_ITEM_BOLT || nBase == BASE_ITEM_ARROW || nBase == BASE_ITEM_BULLET) + { + SetItemStackSize(oNew, 20); + } + else if (nBase == BASE_ITEM_THROWINGAXE || nBase == BASE_ITEM_SHURIKEN || nBase == BASE_ITEM_DART) + { + SetItemStackSize(oNew, 10); + } + + //---------------------------------------------------------------------- + // Get around the whole stackable item mess... + //---------------------------------------------------------------------- + if (bFix) + { + object oRet = CopyObject(oNew,GetLocation(oPC),oPC); + DestroyObject(oNew); + oNew = oRet; + } + } + else + { + oNew = OBJECT_INVALID; + } + + return oNew; +} + + +// ----------------------------------------------------------------------------- +// georg, 2003-06-13 ( +// Craft an item. This is only to be called from the crafting conversation +// spawned by x2_s2_crafting!!! +// ----------------------------------------------------------------------------- +int CIDoCraftItemFromConversation(int nNumber) +{ + string sNumber = IntToString(nNumber); + object oPC = GetPCSpeaker(); + //object oMaterial = GetLocalObject(oPC,"X2_CI_CRAFT_MATERIAL"); + object oMajor = GetLocalObject(oPC,"X2_CI_CRAFT_MAJOR"); + object oMinor = GetLocalObject(oPC,"X2_CI_CRAFT_MINOR"); + int nSkill = GetLocalInt(oPC,"X2_CI_CRAFT_SKILL"); + int nMode = GetLocalInt(oPC,"X2_CI_CRAFT_MODE"); + string sResult; + string s2DA; + int nDC; + + + DeleteLocalObject(oPC,"X2_CI_CRAFT_MAJOR"); + DeleteLocalObject(oPC,"X2_CI_CRAFT_MINOR"); + + if (!GetIsObjectValid(oMajor)) + { + FloatingTextStrRefOnCreature(83374,oPC); //"Invalid target" + DeleteLocalInt(oPC,"X2_CRAFT_SUCCESS"); + return FALSE; + } + else + { + if (GetItemPossessor(oMajor) != oPC) + { + FloatingTextStrRefOnCreature(83354,oPC); //"Invalid target" + DeleteLocalInt(oPC,"X2_CRAFT_SUCCESS"); + return FALSE; + } + } + + // If we are in container mode, + if (nMode == X2_CI_CRAFTMODE_CONTAINER) + { + if (!GetIsObjectValid(oMinor)) + { + FloatingTextStrRefOnCreature(83374,oPC); //"Invalid target" + DeleteLocalInt(oPC,"X2_CRAFT_SUCCESS"); + return FALSE; + } + else if (GetItemPossessor(oMinor) != oPC) + { + FloatingTextStrRefOnCreature(83354,oPC); //"Invalid target" + DeleteLocalInt(oPC,"X2_CRAFT_SUCCESS"); + return FALSE; + } + } + + + if (nSkill == 26) // craft weapon + { + s2DA = X2_CI_CRAFTING_WP_2DA; + } + else if (nSkill == 25) + { + s2DA = X2_CI_CRAFTING_AR_2DA; + } + + int nRow = GetLocalInt(oPC,"X2_CI_CRAFT_RESULTROW"); + struct craft_struct stItem = CIGetCraftItemStructFrom2DA(s2DA,nRow,nNumber); + object oContainer = OBJECT_INVALID; + + // --------------------------------------------------------------------------- + // We once used a crafting container, but found it too complicated. Code is still + // left in here for the community + // --------------------------------------------------------------------------- + if (nMode == X2_CI_CRAFTMODE_CONTAINER) + { + oContainer = GetItemPossessedBy(oPC,"x2_it_craftcont"); + } + + // Do the crafting... + object oRet = CIUseCraftItemSkill( oPC, nSkill, stItem.sResRef, stItem.nDC, oContainer) ; + + // * If you made an item, it should always be identified; + SetIdentified(oRet,TRUE); + + if (GetIsObjectValid(oRet)) + { + // ----------------------------------------------------------------------- + // Copy all item properties from the major object on the resulting item + // Through we problably won't use this, its a neat thing to have for the + // community + // to enable magic item creation from the crafting system + // ----------------------------------------------------------------------- + //if (GetGold(oPC) GetGoldPieceValue(oOldItem)) + { + nTotal = GetGoldPieceValue(oOldItem)+1; + } + return nTotal; +} + +// ----------------------------------------------------------------------------- +// returns the cost in gold piece that it would +// cost to modify oOlditem to look like oNewItem +// ----------------------------------------------------------------------------- +int CIGetArmorModificationDC(object oOldItem, object oNewItem) +{ + int nTotal = 0; + int nPart; + int nDC =0; + for (nPart = 0; nPartnTotal) + { + nTotal = nDC; + } + } + } + + nTotal = GetItemACValue(oOldItem) + nTotal + 5; + + return nTotal; +} + +// ----------------------------------------------------------------------------- +// returns TRUE if the spell matching nSpellID is prevented from being used +// with the CraftFeat matching nFeatID +// This is controlled in des_crft_spells.2da +// ----------------------------------------------------------------------------- +int CIGetIsSpellRestrictedFromCraftFeat(int nSpellID, int nFeatID) +{ + string sCol; + switch(nFeatID) + { + case X2_CI_BREWPOTION_FEAT_ID: sCol = "NoPotion"; break; + case X2_CI_SCRIBESCROLL_FEAT_ID: sCol = "NoScroll"; break; + case X2_CI_CRAFTWAND_FEAT_ID: + case X2_CI_CRAFTROD_FEAT_ID: + case X2_CI_CRAFTSTAFF_FEAT_ID: sCol = "NoWand"; break; + } + return !(!StringToInt(Get2DACache(X2_CI_CRAFTING_SP_2DA,sCol,nSpellID))); +} + +// ----------------------------------------------------------------------------- +// Retrieve the row in des_crft_bmat too look up receipe +// ----------------------------------------------------------------------------- +int CIGetCraftingReceipeRow(int nMode, object oMajor, object oMinor, int nSkill) +{ + if (nMode == X2_CI_CRAFTMODE_CONTAINER || nMode == X2_CI_CRAFTMODE_ASSEMBLE ) + { + int nMinorId = StringToInt(Get2DACache("des_crft_amat",GetTag(oMinor),1)); + int nMajorId = StringToInt(Get2DACache("des_crft_bmat",GetTag(oMajor),nMinorId)); + return nMajorId; + } + else if (nMode == X2_CI_CRAFTMODE_BASE_ITEM) + { + int nLookUpRow; + string sTag = GetTag(oMajor); + switch (nSkill) + { + case 26: nLookUpRow =1 ; break; + case 25: nLookUpRow= 2 ; break; + } + int nRet = StringToInt(Get2DACache(X2_CI_CRAFTING_MAT_2DA,sTag,nLookUpRow)); + return nRet; + } + else + { + return 0; // error + } +} + +// ----------------------------------------------------------------------------- +// used to set all variable required for the crafting conversation +// (Used materials, number of choises, 2da row, skill and mode) +// ----------------------------------------------------------------------------- +void CISetupCraftingConversation(object oPC, int nNumber, int nSkill, int nReceipe, object oMajor, object oMinor, int nMode) +{ + + SetLocalObject(oPC,"X2_CI_CRAFT_MAJOR",oMajor); + if (nMode == X2_CI_CRAFTMODE_CONTAINER || nMode == X2_CI_CRAFTMODE_ASSEMBLE ) + { + SetLocalObject(oPC,"X2_CI_CRAFT_MINOR", oMinor); + } + SetLocalInt(oPC,"X2_CI_CRAFT_NOOFITEMS",nNumber); // number of crafting choises for this material + SetLocalInt(oPC,"X2_CI_CRAFT_SKILL",nSkill); // skill used (craft armor or craft waeapon) + SetLocalInt(oPC,"X2_CI_CRAFT_RESULTROW",nReceipe); // number of crafting choises for this material + SetLocalInt(oPC,"X2_CI_CRAFT_MODE",nMode); +} + +// ----------------------------------------------------------------------------- +// oItem - The item used for crafting +// ----------------------------------------------------------------------------- +struct craft_receipe_struct CIGetCraftingModeFromTarget(object oPC,object oTarget, object oItem = OBJECT_INVALID) +{ + struct craft_receipe_struct stStruct; + + + if (GetBaseItemType(oItem) == 112 ) // small + { + stStruct.oMajor = oItem; + stStruct.nMode = X2_CI_CRAFTMODE_BASE_ITEM; + return stStruct; + } + + if (!GetIsObjectValid(oTarget)) + { + stStruct.nMode = X2_CI_CRAFTMODE_INVALID; + return stStruct; + } + + + // A small craftitem was used on a large one + if (GetBaseItemType(oItem) == 110 ) // small + { + if (GetBaseItemType(oTarget) == 109) // large + { + stStruct.nMode = X2_CI_CRAFTMODE_ASSEMBLE; // Mode is ASSEMBLE + stStruct.oMajor = oTarget; + stStruct.oMinor = oItem; + return stStruct; + } + else + { + FloatingTextStrRefOnCreature(84201,oPC); + } + + } + + // ----------------------------------------------------------------------------- + // *** CONTAINER IS NO LONGER USED IN OFFICIAL CAMPAIGN + // BUT CODE LEFT IN FOR COMMUNITY. + // THE FOLLOWING CONDITION IS NEVER TRUE FOR THE OC (no crafting container) + // To reactivate, create a container with tag x2_it_craftcont + int bCraftCont = (GetTag(oTarget) == "x2_it_craftcont"); + + + if (bCraftCont == TRUE) + { + // First item in container is baseitem .. mode = baseitem + if ( GetBaseItemType(GetFirstItemInInventory(oTarget)) == 112) + { + stStruct.nMode = X2_CI_CRAFTMODE_BASE_ITEM; + stStruct.oMajor = GetFirstItemInInventory(oTarget); + return stStruct; + } + else + { + object oTest = GetFirstItemInInventory(oTarget); + int nCount =1; + int bMajor = FALSE; + int bMinor = FALSE; + // No item in inventory ... mode = fail + if (!GetIsObjectValid(oTest)) + { + FloatingTextStrRefOnCreature(84200,oPC); + stStruct.nMode = X2_CI_CRAFTMODE_INVALID; + return stStruct; + } + else + { + while (GetIsObjectValid(oTest) && nCount <3) + { + if (GetBaseItemType(oTest) == 109) + { + stStruct.oMajor = oTest; + bMajor = TRUE; + } + else if (GetBaseItemType(oTest) == 110) + { + stStruct.oMinor = oTest; + bMinor = TRUE; + } + else if ( GetBaseItemType(oTest) == 112) + { + stStruct.nMode = X2_CI_CRAFTMODE_BASE_ITEM; + stStruct.oMajor = oTest; + return stStruct; + } + oTest = GetNextItemInInventory(oTarget); + if (GetIsObjectValid(oTest)) + { + nCount ++; + } + } + + if (nCount >2) + { + FloatingTextStrRefOnCreature(84356,oPC); + stStruct.nMode = X2_CI_CRAFTMODE_INVALID; + return stStruct; + } + else if (nCount <2) + { + FloatingTextStrRefOnCreature(84356,oPC); + stStruct.nMode = X2_CI_CRAFTMODE_INVALID; + return stStruct; + } + + if (bMajor && bMinor) + { + stStruct.nMode = X2_CI_CRAFTMODE_CONTAINER; + return stStruct; + } + else + { + FloatingTextStrRefOnCreature(84356,oPC); + //FloatingTextStringOnCreature("Temp: Wrong combination of items in the crafting container",oPC); + stStruct.nMode = X2_CI_CRAFTMODE_INVALID; + return stStruct; + } + + } + } + } + else + { + // not a container but a baseitem + if (GetBaseItemType(oTarget) == 112) + { + stStruct.nMode = X2_CI_CRAFTMODE_BASE_ITEM; + stStruct.oMajor = oTarget; + return stStruct; + + } + else + { + if (GetBaseItemType(oTarget) == 109 || GetBaseItemType(oTarget) == 110) + { + FloatingTextStrRefOnCreature(84357,oPC); + stStruct.nMode = X2_CI_CRAFTMODE_INVALID; + return stStruct; + } + else + { + FloatingTextStrRefOnCreature(84357,oPC); + // not a valid item + stStruct.nMode = X2_CI_CRAFTMODE_INVALID; + return stStruct; + + } + } + } +} + +// ----------------------------------------------------------------------------- +// *** Crafting Conversation Functions *** +// ----------------------------------------------------------------------------- +int CIGetInModWeaponOrArmorConv(object oPC) +{ + return GetLocalInt(oPC,"X2_L_CRAFT_MODIFY_CONVERSATION"); +} + + +void CISetCurrentModMode(object oPC, int nMode) +{ + if (nMode == X2_CI_MODMODE_INVALID) + { + DeleteLocalInt(oPC,"X2_L_CRAFT_MODIFY_MODE"); + } + else + { + SetLocalInt(oPC,"X2_L_CRAFT_MODIFY_MODE",nMode); + } +} + +int CIGetCurrentModMode(object oPC) +{ + return GetLocalInt(oPC,"X2_L_CRAFT_MODIFY_MODE"); +} + + +object CIGetCurrentModBackup(object oPC) +{ + return GetLocalObject(GetPCSpeaker(),"X2_O_CRAFT_MODIFY_BACKUP"); +} + +object CIGetCurrentModItem(object oPC) +{ + return GetLocalObject(GetPCSpeaker(),"X2_O_CRAFT_MODIFY_ITEM"); +} + + +void CISetCurrentModBackup(object oPC, object oBackup) +{ + SetLocalObject(GetPCSpeaker(),"X2_O_CRAFT_MODIFY_BACKUP",oBackup); +} + +void CISetCurrentModItem(object oPC, object oItem) +{ + SetLocalObject(GetPCSpeaker(),"X2_O_CRAFT_MODIFY_ITEM",oItem); +} + + +// ----------------------------------------------------------------------------- +// * This does multiple things: +// - store the part currently modified +// - setup the custom token for the conversation +// - zoom the camera to that part +// ----------------------------------------------------------------------------- +void CISetCurrentModPart(object oPC, int nPart, int nStrRef) +{ + SetLocalInt(oPC,"X2_TAILOR_CURRENT_PART",nPart); + + if (CIGetCurrentModMode(oPC) == X2_CI_MODMODE_ARMOR) + { + + // * Make the camera float near the PC + float fFacing = GetFacing(oPC) + 180.0; + + if (nPart == ITEM_APPR_ARMOR_MODEL_LSHOULDER || nPart == ITEM_APPR_ARMOR_MODEL_LFOREARM || + nPart == ITEM_APPR_ARMOR_MODEL_LHAND || nPart == ITEM_APPR_ARMOR_MODEL_LBICEP) + { + fFacing += 80.0; + } + + if (nPart == ITEM_APPR_ARMOR_MODEL_RSHOULDER || nPart == ITEM_APPR_ARMOR_MODEL_RFOREARM || + nPart == ITEM_APPR_ARMOR_MODEL_RHAND || nPart == ITEM_APPR_ARMOR_MODEL_RBICEP) + { + fFacing -= 80.0; + } + + float fPitch = 75.0; + if (fFacing > 359.0) + { + fFacing -=359.0; + } + + float fDistance = 3.5f; + if (nPart == ITEM_APPR_ARMOR_MODEL_PELVIS || nPart == ITEM_APPR_ARMOR_MODEL_BELT ) + { + fDistance = 2.0f; + } + + if (nPart == ITEM_APPR_ARMOR_MODEL_LSHOULDER || nPart == ITEM_APPR_ARMOR_MODEL_RSHOULDER ) + { + fPitch = 50.0f; + fDistance = 3.0f; + } + else if (nPart == ITEM_APPR_ARMOR_MODEL_LFOREARM || nPart == ITEM_APPR_ARMOR_MODEL_LHAND) + { + fDistance = 2.0f; + fPitch = 60.0f; + } + else if (nPart == ITEM_APPR_ARMOR_MODEL_NECK) + { + fPitch = 90.0f; + } + else if (nPart == ITEM_APPR_ARMOR_MODEL_RFOOT || nPart == ITEM_APPR_ARMOR_MODEL_LFOOT ) + { + fDistance = 3.5f; + fPitch = 47.0f; + } + else if (nPart == ITEM_APPR_ARMOR_MODEL_LTHIGH || nPart == ITEM_APPR_ARMOR_MODEL_RTHIGH ) + { + fDistance = 2.5f; + fPitch = 65.0f; + } + else if ( nPart == ITEM_APPR_ARMOR_MODEL_RSHIN || nPart == ITEM_APPR_ARMOR_MODEL_LSHIN ) + { + fDistance = 3.5f; + fPitch = 95.0f; + } + + if (GetRacialType(oPC) == RACIAL_TYPE_HALFORC) + { + fDistance += 1.0f; + } + + SetCameraFacing(fFacing, fDistance, fPitch,CAMERA_TRANSITION_TYPE_VERY_FAST) ; + } + + int nCost = GetLocalInt(oPC,"X2_TAILOR_CURRENT_COST"); + int nDC = GetLocalInt(oPC,"X2_TAILOR_CURRENT_DC"); + + SetCustomToken(X2_CI_MODIFYARMOR_GP_CTOKENBASE,IntToString(nCost)); + SetCustomToken(X2_CI_MODIFYARMOR_GP_CTOKENBASE+1,IntToString(nDC)); + + + SetCustomToken(XP_IP_ITEMMODCONVERSATION_CTOKENBASE,GetStringByStrRef(nStrRef)); +} + +int CIGetCurrentModPart(object oPC) +{ + return GetLocalInt(oPC,"X2_TAILOR_CURRENT_PART"); +} + + +void CISetDefaultModItemCamera(object oPC) +{ + float fDistance = 3.5f; + float fPitch = 75.0f; + float fFacing; + + if (CIGetCurrentModMode(oPC) == X2_CI_MODMODE_ARMOR) + { + fFacing = GetFacing(oPC) + 180.0; + if (fFacing > 359.0) + { + fFacing -=359.0; + } + } + else if (CIGetCurrentModMode(oPC) == X2_CI_MODMODE_WEAPON) + { + fFacing = GetFacing(oPC) + 180.0; + fFacing -= 90.0; + if (fFacing > 359.0) + { + fFacing -=359.0; + } + } + + SetCameraFacing(fFacing, fDistance, fPitch,CAMERA_TRANSITION_TYPE_VERY_FAST) ; +} + +void CIUpdateModItemCostDC(object oPC, int nDC, int nCost) +{ + SetLocalInt(oPC,"X2_TAILOR_CURRENT_COST", nCost); + SetLocalInt(oPC,"X2_TAILOR_CURRENT_DC",nDC); + SetCustomToken(X2_CI_MODIFYARMOR_GP_CTOKENBASE,IntToString(nCost)); + SetCustomToken(X2_CI_MODIFYARMOR_GP_CTOKENBASE+1,IntToString(nDC)); +} + + +// dc to modify oOlditem to look like oNewItem +int CIGetWeaponModificationCost(object oOldItem, object oNewItem) +{ + int nTotal = 0; + int nPart; + for (nPart = 0; nPart<=2; nPart++) + { + if (GetItemAppearance(oOldItem,ITEM_APPR_TYPE_WEAPON_MODEL, nPart) !=GetItemAppearance(oNewItem,ITEM_APPR_TYPE_WEAPON_MODEL, nPart)) + { + nTotal+= (GetGoldPieceValue(oOldItem)/4)+1; + } + } + + // Modification Cost should not exceed value of old item +1 GP + if (nTotal > GetGoldPieceValue(oOldItem)) + { + nTotal = GetGoldPieceValue(oOldItem)+1; + } + return nTotal; +} + +int GetMagicalArtisanFeat(int nCraftingFeat) +{ + int nReturn = 0; + switch(nCraftingFeat) + { + case FEAT_BREW_POTION: + { + nReturn = FEAT_MAGICAL_ARTISAN_BREW_POTION; + break; + } + case FEAT_SCRIBE_SCROLL: + { + nReturn = FEAT_MAGICAL_ARTISAN_SCRIBE_SCROLL; + break; + } + case FEAT_INSCRIBE_RUNE: + { + nReturn = FEAT_MAGICAL_ARTISAN_INSCRIBE_RUNE; + break; + } + case FEAT_ATTUNE_GEM: + { + nReturn = FEAT_MAGICAL_ARTISAN_ATTUNE_GEM; + break; + } + case FEAT_CRAFT_ARMS_ARMOR: + { + nReturn = FEAT_MAGICAL_ARTISAN_CRAFT_MAGIC_ARMS; + break; + } + case FEAT_CRAFT_ROD: + { + nReturn = FEAT_MAGICAL_ARTISAN_CRAFT_ROD; + break; + } + case FEAT_CRAFT_STAFF: + { + nReturn = FEAT_MAGICAL_ARTISAN_CRAFT_STAFF; + break; + } + case FEAT_CRAFT_WAND: + { + nReturn = FEAT_MAGICAL_ARTISAN_CRAFT_WAND; + break; + } + case FEAT_CRAFT_WONDROUS: + { + nReturn = FEAT_MAGICAL_ARTISAN_CRAFT_WONDROUS; + break; + } + case FEAT_FORGE_RING: + { + nReturn = FEAT_MAGICAL_ARTISAN_FORGE_RING; + break; + } + case FEAT_CRAFT_SKULL_TALISMAN: + { + nReturn = FEAT_MAGICAL_ARTISAN_CRAFT_SKULL_TALISMAN; + break; + } + default: + { + if(DEBUG) DoDebug("GetMagicalArtisanFeat: invalid crafting feat"); + break; + } + } + return nReturn; +} + +int GetPnPItemXPCost(int nCost, int bEpic) +{ + int nXP = nCost / 25; + if(bEpic) nXP = (nCost / 100) + 10000; + return nXP; +} + +int GetCraftingTime(int nCost) +{ + int nTemp = nCost / 1000; + if(nCost % 1000) nTemp++; + float fDelay; + switch(GetPRCSwitch(PRC_CRAFTING_TIME_SCALE)) + { + case 0: fDelay = HoursToSeconds(nTemp); break; //1 hour/1000gp, default + case 1: fDelay = 0.0; break; //off, no delay + case 2: fDelay = RoundsToSeconds(nTemp); break; //1 round/1000gp + case 3: fDelay = TurnsToSeconds(nTemp); break; //1 turn/1000gp + case 4: fDelay = HoursToSeconds(nTemp); break; //1 hour/1000gp + case 5: fDelay = 24 * HoursToSeconds(nTemp); break; //1 day/1000gp + } + int nMultiplyer = GetPRCSwitch(PRC_CRAFT_TIMER_MULTIPLIER); + if(nMultiplyer) + fDelay *= (IntToFloat(nMultiplyer) / 100.0); + return FloatToInt(fDelay / 6); +} + +int GetModifiedGoldCost(int nCost, object oPC, int nCraftingFeat) +{ + if(nCost == 0) + return nCost; + float fCost = IntToFloat(nCost); + if(GetHasFeat(FEAT_EXTRAORDINARY_ARTISAN_I , oPC)) fCost *= 0.75; + if(GetHasFeat(FEAT_EXTRAORDINARY_ARTISAN_II , oPC)) fCost *= 0.75; + if(GetHasFeat(FEAT_EXTRAORDINARY_ARTISAN_III , oPC)) fCost *= 0.75; + if(GetHasFeat(GetMagicalArtisanFeat(nCraftingFeat), oPC)) fCost *= 0.75; + if(GetHasFeat(FEAT_SHIELD_DWARF_WARDER, oPC) && FEAT_CRAFT_ARMS_ARMOR == nCraftingFeat) fCost *= 0.95; + int nScale = GetPRCSwitch(PRC_CRAFTING_COST_SCALE); + if(nScale > 0) + { //you're not getting away with negative values that easily :P + fCost = fCost * IntToFloat(nScale) / 100.0; + } + return FloatToInt(fCost); +} + +int GetModifiedXPCost(int nCost, object oPC, int nCraftingFeat) +{ + if(nCost == 0) + return nCost; + float fCost = IntToFloat(nCost); + if(GetHasFeat(FEAT_LEGENDARY_ARTISAN_I , oPC)) fCost *= 0.75; + if(GetHasFeat(FEAT_LEGENDARY_ARTISAN_II , oPC)) fCost *= 0.75; + if(GetHasFeat(FEAT_LEGENDARY_ARTISAN_III , oPC)) fCost *= 0.75; + if(GetHasFeat(GetMagicalArtisanFeat(nCraftingFeat), oPC)) fCost *= 0.75; + int nScale = GetPRCSwitch(PRC_CRAFTING_COST_SCALE); + if(nScale > 0) + { //you're not getting away with negative values that easily :P + fCost = fCost * IntToFloat(nScale) / 100.0; + } + return FloatToInt(fCost); +} + +int GetModifiedTimeCost(int nCost, object oPC, int nCraftingFeat) +{ + if(nCost == 0) + return nCost; + float fCost = IntToFloat(nCost); + if(GetLevelByClass(CLASS_TYPE_MAESTER, oPC)) fCost /= 2; + if(GetHasFeat(FEAT_EXCEPTIONAL_ARTISAN_I , oPC)) fCost *= 0.75; + if(GetHasFeat(FEAT_EXCEPTIONAL_ARTISAN_II , oPC)) fCost *= 0.75; + if(GetHasFeat(FEAT_EXCEPTIONAL_ARTISAN_III , oPC)) fCost *= 0.75; + if(GetHasFeat(GetMagicalArtisanFeat(nCraftingFeat), oPC)) fCost *= 0.75; + if(nCraftingFeat == FEAT_BREW_POTION) + { //master alchemist stuff here + if(GetHasFeat(FEAT_BREW_4PERDAY , oPC)) fCost /= 4; + else if(GetHasFeat(FEAT_BREW_3PERDAY , oPC)) fCost /= 3; + else if(GetHasFeat(FEAT_BREW_2PERDAY , oPC)) fCost /= 2; + } + int nScale = GetPRCSwitch(PRC_CRAFTING_COST_SCALE); + if(nScale > 0) + { //you're not getting away with negative values that easily :P + fCost = fCost * IntToFloat(nScale) / 100.0; + } + return FloatToInt(fCost); +} + +struct craft_cost_struct GetModifiedCostsFromBase(int nCost, object oPC, int nCraftingFeat, int bEpic) +{ + struct craft_cost_struct costs; + + costs.nGoldCost = GetModifiedGoldCost(nCost / 2, oPC, nCraftingFeat); + costs.nXPCost = GetModifiedXPCost(GetPnPItemXPCost(nCost, bEpic), oPC, nCraftingFeat); + costs.nTimeCost = GetModifiedTimeCost(GetCraftingTime(nCost), oPC, nCraftingFeat); + + return costs; +} + +//Checks crafting prereqs for warlocks +int CheckImbueItem(object oPC, int nSpell) +{ + if(!GetHasFeat(FEAT_IMBUE_ITEM, oPC)) return FALSE; + int nImbueDC; + int bArcane = TRUE; + int nLevel; + int nArcaneSpellLevel; + int nDivineSpellLevel; + string sTemp; + + sTemp = Get2DACache("spells", "Wiz_Sorc", nSpell); + if(sTemp == "") + { + sTemp = Get2DACache("spells", "Bard", nSpell); + if(sTemp == "") + { + bArcane = FALSE; //now checking the divine classes + sTemp = Get2DACache("spells", "Cleric", nSpell); + if(sTemp == "") + { + sTemp = Get2DACache("spells", "Druid", nSpell); + if(sTemp == "") + { + sTemp = Get2DACache("spells", "Paladin", nSpell); + if(sTemp == "") + { + sTemp = Get2DACache("spells", "Ranger", nSpell); + if(sTemp == "") + { + if(DEBUG) DoDebug("CheckImbueItem: ERROR - spell is neither arcane nor divine"); + return FALSE; + } + } + } + } + } + } + //warlocks with deceive item get to take 10 + return GetPRCIsSkillSuccessful(oPC, SKILL_USE_MAGIC_DEVICE, StringToInt(sTemp) + (bArcane ? 15 : 25), GetHasFeat(FEAT_DECEIVE_ITEM, oPC) ? 10 : -1); +} + +// checks alternative crafting, eg. warlock, artificer +int CheckAlternativeCrafting(object oPC, int nSpell, struct craft_cost_struct costs) +{ + //nSpell1 = (PRCGetHasSpell(nTemp, oPC)) ? -1 : StringToInt(Get2DACache("spells", "Innate", nTemp)) + 20; + //if(nSpell1 == -1) nSpell1 = (GetPRCIsSkillSuccessful(oPC, SKILL_USE_MAGIC_DEVICE, nSpell1, bTake10)) ? -1 : nSpell1; + + int bChecked = FALSE; + int bSuccess = FALSE; + int i; + int bTake10 = GetHasFeat(FEAT_SKILL_MASTERY_ARTIFICER, oPC) ? 10 : -1; + + //artificer crafting check + if(!bSuccess && GetLocalInt(oPC, "ArtificerCrafting")) + { + bChecked = TRUE; + //bSuccess = CheckImbueItem(oPC, nSpell); + for(i = 0; i < costs.nTimeCost; i++) + { + bSuccess = GetPRCIsSkillSuccessful(oPC, SKILL_USE_MAGIC_DEVICE, StringToInt(Get2DACache("spells", "Innate", nSpell)) + 20, bTake10); + if(bSuccess) + break; + } + } + //warlock crafting check + if(!bSuccess && GetLocalInt(oPC, "UsingImbueItem")) + { + bChecked = TRUE; + bSuccess = CheckImbueItem(oPC, nSpell); + } + + + if(!bChecked) + return TRUE; //we never checked because we had the actual spell, so successful + else + return bSuccess; +} + +int GetAlternativeCasterLevel(object oPC, int nLevel) +{ + // Battlesmith adds 3x class level to caster level for casting + nLevel += GetLevelByClass(CLASS_TYPE_BATTLESMITH) * 3; + nLevel += GetLevelByClass(CLASS_TYPE_IRONSOUL_FORGEMASTER) * 3; + if(GetLocalInt(oPC, "UsingImbueItem")) + { + nLevel = PRCMax(GetLocalInt(oPC, "InvokerLevel"), nLevel); + } + if(GetLocalInt(oPC, "ArtificerCrafting")) + { + nLevel = PRCMax(GetLevelByClass(CLASS_TYPE_ARTIFICER, oPC), nLevel); + } + return nLevel; +} + + +// Test main +//void main(){} diff --git a/src/include/prc_x2_itemprop.nss b/src/include/prc_x2_itemprop.nss new file mode 100644 index 0000000..1ccb454 --- /dev/null +++ b/src/include/prc_x2_itemprop.nss @@ -0,0 +1,2022 @@ +//:://///////////////////////////////////////////// +//:://///////////////////////////////////////////// +//:: Item Property Functions +//:: prc_x2_itemprop +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + + Holds item property and item modification + specific code. + + If you look for anything specific to item + properties, your chances are good to find it + in here. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Georg Zoeller +//:: Created On: 2003-06-05 +//:: Last Update: 2003-10-07 +//::////////////////////////////////////////////// + +//:: Test void +//:: void main (){} + +//Changed by primogenitor to include CEP itemtypes + +// * The tag of the ip work container, a placeable which has to be set into each +// * module that is using any of the crafting functions. +const string X2_IP_WORK_CONTAINER_TAG = "x2_plc_ipbox"; +// * 2da for the AddProperty ItemProperty +const string X2_IP_ADDRPOP_2DA = "des_crft_props" ; +// * 2da for the Poison Weapon Itemproperty +const string X2_IP_POISONWEAPON_2DA = "des_crft_poison" ; +// * 2da for armor appearance +const string X2_IP_ARMORPARTS_2DA = "des_crft_aparts" ; +// * 2da for armor appearance +const string X2_IP_ARMORAPPEARANCE_2DA = "des_crft_appear" ; + +// * Base custom token for item modification conversations (do not change unless you want to change the conversation too) +const int XP_IP_ITEMMODCONVERSATION_CTOKENBASE = 12220; +const int X2_IP_ITEMMODCONVERSATION_MODE_TAILOR = 0; +const int X2_IP_ITEMMODCONVERSATION_MODE_CRAFT = 1; + +// * Number of maximum item properties allowed on most items +const int X2_IP_MAX_ITEM_PROPERTIES = 8; + +// * Constants used with the armor modification system +const int X2_IP_ARMORTYPE_NEXT = 0; +const int X2_IP_ARMORTYPE_PREV = 1; +const int X2_IP_ARMORTYPE_RANDOM = 2; +const int X2_IP_WEAPONTYPE_NEXT = 0; +const int X2_IP_WEAPONTYPE_PREV = 1; +const int X2_IP_WEAPONTYPE_RANDOM = 2; + +// * Policy constants for IPSafeAddItemProperty() +const int X2_IP_ADDPROP_POLICY_REPLACE_EXISTING = 0; +const int X2_IP_ADDPROP_POLICY_KEEP_EXISTING = 1; +const int X2_IP_ADDPROP_POLICY_IGNORE_EXISTING =2; + + +// * removes all itemproperties with matching nItemPropertyType and nItemPropertyDuration +void IPRemoveMatchingItemProperties( object oItem, int nItemPropertyType, int nItemPropertyDuration = DURATION_TYPE_TEMPORARY, int nItemPropertySubType = -1 ); + +// * Removes ALL item properties from oItem matching nItemPropertyDuration +void IPRemoveAllItemProperties( object oItem, int nItemPropertyDuration = DURATION_TYPE_TEMPORARY ); + +// * returns TRUE if item can be equipped. +// * Uses Get2DAString, so do not use in a loop! +int IPGetIsItemEquipable( object oItem ); + +// * Changes the color of an item armor +// * oItem - The armor +// * nColorType - ITEM_APPR_ARMOR_COLOR_* constant +// * nColor - color from 0 to 63 +// * Since oItem is destroyed in the process, the function returns +// * the item created with the color changed +object IPDyeArmor( object oItem, int nColorType, int nColor ); + + +// * Returns the container used for item property and appearance modifications in the +// * module. If it does not exist, create it. +object IPGetIPWorkContainer( object oCaller = OBJECT_SELF ); + +// * This function needs to be rather extensive and needs to be updated if there are new +// * ip types we want to use, but it goes into the item property include anyway +itemproperty IPGetItemPropertyByID( int nPropID, int nParam1 = 0, int nParam2 = 0, int nParam3 = 0, int nParam4 = 0 ); + +// * returns TRUE if oItem is a ranged weapon +int IPGetIsRangedWeapon( object oItem ); + +// * return TRUE if oItem is a melee weapon +int IPGetIsMeleeWeapon( object oItem ); + +// * return TRUE if oItem is a projectile (bolt, arrow, etc) +int IPGetIsProjectile( object oItem ); + +// * returns true if weapon is blugeoning (used for poison) +// * This uses Get2DAstring, so it is slow. Avoid using in loops! +int IPGetIsBludgeoningWeapon( object oItem ); + +// * Return the IP_CONST_CASTSPELL_* ID matching to the SPELL_* constant given in nSPELL_ID +// * This uses Get2DAstring, so it is slow. Avoid using in loops! +// * returns -1 if there is no matching property for a spell +int IPGetIPConstCastSpellFromSpellID( int nSpellID ); + +// * Returns TRUE if an item has ITEM_PROPERTY_ON_HIT and the specified nSubType +// * possible values for nSubType can be taken from IPRP_ONHIT.2da +// * popular ones: +// * 5 - Daze 19 - ItemPoison 24 - Vorpal +int IPGetItemHasItemOnHitPropertySubType( object oTarget, int nSubType ); + +// * Returns the number of possible armor part variations for the specified part +// * nPart - ITEM_APPR_ARMOR_MODEL_* constant +// * Uses Get2DAstring, so do not use in loops +int IPGetNumberOfAppearances( int nPart ); + + +// * Returns the next valid appearance type for oArmor +// * nPart - ITEM_APPR_ARMOR_MODEL_* constant +// * Uses Get2DAstring, so do not use in loops +int IPGetNextArmorAppearanceType(object oArmor, int nPart); + +// * Returns the previous valid appearance type for oArmor +// * nPart - ITEM_APPR_ARMOR_MODEL_* constant +// * Uses Get2DAstring, so do not use in loops +int IPGetPrevArmorAppearanceType(object oArmor, int nPart); + +// * Returns a random valid appearance type for oArmor +// * nPart - ITEM_APPR_ARMOR_MODEL_* constant +// * Uses Get2DAstring, so do not use in loops +int IPGetRandomArmorAppearanceType(object oArmor, int nPart); + +// * Returns a new armor based of oArmor with nPartModified +// * nPart - ITEM_APPR_ARMOR_MODEL_* constant of the part to be changed +// * nMode - +// * X2_IP_ARMORTYPE_NEXT - next valid appearance +// * X2_IP_ARMORTYPE_PREV - previous valid apperance; +// * X2_IP_ARMORTYPE_RANDOM - random valid appearance; +// * +// * bDestroyOldOnSuccess - Destroy oArmor in process? +// * Uses Get2DAstring, so do not use in loops +object IPGetModifiedArmor(object oArmor, int nPart, int nMode, int bDestroyOldOnSuccess); + + +// * Add an item property in a safe fashion, preventing unwanted stacking +// * Parameters: +// * oItem - the item to add the property to +// * ip - the itemproperty to add +// * fDuration - set 0.0f to add the property permanent, anything else is temporary +// * nAddItemPropertyPolicy - How to handle existing properties. Valid values are: +// * X2_IP_ADDPROP_POLICY_REPLACE_EXISTING - remove any property of the same type, subtype, durationtype before adding; +// * X2_IP_ADDPROP_POLICY_KEEP_EXISTING - do not add if any property with same type, subtype and durationtype already exists; +// * X2_IP_ADDPROP_POLICY_IGNORE_EXISTING - add itemproperty in any case - Do not Use with OnHit or OnHitSpellCast props! +// * +// * bIgnoreDurationType - If set to TRUE, an item property will be considered identical even if the DurationType is different. Be careful when using this +// * with X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, as this could lead to a temporary item property removing a permanent one +// * bIgnoreSubType - If set to TRUE an item property will be considered identical even if the SubType is different. +void IPSafeAddItemProperty(object oItem, itemproperty ip, float fDuration =0.0f, int nAddItemPropertyPolicy = X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, int bIgnoreDurationType = FALSE, int bIgnoreSubType = FALSE); + +// * Wrapper for GetItemHasItemProperty that returns true if +// * oItem has an itemproperty that matches ipCompareTo by Type AND DurationType AND SubType +// * nDurationType = Valid DURATION_TYPE_* or -1 to ignore +// * bIgnoreSubType - If set to TRUE an item property will be considered identical even if the SubType is different. +int IPGetItemHasProperty(object oItem, itemproperty ipCompareTo, int nDurationType, int bIgnoreSubType = FALSE); + +// * returns FALSE it the item has no sequencer property +// * returns number of spells that can be stored in any other case +int IPGetItemSequencerProperty(object oItem, object oPC = OBJECT_SELF); + +// * returns TRUE if the item has the OnHit:IntelligentWeapon property. +int IPGetIsIntelligentWeapon(object oItem); + +// * Mapping between numbers and power constants for ITEM_PROPERTY_DAMAGE_BONUS +// * returns the appropriate ITEM_PROPERTY_DAMAGE_POWER_* constant for nNumber +int IPGetDamagePowerConstantFromNumber(int nNumber); + +// * returns the appropriate ITEM_PROPERTY_DAMAGE_BONUS_= constant for nNumber +// * Do not pass in any number <1 ! Will return -1 on error +int IPGetDamageBonusConstantFromNumber(int nNumber); + +// * Special Version of Copy Item Properties for use with greater wild shape +// * oOld - Item equipped before polymorphing (source for item props) +// * oNew - Item equipped after polymorphing (target for item props) +// * bWeapon - Must be set TRUE when oOld is a weapon. +void IPWildShapeCopyItemProperties(object oOld, object oNew, int bWeapon = FALSE); + +// * Returns the current enhancement bonus of a weapon (+1 to +20), 0 if there is +// * no enhancement bonus. You can test for a specific type of enhancement bonus +// * by passing the appropritate ITEM_PROPERTY_ENHANCEMENT_BONUS* constant into +// * nEnhancementBonusType +int IPGetWeaponEnhancementBonus(object oWeapon, int nEnhancementBonusType = ITEM_PROPERTY_ENHANCEMENT_BONUS, int bIgnoreTemporary = TRUE); + +// * Shortcut function to set the enhancement bonus of a weapon to a certain bonus +// * Specifying bOnlyIfHigher as TRUE will prevent a bonus lower than the requested +// * bonus from being applied. Valid values for nBonus are 1 to 20. +void IPSetWeaponEnhancementBonus(object oWeapon, int nBonus, int bOnlyIfHigher = TRUE); + +// * Shortcut function to upgrade the enhancement bonus of a weapon by the +// * number specified in nUpgradeBy. If the resulting new enhancement bonus +// * would be out of bounds (>+20), it will be set to +20 +void IPUpgradeWeaponEnhancementBonus(object oWeapon, int nUpgradeBy); + +// * Returns TRUE if a character has any item equipped that has the itemproperty +// * defined in nItemPropertyConst in it (ITEM_PROPERTY_* constant) +int IPGetHasItemPropertyOnCharacter(object oPC, int nItemPropertyConst); + +// * Returns an integer with the number of properties present oItem +int IPGetNumberOfItemProperties(object oItem); + +// returns the IP damage constant for a given number +int IPDamageConstant(int nDamBon); + +#include "prc_ipfeat_const" +#include "inc_utility" + +//------------------------------------------------------------------------------ +// I M P L E M E N T A T I O N +//------------------------------------------------------------------------------ + +// ---------------------------------------------------------------------------- +// Removes all itemproperties with matching nItemPropertyType and +// nItemPropertyDuration (a DURATION_TYPE_* constant) +// ---------------------------------------------------------------------------- +void IPRemoveMatchingItemProperties(object oItem, int nItemPropertyType, int nItemPropertyDuration = DURATION_TYPE_TEMPORARY, int nItemPropertySubType = -1) +{ + itemproperty ip = GetFirstItemProperty(oItem); + + // valid ip? + while (GetIsItemPropertyValid(ip)) + { + // same property type? + if ((GetItemPropertyType(ip) == nItemPropertyType)) + { + // same duration or duration ignored? + if (GetItemPropertyDurationType(ip) == nItemPropertyDuration || nItemPropertyDuration == -1) + { + // same subtype or subtype ignored + if (GetItemPropertySubType(ip) == nItemPropertySubType || nItemPropertySubType == -1) + { + // Put a warning into the logfile if someone tries to remove a permanent ip with a temporary one! + /*if (nItemPropertyDuration == DURATION_TYPE_TEMPORARY && GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT) + { + WriteTimestampedLogEntry("prc_x2_itemprop:: IPRemoveMatchingItemProperties() - WARNING: Permanent item property removed by temporary on "+GetTag(oItem)); + } + */ + RemoveItemProperty(oItem, ip); + } + } + } + ip = GetNextItemProperty(oItem); + } +} + +// ---------------------------------------------------------------------------- +// Removes ALL item properties from oItem matching nItemPropertyDuration +// ---------------------------------------------------------------------------- +void IPRemoveAllItemProperties(object oItem, int nItemPropertyDuration = DURATION_TYPE_TEMPORARY) +{ + itemproperty ip = GetFirstItemProperty(oItem); + while (GetIsItemPropertyValid(ip)) + { + if (GetItemPropertyDurationType(ip) == nItemPropertyDuration) + { + RemoveItemProperty(oItem, ip); + } + ip = GetNextItemProperty(oItem); + } +} + +// ---------------------------------------------------------------------------- +// returns TRUE if item can be equipped. Uses Get2DAString, so do not use in a loop! +// ---------------------------------------------------------------------------- +int IPGetIsItemEquipable(object oItem) +{ + int nBaseType =GetBaseItemType(oItem); + + // fix, if we get BASE_ITEM_INVALID (usually because oItem is invalid), we + // need to make sure that this function returns FALSE + if(nBaseType==BASE_ITEM_INVALID) return FALSE; + + string sResult = Get2DACache("baseitems","EquipableSlots",nBaseType); + return (sResult != "0x00000"); +} + +// ---------------------------------------------------------------------------- +// Changes the color of an item armor +// oItem - The armor +// nColorType - ITEM_APPR_ARMOR_COLOR_* constant +// nColor - color from 0 to 63 +// Since oItem is destroyed in the process, the function returns +// the item created with the color changed +// ---------------------------------------------------------------------------- +object IPDyeArmor(object oItem, int nColorType, int nColor) +{ + object oRet = CopyItemAndModify(oItem,ITEM_APPR_TYPE_ARMOR_COLOR,nColorType,nColor,TRUE); + DestroyObject(oItem); // remove old item + return oRet; //return new item +} + +// ---------------------------------------------------------------------------- +// Returns the container used for item property and appearance modifications in the +// module. If it does not exist, it is created +// ---------------------------------------------------------------------------- +object IPGetIPWorkContainer(object oCaller = OBJECT_SELF) +{ + object oRet = GetObjectByTag(X2_IP_WORK_CONTAINER_TAG); + if (oRet == OBJECT_INVALID) + { + oRet = CreateObject(OBJECT_TYPE_PLACEABLE,X2_IP_WORK_CONTAINER_TAG,GetStartingLocation()); + effect eInvis = EffectVisualEffect( VFX_DUR_CUTSCENE_INVISIBILITY); + eInvis = ExtraordinaryEffect(eInvis); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,eInvis,oRet); + if (oRet == OBJECT_INVALID) + { + WriteTimestampedLogEntry("prc_x2_itemprop - critical: Missing container with tag " +X2_IP_WORK_CONTAINER_TAG + "!!"); + } + } + + + return oRet; +} + +// ---------------------------------------------------------------------------- +// This function needs to be rather extensive and needs to be updated if there are new +// ip types we want to use, but it goes into the item property include anyway +// ---------------------------------------------------------------------------- +//This version has been fixed up by Sunjammer from the bioware forums +//http://nwn.bioware.com/forums/viewtopic.html?topic=431299&forum=47 +itemproperty IPGetItemPropertyByID(int nPropID, int nParam1=0, int nParam2=0, int nParam3=0, int nParam4=0) +{ + itemproperty ipRet; + if (nPropID == ITEM_PROPERTY_ABILITY_BONUS) + { + ipRet = ItemPropertyAbilityBonus(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_AC_BONUS) + { + ipRet = ItemPropertyACBonus(nParam1); + } + else if (nPropID == ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP) + { + ipRet = ItemPropertyACBonusVsAlign(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE) + { + ipRet = ItemPropertyACBonusVsDmgType(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP) + { + ipRet = ItemPropertyACBonusVsRace(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_AC_BONUS_VS_SPECIFIC_ALIGNMENT) + { + ipRet = ItemPropertyACBonusVsSAlign(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_ATTACK_BONUS) + { + ipRet = ItemPropertyAttackBonus(nParam1); + } + else if (nPropID == ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP) + { + ipRet = ItemPropertyAttackBonusVsAlign(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP) + { + ipRet = ItemPropertyAttackBonusVsRace(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT) + { + ipRet = ItemPropertyAttackBonusVsSAlign(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_BASE_ITEM_WEIGHT_REDUCTION) + { + ipRet = ItemPropertyWeightReduction(nParam1); + } + else if (nPropID == ITEM_PROPERTY_BONUS_FEAT) + { + ipRet = PRCItemPropertyBonusFeat(nParam1); + } + else if (nPropID == ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N) + { + ipRet = ItemPropertyBonusLevelSpell(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_CAST_SPELL) + { + ipRet = ItemPropertyCastSpell(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_DAMAGE_BONUS) + { + ipRet = ItemPropertyDamageBonus(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP) + { + ipRet = ItemPropertyDamageBonusVsAlign(nParam1, nParam2, nParam3); + } + else if (nPropID == ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP) + { + ipRet = ItemPropertyDamageBonusVsRace(nParam1, nParam2, nParam3); + } + else if (nPropID == ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT) + { + ipRet = ItemPropertyDamageBonusVsSAlign(nParam1, nParam2, nParam3); + } + else if (nPropID == ITEM_PROPERTY_DAMAGE_REDUCTION) + { + ipRet = ItemPropertyDamageReduction(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_DAMAGE_RESISTANCE) + { + ipRet = ItemPropertyDamageResistance(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_DAMAGE_VULNERABILITY) + { + ipRet = ItemPropertyDamageResistance(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_DARKVISION) + { + ipRet = ItemPropertyDarkvision(); + } + else if (nPropID == ITEM_PROPERTY_DECREASED_ABILITY_SCORE) + { + ipRet = ItemPropertyDecreaseAbility(nParam1,nParam2); + } + else if (nPropID == ITEM_PROPERTY_DECREASED_AC) + { + ipRet = ItemPropertyDecreaseAC(nParam1,nParam2); + } + else if (nPropID == ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER) + { + ipRet = ItemPropertyAttackPenalty(nParam1); + } + else if (nPropID == ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER) + { + ipRet = ItemPropertyEnhancementPenalty(nParam1); + } + else if (nPropID == ITEM_PROPERTY_DECREASED_SAVING_THROWS) + { + ipRet = ItemPropertyReducedSavingThrow(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC) + { + ipRet = ItemPropertyBonusSavingThrowVsX(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_DECREASED_SKILL_MODIFIER) + { + ipRet = ItemPropertyDecreaseSkill(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_ENHANCED_CONTAINER_REDUCED_WEIGHT) + { + ipRet = ItemPropertyContainerReducedWeight(nParam1); + } + else if (nPropID == ITEM_PROPERTY_ENHANCEMENT_BONUS) + { + ipRet = ItemPropertyEnhancementBonus(nParam1); + } + else if (nPropID == ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP) + { + ipRet = ItemPropertyEnhancementBonusVsAlign(nParam1,nParam2); + } + else if (nPropID == ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT) + { + ipRet = ItemPropertyEnhancementBonusVsSAlign(nParam1,nParam2); + } + else if (nPropID == ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP) + { + ipRet = ItemPropertyEnhancementBonusVsRace(nParam1,nParam2); + } + else if (nPropID == ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE) + { + ipRet = ItemPropertyExtraMeleeDamageType(nParam1); + } + else if (nPropID == ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE) + { + ipRet = ItemPropertyExtraRangeDamageType(nParam1); + } + else if (nPropID == ITEM_PROPERTY_HASTE) + { + ipRet = ItemPropertyHaste(); + } + else if (nPropID == ITEM_PROPERTY_KEEN) + { + ipRet = ItemPropertyKeen(); + } + else if (nPropID == ITEM_PROPERTY_LIGHT) + { + ipRet = ItemPropertyLight(nParam1,nParam2); + } + else if (nPropID == ITEM_PROPERTY_MASSIVE_CRITICALS) + { + ipRet = ItemPropertyMassiveCritical(nParam1); + } + else if (nPropID == ITEM_PROPERTY_NO_DAMAGE) + { + ipRet = ItemPropertyNoDamage(); + } + else if (nPropID == ITEM_PROPERTY_ON_HIT_PROPERTIES) + { + ipRet = ItemPropertyOnHitProps(nParam1, nParam2, nParam3); + } + else if (nPropID == ITEM_PROPERTY_TRAP) + { + ipRet = ItemPropertyTrap(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_TRUE_SEEING) + { + ipRet = ItemPropertyTrueSeeing(); + } + else if (nPropID == ITEM_PROPERTY_UNLIMITED_AMMUNITION) + { + ipRet = ItemPropertyUnlimitedAmmo(nParam1); + } + // SJ -----------------------------------------------------------------start- + else if (nPropID == ITEM_PROPERTY_ONHITCASTSPELL) + { + // this constructor is bugged (@ v1.65) and will reduce nParam2 by 1 + // we can compensate for this until it is fixed by adding 1 here + // however someone (you) will have to remember to remove it later! + ipRet = ItemPropertyOnHitCastSpell(nParam1, nParam2 + 1); + //Primogenitor + //Not strictly true. You put in the level of the spell, its just that + //this doesnt match the row of the 2da directly. Thus you only need + //to remember this when getting the value later on. + ipRet = ItemPropertyOnHitCastSpell(nParam1, nParam2); + } + // SJ -------------------------------------------------------------------end- + else if (nPropID == ITEM_PROPERTY_ARCANE_SPELL_FAILURE) + { + ipRet = ItemPropertyArcaneSpellFailure(nParam1); + } + // SJ -----------------------------------------------------------------start- + else if (nPropID == ITEM_PROPERTY_DECREASED_DAMAGE) + { + ipRet = ItemPropertyDamagePenalty(nParam1); + } + else if (nPropID == ITEM_PROPERTY_FREEDOM_OF_MOVEMENT) + { + ipRet = ItemPropertyFreeAction(); + } + else if (nPropID == ITEM_PROPERTY_HEALERS_KIT) + { + ipRet = ItemPropertyHealersKit(nParam1); + } + else if (nPropID == ITEM_PROPERTY_HOLY_AVENGER) + { + ipRet = ItemPropertyHolyAvenger(); + } + else if (nPropID == ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE) + { + ipRet = ItemPropertyDamageImmunity(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS) + { + ipRet = ItemPropertyImmunityMisc(nParam1); + } + else if (nPropID == ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL) + { + ipRet = ItemPropertySpellImmunitySpecific(nParam1); + } + else if (nPropID == ITEM_PROPERTY_IMMUNITY_SPELL_SCHOOL) + { + ipRet = ItemPropertySpellImmunitySchool(nParam1); + } + else if (nPropID == ITEM_PROPERTY_IMMUNITY_SPELLS_BY_LEVEL) + { + // this constructor is bugged (@ v1.65) and will reduce nParam1 by 1 + // we can compensate for this until it is fixed by adding 1 here + // however someone (you) will have to remember to remove it later! + //Primogenitor + //Fixed as of 1.67 + ipRet = ItemPropertyImmunityToSpellLevel(nParam1); + } + else if (nPropID == ITEM_PROPERTY_IMPROVED_EVASION) + { + ipRet = ItemPropertyImprovedEvasion(); + } + else if (nPropID == ITEM_PROPERTY_MIGHTY) + { + ipRet = ItemPropertyMaxRangeStrengthMod(nParam1); + } + else if (nPropID == ITEM_PROPERTY_MONSTER_DAMAGE) + { + ipRet = ItemPropertyMonsterDamage(nParam1); + } + else if (nPropID == ITEM_PROPERTY_ON_MONSTER_HIT) + { + ipRet = ItemPropertyOnMonsterHitProperties(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_REGENERATION) + { + ipRet = ItemPropertyRegeneration(nParam1); + } + else if (nPropID == ITEM_PROPERTY_REGENERATION_VAMPIRIC) + { + ipRet = ItemPropertyVampiricRegeneration(nParam1); + } + else if (nPropID == ITEM_PROPERTY_SAVING_THROW_BONUS) + { + ipRet = ItemPropertyBonusSavingThrowVsX(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC) + { + ipRet = ItemPropertyBonusSavingThrow(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_SKILL_BONUS) + { + ipRet = ItemPropertySkillBonus(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_SPECIAL_WALK) + { + ipRet = ItemPropertySpecialWalk(nParam1); + } + else if (nPropID == ITEM_PROPERTY_SPELL_RESISTANCE) + { + ipRet = ItemPropertyBonusSpellResistance(nParam1); + } + else if (nPropID == ITEM_PROPERTY_THIEVES_TOOLS) + { + ipRet = ItemPropertyThievesTools(nParam1); + } + else if (nPropID == ITEM_PROPERTY_TURN_RESISTANCE) + { + ipRet = ItemPropertyTurnResistance(nParam1); + } + else if (nPropID == ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP) + { + ipRet = ItemPropertyLimitUseByAlign(nParam1); + } + else if (nPropID == ITEM_PROPERTY_USE_LIMITATION_CLASS) + { + ipRet = ItemPropertyLimitUseByClass(nParam1); + } + else if (nPropID == ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE) + { + ipRet = ItemPropertyLimitUseByRace(nParam1); + } + else if (nPropID == ITEM_PROPERTY_USE_LIMITATION_SPECIFIC_ALIGNMENT) + { + ipRet = ItemPropertyLimitUseBySAlign(nParam1); + } + else if (nPropID == ITEM_PROPERTY_VISUALEFFECT) + { + ipRet = ItemPropertyVisualEffect(nParam1); + } + else if (nPropID == ITEM_PROPERTY_WEIGHT_INCREASE) + { + ipRet = ItemPropertyWeightIncrease(nParam1); + } + // SJ -------------------------------------------------------------------end- + return ipRet; +} + + +// ---------------------------------------------------------------------------- +// Returns TRUE if oItem is a projectile +// ---------------------------------------------------------------------------- +int IPGetIsProjectile(object oItem) +{ + int nBT = GetBaseItemType(oItem); + return nBT == BASE_ITEM_ARROW + || nBT == BASE_ITEM_BOLT + || nBT == BASE_ITEM_BULLET; +} + +// ---------------------------------------------------------------------------- +// Returns TRUE if oItem is a ranged weapon +// ---------------------------------------------------------------------------- +int IPGetIsRangedWeapon(object oItem) +{ + return GetWeaponRanged(oItem); // doh ! +} + +// ---------------------------------------------------------------------------- +// Returns TRUE if oItem is a melee weapon +// ---------------------------------------------------------------------------- +int IPGetIsMeleeWeapon(object oItem) +{ +//wepon type/size && !ranged + + + //Declare major variables + int nItem = GetBaseItemType(oItem); + +if(nItem == BASE_ITEM_BASTARDSWORD + || nItem == BASE_ITEM_BATTLEAXE + || nItem == BASE_ITEM_DOUBLEAXE + || nItem == BASE_ITEM_GREATAXE + || nItem == BASE_ITEM_GREATSWORD + || nItem == BASE_ITEM_HALBERD + || nItem == BASE_ITEM_HANDAXE + || nItem == BASE_ITEM_KAMA + || nItem == BASE_ITEM_KATANA + || nItem == BASE_ITEM_KUKRI + || nItem == BASE_ITEM_LONGSWORD + || nItem == BASE_ITEM_SCIMITAR + || nItem == BASE_ITEM_SCYTHE + || nItem == BASE_ITEM_SICKLE + || nItem == BASE_ITEM_TWOBLADEDSWORD + || nItem == BASE_ITEM_CLUB + || nItem == BASE_ITEM_DAGGER + || nItem == BASE_ITEM_DIREMACE + || nItem == BASE_ITEM_HEAVYFLAIL + || nItem == BASE_ITEM_LIGHTFLAIL + || nItem == BASE_ITEM_LIGHTHAMMER + || nItem == BASE_ITEM_LIGHTMACE + || nItem == BASE_ITEM_MORNINGSTAR + || nItem == BASE_ITEM_QUARTERSTAFF + || nItem == BASE_ITEM_MAGICSTAFF + || nItem == BASE_ITEM_RAPIER + || nItem == BASE_ITEM_WHIP + || nItem == BASE_ITEM_SHORTSPEAR + || nItem == BASE_ITEM_SHORTSWORD + || nItem == BASE_ITEM_WARHAMMER + || nItem == BASE_ITEM_DWARVENWARAXE + || nItem == BASE_ITEM_TRIDENT + || nItem == BASE_ITEM_HEAVY_PICK + || nItem == BASE_ITEM_LIGHT_PICK + || nItem == BASE_ITEM_SAI + || nItem == BASE_ITEM_NUNCHAKU + || nItem == BASE_ITEM_FALCHION + || nItem == BASE_ITEM_SAP + || nItem == BASE_ITEM_KATAR + || nItem == BASE_ITEM_HEAVY_MACE + || nItem == BASE_ITEM_MAUL + || nItem == BASE_ITEM_DOUBLE_SCIMITAR + || nItem == BASE_ITEM_GOAD + || nItem == BASE_ITEM_EAGLE_CLAW + || nItem == BASE_ITEM_ELVEN_LIGHTBLADE // PRC weapons + || nItem == BASE_ITEM_ELVEN_THINBLADE + || nItem == BASE_ITEM_ELVEN_COURTBLADE + || nItem == BASE_ITEM_CRAFTED_STAFF + || nItem == 300 //CEP Trident + || nItem == 303 //CEP Sai + || nItem == 304 //CEP nunchaku + || nItem == 305 //CEP falchion + || nItem == 309 //CEP assassin dager + || nItem == 310 //CEP katar + || nItem == 312 //CEP light mace 2 + || nItem == 313 //CEP kukri2 + || nItem == 316 //CEP falchion + || nItem == 317 //CEP heavymace + || nItem == 318 //CEP maul + || nItem == 319 //CEP sh_x1_mercuryls + || nItem == 320 //CEP sh_x1_mercurygs + || nItem == 321 //CEP sh_x1_doublesc + || nItem == 322 //CEP goad + || nItem == 323 //CEP windfirewheel + || nItem == 324 //CEP maugdoublesword + ) + { + return TRUE; + } + return FALSE; +} + +// ---------------------------------------------------------------------------- +// Returns TRUE if weapon is a blugeoning weapon +// Uses Get2DAString! +// ---------------------------------------------------------------------------- +int IPGetIsBludgeoningWeapon(object oItem) +{ + int nBT = GetBaseItemType(oItem); + int nWeapon = ( StringToInt(Get2DACache("baseitems","WeaponType",nBT))); + // 2 = bludgeoning + return (nWeapon == 2); +} + +// ---------------------------------------------------------------------------- +// Return the IP_CONST_CASTSPELL_* ID matching to the SPELL_* constant given +// in nSPELL_ID. +// This uses Get2DAstring, so it is slow. Avoid using in loops! +// returns -1 if there is no matching property for a spell +// ---------------------------------------------------------------------------- +int IPGetIPConstCastSpellFromSpellID(int nSpellID) +{ + // look up Spell Property Index + string sTemp = Get2DACache("des_crft_spells","IPRP_SpellIndex",nSpellID); + + if (sTemp == "") // invalid nSpellID + { + if (DEBUG) DoDebug("prc_x2_craft.nss::GetIPConstCastSpellFromSpellID called with invalid nSpellID" + IntToString(nSpellID)); + return -1; + } + + int nSpellPrpIdx = StringToInt(sTemp); + return nSpellPrpIdx; +} +// ---------------------------------------------------------------------------- +// Returns TRUE if an item has ITEM_PROPERTY_ON_HIT and the specified nSubType +// possible values for nSubType can be taken from IPRP_ONHIT.2da +// popular ones: +// 5 - Daze +// 19 - ItemPoison +// 24 - Vorpal +// ---------------------------------------------------------------------------- +int IPGetItemHasItemOnHitPropertySubType(object oTarget, int nSubType) +{ + if (GetItemHasItemProperty(oTarget,ITEM_PROPERTY_ON_HIT_PROPERTIES)) + { + itemproperty ipTest = GetFirstItemProperty(oTarget); + + // loop over item properties to see if there is already a poison effect + while (GetIsItemPropertyValid(ipTest)) + { + + if (GetItemPropertySubType(ipTest) == nSubType) //19 == onhit poison + { + return TRUE; + } + + ipTest = GetNextItemProperty(oTarget); + + } + } + return FALSE; +} + +// ---------------------------------------------------------------------------- +// Returns the number of possible armor part variations for the specified part +// nPart - ITEM_APPR_ARMOR_MODEL_* constant +// Uses Get2DAstring, so do not use in loops +// ---------------------------------------------------------------------------- +int IPGetNumberOfArmorAppearances(int nPart) +{ + int nRet; + //SpeakString(Get2DAString(X2_IP_ARMORPARTS_2DA ,"NumParts",nPart)); + nRet = StringToInt(Get2DAString(X2_IP_ARMORPARTS_2DA ,"NumParts",nPart)); + return nRet; +} + +// ---------------------------------------------------------------------------- +// (private) +// Returns the previous or next armor appearance type, depending on the specified +// mode (X2_IP_ARMORTYPE_NEXT || X2_IP_ARMORTYPE_PREV) +// ---------------------------------------------------------------------------- +int IPGetArmorAppearanceType(object oArmor, int nPart, int nMode) +{ + string sMode; + + switch (nMode) + { + case X2_IP_ARMORTYPE_NEXT : sMode ="Next"; + break; + case X2_IP_ARMORTYPE_PREV : sMode ="Prev"; + break; + } + + int nCurrApp = GetItemAppearance(oArmor,ITEM_APPR_TYPE_ARMOR_MODEL,nPart); + int nRet; + + if (nPart ==ITEM_APPR_ARMOR_MODEL_TORSO) + { + nRet = StringToInt(Get2DAString(X2_IP_ARMORAPPEARANCE_2DA ,sMode,nCurrApp)); + return nRet; + } + else + { + int nMax = IPGetNumberOfArmorAppearances(nPart)-1; // index from 0 .. numparts -1 + int nMin = 1; // this prevents part 0 from being chosen (naked) + + // return a random valid armor tpze + if (nMode == X2_IP_ARMORTYPE_RANDOM) + { + return Random(nMax)+nMin; + } + + else + { + if (nMode == X2_IP_ARMORTYPE_NEXT) + { + // current appearance is max, return min + if (nCurrApp == nMax) + { + return nMin; + } + // current appearance is min, return max -1 + else if (nCurrApp == nMin) + { + nRet = nMin+1; + return nRet; + } + + //SpeakString("next"); + // next + nRet = nCurrApp +1; + return nRet; + } + else // previous + { + // current appearance is max, return nMax-1 + if (nCurrApp == nMax) + { + nRet = nMax--; + return nRet; + } + // current appearance is min, return max + else if (nCurrApp == nMin) + { + return nMax; + } + + //SpeakString("prev"); + + nRet = nCurrApp -1; + return nRet; + } + } + + } + +} + +// ---------------------------------------------------------------------------- +// Returns the next valid appearance type for oArmor +// Uses Get2DAstring, so do not use in loops +// ---------------------------------------------------------------------------- +int IPGetNextArmorAppearanceType(object oArmor, int nPart) +{ + return IPGetArmorAppearanceType(oArmor, nPart, X2_IP_ARMORTYPE_NEXT ); + +} + +// ---------------------------------------------------------------------------- +// Returns the next valid appearance type for oArmor +// Uses Get2DAstring, so do not use in loops +// ---------------------------------------------------------------------------- +int IPGetPrevArmorAppearanceType(object oArmor, int nPart) +{ + return IPGetArmorAppearanceType(oArmor, nPart, X2_IP_ARMORTYPE_PREV ); +} + +// ---------------------------------------------------------------------------- +// Returns the next valid appearance type for oArmor +// Uses Get2DAstring, so do not use in loops +// ---------------------------------------------------------------------------- +int IPGetRandomArmorAppearanceType(object oArmor, int nPart) +{ + return IPGetArmorAppearanceType(oArmor, nPart, X2_IP_ARMORTYPE_RANDOM ); +} + +// ---------------------------------------------------------------------------- +// Returns a new armor based of oArmor with nPartModified +// nPart - ITEM_APPR_ARMOR_MODEL_* constant of the part to be changed +// nMode - +// X2_IP_ARMORTYPE_NEXT - next valid appearance +// X2_IP_ARMORTYPE_PREV - previous valid apperance; +// X2_IP_ARMORTYPE_RANDOM - random valid appearance (torso is never changed); +// bDestroyOldOnSuccess - Destroy oArmor in process? +// Uses Get2DAstring, so do not use in loops +// ---------------------------------------------------------------------------- +object IPGetModifiedArmor(object oArmor, int nPart, int nMode, int bDestroyOldOnSuccess) +{ + int nNewApp = IPGetArmorAppearanceType(oArmor, nPart, nMode ); + //SpeakString("old: " + IntToString(GetItemAppearance(oArmor,ITEM_APPR_TYPE_ARMOR_MODEL,nPart))); + //SpeakString("new: " + IntToString(nNewApp)); + + object oNew = CopyItemAndModify(oArmor,ITEM_APPR_TYPE_ARMOR_MODEL, nPart, nNewApp,TRUE); + + if (oNew != OBJECT_INVALID) + { + if( bDestroyOldOnSuccess ) + { + DestroyObject(oArmor); + } + return oNew; + } + // Safety fallback, return old armor on failures + return oArmor; +} + +// ---------------------------------------------------------------------------- +// Creates a special ring on oCreature that gives +// all weapon and armor proficiencies to the wearer +// Item is set non dropable +// ---------------------------------------------------------------------------- +object IPCreateProficiencyFeatItemOnCreature(object oCreature) +{ + // create a simple golden ring + object oRing = CreateItemOnObject("nw_it_mring023",oCreature); + + // just in case + SetDroppableFlag(oRing, FALSE); + + itemproperty ip = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_HEAVY); + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oRing); + ip = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_MEDIUM); + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oRing); + ip = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_LIGHT); + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oRing); + ip = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_EXOTIC); + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oRing); + ip = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_MARTIAL); + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oRing); + ip = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_SIMPLE); + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oRing); + + return oRing; +} + + +// ---------------------------------------------------------------------------- +// Add an item property in a safe fashion, preventing unwanted stacking +// Parameters: +// oItem - the item to add the property to +// ip - the itemproperty to add +// fDuration - set 0.0f to add the property permanent, anything else is temporary +// nAddItemPropertyPolicy - How to handle existing properties. Valid values are: +// X2_IP_ADDPROP_POLICY_REPLACE_EXISTING - remove any property of the same type, subtype, durationtype before adding; +// X2_IP_ADDPROP_POLICY_KEEP_EXISTING - do not add if any property with same type, subtype and durationtype already exists; +// X2_IP_ADDPROP_POLICY_IGNORE_EXISTING - add itemproperty in any case - Do not Use with OnHit or OnHitSpellCast props! +// bIgnoreDurationType - If set to TRUE, an item property will be considered identical even if the DurationType is different. Be careful when using this +// with X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, as this could lead to a temporary item property removing a permanent one +// bIgnoreSubType - If set to TRUE an item property will be considered identical even if the SubType is different. +// +// * WARNING: This function is used all over the game. Touch it and break it and the wrath +// of the gods will come down on you faster than you can saz "I didn't do it" +// ---------------------------------------------------------------------------- +void IPSafeAddItemProperty(object oItem, itemproperty ip, float fDuration =0.0f, int nAddItemPropertyPolicy = X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, int bIgnoreDurationType = FALSE, int bIgnoreSubType = FALSE) +{ + int nType = GetItemPropertyType(ip); + int nSubType = GetItemPropertySubType(ip); + int nDuration; + // if duration is 0.0f, make the item property permanent + if (fDuration == 0.0f) + { + + nDuration = DURATION_TYPE_PERMANENT; + } else + { + + nDuration = DURATION_TYPE_TEMPORARY; + } + + int nDurationCompare = nDuration; + if (bIgnoreDurationType) + { + nDurationCompare = -1; + } + + if (nAddItemPropertyPolicy == X2_IP_ADDPROP_POLICY_REPLACE_EXISTING) + { + + // remove any matching properties + if (bIgnoreSubType) + { + nSubType = -1; + } + IPRemoveMatchingItemProperties(oItem, nType, nDurationCompare, nSubType ); + } + else if (nAddItemPropertyPolicy == X2_IP_ADDPROP_POLICY_KEEP_EXISTING ) + { + // do not replace existing properties + if(IPGetItemHasProperty(oItem, ip, nDurationCompare, bIgnoreSubType)) + { + return; // item already has property, return + } + } + else //X2_IP_ADDPROP_POLICY_IGNORE_EXISTING + { + + } + + if (nDuration == DURATION_TYPE_PERMANENT) + { + AddItemProperty(nDuration,ip, oItem); + } + else + { + AddItemProperty(nDuration,ip, oItem,fDuration); + } +} + +// ---------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- +int IPGetItemHasProperty(object oItem, itemproperty ipCompareTo, int nDurationCompare, int bIgnoreSubType = FALSE) +{ + itemproperty ip = GetFirstItemProperty(oItem); + + //PrintString ("Filter - T:" + IntToString(GetItemPropertyType(ipCompareTo))+ " S: " + IntToString(GetItemPropertySubType(ipCompareTo)) + " (Ignore: " + IntToString (bIgnoreSubType) + ") D:" + IntToString(nDurationCompare)); + while (GetIsItemPropertyValid(ip)) + { + // PrintString ("Testing - T: " + IntToString(GetItemPropertyType(ip))); + if ((GetItemPropertyType(ip) == GetItemPropertyType(ipCompareTo))) + { + //PrintString ("**Testing - S: " + IntToString(GetItemPropertySubType(ip))); + if (GetItemPropertySubType(ip) == GetItemPropertySubType(ipCompareTo) || bIgnoreSubType) + { + // PrintString ("***Testing - d: " + IntToString(GetItemPropertyDurationType(ip))); + if (GetItemPropertyDurationType(ip) == nDurationCompare || nDurationCompare == -1) + { + //PrintString ("***FOUND"); + return TRUE; // if duration is not ignored and durationtypes are equal, true + } + } + } + ip = GetNextItemProperty(oItem); + } + //PrintString ("Not Found"); + return FALSE; +} + + +object IPGetTargetedOrEquippedMeleeWeapon() +{ + object oTarget = PRCGetSpellTargetObject(); + if(GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM) + { + if (IPGetIsMeleeWeapon(oTarget)) + { + return oTarget; + } + else + { + return OBJECT_INVALID; + } + + } + + object oWeapon1 = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if (GetIsObjectValid(oWeapon1) && IPGetIsMeleeWeapon(oWeapon1)) + { + return oWeapon1; + } + + oWeapon1 = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget); + if (GetIsObjectValid(oWeapon1) && IPGetIsMeleeWeapon(oWeapon1)) + { + return oWeapon1; + } + + oWeapon1 = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTarget); + if (GetIsObjectValid(oWeapon1)) + { + return oWeapon1; + } + + oWeapon1 = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTarget); + if (GetIsObjectValid(oWeapon1)) + { + return oWeapon1; + } + + return OBJECT_INVALID; + +} + +object IPGetTargetedOrEquippedArmor(int bAllowShields = FALSE) +{ + object oTarget = PRCGetSpellTargetObject(); + + // If the target is a valid item + if (GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM) + { + // Check if the item is armor + if (GetBaseItemType(oTarget) == BASE_ITEM_ARMOR) + { + return oTarget; + } + // Check if the item is a shield and shields are allowed + if (bAllowShields && (GetBaseItemType(oTarget) == BASE_ITEM_LARGESHIELD || + GetBaseItemType(oTarget) == BASE_ITEM_SMALLSHIELD || + GetBaseItemType(oTarget) == BASE_ITEM_TOWERSHIELD)) + { + return oTarget; + } + return OBJECT_INVALID; + } + + // If the target is a creature + if (GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_CREATURE) + { + // Check the equipped armor + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget); + if (GetIsObjectValid(oArmor) && GetBaseItemType(oArmor) == BASE_ITEM_ARMOR) + { + return oArmor; + } + + // Check the equipped shield if shields are allowed + if (bAllowShields) + { + oArmor = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget); + if (GetIsObjectValid(oArmor) && (GetBaseItemType(oArmor) == BASE_ITEM_LARGESHIELD || + GetBaseItemType(oArmor) == BASE_ITEM_SMALLSHIELD || + GetBaseItemType(oArmor) == BASE_ITEM_TOWERSHIELD)) + { + return oArmor; + } + } + } + + // Return invalid object if no valid armor or shield is found + return OBJECT_INVALID; +} + + +/* object IPGetTargetedOrEquippedArmor(int bAllowShields = FALSE) +{ + object oTarget = PRCGetSpellTargetObject(); + if(GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM) + { + if (GetBaseItemType(oTarget) == BASE_ITEM_ARMOR) + { + return oTarget; + } + else + { + if ((bAllowShields) && (GetBaseItemType(oTarget) == BASE_ITEM_LARGESHIELD || + GetBaseItemType(oTarget) == BASE_ITEM_SMALLSHIELD || + GetBaseItemType(oTarget) == BASE_ITEM_TOWERSHIELD)) + { + return oTarget; + } + else + { + return OBJECT_INVALID; + } + } + + } + + object oArmor1 = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget); + if (GetIsObjectValid(oArmor1) && GetBaseItemType(oArmor1) == BASE_ITEM_ARMOR) + { + return oArmor1; + } + if (bAllowShields != FALSE) + { + oArmor1 = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget); + if (GetIsObjectValid(oArmor1) && (GetBaseItemType(oTarget) == BASE_ITEM_LARGESHIELD || + GetBaseItemType(oTarget) == BASE_ITEM_SMALLSHIELD || + GetBaseItemType(oTarget) == BASE_ITEM_TOWERSHIELD)) + { + return oArmor1; + } + } + + + + return OBJECT_INVALID; + +} + */ +// ---------------------------------------------------------------------------- +// Returns FALSE it the item has no sequencer property +// Returns number of spells that can be stored in any other case +// ---------------------------------------------------------------------------- +int IPGetItemSequencerProperty(object oItem, object oPC = OBJECT_SELF) +{ + if (!GetItemHasItemProperty(oItem, ITEM_PROPERTY_CAST_SPELL)) + { + return FALSE; + } + + int nCnt; + itemproperty ip; + + ip = GetFirstItemProperty(oItem); + + while (GetIsItemPropertyValid(ip) && nCnt ==0) + { + if (GetItemPropertyType(ip) ==ITEM_PROPERTY_CAST_SPELL) + { + if(GetItemPropertySubType(ip) == 523) // sequencer 3 + { + nCnt = 3; + } + else if(GetItemPropertySubType(ip) == 522) // sequencer 2 + { + nCnt = 2; + } + else if(GetItemPropertySubType(ip) == 521) // sequencer 1 + { + nCnt = 1; + } + } + ip = GetNextItemProperty(oItem); + } + return nCnt; +} + +// ---------------------------------------------------------------------------- +// Returns number of spells that can be channeled through item +// ---------------------------------------------------------------------------- +int IPGetItemChannelingProperty(object oItem, object oPC = OBJECT_SELF) +{ + int nCnt; + //arcane archer check + if(GetLevelByClass(CLASS_TYPE_ARCANE_ARCHER, oPC) >= 2 + && GetPRCSwitch(PRC_USE_NEW_IMBUE_ARROW) + && GetBaseItemType(oItem) == BASE_ITEM_ARROW) + { + FloatingTextStringOnCreature("* Imbue Arrow success *", oPC); + nCnt = 1; + } + //spellsword + else if(GetLevelByClass(CLASS_TYPE_SPELLSWORD, oPC) >= 4 + && IPGetIsMeleeWeapon(oItem)) + { + //These are the channel spell charges for the day + int nUses = GetPersistantLocalInt(oPC,"spellswordchannelcharges"); + if(nUses == 0) + { + FloatingTextStringOnCreature("* You have no Channel Spell uses remaining *",oPC); + } + else + { + int iLevel = GetLevelByClass(CLASS_TYPE_SPELLSWORD,oPC); + //Here we check if the spellsword has the multiple channel spell ability + //and store the spell on the weapon with the StoreSpells function. + //If there are multiple channels, we inform the function in which order + //they are stored with the help of a local integer. + if(iLevel >= 4 && iLevel < 10) + nCnt = 1; + else if(iLevel >= 10 && iLevel < 20) + nCnt = 2; + else if(iLevel >= 20 && iLevel < 30) + nCnt = 3; + else if(iLevel >= 30) + nCnt = 4; + + nUses -= 1; + FloatingTextStringOnCreature(IntToString(nUses)+" uses of Channel Spell remaining",oPC); + SetPersistantLocalInt(oPC, "spellswordchannelcharges", nUses); + } + } + return nCnt; +} + +void IPCopyItemProperties(object oSource, object oTarget, int bIgnoreCraftProps = TRUE) +{ + itemproperty ip = GetFirstItemProperty(oSource); + int nSub; + + while (GetIsItemPropertyValid(ip)) + { + if (GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT) + { + if (bIgnoreCraftProps) + { + if (GetItemPropertyType(ip) ==ITEM_PROPERTY_CAST_SPELL) + { + nSub = GetItemPropertySubType(ip); + // filter crafting properties + if (nSub != 498 && nSub != 499 && nSub != 526 && nSub != 527) + { + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oTarget); + } + } + else + { + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oTarget); + } + } + else + { + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oTarget); + } + } + ip = GetNextItemProperty(oSource); + } +} + +int IPGetIsIntelligentWeapon(object oItem) +{ + int bRet = FALSE ; + itemproperty ip = GetFirstItemProperty(oItem); + while (GetIsItemPropertyValid(ip)) + { + if (GetItemPropertyType(ip) == ITEM_PROPERTY_ONHITCASTSPELL) + { + if (GetItemPropertySubType(ip) == 135) + { + return TRUE; + } + } + ip = GetNextItemProperty(oItem); + } + return bRet; +} + +// ---------------------------------------------------------------------------- +// (private) +// ---------------------------------------------------------------------------- +int IPGetWeaponAppearanceType(object oWeapon, int nPart, int nMode) +{ + string sMode; + + switch (nMode) + { + case X2_IP_WEAPONTYPE_NEXT : sMode ="Next"; + break; + case X2_IP_WEAPONTYPE_PREV : sMode ="Prev"; + break; + } + + int nCurrApp = GetItemAppearance(oWeapon,ITEM_APPR_TYPE_WEAPON_MODEL,nPart); + int nRet; + + int nMax = 9;// IPGetNumberOfArmorAppearances(nPart)-1; // index from 0 .. numparts -1 + int nMin = 1; + + // return a random valid armor tpze + if (nMode == X2_IP_WEAPONTYPE_RANDOM) + { + return Random(nMax)+nMin; + } + + else + { + if (nMode == X2_IP_WEAPONTYPE_NEXT) + { + // current appearance is max, return min + if (nCurrApp == nMax) + { + return nMax; + } + // current appearance is min, return max -1 + else if (nCurrApp == nMin) + { + nRet = nMin +1; + return nRet; + } + + //SpeakString("next"); + // next + nRet = nCurrApp +1; + return nRet; + } + else // previous + { + // current appearance is max, return nMax-1 + if (nCurrApp == nMax) + { + nRet = nMax--; + return nRet; + } + // current appearance is min, return max + else if (nCurrApp == nMin) + { + return nMin; + } + + //SpeakString("prev"); + + nRet = nCurrApp -1; + return nRet; + } + + + } +} + +// ---------------------------------------------------------------------------- +// Returns a new armor based of oArmor with nPartModified +// nPart - ITEM_APPR_WEAPON_MODEL_* constant of the part to be changed +// nMode - +// X2_IP_WEAPONTYPE_NEXT - next valid appearance +// X2_IP_WEAPONTYPE_PREV - previous valid apperance; +// X2_IP_WEAPONTYPE_RANDOM - random valid appearance (torso is never changed); +// bDestroyOldOnSuccess - Destroy oArmor in process? +// Uses Get2DAstring, so do not use in loops +// ---------------------------------------------------------------------------- +object IPGetModifiedWeapon(object oWeapon, int nPart, int nMode, int bDestroyOldOnSuccess) +{ + int nNewApp = IPGetWeaponAppearanceType(oWeapon, nPart, nMode ); + //SpeakString("old: " + IntToString(GetItemAppearance(oWeapon,ITEM_APPR_TYPE_WEAPON_MODEL,nPart))); + //SpeakString("new: " + IntToString(nNewApp)); + object oNew = CopyItemAndModify(oWeapon,ITEM_APPR_TYPE_WEAPON_MODEL, nPart, nNewApp,TRUE); + if (oNew != OBJECT_INVALID) + { + if( bDestroyOldOnSuccess ) + { + DestroyObject(oWeapon); + } + return oNew; + } + // Safety fallback, return old weapon on failures + return oWeapon; +} + + +object IPCreateAndModifyArmorRobe(object oArmor, int nRobeType) +{ + object oRet = CopyItemAndModify(oArmor,ITEM_APPR_TYPE_ARMOR_MODEL,ITEM_APPR_ARMOR_MODEL_ROBE,nRobeType+2,TRUE); + if (GetIsObjectValid(oRet)) + { + return oRet; + } + else // safety net + { + return oArmor; + } +} + + +// ---------------------------------------------------------------------------- +// Provide mapping between numbers and power constants for +// ITEM_PROPERTY_DAMAGE_BONUS +// ---------------------------------------------------------------------------- +int IPGetDamagePowerConstantFromNumber(int nNumber) +{ + switch (nNumber) + { + case 0: return DAMAGE_POWER_NORMAL; + case 1: return DAMAGE_POWER_PLUS_ONE; + case 2: return DAMAGE_POWER_PLUS_TWO; + case 3: return DAMAGE_POWER_PLUS_THREE; + case 4: return DAMAGE_POWER_PLUS_FOUR; + case 5: return DAMAGE_POWER_PLUS_FIVE; + case 6: return DAMAGE_POWER_PLUS_SIX; + case 7: return DAMAGE_POWER_PLUS_SEVEN; + case 8: return DAMAGE_POWER_PLUS_EIGHT; + case 9: return DAMAGE_POWER_PLUS_NINE; + case 10: return DAMAGE_POWER_PLUS_TEN; + case 11: return DAMAGE_POWER_PLUS_ELEVEN; + case 12: return DAMAGE_POWER_PLUS_TWELVE; + case 13: return DAMAGE_POWER_PLUS_THIRTEEN; + case 14: return DAMAGE_POWER_PLUS_FOURTEEN; + case 15: return DAMAGE_POWER_PLUS_FIFTEEN; + case 16: return DAMAGE_POWER_PLUS_SIXTEEN; + case 17: return DAMAGE_POWER_PLUS_SEVENTEEN; + case 18: return DAMAGE_POWER_PLUS_EIGHTEEN ; + case 19: return DAMAGE_POWER_PLUS_NINTEEN; + case 20: return DAMAGE_POWER_PLUS_TWENTY; + } + + if (nNumber>20) + { + return DAMAGE_POWER_PLUS_TWENTY; + } + else + { + return DAMAGE_POWER_NORMAL; + } +} + +// ---------------------------------------------------------------------------- +// Provide mapping between numbers and bonus constants for ITEM_PROPERTY_DAMAGE_BONUS +// Note that nNumber should be > 0! +// ---------------------------------------------------------------------------- +int IPGetDamageBonusConstantFromNumber(int nNumber) +{ + switch (nNumber) + { + case 1: return DAMAGE_BONUS_1; + case 2: return DAMAGE_BONUS_2; + case 3: return DAMAGE_BONUS_3; + case 4: return DAMAGE_BONUS_4; + case 5: return DAMAGE_BONUS_5; + case 6: return DAMAGE_BONUS_6; + case 7: return DAMAGE_BONUS_7; + case 8: return DAMAGE_BONUS_8; + case 9: return DAMAGE_BONUS_9; + case 10: return DAMAGE_BONUS_10; + case 11: return DAMAGE_BONUS_11; + case 12: return DAMAGE_BONUS_12; + case 13: return DAMAGE_BONUS_13; + case 14: return DAMAGE_BONUS_14; + case 15: return DAMAGE_BONUS_15; + case 16: return DAMAGE_BONUS_16; + case 17: return DAMAGE_BONUS_17; + case 18: return DAMAGE_BONUS_18; + case 19: return DAMAGE_BONUS_19; + case 20: return DAMAGE_BONUS_20; + case 21: return DAMAGE_BONUS_21; + case 22: return DAMAGE_BONUS_22; + case 23: return DAMAGE_BONUS_23; + case 24: return DAMAGE_BONUS_24; + case 25: return DAMAGE_BONUS_25; + case 26: return DAMAGE_BONUS_26; + case 27: return DAMAGE_BONUS_27; + case 28: return DAMAGE_BONUS_28; + case 29: return DAMAGE_BONUS_29; + case 30: return DAMAGE_BONUS_30; + case 31: return DAMAGE_BONUS_31; + case 32: return DAMAGE_BONUS_32; + case 33: return DAMAGE_BONUS_33; + case 34: return DAMAGE_BONUS_34; + case 35: return DAMAGE_BONUS_35; + case 36: return DAMAGE_BONUS_36; + case 37: return DAMAGE_BONUS_37; + case 38: return DAMAGE_BONUS_38; + case 39: return DAMAGE_BONUS_39; + case 40: return DAMAGE_BONUS_40; + case 41: return DAMAGE_BONUS_41; + case 42: return DAMAGE_BONUS_42; + case 43: return DAMAGE_BONUS_43; + case 44: return DAMAGE_BONUS_44; + case 45: return DAMAGE_BONUS_45; + case 46: return DAMAGE_BONUS_46; + case 47: return DAMAGE_BONUS_47; + case 48: return DAMAGE_BONUS_48; + case 49: return DAMAGE_BONUS_49; + case 50: return DAMAGE_BONUS_50; + + } + + if (nNumber>50) + { + return DAMAGE_BONUS_50; + } + else + { + return -1; + } +} + +// ---------------------------------------------------------------------------- +// GZ, Sept. 30 2003 +// Special Version of Copy Item Properties for use with greater wild shape +// oOld - Item equipped before polymorphing (source for item props) +// oNew - Item equipped after polymorphing (target for item props) +// bWeapon - Must be set TRUE when oOld is a weapon. +// ---------------------------------------------------------------------------- +void IPWildShapeCopyItemProperties(object oOld, object oNew, int bWeapon = FALSE) +{ + if (GetIsObjectValid(oOld) && GetIsObjectValid(oNew)) + { + itemproperty ip = GetFirstItemProperty(oOld); + while (GetIsItemPropertyValid(ip)) + { + if (bWeapon) + { + if (GetWeaponRanged(oOld) == GetWeaponRanged(oNew) ) + { + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oNew); + } + } + else + { + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oNew); + } + ip = GetNextItemProperty(oOld); + + } + } +} + +// ---------------------------------------------------------------------------- +// Returns the current enhancement bonus of a weapon (+1 to +20), 0 if there is +// no enhancement bonus. You can test for a specific type of enhancement bonus +// by passing the appropritate ITEM_PROPERTY_ENHANCEMENT_BONUS* constant into +// nEnhancementBonusType +// +// Now gets the best enhancement, and ignores temporary ones by default - Flaming_Sword +// ---------------------------------------------------------------------------- +int IPGetWeaponEnhancementBonus(object oWeapon, int nEnhancementBonusType = ITEM_PROPERTY_ENHANCEMENT_BONUS, int bIgnoreTemporary = TRUE) +{ + itemproperty ip = GetFirstItemProperty(oWeapon); + int nFound = 0, nTemp = 0; + while (nFound == 0 && GetIsItemPropertyValid(ip)) + { + if (GetItemPropertyType(ip) == nEnhancementBonusType) + { + if(GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT || !bIgnoreTemporary) + { + nTemp = GetItemPropertyCostTableValue(ip); + nFound = PRCMax(nFound, nTemp); + } + } + ip = GetNextItemProperty(oWeapon); + } + return nFound; +} + +// ---------------------------------------------------------------------------- +// Shortcut function to set the enhancement bonus of a weapon to a certain bonus +// Specifying bOnlyIfHigher as TRUE will prevent a bonus lower than the requested +// bonus from being applied. Valid values for nBonus are 1 to 20. +// ---------------------------------------------------------------------------- +void IPSetWeaponEnhancementBonus(object oWeapon, int nBonus, int bOnlyIfHigher = TRUE) +{ + int nCurrent = IPGetWeaponEnhancementBonus(oWeapon); + + itemproperty ip = GetFirstItemProperty(oWeapon); + + if (bOnlyIfHigher && nCurrent > nBonus) + { + return; + } + + if (nBonus <1 || nBonus > 20) + { + return; + } + + while (GetIsItemPropertyValid(ip)) + { + if (GetItemPropertyType(ip) ==ITEM_PROPERTY_ENHANCEMENT_BONUS) + { + RemoveItemProperty(oWeapon,ip); + } + ip = GetNextItemProperty(oWeapon); + } + + ip = ItemPropertyEnhancementBonus(nBonus); + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oWeapon); +} + + +// ---------------------------------------------------------------------------- +// Shortcut function to upgrade the enhancement bonus of a weapon by the +// number specified in nUpgradeBy. If the resulting new enhancement bonus +// would be out of bounds (>+20), it will be set to +20 +// ---------------------------------------------------------------------------- +void IPUpgradeWeaponEnhancementBonus(object oWeapon, int nUpgradeBy) +{ + int nCurrent = IPGetWeaponEnhancementBonus(oWeapon); + + itemproperty ip = GetFirstItemProperty(oWeapon); + + int nNew = nCurrent + nUpgradeBy; + if (nNew <1 ) + { + nNew = 1; + } + else if (nNew >20) + { + nNew = 20; + } + + while (GetIsItemPropertyValid(ip)) + { + if (GetItemPropertyType(ip) ==ITEM_PROPERTY_ENHANCEMENT_BONUS) + { + RemoveItemProperty(oWeapon,ip); + } + ip = GetNextItemProperty(oWeapon); + } + + ip = ItemPropertyEnhancementBonus(nNew); + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oWeapon); + +} + +int IPGetHasItemPropertyByConst(int nItemProp, object oItem) +{ + itemproperty ip = GetFirstItemProperty(oItem); + while (GetIsItemPropertyValid(ip)) + { + if (GetItemPropertyType(ip) ==nItemProp) + { + return TRUE; + } + ip = GetNextItemProperty(oItem); + } + return FALSE; + +} + +// ---------------------------------------------------------------------------- +// Returns TRUE if a use limitation of any kind is present on oItem +// ---------------------------------------------------------------------------- +int IPGetHasUseLimitation(object oItem) +{ + itemproperty ip = GetFirstItemProperty(oItem); + int nType; + while (GetIsItemPropertyValid(ip)) + { + nType = GetItemPropertyType(ip); + if ( + nType == ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP || + nType == ITEM_PROPERTY_USE_LIMITATION_CLASS || + nType == ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE || + nType == ITEM_PROPERTY_USE_LIMITATION_SPECIFIC_ALIGNMENT ) + { + return TRUE; + } + ip = GetNextItemProperty(oItem); + } + return FALSE; + +} + +//------------------------------------------------------------------------------ +// GZ, Oct 2003 +// Returns TRUE if a character has any item equipped that has the itemproperty +// defined in nItemPropertyConst in it (ITEM_PROPERTY_* constant) +//------------------------------------------------------------------------------ +int IPGetHasItemPropertyOnCharacter(object oPC, int nItemPropertyConst) +{ + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,oPC); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,oPC); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,oPC); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,oPC); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,oPC); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,oPC); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,oPC); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,oPC); + object oLeftHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC); + + int bHas = IPGetHasItemPropertyByConst(nItemPropertyConst, oWeaponOld); + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oLeftHand); + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oArmorOld); + if (bHas) + return TRUE; + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oRing1Old); + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oRing2Old); + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oAmuletOld); + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oCloakOld); + if (bHas) + return TRUE; + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oBootsOld); + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oBeltOld); + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oHelmetOld); + + return bHas; + +} + +//------------------------------------------------------------------------------ +// GZ, Oct 24, 2003 +// Returns an integer with the number of properties present oItem +//------------------------------------------------------------------------------ +int IPGetNumberOfItemProperties(object oItem) +{ + itemproperty ip = GetFirstItemProperty(oItem); + int nCount = 0; + while (GetIsItemPropertyValid(ip)) + { + nCount++; + ip = GetNextItemProperty(oItem); + } + return nCount; +} + +int IPDamageConstant(int nDamBon) +{ + int nIPBonus; + switch(nDamBon) + { + case 1: nIPBonus = IP_CONST_DAMAGEBONUS_1; break; + case 2: nIPBonus = IP_CONST_DAMAGEBONUS_2; break; + case 3: nIPBonus = IP_CONST_DAMAGEBONUS_3; break; + case 4: nIPBonus = IP_CONST_DAMAGEBONUS_4; break; + case 5: nIPBonus = IP_CONST_DAMAGEBONUS_5; break; + case 6: nIPBonus = IP_CONST_DAMAGEBONUS_6; break; + case 7: nIPBonus = IP_CONST_DAMAGEBONUS_7; break; + case 8: nIPBonus = IP_CONST_DAMAGEBONUS_8; break; + case 9: nIPBonus = IP_CONST_DAMAGEBONUS_9; break; + case 10: nIPBonus = IP_CONST_DAMAGEBONUS_10; break; + case 11: nIPBonus = IP_CONST_DAMAGEBONUS_11; break; + case 12: nIPBonus = IP_CONST_DAMAGEBONUS_12; break; + case 13: nIPBonus = IP_CONST_DAMAGEBONUS_13; break; + case 14: nIPBonus = IP_CONST_DAMAGEBONUS_14; break; + case 15: nIPBonus = IP_CONST_DAMAGEBONUS_15; break; + case 16: nIPBonus = IP_CONST_DAMAGEBONUS_16; break; + case 17: nIPBonus = IP_CONST_DAMAGEBONUS_17; break; + case 18: nIPBonus = IP_CONST_DAMAGEBONUS_18; break; + case 19: nIPBonus = IP_CONST_DAMAGEBONUS_19; break; + case 20: nIPBonus = IP_CONST_DAMAGEBONUS_20; break; + case 21: nIPBonus = IP_CONST_DAMAGEBONUS_21; break; + case 22: nIPBonus = IP_CONST_DAMAGEBONUS_22; break; + case 23: nIPBonus = IP_CONST_DAMAGEBONUS_23; break; + case 24: nIPBonus = IP_CONST_DAMAGEBONUS_24; break; + case 25: nIPBonus = IP_CONST_DAMAGEBONUS_25; break; + case 26: nIPBonus = IP_CONST_DAMAGEBONUS_26; break; + case 27: nIPBonus = IP_CONST_DAMAGEBONUS_27; break; + case 28: nIPBonus = IP_CONST_DAMAGEBONUS_28; break; + case 29: nIPBonus = IP_CONST_DAMAGEBONUS_29; break; + case 30: nIPBonus = IP_CONST_DAMAGEBONUS_30; break; + case 31: nIPBonus = IP_CONST_DAMAGEBONUS_31; break; + case 32: nIPBonus = IP_CONST_DAMAGEBONUS_32; break; + case 33: nIPBonus = IP_CONST_DAMAGEBONUS_33; break; + case 34: nIPBonus = IP_CONST_DAMAGEBONUS_34; break; + case 35: nIPBonus = IP_CONST_DAMAGEBONUS_35; break; + case 36: nIPBonus = IP_CONST_DAMAGEBONUS_36; break; + case 37: nIPBonus = IP_CONST_DAMAGEBONUS_37; break; + case 38: nIPBonus = IP_CONST_DAMAGEBONUS_38; break; + case 39: nIPBonus = IP_CONST_DAMAGEBONUS_39; break; + case 40: nIPBonus = IP_CONST_DAMAGEBONUS_40; break; + case 41: nIPBonus = IP_CONST_DAMAGEBONUS_41; break; + case 42: nIPBonus = IP_CONST_DAMAGEBONUS_42; break; + case 43: nIPBonus = IP_CONST_DAMAGEBONUS_43; break; + case 44: nIPBonus = IP_CONST_DAMAGEBONUS_44; break; + case 45: nIPBonus = IP_CONST_DAMAGEBONUS_45; break; + case 46: nIPBonus = IP_CONST_DAMAGEBONUS_46; break; + case 47: nIPBonus = IP_CONST_DAMAGEBONUS_47; break; + case 48: nIPBonus = IP_CONST_DAMAGEBONUS_48; break; + case 49: nIPBonus = IP_CONST_DAMAGEBONUS_49; break; + case 50: nIPBonus = IP_CONST_DAMAGEBONUS_50; break; + } + if (nDamBon > 50) nIPBonus = IP_CONST_DAMAGEBONUS_50; + + return nIPBonus; +} + + +/* int IPDamageConstant(int nDamBon) +{ + int nIPBonus; + switch(nDamBon) + { + case 1: nIPBonus = IP_CONST_DAMAGEBONUS_1; break; + case 2: nIPBonus = IP_CONST_DAMAGEBONUS_2; break; + case 3: nIPBonus = IP_CONST_DAMAGEBONUS_3; break; + case 4: nIPBonus = IP_CONST_DAMAGEBONUS_4; break; + case 5: nIPBonus = IP_CONST_DAMAGEBONUS_5; break; + case 6: nIPBonus = IP_CONST_DAMAGEBONUS_6; break; + case 7: nIPBonus = IP_CONST_DAMAGEBONUS_7; break; + case 8: nIPBonus = IP_CONST_DAMAGEBONUS_8; break; + case 9: nIPBonus = IP_CONST_DAMAGEBONUS_9; break; + case 10: nIPBonus = IP_CONST_DAMAGEBONUS_10; break; + case 11: nIPBonus = IP_CONST_DAMAGEBONUS_11; break; + case 12: nIPBonus = IP_CONST_DAMAGEBONUS_12; break; + case 13: nIPBonus = IP_CONST_DAMAGEBONUS_13; break; + case 14: nIPBonus = IP_CONST_DAMAGEBONUS_14; break; + case 15: nIPBonus = IP_CONST_DAMAGEBONUS_15; break; + case 16: nIPBonus = IP_CONST_DAMAGEBONUS_16; break; + case 17: nIPBonus = IP_CONST_DAMAGEBONUS_17; break; + case 18: nIPBonus = IP_CONST_DAMAGEBONUS_18; break; + case 19: nIPBonus = IP_CONST_DAMAGEBONUS_19; break; + case 20: nIPBonus = IP_CONST_DAMAGEBONUS_20; break; + } + if (nDamBon > 20) nIPBonus = IP_CONST_DAMAGEBONUS_20; + + return nIPBonus; +} */ + +int IPOnHitSaveDC(int nSaveDC) +{ + int nIPBonus = IP_CONST_ONHIT_SAVEDC_10; + switch(nSaveDC) + { + case 10: nIPBonus = IP_CONST_ONHIT_SAVEDC_10; break; + case 11: nIPBonus = IP_CONST_ONHIT_SAVEDC_11; break; + case 12: nIPBonus = IP_CONST_ONHIT_SAVEDC_12; break; + case 13: nIPBonus = IP_CONST_ONHIT_SAVEDC_13; break; + case 14: nIPBonus = IP_CONST_ONHIT_SAVEDC_14; break; + case 15: nIPBonus = IP_CONST_ONHIT_SAVEDC_15; break; + case 16: nIPBonus = IP_CONST_ONHIT_SAVEDC_16; break; + case 17: nIPBonus = IP_CONST_ONHIT_SAVEDC_17; break; + case 18: nIPBonus = IP_CONST_ONHIT_SAVEDC_18; break; + case 19: nIPBonus = IP_CONST_ONHIT_SAVEDC_19; break; + case 20: nIPBonus = IP_CONST_ONHIT_SAVEDC_20; break; + case 21: nIPBonus = IP_CONST_ONHIT_SAVEDC_21; break; + case 22: nIPBonus = IP_CONST_ONHIT_SAVEDC_22; break; + case 23: nIPBonus = IP_CONST_ONHIT_SAVEDC_23; break; + case 24: nIPBonus = IP_CONST_ONHIT_SAVEDC_24; break; + case 25: nIPBonus = IP_CONST_ONHIT_SAVEDC_25; break; + case 26: nIPBonus = IP_CONST_ONHIT_SAVEDC_26; break; + case 27: nIPBonus = IP_CONST_ONHIT_SAVEDC_27; break; + case 28: nIPBonus = IP_CONST_ONHIT_SAVEDC_28; break; + case 29: nIPBonus = IP_CONST_ONHIT_SAVEDC_29; break; + case 30: nIPBonus = IP_CONST_ONHIT_SAVEDC_30; break; + case 31: nIPBonus = IP_CONST_ONHIT_SAVEDC_31; break; + case 32: nIPBonus = IP_CONST_ONHIT_SAVEDC_32; break; + case 33: nIPBonus = IP_CONST_ONHIT_SAVEDC_33; break; + case 34: nIPBonus = IP_CONST_ONHIT_SAVEDC_34; break; + case 35: nIPBonus = IP_CONST_ONHIT_SAVEDC_35; break; + case 36: nIPBonus = IP_CONST_ONHIT_SAVEDC_36; break; + case 37: nIPBonus = IP_CONST_ONHIT_SAVEDC_37; break; + case 38: nIPBonus = IP_CONST_ONHIT_SAVEDC_38; break; + case 39: nIPBonus = IP_CONST_ONHIT_SAVEDC_39; break; + case 40: nIPBonus = IP_CONST_ONHIT_SAVEDC_40; break; + case 41: nIPBonus = IP_CONST_ONHIT_SAVEDC_41; break; + case 42: nIPBonus = IP_CONST_ONHIT_SAVEDC_42; break; + case 43: nIPBonus = IP_CONST_ONHIT_SAVEDC_43; break; + case 44: nIPBonus = IP_CONST_ONHIT_SAVEDC_44; break; + case 45: nIPBonus = IP_CONST_ONHIT_SAVEDC_45; break; + case 46: nIPBonus = IP_CONST_ONHIT_SAVEDC_46; break; + case 47: nIPBonus = IP_CONST_ONHIT_SAVEDC_47; break; + case 48: nIPBonus = IP_CONST_ONHIT_SAVEDC_48; break; + case 49: nIPBonus = IP_CONST_ONHIT_SAVEDC_49; break; + case 50: nIPBonus = IP_CONST_ONHIT_SAVEDC_50; break; + case 51: nIPBonus = IP_CONST_ONHIT_SAVEDC_51; break; + case 52: nIPBonus = IP_CONST_ONHIT_SAVEDC_52; break; + case 53: nIPBonus = IP_CONST_ONHIT_SAVEDC_53; break; + case 54: nIPBonus = IP_CONST_ONHIT_SAVEDC_54; break; + case 55: nIPBonus = IP_CONST_ONHIT_SAVEDC_55; break; + case 56: nIPBonus = IP_CONST_ONHIT_SAVEDC_56; break; + case 57: nIPBonus = IP_CONST_ONHIT_SAVEDC_57; break; + case 58: nIPBonus = IP_CONST_ONHIT_SAVEDC_58; break; + case 59: nIPBonus = IP_CONST_ONHIT_SAVEDC_59; break; + case 60: nIPBonus = IP_CONST_ONHIT_SAVEDC_60; break; + case 61: nIPBonus = IP_CONST_ONHIT_SAVEDC_61; break; + case 62: nIPBonus = IP_CONST_ONHIT_SAVEDC_62; break; + case 63: nIPBonus = IP_CONST_ONHIT_SAVEDC_63; break; + case 64: nIPBonus = IP_CONST_ONHIT_SAVEDC_64; break; + case 65: nIPBonus = IP_CONST_ONHIT_SAVEDC_65; break; + case 66: nIPBonus = IP_CONST_ONHIT_SAVEDC_66; break; + case 67: nIPBonus = IP_CONST_ONHIT_SAVEDC_67; break; + case 68: nIPBonus = IP_CONST_ONHIT_SAVEDC_68; break; + case 69: nIPBonus = IP_CONST_ONHIT_SAVEDC_69; break; + case 70: nIPBonus = IP_CONST_ONHIT_SAVEDC_70; break; + } + if (nSaveDC < 10) nIPBonus = IP_CONST_ONHIT_SAVEDC_10; + if (nSaveDC > 70) nIPBonus = IP_CONST_ONHIT_SAVEDC_70; + + return nIPBonus; +} + +/* int IPOnHitSaveDC(int nSaveDC) +{ + int nIPBonus; + switch(nSaveDC) + { + case 10: nIPBonus = IP_CONST_ONHIT_SAVEDC_14; break; + case 11: nIPBonus = IP_CONST_ONHIT_SAVEDC_14; break; + case 12: nIPBonus = IP_CONST_ONHIT_SAVEDC_14; break; + case 13: nIPBonus = IP_CONST_ONHIT_SAVEDC_14; break; + case 14: nIPBonus = IP_CONST_ONHIT_SAVEDC_14; break; + case 15: nIPBonus = IP_CONST_ONHIT_SAVEDC_14; break; + case 16: nIPBonus = IP_CONST_ONHIT_SAVEDC_16; break; + case 17: nIPBonus = IP_CONST_ONHIT_SAVEDC_16; break; + case 18: nIPBonus = IP_CONST_ONHIT_SAVEDC_18; break; + case 19: nIPBonus = IP_CONST_ONHIT_SAVEDC_18; break; + case 20: nIPBonus = IP_CONST_ONHIT_SAVEDC_20; break; + case 21: nIPBonus = IP_CONST_ONHIT_SAVEDC_20; break; + case 22: nIPBonus = IP_CONST_ONHIT_SAVEDC_22; break; + case 23: nIPBonus = IP_CONST_ONHIT_SAVEDC_22; break; + case 24: nIPBonus = IP_CONST_ONHIT_SAVEDC_24; break; + case 25: nIPBonus = IP_CONST_ONHIT_SAVEDC_24; break; + case 26: nIPBonus = IP_CONST_ONHIT_SAVEDC_26; break; + } + if (nSaveDC > 26) nIPBonus = IP_CONST_ONHIT_SAVEDC_26; + + return nIPBonus; +} */ \ No newline at end of file diff --git a/src/include/prcsp_archmaginc.nss b/src/include/prcsp_archmaginc.nss new file mode 100644 index 0000000..4287a19 --- /dev/null +++ b/src/include/prcsp_archmaginc.nss @@ -0,0 +1,200 @@ +// +// Wrapper Functions for the Archmage Class and Feats +// + +// +// Notes: Normal use is to include prc_alterations. +// If this file if to be included elsewhere add the following lines +// to the target file: +// #include "prcsp_reputation" +// #include "prcsp_archmaginc" +// + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +/// @todo Change these to TLK reads + +const string MASTERY_OF_ELEMENTS_TAG = "archmage_mastery_elements"; +const string MASTERY_OF_ELEMENTS_NAME_TAG = "archmage_mastery_elements_name"; +const string MASTERY_OF_SHAPE_TAG = "archmage_mastery_shaping"; +const string MASTERY_OF_SHAPE_ON = "Shaping spells to protect allies."; +const string MASTERY_OF_SHAPE_OFF = "Spell shaping is disabled, allies may be effected."; +const string MASTERY_OF_ELEMENTS_ACID = "Elemental spell damage set to acid."; +const string MASTERY_OF_ELEMENTS_COLD = "Elemental spell damage set to cold."; +const string MASTERY_OF_ELEMENTS_ELECTRICAL = "Elemental spell damage set to electrical."; +const string MASTERY_OF_ELEMENTS_FIRE = "Elemental spell damage set to fire."; +const string MASTERY_OF_ELEMENTS_SONIC = "Elemental spell damage set to sonic."; +const string MASTERY_OF_ELEMENTS_OFF = "Elemental spell damage returned to normal."; + +const int FEAT_INACTIVE = 0; +const int FEAT_ACTIVE = 1; + +const int MASTERY_OF_SHAPE_EFFECT = 460; +const int MASTERY_OF_ELEMENTS_EFFECT_ACID = 448; +const int MASTERY_OF_ELEMENTS_EFFECT_ELECTRICAL = 463; +const int MASTERY_OF_ELEMENTS_EFFECT_OFF = 460; + +const int SPELL_MASTERY_ELEMENTS_NORMAL = 2000; +const int SPELL_MASTERY_ELEMENTS_ACID = 2003; +const int SPELL_MASTERY_ELEMENTS_COLD = 2002; +const int SPELL_MASTERY_ELEMENTS_ELECTRICITY = 2004; +const int SPELL_MASTERY_ELEMENTS_FIRE = 2001; +const int SPELL_MASTERY_ELEMENTS_SONIC = 2005; + +const int TIME_1_ROUND = 1; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Determines if Master of Shapes is active and applies in regards to the + * given target. + * + * @param oCaster A creature casting an area-affecting spell + * @param oTarget A creature that is in the affected area + * @return TRUE if the creature should be exempt from the spell due to + * Mastery of Shapes. FALSE otherwise + */ +int CheckMasteryOfShapes(object oCaster, object oTarget); + +void SetFeatVisualEffects(object oCaster, int nEffect, string sMessage); + +void ToggleMasteryOfShapes(object oCaster); + +void SetMasteryOfElements(); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +//#include "lookup_2da_spell" +#include "prcsp_reputation" +//#include "prc_inc_spells" + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int CheckMasteryOfShapes(object oCaster, object oTarget) +{ + int bRetVal = FALSE; + + // This variable should not be set without the feat being available. + // If someone wants to cheat, let them. + if (GetLocalInt(oCaster, MASTERY_OF_SHAPE_TAG) == FEAT_ACTIVE && !GetIsReactionTypeHostile(oTarget, oCaster)) + { + bRetVal = TRUE; + } + + return bRetVal; +} + +int ExtraordinarySpellAim(object oCaster, object oTarget) +{ + int bRetVal = FALSE; + + // This variable should not be set without the feat being available. + // If someone wants to cheat, let them. + if(GetHasFeat(FEAT_EXTRAORDINARY_SPELL_AIM, oCaster) + && !GetLocalInt(oCaster, "ExtraordinarySpellAim") + && GetIsFriend(oTarget, oCaster)) + { + // Only once per spell + SetLocalInt(oCaster, "ExtraordinarySpellAim", TRUE); + DelayCommand(1.0, DeleteLocalInt(oCaster, "ExtraordinarySpellAim")); + if(GetIsSkillSuccessful(oCaster, SKILL_SPELLCRAFT, 25 + PRCGetSpellLevel(oCaster, PRCGetSpellId()))) + bRetVal = TRUE; + } + + return bRetVal; +} + +// +// Help with Visual Effects when setting feats +// +void SetFeatVisualEffects(object oCaster, int nEffect, string sMessage) +{ + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(nEffect), + oCaster, RoundsToSeconds(TIME_1_ROUND)); + + FloatingTextStringOnCreature(sMessage, OBJECT_SELF, FALSE); +} + +// +// Enable/Disable Mastery of Shapes +// +void ToggleMasteryOfShapes(object oCaster) +{ + if (GetLocalInt(OBJECT_SELF, MASTERY_OF_SHAPE_TAG) == FEAT_INACTIVE) { + SetLocalInt(OBJECT_SELF, MASTERY_OF_SHAPE_TAG, FEAT_ACTIVE); + SetFeatVisualEffects(oCaster, MASTERY_OF_SHAPE_EFFECT, MASTERY_OF_SHAPE_ON); + } + else { + SetLocalInt(OBJECT_SELF, MASTERY_OF_SHAPE_TAG, FEAT_INACTIVE); + SetFeatVisualEffects(oCaster, MASTERY_OF_SHAPE_EFFECT, MASTERY_OF_SHAPE_OFF); + } +} + +// +// This function sets the Mastery of Elements feat to a specific element +// +void SetMasteryOfElements() +{ + string msg = MASTERY_OF_ELEMENTS_OFF; + string sElem = ""; + int nEffect = MASTERY_OF_ELEMENTS_EFFECT_OFF; + int dmgType = FEAT_INACTIVE; + + switch (PRCGetSpellId()) { + case SPELL_MASTERY_ELEMENTS_ACID: + nEffect = MASTERY_OF_ELEMENTS_EFFECT_ACID; + dmgType = DAMAGE_TYPE_ACID; + msg = MASTERY_OF_ELEMENTS_ACID; + sElem = "Acid"; + break; + + case SPELL_MASTERY_ELEMENTS_COLD: + nEffect = VFX_IMP_AC_BONUS; + dmgType = DAMAGE_TYPE_COLD; + msg = MASTERY_OF_ELEMENTS_COLD; + sElem = "Cold"; + break; + + case SPELL_MASTERY_ELEMENTS_ELECTRICITY: + nEffect = MASTERY_OF_ELEMENTS_EFFECT_ELECTRICAL; + dmgType = DAMAGE_TYPE_ELECTRICAL; + msg = MASTERY_OF_ELEMENTS_ELECTRICAL; + sElem = "Electricity"; + break; + + case SPELL_MASTERY_ELEMENTS_FIRE: + nEffect = VFX_IMP_ELEMENTAL_PROTECTION; + dmgType = DAMAGE_TYPE_FIRE; + msg = MASTERY_OF_ELEMENTS_FIRE; + sElem = "Fire"; + break; + + case SPELL_MASTERY_ELEMENTS_SONIC: + nEffect = VFX_FNF_SOUND_BURST; + dmgType = DAMAGE_TYPE_SONIC; + msg = MASTERY_OF_ELEMENTS_SONIC; + sElem = "Sonic"; + break; + + default: + // Use the default initialized variables + break; + } + + SetLocalInt(OBJECT_SELF, MASTERY_OF_ELEMENTS_TAG, dmgType); + SetLocalString(OBJECT_SELF, MASTERY_OF_ELEMENTS_NAME_TAG, sElem); + SetFeatVisualEffects(PRCGetSpellTargetObject(), nEffect, msg); +} + +// Test main +//void main(){} diff --git a/src/include/prcsp_engine.nss b/src/include/prcsp_engine.nss new file mode 100644 index 0000000..833ec49 --- /dev/null +++ b/src/include/prcsp_engine.nss @@ -0,0 +1,401 @@ + +// Module Constants +const float CACHE_TIMEOUT_CAST = 2.0; +const string CASTER_LEVEL_TAG = "PRCEffectiveCasterLevel"; + +// Constants that dictate ResistSpell results +const int SPELL_RESIST_FAIL = 0; +const int SPELL_RESIST_PASS = 1; +const int SPELL_RESIST_GLOBE = 2; +const int SPELL_RESIST_MANTLE = 3; + +int PRCDoResistSpell(object oCaster, object oTarget, int nEffCasterLvl=0, float fDelay = 0.0); + +int CheckSpellfire(object oCaster, object oTarget, int bFriendly = FALSE); + +#include "prc_inc_racial" +//#include "prc_feat_const" +//#include "prc_class_const" +//#include "prcsp_reputation" +#include "prcsp_archmaginc" +//#include "prc_add_spell_dc" +#include "prc_add_spl_pen" + + +// +// This function is a wrapper should someone wish to rewrite the Bioware +// version. This is where it should be done. +// +int PRCResistSpell(object oCaster, object oTarget) +{ + return ResistSpell(oCaster, oTarget); +} + +// +// This function is a wrapper should someone wish to rewrite the Bioware +// version. This is where it should be done. +// +int PRCGetSpellResistance(object oTarget, object oCaster) +{ + int iSpellRes = GetSpellResistance(oTarget); + int nHD = GetHitDice(oTarget); + + //racial pack SR + int iRacialSpellRes = 0; + if(GetHasFeat(FEAT_SPELL27, oTarget)) + iRacialSpellRes = 27 + nHD; + else if(GetHasFeat(FEAT_SPELL25, oTarget)) + iRacialSpellRes = 25 + nHD; + else if(GetHasFeat(FEAT_SPELL23, oTarget)) + iRacialSpellRes = 23 + nHD; + else if(GetHasFeat(FEAT_SPELL22, oTarget)) + iRacialSpellRes = 22 + nHD; + else if(GetHasFeat(FEAT_SPELL21, oTarget)) + iRacialSpellRes = 21 + nHD; + else if(GetHasFeat(FEAT_SPELL20, oTarget)) + iRacialSpellRes = 20 + nHD; + else if(GetHasFeat(FEAT_SPELL19, oTarget)) + iRacialSpellRes = 19 + nHD; + else if(GetHasFeat(FEAT_SPELL18, oTarget)) + iRacialSpellRes = 18 + nHD; + else if(GetHasFeat(FEAT_SPELL17, oTarget)) + iRacialSpellRes = 17 + nHD; + else if(GetHasFeat(FEAT_SPELL16, oTarget)) + iRacialSpellRes = 16 + nHD; + else if(GetHasFeat(FEAT_SPELL15, oTarget)) + iRacialSpellRes = 15 + nHD; + else if(GetHasFeat(FEAT_SPELL14, oTarget)) + iRacialSpellRes = 14 + nHD; + else if(GetHasFeat(FEAT_SPELL13, oTarget)) + iRacialSpellRes = 13 + nHD; + else if(GetHasFeat(FEAT_SPELL11, oTarget)) + iRacialSpellRes = 11 + nHD; + else if(GetHasFeat(FEAT_SPELL10, oTarget)) + iRacialSpellRes = 10 + nHD; + else if(GetHasFeat(FEAT_SPELL8, oTarget)) + iRacialSpellRes = 8 + nHD; + else if(GetHasFeat(FEAT_SPELL5, oTarget)) + iRacialSpellRes = 5 + nHD; + if(iRacialSpellRes > iSpellRes) + iSpellRes = iRacialSpellRes; + + // Exalted Companion, can also be used for Celestial Template + if(GetLocalInt(oTarget, "CelestialTemplate") || GetLocalInt(oTarget, "PseudonaturalTemplate")) + { + int nSR = nHD * 2; + if (nSR > 25) nSR = 25; + if (nSR > iSpellRes) iSpellRes = nSR; + } + + // Enlightened Fist SR = 10 + monk level + enlightened fist level + if(GetHasFeat(FEAT_EF_DIAMOND_SOUL, oTarget)) + { + int nEF = 10 + GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oTarget) + GetLevelByClass(CLASS_TYPE_MONK, oTarget); + if(nEF > iSpellRes) + iSpellRes = nEF; + } + + // Contemplative SR = 15 + contemplative level + if(GetHasFeat(FEAT_DIVINE_SOUL, oTarget)) + { + int nCont = 15 + GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oTarget); + if(nCont > iSpellRes) + iSpellRes = nCont; + } + + // Marrutact + if(GetRacialType(oTarget) == RACIAL_TYPE_MARRUTACT) + { + int nCont = 9 + GetHitDice(oTarget); + if(nCont > iSpellRes) + iSpellRes = nCont; + } + + // Hobgoblin Wsrsoul + if(GetRacialType(oTarget) == RACIAL_TYPE_HOBGOBLIN_WARSOUL) + { + int nCont = 8 + GetHitDice(oTarget); + if(nCont > iSpellRes) + iSpellRes = nCont; + } + + // Exordius Weapon of Legacy + if(GetLocalInt(oTarget, "ExordiusSR")) + { + int nCont = 5 + GetHitDice(oTarget); + if(nCont > iSpellRes) + iSpellRes = nCont; + } + + // Hammer of Witches Weapon of Legacy + if(GetLocalInt(oTarget, "HammerWitchesSR")) + { + // SR vs arcane only + if(GetIsArcaneClass(PRCGetLastSpellCastClass(oCaster))) + { + int nCont = 5 + GetHitDice(oTarget); + if(nCont > iSpellRes) + iSpellRes = nCont; + } + } + + // Ur-Priest + int nPriestLevel = GetLevelByClass(CLASS_TYPE_UR_PRIEST, oTarget); + if(nPriestLevel >= 4) + { + // SR vs divine only + if(GetIsDivineClass(PRCGetLastSpellCastClass(oCaster))) + { + //if(nPriestLevel > 50) nPriestLevel = 50; //:: cap if needed + + // Calculate bonus: 15 at level 4, then +5 for every additional 4 levels + int nCont = 15 + (((nPriestLevel - 4) / 4) * 5); + + if(nCont > iSpellRes) + iSpellRes = nCont; + } + } +/* // Ur-Priest + if(GetLevelByClass(CLASS_TYPE_UR_PRIEST, oTarget) >= 4) + { + // SR vs divine only + if(GetIsDivineClass(PRCGetLastSpellCastClass(oCaster))) + { + int nCont = 15; + if (GetLevelByClass(CLASS_TYPE_UR_PRIEST, oTarget) >= 8) nCont = 20; + if(nCont > iSpellRes) + iSpellRes = nCont; + } + } */ + + // Dread Carapace Heart Bind + if(GetIsIncarnumUser(oTarget)) + { + if (GetIsMeldBound(oTarget, MELD_DREAD_CARAPACE) == CHAKRA_CROWN) + { + int nCont = 5 + (4 * GetEssentiaInvested(oTarget, MELD_DREAD_CARAPACE)); + if(nCont > iSpellRes) + iSpellRes = nCont; + } + if (GetHasSpellEffect(MELD_SPELLWARD_SHIRT, oTarget)) // MELD_SPELLWARD_SHIRT + { + int nCont = 5 + (4 * GetEssentiaInvested(oTarget, MELD_SPELLWARD_SHIRT)); + if(nCont > iSpellRes) + iSpellRes = nCont; + } + } + + // Foe Hunter SR stacks with normal SR when a spell is cast by their hated enemy + if(GetHasFeat(FEAT_HATED_ENEMY_SR, oTarget) && GetLocalInt(oTarget, "HatedFoe") == MyPRCGetRacialType(oCaster)) + { + iSpellRes += 15 + GetLevelByClass(CLASS_TYPE_FOE_HUNTER, oTarget); + } + + // Adds +4 to SR + if(GetHasFeat(FEAT_PSYCHIC_REFUSAL, oTarget)) + iSpellRes += 4; + + // Forsaker SR adds to existing + if(GetLevelByClass(CLASS_TYPE_FORSAKER, oTarget)) + iSpellRes = iSpellRes + 10 + GetLevelByClass(CLASS_TYPE_FORSAKER, oTarget); + + return iSpellRes; +} + +// +// If a spell is resisted, display the effect +// +void PRCShowSpellResist(object oCaster, object oTarget, int nResist, float fDelay = 0.0) +{ + // If either caster/target is a PC send them a message + if (GetIsPC(oCaster)) + { + string message = nResist == SPELL_RESIST_FAIL ? + "Target is affected by the spell." : "Target resisted the spell."; + SendMessageToPC(oCaster, message); + } + if (GetIsPC(oTarget)) + { + string message = nResist == SPELL_RESIST_FAIL ? + "You are affected by the spell." : "You resisted the spell."; + SendMessageToPC(oTarget, message); + } + + if (nResist != SPELL_RESIST_FAIL) { + // Default to a standard resistance + int eve = VFX_IMP_MAGIC_RESISTANCE_USE; + + // Check for other resistances + if (nResist == SPELL_RESIST_GLOBE) + eve = VFX_IMP_GLOBE_USE; + else if (nResist == SPELL_RESIST_MANTLE) + eve = VFX_IMP_SPELL_MANTLE_USE; + + // Render the effect + DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, + EffectVisualEffect(eve), oTarget)); + } +} + +// +// This function overrides the BioWare MyResistSpell. +// TODO: Change name to PRCMyResistSpell. +// +int PRCDoResistSpell(object oCaster, object oTarget, int nEffCasterLvl=0, float fDelay = 0.0) +{ + int nResist; + + // Check if the archmage shape mastery applies to this target + if (CheckSpellfire(oCaster, oTarget) || CheckMasteryOfShapes(oCaster, oTarget) || ExtraordinarySpellAim(oCaster, oTarget) || (GetLocalInt(oCaster, "WOL_DesertWindFireball") && GetSpellId() == SPELL_FIREBALL)) + nResist = SPELL_RESIST_MANTLE; + else if(GetLevelByClass(CLASS_TYPE_BEGUILER, oCaster) >= 20 && GetIsDeniedDexBonusToAC(oTarget, oCaster, TRUE)) + { + //Beguilers of level 20+ automatically overcome SR of targets denied Dex bonus to AC + nResist = SPELL_RESIST_FAIL; + } + else if(GetLocalInt(oCaster, "CunningBreach")) + { + //Factotum can pay to breach all SR for a round + nResist = SPELL_RESIST_FAIL; + } + //using vitriolic blast with eldritch spellweave + else if(oTarget == GetLocalObject(oCaster, "SPELLWEAVE_TARGET") + && GetLocalInt(oCaster, "BlastEssence") == INVOKE_VITRIOLIC_BLAST) + { + nResist = SPELL_RESIST_FAIL; + } + else { + // Check immunities and mantles, otherwise ignore the result completely + nResist = PRCResistSpell(oCaster, oTarget); + + //Resonating Resistance + if((nResist <= SPELL_RESIST_PASS) && (GetHasSpellEffect(SPELL_RESONATING_RESISTANCE, oTarget))) + { + nResist = PRCResistSpell(oCaster, oTarget); + } + + if (nResist <= SPELL_RESIST_PASS) + { + nResist = SPELL_RESIST_FAIL; + + // Because the version of this function was recently changed to + // optionally allow the caster level, we must calculate it here. + // The result will be cached for a period of time. + if (!nEffCasterLvl) { + nEffCasterLvl = GetLocalInt(oCaster, CASTER_LEVEL_TAG); + if (!nEffCasterLvl) { + nEffCasterLvl = PRCGetCasterLevel(oCaster) + SPGetPenetr(); + SetLocalInt(oCaster, CASTER_LEVEL_TAG, nEffCasterLvl); + DelayCommand(CACHE_TIMEOUT_CAST, + DeleteLocalInt(oCaster, CASTER_LEVEL_TAG)); + } + } + + // Pernicious Magic + // +4 caster level vs SR Weave user (not Evoc & Trans spells) + int iWeav; + if (GetHasFeat(FEAT_PERNICIOUSMAGIC,oCaster)) + { + if (!GetHasFeat(FEAT_SHADOWWEAVE,oTarget)) + { + int nSchool = GetLocalInt(oCaster, "X2_L_LAST_SPELLSCHOOL_VAR"); + if ( nSchool != SPELL_SCHOOL_EVOCATION && nSchool != SPELL_SCHOOL_TRANSMUTATION ) + iWeav=4; + } + } + + + // A tie favors the caster. + if ((nEffCasterLvl + d20(1)+iWeav) < PRCGetSpellResistance(oTarget, oCaster)) + nResist = SPELL_RESIST_PASS; + } + } + + // Karsites heal from resisting a spell + if(GetRacialType(oTarget) == RACIAL_TYPE_KARSITE && nResist == SPELL_RESIST_PASS) + { + int nSpellLevel = StringToInt(Get2DACache("spells", "Innate", PRCGetSpellId())); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(nSpellLevel*2), oTarget); + } + + PRCShowSpellResist(oCaster, oTarget, nResist, fDelay); + + return nResist; +} + +//Returns the maximum number of spellfire levels oPC can store +int SpellfireMax(object oPC) +{ + //can't absorb spells without feat + if(!GetHasFeat(FEAT_SPELLFIRE_WIELDER, oPC)) return 0; + + int nCON = GetAbilityScore(oPC, ABILITY_CONSTITUTION); + + int i, nCount; + for (i = FEAT_EPIC_SPELLFIRE_WIELDER_I; i <= FEAT_EPIC_SPELLFIRE_WIELDER_X; i++) + { + if (GetHasFeat(i, oPC)) + nCON = nCON + 4; + } + if (DEBUG) DoDebug("SpellfireMax nCon is "+IntToString(nCON)); + + int nStorage = ((GetLevelByClass(CLASS_TYPE_SPELLFIRE, oPC) + 1) / 2) + 1; + if(nStorage > 5) nStorage = 5; + return nCON * nStorage; +} + +//Increases the number of stored spellfire levels on a creature +void AddSpellfireLevels(object oPC, int nLevels) +{ + int nMax = SpellfireMax(oPC); + int nStored = GetPersistantLocalInt(oPC, "SpellfireLevelStored"); + nStored += nLevels; + if(nStored > nMax) nStored = nMax; //capped + SetPersistantLocalInt(oPC, "SpellfireLevelStored", nStored); +} + +//Checks if spell target can absorb spells by being a spellfire wielder +int CheckSpellfire(object oCaster, object oTarget, int bFriendly = FALSE) +{ + //can't absorb spells without feat + if(!GetHasFeat(FEAT_SPELLFIRE_WIELDER, oTarget)) return 0; + + //Can't absorb own spells/powers if switch is set + if(GetPRCSwitch(PRC_SPELLFIRE_DISALLOW_CHARGE_SELF) && oTarget == oCaster) return 0; + + //abilities rely on access to weave + if(GetHasFeat(FEAT_SHADOWWEAVE, oTarget)) return 0; + + int nSpellID = PRCGetSpellId(); + if(!bFriendly && GetLocalInt(oCaster, "IsAOE_" + IntToString(nSpellID))) + return 0; //can't absorb hostile AOE spells + + int nSpellfireLevel = GetPersistantLocalInt(oTarget, "SpellfireLevelStored"); + if(DEBUG) DoDebug("CheckSpellfire: " + IntToString(nSpellfireLevel) + " levels stored", oTarget); + + int nMax = SpellfireMax(oTarget); + + if(DEBUG) DoDebug("CheckSpellfire: Maximum " + IntToString(nMax), oTarget); + + //can't absorb any more spells, sanity check + if(nSpellfireLevel >= nMax) return 0; + + //increasing stored levels + int nSpellLevel = GetLocalInt(oCaster, "PRC_CurrentManifest_PowerLevel"); //replicates GetPowerLevel(oCaster); + if(!nSpellLevel) //not a power //avoids compiler problems + { //with includes + string sInnate = Get2DACache("spells", "Innate", nSpellID);//lookup_spell_innate(nSpellID); + if(sInnate == "") return 0; //no innate level, unlike cantrips + nSpellLevel = StringToInt(sInnate); + } + /* + string sInnate = Get2DACache("spells", "Innate", nSpellID); + if(sInnate == "") return 0; //no innate level, unlike cantrips + int nSpellLevel = StringToInt(sInnate); + */ + + AddSpellfireLevels(oTarget, nSpellLevel); + + //absorbed + return 1; +} \ No newline at end of file diff --git a/src/include/prcsp_reputation.nss b/src/include/prcsp_reputation.nss new file mode 100644 index 0000000..d86441d --- /dev/null +++ b/src/include/prcsp_reputation.nss @@ -0,0 +1,149 @@ +#include "x2_inc_switches" + +// * Generic reputation wrapper +// * definition of constants: +// * SPELL_TARGET_ALLALLIES = Will affect all allies, even those in my faction who don't like me +// * SPELL_TARGET_STANDARDHOSTILE: 90% of offensive area spells will work +// this way. They will never hurt NEUTRAL or FRIENDLY NPCs. +// They will never hurt FRIENDLY PCs +// They WILL hurt NEUTRAL PCs +// * SPELL_TARGET_SELECTIVEHOSTILE: Will only ever hurt enemies + +// * Constants +// * see spellsIsTarget for a definition of these constants +const int SPELL_TARGET_ALLALLIES = 1; +const int SPELL_TARGET_STANDARDHOSTILE = 2; +const int SPELL_TARGET_SELECTIVEHOSTILE = 3; + +//:://///////////////////////////////////////////// +//:: spellsIsTarget +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This is the reputation wrapper. + It performs the check to see if, based on the + constant provided + it is okay to target this target with the + spell effect. + + + MODIFIED APRIL 2003 + - Other player's associates will now be harmed in + Standard Hostile mode + - Will ignore dead people in all target attempts + + MODIFIED AUG 2003 - GZ + - Multiple henchmen support: made sure that + AoE spells cast by one henchmen do not + affect other henchmen in the party + +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: March 6 2003 +//::////////////////////////////////////////////// + +// This kind of spell will affect all friendlies and anyone in my +// party, even if we are upset with each other currently. +int +HandleDispositionALLALLIES(object oTarget, object oSource) +{ + return GetIsReactionTypeFriendly(oTarget,oSource) + || GetFactionEqual(oTarget,oSource); +} + +// Only harms enemies, ever. +// current list: +// call lightning, isaac missiles, firebrand, chain lightning, dirge, Nature's balance, +// Word of Faith +int +HandleDispositionSELECTIVEHOSTILE(object oTarget, object oSource) +{ + return GetIsEnemy(oTarget, oSource); +} + +int +HandleDispositionSTANDARDHOSTILE(object oTarget, object oSource) +{ + object oMaster = GetMaster(oTarget); + + // March 25 2003. In hardcore, casters will affect themselves and + // their associates. + if (GetGameDifficulty() > GAME_DIFFICULTY_NORMAL) { + if (oTarget == oSource || oMaster == oSource) + return TRUE; + } + + // April 9 2003. Hurt the associates of a hostile player + if (GetIsObjectValid(oMaster)) { + // Target is an associate of an unfriendly PC or is outright hostile + if ((!GetIsReactionTypeFriendly(oMaster,oSource) && GetIsPC(oMaster)) + || GetIsReactionTypeHostile(oMaster,oSource)) + return TRUE; + } + + // Spiderfriend Magic means that spells never hurt neutral or allied vermin + if (GetHasFeat(FEAT_SPIDERFRIEND_MAGIC, oSource) && !GetIsReactionTypeHostile(oTarget, oSource) && GetRacialType(oTarget) == RACIAL_TYPE_VERMIN) + return FALSE; + + // Assumption: In Full PvP players, even if in same party, are Neutral + // GZ: 2003-08-30: Patch to make creatures hurt each other in hardcore mode. + + // Hostile creatures are always a target. + if (GetIsReactionTypeHostile(oTarget,oSource)) + return TRUE; + + // Handle logic for neutral targets (we know !Hostile(), see above). + if (!GetIsReactionTypeFriendly(oTarget, oSource)) { + // 'neutral' PCs are targets + if (GetIsPC(oTarget)) + return TRUE; + + // Local Override is just an out for end users who want + // the area effect spells to hurt 'neutrals'. + if (GetLocalInt(GetModule(), "X0_G_ALLOWSPELLSTOHURT") == 10) + return TRUE; + + if (GetModuleSwitchValue(MODULE_SWITCH_ENABLE_NPC_AOE_HURT_ALLIES) + && GetGameDifficulty() > GAME_DIFFICULTY_NORMAL) + return TRUE; // Hostile Creature and Difficulty > Normal. + // In hardcore mode any creature is hostile. + } + + // Default response + return FALSE; +} + + +int spellsIsTarget(object oTarget, int nTargetType, object oSource) +{ + // * if dead, not a valid target + if (GetIsDead(oTarget)) + return FALSE; + + // GZ: Creatures with the same master will never damage each other + object oTargetMaster = GetMaster(oTarget); + object oSourceMaster = GetMaster(oSource); + if (GetIsObjectValid(oTargetMaster) + && GetIsObjectValid(oSourceMaster) + && !GetModuleSwitchValue(MODULE_SWITCH_ENABLE_MULTI_HENCH_AOE_DAMAGE) + && oTargetMaster == oSourceMaster + && nTargetType != SPELL_TARGET_ALLALLIES) + { + return FALSE; + } + + switch (nTargetType) { + case SPELL_TARGET_ALLALLIES: + return HandleDispositionALLALLIES(oTarget, oSource); + + case SPELL_TARGET_SELECTIVEHOSTILE: + return HandleDispositionSELECTIVEHOSTILE(oTarget, oSource); + + case SPELL_TARGET_STANDARDHOSTILE: + return HandleDispositionSTANDARDHOSTILE(oTarget, oSource); + } + + // unhandled dispositions + return FALSE; +} diff --git a/src/include/prgt_inc.nss b/src/include/prgt_inc.nss new file mode 100644 index 0000000..724da40 --- /dev/null +++ b/src/include/prgt_inc.nss @@ -0,0 +1,105 @@ +//:://///////////////////////////////////////////// +//:: Name Primogenitors Respawning Ground Trap include +//:: FileName prgt_inc +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This was orignally designed to allow respawning ground traps + However, as of NWN 1.67 this is no longer needed. + + The secondary purpose of this is now most useful and that + is to provide a system where a wide variety of traps + can be set and used. + + This particular file provides interface functions +*/ +//::////////////////////////////////////////////// +//:: Created By: Primogenitor +//:: Created On: Quite some time ago +//::////////////////////////////////////////////// + +/* +int DAMAGE_TYPE_BLUDGEONING = 1; +int DAMAGE_TYPE_PIERCING = 2; +int DAMAGE_TYPE_SLASHING = 4; +int DAMAGE_TYPE_MAGICAL = 8; +int DAMAGE_TYPE_ACID = 16; +int DAMAGE_TYPE_COLD = 32; +int DAMAGE_TYPE_DIVINE = 64; +int DAMAGE_TYPE_ELECTRICAL = 128; +int DAMAGE_TYPE_FIRE = 256; +int DAMAGE_TYPE_NEGATIVE = 512; +int DAMAGE_TYPE_POSITIVE = 1024; +int DAMAGE_TYPE_SONIC = 2048; +*/ + +#include "prgt_inc_trap" +#include "inc_utility" +#include "prc_misc_const" + +const int TRAP_EVENT_TRIGGERED = 1; +const int TRAP_EVENT_DISARMED = 2; +const int TRAP_EVENT_RECOVERED = 3; //this is in addition to being disarmed + + +object PRGT_CreateTrapAtLocation(location lLoc, struct trap tTrap) +{ + object oTrap; + oTrap = CreateTrapAtLocation(TRAP_BASE_TYPE_PRGT, + lLoc, + tTrap.fSize, + "",//tag + STANDARD_FACTION_HOSTILE, + tTrap.sDisarmScript, + tTrap.sTriggerScript); + + SetLocalTrap(oTrap, "TrapSettings", tTrap); + SetTrapOneShot(oTrap, FALSE); + SetTrapRecoverable(oTrap, FALSE); + + return oTrap; +} + +void PRGT_CreateTrapOnObject(object oTrap, struct trap tTrap) +{ + CreateTrapOnObject(TRAP_BASE_TYPE_PRGT, + oTrap, + STANDARD_FACTION_HOSTILE, + tTrap.sDisarmScript, + tTrap.sTriggerScript); + + SetLocalTrap(oTrap, "TrapSettings", tTrap); + SetTrapOneShot(oTrap, FALSE); + SetTrapRecoverable(oTrap, FALSE); +} + + +void PRGT_VoidCreateTrapAtLocation(location lLoc, struct trap tTrap) +{ + PRGT_CreateTrapAtLocation(lLoc, tTrap); +} + +void DoTrapXP(object oTrap, object oTarget, int nEvent) +{ + switch(nEvent) + { + case TRAP_EVENT_TRIGGERED: + if(GetLocalString(GetModule(), PRC_PRGT_XP_SCRIPT_TRIGGERED) != "") + ExecuteScript(PRC_PRGT_XP_SCRIPT_TRIGGERED, oTarget); + else if(GetPRCSwitch(PRC_PRGT_XP_AWARD_FOR_TRIGGERED)) + GiveXPRewardToParty(oTarget, OBJECT_INVALID, GetLocalTrap(oTrap, "TrapSettings").nCR); + break; + case TRAP_EVENT_DISARMED: + if(GetLocalString(GetModule(), PRC_PRGT_XP_SCRIPT_DISARMED) != "") + ExecuteScript(PRC_PRGT_XP_SCRIPT_TRIGGERED, oTarget); + else if(GetPRCSwitch(PRC_PRGT_XP_AWARD_FOR_DISARMED)) + GiveXPRewardToParty(oTarget, OBJECT_INVALID, GetLocalTrap(oTrap, "TrapSettings").nCR); + break; + case TRAP_EVENT_RECOVERED: + if(GetLocalString(GetModule(), PRC_PRGT_XP_SCRIPT_RECOVERED) != "") + ExecuteScript(PRC_PRGT_XP_SCRIPT_TRIGGERED, oTarget); + else if(GetPRCSwitch(PRC_PRGT_XP_AWARD_FOR_RECOVERED)) + GiveXPRewardToParty(oTarget, OBJECT_INVALID, GetLocalTrap(oTrap, "TrapSettings").nCR); + break; + } +} diff --git a/src/include/prgt_inc_trap.nss b/src/include/prgt_inc_trap.nss new file mode 100644 index 0000000..2040b7a --- /dev/null +++ b/src/include/prgt_inc_trap.nss @@ -0,0 +1,350 @@ +//:://///////////////////////////////////////////// +//:: Name Primogenitors Respawning Ground Trap include +//:: FileName prgt_inc_trap +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This was orignally designed to allow respawning ground traps + However, as of NWN 1.67 this is no longer needed. + + The secondary purpose of this is now most useful and that + is to provide a system where a wide variety of traps + can be set and used. + + This particular file details the trap struct used to track + all the relevant information in it +*/ +//::////////////////////////////////////////////// +//:: Created By: Primogenitor +//:: Created On: Quite some time ago +//::////////////////////////////////////////////// + +#include "prc_misc_const" +#include "inc_ecl" + + +struct trap +{ +//DC to detect the trap + int nDetectDC; +//DC to disarm the trap +//By PnP only rogues can disarm traps over DC 35? + int nDisarmDC; +//this is the script that is fired when the trap is +//triggered + string sTriggerScript; +//this is the script that is fired when the trap is +//disarmed + string sDisarmScript; +//if the trap casts a spell when triggered +//these control the details + int nSpellID; + int nSpellLevel; + int nSpellMetamagic; + int nSpellDC; +//these are for normal dmaging type traps + int nDamageType; + int nRadius; + int nDamageDice; + int nDamageSize; + int nDamageBonus; +//visual things + int nTargetVFX; + int nTrapVFX; + int nBeamVFX; + int nFakeSpell; + int nFakeSpellLoc; +//saves for half + int nAllowReflexSave; + int nAllowFortSave; + int nAllowWillSave; + int nSaveDC; +//this is a mesure of CR of the trap +//can be used by XP scripts + int nCR; +//delay before respawning once destroyed/disarmed + int nRespawnSeconds; +//CR passed to CreateRandomTrap when respawning +//if not set, uses same trap as before + int nRespawnRandomCR; +//this is the size of the trap on the ground +//if zero, 2.0 is used + float fSize; +}; + +struct trap GetLocalTrap(object oObject, string sVarName); +void SetLocalTrap(object oObject, string sVarName, struct trap tTrap); +void DeleteLocalTrap(object oObject, string sVarName); +struct trap CreateRandomTrap(int nCR = -1); + +/** + * Converts the given trap into a string. The structure members' names and + * values are listed separated by line breaks. + * + * @param tTrap A trap structure to convert into a string. + * @return A string representation of tTrap. + */ +string TrapToString(struct trap tTrap); + + +////////////////////////////////////// +/* Includes */ +////////////////////////////////////// + +#include "inc_utility" + + + +////////////////////////////////////// +/* Function Definitions */ +////////////////////////////////////// + +struct trap CreateRandomTrap(int nCR = -1) +{ + if(nCR == -1) + { + nCR = GetECL(GetFirstPC()); + nCR += Random(5)-2; + if(nCR < 1) + nCR = 1; + } + struct trap tReturn; + switch(Random(26)) + { + case 0: tReturn.nDamageType = DAMAGE_TYPE_PIERCING; break; + case 1: tReturn.nDamageType = DAMAGE_TYPE_PIERCING; break; + case 2: tReturn.nDamageType = DAMAGE_TYPE_PIERCING; break; + case 3: tReturn.nDamageType = DAMAGE_TYPE_PIERCING; break; + case 4: tReturn.nDamageType = DAMAGE_TYPE_PIERCING; break; + case 5: tReturn.nDamageType = DAMAGE_TYPE_PIERCING; break; + case 6: tReturn.nDamageType = DAMAGE_TYPE_BLUDGEONING; break; + case 7: tReturn.nDamageType = DAMAGE_TYPE_BLUDGEONING; break; + case 8: tReturn.nDamageType = DAMAGE_TYPE_BLUDGEONING; break; + case 9: tReturn.nDamageType = DAMAGE_TYPE_BLUDGEONING; break; + case 10: tReturn.nDamageType = DAMAGE_TYPE_BLUDGEONING; break; + case 11: tReturn.nDamageType = DAMAGE_TYPE_BLUDGEONING; break; + case 12: tReturn.nDamageType = DAMAGE_TYPE_SLASHING; break; + case 13: tReturn.nDamageType = DAMAGE_TYPE_SLASHING; break; + case 14: tReturn.nDamageType = DAMAGE_TYPE_SLASHING; break; + case 15: tReturn.nDamageType = DAMAGE_TYPE_SLASHING; break; + case 16: tReturn.nDamageType = DAMAGE_TYPE_SLASHING; break; + case 17: tReturn.nDamageType = DAMAGE_TYPE_SLASHING; break; + case 18: tReturn.nDamageType = DAMAGE_TYPE_FIRE; break; + case 19: tReturn.nDamageType = DAMAGE_TYPE_FIRE; break; + case 20: tReturn.nDamageType = DAMAGE_TYPE_COLD; break; + case 21: tReturn.nDamageType = DAMAGE_TYPE_COLD; break; + case 22: tReturn.nDamageType = DAMAGE_TYPE_ELECTRICAL; break; + case 23: tReturn.nDamageType = DAMAGE_TYPE_ELECTRICAL; break; + case 24: tReturn.nDamageType = DAMAGE_TYPE_ACID; break; + case 25: tReturn.nDamageType = DAMAGE_TYPE_SONIC; break; + } + + tReturn.nRadius = 5+(nCR/2); + tReturn.nDamageDice = 1+(nCR/2); + tReturn.nDamageSize = 6; + tReturn.nDamageBonus = 0; + tReturn.nDetectDC = 15+nCR; + tReturn.nDisarmDC = 15+nCR; + tReturn.nCR = nCR; + tReturn.nRespawnSeconds = 0; + tReturn.nRespawnRandomCR = nCR; + tReturn.sTriggerScript = "prgt_trap_fire"; + tReturn.sDisarmScript = "prgt_trap_disa"; + tReturn.fSize = 2.0; + + switch(tReturn.nDamageType) + { + case DAMAGE_TYPE_BLUDGEONING: + tReturn.nFakeSpellLoc = 773; //bolder tossing + tReturn.nRadius /= 2; + tReturn.nDamageDice *= 2; + tReturn.nAllowReflexSave = TRUE; + tReturn.nSaveDC = 10+nCR; + break; + case DAMAGE_TYPE_SLASHING: + tReturn.nTrapVFX = VFX_FNF_SWINGING_BLADE; + tReturn.nRadius /= 2; + tReturn.nDamageSize *= 2; + tReturn.nAllowReflexSave = TRUE; + tReturn.nSaveDC = 10+nCR; + break; + case DAMAGE_TYPE_PIERCING: + tReturn.nTargetVFX = VFX_IMP_SPIKE_TRAP; + tReturn.nRadius /= 4; + tReturn.nDamageSize *= 2; + tReturn.nDamageDice *= 2; + tReturn.nAllowReflexSave = TRUE; + tReturn.nSaveDC = 10+nCR; + break; + case DAMAGE_TYPE_COLD: + tReturn.nTrapVFX = VFX_FNF_ICESTORM; + tReturn.nTargetVFX = VFX_IMP_FROST_S; + tReturn.nRadius *= 2; + tReturn.nDamageSize /= 2; + tReturn.nDamageDice /= 2; + tReturn.nAllowFortSave = TRUE; + tReturn.nSaveDC = 10+nCR; + break; + case DAMAGE_TYPE_FIRE: + tReturn.nTrapVFX = VFX_FNF_FIREBALL; + tReturn.nTargetVFX = VFX_IMP_FLAME_S; + tReturn.nRadius *= 2; + tReturn.nDamageSize /= 2; + tReturn.nDamageDice /= 2; + tReturn.nAllowReflexSave = TRUE; + tReturn.nSaveDC = 10+nCR; + break; + case DAMAGE_TYPE_ELECTRICAL: + tReturn.nBeamVFX = VFX_BEAM_LIGHTNING; + tReturn.nTargetVFX = VFX_IMP_LIGHTNING_S; + tReturn.nRadius /= 4; + tReturn.nDamageSize *= 2; + tReturn.nDamageDice *= 2; + tReturn.nAllowReflexSave = TRUE; + tReturn.nSaveDC = 10+nCR; + break; + case DAMAGE_TYPE_SONIC: + tReturn.nTrapVFX = VFX_FNF_SOUND_BURST; + tReturn.nTargetVFX = VFX_IMP_SONIC; + tReturn.nRadius *= 2; + tReturn.nDamageSize /= 2; + tReturn.nDamageDice /= 2; + tReturn.nAllowFortSave = TRUE; + tReturn.nSaveDC = 10+nCR; + break; + case DAMAGE_TYPE_ACID: + tReturn.nTrapVFX = VFX_FNF_GAS_EXPLOSION_ACID; + tReturn.nTargetVFX = VFX_IMP_ACID_S; + tReturn.nRadius *= 2; + tReturn.nDamageSize /= 2; + tReturn.nDamageDice /= 2; + tReturn.nAllowFortSave = TRUE; + tReturn.nSaveDC = 10+nCR; + break; + } + return tReturn; +} + +struct trap GetLocalTrap(object oObject, string sVarName) +{ + struct trap tReturn; + tReturn.nDetectDC = GetLocalInt(oObject, sVarName+".nDetectDC"); + tReturn.nDisarmDC = GetLocalInt(oObject, sVarName+".nDisarmDC"); + tReturn.sTriggerScript = GetLocalString(oObject, sVarName+".sTriggerScript"); + tReturn.sDisarmScript = GetLocalString(oObject, sVarName+".sDisarmScript"); + tReturn.nSpellID = GetLocalInt(oObject, sVarName+".nSpellID"); + tReturn.nSpellLevel = GetLocalInt(oObject, sVarName+".nSpellLevel"); + tReturn.nSpellMetamagic = GetLocalInt(oObject, sVarName+".nSpellMetamagic"); + tReturn.nSpellDC = GetLocalInt(oObject, sVarName+".nSpellDC"); + tReturn.nDamageType = GetLocalInt(oObject, sVarName+".nDamageType"); + tReturn.nRadius = GetLocalInt(oObject, sVarName+".nRadius"); + tReturn.nDamageDice = GetLocalInt(oObject, sVarName+".nDamageDice"); + tReturn.nDamageSize = GetLocalInt(oObject, sVarName+".nDamageSize"); + tReturn.nDamageBonus = GetLocalInt(oObject, sVarName+".nDamageBonus"); + tReturn.nAllowReflexSave= GetLocalInt(oObject, sVarName+".nAllowReflexSave"); + tReturn.nAllowFortSave = GetLocalInt(oObject, sVarName+".nAllowFortSave"); + tReturn.nAllowWillSave = GetLocalInt(oObject, sVarName+".nAllowWillSave"); + tReturn.nSaveDC = GetLocalInt(oObject, sVarName+".nSaveDC"); + tReturn.nTargetVFX = GetLocalInt(oObject, sVarName+".nTargetVFX"); + tReturn.nTrapVFX = GetLocalInt(oObject, sVarName+".nTrapVFX"); + tReturn.nFakeSpell = GetLocalInt(oObject, sVarName+".nFakeSpell"); + tReturn.nFakeSpellLoc = GetLocalInt(oObject, sVarName+".nFakeSpellLoc"); + tReturn.nBeamVFX = GetLocalInt(oObject, sVarName+".nBeamVFX"); + tReturn.nCR = GetLocalInt(oObject, sVarName+".nCR"); + tReturn.nRespawnSeconds = GetLocalInt(oObject, sVarName+".nRespawnSeconds"); + tReturn.nRespawnRandomCR= GetLocalInt(oObject, sVarName+".nRespawnRandomCR"); + tReturn.fSize = GetLocalFloat(oObject, sVarName+".fSize"); + + return tReturn; +} +void SetLocalTrap(object oObject, string sVarName, struct trap tTrap) +{ + SetLocalInt(oObject, sVarName+".nDetectDC", tTrap.nDetectDC); + SetLocalInt(oObject, sVarName+".nDisarmDC", tTrap.nDisarmDC); + SetLocalString(oObject, sVarName+".sTriggerScript", tTrap.sTriggerScript); + SetLocalString(oObject, sVarName+".sDisarmScript", tTrap.sDisarmScript); + SetLocalInt(oObject, sVarName+".nSpellID", tTrap.nSpellID); + SetLocalInt(oObject, sVarName+".nSpellLevel", tTrap.nSpellLevel); + SetLocalInt(oObject, sVarName+".nSpellMetamagic", tTrap.nSpellMetamagic); + SetLocalInt(oObject, sVarName+".nSpellDC", tTrap.nSpellDC); + SetLocalInt(oObject, sVarName+".nDamageType", tTrap.nDamageType); + SetLocalInt(oObject, sVarName+".nRadius", tTrap.nRadius); + SetLocalInt(oObject, sVarName+".nDamageDice", tTrap.nDamageDice); + SetLocalInt(oObject, sVarName+".nDamageSize", tTrap.nDamageSize); + SetLocalInt(oObject, sVarName+".nDamageBonus", tTrap.nDamageBonus); + SetLocalInt(oObject, sVarName+".nAllowReflexSave", tTrap.nAllowReflexSave); + SetLocalInt(oObject, sVarName+".nAllowFortSave", tTrap.nAllowFortSave); + SetLocalInt(oObject, sVarName+".nAllowWillSave", tTrap.nAllowWillSave); + SetLocalInt(oObject, sVarName+".nSaveDC", tTrap.nSaveDC); + SetLocalInt(oObject, sVarName+".nTargetVFX", tTrap.nTargetVFX); + SetLocalInt(oObject, sVarName+".nTrapVFX", tTrap.nTrapVFX); + SetLocalInt(oObject, sVarName+".nFakeSpell", tTrap.nFakeSpell); + SetLocalInt(oObject, sVarName+".nFakeSpellLoc", tTrap.nFakeSpellLoc); + SetLocalInt(oObject, sVarName+".nBeamVFX", tTrap.nBeamVFX); + SetLocalInt(oObject, sVarName+".nCR", tTrap.nCR); + SetLocalInt(oObject, sVarName+".nRespawnSeconds", tTrap.nRespawnSeconds); + SetLocalInt(oObject, sVarName+".nRespawnRandomCR", tTrap.nRespawnRandomCR); + SetLocalFloat(oObject, sVarName+".fSize", tTrap.fSize); +} +void DeleteLocalTrap(object oObject, string sVarName) +{ + DeleteLocalInt(oObject, sVarName+".nDetectDC"); + DeleteLocalInt(oObject, sVarName+".nDisarmDC"); + DeleteLocalString(oObject, sVarName+".sTriggerScript"); + DeleteLocalString(oObject, sVarName+".sDisarmScript"); + DeleteLocalInt(oObject, sVarName+".nSpellID"); + DeleteLocalInt(oObject, sVarName+".nSpellLevel"); + DeleteLocalInt(oObject, sVarName+".nSpellMetamagic"); + DeleteLocalInt(oObject, sVarName+".nSpellDC"); + DeleteLocalInt(oObject, sVarName+".nDamageType"); + DeleteLocalInt(oObject, sVarName+".nRadius"); + DeleteLocalInt(oObject, sVarName+".nDamageDice"); + DeleteLocalInt(oObject, sVarName+".nDamageSize"); + DeleteLocalInt(oObject, sVarName+".nDamageBonus"); + DeleteLocalInt(oObject, sVarName+".nAllowReflexSave"); + DeleteLocalInt(oObject, sVarName+".nAllowFortSave"); + DeleteLocalInt(oObject, sVarName+".nAllowWillSave"); + DeleteLocalInt(oObject, sVarName+".nSaveDC"); + DeleteLocalInt(oObject, sVarName+".nTargetVFX"); + DeleteLocalInt(oObject, sVarName+".nTrapVFX"); + DeleteLocalInt(oObject, sVarName+".nFakeSpell"); + DeleteLocalInt(oObject, sVarName+".nFakeSpellLoc"); + DeleteLocalInt(oObject, sVarName+".nBeamVFX"); + DeleteLocalInt(oObject, sVarName+".nCR"); + DeleteLocalInt(oObject, sVarName+".nRespawnSeconds"); + DeleteLocalInt(oObject, sVarName+".nRespawnRandomCR"); + DeleteLocalFloat(oObject, sVarName+".fSize"); +} + +string TrapToString(struct trap tTrap) +{ + string s; + s += "nDetectDC: " + IntToString(tTrap.nDetectDC) + "\n"; + s += "nDisarmDC: " + IntToString(tTrap.nDisarmDC) + "\n"; + s += "sTriggerScript: '" + tTrap.sTriggerScript + "'\n"; + s += "sDisarmScript: '" + tTrap.sDisarmScript + "'\n"; + s += "nSpellID: " + IntToString(tTrap.nSpellID) + "\n"; + s += "nSpellLevel: " + IntToString(tTrap.nSpellLevel) + "\n"; + s += "nSpellMetamagic: " + IntToString(tTrap.nSpellMetamagic) + "\n"; + s += "nSpellDC: " + IntToString(tTrap.nSpellDC) + "\n"; + s += "nDamageType: " + IntToString(tTrap.nDamageType) + "\n"; + s += "nRadius: " + IntToString(tTrap.nRadius) + "\n"; + s += "nDamageDice: " + IntToString(tTrap.nDamageDice) + "\n"; + s += "nDamageSize: " + IntToString(tTrap.nDamageSize) + "\n"; + s += "nDamageBonus: " + IntToString(tTrap.nDamageBonus) + "\n"; + s += "nAllowReflexSave: " + IntToString(tTrap.nAllowReflexSave) + "\n"; + s += "nAllowFortSave: " + IntToString(tTrap.nAllowFortSave) + "\n"; + s += "nAllowWillSave: " + IntToString(tTrap.nAllowWillSave) + "\n"; + s += "nSaveDC: " + IntToString(tTrap.nSaveDC) + "\n"; + s += "nTargetVFX: " + IntToString(tTrap.nTargetVFX) + "\n"; + s += "nTrapVFX: " + IntToString(tTrap.nTrapVFX) + "\n"; + s += "nFakeSpell: " + IntToString(tTrap.nFakeSpell) + "\n"; + s += "nFakeSpellLoc: " + IntToString(tTrap.nFakeSpellLoc) + "\n"; + s += "nBeamVFX: " + IntToString(tTrap.nBeamVFX) + "\n"; + s += "nCR: " + IntToString(tTrap.nCR) + "\n"; + s += "nRespawnSeconds: " + IntToString(tTrap.nRespawnSeconds) + "\n"; + s += "nRespawnRandomCR: " + IntToString(tTrap.nRespawnRandomCR) + "\n"; + s += "fSize: " + FloatToString(tTrap.fSize) + "\n"; + + return s; +} diff --git a/src/include/psi_inc_ac_const.nss b/src/include/psi_inc_ac_const.nss new file mode 100644 index 0000000..425bddc --- /dev/null +++ b/src/include/psi_inc_ac_const.nss @@ -0,0 +1,87 @@ +//:://///////////////////////////////////////////// +//:: Astral Construct constants include +//:: psi_inc_ac_const +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// +//:: Created By: Ornedan +//:: Created On: 23.01.2005 +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Constant defintions */ +////////////////////////////////////////////////// +const int ASTRAL_CONSTRUCT_OPTION_BUFF = 1; +const int ASTRAL_CONSTRUCT_OPTION_CELERITY = 2; +const int ASTRAL_CONSTRUCT_OPTION_CLEAVE = 4; +const int ASTRAL_CONSTRUCT_OPTION_IMPROVED_SLAM = 8; +const int ASTRAL_CONSTRUCT_OPTION_DEFLECTION = 16; +const int ASTRAL_CONSTRUCT_OPTION_MOBILITY = 32; +const int ASTRAL_CONSTRUCT_OPTION_POWER_ATTACK = 64; +const int ASTRAL_CONSTRUCT_OPTION_RESISTANCE = 128; +const int ASTRAL_CONSTRUCT_OPTION_KNOCKDOWN = 256; +const int ASTRAL_CONSTRUCT_OPTION_ENERGY_TOUCH = 512; +const int ASTRAL_CONSTRUCT_OPTION_EXTRA_ATTACK = 1024; +const int ASTRAL_CONSTRUCT_OPTION_FAST_HEALING = 2048; +const int ASTRAL_CONSTRUCT_OPTION_HEAVY_DEFLECT = 4096; +const int ASTRAL_CONSTRUCT_OPTION_IMP_BUFF = 8192; +const int ASTRAL_CONSTRUCT_OPTION_IMP_CRIT = 16384; +const int ASTRAL_CONSTRUCT_OPTION_IMP_DAM_RED = 32768; +const int ASTRAL_CONSTRUCT_OPTION_MUSCLE = 65536; +const int ASTRAL_CONSTRUCT_OPTION_POISON_TOUCH = 131072; +const int ASTRAL_CONSTRUCT_OPTION_BLINDFIGHT = 262144; +const int ASTRAL_CONSTRUCT_OPTION_CONCUSSION = 524288; +const int ASTRAL_CONSTRUCT_OPTION_DIMENSION_SLIDE = 1048576; +const int ASTRAL_CONSTRUCT_OPTION_ENERGY_BOLT = 2097152; +const int ASTRAL_CONSTRUCT_OPTION_EXTRA_BUFF = 4194304; +const int ASTRAL_CONSTRUCT_OPTION_EXTREME_DAM_RED = 8388608; +const int ASTRAL_CONSTRUCT_OPTION_EXTREME_DEFLECT = 16777216; +const int ASTRAL_CONSTRUCT_OPTION_NATURAL_INVIS = 33554432; +const int ASTRAL_CONSTRUCT_OPTION_POWER_RESIST = 67108864; +const int ASTRAL_CONSTRUCT_OPTION_REND = 134217728; +const int ASTRAL_CONSTRUCT_OPTION_SPRING_ATTACK = 268435456; +const int ASTRAL_CONSTRUCT_OPTION_WHIRLWIND = 536870912; + + +const int ELEMENT_ACID = 1; +const int ELEMENT_COLD = 2; +const int ELEMENT_ELECTRICITY = 4; +const int ELEMENT_FIRE = 8; +const int ELEMENT_SONIC = 16; + + +const int TEST_FLAG = 1; + +const int MENU_A_COST = 1; +const int MENU_B_COST = 2; +const int MENU_C_COST = 4; + +const int MENU_A_MASK = 511; +const int MENU_B_MASK = 261632; +const int MENU_C_MASK = 1073479680; + + +const int AC_APPEARANCE_CHECK_LOW = 10; +const int AC_APPEARANCE_CHECK_MEDIUM = 20; +const int AC_APPEARANCE_CHECK_HIGH = 30; + + +// For convenience. Compiler will complain if these are typoed :D +const string ASTRAL_CONSTRUCT_LEVEL = "AstralConstructLevel"; +const string ASTRAL_CONSTRUCT_OPTION_FLAGS = "AstralConstructOptionFlags"; +const string ASTRAL_CONSTRUCT_RESISTANCE_FLAGS = "AstralConstructResistanceFlags"; +const string ASTRAL_CONSTRUCT_ENERGY_TOUCH_FLAGS = "AstralConstructEnergyTouchFlags"; +const string ASTRAL_CONSTRUCT_ENERGY_BOLT_FLAGS = "AstralConstructEnergyBoltFlags"; +const string ASTRAL_CONSTRUCT_POISON_TOUCH = "AstralConstructPoisonTouch"; +const string ASTRAL_CONSTRUCT_CONCUSSION = "AstralConstructConcussion"; + +const string ASTRAL_CONSTRUCT_CLAW = "psi_ast_con_claw"; +const string ASTRAL_CONSTRUCT_SLAM = "psi_ast_con_slam"; + +const string CURRENT_SLOT = "CurrentAstralConstructSlot"; +const string EDIT = "Edit"; + +const string MANIFESTED_SLOT = "ManifestedAstralConstructSlot"; + + +// Strref constants +const int STRREF_INVALID_CONSTRUCT_IN_SLOT = 16824742; diff --git a/src/include/psi_inc_ac_convo.nss b/src/include/psi_inc_ac_convo.nss new file mode 100644 index 0000000..f34c501 --- /dev/null +++ b/src/include/psi_inc_ac_convo.nss @@ -0,0 +1,424 @@ +//:://///////////////////////////////////////////// +//:: Astral Construct conversation include +//:: psi_inc_ac_convo +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// +//:: Created By: Ornedan +//:: Created On: 25.01.2005 +//::////////////////////////////////////////////// + +#include "psi_inc_ac_const" +#include "prc_feat_const" + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + + +int GetNumberOfFlagsRaised(int nFlagSet); +int GetTotalNumberOfSlotsUsed(object oPC); +int GetMaxFlagsForLevel(int nLevel); +int GetHasBuff(int nFlags); + +// Custom token stuff +string GetSizeAsString(int nLevel); +string GetHPAsString(int nLevel, int nFlags); +string GetSpeedAsString(int nLevel, int nFlags); +string StringAdder(string sOriginal, string sAdd, int bFirst); +string GetMenuASelectionsAsString(object oPC); +string GetMenuBSelectionsAsString(object oPC); +string GetMenuCSelectionsAsString(object oPC); + + + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + + +int GetNumberOfFlagsRaised(int nFlagSet) +{ + int i, nReturn = 0; + + for(i = 0; i < 32; i++) + { + if((nFlagSet >>> i) & TEST_FLAG) + nReturn++; + } + + return nReturn; +} + + + +int GetTotalNumberOfSlotsUsed(object oPC) +{ + int nFlags = GetLocalInt(oPC, ASTRAL_CONSTRUCT_OPTION_FLAGS + EDIT); + + int nFlagTotal = 0; + + // Handle Menu A flags. Each flag costs 1 slot + nFlagTotal += MENU_A_COST * GetNumberOfFlagsRaised(nFlags & MENU_A_MASK); + if(nFlags & ASTRAL_CONSTRUCT_OPTION_RESISTANCE) + { + nFlagTotal -= MENU_A_COST; //We don't want to count the flag twice + nFlagTotal += MENU_A_COST * GetNumberOfFlagsRaised(GetLocalInt(oPC, ASTRAL_CONSTRUCT_RESISTANCE_FLAGS + EDIT)); + } + + // Handle Menu B flags. Each flag costs 2 slots + nFlagTotal += MENU_B_COST * GetNumberOfFlagsRaised(nFlags & MENU_B_MASK); + if(nFlags & ASTRAL_CONSTRUCT_OPTION_ENERGY_TOUCH) + { + nFlagTotal -= MENU_B_COST; //We don't want to count the flag twice + nFlagTotal += MENU_B_COST * GetNumberOfFlagsRaised(GetLocalInt(oPC, ASTRAL_CONSTRUCT_ENERGY_TOUCH_FLAGS + EDIT)); + } + + // Handle Menu C flags. Each flag costs 4 slots + nFlagTotal += MENU_C_COST * GetNumberOfFlagsRaised(nFlags & MENU_C_MASK); + + + return nFlagTotal; +} + + +int GetMaxSlotsForLevel(int nLevel, object oManifester) +{ + int multiplier = 1; + + if (GetHasFeat(FEAT_BOOST_CONSTRUCT, oManifester)) + { + multiplier = 2; + } + + switch(nLevel) + { + case 1: case 2: case 3: + return 1 * multiplier; + case 4: case 5: case 6: + return 2 * multiplier; + case 7: case 8: case 9: + return 4 * multiplier; + + default: + WriteTimestampedLogEntry("Invalid nLevel value passed to GetMaxFlagsForLevel"); + } + + return 0; +} + + + +int GetHasBuff(int nFlags) +{ + if((nFlags & ASTRAL_CONSTRUCT_OPTION_BUFF) || + (nFlags & ASTRAL_CONSTRUCT_OPTION_IMP_BUFF) || + (nFlags & ASTRAL_CONSTRUCT_OPTION_EXTRA_BUFF)) + return TRUE; + else + return FALSE; +} + + +string GetSizeAsString(int nLevel) +{ + switch(nLevel) + { + case 1: + return "Small"; + case 2: case 3: case 4: + return "Medium"; + case 5: case 6: case 7: case 8: + return "Large"; + case 9: + return "Huge"; + + default: + WriteTimestampedLogEntry("Invalid nLevel value passed to GetSizeAsString"); + } + + return "ERROR!"; +} + + +string GetHPAsString(int nLevel, int nFlags) +{ + int nBaseHP; + + switch(nLevel) + { + case 1: nBaseHP = 15; break; + case 2: nBaseHP = 31; break; + case 3: nBaseHP = 36; break; + case 4: nBaseHP = 47; break; + case 5: nBaseHP = 68; break; + case 6: nBaseHP = 85; break; + case 7: nBaseHP = 101; break; + case 8: nBaseHP = 118; break; + case 9: nBaseHP = 144; break; + + default: + WriteTimestampedLogEntry("Invalid nLevel value passed to GetHPAsString"); + return "ERROR!"; + } + + if(nFlags & ASTRAL_CONSTRUCT_OPTION_BUFF) + nBaseHP += 5; + if(nFlags & ASTRAL_CONSTRUCT_OPTION_IMP_BUFF) + nBaseHP += 15; + if(nFlags & ASTRAL_CONSTRUCT_OPTION_EXTRA_BUFF) + nBaseHP += 30; + + return IntToString(nBaseHP); +} + + +string GetSpeedAsString(int nLevel, int nFlags) +{ + int nSpeed; + switch(nLevel) + { + case 1: + nSpeed = 30; + break; + case 2: case 3: case 4: + case 5: case 6: case 7: case 8: + nSpeed = 40; + break; + case 9: + nSpeed = 50; + break; + + default: + WriteTimestampedLogEntry("Invalid nLevel value passed to GetSizeAsString"); + return "ERROR!"; + } + + if(nFlags & ASTRAL_CONSTRUCT_OPTION_CELERITY) + nSpeed += 10; + + return IntToString(nSpeed); +} + + +string StringAdder(string sOriginal, string sAdd, int bFirst) +{ + if(bFirst) return sOriginal + sAdd; + else return sOriginal + ", " + sAdd; +} + + +string GetMenuASelectionsAsString(object oPC) +{ + string sReturn = ""; + int bFirst = TRUE; + + int nFlags = GetLocalInt(oPC, ASTRAL_CONSTRUCT_OPTION_FLAGS + EDIT); + + if(nFlags & ASTRAL_CONSTRUCT_OPTION_BUFF){ + sReturn = StringAdder(sReturn, "Buff", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_CELERITY){ + sReturn = StringAdder(sReturn, "Celerity", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_CLEAVE){ + sReturn = StringAdder(sReturn, "Cleave", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_IMPROVED_SLAM){ + sReturn = StringAdder(sReturn, "Improved Slam Attack", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_DEFLECTION){ + sReturn = StringAdder(sReturn, "Deflection", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_MOBILITY){ + sReturn = StringAdder(sReturn, "Mobility", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_POWER_ATTACK){ + sReturn = StringAdder(sReturn, "Power Attack", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_RESISTANCE){ + int nElemFlags = GetLocalInt(oPC, ASTRAL_CONSTRUCT_RESISTANCE_FLAGS + EDIT); + + if(nElemFlags & ELEMENT_ACID){ + sReturn = StringAdder(sReturn, "Resistance - Acid", bFirst); + bFirst = FALSE; + } + if(nElemFlags & ELEMENT_COLD){ + sReturn = StringAdder(sReturn, "Resistance - Cold", bFirst); + bFirst = FALSE; + } + if(nElemFlags & ELEMENT_ELECTRICITY){ + sReturn = StringAdder(sReturn, "Resistance - Electricity", bFirst); + bFirst = FALSE; + } + if(nElemFlags & ELEMENT_FIRE){ + sReturn = StringAdder(sReturn, "Resistance - Fire", bFirst); + bFirst = FALSE; + } + if(nElemFlags & ELEMENT_SONIC){ + sReturn = StringAdder(sReturn, "Resistance - Sonic", bFirst); + bFirst = FALSE; + } + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_KNOCKDOWN){ + sReturn = StringAdder(sReturn, "Knockdown", bFirst); + bFirst = FALSE; + } + + return sReturn; +} + + +string GetMenuBSelectionsAsString(object oPC) +{ + string sReturn = ""; + int bFirst = TRUE; + + int nFlags = GetLocalInt(oPC, ASTRAL_CONSTRUCT_OPTION_FLAGS + EDIT); + + if(nFlags & ASTRAL_CONSTRUCT_OPTION_ENERGY_TOUCH){ + int nElemFlags = GetLocalInt(oPC, ASTRAL_CONSTRUCT_ENERGY_TOUCH_FLAGS + EDIT); + + if(nElemFlags & ELEMENT_ACID){ + sReturn = StringAdder(sReturn, "Energy Touch - Acid", bFirst); + bFirst = FALSE; + } + if(nElemFlags & ELEMENT_COLD){ + sReturn = StringAdder(sReturn, "Energy Touch - Cold", bFirst); + bFirst = FALSE; + } + if(nElemFlags & ELEMENT_ELECTRICITY){ + sReturn = StringAdder(sReturn, "Energy Touch - Electricity", bFirst); + bFirst = FALSE; + } + if(nElemFlags & ELEMENT_FIRE){ + sReturn = StringAdder(sReturn, "Energy Touch - Fire", bFirst); + bFirst = FALSE; + } + if(nElemFlags & ELEMENT_SONIC){ + sReturn = StringAdder(sReturn, "Energy Touch - Sonic", bFirst); + bFirst = FALSE; + } + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_EXTRA_ATTACK){ + sReturn = StringAdder(sReturn, "Extra Attack", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_FAST_HEALING){ + sReturn = StringAdder(sReturn, "Fast Healing", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_HEAVY_DEFLECT){ + sReturn = StringAdder(sReturn, "Heavy Deflection", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_IMP_BUFF){ + sReturn = StringAdder(sReturn, "Improved Buff", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_IMP_CRIT){ + sReturn = StringAdder(sReturn, "Improved Critical", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_IMP_DAM_RED){ + sReturn = StringAdder(sReturn, "Improved Damage Reduction", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_MUSCLE){ + sReturn = StringAdder(sReturn, "Muscle", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_POISON_TOUCH){ + sReturn = StringAdder(sReturn, "Poison Touch", bFirst); + bFirst = FALSE; + } + + + return sReturn; +} + + +string GetMenuCSelectionsAsString(object oPC) +{ + string sReturn = ""; + int bFirst = TRUE; + + int nFlags = GetLocalInt(oPC, ASTRAL_CONSTRUCT_OPTION_FLAGS + EDIT); + + if(nFlags & ASTRAL_CONSTRUCT_OPTION_BLINDFIGHT){ + sReturn = StringAdder(sReturn, "Blindfight", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_CONCUSSION){ + sReturn = StringAdder(sReturn, "Concussion", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_DIMENSION_SLIDE){ + sReturn = StringAdder(sReturn, "Dimension Slide", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_ENERGY_BOLT){ + int nElemFlags = GetLocalInt(oPC, ASTRAL_CONSTRUCT_ENERGY_BOLT_FLAGS + EDIT); + + if(nElemFlags & ELEMENT_ACID){ + sReturn = StringAdder(sReturn, "Energy Bolt - Acid", bFirst); + bFirst = FALSE; + } + if(nElemFlags & ELEMENT_COLD){ + sReturn = StringAdder(sReturn, "Energy Bolt - Cold", bFirst); + bFirst = FALSE; + } + if(nElemFlags & ELEMENT_ELECTRICITY){ + sReturn = StringAdder(sReturn, "Energy Bolt - Electricity", bFirst); + bFirst = FALSE; + } + if(nElemFlags & ELEMENT_FIRE){ + sReturn = StringAdder(sReturn, "Energy Bolt - Fire", bFirst); + bFirst = FALSE; + } + if(nElemFlags & ELEMENT_SONIC){ + sReturn = StringAdder(sReturn, "Energy Bolt - Sonic", bFirst); + bFirst = FALSE; + } + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_EXTRA_BUFF){ + sReturn = StringAdder(sReturn, "Extra Buff", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_EXTREME_DAM_RED){ + sReturn = StringAdder(sReturn, "Extreme Damage Reduction", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_EXTREME_DEFLECT){ + sReturn = StringAdder(sReturn, "Extreme Deflection", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_NATURAL_INVIS){ + sReturn = StringAdder(sReturn, "Natural Invisibility", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_POWER_RESIST){ + sReturn = StringAdder(sReturn, "Power Resistance", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_REND){ + sReturn = StringAdder(sReturn, "Rend", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_SPRING_ATTACK){ + sReturn = StringAdder(sReturn, "Spring Attack", bFirst); + bFirst = FALSE; + } + if(nFlags & ASTRAL_CONSTRUCT_OPTION_WHIRLWIND){ + sReturn = StringAdder(sReturn, "Whirlwind", bFirst); + bFirst = FALSE; + } + + return sReturn; +} \ No newline at end of file diff --git a/src/include/psi_inc_ac_manif.nss b/src/include/psi_inc_ac_manif.nss new file mode 100644 index 0000000..db7bc45 --- /dev/null +++ b/src/include/psi_inc_ac_manif.nss @@ -0,0 +1,410 @@ +//:://///////////////////////////////////////////// +//:: Astral Construct manifestation include +//:: psi_inc_ac_manif +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// +//:: Created By: Ornedan +//:: Created On: 23.01.2005 +//::////////////////////////////////////////////// + +#include "prc_inc_spells" +#include "psi_inc_psifunc" +#include "psi_inc_ac_const" +#include "inc_utility" + + +////////////////////////////////////////////////// +/* Constant defintions */ +////////////////////////////////////////////////// + +const int TEMP_HENCH_COUNT = 150; + + +////////////////////////////////////////////////// +/* Structure definitions */ +////////////////////////////////////////////////// + +// A structure containing appearance references +struct ac_forms{ + int Appearance1, Appearance1Alt; + int Appearance2, Appearance2Alt; + int Appearance3, Appearance3Alt; + int Appearance4, Appearance4Alt; +}; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +void DoAstralConstructCreation(struct manifestation manif, location locTarget, int nACLevel, + int nOptionFlags, int nResElemFlags, int nETchElemFlags, int nEBltElemFlags); + +void DoDespawn(object oConstruct, int bDoVFX = TRUE); +void DoDespawnAux(object oManifester, float fDur); +void DoSummonVFX(location locTarget, int nACLevel); +void DoUnsummonVFX(location locTarget, int nACLevel); + +struct ac_forms GetAppearancessForLevel(int nLevel); +int GetAppearanceForConstruct(int nACLevel, int nOptionFlags, int nCheck); +int GetUseAltAppearances(int nOptionFlags); +string GetResRefForConstruct(int nACLevel, int nOptionFlags); +int GetHighestCraftSkillValue(object oCreature); + + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +// Summons the specified Astral Construct at the given location +// Handling of the flags (other than the Buff series) is done +// in the creature's OnSpawn eventscript +void DoAstralConstructCreation(struct manifestation manif, location locTarget, int nACLevel, + int nOptionFlags, int nResElemFlags, int nETchElemFlags, int nEBltElemFlags) +{ + // Get the resref for the AC + string sResRef = GetResRefForConstruct(nACLevel, nOptionFlags); + + // Get the constructs duration. 1 round / level. Metapsionic Extend can be applied. + float fDur = 6.0 * GetManifesterLevel(manif.oManifester); + if(GetPRCSwitch(PRC_PSI_ASTRAL_CONSTRUCT_DUR_MOD) > 0) + fDur *= GetPRCSwitch(PRC_PSI_ASTRAL_CONSTRUCT_DUR_MOD); + if(manif.bExtend) + fDur *= 2; + + // Add in 1 round of duration to account for AI disorientation in the beginning + fDur += 6.0f; + + /* Until Bioware "fixes" Jasperre's multisummon trick, AC are added as genuine summons instead of henchies + // We need to make sure that we can add the new construct as henchman + int nMaxHenchmen = GetMaxHenchmen(); + SetMaxHenchmen(TEMP_HENCH_COUNT); + + // Add the AC as henchman + object oConstruct = CreateObject(OBJECT_TYPE_CREATURE, sResRef, locTarget); + AddHenchman(oManifester, oConstruct); + + // And set the max henchmen count back to original, so we won't mess up the module + SetMaxHenchmen(nMaxHenchmen); + + */ + + + // Do multisummon trick + int bMultisummon = GetPRCSwitch(PRC_MULTISUMMON); + int i = 1; + object oCheck = GetAssociate(ASSOCIATE_TYPE_SUMMONED, manif.oManifester, i); + while(GetIsObjectValid(oCheck)) + { + //DoDebug("DoAstralConstructCreation: Handling associate " + DebugObject2Str(oCheck)); + // If multisummon is active, make all summons indestructible. If not, only make astral constructs + if(bMultisummon || GetStringLeft(GetTag(oCheck), 14) == "psi_astral_con") + { + AssignCommand(oCheck, SetIsDestroyable(FALSE, FALSE, FALSE)); + AssignCommand(oCheck, DelayCommand(1.0, SetIsDestroyable(TRUE, FALSE, FALSE))); + oCheck = GetAssociate(ASSOCIATE_TYPE_SUMMONED, manif.oManifester, ++i); + } + } + + // Do actual summon effect + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectSummonCreature(sResRef), locTarget, fDur + 0.5); + + /* For use if need to return to henchman setup + + // Add the locals to the construct + SetLocalInt(oConstruct, ASTRAL_CONSTRUCT_LEVEL, nACLevel); + SetLocalInt(oConstruct, ASTRAL_CONSTRUCT_OPTION_FLAGS, nOptionFlags); + SetLocalInt(oConstruct, ASTRAL_CONSTRUCT_RESISTANCE_FLAGS, nResElemFlags); + SetLocalInt(oConstruct, ASTRAL_CONSTRUCT_ENERGY_TOUCH_FLAGS, nETchElemFlags); + SetLocalInt(oConstruct, ASTRAL_CONSTRUCT_ENERGY_BOLT_FLAGS, nEBltElemFlags); + + + // Do appearance switching + int nCraft = GetHighestCraftSkillValue(oManifester); + int nCheck = d20() + nCraft; + + int nAppearance = GetAppearanceForConstruct(nACLevel, nOptionFlags, nCheck); + SetCreatureAppearanceType(oConstruct, nAppearance); + */ + + // Do VFX + DoSummonVFX(locTarget, nACLevel); + + // Schedule unsummoning. No need to hurry this one, so give it a larger delay + // in order to avoid hogging too much resources over a short span of time. + DelayCommand(2.0, DoDespawnAux(manif.oManifester, fDur)); +} + + +// A function to handle the AC's duration running out +// Some paranoia present to make sure nothing could accidentally +// make it permanent +void DoDespawn(object oConstruct, int bDoVFX = TRUE) +{ + if(GetIsObjectValid(oConstruct)){ + DestroyObject(oConstruct); + DelayCommand(0.15f, MyDestroyObject(oConstruct)); // The paranoia bit :D + if(bDoVFX) DoUnsummonVFX(GetLocation(oConstruct), GetLocalInt(oConstruct, ASTRAL_CONSTRUCT_LEVEL)); + } +} + +// An auxiliary to be delayed so that a reference to the just created AC can be found +void DoDespawnAux(object oManifester, float fDur){ + // Find the newly added construct + object oConstruct = OBJECT_INVALID; + int i = 1; + object oCheck = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oManifester, i); + while(GetIsObjectValid(oCheck)) + { + if(!GetLocalInt(oCheck, "UnsummonScheduled") && GetStringLeft(GetTag(oCheck), 14) == "psi_astral_con") + { + oConstruct = oCheck; + break; + } + i++; + oCheck = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oManifester, i); + } + SetLocalInt(oConstruct, "UnsummonScheduled", TRUE); + + if(DEBUG) DoDebug("Found the just added astral construct: " + (GetIsObjectValid(oConstruct) ? "true":"false") + "\nSummon name: " + GetName(oConstruct) + "\nTotal summons: " + IntToString(i), oManifester); + + // Schedule unsummoning. Done this way to skip the default unsummoning VFX. + DelayCommand(fDur - 2.0, DoDespawn(oConstruct)); +} + +// Does a visual choreography that depends on the level of the construct being created. +// Higher level constructs get neater VFX :D +void DoSummonVFX(location locTarget, int nACLevel){ + DrawSpiral(0, 263, locTarget, IntToFloat(nACLevel) * 0.75 + 0.5, 0.4, 1.0, 60, 16.899999619, 3.0, 4.0); +} + +void DoUnsummonVFX(location locTarget, int nACLevel){ + DrawSpiral(0, 263, locTarget, 0.4, IntToFloat(nACLevel) * 0.75 + 0.5, 1.0, 60, 16.899999619, 3.0, 4.0); +} + + +struct ac_forms GetAppearancesForLevel(int nLevel) +{ + struct ac_forms toReturn; + + switch(nLevel) + { + case 1: + toReturn.Appearance1 = APPEARANCE_TYPE_RAT; + toReturn.Appearance1Alt = 387; //Dire Rat + + toReturn.Appearance2 = APPEARANCE_TYPE_INTELLECT_DEVOURER; + toReturn.Appearance2Alt = APPEARANCE_TYPE_WAR_DEVOURER; + + toReturn.Appearance3 = APPEARANCE_TYPE_PSEUDODRAGON; + toReturn.Appearance3Alt = APPEARANCE_TYPE_PSEUDODRAGON; + + toReturn.Appearance4 = APPEARANCE_TYPE_FAERIE_DRAGON; + toReturn.Appearance4Alt = APPEARANCE_TYPE_FAERIE_DRAGON; + + return toReturn; + case 2: + toReturn.Appearance1 = APPEARANCE_TYPE_GARGOYLE; + toReturn.Appearance1Alt = APPEARANCE_TYPE_GARGOYLE; + + toReturn.Appearance2 = APPEARANCE_TYPE_BAT_HORROR; + toReturn.Appearance2Alt = APPEARANCE_TYPE_HELMED_HORROR; + + toReturn.Appearance3 = APPEARANCE_TYPE_ASABI_WARRIOR; + toReturn.Appearance3Alt = APPEARANCE_TYPE_LIZARDFOLK_WARRIOR_B; + + toReturn.Appearance4 = APPEARANCE_TYPE_WERECAT; + toReturn.Appearance4Alt = APPEARANCE_TYPE_WERECAT; + + return toReturn; + case 3: + toReturn.Appearance1 = APPEARANCE_TYPE_FORMIAN_WORKER; + toReturn.Appearance1Alt = APPEARANCE_TYPE_FORMIAN_WORKER; + + toReturn.Appearance2 = APPEARANCE_TYPE_FORMIAN_WARRIOR; + toReturn.Appearance2Alt = APPEARANCE_TYPE_FORMIAN_WARRIOR; + + toReturn.Appearance3 = APPEARANCE_TYPE_FORMIAN_MYRMARCH; + toReturn.Appearance3Alt = APPEARANCE_TYPE_FORMIAN_MYRMARCH; + + toReturn.Appearance4 = APPEARANCE_TYPE_FORMIAN_QUEEN; + toReturn.Appearance4Alt = APPEARANCE_TYPE_FORMIAN_QUEEN; + + return toReturn; + case 4: + toReturn.Appearance1 = 416; // Deep Rothe + toReturn.Appearance1Alt = 416; + + toReturn.Appearance2 = APPEARANCE_TYPE_MANTICORE; + toReturn.Appearance2Alt = APPEARANCE_TYPE_MANTICORE; + + toReturn.Appearance3 = APPEARANCE_TYPE_BASILISK; + toReturn.Appearance3Alt = APPEARANCE_TYPE_GORGON; + + toReturn.Appearance4 = APPEARANCE_TYPE_DEVIL; + toReturn.Appearance4Alt = 468; // Golem, Demonflesh + + return toReturn; + case 5: + toReturn.Appearance1 = APPEARANCE_TYPE_GOLEM_FLESH; + toReturn.Appearance1Alt = APPEARANCE_TYPE_GOLEM_FLESH; + + toReturn.Appearance2 = APPEARANCE_TYPE_GOLEM_STONE; + toReturn.Appearance2Alt = APPEARANCE_TYPE_GOLEM_STONE; + + toReturn.Appearance3 = APPEARANCE_TYPE_GOLEM_CLAY; + toReturn.Appearance3Alt = APPEARANCE_TYPE_GOLEM_CLAY; + + toReturn.Appearance4 = 420; // Golem, Mithril + toReturn.Appearance4Alt = 420; + + return toReturn; + case 6: + toReturn.Appearance1 = APPEARANCE_TYPE_TROLL; + toReturn.Appearance1Alt = APPEARANCE_TYPE_TROLL; + + toReturn.Appearance2 = APPEARANCE_TYPE_ETTERCAP; + toReturn.Appearance2Alt = APPEARANCE_TYPE_ETTERCAP; + + toReturn.Appearance3 = APPEARANCE_TYPE_UMBERHULK; + toReturn.Appearance3Alt = APPEARANCE_TYPE_UMBERHULK; + + toReturn.Appearance4 = APPEARANCE_TYPE_MINOTAUR_SHAMAN; + toReturn.Appearance4Alt = APPEARANCE_TYPE_MINOGON; + + return toReturn; + case 7: + toReturn.Appearance1 = APPEARANCE_TYPE_SPIDER_DIRE; + toReturn.Appearance1Alt = APPEARANCE_TYPE_SPIDER_DIRE; + + toReturn.Appearance2 = APPEARANCE_TYPE_SPIDER_SWORD; + toReturn.Appearance2Alt = APPEARANCE_TYPE_SPIDER_SWORD; + + toReturn.Appearance3 = 446; // Drider, Female + toReturn.Appearance3Alt = 446; + + toReturn.Appearance4 = 407; // Drider, Chief + toReturn.Appearance4Alt = 407; + + return toReturn; + case 8: + toReturn.Appearance1 = APPEARANCE_TYPE_HOOK_HORROR; + toReturn.Appearance1Alt = APPEARANCE_TYPE_VROCK; + + toReturn.Appearance2 = 427; // Slaad, White + toReturn.Appearance2Alt = 427; + + toReturn.Appearance3 = APPEARANCE_TYPE_GREY_RENDER; + toReturn.Appearance3Alt = APPEARANCE_TYPE_GREY_RENDER; + + toReturn.Appearance4 = APPEARANCE_TYPE_GREY_RENDER; + toReturn.Appearance4Alt = APPEARANCE_TYPE_GREY_RENDER; + + return toReturn; + case 9: + toReturn.Appearance1 = APPEARANCE_TYPE_ELEMENTAL_AIR_ELDER; + toReturn.Appearance1Alt = APPEARANCE_TYPE_ELEMENTAL_AIR_ELDER; + + toReturn.Appearance2 = APPEARANCE_TYPE_GIANT_FROST_FEMALE; + toReturn.Appearance2Alt = APPEARANCE_TYPE_GIANT_FROST_FEMALE; + + toReturn.Appearance3 = 418; // Dragon, Shadow + toReturn.Appearance3Alt = 418; + + toReturn.Appearance4 = 471; // Mephisto, Normal + toReturn.Appearance4Alt = 471; + + return toReturn; + + default:{ + string sErr = "psi_inc_ac_manif: GetAppearancesForLevel(): ERROR: Erroneous value for nLevel: " + IntToString(nLevel); + if(DEBUG) DoDebug(sErr); + else WriteTimestampedLogEntry(sErr); + } + } + + return toReturn; +} + + +int GetAppearanceForConstruct(int nACLevel, int nOptionFlags, int nCheck) +{ + int bUse2da = GetPRCSwitch(PRC_PSI_ASTRAL_CONSTRUCT_USE_2DA); + int bUseAlt = GetUseAltAppearances(nOptionFlags); + int nNum = nCheck < AC_APPEARANCE_CHECK_HIGH ? + nCheck < AC_APPEARANCE_CHECK_MEDIUM ? + nCheck < AC_APPEARANCE_CHECK_LOW ? 1 + : 2 + : 3 + : 4; + // If we use 2da, get the data from there + if(bUse2da) + { + nNum += (nACLevel - 1) * 4 - 1; + + return StringToInt(Get2DACache("ac_appearances", bUseAlt ? "AltAppearance" : "NormalAppearance", nNum)); + } + + // We don't so get it from GetAppearancesForLevel + + struct ac_forms appearancelist = GetAppearancesForLevel(nACLevel); + + switch(nNum) + { + case 1: return bUseAlt ? appearancelist.Appearance1Alt : appearancelist.Appearance1; + case 2: return bUseAlt ? appearancelist.Appearance2Alt : appearancelist.Appearance2; + case 3: return bUseAlt ? appearancelist.Appearance3Alt : appearancelist.Appearance3; + case 4: return bUseAlt ? appearancelist.Appearance4Alt : appearancelist.Appearance4; + + default:{ + string sErr = "psi_inc_ac_manif: GetAppearanceForConstruct(): ERROR: Erroneous value for nNum: " + IntToString(nNum); + if(DEBUG) DoDebug(sErr); + else WriteTimestampedLogEntry(sErr); + } + } + + return -1; +} + + +int GetUseAltAppearances(int nOptionFlags) +{ // Buff series + return nOptionFlags & ASTRAL_CONSTRUCT_OPTION_BUFF || + nOptionFlags & ASTRAL_CONSTRUCT_OPTION_IMP_BUFF || + nOptionFlags & ASTRAL_CONSTRUCT_OPTION_EXTRA_BUFF || + // Deflection series + nOptionFlags & ASTRAL_CONSTRUCT_OPTION_DEFLECTION || + nOptionFlags & ASTRAL_CONSTRUCT_OPTION_HEAVY_DEFLECT || + nOptionFlags & ASTRAL_CONSTRUCT_OPTION_EXTREME_DEFLECT || + // Damage Reduction Series + nOptionFlags & ASTRAL_CONSTRUCT_OPTION_IMP_DAM_RED || + nOptionFlags & ASTRAL_CONSTRUCT_OPTION_EXTREME_DAM_RED; +} + + +string GetResRefForConstruct(int nACLevel, int nOptionFlags) +{ + string sResRef = "psi_astral_con" + IntToString(nACLevel); + string sSuffix; + + // Check whether we need a resref with buff applied + if(nOptionFlags & ASTRAL_CONSTRUCT_OPTION_BUFF) + sSuffix += "a"; + else if(nOptionFlags & ASTRAL_CONSTRUCT_OPTION_IMP_BUFF) + sSuffix += "b"; + else if(nOptionFlags & ASTRAL_CONSTRUCT_OPTION_EXTRA_BUFF) + sSuffix += "c"; + + return sResRef + sSuffix; +} + + +int GetHighestCraftSkillValue(object oCreature) +{ + int nArmor = GetSkillRank(SKILL_CRAFT_ARMOR, oCreature); + int nTrap = GetSkillRank(SKILL_CRAFT_TRAP, oCreature); + int nWeapon = GetSkillRank(SKILL_CRAFT_WEAPON, oCreature); + + return nArmor > nTrap ? + nArmor > nWeapon ? nArmor : nWeapon + : nTrap > nWeapon ? nTrap : nWeapon; +} diff --git a/src/include/psi_inc_ac_spawn.nss b/src/include/psi_inc_ac_spawn.nss new file mode 100644 index 0000000..5b3947e --- /dev/null +++ b/src/include/psi_inc_ac_spawn.nss @@ -0,0 +1,528 @@ +//:://///////////////////////////////////////////// +//:: Astral Construct spawn include +//:: psi_inc_ac_spawn +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// +//:: Created By: Ornedan +//:: Created On: 21.01.2005 +//::////////////////////////////////////////////// + +#include "psi_inc_ac_const" +#include "prc_ipfeat_const" +#include "prc_feat_const" +#include "inc_vfx_const" + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// +void HandleAstralConstructSpawn(object oConstruct); +void DoEffect(object oConstruct, effect eEffect); +void DoFeat(object oHide, int nIPFeatID); +void DoDeflect(object oConstruct, int nACVal); +void DoResistance(object oHide, int nElementFlags); +void DoEnergyTouch(object oWeapon, int nElementFlags, object oCreator); +int GetConstructSizeFromTag(object oConstruct); +int GetBaseDamageFromSize(int nSize); +int GetNextBaseDamage(int nDamVal); +int GetDamageReduction(object oConstruct); +int GetDamageReductionConstantFromAmount(int nDamRed); + + +//void ActionUseInstantPower( invalid ); + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +// Applies the chosen Astral Construct options to the creature. +// +// Note! Buff series is handled separately +void HandleAstralConstructSpawn(object oConstruct) +{ + // Get the flag set + int nFlags = GetLocalInt(oConstruct, ASTRAL_CONSTRUCT_OPTION_FLAGS); + // Get the construct's size and use it to determine the base attack damage + int nSize = GetConstructSizeFromTag(oConstruct); + + if (nSize < CREATURE_SIZE_SMALL) + { + WriteTimestampedLogEntry("Invalid construct size: " + IntToString(nSize) + " for appearance " + IntToString(GetAppearanceType(oConstruct))); + } + + if (DEBUG) WriteTimestampedLogEntry("Creating construct " + GetTag(oConstruct) + " of size " + IntToString(nSize)); + + string sWeaponResRef = ASTRAL_CONSTRUCT_SLAM; + object oHide = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oConstruct); + + /* Check through the flags and take appropriate action */ + + /// The Deflect series + int nDeflect = 0; + // Add +1 deflection AC + if(nFlags & ASTRAL_CONSTRUCT_OPTION_DEFLECTION) { nDeflect += 1; } + // Add +4 deflection AC + if(nFlags & ASTRAL_CONSTRUCT_OPTION_HEAVY_DEFLECT) { nDeflect += 4; } + // Add +8 deflection AC + if(nFlags & ASTRAL_CONSTRUCT_OPTION_EXTREME_DEFLECT) { nDeflect += 8; } + + if(nDeflect) DoDeflect(oConstruct, nDeflect); + + if (DEBUG) WriteTimestampedLogEntry(" Construct deflection AC: " + IntToString(nDeflect)); + + /// The Damage reductions + // First, get the base damage reduction + int nDamRed = GetDamageReduction(oConstruct); + // Increases the damage reduction variable by 3 + if(nFlags & ASTRAL_CONSTRUCT_OPTION_IMP_DAM_RED) { nDamRed += 3; } + // Increases the damage reduction variable by 6 + if(nFlags & ASTRAL_CONSTRUCT_OPTION_EXTREME_DAM_RED) { nDamRed += 6; } + + if (DEBUG) WriteTimestampedLogEntry(" Construct damage reduction: " + IntToString(nDamRed)); + + if(nDamRed) + { + nDamRed = GetDamageReductionConstantFromAmount(nDamRed); + itemproperty ipDamRed = ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1, nDamRed); + AddItemProperty(DURATION_TYPE_PERMANENT, ipDamRed, oHide); + } + + /// Add various feats to the hide + // Add the Cleave feat to slam + if(nFlags & ASTRAL_CONSTRUCT_OPTION_CLEAVE) + { + if (DEBUG) WriteTimestampedLogEntry(" Added feat: Cleave"); + DoFeat(oHide, IP_CONST_FEAT_CLEAVE); + } + // Add the Mobility feat to hide + if(nFlags & ASTRAL_CONSTRUCT_OPTION_MOBILITY) + { + if (DEBUG) WriteTimestampedLogEntry(" Added feat: Mobility"); + DoFeat(oHide, IP_CONST_FEAT_MOBILITY); + } + // Add the Power Attack feat to hide + if(nFlags & ASTRAL_CONSTRUCT_OPTION_POWER_ATTACK) + { + if (DEBUG) WriteTimestampedLogEntry(" Added feat: Power Attack"); + DoFeat(oHide, IP_CONST_FEAT_POWERATTACK); + } + // Add the Knockdown feat to hide + if(nFlags & ASTRAL_CONSTRUCT_OPTION_KNOCKDOWN) + { + if (DEBUG) WriteTimestampedLogEntry(" Added feat: Knockdown"); + DoFeat(oHide, IP_CONST_FEAT_KNOCKDOWN); + } + // Add the Improved Critical (Creature) feat to hide + if(nFlags & ASTRAL_CONSTRUCT_OPTION_IMP_CRIT) + { + if (DEBUG) WriteTimestampedLogEntry(" Added feat: Improved Critical"); + DoFeat(oHide, IP_CONST_FEAT_ImpCritCreature); + } + // Add the Blindsight feat to hide + if(nFlags & ASTRAL_CONSTRUCT_OPTION_BLINDFIGHT) + { + if (DEBUG) WriteTimestampedLogEntry(" Added feat: Blind Fight"); + DoFeat(oHide, IP_CONST_FEAT_BLINDFIGHT); + } + // Add feat for spell/power resistance 10+HD to hide + if(nFlags & ASTRAL_CONSTRUCT_OPTION_POWER_RESIST) + { + if (DEBUG) WriteTimestampedLogEntry(" Added feat: Power Resistance"); + DoFeat(oHide, IP_CONST_FEAT_SPELL10); + } + // Add the Rend feat to hide + if(nFlags & ASTRAL_CONSTRUCT_OPTION_REND) + { + if (DEBUG) WriteTimestampedLogEntry(" Added feat: Rend"); + DoFeat(oHide, IP_CONST_FEAT_REND); + sWeaponResRef = ASTRAL_CONSTRUCT_CLAW; + } + // Add the Spring Attack feat to hide + if(nFlags & ASTRAL_CONSTRUCT_OPTION_SPRING_ATTACK) + { + if (DEBUG) WriteTimestampedLogEntry(" Added feat: Spring Attack"); + DoFeat(oHide, IP_CONST_FEAT_SPRINGATTACK); + } + // Add the Whirlwind feat to hide + if(nFlags & ASTRAL_CONSTRUCT_OPTION_WHIRLWIND) + { + if (DEBUG) WriteTimestampedLogEntry(" Added feat: Whirlwind"); + DoFeat(oHide, IP_CONST_FEAT_WHIRLWIND); + } + + + /// Add various itemproperties to the hide + // Adds regeneration 2 to hide + if(nFlags & ASTRAL_CONSTRUCT_OPTION_FAST_HEALING) + { + itemproperty ipRegen = ItemPropertyRegeneration(2); + AddItemProperty(DURATION_TYPE_PERMANENT, ipRegen, oHide); + if (DEBUG) WriteTimestampedLogEntry(" Added fast healing 2"); + } + // Give a +4 STR bonus to hide + if(nFlags & ASTRAL_CONSTRUCT_OPTION_MUSCLE) + { + itemproperty ipSTR = ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR, 4); + AddItemProperty(DURATION_TYPE_PERMANENT, ipSTR, oHide); + if (DEBUG) WriteTimestampedLogEntry(" Added muscle (+4 STR)"); + } + // Add energy resistance 5 to chosen elements + if(nFlags & ASTRAL_CONSTRUCT_OPTION_RESISTANCE) + { + DoResistance(oHide, GetLocalInt(oConstruct, ASTRAL_CONSTRUCT_RESISTANCE_FLAGS)); + if (DEBUG) WriteTimestampedLogEntry(" Added energy resistance 5"); + } + + /// Handle effects + + // Add the transparency effect + effect eVis = EffectVisualEffect(VFX_DUR_GHOSTLY_PULSE_QUICK);//VFX_DUR_GHOST_TRANSPARENT); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVis, oConstruct); + + // Increase speed by 10 feet per round + if(nFlags & ASTRAL_CONSTRUCT_OPTION_CELERITY) + { + int nSpeedIncrease; + switch(nSize) + { + case CREATURE_SIZE_SMALL: + nSpeedIncrease = 33; + break; + case CREATURE_SIZE_MEDIUM: + case CREATURE_SIZE_LARGE: + nSpeedIncrease = 25; + break; + case CREATURE_SIZE_HUGE: + nSpeedIncrease = 20; + break; + default: + if (DEBUG) WriteTimestampedLogEntry("Invalid size value for an Astral Construct encountered when processing Celerity"); + nSpeedIncrease = 0; + break; + } + + effect eSpeed = EffectMovementSpeedIncrease(nSpeedIncrease); + DoEffect(oConstruct, eSpeed); + if (DEBUG) WriteTimestampedLogEntry(" Added celerity (" + IntToString(nSpeedIncrease) + "% increase)"); + } + // Add one attack + if(nFlags & ASTRAL_CONSTRUCT_OPTION_EXTRA_ATTACK) + { + effect eAttack = EffectModifyAttacks(1); + DoEffect(oConstruct, eAttack); + if (DEBUG) WriteTimestampedLogEntry(" Added extra attack"); + } + // Applies 50% concealement and a normal invisibility effect to the construct to + // simulate permanent invisibility + if(nFlags & ASTRAL_CONSTRUCT_OPTION_NATURAL_INVIS) + { + effect eConceal = EffectConcealment(50); + effect eInvis = EffectInvisibility(INVISIBILITY_TYPE_NORMAL); + DoEffect(oConstruct, eConceal); + DoEffect(oConstruct, eInvis); + if (DEBUG) WriteTimestampedLogEntry(" Added natural invisibility"); + } + + + + + /* Start handling the creature weapon stuff */ + + // First, actually create the weapon and equip it + object oWeapon = CreateItemOnObject(sWeaponResRef, oConstruct); + AssignCommand(oConstruct, ActionEquipItem(oWeapon, INVENTORY_SLOT_CWEAPON_B)); + + /// Handle the damage that it will deal + + // Get the base damage + int nAttackBaseDamage = GetBaseDamageFromSize(nSize); + + if (DEBUG) WriteTimestampedLogEntry(" Set base damage to " + IntToString(nAttackBaseDamage)); + // Check if the damage needs to be increased + if(nFlags & ASTRAL_CONSTRUCT_OPTION_IMPROVED_SLAM) + { + nAttackBaseDamage = GetNextBaseDamage(nAttackBaseDamage); + if (DEBUG) WriteTimestampedLogEntry(" Added feat: Improved Slam"); + } + + // Apply the monster damage iprop to the weapon + itemproperty ipDam = ItemPropertyMonsterDamage(nAttackBaseDamage); + AddItemProperty(DURATION_TYPE_PERMANENT, ipDam, oWeapon); + + // Add damage bonus equal to 0.5 times the creature's strength modifier. + // The Astral Constructs should have it since they only have one natural attack (and no other attacks) + int nStrBon = GetAbilityModifier(ABILITY_STRENGTH, oConstruct) / 2; + nStrBon = nStrBon < 0 ? 0 : nStrBon; + nStrBon = nStrBon > 10 ? 10: nStrBon; + + // The Extra Attacks modifier cancels 1.5x STR bonus, so check for it's presence + if(nStrBon && !(nFlags & ASTRAL_CONSTRUCT_OPTION_EXTRA_ATTACK) && nSize < CREATURE_SIZE_LARGE) + { + // The following is a *wrong* way of doing this and will break the moment BW decides to modify + // the actual values of the IP_CONST_DAMAGEBONUS_* constants, but I'm lazy :p + int nDamBon = nStrBon > 5 ? nStrBon + 10 : nStrBon; + int nDamageType = sWeaponResRef == ASTRAL_CONSTRUCT_SLAM ? + IP_CONST_DAMAGETYPE_BLUDGEONING : + IP_CONST_DAMAGETYPE_SLASHING; + itemproperty ipDamBon = ItemPropertyDamageBonus(nDamageType, nDamBon); + AddItemProperty(DURATION_TYPE_PERMANENT, ipDamBon, oWeapon); + } + + + // Apply OnHitCast power if necessary + if(nFlags & ASTRAL_CONSTRUCT_OPTION_POISON_TOUCH || + nFlags & ASTRAL_CONSTRUCT_OPTION_REND) + { + itemproperty ipOnHitCast = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1); + AddItemProperty(DURATION_TYPE_PERMANENT, ipOnHitCast, oWeapon); + } + + // Handle Energy Touch option + if(nFlags & ASTRAL_CONSTRUCT_OPTION_ENERGY_TOUCH) + { + DoEnergyTouch(oWeapon, GetLocalInt(oConstruct, ASTRAL_CONSTRUCT_ENERGY_TOUCH_FLAGS), GetMaster(oConstruct)); + } + + + /// Handle options that set local ints + + // Add OnHit: CastSpell - Unique Power to the slam + if(nFlags & ASTRAL_CONSTRUCT_OPTION_POISON_TOUCH) { SetLocalInt(oConstruct, ASTRAL_CONSTRUCT_POISON_TOUCH, TRUE); } + // Make the construct capable of using Concussion Blast power as a free action every round + // Will probably be implemented via heartbeat + if(nFlags & ASTRAL_CONSTRUCT_OPTION_CONCUSSION) { SetLocalInt(oConstruct, ASTRAL_CONSTRUCT_CONCUSSION, TRUE); } + + + + /********************* UNFINISHED POWERS *********************/ + + // Allow the construct to use Dimension Slide as a move action every round + // COMPLETELY UNIMPLEMENTED AS OF YET + if(nFlags & ASTRAL_CONSTRUCT_OPTION_DIMENSION_SLIDE) + { + WriteTimestampedLogEntry("Astral Construct created with flag ASTRAL_CONSTRUCT_OPTION_DIMENSION_SLIDE. This option shouldn't be available yet."); + } + // Allow the construct to use Energy Bolt as a standard action every round + // COMPLETELY UNIMPLEMENTED AS OF YET + if(nFlags & ASTRAL_CONSTRUCT_OPTION_ENERGY_BOLT) + { + WriteTimestampedLogEntry("Astral Construct created with flag ASTRAL_CONSTRUCT_OPTION_ENERGY_BOLT. This option shouldn't be available yet."); + } +} + + + +// Extraordinaries and applies the given effect +void DoEffect(object oConstruct, effect eEffect) +{ + eEffect = ExtraordinaryEffect(eEffect); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oConstruct); +} + + +// Adds the given feat to the AC's hide. Nothing special, just +// a convenience so I needn't typ(e/o) it several times +void DoFeat(object oHide, int nIPFeatID) +{ + itemproperty ipFeat = PRCItemPropertyBonusFeat(nIPFeatID); + AddItemProperty(DURATION_TYPE_PERMANENT, ipFeat, oHide); +} + + +// Does the work of the Deflect series of effects +void DoDeflect(object oConstruct, int nACVal) +{ + effect eAC = EffectACIncrease(nACVal, AC_DEFLECTION_BONUS); + DoEffect(oConstruct, eAC); +} + + +// Adds the given resistances to the construct's hide +void DoResistance(object oHide, int nElementFlags) +{ + itemproperty ipResist; + + if(nElementFlags & ELEMENT_ACID) + { + ipResist = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID, IP_CONST_DAMAGERESIST_5); + AddItemProperty(DURATION_TYPE_PERMANENT, ipResist, oHide); + } + if(nElementFlags & ELEMENT_COLD) + { + ipResist = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD, IP_CONST_DAMAGERESIST_5); + AddItemProperty(DURATION_TYPE_PERMANENT, ipResist, oHide); + } + if(nElementFlags & ELEMENT_ELECTRICITY) + { + ipResist = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ELECTRICAL, IP_CONST_DAMAGERESIST_5); + AddItemProperty(DURATION_TYPE_PERMANENT, ipResist, oHide); + } + if(nElementFlags & ELEMENT_FIRE) + { + ipResist = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGERESIST_5); + AddItemProperty(DURATION_TYPE_PERMANENT, ipResist, oHide); + } + if(nElementFlags & ELEMENT_SONIC) + { + ipResist = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SONIC, IP_CONST_DAMAGERESIST_5); + AddItemProperty(DURATION_TYPE_PERMANENT, ipResist, oHide); + } +} + + +// Adds 1d4 (or 1d6 if oCreator is a kineticist) of the chosen types of elemental damage +// to the construct's weapon +void DoEnergyTouch(object oWeapon, int nElementFlags, object oCreator) +{ + itemproperty ipDamage; + int nDamage = GetHasFeat(FEAT_PSION_DIS_KINETICIST, oCreator) ? IP_CONST_DAMAGEBONUS_1d6 : IP_CONST_DAMAGEBONUS_1d4; + + if(nElementFlags & ELEMENT_ACID) + { + ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID, nDamage); + AddItemProperty(DURATION_TYPE_PERMANENT, ipDamage, oWeapon); + } + if(nElementFlags & ELEMENT_COLD) + { + ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD, nDamage); + AddItemProperty(DURATION_TYPE_PERMANENT, ipDamage, oWeapon); + } + if(nElementFlags & ELEMENT_ELECTRICITY) + { + ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL, nDamage); + AddItemProperty(DURATION_TYPE_PERMANENT, ipDamage, oWeapon); + } + if(nElementFlags & ELEMENT_FIRE) + { + ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE, nDamage); + AddItemProperty(DURATION_TYPE_PERMANENT, ipDamage, oWeapon); + } + if(nElementFlags & ELEMENT_SONIC) + { + ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SONIC, nDamage); + AddItemProperty(DURATION_TYPE_PERMANENT, ipDamage, oWeapon); + } +} + + +/* Returns the base damage an AC's attacks should deal based on it's size + * Small - 1d4 + * Medium - 1d6 + * Large - 1d8 + * Huge - 2d6 + */ +int GetBaseDamageFromSize(int nSize) +{ + switch(nSize) + { + case CREATURE_SIZE_SMALL: + return IP_CONST_MONSTERDAMAGE_1d4; + case CREATURE_SIZE_MEDIUM: + return IP_CONST_MONSTERDAMAGE_1d6; + case CREATURE_SIZE_LARGE: + return IP_CONST_MONSTERDAMAGE_1d8; + case CREATURE_SIZE_HUGE: + return IP_CONST_MONSTERDAMAGE_2d6; + default: + WriteTimestampedLogEntry("Invalid size value for an Astral Construct passed to GetBaseDamageFromSize: " + IntToString(nSize)); + } + + return IP_CONST_MONSTERDAMAGE_1d4; +} + +// Returns the next bigger damage value +int GetNextBaseDamage(int nDamVal) +{ + switch(nDamVal) + { + case IP_CONST_MONSTERDAMAGE_1d4: return IP_CONST_MONSTERDAMAGE_1d6; + case IP_CONST_MONSTERDAMAGE_1d6: return IP_CONST_MONSTERDAMAGE_1d8; + case IP_CONST_MONSTERDAMAGE_1d8: return IP_CONST_MONSTERDAMAGE_2d6; + case IP_CONST_MONSTERDAMAGE_2d6: return IP_CONST_MONSTERDAMAGE_3d6; + default: + WriteTimestampedLogEntry("Invalid monster damage value passed to GetNextBaseDamage: " + IntToString(nDamVal)); + } + + return IP_CONST_MONSTERDAMAGE_1d4; +} + + +// Returns the size of the construct based on its level +int GetConstructSizeFromTag(object oConstruct) +{ + string sTag = GetTag(oConstruct); + int nLevel = StringToInt(GetSubString(sTag, 14, 1)); + + switch(nLevel) + { + case 1: return CREATURE_SIZE_SMALL; + case 2: + case 3: + case 4: return CREATURE_SIZE_MEDIUM; + case 5: + case 6: + case 7: + case 8: return CREATURE_SIZE_LARGE; + case 9: return CREATURE_SIZE_HUGE; + + default: + WriteTimestampedLogEntry("Erroneous value for nLevel in GetDamageReduction: " + IntToString(nLevel) + ", tag: " + sTag); + } + + return 0; +} + +// Returns the damage reduction that the level of the construct entitles it to +int GetDamageReduction(object oConstruct) +{ + string sTag = GetTag(oConstruct); + int nLevel = StringToInt(GetSubString(sTag, 14, 1)); + + switch(nLevel) + { + case 1: + case 2: + case 3: + case 4: return 0; + case 5: return 5; + case 6: + case 7: return 10; + case 8: + case 9: return 15; + + default: + WriteTimestampedLogEntry("Erroneous value for nLevel in GetDamageReduction: " + IntToString(nLevel) + ", tag: " + sTag); + } + + return 0; +} + + +// Returns the IP_CONST_DAMAGESOAK_*_HP constant that does the given +// amount of damage reduction +int GetDamageReductionConstantFromAmount(int nDamRed) +{ + switch(nDamRed) + { + case 3: return IP_CONST_DAMAGESOAK_3_HP; + case 5: return IP_CONST_DAMAGESOAK_5_HP; + case 6: return IP_CONST_DAMAGESOAK_6_HP; + case 8: return IP_CONST_DAMAGESOAK_8_HP; + case 9: return IP_CONST_DAMAGESOAK_9_HP; + case 10: return IP_CONST_DAMAGESOAK_10_HP; + case 11: return IP_CONST_DAMAGESOAK_11_HP; + case 13: return IP_CONST_DAMAGESOAK_13_HP; + case 14: return IP_CONST_DAMAGESOAK_14_HP; + case 15: return IP_CONST_DAMAGESOAK_15_HP; + case 16: return IP_CONST_DAMAGESOAK_16_HP; + case 19: return IP_CONST_DAMAGESOAK_19_HP; + case 18: return IP_CONST_DAMAGESOAK_18_HP; + case 21: return IP_CONST_DAMAGESOAK_21_HP; + case 24: return IP_CONST_DAMAGESOAK_24_HP; + + default: + WriteTimestampedLogEntry("Erroneous value for nDamRed in GetDamageReductionAmountToConstant: " + IntToString(nDamRed)); + } + + return -1; +} \ No newline at end of file diff --git a/src/include/psi_inc_augment.nss b/src/include/psi_inc_augment.nss new file mode 100644 index 0000000..6bbac45 --- /dev/null +++ b/src/include/psi_inc_augment.nss @@ -0,0 +1,717 @@ +//:://///////////////////////////////////////////// +//:: Psionics include: Augmentation +//:: psi_inc_augment +//:://///////////////////////////////////////////// +/** @file + Defines structs and functions for handling + psionic power augmentation. + + @author Ornedan + @date Created - 2005.11.04 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +// Constants are provided via psi_inc_core + +/// Prefix of the local variable names used for storing an user's profiles +const string PRC_AUGMENT_PROFILE = "PRC_Augment_Profile_"; +/// Index of the currently used profile. +const string PRC_CURRENT_AUGMENT_PROFILE = "PRC_Current_Augment_Profile_Index"; +/// Name of local variable where override is stored +const string PRC_AUGMENT_OVERRIDE = "PRC_Augment_Override"; +/// Name of local variable where the value of maximal augmentation switch is stored +const string PRC_AUGMENT_MAXAUGMENT = "PRC_Augment_MaxAugment"; + +/// The lowest valid value of PRC_CURRENT_AUGMENT_PROFILE +const int PRC_AUGMENT_PROFILE_INDEX_MIN = 1; +/// The highest valid value of PRC_CURRENT_AUGMENT_PROFILE +const int PRC_AUGMENT_PROFILE_INDEX_MAX = 49; +/// Prefix of the local variable names used for storing quickselections +const string PRC_AUGMENT_QUICKSELECTION = "PRC_Augment_Quickselection_"; +/// The lowest value the quickslot index can have +const int PRC_AUGMENT_QUICKSELECTION_MIN = 1; +/// The highest value the quickslot index can have +const int PRC_AUGMENT_QUICKSELECTION_MAX = 7; +/// An index that should never contain a profile +const int PRC_AUGMENT_PROFILE_NONE = 0; + +/// The value of an empty profile. Also known as zero +const int PRC_AUGMENT_NULL_PROFILE = 0x00000000; + +/// The special value for nGenericAugCost in power augmentation profile that means the power has no generic augmentation. +const int PRC_NO_GENERIC_AUGMENTS = -1; +/// The special value for nMaxAugs_* that means there is no limit to the times that option may be used. +const int PRC_UNLIMITED_AUGMENTATION = -1; + +////////////////////////////////////////////////// +/* Structures */ +////////////////////////////////////////////////// + +/** + * A structure used for defining how a particular power may be augmented. + * Use PowerAugmentationProfile() to create. + */ +struct power_augment_profile{ + /** + * Many powers specify several augmentation options and in addition a + * "for each N PP spent augmenting this power, something happens". + * This value is that N. + */ + int nGenericAugCost; + + /** + * How many PP the first augmentation option of the power will cost per + * times used. + */ + int nAugCost_1; + /** + * How many times, at most, can the first augmentation option be used. + */ + int nMaxAugs_1; + + /** + * How many PP the second augmentation option of the power will cost per + * times used. + */ + int nAugCost_2; + /** + * How many times, at most, can the second augmentation option be used. + */ + int nMaxAugs_2; + + /** + * How many PP the third augmentation option of the power will cost per + * times used. + */ + int nAugCost_3; + /** + * How many times, at most, can the third augmentation option be used. + */ + int nMaxAugs_3; + + /** + * How many PP the fourth augmentation option of the power will cost per + * times used. + */ + int nAugCost_4; + /** + * How many times, at most, can the fourth augmentation option be used. + */ + int nMaxAugs_4; + + /** + * How many PP the fifth augmentation option of the power will cost per + * times used. + */ + int nAugCost_5; + /** + * How many times, at most, can the fifth augmentation option be used. + */ + int nMaxAugs_5; +}; + +/** + * Users define how much PP they want to use for each augmentation option or + * how many times they want to use each option. This structure is for transferring + * that data. + */ +struct user_augment_profile{ + int nOption_1; + int nOption_2; + int nOption_3; + int nOption_4; + int nOption_5; + + /// Whether the values in this structure are to be interpreted as augmentation levels + /// or as amounts of PP. + int bValueIsPP; +}; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Constructs an augmentation profile for a power. + * The default values for each parameter specify that the power in question + * does not have that augmentation feature. + * + * @param nGenericAugCost Many powers have an augmentation clause saying "for + * each N power points used to augment this power, + * X happens". This parameter is used to define the + * value N. + * Valid values: {x = -1 OR x > 0} + * Default: -1, which means that there is no generic + * augmentation for this power. + * + * @param nAugCost_1 Cost to use the first augmentation option of this + * power. + * Valid values: {x >= 0} + * Default: 0 + * @param nMaxAugs_1 Number of times the first augmentation option may at + * most be used. Value of -1 means the option may be used + * an unlimited number of times. + * Valid values: {x >= -1} + * Default: 0 + * + * @param nAugCost_2 Cost to use the second augmentation option of this + * power. + * Valid values: {x >= 0} + * Default: 0 + * @param nMaxAugs_2 Number of times the second augmentation option may at + * most be used. Value of -1 means the option may be used + * an unlimited number of times. + * Valid values: {x >= -1} + * Default: 0 * + * + * @param nAugCost_3 Cost to use the third augmentation option of this + * power. + * Valid values: {x >= 0} + * Default: 0 + * @param nMaxAugs_3 Number of times the third augmentation option may at + * most be used. Value of -1 means the option may be used + * an unlimited number of times. + * Valid values: {x >= -1} + * Default: 0 + * + * @param nAugCost_4 Cost to use the fourth augmentation option of this + * power. + * Valid values: {x >= 0} + * Default: 0 + * @param nMaxAugs_4 Number of times the fourth augmentation option may at + * most be used. Value of -1 means the option may be used + * an unlimited number of times. + * Valid values: {x >= -1} + * Default: 0 + * + * @param nAugCost_5 Cost to use the fifth augmentation option of this + * power. + * Valid values: {x >= 0} + * Default: 0 + * @param nMaxAugs_5 Number of times the fifth augmentation option may at + * most be used. Value of -1 means the option may be used + * an unlimited number of times. + * Valid values: {x >= -1} + * Default: 0 + * + * @return The parameters compiled into a power_augment_profile + * structure. + */ +struct power_augment_profile PowerAugmentationProfile(int nGenericAugCost = PRC_NO_GENERIC_AUGMENTS, + int nAugCost_1 = 0, int nMaxAugs_1 = 0, + int nAugCost_2 = 0, int nMaxAugs_2 = 0, + int nAugCost_3 = 0, int nMaxAugs_3 = 0, + int nAugCost_4 = 0, int nMaxAugs_4 = 0, + int nAugCost_5 = 0, int nMaxAugs_5 = 0 + ); + +/** + * Reads an augmentation profile from a user and compiles it into + * a structure. + * + * @param oUser A creature that has power augmentation profiles set up. + * @param nIndex The number of the profile to retrieve. + * @param bQuickSelection Whether the index is a quickselection or a normal profile. + * @return The retrieved profile, compiled into a structure + */ +struct user_augment_profile GetUserAugmentationProfile(object oUser, int nIndex, int bQuickSelection = FALSE); + +/** + * Gets the user's current augmentation profile. + * + * @param oUser A creature that has power augmentation profiles set up. + * @return The retrieved profile, compiled into a structure + */ +struct user_augment_profile GetCurrentUserAugmentationProfile(object oUser); + +/** + * Stores a user-specified augmentation profile. + * + * @param oUser The user for whose use to store the profile for. + * @param nIndex The index number to store the profile under. + * @param bQuickSelection Whether the index is a quickselection or a normal profile. + * @param uap A structure containing the profile to store. + */ +void StoreUserAugmentationProfile(object oUser, int nIndex, struct user_augment_profile uap, int bQuickSelection = FALSE); + +/** + * Converts the given augmentation profile into a string. + * + * @param uap The augmentation profile to convert to a string. + * @return A string of format: + * Option 1: N [times|PP], Option 2: N [times|PP], Option 2: N [times|PP], Option 4: N [times|PP], Option 5: N [times|PP] + */ +string UserAugmentationProfileToString(struct user_augment_profile uap); + +/** + * Calculates how many times each augmentation option of a power is used and + * the increased PP cost caused by augmentation. + * In addition to basic augmentation, currently accounts for: + * - Wild Surge + * + * + * @param manif The manifestation data related to an ongoing manifestation attempt. + * @param pap The power's augmentation profile. + * @return The manifestation data with augmentation's effects added in. + */ +struct manifestation EvaluateAugmentation(struct manifestation manif, struct power_augment_profile pap); + +/** + * Overrides the given creature's augmentation settings during it's next + * manifestation with the given settings. + * + * NOTE: These values are assumed to be augmentation levels. + * + * @param oCreature Creature whose augmentation to override + * @param uap The profile to use as override + */ +void SetAugmentationOverride(object oCreature, struct user_augment_profile uap); + + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "psi_inc_core" + + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +/** Internal function. + * @param nToDecode Integer from which to extract an user augmentation profile + * @return An user augmentation profile created based on nToDecode + */ +struct user_augment_profile _DecodeProfile(int nToDecode) +{ + struct user_augment_profile uap; + + // The augmentation profile is stored in one integer, with 6 bits per option. + // MSB -> [xx555555444444333333222222111111] <- LSB + int nMask = 0x3F; // 6 LSB + uap.nOption_1 = nToDecode & nMask; + uap.nOption_2 = (nToDecode >>> 6) & nMask; + uap.nOption_3 = (nToDecode >>> 12) & nMask; + uap.nOption_4 = (nToDecode >>> 18) & nMask; + uap.nOption_5 = (nToDecode >>> 24) & nMask; + + return uap; +} + +/** Internal function. + * @param uapToEncode An user augmentation profile to encode into a single integer + * @return Integer built from values in uapToEncode + */ +int _EncodeProfile(struct user_augment_profile uapToEncode) +{ + // The augmentation profile is stored in one integer, with 6 bits per option. + // MSB -> [xx555555444444333333222222111111] <- LSB + int nProfile = PRC_AUGMENT_NULL_PROFILE; + int nMask = 0x3F; // 6 LSB + + nProfile |= (uapToEncode.nOption_1 & nMask); + nProfile |= (uapToEncode.nOption_2 & nMask) << 6; + nProfile |= (uapToEncode.nOption_3 & nMask) << 12; + nProfile |= (uapToEncode.nOption_4 & nMask) << 18; + nProfile |= (uapToEncode.nOption_5 & nMask) << 24; + + return nProfile; +} + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + + +struct power_augment_profile PowerAugmentationProfile(int nGenericAugCost = PRC_NO_GENERIC_AUGMENTS, + int nAugCost_1 = 0, int nMaxAugs_1 = 0, + int nAugCost_2 = 0, int nMaxAugs_2 = 0, + int nAugCost_3 = 0, int nMaxAugs_3 = 0, + int nAugCost_4 = 0, int nMaxAugs_4 = 0, + int nAugCost_5 = 0, int nMaxAugs_5 = 0 + ) +{ + struct power_augment_profile pap; + + pap.nGenericAugCost = nGenericAugCost; + pap.nAugCost_1 = nAugCost_1; + pap.nMaxAugs_1 = nMaxAugs_1; + pap.nAugCost_2 = nAugCost_2; + pap.nMaxAugs_2 = nMaxAugs_2; + pap.nAugCost_3 = nAugCost_3; + pap.nMaxAugs_3 = nMaxAugs_3; + pap.nAugCost_4 = nAugCost_4; + pap.nMaxAugs_4 = nMaxAugs_4; + pap.nAugCost_5 = nAugCost_5; + pap.nMaxAugs_5 = nMaxAugs_5; + + return pap; +} + +struct user_augment_profile GetUserAugmentationProfile(object oUser, int nIndex, int bQuickSelection = FALSE) +{ + int nProfile = GetPersistantLocalInt(oUser, (bQuickSelection ? PRC_AUGMENT_QUICKSELECTION : PRC_AUGMENT_PROFILE) + IntToString(nIndex)); + struct user_augment_profile uap = _DecodeProfile(nProfile); + + // Get the augmentation levels / PP switch + uap.bValueIsPP = GetPersistantLocalInt(oUser, PRC_PLAYER_SWITCH_AUGMENT_IS_PP); + + // Validity check on the index + if(bQuickSelection ? + (nIndex < PRC_AUGMENT_QUICKSELECTION_MIN || + nIndex > PRC_AUGMENT_QUICKSELECTION_MAX + ): + (nIndex < PRC_AUGMENT_PROFILE_INDEX_MIN || + nIndex > PRC_AUGMENT_PROFILE_INDEX_MAX + ) + ) + { + // Null the profile, just in case + uap.nOption_1 = 0; + uap.nOption_2 = 0; + uap.nOption_3 = 0; + uap.nOption_4 = 0; + uap.nOption_5 = 0; + } + + return uap; +} + +/** + * Gets the user's current augmentation profile. + * + * @param oUser A creature that has power augmentation profiles set up. + * @return The retrieved profile, compiled into a structure + */ +struct user_augment_profile GetCurrentUserAugmentationProfile(object oUser) +{ + struct user_augment_profile uap_ret; + + // Is augmentation override in effect? + if(GetLocalInt(oUser, PRC_AUGMENT_OVERRIDE)) + { + uap_ret = _DecodeProfile(GetLocalInt(oUser, PRC_AUGMENT_OVERRIDE) - 1); + uap_ret.bValueIsPP = FALSE; // Override is always considered to be augmentation levels + } + // It wasn't, so get normally + else + { + int nIndex = GetLocalInt(oUser, PRC_CURRENT_AUGMENT_PROFILE); + int bQuick = nIndex < 0 ? TRUE : FALSE; + + if(bQuick) nIndex = -nIndex; + + uap_ret = GetUserAugmentationProfile(oUser, nIndex, bQuick); + } + + return uap_ret; +} + +void StoreUserAugmentationProfile(object oUser, int nIndex, struct user_augment_profile uap, int bQuickSelection = FALSE) +{ + // Validity check on the index + if(bQuickSelection ? + (nIndex < PRC_AUGMENT_QUICKSELECTION_MIN || + nIndex > PRC_AUGMENT_QUICKSELECTION_MAX + ): + (nIndex < PRC_AUGMENT_PROFILE_INDEX_MIN || + nIndex > PRC_AUGMENT_PROFILE_INDEX_MAX + ) + ) + { + if(DEBUG) DoDebug("StoreUserAugmentationProfile(): Attempt to store outside valid range: " + IntToString(nIndex)); + return; + } + + SetPersistantLocalInt(oUser, (bQuickSelection ? PRC_AUGMENT_QUICKSELECTION : PRC_AUGMENT_PROFILE) + IntToString(nIndex), _EncodeProfile(uap)); +} + +string UserAugmentationProfileToString(struct user_augment_profile uap) +{ + string sBegin = GetStringByStrRef(16823498) + " "; // "Option" + string sEnd = " " + (uap.bValueIsPP ? "PP" : GetStringByStrRef(16823499)); // "times" + + return sBegin + "1: " + IntToString(uap.nOption_1) + sEnd + "; " + + sBegin + "2: " + IntToString(uap.nOption_2) + sEnd + "; " + + sBegin + "3: " + IntToString(uap.nOption_3) + sEnd + "; " + + sBegin + "4: " + IntToString(uap.nOption_4) + sEnd + "; " + + sBegin + "5: " + IntToString(uap.nOption_5) + sEnd; +} + +struct manifestation EvaluateAugmentation(struct manifestation manif, struct power_augment_profile pap) +{ + // Get the user's augmentation profile - will be all zeroes if no profile is active + struct user_augment_profile uap = GetCurrentUserAugmentationProfile(manif.oManifester); + int nSurge = GetWildSurge(manif.oManifester); + int nAugPPCost = 0; + int nAugPPCostReductions = 0; + int bMaxAugment = GetLocalInt(manif.oManifester, PRC_AUGMENT_MAXAUGMENT) && + !GetLocalInt(manif.oManifester, PRC_AUGMENT_OVERRIDE); // Override profile also overrides max augment + + // Initialise the augmentation data in the manifestation structure to zero + /* Probably unnecessary due to auto-init + manif.nTimesAugOptUsed_1 = 0; + manif.nTimesAugOptUsed_2 = 0; + manif.nTimesAugOptUsed_3 = 0; + manif.nTimesAugOptUsed_4 = 0; + manif.nTimesAugOptUsed_5 = 0; + manif.nTimesGenericAugUsed = 0; + */ + + /* Bloody duplication follows. Real arrays would be nice */ + // Make sure the option is available for use and the user wants to do something with it + if(pap.nMaxAugs_1 && uap.nOption_1) + { + // Determine how many times the augmentation option has been used + manif.nTimesAugOptUsed_1 = uap.bValueIsPP ? // The user can determine whether their settings are interpreted + uap.nOption_1 / pap.nAugCost_1 : // as static PP costs + uap.nOption_1; // or as number of times to use + // Make sure the number of times the option is used does not exceed the maximum + if(pap.nMaxAugs_1 != PRC_UNLIMITED_AUGMENTATION && manif.nTimesAugOptUsed_1 > pap.nMaxAugs_1) + manif.nTimesAugOptUsed_1 = pap.nMaxAugs_1; + // Calculate the amount of PP the augmentation will cost + nAugPPCost += manif.nTimesAugOptUsed_1 * pap.nAugCost_1; + } + // Make sure the option is available for use and the user wants to do something with it + if(pap.nMaxAugs_2 && uap.nOption_2) + { + // Determine how many times the augmentation option has been used + manif.nTimesAugOptUsed_2 = uap.bValueIsPP ? // The user can determine whether their settings are interpreted + uap.nOption_2 / pap.nAugCost_2 : // as static PP costs + uap.nOption_2; // or as number of times to use + // Make sure the number of times the option is used does not exceed the maximum + if(pap.nMaxAugs_2 != PRC_UNLIMITED_AUGMENTATION && manif.nTimesAugOptUsed_2 > pap.nMaxAugs_2) + manif.nTimesAugOptUsed_2 = pap.nMaxAugs_2; + // Calculate the amount of PP the augmentation will cost + nAugPPCost += manif.nTimesAugOptUsed_2 * pap.nAugCost_2; + } + // Make sure the option is available for use and the user wants to do something with it + if(pap.nMaxAugs_3 && uap.nOption_3) + { + // Determine how many times the augmentation option has been used + manif.nTimesAugOptUsed_3 = uap.bValueIsPP ? // The user can determine whether their settings are interpreted + uap.nOption_3 / pap.nAugCost_3 : // as static PP costs + uap.nOption_3; // or as number of times to use + // Make sure the number of times the option is used does not exceed the maximum + if(pap.nMaxAugs_3 != PRC_UNLIMITED_AUGMENTATION && manif.nTimesAugOptUsed_3 > pap.nMaxAugs_3) + manif.nTimesAugOptUsed_3 = pap.nMaxAugs_3; + // Calculate the amount of PP the augmentation will cost + nAugPPCost += manif.nTimesAugOptUsed_3 * pap.nAugCost_3; + } + // Make sure the option is available for use and the user wants to do something with it + if(pap.nMaxAugs_4 && uap.nOption_4) + { + // Determine how many times the augmentation option has been used + manif.nTimesAugOptUsed_4 = uap.bValueIsPP ? // The user can determine whether their settings are interpreted + uap.nOption_4 / pap.nAugCost_4 : // as static PP costs + uap.nOption_4; // or as number of times to use + // Make sure the number of times the option is used does not exceed the maximum + if(pap.nMaxAugs_4 != PRC_UNLIMITED_AUGMENTATION && manif.nTimesAugOptUsed_4 > pap.nMaxAugs_4) + manif.nTimesAugOptUsed_4 = pap.nMaxAugs_4; + // Calculate the amount of PP the augmentation will cost + nAugPPCost += manif.nTimesAugOptUsed_4 * pap.nAugCost_4; + } + // Make sure the option is available for use and the user wants to do something with it + if(pap.nMaxAugs_5 && uap.nOption_5) + { + // Determine how many times the augmentation option has been used + manif.nTimesAugOptUsed_5 = uap.bValueIsPP ? // The user can determine whether their settings are interpreted + uap.nOption_5 / pap.nAugCost_5 : // as static PP costs + uap.nOption_5; // or as number of times to use + // Make sure the number of times the option is used does not exceed the maximum + if(pap.nMaxAugs_5 != PRC_UNLIMITED_AUGMENTATION && manif.nTimesAugOptUsed_5 > pap.nMaxAugs_5) + manif.nTimesAugOptUsed_5 = pap.nMaxAugs_5; + // Calculate the amount of PP the augmentation will cost + nAugPPCost += manif.nTimesAugOptUsed_5 * pap.nAugCost_5; + } + + // Calculate number of times a generic augmentation happens with this number of PP + if(pap.nGenericAugCost != PRC_NO_GENERIC_AUGMENTS) + manif.nTimesGenericAugUsed = nAugPPCost / pap.nGenericAugCost; + + + /*/ Various effects modifying the augmentation go below /*/ + + // Account for wild surge + nAugPPCostReductions += nSurge; + + // Midnight Augmentation feat from incarnum + int bMidAug = GetLocalInt(manif.oManifester, "MidnightAugPower"); + int nMidnightAugReduction = 0; + //if (GetHasFeat(FEAT_MIDNIGHT_AUGMENTATION, manif.oManifester)) + if(bMidAug > 0) + { + if(DEBUG) DoDebug("Checking Midnight Augumentation"); + int bMidAugInvestment = GetLocalInt(manif.oManifester, "MidnightAugPowerInvestment"); + + // Make sure the power is the correct one, and that you can expend your psionic focus + if (manif.nSpellID == GetLocalInt(manif.oManifester, "MidnightAugPower") && UsePsionicFocus(manif.oManifester)) + { + if(DEBUG) DoDebug("Midnight Augumentation power invested Essentia is: "+IntToString(bMidAugInvestment)+"."); + //nAugPPCostReductions = nAugPPCostReductions + bMidAugInvestment; + nMidnightAugReduction = bMidAugInvestment; + + if(DEBUG) DoDebug("Final Midnight Augumentation power adjustment "+IntToString(nMidnightAugReduction)+"."); + } + } + + /*/ Various effects modifying the augmentation go above /*/ + + // Auto-distribution, if modifying effects provided more PP than has been used so far or + // the maximal augmentation switch is active + if((nAugPPCost - nAugPPCostReductions) < 0 || bMaxAugment) + { + int nToAutodistribute = 0, nAutodistributed; + + // Calculate autodistribution amount + if(bMaxAugment) + { + // Maximal augmentation ignores PP cost reductions here. They are instead handled at the end + if(((manif.nManifesterLevel - manif.nPPCost) - nAugPPCost) > 0) + nToAutodistribute = manif.nManifesterLevel // Maximum usable + - manif.nPPCost // Reduced by what's already been used for other things + - nAugPPCost; // Reduced by what's already been used for augmentation + } + // No maximal augmentation, instead more PP cost reduction provided than PP has been used + else if((nAugPPCost - nAugPPCostReductions) < 0) + nToAutodistribute = -(nAugPPCost - nAugPPCostReductions); // The amount of PP cost reduction that's in excess of what's already been used for augmentation + + // Store the value for use in cost calculations + nAutodistributed = nToAutodistribute; + + // Start the distribution + int nTimesCanAug; + int nTimesAugd; + if(nToAutodistribute > 0 && pap.nMaxAugs_1) + { + // Determine how many times this option could be used + if(pap.nMaxAugs_1 == PRC_UNLIMITED_AUGMENTATION) + nTimesCanAug = PRC_UNLIMITED_AUGMENTATION; + else + nTimesCanAug = pap.nMaxAugs_1 - manif.nTimesAugOptUsed_1; + + if(nTimesCanAug) + { + // Determine how many times it can be used and how much it costs + nTimesAugd = nTimesCanAug == PRC_UNLIMITED_AUGMENTATION ? + nToAutodistribute / pap.nAugCost_1 : + PRCMin(nToAutodistribute / pap.nAugCost_1, nTimesCanAug); + nToAutodistribute -= nTimesAugd * pap.nAugCost_1; + + manif.nTimesAugOptUsed_1 += nTimesAugd; + } + } + if(nToAutodistribute > 0 && pap.nMaxAugs_2) + { + // Determine how many times this option can be used + if(pap.nMaxAugs_2 == PRC_UNLIMITED_AUGMENTATION) + nTimesCanAug = PRC_UNLIMITED_AUGMENTATION; + else + nTimesCanAug = pap.nMaxAugs_2 - manif.nTimesAugOptUsed_2; + + if(nTimesCanAug) + { + // Determine how many times it can be used and how much it costs + nTimesAugd = nTimesCanAug == PRC_UNLIMITED_AUGMENTATION ? + nToAutodistribute / pap.nAugCost_2 : + PRCMin(nToAutodistribute / pap.nAugCost_2, nTimesCanAug); + nToAutodistribute -= nTimesAugd * pap.nAugCost_2; + + manif.nTimesAugOptUsed_2 += nTimesAugd; + } + } + if(nToAutodistribute > 0 && pap.nMaxAugs_3) + { + // Determine how many times this option can be used + if(pap.nMaxAugs_3 == PRC_UNLIMITED_AUGMENTATION) + nTimesCanAug = PRC_UNLIMITED_AUGMENTATION; + else + nTimesCanAug = pap.nMaxAugs_3 - manif.nTimesAugOptUsed_3; + + if(nTimesCanAug) + { + // Determine how many times it can be used and how much it costs + nTimesAugd = nTimesCanAug == PRC_UNLIMITED_AUGMENTATION ? + nToAutodistribute / pap.nAugCost_3 : + PRCMin(nToAutodistribute / pap.nAugCost_3, nTimesCanAug); + nToAutodistribute -= nTimesAugd * pap.nAugCost_3; + + manif.nTimesAugOptUsed_3 += nTimesAugd; + } + } + if(nToAutodistribute > 0 && pap.nMaxAugs_4) + { + // Determine how many times this option can be used + if(pap.nMaxAugs_4 == PRC_UNLIMITED_AUGMENTATION) + nTimesCanAug = PRC_UNLIMITED_AUGMENTATION; + else + nTimesCanAug = pap.nMaxAugs_4 - manif.nTimesAugOptUsed_4; + + if(nTimesCanAug) + { + // Determine how many times it can be used and how much it costs + nTimesAugd = nTimesCanAug == PRC_UNLIMITED_AUGMENTATION ? + nToAutodistribute / pap.nAugCost_4 : + PRCMin(nToAutodistribute / pap.nAugCost_4, nTimesCanAug); + nToAutodistribute -= nTimesAugd * pap.nAugCost_4; + + manif.nTimesAugOptUsed_4 += nTimesAugd; + } + } + if(nToAutodistribute > 0 && pap.nMaxAugs_5) + { + // Determine how many times this option can be used + if(pap.nMaxAugs_5 == PRC_UNLIMITED_AUGMENTATION) + nTimesCanAug = PRC_UNLIMITED_AUGMENTATION; + else + nTimesCanAug = pap.nMaxAugs_5 - manif.nTimesAugOptUsed_5; + + if(nTimesCanAug) + { + // Determine how many times it can be used and how much it costs + nTimesAugd = nTimesCanAug == PRC_UNLIMITED_AUGMENTATION ? + nToAutodistribute / pap.nAugCost_5 : + PRCMin(nToAutodistribute / pap.nAugCost_5, nTimesCanAug); + nToAutodistribute -= nTimesAugd * pap.nAugCost_5; + + manif.nTimesAugOptUsed_5 += nTimesAugd; + } + } + + // Calculate amount actually autodistributed. nToAutoDistribute now contains the amount of PP that could not be auto-distributed + nAutodistributed = (nAutodistributed - nToAutodistribute); + + // Calculate increase to generic augmentation + if(pap.nGenericAugCost != PRC_NO_GENERIC_AUGMENTS) + manif.nTimesGenericAugUsed += nAutodistributed / pap.nGenericAugCost; + + // Determine new augmentation PP cost + nAugPPCost += nAutodistributed; + } + + // Add in cost reduction + //nAugPPCost = PRCMax(0, nAugPPCost - nAugPPCostReductions); + nAugPPCost = nAugPPCost - nAugPPCostReductions; + // Store the PP cost increase + manif.nPPCost += nAugPPCost; + manif.nPPCost -= nMidnightAugReduction; //:: Had to apply this directly, wouldn't work otherwise. -Jaysyn + + return manif; +} + +void SetAugmentationOverride(object oCreature, struct user_augment_profile uap) +{ + SetLocalInt(oCreature, PRC_AUGMENT_OVERRIDE, _EncodeProfile(uap) + 1); +} + +// Test main +//void main(){} \ No newline at end of file diff --git a/src/include/psi_inc_const.nss b/src/include/psi_inc_const.nss new file mode 100644 index 0000000..5256beb --- /dev/null +++ b/src/include/psi_inc_const.nss @@ -0,0 +1,119 @@ +//////////////////////////////////// +// +// Global Constants for +// Psionics Functions +// +/////////////////////////////////// + + + +const string PSIONIC_FOCUS = "PRC_PsionicFocus"; + +const string PRC_WILD_SURGE = "PRC_WildSurge_Level"; +const string PRC_OVERCHANNEL = "PRC_Overchannel_Level"; + +const string POWER_POINT_VARNAME = "PRC_PowerPoints"; + + + +/// Special power lists. Powers gained via Expanded Knowledge, Psychic Chirurgery and similar sources +const int POWER_LIST_EXP_KNOWLEDGE = -1; +const int POWER_LIST_EPIC_EXP_KNOWLEDGE = -2; +const int POWER_LIST_MISC = -3; + +const string _POWER_LIST_NAME_BASE = "PRC_PsionicsPowerList_"; +const string _POWER_LIST_TOTAL_KNOWN = "_TotalKnown"; +const string _POWER_LIST_MODIFIER = "_KnownModifier"; +const string _POWER_LIST_MISC_ARRAY = "_PowersKnownMiscArray"; +const string _POWER_LIST_LEVEL_ARRAY = "_PowersKnownLevelArray_"; +const string _POWER_LIST_GENERAL_ARRAY = "_PowersKnownGeneralArray"; + +///////////////////////////////////////////// +// Manifest + +const string PRC_MANIFESTING_CLASS = "PRC_CurrentManifest_ManifestingClass"; +const string PRC_POWER_LEVEL = "PRC_CurrentManifest_PowerLevel"; +const string PRC_IS_PSILIKE = "PRC_CurrentManifest_IsPsiLikeAbility"; +const string PRC_DEBUG_IGNORE_CONSTRAINTS = "PRC_Debug_Ignore_Constraints"; + +/** + * The variable in which the manifestation token is stored. If no token exists, + * the variable is set to point at the manifester itself. That way OBJECT_INVALID + * means the variable is unitialised. + */ +const string PRC_MANIFESTATION_TOKEN_VAR = "PRC_ManifestationToken"; +const string PRC_MANIFESTATION_TOKEN_NAME = "PRC_MANIFTOKEN"; +const float PRC_MANIFESTATION_HB_DELAY = 0.5f; + +// +///////////////////////////////////////////// + +///////////////////////////////////////////// +// Metapsi + +/// No metapsionics +const int METAPSIONIC_NONE = 0x0; +/// Chain Power +const int METAPSIONIC_CHAIN = 0x2; +/// Empower Power +const int METAPSIONIC_EMPOWER = 0x4; +/// Extend Power +const int METAPSIONIC_EXTEND = 0x8; +/// Maximize Power +const int METAPSIONIC_MAXIMIZE = 0x10; +/// Split Psionic Ray +const int METAPSIONIC_SPLIT = 0x20; +/// Twin Power +const int METAPSIONIC_TWIN = 0x40; +/// Widen Power +const int METAPSIONIC_WIDEN = 0x80; +/// Quicken Power +const int METAPSIONIC_QUICKEN = 0x100; + +/// How much PP Chain Power costs to use +const int METAPSIONIC_CHAIN_COST = 6; +/// How much PP Empower Power costs to use +const int METAPSIONIC_EMPOWER_COST = 2; +/// How much PP Extend Power costs to use +const int METAPSIONIC_EXTEND_COST = 2; +/// How much PP Maximize Power costs to use +const int METAPSIONIC_MAXIMIZE_COST = 4; +/// How much PP Split Psionic Ray costs to use +const int METAPSIONIC_SPLIT_COST = 2; +/// How much PP Twin Power costs to use +const int METAPSIONIC_TWIN_COST = 6; +/// How much PP Widen Power costs to use +const int METAPSIONIC_WIDEN_COST = 4; +/// How much PP Quicken Power costs to use +const int METAPSIONIC_QUICKEN_COST = 6; + +/// Internal constant. Value is equal to the lowest metapsionic constant. Used when looping over metapsionic flag variables +const int METAPSIONIC_MIN = 0x2; +/// Internal constant. Value is equal to the highest metapsionic constant. Used when looping over metapsionic flag variables +const int METAPSIONIC_MAX = 0x100; + +/// Chain Power variable name +const string METAPSIONIC_CHAIN_VAR = "PRC_PsiMeta_Chain"; +/// Empower Power variable name +const string METAPSIONIC_EMPOWER_VAR = "PRC_PsiMeta_Empower"; +/// Extend Power variable name +const string METAPSIONIC_EXTEND_VAR = "PRC_PsiMeta_Extend"; +/// Maximize Power variable name +const string METAPSIONIC_MAXIMIZE_VAR = "PRC_PsiMeta_Maximize"; +/// Split Psionic Ray variable name +const string METAPSIONIC_SPLIT_VAR = "PRC_PsiMeta_Split"; +/// Twin Power variable name +const string METAPSIONIC_TWIN_VAR = "PRC_PsiMeta_Twin"; +/// Widen Power variable name +const string METAPSIONIC_WIDEN_VAR = "PRC_PsiMeta_Widen"; +/// Quicken Power variable name +const string METAPSIONIC_QUICKEN_VAR = "PRC_PsiMeta_Quicken"; + +/// The name of the array targets returned by EvaluateChainPower will be stored in +const string PRC_CHAIN_POWER_ARRAY = "PRC_ChainPowerTargets"; + +/// The name of a marker variable that tells that the power being manifested had Quicken Power used on it +const string PRC_POWER_IS_QUICKENED = "PRC_PowerIsQuickened"; + +// +///////////////////////////////////////////// \ No newline at end of file diff --git a/src/include/psi_inc_core.nss b/src/include/psi_inc_core.nss new file mode 100644 index 0000000..9083bee --- /dev/null +++ b/src/include/psi_inc_core.nss @@ -0,0 +1,1668 @@ +//:://///////////////////////////////////////////// +//:: Psionics include: Psionic Core Files +//:: psi_inc_core +//:://///////////////////////////////////////////// +/** @file + Core functions removed from + + psi_inc_psifunc + psi_inc_focus (depreciated) + + as they are required by many of the other psi groups + + @author Ornedan/ElgarL + @date Created - 2005.11.10/23.07.2010 + */ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +//:: Updated for .35 by Jaysyn 2023/03/10 + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +// Included here to provide the values for the constants below +#include "prc_class_const" + +const int POWER_LIST_PSION = CLASS_TYPE_PSION; +const int POWER_LIST_WILDER = CLASS_TYPE_WILDER; +const int POWER_LIST_PSYWAR = CLASS_TYPE_PSYWAR; +const int POWER_LIST_PSYROG = CLASS_TYPE_PSYCHIC_ROGUE; +const int POWER_LIST_FIST_OF_ZUOKEN = CLASS_TYPE_FIST_OF_ZUOKEN; +const int POWER_LIST_WARMIND = CLASS_TYPE_WARMIND; + +#include "psi_inc_const" + +//:: Test Main +//:: void main (){} + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Attempts to use psionic focus. If the creature was focused, it + * loses the focus. If it has Epic Psionic Focus feats, it will + * be able to use the focus for a number of times equal to the + * number of those feats it has during the next 0.5s + * + * @param oUser Creature expending it's psionic focus + * @return TRUE if the creature was psionically focus or had + * Epic Psionic Focus uses remaining. FALSE otherwise. + */ +int UsePsionicFocus(object oUser = OBJECT_SELF); + +/** + * Sets psionic focus active and triggers feats dependant + * on it. + * + * Feats currently keyed to activity of psionic focus: + * Psionic Dodge + * Speed of Thought + * + * @param oGainee Creature gaining psionic focus. + */ +void GainPsionicFocus(object oGainee = OBJECT_SELF); + +/** + * Gets the number of psionic focus uses the creature has available + * to it at this moment. If the creature is psionically focused, + * the number equal to GetPsionicFocusUsesPerExpenditure(), otherwise + * it is however many focus uses the creature still has remaining of + * that number. + * + * @param oCreature Creaute whose psionic focus use count to evaluate + * @return The total number of times UsePsionicFocus() will + * return TRUE if called at this moment. + */ +int GetPsionicFocusesAvailable(object oCreature = OBJECT_SELF); + +/** + * Calculates the number of times a creature may use it's psionic focus when expending it. + * Base is 1. + * In addition, 1 more use for each Epic Psionic Focus feat the creature has. + * + * @param oCreature Creaute whose psionic focus use count to evaluate + * @return The total number of times UsePsionicFocus() will return + * TRUE for a single expending of psionic focus. + */ +int GetPsionicFocusUsesPerExpenditure(object oCreature = OBJECT_SELF); + +/** + * Sets the given creature's psionic focus off and deactivates all feats keyed to it. + * + * @param oLoser Creature losing it's psionic focus + */ +void LosePsionicFocus(object oLoser = OBJECT_SELF); + +/** + * Checks whether the given creature is psionically focused. + * + * @param oCreature Creature whose psionic focus's state to examine + * @return TRUE if the creature is psionically focused, FALSE + * otherwise. + */ +int GetIsPsionicallyFocused(object oCreature = OBJECT_SELF); + +/** + * Determines the number of feats that would use psionic focus + * when triggered the given creature has active. + * + * Currently accounts for: + * Talented + * Power Specialization + * Power Penetration + * Psionic Endowment + * Chain Power + * Empower Power + * Extend Power + * Maximize Power + * Split Psionic Ray + * Twin Power + * Widen Power + * Quicken Power + * + * @param oCreature Creature whose feats to examine + * @return How many of the listed feats are active + */ +int GetPsionicFocusUsingFeatsActive(object oCreature = OBJECT_SELF); + +/** + * Calculates the DC of the power being currently manifested. + * Base value is 10 + power level + ability modifier in manifesting stat + * + * WARNING: Return value is not defined when a power is not being manifested. + * + */ +int GetManifesterDC(object oManifester = OBJECT_SELF); + +/** + * Determines the spell school matching a discipline according to the + * standard transparency rules. + * Disciplines which have no matching spell school are matched with + * SPELL_SCHOOL_GENERAL. + * + * @param nDiscipline Discipline to find matching spell school for + * @return SPELL_SCHOOL_* of the match + */ +int DisciplineToSpellSchool(int nDiscipline); + +/** + * Determines the discipline matching a spell school according to the + * standard transparency rules. + * Spell schools that have no matching disciplines are matched with + * DISCIPLINE_NONE. + * + * @param nSpellSchool Spell schools to find matching discipline for + * @return DISCIPLINE_* of the match + */ +int SpellSchoolToDiscipline(int nSpellSchool); + +/** + * Determines the discipline of a power, using the School column of spells.2da. + * + * @param nSpellID The spellID of the power to determine the discipline of + * @return DISCIPLINE_* constant. DISCIPLINE_NONE if the power's + * School designation does not match any of the discipline's. + */ +int GetPowerDiscipline(int nSpellID); + +/** + * Determines whether a given power is a power of the Telepahty discipline. + * + * @param nSpellID The spells.2da row of the power. If left to default, + * PRCGetSpellId() is used. + * @return TRUE if the power's discipline is Telepathy, FALSE otherwise + */ +int GetIsTelepathyPower(int nSpellID = -1); + +/** + * Checks whether the PC possesses the feats the given feat has as it's + * prerequisites. Possession of a feat is checked using GetHasFeat(). + * + * + * @param nFeat The feat for which determine the possession of prerequisites + * @param oPC The creature whose feats to check + * @return TRUE if the PC possesses the prerequisite feats AND does not + * already posses nFeat, FALSE otherwise. + */ +int CheckPowerPrereqs(int nFeat, object oPC); + +/** + * Determines the manifester's level in regards to manifester checks to overcome + * spell resistance. + * + * WARNING: Return value is not defined when a power is not being manifested. + * + * @param oManifester A creature manifesting a power at the moment + * @return The creature's manifester level, adjusted to account for + * modifiers that affect spell resistance checks. + */ +int GetPsiPenetration(object oManifester = OBJECT_SELF); + +/** + * Determines whether a given creature possesses the Psionic subtype. + * Ways of possessing the subtype: + * - Being of a naturally psionic race + * - Having class levels in a psionic class + * - Possessing the Wild Talent feat + * + * @param oCreature Creature to test + * @return TRUE if the creature is psionic, FALSE otherwise. + */ +int GetIsPsionicCharacter(object oCreature); + +/** + * Creates the creature weapon for powers like Bite of the Wolf and Claws of the + * Beast. If a creature weapon of the correct type is already present, it is + * used instead of a new one. + * + * Preserving existing weapons may cause problems, if so, make the function instead delete the old object - Ornedan + * + * @param oCreature Creatue whose creature weapons to mess with. + * @param sResRef Resref of the creature weapon. Assumed to be one of the + * PRC creature weapons, so this considered to is also be + * the tag. + * @param nIventorySlot Inventory slot where the creature weapon is to be equipped. + * @param fDuration If a new weapon is created, it will be destroyed after + * this duration. + * + * @return The newly created creature weapon. Or an existing weapon, + * if there was one. + */ +object GetPsionicCreatureWeapon(object oCreature, string sResRef, int nInventorySlot, float fDuration); + +/** + * Applies modifications to a power's damage that depend on some property + * of the target. + * Currently accounts for: + * - Mental Resistance + * - Greater Power Specialization + * - Intellect Fortress + * + * @param oTarget A creature being dealt damage by a power + * @param oManifester The creature manifesting the damaging power + * @param nDamage The amount of damage the creature would be dealt + * + * @param bIsHitPointDamage Is the damage HP damage or something else? + * @param bIsEnergyDamage Is the damage caused by energy or something else? Only relevant if the damage is HP damage. + * + * @return The amount of damage, modified by oTarget's abilities + */ +int GetTargetSpecificChangesToDamage(object oTarget, object oManifester, int nDamage, + int bIsHitPointDamage = TRUE, int bIsEnergyDamage = FALSE); + +/** + * Gets the manifester level adjustment from the Practiced Manifester feats. + * + * @param oManifester The creature to check + * @param iManifestingClass The CLASS_TYPE* that the power was cast by. + * @param iManifestingLevels The manifester level for the power calculated so far + * ie. BEFORE Practiced Manifester. + */ +int PracticedManifesting(object oManifester, int iManifestingClass, int iManifestingLevels); + +/** + * Determines the given creature's manifester level. If a class is specified, + * then returns the manifester level for that class. Otherwise, returns + * the manifester level for the currently active manifestation. + * + * @param oManifester The creature whose manifester level to determine + * @param nSpecificClass The class to determine the creature's manifester + * level in. + * DEFAULT: CLASS_TYPE_INVALID, which means the creature's + * manifester level in regards to an ongoing manifestation + * is determined instead. + * @param nMaxPowerLevel For learning powers. Practiced Manifester is breaking things otherwise. + * @return The manifester level + */ +int GetManifesterLevel(object oManifester, int nSpecificClass = CLASS_TYPE_INVALID, int nMaxPowerLevel = FALSE); + +/** + * Determines the given creature's highest undmodified manifester level among it's + * manifesting classes. + * + * @param oCreature Creature whose highest manifester level to determine + * @return The highest unmodified manifester level the creature can have + */ +int GetHighestManifesterLevel(object oCreature); + +/** + * Gets the level of the power being currently manifested. + * WARNING: Return value is not defined when a power is not being manifested. + * + * @param oManifester The creature currently manifesting a power + * @return The level of the power being manifested + */ +int GetPowerLevel(object oManifester); + +/** + * Determines a creature's ability score in the manifesting ability of a given + * class. + * + * @param oManifester Creature whose ability score to get + * @param nClass CLASS_TYPE_* constant of a manifesting class + */ +int GetAbilityScoreOfClass(object oManifester, int nClass); + +/** + * Determines from what class's power list the currently being manifested + * power is manifested from. + * + * @param oManifester A creature manifesting a power at this moment + * @return CLASS_TYPE_* constant of the class + */ +int GetManifestingClass(object oManifester = OBJECT_SELF); + +/** + * Determines the manifesting ability of a class. + * + * @param nClass CLASS_TYPE_* constant of the class to determine the manifesting stat of + * @return ABILITY_* of the manifesting stat. ABILITY_CHARISMA for non-manifester + * classes. + */ +int GetAbilityOfClass(int nClass); + +/** + * Determines which of the character's classes is their highest or first psionic + * manifesting class, if any. This is the one which gains manifester level raise + * benefits from prestige classes. + * + * @param oCreature Creature whose classes to test + * @return CLASS_TYPE_* of the first psionic manifesting class, + * CLASS_TYPE_INVALID if the creature does not posses any. + */ +int GetPrimaryPsionicClass(object oCreature = OBJECT_SELF); + +/** + * Calculates how many manifester levels are gained by a given creature from + * it's levels in prestige classes. + * + * @param oCreature Creature to calculate added manifester levels for + * @param nClass Class to calculate PrC caster increase from + * @return The number of manifester levels gained + */ +int GetPsionicPRCLevels(object oCreature, int nClass = CLASS_TYPE_INVALID); + +/** + * Determines the position of a creature's first psionic manifesting class, if any. + * + * @param oCreature Creature whose classes to test + * @return The position of the first psionic class {1, 2, 3} or 0 if + * the creature possesses no levels in psionic classes. + */ +int GetFirstPsionicClassPosition(object oCreature = OBJECT_SELF); + +/** + * Determines whether a given class is a psionic class or not. A psionic + * class is defined as one that gives base manifesting. + * + * @param nClass CLASS_TYPE_* of the class to test + * @return TRUE if the class is a psionic class, FALSE otherwise + */ +int GetIsPsionicClass(int nClass); + +/** + * Gets the amount of manifester levels the given creature is Wild Surging by. + * + * @param oManifester The creature to test + * @return The number of manifester levels added by Wild Surge. 0 if + * Wild Surge is not active. + */ +int GetWildSurge(object oManifester); + +/** + * Gets the highest power level the creature should know + * + * @param oManifester The creature to test + * @return Power level. + */ +int GetMaxPowerLevel(object oManifester); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "prc_inc_unarmed" + +////////////////////////////////////////////////// +/* Global Structures */ +////////////////////////////////////////////////// + +// These are used in psi_inc_psifunc and psi_inc_augment + +/** + * A structure that contains common data used during power manifestation. + */ +struct manifestation{ + /* Generic stuff */ + /// The creature manifesting the power + object oManifester; + /// Whether the manifestation is successfull or not + int bCanManifest; + /// How much Power Points the manifestation costs + int nPPCost; + /// How many psionic focus uses the manifester would have remaining at a particular point in the manifestation + int nPsiFocUsesRemain; + /// The creature's manifester level in regards to this power + int nManifesterLevel; + /// The power's spell ID + int nSpellID; + + /* Augmentation */ + /// How many times the first augmentation option of the power is used + int nTimesAugOptUsed_1; + /// How many times the second augmentation option of the power is used + int nTimesAugOptUsed_2; + /// How many times the third augmentation option of the power is used + int nTimesAugOptUsed_3; + /// How many times the fourth augmentation option of the power is used + int nTimesAugOptUsed_4; + /// How many times the fifth augmentation option of the power is used + int nTimesAugOptUsed_5; + /// How many times the PP used for augmentation triggered the generic augmentation of the power + int nTimesGenericAugUsed; + + /* Metapsionics */ + /// Whether Chain Power was used with this manifestation + int bChain; + /// Whether Empower Power was used with this manifestation + int bEmpower; + /// Whether Extend Power was used with this manifestation + int bExtend; + /// Whether Maximize Power was used with this manifestation + int bMaximize; + /// Whether Split Psionic Ray was used with this manifestation + int bSplit; + /// Whether Twin Power was used with this manifestation + int bTwin; + /// Whether Widen Power was used with this manifestation + int bWiden; + /// Whether Quicken Power was used with this manifestation + int bQuicken; +}; + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + + + +/* Begin PSI FOCUS */ +////////////////////////////////////////////////////// + +int UsePsionicFocus(object oUser = OBJECT_SELF) +{ + int bToReturn = FALSE; + // This does not expend your psionic focus, but rather the item's + if (GetLocalInt(oUser, "SimpleBow_Focus")) + { + DeleteLocalInt(oUser, "SimpleBow_Focus"); + return TRUE; + } + // Next, check if we have focus on + else if(GetLocalInt(oUser, PSIONIC_FOCUS)) + { + SetLocalInt(oUser, "PsionicFocusUses", GetPsionicFocusUsesPerExpenditure(oUser) - 1); + DelayCommand(0.5f, DeleteLocalInt(oUser, "PsionicFocusUses")); + SendMessageToPCByStrRef(oUser, 16826414); // "You have used your Psionic Focus" + + bToReturn = TRUE; + } + // We don't. Check if there are uses remaining + else if(GetLocalInt(oUser, "PsionicFocusUses")) + { + SetLocalInt(oUser, "PsionicFocusUses", GetLocalInt(oUser, "PsionicFocusUses") - 1); + + bToReturn = TRUE; + } + + // Lose focus if it was used + if(bToReturn) LosePsionicFocus(oUser); + + return bToReturn; +} + +void GainPsionicFocus(object oGainee = OBJECT_SELF) +{ + SetLocalInt(oGainee, PSIONIC_FOCUS, TRUE); + + // Speed Of Thought + if(GetHasFeat(FEAT_SPEED_OF_THOUGHT, oGainee)) + { + // Check for heavy armor before adding the bonus now + if(GetBaseAC(GetItemInSlot(INVENTORY_SLOT_CHEST, oGainee)) < 6) + AssignCommand(oGainee, ActionCastSpellAtObject(SPELL_FEAT_SPEED_OF_THOUGHT_BONUS, oGainee, METAMAGIC_NONE, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE)); + + // Schedule a script to remove the bonus should they equip heavy armor + AddEventScript(oGainee, EVENT_ONPLAYEREQUIPITEM, "psi_spdfthgt_oeq", TRUE, FALSE); + // Schedule another script to add the bonus back if the unequip the armor + AddEventScript(oGainee, EVENT_ONPLAYERUNEQUIPITEM, "psi_spdfthgt_ueq", TRUE, FALSE); + } + // Psionic Dodge + if(GetHasFeat(FEAT_PSIONIC_DODGE, oGainee)) + SetCompositeBonus(GetPCSkin(oGainee), "PsionicDodge", 1, ITEM_PROPERTY_AC_BONUS); + + //Strength of Two - Kalashtar racial feat + if(GetHasFeat(FEAT_STRENGTH_OF_TWO, oGainee)) + { + SetCompositeBonus(GetPCSkin(oGainee), "StrengthOfTwo", 1, ITEM_PROPERTY_SAVING_THROW_BONUS, SAVING_THROW_WILL); + } + // Danger Sense abilities for Psychic Rogue + if(GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oGainee) >= 5) + ExecuteScript("psi_psyrog_dngr", oGainee); + if(GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oGainee) >= 7) // Uncanny Dodge + IPSafeAddItemProperty(GetPCSkin(oGainee), PRCItemPropertyBonusFeat(IP_CONST_FEAT_UNCANNY_DODGE1), HoursToSeconds(24), X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + if(GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oGainee) >= 9) // Improved Uncanny Dodge + IPSafeAddItemProperty(GetPCSkin(oGainee), PRCItemPropertyBonusFeat(IP_CONST_FEAT_UNCANNY_DODGE2), HoursToSeconds(24), X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + if(GetHasFeat(FEAT_PSY_SNEAK_ATTACK_1d6, oGainee)) + { + int nPsySneak = 1; + if(GetHasFeat(FEAT_PSY_SNEAK_ATTACK_2d6, oGainee)) + nPsySneak += 2; + if(GetHasFeat(FEAT_PSY_SNEAK_ATTACK_3d6, oGainee)) + nPsySneak += 3; + + SetLocalInt(oGainee, "PsyRogueSneak",nPsySneak); + DelayCommand(0.1, ExecuteScript("prc_sneak_att", oGainee)); + } +} + +int GetPsionicFocusesAvailable(object oCreature = OBJECT_SELF) +{ + // If the creature has a psionic focus active, return the maximum + if(GetLocalInt(oCreature, PSIONIC_FOCUS)) + return GetPsionicFocusUsesPerExpenditure(oCreature); + // Otherwise, return the amount currently remaining + else + return GetLocalInt(oCreature, "PsionicFocusUses"); +} + +int GetPsionicFocusUsesPerExpenditure(object oCreature = OBJECT_SELF) +{ + int nFocusUses = 1; + int i; + for(i = FEAT_EPIC_PSIONIC_FOCUS_1; i <= FEAT_EPIC_PSIONIC_FOCUS_10; i++) + if(GetHasFeat(i, oCreature)) nFocusUses++; + + return nFocusUses; +} + +void LosePsionicFocus(object oLoser = OBJECT_SELF) +{ + // Only remove focus if it's present + if(GetLocalInt(oLoser, PSIONIC_FOCUS)) + { + SetLocalInt(oLoser, PSIONIC_FOCUS, FALSE); + + // Loss of Speed of Thought effects + PRCRemoveSpellEffects(SPELL_FEAT_SPEED_OF_THOUGHT_BONUS, oLoser, oLoser); + RemoveEventScript(oLoser, EVENT_ONPLAYEREQUIPITEM, "psi_spdfthgt_oeq", TRUE); + RemoveEventScript(oLoser, EVENT_ONPLAYERUNEQUIPITEM, "psi_spdfthgt_ueq", TRUE); + // Loss of Psionic Dodge effects + SetCompositeBonus(GetPCSkin(oLoser), "PsionicDodge", 0, ITEM_PROPERTY_AC_BONUS); + // Loss of Strength of Two effects + SetCompositeBonus(GetPCSkin(oLoser), "StrengthOfTwo", 0, ITEM_PROPERTY_SAVING_THROW_BONUS, SAVING_THROW_WILL); + + if(GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oLoser) >= 5) + PRCRemoveSpellEffects(POWER_DANGERSENSE, oLoser, oLoser); + if(GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oLoser) >= 7) + RemoveItemProperty(GetPCSkin(oLoser), ItemPropertyBonusFeat(IP_CONST_FEAT_UNCANNY_DODGE1)); + if(GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oLoser) >= 9) + RemoveItemProperty(GetPCSkin(oLoser), ItemPropertyBonusFeat(IP_CONST_FEAT_UNCANNY_DODGE2)); + + // Inform oLoser about the event + FloatingTextStrRefOnCreature(16826415, oLoser, FALSE); // "You have lost your Psionic Focus" + if(GetHasFeat(FEAT_PSY_SNEAK_ATTACK_1d6, oLoser)) + { + DeleteLocalInt(oLoser, "PsyRogueSneak"); + DelayCommand(0.1, ExecuteScript("prc_sneak_att", oLoser)); + } + } +} + +int GetIsPsionicallyFocused(object oCreature = OBJECT_SELF) +{ + return GetLocalInt(oCreature, PSIONIC_FOCUS); +} + +int GetPsionicFocusUsingFeatsActive(object oCreature = OBJECT_SELF) +{ + int nFeats; + + if(GetLocalInt(oCreature, "TalentedActive")) nFeats++; + if(GetLocalInt(oCreature, "PowerSpecializationActive")) nFeats++; + if(GetLocalInt(oCreature, "PowerPenetrationActive")) nFeats++; + if(GetLocalInt(oCreature, "PsionicEndowmentActive")) nFeats++; + + if(GetLocalInt(oCreature, METAPSIONIC_CHAIN_VAR)) nFeats++; + if(GetLocalInt(oCreature, METAPSIONIC_EMPOWER_VAR)) nFeats++; + if(GetLocalInt(oCreature, METAPSIONIC_EXTEND_VAR)) nFeats++; + if(GetLocalInt(oCreature, METAPSIONIC_MAXIMIZE_VAR)) nFeats++; + if(GetLocalInt(oCreature, METAPSIONIC_SPLIT_VAR)) nFeats++; + if(GetLocalInt(oCreature, METAPSIONIC_TWIN_VAR)) nFeats++; + if(GetLocalInt(oCreature, METAPSIONIC_WIDEN_VAR)) nFeats++; + if(GetLocalInt(oCreature, METAPSIONIC_QUICKEN_VAR)) nFeats++; + + return nFeats; +} + +////////////////////////////////////////////////////// +/* END PSI FOCUS */ +////////////////////////////////////////////////////// + +int GetManifesterDC(object oManifester = OBJECT_SELF) +{ + int nClass = GetManifestingClass(oManifester); + int nDC = 10; + nDC += GetPowerLevel(oManifester); + nDC += GetAbilityModifier(GetAbilityOfClass(nClass), oManifester); + + // Stuff that applies only to powers, not psi-like abilities goes inside + if(!GetLocalInt(oManifester, PRC_IS_PSILIKE)) + { + if (GetLocalInt(oManifester, "PsionicEndowmentActive") == TRUE && UsePsionicFocus(oManifester)) + { + nDC += GetHasFeat(FEAT_GREATER_PSIONIC_ENDOWMENT, oManifester) ? 4 : 2; + } + } + + // Needed to do some adjustments here. + object oTarget = PRCGetSpellTargetObject(); + int nPower = PRCGetSpellId(); + + // Other DC adjustments + // Soul Manifester + nDC += Soulcaster(oManifester, PRCGetSpellId()); + // Charming Veil meld + if(GetHasSpellEffect(MELD_CHARMING_VEIL, oManifester) && (GetIsOfSubschool(nPower, SUBSCHOOL_CHARM) || GetIsOfSubschool(nPower, SUBSCHOOL_COMPULSION))) nDC += GetEssentiaInvested(oManifester, MELD_CHARMING_VEIL)+1; + // Soul Eater + nDC += (GetLocalInt(oManifester, "PRC_SoulEater_HasDrained") && GetLevelByClass(CLASS_TYPE_SOUL_EATER, oManifester) >= 10) ? 2 : 0; + // Closed Mind + if(GetHasFeat(FEAT_CLOSED_MIND, oTarget)) nDC -= 2; + // Strong Mind + if(GetHasFeat(FEAT_STRONG_MIND, oTarget)) nDC -= 3; + // Fist of Dal Quor + if(GetLevelByClass(CLASS_TYPE_FIST_DAL_QUOR, oTarget) >= 4) nDC -= 2; + + return nDC; +} + +int DisciplineToSpellSchool(int nDiscipline) +{ + int nSpellSchool = SPELL_SCHOOL_GENERAL; + + switch(nDiscipline) + { + case DISCIPLINE_CLAIRSENTIENCE: nSpellSchool = SPELL_SCHOOL_DIVINATION; break; + case DISCIPLINE_METACREATIVITY: nSpellSchool = SPELL_SCHOOL_CONJURATION; break; + case DISCIPLINE_PSYCHOKINESIS: nSpellSchool = SPELL_SCHOOL_EVOCATION; break; + case DISCIPLINE_PSYCHOMETABOLISM: nSpellSchool = SPELL_SCHOOL_TRANSMUTATION; break; + case DISCIPLINE_TELEPATHY: nSpellSchool = SPELL_SCHOOL_ENCHANTMENT; break; + + default: nSpellSchool = SPELL_SCHOOL_GENERAL; break; + } + + return nSpellSchool; +} + +int SpellSchoolToDiscipline(int nSpellSchool) +{ + int nDiscipline = DISCIPLINE_NONE; + + switch(nSpellSchool) + { + case SPELL_SCHOOL_GENERAL: nDiscipline = DISCIPLINE_NONE; break; + case SPELL_SCHOOL_ABJURATION: nDiscipline = DISCIPLINE_NONE; break; + case SPELL_SCHOOL_CONJURATION: nDiscipline = DISCIPLINE_METACREATIVITY; break; + case SPELL_SCHOOL_DIVINATION: nDiscipline = DISCIPLINE_CLAIRSENTIENCE; break; + case SPELL_SCHOOL_ENCHANTMENT: nDiscipline = DISCIPLINE_TELEPATHY; break; + case SPELL_SCHOOL_EVOCATION: nDiscipline = DISCIPLINE_PSYCHOKINESIS; break; + case SPELL_SCHOOL_ILLUSION: nDiscipline = DISCIPLINE_NONE; break; + case SPELL_SCHOOL_NECROMANCY: nDiscipline = DISCIPLINE_NONE; break; + case SPELL_SCHOOL_TRANSMUTATION: nDiscipline = DISCIPLINE_PSYCHOMETABOLISM; break; + + default: nDiscipline = DISCIPLINE_NONE; + } + + return nDiscipline; +} + +int GetPowerDiscipline(int nSpellID) +{ + string sSpellSchool = Get2DACache("spells", "School", nSpellID);//lookup_spell_school(nSpellID); + int nDiscipline; + + if (sSpellSchool == "A") nDiscipline = DISCIPLINE_NONE; + else if (sSpellSchool == "C") nDiscipline = DISCIPLINE_METACREATIVITY; + else if (sSpellSchool == "D") nDiscipline = DISCIPLINE_CLAIRSENTIENCE; + else if (sSpellSchool == "E") nDiscipline = DISCIPLINE_TELEPATHY; + else if (sSpellSchool == "V") nDiscipline = DISCIPLINE_PSYCHOKINESIS; + else if (sSpellSchool == "I") nDiscipline = DISCIPLINE_NONE; + else if (sSpellSchool == "N") nDiscipline = DISCIPLINE_NONE; + else if (sSpellSchool == "T") nDiscipline = DISCIPLINE_PSYCHOMETABOLISM; + else if (sSpellSchool == "G") nDiscipline = DISCIPLINE_PSYCHOPORTATION; + + return nDiscipline; +} + +int GetIsTelepathyPower(int nSpellID = -1) +{ + if(nSpellID == -1) nSpellID = PRCGetSpellId(); + + return GetPowerDiscipline(nSpellID) == DISCIPLINE_TELEPATHY; +} + +int CheckPowerPrereqs(int nFeat, object oPC) +{ + // Having the power already automatically disqualifies one from taking it again + if(GetHasFeat(nFeat, oPC)) + return FALSE; + // We assume that the 2da is correctly formatted, and as such, a prereq slot only contains + // data if the previous slots in order also contains data. + // ie, no PREREQFEAT2 if PREREQFEAT1 is empty + if(Get2DACache("feat", "PREREQFEAT1", nFeat) != "") + { + if(!GetHasFeat(StringToInt(Get2DACache("feat", "PREREQFEAT1", nFeat)), oPC)) + return FALSE; + if(Get2DACache("feat", "PREREQFEAT2", nFeat) != "" + && !GetHasFeat(StringToInt(Get2DACache("feat", "PREREQFEAT2", nFeat)), oPC)) + return FALSE; + } + + if(Get2DACache("feat", "OrReqFeat0", nFeat) != "") + { + if(!GetHasFeat(StringToInt(Get2DACache("feat", "OrReqFeat0", nFeat)), oPC)) + return FALSE; + if(Get2DACache("feat", "OrReqFeat1", nFeat) != "") + { + if(!GetHasFeat(StringToInt(Get2DACache("feat", "OrReqFeat1", nFeat)), oPC)) + return FALSE; + if(Get2DACache("feat", "OrReqFeat2", nFeat) != "") + { + if(!GetHasFeat(StringToInt(Get2DACache("feat", "OrReqFeat2", nFeat)), oPC)) + return FALSE; + if(Get2DACache("feat", "OrReqFeat3", nFeat) != "") + { + if(!GetHasFeat(StringToInt(Get2DACache("feat", "OrReqFeat3", nFeat)), oPC)) + return FALSE; + if(Get2DACache("feat", "OrReqFeat4", nFeat) != "") + { + if(!GetHasFeat(StringToInt(Get2DACache("feat", "OrReqFeat4", nFeat)), oPC)) + return FALSE; + } } } } } + + //if youve reached this far then return TRUE + return TRUE; +} + +int GetPsiPenetration(object oManifester = OBJECT_SELF) +{ + int nPen = GetManifesterLevel(oManifester); + + // The stuff inside applies only to normal manifestation, not psi-like abilities + if(!GetLocalInt(oManifester, PRC_IS_PSILIKE)) + { + // Check for Power Pen feats being used + if(GetLocalInt(oManifester, "PowerPenetrationActive") == TRUE && UsePsionicFocus(oManifester)) + { + nPen += GetHasFeat(FEAT_GREATER_POWER_PENETRATION, oManifester) ? 8 : 4; + } + } + + return nPen; +} + +int GetIsPsionicCharacter(object oCreature) +{ + return !!(GetLevelByClass(CLASS_TYPE_PSION, oCreature) || + GetLevelByClass(CLASS_TYPE_PSYWAR, oCreature) || + GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oCreature) || + GetLevelByClass(CLASS_TYPE_WILDER, oCreature) || + GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oCreature) || + GetLevelByClass(CLASS_TYPE_WARMIND, oCreature) || + GetHasFeat(FEAT_WILD_TALENT, oCreature) || + GetHasFeat(FEAT_KALASHTAR_PP, oCreature) || + GetHasFeat(FEAT_NATPSIONIC_1, oCreature) || + GetHasFeat(FEAT_NATPSIONIC_2, oCreature) || + GetHasFeat(FEAT_NATPSIONIC_3, oCreature) + // Racial psionicity signifying feats go here + ); +} + +int IsHiddenTalent(object oPC = OBJECT_SELF) +{ + if (GetHasFeat(FEAT_HIDDEN_TALENT_BIOFEEDBACK, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_BITE_WOLF, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_BOLT, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_BURST, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_CALLTOMIND, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_CALL_WEAPONRY, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_CHAMELEON, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_CLAWS_BEAST, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_COMPRESSION, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_CONCEALTHOUGHT, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_CREATESOUND, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_CRYSTALSHARD, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_DAZE, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_DECELERATION, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_DEFPRECOG, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_DEMORALIZE, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_DISABLE, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_DISTRACT, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_ELFSIGHT, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_EMPATHY, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_EMPTYMIND, oPC) || + //GetHasFeat(FEAT_HIDDEN_TALENT_ENERGYRAY, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_ENTANGLE, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_EXPANSION, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_FARHAND, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_FORCESCREEN, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_GREASE, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_HAMMER, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_INERTIALARMOUR, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_MATTERAGITATION, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_MINDTHRUST, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_MYLIGHT, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_OFFPRECOG, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_OFFPRESC, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_PREVENOM, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_PREVENOM_WEAPON, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_SKATE, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_STOMP, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_SYNESTHETE, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_TELEMPATHICPRO, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_THICKSKIN, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_VIGOR, oPC) || + GetHasFeat(FEAT_HIDDEN_TALENT_GRIP_IRON, oPC)) + { + return TRUE; + } + else + { + return FALSE; + } +} + + +void LocalCleanExtraFists(object oCreature) +{ + int iIsCWeap, iIsEquip; + + object oClean = GetFirstItemInInventory(oCreature); + + while (GetIsObjectValid(oClean)) + { + iIsCWeap = GetIsPRCCreatureWeapon(oClean); + + iIsEquip = oClean == GetItemInSlot(INVENTORY_SLOT_CWEAPON_L) || + oClean == GetItemInSlot(INVENTORY_SLOT_CWEAPON_R) || + oClean == GetItemInSlot(INVENTORY_SLOT_CWEAPON_B); + + if (iIsCWeap && !iIsEquip) + { + DestroyObject(oClean); + } + + oClean = GetNextItemInInventory(oCreature); + } +} + +object GetPsionicCreatureWeapon(object oCreature, string sResRef, int nInventorySlot, float fDuration) +{ + int bCreatedWeapon = FALSE; + object oCWeapon = GetItemInSlot(nInventorySlot, oCreature); + + RemoveUnarmedAttackEffects(oCreature); + // Make sure they can actually equip them + UnarmedFeats(oCreature); + + // Determine if a creature weapon of the proper type already exists in the slot + if(!GetIsObjectValid(oCWeapon) || + GetStringUpperCase(GetTag(oCWeapon)) != GetStringUpperCase(sResRef) // Hack: The resref's and tags of the PRC creature weapons are the same + ) + { + if (GetHasItem(oCreature, sResRef)) + { + oCWeapon = GetItemPossessedBy(oCreature, sResRef); + SetIdentified(oCWeapon, TRUE); + //AssignCommand(oCreature, ActionEquipItem(oCWeapon, INVENTORY_SLOT_CWEAPON_L)); + ForceEquip(oCreature, oCWeapon, nInventorySlot); + } + else + { + oCWeapon = CreateItemOnObject(sResRef, oCreature); + SetIdentified(oCWeapon, TRUE); + //AssignCommand(oCreature, ActionEquipItem(oCWeapon, INVENTORY_SLOT_CWEAPON_L)); + ForceEquip(oCreature, oCWeapon, nInventorySlot); + bCreatedWeapon = TRUE; + } + } + + + // Clean up the mess of extra fists made on taking first level. + DelayCommand(6.0f, LocalCleanExtraFists(oCreature)); + + // Weapon finesse or intuitive attack? + SetLocalInt(oCreature, "UsingCreature", TRUE); + ExecuteScript("prc_intuiatk", oCreature); + DelayCommand(1.0f, DeleteLocalInt(oCreature, "UsingCreature")); + + // Add OnHitCast: Unique if necessary + if(GetHasFeat(FEAT_REND, oCreature)) + IPSafeAddItemProperty(oCWeapon, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + + // This adds creature weapon finesse + ApplyUnarmedAttackEffects(oCreature); + + // Destroy the weapon if it was created by this function + if(bCreatedWeapon) + DestroyObject(oCWeapon, (fDuration + 6.0)); + + return oCWeapon; +} + +int GetTargetSpecificChangesToDamage(object oTarget, object oManifester, int nDamage, + int bIsHitPointDamage = TRUE, int bIsEnergyDamage = FALSE) +{ + // Greater Power Specialization - +2 damage on all HP-damaging powers when target is within 30ft + if(bIsHitPointDamage && + GetHasFeat(FEAT_GREATER_POWER_SPECIALIZATION, oManifester) && + GetDistanceBetween(oTarget, oManifester) <= FeetToMeters(30.0f) + ) + nDamage += 2; + // Intellect Fortress - Halve damage dealt by powers that allow PR. Goes before DR (-like) reductions + if(GetLocalInt(oTarget, "PRC_Power_IntellectFortress_Active") && + Get2DACache("spells", "ItemImmunity", PRCGetSpellId()) == "1" + ) + nDamage /= 2; + // Mental Resistance - 3 damage less for all non-energy damage and ability damage + if(GetHasFeat(FEAT_MENTAL_RESISTANCE, oTarget) && !bIsEnergyDamage) + nDamage -= 3; + + // Reasonable return values only + if(nDamage < 0) nDamage = 0; + + if (GetIsMeldBound(oManifester, MELD_PSYCHIC_FOCUS) == CHAKRA_THROAT && nDamage > 0 && !GetLocalInt(oManifester, "PsychicFocusMeld") && bIsHitPointDamage) + { + SetLocalInt(oManifester, "PsychicFocusMeld", TRUE); + DelayCommand(6.0, DeleteLocalInt(oManifester, "PsychicFocusMeld")); + int nClass = GetMeldShapedClass(oManifester, MELD_PSYCHIC_FOCUS); + int nDC = GetMeldshaperDC(oManifester, nClass, MELD_PSYCHIC_FOCUS); + if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, 6.0); + } + + return nDamage; +} + +int PracticedManifesting(object oManifester, int iManifestingClass, int iManifestingLevels) +{ + int nFeat; + int iAdjustment = GetHitDice(oManifester) - iManifestingLevels; + iAdjustment = iAdjustment > 4 ? 4 : iAdjustment < 0 ? 0 : iAdjustment; + + switch(iManifestingClass) + { + case CLASS_TYPE_PSION: nFeat = FEAT_PRACTICED_MANIFESTER_PSION; break; + case CLASS_TYPE_PSYWAR: nFeat = FEAT_PRACTICED_MANIFESTER_PSYWAR; break; + case CLASS_TYPE_PSYCHIC_ROGUE: nFeat = FEAT_PRACTICED_MANIFESTER_PSYROG; break; + case CLASS_TYPE_WILDER: nFeat = FEAT_PRACTICED_MANIFESTER_WILDER; break; + case CLASS_TYPE_WARMIND: nFeat = FEAT_PRACTICED_MANIFESTER_WARMIND; break; + case CLASS_TYPE_FIST_OF_ZUOKEN: nFeat = FEAT_PRACTICED_MANIFESTER_FIST_OF_ZUOKEN; break; + default: nFeat = -1; + } + + if(GetHasFeat(nFeat, oManifester)) + return iAdjustment; + + return 0; +} + +int GetManifesterLevel(object oManifester, int nSpecificClass = CLASS_TYPE_INVALID, int nMaxPowerLevel = FALSE) +{ + int nLevel; + int nAdjust = GetLocalInt(oManifester, PRC_CASTERLEVEL_ADJUSTMENT); + nAdjust -= GetLocalInt(oManifester, "WoLManifPenalty"); + + if(DEBUG) DoDebug("GetManifesterLevel Specific Class: " + IntToString(nSpecificClass), oManifester); + + // The function user needs to know the character's manifester level in a specific class + // instead of whatever the character last manifested a power as + if(nSpecificClass != CLASS_TYPE_INVALID) + { + if(GetIsPsionicClass(nSpecificClass)) + { + nLevel = GetLevelByClass(nSpecificClass, oManifester); + // Add levels from +ML PrCs only for the nSpecificClass + nLevel += GetPsionicPRCLevels(oManifester, nSpecificClass); + +/* if(nSpecificClass == GetPrimaryPsionicClass(oManifester)) + nLevel += GetPsionicPRCLevels(oManifester); */ + + // Psionic vestiges are tucked in here to override things. + // This assumes that there will never be a psion with this spell effect manifesting things + if (nSpecificClass == CLASS_TYPE_PSION && GetHasSpellEffect(VESTIGE_ARETE, oManifester) && !nMaxPowerLevel) + { + nLevel = GetLocalInt(oManifester, "AretePsion"); + nMaxPowerLevel = TRUE; + } + if (nSpecificClass == CLASS_TYPE_PSION && GetHasSpellEffect(VESTIGE_THETRIAD, oManifester) && !nMaxPowerLevel) + { + nLevel = GetLocalInt(oManifester, "TheTriadPsion"); + nMaxPowerLevel = TRUE; + } + if (nSpecificClass == CLASS_TYPE_PSION && GetHasSpellEffect(VESTIGE_ABYSM, oManifester) && !nMaxPowerLevel) + { + nLevel = GetLocalInt(oManifester, "AbysmPsion"); + nMaxPowerLevel = TRUE; + } + if(DEBUG) DoDebug("GetManifesterLevel Specific Class Manif Level: " + IntToString(nLevel), oManifester); + // This is for learning powers, we need to ignore some adjustments + if (nMaxPowerLevel) return nLevel; + + nLevel += PracticedManifesting(oManifester, nSpecificClass, nLevel); //gotta be the last one + + return nLevel + nAdjust; + } + // A character's manifester level gained from non-manifesting classes is always a nice, round zero + else + return 0; + } + + // Item Spells + if(GetItemPossessor(GetSpellCastItem()) == oManifester) + { + if(DEBUG) SendMessageToPC(oManifester, "Item casting at level " + IntToString(GetCasterLevel(oManifester))); + + return GetCasterLevel(oManifester) + nAdjust; + } + + // For when you want to assign the caster level. + else if(GetLocalInt(oManifester, PRC_CASTERLEVEL_OVERRIDE) != 0) + { + if(DEBUG) SendMessageToPC(oManifester, "Forced-level manifesting at level " + IntToString(GetCasterLevel(oManifester))); + + DelayCommand(1.0, DeleteLocalInt(oManifester, PRC_CASTERLEVEL_OVERRIDE)); + nLevel = GetLocalInt(oManifester, PRC_CASTERLEVEL_OVERRIDE); + } + else if(GetManifestingClass(oManifester) != CLASS_TYPE_INVALID) + { + //Gets the manifesting class + int nManifestingClass = GetManifestingClass(oManifester); + if(DEBUG) DoDebug("Manifesting Class #2: " + IntToString(nManifestingClass), oManifester); + nLevel = GetLevelByClass(nManifestingClass, oManifester); + // Add levels from +ML PrCs only for the first manifesting class + nLevel += GetPsionicPRCLevels(oManifester, nManifestingClass); + //nLevel += nManifestingClass == GetPrimaryPsionicClass(oManifester) ? GetPsionicPRCLevels(oManifester) : 0; + + // Psionic vestiges are tucked in here to override things. + // This assumes that there will never be a psion with this spell effect manifesting things + if (nManifestingClass == CLASS_TYPE_PSION && GetHasSpellEffect(VESTIGE_ARETE, oManifester) && !nMaxPowerLevel) + { + nLevel = GetLocalInt(oManifester, "AretePsion"); + nMaxPowerLevel = TRUE; + } + if (nManifestingClass == CLASS_TYPE_PSION && GetHasSpellEffect(VESTIGE_THETRIAD, oManifester) && !nMaxPowerLevel) + { + nLevel = GetLocalInt(oManifester, "TheTriadPsion"); + nMaxPowerLevel = TRUE; + } + if (nManifestingClass == CLASS_TYPE_PSION && GetHasSpellEffect(VESTIGE_ABYSM, oManifester) && !nMaxPowerLevel) + { + nLevel = GetLocalInt(oManifester, "AbysmPsion"); + nMaxPowerLevel = TRUE; + } + if(DEBUG) DoDebug("GetManifesterLevel Unspecific Class Manif Level: " + IntToString(nLevel), oManifester); + // This is for learning powers, we need to ignore some adjustments + if (nMaxPowerLevel) return nLevel; + + nLevel += PracticedManifesting(oManifester, nManifestingClass, nLevel); //gotta be the last one +// if(DEBUG) DoDebug("Level gotten via GetLevelByClass: " + IntToString(nLevel), oManifester); + } + + // If you have a primary psionic class and no manifester level yet, get levels based on that + if (GetPrimaryPsionicClass(oManifester) && nLevel == 0) + { + int nClass = GetPrimaryPsionicClass(oManifester); + nLevel = GetLevelByClass(nClass, oManifester); + nLevel += GetPsionicPRCLevels(oManifester, nClass); + nLevel += PracticedManifesting(oManifester, nClass, nLevel); //gotta be the last one + } + + // If everything else fails, you are not a manifester + if(nLevel == 0) + { + if(DEBUG) DoDebug("Failed to get manifester level for creature " + DebugObject2Str(oManifester) + ", using first class slot"); + //else WriteTimestampedLogEntry("Failed to get manifester level for creature " + DebugObject2Str(oManifester) + ", using first class slot"); + + return 0; + } + + + // The bonuses inside only apply to normal manifestation + if(!GetLocalInt(oManifester, PRC_IS_PSILIKE)) + { + //Adding wild surge + int nSurge = GetWildSurge(oManifester); + if (nSurge > 0) nLevel += nSurge; + + // Adding overchannel + int nOverchannel = GetLocalInt(oManifester, PRC_OVERCHANNEL); + if(nOverchannel > 0) nLevel += nOverchannel; + + // Adding Soul Manifester + nLevel += Soulcaster(oManifester, PRCGetSpellId()); + } + + nLevel += nAdjust; + + // This spam is technically no longer necessary once the manifester level getting mechanism has been confirmed to work + if(DEBUG) FloatingTextStringOnCreature("Manifester Level: " + IntToString(nLevel), oManifester, FALSE); + + return nLevel; +} + +int GetHighestManifesterLevel(object oCreature) +{ + int n = 0; + int nHighest; + int nTemp; + + while(n <= 8) + { + if(GetClassByPosition(n, oCreature) != CLASS_TYPE_INVALID) + { + nTemp = GetManifesterLevel(oCreature, GetClassByPosition(n, oCreature)); + + if(nTemp > nHighest) + nHighest = nTemp; + } + n++; + + } + + return nHighest; +} + +/* int GetHighestManifesterLevel(object oCreature) +{ + return PRCMax(PRCMax(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetManifesterLevel(oCreature, GetClassByPosition(1, oCreature)) : 0, + GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID ? GetManifesterLevel(oCreature, GetClassByPosition(2, oCreature)) : 0 + ), + GetClassByPosition(3, oCreature) != CLASS_TYPE_INVALID ? GetManifesterLevel(oCreature, GetClassByPosition(3, oCreature)) : 0 + ); +} */ + +int GetPowerLevel(object oManifester) +{ + return GetLocalInt(oManifester, PRC_POWER_LEVEL); +} + +int GetAbilityScoreOfClass(object oManifester, int nClass) +{ + return GetAbilityScore(oManifester, GetAbilityOfClass(nClass)); +} + +int GetManifestingClass(object oManifester = OBJECT_SELF) +{ + return GetLocalInt(oManifester, PRC_MANIFESTING_CLASS) - 1; +} + +int GetAbilityOfClass(int nClass) +{ + switch(nClass) + { + case CLASS_TYPE_DIAMOND_DRAGON: + case CLASS_TYPE_PSION: + case CLASS_TYPE_PSYCHIC_ROGUE: + return ABILITY_INTELLIGENCE; + case CLASS_TYPE_PSYWAR: + case CLASS_TYPE_FIST_OF_ZUOKEN: + case CLASS_TYPE_WARMIND: + return ABILITY_WISDOM; + case CLASS_TYPE_WILDER: + return ABILITY_CHARISMA; + } + + // If there's no class, it's racial. Use Charisma + return ABILITY_CHARISMA; +} + +int GetPrimaryPsionicClass(object oCreature = OBJECT_SELF) +{ + int nClass; + + if(GetPRCSwitch(PRC_CASTERLEVEL_FIRST_CLASS_RULE)) + { + int iPsionicPos = GetFirstPsionicClassPosition(oCreature); + if (!iPsionicPos) return CLASS_TYPE_INVALID; // no Psionic casting class + + nClass = GetClassByPosition(iPsionicPos, oCreature); + } + else + { + int nClassLvl; + int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8; + int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl; + + nClass1 = GetClassByPosition(1, oCreature); + nClass2 = GetClassByPosition(2, oCreature); + nClass3 = GetClassByPosition(3, oCreature); + nClass4 = GetClassByPosition(4, oCreature); + nClass5 = GetClassByPosition(5, oCreature); + nClass6 = GetClassByPosition(6, oCreature); + nClass7 = GetClassByPosition(7, oCreature); + nClass8 = GetClassByPosition(8, oCreature); + + if(GetIsPsionicClass(nClass1)) nClass1Lvl = GetLevelByClass(nClass1, oCreature); + if(GetIsPsionicClass(nClass2)) nClass2Lvl = GetLevelByClass(nClass2, oCreature); + if(GetIsPsionicClass(nClass3)) nClass3Lvl = GetLevelByClass(nClass3, oCreature); + if(GetIsPsionicClass(nClass4)) nClass4Lvl = GetLevelByClass(nClass4, oCreature); + if(GetIsPsionicClass(nClass5)) nClass5Lvl = GetLevelByClass(nClass5, oCreature); + if(GetIsPsionicClass(nClass6)) nClass6Lvl = GetLevelByClass(nClass6, oCreature); + if(GetIsPsionicClass(nClass7)) nClass7Lvl = GetLevelByClass(nClass7, oCreature); + if(GetIsPsionicClass(nClass8)) nClass8Lvl = GetLevelByClass(nClass8, oCreature); + + + nClass = nClass1; + nClassLvl = nClass1Lvl; + + if(nClass2Lvl > nClassLvl) + { + nClass = nClass2; + nClassLvl = nClass2Lvl; + } + if(nClass3Lvl > nClassLvl) + { + nClass = nClass3; + nClassLvl = nClass3Lvl; + } + if(nClass4Lvl > nClassLvl) + { + nClass = nClass4; + nClassLvl = nClass4Lvl; + } + if(nClass5Lvl > nClassLvl) + { + nClass = nClass5; + nClassLvl = nClass5Lvl; + } + if(nClass6Lvl > nClassLvl) + { + nClass = nClass6; + nClassLvl = nClass6Lvl; + } + if(nClass7Lvl > nClassLvl) + { + nClass = nClass7; + nClassLvl = nClass7Lvl; + } + if(nClass8Lvl > nClassLvl) + { + nClass = nClass8; + nClassLvl = nClass8Lvl; + } + + if(nClassLvl == 0) + nClass = CLASS_TYPE_INVALID; + } + + return nClass; +} + +int GetPsionicPRCLevels(object oCreature, int nClass = CLASS_TYPE_INVALID) +{ + int nLevel = 0; + + if(nClass == CLASS_TYPE_FIST_OF_ZUOKEN) + { + if((GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCreature) > 0 ) && GetHasFeat(FEAT_CEREBREMANCER_MANIFEST_FOZ, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCreature); + } + + if((GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) > 0 ) && GetHasFeat(FEAT_DIAMOND_DRAGON_MANIFEST_FOZ, oCreature)) + { + //:: No manifester level boost at level 1 and 6 for Diamond Dragon + nLevel += GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) - 1; + if(GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) >= 6) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) > 0 ) && GetHasFeat(FEAT_IRONMIND_MANIFEST_FOZ, oCreature)) + { + //:: No manifester level boost at level 1 and 6 for Iron Mind + nLevel += GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) - 1; + if(GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) >= 6) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCreature) > 0 ) && GetHasFeat(FEAT_PSYCHIC_THEURGE_MANIFEST_FOZ, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCreature); + } + + if((GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oCreature) > 0 ) && GetHasFeat(FEAT_SANCTIFIED_MIND_MANIFEST_FOZ, oCreature)) + { + //:: No manifester level boost at level 1 for Sanctified Mind + nLevel += GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oCreature) - 1; + } + + if((GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) > 0 ) && GetHasFeat(FEAT_SHADOWMIND_MANIFEST_FOZ, oCreature)) + { + //:: No manifester level boost at levels 2, 5 and 8 for Shadow Mind + nLevel += GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature); + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 2) nLevel -= 1; + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 5) nLevel -= 1; + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 8) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_SOULCASTER, oCreature) > 0 ) && GetHasFeat(FEAT_SOULCASTER_MANIFEST_FOZ, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCreature); + } + } + + else if(nClass == CLASS_TYPE_PSION) + { + if((GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCreature) > 0 ) && GetHasFeat(FEAT_CEREBREMANCER_MANIFEST_PSION, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCreature); + } + + if((GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) > 0 ) && GetHasFeat(FEAT_DIAMOND_DRAGON_MANIFEST_PSION, oCreature)) + { + //:: No manifester level boost at level 1 and 6 for Diamond Dragon + nLevel += GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) - 1; + if(GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) >= 6) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) > 0 ) && GetHasFeat(FEAT_IRONMIND_MANIFEST_PSION, oCreature)) + { + //:: No manifester level boost at level 1 and 6 for Iron Mind + nLevel += GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) - 1; + if(GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) >= 6) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCreature) > 0 ) && GetHasFeat(FEAT_PSYCHIC_THEURGE_MANIFEST_PSION, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCreature); + } + + if((GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oCreature) > 0 ) && GetHasFeat(FEAT_SANCTIFIED_MIND_MANIFEST_PSION, oCreature)) + { + //:: No manifester level boost at level 1 for Sanctified Mind + nLevel += GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oCreature) - 1; + } + + if((GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) > 0 ) && GetHasFeat(FEAT_SHADOWMIND_MANIFEST_PSION, oCreature)) + { + //:: No manifester level boost at levels 2, 5 and 8 for Shadow Mind + nLevel += GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature); + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 2) nLevel -= 1; + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 5) nLevel -= 1; + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 8) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_SOULCASTER, oCreature) > 0 ) && GetHasFeat(FEAT_SOULCASTER_MANIFEST_PSION, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCreature); + } + + if((GetLevelByClass(CLASS_TYPE_THRALLHERD, oCreature) > 0 ) && GetHasFeat(FEAT_THRALLHERD_MANIFEST_PSION, oCreature)) + { + //:: No manifester level boost at level 1 and 10 for Thrallherd + nLevel += GetLevelByClass(CLASS_TYPE_THRALLHERD, oCreature) - 1; + if(GetLevelByClass(CLASS_TYPE_THRALLHERD, oCreature) >= 10) nLevel -= 1; + } + } + + else if(nClass == CLASS_TYPE_PSYCHIC_ROGUE) + { + if((GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCreature) > 0 ) && GetHasFeat(FEAT_CEREBREMANCER_MANIFEST_PSYROUGE, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCreature); + } + + if((GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) > 0 ) && GetHasFeat(FEAT_DIAMOND_DRAGON_MANIFEST_PSYROUGE, oCreature)) + { + //:: No manifester level boost at level 1 and 6 for Diamond Dragon + nLevel += GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) - 1; + if(GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) >= 6) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) > 0 ) && GetHasFeat(FEAT_IRONMIND_MANIFEST_PSYROUGE, oCreature)) + { + //:: No manifester level boost at level 1 and 6 for Iron Mind + nLevel += GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) - 1; + if(GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) >= 6) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCreature) > 0 ) && GetHasFeat(FEAT_PSYCHIC_THEURGE_MANIFEST_PSYROUGE, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCreature); + } + + if((GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oCreature) > 0 ) && GetHasFeat(FEAT_SANCTIFIED_MIND_MANIFEST_PSYROUGE, oCreature)) + { + //:: No manifester level boost at level 1 for Sanctified Mind + nLevel += GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oCreature) - 1; + } + + if((GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) > 0 ) && GetHasFeat(FEAT_SHADOWMIND_MANIFEST_PSYROUGE, oCreature)) + { + //:: No manifester level boost at levels 2, 5 and 8 for Shadow Mind + nLevel += GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature); + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 2) nLevel -= 1; + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 5) nLevel -= 1; + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 8) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_SOULCASTER, oCreature) > 0 ) && GetHasFeat(FEAT_SOULCASTER_MANIFEST_PSYROUGE, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCreature); + } + } + + else if(nClass == CLASS_TYPE_PSYWAR) + { + if((GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCreature) > 0 ) && GetHasFeat(FEAT_CEREBREMANCER_MANIFEST_PSYWAR, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCreature); + } + + if((GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) > 0 ) && GetHasFeat(FEAT_DIAMOND_DRAGON_MANIFEST_PSYWAR, oCreature)) + { + //:: No manifester level boost at level 1 and 6 for Diamond Dragon + nLevel += GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) - 1; + if(GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) >= 6) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) > 0 ) && GetHasFeat(FEAT_IRONMIND_MANIFEST_PSYWAR, oCreature)) + { + //:: No manifester level boost at level 1 and 6 for Iron Mind + nLevel += GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) - 1; + if(GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) >= 6) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCreature) > 0 ) && GetHasFeat(FEAT_PSYCHIC_THEURGE_MANIFEST_PSYWAR, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCreature); + } + + if((GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oCreature) > 0 ) && GetHasFeat(FEAT_SANCTIFIED_MIND_MANIFEST_PSYWAR, oCreature)) + { + //:: No manifester level boost at level 1 for Sanctified Mind + nLevel += GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oCreature) - 1; + } + + if((GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) > 0 ) && GetHasFeat(FEAT_SHADOWMIND_MANIFEST_PSYWAR, oCreature)) + { + //:: No manifester level boost at levels 2, 5 and 8 for Shadow Mind + nLevel += GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature); + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 2) nLevel -= 1; + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 5) nLevel -= 1; + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 8) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_SOULCASTER, oCreature) > 0 ) && GetHasFeat(FEAT_SOULCASTER_MANIFEST_PSYWAR, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCreature); + } + } + + else if(nClass == CLASS_TYPE_WARMIND) + { + if((GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCreature) > 0 ) && GetHasFeat(FEAT_CEREBREMANCER_MANIFEST_WARMIND, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCreature); + } + + if((GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) > 0 ) && GetHasFeat(FEAT_DIAMOND_DRAGON_MANIFEST_WARMIND, oCreature)) + { + //:: No manifester level boost at level 1 and 6 for Diamond Dragon + nLevel += GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) - 1; + if(GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) >= 6) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) > 0 ) && GetHasFeat(FEAT_IRONMIND_MANIFEST_WARMIND, oCreature)) + { + //:: No manifester level boost at level 1 and 6 for Iron Mind + nLevel += GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) - 1; + if(GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) >= 6) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCreature) > 0 ) && GetHasFeat(FEAT_PSYCHIC_THEURGE_MANIFEST_WARMIND, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCreature); + } + + if((GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oCreature) > 0 ) && GetHasFeat(FEAT_SANCTIFIED_MIND_MANIFEST_WARMIND, oCreature)) + { + //:: No manifester level boost at level 1 for Sanctified Mind + nLevel += GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oCreature) - 1; + } + + if((GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) > 0 ) && GetHasFeat(FEAT_SHADOWMIND_MANIFEST_WARMIND, oCreature)) + { + //:: No manifester level boost at levels 2, 5 and 8 for Shadow Mind + nLevel += GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature); + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 2) nLevel -= 1; + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 5) nLevel -= 1; + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 8) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_SOULCASTER, oCreature) > 0 ) && GetHasFeat(FEAT_SOULCASTER_MANIFEST_WARMIND, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCreature); + } + } + + else if(nClass == CLASS_TYPE_WILDER) + { + if((GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCreature) > 0 ) && GetHasFeat(FEAT_CEREBREMANCER_MANIFEST_WILDER, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCreature); + } + + if((GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) > 0 ) && GetHasFeat(FEAT_DIAMOND_DRAGON_MANIFEST_WILDER, oCreature)) + { + //:: No manifester level boost at level 1 and 6 for Diamond Dragon + nLevel += GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) - 1; + if(GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) >= 6) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) > 0 ) && GetHasFeat(FEAT_IRONMIND_MANIFEST_WILDER, oCreature)) + { + //:: No manifester level boost at level 1 and 6 for Iron Mind + nLevel += GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) - 1; + if(GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) >= 6) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCreature) > 0 ) && GetHasFeat(FEAT_PSYCHIC_THEURGE_MANIFEST_WILDER, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCreature); + } + + if((GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oCreature) > 0 ) && GetHasFeat(FEAT_SANCTIFIED_MIND_MANIFEST_WILDER, oCreature)) + { + //:: No manifester level boost at level 1 for Sanctified Mind + nLevel += GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oCreature) - 1; + } + + if((GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) > 0 ) && GetHasFeat(FEAT_SHADOWMIND_MANIFEST_WILDER, oCreature)) + { + //:: No manifester level boost at levels 2, 5 and 8 for Shadow Mind + nLevel += GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature); + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 2) nLevel -= 1; + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 5) nLevel -= 1; + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 8) nLevel -= 1; + } + + if((GetLevelByClass(CLASS_TYPE_SOULCASTER, oCreature) > 0 ) && GetHasFeat(FEAT_SOULCASTER_MANIFEST_WILDER, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCreature); + } + } + + else { } + +/* // Cerebremancer and Psychic Theurge add manifester levels on each level + nLevel += GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCreature); + nLevel += GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCreature); + if (GetFirstPsionicClassPosition(oCreature)) nLevel += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCreature); + + // No manifester level boost at level 1 and 10 for Thrallherd + if(GetLevelByClass(CLASS_TYPE_THRALLHERD, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_THRALLHERD, oCreature) - 1; + if(GetLevelByClass(CLASS_TYPE_THRALLHERD, oCreature) >= 10) nLevel -= 1; + } + // No manifester level boost at levels 2, 5 and 8 for Shadow Mind + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature); + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 2) nLevel -= 1; + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 5) nLevel -= 1; + if(GetLevelByClass(CLASS_TYPE_SHADOWMIND, oCreature) >= 8) nLevel -= 1; + } + // No manifester level boost at level 1 and 6 for Iron Mind + if(GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) - 1; + if(GetLevelByClass(CLASS_TYPE_IRONMIND, oCreature) >= 6) nLevel -= 1; + } + // No manifester level boost at level 1 and 6 for Diamond Dragon + if(GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) - 1; + if(GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oCreature) >= 6) nLevel -= 1; + } + // No manifester level boost at level 1 for Sanctified Mind + if(GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oCreature)) + { + nLevel += GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oCreature) - 1; + } */ + + return nLevel; +} + +int GetFirstPsionicClassPosition(object oCreature = OBJECT_SELF) +{ + if (GetIsPsionicClass(GetClassByPosition(1, oCreature))) + return 1; + if (GetIsPsionicClass(GetClassByPosition(2, oCreature))) + return 2; + if (GetIsPsionicClass(GetClassByPosition(3, oCreature))) + return 3; + if (GetIsPsionicClass(GetClassByPosition(4, oCreature))) + return 4; + if (GetIsPsionicClass(GetClassByPosition(5, oCreature))) + return 5; + if (GetIsPsionicClass(GetClassByPosition(6, oCreature))) + return 6; + if (GetIsPsionicClass(GetClassByPosition(7, oCreature))) + return 7; + if (GetIsPsionicClass(GetClassByPosition(8, oCreature))) + return 8; + + return 0; +} + +int GetIsPsionicClass(int nClass) +{ + return (nClass==CLASS_TYPE_PSION + || nClass==CLASS_TYPE_PSYWAR + || nClass==CLASS_TYPE_PSYCHIC_ROGUE + || nClass==CLASS_TYPE_WILDER + || nClass==CLASS_TYPE_FIST_OF_ZUOKEN + || nClass==CLASS_TYPE_WARMIND + ); +} + +int GetWildSurge(object oManifester) +{ + int nWildSurge = GetLocalInt(oManifester, PRC_IS_PSILIKE) ? + 0 : // Wild Surge does not apply to psi-like abilities + GetLocalInt(oManifester, PRC_WILD_SURGE); + + if(DEBUG) DoDebug("GetWildSurge():\n" + + "oManifester = " + DebugObject2Str(oManifester) + "\n" + + "nWildSurge = " + IntToString(nWildSurge) + "\n" + ); + + return nWildSurge; +} + +int GetMaxPowerLevel(object oManifester) +{ + int nClass = GetPrimaryPsionicClass(oManifester); + string sFile = GetAMSKnownFileName(nClass); + int nLevel = GetHighestManifesterLevel(oManifester); + int nMax = StringToInt(Get2DACache(sFile, "MaxPowerLevel", nLevel)); + if (DEBUG) DoDebug("GetMaxPowerLevel is "+IntToString(nMax)); + return nMax; +} \ No newline at end of file diff --git a/src/include/psi_inc_enrgypow.nss b/src/include/psi_inc_enrgypow.nss new file mode 100644 index 0000000..ad1663c --- /dev/null +++ b/src/include/psi_inc_enrgypow.nss @@ -0,0 +1,150 @@ +//:://///////////////////////////////////////////// +//:: Psionics include: Energy powers +//:: psi_inc_enrgypow +//:://///////////////////////////////////////////// +/** @file + Defines function and structure for determining + energy-type dependent features of the Energy X + line of powers. + + + @author Ornedan + @date Created - 2005.12.12 + */ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Structures */ +////////////////////////////////////////////////// + +/** + * A structure for passing the Energy type modification + * data back to the power script. + */ +struct energy_adjustments{ + int nBonusPerDie; + int nSaveType; + int nDamageType; + int nDCMod; + int nPenMod; + int nVFX1; + int nVFX2; +}; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Determines the energy-dependent adjustments to damage per die, DC and + * manifester level in regards to Power Resistance. Also does VFX, saving + * throw type and damage type. + * + * @param nSpellID SpellID of the power being manifested + * @param nSpellID_Cold SpellID of the cold version of the power + * @param nSpellID_Elec SpellID of the electricity version of the power + * @param nSpellID_Fire SpellID of the fire version of the power + * @param nSpellID_Sonic SpellID of the sonic version of the power + * @param nVFX2_Cold Power specific VFX for cold + * @param nVFX2_Elec Power specific VFX for electricity + * @param nVFX2_Fire Power specific VFX for fire + * @param nVFX2_Sonic Power specific VFX for sonic + */ +struct energy_adjustments EvaluateEnergy(int nSpellID, int nSpellID_Cold, int nSpellID_Elec, int nSpellID_Fire, int nSpellID_Sonic, + int nVFX2_Cold = 0, int nVFX2_Elec = 0, int nVFX2_Fire = 0, int nVFX2_Sonic = 0); + + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "inc_utility" + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +struct energy_adjustments EvaluateEnergy(int nSpellID, int nSpellID_Cold, int nSpellID_Elec, int nSpellID_Fire, int nSpellID_Sonic, + int nVFX2_Cold = 0, int nVFX2_Elec = 0, int nVFX2_Fire = 0, int nVFX2_Sonic = 0) +{ + struct energy_adjustments eaRet; + + if(nSpellID == nSpellID_Cold) + { + eaRet.nBonusPerDie = 1; + eaRet.nSaveType = SAVING_THROW_TYPE_COLD; + eaRet.nDamageType = DAMAGE_TYPE_COLD; + eaRet.nDCMod = 0; + eaRet.nPenMod = 0; + eaRet.nVFX1 = VFX_IMP_FROST_S; + eaRet.nVFX2 = nVFX2_Cold; + } + else if(nSpellID == nSpellID_Elec) + { + eaRet.nBonusPerDie = 0; + eaRet.nSaveType = SAVING_THROW_TYPE_ELECTRICITY; + eaRet.nDamageType = DAMAGE_TYPE_ELECTRICAL; + eaRet.nDCMod = 2; + eaRet.nPenMod = 2; + eaRet.nVFX1 = VFX_IMP_LIGHTNING_S; + eaRet.nVFX2 = nVFX2_Elec; + } + else if(nSpellID == nSpellID_Fire) + { + eaRet.nBonusPerDie = 1; + eaRet.nSaveType = SAVING_THROW_TYPE_FIRE; + eaRet.nDamageType = DAMAGE_TYPE_FIRE; + eaRet.nDCMod = 0; + eaRet.nPenMod = 0; + eaRet.nVFX1 = VFX_IMP_FLAME_S; + eaRet.nVFX2 = nVFX2_Fire; + } + else if(nSpellID == nSpellID_Sonic) + { + eaRet.nBonusPerDie = -1; + eaRet.nSaveType = SAVING_THROW_TYPE_SONIC; + eaRet.nDamageType = DAMAGE_TYPE_SONIC; + eaRet.nDCMod = 0; + eaRet.nPenMod = 0; + eaRet.nVFX1 = VFX_IMP_SONIC; + eaRet.nVFX2 = nVFX2_Sonic; + } + else + { + string sErr = "EvaluateEnergy(): ERROR: SpellID does not match any of the given IDs\n" + + "Given ID: " + IntToString(nSpellID) + "\n" + + "Cold ID: " + IntToString(nSpellID_Cold) + "\n" + + "Electricity ID: " + IntToString(nSpellID_Elec) + "\n" + + "Fire ID: " + IntToString(nSpellID_Fire) + "\n" + + "Sonic ID: " + IntToString(nSpellID_Sonic) + "\n" + ; + if(DEBUG) DoDebug(sErr); + else WriteTimestampedLogEntry(sErr); + } + + //Energy Draconic Aura boosts + if (eaRet.nDamageType == DAMAGE_TYPE_FIRE && (GetLocalInt(OBJECT_SELF, "FireEnergyAura") > 0)) + { + eaRet.nDCMod += GetLocalInt(OBJECT_SELF, "FireEnergyAura"); + } + else if (eaRet.nDamageType == DAMAGE_TYPE_COLD && (GetLocalInt(OBJECT_SELF, "ColdEnergyAura") > 0)) + { + eaRet.nDCMod += GetLocalInt(OBJECT_SELF, "ColdEnergyAura"); + } + else if (eaRet.nDamageType == DAMAGE_TYPE_ELECTRICAL && (GetLocalInt(OBJECT_SELF, "ElecEnergyAura") > 0)) + { + eaRet.nDCMod += GetLocalInt(OBJECT_SELF, "ElecEnergyAura"); + } + else if (eaRet.nDamageType == DAMAGE_TYPE_ACID && (GetLocalInt(OBJECT_SELF, "AcidEnergyAura") > 0)) + { + eaRet.nDCMod += GetLocalInt(OBJECT_SELF, "AcidEnergyAura"); + } + + return eaRet; +} + +// Test main +//void main(){} diff --git a/src/include/psi_inc_metapsi.nss b/src/include/psi_inc_metapsi.nss new file mode 100644 index 0000000..c005f0c --- /dev/null +++ b/src/include/psi_inc_metapsi.nss @@ -0,0 +1,550 @@ +//:://///////////////////////////////////////////// +//:: Psionics include: Metapsionics +//:: psi_inc_metapsi +//:://///////////////////////////////////////////// +/** @file + Defines functions for handling metapsionics. + + @author Ornedan + @date Created - 2005.11.18 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +// Constants are provided via psi_inc_core + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Determines the metapsionics used in this manifestation of a power + * and the cost added by their use. + * + * @param manif The manifestation data related to this particular manifesation + * @param nMetaPsiFlags An integer containing a set of bitflags that determine + * which metapsionic powers may be used with the power being manifested + * + * @return The manifestation data, modified to account for the metapsionics + */ +struct manifestation EvaluateMetapsionics(struct manifestation manif, int nMetaPsiFlags); + +/** + * Calls UsePsionicFocus() on the manifester to pay for psionics focus + * expenditure caused by metapsionics use in the power being currently + * manifested. + * Also informs the manifester which metapsionics were actually used + * if the manifestation was successfull. + * + * @param manif The manifestation data related to this particular manifesation + * @return The manifestation data, modified to turn off those metapsionics + * the manifester could not pay focus for + */ +struct manifestation PayMetapsionicsFocuses(struct manifestation manif); + +/** + * Calculates a power's damage based on the given dice and metapsionics. + * + * @param nDieSize Size of the dice to use + * @param nNumberOfDice Amount of dice to roll + * @param manif The manifestation data related to this particular manifesation + * @param nBonus A bonus amount of damage to add into the total once + * @param nBonusPerDie A bonus amount of damage to add into the total for each die rolled + * @param bDoesHPDamage Whether the power deals hit point damage, or some other form of point damage + * @param bIsRayOrRangedTouch Whether the power's use involves a ranged touch attack roll or not + * @return The amount of damage the power should deal + */ +int MetaPsionicsDamage(struct manifestation manif, int nDieSize, int nNumberOfDice, int nBonus = 0, + int nBonusPerDie = 0, int bDoesHPDamage = FALSE, int bIsRayOrRangedTouch = FALSE); + +/** + * Accounts for the effects of Widen Power on the area size variables + * of a power, if it is active. + * + * @param fBase The base value of the power's area size variable + * @param manif The manifestation data related to this particular manifesation + * @return The base modified by whether Widen Power was active. + * If it was, the returned value is twice fBase, otherwise + * it's fBase + */ +float EvaluateWidenPower(struct manifestation manif, float fBase); + +/** + * Builds the list of a power's secondary targets for Chain Power. + * The list will be empty if Chain Power is not active. + * The list is stored in a local array on the manifester named + * PRC_CHAIN_POWER_ARRAY. It will be automatically deleted at the end of + * current script unless otherwise specified. + * + * NOTE: This only builds the list of targets, all effects have to be + * applied by the powerscript. + * + * @param manif The manifestation data related to this particular manifesation + * @param oPrimaryTarget The main target of the power + * @param bAutoDelete Whether the targets array should be automatically cleared via a + * DelayCommand(0.0f) call. + */ +void EvaluateChainPower(struct manifestation manif, object oPrimaryTarget, int bAutoDelete = TRUE); + +/** + * Determines the target the second ray fired by a split psionic ray strikes. + * The target is the one with the highest HD among eligible targets, ie, ones + * withing 30' of the main target. + * + * @param manif The manifestation data related to this particular manifesation + * @param oPrimaryTarget The target of the main ray + * + * @return The secondary target the power should affect. OBJECT_INVALID, if + * none were found, or if Split Psionic Ray was not active. + */ +object GetSplitPsionicRayTarget(struct manifestation manif, object oPrimaryTarget); + + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "psi_inc_core" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +/** Internal function. + * @param nCost The base cost of the metapsionic power to calculate the actual cost for + * @param nIMPsiRed The amount the PP cost might be reduced by due to Improved Metapsionics feats + * @param bUseSum Whether to account for Improved Metapsionics here or not + * @return Either nCost or the greater of nCost - nIMPsiRed and 1 + */ +int _GetMetaPsiPPCost(int nCost, int nIMPsiRed, int bUseSum) +{ + return nCost <= 2 ? // Metapsionic powers costing 2 or less are not affected by Improved Metapsionics + nCost : + bUseSum ? nCost : + // When calculating Improved Metapsionics separately, it cannot make the cost of a single metapsionic use go below 1 + PRCMax(nCost - nIMPsiRed, 1); +} + +/** Internal function. + * A void wrapper for array_delete. + * + * @param oManifester A creature that just manifested a power that determined + * it's targets using EvaluateChainPower + */ +void _DeleteChainArray(object oManifester) +{ + array_delete(oManifester, PRC_CHAIN_POWER_ARRAY); +} + +/** Internal function. + * Calculates whether adding a metapsi with the given cost would cause ML cap to be exceeded. + */ +int _GetWillExceedCap(struct manifestation manif, int nTotal, int nCost, int nIMPsiRed, int bUseSum) +{ + return (manif.nManifesterLevel + - (manif.nPPCost + + (bUseSum ? (_GetMetaPsiPPCost(nTotal + nCost, nIMPsiRed, FALSE)) : (nTotal + _GetMetaPsiPPCost(nCost, nIMPsiRed, FALSE))) + ) + ) + >= 0; +} + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +struct manifestation EvaluateMetapsionics(struct manifestation manif, int nMetaPsiFlags) +{ + // Total PP cost of metapsionics used + int nMetaPsiPP = 0; + // A debug variable to make a power ignore normal use constraints + int bIgnoreConstr = (DEBUG) ? GetLocalInt(manif.oManifester, PRC_DEBUG_IGNORE_CONSTRAINTS) : FALSE; + // A switch value that governs how Improved Metapsionics epic feat works + int bUseSum = GetPRCSwitch(PRC_PSI_IMP_METAPSIONICS_USE_SUM); + // A personal switch values that determines whether we should make an effort to attempt not to exceed PP cap + int bAvoidCap = GetPersistantLocalInt(manif.oManifester, PRC_PLAYER_SWITCH_AUTOMETAPSI) && !bIgnoreConstr; + // Epic feat Improved Metapsionics - 2 PP per. + int nImpMetapsiReduction, i = FEAT_IMPROVED_METAPSIONICS_1; + while(i <= FEAT_IMPROVED_METAPSIONICS_10 && GetHasFeat(i, manif.oManifester)) + { + nImpMetapsiReduction += 2; + i++; + } + + /* Calculate the added cost from metapsionics and set the use markers for the powers used */ + + // Quicken Power - special handling + if(GetLocalInt(manif.oManifester, PRC_POWER_IS_QUICKENED)) + { + // If Quicken could not have been used, the manifestation fails + if(!(manif.nPsiFocUsesRemain > 0 || bIgnoreConstr)) + manif.bCanManifest = FALSE; + + nMetaPsiPP += _GetMetaPsiPPCost(METAPSIONIC_QUICKEN_COST, nImpMetapsiReduction, bUseSum); + manif.bQuicken = TRUE; + manif.nPsiFocUsesRemain--; + + // Delete the marker var + DeleteLocalInt(manif.oManifester, PRC_POWER_IS_QUICKENED); + } + + if((nMetaPsiFlags & METAPSIONIC_CHAIN) && // The power allows this metapsionic to apply + GetLocalInt(manif.oManifester, METAPSIONIC_CHAIN_VAR) && // The manifester is using the metapsionic + (manif.nPsiFocUsesRemain > 0 || bIgnoreConstr) && // The manifester can pay the psionic focus expenditure + (!bAvoidCap || _GetWillExceedCap(manif, nMetaPsiPP, METAPSIONIC_CHAIN_COST, nImpMetapsiReduction, bUseSum)) // ML cap won't be exceeded. Or we don't care about exceeding it + ) + { + nMetaPsiPP += _GetMetaPsiPPCost(METAPSIONIC_CHAIN_COST, nImpMetapsiReduction, bUseSum); + manif.bChain = TRUE; + manif.nPsiFocUsesRemain--; + } + if((nMetaPsiFlags & METAPSIONIC_EMPOWER) && + GetLocalInt(manif.oManifester, METAPSIONIC_EMPOWER_VAR) && + (manif.nPsiFocUsesRemain > 0 || bIgnoreConstr) && + (!bAvoidCap || _GetWillExceedCap(manif, nMetaPsiPP, METAPSIONIC_EMPOWER_COST, nImpMetapsiReduction, bUseSum)) + ) + { + nMetaPsiPP += _GetMetaPsiPPCost(METAPSIONIC_EMPOWER_COST, nImpMetapsiReduction, bUseSum); + manif.bEmpower = TRUE; + manif.nPsiFocUsesRemain--; + } + if((nMetaPsiFlags & METAPSIONIC_EXTEND) && + GetLocalInt(manif.oManifester, METAPSIONIC_EXTEND_VAR) && + (manif.nPsiFocUsesRemain > 0 || bIgnoreConstr) && + (!bAvoidCap || _GetWillExceedCap(manif, nMetaPsiPP, METAPSIONIC_EXTEND_COST, nImpMetapsiReduction, bUseSum)) + ) + { + nMetaPsiPP += _GetMetaPsiPPCost(METAPSIONIC_EXTEND_COST, nImpMetapsiReduction, bUseSum); + manif.bExtend = TRUE; + manif.nPsiFocUsesRemain--; + } + if((nMetaPsiFlags & METAPSIONIC_MAXIMIZE) && + GetLocalInt(manif.oManifester, METAPSIONIC_MAXIMIZE_VAR) && + (manif.nPsiFocUsesRemain > 0 || bIgnoreConstr) && + (!bAvoidCap || _GetWillExceedCap(manif, nMetaPsiPP, METAPSIONIC_MAXIMIZE_COST, nImpMetapsiReduction, bUseSum)) + ) + { + nMetaPsiPP += _GetMetaPsiPPCost(METAPSIONIC_MAXIMIZE_COST, nImpMetapsiReduction, bUseSum); + manif.bMaximize = TRUE; + manif.nPsiFocUsesRemain--; + } + if((nMetaPsiFlags & METAPSIONIC_SPLIT) && + GetLocalInt(manif.oManifester, METAPSIONIC_SPLIT_VAR) && + (manif.nPsiFocUsesRemain > 0 || bIgnoreConstr) && + (!bAvoidCap || _GetWillExceedCap(manif, nMetaPsiPP, METAPSIONIC_SPLIT_COST, nImpMetapsiReduction, bUseSum)) + ) + { + nMetaPsiPP += _GetMetaPsiPPCost(METAPSIONIC_SPLIT_COST, nImpMetapsiReduction, bUseSum); + manif.bSplit = TRUE; + manif.nPsiFocUsesRemain--; + } + if((nMetaPsiFlags & METAPSIONIC_TWIN) && + GetLocalInt(manif.oManifester, METAPSIONIC_TWIN_VAR) && + (manif.nPsiFocUsesRemain > 0 || bIgnoreConstr) && + (!bAvoidCap || _GetWillExceedCap(manif, nMetaPsiPP, METAPSIONIC_TWIN_COST, nImpMetapsiReduction, bUseSum)) + ) + { + nMetaPsiPP += _GetMetaPsiPPCost(METAPSIONIC_TWIN_COST, nImpMetapsiReduction, bUseSum); + manif.bTwin = TRUE; + manif.nPsiFocUsesRemain--; + } + if((nMetaPsiFlags & METAPSIONIC_WIDEN) && + GetLocalInt(manif.oManifester, METAPSIONIC_WIDEN_VAR) && + (manif.nPsiFocUsesRemain > 0 || bIgnoreConstr) && + (!bAvoidCap || _GetWillExceedCap(manif, nMetaPsiPP, METAPSIONIC_WIDEN_COST, nImpMetapsiReduction, bUseSum)) + ) + { + nMetaPsiPP += _GetMetaPsiPPCost(METAPSIONIC_WIDEN_COST, nImpMetapsiReduction, bUseSum); + manif.bWiden = TRUE; + manif.nPsiFocUsesRemain--; + } + + // Add in the cost of the metapsionics uses + manif.nPPCost += _GetMetaPsiPPCost(nMetaPsiPP, nImpMetapsiReduction, !bUseSum); // A somewhat hacky use of the function, but eh, it works + + return manif; +} + + +struct manifestation PayMetapsionicsFocuses(struct manifestation manif) +{ + // A debug variable to make a power ignore normal use constraints + int bIgnoreConstraints = (DEBUG) ? GetLocalInt(manif.oManifester, PRC_DEBUG_IGNORE_CONSTRAINTS) : FALSE; + + // The string to send to the user + string sInform = ""; + + /* Check each of the metapsionics and pay focus for each active one. If for some reason the + * manifester cannot pay focus, deactivate the metapsionic. No PP refunds, though, since + * the system attempts to keep track of how many focuses the user has available + * and shouldn't allow them to exceed that count. It happening is therefore a bug. + */ + + // Quicken Power, special handling + if(manif.bQuicken) + { + if(!UsePsionicFocus(manif.oManifester) && !bIgnoreConstraints) + { + if(DEBUG) DoDebug(DebugObject2Str(manif.oManifester) + " unable to pay psionic focus for Quicken Power!"); + // If Quicken could not have been used, the manifestation fails + manif.bCanManifest = FALSE; + } + else + sInform += (sInform == "" ? "": ", ") + GetStringByStrRef(16826650); // "Quickened" + } + if(manif.bChain) + { + if(!UsePsionicFocus(manif.oManifester) && !bIgnoreConstraints) + { + if(DEBUG) DoDebug(DebugObject2Str(manif.oManifester) + " unable to pay psionic focus for Chain Power!"); + manif.bChain = FALSE; + } + else + sInform += (sInform == "" ? "": ", ") + GetStringByStrRef(16826631); // "Chained" + } + if(manif.bEmpower) + { + if(!UsePsionicFocus(manif.oManifester) && !bIgnoreConstraints) + { + if(DEBUG) DoDebug(DebugObject2Str(manif.oManifester) + " unable to pay psionic focus for Empower Power!"); + manif.bEmpower = FALSE; + } + else + sInform += (sInform == "" ? "": ", ") + GetStringByStrRef(16826632); // "Empowered" + } + if(manif.bExtend) + { + if(!UsePsionicFocus(manif.oManifester) && !bIgnoreConstraints) + { + if(DEBUG) DoDebug(DebugObject2Str(manif.oManifester) + " unable to pay psionic focus for Extend Power!"); + manif.bExtend = FALSE; + } + else + sInform += (sInform == "" ? "": ", ") + GetStringByStrRef(16826633); // "Extended" + } + if(manif.bMaximize) + { + if(!UsePsionicFocus(manif.oManifester) && !bIgnoreConstraints) + { + if(DEBUG) DoDebug(DebugObject2Str(manif.oManifester) + " unable to pay psionic focus for Maximize Power!"); + manif.bMaximize = FALSE; + } + else + sInform += (sInform == "" ? "": ", ") + GetStringByStrRef(16826634); // "Maximized" + } + if(manif.bSplit) + { + if(!UsePsionicFocus(manif.oManifester) && !bIgnoreConstraints) + { + if(DEBUG) DoDebug(DebugObject2Str(manif.oManifester) + " unable to pay psionic focus for Split Psionic Ray!"); + manif.bSplit = FALSE; + } + else + sInform += (sInform == "" ? "": ", ") + GetStringByStrRef(16826635); // "Split" + } + if(manif.bTwin) + { + if(!UsePsionicFocus(manif.oManifester) && !bIgnoreConstraints) + { + if(DEBUG) DoDebug(DebugObject2Str(manif.oManifester) + " unable to pay psionic focus for Twin Power!"); + manif.bTwin = FALSE; + } + else + sInform += (sInform == "" ? "": ", ") + GetStringByStrRef(16826636); // "Twinned" + } + if(manif.bWiden) + { + if(!UsePsionicFocus(manif.oManifester) && !bIgnoreConstraints) + { + if(DEBUG) DoDebug(DebugObject2Str(manif.oManifester) + " unable to pay psionic focus for Widen Power!"); + manif.bWiden = FALSE; + } + else + sInform += (sInform == "" ? "": ", ") + GetStringByStrRef(16826637); // "Widened" + } + + // Finalise and display the information string if the manifestation was successfull + if(manif.bCanManifest && sInform != "") + { + // Determine the index of the last comma + /// @todo This is badly structured, rewrite + string sTemp = sInform; + int nComma, + nTemp = FindSubString(sTemp, ", "); + if(nTemp != -1) + { + sTemp = GetSubString(sTemp, + nTemp + 2, // Crop off the comma and the following space + GetStringLength(sTemp) // I'm lazy + ); + nComma += nTemp +2; + while((nTemp = FindSubString(sTemp, ", ")) != -1) + { + nComma += nTemp + 2; + sTemp = GetSubString(sTemp, nTemp + 2, GetStringLength(sTemp)); + } + + // Replace the last comma with an "and" + sInform = GetStringLeft(sInform, nComma - 2) + + " " + GetStringByStrRef(16826638) + " " // " and " + + GetSubString(sInform, nComma, GetStringLength(sInform) - nComma); + } + + + // Finish the information string + sInform += " " + GetStringByStrRef(16826639); // "Power" + + FloatingTextStringOnCreature(sInform, manif.oManifester, FALSE); + } + + return manif; +} + + +int MetaPsionicsDamage(struct manifestation manif, int nDieSize, int nNumberOfDice, int nBonus = 0, + int nBonusPerDie = 0, int bDoesHPDamage = FALSE, int bIsRayOrRangedTouch = FALSE) +{ + int nBaseDamage = 0, + nBonusDamage = nBonus + (nNumberOfDice * nBonusPerDie); + + // Calculate the base damage + int i; + for (i = 0; i < nNumberOfDice; i++) + nBaseDamage += Random(nDieSize) + 1; + + + // Apply general modifying effects + if(bDoesHPDamage) + { + if(bIsRayOrRangedTouch && + GetHasFeat(FEAT_POWER_SPECIALIZATION, manif.oManifester)) + { + if(GetLocalInt(manif.oManifester, "PowerSpecializationActive") && UsePsionicFocus(manif.oManifester)) + nBonusDamage += GetAbilityModifier(GetAbilityOfClass(GetManifestingClass(manif.oManifester))); + else + nBonusDamage += 2; + } + if(GetHasSpellEffect(MELD_PSYCHIC_FOCUS, manif.oManifester)) nBonusDamage += GetEssentiaInvested(manif.oManifester, MELD_PSYCHIC_FOCUS) + 1; + } + + // Apply metapsionics + // Both empower & maximize + if(manif.bEmpower && manif.bMaximize) + nBaseDamage = nBaseDamage / 2 + nDieSize * nNumberOfDice; + // Just empower + else if(manif.bEmpower) + nBaseDamage += nBaseDamage / 2; + // Just maximize + else if(manif.bMaximize) + nBaseDamage = nDieSize * nNumberOfDice; + + + return nBaseDamage + nBonusDamage; +} + + +float EvaluateWidenPower(struct manifestation manif, float fBase) +{ + return manif.bWiden ? // Is Widen Power active + fBase * 2 : // Yes + fBase; // No +} + + +void EvaluateChainPower(struct manifestation manif, object oPrimaryTarget, int bAutoDelete = TRUE) +{ + // Delete the array if, for some reason, one exists already + if(array_exists(manif.oManifester, PRC_CHAIN_POWER_ARRAY)) + array_delete(manif.oManifester, PRC_CHAIN_POWER_ARRAY); + // Create the array + if(!array_create(manif.oManifester, PRC_CHAIN_POWER_ARRAY)) + if(DEBUG) DoDebug("EvaluateChainPower(): ERROR: Cannot create target array!\n" + + "manif = " + DebugManifestation2Str(manif) + "\n" + + "oPrimaryTarget = " + DebugObject2Str(oPrimaryTarget) + "\n" + + "bAutoDelete = " + DebugBool2String(bAutoDelete) + "\n" + ); + + // Add the primary target to the array + //array_set_object(manif.oManifester, PRC_CHAIN_POWER_ARRAY, 0, oPrimaryTarget); Bad idea, on a second though - Ornedan + + // Determine if Chain Power is active at all + if(manif.bChain) + { + // It is, determine amount of secondary targets and range to look for the over + int nMaxTargets = PRCMin(manif.nManifesterLevel, 20); // Chain Power maxes out at 20 secondary targets + float fRange = FeetToMeters(30.0f); + location lTarget = GetLocation(oPrimaryTarget); + object oSecondaryTarget; + + // Build the target list as a linked list + oSecondaryTarget = GetFirstObjectInShape(SHAPE_SPHERE, fRange, lTarget, TRUE, OBJECT_TYPE_CREATURE); + while(GetIsObjectValid(oSecondaryTarget)) + { + if(oSecondaryTarget != manif.oManifester && // Not the manifester + oSecondaryTarget != oPrimaryTarget && // Not the main target + spellsIsTarget(oSecondaryTarget, // Chain Power allows one to avoid hitting friendlies + SPELL_TARGET_SELECTIVEHOSTILE, // and we assume the manifester does so + manif.oManifester)) + { + AddToTargetList(oSecondaryTarget, manif.oManifester, INSERTION_BIAS_HD, TRUE); + }// end if - target is valid for this + + oSecondaryTarget = GetNextObjectInShape(SHAPE_SPHERE, fRange, lTarget, TRUE, OBJECT_TYPE_CREATURE); + }// end while - loop through all potential targets + + // Extract the linked list into the array + while(GetIsObjectValid(oSecondaryTarget = GetTargetListHead(manif.oManifester))) + array_set_object(manif.oManifester, PRC_CHAIN_POWER_ARRAY, + array_get_size(manif.oManifester, PRC_CHAIN_POWER_ARRAY), + oSecondaryTarget + ); + }// end if - is Chain Power active in this manifestation + + // Schedule array deletion if so specified + if(bAutoDelete) + DelayCommand(0.0f, _DeleteChainArray(manif.oManifester)); +} + +object GetSplitPsionicRayTarget(struct manifestation manif, object oPrimaryTarget) +{ + object oReturn = OBJECT_INVALID; + + // Determine if Split Psionic Ray is active at all + if(manif.bSplit) + { + // It is, determine amount of secondary targets and range to look for the over + float fRange = FeetToMeters(30.0f); + location lTarget = GetLocation(oPrimaryTarget); + object oPotentialTarget; + + // Build the target list as a linked list + oPotentialTarget = GetFirstObjectInShape(SHAPE_SPHERE, fRange, lTarget, TRUE, OBJECT_TYPE_CREATURE); + while(GetIsObjectValid(oPotentialTarget)) + { + if(oPotentialTarget != manif.oManifester && // Not the manifester + oPotentialTarget != oPrimaryTarget && // Not the main target + spellsIsTarget(oPotentialTarget, // Split Psionic Ray allows one to avoid hitting friendlies + SPELL_TARGET_SELECTIVEHOSTILE, // and we assume the manifester does so + manif.oManifester)) + { + AddToTargetList(oPotentialTarget, manif.oManifester, INSERTION_BIAS_HD, TRUE); + }// end if - target is valid for this + + oPotentialTarget = GetNextObjectInShape(SHAPE_SPHERE, fRange, lTarget, TRUE, OBJECT_TYPE_CREATURE); + }// end while - loop through all potential targets + + // The chosen target is the first in the list + oReturn = GetTargetListHead(manif.oManifester); + }// end if - is Split Psionic Ray active in this manifestation + + return oReturn; +} + +// Test main +//void main(){} diff --git a/src/include/psi_inc_onhit.nss b/src/include/psi_inc_onhit.nss new file mode 100644 index 0000000..56f68b2 --- /dev/null +++ b/src/include/psi_inc_onhit.nss @@ -0,0 +1,79 @@ +/* + Psionic OnHit. + This scripts holds all functions used for psionics on hit powers and abilities. + + Stratovarius +*/ + +// Include Files: +#include "psi_inc_psifunc" +// +#include "psi_inc_pwresist" +#include "prc_inc_combat" + + +// Swings at the target closest to the one hit +void SweepingStrike(object oCaster, object oTarget); + +// Shadow Mind 10th level ability. Manifests Cloud Mind +void MindStab(object oPC, object oTarget); + +// --------------- +// BEGIN FUNCTIONS +// --------------- + +void SweepingStrike(object oCaster, object oTarget) +{ + int nValidTarget = FALSE; + int nRandom = Random(9999); + location lTarget = GetLocation(oTarget); + string sRandom = IntToString(nRandom); + string sTimeStamp = IntToString(GetTimeHour()) + IntToString(GetTimeMinute()) + IntToString(GetTimeSecond()) + IntToString(GetTimeMillisecond()); + string sKillSwitch = "SweepingStrikeDelay" + ObjectToString(oCaster) + sRandom + sTimeStamp; + // Use the function to get the closest creature as a target + object oAreaTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, lTarget, TRUE, OBJECT_TYPE_CREATURE); + while(GetIsObjectValid(oAreaTarget) && !nValidTarget && !GetLocalInt(oCaster, sKillSwitch) && !GetLocalInt(oTarget, "SweepingStrikeTarget")) + { + // Don't hit yourself + // Make sure the target is both next to the one struck and within melee range of the caster + // Don't hit the one already struck + if(oAreaTarget != oCaster && + GetIsInMeleeRange(oAreaTarget, oCaster) && + GetIsInMeleeRange(oAreaTarget, oTarget) && + GetIsReactionTypeHostile(oAreaTarget, oCaster) && + !GetLocalInt(oTarget, "SweepingStrikeTarget") && //Redundant with while conditionals, but what the heck + oAreaTarget != oTarget) + { + // Perform the Attack + effect eVis = EffectVisualEffect(VFX_IMP_STUN); + object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCaster); + SetLocalInt(oAreaTarget, "SweepingStrikeTarget", TRUE); + DelayCommand(0.2, PerformAttack(oAreaTarget, oCaster, eVis, 0.0, 0, 0, GetWeaponDamageType(oWeap), "Sweeping Strike Hit", "Sweeping Strike Miss")); + if(DEBUG) DoDebug("psi_onhit: Sweeping Strike Loop Running"); + DelayCommand(1.0, DeleteLocalInt(oAreaTarget, "SweepingStrikeTarget")); + // End the loop, and prevent the death attack + SetLocalInt(oCaster, sKillSwitch, TRUE); + nValidTarget = TRUE; //This and the previous line now do the same thing I think + } + + //Select the next target within the spell shape. + oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, lTarget, TRUE, OBJECT_TYPE_CREATURE); + }// end while - Target loop + DelayCommand(1.0, DeleteLocalInt(oCaster, sKillSwitch)); +} + +void MindStab(object oPC, object oTarget) +{ + SetLocalInt(oPC, "ShadowCloudMind", TRUE); + SetLocalObject(oPC, "PsionicTarget", oTarget); + FloatingTextStringOnCreature("Mind Stab triggered", oPC, FALSE); + SetLocalInt(oPC, "MindStabDur", TRUE); + int nClass = GetPrimaryPsionicClass(oPC); + UsePower(POWER_CLOUD_MIND, nClass); + // Trying this for now + //ActionCastSpell(POWER_CLOUD_MIND); + DelayCommand(1.0, DeleteLocalInt(oPC, "ShadowCloudMind")); + DelayCommand(1.0, DeleteLocalObject(oPC, "PsionicTarget")); + DeleteLocalInt(oPC, "MindStabDur"); + //DelayCommand(0.33, AssignCommand(oPC, ActionAttack(oTarget))); +} \ No newline at end of file diff --git a/src/include/psi_inc_powknown.nss b/src/include/psi_inc_powknown.nss new file mode 100644 index 0000000..51e304f --- /dev/null +++ b/src/include/psi_inc_powknown.nss @@ -0,0 +1,718 @@ +//:://///////////////////////////////////////////// +//:: Psionics include: Powers known +//:: psi_inc_powknown +//:://///////////////////////////////////////////// +/** @file + Defines functions for adding & removing + powers known. + + Data stored: + + - For each power list + -- Total number of powers known + -- A modifier value to maximum powers known on this list to account for stuff like + Apopsi, Expanded Knowledge and Psychic Chirurgery that add or remove powers + -- An array related to powers the knowledge of which is not dependent on character level + --- Each array entry specifies the spells.2da row of the known power's class-specific entry + -- For each character level on which powers have been gained from this list + --- An array of powers gained on this level + ---- Each array entry specifies the spells.2da row of the known power's class-specific entry + + @author Ornedan + @date Created - 2006.01.06 + @date Modified - 2006.04.21 + Changed the stored value from cls_psipw_*.2da row to spells.2da row of the + class-specific entry because the adding policy to cls_psipw_*.2da means that the rows + after the added entry are moved. Which would break compatibility with old characters. + On the other hand, if the spells.2da entries are moved, the result would likely be a + backwards-compatibility loss anyway. +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +// Constants are provided via psi_inc_core + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Gives the creature the control feats for the given power and marks the power + * in a powers known array. + * If the power's data is already stored in one of the powers known arrays for + * the list or adding the power's data to the array fails, the function aborts. + * + * @param oCreature The creature to gain the power + * @param nList The list the power comes from. One of POWER_LIST_* + * @param n2daRow The 2da row in the lists's 2da file that specifies the power. + * @param bLevelDependent If this is TRUE, the power is tied to a certain level and can + * be lost via level loss. If FALSE, the power is not dependent + * of a level and cannot be lost via level loss. + * @param nLevelToTieTo If bLevelDependent is TRUE, this specifies the level the power + * is gained on. Otherwise, it's ignored. + * The default value (-1) means that the current level of oCreature + * will be used. + * + * @return TRUE if the power was successfully stored and control feats added. + * FALSE otherwise. + */ +int AddPowerKnown(object oCreature, int nList, int n2daRow, int bLevelDependent = FALSE, int nLevelToTieTo = -1, int nExpandedKnowledge = 0); + +/** + * + */ +//int RemoveSpecificPowerKnown(object oCreature, int nList, int n2daRow); + +/** + * Removes all powers gained from each list on the given level. + * + * @param oCreature The creature whose powers to remove + * @param nLevel The level to clear + */ +void RemovePowersKnownOnLevel(object oCreature, int nLevel); + +/** + * Gets the value of the powers known modifier, which is a value that is added + * to the 2da-specified maximum powers known to determine the actual maximum. + * + * @param oCreature The creature whose modifier to get + * @param nList The list the maximum powers known from which the modifier + * modifies. One of POWER_LIST_* + */ +int GetKnownPowersModifier(object oCreature, int nList); + +/** + * Sets the value of the powers known modifier, which is a value that is added + * to the 2da-specified maximum powers known to determine the actual maximum. + * + * @param oCreature The creature whose modifier to set + * @param nList The list the maximum powers known from which the modifier + * modifies. One of POWER_LIST_* + */ +void SetKnownPowersModifier(object oCreature, int nList, int nNewValue); + +/** + * Gets the number of powers a character character possesses from a + * specific list. + * + * @param oCreature The creature whose powers to check + * @param nList The list to check. One of POWER_LIST_* + * @return The number of powers known oCreature has from nList + */ +int GetPowerCount(object oCreature, int nList); + +/** + * Gets the maximum number of powers a character may posses from a given list + * at this time. Calculated based on class levels, feats and a misceallenous + * modifier. + * + * @param oCreature Character to determine maximum powers for + * @param nList POWER_LIST_* of the list to determine maximum powers for + * @return Maximum number of powers that oCreature may know from the given list. + */ +int GetMaxPowerCount(object oCreature, int nList); + +/** + * Determines whether a character has a given power, gained via some power list. + * Psi-like abilities do not count. + * + * @param nPower POWER_* of the power to test + * @param oCreature Character to test for the possession of the power + * @return TRUE if the character has the power, FALSE otherwise + */ +int GetHasPower(int nPower, object oCreature = OBJECT_SELF); + +/** + * Converts a CLASS_TYPE_* constant to a corresponding POWER_LIST_* constant. + * Special: CLASS_TYPE_INVALID corresponds to POWER_LIST_EXP_KNOWLEDGE. + * + * @param nClassType CLASS_TYPE_* to determine POWER_LIST_* for + * @return POWER_LIST_* constant for nClassType. 0 if there is no + * power list for the given CLASS_TYPE_* + */ +//int ClassTypeToPowerList(int nClassType); + +/** + * Converts a POWER_LIST_* constant to a corresponding CLASS_TYPE_* constant. + * Special: POWER_LIST_EXP_KNOWLEDGE corresponds to CLASS_TYPE_INVALID. + * + * @param nPowerList POWER_LIST_* to determine CLASS_TYPE_* for + * @return CLASS_TYPE_* constant for nPowerList. 0 if there is no + * class type for the given POWER_LIST_* + */ +//int PowerListToClassType(int nPowerList); + + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "psi_inc_core" +//#include "prc_inc_spells" // Access to lookup and 2da + + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +void _RecurseRemoveArray(object oCreature, string sArrayName, string sPowerFile, int nArraySize, int nCurIndex) +{ + if(DEBUG) DoDebug("_RecurseRemoveArray():\n" + + "oCreature = " + DebugObject2Str(oCreature) + "\n" + + "sArrayName = '" + sArrayName + "'\n" + + "sPowerFile = '" + sPowerFile + "'\n" + + "nArraySize = " + IntToString(nArraySize) + "\n" + + "nCurIndex = " + IntToString(nCurIndex) + "\n" + ); + + // Determine whether we've already parsed the whole array or not + if(nCurIndex >= nArraySize) + { + if(DEBUG) DoDebug("_RecurseRemoveArray(): Running itemproperty removal loop."); + // Loop over itemproperties on the skin and remove each match + object oSkin = GetPCSkin(oCreature); + itemproperty ipTest = GetFirstItemProperty(oSkin); + while(GetIsItemPropertyValid(ipTest)) + { + // Check if the itemproperty is a bonus feat that has been marked for removal + if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_BONUS_FEAT && + GetLocalInt(oCreature, "PRC_PowerFeatRemovalMarker_" + IntToString(GetItemPropertySubType(ipTest))) + ) + { + if(DEBUG) DoDebug("_RecurseRemoveArray(): Removing bonus feat itemproperty:\n" + DebugIProp2Str(ipTest)); + // If so, remove it + RemoveItemProperty(oSkin, ipTest); + } + + ipTest = GetNextItemProperty(oSkin); + } + } + // Still parsing the array + else + { + // Set the marker + string sName = "PRC_PowerFeatRemovalMarker_" + Get2DACache(sPowerFile, "IPFeatID", + GetPowerfileIndexFromSpellID(persistant_array_get_int(oCreature, sArrayName, nCurIndex)) + ); + if(DEBUG) DoDebug("_RecurseRemoveArray(): Recursing through array, marker set:\n" + sName); + + SetLocalInt(oCreature, sName, TRUE); + // Recurse to next array index + _RecurseRemoveArray(oCreature, sArrayName, sPowerFile, nArraySize, nCurIndex + 1); + // After returning, delete the local + DeleteLocalInt(oCreature, sName); + } +} + +void _RemovePowerArray(object oCreature, int nList, int nLevel) +{ + if(DEBUG) DoDebug("_RemovePowerArray():\n" + + "oCreature = " + DebugObject2Str(oCreature) + "\n" + + "nList = " + IntToString(nList) + "\n" + ); + + string sBase = _POWER_LIST_NAME_BASE + IntToString(nList); + string sArray = sBase + _POWER_LIST_LEVEL_ARRAY + IntToString(nLevel); + int nSize = persistant_array_get_size(oCreature, sArray); + + // Reduce the total by the array size + SetPersistantLocalInt(oCreature, sBase + _POWER_LIST_TOTAL_KNOWN, + GetPersistantLocalInt(oCreature, sBase + _POWER_LIST_TOTAL_KNOWN) - nSize + ); + + // Remove each power in the array + _RecurseRemoveArray(oCreature, sArray, GetAMSDefinitionFileName(/*PowerListToClassType(*/nList/*)*/), nSize, 0); + + // Remove the array itself + persistant_array_delete(oCreature, sArray); +} + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int AddPowerKnown(object oCreature, int nList, int n2daRow, int bLevelDependent = FALSE, int nLevelToTieTo = -1, int nExpandedKnowledge = 0) +{ + string sBase = nExpandedKnowledge < 0 ? _POWER_LIST_NAME_BASE + IntToString(nExpandedKnowledge): + _POWER_LIST_NAME_BASE + IntToString(nList); + string sArray = sBase; + string sPowerFile = GetAMSDefinitionFileName(/*PowerListToClassType(*/nList/*)*/); + string sTestArray; + int i, j, nSize, bReturn; + + // Get the spells.2da row corresponding to the cls_psipw_*.2da row + int nSpells2daRow = StringToInt(Get2DACache(sPowerFile, "SpellID", n2daRow)); + + // Determine the array name. + if(bLevelDependent) + { + // If no level is specified, default to the creature's current level + if(nLevelToTieTo == -1) + nLevelToTieTo = GetHitDice(oCreature); + + sArray += _POWER_LIST_LEVEL_ARRAY + IntToString(nLevelToTieTo); + } + else + { + sArray += _POWER_LIST_GENERAL_ARRAY; + } + + // Make sure the power isn't already in an array. If it is, abort and return FALSE + // Loop over each level array and check that it isn't there. + for(i = 1; i <= GetHitDice(oCreature); i++) + { + sTestArray = sBase + _POWER_LIST_LEVEL_ARRAY + IntToString(i); + if(persistant_array_exists(oCreature, sTestArray)) + { + nSize = persistant_array_get_size(oCreature, sTestArray); + for(j = 0; j < nSize; j++) + if(persistant_array_get_int(oCreature, sArray, j) == nSpells2daRow) + return FALSE; + } + } + // Check the non-level-dependent array + sTestArray = sBase + _POWER_LIST_GENERAL_ARRAY; + if(persistant_array_exists(oCreature, sTestArray)) + { + nSize = persistant_array_get_size(oCreature, sTestArray); + for(j = 0; j < nSize; j++) + if(persistant_array_get_int(oCreature, sArray, j) == nSpells2daRow) + return FALSE; + } + + // All checks are made, now start adding the new power + // Create the array if it doesn't exist yet + if(!persistant_array_exists(oCreature, sArray)) + persistant_array_create(oCreature, sArray); + + // Store the power in the array + if(persistant_array_set_int(oCreature, sArray, persistant_array_get_size(oCreature, sArray), nSpells2daRow) != SDL_SUCCESS) + { + if(DEBUG) DoDebug("psi_inc_powknown: AddPowerKnown(): ERROR: Unable to add power to known array\n" + + "oCreature = " + DebugObject2Str(oCreature) + "\n" + + "nList = " + IntToString(nList) + "\n" + + "n2daRow = " + IntToString(n2daRow) + "\n" + + "bLevelDependent = " + DebugBool2String(bLevelDependent) + "\n" + + "nLevelToTieTo = " + IntToString(nLevelToTieTo) + "\n" + + "nSpells2daRow = " + IntToString(nSpells2daRow) + "\n" + + "nExpandedKnowledge = " + IntToString(nExpandedKnowledge) + "\n" + ); + return FALSE; + } + + // Increment powers known total + SetPersistantLocalInt(oCreature, sBase + _POWER_LIST_TOTAL_KNOWN, + GetPersistantLocalInt(oCreature, sBase + _POWER_LIST_TOTAL_KNOWN) + 1 + ); + + // Give the power's control feats + object oSkin = GetPCSkin(oCreature); + string sPowerFeatIP = Get2DACache(sPowerFile, "IPFeatID", n2daRow); + itemproperty ipFeat = PRCItemPropertyBonusFeat(StringToInt(sPowerFeatIP)); + IPSafeAddItemProperty(oSkin, ipFeat, 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + // Second power feat, if any + sPowerFeatIP = Get2DACache(sPowerFile, "IPFeatID2", n2daRow); + if(sPowerFeatIP != "") + { + ipFeat = PRCItemPropertyBonusFeat(StringToInt(sPowerFeatIP)); + IPSafeAddItemProperty(oSkin, ipFeat, 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + } + + return TRUE; +} + +/** @todo If ever required +int RemoveSpecificPowerKnown(object oCreature, int nList, int n2daRow) +{ +} +*/ +void RemovePowersKnownOnLevel(object oCreature, int nLevel) +{ + if(DEBUG) DoDebug("psi_inc_powknown: RemovePowersKnownOnLevel():\n" + + "oCreature = " + DebugObject2Str(oCreature) + "\n" + + "nLevel = " + IntToString(nLevel) + "\n" + ); + + string sPostFix = _POWER_LIST_LEVEL_ARRAY + IntToString(nLevel); + // For each power list, determine if an array exists for this level. + if(persistant_array_exists(oCreature, _POWER_LIST_NAME_BASE + IntToString(POWER_LIST_PSION) + sPostFix)) + // If one does exist, clear it + _RemovePowerArray(oCreature, POWER_LIST_PSION, nLevel); + + if(persistant_array_exists(oCreature, _POWER_LIST_NAME_BASE + IntToString(POWER_LIST_WILDER) + sPostFix)) + _RemovePowerArray(oCreature, POWER_LIST_WILDER, nLevel); + + if(persistant_array_exists(oCreature, _POWER_LIST_NAME_BASE + IntToString(POWER_LIST_PSYWAR) + sPostFix)) + _RemovePowerArray(oCreature, POWER_LIST_PSYWAR, nLevel); + + if(persistant_array_exists(oCreature, _POWER_LIST_NAME_BASE + IntToString(POWER_LIST_PSYROG) + sPostFix)) + _RemovePowerArray(oCreature, POWER_LIST_PSYROG, nLevel); + + if(persistant_array_exists(oCreature, _POWER_LIST_NAME_BASE + IntToString(POWER_LIST_FIST_OF_ZUOKEN) + sPostFix)) + _RemovePowerArray(oCreature, POWER_LIST_FIST_OF_ZUOKEN, nLevel); + + if(persistant_array_exists(oCreature, _POWER_LIST_NAME_BASE + IntToString(POWER_LIST_WARMIND) + sPostFix)) + _RemovePowerArray(oCreature, POWER_LIST_WARMIND, nLevel); + + if(persistant_array_exists(oCreature, _POWER_LIST_NAME_BASE + IntToString(POWER_LIST_EXP_KNOWLEDGE) + sPostFix)) + _RemovePowerArray(oCreature, POWER_LIST_EXP_KNOWLEDGE, nLevel); + + if(persistant_array_exists(oCreature, _POWER_LIST_NAME_BASE + IntToString(POWER_LIST_EPIC_EXP_KNOWLEDGE) + sPostFix)) + _RemovePowerArray(oCreature, POWER_LIST_EPIC_EXP_KNOWLEDGE, nLevel); + + if(persistant_array_exists(oCreature, _POWER_LIST_NAME_BASE + IntToString(POWER_LIST_MISC) + sPostFix)) + _RemovePowerArray(oCreature, POWER_LIST_MISC, nLevel); +} + +int GetKnownPowersModifier(object oCreature, int nList) +{ + return GetPersistantLocalInt(oCreature, _POWER_LIST_NAME_BASE + IntToString(nList) + _POWER_LIST_MODIFIER); +} + +void SetKnownPowersModifier(object oCreature, int nList, int nNewValue) +{ + SetPersistantLocalInt(oCreature, _POWER_LIST_NAME_BASE + IntToString(nList) + _POWER_LIST_MODIFIER, nNewValue); +} + +int GetPowerCount(object oCreature, int nList) +{ + return GetPersistantLocalInt(oCreature, _POWER_LIST_NAME_BASE + IntToString(nList) + _POWER_LIST_TOTAL_KNOWN); +} + +int GetMaxPowerCount(object oCreature, int nList) +{ + int nMaxPowers = 0; + + switch(nList) + { + case POWER_LIST_PSION:{ + // Determine base powers known + int nLevel = GetLevelByClass(CLASS_TYPE_PSION, oCreature); + nLevel += GetPsionicPRCLevels(oCreature, CLASS_TYPE_PSION); + //nLevel += GetPrimaryPsionicClass(oCreature) == CLASS_TYPE_PSION ? GetPsionicPRCLevels(oCreature) : 0; + if(nLevel == 0) + break; + nMaxPowers = StringToInt(Get2DACache(GetAMSKnownFileName(CLASS_TYPE_PSION), "PowersKnown", nLevel - 1)); + + // Calculate feats + // Apply the epic feat Power Knowledge - +2 powers known per + int nFeat = FEAT_POWER_KNOWLEDGE_PSION_1; + while(nFeat <= FEAT_POWER_KNOWLEDGE_PSION_10 && + GetHasFeat(nFeat, oCreature)) + { + nMaxPowers += 2; + nFeat++; + } + + // Add in the custom modifier + nMaxPowers += GetKnownPowersModifier(oCreature, nList); + break; + } + case POWER_LIST_WILDER:{ + // Determine base powers known + int nLevel = GetLevelByClass(CLASS_TYPE_WILDER, oCreature); + nLevel += GetPsionicPRCLevels(oCreature, CLASS_TYPE_WILDER); + //nLevel += GetPrimaryPsionicClass(oCreature) == CLASS_TYPE_WILDER ? GetPsionicPRCLevels(oCreature) : 0; + if(nLevel == 0) + break; + nMaxPowers = StringToInt(Get2DACache(GetAMSKnownFileName(CLASS_TYPE_WILDER), "PowersKnown", nLevel - 1)); + + // Calculate feats + // Apply the epic feat Power Knowledge - +2 powers known per + int nFeat = FEAT_POWER_KNOWLEDGE_WILDER_1; + while(nFeat <= FEAT_POWER_KNOWLEDGE_WILDER_10 && + GetHasFeat(nFeat, oCreature)) + { + nMaxPowers += 2; + nFeat++; + } + + // Add in the custom modifier + nMaxPowers += GetKnownPowersModifier(oCreature, nList); + break; + } + case POWER_LIST_PSYWAR:{ + // Determine base powers known + int nLevel = GetLevelByClass(CLASS_TYPE_PSYWAR, oCreature); + nLevel += GetPsionicPRCLevels(oCreature, CLASS_TYPE_PSYWAR); + //nLevel += GetPrimaryPsionicClass(oCreature) == CLASS_TYPE_PSYWAR ? GetPsionicPRCLevels(oCreature) : 0; + if(nLevel == 0) + break; + nMaxPowers = StringToInt(Get2DACache(GetAMSKnownFileName(CLASS_TYPE_PSYWAR), "PowersKnown", nLevel - 1)); + + // Calculate feats + // Apply the epic feat Power Knowledge - +2 powers known per + int nFeat = FEAT_POWER_KNOWLEDGE_PSYWAR_1; + while(nFeat <= FEAT_POWER_KNOWLEDGE_PSYWAR_10 && + GetHasFeat(nFeat, oCreature)) + { + nMaxPowers += 2; + nFeat++; + } + + // Add in the custom modifier + nMaxPowers += GetKnownPowersModifier(oCreature, nList); + break; + } + case POWER_LIST_PSYROG:{ + // Determine base powers known + int nLevel = GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oCreature); + nLevel += GetPsionicPRCLevels(oCreature, CLASS_TYPE_PSYCHIC_ROGUE); + //nLevel += GetPrimaryPsionicClass(oCreature) == CLASS_TYPE_PSYCHIC_ROGUE ? GetPsionicPRCLevels(oCreature) : 0; + if(nLevel == 0) + break; + nMaxPowers = StringToInt(Get2DACache(GetAMSKnownFileName(CLASS_TYPE_PSYCHIC_ROGUE), "PowersKnown", nLevel - 1)); + + // Calculate feats + // Apply the epic feat Power Knowledge - +2 powers known per + int nFeat = FEAT_POWER_KNOWLEDGE_PSYROG_1; + while(nFeat <= FEAT_POWER_KNOWLEDGE_PSYROG_10 && + GetHasFeat(nFeat, oCreature)) + { + nMaxPowers += 2; + nFeat++; + } + + // Add in the custom modifier + nMaxPowers += GetKnownPowersModifier(oCreature, nList); + break; + } + case POWER_LIST_FIST_OF_ZUOKEN:{ + // Determine base powers known + int nLevel = GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oCreature); + nLevel += GetPsionicPRCLevels(oCreature, CLASS_TYPE_FIST_OF_ZUOKEN); + //nLevel += GetPrimaryPsionicClass(oCreature) == CLASS_TYPE_FIST_OF_ZUOKEN ? GetPsionicPRCLevels(oCreature) : 0; + if(nLevel == 0) + break; + nMaxPowers = StringToInt(Get2DACache(GetAMSKnownFileName(CLASS_TYPE_FIST_OF_ZUOKEN), "PowersKnown", nLevel - 1)); + + // Calculate feats + // Apply the epic feat Power Knowledge - +2 powers known per + int nFeat = FEAT_POWER_KNOWLEDGE_FIST_OF_ZUOKEN_1; + while(nFeat <= FEAT_POWER_KNOWLEDGE_FIST_OF_ZUOKEN_10 && + GetHasFeat(nFeat, oCreature)) + { + nMaxPowers += 2; + nFeat++; + } + + // Add in the custom modifier + nMaxPowers += GetKnownPowersModifier(oCreature, nList); + break; + } + case POWER_LIST_WARMIND:{ + // Determine base powers known + int nLevel = GetLevelByClass(CLASS_TYPE_WARMIND, oCreature); + nLevel += GetPsionicPRCLevels(oCreature, CLASS_TYPE_WARMIND); + //nLevel += GetPrimaryPsionicClass(oCreature) == CLASS_TYPE_WARMIND ? GetPsionicPRCLevels(oCreature) : 0; + if(nLevel == 0) + break; + nMaxPowers = StringToInt(Get2DACache(GetAMSKnownFileName(CLASS_TYPE_WARMIND), "PowersKnown", nLevel - 1)); + + // Calculate feats + // Apply the epic feat Power Knowledge - +2 powers known per + int nFeat = FEAT_POWER_KNOWLEDGE_WARMIND_1; + while(nFeat <= FEAT_POWER_KNOWLEDGE_WARMIND_10 && + GetHasFeat(nFeat, oCreature)) + { + nMaxPowers += 2; + nFeat++; + } + + // Add in the custom modifier + nMaxPowers += GetKnownPowersModifier(oCreature, nList); + break; + } + case POWER_LIST_EXP_KNOWLEDGE:{ + // Calculate feats + // Apply the feat Expanded Knowledge - +1 powers known per feat + int nFeat = FEAT_EXPANDED_KNOWLEDGE_1; + while(nFeat <= FEAT_EXPANDED_KNOWLEDGE_10 && + GetHasFeat(nFeat, oCreature)) + { + nMaxPowers += 1; + nFeat++; + } + + // Add in the custom modifier + nMaxPowers += GetKnownPowersModifier(oCreature, nList); + break; + } + case POWER_LIST_EPIC_EXP_KNOWLEDGE:{ + int nFeat = FEAT_EPIC_EXPANDED_KNOWLEDGE_1; + while(nFeat <= FEAT_EPIC_EXPANDED_KNOWLEDGE_10 && + GetHasFeat(nFeat, oCreature)) + { + nMaxPowers += 1; + nFeat++; + } + + // Add in the custom modifier + nMaxPowers += GetKnownPowersModifier(oCreature, nList); + break; + } + case POWER_LIST_MISC:{ + //no limits here, should not be checked + } + + default:{ + string sErr = "GetMaxPowerCount(): ERROR: Unknown power list value: " + IntToString(nList); + if(DEBUG) DoDebug(sErr); + else WriteTimestampedLogEntry(sErr); + } + } + + return nMaxPowers; +} + +int GetHasPower(int nPower, object oCreature = OBJECT_SELF) +{ + if((GetLevelByClass(CLASS_TYPE_PSION, oCreature) + && GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSION), oCreature) + ) || + (GetLevelByClass(CLASS_TYPE_PSYWAR, oCreature) + && GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSYWAR), oCreature) + ) || + (GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oCreature) + && GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSYCHIC_ROGUE), oCreature) + ) || + (GetLevelByClass(CLASS_TYPE_WILDER, oCreature) + && GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_WILDER), oCreature) + ) || + (GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oCreature) + && GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_FIST_OF_ZUOKEN), oCreature) + ) || + (GetLevelByClass(CLASS_TYPE_WARMIND, oCreature) + && GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_WARMIND), oCreature) + ) + // add new psionic classes here + ) + return TRUE; + return FALSE; +} + +string DebugListKnownPowers(object oCreature) +{ + string sReturn = "Powers known by " + DebugObject2Str(oCreature) + ":\n"; + int i, j, k, numPowerLists = 8; + int nPowerList, nSize; + string sTemp, sArray, sArrayBase, sPowerFile; + // Loop over all power lists + for(i = 1; i <= numPowerLists; i++) + { + // Some padding + sReturn += " "; + // Get the power list for this loop + switch(i) + { + case 1: nPowerList = POWER_LIST_PSION; sReturn += "Psion"; break; + case 2: nPowerList = POWER_LIST_WILDER; sReturn += "Wilder"; break; + case 3: nPowerList = POWER_LIST_PSYWAR; sReturn += "Psychic Warrior"; break; + case 4: nPowerList = POWER_LIST_PSYROG; sReturn += "Psychic Rogue"; break; + case 5: nPowerList = POWER_LIST_FIST_OF_ZUOKEN; sReturn += "Fist of Zuoken"; break; + case 6: nPowerList = POWER_LIST_WARMIND; sReturn += "Warmind"; break; + + // This should always be last + case 7: nPowerList = POWER_LIST_EXP_KNOWLEDGE; sReturn += "Expanded Knowledge"; break; + case 8: nPowerList = POWER_LIST_EPIC_EXP_KNOWLEDGE; sReturn += "Epic Expanded Knowledge"; break; + case 9: nPowerList = POWER_LIST_MISC; sReturn += "Misceallenous"; break; + } + sReturn += " powers known:\n"; + + // Determine if the character has any powers from this list + sPowerFile = GetAMSDefinitionFileName(nPowerList); + sArrayBase = _POWER_LIST_NAME_BASE + IntToString(nPowerList); + + // Loop over levels + for(j = 1; j <= GetHitDice(oCreature); j++) + { + sArray = sArrayBase + _POWER_LIST_LEVEL_ARRAY + IntToString(j); + if(persistant_array_exists(oCreature, sArray)) + { + sReturn += " Gained on level " + IntToString(j) + ":\n"; + nSize = persistant_array_get_size(oCreature, sArray); + for(k = 0; k < nSize; k++) + sReturn += " " + GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", + GetPowerFromSpellID(persistant_array_get_int(oCreature, sArray, k)) + ) + ) + ) + + "\n"; + } + } + + // Non-leveldependent powers + sArray = sArrayBase + _POWER_LIST_GENERAL_ARRAY; + if(persistant_array_exists(oCreature, sArray)) + { + sReturn += " Non-leveldependent:\n"; + nSize = persistant_array_get_size(oCreature, sArray); + for(k = 0; k < nSize; k++) + sReturn += " " + GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", + GetPowerFromSpellID(persistant_array_get_int(oCreature, sArray, k)) + ) + ) + ) + + "\n"; + } + } + + return sReturn; +} + +/* Probably unnecessary +int ClassTypeToPowerList(int nClassType) +{ + int nReturn = 0; + switch(nClassType) + { + case CLASS_TYPE_PSION: nReturn = POWER_LIST_PSION; break; + case CLASS_TYPE_WILDER: nReturn = POWER_LIST_WILDER; break; + case CLASS_TYPE_PSYWAR: nReturn = POWER_LIST_PSYWAR; break; + case CLASS_TYPE_FIST_OF_ZUOKEN: nReturn = POWER_LIST_FIST_OF_ZUOKEN; break; + + case CLASS_TYPE_INVALID: nReturn = POWER_LIST_EXP_KNOWLEDGE; break; + case -2: nReturn = POWER_LIST_EPIC_EXP_KNOWLEDGE; break; + case -3: nReturn = POWER_LIST_MISC; break; + + default:{ + string sErr = "ClassTypeToPowerList(): ERROR: Unknown class type value: " + IntToString(nClassType); + if(DEBUG) DoDebug(sErr); + else WriteTimestampedLogEntry(sErr); + } + } + + return nReturn; +} + +int PowerListToClassType(int nPowerList) +{ + int nReturn = 0; + switch(nPowerList) + { + case POWER_LIST_PSION: nReturn = CLASS_TYPE_PSION; break; + case POWER_LIST_WILDER: nReturn = CLASS_TYPE_WILDER; break; + case POWER_LIST_PSYWAR: nReturn = CLASS_TYPE_PSYWAR; break; + case POWER_LIST_FIST_OF_ZUOKEN: nReturn = CLASS_TYPE_FIST_OF_ZUOKEN; break; + + case POWER_LIST_EXP_KNOWLEDGE: nReturn = CLASS_TYPE_INVALID; break; + case POWER_LIST_EPIC_EXP_KNOWLEDGE: nReturn = -2; break; + case POWER_LIST_MISC: nReturn = -3; break; + + default:{ + string sErr = "PowerListToClassType(): ERROR: Unknown power list value: " + IntToString(nPowerList); + if(DEBUG) DoDebug(sErr); + else WriteTimestampedLogEntry(sErr); + } + } + + return nReturn; +} +*/ +// Test main +//void main(){} diff --git a/src/include/psi_inc_ppoints.nss b/src/include/psi_inc_ppoints.nss new file mode 100644 index 0000000..a98f0fb --- /dev/null +++ b/src/include/psi_inc_ppoints.nss @@ -0,0 +1,375 @@ +//:://///////////////////////////////////////////// +//:: Psionics include: Power Points +//:: psi_inc_ppoints +//:://///////////////////////////////////////////// +/** @file + Defines functions for handling power points. + + @author Ornedan + @date Created - 2005.11.04 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +// Constants are provided via psi_inc_core + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Returns the given character's current power point count. + * + * @param oChar Character whose power points to examine + * @return The character's current power point count + */ +/* + * @param bCountTemporary If TRUE, the returned value is the sum + * of the character's real and temporary PP, + * otherwise just the real PP + */ +int GetCurrentPowerPoints(object oChar/*, int bCountTemporary = TRUE*/); + +/** + * Returns the given character's maximum power point count. + * + * @param oChar Character whose power points to examine + * @return The maximum number of power points the character + * can normally have + */ +int GetMaximumPowerPoints(object oChar); + +/** + * Returns the current power point count as a string in format: + * "[current] / [maximum]" + * + * @param oChar Character whose power points to examine + * @return The given character's power point data in a formatted string + */ +string GetPowerPointsAsString(object oChar); + +/** + * Sends the given character a message telling their current power point + * count. Format: + * "Power Points Remaining: [current] / [maximum]" + * + * @param oChar Character whom to inform about their power points + */ +void TellCharacterPowerPointStatus(object oChar); + +/** + * Resets current power point count to maximum power points. + * Any temporary power points are removed. + * + * @param oChar Character to perform power point reseting for. + */ +void ResetPowerPoints(object oChar); + +/** + * Increases the character's current power point count by up to the given + * amount, limited to the character's maximum for real power points unless + * specifically allowed to exceed the maximum. + * + * @param oChar Character whose power points to adjust + * @param nGain How many power points to add + * @param bCanExceedMax Whether the power point total can exceed the normal + * maximum as a result of this increase + * @param bInform If TRUE, runs TellCharacterPowerPointStatus() on oChar + * after making the modification. + */ +void GainPowerPoints(object oChar, int nGain, int bCanExceedMax = FALSE, int bInform = TRUE); + +/** + * Gives the character an amount of temporary power points. Temporary power + * points are always used first and ignore the maximum PP limit. + * + * @param oChar Character whose power points to adjust + * @param nGain How many power points to add + * @param fDuration How long the temporary power points will last, in seconds + * @param bInform If TRUE, runs TellCharacterPowerPointStatus() on oChar + * after making the modification. + */ +/* +void GainTemporaryPowerPoints(object oChar, int nGain, float fDuration, int bInform = TRUE); +*/ +/** + * Decreases the character's current power point count by up to the given + * amount, limited to not going below 0. + * Reaching 0 PP causes loss of psionic focus. + * + * @param oChar Character whose power points to adjust + * @param nLoss How many power points to remove + * @param bInform If TRUE, runs TellCharacterPowerPointStatus() on oChar + * after making the modification. + */ +void LosePowerPoints(object oChar, int nLoss, int bInform = TRUE); + +/** + * Unconditionally sets the given character's power point count to 0. + * This causes psionic focus loss as normal. + * + * @param oChar Character whose power points to null + * @param bInform If TRUE, runs TellCharacterPowerPointStatus() on oChar + * after making the modification. + */ +void LoseAllPowerPoints(object oChar, int bInform = TRUE); + + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "psi_inc_core" + + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +/** Internal function + * @param oChar Character whose feats to evaluate + * @return The amount of Power Points gained from Feats + */ +int _GetFeatBonusPP(object oChar) +{ + int nBonusPP = 0; + +//:: Wild Talent & Hidden Talents + if(GetHasFeat(FEAT_WILD_TALENT, oChar) || IsHiddenTalent()) + nBonusPP += 2; + +//:: Psionic Feats + int i; + int nPsiTalents; + for(i = FEAT_PSIONIC_TALENT_1; i <= FEAT_PSIONIC_TALENT_10; i++) + if(GetHasFeat(i, oChar)) nPsiTalents++; + + nBonusPP += nPsiTalents * (2 + nPsiTalents + 1) / 2; + +//:: Epic feats + int nImpManifestations; + for(i = FEAT_IMPROVED_MANIFESTATION_1; i <= FEAT_IMPROVED_MANIFESTATION_10; i++) + if(GetHasFeat(i, oChar)) nImpManifestations++; + + nBonusPP += nImpManifestations * (18 + nImpManifestations); + + // Racial boni + if(GetHasFeat(FEAT_NATPSIONIC_1, oChar)) + nBonusPP += 1; + if(GetHasFeat(FEAT_NATPSIONIC_2, oChar)) + nBonusPP += 2; + if(GetHasFeat(FEAT_NATPSIONIC_3, oChar)) + nBonusPP += 3; + + if(GetRacialType(oChar) == RACIAL_TYPE_KALASHTAR) + nBonusPP += GetHitDice(oChar); + + if(GetRacialType(oChar) == RACIAL_TYPE_EMPTY_VESSEL) + nBonusPP += GetHitDice(oChar); + + if(GetHasFeat(FEAT_ABERRANT_WARPED_MIND, oChar)) + nBonusPP += GetAberrantFeatCount(oChar); + + return nBonusPP; +} + +/** Internal function + * @param oChar Character whose ability modifier to evaluate + * @param nFirstPsiClass The CLASS_TYPE_* of the character's first psionic class + * @return The amount of Bonus Power Points gained from Abilities + */ +int _GetModifierPP (object oChar, int nFirstPsiClass) +{ + int nPP = 0; + int nBonus; + + int nPsion = GetLevelByClass(CLASS_TYPE_PSION, oChar) + (GetPsionicPRCLevels(oChar, CLASS_TYPE_PSION)); + + int nPsychic = GetLevelByClass(CLASS_TYPE_PSYWAR, oChar) + (GetPsionicPRCLevels(oChar, CLASS_TYPE_PSYWAR)); + + int nRogue = GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oChar) + (GetPsionicPRCLevels(oChar, CLASS_TYPE_PSYCHIC_ROGUE)); + + int nWilder = GetLevelByClass(CLASS_TYPE_WILDER, oChar) + (GetPsionicPRCLevels(oChar, CLASS_TYPE_WILDER)); + + int nZuoken = GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oChar) + (GetPsionicPRCLevels(oChar, CLASS_TYPE_FIST_OF_ZUOKEN)); + + int nWarmind = GetLevelByClass(CLASS_TYPE_WARMIND, oChar) + (GetPsionicPRCLevels(oChar, CLASS_TYPE_WARMIND)); + +/* int nPsion = GetLevelByClass(CLASS_TYPE_PSION, oChar) + + (nFirstPsiClass == CLASS_TYPE_PSION ? GetPsionicPRCLevels(oChar) : 0); + int nPsychic = GetLevelByClass(CLASS_TYPE_PSYWAR, oChar) + + (nFirstPsiClass == CLASS_TYPE_PSYWAR ? GetPsionicPRCLevels(oChar) : 0); + int nRogue = GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oChar) + + (nFirstPsiClass == CLASS_TYPE_PSYCHIC_ROGUE ? GetPsionicPRCLevels(oChar) : 0); + int nWilder = GetLevelByClass(CLASS_TYPE_WILDER, oChar) + + (nFirstPsiClass == CLASS_TYPE_WILDER ? GetPsionicPRCLevels(oChar) : 0); + int nZuoken = GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oChar) + + (nFirstPsiClass == CLASS_TYPE_FIST_OF_ZUOKEN ? GetPsionicPRCLevels(oChar) : 0); + int nWarmind = GetLevelByClass(CLASS_TYPE_WARMIND, oChar) + + (nFirstPsiClass == CLASS_TYPE_WARMIND ? GetPsionicPRCLevels(oChar) : 0); */ + + if(nPsion > 0) + { + if(nPsion > 20) nPsion = 20; + nBonus = (nPsion * GetAbilityModifier(ABILITY_INTELLIGENCE, oChar)) / 2; + nPP += nBonus; + } + if(nPsychic > 0) + { + if(nPsychic > 20) nPsychic = 20; + nBonus = (nPsychic * GetAbilityModifier(ABILITY_WISDOM, oChar)) / 2; + nPP += nBonus; + } + if(nRogue > 0) + { + if(nRogue > 20) nRogue = 20; + nBonus = (nRogue * GetAbilityModifier(ABILITY_INTELLIGENCE, oChar)) / 2; + nPP += nBonus; + } + if(nWilder > 0) + { + if(nWilder > 20) nWilder = 20; + nBonus = (nWilder * GetAbilityModifier(ABILITY_CHARISMA, oChar)) / 2; + nPP += nBonus; + } + if(nZuoken > 0) + { + if(nZuoken > 10) nZuoken = 10; + nBonus = (nZuoken * GetAbilityModifier(ABILITY_WISDOM, oChar)) / 2; + nPP += nBonus; + } + if(nWarmind > 0) + { + if(nWarmind > 10) nWarmind = 10; + nBonus = (nWarmind * GetAbilityModifier(ABILITY_WISDOM, oChar)) / 2; + nPP += nBonus; + } + + return nPP; +} + +/** Internal function + * @param oChar Character whose classes to evaluate + * @param nClass The CLASS_TYPE_* of the specific class to evaluate + * @param nFirstPsiClass The CLASS_TYPE_* of the character's first psionic class + * @return The amount of Power Points gained from levels in the + * given class + */ +int _GetPPForClass (object oChar, int nClass, int nFirstPsiClass) +{ + int nPP; + int nLevel = GetLevelByClass(nClass, oChar) + GetPsionicPRCLevels(oChar, nClass); + + //+ (nFirstPsiClass == nClass ? GetPsionicPRCLevels(oChar) : 0); + string sPsiFile = GetAMSKnownFileName(nClass); + nPP = StringToInt(Get2DACache(sPsiFile, "PowerPoints", nLevel - 1)); // Index from 0 + + return nPP; +} + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int GetCurrentPowerPoints(object oChar/*, int bCountTemporary = TRUE*/) +{ + int nRealPP = GetLocalInt(oChar, POWER_POINT_VARNAME); + //int nTemporaryPP = 0; ///@todo If necessary + + return nRealPP; //+ nTemporaryPP; +} + +int GetMaximumPowerPoints(object oChar) +{ + int nMaxPP; + + // The character's first psionic class is considered to be the one that +ML PrCs add to + int nFirstPsiClass = GetPrimaryPsionicClass(oChar); + + nMaxPP += _GetPPForClass(oChar, CLASS_TYPE_PSION, nFirstPsiClass); + nMaxPP += _GetPPForClass(oChar, CLASS_TYPE_WILDER, nFirstPsiClass); + nMaxPP += _GetPPForClass(oChar, CLASS_TYPE_PSYWAR, nFirstPsiClass); + nMaxPP += _GetPPForClass(oChar, CLASS_TYPE_PSYCHIC_ROGUE, nFirstPsiClass); + nMaxPP += _GetPPForClass(oChar, CLASS_TYPE_FIST_OF_ZUOKEN, nFirstPsiClass); + nMaxPP += _GetPPForClass(oChar, CLASS_TYPE_WARMIND, nFirstPsiClass); + + nMaxPP += _GetModifierPP(oChar, nFirstPsiClass); + + nMaxPP += _GetFeatBonusPP(oChar); + + return nMaxPP; +} + +string GetPowerPointsAsString(object oChar) +{ + return IntToString(GetCurrentPowerPoints(oChar)) + " / " + IntToString(GetMaximumPowerPoints(oChar)); +} + +void TellCharacterPowerPointStatus(object oChar) +{ + FloatingTextStringOnCreature(GetStringByStrRef(16824181) + " " + GetPowerPointsAsString(oChar), // "Power Points Remaining:" + oChar, FALSE); +} + +void ResetPowerPoints(object oChar) +{ + SetLocalInt(oChar, POWER_POINT_VARNAME, GetMaximumPowerPoints(oChar)); +} + +void GainPowerPoints(object oChar, int nGain, int bCanExceedMax = FALSE, int bInform = TRUE) +{ + int nCurPP = GetCurrentPowerPoints(oChar/*, FALSE*/); + nCurPP += nGain; + + if(!bCanExceedMax) + { + int nMaxPP = GetMaximumPowerPoints(oChar); + if(nCurPP > nMaxPP) + nCurPP = nMaxPP; + } + + SetLocalInt(oChar, POWER_POINT_VARNAME, nCurPP); + + if(bInform) + TellCharacterPowerPointStatus(oChar); +} + +/* +void GainTemporaryPowerPoints(object oChar, int nGain, float fDuration, int bInform = TRUE) +{ +} +*/ + +void LosePowerPoints(object oChar, int nLoss, int bInform = TRUE) +{ + int nCurPP = GetCurrentPowerPoints(oChar/*, FALSE*/); + nCurPP -= nLoss; + if(nCurPP < 0) + nCurPP = 0; + + SetLocalInt(oChar, POWER_POINT_VARNAME, nCurPP); + + if(GetCurrentPowerPoints(oChar) == 0) + LosePsionicFocus(oChar); + + if(bInform) + TellCharacterPowerPointStatus(oChar); +} + +void LoseAllPowerPoints(object oChar, int bInform = TRUE) +{ + SetLocalInt(oChar, POWER_POINT_VARNAME, 0); + + LosePsionicFocus(oChar); + + if(bInform) + TellCharacterPowerPointStatus(oChar); +} + +// Test main +//void main(){} diff --git a/src/include/psi_inc_psicraft.nss b/src/include/psi_inc_psicraft.nss new file mode 100644 index 0000000..058ba59 --- /dev/null +++ b/src/include/psi_inc_psicraft.nss @@ -0,0 +1,84 @@ +//:://///////////////////////////////////////////// +//:: Psionic include: Psicraft Skill +//:: psi_inc_psicraft +//:://///////////////////////////////////////////// +/** @file + Defines various functions and other stuff that + do something related to the Psicraft skill + + Functions below are called by the manifester as + he makes a power. + + @author Stratovarius + @date Created - 2008.9.17 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +// Constants are provided via psi_inc_core + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Returns the power that the manifester just used + * @param oManifester The power manifester + * @param nPowerId Power to check + * + * @return nothing, uses SendMessageToPC to give results + */ +void IdentifyPower(object oManifester, int nPowerId); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +// Always access via psi_inc_psifunc. + +//#include "psi_inc_core" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +void _DoPsicraftCheck(object oManifester, object oCheck, int nPowerLevel, int nPowerId) +{ + // NPCs wouldn't benefit from being told the name of the maneuver + if (!GetIsPC(oCheck)) return; + + // Roll the check + if(GetIsSkillSuccessful(oCheck, SKILL_PSICRAFT, 10 + nPowerLevel)) + { // get the name of the manifester and power + FloatingTextStringOnCreature(GetName(oManifester) + " manifests " + GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nPowerId))), oCheck, FALSE); + } + else // Skill check failed + { + FloatingTextStringOnCreature(GetName(oManifester) + " manifests unknown power", oCheck, FALSE); + } +} + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +void IdentifyPower(object oManifester, int nPowerId) +{ + int nPowerLevel = GetPowerLevel(oManifester); + + // The area to check for martial lore users + object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, GetLocation(oManifester), TRUE, OBJECT_TYPE_CREATURE); + //Cycle through the targets within the spell shape until an invalid object is captured. + while (GetIsObjectValid(oTarget) && oTarget != oManifester) + { + // If the target has points in the skill + if (GetSkillRank(SKILL_PSICRAFT, oTarget) > 0) _DoPsicraftCheck(oManifester, oTarget, nPowerLevel, nPowerId); + + //Select the next target within the area. + oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, GetLocation(oManifester), TRUE, OBJECT_TYPE_CREATURE); + } +} \ No newline at end of file diff --git a/src/include/psi_inc_psifunc.nss b/src/include/psi_inc_psifunc.nss new file mode 100644 index 0000000..5e96a40 --- /dev/null +++ b/src/include/psi_inc_psifunc.nss @@ -0,0 +1,1078 @@ +//:://///////////////////////////////////////////// +//:: Psionics include: Manifesting +//:: psi_inc_psifunc - was psi_inc_manifest +//:://///////////////////////////////////////////// +/** @file + Defines structures and functions for handling + manifesting a power and main nexus for + Psi function access. + + Acts as inclusion nexus for the general + psionics includes. In other words, don't include + them directly in your scripts, instead include this. + + @author Ornedan + @date Created - 2005.11.19 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +//void main (){} + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +// Constants are provided via psi_inc_core + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Determines if the power that is currently being attempted to be manifested + * can in fact be manifested. Calculates PP cost and pays it. Determines + * augmentation and metapsionics used. + * + * @param oManifester A creature attempting to manifest a power at this moment. + * @param oTarget The target of the power, if any. For pure Area of Effect. + * powers, this should be OBJECT_INVALID. Otherwise the main + * target of the power as returned by PRCGetSpellTargetObject(). + * @param pap A power augmentation profile generated by a call to + * PowerAugmentationProfile(). This specifies how the power may + * be augmented. + * @param nMetaPsiFlags The metapsionics that may be used to modify this power. Any number + * of METAPSIONIC_* constants ORd together using the | operator. + * For example (METAPSIONIC_EMPOWER | METAPSIONIC_MAXIMIZE) + * + * @return A manifestation structure that contains the data about whether + * the power was successfully manifested, what augmentation and + * metapsionics were used and some other commonly used data, like + * the manifester's manifester level for this manifestation. + */ +struct manifestation EvaluateManifestation(object oManifester, object oTarget, struct power_augment_profile pap, int nMetaPsiFlags); + +/** + * Causes OBJECT_SELF to use the given power. + * + * @param nPower The index of the power to use in spells.2da or a POWER_* + * @param nClass The index of the class to use the power as in classes.2da or a CLASS_TYPE_* + * @param bIsPsiLike Whether the power to be used is to be a normal use or a psi-like ability, which + * acts somewhat differently. + * Default: FALSE, meaning a normal power. + * @param nLevelOverride An optional override to normal manifester level. This is necessary when + * using the power as a psi-like ability. + * Default: 0, which means the parameter is ignored. + */ +void UsePower(int nPower, int nClass, int bIsPsiLike = FALSE, int nLevelOverride = 0); + +/** + * A debugging function. Takes a manifestation structure and + * makes a string describing the contents. + * + * @param manif A set of manifestation data + * @return A string describing the contents of manif + */ +string DebugManifestation2Str(struct manifestation manif); + +/** + * Stores a manifestation structure as a set of local variables. If + * a structure was already stored with the same name on the same object, + * it is overwritten. + * + * @param oObject The object on which to store the structure + * @param sName The name under which to store the structure + * @param manif The manifestation structure to store + */ +void SetLocalManifestation(object oObject, string sName, struct manifestation manif); + +/** + * Retrieves a previously stored manifestation structure. If no structure is stored + * by the given name, the structure returned is empty. + * + * @param oObject The object from which to retrieve the structure + * @param sName The name under which the structure is stored + * @return The structure built from local variables stored on oObject under sName + */ +struct manifestation GetLocalManifestation(object oObject, string sName); + +/** + * Sets the evaluation functions to ignore constraints on manifesting. + * Call this just prior to EvaluateManifestation() in a power script. + * That evaluation will then ignore lacking manifestation ability score, + * Power Points and Psionic Focuses. + * + * @param oManifester A creature attempting to manifest a power at this moment. + */ +void DebugIgnoreConstraints(object oManifester); + +/** + * Determines if the power that is currently being attempted to be manifested + * can in fact be manifested. Calculates PP cost and pays it. Determines + * augmentation and metapsionics used. + * + * @param oManifester A creature attempting to manifest a power at this moment. + * @param oTarget The target of the power, if any. For pure Area of Effect. + * powers, this should be OBJECT_INVALID. Otherwise the main + * target of the power as returned by PRCGetSpellTargetObject(). + * @param nPowerLevel The "power level" of the ability, used for determining PP cost. + * @param pap A power augmentation profile generated by a call to + * PowerAugmentationProfile(). This specifies how the power may + * be augmented. + * @param nPowerLevel The "power level" of the ability, used for determining PP cost. + * + * @return A manifestation structure that contains the data about whether + * the ability was successfully manifested, what augmentation and + * metapsionics were used and some other commonly used data, like + * the manifester's manifester level for this manifestation. + */ +struct manifestation EvaluateDiaDragChannel(object oManifester, object oTarget, struct power_augment_profile pap, int nPowerLevel); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "psi_inc_metapsi" +#include "psi_inc_ppoints" // +#include "psi_inc_augment" // +#include "psi_inc_psicraft" // Provides Psicraft identifying +#include "psi_inc_powknown" // + + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +/** Internal function. + * Calculates PP cost reduction from various factors. Currently accounts for: + * - Thrallherd + * - Shadowmind + * + * @param manif The manifestation data relating to this particular manifesation + * @retrun The manifestation data, possibly with modified costs + */ +struct manifestation _GetPPCostReduced(struct manifestation manif) +{ + int nSpell = PRCGetSpellId(); + int nThrall = GetLevelByClass(CLASS_TYPE_THRALLHERD, manif.oManifester); + int nShadow = GetLevelByClass(CLASS_TYPE_SHADOWMIND, manif.oManifester); + + if(nThrall > 0) + { + if(GetLocalInt(manif.oManifester, "ThrallCharm") && nSpell == POWER_CHARMPERSON) + { + DeleteLocalInt(manif.oManifester, "ThrallCharm"); + manif.nPPCost -= nThrall; + } + if(GetLocalInt(manif.oManifester, "ThrallDom") && nSpell == POWER_DOMINATE) + { + DeleteLocalInt(manif.oManifester, "ThrallDom"); + manif.nPPCost -= nThrall; + } + + // Reduced cost for augmenting the Dominate power. These do not count for the DC increase + if(nThrall >= 7 && nSpell == POWER_DOMINATE && manif.nTimesAugOptUsed_1 > 0) + { + manif.nPPCost -= 2; + manif.nTimesGenericAugUsed -= 1; + } + if(nThrall >= 9 && nSpell == POWER_DOMINATE && manif.nTimesAugOptUsed_2 > 0) + { + manif.nPPCost -= 4; + manif.nTimesGenericAugUsed -= 2; + } + + if(manif.nPPCost < 1) manif.nPPCost = 1; + } + + if (nShadow > 0) + { + if(GetLocalInt(manif.oManifester, "ShadowDistract") && nSpell == POWER_DISTRACT) + { + DeleteLocalInt(manif.oManifester, "ShadowDistract"); + manif.nPPCost -= nShadow; + } + if(GetLocalInt(manif.oManifester, "ShadowCloudMind") && nSpell == POWER_CLOUD_MIND) + { + DeleteLocalInt(manif.oManifester, "ShadowCloudMind"); + manif.nPPCost -= nShadow; + } + if(GetLocalInt(manif.oManifester, "ShadowCloudMindMass") && nSpell == POWER_CLOUD_MIND_MASS) + { + DeleteLocalInt(manif.oManifester, "ShadowCloudMindMass"); + manif.nPPCost -= nShadow; + } + + if(manif.nPPCost < 1) manif.nPPCost = 1; + } + + return manif; +} + +/** Internal function. + * A wilder that is of high enough level to posses the Volatile Mind class + * feature causes extra cost to be applied to telepathy powers manifested + * on it. + * + * @param oTarget Target of the power being manifested at the moment + * @param oManifester Creature manifesting the power + * @return Either 0 if the character does not posses the Volatile + * Mind class feature or the power is not of the telepathy + * discipline. Otherwise, a number determined by the target's + * Wilder level. + */ +int _VolatileMind(object oTarget, object oManifester) +{ + int nWilder = GetLevelByClass(CLASS_TYPE_WILDER, oTarget); + int nTelepathy = GetIsTelepathyPower(); + int nCost = 0; + + if(nTelepathy && // Only affects telepathy powers. + nWilder >= 5 && // Only wilders need apply + // Since the "As a standard action, a wilder can choose to lower this effect for 1 round." + // bit is not particularly doable in NWN, we implement it so that the class feature + // only affects powers from hostile manifesters + GetIsEnemy(oTarget, oManifester) + ) + { + nCost = ((nWilder - 5) / 4) + 1; + } + + return nCost; +} + +/** Internal function. + * Calculates the extra cost caused by the Psionic Hole feat. + * + * @param oTarget The target of a power currently being manifested + * @return If the target has the Psionic Hole feat, the greater of + * it's Wisdom modifier and 0. Otherwise, just 0. + */ +int _PsionicHole(object oTarget) +{ + int nCost = 0; + + if(GetHasFeat(FEAT_PSIONIC_HOLE, oTarget)) + // Psionic Hole will never decrease power cost, even if the target is lacking in wisdom bonus + nCost = PRCMax(GetAbilityModifier(ABILITY_WISDOM, oTarget), 0); + + return nCost; +} + +/** Internal function. + * Applies Hostile Mind damage if the target posses the feat and is being + * targeted with a telepathy power. + * + * @param oManifester A creature currently manifesting a power at oTarget + * @param oTarget The target of the power being manifested. + */ +void _HostileMind(object oManifester, object oTarget) +{ + if(GetHasFeat(FEAT_HOSTILE_MIND, oTarget) && GetIsTelepathyPower()) + { + // Save DC is 10 + HD/2 + ChaMod + int nDC = 10 + GetHitDice(oTarget) / 2 + GetAbilityModifier(ABILITY_CHARISMA, oTarget); + if(!PRCMySavingThrow(SAVING_THROW_WILL, oManifester, nDC, SAVING_THROW_TYPE_NONE)) + { + //Apply damage and some VFX + SPApplyEffectToObject(DURATION_TYPE_INSTANT, + EffectLinkEffects(EffectDamage(d6(2)), EffectVisualEffect(VFX_FNF_SPELL_FAIL_HEA)), + oManifester + ); + } + } +} + +/** Internal function. + * Applies the damage caused by use of Overchannel feat. + * + * @param oManifester The creature currently manifesting a power + * @param bIsPsiLike Whether the power being manifester is a psi-like ability or not + */ +void _DoOverchannelDamage(object oManifester, int bIsPsiLike) +{ + int nOverchannel = GetLocalInt(oManifester, PRC_OVERCHANNEL); + if(nOverchannel > 0 && !bIsPsiLike) + { + int nDam = d8(nOverchannel * 2 - 1); + // Check if Talented applies + if(GetPowerLevel(oManifester) <= 3) + { + if(GetLocalInt(oManifester, "TalentedActive") && UsePsionicFocus(oManifester)) + return; + /* Should we be merciful and let the feat be "retroactively activated" if the damage were enough to kill? + else if(GetCurrentHitPoints(oCaster) < nDam && GetHasFeat(FEAT_TALENTED, oCaster) && UsePsionicFocus(oCaster)) + return;*/ + } + effect eDam = EffectDamage(nDam); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oManifester); + } +} + +/** Internal function. + * If the manifester is a wilder who is using Wild Surge, rolls and + * applies Psychic Enervation or Surging Euphoria based on the result. + * + * @param oManifester The creature currently manifesting a power + */ +void _SurgingEuphoriaOrPsychicEnervation(object oManifester, int nWildSurge) +{ + int nWilder = GetLevelByClass(CLASS_TYPE_WILDER, oManifester); + + // Only Wilders need apply (at least so far) + if(nWilder > 0 && nWildSurge) + { + // Psychic Enervation has a 5% chance to happen per point Wild Surged by + if(nWildSurge >= d20()) + { + effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE); + effect eDaze = EffectDazed(); + effect eLink = EffectLinkEffects(eMind, eDaze); + eLink = ExtraordinaryEffect(eLink); + + FloatingTextStrRefOnCreature(16823620, oManifester, FALSE); // "You have become psychically enervated and lost power points" + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oManifester, RoundsToSeconds(1)); + + LosePowerPoints(oManifester, nWilder); + } + // Need minimum wilder level 4 to be eligible for Surging Euphoria. And it only happens when there is no Enervation + else if(nWilder >= 4) + { + // Euphoria is 1 at levels 4 - 11, 2 at L 12 - 19, 3 at L 20 - 27, etc. + int nEuphoria = ((nWilder - 4) / 8) + 1; + + effect eBonAttack = EffectAttackIncrease(nEuphoria); + effect eBonDam = EffectDamageIncrease(nEuphoria, DAMAGE_TYPE_MAGICAL); + effect eVis = EffectVisualEffect(VFX_IMP_MAGIC_PROTECTION); + effect eSave = EffectSavingThrowIncrease(SAVING_THROW_ALL, nEuphoria, SAVING_THROW_TYPE_SPELL); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + effect eDur2 = EffectVisualEffect(VFX_DUR_MAGIC_RESISTANCE); + effect eLink = EffectLinkEffects(eSave, eDur); + eLink = EffectLinkEffects(eLink, eDur2); + eLink = EffectLinkEffects(eLink, eBonDam); + eLink = EffectLinkEffects(eLink, eBonAttack); + eLink = ExtraordinaryEffect(eLink); + + FloatingTextStringOnCreature(GetStringByStrRef(16823616) + ": " + IntToString(nWildSurge), oManifester, FALSE); // "Surging Euphoria: " + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oManifester, RoundsToSeconds(nWildSurge)); + } + } +} + +/** Internal function. + * Applies the PP loss caused by the target having Mind Trap active. + * + * @param oManifester A creature currently manifesting a power at oTarget + * @param oTarget The target of the power being manifested + */ +void _DoMindTrapPPLoss(object oManifester, object oTarget) +{ + if(oManifester != oTarget && // Does not apply to own powers + GetLocalInt(oTarget, "PRC_Power_MindTrap_Active") && // The target does have Mind Trap active + GetIsTelepathyPower() // And the power being used is a telepathy power + ) + { + LosePowerPoints(oManifester, d6()); + } +} + +/** Internal function. + * Handles Spellfire absorption when a power is used on a friendly spellfire + * user. + */ +struct manifestation _DoSpellfireFriendlyAbsorption(struct manifestation manif, object oTarget) +{ + if(GetLocalInt(oTarget, "SpellfireAbsorbFriendly") && + GetIsFriend(oTarget, manif.oManifester) + ) + { + if(CheckSpellfire(manif.oManifester, oTarget, TRUE)) + { + PRCShowSpellResist(manif.oManifester, oTarget, SPELL_RESIST_MANTLE); + manif.bCanManifest = FALSE; + } + } + + return manif; +} + +/** Internal function. + * Deletes manifestation-related local variables. + * + * @param oManifester The creature currently manifesting a power + */ +void _CleanManifestationVariables(object oManifester) +{ + DeleteLocalInt(oManifester, PRC_MANIFESTING_CLASS); + DeleteLocalInt(oManifester, PRC_POWER_LEVEL); + DeleteLocalInt(oManifester, PRC_IS_PSILIKE); + DeleteLocalInt(oManifester, PRC_AUGMENT_OVERRIDE); +} + +/** Internal function. + * Determines whether a manifestation token exists. If one does, returns it. + * + * @param oManifester A creature whose manifestation token to get + * @return The manifestation token if it exists, OBJECT_INVALID otherwise. + */ +object _GetManifestationToken(object oManifester) +{ + object oMfToken = GetLocalObject(oManifester, PRC_MANIFESTATION_TOKEN_VAR); + + // Special case - variable not set up yet, so this is the characters first manifestation since entering the module +/* Obsoleted by the manifestation token chest in Limbo + if(oMfToken == OBJECT_INVALID) + { + object oSkin = GetPCSkin(oManifester); + object oTest = GetFirstItemInInventory(oSkin); + + // Seek for tokens in the creature's inventory and destroy them + while(GetIsObjectValid(oTest)) + { + if(GetTag(oTest) == PRC_MANIFESTATION_TOKEN_NAME) + DestroyObject(oTest); + oTest = GetNextItemInInventory(oSkin); + } + } +*/ + // If the token object is no longer valid, set the variable to point at manifester + if(!GetIsObjectValid(oMfToken)) + { + oMfToken = oManifester; + SetLocalObject(oManifester, PRC_MANIFESTATION_TOKEN_VAR, oMfToken); + } + + + // Check if there is no token + if(oMfToken == oManifester) + oMfToken = OBJECT_INVALID; + + return oMfToken; +} + +/** Internal function. + * Destroys the given manifestation token and sets the creature's manifestation token variable + * to point at itself. + * + * @param oManifester The manifester whose token to destroy + * @param oMfToken The token to destroy + */ +void _DestroyManifestationToken(object oManifester, object oMfToken) +{ + DestroyObject(oMfToken); + SetLocalObject(oManifester, PRC_MANIFESTATION_TOKEN_VAR, oManifester); +} + +/** Internal function. + * Destroys the previous manifestation token, if any, and creates a new one. + * + * @param oManifester A creature for whom to create a manifestation token + * @return The newly created token + */ +object _CreateManifestationToken(object oManifester) +{ + object oMfToken = _GetManifestationToken(oManifester); + object oStore = GetObjectByTag("PRC_MANIFTOKEN_STORE"); //GetPCSkin(oManifester); + + // Delete any previous tokens + if(GetIsObjectValid(oMfToken)) + _DestroyManifestationToken(oManifester, oMfToken); + + // Create new token and store a reference to it + oMfToken = CreateItemOnObject(PRC_MANIFESTATION_TOKEN_NAME, oStore); + SetLocalObject(oManifester, PRC_MANIFESTATION_TOKEN_VAR, oMfToken); + + Assert(GetIsObjectValid(oMfToken), "GetIsObjectValid(oMfToken)", "ERROR: Unable to create manifestation token! Store object: " + DebugObject2Str(oStore), "psi_inc_psifunc", "_CreateManifestationToken()"); + + return oMfToken; +} + +/** Internal function. + * Determines whether the given manifester is doing something that would + * interrupt manifesting a power or affected by an effect that would do + * the same. + * + * @param oManifester A creature on which _ManifestationHB() is running + * @return TRUE if the creature can continue manifesting, + * FALSE otherwise + */ +int _ManifestationStateCheck(object oManifester) +{ + int nAction = GetCurrentAction(oManifester); + // If the current action is not among those that could either be used to manifest the power or movement, the power fails + if(!(nAction || ACTION_CASTSPELL || nAction == ACTION_INVALID || + nAction || ACTION_ITEMCASTSPELL || nAction == ACTION_MOVETOPOINT || + nAction || ACTION_USEOBJECT || nAction == ACTION_WAIT + ) ) + return FALSE; + + // Affected by something that prevents one from manifesting + effect eTest = GetFirstEffect(oManifester); + int nEType; + while(GetIsEffectValid(eTest)) + { + nEType = GetEffectType(eTest); + if(nEType == EFFECT_TYPE_CUTSCENE_PARALYZE || + nEType == EFFECT_TYPE_DAZED || + nEType == EFFECT_TYPE_PARALYZE || + nEType == EFFECT_TYPE_PETRIFY || + nEType == EFFECT_TYPE_SLEEP || + nEType == EFFECT_TYPE_STUNNED + ) + return FALSE; + + // Get next effect + eTest = GetNextEffect(oManifester); + } + + return TRUE; +} + +/** Internal function. + * Runs while the given creature is manifesting. If they move, take other actions + * that would cause them to interrupt manifesting the power or are affected by an + * effect that would cause such interruption, deletes the manifestation token. + * Stops if such condition occurs or something else destroys the token. + * + * @param oManifester A creature manifesting a power + * @param lManifester The location where the manifester was when starting the manifestation + * @param oMfToken The manifestation token that controls the ongoing manifestation + */ +void _ManifestationHB(object oManifester, location lManifester, object oMfToken) +{ + if(DEBUG) DoDebug("_ManifestationHB() running:\n" + + "oManifester = " + DebugObject2Str(oManifester) + "\n" + + "lManifester = " + DebugLocation2Str(lManifester) + "\n" + + "oMfToken = " + DebugObject2Str(oMfToken) + "\n" + + "Distance between manifestation start location and current location: " + FloatToString(GetDistanceBetweenLocations(lManifester, GetLocation(oManifester))) + "\n" + ); + if(GetIsObjectValid(oMfToken)) + { + // Continuance check + if(GetDistanceBetweenLocations(lManifester, GetLocation(oManifester)) > 2.0f || // Allow some variance in the location to account for dodging and random fidgeting + !_ManifestationStateCheck(oManifester) // Action and effect check + ) + { + if(DEBUG) DoDebug("_ManifestationHB(): Manifester moved or lost concentration, destroying token"); + _DestroyManifestationToken(oManifester, oMfToken); + + // Inform manifester + FloatingTextStrRefOnCreature(16828435, oManifester, FALSE); // "You have lost concentration on the power you were attempting to manifest!" + } + // Schedule next HB + else + DelayCommand(PRC_MANIFESTATION_HB_DELAY, _ManifestationHB(oManifester, lManifester, oMfToken)); + } +} + +/** Internal function. + * Checks if the manifester is in range to use the power they are trying to use. + * If not, queues commands to make the manifester to run into range. + * + * @param oManifester A creature manifesting a power + * @param nPower SpellID of the power being manifested + * @param lTarget The target location or the location of the target object + */ +void _ManifestationRangeCheck(object oManifester, int nPower, location lTarget) +{ + float fDistance = GetDistanceBetweenLocations(GetLocation(oManifester), lTarget); + float fRangeLimit; + string sRange = Get2DACache("spells", "Range", nPower); + + // Personal range powers are always in range + if(sRange == "P") + return; + // Ranges according to the CCG spells.2da page + else if(sRange == "T") + fRangeLimit = 2.25f; + else if(sRange == "S") + fRangeLimit = 8.0f; + else if(sRange == "M") + fRangeLimit = 20.0f; + else if(sRange == "L") + fRangeLimit = 40.0f; + + // See if we are out of range + if(fDistance > fRangeLimit) + { + // Create waypoint for the movement + object oWP = CreateObject(OBJECT_TYPE_WAYPOINT, "nw_waypoint001", lTarget); + + // Move into range, with a bit of fudge-factor + //ActionMoveToObject(oWP, TRUE, fRangeLimit - 0.15f); + + // Cleanup + ActionDoCommand(DestroyObject(oWP)); + + // Cleanup, paranoia + AssignCommand(oWP, ActionDoCommand(DestroyObject(oWP, 60.0f))); + } +} + +/** Internal function. + * Assigns the fakecast command that is used to display the conjuration VFX when using a power. + * Separated from UsePower() due to a bug with ActionFakeCastSpellAtObject(), which requires + * use of ClearAllActions() to work around. + * The problem is that if the target is an item on the ground, if the actor is out of spell + * range when doing the fakecast, they will run on top of the item instead of to the edge of + * the spell range. This only happens if there was a "real action" in the actor's action queue + * immediately prior to the fakecast. + */ +void _AssignUsePowerFakeCastCommands(object oManifester, object oTarget, location lTarget, int nSpellID) +{ + // Nuke actions to prevent the fakecast action from bugging + ClearAllActions(); + + if(GetIsObjectValid(oTarget)) + ActionCastFakeSpellAtObject(nSpellID, oTarget, PROJECTILE_PATH_TYPE_DEFAULT); + else + ActionCastFakeSpellAtLocation(nSpellID, lTarget, PROJECTILE_PATH_TYPE_DEFAULT); +} + + +/** Internal function. + * Places the cheatcasting of the real power into the manifester's action queue. + */ +void _UsePowerAux(object oManifester, object oMfToken, int nSpellId, + object oTarget, location lTarget, + int nPower, int nClass, int bIsPsiLike, int nLevelOverride, + int bQuickened + ) +{ + if(DEBUG) DoDebug("_UsePowerAux() running:\n" + + "oManifester = " + DebugObject2Str(oManifester) + "\n" + + "oMfToken = " + DebugObject2Str(oMfToken) + "\n" + + "nSpellId = " + IntToString(nSpellId) + "\n" + + "oTarget = " + DebugObject2Str(oTarget) + "\n" + + "lTarget = " + DebugLocation2Str(lTarget) + "\n" + + "nPower = " + IntToString(nPower) + "\n" + + "nClass = " + IntToString(nClass) + "\n" + + "bIsPsiLike = " + DebugBool2String(bIsPsiLike) + "\n" + + "nLevelOverride = " + IntToString(nLevelOverride) + "\n" + + "bQuickened = " + DebugBool2String(bQuickened) + "\n" + ); + + // Make sure nothing has interrupted this manifestation + if(GetIsObjectValid(oMfToken)) + { + if(DEBUG) DoDebug("_UsePowerAux(): Token was valid, queueing actual manifestation"); + // Set the class to manifest as + SetLocalInt(oManifester, PRC_MANIFESTING_CLASS, nClass + 1); + + // Set the power's level + SetLocalInt(oManifester, PRC_POWER_LEVEL, StringToInt(lookup_spell_innate(nSpellId))); + + // Set whether the power is to run as a psi-like ability + SetLocalInt(oManifester, PRC_IS_PSILIKE, bIsPsiLike); + + // Set whether the power was quickened + SetLocalInt(oManifester, PRC_POWER_IS_QUICKENED, bQuickened); + + // Queue the real manifestation + //ActionCastSpell(nPower, nLevelOverride, 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, TRUE, TRUE, oTarget); + + if(nLevelOverride != 0) + AssignCommand(oManifester, ActionDoCommand(SetLocalInt(oManifester, PRC_CASTERLEVEL_OVERRIDE, nLevelOverride))); + if(GetIsObjectValid(oTarget)) + AssignCommand(oManifester, ActionCastSpellAtObject(nPower, oTarget, METAMAGIC_NONE, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE)); + else + AssignCommand(oManifester, ActionCastSpellAtLocation(nPower, lTarget, METAMAGIC_NONE, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE)); + if(nLevelOverride != 0) + AssignCommand(oManifester, ActionDoCommand(DeleteLocalInt(oManifester, PRC_CASTERLEVEL_OVERRIDE))); + + // Destroy the manifestation token for this manifestation + _DestroyManifestationToken(oManifester, oMfToken); + } +} + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +struct manifestation EvaluateManifestation(object oManifester, object oTarget, struct power_augment_profile pap, int nMetaPsiFlags) +{ + /* Get some data */ + int bIgnoreConstraints = (DEBUG) ? GetLocalInt(oManifester, PRC_DEBUG_IGNORE_CONSTRAINTS) : FALSE; + // Manifester-related stuff + int nManifesterLevel = GetManifesterLevel(oManifester); + int nPowerLevel = GetPowerLevel(oManifester); + int nClass = GetManifestingClass(oManifester); + int nWildSurge = GetWildSurge(oManifester); + int nManifesterPP = GetCurrentPowerPoints(oManifester); + int bIsPsiLike = GetLocalInt(oManifester, PRC_IS_PSILIKE); + // Target-specific stuff + int nVolatileMindCost = _VolatileMind(oTarget, oManifester); + int nPsionicHoleCost = _PsionicHole(oTarget); + + /* Initialise the manifestation structure */ + struct manifestation manif; + manif.oManifester = oManifester; + manif.bCanManifest = TRUE; // Assume successfull manifestation by default + manif.nPPCost = nPowerLevel * 2 - 1; // Initialise the cost to the base cost of the power + manif.nPsiFocUsesRemain = GetPsionicFocusesAvailable(oManifester);// Determine how many times psionic focus could be used + manif.nManifesterLevel = nManifesterLevel; + manif.nSpellID = PRCGetSpellId(); + + // Run an ability score check to see if the manifester can manifest the power at all + if (bIsPsiLike) + { + manif.bCanManifest = TRUE; + } + else if(GetAbilityScoreOfClass(oManifester, nClass) - 10 < nPowerLevel && !bIgnoreConstraints && !bIsPsiLike && !GetHasSpellEffect(VESTIGE_ARETE, oManifester) && !GetHasSpellEffect(VESTIGE_THETRIAD, oManifester) && !GetHasSpellEffect(VESTIGE_ABYSM, oManifester) && manif.nSpellID != POWER_ELAN_RESILIANCE) + { + FloatingTextStrRefOnCreature(16826411, oManifester, FALSE); // "You do not have a high enough ability score to manifest this power" + manif.bCanManifest = FALSE; + } + + // Account for metapsionics + if(!bIsPsiLike) // Skipped for psi-like abilities + manif = EvaluateMetapsionics(manif, nMetaPsiFlags); + + // This has an initial power cost of 0, all cost comes from augmentation + if (manif.nSpellID == POWER_ELAN_RESILIANCE) manif.nPPCost = 0; + + // Account for augmentation. This factors in Wild Surge cost reduction + manif = EvaluateAugmentation(manif, pap); + + //* APPLY COST INCREASES THAT DO NOT CAUSE ONE TO LOSE PP ON FAILURE HERE *// + if (manif.nSpellID != POWER_ELAN_RESILIANCE) + { + // Catapsi check + if(GetLocalInt(oManifester, "PRC_IsInCatapsi") && // Manifester is in Catapsi field + !PRCMySavingThrow(SAVING_THROW_WILL, oManifester, GetLocalInt(oManifester, "PRC_Catapsi_DC"), // And fails the will save VS it + SAVING_THROW_TYPE_MIND_SPELLS, GetLocalObject(oManifester, "PRC_Catapsi_Manifester") + ) + ) + { + manif.nPPCost += 4; + } + } + + //* APPLY COST INCREASES THAT DO NOT CAUSE ONE TO LOSE PP ON FAILURE ABOVE *// + + // Skip paying anything if something has prevented successfull manifestation already by this point + if(manif.bCanManifest) + { + /* The manifester level value includes the manifester level increase from + * Wild Surge, but since the calculated cost already contains the augmentation + * cost reduction provided by Wild Surge, it should not apply here. + */ + if((nManifesterLevel - nWildSurge) >= manif.nPPCost || bIsPsiLike || bIgnoreConstraints) + { + // Reduced cost of manifesting a power, but does not allow you to exceed the manifester level cap + if(!bIsPsiLike) // Skipped for psi-like abilities + manif = _GetPPCostReduced(manif); + + //If the manifester does not have enough points before hostile modifiers, cancel power + if(manif.nPPCost > nManifesterPP && !bIsPsiLike && !bIgnoreConstraints) + { + FloatingTextStrRefOnCreature(16826412, oManifester, FALSE); // "You do not have enough Power Points to manifest this power" + manif.bCanManifest = FALSE; + } + // The manifester has enough power points that they would be able to use the power, barring extra costs + else + { + //* ADD ALL COST INCREASING FACTORS THAT WILL CAUSE PP LOSS EVEN IF THEY MAKE THE POWER FAIL HERE *// + // Psionic Hole does not count against manifester level cap, but causes the power to fail if the manifester can't pay + manif.nPPCost += nPsionicHoleCost; + // Volatile Mind behaves the same + manif.nPPCost += nVolatileMindCost; + //* ADD ALL COST INCREASING FACTORS THAT WILL CAUSE PP LOSS EVEN IF THEY MAKE THE POWER FAIL ABOVE *// + + if(manif.nPPCost > nManifesterPP && !bIsPsiLike && !bIgnoreConstraints) + { + FloatingTextStrRefOnCreature(16826413, oManifester, FALSE); // "Your target's abilities cause you to use more Power Points than you have. The power fails" + manif.bCanManifest = FALSE; + } + + // Psi-like abilities ignore PP costs and metapsi + if(!bIsPsiLike) + { + // Set the power points to their new value and inform the manifester + LosePowerPoints(oManifester, manif.nPPCost, TRUE); + + // Psionic focus loss from using metapsionics. Has a side effect of telling the manifester which metapsionics were actually active + PayMetapsionicsFocuses(manif); + } + + //* APPLY SIDE-EFFECTS THAT RESULT FROM SUCCESSFULL MANIFESTATION HERE *// + // Psicraft for all those who can see + IdentifyPower(oManifester, manif.nSpellID); + // Damage from overchanneling happens only if one actually spends PP + _DoOverchannelDamage(oManifester, bIsPsiLike); + // Apply Hostile Mind damage, as necessary + _HostileMind(oManifester, oTarget); + // Apply Wild Surge side-effects + _SurgingEuphoriaOrPsychicEnervation(oManifester, nWildSurge); + // Apply Mind Trap PP loss + _DoMindTrapPPLoss(oManifester, oTarget); + // Spellfire friendly absorption - This may set bCananifest to FALSE + manif = _DoSpellfireFriendlyAbsorption(manif, oTarget); + //* APPLY SIDE-EFFECTS THAT RESULT FROM SUCCESSFULL MANIFESTATION ABOVE *// + } + } + // Cost was over the manifester cap + else + {// "Your manifester level is not high enough to spend X Power Points" + FloatingTextStringOnCreature(GetStringByStrRef(16826410) + " " + IntToString(manif.nPPCost) + " " + GetStringByStrRef(16826409), oManifester, FALSE); + manif.bCanManifest = FALSE; + } + }//end if - Something hadn't prevented successfull manifestation already before paying the power costs + + if(DEBUG) DoDebug("EvaluateManifestation(): Final result:\n" + DebugManifestation2Str(manif)); + + // Initiate manifestation-related variable cleanup + DelayCommand(0.5f, _CleanManifestationVariables(oManifester)); + + return manif; +} + +void UsePower(int nPower, int nClass, int bIsPsiLike = FALSE, int nLevelOverride = 0) +{ + object oManifester = OBJECT_SELF; + object oSkin = GetPCSkin(oManifester); + object oTarget = PRCGetSpellTargetObject(); + object oMfToken; + location lTarget = PRCGetSpellTargetLocation(); + int nSpellID = PRCGetSpellId(); + int nManifDur = StringToInt(Get2DACache("spells", "ConjTime", nPower)) + StringToInt(Get2DACache("spells", "CastTime", nPower)); + int bQuicken = FALSE; + + + if (GetLocalInt(oManifester, "MindStabDur")) nManifDur = 0; + + // Normally swift action powers check + if(Get2DACache("feat", "Constant", GetClassFeatFromPower(nPower, nClass)) == "SWIFT_ACTION") // The power is swift action to use + { + if (TakeSwiftAction(oManifester)) // And the Manifester can take a swift action now + nManifDur = 0; + else + return; + } + // Quicken Power check + else if(nManifDur <= 6000 && // If the power could be quickened by having manifesting time of 1 round or less + GetLocalInt(oManifester, METAPSIONIC_QUICKEN_VAR) && // And the manifester has Quicken Power active + GetIsPsionicallyFocused(oManifester) && // And might be able to pay the psionic focus for it + TakeSwiftAction(oManifester) // And the manifester can take a swift action + ) + { + // Set the manifestation time to 0 to skip VFX + nManifDur = 0; + // And set the Quicken Power used marker to TRUE + bQuicken = TRUE; + } + + if(DEBUG) DoDebug("UsePower(): Manifester is " + DebugObject2Str(oManifester) + "\n" + + "nPower = " + IntToString(nPower) + "\n" + + "nClass = " + IntToString(nClass) + "\n" + + "bIsPsiLike = " + DebugBool2String(bIsPsiLike) + "\n" + + "nLevelOverride = " + IntToString(nLevelOverride) + "\n" + + "Manifestation duration = " + IntToString(nManifDur) + "ms \n" + + "bQuicken = " + DebugBool2String(bQuicken) + "\n" + //+ "Token exists = " + DebugBool2String(GetIsObjectValid(oMfToken)) + ); + + // Create the manifestation token. Deletes any old tokens and cancels corresponding manifestations as a side effect + oMfToken = _CreateManifestationToken(oManifester); + + /// @todo Hook to the manifester's OnDamaged event for the concentration checks to avoid losing the power + + // Nuke action queue to prevent cheating with creative power stacking. + // Probably not necessary anymore - Ornedan + if(DEBUG) SendMessageToPC(oManifester, "Clearing all actions in preparation for second stage of the power."); + ClearAllActions(); + + // If out of range, move to range + _ManifestationRangeCheck(oManifester, nPower, GetIsObjectValid(oTarget) ? GetLocation(oTarget) : lTarget); + + // Start the manifestation monitor HB + DelayCommand(nManifDur / 1000.0f, ActionDoCommand(_ManifestationHB(oManifester, GetLocation(oManifester), oMfToken))); + + // Assuming the spell isn't used as a swift action, fakecast for visuals + if(nManifDur > 0) + { + // Hack. Workaround of a bug with the fakecast actions. See function comment for details + ActionDoCommand(_AssignUsePowerFakeCastCommands(oManifester, oTarget, lTarget, nSpellID)); + } + + // Action queue the function that will cheatcast the actual power + DelayCommand(nManifDur / 1000.0f, AssignCommand(oManifester, ActionDoCommand(_UsePowerAux(oManifester, oMfToken, nSpellID, oTarget, lTarget, nPower, nClass, bIsPsiLike, nLevelOverride, bQuicken)))); +} + +string DebugManifestation2Str(struct manifestation manif) +{ + string sRet; + + sRet += "oManifester = " + DebugObject2Str(manif.oManifester) + "\n"; + sRet += "bCanManifest = " + DebugBool2String(manif.bCanManifest) + "\n"; + sRet += "nPPCost = " + IntToString(manif.nPPCost) + "\n"; + sRet += "nPsiFocUsesRemain = " + IntToString(manif.nPsiFocUsesRemain) + "\n"; + sRet += "nManifesterLevel = " + IntToString(manif.nManifesterLevel) + "\n"; + + sRet += "nTimesAugOptUsed_1 = " + IntToString(manif.nTimesAugOptUsed_1) + "\n"; + sRet += "nTimesAugOptUsed_2 = " + IntToString(manif.nTimesAugOptUsed_2) + "\n"; + sRet += "nTimesAugOptUsed_3 = " + IntToString(manif.nTimesAugOptUsed_3) + "\n"; + sRet += "nTimesAugOptUsed_4 = " + IntToString(manif.nTimesAugOptUsed_4) + "\n"; + sRet += "nTimesAugOptUsed_5 = " + IntToString(manif.nTimesAugOptUsed_5) + "\n"; + sRet += "nTimesGenericAugUsed = " + IntToString(manif.nTimesGenericAugUsed) + "\n"; + + sRet += "bChain = " + DebugBool2String(manif.bChain) + "\n"; + sRet += "bEmpower = " + DebugBool2String(manif.bEmpower) + "\n"; + sRet += "bExtend = " + DebugBool2String(manif.bExtend) + "\n"; + sRet += "bMaximize = " + DebugBool2String(manif.bMaximize) + "\n"; + sRet += "bSplit = " + DebugBool2String(manif.bSplit) + "\n"; + sRet += "bTwin = " + DebugBool2String(manif.bTwin) + "\n"; + sRet += "bWiden = " + DebugBool2String(manif.bWiden) + "\n"; + sRet += "bQuicken = " + DebugBool2String(manif.bQuicken);// + "\n"; + + return sRet; +} + +void SetLocalManifestation(object oObject, string sName, struct manifestation manif) +{ + //SetLocal (oObject, sName + "_", ); + SetLocalObject(oObject, sName + "_oManifester", manif.oManifester); + + SetLocalInt(oObject, sName + "_bCanManifest", manif.bCanManifest); + SetLocalInt(oObject, sName + "_nPPCost", manif.nPPCost); + SetLocalInt(oObject, sName + "_nPsiFocUsesRemain", manif.nPsiFocUsesRemain); + SetLocalInt(oObject, sName + "_nManifesterLevel", manif.nManifesterLevel); + SetLocalInt(oObject, sName + "_nSpellID", manif.nSpellID); + + SetLocalInt(oObject, sName + "_nTimesAugOptUsed_1", manif.nTimesAugOptUsed_1); + SetLocalInt(oObject, sName + "_nTimesAugOptUsed_2", manif.nTimesAugOptUsed_2); + SetLocalInt(oObject, sName + "_nTimesAugOptUsed_3", manif.nTimesAugOptUsed_3); + SetLocalInt(oObject, sName + "_nTimesAugOptUsed_4", manif.nTimesAugOptUsed_4); + SetLocalInt(oObject, sName + "_nTimesAugOptUsed_5", manif.nTimesAugOptUsed_5); + SetLocalInt(oObject, sName + "_nTimesGenericAugUsed", manif.nTimesGenericAugUsed); + + SetLocalInt(oObject, sName + "_bChain", manif.bChain); + SetLocalInt(oObject, sName + "_bEmpower", manif.bEmpower); + SetLocalInt(oObject, sName + "_bExtend", manif.bExtend); + SetLocalInt(oObject, sName + "_bMaximize", manif.bMaximize); + SetLocalInt(oObject, sName + "_bSplit", manif.bSplit); + SetLocalInt(oObject, sName + "_bTwin", manif.bTwin); + SetLocalInt(oObject, sName + "_bWiden", manif.bWiden); + SetLocalInt(oObject, sName + "_bQuicken", manif.bQuicken); +} + +struct manifestation GetLocalManifestation(object oObject, string sName) +{ + struct manifestation manif; + manif.oManifester = GetLocalObject(oObject, sName + "_oManifester"); + + manif.bCanManifest = GetLocalInt(oObject, sName + "_bCanManifest"); + manif.nPPCost = GetLocalInt(oObject, sName + "_nPPCost"); + manif.nPsiFocUsesRemain = GetLocalInt(oObject, sName + "_nPsiFocUsesRemain"); + manif.nManifesterLevel = GetLocalInt(oObject, sName + "_nManifesterLevel"); + manif.nSpellID = GetLocalInt(oObject, sName + "_nSpellID"); + + manif.nTimesAugOptUsed_1 = GetLocalInt(oObject, sName + "_nTimesAugOptUsed_1"); + manif.nTimesAugOptUsed_2 = GetLocalInt(oObject, sName + "_nTimesAugOptUsed_2"); + manif.nTimesAugOptUsed_3 = GetLocalInt(oObject, sName + "_nTimesAugOptUsed_3"); + manif.nTimesAugOptUsed_4 = GetLocalInt(oObject, sName + "_nTimesAugOptUsed_4"); + manif.nTimesAugOptUsed_5 = GetLocalInt(oObject, sName + "_nTimesAugOptUsed_5"); + manif.nTimesGenericAugUsed = GetLocalInt(oObject, sName + "_nTimesGenericAugUsed"); + + manif.bChain = GetLocalInt(oObject, sName + "_bChain"); + manif.bEmpower = GetLocalInt(oObject, sName + "_bEmpower"); + manif.bExtend = GetLocalInt(oObject, sName + "_bExtend"); + manif.bMaximize = GetLocalInt(oObject, sName + "_bMaximize"); + manif.bSplit = GetLocalInt(oObject, sName + "_bSplit"); + manif.bTwin = GetLocalInt(oObject, sName + "_bTwin"); + manif.bWiden = GetLocalInt(oObject, sName + "_bWiden"); + manif.bQuicken = GetLocalInt(oObject, sName + "_bQuicken"); + + return manif; +} + +void DebugIgnoreConstraints(object oManifester) +{ + SetLocalInt(oManifester, PRC_DEBUG_IGNORE_CONSTRAINTS, TRUE); + DelayCommand(0.0f, DeleteLocalInt(oManifester, PRC_DEBUG_IGNORE_CONSTRAINTS)); +} + +//Below is a modification of Evaluate Manifestation for the Diamond Dragon abilities +struct manifestation EvaluateDiaDragChannel(object oManifester, object oTarget, struct power_augment_profile pap, int nPowerLevel) +{ + /* Get some data */ + int bIgnoreConstraints = (DEBUG) ? GetLocalInt(oManifester, PRC_DEBUG_IGNORE_CONSTRAINTS) : FALSE; + // Manifester-related stuff + int nClass = GetPrimaryPsionicClass(oManifester); + int nWildSurge = GetWildSurge(oManifester); + //When Manifester level is retrieved, remove Wildsurge and Overchannel bonuses as they don't apply + int nManifesterLevel = GetManifesterLevel(oManifester, nClass); + int nManifesterPP = GetCurrentPowerPoints(oManifester); + + /* Initialise the manifestation structure */ + struct manifestation manif; + manif.oManifester = oManifester; + manif.bCanManifest = TRUE; // Assume successfull manifestation by default + manif.nPPCost = nPowerLevel * 2 - 1; // Initialise the cost to the base cost of the power + manif.nPsiFocUsesRemain = 0; // Not needed + manif.nManifesterLevel = nManifesterLevel; + manif.nSpellID = PRCGetSpellId(); + + // Run an ability score check to see if the manifester can manifest the power at all + if(GetAbilityScoreOfClass(oManifester, nClass) - 10 < nPowerLevel && (!bIgnoreConstraints)) + { + FloatingTextStrRefOnCreature(16826411, oManifester, FALSE); // "You do not have a high enough ability score to manifest this power" + manif.bCanManifest = FALSE; + } + + // Account for augmentation. This factors in Wild Surge cost reduction + manif = EvaluateAugmentation(manif, pap); + + // Skip paying anything if something has prevented successfull manifestation already by this point + if(manif.bCanManifest) + { + //Remove the Wild Surge cost reduction + manif.nPPCost += nWildSurge; + /* The manifester level value includes the manifester level increase from + * Wild Surge, but since the calculated cost already contains the augmentation + * cost reduction provided by Wild Surge, it should not apply here. + */ + if((nManifesterLevel) >= manif.nPPCost || bIgnoreConstraints) + { + + //If the manifester does not have enough points before hostile modifiers, cancel power + if(manif.nPPCost > nManifesterPP && !bIgnoreConstraints) + { + FloatingTextStrRefOnCreature(16826412, oManifester, FALSE); // "You do not have enough Power Points to manifest this power" + manif.bCanManifest = FALSE; + } + // The manifester has enough power points that they would be able to use the power, barring extra costs + else + { + //* ADD ALL COST INCREASING FACTORS THAT WILL CAUSE PP LOSS EVEN IF THEY MAKE THE POWER FAIL ABOVE *// + + if(manif.nPPCost > nManifesterPP && !bIgnoreConstraints) + { + FloatingTextStrRefOnCreature(16826413, oManifester, FALSE); // "Your target's abilities cause you to use more Power Points than you have. The power fails" + manif.bCanManifest = FALSE; + } + + // Set the power points to their new value and inform the manifester + LosePowerPoints(oManifester, manif.nPPCost, TRUE); + + } + } + // Cost was over the manifester cap + else + {// "Your manifester level is not high enough to spend X Power Points" + FloatingTextStringOnCreature(GetStringByStrRef(16826410) + " " + IntToString(manif.nPPCost) + " " + GetStringByStrRef(16826409), oManifester, FALSE); + manif.bCanManifest = FALSE; + } + }//end if - Something hadn't prevented successfull manifestation already before paying the power costs + + if(DEBUG) DoDebug("EvaluateManifestation(): Final result:\n" + DebugManifestation2Str(manif)); + + // Initiate manifestation-related variable cleanup + DelayCommand(0.5f, _CleanManifestationVariables(oManifester)); + + return manif; +} + +// Test main +//void main(){} diff --git a/src/include/psi_inc_pwresist.nss b/src/include/psi_inc_pwresist.nss new file mode 100644 index 0000000..e1c5a96 --- /dev/null +++ b/src/include/psi_inc_pwresist.nss @@ -0,0 +1,148 @@ +/* + ---------------- + prc_inc_psionics + ---------------- + + 20/10/04 by Stratovarius + + Calculates Power Resistance for Psionics and performs the checks. +*/ + +/* +#include "prc_inc_racial" +#include "prc_feat_const" +#include "prc_class_const" +*/ +#include "prc_alterations" + +// Constants that dictate ResistPower results +const int POWER_RESIST_FAIL = 1; +const int POWER_RESIST_PASS = 0; + + +// +// This function is a wrapper should someone wish to rewrite the Bioware +// version. This is where it should be done. +// +int +PRCResistPower(object oCaster, object oTarget) +{ + return ResistSpell(oCaster, oTarget); +} + +// +// This function is a wrapper should someone wish to rewrite the Bioware +// version. This is where it should be done. +// +int +PRCGetPowerResistance(object oTarget, object oCaster) +{ + int iPowerRes = GetSpellResistance(oTarget); + + //racial pack SR + int iRacialPowerRes = 0; + if(GetHasFeat(FEAT_SPELL27, oTarget)) + iRacialPowerRes += 27+GetHitDice(oTarget); + else if(GetHasFeat(FEAT_SPELL25, oTarget)) + iRacialPowerRes += 25+GetHitDice(oTarget); + else if(GetHasFeat(FEAT_SPELL18, oTarget)) + iRacialPowerRes += 18+GetHitDice(oTarget); + else if(GetHasFeat(FEAT_SPELL16, oTarget)) + iRacialPowerRes += 16+GetHitDice(oTarget); + else if(GetHasFeat(FEAT_SPELL15, oTarget)) + iRacialPowerRes += 15+GetHitDice(oTarget); + else if(GetHasFeat(FEAT_SPELL14, oTarget)) + iRacialPowerRes += 14+GetHitDice(oTarget); + else if(GetHasFeat(FEAT_SPELL13, oTarget)) + iRacialPowerRes += 13+GetHitDice(oTarget); + else if(GetHasFeat(FEAT_SPELL11, oTarget)) + iRacialPowerRes += 11+GetHitDice(oTarget); + else if(GetHasFeat(FEAT_SPELL10, oTarget)) + iRacialPowerRes += 10+GetHitDice(oTarget); + else if(GetHasFeat(FEAT_SPELL5, oTarget)) + iRacialPowerRes += 5+GetHitDice(oTarget); + if(iRacialPowerRes > iPowerRes) + iPowerRes = iRacialPowerRes; + + // Exalted Companion, can also be used for Celestial Template + if (GetLocalInt(oTarget, "CelestialTemplate")) + { + int nHD = GetHitDice(oTarget); + int nSR = nHD * 2; + if (nSR > 25) nSR = 25; + if (nSR > iPowerRes) iPowerRes = nSR; + } + + // Thought Shield, 13 + augment vs Mind-Affecting + if(GetLocalInt(oTarget, "PRC_Power_ThoughtShield_PR") && + Get2DACache("spells", "ImmunityType", PRCGetSpellId()) == "Mind_Affecting" + ) + { + // Only use the PR given by the power if it's higher than the previous + iPowerRes = PRCMax(iPowerRes, GetLocalInt(oTarget, "PRC_Power_ThoughtShield_PR")); + } + // Tower of Iron Will, 19 + augment vs Mind-Affecting + if(GetLocalInt(oTarget, "PRC_Power_TowerOfIronWill_PR") && + Get2DACache("spells", "ImmunityType", PRCGetSpellId()) == "Mind_Affecting" + ) + { + // Only use the PR given by the power if it's higher than the previous + iPowerRes = PRCMax(iPowerRes, GetLocalInt(oTarget, "PRC_Power_TowerOfIronWill_PR")); + } + + // Foe Hunter SR stacks with normal SR + // when a Power is cast by their hated enemy + if(GetHasFeat(FEAT_HATED_ENEMY_SR, oTarget) && GetLocalInt(oTarget, "HatedFoe") == MyPRCGetRacialType(oCaster) ) + { + iPowerRes += 15 + GetLevelByClass(CLASS_TYPE_FOE_HUNTER, oTarget); + } + + return iPowerRes; +} + +// +// If a Power is resisted, display the effect +// +void +PRCShowPowerResist(object oCaster, object oTarget, int nResist, float fDelay = 0.0) +{ + // If either caster/target is a PC send them a message + if (GetIsPC(oCaster)) + { + string message = nResist == POWER_RESIST_FAIL ? + "Target is affected by the power." : "Target resisted the power."; + SendMessageToPC(oCaster, message); + } + if (GetIsPC(oTarget)) + { + string message = nResist == POWER_RESIST_FAIL ? + "You are affected by the power." : "You resisted the power."; + SendMessageToPC(oTarget, message); + } +} + +// +// This function overrides the BioWare MyResistSpell. +// TODO: Change name to PRCMyResistPower. +// +int +PRCMyResistPower(object oCaster, object oTarget, int nEffCasterLvl=0, float fDelay = 0.0) +{ + int nResist = POWER_RESIST_FAIL; + int nCasterCheck = nEffCasterLvl + d20(1); + int nTargetPR = PRCGetPowerResistance(oTarget, oCaster); + + // A tie favors the caster. + if (nCasterCheck < nTargetPR) nResist = POWER_RESIST_PASS; + + //Spellfire - done this way because constants may change + if(CheckSpellfire(oCaster, oTarget)) nResist = POWER_RESIST_PASS; + + // Only show resistance if the target has any + if (nTargetPR > 0) PRCShowPowerResist(oCaster, oTarget, nResist, fDelay); + + return nResist; +} + +// Test main +//void main(){} diff --git a/src/include/psi_inc_soulkn.nss b/src/include/psi_inc_soulkn.nss new file mode 100644 index 0000000..8a45a1d --- /dev/null +++ b/src/include/psi_inc_soulkn.nss @@ -0,0 +1,255 @@ +//:://///////////////////////////////////////////// +//:: Soulknife includes +//:: psi_inc_soulkn +//:://///////////////////////////////////////////// +/** @file Soulknife includes + Constants and common functions used by + Soulknife scripts. + + @author Ornedan + @date Created - 06.04.2005 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +#include "prc_alterations" +#include "prc_class_const" +#include "inc_utility" + + +////////////////////////////////////////////////// +/* Constant declarations */ +////////////////////////////////////////////////// + +const string MBLADE_SHAPE = "PRC_PSI_SK_MindbladeShape"; +const string FREEDRAW_USED = "PRC_PSI_SK_FreeDraw_Used"; +const string THROW_MBLD_USED = "PRC_PSI_SK_ThrowMindblade_Used"; +const string PSYCHIC_STRIKE_MAINH = "PRC_PSI_SK_PsychisStrike_MainHand"; +const string PSYCHIC_STRIKE_OFFH = "PRC_PSI_SK_PsychisStrike_OffHand"; +const string KTTS = "PRC_PSI_SK_KnifeToTheSoul"; +const string BLADEWIND = "PRC_PSI_SK_Bladewind_Active"; +const string MBLADE_HAND = "PRC_PSI_SK_MindbladeManifestationHand"; + +const int KTTS_TYPE_MASK = 3; // 2 LSB +const int KTTS_TYPE_OFF = 0; +const int KTTS_TYPE_INT = 1; +const int KTTS_TYPE_WIS = 2; +const int KTTS_TYPE_CHA = 3; + +const int MBLADE_SHAPE_SHORTSWORD = 0; +const int MBLADE_SHAPE_DUAL_SHORTSWORDS = 1; +const int MBLADE_SHAPE_LONGSWORD = 2; +const int MBLADE_SHAPE_BASTARDSWORD = 3; +const int MBLADE_SHAPE_RANGED = 4; // Actual shape is throwing axe + + +const string MBLADE_FLAGS = "PRC_PSI_SK_MindbladeFlags"; +const int MBLADE_FLAG_COUNT = 23; + +const int MBLADE_FLAG_LUCKY = 0x1; +const int MBLADE_FLAG_DEFENDING = 0x2; +const int MBLADE_FLAG_KEEN = 0x4; +const int MBLADE_FLAG_VICIOUS = 0x8; +const int MBLADE_FLAG_PSYCHOKINETIC = 0x10; +const int MBLADE_FLAG_MIGHTYCLEAVING = 0x20; +const int MBLADE_FLAG_COLLISION = 0x40; +const int MBLADE_FLAG_MINDCRUSHER = 0x80; +const int MBLADE_FLAG_PSYCHOKINETICBURST = 0x100; +const int MBLADE_FLAG_SUPPRESSION = 0x200; +const int MBLADE_FLAG_WOUNDING = 0x400; +const int MBLADE_FLAG_DISRUPTING = 0x800; +const int MBLADE_FLAG_SOULBREAKER = 0x1000; +const int MBLADE_FLAG_SHIELD_1 = 0x2000; +const int MBLADE_FLAG_SHIELD_2 = 0x4000; +const int MBLADE_FLAG_SHIELD_3 = 0x8000; +const int MBLADE_FLAG_SHIELD_4 = 0x10000; +const int MBLADE_FLAG_SHIELD_5 = 0x20000; +const int MBLADE_FLAG_SHIELD_6 = 0x40000; +const int MBLADE_FLAG_SHIELD_7 = 0x80000; +const int MBLADE_FLAG_SHIELD_8 = 0x100000; +const int MBLADE_FLAG_SHIELD_9 = 0x200000; +const int MBLADE_FLAG_SHIELD_10 = 0x400000; + + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +// Sums the enhancement costs of enhancements contained in the given flag set +// ========================================================================== +// nFlags a set of mindblade flags +// +// Returns the sum of the enhancements costs of the mindblade abilities +// set in nFlags. +int GetTotalEnhancementCost(int nFlags); + +// Gets the enhancement cost of the given mindblade ability +// ======================================================== +// nFlag one of the MBLADE_FLAG_* contants +int GetFlagCost(int nFlag); + +// Gets the maximum mindblade enhancement usable by the given creature +// =================================================================== +// oSK a creature to calculate the value of Soulknife class ability +// "Mind blade enhancement" for +int GetMaxEnhancementCost(object oSK); + +/** + * Checks the given object's tag to determine whether it is a mindblade + * or not. + * + * @param oWeapon Weapon to test + * @return TRUE if oWeapon is a mindblade, FALSE otherwise + */ +int GetIsMindblade(object oWeapon); + + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +int GetTotalEnhancementCost(int nFlags) +{ + int nCost, i; + for(; i < MBLADE_FLAG_COUNT; i++) + nCost += GetFlagCost(nFlags & (1 << i)); + return nCost; +} + +int GetFlagCost(int nFlag) +{ + switch(nFlag) + { + case 0: return 0; + case MBLADE_FLAG_LUCKY: return 1; + case MBLADE_FLAG_DEFENDING: return 1; + case MBLADE_FLAG_KEEN: return 1; + case MBLADE_FLAG_VICIOUS: return 1; + case MBLADE_FLAG_PSYCHOKINETIC: return 1; + case MBLADE_FLAG_MIGHTYCLEAVING: return 2; + case MBLADE_FLAG_COLLISION: return 2; + case MBLADE_FLAG_MINDCRUSHER: return 2; + case MBLADE_FLAG_PSYCHOKINETICBURST: return 2; + case MBLADE_FLAG_SUPPRESSION: return 2; + case MBLADE_FLAG_WOUNDING: return 2; + case MBLADE_FLAG_DISRUPTING: return 3; + case MBLADE_FLAG_SOULBREAKER: return 4; + case MBLADE_FLAG_SHIELD_1: return 1; + case MBLADE_FLAG_SHIELD_2: return 2; + case MBLADE_FLAG_SHIELD_3: return 3; + case MBLADE_FLAG_SHIELD_4: return 4; + case MBLADE_FLAG_SHIELD_5: return 5; + case MBLADE_FLAG_SHIELD_6: return 6; + case MBLADE_FLAG_SHIELD_7: return 7; + case MBLADE_FLAG_SHIELD_8: return 8; + case MBLADE_FLAG_SHIELD_9: return 9; + case MBLADE_FLAG_SHIELD_10: return 10; + + default: + WriteTimestampedLogEntry("Unknown flag passed to GetFlagCost: " + IntToString(nFlag)); + } + + return 0; +} + +int GetMaxEnhancementCost(object oSK) +{ + int nEffMBldLevel = GetLevelByClass(CLASS_TYPE_SOULKNIFE, oSK); + + if(GetHasFeat(FEAT_SOULBLADE_WARRIOR, oSK)) nEffMBldLevel += 2; + return (nEffMBldLevel - 2) / 4; +} + +int GetIsMindblade(object oWeapon) +{ + return GetStringLeft(GetTag(oWeapon), 14) == "prc_sk_mblade_"; +} + + + + + + +/* +/\/ Template used to generate the startingconditionals for Mindblade Enhancement convo \/\ +//:://///////////////////////////////////////////// +//:: Soulknife: Conversation - Show ~~~Name~~~ +//:: psi_sk_conv_~~~Suffix~~~ +//:://///////////////////////////////////////////// +/* + Checks whether to show ~~~Name~~~ and whether + it is to be added or removed. +/ +//::////////////////////////////////////////////// +//:: Created By: Ornedan +//:: Created On: 06.04.2005 +//::////////////////////////////////////////////// + +#include "psi_inc_sk_const" + + +int StartingConditional() +{ + int nReturn; // Implicit init to FALSE + // Check if the flag is already present + if(GetLocalInt(GetPCSpeaker(), MBLADE_FLAGS + "_T") & ~~~Flag~~~) + { + SetCustomToken(~~~TokenNum~~~, GetStringByStrRef(7654)); // Remove + nReturn = TRUE; + } + // It isn't, so see if there is enough bonus left to add it + else if(GetTotalEnhancementCost(GetLocalInt(GetPCSpeaker(), MBLADE_FLAGS + "_T")) + GetFlagCost(~~~Flag~~~) <= GetMaxEnhancementCost(GetPCSpeaker())) + { + SetCustomToken(~~~TokenNum~~~, GetStringByStrRef(62476)); // Add + nReturn = TRUE; + } + + return nReturn; +} + + +/\/ Template used to generate the toggles for Mindblade Enhancement convo \/\ +//:://///////////////////////////////////////////// +//:: Soulknife: Conversation - Toggle ~~~Name~~~ +//:: psi_sk_conv_~~~Suffix~~~ +//:://///////////////////////////////////////////// +/* + Adds or removes ~~~Name~~~ from the mindblade + flags. +/ +//::////////////////////////////////////////////// +//:: Created By: Ornedan +//:: Created On: 06.04.2005 +//::////////////////////////////////////////////// + +#include "psi_inc_sk_const" + + +void main() +{ + SetLocalInt(GetPCSpeaker(), MBLADE_FLAGS + "_T", + GetLocalInt(GetPCSpeaker(), MBLADE_FLAGS + "_T") ^ ~~~Flag~~~ + ); +} + + + +/\/ 2da files used for both \/\ +2DA V2.0 + + Suffix Name TokenNum Flag +0 lu_s Lucky 102 MBLADE_FLAG_LUCKY +1 de_s Defending 103 MBLADE_FLAG_DEFENDING +2 ke_s Keen 104 MBLADE_FLAG_KEEN +3 vi_s Vicous 105 MBLADE_FLAG_VICIOUS +4 ps_s Psychokinetic 106 MBLADE_FLAG_PSYCHOKINETIC +5 mc_s "Mighty Cleaving" 107 MBLADE_FLAG_MIGHTYCLEAVING +6 co_s Collision 108 MBLADE_FLAG_COLLISION +7 mi_s Mindcrusher 109 MBLADE_FLAG_MINDCRUSHER +8 pb_s "Psychokinetic Burst" 110 MBLADE_FLAG_PSYCHOKINETICBURST +9 su_s Suppression 111 MBLADE_FLAG_SUPPRESSION +10 wo_s Wounding 112 MBLADE_FLAG_WOUNDING +11 di_s Disrupting 113 MBLADE_FLAG_DISRUPTING +12 so_s Soulbreaker 114 MBLADE_FLAG_SOULBREAKER +*/ diff --git a/src/include/psi_power_const.nss b/src/include/psi_power_const.nss new file mode 100644 index 0000000..4d599c9 --- /dev/null +++ b/src/include/psi_power_const.nss @@ -0,0 +1,296 @@ +//real power spell constants + +// Level 1 Powers +const int POWER_BOLT = 14001; +const int POWER_CALLTOMIND = 14002; +const int POWER_CHARMPERSON = 14003; +const int POWER_CRYSTALSHARD = 14004; +const int POWER_DAZE = 14005; +const int POWER_DECELERATION = 14006; +const int POWER_DEFPRECOG = 14007; +const int POWER_DEMORALIZE = 14008; +const int POWER_DISABLE = 14009; +const int POWER_DISSIPATINGTOUCH = 14010; +const int POWER_DISTRACT = 14011; +const int POWER_EMPTYMIND = 14012; +const int POWER_CONCEALTHOUGHT = 14013; +const int POWER_ENERGYRAY_COLD = 14014; +const int POWER_ENERGYRAY_ELEC = 14015; +const int POWER_ENERGYRAY_FIRE = 14016; +const int POWER_ENERGYRAY_SONIC = 14017; +const int POWER_ENTANGLE = 14018; +const int POWER_FORCESCREEN = 14019; +const int POWER_GREASE = 14020; +const int POWER_GRIP_IRON = 14265; +const int POWER_HAMMER = 14021; +const int POWER_INERTIALARMOUR = 14022; +const int POWER_MINDTHRUST = 14023; +const int POWER_MYLIGHT = 14024; +const int POWER_OFFPRECOG = 14025; +const int POWER_OFFPRESC = 14026; +const int POWER_STOMP = 14027; +const int POWER_SYNESTHETE = 14028; +const int POWER_THICKSKIN = 14029; +const int POWER_VIGOR = 14030; +const int POWER_EMPATHY = 14031; +const int POWER_FARHAND = 14032; +const int POWER_MATTERAGITATION = 14033; +const int POWER_SKATE = 14034; +const int POWER_TELEMPATHICPRO = 14035; +const int POWER_ASTRALCONSTRUCT_SLOT1 = 14036; +const int POWER_ASTRALCONSTRUCT_SLOT2 = 14037; +const int POWER_ASTRALCONSTRUCT_SLOT3 = 14038; +const int POWER_ASTRALCONSTRUCT_SLOT4 = 14039; +const int POWER_BURST = 14041; +const int POWER_DESTINYDISSONANCE = 14042; +const int POWER_PRECOGNITION_MAIN = 14043; +const int POWER_PRECOGNITION_ATTACK = 14044; +const int POWER_PRECOGNITION_DAMAGE = 14045; +const int POWER_PRECOGNITION_SAVES = 14046; +const int POWER_PRECOGNITION_SKILLS = 14047; +const int POWER_BITE_WOLF = 14048; +const int POWER_CLAWS_BEAST = 14049; +const int POWER_CREATESOUND = 14050; +const int POWER_CALL_WEAPONRY = 14257; +const int POWER_COMPRESSION = 14258; +const int POWER_EXPANSION = 14259; +const int POWER_CONTROL_OBJECT = 14260; +const int POWER_METAPHYSICAL_CLAW = 14261; +const int POWER_METAPHYSICAL_WEAPON = 14262; +const int POWER_PREVENOM = 14263; +const int POWER_PREVENOM_WEAPON = 14264; + +// Level 2 Powers +const int POWER_BESTOWPOWER = 14051; +const int POWER_BIOFEEDBACK = 14052; +const int POWER_BRAINLOCK = 14053; +const int POWER_CONCBLAST = 14054; +const int POWER_CONCEALAMORPHA = 14055; +const int POWER_CRYSTALSWARM = 14056; +const int POWER_DISSOLVINGTOUCH = 14057; +const int POWER_EGOWHIP = 14058; +const int POWER_ELFSIGHT = 14059; +const int POWER_ENERGYADAPTACID = 14060; +const int POWER_ENERGYADAPTCOLD = 14061; +const int POWER_ENERGYADAPTELEC = 14062; +const int POWER_ENERGYADAPTFIRE = 14063; +const int POWER_ENERGYADAPTSONIC = 14064; +const int POWER_BODY_EQUILIBRIUM = 14065; +const int POWER_PAINFUL_STRIKE = 14066; +const int POWER_ENERGYPUSH_COLD = 14067; +const int POWER_ENERGYPUSH_ELEC = 14068; +const int POWER_ENERGYPUSH_FIRE = 14069; +const int POWER_ENERGYPUSH_SONIC = 14070; +const int POWER_LOCK = 14071; +const int POWER_ENERGYSTUN_COLD = 14072; +const int POWER_ENERGYSTUN_ELEC = 14073; +const int POWER_ENERGYSTUN_FIRE = 14074; +const int POWER_ENERGYSTUN_SONIC = 14075; +const int POWER_IDENTIFY = 14076; +const int POWER_IDINSINUATION = 14077; +const int POWER_INFLICTPAIN = 14078; +const int POWER_KNOCK = 14079; +const int POWER_MINDDISRUPT = 14080; +const int POWER_RECALLAGONY = 14081; +const int POWER_THOUGHTSHIELD = 14082; +const int POWER_DISSOLVEWEAP = 14083; +const int POWER_SHAREPAIN = 14084; +const int POWER_CONTROLAIR = 14085; +const int POWER_CONTROLSOUND = 14086; +const int POWER_REPAIRDAMAGE = 14087; +const int POWER_AVERSION = 14088; +const int POWER_DIMENSIONSWAP = 14089; +const int POWER_EMPATHICTRANSFER = 14090; +const int POWER_ENERGYMISSILE_COLD = 14091; +const int POWER_ENERGYMISSILE_ELEC = 14092; +const int POWER_ENERGYMISSILE_FIRE = 14093; +const int POWER_ENERGYMISSILE_SONIC = 14094; +const int POWER_ANIMAL_AFFINITY = 14095; +const int POWER_STRENGTH_OF_MY_ENEMY = 14096; +const int POWER_CHAMELEON = 14097; +const int POWER_CLAIRVOYANT_SENSE = 14098; +const int POWER_CLOUD_MIND = 14099; + +// Level 3 Powers +const int POWER_BODYADJUST = 14100; +const int POWER_GREATAMORPHA = 14101; +const int POWER_DARKVISION = 14102; +const int POWER_PSIBLAST = 14103; +const int POWER_DANGERSENSE = 14104; +const int POWER_ENERGYBOLT_COLD = 14105; +const int POWER_ENERGYBOLT_ELEC = 14106; +const int POWER_ENERGYBOLT_FIRE = 14107; +const int POWER_ENERGYBOLT_SONIC = 14108; +const int POWER_ENERGYBURST_COLD = 14109; +const int POWER_ENERGYBURST_ELEC = 14110; +const int POWER_ENERGYBURST_FIRE = 14111; +const int POWER_ENERGYBURST_SONIC = 14112; +const int POWER_ENERGYRETORT_COLD = 14113; +const int POWER_ENERGYRETORT_ELEC = 14114; +const int POWER_ENERGYRETORT_FIRE = 14115; +const int POWER_ENERGYRETORT_SONIC = 14116; +const int POWER_EXHALEBLACKDRAG = 14117; +const int POWER_ERADICATEINVIS = 14118; +const int POWER_SHAREPAINFORCED = 14119; +const int POWER_KEENEDGE = 14120; +const int POWER_MENTALBARRIER = 14121; +const int POWER_MINDTRAP = 14122; +const int POWER_TOUCHSIGHT = 14123; +const int POWER_BODYPURIFICATION = 14124; +const int POWER_DISPELPSIONICS = 14125; +const int POWER_ENERGYWALL_COLD = 14126; +const int POWER_ENERGYWALL_ELEC = 14127; +const int POWER_ENERGYWALL_FIRE = 14128; +const int POWER_ENERGYWALL_SONIC = 14129; +const int POWER_HUSTLE = 14130; +const int POWER_TIMEHOP = 14131; +const int POWER_UBIQVISION = 14132; +const int POWER_ECTOCOCOON = 14133; +const int POWER_CRISISBREATH = 14134; +const int POWER_EMPATHICTRANSFERHOSTILE = 14135; +const int POWER_FATELINK = 14136; +const int POWER_DIMENSION_SLIDE = 14137; +const int POWER_ECTOPLASMICFORM = 14138; +const int POWER_ENERGYCONE_COLD = 14139; +const int POWER_ENERGYCONE_ELEC = 14140; +const int POWER_ENERGYCONE_FIRE = 14141; +const int POWER_ENERGYCONE_SONIC = 14142; +const int POWER_CLAW_OF_THE_VAMPIRE = 14143; +const int POWER_DUODIMENSIONAL_CLAW = 14144; +const int POWER_VAMPIRIC_WEAPON = 14145; +const int POWER_ESCAPE_DETECTION = 14146; + +// Level 4 Powers +const int POWER_INERTBARRIER = 14147; +const int POWER_STEADFASTPERCEP = 14148; +const int POWER_DETECT_REMOTE_VIEWING = 14149; +const int POWER_EMPATHICFEEDBACK = 14150; +const int POWER_ENERGYADAPTION = 14151; +const int POWER_FREEDOM = 14152; +const int POWER_MINDWIPE = 14153; +const int POWER_POWERLEECH = 14154; +const int POWER_PSYCHICREFORMATION = 14155; +const int POWER_TELEKINETICMANEUVER = 14156; +const int POWER_DIMENSIONALANCHOR = 14157; +const int POWER_DISMISSAL = 14158; +const int POWER_DIMENSIONDOOR_SELFONLY = 14159; +const int POWER_DIMENSIONDOOR_PARTY = 14160; +const int POWER_DOMINATE = 14161; +const int POWER_DIMENSIONDOOR_SELFONLY_DIRDIST = 14163; +const int POWER_DIMENSIONDOOR_PARTY_DIRDIST = 14164; +const int POWER_ENERGYBALL_COLD = 14165; +const int POWER_ENERGYBALL_ELEC = 14166; +const int POWER_ENERGYBALL_FIRE = 14167; +const int POWER_ENERGYBALL_SONIC = 14168; +const int POWER_PSYCHICVAMPIRE = 14169; +const int POWER_CLAW_ENERGY_COLD = 14170; +const int POWER_CLAW_ENERGY_ELEC = 14171; +const int POWER_CLAW_ENERGY_FIRE = 14172; +const int POWER_IMMOVABILITY = 14173; +const int POWER_TRUEVENOM = 14174; +const int POWER_TRUEVENOM_WEAPON = 14175; +const int POWER_WEAPON_ENERGY_COLD = 14176; +const int POWER_WEAPON_ENERGY_ELEC = 14177; +const int POWER_WEAPON_ENERGY_FIRE = 14178; +const int POWER_INTELLECTFORTRESS = 14179; +const int POWER_REMOTE_VIEWING = 14180; + +// Level 5 Powers +const int POWER_BALEFULTEL = 14181; +const int POWER_ECTOSHAMBLER = 14182; +const int POWER_POWERRESISTANCE = 14183; +const int POWER_PSYCHICCRUSH = 14184; +const int POWER_TOWERIRONWILL = 14185; +const int POWER_TRUESEEING = 14186; +const int POWER_CATAPSI = 14187; +const int POWER_SHATTERMINDBLANK = 14188; +const int POWER_HAILCRYSTALS = 14189; +const int POWER_SECONDCHANCE = 14190; +const int POWER_TELEPORT_SELFONLY = 14191; +const int POWER_TELEPORT_PARTY = 14192; +const int POWER_ENERGYCURRENT_COLD = 14193; +const int POWER_ENERGYCURRENT_ELEC = 14194; +const int POWER_ENERGYCURRENT_FIRE = 14195; +const int POWER_ENERGYCURRENT_SONIC = 14196; +const int POWER_PSIONICREVIVIFY = 14197; +const int POWER_PSYCHOFEEDBACK = 14198; +const int POWER_CLAIRTANGENT_HAND = 14199; + +// Level 6 Powers +const int POWER_BREATHBLACKDRAGON = 14200; +const int POWER_DISINTEGRATE = 14201; +const int POWER_CRYSTALLIZE = 14202; +const int POWER_FUSEFLESH = 14203; +const int POWER_RETRIEVE = 14204; +const int POWER_TEMPORALACCELERATION = 14205; +const int POWER_BANISHMENT = 14206; +const int POWER_GREATERPRECOGNITION_MAIN = 14207; +const int POWER_GREATERPRECOGNITION_ATTACK = 14208; +const int POWER_GREATERPRECOGNITION_DAMAGE = 14209; +const int POWER_GREATERPRECOGNITION_SAVES = 14210; +const int POWER_GREATERPRECOGNITION_SKILLS = 14211; +const int POWER_PSIONICRESTORATION = 14212; +const int POWER_DISPELLING_BUFFER = 14213; +const int POWER_FORM_OF_DOOM = 14214; +const int POWER_NULL_PSIONICS_FIELD = 14215; +const int POWER_REMOTE_VIEW_TRAP = 14216; +const int POWER_CLOUD_MIND_MASS = 14217; + +// Level 7 Powers +const int POWER_CRISISLIFE = 14218; +const int POWER_DECEREBRATE = 14219; +const int POWER_ENERGYWAVE_COLD = 14220; +const int POWER_ENERGYWAVE_ELEC = 14221; +const int POWER_ENERGYWAVE_FIRE = 14222; +const int POWER_ENERGYWAVE_SONIC = 14223; +const int POWER_INSANITY = 14224; +const int POWER_MINDBLANKPERSONAL = 14225; +const int POWER_OAKBODY = 14226; +const int POWER_ULTRABLAST = 14227; +const int POWER_EVADEBURST = 14228; +const int POWER_MOMENTOFPRESCIENCEATTACK = 14229; +const int POWER_MOMENTOFPRESCIENCEARMOUR = 14230; +const int POWER_MOMENTOFPRESCIENCESAVES = 14231; +const int POWER_MOMENTOFPRESCIENCESKILLS = 14232; +const int POWER_ECTOCOCOONMASS = 14233; +const int POWER_ETHEREALJAUNT = 14234; +const int POWER_REDDOPSI = 14235; +const int POWER_SEQUESTER = 14236; + +// Level 8 Powers +const int POWER_RECALLDEATH = 14237; +const int POWER_IRONBODY = 14238; +const int POWER_PSIMINDBLANK = 14239; +const int POWER_TRUEMETABOLISM = 14240; +const int POWER_SHADOWBODY = 14241; +const int POWER_ASTRALSEED = 14242; +const int POWER_TIMEHOPMASS = 14243; +const int POWER_HYPERCOGNITION = 14244; +const int POWER_GREATER_TELEPORT_SELFONLY = 14245; +const int POWER_GREATER_TELEPORT_PARTY = 14246; + +// Level 9 Powers +const int POWER_ASSIMILATE = 14247; +const int POWER_ETHEREALNESS = 14248; +const int POWER_MICROCOSM = 14249; +const int POWER_TIMELESSBODY = 14250; +const int POWER_GENESIS = 14251; +const int POWER_PSYCHICCHIR_REPAIR = 14252; +const int POWER_TELEPORTATIONCIRCLE_VISIBLE = 14253; +const int POWER_TELEPORTATIONCIRCLE_HIDDEN = 14254; +const int POWER_PSYCHICCHIR_TRANSFER = 14255; +const int POWER_TORNADO_BLAST = 14256; + +//Diamond Dragon Powers +const int POWER_DIADRAG_CLAWS = 2459; +const int POWER_DIADRAG_WINGS = 2460; +const int POWER_DIADRAG_TAIL = 2462; +const int POWER_DIADRAG_DRAGONFEAR = 2463; +const int POWER_DIADRAG_BREATH_COLD = 2464; +const int POWER_DIADRAG_BREATH_ELEC = 2465; +const int POWER_DIADRAG_BREATH_FIRE = 2466; +const int POWER_DIADRAG_BREATH_SONIC = 2467; +const int POWER_DIADRAG_IMMUNITY = 2468; + +// Elan racial constant +const int POWER_ELAN_RESILIANCE = 1992; \ No newline at end of file diff --git a/src/include/psi_spellhook.nss b/src/include/psi_spellhook.nss new file mode 100644 index 0000000..12c651d --- /dev/null +++ b/src/include/psi_spellhook.nss @@ -0,0 +1,211 @@ +//:://///////////////////////////////////////////// +//:: Spell Hook Include File +//:: prc_psi_splhook +//::////////////////////////////////////////////// +/* + + This file acts as a hub for all code that + is hooked into the psionic spellscripts + +*/ +//::////////////////////////////////////////////// +//:: Created By: Stratovarius +//:: Created On: 20-10-2004 +//::////////////////////////////////////////////// + +//#include "prc_x2_craft" +#include "x2_inc_spellhook" +#include "prc_inc_spells" +#include "inc_utility" +#include "prc_inc_itmrstr" +#include "psi_inc_psifunc" + +// This function holds all functions that are supposed to run before the actual +// spellscript gets run. If this functions returns FALSE, the spell is aborted +// and the spellscript will not run +int PsiPrePowerCastCode(); + +//This function handles the "free swipe when manifesting" ability of the Diamond Dragon +void Dragonswipe() +{ + object oPC = OBJECT_SELF; + // If claws are not activated, exit + if(!GetLocalInt(oPC, "DiamondClawsOn")) return; + object oTarget = PRCGetSpellTargetObject(); + + // Get the item used to cast the spell + object oItem = GetSpellCastItem(); + + // Clawswipes only work on powers manifested by the Diamond Dragon, not by items he uses. + if (oItem != OBJECT_INVALID) + { + FloatingTextStringOnCreature("You do not gain clawswipes from Items.", OBJECT_SELF, FALSE); + return; + } + + effect eInvalid; + + if(TakeSwiftAction(oPC)) + { + //grab the closest enemy to swipe at + oTarget = GetNearestCreature(CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, oPC, 1, + CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY); + if (oTarget != oPC && GetDistanceToObject(oTarget) < FeetToMeters(15.0)) + { + object oClaw = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC); + PerformAttack(oTarget, oPC, eInvalid, 0.0, 0, 0, DAMAGE_TYPE_SLASHING, "*Clawswipe Hit*", "*Clawswipe Missed*", FALSE, oClaw); + } + } + +} + +//------------------------------------------------------------------------------ +// if FALSE is returned by this function, the spell will not be cast +// the order in which the functions are called here DOES MATTER, changing it +// WILL break the crafting subsystems +//------------------------------------------------------------------------------ +int PsiPrePowerCastCode() +{ + object oManifester = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + int nPowerID = PRCGetSpellId(); + int nPowerLevel = GetPowerLevel(oManifester); + int nManifestingClass = GetManifestingClass(oManifester); + int bPowerIsHostile = Get2DACache("spells", "HostileSetting", nPowerID) == "1"; + + int nContinue = !ExecuteScriptAndReturnInt("prespellcode", oManifester); + + //--------------------------------------------------------------------------- + // Break any spell require maintaining concentration + //--------------------------------------------------------------------------- + X2BreakConcentrationSpells(); + + // Ectoplasmic Form conc check + if (GetLocalInt(oTarget, "PRC_Power_EctoForm")) + { + nContinue = GetIsSkillSuccessful(oManifester, SKILL_CONCENTRATION, (20 + nPowerLevel)); + } + + //--------------------------------------------------------------------------- + // Run Disrupting Strike Check + //--------------------------------------------------------------------------- + if (nContinue && GetLocalInt(oManifester, "DisruptingStrike_PsionicsFail")) + { + nContinue = FALSE; + } + + //--------------------------------------------------------------------------- + // Check for PRC spell effects + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = PRCSpellEffects(oManifester, oTarget, nPowerID, nPowerLevel, nManifestingClass, bPowerIsHostile, -1); + + //--------------------------------------------------------------------------- + // Run Grappling Concentration Check + //--------------------------------------------------------------------------- + if (nContinue) + nContinue = GrappleConc(oManifester, nPowerLevel); + + //--------------------------------------------------------------------------- + // This stuff is only interesting for player characters we assume that use + // magic device always works and NPCs don't use the crafting feats or + // sequencers anyway. Thus, any NON PC spellcaster always exits this script + // with TRUE (unless they are DM possessed or in the Wild Magic Area in + // Chapter 2 of Hordes of the Underdark. + //--------------------------------------------------------------------------- + if(!GetIsPC(oManifester) + && !GetPRCSwitch(PRC_NPC_HAS_PC_SPELLCASTING)) + { + if(!GetIsDMPossessed(oManifester) && !GetLocalInt(GetArea(oManifester), "X2_L_WILD_MAGIC")) + { + return TRUE; + } + } + + if (nContinue) + { + //--------------------------------------------------------------------------- + // Run use magic device skill check + //--------------------------------------------------------------------------- + nContinue = X2UseMagicDeviceCheck(oManifester); + } + + if (nContinue) + { + //----------------------------------------------------------------------- + // run any user defined spellscript here + //----------------------------------------------------------------------- + nContinue = X2RunUserDefinedSpellScript(); + } + + //--------------------------------------------------------------------------- + // Check for the new restricted itemproperties + //--------------------------------------------------------------------------- + if(nContinue + && GetIsObjectValid(GetSpellCastItem()) + && !CheckPRCLimitations(GetSpellCastItem(), oManifester)) + { + SendMessageToPC(oManifester, "You cannot use "+GetName(GetSpellCastItem())); + nContinue = FALSE; + } + + //perform the clawswipe + Dragonswipe(); + + //--------------------------------------------------------------------------- + // The following code is only of interest if an item was targeted + //--------------------------------------------------------------------------- + if (GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM) + { + + //----------------------------------------------------------------------- + // Check if spell was used to trigger item creation feat + //----------------------------------------------------------------------- + if (nContinue) { + nContinue = !ExecuteScriptAndReturnInt("x2_pc_craft", oManifester); + } + + //----------------------------------------------------------------------- + // * Execute item OnSpellCast At routing script if activated + //----------------------------------------------------------------------- + SetUserDefinedItemEventNumber(X2_ITEM_EVENT_SPELLCAST_AT); + //Tag-based PRC scripts first + int nRet = ExecuteScriptAndReturnInt("is_"+GetTag(oTarget), oManifester); + if(nRet == X2_EXECUTE_SCRIPT_END) + return FALSE; + + if(GetModuleSwitchValue(MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS) == TRUE) + { + nRet = ExecuteScriptAndReturnInt(GetUserDefinedItemEventScriptName(oTarget), oManifester); + if(nRet == X2_EXECUTE_SCRIPT_END) + return FALSE; + } + + //----------------------------------------------------------------------- + // Prevent any spell that has no special coding to handle targetting of items + // from being cast on items. We do this because we can not predict how + // all the hundreds spells in NWN will react when cast on items + //----------------------------------------------------------------------- + if (nContinue) { + nContinue = X2CastOnItemWasAllowed(oTarget); + } + } + + //Cleaning spell variables used for holding the charge + if(!GetLocalInt(oManifester, "PRC_SPELL_EVENT")) + { + DeleteLocalInt(oManifester, "PRC_SPELL_CHARGE_COUNT"); + DeleteLocalInt(oManifester, "PRC_SPELL_CHARGE_SPELLID"); + DeleteLocalObject(oManifester, "PRC_SPELL_CONC_TARGET"); + DeleteLocalInt(oManifester, "PRC_SPELL_METAMAGIC"); + DeleteLocalManifestation(oManifester, "PRC_POWER_HOLD_MANIFESTATION"); + DeleteLocalMystery(oManifester, "MYST_HOLD_MYST"); + } + else if(GetLocalInt(oManifester, "PRC_SPELL_CHARGE_SPELLID") != PRCGetSpellId()) + { //Sanity check, in case something goes wrong with the action queue + DeleteLocalInt(oManifester, "PRC_SPELL_EVENT"); + } + + return nContinue; +} + diff --git a/src/include/sbr_include.nss b/src/include/sbr_include.nss new file mode 100644 index 0000000..be8e2dd --- /dev/null +++ b/src/include/sbr_include.nss @@ -0,0 +1,349 @@ +//:://///////////////////////////////////////////// +//:: Name Demetrious' Supply Based Rest +//:: FileName SBR_include +//::////////////////////////////////////////////// +// http://nwvault.ign.com/Files/scripts/data/1055903555000.shtml + +/* +Always recompile your module after modifying 'sbr_include' because it is an include file. +#1: Select "Build" from the toolset menu and then choose "Build Module". +#2: Click the "Advanced Controls" box to bring up the advanced options. +#3: Make sure that the only boxes that are selected are "Compile" and "Scripts". +#4: Click the "Build" button. +#5: Remember to always make sure you are using the options you want to use when running "Build Module"! +*/ + +#include "inc_logmessage" +#include "nw_i0_plot" + +// **************************************************************************** +// ** CONFIGURATION +// **************************************************************************** + +// The variable below sets up how the DM Rest widget is configured. +// Change this to true to only toggle rest module wide rather +// than using the 3 different level options. +// If this is TRUE clicking the ground, yourself or a player will +// toggle the Module level rest restiction. +// If FALSE, then you have 3 options. +// Target yourself = Module level toggle. +// Target ground (ie the area) = Area level toggle. +// Target player = Party level toggle. +// +// In either mode, targetting an NPC or other placeable will report +// all pertinent rest system information to you. +const int SBR_MAKE_IT_SIMPLE = FALSE; + +// This is the maximum distance the player can be from a "restful object" to +// automatically use it when they hit rest. +const float SBR_DISTANCE = 5.0; + +// This is the event number that will be signalled to your module OnUserDefined Event +// when a player rests. This user defined event is how you should extend the system +// so that specific things happen on rest. IE: create some wandering monsters, +// play a cutscene, teleport them to a "dream" area, etc. +const int SBR_EVENT_REST = 2000; + +// **************************************************************************** +// ** CONSTANTS - TAGS +// **************************************************************************** + +// These tags correspond to items that come with this package. + +const string SBR_KIT_WOODLAND = "woodlandkit"; +const string SBR_KIT_REGULAR = "supplykit"; +const string SBR_DM_WIDGET = "DMRestWidget"; + +// **************************************************************************** +// ** CONSTANTS - LOCAL VARIABLE NAMES +// **************************************************************************** + +const string SBR_RESTING = "SBR_SomeoneResting"; +const string SBR_SUPPLIES = "SBR_Supplies"; +const string SBR_USED_KIT = "SBR_UsedKit"; +const string SBR_REST_NOT_ALLOWED = "SBR_RestIsNotAllowed"; + +/* +Possible log levels for LogMessage 1.06 +// Do not send a message. +const int LOG_DISABLED = 0x0; +// Send only to the oPC who activated it (floating text) +const int LOG_PC = 0x1; +// Send only to the oPC who activated it (server message window) +const int LOG_PC_SERVER = 0x2; +// Send to all players on the server (server message window) +const int LOG_PC_ALL = 0x4; +// Send to the oPC and all of their party members (floating text) +const int LOG_PARTY = 0x8; +// Send to the oPC and all of their party members (server message window) +const int LOG_PARTY_SERVER = 0x10; +// Send to the oPC and their nearby (30m) party members (floating text) +const int LOG_PARTY_30 = 0x20; +// Send to the DM channel (DM channel) +const int LOG_DM_ALL = 0x40; +// Send to all DMs within distance 10m of oPC (floating text) +const int LOG_DM_10 = 0x80; +// Send to all DMs within distance 20m of oPC (floating text) +const int LOG_DM_20 = 0x100; +// Send to all DMs within distance 40m of oPC (floating text) +const int LOG_DM_40 = 0x200; +// Send to all DMs within distance 80m of oPC (floating text) +const int LOG_DM_80 = 0x400; +// Make oPC whisper the message (chat message window) +const int LOG_WHISPER = 0x800; +// Make oPC talk the message (chat message window) +const int LOG_TALK = 0x1000; +// Make oPC shout the message (chat message window) +const int LOG_SHOUT = 0x2000; +// Send to the server log file +const int LOG_TO_SERVER_LOG = 0x4000; +// Send to the server log file with time stamp +const int LOG_TIME_SERVER_LOG = 0x8000; +// Send to all DMs within distance 10m of oPC (server message window) +const int LOG_DM_10_SERVER = 0x10000; +// Send to all DMs within distance 20m of oPC (server message window) +const int LOG_DM_20_SERVER = 0x20000; +// Send to all DMs within distance 40m of oPC (server message window) +const int LOG_DM_40_SERVER = 0x40000; +// Send to all DMs within distance 80m of oPC (server message window) +const int LOG_DM_80_SERVER = 0x80000; +// Send to the oPC and all of their party members who percieve oPC (floating text) +const int LOG_PARTY_PERC = 0x100000; +// Send to the oPC and all of their party members who percieve oPC (server message window) +const int LOG_PARTY_PERC_SERVER = 0x200000; +// Send to the oPC and their nearby (10m) party members (floating text) +const int LOG_PARTY_10 = 0x400000; +// Send to the oPC and their nearby (20m) party members (floating text) +const int LOG_PARTY_20 = 0x800000; +// Send to the oPC and their nearby (40m) party members (floating text) +const int LOG_PARTY_40 = 0x1000000; +// Send to the oPC and their nearby (80m) party members (floating text) +const int LOG_PARTY_80 = 0x2000000; +// Send to all DMs as a server message +const int LOG_DM_ALL_SERVER = 0x4000000; +// Send to all party EXCEPT for the player who triggered as a server message +const int LOG_PARTY_ONLY = 0x8000000; +// Send to all party EXCEPT for the player *and people who can't see the player) who triggered as a server message +const int LOG_PARTY_PERC_ONLY = 0x10000000; +*/ + +//:://///////////////////////////////////////////// +//:: Report Rest Statistics to the DM +//:: uhhh.... no copyright - Demetrious +//::////////////////////////////////////////////// +void ReportStats(object oPC) +{ +object oPlayer = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC, oPC); +int iLogLevel = LOG_PC; // Log level used with LogMessage + +//report some general information to the DM not based on a specific player + if (GetLocalInt(GetModule(), SBR_REST_NOT_ALLOWED)==1) + LogMessage(iLogLevel, oPC, "MODULE REST DISABLED"); + else + LogMessage(iLogLevel, oPC, "MODULE REST ENABLED"); + + if (!SBR_MAKE_IT_SIMPLE) + { + if (GetLocalInt(GetArea(oPC), SBR_REST_NOT_ALLOWED)==1) + LogMessage(iLogLevel, oPC, "AREA REST DISABLED: "+GetName(GetArea(oPC))+"."); + else + LogMessage(iLogLevel, oPC, "AREA REST ENABLED: "+GetName(GetArea(oPC))+"."); + } + // see if there is a rest trigger in the area and alert the DM if there is one. + object oSafeTrigger = GetNearestObjectByTag("X0_SAFEREST", oPC); + if (GetArea(oSafeTrigger)==GetArea(oPC)) + LogMessage(iLogLevel, oPC, "Must Secure Region to Rest. AREA: "+ GetName(GetArea(oPC))+"."); + else + LogMessage(iLogLevel, oPC, "No rest triggers. AREA: "+ GetName(GetArea(oPC))+"."); + + // now look for the closest player and see if we can give more details to the DM. + int nSupply = 0; int nWoodland = 0; + + + if (!GetIsObjectValid(oPlayer)) + { + LogMessage(iLogLevel, oPC, "There are no characters near where you clicked."); + return; + } + else + { + object oCurrentPlayer = GetFirstFactionMember(oPlayer, TRUE); + + while (GetIsObjectValid(oCurrentPlayer)) + { + object oCurrent = GetFirstItemInInventory(oCurrentPlayer); + while (GetIsObjectValid(oCurrent)) + { + if (GetTag(oCurrent)==SBR_KIT_REGULAR) + { + nSupply = nSupply+1; + } + if (GetTag(oCurrent)==SBR_KIT_WOODLAND) + { + nWoodland = nWoodland+1; + } + + oCurrent = GetNextItemInInventory(oCurrentPlayer); + } + + oCurrentPlayer = GetNextFactionMember(oPlayer, TRUE); + } + + //Here we send all the information to the DM regarding the rest system and the closest player. + + LogMessage(iLogLevel, oPC, "Stats for (closest player): "+GetName(oPlayer)); + LogMessage(iLogLevel, oPC, IntToString(nSupply)+ " : Supply kits remaining in the party."); + LogMessage(iLogLevel, oPC, IntToString(nWoodland)+ " : Woodland kits remaining in the party."); + + if (!SBR_MAKE_IT_SIMPLE) + { + if (GetPLocalInt(oPlayer, SBR_REST_NOT_ALLOWED)==1) + LogMessage(iLogLevel, oPC, "PARTY REST DISABLED: "+GetName(oPlayer)+"."); + else + LogMessage(iLogLevel, oPC, "PARTY REST ENABLED: "+GetName(oPlayer)+"."); + } + +} + +} + + +//:://///////////////////////////////////////////// +//:: CreateKit function +//:: uhhh.... no copyright - Demetrious +//::////////////////////////////////////////////// +// This function creates the kit you just tried +// to use but could not for any number of reasons. +void CreateKit(object oPC, string sItemTag, int bOnGround = FALSE) +{ + string sResRef = sItemTag == SBR_KIT_WOODLAND ? "supplykit001" : "supplykit002"; + + //now give back the item the dumb player should not have tried to use :) + if (bOnGround == TRUE) + { + // Create the kit on the ground. + CreateObject(OBJECT_TYPE_ITEM, sResRef, GetLocation(oPC)); + } else { + // Create the kit on the player. + CreateItemOnObject(sResRef, oPC, 1); + } +} + + + +//:://///////////////////////////////////////////// +//:: CanIRest +//:: uhhh.... no copyright - Demetrious +//::////////////////////////////////////////////// +/* +Rest can be disabled on three different levels + +Module wide, area wide, and party wide. + +This flexibility is included due to the number of different manners +in which people run servers. + +The script will check for restrictions at each level +and return TRUE if no restrictions are found. +*/ +int CanIRest(object oPC) + { + int iLogLevel = LOG_DM_20; // Log level used with LogMessage + + if (GetLocalInt(GetModule(), SBR_REST_NOT_ALLOWED)==1) + { + LogMessage(iLogLevel, oPC, GetName(oPC)+" can't rest because of Module Level Restriction"); + return FALSE; + } + if (SBR_MAKE_IT_SIMPLE) + return TRUE; + + if (GetLocalInt(GetArea(oPC), SBR_REST_NOT_ALLOWED)==1) + { + LogMessage(iLogLevel, oPC, GetName(oPC)+" can't rest because of Area Level Restriction"); + return FALSE; + } + if (GetPLocalInt(oPC, SBR_REST_NOT_ALLOWED)==1) + { + LogMessage(iLogLevel, oPC, GetName(oPC)+" can't rest because of Party Level Restriction"); + return FALSE; + } + + return TRUE; + } + +//:://///////////////////////////////////////////// +//:: NotOnSafeRest +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + returns TRUE if the player is not in a safe + zone within an area. + + RULE: There must be at least one door + All doors must be closed + + - takes player object + - finds nearest safe zone + - is player in safe zone? + - find all doors in safe zone + - are all doors closed? + - if YES to all the above + is safe to rest, + RETURN FALSE + - otherwise give appropriate feedback and return TRUE + +EDITS: I added a quick check to look for the nearest trigger + in the SAME AREA ONLY. This is the only code that I + changed. - Demetrious +*/ +int NotOnSafeRest(object oPC) +{ // SpawnScriptDebugger(); + object oSafeTrigger = GetNearestObjectByTag("X0_SAFEREST", oPC); + int bAtLeastOneDoor = FALSE; + int bAllDoorsClosed = TRUE; + int bPCInTrigger = FALSE; + if (GetArea(oSafeTrigger)!=GetArea(oPC)) + return FALSE; + + if (GetIsObjectValid(oSafeTrigger)) + { + if (GetObjectType(oSafeTrigger) == OBJECT_TYPE_TRIGGER) + { + + // * cycle through trigger looking for oPC + // * and looking for closed doors + object oInTrig = GetFirstInPersistentObject(oSafeTrigger, OBJECT_TYPE_ALL); + while (GetIsObjectValid(oInTrig) == TRUE) + { + // * rester is in trigger! + if (oPC == oInTrig) + { + bPCInTrigger = TRUE; + } + else + { + // * one door found + if (GetObjectType(oInTrig) == OBJECT_TYPE_DOOR) + { + bAtLeastOneDoor = TRUE; + // * the door was open, exit + if (GetIsOpen(oInTrig) == TRUE) + { + return TRUE; //* I am no in a safe rest place because a door is open + } + } + } + oInTrig = GetNextInPersistentObject(oSafeTrigger, OBJECT_TYPE_ALL); + } + } + } + if (bPCInTrigger == FALSE || bAtLeastOneDoor == FALSE) + { + return TRUE; + } + // * You are in a safe trigger, if in a trigger, and all doors closed on that trigger. + return FALSE; +} + + diff --git a/src/include/shd_inc_metashd.nss b/src/include/shd_inc_metashd.nss new file mode 100644 index 0000000..47cf347 --- /dev/null +++ b/src/include/shd_inc_metashd.nss @@ -0,0 +1,236 @@ +//:://///////////////////////////////////////////// +//:: Shadowcasting include: Metashadow +//:: shd_inc_metashd +//:://///////////////////////////////////////////// +/** @file + Defines functions for handling metashadows + + @author Stratovarius + @date Created - 2019.2.7 + @thanks to Ornedan for his work on Psionics upon which this is based. +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +#include "shd_myst_const" + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +/// No metashadows +const int METASHADOW_NONE = 0x0; +/// Quicken mystery +const int METASHADOW_QUICKEN = 0x2; +/// Empower mystery +const int METASHADOW_EMPOWER = 0x4; +/// Extend mystery +const int METASHADOW_EXTEND = 0x8; +/// Maximize mystery +const int METASHADOW_MAXIMIZE = 0x16; +/// Maximize mystery +const int METASHADOW_STILL = 0x32; + +/// Internal constant. Value is equal to the lowest metashadow constant. Used when looping over metashadow flag variables +const int METASHADOW_MIN = 0x2; +/// Internal constant. Value is equal to the highest metashadow constant. Used when looping over metashadow flag variables +const int METASHADOW_MAX = 0x32; + +/// Empower Mystery variable name +const string METASHADOW_EMPOWER_VAR = "PRC_ShadMeta_Empower"; +/// Extend Mystery variable name +const string METASHADOW_EXTEND_VAR = "PRC_ShadMeta_Extend"; +/// Quicken Mystery variable name +const string METASHADOW_QUICKEN_VAR = "PRC_ShadMeta_Quicken"; +/// Maximize Mystery variable name +const string METASHADOW_MAXIMIZE_VAR = "PRC_ShadMeta_Maximize"; +/// Still Mystery variable name +const string METASHADOW_STILL_VAR = "PRC_ShadMeta_Still"; + +/// The name of a marker variable that tells that the Mystery being shadowcast had Quicken Mystery used on it +const string PRC_MYSTERY_IS_QUICKENED = "PRC_MysteryIsQuickened"; + +////////////////////////////////////////////////// +/* Structures */ +////////////////////////////////////////////////// + +/** + * A structure that contains common data used during mystery. + */ +struct mystery{ + /* Generic stuff */ + /// The creature Shadowcasting the Mystery + object oShadow; + /// Whether the mystery is successful or not + int bCanMyst; + /// The creature's shadowcaster level in regards to this mystery + int nShadowcasterLevel; + /// The mystery's spell ID + int nMystId; + /// Used to mark mysteries that have gone supernatural + int bIgnoreSR; + + /* Metashadows */ + /// Whether Empower mystery was used with this mystery + int bEmpower; + /// Whether Extend mystery was used with this mystery + int bExtend; + /// Whether Quicken mystery was used with this mystery + int bQuicken; + /// Whether Maximize mystery was used with this mystery + int bMaximize; + /// Whether Still mystery was used with this mystery + int bStill; + + /* Speak Unto the Masses */ + // Check if the target is a friend of not + int bFriend; + // Saving Throw DC + int nSaveDC; + // Saving Throw + int nSaveThrow; + // Saving Throw Type + int nSaveType; + // Spell Pen + int nPen; + // Duration Effects + effect eLink; + // Impact Effects + effect eLink2; + // Any Item Property + itemproperty ipIProp1; + // Any Item Property + itemproperty ipIProp2; + // Any Item Property + itemproperty ipIProp3; + // Duration + float fDur; +}; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Determines the metashadows used in this mystery of a mystery + * and the cost added by their use. + * + * @param myst The mystery data related to this particular mystery + * @param nMetaMystFlags An integer containing a set of bitflags that determine + * which metashadow mysterys may be used with the Mystery being shadowcast + * + * @return The mystery data, modified to account for the metashadows + */ +struct mystery EvaluateMetashadows(struct mystery myst, int nMetaMystFlags); + +/** + * Calculates a mystery's damage based on the given dice and metashadows. + * + * @param nDieSize Size of the dice to use + * @param nNumberOfDice Amount of dice to roll + * @param nBonus A bonus amount of damage to add into the total once + * @param nBonusPerDie A bonus amount of damage to add into the total for each die rolled + * @param bDoesHPDamage Whether the Mystery deals hit point damage, or some other form of point damage + * @param bIsRayOrRangedTouch Whether the mystery's use involves a ranged touch attack roll or not + * @return The amount of damage the Mystery should deal + */ +int MetashadowsDamage(struct mystery myst, int nDieSize, int nNumberOfDice, int nBonus = 0, + int nBonusPerDie = 0, int bDoesHPDamage = FALSE, int bIsRayOrRangedTouch = FALSE); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "inc_utility" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +struct mystery EvaluateMetashadows(struct mystery myst, int nMetaMystFlags) +{ + // Quicken Mystery - special handling + if(GetLocalInt(myst.oShadow, PRC_MYSTERY_IS_QUICKENED)) + { + // Mark the mystery as quickened here + myst.bQuicken = TRUE; + + // Delete the marker var + DeleteLocalInt(myst.oShadow, PRC_MYSTERY_IS_QUICKENED); + } + + if((nMetaMystFlags & METASHADOW_EMPOWER) && (GetLocalInt(myst.oShadow, METASHADOW_EMPOWER_VAR) || GetLocalInt(myst.oShadow, "FloodShadow"))) + { + // Mark the mystery as empowered here + myst.bEmpower = TRUE; + // Then clear the variable + DeleteLocalInt(myst.oShadow, METASHADOW_EMPOWER_VAR); + } + if((nMetaMystFlags & METASHADOW_EXTEND) && GetLocalInt(myst.oShadow, METASHADOW_EXTEND_VAR)) + { + // Mark the mystery as extended here + myst.bExtend = TRUE; + // Then clear the variable + DeleteLocalInt(myst.oShadow, METASHADOW_EXTEND_VAR); + } + if((nMetaMystFlags & METASHADOW_MAXIMIZE) && GetLocalInt(myst.oShadow, METASHADOW_MAXIMIZE_VAR)) + { + // Mark the mystery as maximized here + myst.bMaximize = TRUE; + // Then clear the variable + DeleteLocalInt(myst.oShadow, METASHADOW_MAXIMIZE_VAR); + } + + return myst; +} + +int MetashadowsDamage(struct mystery myst, int nDieSize, int nNumberOfDice, int nBonus = 0, + int nBonusPerDie = 0, int bDoesHPDamage = FALSE, int bIsRayOrRangedTouch = FALSE) +{ + int nBaseDamage = 0, + nBonusDamage = nBonus + (nNumberOfDice * nBonusPerDie); + + // Calculate the base damage + int i; + for (i = 0; i < nNumberOfDice; i++) + nBaseDamage += Random(nDieSize) + 1; + + + // Apply general modifying effects + if(bDoesHPDamage) + { + if(bIsRayOrRangedTouch) + { + // Anything that affects Ray Mysterys goes here + } + } + + // Apply metashadows + // Both empower & maximize + if(myst.bEmpower && myst.bMaximize) + { + nBaseDamage = nBaseDamage / 2 + nDieSize * nNumberOfDice; + if(DEBUG) DoDebug("MetashadowsDamage(): Empower + Max"); + } + // Just empower + else if(myst.bEmpower) + { + nBaseDamage += nBaseDamage / 2; + if(DEBUG) DoDebug("MetashadowsDamage(): Empower only"); + } + // Just maximize + else if(myst.bMaximize) + { + nBaseDamage = nDieSize * nNumberOfDice; + if(DEBUG) DoDebug("MetashadowsDamage(): Max only"); + } + + return nBaseDamage + nBonusDamage; +} + +// Test main +//void main(){} diff --git a/src/include/shd_inc_myst.nss b/src/include/shd_inc_myst.nss new file mode 100644 index 0000000..40d7f93 --- /dev/null +++ b/src/include/shd_inc_myst.nss @@ -0,0 +1,722 @@ +//:://///////////////////////////////////////////// +//:: Shadowcasting include: Shadowcasting +//:: shd_inc_myst +//:://///////////////////////////////////////////// +/** @file + Defines structures and functions for handling + shadowcasting a mystery + + @author Stratovarius + @date Created - 2019.2.7 + @thanks to Ornedan for his work on Psionics upon which this is based. +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const string PRC_SHADOWCASTING_CLASS = "PRC_CurrentMystery_ShadowcastingClass"; +const string PRC_MYSTERY_LEVEL = "PRC_CurrentMystery_Level"; +const string MYST_DEBUG_IGNORE_CONSTRAINTS = "MYST_DEBUG_IGNORE_CONSTRAINTS"; + +/** + * The variable in which the mystery token is stored. If no token exists, + * the variable is set to point at the shadowcaster itself. That way OBJECT_INVALID + * means the variable is unitialised. + */ +//const string PRC_MYSTERY_TOKEN_VAR = "PRC_MysteryToken"; +//const string PRC_MYSTERY_TOKEN_NAME = "PRC_MYSTTOKEN"; +//const float PRC_MYSTERY_HB_DELAY = 0.5f; + + +////////////////////////////////////////////////// +/* Structures */ +////////////////////////////////////////////////// + +// struct mystery moved to shd_inc_metashd + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Determines if the mystery that is currently being attempted to be TrueSpoken + * can in fact be truespoken. Determines metashadows used. + * + * @param oShadow A creature attempting to shadowcast a mystery at this moment. + * @param oTarget The target of the mystery, if any. For pure Area of Effect + * mysteries, this should be OBJECT_INVALID. Otherwise the main + * target of the mystery as returned by PRCGetSpellTargetObject(). + * @param nMetaShadFlags The metashadows that may be used to modify this mystery. Any number + * of METASHADOW_* constants ORd together using the | operator. + * For example (METASHADOW_EMPOWER | METASHADOW_EXTEND) + * + * @return A mystery structure that contains the data about whether + * the mystery was successfully shadowcast, what metashadows + * were used and some other commonly used data, like the + * creator's shadowcaster level for this mystery. + */ +struct mystery EvaluateMystery(object oShadow, object oTarget, int nMetaShadFlags); + +/** + * Causes OBJECT_SELF to use the given mystery. + * + * @param nMyst The index of the mystery to use in spells.2da or a MYST_* + * @param nClass The index of the class to use the mystery as in classes.2da or a CLASS_TYPE_* + * @param nLevelOverride An optional override to normal shadowcaster level. + * Default: 0, which means the parameter is ignored. + */ +void UseMystery(int nMyst, int nClass, int nLevelOverride = 0); + +/** + * A debugging function. Takes a mystery structure and + * makes a string describing the contents. + * + * @param myst A set of mystery data + * @return A string describing the contents of myst + */ +string DebugMystery2Str(struct mystery myst); + +/** + * Sets the evaluation functions to ignore constraints on shadowcasting. + * Call this just prior to EvaluateMystery() in a mystery script. + * That evaluation will then ignore lacking mystery ability score, + * and other restrictions + * + * @param oShadow A creature attempting to shadowcast a mystery at this moment. + */ +void ShadowcastDebugIgnoreConstraints(object oShadow); + +/** + * Returns the uses per day already used + * + * @param oShadow Caster of the Mystery + * @param nMystId SpellId of the Mystery + * @return Number of uses per day already used + */ +int GetMysteryUses(object oShadow, int nMystId); + +/** + * Returns the bonus uses per day already used + * + * @param oShadow Caster of the Mystery + * @param nMystLevel Level of the Mystery + * @return Number of uses per day already used + */ +int GetBonusUses(object oShadow, int nMystLevel); + +/** + * Adds a use per day + * + * @param oShadow Caster of the Mystery + * @param nMystId SpellId of the Mystery + */ +void SetMysteryUses(object oShadow, int nMystId); + +/** + * Adds a bonus use per day + * + * @param oShadow Caster of the Mystery + * @param nMystLevel Level of the Mystery + */ +void SetBonusUses(object oShadow, int nMystLevel); + +/** + * Deletes all of the Local Ints stored by uses per day. + * Called OnRest and OnEnter + * + * @param oShadow Caster of the Mystery + */ +void ClearMystLocalVars(object oShadow); + +/** + * Returns total uses per day for the shadowcaster for a given mystery + * + * @param oShadow Caster of the Mystery + * @param nMystId SpellId of the Mystery + * @param nClass Class to check against + */ +int MysteriesPerDay(object oShadow, int nMystId, int nClass); + +/** + * Calculates bonus mysteries from a high intelligence + * + * @param oShadow Caster of the Mystery + * @param nMystLevel Mystery level to check + */ +int BonusMysteriesPerDay(object oShadow, int nMystLevel); + +/** + * Returns the name of the mystery + * + * @param nMystId SpellId of the mystery + */ +string GetMysteryName(int nMystId); + +/** + * Checks whether the mystery is supernatural or not + * + * @param nMystId The Mystery to Check + * @return TRUE if Mystery is (Su), else FALSE + */ +int GetIsMysterySupernatural(object oShadow, int nMystId, int nClass); + +/** + * Checks whether the mystery is a SLA or not + * + * @param nMystId The Mystery to Check + * @return TRUE if Mystery is (Su), else FALSE + */ +int GetIsMysterySLA(object oShadow, int nMystId, int nClass); + +/** + * Checks whether the mystery is a Fundamental or not + * + * @param nMystId The Mystery to Check + * @return TRUE if Mystery is a Fundamental, else FALSE + */ +int GetIsFundamental(int nMystId); + +/** + * Checks whether caster has Favored Mystery in the cast mystery + * + * @param oShadow The Shadowcaster + * @param nMyst The Mystery to Check + * @return TRUE if he has the feat, else FALSE + */ +int GetHasFavoredMystery(object oShadow, int nMyst); + +/** + * Checks whether caster has Shadow Cast feat + * + * @param oShadow The Shadowcaster + * @return TRUE if he has the feat, else FALSE + */ +int GetShadowCast(object oShadow); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "shd_inc_metashd" +#include "shd_inc_shdfunc" +#include "prc_inc_combat" +#include "inc_newspellbook" +#include "inc_lookups" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +/** Internal function. + * Handles Spellfire absorption when a mystery is used on a friendly spellfire + * user. + */ +struct mystery _DoShadowcastSpellfireFriendlyAbsorption(struct mystery myst, object oTarget) +{ + if(GetLocalInt(oTarget, "SpellfireAbsorbFriendly") && + GetIsFriend(oTarget, myst.oShadow) + ) + { + if(CheckSpellfire(myst.oShadow, oTarget, TRUE)) + { + PRCShowSpellResist(myst.oShadow, oTarget, SPELL_RESIST_MANTLE); + myst.bCanMyst = FALSE; + } + } + + return myst; +} + +/** Internal function. + * Deletes mystery-related local variables. + * + * @param oShadow The creature currently shadowcasting a mystery + */ +void _CleanMysteryVariables(object oShadow) +{ + DeleteLocalInt(oShadow, PRC_SHADOWCASTING_CLASS); + DeleteLocalInt(oShadow, PRC_MYSTERY_LEVEL); +} + +/** Internal function. + * Sets mystery-related local variables. + * + * @param oShadow The creature currently shadowcasting a mystery + * @param nClass Mystery casting class constant + * @param nLevel Mystery level + * @param bQuicken If the mystery was quickened 1, else 0 + */ +void _SetMysteryVariables(object oShadow, int nClass, int nLevel, int bQuicken) +{ + if (DEBUG) FloatingTextStringOnCreature(GetName(oShadow)+" is a "+IntToString(nClass)+" at "+IntToString(nLevel)+" level", oShadow); + SetLocalInt(oShadow, PRC_SHADOWCASTING_CLASS, nClass + 1); + SetLocalInt(oShadow, PRC_MYSTERY_LEVEL, nLevel); + SetLocalInt(oShadow, PRC_MYSTERY_IS_QUICKENED, bQuicken); +} + +// Makes sure radial spells are stored on the correct row number +string _GetMysterySpellId(int nMystId) +{ + string nReturn = Get2DACache("spells", "Master", nMystId); + if (1 > StringToInt(nReturn)) nReturn = IntToString(nMystId); // SpellId invalid for the Master column + + return nReturn; +} + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +struct mystery EvaluateMystery(object oShadow, object oTarget, int nMetaShadFlags) +{ + /* Get some data */ + int bIgnoreConstraints = (DEBUG) ? GetLocalInt(oShadow, MYST_DEBUG_IGNORE_CONSTRAINTS) : FALSE; + // shadowcaster-related stuff + int nShadowcasterLevel = GetShadowcasterLevel(oShadow); + int nMystLevel = GetMysteryLevel(oShadow); + int nClass = GetShadowcastingClass(oShadow); + + if (DEBUG) FloatingTextStringOnCreature(GetName(oShadow)+" is a "+IntToString(nClass)+" casting a "+IntToString(nMystLevel)+" level mystery at "+IntToString(nShadowcasterLevel)+" shadowcaster level", oShadow); + + /* Initialise the mystery structure */ + struct mystery myst; + myst.oShadow = oShadow; + myst.bCanMyst = TRUE; // Assume successful mystery by default + myst.nShadowcasterLevel = nShadowcasterLevel; + myst.nMystId = PRCGetSpellId(); + myst.bIgnoreSR = GetIsMysterySupernatural(oShadow, myst.nMystId, nClass); + + // Account for metashadows. This includes adding the appropriate DC boosts. + myst = EvaluateMetashadows(myst, nMetaShadFlags); + + // Skip paying anything if something has prevented a successful cast already by this point + // Fundamentals track their uses per day differently. + if(myst.bCanMyst && !GetIsFundamental(myst.nMystId)) + { + if (GetMysteryUses(oShadow, myst.nMystId) >= MysteriesPerDay(oShadow, myst.nMystId, nClass)) // Used up all regular uses + { + SetBonusUses(myst.oShadow, nMystLevel); + FloatingTextStringOnCreature("You have "+IntToString(BonusMysteriesPerDay(oShadow, nMystLevel)-GetBonusUses(oShadow, nMystLevel))+" bonus uses of level "+IntToString(nMystLevel)+" remaining", oShadow, FALSE); + } + else + { + SetMysteryUses(myst.oShadow, myst.nMystId); + FloatingTextStringOnCreature("You have "+IntToString(MysteriesPerDay(myst.oShadow, myst.nMystId, nClass)-GetMysteryUses(myst.oShadow, myst.nMystId))+" uses of " + GetMysteryName(myst.nMystId) + " remaining", oShadow, FALSE); + FloatingTextStringOnCreature("You have "+IntToString(BonusMysteriesPerDay(oShadow, nMystLevel)-GetBonusUses(oShadow, nMystLevel))+" bonus uses of level "+IntToString(nMystLevel)+" remaining", oShadow, FALSE); + } + }//end if + + if(DEBUG) DoDebug("EvaluateMystery(): Final result:\n" + DebugMystery2Str(myst)); + + // Initiate mystery-related variable CleanUp + //DelayCommand(0.5f, _CleanMysteryVariables(oShadow)); + + return myst; +} + +void UseMystery(int nMyst, int nClass, int nLevelOverride = 0) +{ + object oShadow = OBJECT_SELF; + int bQuickened = FALSE; + object oSkin = GetPCSkin(oShadow); + int nMystDur = StringToInt(Get2DACache("spells", "ConjTime", nMyst)) + StringToInt(Get2DACache("spells", "CastTime", nMyst)); + int nMystLevel = GetMysteryLevel(oShadow, nMyst); + + if(GetAbilityScore(oShadow, ABILITY_INTELLIGENCE, TRUE) < nMystLevel + 10) + { + FloatingTextStringOnCreature("Your Intelligence score is too low to shadowcast this mystery", oShadow, FALSE); + return; + } + + // Check uses per day. This is done here so that players don't waste an action on it + if ((GetMysteryUses(oShadow, nMyst) >= MysteriesPerDay(oShadow, nMyst, nClass)) && (GetBonusUses(oShadow, nMystLevel) >= BonusMysteriesPerDay(oShadow, nMystLevel))) + { + FloatingTextStringOnCreature("You have used " + GetMysteryName(nMyst) + " the maximum amount of times today.", oShadow, FALSE); + return; + } + + // Quicken mystery check + if(nMystDur <= 6000 && // If the mystery could be quickened by having shadowcasting time of 1 round or less + GetLocalInt(oShadow, METASHADOW_QUICKEN_VAR) && // And the shadowcaster has Quicken active + TakeSwiftAction(oShadow)) // And the shadowcaster can take a swift action + { + //Adding Auto-Quicken III for one round - deleted after casting is finished. + itemproperty ipAutoQuicken = ItemPropertyBonusFeat(IP_CONST_NSB_AUTO_QUICKEN); + ActionDoCommand(AddItemProperty(DURATION_TYPE_TEMPORARY, ipAutoQuicken, oSkin, nMystDur/1000.0f)); + bQuickened = TRUE; + // Then clear the variable + DeleteLocalInt(oShadow, METASHADOW_QUICKEN_VAR); + } + + if (nMyst == MYST_SHADOW_SKIN || nMyst == MYST_SHADOW_EVOCATION_CONV || nMyst == MYST_GREATER_SHADOW_EVO_CONV || + nMyst == MYST_GREATER_SHADOW_EVO || nMyst == MYST_SHADOW_EVOCATION || (nMyst == MYST_ECHO_SPELL && GetLocalInt(oShadow, "EchoedSpell"))) // These are immediate actions + { + //Adding Auto-Quicken III for one round - deleted after casting is finished. + itemproperty ipAutoQuicken = ItemPropertyBonusFeat(IP_CONST_NSB_AUTO_QUICKEN); + ActionDoCommand(AddItemProperty(DURATION_TYPE_TEMPORARY, ipAutoQuicken, oSkin, nMystDur/1000.0f)); + bQuickened = TRUE; + } + + // SLAs and Supernaturals both ignore the Somatic component + if(GetIsMysterySupernatural(oShadow, nMyst, nClass) || GetIsMysterySLA(oShadow, nMyst, nClass)) + { + //Adding Auto-Still for one round - deleted after casting is finished. 7-9th level mysteries don't become SLA, hence lack of Still III + itemproperty ipAutoStill = ItemPropertyBonusFeat(IP_CONST_FEAT_EPIC_AUTO_STILL_II); + ActionDoCommand(AddItemProperty(DURATION_TYPE_TEMPORARY, ipAutoStill, oSkin, nMystDur/1000.0f)); + ipAutoStill = ItemPropertyBonusFeat(IP_CONST_FEAT_EPIC_AUTO_STILL_I); + ActionDoCommand(AddItemProperty(DURATION_TYPE_TEMPORARY, ipAutoStill, oSkin, nMystDur/1000.0f)); + } + // Supernaturals don't generate AoO, nor do casters with the Shadowcast feat in the right situation + if(GetIsMysterySupernatural(oShadow, nMyst, nClass) || GetShadowCast(oShadow)) + { + //Adding Improved Combat Casting for one round - deleted after casting is finished. + itemproperty ipICC = ItemPropertyBonusFeat(IP_CONST_IMP_CC); + ActionDoCommand(AddItemProperty(DURATION_TYPE_TEMPORARY, ipICC, oSkin, nMystDur/1000.0f)); + } + // Still mystery check. Both SLA and Su are automatically stilled. + if(!GetIsMysterySupernatural(oShadow, nMyst, nClass) && !GetIsMysterySLA(oShadow, nMyst, nClass) && GetLocalInt(oShadow, METASHADOW_STILL_VAR)) + { + //Adding Auto-Still for one round - deleted after casting is finished. + itemproperty ipAutoStill = ItemPropertyBonusFeat(IP_CONST_FEAT_EPIC_AUTO_STILL_II); + ActionDoCommand(AddItemProperty(DURATION_TYPE_TEMPORARY, ipAutoStill, oSkin, nMystDur/1000.0f)); + ipAutoStill = ItemPropertyBonusFeat(IP_CONST_FEAT_EPIC_AUTO_STILL_I); + ActionDoCommand(AddItemProperty(DURATION_TYPE_TEMPORARY, ipAutoStill, oSkin, nMystDur/1000.0f)); + ipAutoStill = ItemPropertyBonusFeat(IP_CONST_FEAT_EPIC_AUTO_STILL_III); + ActionDoCommand(AddItemProperty(DURATION_TYPE_TEMPORARY, ipAutoStill, oSkin, nMystDur/1000.0f)); + // Then clear the variable + DeleteLocalInt(oShadow, METASHADOW_STILL_VAR); + } + + // Setup mystery-related variables + ActionDoCommand(_SetMysteryVariables(oShadow, nClass, StringToInt(lookup_spell_innate(nMyst)), bQuickened)); + + // cast the actual mystery + ActionCastSpell(nMyst, nLevelOverride, 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, 0, 0, OBJECT_INVALID, FALSE); + + // Initiate mystery-related variable CleanUp + ActionDoCommand(_CleanMysteryVariables(oShadow)); +} + +string DebugMystery2Str(struct mystery myst) +{ + string sRet; + + sRet += "oShadow = " + DebugObject2Str(myst.oShadow) + "\n"; + sRet += "bCanMyst = " + DebugBool2String(myst.bCanMyst) + "\n"; + sRet += "nShadowcasterLevel = " + IntToString(myst.nShadowcasterLevel) + "\n"; + + sRet += "bEmpower = " + DebugBool2String(myst.bEmpower) + "\n"; + sRet += "bExtend = " + DebugBool2String(myst.bExtend) + "\n"; + sRet += "bQuicken = " + DebugBool2String(myst.bQuicken);// + "\n"; + + return sRet; +} + +void ShadowcastDebugIgnoreConstraints(object oShadow) +{ + SetLocalInt(oShadow, MYST_DEBUG_IGNORE_CONSTRAINTS, TRUE); + DelayCommand(0.0f, DeleteLocalInt(oShadow, MYST_DEBUG_IGNORE_CONSTRAINTS)); +} + +int GetMysteryUses(object oShadow, int nMystId) +{ + // This makes sure everything is stored using the proper number + return GetLocalInt(oShadow, MYSTERY_USES + _GetMysterySpellId(nMystId)); +} + +int GetBonusUses(object oShadow, int nMystLevel) +{ + // This makes sure everything is stored using the proper number + return GetLocalInt(oShadow, MYSTERY_BONUS_USES + IntToString(nMystLevel)); +} + +void SetMysteryUses(object oShadow, int nMystId) +{ + // Apprentice mysteries only for Warp Spell + if(4 > GetMysteryLevel(oShadow, nMystId) && GetLocalInt(oShadow, "WarpSpellSuccess")) + { + DeleteLocalInt(oShadow, "WarpSpellSuccess"); + FloatingTextStringOnCreature("Warped Spell used", oShadow, FALSE); + return; + } + if (nMystId == MYST_ECHO_SPELL && GetLocalInt(oShadow, "EchoedSpell")) + return; //This is a free use and doesn't count. + + if (GetLocalInt(oShadow, "MysteryFreeUse")) + return; + + if (GetLocalInt(oShadow, "InnateCounterSuccess") == GetMysteryLevel(oShadow, nMystId)) + { + DeleteLocalInt(oShadow, "InnateCounterSuccess"); + FloatingTextStringOnCreature("Innate Counterspell used", oShadow, FALSE); + return; + } + + // This makes sure everything is stored using the proper number + string sSpellId = _GetMysterySpellId(nMystId); + // Uses are stored for each Mystery by SpellId + int nNum = GetLocalInt(oShadow, MYSTERY_USES + sSpellId); + // Store the number of times per day its been cast succesfully + SetLocalInt(oShadow, MYSTERY_USES + sSpellId, (nNum + 1)); +} + +void SetBonusUses(object oShadow, int nMystLevel) +{ + // Uses are stored by level + int nNum = GetLocalInt(oShadow, MYSTERY_BONUS_USES + IntToString(nMystLevel)); + // Store the number of times per day its been cast succesfully + SetLocalInt(oShadow, MYSTERY_BONUS_USES + IntToString(nMystLevel), (nNum + 1)); +} + +void ClearMystLocalVars(object oShadow) +{ + // Uses are stored for each Mystery by SpellId + // So we loop em all and blow em away + // Because there are only 60, this should not TMI + // i is the SpellId + int i; + for(i = 18352; i < 18429; i++) + { + DeleteLocalInt(oShadow, MYSTERY_USES + IntToString(i)); + } + // Web Enhancement Mysteries + for(i = 18579; i < 18590; i++) + { + DeleteLocalInt(oShadow, MYSTERY_USES + IntToString(i)); + } + for(i = 0; i < 10; i++) + { + DeleteLocalInt(oShadow, MYSTERY_BONUS_USES + IntToString(i)); + } +} + +int MysteriesPerDay(object oShadow, int nMystId, int nClass) +{ + if (nClass == CLASS_TYPE_SHADOWSMITH) return 1; // They never get more than this. + + int nUses = 1; //always get at least 1 + int nLevel = GetMysteryLevel(oShadow, nMystId); + // Done this way so it doesn't count for feats or other misc boosts + int nShadow = GetLevelByClass(nClass, oShadow) + GetShadowMagicPRCLevels(oShadow); + + //if(DEBUG) DoDebug("MysteriesPerDay(): GetMysteryLevel "+IntToString(nLevel)); + //if(DEBUG) DoDebug("MysteriesPerDay(): GetShadowcasterLevel "+IntToString(nShadow)); + + if (nMystId == MYST_ECHO_SPELL && GetLocalInt(oShadow, "EchoedSpell")) + return 99; //This is a free use and doesn't count. + + if (GetLocalInt(oShadow, "MysteryFreeUse")) + return 99; + + if (nShadow >= 13 && 4 > nLevel) + nUses = 3; + else if (nShadow >= 13 && 7 > nLevel && nLevel > 3) + nUses = 2; + else if (nShadow >= 7 && 4 > nLevel) + nUses = 2; + + if (nShadow >= 13 && 4 > nLevel && GetHasFavoredMystery(oShadow, nMystId)) // Favored mystery can grant +1 use per day to Apprentice + nUses += 1; + + return nUses; +} + +int BonusMysteriesPerDay(object oShadow, int nMystLevel) +{ + if(GetAbilityScore(oShadow, ABILITY_CHARISMA, TRUE) < nMystLevel + 10) + return 0; + int nSlots; + + // Both Mystery classes use Int for this + int nAbilityMod = GetAbilityModifier(ABILITY_CHARISMA, oShadow); + if (nAbilityMod >= nMystLevel) // Need an ability modifier at least equal to the spell level to gain bonus slots + nSlots += ((nAbilityMod - nMystLevel) / 4) + 1; + if(DEBUG) DoDebug("BonusMysteriesPerDay(): nSlots "+IntToString(nSlots)); + return nSlots; +} + +string GetMysteryName(int nMystId) +{ + return GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nMystId))); +} + +int GetIsMysterySupernatural(object oShadow, int nMystId, int nClass) +{ + if (nClass == CLASS_TYPE_SHADOWSMITH) return FALSE; + int nLevel = GetMysteryLevel(oShadow, nMystId); + int nShadow = GetShadowcasterLevel(oShadow); + + if (nShadow >= 13 && 4 > nLevel) + return TRUE; + if (nShadow >= 13 && 7 > nLevel && nLevel > 3 && GetHasFavoredMystery(oShadow, nMystId)) // Bump up Initiate + return TRUE; + + // If nothing returns TRUE, fail + return FALSE; +} + +int GetIsMysterySLA(object oShadow, int nMystId, int nClass) +{ + if (nClass == CLASS_TYPE_SHADOWSMITH) return FALSE; + int nLevel = GetMysteryLevel(oShadow, nMystId); + int nShadow = GetShadowcasterLevel(oShadow); + + if (nShadow >= 13 && 7 > nLevel && nLevel > 3) + return TRUE; + else if (nShadow >= 7 && 4 > nLevel) + return TRUE; + else if (nShadow < 7 && 4 > nLevel && GetHasFavoredMystery(oShadow, nMystId)) // Bump up Apprentice + return TRUE; + if (nShadow < 13 && nShadow >= 7 && 7 > nLevel && nLevel > 3 && GetHasFavoredMystery(oShadow, nMystId)) // Bump up Initiate + return TRUE; + if (nShadow >= 13 && nLevel >= 7 && GetHasFavoredMystery(oShadow, nMystId)) // Bump up Master + return TRUE; + + // If nothing returns TRUE, fail + return FALSE; +} + +int GetIsFundamental(int nMystId) +{ + if(nMystId == FUND_ARROW_DUSK || + nMystId == FUND_BLACK_CANDLE_LIGHT || + nMystId == FUND_BLACK_CANDLE_DARK || + nMystId == FUND_CAUL_SHADOW || + nMystId == FUND_MYSTIC_REFLECTIONS || + nMystId == FUND_SHADOW_HOOD || + nMystId == FUND_SIGHT_OBSCURED || + nMystId == FUND_UMBRAL_HAND || + nMystId == FUND_WIDENED_EYES) + return TRUE; + + return FALSE; +} + +int GetHasFavoredMystery(object oShadow, int nMyst) +{ + if (DEBUG) DoDebug("GetHasFavoredMystery(): Mystery "+IntToString(nMyst)); + int nFavored, nReturn; + switch(nMyst) + { + case MYST_BEND_PERSPECTIVE : nFavored = FEAT_FAV_MYST_BENDPERSPECTIVE ; break; + case MYST_CARPET_SHADOW : nFavored = FEAT_FAV_MYST_CARPETSHADOW ; break; + case MYST_DUSK_AND_DAWN_DUSK : nFavored = FEAT_FAV_MYST_DUSKANDDAWN ; break; + case MYST_DUSK_AND_DAWN_DAWN : nFavored = FEAT_FAV_MYST_DUSKANDDAWN ; break; + case MYST_LIFE_FADES : nFavored = FEAT_FAV_MYST_LIFEFADES ; break; + case MYST_MESMERIZING_SHADE : nFavored = FEAT_FAV_MYST_MESMERIZINGSHADE ; break; + case MYST_STEEL_SHADOWS : nFavored = FEAT_FAV_MYST_STEELSHADOWS ; break; + case MYST_VOICE_SHADOW_APPROACH: nFavored = FEAT_FAV_MYST_VOICEOFSHADOW ; break; + case MYST_VOICE_SHADOW_DROP : nFavored = FEAT_FAV_MYST_VOICEOFSHADOW ; break; + case MYST_VOICE_SHADOW_FALL : nFavored = FEAT_FAV_MYST_VOICEOFSHADOW ; break; + case MYST_VOICE_SHADOW_FLEE : nFavored = FEAT_FAV_MYST_VOICEOFSHADOW ; break; + case MYST_VOICE_SHADOW_HALT : nFavored = FEAT_FAV_MYST_VOICEOFSHADOW ; break; + case MYST_BLACK_FIRE : nFavored = FEAT_FAV_MYST_BLACKFIRE ; break; + case MYST_CONGRESS_SHADOWS : nFavored = FEAT_FAV_MYST_CONGRESSSHADOWS ; break; + case MYST_FLESH_FAILS_STR : nFavored = FEAT_FAV_MYST_FLESHFAILS ; break; + case MYST_FLESH_FAILS_DEX : nFavored = FEAT_FAV_MYST_FLESHFAILS ; break; + case MYST_FLESH_FAILS_CON : nFavored = FEAT_FAV_MYST_FLESHFAILS ; break; + case MYST_PIERCING_SIGHT : nFavored = FEAT_FAV_MYST_PIERCINGSIGHT ; break; + case MYST_SHADOW_SKIN : nFavored = FEAT_FAV_MYST_SHADOWSKIN ; break; + case MYST_SIGHT_ECLIPSED : nFavored = FEAT_FAV_MYST_SIGHTECLIPSED ; break; + case MYST_THOUGHTS_SHADOW_INT : nFavored = FEAT_FAV_MYST_THOUGHTSSHADOW ; break; + case MYST_THOUGHTS_SHADOW_WIS : nFavored = FEAT_FAV_MYST_THOUGHTSSHADOW ; break; + case MYST_THOUGHTS_SHADOW_CHA : nFavored = FEAT_FAV_MYST_THOUGHTSSHADOW ; break; + case MYST_AFRAID_DARK : nFavored = FEAT_FAV_MYST_AFRAIDOFTHEDARK ; break; + case MYST_CLINGING_DARKNESS : nFavored = FEAT_FAV_MYST_CLINGINGDARKNESS ; break; + case MYST_DANCING_SHADOWS : nFavored = FEAT_FAV_MYST_DANCINGSHADOWS ; break; + case MYST_FLICKER : nFavored = FEAT_FAV_MYST_FLICKER ; break; + case MYST_KILLING_SHADOWS : nFavored = FEAT_FAV_MYST_KILLINGSHADOWS ; break; + case MYST_SHARP_SHADOWS : nFavored = FEAT_FAV_MYST_SHARPSHADOWS ; break; + case MYST_UMBRAL_TOUCH : nFavored = FEAT_FAV_MYST_UMBRALTOUCH ; break; + case MYST_AURA_OF_SHADE : nFavored = FEAT_FAV_MYST_AURAOFSHADE ; break; + case MYST_BOLSTER : nFavored = FEAT_FAV_MYST_BOLSTER ; break; + case MYST_SHADOW_EVOCATION : nFavored = FEAT_FAV_MYST_SHADOWEVOCATION ; break; + case MYST_SHADOW_VISION : nFavored = FEAT_FAV_MYST_SHADOWVISION ; break; + case MYST_SHADOWS_FADE : nFavored = FEAT_FAV_MYST_SHADOWSFADE ; break; + case MYST_STEP_SHADOW_SELF : nFavored = FEAT_FAV_MYST_STEPINTOSHADOW ; break; + case MYST_STEP_SHADOW_PARTY : nFavored = FEAT_FAV_MYST_STEPINTOSHADOW ; break; + case MYST_WARP_SPELL : nFavored = FEAT_FAV_MYST_WARPSPELL ; break; + case MYST_CURTAIN_SHADOWS : nFavored = FEAT_FAV_MYST_CURTAINSHADOWS ; break; + case MYST_DARK_AIR : nFavored = FEAT_FAV_MYST_DARKAIR ; break; + case MYST_ECHO_SPELL : nFavored = FEAT_FAV_MYST_FEIGNLIFE ; break; + case MYST_FEIGN_LIFE : nFavored = FEAT_FAV_MYST_DARKSOUL ; break; + case MYST_LANGUOR_SLOW : nFavored = FEAT_FAV_MYST_LANGUOR ; break; + case MYST_LANGUOR_HOLD : nFavored = FEAT_FAV_MYST_LANGUOR ; break; + case MYST_PASS_SHADOW_SELF : nFavored = FEAT_FAV_MYST_PASSINTOSHADOW ; break; + case MYST_PASS_SHADOW_PARTY : nFavored = FEAT_FAV_MYST_PASSINTOSHADOW ; break; + case MYST_UNRAVEL_DWEOMER : nFavored = FEAT_FAV_MYST_UNRAVELDWEOMER ; break; + case MYST_FLOOD_SHADOW : nFavored = FEAT_FAV_MYST_FLOODSHADOWS ; break; + case MYST_GREATER_SHADOW_EVO : nFavored = FEAT_FAV_MYST_GREATERSHADOWEVOCATION ; break; + case MYST_SHADOW_INVESTITURE : nFavored = FEAT_FAV_MYST_SHADOWINVESTITURE ; break; + case MYST_SHADOW_STORM : nFavored = FEAT_FAV_MYST_SHADOWSTORM ; break; + case MYST_SHADOWS_FADE_GREATER : nFavored = FEAT_FAV_MYST_SHADOWSFADE_GREATER ; break; + case MYST_UNVEIL : nFavored = FEAT_FAV_MYST_UNVEIL ; break; + case MYST_VOYAGE_SHADOW_SELF : nFavored = FEAT_FAV_MYST_VOYAGESHADOW ; break; + case MYST_VOYAGE_SHADOW_PARTY : nFavored = FEAT_FAV_MYST_VOYAGESHADOW ; break; + case MYST_DARK_SOUL : nFavored = FEAT_FAV_MYST_DARKSOUL ; break; + case MYST_EPHEMERAL_IMAGE : nFavored = FEAT_FAV_MYST_EPHEMERALIMAGE ; break; + case MYST_LIFE_FADES_GREATER : nFavored = FEAT_FAV_MYST_LIFEFADESGREATER ; break; + case MYST_PRISON_NIGHT : nFavored = FEAT_FAV_MYST_PRISONNIGHT ; break; + case MYST_UMBRAL_SERVANT : nFavored = FEAT_FAV_MYST_UMBRALSERVANT ; break; + case MYST_TRUTH_REVEALED : nFavored = FEAT_FAV_MYST_TRUTHREVEALED ; break; + case MYST_FAR_SIGHT : nFavored = FEAT_FAV_MYST_FARSIGHT ; break; + case MYST_GR_FLESH_FAILS_STR : nFavored = FEAT_FAV_MYST_GRFLESHFAILS ; break; + case MYST_GR_FLESH_FAILS_DEX : nFavored = FEAT_FAV_MYST_GRFLESHFAILS ; break; + case MYST_GR_FLESH_FAILS_CON : nFavored = FEAT_FAV_MYST_GRFLESHFAILS ; break; + case MYST_SHADOW_PLAGUE : nFavored = FEAT_FAV_MYST_SHADOWPLAGUE ; break; + case MYST_SOUL_PUPPET : nFavored = FEAT_FAV_MYST_SOULPUPPET ; break; + case MYST_TOMB_NIGHT : nFavored = FEAT_FAV_MYST_TOMBNIGHT ; break; + case MYST_UMBRAL_BODY : nFavored = FEAT_FAV_MYST_UMBRALBODY ; break; + case MYST_ARMY_SHADOW : nFavored = FEAT_FAV_MYST_ARMYSHADOW ; break; + case MYST_CONSUME_ESSENCE : nFavored = FEAT_FAV_MYST_CONSUMEESSENCE ; break; + case MYST_EPHEMERAL_STORM : nFavored = FEAT_FAV_MYST_EPHEMERALSTORM ; break; + case MYST_REFLECTIONS : nFavored = FEAT_FAV_MYST_REFLECTIONS ; break; + case MYST_SHADOW_SURGE : nFavored = FEAT_FAV_MYST_SHADOWSURGE ; break; + case MYST_SHADOW_TIME : nFavored = FEAT_FAV_MYST_SHADOWTIME ; break; + case MYST_QUICKER_THAN_THE_EYE : nFavored = FEAT_FAV_MYST_QUICKERTHANTHEEYE ; break; + case MYST_TRAIL_OF_HAZE : nFavored = FEAT_FAV_MYST_TRAILHAZE ; break; + case MYST_UMBRAL_FIST : nFavored = FEAT_FAV_MYST_UMBRALFIST ; break; + case MYST_FEARFUL_GLOOM : nFavored = FEAT_FAV_MYST_FEARFULGLOOM ; break; + case MYST_SICKENING_SHADOW : nFavored = FEAT_FAV_MYST_SICKENINGSHADOW ; break; + case MYST_DEADLY_SHADE_DR : nFavored = FEAT_FAV_MYST_DEADLYSHADE ; break; + case MYST_DEADLY_SHADE_NEG : nFavored = FEAT_FAV_MYST_DEADLYSHADE ; break; + case MYST_GRASPING_SHADOWS : nFavored = FEAT_FAV_MYST_GRASPINGSHADOWS ; break; + case MYST_MENAGERIE_OF_DARKNESS: nFavored = FEAT_FAV_MYST_MENAGERIEDARKNESS ; break; + case MYST_BLACK_LABYRINTH : nFavored = FEAT_FAV_MYST_BLACKLABYRINTH ; break; + } + if(GetHasFeat(nFavored, oShadow)) + nReturn = 1; + + // If none of those trigger. + return nReturn; +} + +int GetShadowCast(object oShadow) +{ + if (DEBUG) DoDebug("GetShadowCast() enter"); + if (!GetHasFeat(FEAT_SHADOW_CAST, oShadow)) return FALSE; // Need the feat + + location lTarget = GetLocation(oShadow); + int nCount, nReturn; + + // Use the function to get the closest creature as a target + object oCount = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE); + while(GetIsObjectValid(oCount)) + { + if(GetIsEnemy(oCount, oShadow) && GetIsInMeleeRange(oShadow, oCount)) // Must be an enemy in melee range + { + nCount++; + if (DEBUG) DoDebug("GetShadowCast() nCount "+IntToString(nCount)); + } + //Select the next target within the spell shape. + oCount = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE); + } + + if (nCount > 1) return FALSE; + + return TRUE; +} \ No newline at end of file diff --git a/src/include/shd_inc_mystknwn.nss b/src/include/shd_inc_mystknwn.nss new file mode 100644 index 0000000..b335485 --- /dev/null +++ b/src/include/shd_inc_mystknwn.nss @@ -0,0 +1,802 @@ +//:://///////////////////////////////////////////// +//:: Shadowcasting include: Mysteries Known +//:: shd_inc_mystknwn +//:://///////////////////////////////////////////// +/** @file + Defines functions for adding & removing + Mysteries known. + + Data stored: + + - For each Path list + -- Total number of Mysteries known + -- A modifier value to maximum Mysteries known on this list to account for feats and classes that add Mysteries + -- An array related to Mysteries the knowledge of which is not dependent on character level + --- Each array entry specifies the spells.2da row of the known Mysteries's class-specific entry + -- For each character level on which Mysteries have been gained from this list + --- An array of Mysteries gained on this level + ---- Each array entry specifies the spells.2da row of the known Mysteries's class-specific entry + + @author Stratovarius + @date Created - 2019.02.06 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const int MYSTERY_LIST_SHADOWCASTER = 136; +const int MYSTERY_LIST_SHADOWSMITH = 98; + +/// Special Mystery list. Mysteries gained via other sources. +const int MYSTERY_LIST_MISC = CLASS_TYPE_INVALID;//-1; + +const string _MYSTERY_LIST_NAME_BASE = "PRC_MysteryList_"; +const string _MYSTERY_LIST_PATH = "PRC_PathTotal_"; +const string _MYSTERY_LIST_TOTAL_KNOWN = "_TotalKnown"; +const string _MYSTERY_LIST_MODIFIER = "_KnownModifier"; +const string _MYSTERY_LIST_MISC_ARRAY = "_MysteriesKnownMiscArray"; +const string _MYSTERY_LIST_LEVEL_ARRAY = "_MysteriesKnownLevelArray_"; +const string _MYSTERY_LIST_GENERAL_ARRAY = "_MysteriesKnownGeneralArray"; + +#include "shd_inc_shdfunc" + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Gives the creature the control feats for the given Mystery and marks the Mystery + * in a Mysteries known array. + * If the Mystery's data is already stored in one of the Mysteries known arrays for + * the list or adding the Mystery's data to the array fails, the function aborts. + * + * @param oShadow The creature to gain the Mystery + * @param nList The list the Mystery comes from. One of MYSTERY_LIST_* + * @param n2daRow The 2da row in the lists's 2da file that specifies the Mystery. + * @param bLevelDependent If this is TRUE, the Mystery is tied to a certain level and can + * be lost via level loss. If FALSE, the Mystery is not dependent + * of a level and cannot be lost via level loss. + * @param nLevelToTieTo If bLevelDependent is TRUE, this specifies the level the Mystery + * is gained on. Otherwise, it's ignored. + * The default value (-1) means that the current level of oShadow + * will be used. + * + * @return TRUE if the Mystery was successfully stored and control feats added. + * FALSE otherwise. + */ +int AddMysteryKnown(object oShadow, int nList, int n2daRow, int bLevelDependent = FALSE, int nLevelToTieTo = -1); + +/** + * Removes all Mysteries gained from each list on the given level. + * + * @param oShadow The creature whose Mysteries to remove + * @param nLevel The level to clear + */ +void RemoveMysteriesKnownOnLevel(object oShadow, int nLevel); + +/** + * Gets the value of the Mysteries known modifier, which is a value that is added + * to the 2da-specified maximum Mysteries known to determine the actual maximum. + * + * @param oShadow The creature whose modifier to get + * @param nList The list the maximum Mysteries known from which the modifier + * modifies. One of MYSTERY_LIST_* + */ +int GetKnownMysteriesModifier(object oShadow, int nList); + +/** + * Sets the value of the Mysteries known modifier, which is a value that is added + * to the 2da-specified maximum Mysteries known to determine the actual maximum. + * + * @param oShadow The creature whose modifier to set + * @param nList The list the maximum Mysteries known from which the modifier + * modifies. One of MYSTERY_LIST_* + */ +void SetKnownMysteriesModifier(object oShadow, int nList, int nNewValue); + +/** + * Gets the number of Mysteries a character possesses + * + * @param oShadow The creature whose Mysteries to check + * @param nList The list to check. One of MYSTERY_LIST_* + * + * @return The number of Mysteries known oShadow has from nList + */ +int GetMysteryCount(object oShadow, int nList); + +/** + * Gets the number of Mysteries a character character possesses from a + * specific path + * + * @param oShadow The creature whose Mysteries to check + * @param nPath The path to check. One of PATH_* + * + * @return The number of Mysteries known oShadow has from nPath + */ +int GetMysteryCountByPath(object oShadow, int nPath); + +/** + * Gets the maximum number of Mysteries a character may possess from a given list + * at this time. Calculated based on class levels, feats and a misceallenous + * modifier. + * + * @param oShadow Character to determine maximum Mysteries for + * @param nList MYSTERY_LIST_* of the list to determine maximum Mysteries for + * + * @return Maximum number of Mysteries that oShadow may know from the given list. + */ +int GetMaxMysteryCount(object oShadow, int nList); + +/** + * Determines whether a character has a given Mystery, gained via some Mystery list. + * + * @param nMystery Mystery_* of the Mystery to test + * @param oShadow Character to test for the possession of the Mystery + * @return TRUE if the character has the Mystery, FALSE otherwise + */ +int GetHasMystery(int nMystery, object oShadow = OBJECT_SELF); + +/** + * Gets the highest Mystery level a character may learn at this time. + * + * @param oShadow Character to determine maximum Mystery level for + * @param nClass Class to check against + * @param nType 1 = apprentice, 2 = initiate, 3 = master + * + * @return Maxmimum mystery level + */ +int GetMaxMysteryLevelLearnable(object oShadow, int nClass, int nType); + +/** + * Gets the total number of completed paths for the character + * + * @param oShadow Character to check + */ +int GetCompletedPaths(object oShadow); + +/** + * Adds the feat as a bonus feat gained from having completed a path. Aborts if the feat + * was one the character already had + * + * @param oShadow Character to check + * @param nFeat Feat to add + */ +void AddPathBonusFeat(object oShadow, int nFeat); + +/** + * Returns how many Path Bonus feats the character has + * + * @param oShadow Character to check + */ +int GetPathBonusFeats(object oShadow); + +/** + * Reapplies any missing Path Bonus feats the character has chosen and doesn't have + * + * @param oShadow Character to check + */ +void ReapplyPathBonusFeat(object oShadow); + +/** + * Returns the IP_CONST version of the feat. + * Only works on Bonus Path feats + * + * @param nFeat Feat to itemproperty + */ +int PathFeatToIPFeat(int nFeat); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + + + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +void _MysteryRecurseRemoveArray(object oShadow, string sArrayName, string sMystFile, int nArraySize, int nCurIndex) +{ + if(DEBUG) DoDebug("_MysteryRecurseRemoveArray():\n" + + "oShadow = " + DebugObject2Str(oShadow) + "\n" + + "sArrayName = '" + sArrayName + "'\n" + + "sMystFile = '" + sMystFile + "'\n" + + "nArraySize = " + IntToString(nArraySize) + "\n" + + "nCurIndex = " + IntToString(nCurIndex) + "\n" + ); + + // Determine whether we've already parsed the whole array or not + if(nCurIndex >= nArraySize) + { + if(DEBUG) DoDebug("_MysteryRecurseRemoveArray(): Running itemproperty removal loop."); + // Loop over itemproperties on the skin and remove each match + object oSkin = GetPCSkin(oShadow); + itemproperty ipTest = GetFirstItemProperty(oSkin); + while(GetIsItemPropertyValid(ipTest)) + { + // Check if the itemproperty is a bonus feat that has been marked for removal + if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_BONUS_FEAT && + GetLocalInt(oShadow, "PRC_MystFeatRemovalMarker_" + IntToString(GetItemPropertySubType(ipTest))) + ) + { + if(DEBUG) DoDebug("_MysteryRecurseRemoveArray(): Removing bonus feat itemproperty:\n" + DebugIProp2Str(ipTest)); + // If so, remove it + RemoveItemProperty(oSkin, ipTest); + DeleteLocalInt(oShadow, "PRC_MystFeatRemovalMarker_" + IntToString(GetItemPropertySubType(ipTest))); + } + + ipTest = GetNextItemProperty(oSkin); + } + } + // Still parsing the array + else + { + int nMystID = GetPowerfileIndexFromSpellID(persistant_array_get_int(oShadow, sArrayName, nCurIndex)); + // Set the marker + string sName = "PRC_MystFeatRemovalMarker_" + Get2DACache(sMystFile, "IPFeatID", nMystID); + if(DEBUG) DoDebug("_MysteryRecurseRemoveArray(): Recursing through array, marker set:\n" + sName); + SetLocalInt(oShadow, sName, TRUE); + + string sPathArray = _MYSTERY_LIST_PATH + "_" + Get2DACache(sMystFile, "Path", nMystID); + SetPersistantLocalInt(oShadow, sPathArray, + GetPersistantLocalInt(oShadow, sPathArray) - 1); + + // Recurse to next array index + _MysteryRecurseRemoveArray(oShadow, sArrayName, sMystFile, nArraySize, nCurIndex + 1); + } +} + +void _RemoveMysteryArray(object oShadow, int nList, int nLevel) +{ + if(DEBUG) DoDebug("_RemoveMysteryArray():\n" + + "oShadow = " + DebugObject2Str(oShadow) + "\n" + + "nList = " + IntToString(nList) + "\n" + ); + + string sBase = _MYSTERY_LIST_NAME_BASE + IntToString(nList); + string sArray = sBase + _MYSTERY_LIST_LEVEL_ARRAY + IntToString(nLevel); + int nSize = persistant_array_get_size(oShadow, sArray); + + // Reduce the total by the array size + SetPersistantLocalInt(oShadow, sBase + _MYSTERY_LIST_TOTAL_KNOWN, + GetPersistantLocalInt(oShadow, sBase + _MYSTERY_LIST_TOTAL_KNOWN) - nSize + ); + + // Remove each Mystery in the array + _MysteryRecurseRemoveArray(oShadow, sArray, GetAMSDefinitionFileName(nList), nSize, 0); + + // Remove the array itself + persistant_array_delete(oShadow, sArray); +} + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int AddMysteryKnown(object oShadow, int nList, int n2daRow, int bLevelDependent = FALSE, int nLevelToTieTo = -1) +{ + string sBase = _MYSTERY_LIST_NAME_BASE + IntToString(nList); + string sArray = sBase; + string sPowerFile = GetAMSDefinitionFileName(/*PowerListToClassType(*/nList/*)*/); + string sTestArray; + int i, j, nSize, bReturn; + + // Get the spells.2da row corresponding to the cls_psipw_*.2da row + int nSpells2daRow = StringToInt(Get2DACache(sPowerFile, "SpellID", n2daRow)); + + // Determine the array name. + if(bLevelDependent) + { + // If no level is specified, default to the creature's current level + if(nLevelToTieTo == -1) + nLevelToTieTo = GetHitDice(oShadow); + + sArray += _MYSTERY_LIST_LEVEL_ARRAY + IntToString(nLevelToTieTo); + } + else + { + sArray += _MYSTERY_LIST_GENERAL_ARRAY; + } + + // Make sure the power isn't already in an array. If it is, abort and return FALSE + // Loop over each level array and check that it isn't there. + for(i = 1; i <= GetHitDice(oShadow); i++) + { + sTestArray = sBase + _MYSTERY_LIST_LEVEL_ARRAY + IntToString(i); + if(persistant_array_exists(oShadow, sTestArray)) + { + nSize = persistant_array_get_size(oShadow, sTestArray); + for(j = 0; j < nSize; j++) + if(persistant_array_get_int(oShadow, sArray, j) == nSpells2daRow) + return FALSE; + } + } + // Check the non-level-dependent array + sTestArray = sBase + _MYSTERY_LIST_GENERAL_ARRAY; + if(persistant_array_exists(oShadow, sTestArray)) + { + nSize = persistant_array_get_size(oShadow, sTestArray); + for(j = 0; j < nSize; j++) + if(persistant_array_get_int(oShadow, sArray, j) == nSpells2daRow) + return FALSE; + } + + // All checks are made, now start adding the new power + // Create the array if it doesn't exist yet + if(!persistant_array_exists(oShadow, sArray)) + persistant_array_create(oShadow, sArray); + + // Store the power in the array + if(persistant_array_set_int(oShadow, sArray, persistant_array_get_size(oShadow, sArray), nSpells2daRow) != SDL_SUCCESS) + { + if(DEBUG) DoDebug("shd_inc_mystknwn: AddPowerKnown(): ERROR: Unable to add power to known array\n" + + "oShadow = " + DebugObject2Str(oShadow) + "\n" + + "nList = " + IntToString(nList) + "\n" + + "n2daRow = " + IntToString(n2daRow) + "\n" + + "bLevelDependent = " + DebugBool2String(bLevelDependent) + "\n" + + "nLevelToTieTo = " + IntToString(nLevelToTieTo) + "\n" + + "nSpells2daRow = " + IntToString(nSpells2daRow) + "\n" + ); + return FALSE; + } + + // Increment Mysteries known total + SetPersistantLocalInt(oShadow, sBase + _MYSTERY_LIST_TOTAL_KNOWN, + GetPersistantLocalInt(oShadow, sBase + _MYSTERY_LIST_TOTAL_KNOWN) + 1 + ); + + // Increment Mysteries known by path + string sPathArray = _MYSTERY_LIST_PATH + "_" + Get2DACache(sPowerFile, "Path", n2daRow); + SetPersistantLocalInt(oShadow, sPathArray, + GetPersistantLocalInt(oShadow, sPathArray) + 1); + + // Give the power's control feats + object oSkin = GetPCSkin(oShadow); + string sPowerFeatIP = Get2DACache(sPowerFile, "IPFeatID", n2daRow); + itemproperty ipFeat = PRCItemPropertyBonusFeat(StringToInt(sPowerFeatIP)); + IPSafeAddItemProperty(oSkin, ipFeat, 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + // Second power feat, if any + /*sPowerFeatIP = Get2DACache(sPowerFile, "IPFeatID2", n2daRow); + if(sPowerFeatIP != "") + { + ipFeat = PRCItemPropertyBonusFeat(StringToInt(sPowerFeatIP)); + IPSafeAddItemProperty(oSkin, ipFeat, 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + }*/ + + return TRUE; +} + +void RemoveMysteriesKnownOnLevel(object oShadow, int nLevel) +{ + if(DEBUG) DoDebug("shd_inc_mystknwn: RemoveMysteryKnownOnLevel():\n" + + "oShadow = " + DebugObject2Str(oShadow) + "\n" + + "nLevel = " + IntToString(nLevel) + "\n" + ); + + string sPostFix = _MYSTERY_LIST_LEVEL_ARRAY + IntToString(nLevel); + // For each Mystery list, determine if an array exists for this level. + if(persistant_array_exists(oShadow, _MYSTERY_LIST_NAME_BASE + IntToString(MYSTERY_LIST_SHADOWCASTER) + sPostFix)) + // If one does exist, clear it + _RemoveMysteryArray(oShadow, MYSTERY_LIST_SHADOWCASTER, nLevel); + + if(persistant_array_exists(oShadow, _MYSTERY_LIST_NAME_BASE + IntToString(MYSTERY_LIST_SHADOWSMITH) + sPostFix)) + _RemoveMysteryArray(oShadow, MYSTERY_LIST_SHADOWSMITH, nLevel); + + if(persistant_array_exists(oShadow, _MYSTERY_LIST_NAME_BASE + IntToString(MYSTERY_LIST_MISC) + sPostFix)) + _RemoveMysteryArray(oShadow, MYSTERY_LIST_MISC, nLevel); + +} + +int GetKnownMysteriesModifier(object oShadow, int nList) +{ + return GetPersistantLocalInt(oShadow, _MYSTERY_LIST_NAME_BASE + IntToString(nList) + _MYSTERY_LIST_MODIFIER); +} + +void SetKnownMysteriesModifier(object oShadow, int nList, int nNewValue) +{ + SetPersistantLocalInt(oShadow, _MYSTERY_LIST_NAME_BASE + IntToString(nList) + _MYSTERY_LIST_MODIFIER, nNewValue); +} + +int GetMysteryCount(object oShadow, int nList) +{ + return GetPersistantLocalInt(oShadow, _MYSTERY_LIST_NAME_BASE + IntToString(nList) + _MYSTERY_LIST_TOTAL_KNOWN); +} + +int GetMysteryCountByPath(object oShadow, int nPath) +{ + return GetPersistantLocalInt(oShadow, _MYSTERY_LIST_PATH + "_" + IntToString(nPath)); +} + +int GetMaxMysteryCount(object oShadow, int nList) +{ + int nMaxMysteries = 0; + + if(nList == MYSTERY_LIST_MISC) + { + if(DEBUG) DoDebug("GetMaxMysteryCount(): ERROR: Using unfinished power list!"); + } + else + { + int nLevel = GetLevelByClass(nList, oShadow); + if (nList == GetPrimaryShadowMagicClass(oShadow)) + nLevel += GetShadowMagicPRCLevels(oShadow); + string sFile = GetAMSKnownFileName(nList); + nMaxMysteries = StringToInt(Get2DACache(sFile, "Mysteries", nLevel - 1)); + + // Calculate feats + + // Add in the custom modifier + nMaxMysteries += GetKnownMysteriesModifier(oShadow, nList); + if(DEBUG) DoDebug("GetMaxMysteryCount(): " + IntToString(nList) + " Mysteries: " + IntToString(nMaxMysteries)); + } + + return nMaxMysteries; +} + +int GetHasMystery(int nMystery, object oShadow = OBJECT_SELF) +{ + if((GetLevelByClass(CLASS_TYPE_SHADOWCASTER, oShadow) + && GetHasFeat(GetClassFeatFromPower(nMystery, CLASS_TYPE_SHADOWCASTER), oShadow) + ) || + (GetLevelByClass(CLASS_TYPE_SHADOWSMITH, oShadow) + && GetHasFeat(GetClassFeatFromPower(nMystery, CLASS_TYPE_SHADOWSMITH), oShadow) + ) + // add new classes here + ) + return TRUE; + return FALSE; +} + +string DebugListKnownMysteries(object oShadow) +{ + string sReturn = "Mysteries known by " + DebugObject2Str(oShadow) + ":\n"; + int i, j, k, numPowerLists = 6; + int nPowerList, nSize; + string sTemp, sArray, sArrayBase, sPowerFile; + // Loop over all power lists + for(i = 1; i <= numPowerLists; i++) + { + // Some padding + sReturn += " "; + // Get the power list for this loop + switch(i) + { + case 1: nPowerList = MYSTERY_LIST_SHADOWCASTER; sReturn += "SHADOWCASTER"; break; + case 2: nPowerList = MYSTERY_LIST_SHADOWSMITH; sReturn += "SHADOWSMITH"; break; + + // This should always be last + case 6: nPowerList = MYSTERY_LIST_MISC; sReturn += "Misceallenous"; break; + } + sReturn += " Mysteries known:\n"; + + // Determine if the character has any Mysteries from this list + sPowerFile = GetAMSDefinitionFileName(nPowerList); + sArrayBase = _MYSTERY_LIST_NAME_BASE + IntToString(nPowerList); + + // Loop over levels + for(j = 1; j <= GetHitDice(oShadow); j++) + { + sArray = sArrayBase + _MYSTERY_LIST_LEVEL_ARRAY + IntToString(j); + if(persistant_array_exists(oShadow, sArray)) + { + sReturn += " Gained on level " + IntToString(j) + ":\n"; + nSize = persistant_array_get_size(oShadow, sArray); + for(k = 0; k < nSize; k++) + sReturn += " " + GetStringByStrRef(StringToInt(Get2DACache(sPowerFile, "Name", + GetPowerfileIndexFromSpellID(persistant_array_get_int(oShadow, sArray, k)) + ) + ) + ) + + "\n"; + } + } + + // Non-leveldependent Mysteries + sArray = sArrayBase + _MYSTERY_LIST_GENERAL_ARRAY; + if(persistant_array_exists(oShadow, sArray)) + { + sReturn += " Non-leveldependent:\n"; + nSize = persistant_array_get_size(oShadow, sArray); + for(k = 0; k < nSize; k++) + sReturn += " " + GetStringByStrRef(StringToInt(Get2DACache(sPowerFile, "Name", + GetPowerfileIndexFromSpellID(persistant_array_get_int(oShadow, sArray, k)) + ) + ) + ) + + "\n"; + } + } + + return sReturn; +} + +int GetMaxMysteryLevelLearnable(object oShadow, int nClass, int nType) +{ + if(DEBUG) DoDebug("GetMaxMysteryLevelLearnable nType: " + IntToString(nType)); + + // Rules Quote: + // Within a category—Apprentice, Initiate, Master—you must have at least two mysteries of any given level + // before you can take any mysteries of the next higher level. For instance, you must have two 1st-level + // mysteries before you can take any 2nds, and at least two 2nds before you can take any 3rds. + int nMaxLrn, i, nMystLevel, nCount1, nCount2; + string sFeatID; + int nLevel = GetLevelByClass(nClass, oShadow); + if (nClass == GetPrimaryShadowMagicClass(oShadow)) + nLevel += GetShadowMagicPRCLevels(oShadow); + if(DEBUG) DoDebug("GetMaxMysteryLevelLearnable nClass: " + IntToString(nClass)); + string sPowerFile = GetAMSDefinitionFileName(nClass); + if(DEBUG) DoDebug("GetMaxMysteryLevelLearnable sPowerFile: " + sPowerFile); + + if (nType == 3 && nLevel >= 13 && nClass == CLASS_TYPE_SHADOWCASTER) // Master mysteries, must be minimum 13th level + { + for(i = 0; i < GetPRCSwitch(FILE_END_CLASS_POWER) ; i++) + { + sFeatID = Get2DACache(sPowerFile, "FeatID", i); + if(sFeatID != "" && GetHasFeat(StringToInt(sFeatID), oShadow)) // Make sure it's not a blank mystery and that the PC has it + { + nMystLevel = StringToInt(Get2DACache(sPowerFile, "Level", i)); + if (nMystLevel == 7) nCount1++; + else if (nMystLevel == 8) nCount2++; // Don't need to check for 9th because 10th don't exist + } + } + //DoDebug("GetMaxMysteryLevelLearnable nCount1: " + IntToString(nCount1)); + //DoDebug("GetMaxMysteryLevelLearnable nCount2: " + IntToString(nCount2)); + if (nCount2 > 1) // Need to know at least two + nMaxLrn = 9; + else if (nCount1 > 1) // Need to know at least two + nMaxLrn = 8; + else // At 13th level you get access to 7ths regardless + nMaxLrn = 7; + } + else if (nType == 2 && nLevel >= 7 && nClass == CLASS_TYPE_SHADOWCASTER) // Initiate mysteries + { + for(i = 0; i < GetPRCSwitch(FILE_END_CLASS_POWER) ; i++) + { + sFeatID = Get2DACache(sPowerFile, "FeatID", i); + if(sFeatID != "" && GetHasFeat(StringToInt(sFeatID), oShadow)) // Make sure it's not a blank mystery and that the PC has it + { + nMystLevel = StringToInt(Get2DACache(sPowerFile, "Level", i)); + if (nMystLevel == 4) nCount1++; + else if (nMystLevel == 5) nCount2++; // Don't need to check for 6th because 7th is triggered by level + } + } + //DoDebug("GetMaxMysteryLevelLearnable nCount1: " + IntToString(nCount1)); + //DoDebug("GetMaxMysteryLevelLearnable nCount2: " + IntToString(nCount2)); + if (nCount2 > 1) // Need to know at least two + nMaxLrn = 6; + else if (nCount1 > 1) // Need to know at least two + nMaxLrn = 5; + else // At 7th level you get access to 4ths regardless + nMaxLrn = 4; + } + else // Apprentice mysteries + { + for(i = 0; i < GetPRCSwitch(FILE_END_CLASS_POWER) ; i++) + { + sFeatID = Get2DACache(sPowerFile, "FeatID", i); + if(sFeatID != "" && GetHasFeat(StringToInt(sFeatID), oShadow)) // Make sure it's not a blank mystery and that the PC has it + { + nMystLevel = StringToInt(Get2DACache(sPowerFile, "Level", i)); + if (nMystLevel == 1) nCount1++; + else if (nMystLevel == 2) nCount2++; // Don't need to check for 3rd because 4th is triggered by level + } + } + //DoDebug("GetMaxMysteryLevelLearnable nCount1: " + IntToString(nCount1)); + //DoDebug("GetMaxMysteryLevelLearnable nCount2: " + IntToString(nCount2)); + if (nCount2 > 1) // Need to know at least two + nMaxLrn = 3; + else if (nCount1 > 1) // Need to know at least two + nMaxLrn = 2; + else // At 1st level you get access to 1st regardless + nMaxLrn = 1; + } + + //DoDebug("GetMaxMysteryLevelLearnable nMaxLrn: " + IntToString(nMaxLrn)); + + return nMaxLrn; +} + +int GetCompletedPaths(object oShadow) +{ + int i, nReturn, nPath; + for(i = 0; i < 24; i++) + { + //if(DEBUG) DoDebug("GetCompletedPaths(): i " + IntToString(i)); + nPath = GetMysteryCountByPath(oShadow, i); + //if(DEBUG) DoDebug("GetCompletedPaths(): nPath " + IntToString(nPath)); + if(nPath == 3) // Completed Path + nReturn++; //Number of completed paths + } + + //if(DEBUG) DoDebug("GetCompletedPaths(): nReturn " + IntToString(nReturn)); + // Return the total + return nReturn; +} + +void AddPathBonusFeat(object oShadow, int nFeat) +{ + if (GetHasFeat(nFeat, oShadow)) return; // No point adding something they've got + + int nCount, i; + for(i = 1; i < 7 ; i++) + { + if (GetPersistantLocalInt(oShadow, "PathBonus"+IntToString(i)) > 0) // Make sure to only fill empty ones + nCount++; + } + + SetPersistantLocalInt(oShadow, "PathBonus"+IntToString(nCount + 1), nFeat); + + // Give the power's control feats + object oSkin = GetPCSkin(oShadow); + int nIPFeat = PathFeatToIPFeat(nFeat); + itemproperty ipFeat = PRCItemPropertyBonusFeat(nIPFeat); + IPSafeAddItemProperty(oSkin, ipFeat, 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); +} + +int GetPathBonusFeats(object oShadow) +{ + int nCount, i; + for(i = 1; i < 7 ; i++) + { + if (GetPersistantLocalInt(oShadow, "PathBonus"+IntToString(i)) > 0) // Count filled ones + nCount++; + } + + return nCount; +} + +void ReapplyPathBonusFeat(object oShadow) +{ + int nFeat, i; + object oSkin = GetPCSkin(oShadow); + for(i = 1; i < 7 ; i++) + { + nFeat = GetPersistantLocalInt(oShadow, "PathBonus"+IntToString(i)); + if (nFeat > 0 && !GetHasFeat(nFeat, oShadow))// Only apply if it's a valid feat they don't have + { + int nIPFeat = PathFeatToIPFeat(nFeat); + itemproperty ipFeat = PRCItemPropertyBonusFeat(nIPFeat); + IPSafeAddItemProperty(oSkin, ipFeat, 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + } + } +} + +int PathFeatToIPFeat(int nFeat) +{ + int nIPFeat = -1; + switch(nFeat) + { + case FEAT_PATH_FOCUS_CLOAK_SHADOWS : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_CLOAK_SHADOWS ; break; + case FEAT_PATH_FOCUS_DARK_TERRAIN : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_DARK_TERRAIN ; break; + case FEAT_PATH_FOCUS_EBON_WHISPERS : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_EBON_WHISPERS ; break; + case FEAT_PATH_FOCUS_EYES_DARKNESS : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_EYES_DARKNESS ; break; + case FEAT_PATH_FOCUS_SHUTTERS_CLOUDS : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_SHUTTERS_CLOUDS ; break; + case FEAT_PATH_FOCUS_TOUCH_TWILIGHT : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_TOUCH_TWILIGHT ; break; + case FEAT_PATH_FOCUS_UMBRAL_MIND : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_UMBRAL_MIND ; break; + case FEAT_PATH_FOCUS_BLACK_MAGIC : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_BLACK_MAGIC ; break; + case FEAT_PATH_FOCUS_BODY_SOUL : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_BODY_SOUL ; break; + case FEAT_PATH_FOCUS_DARK_REFLECTIONS : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_DARK_REFLECTIONS ; break; + case FEAT_PATH_FOCUS_EBON_ROADS : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_EBON_ROADS ; break; + case FEAT_PATH_FOCUS_ELEMENTAL_SHADOWS : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_ELEMENTAL_SHADOWS ; break; + case FEAT_PATH_FOCUS_UNBINDING_SHADE : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_UNBINDING_SHADE ; break; + case FEAT_PATH_FOCUS_VEIL_SHADOWS : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_VEIL_SHADOWS ; break; + case FEAT_PATH_FOCUS_BREATH_TWILIGHT : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_BREATH_TWILIGHT ; break; + case FEAT_PATH_FOCUS_DARK_METAMORPHOSIS : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_DARK_METAMORPHOSIS ; break; + case FEAT_PATH_FOCUS_EBON_WALLS : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_EBON_WALLS ; break; + case FEAT_PATH_FOCUS_EYES_NIGHT_SKY : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_EYES_NIGHT_SKY ; break; + case FEAT_PATH_FOCUS_HEART_SOUL : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_HEART_SOUL ; break; + case FEAT_PATH_FOCUS_SHADOW_CALLING : nIPFeat = IP_CONST_FEAT_PATH_FOCUS_SHADOW_CALLING ; break; + case FEAT_GREATER_PATH_FOCUS_CLOAK_SHADOWS : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_CLOAK_SHADOWS ; break; + case FEAT_GREATER_PATH_FOCUS_DARK_TERRAIN : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_DARK_TERRAIN ; break; + case FEAT_GREATER_PATH_FOCUS_EBON_WHISPERS : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_EBON_WHISPERS ; break; + case FEAT_GREATER_PATH_FOCUS_EYES_DARKNESS : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_EYES_DARKNESS ; break; + case FEAT_GREATER_PATH_FOCUS_SHUTTERS_CLOUDS : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_SHUTTERS_CLOUDS ; break; + case FEAT_GREATER_PATH_FOCUS_TOUCH_TWILIGHT : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_TOUCH_TWILIGHT ; break; + case FEAT_GREATER_PATH_FOCUS_UMBRAL_MIND : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_UMBRAL_MIND ; break; + case FEAT_GREATER_PATH_FOCUS_BLACK_MAGIC : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_BLACK_MAGIC ; break; + case FEAT_GREATER_PATH_FOCUS_BODY_SOUL : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_BODY_SOUL ; break; + case FEAT_GREATER_PATH_FOCUS_DARK_REFLECTIONS : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_DARK_REFLECTIONS ; break; + case FEAT_GREATER_PATH_FOCUS_EBON_ROADS : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_EBON_ROADS ; break; + case FEAT_GREATER_PATH_FOCUS_ELEMENTAL_SHADOWS : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_ELEMENTAL_SHADOWS ; break; + case FEAT_GREATER_PATH_FOCUS_UNBINDING_SHADE : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_UNBINDING_SHADE ; break; + case FEAT_GREATER_PATH_FOCUS_VEIL_SHADOWS : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_VEIL_SHADOWS ; break; + case FEAT_GREATER_PATH_FOCUS_BREATH_TWILIGHT : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_BREATH_TWILIGHT ; break; + case FEAT_GREATER_PATH_FOCUS_DARK_METAMORPHOSIS: nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_DARK_METAMORPHOSIS; break; + case FEAT_GREATER_PATH_FOCUS_EBON_WALLS : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_EBON_WALLS ; break; + case FEAT_GREATER_PATH_FOCUS_EYES_NIGHT_SKY : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_EYES_NIGHT_SKY ; break; + case FEAT_GREATER_PATH_FOCUS_HEART_SOUL : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_HEART_SOUL ; break; + case FEAT_GREATER_PATH_FOCUS_SHADOW_CALLING : nIPFeat = IP_CONST_FEAT_GREATER_PATH_FOCUS_SHADOW_CALLING ; break; + case FEAT_NOCTURNAL_CASTER_CLOAK_SHADOWS : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_CLOAK_SHADOWS ; break; + case FEAT_NOCTURNAL_CASTER_DARK_TERRAIN : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_DARK_TERRAIN ; break; + case FEAT_NOCTURNAL_CASTER_EBON_WHISPERS : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_EBON_WHISPERS ; break; + case FEAT_NOCTURNAL_CASTER_EYES_DARKNESS : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_EYES_DARKNESS ; break; + case FEAT_NOCTURNAL_CASTER_SHUTTERS_CLOUDS : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_SHUTTERS_CLOUDS ; break; + case FEAT_NOCTURNAL_CASTER_TOUCH_TWILIGHT : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_TOUCH_TWILIGHT ; break; + case FEAT_NOCTURNAL_CASTER_UMBRAL_MIND : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_UMBRAL_MIND ; break; + case FEAT_NOCTURNAL_CASTER_BLACK_MAGIC : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_BLACK_MAGIC ; break; + case FEAT_NOCTURNAL_CASTER_BODY_SOUL : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_BODY_SOUL ; break; + case FEAT_NOCTURNAL_CASTER_DARK_REFLECTIONS : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_DARK_REFLECTIONS ; break; + case FEAT_NOCTURNAL_CASTER_EBON_ROADS : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_EBON_ROADS ; break; + case FEAT_NOCTURNAL_CASTER_ELEMENTAL_SHADOWS : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_ELEMENTAL_SHADOWS ; break; + case FEAT_NOCTURNAL_CASTER_UNBINDING_SHADE : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_UNBINDING_SHADE ; break; + case FEAT_NOCTURNAL_CASTER_VEIL_SHADOWS : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_VEIL_SHADOWS ; break; + case FEAT_NOCTURNAL_CASTER_BREATH_TWILIGHT : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_BREATH_TWILIGHT ; break; + case FEAT_NOCTURNAL_CASTER_DARK_METAMORPHOSIS : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_DARK_METAMORPHOSIS ; break; + case FEAT_NOCTURNAL_CASTER_EBON_WALLS : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_EBON_WALLS ; break; + case FEAT_NOCTURNAL_CASTER_EYES_NIGHT_SKY : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_EYES_NIGHT_SKY ; break; + case FEAT_NOCTURNAL_CASTER_HEART_SOUL : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_HEART_SOUL ; break; + case FEAT_NOCTURNAL_CASTER_SHADOW_CALLING : nIPFeat = IP_CONST_FEAT_NOCTURNAL_CASTER_SHADOW_CALLING ; break; + case FEAT_FAV_MYST_BENDPERSPECTIVE : nIPFeat = IP_CONST_FEAT_FAV_MYST_BENDPERSPECTIVE ; break; + case FEAT_FAV_MYST_CARPETSHADOW : nIPFeat = IP_CONST_FEAT_FAV_MYST_CARPETSHADOW ; break; + case FEAT_FAV_MYST_DUSKANDDAWN : nIPFeat = IP_CONST_FEAT_FAV_MYST_DUSKANDDAWN ; break; + case FEAT_FAV_MYST_LIFEFADES : nIPFeat = IP_CONST_FEAT_FAV_MYST_LIFEFADES ; break; + case FEAT_FAV_MYST_MESMERIZINGSHADE : nIPFeat = IP_CONST_FEAT_FAV_MYST_MESMERIZINGSHADE ; break; + case FEAT_FAV_MYST_STEELSHADOWS : nIPFeat = IP_CONST_FEAT_FAV_MYST_STEELSHADOWS ; break; + case FEAT_FAV_MYST_VOICEOFSHADOW : nIPFeat = IP_CONST_FEAT_FAV_MYST_VOICEOFSHADOW ; break; + case FEAT_FAV_MYST_BLACKFIRE : nIPFeat = IP_CONST_FEAT_FAV_MYST_BLACKFIRE ; break; + case FEAT_FAV_MYST_CONGRESSSHADOWS : nIPFeat = IP_CONST_FEAT_FAV_MYST_CONGRESSSHADOWS ; break; + case FEAT_FAV_MYST_FLESHFAILS : nIPFeat = IP_CONST_FEAT_FAV_MYST_FLESHFAILS ; break; + case FEAT_FAV_MYST_PIERCINGSIGHT : nIPFeat = IP_CONST_FEAT_FAV_MYST_PIERCINGSIGHT ; break; + case FEAT_FAV_MYST_SHADOWSKIN : nIPFeat = IP_CONST_FEAT_FAV_MYST_SHADOWSKIN ; break; + case FEAT_FAV_MYST_SIGHTECLIPSED : nIPFeat = IP_CONST_FEAT_FAV_MYST_SIGHTECLIPSED ; break; + case FEAT_FAV_MYST_THOUGHTSSHADOW : nIPFeat = IP_CONST_FEAT_FAV_MYST_THOUGHTSSHADOW ; break; + case FEAT_FAV_MYST_AFRAIDOFTHEDARK : nIPFeat = IP_CONST_FEAT_FAV_MYST_AFRAIDOFTHEDARK ; break; + case FEAT_FAV_MYST_CLINGINGDARKNESS : nIPFeat = IP_CONST_FEAT_FAV_MYST_CLINGINGDARKNESS ; break; + case FEAT_FAV_MYST_DANCINGSHADOWS : nIPFeat = IP_CONST_FEAT_FAV_MYST_DANCINGSHADOWS ; break; + case FEAT_FAV_MYST_FLICKER : nIPFeat = IP_CONST_FEAT_FAV_MYST_FLICKER ; break; + case FEAT_FAV_MYST_KILLINGSHADOWS : nIPFeat = IP_CONST_FEAT_FAV_MYST_KILLINGSHADOWS ; break; + case FEAT_FAV_MYST_SHARPSHADOWS : nIPFeat = IP_CONST_FEAT_FAV_MYST_SHARPSHADOWS ; break; + case FEAT_FAV_MYST_UMBRALTOUCH : nIPFeat = IP_CONST_FEAT_FAV_MYST_UMBRALTOUCH ; break; + case FEAT_FAV_MYST_AURAOFSHADE : nIPFeat = IP_CONST_FEAT_FAV_MYST_AURAOFSHADE ; break; + case FEAT_FAV_MYST_BOLSTER : nIPFeat = IP_CONST_FEAT_FAV_MYST_BOLSTER ; break; + case FEAT_FAV_MYST_SHADOWEVOCATION : nIPFeat = IP_CONST_FEAT_FAV_MYST_SHADOWEVOCATION ; break; + case FEAT_FAV_MYST_SHADOWVISION : nIPFeat = IP_CONST_FEAT_FAV_MYST_SHADOWVISION ; break; + case FEAT_FAV_MYST_SHADOWSFADE : nIPFeat = IP_CONST_FEAT_FAV_MYST_SHADOWSFADE ; break; + case FEAT_FAV_MYST_STEPINTOSHADOW : nIPFeat = IP_CONST_FEAT_FAV_MYST_STEPINTOSHADOW ; break; + case FEAT_FAV_MYST_WARPSPELL : nIPFeat = IP_CONST_FEAT_FAV_MYST_WARPSPELL ; break; + case FEAT_FAV_MYST_CURTAINSHADOWS : nIPFeat = IP_CONST_FEAT_FAV_MYST_CURTAINSHADOWS ; break; + case FEAT_FAV_MYST_DARKAIR : nIPFeat = IP_CONST_FEAT_FAV_MYST_DARKAIR ; break; + case FEAT_FAV_MYST_ECHOSPELL : nIPFeat = IP_CONST_FEAT_FAV_MYST_ECHOSPELL ; break; + case FEAT_FAV_MYST_FEIGNLIFE : nIPFeat = IP_CONST_FEAT_FAV_MYST_FEIGNLIFE ; break; + case FEAT_FAV_MYST_LANGUOR : nIPFeat = IP_CONST_FEAT_FAV_MYST_LANGUOR ; break; + case FEAT_FAV_MYST_PASSINTOSHADOW : nIPFeat = IP_CONST_FEAT_FAV_MYST_PASSINTOSHADOW ; break; + case FEAT_FAV_MYST_UNRAVELDWEOMER : nIPFeat = IP_CONST_FEAT_FAV_MYST_UNRAVELDWEOMER ; break; + case FEAT_FAV_MYST_FLOODSHADOWS : nIPFeat = IP_CONST_FEAT_FAV_MYST_FLOODSHADOWS ; break; + case FEAT_FAV_MYST_GREATERSHADOWEVOCATION : nIPFeat = IP_CONST_FEAT_FAV_MYST_GREATERSHADOWEVOCATION ; break; + case FEAT_FAV_MYST_SHADOWINVESTITURE : nIPFeat = IP_CONST_FEAT_FAV_MYST_SHADOWINVESTITURE ; break; + case FEAT_FAV_MYST_SHADOWSTORM : nIPFeat = IP_CONST_FEAT_FAV_MYST_SHADOWSTORM ; break; + case FEAT_FAV_MYST_SHADOWSFADE_GREATER : nIPFeat = IP_CONST_FEAT_FAV_MYST_SHADOWSFADE_GREATER ; break; + case FEAT_FAV_MYST_UNVEIL : nIPFeat = IP_CONST_FEAT_FAV_MYST_UNVEIL ; break; + case FEAT_FAV_MYST_VOYAGESHADOW : nIPFeat = IP_CONST_FEAT_FAV_MYST_VOYAGESHADOW ; break; + case FEAT_FAV_MYST_DARKSOUL : nIPFeat = IP_CONST_FEAT_FAV_MYST_DARKSOUL ; break; + case FEAT_FAV_MYST_EPHEMERALIMAGE : nIPFeat = IP_CONST_FEAT_FAV_MYST_EPHEMERALIMAGE ; break; + case FEAT_FAV_MYST_LIFEFADESGREATER : nIPFeat = IP_CONST_FEAT_FAV_MYST_LIFEFADESGREATER ; break; + case FEAT_FAV_MYST_PRISONNIGHT : nIPFeat = IP_CONST_FEAT_FAV_MYST_PRISONNIGHT ; break; + case FEAT_FAV_MYST_UMBRALSERVANT : nIPFeat = IP_CONST_FEAT_FAV_MYST_UMBRALSERVANT ; break; + case FEAT_FAV_MYST_TRUTHREVEALED : nIPFeat = IP_CONST_FEAT_FAV_MYST_TRUTHREVEALED ; break; + case FEAT_FAV_MYST_FARSIGHT : nIPFeat = IP_CONST_FEAT_FAV_MYST_FARSIGHT ; break; + case FEAT_FAV_MYST_GRFLESHFAILS : nIPFeat = IP_CONST_FEAT_FAV_MYST_GRFLESHFAILS ; break; + case FEAT_FAV_MYST_SHADOWPLAGUE : nIPFeat = IP_CONST_FEAT_FAV_MYST_SHADOWPLAGUE ; break; + case FEAT_FAV_MYST_SOULPUPPET : nIPFeat = IP_CONST_FEAT_FAV_MYST_SOULPUPPET ; break; + case FEAT_FAV_MYST_TOMBNIGHT : nIPFeat = IP_CONST_FEAT_FAV_MYST_TOMBNIGHT ; break; + case FEAT_FAV_MYST_UMBRALBODY : nIPFeat = IP_CONST_FEAT_FAV_MYST_UMBRALBODY ; break; + case FEAT_FAV_MYST_ARMYSHADOW : nIPFeat = IP_CONST_FEAT_FAV_MYST_ARMYSHADOW ; break; + case FEAT_FAV_MYST_CONSUMEESSENCE : nIPFeat = IP_CONST_FEAT_FAV_MYST_CONSUMEESSENCE ; break; + case FEAT_FAV_MYST_EPHEMERALSTORM : nIPFeat = IP_CONST_FEAT_FAV_MYST_EPHEMERALSTORM ; break; + case FEAT_FAV_MYST_REFLECTIONS : nIPFeat = IP_CONST_FEAT_FAV_MYST_REFLECTIONS ; break; + case FEAT_FAV_MYST_SHADOWSURGE : nIPFeat = IP_CONST_FEAT_FAV_MYST_SHADOWSURGE ; break; + case FEAT_FAV_MYST_SHADOWTIME : nIPFeat = IP_CONST_FEAT_FAV_MYST_SHADOWTIME ; break; + case FEAT_SHADOW_CAST : nIPFeat = IP_CONST_FEAT_SHADOW_CAST ; break; + case FEAT_EMPOWER_MYSTERY : nIPFeat = IP_CONST_FEAT_EMPOWER_MYSTERY ; break; + case FEAT_EXTEND_MYSTERY : nIPFeat = IP_CONST_FEAT_EXTEND_MYSTERY ; break; + case FEAT_MAXIMIZE_MYSTERY : nIPFeat = IP_CONST_FEAT_MAXIMIZE_MYSTERY ; break; + case FEAT_QUICKEN_MYSTERY : nIPFeat = IP_CONST_FEAT_QUICKEN_MYSTERY ; break; + case FEAT_STILL_MYSTERY : nIPFeat = IP_CONST_FEAT_STILL_MYSTERY ; break; + } + + return nIPFeat; +} \ No newline at end of file diff --git a/src/include/shd_inc_shdfunc.nss b/src/include/shd_inc_shdfunc.nss new file mode 100644 index 0000000..63eb943 --- /dev/null +++ b/src/include/shd_inc_shdfunc.nss @@ -0,0 +1,756 @@ +//:://///////////////////////////////////////////// +//:: Shadowcasting main include: Miscellaneous +//:: shd_inc_shdfunc +//:://///////////////////////////////////////////// +/** @file + Defines various functions and other stuff that + do something related to Shadowcasting. + + Also acts as inclusion nexus for the general + shadowcasting includes. In other words, don't include + them directly in your scripts, instead include this. + + @author Stratovarius + @date Created - 2019.02.08 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +//:: Updated for .35 by Jaysyn 2023/10/19 + +//:: Test Void +// void main (){} + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Determines from what class's mystery list the currently being shadowcast + * mystery is shadowcast from. + * + * @param oShadow A creature shadowcasting a mystery at this moment + * @return CLASS_TYPE_* constant of the class + */ +int GetShadowcastingClass(object oShadow = OBJECT_SELF); + +/** + * Determines the given creature's Shadowcaster level. If a class is specified, + * then returns the Shadowcaster level for that class. Otherwise, returns + * the Shadowcaster level for the currently active mystery. + * + * @param oShadow The creature whose Shadowcaster level to determine + * @param nSpecificClass The class to determine the creature's Shadowcaster + * level in. + * DEFAULT: CLASS_TYPE_INVALID, which means the creature's + * Shadowcaster level in regards to an ongoing mystery + * is determined instead. + * @return The Shadowcaster level + */ +int GetShadowcasterLevel(object oShadow = OBJECT_SELF, int nSpecificClass = CLASS_TYPE_INVALID); + +/** + * Determines whether a given creature uses ShadowMagic. + * Requires either levels in a ShadowMagic-related class or + * natural ShadowMagic ability based on race. + * + * @param oCreature Creature to test + * @return TRUE if the creature can use ShadowMagics, FALSE otherwise. + */ +int GetIsShadowMagicUser(object oCreature); + +/** + * Determines the given creature's highest unmodified Shadowcaster level among its + * shadowcasting classes. + * + * @param oCreature Creature whose highest Shadowcaster level to determine + * @return The highest unmodified Shadowcaster level the creature can have + */ +int GetHighestShadowcasterLevel(object oCreature); + +/** + * Determines whether a given class is a ShadowMagic-related class or not. + * + * @param nClass CLASS_TYPE_* of the class to test + * @return TRUE if the class is a ShadowMagic-related class, FALSE otherwise + */ +int GetIsShadowMagicClass(int nClass); + +/** + * Gets the level of the mystery being currently shadowcast or the level + * of the mystery ID passed to it. + * + * @param oShadow The creature currently shadowcasting a mystery + * @return The level of the mystery being shadowcast + */ +int GetMysteryLevel(object oShadow, int nMystId = 0); + +/** + * Returns the name of the Path + * + * @param nPath PATH_* to name + */ +string GetPathName(int nPath); + +/** + * Returns the Path the mystery is in + * @param nMystId Mystery to check + * + * @return PATH_* + */ +int GetPathByMystery(int nMystId); + +/** + * Returns true or false if the character has Path + * focus in the chosen path + * @param oShadow Person to check + * @param nPath Path to check + * + * @return TRUE or FALSE + */ +int GetHasPathFocus(object oShadow, int nPath); + +/** + * Calculates how many shadowcaster levels are gained by a given creature from + * it's levels in prestige classes. + * + * @param oCreature Creature to calculate added shadowcaster levels for + * @return The number of shadowcaster levels gained + */ +int GetShadowMagicPRCLevels(object oShadow); + +/** + * Determines which of the character's classes is their highest or first + * shadowcasting class, if any. This is the one which gains shadowcaster + * level raise benefits from prestige classes. + * + * @param oCreature Creature whose classes to test + * @return CLASS_TYPE_* of the first shadowcasting class, + * CLASS_TYPE_INVALID if the creature does not possess any. + */ +int GetPrimaryShadowMagicClass(object oCreature = OBJECT_SELF); + +/** + * Determines the position of a creature's first shadowcasting class, if any. + * + * @param oCreature Creature whose classes to test + * @return The position of the first shadowcasting class {1, 2, 3} or 0 if + * the creature possesses no levels in shadowcasting classes. + */ +int GetFirstShadowMagicClassPosition(object oCreature = OBJECT_SELF); + +/** + * Returns ability score needed to Shadowcast + * Type 1 is score to cast, Type 2 is score for DC + * + * @param nClass The class to check + * @return ABILITY_* + */ +int GetShadowAbilityOfClass(int nClass, int nType); + +/** + * Calculates the DC of the Mystery being currently shadowcast. + * + * WARNING: Return value is not defined when a mystery isn't being shadowcast. + * + */ +int GetShadowcasterDC(object oShadow = OBJECT_SELF); + +/** + * Calculates the SpellPen of the Mystery being currently shadowcast. + * Whether a Mystery is supernatural or not is checked in EvaluateMystery + * + * Currently just a placeholder returning GetShadowcasterLevel + */ +int ShadowSRPen(object oShadow, int nShadowcasterLevel); + +/** + * Stores a mystery structure as a set of local variables. If + * a structure was already stored with the same name on the same object, + * it is overwritten. + * + * @param oObject The object on which to store the structure + * @param sName The name under which to store the structure + * @param myst The mystery structure to store + */ +void SetLocalMystery(object oObject, string sName, struct mystery myst); + +/** + * Retrieves a previously stored mystery structure. If no structure is stored + * by the given name, the structure returned is empty. + * + * @param oObject The object from which to retrieve the structure + * @param sName The name under which the structure is stored + * @return The structure built from local variables stored on oObject under sName + */ +struct mystery GetLocalMystery(object oObject, string sName); + +/** + * Returns the boost to caster level from feats + * + * @param oShadow The caster + * @param nMyst The mystery being cast + * @return Total bonus to caster level + */ +int ShadowcastingFeats(object oShadow, int nMyst); + +/** + * Returns the boost to DC from nocturnal caster + * + * @param oShadow The caster + * @param nPath The path to check for + * @return Total bonus to caster level + */ +int GetHasNocturnal(object oShadow, int nPath); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "prc_alterations" +#include "shd_inc_myst" +#include "shd_inc_mystknwn" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int GetShadowcastingClass(object oShadow = OBJECT_SELF) +{ + int nReturn = GetLocalInt(oShadow, PRC_SHADOWCASTING_CLASS) - 1; + //if (DEBUG) FloatingTextStringOnCreature("GetShadowcastingClass: GetShadowcastingClass value is "+IntToString(nReturn), oShadow); + return nReturn; +} + +int GetShadowcasterLevel(object oShadow = OBJECT_SELF, int nSpecificClass = CLASS_TYPE_INVALID) +{ + int nAdjust = GetLocalInt(oShadow, PRC_CASTERLEVEL_ADJUSTMENT); + int nLevel = GetLocalInt(oShadow, PRC_CASTERLEVEL_OVERRIDE); + int nMyst = PRCGetSpellId(); // The fact that this will return 0 sometimes is relied upon + if (GetIsFundamental(nMyst)) nSpecificClass = CLASS_TYPE_SHADOWCASTER; + + // For when you want to assign the caster level. + if(nLevel) + { + if(DEBUG) SendMessageToPC(oShadow, "GetShadowcasterLevel(): Forced-level shadowcasting at level " + IntToString(nLevel)); + //DelayCommand(1.0, DeleteLocalInt(oShadow, PRC_CASTERLEVEL_OVERRIDE)); + return nLevel + nAdjust; + } + + if (DEBUG) FloatingTextStringOnCreature("GetShadowcasterLevel: "+GetName(oShadow)+" is a "+IntToString(nSpecificClass), oShadow); + // The function user needs to know the character's Shadowcaster level in a specific class + // instead of whatever the character last shadowcast a mystery as + if(nSpecificClass != CLASS_TYPE_INVALID) + { + //if (DEBUG) FloatingTextStringOnCreature("GetShadowcasterLevel: Class is Valid", oShadow); + if(GetIsShadowMagicClass(nSpecificClass)) + { + //if (DEBUG) FloatingTextStringOnCreature("GetShadowcasterLevel: Class is Shadow Magic Class", oShadow); + // Shadowcaster level is class level + prestige + nLevel = GetLevelByClass(nSpecificClass, oShadow); + if(nLevel) + { + nLevel += GetShadowMagicPRCLevels(oShadow); + nLevel += ShadowcastingFeats(oShadow, nMyst); + if (GetLocalInt(oShadow, "CaptureMagic")) + { + nLevel += GetLocalInt(oShadow, "CaptureMagic"); + DeleteLocalInt(oShadow, "CaptureMagic"); + } + if (GetLocalInt(oShadow, "EldritchDisrupt")) + nLevel -= 4; + if (GetLocalInt(oShadow, "EldritchVortex")) + nLevel -= 4; + } + } + } + else if(GetShadowcastingClass(oShadow) != -1) + { + //if (DEBUG) FloatingTextStringOnCreature("GetShadowcasterLevel: GetShadowcastingClass", oShadow); + nLevel = GetLevelByClass(GetShadowcastingClass(oShadow), oShadow); + //if (DEBUG) FloatingTextStringOnCreature("GetShadowcasterLevel: GetShadowcastingClass level "+IntToString(nLevel), oShadow); + nLevel += GetShadowMagicPRCLevels(oShadow); + //if (DEBUG) FloatingTextStringOnCreature("GetShadowcasterLevel: GetShadowcastingClass prestige level "+IntToString(nLevel), oShadow); + nLevel += ShadowcastingFeats(oShadow, nMyst); + //if (DEBUG) FloatingTextStringOnCreature("GetShadowcasterLevel: GetShadowcastingClass feat level "+IntToString(nLevel), oShadow); + if (GetLocalInt(oShadow, "CaptureMagic")) + { + nLevel += GetLocalInt(oShadow, "CaptureMagic"); + DeleteLocalInt(oShadow, "CaptureMagic"); + } + if (GetLocalInt(oShadow, "EldritchDisrupt")) + nLevel -= 4; + if (GetLocalInt(oShadow, "EldritchVortex")) + nLevel -= 4; + } + + if(DEBUG) FloatingTextStringOnCreature("Shadowcaster Level: " + IntToString(nLevel), oShadow, FALSE); + + return nLevel + nAdjust; +} + +int GetIsShadowMagicUser(object oCreature) +{ + return !!(GetLevelByClass(CLASS_TYPE_SHADOWCASTER, oCreature) + || GetLevelByClass(CLASS_TYPE_SHADOWSMITH, oCreature)); +} + +int GetHighestShadowcasterLevel(object oCreature) +{ + int n = 0; + int nHighest; + int nTemp; + + while(n <= 8) + { + if(GetClassByPosition(n, oCreature) != CLASS_TYPE_INVALID) + { + nTemp = GetShadowcasterLevel(oCreature, GetClassByPosition(n, oCreature)); + + if(nTemp > nHighest) + nHighest = nTemp; + } + n++; + + } + + return nHighest; +} + +/* int GetHighestShadowcasterLevel(object oCreature) +{ + return PRCMax(PRCMax(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetShadowcasterLevel(oCreature, GetClassByPosition(1, oCreature)) : 0, + GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID ? GetShadowcasterLevel(oCreature, GetClassByPosition(2, oCreature)) : 0 + ), + GetClassByPosition(3, oCreature) != CLASS_TYPE_INVALID ? GetShadowcasterLevel(oCreature, GetClassByPosition(3, oCreature)) : 0 + ); +} */ + +int GetIsShadowMagicClass(int nClass) +{ + return nClass == CLASS_TYPE_SHADOWCASTER + || nClass == CLASS_TYPE_SHADOWSMITH; +} + +int GetMysteryLevel(object oShadow, int nMystId = 0) +{ + if (nMystId > 0) return StringToInt(lookup_spell_innate(nMystId)); + int nLevel = GetLocalInt(oShadow, PRC_MYSTERY_LEVEL); + if (nLevel > 0) return nLevel; + + return 0; +} + +string GetPathName(int nPath) +{ + int nStrRef; + switch(nPath) + { + /* case PATH_DESERT_WIND: nStrRef = 16829714; break; + case PATH_DEVOTED_SPIRIT: nStrRef = 16829715; break; + case PATH_DIAMOND_MIND: nStrRef = 16829716; break; + case PATH_IRON_HEART: nStrRef = 16829717; break; + case PATH_SETTING_SUN: nStrRef = 16829718; break; + case PATH_SHADOW_HAND: nStrRef = 16829719; break; + case PATH_STONE_DRAGON: nStrRef = 16829720; break; + case PATH_TIGER_CLAW: nStrRef = 16829721; break; + case PATH_WHITE_RAVEN: nStrRef = 16829722; break;*/ + } + return GetStringByStrRef(nStrRef); +} + +int GetPathByMystery(int nMystId) +{ + // Shadowcaster has every mystery ever, so this is just the easy way out. + int i = GetPowerfileIndexFromRealSpellID(nMystId); + string sClass = GetAMSDefinitionFileName(CLASS_TYPE_SHADOWCASTER); + int nReturn = StringToInt(Get2DACache(sClass, "Path", i)); + /*if (DEBUG) DoDebug("GetPathByMystery() i "+IntToString(i)); + if (DEBUG) DoDebug("GetPathByMystery() sClass "+sClass); + if (DEBUG) DoDebug("GetPathByMystery() nReturn "+IntToString(nReturn)); */ + + return nReturn; +} + +int GetShadowMagicPRCLevels(object oShadow) +{ + int nLevel; + int nShadowClass = GetPrimaryShadowMagicClass(oShadow); + + if (nShadowClass == CLASS_TYPE_SHADOWCASTER) + { + if(GetHasFeat(FEAT_AOTS_MYSTERY_SHADOWCASTER, oShadow)) + nLevel += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oShadow) + 1) / 2; + + if(GetHasFeat(FEAT_ALIENIST_MYSTERY_SHADOWCASTER, oShadow)) + nLevel += GetLevelByClass(CLASS_TYPE_ALIENIST, oShadow); + + if(GetHasFeat(FEAT_CHILDNIGHT_MYSTERY_SHADOWCASTER, oShadow)) + nLevel += GetLevelByClass(CLASS_TYPE_CHILD_OF_NIGHT, oShadow) -1; //:: No increase @ 1st level + + if(GetHasFeat(FEAT_ASMODEUS_MYSTERY_SHADOWCASTER, oShadow)) + nLevel += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oShadow) + 1) / 2; + + if(GetHasFeat(FEAT_DSONG_MYSTERY_SHADOWCASTER, oShadow)) + nLevel += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oShadow) + 1) / 2; + + if(GetHasFeat(FEAT_ELESAVANT_MYSTERY_SHADOWCASTER, oShadow)) + nLevel += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oShadow); + + if(GetHasFeat(FEAT_MASTERSHADOW_MYSTERY_SHADOWCASTER, oShadow)) + nLevel += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHADOW, oShadow) -1; //:: No increase @ 1st level + + if(GetHasFeat(FEAT_MYSTICTHEURGE_MYSTERY_SHADOWCASTER, oShadow)) + nLevel += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oShadow); + + if(GetHasFeat(FEAT_NOCTUMANCER_MYSTERY_SHADOWCASTER, oShadow)) + nLevel += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oShadow); + + if(GetHasFeat(FEAT_OLLAM_MYSTERY_SHADOWCASTER, oShadow)) + nLevel += (GetLevelByClass(CLASS_TYPE_OLLAM, oShadow) + 1 / 2); + + if(GetHasFeat(FEAT_TIAMAT_MYSTERY_SHADOWCASTER, oShadow)) + nLevel += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oShadow) + 1 / 2); + + if(GetHasFeat(FEAT_ORCUS_MYSTERY_SHADOWCASTER, oShadow)) + nLevel += (GetLevelByClass(CLASS_TYPE_ORCUS, oShadow) + 1 / 2); + } + + if (nShadowClass == CLASS_TYPE_SHADOWSMITH) + { + if(GetHasFeat(FEAT_AOTS_MYSTERY_SHADOWSMITH, oShadow)) + nLevel += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oShadow) + 1) / 2; + + if(GetHasFeat(FEAT_ALIENIST_MYSTERY_SHADOWSMITH, oShadow)) + nLevel += GetLevelByClass(CLASS_TYPE_ALIENIST, oShadow); + + if(GetHasFeat(FEAT_CHILDNIGHT_MYSTERY_SHADOWSMITH, oShadow)) + nLevel += GetLevelByClass(CLASS_TYPE_CHILD_OF_NIGHT, oShadow) -1; //:: No increase @ 1st level + + if(GetHasFeat(FEAT_ASMODEUS_MYSTERY_SHADOWSMITH, oShadow)) + nLevel += (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oShadow) + 1) / 2; + + if(GetHasFeat(FEAT_DSONG_MYSTERY_SHADOWSMITH, oShadow)) + nLevel += (GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oShadow) + 1) / 2; + + if(GetHasFeat(FEAT_ELESAVANT_MYSTERY_SHADOWSMITH, oShadow)) + nLevel += GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT, oShadow); + + if(GetHasFeat(FEAT_MASTERSHADOW_MYSTERY_SHADOWSMITH, oShadow)) + nLevel += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHADOW, oShadow) -1; //:: No increase @ 1st level + + if(GetHasFeat(FEAT_MYSTICTHEURGE_MYSTERY_SHADOWSMITH, oShadow)) + nLevel += GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oShadow); + + if(GetHasFeat(FEAT_NOCTUMANCER_MYSTERY_SHADOWSMITH, oShadow)) + nLevel += GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oShadow); + + if(GetHasFeat(FEAT_OLLAM_MYSTERY_SHADOWSMITH, oShadow)) + nLevel += (GetLevelByClass(CLASS_TYPE_OLLAM, oShadow) + 1 / 2); + + if(GetHasFeat(FEAT_TIAMAT_MYSTERY_SHADOWSMITH, oShadow)) + nLevel += (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oShadow) + 1 / 2); + + if(GetHasFeat(FEAT_ORCUS_MYSTERY_SHADOWSMITH, oShadow)) + nLevel += (GetLevelByClass(CLASS_TYPE_ORCUS, oShadow) + 1 / 2); + } + + return nLevel; +} + + +/* int GetShadowMagicPRCLevels(object oShadow) +{ + int nLevel = GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oShadow); + + // These two don't add at 1st level + if (GetLevelByClass(CLASS_TYPE_CHILD_OF_NIGHT, oShadow)) + nLevel += GetLevelByClass(CLASS_TYPE_CHILD_OF_NIGHT, oShadow) - 1; + if (GetLevelByClass(CLASS_TYPE_MASTER_OF_SHADOW, oShadow)) + nLevel += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHADOW, oShadow) - 1; + + return nLevel; +} */ + +int GetPrimaryShadowMagicClass(object oCreature = OBJECT_SELF) +{ + int nClass = CLASS_TYPE_INVALID; + + if(GetPRCSwitch(PRC_CASTERLEVEL_FIRST_CLASS_RULE)) + { + int nShadowMagicPos = GetFirstShadowMagicClassPosition(oCreature); + if (!nShadowMagicPos) return CLASS_TYPE_INVALID; // no Blade Magic shadowcasting class + + nClass = GetClassByPosition(nShadowMagicPos, oCreature); + } + else + { + int nClassLvl; + int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8; + int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl; + + nClass1 = GetClassByPosition(1, oCreature); + nClass2 = GetClassByPosition(2, oCreature); + nClass3 = GetClassByPosition(3, oCreature); + nClass4 = GetClassByPosition(4, oCreature); + nClass5 = GetClassByPosition(5, oCreature); + nClass6 = GetClassByPosition(6, oCreature); + nClass7 = GetClassByPosition(7, oCreature); + nClass8 = GetClassByPosition(8, oCreature); + + if(GetIsShadowMagicClass(nClass1)) nClass1Lvl = GetLevelByClass(nClass1, oCreature); + if(GetIsShadowMagicClass(nClass2)) nClass2Lvl = GetLevelByClass(nClass2, oCreature); + if(GetIsShadowMagicClass(nClass3)) nClass3Lvl = GetLevelByClass(nClass3, oCreature); + if(GetIsShadowMagicClass(nClass4)) nClass4Lvl = GetLevelByClass(nClass4, oCreature); + if(GetIsShadowMagicClass(nClass5)) nClass5Lvl = GetLevelByClass(nClass5, oCreature); + if(GetIsShadowMagicClass(nClass6)) nClass6Lvl = GetLevelByClass(nClass6, oCreature); + if(GetIsShadowMagicClass(nClass7)) nClass7Lvl = GetLevelByClass(nClass7, oCreature); + if(GetIsShadowMagicClass(nClass8)) nClass8Lvl = GetLevelByClass(nClass8, oCreature); + + nClass = nClass1; + nClassLvl = nClass1Lvl; + + if(nClass2Lvl > nClassLvl) + { + nClass = nClass2; + nClassLvl = nClass2Lvl; + } + if(nClass3Lvl > nClassLvl) + { + nClass = nClass3; + nClassLvl = nClass3Lvl; + } + if(nClass4Lvl > nClassLvl) + { + nClass = nClass4; + nClassLvl = nClass4Lvl; + } + if(nClass5Lvl > nClassLvl) + { + nClass = nClass5; + nClassLvl = nClass5Lvl; + } + if(nClass6Lvl > nClassLvl) + { + nClass = nClass6; + nClassLvl = nClass6Lvl; + } + if(nClass7Lvl > nClassLvl) + { + nClass = nClass7; + nClassLvl = nClass7Lvl; + } + if(nClass8Lvl > nClassLvl) + { + nClass = nClass8; + nClassLvl = nClass8Lvl; + } + + if(nClassLvl == 0) + nClass = CLASS_TYPE_INVALID; + } + + return nClass; +} + +int GetFirstShadowMagicClassPosition(object oCreature = OBJECT_SELF) +{ + if (GetIsShadowMagicClass(GetClassByPosition(1, oCreature))) + return 1; + if (GetIsShadowMagicClass(GetClassByPosition(2, oCreature))) + return 2; + if (GetIsShadowMagicClass(GetClassByPosition(3, oCreature))) + return 3; + if (GetIsShadowMagicClass(GetClassByPosition(4, oCreature))) + return 4; + if (GetIsShadowMagicClass(GetClassByPosition(5, oCreature))) + return 5; + if (GetIsShadowMagicClass(GetClassByPosition(6, oCreature))) + return 6; + if (GetIsShadowMagicClass(GetClassByPosition(7, oCreature))) + return 7; + if (GetIsShadowMagicClass(GetClassByPosition(8, oCreature))) + return 8; + + return 0; +} + +int GetHasPathFocus(object oShadow, int nPath) +{ + //if (DEBUG) DoDebug("GetHasPathFocus() nPath "+IntToString(nPath)); + int nFocus, nGRFocus, nReturn; + switch(nPath) + { + case PATH_CLOAK_SHADOWS: nFocus = FEAT_PATH_FOCUS_CLOAK_SHADOWS ; nGRFocus = FEAT_GREATER_PATH_FOCUS_CLOAK_SHADOWS ; break; + case PATH_DARK_TERRAIN: nFocus = FEAT_PATH_FOCUS_DARK_TERRAIN ; nGRFocus = FEAT_GREATER_PATH_FOCUS_DARK_TERRAIN ; break; + case PATH_EBON_WHISPERS: nFocus = FEAT_PATH_FOCUS_EBON_WHISPERS ; nGRFocus = FEAT_GREATER_PATH_FOCUS_EBON_WHISPERS ; break; + case PATH_EYES_DARKNESS: nFocus = FEAT_PATH_FOCUS_EYES_DARKNESS ; nGRFocus = FEAT_GREATER_PATH_FOCUS_EYES_DARKNESS ; break; + case PATH_SHUTTERS_CLOUDS: nFocus = FEAT_PATH_FOCUS_SHUTTERS_CLOUDS ; nGRFocus = FEAT_GREATER_PATH_FOCUS_SHUTTERS_CLOUDS ; break; + case PATH_TOUCH_TWILIGHT: nFocus = FEAT_PATH_FOCUS_TOUCH_TWILIGHT ; nGRFocus = FEAT_GREATER_PATH_FOCUS_TOUCH_TWILIGHT ; break; + case PATH_UMBRAL_MIND: nFocus = FEAT_PATH_FOCUS_UMBRAL_MIND ; nGRFocus = FEAT_GREATER_PATH_FOCUS_UMBRAL_MIND ; break; + case PATH_BLACK_MAGIC: nFocus = FEAT_PATH_FOCUS_BLACK_MAGIC ; nGRFocus = FEAT_GREATER_PATH_FOCUS_BLACK_MAGIC ; break; + case PATH_BODY_SOUL: nFocus = FEAT_PATH_FOCUS_BODY_SOUL ; nGRFocus = FEAT_GREATER_PATH_FOCUS_BODY_SOUL ; break; + case PATH_DARK_REFLECTIONS: nFocus = FEAT_PATH_FOCUS_DARK_REFLECTIONS ; nGRFocus = FEAT_GREATER_PATH_FOCUS_DARK_REFLECTIONS ; break; + case PATH_EBON_ROADS: nFocus = FEAT_PATH_FOCUS_EBON_ROADS ; nGRFocus = FEAT_GREATER_PATH_FOCUS_EBON_ROADS ; break; + case PATH_ELEMENTAL_SHADOWS: nFocus = FEAT_PATH_FOCUS_ELEMENTAL_SHADOWS ; nGRFocus = FEAT_GREATER_PATH_FOCUS_ELEMENTAL_SHADOWS ; break; + case PATH_UNBINDING_SHADE: nFocus = FEAT_PATH_FOCUS_UNBINDING_SHADE ; nGRFocus = FEAT_GREATER_PATH_FOCUS_UNBINDING_SHADE ; break; + case PATH_VEIL_SHADOWS: nFocus = FEAT_PATH_FOCUS_VEIL_SHADOWS ; nGRFocus = FEAT_GREATER_PATH_FOCUS_VEIL_SHADOWS ; break; + case PATH_BREATH_TWILIGHT: nFocus = FEAT_PATH_FOCUS_BREATH_TWILIGHT ; nGRFocus = FEAT_GREATER_PATH_FOCUS_BREATH_TWILIGHT ; break; + case PATH_DARK_METAMORPHOSIS: nFocus = FEAT_PATH_FOCUS_DARK_METAMORPHOSIS; nGRFocus = FEAT_GREATER_PATH_FOCUS_DARK_METAMORPHOSIS; break; + case PATH_EBON_WALLS: nFocus = FEAT_PATH_FOCUS_EBON_WALLS ; nGRFocus = FEAT_GREATER_PATH_FOCUS_EBON_WALLS ; break; + case PATH_EYES_NIGHT_SKY: nFocus = FEAT_PATH_FOCUS_EYES_NIGHT_SKY ; nGRFocus = FEAT_GREATER_PATH_FOCUS_EYES_NIGHT_SKY ; break; + case PATH_HEART_SOUL: nFocus = FEAT_PATH_FOCUS_HEART_SOUL ; nGRFocus = FEAT_GREATER_PATH_FOCUS_HEART_SOUL ; break; + case PATH_SHADOW_CALLING: nFocus = FEAT_PATH_FOCUS_SHADOW_CALLING ; nGRFocus = FEAT_GREATER_PATH_FOCUS_SHADOW_CALLING ; break; + case PATH_NIGHTS_LONG_FINGERS: nFocus = FEAT_PATH_FOCUS_NIGHTS_LONG_FINGERS; nGRFocus = FEAT_GREATER_PATH_FOCUS_NIGHTS_LONG_FINGERS; break; + case PATH_DARKENED_ALLEYS: nFocus = FEAT_PATH_FOCUS_DARKENED_ALLEYS ; nGRFocus = FEAT_GREATER_PATH_FOCUS_DARKENED_ALLEYS ; break; + case PATH_SHADOWSCAPE: nFocus = FEAT_PATH_FOCUS_SHADOWSCAPE ; nGRFocus = FEAT_GREATER_PATH_FOCUS_SHADOWSCAPE ; break; + } + if(GetHasFeat(nFocus, oShadow)) + nReturn = 1; + if(GetHasFeat(nGRFocus, oShadow)) + nReturn = 2; + + //if (DEBUG) DoDebug("GetHasPathFocus() nReturn "+IntToString(nReturn)); + + // If none of those trigger. + return nReturn; +} + +int GetShadowAbilityOfClass(int nClass, int nType) +{ + if (nClass == CLASS_TYPE_SHADOWSMITH) return ABILITY_INTELLIGENCE; + // Intelligence for max mystery known + if (nClass == CLASS_TYPE_SHADOWCASTER && nType == 1) return ABILITY_INTELLIGENCE; + // Charisma for DC + if (nClass == CLASS_TYPE_SHADOWCASTER && nType == 2) return ABILITY_CHARISMA; + + // Technically, never gets here but the compiler does not realise that + return -1; +} + +int GetShadowcasterDC(object oShadow = OBJECT_SELF) +{ + // Things we need for DC Checks + int nMystId = PRCGetSpellId(); + int nShadEvo = GetLocalInt(oShadow, "ShadowEvoking"); + if (nShadEvo > 0) + nMystId = nShadEvo; // This is used to get the proper DC for Shadow Evocation mysteries + + int nLevel = GetMysteryLevel(oShadow, nMystId); + int nClass = GetShadowcastingClass(oShadow); + int nShadow = GetShadowcasterLevel(oShadow); + int nAbi = GetAbilityModifier(GetShadowAbilityOfClass(nClass, 2), oShadow); + int nPath = GetPathByMystery(nMystId); + int nPFocus = GetHasPathFocus(oShadow, nPath); + int nNoct = GetHasNocturnal(oShadow, nPath); + nShadow -= nPFocus; // These don't count here + + // DC is 10 + Mystery level + ability + int nDC = 10 + nLevel + nAbi; + + // If total Shadowcaster level is >= 13, change the DC for level 3 and under mysteries + // DC is 10 + 1/2 Shadowcaster level + ability + if (GetIsMysterySupernatural(oShadow, nMystId, nClass)) + nDC = 10 + nShadow/2 + nAbi; + + nDC += nPFocus; + nDC += nNoct;// It's a 0 if it doesn't exist + + return nDC; +} + +int ShadowSRPen(object oShadow, int nShadowcasterLevel) +{ + return nShadowcasterLevel; +} + +void SetLocalMystery(object oObject, string sName, struct mystery myst) +{ + //SetLocal (oObject, sName + "_", ); + SetLocalObject(oObject, sName + "_oShadow", myst.oShadow); + + SetLocalInt(oObject, sName + "_bCanMyst", myst.bCanMyst); + SetLocalInt(oObject, sName + "_nShadowcasterLevel", myst.nShadowcasterLevel); + SetLocalInt(oObject, sName + "_nMystId", myst.nMystId); + SetLocalInt(oObject, sName + "_nPen", myst.nPen); + SetLocalInt(oObject, sName + "_bIgnoreSR", myst.bIgnoreSR); + + SetLocalInt(oObject, sName + "_bEmpower", myst.bEmpower); + SetLocalInt(oObject, sName + "_bExtend", myst.bExtend); + SetLocalInt(oObject, sName + "_bMaximize", myst.bMaximize); + SetLocalInt(oObject, sName + "_bQuicken", myst.bQuicken); + + SetLocalInt(oObject, sName + "_nSaveDC", myst.nSaveDC); + SetLocalFloat(oObject, sName + "_fDur", myst.fDur); +} + +struct mystery GetLocalMystery(object oObject, string sName) +{ + struct mystery myst; + myst.oShadow = GetLocalObject(oObject, sName + "_oShadow"); + + myst.bCanMyst = GetLocalInt(oObject, sName + "_bCanMyst"); + myst.nShadowcasterLevel = GetLocalInt(oObject, sName + "_nShadowcasterLevel"); + myst.nMystId = GetLocalInt(oObject, sName + "_nMystId"); + myst.nPen = GetLocalInt(oObject, sName + "_nPen"); + myst.bIgnoreSR = GetLocalInt(oObject, sName + "_bIgnoreSR"); + + myst.bEmpower = GetLocalInt(oObject, sName + "_bEmpower"); + myst.bExtend = GetLocalInt(oObject, sName + "_bExtend"); + myst.bMaximize = GetLocalInt(oObject, sName + "_bMaximize"); + myst.bQuicken = GetLocalInt(oObject, sName + "_bQuicken"); + + myst.nSaveDC = GetLocalInt(oObject, sName + "_nSaveDC"); + myst.fDur = GetLocalFloat(oObject, sName + "_fDur"); + + return myst; +} + +int ShadowcastingFeats(object oShadow, int nMyst) +{ + int nReturn = 0; + int nPath = GetPathByMystery(nMyst); + nReturn += GetHasPathFocus(oShadow, nPath); + + return nReturn; +} + +int GetHasNocturnal(object oShadow, int nPath) +{ + int nNocturnal, nReturn; + switch(nPath) + { + case PATH_CLOAK_SHADOWS: nNocturnal = FEAT_NOCTURNAL_CASTER_CLOAK_SHADOWS ; break; + case PATH_DARK_TERRAIN: nNocturnal = FEAT_NOCTURNAL_CASTER_DARK_TERRAIN ; break; + case PATH_EBON_WHISPERS: nNocturnal = FEAT_NOCTURNAL_CASTER_EBON_WHISPERS ; break; + case PATH_EYES_DARKNESS: nNocturnal = FEAT_NOCTURNAL_CASTER_EYES_DARKNESS ; break; + case PATH_SHUTTERS_CLOUDS: nNocturnal = FEAT_NOCTURNAL_CASTER_SHUTTERS_CLOUDS ; break; + case PATH_TOUCH_TWILIGHT: nNocturnal = FEAT_NOCTURNAL_CASTER_TOUCH_TWILIGHT ; break; + case PATH_UMBRAL_MIND: nNocturnal = FEAT_NOCTURNAL_CASTER_UMBRAL_MIND ; break; + case PATH_BLACK_MAGIC: nNocturnal = FEAT_NOCTURNAL_CASTER_BLACK_MAGIC ; break; + case PATH_BODY_SOUL: nNocturnal = FEAT_NOCTURNAL_CASTER_BODY_SOUL ; break; + case PATH_DARK_REFLECTIONS: nNocturnal = FEAT_NOCTURNAL_CASTER_DARK_REFLECTIONS ; break; + case PATH_EBON_ROADS: nNocturnal = FEAT_NOCTURNAL_CASTER_EBON_ROADS ; break; + case PATH_ELEMENTAL_SHADOWS: nNocturnal = FEAT_NOCTURNAL_CASTER_ELEMENTAL_SHADOWS ; break; + case PATH_UNBINDING_SHADE: nNocturnal = FEAT_NOCTURNAL_CASTER_UNBINDING_SHADE ; break; + case PATH_VEIL_SHADOWS: nNocturnal = FEAT_NOCTURNAL_CASTER_VEIL_SHADOWS ; break; + case PATH_BREATH_TWILIGHT: nNocturnal = FEAT_NOCTURNAL_CASTER_BREATH_TWILIGHT ; break; + case PATH_DARK_METAMORPHOSIS: nNocturnal = FEAT_NOCTURNAL_CASTER_DARK_METAMORPHOSIS; break; + case PATH_EBON_WALLS: nNocturnal = FEAT_NOCTURNAL_CASTER_EBON_WALLS ; break; + case PATH_EYES_NIGHT_SKY: nNocturnal = FEAT_NOCTURNAL_CASTER_EYES_NIGHT_SKY ; break; + case PATH_HEART_SOUL: nNocturnal = FEAT_NOCTURNAL_CASTER_HEART_SOUL ; break; + case PATH_SHADOW_CALLING: nNocturnal = FEAT_NOCTURNAL_CASTER_SHADOW_CALLING ; break; + case PATH_NIGHTS_LONG_FINGERS:nNocturnal = FEAT_NOCTURNAL_CASTER_NIGHTS_LONG_FINGERS; break; + case PATH_DARKENED_ALLEYS: nNocturnal = FEAT_NOCTURNAL_CASTER_DARKENED_ALLEYS ; break; + case PATH_SHADOWSCAPE: nNocturnal = FEAT_NOCTURNAL_CASTER_SHADOWSCAPE ; break; + } + if(GetHasFeat(nNocturnal, oShadow) && GetIsNight()) + nReturn = 1; + + // If none of those trigger. + return nReturn; +} \ No newline at end of file diff --git a/src/include/shd_myst_const.nss b/src/include/shd_myst_const.nss new file mode 100644 index 0000000..126c1ae --- /dev/null +++ b/src/include/shd_myst_const.nss @@ -0,0 +1,164 @@ +// Internal Constants +const string MYSTERY_USES = "PRC_MystUses"; +const string MYSTERY_BONUS_USES = "PRC_MystBonusUses"; +const string MYST_HOLD_MYST = "MYST_HOLD_MYST"; + +// AoE Constants +const int AOE_PER_CARPET_SHADOW = 108; +const int AOE_PER_DUSK_AND_DAWN = 107; +const int AOE_PER_BLACKFIRE = 106; +const int AOE_PER_CLINGING_DARKNESS = 105; +const int AOE_PER_CURTAIN_SHADOWS = 104; +const int AOE_PER_FLOOD_SHADOW = 103; +const int AOE_PER_PLAGUE_SHADOW = 102; + +// Paths +const int PATH_CLOAK_SHADOWS = 1; +const int PATH_DARK_TERRAIN = 2; +const int PATH_EBON_WHISPERS = 3; +const int PATH_EYES_DARKNESS = 4; +const int PATH_SHUTTERS_CLOUDS = 5; +const int PATH_TOUCH_TWILIGHT = 6; +const int PATH_UMBRAL_MIND = 7; +const int PATH_BLACK_MAGIC = 8; +const int PATH_BODY_SOUL = 9; +const int PATH_DARK_REFLECTIONS = 10; +const int PATH_EBON_ROADS = 11; +const int PATH_ELEMENTAL_SHADOWS = 12; +const int PATH_UNBINDING_SHADE = 13; +const int PATH_VEIL_SHADOWS = 14; +const int PATH_BREATH_TWILIGHT = 15; +const int PATH_DARK_METAMORPHOSIS = 16; +const int PATH_EBON_WALLS = 17; +const int PATH_EYES_NIGHT_SKY = 18; +const int PATH_HEART_SOUL = 19; +const int PATH_SHADOW_CALLING = 20; +const int PATH_NIGHTS_LONG_FINGERS = 21; +const int PATH_DARKENED_ALLEYS = 22; +const int PATH_SHADOWSCAPE = 23; + +// Fundamentals +const int FUND_ARROW_DUSK = 18521; +const int FUND_BLACK_CANDLE_LIGHT = 18523; +const int FUND_BLACK_CANDLE_DARK = 18524; +const int FUND_CAUL_SHADOW = 18525; +const int FUND_MYSTIC_REFLECTIONS = 18526; +const int FUND_SHADOW_HOOD = 18527; +const int FUND_SIGHT_OBSCURED = 18528; +const int FUND_UMBRAL_HAND = 18529; +const int FUND_WIDENED_EYES = 18530; + +// Level 1 Mysteries - Apprentice +const int MYST_BEND_PERSPECTIVE = 18352; +const int MYST_CARPET_SHADOW = 18353; +const int MYST_DUSK_AND_DAWN_DUSK = 18354; +const int MYST_DUSK_AND_DAWN_DAWN = 18355; +const int MYST_LIFE_FADES = 18356; +const int MYST_MESMERIZING_SHADE = 18357; +const int MYST_STEEL_SHADOWS = 18358; +const int MYST_VOICE_SHADOW_APPROACH = 18359; +const int MYST_VOICE_SHADOW_DROP = 18360; +const int MYST_VOICE_SHADOW_FALL = 18361; +const int MYST_VOICE_SHADOW_FLEE = 18362; +const int MYST_VOICE_SHADOW_HALT = 18363; +const int MYST_QUICKER_THAN_THE_EYE = 18580; + +// Level 2 Mysteries +const int MYST_BLACK_FIRE = 18364; +const int MYST_CONGRESS_SHADOWS = 18365; +const int MYST_FLESH_FAILS_STR = 18366; +const int MYST_FLESH_FAILS_DEX = 18367; +const int MYST_FLESH_FAILS_CON = 18368; +const int MYST_PIERCING_SIGHT = 18369; +const int MYST_SHADOW_SKIN = 18370; +const int MYST_SIGHT_ECLIPSED = 18371; +const int MYST_THOUGHTS_SHADOW_INT = 18372; +const int MYST_THOUGHTS_SHADOW_WIS = 18373; +const int MYST_THOUGHTS_SHADOW_CHA = 18374; +const int MYST_TRAIL_OF_HAZE = 18581; + +// Level 3 Mysteries +const int MYST_AFRAID_DARK = 18375; +const int MYST_CLINGING_DARKNESS = 18376; +const int MYST_DANCING_SHADOWS = 18377; +const int MYST_FLICKER = 18378; +const int MYST_KILLING_SHADOWS = 18379; +const int MYST_SHARP_SHADOWS = 18380; +const int MYST_UMBRAL_TOUCH = 18381; +const int MYST_UMBRAL_FIST = 18582; +const int MYST_UMBRAL_FIST_BULL_RUSH = 18606; +const int MYST_UMBRAL_FIST_DISARM = 18607; +const int MYST_UMBRAL_FIST_TRIP = 18608; + +// Level 4 Mysteries - Initiate +const int MYST_AURA_OF_SHADE = 18382; +const int MYST_BOLSTER = 18383; +const int MYST_SHADOW_EVOCATION = 18384; +const int MYST_SHADOW_EVOCATION_CONV = 18385; +const int MYST_SHADOW_VISION = 18386; +const int MYST_SHADOWS_FADE = 18387; +const int MYST_STEP_SHADOW_SELF = 18388; +const int MYST_STEP_SHADOW_PARTY = 18389; +const int MYST_WARP_SPELL = 18390; +const int MYST_FEARFUL_GLOOM = 18583; + +// Level 5 Mysteries +const int MYST_CURTAIN_SHADOWS = 18391; +const int MYST_DARK_AIR = 18392; +const int MYST_ECHO_SPELL = 18393; +const int MYST_FEIGN_LIFE = 18394; +const int MYST_LANGUOR_SLOW = 18395; +const int MYST_LANGUOR_HOLD = 18396; +const int MYST_PASS_SHADOW_SELF = 18397; +const int MYST_PASS_SHADOW_PARTY = 18398; +const int MYST_UNRAVEL_DWEOMER = 18399; +const int MYST_SICKENING_SHADOW = 18584; + +// Level 6 Mysteries +const int MYST_FLOOD_SHADOW = 18400; +const int MYST_GREATER_SHADOW_EVO = 18401; +const int MYST_GREATER_SHADOW_EVO_CONV = 18402; +const int MYST_SHADOW_INVESTITURE = 18403; +const int MYST_SHADOW_STORM = 18404; +const int MYST_SHADOWS_FADE_GREATER = 18405; +const int MYST_UNVEIL = 18406; +const int MYST_VOYAGE_SHADOW_SELF = 18407; +const int MYST_VOYAGE_SHADOW_PARTY = 18408; +const int MYST_DEADLY_SHADE_DR = 18585; +const int MYST_DEADLY_SHADE_NEG = 18586; + +// Level 7 Mysteries - Master +const int MYST_DARK_SOUL = 18409; +const int MYST_EPHEMERAL_IMAGE = 18410; +const int MYST_LIFE_FADES_GREATER = 18411; +const int MYST_PRISON_NIGHT = 18412; +const int MYST_UMBRAL_SERVANT = 18413; +const int MYST_TRUTH_REVEALED = 18414; +const int MYST_GRASPING_SHADOWS = 18587; + +// Level 8 Mysteries +const int MYST_FAR_SIGHT = 18415; +const int MYST_GR_FLESH_FAILS_STR = 18416; +const int MYST_GR_FLESH_FAILS_DEX = 18417; +const int MYST_GR_FLESH_FAILS_CON = 18418; +const int MYST_SHADOW_PLAGUE = 18419; +const int MYST_SOUL_PUPPET = 18420; +const int MYST_TOMB_NIGHT = 18421; +const int MYST_UMBRAL_BODY = 18422; +const int MYST_MENAGERIE_OF_DARKNESS = 18588; + +// Level 9 Mysteries +const int MYST_ARMY_SHADOW = 18423; +const int MYST_CONSUME_ESSENCE = 18424; +const int MYST_EPHEMERAL_STORM = 18425; +const int MYST_REFLECTIONS = 18426; +const int MYST_SHADOW_SURGE = 18427; +const int MYST_SHADOW_TIME = 18428; +const int MYST_BLACK_LABYRINTH = 18589; + +// Master of Shadow +const int MYST_BID_HEAL = 18539; +const int MYST_BID_ATTACK = 18540; +const int MYST_BID_COLD = 18541; +const int MYST_BID_DR = 18542; +const int MYST_BID_SPEED = 18543; \ No newline at end of file diff --git a/src/include/shd_mysthook.nss b/src/include/shd_mysthook.nss new file mode 100644 index 0000000..51c63be --- /dev/null +++ b/src/include/shd_mysthook.nss @@ -0,0 +1,280 @@ +//:://///////////////////////////////////////////// +//:: Shadowcasting Mystery Hook File. +//:: shd_mysthook.nss +//::////////////////////////////////////////////// +/* + + This file acts as a hub for all code that + is hooked into the mystery scripts for Shadowcasting + +*/ +//::////////////////////////////////////////////// +//:: Created By: Stratovarius +//:: Created On: 7-2-2019 +//::////////////////////////////////////////////// + +#include "x2_inc_spellhook" +#include "prc_inc_spells" +#include "inc_utility" +#include "prc_inc_itmrstr" + +// This function holds all functions that are supposed to run before the actual +// spellscript gets run. If this functions returns FALSE, the spell is aborted +// and the spellscript will not run +int ShadPreMystCastCode(); + +// Does the counterspelling for Warp Spell, +// and the storing of the spell for later use +int WarpMyst(object oCaster, int nMyst) +{ + int nWarp = GetLocalInt(oCaster, "WarpSpell"); + // If Warp Spell isn't set, just keep going + if (!nWarp) return TRUE; + + object oShadow = GetLocalObject(oCaster, "WarpSpell"); // The one who cast Warp Spell + + DeleteLocalInt(oCaster, "WarpSpell"); + DeleteLocalObject(oCaster, "WarpSpell"); + + int nLevel = GetShadowcasterLevel(oCaster); + if (d20() + nWarp > d20() + nLevel) // Won the caster level check + { + // Set a marker on the Shadowcaster + SetLocalInt(oShadow, "WarpSpellSuccess", TRUE); + FloatingTextStringOnCreature("You have successfully warped your opponent's "+GetMysteryName(nMyst), oShadow, FALSE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SOUL_TRAP), oCaster); + return FALSE; + } + + FloatingTextStringOnCreature("Your warp spell has failed", oShadow, FALSE); + return TRUE; +} + +// Stores the spell for use with Echo Spell +void EchoMyst(object oCaster, int nMyst) +{ + int nEcho = GetLocalInt(oCaster, "EchoSpell"); + // If Echo Spell isn't set, just skip + if (nEcho) + { + object oShadow = GetLocalObject(oCaster, "EchoSpell"); // The one who cast Echo Spell + SetLocalInt(oShadow, "EchoedSpell", nMyst); + FloatingTextStringOnCreature("You have echoed " + GetMysteryName(nMyst) + " and have one round to cast it", oShadow, FALSE); + DelayCommand(9.0, DeleteLocalInt(oShadow, "EchoedSpell")); + DeleteLocalInt(oCaster, "EchoSpell"); + DeleteLocalObject(oCaster, "EchoSpell"); + } +} + +int MysterySpellFailure(object oShadow, int nMystId, int nMystLevel, int nClass) +{ + // Mysteries of both types ignore arcane spell failure + if (GetIsMysterySupernatural(oShadow, nMystId, nClass) || GetIsMysterySLA(oShadow, nMystId, nClass)) + return TRUE; + + int nASF = GetArcaneSpellFailure(oShadow); + + if(Random(100) < nASF) + { + int nFail = TRUE; + // Still spell helps + if((GetHasFeat(FEAT_EPIC_AUTOMATIC_STILL_SPELL_1, oShadow) && nMystLevel <= 3) + || (GetHasFeat(FEAT_EPIC_AUTOMATIC_STILL_SPELL_2, oShadow) && nMystLevel <= 6) + || (GetHasFeat(FEAT_EPIC_AUTOMATIC_STILL_SPELL_3, oShadow) && nMystLevel <= 9)) + { + nFail = FALSE; + } + if(nFail) + { + //52946 = Spell failed due to arcane spell failure! + FloatingTextStrRefOnCreature(52946, oShadow, FALSE); + return FALSE; + } + } + return TRUE; +} + +int ShadowTime(object oCaster, object oTarget, int bSpellIsHostile) +{ + // PnP Timestop + if(GetPRCSwitch(PRC_TIMESTOP_NO_HOSTILE)) + { + if(GetHasSpellEffect(SPELL_TIME_STOP, oCaster) + || GetHasSpellEffect(4032, oCaster) //epic spell: Greater Timestop + || GetHasSpellEffect(14236, oCaster) //psionic power: Temporal Acceleration + || GetHasSpellEffect(18428, oCaster)) //Mystery MYST_SHADOW_TIME + { + if(!GetIsObjectValid(oTarget) + || oTarget != oCaster + || bSpellIsHostile) + { + return FALSE; + } + } + } + + return TRUE; +} + +//------------------------------------------------------------------------------ +// if FALSE is returned by this function, the spell will not be cast +// the order in which the functions are called here DOES MATTER, changing it +// WILL break the crafting subsystems +//------------------------------------------------------------------------------ +int ShadPreMystCastCode() +{ + object oShadow = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + int nMystID = PRCGetSpellId(); + int nMystLevel = GetMysteryLevel(oShadow); + int nShadowcastingClass = GetShadowcastingClass(oShadow); + int bMystIsHostile = Get2DACache("spells", "HostileSetting", nMystID) == "1"; + + int nContinue = !ExecuteScriptAndReturnInt("prespellcode",oShadow); + + //--------------------------------------------------------------------------- + // Break any spell require maintaining concentration + //--------------------------------------------------------------------------- + X2BreakConcentrationSpells(); + + //--------------------------------------------------------------------------- + // Check for PRC spell effects + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = PRCSpellEffects(oShadow, oTarget, nMystID, nMystLevel, nShadowcastingClass, bMystIsHostile, -1); + + if(DEBUG) DoDebug("ShadPreMystCastCode nContinue #1: " + IntToString(nContinue)); + + //--------------------------------------------------------------------------- + // Run Arcane Spell Failure + //--------------------------------------------------------------------------- + if (nContinue) + nContinue = MysterySpellFailure(oShadow, nMystID, nMystLevel, nShadowcastingClass); + + if(DEBUG) DoDebug("ShadPreMystCastCode nContinue #2: " + IntToString(nContinue)); + + //--------------------------------------------------------------------------- + // Run Shadow Time + //--------------------------------------------------------------------------- + if (nContinue) + nContinue = ShadowTime(oShadow, oTarget, bMystIsHostile); + + if(DEBUG) DoDebug("ShadPreMystCastCode nContinue #3: " + IntToString(nContinue)); + + //--------------------------------------------------------------------------- + // Run Grappling Concentration Check + //--------------------------------------------------------------------------- + if (nContinue) + nContinue = GrappleConc(oShadow, nMystLevel); + + if(DEBUG) DoDebug("ShadPreMystCastCode nContinue #4: " + IntToString(nContinue)); + + //--------------------------------------------------------------------------- + // This stuff is only interesting for player characters we assume that use + // magic device always works and NPCs don't use the crafting feats or + // sequencers anyway. Thus, any NON PC spellcaster always exits this script + // with TRUE (unless they are DM possessed or in the Wild Magic Area in + // Chapter 2 of Hordes of the Underdark. + //--------------------------------------------------------------------------- + if(!GetIsPC(oShadow) + && !GetPRCSwitch(PRC_NPC_HAS_PC_SPELLCASTING)) + { + if(!GetIsDMPossessed(oShadow) && !GetLocalInt(GetArea(oShadow), "X2_L_WILD_MAGIC")) + { + return TRUE; + } + } + + //--------------------------------------------------------------------------- + // Run use magic device skill check + //--------------------------------------------------------------------------- + if (nContinue) + { + nContinue = X2UseMagicDeviceCheck(oShadow); + } + + //----------------------------------------------------------------------- + // run any user defined spellscript here + //----------------------------------------------------------------------- + if (nContinue) + { + nContinue = X2RunUserDefinedSpellScript(); + } + + //--------------------------------------------------------------------------- + // Check for the new restricted itemproperties + //--------------------------------------------------------------------------- + if(nContinue + && GetIsObjectValid(GetSpellCastItem()) + && !CheckPRCLimitations(GetSpellCastItem(), oShadow)) + { + SendMessageToPC(oShadow, "You cannot use "+GetName(GetSpellCastItem())); + nContinue = FALSE; + } + + //--------------------------------------------------------------------------- + // Warp Spell + //--------------------------------------------------------------------------- + if (nContinue) + { + nContinue = WarpMyst(oShadow, nMystID); + } + + if(DEBUG) DoDebug("ShadPreMystCastCode nContinue #5: " + IntToString(nContinue)); + + EchoMyst(oShadow, nMystID); + + //--------------------------------------------------------------------------- + // The following code is only of interest if an item was targeted + //--------------------------------------------------------------------------- + if (GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM) + { + + //----------------------------------------------------------------------- + // Check if spell was used to trigger item creation feat + //----------------------------------------------------------------------- + if (nContinue) { + nContinue = !ExecuteScriptAndReturnInt("x2_pc_craft", oShadow); + } + + //----------------------------------------------------------------------- + // * Execute item OnSpellCast At routing script if activated + //----------------------------------------------------------------------- + if (GetModuleSwitchValue(MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS) == TRUE) + { + SetUserDefinedItemEventNumber(X2_ITEM_EVENT_SPELLCAST_AT); + int nRet = ExecuteScriptAndReturnInt(GetUserDefinedItemEventScriptName(oTarget), oShadow); + if (nRet == X2_EXECUTE_SCRIPT_END) + { + return FALSE; + } + } + + //----------------------------------------------------------------------- + // Prevent any spell that has no special coding to handle targetting of items + // from being cast on items. We do this because we can not predict how + // all the hundreds spells in NWN will react when cast on items + //----------------------------------------------------------------------- + if (nContinue) { + nContinue = X2CastOnItemWasAllowed(oTarget); + } + } + + //Cleaning spell variables used for holding the charge + if(!GetLocalInt(oShadow, "PRC_SPELL_EVENT")) + { + DeleteLocalInt(oShadow, "PRC_SPELL_CHARGE_COUNT"); + DeleteLocalInt(oShadow, "PRC_SPELL_CHARGE_SPELLID"); + DeleteLocalObject(oShadow, "PRC_SPELL_CONC_TARGET"); + DeleteLocalInt(oShadow, "PRC_SPELL_METAMAGIC"); + DeleteLocalManifestation(oShadow, "PRC_POWER_HOLD_MANIFESTATION"); + DeleteLocalMystery(oShadow, "MYST_HOLD_MYST"); + } + else if(GetLocalInt(oShadow, "PRC_SPELL_CHARGE_SPELLID") != PRCGetSpellId()) + { //Sanity check, in case something goes wrong with the action queue + DeleteLocalInt(oShadow, "PRC_SPELL_EVENT"); + } + + if(DEBUG) DoDebug("ShadPreMystCastCode nContinue #6: " + IntToString(nContinue)); + return nContinue; +} \ No newline at end of file diff --git a/src/include/spinc_bolt.nss b/src/include/spinc_bolt.nss new file mode 100644 index 0000000..03ed6da --- /dev/null +++ b/src/include/spinc_bolt.nss @@ -0,0 +1,386 @@ +///////////////////////////////////////////////////////////////////////// +// +// DoBolt - Function to apply an elemental bolt damage effect given +// the following arguments: +// +// nDieSize - die size to roll (d4, d6, or d8) +// nBonusDam - bonus damage per die, or 0 for none +// nDice = number of dice to roll. +// nBoltEffect - visual effect to use for bolt(s) +// nVictimEffect - visual effect to apply to target(s) +// nDamageType - elemental damage type of the cone (DAMAGE_TYPE_xxx) +// nSaveType - save type used for cone (SAVING_THROW_TYPE_xxx) +// nSchool - spell school, defaults to SPELL_SCHOOL_EVOCATION. +// fDoKnockdown - flag indicating whether spell does knockdown, defaults to FALSE. +// nSpellID - spell ID to use for events +// +///////////////////////////////////////////////////////////////////////// + +#include "prc_inc_spells" +#include "prc_add_spell_dc" + +//* fires a storm of nCap missiles at targets in area +void PRCDoMissileStorm(int nD6Dice, int nCap, int nSpell, int nMIRV = VFX_IMP_MIRV, int nVIS = VFX_IMP_MAGBLUE, int nDAMAGETYPE = DAMAGE_TYPE_MAGICAL, int nONEHIT = FALSE, int nReflexSave = FALSE); + +float GetVFXLength(location lCaster, float fLength, float fAngle); + +void DoBolt(int nCasterLevel, int nDieSize, int nBonusDam, int nDice, int nBoltEffect, + int nVictimEffect, int nDamageType, int nSaveType, + int nSchool = SPELL_SCHOOL_EVOCATION, int nDoKnockdown = FALSE, int nSpellID = -1, float fRangeFt = 120.0f) +{ + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + //if (!X2PreSpellCastCode()) return; + + PRCSetSchool(nSchool); + + object oCaster = OBJECT_SELF; + + // Get the spell ID if it was not given. + if (-1 == nSpellID) nSpellID = PRCGetSpellId(); + + // Adjust the damage type if necessary. + nDamageType = PRCGetElementalDamageType(nDamageType, OBJECT_SELF); + + int nDamage; + int nSaveDC; + int bKnockdownTarget; + float fDelay; + + int nPenetr = nCasterLevel + SPGetPenetr(); + + // individual effect + effect eVis = EffectVisualEffect(nVictimEffect); + effect eKnockdown = EffectKnockdown(); + effect eDamage; + + // where is the caster? + location lCaster = GetLocation(oCaster); + + // where is the target? + location lTarget = PRCGetSpellTargetLocation(); + vector vOrigin = GetPosition(oCaster); + float fLength = FeetToMeters(fRangeFt); + + // run away! Vector maths coming up... + // VFX length + //float fAngle = GetRelativeAngleBetweenLocations(lCaster, lTarget); + //float fVFXLength = GetVFXLength(lCaster, fLength, fAngle); + //float fDuration = 3.0f; + + + /*BeamLineFromCenter(DURATION_TYPE_TEMPORARY, nBoltEffect, lCaster, fVFXLength, fAngle, fDuration, "prc_invisobj", 0.0f, "z", 0.0f, 0.0f, + -1, -1, 0.0f, 1.0f, // no secondary VFX + fDuration); + */ + // Do VFX. This is moderately heavy, so it isn't duplicated by Twin Power + float fAngle = GetRelativeAngleBetweenLocations(lCaster, lTarget); + float fSpiralStartRadius = FeetToMeters(1.0f); + float fRadius = FeetToMeters(5.0f); + float fDuration = 4.5f; + float fVFXLength = GetVFXLength(lCaster, fLength, GetRelativeAngleBetweenLocations(lCaster, lTarget)); + // A tube of beams, radius 5ft, starting 1m from manifester and running for the length of the line + BeamGengon(DURATION_TYPE_TEMPORARY, nBoltEffect, lCaster, fRadius, fRadius, + 1.0f, fVFXLength, // Start 1m from the manifester, end at LOS end + 8, // 8 sides + fDuration, "prc_invisobj", + 0.0f, // Drawn instantly + 0.0f, 0.0f, 45.0f, "y", fAngle, 0.0f, + -1, -1, 0.0f, 1.0f, // No secondary VFX + fDuration + ); + // spell damage effects + // Loop over targets in the spell shape + object oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, vOrigin); + while(GetIsObjectValid(oTarget)) + { + if(oTarget != oCaster && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster)) + { + // Let the AI know + PRCSignalSpellEvent(oTarget, TRUE, nSpellID, oCaster); + // Reset the knockdown target flag. + bKnockdownTarget = FALSE; + // Make an SR check + if(!PRCDoResistSpell(oCaster, oTarget, nPenetr)) + { + // Roll damage + nDamage = PRCGetMetaMagicDamage(nDamageType, nDice, nDieSize, nBonusDam); + // Acid Sheath adds +1 damage per die to acid descriptor spells + if (GetHasDescriptor(nSpellID, DESCRIPTOR_ACID) && GetHasSpellEffect(SPELL_MESTILS_ACID_SHEATH, oCaster)) + nDamage += nDice; + // Adds damage per dice + nDamage += SpellDamagePerDice(oCaster, nDice); + int nFullDamage = nDamage; + + // Do save + nSaveDC = PRCGetSaveDC(oTarget,OBJECT_SELF); + if(nSaveType == SAVING_THROW_TYPE_COLD) + { + // Cold has a fort save for half + if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nSaveDC, nSaveType)) + { + if (GetHasMettle(oTarget, SAVING_THROW_FORT)) + nDamage = 0; + nDamage /= 2; + } + } + else + // Adjust damage according to Reflex Save, Evasion or Improved Evasion + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nSaveDC, nSaveType); + + if(nDamage > 0) + { + fDelay = GetDistanceBetweenLocations(lCaster, GetLocation(oTarget)) / 20.0f; + eDamage = PRCEffectDamage(oTarget, nDamage, nDamageType); + DelayCommand(1.0f + fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget)); + DelayCommand(1.0f + fDelay, PRCBonusDamage(oTarget)); + DelayCommand(1.0f + fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + }// end if - There was still damage remaining to be dealt after adjustments + + // Determine if the target needs to be knocked down. The target is knocked down + // if all of the following criteria are met: + // - Knockdown is enabled. + // - The damage from the spell didn't kill the creature + // - The creature is large or smaller + // - The creature failed it's reflex save. + // If the spell does knockdown we need to figure out whether the target made or failed + // the reflex save. If the target doesn't have improved evasion this is easy, if the + // damage is the same as the original damage then the target failed it's save. If the + // target has improved evasion then it's harder as the damage is halved even on a failed + // save, so we have to catch that case. + bKnockdownTarget = nDoKnockdown && !GetIsDead(oTarget) && + PRCGetCreatureSize(oTarget) <= CREATURE_SIZE_LARGE && + (nFullDamage == nDamage || (0 != nDamage && GetHasFeat(FEAT_IMPROVED_EVASION, oTarget))); + // If we're supposed to apply knockdown then do so for 1 round. + if (bKnockdownTarget) + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnockdown, oTarget, RoundsToSeconds(1),TRUE,-1,nCasterLevel); + + }// end if - SR check + }// end if - Target validity check + + // Get next target + oTarget = MyNextObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, vOrigin); + }// end while - Target loop + + PRCSetSchool(); +} + +// taken with minor modification from psi_power_enbolt + +float GetVFXLength(location lCaster, float fLength, float fAngle) +{ + float fLowerBound = 0.0f; + float fUpperBound = fLength; + float fVFXLength = fLength / 2; + vector vVFXOrigin = GetPositionFromLocation(lCaster); + vector vAngle = AngleToVector(fAngle); + vector vVFXEnd; + int bConverged = FALSE; + while(!bConverged) + { + // Create the test vector for this loop + vVFXEnd = vVFXOrigin + (fVFXLength * vAngle); + + // Determine which bound to move. + if(LineOfSightVector(vVFXOrigin, vVFXEnd)) + fLowerBound = fVFXLength; + else + fUpperBound = fVFXLength; + + // Get the new middle point + fVFXLength = (fUpperBound + fLowerBound) / 2; + + // Check if the locations have converged + if(fabs(fUpperBound - fLowerBound) < 2.5f) + bConverged = TRUE; + } + + return fVFXLength; +} + +//:://///////////////////////////////////////////// +//:: PRCDoMissileStorm +//:: Copyright (c) 2002 Bioware Corp. +//::////////////////////////////////////////////// +/* + Fires a volley of missiles around the area + of the object selected. + + Each missiles (nD6Dice)d6 damage. + There are casterlevel missiles (to a cap as specified) +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: July 31, 2002 +//::////////////////////////////////////////////// +//:: Modified March 14 2003: Removed the option to hurt chests/doors +//:: was potentially causing bugs when no creature targets available. +void PRCDoMissileStorm(int nD6Dice, int nCap, int nSpell, int nMIRV = VFX_IMP_MIRV, int nVIS = VFX_IMP_MAGBLUE, int nDAMAGETYPE = DAMAGE_TYPE_MAGICAL, int nONEHIT = FALSE, int nReflexSave = FALSE) +{ + object oTarget = OBJECT_INVALID; + int nCasterLvl = PRCGetCasterLevel(OBJECT_SELF); +// int nDamage = 0; + int nMetaMagic = PRCGetMetaMagicFeat(); + int nCnt = 1; + effect eMissile = EffectVisualEffect(nMIRV); + effect eVis = EffectVisualEffect(nVIS); + float fDist = 0.0; + float fDelay = 0.0; + float fDelay2, fTime; + location lTarget = PRCGetSpellTargetLocation(); // missile spread centered around caster + int nMissiles = nCasterLvl; + + nCasterLvl +=SPGetPenetr(); + + if (nMissiles > nCap) + { + nMissiles = nCap; + } + + /* New Algorithm + 1. Count # of targets + 2. Determine number of missiles + 3. First target gets a missile and all Excess missiles + 4. Rest of targets (max nMissiles) get one missile + */ + int nEnemies = 0; + + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lTarget, TRUE, OBJECT_TYPE_CREATURE); + //Cycle through the targets within the spell shape until an invalid object is captured. + while (GetIsObjectValid(oTarget) ) + { + // * caster cannot be harmed by this spell + if (spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF) && (oTarget != OBJECT_SELF)) + { + // GZ: You can only fire missiles on visible targets + // 1.69 change + // If the firing object is a placeable (such as a projectile trap), + // we skip the line of sight check as placeables can't "see" things. + if ( ( GetObjectType(OBJECT_SELF) == OBJECT_TYPE_PLACEABLE ) || + GetObjectSeen(oTarget,OBJECT_SELF)) + { + nEnemies++; + } + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lTarget, TRUE, OBJECT_TYPE_CREATURE); + } + + if (nEnemies == 0) return; // * Exit if no enemies to hit + int nExtraMissiles = nMissiles / nEnemies; + + // April 2003 + // * if more enemies than missiles, need to make sure that at least + // * one missile will hit each of the enemies + if (nExtraMissiles <= 0) + { + nExtraMissiles = 1; + } + + // by default the Remainder will be 0 (if more than enough enemies for all the missiles) + int nRemainder = 0; + + if (nExtraMissiles >0) + nRemainder = nMissiles % nEnemies; + + if (nEnemies > nMissiles) + nEnemies = nMissiles; + + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lTarget, TRUE, OBJECT_TYPE_CREATURE); + //Cycle through the targets within the spell shape until an invalid object is captured. + while (GetIsObjectValid(oTarget) && nCnt <= nEnemies) + { + // * caster cannot be harmed by this spell + if (spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF) && (oTarget != OBJECT_SELF) && + (( GetObjectType(OBJECT_SELF) == OBJECT_TYPE_PLACEABLE ) || + (GetObjectSeen(oTarget,OBJECT_SELF)))) + { + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nSpell)); + + // * recalculate appropriate distances + fDist = GetDistanceBetween(OBJECT_SELF, oTarget); + fDelay = fDist/(3.0 * log(fDist) + 2.0); + + // Firebrand. + // It means that once the target has taken damage this round from the + // spell it won't take subsequent damage + if (nONEHIT == TRUE) + { + nExtraMissiles = 1; + nRemainder = 0; + } + + int i = 0; + //-------------------------------------------------------------- + // GZ: Moved SR check out of loop to have 1 check per target + // not one check per missile, which would rip spell mantels + // apart + //-------------------------------------------------------------- + if (!PRCDoResistSpell(OBJECT_SELF, oTarget,nCasterLvl, fDelay)) + { + for (i=1; i <= nExtraMissiles + nRemainder; i++) + { + //Roll damage + int nDam = d6(nD6Dice); + //Enter Metamagic conditions + if ((nMetaMagic & METAMAGIC_MAXIMIZE)) + { + nDam = nD6Dice*6;//Damage is at max + } + if ((nMetaMagic & METAMAGIC_EMPOWER)) + { + nDam = nDam + nDam/2; //Damage/Healing is +50% + } + + // Acid Sheath adds +1 damage per die to acid descriptor spells + if (GetHasDescriptor(nSpell, DESCRIPTOR_ACID) && GetHasSpellEffect(SPELL_MESTILS_ACID_SHEATH, OBJECT_SELF)) + nDam += nD6Dice; + nDam += SpellDamagePerDice(OBJECT_SELF, nD6Dice); + + if(i == 1) + { + //nDam += ApplySpellBetrayalStrikeDamage(oTarget, OBJECT_SELF); + DelayCommand(fDelay, PRCBonusDamage(oTarget)); + } + + // Jan. 29, 2004 - Jonathan Epp + // Reflex save was not being calculated for Firebrand + if(nReflexSave) + { + if(nDAMAGETYPE == DAMAGE_TYPE_FIRE) + nDam = PRCGetReflexAdjustedDamage(nDam, oTarget, PRCGetSaveDC(oTarget, OBJECT_SELF), SAVING_THROW_TYPE_FIRE); + else if(nDAMAGETYPE == DAMAGE_TYPE_ELECTRICAL) + nDam = PRCGetReflexAdjustedDamage(nDam, oTarget, PRCGetSaveDC(oTarget, OBJECT_SELF), SAVING_THROW_TYPE_ELECTRICITY); + else if(nDAMAGETYPE == DAMAGE_TYPE_COLD) + nDam = PRCGetReflexAdjustedDamage(nDam, oTarget, PRCGetSaveDC(oTarget, OBJECT_SELF), SAVING_THROW_TYPE_COLD); + else if(nDAMAGETYPE == DAMAGE_TYPE_ACID) + nDam = PRCGetReflexAdjustedDamage(nDam, oTarget, PRCGetSaveDC(oTarget, OBJECT_SELF), SAVING_THROW_TYPE_ACID); + else if(nDAMAGETYPE == DAMAGE_TYPE_SONIC) + nDam = PRCGetReflexAdjustedDamage(nDam, oTarget, PRCGetSaveDC(oTarget, OBJECT_SELF), SAVING_THROW_TYPE_SONIC); + } + + fTime = fDelay; + fDelay2 += 0.1; + fTime += fDelay2; + + //Set damage effect + effect eDam = PRCEffectDamage(oTarget, nDam, nDAMAGETYPE); + //Apply the MIRV and damage effect + DelayCommand(fTime, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oTarget)); + DelayCommand(fDelay2, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget)); + DelayCommand(fTime, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget)); + } + } // for + else + { // * apply a dummy visual effect + ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget); + } + nCnt++;// * increment count of missiles fired + nRemainder = 0; + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lTarget, TRUE, OBJECT_TYPE_CREATURE); + } + +} + +// Test main +//void main(){} diff --git a/src/include/spinc_burst.nss b/src/include/spinc_burst.nss new file mode 100644 index 0000000..e09dce9 --- /dev/null +++ b/src/include/spinc_burst.nss @@ -0,0 +1,159 @@ +//////////////////////////////////////////////////////////////////////////////////// +// +// DoBurst() - Do a damaging burst at the spell's target location. +// nDieSize - size of die to roll. +// nBonusDam - bonus damage per die. +// nDice - number of dice to roll +// nBurstEffect - VFX_xxx or AOE_xxx of burst vfx. +// nVictimEffect - VFX_xxx of target impact. +// nDamageType - DAMAGE_TYPE_xxx of the type of damage dealt +// nSaveType - SAVING_THROW_xxx of type of save to use +// bCasterImmune - Indicates whether the caster is immune to the spell +// nSchool - SPELL_SCHOOL_xxx of the spell's school +// nSpellID - ID # of the spell, if -1 PRCGetSpellId() is used +// fAOEDuration - if > 0, then nBurstEffect should be an AOE_xxx vfx, it +// will be played at the target location for this duration. If this is +// 0 then nBurstEffect should be a VFX_xxx vfx. +// +//////////////////////////////////////////////////////////////////////////////////// + +#include "prc_inc_spells" +#include "prc_add_spell_dc" + +void DoBurst (int nCasterLvl, int nDieSize, int nBonusDam, int nDice, int nBurstEffect, + int nVictimEffect, float fRadius, int nDamageType, int nBonusDamageType, int nSaveType, + int bCasterImmune = FALSE, + int nSchool = SPELL_SCHOOL_EVOCATION, int nSpellID = -1, + float fAOEDuration = 0.0f) +{ + PRCSetSchool(nSchool); + + // Get the spell ID if it was not given. + if (-1 == nSpellID) nSpellID = PRCGetSpellId(); + + // Get the spell target location as opposed to the spell target. + location lTarget = PRCGetSpellTargetLocation(); + + int nPenetr = nCasterLvl + SPGetPenetr(); + // Get the effective caster level and hand it to the SR engine. + + + // Adjust the damage type of necessary, if the damage & bonus damage types are the + // same we need to copy the adjusted damage type to the bonus damage type. + int nSameDamageType = nDamageType == nBonusDamageType; + nDamageType = PRCGetElementalDamageType(nDamageType, OBJECT_SELF); + if (nSameDamageType) nBonusDamageType = nDamageType; + + // Apply the specified vfx to the location. If we were given an aoe vfx then + // fAOEDuration will be > 0. + if (fAOEDuration > 0.0) + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, + EffectAreaOfEffect(nBurstEffect, "****", "****", "****"), lTarget, fAOEDuration); + else + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(nBurstEffect), lTarget); + + effect eVis = EffectVisualEffect(nVictimEffect); + effect eDamage, eBonusDamage; + float fDelay; + + // Declare the spell shape, size and the location. Capture the first target object in the shape. + // Cycle through the targets within the spell shape until an invalid object is captured. + object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget, FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + while (GetIsObjectValid(oTarget)) + { + // Filter out the caster if he is supposed to be immune to the burst. + if (!(bCasterImmune && OBJECT_SELF == oTarget)) + { + if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF)) + { + //Fire cast spell at event for the specified target + PRCSignalSpellEvent(oTarget, TRUE, nSpellID); + + fDelay = PRCGetSpellEffectDelay(lTarget, oTarget); + if (!PRCDoResistSpell(OBJECT_SELF, oTarget,nPenetr, fDelay)) + { + int nSaveDC = PRCGetSaveDC(oTarget, OBJECT_SELF); + + int nDam = 0; + int nDam2 = 0; + if (nSameDamageType) + { + // Damage damage type is the simple case, just get the total damage + // of the spell's type, apply metamagic and roll the save. + + // Roll damage for each target + nDam = PRCGetMetaMagicDamage(nDamageType, nDice, nDieSize, nBonusDam); + // Acid Sheath adds +1 damage per die to acid descriptor spells + if (GetHasDescriptor(nSpellID, DESCRIPTOR_ACID) && GetHasSpellEffect(SPELL_MESTILS_ACID_SHEATH, OBJECT_SELF)) + nDam += nDice; + nDam += SpellDamagePerDice(OBJECT_SELF, nDice); + + // Adjust damage for reflex save / evasion / imp evasion + nDam = PRCGetReflexAdjustedDamage(nDam, oTarget, nSaveDC, nSaveType); + } + else + { + // Damage of different types is a bit more complicated, we need to + // calculate the bonus damage ourselves, figure out if the save was + // 1/2 or no damage, and apply appropriately to the secondary damage + // type. + + // Calculate base and bonus damage. + nDam = PRCGetMetaMagicDamage(nDamageType, nDice, nDieSize, 0); + // Acid Sheath adds +1 damage per die to acid descriptor spells + if (GetHasDescriptor(nSpellID, DESCRIPTOR_ACID) && GetHasSpellEffect(SPELL_MESTILS_ACID_SHEATH, OBJECT_SELF)) + nDam += nDice; + nDam += SpellDamagePerDice(OBJECT_SELF, nDice); + nDam2 = nDice * nBonusDam; + + // Adjust damage for reflex save / evasion / imp evasion. We need to + // deal with damage being constant, damage being 0, and damage being + // some percentage of the total (should be 1/2). + int nAdjustedDam = PRCGetReflexAdjustedDamage(nDam, oTarget, nSaveDC, nSaveType); + if (0 == nAdjustedDam) + { + // Evasion zero'ed out the damage, clear both damage values. + nDam = 0; + nDam2 = 0; + } + else if (nAdjustedDam < nDam) + { + // Assume 1/2 damage, and half the bonus damage. + nDam = nAdjustedDam; + nDam2 /= 2; + } + } + + //Set the damage effect + if (nDam > 0) + { + eDamage = PRCEffectDamage(oTarget, nDam, nDamageType); + + // Apply effects to the currently selected target. + DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget)); + PRCBonusDamage(oTarget); + + // This visual effect is applied to the target object not the location as above. + DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + } + + // Apply bonus damage if it is a different type. + if (nDam2 > 0) + { + DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, + PRCEffectDamage(oTarget, nDam2, nBonusDamageType), oTarget)); + } + } + } + } + + oTarget = MyNextObjectInShape(SHAPE_SPHERE, fRadius, lTarget, FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + } + + // Let the SR engine know that we are done and clear out school local var. + + PRCSetSchool(); +} + +// Test main +//void main(){} diff --git a/src/include/spinc_cone.nss b/src/include/spinc_cone.nss new file mode 100644 index 0000000..4b7ce3b --- /dev/null +++ b/src/include/spinc_cone.nss @@ -0,0 +1,99 @@ +///////////////////////////////////////////////////////////////////// +// +// DoCone - Function to apply an elemental cone damage effect given +// the following arguments: +// +// nDieSize - die size to roll (d4, d6, or d8) +// nBonusDam - bonus damage per die, or 0 for none +// nConeEffect - unused (this is in 2da) +// nVictimEffect - visual effect to apply to target(s) +// nDamageType - elemental damage type of the cone (DAMAGE_TYPE_xxx) +// nSaveType - save type used for cone (SAVE_TYPE_xxx) +// nSchool - spell school, defaults to SPELL_SCHOOL_EVOCATION +// nSpellID - spell ID to use for events +// +///////////////////////////////////////////////////////////////////// + +#include "prc_inc_spells" +#include "prc_add_spell_dc" + +void DoCone (int nDieSize, int nBonusDam, int nDieCap, int nConeEffect /* unused */, + int nVictimEffect, int nDamageType, int nSaveType, + int nSchool = SPELL_SCHOOL_EVOCATION, int nSpellID = -1) +{ + PRCSetSchool(nSchool); + + // Get the spell ID if it was not given. + if (-1 == nSpellID) nSpellID = PRCGetSpellId(); + + // Get effective caster level and hand it to the SR engine. Then + // cap it at our die cap. + int nCasterLvl = PRCGetCasterLevel(OBJECT_SELF); + int nPenetr = nCasterLvl + SPGetPenetr(); + + + if (nCasterLvl > nDieCap) nCasterLvl = nDieCap; + + // Figure out where the cone was targetted. + location lTargetLocation = PRCGetSpellTargetLocation(); + + // Adjust the damage type of necessary. + nDamageType = PRCGetElementalDamageType(nDamageType, OBJECT_SELF); + + + + //Declare major variables + int nDamage; + float fDelay; + object oTarget; + + // Declare the spell shape, size and the location. Capture the first target object in the shape. + // Cycle through the targets within the spell shape until an invalid object is captured. + oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + while(GetIsObjectValid(oTarget)) + { + if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF)) + { + //Fire cast spell at event for the specified target + PRCSignalSpellEvent(oTarget, TRUE, nSpellID); + + //Get the distance between the target and caster to delay the application of effects + fDelay = PRCGetSpellEffectDelay(lTargetLocation, oTarget); + + //Make SR check, and appropriate saving throw(s). + if(!PRCDoResistSpell(OBJECT_SELF, oTarget,nPenetr, fDelay) && (oTarget != OBJECT_SELF)) + { + int nSaveDC = PRCGetSaveDC(oTarget,OBJECT_SELF); + // Roll damage for each target + int nDamage = PRCGetMetaMagicDamage(nDamageType, nCasterLvl, nDieSize, nBonusDam); + // Acid Sheath adds +1 damage per die to acid descriptor spells + if (GetHasDescriptor(nSpellID, DESCRIPTOR_ACID) && GetHasSpellEffect(SPELL_MESTILS_ACID_SHEATH, OBJECT_SELF)) + nDamage += nCasterLvl; + nDamage += SpellDamagePerDice(OBJECT_SELF, nCasterLvl); + // Adjust damage according to Reflex Save, Evasion or Improved Evasion + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nSaveDC, nSaveType); + + // Apply effects to the currently selected target. + if(nDamage > 0) + { + effect eDamage = PRCEffectDamage(oTarget, nDamage, nDamageType); + effect eVis = EffectVisualEffect(nVictimEffect); + DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); + DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget)); + PRCBonusDamage(oTarget); + } + } + } + + //Select the next target within the spell shape. + oTarget = MyNextObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE); + } + + // Let the SR engine know that we are done and clear out school local var. + + PRCSetSchool(); +} + + +// Test main +//void main(){} diff --git a/src/include/spinc_dimdoor.nss b/src/include/spinc_dimdoor.nss new file mode 100644 index 0000000..4592c77 --- /dev/null +++ b/src/include/spinc_dimdoor.nss @@ -0,0 +1,372 @@ +//:://///////////////////////////////////////////// +//:: Spell Include: Dimension Door +//:: spinc_dimdoor +//:://///////////////////////////////////////////// +/** @file + Handles the internal functioning of the Dimension + Door -type spells, powers and SLAs. + + @author Ornedan + @date Created - 2005.10.07 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +#include "prc_inc_spells" +#include "prc_inc_teleport" +//#include "prc_inc_listener" +#include "prc_inc_chat" +#include "x0_i0_position" + +////////////////////////////////////////////////// +/* Constant defintions */ +////////////////////////////////////////////////// + +const int DIMENSIONDOOR_SELF = 0; +const int DIMENSIONDOOR_PARTY = 1; + + + +// Internal constants +const string DD_CASTERLVL = "PRC_DimensionDoor_CasterLvl"; +const string DD_TELEPORTINGPARTY = "PRC_DimensionDoor_TeleportingParty"; +const string DD_LOCATION = "PRC_DimensionDoor_Location"; +const string DD_DISTANCE = "PRC_DimensionDoor_Distance"; +const string DD_FIRSTSTAGE_DONE = "PRC_DimensionDoor_FirstStageDone"; +const string DD_SCRIPTTOCALL = "PRC_DimensionDoor_ScriptToCallOnTeleport"; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Runs the using of a Dimension Door (-like) spell / power / SLA. + * The target location is either the location of a target object gotten + * with PRCGetSpellTargetObject() or if the target was a location on the + * ground, PRCGetSpellTargetLocation(). The actual target location may + * be different if bUseDirDist is TRUE. + * + * @param oCaster The creature using a spell / power / SLA to Dimension Door + * @param nCasterLvl The creature's caster / manifester level in regards to this use + * @param nSpellID The spellID currently in effect. If not specified, PRCGetSpellId() + * will be used to retrieve it. + * @param sScriptToCall Optionally, a script may be ExecuteScript'd for each of the teleportees + * after they have reached their destination. This is used to specify + * the name of such script. + * + * @param bSelfOrParty Determines whether this use of Dimension Door teleports only oCaster or + * also all it's faction memers within 10ft radius (subject to the general + * teleporting carry limits). + * Valid values: DIMENSIONDOOR_SELF and DIMENSIONDOOR_PARTY + * + * @param bUseDirDist If TRUE, the target location of the spell given via targeting cursor + * is used only to specify the direction of actual target location, + * relative to oCaster, and distance is specified via a listener. + * Otherwise, the target location specified via targeting cursor is used + * as the actual target. + */ +void DimensionDoor(object oCaster, int nCasterLvl, int nSpellID = -1, string sScriptToCall = "", + int bSelfOrParty = DIMENSIONDOOR_SELF, int bUseDirDist = FALSE + ); + + +/********************\ +* Internal Functions * +\********************/ + +/** + * Extracts data from local variables, calls DoDimensionDoorTeleport() using + * that data and then does CleanLocals(). + * + * @param oCaster creature using Dimension Door + */ +void DimensionDoorAux(object oCaster); + +/** + * Determines the target location of a Dimension Door. If using the + * direction & distance listener trick, the direction of the location + * is calculated from the base target location and distance is based + * on the caster's speech. + * Otherwise, the base target location is used. + * + * @param oCaster creature using Dimension Door + * @param nCasterLvl oCaster's caster or manifester level in regards to this + * Dimension Door use + * @param lBaseTarget the base target location, obtained via normal targeting + * @param fDistance the distance specified by speech for the direction & + * distance trick. If this is 0.0f, the trick is not used. + * + * @return The location where this Dimension Door is supposed jump + * it's targets to. + */ +location GetDimensionDoorLocation(object oCaster, int nCasterLvl, location lBaseTarget, float fDistance); + +/** + * Does the actual teleporting and VFX. + * + * @param oCaster The user of the Dimension Door being run + * @param lTarget The location to teleport to + * @param bTeleportingParty Whether this dimension door is teleporting only the user + * or also surrounding party. Determines the size of the VFX + * @param sScriptToCall The script to call for each teleporting object once it has + * reached the destination + */ +void DoDimensionDoorTeleport(object oCaster, location lTarget, int bTeleportingParty, string sScriptToCall); + +/** + * Deletes local variables used to preserve state over delays by these functions. + * + * @param oCaster creature on whom the data was stored + */ +void CleanLocals(object oCaster); + +/** + * A wrapper for assigning two commands at once after a delay from DoDimensionDoorTeleport(). + * First, the jump command and then, if the script is non-blank, a call to ExecuteScript + * the given post-jump script. + * + * @param oJumpee creature being teleported by Dimension Door + * @param lTarget the location to jump to + * @param sScriptToCall script for oJumpee to execute once it has jumped + */ +void AssignDimensionDoorCommands(object oJumpee, location lTarget, string sScriptToCall); + + + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +void DimensionDoor(object oCaster, int nCasterLvl, int nSpellID = -1, string sScriptToCall = "", + int bSelfOrParty = DIMENSIONDOOR_SELF, int bUseDirDist = FALSE + ) +{ + if(DEBUG) DoDebug("spinc_dimdoor: Running DimensionDoor()" + (GetLocalInt(oCaster, DD_FIRSTSTAGE_DONE) ? ": ERROR: Called while in second stage!":"")); + + /* Main spellscript */ + if(!GetLocalInt(oCaster, DD_FIRSTSTAGE_DONE)) + { + // Get the spell's base target location + location lTarget = GetIsObjectValid(PRCGetSpellTargetObject()) ? // Are we teleporting to some object, or just at a spot on the ground? + GetLocation(PRCGetSpellTargetObject()) : // Teleporting to some object + PRCGetSpellTargetLocation(); // Teleporting to a spot on the ground + + + // Run the code to build an array of targets on the caster + GetTeleportingObjects(oCaster, nCasterLvl, bSelfOrParty == DIMENSIONDOOR_PARTY); + + if(!bUseDirDist) + { + SetLocalInt(oCaster, DD_FIRSTSTAGE_DONE, TRUE); + } + else + { + //SpawnListener("prc_dimdoor_aux", GetLocation(oCaster), "**", oCaster, 10.0f); + AddChatEventHook(oCaster, "prc_dimdoor_aux", 10.0f); + SendMessageToPCByStrRef(oCaster, 16825211); // "You have 10 seconds to speak the distance (in meters)" + DelayCommand(10.0f, CleanLocals(oCaster)); + } + + // Store the location in either case. For the direction and distance version, it's used to determine direction. + SetLocalLocation(oCaster, DD_LOCATION, lTarget); + + // Store various other data for use in DimensionDoorAux() + SetLocalInt(oCaster, DD_CASTERLVL, nCasterLvl); + SetLocalInt(oCaster, DD_TELEPORTINGPARTY, bSelfOrParty == DIMENSIONDOOR_PARTY); + SetLocalString(oCaster, DD_SCRIPTTOCALL, sScriptToCall); + } + if(GetLocalInt(oCaster, DD_FIRSTSTAGE_DONE)) + { + DimensionDoorAux(oCaster); + } +} + +void DimensionDoorAux(object oCaster) +{ + DoDimensionDoorTeleport(oCaster, + GetDimensionDoorLocation(oCaster, + GetLocalInt(oCaster, DD_CASTERLVL), + GetLocalLocation(oCaster, DD_LOCATION), + GetLocalFloat(oCaster, DD_DISTANCE) + ), + GetLocalInt(oCaster, DD_TELEPORTINGPARTY), + GetLocalString(oCaster, DD_SCRIPTTOCALL) + ); + CleanLocals(oCaster); +} + +location GetDimensionDoorLocation(object oCaster, int nCasterLvl, location lBaseTarget, float fDistance) +{ + if(DEBUG) DoDebug("spinc_dimdoor: GetDimensionDoorLocation(" + GetName(oCaster) + ", " + IntToString(nCasterLvl) + ", " + LocationToString(lBaseTarget) + ", " + FloatToString(fDistance) + ")"); + // Default to base target + location lTarget = lBaseTarget; + + // First, check if we are using the Direction & Distance mode + if(fDistance != 0.0f) + { + if(DEBUG) DoDebug("spinc_dimdoor: Calculating the new location based on direction and distance"); + // Make sure the distance jumped is in range + if(GetLocalInt(oCaster, "DimensionalJaunt") && fDistance > FeetToMeters(5.0 * (nCasterLvl))) + { + DeleteLocalInt(oCaster, "DimensionalJaunt"); + fDistance = FeetToMeters(5.0 * (nCasterLvl)); + string sPretty = FloatToString(fDistance); + sPretty = GetSubString(sPretty, 0, FindSubString(sPretty, ".") + 2); // Trunctate decimals to the last two + sPretty += "m"; // Note the unit. Since this is SI, the letter should be universal + // "You can't teleport that far, distance limited to" + SendMessageToPC(oCaster, GetStringByStrRef(16825210) + " " + sPretty); + } + else if(GetLocalInt(oCaster, "FleeTheScene") && fDistance > FeetToMeters(25.0 + 5.0 * (nCasterLvl / 2))) + { + DeleteLocalInt(oCaster, "FleeTheScene"); + fDistance = FeetToMeters(25.0 + 5.0 * (nCasterLvl / 2)); + string sPretty = FloatToString(fDistance); + sPretty = GetSubString(sPretty, 0, FindSubString(sPretty, ".") + 2); // Trunctate decimals to the last two + sPretty += "m"; // Note the unit. Since this is SI, the letter should be universal + // "You can't teleport that far, distance limited to" + SendMessageToPC(oCaster, GetStringByStrRef(16825210) + " " + sPretty); + } + else if(GetLocalInt(oCaster, "Treewalk") && fDistance > FeetToMeters(60.0)) + { + fDistance = FeetToMeters(60.0); + string sPretty = FloatToString(fDistance); + sPretty = GetSubString(sPretty, 0, FindSubString(sPretty, ".") + 2); // Trunctate decimals to the last two + sPretty += "m"; // Note the unit. Since this is SI, the letter should be universal + // "You can't teleport that far, distance limited to" + SendMessageToPC(oCaster, GetStringByStrRef(16825210) + " " + sPretty); + } + else if(fDistance > FeetToMeters(400.0 + 40.0 * nCasterLvl)) + { + fDistance = FeetToMeters(400.0 + 40.0 * nCasterLvl); + string sPretty = FloatToString(fDistance); + sPretty = GetSubString(sPretty, 0, FindSubString(sPretty, ".") + 2); // Trunctate decimals to the last two + sPretty += "m"; // Note the unit. Since this is SI, the letter should be universal + // "You can't teleport that far, distance limited to" + SendMessageToPC(oCaster, GetStringByStrRef(16825210) + " " + sPretty); + } + location lCaster = GetLocation(oCaster); + vector vCaster = GetPositionFromLocation(lCaster); + vector vBaseTarget = GetPositionFromLocation(lBaseTarget); + /*float fAngle = acos((vBaseTarget.x - vCaster.x) / GetDistanceBetweenLocations(lCaster, lBaseTarget)); + // The above formula only returns values [0, 180], so it needs to be mirrored if the caster is moving towards negative y + if((vBaseTarget.y - vCaster.y) < 0.0f) + fAngle = -fAngle; + */ + float fAngle = GetRelativeAngleBetweenLocations(lCaster, lBaseTarget); + if(DEBUG) DoDebug("spinc_dimdoor: Angle is " + FloatToString(fAngle)); + vector vTarget = Vector(vCaster.x + cos(fAngle) * fDistance, + vCaster.y + sin(fAngle) * fDistance, + vCaster.z + ); + // Sanity checks to make sure the location is not out of map bounds in the negative direction. + if(vTarget.x < 0.0f) vTarget.x = 0.0f; + if(vTarget.y < 0.0f) vTarget.y = 0.0f; + + lTarget = Location(GetAreaFromLocation(lBaseTarget), vTarget, GetFacingFromLocation(lBaseTarget)); + } + + if (GetLocalInt(oCaster, "BlackLabyrinth")) + return GenerateNewLocationFromLocation(lTarget, FeetToMeters(5.0*d4()), IntToFloat(Random(360)), IntToFloat(Random(360))); + /* This works, but it was replaced with the direction & distance trick above since that has more versatility in + selecting the target even though it is slower due to both not fitting on the radial. + Left here in case it needs to be brought back at a later date. + + else if(GetHasTeleportQuickSelection(oCaster, PRC_TELEPORT_ACTIVE_QUICKSELECTION)) + { + if(DEBUG) DoDebug("spinc_dimdoor: Quickselect is active"); + location lTest = MetalocationToLocation(GetActiveTeleportQuickSelection(oCaster, FALSE)); + + if(GetArea(oCaster) == GetAreaFromLocation(lTest)) + { + if(DEBUG) DoDebug("spinc_dimdoor: Quickselect is in same area"); + if(GetDistanceBetweenLocations(GetLocation(oCaster), lTest) <= FeetToMeters(400.0 + 40.0 * nCasterLvl)) + { + if(DEBUG) DoDebug("spinc_dimdoor: Quickselect is in range"); + // Used the active quickselection, so clear it + RemoveTeleportQuickSelection(oCaster, PRC_TELEPORT_ACTIVE_QUICKSELECTION); + lTarget = lTest; + } + } + }*/ + + // Return the target gotten after possible modifications + return lTarget; +} + +void DoDimensionDoorTeleport(object oCaster, location lTarget, int bTeleportingParty, string sScriptToCall) +{ + location lCaster = GetLocation(oCaster); + object oTarget; + int i; + + // Check if it's valid for the caster to teleport. If he can't go, no-one goes + if(GetCanTeleport(oCaster, lTarget, TRUE, TRUE)) + { + // Loop over the targets, checking if they can teleport. Redundant check on the caster, but shouldn't cause any trouble + for(i = 0; i < array_get_size(oCaster, PRC_TELEPORTING_OBJECTS_ARRAY); i++) + { + oTarget = array_get_object(oCaster, PRC_TELEPORTING_OBJECTS_ARRAY, i); + if(GetCanTeleport(oTarget, lTarget, TRUE)) + { + DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY), oTarget, 0.55)); + DelayCommand(1.5, AssignDimensionDoorCommands(oTarget, lTarget, sScriptToCall)); + } + } + + // VFX // + //DrawLineFromCenter(DURATION_TYPE_INSTANT, VFX_IMP_WIND, lCenter, 21.0, 0.0, 0.0, 29, 2.0, "z"); + //BeamPolygon(1, 73, lCenter, 5.0, 8, 3.0, "invisobj", 1.0, 0.0, 0.0, "z", -1, -1, 0.0, 1.0, 2.0); + + // Make the caster animate for the second of delay + AssignCommand(oCaster, ClearAllActions()); + AssignCommand(oCaster, SetFacingPoint(GetPositionFromLocation(lTarget))); + AssignCommand(oCaster, ActionPlayAnimation(ANIMATION_LOOPING_CONJURE1, 1.0f, 1.0f)); + + // First, spawn a circle of ligntning around the caster + BeamPolygon(DURATION_TYPE_PERMANENT, VFX_BEAM_LIGHTNING, lCaster, + bTeleportingParty ? FeetToMeters(10.0) : FeetToMeters(3.0), // Single TP: 3ft radius; Party TP: 10ft radius + bTeleportingParty ? 15 : 10, // More nodes for the group VFX + 1.5f, "prc_invisobj", 1.0f, 0.0f, 0.0f, "z", 0.0f, 0.0f, + -1, -1, 0.0f, 1.0f, // No secondary VFX + 2.0f // Non-zero lifetime, so the placeables eventually get removed + ); + + + //BeamPolygon(1, 73, lCaster, 5.0, 8, 3.0, "prc_invisobj", 1.0, 0.0, 0.0, "z", -1, -1, 0.0, 1.0, 2.0); + + // After a moment, draw a line from the caster to the destination + DelayCommand(1.0, DrawLineFromVectorToVector(DURATION_TYPE_INSTANT, VFX_IMP_WIND, GetArea(oCaster), GetPositionFromLocation(lCaster), GetPositionFromLocation(lTarget), 0.0, + FloatToInt(GetDistanceBetweenLocations(lCaster, lTarget)), // One VFX every meter + 0.5)); + // Then, spawn a circle of ligtning at the destination + DelayCommand(0.5, BeamPolygon(DURATION_TYPE_TEMPORARY, VFX_BEAM_LIGHTNING, lTarget, + bTeleportingParty ? FeetToMeters(10.0) : FeetToMeters(3.0), + bTeleportingParty ? 15 : 10, + 1.5, "prc_invisobj", 1.0, 0.0, 0.0, "z", 0.0f, 0.0f, -1, -1, 0.0, 1.0, 2.0)); + } + + // Cleanup + array_delete(oCaster, PRC_TELEPORTING_OBJECTS_ARRAY); +} + +void AssignDimensionDoorCommands(object oJumpee, location lTarget, string sScriptToCall) +{ + AssignCommand(oJumpee, JumpToLocation(lTarget)); + if(sScriptToCall != "") + AssignCommand(oJumpee, ActionDoCommand(ExecuteScript(sScriptToCall, oJumpee))); + DelayCommand(0.5, ShadowPounce(oJumpee)); +} + +void CleanLocals(object oCaster) +{ + DeleteLocalInt (oCaster, DD_CASTERLVL); + DeleteLocalInt (oCaster, DD_TELEPORTINGPARTY); + DeleteLocalLocation(oCaster, DD_LOCATION); + DeleteLocalFloat (oCaster, DD_DISTANCE); + DeleteLocalInt (oCaster, DD_FIRSTSTAGE_DONE); + DeleteLocalString (oCaster, DD_SCRIPTTOCALL); +} + + +// Test main +//void main(){} \ No newline at end of file diff --git a/src/include/spinc_engimm.nss b/src/include/spinc_engimm.nss new file mode 100644 index 0000000..436a5a2 --- /dev/null +++ b/src/include/spinc_engimm.nss @@ -0,0 +1,39 @@ +/////////////////////////////////////////////////////////////////////////// +// +// DoEnergyImmunity - Apply a 24 hour immunity to one element to the +// target. +// nDamageType - the damage type (DAMAGE_TYPE_xxx) to be immune to +// nVfx - The visual effect to use at cast time. +// +/////////////////////////////////////////////////////////////////////////// + +#include "prc_inc_spells" + +void DoEnergyImmunity (int nDamageType, int nVfx) +{ + PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION); + + object oTarget = PRCGetSpellTargetObject(); + + // Determine the duration + float fDuration = PRCGetMetaMagicDuration(HoursToSeconds(24)); + + // Build a list of the duration effects which includes the actually immunity + // effect and all visual effects. + effect eList = EffectDamageResistance(nDamageType, 9999, 0); + effect eDur = EffectVisualEffect(VFX_DUR_PROTECTION_ELEMENTS); + eList = EffectLinkEffects(eList, eDur); + eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + eList = EffectLinkEffects(eList, eDur); + + // Fire cast spell at event for the specified target + PRCSignalSpellEvent(oTarget, FALSE, SPELL_ENERGY_IMMUNITY); + + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eList, oTarget, fDuration, TRUE, -1, PRCGetCasterLevel(OBJECT_SELF)); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(nVfx), oTarget); + + PRCSetSchool(); +} + +// Test main +//void main(){} diff --git a/src/include/spinc_fdisk.nss b/src/include/spinc_fdisk.nss new file mode 100644 index 0000000..63f63bb --- /dev/null +++ b/src/include/spinc_fdisk.nss @@ -0,0 +1,32 @@ +void TransferItems(object oDisk, object oCaster) +{ + int bDrop = !GetIsObjectValid(oCaster); + if(bDrop) + { + oCaster = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_lootbag3", GetLocation(oDisk)); + SetLocalInt(oCaster, "NW_DO_ONCE", TRUE); + DestroyObject(oCaster, 0.4); + } + + object oInv; + int i; + for(i = 0; i < 14; i++) + { + oInv = GetItemInSlot(i, oDisk); + if(GetIsObjectValid(oInv)) + ActionGiveItem(oInv, oCaster); + } + + oInv = GetFirstItemInInventory(oDisk); + while(GetIsObjectValid(oInv)) + { + ActionGiveItem(oInv, oCaster); + oInv = GetNextItemInInventory(oDisk); + } +} + +void DestroyDisk(object oDisk) +{ + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_UNSUMMON), GetLocation(oDisk)); + DestroyObject(oDisk, 0.5); +} \ No newline at end of file diff --git a/src/include/spinc_greenfire.nss b/src/include/spinc_greenfire.nss new file mode 100644 index 0000000..abef2d8 --- /dev/null +++ b/src/include/spinc_greenfire.nss @@ -0,0 +1,80 @@ + +#include "prc_inc_spells" +#include "prc_add_spell_dc" +// +// Returns TRUE if the greenfire heartbeat has fired at least once. +// +int HasHeartbeatFired() +{ + return GetLocalInt(OBJECT_SELF, "SP_GREENFIRE_HBFIRED"); +} + +// +// Saves the fact that the greenfire heartbeat has fired. +// +void SetHeartbeatFired() +{ + SetLocalInt(OBJECT_SELF, "SP_GREENFIRE_HBFIRED", TRUE); +} + +// +// Gets the greenfire spell ID. +// +int GetGreenfireSpellID() +{ + return GetLocalInt(GetAreaOfEffectCreator(), "SP_GREENFIRE_SPELLID"); +} + +// +// Saves the specified spell ID as the greenfire spell ID. +// +void SetGreenfireSpellID(int nSpellID) +{ + SetLocalInt(OBJECT_SELF, "SP_GREENFIRE_SPELLID", nSpellID); +} + + +// +// Runs the greenfire spell effect against the specified target for the specified +// caster. +// +void DoGreenfire(int nDamageType, object oCaster, object oTarget) +{ + // Get the spell ID for greenfire, which is stored as a local int on the caster. + int nSpellID = GetLocalInt(oCaster, "SP_GREENFIRE_SPELLID"); + + // Get the amount of bonus damage, based on caster level. + int nCasterLevel = PRCGetCasterLevel(oCaster); + int nBonus = nCasterLevel; + if (nBonus > 10) nBonus = 10; + + if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster)) + { + // Fire cast spell at event for the specified target + PRCSignalSpellEvent(oTarget, TRUE, nSpellID, oCaster); + + int nPenetr = nCasterLevel + SPGetPenetr(); + + if (!PRCDoResistSpell(oCaster, oTarget,nPenetr)) + { + // Roll the damage and let the target make a reflex save if the + // heartbeat hasn't fired yet, once that happens targets get no save. + int nDamage = PRCGetMetaMagicDamage(nDamageType, 2, 6, 0, nBonus); + // Acid Sheath adds +1 damage per die to acid descriptor spells + if (GetHasDescriptor(nSpellID, DESCRIPTOR_ACID) && GetHasSpellEffect(SPELL_MESTILS_ACID_SHEATH, oCaster)) + nDamage += 2; + nDamage += SpellDamagePerDice(oCaster, 2); + if (!HasHeartbeatFired()) + nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, + PRCGetSaveDC(oTarget,oCaster), SAVING_THROW_TYPE_ACID); + + // If we really did damage apply it to the target. + if (nDamage > 0) + SPApplyEffectToObject(DURATION_TYPE_INSTANT, + PRCEffectDamage(oTarget, nDamage, nDamageType), oTarget); + } + } +} + +// Test main +//void main(){} diff --git a/src/include/spinc_lessorb.nss b/src/include/spinc_lessorb.nss new file mode 100644 index 0000000..f5e7698 --- /dev/null +++ b/src/include/spinc_lessorb.nss @@ -0,0 +1,54 @@ + +#include "prc_inc_sp_tch" +//#include "prc_inc_combat" +//#include "prc_inc_spells" + +void DoLesserOrb(effect eVis, int nDamageType, int nSpellID = -1) +{ + PRCSetSchool(SPELL_SCHOOL_CONJURATION); + + object oCaster = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + int nCasterLvl = PRCGetCasterLevel(oCaster); + int nMetaMagic = PRCGetMetaMagicFeat(); + + int nDice = (nCasterLvl + 1)/2; + if (nDice > 5) nDice = 5; + + // Get the spell ID if it was not given. + if(-1 == nSpellID) nSpellID = PRCGetSpellId(); + + // Adjust the damage type of necessary. + nDamageType = PRCGetElementalDamageType(nDamageType, oCaster); + + if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster)) + { + // Fire cast spell at event for the specified target + PRCSignalSpellEvent(oTarget, TRUE, nSpellID); + + // Note that this spell has no spell resistance intentionally in the WotC Miniatures + // Handbook, bit powerful but that's how it is in the PnP book. + + // Make touch attack, saving result for possible critical + int nTouchAttack = PRCDoRangedTouchAttack(oTarget); + if (nTouchAttack > 0) + { + // Roll the damage, doing double damage on a crit. + int nDamage = PRCGetMetaMagicDamage(nDamageType, 1 == nTouchAttack ? nDice : (nDice * 2), 8); + nDamage += SpellSneakAttackDamage(OBJECT_SELF, oTarget); + // Acid Sheath adds +1 damage per die to acid descriptor spells + if (GetHasDescriptor(GetSpellId(), DESCRIPTOR_ACID) && GetHasSpellEffect(SPELL_MESTILS_ACID_SHEATH, OBJECT_SELF)) + nDamage += nDice; + nDamage += SpellDamagePerDice(OBJECT_SELF, nDice); + // Apply the damage and the damage visible effect to the target. + SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDamage, nDamageType), oTarget); + PRCBonusDamage(oTarget); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + } + } + + PRCSetSchool(); +} + +// Test main +//void main(){} diff --git a/src/include/spinc_maze.nss b/src/include/spinc_maze.nss new file mode 100644 index 0000000..8e6a852 --- /dev/null +++ b/src/include/spinc_maze.nss @@ -0,0 +1,159 @@ +//::////////////////////////////////////////////// +//:: Maze scripts common functions +//:: spinc_maze +//::////////////////////////////////////////////// +/** @file + + + @author Ornedan + @date Created - 2005.10.18 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +#include "prc_inc_spells" +#include "prc_inc_teleport" +#include "inc_dynconv" + +// Direction constants +const int NORTH = 0x1000; +const int SOUTH = 0x0100; +const int WEST = 0x0010; +const int EAST = 0x0001; + +// The escape DC. Should always be 20, but changeable for ease of testing +const int MAZE_ESCAPE_DC = 20; + +const int LOCAL_DEBUG = FALSE; + + + + +/** + * Debugging function for converting the direction constants to + * readable strings. + * + * @param n One of the direction constants in this file. + * @return Name of the constant. + */ +string DebugDir2String(int n) +{ + return (n == NORTH ? "NORTH": + n == SOUTH ? "SOUTH": + n == WEST ? "WEST" : + n == EAST ? "EAST" : + "ERROR" + ); +} + +/** + * Makes the creature move in the direction specified. + * + * @param oCreature The creature to command to move. + * @param nDirection One of the direction constants in this file. + */ +void GoDirection(object oCreature, int nDirection) +{ + if(LOCAL_DEBUG) DoDebug("GoDirection(): Direction is " + DebugDir2String(nDirection)); + // Generate location for the direction + location lDir; + vector v = GetPosition(oCreature); + if(nDirection == NORTH || nDirection == SOUTH) + { + v.y = nDirection == NORTH ? 160.0f : 0.0f; + lDir = Location(GetArea(oCreature), v, 0.0f); + } + else + { + v.x = nDirection == EAST ? 160.0f : 0.0f; + lDir = Location(GetArea(oCreature), v, 0.0f); + } + // Generate a location at the center of the trigger + location lTrigCenter; + v = GetPosition(OBJECT_SELF); + v.x = IntToFloat(((FloatToInt(v.x) / 10) * 10) + 5); + v.y = IntToFloat(((FloatToInt(v.y) / 10) * 10) + 5); + lTrigCenter = Location(GetArea(oCreature), v, GetFacing(oCreature)); + + // Nuke current action and move to the direction + AssignCommand(oCreature, ClearAllActions()); + AssignCommand(oCreature, ActionMoveToLocation(lTrigCenter)); + AssignCommand(oCreature, ActionMoveToLocation(lDir)); + // Turn the camera + AssignCommand(oCreature, SetCameraFacing((nDirection == NORTH ? 90.0f : + nDirection == SOUTH ? 270.0f : + nDirection == WEST ? 180.0f : + /*EAST*/ 0.0f + ), + -1.0f, -1.0f, CAMERA_TRANSITION_TYPE_FAST) + ); + + // Store the direction one should not move to from the next junction + switch(nDirection) + { + case NORTH: SetLocalInt(oCreature, "PRC_Maze_Direction", SOUTH); break; + case SOUTH: SetLocalInt(oCreature, "PRC_Maze_Direction", NORTH); break; + case WEST: SetLocalInt(oCreature, "PRC_Maze_Direction", EAST); break; + case EAST: SetLocalInt(oCreature, "PRC_Maze_Direction", WEST); break; + } +} + +void DoMazeVFX(location lLoc) +{ + DrawSpiral(DURATION_TYPE_INSTANT, VFX_IMP_HEAD_SONIC, lLoc, 1.0, 3.0, 0.0, 60, 2.5, 2.0, 0.0f, "z"/*, GetFacingFromLocation(lLoc)*/); +} + +void ReturnFromMaze(object oCreature) +{ + if(LOCAL_DEBUG) DoDebug("ReturnFromMaze() running\noCreature = '" + GetName(oCreature) + "'"); + location lReturn = GetLocalLocation(oCreature, "PRC_Maze_Return_Location"); + AssignCommand(oCreature, ClearAllActions(TRUE)); + DelayCommand(2.0f, AssignCommand(oCreature, JumpToLocation(lReturn))); + + // Do VFX + DoMazeVFX(GetLocation(oCreature)); +} + +void MazeEscapeHB(object oCreature, int nCountLeft) +{ + if(LOCAL_DEBUG) DoDebug("MazeEscapeHB() running\n" + + "oCreature = '" + GetName(oCreature) + "'\n" + + "nCountLeft = " + IntToString(nCountLeft) + "\n" + ); + + // If the counter has reached zero, ie. full 10 mins have passsed, return is automatic + if(nCountLeft <= 0) + { + if(LOCAL_DEBUG) DoDebug("MazeEscapeHB(): Timer has run out, returning from maze."); + ReturnFromMaze(oCreature); + return; + } + + // If it's a PC that hasn't made it's decision yet, don't run the int check + if(!GetLocalInt(oCreature, "PRC_Maze_PC_Waiting")) + { + if(LOCAL_DEBUG) DoDebug("MazeEscapeHB(): Running Int check."); + + // Int check versus MAZE_ESCAPE_DC to escape + int nD20 = d20(); + int nIntMod = GetAbilityModifier(ABILITY_INTELLIGENCE, oCreature); + int bResult = (nD20 + nIntMod) >= MAZE_ESCAPE_DC; + + // Inform the creature of the result + SendMessageToPC(oCreature, PRCGetRGB(7,7,15) + GetName(oCreature) + "" + // "Int check" "success" "failure" + PRCGetRGB(1,1,15) + " : " + GetStringByStrRef(16825701) + " : *" + (bResult ? GetStringByStrRef(5352) : GetStringByStrRef(5353)) + "* : (" + IntToString(nD20) + " + " + IntToString(nIntMod) + " = " + IntToString(nD20 + nIntMod) + " vs. DC: " + IntToString(MAZE_ESCAPE_DC) + ")"); + + // Return from the maze if the check was successfull + if(bResult) + { + ReturnFromMaze(oCreature); + return; + } + } + + // Schedule next check + DelayCommand(6.0f, MazeEscapeHB(oCreature, nCountLeft - 1)); +} + +// Test main +//void main(){} diff --git a/src/include/spinc_necro_cyst.nss b/src/include/spinc_necro_cyst.nss new file mode 100644 index 0000000..1e767bf --- /dev/null +++ b/src/include/spinc_necro_cyst.nss @@ -0,0 +1,124 @@ +//:://///////////////////////////////////////////// +//:: Necrotic Cyst spell includes +//:: spinc_necro_cyst +//::////////////////////////////////////////////// +/** @file + This file contains functions and constants + related to the Necrotic Cyst spell line. + + + @author Ornedan + @date Created - 2005.09.21 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +/////////////////////////////////////// +/* Function prototypes */ +/////////////////////////////////////// + +/** + * Checks if the given creature may cast Necrotic Cyst spells. + * + * @param oPC The creature whose eligibility to test. + * @return TRUE if the creature is allowed to cast + * Necrotic Cyst spells, FALSE otherwise. + */ +int GetCanCastNecroticSpells(object oPC); + +/** + * Checks if the given creature has a necrotic cyst. + * + * @param oCreature Creature to check. + * @return TRUE if the creature has a necrotic cyst, + * FALSE otherwise. + */ +int GetHasNecroticCyst(object oCreature); + + + +/////////////////////////////////////// +/* Constant declarations */ +/////////////////////////////////////// + +const string NECROTIC_EMPOWERMENT_MARKER = "HAS_NECROTIC_EMPOWER"; +const string NECROTIC_CYST_MARKER = "HAS_NECROTIC_CYST"; +const int nNoNecCyst = 16829317; +const int nNoMotherCyst = 16829318; +const int nNecEmpower = 16829319; +const int nGaveCyst = 16829316; + +/////////////////////////////////////// +/* Function declarations */ +/////////////////////////////////////// +//#include "prc_alterations" // No point in including prc_alteractions +//#include "inc_utility" +#include "prc_x2_itemprop" // required for - SetPersistantLocalInt +//#include "prc_spell_const" + +int GetCanCastNecroticSpells(object oPC) +{ + int bReturn = TRUE; + + // check for Necrotic Empowerment on caster + if(GetHasSpellEffect(SPELL_NECROTIC_EMPOWERMENT, oPC)) + { + // "You cannot cast spells utilizing your Mother Cyst while under the effect of Necrotic Empowerment." + FloatingTextStrRefOnCreature(nNecEmpower, oPC); + bReturn = FALSE; + } + // check for Mother Cyst + if(!GetHasFeat(FEAT_MOTHER_CYST, oPC) && (!GetIsObjectValid(GetSpellCastItem()))) + { + // "You must have a Mother Cyst to cast this spell." + FloatingTextStrRefOnCreature(nNoMotherCyst, oPC); + bReturn = FALSE; + } + + if(DEBUG) DoDebug("spinc_necrocyst: GetCanCastNecroticSpells():\n" + + "oPC = '" + GetName(oPC) + "'"); + + return bReturn; +} + +int GetHasNecroticCyst(object oCreature) +{ + return GetPersistantLocalInt(oCreature, NECROTIC_CYST_MARKER); + //if(DEBUG) DoDebug("spinc_necrocyst: GetHasNecroticCyst():\n" + // + "oCreature = '" + GetName(oCreature) + "'"); +} + +void GiveNecroticCyst(object oCreature) +{ + + SetPersistantLocalInt(oCreature, NECROTIC_CYST_MARKER, 1); + FloatingTextStrRefOnCreature(nGaveCyst, OBJECT_SELF); + itemproperty iCystDam = (ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1)); + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature); + if (GetIsObjectValid(oArmor)) + { + //add item prop with DURATION_TYPE_PERMANENT + IPSafeAddItemProperty(oArmor, iCystDam, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE); + } + + else + { + object oSkin = GetPCSkin(oCreature); + IPSafeAddItemProperty(oSkin, iCystDam, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE); + } + + //Keep property on armor or hide + ExecuteScript ("prc_keep_onhit_a", oCreature); + + if(DEBUG) DoDebug("spinc_necrocyst: GiveNecroticCyst():\n" + + "oCreature = '" + GetName(oCreature) + "'"); + +} + +void RemoveCyst(object oCreature) +{ + SetPersistantLocalInt(oCreature, NECROTIC_CYST_MARKER, 0); +} + +// Test main +//void main(){} diff --git a/src/include/spinc_orb.nss b/src/include/spinc_orb.nss new file mode 100644 index 0000000..709d9fc --- /dev/null +++ b/src/include/spinc_orb.nss @@ -0,0 +1,57 @@ +#include "prc_inc_sp_tch" +#include "prc_add_spell_dc" + +void DoOrb(effect eVis, effect eFailSave, int nSaveType, int nDamageType, int nSpellID = -1) +{ + PRCSetSchool(SPELL_SCHOOL_EVOCATION); + + object oTarget = PRCGetSpellTargetObject(); + int nCasterLvl = PRCGetCasterLevel(OBJECT_SELF); + int nAtk = PRCDoRangedTouchAttack(oTarget, TRUE, OBJECT_SELF); + + if(nAtk) + { + int nDice = nCasterLvl; + if (nDice > 15) nDice = 15; + + int nPenetr = nCasterLvl + SPGetPenetr(); + + // Get the spell ID if it was not given. + if (-1 == nSpellID) nSpellID = PRCGetSpellId(); + + // Adjust the damage type of necessary. + nDamageType = PRCGetElementalDamageType(nDamageType, OBJECT_SELF); + + effect eMissile = EffectVisualEffect(VFX_IMP_MIRV); + + if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF)) + { + //Fire cast spell at event for the specified target + PRCSignalSpellEvent(oTarget, TRUE, nSpellID); + + //Roll damage for each target + int nDamage = PRCGetMetaMagicDamage(nDamageType, nDice, 6); + // Acid Sheath adds +1 damage per die to acid descriptor spells + if (GetHasDescriptor(GetSpellId(), DESCRIPTOR_ACID) && GetHasSpellEffect(SPELL_MESTILS_ACID_SHEATH, OBJECT_SELF)) + nDamage += nDice; + nDamage += SpellDamagePerDice(OBJECT_SELF, nDice); + // Apply the damage and the damage visible effect to the target. + ApplyTouchAttackDamage(OBJECT_SELF, oTarget, nAtk, nDamage, nDamageType); + PRCBonusDamage(oTarget); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + + if(PRCGetIsAliveCreature(oTarget)) + { + // If the target failed it's save then apply the failed save effect as well for 1 round. + if (!PRCMySavingThrow(nSaveType, oTarget, PRCGetSaveDC(oTarget, OBJECT_SELF))) + { + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eFailSave, oTarget, RoundsToSeconds(1),TRUE,-1,nCasterLvl); + } + } + } + } + PRCSetSchool(); +} + +// Test main +//void main(){} diff --git a/src/include/spinc_remeffct.nss b/src/include/spinc_remeffct.nss new file mode 100644 index 0000000..b513d3e --- /dev/null +++ b/src/include/spinc_remeffct.nss @@ -0,0 +1,156 @@ +/////////////////////////////////////////////////////////////////////////// +//@file +//Include for spell removal checks +// +// +//void SpellRemovalCheck +// +//This function is used for the removal of effects and ending of spells that +//cannot be ended in a normal fashion. +// +/////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +void SpellRemovalCheck(object oCaster, object oTarget); + + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "prc_inc_spells" + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +void SpellRemovalCheck(object oCaster, object oTarget) +{ + //Get Spell being cast + int nSpellID = PRCGetSpellId(); + + //Set up spell removals for individual spells + //Remove Curse + if(nSpellID == SPELL_REMOVE_CURSE) + { + //Ghoul Gauntlet + if(GetHasSpellEffect(SPELL_GHOUL_GAUNTLET, oTarget)) + PRCRemoveSpellEffects(SPELL_GHOUL_GAUNTLET, oCaster, oTarget); + + //Touch of Juiblex + if(GetHasSpellEffect(SPELL_TOUCH_OF_JUIBLEX, oTarget)) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(3), DAMAGE_TYPE_MAGICAL), oTarget); + PRCRemoveSpellEffects(SPELL_TOUCH_OF_JUIBLEX, oCaster, oTarget); + } + + //Evil Eye + if(GetHasSpellEffect(SPELL_EVIL_EYE, oTarget)) + PRCRemoveSpellEffects(SPELL_EVIL_EYE, oCaster, oTarget); + } + + //Remove Disease + if(nSpellID == SPELL_REMOVE_DISEASE) + { + //Ghoul Gauntlet + if(GetHasSpellEffect(SPELL_GHOUL_GAUNTLET, oTarget)) + PRCRemoveSpellEffects(SPELL_GHOUL_GAUNTLET, oCaster, oTarget); + } + + //Heal + if(nSpellID == SPELL_HEAL + || nSpellID == SPELL_MASS_HEAL) + { + //Ghoul Gauntlet + if(GetHasSpellEffect(SPELL_GHOUL_GAUNTLET, oTarget)) + PRCRemoveSpellEffects(SPELL_GHOUL_GAUNTLET, oCaster, oTarget); + + //Energy Ebb + if(GetHasSpellEffect(SPELL_ENERGY_EBB, oTarget)) + PRCRemoveSpellEffects(SPELL_ENERGY_EBB, oCaster, oTarget); + + //Touch of Juiblex + if(GetHasSpellEffect(SPELL_TOUCH_OF_JUIBLEX, oTarget)) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(3), DAMAGE_TYPE_MAGICAL), oTarget); + PRCRemoveSpellEffects(SPELL_TOUCH_OF_JUIBLEX, oCaster, oTarget); + } + } + + //Restoration + if(nSpellID == SPELL_RESTORATION) + { + //Ghoul Gauntlet + if(GetHasSpellEffect(SPELL_GHOUL_GAUNTLET, oTarget)) + PRCRemoveSpellEffects(SPELL_GHOUL_GAUNTLET, oCaster, oTarget); + + //Energy Ebb + if(GetHasSpellEffect(SPELL_ENERGY_EBB, oTarget)) + PRCRemoveSpellEffects(SPELL_ENERGY_EBB, oCaster, oTarget); + } + + //Greater Restoration + if(nSpellID == SPELL_GREATER_RESTORATION) + { + //Ghoul Gauntlet + if(GetHasSpellEffect(SPELL_GHOUL_GAUNTLET, oTarget)) + PRCRemoveSpellEffects(SPELL_GHOUL_GAUNTLET, oCaster, oTarget); + + //Energy Ebb + if(GetHasSpellEffect(SPELL_ENERGY_EBB, oTarget)) + PRCRemoveSpellEffects(SPELL_ENERGY_EBB, oCaster, oTarget); + + //Touch of Juiblex + if(GetHasSpellEffect(SPELL_TOUCH_OF_JUIBLEX, oTarget)) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(3), DAMAGE_TYPE_MAGICAL), oTarget); + PRCRemoveSpellEffects(SPELL_TOUCH_OF_JUIBLEX, oCaster, oTarget); + } + } + + //Dispel Magic + //Greater Dispelling + //Mordenkainen's Disjunction + if(nSpellID == SPELL_DISPEL_MAGIC + || nSpellID == SPELL_GREATER_DISPELLING + || nSpellID == SPELL_MORDENKAINENS_DISJUNCTION) + { + //Ghoul Gauntlet + if(GetHasSpellEffect(SPELL_GHOUL_GAUNTLET, oTarget)) + PRCRemoveSpellEffects(SPELL_GHOUL_GAUNTLET, oCaster, oTarget); + + //Eternity of Torture + if(GetHasSpellEffect(SPELL_ETERNITY_OF_TORTURE, oTarget)) + { + AssignCommand(oTarget, SetCommandable(TRUE, oTarget)); + PRCRemoveSpellEffects(SPELL_ETERNITY_OF_TORTURE, oCaster, oTarget); + } + } + + //Limited Wish + //Wish + //Miracle +} + +// Checks if the effect is specific to a plot and should not be removed normally +int GetShouldNotBeRemoved(effect eEff) +{ + object oCreator = GetEffectCreator(eEff); + if(GetTag(oCreator) == "q6e_ShaorisFellTemple") + return TRUE; + + if(GetEffectSpellId(eEff) >= VESTIGE_AMON && VESTIGE_ABYSM >= GetEffectSpellId(eEff)) + return TRUE; + + if(GetEffectSpellId(eEff) >= MELD_ACROBAT_BOOTS && MELD_ELDER_SPIRIT >= GetEffectSpellId(eEff)) + return TRUE; + + return FALSE; +} + +// Test main +//void main(){} diff --git a/src/include/spinc_telecircle.nss b/src/include/spinc_telecircle.nss new file mode 100644 index 0000000..c3801d3 --- /dev/null +++ b/src/include/spinc_telecircle.nss @@ -0,0 +1,162 @@ +//:://///////////////////////////////////////////// +//:: Spell Include: Teleportation Circle +//:: spinc_telecircle +//:://///////////////////////////////////////////// +/** @file + Handles the internal functioning of the + Teleportation Circle -type spells, powers + and SLAs. + + @author Ornedan + @date Created - 2005.11.12 + @date Modified - 2006.06.04 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +#include "prc_inc_spells" +#include "prc_inc_teleport" + + +////////////////////////////////////////////////// +/* Constant defintions */ +////////////////////////////////////////////////// + +// Internal constants +const string TC_CASTERLEVEL = "PRC_TeleportCircle_CasterLvl"; +const string TC_ISVISIBLE = "PRC_TeleportCircle_IsVisible"; +const string TC_ISEXTENDED = "PRC_TeleportCircle_Extended"; +const string TC_FIRSTSTAGE_DONE = "PRC_TeleportCircle_FirstPartDone"; +const string TC_LOCATION = "PRC_TeleportCircle_TargetLocation"; + +const int TC_NUM_TRAPS = 4; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Runs the using of a Teleportation Circle (-like) spell / power / SLA. + * The destination is gotten using a conversation or, if active, the + * caster's quickselection. + * NOTE: You will need to call spellhook / powerhook / specific-whatever + * before this function. + * + * + * @param oCaster The creature using a spell / power / SLA create + * a Teleportation Circle + * @param nCasterLvl The creature's caster / manifester level in regards to + * this use + * @param bVisible Whether the circle should be visible or not. A visible circle + * is marked with VFX and has a detection DC of 0. A hidden circle + * has a detection DC of 34. + * @param bExtended Whether this use of Teleportation Circle had the Extend Metaeffect + * applied to it. + */ +void TeleportationCircle(object oCaster, int nCasterLvl, int bVisible, int bExtended); + + +/********************\ +* Internal Functions * +\********************/ + +/** + * Does the actual creation of the circle. Called once the user has specified + * the target location to use. + * + * @param oCaster creature using Teleportation Circle + */ +void TeleportationCircleAux(object oCaster); + + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + + +void TeleportationCircleAux(object oCaster) +{ + // Retrieve the target location from the variable + location lCircleTarget = GetLocalLocation(oCaster, TC_LOCATION); + location lTarget; + int bVisible = GetLocalInt(oCaster, TC_ISVISIBLE); + int nCasterLvl = GetLocalInt(oCaster, TC_CASTERLEVEL); + int bExtended = GetLocalInt(oCaster, TC_ISEXTENDED); + float fDuration = nCasterLvl * 10 * 60.0f * (bExtended ? 2 : 1); + float fFacing = GetFacing(oCaster); + float fDistance = FeetToMeters(5.0f) + 0.2; + vector vTarget = GetPosition(oCaster); + vTarget.x += cos(fFacing) * fDistance; + vTarget.y += sin(fFacing) * fDistance; + lTarget = Location(GetArea(oCaster), vTarget, fFacing); + + // Create the actual circle, in front of the caster + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, + EffectAreaOfEffect(AOE_PER_TELEPORTATIONCIRCLE, "prc_telecirc_oe"), + lTarget, + fDuration + ); + // Get an object reference to the newly created AoE + object oAoE = MyFirstObjectInShape(SHAPE_SPHERE, 1.0f, lTarget, FALSE, OBJECT_TYPE_AREA_OF_EFFECT); + while(GetIsObjectValid(oAoE)) + { + // Test if we found the correct AoE + if(GetTag(oAoE) == Get2DACache("vfx_persistent", "LABEL", AOE_PER_TELEPORTATIONCIRCLE) && + !GetLocalInt(oAoE, "PRC_TeleCircle_AoE_Inited") + ) + { + break; + } + // Didn't find, get next + oAoE = MyNextObjectInShape(SHAPE_SPHERE, 1.0f, lTarget, FALSE, OBJECT_TYPE_AREA_OF_EFFECT); + } + if(DEBUG) if(!GetIsObjectValid(oAoE)) DoDebug("ERROR: Can't find area of effect for Teleportation Circle!"); + + // Store data on the AoE + SetLocalLocation(oAoE, "TargetLocation", lCircleTarget); + SetLocalInt(oAoE, "IsVisible", bVisible); + + // Make the AoE initialise the trap trigger and possibly the VFX heartbeat + ExecuteScript("prc_telecirc_aux", oAoE); + + + // A VFX (momentary, circular, impressive :D ) at the circle's location. + // Do even if hidden circle so that the caster knows where it really ended up + DrawRhodonea(DURATION_TYPE_INSTANT, VFX_IMP_HEAD_MIND, lTarget, FeetToMeters(5.0f), 0.25, 0.0, 180, 12.0, 4.0, 0.0, "z"); + + // Cleanup + DeleteLocalInt(oCaster, TC_CASTERLEVEL); + DeleteLocalInt(oCaster, TC_ISVISIBLE); + DeleteLocalInt(oCaster, TC_ISEXTENDED); + DeleteLocalInt(oCaster, TC_FIRSTSTAGE_DONE); + DeleteLocalLocation(oCaster, TC_LOCATION); +} + +void TeleportationCircle(object oCaster, int nCasterLvl, int bVisible, int bExtended) +{ + if(DEBUG) DoDebug("spinc_telecircle: Running TeleportationCircle()" + (GetLocalInt(oCaster, TC_FIRSTSTAGE_DONE) ? ": ERROR: Called while in second stage!":"") + "\n" + + "oCaster = " + DebugObject2Str(oCaster) + "\n" + + "nCasterLvl = " + IntToString(nCasterLvl) + "\n" + + "bVisible = " + DebugBool2String(bVisible) + "\n" + + "bExtended = " + DebugBool2String(bExtended) + "\n" + ); + + // Get whether we are executing the first or the second part of the script + if(!GetLocalInt(oCaster, TC_FIRSTSTAGE_DONE)) + { + // Store the caster level + SetLocalInt(oCaster, TC_CASTERLEVEL, nCasterLvl); + // Store the spellID + SetLocalInt(oCaster, TC_ISVISIBLE, bVisible); + // Store whether the spell is extended + SetLocalInt(oCaster, TC_ISEXTENDED, bExtended); + // Mark the first part done + SetLocalInt(oCaster, TC_FIRSTSTAGE_DONE, TRUE); + // Now, get the location to have the circle point at. + ChooseTeleportTargetLocation(oCaster, "prc_telecirc_aux", TC_LOCATION, FALSE, TRUE); + } +} + + +// Test main +//void main(){} \ No newline at end of file diff --git a/src/include/spinc_teleport.nss b/src/include/spinc_teleport.nss new file mode 100644 index 0000000..9d06bc9 --- /dev/null +++ b/src/include/spinc_teleport.nss @@ -0,0 +1,191 @@ +//:://///////////////////////////////////////////// +//:: Spell Include: Teleport +//:: spinc_teleport +//:://///////////////////////////////////////////// +/** @file + Handles the internal functioning of the (Greater) + Teleport -type spells, powers and SLAs. + + @author Ornedan + @date Created - 2005.11.04 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +#include "prc_inc_spells" +#include "prc_inc_teleport" + + +////////////////////////////////////////////////// +/* Constant defintions */ +////////////////////////////////////////////////// + +// Internal constants +const string TP_LOCATION = "PRC_Teleport_TargetLocation"; +const string TP_ERRORLESS = "PRC_Teleport_Errorless"; +const string TP_FIRSTSTAGE_DONE = "PRC_Teleport_FirstPartDone"; +const string TP_END_SCRIPT = "PRC_Teleport_ScriptToCallAtEnd"; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Runs the using of a (Greater) Teleport (-like) spell / power / SLA. + * The destination is gotten using a conversation or, if active, the + * caster's quickselection. + * NOTE: You will need to call spellhook / powerhook / specific-whatever + * before this function. + * + * + * @param oCaster The creature using a spell / power / SLA to Teleport + * @param nCasterLvl The creature's caster / manifester level in regards to this use + * @param bTeleportParty Whether to teleport only the user or also faction members within + * 10ft of the user. If TRUE, teleports party in addition to the user, + * otherwise just the user. + * @param bErrorLess Whether this teleportation is subject to potential error a 'la Teleport + * or errorless like Greater Teleport. If TRUE, there is no chance of + * ending anywhere else other than the location selected. + * @param sScriptToCall Optionally, a script may be ExecuteScript'd for each of the teleportees + * after they have reached their destination. This is used to specify + * the name of such script. + */ +void Teleport(object oCaster, int nCasterLvl, int bTeleportParty, int bErrorLess, string sScriptToCall = ""); + + +/********************\ +* Internal Functions * +\********************/ + +/** + * Does the actual teleporting. Called once the user has specified + * the location to use. + * + * @param oCaster creature using Teleport + */ +void TeleportAux(object oCaster); + +/** + * A visual effects heartbeat that runs when using party teleport while + * waiting for the caster to decide the target location. + * Outlines the 10ft radius. The HB will cease when the caster + * makes the decision or moves from the location they were at at the + * beginning of the HB. + * + * @param oCaster User of a Teleport + * @param lCaster The location of the caster when they started the use + */ +void VFX_HB(object oCaster, location lCaster); + +/** + * A wrapper for assigning two commands at once after a delay from TeleportAux() + * First, the jump command and then, if the script is non-blank, a call to ExecuteScript + * the given post-jump script. + * + * @param oJumpee creature being teleported by Teleport + * @param lTarget the location to jump to + * @param sScriptToCall script for oJumpee to execute once it has jumped + */ +void AssignTeleportCommands(object oJumpee, location lTarget, string sScriptToCall); + + +////////////////////////////////////////////////// +/* Function defintions */ +////////////////////////////////////////////////// + +void VFX_HB(object oCaster, location lCaster) +{ + // End the VFX once the caster either finishes the spell or moves + if(GetLocalInt(oCaster, TP_FIRSTSTAGE_DONE) && GetLocation(oCaster) == lCaster) + { + // Draw to circles, going in the opposite directions + DrawCircle(DURATION_TYPE_INSTANT, VFX_IMP_CONFUSION_S, lCaster, FeetToMeters(10.0f), 0.0, 50, 1.0, 6.0, 0.0, "z"); + DrawCircle(DURATION_TYPE_INSTANT, VFX_IMP_CONFUSION_S, lCaster, FeetToMeters(10.0f), 0.0, 50, 1.0, 6.0, 180.0, "z"); + DelayCommand(6.0f, VFX_HB(oCaster, lCaster)); + } +} + +void TeleportAux(object oCaster) +{ + // Retrieve the target location from the variable + location lTarget = GetLocalLocation(oCaster, TP_LOCATION); + location lCaster = GetLocation(oCaster); + string sScriptToCall = GetLocalString(oCaster, TP_END_SCRIPT); + // Teleportation error handling code + lTarget = GetTeleportError(lTarget, oCaster, GetLocalInt(oCaster, TP_ERRORLESS)); + + int i; + object oTarget; + + // Check if it's valid for the caster to teleport. If he can't go, no-one goes + if(GetCanTeleport(oCaster, lTarget, TRUE, TRUE)) + { + // VFX on the starting location + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_TELEPORT_OUT), lCaster); + + // Loop over the targets, checking if they can teleport. Redundant check on the caster, but shouldn't cause any trouble + for(i = 0; i < array_get_size(oCaster, PRC_TELEPORTING_OBJECTS_ARRAY); i++) + { + oTarget = array_get_object(oCaster, PRC_TELEPORTING_OBJECTS_ARRAY, i); + if(GetCanTeleport(oTarget, lTarget, TRUE)) + { + DelayCommand(1.0f, AssignTeleportCommands(oTarget, lTarget, sScriptToCall)); + } + } + + // VFX at arrival location. May run out before the teleporting people arrive + DelayCommand(1.0f, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_TELEPORT_IN), lTarget)); + } + + // Cleanup + DeleteLocalInt(oCaster, TP_FIRSTSTAGE_DONE); + DeleteLocalLocation(oCaster, TP_LOCATION); + DeleteLocalInt(oCaster, TP_ERRORLESS); + DeleteLocalString(oCaster, TP_END_SCRIPT); + array_delete(oCaster, PRC_TELEPORTING_OBJECTS_ARRAY); +} + +void AssignTeleportCommands(object oJumpee, location lTarget, string sScriptToCall) +{ + AssignCommand(oJumpee, JumpToLocation(lTarget)); + if(sScriptToCall != "") + AssignCommand(oJumpee, ActionDoCommand(ExecuteScript(sScriptToCall, oJumpee))); + DelayCommand(0.5, ShadowPounce(oJumpee)); +} + +void Teleport(object oCaster, int nCasterLvl, int bTeleportParty, int bErrorLess, string sScriptToCall = "") +{ + if(DEBUG) DoDebug("spinc_teleport: Running Teleport()" + /*(GetLocalInt(oCaster, TP_FIRSTSTAGE_DONE) ? ": ERROR: Called while in second stage!":*/("\n" + + "oCaster = " + DebugObject2Str(oCaster) + "\n" + + "nCasterLvl = " + IntToString(nCasterLvl) + "\n" + + "bTeleportParty = " + DebugBool2String(bTeleportParty) + "\n" + + "bErrorLess = " + DebugBool2String(bErrorLess) + "\n" + + "sScriptToCall = '" + sScriptToCall + "'\n" + /*)*/)); + + // Get whether we are executing the first or the second part of the script + /*if(!GetLocalInt(oCaster, TP_FIRSTSTAGE_DONE)) + {*/ + location lCaster = GetLocation(oCaster); + + // Run the code to build an array of targets on the caster + GetTeleportingObjects(oCaster, nCasterLvl, bTeleportParty); + + // Do VFX while waiting for the location select. Only for party TP + if(bTeleportParty) + DelayCommand(0.01f, VFX_HB(oCaster, lCaster)); + + // Mark the first part done + SetLocalInt(oCaster, TP_FIRSTSTAGE_DONE, TRUE); + // Store whether this usage is errorless + SetLocalInt(oCaster, TP_ERRORLESS, bErrorLess); + // Store the name of the script to call at the end + SetLocalString(oCaster, TP_END_SCRIPT, sScriptToCall); + // Now, get the location to teleport to. + ChooseTeleportTargetLocation(oCaster, "prc_teleport_aux", TP_LOCATION, FALSE, TRUE); + //} +} + + +// Test main +//void main(){} \ No newline at end of file diff --git a/src/include/spinc_trans.nss b/src/include/spinc_trans.nss new file mode 100644 index 0000000..c05fd23 --- /dev/null +++ b/src/include/spinc_trans.nss @@ -0,0 +1,104 @@ +//:://///////////////////////////////////////////// +//:: Spell Include: Transposition +//:: spinc_trans +//:://///////////////////////////////////////////// +/** @file + Common code for Benign Transposition and + Baleful Transposition. +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +#include "prc_inc_spells" +#include "prc_inc_teleport" +#include "prc_add_spell_dc" +///////////////////////// +// Function Prototypes // +///////////////////////// + +/** + * Changes the positions of current spellcaster and spell target. + * + * @param bAllowHostile If this flag is FALSE then the target creature + * must be a member of the caster's party (have the same faction + * leader). If this flag is false then it may be a party member + * or a hostile creature. + * @param bRunSpellhook By default, this is TRUE and the function runs the spellhook. + * But in some cases, such as feats or psionic powers, the script + * calling this function may need to handle the matter differently. + * In such cases, set this to FALSE, which will cause the spellhook + * not to be run from this function. + */ +void DoTransposition(int bAllowHostile, int bRunSpellhook = TRUE); + + +////////////////////////// +// Function Definitions // +////////////////////////// + +// +// Displays transposition VFX. +// +void TransposeVFX(object o1, object o2) +{ + // Apply vfx to the creatures moving. + effect eVis = EffectVisualEffect(VFX_IMP_HEALING_X); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, o1); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, o2); +} + +// +// Transposes the 2 creatures. +// +void Transpose(object o1, object o2) +{ + // Get the locations of the 2 creatures to swap, keeping the facings + // the same. + location loc1 = Location(GetArea(o1), GetPosition(o1), GetFacing(o2)); + location loc2 = Location(GetArea(o2), GetPosition(o2), GetFacing(o1)); + + // Make sure both creatures are capable of being teleported + if(!(GetCanTeleport(o1, loc2, TRUE) && GetCanTeleport(o2, loc1, TRUE))) + return; + + // Swap the creatures. + AssignCommand(o2, JumpToLocation(loc1)); + DelayCommand(0.1, AssignCommand(o2, ClearAllActions(TRUE))); + AssignCommand(o1, JumpToLocation(loc2)); + DelayCommand(0.1, AssignCommand(o1, ClearAllActions(TRUE))); + + DelayCommand(0.1, TransposeVFX(o1, o2)); +} + + +void DoTransposition(int bAllowHostile, int bRunSpellhook = TRUE) +{ + PRCSetSchool(SPELL_SCHOOL_CONJURATION); + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + if(bRunSpellhook) + if(!X2PreSpellCastCode()) return; + + object oCaster = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + if (!GetIsDead(oTarget)) + { + // Get the spell target. If he has the same faction leader we do (i.e. he's in the party) + // or he's a hostile target and hostiles are allowed then we will do the switch. + int bParty = GetFactionLeader(oTarget) == GetFactionLeader(oCaster); + if(bParty || (bAllowHostile && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster))) + { + // Targets outside the party get a will save and SR to resist. + if (bParty || + (!PRCDoResistSpell(oCaster, oTarget) && !PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget, oCaster)))) + { + //Fire cast spell at event for the specified target + PRCSignalSpellEvent(oTarget, !bParty); + + // Move the creatures. + DelayCommand(0.1, Transpose(oCaster, oTarget)); + } + } + } + + PRCSetSchool(); +} diff --git a/src/include/tob_inc_martlore.nss b/src/include/tob_inc_martlore.nss new file mode 100644 index 0000000..0365057 --- /dev/null +++ b/src/include/tob_inc_martlore.nss @@ -0,0 +1,143 @@ +//:://///////////////////////////////////////////// +//:: Tome of Battle include: Martial Lore Skill +//:: tob_inc_martlore +//:://///////////////////////////////////////////// +/** @file + Defines various functions and other stuff that + do something related to the Martial Lore skill + See page #28 of Tome of Battle + + Functions below are called by the initiator as + he makes a maneuver. + + @author Stratovarius + @date Created - 2007.3.19 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Returns the maneuver that the Initiator just used + * @param oInitiator The maneuver initiator + * @param nSpellId maneuver to check + * + * @return nothing, uses SendMessageToPC to give results + */ +void IdentifyManeuver(object oInitiator, int nSpellId); + +/** + * Returns the disciplines that the Initiator has + * @param oInitiator The maneuver initiator + * + * @return nothing, uses SendMessageToPC to give results + */ +void IdentifyDiscipline(object oInitiator); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "tob_inc_tobfunc" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +void _DoMartialLoreCheck(object oInitiator, object oCheck, int nManeuverLevel, int nSpellId) +{ + // NPCs wouldn't benefit from being told the name of the maneuver + if(!GetIsPC(oCheck)) + return; + + // No Bonus normally + int nSwordSage = 0; + + if(TOBGetHasDisciplineFocus(oInitiator, nSpellId)) nSwordSage = 2; + + // Roll the check, DC is reduced by Swordsage bonus instead of bonus on check. Same end result. + if(GetIsSkillSuccessful(oCheck, SKILL_MARTIAL_LORE, 10 + nManeuverLevel - nSwordSage)) + { // get the name of the initiator and maneuver + FloatingTextStringOnCreature(GetName(oInitiator) + " Initiates " + GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellId))), oCheck, FALSE); + } + else // Skill check failed + { + FloatingTextStringOnCreature(GetName(oInitiator) + " Initiates Unknown Maneuver", oCheck, FALSE); + } +} + +void _DoDisciplineCheck(object oInitiator, object oCheck, int nInitiatorLevel) +{ + // NPCs wouldn't benefit from being told the disciplines + if(!GetIsPC(oCheck)) + return; + + if(GetIsSkillSuccessful(oCheck, SKILL_MARTIAL_LORE, 20 + nInitiatorLevel)) + { + // Check the Disciplines, 1 to 9 + string sDiscipline = ""; + int i; + for(i = 1; i < 10; i++) + { + if(TOBGetHasDisciplineFocus(oInitiator, i)) + { + sDiscipline += GetDisciplineName(i); + sDiscipline += ", "; + } + } + // Send the Message + SendMessageToPC(oCheck, GetName(oInitiator) + " Knows Maneuvers From" + sDiscipline); + } + else // Skill check failed + { + SendMessageToPC(oCheck, GetName(oInitiator) + " Discipline Check Failed."); + } +} + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +void IdentifyManeuver(object oInitiator, int nSpellId) +{ + int nManeuverLevel = GetManeuverLevel(oInitiator); + + // The area to check for martial lore users + object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, GetLocation(oInitiator), TRUE, OBJECT_TYPE_CREATURE); + //Cycle through the targets within the spell shape until an invalid object is captured. + while (GetIsObjectValid(oTarget) && oTarget != oInitiator) + { + // If the target has points in the skill + if(GetSkillRank(SKILL_MARTIAL_LORE, oTarget) > 0) _DoMartialLoreCheck(oInitiator, oTarget, nManeuverLevel, nSpellId); + + //Select the next target within the area. + oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, GetLocation(oInitiator), TRUE, OBJECT_TYPE_CREATURE); + } +} + +void IdentifyDiscipline(object oInitiator) +{ + int nInitiatorLevel = GetInitiatorLevel(oInitiator); + + // The area to check for martial lore users + object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, GetLocation(oInitiator), TRUE, OBJECT_TYPE_CREATURE); + //Cycle through the targets within the spell shape until an invalid object is captured. + while(GetIsObjectValid(oTarget)) + { + // If the target has points in the skill + if(GetSkillRank(SKILL_MARTIAL_LORE, oTarget) > 0 + && oTarget != oInitiator) + _DoDisciplineCheck(oInitiator, oTarget, nInitiatorLevel); + + //Select the next target within the area. + oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, GetLocation(oInitiator), TRUE, OBJECT_TYPE_CREATURE); + } +} \ No newline at end of file diff --git a/src/include/tob_inc_move.nss b/src/include/tob_inc_move.nss new file mode 100644 index 0000000..9a90c77 --- /dev/null +++ b/src/include/tob_inc_move.nss @@ -0,0 +1,747 @@ +//:://///////////////////////////////////////////// +//:: Tome of Battle include: Initiating +//:: tob_inc_move +//:://///////////////////////////////////////////// +/** @file + Defines structures and functions for handling + initiating a maneuver + + @author Stratovarius + @date Created - 2007.3.20 + @thanks to Ornedan for his work on Psionics upon which this is based. +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const string TOB_DEBUG_IGNORE_CONSTRAINTS = "TOB_DEBUG_IGNORE_CONSTRAINTS"; + +/** + * The variable in which the maneuver token is stored. If no token exists, + * the variable is set to point at the initiator itself. That way OBJECT_INVALID + * means the variable is unitialised. + */ +const string PRC_MANEVEUR_TOKEN_VAR = "PRC_ManeuverToken"; +const string PRC_MANEVEUR_TOKEN_NAME = "PRC_MOVETOKEN"; +const float PRC_MANEVEUR_HB_DELAY = 0.5f; + + +////////////////////////////////////////////////// +/* Structures */ +////////////////////////////////////////////////// + +/** + * A structure that contains common data used during maneuver. + */ +struct maneuver{ + /* Generic stuff */ + /// The creature Truespeaking the Maneuver + object oInitiator; + /// Whether the maneuver is successful or not + int bCanManeuver; + /// The creature's initiator level in regards to this maneuver + int nInitiatorLevel; + /// The maneuver's spell ID + int nMoveId; +}; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Determines if the maneuver that is currently being attempted to be TrueSpoken + * can in fact be truespoken. Determines metamaneuvers used. + * + * @param oInitiator A creature attempting to truespeak a maneuver at this moment. + * @param oTarget The target of the maneuver, if any. For pure Area of Effect. + * maneuvers, this should be OBJECT_INVALID. Otherwise the main + * target of the maneuver as returned by PRCGetSpellTargetObject(). + * + * @return A maneuver structure that contains the data about whether + * the maneuver was successfully initiated and some other + * commonly used data, like the PC's initiator level for this maneuver. + */ +struct maneuver EvaluateManeuver(object oInitiator, object oTarget = OBJECT_INVALID, int bTOBAbility = FALSE); + +/** + * Causes OBJECT_SELF to use the given maneuver. + * + * @param nManeuver The index of the maneuver to use in spells.2da or an UTTER_* + * @param nClass The index of the class to use the maneuver as in classes.2da or a CLASS_TYPE_* + * @param nLevelOverride An optional override to normal initiator level. + * Default: 0, which means the parameter is ignored. + */ +void UseManeuver(int nManeuver, int nClass, int nLevelOverride = 0); + +/** + * A debugging function. Takes a maneuver structure and + * makes a string describing the contents. + * + * @param move A set of maneuver data + * @return A string describing the contents of move + */ +string DebugManeuver2Str(struct maneuver move); + +/** + * Stores a maneuver structure as a set of local variables. If + * a structure was already stored with the same name on the same object, + * it is overwritten. + * + * @param oObject The object on which to store the structure + * @param sName The name under which to store the structure + * @param move The maneuver structure to store + */ +void SetLocalManeuver(object oObject, string sName, struct maneuver move); + +/** + * Retrieves a previously stored maneuver structure. If no structure is stored + * by the given name, the structure returned is empty. + * + * @param oObject The object from which to retrieve the structure + * @param sName The name under which the structure is stored + * @return The structure built from local variables stored on oObject under sName + */ +struct maneuver GetLocalManeuver(object oObject, string sName); + +/** + * Deletes a stored maneuver structure. + * + * @param oObject The object on which the structure is stored + * @param sName The name under which the structure is stored + */ +void DeleteLocalManeuver(object oObject, string sName); + +/** + * Checks whether the maneuver is a class ability + * + * @param nMoveId The SpellID + * + * @return TRUE if it is a class ability, FALSE otherwise + */ +int GetIsTOBAbility(int nMoveId); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "tob_inc_martlore" +#include "tob_inc_recovery" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +/** Internal function. + * Deletes maneuver-related local variables. + * + * @param oInitiator The creature currently initiating a maneuver + */ +void _CleanManeuverVariables(object oInitiator) +{ + DeleteLocalInt(oInitiator, PRC_INITIATING_CLASS); + DeleteLocalInt(oInitiator, PRC_MANEUVER_LEVEL); + DeleteLocalInt(oInitiator, "PCIsInitiating"); +} + +/** Internal function. + * Determines whether a maneuver token exists. If one does, returns it. + * + * @param oInitiator A creature whose maneuver token to get + * @return The maneuver token if it exists, OBJECT_INVALID otherwise. + */ +object _GetManeuverToken(object oInitiator) +{ + object oMoveToken = GetLocalObject(oInitiator, PRC_MANEVEUR_TOKEN_VAR); + + // If the token object is no longer valid, set the variable to point at initiator + if(!GetIsObjectValid(oMoveToken)) + { + oMoveToken = oInitiator; + SetLocalObject(oInitiator, PRC_MANEVEUR_TOKEN_VAR, oMoveToken); + } + + + // Check if there is no token + if(oMoveToken == oInitiator) + oMoveToken = OBJECT_INVALID; + + return oMoveToken; +} + +/** Internal function. + * Destroys the given maneuver token and sets the creature's maneuver token variable + * to point at itself. + * + * @param oInitiator The initiator whose token to destroy + * @param oMoveToken The token to destroy + */ +void _DestroyManeuverToken(object oInitiator, object oMoveToken) +{ + DestroyObject(oMoveToken); + if(DEBUG) DoDebug("_DestroyManeuverToken(): Destroying Token"); + SetLocalObject(oInitiator, PRC_MANEVEUR_TOKEN_VAR, oInitiator); +} + +/** Internal function. + * Destroys the previous maneuver token, if any, and creates a new one. + * + * @param oInitiator A creature for whom to create a maneuver token + * @return The newly created token + */ +object _CreateManeuverToken(object oInitiator) +{ + object oMoveToken = _GetManeuverToken(oInitiator); + object oStore = GetObjectByTag("PRC_MANIFTOKEN_STORE"); //GetPCSkin(oInitiator); + + // Delete any previous tokens + if(GetIsObjectValid(oMoveToken)) + _DestroyManeuverToken(oInitiator, oMoveToken); + + // Create new token and store a reference to it + oMoveToken = CreateItemOnObject(PRC_MANEVEUR_TOKEN_NAME, oStore); + SetLocalObject(oInitiator, PRC_MANEVEUR_TOKEN_VAR, oMoveToken); + + Assert(GetIsObjectValid(oMoveToken), "GetIsObjectValid(oMoveToken)", "ERROR: Unable to create maneuver token! Store object: " + DebugObject2Str(oStore), "true_inc_Utter", "_CreateManeuverToken()"); + + return oMoveToken; +} + +/** Internal function. + * Determines whether the given initiator is doing something that would + * interrupt initiating a maneuver or affected by an effect that would do + * the same. + * + * @param oInitiator A creature on which _ManeuverHB() is running + * @return TRUE if the creature can continue initiating, + * FALSE otherwise + */ +int _ManeuverStateCheck(object oInitiator) +{ + if(GetIsDead(oInitiator)) return FALSE; + int nAction = GetCurrentAction(oInitiator); + // If the current action is not among those that could either be used to truespeak the maneuver or movement, the maneuver fails + if(!(nAction || ACTION_CASTSPELL || nAction == ACTION_INVALID || + nAction || ACTION_ITEMCASTSPELL || nAction == ACTION_MOVETOPOINT || + nAction || ACTION_USEOBJECT || nAction == ACTION_WAIT + ) ) + return FALSE; + + // Affected by something that prevents one from initiating + effect eTest = GetFirstEffect(oInitiator); + int nEType; + while(GetIsEffectValid(eTest)) + { + nEType = GetEffectType(eTest); + if(nEType == EFFECT_TYPE_CUTSCENE_PARALYZE || + nEType == EFFECT_TYPE_DAZED || + nEType == EFFECT_TYPE_PARALYZE || + nEType == EFFECT_TYPE_PETRIFY || + nEType == EFFECT_TYPE_SLEEP || + nEType == EFFECT_TYPE_STUNNED + ) + return FALSE; + + // Get next effect + eTest = GetNextEffect(oInitiator); + } + + return TRUE; +} + +/** Internal function. + * Runs while the given creature is initiating. If they move, take other actions + * that would cause them to interrupt initiating the maneuver or are affected by an + * effect that would cause such interruption, deletes the maneuver token. + * Stops if such condition occurs or something else destroys the token. + * + * @param oInitiator A creature initiating a maneuver + * @param lInitiator The location where the initiator was when starting the maneuver + * @param oMoveToken The maneuver token that controls the ongoing maneuver + */ +void _ManeuverHB(object oInitiator, location lInitiator, object oMoveToken) +{ + float fDistance; + if(DEBUG) DoDebug("_ManeuverHB() running:\n" + + "oInitiator = " + DebugObject2Str(oInitiator) + "\n" + + "lInitiator = " + DebugLocation2Str(lInitiator) + "\n" + + "oMoveToken = " + DebugObject2Str(oMoveToken) + "\n" + + "Distance between maneuver start location and current location: " + FloatToString(GetDistanceBetweenLocations(lInitiator, GetLocation(oInitiator))) + "\n" + ); + if(GetIsObjectValid(oMoveToken)) + { + // Continuance check + fDistance = GetDistanceBetweenLocations(lInitiator, GetLocation(oInitiator)); + if(fDistance > 2.0f || fDistance < 0.0 || // Allow some variance in the location to account for dodging and random fidgeting + !_ManeuverStateCheck(oInitiator) // Action and effect check + ) + { + if(DEBUG) DoDebug("_ManeuverHB(): initiator moved or lost concentration, destroying token"); + _DestroyManeuverToken(oInitiator, oMoveToken); + + // Inform initiator + FloatingTextStringOnCreature("You have lost concentration on the maneuver you were attempting to initiate!", oInitiator, FALSE); + } + // Schedule next HB + else + DelayCommand(PRC_MANEVEUR_HB_DELAY, _ManeuverHB(oInitiator, lInitiator, oMoveToken)); + } +} + +/** Internal function. + * Checks if the initiator is in range to use the maneuver they are trying to use. + * If not, queues commands to make the initiator to run into range. + * + * @param oInitiator A creature initiating a maneuver + * @param nManeuver SpellID of the maneuver being initiated + * @param lTarget The target location or the location of the target object + */ +void _ManeuverRangeCheck(object oInitiator, int nManeuver, location lTarget) +{ + float fDistance = GetDistanceBetweenLocations(GetLocation(oInitiator), lTarget); + float fRangeLimit; + string sRange = Get2DACache("spells", "Range", nManeuver); + + // Personal range maneuvers are always in range + if(sRange == "P") + return; + // Ranges according to the CCG spells.2da page + else if(sRange == "T") + fRangeLimit = 2.25f; + else if(sRange == "S") + fRangeLimit = 8.0f; + else if(sRange == "M") + fRangeLimit = 20.0f; + else if(sRange == "L") + fRangeLimit = 40.0f; + + // See if we are out of range + if(fDistance > fRangeLimit) + { + // Create waypoint for the movement + object oWP = CreateObject(OBJECT_TYPE_WAYPOINT, "nw_waypoint001", lTarget); + + // Move into range, with a bit of fudge-factor + //ActionMoveToObject(oWP, TRUE, fRangeLimit - 0.15f); + + // CleanUp + ActionDoCommand(DestroyObject(oWP)); + + // CleanUp, paranoia + AssignCommand(oWP, ActionDoCommand(DestroyObject(oWP, 60.0f))); + } +} + +/** Internal function. + * Assigns the fakecast command that is used to display the conjuration VFX when using an maneuver. + * Separated from UseManeuver() due to a bug with ActionFakeCastSpellAtObject(), which requires + * use of ClearAllActions() to work around. + * The problem is that if the target is an item on the ground, if the actor is out of spell + * range when doing the fakecast, they will run on top of the item instead of to the edge of + * the spell range. This only happens if there was a "real action" in the actor's action queue + * immediately prior to the fakecast. + */ +void _AssignUseManeuverFakeCastCommands(object oInitiator, object oTarget, location lTarget, int nSpellID) +{ + // Nuke actions to prevent the fakecast action from bugging + ClearAllActions(); + + if(GetIsObjectValid(oTarget)) + ActionCastFakeSpellAtObject(nSpellID, oTarget, PROJECTILE_PATH_TYPE_DEFAULT); + else + ActionCastFakeSpellAtLocation(nSpellID, lTarget, PROJECTILE_PATH_TYPE_DEFAULT); +} + + +/** Internal function. + * Places the cheatcasting of the real maneuver into the initiator's action queue. + */ +void _UseManeuverAux(object oInitiator, object oMoveToken, int nSpellId, + object oTarget, location lTarget, + int nManeuver, int nClass, int nLevelOverride) +{ + if(DEBUG) DoDebug("_UseManeuverAux() running:\n" + + "oInitiator = " + DebugObject2Str(oInitiator) + "\n" + + "oMoveToken = " + DebugObject2Str(oMoveToken) + "\n" + + "nSpellId = " + IntToString(nSpellId) + "\n" + + "oTarget = " + DebugObject2Str(oTarget) + "\n" + + "lTarget = " + DebugLocation2Str(lTarget) + "\n" + + "nManeuver = " + IntToString(nManeuver) + "\n" + + "nClass = " + IntToString(nClass) + "\n" + + "nLevelOverride = " + IntToString(nLevelOverride) + "\n" + ); + + // Make sure nothing has interrupted this maneuver + if(GetIsObjectValid(oMoveToken)) + { + if(DEBUG) DoDebug("_UseManeuverAux(): Token was valid, queueing actual maneuver"); + // Set the class to maneuver as + SetLocalInt(oInitiator, PRC_INITIATING_CLASS, nClass + 1); + + // Set the maneuver's level + SetLocalInt(oInitiator, PRC_MANEUVER_LEVEL, StringToInt(lookup_spell_innate(nSpellId))); + + if(nLevelOverride != 0) + AssignCommand(oInitiator, ActionDoCommand(SetLocalInt(oInitiator, PRC_CASTERLEVEL_OVERRIDE, nLevelOverride))); + if(GetIsObjectValid(oTarget)) + AssignCommand(oInitiator, ActionCastSpellAtObject(nManeuver, oTarget, METAMAGIC_NONE, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE)); + else + AssignCommand(oInitiator, ActionCastSpellAtLocation(nManeuver, lTarget, METAMAGIC_NONE, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE)); + if(nLevelOverride != 0) + AssignCommand(oInitiator, ActionDoCommand(DeleteLocalInt(oInitiator, PRC_CASTERLEVEL_OVERRIDE))); + + // Begins the Crusader Granting Maneuver process + if (nClass == CLASS_TYPE_CRUSADER) + { + BeginCrusaderGranting(oInitiator); + //if(DEBUG) DoDebug("_UseManeuverAux(): BeginCrusaderGranting"); + } + + SetLocalInt(oInitiator, "PCIsInitiating", TRUE); + // Destroy the maneuver token for this maneuver + _DestroyManeuverToken(oInitiator, oMoveToken); + } +} + +int _GetIsManeuverWeaponAppropriate(object oInitiator) +{ + object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator); + // If the initiator is empty handed, unarmed strikes are good + if (!GetIsObjectValid(oItem)) return TRUE; + // If melee weapon, all good. + if (IPGetIsMeleeWeapon(oItem)) return TRUE; + // Add other legal items in here, like Bloodstorm Blade throwing + + // If one of the other's hasn't tripped, fail here + return FALSE; +} + +void _StanceSpecificChecks(object oInitiator, int nMoveId) +{ + int nStanceToKeep = -1; + if (GetLevelByClass(CLASS_TYPE_WARBLADE, oInitiator) >= 20) + { + nStanceToKeep = GetHasActiveStance(oInitiator); + } + if (GetLevelByClass(CLASS_TYPE_DEEPSTONE_SENTINEL, oInitiator) >= 3 && + GetHasSpellEffect(MOVE_MOUNTAIN_FORTRESS, oInitiator) && + GetDisciplineByManeuver(nMoveId) == DISCIPLINE_STONE_DRAGON) + { + nStanceToKeep = GetHasActiveStance(oInitiator); + } + // Master of Nine can keep two stances active for 2 rounds per class level. + if (GetLevelByClass(CLASS_TYPE_MASTER_OF_NINE, oInitiator) >= 3 && GetLocalInt(oInitiator, "MoNDualStance")) + { + nStanceToKeep = GetHasActiveStance(oInitiator); + float fDelay = 12.0 * GetLevelByClass(CLASS_TYPE_MASTER_OF_NINE, oInitiator); + // Clean up the stance when the timer runs out + DelayCommand(fDelay, ClearStances(oInitiator, -1)); + DeleteLocalInt(oInitiator, "MoNDualStance"); + } + + //if(DEBUG) DoDebug("tob_inc_move: ClearStances"); + if(nStanceToKeep == nMoveId) + nStanceToKeep = -1; + // Can only have one stance active, except for a level 20+ Warblade + ClearStances(oInitiator, nStanceToKeep); + + // Mark current stance as atcive + MarkStanceActive(oInitiator, nMoveId); +} + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +struct maneuver EvaluateManeuver(object oInitiator, object oTarget = OBJECT_INVALID, int bTOBAbility = FALSE) +{ + /* Get some data */ + // initiator-related stuff + int nInitiatorLevel = GetInitiatorLevel(oInitiator); + int nManeuverLevel = GetManeuverLevel(oInitiator); + int nClass = GetInitiatingClass(oInitiator); + + /* Initialise the maneuver structure */ + struct maneuver move; + move.oInitiator = oInitiator; + move.bCanManeuver = TRUE; // Assume successfull maneuver by default + move.nInitiatorLevel = nInitiatorLevel; + move.nMoveId = PRCGetSpellId(); + + //if(DEBUG) DoDebug("move.bCanManeuver: " + IntToString(move.bCanManeuver)); + // Skip doing anything if something has prevented a successful maneuver already by this point + if(/*move.bCanManeuver && */bTOBAbility == FALSE) // set up identification later + { + // If you're this far in, you always succeed, there are very few checks. + // Deletes any active stances, and allows a Warblade 20 to have his two stances active. + /* GC - TMI is being caused from GetIsStance being run on the swordsage. Let's not run it twice.*/ + if (GetIsStance(move.nMoveId)) _StanceSpecificChecks(oInitiator, move.nMoveId); + else ExpendManeuver(move.oInitiator, nClass, move.nMoveId); + // Allows the Master of Nine to Counter Stance. + if(GetManeuverType(move.nMoveId) == MANEUVER_TYPE_COUNTER + && GetLevelByClass(CLASS_TYPE_MASTER_OF_NINE, oInitiator) >= 4) + { + SetLocalInt(oInitiator, "MoNCounterStance", TRUE); + DelayCommand(6.0, DeleteLocalInt(oInitiator, "MoNCounterStance")); + } + //if(DEBUG) DoDebug("tob_inc_move: _StanceSpecificChecks"); + // Expend the Maneuver until recovered + //if (!GetIsStance(move.nMoveId)) ExpendManeuver(move.oInitiator, nClass, move.nMoveId); + //if(DEBUG) DoDebug("tob_inc_move: ExpendManeuver"); + // Do Martial Lore data + IdentifyManeuver(move.oInitiator, move.nMoveId); + //if(DEBUG) DoDebug("tob_inc_move: IdentifyManeuver"); + IdentifyDiscipline(move.oInitiator); + //if(DEBUG) DoDebug("tob_inc_move: IdentifyDiscipline"); + + }//end if + + if(DEBUG) DoDebug("EvaluateManeuver(): Final result:\n" + DebugManeuver2Str(move)); + + // Initiate maneuver-related variable CleanUp + DelayCommand(0.5f, _CleanManeuverVariables(oInitiator)); + + return move; +} + +void UseManeuver(int nManeuver, int nClass, int nLevelOverride = 0) +{ + object oInitiator = OBJECT_SELF; + object oSkin = GetPCSkin(oInitiator); + object oTarget = PRCGetSpellTargetObject(); + object oMoveToken; + location lTarget = PRCGetSpellTargetLocation(); + int nSpellID = PRCGetSpellId(); + + // Divine Surge Greater hardcoding to fix radial issue + // Yes it's deliberate that it's both + if (nSpellID == 15840 || nSpellID == 16051 || nSpellID == 16262) + { + nManeuver = MOVE_DS_GREATER_DIVINE_SURGE; + nSpellID = MOVE_DS_GREATER_DIVINE_SURGE; + } + + // Hardcoding to make Reth Dekala maneuvers work without forcing a massive redo of everything + if (nSpellID == 19331) nManeuver = MOVE_DS_MARTIAL_SPIRIT; + else if (nSpellID == 19332) nManeuver = MOVE_DS_THICKET_BLADES; + else if (nSpellID == 19333) nManeuver = MOVE_DS_DAUNTING_STRIKE; + else if (nSpellID == 19334) nManeuver = MOVE_TC_DEATH_FROM_ABOVE; + else if (nSpellID == 19335) nManeuver = MOVE_IH_DISARMING_STRIKE; + else if (nSpellID == 19336) nManeuver = MOVE_DS_ENTANGLING_BLADE; + else if (nSpellID == 19337) nManeuver = MOVE_IH_WALL_BLADES; + + if (DEBUG) DoDebug(GetName(oInitiator)+" initiating "+IntToString(nManeuver)+" on "+GetName(oTarget)); + + float fDistance = MetersToFeet(GetDistanceBetweenLocations(GetLocation(oInitiator), GetLocation(oTarget))); + float fDelay = FeetToMeters(fDistance)/10; + + // Moved the checks here, so they don't use an action. + + // Don't hit yourself, dumbass + if (Get2DACache("feat", "TARGETSELF", GetClassFeatFromPower(nManeuver, nClass)) != "1" && oInitiator == oTarget && nSpellID != 19331 && nSpellID != 19332 && nSpellID != 19337) + { + //if(DEBUG) DoDebug("tob_inc_move: _GetTargetSelfStrike"); + FloatingTextStringOnCreature("You cannot target yourself with this maneuver.", oInitiator, FALSE); + return; + } + // If the weapon is not appropriate, fail. + if (!_GetIsManeuverWeaponAppropriate(oInitiator)) + { + //if(DEBUG) DoDebug("tob_inc_move: _GetIsManeuverWeaponAppropriate"); + FloatingTextStringOnCreature("You do not have an appropriate weapon to initiate this maneuver.", oInitiator, FALSE); + return; + } + // If the maneuver is not readied, fail. + // Stances don't need to be readied + if (!GetIsManeuverReadied(oInitiator, nClass, nManeuver) && !GetIsStance(nManeuver) && !GetIsTOBAbility(nManeuver)) + { + //if(DEBUG) DoDebug("tob_inc_move: GetIsManeuverReadied"); + FloatingTextStringOnCreature(GetManeuverName(nManeuver) + " is not readied.", oInitiator, FALSE); + return; + } + // If the maneuver is expended, fail. + if (GetIsManeuverExpended(oInitiator, nClass, nManeuver) && !GetIsTOBAbility(nManeuver)) + { + //if(DEBUG) DoDebug("tob_inc_move: GetIsManeuverExpended"); + FloatingTextStringOnCreature(GetManeuverName(nManeuver) + " is already expended.", oInitiator, FALSE); + return; + } + // If the PC is in a Warblade recovery round, fail + if (GetIsWarbladeRecoveryRound(oInitiator)) + { + //if(DEBUG) DoDebug("tob_inc_move: GetIsWarbladeRecoveryRound"); + FloatingTextStringOnCreature(GetName(oInitiator) + " is recovering Warblade maneuvers.", oInitiator, FALSE); + return; + } + // Is the maneuver granted, and is the class a Crusader + if (nClass == CLASS_TYPE_CRUSADER && !GetIsManeuverGranted(oInitiator, nManeuver) && !GetIsStance(nManeuver) && !GetIsTOBAbility(nManeuver)) + { + //if(DEBUG) DoDebug("tob_inc_move: GetIsManeuverGranted"); + FloatingTextStringOnCreature(GetManeuverName(nManeuver) + " is not a granted maneuver.", oInitiator, FALSE); + return; + } + + // These maneuvers don't have a delay otherwise, because the distance is always 0 + if (Get2DACache("feat", "TARGETSELF", GetClassFeatFromPower(nManeuver, nClass)) == "1" && GetManeuverType(nManeuver) == MANEUVER_TYPE_STRIKE) + fDelay = 3.0; + + // Dual Boost check + if(GetManeuverType(nManeuver) == MANEUVER_TYPE_BOOST // If the maneuver is a boost + && GetLocalInt(oInitiator, "SSDualBoost")) // And the initiator can Dual boost. + { + // Set the maneuver time to 0 to skip VFX + DeleteLocalInt(oInitiator, "SSDualBoost"); + fDelay = 0.0; + } + // Stance of Alacrity check + // Only works on Counters, not Boosts + else if(GetManeuverType(nManeuver) == MANEUVER_TYPE_COUNTER // If the maneuver is counter + && GetHasSpellEffect(MOVE_DM_STANCE_ALACRITY, oInitiator)) // And the initiator has the stance + { + // Set the maneuver time to 0 to skip VFX + fDelay = 0.0; + } + else if((Get2DACache("feat", "Constant", GetClassFeatFromPower(nManeuver, nClass)) == "SWIFT_ACTION" // Normally swift action maneuvers check + || GetManeuverType(nManeuver) == MANEUVER_TYPE_BOOST + || GetManeuverType(nManeuver) == MANEUVER_TYPE_COUNTER + || GetManeuverType(nManeuver) == MANEUVER_TYPE_STANCE) // The maneuver is swift action to use + && GetLocalInt(oInitiator, "RKVDivineImpetus") // And the initiator can take a swift action now + ) + { + fDelay = 0.0; + DeleteLocalInt(oInitiator, "RKVDivineImpetus"); + } + else if(GetManeuverType(nManeuver) == MANEUVER_TYPE_STANCE && // The maneuver is a stance + GetLocalInt(oInitiator, "MoNCounterStance") // Has used a counter already this round + ) + { + fDelay = 0.0; + DeleteLocalInt(oInitiator, "MoNCounterStance"); + } + else if((Get2DACache("feat", "Constant", GetClassFeatFromPower(nManeuver, nClass)) == "SWIFT_ACTION" // Normally swift action maneuvers check + || GetManeuverType(nManeuver) == MANEUVER_TYPE_BOOST + || GetManeuverType(nManeuver) == MANEUVER_TYPE_COUNTER + || GetManeuverType(nManeuver) == MANEUVER_TYPE_STANCE)) // The maneuver is swift action to use + { + if (TakeSwiftAction(oInitiator)) // And the initiator can take a swift action now + fDelay = 0.0; + else + return; + } + + if (nManeuver == MOVE_DW_BURNING_BRAND) + fDelay = FeetToMeters(fDistance*2)/10; // Because of how it has to be implemented. + + if(DEBUG) DoDebug("UseManeuver(): initiator is " + DebugObject2Str(oInitiator) + "\n" + + "nManeuver = " + IntToString(nManeuver) + "\n" + + "nClass = " + IntToString(nClass) + "\n" + + "nLevelOverride = " + IntToString(nLevelOverride) + "\n" + + "maneuver duration = " + FloatToString(fDelay) + "ms \n" + //+ "Token exists = " + DebugBool2String(GetIsObjectValid(oMoveToken)) + ); + + // Create the maneuver token. Deletes any old tokens and cancels corresponding maneuvers as a side effect + oMoveToken = _CreateManeuverToken(oInitiator); + + /// @todo Hook to the initiator's OnDamaged event for the concentration checks to avoid losing the maneuver + + // Nuke action queue to prevent cheating with creative maneuver stacking. + // Probably not necessary anymore - Ornedan + if(DEBUG) SendMessageToPC(oInitiator, "Clearing all actions in preparation for second stage of the maneuver."); + ClearAllActions(); + + // If out of range, move to range + _ManeuverRangeCheck(oInitiator, nManeuver, GetIsObjectValid(oTarget) ? GetLocation(oTarget) : lTarget); + + // Start the maneuver monitor HB + DelayCommand(fDelay, ActionDoCommand(_ManeuverHB(oInitiator, GetLocation(oInitiator), oMoveToken))); + if(DEBUG) DoDebug("Starting _ManeuverHB"); + + // Assuming the spell isn't used as a swift action, fakecast for visuals + if(fDelay > 0.0) + { + // Hack. Workaround of a bug with the fakecast actions. See function comment for details + ActionDoCommand(_AssignUseManeuverFakeCastCommands(oInitiator, oTarget, lTarget, nSpellID)); + if(DEBUG) DoDebug("Starting _AssignUseManeuverFakeCastCommands"); + } + + if(DEBUG) DoDebug("Starting _UseManeuverAux"); + // Action queue the function that will cheatcast the actual maneuver + DelayCommand(fDelay, AssignCommand(oInitiator, ActionDoCommand(_UseManeuverAux(oInitiator, oMoveToken, nSpellID, oTarget, lTarget, nManeuver, nClass, nLevelOverride)))); +} + +string DebugManeuver2Str(struct maneuver move) +{ + string sRet; + + sRet += "oInitiator = " + DebugObject2Str(move.oInitiator) + "\n"; + sRet += "bCanManeuver = " + DebugBool2String(move.bCanManeuver) + "\n"; + sRet += "nInitiatorLevel = " + IntToString(move.nInitiatorLevel); + + return sRet; +} + +void SetLocalManeuver(object oObject, string sName, struct maneuver move) +{ + //SetLocal (oObject, sName + "_", ); + SetLocalObject(oObject, sName + "_oInitiator", move.oInitiator); + + SetLocalInt(oObject, sName + "_bCanManeuver", move.bCanManeuver); + SetLocalInt(oObject, sName + "_nInitiatorLevel", move.nInitiatorLevel); + SetLocalInt(oObject, sName + "_nSpellID", move.nMoveId); +} + +struct maneuver GetLocalManeuver(object oObject, string sName) +{ + struct maneuver move; + move.oInitiator = GetLocalObject(oObject, sName + "_oInitiator"); + + move.bCanManeuver = GetLocalInt(oObject, sName + "_bCanManeuver"); + move.nInitiatorLevel = GetLocalInt(oObject, sName + "_nInitiatorLevel"); + move.nMoveId = GetLocalInt(oObject, sName + "_nSpellID"); + + return move; +} + +void DeleteLocalManeuver(object oObject, string sName) +{ + DeleteLocalObject(oObject, sName + "_oInitiator"); + + DeleteLocalInt(oObject, sName + "_bCanManeuver"); + DeleteLocalInt(oObject, sName + "_nInitiatorLevel"); + DeleteLocalInt(oObject, sName + "_nSpellID"); +} + +void ManeuverDebugIgnoreConstraints(object oInitiator) +{ + SetLocalInt(oInitiator, TOB_DEBUG_IGNORE_CONSTRAINTS, TRUE); + DelayCommand(0.0f, DeleteLocalInt(oInitiator, TOB_DEBUG_IGNORE_CONSTRAINTS)); +} + +int GetIsTOBAbility(int nMoveId) +{ + // Shadow Sun Ninja and Eternal Blade class abilities + if(nMoveId == 19320 || + nMoveId == 19321 || + nMoveId == 19322 || + nMoveId == 19323 || + nMoveId == 19324 || + nMoveId == 19325 || + nMoveId == 19326 || + nMoveId == 19316 || + nMoveId == 19315 || + nMoveId == 19314 || + nMoveId == 19317 || + nMoveId == 19318 || + nMoveId == 19319) + return TRUE; + + return FALSE; +} + +// Test main +//void main(){} diff --git a/src/include/tob_inc_moveknwn.nss b/src/include/tob_inc_moveknwn.nss new file mode 100644 index 0000000..e89f36c --- /dev/null +++ b/src/include/tob_inc_moveknwn.nss @@ -0,0 +1,491 @@ +//:://///////////////////////////////////////////// +//:: Tome of Battle include: Maneuvers Known +//:: tob_inc_moveknwn +//:://///////////////////////////////////////////// +/** @file + Defines functions for adding & removing + Maneuvers known. + + Data stored: + + - For each Discipline list + -- Total number of Maneuvers known + -- A modifier value to maximum Maneuvers known on this list to account for feats and classes that add Maneuvers + -- An array related to Maneuvers the knowledge of which is not dependent on character level + --- Each array entry specifies the spells.2da row of the known Maneuvers's class-specific entry + -- For each character level on which Maneuvers have been gained from this list + --- An array of Maneuvers gained on this level + ---- Each array entry specifies the spells.2da row of the known Maneuvers's class-specific entry + + @author Stratovarius + @date Created - 2007.03.19 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +// Included here to provide the values for the constants below +#include "prc_inc_spells" + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const int MANEUVER_LIST_CRUSADER = CLASS_TYPE_CRUSADER; +const int MANEUVER_LIST_SWORDSAGE = CLASS_TYPE_SWORDSAGE; +const int MANEUVER_LIST_WARBLADE = CLASS_TYPE_WARBLADE; +const int MANEUVER_LIST_RETH_DEKALA = RACIAL_TYPE_RETH_DEKALA; // 67, so well away from the classes + +/// Special Maneuver list. Maneuvers gained via Martial Study or other sources. +const int MANEUVER_LIST_MISC = CLASS_TYPE_INVALID;//-1; + +const string _MANEUVER_LIST_NAME_BASE = "PRC_ManeuverList_"; +const string _MANEUVER_LIST_DISCIPLINE = "PRC_DisciplineTotal_"; +const string _MANEUVER_LIST_TOTAL_KNOWN = "_TotalKnown"; +const string _MANEUVER_LIST_MODIFIER = "_KnownModifier"; +const string _MANEUVER_LIST_MISC_ARRAY = "_ManeuversKnownMiscArray"; +const string _MANEUVER_LIST_LEVEL_ARRAY = "_ManeuversKnownLevelArray_"; +const string _MANEUVER_LIST_GENERAL_ARRAY = "_ManeuversKnownGeneralArray"; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Gives the creature the control feats for the given Maneuver and marks the Maneuver + * in a Maneuvers known array. + * If the Maneuver's data is already stored in one of the Maneuvers known arrays for + * the list or adding the Maneuver's data to the array fails, the function aborts. + * + * @param oCreature The creature to gain the Maneuver + * @param nList The list the Maneuver comes from. One of MANEUVER_LIST_* + * @param n2daRow The 2da row in the lists's 2da file that specifies the Maneuver. + * @param bLevelDependent If this is TRUE, the Maneuver is tied to a certain level and can + * be lost via level loss. If FALSE, the Maneuver is not dependent + * of a level and cannot be lost via level loss. + * @param nLevelToTieTo If bLevelDependent is TRUE, this specifies the level the Maneuver + * is gained on. Otherwise, it's ignored. + * The default value (-1) means that the current level of oCreature + * will be used. + * @param nDiscipline Type of the Maneuver: Evolving Mind, Crafted Tool, or Perfected Map + * + * @return TRUE if the Maneuver was successfully stored and control feats added. + * FALSE otherwise. + */ +int AddManeuverKnown(object oCreature, int nList, int n2daRow, int nType, int bLevelDependent = FALSE, int nLevelToTieTo = -1); + +/** + * Removes all Maneuvers gained from each list on the given level. + * + * @param oCreature The creature whose Maneuvers to remove + * @param nLevel The level to clear + */ +void RemoveManeuversKnownOnLevel(object oCreature, int nLevel); + +/** + * Gets the value of the Maneuvers known modifier, which is a value that is added + * to the 2da-specified maximum Maneuvers known to determine the actual maximum. + * + * @param oCreature The creature whose modifier to get + * @param nList The list the maximum Maneuvers known from which the modifier + * modifies. One of MANEUVER_LIST_* + * @param nType MANEUVER_TYPE_ + */ +int GetKnownManeuversModifier(object oCreature, int nList, int nType); + +/** + * Sets the value of the Maneuvers known modifier, which is a value that is added + * to the 2da-specified maximum Maneuvers known to determine the actual maximum. + * + * @param oCreature The creature whose modifier to set + * @param nList The list the maximum Maneuvers known from which the modifier + * modifies. One of MANEUVER_LIST_* + * @param nType MANEUVER_TYPE_ + */ +void SetKnownManeuversModifier(object oCreature, int nList, int nNewValue, int nType); + +/** + * Gets the number of Maneuvers a character character possesses from a + * specific list and lexicon + * + * @param oCreature The creature whose Maneuvers to check + * @param nList The list to check. One of MANEUVER_LIST_* + * @param nType MANEUVER_TYPE_ + * @return The number of Maneuvers known oCreature has from nList + */ +int GetManeuverCount(object oCreature, int nList, int nType); + +/** + * Gets the number of Maneuvers a character character possesses from a + * specific discipline + * + * @param oCreature The creature whose Maneuvers to check + * @param nDiscipline The discipline to check. One of DISCIPLINE_* + * @param nType MANEUVER_TYPE_ + * @return The number of Maneuvers known oCreature has from nDiscipline + */ +int GetManeuverCountByDiscipline(object oCreature, int nDiscipline, int nType); + +/** + * Gets the maximum number of Maneuvers a character may posses from a given list + * at this time. Calculated based on class levels, feats and a misceallenous + * modifier. There are three Types of Maneuvers, so it checks each seperately. + * + * @param oCreature Character to determine maximum Maneuvers for + * @param nList MANEUVER_LIST_* of the list to determine maximum Maneuvers for + * @param nType MANEUVER_TYPE_ + * @return Maximum number of Maneuvers that oCreature may know from the given list. + */ +int GetMaxManeuverCount(object oCreature, int nList, int nType); + +/** + * Determines whether a character has a given Maneuver, gained via some Maneuver list. + * + * @param nManeuver MANEUVER_* of the Maneuver to test + * @param nClass Class to check for + * @param oCreature Character to test for the possession of the Maneuver + * @return TRUE if the character has the Maneuver, FALSE otherwise + */ +int GetHasManeuver(int nManeuver, int nClass, object oCreature = OBJECT_SELF); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +//#include "tob_inc_tobfunc" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +void _ManeuverRecurseRemoveArray(object oCreature, string sArrayName, string sUtterFile, int nArraySize, int nCurIndex) +{ + if(DEBUG) DoDebug("_ManeuverRecurseRemoveArray():\n" + + "oCreature = " + DebugObject2Str(oCreature) + "\n" + + "sArrayName = '" + sArrayName + "'\n" + + "sUtterFile = '" + sUtterFile + "'\n" + + "nArraySize = " + IntToString(nArraySize) + "\n" + + "nCurIndex = " + IntToString(nCurIndex) + "\n" + ); + + // Determine whether we've already parsed the whole array or not + if(nCurIndex >= nArraySize) + { + if(DEBUG) DoDebug("_ManeuverRecurseRemoveArray(): Running itemproperty removal loop."); + // Loop over itemproperties on the skin and remove each match + object oSkin = GetPCSkin(oCreature); + itemproperty ipTest = GetFirstItemProperty(oSkin); + while(GetIsItemPropertyValid(ipTest)) + { + // Check if the itemproperty is a bonus feat that has been marked for removal + if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_BONUS_FEAT && + GetLocalInt(oCreature, "PRC_MoveFeatRemovalMarker_" + IntToString(GetItemPropertySubType(ipTest))) + ) + { + if(DEBUG) DoDebug("_ManeuverRecurseRemoveArray(): Removing bonus feat itemproperty:\n" + DebugIProp2Str(ipTest)); + // If so, remove it + RemoveItemProperty(oSkin, ipTest); + DeleteLocalInt(oCreature, "PRC_MoveFeatRemovalMarker_" + IntToString(GetItemPropertySubType(ipTest))); + } + + ipTest = GetNextItemProperty(oSkin); + } + } + // Still parsing the array + else + { + int nMoveID = GetPowerfileIndexFromSpellID(persistant_array_get_int(oCreature, sArrayName, nCurIndex)); + // Set the marker + string sName = "PRC_MoveFeatRemovalMarker_" + Get2DACache(sUtterFile, "IPFeatID", nMoveID); + if(DEBUG) DoDebug("_ManeuverRecurseRemoveArray(): Recursing through array, marker set:\n" + sName); + SetLocalInt(oCreature, sName, TRUE); + + string sType = Get2DACache(sUtterFile, "Type", nMoveID); + if(sType != "1") sType = "2";//if not MANEUVER_TYPE_STANCE use MANEUVER_TYPE_MANEUVER + string sDisciplineArray = _MANEUVER_LIST_DISCIPLINE + sType + "_" + Get2DACache(sUtterFile, "Discipline", nMoveID); + SetPersistantLocalInt(oCreature, sDisciplineArray, + GetPersistantLocalInt(oCreature, sDisciplineArray) - 1); + + // Recurse to next array index + _ManeuverRecurseRemoveArray(oCreature, sArrayName, sUtterFile, nArraySize, nCurIndex + 1); + } +} + +void _RemoveManeuverArray(object oCreature, int nList, int nLevel, int nType) +{ + if(DEBUG) DoDebug("_RemoveManeuverArray():\n" + + "oCreature = " + DebugObject2Str(oCreature) + "\n" + + "nList = " + IntToString(nList) + "\n" + ); + + string sBase = _MANEUVER_LIST_NAME_BASE + IntToString(nList) + IntToString(nType); + string sArray = sBase + _MANEUVER_LIST_LEVEL_ARRAY + IntToString(nLevel); + int nSize = persistant_array_get_size(oCreature, sArray); + + // Reduce the total by the array size + SetPersistantLocalInt(oCreature, sBase + _MANEUVER_LIST_TOTAL_KNOWN, + GetPersistantLocalInt(oCreature, sBase + _MANEUVER_LIST_TOTAL_KNOWN) - nSize + ); + + // Remove each Maneuver in the array + _ManeuverRecurseRemoveArray(oCreature, sArray, GetAMSDefinitionFileName(nList), nSize, 0); + + // Remove the array itself + persistant_array_delete(oCreature, sArray); +} + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int AddManeuverKnown(object oCreature, int nList, int n2daRow, int nType, int bLevelDependent = FALSE, int nLevelToTieTo = -1) +{ + string sBase = _MANEUVER_LIST_NAME_BASE + IntToString(nList) + IntToString(nType); + string sArray = sBase; + string sPowerFile = GetAMSDefinitionFileName(/*PowerListToClassType(*/nList/*)*/); + string sTestArray; + int i, j, nSize, bReturn; + + // Get the spells.2da row corresponding to the cls_psipw_*.2da row + int nSpells2daRow = StringToInt(Get2DACache(sPowerFile, "SpellID", n2daRow)); + + // Determine the array name. + if(bLevelDependent) + { + // If no level is specified, default to the creature's current level + if(nLevelToTieTo == -1) + nLevelToTieTo = GetHitDice(oCreature); + + sArray += _MANEUVER_LIST_LEVEL_ARRAY + IntToString(nLevelToTieTo); + } + else + { + sArray += _MANEUVER_LIST_GENERAL_ARRAY; + } + + // Make sure the power isn't already in an array. If it is, abort and return FALSE + // Loop over each level array and check that it isn't there. + for(i = 1; i <= GetHitDice(oCreature); i++) + { + sTestArray = sBase + _MANEUVER_LIST_LEVEL_ARRAY + IntToString(i); + if(persistant_array_exists(oCreature, sTestArray)) + { + nSize = persistant_array_get_size(oCreature, sTestArray); + for(j = 0; j < nSize; j++) + if(persistant_array_get_int(oCreature, sArray, j) == nSpells2daRow) + return FALSE; + } + } + // Check the non-level-dependent array + sTestArray = sBase + _MANEUVER_LIST_GENERAL_ARRAY; + if(persistant_array_exists(oCreature, sTestArray)) + { + nSize = persistant_array_get_size(oCreature, sTestArray); + for(j = 0; j < nSize; j++) + if(persistant_array_get_int(oCreature, sArray, j) == nSpells2daRow) + return FALSE; + } + + // All checks are made, now start adding the new power + // Create the array if it doesn't exist yet + if(!persistant_array_exists(oCreature, sArray)) + persistant_array_create(oCreature, sArray); + + // Store the power in the array + if(persistant_array_set_int(oCreature, sArray, persistant_array_get_size(oCreature, sArray), nSpells2daRow) != SDL_SUCCESS) + { + if(DEBUG) DoDebug("tob_inc_moveknwn: AddPowerKnown(): ERROR: Unable to add power to known array\n" + + "oCreature = " + DebugObject2Str(oCreature) + "\n" + + "nList = " + IntToString(nList) + "\n" + + "n2daRow = " + IntToString(n2daRow) + "\n" + + "bLevelDependent = " + DebugBool2String(bLevelDependent) + "\n" + + "nLevelToTieTo = " + IntToString(nLevelToTieTo) + "\n" + + "nSpells2daRow = " + IntToString(nSpells2daRow) + "\n" + ); + return FALSE; + } + + // Increment Maneuvers known total + SetPersistantLocalInt(oCreature, sBase + _MANEUVER_LIST_TOTAL_KNOWN, + GetPersistantLocalInt(oCreature, sBase + _MANEUVER_LIST_TOTAL_KNOWN) + 1 + ); + + // Increment Maneuvers known by discipline + string sDisciplineArray = _MANEUVER_LIST_DISCIPLINE + IntToString(nType) + "_" + Get2DACache(sPowerFile, "Discipline", n2daRow); + SetPersistantLocalInt(oCreature, sDisciplineArray, + GetPersistantLocalInt(oCreature, sDisciplineArray) + 1); + + // Give the power's control feats + object oSkin = GetPCSkin(oCreature); + string sPowerFeatIP = Get2DACache(sPowerFile, "IPFeatID", n2daRow); + itemproperty ipFeat = PRCItemPropertyBonusFeat(StringToInt(sPowerFeatIP)); + IPSafeAddItemProperty(oSkin, ipFeat, 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + // Second power feat, if any + /*sPowerFeatIP = Get2DACache(sPowerFile, "IPFeatID2", n2daRow); + if(sPowerFeatIP != "") + { + ipFeat = PRCItemPropertyBonusFeat(StringToInt(sPowerFeatIP)); + IPSafeAddItemProperty(oSkin, ipFeat, 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + }*/ + + return TRUE; +} + +void RemoveManeuversKnownOnLevel(object oCreature, int nLevel) +{ + if(DEBUG) DoDebug("tob_inc_moveknwn: RemoveManeuverKnownOnLevel():\n" + + "oCreature = " + DebugObject2Str(oCreature) + "\n" + + "nLevel = " + IntToString(nLevel) + "\n" + ); + + string sPostFix = _MANEUVER_LIST_LEVEL_ARRAY + IntToString(nLevel); + // For each Maneuver list and type, determine if an array exists for this level. + // There's only 2 types + int nType; + for(nType = 1; nType <= 2; nType++) + { + if(persistant_array_exists(oCreature, _MANEUVER_LIST_NAME_BASE + IntToString(MANEUVER_LIST_CRUSADER) + sPostFix)) + // If one does exist, clear it + _RemoveManeuverArray(oCreature, MANEUVER_LIST_CRUSADER, nLevel, nType); + + if(persistant_array_exists(oCreature, _MANEUVER_LIST_NAME_BASE + IntToString(MANEUVER_LIST_SWORDSAGE) + sPostFix)) + _RemoveManeuverArray(oCreature, MANEUVER_LIST_SWORDSAGE, nLevel, nType); + + if(persistant_array_exists(oCreature, _MANEUVER_LIST_NAME_BASE + IntToString(MANEUVER_LIST_WARBLADE) + sPostFix)) + _RemoveManeuverArray(oCreature, MANEUVER_LIST_WARBLADE, nLevel, nType); + + if(persistant_array_exists(oCreature, _MANEUVER_LIST_NAME_BASE + IntToString(MANEUVER_LIST_MISC) + sPostFix)) + _RemoveManeuverArray(oCreature, MANEUVER_LIST_MISC, nLevel, nType); + } +} + +int GetKnownManeuversModifier(object oCreature, int nList, int nType) +{ + return GetPersistantLocalInt(oCreature, _MANEUVER_LIST_NAME_BASE + IntToString(nList) + IntToString(nType) + _MANEUVER_LIST_MODIFIER); +} + +void SetKnownManeuversModifier(object oCreature, int nList, int nNewValue, int nType) +{ + SetPersistantLocalInt(oCreature, _MANEUVER_LIST_NAME_BASE + IntToString(nList) + IntToString(nType) + _MANEUVER_LIST_MODIFIER, nNewValue); +} + +int GetManeuverCount(object oCreature, int nList, int nType) +{ + return GetPersistantLocalInt(oCreature, _MANEUVER_LIST_NAME_BASE + IntToString(nList) + IntToString(nType) + _MANEUVER_LIST_TOTAL_KNOWN); +} + +int GetManeuverCountByDiscipline(object oCreature, int nDiscipline, int nType) +{ + int nReturn = GetPersistantLocalInt(oCreature, _MANEUVER_LIST_DISCIPLINE + IntToString(nType) + "_" + IntToString(nDiscipline)); + + // Doesn't use the normal method, so is added here for the purpose of prereqs + if (GetRacialType(oCreature) == RACIAL_TYPE_RETH_DEKALA && nDiscipline == DISCIPLINE_DEVOTED_SPIRIT && nType == MANEUVER_TYPE_MANEUVER) nReturn += 2; + else if (GetRacialType(oCreature) == RACIAL_TYPE_RETH_DEKALA && nDiscipline == DISCIPLINE_DEVOTED_SPIRIT && nType == MANEUVER_TYPE_STANCE) nReturn += 2; + else if (GetRacialType(oCreature) == RACIAL_TYPE_RETH_DEKALA && nDiscipline == DISCIPLINE_IRON_HEART) nReturn += 2; + else if (GetRacialType(oCreature) == RACIAL_TYPE_RETH_DEKALA && nDiscipline == DISCIPLINE_TIGER_CLAW) nReturn += 1; + return nReturn; +} + +int GetMaxManeuverCount(object oCreature, int nList, int nType) +{ + if(DEBUG) DoDebug("tob_moveconv: MaxManeuver nType: " + IntToString(nType)); + int nMaxManeuvers = 0; + + if(nList == MANEUVER_LIST_MISC) + { + if(DEBUG) DoDebug("GetMaxManeuverCount(): ERROR: Using unfinished power list!"); + } + else + { + int nLevel = GetLevelByClass(nList, oCreature); + string sFile = GetAMSKnownFileName(nList); + if(nType == MANEUVER_TYPE_MANEUVER) + nMaxManeuvers = StringToInt(Get2DACache(sFile, "ManeuverKnown", nLevel - 1)); + else if(nType == MANEUVER_TYPE_STANCE) + nMaxManeuvers = StringToInt(Get2DACache(sFile, "StancesKnown", nLevel - 1)); + + // Calculate feats + + // Add in the custom modifier + nMaxManeuvers += GetKnownManeuversModifier(oCreature, nList, nType); + if(DEBUG) DoDebug("GetMaxManeuverCount(): " + IntToString(nList) + " Maneuvers: " + IntToString(nMaxManeuvers)); + } + + return nMaxManeuvers; +} + +int GetHasManeuver(int nManeuver, int nClass, object oCreature = OBJECT_SELF) +{ + if(GetLevelByClass(nClass, oCreature) && GetHasFeat(GetClassFeatFromPower(nManeuver, nClass), oCreature)) + return TRUE; + + return FALSE; +} + +string DebugListKnownManeuvers(object oCreature) +{ + string sReturn = "Maneuvers known by " + DebugObject2Str(oCreature) + ":\n"; + int i, j, k, numPowerLists = 6; + int nPowerList, nSize; + string sTemp, sArray, sArrayBase, sPowerFile; + // Loop over all power lists + for(i = 1; i <= numPowerLists; i++) + { + // Some padding + sReturn += " "; + // Get the power list for this loop + switch(i) + { + case 1: nPowerList = MANEUVER_LIST_CRUSADER; sReturn += "Crusader"; break; + case 2: nPowerList = MANEUVER_LIST_SWORDSAGE; sReturn += "Swordsage"; break; + case 3: nPowerList = MANEUVER_LIST_WARBLADE; sReturn += "Warblade"; break; + case 4: nPowerList = MANEUVER_LIST_RETH_DEKALA; sReturn += "Reth Dekala"; break; + + // This should always be last + case 6: nPowerList = MANEUVER_LIST_MISC; sReturn += "Misceallenous"; break; + } + sReturn += " Maneuvers known:\n"; + + // Determine if the character has any Maneuvers from this list + sPowerFile = GetAMSDefinitionFileName(nPowerList); + sArrayBase = _MANEUVER_LIST_NAME_BASE + IntToString(nPowerList); + + // Loop over levels + for(j = 1; j <= GetHitDice(oCreature); j++) + { + sArray = sArrayBase + _MANEUVER_LIST_LEVEL_ARRAY + IntToString(j); + if(persistant_array_exists(oCreature, sArray)) + { + sReturn += " Gained on level " + IntToString(j) + ":\n"; + nSize = persistant_array_get_size(oCreature, sArray); + for(k = 0; k < nSize; k++) + sReturn += " " + GetStringByStrRef(StringToInt(Get2DACache(sPowerFile, "Name", + GetPowerfileIndexFromSpellID(persistant_array_get_int(oCreature, sArray, k)) + ) + ) + ) + + "\n"; + } + } + + // Non-leveldependent Maneuvers + sArray = sArrayBase + _MANEUVER_LIST_GENERAL_ARRAY; + if(persistant_array_exists(oCreature, sArray)) + { + sReturn += " Non-leveldependent:\n"; + nSize = persistant_array_get_size(oCreature, sArray); + for(k = 0; k < nSize; k++) + sReturn += " " + GetStringByStrRef(StringToInt(Get2DACache(sPowerFile, "Name", + GetPowerfileIndexFromSpellID(persistant_array_get_int(oCreature, sArray, k)) + ) + ) + ) + + "\n"; + } + } + + return sReturn; +} +// Test main +//void main(){} \ No newline at end of file diff --git a/src/include/tob_inc_recovery.nss b/src/include/tob_inc_recovery.nss new file mode 100644 index 0000000..333fe29 --- /dev/null +++ b/src/include/tob_inc_recovery.nss @@ -0,0 +1,650 @@ +//:://///////////////////////////////////////////// +//:: Tome of Battle include: Maneuver Recovery +//:: tob_inc_martlore +//:://///////////////////////////////////////////// +/** @file + Defines various functions and other stuff that + do something related to recovery and readying maneuvers + See page #28 of Tome of Battle + + Functions below are called by the initiator as + he makes a maneuver, or when recovering or readying + + @author Stratovarius + @date Created - 2007.3.25 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +//:: Test Void +//void main (){} + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const int MANEUVER_READIED = 1; +const int MANEUVER_RECOVERED = 2; +const int MANEUVER_GRANTED = 3; +const int MANEVUER_WITHHELD = 4; + +const string _MANEUVER_LIST_RDYMODIFIER = "_ReadyModifier"; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Gets the number of Maneuvers a character has readied + * + * @param oPC The creature whose Maneuvers to check + * @param nList The list to check. One of MANEUVER_LIST_* + * @return The number of Maneuvers readied + */ +int GetReadiedCount(object oPC, int nList); + +/** + * Gets the maximum number of Maneuvers a character may ready. + * + * @param oPC Character to determine maximum Maneuvers readied + * @param nList MANEUVER_LIST_* of the list to determine maximum Maneuvers for + * @return Maximum number of Maneuvers that oPC may ready + */ +int GetMaxReadiedCount(object oPC, int nList); + +/** + * Gets the value of the Maneuvers readied modifier, which is a value that is added + * to the 2da-specified maximum Maneuvers readied to determine the actual maximum. + * + * @param oCreature The creature whose modifier to get + * @param nList The list the maximum Maneuvers readied from which the modifier + * modifies. One of MANEUVER_LIST_* + */ +int GetReadiedManeuversModifier(object oCreature, int nList); + +/** + * Sets the value of the Maneuvers readied modifier, which is a value that is added + * to the 2da-specified maximum Maneuvers readied to determine the actual maximum. + * + * @param oCreature The creature whose modifier to set + * @param nList The list the maximum Maneuvers readied from which the modifier + * modifies. One of MANEUVER_LIST_* + */ +void SetReadiedManeuversModifier(object oCreature, int nList, int nNewValue); + +/** + * Readies the chosen Maneuver. Also checks to see if there are any slots left + * + * @param oPC Character readying maneuver + * @param nList MANEUVER_LIST_* of the list to ready + * @param nMoveId Maneuver to ready + */ +void ReadyManeuver(object oPC, int nList, int nMoveId); + +/** + * Returns whether maneuver is readied or not + * + * @param oPC Character to check + * @param nList MANEUVER_LIST_* + * @param nMoveId Maneuver to check + * @return TRUE or FALSE + */ +int GetIsManeuverReadied(object oPC, int nList, int nMoveId); + +/** + * Returns whether maneuver is expended or not + * + * @param oPC Character to check + * @param nList MANEUVER_LIST_* + * @param nMoveId Maneuver to check + * @return TRUE or FALSE + */ +int GetIsManeuverExpended(object oPC, int nList, int nMoveId); + +/** + * Expends the chosen Maneuver. + * + * @param oPC Character to check + * @param nList MANEUVER_LIST_* + * @param nMoveId Maneuver to expend + */ +void ExpendManeuver(object oPC, int nList, int nMoveId); + +/** + * Clears all local ints marking maneuvers as expended + * + * @param oPC Character to clear + * @param nList MANEUVER_LIST_* + */ +void RecoverExpendedManeuvers(object oPC, int nList); + +/** + * Recovers the chosen Maneuver. + * + * @param oPC Character to check + * @param nList MANEUVER_LIST_* + * @param nMoveId Maneuver to recover + */ +void RecoverManeuver(object oPC, int nList, int nMoveId); + +/** + * Checks to see if the PC is in a Warblade recovery round + * This prevents all use of maneuvers or stances during that round. + * + * @param oPC Character to clear + * @return TRUE or FALSE + */ +int GetIsWarbladeRecoveryRound(object oPC); + +/** + * Marks maneuvers as granted or withheld. + * + * @param oPC Character to grant maneuvers to + * @param nList MANEUVER_LIST_* + */ +void GrantManeuvers(object oPC, int nList); + +/** + * Clears all local ints marking maneuvers as readied + * + * @param oPC Character to clear + * @param nList MANEUVER_LIST_* + */ +void ClearReadiedManeuvers(object oPC, int nList); + +/** + * Grants a withheld maneuver + * Only works on Crusaders + * + * @param oPC Character to grant maneuvers to + * @param nList MANEUVER_LIST_* + * @param nMoveId Maneuver to grant + */ +void GrantWithheldManeuver(object oPC, int nList, int nMoveId = -1); + +/** + * Returns whether maneuver is granted or not + * Only works on Crusaders + * + * @param oPC Character to check + * @param nMoveId Maneuver to check + * @return TRUE or FALSE + */ +int GetIsManeuverGranted(object oPC, int nMoveId); + +/** + * Clears all local ints marking maneuvers as granted or withheld + * Only works on Crusaders + * + * @param oPC Character to clear + */ +void ClearGrantedWithheldManeuvers(object oPC); + +/** + * Starting function for Crusader recovery, calls DoCrusaderGranting + * Only works on Crusaders + * + * @param oPC Crusader + */ +void BeginCrusaderGranting(object oPC); + +/** + * Recursive function granting maneuvers each round in combat + * Will end when combat ends + * Only works on Crusaders + * + * @param oPC Crusader + * @param nTrip Round of combat. Takes values from 1 to 5, always starts with 1. + */ +void DoCrusaderGranting(object oPC, int nTrip); + + +/** + * Returns TRUE if a maneuver was expended, FALSE otherwise + * @param oPC Character to check + * @param nList MANEUVER_LIST_* + * @param nDiscipline DISCIPLINE_* the maneuver has to be from + * + * @return TRUE or FALSE + */ +int ExpendRandomManeuver(object oPC, int nList, int nDiscipline = -1); + +/** + * Clears all local ints marking maneuvers as expended + * + * @param oPC Character to clear + * @param nPRC Specific PRC to recover, else all. + */ +void RecoverPrCAbilities(object oPC); + +/** + * Heals 3 + 1 point per character level ones per minute + * + * @param oPC Character to heal + */ +void VitalRecovery(object oPC); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "inc_lookups" +#include "tob_inc_tobfunc" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int GetReadiedCount(object oPC, int nList) +{ + return GetLocalInt(oPC, "ManeuverReadied" + IntToString(nList)); +} + +int GetMaxReadiedCount(object oPC, int nList) +{ + int nLevel = GetLevelByClass(nList, oPC); + // 2das start at Row 0 + int nMaxReadied = StringToInt(Get2DACache(GetAMSKnownFileName(nList), "ManeuversReadied", nLevel-1)); + // Add in the custom modifier + nMaxReadied += GetReadiedManeuversModifier(oPC, nList); + if(nList == MANEUVER_LIST_SWORDSAGE) + nMaxReadied += GetHasFeat(FEAT_EXTRA_GRANTED_MANEUVER, oPC); + + if(DEBUG) DoDebug("tob_inc_recovery: MaxManeuvers Readied: " +IntToString(nMaxReadied)); + return nMaxReadied; +} + +int GetReadiedManeuversModifier(object oCreature, int nList) +{ + return GetPersistantLocalInt(oCreature, _MANEUVER_LIST_NAME_BASE + IntToString(nList) + _MANEUVER_LIST_RDYMODIFIER); +} + +void SetReadiedManeuversModifier(object oCreature, int nList, int nNewValue) +{ + SetPersistantLocalInt(oCreature, _MANEUVER_LIST_NAME_BASE + IntToString(nList) + _MANEUVER_LIST_RDYMODIFIER, nNewValue); +} + +void ReadyManeuver(object oPC, int nList, int nMoveId) +{ + int nCount = GetReadiedCount(oPC, nList); + int nMaxCount = GetMaxReadiedCount(oPC, nList); + + // If the PC can ready a maneuver and hasn't filled them all up + if(nMaxCount > nCount) + { + nCount++; + SetLocalInt(oPC, "ManeuverReadied" + IntToString(nList) + IntToString(nCount), nMoveId); + SetLocalInt(oPC, "ManeuverReadied" + IntToString(nList), nCount); + if(DEBUG) DoDebug("tob_inc_recovery: ReadyManeuver: " +IntToString(nMoveId)); + } + else + FloatingTextStringOnCreature("All maneuvers are readied", oPC, FALSE); +} + +int GetIsManeuverReadied(object oPC, int nList, int nMoveId) +{ + // Counting through the local ints to determine if this one is readied + int i, nMax = GetReadiedCount(oPC, nList); + for(i = 1; i <= nMax; i++) + { + // If the value is valid, return true + if(GetLocalInt(oPC, "ManeuverReadied" + IntToString(nList) + IntToString(i)) == nMoveId) + { + if(DEBUG) DoDebug("tob_inc_recovery: GetIsManeuverReadied: " + IntToString(nMoveId)); + return TRUE; + } + } + return FALSE; +} + +int GetIsManeuverExpended(object oPC, int nList, int nMoveId) +{ + // Counting through the local ints to determine if this one is expended + int i, nMax = GetLocalInt(oPC, "ManeuverExpended" + IntToString(nList)); + for(i = 1; i <= nMax; i++) + { + // returns if the maneuver is expended + if(GetLocalInt(oPC, "ManeuverExpended" + IntToString(nList) + IntToString(i)) == nMoveId) + { + if(DEBUG) DoDebug("tob_inc_recovery: GetIsManeuverExpended: " +IntToString(nMoveId)); + return TRUE; + } + } + return FALSE; +} + +void ExpendManeuver(object oPC, int nList, int nMoveId) +{ + int nCount = GetLocalInt(oPC, "ManeuverExpended" + IntToString(nList)) + 1; + + // This will mark the Maneuver Expended + SetLocalInt(oPC, "ManeuverExpended" + IntToString(nList) + IntToString(nCount), nMoveId); + SetLocalInt(oPC, "ManeuverExpended" + IntToString(nList), nCount); + if(DEBUG) DoDebug("tob_inc_recovery: Expending Maneuver: " + IntToString(nMoveId)); +} + +void RecoverExpendedManeuvers(object oPC, int nList) +{ + if(DEBUG) DoDebug("tob_inc_recovery: Clearing expended maneuvers"); + // Counting through the local ints to clear them all + int i, nMax = GetLocalInt(oPC, "ManeuverExpended" + IntToString(nList)); + DeleteLocalInt(oPC, "ManeuverExpended" + IntToString(nList)); + for(i = 1; i <= nMax; i++) + { + // Clear them all + DeleteLocalInt(oPC, "ManeuverExpended" + IntToString(nList) + IntToString(i)); + } + // Do Grant/Withheld Maneuvers whenever this is called on a Crusader + if (nList == MANEUVER_LIST_CRUSADER) + { + // Make sure to clear them all first + ClearGrantedWithheldManeuvers(oPC); + // Then re-grant/withhold them + GrantManeuvers(oPC, nList); + } + if (GetHasFeat(FEAT_VITAL_RECOVERY, oPC)) VitalRecovery(oPC); +} + +void RecoverManeuver(object oPC, int nList, int nMoveId) +{ + // Counting through the local ints to determine if this one is expended + int i, nMax = GetLocalInt(oPC, "ManeuverExpended" + IntToString(nList)); + for(i = 1; i <= nMax; i++) + { + // If it has been expended, clear that + if(GetLocalInt(oPC, "ManeuverExpended" + IntToString(nList) + IntToString(i)) == nMoveId) + { + DeleteLocalInt(oPC, "ManeuverExpended" + IntToString(nList) + IntToString(i)); + if(DEBUG) DoDebug("tob_inc_recovery: Recovering Maneuver: " + IntToString(nMoveId)); + } + } + if (GetHasFeat(FEAT_VITAL_RECOVERY, oPC)) VitalRecovery(oPC); +} + +int GetIsWarbladeRecoveryRound(object oPC) +{ + if(DEBUG) DoDebug("tob_inc_recovery: Warblade recovery check"); + return GetLocalInt(oPC, "WarbladeRecoveryRound"); +} + +void GrantRandomManeuver(object oPC, int nList = MANEUVER_LIST_CRUSADER) +{ + int nMax = GetLocalInt(oPC, "GrantRand#"); + if(!nMax) return;//nothing to grant + + SetLocalInt(oPC, "GrantRand#", nMax - 1); + int x = Random(nMax)+1; + int nMoveId = GetLocalInt(oPC, "GrantRand#" + IntToString(x)); + if(x != nMax) + SetLocalInt(oPC, "GrantRand#" + IntToString(x), GetLocalInt(oPC, "GrantRand#" + IntToString(nMax))); + DeleteLocalInt(oPC, "GrantRand#" + IntToString(nMax)); + + //GrantWithheldManeuver(oPC, MANEUVER_LIST_CRUSADER, MoveId); + // No point in granting an expended maneuver + if(GetIsManeuverExpended(oPC, nList, nMoveId)) + RecoverManeuver(oPC, nList, nMoveId); + + int i = 1; + while(i) + { + // If it hits a non-valid, break + if(!GetLocalInt(oPC, "ManeuverGranted" + IntToString(i))) break; + i++; + } + SetLocalInt(oPC, "ManeuverGranted" + IntToString(i), nMoveId); +} + +void ListGrantedManeuvers(object oPC) +{ + int i; + for(i = 1; i <= 4; i++) + { + int nMoveId = GetLocalInt(oPC, "ManeuverGranted" + IntToString(i)); + int nExpended = GetIsManeuverExpended(oPC, MANEUVER_LIST_CRUSADER, nMoveId); + if (nMoveId > 0 && !nExpended) FloatingTextStringOnCreature(GetManeuverName(nMoveId) + " is granted", oPC, FALSE); + } +} + +void GrantManeuvers(object oPC, int nList = MANEUVER_LIST_CRUSADER) +{ + // Only crusader level matters for this + int nLevel = GetLevelByClass(CLASS_TYPE_CRUSADER, oPC); + // 2das start at Row 0 + int nGranted = StringToInt(Get2DACache(GetAMSKnownFileName(nList), "ManeuversGranted", nLevel-1)); + nGranted += GetReadiedManeuversModifier(oPC, nList); + nGranted += GetHasFeat(FEAT_EXTRA_GRANTED_MANEUVER, oPC); + + // Counting through the local ints to determine how many are readied + int i, nMaxReadied = GetReadiedCount(oPC, nList); + SetLocalInt(oPC, "GrantRand#", nMaxReadied); + for(i = 1; i <= nMaxReadied; i++) + { + // build temporary array for GrantRandomManeuver() function + int nMoveId = GetLocalInt(oPC, "ManeuverReadied" + IntToString(nList) + IntToString(i)); + if(nMoveId) + SetLocalInt(oPC, "GrantRand#" + IntToString(i), nMoveId); + } + for(i = 1; i <= nGranted; i++) + { + GrantRandomManeuver(oPC); + } + ListGrantedManeuvers(oPC); +} + +void ClearReadiedManeuvers(object oPC, int nList) +{ + if(DEBUG) DoDebug("tob_inc_recovery: Clearing readied maneuvers"); + // Counting through the local ints to clear them all + int i, nMax = GetReadiedCount(oPC, nList); + DeleteLocalInt(oPC, "ManeuverReadied" + IntToString(nList)); + for(i = 1; i <= nMax; i++) + { + // Clear them all + DeleteLocalInt(oPC, "ManeuverReadied" + IntToString(nList) + IntToString(i)); + } +} + +/*void GrantWithheldManeuver(object oPC, int nList, int nMoveId = -1) +{ + int i; + string sPsiFile = GetAMSKnownFileName(nList); + // 2das start at Row 0 + int nLevel = GetInitiatorLevel(oPC, nList); + int nGranted = StringToInt(Get2DACache(sPsiFile, "ManeuversGranted", nLevel-1)); + int nReadied = StringToInt(Get2DACache(sPsiFile, "ManeuversReadied", nLevel-1)); + if(DEBUG) DoDebug("tob_inc_recovery: Maneuvers Granted: " + IntToString(nGranted)); + if(DEBUG) DoDebug("tob_inc_recovery: Maneuvers Readied: " + IntToString(nReadied)); + + // If someone input a maneuver + if (nMoveId > 0) + { + // No point in granting an expended maneuver + if (GetIsManeuverExpended(oPC, nList, nMoveId)) + RecoverManeuver(oPC, nList, nMoveId); + + // 3 is always the number withheld + for(i = nGranted; i < nReadied; i++) + { + // Making sure it gets marked properly + int nGrantId = GetLocalInt(oPC, "ManeuverWithheld" + IntToString(i)); + // If it exists, mark it as ready and break out + if (nMoveId == nGrantId) + { + if(DEBUG) DoDebug("tob_inc_recovery: Withheld Maneuver Granted: " + IntToString(nMoveId)); + DeleteLocalInt(oPC, "ManeuverWithheld" + IntToString(i)); + FloatingTextStringOnCreature(GetManeuverName(nMoveId) + " is granted", oPC, FALSE); + SetLocalInt(oPC, "ManeuverGranted" + IntToString(i), nMoveId); + break; + } + } + } + else + { + // 3 is always the number withheld + for(i = nGranted; i < nReadied; i++) + { + nMoveId = GetLocalInt(oPC, "ManeuverWithheld" + IntToString(i)); + // If it exists, mark it as ready and break out + if (nMoveId > 0) + { + if(DEBUG) DoDebug("tob_inc_recovery: Withheld Maneuver Granted: " + IntToString(nMoveId)); + DeleteLocalInt(oPC, "ManeuverWithheld" + IntToString(i)); + FloatingTextStringOnCreature(GetManeuverName(nMoveId) + " is granted", oPC, FALSE); + SetLocalInt(oPC, "ManeuverGranted" + IntToString(i), nMoveId); + break; + } + } + } +}*/ + +int GetIsManeuverGranted(object oPC, int nMoveId) +{ + if(DEBUG) DoDebug("tob_inc_recovery: GetIsManeuverGranted Start"); + // Counting through the local ints to determine if this one is expended + int i, nMax = GetReadiedCount(oPC, MANEUVER_LIST_CRUSADER); + for(i = 1; i <= nMax; i++) + { + // returns if the maneuver is expended + if(GetLocalInt(oPC, "ManeuverGranted" + IntToString(i)) == nMoveId) + { + if(DEBUG) DoDebug("tob_inc_recovery: GetIsManeuverGranted: " + IntToString(nMoveId)); + return TRUE; + } + } + return FALSE; +} + +void ClearGrantedWithheldManeuvers(object oPC) +{ + if(DEBUG) DoDebug("tob_inc_recovery: Clearing Granted and Withheld Maneuvers"); + // Counting through the local ints to clear them all + int i, nMax = GetReadiedCount(oPC, MANEUVER_LIST_CRUSADER); + for(i = 1; i <= nMax; i++) + { + // Clear them all + DeleteLocalInt(oPC, "ManeuverGranted" + IntToString(i)); + } +} + +void BeginCrusaderGranting(object oPC) +{ + if(DEBUG) DoDebug("BeginCrusaderGranting(): Entered Function"); + // Stops it from being called more than once. + if(GetLocalInt(oPC, "CrusaderGrantLoop")) return; + SetLocalInt(oPC, "CrusaderGrantLoop", TRUE); + + // Starts the granting process + if(DEBUG) DoDebug("BeginCrusaderGranting(): DoCrusaderGranting called"); + DoCrusaderGranting(oPC, 1); +} + +void DoCrusaderGranting(object oPC, int nTrip) +{ + if(DEBUG) DoDebug("DoCrusaderGranting(): Entered Function on Round #" + IntToString(nTrip)); + // First round of combat, no granting. + // Last round of the 5, clear and recover/grant maneuvers + if (nTrip >= 5) // Granted maneuvers empty, restart + { + if(DEBUG) DoDebug("DoCrusaderGranting(): RecoverExpendedManeuvers"); + RecoverExpendedManeuvers(oPC, MANEUVER_LIST_CRUSADER); + nTrip = 1; + } + else if (nTrip > 1) + { + // Rounds 2-4, grant a single maneuver + if(DEBUG) DoDebug("DoCrusaderGranting(): GrantWithheldManeuver"); + //GrantWithheldManeuver(oPC, MANEUVER_LIST_CRUSADER); + GrantRandomManeuver(oPC); + ListGrantedManeuvers(oPC); + } + + if(DEBUG) DoDebug("DoCrusaderGranting(): Above Recursive"); + // If in combat, keep the loop going + if (GetIsInCombat(oPC)) + { + if(DEBUG) DoDebug("DoCrusaderGranting(): In Combat"); + DelayCommand(6.0, DoCrusaderGranting(oPC, ++nTrip)); // Increment counter + } + else // Recover and stop loop otherwise. + { + if(DEBUG) DoDebug("DoCrusaderGranting(): Out of Combat Maneuver Recovery"); + RecoverExpendedManeuvers(oPC, MANEUVER_LIST_CRUSADER); + // Resent Int for next time out + DeleteLocalInt(oPC, "CrusaderGrantLoop"); + } + if(DEBUG) DoDebug("DoCrusaderGranting(): Ending"); +} + +int ExpendRandomManeuver(object oPC, int nList, int nDiscipline = -1) +{ + // Counting through the local ints to determine if maneuver can be expended + int i, nMax = GetReadiedCount(oPC, nList); + for(i = 1; i <= nMax; i++) + { + // If the value is valid, next step + int nMoveId = GetLocalInt(oPC, "ManeuverReadied" + IntToString(nList) + IntToString(i)); + if(nMoveId > 0) + { + // Make sure the disciplines match + if(nDiscipline == -1 || GetDisciplineByManeuver(nMoveId) == nDiscipline) + { + // If not expended + if(!GetIsManeuverExpended(oPC, nList, nMoveId)) + { + // Expend the damn thing and go home + ExpendManeuver(oPC, nList, nMoveId); + return TRUE; + } + } + } + } + + // If we're here, failed. + return FALSE; +} + +void RecoverPrCAbilities(object oPC) +{ + int i; + for(i = 2; i <= 8; i++) // PrC abilities: check last seven slots + { + int nClass = GetClassByPosition(i, oPC); + if(DEBUG) DoDebug("RecoverPrCAbilities" + IntToString(nClass)); + switch(nClass) + { + case CLASS_TYPE_INVALID: + if(DEBUG) DoDebug("RecoverPrCAbilities: no class to recover"); + break; + case CLASS_TYPE_JADE_PHOENIX_MAGE: + DeleteLocalInt(oPC, "JPM_Empowering_Strike_Expended"); + DeleteLocalInt(oPC, "JPM_Quickening_Strike_Expended"); + break; + case CLASS_TYPE_DEEPSTONE_SENTINEL: + DeleteLocalInt(oPC, "DPST_Awaken_Stone_Dragon_Expended"); + break; + case CLASS_TYPE_ETERNAL_BLADE: + DeleteLocalInt(oPC, "ETBL_Eternal_Training_Expended"); + DeleteLocalInt(oPC, "ETBL_Island_In_Time_Expended"); + // Remove bonus to racial type from eternal training + PRCRemoveEffectsFromSpell(oPC, ETBL_RACIAL_TYPE); + break; + } + } +} + +void VitalRecovery(object oPC) +{ + if (GetLocalInt(oPC, "VitalRecovery")) return; //Once a minute + int nHD = GetHitDice(oPC); + effect eHeal = EffectHeal(nHD+3); // That's it + effect eVis = EffectVisualEffect(VFX_IMP_HEALING_M); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oPC); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC); + + SetLocalInt(oPC, "VitalRecovery", TRUE); + DelayCommand(60.0, DeleteLocalInt(oPC, "VitalRecovery")); +} \ No newline at end of file diff --git a/src/include/tob_inc_tobfunc.nss b/src/include/tob_inc_tobfunc.nss new file mode 100644 index 0000000..d339082 --- /dev/null +++ b/src/include/tob_inc_tobfunc.nss @@ -0,0 +1,1294 @@ +//:://///////////////////////////////////////////// +//:: Tome of Battle include: Miscellaneous +//:: tob_inc_tobfunc +//:://///////////////////////////////////////////// +/** @file + Defines various functions and other stuff that + do something related to the Tome of Battle implementation. + + Also acts as inclusion nexus for the general + tome of battle includes. In other words, don't include + them directly in your scripts, instead include this. + + @author Stratovarius + @date Created - 2007.3.19 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +//:: Updated for .35 by Jaysyn 2023/03/11 + +//:: Test Void +//void main (){} + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const int DISCIPLINE_DESERT_WIND = 1; +const int DISCIPLINE_DEVOTED_SPIRIT = 2; +const int DISCIPLINE_DIAMOND_MIND = 4; +const int DISCIPLINE_IRON_HEART = 8; +const int DISCIPLINE_SETTING_SUN = 16; +const int DISCIPLINE_SHADOW_HAND = 32; +const int DISCIPLINE_STONE_DRAGON = 64; +const int DISCIPLINE_TIGER_CLAW = 128; +const int DISCIPLINE_WHITE_RAVEN = 256; + +const string PRC_INITIATING_CLASS = "PRC_CurrentManeuver_InitiatingClass"; +const string PRC_MANEUVER_LEVEL = "PRC_CurrentManeuver_Level"; + +const int MANEUVER_TYPE_STANCE = 1; +const int MANEUVER_TYPE_STRIKE = 2; +const int MANEUVER_TYPE_COUNTER = 3; +const int MANEUVER_TYPE_BOOST = 4; +//global constant (strike & counter & boost) +const int MANEUVER_TYPE_MANEUVER = 5; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Determines from what class's maneuver list the currently being initiated + * maneuver is initiated from. + * + * @param oInitiator A creature initiating a maneuver at this moment + * @return CLASS_TYPE_* constant of the class + */ +int GetInitiatingClass(object oInitiator = OBJECT_SELF); + +/** + * Determines the given creature's Initiator level. If a class is specified, + * then returns the Initiator level for that class. Otherwise, returns + * the Initiator level for the currently active maneuver. + * + * @param oInitiator The creature whose Initiator level to determine + * @param nSpecificClass The class to determine the creature's Initiator + * level in. + * DEFAULT: CLASS_TYPE_INVALID, which means the creature's + * Initiator level in regards to an ongoing maneuver + * is determined instead. + * @return The Initiator level + */ +int GetInitiatorLevel(object oInitiator = OBJECT_SELF, int nSpecificClass = CLASS_TYPE_INVALID); + +/** + * Determines whether a given creature uses BladeMagic. + * Requires either levels in a BladeMagic-related class or + * natural BladeMagic ability based on race. + * + * @param oCreature Creature to test + * @return TRUE if the creature can use BladeMagics, FALSE otherwise. + */ +int GetIsBladeMagicUser(object oCreature); + +/** + * Determines the given creature's highest undmodified Initiator level among it's + * initiating classes. + * + * @param oCreature Creature whose highest Initiator level to determine + * @return The highest unmodified Initiator level the creature can have + */ +int GetHighestInitiatorLevel(object oCreature); + +/** + * Determines whether a given class is a BladeMagic-related class or not. + * + * @param nClass CLASS_TYPE_* of the class to test + * @return TRUE if the class is a BladeMagic-related class, FALSE otherwise + */ +int GetIsBladeMagicClass(int nClass); + +/** + * Gets the level of the maneuver being currently initiated or the level + * of the maneuver ID passed to it. + * + * @param oInitiator The creature currently initiating a maneuver + * @return The level of the maneuver being initiated + */ +int GetManeuverLevel(object oInitiator, int nMoveId = 0); + +/** + * Returns the type of the maneuver + * + * @param nSpellId SpellId of the maneuver + */ +int GetManeuverType(int nSpellId); + +/** + * Returns the name of the maneuver + * + * @param nSpellId SpellId of the maneuver + */ +string GetManeuverName(int nSpellId); + +/** + * Returns the name of the Discipline + * + * @param nDiscipline DISCIPLINE_* to name + */ +string GetDisciplineName(int nDiscipline); + +/** + * Returns the Discipline the maneuver is in + * @param nMoveId maneuver to check + * + * @return DISCIPLINE_* + */ +int GetDisciplineByManeuver(int nMoveId); + +/** + * Returns true or false if the initiator has the Discipline + * @param oInitiator Person to check + * @param nDiscipline Discipline to check + * + * @return TRUE or FALSE + */ +int TOBGetHasDiscipline(object oInitiator, int nDiscipline); + +/** + * Returns true or false if the swordsage has Discipline + * focus in the chosen discipline + * @param oInitiator Person to check + * @param nDiscipline Discipline to check + * + * @return TRUE or FALSE + */ +int TOBGetHasDisciplineFocus(object oInitiator, int nDiscipline); + +/** + * Calculates how many initiator levels are gained by a given creature from + * it's levels in prestige classes. + * + * @param oCreature Creature to calculate added initiator levels for + * @return The number of initiator levels gained + */ +int GetBladeMagicPRCLevels(object oInitiator); + +/** + * Determines which of the character's classes is their highest or first blade magic + * initiating class, if any. This is the one which gains initiator level raise benefits + * from prestige classes. + * + * @param oCreature Creature whose classes to test + * @return CLASS_TYPE_* of the first blade magic initiating class, + * CLASS_TYPE_INVALID if the creature does not possess any. + */ +int GetPrimaryBladeMagicClass(object oCreature = OBJECT_SELF); + +/** + * Determines the position of a creature's first blade magic initiating class, if any. + * + * @param oCreature Creature whose classes to test + * @return The position of the first blade magic class {1, 2, 3} or 0 if + * the creature possesses no levels in blade magic classes. + */ +int GetFirstBladeMagicClassPosition(object oCreature = OBJECT_SELF); + +/** + * Checks whether the PC has the prereqs for the maneuver + * + * @param nClass The class that is trying to learn the feat + * @param nFeat The maneuver's FeatId + * @param oPC The creature whose feats to check + * @return TRUE if the PC possesses the prerequisite feats AND does not + * already posses nFeat, FALSE otherwise. + */ +int CheckManeuverPrereqs(int nClass, int nPrereqs, int nDiscipline, object oPC); + +/** + * Checks whether the maneuver is supernatural or not + * Mainly used to check for AMF areas. + * Mostly from Swordsage maneuvers + * + * @param nMoveId The Maneuver to Check + * @return TRUE if Maneuver is (Su), else FALSE + */ +int GetIsManeuverSupernatural(int nMoveId); + +/** + * Checks whether the initiator has an active stance + * + * @param oInitiator The Initiator + * @return The SpellId or FALSE + */ +int GetHasActiveStance(object oInitiator); + +/** + * Clears spell effects for Stances + * Will NOT clear nDontClearMove + * + * @param oInitiator The Initiator + * @param nDontClearMove A single Stance not to clear + */ +void ClearStances(object oInitiator, int nDontClearMove); + +/** + * Marks a stance active via local ints + * + * @param oInitiator The Initiator + * @param nStance The stance to mark active + */ +void MarkStanceActive(object oInitiator, int nStance); + +/** + * This will take an effect that is supposed to be based on size + * And use vs racial effects to approximate it + * + * @param oInitiator The Initiator + * @param eEffect The effect to scale + * @param nSize 0 affects creature one size or more smaller. + * 1 affects creatures one size or more larger + */ +effect VersusSizeEffect(object oInitiator, effect eEffect, int nSize); + +/** + * Checks every 6 seconds whether an adept has moved too far for a stance + * Or whether the adept has moved far enough to get a bonus from a stance + * + * @param oPC The Initiator + * @param nMoveId The stance + * @param fFeet The distance to check + */ +void InitiatorMovementCheck(object oPC, int nMoveId, float fFeet = 10.0); + +/** + * Checks whether the maneuver is a stance + * + * @param nMoveId The Maneuver + * @return TRUE or FALSE + */ +int GetIsStance(int nMoveId); + +/** + * Sets up everything for the Damage boosts (xd6 + IL fire damage) + * That the Desert Wind discipline has. + * + * @param oPC The PC + */ +void DoDesertWindBoost(object oPC); + +/** + * Determines which PC in the area is weakest, and + * returns that PC. + * + * @param oPC The PC + * @param fDistance The distance to check in feet + * @return The Target + */ +object GetCrusaderHealTarget(object oPC, float fDistance); + +/** + * Returns true or false if the swordsage has Insightful Strike in the chosen discipline + * @param oInitiator Person to check + * + * @return TRUE or FALSE + */ +int GetHasInsightfulStrike(object oInitiator); + +/** + * Returns true or false if the swordsage has Defensive Stance + * ONLY CALL THIS FROM WITHIN STANCES + * @param oInitiator Person to check + * @param nDiscipline DISCIPLINE_ constant of the school of the maneuver. + * + * @return TRUE or FALSE + */ +int GetHasDefensiveStance(object oInitiator, int nDiscipline); + +/** + * Returns true if it is a weapon of the appropriate discipline + * @param oWeapon Weapon to check + * @param nDiscipline DISCIPLINE_ constant of the school of the maneuver. + * + * @return TRUE or FALSE + */ +int GetIsDisciplineWeapon(object oWeapon, int nDiscipline); + +/** + * Returns a numerical bonus to attacks for use in strikes + * @param oInitiator Person to check + * @param nDiscipline DISCIPLINE_ constant of the school of the maneuver. + * @param nClass CLASS_TYPE_ constant + * + * @return Bonus total + */ +int TOBSituationalAttackBonuses(object oInitiator, int nDiscipline, int nClass = CLASS_TYPE_INVALID); + +/** + * Returns the skill for the named discipline + * @param nDiscipline DISCIPLINE_ constant + * + * @return Discipline skill + */ +int GetDisciplineSkill(int nDiscipline); + +/** + * Returns the discipline for the Blade Meditation feat + * @param oInitiator Person to check + * + * @return DISCIPLINE_ constant + */ +int BladeMeditationFeat(object oInitiator); + +/** + * Returns 1 if feat and maneuver match + * @param oInitiator Person to check + * @param nMoveId Maneuver to check + * + * @return 1 or -1 + */ +int BladeMeditationDamage(object oInitiator, int nMoveId); + + +/** + * Returns 1 if Blade Meditation & Discipline match + * @param oInitiator Person to check + * @param nDiscipline Discipline to match + * + * @return 1 or 0 + */ + int HasBladeMeditationForDiscipline(object oInitiator, int nDiscipline); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "tob_move_const" +#include "prc_alterations" +#include "tob_inc_moveknwn" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + + +int _CheckPrereqsByDiscipline(object oPC, int nDiscipline, int nCount = 1) +{ + int nPrereqCount = GetManeuverCountByDiscipline(oPC, nDiscipline, MANEUVER_TYPE_MANEUVER) + + GetManeuverCountByDiscipline(oPC, nDiscipline, MANEUVER_TYPE_STANCE); + + if(nPrereqCount >= nCount) + return nPrereqCount; + + return 0; +} + +void _RecursiveStanceCheck(object oPC, object oTestWP, int nMoveId, float fFeet = 10.0) +{ + // Seeing if this works better + string sWPTag = "PRC_BMWP_" + GetName(oPC) + IntToString(nMoveId); + oTestWP = GetWaypointByTag(sWPTag); + // Distance moved in the last round + float fDist = FeetToMeters(GetDistanceBetween(oPC, oTestWP)); + // Giving them a little extra distance because of NWN's dance of death + float fCheck = FeetToMeters(fFeet); + if(DEBUG) DoDebug("_RecursiveStanceCheck: fDist: " + FloatToString(fDist)); + if(DEBUG) DoDebug("_RecursiveStanceCheck: fCheck: " + FloatToString(fCheck)); + if(DEBUG) DoDebug("_RecursiveStanceCheck: nMoveId: " + IntToString(nMoveId)); + + + // Moved the distance + if (fDist >= fCheck) + { + if(DEBUG) DoDebug("_RecursiveStanceCheck: fDist > fCheck"); + // Stances that clean up + if (nMoveId == MOVE_SD_STONEFOOT_STANCE) + { + PRCRemoveEffectsFromSpell(oPC, nMoveId); + if(DEBUG) DoDebug("_RecursiveStanceCheck: Moved too far, cancelling stances."); + // Clean up the test WP as well + DestroyObject(oTestWP); + } + // Stances that clean up + else if (nMoveId == MOVE_MOUNTAIN_FORTRESS) + { + PRCRemoveEffectsFromSpell(oPC, nMoveId); + if(DEBUG) DoDebug("_RecursiveStanceCheck: Moved too far, cancelling stances."); + // Clean up the test WP as well + DestroyObject(oTestWP); + } + // Stances that clean up + else if (nMoveId == MOVE_SD_ROOT_MOUNTAIN) + { + PRCRemoveEffectsFromSpell(oPC, nMoveId); + if(DEBUG) DoDebug("_RecursiveStanceCheck: Moved too far, cancelling stances."); + // Clean up the test WP as well + DestroyObject(oTestWP); + } + else if (nMoveId == MOVE_SH_CHILD_SHADOW) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectConcealment(20)), oPC, 6.0); + if(DEBUG) DoDebug("_RecursiveStanceCheck: Applying bonuses."); + // Clean up the test WP + DestroyObject(oTestWP); + // Create waypoint for the movement for next round + CreateObject(OBJECT_TYPE_WAYPOINT, "nw_waypoint001", GetLocation(oPC), FALSE, sWPTag); + } + else if (nMoveId == MOVE_IH_ABSOLUTE_STEEL) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectACIncrease(2)), oPC, 6.0); + if(DEBUG) DoDebug("_RecursiveStanceCheck: Applying bonuses."); + // Clean up the test WP + DestroyObject(oTestWP); + // Create waypoint for the movement for next round + CreateObject(OBJECT_TYPE_WAYPOINT, "nw_waypoint001", GetLocation(oPC), FALSE, sWPTag); + } + + else if (nMoveId == MOVE_SD_GIANTS_STANCE) + { + DeleteLocalInt(oPC, "DWGiantsStance"); + DeleteLocalInt(oPC, "PRC_Power_Expansion_SizeIncrease"); + PRCRemoveEffectsFromSpell(oPC, nMoveId); + DestroyObject(oTestWP); + } + + else if (nMoveId == MOVE_IH_DANCING_BLADE_FORM) + { + DeleteLocalInt(oPC, "DWDancingBladeForm"); + DestroyObject(oTestWP); + } + + } + // If they still have the spell, keep going + if (GetHasSpellEffect(nMoveId, oPC)) + { + DelayCommand(6.0, _RecursiveStanceCheck(oPC, oTestWP, nMoveId)); + if(DEBUG) DoDebug("_RecursiveStanceCheck: DelayCommand(6.0, _RecursiveStanceCheck(oPC, oTestWP, nMoveId))."); + } + + if(DEBUG) DoDebug("_RecursiveStanceCheck: Exiting"); +} + +int _AllowedDiscipline(object oInitiator, int nClass, int nDiscipline) +{ + //maneuver choice for prestige classes is restricted only to those disciplines + int nOverride = GetPersistantLocalInt(oInitiator, "AllowedDisciplines"); + if(nOverride == 0) + { + switch(nClass) + { + case CLASS_TYPE_CRUSADER: nOverride = 322; break;//DISCIPLINE_DEVOTED_SPIRIT + DISCIPLINE_STONE_DRAGON + DISCIPLINE_WHITE_RAVEN + case CLASS_TYPE_SWORDSAGE: nOverride = 245; break;//DISCIPLINE_DESERT_WIND + DISCIPLINE_DIAMOND_MIND + DISCIPLINE_SETTING_SUN + DISCIPLINE_SHADOW_HAND + DISCIPLINE_STONE_DRAGON + DISCIPLINE_TIGER_CLAW + case CLASS_TYPE_WARBLADE: nOverride = 460; break;//DISCIPLINE_DIAMOND_MIND + DISCIPLINE_IRON_HEART + DISCIPLINE_STONE_DRAGON + DISCIPLINE_TIGER_CLAW + DISCIPLINE_WHITE_RAVEN + } + } + return nOverride & nDiscipline; +} + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int GetInitiatingClass(object oInitiator = OBJECT_SELF) +{ + return GetLocalInt(oInitiator, PRC_INITIATING_CLASS) - 1; +} + +int GetInitiatorLevel(object oInitiator = OBJECT_SELF, int nSpecificClass = CLASS_TYPE_INVALID) +{ + int nAdjust = GetLocalInt(oInitiator, PRC_CASTERLEVEL_ADJUSTMENT); + int nLevel = GetLocalInt(oInitiator, PRC_CASTERLEVEL_OVERRIDE); + + // For when you want to assign the caster level. + if(nLevel) + { + if(DEBUG) SendMessageToPC(oInitiator, "GetInitiatorLevel(): Forced-level initiating at level " + IntToString(nLevel)); + //DelayCommand(1.0, DeleteLocalInt(oInitiator, PRC_CASTERLEVEL_OVERRIDE)); + return nLevel + nAdjust; + } + + int nTotalHD = GetHitDice(oInitiator); + + // The function user needs to know the character's Initiator level in a specific class + // instead of whatever the character last initiated a maneuver as + if(nSpecificClass != CLASS_TYPE_INVALID) + { + if(GetIsBladeMagicClass(nSpecificClass)) + { + // Initiator level is class level + 1/2 levels in all other classes + // See ToB p39 + // Max level is therefor the level plus 1/2 of remaining levels + // Prestige classes are stuck in here + int nClassLevel = GetLevelByClass(nSpecificClass, oInitiator); + if(nClassLevel) + { + nClassLevel += GetBladeMagicPRCLevels(oInitiator); + nLevel = nClassLevel + ((nTotalHD - nClassLevel)/2); + } + } + } + else if(GetInitiatingClass(oInitiator) != -1) + { + int nClassLevel = GetLevelByClass(GetInitiatingClass(oInitiator), oInitiator); + nClassLevel += GetBladeMagicPRCLevels(oInitiator); + nLevel = nClassLevel + ((nTotalHD - nClassLevel)/2); + } + + // A character with no initiator levels has an init level of 1/2 HD (min 1) + if(!nLevel) + nLevel = PRCMax(1, nTotalHD/2); + + // This spam is technically no longer necessary once the Initiator level getting mechanism has been confirmed to work +// if(DEBUG) FloatingTextStringOnCreature("Initiator Level: " + IntToString(nLevel), oInitiator, FALSE); + + return nLevel + nAdjust; +} + +int GetIsBladeMagicUser(object oCreature) +{ + return !!(GetLevelByClass(CLASS_TYPE_CRUSADER, oCreature) + || GetLevelByClass(CLASS_TYPE_SWORDSAGE, oCreature) + || GetLevelByClass(CLASS_TYPE_WARBLADE, oCreature)); +} + +int GetHighestInitiatorLevel(object oCreature) +{ + int n = 0; + int nHighest; + int nTemp; + + while(n <= 8) + { + if(GetClassByPosition(n, oCreature) != CLASS_TYPE_INVALID) + { + nTemp = GetInitiatorLevel(oCreature, GetClassByPosition(n, oCreature)); + + if(nTemp > nHighest) + nHighest = nTemp; + } + n++; + + } + + return nHighest; +} + +/* int GetHighestInitiatorLevel(object oCreature) +{ + return PRCMax(PRCMax(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetInitiatorLevel(oCreature, GetClassByPosition(1, oCreature)) : 0, + GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID ? GetInitiatorLevel(oCreature, GetClassByPosition(2, oCreature)) : 0 + ), + GetClassByPosition(3, oCreature) != CLASS_TYPE_INVALID ? GetInitiatorLevel(oCreature, GetClassByPosition(3, oCreature)) : 0 + ); +} */ + +int GetIsBladeMagicClass(int nClass) +{ + return nClass == CLASS_TYPE_CRUSADER + || nClass == CLASS_TYPE_SWORDSAGE + || nClass == CLASS_TYPE_WARBLADE; +} + +int GetManeuverLevel(object oInitiator, int nMoveId = 0) +{ + int nLevel = GetLocalInt(oInitiator, PRC_MANEUVER_LEVEL); + if (nLevel > 0) return nLevel; + else if (nMoveId > 0) return StringToInt(lookup_spell_innate(nMoveId)); + + return 0; +} + +string GetManeuverName(int nSpellId) +{ + return GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellId))); +} + +int GetManeuverType(int nSpellId) +{ + return StringToInt(GetStringRight(Get2DACache("spells", "MetaMagic", nSpellId), 1)); +} + +int GetIsStance(int nMoveId) +{ + return GetManeuverType(nMoveId) == MANEUVER_TYPE_STANCE; +} + +string GetDisciplineName(int nDiscipline) +{ + int nStrRef; + switch(nDiscipline) + { + case DISCIPLINE_DESERT_WIND: nStrRef = 16829714; break; + case DISCIPLINE_DEVOTED_SPIRIT: nStrRef = 16829715; break; + case DISCIPLINE_DIAMOND_MIND: nStrRef = 16829716; break; + case DISCIPLINE_IRON_HEART: nStrRef = 16829717; break; + case DISCIPLINE_SETTING_SUN: nStrRef = 16829718; break; + case DISCIPLINE_SHADOW_HAND: nStrRef = 16829719; break; + case DISCIPLINE_STONE_DRAGON: nStrRef = 16829720; break; + case DISCIPLINE_TIGER_CLAW: nStrRef = 16829721; break; + case DISCIPLINE_WHITE_RAVEN: nStrRef = 16829722; break; + } + return GetStringByStrRef(nStrRef); +} + +int GetDisciplineByManeuver(int nMoveId) +{ + string sSpellSchool = Get2DACache("spells", "School", nMoveId); + int nDiscipline; + + if (sSpellSchool == "A") nDiscipline = DISCIPLINE_DEVOTED_SPIRIT; + else if (sSpellSchool == "C") nDiscipline = DISCIPLINE_SETTING_SUN; + else if (sSpellSchool == "D") nDiscipline = DISCIPLINE_IRON_HEART; + else if (sSpellSchool == "E") nDiscipline = DISCIPLINE_DIAMOND_MIND; + else if (sSpellSchool == "V") nDiscipline = DISCIPLINE_DESERT_WIND; + else if (sSpellSchool == "I") nDiscipline = DISCIPLINE_SHADOW_HAND; + else if (sSpellSchool == "N") nDiscipline = DISCIPLINE_WHITE_RAVEN; + else if (sSpellSchool == "T") nDiscipline = DISCIPLINE_TIGER_CLAW; + else if (sSpellSchool == "G") nDiscipline = DISCIPLINE_STONE_DRAGON; + + return nDiscipline; +} + +int GetBladeMagicPRCLevels(object oInitiator) +{ + int nRace = GetRacialType(oInitiator); + + int nLevel = GetLevelByClass(CLASS_TYPE_DEEPSTONE_SENTINEL, oInitiator) + + GetLevelByClass(CLASS_TYPE_BLOODCLAW_MASTER, oInitiator) + + GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oInitiator) + + GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oInitiator) + + GetLevelByClass(CLASS_TYPE_MASTER_OF_NINE, oInitiator) + + GetLevelByClass(CLASS_TYPE_ETERNAL_BLADE, oInitiator) + + GetLevelByClass(CLASS_TYPE_SHADOW_SUN_NINJA, oInitiator); + + if (nRace == RACIAL_TYPE_RETH_DEKALA) + { + nLevel += GetLevelByClass(CLASS_TYPE_OUTSIDER, oInitiator); + } + + + return nLevel; +} + +int GetPrimaryBladeMagicClass(object oCreature = OBJECT_SELF) +{ + int nClass = CLASS_TYPE_INVALID; + + if(GetPRCSwitch(PRC_CASTERLEVEL_FIRST_CLASS_RULE)) + { + int nBladeMagicPos = GetFirstBladeMagicClassPosition(oCreature); + if (!nBladeMagicPos) return CLASS_TYPE_INVALID; // no Blade Magic initiating class + + nClass = GetClassByPosition(nBladeMagicPos, oCreature); + } + else + { + /*int i, nLevel, nTest, nTestLevel; + for(i = 1; i < 4; i++) + { + nTest = GetClassByPosition(i, oCreature); + if(GetIsBladeMagicClass(nTest)) + { + nTestLevel = GetLevelByClass(nTest, oCreature); + if(nTestLevel > nLevel) + { + nClass = nTest; + nLevel = nTestLevel; + } + } + }*/ + + int nClassLvl; + int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8; + int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl; + + nClass1 = GetClassByPosition(1, oCreature); + nClass2 = GetClassByPosition(2, oCreature); + nClass3 = GetClassByPosition(3, oCreature); + nClass4 = GetClassByPosition(4, oCreature); + nClass5 = GetClassByPosition(5, oCreature); + nClass6 = GetClassByPosition(6, oCreature); + nClass7 = GetClassByPosition(7, oCreature); + nClass8 = GetClassByPosition(8, oCreature); + + if(GetIsBladeMagicClass(nClass1)) nClass1Lvl = GetLevelByClass(nClass1, oCreature); + if(GetIsBladeMagicClass(nClass2)) nClass2Lvl = GetLevelByClass(nClass2, oCreature); + if(GetIsBladeMagicClass(nClass3)) nClass3Lvl = GetLevelByClass(nClass3, oCreature); + if(GetIsBladeMagicClass(nClass4)) nClass4Lvl = GetLevelByClass(nClass4, oCreature); + if(GetIsBladeMagicClass(nClass5)) nClass5Lvl = GetLevelByClass(nClass5, oCreature); + if(GetIsBladeMagicClass(nClass6)) nClass6Lvl = GetLevelByClass(nClass6, oCreature); + if(GetIsBladeMagicClass(nClass7)) nClass7Lvl = GetLevelByClass(nClass7, oCreature); + if(GetIsBladeMagicClass(nClass8)) nClass8Lvl = GetLevelByClass(nClass8, oCreature); + + nClass = nClass1; + nClassLvl = nClass1Lvl; + + if(nClass2Lvl > nClassLvl) + { + nClass = nClass2; + nClassLvl = nClass2Lvl; + } + if(nClass3Lvl > nClassLvl) + { + nClass = nClass3; + nClassLvl = nClass3Lvl; + } + if(nClass4Lvl > nClassLvl) + { + nClass = nClass4; + nClassLvl = nClass4Lvl; + } + if(nClass5Lvl > nClassLvl) + { + nClass = nClass5; + nClassLvl = nClass5Lvl; + } + if(nClass6Lvl > nClassLvl) + { + nClass = nClass6; + nClassLvl = nClass6Lvl; + } + if(nClass7Lvl > nClassLvl) + { + nClass = nClass7; + nClassLvl = nClass7Lvl; + } + if(nClass8Lvl > nClassLvl) + { + nClass = nClass8; + nClassLvl = nClass8Lvl; + } + + if(nClassLvl == 0) + nClass = CLASS_TYPE_INVALID; + } + + return nClass; +} + +int GetFirstBladeMagicClassPosition(object oCreature = OBJECT_SELF) +{ + if (GetIsBladeMagicClass(GetClassByPosition(1, oCreature))) + return 1; + if (GetIsBladeMagicClass(GetClassByPosition(2, oCreature))) + return 2; + if (GetIsBladeMagicClass(GetClassByPosition(3, oCreature))) + return 3; + if (GetIsBladeMagicClass(GetClassByPosition(4, oCreature))) + return 4; + if (GetIsBladeMagicClass(GetClassByPosition(5, oCreature))) + return 5; + if (GetIsBladeMagicClass(GetClassByPosition(6, oCreature))) + return 6; + if (GetIsBladeMagicClass(GetClassByPosition(7, oCreature))) + return 7; + if (GetIsBladeMagicClass(GetClassByPosition(8, oCreature))) + return 8; + + return 0; +} + +int CheckManeuverPrereqs(int nClass, int nPrereqs, int nDiscipline, object oPC) +{ + // Checking to see what the name of the feat is, and the row number + /*if (DEBUG) + { + DoDebug("CheckManeuverPrereqs: nFeat: " + IntToString(nFeat)); + string sFeatName = GetStringByStrRef(StringToInt(Get2DACache("feat", "FEAT", nFeat))); + DoDebug("CheckManeuverPrereqs: sFeatName: " + sFeatName); + }*/ + + // Prestige classes can only access certain disciplines + if(!_AllowedDiscipline(oPC, nClass, nDiscipline)) + return FALSE; + + // If this maneuver has a prereq, check for it + if(nPrereqs) + // if it returns false, exit, otherwise they can take the maneuver + return _CheckPrereqsByDiscipline(oPC, nDiscipline, nPrereqs); + + // if you've reached this far then return TRUE + return TRUE; +} + +int GetIsManeuverSupernatural(int nMoveId) +{ + if(nMoveId == MOVE_DW_BLISTERING_FLOURISH + || nMoveId == MOVE_DW_BURNING_BLADE + || nMoveId == MOVE_DW_BURNING_BRAND + || nMoveId == MOVE_DW_DEATH_MARK + || nMoveId == MOVE_DW_DISTRACTING_EMBER + || nMoveId == MOVE_DW_DRAGONS_FLAME + || nMoveId == MOVE_DW_FAN_FLAMES + || nMoveId == MOVE_DW_FIERY_ASSAULT + || nMoveId == MOVE_DW_FIRE_RIPOSTE + || nMoveId == MOVE_DW_FIRESNAKE + || nMoveId == MOVE_DW_FLAMES_BLESSING + || nMoveId == MOVE_DW_HATCHLINGS_FLAME + || nMoveId == MOVE_DW_HOLOCAUST_CLOAK + || nMoveId == MOVE_DW_INFERNO_BLADE + || nMoveId == MOVE_DW_INFERNO_BLAST + || nMoveId == MOVE_DW_LEAPING_FLAME + || nMoveId == MOVE_DW_LINGERING_INFERNO + || nMoveId == MOVE_DW_RING_FIRE + || nMoveId == MOVE_DW_RISING_PHOENIX + || nMoveId == MOVE_DW_SALAMANDER_CHARGE + || nMoveId == MOVE_DW_SEARING_BLADE + || nMoveId == MOVE_DW_SEARING_CHARGE + || nMoveId == MOVE_DW_WYRMS_FLAME + || nMoveId == MOVE_SH_BALANCE_SKY + || nMoveId == MOVE_SH_CHILD_SHADOW + || nMoveId == MOVE_SH_CLINGING_SHADOW + || nMoveId == MOVE_SH_CLOAK_DECEPTION + || nMoveId == MOVE_SH_ENERVATING_SHADOW + || nMoveId == MOVE_SH_FIVE_SHADOW_CREEPING + || nMoveId == MOVE_SH_GHOST_BLADE + || nMoveId == MOVE_SH_OBSCURING_SHADOW_VEIL + || nMoveId == MOVE_SH_SHADOW_BLADE_TECH + || nMoveId == MOVE_SH_SHADOW_GARROTTE + || nMoveId == MOVE_SH_SHADOW_NOOSE + || nMoveId == MOVE_SH_STRENGTH_DRAINING) + return TRUE; + + // If nothing returns TRUE, fail + return FALSE; +} + +int GetHasActiveStance(object oInitiator) +{ + int nStance = GetLocalInt(oInitiator, "TOBStanceOne"); + if(GetHasSpellEffect(nStance, oInitiator)) + return nStance; + + nStance = GetLocalInt(oInitiator, "TOBStanceTwo"); + if(GetHasSpellEffect(nStance, oInitiator)) + return nStance; + + return FALSE; +} + +void RemoveStance(object oInitiator, int nStance) +{ + PRCRemoveEffectsFromSpell(oInitiator, nStance); + + //stances with special handling goes here + if(nStance == MOVE_DS_AURA_CHAOS) + DeleteLocalInt(oInitiator, "DSChaos"); + else if(nStance == MOVE_DS_PERFECT_ORDER) + DeleteLocalInt(oInitiator, "DSPerfectOrder"); + else if(nStance == MOVE_DW_RISING_PHOENIX) + RemoveItemProperty(GetPCSkin(oInitiator), ItemPropertyBonusFeat(IP_CONST_FEAT_RISING_PHOENIX)); + else if(nStance == MOVE_SH_ASSASSINS_STANCE) + { + DelayCommand(0.1, ExecuteScript("prc_sneak_att", oInitiator)); + if (DEBUG) DoDebug("Cleaning assassin's stance"); + } + else if(nStance == MOVE_MYSTIC_PHOENIX || nStance == MOVE_MYSTIC_PHOENIX_AUG) + { + if(DEBUG) DoDebug("Removing Mystic Phoenix Stance"); + DeleteLocalInt(oInitiator, "ToB_JPM_MystP"); + } + else if(nStance == MOVE_FIREBIRD_STANCE || nStance == MOVE_FIREBIRD_STANCE_AUG) + { + if(DEBUG) DoDebug("Removing Firebird Stance"); + DeleteLocalInt(oInitiator, "ToB_JPM_FireB"); + } + else if(nStance == MOVE_CHILD_SL_STANCE) + { + DeleteLocalInt(oInitiator, "SSN_CHILDSL_SETP"); + RemoveEventScript(oInitiator, EVENT_ONHEARTBEAT, "tob_ssn_childsl", TRUE, FALSE); + } +} + +void ClearStances(object oInitiator, int nDontClearMove) +{ + // Clears spell effects, will not clear DontClearMove + // This is used to allow Warblades to have two stances. + int nStance = GetLocalInt(oInitiator, "TOBStanceOne"); + if(GetHasSpellEffect(nStance, oInitiator) && nStance != nDontClearMove) + { + RemoveStance(oInitiator, nStance); + DeleteLocalInt(oInitiator, "TOBStanceOne"); + } + + nStance = GetLocalInt(oInitiator, "TOBStanceTwo"); + if(GetHasSpellEffect(nStance, oInitiator) && nStance != nDontClearMove) + { + RemoveStance(oInitiator, nStance); + DeleteLocalInt(oInitiator, "TOBStanceTwo"); + } +} + +void MarkStanceActive(object oInitiator, int nStance) +{ + // If the first stance is active, use second + // This should only be called with the first active when it is legal to have two stances + if(GetLocalInt(oInitiator, "TOBStanceOne") > 0) SetLocalInt(oInitiator, "TOBStanceTwo", nStance); + else SetLocalInt(oInitiator, "TOBStanceOne", nStance); +} + +effect VersusSizeEffect(object oInitiator, effect eEffect, int nSize) +{ + // Right now this only deals with medium and small PCs + int nPCSize = PRCGetCreatureSize(oInitiator); + effect eLink; + // Creatures larger than PC + if (nSize == 1) + { + eLink = VersusRacialTypeEffect(eEffect, RACIAL_TYPE_ABERRATION); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_CONSTRUCT)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_DRAGON)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_ELEMENTAL)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_GIANT)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_OUTSIDER)); + if (nPCSize == CREATURE_SIZE_SMALL) + { + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_ANIMAL)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_BEAST)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_DWARF)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_ELF)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_HALFELF)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_HALFORC)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_HUMAN)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_HUMANOID_GOBLINOID)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_HUMANOID_MONSTROUS)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_HUMANOID_ORC)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_HUMANOID_REPTILIAN)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_MAGICAL_BEAST)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_OOZE)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_SHAPECHANGER)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_UNDEAD)); + } + }// Smaller + if (nSize == 0) + { + eLink = VersusRacialTypeEffect(eEffect, RACIAL_TYPE_FEY); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_VERMIN)); + if (nPCSize == CREATURE_SIZE_MEDIUM) + { + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_GNOME)); + eLink = EffectLinkEffects(eLink, VersusRacialTypeEffect(eEffect, RACIAL_TYPE_HALFLING)); + } + } + + return eLink; +} + +void InitiatorMovementCheck(object oPC, int nMoveId, float fFeet = 10.0) +{ + // Check to see if the WP is valid + string sWPTag = "PRC_BMWP_" + GetName(oPC) + IntToString(nMoveId); + object oTestWP = GetWaypointByTag(sWPTag); + if (!GetIsObjectValid(oTestWP)) + { + // Create waypoint for the movement + CreateObject(OBJECT_TYPE_WAYPOINT, "nw_waypoint001", GetLocation(oPC), FALSE, sWPTag); + if(DEBUG) DoDebug("InitiatorMovementCheck: WP for " + DebugObject2Str(oPC) + " didn't exist, creating. Tag: " + sWPTag); + } + // Start the recursive HB check for movement + // Seeing if this solves some of the issues with it + DelayCommand(2.0, _RecursiveStanceCheck(oPC, oTestWP, nMoveId, fFeet)); +} + +void DoDesertWindBoost(object oPC) +{ + if(DEBUG) DoDebug("DoDesertWindBoost running"); + + object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + if (IPGetIsMeleeWeapon(oItem)) + { + effect eVis = EffectLinkEffects(EffectVisualEffect(VFX_IMP_FLAME_M), EffectVisualEffect(VFX_IMP_PULSE_FIRE)); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC); + // Add eventhook to the item + AddEventScript(oItem, EVENT_ITEM_ONHIT, "tob_dw_onhit", TRUE, FALSE); + DelayCommand(6.0, RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "tob_dw_onhit", TRUE, FALSE)); + // Add the OnHit and vfx + IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + IPSafeAddItemProperty(oItem, ItemPropertyVisualEffect(ITEM_VISUAL_FIRE), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + SetLocalInt(oPC, "DesertWindBoost", PRCGetSpellId()); + DelayCommand(6.0, DeleteLocalInt(oPC, "DesertWindBoost")); + } + oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC); + if (IPGetIsMeleeWeapon(oItem)) + { + // Add eventhook to the item + AddEventScript(oItem, EVENT_ITEM_ONHIT, "tob_dw_onhit", TRUE, FALSE); + DelayCommand(6.0, RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "tob_dw_onhit", TRUE, FALSE)); + // Add the OnHit and vfx + IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + IPSafeAddItemProperty(oItem, ItemPropertyVisualEffect(ITEM_VISUAL_FIRE), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + } +} + +object GetCrusaderHealTarget(object oPC, float fDistance) +{ + object oReturn; + int nTest, nCurrentMin = 100; + location lTarget = GetLocation(oPC); + object oTest = MyFirstObjectInShape(SHAPE_SPHERE, fDistance, lTarget); + while(GetIsObjectValid(oTest)) + { + if(GetIsFriend(oTest, oPC)) + { + nTest = (GetCurrentHitPoints(oTest) * 100) / GetMaxHitPoints(oTest); + // Check HP vs current biggest loss + if(nTest < nCurrentMin && GetCurrentHitPoints(oTest) > 0 && !GetIsDead(oTest)) + { + nCurrentMin = nTest; + oReturn = oTest; + } + } + //Get the next target in the specified area around the caster + oTest = MyNextObjectInShape(SHAPE_SPHERE, fDistance, lTarget); + } + if(DEBUG) DoDebug("GetCrusaderHealTarget: oReturn " + GetName(oReturn)); + return oReturn; +} + +int GetHasInsightfulStrike(object oInitiator) +{ + int nDiscToCheck = GetDisciplineByManeuver(PRCGetSpellId()); + int nFeat; + switch(nDiscToCheck) + { + case DISCIPLINE_DESERT_WIND: nFeat = FEAT_SS_DF_IS_DW; break; + case DISCIPLINE_DIAMOND_MIND: nFeat = FEAT_SS_DF_IS_DM; break; + case DISCIPLINE_SETTING_SUN: nFeat = FEAT_SS_DF_IS_SS; break; + case DISCIPLINE_SHADOW_HAND: nFeat = FEAT_SS_DF_IS_SH; break; + case DISCIPLINE_STONE_DRAGON: nFeat = FEAT_SS_DF_IS_SD; break; + case DISCIPLINE_TIGER_CLAW: nFeat = FEAT_SS_DF_IS_TC; break; + } + if(GetHasFeat(nFeat, oInitiator)) + return TRUE; + + return FALSE; +} + +int GetHasDefensiveStance(object oInitiator, int nDiscipline) +{ + // Because this is only called from inside the proper stances + // Its just a check to see if they should link in the save boost. + int nFeat; + switch(nDiscipline) + { + case DISCIPLINE_DESERT_WIND: nFeat = FEAT_SS_DF_DS_DW; break; + case DISCIPLINE_DIAMOND_MIND: nFeat = FEAT_SS_DF_DS_DM; break; + case DISCIPLINE_SETTING_SUN: nFeat = FEAT_SS_DF_DS_SS; break; + case DISCIPLINE_SHADOW_HAND: nFeat = FEAT_SS_DF_DS_SH; break; + case DISCIPLINE_STONE_DRAGON: nFeat = FEAT_SS_DF_DS_SD; break; + case DISCIPLINE_TIGER_CLAW: nFeat = FEAT_SS_DF_DS_TC; break; + } + if(GetHasFeat(nFeat, oInitiator)) + return TRUE; + + return FALSE; +} + +int TOBGetHasDiscipline(object oInitiator, int nDiscipline) +{ + switch(nDiscipline) + { + case DISCIPLINE_DEVOTED_SPIRIT: return GetLevelByClass(CLASS_TYPE_CRUSADER, oInitiator); + case DISCIPLINE_DESERT_WIND: + case DISCIPLINE_SETTING_SUN: + case DISCIPLINE_SHADOW_HAND: return GetLevelByClass(CLASS_TYPE_SWORDSAGE, oInitiator); + case DISCIPLINE_IRON_HEART: return GetLevelByClass(CLASS_TYPE_WARBLADE, oInitiator); + case DISCIPLINE_DIAMOND_MIND: + case DISCIPLINE_TIGER_CLAW: return GetLevelByClass(CLASS_TYPE_SWORDSAGE, oInitiator) || GetLevelByClass(CLASS_TYPE_WARBLADE, oInitiator); + case DISCIPLINE_WHITE_RAVEN: return GetLevelByClass(CLASS_TYPE_CRUSADER, oInitiator) || GetLevelByClass(CLASS_TYPE_WARBLADE, oInitiator); + case DISCIPLINE_STONE_DRAGON: return GetLevelByClass(CLASS_TYPE_CRUSADER, oInitiator) || GetLevelByClass(CLASS_TYPE_SWORDSAGE, oInitiator) || GetLevelByClass(CLASS_TYPE_WARBLADE, oInitiator); + } + return FALSE; +} + +int TOBGetHasDisciplineFocus(object oInitiator, int nDiscipline) +{ + int nFeat1, nFeat2, nFeat3; + switch(nDiscipline) + { + case DISCIPLINE_DESERT_WIND: nFeat1 = FEAT_SS_DF_DS_DW; nFeat2 = FEAT_SS_DF_IS_DW; nFeat3 = FEAT_SS_DF_WF_DW; break; + case DISCIPLINE_DIAMOND_MIND: nFeat1 = FEAT_SS_DF_DS_DM; nFeat2 = FEAT_SS_DF_IS_DM; nFeat3 = FEAT_SS_DF_WF_DM; break; + case DISCIPLINE_SETTING_SUN: nFeat1 = FEAT_SS_DF_DS_SS; nFeat2 = FEAT_SS_DF_IS_SS; nFeat3 = FEAT_SS_DF_WF_SS; break; + case DISCIPLINE_SHADOW_HAND: nFeat1 = FEAT_SS_DF_DS_SH; nFeat2 = FEAT_SS_DF_IS_SH; nFeat3 = FEAT_SS_DF_WF_SH; break; + case DISCIPLINE_STONE_DRAGON: nFeat1 = FEAT_SS_DF_DS_SD; nFeat2 = FEAT_SS_DF_IS_SD; nFeat3 = FEAT_SS_DF_WF_SD; break; + case DISCIPLINE_TIGER_CLAW: nFeat1 = FEAT_SS_DF_DS_TC; nFeat2 = FEAT_SS_DF_IS_TC; nFeat3 = FEAT_SS_DF_WF_TC; break; + } + if(GetHasFeat(nFeat1, oInitiator) || GetHasFeat(nFeat2, oInitiator) || GetHasFeat(nFeat3, oInitiator)) + return TRUE; + + // If none of those trigger. + return FALSE; +} + +int GetIsDisciplineWeapon(object oWeapon, int nDiscipline) +{ + int nType = GetBaseItemType(oWeapon); + if(nDiscipline == DISCIPLINE_DESERT_WIND) + { + if(nType == BASE_ITEM_SCIMITAR + || nType == BASE_ITEM_LIGHTMACE + || nType == BASE_ITEM_SHORTSPEAR + || nType == BASE_ITEM_LIGHT_PICK + || nType == BASE_ITEM_FALCHION) + return TRUE; + } + else if(nDiscipline == DISCIPLINE_DEVOTED_SPIRIT) + { + if(nType == BASE_ITEM_LONGSWORD + || nType == BASE_ITEM_HEAVYFLAIL + || nType == BASE_ITEM_MAUL + || nType == BASE_ITEM_FALCHION) + return TRUE; + } + else if(nDiscipline == DISCIPLINE_DIAMOND_MIND) + { + if(nType == BASE_ITEM_BASTARDSWORD + || nType == BASE_ITEM_KATANA + || nType == BASE_ITEM_SHORTSPEAR + || nType == BASE_ITEM_RAPIER) + return TRUE; + } + else if(nDiscipline == DISCIPLINE_IRON_HEART) + { + if(nType == BASE_ITEM_BASTARDSWORD + || nType == BASE_ITEM_KATANA + || nType == BASE_ITEM_LONGSWORD + || nType == BASE_ITEM_TWOBLADEDSWORD + || nType == BASE_ITEM_DWARVENWARAXE) + return TRUE; + } + else if(nDiscipline == DISCIPLINE_SETTING_SUN) + { + // Invalid is empty handed / Unarmed strike + if(nType == BASE_ITEM_INVALID + || nType == BASE_ITEM_QUARTERSTAFF + || nType == BASE_ITEM_MAGICSTAFF + || nType == BASE_ITEM_SHORTSWORD + || nType == BASE_ITEM_NUNCHAKU) + return TRUE; + } + else if(nDiscipline == DISCIPLINE_SHADOW_HAND) + { + // Invalid is empty handed / Unarmed strike + if(nType == BASE_ITEM_DAGGER + || nType == BASE_ITEM_INVALID + || nType == BASE_ITEM_SHORTSWORD + || nType == BASE_ITEM_SAI) + return TRUE; + } + else if(nDiscipline == DISCIPLINE_STONE_DRAGON) + { + // Invalid is empty handed / Unarmed strike + if(nType == BASE_ITEM_GREATAXE + || nType == BASE_ITEM_INVALID + || nType == BASE_ITEM_GREATSWORD + || nType == BASE_ITEM_HEAVY_MACE) + return TRUE; + } + else if(nDiscipline == DISCIPLINE_TIGER_CLAW) + { + // Invalid is empty handed / Unarmed strike + if(nType == BASE_ITEM_KUKRI + || nType == BASE_ITEM_KAMA + || nType == BASE_ITEM_HANDAXE + || nType == BASE_ITEM_GREATAXE + || nType == BASE_ITEM_INVALID) + return TRUE; + } + else if(nDiscipline == DISCIPLINE_WHITE_RAVEN) + { + if(nType == BASE_ITEM_BATTLEAXE + || nType == BASE_ITEM_LONGSWORD + || nType == BASE_ITEM_HALBERD + || nType == BASE_ITEM_WARHAMMER + || nType == BASE_ITEM_GREATSWORD) + return TRUE; + } + + // If none of those trigger. + return FALSE; +} + +int TOBSituationalAttackBonuses(object oInitiator, int nDiscipline, int nClass = CLASS_TYPE_INVALID) +{ + int nBonus = 0; + if(GetLevelByClass(CLASS_TYPE_BLOODCLAW_MASTER, oInitiator) >= 4 + && nDiscipline == DISCIPLINE_TIGER_CLAW) + nBonus += 1; + + return nBonus; +} + +int GetDisciplineSkill(int nDiscipline) +{ + if(nDiscipline == DISCIPLINE_DESERT_WIND) + { + return SKILL_TUMBLE; + } + else if(nDiscipline == DISCIPLINE_DEVOTED_SPIRIT) + { + return SKILL_INTIMIDATE; + } + else if(nDiscipline == DISCIPLINE_DIAMOND_MIND) + { + return SKILL_CONCENTRATION; + } + else if(nDiscipline == DISCIPLINE_IRON_HEART) + { + return SKILL_BALANCE; + } + else if(nDiscipline == DISCIPLINE_SETTING_SUN) + { + return SKILL_SENSE_MOTIVE; + } + else if(nDiscipline == DISCIPLINE_SHADOW_HAND) + { + return SKILL_HIDE; + } + else if(nDiscipline == DISCIPLINE_STONE_DRAGON) + { + return SKILL_BALANCE; + } + else if(nDiscipline == DISCIPLINE_TIGER_CLAW) + { + return SKILL_JUMP; + } + else if(nDiscipline == DISCIPLINE_WHITE_RAVEN) + { + return SKILL_PERSUADE; + } + + // If none of those trigger. + return -1; +} + +int BladeMeditationFeat(object oInitiator) +{ + if(GetHasFeat(FEAT_BLADE_MEDITATION_DESERT_WIND , oInitiator)) return DISCIPLINE_DESERT_WIND ; + else if(GetHasFeat(FEAT_BLADE_MEDITATION_DEVOTED_SPIRIT, oInitiator)) return DISCIPLINE_DEVOTED_SPIRIT; + else if(GetHasFeat(FEAT_BLADE_MEDITATION_DIAMOND_MIND , oInitiator)) return DISCIPLINE_DIAMOND_MIND ; + else if(GetHasFeat(FEAT_BLADE_MEDITATION_IRON_HEART , oInitiator)) return DISCIPLINE_IRON_HEART ; + else if(GetHasFeat(FEAT_BLADE_MEDITATION_SETTING_SUN , oInitiator)) return DISCIPLINE_SETTING_SUN ; + else if(GetHasFeat(FEAT_BLADE_MEDITATION_SHADOW_HAND , oInitiator)) return DISCIPLINE_SHADOW_HAND ; + else if(GetHasFeat(FEAT_BLADE_MEDITATION_STONE_DRAGON , oInitiator)) return DISCIPLINE_STONE_DRAGON ; + else if(GetHasFeat(FEAT_BLADE_MEDITATION_TIGER_CLAW , oInitiator)) return DISCIPLINE_TIGER_CLAW ; + else if(GetHasFeat(FEAT_BLADE_MEDITATION_WHITE_RAVEN , oInitiator)) return DISCIPLINE_WHITE_RAVEN ; + + return -1; +} + +int BladeMeditationDamage(object oInitiator, int nMoveId) +{ + int nDisc = BladeMeditationFeat(oInitiator); + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator); + if (nDisc == GetDisciplineByManeuver(nMoveId) && GetIsDisciplineWeapon(oWeapon, nDisc)) + return 1; + + return -1; +} + +int HasBladeMeditationForDiscipline(object oInitiator, int nDiscipline) +{ + if (!GetIsObjectValid(oInitiator)) + return FALSE; + + int nFeatDiscipline = BladeMeditationFeat(oInitiator); + + // If the discipline for Blade Meditation matches the one we're checking, return true + if (nFeatDiscipline == nDiscipline) + return TRUE; + + return FALSE; +} \ No newline at end of file diff --git a/src/include/tob_move_const.nss b/src/include/tob_move_const.nss new file mode 100644 index 0000000..bdd2218 --- /dev/null +++ b/src/include/tob_move_const.nss @@ -0,0 +1,304 @@ +// Real Maneuver SpellId Constants +/* + DW_ Denotes Desert Wind + DS_ Denotes Devoted Spirit + DM_ Denotes Diamond Mind + IH_ Denotes Iron Heart + SS_ Denotes Setting Sun + SH_ Denotes Shadow Hand + SD_ Denotes Stone Dragon + TC_ Denotes Tiger Claw + WR_ Denotes White Raven +*/ + +// Level 1 Maneuvers +const int MOVE_DW_BLISTERING_FLOURISH = 17301; +const int MOVE_DW_BURNING_BLADE = 17302; +const int MOVE_DW_DISTRACTING_EMBER = 17306; +const int MOVE_DW_FLAMES_BLESSING = 17312; +const int MOVE_DW_WIND_STRIDE = 17325; +const int MOVE_DS_CRUSADERS_STRIKE = 17333; +const int MOVE_DS_IRON_GUARDS_GLARE = 17342; +const int MOVE_DS_MARTIAL_SPIRIT = 17344; +const int MOVE_DS_VANGUARD_STRIKE = 17353; +const int MOVE_DM_MOMENT_PERFECT_MIND = 17367; +const int MOVE_DM_SAPPHIRE_NIGHTMARE = 17372; +const int MOVE_DM_STANCE_OF_CLARITY = 17374; +const int MOVE_IH_PUNISHING_STANCE = 17390; +const int MOVE_IH_STEEL_WIND = 17392; +const int MOVE_IH_STEELY_STRIKE = 17393; +const int MOVE_SS_COUNTER_CHARGE = 17401; +const int MOVE_SS_MIGHTY_THROW = 17408; +const int MOVE_SS_STEP_WIND = 17414; +const int MOVE_SH_CHILD_SHADOW = 17420; +const int MOVE_SH_CLINGING_SHADOW = 17421; +const int MOVE_SH_ISLAND_BLADES = 17430; +const int MOVE_SH_SHADOW_BLADE_TECH = 17433; +const int MOVE_SD_CHARGING_MINOTAUR = 17447; +const int MOVE_SD_STONE_BONES = 17461; +const int MOVE_SD_STONEFOOT_STANCE = 17464; +const int MOVE_TC_BLOOD_WATER = 17469; +const int MOVE_TC_HUNTERS_SENSE = 17478; +const int MOVE_TC_SUDDEN_LEAP = 17486; +const int MOVE_TC_WOLF_FANG_STRIKE = 17489; +const int MOVE_WR_BOLSTERING_VOICE = 17493; +const int MOVE_WR_DOUSE_FLAMES = 17496; +const int MOVE_WR_LEADING_ATTACK = 17498; +const int MOVE_WR_LEADING_CHARGE = 17499; + +// Level 2 Maneuvers +const int MOVE_DW_BURNING_BRAND = 17303; +const int MOVE_DW_FIRE_RIPOSTE = 17310; +const int MOVE_DW_FLASHING_SUN = 17313; +const int MOVE_DW_HATCHLINGS_FLAME = 17314; +const int MOVE_DS_FOEHAMMER = 17340; +const int MOVE_DS_SHIELD_BLOCK = 17348; +const int MOVE_DM_ACTION_BEFORE_THOUGHT = 17354; +const int MOVE_DM_EMERALD_RAZOR = 17360; +const int MOVE_IH_DISARMING_STRIKE = 17380; +const int MOVE_IH_WALL_BLADES = 17396; +const int MOVE_SS_BAFFLING_DEFENSE = 17397; +const int MOVE_SS_CLEVER_POSITIONING = 17399; +const int MOVE_SH_CLOAK_DECEPTION = 17422; +const int MOVE_SH_DRAIN_VITALITY = 17425; +const int MOVE_SH_SHADOW_JAUNT = 17436; +const int MOVE_SD_MOUNTAIN_HAMMER = 17457; +const int MOVE_SD_STONE_VISE = 17463; +const int MOVE_TC_CLAW_MOON = 17470; +const int MOVE_TC_RABID_WOLF_STRIKE = 17483; +const int MOVE_WR_BATTLE_LEADERS_CHARGE = 17492; +const int MOVE_WR_TACTICAL_STRIKE = 17505; + +// Level 3 Maneuvers +const int MOVE_DW_DEATH_MARK = 17304; +const int MOVE_DW_FAN_FLAMES = 17308; +const int MOVE_DW_HOLOCAUST_CLOAK = 17315; +const int MOVE_DW_ZEPHYR_DANCE = 17327; +const int MOVE_DS_DEFENSIVE_REBUKE = 17335; +const int MOVE_DS_REVITALIZING_STRIKE = 17347; +const int MOVE_DS_THICKET_BLADES = 17351; +const int MOVE_DM_INSIGHTFUL_STRIKE = 17362; +const int MOVE_DM_MIND_OVER_BODY = 17364; +const int MOVE_DM_PEARL_BLACK_DOUBT = 17368; +const int MOVE_IH_ABSOLUTE_STEEL = 17376; +const int MOVE_IH_EXORCISM_STEEL = 17381; +const int MOVE_IH_IRON_HEART_SURGE = 17385; +const int MOVE_SS_DEVASTATING_THROW = 17402; +const int MOVE_SS_FEIGNED_OPENING = 17403; +const int MOVE_SS_GIANT_KILLING_STYLE = 17406; +const int MOVE_SH_ASSASSINS_STANCE = 17417; +const int MOVE_SH_DANCE_SPIDER = 17423; +const int MOVE_SH_SHADOW_GARROTTE = 17435; +const int MOVE_SH_STRENGTH_DRAINING = 17441; +const int MOVE_SD_BONECRUSHER = 17445; +const int MOVE_SD_CRUSHING_WEIGHT = 17450; +const int MOVE_SD_ROOT_MOUNTAIN = 17460; +const int MOVE_SD_STONE_DRAGONS_FURY = 17462; +const int MOVE_TC_FLESH_RIPPER = 17474; +const int MOVE_TC_LEAPING_DRAGON = 17479; +const int MOVE_TC_SOARING_RAPTOR_STRIKE = 17485; +const int MOVE_TC_WOLVERINE_STANCE = 17491; +const int MOVE_WR_LIONS_ROAR = 17500; +const int MOVE_WR_TACTICS_WOLF = 17506; +const int MOVE_WR_WHITE_RAVEN_TACTICS = 17511; + +// Level 4 Maneuvers +const int MOVE_DW_FIRESNAKE = 17311; +const int MOVE_DW_SEARING_BLADE = 17323; +const int MOVE_DW_SEARING_CHARGE = 17324; +const int MOVE_DS_DIVINE_SURGE = 17336; +const int MOVE_DS_ENTANGLING_BLADE = 17339; +const int MOVE_DM_BOUNDING_ASSAULT = 17356; +const int MOVE_DM_MIND_STRIKE = 17365; +const int MOVE_DM_RUBY_NIGHTMARE_BLADE = 17371; +const int MOVE_IH_LIGHTNING_RECOVERY = 17386; +const int MOVE_IH_MITHRAL_TORNADO = 17389; +const int MOVE_SS_COMET_THROW = 17400; +const int MOVE_SS_STRIKE_BROKEN_SHIELD = 17415; +const int MOVE_SH_HAND_DEATH = 17429; +const int MOVE_SH_OBSCURING_SHADOW_VEIL = 17431; +const int MOVE_SD_BONESPLITTING_STRIKE = 17444; +const int MOVE_SD_BOULDER_ROLL = 17446; +const int MOVE_SD_OVERWHELMING_MOUNTAIN = 17459; +const int MOVE_TC_DEATH_FROM_ABOVE = 17472; +const int MOVE_TC_FOUNTAIN_BLOOD = 17475; +const int MOVE_WR_COVERING_STRIKE = 17495; +const int MOVE_WR_WHITE_RAVEN_STRIKE = 17510; + +// Level 5 Maneuvers +const int MOVE_DW_DRAGONS_FLAME = 17307; +const int MOVE_DW_LEAPING_FLAME = 17318; +const int MOVE_DW_LINGERING_INFERNO = 17319; +const int MOVE_DS_DAUNTING_STRIKE = 17334; +const int MOVE_DS_DOOM_CHARGE = 17338; +const int MOVE_DS_LAW_BEARER = 17343; +const int MOVE_DS_RADIANT_CHARGE = 17345; +const int MOVE_DS_TIDE_CHAOS = 17352; +const int MOVE_DM_DISRUPTING_BLOW = 17359; +const int MOVE_DM_HEARING_AIR = 17361; +const int MOVE_DM_RAPID_COUNTER = 17370; +const int MOVE_IH_DANCING_BLADE_FORM = 17378; +const int MOVE_IH_DAZING_STRIKE = 17379; +const int MOVE_IH_IRON_HEART_FOCUS = 17384; +const int MOVE_SS_MIRRORED_PURSUIT = 17409; +const int MOVE_SS_SHIFTING_DEFENSE = 17411; +const int MOVE_SS_SOARING_THROW = 17412; +const int MOVE_SS_STALKING_SHADOW = 17413; +const int MOVE_SH_BLOODLETTING_STRIKE = 17419; +const int MOVE_SH_SHADOW_STRIDE = 17438; +const int MOVE_SH_STEP_DANCING_MOTH = 17440; +const int MOVE_SD_ELDER_MOUNTAIN_HAMMER = 17452; +const int MOVE_SD_GIANTS_STANCE = 17453; +const int MOVE_SD_MOUNTAIN_AVALANCHE = 17456; +const int MOVE_TC_DANCING_MONGOOSE = 17471; +const int MOVE_TC_POUNCING_CHARGE = 17480; +const int MOVE_WR_FLANKING_MANEUVER = 17497; +const int MOVE_WR_PRESS_ADVANTAGE = 17502; + +// Level 6 Maneuvers +const int MOVE_DW_DESERT_TEMPEST = 17305; +const int MOVE_DW_FIERY_ASSAULT = 17309; +const int MOVE_DW_RING_FIRE = 17320; +const int MOVE_DS_AURA_CHAOS = 17328; +const int MOVE_DS_PERFECT_ORDER = 17329; +const int MOVE_DS_AURA_TRIUMPH = 17330; +const int MOVE_DS_AURA_TYRANNY = 17331; +const int MOVE_DS_RALLYING_STRIKE = 17346; +const int MOVE_DM_GREATER_INSIGHTFUL = 17363; +const int MOVE_DM_MOMENT_ALACRITY = 17366; +const int MOVE_IH_IRON_HEART_ENDURANCE = 17383; +const int MOVE_IH_MANTICORE_PARRY = 17388; +const int MOVE_SS_BALLISTA_THROW = 17398; +const int MOVE_SS_SCORPION_PARRY = 17410; +const int MOVE_SH_GHOST_BLADE = 17428; +const int MOVE_SH_SHADOW_NOOSE = 17437; +const int MOVE_SH_STALKER_NIGHT = 17439; +const int MOVE_SD_CRUSHING_VISE = 17449; +const int MOVE_SD_IRON_BONES = 17454; +const int MOVE_SD_IRRESISTIBLE_MOUNTAIN = 17455; +const int MOVE_TC_RABID_BEAR_STRIKE = 17482; +const int MOVE_TC_WOLF_CLIMBS_MOUNTAIN = 17488; +const int MOVE_WR_ORDER_FROM_CHAOS = 17501; +const int MOVE_WR_WAR_LEADERS_CHARGE = 17507; + +// Level 7 Maneuvers +const int MOVE_DW_INFERNO_BLADE = 17316; +const int MOVE_DW_SALAMANDER_CHARGE = 17322; +const int MOVE_DS_CASTIGATING_STRIKE = 17332; +const int MOVE_DS_SHIELD_COUNTER = 17349; +const int MOVE_DM_AVALANCHE_BLADES = 17355; +const int MOVE_DM_QUICKSILVER_MOTION = 17369; +const int MOVE_IH_FINISHING_MOVE = 17382; +const int MOVE_IH_SCYTHING_BLADE = 17391; +const int MOVE_SS_HYDRA_SLAYING_STRIKE = 17407; +const int MOVE_SH_DEATH_DARK = 17424; +const int MOVE_SH_SHADOW_BLINK = 17434; +const int MOVE_SD_ANCIENT_MOUNTAIN = 17443; +const int MOVE_SD_COLOSSUS_STRIKE = 17448; +const int MOVE_TC_HAMSTRING_ATTACK = 17477; +const int MOVE_TC_PREY_ON_THE_WEAK = 17481; +const int MOVE_TC_SWOOPING_DRAGON = 17487; +const int MOVE_WR_CLARION_CALL = 17494; +const int MOVE_WR_SWARMING_ASSAULT = 17504; + +// Level 8 Maneuvers +const int MOVE_DW_RISING_PHOENIX = 17321; +const int MOVE_DW_WYRMS_FLAME = 17326; +const int MOVE_DS_GREATER_DIVINE_SURGE = 17337; +const int MOVE_DS_IMMORTAL_FORTITUDE = 17341; +const int MOVE_DM_DIAMOND_DEFENSE = 17357; +const int MOVE_DM_DIAMOND_NIGHTMARE = 17358; +const int MOVE_DM_STANCE_ALACRITY = 17373; +const int MOVE_IH_ADAMANTINE_HURRICANE = 17377; +const int MOVE_IH_LIGHTNING_THROW = 17387; +const int MOVE_IH_SUPREME_BLADE_PARRY = 17395; +const int MOVE_SS_FOOLS_STRIKE = 17404; +const int MOVE_SS_GHOSTLY_DEFENSE = 17405; +const int MOVE_SH_BALANCE_SKY = 17418; +const int MOVE_SH_ENERVATING_SHADOW = 17426; +const int MOVE_SH_ONE_WITH_SHADOW = 17432; +const int MOVE_SD_ADAMANTINE_BONES = 17442; +const int MOVE_SD_EARTHSTRIKE_QUAKE = 17451; +const int MOVE_SD_STRENGTH_STONE = 17468; +const int MOVE_TC_GIRALLON_WINDMILL = 17476; +const int MOVE_TC_RAGING_MONGOOSE = 17484; +const int MOVE_TC_WOLF_PACK_TACTICS = 17490; +const int MOVE_WR_SWARM_TACTICS = 17503; +const int MOVE_WR_WHITE_RAVEN_HAMMER = 17509; + +// Level 9 Maneuvers +const int MOVE_DW_INFERNO_BLAST = 17317; +const int MOVE_DS_RIGHTEOUS_VITALITY = 17350; +const int MOVE_DM_TIME_STANDS_STILL = 17375; +const int MOVE_IH_PERFECT_CLARITY = 17394; +const int MOVE_SS_TORNADO_THROW = 17416; +const int MOVE_SH_FIVE_SHADOW_CREEPING = 17427; +const int MOVE_SD_MOUNTAIN_TOMBSTONE = 17458; +const int MOVE_TC_FERAL_DEATH_BLOW = 17473; +const int MOVE_WR_WAR_MASTERS_CHARGE = 17508; + +// AoE Constants +const int AOE_PER_IRON_GUARD_GLARE = 158; +const int AOE_PER_STANCE_OF_CLARITY = 159; +const int AOE_PER_BOLSTERING_VOICE = 160; +const int AOE_PER_LEADING_CHARGE = 161; +const int AOE_PER_ROOT_MOUNTAIN = 164; +const int AOE_PER_TACTICS_WOLF = 165; +const int AOE_PER_DESERT_TEMPEST = 166; +const int AOE_PER_SALAMANDER_CHARGE = 157; +const int AOE_PER_THICKET_BLADES = 251; +const int AOE_PER_AURA_TYRANNY = 252; +const int AOE_PER_SWARM_TACTICS = 253; +const int AOE_PER_MOUNTAIN_FORTRESS = 149; + +// Misc Constants +const int SPELL_AVENGING_STRIKE = -1; +const int FEAT_MARTIAL_STUDY_1 = 24112; +const int FEAT_MARTIAL_STUDY_2 = 24113; +const int FEAT_MARTIAL_STUDY_3 = 24114; +const int FEAT_MARTIAL_STANCE_1 = 24115; +const int FEAT_MARTIAL_STANCE_2 = 24116; +const int FEAT_MARTIAL_STANCE_3 = 24117; +const int FEAT_MARTIAL_STANCE_4 = 24118; +const int FEAT_MARTIAL_STANCE_5 = 24119; +const int FEAT_MARTIAL_STANCE_6 = 24120; +const int FEAT_MARTIAL_STANCE_7 = 24121; +const int FEAT_MARTIAL_STANCE_8 = 24122; +const int FEAT_MARTIAL_STANCE_9 = 24123; +const int FEAT_MARTIAL_STANCE_10 = 24124; + +// Class Specific Constants +const int MOVE_MOUNTAIN_FORTRESS = 2066; +const int MOVE_BLOODCLAW_SHIFT = 2100; + +// Jade Phoenix +const int JPM_SPELL_SELECT_CONVO = 19287; +const int JPM_SPELL_SELECT_QUICK1 = 19288; +const int JPM_SPELL_SELECT_QUICK2 = 19289; +const int JPM_SPELL_SELECT_QUICK3 = 19290; +const int JPM_SPELL_SELECT_QUICK4 = 19291; +const int JPM_SPELL_FIREBIRD_AUGMENTED = 19302; +const int JPM_SPELL_ARCANE_WRATH = 19292; +const int JPM_SPELL_RITE_WAKING_SELF = 19294; +const int FEAT_JPM_EMERALD_IMMOLATION = 24083; + +const int MOVE_MYSTIC_PHOENIX = 19297; +const int MOVE_MYSTIC_PHOENIX_AUG = 19298; +const int MOVE_FIREBIRD_STANCE = 19301; +const int MOVE_FIREBIRD_STANCE_AUG = 19302; + +// Eternal Blade +const int FEAT_ETBL_ETERNAL_TRAINING = 24127; +const int ETBL_MANEUVER_SELECT_CONVO = 19308; +const int ETBL_MANEUVER_SELECT_QUICK1 = 19309; +const int ETBL_MANEUVER_SELECT_QUICK2 = 19310; +const int ETBL_MANEUVER_SELECT_QUICK3 = 19311; +const int ETBL_MANEUVER_SELECT_QUICK4 = 19312; +const int ETBL_RACIAL_TYPE = 19315; +const int ETBL_BLADE_GUIDE = 19303; + +// Shadow Sun Ninja +const int MOVE_CHILD_SL_STANCE = 19327; +const int SSN_FLAMESS_ATTACK = 19322; +const int SSN_VOIDSS_ATTACK = 19326; +const int SSN_BALANCELD_ATTACK = 19329; diff --git a/src/include/tob_movehook.nss b/src/include/tob_movehook.nss new file mode 100644 index 0000000..3ac1493 --- /dev/null +++ b/src/include/tob_movehook.nss @@ -0,0 +1,127 @@ +//:://///////////////////////////////////////////// +//:: Tome of Battle Maneuver Hook File. +//:: tob_movehook.nss +//::////////////////////////////////////////////// +/* + This file acts as a hub for all code that + is hooked into the maneuver scripts for Tome of Battle +*/ +//::////////////////////////////////////////////// +//:: Created By: Stratovarius +//:: Created On: 19-3-2007 +//::////////////////////////////////////////////// + +#include "prc_inc_spells" +#include "inc_utility" +#include "x2_inc_spellhook" + +// This function holds all functions that are supposed to run before the actual +// spellscript gets run. If this functions returns FALSE, the spell is aborted +// and the spellscript will not run +int PreManeuverCastCode(); + +int NullPsionicsField(object oInitiator, object oTarget) +{ + // Null Psionics Field/Anti-Magic Field + if(GetHasSpellEffect(SPELL_ANTIMAGIC_FIELD, oInitiator) + || GetHasSpellEffect(POWER_NULL_PSIONICS_FIELD, oInitiator)) + { + return FALSE; + } + return TRUE; +} + +void AttackManeuverTarget(object oInitiator, object oTarget) +{ + // Don't do anything while outside of combat + if (!GetIsInCombat(oInitiator)) return; + + // If you hit a valid enemy + if (GetIsObjectValid(oTarget) && GetIsEnemy(oTarget)) + AssignCommand(oInitiator, ActionAttack(oTarget)); + else //Otherwise find someone + { + location lTarget = GetLocation(oInitiator); + + // Use the function to get the closest creature as a target + oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE); + while(GetIsObjectValid(oTarget)) + { + if(GetIsEnemy(oTarget)) // Only enemies + { + AssignCommand(oInitiator, ActionAttack(oTarget)); + break; + } + //Select the next target within the spell shape. + oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE); + } + } +} + +//------------------------------------------------------------------------------ +// if FALSE is returned by this function, the spell will not be cast +// the order in which the functions are called here DOES MATTER, changing it +// WILL break the crafting subsystems +//------------------------------------------------------------------------------ +int PreManeuverCastCode() +{ + object oInitiator = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + int nMoveId = PRCGetSpellId(); + int nContinue; + + DeleteLocalInt(oInitiator, "SpellConc"); + nContinue = !ExecuteScriptAndReturnInt("premovecode", oInitiator); + + //--------------------------------------------------------------------------- + // Shutdown maneuvers if the PC blocks delayed damage + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = !GetLocalInt(oInitiator, "CrusaderBreak"); + + //--------------------------------------------------------------------------- + // Run NullPsionicsField Check + //--------------------------------------------------------------------------- + if (nContinue && GetIsManeuverSupernatural(nMoveId)) + nContinue = NullPsionicsField(oInitiator, oTarget); + //--------------------------------------------------------------------------- + // Run Dark Discorporation Check + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = !GetLocalInt(oInitiator, "DarkDiscorporation"); + + //--------------------------------------------------------------------------- + // Swordsage Insightful Strike, grants wisdom to damage on maneuvers + // Test and local to avoid spaghetti monster + //--------------------------------------------------------------------------- + if (GetLevelByClass(CLASS_TYPE_SWORDSAGE, oInitiator) >= 4) + { + if(GetHasInsightfulStrike(oInitiator)) SetLocalInt(oInitiator, "InsightfulStrike", TRUE); + DelayCommand(2.0, DeleteLocalInt(oInitiator, "InsightfulStrike")); + } + //--------------------------------------------------------------------------- + // Blade Meditation, +1 damage with the preferred weapons of chosen discipline + // Test and local to avoid spaghetti monster + //--------------------------------------------------------------------------- + if (BladeMeditationDamage(oInitiator, nMoveId)) + { + SetLocalInt(oInitiator, "BladeMeditationDamage", TRUE); + DelayCommand(2.0, DeleteLocalInt(oInitiator, "BladeMeditationDamage")); + } + //--------------------------------------------------------------------------- + // Instant Clarity, gain psionic focus when successfully initiating a strike + // Test and local to avoid spaghetti monster + //--------------------------------------------------------------------------- + if (GetManeuverType(nMoveId) == MANEUVER_TYPE_STRIKE && nContinue && GetHasFeat(FEAT_INSTANT_CLARITY, oInitiator)) + { + SetLocalInt(oInitiator, "InstantClaritySwitch", 2); + ExecuteScript("tob_ft_istntclty", oInitiator); + } + + float fDistance = MetersToFeet(GetDistanceBetweenLocations(GetLocation(oInitiator), GetLocation(oTarget))); + float fDelay = FeetToMeters(fDistance)/10; + DelayCommand(fDelay+0.25f, AttackManeuverTarget(oInitiator, oTarget)); + + return nContinue; +} + diff --git a/src/include/true_inc_metautr.nss b/src/include/true_inc_metautr.nss new file mode 100644 index 0000000..d35f622 --- /dev/null +++ b/src/include/true_inc_metautr.nss @@ -0,0 +1,216 @@ +//:://///////////////////////////////////////////// +//:: Truenaming include: Metautterances +//:: true_inc_metautr +//:://///////////////////////////////////////////// +/** @file + Defines functions for handling metautterances + + @author Stratovarius + @date Created - 2006.7.17 + @thanks to Ornedan for his work on Psionics upon which this is based. +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +/// No metautterances +const int METAUTTERANCE_NONE = 0x0; +/// Quicken utterance +const int METAUTTERANCE_QUICKEN = 0x2; +/// Empower utterance +const int METAUTTERANCE_EMPOWER = 0x4; +/// Extend utterance +const int METAUTTERANCE_EXTEND = 0x8; + +/// Internal constant. Value is equal to the lowest metautterance constant. Used when looping over metautterance flag variables +const int METAUTTERANCE_MIN = 0x2; +/// Internal constant. Value is equal to the highest metautterance constant. Used when looping over metautterance flag variables +const int METAUTTERANCE_MAX = 0x8; + +/// Empower Utterance variable name +const string METAUTTERANCE_EMPOWER_VAR = "PRC_TrueMeta_Empower"; +/// Extend Utterance variable name +const string METAUTTERANCE_EXTEND_VAR = "PRC_TrueMeta_Extend"; +/// Quicken Utterance variable name +const string METAUTTERANCE_QUICKEN_VAR = "PRC_TrueMeta_Quicken"; + + +/// The name of a marker variable that tells that the Utterance being truespoken had Quicken Utterance used on it +const string PRC_UTTERANCE_IS_QUICKENED = "PRC_UtteranceIsQuickened"; + +////////////////////////////////////////////////// +/* Structures */ +////////////////////////////////////////////////// + +/** + * A structure that contains common data used during utterance. + */ +struct utterance{ + /* Generic stuff */ + /// The creature Truespeaking the Utterance + object oTrueSpeaker; + /// Whether the utterance is successful or not + int bCanUtter; + /// The creature's truespeaker level in regards to this utterance + int nTruespeakerLevel; + /// The utterance's spell ID + int nSpellId; + /// The DC for speaking the utterance + int nUtterDC; + // Used to mark friendly utterances + int bIgnoreSR; + + /* Metautterances */ + /// Whether Empower utterance was used with this utterance + int bEmpower; + /// Whether Extend utterance was used with this utterance + int bExtend; + /// Whether Quicken utterance was used with this utterance + int bQuicken; + + /* Speak Unto the Masses */ + // Check if the target is a friend of not + int bFriend; + // Saving Throw DC + int nSaveDC; + // Saving Throw + int nSaveThrow; + // Saving Throw Type + int nSaveType; + // Spell Pen + int nPen; + // Duration Effects + effect eLink; + // Impact Effects + effect eLink2; + // Any Item Property + itemproperty ipIProp1; + // Any Item Property + itemproperty ipIProp2; + // Any Item Property + itemproperty ipIProp3; + // Duration + float fDur; +}; + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Determines the metautterances used in this utterance of a utterance + * and the cost added by their use. + * + * @param utter The utterance data related to this particular utterance + * @param nMetaUtterFlags An integer containing a set of bitflags that determine + * which metautterance utterances may be used with the Utterance being truespoken + * + * @return The utterance data, modified to account for the metautterances + */ +struct utterance EvaluateMetautterances(struct utterance utter, int nMetaUtterFlags); + +/** + * Calculates a utterance's damage based on the given dice and metautterances. + * + * @param nDieSize Size of the dice to use + * @param nNumberOfDice Amount of dice to roll + * @param manif The utterance data related to this particular utterance + * @param nBonus A bonus amount of damage to add into the total once + * @param nBonusPerDie A bonus amount of damage to add into the total for each die rolled + * @param bDoesHPDamage Whether the Utterance deals hit point damage, or some other form of point damage + * @param bIsRayOrRangedTouch Whether the utterance's use involves a ranged touch attack roll or not + * @return The amount of damage the Utterance should deal + */ +int MetautterancesDamage(struct utterance utter, int nDieSize, int nNumberOfDice, int nBonus = 0, + int nBonusPerDie = 0, int bDoesHPDamage = FALSE, int bIsRayOrRangedTouch = FALSE); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "inc_utility" +//#include "true_inc_utter" + + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +struct utterance EvaluateMetautterances(struct utterance utter, int nMetaUtterFlags) +{ + // Total PP cost of metautterances used + int nUtterDC = 0; + // A debug variable to make a Utterance ignore normal use constraints + int bIgnoreConstr = (DEBUG) ? GetLocalInt(utter.oTrueSpeaker, TRUE_DEBUG_IGNORE_CONSTRAINTS) : FALSE; + + /* Calculate the added DC from metautterances and set the use markers for the utterances used */ + + // Quicken Utterance - special handling + if(GetLocalInt(utter.oTrueSpeaker, PRC_UTTERANCE_IS_QUICKENED)) + { + // Add the DC Boost and mark the utterance as quickened here + nUtterDC += 20; + utter.bQuicken = TRUE; + + // Delete the marker var + DeleteLocalInt(utter.oTrueSpeaker, PRC_UTTERANCE_IS_QUICKENED); + } + + if((nMetaUtterFlags & METAUTTERANCE_EMPOWER) && GetLocalInt(utter.oTrueSpeaker, METAUTTERANCE_EMPOWER_VAR)) + { + // Add the DC Boost and mark the utterance as empowered here + nUtterDC += 10; + utter.bEmpower = TRUE; + } + if((nMetaUtterFlags & METAUTTERANCE_EXTEND) && GetLocalInt(utter.oTrueSpeaker, METAUTTERANCE_EXTEND_VAR)) + { + // Add the DC Boost and mark the utterance as extended here + nUtterDC += 5; + utter.bExtend = TRUE; + } + + // Add in the DC boost of the metautterances + utter.nUtterDC += nUtterDC; + + return utter; +} + +int MetautterancesDamage(struct utterance utter, int nDieSize, int nNumberOfDice, int nBonus = 0, + int nBonusPerDie = 0, int bDoesHPDamage = FALSE, int bIsRayOrRangedTouch = FALSE) +{ + int nBaseDamage = 0, + nBonusDamage = nBonus + (nNumberOfDice * nBonusPerDie); + + // Calculate the base damage + int i; + for (i = 0; i < nNumberOfDice; i++) + nBaseDamage += Random(nDieSize) + 1; + + + // Apply general modifying effects + if(bDoesHPDamage) + { + if(bIsRayOrRangedTouch) + { + // Anything that affects Ray Utterances goes here + } + } + + // Apply metautterances + // Empower + if(utter.bEmpower) + nBaseDamage += nBaseDamage / 2; + + return nBaseDamage + nBonusDamage; +} + +// Test main +//void main(){} diff --git a/src/include/true_inc_truespk.nss b/src/include/true_inc_truespk.nss new file mode 100644 index 0000000..7523024 --- /dev/null +++ b/src/include/true_inc_truespk.nss @@ -0,0 +1,524 @@ +//:://///////////////////////////////////////////// +//:: Truenaming include: Truespeaking +//:: true_inc_truespk +//:://///////////////////////////////////////////// +/** @file + Defines functions for handling truespeaking. + + @author Stratovarius + @date Created - 2006.18.07 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Returns the base DC of an Utterance. + * This is where the various formulas can be chosen by switch + * Accounts for Speak Unto the Masses if used + * + * @param oTarget Target of the Utterance + * @param oTrueSpeaker Caster of the Utterance + * @param nLexicon Type of the Utterance: Evolving Mind, Crafted Tool, or Perfected Map + * @return The base DC via formula to hit the target + * This does not include MetaUtterances, increased DC to ignore SR, or the Laws. + */ +int GetBaseUtteranceDC(object oTarget, object oTrueSpeaker, int nLexicon); + +/** + * Returns the Law of Resistance DC increase + * + * @param oTrueSpeaker Caster of the Utterance + * @param nSpellId SpellId of the Utterance + * @return The DC boost for this particular power from the Law of Resistance + */ +int GetLawOfResistanceDCIncrease(object oTrueSpeaker, int nSpellId); + +/** + * Stores the Law Of Resistance DC increase + * + * @param oTrueSpeaker Caster of the Utterance + * @param nSpellId SpellId of the Utterance + */ +void DoLawOfResistanceDCIncrease(object oTrueSpeaker, int nSpellId); + +/** + * Deletes all of the Local Ints stored by the laws. + * Called OnRest and OnEnter + * + * @param oTrueSpeaker Caster of the Utterance + */ +void ClearLawLocalVars(object oTrueSpeaker); + +/** + * Returns the Personal Truename DC increase + * Right now this accounts for targeting self + * This also adds in the Acolyte of the Ego Alter Personal Truename + * + * @param oTrueSpeaker Caster of the Utterance + * @param oTarget Target of the Utterance + * @return The DC boost for using a personal truename + */ +int AddPersonalTruenameDC(object oTrueSpeaker, object oTarget); + +/** + * Returns the DC increase if the TrueSpeaker ignores SR. + * + * @param oTrueSpeaker Caster of the Utterance + * @return The DC boost for using this ability + */ +int AddIgnoreSpellResistDC(object oTrueSpeaker); + +/** + * Returns the DC increase from specific utterances + * + * @param oTrueSpeaker Caster of the Utterance + * @return The DC boost for using this ability + */ +int AddUtteranceSpecificDC(object oTrueSpeaker); + +/** + * Returns the DC used for the Recitation feats + * This is a simplified version of the GetBaseUtteranceDC function + * + * @param oTrueSpeaker Caster/Target of the Recitation + * @return The DC to speak + */ +int GetRecitationDC(object oTrueSpeaker); + +/* + * Returns TRUE if it is a Syllable (Bereft class ability). + * @param nSpellId Utterance to check + * + * @return TRUE or FALSE + */ +int GetIsSyllable(int nSpellId); + +/* + * Returns TRUE if the Truespeaker passes a Truespeak check to affect the target + * @param nPersonal Personal Truename DC or not + * + * @return TRUE or FALSE + */ +int DoSpellTruenameCheck(object oTrueSpeaker, object oTarget, int nPersonal = FALSE); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "prc_inc_spells" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +int GetCraftedToolCR(object oItem) +{ + int nID=0; + if (!GetIdentified(oItem)) + { + nID=1; + SetIdentified(oItem,TRUE); + } + int nGold = GetGoldPieceValue(oItem); + // If none of the statements trigger, the base is 0 (i.e, non-magical) + int nLore = 0; + + if (nGold>1001) nLore= 1; + if (nGold>2501) nLore= 2; + if (nGold>3751) nLore= 3; + if (nGold>4801) nLore= 4; + if (nGold>6501) nLore= 5; + if (nGold>9501) nLore= 6; + if (nGold>13001) nLore= 7; + if (nGold>17001) nLore= 8; + if (nGold>20001) nLore= 9; + if (nGold>30001) nLore= 10; + if (nGold>40001) nLore= 11; + if (nGold>50001) nLore= 12; + if (nGold>60001) nLore= 13; + if (nGold>80001) nLore= 14; + if (nGold>100001) nLore= 15; + if (nGold>150001) nLore= 16; + if (nGold>200001) nLore= 17; + if (nGold>250001) nLore= 18; + if (nGold>300001) nLore= 19; + if (nGold>350001) nLore= 20; + if (nGold>400001) nLore= 21; + if (nGold>500001) + { + nGold = nGold - 500000; + nGold = nGold / 100000; + nLore = nGold + 22; + } + if (nID) SetIdentified(oItem,FALSE); + return nLore; +} + +/** + * Takes the REVERSE SpellId of an Utterance and returns the NORMAL + * This is used for the Law of Resistance and the Law of Sequence so its always stored on the one SpellId + * + * @param nSpellId SpellId of the Utterance + * @return string SpellId of the NORMAL Utterance + */ +string GetNormalUtterSpellId(int nSpellId) +{ + //All utterances have their 'normal' id in master column in spells.2da + string nReturn = Get2DACache("spells", "Master", nSpellId); + if (1 > StringToInt(nReturn)) nReturn = IntToString(nSpellId); // SpellId invalid for the Master column + + return nReturn; + +/* // Level 1 Utterances + if (nSpellId == UTTER_DEFENSIVE_EDGE_R || nSpellId == UTTER_DEFENSIVE_EDGE) return UTTER_DEFENSIVE_EDGE; + else if (nSpellId == UTTER_INERTIAL_SURGE_R || nSpellId == UTTER_INERTIAL_SURGE) return UTTER_INERTIAL_SURGE; + else if (nSpellId == UTTER_KNIGHTS_PUISSANCE_R || nSpellId == UTTER_KNIGHTS_PUISSANCE) return UTTER_KNIGHTS_PUISSANCE; + else if (nSpellId == UTTER_UNIVERSAL_APTITUDE_R || nSpellId == UTTER_UNIVERSAL_APTITUDE) return UTTER_UNIVERSAL_APTITUDE; + else if (nSpellId == UTTER_WORD_NURTURING_MINOR_R || nSpellId == UTTER_WORD_NURTURING_MINOR) return UTTER_WORD_NURTURING_MINOR; + else if (nSpellId == UTTER_FORTIFY_ARMOUR_SNEAK || nSpellId == UTTER_FORTIFY_ARMOUR_CRIT) return UTTER_FORTIFY_ARMOUR_SNEAK; + else if (nSpellId == UTTER_FOG_VOID_CLOUD || nSpellId == UTTER_FOG_VOID_SOLID) return UTTER_FOG_VOID_CLOUD; + + // Level 2 Utterances + else if (nSpellId == UTTER_ARCHERS_EYE_R || nSpellId == UTTER_ARCHERS_EYE) return UTTER_ARCHERS_EYE; + else if (nSpellId == UTTER_HIDDEN_TRUTH_R || nSpellId == UTTER_HIDDEN_TRUTH) return UTTER_HIDDEN_TRUTH; + else if (nSpellId == UTTER_PERCEIVE_UNSEEN_R || nSpellId == UTTER_PERCEIVE_UNSEEN) return UTTER_PERCEIVE_UNSEEN; + else if (nSpellId == UTTER_SILENT_CASTER_R || nSpellId == UTTER_SILENT_CASTER) return UTTER_SILENT_CASTER; + else if (nSpellId == UTTER_SPEED_ZEPHYR_R || nSpellId == UTTER_SPEED_ZEPHYR) return UTTER_SPEED_ZEPHYR; + else if (nSpellId == UTTER_STRIKE_MIGHT_R || nSpellId == UTTER_STRIKE_MIGHT) return UTTER_STRIKE_MIGHT; + else if (nSpellId == UTTER_TEMPORAL_TWIST_R || nSpellId == UTTER_TEMPORAL_TWIST) return UTTER_TEMPORAL_TWIST; + else if (nSpellId == UTTER_WORD_NURTURING_LESSER_R || nSpellId == UTTER_WORD_NURTURING_LESSER) return UTTER_WORD_NURTURING_LESSER; + else if (nSpellId == UTTER_AGITATE_ITEM_HOT || nSpellId == UTTER_AGITATE_ITEM_COLD) return UTTER_AGITATE_ITEM_HOT; + else if (nSpellId == UTTER_ENERGY_VORTEX_ACID || nSpellId == UTTER_ENERGY_VORTEX_COLD || nSpellId == UTTER_ENERGY_VORTEX_ELEC || nSpellId == UTTER_ENERGY_VORTEX_FIRE) return UTTER_ENERGY_VORTEX_ACID; + + // Level 3 Utterances + else if (nSpellId == UTTER_ACCELERATED_ATTACK_R || nSpellId == UTTER_ACCELERATED_ATTACK) return UTTER_ACCELERATED_ATTACK; + else if (nSpellId == UTTER_ENERGY_NEGATION_R || nSpellId == UTTER_ENERGY_NEGATION || nSpellId == UTTER_ENERGY_NEGATION_CHOICE) return UTTER_ENERGY_NEGATION; + else if (nSpellId == UTTER_INCARNATION_ANGELS_R || nSpellId == UTTER_INCARNATION_ANGELS) return UTTER_INCARNATION_ANGELS; + else if (nSpellId == UTTER_SPEED_ZEPHYR_GREATER_R || nSpellId == UTTER_SPEED_ZEPHYR_GREATER) return UTTER_SPEED_ZEPHYR_GREATER; + else if (nSpellId == UTTER_TEMPORAL_SPIRAL_R || nSpellId == UTTER_TEMPORAL_SPIRAL) return UTTER_TEMPORAL_SPIRAL; + else if (nSpellId == UTTER_VISION_SHARPENED_R || nSpellId == UTTER_VISION_SHARPENED) return UTTER_VISION_SHARPENED; + else if (nSpellId == UTTER_WORD_NURTURING_MODERATE_R || nSpellId == UTTER_WORD_NURTURING_MODERATE) return UTTER_WORD_NURTURING_MODERATE; + + // Level 4 Utterances + else if (nSpellId == UTTER_BREATH_CLEANSING_R || nSpellId == UTTER_BREATH_CLEANSING) return UTTER_BREATH_CLEANSING; + else if (nSpellId == UTTER_CASTER_LENS_R || nSpellId == UTTER_CASTER_LENS) return UTTER_CASTER_LENS; + else if (nSpellId == UTTER_CONFOUNDING_RESISTANCE_R || nSpellId == UTTER_CONFOUNDING_RESISTANCE) return UTTER_CONFOUNDING_RESISTANCE; + else if (nSpellId == UTTER_MORALE_BOOST_R || nSpellId == UTTER_MORALE_BOOST) return UTTER_MORALE_BOOST; + else if (nSpellId == UTTER_MAGICAL_CONTRACTION_R || nSpellId == UTTER_MAGICAL_CONTRACTION) return UTTER_MAGICAL_CONTRACTION; + else if (nSpellId == UTTER_SPELL_REBIRTH_R || nSpellId == UTTER_SPELL_REBIRTH) return UTTER_SPELL_REBIRTH; + else if (nSpellId == UTTER_WORD_NURTURING_POTENT_R || nSpellId == UTTER_WORD_NURTURING_POTENT) return UTTER_WORD_NURTURING_POTENT; + + // Level 5 Utterances + else if (nSpellId == UTTER_ELDRITCH_ATTRACTION_R || nSpellId == UTTER_ELDRITCH_ATTRACTION) return UTTER_ELDRITCH_ATTRACTION; + else if (nSpellId == UTTER_ENERGY_NEGATION_GREATER_R || nSpellId == UTTER_ENERGY_NEGATION_GREATER || nSpellId == UTTER_ENERGY_NEGATION_GREATER_CHOICE) return UTTER_ENERGY_NEGATION_GREATER; + else if (nSpellId == UTTER_ESSENCE_LIFESPARK_R || nSpellId == UTTER_ESSENCE_LIFESPARK) return UTTER_ESSENCE_LIFESPARK; + else if (nSpellId == UTTER_PRETERNATURAL_CLARITY_ATTACK || nSpellId == UTTER_PRETERNATURAL_CLARITY_SKILL || nSpellId == UTTER_PRETERNATURAL_CLARITY_SAVE || nSpellId == UTTER_PRETERNATURAL_CLARITY_R) return UTTER_PRETERNATURAL_CLARITY_ATTACK; + else if (nSpellId == UTTER_SENSORY_FOCUS_R || nSpellId == UTTER_SENSORY_FOCUS) return UTTER_SENSORY_FOCUS; + else if (nSpellId == UTTER_WARD_PEACE_R || nSpellId == UTTER_WARD_PEACE) return UTTER_WARD_PEACE; + else if (nSpellId == UTTER_WORD_NURTURING_CRITICAL_R || nSpellId == UTTER_WORD_NURTURING_CRITICAL) return UTTER_WORD_NURTURING_CRITICAL; + else if (nSpellId == UTTER_METAMAGIC_CATALYST_EMP || nSpellId == UTTER_METAMAGIC_CATALYST_EXT || nSpellId == UTTER_METAMAGIC_CATALYST_MAX) return UTTER_METAMAGIC_CATALYST_EMP; + + // Level 6 Utterances + else if (nSpellId == UTTER_BREATH_RECOVERY_R || nSpellId == UTTER_BREATH_RECOVERY) return UTTER_BREATH_RECOVERY; + else if (nSpellId == UTTER_ETHER_REFORGED_R || nSpellId == UTTER_ETHER_REFORGED) return UTTER_ETHER_REFORGED; + else if (nSpellId == UTTER_KNIGHTS_PUISSANCE_GREATER_R || nSpellId == UTTER_KNIGHTS_PUISSANCE_GREATER) return UTTER_KNIGHTS_PUISSANCE_GREATER; + else if (nSpellId == UTTER_MYSTIC_RAMPART_R || nSpellId == UTTER_MYSTIC_RAMPART) return UTTER_MYSTIC_RAMPART; + else if (nSpellId == UTTER_SINGULAR_MIND_R || nSpellId == UTTER_SINGULAR_MIND) return UTTER_SINGULAR_MIND; + else if (nSpellId == UTTER_WORD_NURTURING_GREATER_R || nSpellId == UTTER_WORD_NURTURING_GREATER) return UTTER_WORD_NURTURING_GREATER; + + // Class abilities + else if (nSpellId == SYLLABLE_AFFLICATION_SIGHT || nSpellId == SYLLABLE_AFFLICATION_SOUND || nSpellId == SYLLABLE_AFFLICATION_TOUCH) return SYLLABLE_AFFLICATION_SIGHT; + else if (nSpellId == BRIMSTONE_FIRE_3D6 || nSpellId == BRIMSTONE_FIRE_5D6 || nSpellId == BRIMSTONE_FIRE_8D6) return BRIMSTONE_FIRE_3D6; + else if (nSpellId == BRIMSTONE_HEAVEN_LESSER || nSpellId == BRIMSTONE_HEAVEN_NORMAL || nSpellId == BRIMSTONE_HEAVEN_GREATER) return BRIMSTONE_HEAVEN_LESSER; + + // This is the return for those with no reverse. + return nSpellId;*/ +} + +int GetSwitchAdjustedDC(int nCR, int nTargets, object oTrueSpeaker) +{ + int nClass = GetLevelByClass(CLASS_TYPE_TRUENAMER, oTrueSpeaker); + int nDC = 15 + (2 * nCR) + (2 * nTargets); + // Default is 0, off + int nMulti = GetPRCSwitch(PRC_TRUENAME_CR_MULTIPLIER); + int nBonus = GetPRCSwitch(PRC_TRUENAME_LEVEL_BONUS); + int nConst = GetPRCSwitch(PRC_TRUENAME_DC_CONSTANT); + // nMulti is stored as an int, divide by 100 to get the float + if(nMulti) nDC = FloatToInt(15 + ((IntToFloat(nMulti)/100) * nCR) + (2 * nTargets)); + if(nBonus) nDC -= nClass/nBonus; + // Remove the existing constant and add the new one + if(nConst) nDC = (nDC - 15) + nConst; + + return nDC; +} + +int GetFeatAdjustedDC(object oTrueSpeaker) +{ + int nDC = 0; + // Check for both, not either or + if(GetHasFeat(FEAT_SKILL_FOCUS_TRUESPEAK, oTrueSpeaker)) nDC += 3; + if(GetHasFeat(FEAT_EPIC_SKILL_FOCUS_TRUESPEAK, oTrueSpeaker)) nDC += 10; + if(GetHasFeat(FEAT_TEMPLATE_SAINT_HOLY_POWER, oTrueSpeaker)) + { + if (GetAlignmentGoodEvil(oTrueSpeaker) == ALIGNMENT_GOOD) + { + nDC += 2; + } + else + { + nDC += 0; + } + } + return nDC; +} + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int GetBaseUtteranceDC(object oTarget, object oTrueSpeaker, int nLexicon) +{ + int nDC; + + // We're targetting a creature + if (nLexicon == LEXICON_EVOLVING_MIND) + { + // Check for Speak Unto the Masses. Syllables use the Evolving Mind formula, but can't Speak Unto Masses + if (GetLocalInt(oTrueSpeaker, TRUE_SPEAK_UNTO_MASSES) && !GetIsSyllable(PRCGetSpellId())) + { + if(DEBUG) DoDebug("GetBaseUtteranceDC: Entered"); + // Speak to the Masses affects all creatures of the same race in the AoE + // Grants a +2 DC for each of them + int nRacial = MyPRCGetRacialType(oTarget); + // The creature with the same race as the target and the highest CR is used as the base + // So we loop through and count all the targets, as well as figure out the highest CR + int nMaxCR = FloatToInt(GetChallengeRating(oTarget)); + int nCurCR, nTargets; + if(DEBUG) DoDebug("GetBaseUtteranceDC: Variables"); + + // Loop over targets + object oAreaTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), GetLocation(oTarget), TRUE, OBJECT_TYPE_CREATURE); + while(GetIsObjectValid(oAreaTarget)) + { + if(DEBUG) DoDebug("GetBaseUtteranceDC: While"); + // Skip the original target, it doesn't count as a target + if (oAreaTarget != oTarget) + { + if(DEBUG) DoDebug("GetBaseUtteranceDC: Continue"); + + // Targeting limitations + if(MyPRCGetRacialType(oAreaTarget) == nRacial) + { + if(DEBUG) DoDebug("GetBaseUtteranceDC: race check"); + // CR Check + nCurCR = FloatToInt(GetChallengeRating(oAreaTarget)); + // Update if you find something bigger + if (nCurCR > nMaxCR) nMaxCR = nCurCR; + // Increment Targets + nTargets++; + }// end if - Targeting check + } + + // Get next target + if(DEBUG) DoDebug("GetBaseUtteranceDC: Next Target"); + oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), GetLocation(oTarget), TRUE, OBJECT_TYPE_CREATURE); + }// end while - Target loop + + // Runs the function just above this that adjusts based on switches + nDC = GetSwitchAdjustedDC(nMaxCR, nTargets, oTrueSpeaker); + } // end if - Speak unto the Masses check + else // Single Target Utterance. The normal result + { + // CR does not take into account floats, so this is converted. + int nCR = FloatToInt(GetChallengeRating(oTarget)); + // For PCs, use their HitDice + if (GetIsPC(oTarget)) nCR = GetHitDice(oTarget); + // Runs the function just above this that adjusts based on switches + nDC = GetSwitchAdjustedDC(nCR, 0, oTrueSpeaker); + } + } + // Targetting an Item here + else if (nLexicon == LEXICON_CRAFTED_TOOL) + { + // The formula isn't finished, because there isn't caster level on NWN items. + int nCasterLvl = GetCraftedToolCR(oTarget); + nDC = 15 + (2 * nCasterLvl); + } + // Targetting the land + else if (nLexicon == LEXICON_PERFECTED_MAP) + { + // Default is 0, off + int nMulti = GetPRCSwitch(PRC_PERFECTED_MAP_MULTIPLIER); + int nConst = GetPRCSwitch(PRC_PERFECTED_MAP_CONSTANT); + + // Using Errata formula to prevent abuses + nDC = 25 + (GetUtteranceLevel(oTrueSpeaker) * 2); + + // nMulti is stored as an int + if(nMulti) nDC = 25 + (GetUtteranceLevel(oTrueSpeaker) * nMulti); + // Remove the existing constant and add the new one + if(nConst) nDC = (nDC - 25) + nConst; + } + // Check to see if the PC has either of the Skill Focus feats. + // If so, subtract (They are a bonus to the PC) from the DC roll + nDC -= GetFeatAdjustedDC(oTrueSpeaker); + + return nDC; +} + +int GetLawOfResistanceDCIncrease(object oTrueSpeaker, int nSpellId) +{ + // This makes sure everything is stored using the Normal, and not the reverse + // Law of resistance is stored for each utterance by SpellId + int nDC = GetLocalInt(oTrueSpeaker, LAW_OF_RESIST_VARNAME + GetNormalUtterSpellId(nSpellId)); + // Its stored by the number of succesful attempts, so we double it to get the DC boost + nDC = nDC * 2; + + if (GetPRCSwitch(PRC_LAW_OF_RESISTANCE)) nDC = 0; + return nDC; +} + +void DoLawOfResistanceDCIncrease(object oTrueSpeaker, int nSpellId) +{ + // This makes sure everything is stored using the Normal, and not the reverse + string sSpellId = GetNormalUtterSpellId(nSpellId); + // Law of resistance is stored for each utterance by SpellId + int nNum = GetLocalInt(oTrueSpeaker, LAW_OF_RESIST_VARNAME + sSpellId); + // Store the number of times per day its been cast succesfully + SetLocalInt(oTrueSpeaker, LAW_OF_RESIST_VARNAME + sSpellId, (nNum + 1)); +} + +void ClearLawLocalVars(object oTrueSpeaker) +{ + // As long as the PC isn't a truenamer, don't run this. + if (GetLevelByClass(CLASS_TYPE_TRUENAMER, oTrueSpeaker)) + { + // Law of resistance is stored for each utterance by SpellId + // So we loop em all and blow em away + // Because there are only about 60, this should not TMI + // i is the SpellId + // Replace numbers when done + int i; + for(i = 3526; i < 3639; i++) + { + DeleteLocalInt(oTrueSpeaker, LAW_OF_RESIST_VARNAME + IntToString(i)); + DeleteLocalInt(oTrueSpeaker, LAW_OF_SEQUENCE_VARNAME + IntToString(i)); + } + } + // As long as the PC isn't a brimstone speaker, don't run this. + if (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oTrueSpeaker)) + { + // Law of resistance is stored for class features by SpellId + // So we loop em all and blow em away + // i is the SpellId + // Replace numbers when done + int i; + for(i = 3426; i < 3431; i++) + { + DeleteLocalInt(oTrueSpeaker, LAW_OF_RESIST_VARNAME + IntToString(i)); + DeleteLocalInt(oTrueSpeaker, LAW_OF_SEQUENCE_VARNAME + IntToString(i)); + } + } + // As long as the PC isn't a bereft, don't run this. + if (GetLevelByClass(CLASS_TYPE_BEREFT, oTrueSpeaker)) + { + // Law of resistance is stored for each utterance by SpellId + // So we loop em all and blow em away + // Because there are only about 60, this should not TMI + // i is the SpellId + // Replace numbers when done + int i; + for(i = 3418; i < 3425; i++) + { + DeleteLocalInt(oTrueSpeaker, LAW_OF_RESIST_VARNAME + IntToString(i)); + DeleteLocalInt(oTrueSpeaker, LAW_OF_SEQUENCE_VARNAME + IntToString(i)); + } + } +} + +int AddPersonalTruenameDC(object oTrueSpeaker, object oTarget) +{ + // Targetting yourself increases the DC by 2 + // But you get a +4 Bonus to speak your own truename + // Total Adjustment: -2 + int nDC = oTrueSpeaker == oTarget ? -2 : 0; + + ///Increase the DC by 4 + if (GetLevelByClass(CLASS_TYPE_ACOLYTE_EGO, oTrueSpeaker) > 6 && oTrueSpeaker != oTarget) nDC += 4; + ///Increase the DC by another 4 + if (GetLevelByClass(CLASS_TYPE_ACOLYTE_EGO, oTrueSpeaker) > 8 && oTrueSpeaker != oTarget) nDC += 4; + + return nDC; +} + +int AddIgnoreSpellResistDC(object oTrueSpeaker) +{ + int nDC = GetLocalInt(oTrueSpeaker, TRUE_IGNORE_SR) ? 5 : 0; + + return nDC; +} + +int AddUtteranceSpecificDC(object oTrueSpeaker) +{ + int nDC = 0; + int nSpellID = PRCGetSpellId(); + // When using this utterance you add +10 to the DC to make yourself immune to crits + if(nSpellID == UTTER_FORTIFY_ARMOUR_CRIT) nDC += 10; + // When using this utterance you add +10 to the DC to maximize a potion or scroll + if(nSpellID == UTTER_METAMAGIC_CATALYST_MAX) nDC += 10; + // When using this utterance you add +10 to the DC to create a solid fog spell + if(nSpellID == UTTER_FOG_VOID_SOLID) nDC += 10; + + return nDC; +} + +int GetRecitationDC(object oTrueSpeaker) +{ + int nCR = GetHitDice(oTrueSpeaker); + // Formula for the DC. The -2 is from speak your own Truename. See AddPersonalTruenameDC + int nDC = 15 + (2 * nCR) - 2; + + return nDC; +} + +int GetIsSyllable(int nSpellId) +{ + switch(nSpellId) + { + case SYLLABLE_DETACHMENT: + case SYLLABLE_AFFLICATION_SIGHT: + case SYLLABLE_AFFLICATION_SOUND: + case SYLLABLE_AFFLICATION_TOUCH: + case SYLLABLE_EXILE: + case SYLLABLE_DISSOLUTION: + case SYLLABLE_ENERVATION: + return TRUE; + } + + return FALSE; +} + +int DoSpellTruenameCheck(object oTrueSpeaker, object oTarget, int nPersonal = FALSE) +{ + // CR does not take into account floats, so this is converted. + int nCR = FloatToInt(GetChallengeRating(oTarget)); + // For PCs, use their HitDice + if (GetIsPC(oTarget)) nCR = GetHitDice(oTarget); + // Runs the function just above this that adjusts based on switches + int nDC = GetSwitchAdjustedDC(nCR, 0, oTrueSpeaker); + // DC change for targeting self and using a Personal Truename + if (nPersonal) + nDC += AddPersonalTruenameDC(oTrueSpeaker, oTarget); + + if(GetIsSkillSuccessful(oTrueSpeaker, SKILL_TRUESPEAK, nDC)) return TRUE; + + return FALSE; +} diff --git a/src/include/true_inc_trufunc.nss b/src/include/true_inc_trufunc.nss new file mode 100644 index 0000000..355783a --- /dev/null +++ b/src/include/true_inc_trufunc.nss @@ -0,0 +1,839 @@ +//:://///////////////////////////////////////////// +//:: Truenaming include: Misceallenous +//:: true_inc_trufunc +//:://///////////////////////////////////////////// +/** @file + Defines various functions and other stuff that + do something related to the truenaming implementation. + + Also acts as inclusion nexus for the general + truenaming includes. In other words, don't include + them directly in your scripts, instead include this. + + @author Stratovarius + @date Created - 2006.7.18 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +//:: Updated for .35 by Jaysyn 2023/03/11 + +//:: Test Void +//void main (){} + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Determines from what class's Utterance list the currently being truespoken + * Utterance is truespoken from. + * + * @param oTrueSpeaker A creature uttering a Utterance at this moment + * @return CLASS_TYPE_* constant of the class + */ +int GetTruespeakingClass(object oTrueSpeaker = OBJECT_SELF); + +/** + * Determines the given creature's truespeaker level. If a class is specified, + * then returns the truespeaker level for that class. Otherwise, returns + * the truespeaker level for the currently active utterance. + * + * @param oTrueSpeaker The creature whose truespeaker level to determine + * @param nSpecificClass The class to determine the creature's truespeaker + * level in. + * @param nUseHD If this is set, it returns the Character Level of the calling creature. + * DEFAULT: CLASS_TYPE_INVALID, which means the creature's + * truespeaker level in regards to an ongoing utterance + * is determined instead. + * @return The truespeaker level + */ +int GetTruespeakerLevel(object oTrueSpeaker, int nSpecificClass = CLASS_TYPE_INVALID, int nUseHD = FALSE); + +/** + * Determines whether a given creature uses truenaming. + * Requires either levels in a truenaming-related class or + * natural truenaming ability based on race. + * + * @param oCreature Creature to test + * @return TRUE if the creature can use truenames, FALSE otherwise. + */ +int GetIsTruenamingUser(object oCreature); + +/** + * Determines the given creature's highest undmodified truespeaker level among it's + * uttering classes. + * + * @param oCreature Creature whose highest truespeaker level to determine + * @return The highest unmodified truespeaker level the creature can have + */ +int GetHighestTrueSpeakerLevel(object oCreature); + +/** + * Determines whether a given class is a truenaming-related class or not. + * + * @param nClass CLASS_TYPE_* of the class to test + * @return TRUE if the class is a truenaming-related class, FALSE otherwise + */ +int GetIsTruenamingClass(int nClass); + +/** + * Gets the level of the Utterance being currently truespoken. + * WARNING: Return value is not defined when a Utterance is not being truespoken. + * + * @param oTrueSpeaker The creature currently uttering a utterance + * @return The level of the Utterance being truespoken + */ +int GetUtteranceLevel(object oTrueSpeaker); + +/** + * Determines a creature's ability score in the uttering ability of a given + * class. + * + * @param oTrueSpeaker Creature whose ability score to get + * @param nClass CLASS_TYPE_* constant of a uttering class + */ +int GetTruenameAbilityScoreOfClass(object oTrueSpeaker, int nClass); + +/** + * Determines the uttering ability of a class. + * + * @param nClass CLASS_TYPE_* constant of the class to determine the uttering stat of + * @return ABILITY_* of the uttering stat. ABILITY_CHARISMA for non-TrueSpeaker + * classes. + */ +int GetTruenameAbilityOfClass(int nClass); + +/** + * Calculates the DC of the Utterance being currently truespoken. + * Base value is 10 + Utterance level + ability modifier in uttering stat + * + * WARNING: Return value is not defined when a Utterance is not being truespoken. + * + */ +int GetTrueSpeakerDC(object oTrueSpeaker = OBJECT_SELF); + +/** + * Determines the truespeaker's level in regards to truespeaker checks to overcome + * spell resistance. + * + * WARNING: Return value is not defined when a Utterance is not being truespoken. + * + * @param oTrueSpeaker A creature uttering a Utterance at the moment + * @return The creature's truespeaker level, adjusted to account for + * modifiers that affect spell resistance checks. + */ +int GetTrueSpeakPenetration(object oTrueSpeaker = OBJECT_SELF); + +/** + * Marks an utterance as active for the Law of Sequence. + * Called from the Utterance + * + * @param oTrueSpeaker Caster of the Utterance + * @param nSpellId SpellId of the Utterance + * @param fDur Duration of the Utterance + */ +void DoLawOfSequence(object oTrueSpeaker, int nSpellId, float fDur); + +/** + * Checks to see whether the law of sequence is active + * Utterance fails if it is. + * + * @param oTrueSpeaker Caster of the Utterance + * @param nSpellId SpellId of the Utterance + * + * @return True if the Utterance is active, False if it is not. + */ +int CheckLawOfSequence(object oTrueSpeaker, int nSpellId); + +/** + * Returns the name of the Utterance + * + * @param nSpellId SpellId of the Utterance + */ +string GetUtteranceName(int nSpellId); + +/** + * Returns the name of the Lexicon + * + * @param nLexicon LEXICON_* to name + */ +string GetLexiconName(int nLexicon); + +/** + * Returns the Lexicon the Utterance is in + * @param nSpellId Utterance to check + * + * @return LEXICON_* + */ +int GetLexiconByUtterance(int nSpellId); + +/** + * Affects all of the creatures with Speak Unto the Masses + * + * @param oTrueSpeaker Caster of the Utterance + * @param oTarget Original Target of Utterance + * @param utter The utterance structure returned by EvaluateUtterance + */ +void DoSpeakUntoTheMasses(object oTrueSpeaker, object oTarget, struct utterance utter); + +/** + * Affects all of the creatures with Speak Unto the Masses + * + * @param oTrueSpeaker Caster of the Utterance + * @param oTarget Original Target of Utterance + * @param utter The utterance structure returned by EvaluateUtterance + */ +void DoWordOfNurturingReverse(object oTrueSpeaker, object oTarget, struct utterance utter); + +/** + * Affects all of the creatures with Speak Unto the Masses + * + * @param oTrueSpeaker Caster of the Utterance + * @param oTarget Original Target of Utterance + * @param utter The utterance structure returned by EvaluateUtterance + * @param nBeats Number of rounds to fire this utterance + * @param nDamageType DAMAGE_TYPE_* + */ +void DoEnergyNegation(object oTrueSpeaker, object oTarget, struct utterance utter, int nBeats, int nDamageType); + +/** + * Checks to see if the chosen target of the Crafted Tool utterance is valid. + * If it is not valid, it will search through all slots, starting with right hand weapon + * to try and find a valid target. + * + * @param oTrueSpeaker Caster of the Utterance + * @param oTarget Target of the utterance + * + * @return Item in slot, or, if there are no valid objects on the creature, OBJECT_INVALID. + * If the target is an item, it returns the item. + */ +object CraftedToolTarget(object oTrueSpeaker, object oTarget); + +/** + * Enforces the cross class cap on the Truespeech skill + * + * @param oTrueSpeaker The PC whose feats to check. + * @return TRUE if needed to relevel, FALSE otherwise. + */ +int CheckTrueSpeechSkill(object oTrueSpeaker); + +/** + * Applies modifications to a utterance's damage that depend on some property + * of the target. + * Currently accounts for: + * - Mental Resistance + * - Greater Utterance Specialization + * - Intellect Fortress + * + * @param oTarget A creature being dealt damage by a utterance + * @param oTrueSpeaker The creature uttering the damaging utterance + * @param nDamage The amount of damage the creature would be dealt + * + * @param bIsHitPointDamage Is the damage HP damage or something else? + * @param bIsEnergyDamage Is the damage caused by energy or something else? Only relevant if the damage is HP damage. + * + * @return The amount of damage, modified by oTarget's abilities + */ +/*int GetTargetSpecificChangesToDamage(object oTarget, object oTrueSpeaker, int nDamage, + int bIsHitPointDamage = TRUE, int bIsEnergyDamage = FALSE); + +*/ + +/** + * Returns how many Cadence feats an Acolyte of the Ego has + * + * @param oTrueSpeaker The PC whose feats to check. + * @return The count of feats + */ +int GetCadenceCount(object oTrueSpeaker); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "prc_alterations" +#include "true_inc_utter" +#include "true_inc_truknwn" + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int GetTruespeakingClass(object oTrueSpeaker = OBJECT_SELF) +{ + return GetLocalInt(oTrueSpeaker, PRC_TRUESPEAKING_CLASS) - 1; +} + +int GetTruespeakerLevel(object oTrueSpeaker, int nSpecificClass = CLASS_TYPE_INVALID, int nUseHD = FALSE) +{ + int nLevel; + int nAdjust = GetLocalInt(oTrueSpeaker, PRC_CASTERLEVEL_ADJUSTMENT); + // Bereft's speak syllables and use their character level. + if (GetIsSyllable(PRCGetSpellId())) nUseHD = TRUE; + + // If this is set, return the user's HD + if (nUseHD) return GetHitDice(oTrueSpeaker); + + // The function user needs to know the character's truespeaker level in a specific class + // instead of whatever the character last truespoken a Utterance as + if(nSpecificClass != CLASS_TYPE_INVALID) + { + if(GetIsTruenamingClass(nSpecificClass)) + { + int nClassLevel = GetLevelByClass(nSpecificClass, oTrueSpeaker); + if (nClassLevel > 0) + { + nLevel = nClassLevel; + } + } + // A character's truespeaker level gained from non-uttering classes is always a nice, round zero + else + return 0; + } + + // Item Spells + if(GetItemPossessor(GetSpellCastItem()) == oTrueSpeaker) + { + if(DEBUG) SendMessageToPC(oTrueSpeaker, "Item casting at level " + IntToString(GetCasterLevel(oTrueSpeaker))); + + return GetCasterLevel(oTrueSpeaker) + nAdjust; + } + + // For when you want to assign the caster level. + else if(GetLocalInt(oTrueSpeaker, PRC_CASTERLEVEL_OVERRIDE) != 0) + { + if(DEBUG) SendMessageToPC(oTrueSpeaker, "Forced-level uttering at level " + IntToString(GetCasterLevel(oTrueSpeaker))); + + DelayCommand(1.0, DeleteLocalInt(oTrueSpeaker, PRC_CASTERLEVEL_OVERRIDE)); + nLevel = GetLocalInt(oTrueSpeaker, PRC_CASTERLEVEL_OVERRIDE); + } + else if(GetTruespeakingClass(oTrueSpeaker) != CLASS_TYPE_INVALID) + { + //Gets the level of the uttering class + int nUtteringClass = GetTruespeakingClass(oTrueSpeaker); + nLevel = GetLevelByClass(nUtteringClass, oTrueSpeaker); + } + + // If everything else fails, use the character's first class position + if(nLevel == 0) + { + if(DEBUG) DoDebug("Failed to get truespeaker level for creature " + DebugObject2Str(oTrueSpeaker) + ", using first class slot"); + else WriteTimestampedLogEntry("Failed to get truespeaker level for creature " + DebugObject2Str(oTrueSpeaker) + ", using first class slot"); + + nLevel = GetLevelByPosition(1, oTrueSpeaker); + } + + nLevel += nAdjust; + + // This spam is technically no longer necessary once the truespeaker level getting mechanism has been confirmed to work +// if(DEBUG) FloatingTextStringOnCreature("TrueSpeaker Level: " + IntToString(nLevel), oTrueSpeaker, FALSE); + + return nLevel; +} + +int GetIsTruenamingUser(object oCreature) +{ + return !!(GetLevelByClass(CLASS_TYPE_TRUENAMER, oCreature) || + GetLevelByClass(CLASS_TYPE_BEREFT, oCreature) + ); +} + +int GetHighestTrueSpeakerLevel(object oCreature) +{ + int n = 0; + int nHighest; + int nTemp; + + while(n <= 8) + { + if(GetClassByPosition(n, oCreature) != CLASS_TYPE_INVALID) + { + nTemp = GetTruespeakerLevel(oCreature, GetClassByPosition(n, oCreature)); + + if(nTemp > nHighest) + nHighest = nTemp; + } + n++; + + } + + return nHighest; +} + +/* int GetHighestTrueSpeakerLevel(object oCreature) +{ + return PRCMax(PRCMax(GetClassByPosition(1, oCreature) != CLASS_TYPE_INVALID ? GetTruespeakerLevel(oCreature, GetClassByPosition(1, oCreature)) : 0, + GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID ? GetTruespeakerLevel(oCreature, GetClassByPosition(2, oCreature)) : 0 + ), + GetClassByPosition(3, oCreature) != CLASS_TYPE_INVALID ? GetTruespeakerLevel(oCreature, GetClassByPosition(3, oCreature)) : 0 + ); +} */ + +int GetIsTruenamingClass(int nClass) +{ + return (nClass == CLASS_TYPE_TRUENAMER || + nClass == CLASS_TYPE_BEREFT + ); +} + +int GetUtteranceLevel(object oTrueSpeaker) +{ + return GetLocalInt(oTrueSpeaker, PRC_UTTERANCE_LEVEL); +} + +int GetTruenameAbilityScoreOfClass(object oTrueSpeaker, int nClass) +{ + return GetAbilityScore(oTrueSpeaker, GetTruenameAbilityOfClass(nClass)); +} + +int GetTruenameAbilityOfClass(int nClass){ + switch(nClass) + { + case CLASS_TYPE_TRUENAMER: + return ABILITY_CHARISMA; + default: + return ABILITY_CHARISMA; + } + + // Technically, never gets here but the compiler does not realise that + return -1; +} + +int GetTrueSpeakerDC(object oTrueSpeaker = OBJECT_SELF) +{ + // Things we need for DC Checks + int nSpellId = PRCGetSpellId(); + object oTarget = PRCGetSpellTargetObject(); + int nRace = MyPRCGetRacialType(oTarget); + // DC is 10 + 1/2 Truenamer level + Ability (Charisma) + int nClass = GetTruespeakingClass(oTrueSpeaker); + int nDC = 10; + nDC += GetLevelByClass(nClass, oTrueSpeaker) / 2; + nDC += GetAbilityModifier(GetTruenameAbilityOfClass(nClass), oTrueSpeaker); + int nFeat = -1; + + // Focused Lexicon. Bonus vs chosen racial type //:: [PRC .35] Needs update for new racialtypes + switch(nRace) + { + case RACIAL_TYPE_ABERRATION: nFeat = FEAT_FOCUSED_LEXICON_ABERRATION; break; + case RACIAL_TYPE_ANIMAL: nFeat = FEAT_FOCUSED_LEXICON_ANIMAL; break; + case RACIAL_TYPE_BEAST: nFeat = FEAT_FOCUSED_LEXICON_BEAST; break; + case RACIAL_TYPE_CONSTRUCT: nFeat = FEAT_FOCUSED_LEXICON_CONSTRUCT; break; + case RACIAL_TYPE_DRAGON: nFeat = FEAT_FOCUSED_LEXICON_DRAGON; break; + case RACIAL_TYPE_DWARF: nFeat = FEAT_FOCUSED_LEXICON_DWARF; break; + case RACIAL_TYPE_ELEMENTAL: nFeat = FEAT_FOCUSED_LEXICON_ELEMENTAL; break; + case RACIAL_TYPE_ELF: nFeat = FEAT_FOCUSED_LEXICON_ELF; break; + case RACIAL_TYPE_FEY: nFeat = FEAT_FOCUSED_LEXICON_FEY; break; + case RACIAL_TYPE_GIANT: nFeat = FEAT_FOCUSED_LEXICON_GIANT; break; + case RACIAL_TYPE_GNOME: nFeat = FEAT_FOCUSED_LEXICON_GNOME; break; + case RACIAL_TYPE_HALFELF: nFeat = FEAT_FOCUSED_LEXICON_HALFELF; break; + case RACIAL_TYPE_HALFLING: nFeat = FEAT_FOCUSED_LEXICON_HALFLING; break; + case RACIAL_TYPE_HALFORC: nFeat = FEAT_FOCUSED_LEXICON_HALFORC; break; + case RACIAL_TYPE_HUMAN: nFeat = FEAT_FOCUSED_LEXICON_HUMAN; break; + case RACIAL_TYPE_HUMANOID_GOBLINOID: nFeat = FEAT_FOCUSED_LEXICON_GOBLINOID; break; + case RACIAL_TYPE_HUMANOID_MONSTROUS: nFeat = FEAT_FOCUSED_LEXICON_MONSTROUS; break; + case RACIAL_TYPE_HUMANOID_ORC: nFeat = FEAT_FOCUSED_LEXICON_ORC; break; + case RACIAL_TYPE_HUMANOID_REPTILIAN: nFeat = FEAT_FOCUSED_LEXICON_REPTILIAN; break; + case RACIAL_TYPE_MAGICAL_BEAST: nFeat = FEAT_FOCUSED_LEXICON_MAGICALBEAST; break; + case RACIAL_TYPE_OOZE: nFeat = FEAT_FOCUSED_LEXICON_OOZE; break; + case RACIAL_TYPE_OUTSIDER: nFeat = FEAT_FOCUSED_LEXICON_OUTSIDER; break; + case RACIAL_TYPE_SHAPECHANGER: nFeat = FEAT_FOCUSED_LEXICON_SHAPECHANGER; break; + case RACIAL_TYPE_UNDEAD: nFeat = FEAT_FOCUSED_LEXICON_UNDEAD; break; + case RACIAL_TYPE_VERMIN: nFeat = FEAT_FOCUSED_LEXICON_VERMIN; break; + } + if(nFeat > -1 && GetHasFeat(nFeat, oTrueSpeaker)) + { + nDC += 1; + nFeat = -1; + } + + // Utterance Focus. DC Bonus for a chosen utterance + switch(nSpellId) + { + case UTTER_BREATH_CLEANSING_R: nFeat = FEAT_UTTERANCE_FOCUS_BREATH_CLEANSING; break; + case UTTER_BREATH_RECOVERY_R: nFeat = FEAT_UTTERANCE_FOCUS_BREATH_RECOVERY; break; + case UTTER_ELDRITCH_ATTRACTION: nFeat = FEAT_UTTERANCE_FOCUS_ELDRITCH_ATTRACTION; break; + case UTTER_ELDRITCH_ATTRACTION_R: nFeat = FEAT_UTTERANCE_FOCUS_ELDRITCH_ATTRACTION; break; + case UTTER_MORALE_BOOST_R: nFeat = FEAT_UTTERANCE_FOCUS_MORALE_BOOST; break; + case UTTER_PRETERNATURAL_CLARITY_R: nFeat = FEAT_UTTERANCE_FOCUS_PRETERNATURAL_CLARITY; break; + case UTTER_SENSORY_FOCUS_R: nFeat = FEAT_UTTERANCE_FOCUS_SENSORY_FOCUS; break; + case UTTER_SILENT_CASTER_R: nFeat = FEAT_UTTERANCE_FOCUS_SILENT_CASTER; break; + case UTTER_SINGULAR_MIND_R: nFeat = FEAT_UTTERANCE_FOCUS_SINGULAR_MIND; break; + case UTTER_TEMPORAL_SPIRAL_R: nFeat = FEAT_UTTERANCE_FOCUS_TEMPORAL_SPIRAL; break; + case UTTER_TEMPORAL_TWIST_R: nFeat = FEAT_UTTERANCE_FOCUS_TEMPORAL_TWIST; break; + case UTTER_WARD_PEACE_R: nFeat = FEAT_UTTERANCE_FOCUS_WARD_PEACE; break; + case UTTER_SHOCKWAVE: nFeat = FEAT_UTTERANCE_FOCUS_SHOCKWAVE; break; + } + if(nFeat > -1 && GetHasFeat(nFeat, oTrueSpeaker)) + nDC += 1; + + return nDC; +} + +int GetTrueSpeakPenetration(object oTrueSpeaker = OBJECT_SELF) +{ + int nPen = GetTruespeakerLevel(oTrueSpeaker); + + // According to Page 232 of Tome of Magic, Spell Pen as a feat counts, so here it is. + if(GetHasFeat(FEAT_EPIC_SPELL_PENETRATION, oTrueSpeaker)) nPen += 6; + else if(GetHasFeat(FEAT_GREATER_SPELL_PENETRATION, oTrueSpeaker)) nPen += 4; + else if(GetHasFeat(FEAT_SPELL_PENETRATION, oTrueSpeaker)) nPen += 2; + + // Blow away SR totally, just add 9000 + // Does not work on Syllables, only utterances + if (GetLocalInt(oTrueSpeaker, TRUE_IGNORE_SR) && !GetIsSyllable(PRCGetSpellId())) nPen += 9000; + + if(DEBUG) DoDebug("GetTrueSpeakPenetration(" + GetName(oTrueSpeaker) + "): " + IntToString(nPen)); + + return nPen; +} + +void DoLawOfSequence(object oTrueSpeaker, int nSpellId, float fDur) +{ + // This makes sure everything is stored using the Normal, and not the reverse + string sSpellId = GetNormalUtterSpellId(nSpellId); + SetLocalInt(oTrueSpeaker, LAW_OF_SEQUENCE_VARNAME + sSpellId, TRUE); + DelayCommand(fDur, DeleteLocalInt(oTrueSpeaker, LAW_OF_SEQUENCE_VARNAME + sSpellId)); +} + +int CheckLawOfSequence(object oTrueSpeaker, int nSpellId) +{ + // Turns this off + if (GetPRCSwitch(PRC_LAW_OF_SEQUENCE)) return FALSE; + // This makes sure everything is stored using the Normal, and not the reverse + return GetLocalInt(oTrueSpeaker, LAW_OF_SEQUENCE_VARNAME + GetNormalUtterSpellId(nSpellId)); +} + +string GetUtteranceName(int nSpellId) +{ + return GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellId))); +} + +string GetLexiconName(int nLexicon) +{ + int nStrRef; + switch(nLexicon) + { + case LEXICON_EVOLVING_MIND: nStrRef = 16828478; break; + case LEXICON_CRAFTED_TOOL: nStrRef = 16828479; break; + case LEXICON_PERFECTED_MAP: nStrRef = 16828480; break; + } + + return GetStringByStrRef(nStrRef); +} + +int GetLexiconByUtterance(int nSpellId) +{ + int i, nUtter; + for(i = 0; i < GetPRCSwitch(FILE_END_CLASS_POWER) ; i++) + { + nUtter = StringToInt(Get2DACache("cls_true_utter", "SpellID", i)); + if(nUtter == nSpellId) + { + return StringToInt(Get2DACache("cls_true_utter", "Lexicon", i)); + } + } + // This should never happen + return -1; +} + +void DoSpeakUntoTheMasses(object oTrueSpeaker, object oTarget, struct utterance utter) +{ + // Check for Speak Unto the Masses, exit function if not set + if (!GetLocalInt(oTrueSpeaker, TRUE_SPEAK_UNTO_MASSES)) return; + + // Speak to the Masses affects all creatures of the same race in the AoE + int nRacial = MyPRCGetRacialType(oTarget); + object oSkin; + + // Loop over targets + object oAreaTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), GetLocation(oTarget), TRUE, OBJECT_TYPE_CREATURE); + while(GetIsObjectValid(oAreaTarget)) + { + if(DEBUG) DoDebug("Speak Unto the Masses: While entered"); + // Skip the original target/truespeaker, its already been hit + if (oAreaTarget != oTarget && oAreaTarget != oTrueSpeaker) + { + if(DEBUG) DoDebug("Speak Unto the Masses: Target check"); + // Targeting limitations + if(MyPRCGetRacialType(oAreaTarget) == nRacial) + { + if(DEBUG) DoDebug("Speak Unto the Masses: Racial Check"); + // Only affect friends or ignore it + if (GetIsFriend(oAreaTarget, oTrueSpeaker) || !utter.bFriend) + { + if(DEBUG) DoDebug("Speak Unto the Masses: Friend Check"); + // Do SR, or ignore if its a friendly utterance. + if (!PRCDoResistSpell(utter.oTrueSpeaker, oAreaTarget, utter.nPen) || utter.bIgnoreSR) + { + if(DEBUG) DoDebug("Speak Unto the Masses: SR Check"); + // Saving throw, ignore it if there is no DC to check + if(!PRCMySavingThrow(utter.nSaveThrow, oAreaTarget, utter.nSaveDC, utter.nSaveType, OBJECT_SELF) || + utter.nSaveDC == 0) + { + if(DEBUG) DoDebug("Speak Unto the Masses: Saving Throw"); + // Itemproperty, if there is one + oSkin = GetPCSkin(oAreaTarget); + if (GetIsItemPropertyValid(utter.ipIProp1)) + { + if(DEBUG) DoDebug("Speak Unto the Masses: IProp1"); + IPSafeAddItemProperty(oSkin, utter.ipIProp1, utter.fDur, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + } + // Itemproperty, if there is one + if (GetIsItemPropertyValid(utter.ipIProp2)) + { + if(DEBUG) DoDebug("Speak Unto the Masses: IProp2"); + IPSafeAddItemProperty(oSkin, utter.ipIProp2, utter.fDur, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + } + // Itemproperty, if there is one + if (GetIsItemPropertyValid(utter.ipIProp3)) + { + if(DEBUG) DoDebug("Speak Unto the Masses: IProp3"); + IPSafeAddItemProperty(oSkin, utter.ipIProp3, utter.fDur, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + } + // Duration Effects + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, utter.eLink, oAreaTarget, utter.fDur, TRUE, utter.nSpellId, utter.nTruespeakerLevel); + if(DEBUG) DoDebug("Speak Unto the Masses: Duration"); + // Impact Effects + SPApplyEffectToObject(DURATION_TYPE_INSTANT, utter.eLink2, oAreaTarget); + if(DEBUG) DoDebug("Speak Unto the Masses: Instant"); + // Utterance Specific code down here + DoWordOfNurturingReverse(oTrueSpeaker, oAreaTarget, utter); + if(DEBUG) DoDebug("Speak Unto the Masses: Word of Nurturing Reverse"); + if (utter.nSpellId == UTTER_ENERGY_NEGATION_R) + DoEnergyNegation(oTrueSpeaker, oTarget, utter, FloatToInt(utter.fDur / 6.0), GetLocalInt(oTrueSpeaker, "TrueEnergyNegation")); + } // end if - Saving Throw + } // end if - Spell Resistance + } // end if - Friend Check + }// end if - Targeting check + } + + // Get next target + oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), GetLocation(oTarget), TRUE, OBJECT_TYPE_CREATURE); + }// end while - Target loop +} + +void DoWordOfNurturingReverse(object oTrueSpeaker, object oTarget, struct utterance utter) +{ + // Returns TRUE upon concentration failure + if (GetBreakConcentrationCheck(oTrueSpeaker)) return; + + int nDamage; + // First, find out what utterance we're using + if (utter.nSpellId == UTTER_WORD_NURTURING_MINOR_R) nDamage = d6(); + else if (utter.nSpellId == UTTER_WORD_NURTURING_LESSER_R) nDamage = d6(2); + else if (utter.nSpellId == UTTER_WORD_NURTURING_MODERATE_R) nDamage = d6(4); + else if (utter.nSpellId == UTTER_WORD_NURTURING_POTENT_R) nDamage = d6(6); + else if (utter.nSpellId == UTTER_WORD_NURTURING_CRITICAL_R) nDamage = d6(8); + else if (utter.nSpellId == UTTER_WORD_NURTURING_GREATER_R) nDamage = d6(10); + // Empower it + if(utter.bEmpower) nDamage += (nDamage/2); + // If we're using this, target has already failed SR and Saves + effect eImp = EffectLinkEffects(EffectVisualEffect(VFX_IMP_MAGLAW), EffectDamage(nDamage)); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eImp, oTarget); +} + +void DoEnergyNegation(object oTrueSpeaker, object oTarget, struct utterance utter, int nBeats, int nDamageType) +{ + int nDamage = d6(2); + // Empower it + if(utter.bEmpower) nDamage += (nDamage/2); + // Impact VFX + utter.eLink2 = EffectLinkEffects(EffectVisualEffect(VFX_IMP_MAGVIO), EffectDamage(nDamage, nDamageType)); + // Impact Effects + SPApplyEffectToObject(DURATION_TYPE_INSTANT, utter.eLink2, oTarget); + + nBeats -= 1; + if (nBeats > 0) + DelayCommand(6.0, DoEnergyNegation(oTrueSpeaker, oTarget, utter, nBeats, nDamageType)); +} + +object CraftedToolTarget(object oTrueSpeaker, object oTarget) +{ + // Check to see if its a weapon or item of some sort + // Return it if its a valid base item type + if (GetBaseItemType(oTarget) != BASE_ITEM_INVALID) return oTarget; + + object oItem = OBJECT_INVALID; + + // These are utterances that only target weapons + if (PRCGetSpellId() == UTTER_KEEN_WEAPON || PRCGetSpellId() == UTTER_SUPPRESS_WEAPON || PRCGetSpellId() == UTTER_TRANSMUTE_WEAPON) + { + // By the time we're here, it should only be creatures, not items as targets + oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + // Only do this for Keen + if (PRCGetSpellId() == UTTER_KEEN_WEAPON) + { + // Put the bonus on the ammo rather than the bow if its ranged + if( GetBaseItemType(oItem) == BASE_ITEM_LONGBOW || GetBaseItemType(oItem) == BASE_ITEM_SHORTBOW ) + { + oItem = GetItemInSlot(INVENTORY_SLOT_ARROWS, oTarget); + } + else if(GetBaseItemType(oItem) == BASE_ITEM_LIGHTCROSSBOW || GetBaseItemType(oItem) == BASE_ITEM_HEAVYCROSSBOW) + { + oItem = GetItemInSlot(INVENTORY_SLOT_BOLTS, oTarget); + } + else if(GetBaseItemType(oItem) == BASE_ITEM_SLING) + { + oItem = GetItemInSlot(INVENTORY_SLOT_BULLETS, oTarget); + } + } + // If its a valid weapon, return it + if (GetBaseItemType(oItem) != BASE_ITEM_INVALID) return oItem; + // Check the spare hand, and make sure its not a shield + oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget); + // If its a valid weapon and not a shield, return it + if (GetBaseItemType(oItem) != BASE_ITEM_INVALID && + GetBaseItemType(oItem) != BASE_ITEM_LARGESHIELD && + GetBaseItemType(oItem) != BASE_ITEM_SMALLSHIELD && + GetBaseItemType(oItem) != BASE_ITEM_TOWERSHIELD) return oItem; + }// These ones target only armour + else if (PRCGetSpellId() == UTTER_FORTIFY_ARMOUR_SNEAK || PRCGetSpellId() == UTTER_FORTIFY_ARMOUR_CRIT) + { + return GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget); + }// This one targets scrolls and potions + else if (PRCGetSpellId() == UTTER_METAMAGIC_CATALYST_EMP || PRCGetSpellId() == UTTER_METAMAGIC_CATALYST_EXT || + PRCGetSpellId() == UTTER_METAMAGIC_CATALYST_MAX) + { + oItem = GetFirstItemInInventory(oTarget); + while(GetIsObjectValid(oItem)) + { + if (GetBaseItemType(oItem) == BASE_ITEM_SCROLL || GetBaseItemType(oItem) == BASE_ITEM_POTIONS) + { + return oItem; + } + oItem = GetNextItemInInventory(oTarget); + } + } + else // For the rest of the utterances, any item is a valid target. + { + // Get the PC's chosen inventory slot + int nSlot = GetLocalInt(oTrueSpeaker, "TrueCraftedToolTargetSlot"); + oItem = GetItemInSlot(nSlot, oTarget); + // If the chosen item isn't valid, we go into the choice progession + // Yes, its a long chain + if (!GetIsObjectValid(oItem)) + { + oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if (!GetIsObjectValid(oItem)) + { + oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget); + if (!GetIsObjectValid(oItem)) + { + oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget); + if (!GetIsObjectValid(oItem)) + { + oItem = GetItemInSlot(INVENTORY_SLOT_HEAD, oTarget); + if (!GetIsObjectValid(oItem)) + { + oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oTarget); + if (!GetIsObjectValid(oItem)) + { + oItem = GetItemInSlot(INVENTORY_SLOT_LEFTRING, oTarget); + if (!GetIsObjectValid(oItem)) + { + oItem = GetItemInSlot(INVENTORY_SLOT_NECK, oTarget); + if (!GetIsObjectValid(oItem)) + { + oItem = GetItemInSlot(INVENTORY_SLOT_CLOAK, oTarget); + if (!GetIsObjectValid(oItem)) + { + oItem = GetItemInSlot(INVENTORY_SLOT_ARMS, oTarget); + if (!GetIsObjectValid(oItem)) + { + oItem = GetItemInSlot(INVENTORY_SLOT_BOOTS, oTarget); + if (!GetIsObjectValid(oItem)) + { + oItem = GetItemInSlot(INVENTORY_SLOT_BELT, oTarget); + } + } + } + } + } + } + } + } + } + } + } + } + return oItem; +} + +int CheckTrueSpeechSkill(object oTrueSpeaker) +{ + // The max for a class skill is 3 + 1 per level. We just divide this in half for Cross Class + int nMax = GetHitDice(oTrueSpeaker) + 3; + nMax /= 2; + // We want base ranks only + int nRanks = GetSkillRank(SKILL_TRUESPEAK, oTrueSpeaker, TRUE); + + // The Truenamer class has Truespeech as a class skill, so no relevel + if (GetLevelByClass(CLASS_TYPE_TRUENAMER, oTrueSpeaker) > 0) return FALSE; + // Same for this class + else if (GetLevelByClass(CLASS_TYPE_BEREFT, oTrueSpeaker) > 0) return FALSE; + // And this one + else if (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oTrueSpeaker) > 0) return FALSE; + // If they have the feat, no relevel + else if(GetHasFeat(FEAT_TRUENAME_TRAINING, oTrueSpeaker)) return FALSE; + // Now we check the values. If they have too many ranks, relevel. + else if (nRanks > nMax) + { + // Relevel + FloatingTextStringOnCreature("You cannot have more than " + IntToString(nMax) + " in TrueSpeech.", oTrueSpeaker, FALSE); + return TRUE; + } + + // No relevel normally + return FALSE; +} + +/* +int GetTargetSpecificChangesToDamage(object oTarget, object oTrueSpeaker, int nDamage, + int bIsHitPointDamage = TRUE, int bIsEnergyDamage = FALSE) +{ + // Greater Utterance Specialization - +2 damage on all HP-damaging utterances when target is within 30ft + if(bIsHitPointDamage && + GetHasFeat(FEAT_GREATER_Utterance_SPECIALIZATION, oTrueSpeaker) && + GetDistanceBetween(oTarget, oTrueSpeaker) <= FeetToMeters(30.0f) + ) + nDamage += 2; + // Intellect Fortress - Halve damage dealt by utterances that allow PR. Goes before DR (-like) reductions + if(GetLocalInt(oTarget, "PRC_Utterance_IntellectFortress_Active") && + Get2DACache("spells", "ItemImmunity", PRCGetSpellId()) == "1" + ) + nDamage /= 2; + // Mental Resistance - 3 damage less for all non-energy damage and ability damage + if(GetHasFeat(FEAT_MENTAL_RESISTANCE, oTarget) && !bIsEnergyDamage) + nDamage -= 3; + + // Reasonable return values only + if(nDamage < 0) nDamage = 0; + + return nDamage; +} +*/ +// Test main +//void main(){} + +int GetCadenceCount(object oTrueSpeaker) +{ + int nClass = GetLevelByClass(CLASS_TYPE_ACOLYTE_EGO, oTrueSpeaker); + if (GetLocalInt(oTrueSpeaker, "ResonantVoice") == TRUE) + { + nClass += 3; //Adds 3 to class level + } + + int nCount = nClass/2; //Get a cadence feat at 2, 4, 6, 8, 10 levels. + + if (nCount > 6) nCount = 6; //Can't go above 6 with Resonant Voice active + + // Return total + return nCount; +} \ No newline at end of file diff --git a/src/include/true_inc_truknwn.nss b/src/include/true_inc_truknwn.nss new file mode 100644 index 0000000..22fbea0 --- /dev/null +++ b/src/include/true_inc_truknwn.nss @@ -0,0 +1,462 @@ +//:://///////////////////////////////////////////// +//:: Truenaming include: utterances known +//:: true_inc_truknwn +//:://///////////////////////////////////////////// +/** @file + Defines functions for adding & removing + utterances known. + + Data stored: + + - For each Utterance list + -- Total number of utterances known + -- A modifier value to maximum utterances known on this list to account for feats and classes that add utterances + -- An array related to utterances the knowledge of which is not dependent on character level + --- Each array entry specifies the spells.2da row of the known utterance's class-specific entry + -- For each character level on which utterances have been gained from this list + --- An array of utterances gained on this level + ---- Each array entry specifies the spells.2da row of the known utterance's class-specific entry + + @author Stratovarius + @date Created - 2006.07.18 +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + +// Included here to provide the values for the constants below +#include "prc_class_const" +#include "true_utter_const" + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const int UTTERANCE_LIST_TRUENAMER = CLASS_TYPE_TRUENAMER; + +/// Special Utterance list. utterances gained via Expanded Knowledge, Psychic Chirurgery and similar sources +const int UTTERANCE_LIST_MISC = CLASS_TYPE_INVALID;//-1; + +const string _UTTERANCE_LIST_NAME_BASE = "PRC_UtteranceList_"; +const string _UTTERANCE_LIST_TOTAL_KNOWN = "_TotalKnown"; +const string _UTTERANCE_LIST_MODIFIER = "_KnownModifier"; +const string _UTTERANCE_LIST_MISC_ARRAY = "_UtterancesKnownMiscArray"; +const string _UTTERANCE_LIST_LEVEL_ARRAY = "_UtterancesKnownLevelArray_"; +const string _UTTERANCE_LIST_GENERAL_ARRAY = "_UtterancesKnownGeneralArray"; + + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Gives the creature the control feats for the given Utterance and marks the utterance + * in a utterances known array. + * If the utterance's data is already stored in one of the utterances known arrays for + * the list or adding the utterance's data to the array fails, the function aborts. + * + * @param oCreature The creature to gain the utterance + * @param nList The list the Utterance comes from. One of UTTERANCE_LIST_* + * @param n2daRow The 2da row in the lists's 2da file that specifies the utterance. + * @param bLevelDependent If this is TRUE, the Utterance is tied to a certain level and can + * be lost via level loss. If FALSE, the Utterance is not dependent + * of a level and cannot be lost via level loss. + * @param nLevelToTieTo If bLevelDependent is TRUE, this specifies the level the utterance + * is gained on. Otherwise, it's ignored. + * The default value (-1) means that the current level of oCreature + * will be used. + * @param nLexicon Type of the Utterance: Evolving Mind, Crafted Tool, or Perfected Map + * + * @return TRUE if the Utterance was successfully stored and control feats added. + * FALSE otherwise. + */ +int AddUtteranceKnown(object oCreature, int nList, int n2daRow, int nLexicon, int bLevelDependent = FALSE, int nLevelToTieTo = -1); + +/** + * Removes all utterances gained from each list on the given level. + * + * @param oCreature The creature whose utterances to remove + * @param nLevel The level to clear + */ +void RemoveUtterancesKnownOnLevel(object oCreature, int nLevel); + +/** + * Gets the value of the utterances known modifier, which is a value that is added + * to the 2da-specified maximum utterances known to determine the actual maximum. + * + * @param oCreature The creature whose modifier to get + * @param nList The list the maximum utterances known from which the modifier + * modifies. One of UTTERANCE_LIST_* + * @param nLexicon Type of the Utterance: Evolving Mind, Crafted Tool, or Perfected Map + */ +int GetKnownUtterancesModifier(object oCreature, int nList, int nLexicon); + +/** + * Sets the value of the utterances known modifier, which is a value that is added + * to the 2da-specified maximum utterances known to determine the actual maximum. + * + * @param oCreature The creature whose modifier to set + * @param nList The list the maximum utterances known from which the modifier + * modifies. One of UTTERANCE_LIST_* + * @param nLexicon Type of the Utterance: Evolving Mind, Crafted Tool, or Perfected Map + */ +void SetKnownUtterancesModifier(object oCreature, int nList, int nNewValue, int nLexicon); + +/** + * Gets the number of utterances a character character possesses from a + * specific list and lexicon + * + * @param oCreature The creature whose utterances to check + * @param nList The list to check. One of UTTERANCE_LIST_* + * @param nLexicon Type of the Utterance: Evolving Mind, Crafted Tool, or Perfected Map + * @return The number of utterances known oCreature has from nList + */ +int GetUtteranceCount(object oCreature, int nList, int nLexicon); + +/** + * Gets the maximum number of utterances a character may posses from a given list + * at this time. Calculated based on class levels, feats and a misceallenous + * modifier. There are three Types of utterances, so it checks each seperately. + * + * @param oCreature Character to determine maximum utterances for + * @param nList UTTERANCE_LIST_* of the list to determine maximum utterances for + * @param nLexicon Type of the Utterance: Evolving Mind, Crafted Tool, or Perfected Map + * @return Maximum number of utterances that oCreature may know from the given list. + */ +int GetMaxUtteranceCount(object oCreature, int nList, int nLexicon); + +/** + * Determines whether a character has a given utterance, gained via some Utterance list. + * + * @param nUtter utterance_* of the Utterance to test + * @param oCreature Character to test for the possession of the utterance + * @return TRUE if the character has the utterance, FALSE otherwise + */ +int GetHasUtterance(int nUtter, object oCreature = OBJECT_SELF); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "inc_item_props" +#include "inc_pers_array" +#include "prc_inc_nwscript" +#include "inc_lookups" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +void _TruenameRecurseRemoveArray(object oCreature, string sArrayName, string sUtterFile, int nArraySize, int nCurIndex) +{ + if(DEBUG) DoDebug("_TruenameRecurseRemoveArray():\n" + + "oCreature = " + DebugObject2Str(oCreature) + "\n" + + "sArrayName = '" + sArrayName + "'\n" + + "sUtterFile = '" + sUtterFile + "'\n" + + "nArraySize = " + IntToString(nArraySize) + "\n" + + "nCurIndex = " + IntToString(nCurIndex) + "\n" + ); + + // Determine whether we've already parsed the whole array or not + if(nCurIndex >= nArraySize) + { + if(DEBUG) DoDebug("_TruenameRecurseRemoveArray(): Running itemproperty removal loop."); + // Loop over itemproperties on the skin and remove each match + object oSkin = GetPCSkin(oCreature); + itemproperty ipTest = GetFirstItemProperty(oSkin); + while(GetIsItemPropertyValid(ipTest)) + { + // Check if the itemproperty is a bonus feat that has been marked for removal + if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_BONUS_FEAT && + GetLocalInt(oCreature, "PRC_UtterFeatRemovalMarker_" + IntToString(GetItemPropertySubType(ipTest))) + ) + { + if(DEBUG) DoDebug("_TruenameRecurseRemoveArray(): Removing bonus feat itemproperty:\n" + DebugIProp2Str(ipTest)); + // If so, remove it + RemoveItemProperty(oSkin, ipTest); + } + + ipTest = GetNextItemProperty(oSkin); + } + } + // Still parsing the array + else + { + // Set the marker + string sName = "PRC_UtterFeatRemovalMarker_" + Get2DACache(sUtterFile, "IPFeatID", + GetPowerfileIndexFromSpellID(persistant_array_get_int(oCreature, sArrayName, nCurIndex)) + ); + if(DEBUG) DoDebug("_TruenameRecurseRemoveArray(): Recursing through array, marker set:\n" + sName); + + SetLocalInt(oCreature, sName, TRUE); + // Recurse to next array index + _TruenameRecurseRemoveArray(oCreature, sArrayName, sUtterFile, nArraySize, nCurIndex + 1); + // After returning, delete the local + DeleteLocalInt(oCreature, sName); + } +} + +void _RemoveUtteranceArray(object oCreature, int nList, int nLevel, int nLexicon) +{ + if(DEBUG) DoDebug("_RemoveUtteranceArray():\n" + + "oCreature = " + DebugObject2Str(oCreature) + "\n" + + "nList = " + IntToString(nList) + "\n" + + "nLexicon = " + IntToString(nLexicon) + "\n" + ); + + string sBase = _UTTERANCE_LIST_NAME_BASE + IntToString(nList) + IntToString(nLexicon); + string sArray = sBase + _UTTERANCE_LIST_LEVEL_ARRAY + IntToString(nLevel); + int nSize = persistant_array_get_size(oCreature, sArray); + + // Reduce the total by the array size + SetPersistantLocalInt(oCreature, sBase + _UTTERANCE_LIST_TOTAL_KNOWN, + GetPersistantLocalInt(oCreature, sBase + _UTTERANCE_LIST_TOTAL_KNOWN) - nSize + ); + + // Remove each Utterance in the array + _TruenameRecurseRemoveArray(oCreature, sArray, GetAMSDefinitionFileName(nList), nSize, 0); + + // Remove the array itself + persistant_array_delete(oCreature, sArray); +} + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +int AddUtteranceKnown(object oCreature, int nList, int n2daRow, int nLexicon, int bLevelDependent = FALSE, int nLevelToTieTo = -1) +{ + string sBase = _UTTERANCE_LIST_NAME_BASE + IntToString(nList) + IntToString(nLexicon); + string sArray = sBase; + string sUtterFile = GetAMSDefinitionFileName(nList); + string sTestArray; + int i, j, nSize, bReturn; + + // Get the spells.2da row corresponding to the cls_psipw_*.2da row + int nSpells2daRow = StringToInt(Get2DACache(sUtterFile, "SpellID", n2daRow)); + + // Determine the array name. + if(bLevelDependent) + { + // If no level is specified, default to the creature's current level + if(nLevelToTieTo == -1) + nLevelToTieTo = GetHitDice(oCreature); + + sArray += _UTTERANCE_LIST_LEVEL_ARRAY + IntToString(nLevelToTieTo); + } + else + { + sArray += _UTTERANCE_LIST_GENERAL_ARRAY; + } + + // Make sure the Utterance isn't already in an array. If it is, abort and return FALSE + // Loop over each level array and check that it isn't there. + for(i = 1; i <= GetHitDice(oCreature); i++) + { + sTestArray = sBase + _UTTERANCE_LIST_LEVEL_ARRAY + IntToString(i); + if(persistant_array_exists(oCreature, sTestArray)) + { + nSize = persistant_array_get_size(oCreature, sTestArray); + for(j = 0; j < nSize; j++) + if(persistant_array_get_int(oCreature, sArray, j) == nSpells2daRow) + return FALSE; + } + } + // Check the non-level-dependent array + sTestArray = sBase + _UTTERANCE_LIST_GENERAL_ARRAY; + if(persistant_array_exists(oCreature, sTestArray)) + { + nSize = persistant_array_get_size(oCreature, sTestArray); + for(j = 0; j < nSize; j++) + if(persistant_array_get_int(oCreature, sArray, j) == nSpells2daRow) + return FALSE; + } + + // All checks are made, now start adding the new utterance + // Create the array if it doesn't exist yet + if(!persistant_array_exists(oCreature, sArray)) + persistant_array_create(oCreature, sArray); + + // Store the Utterance in the array + if(persistant_array_set_int(oCreature, sArray, persistant_array_get_size(oCreature, sArray), nSpells2daRow) != SDL_SUCCESS) + { + if(DEBUG) DoDebug("true_inc_truknwn: AddUtteranceKnown(): ERROR: Unable to add Utterance to known array\n" + + "oCreature = " + DebugObject2Str(oCreature) + "\n" + + "nList = " + IntToString(nList) + "\n" + + "nLexicon = " + IntToString(nLexicon) + "\n" + + "n2daRow = " + IntToString(n2daRow) + "\n" + + "bLevelDependent = " + DebugBool2String(bLevelDependent) + "\n" + + "nLevelToTieTo = " + IntToString(nLevelToTieTo) + "\n" + + "nSpells2daRow = " + IntToString(nSpells2daRow) + "\n" + ); + return FALSE; + } + + // Increment utterances known total + SetPersistantLocalInt(oCreature, sBase + _UTTERANCE_LIST_TOTAL_KNOWN, + GetPersistantLocalInt(oCreature, sBase + _UTTERANCE_LIST_TOTAL_KNOWN) + 1 + ); + + // Give the utterance's control feats + object oSkin = GetPCSkin(oCreature); + string sUtterFeatIP = Get2DACache(sUtterFile, "IPFeatID", n2daRow); + itemproperty ipFeat = PRCItemPropertyBonusFeat(StringToInt(sUtterFeatIP)); + IPSafeAddItemProperty(oSkin, ipFeat, 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + // Second Utterance feat, if any + sUtterFeatIP = Get2DACache(sUtterFile, "IPFeatID2", n2daRow); + if(sUtterFeatIP != "") + { + ipFeat = PRCItemPropertyBonusFeat(StringToInt(sUtterFeatIP)); + IPSafeAddItemProperty(oSkin, ipFeat, 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); + } + + return TRUE; +} + +void RemoveUtterancesKnownOnLevel(object oCreature, int nLevel) +{ + if(DEBUG) DoDebug("true_inc_truknwn: RemoveUtterancesKnownOnLevel():\n" + + "oCreature = " + DebugObject2Str(oCreature) + "\n" + + "nLevel = " + IntToString(nLevel) + "\n" + ); + + string sPostFix = _UTTERANCE_LIST_LEVEL_ARRAY + IntToString(nLevel); + // For each Utterance list and lexicon, determine if an array exists for this level. + int nLexicon; + for(nLexicon = LEXICON_MIN_VALUE; nLexicon <= LEXICON_MAX_VALUE; nLexicon++) + { + if(persistant_array_exists(oCreature, _UTTERANCE_LIST_NAME_BASE + IntToString(UTTERANCE_LIST_TRUENAMER) + IntToString(nLexicon) + sPostFix)) + _RemoveUtteranceArray(oCreature, UTTERANCE_LIST_TRUENAMER, nLevel, nLexicon); + + if(persistant_array_exists(oCreature, _UTTERANCE_LIST_NAME_BASE + IntToString(UTTERANCE_LIST_MISC) + IntToString(nLexicon) + sPostFix)) + _RemoveUtteranceArray(oCreature, UTTERANCE_LIST_MISC, nLevel, nLexicon); + } +} + +int GetKnownUtterancesModifier(object oCreature, int nList, int nLexicon) +{ + return GetPersistantLocalInt(oCreature, _UTTERANCE_LIST_NAME_BASE + IntToString(nList) + IntToString(nLexicon) + _UTTERANCE_LIST_MODIFIER); +} + +void SetKnownUtterancesModifier(object oCreature, int nList, int nNewValue, int nLexicon) +{ + SetPersistantLocalInt(oCreature, _UTTERANCE_LIST_NAME_BASE + IntToString(nList) + IntToString(nLexicon) + _UTTERANCE_LIST_MODIFIER, nNewValue); +} + +int GetUtteranceCount(object oCreature, int nList, int nLexicon) +{ + return GetPersistantLocalInt(oCreature, _UTTERANCE_LIST_NAME_BASE + IntToString(nList) + IntToString(nLexicon) + _UTTERANCE_LIST_TOTAL_KNOWN); +} + +int GetMaxUtteranceCount(object oCreature, int nList, int nLexicon) +{ + int nMaxUtterances = 0; + if(DEBUG) DoDebug("GetMaxUtteranceCount(" + IntToString(nList) + ", " + IntToString(nLexicon) + ", " + GetName(oCreature) + ")"); + switch(nList) + { + case UTTERANCE_LIST_TRUENAMER:{ + // Determine base utterances known + int nLevel = GetLevelByClass(CLASS_TYPE_TRUENAMER, oCreature); + if(nLevel == 0) + break; + if (LEXICON_EVOLVING_MIND == nLexicon) + nMaxUtterances = StringToInt(Get2DACache(GetAMSKnownFileName(CLASS_TYPE_TRUENAMER), "EvolvingMind", nLevel - 1)); + else if (LEXICON_CRAFTED_TOOL == nLexicon) + nMaxUtterances = StringToInt(Get2DACache(GetAMSKnownFileName(CLASS_TYPE_TRUENAMER), "CraftedTool", nLevel - 1)); + else if (LEXICON_PERFECTED_MAP == nLexicon) + nMaxUtterances = StringToInt(Get2DACache(GetAMSKnownFileName(CLASS_TYPE_TRUENAMER), "PerfectedMap", nLevel - 1)); + + // Calculate feats + if(DEBUG) DoDebug("case UTTERANCE_LIST_TRUENAMER:{" + IntToString(nMaxUtterances)); + // Add in the custom modifier + nMaxUtterances += GetKnownUtterancesModifier(oCreature, nList, nLexicon); + break; + } + case UTTERANCE_LIST_MISC: + if(DEBUG) DoDebug("GetMaxUtteranceCount(): ERROR: Using unfinished Utterance list!"); + break; + + default:{ + string sErr = "GetMaxUtteranceCount(): ERROR: Unknown Utterance list value: " + IntToString(nList) + IntToString(nLexicon); + if(DEBUG) DoDebug(sErr); + else WriteTimestampedLogEntry(sErr); + } + } + + return nMaxUtterances; +} + +int GetHasUtterance(int nUtter, object oCreature = OBJECT_SELF) +{ + if((GetLevelByClass(CLASS_TYPE_TRUENAMER, oCreature) + && GetHasFeat(GetClassFeatFromPower(nUtter, CLASS_TYPE_TRUENAMER), oCreature) + ) + // add new truenaming classes here + ) + return TRUE; + return FALSE; +} + +string DebugListKnownUtterances(object oCreature) +{ + string sReturn = "Utterances known by " + DebugObject2Str(oCreature) + ":\n"; + int i, j, k, numUtterLists = 6; + int nUtterList, nSize; + string sTemp, sArray, sArrayBase, sUtterFile; + // Loop over all Utterance lists + for(i = 1; i <= numUtterLists; i++) + { + // Some padding + sReturn += " "; + // Get the Utterance list for this loop + switch(i) + { + case 1: nUtterList = UTTERANCE_LIST_TRUENAMER; sReturn += "Truenamer"; break; + + // This should always be last + case 2: nUtterList = UTTERANCE_LIST_MISC; sReturn += "Misceallenous"; break; + } + sReturn += " utterances known:\n"; + + // Determine if the character has any utterances from this list + sUtterFile = GetAMSDefinitionFileName(nUtterList); + sArrayBase = _UTTERANCE_LIST_NAME_BASE + IntToString(nUtterList); + + // Loop over levels + for(j = 1; j <= GetHitDice(oCreature); j++) + { + sArray = sArrayBase + _UTTERANCE_LIST_LEVEL_ARRAY + IntToString(j); + if(persistant_array_exists(oCreature, sArray)) + { + sReturn += " Gained on level " + IntToString(j) + ":\n"; + nSize = persistant_array_get_size(oCreature, sArray); + for(k = 0; k < nSize; k++) + sReturn += " " + GetStringByStrRef(StringToInt(Get2DACache(sUtterFile, "Name", + GetPowerfileIndexFromSpellID(persistant_array_get_int(oCreature, sArray, k)) + ) + ) + ) + + "\n"; + } + } + + // Non-leveldependent utterances + sArray = sArrayBase + _UTTERANCE_LIST_GENERAL_ARRAY; + if(persistant_array_exists(oCreature, sArray)) + { + sReturn += " Non-leveldependent:\n"; + nSize = persistant_array_get_size(oCreature, sArray); + for(k = 0; k < nSize; k++) + sReturn += " " + GetStringByStrRef(StringToInt(Get2DACache(sUtterFile, "Name", + GetPowerfileIndexFromSpellID(persistant_array_get_int(oCreature, sArray, k)) + ) + ) + ) + + "\n"; + } + } + + return sReturn; +} +// Test main +//void main(){} \ No newline at end of file diff --git a/src/include/true_inc_utter.nss b/src/include/true_inc_utter.nss new file mode 100644 index 0000000..3b726dc --- /dev/null +++ b/src/include/true_inc_utter.nss @@ -0,0 +1,671 @@ +//:://///////////////////////////////////////////// +//:: Truenaming include: Uttering +//:: true_inc_Utter +//:://///////////////////////////////////////////// +/** @file + Defines structures and functions for handling + truespeaking an utterance + + @author Stratovarius + @date Created - 2006.7.17 + @thanks to Ornedan for his work on Psionics upon which this is based. +*/ +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// + + +////////////////////////////////////////////////// +/* Constants */ +////////////////////////////////////////////////// + +const string PRC_TRUESPEAKING_CLASS = "PRC_CurrentUtterance_TrueSpeakingClass"; +const string PRC_UTTERANCE_LEVEL = "PRC_CurrentUtterance_Level"; +const string TRUE_DEBUG_IGNORE_CONSTRAINTS = "TRUE_DEBUG_IGNORE_CONSTRAINTS"; + +/** + * The variable in which the utterance token is stored. If no token exists, + * the variable is set to point at the truespeaker itself. That way OBJECT_INVALID + * means the variable is unitialised. + */ +//const string PRC_UTTERANCE_TOKEN_VAR = "PRC_UtteranceToken"; +//const string PRC_UTTERANCE_TOKEN_NAME = "PRC_UTTERTOKEN"; +//const float PRC_UTTERANCE_HB_DELAY = 0.5f; + + +////////////////////////////////////////////////// +/* Structures */ +////////////////////////////////////////////////// + +// struct utterance moved to true_inc_metautr + +////////////////////////////////////////////////// +/* Function prototypes */ +////////////////////////////////////////////////// + +/** + * Determines if the utterance that is currently being attempted to be TrueSpoken + * can in fact be truespoken. Determines metautterances used. + * + * @param oTrueSpeaker A creature attempting to truespeak a utterance at this moment. + * @param oTarget The target of the utterance, if any. For pure Area of Effect. + * utterances, this should be OBJECT_INVALID. Otherwise the main + * target of the utterance as returned by PRCGetSpellTargetObject(). + * @param nMetaUtterFlags The metautterances that may be used to modify this utterance. Any number + * of METAUTTERANCE_* constants ORd together using the | operator. + * For example (METAUTTERANCE_EMPOWER | METAUTTERANCE_EXTEND) + * @param nLexicon Whether it is of the Crafted Tool, Evolving Mind or Perfected Map + * Use one of three constants: TYPE_EVOLVING_MIND, TYPE_CRAFTED_TOOL, TYPE_PERFECTED_MAP + * + * @return A utterance structure that contains the data about whether + * the utterance was successfully truespeaked, what metautterances + * were used and some other commonly used data, like the + * TrueNamer's truespeaker level for this utterance. + */ +struct utterance EvaluateUtterance(object oTrueSpeaker, object oTarget, int nMetaUtterFlags, int nLexicon); + +/** + * Causes OBJECT_SELF to use the given utterance. + * + * @param nUtter The index of the utterance to use in spells.2da or an UTTER_* + * @param nClass The index of the class to use the utterance as in classes.2da or a CLASS_TYPE_* + * @param nLevelOverride An optional override to normal truespeaker level. + * Default: 0, which means the parameter is ignored. + */ +void UseUtterance(int nUtter, int nClass, int nLevelOverride = 0); + +/** + * A debugging function. Takes a utterance structure and + * makes a string describing the contents. + * + * @param utter A set of utterance data + * @return A string describing the contents of utter + */ +string DebugUtterance2Str(struct utterance utter); + +/** + * Stores a utterance structure as a set of local variables. If + * a structure was already stored with the same name on the same object, + * it is overwritten. + * + * @param oObject The object on which to store the structure + * @param sName The name under which to store the structure + * @param utter The utterance structure to store + */ +void SetLocalUtterance(object oObject, string sName, struct utterance utter); + +/** + * Retrieves a previously stored utterance structure. If no structure is stored + * by the given name, the structure returned is empty. + * + * @param oObject The object from which to retrieve the structure + * @param sName The name under which the structure is stored + * @return The structure built from local variables stored on oObject under sName + */ +struct utterance GetLocalUtterance(object oObject, string sName); + +/** + * Deletes a stored utterance structure. + * + * @param oObject The object on which the structure is stored + * @param sName The name under which the structure is stored + */ +void DeleteLocalUtterance(object oObject, string sName); + +/** + * Sets the evaluation functions to ignore constraints on truespeaking. + * Call this just prior to EvaluateUtterance() in a utterance script. + * That evaluation will then ignore lacking utterance ability score, + * utterance Points and Psionic Focuses. + * + * @param oTrueSpeaker A creature attempting to truespeak a utterance at this moment. + */ +void TruenameDebugIgnoreConstraints(object oTrueSpeaker); + +////////////////////////////////////////////////// +/* Includes */ +////////////////////////////////////////////////// + +#include "true_inc_metautr" +#include "true_inc_truespk" +#include "inc_newspellbook" +#include "inc_lookups" + +////////////////////////////////////////////////// +/* Internal functions */ +////////////////////////////////////////////////// + +/** Internal function. + * Handles Spellfire absorption when a utterance is used on a friendly spellfire + * user. + */ +struct utterance _DoTruenameSpellfireFriendlyAbsorption(struct utterance utter, object oTarget) +{ + if(GetLocalInt(oTarget, "SpellfireAbsorbFriendly") && + GetIsFriend(oTarget, utter.oTrueSpeaker) + ) + { + if(CheckSpellfire(utter.oTrueSpeaker, oTarget, TRUE)) + { + PRCShowSpellResist(utter.oTrueSpeaker, oTarget, SPELL_RESIST_MANTLE); + utter.bCanUtter = FALSE; + } + } + + return utter; +} + +/** Internal function. + * Deletes utterance-related local variables. + * + * @param oTrueSpeaker The creature currently truespeaking a utterance + */ +void _CleanUtteranceVariables(object oTrueSpeaker) +{ + DeleteLocalInt(oTrueSpeaker, PRC_TRUESPEAKING_CLASS); + DeleteLocalInt(oTrueSpeaker, PRC_UTTERANCE_LEVEL); +} + +/** Internal function. + * Sets utterance-related local variables. + * + * @param oTrueSpeaker The creature currently truespeaking a utterance + * @param nClass Utterance casting class constant + * @param nLevel Utterance level + * @param bQuicken If the utterance was quicened 1, else 0 + */ +void _SetUtteranceVariables(object oTrueSpeaker, int nClass, int nLevel, int bQuicken) +{ + SetLocalInt(oTrueSpeaker, PRC_TRUESPEAKING_CLASS, nClass + 1); + SetLocalInt(oTrueSpeaker, PRC_UTTERANCE_LEVEL, nLevel); + SetLocalInt(oTrueSpeaker, PRC_UTTERANCE_IS_QUICKENED, bQuicken); +} + + + +/** Internal function. + * Determines whether a utterance token exists. If one does, returns it. + * + * @param oTrueSpeaker A creature whose utterance token to get + * @return The utterance token if it exists, OBJECT_INVALID otherwise. + */ +/*object _GetUtteranceToken(object oTrueSpeaker) +{ + object oUtrToken = GetLocalObject(oTrueSpeaker, PRC_UTTERANCE_TOKEN_VAR); + + // If the token object is no longer valid, set the variable to point at truespeaker + if(!GetIsObjectValid(oUtrToken)) + { + oUtrToken = oTrueSpeaker; + SetLocalObject(oTrueSpeaker, PRC_UTTERANCE_TOKEN_VAR, oUtrToken); + } + + + // Check if there is no token + if(oUtrToken == oTrueSpeaker) + oUtrToken = OBJECT_INVALID; + + return oUtrToken; +}*/ + +/** Internal function. + * Destroys the given utterance token and sets the creature's utterance token variable + * to point at itself. + * + * @param oTrueSpeaker The truespeaker whose token to destroy + * @param oUtrToken The token to destroy + */ +/*void _DestroyUtteranceToken(object oTrueSpeaker, object oUtrToken) +{ + DestroyObject(oUtrToken); + SetLocalObject(oTrueSpeaker, PRC_UTTERANCE_TOKEN_VAR, oTrueSpeaker); +}*/ + +/** Internal function. + * Destroys the previous utterance token, if any, and creates a new one. + * + * @param oTrueSpeaker A creature for whom to create a utterance token + * @return The newly created token + */ +/*object _CreateUtteranceToken(object oTrueSpeaker) +{ + object oUtrToken = _GetUtteranceToken(oTrueSpeaker); + object oStore = GetObjectByTag("PRC_MANIFTOKEN_STORE"); //GetPCSkin(oTrueSpeaker); + + // Delete any previous tokens + if(GetIsObjectValid(oUtrToken)) + _DestroyUtteranceToken(oTrueSpeaker, oUtrToken); + + // Create new token and store a reference to it + oUtrToken = CreateItemOnObject(PRC_UTTERANCE_TOKEN_NAME, oStore); + SetLocalObject(oTrueSpeaker, PRC_UTTERANCE_TOKEN_VAR, oUtrToken); + + Assert(GetIsObjectValid(oUtrToken), "GetIsObjectValid(oUtrToken)", "ERROR: Unable to create utterance token! Store object: " + DebugObject2Str(oStore), "true_inc_Utter", "_CreateUtteranceToken()"); + + return oUtrToken; +}*/ + +/** Internal function. + * Determines whether the given truespeaker is doing something that would + * interrupt truespeaking a utterance or affected by an effect that would do + * the same. + * + * @param oTrueSpeaker A creature on which _UtteranceHB() is running + * @return TRUE if the creature can continue truespeaking, + * FALSE otherwise + */ +/*int _UtteranceStateCheck(object oTrueSpeaker) +{ + int nAction = GetCurrentAction(oTrueSpeaker); + // If the current action is not among those that could either be used to truespeak the utterance or movement, the utterance fails + if(!(nAction || ACTION_CASTSPELL || nAction == ACTION_INVALID || + nAction || ACTION_ITEMCASTSPELL || nAction == ACTION_MOVETOPOINT || + nAction || ACTION_USEOBJECT || nAction == ACTION_WAIT + ) ) + return FALSE; + + // Affected by something that prevents one from truespeaking + effect eTest = GetFirstEffect(oTrueSpeaker); + int nEType; + while(GetIsEffectValid(eTest)) + { + nEType = GetEffectType(eTest); + if(nEType == EFFECT_TYPE_CUTSCENE_PARALYZE || + nEType == EFFECT_TYPE_DAZED || + nEType == EFFECT_TYPE_PARALYZE || + nEType == EFFECT_TYPE_PETRIFY || + nEType == EFFECT_TYPE_SLEEP || + nEType == EFFECT_TYPE_STUNNED + ) + return FALSE; + + // Get next effect + eTest = GetNextEffect(oTrueSpeaker); + } + + return TRUE; +}*/ + +/** Internal function. + * Runs while the given creature is truespeaking. If they move, take other actions + * that would cause them to interrupt truespeaking the utterance or are affected by an + * effect that would cause such interruption, deletes the utterance token. + * Stops if such condition occurs or something else destroys the token. + * + * @param oTrueSpeaker A creature truespeaking a utterance + * @param lTrueSpeaker The location where the truespeaker was when starting the utterance + * @param oUtrToken The utterance token that controls the ongoing utterance + */ +/*void _UtteranceHB(object oTrueSpeaker, location lTrueSpeaker, object oUtrToken) +{ + if(DEBUG) DoDebug("_UtteranceHB() running:\n" + + "oTrueSpeaker = " + DebugObject2Str(oTrueSpeaker) + "\n" + + "lTrueSpeaker = " + DebugLocation2Str(lTrueSpeaker) + "\n" + + "oUtrToken = " + DebugObject2Str(oUtrToken) + "\n" + + "Distance between utterance start location and current location: " + FloatToString(GetDistanceBetweenLocations(lTrueSpeaker, GetLocation(oTrueSpeaker))) + "\n" + ); + if(GetIsObjectValid(oUtrToken)) + { + // Continuance check + if(GetDistanceBetweenLocations(lTrueSpeaker, GetLocation(oTrueSpeaker)) > 2.0f || // Allow some variance in the location to account for dodging and random fidgeting + !_UtteranceStateCheck(oTrueSpeaker) // Action and effect check + ) + { + if(DEBUG) DoDebug("_UtteranceHB(): truespeaker moved or lost concentration, destroying token"); + _DestroyUtteranceToken(oTrueSpeaker, oUtrToken); + + // Inform truespeaker + FloatingTextStrRefOnCreature(16828469, oTrueSpeaker, FALSE); // "You have lost concentration on the utterance you were attempting to truespeak!" + } + // Schedule next HB + else + DelayCommand(PRC_UTTERANCE_HB_DELAY, _UtteranceHB(oTrueSpeaker, lTrueSpeaker, oUtrToken)); + } +}*/ + +/** Internal function. + * Checks if the truespeaker is in range to use the utterance they are trying to use. + * If not, queues commands to make the truespeaker to run into range. + * + * @param oTrueSpeaker A creature truespeaking a utterance + * @param nUtter SpellID of the utterance being truespeaked + * @param lTarget The target location or the location of the target object + */ +/*void _UtteranceRangeCheck(object oTrueSpeaker, int nUtter, location lTarget) +{ + float fDistance = GetDistanceBetweenLocations(GetLocation(oTrueSpeaker), lTarget); + float fRangeLimit; + string sRange = Get2DACache("spells", "Range", nUtter); + + // Personal range utterances are always in range + if(sRange == "P") + return; + // Ranges according to the CCG spells.2da page + else if(sRange == "T") + fRangeLimit = 2.25f; + else if(sRange == "S") + fRangeLimit = 8.0f; + else if(sRange == "M") + fRangeLimit = 20.0f; + else if(sRange == "L") + fRangeLimit = 40.0f; + + // See if we are out of range + if(fDistance > fRangeLimit) + { + // Create waypoint for the movement + object oWP = CreateObject(OBJECT_TYPE_WAYPOINT, "nw_waypoint001", lTarget); + + // Move into range, with a bit of fudge-factor + //fRangeLimit /= 2; + //ActionMoveToObject(oWP, TRUE, fRangeLimit - 0.15f); + + // CleanUp + ActionDoCommand(DestroyObject(oWP)); + + // CleanUp, paranoia + AssignCommand(oWP, ActionDoCommand(DestroyObject(oWP, 60.0f))); + } +}*/ + +/** Internal function. + * Assigns the fakecast command that is used to display the conjuration VFX when using an utterance. + * Separated from UseUtterance() due to a bug with ActionFakeCastSpellAtObject(), which requires + * use of ClearAllActions() to work around. + * The problem is that if the target is an item on the ground, if the actor is out of spell + * range when doing the fakecast, they will run on top of the item instead of to the edge of + * the spell range. This only happens if there was a "real action" in the actor's action queue + * immediately prior to the fakecast. + */ +/*void _AssignUseUtteranceFakeCastCommands(object oTrueSpeaker, object oTarget, location lTarget, int nSpellID) +{ + // Nuke actions to prevent the fakecast action from bugging + ClearAllActions(); + + if(GetIsObjectValid(oTarget)) + ActionCastFakeSpellAtObject(nSpellID, oTarget, PROJECTILE_PATH_TYPE_DEFAULT); + else + ActionCastFakeSpellAtLocation(nSpellID, lTarget, PROJECTILE_PATH_TYPE_DEFAULT); +}*/ + + +/** Internal function. + * Places the cheatcasting of the real utterance into the truespeaker's action queue. + */ +/*void _UseUtteranceAux(object oTrueSpeaker, object oUtrToken, int nSpellId, + object oTarget, location lTarget, + int nUtter, int nClass, int nLevelOverride, + int bQuickened + ) +{ + if(DEBUG) DoDebug("_UseUtteranceAux() running:\n" + + "oTrueSpeaker = " + DebugObject2Str(oTrueSpeaker) + "\n" + + "oUtrToken = " + DebugObject2Str(oUtrToken) + "\n" + + "nSpellId = " + IntToString(nSpellId) + "\n" + + "oTarget = " + DebugObject2Str(oTarget) + "\n" + + "lTarget = " + DebugLocation2Str(lTarget) + "\n" + + "nUtter = " + IntToString(nUtter) + "\n" + + "nClass = " + IntToString(nClass) + "\n" + + "nLevelOverride = " + IntToString(nLevelOverride) + "\n" + + "bQuickened = " + DebugBool2String(bQuickened) + "\n" + ); + + // Make sure nothing has interrupted this utterance + if(GetIsObjectValid(oUtrToken)) + { + if(DEBUG) DoDebug("_UseUtteranceAux(): Token was valid, queueing actual utterance"); + // Set the class to truespeak as + SetLocalInt(oTrueSpeaker, PRC_TRUESPEAKING_CLASS, nClass + 1); + + // Set the utterance's level + SetLocalInt(oTrueSpeaker, PRC_UTTERANCE_LEVEL, StringToInt(lookup_spell_innate(nSpellId))); + + // Set whether the utterance was quickened + SetLocalInt(oTrueSpeaker, PRC_UTTERANCE_IS_QUICKENED, bQuickened); + + // Queue the real utterance + //ActionCastSpell(nUtter, nLevelOverride, 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, TRUE, TRUE, oTarget); + + if(nLevelOverride != 0) + AssignCommand(oTrueSpeaker, ActionDoCommand(SetLocalInt(oTrueSpeaker, PRC_CASTERLEVEL_OVERRIDE, nLevelOverride))); + if(GetIsObjectValid(oTarget)) + AssignCommand(oTrueSpeaker, ActionCastSpellAtObject(nUtter, oTarget, METAMAGIC_NONE, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE)); + else + AssignCommand(oTrueSpeaker, ActionCastSpellAtLocation(nUtter, lTarget, METAMAGIC_NONE, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE)); + if(nLevelOverride != 0) + AssignCommand(oTrueSpeaker, ActionDoCommand(DeleteLocalInt(oTrueSpeaker, PRC_CASTERLEVEL_OVERRIDE))); + + // Destroy the utterance token for this utterance + _DestroyUtteranceToken(oTrueSpeaker, oUtrToken); + } +}*/ + + +////////////////////////////////////////////////// +/* Function definitions */ +////////////////////////////////////////////////// + +struct utterance EvaluateUtterance(object oTrueSpeaker, object oTarget, int nMetaUtterFlags, int nLexicon) +{ + /* Get some data */ + int bIgnoreConstraints = (DEBUG) ? GetLocalInt(oTrueSpeaker, TRUE_DEBUG_IGNORE_CONSTRAINTS) : FALSE; + // truespeaker-related stuff + int nTruespeakerLevel = GetTruespeakerLevel(oTrueSpeaker); + int nUtterLevel = GetUtteranceLevel(oTrueSpeaker); + int nClass = GetTruespeakingClass(oTrueSpeaker); + + /* Initialise the utterance structure */ + struct utterance utter; + utter.oTrueSpeaker = oTrueSpeaker; + utter.bCanUtter = TRUE; // Assume successfull utterance by default + utter.nTruespeakerLevel = nTruespeakerLevel; + utter.nSpellId = PRCGetSpellId(); + utter.nUtterDC = GetBaseUtteranceDC(oTarget, oTrueSpeaker, nLexicon); + + // Account for metautterances. This includes adding the appropriate DC boosts. + utter = EvaluateMetautterances(utter, nMetaUtterFlags); + // Account for the law of resistance + utter.nUtterDC += GetLawOfResistanceDCIncrease(oTrueSpeaker, utter.nSpellId); + // DC change for targeting self and using a Personal Truename + utter.nUtterDC += AddPersonalTruenameDC(oTrueSpeaker, oTarget); + // DC change for ignoring Spell Resistance + utter.nUtterDC += AddIgnoreSpellResistDC(oTrueSpeaker); + // DC change for specific utterances + utter.nUtterDC += AddUtteranceSpecificDC(oTrueSpeaker); + + // Skip paying anything if something has prevented successfull utterance already by this point + if(utter.bCanUtter) + { + /* Roll the dice, and see if we succeed or fail. + */ + if(GetIsSkillSuccessful(oTrueSpeaker, SKILL_TRUESPEAK, utter.nUtterDC) || bIgnoreConstraints) + { + // Increases the DC of the subsequent utterances + DoLawOfResistanceDCIncrease(oTrueSpeaker, utter.nSpellId); + // Spellfire friendly absorption - This may set bCananifest to FALSE + utter = _DoTruenameSpellfireFriendlyAbsorption(utter, oTarget); + //* APPLY SIDE-EFFECTS THAT RESULT FROM SUCCESSFULL UTTERANCE ABOVE *// + + } + // Failed the DC roll + else + { + // No need for an output here because GetIsSkillSuccessful does it for us. + utter.bCanUtter = FALSE; + } + }//end if + + if(DEBUG) DoDebug("EvaluateUtterance(): Final result:\n" + DebugUtterance2Str(utter)); + + // Initiate utterance-related variable CleanUp + //DelayCommand(0.5f, _CleanUtteranceVariables(oTrueSpeaker)); + + return utter; +} + +/*void UseUtterance(int nUtter, int nClass, int nLevelOverride = 0) +{ + object oTrueSpeaker = OBJECT_SELF; + object oSkin = GetPCSkin(oTrueSpeaker); + object oTarget = PRCGetSpellTargetObject(); + object oUtrToken; + location lTarget = PRCGetSpellTargetLocation(); + int nSpellID = PRCGetSpellId(); + int nUtterDur = StringToInt(Get2DACache("spells", "ConjTime", nUtter)) + StringToInt(Get2DACache("spells", "CastTime", nUtter)); + int bQuicken = FALSE; + + // Normally swift action utterances check + if(Get2DACache("feat", "Constant", GetClassFeatFromPower(nUtter, nClass)) == "SWIFT_ACTION" && // The utterance is swift action to use + TakeSwiftAction(oTrueSpeaker) // And the truespeaker can take a swift action now + ) + { + nUtterDur = 0; + } + // Quicken utterance check + else if(nUtterDur <= 6000 && // If the utterance could be quickened by having truespeaking time of 1 round or less + GetLocalInt(oTrueSpeaker, METAUTTERANCE_QUICKEN_VAR) && // And the truespeaker has Quicken utterance active + TakeSwiftAction(oTrueSpeaker) // And the truespeaker can take a swift action + ) + { + // Set the utterance time to 0 to skip VFX + nUtterDur = 0; + // And set the Quicken utterance used marker to TRUE + bQuicken = TRUE; + } + + if(DEBUG) DoDebug("UseUtterance(): truespeaker is " + DebugObject2Str(oTrueSpeaker) + "\n" + + "nUtter = " + IntToString(nUtter) + "\n" + + "nClass = " + IntToString(nClass) + "\n" + + "nLevelOverride = " + IntToString(nLevelOverride) + "\n" + + "utterance duration = " + IntToString(nUtterDur) + "ms \n" + + "bQuicken = " + DebugBool2String(bQuicken) + "\n" + //+ "Token exists = " + DebugBool2String(GetIsObjectValid(oUtrToken)) + ); + + // Create the utterance token. Deletes any old tokens and cancels corresponding utterances as a side effect + oUtrToken = _CreateUtteranceToken(oTrueSpeaker); + + /// @todo Hook to the truespeaker's OnDamaged event for the concentration checks to avoid losing the utterance + + // Nuke action queue to prevent cheating with creative utterance stacking. + // Probably not necessary anymore - Ornedan + if(DEBUG) SendMessageToPC(oTrueSpeaker, "Clearing all actions in preparation for second stage of the utterance."); + ClearAllActions(); + + // If out of range, move to range + _UtteranceRangeCheck(oTrueSpeaker, nUtter, GetIsObjectValid(oTarget) ? GetLocation(oTarget) : lTarget); + + // Start the utterance monitor HB + DelayCommand(nUtterDur / 1000.0f, ActionDoCommand(_UtteranceHB(oTrueSpeaker, GetLocation(oTrueSpeaker), oUtrToken))); + + // Assuming the spell isn't used as a swift action, fakecast for visuals + if(nUtterDur > 0) + { + // Hack. Workaround of a bug with the fakecast actions. See function comment for details + ActionDoCommand(_AssignUseUtteranceFakeCastCommands(oTrueSpeaker, oTarget, lTarget, nSpellID)); + } + + // Action queue the function that will cheatcast the actual utterance + DelayCommand(nUtterDur / 1000.0f, AssignCommand(oTrueSpeaker, ActionDoCommand(_UseUtteranceAux(oTrueSpeaker, oUtrToken, nSpellID, oTarget, lTarget, nUtter, nClass, nLevelOverride, bQuicken)))); +}*/ + +void UseUtterance(int nUtter, int nClass, int nLevelOverride = 0) +{ + object oTrueSpeaker = OBJECT_SELF; + int bQuickened = FALSE; + int nUtterDur = StringToInt(Get2DACache("spells", "ConjTime", nUtter)) + StringToInt(Get2DACache("spells", "CastTime", nUtter)); + + // Check the Law of Sequence. Returns True if the utterance is active + if (CheckLawOfSequence(oTrueSpeaker, nUtter)) + { + FloatingTextStringOnCreature("You already have " + GetUtteranceName(nUtter) + " active. Utterance Failed.", oTrueSpeaker, FALSE); + return; + } + + // Quicken utterance check + if(nUtterDur <= 6000 && // If the utterance could be quickened by having truespeaking time of 1 round or less + GetLocalInt(oTrueSpeaker, METAUTTERANCE_QUICKEN_VAR) && // And the truespeaker has Quicken utterance active + TakeSwiftAction(oTrueSpeaker)) // And the truespeaker can take a swift action + { + //Adding Auto-Quicken III for one round - deleted after casting is finished. + object oSkin = GetPCSkin(oTrueSpeaker); + itemproperty ipAutoQuicken = ItemPropertyBonusFeat(IP_CONST_NSB_AUTO_QUICKEN); + ActionDoCommand(AddItemProperty(DURATION_TYPE_TEMPORARY, ipAutoQuicken, oSkin, nUtterDur/1000.0f)); + bQuickened = TRUE; + } + + // Setup utterance-related variables + ActionDoCommand(_SetUtteranceVariables(oTrueSpeaker, nClass, StringToInt(lookup_spell_innate(nUtter)), bQuickened)); + + // cast the actual utterance + ActionCastSpell(nUtter, nLevelOverride, 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, 0, 0, OBJECT_INVALID, FALSE); + + // Initiate utterance-related variable CleanUp + ActionDoCommand(_CleanUtteranceVariables(oTrueSpeaker)); +} + +string DebugUtterance2Str(struct utterance utter) +{ + string sRet; + + sRet += "oTrueSpeaker = " + DebugObject2Str(utter.oTrueSpeaker) + "\n"; + sRet += "bCanUtter = " + DebugBool2String(utter.bCanUtter) + "\n"; + sRet += "nTruespeakerLevel = " + IntToString(utter.nTruespeakerLevel) + "\n"; + + sRet += "bEmpower = " + DebugBool2String(utter.bEmpower) + "\n"; + sRet += "bExtend = " + DebugBool2String(utter.bExtend) + "\n"; + sRet += "bQuicken = " + DebugBool2String(utter.bQuicken);// + "\n"; + + return sRet; +} + +void SetLocalUtterance(object oObject, string sName, struct utterance utter) +{ + //SetLocal (oObject, sName + "_", ); + SetLocalObject(oObject, sName + "_oTrueSpeaker", utter.oTrueSpeaker); + + SetLocalInt(oObject, sName + "_bCanUtter", utter.bCanUtter); + SetLocalInt(oObject, sName + "_nTruespeakerLevel", utter.nTruespeakerLevel); + SetLocalInt(oObject, sName + "_nSpellID", utter.nSpellId); + + SetLocalInt(oObject, sName + "_bEmpower", utter.bEmpower); + SetLocalInt(oObject, sName + "_bExtend", utter.bExtend); + SetLocalInt(oObject, sName + "_bQuicken", utter.bQuicken); +} + +struct utterance GetLocalUtterance(object oObject, string sName) +{ + struct utterance utter; + utter.oTrueSpeaker = GetLocalObject(oObject, sName + "_oTrueSpeaker"); + + utter.bCanUtter = GetLocalInt(oObject, sName + "_bCanUtter"); + utter.nTruespeakerLevel = GetLocalInt(oObject, sName + "_nTruespeakerLevel"); + utter.nSpellId = GetLocalInt(oObject, sName + "_nSpellID"); + + utter.bEmpower = GetLocalInt(oObject, sName + "_bEmpower"); + utter.bExtend = GetLocalInt(oObject, sName + "_bExtend"); + utter.bQuicken = GetLocalInt(oObject, sName + "_bQuicken"); + + return utter; +} + +void DeleteLocalUtterance(object oObject, string sName) +{ + DeleteLocalObject(oObject, sName + "_oTrueSpeaker"); + + DeleteLocalInt(oObject, sName + "_bCanUtter"); + DeleteLocalInt(oObject, sName + "_nTruespeakerLevel"); + DeleteLocalInt(oObject, sName + "_nSpellID"); + + DeleteLocalInt(oObject, sName + "_bEmpower"); + DeleteLocalInt(oObject, sName + "_bExtend"); + DeleteLocalInt(oObject, sName + "_bQuicken"); +} + +void TruenameDebugIgnoreConstraints(object oTrueSpeaker) +{ + SetLocalInt(oTrueSpeaker, TRUE_DEBUG_IGNORE_CONSTRAINTS, TRUE); + DelayCommand(0.0f, DeleteLocalInt(oTrueSpeaker, TRUE_DEBUG_IGNORE_CONSTRAINTS)); +} + +// Test main +//void main(){} diff --git a/src/include/true_utter_const.nss b/src/include/true_utter_const.nss new file mode 100644 index 0000000..4fb0b62 --- /dev/null +++ b/src/include/true_utter_const.nss @@ -0,0 +1,178 @@ + + +const string LAW_OF_RESIST_VARNAME = "PRC_LawOfResistance"; +const string LAW_OF_SEQUENCE_VARNAME = "PRC_LawOfSequence"; +const string TRUE_IGNORE_SR = "PRC_True_IgnoreSR"; +const string TRUE_SPEAK_UNTO_MASSES = "PRC_True_SpeakMass"; +const int LEXICON_EVOLVING_MIND = 1; +const int LEXICON_CRAFTED_TOOL = 2; +const int LEXICON_PERFECTED_MAP = 3; +const int LEXICON_MIN_VALUE = 1; +const int LEXICON_MAX_VALUE = 3; + +//Real Utterance SpellId Constants +//Reverse Utterances are denoted with a _R + +// Level 1 Utterances +const int UTTER_DEFENSIVE_EDGE = 3526; +const int UTTER_DEFENSIVE_EDGE_R = 3527; +const int UTTER_INERTIAL_SURGE = 3528; +const int UTTER_INERTIAL_SURGE_R = 3529; +const int UTTER_KNIGHTS_PUISSANCE = 3530; +const int UTTER_KNIGHTS_PUISSANCE_R = 3531; +const int UTTER_UNIVERSAL_APTITUDE = 3532; +const int UTTER_UNIVERSAL_APTITUDE_R = 3533; +const int UTTER_WORD_NURTURING_MINOR = 3534; +const int UTTER_WORD_NURTURING_MINOR_R = 3535; +const int UTTER_FORTIFY_ARMOUR_SNEAK = 3536; +const int UTTER_FORTIFY_ARMOUR_CRIT = 3537; +const int UTTER_KEEN_WEAPON = 3538; +const int UTTER_FOG_VOID_CLOUD = 3539; +const int UTTER_FOG_VOID_SOLID = 3540; +const int UTTER_SHIELD_LANDSCAPE = 3541; +const int UTTER_SHOCKWAVE = 3542; + +// Level 2 Utterances +const int UTTER_ARCHERS_EYE = 3543; +const int UTTER_ARCHERS_EYE_R = 3544; +const int UTTER_HIDDEN_TRUTH = 3545; +const int UTTER_HIDDEN_TRUTH_R = 3546; +const int UTTER_PERCEIVE_UNSEEN = 3547; +const int UTTER_PERCEIVE_UNSEEN_R = 3548; +const int UTTER_SILENT_CASTER = 3549; +const int UTTER_SILENT_CASTER_R = 3550; +const int UTTER_SPEED_ZEPHYR = 3551; +const int UTTER_SPEED_ZEPHYR_R = 3352; +const int UTTER_STRIKE_MIGHT = 3553; +const int UTTER_STRIKE_MIGHT_R = 3554; +const int UTTER_TEMPORAL_TWIST = 3555; +const int UTTER_TEMPORAL_TWIST_R = 3556; +const int UTTER_WORD_NURTURING_LESSER = 3557; +const int UTTER_WORD_NURTURING_LESSER_R = 3558; +const int UTTER_AGITATE_ITEM_HOT = 3559; +const int UTTER_AGITATE_ITEM_COLD = 3560; +const int UTTER_ANALYZE_ITEM = 3561; +const int UTTER_ENERGY_VORTEX_ACID = 3562; +const int UTTER_ENERGY_VORTEX_COLD = 3563; +const int UTTER_ENERGY_VORTEX_ELEC = 3564; +const int UTTER_ENERGY_VORTEX_FIRE = 3565; +const int UTTER_SPEAK_ROCK_MUD = 3566; +const int UTTER_TRANSFORM_LANDSCAPE = 3567; + +// Level 3 Utterances +const int UTTER_ACCELERATED_ATTACK = 3568; +const int UTTER_ACCELERATED_ATTACK_R = 3569; +const int UTTER_ENERGY_NEGATION = 3570; +const int UTTER_ENERGY_NEGATION_R = 3571; +const int UTTER_ENERGY_NEGATION_CHOICE = 3290; +const int UTTER_INCARNATION_ANGELS = 3572; +const int UTTER_INCARNATION_ANGELS_R = 3573; +const int UTTER_SPEED_ZEPHYR_GREATER = 3574; +const int UTTER_SPEED_ZEPHYR_GREATER_R = 3575; +const int UTTER_TEMPORAL_SPIRAL = 3576; +const int UTTER_TEMPORAL_SPIRAL_R = 3577; +const int UTTER_VISION_SHARPENED = 3578; +const int UTTER_VISION_SHARPENED_R = 3579; +const int UTTER_WORD_NURTURING_MODERATE = 3580; +const int UTTER_WORD_NURTURING_MODERATE_R = 3581; +const int UTTER_REMOVE_ITEM = 3582; +const int UTTER_SUPPRESS_WEAPON = 3583; +const int UTTER_LORE_WORLD = 3584; +const int UTTER_MASTER_FOUR_WINDS = 3585; +const int UTTER_THWART_TRAVELER = 3586; + +// Level 4 Utterances +const int UTTER_BREATH_CLEANSING = 3587; +const int UTTER_BREATH_CLEANSING_R = 3588; +const int UTTER_CASTER_LENS = 3589; +const int UTTER_CASTER_LENS_R = 3590; +const int UTTER_CONFOUNDING_RESISTANCE = 3591; +const int UTTER_CONFOUNDING_RESISTANCE_R = 3592; +const int UTTER_MORALE_BOOST = 3593; +const int UTTER_MORALE_BOOST_R = 3594; +const int UTTER_MAGICAL_CONTRACTION = 3595; +const int UTTER_MAGICAL_CONTRACTION_R = 3596; +const int UTTER_SPELL_REBIRTH = 3597; +const int UTTER_SPELL_REBIRTH_R = 3598; +const int UTTER_WORD_NURTURING_POTENT = 3599; +const int UTTER_WORD_NURTURING_POTENT_R = 3600; +const int UTTER_WORD_BOLSTERING = 3601; +const int UTTER_WORD_BOLSTERING_R = 3602; +const int UTTER_WORD_BOLSTERING_CHOICE = 3335; +const int UTTER_SUPPRESS_ITEM = 3603; +const int UTTER_TRANSMUTE_WEAPON = 3604; +const int UTTER_ANGER_SLEEPING_EARTH = 3605; +const int UTTER_CONJUNCTIVE_GATE = 3606; +const int UTTER_DENY_PASSAGE = 3607; + +// Level 5 Utterances +const int UTTER_ELDRITCH_ATTRACTION = 3608; +const int UTTER_ELDRITCH_ATTRACTION_R = 3609; +const int UTTER_ENERGY_NEGATION_GREATER = 3610; +const int UTTER_ENERGY_NEGATION_GREATER_R = 3611; +const int UTTER_ENERGY_NEGATION_GREATER_CHOICE = 3347; +const int UTTER_ESSENCE_LIFESPARK = 3612; +const int UTTER_ESSENCE_LIFESPARK_R = 3613; +const int UTTER_PRETERNATURAL_CLARITY_ATTACK = 3614; +const int UTTER_PRETERNATURAL_CLARITY_SKILL = 3615; +const int UTTER_PRETERNATURAL_CLARITY_SAVE = 3616; +const int UTTER_PRETERNATURAL_CLARITY_R = 3617; +const int UTTER_SENSORY_FOCUS = 3618; +const int UTTER_SENSORY_FOCUS_R = 3619; +const int UTTER_WARD_PEACE = 3620; +const int UTTER_WARD_PEACE_R = 3621; +const int UTTER_WORD_NURTURING_CRITICAL = 3622; +const int UTTER_WORD_NURTURING_CRITICAL_R = 3623; +const int UTTER_METAMAGIC_CATALYST_EMP = 3624; +const int UTTER_METAMAGIC_CATALYST_EXT = 3625; +const int UTTER_METAMAGIC_CATALYST_MAX = 3626; +const int UTTER_SEIZE_ITEM = 3627; + +// Level 6 Utterances +const int UTTER_BREATH_RECOVERY = 3628; +const int UTTER_BREATH_RECOVERY_R = 3629; +const int UTTER_ETHER_REFORGED = 3630; +const int UTTER_ETHER_REFORGED_R = 3631; +const int UTTER_KNIGHTS_PUISSANCE_GREATER = 3632; +const int UTTER_KNIGHTS_PUISSANCE_GREATER_R = 3633; +const int UTTER_MYSTIC_RAMPART = 3634; +const int UTTER_MYSTIC_RAMPART_R = 3635; +const int UTTER_SINGULAR_MIND = 3636; +const int UTTER_SINGULAR_MIND_R = 3637; +const int UTTER_WORD_NURTURING_GREATER = 3638; +const int UTTER_WORD_NURTURING_GREATER_R = 3639; + +// Syllables +const int SYLLABLE_DETACHMENT = 3418; +const int SYLLABLE_AFFLICATION_SIGHT = 3420; +const int SYLLABLE_AFFLICATION_SOUND = 3421; +const int SYLLABLE_AFFLICATION_TOUCH = 3422; +const int SYLLABLE_EXILE = 3423; +const int SYLLABLE_DISSOLUTION = 3424; +const int SYLLABLE_ENERVATION = 3425; + +// Truenamer +const int TRUE_SEE_THE_NAMED = 3415; + +// Brimstone Speaker +const int BRIMSTONE_FIRE_3D6 = 3426; +const int BRIMSTONE_FIRE_5D6 = 3427; +const int BRIMSTONE_FIRE_8D6 = 3428; +const int BRIMSTONE_HEAVEN_LESSER = 3429; +const int BRIMSTONE_HEAVEN_NORMAL = 3430; +const int BRIMSTONE_HEAVEN_GREATER = 3431; + +// Crafted Tool Target Constants +const int CRAFTED_TOOL_QUICKSLOT1 = 3411; +const int CRAFTED_TOOL_QUICKSLOT2 = 3412; +const int CRAFTED_TOOL_QUICKSLOT3 = 3413; +const int CRAFTED_TOOL_QUICKSLOT4 = 3414; + +// AoE Constants for Perfected Map +const int AOE_PER_FOG_VOID_CLOUD = 142; +const int AOE_PER_FOG_VOID_SOLID = 143; +const int AOE_PER_SHIELD_LANDSCAPE = 144; +const int AOE_PER_ENERGY_VORTEX = 145; +const int AOE_PER_SPEAK_ROCK_MUD = 146; +const int AOE_PER_TRANSFORM_LANDSCAPE = 147; +const int AOE_PER_DENY_PASSAGE = 148; \ No newline at end of file diff --git a/src/include/true_utterhook.nss b/src/include/true_utterhook.nss new file mode 100644 index 0000000..36b6b8c --- /dev/null +++ b/src/include/true_utterhook.nss @@ -0,0 +1,157 @@ +//:://///////////////////////////////////////////// +//:: Truenaming Utterance Hook File. +//:: true_utterhook.nss +//::////////////////////////////////////////////// +/* + + This file acts as a hub for all code that + is hooked into the utterance scripts for Truenaming + +*/ +//::////////////////////////////////////////////// +//:: Created By: Stratovarius +//:: Created On: 17-7-2006 +//::////////////////////////////////////////////// + +//#include "prc_x2_craft" +#include "x2_inc_spellhook" +#include "prc_inc_spells" +#include "inc_utility" +#include "prc_inc_itmrstr" + + +// This function holds all functions that are supposed to run before the actual +// spellscript gets run. If this functions returns FALSE, the spell is aborted +// and the spellscript will not run +int TruePreUtterCastCode(); + + +//------------------------------------------------------------------------------ +// if FALSE is returned by this function, the spell will not be cast +// the order in which the functions are called here DOES MATTER, changing it +// WILL break the crafting subsystems +//------------------------------------------------------------------------------ +int TruePreUtterCastCode() +{ + object oTrueSpeaker = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + int nUtterID = PRCGetSpellId(); + int nUtterLevel = GetUtteranceLevel(oTrueSpeaker); + int nTrueSpeakingClass = GetTruespeakingClass(oTrueSpeaker); + int bUtterIsHostile = Get2DACache("spells", "HostileSetting", nUtterID) == "1"; + + int nContinue = !ExecuteScriptAndReturnInt("prespellcode",oTrueSpeaker); + + //--------------------------------------------------------------------------- + // Break any spell require maintaining concentration + //--------------------------------------------------------------------------- + X2BreakConcentrationSpells(); + + //--------------------------------------------------------------------------- + // Check for PRC spell effects + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = PRCSpellEffects(oTrueSpeaker, oTarget, nUtterID, nUtterLevel, nTrueSpeakingClass, bUtterIsHostile, -1); + + //--------------------------------------------------------------------------- + // Run Grappling Concentration Check + //--------------------------------------------------------------------------- + if (nContinue) + nContinue = GrappleConc(oTrueSpeaker, nUtterLevel); + + //--------------------------------------------------------------------------- + // This stuff is only interesting for player characters we assume that use + // magic device always works and NPCs don't use the crafting feats or + // sequencers anyway. Thus, any NON PC spellcaster always exits this script + // with TRUE (unless they are DM possessed or in the Wild Magic Area in + // Chapter 2 of Hordes of the Underdark. + //--------------------------------------------------------------------------- + if(!GetIsPC(oTrueSpeaker) + && !GetPRCSwitch(PRC_NPC_HAS_PC_SPELLCASTING)) + { + if(!GetIsDMPossessed(oTrueSpeaker) && !GetLocalInt(GetArea(oTrueSpeaker), "X2_L_WILD_MAGIC")) + { + return TRUE; + } + } + + //--------------------------------------------------------------------------- + // Run use magic device skill check + //--------------------------------------------------------------------------- + if (nContinue) + { + nContinue = X2UseMagicDeviceCheck(oTrueSpeaker); + } + + //----------------------------------------------------------------------- + // run any user defined spellscript here + //----------------------------------------------------------------------- + if (nContinue) + { + nContinue = X2RunUserDefinedSpellScript(); + } + + //--------------------------------------------------------------------------- + // Check for the new restricted itemproperties + //--------------------------------------------------------------------------- + if(nContinue + && GetIsObjectValid(GetSpellCastItem()) + && !CheckPRCLimitations(GetSpellCastItem(), oTrueSpeaker)) + { + SendMessageToPC(oTrueSpeaker, "You cannot use "+GetName(GetSpellCastItem())); + nContinue = FALSE; + } + + //--------------------------------------------------------------------------- + // The following code is only of interest if an item was targeted + //--------------------------------------------------------------------------- + if (GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM) + { + + //----------------------------------------------------------------------- + // Check if spell was used to trigger item creation feat + //----------------------------------------------------------------------- + if (nContinue) { + nContinue = !ExecuteScriptAndReturnInt("x2_pc_craft", oTrueSpeaker); + } + + //----------------------------------------------------------------------- + // * Execute item OnSpellCast At routing script if activated + //----------------------------------------------------------------------- + if (GetModuleSwitchValue(MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS) == TRUE) + { + SetUserDefinedItemEventNumber(X2_ITEM_EVENT_SPELLCAST_AT); + int nRet = ExecuteScriptAndReturnInt(GetUserDefinedItemEventScriptName(oTarget), oTrueSpeaker); + if (nRet == X2_EXECUTE_SCRIPT_END) + { + return FALSE; + } + } + + //----------------------------------------------------------------------- + // Prevent any spell that has no special coding to handle targetting of items + // from being cast on items. We do this because we can not predict how + // all the hundreds spells in NWN will react when cast on items + //----------------------------------------------------------------------- + if (nContinue) { + nContinue = X2CastOnItemWasAllowed(oTarget); + } + } + + //Cleaning spell variables used for holding the charge + if(!GetLocalInt(oTrueSpeaker, "PRC_SPELL_EVENT")) + { + DeleteLocalInt(oTrueSpeaker, "PRC_SPELL_CHARGE_COUNT"); + DeleteLocalInt(oTrueSpeaker, "PRC_SPELL_CHARGE_SPELLID"); + DeleteLocalObject(oTrueSpeaker, "PRC_SPELL_CONC_TARGET"); + DeleteLocalInt(oTrueSpeaker, "PRC_SPELL_METAMAGIC"); + DeleteLocalManifestation(oTrueSpeaker, "PRC_POWER_HOLD_MANIFESTATION"); + DeleteLocalMystery(oTrueSpeaker, "MYST_HOLD_MYST"); + } + else if(GetLocalInt(oTrueSpeaker, "PRC_SPELL_CHARGE_SPELLID") != PRCGetSpellId()) + { //Sanity check, in case something goes wrong with the action queue + DeleteLocalInt(oTrueSpeaker, "PRC_SPELL_EVENT"); + } + + return nContinue; +} \ No newline at end of file diff --git a/src/include/utl_i_sqluuid.nss b/src/include/utl_i_sqluuid.nss new file mode 100644 index 0000000..01b3a98 --- /dev/null +++ b/src/include/utl_i_sqluuid.nss @@ -0,0 +1,668 @@ +//:://///////////////////////////////////////////// +//:: Utility Include: SQLocals Campaign +//:: utl_i_sqluuid.nss +//::////////////////////////////////////////////// +/* + Daz wrote these library functions to act as replacements for the usual local + functions: + * GetLocalInt / SetLocalInt / DeleteLocalInt + * GetLocalFloat / SetLocalFloat / DeleteLocalFloat + * GetLocalString / SetLocalString / DeleteLocalString + * GetLocalObject / SetLocalObject / DeleteLocalObject (NB: remember these are references NOT serialised objects) + * GetLocalLocation / SetLocalLocation / DeleteLocalLocation + * Plus a new function for saving just a vector by itself. + This version stores variables in the campaign DB using the UUID of the object as + the identifier, therefore it suggests only using this for oPlayer since their UUIDs + are persistent after server restarts. + Note for players existing OnClientLeave this is still valid, while the + versions in utl_i_sqlplayer is not. +*/ +//::////////////////////////////////////////////// +//:: Based off of the nwscript_utility_scripts project; see for dates/creator info +//:: https://github.com/Finaldeath/nwscript_utility_scripts +//::////////////////////////////////////////////// + +const string SQLLOCALUUID_DATABASE_NAME = "sqllocalsuuid_db"; + +const string SQLOCALSUUID_TABLE_NAME = "sqlocalsuuid_table"; + +const int SQLOCALSUUID_TYPE_ALL = 0; +const int SQLOCALSUUID_TYPE_INT = 1; +const int SQLOCALSUUID_TYPE_FLOAT = 2; +const int SQLOCALSUUID_TYPE_STRING = 4; +const int SQLOCALSUUID_TYPE_OBJECT = 8; +const int SQLOCALSUUID_TYPE_VECTOR = 16; +const int SQLOCALSUUID_TYPE_LOCATION = 32; + +// Returns an integer stored in the campaign DB for oPlayer, or 0 on error +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +int SQLocalsUUID_GetInt(object oPlayer, string sVarName); +// Sets an integer stored in the campaign DB for oPlayer to the given value +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to set +// * nValue - Value to store +void SQLocalsUUID_SetInt(object oPlayer, string sVarName, int nValue); +// Deletes an integer stored in the campaign DB for oPlayer +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to delete +void SQLocalsUUID_DeleteInt(object oPlayer, string sVarName); + +// Returns a float stored in the campaign DB for oPlayer, or 0.0 on error +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +float SQLocalsUUID_GetFloat(object oPlayer, string sVarName); +// Sets a float stored in the campaign DB for oPlayer to the given value +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to set +// * fValue - Value to store +void SQLocalsUUID_SetFloat(object oPlayer, string sVarName, float fValue); +// Deletes a float stored in the campaign DB for oPlayer +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to delete +void SQLocalsUUID_DeleteFloat(object oPlayer, string sVarName); + +// Returns an string stored in the campaign DB for oPlayer, or "" on error +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +string SQLocalsUUID_GetString(object oPlayer, string sVarName); +// Sets a string stored in the campaign DB for oPlayer to the given value +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to set +// * sValue - Value to store +void SQLocalsUUID_SetString(object oPlayer, string sVarName, string sValue); +// Deletes a string stored in the campaign DB for oPlayer +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to delete +void SQLocalsUUID_DeleteString(object oPlayer, string sVarName); + +// Returns an object identifier stored in the campaign DB for oPlayer +// If this is used on a player it might return a "once valid" OID, so check +// with GetIsObjectValid, do not compare to OBJECT_INVALID. +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +object SQLocalsUUID_GetObject(object oPlayer, string sVarName); +// Sets an object identifier stored in the campaign DB for oPlayer to the given value +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to set +// * oValue - Value to store +void SQLocalsUUID_SetObject(object oPlayer, string sVarName, object oValue); +// Deletes an object identifier stored in the campaign DB for oPlayer +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to delete +void SQLocalsUUID_DeleteObject(object oPlayer, string sVarName); + +// Returns a vector stored in the campaign DB for oPlayer, or [0.0, 0.0, 0.0] on error +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +vector SQLocalsUUID_GetVector(object oPlayer, string sVarName); +// Sets a vector stored in the campaign DB for oPlayer to the given value +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to set +// * vValue - Value to store +void SQLocalsUUID_SetVector(object oPlayer, string sVarName, vector vValue); +// Deletes a vector stored in the campaign DB for oPlayer +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to delete +void SQLocalsUUID_DeleteVector(object oPlayer, string sVarName); + +// Returns a location stored in the campaign DB for oPlayer, or the starting location of the module on error +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +location SQLocalsUUID_GetLocation(object oPlayer, string sVarName); +// Sets a location stored in the campaign DB for oPlayer to the given value +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to set +// * lValue - Value to store +void SQLocalsUUID_SetLocation(object oPlayer, string sVarName, location lValue); +// Deletes a location stored in the campaign DB for oPlayer +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to delete +void SQLocalsUUID_DeleteLocation(object oPlayer, string sVarName); + +// Deletes a set of locals stored in the campaign DB for oPlayer matching the given criteria +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * nType - The SQLOCALSUUID_TYPE_* you wish to remove (default: SQLOCALSUUID_TYPE_ALL) +// * sLike - The string to compare with the SQL "like" comparison +// * sEscape - The escape character to use with the SQL "escape" keyword +void SQLocalsUUID_Delete(object oPlayer, int nType = SQLOCALSUUID_TYPE_ALL, string sLike = "", string sEscape = ""); +// Counts a set of locals stored in the campaign DB for oPlayer matching the given criteria +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * nType - The SQLOCALSUUID_TYPE_* you wish to count (default: SQLOCALSUUID_TYPE_ALL) +// * sLike - The string to compare with the SQL "like" comparison +// * sEscape - The escape character to use with the SQL "escape" keyword +int SQLocalsUUID_Count(object oPlayer, int nType = SQLOCALSUUID_TYPE_ALL, string sLike = "", string sEscape = ""); +// Checks a locals stored in the campaign DB for oPlayer is set +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +// * nType - The SQLOCALSUUID_TYPE_* you wish to check +int SQLocalsUUID_IsSet(object oPlayer, string sVarName, int nType); +// Returns the last Unix time the given variable was updated +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +// * nType - The SQLOCALSUUID_TYPE_* you wish to check +int SQLocalsUUID_GetLastUpdated_UnixEpoch(object oPlayer, string sVarName, int nType); +// Returns the last UTC time the given variable was updated +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +// * nType - The SQLOCALSUUID_TYPE_* you wish to check +string SQLocalsUUID_GetLastUpdated_UTC(object oPlayer, string sVarName, int nType); + + +/* INTERNAL */ +void SQLocalsUUID_CreateTable() +{ + sqlquery sql = SqlPrepareQueryCampaign(SQLLOCALUUID_DATABASE_NAME, + "CREATE TABLE IF NOT EXISTS " + SQLOCALSUUID_TABLE_NAME + " (" + + "type INTEGER, " + + "uuid TEXT, " + + "varname TEXT, " + + "value TEXT, " + + "timestamp INTEGER, " + + "PRIMARY KEY(type, uuid, varname));"); + SqlStep(sql); +} + +sqlquery SQLocalsUUID_PrepareSelect(object oPlayer, int nType, string sVarName) +{ + SQLocalsUUID_CreateTable(); + + sqlquery sql = SqlPrepareQueryCampaign(SQLLOCALUUID_DATABASE_NAME, + "SELECT value FROM " + SQLOCALSUUID_TABLE_NAME + " " + + "WHERE type = @type AND uuid = @uuid AND varname = @varname;"); + + SqlBindInt(sql, "@type", nType); + SqlBindString(sql, "@uuid", GetObjectUUID(oPlayer)); + SqlBindString(sql, "@varname", sVarName); + + return sql; +} + +sqlquery SQLocalsUUID_PrepareInsert(object oPlayer, int nType, string sVarName) +{ + SQLocalsUUID_CreateTable(); + + sqlquery sql = SqlPrepareQueryCampaign(SQLLOCALUUID_DATABASE_NAME, + "INSERT INTO " + SQLOCALSUUID_TABLE_NAME + " " + + "(type, uuid, varname, value, timestamp) VALUES (@type, @uuid, @varname, @value, strftime('%s','now')) " + + "ON CONFLICT (type, uuid, varname) DO UPDATE SET value = @value, timestamp = strftime('%s','now');"); + + SqlBindInt(sql, "@type", nType); + SqlBindString(sql, "@uuid", GetObjectUUID(oPlayer)); + SqlBindString(sql, "@varname", sVarName); + + return sql; +} + +sqlquery SQLocalsUUID_PrepareDelete(object oPlayer, int nType, string sVarName) +{ + SQLocalsUUID_CreateTable(); + + sqlquery sql = SqlPrepareQueryCampaign(SQLLOCALUUID_DATABASE_NAME, + "DELETE FROM " + SQLOCALSUUID_TABLE_NAME + " " + + "WHERE type = @type AND uuid = @uuid AND varname = @varname;"); + + SqlBindInt(sql, "@type", nType); + SqlBindString(sql, "@uuid", GetObjectUUID(oPlayer)); + SqlBindString(sql, "@varname", sVarName); + + return sql; +} + +string SQLocalsUUID_LocationToString(location locLocation) +{ + string sAreaId = ObjectToString(GetAreaFromLocation(locLocation)); + vector vPosition = GetPositionFromLocation(locLocation); + float fFacing = GetFacingFromLocation(locLocation); + + return "#A#" + sAreaId + + "#X#" + FloatToString(vPosition.x, 0, 5) + + "#Y#" + FloatToString(vPosition.y, 0, 5) + + "#Z#" + FloatToString(vPosition.z, 0, 5) + + "#F#" + FloatToString(fFacing, 0, 5) + "#"; +} + +location SQLocalsUUID_StringToLocation(string sLocation) +{ + location locLocation; + + int nLength = GetStringLength(sLocation); + + if(nLength > 0) + { + int nPos, nCount; + + nPos = FindSubString(sLocation, "#A#") + 3; + nCount = FindSubString(GetSubString(sLocation, nPos, nLength - nPos), "#"); + object oArea = StringToObject(GetSubString(sLocation, nPos, nCount)); + + nPos = FindSubString(sLocation, "#X#") + 3; + nCount = FindSubString(GetSubString(sLocation, nPos, nLength - nPos), "#"); + float fX = StringToFloat(GetSubString(sLocation, nPos, nCount)); + + nPos = FindSubString(sLocation, "#Y#") + 3; + nCount = FindSubString(GetSubString(sLocation, nPos, nLength - nPos), "#"); + float fY = StringToFloat(GetSubString(sLocation, nPos, nCount)); + + nPos = FindSubString(sLocation, "#Z#") + 3; + nCount = FindSubString(GetSubString(sLocation, nPos, nLength - nPos), "#"); + float fZ = StringToFloat(GetSubString(sLocation, nPos, nCount)); + + vector vPosition = Vector(fX, fY, fZ); + + nPos = FindSubString(sLocation, "#F#") + 3; + nCount = FindSubString(GetSubString(sLocation, nPos, nLength - nPos), "#"); + float fOrientation = StringToFloat(GetSubString(sLocation, nPos, nCount)); + + if (GetIsObjectValid(oArea)) + locLocation = Location(oArea, vPosition, fOrientation); + else + locLocation = GetStartingLocation(); + } + + return locLocation; +} +/* **** */ + +/* INT */ + +// Returns an integer stored in the campaign DB for oPlayer, or 0 on error +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +int SQLocalsUUID_GetInt(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return 0; + + sqlquery sql = SQLocalsUUID_PrepareSelect(oPlayer, SQLOCALSUUID_TYPE_INT, sVarName); + + if (SqlStep(sql)) + return SqlGetInt(sql, 0); + else + return 0; +} + +// Sets an integer stored in the campaign DB for oPlayer to the given value +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +// * nValue - Value to store +void SQLocalsUUID_SetInt(object oPlayer, string sVarName, int nValue) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsUUID_PrepareInsert(oPlayer, SQLOCALSUUID_TYPE_INT, sVarName); + SqlBindInt(sql, "@value", nValue); + SqlStep(sql); +} + +// Deletes an integer stored in the campaign DB for oPlayer +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to delete +void SQLocalsUUID_DeleteInt(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsUUID_PrepareDelete(oPlayer, SQLOCALSUUID_TYPE_INT, sVarName); + SqlStep(sql); +} +/* **** */ + +/* FLOAT */ + +// Returns a float stored in the campaign DB for oPlayer, or 0.0 on error +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +float SQLocalsUUID_GetFloat(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return 0.0f; + + sqlquery sql = SQLocalsUUID_PrepareSelect(oPlayer, SQLOCALSUUID_TYPE_FLOAT, sVarName); + + if (SqlStep(sql)) + return SqlGetFloat(sql, 0); + else + return 0.0f; +} + +// Sets a float stored in the campaign DB for oPlayer to the given value +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +// * fValue - Value to store +void SQLocalsUUID_SetFloat(object oPlayer, string sVarName, float fValue) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsUUID_PrepareInsert(oPlayer, SQLOCALSUUID_TYPE_FLOAT, sVarName); + SqlBindFloat(sql, "@value", fValue); + SqlStep(sql); +} + +// Deletes a float stored in the campaign DB for oPlayer +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to delete +void SQLocalsUUID_DeleteFloat(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsUUID_PrepareDelete(oPlayer, SQLOCALSUUID_TYPE_FLOAT, sVarName); + SqlStep(sql); +} +/* **** */ + +/* STRING */ + +// Returns an string stored in the campaign DB for oPlayer, or "" on error +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +string SQLocalsUUID_GetString(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return ""; + + sqlquery sql = SQLocalsUUID_PrepareSelect(oPlayer, SQLOCALSUUID_TYPE_STRING, sVarName); + + if (SqlStep(sql)) + return SqlGetString(sql, 0); + else + return ""; +} + +// Sets a string stored in the campaign DB for oPlayer to the given value +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +// * sValue - Value to store +void SQLocalsUUID_SetString(object oPlayer, string sVarName, string sValue) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsUUID_PrepareInsert(oPlayer, SQLOCALSUUID_TYPE_STRING, sVarName); + SqlBindString(sql, "@value", sValue); + SqlStep(sql); +} + +// Deletes a string stored in the campaign DB for oPlayer +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to delete +void SQLocalsUUID_DeleteString(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsUUID_PrepareDelete(oPlayer, SQLOCALSUUID_TYPE_STRING, sVarName); + SqlStep(sql); +} +/* **** */ + +/* OBJECT */ + + +// Returns an object identifier stored in the campaign DB for oPlayer +// If this is used on a player it might return a "once valid" OID, so check +// with GetIsObjectValid, do not compare to OBJECT_INVALID. +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +object SQLocalsUUID_GetObject(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return OBJECT_INVALID; + + sqlquery sql = SQLocalsUUID_PrepareSelect(oPlayer, SQLOCALSUUID_TYPE_OBJECT, sVarName); + + if (SqlStep(sql)) + return StringToObject(SqlGetString(sql, 0)); + else + return OBJECT_INVALID; +} + +// Sets an object identifier stored in the campaign DB for oPlayer to the given value +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +// * oValue - Value to store +void SQLocalsUUID_SetObject(object oPlayer, string sVarName, object oValue) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsUUID_PrepareInsert(oPlayer, SQLOCALSUUID_TYPE_OBJECT, sVarName); + SqlBindString(sql, "@value", ObjectToString(oValue)); + SqlStep(sql); +} + +// Deletes an object identifier stored in the campaign DB for oPlayer +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to delete +void SQLocalsUUID_DeleteObject(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsUUID_PrepareDelete(oPlayer, SQLOCALSUUID_TYPE_OBJECT, sVarName); + SqlStep(sql); +} +/* **** */ + +/* VECTOR */ + +// Returns a vector stored in the campaign DB for oPlayer, or [0.0, 0.0, 0.0] on error +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +vector SQLocalsUUID_GetVector(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return [0.0f, 0.0f, 0.0f]; + + sqlquery sql = SQLocalsUUID_PrepareSelect(oPlayer, SQLOCALSUUID_TYPE_VECTOR, sVarName); + + if (SqlStep(sql)) + return SqlGetVector(sql, 0); + else + return [0.0f, 0.0f, 0.0f]; +} + +// Sets a vector stored in the campaign DB for oPlayer to the given value +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +// * vValue - Value to store +void SQLocalsUUID_SetVector(object oPlayer, string sVarName, vector vValue) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsUUID_PrepareInsert(oPlayer, SQLOCALSUUID_TYPE_VECTOR, sVarName); + SqlBindVector(sql, "@value", vValue); + SqlStep(sql); +} + +// Deletes a vector stored in the campaign DB for oPlayer +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to delete +void SQLocalsUUID_DeleteVector(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsUUID_PrepareDelete(oPlayer, SQLOCALSUUID_TYPE_VECTOR, sVarName); + SqlStep(sql); +} +/* **** */ + +/* LOCATION */ + +// Returns a location stored in the campaign DB for oPlayer, or the starting location of the module on error +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +location SQLocalsUUID_GetLocation(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return GetStartingLocation(); + + sqlquery sql = SQLocalsUUID_PrepareSelect(oPlayer, SQLOCALSUUID_TYPE_LOCATION, sVarName); + + if (SqlStep(sql)) + return SQLocalsUUID_StringToLocation(SqlGetString(sql, 0)); + else + return GetStartingLocation(); +} + +// Sets a location stored in the campaign DB for oPlayer to the given value +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +// * lValue - Value to store +void SQLocalsUUID_SetLocation(object oPlayer, string sVarName, location lValue) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsUUID_PrepareInsert(oPlayer, SQLOCALSUUID_TYPE_LOCATION, sVarName); + SqlBindString(sql, "@value", SQLocalsUUID_LocationToString(lValue)); + SqlStep(sql); +} + +// Deletes a location stored in the campaign DB for oPlayer +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to delete +void SQLocalsUUID_DeleteLocation(object oPlayer, string sVarName) +{ + if (!GetIsPC(oPlayer) || sVarName == "") return; + + sqlquery sql = SQLocalsUUID_PrepareDelete(oPlayer, SQLOCALSUUID_TYPE_LOCATION, sVarName); + SqlStep(sql); +} +/* **** */ + +/* UTILITY */ + +// Deletes a set of locals stored in the campaign DB for oPlayer matching the given criteria +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * nType - The SQLOCALSUUID_TYPE_* you wish to remove (default: SQLOCALSUUID_TYPE_ALL) +// * sLike - The string to compare with the SQL "like" comparison +// * sEscape - The escape character to use with the SQL "escape" keyword +void SQLocalsUUID_Delete(object oPlayer, int nType = SQLOCALSUUID_TYPE_ALL, string sLike = "", string sEscape = "") +{ + if (!GetIsPC(oPlayer) || nType < 0) return; + + SQLocalsUUID_CreateTable(); + + sqlquery sql = SqlPrepareQueryCampaign(SQLLOCALUUID_DATABASE_NAME, + "DELETE FROM " + SQLOCALSUUID_TABLE_NAME + " " + + "WHERE uuid = @uuid" + + (nType != SQLOCALSUUID_TYPE_ALL ? "AND type & @type " : " ") + + (sLike != "" ? "AND varname LIKE @like " + (sEscape != "" ? "ESCAPE @escape" : "") : "") + + ";"); + + SqlBindString(sql, "@uuid", GetObjectUUID(oPlayer)); + + if (nType != SQLOCALSUUID_TYPE_ALL) + SqlBindInt(sql, "@type", nType); + if (sLike != "") + { + SqlBindString(sql, "@like", sLike); + + if (sEscape != "") + SqlBindString(sql, "@escape", sEscape); + } + + SqlStep(sql); +} + +// Counts a set of locals stored in the campaign DB for oPlayer matching the given criteria +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * nType - The SQLOCALSUUID_TYPE_* you wish to count (default: SQLOCALSUUID_TYPE_ALL) +// * sLike - The string to compare with the SQL "like" comparison +// * sEscape - The escape character to use with the SQL "escape" keyword +int SQLocalsUUID_Count(object oPlayer, int nType = SQLOCALSUUID_TYPE_ALL, string sLike = "", string sEscape = "") +{ + if (!GetIsPC(oPlayer) || nType < 0) return 0; + + SQLocalsUUID_CreateTable(); + + sqlquery sql = SqlPrepareQueryObject(oPlayer, + "SELECT COUNT(*) FROM " + SQLOCALSUUID_TABLE_NAME + " " + + "WHERE uuid = @uuid " + + (nType != SQLOCALSUUID_TYPE_ALL ? "AND type & @type " : " ") + + (sLike != "" ? "AND varname LIKE @like " + (sEscape != "" ? "ESCAPE @escape" : "") : "") + + ";"); + + SqlBindString(sql, "@uuid", GetObjectUUID(oPlayer)); + + if (nType != SQLOCALSUUID_TYPE_ALL) + SqlBindInt(sql, "@type", nType); + if (sLike != "") + { + SqlBindString(sql, "@like", sLike); + + if (sEscape != "") + SqlBindString(sql, "@escape", sEscape); + } + + if (SqlStep(sql)) + return SqlGetInt(sql, 0); + else + return 0; +} + +// Checks a locals stored in the campaign DB for oPlayer is set +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +// * nType - The SQLOCALSUUID_TYPE_* you wish to check (default: SQLOCALSUUID_TYPE_ALL) +int SQLocalsUUID_IsSet(object oPlayer, string sVarName, int nType) +{ + if (!GetIsPC(oPlayer) || nType < 0) return 0; + + SQLocalsUUID_CreateTable(); + + sqlquery sql = SqlPrepareQueryObject(oPlayer, + "SELECT * FROM " + SQLOCALSUUID_TABLE_NAME + " " + + "WHERE uuid = @uuid " + + (nType != SQLOCALSUUID_TYPE_ALL ? "AND type & @type " : " ") + + "AND varname = @varname;"); + + SqlBindString(sql, "@uuid", GetObjectUUID(oPlayer)); + + if (nType != SQLOCALSUUID_TYPE_ALL) + SqlBindInt(sql, "@type", nType); + SqlBindString(sql, "@varname", sVarName); + + return SqlStep(sql); +} + +// Returns the last Unix time the given variable was updated +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +// * nType - The SQLOCALSUUID_TYPE_* you wish to check (default: SQLOCALSUUID_TYPE_ALL) +int SQLocalsUUID_GetLastUpdated_UnixEpoch(object oPlayer, string sVarName, int nType) +{ + if (!GetIsPC(oPlayer) || nType <= 0) return 0; + + SQLocalsUUID_CreateTable(); + + sqlquery sql = SqlPrepareQueryObject(oPlayer, + "SELECT timestamp FROM " + SQLOCALSUUID_TABLE_NAME + " " + + "WHERE type = @type " + + "AND uuid = @uuid" + + "AND varname = @varname;"); + + SqlBindInt(sql, "@type", nType); + SqlBindString(sql, "@uuid", GetObjectUUID(oPlayer)); + SqlBindString(sql, "@varname", sVarName); + + if (SqlStep(sql)) + return SqlGetInt(sql, 0); + else + return 0; +} + +// Returns the last UTC time the given variable was updated +// * oPlayer - a player object (uses GetObjectUUID to identify) +// * sVarName - name of the variable to retrieve +// * nType - The SQLOCALSUUID_TYPE_* you wish to check (default: SQLOCALSUUID_TYPE_ALL) +string SQLocalsUUID_GetLastUpdated_UTC(object oPlayer, string sVarName, int nType) +{ + if (!GetIsPC(oPlayer) || nType <= 0) return ""; + + SQLocalsUUID_CreateTable(); + + sqlquery sql = SqlPrepareQueryObject(oPlayer, + "SELECT datetime(timestamp, 'unixepoch') FROM " + SQLOCALSUUID_TABLE_NAME + " " + + "WHERE type = @type " + + "AND uuid = @uuid" + + "AND varname = @varname;"); + + SqlBindInt(sql, "@type", nType); + SqlBindString(sql, "@uuid", GetObjectUUID(oPlayer)); + SqlBindString(sql, "@varname", sVarName); + + if (SqlStep(sql)) + return SqlGetString(sql, 0); + else + return ""; +} \ No newline at end of file diff --git a/src/include/x0_i0_transport.nss b/src/include/x0_i0_transport.nss new file mode 100644 index 0000000..bd3c288 --- /dev/null +++ b/src/include/x0_i0_transport.nss @@ -0,0 +1,302 @@ +//::////////////////////////////////////////////////// +//:: X0_I0_TRANSPORT +//:: Copyright (c) 2002 Floodgate Entertainment +//::////////////////////////////////////////////////// +/* + +Functions for making creatures travel/transport to new locations. + + */ +//::////////////////////////////////////////////////// +//:: Created By: Naomi Novik +//:: Created On: 09/12/2002 +//::////////////////////////////////////////////////// + +/********************************************************************** + * CONSTANTS + **********************************************************************/ + + +/********************************************************************** + * FUNCTION PROTOTYPES + **********************************************************************/ + + +// Target goes to specified destination object intelligently. +// If location is in same area, walk (or run) there. +// If location is in different area, walk (or run) to +// most appropriate door, area transition, or waypoint, +// then jump. +// If either of these fail, jump after fDelay seconds. +void TravelToObject(object oDest, object oTarget=OBJECT_SELF, int bRun=FALSE, float fDelay=10.0); + +// Target goes to specified location intelligently. See +// TravelToObject for description. +void TravelToLocation(location lDest, object oTarget=OBJECT_SELF, int bRun=FALSE, float fDelay=10.0); + +// Find nearest exit to target (either door or waypoint). +object GetNearestExit(object oTarget=OBJECT_SELF); + +// Find best exit based on desired target area +object GetBestExit(object oTarget=OBJECT_SELF, object oTargetArea=OBJECT_INVALID); + +// Transport a player and his/her associates to a waypoint. +// This does NOT transport the rest of the player's party, +// only their henchman, summoned, dominated, etc. +void TransportToWaypoint(object oPC, object oWaypoint); + +// Transport a player and his/her associates to a location. +// This does NOT transport the rest of the player's party, +// only their henchman, summoned, dominated, etc. +void TransportToLocation(object oPC, location oLoc); + +// Transport an entire party to a waypoint +void TransportAllToWaypoint(object oPC, object oWaypoint); + +// Transport an entire party to a location +void TransportAllToLocation(object oPC, location lLoc); + + + +/********************************************************************** + * FUNCTION PROTOTYPES + **********************************************************************/ + +// Target goes to specified destination object intelligently. +// If location is in same area, walk (or run) there. +// If location is in different area, walk (or run) to +// nearest waypoint or door, then jump. +// If either of these fail, jump after a timeout. +void TravelToObject(object oDest, object oTarget=OBJECT_SELF, int bRun=FALSE, float fDelay=10.0) +{ + TravelToLocation(GetLocation(oDest), oTarget, bRun, fDelay); +} + +// Target goes to specified location intelligently. See +// TravelToObject for description. +void TravelToLocation(location lDest, object oTarget=OBJECT_SELF, int bRun=FALSE, float fDelay=10.0) +{ + object oDestArea = GetAreaFromLocation(lDest); + if (oDestArea == GetArea(oTarget)) { + AssignCommand(oTarget, + ActionForceMoveToLocation(lDest, bRun, fDelay)); + } else { + object oBestExit = GetBestExit(oTarget, oDestArea); + AssignCommand(oTarget, + ActionForceMoveToObject(oBestExit, bRun, 1.0, fDelay)); + int nObjType = GetObjectType(oBestExit); + if (nObjType == OBJECT_TYPE_DOOR) { + AssignCommand(oTarget, ActionOpenDoor(oBestExit)); + } + AssignCommand(oTarget, + ActionJumpToLocation(lDest)); + } + AssignCommand(oTarget, DelayCommand(fDelay, ClearAllActions())); + AssignCommand(oTarget, DelayCommand(fDelay, JumpToLocation(lDest))); +} + +// Find nearest exit to target (either door or trigger or +// (failing those) waypoint). +object GetNearestExit(object oTarget=OBJECT_SELF) +{ + object oCurArea = GetArea(oTarget); + + object oNearDoor = GetNearestObject(OBJECT_TYPE_DOOR, oTarget); + if (GetArea(oNearDoor) != oCurArea) + oNearDoor = OBJECT_INVALID; + + // Find nearest area transition trigger + int nTrig = 1; + object oNearTrig = GetNearestObject(OBJECT_TYPE_TRIGGER, oTarget); + while (GetIsObjectValid(oNearTrig) + && GetArea(oNearTrig) == oCurArea + && !GetIsObjectValid(GetTransitionTarget(oNearTrig))) + { + nTrig++; + oNearTrig = GetNearestObject(OBJECT_TYPE_TRIGGER, oTarget, nTrig); + } + if (GetArea(oNearTrig) != oCurArea) + oNearTrig = OBJECT_INVALID; + + float fMaxDist = 10000.0; + float fDoorDist = fMaxDist; + float fTrigDist = fMaxDist; + + if (GetIsObjectValid(oNearDoor)) { + fDoorDist = GetDistanceBetween(oNearDoor, oTarget); + } + if (GetIsObjectValid(oNearTrig)) { + fTrigDist = GetDistanceBetween(oNearTrig, oTarget); + } + + if (fTrigDist < fDoorDist) + return oNearTrig; + + if (fDoorDist < fTrigDist || fDoorDist < fMaxDist) + return oNearDoor; + + // No door/area transition -- use waypoint as a backup exit + return GetNearestObject(OBJECT_TYPE_WAYPOINT, oTarget); +} + +// Private function: find the best exit of the desired type. +object GetBestExitByType(object oTarget=OBJECT_SELF, object oTargetArea=OBJECT_INVALID, int nObjType=OBJECT_TYPE_DOOR) +{ + object oCurrentArea = GetArea(oTarget); + int nDoor = 1; + + object oDoor = GetNearestObject(nObjType, oTarget); + object oNearestDoor = oDoor; + object oDestArea = OBJECT_INVALID; + + object oBestDoor = OBJECT_INVALID; + object oBestDestArea = OBJECT_INVALID; + + while (GetIsObjectValid(oDoor) && GetArea(oDoor) == oCurrentArea) { + oDestArea = GetArea(GetTransitionTarget(oDoor)); + + // If we find a door that leads to the target + // area, use it + if (oDestArea == oTargetArea) { + return oDoor; + } + + // If we find a door that leads to a different area, + // that might be good if we haven't already found one + // that leads to the desired area, or a closer door + // that leads to a different area. + if (oDestArea != oCurrentArea && !GetIsObjectValid(oBestDoor)) { + oBestDoor = oDoor; + } + + // try the next door + nDoor++; + oDoor = GetNearestObject(nObjType, oTarget, nDoor); + } + + // If we found a door that leads to a different area, + // return that one. + if (GetIsObjectValid(oBestDoor)) + return oBestDoor; + + // Otherwise, return the nearest, if it's in this area. + if (GetArea(oNearestDoor) == oCurrentArea) + return oNearestDoor; + + return OBJECT_INVALID; +} + + +// Find best exit based on desired target area +object GetBestExit(object oTarget=OBJECT_SELF, object oTargetArea=OBJECT_INVALID) +{ + if (!GetIsObjectValid(oTargetArea)) + return GetNearestExit(oTarget); + + // Try and find a door + object oBestDoor = GetBestExitByType(oTarget, + oTargetArea, + OBJECT_TYPE_DOOR); + + if (GetIsObjectValid(oBestDoor)) { + if (GetTransitionTarget(oBestDoor) == oTargetArea) { + return oBestDoor; + } + } + + // Try and find a trigger + object oBestTrigger = GetBestExitByType(oTarget, + oTargetArea, + OBJECT_TYPE_TRIGGER); + if (GetIsObjectValid(oBestTrigger)) { + if (GetTransitionTarget(oBestTrigger) == oTargetArea) { + return oBestTrigger; + } + } + + if (GetIsObjectValid(oBestDoor)) + return oBestDoor; + + if (GetIsObjectValid(oBestTrigger)) + return oBestTrigger; + + return GetNearestExit(oTarget); + +} + + +// Transport a player and his/her associates to a waypoint. +// This does NOT transport the rest of the player's party, +// only their henchman, summoned, dominated, etc. +void TransportToWaypoint(object oPC, object oWaypoint) +{ + if (!GetIsObjectValid(oWaypoint)) { + return; + } + TransportToLocation(oPC, GetLocation(oWaypoint)); +} + +// Transport a player and his/her associates to a location. +// This does NOT transport the rest of the player's party, +// only their henchman, summoned, dominated, etc. +void TransportToLocation(object oPC, location oLoc) +{ + // Jump the PC + AssignCommand(oPC, ClearAllActions()); + AssignCommand(oPC, JumpToLocation(oLoc)); + + // Not a PC, so has no associates + if (!GetIsPC(oPC)) + return; + + // Get all the possible associates of this PC + object oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC); + object oDomin = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC); + object oFamil = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC); + object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC); + object oAnimalComp = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC); + + // Jump any associates + if (GetIsObjectValid(oHench)) { + AssignCommand(oHench, ClearAllActions()); + AssignCommand(oHench, JumpToLocation(oLoc)); + } + if (GetIsObjectValid(oDomin)) { + AssignCommand(oDomin, ClearAllActions()); + AssignCommand(oDomin, JumpToLocation(oLoc)); + } + if (GetIsObjectValid(oFamil)) { + AssignCommand(oFamil, ClearAllActions()); + AssignCommand(oFamil, JumpToLocation(oLoc)); + } + if (GetIsObjectValid(oSummon)) { + AssignCommand(oSummon, ClearAllActions()); + AssignCommand(oSummon, JumpToLocation(oLoc)); + } + if (GetIsObjectValid(oAnimalComp)) { + AssignCommand(oAnimalComp, ClearAllActions()); + AssignCommand(oAnimalComp, JumpToLocation(oLoc)); + } +} + + +// Transport an entire party with all associates to a waypoint. +void TransportAllToWaypoint(object oPC, object oWaypoint) +{ + if (!GetIsObjectValid(oWaypoint)) { + return; + } + TransportAllToLocation(oPC, GetLocation(oWaypoint)); +} + +// Transport an entire party with all associates to a location. +void TransportAllToLocation(object oPC, location lLoc) +{ + object oPartyMem = GetFirstFactionMember(oPC, TRUE); + while (GetIsObjectValid(oPartyMem)) { + TransportToLocation(oPartyMem, lLoc); + oPartyMem = GetNextFactionMember(oPC, TRUE); + } + TransportToLocation(oPC, lLoc); +} + diff --git a/src/include/x2_inc_cutscenep.nss b/src/include/x2_inc_cutscenep.nss new file mode 100644 index 0000000..02be07d --- /dev/null +++ b/src/include/x2_inc_cutscenep.nss @@ -0,0 +1,2135 @@ +//Modified by Primogenitor +/* +Error in bioware original due to mismatch +betweeen CutCreateObjectCopy definition and +implementation. Bioware compiler doesnt see +it, but PRC one does. +*/ + + +/////////////////////////////////////////////////////// +//:: Name - x2_inc_cutscene +//:: Copyright (c) 2001 Bioware Corp. +/////////////////////////////////////////////////////// +/* + This is the cutscene include file that contains many + useful functions when doing cutscenes. The uses are + described before each function. + + Each function will be in a wrapper function that will + check to see if the cutscene has been aborted yet or + not. + + There is an added variable called iShift. This can be + ignored in all cases, except when the GetShift function + is being called. It was added so that when a shift is + done, you can insert stuff (the reason for the shift) + into your script without the new stuff being shifted. + + An example of this: You decide you need to add 20 + seconds of material in the middle of your cutscene. + You need to do this at the 1 minute mark, and you + want to shift everything after that point by 20 secs. + The new stuff you add there for that 20 secs will + get shifted as well since you called the shift. But + by adding FALSE at the end of the function call, it + will ignore the shift amount. + + Also, if anything after the shift is something that + you don't want adjusted from the default, use this + there as well. +*/ +/////////////////////////////////////////////////////// +//:: Created By: Brad Prince +//:: Created On: Dec 9, 2002 +/////////////////////////////////////////////////////// + +// Used to shift the entire cutscene a length of time. Used internally here, +// but very handy for cutscenes that are complete, but need to be changed +// after the fact. From the point it is called, it just shifts the cutscene +// accordingly. Can be used (and should be) for non-cutscene delays in a +// script (ie - commands that aren't here or regular DelayCommands in a script.) + +//UPDATE Jan 8/03 :Keith Warner: The integer nCutscene is now passed in to all cutscene functions. +//This is so that if a player skips one cutscene and then very soon after enters another +//cutscene, we need to be able to check which cutscene a delayed function belongs to. +//If it is not the cutscene that the PC is currently in - the delayed actions that effect the +//PC should NOT take place + +// UPDATE MAY 27, 2003: Yaron Jakobs: +// - Using the CutSetActiveCutscene() function at the begining +// of each cutscene, instead of giving a number for each line. For example: +// call CutSetActiveCutscene(1) and then any Cut* functions that follow would assume cutscene +// number 1 is valid and would compare that number to the value that is set on the player as the +// active cutscene (if you use ExecuteScript or SignalEvent in the middle of a cutscene, you should +// run the CutSetActiveCutscene() function again right at the returning line). +// - Any object that uses any of the delayed Cut* functions must have it's cutscene value be set by +// the CutSetActiveCutsceneForObject() function. This prevents any delayed actions to be taken after +// a cutscene has been aborted. You would need to handle any specific actions that should still +// happen in the abort script. +// - Added a fade length variable to the CutFadeOutAndIn() function. +// - Changed FreezeAssociate and UnfreezeAssociate to be a part of the SetCutsceneMode function. +// - Added more CutAction* functions +// - Added CutStoreMusic(), CutRestoreMusic() and CutSetMusic() functions +// - the CutRestoreLocation (and any other CutRestore* function) does not require a cutscene +// number parameter anymore, as this function can run even after a cutscene has been aborted so +// there is no need to make a check with this num. +// - Added CutSetTile*** function to change tile colors +// - Added CutSetAbortDelay(). Use this function at the begining of a cutscene to set the +// delay you want for the execution of all cutscene related functions for players only. +// The corresponding function CutGetAbortDelay() fetches the value in the abort script +// and applies it for all the needed functions (defaults the 0). This delay is counted right +// after pressing the abort button. +// - Added CutSetDestroyCopyDelay(). Functions much the same as CutSetAbortDelay(), although +// this one is responsible to delay the removal of the pc copy (if there is one) (defaults to 0). +// - Added CutCreatePCCopy() and CutDestroyPCCopy(). +// - Objects created by CutCreateObject would have their cutscene number set to the current +// cutscene number, unless the default parameter of SetActive is FALSE (default value of TRUE). +// - Added CutDisableCutscene() function. This function should be called at the end of a cutscene +// and it is also called in the generic abort script for the module. +// - Added CutDisableAbort() function to be used in a begining of a function that should not +// be abortable. +// - Added support for cumulative delay (give only the delay between each line). +// - Added CutGetConvDuration() to get dialog duration from a 2da (multi-lang support) +// - CutSpeakStringByStrRef() now also calls PlaySoundByStrRef internally. +// - Add CutBeginConversation to handle dialog without the initiating object running to the other object + +// UPDATE JUNE 25 - Yaron Jakobs: +// - Added an option to specify fade speed to all fade functions. +// - Destroying a PC copy would jump the player to his original location. + +#include "inc_utility" + +// Use this function at the begining of a cutscene for each object involved in the cutscene. +// Notice that this function would fail if oObject already has another cutscene value (any +// number greater than 0). The function returns 0 on success, -1 otherwise. +int CutSetActiveCutsceneForObject(object oObject, int nCutNum, int bMainPC = FALSE); + +float GetShift(object oObject, int iShift); + + +int CUT_DELAY_TYPE_CUMULATIVE = 0; +int CUT_DELAY_TYPE_CONSTANT = 1; +// Set the current active cutscene. Any following delayed Cut* functions would run only if the +// initiating object has the same cutscene number as the global active one. A value of -1 +// means that no cutscene is active (possible values for bDelayType: CUT_DELAY_TYPE_CUMULATIVE, CUT_DELAY_TYPE_CONSTANT. +// bSetCutsceneObject should be set to FALSE whenever calling this function more than once for the +// same cutscene but in another file. This would keep the original cutscene object that created +// all the cutscene effect so it would be possible to remove them when the cutscene ends. +void CutSetActiveCutscene(int nCutsceneNumber, int nDelayType, int bSetCutsceneObject = TRUE); + +// Returns current global cutscene number. +int GetActiveCutsceneNum(); + +// Used to clear commandable state FALSE in the event there are too many +// Used in this include only. +void RemoveCommandable(object oPC); + +// Plays voice chat nChatID for oObject. +void CutPlayVoiceChat(float fDelay, object oObject , int nChatID, int iShift = TRUE); + +// Used to remove all effects from an object. +// Example: CutRemoveEffects(10.5, GetObjectByTag("guard1")) would remove all effects from guard1 after a 10.5 second delay. +// Notice that only effects created for the cutscene would be removed. +void CutRemoveEffects(float fDelay, object oObject, int iShift = TRUE); + +// Jumps all associates of oPC to lLoc +void CutJumpAssociateToLocation(float fDelay, object oPC, location lLoc, int iShift = TRUE); + +// Used for a conversation file when you need to have an NPC speak +// via a conversation instead of bubble text. The fDelay is used +// when timing is important. +// +///Example: CutActionStartConversation(5.0, oNPC, oPC, "my_conv"); would start the +// conversation file "my_conv" of the NPC, after a 5 sec delay, and +// the conversation subject would be the PC. +void CutActionStartConversation(float fDelay, object oNPC, object oPC, string szConversationFile, int iShift = TRUE); + +// Use this instead of CutActionStartConversation() to start a dialog +// without one object running to the other. +void CutBeginConversation(float fDelay, object oTalker, object oTalkTo, string sConvFile, int iShift = TRUE); + +// oAttacker would attack oAttackee. +void CutActionAttack(float fDelay, object oAttacker, object oAttackee, int bPassive = FALSE, int iShift = TRUE); + +void CutActionCloseDoor(float fDelay, object oCloser, object oDoor, int iShift = TRUE); + +void CutActionEquipItem(float fDelay, object oObject, object oItem, int InvSlot, int iShift = TRUE); + +void CutActionUnequipItem(float fDelay, object oObject, object oItem, int iShift = TRUE); + +void CutActionForceFollowObject(float fDelay, object oObject, object oFollow, float fFollowDistance = 0.0, int iShift = TRUE); + +void CutActionLockObject(float fDelay, object oObject, object oTarget, int iShift = TRUE); + +void CutActionUnLockObject(float fDelay, object oObject, object oTarget, int iShift = TRUE); + +void CutActionMoveAwayFromLocation(float fDelay, object oObject, location lLoc, int bRun = FALSE, float fRange = 40.0, int iShift = TRUE); + +void CutActionMoveAwayFromObject(float fDelay, object oObject, object oTarget, int bRun = FALSE, float fRange = 40.0, int iShift = TRUE); + +void CutActionOpenDoor(float fDelay, object oObject, object oDoor, int iShift = TRUE); + +void CutActionSit(float fDelay, object oObject, object oChair, int iShift = TRUE); + +void CutSpeakString(float fDelay, object oSpeaker, string szString, int iShift = TRUE); + +void CutSpeakStringByStrRef(float fDelay, object oSpeaker, int nStrRef, int iShift = TRUE); + +void CutPlayAnimation(float fDelay, object oObject, int nAnimation, float fLength, int iShift = TRUE); + +void CutJumpToLocation(float fDelay, object oPC, location lLoc, int iShift = TRUE); + +void CutJumpToObject(float fDelay, object oPC, object oObject, int iShift = TRUE); + +void CutActionMoveToObject(float fDelay, object oPC, object oTarget, int iRun, int iShift = TRUE); + +void CutActionMoveToLocation(float fDelay, object oPC, location lLoc, int iRun, int iShift = TRUE); + +void CutActionForceMoveToObject(float fDelay, object oPC, object oTarget, int iRun = FALSE, float fRange = 1.0, float fTimeout = 30.0, int iShift = TRUE); + +void CutActionForceMoveToLocation(float fDelay, object oPC, location lLoc, int iRun = FALSE, float fTimeout = 30.0, int iShift = TRUE); + +// Would create an object after the delay. Please avoid using this function as it is currently impossible +// to cancel action of objects created by it after aborting the cutscene. +void CutCreateObject(float fDelay, object oPC, int iType, string sName, location lLoc, int iEffect, int nSetActive = TRUE, int iShift = TRUE); + +void CutSetFacingPoint(float fDelay, object oPC, string szTag, int iShift = TRUE); + +// Combines fade-out and fade-in into one function. +void CutFadeOutAndIn(float fDelay, object oObject, float fFadeLen = 4.3, float nFadeSpeed = FADE_SPEED_FASTEST, int iShift = TRUE); + +void CutFadeToBlack(float fDelay, object oObject, float nFadeSpeed = FADE_SPEED_FASTEST, int iShift = TRUE); + +void CutFadeFromBlack(float fDelay, object oObject, float nFadeSpeed = FADE_SPEED_FASTEST, int iShift = TRUE); + +void CutSetCamera(float fDelay, object oObject, int iCameraType, float fFacing, float fZoom, float fPitch, int nSpeed, int iShift = TRUE); + +void CutClearAllActions(float fDelay, object oObject, int nClearCombatState, int iShift = TRUE); + +void CutApplyEffectAtLocation(float fDelay, object oObject, int iDur, int iEffect, location lLoc, float fDur = 0.0, int iShift = TRUE); + +// Applies visual effect iEffect to oObject. +// If you want to apply non-visual effect use CutApplyEffectToObject2 +void CutApplyEffectToObject(float fDelay, int iDur, int iEffect, object oObject, float fDur = 0.0, int iShift = TRUE); + +// Applies eEffect to Object. +void CutApplyEffectToObject2(float fDelay, int iDur, effect eEffect, object oObject, float fDur = 0.0, int iShift = TRUE); + +void CutKnockdown(float fDelay, object oObject, float fDur, int iShift = TRUE); + +void CutDeath(float fDelay, object oObject, int iSpec, int iShift = TRUE); + +void CutActionCastFakeSpellAtObject(float fDelay, int iSpell, object oObject, object oTarget, int iPath = PROJECTILE_PATH_TYPE_DEFAULT, int iShift = TRUE); + +void CutActionCastFakeSpellAtLocation(float fDelay, int iSpell, object oObject, location lLoc, int iPath = PROJECTILE_PATH_TYPE_DEFAULT, int iShift = TRUE); + +void CutActionCastSpellAtObject(float fDelay, int iSpell, object oObject, object oTarget, int nMetaMagic=METAMAGIC_ANY, int bCheat=FALSE, int nDomainLevel=0, int iPath=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE, int iShift = TRUE); + +void CutActionCastSpellAtLocation(float fDelay, int iSpell, object oObject, location lLoc, int METAMAGIC = METAMAGIC_ANY, int nCheat = FALSE, int nDomainLevel = 0, int iPath = PROJECTILE_PATH_TYPE_DEFAULT, int iShift = TRUE); + +// Stores the current location of oPC to be restored later with CutRestoreLocation. +void CutSetLocation(float fDelay, object oPC, int iShift = TRUE); + +// Restores the location that had been stored by CutSetLocation. +void CutRestoreLocation(float fDelay, object oPC, int iShift = TRUE); + +const int VANISH = 2; +const int CUT_CAMERA_HEIGHT_VERY_LOW = 2; +const int CUT_CAMERA_HEIGHT_LOW = 3; +const int CUT_CAMERA_HEIGHT_MEDIUM = 4; +const int CUT_CAMERA_HEIGHT_HIGH = 5; +const int CUT_CAMERA_HEIGHT_VERY_HIGH = 6; + +// Used to turn cutscene mode on or off. +// iValue: TRUE to start cutscene, and FALSE to exit cutscene mode. +// bInv: TRUE - to make the player invisible. +// FASLE - would leave the player visible. +// CUT_CAMERA_HEIGHT_VERY_LOW - would turn the playe invisible and put the camera at a very low position. +// CUT_CAMERA_HEIGHT_LOW - would turn the playe invisible and put the camera at a low position. +// CUT_CAMERA_HEIGHT_MEDIUM - would turn the playe invisible and put the camera at a low position. +// CUT_CAMERA_HEIGHT_HIGH would turn the playe invisible and put the camera at a high position. +// CUT_CAMERA_HEIGHT_VERY_HIGH would turn the playe invisible and put the camera at a very high position. +// bKeepAssociates: would destroy all associate when set to FALSE. +// bFreezeAssociates would freeze all associates when set to TRUE, and turn them invisible when set to VANISH = 2. +void CutSetCutsceneMode(float fDelay, object oPC, int iValue, int bInv, int bKeepAssociates = TRUE, int bFreezeAssociates = TRUE, int iShift = TRUE); + +void CutSetPlotFlag(float fDelay, object oObject, int iValue, int iShift = TRUE); + +void CutDestroyObject(float fDelay, object oObject, int iShift = TRUE); + +// Stores camera facing for oPC to be restored by CutRestoreCameraFacing. +void CutStoreCameraFacing(float fDelay, object oPC, int iShift = TRUE); + +// Restored camera facing that has been stored by CutStoreCameraFacing. +void CutRestoreCameraFacing(float fDelay, object oPC, int iShift = TRUE); + +void CutBlackScreen(float fDelay, object oPC, int iShift = TRUE); + +void CutStopFade(float fDelay, object oPC, int iShift = TRUE); + +void CutPlaySound(float fDelay, object oPC, string szSound, int iShift = TRUE); + +// Sets the track nTrack as the music for the current area of oPC and plays it. +void CutSetMusic(float fDelay, object oPC, int nTrack, int iShift = TRUE); + +// Stores the current music track for the area where oPC is. Use CutRestoreMusic to reset the music for the area +void CutStoreMusic(float fDelay, object oPC, int iShift = TRUE); + +// Restores the music track for the area where oPC is which was stores by CutStoreMusic. +void CutRestoreMusic(float fDelay, object oPC, int iShift = TRUE); + +// Sets the track nTrack as the music for the current area of oPC and plays it. +void CutSetAmbient(float fDelay, object oPC, int nTrack, int iShift = TRUE); + +// Sets the main tile color for the tile at lLoc. +void CutSetTileMainColor(float fDelay, object oPC, location lLoc, int nMainColor1, int nMainColor2, int iShift = TRUE); + +// Sets the source tile color for the tile at lLoc. +void CutSetTileSourceColor(float fDelay, object oPC, location lLoc, int nSourceColor1, int nSourceColor2, int iShift = TRUE); + +void CutSetWeather(float fDelay, object oPC, int nWeather, int iShift = TRUE); + +// Sets the delay between pressing the ESC key to actually doing the cutscene cleanup. +// This function should be used at the beginning of a cutscene only if such delay is required. +// Otherwise, there would be no cleanup delay. +void CutSetAbortDelay(int nCutscene, float fDelay); + +// Retrieves the current abort delay for nCutscene after aborting. +float CutGetAbortDelay(int nCutscene); + +// Sets the delay between pressing the ESC key to actually destroying the PC copy. +// This function should be used at the beginning of a cutscene only if such delay is required. +// Otherwise, there would be no delay. +void CutSetDestroyCopyDelay(int nCutscene, float fDelay); + +// Retrieves the current destroy PC delay after aborting a cutscene. +float CutGetDestroyCopyDelay(int nCutscene); + +// Creates a copy of oPC at lLoc with tag sTag. Older copies of oPC would be destroyed if any. +object CutCreatePCCopy(object oPC, location lLoc, string sTag); + +// Creates a copy of oPC at lLoc with tag sTag. Older copies of oPC would be destroyed if any. +void CutCreateObjectCopy(float fDelay, object oObject, location lLoc, string sTag = "", int iShift = TRUE); + +// Destroys the copy of oPC and restores the PC's original location if bRestorePCLocation is TRUE. +void CutDestroyPCCopy(float fDelay, object oPC, int bRestorePCLocation = TRUE, int iShift = TRUE); + +const int RESTORE_TYPE_NONE = 0; +const int RESTORE_TYPE_NORMAL = 1; +const int RESTORE_TYPE_COPY = 2; +// Disables a cutscene. All generic disable functions would be called after a delay of fCleanupDelay, +// and any PC copy object would be destroyed after a delay of fDestPCCopyDelay). +// If using the CUT_DELAY_TYPE_CUMULATIVE delay type, then each delay should be in relation to +// the previous delay (independent delays). nRestoreType should have one of the following values: +// - RESTORE_TYPE_NONE: Do not jump the player. +// - RESTORE_TYPE_NORMAL: Jump the player to the last place that he used CutSetLocation() at. +// - RESTORE_TYPE_COPY: Jupm the player to the place where the copy was created. +void CutDisableCutscene(int nCutscene, float fCleanupDelay, float fDestPCCopyDelay, int nRestoreType = RESTORE_TYPE_NORMAL); + +// Disables the possibility to disable nCutscene. Pressing ESC would do nothing after calling this function. +void CutDisableAbort(int nCutscene); + +// returns TRUE if it is not possible to abort nCutscene, FALSE otherwise. +int CutGetIsAbortDisabled(int nCutscene); + +// Get the duration of dialog sConvName from a 2da. A value of 0.0 is returned on error. +// The value in the 2da should be set when first knowing the english length of the dialog. +float CutGetConvDuration(string sConvName); + +// This adjusts Faction Reputation, how the entire faction that +// oSourceFactionMember is in, feels about oTarget. +void CutAdjustReputation(float fDelay, object oTarget, object oSource, int nAdjustment, int iShift = TRUE); + +// Sets the current movement rate factor of +// the cutscene camera-man (oPC) +// fMovementRateFactor: Factor ranging between 0.1 and 2.0 +void CutSetCameraSpeed(float fDelay, object oPC, float fMovementRateFactor, int iShift = TRUE); + +void UnFreezeAssociate(object oPlayers); + +float CutGetConvDuration(string sConvName) +{ + // first, get the row of sConvName + int nRow = 0; + string sName = Get2DACache("des_cutconvdur", "Dialog", nRow); + while(sName != "") + { + if(sName == sConvName) // found the dialog we need, current nRow has the right value + return StringToFloat(Get2DACache("des_cutconvdur", "Duration", nRow)); + nRow++; + sName = Get2DACache("des_cutconvdur", "Dialog", nRow); + } + return 0.0; // error value +} + +void CutSetActiveCutscene(int nCutsceneNumber, int nDelayType, int bSetCutsceneObject = TRUE) +{ + // Storing the delay type. + SetLocalInt(GetModule(), "X2_DelayType" + IntToString(nCutsceneNumber), nDelayType); + // Setting the active object, which is the object that applies all the effects for this cutscene. + // This object is used in the cutscene abort script and at the end of the cutscene to remove all + // the effects that this object had created. + if(bSetCutsceneObject == TRUE) + SetLocalObject(GetModule(), "X2_Cut" + IntToString(nCutsceneNumber) + "ActiveObject", OBJECT_SELF); + SetLocalInt(GetModule(), "X2_ActiveCutsceneNumber", nCutsceneNumber); +} + +int GetActiveCutsceneNum() +{ + return GetLocalInt(GetModule(), "X2_ActiveCutsceneNumber"); +} + +// Calculates the "real" delay to execute a cut* action (can be a comulative delay or a constant one) +float CutCalculateCurrentDelay(float fDelayModifier, int nCutsceneNumber) +{ + if(GetLocalInt(GetModule(), "X2_DelayType" + IntToString(nCutsceneNumber)) == CUT_DELAY_TYPE_CONSTANT) + return fDelayModifier; // support for old system - leaving the delay the same + // new system - each delay is the difference from the previous one. + string sDelayVariable = "X2_fCutscene" + IntToString(nCutsceneNumber) + "Delay"; + float fCurrentDelay = GetLocalFloat(GetModule(), sDelayVariable); + fCurrentDelay = fCurrentDelay + fDelayModifier; + SetLocalFloat(GetModule(), sDelayVariable, fCurrentDelay); + return fCurrentDelay; +} + +float GetShift(object oObject, int iShift) +{ + float fShift; + if(iShift != FALSE) + fShift = GetLocalFloat(GetArea(oObject), "cut_shift"); + else + fShift = 0.0; + return fShift; +} + +// flagging a cutscene as non-abortable. This function should be used at the begining of +// a cutscene (probably for short cutscenes). +void CutDisableAbort(int nCutscene) +{ + SetLocalInt(GetModule(), "X2_CutAbortDisabled" + IntToString(nCutscene), 1); +} + +int CutGetIsAbortDisabled(int nCutscene) +{ + return GetLocalInt(GetModule(), "X2_CutAbortDisabled" + IntToString(nCutscene)); +} + +int CutSetActiveCutsceneForObject(object oObject, int nCutNum, int bMainPC = FALSE) +{ + /* + // familiar check (unpossess and bring the pc here) + if(GetIsPossessedFamiliar(oObject)) + { + PrintString("BOOM: object is familiar"); + object oPC = GetMaster(oObject); + AssignCommand(oPC, JumpToObject(oObject)); + UnpossessFamiliar(oObject); + oObject = oPC; + }*/ + + // if trying to set a new cutscene number for a player and the old value is not zero + // than the oObject is already in another cutscene and returning with failure. + if(GetIsPC(oObject) && nCutNum != 0 && GetLocalInt(oObject, "nCutsceneNumber") != 0) + return -1; + + SetLocalInt(oObject, "nCutsceneNumber", nCutNum); + if(bMainPC == TRUE) + SetLocalInt(oObject, "nCutMainPC", 1); + else + SetLocalInt(oObject, "nCutMainPC", 0); + + + if(nCutNum == 0 || GetIsPC(oObject)) + return 0; // Not storing an object if disabling active cutscene (value of 0) or this is a pc + + // Storing the object, so that the generic abort could find it and reset it. + // First, getting the global index for this cutscene (virtual array). + int nCurrentIndex = GetLocalInt(GetModule(), "X2_CutsceneObjectsIndex" + IntToString(nCutNum)); + // Next, storing the object. + SetLocalObject(GetModule(), + "X2_Cutscene" + IntToString(nCutNum) + "Object" + IntToString(nCurrentIndex), oObject); + // Finally, updating the index. + nCurrentIndex++; + SetLocalInt(GetModule(), "X2_CutsceneObjectsIndex" + IntToString(nCutNum), nCurrentIndex); + return 0; +} + +int CutGetActiveCutsceneForObject(object oObject) +{ + return GetLocalInt(oObject, "nCutsceneNumber"); +} + +// This function is used internally by the generic abort script. +// It finds all active objects for this cutscene and resets them so they won't execute any +// more actions. +void CutResetActiveObjectsForCutscene(int nCutscene) +{ + // Getting the size of the virtual array that stores the cutscene objects. + // This would return an index for the "next object to be stored", so there would be no + // object in that index + int nMaxIndex = GetLocalInt(GetModule(), "X2_CutsceneObjectsIndex" + IntToString(nCutscene)); + int i; + object oCurrentObject; + // Iterating through all the cutscene objects + for(i = 0; i < nMaxIndex; i++) + { + oCurrentObject = GetLocalObject(GetModule(), + "X2_Cutscene" + IntToString(nCutscene) + "Object" + IntToString(i)); + CutSetActiveCutsceneForObject(oCurrentObject, 0); + } + // Initializing the index + SetLocalInt(GetModule(), "X2_CutsceneObjectsIndex" + IntToString(nCutscene), 0); +} + +void CallRestorePCCopyLocation(int nCutscene, object oPC) +{ + if(CutGetActiveCutsceneForObject(oPC) == nCutscene) + { + location lLoc = GetLocalLocation(oPC, "X2_PCLocation"); + DeleteLocalLocation(oPC, "X2_PCLocation"); + AssignCommand(oPC, JumpToLocation(lLoc)); + } +} + +void CallRemoveEffects(int nCutscene, object oObject) +{ + if(CutGetActiveCutsceneForObject(oObject) == nCutscene) + { // first, get the object that created all the effects + object oCreator = GetLocalObject(GetModule(), "X2_Cut" + IntToString(nCutscene) + "ActiveObject"); + + effect eEff = GetFirstEffect(oObject); + while(GetIsEffectValid(eEff)) + { + if( GetEffectCreator(eEff) == oCreator) + RemoveEffect(oObject, eEff); + eEff = GetNextEffect(oObject); + } + } +} + +void CutRemoveEffects(float fDelay, object oObject, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallRemoveEffects(nCutscene, oObject))); +} + +void CallRemoveAssociatesEffects(int nCutscene, object oPC) +{ + if(CutGetActiveCutsceneForObject(oPC) == nCutscene) + { + object oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC); + object oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC); + object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC); + object oSummoned = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC); + CutSetActiveCutsceneForObject(oAnimal, nCutscene); + CutSetActiveCutsceneForObject(oDominated, nCutscene); + CutSetActiveCutsceneForObject(oFamiliar, nCutscene); + CutSetActiveCutsceneForObject(oSummoned, nCutscene); + if(oAnimal != OBJECT_INVALID) + CallRemoveEffects(nCutscene, oAnimal); + if(oDominated != OBJECT_INVALID) + CallRemoveEffects(nCutscene, oDominated); + if(oFamiliar != OBJECT_INVALID) + CallRemoveEffects(nCutscene, oFamiliar); + if(oSummoned != OBJECT_INVALID) + CallRemoveEffects(nCutscene, oSummoned); + + int i = 1; + object oHenchman = GetHenchman(oPC, i); + while(oHenchman != OBJECT_INVALID) + { + CutSetActiveCutsceneForObject(oHenchman, nCutscene); + CallRemoveEffects(nCutscene, oHenchman); + i++; + oHenchman = GetHenchman(oPC, i); + } + } +} + +void CallJumpAssociateToLocation(int nCutscene, object oPC, location lLoc) +{ + if(CutGetActiveCutsceneForObject(oPC) == nCutscene) + { + UnFreezeAssociate(oPC); + object oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC); + object oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC); + object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC); + object oSummoned = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC); + if(oAnimal != OBJECT_INVALID) + AssignCommand(oAnimal, ActionJumpToLocation(lLoc)); + if(oDominated != OBJECT_INVALID) + AssignCommand(oDominated, ActionJumpToLocation(lLoc)); + if(oFamiliar != OBJECT_INVALID) + AssignCommand(oFamiliar, ActionJumpToLocation(lLoc)); + if(oSummoned != OBJECT_INVALID) + AssignCommand(oSummoned, ActionJumpToLocation(lLoc)); + + int i = 1; + object oHenchman = GetHenchman(oPC, i); + while(oHenchman != OBJECT_INVALID) + { + AssignCommand(oHenchman, ActionJumpToLocation(lLoc)); + i++; + oHenchman = GetHenchman(oPC, i); + } + } +} + +void CutJumpAssociateToLocation(float fDelay, object oPC, location lLoc, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallJumpAssociateToLocation(nCutscene, oPC, lLoc))); +} + + +void CallDestroyPCCopy(int nCutscene, object oPC, int bRestorePCLocation) +{ + object oCopy = GetLocalObject(oPC, "X2_PCCopy" + IntToString(nCutscene)); + if(oCopy == OBJECT_INVALID) + return; + if(bRestorePCLocation == TRUE) + { + CallRestorePCCopyLocation(nCutscene, oPC); + } + + SetPlotFlag(oCopy, FALSE); + DestroyObject(oCopy); +} + +// Destroys the copy of oPC. This function would work even if there is no valid cutscene for oPC. +// If bRestorePCLocation is TRUE then the PC would be jumped to original location. +void CutDestroyPCCopy(float fDelay, object oPC, int bRestorePCLocation = TRUE, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallDestroyPCCopy(nCutscene, oPC, bRestorePCLocation))); +} + +// Creates a copy of the pc at lLoc (and destroys an old one, if exists. +object CutCreatePCCopy(object oPC, location lLoc, string sTag) +{ + int nCutscene = GetActiveCutsceneNum(); + // first, destroy an old copy, if exists + CallDestroyPCCopy(nCutscene, oPC, FALSE); + // next, create the new copy. + object oNewPC = CopyObject(oPC, lLoc, OBJECT_INVALID, sTag); + //SetPlotFlag(oNewPC, TRUE); + CutSetActiveCutsceneForObject(oNewPC, nCutscene); + SetLocalObject(oPC, "X2_PCCopy" + IntToString(nCutscene), oNewPC); + SetLocalLocation(oPC, "X2_PCLocation", GetLocation(oPC)); // Keeping location of PC so it can be restored when the copy is destroyed + ChangeToStandardFaction(oNewPC, STANDARD_FACTION_COMMONER); + SetActionMode(oNewPC, ACTION_MODE_STEALTH, FALSE); + SetActionMode(oNewPC, ACTION_MODE_DETECT, FALSE); + return oNewPC; +} + + +void CallCreateObjectCopy(int nCutscene, object oObject, location lLoc, string sTag) +{ + if(CutGetActiveCutsceneForObject(oObject) == nCutscene) + { + CopyObject(oObject, lLoc, OBJECT_INVALID, sTag); + } +} + +void CutCreateObjectCopy(float fDelay, object oObject, location lLoc, string sTag = "", int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallCreateObjectCopy(nCutscene, oObject, lLoc, sTag))); +} + +// returns TRUE whether the pc is the main pc for his current cutscene, FALSE otherwise. +int CutGetIsMainPC(object oPC) +{ + if(GetLocalInt(oPC, "nCutsceneNumber") == 0) + return FALSE; // a player is not a part of any cutscene + return GetLocalInt(oPC, "nCutMainPC"); +} + +// set delay for removal of pc copy in the generic abort script (should be used +// at the begining of a cutscene) +void CutSetDestroyCopyDelay(int nCutscene, float fDelay) +{ + SetLocalFloat(GetModule(), "X2_CutDestroyCopyDelay" + IntToString(nCutscene), fDelay); +} + +float CutGetDestroyCopyDelay(int nCutscene) +{ + return GetLocalFloat(GetModule(), "X2_CutDestroyCopyDelay" + IntToString(nCutscene)); +} + +void CutSetAbortDelay(int nCutscene, float fDelay) +{ + SetLocalFloat(GetModule(), "X2_CutAbortDelay" + IntToString(nCutscene), fDelay); +} + +// get the delay for cutscene-disable funcions in the generic abort script (used only there) +float CutGetAbortDelay(int nCutscene) +{ + return GetLocalFloat(GetModule(), "X2_CutAbortDelay" + IntToString(nCutscene)); +} + +void RemoveAssociateEffects(object oCreature) +{ + int nCutscene = GetActiveCutsceneNum(); + effect eEff1 = GetFirstEffect(oCreature); + object oCreator = GetLocalObject(GetModule(), "X2_Cut" + IntToString(nCutscene) + "ActiveObject"); + + while(GetIsEffectValid(eEff1)) + { + if (GetEffectCreator(eEff1) == oCreator) + { + RemoveEffect(oCreature, eEff1); + } + eEff1 = GetNextEffect(oCreature); + } +} + +object FreezeAssociate(object oPlayers, int bVanish) +{ + effect eAssociate = EffectCutsceneParalyze(); + effect eInv = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY); + //Cutscene Paralize any associates. + int i = 1; + object oHench = GetHenchman(oPlayers, i); + while(oHench != OBJECT_INVALID) + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAssociate, oHench); + if(bVanish) + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eInv, oHench); + i++; + oHench = GetHenchman(oPlayers, i); + } + + object oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPlayers); + if (oCompanion != OBJECT_INVALID) + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAssociate, oCompanion); + if(bVanish) + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eInv, oCompanion); + } + + object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPlayers); + if (oFamiliar != OBJECT_INVALID) + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAssociate, oFamiliar); + if(bVanish) + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eInv, oFamiliar); + } + + object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPlayers); + if (oSummon != OBJECT_INVALID) + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAssociate, oSummon); + if(bVanish) + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eInv, oSummon); + } + + object oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPlayers); + if (oDominated != OBJECT_INVALID) + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAssociate, oDominated); + if(bVanish) + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eInv, oDominated); + + } + return oDominated; +} +void UnFreezeAssociate(object oPlayers) +{ + //Cutscene Paralize any associates. + int i = 1; + object oHench = GetHenchman(oPlayers, i); + while(oHench != OBJECT_INVALID) + { + RemoveAssociateEffects(oHench); + i++; + oHench = GetHenchman(oPlayers, i); + } + + object oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPlayers); + if (oCompanion != OBJECT_INVALID) + RemoveAssociateEffects(oCompanion); + object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPlayers); + if (oFamiliar != OBJECT_INVALID) + RemoveAssociateEffects(oFamiliar); + object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPlayers); + if (oSummon != OBJECT_INVALID) + RemoveAssociateEffects(oSummon); + object oDominated = GetLocalObject(oPlayers, "oDominated"); + if (oDominated != OBJECT_INVALID) + RemoveAssociateEffects(oDominated); +} + +void RemoveCommandable(object oPC) +{ + while(GetCommandable(oPC) == FALSE) + SetCommandable(TRUE, oPC); +} + +// Helper function +void Talk(string sConvFile, object oTalkTo) +{ + BeginConversation(sConvFile, oTalkTo); +} + +void CallBeginConversation(int nCutscene, object oTalker, object oTalkTo, string sConvFile) +{ + if(nCutscene == GetLocalInt(oTalker, "nCutsceneNumber")) + { + AssignCommand(oTalker, Talk(sConvFile, oTalkTo)); + } +} + +void CutBeginConversation(float fDelay, object oTalker, object oTalkTo, string sConvFile, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oTalker, iShift), CallBeginConversation(nCutscene, oTalker, oTalkTo, sConvFile))); +} + +void CallActionStartConversation(int nCutscene, object oNPC, object oPC, string szConversationFile) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + //CutRemoveEffects(0.0, oPC); + //SetCommandable(TRUE, oPC); + AssignCommand(oNPC, ActionStartConversation(oPC, szConversationFile)); + //SetCommandable(FALSE, oPC); + //ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectCutsceneDominated(), oPC); + } + +} + +void CutActionStartConversation(float fDelay, object oNPC, object oPC, string szConversationFile, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallActionStartConversation(nCutscene, oNPC, oPC, szConversationFile))); +} + +// Used for bubble text type speaking. +/* Example: CutSpeakString(0.0, GetObjectByTag("drow_priest"), "I like + green eggs and ham."); would have the object drow_priest speak the + line "I like green eggs and ham." after no delay. +*/ +void CallSpeakString(int nCutscene, object oSpeaker, string szString) +{ + if(nCutscene == GetLocalInt(oSpeaker, "nCutsceneNumber")) + { + AssignCommand(oSpeaker, SpeakString(szString)); + } +} + +void CallSpeakStringByStrRef(int nCutscene, object oSpeaker, int nStrRef) +{ + if(nCutscene == GetLocalInt(oSpeaker, "nCutsceneNumber")) + { + AssignCommand(oSpeaker, SpeakStringByStrRef(nStrRef)); + AssignCommand(oSpeaker, PlaySoundByStrRef(nStrRef, FALSE)); + } +} + +void CutSpeakString(float fDelay, object oSpeaker, string szString, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oSpeaker, iShift), CallSpeakString(nCutscene, oSpeaker, szString))); +} + +void CutSpeakStringByStrRef(float fDelay, object oSpeaker, int nStrRef, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oSpeaker, iShift), CallSpeakStringByStrRef(nCutscene, oSpeaker, nStrRef))); +} + + +// Used if you need a cutscene participant to do an animation. +/* Example: CutPlayAnimation(26.0, oPC, ANIMATION_FIREFORGET_BOW, 3.0); + would have the PC bow for 3 seconds after a 26 second delay. +*/ +void CallPlayAnimation(int nCutscene, object oObject, int nAnimation, float fLength) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + AssignCommand(oObject, PlayAnimation(nAnimation, 1.0, fLength)); + } +} + +void CutPlayAnimation(float fDelay, object oObject, int nAnimation, float fLength, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallPlayAnimation(nCutscene, oObject, nAnimation, fLength))); +} + +// Used to jump the PC to a location. +/* Example: CutJumpToLocation(20.0, oPC, GetLocation(GetWaypointByTag + ("wp_jump")); would jump the PC to the wp_jump waypoint after a 20 + second delay. +*/ +void CallJumpToLocation(int nCutscene, object oPC, location lLoc) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + AssignCommand(oPC, ActionJumpToLocation(lLoc)); + } +} + +void CutJumpToLocation(float fDelay, object oPC, location lLoc, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallJumpToLocation(nCutscene, oPC, lLoc))); +} + + +// Used to jump the PC or NPC to an object. +/* Example: CutJumpToObject(20.0, oPC, GetObject(GetObjectByTag + ("invis_object")); would jump the PC to the invis_object after a 20 + second delay. +*/ +void CallJumpToObject(int nCutscene, object oPC, object oObject) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + if(GetCommandable(oPC) == FALSE) + { + //SetCommandable(TRUE, oPC); + AssignCommand(oPC, JumpToObject(oObject)); + //AssignCommand(oPC, JumpToObject(oObject)); + //SetCommandable(FALSE, oPC); + } + else + AssignCommand(oPC, JumpToObject(oObject)); + + } +} + +void CutJumpToObject(float fDelay, object oPC, object oObject, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallJumpToObject(nCutscene, oPC, oObject))); +} + +// Used to force move the PC or NPC to an object. +void CallActionForceMoveToObject(int nCutscene, object oPC, object oTarget, int iRun, float fRange, float fTimeout) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + if(GetCommandable(oPC) == FALSE) + { + SetCommandable(TRUE); + AssignCommand(oPC, ActionForceMoveToObject(oTarget, iRun, fRange, fTimeout)); + SetCommandable(FALSE); + } + else + AssignCommand(oPC, ActionForceMoveToObject(oTarget, iRun, fRange, fTimeout)); + } +} + +void CutActionForceMoveToObject(float fDelay, object oPC, object oTarget, int iRun = FALSE, float fRange = 1.0, float fTimeout = 30.0, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallActionForceMoveToObject(nCutscene, oPC, oTarget, iRun, fRange, fTimeout))); +} + +// Used to move the PC or NPC to an object. +/* Example: CutActionMoveToObject(2.0, oPC, oTable, TRUE); would have the + PC run to oTable after a 2 second delay. TRUE = run, FALSE = walk. +*/ +void CallActionMoveToObject(int nCutscene, object oPC, object oTarget, int iRun) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + if(GetCommandable(oPC) == FALSE) + { + SetCommandable(TRUE); + AssignCommand(oPC, ActionMoveToObject(oTarget, iRun)); + SetCommandable(FALSE); + } + else + AssignCommand(oPC, ActionMoveToObject(oTarget, iRun)); + } +} + +void CutActionMoveToObject(float fDelay, object oPC, object oTarget, int iRun, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallActionMoveToObject(nCutscene, oPC, oTarget, iRun))); +} + +// Used to force move the PC or NPC to a location. +void CallActionForceMoveToLocation(int nCutscene, object oPC, location lLoc, int iRun, float fTimeout) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + if(GetCommandable(oPC) == FALSE) + { + SetCommandable(TRUE); + AssignCommand(oPC, ActionForceMoveToLocation(lLoc, iRun, fTimeout)); + SetCommandable(FALSE); + } + else + AssignCommand(oPC, ActionForceMoveToLocation(lLoc, iRun, fTimeout)); + } +} + +void CutActionForceMoveToLocation(float fDelay, object oPC, location lLoc, int iRun = FALSE, float fTimeout = 30.0, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallActionForceMoveToLocation(nCutscene, oPC, lLoc, iRun, fTimeout))); +} + + +// Used to move the PC or NPC to a location. +/* Example: CutActionMoveToLocation(2.0, oPC, lTable, FALSE); would have the + PC walk to lTable after a 2 second delay. TRUE = run, FALSE = walk. +*/ +void CallActionMoveToLocation(int nCutscene, object oPC, location lLoc, int iRun) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + if(GetCommandable(oPC) == FALSE) + { + SetCommandable(TRUE); + AssignCommand(oPC, ActionMoveToLocation(lLoc, iRun)); + SetCommandable(FALSE); + } + else + AssignCommand(oPC, ActionMoveToLocation(lLoc, iRun)); + } +} + +void CutActionMoveToLocation(float fDelay, object oPC, location lLoc, int iRun, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallActionMoveToLocation(nCutscene, oPC, lLoc, iRun))); +} + + +// Used to delay object create. Pass the type, the sTemplate, the location, +// and the effect you wish to have appear when the object is created +// (0 for no effect). The PC is also passed to check cutscene abort. +/* EXAMPLE: CutCreateObject(2.3, oPC, OBJECT_TYPE_PLACEABLE, "resref", lLoc, VFX_FNF_HOLY_STRIKE); + would create a placeable with the resref of "resref" at the location + lLoc after 2.3 seconds, with the VFX_FNF_HOLY_STRIKE effect. +*/ +void CallCreateObject(int nCutscene, int iType, object oPC, string sName, location lLoc, int iEffect, int nSetActive) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(iEffect), lLoc); + object oObject = CreateObject(iType, sName, lLoc); + if(nSetActive == TRUE) + { + CutSetActiveCutsceneForObject(oObject, nCutscene); + } + } + +} + +void CutCreateObject(float fDelay, object oPC, int iType, string sName, location lLoc, int iEffect, int nSetActive = TRUE, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallCreateObject(nCutscene, iType, oPC, sName, lLoc, iEffect, nSetActive))); +} + + +// Used to set the facing of a creature. +/* EXAMPLE CutSetFacingPoint(22.5, oPC, "creature_tag"); would + have the PC face "creature_tag" object after a 22.5 second delay. +*/ +void CallSetFacingPoint(int nCutscene, object oPC, string szTag) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + AssignCommand(oPC, SetFacingPoint(GetPosition(GetObjectByTag(szTag)))); + } +} + +void CutSetFacingPoint(float fDelay, object oPC, string szTag, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallSetFacingPoint(nCutscene, oPC, szTag))); +} + +void CallAdjustReputation(int nCutscene, object oTarget, object oSource, int nAdjustment) +{ + if(nCutscene == GetLocalInt(oTarget, "nCutsceneNumber")) + { + AdjustReputation(oTarget, oSource, nAdjustment); + if(GetIsPossessedFamiliar(oTarget)) + { + AdjustReputation(GetMaster(oTarget), oSource, nAdjustment); + } + else if(GetIsPossessedFamiliar(oSource)) + { + AdjustReputation(oSource, GetMaster(oTarget), nAdjustment); + } + } +} + +void CutAdjustReputation(float fDelay, object oTarget, object oSource, int nAdjustment, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oTarget, iShift), CallAdjustReputation(nCutscene, oTarget, oSource, nAdjustment))); +} + + +// Used to fade out and back in, with a black screen section of +// fFadeLen seconds in between. +/* EXAMPLE: CallFadeOutAndIn(35.0, 2.0, oPC); would Fade the screen + out and back in on the PC, after a delay of 35 seconds. +*/ +void CallFadeOutAndIn(int nCutscene, object oObject, float fFadeLen, float fFadeSpeed) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + FadeToBlack(oObject, fFadeSpeed); + //DelayCommand(2.3, BlackScreen(oObject)); + DelayCommand(fFadeLen, FadeFromBlack(oObject, fFadeSpeed)); + } +} + +void CutFadeOutAndIn(float fDelay, object oObject, float fFadeLen = 4.3, float fFadeSpeed = FADE_SPEED_FASTEST, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallFadeOutAndIn(nCutscene, oObject, fFadeLen, fFadeSpeed))); +} + +// Used to fade out. +/* EXAMPLE: CallFadeToBlack(35.0, oPC); would Fade the screen + out on the PC, after a delay of 35 seconds. +*/ +void CallFadeToBlack(int nCutscene, object oObject, float fFadeSpeed) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + FadeToBlack(oObject, fFadeSpeed); + } +} + +void CutFadeToBlack(float fDelay, object oObject, float fFadeSpeed = FADE_SPEED_FASTEST, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallFadeToBlack(nCutscene, oObject, fFadeSpeed))); +} + +// Used to fade in. +/* EXAMPLE: CallFadeFromBlack(35.0, oPC); would Fade the screen + in on the PC, after a delay of 35 seconds. +*/ +void CallFadeFromBlack(int nCutscene, object oObject, float fFadeSpeed) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + FadeFromBlack(oObject, fFadeSpeed); + } +} + +void CutFadeFromBlack(float fDelay, object oObject, float fFadeSpeed = FADE_SPEED_FASTEST, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallFadeFromBlack(nCutscene, oObject, fFadeSpeed))); +} + +// Used to set the camera for cutscene dramatics. +/* EXAMPLE: To set a camera with the following settings on the PC, + after a 30.0 second delay: + CAMERA_MODE_TOP_DOWN + Facing = 170.0 + Zoom = 5.0 + Pitch = 50.0 + CAMERA_TRANSITION_TYPE_MEDIUM + + CutSetCamera(30.0, oPC, CAMERA_MODE_TOP_DOWN, 170.0, 5.0, 50.0, + CAMERA_TRANSITION_TYPE_MEDIUM); +*/ +void CallSetCamera(int nCutscene, object oObject, int iCameraType, float fFacing, float fZoom, float fPitch, int nSpeed) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + SetCameraMode(oObject, iCameraType); + DelayCommand(0.1, AssignCommand(oObject, SetCameraFacing(fFacing, fZoom, fPitch, nSpeed))); + } +} + +void CutSetCamera(float fDelay, object oObject, int iCameraType, float fFacing, float fZoom, float fPitch, int nSpeed, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallSetCamera(nCutscene, oObject, iCameraType, fFacing, fZoom, fPitch, nSpeed))); +} + +// Used to clear the actions of the subject. +/* EXAMPLE: CutClearAllActions(3.2, GetObjectByTag("guard")); + would clear the actions of "guard" after a 3.2 second delay. +*/ +void CallClearAllActions(int nCutscene, object oObject, int nClearCombatState = FALSE) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + AssignCommand(oObject, ClearAllActions(nClearCombatState)); + } +} + +void CutClearAllActions(float fDelay, object oObject, int nClearCombatState = FALSE, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallClearAllActions(nCutscene, oObject, nClearCombatState))); +} + +// Used to apply a visual effect at a location. The PC is passed to +// determine if the cutscene has been aborted or not. +/* EXAMPLE: CutApplyEffectAtLocation(98.3, oPC, DURATION_TYPE_INSTANT, + VXF_FNF_HOLY_STRIKE, lLoc, 0.0); + would have a holy strike visual appear at lLoc after a 98.3 second delay. + The duration is instant, lasting the default time. +*/ +void CallApplyEffectAtLocation(int nCutscene, object oObject, int iDur, int iEffect, location lLoc, float fDur) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + effect eEffect = EffectVisualEffect(iEffect); + ApplyEffectAtLocation(iDur, eEffect, lLoc, fDur); + } + +} + +void CutApplyEffectAtLocation(float fDelay, object oObject, int iDur, int iEffect, location lLoc, float fDur = 0.0, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallApplyEffectAtLocation(nCutscene, oObject, iDur, iEffect, lLoc, fDur))); +} + +// Used to apply a visual effect to an object. +/* EXAMPLE: CutApplyEffectToObject(98.3, oPC, DURATION_TYPE_TEMPORARY, + VXF_DUR_PETRIFY, oPC, 4.0); + would have a PETRIFY visual appear to the PC after a 98.3 second delay. + The duration is temporary, lasting 4 seconds. +*/ +void CallApplyEffectToObject(int nCutscene, int iDur, int iEffect, object oObject, float fDur) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + effect eEffect = EffectVisualEffect(iEffect); + ApplyEffectToObject(iDur, eEffect, oObject, fDur); + } +} + +void CutApplyEffectToObject(float fDelay, int iDur, int iEffect, object oObject, float fDur = 0.0, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallApplyEffectToObject(nCutscene, iDur, iEffect, oObject, fDur))); +} + +//For all other effects (NOT VISUAL EFFECTS) +//Used to apply a NON visual effect to an object. +void CallApplyEffectToObject2(int nCutscene, int iDur, effect eEffect, object oObject, float fDur) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + ApplyEffectToObject(iDur, eEffect, oObject, fDur); + } +} + +void CutApplyEffectToObject2(float fDelay, int iDur, effect eEffect, object oObject, float fDur = 0.0, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallApplyEffectToObject2(nCutscene, iDur, eEffect, oObject, fDur))); +} + +// Used to apply a knockdown effect to an object. +/* EXAMPLE: CutKnockdown(98.3, oPC, 4.0); + would have a knockdown appear on the PC after a 98.3 second delay. + The duration is always temporary, this one lasting 4 seconds. +*/ +void CallKnockdown(int nCutscene, object oObject, float fDur) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + effect eEffect = EffectKnockdown(); + int nTest = 0; + if (GetPlotFlag(oObject) == TRUE) + { + nTest = 1; + SetPlotFlag(oObject, FALSE); + } + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oObject, fDur); + if (nTest == 1) + SetPlotFlag(oObject, TRUE); + } +} + +void CutKnockdown(float fDelay, object oObject, float fDur = 3.0, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallKnockdown(nCutscene, oObject, fDur))); +} + +void CallActionAttack(int nCutscene, object oAttacker, object oAttackee, int bPassive = FALSE) +{ + if(nCutscene == GetLocalInt(oAttacker, "nCutsceneNumber")) + { + AssignCommand(oAttacker, ActionAttack(oAttackee, bPassive)); + } +} + +void CutActionAttack(float fDelay, object oAttacker, object oAttackee, int bPassive = FALSE, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oAttacker, iShift), CallActionAttack(nCutscene, oAttacker, oAttackee, bPassive))); +} + +// Used to apply a death effect to an object. +/* EXAMPLE: CutDeath(98.3, oPC, TRUE); + would have a death appear on the PC after a 98.3 second delay. + The duration is always instant. TRUE is used if you want a + spectacular death. Set FALSE otherwise. +*/ + +void CallDeath(int nCutscene, object oObject, int iSpec) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + effect eEffect = EffectDeath(iSpec, TRUE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oObject); + } + +} + +void CutDeath(float fDelay, object oObject, int iSpec = FALSE, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallDeath(nCutscene, oObject, iSpec))); +} + +// oObject would unlock oTarget +void CallActionUnlockObject(int nCutscene, object oObject, object oTarget) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + AssignCommand(oObject, ActionUnlockObject(oTarget)); + } +} + +void CutActionUnlockObject(float fDelay, object oObject, object oTarget, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallActionUnlockObject(nCutscene, oObject, oTarget))); +} + + +// oObject would lock oTarget +void CallActionLockObject(int nCutscene, object oObject, object oTarget) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + AssignCommand(oObject, ActionLockObject(oTarget)); + } +} + +void CutActionLockObject(float fDelay, object oObject, object oTarget, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallActionLockObject(nCutscene, oObject, oTarget))); +} + +// oObject would flee lLoc +void CallActionMoveAwayFromLocation(int nCutscene, object oObject, location lLoc, int bRun, float fDistance) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + AssignCommand(oObject, ActionMoveAwayFromLocation(lLoc, bRun, fDistance)); + } +} + +void CutActionMoveAwayFromLocation(float fDelay, object oObject, location lLoc, int bRun = FALSE, float fDistance = 40.0, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallActionMoveAwayFromLocation(nCutscene, oObject, lLoc, bRun, fDistance))); +} + +// oObject would flee oTarget +void CallActionMoveAwayFromObject(int nCutscene, object oObject, object oTarget, int bRun, float fDistance) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + AssignCommand(oObject, ActionMoveAwayFromObject(oTarget, bRun, fDistance)); + } +} + +void CutActionMoveAwayFromObject(float fDelay, object oObject, object oTarget, int bRun = FALSE, float fDistance = 40.0, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallActionMoveAwayFromObject(nCutscene, oObject, oTarget, bRun, fDistance))); +} + + +// oObject would follow oFollow +void CallActionForceFollowObject(int nCutscene, object oObject, object oFollow, float fFollowDistance) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + AssignCommand(oObject, ActionForceFollowObject(oFollow, fFollowDistance)); + } +} + +void CutActionForceFollowObject(float fDelay, object oObject, object oFollow, float fFollowDistance = 0.0, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallActionForceFollowObject(nCutscene, oObject, oFollow, fFollowDistance))); +} + + +// oObject unequips oItem +void CallActionUnequipItem(int nCutscene, object oObject, object oItem) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + AssignCommand(oObject, ActionUnequipItem(oItem)); + } +} + +void CutActionUnequipItem(float fDelay, object oObject, object oItem, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallActionUnequipItem(nCutscene, oObject, oItem))); +} + + +// oObject equips oItem in InvSlot +void CallActionEquipItem(int nCutscene, object oObject, object oItem, int nInvSlot) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + AssignCommand(oObject, ActionEquipItem(oItem, nInvSlot)); + } +} + +void CutActionEquipItem(float fDelay, object oObject, object oItem, int nInvSlot, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallActionEquipItem(nCutscene, oObject, oItem, nInvSlot))); +} + + +// oObject would sit on oChair +void CallActionSit(int nCutscene, object oObject, object oChair) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + AssignCommand(oObject, ActionSit(oChair)); + } +} + +void CutActionSit(float fDelay, object oObject, object oChair, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallActionSit(nCutscene, oObject, oChair))); +} + + +// oObject would open oDoor +void CallActionOpenDoor(int nCutscene, object oObject, object oDoor) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + AssignCommand(oObject, ActionOpenDoor(oDoor)); + } +} + +void CutActionOpenDoor(float fDelay, object oObject, object oDoor, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallActionOpenDoor(nCutscene, oObject, oDoor))); +} + +void CallActionCloseDoor(int nCutscene, object oCloser, object oDoor) +{ + if(nCutscene == GetLocalInt(oCloser, "nCutsceneNumber")) + { + AssignCommand(oCloser, ActionCloseDoor(oDoor)); + } +} + +void CutActionCloseDoor(float fDelay, object oCloser, object oDoor, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oCloser, iShift), CallActionCloseDoor(nCutscene, oCloser, oDoor))); +} + +// Used to cast a fake spell at an object. +/* EXAMPLE: CutActionCastFakeSpellAtObject(23.0, oPC, SPELL_SUNBEAM, oTarget, + PROJECTILE_PATH_TYPE_DEFAULT); would have the + PC cast a sunbeam at the oTarget, with a default + projectile path. This would happen after a 23 + second delay. +*/ +void CallActionCastFakeSpellAtObject(int nCutscene, int iSpell, object oObject, object oTarget, int iPath) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + AssignCommand(oObject, ActionCastFakeSpellAtObject(iSpell, oTarget, iPath)); + } +} + +void CutActionCastFakeSpellAtObject(float fDelay, int iSpell, object oObject, object oTarget, int iPath = PROJECTILE_PATH_TYPE_DEFAULT, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallActionCastFakeSpellAtObject(nCutscene, iSpell, oObject, oTarget, iPath))); +} + +// Used to cast a spell at an object. +void CallActionCastSpellAtObject(int nCutscene, int iSpell, object oObject, object oTarget, int nMetaMagic, int bCheat, int nDomainLevel, int iPath, int bInstantSpell) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + AssignCommand(oObject, ActionCastSpellAtObject(iSpell, oTarget, nMetaMagic, nDomainLevel, iPath, bInstantSpell)); + } +} + +void CutActionCastSpellAtObject(float fDelay, int iSpell, object oObject, object oTarget, int nMetaMagic=METAMAGIC_ANY, int bCheat=FALSE, int nDomainLevel=0, int iPath=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallActionCastSpellAtObject(nCutscene, iSpell, oObject, oTarget, nMetaMagic, bCheat, nDomainLevel, iPath, bInstantSpell))); +} + +// Used to cast a fake spell at a location. +/* EXAMPLE: CutActionCastFakeSpellAtLocation(23.0, oPC, SPELL_SUNBEAM, lLoc, + PROJECTILE_PATH_TYPE_DEFAULT); would have the + PC cast a sunbeam at lLoc, with a default + projectile path. This would happen after a 23 + second delay. +*/ +void CallActionCastFakeSpellAtLocation(int nCutscene, int iSpell, object oObject, location lLoc, int iPath) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + AssignCommand(oObject, ActionCastFakeSpellAtLocation(iSpell, lLoc, iPath)); + } +} + +void CutActionCastFakeSpellAtLocation(float fDelay, int iSpell, object oObject, location lLoc, int iPath = PROJECTILE_PATH_TYPE_DEFAULT, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallActionCastFakeSpellAtLocation(nCutscene, iSpell, oObject, lLoc, iPath))); +} + +// Used to cast a spell at a location. + +void CallActionCastSpellAtLocation(int nCutscene, int iSpell, object oObject, location lLoc, int nMetaMagic, int bCheat, int iPath, int bInstantSpell) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + AssignCommand(oObject, ActionCastSpellAtLocation(iSpell, lLoc, nMetaMagic, bCheat, iPath, bInstantSpell)); + } +} + +void CutActionCastSpellAtLocation(float fDelay, int iSpell, object oObject, location lLoc, int nMetaMagic=METAMAGIC_ANY, int bCheat=FALSE, int iPath=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallActionCastSpellAtLocation(nCutscene, iSpell, oObject, lLoc, nMetaMagic, bCheat, iPath, bInstantSpell))); +} + +// Used to set the PC's location so they can be jumped around as though +// they are the camera. +/* EXAMPLE: CutSetLocation(23.0, oPC); would set the location + on the PC, as a variable, as a location to be returned to later. This + would happen after a 23 second delay. +*/ +void CallSetLocation(int nCutscene, object oPC) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + SetLocalLocation(oPC, "cut_jump_location", GetLocation(oPC)); + SetLocalInt(oPC, "X2_HasStoredLocation", 1); + } +} + +void CutSetLocation(float fDelay, object oPC, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallSetLocation(nCutscene, oPC))); +} + +// Used to recall the PC's location so they can be jumped back to their +// original location, stored by CutGetLocation. +/* EXAMPLE: CutRestoreLocation(23.0, oPC); would return the PC + to their original spot. This would happen after a 23 second delay. +*/ +void CallRestoreLocation(int nCutscene, object oPC) +{ + if(CutGetActiveCutsceneForObject(oPC) == nCutscene) + { + // Restoring location only if the pc has had a valid location set earlier. + if(GetLocalInt(oPC, "X2_HasStoredLocation") == 1) + { + location lLoc = GetLocalLocation(oPC, "cut_jump_location"); + if(GetCommandable(oPC) == FALSE) + { + SetCommandable(TRUE, oPC); + AssignCommand(oPC, JumpToLocation(lLoc)); + DelayCommand(0.2, SetCommandable(FALSE, oPC)); + } + else + AssignCommand(oPC, JumpToLocation(lLoc)); + SetLocalInt(oPC, "X2_HasStoredLocation", 0); + } + + } +} + +void CutRestoreLocation(float fDelay, object oPC, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallRestoreLocation(nCutscene, oPC))); +} + +void CutRestorePCAppearance(int nCutscene, object oPC) +{ + if(CutGetActiveCutsceneForObject(oPC) == nCutscene) + { + SetCameraHeight(oPC); + } + + /*if(CutGetActiveCutsceneForObject(oPC) == nCutscene) + { + int nChangedApp = GetLocalInt(oPC, "X2_CUT_CHANGE_APPEARANCE" + IntToString(nCutscene)); + if(nChangedApp == 0) // stay here only if the pc has changed in appearance by the cutscene system + return; + SetLocalInt(oPC, "X2_CUT_CHANGE_APPEARANCE" + IntToString(nCutscene), 0); + // getting original appearance of pc + int nOldApp = GetLocalInt(oPC, "X2_CUT_APPEARANCE"); + SetLocalInt(oPC, "X2_CUT_APPEARANCE", -1); // initializing + if(GetAppearanceType(oPC) == nOldApp) // current appearance is the same as before changing it + // the player has changed his appearance during the cutscene so there is no need to restore it + // (the change was probably a run-off polymorph effect) + { + return; + } + + // player has still a different appearance + int nApp = -1; + if(GetIsPossessedFamiliar(oPC)) + nApp = nOldApp; // a familiar should always be restored to the old appearance + else if(GetRacialType(oPC) == RACIAL_TYPE_DWARF && GetAppearanceType(oPC) != APPEARANCE_TYPE_DWARF) + nApp = APPEARANCE_TYPE_DWARF; + else if(GetRacialType(oPC) == RACIAL_TYPE_ELF && GetAppearanceType(oPC) != APPEARANCE_TYPE_ELF) + nApp = APPEARANCE_TYPE_ELF; + else if(GetRacialType(oPC) == RACIAL_TYPE_HALFELF && GetAppearanceType(oPC) != APPEARANCE_TYPE_HALF_ELF) + nApp = APPEARANCE_TYPE_HALF_ELF; + else if(GetRacialType(oPC) == RACIAL_TYPE_HALFORC && GetAppearanceType(oPC) != APPEARANCE_TYPE_HALF_ORC) + nApp = APPEARANCE_TYPE_HALF_ORC; + else if(GetRacialType(oPC) == RACIAL_TYPE_HALFLING && GetAppearanceType(oPC) != APPEARANCE_TYPE_HALFLING) + nApp = APPEARANCE_TYPE_HALFLING; + else if(GetRacialType(oPC) == RACIAL_TYPE_GNOME && GetAppearanceType(oPC) != RACIAL_TYPE_GNOME) + nApp = RACIAL_TYPE_GNOME; + else if(GetRacialType(oPC) == RACIAL_TYPE_HUMAN && GetAppearanceType(oPC) != RACIAL_TYPE_HUMAN) + nApp = RACIAL_TYPE_HUMAN; + else + nApp = nOldApp; + if(nApp == -1) + return; + + SetCreatureAppearanceType(oPC, nApp); + // apply inv effect so the player won't see the old form + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY), oPC, 1.5); + }*/ +} + +void CutRemoveHenchmenAssociates(object oPC) +{ + + object oAnimal; + object oDominated; + object oFamiliar; + object oSummoned; + int i = 1; + object oHenchman = GetHenchman(oPC, i); + while(oHenchman != OBJECT_INVALID) + { + oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oHenchman); + oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oHenchman); + oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oHenchman); + oSummoned = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oHenchman); + DestroyObject(oAnimal); + DestroyObject(oDominated); + DestroyObject(oFamiliar); + DestroyObject(oSummoned); + i++; + oHenchman = GetHenchman(oPC, i); + } + +} + +void CallSetCutsceneMode(int nCutscene, object oPC, int iValue, int bInv, int bKeepAssociate = TRUE, int bFreezeAssociate = TRUE) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + if(iValue == FALSE) // Disable cutscene mode + { + SetCutsceneMode(oPC, iValue); + SetPlotFlag(oPC, FALSE); + SetCommandable(TRUE, oPC); + UnFreezeAssociate(oPC); + CutSetActiveCutsceneForObject(oPC, 0); + SetCameraHeight(oPC, 0.0); + } + else // enable cutscene mode + { + //SetLocalInt(oPC, "X2_CUT_APPEARANCE", -1); + AssignCommand(oPC, ClearAllActions(TRUE)); + SetActionMode(oPC, ACTION_MODE_DETECT, FALSE); + SetActionMode(oPC, ACTION_MODE_STEALTH, FALSE); + if(bInv >= TRUE) + { + + //SetLocalInt(oPC, "X2_CUT_CHANGE_APPEARANCE" + IntToString(nCutscene), 1); // flagging pc as changed appearance + //SetLocalInt(oPC, "X2_CUT_APPEARANCE", GetAppearanceType(oPC)); + + DelayCommand(0.2, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY), + oPC, 9999.0)); + + if(bInv == CUT_CAMERA_HEIGHT_VERY_LOW) + DelayCommand(0.4, SetCameraHeight(oPC, 0.3)); + //DelayCommand(0.4, SetCreatureAppearanceType(oPC, APPEARANCE_TYPE_CHICKEN)); + if(bInv == CUT_CAMERA_HEIGHT_LOW) + DelayCommand(0.4, SetCameraHeight(oPC, 1.0)); + //DelayCommand(0.4, SetCreatureAppearanceType(oPC, APPEARANCE_TYPE_HALFLING_NPC_MALE)); + if(bInv == CUT_CAMERA_HEIGHT_MEDIUM) + DelayCommand(0.4, SetCameraHeight(oPC, 1.25)); + //DelayCommand(0.4, SetCreatureAppearanceType(oPC, APPEARANCE_TYPE_HUMAN_NPC_MALE_01)); + if(bInv == CUT_CAMERA_HEIGHT_HIGH) + DelayCommand(0.4, SetCameraHeight(oPC, 1.75)); + //DelayCommand(0.4, SetCreatureAppearanceType(oPC, APPEARANCE_TYPE_HALF_ORC_NPC_MALE_01)); + if(bInv == CUT_CAMERA_HEIGHT_VERY_HIGH) + DelayCommand(0.4, SetCameraHeight(oPC, 5.0)); + //DelayCommand(0.4, SetCreatureAppearanceType(oPC, APPEARANCE_TYPE_GIANT_FROST)); + } + SetCutsceneMode(oPC, iValue); + if(bFreezeAssociate == TRUE || bFreezeAssociate == VANISH) + { + int bVanish = FALSE; + if(bFreezeAssociate == VANISH) + bVanish = TRUE; + object oDominated = FreezeAssociate(oPC, bVanish); + if (GetIsObjectValid(oDominated) == TRUE) + SetLocalObject(oPC, "oDominated", oDominated); + } + // Destroy associates. + if (bKeepAssociate == FALSE) + { + if(GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC) != OBJECT_INVALID) + DestroyObject(GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC)); + if(GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC) != OBJECT_INVALID) + DestroyObject(GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC)); + if(GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC) != OBJECT_INVALID) + DestroyObject(GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC)); + if(GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC) != OBJECT_INVALID) + DestroyObject(GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC)); + } + // Remove Henchmens' associates + CutRemoveHenchmenAssociates(oPC); + } + } +} + +void CutSetCutsceneMode(float fDelay, object oPC, int iValue, int bInv, int bKeepAssociate = TRUE, int bFreezeAssociate = TRUE, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallSetCutsceneMode(nCutscene, oPC, iValue, bInv, bKeepAssociate, bFreezeAssociate))); +} + +// Used to turn plot flags on or off. +/* EXAMPLE: CutSetPlotFlag(10.0, oObject, 1); would turn plot flag to + on after 10 seconds for the object. +*/ +void CallSetPlotFlag(int nCutscene, object oObject, int iValue) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + + SetPlotFlag(oObject, iValue); + + } +} + +void CutSetPlotFlag(float fDelay, object oObject, int iValue, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallSetPlotFlag(nCutscene, oObject, iValue))); +} + +// Used to destroy objects. Make sure they are destroyable first with the +// CutSetPlotFlag function. +/* EXAMPLE: CutDestroyObject(10.0, oObject); would destroy the object + after 10 seconds. +*/ +void CallDestroyObject(int nCutscene, object oObject) +{ + if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber")) + { + + DestroyObject(oObject); + + } +} + +void CutDestroyObject(float fDelay, object oObject, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oObject, iShift), CallDestroyObject(nCutscene, oObject))); +} + +// Used to store the camera position. +/* EXAMPLE: CutStoreCameraFacing(10.0, oPC); would set the current + camera settings at the 10.0 mark. +*/ +void CallStoreCameraFacing(int nCutscene, object oPC) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + + StoreCameraFacing(); + + } +} + +void CutStoreCameraFacing(float fDelay, object oPC, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallStoreCameraFacing(nCutscene, oPC))); +} + +// Used to restore the camera position. +/* EXAMPLE: CutRestoreCameraFacing(10.0, oPC); would set the old + camera settings back at the 10.0 mark. +*/ +void CallRestoreCameraFacing(int nCutscene, object oPC) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + + RestoreCameraFacing(); + + } +} + +void CutRestoreCameraFacing(float fDelay, object oPC, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallRestoreCameraFacing(nCutscene, oPC))); +} + +// Used to set the screen to black. This is very useful in covering up +// and cutscene jumps that happen in the same area as the play area. +/* EXAMPLE: CutBlackScreen(10.0, oPC); would set the screen to black + at the 10.0 mark. +*/ +void CallBlackScreen(int nCutscene, object oPC) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + + BlackScreen(oPC); + + } +} + +void CutBlackScreen(float fDelay, object oPC, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallBlackScreen(nCutscene, oPC))); +} + +// Used to remove the screen to black. +/* EXAMPLE: CutStopFade(10.0, oPC); would set the screen back from black + at the 10.0 mark. +*/ +void CallStopFade(int nCutscene, object oPC) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + + StopFade(oPC); + + } +} + +void CutStopFade(float fDelay, object oPC, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallStopFade(nCutscene, oPC))); +} + +void CallPlayVoiceChat(int nCutscene, object oPC, int nChatID) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + AssignCommand(oPC, PlayVoiceChat(nChatID)); + } +} + +void CutPlayVoiceChat(float fDelay, object oPC, int nChatID, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallPlayVoiceChat(nCutscene, oPC, nChatID))); +} + +void CallPlaySound(int nCutscene, object oPC, string szSound) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + AssignCommand(oPC, PlaySound(szSound)); + } +} + +void CutPlaySound(float fDelay, object oPC, string szSound, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallPlaySound(nCutscene, oPC, szSound))); +} + +// Setting a background ambient sounds and playing it for the area where oPC is in. +void CallSetAmbient(int nCutscene, object oPC, int nTrack) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + // change for both day and night + AmbientSoundChangeDay(GetArea(oPC), nTrack); + AmbientSoundChangeNight(GetArea(oPC), nTrack); + + // play new ambient sounds + AmbientSoundPlay(GetArea(oPC)); + } +} + +void CutSetAmbient(float fDelay, object oPC, int nTrack, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallSetAmbient(nCutscene, oPC, nTrack))); +} + +// Setting a background music and playing it for the area where oPC is in. +void CallSetMusic(int nCutscene, object oPC, int nTrack) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + // change for both day and night + MusicBackgroundChangeDay(GetArea(oPC), nTrack); + MusicBackgroundChangeNight(GetArea(oPC), nTrack); + + // stop any battle music and play the new music + MusicBattleStop(GetArea(oPC)); + MusicBackgroundPlay(GetArea(oPC)); + } + +} + +void CutSetMusic(float fDelay, object oPC, int nTrack, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallSetMusic(nCutscene, oPC, nTrack))); +} + +// keep old background music +void CallStoreMusic(int nCutscene, object oPC) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + SetLocalInt(GetArea(oPC), "X2_MUSIC_DAY", MusicBackgroundGetDayTrack(GetArea(oPC))); + SetLocalInt(GetArea(oPC), "X2_MUSIC_NIGHT", MusicBackgroundGetNightTrack(GetArea(oPC))); + } +} + +void CutStoreMusic(float fDelay, object oPC, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallStoreMusic(nCutscene, oPC))); +} + +// restore old background music. Notice that there is no cutscene number check - so music can +// be restoed after aborting a cutscene +void CallRestoreMusic(int nCutscene, object oPC) +{ + MusicBackgroundChangeDay(GetArea(oPC), GetLocalInt(GetArea(oPC), "X2_MUSIC_DAY")); + MusicBackgroundChangeNight(GetArea(oPC), GetLocalInt(GetArea(oPC), "X2_MUSIC_NIGHT")); +} + +void CutRestoreMusic(float fDelay, object oPC, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallRestoreMusic(nCutscene, oPC))); +} + +void CallSetTileMainColor(int nCutscene, object oPC, location lLoc, int nMainColor1, int nMainColor2) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + vector vPos = GetPositionFromLocation(lLoc); + vPos.x /= 10; + vPos.y /= 10; + lLoc = Location(GetArea(OBJECT_SELF), vPos, 0.0); + SetTileMainLightColor(lLoc, nMainColor1, nMainColor2); + RecomputeStaticLighting(GetArea(oPC)); + } +} + +void CutSetTileMainColor(float fDelay, object oPC, location lLoc, int nMainColor1, int nMainColor2, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallSetTileMainColor(nCutscene, oPC, lLoc, nMainColor1, nMainColor2))); +} + +void CallSetTileSourceColor(int nCutscene, object oPC, location lLoc, int nSourceColor1, int nSourceColor2) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + vector vPos = GetPositionFromLocation(lLoc); + vPos.x /= 10; + vPos.y /= 10; + lLoc = Location(GetArea(OBJECT_SELF), vPos, 0.0); + SetTileSourceLightColor(lLoc, nSourceColor1, nSourceColor2); + RecomputeStaticLighting(GetArea(oPC)); + } +} + +void CutSetTileSourceColor(float fDelay, object oPC, location lLoc, int nSourceColor1, int nSourceColor2, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallSetTileSourceColor(nCutscene, oPC, lLoc, nSourceColor1, nSourceColor2))); +} + +void CallSetWeather(int nCutscene, object oPC, int nWeather) +{ + if(nCutscene == GetLocalInt(oPC, "nCutsceneNumber")) + { + SetWeather(GetArea(oPC), nWeather); + } +} + +void CutSetWeather(float fDelay, object oPC, int nWeather, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallSetWeather(nCutscene, oPC, nWeather))); +} + +void CallSetCameraSpeed(int nCutscene, object oPC, float fMovementRateFactor) +{ + if(CutGetActiveCutsceneForObject(oPC) == nCutscene) + { + SetCutsceneCameraMoveRate(oPC, fMovementRateFactor); + } + +} + +void CutSetCameraSpeed(float fDelay, object oPC, float fMovementRateFactor, int iShift = TRUE) +{ + int nCutscene = GetActiveCutsceneNum(); + fDelay = CutCalculateCurrentDelay(fDelay, nCutscene); + DelayCommand(fDelay, DelayCommand(GetShift(oPC, iShift), CallSetCameraSpeed(nCutscene, oPC, fMovementRateFactor))); +} + +void CutDisableCutscene(int nCutscene, float fCleanupDelay, float fDestPCCopyDelay, int nRestoreType = RESTORE_TYPE_NORMAL) +{ + if(GetLocalInt(GetModule(), "X2_DelayType" + IntToString(nCutscene)) != CUT_DELAY_TYPE_CONSTANT) + { + fCleanupDelay = CutCalculateCurrentDelay(fCleanupDelay, nCutscene); + fDestPCCopyDelay = CutCalculateCurrentDelay(fDestPCCopyDelay, nCutscene); + } + // Setting constant delay + object oPC = GetFirstPC(); + + while(oPC != OBJECT_INVALID) + { + object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC); + if(oFamiliar != OBJECT_INVALID && GetIsPossessedFamiliar(oFamiliar)) + oPC = oFamiliar; + + if(CutGetActiveCutsceneForObject(oPC) == nCutscene) + { + // Notice that the following functions use the delay supplied + // by the CutSetAbortDelay() function (defaults to 0) + //CutRestoreCameraFacing(fDelay1, oPC, FALSE); + string sDelayVariable = "X2_fCutscene" + IntToString(nCutscene) + "Delay"; + + //DelayCommand(fCleanupDelay - 1.0, CutRestorePCAppearance(nCutscene, oPC)); + DelayCommand(fCleanupDelay, SetLocalFloat(GetModule(), sDelayVariable, 0.0)); + DelayCommand(fCleanupDelay, CallRemoveAssociatesEffects(nCutscene, oPC)); + DelayCommand(fCleanupDelay, CallRemoveEffects(nCutscene, oPC)); + if(nRestoreType == RESTORE_TYPE_NORMAL) + DelayCommand(fCleanupDelay, CallRestoreLocation(nCutscene, oPC)); + DelayCommand(fCleanupDelay + 0.3, CallSetCutsceneMode(nCutscene, oPC, FALSE, FALSE, FALSE, FALSE)); + if(nRestoreType == RESTORE_TYPE_COPY) + DelayCommand(fCleanupDelay, CallRestorePCCopyLocation(nCutscene, oPC)); + // oPC is not the main pc for the cutscene after the following line: + // Notice that this function uses the delay supplied by the + // CutSetDestroyCopyDelay() function (defaults to 0). + + DelayCommand(fDestPCCopyDelay, CallDestroyPCCopy(nCutscene, oPC, FALSE)); // destroys copy if it exists + } + oPC = GetNextPC(); + } + DelayCommand(fCleanupDelay + 0.8, CutSetActiveCutscene(-1, CUT_DELAY_TYPE_CONSTANT)); +} + + +// Test main +//void main(){} diff --git a/src/include/x2_inc_spellhook.nss b/src/include/x2_inc_spellhook.nss new file mode 100644 index 0000000..c631c0e --- /dev/null +++ b/src/include/x2_inc_spellhook.nss @@ -0,0 +1,3634 @@ +//:://///////////////////////////////////////////// +//:: Spell Hook Include File +//:: x2_inc_spellhook +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + + This file acts as a hub for all code that + is hooked into the nwn spellscripts' + + If you want to implement material components + into spells or add restrictions to certain + spells, this is the place to do it. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Georg Zoeller +//:: Created On: 2003-06-04 +//:: Updated On: 2003-10-25 +//::////////////////////////////////////////////// +//:: Modified By: Deva Winblood +//:: Modified Date: January 15th-16th, 2008 +//::////////////////////////////////////////////// +/* + Modified to insure no shapeshifting spells are castable upon + mounted targets. This prevents problems that can occur due + to dismounting after shape shifting, or other issues that can + occur due to preserved appearances getting out of synch. + + This can additional check can be disabled by setting the variable + X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object. If this + variable is set then this script will function as it did prior to + this modification. + +*/ + +const int X2_EVENT_CONCENTRATION_BROKEN = 12400; + +// Removes spell use for new spellbook system, and calculates spell fail +// chance from ASF or silence effects. +int NSB_SpellCast(object oCaster, int nSpellID, int nCastingClass, int nMetamagic, int nSpellbookType, string sComponent, object oSpellCastItem); + +// This function checks for material components or gold +// See switch PRC_MATERIAL_COMPONENTS +int MaterialComponents(object oCaster, int nSpellID, int nCastingClass, object oSpellCastItem); + +// This function checks for the Red Wizard's restricted +// spell school and prevents him from casting the spells +// that he is banned from casting. +int RedWizRestrictedSchool(object oCaster, int nSchool, int nCastingClass, object oSpellCastItem); + +// This function checks whether the Combat Medic's Healing Kicker +// feats are active, and if so imbues the spell target with additional +// beneficial effects. +void CombatMedicHealingKicker(object oCaster, object oTarget, int nSpellID); + +// Duskblade channeling. While channeling, stops non-touch spells +// from working +int DuskbladeArcaneChanneling(object oCaster, object oTarget, int nSpellID, int nCasterLevel, int nMetamagic, object oSpellCastItem); + +// Handles the "When spell is cast do this" effects from the Draconic +// series of feats +void DraconicFeatsOnSpell(object oCaster, object oTarget, object oSpellCastItem, int nSpellLevel, int nCastingClass); + +// Bard / Sorc PrC handling +// returns FALSE if it is a bard or a sorcerer spell from a character +// with an arcane PrC via bioware spellcasting rather than via PrC spellcasting +int BardSorcPrCCheck(object oCaster, int nCastingClass, object oSpellCastItem); + +// Grappling +// Rolls a Concentration check to cast a spell while grappling. +int GrappleConc(object oCaster, int nSpellLevel); + +// Blighters can't cast druid spells +int Blighter(object oCaster, int nCastingClass, object oSpellCastItem); + +// Spelldance perform check +int Spelldance(object oCaster, int nSpellLevel, int nCastingClass); + +// Dazzling Illusion feat +// Dazzles enemies within radius +void DazzlingIllusion(object oCaster, int nSchool); + +// Battle Blessing check +int BattleBlessing(object oCaster, int nCastingClass); + +// Use Magic Device Check. +// Returns TRUE if the Spell is allowed to be cast, either because the +// character is allowed to cast it or he has won the required UMD check +// Only active on spell scroll +int X2UseMagicDeviceCheck(object oCaster); + +// check if the spell is prohibited from being cast on items +// returns FALSE if the spell was cast on an item but is prevented +// from being cast there by its corresponding entry in des_crft_spells +// oItem - pass PRCGetSpellTargetObject in here +int X2CastOnItemWasAllowed(object oItem); + +// Sequencer Item Property Handling +// Returns TRUE (and charges the sequencer item) if the spell +// ... was cast on an item AND +// ... the item has the sequencer property +// ... the spell was non hostile +// ... the spell was not cast from an item +// in any other case, FALSE is returned an the normal spellscript will be run +// oItem - pass PRCGetSpellTargetObject in here +int X2GetSpellCastOnSequencerItem(object oItem, object oCaster, int nSpellID, int nMetamagic, int nCasterLevel, int nSaveDC, int bSpellIsHostile, object oSpellCastItem); + +int X2RunUserDefinedSpellScript(); + +// Similar to SetModuleOverrideSpellscript but only applies to the user +// of this spell. Basically tells the class to run this script when the +// spell starts. +void PRCSetUserSpecificSpellScript(string sScript); + +// Similar to SetModuleOverrideSpellscriptFinished but only applies to the +// user of this spell. This prevents the spell from continuing on if the +// ability dictates it. +void PRCSetUserSpecificSpellScriptFinished(); + +// By setting user-defined spellscripts to the player only, we +// avoid the nasty mess of spellhooking the entire module for one player's +// activities. This function is mostly only useful inside this include. +int PRCRunUserSpecificSpellScript(); + +// Useful functions for PRCRunUserSpecificSpellScript but not useful in spell +// scripts. +string PRCGetUserSpecificSpellScript(); +int PRCGetUserSpecificSpellScriptFinished(); + +//#include "prc_x2_itemprop" - Inherited from prc_x2_craft +//#include "prc_alterations" +#include "prc_x2_craft" +//#include "x3_inc_horse" +#include "prc_inc_spells" +#include "prc_inc_combat" +//#include "inc_utility" +#include "prc_inc_itmrstr" +#include "prc_inc_burn" +//#include "inc_newspellbook" +//#include "prc_sp_func" +//#include "psi_inc_manifest" +//#include "prc_inc_combmove" +#include "pnp_shft_main" +#include "inc_dynconv" +#include "inc_npc" + +int DruidSpontSummon(object oCaster, int nCastingClass, int nSpellID, int nSpellLevel) +{ + if(nCastingClass != CLASS_TYPE_DRUID) + return TRUE; + + if(GetLocalInt(oCaster, "PRC_SpontSummon")) + { + DeleteLocalInt(oCaster, "PRC_SpontSummon"); + int nMetamagic = GetMetaMagicFeat();//we need bioware metamagic here + int nSpellLevel = PRCGetSpellLevelForClass(nSpellID, CLASS_TYPE_DRUID); + nSpellLevel += GetMetaMagicSpellLevelAdjustment(nMetamagic); + int nSummonSpell; + switch(nSpellLevel) + { + case 0: return TRUE; + case 1: nSummonSpell = SPELL_SUMMON_CREATURE_I; break; + case 2: nSummonSpell = SPELL_SUMMON_CREATURE_II; break; + case 3: nSummonSpell = SPELL_SUMMON_CREATURE_III; break; + case 4: nSummonSpell = SPELL_SUMMON_CREATURE_IV; break; + case 5: nSummonSpell = SPELL_SUMMON_CREATURE_V; break; + case 6: nSummonSpell = SPELL_SUMMON_CREATURE_VI; break; + case 7: nSummonSpell = SPELL_SUMMON_CREATURE_VII; break; + case 8: nSummonSpell = SPELL_SUMMON_CREATURE_VIII; break; + case 9: nSummonSpell = SPELL_SUMMON_CREATURE_IX; break; + } + + //subradial spells + if(nSummonSpell == SPELL_SUMMON_CREATURE_VII + || nSummonSpell == SPELL_SUMMON_CREATURE_VIII + || nSummonSpell == SPELL_SUMMON_CREATURE_IX) + { + SetLocalInt(oCaster, "DomainOrigSpell", nSummonSpell); + SetLocalInt(oCaster, "DomainCastLevel", nSpellLevel); + SetLocalInt(oCaster, "DomainCastClass", CLASS_TYPE_DRUID); + StartDynamicConversation("prc_domain_conv", oCaster, DYNCONV_EXIT_NOT_ALLOWED, FALSE, TRUE, oCaster); + } + else + ActionCastSpell(nSummonSpell, 0, 0, 0, METAMAGIC_NONE, CLASS_TYPE_DRUID); + + //Don't cast original spell + return FALSE; + } + + return TRUE; +} + +int ArcaneSpellFailure(object oCaster, int nCastingClass, int nSpellLevel, int nMetamagic, string sComponents) +{ + if(!GetIsArcaneClass(nCastingClass)) + return FALSE; + + // They don't suffer ASF + if(nCastingClass == CLASS_TYPE_FACTOTUM) + return FALSE; + + // Hammer of Witches - wielder cannot cast arcane spells + if(GetIsObjectValid(GetItemPossessedBy(oCaster, "WOL_HammerWitches"))) + return TRUE; + + if(FindSubString(sComponents, "S") == -1) + return FALSE; + + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCaster); + object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCaster); + int nAC = GetBaseAC(oArmor); + int nASF = GetArcaneSpellFailure(oCaster); + int bBattleCaster = GetHasFeat(FEAT_BATTLE_CASTER, oCaster); + + //Classes with reduced ASF + // Beguiler/Dread Necromancer/Sublime Chord can cast in light armor. + if(nCastingClass == CLASS_TYPE_BEGUILER + || nCastingClass == CLASS_TYPE_DREAD_NECROMANCER + || nCastingClass == CLASS_TYPE_SUBLIME_CHORD) + { + //armors + switch(nAC) + { + case 1: nASF -= 5; break;//light + case 2: nASF -= 10; break;//light + case 3: nASF -= 20; break;//light + case 4: nASF -= bBattleCaster ? 20 : 0; break;//medium; + case 5: nASF -= bBattleCaster ? 30 : 0; break;//medium + default: break; + } + } + // Hexblade can cast in light/medium armour and while using small shield. + else if(nCastingClass == CLASS_TYPE_HEXBLADE) + { + //shields + if(GetBaseItemType(oShield) == BASE_ITEM_SMALLSHIELD) nASF -= 5; + //armors + switch(nAC) + { + case 1: nASF -= 5; break; + case 2: nASF -= 10; break; + case 3: nASF -= 20; break; + case 4: nASF -= 20; break; + case 5: nASF -= 30; break; + case 6: nASF -= bBattleCaster ? 40 : 0; break; + case 7: nASF -= bBattleCaster ? 40 : 0; break; + case 8: nASF -= bBattleCaster ? 45 : 0; break; + default: break; + } + } + // Bards cannot cast in light armour and while using small shield in 3e +/* else if(nCastingClass == CLASS_TYPE_BARD) + { + int nLvl = GetLevelByClass(CLASS_TYPE_BARD, oCaster); + int nShield = GetBaseItemType(oShield); + //armors + switch(nAC) + { + case 1: nASF -= 5; break;//light + case 2: nASF -= 10; break;//light + case 3: nASF -= 20; break;//light + case 4: nASF -= bBattleCaster ? 20 : 0; break;//medium; + case 5: nASF -= bBattleCaster ? 30 : 0; break;//medium + default: break; + } + //shields + switch(nShield) + { + case BASE_ITEM_SMALLSHIELD: nASF -= 5; break; + } + } */ + // Duskblade can cast in light/medium armour and while using small/large shield. + else if(nCastingClass == CLASS_TYPE_DUSKBLADE) + { + int nLvl = GetLevelByClass(CLASS_TYPE_DUSKBLADE, oCaster); + int nShield = GetBaseItemType(oShield); + //armors + switch(nAC) + { + case 1: nASF -= 5; break; + case 2: nASF -= 10; break; + case 3: nASF -= 20; break; + case 4: nASF -= (nLvl >= 4 || bBattleCaster) ? 20 : 0; break; + case 5: nASF -= (nLvl >= 4 || bBattleCaster) ? 30 : 0; break; + case 6: nASF -= (nLvl >= 4 && bBattleCaster) ? 40 : 0; break; + case 7: nASF -= (nLvl >= 4 && bBattleCaster) ? 40 : 0; break; + case 8: nASF -= (nLvl >= 4 && bBattleCaster) ? 45 : 0; break; + default: break; + } + //shields + switch(nShield) + { + case BASE_ITEM_SMALLSHIELD: nASF -= 5; break; + case BASE_ITEM_LARGESHIELD: nASF -= 15; break; + } + } + // Suel Archanamach gets the Ignore Spell Failure Chance feats +// Suel Archanamach gets the Ignore Spell Failure Chance feats + else if(nCastingClass == CLASS_TYPE_SUEL_ARCHANAMACH) + { + int nLvl = GetLevelByClass(CLASS_TYPE_SUEL_ARCHANAMACH, oCaster); + + if (nLvl >= 28) nASF -= 50; + else if(nLvl >= 25) nASF -= 45; + else if(nLvl >= 22) nASF -= 40; + else if(nLvl >= 19) nASF -= 35; + else if(nLvl >= 16) nASF -= 30; + else if(nLvl >= 13) nASF -= 25; + else if(nLvl >= 10) nASF -= 20; + else if(nLvl >= 7) nASF -= 15; + else if(nLvl >= 4) nASF -= 10; + else if(nLvl >= 1) nASF -= 5; + } + // Warmage can cast in light/medium armour and while using small shield. + else if(nCastingClass == CLASS_TYPE_WARMAGE) + { + int nLvl = GetLevelByClass(CLASS_TYPE_WARMAGE, oCaster); + //armors + switch(nAC) + { + case 1: nASF -= 5; break; + case 2: nASF -= 10; break; + case 3: nASF -= 20; break; + case 4: nASF -= (nLvl >= 8 || bBattleCaster) ? 20 : 0; break; + case 5: nASF -= (nLvl >= 8 || bBattleCaster) ? 30 : 0; break; + case 6: nASF -= (nLvl >= 8 && bBattleCaster) ? 40 : 0; break; + case 7: nASF -= (nLvl >= 8 && bBattleCaster) ? 40 : 0; break; + case 8: nASF -= (nLvl >= 8 && bBattleCaster) ? 45 : 0; break; + default: break; + } + //shields + if(GetBaseItemType(oShield) == BASE_ITEM_SMALLSHIELD) + nASF -= 5; + } + // Knight of the Weave ignores spell failure in light/medium + else if(nCastingClass == CLASS_TYPE_KNIGHT_WEAVE) + { + int nLvl = GetLevelByClass(CLASS_TYPE_KNIGHT_WEAVE, oCaster); + if (nLvl >= 2) //Doesn't start until 2nd level + { + //armors + switch(nAC) + { + case 1: nASF -= 5; break; + case 2: nASF -= 10; break; + case 3: nASF -= 20; break; + case 4: nASF -= (nLvl >= 8 || bBattleCaster) ? 20 : 0; break; + case 5: nASF -= (nLvl >= 8 || bBattleCaster) ? 30 : 0; break; + case 6: nASF -= (nLvl >= 8 && bBattleCaster) ? 40 : 0; break; + case 7: nASF -= (nLvl >= 8 && bBattleCaster) ? 40 : 0; break; + case 8: nASF -= (nLvl >= 8 && bBattleCaster) ? 45 : 0; break; + default: break; + } + } + } + // Redspawn Arcaniss can cast in light armour and while using small shields. + else if(nCastingClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oCaster) && GetRacialType(oCaster) == RACIAL_TYPE_REDSPAWN_ARCANISS) + { + int nShield = GetBaseItemType(oShield); + //armors + switch(nAC) + { + case 1: nASF -= 5; break; + case 2: nASF -= 10; break; + case 3: nASF -= 20; break; + case 4: nASF -= (bBattleCaster) ? 20 : 0; break; + case 5: nASF -= (bBattleCaster) ? 30 : 0; break; + default: break; + } + //shields + switch(nShield) + { + case BASE_ITEM_SMALLSHIELD: nASF -= 5; break; + } + } + + if(Random(100) < nASF) + { + int nFail = TRUE; + // Still spell helps + if(nMetamagic & METAMAGIC_STILL + || (GetHasFeat(FEAT_EPIC_AUTOMATIC_STILL_SPELL_1, oCaster) && nSpellLevel <= 3) + || (GetHasFeat(FEAT_EPIC_AUTOMATIC_STILL_SPELL_2, oCaster) && nSpellLevel <= 6) + || (GetHasFeat(FEAT_EPIC_AUTOMATIC_STILL_SPELL_3, oCaster) && nSpellLevel <= 9)) + { + nFail = FALSE; + } + if(nFail) + { + //52946 = Spell failed due to arcane spell failure! + FloatingTextStrRefOnCreature(52946, oCaster, FALSE); + return TRUE; + } + } + return FALSE; +} + +int SilenceDeafnessFailure(object oCaster, int nSpellLevel, int nMetamagic, string sComponents) +{ + if(FindSubString(sComponents, "V") == -1) + return FALSE; + + if(PRCGetHasEffect(EFFECT_TYPE_SILENCE, oCaster) + || (PRCGetHasEffect(EFFECT_TYPE_DEAF, oCaster) && Random(100) < 20)) + { + //auto-silent exceptions + if(nMetamagic & METAMAGIC_SILENT + || (GetHasFeat(FEAT_EPIC_AUTOMATIC_SILENT_SPELL_1, oCaster) && nSpellLevel <= 3) + || (GetHasFeat(FEAT_EPIC_AUTOMATIC_SILENT_SPELL_2, oCaster) && nSpellLevel <= 6) + || (GetHasFeat(FEAT_EPIC_AUTOMATIC_SILENT_SPELL_3, oCaster) && nSpellLevel <= 9)) + { + return FALSE; + } + else + { + //3734 = Spell failed! + FloatingTextStrRefOnCreature(3734, oCaster, FALSE); + return TRUE; + } + } + return FALSE; +} + +int Forsaker(object oCaster, object oTarget) +{ + // Friendly spells autofail on Forsakers + if (GetLevelByClass(CLASS_TYPE_FORSAKER, oTarget) && GetIsFriend(oTarget, oCaster)) + { + FloatingTextStringOnCreature("Target is a Forsaker, spell failed!", oCaster, FALSE); + return FALSE; + } + + // Forsakers can't use magic + if (GetLevelByClass(CLASS_TYPE_FORSAKER, oCaster)) + { + FloatingTextStringOnCreature("Forsakers cannot cast spells!", oCaster, FALSE); + return FALSE; + } + + return TRUE; +} + +int NSB_SpellCast(object oCaster, int nSpellID, int nCastingClass, int nMetamagic, int nSpellbookType, string sComponent, object oSpellCastItem) +{ +//DoDebug("PRC last spell cast class = "+IntToString(PRCGetLastSpellCastClass())); +//DoDebug("Primary Arcane Class = "+IntToString(GetPrimaryArcaneClass(oPC))); +//DoDebug("Caster Level = "+IntToString(PRCGetCasterLevel(oPC))); +//DoDebug("NSB_Class = "+GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", NSB_Class)))); + + // check if the spell was cast from original spellbook or from item + int bNormalCasting = (GetLastSpellCastClass() != CLASS_TYPE_INVALID || oSpellCastItem != OBJECT_INVALID || GetLocalInt(oCaster, "SpellIsSLA")); + int NSB_Class = GetLocalInt(oCaster, "NSB_Class"); + int nDomainCast = GetLocalInt(oCaster, "DomainCast"); + + if(nDomainCast) + { + int nBurnSpell = GetLocalInt(oCaster, "Domain_BurnableSpell") - 1; + if(nBurnSpell != -1) + { + if(!GetHasSpell(nBurnSpell, oCaster)) + { + //Stop casting + DeleteLocalInt(oCaster, "DomainCast"); + DeleteLocalInt(oCaster, "Domain_BurnableSpell"); + return FALSE; + } + else + { + DecrementRemainingSpellUses(oCaster, nBurnSpell); + SetLocalInt(oCaster, "DomainCastSpell" + IntToString(nDomainCast), TRUE); + } + } + else + { + DeleteLocalInt(oCaster, "NSB_Class"); + if(NSB_Class != CLASS_TYPE_MYSTIC && NSB_Class != CLASS_TYPE_NIGHTSTALKER) + SetLocalInt(oCaster, "DomainCastSpell" + IntToString(nDomainCast), TRUE); + } + DeleteLocalInt(oCaster, "DomainCast"); + DeleteLocalInt(oCaster, "Domain_BurnableSpell"); + } + + //if for some reason NSB variables were not removed and the player is not casting from new spellbook + //remove the variables now + if(bNormalCasting) + { + if(NSB_Class) + { + //clean local vars + DeleteLocalInt(oCaster, "NSB_SpellLevel"); + DeleteLocalInt(oCaster, "NSB_Class"); + DeleteLocalInt(oCaster, "NSB_SpellbookID"); + } + return TRUE; + } + + //this shuld be executed only for new spellbook spells + else if(NSB_Class) + { + int nSpellLevel = GetLocalInt(oCaster, "NSB_SpellLevel"); + int nCount; + string sArray = "NewSpellbookMem_" + IntToString(nCastingClass); + string sMessage; + + if(nSpellbookType == SPELLBOOK_TYPE_PREPARED) + { + int nSpellbookID = GetLocalInt(oCaster, "NSB_SpellbookID"); + nCount = persistant_array_get_int(oCaster, sArray, nSpellbookID); + if(nCount < 1) + return FALSE; + + nCount--; + persistant_array_set_int(oCaster, sArray, nSpellbookID, nCount); + + int nRealSpellID = StringToInt(Get2DACache(GetFileForClass(nCastingClass), "RealSpellID", nSpellbookID)); + string sSpellName = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nRealSpellID))); + // "You have " + IntToString(nCount) + " castings of " + sSpellName + " remaining" + sMessage = ReplaceChars(GetStringByStrRef(16828410), "", IntToString(nCount)); + sMessage = ReplaceChars(sMessage, "", sSpellName); + } + else if(nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS) + { + nCount = persistant_array_get_int(oCaster, sArray, nSpellLevel); + if(nCount < 1) + return FALSE; + + nCount--; + persistant_array_set_int(oCaster, sArray, nSpellLevel, nCount); + + // "You have " + IntToString(nCount) + " castings of spells of level " + IntToString(nSpellLevel) + " remaining" + sMessage = ReplaceChars(GetStringByStrRef(16828408), "", IntToString(nCount)); + sMessage = ReplaceChars(sMessage, "", IntToString(nSpellLevel)); + } + FloatingTextStringOnCreature(sMessage, oCaster, FALSE); + + // Arcane classes roll ASF if the spell has a somatic component + // OR if the spell has a vocal component, silence and deafness can cause failure + if(ArcaneSpellFailure(oCaster, nCastingClass, nSpellLevel, nMetamagic, sComponent) + || SilenceDeafnessFailure(oCaster, nSpellLevel, nMetamagic, sComponent)) + return FALSE; + + return TRUE; + } + return TRUE; +} + +int MaterialComponents(object oCaster, int nSpellID, int nCastingClass, object oSpellCastItem) +{ + int nSwitch = GetPRCSwitch(PRC_MATERIAL_COMPONENTS); + + if(!nSwitch) + return TRUE; + + // exceptions + if(GetHasFeat(FEAT_IGNORE_MATERIALS, oCaster) //caster has ignore material components feat + || GetIsDM(oCaster) || GetIsDMPossessed(oCaster) //caster is DM + || oSpellCastItem != OBJECT_INVALID //spell was cast from an item + || nCastingClass == CLASS_TYPE_RUNESCARRED || GetLocalInt(oCaster, "SpellIsSLA"))//spell is a spell-like ability + { + return TRUE; + } + + // Components and Names + string sComp1 = Get2DACache("prc_spells", "Component1", nSpellID); + string sCompName1 = Get2DACache("prc_spells", "CompName1", nSpellID); + string sComp2 = Get2DACache("prc_spells", "Component2", nSpellID); + string sCompName2 = Get2DACache("prc_spells", "CompName2", nSpellID); + string sComp3 = Get2DACache("prc_spells", "Component3", nSpellID); + string sCompName3 = Get2DACache("prc_spells", "CompName3", nSpellID); + string sComp4 = Get2DACache("prc_spells", "Component4", nSpellID); + string sCompName4 = Get2DACache("prc_spells", "CompName4", nSpellID); + int nGold = StringToInt(Get2DACache("prc_spells", "GP", nSpellID)); + + // These are set to false if the spell has a component + int nHasComp1 = sComp1 == "" ? TRUE: FALSE; + int nHasComp2 = sComp2 == "" ? TRUE: FALSE; + int nHasComp3 = sComp3 == "" ? TRUE: FALSE; + int nHasComp4 = sComp4 == "" ? TRUE: FALSE; + + // The spell doesn't require any material components + if(nHasComp1 && nHasComp2 && nHasComp3 && nHasComp4 && !nGold) + return TRUE; + + // Set the return value to false + int nReturn = FALSE; + + // Set test variables + int nComponents = TRUE; + int nCost = TRUE; + + // Component Objects to destroy + object oComp1, oComp2, oComp3, oComp4; + + string sSpell = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellID))); + + if(nSwitch == 1 || nSwitch == 3) + { + nComponents = FALSE; + + // Check if caster has spell component pouch + object oPouch = GetItemPossessedBy(oCaster, "prc_spellpouch"); + + if((GetHasFeat(FEAT_ESCHEW_MATERIALS, oCaster) || GetIsObjectValid(oPouch)) + && nGold < 1) + { + nComponents = TRUE; + } + else + { + string sMes = "Material component missing: "; + + // Look for items in players inventory + if(!nHasComp1) + { + oComp1 = GetItemPossessedBy(oCaster, sComp1); + if(GetIsObjectValid(oComp1)) + nHasComp1 = TRUE; + else + FloatingTextStringOnCreature(sMes + sCompName1, oCaster, FALSE); + } + + if(!nHasComp2) + { + oComp2 = GetItemPossessedBy(oCaster, sComp2); + if(GetIsObjectValid(oComp2)) + nHasComp2 = TRUE; + else + FloatingTextStringOnCreature(sMes + sCompName2, oCaster, FALSE); + } + + if(!nHasComp3) + { + oComp3 = GetItemPossessedBy(oCaster, sComp3); + if(GetIsObjectValid(oComp3)) + nHasComp3 = TRUE; + else + FloatingTextStringOnCreature(sMes + sCompName3, oCaster, FALSE); + } + + if(!nHasComp4) + { + oComp4 = GetItemPossessedBy(oCaster, sComp4); + if(GetIsObjectValid(oComp4)) + nHasComp4 = TRUE; + else + FloatingTextStringOnCreature(sMes + sCompName4, oCaster, FALSE); + } + } + + if(nHasComp1 && nHasComp2 && nHasComp3 && nHasComp4) + nComponents = TRUE; + else + FloatingTextStringOnCreature("You do not have the appropriate material components to cast " + sSpell, oCaster, FALSE); + } + if(nSwitch == 2 || nSwitch == 3) + { + nCost = FALSE; + + // Now check to see if they have enough gold + if(GetGold(oCaster) >= nGold) + nCost = TRUE; + else + FloatingTextStringOnCreature("You do not have enough gold to cast " + sSpell, oCaster, FALSE); + } + + // Checked for the spell components, now the final test. + if(nComponents && nCost) + { + // We've got all the components + nReturn = TRUE; + + if(nSwitch == 1 || nSwitch == 3) + { + int nStack = 0; + + // Component 1 + nStack = GetNumStackedItems(oComp1); + + if(nStack > 1) + DelayCommand(0.6, SetItemStackSize (oComp1, --nStack)); + else + DelayCommand(0.6, DestroyObject(oComp1)); + + // Component 2 + nStack = GetNumStackedItems(oComp2); + + if(nStack > 1) + DelayCommand(0.6, SetItemStackSize (oComp2, --nStack)); + else + DelayCommand(0.6, DestroyObject(oComp2)); + + // Component 3 + nStack = GetNumStackedItems(oComp3); + + if(nStack > 1) + DelayCommand(0.6, SetItemStackSize (oComp3, --nStack)); + else + DelayCommand(0.6, DestroyObject(oComp3)); + + // Component 4 + nStack = GetNumStackedItems(oComp4); + + if(nStack > 1) + DelayCommand(0.6, SetItemStackSize (oComp4, --nStack)); + else + DelayCommand(0.6, DestroyObject(oComp4)); + } + if(nSwitch == 2 || nSwitch == 3) + { + TakeGoldFromCreature(nGold, oCaster, TRUE); + } + } + + // return our value + return nReturn; +} + +int SpellRestrictClass(int nCastingClass, int nSwitch) +{ + if(nSwitch == 3) + return TRUE; + if(nSwitch == 1) + return FALSE; + + //else nSwitch == 2 + if(nCastingClass == CLASS_TYPE_CLERIC + || nCastingClass == CLASS_TYPE_FAVOURED_SOUL + || nCastingClass == CLASS_TYPE_OCULAR + || nCastingClass == CLASS_TYPE_SHAMAN + || nCastingClass == CLASS_TYPE_HEALER + || nCastingClass == CLASS_TYPE_TEMPLAR) + return TRUE; + + return FALSE; +} + +int SpellAlignmentRestrictions(object oCaster, int nSpellID, int nCastingClass) +{ + int nSwitch = GetPRCSwitch(PRC_SPELL_ALIGNMENT_RESTRICT); + + if(!nSwitch) + return TRUE; + + int nShift = GetPRCSwitch(PRC_SPELL_ALIGNMENT_SHIFT); + + int nAlignGE = GetGoodEvilValue(oCaster); + int nAlignLC = GetLawChaosValue(oCaster); + int nAdjust; + int nDescriptor = GetLocalInt(oCaster, PRC_DESCRIPTOR); + if(!nDescriptor) + nDescriptor = GetDescriptorFlags(nSpellID); + + if(nDescriptor & DESCRIPTOR_EVIL) + { + if(nAlignGE > 69 && SpellRestrictClass(nCastingClass, nSwitch)) + { + FloatingTextStringOnCreature("Your alignment prohibits casting spells with this descriptor!", oCaster, FALSE); + return FALSE; + } + else if (nShift) + { + nAdjust = FloatToInt(sqrt(IntToFloat(nAlignGE)) / 2); + if(nAdjust) AdjustAlignment(oCaster, ALIGNMENT_EVIL, nAdjust, FALSE); + } + } + if(nDescriptor & DESCRIPTOR_GOOD) + { + if(nAlignGE < 31 && SpellRestrictClass(nCastingClass, nSwitch)) + { + FloatingTextStringOnCreature("Your alignment prohibits casting spells with this descriptor!", oCaster, FALSE); + return FALSE; + } + else if (nShift) + { + nAdjust = FloatToInt(sqrt(IntToFloat(100 - nAlignGE)) / 2); + if(nAdjust) AdjustAlignment(oCaster, ALIGNMENT_GOOD, nAdjust, FALSE); + } + } + if(nDescriptor & DESCRIPTOR_LAWFUL) + { + if(nAlignLC < 31 && SpellRestrictClass(nCastingClass, nSwitch)) + { + FloatingTextStringOnCreature("Your alignment prohibits casting spells with this descriptor!", oCaster, FALSE); + return FALSE; + } + else if (nShift) + { + nAdjust = FloatToInt(sqrt(IntToFloat(100 - nAlignLC)) / 2); + if(nAdjust) AdjustAlignment(oCaster, ALIGNMENT_LAWFUL, nAdjust, FALSE); + } + } + if(nDescriptor & DESCRIPTOR_CHAOTIC) + { + if(nAlignLC > 69 && SpellRestrictClass(nCastingClass, nSwitch)) + { + FloatingTextStringOnCreature("Your alignment prohibits casting spells with this descriptor!", oCaster, FALSE); + return FALSE; + } + else if (nShift) + { + nAdjust = FloatToInt(sqrt(IntToFloat(nAlignLC)) / 2); + if(nAdjust) AdjustAlignment(oCaster, ALIGNMENT_CHAOTIC, nAdjust, FALSE); + } + } + return TRUE; +} + +int RedWizRestrictedSchool(object oCaster, int nSchool, int nCastingClass, object oSpellCastItem) +{ + // No need for wasting CPU on non-Red Wizards + if(GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster)) + { + //can’t cast prohibited spells from scrolls or fire them from wands + if(GetIsObjectValid(oSpellCastItem)) + { + int nType = GetBaseItemType(oSpellCastItem); + if(nType != BASE_ITEM_MAGICWAND + && nType != BASE_ITEM_ENCHANTED_WAND + && nType != BASE_ITEM_SCROLL + && nType != BASE_ITEM_SPELLSCROLL + && nType != BASE_ITEM_ENCHANTED_SCROLL) + return TRUE; + } + + // Determine forbidden schools + int iRWRes; + switch(nSchool) + { + case SPELL_SCHOOL_ABJURATION: iRWRes = FEAT_RW_RES_ABJ; break; + case SPELL_SCHOOL_CONJURATION: iRWRes = FEAT_RW_RES_CON; break; + case SPELL_SCHOOL_DIVINATION: iRWRes = FEAT_RW_RES_DIV; break; + case SPELL_SCHOOL_ENCHANTMENT: iRWRes = FEAT_RW_RES_ENC; break; + case SPELL_SCHOOL_EVOCATION: iRWRes = FEAT_RW_RES_EVO; break; + case SPELL_SCHOOL_ILLUSION: iRWRes = FEAT_RW_RES_ILL; break; + case SPELL_SCHOOL_NECROMANCY: iRWRes = FEAT_RW_RES_NEC; break; + case SPELL_SCHOOL_TRANSMUTATION: iRWRes = FEAT_RW_RES_TRS; break; + } + + // Compare the spell's school versus the restricted schools + if(iRWRes && GetHasFeat(iRWRes, oCaster)) + { + FloatingTextStrRefOnCreature(16822359, oCaster, FALSE); // "You cannot cast spells of your prohibited schools. Spell terminated." + return FALSE; + } + // Other arcane casters cannot benefit from red wizard bonuses + if(GetIsArcaneClass(nCastingClass) && nCastingClass != CLASS_TYPE_WIZARD) + { + FloatingTextStringOnCreature("You have attempted to illegaly merge another arcane caster with a Red Wizard. All spellcasting will now fail.", oCaster, FALSE); + return FALSE; + } + } + + return TRUE; +} + +int PnPSpellSchools(object oCaster, int nCastingClass, int nSchool, object oSpellCastItem) +{ + if(GetPRCSwitch(PRC_PNP_SPELL_SCHOOLS) + && nCastingClass == CLASS_TYPE_WIZARD) + { + //can’t cast prohibited spells from scrolls or fire them from wands + if(GetIsObjectValid(oSpellCastItem)) + { + int nType = GetBaseItemType(oSpellCastItem); + if(nType != BASE_ITEM_MAGICWAND + && nType != BASE_ITEM_ENCHANTED_WAND + && nType != BASE_ITEM_SCROLL + && nType != BASE_ITEM_SPELLSCROLL + && nType != BASE_ITEM_ENCHANTED_SCROLL) + return TRUE; + } + + int nFeat; + switch(nSchool) + { + case SPELL_SCHOOL_ABJURATION: nFeat = 2265; break; + case SPELL_SCHOOL_CONJURATION: nFeat = 2266; break; + case SPELL_SCHOOL_DIVINATION: nFeat = 2267; break; + case SPELL_SCHOOL_ENCHANTMENT: nFeat = 2268; break; + case SPELL_SCHOOL_EVOCATION: nFeat = 2269; break; + case SPELL_SCHOOL_ILLUSION: nFeat = 2270; break; + case SPELL_SCHOOL_NECROMANCY: nFeat = 2271; break; + case SPELL_SCHOOL_TRANSMUTATION: nFeat = 2272; break; + default: nFeat = 0; + } + if(nFeat && GetHasFeat(nFeat, oCaster)) + { + FloatingTextStringOnCreature("You cannot cast spells of an opposition school.", oCaster, FALSE); + return FALSE; + } + } + + return TRUE; +} + +int ShifterCasting(object oCaster, object oSpellCastItem, int nSpellLevel, int nMetamagic, string sComponent) +{ + // The variable tells that the new form is unable to cast spells (very inaccurate, determined by racial type) + // with somatic or vocal components and is lacking Natural Spell feat + if(GetLocalInt(oCaster, "PRC_Shifting_RestrictSpells")) + { + if(GetIsObjectValid(oSpellCastItem)) + { + // Potion drinking is not restricted + if(GetBaseItemType(oSpellCastItem) == BASE_ITEM_ENCHANTED_POTION + || GetBaseItemType(oSpellCastItem) == BASE_ITEM_POTIONS) + return TRUE; + + //OnHit properties on equipped items not restricted + int nSlot; + for(nSlot = 0; nSlot= 13) + { + nMax = 10; + nVal = 2; + } + for(i=1; i<=nMax; i++) + { + SetLocalInt(oItem, "X2_L_CHANNELTRIGGER" + IntToString(i) , nSID); + SetLocalInt(oItem, "X2_L_CHANNELTRIGGER_L" + IntToString(i), nCasterLevel); + SetLocalInt(oItem, "X2_L_CHANNELTRIGGER_M" + IntToString(i), nMetamagic); + SetLocalInt(oItem, "X2_L_CHANNELTRIGGER_D" + IntToString(i), PRCGetSaveDC(oTarget, oCaster)); + } + SetLocalInt(oItem, "X2_L_NUMCHANNELTRIGGERS", nMax); + //mark it as discharging + SetLocalInt(oItem, "DuskbladeChannelDischarge", nVal); + DelayCommand(fDelay, DuskbladeCleanUp(oItem, nMax)); + + itemproperty ipTest = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1); + IPSafeAddItemProperty(oItem ,ipTest, fDelay); + + //make attack + ClearAllActions(); + effect eNone; + if (nClass >= 13) PerformAttackRound(oTarget, oCaster, eNone, 0.0, 0, 0, 0, FALSE, "Arcane Channelling Hit", "Arcane Channelling Miss"); + else if (nClass >= 13) PerformAttack(oTarget, oCaster, eNone, 0.0, 0, 0, 0, "Arcane Channelling Hit", "Arcane Channelling Miss"); + // Target is valid and we know it's an enemy and we're in combat + DelayCommand(0.25, AssignCommand(oCaster, ActionAttack(oTarget))); + FloatingTextStringOnCreature("Duskblade Channeling Deactivated", oCaster, FALSE); + DeleteLocalInt(oCaster, "DuskbladeChannelActive"); + return FALSE; + } + } + + return TRUE; +} + +//PnP familiar - deliver touch spell +int DeliverTouchSpell(object oCaster, object oTarget, int nSpellID, int nCasterLevel, int nSaveDC, int nMetamagic, object oSpellCastItem) +{ + if(GetPRCSwitch(PRC_PNP_FAMILIARS)) + { + // Don't channel from objects + if(oSpellCastItem != OBJECT_INVALID) + return TRUE; + + if(GetAssociateTypeNPC(oTarget) == ASSOCIATE_TYPE_FAMILIAR && GetMasterNPC(oTarget) == oCaster) + { + if(GetHitDice(oTarget) > 2) + { + if(!GetLocalInt(oCaster, "PRC_SPELL_HOLD") //holding the charge doesnt work + && (Get2DACache("spells", "Range", nSpellID) == "T")) //only touch spells + { + //find the item + object oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTarget); + if(!GetIsObjectValid(oItem)) oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTarget); + if(!GetIsObjectValid(oItem)) oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTarget); + if(GetIsObjectValid(oItem) + && !GetLocalInt(oItem, "X2_L_NUMCHANNELTRIGGERS")) + { + //valid spell, store + //very similar to duskblade chanelling + effect eVisual = EffectVisualEffect(VFX_IMP_BREACH); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oTarget); + //NOTE: I add +1 to the SpellId to spell 0 can be used to trap failure + int nSID = nSpellID + 1; + + SetLocalInt(oItem, "X2_L_CHANNELTRIGGER" , nSID); + SetLocalInt(oItem, "X2_L_CHANNELTRIGGER_L", nCasterLevel); + SetLocalInt(oItem, "X2_L_CHANNELTRIGGER_M", nMetamagic); + SetLocalInt(oItem, "X2_L_CHANNELTRIGGER_D", nSaveDC); + SetLocalInt(oItem, "X2_L_NUMCHANNELTRIGGERS", 1); + DelayCommand(60.0, DuskbladeCleanUp(oItem, 1)); + + itemproperty ipTest = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1); + IPSafeAddItemProperty(oItem, ipTest, 60.0); + + return FALSE;//don't cast + } + } + } + } + } + + return TRUE; +} + +void SpellSharing(object oCaster, object oTarget, int nSpellID, int nCasterLevel, int nSaveDC, int nMetamagic, object oSpellCastItem) +{ + if((Get2DACache("spells", "Range", nSpellID) == "P" || oTarget == oCaster) // Either of these is legal + && (Get2DACache("prc_spells", "NoShare", nSpellID) != "1") + && !GetLocalInt(oCaster, "PRC_SPELL_HOLD") //holding the charge doesnt work + && !GetLocalInt(oCaster, "SpellIsSLA") // no spell-like abilities + && !GetIsObjectValid(oSpellCastItem)) // no item spells + { + int bAll = GetPRCSwitch(PRC_ENABLE_SPELL_SHARING); //enables spell sharing for all compaions (bioware and PnP) + int bFam = GetPRCSwitch(PRC_PNP_FAMILIARS); //enables spell sharing only for PnP familiars + int bComp = GetPRCSwitch(PRC_PNP_ANIMAL_COMPANIONS); //enables spell sharing only for PnP animal companions + int bBond = GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster); + + location lCaster = GetLocation(oCaster); + + //RADIUS_SIZE_MEDIUM = 10 feet - the source book says it's 5, but that will make it very difficult to use in NWN + object oComp = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, lCaster, TRUE, OBJECT_TYPE_CREATURE); + while(GetIsObjectValid(oComp)) + { + if(GetMasterNPC(oComp) == oCaster) + { + int nType = GetAssociateTypeNPC(oComp); + + if((nType == ASSOCIATE_TYPE_FAMILIAR && (bAll || bFam || bBond)) + || (nType == ASSOCIATE_TYPE_ANIMALCOMPANION && (bAll || bComp)) + || nType == ASSOCIATE_TYPE_CELESTIALCOMPANION + || oComp == GetLocalObject(oCaster, "oX3PaladinMount")) + { + AssignCommand(oComp, ClearAllActions()); + AssignCommand(oComp, ActionCastSpell(nSpellID, nCasterLevel, 0, nSaveDC, nMetamagic, CLASS_TYPE_INVALID, FALSE, TRUE, oComp)); + } + } + oComp = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, lCaster, TRUE, OBJECT_TYPE_CREATURE); + } + } +} + +void DraconicFeatsOnSpell(object oCaster, object oTarget, object oSpellCastItem, int nSpellLevel, int nCastingClass) +{ + //ensure the spell is arcane + if(!GetIsArcaneClass(nCastingClass, oCaster)) + return; + + ///////Draconic Vigor//// + if(GetHasFeat(FEAT_DRACONIC_VIGOR, oCaster)) + { + effect eHeal = EffectHeal(nSpellLevel); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oCaster); + } + + ///////Draconic Armor//// + if(GetHasFeat(FEAT_DRACONIC_ARMOR, oCaster)) + { + effect eDamRed = EffectDamageReduction(nSpellLevel, DAMAGE_POWER_PLUS_ONE); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDamRed, oCaster, 6.0f); + } + + ///////Draconic Persuasion//// + if(GetHasFeat(FEAT_DRACONIC_PERSUADE, oCaster)) + { + int nBonus = FloatToInt(1.5f * IntToFloat(nSpellLevel)); + effect eCha = EffectSkillIncrease(SKILL_BLUFF, nBonus); + effect eCha2 = EffectSkillIncrease(SKILL_PERFORM, nBonus); + effect eCha3 = EffectSkillIncrease(SKILL_INTIMIDATE, nBonus); + effect eLink = EffectLinkEffects(eCha, eCha2); + eLink = EffectLinkEffects(eLink, eCha3); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oCaster, 6.0f); + } + + ///////Draconic Presence//// + if(GetHasFeat(FEAT_DRACONIC_PRESENCE, oCaster)) + { + //set up checks + object oScare; + int bCreaturesLeft = TRUE; + int nNextCreature = 1; + + //set up fear effects + effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + + effect eLink = EffectLinkEffects(EffectShaken(), eDur); + + int nDC = 10 + nSpellLevel + GetAbilityModifier(ABILITY_CHARISMA, oCaster); + int nDuration = 6 * nSpellLevel; + + //cycle through creatures within the AoE + while(bCreaturesLeft) + { + oScare = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, oCaster, nNextCreature, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY); + + if(oScare == OBJECT_INVALID) + bCreaturesLeft = FALSE; + + if(oScare != oCaster && GetDistanceToObject(oScare) < FeetToMeters(15.0)) + { + //dragons are immune, so make sure it's not a dragon + if(MyPRCGetRacialType(oScare)!= RACIAL_TYPE_DRAGON) + { + //Fire cast spell at event for the specified target + SignalEvent(oScare, EventSpellCastAt(oCaster, SPELLABILITY_AURA_FEAR)); + //Make a saving throw check + if(!PRCMySavingThrow(SAVING_THROW_WILL, oScare, nDC, SAVING_THROW_TYPE_FEAR) && !GetIsImmune(oScare, IMMUNITY_TYPE_FEAR) && !GetIsImmune(oScare, IMMUNITY_TYPE_MIND_SPELLS)) + { + //Apply the VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oScare, RoundsToSeconds(nDuration)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oScare); + }//end will save processing + } //end dragon check + nNextCreature++; + }//end target check + //if no more creatures within range, end it + else + bCreaturesLeft = FALSE; + }//end while + } + + ///////Draconic Claw//// + if(GetHasFeat(FEAT_DRACONIC_CLAW, oCaster)) + { + // Clawswipes only work on powers manifested by the Diamond Dragon, not by items he uses. + if(oSpellCastItem != OBJECT_INVALID) + { + FloatingTextStringOnCreature("You do not gain clawswipes from Items.", oCaster, FALSE); + return; + } + + //get the proper sized claw + string sResRef = "prc_claw_1d6m_"; + sResRef += GetAffixForSize(PRCGetCreatureSize(oCaster)); + object oClaw = GetObjectByTag(sResRef); + effect eInvalid; + + if(TakeSwiftAction(oCaster)) + { + //grab the closest enemy to swipe at + oTarget = GetNearestCreature(CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, oCaster, 1, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY); + if(oTarget != oCaster && GetDistanceToObject(oTarget) < FeetToMeters(15.0)) + { + PerformAttack(oTarget, oCaster, eInvalid, 0.0, 0, 0, DAMAGE_TYPE_SLASHING, "*Clawswipe Hit*", "*Clawswipe Missed*", FALSE, oClaw); + } + } + } +} + +void DazzlingIllusion(object oCaster, int nSchool) +{ + // No need for wasting CPU on non-Dazzles + if(GetHasFeat(FEAT_DAZZLING_ILLUSION, oCaster)) + { + if(nSchool == SPELL_SCHOOL_ILLUSION) + { + effect eLink = EffectLinkEffects(EffectDazzle(), EffectVisualEffect(VFX_IMP_BLINDDEAD_DN_CYAN)); + location lTarget = GetLocation(oCaster); + object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), lTarget, TRUE, OBJECT_TYPE_CREATURE); + //Cycle through the targets within the spell shape until an invalid object is captured. + while(GetIsObjectValid(oTarget)) + { + if(!GetIsFriend(oTarget, oCaster) && !PRCGetHasEffect(EFFECT_TYPE_BLINDNESS, oTarget)) + { + DelayCommand(0.0, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0)); + } + //Select the next target within the spell shape. + oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), lTarget, TRUE, OBJECT_TYPE_CREATURE); + } + } + } +} + +void EnergyAbjuration(object oCaster, int nSchool, int nSpellLevel) +{ + // No need for wasting CPU on non-Abjures + if(GetHasFeat(FEAT_ENERGY_ABJURATION, oCaster)) + { + if(nSchool == SPELL_SCHOOL_ABJURATION) + { + int nAmount = (1 + nSpellLevel) * 5; + + int nDamageType = DAMAGE_TYPE_ACID | DAMAGE_TYPE_COLD | DAMAGE_TYPE_ELECTRICAL | DAMAGE_TYPE_FIRE | DAMAGE_TYPE_SONIC; + + effect eResist = EffectDamageResistance(nDamageType, nAmount, nAmount); + + effect eDur = EffectVisualEffect(VFX_DUR_PROTECTION_ELEMENTS); + effect eVfx = EffectVisualEffect(VFX_IMP_ELEMENTAL_PROTECTION); + effect eEnd = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + + effect eLink = EffectLinkEffects(eResist, eDur); + eLink = EffectLinkEffects(eLink, eEnd); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVfx, oCaster); + + + /* eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_FIRE, nAmount, nAmount)); + eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ACID, nAmount, nAmount)); + eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_SONIC, nAmount, nAmount)); + eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL, nAmount, nAmount)); + eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_PROTECTION_ELEMENTS)); + eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_IMP_ELEMENTAL_PROTECTION)); + eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE)); */ + + if (DEBUG) DoDebug("Energy Abjuration triggered! DR Amount: " + IntToString(nAmount)); + DelayCommand(0.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oCaster)); + } + } +} + +void InsightfulDivination(object oCaster, int nSchool, int nSpellLevel) +{ + if(GetHasFeat(FEAT_INSIGHTFUL_DIVINATION, oCaster)) + { + if(nSchool == SPELL_SCHOOL_DIVINATION) + { + int nAmount = 1 + nSpellLevel; + SetLocalInt(oCaster, "InsightfulDivination", nAmount); + } + } +} + +void TougheningTransmutation(object oCaster, int nSchool) +{ + if (DEBUG) DoDebug("Toughening Transmutation called"); + + if(GetHasFeat(FEAT_TOUGHENING_TRANSMUTATION, oCaster)) + { + if(nSchool == SPELL_SCHOOL_TRANSMUTATION) + { + effect eDR = EffectDamageReduction(5, DAMAGE_POWER_PLUS_ONE); + + if (DEBUG) DoDebug("School Detected: " + IntToString(nSchool)); + DelayCommand(0.0, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDR, oCaster, 7.0)); + } + } + else + { + if (DEBUG) DoDebug("You do not have the Toughening Transmutation feat."); + } +} + +void CloudyConjuration(object oCaster, int nSchool, object oSpellCastItem) +{ + if(GetHasFeat(FEAT_CLOUDY_CONJURATION, oCaster) && !GetIsObjectValid(oSpellCastItem)) // Doesn't work on spells cast from items. + { + if(nSchool == SPELL_SCHOOL_CONJURATION) + { + effect eAOE = EffectAreaOfEffect(VFX_MOB_CLOUDY_CONJURATION); + DelayCommand(0.0, ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eAOE, PRCGetSpellTargetLocation(), 6.0)); + } + } +} + +//ebonfowl: runs the reserve feat script +void OnePingOnly(object oCaster) +{ + //Only works if you have a reserve feat + if(GetLocalInt(oCaster, "ReserveFeatsRunning") == TRUE) + { + DelayCommand(1.0, ExecuteScript("prc_reservefeat", oCaster)); + } +} + +//ebonfowl: runs the damage backlash for Mystic Backlash +void MysticBacklash(object oCaster) +{ + int nDamage = GetLocalInt(oCaster, "DoMysticBacklash"); + effect eBacklash = EffectDamage(nDamage, DAMAGE_TYPE_MAGICAL); + eBacklash = SupernaturalEffect(eBacklash); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eBacklash, oCaster); +} + +//spellweave affects only one target, mark it here +void EldritchSpellweave(object oCaster, object oTarget, int nSpellLevel, int bSpellIsHostile) +{ + if(GetLocalInt(oCaster, "INV_SPELLWEAVE")) + { + //we need a valid target + if(!GetIsObjectValid(oTarget)) + return; + + //hostile spell + if(!GetIsEnemy(oTarget, oCaster)) + return; + + //and active blast essence + if(!GetLocalInt(oCaster, "BlastEssence") + || GetLocalInt(oCaster, "BlastEssence") == INVOKE_CORRUPTING_BLAST) + return; + + //final test: spell level >= essence level + if(nSpellLevel >= (GetLocalInt(oCaster, "EssenceData") & 0xF)) + { + //everything is OK, mark the target for eldritch spellweave + SetLocalObject(oCaster, "SPELLWEAVE_TARGET", oTarget); + DeleteLocalInt(oCaster, "INV_SPELLWEAVE"); + } + else + SendMessageToPC(oCaster, "Eldritch Spellweave: The level of this spell is too low to use with current blast essence."); + } +} + +//:: Returns True if oPC has a Secondary PrC that should prevent them from using +//:: the Bioware spellbook as a Sublime Chord +int CheckSecondaryPrC(object oPC = OBJECT_SELF) +{ + if(DEBUG) DoDebug("x2_inc_spellhook: CheckSecondaryPrC >>> Starting", oPC); + + int bBard = GetLevelByClass(CLASS_TYPE_BARD, oPC); + int bBeguiler = GetLevelByClass(CLASS_TYPE_BEGUILER, oPC); + int bDuskblade = GetLevelByClass(CLASS_TYPE_DUSKBLADE, oPC); + int bSorcerer = GetLevelByClass(CLASS_TYPE_SORCERER, oPC); + int bWarmage = GetLevelByClass(CLASS_TYPE_WARMAGE, oPC); + + int nRace = GetRacialType(oPC); + + if (bBard) + { + if(DEBUG) DoDebug("x2_inc_spellhook: CheckSecondaryPrC >>> Entering Bard", oPC); + if (GetHasFeat(FEAT_FEY_SPELLCASTING_GLOURA)) return TRUE; + if (GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_AOTS_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_ALCHEM_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_ALIENIST_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_ANIMA_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_BSINGER_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_CMANCER_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_DHEART_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_DSONG_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_GRAZZT_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_HARPERM_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_HATHRAN_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_HAVOC_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_JPM_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_MAESTER_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_MHARPER_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_SSWORD_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_TIAMAT_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_UNSEEN_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_BARD)) return TRUE; + if (GetHasFeat(FEAT_WWOC_SPELLCASTING_BARD)) return TRUE; + } + if (bBeguiler) + { + if(DEBUG) DoDebug("x2_inc_spellhook: CheckSecondaryPrC >>> Entering Beguiler", oPC); + if (GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_AOTS_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_ALCHEM_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_ALIENIST_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_ANIMA_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_BSINGER_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_CMANCER_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_DHEART_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_DSONG_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_GRAZZT_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_HARPERM_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_HATHRAN_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_HAVOC_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_JPM_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_MAESTER_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_MHARPER_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_SSWORD_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_TIAMAT_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_UNSEEN_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_BEGUILER)) return TRUE; + if (GetHasFeat(FEAT_WWOC_SPELLCASTING_BEGUILER)) return TRUE; + + + + + } + if (bDuskblade) + { + if(DEBUG) DoDebug("x2_inc_spellhook: CheckSecondaryPrC >>> Entering Dusblade", oPC); + if (GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_AOTS_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_ALCHEM_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_ANIMA_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_BSINGER_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_CMANCER_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_DHEART_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_DSONG_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_GRAZZT_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_HARPERM_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_HATHRAN_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_HAVOC_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_JPM_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_MAESTER_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_MHARPER_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_SSWORD_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_TIAMAT_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_TNECRO_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_UNSEEN_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_DUSKBLADE)) return TRUE; + if (GetHasFeat(FEAT_WWOC_SPELLCASTING_DUSKBLADE)) return TRUE; + + + } + if (bSorcerer) + { + if(DEBUG) DoDebug("x2_inc_spellhook: CheckSecondaryPrC >>> Entering Sorcerer", oPC); + if (GetHasFeat(FEAT_ABERRATION_SPELLCASTING_DRIDER)) return TRUE; + if (GetHasFeat(FEAT_MONSTROUS_SPELLCASTING_ARKAMOI)) return TRUE; + if (GetHasFeat(FEAT_MONSTROUS_SPELLCASTING_MARRUTACT)) return TRUE; + if (GetHasFeat(FEAT_MONSTROUS_SPELLCASTING_REDSPAWN_ARCANISS)) return TRUE; + if (GetHasFeat(FEAT_OUTSIDER_SPELLCASTING_RAKSHASA)) return TRUE; + if (GetHasFeat(FEAT_SHAPECHANGER_SPELLCASTING_ARANEA)) return TRUE; + if (GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_AOTS_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_ALCHEM_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_ALIENIST_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_ANIMA_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_BSINGER_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_BONDED_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_CMANCER_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_DHEART_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_DSONG_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_FMM_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_GRAZZT_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_HARPERM_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_HATHRAN_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_HAVOC_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_JPM_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_MAESTER_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_MHARPER_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_SSWORD_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_TIAMAT_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_TNECRO_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_UNSEEN_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_WAYFARER_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_WWOC_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_SORCERER)) return TRUE; + if (GetHasFeat(FEAT_WWOC_SPELLCASTING_SORCERER)) return TRUE; + } + if (bWarmage) + { + if(DEBUG) DoDebug("x2_inc_spellhook: CheckSecondaryPrC >>> Entering Warmage", oPC); + if (GetHasFeat(FEAT_AOTS_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_ALCHEM_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_ANIMA_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_ARCHMAGE_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_ARCTRICK_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_ASMODEUS_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_BSINGER_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_BLDMAGUS_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_BONDED_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_CMANCER_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_DHEART_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_DSONG_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_ENLIGHTENEDFIST_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_ELESAVANT_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_ETHEURGE_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_FMM_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_FROSTMAGE_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_FOCHLUCAN_LYRIST_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_GRAZZT_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_HARPERM_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_HATHRAN_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_HAVOC_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_JPM_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_JUDICATOR_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_MAESTER_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_MAGEKILLER_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_MHARPER_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_MYSTIC_THEURGE_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_NOCTUMANCER_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_OOZEMASTER_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_PALEMASTER_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_RAGEMAGE_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_SHADOWADEPT_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_SOULCASTER_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_SPELLDANCER_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_SSWORD_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_TIAMAT_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_ULTMAGUS_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_UNSEEN_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_WILDMAGE_SPELLCASTING_WARMAGE)) return TRUE; + if (GetHasFeat(FEAT_WWOC_SPELLCASTING_WARMAGE)) return TRUE; + } + return FALSE; +} + +int BardSorcPrCCheck(object oCaster, int nCastingClass, object oSpellCastItem) +{ + // If it's an item, get the hell out of here + if (GetIsObjectValid(oSpellCastItem)) + return TRUE; + + // Eldritch Spellblast was breaking otherwise + if (GetLocalInt(oCaster, "EldritchSpellBlast")) + { + if(DEBUG) DoDebug("x2_inc_spellhook >> EldritchSpellBlast Found"); + return TRUE; + } + + //check its a sorcerer spell + if(nCastingClass == CLASS_TYPE_SORCERER) + { + if(DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> nCastingClass is Sorcerer.", oCaster); + //no need to check further if new spellbooks are disabled + if(GetPRCSwitch(PRC_SORC_DISALLOW_NEWSPELLBOOK)) + { + if (DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> PRC_SORC_DISALLOW_NEWSPELLBOOK.", oCaster); + return TRUE; + } + //check they have sorcerer levels + if(!GetLevelByClass(CLASS_TYPE_SORCERER, oCaster)) + { + if(DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> Not a sorcerer.", oCaster); + return TRUE; + } + //check if they are casting via new spellbook + if(GetLocalInt(oCaster, "NSB_Class") != CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster)) + { + if(DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> UltMagus using new spellbook.", oCaster); + return FALSE; + } + //check if they are casting via new spellbook + if(GetLocalInt(oCaster, "NSB_Class") == CLASS_TYPE_SORCERER) + { + if(DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> Using new spellbook.", oCaster); + return TRUE; + } + if(GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster) > 0 && CheckSecondaryPrC(oCaster) == TRUE) + { + if (DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> Sublime Chord w/RHD found.", oCaster); + FloatingTextStringOnCreature("You must use the new spellbook on the class radial.", oCaster, FALSE); + return FALSE; + } + if (CheckSecondaryPrC(oCaster) == TRUE) + { + if (DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> Sorcerer w/RHD found.", oCaster); + FloatingTextStringOnCreature("You must use the new spellbook on the class radial.", oCaster, FALSE); + return FALSE; + } + //check they have arcane PrC or Draconic Arcane Grace/Breath + if(!(GetArcanePRCLevels(oCaster, nCastingClass) - GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster)) + && !(GetHasFeat(FEAT_DRACONIC_GRACE, oCaster) || GetHasFeat(FEAT_DRACONIC_BREATH, oCaster))) + { + if(DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> First Sublime Chord check.", oCaster); + return TRUE; + } + + //check they have sorcerer in first arcane slot + //if(GetPrimaryArcaneClass() != CLASS_TYPE_SORCERER) + if(GetPrCAdjustedCasterLevelByType(TYPE_ARCANE, oCaster, TRUE) != GetPrCAdjustedCasterLevelByType(CLASS_TYPE_SORCERER, oCaster, TRUE)) + { + if(DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> GetPrCAdjustedCasterLevelByType.", oCaster); + return TRUE; + } + //at this point, they must be using the bioware spellbook + //from a class that adds to bard + FloatingTextStringOnCreature("You must use the new spellbook on the class radial.", oCaster, FALSE); + return FALSE; + } + + +/* //check its a sorc spell + if(nCastingClass == CLASS_TYPE_SORCERER) + { + //no need to check further if new spellbooks are disabled + if(GetPRCSwitch(PRC_SORC_DISALLOW_NEWSPELLBOOK)) + return TRUE; + //check they have sorc levels + if(!GetLevelByClass(CLASS_TYPE_SORCERER, oCaster)) + return TRUE; + //check if they are casting via new spellbook + if(GetLocalInt(oCaster, "NSB_Class") != CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster)) + return FALSE; + //check if they are casting via new spellbook + if(GetLocalInt(oCaster, "NSB_Class") == CLASS_TYPE_SORCERER) + return TRUE; + if(GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster) > 0 && CheckSecondaryPrC(oCaster) == TRUE) + { + if (DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> Sublime Chord w/RHD found.", oCaster); + FloatingTextStringOnCreature("You must use the new spellbook on the class radial.", oCaster, FALSE); + return FALSE; + } + if (CheckSecondaryPrC(oCaster) == TRUE) + { + if (DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> Sorcerer w/RHD found.", oCaster); + FloatingTextStringOnCreature("You must use the new spellbook on the class radial.", oCaster, FALSE); + return FALSE; + } + //check they have arcane PrC or Draconic Arcane Grace/Breath + if(!(GetArcanePRCLevels(oCaster, nCastingClass) - GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster)) + && !(GetHasFeat(FEAT_DRACONIC_GRACE, oCaster) || GetHasFeat(FEAT_DRACONIC_BREATH, oCaster))) + return TRUE; + + //check they have sorc in first arcane slot + //if(GetPrimaryArcaneClass() != CLASS_TYPE_SORCERER) + if(GetPrCAdjustedCasterLevelByType(TYPE_ARCANE, oCaster, TRUE) != GetPrCAdjustedCasterLevel(CLASS_TYPE_SORCERER, oCaster, TRUE)) + return TRUE; + + //at this point, they must be using the bioware spellbook + //from a class that adds to sorc + FloatingTextStringOnCreature("You must use the new spellbook on the class radial.", oCaster, FALSE); + return FALSE; + } */ + + //check its a bard spell + if(nCastingClass == CLASS_TYPE_BARD) + { + if(DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> nCastingClass is Bard.", oCaster); + //no need to check further if new spellbooks are disabled + if(GetPRCSwitch(PRC_BARD_DISALLOW_NEWSPELLBOOK)) + { + if (DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> PRC_BARD_DISALLOW_NEWSPELLBOOK.", oCaster); + return TRUE; + } + //check they have bard levels + if(!GetLevelByClass(CLASS_TYPE_BARD, oCaster)) + { + if(DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> Not a bard.", oCaster); + return TRUE; + } + //check if they are casting via new spellbook + if(GetLocalInt(oCaster, "NSB_Class") == CLASS_TYPE_BARD) + { + if(DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> Using new spellbook.", oCaster); + return TRUE; + } + if(GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster) > 0 && CheckSecondaryPrC(oCaster) == TRUE) + { + if (DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> Sublime Chord w/RHD found.", oCaster); + FloatingTextStringOnCreature("You must use the new spellbook on the class radial.", oCaster, FALSE); + return FALSE; + } + if (CheckSecondaryPrC(oCaster) == TRUE) + { + if (DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> Bard w/RHD found.", oCaster); + FloatingTextStringOnCreature("You must use the new spellbook on the class radial.", oCaster, FALSE); + return FALSE; + } + //check they have arcane PrC or Draconic Arcane Grace/Breath + if(!(GetArcanePRCLevels(oCaster, nCastingClass) - GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster)) + && !(GetHasFeat(FEAT_DRACONIC_GRACE, oCaster) || GetHasFeat(FEAT_DRACONIC_BREATH, oCaster))) + { + if(DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> First Sublime Chord check.", oCaster); + return TRUE; + } + + //check they have bard in first arcane slot + //if(GetPrimaryArcaneClass() != CLASS_TYPE_BARD) + if(GetPrCAdjustedCasterLevelByType(TYPE_ARCANE, oCaster, TRUE) != GetPrCAdjustedCasterLevelByType(CLASS_TYPE_BARD, oCaster, TRUE)) + { + if(DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> GetPrCAdjustedCasterLevelByType.", oCaster); + return TRUE; + } + //at this point, they must be using the bioware spellbook + //from a class that adds to bard + FloatingTextStringOnCreature("You must use the new spellbook on the class radial.", oCaster, FALSE); + return FALSE; + } + + if(DEBUG) DoDebug("x2_inc_spellhook: BardSorcPrCCheck >>> Returning TRUE.", oCaster); + return TRUE; +} + + +int KOTCHeavenDevotion(object oCaster, object oTarget, int nCasterAlignment, int nSpellSchool) +{ + if(GetLevelByClass(CLASS_TYPE_KNIGHT_CHALICE, oTarget) >= 5) + { + if(MyPRCGetRacialType(oCaster) == RACIAL_TYPE_OUTSIDER) + { + if(nCasterAlignment == ALIGNMENT_EVIL) + { + if(nSpellSchool == SPELL_SCHOOL_ENCHANTMENT) + { + return FALSE; + } + } + } + } + return TRUE; +} + +void CombatMedicHealingKicker(object oCaster, object oTarget, int nSpellID) +{ + int nLevel = GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster); + int nKicker = GetLocalInt(oCaster, "Heal_Kicker"); + + if(!nLevel || !nKicker || oTarget == oCaster) //Cannot use on self + return; + + if(!GetIsOfSubschool(nSpellID, SUBSCHOOL_HEALING)) //If the spell that was just cast isn't healing, stop now + return; + + //Three if/elseif statements. They check which of the healing kickers we use. + //If no Healing Kicker localints are set, this if block should be ignored. + int bRemoveUses; + if(nKicker == 1) + { + /* Sanctuary effect, with special DC and 1 round duration + * Script stuff taken from the spell by the same name + */ + int nDC = 15 + nLevel + GetAbilityModifier(ABILITY_WISDOM, oCaster); + effect eLink = EffectLinkEffects(EffectVisualEffect(VFX_DUR_SANCTUARY), EffectSanctuary(nDC)); + + //Apply the Sanctuary VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0); + + bRemoveUses = TRUE; + } + else if(nKicker == 2) + { + /* Reflex save increase, 1 round duration + */ + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HASTE), oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSavingThrowIncrease(SAVING_THROW_REFLEX, nLevel), oTarget, 6.0); + + bRemoveUses = TRUE; + } + else if(nKicker == 3) + { + /* Aid effect, with special HP bonus and 1 minute duration + * Script stuff taken from the spell by the same name + */ + int nBonus = 8 + nLevel; + effect eLink = EffectLinkEffects(EffectAttackIncrease(1), + EffectSavingThrowIncrease(SAVING_THROW_ALL, 1, SAVING_THROW_TYPE_FEAR)); + + //Apply the Aid VFX impact and effects + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HOLY_AID), oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 60.0); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectTemporaryHitpoints(nBonus), oTarget, 60.0); + + bRemoveUses = TRUE; + } + + if(bRemoveUses) + { + DeleteLocalInt(oCaster, "Heal_Kicker"); + DecrementRemainingFeatUses(oCaster, FEAT_HEALING_KICKER_1); + DecrementRemainingFeatUses(oCaster, FEAT_HEALING_KICKER_2); + DecrementRemainingFeatUses(oCaster, FEAT_HEALING_KICKER_3); + } +} + +// Performs the attack portion of the battlecast ability for the havoc mage +void Battlecast(object oCaster, object oTarget, object oSpellCastItem, int nSpellLevel) +{ + int nLevel = GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster); + + // If battlecast is turned off, exit + if(!nLevel || !GetLocalInt(oCaster, "HavocMageBattlecast")) + return; + + // Battlecast only works on spells cast by the Havoc Mage, not by items he uses. + if(oSpellCastItem != OBJECT_INVALID) + { + FloatingTextStringOnCreature("You do not gain Battlecast from Items.", oCaster, FALSE); + return; + } + + //if its not being cast on a hostile target or its at a location + //get the nearest living seen hostile insead + if(!spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, oCaster) + || !GetIsObjectValid(oTarget)) + { + oTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, oCaster, 1, + CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, + CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); + } + + effect eVis = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY); + + // Don't want to smack allies upside the head when casting a spell. + if(spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, oCaster) + && oTarget != oCaster + && GetDistanceToObject(oTarget) < FeetToMeters(15.0)) + { + // Make sure the levels are right for both the caster and the spells. + // Level 8 spells and under at level 5 + // Level 4 spells and under at level 3 + // Level 2 spells and under at level 1 + if((nLevel == 5 && 9 > nSpellLevel) + || (nLevel > 2 && 5 > nSpellLevel) + || (nLevel > 0 && 3 > nSpellLevel)) + PerformAttack(oTarget, oCaster, eVis, 0.0, 0, 0, 0, "*Battlecast Hit*", "*Battlecast Missed*"); + } +} + + +//Archmage and Heirophant SLA slection/storage setting +int ClassSLAStore(object oCaster, int nSpellID, int nCastingClass, int nSpellLevel) +{ + int nSLAID = GetLocalInt(oCaster, "PRC_SLA_Store"); + if(nSLAID) + { + FloatingTextStringOnCreature("SLA "+IntToString(nSLAID)+" stored", oCaster, FALSE); + int nMetamagic = GetMetaMagicFeat(); + + // Look up spell level if invalid (radial spells) + if(nSpellLevel < 0 || nSpellLevel >= 10) + { + string sInnateLevel = Get2DACache("spells", "Innate", nSpellID); + nSpellLevel = StringToInt(sInnateLevel); + } + + SetPersistantLocalInt(oCaster, "PRC_SLA_SpellID_"+IntToString(nSLAID), nSpellID+1); + SetPersistantLocalInt(oCaster, "PRC_SLA_Class_"+IntToString(nSLAID), nCastingClass); + SetPersistantLocalInt(oCaster, "PRC_SLA_Meta_"+IntToString(nSLAID), nMetamagic); + + if(nMetamagic & METAMAGIC_QUICKEN) nSpellLevel += 4; + if(nMetamagic & METAMAGIC_STILL) nSpellLevel += 1; + if(nMetamagic & METAMAGIC_SILENT) nSpellLevel += 1; + if(nMetamagic & METAMAGIC_MAXIMIZE) nSpellLevel += 3; + if(nMetamagic & METAMAGIC_EMPOWER) nSpellLevel += 2; + if(nMetamagic & METAMAGIC_EXTEND) nSpellLevel += 1; + + int nUses = 1; + switch(nSpellLevel) + { + default: + case 9: + case 8: nUses = 1; break; + case 7: + case 6: nUses = 2; break; + case 5: + case 4: nUses = 3; break; + case 3: + case 2: nUses = 4; break; + case 1: + case 0: nUses = 5; break; + } + SetPersistantLocalInt(oCaster, "PRC_SLA_Uses_"+IntToString(nSLAID), nUses); + DeleteLocalInt(oCaster, "PRC_SLA_Store"); + return FALSE; + } + return TRUE; +} + +int PnPSomaticComponents(object oCaster, object oSpellCastItem, string sComponent, int nMetamagic) +{ + if(GetPRCSwitch(PRC_PNP_SOMATIC_COMPOMENTS) || GetPRCSwitch(PRC_PNP_SOMATIC_ITEMS)) + { + object oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCaster); + int nHandFree; + if(!GetIsObjectValid(oItem) || GetBaseItemType(oItem) == BASE_ITEM_SMALLSHIELD || GetBaseItemType(oItem) == BASE_ITEM_MAGICWAND || GetBaseItemType(oItem) == BASE_ITEM_ENCHANTED_WAND) + nHandFree = TRUE; + oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCaster); + if(!GetIsObjectValid(oItem) || GetBaseItemType(oItem) == BASE_ITEM_SMALLSHIELD || GetBaseItemType(oItem) == BASE_ITEM_MAGICWAND || GetBaseItemType(oItem) == BASE_ITEM_ENCHANTED_WAND) + nHandFree = TRUE; + if(GetHasFeat(FEAT_SOMATIC_WEAPONRY, oCaster)) + nHandFree = TRUE; + if(nMetamagic & METAMAGIC_STILL) + nHandFree = TRUE; + + if(!nHandFree) + { + int nHandRequired; + oItem = oSpellCastItem; + //check item is not equiped + if(GetIsObjectValid(oItem) && GetPRCSwitch(PRC_PNP_SOMATIC_ITEMS)) + { + nHandRequired = TRUE; + int nSlot; + for(nSlot = 0; nSlot < NUM_INVENTORY_SLOTS; nSlot++) + { + if(GetItemInSlot(nSlot, oCaster) == oItem) + nHandRequired = FALSE; + } + } + //check its a real spell and that it requires a free hand + if(!GetIsObjectValid(oItem) && GetPRCSwitch(PRC_PNP_SOMATIC_COMPOMENTS)) + { + if(sComponent == "VS" + || sComponent == "SV" + || sComponent == "S") + nHandRequired = TRUE; + } + + if(nHandRequired) + { + FloatingTextStringOnCreature("You do not have any free hands.", oCaster, FALSE); + // Items were being consumed anyway. This should stop it. + AssignCommand(oItem, SetIsDestroyable(FALSE, FALSE, FALSE)); + AssignCommand(oItem, DelayCommand(0.3, SetIsDestroyable(TRUE, FALSE, FALSE))); + return FALSE; + } + } + } + + return TRUE; +} + +int PRCSpellEffects(object oCaster, object oTarget, int nSpellID, int nSpellLevel, int nCastingClass, int bSpellIsHostile, int nMetamagic) +{ + // Pnp Tensers Transformation + if(GetPRCSwitch(PRC_PNP_TENSERS_TRANSFORMATION)) + { + if(GetHasSpellEffect(SPELL_TENSERS_TRANSFORMATION, oCaster)) + return FALSE; + } + + // Gaseous Form check + if(GetHasSpellEffect(SPELL_GASEOUS_FORM, oCaster)) + { + if(nMetamagic & METAMAGIC_STILL && nMetamagic & METAMAGIC_SILENT) + { + } + else if(GetIsDivineClass(nCastingClass, oCaster) || GetIsArcaneClass(nCastingClass, oCaster)) + return FALSE; + } + + // Violet Rain check + if(GetHasSpellEffect(SPELL_EVIL_WEATHER_VIOLET_RAIN, oCaster)) + { + if(GetIsDivineClass(nCastingClass, oCaster)) + return FALSE; + } + + // PnP Timestop + if(GetPRCSwitch(PRC_TIMESTOP_NO_HOSTILE)) + { + if(GetHasSpellEffect(SPELL_TIME_STOP, oCaster) + || GetHasSpellEffect(4032, oCaster) //epic spell: Greater Timestop + || GetHasSpellEffect(14236, oCaster) //psionic power: Temporal Acceleration + || GetHasSpellEffect(18428, oCaster)) //Mystery MYST_SHADOW_TIME + { + if(!GetIsObjectValid(oTarget) + || oTarget != oCaster + || bSpellIsHostile) + { + return FALSE; + } + } + } + + // Spell Barriers + if(GetHasSpellEffect(SPELL_OTILUKES_RESILIENT_SPHERE, oTarget)) + { + if(GetDistanceBetween(oCaster, oTarget) > 1.524) + { + return FALSE; + } + } + if(GetHasSpellEffect(SPELL_PRISMATIC_SPHERE, oTarget)) + { + if(GetDistanceBetween(oCaster, oTarget) > 3.048) + { + return FALSE; + } + } + + // Null Psionics Field/Anti-Magic Field + if(GetHasSpellEffect(SPELL_ANTIMAGIC_FIELD, oCaster) + || GetHasSpellEffect(POWER_NULL_PSIONICS_FIELD, oCaster)) + { + return FALSE; + } + + // Scrying blocks all powers except for a few special case ones. + int nScry = GetLocalInt(oCaster, "ScrySpellId"); + if(nScry) + { + if(nScry == SPELL_GREATER_SCRYING || nScry == 18415) // MYST_FAR_SIGHT + { + if(nSpellID != SPELL_DETECT_EVIL + && nSpellID != SPELL_DETECT_GOOD + && nSpellID != SPELL_DETECT_LAW + && nSpellID != SPELL_DETECT_CHAOS) + return FALSE; + } + if(nScry == POWER_CLAIRTANGENT_HAND) + { + if(nSpellID != POWER_FARHAND) + return FALSE; + } + if(nScry == 18410) // MYST_EPHEMERAL_IMAGE + return TRUE; // Can cast anything through this one. + + // By default you can't cast anything while scrying + return FALSE; + } + + // Word of Peace + if(GetLocalInt(oCaster, "TrueWardOfPeace") && bSpellIsHostile) + { + return FALSE; + } + + // Dark Discorporation Check + if(GetLocalInt(oCaster, "DarkDiscorporation")) + { + return FALSE; + } + + // Ectoplasmic Shambler + if(GetLocalInt(oCaster, "PRC_IsInEctoplasmicShambler")) + { + if(!GetIsSkillSuccessful(oCaster, SKILL_CONCENTRATION, (15 + nSpellLevel))) + { + FloatingTextStrRefOnCreature(16824061, oCaster, FALSE); // "Ectoplasmic Shambler has disrupted your concentration." + return FALSE; + } + } + + // Jarring Song + if(GetHasSpellEffect(SPELL_VIRTUOSO_JARRING_SONG, oCaster)) + { + if(!GetIsSkillSuccessful(oCaster, SKILL_CONCENTRATION, (15 + nSpellLevel))) + { + FloatingTextStringOnCreature("Jarring Song has disrupted your concentration.", oCaster, FALSE); + return FALSE; + } + } + + //Aura of the Sun - shadow spells make check or fail + if(GetHasSpellEffect(SPELL_AURA_OF_THE_SUN)) + { + if(GetIsOfSubschool(nSpellID, SUBSCHOOL_SHADOW) || GetHasDescriptor(nSpellID, DESCRIPTOR_DARKNESS)) + { + int nDC = GetLocalInt(oCaster, "PRCAuraSunDC"); + int nCheck = d20(1) + PRCGetCasterLevel(oCaster); + + //caster level check + if(nCheck < nDC) return FALSE; + } + } + return TRUE; +} + +int Spellfire(object oCaster, object oTarget) +{ + if(GetHasFeat(FEAT_SPELLFIRE_WIELDER, oCaster)) + { + int nStored = GetPersistantLocalInt(oCaster, "SpellfireLevelStored"); + int nCON = GetAbilityScore(oCaster, ABILITY_CONSTITUTION); + int nTest = nStored > 4 * nCON ? 25 : nStored > 3 * nCON ? 20 : 0; + if(nTest) + { + if(!GetIsSkillSuccessful(oCaster, SKILL_CONCENTRATION, nTest)) + return FALSE; + } + } + if(GetLocalInt(oTarget, "SpellfireAbsorbFriendly") && GetIsFriend(oTarget, oCaster)) + { + if(CheckSpellfire(oCaster, oTarget, TRUE)) + { + PRCShowSpellResist(oCaster, oTarget, SPELL_RESIST_MANTLE); + return FALSE; + } + } + + return TRUE; +} + +int Wildstrike(object oCaster) +{ + // 50% chance + if(GetLocalInt(oCaster, "WildMageStrike") && d2() == 2) + { + AssignCommand(oCaster, ClearAllActions()); + AssignCommand(oCaster, ActionCastSpell(499)); + return FALSE; + } + + return TRUE; +} + +int CorruptOrSanctified(object oCaster, int nSpellID, int nCasterAlignment, int nSpellbookType) +{ + //Check for each Corrupt and Sanctified spell + int bCorruptOrSanctified = 0; + + if(nSpellID == SPELL_AYAILLAS_RADIANT_BURST + || nSpellID == SPELL_BRILLIANT_EMANATION + || nSpellID == SPELL_DIVINE_INSPIRATION + || nSpellID == SPELL_DIAMOND_SPRAY + || nSpellID == SPELL_DRAGON_CLOUD + || nSpellID == SPELL_EXALTED_FURY + || nSpellID == SPELL_HAMMER_OF_RIGHTEOUSNESS + || nSpellID == SPELL_PHIERANS_RESOLVE + || nSpellID == SPELL_PHOENIX_FIRE + || nSpellID == SPELL_RAIN_OF_EMBERS + || nSpellID == SPELL_SICKEN_EVIL + || nSpellID == SPELL_STORM_OF_SHARDS + || nSpellID == SPELL_SUNMANTLE + || nSpellID == SPELL_TWILIGHT_LUCK) + bCorruptOrSanctified = 1; + + else if(nSpellID == SPELL_ABSORB_STRENGTH + || nSpellID == SPELL_APOCALYPSE_FROM_THE_SKY + || nSpellID == SPELL_CLAWS_OF_THE_BEBILITH + || nSpellID == SPELL_DEATH_BY_THORNS + || nSpellID == SPELL_EVIL_WEATHER + || nSpellID == SPELL_FANGS_OF_THE_VAMPIRE_KING + || nSpellID == SPELL_LAHMS_FINGER_DARTS + || nSpellID == SPELL_POWER_LEECH + || nSpellID == SPELL_RAPTURE_OF_RUPTURE + || nSpellID == SPELL_RED_FESTER + || nSpellID == SPELL_ROTTING_CURSE_OF_URFESTRA + || nSpellID == SPELL_SEETHING_EYEBANE + || nSpellID == SPELL_TOUCH_OF_JUIBLEX) + bCorruptOrSanctified = 2; + + if(bCorruptOrSanctified) + { + // check if the caster is a spontaneous caster + if(nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS) + { + SendMessageToPC(oCaster, "Spontaneous casters cannot cast this spell!"); + return FALSE; + } + //check for immunity to ability damage - sorry undead buddies + if(GetIsImmune(oCaster, IMMUNITY_TYPE_ABILITY_DECREASE)) + { + if(nSpellID != SPELL_TWILIGHT_LUCK + && nSpellID != SPELL_DIAMOND_SPRAY) + { + SendMessageToPC(oCaster, "You must be able to take ability damage to cast this spell!"); + return FALSE; + } + } + //Check for alignment restrictions + if(bCorruptOrSanctified == 1 + && nCasterAlignment == ALIGNMENT_EVIL) + { + SendMessageToPC(oCaster, "You cannot cast Sanctified spells if you are evil."); + return FALSE; + } + if(bCorruptOrSanctified == 2 + && nCasterAlignment == ALIGNMENT_GOOD) + { + SendMessageToPC(oCaster, "You cannot cast Corrupt spells if you are good."); + return FALSE; + } + } + + return TRUE; +} + +int GrappleConc(object oCaster, int nSpellLevel) +{ + if(GetLocalInt(oCaster, "IsGrappled")) + { + return GetIsSkillSuccessful(oCaster, SKILL_CONCENTRATION, (20 + nSpellLevel)); + } + return TRUE; +} + +int X2UseMagicDeviceCheck(object oCaster) +{ + int nRet = ExecuteScriptAndReturnInt("x2_pc_umdcheck", oCaster); + return nRet; +} + +//------------------------------------------------------------------------------ +// GZ: This is a filter I added to prevent spells from firing their original spell +// script when they were cast on items and do not have special coding for that +// case. If you add spells that can be cast on items you need to put them into +// des_crft_spells.2da +//------------------------------------------------------------------------------ +int X2CastOnItemWasAllowed(object oItem) +{ + int bAllow = (Get2DACache(X2_CI_CRAFTING_SP_2DA,"CastOnItems",PRCGetSpellId()) == "1"); + if (!bAllow) + { + FloatingTextStrRefOnCreature(83453, OBJECT_SELF); // not cast spell on item + } + return bAllow; + +} + +//------------------------------------------------------------------------------ +// Execute a user overridden spell script. +//------------------------------------------------------------------------------ +int X2RunUserDefinedSpellScript() +{ + // See x2_inc_switches for details on this code + string sScript = GetModuleOverrideSpellscript(); + if (sScript != "") + { + ExecuteScript(sScript,OBJECT_SELF); + if (GetModuleOverrideSpellScriptFinished() == TRUE) + { + return FALSE; + } + } + return TRUE; +} + +//------------------------------------------------------------------------------ +// Set the user-specific spell script +//------------------------------------------------------------------------------ +void PRCSetUserSpecificSpellScript(string sScript) +{ + SetLocalString(OBJECT_SELF, "PRC_OVERRIDE_SPELLSCRIPT", sScript); +} + +//------------------------------------------------------------------------------ +// Get the user-specific spell script +//------------------------------------------------------------------------------ +string PRCGetUserSpecificSpellScript() +{ + return GetLocalString(OBJECT_SELF, "PRC_OVERRIDE_SPELLSCRIPT"); +} + +//------------------------------------------------------------------------------ +// Finish the spell, if necessary +//------------------------------------------------------------------------------ +void PRCSetUserSpecificSpellScriptFinished() +{ + SetLocalInt(OBJECT_SELF, "PRC_OVERRIDE_SPELLSCRIPT_DONE", TRUE); +} + +//------------------------------------------------------------------------------ +// Figure out if we should finish the spell. +//------------------------------------------------------------------------------ +int PRCGetUserSpecificSpellScriptFinished() +{ + int iRet = GetLocalInt(OBJECT_SELF, "PRC_OVERRIDE_SPELLSCRIPT_DONE"); + DeleteLocalInt(OBJECT_SELF, "PRC_OVERRIDE_SPELLSCRIPT_DONE"); + return iRet; +} + +//------------------------------------------------------------------------------ +// Run a user-specific spell script for classes that use spellhooking. +//------------------------------------------------------------------------------ +int PRCRunUserSpecificSpellScript() +{ + string sScript = PRCGetUserSpecificSpellScript(); + if (sScript != "") + { + ExecuteScript(sScript,OBJECT_SELF); + if (PRCGetUserSpecificSpellScriptFinished() == TRUE) + { + return FALSE; + } + } + return TRUE; +} + +//------------------------------------------------------------------------------ +// Created Brent Knowles, Georg Zoeller 2003-07-31 +// Returns TRUE (and charges the sequencer item) if the spell +// ... was cast on an item AND +// ... the item has the sequencer property +// ... the spell was non hostile +// ... the spell was not cast from an item +// in any other case, FALSE is returned an the normal spellscript will be run +//------------------------------------------------------------------------------ +int X2GetSpellCastOnSequencerItem(object oItem, object oCaster, int nSpellID, int nMetamagic, int nCasterLevel, int nSaveDC, int bSpellIsHostile, object oSpellCastItem) +{ + if(GetIsObjectValid(oSpellCastItem)) // spell cast from item? + { + // we allow scrolls + int nBt = GetBaseItemType(oSpellCastItem); + if(nBt !=BASE_ITEM_SPELLSCROLL && nBt != 105) + { + FloatingTextStrRefOnCreature(83373, oCaster); + return TRUE; // wasted! + } + } + + if(bSpellIsHostile) + { + int nMaxChanSpells = IPGetItemChannelingProperty(oItem); + + if(nMaxChanSpells < 1) + { + FloatingTextStrRefOnCreature(83885, oCaster); + return TRUE; // no hostile spells on sequencers, sorry ya munchkins :) + } + + int nNumberOfTriggers = GetLocalInt(oItem, "X2_L_NUMCHANNELTRIGGERS"); + // is there still space left on the sequencer? + if (nNumberOfTriggers < nMaxChanSpells) + { + // success visual and store spell-id on item. + effect eVisual = EffectVisualEffect(VFX_IMP_BREACH); + nNumberOfTriggers++; + //NOTE: I add +1 to the SpellId to spell 0 can be used to trap failure + int nSID = nSpellID+1; + SetLocalInt(oItem, "X2_L_CHANNELTRIGGER" +IntToString(nNumberOfTriggers), nSID); + SetLocalInt(oItem, "X2_L_CHANNELTRIGGER_L"+IntToString(nNumberOfTriggers), nCasterLevel); + SetLocalInt(oItem, "X2_L_CHANNELTRIGGER_M"+IntToString(nNumberOfTriggers), nMetamagic); + SetLocalInt(oItem, "X2_L_CHANNELTRIGGER_D"+IntToString(nNumberOfTriggers), nSaveDC); + SetLocalInt(oItem, "X2_L_NUMCHANNELTRIGGERS", nNumberOfTriggers); + //add an OnHit:DischargeSequencer property + itemproperty ipTest = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1); + IPSafeAddItemProperty(oItem ,ipTest, 99999999.9); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oCaster); + FloatingTextStrRefOnCreature(83884, oCaster); + } + else + FloatingTextStrRefOnCreature(83859, oCaster); + } + else + { + int nMaxSeqSpells = IPGetItemSequencerProperty(oItem); // get number of maximum spells that can be stored + + if(nMaxSeqSpells < 1) + { + return FALSE; + } + + int nNumberOfTriggers = GetLocalInt(oItem, "X2_L_NUMTRIGGERS"); + // is there still space left on the sequencer? + if (nNumberOfTriggers < nMaxSeqSpells) + { + // success visual and store spell-id on item. + effect eVisual = EffectVisualEffect(VFX_IMP_BREACH); + nNumberOfTriggers++; + //NOTE: I add +1 to the SpellId to spell 0 can be used to trap failure + int nSID = nSpellID+1; + SetLocalInt(oItem, "X2_L_SPELLTRIGGER" +IntToString(nNumberOfTriggers), nSID); + SetLocalInt(oItem, "X2_L_SPELLTRIGGER_L"+IntToString(nNumberOfTriggers), nCasterLevel); + SetLocalInt(oItem, "X2_L_SPELLTRIGGER_M"+IntToString(nNumberOfTriggers), nMetamagic); + SetLocalInt(oItem, "X2_L_SPELLTRIGGER_D"+IntToString(nNumberOfTriggers), nSaveDC); + SetLocalInt(oItem, "X2_L_NUMTRIGGERS", nNumberOfTriggers); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oCaster); + FloatingTextStrRefOnCreature(83884, oCaster); + } + else + FloatingTextStrRefOnCreature(83859, oCaster); + } + + return TRUE; // in any case, spell is used up from here, so do not fire regular spellscript +} + +//------------------------------------------------------------------------------ +// * This is our little concentration system for black blade of disaster +// * if the mage tries to cast any kind of spell, the blade is signaled an event to die +//------------------------------------------------------------------------------ +void X2BreakConcentrationSpells() +{ + //end Dragonsong Lyrist songs + DeleteLocalInt(OBJECT_SELF, "SpellConc"); + + if(GetPRCSwitch(PRC_PNP_BLACK_BLADE_OF_DISASTER)) + { + //this is also in summon HB + //but needed here to handle quickend spells + //Disintegrate is cast from the blade so doenst end the summon + object oAssoc = GetAssociate(ASSOCIATE_TYPE_SUMMONED); + if(GetIsObjectValid(oAssoc)) + { + if(GetTag(oAssoc) == "x2_s_bblade") // black blade of disaster + { + if(GetLocalInt(oAssoc, "X2_L_CREATURE_NEEDS_CONCENTRATION")) + { + SignalEvent(oAssoc, EventUserDefined(X2_EVENT_CONCENTRATION_BROKEN)); + } + } + } + } +} + +//------------------------------------------------------------------------------ +// being hit by any kind of negative effect affecting the caster's ability to concentrate +// will cause a break condition for concentration spells +//------------------------------------------------------------------------------ +int X2GetBreakConcentrationCondition(object oPlayer) +{ + effect e1 = GetFirstEffect(oPlayer); + int nType; + int bRet = FALSE; + while (GetIsEffectValid(e1) && !bRet) + { + nType = GetEffectType(e1); + + if (nType == EFFECT_TYPE_STUNNED || nType == EFFECT_TYPE_PARALYZE || + nType == EFFECT_TYPE_SLEEP || nType == EFFECT_TYPE_FRIGHTENED || + nType == EFFECT_TYPE_PETRIFY || nType == EFFECT_TYPE_CONFUSED || + nType == EFFECT_TYPE_DOMINATED || nType == EFFECT_TYPE_POLYMORPH) + { + bRet = TRUE; + } + e1 = GetNextEffect(oPlayer); + } + return bRet; +} + +void X2DoBreakConcentrationCheck() +{ + object oMaster = GetMaster(); + if (GetLocalInt(OBJECT_SELF,"X2_L_CREATURE_NEEDS_CONCENTRATION")) + { + if (GetIsObjectValid(oMaster)) + { + int nAction = GetCurrentAction(oMaster); + // master doing anything that requires attention and breaks concentration + if (nAction == ACTION_DISABLETRAP || nAction == ACTION_TAUNT || + nAction == ACTION_PICKPOCKET || nAction ==ACTION_ATTACKOBJECT || + nAction == ACTION_COUNTERSPELL || nAction == ACTION_FLAGTRAP || + nAction == ACTION_CASTSPELL || nAction == ACTION_ITEMCASTSPELL) + { + SignalEvent(OBJECT_SELF,EventUserDefined(X2_EVENT_CONCENTRATION_BROKEN)); + } + else if (X2GetBreakConcentrationCondition(oMaster)) + { + SignalEvent(OBJECT_SELF,EventUserDefined(X2_EVENT_CONCENTRATION_BROKEN)); + } + } + } +} + +//------------------------------------------------------------------------------ +// This function will return TRUE if the spell that is cast is a shape shifting +// spell. +//------------------------------------------------------------------------------ +int X3ShapeShiftSpell(object oTarget, int nSpellID) +{ + string sUp = GetStringUpperCase(Get2DACache("x3restrict", "SHAPESHIFT", nSpellID)); + if(sUp == "YES") + return TRUE; + return FALSE; +} + +void VoidCounterspellExploitCheck(object oCaster) +{ + if(GetCurrentAction(oCaster) == ACTION_COUNTERSPELL) + { + ClearAllActions(); + SendMessageToPC(oCaster,"Because of the infinite spell casting exploit, you cannot use counterspell in this manner."); + } +} + +int CounterspellExploitCheck(object oCaster) +{ + if(GetCurrentAction(oCaster) == ACTION_COUNTERSPELL) + { + ClearAllActions(); + SendMessageToPC(oCaster,"Because of the infinite spell casting exploit, you cannot use counterspell in this manner."); + return FALSE; + } + else + { + DelayCommand(0.1, VoidCounterspellExploitCheck(oCaster)); + DelayCommand(0.2, VoidCounterspellExploitCheck(oCaster)); + DelayCommand(0.3, VoidCounterspellExploitCheck(oCaster)); + DelayCommand(0.4, VoidCounterspellExploitCheck(oCaster)); + DelayCommand(0.5, VoidCounterspellExploitCheck(oCaster)); + DelayCommand(0.6, VoidCounterspellExploitCheck(oCaster)); + DelayCommand(0.7, VoidCounterspellExploitCheck(oCaster)); + DelayCommand(0.8, VoidCounterspellExploitCheck(oCaster)); + DelayCommand(0.9, VoidCounterspellExploitCheck(oCaster)); + DelayCommand(1.0, VoidCounterspellExploitCheck(oCaster)); + DelayCommand(2.0, VoidCounterspellExploitCheck(oCaster)); + DelayCommand(3.0, VoidCounterspellExploitCheck(oCaster)); + } + + return TRUE; +} + +int Blighter(object oCaster, int nCastingClass, object oSpellCastItem) +{ + // If it's an item, exit + if (GetIsObjectValid(oSpellCastItem)) + return TRUE; + + if (nCastingClass == CLASS_TYPE_DRUID && GetLevelByClass(CLASS_TYPE_BLIGHTER, oCaster) > 0) + { + SendMessageToPC(oCaster,"Blighters cannot cast druid spells."); + return FALSE; + } + + return TRUE; +} + +int BattleBlessing(object oCaster, int nCastingClass) +{ + if (nCastingClass != CLASS_TYPE_PALADIN && GetLocalInt(oCaster, "BattleBlessingActive")) + { + SendMessageToPC(oCaster,"You cannot cast non-Paladin spells with Battle Blessing active."); + return FALSE; + } + + return TRUE; +} + +int Spelldance(object oCaster, int nSpellLevel, int nCastingClass) +{ + //ensure the spell is arcane + if(!GetIsArcaneClass(nCastingClass, oCaster)) + return TRUE; + + if (DEBUG) FloatingTextStringOnCreature("Spelldance in Spellhook", oCaster, FALSE); + + int nDance = GetLocalInt(oCaster, "Spelldance"); + if (DEBUG) FloatingTextStringOnCreature("Spelldance value in Spellhook: "+IntToString(nDance), oCaster, FALSE); + if (nDance) + { + if(nDance & METAMAGIC_EXTEND) + nSpellLevel += 1; + if(nDance & METAMAGIC_EMPOWER) + nSpellLevel += 2; + if(nDance & METAMAGIC_MAXIMIZE) + nSpellLevel += 3; + + if (DEBUG) FloatingTextStringOnCreature("Spelldances in Spellhook #2", oCaster, FALSE); + + if(!GetIsSkillSuccessful(oCaster, SKILL_PERFORM, 10+nSpellLevel)) //Failed + { + FloatingTextStringOnCreature("Spelldance failed", oCaster, FALSE); + if (DEBUG) FloatingTextStringOnCreature("Spelldances in Spellhook #3", oCaster, FALSE); + return FALSE; + } + } + return TRUE; +} + +// Does the counterspelling for Warp Spell, +// and the storing of the spell for later use +int WarpSpell(object oCaster, int nSpellId) +{ + int nWarp = GetLocalInt(oCaster, "WarpSpell"); + // If Warp Spell isn't set, just keep going + if (!nWarp) return TRUE; + + object oShadow = GetLocalObject(oCaster, "WarpSpell"); // The one who cast Warp Spell + + DeleteLocalInt(oCaster, "WarpSpell"); + DeleteLocalObject(oCaster, "WarpSpell"); // Done regardless of success or failure + + int nLevel = PRCGetCasterLevel(oCaster); + if (d20() + nWarp > d20() + nLevel) // Won the caster level check + { + // Set a marker on the Shadowcaster + SetLocalInt(oShadow, "WarpSpellSuccess", TRUE); + FloatingTextStringOnCreature("You have successfully warped your opponent's "+GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellId))), oShadow, FALSE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SOUL_TRAP), oCaster); + return FALSE; + } + + FloatingTextStringOnCreature("Your warp spell has failed", oShadow, FALSE); + return TRUE; +} + +// Does the counterspelling for Innate Counterspell +// and the storing of the spell for later use +int InnateCounterspell(object oCaster, int nSpellId, int nSpellLevel) +{ + int nWarp = GetLocalInt(oCaster, "InnateCounterspell"); + // If Innate Counterspell isn't set, just keep going + if (!nWarp) return TRUE; + + object oShadow = GetLocalObject(oCaster, "InnateCounterspell"); // The one who cast Innate Counterspell + + DeleteLocalInt(oCaster, "InnateCounterspell"); + DeleteLocalObject(oCaster, "InnateCounterspell"); // Done regardless of success or failure + + int nLevel = PRCGetCasterLevel(oCaster); + if (GetIsSkillSuccessful(oCaster, SKILL_SPELLCRAFT, 15 + nSpellLevel)) // Identified the spell to counter + { + SetLocalInt(oShadow, "BurnSpellLevel", nSpellLevel); + if (BurnSpell(oShadow)) + { + DeleteLocalInt(oShadow, "BurnSpellLevel"); + // Set a marker on the Noctumancer at the right level + if (GetLevelByClass(CLASS_TYPE_NOCTUMANCER) >= 7) + { + int nStore = PRCMin(1, nSpellLevel/2); + SetLocalInt(oShadow, "InnateCounterSuccess", nStore); + FloatingTextStringOnCreature("You have one free mystery of "+IntToString(nStore)+" level", oShadow, FALSE); + } + if (GetLevelByClass(CLASS_TYPE_NOCTUMANCER) >= 10) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectSpellImmunity(nSpellId)), oShadow, 60.0); + + FloatingTextStringOnCreature("You have successfully counterspelled your opponent's "+GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellId))), oShadow, FALSE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SOUL_TRAP), oCaster); + return FALSE; + } + } + + FloatingTextStringOnCreature("Your innate counterspell has failed", oShadow, FALSE); + return TRUE; +} + +// Stores the spell for use with Echo Spell +void EchoSpell(object oCaster, int nSpellId) +{ + int nEcho = GetLocalInt(oCaster, "EchoSpell"); + // If Echo Spell isn't set, just skip + if (nEcho) + { + object oShadow = GetLocalObject(oCaster, "EchoSpell"); // The one who cast Echo Spell + SetLocalInt(oShadow, "EchoedSpell", nSpellId); + FloatingTextStringOnCreature("You have echoed " + GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellId))) + " and have one round to cast it", oShadow, FALSE); + DelayCommand(9.0, DeleteLocalInt(oShadow, "EchoedSpell")); + DeleteLocalInt(oCaster, "EchoSpell"); + DeleteLocalObject(oCaster, "EchoSpell"); + } +} + +// Flood of Shadow +int FloodShadow(object oCaster, int nSpellId) +{ + if (!GetLocalInt(oCaster, "FloodShadow") || GetLocalInt(oCaster, "ShadowEvoking")) + return TRUE; + + if (!GetIsSkillSuccessful(oCaster, SKILL_SPELLCRAFT, 15 + StringToInt(Get2DACache("spells", "Innate", nSpellId)))) // Skill check + { + if (GetIsPC(oCaster)) FloatingTextStringOnCreature("You have failed to overcome Flood of Shadow", oCaster, FALSE); + return FALSE; + } + + return TRUE; +} + +void MasterWand(object oCaster, object oSpellCastItem, int nSpellLevel) +{ + if (DEBUG) DoDebug("MasterWand - Entered"); + if (!GetHasFeat(FEAT_MASTER_WAND, oCaster)) return; // Does nothing without the feat, obviously + if (!GetLocalInt(oCaster, "MasterWand")) return; // Needs to be active as well + + if (DEBUG) DoDebug("MasterWand - Active"); + + int nType = GetBaseItemType(oSpellCastItem); + + if(nType == BASE_ITEM_MAGICWAND || nType == BASE_ITEM_ENCHANTED_WAND) // Has to be a wand, obv + { + if (DEBUG) DoDebug("MasterWand - Wand"); + SetLocalInt(oCaster, "BurnSpellLevel", nSpellLevel); + if (BurnSpell(oCaster)) // Burn a spell of the appropriate level + { + if (DEBUG) DoDebug("MasterWand - Burned Spell"); + DeleteLocalInt(oCaster, "BurnSpellLevel"); + SetItemCharges(oSpellCastItem, GetItemCharges(oSpellCastItem)+1); // add the use back to the item + } + } +} + +int WandEquipped(object oCaster, object oSpellCastItem) +{ + //if (!GetPRCSwitch(PRC_EQUIP_WAND)) return TRUE; // If this is set to anything other than 0, it skips the check. + + int nType = GetBaseItemType(oSpellCastItem); + + if(nType == BASE_ITEM_MAGICWAND || nType == BASE_ITEM_ENCHANTED_WAND) // Has to be a wand, obv + { + if(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCaster) == oSpellCastItem || GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCaster) == oSpellCastItem) // Needs to be equipped + { + return TRUE; + } + else + { + FloatingTextStringOnCreature("You must equip a wand to cast from it.", oCaster, FALSE); + return FALSE; // It's a wand not equipped + } + } + + return TRUE; +} + +void DoubleWandWielder(object oCaster, object oSpellCastItem, object oTarget) +{ + if (!GetHasFeat(FEAT_DOUBLE_WAND_WIELDER, oCaster)) return; // Does nothing without the feat, obviously + if (!GetLocalInt(oCaster, "DoubleWand")) return; // Needs to be active as well + + int nType = GetBaseItemType(oSpellCastItem); + + if(nType == BASE_ITEM_MAGICWAND || nType == BASE_ITEM_ENCHANTED_WAND) // Has to be a wand, obv + { + object oOffHand; + if(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCaster) == oSpellCastItem) // Find the other hand + oOffHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCaster); + else + oOffHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCaster); + + int nOffType = GetBaseItemType(oOffHand); + + if(nOffType == BASE_ITEM_MAGICWAND || nOffType == BASE_ITEM_ENCHANTED_WAND) // Has to be a wand, obv + { + int nCharges = GetItemCharges(oOffHand); + + if (nCharges > 1) // Need to have enough charges for this + { + //code for getting new ip type + int nCasterLevel; + int nSpell; + itemproperty ipTest = GetFirstItemProperty(oOffHand); + while(GetIsItemPropertyValid(ipTest)) + { + if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_CAST_SPELL_CASTER_LEVEL) + { + nCasterLevel = GetItemPropertyCostTableValue(ipTest); + if (DEBUG) DoDebug("DoubleWandWielder: caster level from item = "+IntToString(nCasterLevel)); + } + if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_CAST_SPELL) + { + nSpell = GetItemPropertySubType(ipTest); + if (DEBUG) DoDebug("DoubleWandWielder: iprop subtype = "+IntToString(nSpell)); + nSpell = StringToInt(Get2DACache("iprp_spells", "SpellIndex", nSpell)); + if (DEBUG) DoDebug("DoubleWandWielder: spell from item = "+IntToString(nSpell)); + } + ipTest = GetNextItemProperty(oOffHand); + } + // if we didn't find a caster level on the item, it must be Bioware item casting + if(!nCasterLevel) + { + nCasterLevel = GetCasterLevel(oCaster); + if (DEBUG) DoDebug("DoubleWandWielder: bioware item casting with caster level = "+IntToString(nCasterLevel)); + } + + ActionCastSpell(nSpell, nCasterLevel, 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, FALSE, FALSE, oTarget, TRUE); + SetItemCharges(oOffHand, nCharges - 2); + } + } + } +} + +void MeldArcaneFocus(object oCaster, object oTarget) +{ + int nDC = GetLocalInt(oCaster, "ArcaneFocusBound"); + if (nDC) // MELD_ARCANE_FOCUS + { + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_SPELL)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, 6.0); + } +} + +// Does the caster level check for Witchborn Binder's Mage Shackles +int MageShackles(object oCaster, int nSpellId) +{ + int nWarp = GetLocalInt(oCaster, "MageShackles"); + // If Mage Shackles aren't present, just keep going + if (!nWarp) return TRUE; + + object oMeldshaper = GetLocalObject(oCaster, "MageShacklesShaper"); // The one who created the Shackles + + int nLevel = PRCGetCasterLevel(oCaster); + if (nWarp > PRCGetCasterLevel(oCaster)+d20()) // Do they beat the DC for the caster level check or not? + { + FloatingTextStringOnCreature("Your mage shackles have successfully blocked your opponent's "+GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellId))), oMeldshaper, FALSE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SOUL_TRAP), oCaster); + return FALSE; + } + + return TRUE; +} + +// Does the counterspelling for Word of Abrogation +int Abrogation(object oCaster, int nCasterLevel, int nSpellId) +{ + location lTarget = GetLocation(oCaster); + int nCnt = 1; + // Find the meldshaper + object oMeldshaper = GetNearestCreatureToLocation(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, lTarget, nCnt); + while(GetIsObjectValid(oMeldshaper) && GetDistanceBetween(oMeldshaper, oCaster) <= FeetToMeters(60.0f)) + { + int nWarp = GetLocalInt(oMeldshaper, "Abrogation"); + if(nWarp) + { + // Clean up the ability + DeleteLocalInt(oMeldshaper, "Abrogation"); + PRCRemoveSpellEffects(MELD_WITCH_ABROGATION, oMeldshaper, oMeldshaper); + GZPRCRemoveSpellEffects(MELD_WITCH_ABROGATION, oMeldshaper, FALSE); + + if (nWarp+d20() >= nCasterLevel+11) // Do you beat their caster level? + { + FloatingTextStringOnCreature("Your word of abrogation has successfully blocked your opponent's "+GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellId))), oMeldshaper, FALSE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SOUL_TRAP), oCaster); + return FALSE; + } + else + FloatingTextStringOnCreature("Your word of abrogation has failed", oMeldshaper, FALSE); + } + nCnt++; + oMeldshaper = GetNearestCreatureToLocation(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, lTarget, nCnt); + } + + return TRUE; +} + +// Does damage for Grim Integument +void Integument(object oCaster, int nCastingClass) +{ + if (GetIsArcaneClass(nCastingClass) && GetHasSpellEffect(MELD_WITCH_INTEGUMENT, oCaster)) + { + int nEssentia = GetLocalInt(oCaster, "GIEssentia"); + object oMeldshaper = GetLocalObject(oCaster, "GIMeldshaper"); // The one who created the Shackles + int nDC = 10 + nEssentia + GetAbilityModifier(ABILITY_CONSTITUTION, oMeldshaper); + int nDam = d6(nEssentia); + if(PRCMySavingThrow(SAVING_THROW_FORT, oCaster, nDC, SAVING_THROW_TYPE_NONE)) + { + if (GetHasMettle(oCaster, SAVING_THROW_FORT)) + nDam = 0; + + nDam /= 2; + } + + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDam, DAMAGE_TYPE_POSITIVE), oCaster); + } +} + +void WyrmbaneFrightful(object oPC) +{ + object oWOL = GetItemPossessedBy(oPC, "WOL_Wyrmbane"); + + // You get nothing if you aren't wielding the legacy item + if(oWOL != GetItemInSlot(INVENTORY_SLOT_HEAD, oPC)) return; + if (GetHasFeat(FEAT_GREATER_LEGACY, oPC)) + ExecuteScript("prc_fright_pres", oPC); +} + +int Nondetection(object oTarget, object oCaster, int nSchool, int nCasterLevel) +{ + int nReturn = TRUE; + if (nSchool == SPELL_SCHOOL_DIVINATION) + { + if(GetHasSpellEffect(SPELL_NONDETECTION, oTarget) || GetLevelByClass(CLASS_TYPE_WILD_MAGE, oTarget) >= 6 || GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oTarget) >= 5 || GetHasSpellEffect(MELD_ENIGMA_HELM, oTarget) || GetRacialType(oTarget) == RACIAL_TYPE_SKULK) + { + // Caster level check or the Divination fails. + int nTarget = PRCGetCasterLevel(oTarget) + 11; + if (GetRacialType(oTarget) == RACIAL_TYPE_SKULK && 20 > nTarget) nTarget = 20; + if(nTarget > nCasterLevel + d20()) + { + FloatingTextStringOnCreature(GetName(oTarget) + " has Nondetection active.", oCaster, FALSE); + return FALSE; + } + } + } + return nReturn; +} + +int AmonInfluence(object oTarget, object oCaster, int nSpellId, int nSpellLevel, int bSpellIsHostile) +{ + // Have to have a bad pact with Amon for this to trigger on beneficial spells + if (GetHasSpellEffect(VESTIGE_AMON, oTarget) && !GetLocalInt(oTarget, "PactQuality"+IntToString(VESTIGE_AMON)) && !bSpellIsHostile) + { + // Law, fire, and sun domain casters + if (GetHasFeat(FEAT_FIRE_DOMAIN_POWER, oCaster) || GetHasFeat(FEAT_SUN_DOMAIN_POWER, oCaster)) + { + if(PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget, oCaster, nSpellId), SAVING_THROW_TYPE_SPELL)) + { + FloatingTextStringOnCreature("You have made a poor pact, and Amon forces you to resist the spell", oTarget, FALSE); + return FALSE; + }//end will save processing + } + } + + return TRUE; +} + +int RonoveInfluence(object oCaster, object oSpellCastItem) +{ + if (GetHasSpellEffect(VESTIGE_RONOVE, oCaster) && !GetLocalInt(oCaster, "PactQuality"+IntToString(VESTIGE_RONOVE))) + { + if(GetIsObjectValid(oSpellCastItem)) + { + // Potion drinking is restricted + if(GetBaseItemType(oSpellCastItem) == BASE_ITEM_ENCHANTED_POTION + || GetBaseItemType(oSpellCastItem) == BASE_ITEM_POTIONS) + return FALSE; + } + } + + return TRUE; +} + +int HaagentiTransmutation(object oTarget, int nSpellID) +{ + if (GetHasSpellEffect(VESTIGE_HAAGENTI, oTarget) && GetLocalInt(oTarget, "ExploitVestige") != VESTIGE_HAAGENTI_IMMUNE_TRANS) + { + if(GetIsOfSubschool(nSpellID, SUBSCHOOL_POLYMORPH)) + return FALSE; + } + + return TRUE; +} + + +int KarsiteInability(object oCaster, int nCastingClass) +{ + if (GetRacialType(oCaster) == RACIAL_TYPE_KARSITE) + { + //:: Check if the spell originates from an item + object oSpellSource = GetSpellCastItem(); + if (GetIsObjectValid(oSpellSource)) + { + //:: Spell is cast from an item; allow it + return TRUE; + } + if (GetIsDivineClass(nCastingClass, oCaster) || GetIsArcaneClass(nCastingClass, oCaster)) + { + return FALSE; + } + } + + // Default: allow + return TRUE; +} + +/* int KarsiteInability(object oCaster, int nCastingClass) +{ + if (GetRacialType(oCaster) == RACIAL_TYPE_KARSITE) + { + if(GetIsDivineClass(nCastingClass, oCaster) || GetIsArcaneClass(nCastingClass, oCaster)) + return FALSE; + } + + return TRUE; +} */ + +int UrCleric(object oCaster, int nCastingClass) +{ + if (GetLevelByClass(CLASS_TYPE_UR_PRIEST, oCaster) && GetIsDivineClass(nCastingClass, oCaster) && nCastingClass != CLASS_TYPE_UR_PRIEST) + { + return FALSE; + } + + return TRUE; +} + +int ShadowWeaveLightSpells(object oCaster, int nSpellID) +{ + if(GetHasDescriptor(nSpellID, DESCRIPTOR_LIGHT) && GetHasFeat(FEAT_SHADOWWEAVE, oCaster)) + { + return FALSE; + } + + return TRUE; +} + +void ArkamoiStrength(object oCaster, int nCastingClass) +{ + // This race only + if (GetRacialType(oCaster) != RACIAL_TYPE_ARKAMOI) + return; + + int nStrength = GetLocalInt(oCaster, "StrengthFromMagic"); + + // Only applies to arcane spells + if (GetIsArcaneClass(nCastingClass, oCaster)) + { + // First time here + if (!nStrength) + { + SetLocalInt(oCaster, "StrengthFromMagic", 1); + DelayCommand(60.0, DeleteLocalInt(oCaster, "StrengthFromMagic")); + DelayCommand(60.0, FloatingTextStringOnCreature("Arkamoi Strength from Magic reset", oCaster, FALSE)); + } + else if (5 > nStrength) // nStrength equals something, can't go above five + SetLocalInt(oCaster, "StrengthFromMagic", nStrength + 1); + PRCRemoveSpellEffects(SPELL_ARKAMOI_STRENGTH, oCaster, oCaster); + GZPRCRemoveSpellEffects(SPELL_ARKAMOI_STRENGTH, oCaster, FALSE); + ActionCastSpellOnSelf(SPELL_ARKAMOI_STRENGTH); + FloatingTextStringOnCreature("Arkamoi Strength from Magic at "+IntToString(nStrength+1), oCaster, FALSE); + } +} + +void RedspawnHealing(object oCaster, int nSpellID, int nSpellLevel) +{ + if(GetHasDescriptor(nSpellID, DESCRIPTOR_FIRE) && GetRacialType(oCaster) == RACIAL_TYPE_REDSPAWN_ARCANISS) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(nSpellLevel*2), oCaster); + } +} + +void WarsoulTyrant(object oCaster, int nCastingClass) +{ + // This race only + if (GetRacialType(oCaster) != RACIAL_TYPE_HOBGOBLIN_WARSOUL) + return; + + int nStrength = GetLocalInt(oCaster, "WarsoulTyrant"); + + // Only applies to arcane spells + if (GetIsArcaneClass(nCastingClass, oCaster)) + { + // First time here + if (nStrength) + DelayCommand(1.0, DeleteLocalInt(oCaster, "WarsoulTyrant")); + } +} + +// this will execute the prespellcastcode, whose full functionality is incoded in X2PreSpellCastCode2(), +// as a script, to save loading time for spells scripts and reduce memory usage of NWN +// the prespellcode takes up roughly 250 kByte compiled code, meaning that every spell script that +// calls it directly as a function (e.g.: X2PreSpellCastCode2) will be between 100 kByte to 250 kByte +// larger, than a spell script calling the prespellcode via ExecuteScript (e.g. X2PreSpellCastCode) +// Although ExecuteScript is slightly slower than a direct function call, quite likely overall performance is +// increased, because for every new spell 100-250 kByte less code need to be loaded into memory +// and NWN has more free memory available to keep more spells scripts (and other crucial scripts) +//in RAM +/*int X2PreSpellCastCode() +{ + object oCaster = OBJECT_SELF; + + // SetLocalInt(oCaster, "PSCC_Ret", 0); + ExecuteScript("prc_prespell", oCaster); + + int nReturn = GetLocalInt(oCaster, "PSCC_Ret"); + // DeleteLocalInt(oCaster, "PSCC_Ret"); + + return nReturn; +} +moved to prc_spellhook */ + +//------------------------------------------------------------------------------ +// if FALSE is returned by this function, the spell will not be cast +// the order in which the functions are called here DOES MATTER, changing it +// WILL break the crafting subsystems +//------------------------------------------------------------------------------ +int X2PreSpellCastCode2() +{ + object oCaster = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + object oSpellCastItem = PRCGetSpellCastItem(); + int nOrigSpellID = GetSpellId(); + int nSpellID = PRCGetSpellId(); + int nCastingClass = PRCGetLastSpellCastClass(); + int nSpellLevel = PRCGetSpellLevelForClass(nSpellID, nCastingClass); + int nSchool = GetSpellSchool(nSpellID); + int nCasterLevel = PRCGetCasterLevel(oCaster); + int nMetamagic = PRCGetMetaMagicFeat(oCaster, FALSE); + int nSaveDC = PRCGetSaveDC(OBJECT_INVALID, oCaster); + int bSpellIsHostile = Get2DACache("spells", "HostileSetting", nOrigSpellID) == "1"; + int nSpellbookType = GetSpellbookTypeForClass(nCastingClass); + int nCasterAlignment = GetAlignmentGoodEvil(oCaster); + string sComponent = GetStringUpperCase(Get2DACache("spells", "VS", nSpellID)); + + //--------------------------------------------------------------------------- + // This small addition will check to see if the target is mounted and the + // spell is therefor one that should not be permitted. + //--------------------------------------------------------------------------- + if(!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK")) + { + if(PRCHorseGetIsMounted(oTarget) && X3ShapeShiftSpell(oTarget, nSpellID)) + { + if(GetIsPC(oTarget)) + { + FloatingTextStrRefOnCreature(111982,oTarget,FALSE); + } + return FALSE; + } + } + + int nContinue = !ExecuteScriptAndReturnInt("prespellcode", oCaster); + + //--------------------------------------------------------------------------- + // Now check if we cast from an item (scroll, staff etc) + //--------------------------------------------------------------------------- + if(GetIsObjectValid(oSpellCastItem)) + { + //--------------------------------------------------------------------------- + // Check for the new restricted itemproperties + //--------------------------------------------------------------------------- + if(nContinue + && !CheckPRCLimitations(oSpellCastItem, oCaster)) + { + SendMessageToPC(oCaster, "You cannot use "+GetName(oSpellCastItem)); + nContinue = FALSE; + } + + //--------------------------------------------------------------------------- + // Baelnorn attempting to use items while projection + //--------------------------------------------------------------------------- + if(nContinue + && GetLocalInt(oCaster, "BaelnornProjection_Active"))// If projection is active AND + { + nContinue = FALSE; // Prevent casting + } + + //casting from staffs uses caster DC calculations + if(nContinue + && (GetBaseItemType(oSpellCastItem) == BASE_ITEM_MAGICSTAFF + || GetBaseItemType(oSpellCastItem) == BASE_ITEM_CRAFTED_STAFF) + && GetPRCSwitch(PRC_STAFF_CASTER_LEVEL)) + { + int nDC = 10 + StringToInt(lookup_spell_innate(nSpellID)); + nDC += (GetAbilityScoreForClass(GetPrimaryArcaneClass(oCaster), oCaster)-10)/2; + SetLocalInt(oCaster, PRC_DC_BASE_OVERRIDE, nDC); + DelayCommand(0.01, DeleteLocalInt(oCaster, PRC_DC_BASE_OVERRIDE)); + } + } + + //--------------------------------------------------------------------------- + // Break any spell require maintaining concentration + //--------------------------------------------------------------------------- + X2BreakConcentrationSpells(); + + //--------------------------------------------------------------------------- + // No casting while using expertise + //--------------------------------------------------------------------------- + if(nContinue) + if (GetActionMode(oCaster, ACTION_MODE_EXPERTISE) || GetActionMode(oCaster, ACTION_MODE_IMPROVED_EXPERTISE)) + { + SendMessageToPC(oCaster, "Combat Expertise only works with attack actions."); + nContinue = FALSE; + } + + //--------------------------------------------------------------------------- + // Run Spelldance perform check + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = Spelldance(oCaster, nSpellLevel, nCastingClass); + + //--------------------------------------------------------------------------- + // Check for PRC spell effects + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = PRCSpellEffects(oCaster, oTarget, nSpellID, nSpellLevel, nCastingClass, bSpellIsHostile, nMetamagic); + + //--------------------------------------------------------------------------- + // Run Grappling Concentration Check + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = GrappleConc(oCaster, nSpellLevel); + + //--------------------------------------------------------------------------- + // Blighters stop Druid casting + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = Blighter(oCaster, nCastingClass, oSpellCastItem); + + //--------------------------------------------------------------------------- + // Karsite stop Arcane/Divine casting + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = KarsiteInability(oCaster, nCastingClass); + + //--------------------------------------------------------------------------- + // Ur-Priest stops cleric casting + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = UrCleric(oCaster, nCastingClass); + + //--------------------------------------------------------------------------- + // Shadow Weave blocks casting light descriptor spells + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = ShadowWeaveLightSpells(oCaster, nSpellID); + + //--------------------------------------------------------------------------- + // Forsakers cancel friendly casting + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = Forsaker(oCaster, oTarget); + + //--------------------------------------------------------------------------- + // Battle Blessing stops non-Paladin casting + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = BattleBlessing(oCaster, nCastingClass); + + //--------------------------------------------------------------------------- + // Nondetection can block divinations + //--------------------------------------------------------------------------- + if (nContinue) + nContinue = Nondetection(oTarget, oCaster, nSchool, nCasterLevel); + + //--------------------------------------------------------------------------- + // Mystery Effects + //--------------------------------------------------------------------------- + if (nContinue) + nContinue = WarpSpell(oCaster, nSpellID); + + if (nContinue) + nContinue = InnateCounterspell(oCaster, nSpellID, nSpellLevel); + + if (nContinue) + nContinue = FloodShadow(oCaster, nSpellID); + + //--------------------------------------------------------------------------- + // Incarnum Effects + //--------------------------------------------------------------------------- + if (nContinue) + nContinue = MageShackles(oCaster, nSpellID); + + if (nContinue) + nContinue = Abrogation(oCaster, nCasterLevel, nSpellID); + + //--------------------------------------------------------------------------- + // Binding Effects + //--------------------------------------------------------------------------- + if (nContinue) + nContinue = AmonInfluence(oTarget, oCaster, nSpellID, nSpellLevel, bSpellIsHostile); + + if (nContinue) + nContinue = RonoveInfluence(oCaster, oSpellCastItem); + + if (nContinue) + nContinue = HaagentiTransmutation(oTarget, nSpellID); + + //--------------------------------------------------------------------------- + // Check for Corrupt or Sanctified spells + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = CorruptOrSanctified(oCaster, nSpellID, nCasterAlignment, nSpellbookType); + + //--------------------------------------------------------------------------- + // Run Knight of the Chalice Heavenly Devotion check + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = KOTCHeavenDevotion(oCaster, oTarget, nCasterAlignment, nSchool); + + //--------------------------------------------------------------------------- + // Spellfire + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = Spellfire(oCaster, oTarget); + + //--------------------------------------------------------------------------- + // This stuff is only interesting for player characters we assume that use + // magic device always works and NPCs don't use the crafting feats or + // sequencers anyway. Thus, any NON PC spellcaster always exits this script + // with TRUE (unless they are DM possessed or in the Wild Magic Area in + // Chapter 2 of Hordes of the Underdark. + //--------------------------------------------------------------------------- + int bIsPC = GetIsPC(oCaster) || GetPRCSwitch(PRC_NPC_HAS_PC_SPELLCASTING) + || GetIsDMPossessed(oCaster) || GetLocalInt(GetArea(oCaster), "X2_L_WILD_MAGIC"); + + if(bIsPC) + { + //--------------------------------------------------------------------------- + // Run Bard/Sorc PrC check + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = BardSorcPrCCheck(oCaster, nCastingClass, oSpellCastItem); + + //--------------------------------------------------------------------------- + // Equipped Wand switches + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = WandEquipped(oCaster, oSpellCastItem); + + //--------------------------------------------------------------------------- + // Alignment Restrictions Check + //--------------------------------------------------------------------------- + if (nContinue) + nContinue = SpellAlignmentRestrictions(oCaster, nSpellID, nCastingClass); + + //--------------------------------------------------------------------------- + // Druid spontaneous summoning + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = DruidSpontSummon(oCaster, nCastingClass, nSpellID, nSpellLevel); + + //--------------------------------------------------------------------------- + // Run New Spellbook Spell Check + //--------------------------------------------------------------------------- + if (nContinue) + nContinue = NSB_SpellCast(oCaster, nSpellID, nCastingClass, nMetamagic, nSpellbookType, sComponent, oSpellCastItem); + + //--------------------------------------------------------------------------- + // Run counterspell exploit check + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = CounterspellExploitCheck(oCaster); + + //--------------------------------------------------------------------------- + // PnP spellschools + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = PnPSpellSchools(oCaster, nCastingClass, nSchool, oSpellCastItem); + + //--------------------------------------------------------------------------- + // Run Red Wizard School Restriction Check + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = RedWizRestrictedSchool(oCaster, nSchool, nCastingClass, oSpellCastItem); + + //--------------------------------------------------------------------------- + // PnP somatic components + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = PnPSomaticComponents(oCaster, oSpellCastItem, sComponent, nMetamagic); + + //----------------------------------------------------------------------- + // Shifting casting restrictions + //----------------------------------------------------------------------- + if(nContinue) + nContinue = ShifterCasting(oCaster, oSpellCastItem, nSpellLevel, nMetamagic, sComponent); + + //--------------------------------------------------------------------------- + // Run Material Component Check + //--------------------------------------------------------------------------- + if(nContinue) + nContinue = MaterialComponents(oCaster, nSpellID, nCastingClass, oSpellCastItem); + + //--------------------------------------------------------------------------- + // Run Class Spell-like-ability Check + //--------------------------------------------------------------------------- + if (nContinue) + nContinue = ClassSLAStore(oCaster, nSpellID, nCastingClass, nSpellLevel); + + //--------------------------------------------------------------------------- + // Run Wild Mage's Wildstrike + //--------------------------------------------------------------------------- + if (nContinue) + nContinue = Wildstrike(oCaster); + + //--------------------------------------------------------------------------- + // Run Inscribe Rune Check + //--------------------------------------------------------------------------- + if (nContinue) + nContinue = InscribeRune(); + + //--------------------------------------------------------------------------- + // Run Attune Gem Check + //--------------------------------------------------------------------------- + if (nContinue) + nContinue = AttuneGem(); + + //--------------------------------------------------------------------------- + // Run use magic device skill check + //--------------------------------------------------------------------------- + if (nContinue) + nContinue = X2UseMagicDeviceCheck(oCaster); + + //----------------------------------------------------------------------- + // run any user defined spellscript here + //----------------------------------------------------------------------- + if (nContinue) + nContinue = X2RunUserDefinedSpellScript(); + + //----------------------------------------------------------------------- + // run any object-specific spellscript here + //----------------------------------------------------------------------- + if (nContinue) + nContinue = PRCRunUserSpecificSpellScript(); + + //----------------------------------------------------------------------- + // Check if spell was used for Duskblade channeling + //----------------------------------------------------------------------- + if (nContinue) + nContinue = DuskbladeArcaneChanneling(oCaster, oTarget, nSpellID, nCasterLevel, nMetamagic, oSpellCastItem); + + //----------------------------------------------------------------------- + // PnP Familiar - deliver touch spell + //----------------------------------------------------------------------- + if(nContinue) + nContinue = DeliverTouchSpell(oCaster, oTarget, nSpellID, nCasterLevel, nSaveDC, nMetamagic, oSpellCastItem); + + //--------------------------------------------------------------------------- + // The following code is only of interest if an item was targeted + //--------------------------------------------------------------------------- + if(GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM) + { + //----------------------------------------------------------------------- + // Check if spell was used to trigger item creation feat + //----------------------------------------------------------------------- + if (nContinue) + nContinue = !ExecuteScriptAndReturnInt("x2_pc_craft", oCaster); + + //----------------------------------------------------------------------- + // Check if spell was used for on a sequencer item + // Check if spell was used for Arcane Archer Imbue Arrow + // Check if spell was used for Spellsword ChannelSpell + //----------------------------------------------------------------------- + if (nContinue) + nContinue = (!X2GetSpellCastOnSequencerItem(oTarget, oCaster, nSpellID, nMetamagic, nCasterLevel, nSaveDC, bSpellIsHostile, oSpellCastItem)); + + //----------------------------------------------------------------------- + // * Execute item OnSpellCast At routing script if activated + //----------------------------------------------------------------------- + if(nContinue) + { + SetUserDefinedItemEventNumber(X2_ITEM_EVENT_SPELLCAST_AT); + //Tag-based PRC scripts first + int nRet = ExecuteScriptAndReturnInt("is_"+GetTag(oTarget), OBJECT_SELF); + if(nRet == X2_EXECUTE_SCRIPT_END) + return FALSE; + + if(GetModuleSwitchValue(MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS) == TRUE) + { + nRet = ExecuteScriptAndReturnInt(GetUserDefinedItemEventScriptName(oTarget), OBJECT_SELF); + if(nRet == X2_EXECUTE_SCRIPT_END) + return FALSE; + } + } + + //----------------------------------------------------------------------- + // Prevent any spell that has no special coding to handle targetting of items + // from being cast on items. We do this because we can not predict how + // all the hundreds spells in NWN will react when cast on items + //----------------------------------------------------------------------- + if (nContinue) + nContinue = X2CastOnItemWasAllowed(oTarget); + } + } + + if(nContinue) + { + //eldritch spellweave + EldritchSpellweave(oCaster, oTarget, nSpellLevel, bSpellIsHostile); + + //spellsharing + SpellSharing(oCaster, oTarget, nSpellID, nCasterLevel, nSaveDC, nMetamagic, oSpellCastItem); + + // Combat medic healing kicker + CombatMedicHealingKicker(oCaster, oTarget, nSpellID); + + // Wyrmbane Helm Frightful Presence + WyrmbaneFrightful(oCaster); + + // Havoc Mage Battlecast + Battlecast(oCaster, oTarget, oSpellCastItem, nSpellLevel); + + // Draconic Feat effects + DraconicFeatsOnSpell(oCaster, oTarget, oSpellCastItem, nSpellLevel, nCastingClass); + + // Wand Feats + MasterWand(oCaster, oSpellCastItem, nSpellLevel); + DoubleWandWielder(oCaster, oSpellCastItem, oTarget); + + // Incarnum + MeldArcaneFocus(oCaster, oTarget); + Integument(oCaster, nCastingClass); + + // Mystery + EchoSpell(oCaster, nSpellID); + + // Races + ArkamoiStrength(oCaster, nCastingClass); + WarsoulTyrant(oCaster, nCastingClass); + RedspawnHealing(oCaster, nSpellID, nSpellLevel); + + // Feats + DazzlingIllusion(oCaster, nSchool); + EnergyAbjuration(oCaster, nSchool, nSpellLevel); + InsightfulDivination(oCaster, nSchool, nSpellLevel); + TougheningTransmutation(oCaster, nSchool); + CloudyConjuration(oCaster, nSchool, oSpellCastItem); + + // Reserve Feats + if(GetLocalInt(oCaster, "ReserveFeatsRunning")) OnePingOnly(oCaster); + if(GetLocalInt(oCaster, "DoMysticBacklash")) MysticBacklash(oCaster); + } + + if(bIsPC) + { + if(GetPRCSwitch(PRC_PW_SPELL_TRACKING)) + { + if(!GetLocalInt(oCaster, "UsingActionCastSpell")) + { + string sSpell = IntToString(nOrigSpellID)+"|"; //use original spellID + string sStored = GetPersistantLocalString(oCaster, "persist_spells"); + SetPersistantLocalString(oCaster, "persist_spells", sStored+sSpell); + } + } + + //Cleaning spell variables used for holding the charge + if(!GetLocalInt(oCaster, "PRC_SPELL_EVENT")) + { + DeleteLocalInt(oCaster, "PRC_SPELL_CHARGE_COUNT"); + DeleteLocalInt(oCaster, "PRC_SPELL_CHARGE_SPELLID"); + DeleteLocalObject(oCaster, "PRC_SPELL_CONC_TARGET"); + DeleteLocalInt(oCaster, "PRC_SPELL_METAMAGIC"); + DeleteLocalManifestation(oCaster, "PRC_POWER_HOLD_MANIFESTATION"); + DeleteLocalMystery(oCaster, "MYST_HOLD_MYST"); + } + else if(GetLocalInt(oCaster, "PRC_SPELL_CHARGE_SPELLID") != nSpellID) + { //Sanity check, in case something goes wrong with the action queue + DeleteLocalInt(oCaster, "PRC_SPELL_EVENT"); + } + DeleteLocalInt(oCaster, "SpellIsSLA"); + } + + return nContinue; +} + + +// Test main +//::void main(){} \ No newline at end of file diff --git a/src/include/x3_inc_horse.nss b/src/include/x3_inc_horse.nss new file mode 100644 index 0000000..65548a0 --- /dev/null +++ b/src/include/x3_inc_horse.nss @@ -0,0 +1,3434 @@ + +//:://///////////////////////////////////////////// +//:: Horse Mounting and Control System +//:: x3_inc_horse +//:: Copyright (c) 2007-2008 Bioware Corp. +//::////////////////////////////////////////////// +/* + Holds horse specific functionality which can be used + in other scripts to support horses as present in patch 1.69. +*/ +//::////////////////////////////////////////////// +//:: Created By: Deva B. Winblood +//:: Tweaking By: Martin "Azbest" Psikal +//:: Created On: Dec 14th, 2007 +//:: Last Update: April 21th, 2008 +//:: Help from community members: Proleric, +//:: The Krit, OldMansBeard, FriendlyFire, +//:: Bannor "JP" Bloodfist, Brian Chung, +//:: Craig Welburn, Barry_1066, Jahodnik, +//:: fluffyamoeba, Axe Murderer, and more. +//:: Thank you! +//::////////////////////////////////////////////// + +#include "x0_i0_position" +#include "X0_INC_HENAI" +#include "x3_inc_skin" + +/* + + HOW TO GET THE MOST FROM THIS HORSE SCRIPT: + =========================================== + + This script has been setup to simply work with the default horses but, some + effort was made to provide you with some simple methods to hook your own + mounts, mounting scripts, etc. into this script. + + + [HORSE BLUEPRINT VARIABLES] + =========================== + + The following variables can be set on the BLUEPRINT of a creature to extend + this mounting system. These scripts could be used to add database + functionality, or extend the system however, you like. + + bX3_IS_MOUNT = integer that should be set to 1 if this is a custom blueprint + mount that for some reason the script indicates is not a mount. + + X3_HORSE_PREMOUNT_SCRIPT = script to fire before the horse is mounted. If + this script determines it cannot mount then it will set X3_HORSE_NOMOUNT to + TRUE on the mount. You can use a script like this to create support for + saddlebags or to + use this to extend the mounting system. This will be executed by the rider + and the variable oX3_TempHorse will be set pointing to the horse so that + the custom script knows which horse this relates to. + + X3_HORSE_POSTMOUNT_SCRIPT = can be set to a script that can be fired after + this mount is mounted. This may be useful for adding things like feats and + other after mounting needs. If this + script does not exist then the standard Speed, Skill Decreases, Mounted + Archery Adjustments, etc. will be applied. If you want your own post mount + script then it is important to note you will have to apply these modifiers + if you also want them to be used within your own script. The horse that + was mounted will be referenced by oX3_TempHorse as stored on the Rider. If + you use such a custom hook script make sure to set bX3_IS_MOUNTED to TRUE by + using the SetSkinInt() function from x3_inc_skin. + on the rider after they mount. This is required in some cases for the + dismount radial to work. (mainly when working with custom mounts) + + X3_HORSE_PREDISMOUNT_SCRIPT = can be set to a script that needs to be + executed before the dismount portion continues. If X3_HORSE_NODISMOUNT is + set to TRUE then the horse dismount will be aborted. + + X3_HORSE_POSTDISMOUNT_SCRIPT = can be set to a script to be executed after + dismount to reverse steps that may have occurred with a POSTMOUNT script + such as adding feats. This script could be used to remove feats. + + It is possible you might want to add a new horse/mount type that does not + fit neatly into the appearance.2da or tails.2da with the other horse types. + The following variables if set to any number greater than 0 will override + the default settings and use what you specifiy instead. + + X3_HORSE_NULL_APPEARANCE = the appearance to use when scaling the horse for + the mounting animation. + + X3_HORSE_TAIL = the tail to use with the tails.2da that defines this horse. + + X3_HORSE_FOOTSTEP = the footstep number to use when this horse is mounted. + + X3_HORSE_MOUNT_DURATION = is the duration in seconds 0.0f that the mount + animation should take with this horse. This only needs to be set if + the mounting animation for this blueprint is faster or longer than the + default animations. + + X3_HORSE_MOUNT_SPEED = is the mount speed increase or decrease that should + be used with this mount. If the value is 0 then it will use the + HORSE_DEFAULT_SPEED_INCREASE constant value. + + X3_HORSE_DISMOUNT_DURATION = is the duration in seconds 0.0f that the dis- + mount animation should take with this hores. This only needs to be set if + the dismounting animation for this blueprint is faster or longer than the + default animations. + + X3_HORSE_RESTRICT_race = is a variable that set to TRUE this horse cannot + be mounted by the specified race. Supported races are ELF, HUMAN, HALFELF, + DWARF, HALFORC, HALFLING, and GNOME, CUSTOM# = racial type number. + + X3_CUSTOM_RACE_APPEARANCE = a variable to set on a rider if they use a custom + racial appearance. This value should be set to what appearance number they + use from appearance.2da. This will prevent custom races from being denied + mounting rights due to the script thinking the rider is shape shifted. + + X3_CUSTOM_RACE_MOUNTED_PHENO = This variable should be used on the rider if they + should use a special phenotype when mounted. This is provided to support + custom races. + + X3_CUSTOM_RACE_JOUST_PHENO = This variable should be used on the rider if + they need a special phenotype when mounted in joust mode. + + X3_CUSTOM_RACE_PHENOTYPE = This variable should be used on the rider if they + need a special phenotype when not mounted. + + X3_CUSTOM_RACE_MOUNTED_APPEARANCE = a variable to set on the rider to + indicate which appearance they should use when mounted. + + X3_HORSE_OWNER_TAG = a string that can be set on the horse that will tell + it to Add itself as a henchman to an NPC with the specified tag. + + X3_HORSE_NOT_RIDEABLE_OWNER = if this integer is set to 1 on the Horse then + Mount will not be useable and the error it will return if asked is that it + is NOT rideable due to it being owned by someone else. This is useful if + you want horses around that the PCs and Henchmen cannot mount for reasons + such as they are owned by a store, etc. + + bX3_IS_MOUNT = a variable that should be set to TRUE if a mount is added + as a henchman but, is still mountable. + + X3_NO_MOUNT_ANIMATE = if this integer is set to 1 then this mount does not EVER + animate mounting or dismounting. + + X3_TOTAL_MOUNT_ANIMATION_DELAY = a variable containing a time lot indicating + how much time the routine has before it needs to be finished. it is used for + the sake of synchronizing animation and the process running in the background, + exclusively used in mounting animation portion of the HorseMount() routine, + but can be used elsewhere. Note, that the variable is artificially set even + in case no animation is desired so that the code doesnt happen instantly. It + is not meant to be changed, unless something bad is happening timing-wise. + The value is precalculated and in our particular case it is supposed to hold + the total animation length. + + The following make it easier to implement existing mount support systems + in conjunction with this one. + + X3_HORSE_SCRIPT_MOUNT = Script to call for mounting instead of using the + default one called by the horse menu feat. This still checks to make sure + mounting in the area is legal first. This is intended for making the radial + menus do something different just for this horse and is not intended to + alter the HorseMount(), HorseDismount(), etc. functions. There are already + POSTMOUNT, POSTDISMOUNT, PREMOUNT, and PREDISMOUNT hooks which make that + functionality possible so, that is not what this variable is for. + + X3_HORSE_SCRIPT_DISMOUNT = Script to call for dismounting instead of using + the default one called by the horse menu feat. This is intended for making + the radial menus do something different just for this horse and is not + intended to alter the HorseMount(), HorseDismount(), etc. functions. There + are already POSTMOUNT, POSTDISMOUNT, PREMOUNT, and PREDISMOUNT hooks which + make that functionality possible so, that is not what this variable is for. + + X3_HORSE_SCRIPT_ASSIGN = Script to call for assign mount instead of using + the default one called by the horse menu feat. This is intended for making + the radial menus do something different just for this horse and is not + intended to alter the HorseMount(), HorseDismount(), etc. functions. There + are already POSTMOUNT, POSTDISMOUNT, PREMOUNT, and PREDISMOUNT hooks which + make that functionality possible so, that is not what this variable is for. + + bX3_HAS_SADDLEBAGS = Integer that if set to 1 on the mount will indicate + the horse has saddle bags. It will support inventory control if it is + enabled (NOT: by default). You will also want to set the dialog + X3_DLG_SADDLEBAG on the horse blueprint. Or, create your own dialog that + handles what the saddlebags one does. You will only be able to access + saddlebags of associates in your party. + + + [AREA RELATED VARIABLES TO SET] + =============================== + + X3_NO_HORSES = Horses not allowed in this area + + X3_NO_MOUNTING = Horses may not be ridden in this area and anyone attempting + to do so should be forcibly dismounted. + + X3_HITCHING_POST = if a placeable or waypoint in the area a person was in + before entering a new area has a tag of this then it will move any horses + to this object and set them to STAND_GUARD mode. + + X3_MOUNT_OK_EXCEPTION = is an integer that if set to 1 on this area will + override the external and underground restrictions for this area that may + be set module wide. + + fX3_MOUNT_MULTIPLE = is a floating point value that is multiplied times + all delays if it exists on the area. It can be used to make an area perform + the mounting animations at a different speed if you have really busy areas + and want to make the animation faster or slower. If this is not defined + then it will always be a value of 1.0. If it is set to 0.5 then delays + will be shortened by half. If it is set to 2.0 then the delays will take + 200% longer. This is something a module builder will need to be aware of + and can adjust. NOTE: This can be set on the PC as well and whichever number + is larger is the one that will be used. + + fX3_DISMOUNT_MULTIPLE = is similar to fX3_MOUNT_MULTIPLE and should only be + supplied if you want the dismount to use a different speed than the mount + multiple. It can be set on the area or on the PC. The PC will take + priority over the area. + + bX3_MOUNT_NO_ZAXIS = value to set to TRUE or 1 on the module, PC, or area + to indicate when calculating the proper mounting location you do not want + the Z Axis to be included in the measurement. This has been found to + work well in areas where you do not want the Z axis to be measured in terms + of whether to perform the mounting animation or not. + + X3_ABORT_WHEN_STUCK = if set to TRUE, distance between player and horse is + recorded and checked in each cycle against the current one, when moving to + a horse during the mounting procedure. Should the two ever be equal, meaning + that the player got stuck on his way to horse, the mounting procedure will + be terminated. This is handy in cases when horses are behind obstacles that + are hard to overcome like walls, but the timer that ensures that rider can + mount his horse even in difficult terrain, would eventually force-mount the + potential rider, which could seem like an illogical act. This doesn't need + to be used when using X3_HORSE_ACT_VS_DELAY option, where the timer starts + ticking only after the player gets as close as 1.5m to a horse. The switch + can be set on an area or horses (ie. using an OnEnter script of a trigger). + + + [MODULE RELATED VARIABLES TO SET] + ================================= + + X3_HORSE_PALADIN_USE_PHB = integer that if set to 1 on the module object + will cause the script to use paladin mount summoning durations as specified + in the Player's Handbook 3.5 edition rather than just defaulting to 24 hours. + + X3_HORSE_DISABLE_SPEED = integer that if set to 1 on the module object + will indicate you do not want a speed increase applied when a person mounts. + + X3_HORSE_DISABLE_SKILL = integer that if set to 1 on the module object will + indicate you do not want the skill decreases to be applied when a person + mounts. + + X3_HORSE_ENABLE_ACBOOST = integer that if set to 1 on the module object will + indicate that you want the PCs AC to be increased if need be to at least + match that of the horse that is being mounted. + + X3_HORSE_ENABLE_HPBOOST = integer that if set to 1 on the module object will + indicate that you want the PCs Hit Points to be increased by half of the + hit points of the mount when it is mounted. + + X3_NO_MOUNT_COMMANDABLE = integer that if set to 1 on the module object will + indicate that you do not want the SetCommandable() commands to be used with + the module. + + X3_NO_MOUNTED_COMBAT_FEAT = integer that if set to 1 on the module object + will indicate that you do not want the special code added to Bioware scripts + to try to support Mounted Combat close to how it is in Player's Handbook to + be used. + + X3_ENABLE_MOUNT_DAMAGE = integer that if set to 1 will attempt to transfer + some damage to the mount when a rider dismounts if damage occurred while + they were mounted. + + X3_ENABLE_MOUNT_DB = integer that if set to 1 will enable database and + persistent world support with this script. You will want to modify the + HORSE_Support functions related to the database so, that they write and + read properly however you have the database setup in your module. You will + also want to plan on using something like the x3_mod_def_hb script for your + module heartbeat script if you are going to use the database. This is not + used on modules by default. + + X3_NO_SHAPESHIFT_SPELL_CHECK = integer that if set to 1 on the module will + prevent the script from checking to see if a shapeshifted spell is targetted + on a mounted creature. If this variable is set to 1 then the + x2_inc_spellhook scripts will work exactly like they did before horses were + introduced with no concern whether the target is mounted or not. + + X3_MOUNT_NO_REST_DISMOUNT = integer that if set to 1 on the module will make + it so, you are able to rest while mounted. + + X3_MOUNT_NO_REST_DESPAWN = integer that if set to 1 on the module will make + it so, your paladin mount is not despawned when you rest and adheres + strictly to his summoned duration. If time is advanced by resting then + it is still possible it will despawn. + + X3_MOUNTS_EXTERNAL_ONLY = integer that if set to 1 on the module will make + it so mounts can only be ridden in external areas. There is an exception + variable that can be set on an area to override this. + + X3_MOUNTS_NO_UNDERGROUND = integer that if set to 1 on the module will make + it so mounts cannot be ridden in underground areas. There is an exception + variable that can be set on an area to override this. + + X3_HORSE_ENABLE_SADDLEBAGS = integer that if set to 1 on the module will + enable inventory support for the horse. NOTE: If you want it to use a quick + non-database method for storing the inventory place a waypoint with the tag + X3_HORSE_INVENTORY_STORAGE somewhere in an area that a PC can never get to. + If this waypoint does not exist then it will assume that the database is to + be used. If you are using a database it is adviseable that you change the + support functions because, they use the standard databases and it will often + prove slower than you may like. + + X3_SADDLEBAG_DATABASE = string to set to the name of the database to use + for storing saddlebag inventory. If no name is specified it will use the + module tag and a small modifier. + + X3_HORSE_NO_HENCHMAN_INCREASE = integer that if set to 1 on the module will + prevent the henchmen from being increased to make room for the horse. + + X3_HORSE_MAX_HENCHMEN = integer to set on the module to indicate the maximum + number of henchmen to allow it to be increased to in order to make room for + horses. By default there is no maximum. + + X3_HORSE_NO_CORPSES = integer to set on the module to 1 to indicate you + do not want lootable horse corpses created when a mounted PC or NPC dies. + + X3_RESTORE_HENCHMEN_LOCATIONS = integer to set to 1 on the module if you + want henchmen's henchmen to be restored to a location near the henchman that + is their master when a PC master of the henchman connects. This is NOT + enabled by default to prevent problems with older modules. + + X3_EXTEND_PALMOUNT = string variable that if set on the module object + will allow a person to extend this paladin mount script to call other + scripts in a daisy chain type situation such as saddle bag handling ones. + + X3_EXTEND_PALDMOUNT = string variable that if set on the module object + will allow a person to extend this paladin mount script to call other + scripts in a daisy chain type situation such as saddle bag handling ones. + + X3_HORSE_ACT_VS_DELAY = integer to set on the module to 1 to indicate you + want the system to use Actions as opposed to delays in some portions of the + mounting sequence. Doing this might provide another way to handle inaccessible + horses besides using X3_HORSE_NOT_RIDEABLE_OWNER. It may result in not + being able to access accidentally poorly placed horses due to scripts or + other factors but, it may be desired by some module designers so, it has + been provided as an option. + + + [ON THE MODULE or THE PLAYER] + ============================= + + X3_PALMOUNT_SUMMONOVR = string if set on the module or the player (player has + priority) it will do all the checks to see if a summon is okay. Then if + this variable is set it will execute the script you define here rather than + using the standard summon paladin mount function. Beware: If you use this + then handling all other aspects of this mount become your responsability. + + fX3_TIMEOUT_TO_MOUNT = value to set on the module or PC to indicate how long + the PC/NPC should attempt to move into a proper mounting animation to perform + the mounting animation. When this time is reached if it is still not in + position it will instant mount instead and will not animate. If this value is + lower than 6.0 or is not set, then the default value of 18.0 will be used. + + fX3_FREQUENCY = frequency of recursive call of the HorseMount() function to + try and initiate new pathfinding to the horse everytime until the character + reaches the mounting position or until the time limit for mounting is up or + unless X3_HORSE_ACT_VS_DELAY is set to TRUE, in which case the actionqueue + is not locked and moving towards a horse is interruptable, ie. by clicking. + if set larger than 9.0 or less than 1.0 the value defaults to 2.0 seconds. + + bX3_MOUNT_NO_ZAXIS = value to set to TRUE or 1 on the module, PC, or area + to indicate when calculating the proper mounting location you do not want + the Z Axis to be included in the measurement. This has been found to + work well in areas where you do not want the Z axis to be measured in terms + of whether to perform the mounting animation or not. + + + [SCRIPT TO OVERRIDE SKIN SYSTEM] + ================================ + + The skin system is designed to supply the horse radial menus to older characters + and it also is used to track some of the information about the state of the + PC semi-persistently. The system is setup in such a way that PRC or HCR or + other systems that use skins will still use their own skin as long as they + run first. If the horse system does not detect a skin it will create one. + Thus, if it runs before PRC or HCR create their skins there might be a problem. + To make this less of an upgrade nightmare the horse script includes support + for a hook script. If PRC, or HCR or other scripting package people create + a script named [x3_mod_pre_enter] and make that script add their skin to the + PC then this script WILL execute ALWAYS before the horse scripts create + their skin. This means all you need to do is make such a script and have + it add your skin and your scripts should function as they did before (EVEN) + if the horse scripts execute other aspects before yours. + + + [DEBUGGING AND TWEAKING SCRIPTS] + ================================ + + Press ~ in game to bring up console mode. Type DebugMode 1 and press enter. + Press ~ in game and this time type dm_runscript scriptname and press enter. + Press ~ in game and type DebugMode 0 when you want to disable debug mode. + SCRIPTS: + x3_fix_horse = use this when the PC is being treated as mounted when it is not + x3_fix_horseout = use this to make a module not designed with horses in mind + only allow horses in outside areas. + x3_fix_nocmd = set it not to use the SetCommandable with mounting toggle + x3_fix_act = set to use actions when mounting toggle + x3_fix_speed100 = mount/dismount speed multiple set to normal 100% + x3_fix_speed125 = mount/dismount speed multiple set to 1255 (25% slower) + x3_fix_speed150 = mount/dismount speed multiple set to 150% (50% slower) + x3_fix_speed200 = mount/dismount speed multiple set to 200% (100% slower) + + +*/ + +//////////////////////////////////////////////////////////////////////////////// +/////////////////////////////// CONSTANTS ////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + + +const string X3_HORSE_DATABASE = "X3HORSE"; + +// The following constants are provided to facilitate extending the system +// if need be. They are also provided in the event that a hak pack used +// in a module might rearrange the location of some of the aspects needed +// to handle horses. +// This constant points to the location in the appearance.2da where the +// unmounted horse appearances occur. +const int HORSE_APPEARANCE_OFFSET = 496; +// This constant points to the location in the tails.2da where the horse +// appearances begin. +const int HORSE_TAIL_OFFSET = 15; +// This constant lists how many horses are listed beginning at the location +// specified by the offset. +const int HORSE_NUMBER_OF_HORSES = 65; +// This is the prefix that should be used with the paladin mounts when spawning +// them. +const string HORSE_PALADIN_PREFIX = "x3_palhrs"; +// The constants that follow here specify what appearance to use when scaling +// the horse as a tail during mounting process to make the animation be handled +// properly. +const int HORSE_NULL_RACE_DWARF = 562; +const int HORSE_NULL_RACE_ELF = 563; +const int HORSE_NULL_RACE_HALFLING = 565; +const int HORSE_NULL_RACE_HUMAN = 568; +const int HORSE_NULL_RACE_HALFELF = 566; +const int HORSE_NULL_RACE_HALFORC = 567; +const int HORSE_NULL_RACE_GNOME = 564; +// The constants that follow here specify the appearance that should be used +// when the specified mount is mounted. These appearances are often required +// to set the proper speeds, radiuses, etc. They also have the complete +// phenotypes and animations associated with them. +const int HORSE_RACE_MOUNTED_DWARFM = 483; +const int HORSE_RACE_MOUNTED_DWARFF = 482; +const int HORSE_RACE_MOUNTED_ELFM = 485; +const int HORSE_RACE_MOUNTED_ELFF = 484; +const int HORSE_RACE_MOUNTED_GNOMEM = 487; +const int HORSE_RACE_MOUNTED_GNOMEF = 486; +const int HORSE_RACE_MOUNTED_HALFLINGM= 489; +const int HORSE_RACE_MOUNTED_HALFLINGF= 488; +const int HORSE_RACE_MOUNTED_HALFELFM = 491; +const int HORSE_RACE_MOUNTED_HALFELFF = 490; +const int HORSE_RACE_MOUNTED_HALFORCM = 493; +const int HORSE_RACE_MOUNTED_HALFORCF = 492; +const int HORSE_RACE_MOUNTED_HUMANM = 495; +const int HORSE_RACE_MOUNTED_HUMANF = 494; +// The following constants indicate which phenotype numbers should be used by +// the mounting system. _N specifies the mounting race started as a normal +// phenotype, and _L specifies the race started as a large phenotype. +const int HORSE_PHENOTYPE_MOUNTED_N = 3; +const int HORSE_PHENOTYPE_MOUNTED_L = 5; +const int HORSE_PHENOTYPE_JOUSTING_N = 6; +const int HORSE_PHENOTYPE_JOUSTING_L = 8; +// The following constants indicate which animation numbers indicate which +// animations can be used well with the horse system. +const int HORSE_ANIMATION_MOUNT = 41; +const int HORSE_ANIMATION_DISMOUNT = 42; +const int HORSE_ANIMATION_LOOPING_JOUST_VIOLENT_FALL = ANIMATION_LOOPING_CUSTOM3; +const int HORSE_ANIMATION_LOOPING_JOUST_GLANCE = ANIMATION_LOOPING_CUSTOM4; +const int HORSE_ANIMATION_LOOPING_JOUST_FALL = ANIMATION_LOOPING_CUSTOM5; +const int HORSE_ANIMATION_LOOPING_JOUST_STAB = ANIMATION_LOOPING_CUSTOM10; +const int HORSE_ANIMATION_LOOPING_JOUST_HELMOFF = ANIMATION_LOOPING_CUSTOM4; +// The following constant defines what footstep sound should be used when +// the horse is mounted. +const int HORSE_FOOTSTEP_SOUND = 17; +// The following constant defines the duration in seconds that it should take +// to complete the default animation. +const float HORSE_MOUNT_DURATION = 2.0f; +// The following constant defines the duration in seconds that it should take +// to complete the default animation. +const float HORSE_DISMOUNT_DURATION = 3.0f; +// The following constants refer to specific feats that might be needed to +// handle horses +const int IP_CONST_HORSE_MENU = 40; +// The constant below designates the default speed increase that should be +// granted when a person mounts a horse. +const int HORSE_DEFAULT_SPEED_INCREASE= 99; +// The following constants were added to support the new feats. When these +// constants are added to the master constants list they can be removed from +// this part of the script. +//const int FEAT_MOUNTED_COMBAT = 1087; +//const int FEAT_MOUNTED_ARCHERY = 1088; +// Scripts called by the above feats +// x3_s3_horse +// x3_s3_palmount + +// This constant is a safety to be inserted between the ClearAllActions and +// a command to play a dismount animation. If set to 0.0 or if missing, the +// dismount animation will not play properly when trying to dismount a horse +// while in motion. If you ever encounter problems with mounting animation, +// try inserting this small delay in the same fashion in the animated mounting +// procedure. All pending DelayCommands shall respect this delay accordingly +// for the sake of precise timing. Values of 0.8f and above are safe to use. +const float X3_ACTION_DELAY = 0.8f; + + +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////// PROTOTYPES //////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + + +// FILE: x3_inc_horse FUNCTION: HorseMount() +// This function will cause the calling object to attempt to mount oHorse. +// If bAnimate is set to TRUE this will cause the calling object and oHorse +// to be involved in the complete animating process. If you bAnimate is false +// and bInstant is false the caller will still walk to the horse before mounting. +// If bAnimate is false and bInstant is TRUE then the script will immediately +// mount oHorse without any moving (this is the quickest method if needed for +// situations like cutscenes). nState is a variable used by the function itself +// and need not be adjusted when this function is called. +void HorseMount(object oHorse,int bAnimate=TRUE,int bInstant=FALSE,int nState=0); + + +// FILE: x3_inc_horse FUNCTION: HorseDismount() +// This function will cause the calling object to dismount if it is mounted. If +// bAnimate is TRUE then it will animate the dismount. If bOwner is set to +// TRUE then it will set the object that dismounted as the owner. This function +// will return the object that is the dismounted horse. +object HorseDismount(int bAnimate=TRUE,int bSetOwner=TRUE); + + +// FILE: x3_inc_horse FUNCTION: HorseSetOwner() +// This function will set oOwner as the owner of oHorse. If bAssign is set to +// TRUE it will also set this horse to be oOwners assigned mount. This is not +// done by default so more than one mount can be assigned to a single target if +// need be. +void HorseSetOwner(object oHorse,object oOwner,int bAssign=FALSE); + + +// FILE: x3_inc_horse FUNCTION: HorseRemoveOwner() +// This function will remove the owner from oHorse. This will not work on +// Paladin mounts. +void HorseRemoveOwner(object oHorse); + + +// FILE: x3_inc_horse FUNCTION: HorseGetCanBeMounted() +// This function will return TRUE if oTarget can be mounted. If oRider is +// specified it will also make sure that oTarget can be ridden by oRider. +// The bAssignMount field should be set to TRUE if the call of this function +// should ignore whether someone can mount a horse in the area or not. +int HorseGetCanBeMounted(object oTarget,object oRider=OBJECT_INVALID,int bAssignMount=FALSE); + + +// FILE: x3_inc_horse FUNCTION: HorseSummonPaladinMount() +// This function can be used to cause the calling object to summon the paladin +// mount. If bPHBDuration is set to TRUE then the mount will use the Players +// Handbook 3.0 edition rules for the duration that the mount will stay around. +object HorseSummonPaladinMount(int bPHBDuration=FALSE); + + +// FILE: x3_inc_horse FUNCTION: HorseUnsummonPaladinMount() +// This function can be used to cause the calling object to unsummon its paladin +// mount. +void HorseUnsummonPaladinMount(); + + +// FILE: x3_inc_horse FUNCTION: HorseGetIsMounted() +// This function will return TRUE if oTarget is mounted. +int HorseGetIsMounted(object oTarget); + + +// FILE: x3_inc_horse FUNCTION: HorseCreateHorse() +// This function will create a horse based on the blueprint sResRef at location +// lLoc and will set the owner of the horse to oOwner. If sTag is set to +// something other than "" it will set the horse to that tag. If nAppearance, +// nTail, and nFootstep are set to something other than -1 then it will set the +// horse to that appearance, tail, or footstep. The function will return the +// horse that is spawned. This function is setup the way it is so, that you +// could potentially use a single blueprint to store multiple appearance horses. +// sScript is a specific script that should be executed on the horse after it is +// spawned. This is again supplied to further support multiple horses with a +// single blueprint. +object HorseCreateHorse(string sResRef,location lLoc,object oOwner=OBJECT_INVALID,string sTag="",int nAppearance=-1,int nTail=-1,int nFootstep=-1,string sScript=""); + + +// FILE: x3_inc_horse FUNCTION: HorseGetOwner() +// This function will return an object pointer to whom the owner of oHorse is +// if there is a valid horse. If there is no owner it will return +// OBJECT_INVALID. +object HorseGetOwner(object oHorse); + + +// FILE: x3_inc_horse FUNCTION: HorseSetPhenotype() +// This function will set oRider to the correct mounted phenotype for riding +// a horse. If bJoust is set to TRUE it will set oRider to the mounted jousting +// phenotype. This is a special phenotype with differing animation sets and +// designed to hold the lance in a very specific way. +void HorseSetPhenotype(object oRider,int bJoust=FALSE); + + +// FILE: x3_inc_horse FUNCTION: HorseInstantMount() +// This function is primarily supplied for cutscenes and other instances where +// you simply need oRider to be switched to mounted mode as quickly as possible +// without preserving any variables or anything. However, you can store a +// resref for the horse to dismount by setting sResRef. If bJoust is set to +// TRUE then it will use the Joust Phenotypes. +// WARNING: This does not care whether someone meets the criteria to mount, +// or even if they are already mounted. It will simply set them to the +// proper appearance and mode. The ResRef is provided only in case someone +// uses HorseDismount() instead of using HorseInstantDismount() with this +// rider. It is recommended this function only be used in conjunction with +// HorseInstantDismount(). +void HorseInstantMount(object oRider,int nTail,int bJoust=FALSE,string sResRef=""); + + +// FILE: x3_inc_horse FUNCTION: HorseInstantDismount() +// This function is used to rapidly dismount oRider and does not produce a horse +// object. It's intended usage is with cutscenes or other instances where +// having oRider dismounted as quickly as possible are required. This will not +// produce horse/mount as it is primarily intende for cutscene work and not +// intended to replace the HorseDismount() function in other cases. +// WARNING: This does not protect Saddlebags so, it is recommended this only +// be used in conjunction with HorseInstantMount. If you need to protect +// saddlebag contents use HorseDismount(). +void HorseInstantDismount(object oRider); + + +// FILE: x3_inc_horse FUNCTION: HorseGetMountTail() +// This function will return the tail that should be used with the specified +// horse. +int HorseGetMountTail(object oHorse); + + +// FILE: x3_inc_horse FUNCTION: HorseGetMountFailureMessage() +// This is a companion function to HorseGetCanBeMounted. If you need a text +// message that explains why the horse cannot be mounted. +string HorseGetMountFailureMessage(object oTarget,object oRider=OBJECT_INVALID); + + +// FILE: x3_inc_horse FUNCTION: HorseAddHorseMenu() +// This function will add horse menus to the respective PC. This is only +// needed for PCs that were not created new using patch 1.69. +void HorseAddHorseMenu(object oPC); + + +// FILE: x3_inc_horse FUNCTION: HorseGetPaladinMount() +// If this rider has a paladin mount then it will be returned as the object. +// If the rider is currently riding their paladin mount then it will return +// oRider as the object. If no paladin mount currently exists for oRider it +// will return OBJECT_INVALID. +object HorseGetPaladinMount(object oRider); + + +// FILE: x3_inc_horse FUNCTION: HorseGetIsAMount() +// This will return TRUE if oTarget is a mountable creature. +int HorseGetIsAMount(object oTarget); + + +// FILE: x3_inc_horse FUNCTION: HorseGetIsDisabled() +// This function detects if oCreature is in a disabled state. Can be used to +// detect disabling effects such as death, fear, confusion, sleep, paralysis, +// petrify, stun, entangle and knockdown (also applied in a non-hostile way, +// where oCreature doesn't enter a combat state) +int HorseGetIsDisabled(object oCreature=OBJECT_SELF); + + +// FILE: x3_inc_horse FUNCTION: HorseReloadFromDatabase() +// This function is provided for use with an OnClientEnter script when you +// are using a persistent world type environment and need the PC's mounted +// state reloaded. This will also make sure that henchmen for the PC are also +// restored as they were. +void HorseReloadFromDatabase(object oPC,string sDatabase); + + +// FILE: x3_inc_horse FUNCTION: HorseSaveToDatabase() +// This will save all of the current status for the PC and the PCs henchmen. +void HorseSaveToDatabase(object oPC,string sDatabase); + + +// FILE: x3_inc_horse FUNCTION: HorseStoreInventory() +// This function is used to store inventory of the horse for later recovery. +// See x3_inc_horse for complete details. +void HorseStoreInventory(object oCreature,object oRider=OBJECT_INVALID); + + +// FILE: x3_inc_horse FUNCTION: HorseRestoreInventory() +// This function is used to return stored inventory back onto the horse +// See x3_inc_horse for complete details. If bDrop is set to TRUE then it +// will drop the contents where the horse is rather than putting them on the +// horse. bDrop was primarily intended for cases where a mounted PC dies. +void HorseRestoreInventory(object oCreature,int bDrop=FALSE); + + +// FILE: x3_inc_horse FUNCTION: HorseChangeToDefault() +// This function will set oCreature to the default racial appearance and is +// useful for reversing any situations where a creature or PC is stuck in some +// variation of a mounted appearance. This will also clear ANY information +// stored on the creature relating to mounting. NOTE: If the target had a +// tail when not mounted this function will not restore that. +void HorseChangeToDefault(object oCreature); + + +// FILE: x3_inc_horse FUNCTION: HorseIfNotDefaultAppearanceChange() +// This funtion will check the appearance of oCreature, If it is not set to +// the default racial appearance (see racialtypes.2da) then it will call the +// HorseChangeToDefault() function. +void HorseIfNotDefaultAppearanceChange(object oCreature); + + +// FILE: x3_inc_horse FUNCTION: HorseGetMyHorse() +// When oRider is dismounted, this function returns the horse currently assigned +// to oRider (OBJECT_INVALID if there is none). In certain script hooks +// (pre-mount, post-mount and post-dismount), the function returns the horse +// that is currently being mounted / dismounted. It should not be used when the +// rider is mounted, or in a pre-dismount script hook. +object HorseGetMyHorse(object oRider); + + +// FILE: x3_inc_horse FUNCTION: HorseGetHasAHorse() +// This function will return TRUE if oRider has a mount or horse. +int HorseGetHasAHorse(object oRider); + + +// FILE: x3_inc_horse FUNCTION: HorseGetHorse() +// This function will return the nNth horse that is owned by oRider. +object HorseGetHorse(object oRider,int nN=1); + + +// FILE: x3_inc_horse FUNCTION: HorseRestoreHenchmenLocations() +// This function will check the module variable X3_RESTORE_HENCHMEN_LOCATIONS +// which when set to TRUE on the module will cause this function to jump any +// npc henchmen to the PC and will also make sure their henchmen also jump. +// This function is provided so, that there exists a function which will remain +// true to whether henchmen are mounted in no mount areas and whether mounts are +// prevented from entering no mount areas. This is not the perfect function +// but, it will address some of the issues with the engine not restoring the +// locations of henchmen belonging to henchmen on a module reload. This will +// actually NOT jump henchmen to the PC. It's primary purpose is to make sure +// that henchmen belonging to the henchman are jumped to the proper location. +// It is assumed that the henchman that is their master will already be at the +// proper location due to a reload or due to a respawn from some special script +// for the server. +void HorseRestoreHenchmenLocations(object oPC); + + +// FILE: x3_inc_horse FUNCTION: HorseHitchHorses() +// This function is designed to be used in conjunction with a transition script. +// oHitch is an object to hitch horses/mounts near. If it is OBJECT_INVALID +// then a specific destination to hitch will not be used. oClicker is who +// clicked the area transistion. lPreJump is a pre-transition location which +// is used to determine where the horses should stay near (actually walk a +// small distance away) if they do not transition. +void HorseHitchHorses(object oHitch,object oClicker,location lPreJump); + + +// FILE: x3_inc_horse FUNCTION: HorseForceJump() +// This is used to make sure oJumper makes it to withing fRange of oDestination. +// The nTimeOut is used to set a maximum number of attempts that will be made. +void HorseForceJump(object oJumper,object oDestination,float fRange=2.0,int nTimeOut=10); + + +// FILE: x3_inc_horse FUNCTION: HorseMoveAssociates() +// This function is intended to be used after a transition has been made and +// oMaster has moved onto the target destination. This function will cause +// any associates that also transitioned to move away from oMaster a small +// amount to make sure they do not block movement for oMaster. This can be +// particularly important when you consider horses have a bit more personal +// space requirements than the traditional associate. +void HorseMoveAssociates(object oMaster); + + +// FILE: x3_inc_horse FUNCTION: HorsePreloadAnimations() +// The mount and dismount animations are rather complex and by default the +// aurora engine does not always preload these animations. This function was +// created to temporarily set the tail and appearance of a PC to that of one of +// the horse models that will thus, force preloading of the animations. After +// that is done the animations should played properly. This is a good function +// to call in the OnEnter script of the module or similar location. +void HorsePreloadAnimations(object oPC); + + +//////////////////////////////////////////////////////////////////////////////// +// SUPPORT FUNCTIONS +//----------------------------- +// These functions are not intended to be called by external scripts to this +// file and are simply used as support functions called by other functions +// from within this script. +//////////////////////////////////////////////////////////////////////////////// + + +int HORSE_SupportGetMountedAppearance(object oRider) +{ // PURPOSE: Return which appearance the rider should use when mounted + int nRace=GetRacialType(oRider); + int nGender=GetGender(oRider); + if (GetLocalInt(oRider,"X3_CUSTOM_RACE_MOUNTED_APPEARANCE")>0) return GetLocalInt(oRider,"X3_CUSTOM_RACE_MOUNTED_APPEARANCE"); + if (nGender==GENDER_FEMALE) + { // female + if (nRace==RACIAL_TYPE_DWARF) return HORSE_RACE_MOUNTED_DWARFF; + else if (nRace==RACIAL_TYPE_ELF) return HORSE_RACE_MOUNTED_ELFF; + else if (nRace==RACIAL_TYPE_GNOME) return HORSE_RACE_MOUNTED_GNOMEF; + else if (nRace==RACIAL_TYPE_HALFLING) return HORSE_RACE_MOUNTED_HALFLINGF; + else if (nRace==RACIAL_TYPE_HALFELF) return HORSE_RACE_MOUNTED_HALFELFF; + else if (nRace==RACIAL_TYPE_HALFORC) return HORSE_RACE_MOUNTED_HALFORCF; + else if (nRace==RACIAL_TYPE_HUMAN) return HORSE_RACE_MOUNTED_HUMANF; + } // female + else + { // male + if (nRace==RACIAL_TYPE_DWARF) return HORSE_RACE_MOUNTED_DWARFM; + else if (nRace==RACIAL_TYPE_ELF) return HORSE_RACE_MOUNTED_ELFM; + else if (nRace==RACIAL_TYPE_GNOME) return HORSE_RACE_MOUNTED_GNOMEM; + else if (nRace==RACIAL_TYPE_HALFLING) return HORSE_RACE_MOUNTED_HALFLINGM; + else if (nRace==RACIAL_TYPE_HALFELF) return HORSE_RACE_MOUNTED_HALFELFM; + else if (nRace==RACIAL_TYPE_HALFORC) return HORSE_RACE_MOUNTED_HALFORCM; + else if (nRace==RACIAL_TYPE_HUMAN) return HORSE_RACE_MOUNTED_HUMANM; + } // male + return GetAppearanceType(oRider); +} // HORSE_SupportGetMountedAppearance() + + +string HORSE_SupportRaceRestrictString(object oRider) +{ // PURPOSE: This will return the race restriction string to use for oRider + string sRet="X3_HORSE_RESTRICT_"; + int nRace=GetRacialType(oRider); + if (GetObjectType(oRider)==OBJECT_TYPE_CREATURE) + { // valid + if (nRace==RACIAL_TYPE_DWARF) sRet=sRet+"DWARF"; + else if (nRace==RACIAL_TYPE_ELF) sRet=sRet+"ELF"; + else if (nRace==RACIAL_TYPE_GNOME) sRet=sRet+"GNOME"; + else if (nRace==RACIAL_TYPE_HALFELF) sRet=sRet+"HALFELF"; + else if (nRace==RACIAL_TYPE_HALFLING) sRet=sRet+"HALFLING"; + else if (nRace==RACIAL_TYPE_HALFORC) sRet=sRet+"HALFORC"; + else if (nRace==RACIAL_TYPE_HUMAN) sRet=sRet+"HUMAN"; + else {sRet=sRet+"CUSTOM"+IntToString(nRace);} + } // valid + return sRet; +} // HORSE_SupportRaceRestrictString(oRider) + + +string HORSE_SupportMountResRef(object oRider) +{ // PURPOSE: Return the resref of the mount oRider is on + if (GetObjectType(oRider)==OBJECT_TYPE_CREATURE) + { // valid parameter + return GetSkinString(oRider,"sX3_HorseResRef"); + } // valid parameter + return ""; +} // HORSE_SupportMountResRef() + + +int HORSE_SupportMountAppearance(object oRider) +{ // PURPOSE: Return the appearance of the mount oRider is on + if (GetObjectType(oRider)==OBJECT_TYPE_CREATURE) + { // valid parameter + return GetSkinInt(oRider,"nX3_HorseAppearance"); + } // valid parameter + return -1; +} // HORSE_SupportMountAppearance() + + +int HORSE_SupportMountTail(object oRider) +{ // PURPOSE: Return the tail of the mount oRider is on + if (GetObjectType(oRider)==OBJECT_TYPE_CREATURE) + { // valid parameter + return GetCreatureTailType(oRider); + } // valid parameter + return -1; +} // HORSE_SupportMountTail() + + +int HORSE_SupportMountFootstep(object oRider) +{ // PURPOSE: Return the footstep sound of the rider is supposed to be when not + // mounted + if (GetObjectType(oRider)==OBJECT_TYPE_CREATURE) + { // valid parameter + return GetSkinInt(oRider,"nX3_StoredFootstep"); + } // valid parameter + return -1; +} // HORSE_SupportMountFootstep() + + +string HORSE_SupportMountTag(object oRider) +{ // PURPOSE: Return the tag of the mount that rider is riding + if (GetObjectType(oRider)==OBJECT_TYPE_CREATURE) + { // valid parameter + return GetSkinString(oRider,"sX3_HorseMountTag"); + } // valid parameter + return ""; +} // HORSE_SupportMountTag() + + +string HORSE_SupportMountScript(object oRider) +{ // PURPOSE: Return the post spawn script to run for the horse oRider is riding + if (GetObjectType(oRider)==OBJECT_TYPE_CREATURE) + { // valid parameter + return GetLocalString(oRider,"sX3_HorseMountString"); + } // valid parameter + return ""; +} // HORSE_SupportMountScript() + + +int HORSE_SupportRiderAppearance(object oRider) +{ // PURPOSE: Return the appearance of oRider when not mounted + if (GetObjectType(oRider)==OBJECT_TYPE_CREATURE) + { // valid parameter + return GetSkinInt(oRider,"nX3_HorseRiderAppearance"); + } // valid parameter + return -1; +} // HORSE_SupportRiderAppearance() + + +int HORSE_SupportRiderPhenotype(object oRider) +{ // PURPOSE: Return the phenotype of the rider when not mounted + if (GetObjectType(oRider)==OBJECT_TYPE_CREATURE) + { // valid parameter + if (GetLocalInt(oRider,"X3_CUSTOM_RACE_PHENOTYPE")) return GetLocalInt(oRider,"X3_CUSTOM_RACE_PHENOTYPE"); + return GetSkinInt(oRider,"nX3_HorseRiderPhenotype"); + } // valid parameter + return -1; +} // HORSE_SupportRiderPhenotype() + + +void HORSE_SupportCleanVariables(object oTarget) +{ // PURPOSE: Remove any mount related variables after dismount + DeleteLocalInt(oTarget,"X3_HORSE_NULL_APPEARANCE"); + //DeleteSkinInt(oTarget,"X3_HORSE_APPEARANCE"); + DeleteLocalInt(oTarget,"X3_HORSE_TAIL"); + //DeleteSkinInt(oTarget,"nX3_HorseRiderAppearance"); + //DeleteSkinInt(oTarget,"nX3_HorseRiderPhenotype"); + //DeleteSkinInt(oTarget,"nX3_StoredFootstep"); + DeleteSkinString(oTarget,"X3_HORSE_PREDISMOUNT_SCRIPT"); + DeleteSkinString(oTarget,"X3_HORSE_POSTDISMOUNT_SCRIPT"); + DeleteLocalString(oTarget,"X3_HORSE_PREMOUNT_SCRIPT"); + DeleteLocalString(oTarget,"X3_HORSE_POSTMOUNT_SCRIPT"); + DeleteSkinString(oTarget,"sX3_HorseResRef"); + DeleteSkinString(oTarget,"sX3_HorseMountTag"); + DeleteLocalString(oTarget,"sX3_HorseMountScript"); + DeleteLocalInt(oTarget,"X3_NO_MOUNT_CUTSCENE"); + DeleteLocalInt(oTarget,"X3_NO_MOUNT_ANIMATE"); + DeleteLocalInt(oTarget,"nX3_RiderHP"); + DeleteSkinInt(oTarget,"nX3_HorseHP"); + DeleteLocalInt(oTarget,"nX3_HorsePortrait"); + DeleteLocalInt(oTarget,"bX3_HAS_SADDLEBAGS"); + DeleteLocalString(oTarget,"sDB_Inv"); + DeleteSkinInt(oTarget,"bX3_IS_MOUNTED"); + DeleteLocalInt(oTarget,"nX3_StoredMountState"); + DeleteLocalInt(oTarget,"X3_ABORT_WHEN_STUCK"); + //DeleteSkinInt(oTarget,"nX3_HorseRiderTail"); +} // HORSE_SupportCleanVariables() + + +void HORSE_SupportMountCleanVariables(object oRider) +{ // PURPOSE: Clean variables off of oRider related to the mount + if (GetObjectType(oRider)==OBJECT_TYPE_CREATURE) + { // valid parameter + HORSE_SupportCleanVariables(oRider); + } // valid parameter +} // HORSE_SupportMountCleanVariables() + + +location HORSE_SupportGetMountLocation(object oCreature,object oRider,float fDirection=90.0) +{ // PURPOSE: To Locate the location to place the mount + object oArea=GetArea(oCreature); + vector vPos=GetPosition(oCreature); + float fFace=GetFacing(oCreature); + location lLoc; + float fDist=0.8*StringToFloat(Get2DAString("appearance","WING_TAIL_SCALE",HORSE_SupportGetMountedAppearance(oRider))); + lLoc=Location(oArea,vPos+fDist*AngleToVector(fFace-fDirection),fFace); + return lLoc; +} // HORSE_SupportGetMountLocation() + + +int HORSE_SupportNullAppearance(object oHorse,object oRider) +{ // PURPOSE: This will return which appearance should be used to handle animation + int nRace; + if (GetLocalInt(oHorse,"X3_HORSE_NULL_APPEARANCE")>0) return GetLocalInt(oHorse,"X3_HORSE_NULL_APPEARANCE"); + nRace=GetRacialType(oRider); + if (nRace==RACIAL_TYPE_DWARF) return HORSE_NULL_RACE_DWARF; + else if (nRace==RACIAL_TYPE_ELF) return HORSE_NULL_RACE_ELF; + else if (nRace==RACIAL_TYPE_GNOME) return HORSE_NULL_RACE_GNOME; + else if (nRace==RACIAL_TYPE_HALFELF) return HORSE_NULL_RACE_HALFELF; + else if (nRace==RACIAL_TYPE_HALFLING) return HORSE_NULL_RACE_HALFLING; + else if (nRace==RACIAL_TYPE_HALFORC) return HORSE_NULL_RACE_HALFORC; + return HORSE_NULL_RACE_HUMAN; +} // HORSE_SupportNullAppearance() + + +int Horse_SupportRaceAppearance(int nAppearance) +{ // PURPOSE: This will return TRUE if the appearance passed as a parameter + // is an appearance used as part of the mounting process. + if (nAppearance==HORSE_RACE_MOUNTED_DWARFF) return TRUE; + else if (nAppearance==HORSE_RACE_MOUNTED_DWARFM) return TRUE; + else if (nAppearance==HORSE_RACE_MOUNTED_ELFF) return TRUE; + else if (nAppearance==HORSE_RACE_MOUNTED_ELFM) return TRUE; + else if (nAppearance==HORSE_RACE_MOUNTED_GNOMEF) return TRUE; + else if (nAppearance==HORSE_RACE_MOUNTED_GNOMEM) return TRUE; + else if (nAppearance==HORSE_RACE_MOUNTED_HALFELFF) return TRUE; + else if (nAppearance==HORSE_RACE_MOUNTED_HALFELFM) return TRUE; + else if (nAppearance==HORSE_RACE_MOUNTED_HALFLINGF) return TRUE; + else if (nAppearance==HORSE_RACE_MOUNTED_HALFLINGM) return TRUE; + else if (nAppearance==HORSE_RACE_MOUNTED_HALFORCF) return TRUE; + else if (nAppearance==HORSE_RACE_MOUNTED_HALFORCM) return TRUE; + else if (nAppearance==HORSE_RACE_MOUNTED_HUMANF) return TRUE; + else if (nAppearance==HORSE_RACE_MOUNTED_HUMANM) return TRUE; + return FALSE; +} // Horse_SupportRaceAppearance() + + +void HORSE_SupportIncreaseSpeed(object oRider,object oHorse) +{ // PURPOSE: Change the movement speed based on that of the horse (wont work unless EffectMovementSpeedIncrease() bug is fixed) + if (GetLocalInt(GetModule(),"X3_HORSE_DISABLE_SPEED")) return; + int nSpeed=GetLocalInt(oHorse,"X3_HORSE_MOUNT_SPEED"); + effect eMovement; + float fSpeed; + int nMonkEpic; + int nMonk=GetLevelByClass(CLASS_TYPE_MONK,oRider); + if (nSpeed==0) nSpeed=HORSE_DEFAULT_SPEED_INCREASE; + if (nSpeed>50) nSpeed=50; // upper limit + if (nSpeed<-100) nSpeed=-100; + if (nMonk>2) + { // find out monk adjustment + nSpeed-=10*nMonk/3; + //nSpeed-=GetBuggedSpeedAdjustment(oRider)+10*nMonk/3; + } // find out monk adjustment + if (GetLevelByClass(CLASS_TYPE_BARBARIAN,oRider)>0) + { // barbarian class adjustment + nSpeed-=10; + //nSpeed-=GetBuggedSpeedAdjustment(oRider)+10; + } // barbarian class adjustment + if (nSpeed<-150) nSpeed=-150; + SetLocalInt(oRider,"nX3_SpeedIncrease",nSpeed); + eMovement=SupernaturalEffect(EffectMovementSpeedIncrease(nSpeed)); // EffectMovementSpeedIncrease() with negative numbers is the same as EffectMovementSpeedDecrease() with positive numbers + ApplyEffectToObject(DURATION_TYPE_PERMANENT,eMovement,oRider); +} // HORSE_SupportIncreaseSpeed() + + +void HORSE_SupportOriginalSpeed(object oRider) +{ // PURPOSE: Remove speed increases based upon mounted + if (GetLocalInt(GetModule(),"X3_HORSE_DISABLE_SPEED")) return; + effect eSearch=GetFirstEffect(oRider); + while(GetIsEffectValid(eSearch)) + { // cycle through effects + if((GetEffectType(eSearch) == EFFECT_TYPE_MOVEMENT_SPEED_INCREASE) && + (GetEffectDurationType(eSearch) == DURATION_TYPE_PERMANENT) && + (GetEffectSubType(eSearch) == SUBTYPE_SUPERNATURAL)) + { // check to see if matches conditions + RemoveEffect(oRider,eSearch); + } // check to see if matches conditions + eSearch=GetNextEffect(oRider); + } // cycle through effects +} // HORSE_SupportOriginalSpeed() + + +void HORSE_SupportAdjustMountedArcheryPenalty(object oRider) +{ // PURPOSE: Check for feats and adjust penalties to archery while mounted + int nMountedArcheryPenalty=GetLocalInt(oRider,"nX3_MountedArchery"); + int nNewPenalty; + effect eEffect; + int bMatched; + //if (HorseGetIsMounted(oRider)&&GetWeaponRanged(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oRider))) + if (HorseGetIsMounted(oRider)&&GetLocalInt(oRider,"bX3_M_ARCHERY")) + { // Rider is mounted and has a ranged weapon - apply penalty + nNewPenalty=4; + if (GetHasFeat(FEAT_MOUNTED_ARCHERY,oRider)) nNewPenalty=2; + if (nNewPenalty!=nMountedArcheryPenalty&&nMountedArcheryPenalty>0) + { // remove existing penalties before applying the new one + eEffect=GetFirstEffect(oRider); + bMatched=FALSE; + while(GetIsEffectValid(eEffect)&&!bMatched) + { // traverse effects + if ((GetEffectType(eEffect)==EFFECT_TYPE_ATTACK_DECREASE)&& + (GetEffectSubType(eEffect)==SUBTYPE_SUPERNATURAL)&& + (GetEffectDurationType(eEffect)==DURATION_TYPE_PERMANENT)) + { // match + RemoveEffect(oRider,eEffect); + bMatched=TRUE; + } // match + eEffect=GetNextEffect(oRider); + } // traverse effects + } // remove existing penalties before applying the new one + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectAttackDecrease(nNewPenalty)),oRider); + SetLocalInt(oRider,"nX3_MountedArchery",nNewPenalty); + } // Rider is mounted and has a ranged weapon - apply penalty + else if (nMountedArcheryPenalty) + { // no penalty needed - remove it + eEffect=GetFirstEffect(oRider); + bMatched=FALSE; + while(GetIsEffectValid(eEffect)&&!bMatched) + { // traverse effects + if ((GetEffectType(eEffect)==EFFECT_TYPE_ATTACK_DECREASE)&& + (GetEffectSubType(eEffect)==SUBTYPE_SUPERNATURAL)&& + (GetEffectDurationType(eEffect)==DURATION_TYPE_PERMANENT)) + { // match + RemoveEffect(oRider,eEffect); + bMatched=TRUE; + } // match + eEffect=GetNextEffect(oRider); + } // traverse effects + DeleteLocalInt(oRider,"nX3_MountedArchery"); + } // no penalty needed - remove it +} // HORSE_SupportAdjustMountedArcheryPenalty() + + +void HORSE_SupportApplyMountedSkillDecreases(object oRider) +{ // PURPOSE: Applies decreases to skills while mounted + if (GetLocalInt(GetModule(),"X3_HORSE_DISABLE_SKILL")) return; + object oMod=GetModule(); + effect eDisarmTrap = SupernaturalEffect(EffectSkillDecrease(SKILL_DISABLE_TRAP , 50)); + effect eOpenLock = SupernaturalEffect(EffectSkillDecrease(SKILL_OPEN_LOCK , 50)); + effect eHide = SupernaturalEffect(EffectSkillDecrease(SKILL_HIDE , 50)); + effect eMove = SupernaturalEffect(EffectSkillDecrease(SKILL_MOVE_SILENTLY, 50)); + effect ePickPocket = SupernaturalEffect(EffectSkillDecrease(SKILL_PICK_POCKET , 50)); + effect eSetTrap = SupernaturalEffect(EffectSkillDecrease(SKILL_SET_TRAP , 50)); + effect eTumble = SupernaturalEffect(EffectSkillDecrease(SKILL_TUMBLE , 50)); + AssignCommand(oMod,ApplyEffectToObject(DURATION_TYPE_PERMANENT,eDisarmTrap,oRider)); + AssignCommand(oMod,ApplyEffectToObject(DURATION_TYPE_PERMANENT,eOpenLock,oRider)); + AssignCommand(oMod,ApplyEffectToObject(DURATION_TYPE_PERMANENT,eHide,oRider)); + AssignCommand(oMod,ApplyEffectToObject(DURATION_TYPE_PERMANENT,eMove,oRider)); + AssignCommand(oMod,ApplyEffectToObject(DURATION_TYPE_PERMANENT,ePickPocket,oRider)); + AssignCommand(oMod,ApplyEffectToObject(DURATION_TYPE_PERMANENT,eSetTrap,oRider)); + AssignCommand(oMod,ApplyEffectToObject(DURATION_TYPE_PERMANENT,eTumble,oRider)); +} // HORSE_SupportApplyMountedSkillDecreases() + + +void HORSE_SupportRemoveMountedSkillDecreases(object oRider) +{ // PURPOSE: To remove any negative effects caused by being mounted + if (GetLocalInt(GetModule(),"X3_HORSE_DISABLE_SKILL")) return; + effect ePenalty=GetFirstEffect(oRider); + while (GetIsEffectValid(ePenalty)) + { // traverse effects + if ((GetEffectType(ePenalty)==EFFECT_TYPE_SKILL_DECREASE)&& + (GetEffectSubType(ePenalty)==SUBTYPE_SUPERNATURAL)&& + (GetEffectDurationType(ePenalty)==DURATION_TYPE_PERMANENT)) + { // match + RemoveEffect(oRider, ePenalty); + } // match + ePenalty=GetNextEffect(oRider); + } // traverse effects +} // HORSE_SupportRemoveMountedSkillDecreases() + + +void HORSE_SupportResetUnmountedAppearance(object oRider) +{ // PURPOSE: Reset oRider to an unmounted appearance + int nApp=GetSkinInt(oRider,"nX3_HorseRiderAppearance"); + int nPheno=GetSkinInt(oRider,"nX3_HorseRiderPhenotype"); + int nFoot=GetSkinInt(oRider,"nX3_StoredFootstep"); + int nTail=GetSkinInt(oRider,"nX3_HorseRiderTail"); + SetCreatureTailType(nTail,oRider); + SetPhenoType(nPheno,oRider); + SetCreatureAppearanceType(oRider,nApp); + SetFootstepType(nFoot,oRider); +} // HORSE_SupportResetUnmountedAppearance() + + +int HORSE_SupportAbsoluteMinute() +{ // PURPOSE: Returns the current absolute time expressed in minutes + int nTime=GetTimeMinute()+GetTimeHour()*60+GetCalendarDay()*60*24; + int nYear=GetCalendarYear(); + if (nYear>20) nYear=nYear%20; + nTime=nTime+GetCalendarMonth()*60*24*30+nYear*60*24*30*12; + return nTime; +} // HORSE_SupportAbsoluteMinute() + + +void HORSE_SupportMonitorPaladinUnsummon(object oPaladin) +{ // PURPOSE: Monitor whether to unsummon the paladin mount + // see hook scripts x3_s2_palmount and x3_s2_paldmount + object oMount=GetLocalObject(oPaladin,"oX3_PALADIN_MOUNT"); + int nTime; + if (GetIsObjectValid(oPaladin)&&oMount==oPaladin) + { // valid + if (GetIsObjectValid(oMount)) + { // paladin mount exists + SetLocalObject(oPaladin,"oX3_PALADIN_MOUNT",oMount); + nTime=HORSE_SupportAbsoluteMinute(); + if (nTime>=GetLocalInt(oPaladin,"nX3_PALADIN_UNSUMMON")&&!GetCutsceneMode(oPaladin)) + { // unsummon as long as not in a cutscene + AssignCommand(oPaladin,HorseUnsummonPaladinMount()); + } // unsummon as long as not in a cutscene + DelayCommand(10.0,HORSE_SupportMonitorPaladinUnsummon(oPaladin)); + } // paladin mount exists + } // valid +} // HORSE_SupportMonitorPaladinUnsummon() + + +void HORSE_SupportApplyACBonus(object oRider,object oHorse) +{ // PURPOSE: Apply AC bonus + if (!GetLocalInt(GetModule(),"X3_HORSE_ENABLE_ACBOOST")) return; + effect eEffect; + int nRiderAC=GetAC(oRider); + int nHorseAC=GetAC(oHorse); + int nDiff=nHorseAC-nRiderAC; + if (nDiff<1) return; + eEffect=SupernaturalEffect(EffectACIncrease(nDiff,AC_NATURAL_BONUS)); + AssignCommand(GetModule(),ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEffect,oRider)); +} // HORSE_SupportApplyACBonus() + + +void HORSE_SupportRemoveACBonus(object oRider) +{ // PURPOSE: Remove AC Bonus + if (!GetLocalInt(GetModule(),"X3_HORSE_ENABLE_ACBOOST")) return; + effect eEffect; + eEffect=GetFirstEffect(oRider); + while(GetIsEffectValid(eEffect)) + { // traverse effects + if ((GetEffectType(eEffect)==EFFECT_TYPE_AC_INCREASE)&& + (GetEffectSubType(eEffect)==SUBTYPE_SUPERNATURAL)&& + (GetEffectDurationType(eEffect)==DURATION_TYPE_PERMANENT)) + { // remove + RemoveEffect(oRider,eEffect); + return; + } // remove + eEffect=GetNextEffect(oRider); + } // traverse effects +} // HORSE_SupportRemoveACBonus() + + +void HORSE_SupportApplyHPBonus(object oRider,object oHorse) +{ // PURPOSE: Apply HP bonus + if (!GetLocalInt(GetModule(),"X3_HORSE_ENABLE_HPBOOST")) return; + effect eEffect; + int nHP=GetCurrentHitPoints(oHorse); + nHP=nHP/2; + if (nHP<1) nHP=1; + eEffect=SupernaturalEffect(EffectTemporaryHitpoints(nHP)); + AssignCommand(GetModule(),ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEffect,oRider)); +} // HORSE_SupportApplyHPBonus() + + +void HORSE_SupportRemoveHPBonus(object oRider) +{ // PURPOSE: Remove HP Bonus + if (!GetLocalInt(GetModule(),"X3_HORSE_ENABLE_HPBOOST")) return; + effect eEffect; + eEffect=GetFirstEffect(oRider); + while(GetIsEffectValid(eEffect)) + { // traverse effects + if ((GetEffectType(eEffect)==EFFECT_TYPE_TEMPORARY_HITPOINTS)&& + (GetEffectSubType(eEffect)==SUBTYPE_SUPERNATURAL)&& + (GetEffectDurationType(eEffect)==DURATION_TYPE_PERMANENT)) + { // remove + RemoveEffect(oRider,eEffect); + return; + } // remove + eEffect=GetNextEffect(oRider); + } // traverse effects +} // HORSE_SupportRemoveHPBonus() + + +void HORSE_SupportHandleDamage(object oRider,object oHorse) +{ // PURPOSE: Handle resetting damage to the horse back to its original setting + // and also support damage sharing with the horse if that feature is enabled. + int nRiderCHP=GetCurrentHitPoints(oRider); + int nHorseCHP=GetCurrentHitPoints(oHorse); + int nRiderSHP=GetLocalInt(oRider,"nX3_RiderHP"); + int nHorseSHP=GetSkinInt(oRider,"nX3_HorseHP"); + int nDamage; + effect eDamage; + effect eHeal; + effect ePCDamage; + int nAmount; + if (!GetIsObjectValid(oRider)||!GetIsObjectValid(oHorse)) return; + if (nRiderCHPnHorseSHP&&nHorseSHP!=0) + { // restore horse damage + eDamage=EffectDamage(nHorseCHP-nHorseSHP); + nHorseCHP=nHorseSHP; + AssignCommand(GetModule(),ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,oHorse)); + } // restore horse damage + if (nDamage>0) + { // damage was received while mounted + if (GetLocalInt(GetModule(),"X3_ENABLE_MOUNT_DAMAGE")) + { // share damage with the mount + nAmount=nDamage/2; + if (nAmount>(nHorseCHP-1)) nAmount=nHorseCHP-1; + eHeal=EffectHeal(nAmount); + eDamage=EffectDamage(nAmount); + ePCDamage=EffectDamage(nDamage-nAmount); + if (GetCurrentHitPoints(oRider)>(nRiderSHP-(nDamage-nAmount))) AssignCommand(GetModule(),ApplyEffectToObject(DURATION_TYPE_INSTANT,ePCDamage,oRider)); + else if (GetCurrentHitPoints(oRider)<(nRiderSHP-(nDamage-nAmount))) AssignCommand(GetModule(),ApplyEffectToObject(DURATION_TYPE_INSTANT,eHeal,oRider)); + AssignCommand(GetModule(),ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,oHorse)); + } // share damage with the mount + } // damage was received while mounted +} // HORSE_SupportHandleDamage() + + +void KillTheHorse(object oHorse,int bStart=TRUE) +{ // PURPOSE: To Kill the horse + effect eDeath=EffectDeath(); + object oItem=GetItemInSlot(INVENTORY_SLOT_CARMOUR,oHorse); + //SendMessageToPC(GetFirstPC(),"KillTheHorse("+GetName(oHorse)+","+IntToString(bStart)+")"); + if (GetBaseItemType(oItem)==BASE_ITEM_CREATUREITEM&&bStart) + { // destroy + //SendMessageToPC(GetFirstPC(),"Destroy CARMOUR '"+GetName(oHorse)+"'"); + SetPlotFlag(oItem,FALSE); + SetDroppableFlag(oItem,FALSE); + DestroyObject(oItem); + } // destroy + if (bStart) oItem=GetFirstItemInInventory(oHorse); + else { oItem=GetNextItemInInventory(oHorse); } + if (GetIsObjectValid(oItem)) + { // valid + //SendMessageToPC(GetFirstPC(),"Item '"+GetName(oItem)+"'"); + if (GetBaseItemType(oItem)==BASE_ITEM_CREATUREITEM) + { // destroy + //SendMessageToPC(GetFirstPC()," Destroy"); + SetPlotFlag(oItem,FALSE); + SetDroppableFlag(oItem,FALSE); + DestroyObject(oItem,1.0); + } // destroy + DelayCommand(0.03,KillTheHorse(oHorse,FALSE)); + } // valid + else + { // kill + //SendMessageToPC(GetFirstPC(),"Kill '"+GetName(oHorse)+"'"); + DelayCommand(1.0,ApplyEffectToObject(DURATION_TYPE_INSTANT,eDeath,oHorse)); + } // kill +} // KillTheHorse() + + +void HORSE_SupportTransferInventory(object oFrom,object oTo,location lLoc,int bDestroyFrom=FALSE,int bFirst=TRUE) +{ // PURPOSE: Delay Command transfer to handle moving inventory + object oItem; + object oCopy; + if (bFirst) oItem=GetFirstItemInInventory(oFrom); + else { oItem=GetNextItemInInventory(oFrom); } + if (GetIsObjectValid(oItem)) + { // item found + if (GetIsObjectValid(oTo)) + { // to object + if (GetBaseItemType(oItem)!=BASE_ITEM_CREATUREITEM) + { // no pchide transfers + oCopy=CopyItem(oItem,oTo,TRUE); + } // no pchide transfers + } // to object + else + { // to location + if (GetBaseItemType(oItem)!=BASE_ITEM_CREATUREITEM) + { // no pchide transfers + oCopy=CopyObject(oItem,lLoc); + if (GetItemStackSize(oCopy)!=GetItemStackSize(oItem)) SetItemStackSize(oCopy,GetItemStackSize(oItem)); + if (GetItemCharges(oCopy)!=GetItemCharges(oItem)) SetItemCharges(oCopy,GetItemCharges(oItem)); + } // no pchide transfers + } // to location + DestroyObject(oItem,2.0); + DelayCommand(0.02,HORSE_SupportTransferInventory(oFrom,oTo,lLoc,bDestroyFrom,FALSE)); + } // item found + else + { // transfer gold + if (GetIsObjectValid(oTo)) + { // to object + if (GetGold(oFrom)>0) oCopy=CreateItemOnObject("nw_it_gold001",oTo,GetGold(oFrom)); + } // to object + else + { // to location + if (GetGold(oFrom)>0) oCopy=CreateObject(OBJECT_TYPE_ITEM,"nw_it_gold001",lLoc,GetGold(oFrom)); + } // to location + if (bDestroyFrom) + { // destroy + DestroyObject(oFrom); + } // destroy + if (GetLocalInt(oTo,"bDie")) + { // death effect + oItem=GetItemInSlot(INVENTORY_SLOT_CARMOUR,oTo); + if (GetBaseItemType(oItem)==BASE_ITEM_CREATUREITEM) + { // destroy + SetDroppableFlag(oItem,FALSE); + SetPlotFlag(oItem,FALSE); + DestroyObject(oItem); + } // destroy + DelayCommand(0.1,KillTheHorse(oTo)); + } // death effect + } // transfer gold +} // HORSE_SupportTransferInventory() + + +int HORSE_SupportCountHenchmen(object oPC) +{ // PURPOSE: Return the number of henchmen + int nC=0; + object oHench=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oPC,nC+1); + while(GetIsObjectValid(oHench)) + { // count + nC++; + oHench=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oPC,nC+1); + } // count + return nC; +} // HORSE_SupportCountHenchmen() + + +void HORSE_SupportTransferPreservedValues(object oRider,object oHorse) +{ // PURPOSE: This will transfer preserved values for the mounted horse to + // oHorse from oRider and then will remove them from oRider + string sS; + float fX3_MOUNT_MULTIPLE=GetLocalFloat(GetArea(oRider),"fX3_MOUNT_MULTIPLE"); + float fX3_DISMOUNT_MULTIPLE=GetLocalFloat(GetArea(oRider),"fX3_DISMOUNT_MULTIPLE"); + if (GetLocalFloat(oRider,"fX3_MOUNT_MULTIPLE")>fX3_MOUNT_MULTIPLE) fX3_MOUNT_MULTIPLE=GetLocalFloat(oRider,"fX3_MOUNT_MULTIPLE"); + if (fX3_MOUNT_MULTIPLE<=0.0) fX3_MOUNT_MULTIPLE=1.0; + if (GetLocalFloat(oRider,"fX3_DISMOUNT_MULTIPLE")>0.0) fX3_DISMOUNT_MULTIPLE=GetLocalFloat(oRider,"fX3_DISMOUNT_MULTIPLE"); + if (fX3_DISMOUNT_MULTIPLE>0.0) fX3_MOUNT_MULTIPLE=fX3_DISMOUNT_MULTIPLE; // use dismount multiple instead of mount multiple + if (GetIsObjectValid(oHorse)) + { // transfer values to horse + + } // transfer values to horse + sS=GetSkinString(oRider,"X3_HORSE_POSTDISMOUNT_SCRIPT"); + if (GetStringLength(sS)>0) + { // run post dismount script + SetLocalObject(oRider,"oX3_TempHorse",oHorse); + ExecuteScript(sS,oRider); + DeleteLocalObject(oRider,"oX3_TempHorse"); + } // run post dismount script + // delete variables + if (GetLocalInt(oRider,"bX3_HORSE_MODIFIERS")&&GetStringLength(sS)<1) + { // remove horse modifiers + DeleteLocalInt(oRider,"bX3_HORSE_MODIFIERS"); + DelayCommand(0.10*fX3_MOUNT_MULTIPLE,HORSE_SupportOriginalSpeed(oRider)); + DelayCommand(0.30*fX3_MOUNT_MULTIPLE,HORSE_SupportAdjustMountedArcheryPenalty(oRider)); + DelayCommand(0.15*fX3_MOUNT_MULTIPLE,HORSE_SupportRemoveMountedSkillDecreases(oRider)); + DelayCommand(0.25*fX3_MOUNT_MULTIPLE,HORSE_SupportRemoveACBonus(oRider)); + DelayCommand(0.25*fX3_MOUNT_MULTIPLE,HORSE_SupportRemoveHPBonus(oRider)); + DelayCommand(0.20*fX3_MOUNT_MULTIPLE,HORSE_SupportHandleDamage(oRider,oHorse)); + } // remove horse modifiers + //HORSE_SupportMountCleanVariables(oRider); +} // HORSE_SupportTransferPreservedValues() + + +void HORSE_SupportDismountWrapper(int bAnimate,int bSetOwner) +{ // Wrap + object oHorse=HorseDismount(bAnimate,bSetOwner); + object oNPC=OBJECT_SELF; + if (bSetOwner) SetLocalObject(oNPC,"oAssignedHorse",oHorse); +} // HORSE_SupportDismountWrapper() + + +void HORSE_SupportRestoreFromPreload(object oPC,int nApp,int nTail) +{ // PURPOSE: Restore to previous appearance before preload + SetCreatureAppearanceType(oPC,nApp); + SetCreatureTailType(nTail,oPC); +} // HORSE_SupportRestoreFromPreload() + + +void HORSE_SupportSetMountingSentinel(object oRider,object oHorse,float fTimeout=6.0, int nCount=0) +{ // PURPOSE: This will set a mounting process that will make sure the PC or NPC + // is returned to commandable. There may be a slight delay but, this will + // insure recovery from aborted mounts that could result in PC being stuck as + // not commandable. + if (!HorseGetIsMounted(oRider)&&!IsInConversation(oRider)&&!GetIsInCombat(oRider)&&!HorseGetIsDisabled(oRider)) + { // keep waiting + float fFreq=1.0; // frequency in seconds + if (nCount0) return TRUE; + return FALSE; +} // HORSE_SupportGetHenchmanExistsInDatabase() + + +void HORSE_SupportRestoreHenchmanFromDatabase(object oPC,string sDatabase,int nN=1) +{ // PURPOSE: This will reload and assign the henchman to the PC + object oHenchman=OBJECT_INVALID; + string sN=IntToString(nN); + string sTag=GetCampaignString(sDatabase,"sX3_HTAG_"+sN,oPC); + string sResRef=GetCampaignString(sDatabase,"sX3_HRR_"+sN,oPC); + int nNN=1; + object oOb; + oOb=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oPC,nNN); + while(!GetIsObjectValid(oHenchman)&&GetIsObjectValid(oOb)) + { // see if henchman is already in play + if (sResRef==GetResRef(oOb)&&GetTag(oOb)==sTag) oHenchman=oOb; + nNN++; + oOb=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oPC,nNN); + } // see if henchman is already in play + if (!GetIsObjectValid(oHenchman)) + { // create henchman + oHenchman=CreateObject(OBJECT_TYPE_CREATURE,sResRef,GetLocation(oPC),FALSE,sTag); + AssignCommand(oHenchman,SetAssociateState(NW_ASC_DISTANCE_6_METERS,TRUE)); + DelayCommand(1.0,AddHenchman(oPC,oHenchman)); + } // create henchman + // load and set henchman + SetCreatureAppearanceType(oHenchman,GetCampaignInt(sDatabase,"nX3_CAPP_"+sN,oPC)); + SetPhenoType(GetCampaignInt(sDatabase,"nX3_CPHE_"+sN,oPC),oHenchman); + SetCreatureTailType(GetCampaignInt(sDatabase,"nX3_CTAIL_"+sN,oPC),oHenchman); + SetSkinString(oHenchman,"sX3_HorseResRef",GetCampaignString(sDatabase,"sX3_RR_"+sN,oPC)); + SetSkinString(oHenchman,"sX3_HorseMountTag",GetCampaignString(sDatabase,"sX3_TAG_"+sN,oPC)); + SetLocalString(oHenchman,"sX3_HorseMountScript",GetCampaignString(sDatabase,"sX3_SCR_"+sN,oPC)); + SetLocalString(oHenchman,"X3_HORSE_PREMOUNT_SCRIPT",GetCampaignString(sDatabase,"sX3_SPRM_"+sN,oPC)); + SetLocalString(oHenchman,"X3_HORSE_POSTMOUNT_SCRIPT",GetCampaignString(sDatabase,"sX3_SPOM_"+sN,oPC)); + SetSkinString(oHenchman,"X3_HORSE_PREDISMOUNT_SCRIPT",GetCampaignString(sDatabase,"sX3_SPRDM_"+sN,oPC)); + SetSkinString(oHenchman,"X3_HORSE_POSTDISMOUNT_SCRIPT",GetCampaignString(sDatabase,"sX3_SPODM_"+sN,oPC)); + //SetSkinInt(oHenchman,"X3_HORSE_APPEARANCE",GetCampaignInt(sDatabase,"nX3_HAP_"+sN,oPC)); + SetLocalInt(oHenchman,"X3_HORSE_TAIL",GetCampaignInt(sDatabase,"nX3_HTL_"+sN,oPC)); + SetLocalInt(oHenchman,"X3_HORSE_NULL_APPEARANCE",GetCampaignInt(sDatabase,"nX3_HNAP_"+sN,oPC)); + SetSkinInt(oHenchman,"nX3_HorseRiderAppearance",GetCampaignInt(sDatabase,"nX3_APP_"+sN,oPC)); + SetSkinInt(oHenchman,"nX3_HorseRiderPhenotype",GetCampaignInt(sDatabase,"nX3_PHEN_"+sN,oPC)); + SetSkinInt(oHenchman,"nX3_StoredFootstep",GetCampaignInt(sDatabase,"nX3_FOOT_"+sN,oPC)); + SetLocalInt(oHenchman,"X3_NO_MOUNT_ANIMATE",GetCampaignInt(sDatabase,"nX3_NOAN_"+sN,oPC)); + SetLocalInt(oHenchman,"nX3_HorsePortrait",GetCampaignInt(sDatabase,"nX3_HPOR_"+sN,oPC)); + SetSkinInt(oHenchman,"nX3_HorseHP",GetCampaignInt(sDatabase,"nX3_HHP_"+sN,oPC)); + SetLocalInt(oHenchman,"nX3_RiderHP",GetCampaignInt(sDatabase,"nX3_RHP_"+sN,oPC)); + SetSkinInt(oHenchman,"bX3_IS_MOUNTED",GetCampaignInt(sDatabase,"bX3_ISM_"+sN,oPC)); + SetSkinInt(oHenchman,"nX3_HorseRiderTail",GetCampaignInt(sDatabase,"nX3_TAL_"+sN,oPC)); + if (GetLocalInt(GetModule(),"X3_HORSE_ENABLE_SADDLEBAGS")) + { // saddlebags enabled + SetLocalInt(oHenchman,"bX3_HAS_SADDLEBAGS",GetCampaignInt(sDatabase,"bX3_HSB_"+sN,oPC)); + } // saddlebags enabled +} // HORSE_SupportRestoreHenchmanFromDatabase() + + +void HORSE_SupportDeleteMountedPCFromDatabase(object oPC,string sDatabase) +{ // PURPOSE: This will remove the info about this PC being mounted + DeleteCampaignVariable(sDatabase,"sX3_RR",oPC); + DeleteCampaignVariable(sDatabase,"sX3_TAG",oPC); + DeleteCampaignVariable(sDatabase,"sX3_SCR",oPC); + DeleteCampaignVariable(sDatabase,"nX3_HAP",oPC); + DeleteCampaignVariable(sDatabase,"nX3_HTL",oPC); + DeleteCampaignVariable(sDatabase,"nX3_HNAP",oPC); + DeleteCampaignVariable(sDatabase,"nX3_HAP",oPC); + DeleteCampaignVariable(sDatabase,"nX3_APP",oPC); + DeleteCampaignVariable(sDatabase,"nX3_PHEN",oPC); + DeleteCampaignVariable(sDatabase,"nX3_FOOT",oPC); + DeleteCampaignVariable(sDatabase,"nX3_NOAN",oPC); + DeleteCampaignVariable(sDatabase,"nX3_CAPP",oPC); + DeleteCampaignVariable(sDatabase,"nX3_CPHE",oPC); + DeleteCampaignVariable(sDatabase,"nX3_CTAIL",oPC); + DeleteCampaignVariable(sDatabase,"sX3_SPRM",oPC); + DeleteCampaignVariable(sDatabase,"sX3_SPOM",oPC); + DeleteCampaignVariable(sDatabase,"sX3_SPRDM",oPC); + DeleteCampaignVariable(sDatabase,"sX3_SPODM",oPC); + DeleteCampaignVariable(sDatabase,"bX3_MOUNTED",oPC); + DeleteCampaignVariable(sDatabase,"nX3_PALUS",oPC); + DeleteCampaignVariable(sDatabase,"nX3_HPOR",oPC); + DeleteCampaignVariable(sDatabase,"nX3_HHP",oPC); + DeleteCampaignVariable(sDatabase,"nX3_RHP",oPC); + DeleteCampaignVariable(sDatabase,"bX3_ISM",oPC); + DeleteCampaignVariable(sDatabase,"nX3_TAL",oPC); + if (GetLocalInt(GetModule(),"X3_HORSE_ENABLE_SADDLEBAGS")) + { // saddlebags enabled + DeleteCampaignVariable(sDatabase,"bX3_HSB",oPC); + } // saddlebags enabled +} // HORSE_SupportDeleteMountedPCFromDatabase() + + +void HORSE_SupportStoreMountedPCInDatabase(object oPC,string sDatabase) +{ // PURPOSE: This will store the PCs information about being mounted + SetCampaignString(sDatabase,"sX3_RR",GetSkinString(oPC,"sX3_HorseResRef"),oPC); + SetCampaignString(sDatabase,"sX3_TAG",GetSkinString(oPC,"sX3_HorseMountTag"),oPC); + SetCampaignString(sDatabase,"sX3_SCR",GetLocalString(oPC,"sX3_HorseMountScript"),oPC); + //SetCampaignInt(sDatabase,"nX3_HAP",GetSkinInt(oPC,"X3_HORSE_APPEARANCE"),oPC); + SetCampaignInt(sDatabase,"nX3_HTL",GetLocalInt(oPC,"X3_HORSE_TAIL"),oPC); + SetCampaignInt(sDatabase,"nX3_HNAP",GetLocalInt(oPC,"X3_HORSE_NULL_APPEARANCE"),oPC); + SetCampaignInt(sDatabase,"nX3_APP",GetSkinInt(oPC,"nX3_HorseRiderAppearance"),oPC); + SetCampaignInt(sDatabase,"nX3_PHEN",GetSkinInt(oPC,"nX3_HorseRiderPhenotype"),oPC); + SetCampaignInt(sDatabase,"nX3_FOOT",GetSkinInt(oPC,"nX3_StoredFootstep"),oPC); + SetCampaignInt(sDatabase,"nX3_NOAN",GetLocalInt(oPC,"X3_NO_MOUNT_ANIMATE"),oPC); + SetCampaignInt(sDatabase,"nX3_CAPP",GetAppearanceType(oPC),oPC); + SetCampaignInt(sDatabase,"nX3_CPHE",GetPhenoType(oPC),oPC); + SetCampaignInt(sDatabase,"nX3_CTAIL",GetCreatureTailType(oPC),oPC); + SetCampaignString(sDatabase,"sX3_SPRM",GetLocalString(oPC,"X3_HORSE_PREMOUNT_SCRIPT"),oPC); + SetCampaignString(sDatabase,"sX3_SPOM",GetLocalString(oPC,"X3_HORSE_POSTMOUNT_SCRIPT"),oPC); + SetCampaignString(sDatabase,"sX3_SPRDM",GetSkinString(oPC,"X3_HORSE_PREDISMOUNT_SCRIPT"),oPC); + SetCampaignString(sDatabase,"sX3_SPODM",GetSkinString(oPC,"X3_HORSE_POSTDISMOUNT_SCRIPT"),oPC); + SetCampaignInt(sDatabase,"nX3_HPOR",GetLocalInt(oPC,"nX3_HorsePortrait"),oPC); + SetCampaignInt(sDatabase,"nX3_RHP",GetLocalInt(oPC,"nX3_RiderHP"),oPC); + SetCampaignInt(sDatabase,"nX3_HHP",GetSkinInt(oPC,"nX3_HorseHP"),oPC); + SetCampaignInt(sDatabase,"bX3_MOUNTED",TRUE,oPC); + SetCampaignInt(sDatabase,"bX3_ISM",GetSkinInt(oPC,"bX3_IS_MOUNTED"),oPC); + SetCampaignInt(sDatabase,"nX3_PALUS",GetLocalInt(oPC,"nX3_PALADIN_UNSUMMON"),oPC); + SetCampaignInt(sDatabase,"nX3_TAL",GetSkinInt(oPC,"nX3_HorseRiderTail"),oPC); + if (GetLocalInt(GetModule(),"X3_HORSE_ENABLE_SADDLEBAGS")) + { // saddlebags enabled + SetCampaignInt(sDatabase,"bX3_HSB",GetLocalInt(oPC,"bX3_HAS_SADDLEBAGS"),oPC); + } // saddlebags enabled +} // HORSE_SupportStoreMountedPCInDatabase() + + +void HORSE_SupportReloadMountedPCFromDatabase(object oPC,string sDatabase) +{ // PURPOSE: This will restore the mounted information about the PC + SetCreatureAppearanceType(oPC,GetCampaignInt(sDatabase,"nX3_CAPP",oPC)); + SetPhenoType(GetCampaignInt(sDatabase,"nX3_CPHE",oPC),oPC); + SetCreatureTailType(GetCampaignInt(sDatabase,"nX3_CTAIL",oPC),oPC); + SetSkinString(oPC,"sX3_HorseResRef",GetCampaignString(sDatabase,"sX3_RR",oPC)); + SetSkinString(oPC,"sX3_HorseMountTag",GetCampaignString(sDatabase,"sX3_TAG",oPC)); + SetLocalString(oPC,"sX3_HorseMountScript",GetCampaignString(sDatabase,"sX3_SCR",oPC)); + SetLocalString(oPC,"X3_HORSE_PREMOUNT_SCRIPT",GetCampaignString(sDatabase,"sX3_SPRM",oPC)); + SetLocalString(oPC,"X3_HORSE_POSTMOUNT_SCRIPT",GetCampaignString(sDatabase,"sX3_SPOM",oPC)); + SetSkinString(oPC,"X3_HORSE_PREDISMOUNT_SCRIPT",GetCampaignString(sDatabase,"sX3_SPRDM",oPC)); + SetSkinString(oPC,"X3_HORSE_POSTDISMOUNT_SCRIPT",GetCampaignString(sDatabase,"sX3_SPODM",oPC)); + //SetSkinInt(oPC,"X3_HORSE_APPEARANCE",GetCampaignInt(sDatabase,"nX3_HAP",oPC)); + SetLocalInt(oPC,"X3_HORSE_TAIL",GetCampaignInt(sDatabase,"nX3_HTL",oPC)); + SetLocalInt(oPC,"X3_HORSE_NULL_APPEARANCE",GetCampaignInt(sDatabase,"nX3_HNAP",oPC)); + SetSkinInt(oPC,"nX3_HorseRiderAppearance",GetCampaignInt(sDatabase,"nX3_APP",oPC)); + SetSkinInt(oPC,"nX3_HorseRiderPhenotype",GetCampaignInt(sDatabase,"nX3_PHEN",oPC)); + SetSkinInt(oPC,"nX3_StoredFootstep",GetCampaignInt(sDatabase,"nX3_FOOT",oPC)); + SetLocalInt(oPC,"X3_NO_MOUNT_ANIMATE",GetCampaignInt(sDatabase,"nX3_NOAN",oPC)); + SetLocalInt(oPC,"nX3_PALADIN_UNSUMMON",GetCampaignInt(sDatabase,"nX3_PALUS",oPC)); + SetLocalInt(oPC,"nX3_HorsePortrait",GetCampaignInt(sDatabase,"nX3_HPOR",oPC)); + SetLocalInt(oPC,"nX3_RiderHP",GetCampaignInt(sDatabase,"nX3_RHP",oPC)); + SetSkinInt(oPC,"nX3_HorseHP",GetCampaignInt(sDatabase,"nX3_HHP",oPC)); + SetSkinInt(oPC,"bX3_IS_MOUNTED",GetCampaignInt(sDatabase,"bX3_ISM",oPC)); + SetSkinInt(oPC,"nX3_HorseRiderTail",GetCampaignInt(sDatabase,"nX3_TAL",oPC)); + if (GetLocalInt(GetModule(),"X3_HORSE_ENABLE_SADDLEBAGS")) + { // saddlebags enabled + SetLocalInt(oPC,"bX3_HAS_SADDLEBAGS",GetCampaignInt(sDatabase,"bX3_HSB",oPC)); + } // saddlebags enabled + if (HorseGetIsMounted(oPC)&&GetStringLeft(GetSkinString(oPC,"sX3_HorseResRef"),GetStringLength(HORSE_PALADIN_PREFIX))==HORSE_PALADIN_PREFIX) AssignCommand(oPC,HORSE_SupportMonitorPaladinUnsummon(oPC)); +} // HORSE_SupportReloadMountedPCFromDatabase() + + +//////////////////////////////////////////////////////////////////////////////// +// FUNCTIONS +//----------------------------- +// This is where the actual functions defined in the prototype section are +// completed. +//////////////////////////////////////////////////////////////////////////////// + + +void HorseReloadFromDatabase(object oPC,string sDatabase) +{ // PURPOSE: Reload status from database and set it the same + int nN; + // Reload settings for oPC + HORSE_SupportReloadMountedPCFromDatabase(oPC,sDatabase); + nN=1; + while(HORSE_SupportGetHenchmanExistsInDatabase(oPC,sDatabase,nN)) + { // restore henchmen + HORSE_SupportRestoreHenchmanFromDatabase(oPC,sDatabase,nN); + nN++; + } // restore henchmen +} // HorseReloadFromDatabase() + + +void HorseSaveToDatabase(object oPC,string sDatabase) +{ // PURPOSE: Save Status to Database + int nN=1; + int nMax; + object oHenchman; + if (HorseGetIsMounted(oPC)) + { // Store mounted info + HORSE_SupportStoreMountedPCInDatabase(oPC,sDatabase); + } // Store mounted info + else + { // Delete mounted info + HORSE_SupportDeleteMountedPCFromDatabase(oPC,sDatabase); + } // Delete mounted info + while(HORSE_SupportGetHenchmanExistsInDatabase(oPC,sDatabase,nN)) + { // count + nMax++; + nN++; + } // count + nN=1; + while(nN<=nMax) + { // remove old + HORSE_SupportDeleteFromDatabase(oPC,sDatabase,nN); + nN++; + } // remove old + nN=1; + oHenchman=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oPC,nN); + while(GetIsObjectValid(oHenchman)) + { // traverse henchmen + HORSE_SupportSaveToDatabase(oPC,oHenchman,sDatabase,nN); + nN++; + oHenchman=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oPC,nN); + } // traverse henchmen +} // HorseSaveToDatabase() + + +object HorseCreateHorse(string sResRef,location lLoc,object oOwner=OBJECT_INVALID,string sTag="",int nAppearance=-1,int nTail=-1,int nFootstep=-1,string sScript="") +{ // PURPOSE: Spawn a horse with the specified information + object oHorse=OBJECT_INVALID; + int nHenchmen=HORSE_SupportCountHenchmen(oOwner); + int nMax=GetLocalInt(GetModule(),"X3_HORSE_MAX_HENCHMEN"); + int bIncHenchmen=GetLocalInt(GetModule(),"X3_HORSE_NO_HENCHMAN_INCREASE"); + int nCurr=GetMaxHenchmen(); + if (GetStringLength(sResRef)>0) + { // resref specified + oHorse=CreateObject(OBJECT_TYPE_CREATURE,sResRef,lLoc,FALSE,sTag); + if (GetIsObjectValid(oHorse)) + { // horse successfully created + SetLocalInt(oHorse,"bX3_IS_MOUNT",TRUE); + SetLocalString(oHorse,"sX3_OriginalName",GetName(oHorse)); + if (GetIsObjectValid(oOwner)&&GetObjectType(oOwner)==OBJECT_TYPE_CREATURE) + { // assign owner + SetLocalObject(oHorse,"oX3_HorseOwner",oOwner); + if (nHenchmen==nCurr) + { // see if increase possible + if (!bIncHenchmen) + { // increase is permissable + if (nMax==0||nMax>0) + { // do the increase + SetMaxHenchmen(nCurr+1); + } // do the increase + } // increase is permissable + } // see if increase possible + AddHenchman(oOwner,oHorse); + //AssignCommand(oHorse,SetAssociateState(NW_ASC_DISTANCE_6_METERS,TRUE)); + SetAssociateState(NW_ASC_DISTANCE_6_METERS,TRUE,oHorse); + if (GetMaster(oHorse)==oOwner) SetName(oHorse,GetName(oOwner)+"'s "+GetName(oHorse)); + if (GetLocalInt(GetModule(),"X3_ENABLE_MOUNT_DB")&&GetIsPC(oOwner)) SetLocalInt(oOwner,"bX3_STORE_MOUNT_INFO",TRUE); + } // assign owner + if (nAppearance>-1) + { // set appearance + SetCreatureAppearanceType(oHorse,nAppearance); + } // set appearance + if (nTail>-1) + { // set tail + SetCreatureTailType(nTail,oHorse); + } // set tail + if (nFootstep>-1) + { // footstep + SetFootstepType(nFootstep,oHorse); + } // footstep + if (GetStringLength(sScript)>0) + { // post spawn script + SetLocalString(oHorse,"sX3_HORSE_CREATED_SCRIPT",sScript); + ExecuteScript(sScript,oHorse); + } // post spawn script + } // horse successfully created + } // resref specified + return oHorse; +} // HorseCreateHorse() + + +int HorseGetIsMounted(object oTarget) +{ // PURPOSE: Return whether oTarget is mounted + if (GetObjectType(oTarget)==OBJECT_TYPE_CREATURE) + { // valid parameter + if (GetSkinInt(oTarget,"bX3_IS_MOUNTED")) return TRUE; + } // valid parameter + return FALSE; +} // HorseGetIsMounted() + + +int HorseGetCanBeMounted(object oTarget,object oRider=OBJECT_INVALID,int bAssignMount=FALSE) +{ // PURPOSE: This will return whether oTarget can be mounted + int nAppearance; + string sS; + object oOb; + if (GetObjectType(oTarget)==OBJECT_TYPE_CREATURE) + { // valid oTarget type + if (GetIsDead(oTarget)) return FALSE; + if (GetIsPC(oTarget)) return FALSE; + if (GetIsObjectValid(oRider)&&GetObjectType(oRider)!=OBJECT_TYPE_CREATURE) return FALSE; + if (GetIsObjectValid(oRider)&&GetIsEnemy(oRider,oTarget)) return FALSE; + if (GetIsDMPossessed(oTarget)) return FALSE; + if (HorseGetIsMounted(oRider)) return FALSE; + //if (GetIsObjectValid(oRider)&&GetCreatureTailType(oRider)!=CREATURE_TAIL_TYPE_NONE) return FALSE; + nAppearance=GetAppearanceType(oRider); + if (GetIsPC(oRider)&&nAppearance>6&&GetLocalInt(oRider,"X3_CUSTOM_RACE_APPEARANCE")!=nAppearance&&!Horse_SupportRaceAppearance(nAppearance)) return FALSE; // PC is shape shifted + if (GetIsObjectValid(oRider)&&GetObjectType(oRider)==OBJECT_TYPE_CREATURE) + { // Rider is a creature + sS=HORSE_SupportRaceRestrictString(oRider); + if (GetLocalInt(oTarget,sS)) return FALSE; // race restricted + } // Rider is a creature + oOb=GetMaster(oTarget); + if (GetIsObjectValid(oOb)&&GetIsObjectValid(oRider)) + { // has master make sure is part of party + if (oOb!=oRider&&oOb!=GetMaster(oRider)&&GetMaster(oOb)!=GetMaster(oRider)) + { // not part of party + return FALSE; + } // not part of party + } // has master make sure is part of party + if (GetLocalInt(oTarget,"X3_HORSE_NOT_RIDEABLE_OWNER")) + { // not rideable due to owner + return FALSE; + } // not rideable due to owner + if (GetLocalInt(GetArea(oTarget),"X3_NO_MOUNTING")&&!bAssignMount) + { // no mounting allowed in this area + return FALSE; + } // no mounting allowed in this area + sS=GetResRef(oTarget); + if (GetStringLeft(sS,GetStringLength(HORSE_PALADIN_PREFIX))==HORSE_PALADIN_PREFIX&&GetIsObjectValid(oRider)) + { // paladin mount + if (HorseGetOwner(oTarget)!=oRider) return FALSE; + } // paladin mount + if (!HorseGetIsAMount(oTarget)) return FALSE; + return TRUE; + } // valid oTarget type + return FALSE; +} // HorseGetCanBeMounted() + + +string HorseGetMountFailureMessage(object oTarget,object oRider=OBJECT_INVALID) +{ // PURPOSE: This will return the error message + int nAppearance; + string sS; + object oOb; + if (GetObjectType(oTarget)==OBJECT_TYPE_CREATURE) + { // valid oTarget type + if (GetIsDead(oTarget)) return StringToRGBString(GetStringByStrRef(111993),STRING_COLOR_ROSE); + if (GetIsPC(oTarget)) return StringToRGBString(GetStringByStrRef(111994),STRING_COLOR_ROSE); + if (GetIsObjectValid(oRider)&&GetObjectType(oRider)!=OBJECT_TYPE_CREATURE) return StringToRGBString(GetStringByStrRef(111995),STRING_COLOR_ROSE); + if (GetIsObjectValid(oRider)&&GetIsEnemy(oRider,oTarget)) return StringToRGBString(GetStringByStrRef(111996),STRING_COLOR_ROSE); + if (GetIsDMPossessed(oTarget)) return StringToRGBString(GetStringByStrRef(111997),STRING_COLOR_ROSE); + if (HorseGetIsMounted(oRider)) return StringToRGBString(GetStringByStrRef(111998),STRING_COLOR_ROSE); + //if (GetIsObjectValid(oRider)&&GetCreatureTailType(oRider)!=CREATURE_TAIL_TYPE_NONE) return StringToRGBString(GetStringByStrRef(111998),STRING_COLOR_ROSE); + nAppearance=GetAppearanceType(oRider); + if (GetIsPC(oRider)&&nAppearance>6&&GetLocalInt(oRider,"X3_CUSTOM_RACE_APPEARANCE")!=nAppearance&&!Horse_SupportRaceAppearance(nAppearance)) return StringToRGBString(GetStringByStrRef(111999),STRING_COLOR_ROSE); + if (GetIsObjectValid(oRider)&&GetObjectType(oRider)==OBJECT_TYPE_CREATURE) + { // Rider is a creature + sS=HORSE_SupportRaceRestrictString(oRider); + if (GetLocalInt(oTarget,sS)) return StringToRGBString(GetStringByStrRef(112000),STRING_COLOR_PINK); + } // Rider is a creature + oOb=GetMaster(oTarget); + if (GetIsObjectValid(oOb)&&GetIsObjectValid(oRider)) + { // has master make sure is part of party + if (oOb!=oRider&&GetMaster(oRider)!=oOb) + { // not part of party + return StringToRGBString(GetStringByStrRef(112001),STRING_COLOR_ROSE); + } // not part of party + } // has master make sure is part of party + if (GetLocalInt(oTarget,"X3_HORSE_NOT_RIDEABLE_OWNER")) + { // not rideable due to owner + return StringToRGBString(GetStringByStrRef(112002),STRING_COLOR_PINK); + } // not rideable due to owner + if (GetLocalInt(GetArea(oTarget),"X3_NO_MOUNTING")) + { // no mounting allowed in this area + return StringToRGBString(GetStringByStrRef(112003),STRING_COLOR_PINK); + } // no mounting allowed in this area + sS=GetResRef(oTarget); + if (GetStringLeft(sS,GetStringLength(HORSE_PALADIN_PREFIX))==HORSE_PALADIN_PREFIX&&GetIsObjectValid(oRider)) + { // paladin mount + if (HorseGetOwner(oTarget)!=oRider) return StringToRGBString(GetStringByStrRef(112004),STRING_COLOR_PINK); + } // paladin mount + if (!HorseGetIsAMount(oTarget)) return StringToRGBString(GetStringByStrRef(112005),STRING_COLOR_PINK); + } // valid oTarget type + else + { + // The target is not a mount (as its not a creature). + return StringToRGBString(GetStringByStrRef(112005),STRING_COLOR_ROSE); + } + return ""; +} // HorseGetMountFailureMessage() + + +void HorseSetOwner(object oHorse,object oOwner,int bAssign=FALSE) +{ // PURPOSE: Set oHorse to be owned by oOwner + object oPreviousOwner; + string sName; + int nHenchmen=HORSE_SupportCountHenchmen(oOwner); + int nMax=GetLocalInt(GetModule(),"X3_HORSE_MAX_HENCHMEN"); + int bIncHenchmen=GetLocalInt(GetModule(),"X3_HORSE_NO_HENCHMAN_INCREASE"); + int nCurr=GetMaxHenchmen(); + if (GetObjectType(oHorse)==OBJECT_TYPE_CREATURE&&GetObjectType(oOwner)==OBJECT_TYPE_CREATURE) + { // valid parameters + //oPreviousOwner=GetMaster(oHorse); + //if (oPreviousOwner==oOwner) return; // already is the owner + if ((HorseGetCanBeMounted(oHorse,oOwner,TRUE)||GetIsPC(oOwner))&&!HorseGetIsAMount(oOwner)) + { // horse can be mounted + oPreviousOwner=GetMaster(oHorse); + if (oPreviousOwner!=oOwner) + { // new owner + if (GetObjectType(oPreviousOwner)==OBJECT_TYPE_CREATURE) + { // remove as henchman from previous owner + RemoveHenchman(oPreviousOwner,oHorse); + if (GetLocalInt(GetModule(),"X3_ENABLE_MOUNT_DB")&&GetIsPC(oPreviousOwner)) SetLocalInt(oPreviousOwner,"bX3_STORE_MOUNT_INFO",TRUE); + } // remove as henchman from previous owner + if (nHenchmen==nCurr) + { // see if increase possible + if (!bIncHenchmen) + { // increase is permissable + if (nMax==0||nMax>0) + { // do the increase + SetMaxHenchmen(nCurr+1); + } // do the increase + } // increase is permissable + } // see if increase possible + AssignCommand(oHorse,ClearAllActions()); + AddHenchman(oOwner,oHorse); + SetLocalObject(oHorse,"oX3_HorseOwner",oOwner); + //AssignCommand(oHorse,SetAssociateState(NW_ASC_DISTANCE_6_METERS,TRUE)); + DelayCommand(1.0,SetAssociateState(NW_ASC_DISTANCE_6_METERS,TRUE,oHorse)); + if (bAssign) SetLocalObject(oOwner,"oAssignedHorse",oHorse); + } // new owner + else + { // make sure variables on oHorse are correct + SetLocalObject(oHorse,"oX3_HorseOwner",oOwner); + //AssignCommand(oHorse,SetAssociateState(NW_ASC_DISTANCE_6_METERS,TRUE)); + SetAssociateState(NW_ASC_DISTANCE_6_METERS,TRUE,oHorse); + if (bAssign) SetLocalObject(oOwner,"oAssignedHorse",oHorse); + if (GetLocalInt(GetModule(),"X3_ENABLE_MOUNT_DB")&&GetIsPC(oOwner)) SetLocalInt(oOwner,"bX3_STORE_MOUNT_INFO",TRUE); + } // make sure variables on oHorse are correct + sName=GetLocalString(oHorse,"sX3_OriginalName"); + if (GetStringLength(sName)<1) + { // define original name + sName=GetName(oHorse); + SetLocalString(oHorse,"sX3_OriginalName",sName); + } // define original name + if (GetMaster(oHorse)==oOwner) + { // was set okay + if (GetStringLowerCase(GetStringRight(GetName(oOwner),1))=="s"||GetStringLowerCase(GetStringRight(GetName(oOwner),1))=="z") + SetName(oHorse,GetName(oOwner)+"' "+sName); + else { SetName(oHorse,GetName(oOwner)+"'s "+sName); } + } // was set okay + } // horse can be mounted + else + { // not valid + if (GetIsPC(oOwner)) + { // PC + PrintString("X3 HORSE ERROR: Attempt made to set "+GetName(oOwner)+" as owner of "+GetName(oHorse)+" is an invalid assignment."); + } // PC + else + { // error + PrintString("X3 HORSE ERROR: Attempt made to set "+GetName(oOwner)+" as owner of "+GetName(oHorse)+" is an invalid assignment."); + } // error + } // not valid + } // valid parameters +} // HorseSetOwner() + + +void HorseRemoveOwner(object oHorse) +{ // PURPOSE: Remove the owner from oHorse + object oOwner; + string sString; + if (GetObjectType(oHorse)==OBJECT_TYPE_CREATURE) + { // valid parameter + oOwner=GetLocalObject(oHorse,"oX3_HorseOwner"); + if (GetObjectType(oOwner)==OBJECT_TYPE_CREATURE) + { // owner found + if (GetLocalInt(GetModule(),"X3_ENABLE_MOUNT_DB")&&GetIsPC(oOwner)) SetLocalInt(oOwner,"bX3_STORE_MOUNT_INFO",TRUE); + sString=GetResRef(oHorse); + // do not allow removing paladin horses from owner + if (GetStringLeft(sString,GetStringLength(HORSE_PALADIN_PREFIX))==HORSE_PALADIN_PREFIX) return; + if (GetMaster(oHorse)==oOwner) RemoveHenchman(oOwner,oHorse); + DeleteLocalObject(oHorse,"oX3_HorseOwner"); + if (oHorse==GetLocalObject(oOwner,"oAssignedHorse")) + { + DeleteLocalObject(oOwner,"oAssignedHorse"); + HORSE_Support_AssignRemainingMount(oOwner); + } + } // owner found + } // valid parameter + sString=GetLocalString(oHorse,"sX3_OriginalName"); + if (GetStringLength(sString)>0) SetName(oHorse,sString); +} // HorseRemoveOwner() + + +object HorseGetOwner(object oHorse) +{ // PURPOSE: Return who the owner of oHorse is or return OBJECT_INVALID + object oOwner; + if (GetObjectType(oHorse)==OBJECT_TYPE_CREATURE) + { // valid parameter + oOwner=GetLocalObject(oHorse,"oX3_HorseOwner"); + if (GetObjectType(oOwner)==OBJECT_TYPE_CREATURE) return oOwner; + } // valid parameter + return OBJECT_INVALID; +} // HorseGetOwner() + + +void HorseAddHorseMenu(object oPC) +{ // PURPOSE: Add Horse Menu to the PC + object oSkin=SKIN_SupportGetSkin(oPC); + itemproperty iProp; + if (GetIsPC(oPC)) + { // valid parameter + iProp=ItemPropertyBonusFeat(IP_CONST_HORSE_MENU); + AddItemProperty(DURATION_TYPE_PERMANENT,iProp,oSkin); + } // valid parameter +} // HorseAddHorseMenu() + + +void HorseSetPhenotype(object oRider,int bJoust=FALSE) +{ // PURPOSE: To set the proper phenotype for oRider when mounted + int nCurrent=GetPhenoType(oRider); + int nPheno=-1; + if (bJoust) + { // jousting + if (GetLocalInt(oRider,"X3_CUSTOM_RACE_JOUST_PHENO")>0) nPheno=GetLocalInt(oRider,"X3_CUSTOM_RACE_JOUST_PHENO"); + else if (nCurrent==PHENOTYPE_NORMAL||nCurrent==HORSE_PHENOTYPE_MOUNTED_N) nPheno=HORSE_PHENOTYPE_JOUSTING_N; + else if (nCurrent==PHENOTYPE_BIG||nCurrent==HORSE_PHENOTYPE_MOUNTED_L) nPheno=HORSE_PHENOTYPE_JOUSTING_L; + } // jousting + else + { // not jousting + if (GetLocalInt(oRider,"X3_CUSTOM_RACE_MOUNTED_PHENO")>0) nPheno=GetLocalInt(oRider,"X3_CUSTOM_RACE_MOUNTED_PHENO"); + else if (nCurrent==PHENOTYPE_NORMAL||nCurrent==HORSE_PHENOTYPE_JOUSTING_N) nPheno=HORSE_PHENOTYPE_MOUNTED_N; + else if (nCurrent==PHENOTYPE_BIG||nCurrent==HORSE_PHENOTYPE_JOUSTING_L) nPheno=HORSE_PHENOTYPE_MOUNTED_L; + } // not jousting + if (nPheno!=-1) SetPhenoType(nPheno,oRider); +} // HorseSetPhenotype() + + +int HorseGetIsDisabled(object oCreature) +{ // PURPOSE: blocked path, death, entanglement, confusion, paralysis, stun, petrification, fear, turned, sleep, knockdown detection by Azbest + int bDisabled=FALSE; + if (GetIsDead(oCreature)||GetLocalInt(oCreature,"bPathIsBlocked")) + { + bDisabled=TRUE; + } + else + { + effect eEffect=GetFirstEffect(oCreature); + while(GetIsEffectValid(eEffect)&&!bDisabled) + { // traverse effects + if ((GetEffectType(eEffect)==EFFECT_TYPE_INVALIDEFFECT&&(GetEffectDurationType(eEffect)==DURATION_TYPE_TEMPORARY||GetEffectDurationType(eEffect)==DURATION_TYPE_PERMANENT))|| + GetEffectType(eEffect)==EFFECT_TYPE_ENTANGLE|| + GetEffectType(eEffect)==EFFECT_TYPE_CONFUSED|| + GetEffectType(eEffect)==EFFECT_TYPE_PARALYZE|| + GetEffectType(eEffect)==EFFECT_TYPE_STUNNED|| + GetEffectType(eEffect)==EFFECT_TYPE_PETRIFY|| + GetEffectType(eEffect)==EFFECT_TYPE_FRIGHTENED|| + GetEffectType(eEffect)==EFFECT_TYPE_TURNED|| + GetEffectType(eEffect)==EFFECT_TYPE_SLEEP) + { // match + bDisabled=TRUE; + } // match + eEffect=GetNextEffect(oCreature); + } // traverse effects + } + return bDisabled; +} // HorseGetIsDisabled() + + +void HorseMount(object oHorse,int bAnimate=TRUE,int bInstant=FALSE,int nState=0) +{ // PURPOSE: Handle the mounting of oHorse + // 0 = Initial state + // 1 = move to horse + // 2 = adjust for animation + // 3 = animate + // 4 = store horse and premount info + // 5 = set appearances + // 6 = destroy oHorse + object oRider=OBJECT_SELF; + float fMonitorSpeed=0.4f; + float fDenominator=3.0; // fraction denominator used to calculate synchronised timing of the process that runs concurently with animation + string sS; + string sTag; + string sResRef; + int nApp,nTail,nPheno,nN; + location lLoc; + float fF; + object oOb; + int nStoredState=GetLocalInt(oRider,"nX3_StoredMountState"); + int bPostMount=FALSE; + float fTimeDelay; // used to hold delay common references and reduce some repeated math + int bAct=GetLocalInt(GetModule(),"X3_HORSE_ACT_VS_DELAY"); + float fX3_MOUNT_MULTIPLE=GetLocalFloat(GetArea(oRider),"fX3_MOUNT_MULTIPLE"); + float fX3_TIMEOUT_TO_MOUNT=GetLocalFloat(GetModule(),"fX3_TIMEOUT_TO_MOUNT"); + if (GetLocalFloat(oRider,"fX3_MOUNT_MULTIPLE")>fX3_MOUNT_MULTIPLE) fX3_MOUNT_MULTIPLE=GetLocalFloat(oRider,"fX3_MOUNT_MULTIPLE"); + if (fX3_MOUNT_MULTIPLE<=0.0) fX3_MOUNT_MULTIPLE=1.0; + if (GetLocalFloat(oRider,"fX3_TIMEOUT_TO_MOUNT")!=0.0) fX3_TIMEOUT_TO_MOUNT=GetLocalFloat(oRider,"fX3_TIMEOUT_TO_MOUNT"); + if (fX3_TIMEOUT_TO_MOUNT<6.0) fX3_TIMEOUT_TO_MOUNT=18.0; + if (GetStringLength(GetLocalString(oHorse,"X3_HORSE_POSTMOUNT_SCRIPT"))>0) bPostMount=TRUE; + if (HorseGetIsDisabled()) return; // drop out if disabled + if (GetObjectType(oHorse)!=OBJECT_TYPE_CREATURE) return; + if (GetIsInCombat(oRider)||GetIsInCombat(oHorse)||IsInConversation(oRider)) return; + if (nState!=0&&nStoredState>nState) return; // abort recursion of this state + switch(nState) + { // main mounting switch + case 0: + { // ----- 0 - Initial State + DeleteLocalInt(oRider,"nX3_StoredMountState"); + if (!HorseGetCanBeMounted(oHorse,oRider)) + { // not mountable + if (GetIsPC(oRider)) + { // provide error message + FloatingTextStrRefOnCreature(111983,oRider,FALSE); + } // provide error message + return; + } // not mountable + if (GetDistanceBetween(oHorse,oRider)>20.0) + { // too far + ClearAllActions(); + ActionMoveToObject(oHorse,TRUE,15.0); + return; + } // too far + sS=GetLocalString(oHorse,"X3_HORSE_PREMOUNT_SCRIPT"); + if (GetStringLength(sS)>0) + { // premount script + SetLocalObject(oRider,"oX3_TempHorse",oHorse); + ExecuteScript(sS,oRider); + if (GetLocalInt(oHorse,"X3_HORSE_NOMOUNT")) + { // no mount set + DeleteLocalInt(oHorse,"X3_HORSE_NOMOUNT"); + return; + } // no mount set + } // premount script + SetLocalInt(oHorse,"X3_DOING_HORSE_ACTION",TRUE); + SetLocalInt(oRider,"X3_DOING_HORSE_ACTION",TRUE); + if (bAct) + { // make sure horse action can be cancelled if actions cancelled + fTimeDelay=8.0*fX3_MOUNT_MULTIPLE; + DelayCommand(fTimeDelay,DeleteLocalInt(oHorse,"X3_DOING_HORSE_ACTION")); + DelayCommand(fTimeDelay,DeleteLocalInt(oRider,"X3_DOING_HORSE_ACTION")); + } // make sure horse action can be cancelled if actions cancelled + SetSkinInt(oRider,"nX3_StoredFootstep",GetFootstepType(oRider)); + SetSkinInt(oRider,"nX3_HorseRiderPhenotype",GetPhenoType(oRider)); + SetLocalInt(oRider,"X3_HORSE_TAIL",HorseGetMountTail(oHorse)); + SetSkinInt(oRider,"nX3_HorseRiderAppearance",GetAppearanceType(oRider)); + SetSkinInt(oRider,"nX3_HorseTail",GetCreatureTailType(oHorse)); + SetSkinInt(oRider,"nX3_HorseAppearance",GetAppearanceType(oHorse)); + SetLocalInt(oRider,"nX3_HorsePortrait",GetPortraitId(oHorse)); + SetLocalInt(oRider,"nX3_RiderHP",GetCurrentHitPoints(oRider)); + SetSkinInt(oRider,"nX3_HorseHP",GetCurrentHitPoints(oHorse)); + SetSkinInt(oRider,"nX3_HorseRiderTail",GetCreatureTailType(oRider)); + SetLocalInt(oRider,"bX3_IS_RIDER",TRUE); + if (!GetIsPC(oRider)) + { // not a PC - set associate state + SetAssociateState(NW_ASC_IS_BUSY,TRUE,oRider); + } // not a PC - set associate state + AssignCommand(oHorse,ClearAllActions(TRUE)); + fTimeDelay=(fX3_TIMEOUT_TO_MOUNT+HORSE_MOUNT_DURATION)*fX3_MOUNT_MULTIPLE; + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectCutsceneImmobilize(),oHorse,fTimeDelay); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectCutsceneGhost(),oHorse,fTimeDelay); + if (!GetLocalInt(GetModule(),"X3_NO_MOUNT_COMMANDABLE")&&!bAct) AssignCommand(GetModule(),DelayCommand(2.0,HORSE_SupportSetMountingSentinel(oRider,oHorse,fX3_TIMEOUT_TO_MOUNT))); + if (!GetLocalInt(GetModule(),"X3_NO_MOUNT_COMMANDABLE")&&!bAct) SetCommandable(FALSE,oHorse); + if (!GetLocalInt(GetModule(),"X3_NO_MOUNT_COMMANDABLE")&&!bAct) SetCommandable(FALSE,oRider); + fTimeDelay=fMonitorSpeed*fX3_MOUNT_MULTIPLE; + SetLocalFloat(oRider,"X3_TOTAL_MOUNT_ANIMATION_DELAY",fDenominator*fTimeDelay); // sets a small time delay so that the following code doesnt happen at once + if (!bAnimate&&bInstant) + { // rapid mount + DelayCommand(fTimeDelay,HorseMount(oHorse,bAnimate,bInstant,4)); + } // rapid mount + else + { // move + if (!bAct) + { // not actions + DelayCommand(fTimeDelay,HorseMount(oHorse,bAnimate,bInstant,1)); + } // not actions + else + { // use actions - interruptable + ClearAllActions(); + ActionMoveToObject(oHorse,TRUE,1.5); + ActionDoCommand(HorseMount(oHorse,bAnimate,bInstant,1)); + } // use actions - interruptable + } // move + break; + } // ----- 0 - Initial State + case 1: + { // ----- 1 - Move To Horse + if (!GetLocalInt(GetModule(),"X3_NO_MOUNT_COMMANDABLE")&&GetCommandable(oHorse)&&!bAct) SetCommandable(FALSE,oHorse); + if (!GetLocalInt(GetModule(),"X3_NO_MOUNT_COMMANDABLE")&&GetCommandable(oRider)&&!bAct) SetCommandable(FALSE,oRider); + oOb=GetLocalObject(oHorse,"oX3_TempRider"); + if (oOb!=oRider&&GetIsObjectValid(oOb)) + { // someone else is mounting that + if (GetIsPC(oRider)) + { // someone else mounting + FloatingTextStringOnCreature(GetName(oOb)+GetStringByStrRef(111984),oRider,FALSE); + } // someone else mounting + DeleteLocalInt(oRider,"X3_DOING_HORSE_ACTION"); + if (!GetLocalInt(GetModule(),"X3_NO_MOUNT_COMMANDABLE")&&!bAct) SetCommandable(TRUE,oRider); + return; + } // someone else is mounting that + SetLocalObject(oHorse,"oX3_TempRider",oRider); + lLoc=HORSE_SupportGetMountLocation(oHorse,oRider,-90.0); + if (GetLocalInt(GetArea(oRider),"bX3_MOUNT_NO_ZAXIS")||GetLocalInt(GetModule(),"bX3_MOUNT_NO_ZAXIS")||GetLocalInt(oRider,"bX3_MOUNT_NO_ZAXIS")) + { // use vector without z axis - thanks Azbest + vector vLoc=GetPositionFromLocation(lLoc); + vector vRider=GetPosition(oRider); + vLoc-=Vector(0.0,0.0,vLoc.z); + vRider-=Vector(0.0,0.0,vRider.z); + fF=VectorMagnitude(vLoc-vRider); + } // use vector without z axis - thanks Azbest + else + { // use location including Z axis + fF=GetDistanceBetweenLocations(GetLocation(oRider),lLoc); + } // use location including Z axis + fMonitorSpeed=GetLocalFloat(GetModule(),"fX3_FREQUENCY"); + if (fMonitorSpeed<0.5||fMonitorSpeed>9.0) fMonitorSpeed=1.0; // frequency + fTimeDelay=fMonitorSpeed*fX3_MOUNT_MULTIPLE; + if (fX3_TIMEOUT_TO_MOUNT0.1&&GetLocalInt(oRider,"nX3_MovingMount")<=FloatToInt(fX3_TIMEOUT_TO_MOUNT/fTimeDelay)) + { // keep moving + nN=GetLocalInt(oRider,"nX3_MovingMount"); + nN++; // used to support timing out if cannot reach destination + SetLocalInt(oRider,"nX3_MovingMount",nN); + if (nN>FloatToInt(fX3_TIMEOUT_TO_MOUNT/fTimeDelay)) + { // timed out + if (!GetLocalInt(GetModule(),"X3_NO_MOUNT_COMMANDABLE")) + { + SetCommandable(TRUE,oRider); + ClearAllActions(); + ActionWait(X3_ACTION_DELAY*fX3_MOUNT_MULTIPLE); + ActionJumpToLocation(lLoc); + SetCommandable(FALSE,oRider); + } + bAnimate=FALSE; + } // timed out + else + { // keep trying + if (!GetLocalInt(GetModule(),"X3_NO_MOUNT_COMMANDABLE")) + { + SetCommandable(TRUE,oRider); + ClearAllActions(); + ActionMoveToLocation(lLoc,TRUE); + SetCommandable(FALSE,oRider); + } + SetLocalInt(oRider,"nX3_StoredMountState",1); + float fLastHorseDist=GetDistanceBetween(oRider,oHorse); + if (fLastHorseDist==GetLocalFloat(oRider,"fLastHorseDist")) + { + if (GetLocalInt(GetArea(oRider),"X3_ABORT_WHEN_STUCK")||GetLocalInt(oHorse,"X3_ABORT_WHEN_STUCK")) + { // break next call if we are found twice within the same distance from horse, which means we are stuck + SetLocalInt(oRider,"bPathIsBlocked",TRUE); + SetLocalInt(oRider,"nX3_StoredMountState",2); + } // break next call if we are found twice within the same distance from horse, which means we are stuck + else + { // if we are stuck, we want to mount + // no need to set bPathIsBlocked flag, because forced mount continues the proper chain of commands + SetLocalInt(oRider,"nX3_MovingMount",FloatToInt(fX3_TIMEOUT_TO_MOUNT/fTimeDelay)+1); + } // if we are stuck, we want to mount + } + SetLocalFloat(oRider,"fLastHorseDist",fLastHorseDist); + } // keep trying + DelayCommand(fTimeDelay,HorseMount(oHorse,bAnimate,bInstant,1)); + } // keep moving + else + { // next state + DeleteLocalInt(oRider,"nX3_MovingMount"); + DeleteLocalFloat(oRider,"fLastHorseDist"); + if (!GetLocalInt(GetModule(),"X3_NO_MOUNT_COMMANDABLE")) + { + SetCommandable(TRUE,oRider); + ClearAllActions(); + SetFacing(GetFacing(oHorse)); + SetCommandable(FALSE,oRider); + } + if (bAnimate&&!GetLocalInt(oHorse,"X3_NO_MOUNT_ANIMATE")) + { // see about animate + DelayCommand(0.1*fX3_MOUNT_MULTIPLE,HorseMount(oHorse,bAnimate,bInstant,2)); + } // see about animate + else + { // no animate + DelayCommand(0.1*fX3_MOUNT_MULTIPLE,HorseMount(oHorse,bAnimate,bInstant,4)); + } // no animate + } // next state + break; + } // ----- 1 - Move to Horse + case 2: + { // ----- 2 - Adjust for Animation + SetLocalInt(oRider,"nX3_StoredMountState",3); + nTail=GetLocalInt(oRider,"X3_HORSE_TAIL"); + SetLocalInt(oHorse,"X3_HORSE_TAIL",nTail); + nApp=HORSE_SupportNullAppearance(oHorse,oRider); + if (nApp>0) SetCreatureAppearanceType(oHorse,nApp); + SetCreatureTailType(nTail,oHorse); + DelayCommand(1.0*fX3_MOUNT_MULTIPLE,HorseMount(oHorse,bAnimate,bInstant,3)); // 1.0 second seems to be long enough to set up for animation + break; + } // ----- 2 - Adjust for Animation + case 3: + { // ----- 3 - Animate + SetLocalInt(oRider,"nX3_StoredMountState",4); + fMonitorSpeed=HORSE_MOUNT_DURATION; + if (GetLocalFloat(oHorse,"X3_HORSE_MOUNT_DURATION")>0.0) fMonitorSpeed=GetLocalFloat(oHorse,"X3_HORSE_MOUNT_DURATION"); + if (fMonitorSpeed<1.0) fMonitorSpeed=1.0; + fMonitorSpeed*=fX3_MOUNT_MULTIPLE; + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectCutsceneGhost(),oHorse,fMonitorSpeed+0.5); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectCutsceneGhost(),oRider,fMonitorSpeed+0.5); + if (!GetLocalInt(GetModule(),"X3_NO_MOUNT_COMMANDABLE")) + { + SetCommandable(TRUE,oRider); + ClearAllActions(); + ActionPlayAnimation(HORSE_ANIMATION_MOUNT,1.0,fMonitorSpeed); + SetCommandable(FALSE,oRider); + } + SetLocalFloat(oRider,"X3_TOTAL_MOUNT_ANIMATION_DELAY",fMonitorSpeed); // "case 4:" and "case 5:" need to happen concurrently and with the same time duration as the animation itself :) + HorseMount(oHorse,bAnimate,bInstant,4); + break; + } // ----- 3 - Animate + case 4: + { // ----- 4 - Store Horse and Premount Info + SetLocalInt(oRider,"nX3_StoredMountState",5); + sResRef=GetResRef(oHorse); + if (GetStringLength(sResRef)<1) SendMessageToPC(oRider,"x3_inc_horse(HorseMount): Error finding horse ResRef in case 4."); + SetSkinString(oRider,"sX3_HorseResRef",sResRef); + SetSkinString(oRider,"sX3_HorseMountTag",GetTag(oHorse)); + SetLocalString(oRider,"sX3_HorseMountScript",GetLocalString(oHorse,"sX3_HORSE_CREATED_SCRIPT")); + SetSkinString(oRider,"X3_HORSE_PREDISMOUNT_SCRIPT",GetLocalString(oHorse,"X3_HORSE_PREDISMOUNT_SCRIPT")); + SetSkinString(oRider,"X3_HORSE_POSTDISMOUNT_SCRIPT",GetLocalString(oHorse,"X3_HORSE_POSTDISMOUNT_SCRIPT")); + SetLocalInt(oRider,"X3_NO_MOUNT_ANIMATE",GetLocalInt(oHorse,"X3_NO_MOUNT_ANIMATE")); + if (GetLocalInt(oHorse,"X3_ABORT_WHEN_STUCK")) SetLocalInt(oRider,"X3_ABORT_WHEN_STUCK",TRUE); + if (GetLocalInt(GetModule(),"X3_HORSE_ENABLE_SADDLEBAGS")) + { // saddlebags support enabled + if (GetLocalInt(oHorse,"bX3_HAS_SADDLEBAGS")&&GetLocalObject(oHorse,"oX3_HorseOwner")!=oRider) if (GetMaster(oHorse)!=oRider) HorseSetOwner(oHorse,oRider,TRUE); + SetLocalInt(oRider,"bX3_HAS_SADDLEBAGS",GetLocalInt(oHorse,"bX3_HAS_SADDLEBAGS")); + if (GetLocalInt(oHorse,"bX3_HAS_SADDLEBAGS")) + { // transfer inventory + HorseStoreInventory(oHorse,oRider); + } // transfer inventory + } // saddlebads support enabled + fMonitorSpeed=GetLocalFloat(oRider,"X3_TOTAL_MOUNT_ANIMATION_DELAY")*(fDenominator-1.0)/fDenominator; + DelayCommand(fMonitorSpeed,HorseMount(oHorse,bAnimate,bInstant,5)); + break; + } // ----- 4 - Store Horse and Premount Info + case 5: + { // ----- 5 - Set Appearance + SetLocalInt(oRider,"nX3_StoredMountState",6); + nApp=GetAppearanceType(oHorse); + nTail=GetLocalInt(oRider,"X3_HORSE_TAIL"); + SetCreatureAppearanceType(oRider,HORSE_SupportGetMountedAppearance(oRider)); + HorseSetPhenotype(oRider); + SetCreatureTailType(nTail,oRider); + nApp=GetLocalInt(oHorse,"X3_HORSE_FOOTSTEP"); + if (nApp>0) SetFootstepType(nApp,oRider); + else { SetFootstepType(HORSE_FOOTSTEP_SOUND,oRider); } + fMonitorSpeed=GetLocalFloat(oRider,"X3_TOTAL_MOUNT_ANIMATION_DELAY")/fDenominator; + if (!bAnimate||bInstant) fTimeDelay=fMonitorSpeed; + else fTimeDelay=0.6; // changing appearance, pheno and tail takes about 0.6 second, hide the horse after that amount of time + DelayCommand(fTimeDelay,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY),oHorse,fMonitorSpeed*fDenominator)); + DelayCommand(fMonitorSpeed,HorseMount(oHorse,bAnimate,bInstant,6)); + break; + } // ----- 5 - Set Appearance + case 6: + { // ----- 6 - Destroy oHorse + SetLocalInt(oRider,"nX3_StoredMountState",7); + SetSkinInt(oRider,"bX3_IS_MOUNTED",TRUE); + SetLocalObject(oRider,"oX3_Saddlebags",GetLocalObject(oHorse,"oX3_Saddlebags")); + sS=GetLocalString(oHorse,"X3_HORSE_POSTMOUNT_SCRIPT"); + if (bPostMount) + { // run post mount script + SetLocalObject(oRider,"oX3_TempHorse",oHorse); + ExecuteScript(sS,oRider); + DeleteLocalObject(oRider,"oX3_TempHorse"); + DeleteLocalInt(oRider,"bX3_HORSE_MODIFIERS"); + } // run post mount script + else + { // no post mount script + HORSE_SupportIncreaseSpeed(oRider,oHorse); + HORSE_SupportAdjustMountedArcheryPenalty(oRider); + DelayCommand(0.4,HORSE_SupportApplyMountedSkillDecreases(oRider)); + HORSE_SupportApplyACBonus(oRider,oHorse); + HORSE_SupportApplyHPBonus(oRider,oHorse); + } // no post mount script + SetLocalInt(oRider,"bX3_HORSE_MODIFIERS",TRUE); + if (GetLocalInt(GetModule(),"X3_ENABLE_MOUNT_DB")) SetLocalInt(oRider,"bX3_STORE_MOUNT_INFO",TRUE); + DeleteLocalFloat(oRider,"X3_TOTAL_MOUNT_ANIMATION_DELAY"); + AssignCommand(oHorse,SetIsDestroyable(TRUE,FALSE,FALSE)); + DestroyObject(oHorse,0.3); + DelayCommand(0.5*fX3_MOUNT_MULTIPLE,DeleteLocalInt(oRider,"X3_DOING_HORSE_ACTION")); + if (!GetIsPC(oRider)) + { // not a PC - set associate state + DelayCommand(0.5*fX3_MOUNT_MULTIPLE,SetAssociateState(NW_ASC_IS_BUSY,FALSE,oRider)); + } // not a PC - set associate state + if (!GetLocalInt(GetModule(),"X3_NO_MOUNT_COMMANDABLE")) DelayCommand(0.5*fX3_MOUNT_MULTIPLE,SetCommandable(TRUE,oRider)); + break; + } // ----- 6 - Destroy oHorse + default: break; + } // main mounting switch +} // HorseMount() + + +object HorseDismount(int bAnimate=TRUE,int bSetOwner=TRUE) +{ // PURPOSE: Dismount the horse + object oRider=OBJECT_SELF; + object oHorse=OBJECT_INVALID; + object oOb; + string sS,sRR,sT; + int nN,nApp,nTail,nFootstep; + int bPostDismount=FALSE; + location lLoc; + float fX3_MOUNT_MULTIPLE=GetLocalFloat(GetArea(oRider),"fX3_MOUNT_MULTIPLE"); + float fX3_DISMOUNT_MULTIPLE=GetLocalFloat(GetArea(oRider),"fX3_DISMOUNT_MULTIPLE"); + if (GetLocalFloat(oRider,"fX3_MOUNT_MULTIPLE")>fX3_MOUNT_MULTIPLE) fX3_MOUNT_MULTIPLE=GetLocalFloat(oRider,"fX3_MOUNT_MULTIPLE"); + if (fX3_MOUNT_MULTIPLE<=0.0) fX3_MOUNT_MULTIPLE=1.0; + if (GetLocalFloat(oRider,"fX3_DISMOUNT_MULTIPLE")>0.0) fX3_DISMOUNT_MULTIPLE=GetLocalFloat(oRider,"fX3_DISMOUNT_MULTIPLE"); + if (fX3_DISMOUNT_MULTIPLE>0.0) fX3_MOUNT_MULTIPLE=fX3_DISMOUNT_MULTIPLE; // use dismount multiple instead of mount multiple + float fDelay=1.0*fX3_MOUNT_MULTIPLE; // base delay for non-animated dismount + if (GetStringLength(GetLocalString(oHorse,"X3_HORSE_POSTDISMOUNT_SCRIPT"))>0) bPostDismount=TRUE; + if (GetIsObjectValid(oRider)) + { // oRider is a valid object + if (!GetLocalInt(GetModule(),"X3_NO_MOUNT_COMMANDABLE")) SetCommandable(FALSE,oRider); + if (HorseGetIsMounted(oRider)) + { // Mounted + if (!GetIsPC(oRider)) + { // not PC - set associate state busy + SetAssociateState(NW_ASC_IS_BUSY,TRUE,oRider); + } // not PC - set associate state busy + sS=GetSkinString(oRider,"X3_HORSE_PREDISMOUNT_SCRIPT"); + if (GetStringLength(sS)>0) + { // PREDISMOUNT SCRIPT + ExecuteScript(sS,oRider); + if (GetLocalInt(oRider,"X3_HORSE_NOMOUNT")) + { // abort + DeleteLocalInt(oRider,"X3_HORSE_NOMOUNT"); + return OBJECT_INVALID; + } // abort + } // PREDISMOUNT SCRIPT + DeleteSkinString(oRider,"X3_HORSE_PREDISMOUNT_SCRIPT"); + SetLocalInt(oRider,"X3_DOING_HORSE_ACTION",TRUE); + if (!GetLocalInt(GetModule(),"X3_NO_MOUNT_COMMANDABLE")) + { + SetCommandable(TRUE,oRider); + ClearAllActions(); + SetCommandable(FALSE,oRider); + } + if (bAnimate&&!GetLocalInt(oRider,"X3_NO_MOUNT_ANIMATE")) + { // animated dismount + if (!GetLocalInt(GetModule(),"X3_NO_MOUNT_COMMANDABLE")) + { + SetCommandable(TRUE,oRider); + ActionWait(X3_ACTION_DELAY*fX3_MOUNT_MULTIPLE); + ActionPlayAnimation(HORSE_ANIMATION_DISMOUNT,1.0,HORSE_DISMOUNT_DURATION*fX3_MOUNT_MULTIPLE); + SetCommandable(FALSE,oRider); + } + fDelay=(X3_ACTION_DELAY+HORSE_DISMOUNT_DURATION)*fX3_MOUNT_MULTIPLE; // delay for animated dismount + } + sRR=GetSkinString(oRider,"sX3_HorseResRef"); + if (GetStringLength(sRR)>0) + { // create dismounted horse + if (bSetOwner) oOb=oRider; + sT=GetSkinString(oRider,"sX3_HorseMountTag"); + nApp=GetSkinInt(oRider,"nX3_HorseAppearance"); + nTail=GetSkinInt(oRider,"nX3_HorseTail"); // add this to be preserved + if (nApp<7) nApp=-1; + if (nTail<3) nTail=-1; + if (nFootstep<2) nFootstep=-1; + nFootstep=GetFootstepType(oRider); + sS=GetLocalString(oRider,"sX3_HorseMountScript"); + lLoc=HORSE_SupportGetMountLocation(oRider,oRider,-90.0); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectCutsceneGhost(),oRider,fDelay+1.0*fX3_MOUNT_MULTIPLE); + oHorse=HorseCreateHorse(sRR,GetLocation(oRider),oOb,sT,nApp,nTail,nFootstep,sS); + SetLocalInt(oHorse,"X3_DOING_HORSE_ACTION",TRUE); + if (GetLocalInt(oRider,"X3_ABORT_WHEN_STUCK")) SetLocalInt(oHorse,"X3_ABORT_WHEN_STUCK",TRUE); + if (!GetIsObjectValid(oHorse)) + { // failed to create + SendMessageToPC(oRider,"x3_inc_horse(HorseDismount): Failed to create horse."); + } // failed to create + if (oOb==oRider) SetLocalObject(oRider,"oAssignedHorse",oHorse); + if (GetLocalInt(oRider,"nX3_HorsePortrait")>0) SetPortraitId(oHorse,GetLocalInt(oRider,"nX3_HorsePortrait")); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY),oHorse,fDelay+0.5*fX3_MOUNT_MULTIPLE); + if (GetLocalInt(GetModule(),"X3_HORSE_ENABLE_SADDLEBAGS")&&GetIsObjectValid(oHorse)) + { // saddlebags support enabled + SetLocalInt(oHorse,"bX3_HAS_SADDLEBAGS",GetLocalInt(oRider,"bX3_HAS_SADDLEBAGS")); + if (GetLocalInt(oRider,"bX3_HAS_SADDLEBAGS")) + { // transfer contents + HorseRestoreInventory(oHorse); + } // transfer contents + } // saddlebads support enabled + } // create dismounted horse + else + { // resref not defined + SendMessageToPC(oRider,"x3_inc_horse(HorseDismount): Error resref missing."); + } // resref not defined + DeleteSkinInt(oRider,"bX3_IS_MOUNTED"); + if (GetLocalInt(GetModule(),"X3_ENABLE_MOUNT_DB")) SetLocalInt(oRider,"bX3_STORE_MOUNT_INFO",TRUE); + if (!GetLocalInt(GetModule(),"X3_NO_MOUNT_COMMANDABLE")) + { + SetCommandable(TRUE,oRider); + if (!bAnimate||GetLocalInt(oRider,"X3_NO_MOUNT_ANIMATE")) ActionWait(fDelay); + ActionMoveToLocation(lLoc,FALSE); + SetCommandable(FALSE,oRider); + } + DelayCommand(fDelay-0.8*fX3_MOUNT_MULTIPLE,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectCutsceneGhost(),oHorse,1.7*fX3_MOUNT_MULTIPLE)); + //DelayCommand(fDelay-0.8*fX3_MOUNT_MULTIPLE+1.7*fX3_MOUNT_MULTIPLE, FloatingTextStringOnCreature("ghost off",oRider)); // this tells us when the ghost effect from the above line wears off + DelayCommand(fDelay-0.7*fX3_MOUNT_MULTIPLE,HORSE_SupportResetUnmountedAppearance(oRider)); // keep in mind: changing mounted appearances takes about 0.6 seconds + DelayCommand(fDelay+0.0*fX3_MOUNT_MULTIPLE,HORSE_SupportTransferPreservedValues(oRider,oHorse)); + DelayCommand(fDelay+0.7*fX3_MOUNT_MULTIPLE,HORSE_SupportCleanVariables(oRider)); + DelayCommand(fDelay+1.0*fX3_MOUNT_MULTIPLE,DeleteLocalInt(oRider,"X3_DOING_HORSE_ACTION")); + DelayCommand(fDelay+1.0*fX3_MOUNT_MULTIPLE,DeleteLocalInt(oHorse,"X3_DOING_HORSE_ACTION")); + if (!GetIsPC(oRider)) + { // not PC - set associate state not busy + DelayCommand(fDelay+1.0*fX3_MOUNT_MULTIPLE,SetAssociateState(NW_ASC_IS_BUSY,FALSE,oRider)); + } // not PC - set associate state not busy + if (!GetLocalInt(GetModule(),"X3_NO_MOUNT_COMMANDABLE")) DelayCommand(fDelay+1.0*fX3_MOUNT_MULTIPLE,SetCommandable(TRUE,oRider)); + } // Mounted + } // oRider is a valid object + return oHorse; +} // HorseDismount() + + +int HorseGetMountTail(object oHorse) +{ // PURPOSE: Determine the tail that is needed to represent this horse + int nTail=GetCreatureTailType(oHorse); + int nApp=GetAppearanceType(oHorse); + if (GetLocalInt(oHorse,"X3_HORSE_TAIL")>0) return GetLocalInt(oHorse,"X3_HORSE_TAIL"); + if (nApp>=HORSE_APPEARANCE_OFFSET&&nApp<=HORSE_APPEARANCE_OFFSET+HORSE_NUMBER_OF_HORSES) + { // default horses + return (nApp-HORSE_APPEARANCE_OFFSET)+HORSE_TAIL_OFFSET; + } // default horses + else if (nApp>=HORSE_NULL_RACE_DWARF&&nApp<=HORSE_NULL_RACE_HUMAN) return nTail; + return CREATURE_TAIL_TYPE_NONE; +} // HorseGetMountTail() + + +void HorseInstantDismount(object oRider) +{ // PURPOSE: Instantly dismount oRider + float fX3_MOUNT_MULTIPLE=GetLocalFloat(GetArea(oRider),"fX3_MOUNT_MULTIPLE"); + float fX3_DISMOUNT_MULTIPLE=GetLocalFloat(GetArea(oRider),"fX3_DISMOUNT_MULTIPLE"); + if (GetLocalFloat(oRider,"fX3_MOUNT_MULTIPLE")>fX3_MOUNT_MULTIPLE) fX3_MOUNT_MULTIPLE=GetLocalFloat(oRider,"fX3_MOUNT_MULTIPLE"); + if (fX3_MOUNT_MULTIPLE<=0.0) fX3_MOUNT_MULTIPLE=1.0; + if (GetLocalFloat(oRider,"fX3_DISMOUNT_MULTIPLE")>0.0) fX3_DISMOUNT_MULTIPLE=GetLocalFloat(oRider,"fX3_DISMOUNT_MULTIPLE"); + if (fX3_DISMOUNT_MULTIPLE>0.0) fX3_MOUNT_MULTIPLE=fX3_DISMOUNT_MULTIPLE; // use dismount multiple instead of mount multiple + HORSE_SupportResetUnmountedAppearance(oRider); + DeleteLocalInt(oRider,"bX3_HORSE_MODIFIERS"); + DelayCommand(0.1*fX3_MOUNT_MULTIPLE,HORSE_SupportOriginalSpeed(oRider)); + DelayCommand(0.2*fX3_MOUNT_MULTIPLE,HORSE_SupportRemoveMountedSkillDecreases(oRider)); + DelayCommand(0.2*fX3_MOUNT_MULTIPLE,HORSE_SupportAdjustMountedArcheryPenalty(oRider)); + DelayCommand(0.3*fX3_MOUNT_MULTIPLE,HORSE_SupportRemoveACBonus(oRider)); + DelayCommand(0.3*fX3_MOUNT_MULTIPLE,HORSE_SupportRemoveHPBonus(oRider)); + if (GetLocalInt(GetModule(),"X3_ENABLE_MOUNT_DB")) SetLocalInt(oRider,"bX3_STORE_MOUNT_INFO",TRUE); + DelayCommand(0.4*fX3_MOUNT_MULTIPLE,HORSE_SupportMountCleanVariables(oRider)); + DeleteSkinInt(oRider,"bX3_IS_MOUNTED"); +} // HorseInstantDismount() + + +void HorseInstantMount(object oRider,int nTail,int bJoust=FALSE,string sResRef="") +{ // PURPOSE: Instantly mount oRider + string sRR=sResRef; + if (GetStringLength(sRR)<1) sRR="x3_horse001"; + SetSkinInt(oRider,"nX3_StoredFootstep",GetFootstepType(oRider)); + SetSkinInt(oRider,"nX3_HorseRiderPhenotype",GetPhenoType(oRider)); + SetSkinInt(oRider,"nX3_HorseRiderAppearance",GetAppearanceType(oRider)); + SetLocalInt(oRider,"nX3_RiderHP",GetCurrentHitPoints(oRider)); + SetSkinInt(oRider,"nX3_HorseRiderTail",GetCreatureTailType(oRider)); + SetCreatureAppearanceType(oRider,HORSE_SupportGetMountedAppearance(oRider)); + HorseSetPhenotype(oRider,bJoust); + SetCreatureTailType(nTail,oRider); + SetFootstepType(HORSE_FOOTSTEP_SOUND,oRider); + SetSkinString(oRider,"sX3_HorseResRef",sRR); + HORSE_SupportIncreaseSpeed(oRider,OBJECT_INVALID); + HORSE_SupportAdjustMountedArcheryPenalty(oRider); + SetSkinInt(oRider,"bX3_IS_MOUNTED",TRUE); + DelayCommand(0.5,HORSE_SupportApplyMountedSkillDecreases(oRider)); + if (GetLocalInt(GetModule(),"X3_ENABLE_MOUNT_DB")) SetLocalInt(oRider,"bX3_STORE_MOUNT_INFO",TRUE); + SetLocalInt(oRider,"bX3_HORSE_MODIFIERS",TRUE); +} // HorseInstantMount() + + +object HorseGetPaladinMount(object oRider) +{ // PURPOSE: Return the paladin mount for oRider + string sS; + object oNPC; + int nN=1; + if (GetIsObjectValid(oRider)&&GetObjectType(oRider)==OBJECT_TYPE_CREATURE) + { // valid parameter + sS=GetResRef(oRider); + if (GetStringLeft(sS,GetStringLength(HORSE_PALADIN_PREFIX))==HORSE_PALADIN_PREFIX) return oRider; // oRider IS a paladin mount + sS=GetSkinString(oRider,"sX3_HorseResRef"); + if (GetStringLeft(sS,GetStringLength(HORSE_PALADIN_PREFIX))==HORSE_PALADIN_PREFIX) return oRider; // oRider is riding a paladin mount + oNPC=GetLocalObject(oRider,"oX3PaladinMount"); + if (GetIsObjectValid(oNPC)&&GetStringLeft(GetResRef(oNPC),GetStringLength(HORSE_PALADIN_PREFIX))==HORSE_PALADIN_PREFIX) return oNPC; + oNPC=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oRider,nN); + while(GetIsObjectValid(oNPC)) + { // check henchmen + sS=GetResRef(oNPC); + if (GetStringLeft(sS,GetStringLength(HORSE_PALADIN_PREFIX))==HORSE_PALADIN_PREFIX) return oNPC; + nN++; + oNPC=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oRider,nN); + } // check henchmen + return GetLocalObject(oRider,"oX3PaladinMount"); + } // valid parameter + return OBJECT_INVALID; +} // HorseGetPaladinMount() + + +object HorseSummonPaladinMount(int bPHBDuration=FALSE) +{ // PURPOSE: Summon Paladin Mount + object oSummoner=OBJECT_SELF; + object oMount; + location lLoc; + int nLevel=GetLevelByClass(CLASS_TYPE_PALADIN,oSummoner); + int nDespawnTime; + int nCurrentTime; + int nMountNum=1; + string sResRef=HORSE_PALADIN_PREFIX; + effect eVFX; + oMount=HorseGetPaladinMount(oSummoner); + if (!GetIsObjectValid(oMount)&&nLevel>4&&GetObjectType(oSummoner)==OBJECT_TYPE_CREATURE) + { // okay to summon - only one paladin mount at a time + if ((GetIsPC(oSummoner)||GetIsDM(oSummoner))&&!GetHasFeat(FEAT_HORSE_MENU,oSummoner)) HorseAddHorseMenu(oSummoner); + if (nLevel>7&&nLevel<11) nMountNum=2; + else if (nLevel>10&&nLevel<15) nMountNum=3; + else if (nLevel>14&&nLevel<25) nMountNum=4; + else if (nLevel>24&&nLevel<30) nMountNum=5; + else if (nLevel>29&&nLevel<35) nMountNum=6; + else if (nLevel>34&&nLevel<40) nMountNum=7; + else if (nLevel>39) nMountNum=8; + lLoc=HORSE_SupportGetMountLocation(oSummoner,oSummoner); + oMount=HorseCreateHorse(sResRef+IntToString(nMountNum),lLoc,oSummoner); + if (!GetIsObjectValid(oMount)) oMount=HorseCreateHorse(sResRef+IntToString(nMountNum),GetLocation(oSummoner),oSummoner); + if (GetIsObjectValid(oMount)) + { // oMount created + eVFX=EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVFX,oMount,3.0); + eVFX=EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_2); + if (nMountNum>3) eVFX=EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVFX,GetLocation(oMount)); + if (bPHBDuration) + { // Players Handbook 3.5 edition durations + nCurrentTime=HORSE_SupportAbsoluteMinute(); + nDespawnTime=(2*nLevel*60)+nCurrentTime; + SetLocalInt(oSummoner,"nX3_PALADIN_UNSUMMON",nDespawnTime); + } // Players Handbook 3.5 edition durations + else + { // 24 hour - popular bioware + nCurrentTime=HORSE_SupportAbsoluteMinute(); + nDespawnTime=nCurrentTime+(60*24); + SetLocalInt(oSummoner,"nX3_PALADIN_UNSUMMON",nDespawnTime); + } // 24 hour - popular bioware + if (GetLocalInt(GetModule(),"X3_ENABLE_MOUNT_DB")&&GetIsPC(oSummoner)) SetLocalInt(oSummoner,"bX3_STORE_MOUNT_INFO",TRUE); + SetLocalObject(oSummoner,"oX3PaladinMount",oMount); + } // oMount created + } // okay to summon - only one paladin mount at a time + else { oMount=OBJECT_INVALID; } + return oMount; +} // HorseSummonPaladinMount() + +object HorseSummonPhantomSteed(int nCasterLvl, int nDuration) +{ // PURPOSE: Summon Phantom Steed + object oSummoner=OBJECT_SELF; + object oMount; + location lLoc; + int nDespawnTime; + int nCurrentTime; + int nMountNum=1; + string sResRef=HORSE_PALADIN_PREFIX; + effect eVFX; + oMount=HorseGetPaladinMount(oSummoner); + if (!GetIsObjectValid(oMount) && GetObjectType(oSummoner) == OBJECT_TYPE_CREATURE) + { // okay to summon - only one mount at a time + if ((GetIsPC(oSummoner) || GetIsDM(oSummoner))&&!GetHasFeat(FEAT_HORSE_MENU,oSummoner)) HorseAddHorseMenu(oSummoner); + if (nCasterLvl < 11) nMountNum = 2; + else if (nCasterLvl > 10 && nCasterLvl < 15) nMountNum = 3; + else if (nCasterLvl > 14 && nCasterLvl < 25) nMountNum = 4; + else if (nCasterLvl > 24 && nCasterLvl < 30) nMountNum = 5; + else if (nCasterLvl > 29 && nCasterLvl < 35) nMountNum = 6; + else if (nCasterLvl > 34 && nCasterLvl < 40) nMountNum = 7; + else if (nCasterLvl > 39) nMountNum = 8; + lLoc=HORSE_SupportGetMountLocation(oSummoner,oSummoner); + oMount=HorseCreateHorse(sResRef+IntToString(nMountNum),lLoc,oSummoner); + if (!GetIsObjectValid(oMount)) oMount=HorseCreateHorse(sResRef+IntToString(nMountNum),GetLocation(oSummoner),oSummoner); + if (GetIsObjectValid(oMount)) + { // oMount created + eVFX=EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVFX,oMount,3.0); + eVFX=EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_2); + if (nMountNum>3) eVFX=EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVFX,GetLocation(oMount)); + nCurrentTime=HORSE_SupportAbsoluteMinute(); + nDespawnTime=(nDuration*60)+nCurrentTime; + SetLocalInt(oSummoner,"nX3_PALADIN_UNSUMMON",nDespawnTime); + if (GetLocalInt(GetModule(),"X3_ENABLE_MOUNT_DB")&&GetIsPC(oSummoner)) SetLocalInt(oSummoner,"bX3_STORE_MOUNT_INFO",TRUE); + SetLocalObject(oSummoner,"oX3PaladinMount",oMount); + } // oMount created + } // okay to summon - only one paladin mount at a time + else { oMount=OBJECT_INVALID; } + return oMount; +} // HorseSummonPaladinMount() + +void HorseUnsummonPaladinMount() +{ // PURPOSE: Unsummon Paladin Mount + object oPaladin=OBJECT_SELF; + object oMount=HorseGetPaladinMount(oPaladin); + effect eVFX; + if (!GetIsObjectValid(oMount)) oMount=GetLocalObject(oPaladin,"oX3PaladinMount"); + if (GetIsObjectValid(oMount)&&oMount!=oPaladin) + { // Paladin Mount exists + if (GetLocalInt(GetModule(),"X3_ENABLE_MOUNT_DB")&&GetIsPC(oPaladin)) SetLocalInt(oPaladin,"bX3_STORE_MOUNT_INFO",TRUE); + if (oMount==oPaladin) + { // Mounted - must dismount first + ClearAllActions(TRUE); + oMount=HorseDismount(FALSE,TRUE); + DelayCommand(3.0,HorseUnsummonPaladinMount()); + } // Mounted - must dismount first + else + { // is the mount + if (GetIsPC(oPaladin)) + { + SendMessageToPCByStrRef(oPaladin,111985); + } + DeleteLocalInt(oPaladin,"nX3_PALADIN_UNSUMMON"); + eVFX=EffectVisualEffect(VFX_IMP_UNSUMMON); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVFX,GetLocation(oMount)); + DestroyObject(oMount); + } // is the mount + } // Paladin Mount exists + else + { // perhaps the command is being called by the mount itself + if (GetStringLeft(GetResRef(oPaladin),GetStringLength(HORSE_PALADIN_PREFIX))==HORSE_PALADIN_PREFIX) + { // is a paladin mount despawning itself + oMount=oPaladin; + eVFX=EffectVisualEffect(VFX_IMP_UNSUMMON); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVFX,GetLocation(oMount)); + DestroyObject(oMount); + } // is a paladin mount despawning itself + } // perhaps the command is being called by the mount itself +} // HorseUnsummonPaladinMount() + + +int HorseGetIsAMount(object oTarget) +{ // PURPOSE: Return TRUE if oTarget is a mountable creature + int nApp; + int nTail; + if (GetSkinInt(oTarget,"bX3_IS_MOUNTED")) return FALSE; + if (GetLocalInt(oTarget,"bX3_IS_MOUNT")) return TRUE; + else if (GetLocalInt(oTarget,"bX3_IS_RIDER")) return FALSE; + else if (GetStringLength(GetLocalString(oTarget,"X3_HORSE_PREMOUNT_SCRIPT"))>0) return TRUE; + else if (GetStringLength(GetLocalString(oTarget,"X3_HORSE_PREDISMOUNT_SCRIPT"))>0) return TRUE; + else if (GetStringLength(GetLocalString(oTarget,"X3_HORSE_POSTDISMOUNT_SCRIPT"))>0) return TRUE; + else if (GetStringLength(GetLocalString(oTarget,"X3_HORSE_POSTMOUNT_SCRIPT"))>0) return TRUE; + else if (GetStringLength(GetLocalString(oTarget,"X3_HORSE_OWNER_TAG"))>0) return TRUE; + else if (GetLocalInt(oTarget,"X3_HORSE_NULL_APPEARANCE")>0) return TRUE; + //else if (GetSkinInt(oTarget,"X3_HORSE_APPEARANCE")>0) return TRUE; + else if (GetLocalInt(oTarget,"X3_HORSE_TAIL")>0) return TRUE; + nApp=GetAppearanceType(oTarget); + nTail=GetCreatureTailType(oTarget); + if (nApp>=HORSE_APPEARANCE_OFFSET&&nApp<=HORSE_APPEARANCE_OFFSET+HORSE_NUMBER_OF_HORSES) return TRUE; + if (nApp==HORSE_NULL_RACE_GNOME||nApp==HORSE_NULL_RACE_ELF||nApp==HORSE_NULL_RACE_GNOME||nApp==HORSE_NULL_RACE_HALFELF|| + nApp==HORSE_NULL_RACE_HALFLING||nApp==HORSE_NULL_RACE_HALFORC||nApp==HORSE_NULL_RACE_HUMAN) + { // might be a tail always based mount + if (nTail>=HORSE_TAIL_OFFSET&&nTail<=HORSE_TAIL_OFFSET+HORSE_NUMBER_OF_HORSES&&nTail!=14) return TRUE; + } // might be a tail always based mount + return FALSE; +} // HorseGetIsAMount() + + +void HorseStoreInventory(object oCreature,object oRider=OBJECT_INVALID) +{ // PURPOSE: To store inventory being carried by oCreature + object oWP=GetWaypointByTag("X3_HORSE_INVENTORY_STORAGE"); + object oOwner=GetMaster(oCreature); + object oOwnersMaster=GetMaster(oOwner); + object oItem; + object oChest; + object oCont; + int nC; + int nN; + string sR; + string sT; + int nST; + int nCH; + string sID=GetTag(oCreature); // ID to uniquely identify for inventory storage + string sDB="X3SADDLEBAG"+GetTag(GetModule()); + if (GetStringLength(GetLocalString(GetModule(),"X3_SADDLEBAG_DATABASE"))>0) sDB=GetLocalString(GetModule(),"X3_SADDLEBAG_DATABASE"); + if (GetStringLength(sID)>6) sID=GetStringLeft(sID,6); + sID=sID+GetStringRight(GetResRef(oCreature),2); + if (oOwner!=oCreature&&GetIsObjectValid(oOwner)) + { // owner specified + if (!GetIsPC(oOwner)) + { // henchman owner + sT=GetTag(oOwner); + if (GetStringLength(sT)>8) sT=GetStringLeft(sT,6)+GetStringRight(sT,2); + sID=sID+sT; + if (GetIsObjectValid(oOwnersMaster)&&oOwner!=oOwnersMaster&&GetIsPC(oOwnersMaster)) + { // PC + sID=sID+GetPCPublicCDKey(oOwnersMaster)+GetStringLeft(GetName(oOwnersMaster),4); + } // PC + } // henchman owner + else + { // PC owner + sID=sID+GetPCPublicCDKey(oOwner)+GetStringLeft(GetName(oOwner),4); + } // PC owner + } // owner specified + if (GetIsObjectValid(oWP)) + { // do not use database + // I am using a placeable that has inventory but, by default does not + // have scripts that produce extra inventory. + oChest=CreateObject(OBJECT_TYPE_PLACEABLE,"x3_plc_jars001",GetLocation(oWP),FALSE,"X3_"+sID); + SetName(oChest,GetName(oCreature)+"'s Inventory"); + SetLocalObject(oCreature,"oX3_Saddlebags",oChest); + HORSE_SupportTransferInventory(oCreature,oChest,GetLocation(oChest)); + } // do not use database + else + { // use database + nC=0; + oItem=GetFirstItemInInventory(oCreature); + while(GetIsObjectValid(oItem)) + { // store inventory + nC++; + sR=GetResRef(oItem); + sT=GetTag(oItem); + nST=GetItemStackSize(oItem); + nCH=GetItemCharges(oItem); + SetCampaignString(sDB,"sR"+sID+IntToString(nC),sR); + SetCampaignString(sDB,"sT"+sID+IntToString(nC),sT); + SetCampaignInt(sDB,"nS"+sID+IntToString(nC),nST); + SetCampaignInt(sDB,"nC"+sID+IntToString(nC),nCH); + DestroyObject(oItem,0.1); + oItem=GetNextItemInInventory(oCreature); + } // store inventory + SetCampaignInt(sDB,"nCO_"+sID,nC); + if (GetIsObjectValid(oRider)) SetLocalString(oRider,"sDB_Inv",sID); + } // use database +} // HorseStoreInventory() + + +void HorseRestoreInventory(object oCreature,int bDrop=FALSE) +{ // PURPOSE: To restore inventory that was stored while mounted + object oWP=GetWaypointByTag("X3_HORSE_INVENTORY_STORAGE"); + object oOwner=GetMaster(oCreature); + object oOwnersMaster=GetMaster(oOwner); + object oItem; + object oChest; + int nC; + int nN; + string sR; + string sT; + int nST; + int nCH; + string sID=GetTag(oCreature);// ID to uniquely identify for inventory storage + string sDB="X3SADDLEBAG"+GetTag(GetModule()); + if (GetStringLength(GetLocalString(GetModule(),"X3_SADDLEBAG_DATABASE"))>0) sDB=GetLocalString(GetModule(),"X3_SADDLEBAG_DATABASE"); + if (GetStringLength(sID)>6) sID=GetStringLeft(sID,6); + sID=sID+GetStringRight(GetResRef(oCreature),2); + if (oOwner!=oCreature&&GetIsObjectValid(oOwner)) + { // owner specified + if (!GetIsPC(oOwner)) + { // henchman owner + sT=GetTag(oOwner); + if (GetStringLength(sT)>8) sT=GetStringLeft(sT,6)+GetStringRight(sT,2); + sID=sID+sT; + if (GetIsObjectValid(oOwnersMaster)&&oOwner!=oOwnersMaster&&GetIsPC(oOwnersMaster)) + { // PC + sID=sID+GetPCPublicCDKey(oOwnersMaster)+GetStringLeft(GetName(oOwnersMaster),4); + } // PC + } // henchman owner + else + { // PC owner + sID=sID+GetPCPublicCDKey(oOwner)+GetStringLeft(GetName(oOwner),4); + } // PC owner + } // owner specified + if (GetIsObjectValid(oWP)) + { // do not use database + oChest=GetObjectByTag("X3_"+sID); + if (!GetIsObjectValid(oChest)) oChest=GetLocalObject(oOwner,"oX3_Saddlebags"); + if (GetIsObjectValid(oChest)) + { // chest found + HORSE_SupportTransferInventory(oChest,oCreature,GetLocation(oCreature),TRUE); + } // chest found + else + { // error + PrintString("ERROR: x3_inc_horse 'HorseRestoreInventory()' Could not find chest 'X3_"+sID+"'!"); + } // error + } // do not use database + else + { // use database + nC=GetCampaignInt(sDB,"nCO_"+sID); + while(nC>0) + { // restore inventory + sR=GetCampaignString(sDB,"sR"+sID+IntToString(nC)); + sT=GetCampaignString(sDB,"sT"+sID+IntToString(nC)); + nST=GetCampaignInt(sDB,"nS"+sID+IntToString(nC)); + nCH=GetCampaignInt(sDB,"nC"+sID+IntToString(nC)); + DeleteCampaignVariable(sDB,"sR"+sID+IntToString(nC)); + DeleteCampaignVariable(sDB,"sT"+sID+IntToString(nC)); + DeleteCampaignVariable(sDB,"nS"+sID+IntToString(nC)); + DeleteCampaignVariable(sDB,"nC"+sID+IntToString(nC)); + if (!bDrop) oItem=CreateItemOnObject(sR,oCreature,nST,sT); + else + { // drop + oItem=CreateObject(OBJECT_TYPE_ITEM,sR,GetLocation(oCreature),FALSE,sT); + if (GetItemStackSize(oItem)!=nST&&nST!=0) SetItemStackSize(oItem,nST); + } // drop + if (nCH>0) SetItemCharges(oItem,nCH); + nC--; + } // restore inventory + DeleteCampaignVariable(sDB,"nCO_"+sID); + } // use database +} // HorseRestoreInventory() + + +void HorseChangeToDefault(object oCreature) +{ // PURPOSE: HorseChangeToDefault + int nRace=GetRacialType(oCreature); + int nDefApp=StringToInt(Get2DAString("racialtypes","Appearance",nRace)); + int nDefPhen; + int nPheno=GetPhenoType(oCreature); + if (nPheno==HORSE_PHENOTYPE_JOUSTING_L||nPheno==HORSE_PHENOTYPE_MOUNTED_L) nDefPhen=PHENOTYPE_BIG; + else { nDefPhen=PHENOTYPE_NORMAL; } + SetCreatureAppearanceType(oCreature,nDefApp); + SetPhenoType(nDefPhen,oCreature); + SetCreatureTailType(CREATURE_TAIL_TYPE_NONE,oCreature); + SetFootstepType(FOOTSTEP_TYPE_NORMAL,oCreature); + DeleteLocalInt(oCreature,"bX3_HORSE_MODIFIERS"); + DelayCommand(0.1,HORSE_SupportOriginalSpeed(oCreature)); + DelayCommand(0.2,HORSE_SupportRemoveMountedSkillDecreases(oCreature)); + DelayCommand(0.2,HORSE_SupportAdjustMountedArcheryPenalty(oCreature)); + DelayCommand(0.4,HORSE_SupportRemoveACBonus(oCreature)); + DelayCommand(0.4,HORSE_SupportRemoveHPBonus(oCreature)); + DelayCommand(1.0,HORSE_SupportCleanVariables(oCreature)); + if (GetLocalInt(GetModule(),"X3_ENABLE_MOUNT_DB")&&GetIsPC(oCreature)) SetLocalInt(oCreature,"bX3_STORE_MOUNT_INFO",TRUE); +} // HorseChangeToDefault() + + +void HorseIfNotDefaultAppearanceChange(object oCreature) +{ // PURPOSE: See if not default appearance + int nRace=GetRacialType(oCreature); + int nDefApp=StringToInt(Get2DAString("racialtypes","Appearance",nRace)); + if (GetAppearanceType(oCreature)!=nDefApp) HorseChangeToDefault(oCreature); +} // HorseIfNotDefaultAppearanceChange() + + +object HorseGetMyHorse(object oRider) +{ // PURPOSE: Return active horse + object oRet=GetLocalObject(oRider,"oX3_TempHorse"); + if (GetIsObjectValid(oRet)) return oRet; + return GetLocalObject(oRider,"oAssignedHorse"); +} // HorseGetMyHorse() + + +int HorseGetHasAHorse(object oRider) +{ // PURPOSE: Return if oRider has a horse + int nN=1; + object oHench=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oRider,nN); + while(GetIsObjectValid(oHench)) + { // traverse henchmen + if (HorseGetIsAMount(oHench)) return TRUE; + nN++; + oHench=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oRider,nN); + } // traverse henchmen + return FALSE; +} // HorseGetHasAHorse() + + +object HorseGetHorse(object oRider,int nN=1) +{ // PURPOSE: Return the nNth horse of oRider + int nC=1; + int nH=0; + object oHench=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oRider,nC); + while(GetIsObjectValid(oHench)) + { // traverse henchmen + if (HorseGetIsAMount(oHench)) + { // is a horse + nH++; + if (nH==nN) return oHench; + } // is a horse + nC++; + oHench=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oRider,nC); + } // traverse henchmen + return OBJECT_INVALID; +} // HorseGetHorse() + + +void HorseRestoreHenchmenLocations(object oPC) +{ // PURPOSE: Restore the locations of the henchmen of henchmen + object oHench; + int nN; + int nC; + object oAssoc; + int bNoMounts; + int bNoMounting; + int bRunAgain=FALSE; + float fDelay=0.2; + object oArea; + if (GetLocalInt(GetModule(),"X3_RESTORE_HENCHMEN_LOCATIONS")) + { // restore location of henchmen belonging to henchmen + nN=1; + oHench=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oPC,nN); + while(GetIsObjectValid(oHench)) + { // hench + oArea=GetArea(oHench); + bNoMounts=FALSE; + bNoMounting=FALSE; + if (!GetLocalInt(oArea,"X3_MOUNT_OK_EXCEPTION")) + { // find out if horses ok + if (GetLocalInt(GetModule(),"X3_MOUNTS_EXTERNAL_ONLY")&&GetIsAreaInterior(oArea)) bNoMounts=TRUE; + else if (GetLocalInt(GetModule(),"X3_MOUNTS_NO_UNDERGROUND")&&!GetIsAreaAboveGround(oArea)) bNoMounts=TRUE; + } // find out if horses ok + if (GetLocalInt(oArea,"X3_NO_MOUNTING")||GetLocalInt(oArea,"X3_NO_HORSES")||bNoMounts) bNoMounting=TRUE; + nC=1; + oAssoc=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oHench,nC); + while(GetIsObjectValid(oAssoc)) + { // check each associate + if (HorseGetIsMounted(oAssoc)&&(bNoMounts||bNoMounting)) + { // dismount + bRunAgain=TRUE; + DelayCommand(fDelay,AssignCommand(oAssoc,HORSE_SupportDismountWrapper(FALSE,TRUE))); + fDelay=fDelay+0.2; + } // dismount + else if (HorseGetIsAMount(oAssoc)&&bNoMounts) + { // no mounts + DelayCommand(fDelay,RemoveHenchman(oHench,oAssoc)); + DelayCommand(fDelay+0.01,SetAssociateState(NW_ASC_MODE_STAND_GROUND,TRUE,oAssoc)); + fDelay=fDelay+0.2; + } // no mounts + else if (GetArea(oAssoc)!=oArea) + { // jump + AssignCommand(oAssoc,ClearAllActions(TRUE)); + AssignCommand(oAssoc,ActionJumpToObject(oHench)); + } // jump + nC++; + oAssoc=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oHench,nC); + } // check each associate + nN++; + oHench=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oPC,nN); + } // hench + nN=1; + oHench=GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_NOT_PC,oPC,nN); + while(GetIsObjectValid(oHench)) + { // test non-henchmen + if (!GetIsObjectValid(GetMaster(oHench))||GetMaster(oHench)==oHench) + { // test associates + oArea=GetArea(oHench); + bNoMounts=FALSE; + bNoMounting=FALSE; + if (!GetLocalInt(oArea,"X3_MOUNT_OK_EXCEPTION")) + { // find out if horses ok + if (GetLocalInt(GetModule(),"X3_MOUNTS_EXTERNAL_ONLY")&&GetIsAreaInterior(oArea)) bNoMounts=TRUE; + else if (GetLocalInt(GetModule(),"X3_MOUNTS_NO_UNDERGROUND")&&!GetIsAreaAboveGround(oArea)) bNoMounts=TRUE; + } // find out if horses ok + if (GetLocalInt(oArea,"X3_NO_MOUNTING")||GetLocalInt(oArea,"X3_NO_HORSES")||bNoMounts) bNoMounting=TRUE; + nC=1; + oAssoc=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oHench,nC); + while(GetIsObjectValid(oAssoc)) + { // check each associate + if (HorseGetIsMounted(oAssoc)&&(bNoMounts||bNoMounting)) + { // dismount + bRunAgain=TRUE; + DelayCommand(fDelay,AssignCommand(oAssoc,HORSE_SupportDismountWrapper(FALSE,TRUE))); + fDelay=fDelay+0.2; + } // dismount + else if (HorseGetIsAMount(oAssoc)&&bNoMounts) + { // no mounts + DelayCommand(fDelay,RemoveHenchman(oHench,oAssoc)); + DelayCommand(fDelay+0.01,SetAssociateState(NW_ASC_MODE_STAND_GROUND,TRUE,oAssoc)); + fDelay=fDelay+0.2; + } // no mounts + else if (GetArea(oAssoc)!=oArea) + { // jump + AssignCommand(oAssoc,ClearAllActions(TRUE)); + AssignCommand(oAssoc,ActionJumpToObject(oHench)); + } // jump + nC++; + oAssoc=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oHench,nC); + } // check each associate + } // test associates + nN++; + oHench=GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_NOT_PC,oPC,nN); + } // test non-henchmen + if (bRunAgain) DelayCommand(5.0+fDelay,HorseRestoreHenchmenLocations(oPC)); + } // restore location of henchmen belonging to henchmen +} // HorseRestoreHenchmenLocations() + + +//////////////////////////////////////////////////////////////////////////////// +/////////////////////////////// TRANSITIONS //////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + + +void HorseHitchHorses(object oHitch,object oClicker,location lPreJump) +{ // PURPOSE: Hitch all associates to clicker + object oOb; + object oHench; + int nN=1; + int nNN; + int bNotAllowed=FALSE; + float fX3_MOUNT_MULTIPLE=GetLocalFloat(GetArea(oClicker),"fX3_MOUNT_MULTIPLE"); + float fX3_DISMOUNT_MULTIPLE=GetLocalFloat(GetArea(oClicker),"fX3_DISMOUNT_MULTIPLE"); + if (GetLocalFloat(oClicker,"fX3_MOUNT_MULTIPLE")>fX3_MOUNT_MULTIPLE) fX3_MOUNT_MULTIPLE=GetLocalFloat(oClicker,"fX3_MOUNT_MULTIPLE"); + if (fX3_MOUNT_MULTIPLE<=0.0) fX3_MOUNT_MULTIPLE=1.0; + if (GetLocalFloat(oClicker,"fX3_DISMOUNT_MULTIPLE")>0.0) fX3_DISMOUNT_MULTIPLE=GetLocalFloat(oClicker,"fX3_DISMOUNT_MULTIPLE"); + if (fX3_DISMOUNT_MULTIPLE>0.0) fX3_MOUNT_MULTIPLE=fX3_DISMOUNT_MULTIPLE; // use dismount multiple instead of mount multiple + float fDelay=0.2*fX3_MOUNT_MULTIPLE; + oOb=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oClicker,nN); + while(GetIsObjectValid(oOb)) + { // traverse henchmen + if (HorseGetIsAMount(oOb)&&(!GetLocalInt(oOb,"X3_DOING_HORSE_ACTION"))) + { // is a mount + bNotAllowed=TRUE; + if (GetStringLeft(GetResRef(oOb),GetStringLength(HORSE_PALADIN_PREFIX))==HORSE_PALADIN_PREFIX) SetLocalObject(oClicker,"oX3PaladinMount",oOb); + if (GetIsObjectValid(oHitch)&&GetDistanceBetween(oClicker,oHitch)<15.0) + { // jump to hitch + DelayCommand(0.1,RemoveHenchman(oClicker,oOb)); + AssignCommand(oOb,ClearAllActions(TRUE)); + //AssignCommand(oOb,ActionWait(X3_ACTION_DELAY/2*fX3_MOUNT_MULTIPLE)); + AssignCommand(oOb,ActionJumpToObject(oHitch)); + AssignCommand(oOb,ActionDoCommand(SetFacingPoint(GetPosition(oHitch)))); + SetAssociateState(NW_ASC_MODE_STAND_GROUND,TRUE,oOb); + } // jump to hitch + else + { // stand where you are and make way + DelayCommand(0.1,RemoveHenchman(oClicker,oOb)); + SetAssociateState(NW_ASC_MODE_STAND_GROUND,TRUE,oOb); + AssignCommand(oOb,ClearAllActions(TRUE)); + if (GetDistanceBetween(oOb,oClicker)<3.0) DelayCommand(1.0*fX3_MOUNT_MULTIPLE,AssignCommand(oOb,ActionMoveAwayFromLocation(lPreJump,FALSE,3.0+IntToFloat(Random(15))/10.0))); + else if (GetDistanceBetween(oOb,oClicker)>4.0) DelayCommand(1.0*fX3_MOUNT_MULTIPLE,AssignCommand(oOb,ActionMoveToLocation(GetBehindLocation(oClicker)))); + } // stand where you are and make way + } // is a mount + else + { // check for mounts for this henchman + oHench=oOb; + nNN=1; + oOb=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oHench,nNN); + while(GetIsObjectValid(oOb)) + { // traverse henchmen + if (HorseGetIsAMount(oOb)&&(!GetLocalInt(oOb,"X3_DOING_HORSE_ACTION"))) + { // is a mount + bNotAllowed=TRUE; + if (GetStringLeft(GetResRef(oOb),GetStringLength(HORSE_PALADIN_PREFIX))==HORSE_PALADIN_PREFIX) SetLocalObject(oHench,"oX3PaladinMount",oOb); + if (GetIsObjectValid(oHitch)&&GetDistanceBetween(oClicker,oHitch)<15.0) + { // jump to hitch + DelayCommand(0.1,RemoveHenchman(oHench,oOb)); + AssignCommand(oOb,ClearAllActions(TRUE)); + //AssignCommand(oOb,ActionWait(X3_ACTION_DELAY/2*fX3_MOUNT_MULTIPLE)); + AssignCommand(oOb,ActionJumpToObject(oHitch)); + AssignCommand(oOb,ActionDoCommand(SetFacingPoint(GetPosition(oHitch)))); + SetAssociateState(NW_ASC_MODE_STAND_GROUND,TRUE,oOb); + } // jump to hitch + else + { // stand where you are and make way + DelayCommand(0.1,RemoveHenchman(oHench,oOb)); + AssignCommand(oOb,ClearAllActions(TRUE)); + SetAssociateState(NW_ASC_MODE_STAND_GROUND,TRUE,oOb); + fDelay+=0.2*fX3_MOUNT_MULTIPLE; + //if (GetDistanceBetween(oOb,oClicker)<4.0) DelayCommand(fDelay,AssignCommand(oOb,ActionMoveAwayFromLocation(lPreJump,FALSE,4.0+IntToFloat(Random(15))/10.0))); + if (GetDistanceBetween(oOb,OBJECT_SELF)<4.0) DelayCommand(fDelay,AssignCommand(oOb,ActionMoveAwayFromLocation(lPreJump,FALSE,4.0+IntToFloat(Random(15))/10.0))); + //else if (GetDistanceBetween(oOb,oClicker)>5.0) DelayCommand(fDelay,AssignCommand(oOb,ActionMoveToLocation(GetBehindLocation(oClicker)))); + else if (GetDistanceBetween(oOb,OBJECT_SELF)>5.0) DelayCommand(fDelay,AssignCommand(oOb,ActionMoveToObject(OBJECT_SELF,FALSE,4.0+IntToFloat(Random(15))/10.0))); + //SendMessageToPC(oClicker, FloatToString(GetDistanceBetween(oOb,OBJECT_SELF))); + } // stand where you are and make way + } // is a mount + nNN++; + oOb=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oHench,nNN); + } // traverse henchmen + } // check for mounts for this henchman + nN++; + oOb=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oClicker,nN); + } // traverse henchmen + if (bNotAllowed) SendMessageToPCByStrRef(oClicker,111990); +} // HorseHitchHorses() + + +void HorseForceJump(object oJumper,object oDestination,float fRange=2.0,int nTimeOut=10) +{ // PURPOSE: Make sure jump + //SendMessageToPC(oJumper,"nw_g0_transition:ForceJump("+IntToString(nTimeOut)+")"); + if (nTimeOut>0&&(GetArea(oJumper)!=GetArea(oDestination)||GetDistanceBetween(oJumper,oDestination)>fRange)) + { // jump + AssignCommand(oJumper,ClearAllActions(TRUE)); + AssignCommand(oJumper,ActionJumpToObject(oDestination)); + DelayCommand(1.0,HorseForceJump(oJumper,oDestination,fRange,nTimeOut-1)); + } // jump +} // HorseForceJump() + + +void HorseMoveAssociates(object oMaster) +{ // PURPOSE: Give the PC some breathing room + int nN,nNN; + float fDelay=0.2; + object oHench,oAssociate,oSummon; + nN=1; + oAssociate=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oMaster,nN); + while(GetIsObjectValid(oAssociate)) + { // move associates + if (HorseGetIsAMount(oAssociate)||HorseGetIsMounted(oAssociate)) + { // only move mounts or mounted associates + if (GetArea(oAssociate)==GetArea(oMaster)&&GetDistanceBetween(oMaster,oAssociate)<3.0) + { // move away + AssignCommand(oAssociate,ClearAllActions()); + DelayCommand(1.0,AssignCommand(oAssociate,ActionMoveAwayFromObject(oMaster,FALSE,3.0+IntToFloat(Random(10))/10.0))); + } // move away + } // only move mounts or mounted associates + else + { // henchmen of henchman + oHench=oAssociate; + nNN=1; + oAssociate=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oHench,nNN); + while(GetIsObjectValid(oAssociate)) + { // traverse henchmen + if (HorseGetIsAMount(oAssociate)||HorseGetIsMounted(oAssociate)) + { // only move mounts or mounted associates + if (GetArea(oAssociate)==GetArea(oMaster)&&GetDistanceBetween(oMaster,oAssociate)<3.0) + { // move away + fDelay+=0.2; + AssignCommand(oAssociate,ClearAllActions()); + DelayCommand(fDelay,AssignCommand(oAssociate,ActionMoveAwayFromObject(oMaster,FALSE,3.0+IntToFloat(Random(15))/10.0))); + } // move away + } // only move mounts or mounted associates + nNN++; + oAssociate=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oHench,nNN); + oSummon=GetAssociate(ASSOCIATE_TYPE_SUMMONED,oHench,nNN); + } // traverse henchmen + nNN=1; + oSummon=GetAssociate(ASSOCIATE_TYPE_SUMMONED,oHench,nNN); + while(GetIsObjectValid(oSummon)) + { // traverse summons + if (HorseGetIsAMount(oSummon)||HorseGetIsMounted(oSummon)) + { // only move mounts or mounted associates + if (GetArea(oSummon)==GetArea(oMaster)&&GetDistanceBetween(oMaster,oSummon)<3.0) + { // move away + fDelay+=0.2; + AssignCommand(oSummon,ClearAllActions()); + DelayCommand(fDelay,AssignCommand(oSummon,ActionMoveAwayFromObject(oMaster,FALSE,3.0+IntToFloat(Random(15))/10.0))); + } // move away + } // only move mounts or mounted associates + nNN++; + oSummon=GetAssociate(ASSOCIATE_TYPE_SUMMONED,oHench,nNN); + } // traverse summons + } // henchmen of henchman + nN++; + oAssociate=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oMaster,nN); + } // move associates + nN=1; + oAssociate=GetAssociate(ASSOCIATE_TYPE_SUMMONED,oMaster,nN); + while(GetIsObjectValid(oAssociate)) + { // move associates + if (HorseGetIsAMount(oAssociate)||HorseGetIsMounted(oAssociate)) + { // only move mounts or mounted associates + if (GetArea(oAssociate)==GetArea(oMaster)&&GetDistanceBetween(oMaster,oAssociate)<3.0) + { // move away + AssignCommand(oAssociate,ClearAllActions()); + DelayCommand(1.0,AssignCommand(oAssociate,ActionMoveAwayFromObject(oMaster,FALSE,3.0+IntToFloat(Random(10))/10.0))); + } // move away + } // only move mounts or mounted associates + nN++; + oAssociate=GetAssociate(ASSOCIATE_TYPE_SUMMONED,oMaster,nN); + } // move associates +} // HorseMoveAssociates() + + +//////////////////////////////////////////////////////////////////////////////// +///////////////////////////// DEATH HANDLING /////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + + +void HorseDismountWrapper() +{ // Wrap + object oNPC=OBJECT_SELF; + if (HorseGetIsMounted(oNPC)) + { // make sure dismount + DelayCommand(0.1,HORSE_SupportResetUnmountedAppearance(oNPC)); + DelayCommand(0.8,HORSE_SupportCleanVariables(oNPC)); + DelayCommand(1.0,HORSE_SupportRemoveACBonus(oNPC)); + DelayCommand(1.0,HORSE_SupportRemoveHPBonus(oNPC)); + DelayCommand(1.0,HORSE_SupportRemoveMountedSkillDecreases(oNPC)); + DelayCommand(1.0,HORSE_SupportAdjustMountedArcheryPenalty(oNPC)); + DelayCommand(1.0,HORSE_SupportOriginalSpeed(oNPC)); + DelayCommand(2.0,HorseDismountWrapper()); + } // make sure dismount +} // HorseDismountWrapper() + + +void HorseReassign(object oHorse,object oHench,object oMaster) +{ // PURPOSE: To handle horse reassign + if (GetIsObjectValid(oMaster)&&oMaster!=oHench) + { // reassign + HorseSetOwner(oHorse,oMaster); + DeleteLocalObject(oHench,"oAssignedHorse"); + } // reassign + else + { // free + HorseRemoveOwner(oHorse); + DeleteLocalObject(oHench,"oAssignedHorse"); + } // free +} // HorseReassign() + + +int HorseHandleDeath() +{ // PURPOSE: Handle horses, re-assigning dying henchman's horse, handle mounted henchman's death (dismount, transfer saddlebag content to horse, re-assign horse to PC or free it) + object oDied=OBJECT_SELF; + object oHorse=HorseGetHorse(oDied); + object oMaster=GetMaster(oDied); + if (GetLocalInt(GetModule(),"X3_ENABLE_MOUNT_DB")&&GetIsObjectValid(GetMaster(oDied))) SetLocalInt(GetMaster(oDied),"bX3_STORE_MOUNT_INFO",TRUE); + if (HorseGetIsAMount(oDied)) + { // check dying horse for saddlebags and eventual re-assigning to master + if (GetLocalInt(GetModule(),"X3_HORSE_ENABLE_SADDLEBAGS")&&GetLocalInt(oDied,"bX3_HAS_SADDLEBAGS")) + { // might have saddle bags + object oOwner=HorseGetOwner(oDied); + if (!GetIsPC(oOwner)&&GetIsObjectValid(oOwner)&&oOwner!=oDied) + { // npc + oOwner=GetMaster(oOwner); + if (GetIsPC(oOwner)) + { // set to PC then drop + HorseSetOwner(oDied,oOwner); + } // set to PC then drop + } // npc + else if (GetIsPC(oOwner)) + { // PC + } // PC + DeleteLocalInt(oDied,"bX3_HAS_SADDLEBAGS"); // if you don't want to remove saddlebags for horse resurrection purpose, make sure that the corpse's inventory content is moved to the resurrected living horse again (if you do that, you can possibly remove the check for saddlebags including the repeated call of the death script) + DelayCommand(0.1,ExecuteScript(GetLocalString(oDied,"sX3_DEATH_SCRIPT"),oDied)); + return TRUE; // no resurrection for horses by default + } // might have saddle bags + return TRUE; // horse should not respawn like other henchmen + } // check dying horse for saddlebags and eventual re-assigning to master + if (GetIsObjectValid(oHorse)) HorseReassign(oHorse,oDied,GetMaster(oDied)); // check henchman's horses for possible re-assigning to master or free them + // * Bob Minors Jan 2008: added support for X3 mounts: + // * If killed while mounted, we are dismounted. This takes about 0.5s so drop out and rerun this script again afterward + if (HorseGetIsMounted(oDied)) + { // check if creature died in mounted state + oHorse=HorseDismount(FALSE,TRUE); + SetLocalObject(oDied,"oAssignedHorse",oHorse); // Kludge + HorseReassign(oHorse,oDied,oMaster); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectKnockdown(),oHorse,1.8); + DelayCommand(2.0,AssignCommand(oHorse,ActionMoveAwayFromObject(oDied,TRUE,3.0))); // drop rider and jump aside + DelayCommand(1.2,ExecuteScript(GetLocalString(oDied,"sX3_DEATH_SCRIPT"),oDied)); // give dismount and potential inventory transfer some space before rerun + //return TRUE; // this return makes the dead mounted henchman non-resurrectable, so its commented out so that they can be resurrected by default + } // check if creature died in mounted state +return FALSE; +} //HorseHandleDeath() + + +//////////////////////////////////////////////////////////////////////////////// +/////////////////////////// PRELOAD ANIMATIONS ///////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + + +void HorsePreloadAnimations(object oPC) +{ // PURPOSE: Force a preload of mount animations + int nApp=GetAppearanceType(oPC); + int nTail=GetCreatureTailType(oPC); + //SetCreatureAppearanceType(oPC,HORSE_SupportGetMountedAppearance(oPC)); + if (nTail==0) nTail=14; + HORSE_SupportRestoreFromPreload(oPC,nApp,nTail); +} // HorsePreloadAnimations() + + +//void main(){} diff --git a/src/include/xchst_inc.nss b/src/include/xchst_inc.nss new file mode 100644 index 0000000..cd948df --- /dev/null +++ b/src/include/xchst_inc.nss @@ -0,0 +1,95 @@ +#include "inc_utility" +#include "inc_sql" +#include "prc_inc_chat" + +const string XCHST_PLC = "xchst_plc"; +const string XCHST_CONT = "xchst_cont"; +//const string XCHST_DB = "xchst_db"; +const string XCHST_OWN = "xchst_owner"; +const string XCHST_ID = "xchst_id"; + +// return database ID from oTarget +string GetOwnerID(object oPC) +{ + string sID = GetPCPublicCDKey(oPC, TRUE); + sID += "#" + GetName(oPC); + return GetSubString(sID, 0, 20); +} + +location MoveLocation(location lCurrent,float fDirection,float fDistance,float fOffFacing = 0.0,float fOffZ = 0.0f) +{ + vector vPos = GetPositionFromLocation(lCurrent); + float fFace = GetFacingFromLocation(lCurrent); + float fNewX = vPos.x + (fDistance * cos(fFace + fDirection)); + float fNewY = vPos.y + (fDistance * sin(fFace + fDirection)); + float fNewZ = vPos.z + (fOffZ); + vector vNewPos = Vector(fNewX,fNewY,fNewZ); + location lNewLoc = Location(GetAreaFromLocation(lCurrent),vNewPos,fFace + fOffFacing); + return lNewLoc; +} + +object CreateChest(object oOwner, location lTarget, string sID) +{ + //Create the item container first + object oChest; + if(GetPRCSwitch(PRC_USE_DATABASE)) + oChest = PRC_GetPersistentObject(oOwner, sID, OBJECT_INVALID, XCHST_DB); + else + oChest = RetrieveCampaignObject(XCHST_DB, sID, lTarget); + + if(!GetIsObjectValid(oChest)) + oChest = CreateObject(OBJECT_TYPE_CREATURE, XCHST_CONT, lTarget, FALSE); + + effect eLink = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY); + eLink = EffectLinkEffects(eLink, EffectCutsceneImmobilize()); + eLink = EffectLinkEffects(eLink, EffectCutsceneGhost()); + eLink = EffectLinkEffects(eLink, EffectAreaOfEffect(185, "", "", "xchst_exit")); + eLink = SupernaturalEffect(eLink); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oChest); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(EffectEthereal()), oChest); + + //now the placeable + object oPLC = CreateObject(OBJECT_TYPE_PLACEABLE, XCHST_PLC, lTarget, FALSE); + effect eVis = SupernaturalEffect(EffectVisualEffect(VFX_DUR_PROT_SHADOW_ARMOR)); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVis, oPLC); + + SetLocalObject(oChest, XCHST_PLC, oPLC); + SetLocalObject(oChest, XCHST_OWN, oOwner); + SetLocalString(oChest, XCHST_ID, sID); + //bind the chest to pc and placeable object + SetLocalObject(oOwner, XCHST_CONT, oChest); + SetLocalObject(oPLC, XCHST_CONT, oChest); + + return oChest; +} + +void SummonChest(object oPC) +{ + location lNewLoc = MoveLocation(GetLocation(oPC), 0.0, 1.5, 0.0, 0.0); + CreateChest(oPC, lNewLoc, GetOwnerID(oPC)); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3), lNewLoc); +} + +void DismissChest(object oChest) +{ + object oPC = GetLocalObject(oChest, XCHST_OWN); + object oPLC = GetLocalObject(oChest, XCHST_PLC); + string sOwnerID = GetLocalString(oChest, XCHST_ID); + + AssignCommand(oChest, ClearAllActions(TRUE)); + RemoveHenchman(oPC, oChest); + DeleteLocalObject(oPC, XCHST_CONT); + + if(GetPRCSwitch(PRC_USE_DATABASE)) + PRC_SetPersistentObject(oPC, sOwnerID, oChest, 0, XCHST_DB); + else + StoreCampaignObject(XCHST_DB, sOwnerID, oChest); + + // if not in single player mode - export character + if(GetPCPublicCDKey(oPC) != "") + ExportSingleCharacter(oPC); + + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_UNSUMMON), GetLocation(oPLC)); + MyDestroyObject(oChest); + MyDestroyObject(oPLC); +} \ No newline at end of file diff --git a/src/module/are/area.are.json b/src/module/are/area.are.json new file mode 100644 index 0000000..dba6f0c --- /dev/null +++ b/src/module/are/area.are.json @@ -0,0 +1,2922 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 1 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 8 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 13 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 2960685 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 6457991 + }, + "MoonFogAmount": { + "type": "byte", + "value": 5 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 000 - DM's Area" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area000TestArea" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 81 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 112 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 112 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 91 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 80 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 85 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 112 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 112 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 112 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 112 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 112 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 112 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 112 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 112 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 112 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tic01" + }, + "Width": { + "type": "int", + "value": 8 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/area001.are.json b/src/module/are/area001.are.json new file mode 100644 index 0000000..45eeada --- /dev/null +++ b/src/module/are/area001.are.json @@ -0,0 +1,2922 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 7 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 8 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 21 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 0 + }, + "MoonFogAmount": { + "type": "byte", + "value": 10 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 001" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area001" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area001" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 151 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 152 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 156 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 2 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 117 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 11 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 11 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 3 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 155 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 2 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 0 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 3 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 155 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 3 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 103 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 157 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 152 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 155 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 157 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 157 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 3 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 152 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 151 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 2 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 2 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 156 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 0 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 155 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 155 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 2 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 159 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 151 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 152 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 151 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 239 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tdm01" + }, + "Width": { + "type": "int", + "value": 8 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/area002.are.json b/src/module/are/area002.are.json new file mode 100644 index 0000000..93af384 --- /dev/null +++ b/src/module/are/area002.are.json @@ -0,0 +1,2922 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 7 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 8 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 21 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 0 + }, + "MoonFogAmount": { + "type": "byte", + "value": 10 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 002" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area002" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area002" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 151 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 198 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 155 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 0 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 239 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 2 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 23 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 22 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 2 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 50 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 212 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 239 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 22 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 23 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 154 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 154 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 160 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 23 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 22 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 160 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 22 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 201 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 25 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 161 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 22 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 199 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 199 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 25 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 201 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 13 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 13 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 10 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 156 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 3 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 151 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 201 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 10 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 152 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 154 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tdm01" + }, + "Width": { + "type": "int", + "value": 8 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/area003.are.json b/src/module/are/area003.are.json new file mode 100644 index 0000000..5443c98 --- /dev/null +++ b/src/module/are/area003.are.json @@ -0,0 +1,2922 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 7 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 8 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 21 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 0 + }, + "MoonFogAmount": { + "type": "byte", + "value": 10 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 003" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area003" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area003" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 152 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 155 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 156 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 152 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 155 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 156 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 123 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 155 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 0 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 156 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 157 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 155 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 151 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 202 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 239 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tdm01" + }, + "Width": { + "type": "int", + "value": 8 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/area004.are.json b/src/module/are/area004.are.json new file mode 100644 index 0000000..4e5bdde --- /dev/null +++ b/src/module/are/area004.are.json @@ -0,0 +1,1202 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 3 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 6 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 16 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 4462353 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 3487127 + }, + "MoonFogAmount": { + "type": "byte", + "value": 7 + }, + "MoonFogColor": { + "type": "dword", + "value": 94 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 004" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area004" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area004" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 176 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 93 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 12 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 12 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 94 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 176 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 27 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 12 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 12 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 12 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 12 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 12 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 12 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 12 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 12 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 27 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 12 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 12 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 12 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 12 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 12 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 12 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 85 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 85 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 27 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 12 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 12 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 27 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 12 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 12 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 85 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 27 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 12 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 12 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 85 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 12 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 12 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 27 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 12 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 12 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 27 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 12 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 12 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 27 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 12 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 12 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tic01" + }, + "Width": { + "type": "int", + "value": 4 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/area005.are.json b/src/module/are/area005.are.json new file mode 100644 index 0000000..1e30e10 --- /dev/null +++ b/src/module/are/area005.are.json @@ -0,0 +1,2922 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 6 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 8 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 21 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 0 + }, + "MoonFogAmount": { + "type": "byte", + "value": 10 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 005" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area005" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area005" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 248 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 250 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 278 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 106 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 19 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 42 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 269 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 43 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 36 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 268 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 84 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 267 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 266 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 84 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 3 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 41 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 35 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 128 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 88 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 86 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 267 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 264 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 238 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 110 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 111 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 43 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 89 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 86 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 266 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 265 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 110 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 110 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 120 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 120 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 238 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 110 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 110 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 237 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 3 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 264 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 106 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 266 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 79 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 110 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 110 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 204 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 0 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 78 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 95 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 106 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 93 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 110 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 111 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 110 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 110 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 110 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 100 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 106 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 101 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 111 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "ttu01" + }, + "Width": { + "type": "int", + "value": 8 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/area006.are.json b/src/module/are/area006.are.json new file mode 100644 index 0000000..9b19317 --- /dev/null +++ b/src/module/are/area006.are.json @@ -0,0 +1,1202 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 3 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 6 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 13 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 2960685 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 6457991 + }, + "MoonFogAmount": { + "type": "byte", + "value": 5 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 006" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area006" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area006" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 147 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 143 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 144 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 108 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 102 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 147 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 72 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 72 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 144 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 72 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 72 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 102 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 100 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 145 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 120 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 148 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tic01" + }, + "Width": { + "type": "int", + "value": 4 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/area007.are.json b/src/module/are/area007.are.json new file mode 100644 index 0000000..814135c --- /dev/null +++ b/src/module/are/area007.are.json @@ -0,0 +1,2922 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 3 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 8 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 21 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 0 + }, + "MoonFogAmount": { + "type": "byte", + "value": 10 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 007" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area007" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area007" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 157 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 54 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 47 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 49 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 54 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 49 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 49 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 114 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 49 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 1 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tic01" + }, + "Width": { + "type": "int", + "value": 8 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/area008.are.json b/src/module/are/area008.are.json new file mode 100644 index 0000000..a68a408 --- /dev/null +++ b/src/module/are/area008.are.json @@ -0,0 +1,2922 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 1 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 3 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 8 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 0 + }, + "LightingScheme": { + "type": "byte", + "value": 22 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 0 + }, + "MoonFogAmount": { + "type": "byte", + "value": 0 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 008" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area008" + }, + "ShadowOpacity": { + "type": "byte", + "value": 50 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area008" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 10 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 10 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 71 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 73 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 136 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 133 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 10 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 24 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 54 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 29 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 115 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 120 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 104 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 150 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 114 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 118 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 117 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 104 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 114 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 115 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 0 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 150 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 150 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 150 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 113 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tds01" + }, + "Width": { + "type": "int", + "value": 8 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/area009.are.json b/src/module/are/area009.are.json new file mode 100644 index 0000000..501b612 --- /dev/null +++ b/src/module/are/area009.are.json @@ -0,0 +1,858 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 1 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 3 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 4 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 0 + }, + "LightingScheme": { + "type": "byte", + "value": 22 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 0 + }, + "MoonFogAmount": { + "type": "byte", + "value": 0 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 009" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area009" + }, + "ShadowOpacity": { + "type": "byte", + "value": 50 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area009" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 166 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 45 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 130 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 158 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 114 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 121 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 166 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 121 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 2 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 18 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 121 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 113 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 163 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 113 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tdc01" + }, + "Width": { + "type": "int", + "value": 4 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/area010.are.json b/src/module/are/area010.are.json new file mode 100644 index 0000000..874a4ef --- /dev/null +++ b/src/module/are/area010.are.json @@ -0,0 +1,858 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 1 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 3 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 4 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 0 + }, + "LightingScheme": { + "type": "byte", + "value": 22 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 0 + }, + "MoonFogAmount": { + "type": "byte", + "value": 0 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 010" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area010" + }, + "ShadowOpacity": { + "type": "byte", + "value": 50 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area010" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 0 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 113 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 166 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 117 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 18 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 156 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 114 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 121 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 166 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 45 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 129 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 128 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tdr01" + }, + "Width": { + "type": "int", + "value": 4 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/area011.are.json b/src/module/are/area011.are.json new file mode 100644 index 0000000..231eed1 --- /dev/null +++ b/src/module/are/area011.are.json @@ -0,0 +1,1245 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 1 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 3 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 5 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 0 + }, + "LightingScheme": { + "type": "byte", + "value": 22 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 0 + }, + "MoonFogAmount": { + "type": "byte", + "value": 0 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 011" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area011" + }, + "ShadowOpacity": { + "type": "byte", + "value": 50 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area011" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 27 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 7 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 36 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 27 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 36 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 75 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 7 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 75 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 76 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 75 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 7 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 75 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 36 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 27 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 36 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 7 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 27 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tii01" + }, + "Width": { + "type": "int", + "value": 5 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/area012.are.json b/src/module/are/area012.are.json new file mode 100644 index 0000000..dd9c846 --- /dev/null +++ b/src/module/are/area012.are.json @@ -0,0 +1,1890 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 7 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 8 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 0 + }, + "LightingScheme": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 13132900 + }, + "MoonFogAmount": { + "type": "byte", + "value": 0 + }, + "MoonFogColor": { + "type": "dword", + "value": 6566450 + }, + "MoonShadows": { + "type": "byte", + "value": 1 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 012" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area012" + }, + "ShadowOpacity": { + "type": "byte", + "value": 50 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 4210688 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 8454016 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 4210688 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area012" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 76 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 73 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 115 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 75 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 72 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 166 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 110 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 74 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 71 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 19 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 56 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 142 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 51 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 57 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 153 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 18 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 7 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 77 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 79 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 117 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 115 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 78 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 80 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 115 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "ttf01" + }, + "Width": { + "type": "int", + "value": 5 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/area013.are.json b/src/module/are/area013.are.json new file mode 100644 index 0000000..afb01d7 --- /dev/null +++ b/src/module/are/area013.are.json @@ -0,0 +1,686 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 1 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 3 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 3 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 0 + }, + "LightingScheme": { + "type": "byte", + "value": 22 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 0 + }, + "MoonFogAmount": { + "type": "byte", + "value": 0 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 013" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area013" + }, + "ShadowOpacity": { + "type": "byte", + "value": 50 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area013" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 176 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 28 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 29 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 28 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 35 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 29 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 28 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 0 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 2 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 176 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tic01" + }, + "Width": { + "type": "int", + "value": 4 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/area014.are.json b/src/module/are/area014.are.json new file mode 100644 index 0000000..c63cf8d --- /dev/null +++ b/src/module/are/area014.are.json @@ -0,0 +1,1245 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 1 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 7 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 5 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 0 + }, + "LightingScheme": { + "type": "byte", + "value": 22 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 0 + }, + "MoonFogAmount": { + "type": "byte", + "value": 0 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 014" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area014" + }, + "ShadowOpacity": { + "type": "byte", + "value": 50 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area014" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 41 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 269 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 44 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 41 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 43 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 240 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 3 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 0 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 41 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 3 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 241 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 237 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 250 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 138 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 138 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 49 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 239 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 146 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 238 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 238 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 51 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 236 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "ttu01" + }, + "Width": { + "type": "int", + "value": 5 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/area015.are.json b/src/module/are/area015.are.json new file mode 100644 index 0000000..1863a64 --- /dev/null +++ b/src/module/are/area015.are.json @@ -0,0 +1,1675 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 1 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 3 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 7 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 0 + }, + "LightingScheme": { + "type": "byte", + "value": 22 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 0 + }, + "MoonFogAmount": { + "type": "byte", + "value": 0 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 015" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area015" + }, + "ShadowOpacity": { + "type": "byte", + "value": 50 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area015" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 112 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 112 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 174 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 112 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 112 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tic01" + }, + "Width": { + "type": "int", + "value": 5 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/area016.are.json b/src/module/are/area016.are.json new file mode 100644 index 0000000..d6bfa39 --- /dev/null +++ b/src/module/are/area016.are.json @@ -0,0 +1,2922 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 1 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 7 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 8 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 0 + }, + "LightingScheme": { + "type": "byte", + "value": 22 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 0 + }, + "MoonFogAmount": { + "type": "byte", + "value": 0 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Area 016" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "area016" + }, + "ShadowOpacity": { + "type": "byte", + "value": 50 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Area016" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 10 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 201 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 201 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 25 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 239 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 10 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 10 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 100 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 100 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 161 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 22 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 200 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 100 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 19 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 160 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 16 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 19 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 201 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 239 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 24 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 161 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 160 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 150 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 104 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 160 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 23 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 158 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 23 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 160 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 148 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 149 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 16 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 161 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 24 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 239 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 19 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 160 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 16 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 19 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 100 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 201 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 10 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 22 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 161 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 100 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 100 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 201 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 200 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 200 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 239 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 25 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 201 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 200 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tdm01" + }, + "Width": { + "type": "int", + "value": 8 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/desolateanddespa.are.json b/src/module/are/desolateanddespa.are.json new file mode 100644 index 0000000..237dd02 --- /dev/null +++ b/src/module/are/desolateanddespa.are.json @@ -0,0 +1,2922 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 4 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 8 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 17 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 3355424 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 12230770 + }, + "MoonFogAmount": { + "type": "byte", + "value": 6 + }, + "MoonFogColor": { + "type": "dword", + "value": 12169092 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Desolate and Despairing" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "desolateanddespa" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 3 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Genesis" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 0 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 13 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 29 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 26 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 13 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 18 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 13 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 74 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 42 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 14 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 13 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 13 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 10 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 28 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 13 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 13 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 13 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 44 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 13 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 13 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 28 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 14 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 28 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 29 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 13 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 28 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 42 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 14 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 73 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 28 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 14 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 29 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 14 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 28 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 14 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 13 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 36 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 19 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 13 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 10 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 10 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 3 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 22 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 14 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 2 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 13 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 54 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 53 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 14 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 3 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 13 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 14 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 28 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 52 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 51 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 74 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 17 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 29 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 28 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 13 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 28 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tti01" + }, + "Width": { + "type": "int", + "value": 8 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/ey_dpcon_erewood.are.json b/src/module/are/ey_dpcon_erewood.are.json new file mode 100644 index 0000000..b544a70 --- /dev/null +++ b/src/module/are/ey_dpcon_erewood.are.json @@ -0,0 +1,1245 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 4 + }, + "FogClipDist": { + "type": "float", + "value": 100.0 + }, + "Height": { + "type": "int", + "value": 5 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 0 + }, + "LightingScheme": { + "type": "byte", + "value": 1 + }, + "LoadScreenID": { + "type": "word", + "value": 58 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 5066061 + }, + "MoonFogAmount": { + "type": "byte", + "value": 30 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "The Ere'Wood" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "ey_dpcon_erewood" + }, + "ShadowOpacity": { + "type": "byte", + "value": 30 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 32896 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 4227200 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 4194368 + }, + "SunShadows": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Genesis" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 18 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 56 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 114 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 51 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 17 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 167 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 143 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 52 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 57 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 57 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 10 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 9 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "ttf02" + }, + "Width": { + "type": "int", + "value": 5 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/frostedpits.are.json b/src/module/are/frostedpits.are.json new file mode 100644 index 0000000..9327441 --- /dev/null +++ b/src/module/are/frostedpits.are.json @@ -0,0 +1,2922 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 4 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 8 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 20 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 14362660 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 33023 + }, + "MoonFogAmount": { + "type": "byte", + "value": 3 + }, + "MoonFogColor": { + "type": "dword", + "value": 7091712 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Frosted Pits" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "frostedpits" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Genesis" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 2 + }, + "Tile_ID": { + "type": "int", + "value": 47 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 2 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 9 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 7 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 9 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 9 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 9 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 7 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 2 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 0 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 9 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 7 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 3 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 9 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 10 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 7 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 54 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 53 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 50 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 59 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 9 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 57 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 55 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 52 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 51 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 50 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 60 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 58 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 56 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 3 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 7 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 9 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 9 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 50 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 9 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 9 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 2 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 47 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 7 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 2 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 2 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 7 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tti01" + }, + "Width": { + "type": "int", + "value": 8 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/frozentimes.are.json b/src/module/are/frozentimes.are.json new file mode 100644 index 0000000..158fc92 --- /dev/null +++ b/src/module/are/frozentimes.are.json @@ -0,0 +1,2922 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 100 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 1 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 4 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 8 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 0 + }, + "LightingScheme": { + "type": "byte", + "value": 9 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 5263440 + }, + "MoonFogAmount": { + "type": "byte", + "value": 7 + }, + "MoonFogColor": { + "type": "dword", + "value": 1973790 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Frozen Times" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "frozentimes" + }, + "ShadowOpacity": { + "type": "byte", + "value": 20 + }, + "SkyBox": { + "type": "byte", + "value": 5 + }, + "SunAmbientColor": { + "type": "dword", + "value": 16711680 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 14079702 + }, + "SunFogAmount": { + "type": "byte", + "value": 7 + }, + "SunFogColor": { + "type": "dword", + "value": 12303291 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Genesis" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 1 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 20 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 25 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 20 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 20 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 26 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 20 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 24 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 27 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 24 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 23 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 18 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 23 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 22 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 32 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 25 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 19 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 48 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 49 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 71 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 74 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 74 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 24 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 20 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 23 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 74 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 74 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 4 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 47 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 14 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 27 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 22 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 22 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 24 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 13 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 54 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 53 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 29 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 25 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 50 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 22 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 25 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 52 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 51 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 29 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 26 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 19 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 19 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 24 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 15 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 29 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 29 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 31 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tti01" + }, + "Width": { + "type": "int", + "value": 8 + }, + "WindPower": { + "type": "int", + "value": 2 + } +} diff --git a/src/module/are/limbo001.are.json b/src/module/are/limbo001.are.json new file mode 100644 index 0000000..3a88aaa --- /dev/null +++ b/src/module/are/limbo001.are.json @@ -0,0 +1,2922 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 50 + }, + "ChanceRain": { + "type": "int", + "value": 100 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "This are is used as storage location by various PRC systems. It should not be accessible to players under any circumstances.\r\n\r\n\r\nThis area is a part of the Player Resource Consortium pack." + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 1 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 4 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 8 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 0 + }, + "LightingScheme": { + "type": "byte", + "value": 10 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": -2 + }, + "ModSpotCheck": { + "type": "int", + "value": -2 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 2631720 + }, + "MoonFogAmount": { + "type": "byte", + "value": 3 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Limbo" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "limbo001" + }, + "ShadowOpacity": { + "type": "byte", + "value": 30 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 3947580 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 7895160 + }, + "SunFogAmount": { + "type": "byte", + "value": 3 + }, + "SunFogColor": { + "type": "dword", + "value": 3947580 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Limbo" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 121 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 75 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 68 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 65 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 75 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 70 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 124 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 122 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 67 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 64 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 69 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 66 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 75 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 121 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 125 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 126 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "ttd01" + }, + "Width": { + "type": "int", + "value": 8 + }, + "WindPower": { + "type": "int", + "value": 2 + } +} diff --git a/src/module/are/mordmagman01.are.json b/src/module/are/mordmagman01.are.json new file mode 100644 index 0000000..a78f022 --- /dev/null +++ b/src/module/are/mordmagman01.are.json @@ -0,0 +1,858 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "This area is used by the Mordenkainen's Magnificent Mansion -spell. It should only be accessible by said spell.\r\n\r\n\r\nThis area is a part of the Player Resource Consortium pack." + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 1 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 4 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 12 + }, + "LoadScreenID": { + "type": "word", + "value": 40 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 3947580 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 11184810 + }, + "MoonFogAmount": { + "type": "byte", + "value": 5 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Mordenkainen's Magnificent Mansion" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 0 + }, + "ResRef": { + "type": "resref", + "value": "mordmagman01" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MordenkainensMagnificentMansion" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 174 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 91 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tic01" + }, + "Width": { + "type": "int", + "value": 4 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/mordmagman02.are.json b/src/module/are/mordmagman02.are.json new file mode 100644 index 0000000..2e3142c --- /dev/null +++ b/src/module/are/mordmagman02.are.json @@ -0,0 +1,858 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "This area is used by the Mordenkainen's Magnificent Mansion -spell. It should only be accessible by said spell.\r\n\r\n\r\nThis area is a part of the Player Resource Consortium pack." + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 1 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 4 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 12 + }, + "LoadScreenID": { + "type": "word", + "value": 40 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 3947580 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 11184810 + }, + "MoonFogAmount": { + "type": "byte", + "value": 5 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Mordenkainen's Magnificent Mansion" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 0 + }, + "ResRef": { + "type": "resref", + "value": "mordmagman02" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MordenkainensMagnificentMansion" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 174 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 91 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tic01" + }, + "Width": { + "type": "int", + "value": 4 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/mordmagman03.are.json b/src/module/are/mordmagman03.are.json new file mode 100644 index 0000000..8aea582 --- /dev/null +++ b/src/module/are/mordmagman03.are.json @@ -0,0 +1,858 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "This area is used by the Mordenkainen's Magnificent Mansion -spell. It should only be accessible by said spell.\r\n\r\n\r\nThis area is a part of the Player Resource Consortium pack." + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 1 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 4 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 12 + }, + "LoadScreenID": { + "type": "word", + "value": 40 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 3947580 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 11184810 + }, + "MoonFogAmount": { + "type": "byte", + "value": 5 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Mordenkainen's Magnificent Mansion" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 0 + }, + "ResRef": { + "type": "resref", + "value": "mordmagman03" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MordenkainensMagnificentMansion" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 174 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 91 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tic01" + }, + "Width": { + "type": "int", + "value": 4 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/mordmagman04.are.json b/src/module/are/mordmagman04.are.json new file mode 100644 index 0000000..71e74e3 --- /dev/null +++ b/src/module/are/mordmagman04.are.json @@ -0,0 +1,858 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "This area is used by the Mordenkainen's Magnificent Mansion -spell. It should only be accessible by said spell.\r\n\r\n\r\nThis area is a part of the Player Resource Consortium pack." + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 1 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 4 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 12 + }, + "LoadScreenID": { + "type": "word", + "value": 40 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 3947580 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 11184810 + }, + "MoonFogAmount": { + "type": "byte", + "value": 5 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Mordenkainen's Magnificent Mansion" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 0 + }, + "ResRef": { + "type": "resref", + "value": "mordmagman04" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MordenkainensMagnificentMansion" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 174 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 91 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tic01" + }, + "Width": { + "type": "int", + "value": 4 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/mordmagman05.are.json b/src/module/are/mordmagman05.are.json new file mode 100644 index 0000000..78188ea --- /dev/null +++ b/src/module/are/mordmagman05.are.json @@ -0,0 +1,858 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "This area is used by the Mordenkainen's Magnificent Mansion -spell. It should only be accessible by said spell.\r\n\r\n\r\nThis area is a part of the Player Resource Consortium pack." + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 1 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 4 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 12 + }, + "LoadScreenID": { + "type": "word", + "value": 40 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 3947580 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 11184810 + }, + "MoonFogAmount": { + "type": "byte", + "value": 5 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Mordenkainen's Magnificent Mansion" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 0 + }, + "ResRef": { + "type": "resref", + "value": "mordmagman05" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MordenkainensMagnificentMansion" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 174 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 91 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tic01" + }, + "Width": { + "type": "int", + "value": 4 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/mordmagman06.are.json b/src/module/are/mordmagman06.are.json new file mode 100644 index 0000000..508bd9f --- /dev/null +++ b/src/module/are/mordmagman06.are.json @@ -0,0 +1,858 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "This area is used by the Mordenkainen's Magnificent Mansion -spell. It should only be accessible by said spell.\r\n\r\n\r\nThis area is a part of the Player Resource Consortium pack." + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 1 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 4 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 12 + }, + "LoadScreenID": { + "type": "word", + "value": 40 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 3947580 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 11184810 + }, + "MoonFogAmount": { + "type": "byte", + "value": 5 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Mordenkainen's Magnificent Mansion" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 0 + }, + "ResRef": { + "type": "resref", + "value": "mordmagman06" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MordenkainensMagnificentMansion" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 174 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 83 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 91 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 82 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 116 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tic01" + }, + "Width": { + "type": "int", + "value": 4 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/prc_epiclab.are.json b/src/module/are/prc_epiclab.are.json new file mode 100644 index 0000000..e86afa8 --- /dev/null +++ b/src/module/are/prc_epiclab.are.json @@ -0,0 +1,514 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 1 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 4 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 20 + }, + "LoadScreenID": { + "type": "word", + "value": 37 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 14362660 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 33023 + }, + "MoonFogAmount": { + "type": "byte", + "value": 6 + }, + "MoonFogColor": { + "type": "dword", + "value": 7091712 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Epic Laboratory" + } + }, + "NoRest": { + "type": "byte", + "value": 1 + }, + "OnEnter": { + "type": "resref", + "value": "prc_epiclab_ent" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 0 + }, + "ResRef": { + "type": "resref", + "value": "prc_epiclab" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EpicLab" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 28 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 28 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 150 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 31 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 150 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 31 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 9 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 149 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 9 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 149 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 28 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 9 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 28 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 8 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 8 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tic01" + }, + "Width": { + "type": "int", + "value": 2 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/prc_maze_01.are.json b/src/module/are/prc_maze_01.are.json new file mode 100644 index 0000000..5b0f272 --- /dev/null +++ b/src/module/are/prc_maze_01.are.json @@ -0,0 +1,11178 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "Local variable PRC_Maze_Entries_Count should contain the number of entry waypoints.\r\nThe tags of the entry waypoints should be of format PRC_MAZE_ENTRY_WP_N, where N is a sequential number unique to each entry, starting at value 1.\r\n\r\n\r\nThis area is provided by the Player Resource Consortium pack." + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 3 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 16 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 13 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 2960685 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 6457991 + }, + "MoonFogAmount": { + "type": "byte", + "value": 5 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "The Maze" + } + }, + "NoRest": { + "type": "byte", + "value": 1 + }, + "OnEnter": { + "type": "resref", + "value": "prc_maze_onenter" + }, + "OnExit": { + "type": "resref", + "value": "prc_maze_onexit" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "prc_maze_01" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_01" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 41 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 118 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 130 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 118 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 130 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 40 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 41 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 130 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 118 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 40 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 130 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 130 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 130 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 130 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 130 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 40 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 130 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 130 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 130 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 130 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 130 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 130 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 118 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 130 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 39 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 119 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 37 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 127 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tdc01" + }, + "Width": { + "type": "int", + "value": 16 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/ruinedminds001.are.json b/src/module/are/ruinedminds001.are.json new file mode 100644 index 0000000..c79344f --- /dev/null +++ b/src/module/are/ruinedminds001.are.json @@ -0,0 +1,2922 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 3 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 8 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 18 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 2310951 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 2114144 + }, + "MoonFogAmount": { + "type": "byte", + "value": 10 + }, + "MoonFogColor": { + "type": "dword", + "value": 1849670 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Ruined Minds" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "ruinedminds001" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 2 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Genesis" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 12 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 219 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 179 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 167 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 263 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 235 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 240 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 264 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 224 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 103 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 180 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 8 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 255 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 187 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 222 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 170 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 131 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 221 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 110 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 184 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 90 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 91 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 170 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 218 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 9 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 134 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 185 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 92 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 93 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 222 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 186 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 193 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 183 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 3 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 184 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 94 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 95 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 221 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 179 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 161 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 221 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 168 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 96 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 97 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 220 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 1 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 167 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 180 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 219 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 218 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 221 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 168 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 212 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 5 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 2 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "tdr01" + }, + "Width": { + "type": "int", + "value": 8 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/thequietofthemin.are.json b/src/module/are/thequietofthemin.are.json new file mode 100644 index 0000000..95c9cba --- /dev/null +++ b/src/module/are/thequietofthemin.are.json @@ -0,0 +1,1718 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 4 + }, + "FogClipDist": { + "type": "float", + "value": 100.0 + }, + "Height": { + "type": "int", + "value": 6 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 0 + }, + "LightingScheme": { + "type": "byte", + "value": 3 + }, + "LoadScreenID": { + "type": "word", + "value": 63 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 0 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 13132900 + }, + "MoonFogAmount": { + "type": "byte", + "value": 0 + }, + "MoonFogColor": { + "type": "dword", + "value": 6566450 + }, + "MoonShadows": { + "type": "byte", + "value": 1 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "The Quiet of the Mind" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 3 + }, + "ResRef": { + "type": "resref", + "value": "thequietofthemin" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 2 + }, + "SunAmbientColor": { + "type": "dword", + "value": 5129021 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 4946100 + }, + "SunFogAmount": { + "type": "byte", + "value": 1 + }, + "SunFogColor": { + "type": "dword", + "value": 6566450 + }, + "SunShadows": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Genesis" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 7 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 22 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 24 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 20 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 222 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 198 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 86 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 22 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 7 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 194 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 193 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 202 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 87 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 205 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 11 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 20 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 49 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 35 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 38 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 186 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 193 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 20 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 49 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 202 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 50 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 55 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 58 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 20 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 49 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 202 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 1 + }, + "Tile_ID": { + "type": "int", + "value": 207 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 0 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 6 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 20 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 16 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 16 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Tileset": { + "type": "resref", + "value": "ttr01" + }, + "Width": { + "type": "int", + "value": 6 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/are/yawningportal.are.json b/src/module/are/yawningportal.are.json new file mode 100644 index 0000000..02feb9b --- /dev/null +++ b/src/module/are/yawningportal.are.json @@ -0,0 +1,1034 @@ +{ + "__data_type": "ARE ", + "ChanceLightning": { + "type": "int", + "value": 0 + }, + "ChanceRain": { + "type": "int", + "value": 0 + }, + "ChanceSnow": { + "type": "int", + "value": 0 + }, + "Comments": { + "type": "cexostring", + "value": "" + }, + "Creator_ID": { + "type": "int", + "value": -1 + }, + "DayNightCycle": { + "type": "byte", + "value": 0 + }, + "Expansion_List": { + "type": "list", + "value": [] + }, + "Flags": { + "type": "dword", + "value": 1 + }, + "FogClipDist": { + "type": "float", + "value": 45.0 + }, + "Height": { + "type": "int", + "value": 5 + }, + "ID": { + "type": "int", + "value": -1 + }, + "IsNight": { + "type": "byte", + "value": 1 + }, + "LightingScheme": { + "type": "byte", + "value": 12 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "ModListenCheck": { + "type": "int", + "value": 0 + }, + "ModSpotCheck": { + "type": "int", + "value": 0 + }, + "MoonAmbientColor": { + "type": "dword", + "value": 3947580 + }, + "MoonDiffuseColor": { + "type": "dword", + "value": 11184810 + }, + "MoonFogAmount": { + "type": "byte", + "value": 5 + }, + "MoonFogColor": { + "type": "dword", + "value": 0 + }, + "MoonShadows": { + "type": "byte", + "value": 0 + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Yawning Portal Inn" + } + }, + "NoRest": { + "type": "byte", + "value": 0 + }, + "OnEnter": { + "type": "resref", + "value": "rdg_onenter" + }, + "OnExit": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "PlayerVsPlayer": { + "type": "byte", + "value": 0 + }, + "ResRef": { + "type": "resref", + "value": "yawningportal" + }, + "ShadowOpacity": { + "type": "byte", + "value": 60 + }, + "SkyBox": { + "type": "byte", + "value": 0 + }, + "SunAmbientColor": { + "type": "dword", + "value": 0 + }, + "SunDiffuseColor": { + "type": "dword", + "value": 0 + }, + "SunFogAmount": { + "type": "byte", + "value": 0 + }, + "SunFogColor": { + "type": "dword", + "value": 0 + }, + "SunShadows": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "YawningPortal" + }, + "Tile_List": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 96 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 157 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 59 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 147 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 215 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 154 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 0 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 59 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 215 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 215 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 46 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 14 + }, + "Tile_Orientation": { + "type": "int", + "value": 3 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 57 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 3 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 155 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 149 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 157 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 4 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 0 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 77 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 30 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 13 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 62 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 15 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 0 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 0 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 63 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 1 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 15 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Tile_AnimLoop1": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop2": { + "type": "byte", + "value": 1 + }, + "Tile_AnimLoop3": { + "type": "byte", + "value": 1 + }, + "Tile_Height": { + "type": "int", + "value": 0 + }, + "Tile_ID": { + "type": "int", + "value": 77 + }, + "Tile_MainLight1": { + "type": "byte", + "value": 0 + }, + "Tile_MainLight2": { + "type": "byte", + "value": 0 + }, + "Tile_Orientation": { + "type": "int", + "value": 2 + }, + "Tile_SrcLight1": { + "type": "byte", + "value": 2 + }, + "Tile_SrcLight2": { + "type": "byte", + "value": 2 + } + } + ] + }, + "TileBrdrDisabled": { + "type": "byte", + "value": 0 + }, + "Tileset": { + "type": "resref", + "value": "tin01" + }, + "Width": { + "type": "int", + "value": 4 + }, + "WindPower": { + "type": "int", + "value": 0 + } +} diff --git a/src/module/dlg/craftingmerchant.dlg.json b/src/module/dlg/craftingmerchant.dlg.json new file mode 100644 index 0000000..3bad582 --- /dev/null +++ b/src/module/dlg/craftingmerchant.dlg.json @@ -0,0 +1,211 @@ +{ + "__data_type": "DLG ", + "DelayEntry": { + "type": "dword", + "value": 0 + }, + "DelayReply": { + "type": "dword", + "value": 0 + }, + "EndConverAbort": { + "type": "resref", + "value": "nw_walk_wp" + }, + "EndConversation": { + "type": "resref", + "value": "nw_walk_wp" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ah, care to see my wares?" + } + } + } + ] + }, + "NumWords": { + "type": "dword", + "value": 8 + }, + "PreventZoomIn": { + "type": "byte", + "value": 0 + }, + "ReplyList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No." + } + } + }, + { + "__struct_id": 1, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "conv_store8" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes" + } + } + } + ] + }, + "StartingList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 0 + } + } + ] + } +} diff --git a/src/module/dlg/lever.dlg.json b/src/module/dlg/lever.dlg.json new file mode 100644 index 0000000..eccf6a0 --- /dev/null +++ b/src/module/dlg/lever.dlg.json @@ -0,0 +1,105 @@ +{ + "__data_type": "DLG ", + "DelayEntry": { + "type": "dword", + "value": 0 + }, + "DelayReply": { + "type": "dword", + "value": 0 + }, + "EndConverAbort": { + "type": "resref", + "value": "nw_walk_wp" + }, + "EndConversation": { + "type": "resref", + "value": "nw_walk_wp" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Unfortunately, this lever doesn't function correctly in NWN:EE and has been disabled" + } + } + } + ] + }, + "NumWords": { + "type": "dword", + "value": 12 + }, + "PreventZoomIn": { + "type": "byte", + "value": 0 + }, + "ReplyList": { + "type": "list", + "value": [] + }, + "StartingList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + } + } + ] + } +} diff --git a/src/module/dlg/mhk_hench.dlg.json b/src/module/dlg/mhk_hench.dlg.json new file mode 100644 index 0000000..348b08c --- /dev/null +++ b/src/module/dlg/mhk_hench.dlg.json @@ -0,0 +1,12336 @@ +{ + "__data_type": "DLG ", + "DelayEntry": { + "type": "dword", + "value": 0 + }, + "DelayReply": { + "type": "dword", + "value": 0 + }, + "EndConverAbort": { + "type": "resref", + "value": "nw_walk_wp" + }, + "EndConversation": { + "type": "resref", + "value": "nw_walk_wp" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Is there something you need?" + } + } + }, + { + "__struct_id": 1, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 117 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "mhk_spell_chk" + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "mhk_spell_chk" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hassong" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x0_d2_hasrage" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_hen_tomishad1" + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_hen_tomishad3" + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x1_hen_canid" + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What can I do for you, ?" + } + } + }, + { + "__struct_id": 2, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I'm sorry you feel that way, but I shall leave if that is your desire." + } + } + }, + { + "__struct_id": 3, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Well, let me look and I'll see what I can recognize.", + "id": 89767 + } + } + }, + { + "__struct_id": 4, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "x2_hen_tomishad4" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "As you wish.", + "id": 89919 + } + } + }, + { + "__struct_id": 5, + "Animation": { + "type": "dword", + "value": 34 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "x2_hen_tomishad2" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "As you wish.", + "id": 89920 + } + } + }, + { + "__struct_id": 6, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "x0_d1_userage" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Witness my fury!", + "id": 77917 + } + } + }, + { + "__struct_id": 7, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "x0_d1_usesong" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I will gladly sing for you.", + "id": 76564 + } + } + }, + { + "__struct_id": 8, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 17 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 15 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 14 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what sort of spells do you need me to use?" + } + } + }, + { + "__struct_id": 9, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "x0_d2_hasaid" + }, + "Index": { + "type": "dword", + "value": 100 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "x0_d2_hasandead" + }, + "Index": { + "type": "dword", + "value": 97 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasbless" + }, + "Index": { + "type": "dword", + "value": 96 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hasbulls" + }, + "Index": { + "type": "dword", + "value": 95 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x0_d2_hascatsg" + }, + "Index": { + "type": "dword", + "value": 94 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x0_d2_hasclarity" + }, + "Index": { + "type": "dword", + "value": 93 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x0_d2_hascreund" + }, + "Index": { + "type": "dword", + "value": 92 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x0_d2_hascontfl" + }, + "Index": { + "type": "dword", + "value": 91 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "x0_d2_hascrgrund" + }, + "Index": { + "type": "dword", + "value": 90 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "x0_d2_hasdarmor" + }, + "Index": { + "type": "dword", + "value": 89 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "x0_d2_hasdthward" + }, + "Index": { + "type": "dword", + "value": 88 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "x0_d2_hasdispelm" + }, + "Index": { + "type": "dword", + "value": 87 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "x0_d2_hasdivfav" + }, + "Index": { + "type": "dword", + "value": 86 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "x0_d2_hasdivpow" + }, + "Index": { + "type": "dword", + "value": 85 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "x0_d2_haseagles" + }, + "Index": { + "type": "dword", + "value": 84 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 15, + "Active": { + "type": "resref", + "value": "x0_d2_hasendur" + }, + "Index": { + "type": "dword", + "value": 83 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 16, + "Active": { + "type": "resref", + "value": "x0_d2_hasendelem" + }, + "Index": { + "type": "dword", + "value": 82 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 17, + "Active": { + "type": "resref", + "value": "x0_d2_hasenergyb" + }, + "Index": { + "type": "dword", + "value": 81 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 18, + "Active": { + "type": "resref", + "value": "x0_d2_hasentshld" + }, + "Index": { + "type": "dword", + "value": 80 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 19, + "Active": { + "type": "resref", + "value": "x0_d2_hasether" + }, + "Index": { + "type": "dword", + "value": 79 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 20, + "Active": { + "type": "resref", + "value": "x0_d2_hasetherv" + }, + "Index": { + "type": "dword", + "value": 78 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 21, + "Active": { + "type": "resref", + "value": "x0_d2_hasfindtr" + }, + "Index": { + "type": "dword", + "value": 77 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 22, + "Active": { + "type": "resref", + "value": "x0_d2_hasfoxcun" + }, + "Index": { + "type": "dword", + "value": 76 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 23, + "Active": { + "type": "resref", + "value": "x0_d2_hasfreemov" + }, + "Index": { + "type": "dword", + "value": 75 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 24, + "Active": { + "type": "resref", + "value": "x0_d2_hasghostv" + }, + "Index": { + "type": "dword", + "value": 74 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 25, + "Active": { + "type": "resref", + "value": "x0_d2_hasdgispel" + }, + "Index": { + "type": "dword", + "value": 73 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 26, + "Active": { + "type": "resref", + "value": "x0_d2_hasgrrest" + }, + "Index": { + "type": "dword", + "value": 72 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 27, + "Active": { + "type": "resref", + "value": "x0_d2_hasgrstone" + }, + "Index": { + "type": "dword", + "value": 71 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 28, + "Active": { + "type": "resref", + "value": "x0_d2_hashaste" + }, + "Index": { + "type": "dword", + "value": 70 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 29, + "Active": { + "type": "resref", + "value": "x0_d2_hasimpinv" + }, + "Index": { + "type": "dword", + "value": 69 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 30, + "Active": { + "type": "resref", + "value": "x0_d2_hasinvis" + }, + "Index": { + "type": "dword", + "value": 68 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 31, + "Active": { + "type": "resref", + "value": "x0_d2_hasinvissp" + }, + "Index": { + "type": "dword", + "value": 67 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 32, + "Active": { + "type": "resref", + "value": "x0_d2_hasknock" + }, + "Index": { + "type": "dword", + "value": 66 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 33, + "Active": { + "type": "resref", + "value": "x0_d2_hasldispel" + }, + "Index": { + "type": "dword", + "value": 65 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 34, + "Active": { + "type": "resref", + "value": "x0_d2_haslmindbl" + }, + "Index": { + "type": "dword", + "value": 64 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 35, + "Active": { + "type": "resref", + "value": "x0_d2_haslesrest" + }, + "Index": { + "type": "dword", + "value": 63 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 36, + "Active": { + "type": "resref", + "value": "x0_d2_haslesspm" + }, + "Index": { + "type": "dword", + "value": 62 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 37, + "Active": { + "type": "resref", + "value": "x0_d2_haslight" + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 38, + "Active": { + "type": "resref", + "value": "x0_d2_hasmagearm" + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 39, + "Active": { + "type": "resref", + "value": "x0_d2_hasmagvest" + }, + "Index": { + "type": "dword", + "value": 59 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 40, + "Active": { + "type": "resref", + "value": "x0_d2_hasmhaste" + }, + "Index": { + "type": "dword", + "value": 58 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 41, + "Active": { + "type": "resref", + "value": "x0_d2_hasmindbl" + }, + "Index": { + "type": "dword", + "value": 57 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 42, + "Active": { + "type": "resref", + "value": "x0_d2_hasmrege" + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 43, + "Active": { + "type": "resref", + "value": "x0_d2_hasneutpoi" + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 44, + "Active": { + "type": "resref", + "value": "x0_d2_hasowlwis" + }, + "Index": { + "type": "dword", + "value": 54 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 45, + "Active": { + "type": "resref", + "value": "x0_d2_hasprayer" + }, + "Index": { + "type": "dword", + "value": 53 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 46, + "Active": { + "type": "resref", + "value": "x0_d2_haspremon" + }, + "Index": { + "type": "dword", + "value": 52 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 47, + "Active": { + "type": "resref", + "value": "x0_d2_hasprelem" + }, + "Index": { + "type": "dword", + "value": 51 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 48, + "Active": { + "type": "resref", + "value": "x0_d2_hasprspell" + }, + "Index": { + "type": "dword", + "value": 50 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 49, + "Active": { + "type": "resref", + "value": "x0_d2_hasregen" + }, + "Index": { + "type": "dword", + "value": 49 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 50, + "Active": { + "type": "resref", + "value": "x0_d2_hasrembldf" + }, + "Index": { + "type": "dword", + "value": 48 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 51, + "Active": { + "type": "resref", + "value": "x0_d2_hasremcurs" + }, + "Index": { + "type": "dword", + "value": 47 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 52, + "Active": { + "type": "resref", + "value": "x0_d2_hasremdis" + }, + "Index": { + "type": "dword", + "value": 46 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 53, + "Active": { + "type": "resref", + "value": "x0_d2_hasremfear" + }, + "Index": { + "type": "dword", + "value": 45 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 54, + "Active": { + "type": "resref", + "value": "x0_d2_hasrempara" + }, + "Index": { + "type": "dword", + "value": 44 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 55, + "Active": { + "type": "resref", + "value": "x0_d2_hasreselem" + }, + "Index": { + "type": "dword", + "value": 43 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 56, + "Active": { + "type": "resref", + "value": "x0_d2_hasresist" + }, + "Index": { + "type": "dword", + "value": 42 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 57, + "Active": { + "type": "resref", + "value": "x0_d2_hasrestor" + }, + "Index": { + "type": "dword", + "value": 41 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 58, + "Active": { + "type": "resref", + "value": "x0_d2_hassanc" + }, + "Index": { + "type": "dword", + "value": 40 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 59, + "Active": { + "type": "resref", + "value": "x0_d2_hasseeinv" + }, + "Index": { + "type": "dword", + "value": 39 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 60, + "Active": { + "type": "resref", + "value": "x0_d2_hasshadow" + }, + "Index": { + "type": "dword", + "value": 38 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 61, + "Active": { + "type": "resref", + "value": "x0_d2_hasshield" + }, + "Index": { + "type": "dword", + "value": 37 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 62, + "Active": { + "type": "resref", + "value": "x0_d2_hasshldfth" + }, + "Index": { + "type": "dword", + "value": 36 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 63, + "Active": { + "type": "resref", + "value": "x0_d2_hasspman" + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 64, + "Active": { + "type": "resref", + "value": "x0_d2_hasspelres" + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 65, + "Active": { + "type": "resref", + "value": "x0_d2_hasstskin" + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 66, + "Active": { + "type": "resref", + "value": "x0_d2_hassumm1" + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 67, + "Active": { + "type": "resref", + "value": "x0_d2_hassumm2" + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 68, + "Active": { + "type": "resref", + "value": "x0_d2_hassumm3" + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 69, + "Active": { + "type": "resref", + "value": "x0_d2_hassumm4" + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 70, + "Active": { + "type": "resref", + "value": "x0_d2_hassumm5" + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 71, + "Active": { + "type": "resref", + "value": "x0_d2_hassumm6" + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 72, + "Active": { + "type": "resref", + "value": "x0_d2_hassumm7" + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 73, + "Active": { + "type": "resref", + "value": "x0_d2_hassumm8" + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 74, + "Active": { + "type": "resref", + "value": "x0_d2_hassumm9" + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 75, + "Active": { + "type": "resref", + "value": "x0_d2_hastruesee" + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 76, + "Active": { + "type": "resref", + "value": "x0_d2_hasultra" + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 77, + "Active": { + "type": "resref", + "value": "x0_d2_hasvirtue" + }, + "Index": { + "type": "dword", + "value": 21 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 78, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 79, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What spell would you like me to cast?", + "id": 89769 + } + } + }, + { + "__struct_id": 10, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 99 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 98 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Are you sure you would like me to cast this?", + "id": 89770 + } + } + }, + { + "__struct_id": 11, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 115 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 114 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 113 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 112 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "Index": { + "type": "dword", + "value": 111 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "Index": { + "type": "dword", + "value": 110 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "Index": { + "type": "dword", + "value": 109 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "Index": { + "type": "dword", + "value": 108 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "x2_d1_hashench5" + }, + "Index": { + "type": "dword", + "value": 107 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "x2_d1_hashench6" + }, + "Index": { + "type": "dword", + "value": 106 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "x2_d1_hashench7" + }, + "Index": { + "type": "dword", + "value": 105 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "x2_d1_hashench8" + }, + "Index": { + "type": "dword", + "value": 104 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "x2_d1_hashench9" + }, + "Index": { + "type": "dword", + "value": 103 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "x2_d1_targetall" + }, + "Index": { + "type": "dword", + "value": 102 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 101 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Who do you want me to cast the spell on?", + "id": 89771 + } + } + }, + { + "__struct_id": 12, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 116 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_unsetgroup" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Very well.", + "id": 89772 + } + } + }, + { + "__struct_id": 13, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 142 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "nw_ch_comrange" + }, + "Index": { + "type": "dword", + "value": 139 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "nw_ch_commelee" + }, + "Index": { + "type": "dword", + "value": 138 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 133 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "nw_ch_heal_0" + }, + "Index": { + "type": "dword", + "value": 128 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "nw_ch_yes_srch" + }, + "Index": { + "type": "dword", + "value": 127 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "nw_ch_no_srch" + }, + "Index": { + "type": "dword", + "value": 126 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "nw_ch_no_stlth" + }, + "Index": { + "type": "dword", + "value": 125 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "nw_ch_yes_stlth" + }, + "Index": { + "type": "dword", + "value": 124 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "x2_ch_no_traps" + }, + "Index": { + "type": "dword", + "value": 123 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "x2_ch_yes_traps" + }, + "Index": { + "type": "dword", + "value": 122 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "nw_ch_no_locks" + }, + "Index": { + "type": "dword", + "value": 121 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "nw_ch_yes_locks" + }, + "Index": { + "type": "dword", + "value": 120 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 119 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 118 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "How should I behave?" + } + } + }, + { + "__struct_id": 14, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 132 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 131 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 130 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 129 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "You're the boss. When should I heal?" + } + } + }, + { + "__struct_id": 15, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 137 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 136 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 135 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 134 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Aye. How close do you want me?" + } + } + }, + { + "__struct_id": 16, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 141 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 140 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Done. Anything else?" + } + } + }, + { + "__struct_id": 17, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 144 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 143 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Alright, here is my backpack.", + "id": 89766 + } + } + }, + { + "__struct_id": 18, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 146 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 145 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greetings, do you have need of a henchman?" + } + } + }, + { + "__struct_id": 19, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "As you wish. Speak with me if you change your mind." + } + } + }, + { + "__struct_id": 20, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "mhk_hire_chk2" + }, + "Index": { + "type": "dword", + "value": 149 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "mhk_hire_chk3" + }, + "Index": { + "type": "dword", + "value": 148 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "mhk_hire_chk3" + }, + "Index": { + "type": "dword", + "value": 147 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "My fee is a resonable gp." + } + } + }, + { + "__struct_id": 21, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "As you wish. Speak with me if you change your mind." + } + } + }, + { + "__struct_id": 22, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "mhk_hench_hire" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Excellent, that I shall!" + } + } + }, + { + "__struct_id": 23, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Another time then, maybe?" + } + } + }, + { + "__struct_id": 24, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I'm sorry, I serve another and have no time to speak with you." + } + } + } + ] + }, + "NumWords": { + "type": "dword", + "value": 732 + }, + "PreventZoomIn": { + "type": "byte", + "value": 0 + }, + "ReplyList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Umm... No, sorry to bother you..." + } + } + }, + { + "__struct_id": 1, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "That's all for now." + } + } + }, + { + "__struct_id": 2, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I no longer have need of your services." + } + } + }, + { + "__struct_id": 3, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Aw, if it makes you feel that bad, you can stay." + } + } + }, + { + "__struct_id": 4, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_hen_fired" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Aye, it is." + } + } + }, + { + "__struct_id": 5, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 89865 + } + } + }, + { + "__struct_id": 6, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Never mind." + } + } + }, + { + "__struct_id": 7, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x1_hen_identify" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Aye." + } + } + }, + { + "__struct_id": 8, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can you summon one of your shadows?", + "id": 90202 + } + } + }, + { + "__struct_id": 9, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to blend into the shadows.", + "id": 90203 + } + } + }, + { + "__struct_id": 10, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 78317 + } + } + }, + { + "__struct_id": 11, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 76888 + } + } + }, + { + "__struct_id": 12, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d1_setgroup" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a group of buffing spells." + } + } + }, + { + "__struct_id": 13, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "That's all for now." + } + } + }, + { + "__struct_id": 14, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I've changed my mind." + } + } + }, + { + "__struct_id": 15, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d1_castbuff3" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all the buffing spells you have." + } + } + }, + { + "__struct_id": 16, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d1_castbuff2" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all the buffing spells that last a long time." + } + } + }, + { + "__struct_id": 17, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d1_castbuff1" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all the short duration buffing spells." + } + } + }, + { + "__struct_id": 18, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 89867 + } + } + }, + { + "__struct_id": 19, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "That's all for now." + } + } + }, + { + "__struct_id": 20, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I've changed my mind.", + "id": 89868 + } + } + }, + { + "__struct_id": 21, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castvirtue" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Virtue." + } + } + }, + { + "__struct_id": 22, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castultra" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ultravision." + } + } + }, + { + "__struct_id": 23, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_casttruese" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "True Seeing." + } + } + }, + { + "__struct_id": 24, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castsumm9" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IX." + } + } + }, + { + "__struct_id": 25, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castsumm8" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VIII." + } + } + }, + { + "__struct_id": 26, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castsumm7" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VII." + } + } + }, + { + "__struct_id": 27, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castsumm6" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VI." + } + } + }, + { + "__struct_id": 28, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castsumm5" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature V." + } + } + }, + { + "__struct_id": 29, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castsumm4" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IV." + } + } + }, + { + "__struct_id": 30, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castsumm3" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature III." + } + } + }, + { + "__struct_id": 31, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castsumm2" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature II." + } + } + }, + { + "__struct_id": 32, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castsumm1" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature I." + } + } + }, + { + "__struct_id": 33, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_caststonsk" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stoneskin." + } + } + }, + { + "__struct_id": 34, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castsplres" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance." + } + } + }, + { + "__struct_id": 35, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castspmant" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Mantle." + } + } + }, + { + "__struct_id": 36, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castshdfth" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield of Faith." + } + } + }, + { + "__struct_id": 37, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castshield" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield." + } + } + }, + { + "__struct_id": 38, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castshadsh" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shadow Shield." + } + } + }, + { + "__struct_id": 39, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castseeinv" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "See Invisibility." + } + } + }, + { + "__struct_id": 40, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castsanct" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Sanctuary." + } + } + }, + { + "__struct_id": 41, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castrestor" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Restoration." + } + } + }, + { + "__struct_id": 42, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castresist" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resistance." + } + } + }, + { + "__struct_id": 43, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castresele" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resist Elements." + } + } + }, + { + "__struct_id": 44, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castrempar" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Paralysis." + } + } + }, + { + "__struct_id": 45, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castremfr" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Fear." + } + } + }, + { + "__struct_id": 46, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castremdis" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Disease." + } + } + }, + { + "__struct_id": 47, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castremcur" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Curse." + } + } + }, + { + "__struct_id": 48, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castrembdf" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Blindness and Deafness." + } + } + }, + { + "__struct_id": 49, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castregen" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Regeneration." + } + } + }, + { + "__struct_id": 50, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castprspel" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection from Spells." + } + } + }, + { + "__struct_id": 51, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castprelem" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection from Elements." + } + } + }, + { + "__struct_id": 52, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castpremon" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Premonition." + } + } + }, + { + "__struct_id": 53, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castprayer" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Prayer." + } + } + }, + { + "__struct_id": 54, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castowlwis" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Owl's Wisdom." + } + } + }, + { + "__struct_id": 55, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castneupoi" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Neutralize Poison." + } + } + }, + { + "__struct_id": 56, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castmregen" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Monstrous Regeneration." + } + } + }, + { + "__struct_id": 57, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castmindbl" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mind Blank." + } + } + }, + { + "__struct_id": 58, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castmhaste" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mass Haste." + } + } + }, + { + "__struct_id": 59, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castmvest" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Magic Vestment." + } + } + }, + { + "__struct_id": 60, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castmagear" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mage Armor." + } + } + }, + { + "__struct_id": 61, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castlight" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Light." + } + } + }, + { + "__struct_id": 62, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castlspman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Spell Mantle." + } + } + }, + { + "__struct_id": 63, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castlresto" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Restoration." + } + } + }, + { + "__struct_id": 64, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castlmindb" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Mind Blank." + } + } + }, + { + "__struct_id": 65, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castldispe" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Dispel." + } + } + }, + { + "__struct_id": 66, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castknock" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Knock." + } + } + }, + { + "__struct_id": 67, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castinvsph" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility Sphere." + } + } + }, + { + "__struct_id": 68, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castinvis" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility." + } + } + }, + { + "__struct_id": 69, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castimpinv" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Improved Invisibility." + } + } + }, + { + "__struct_id": 70, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_casthaste" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Haste." + } + } + }, + { + "__struct_id": 71, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castgrston" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Stoneskin." + } + } + }, + { + "__struct_id": 72, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castgrrest" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Restoration." + } + } + }, + { + "__struct_id": 73, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castgdispe" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Dispelling." + } + } + }, + { + "__struct_id": 74, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castghovis" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ghostly Visage." + } + } + }, + { + "__struct_id": 75, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castfremov" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Freedom of Movement." + } + } + }, + { + "__struct_id": 76, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castfoxcun" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Fox's Cunning." + } + } + }, + { + "__struct_id": 77, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castfindtr" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Find Traps." + } + } + }, + { + "__struct_id": 78, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castethvis" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ethereal Visage." + } + } + }, + { + "__struct_id": 79, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castether" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Etherealness." + } + } + }, + { + "__struct_id": 80, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castentsh" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Entropic Shield." + } + } + }, + { + "__struct_id": 81, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castenbuff" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Energy Buffer." + } + } + }, + { + "__struct_id": 82, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castendele" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endure Elements." + } + } + }, + { + "__struct_id": 83, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castendur" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endurance." + } + } + }, + { + "__struct_id": 84, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_casteagles" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Eagle's Splendor." + } + } + }, + { + "__struct_id": 85, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castdivpow" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Power." + } + } + }, + { + "__struct_id": 86, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castdivfav" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Favor." + } + } + }, + { + "__struct_id": 87, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castdismag" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Dispel Magic." + } + } + }, + { + "__struct_id": 88, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castdward" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Ward." + } + } + }, + { + "__struct_id": 89, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castdarmor" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Armor." + } + } + }, + { + "__struct_id": 90, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castcrgrun" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Create Greater Undead." + } + } + }, + { + "__struct_id": 91, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castcontfl" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 78366 + } + } + }, + { + "__struct_id": 92, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castcrund" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 78365 + } + } + }, + { + "__struct_id": 93, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castclarit" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 78367 + } + } + }, + { + "__struct_id": 94, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castcatgr" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cat's Grace." + } + } + }, + { + "__struct_id": 95, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castbullst" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bull's Strength." + } + } + }, + { + "__struct_id": 96, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castbless" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bless." + } + } + }, + { + "__struct_id": 97, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castandead" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Animate Dead.", + "id": 89869 + } + } + }, + { + "__struct_id": 98, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 89870 + } + } + }, + { + "__struct_id": 99, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_targetself" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 89871 + } + } + }, + { + "__struct_id": 100, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_castaid" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Aid.", + "id": 89872 + } + } + }, + { + "__struct_id": 101, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 89873 + } + } + }, + { + "__struct_id": 102, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_targetall" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all party members." + } + } + }, + { + "__struct_id": 103, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d1_targethen9" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on ." + } + } + }, + { + "__struct_id": 104, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d1_targethen8" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on ." + } + } + }, + { + "__struct_id": 105, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d1_targethen7" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on ." + } + } + }, + { + "__struct_id": 106, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d1_targethen6" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on ." + } + } + }, + { + "__struct_id": 107, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d1_targethen5" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on ." + } + } + }, + { + "__struct_id": 108, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d1_targethen4" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on ." + } + } + }, + { + "__struct_id": 109, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d1_targethen3" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on ." + } + } + }, + { + "__struct_id": 110, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d1_targethen2" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on ." + } + } + }, + { + "__struct_id": 111, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d1_targethen1" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on ." + } + } + }, + { + "__struct_id": 112, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_targetcomp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 89874 + } + } + }, + { + "__struct_id": 113, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_targetfam" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 89875 + } + } + }, + { + "__struct_id": 114, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_targetme" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 89877 + } + } + }, + { + "__struct_id": 115, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_targetself" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 89878 + } + } + }, + { + "__struct_id": 116, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_henchspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": {} + } + }, + { + "__struct_id": 117, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let's discuss your tactics." + } + } + }, + { + "__struct_id": 118, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "That's all for now." + } + } + }, + { + "__struct_id": 119, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I've changed my mind." + } + } + }, + { + "__struct_id": 120, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "nw_ch_lock_off" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Opening doors and chests is a tricky business. Let me handle them." + } + } + }, + { + "__struct_id": 121, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "nw_ch_lock_on" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I'm inept with mechanical things. Help me with doors and chests." + } + } + }, + { + "__struct_id": 122, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_ch_trap_off" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to leave any traps that you see alone." + } + } + }, + { + "__struct_id": 123, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_ch_trap_on" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to disarm any traps that you see." + } + } + }, + { + "__struct_id": 124, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "nw_ch_stlth_off" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I favor the direct approach. Stop sneaking." + } + } + }, + { + "__struct_id": 125, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "nw_ch_stlth_on" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let's try to surprise the enemy. You sneak around." + } + } + }, + { + "__struct_id": 126, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "nw_ch_srch_on" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "We're missing important clues. I think you should search." + } + } + }, + { + "__struct_id": 127, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "nw_ch_srch_off" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stop searching all the time! It's getting on my nerves." + } + } + }, + { + "__struct_id": 128, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 14 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I think you need to change your healing strategy." + } + } + }, + { + "__struct_id": 129, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I've changed my mind." + } + } + }, + { + "__struct_id": 130, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "nw_ch_heal_25" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Wait until I'm near death. (25%)" + } + } + }, + { + "__struct_id": 131, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "nw_ch_heal_50" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Heal when I'm moderately wounded. (50%)" + } + } + }, + { + "__struct_id": 132, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "nw_ch_heal_75" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Heal when I'm slightly wounded. (75%)" + } + } + }, + { + "__struct_id": 133, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 15 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want to change your following distance." + } + } + }, + { + "__struct_id": 134, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I've changed my mind." + } + } + }, + { + "__struct_id": 135, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "nw_ch_dist_18" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I don't want to be seen with you. Stay far away." + } + } + }, + { + "__struct_id": 136, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "nw_ch_dist_12" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Keep a moderate distance." + } + } + }, + { + "__struct_id": 137, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "nw_ch_dist_6" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stick close to me." + } + } + }, + { + "__struct_id": 138, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "nw_ch_goranged" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to fight ranged." + } + } + }, + { + "__struct_id": 139, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "nw_ch_gomelee" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to fight hand-to-hand." + } + } + }, + { + "__struct_id": 140, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No." + } + } + }, + { + "__struct_id": 141, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes." + } + } + }, + { + "__struct_id": 142, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 17 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 89864 + } + } + }, + { + "__struct_id": 143, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_hen_inven" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Thank ye." + } + } + }, + { + "__struct_id": 144, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I've changed my mind." + } + } + }, + { + "__struct_id": 145, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Not right now, perhaps later?" + } + } + }, + { + "__struct_id": 146, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes, how much do you charge?" + } + } + }, + { + "__struct_id": 147, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 21 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Not at this time." + } + } + }, + { + "__struct_id": 148, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes, join me." + } + } + }, + { + "__struct_id": 149, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I cant afford that!" + } + } + } + ] + }, + "StartingList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "x0_d2_hen_ohired" + }, + "Index": { + "type": "dword", + "value": 24 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "mhk_hire_chk" + }, + "Index": { + "type": "dword", + "value": 18 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 1 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 0 + } + } + ] + } +} diff --git a/src/module/dlg/npc_banker.dlg.json b/src/module/dlg/npc_banker.dlg.json new file mode 100644 index 0000000..25ce366 --- /dev/null +++ b/src/module/dlg/npc_banker.dlg.json @@ -0,0 +1,1249 @@ +{ + "__data_type": "DLG ", + "DelayEntry": { + "type": "dword", + "value": 0 + }, + "DelayReply": { + "type": "dword", + "value": 0 + }, + "EndConverAbort": { + "type": "resref", + "value": "nw_walk_wp" + }, + "EndConversation": { + "type": "resref", + "value": "nw_walk_wp" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "bank_has_bond" + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ello have any gold notes you wish to cash? (OUTDATED)" + } + } + }, + { + "__struct_id": 1, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "bank_has_bond" + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "It is my great pleasure to see to it that each time you enter the tower, you recieve gold notes worth the value of the gold you have on your person.\n\nThese notes can only be cashed by me, and are a perfect way to prevent monsters from getting your hard won gold back.\n\nThey are also excellent in that you never have to split the gold stored in them as everyone in your party knows without a doubt you had the note before you all went in the tower.\n\nNaturally once your done romping around the dungeon you will wish to get your share and spend it, I prevent any ... entanglements. Plus after your done getting your shares you can come to me to cash your gold bond and go spend it all." + } + } + }, + { + "__struct_id": 2, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Why I get to hold onto your gold til you return..." + } + } + }, + { + "__struct_id": 3, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Best not to think on such things... It's bad luck." + } + } + }, + { + "__struct_id": 4, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "bank_has_bond" + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "bank_has_gold" + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Good day how may I be of assitance?" + } + } + }, + { + "__struct_id": 5, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ah well it's quite simple. I am a representative of the city supplied as a curtesy to all adventurers who would dare Undermountain. I will keep your gold safe until you return.\n\n[Gold stored in the bank is not subject to loot spliting by the merchant's scales. Keeping your loot yours.]" + } + } + }, + { + "__struct_id": 6, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "It's best not to think about such things, it's bad luck.\n\n[If you die and RESPAWN your bank account is lost. Remember you start over as a level 1 character with only starting money if you die in the tower and are not raised from the dead by a fellow PC.]" + } + } + } + ] + }, + "NumWords": { + "type": "dword", + "value": 334 + }, + "PreventZoomIn": { + "type": "byte", + "value": 0 + }, + "ReplyList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What is a gold note?" + } + } + }, + { + "__struct_id": 1, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What do you get out of this?" + } + } + }, + { + "__struct_id": 2, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And if I don't ?" + } + } + }, + { + "__struct_id": 3, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "" + } + } + }, + { + "__struct_id": 4, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "bank_cash_bond" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I wish to cash my gold bond." + } + } + }, + { + "__struct_id": 5, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Oh Ok." + } + } + }, + { + "__struct_id": 6, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No." + } + } + }, + { + "__struct_id": 7, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "bank_cash_bond" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes." + } + } + }, + { + "__struct_id": 8, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Nothing today" + } + } + }, + { + "__struct_id": 9, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Tell me about your services." + } + } + }, + { + "__struct_id": 10, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Thank you for the information." + } + } + }, + { + "__struct_id": 11, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What if I don't return?" + } + } + }, + { + "__struct_id": 12, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "bank_deposit" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I wish to deposit my gold." + } + } + }, + { + "__struct_id": 13, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "bank_cash_bond" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I wish to withdraw my gold." + } + } + } + ] + }, + "StartingList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 4 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 0 + } + } + ] + } +} diff --git a/src/module/dlg/npc_enchanter.dlg.json b/src/module/dlg/npc_enchanter.dlg.json new file mode 100644 index 0000000..f06a3fb --- /dev/null +++ b/src/module/dlg/npc_enchanter.dlg.json @@ -0,0 +1,547 @@ +{ + "__data_type": "DLG ", + "DelayEntry": { + "type": "dword", + "value": 0 + }, + "DelayReply": { + "type": "dword", + "value": 0 + }, + "EndConverAbort": { + "type": "resref", + "value": "nw_walk_wp" + }, + "EndConversation": { + "type": "resref", + "value": "nw_walk_wp" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What can I interest you in?" + } + } + } + ] + }, + "NumWords": { + "type": "dword", + "value": 26 + }, + "PreventZoomIn": { + "type": "byte", + "value": 0 + }, + "ReplyList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "[Nothing]" + } + } + }, + { + "__struct_id": 1, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "conv_store7" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Rods Wands and Staves." + } + } + }, + { + "__struct_id": 2, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "conv_store6" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "[Misc Oddity Items]" + } + } + }, + { + "__struct_id": 3, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "conv_store5" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Potions" + } + } + }, + { + "__struct_id": 4, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "conv_store4" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "[Books and Scrolls]" + } + } + }, + { + "__struct_id": 5, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "conv_store3" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Gems and Jewelry" + } + } + }, + { + "__struct_id": 6, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "conv_store2" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "[Magic Clothes]" + } + } + }, + { + "__struct_id": 7, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "conv_store1" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Armor and Weapons" + } + } + } + ] + }, + "StartingList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 0 + } + } + ] + } +} diff --git a/src/module/dlg/npc_junk_merchan.dlg.json b/src/module/dlg/npc_junk_merchan.dlg.json new file mode 100644 index 0000000..b66b1d9 --- /dev/null +++ b/src/module/dlg/npc_junk_merchan.dlg.json @@ -0,0 +1,502 @@ +{ + "__data_type": "DLG ", + "DelayEntry": { + "type": "dword", + "value": 0 + }, + "DelayReply": { + "type": "dword", + "value": 0 + }, + "EndConverAbort": { + "type": "resref", + "value": "nw_walk_wp" + }, + "EndConversation": { + "type": "resref", + "value": "nw_walk_wp" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I only deal with the party leader." + } + } + }, + { + "__struct_id": 1, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "conv_junkcond" + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greetings." + } + } + }, + { + "__struct_id": 2, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Excellent! Here is your gold. Don't forget to use the scales to split your loot evenly." + } + } + }, + { + "__struct_id": 3, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I buy any loot you bring up from the dungeon and don't have a use for.\n\nSimply place any unwanted goods in the box and tell me when you are ready for me to have a look." + } + } + } + ] + }, + "NumWords": { + "type": "dword", + "value": 76 + }, + "PreventZoomIn": { + "type": "byte", + "value": 0 + }, + "ReplyList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Never mind." + } + } + }, + { + "__struct_id": 1, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "conv_sell_loot" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "[My party is ready to sell our loot.]" + } + } + }, + { + "__struct_id": 2, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "" + } + } + }, + { + "__struct_id": 3, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What is it you do?" + } + } + } + ] + }, + "StartingList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "conv_isleader" + }, + "Index": { + "type": "dword", + "value": 1 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 0 + } + } + ] + } +} diff --git a/src/module/dlg/npc_town_store.dlg.json b/src/module/dlg/npc_town_store.dlg.json new file mode 100644 index 0000000..a3b331e --- /dev/null +++ b/src/module/dlg/npc_town_store.dlg.json @@ -0,0 +1,211 @@ +{ + "__data_type": "DLG ", + "DelayEntry": { + "type": "dword", + "value": 0 + }, + "DelayReply": { + "type": "dword", + "value": 0 + }, + "EndConverAbort": { + "type": "resref", + "value": "" + }, + "EndConversation": { + "type": "resref", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Welcome to my shop. Would you like to see my wares?" + } + } + } + ] + }, + "NumWords": { + "type": "dword", + "value": 23 + }, + "PreventZoomIn": { + "type": "byte", + "value": 0 + }, + "ReplyList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, thanks." + } + } + }, + { + "__struct_id": 1, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "npc_town_store" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes. I'd like to see what you have for sale." + } + } + } + ] + }, + "StartingList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 0 + } + } + ] + } +} diff --git a/src/module/dlg/npc_town_store2.dlg.json b/src/module/dlg/npc_town_store2.dlg.json new file mode 100644 index 0000000..71834e6 --- /dev/null +++ b/src/module/dlg/npc_town_store2.dlg.json @@ -0,0 +1,211 @@ +{ + "__data_type": "DLG ", + "DelayEntry": { + "type": "dword", + "value": 0 + }, + "DelayReply": { + "type": "dword", + "value": 0 + }, + "EndConverAbort": { + "type": "resref", + "value": "" + }, + "EndConversation": { + "type": "resref", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Welcome to my shop. Would you like to see my wares?" + } + } + } + ] + }, + "NumWords": { + "type": "dword", + "value": 23 + }, + "PreventZoomIn": { + "type": "byte", + "value": 0 + }, + "ReplyList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, thanks." + } + } + }, + { + "__struct_id": 1, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "npc_town_store2" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes. I'd like to see what you have for sale." + } + } + } + ] + }, + "StartingList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 0 + } + } + ] + } +} diff --git a/src/module/dlg/nw_g_animal.dlg.json b/src/module/dlg/nw_g_animal.dlg.json new file mode 100644 index 0000000..a65a225 --- /dev/null +++ b/src/module/dlg/nw_g_animal.dlg.json @@ -0,0 +1,49670 @@ +{ + "__data_type": "DLG ", + "DelayEntry": { + "type": "dword", + "value": 0 + }, + "DelayReply": { + "type": "dword", + "value": 0 + }, + "EndConverAbort": { + "type": "resref", + "value": "" + }, + "EndConversation": { + "type": "resref", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_scout" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 439 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_identify" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 438 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "nw_d2_intl" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "nw_d2_intl" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " You feel warm thoughts from your animal companion, as it wonders what you would like.", + "id": 53321 + } + } + }, + { + "__struct_id": 1, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58454 + } + } + }, + { + "__struct_id": 2, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58455 + } + } + }, + { + "__struct_id": 3, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58456 + } + } + }, + { + "__struct_id": 4, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58457 + } + } + }, + { + "__struct_id": 5, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58458 + } + } + }, + { + "__struct_id": 6, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58459 + } + } + }, + { + "__struct_id": 7, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58460 + } + } + }, + { + "__struct_id": 8, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58461 + } + } + }, + { + "__struct_id": 9, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58462 + } + } + }, + { + "__struct_id": 10, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58463 + } + } + }, + { + "__struct_id": 11, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "The animal seems confused about your actions, but slinks away to appease you.", + "id": 58464 + } + } + }, + { + "__struct_id": 12, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st-11" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58464 + } + } + }, + { + "__struct_id": 13, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58465 + } + } + }, + { + "__struct_id": 14, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58466 + } + } + }, + { + "__struct_id": 15, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58467 + } + } + }, + { + "__struct_id": 16, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_12" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "The animal is quite famished and devours the food you offer. The companion seems content.", + "id": 58468 + } + } + }, + { + "__struct_id": 17, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58469 + } + } + }, + { + "__struct_id": 18, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 141 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 59 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + }, + { + "__struct_id": 7, + "Key": { + "type": "cexostring", + "value": "nClass8" + }, + "Value": { + "type": "cexostring", + "value": "46" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " looks up at you, obviously willing to do as you ask.", + "id": 58470 + } + } + }, + { + "__struct_id": 19, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_has_assoc" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Companion" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_assoc" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Familiar" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x2_hen_tomishad3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 21 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "30" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "174" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "175" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "176" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 17 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "177" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "179" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 15 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "180" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 14 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "181" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "182" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "178" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 15, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " waits for you to tell it what to summon." + } + } + }, + { + "__struct_id": 20, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "You sure?", + "id": 87721 + } + } + }, + { + "__struct_id": 21, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 58 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 48 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 38 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Ready to cast it waits for your command.", + "id": 88866 + } + } + }, + { + "__struct_id": 22, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 37 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 36 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "x2_d1_targetall" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 23, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 47 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 46 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 45 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 44 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 43 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 42 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 41 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 40 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "x2_d1_targetall" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 39 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 24, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 57 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 54 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 53 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 52 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 51 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 50 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "x2_d1_targetall" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 49 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 25, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 140 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 139 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 130 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "13" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 129 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "21" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 128 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "419" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 127 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "519" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 126 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "38" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 125 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "41" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 124 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "42" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 123 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "354" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 122 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 121 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "49" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 120 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "50" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 119 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "369" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 116 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 15, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "418" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 115 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 16, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "121" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 114 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 17, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "377" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 113 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 18, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "356" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 112 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 19, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 111 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 20, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "120" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 110 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 21, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "65" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 109 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 22, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "67" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 108 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 23, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "109" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 107 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 24, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "70" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 106 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 25, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "443" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 105 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 26, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "73" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 104 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 27, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "74" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 103 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 28, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "78" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 102 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 29, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "88" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 101 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 30, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "90" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 100 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 31, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "92" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 99 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 32, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "93" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 98 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 33, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "94" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 97 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 34, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "95" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 96 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 35, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "97" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 95 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 36, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "99" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 94 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 37, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "100" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 93 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 38, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "102" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 92 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 39, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "108" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 91 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 40, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "113" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 90 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 41, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "117" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 89 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 42, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "119" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 88 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 43, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "525" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 87 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 44, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "126" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 86 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 45, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "355" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 85 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 46, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "133" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 84 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 47, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "134" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 83 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 48, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "137" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 82 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 49, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "321" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 81 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 50, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "141" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 80 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 51, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "374" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 79 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 52, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "145" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 78 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 53, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "146" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 77 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 54, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "147" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 76 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 55, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "148" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 75 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 56, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "149" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 74 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 57, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "150" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 73 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 58, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "151" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 72 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 59, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "152" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 71 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 60, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "154" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 70 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 61, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "157" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 69 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 62, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "159" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 68 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 63, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "417" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 67 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 64, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "450" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 66 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 65, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "169" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 65 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 66, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "168" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 64 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 67, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "172" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 63 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 68, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "186" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 62 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 69, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "365" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 70, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "441" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 71, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 72, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "At the ready your companion listens.", + "id": 87720 + } + } + }, + { + "__struct_id": 26, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 118 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 117 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "You sure?", + "id": 87721 + } + } + }, + { + "__struct_id": 27, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 138 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 137 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 136 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 135 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 134 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 133 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 132 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 131 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Okay. Who shoulds I cast it on?", + "id": 87722 + } + } + }, + { + "__struct_id": 28, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 150 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 149 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 148 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 147 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 146 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 145 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 144 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 143 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 142 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Looking at you it waits.", + "id": 87722 + } + } + }, + { + "__struct_id": 29, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 180 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 179 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 178 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_pickuploot" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 177 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 170 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 159 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 158 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 157 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_skillrank" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSkill" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nRank" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 153 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " looks at you awaiting your instructions on tactics." + } + } + }, + { + "__struct_id": 30, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 156 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 155 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 154 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Looking around, it listens for you to tell them how to deal with objects." + } + } + }, + { + "__struct_id": 31, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 169 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 168 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 167 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 166 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 165 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 164 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_cntrspell" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 163 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_cntrspell" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 162 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 161 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 160 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Your companion looks up to the sky while you tell it how to use magic." + } + } + }, + { + "__struct_id": 32, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 176 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 175 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 174 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 173 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 172 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 171 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Looking at you, waits for instructon on how it should heal.", + "id": 55427 + } + } + }, + { + "__struct_id": 33, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 437 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_defensive" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 436 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_ambusher" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 435 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_ranged" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 187 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_peaceful" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 186 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_taunt" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 185 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_taunt" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 184 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 183 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_assoc_mode" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nMode" + }, + "Value": { + "type": "cexostring", + "value": "16384" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 182 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 181 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Your companion listens intently for your combat tactics." + } + } + }, + { + "__struct_id": 34, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 434 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_defensive" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 433 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_ambusher" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 432 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_ranged" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 187 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 431 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_taunt" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 430 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_cntrspell" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 429 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 428 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 427 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 426 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 189 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What do you think is the best tactic?" + } + } + }, + { + "__struct_id": 35, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 425 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 424 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 423 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_pickuploot" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 422 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 415 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 403 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 402 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 401 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 397 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What do you have in mind?" + } + } + }, + { + "__struct_id": 36, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 38 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_scout" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 396 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_identify" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 395 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_open_inven" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 391 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 189 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 380 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 298 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 266 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + }, + { + "__struct_id": 7, + "Key": { + "type": "cexostring", + "value": "nClass8" + }, + "Value": { + "type": "cexostring", + "value": "46" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 251 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 195 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_hen_leave" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 192 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_convo" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 191 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What would you like to discuss?" + } + } + }, + { + "__struct_id": 37, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 194 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 193 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Are you sure you want to do that?" + } + } + }, + { + "__struct_id": 38, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_polymorph" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 250 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "305" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 244 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "304" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 239 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "898" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 233 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "900" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 229 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "901" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 225 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "903" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 221 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "902" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 217 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "1060" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 213 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "1061" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 209 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "257" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 208 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "x2_d2_haslayon" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 198 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "x2_d1_dmight" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 197 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "x2_d1_dshield" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 196 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let's see what I can do...", + "id": 95904 + } + } + }, + { + "__struct_id": 39, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 207 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 206 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 205 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 204 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 203 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 202 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 201 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 200 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And who should be the target of my healing?", + "id": 87722 + } + } + }, + { + "__struct_id": 40, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 212 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 211 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 210 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 41, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 216 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 215 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 214 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 42, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 220 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 219 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 218 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 43, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 224 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 223 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 222 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 44, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 228 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 227 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 226 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 45, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 232 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 231 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 230 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 46, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 238 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 237 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 236 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 235 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 234 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 47, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 243 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 242 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 241 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 240 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 48, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 249 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 248 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 247 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 246 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 245 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 49, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_has_assoc" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Companion" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 265 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_assoc" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Familiar" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 264 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x2_hen_tomishad3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 263 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 262 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "30" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 261 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "174" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 260 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "175" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 259 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "176" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 258 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "177" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 257 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "179" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 256 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "180" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 255 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "181" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 254 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "182" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 253 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "178" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 252 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 15, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What would you have me summon?" + } + } + }, + { + "__struct_id": 50, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 297 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 287 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 277 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 267 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What would you like to discuss about my defensive spells?", + "id": 88866 + } + } + }, + { + "__struct_id": 51, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 276 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 275 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 274 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 273 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 272 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 271 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 270 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 269 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 268 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 52, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 286 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 285 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 284 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 283 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 282 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 281 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 280 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 279 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 278 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 53, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 296 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 295 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 294 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 293 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 292 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 291 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 290 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 289 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 288 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 54, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 379 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 378 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 369 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "13" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 368 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "21" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 367 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "419" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 366 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "519" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 365 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "38" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 364 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "41" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 363 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "42" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 362 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "354" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 361 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 360 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "49" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 359 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "50" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 358 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "369" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 355 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 15, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "418" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 354 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 16, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "121" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 353 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 17, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "377" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 352 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 18, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "356" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 351 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 19, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 350 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 20, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "120" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 349 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 21, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "65" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 348 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 22, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "67" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 347 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 23, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "109" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 346 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 24, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "70" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 345 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 25, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "443" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 344 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 26, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "73" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 343 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 27, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "74" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 342 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 28, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "78" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 341 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 29, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "88" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 340 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 30, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "90" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 339 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 31, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "92" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 338 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 32, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "93" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 337 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 33, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "94" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 336 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 34, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "95" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 335 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 35, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "97" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 334 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 36, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "99" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 333 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 37, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "100" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 332 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 38, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "102" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 331 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 39, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "108" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 330 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 40, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "113" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 329 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 41, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "117" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 328 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 42, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "119" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 327 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 43, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "525" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 326 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 44, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "126" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 325 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 45, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "355" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 324 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 46, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "133" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 323 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 47, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "134" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 322 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 48, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "137" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 321 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 49, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "321" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 320 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 50, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "141" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 319 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 51, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "374" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 318 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 52, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "145" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 317 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 53, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "146" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 316 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 54, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "147" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 315 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 55, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "148" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 314 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 56, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "149" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 313 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 57, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "150" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 312 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 58, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "151" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 311 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 59, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "152" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 310 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 60, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "154" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 309 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 61, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "157" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 308 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 62, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "159" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 307 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 63, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "417" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 306 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 64, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "450" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 305 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 65, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "169" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 304 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 66, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "168" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 303 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 67, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "172" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 302 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 68, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "186" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 301 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 69, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "365" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 300 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 70, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "441" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 299 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 71, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 381 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What you want me to cast?", + "id": 87720 + } + } + }, + { + "__struct_id": 55, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 357 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 356 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "You sure?", + "id": 87721 + } + } + }, + { + "__struct_id": 56, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 377 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 376 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 375 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 374 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 373 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 372 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 371 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 370 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 381 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Okay. Who shoulds I cast it on?", + "id": 87722 + } + } + }, + { + "__struct_id": 57, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 390 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 389 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 388 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 387 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 386 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 385 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 384 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 383 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 382 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 381 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And who should be the target of my healing?", + "id": 87722 + } + } + }, + { + "__struct_id": 58, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 394 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 393 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 392 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Sure, what would you like me to do?" + } + } + }, + { + "__struct_id": 59, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_skillrank" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSkill" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nRank" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 400 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_skillrank" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSkill" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nRank" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 399 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 398 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 189 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Should I do something else?" + } + } + }, + { + "__struct_id": 60, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 414 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 413 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_a_magic_m" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nMode" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 412 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 411 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 410 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 409 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 408 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_cntrspell" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 407 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_cntrspell" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 406 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 405 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 404 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 189 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " How would you like me to use magic in combat?" + } + } + }, + { + "__struct_id": 61, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 421 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 420 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 419 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 418 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 417 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 416 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 189 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " When do you think I should heal our allies?", + "id": 55427 + } + } + }, + { + "__struct_id": 62, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "The creature looks at you strangely and resumes what it was doing before.", + "id": 53320 + } + } + } + ] + }, + "NumWords": { + "type": "dword", + "value": 2384 + }, + "PreventZoomIn": { + "type": "byte", + "value": 1 + }, + "ReplyList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_03" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_04" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 53319 + } + } + }, + { + "__struct_id": 1, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_03" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_04" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 53318 + } + } + }, + { + "__struct_id": 2, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58436 + } + } + }, + { + "__struct_id": 3, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58437 + } + } + }, + { + "__struct_id": 4, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_03" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 15 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_04" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 14 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58438 + } + } + }, + { + "__struct_id": 5, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_11" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 17 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58439 + } + } + }, + { + "__struct_id": 6, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Me needs you to do something for me.", + "id": 58440 + } + } + }, + { + "__struct_id": 7, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I would like you to do something different for me.", + "id": 58441 + } + } + }, + { + "__struct_id": 8, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Nevermind." + } + } + }, + { + "__struct_id": 9, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets do something else." + } + } + }, + { + "__struct_id": 10, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to summon something if you can." + } + } + }, + { + "__struct_id": 11, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "178" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IX.", + "id": 88353 + } + } + }, + { + "__struct_id": 12, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "182" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VIII.", + "id": 88354 + } + } + }, + { + "__struct_id": 13, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "181" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VII.", + "id": 88355 + } + } + }, + { + "__struct_id": 14, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "180" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VI.", + "id": 88356 + } + } + }, + { + "__struct_id": 15, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "179" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature V.", + "id": 88358 + } + } + }, + { + "__struct_id": 16, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "177" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IV.", + "id": 88358 + } + } + }, + { + "__struct_id": 17, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "176" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature III.", + "id": 88359 + } + } + }, + { + "__struct_id": 18, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "175" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature II.", + "id": 88360 + } + } + }, + { + "__struct_id": 19, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "174" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature I.", + "id": 88361 + } + } + }, + { + "__struct_id": 20, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "30" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Create Undead.", + "id": 88425 + } + } + }, + { + "__struct_id": 21, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Animate Dead.", + "id": 88446 + } + } + }, + { + "__struct_id": 22, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, I've changed my mind.", + "id": 88415 + } + } + }, + { + "__struct_id": 23, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "Henchmen" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes, go ahead.", + "id": 88416 + } + } + }, + { + "__struct_id": 24, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_hen_tomishad4" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Shadow." + } + } + }, + { + "__struct_id": 25, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Familiar" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_summon_assoc" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Your Familiar." + } + } + }, + { + "__struct_id": 26, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Companion" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_summon_assoc" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Your Companion." + } + } + }, + { + "__struct_id": 27, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 21 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let us talk about your defensive spells.", + "id": 89061 + } + } + }, + { + "__struct_id": 28, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your defensive spells.", + "id": 89063 + } + } + }, + { + "__struct_id": 29, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 30, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 31, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 32, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 33, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 34, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 35, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 36, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 37, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 38, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your long duration defensive spells.", + "id": 89064 + } + } + }, + { + "__struct_id": 39, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 40, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 41, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 42, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 43, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 44, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 45, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 46, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 47, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 48, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your short duration defensive spells.", + "id": 89065 + } + } + }, + { + "__struct_id": 49, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 50, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 51, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 52, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 53, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 54, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 55, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 56, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 57, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 58, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 21 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast long duration spells after resting." + } + } + }, + { + "__struct_id": 59, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a spell.", + "id": 88348 + } + } + }, + { + "__struct_id": 60, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "441" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Wounding Whispers.", + "id": 88350 + } + } + }, + { + "__struct_id": 61, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "365" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ultravision.", + "id": 88351 + } + } + }, + { + "__struct_id": 62, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "186" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "True Seeing.", + "id": 88352 + } + } + }, + { + "__struct_id": 63, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "172" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stoneskin.", + "id": 88362 + } + } + }, + { + "__struct_id": 64, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "168" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance.", + "id": 88363 + } + } + }, + { + "__struct_id": 65, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "169" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Mantle.", + "id": 88364 + } + } + }, + { + "__struct_id": 66, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "450" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield of Faith.", + "id": 88365 + } + } + }, + { + "__struct_id": 67, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "417" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield.", + "id": 88366 + } + } + }, + { + "__struct_id": 68, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "159" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shadow Shield.", + "id": 88367 + } + } + }, + { + "__struct_id": 69, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "157" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "See Invisibility.", + "id": 88368 + } + } + }, + { + "__struct_id": 70, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "154" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Sanctuary.", + "id": 88369 + } + } + }, + { + "__struct_id": 71, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "152" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Restoration.", + "id": 88370 + } + } + }, + { + "__struct_id": 72, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "151" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resistance.", + "id": 88371 + } + } + }, + { + "__struct_id": 73, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "150" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resist Elements.", + "id": 88372 + } + } + }, + { + "__struct_id": 74, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "149" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Paralysis.", + "id": 88373 + } + } + }, + { + "__struct_id": 75, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "148" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Fear.", + "id": 88374 + } + } + }, + { + "__struct_id": 76, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "147" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Disease.", + "id": 88375 + } + } + }, + { + "__struct_id": 77, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "146" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Curse.", + "id": 88376 + } + } + }, + { + "__struct_id": 78, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "145" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Blindness/Deafness.", + "id": 88377 + } + } + }, + { + "__struct_id": 79, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "374" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Regenerate.", + "id": 88378 + } + } + }, + { + "__struct_id": 80, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "141" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Spells.", + "id": 88379 + } + } + }, + { + "__struct_id": 81, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "321" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Evil." + } + } + }, + { + "__struct_id": 82, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "137" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Elements.", + "id": 88380 + } + } + }, + { + "__struct_id": 83, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "134" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Premonition.", + "id": 88381 + } + } + }, + { + "__struct_id": 84, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "133" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Prayer.", + "id": 88382 + } + } + }, + { + "__struct_id": 85, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "355" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Owl's Wisdom.", + "id": 88383 + } + } + }, + { + "__struct_id": 86, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "126" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Neutralize poison.", + "id": 88384 + } + } + }, + { + "__struct_id": 87, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "525" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Monstrous Regeneration.", + "id": 88385 + } + } + }, + { + "__struct_id": 88, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "119" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Minor Globe of Invulnerability.", + "id": 88386 + } + } + }, + { + "__struct_id": 89, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "117" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mind Blank.", + "id": 88387 + } + } + }, + { + "__struct_id": 90, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "113" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mass Haste.", + "id": 88388 + } + } + }, + { + "__struct_id": 91, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "108" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Magical Vestment.", + "id": 88389 + } + } + }, + { + "__struct_id": 92, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "102" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mage Armor.", + "id": 88390 + } + } + }, + { + "__struct_id": 93, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "100" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Light.", + "id": 88391 + } + } + }, + { + "__struct_id": 94, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "99" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Spell Mantle.", + "id": 88392 + } + } + }, + { + "__struct_id": 95, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "97" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Restoration.", + "id": 88393 + } + } + }, + { + "__struct_id": 96, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "95" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Mind Blank", + "id": 88394 + } + } + }, + { + "__struct_id": 97, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "94" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Dispel.", + "id": 88395 + } + } + }, + { + "__struct_id": 98, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "93" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Knock.", + "id": 88396 + } + } + }, + { + "__struct_id": 99, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "92" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility Sphere.", + "id": 88397 + } + } + }, + { + "__struct_id": 100, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "90" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility", + "id": 88398 + } + } + }, + { + "__struct_id": 101, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "88" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Improved Invisibility.", + "id": 88399 + } + } + }, + { + "__struct_id": 102, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "78" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Haste.", + "id": 88400 + } + } + }, + { + "__struct_id": 103, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "74" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Stoneskin.", + "id": 88401 + } + } + }, + { + "__struct_id": 104, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "73" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Spell Mantle.", + "id": 88402 + } + } + }, + { + "__struct_id": 105, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "443" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Sanctuary.", + "id": 88403 + } + } + }, + { + "__struct_id": 106, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "70" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Restoration.", + "id": 88404 + } + } + }, + { + "__struct_id": 107, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "109" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Magic Weapon.", + "id": 88405 + } + } + }, + { + "__struct_id": 108, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "67" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Dispelling.", + "id": 88406 + } + } + }, + { + "__struct_id": 109, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "65" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Globe of Invulnerability.", + "id": 88407 + } + } + }, + { + "__struct_id": 110, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "120" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ghostly Visage.", + "id": 88408 + } + } + }, + { + "__struct_id": 111, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Freedom of Movement.", + "id": 88409 + } + } + }, + { + "__struct_id": 112, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "356" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Fox's Cunning", + "id": 88410 + } + } + }, + { + "__struct_id": 113, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "377" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Find Traps.", + "id": 88411 + } + } + }, + { + "__struct_id": 114, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "121" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ethereal Visage.", + "id": 88412 + } + } + }, + { + "__struct_id": 115, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "418" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Entropic Shield.", + "id": 88413 + } + } + }, + { + "__struct_id": 116, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "369" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Energy Buffer.", + "id": 88414 + } + } + }, + { + "__struct_id": 117, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, I've changed my mind.", + "id": 88415 + } + } + }, + { + "__struct_id": 118, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes, go ahead.", + "id": 88416 + } + } + }, + { + "__struct_id": 119, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "50" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endure Elements.", + "id": 88417 + } + } + }, + { + "__struct_id": 120, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "49" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endurance.", + "id": 88418 + } + } + }, + { + "__struct_id": 121, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Elemental Shield.", + "id": 88419 + } + } + }, + { + "__struct_id": 122, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "354" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Eagle's Splendour.", + "id": 88420 + } + } + }, + { + "__struct_id": 123, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "42" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Power.", + "id": 88421 + } + } + }, + { + "__struct_id": 124, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "41" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Dispel Magic.", + "id": 88422 + } + } + }, + { + "__struct_id": 125, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "38" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Ward.", + "id": 88423 + } + } + }, + { + "__struct_id": 126, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "519" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Armor.", + "id": 88424 + } + } + }, + { + "__struct_id": 127, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "419" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Continual Flame.", + "id": 88426 + } + } + }, + { + "__struct_id": 128, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "21" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Clarity.", + "id": 88427 + } + } + }, + { + "__struct_id": 129, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "13" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cat's Grace.", + "id": 88428 + } + } + }, + { + "__struct_id": 130, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bull's Strength.", + "id": 88429 + } + } + }, + { + "__struct_id": 131, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 132, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 133, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 134, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 135, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 136, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 137, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 138, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 139, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bless.", + "id": 88445 + } + } + }, + { + "__struct_id": 140, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Aid.", + "id": 88447 + } + } + }, + { + "__struct_id": 141, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a healing spell." + } + } + }, + { + "__struct_id": 142, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Heal up the whole party.", + "id": 88431 + } + } + }, + { + "__struct_id": 143, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 144, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 145, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 146, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "Target" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 147, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 148, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 149, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 150, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 151, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want to discuss your tactics." + } + } + }, + { + "__struct_id": 152, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets talk about something else." + } + } + }, + { + "__struct_id": 153, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets discuss how you deal with objects." + } + } + }, + { + "__struct_id": 154, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Bash" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your bashing tactics.", + "id": 96501 + } + } + }, + { + "__struct_id": 155, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Locks" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your lock picking tactics.", + "id": 96501 + } + } + }, + { + "__struct_id": 156, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Traps" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your trap tactics.", + "id": 96502 + } + } + }, + { + "__struct_id": 157, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Search" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change your search tactics." + } + } + }, + { + "__struct_id": 158, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Stealth" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change your stealth tactics." + } + } + }, + { + "__struct_id": 159, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let's change how you use magic in combat." + } + } + }, + { + "__struct_id": 160, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicItems" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you use magic items or not.", + "id": 96498 + } + } + }, + { + "__struct_id": 161, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Dispel" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your dispel tactics.", + "id": 96500 + } + } + }, + { + "__struct_id": 162, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BasicTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stop countering the enemies spells.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 163, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "CounterSpell" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to counter spell the enemy!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 164, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BuffFirst" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change who you cast defensive spells on first.", + "id": 96500 + } + } + }, + { + "__struct_id": 165, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "OffensiveCasting" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast offensive spells.", + "id": 96498 + } + } + }, + { + "__struct_id": 166, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "DefensiveCasting" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast defensive spells.", + "id": 96498 + } + } + }, + { + "__struct_id": 167, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "NoMagic" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change how you use magic spells in combat." + } + } + }, + { + "__struct_id": 168, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your magic more in combat." + } + } + }, + { + "__struct_id": 169, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your magic less in combat." + } + } + }, + { + "__struct_id": 170, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change when you decide to heal me.", + "id": 54985 + } + } + }, + { + "__struct_id": 171, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealOutPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Increase the health an one needs for you to heal out of combat.", + "id": 54991 + } + } + }, + { + "__struct_id": 172, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealOutMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Reduce the health an one needs for you to heal out of combat.", + "id": 54991 + } + } + }, + { + "__struct_id": 173, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealInPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Increase the health an one needs for you to heal during combat.", + "id": 54991 + } + } + }, + { + "__struct_id": 174, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealInMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Reduce the health any one needs for you to heal during combat.", + "id": 54991 + } + } + }, + { + "__struct_id": 175, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealSelf" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you heal yourself.", + "id": 54990 + } + } + }, + { + "__struct_id": 176, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealAllies" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you heal any allies.", + "id": 54989 + } + } + }, + { + "__struct_id": 177, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Pickup" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change if you retrieve items and gold." + } + } + }, + { + "__struct_id": 178, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "FollowFarther" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Follow farther away from me.", + "id": 96508 + } + } + }, + { + "__struct_id": 179, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "FollowCloser" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Follow closer to me.", + "id": 96508 + } + } + }, + { + "__struct_id": 180, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets talk about your tactics in combat." + } + } + }, + { + "__struct_id": 181, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AttackTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you fight every opponent during combat." + } + } + }, + { + "__struct_id": 182, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AtkAssociates" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your tactics against familiars, companions, and summons." + } + } + }, + { + "__struct_id": 183, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Ranged" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your ranged combat tactics." + } + } + }, + { + "__struct_id": 184, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "CounterSpell" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to counter spell the enemy!" + } + } + }, + { + "__struct_id": 185, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Taunt" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to taunt the enemy!" + } + } + }, + { + "__struct_id": 186, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "PeaceTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Don't engage in combat." + } + } + }, + { + "__struct_id": 187, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "RangedTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use agressive ranged tactics, stay out of melee.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 188, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "That will be all for now." + } + } + }, + { + "__struct_id": 189, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want to discuss how we can work together." + } + } + }, + { + "__struct_id": 190, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 36 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets talk about something else." + } + } + }, + { + "__struct_id": 191, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_get_convo" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let us talk about something completely different." + } + } + }, + { + "__struct_id": 192, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 37 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "We should part ways." + } + } + }, + { + "__struct_id": 193, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, I like having you around." + } + } + }, + { + "__struct_id": 194, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_fire_henchmen" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes I'm sure, Perhapse we'll meet again." + } + } + }, + { + "__struct_id": 195, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 38 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can you use a special ability?", + "id": 96382 + } + } + }, + { + "__struct_id": 196, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d2_dshield" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Shield.", + "id": 96383 + } + } + }, + { + "__struct_id": 197, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d2_dmight" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Might.", + "id": 96384 + } + } + }, + { + "__struct_id": 198, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 39 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lay on Hands.", + "id": 96385 + } + } + }, + { + "__struct_id": 199, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I've changed my mind.", + "id": 88430 + } + } + }, + { + "__struct_id": 200, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 201, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 202, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 203, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 204, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 205, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 206, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 207, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 208, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "257" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_use_feat" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your bard song.", + "id": 88342 + } + } + }, + { + "__struct_id": 209, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 40 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your construction shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 210, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "740" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Iron Golem" + } + } + }, + { + "__struct_id": 211, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "739" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Demon Flesh Golem" + } + } + }, + { + "__struct_id": 212, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "738" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stone Golem" + } + } + }, + { + "__struct_id": 213, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 41 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your outsider shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 214, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "735" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Slaad" + } + } + }, + { + "__struct_id": 215, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "734" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Rakshasa" + } + } + }, + { + "__struct_id": 216, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "733" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Azer" + } + } + }, + { + "__struct_id": 217, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 42 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your humanoid shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 218, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "684" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Kobold Assasin" + } + } + }, + { + "__struct_id": 219, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "683" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lizard folk" + } + } + }, + { + "__struct_id": 220, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "682" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Drow" + } + } + }, + { + "__struct_id": 221, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 43 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your greater wild shape V.", + "id": 88342 + } + } + }, + { + "__struct_id": 222, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "691" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mindflayer" + } + } + }, + { + "__struct_id": 223, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "679" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Medusa" + } + } + }, + { + "__struct_id": 224, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "694" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Dire Tiger" + } + } + }, + { + "__struct_id": 225, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 44 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your greater wild shape III.", + "id": 88342 + } + } + }, + { + "__struct_id": 226, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "674" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Manticore" + } + } + }, + { + "__struct_id": 227, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "673" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Drider" + } + } + }, + { + "__struct_id": 228, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "670" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Basilisk" + } + } + }, + { + "__struct_id": 229, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 45 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your greater wild shape II.", + "id": 88342 + } + } + }, + { + "__struct_id": 230, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "680" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Minotaur" + } + } + }, + { + "__struct_id": 231, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "678" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Gargoyle" + } + } + }, + { + "__struct_id": 232, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "672" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Harpy" + } + } + }, + { + "__struct_id": 233, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 46 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your greater wild shape I.", + "id": 88342 + } + } + }, + { + "__struct_id": 234, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "662" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Green Wyrmling" + } + } + }, + { + "__struct_id": 235, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "661" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "White Wyrmling" + } + } + }, + { + "__struct_id": 236, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "660" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Black Wyrmling" + } + } + }, + { + "__struct_id": 237, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "659" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Blue Wyrmling" + } + } + }, + { + "__struct_id": 238, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "658" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Red Wyrmling" + } + } + }, + { + "__struct_id": 239, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 47 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your elemental shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 240, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "398" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Water" + } + } + }, + { + "__struct_id": 241, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "397" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Fire" + } + } + }, + { + "__struct_id": 242, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "399" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Earth" + } + } + }, + { + "__struct_id": 243, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "400" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Air" + } + } + }, + { + "__struct_id": 244, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 48 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your wild shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 245, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "405" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Badger" + } + } + }, + { + "__struct_id": 246, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "404" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Boar" + } + } + }, + { + "__struct_id": 247, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "403" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Wolf" + } + } + }, + { + "__struct_id": 248, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "402" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Panther" + } + } + }, + { + "__struct_id": 249, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "401" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bear" + } + } + }, + { + "__struct_id": 250, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nEffectType" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 36 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_remove_effect" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Transform back into your natural form.", + "id": 96384 + } + } + }, + { + "__struct_id": 251, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 49 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to summon something if you can." + } + } + }, + { + "__struct_id": 252, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "178" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IX.", + "id": 88353 + } + } + }, + { + "__struct_id": 253, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "182" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VIII.", + "id": 88354 + } + } + }, + { + "__struct_id": 254, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "181" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VII.", + "id": 88355 + } + } + }, + { + "__struct_id": 255, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "180" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VI.", + "id": 88356 + } + } + }, + { + "__struct_id": 256, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "179" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature V.", + "id": 88358 + } + } + }, + { + "__struct_id": 257, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "177" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IV.", + "id": 88358 + } + } + }, + { + "__struct_id": 258, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "176" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature III.", + "id": 88359 + } + } + }, + { + "__struct_id": 259, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "175" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature II.", + "id": 88360 + } + } + }, + { + "__struct_id": 260, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "174" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature I.", + "id": 88361 + } + } + }, + { + "__struct_id": 261, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "30" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Create Undead.", + "id": 88425 + } + } + }, + { + "__struct_id": 262, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Animate Dead.", + "id": 88446 + } + } + }, + { + "__struct_id": 263, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_hen_tomishad4" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Shadow." + } + } + }, + { + "__struct_id": 264, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Familiar" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_summon_assoc" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Your Familiar." + } + } + }, + { + "__struct_id": 265, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Companion" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_summon_assoc" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Your Companion." + } + } + }, + { + "__struct_id": 266, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 50 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let us talk about your defensive spells.", + "id": 89061 + } + } + }, + { + "__struct_id": 267, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 51 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your defensive spells.", + "id": 89063 + } + } + }, + { + "__struct_id": 268, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 269, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 270, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 271, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 272, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 273, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 274, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 275, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 276, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 277, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 52 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your long duration defensive spells.", + "id": 89064 + } + } + }, + { + "__struct_id": 278, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 279, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 280, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 281, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 282, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 283, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 284, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 285, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 286, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 287, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 53 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your short duration defensive spells.", + "id": 89065 + } + } + }, + { + "__struct_id": 288, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 289, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 290, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 291, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 292, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 293, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 294, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 295, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 296, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 297, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 50 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast long duration spells after resting." + } + } + }, + { + "__struct_id": 298, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 54 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a spell.", + "id": 88348 + } + } + }, + { + "__struct_id": 299, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "441" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Wounding Whispers.", + "id": 88350 + } + } + }, + { + "__struct_id": 300, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "365" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ultravision.", + "id": 88351 + } + } + }, + { + "__struct_id": 301, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "186" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "True Seeing.", + "id": 88352 + } + } + }, + { + "__struct_id": 302, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "172" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stoneskin.", + "id": 88362 + } + } + }, + { + "__struct_id": 303, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "168" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance.", + "id": 88363 + } + } + }, + { + "__struct_id": 304, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "169" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Mantle.", + "id": 88364 + } + } + }, + { + "__struct_id": 305, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "450" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield of Faith.", + "id": 88365 + } + } + }, + { + "__struct_id": 306, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "417" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield.", + "id": 88366 + } + } + }, + { + "__struct_id": 307, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "159" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shadow Shield.", + "id": 88367 + } + } + }, + { + "__struct_id": 308, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "157" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "See Invisibility.", + "id": 88368 + } + } + }, + { + "__struct_id": 309, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "154" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Sanctuary.", + "id": 88369 + } + } + }, + { + "__struct_id": 310, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "152" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Restoration.", + "id": 88370 + } + } + }, + { + "__struct_id": 311, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "151" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resistance.", + "id": 88371 + } + } + }, + { + "__struct_id": 312, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "150" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resist Elements.", + "id": 88372 + } + } + }, + { + "__struct_id": 313, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "149" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Paralysis.", + "id": 88373 + } + } + }, + { + "__struct_id": 314, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "148" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Fear.", + "id": 88374 + } + } + }, + { + "__struct_id": 315, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "147" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Disease.", + "id": 88375 + } + } + }, + { + "__struct_id": 316, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "146" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Curse.", + "id": 88376 + } + } + }, + { + "__struct_id": 317, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "145" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Blindness/Deafness.", + "id": 88377 + } + } + }, + { + "__struct_id": 318, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "374" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Regenerate.", + "id": 88378 + } + } + }, + { + "__struct_id": 319, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "141" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Spells.", + "id": 88379 + } + } + }, + { + "__struct_id": 320, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "321" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Evil." + } + } + }, + { + "__struct_id": 321, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "137" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Elements.", + "id": 88380 + } + } + }, + { + "__struct_id": 322, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "134" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Premonition.", + "id": 88381 + } + } + }, + { + "__struct_id": 323, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "133" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Prayer.", + "id": 88382 + } + } + }, + { + "__struct_id": 324, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "355" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Owl's Wisdom.", + "id": 88383 + } + } + }, + { + "__struct_id": 325, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "126" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Neutralize poison.", + "id": 88384 + } + } + }, + { + "__struct_id": 326, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "525" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Monstrous Regeneration.", + "id": 88385 + } + } + }, + { + "__struct_id": 327, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "119" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Minor Globe of Invulnerability.", + "id": 88386 + } + } + }, + { + "__struct_id": 328, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "117" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mind Blank.", + "id": 88387 + } + } + }, + { + "__struct_id": 329, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "113" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mass Haste.", + "id": 88388 + } + } + }, + { + "__struct_id": 330, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "108" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Magical Vestment.", + "id": 88389 + } + } + }, + { + "__struct_id": 331, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "102" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mage Armor.", + "id": 88390 + } + } + }, + { + "__struct_id": 332, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "100" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Light.", + "id": 88391 + } + } + }, + { + "__struct_id": 333, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "99" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Spell Mantle.", + "id": 88392 + } + } + }, + { + "__struct_id": 334, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "97" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Restoration.", + "id": 88393 + } + } + }, + { + "__struct_id": 335, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "95" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Mind Blank", + "id": 88394 + } + } + }, + { + "__struct_id": 336, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "94" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Dispel.", + "id": 88395 + } + } + }, + { + "__struct_id": 337, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "93" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Knock.", + "id": 88396 + } + } + }, + { + "__struct_id": 338, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "92" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility Sphere.", + "id": 88397 + } + } + }, + { + "__struct_id": 339, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "90" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility", + "id": 88398 + } + } + }, + { + "__struct_id": 340, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "88" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Improved Invisibility.", + "id": 88399 + } + } + }, + { + "__struct_id": 341, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "78" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Haste.", + "id": 88400 + } + } + }, + { + "__struct_id": 342, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "74" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Stoneskin.", + "id": 88401 + } + } + }, + { + "__struct_id": 343, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "73" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Spell Mantle.", + "id": 88402 + } + } + }, + { + "__struct_id": 344, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "443" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Sanctuary.", + "id": 88403 + } + } + }, + { + "__struct_id": 345, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "70" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Restoration.", + "id": 88404 + } + } + }, + { + "__struct_id": 346, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "109" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Magic Weapon.", + "id": 88405 + } + } + }, + { + "__struct_id": 347, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "67" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Dispelling.", + "id": 88406 + } + } + }, + { + "__struct_id": 348, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "65" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Globe of Invulnerability.", + "id": 88407 + } + } + }, + { + "__struct_id": 349, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "120" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ghostly Visage.", + "id": 88408 + } + } + }, + { + "__struct_id": 350, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Freedom of Movement.", + "id": 88409 + } + } + }, + { + "__struct_id": 351, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "356" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Fox's Cunning", + "id": 88410 + } + } + }, + { + "__struct_id": 352, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "377" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Find Traps.", + "id": 88411 + } + } + }, + { + "__struct_id": 353, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "121" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ethereal Visage.", + "id": 88412 + } + } + }, + { + "__struct_id": 354, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "418" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Entropic Shield.", + "id": 88413 + } + } + }, + { + "__struct_id": 355, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "369" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Energy Buffer.", + "id": 88414 + } + } + }, + { + "__struct_id": 356, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, I've changed my mind.", + "id": 88415 + } + } + }, + { + "__struct_id": 357, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes, go ahead.", + "id": 88416 + } + } + }, + { + "__struct_id": 358, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "50" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endure Elements.", + "id": 88417 + } + } + }, + { + "__struct_id": 359, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "49" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endurance.", + "id": 88418 + } + } + }, + { + "__struct_id": 360, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Elemental Shield.", + "id": 88419 + } + } + }, + { + "__struct_id": 361, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "354" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Eagle's Splendour.", + "id": 88420 + } + } + }, + { + "__struct_id": 362, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "42" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Power.", + "id": 88421 + } + } + }, + { + "__struct_id": 363, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "41" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Dispel Magic.", + "id": 88422 + } + } + }, + { + "__struct_id": 364, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "38" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Ward.", + "id": 88423 + } + } + }, + { + "__struct_id": 365, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "519" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Armor.", + "id": 88424 + } + } + }, + { + "__struct_id": 366, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "419" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Continual Flame.", + "id": 88426 + } + } + }, + { + "__struct_id": 367, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "21" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Clarity.", + "id": 88427 + } + } + }, + { + "__struct_id": 368, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "13" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cat's Grace.", + "id": 88428 + } + } + }, + { + "__struct_id": 369, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bull's Strength.", + "id": 88429 + } + } + }, + { + "__struct_id": 370, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 371, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 372, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 373, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 374, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 375, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 376, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 377, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 378, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bless.", + "id": 88445 + } + } + }, + { + "__struct_id": 379, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Aid.", + "id": 88447 + } + } + }, + { + "__struct_id": 380, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 57 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a healing spell." + } + } + }, + { + "__struct_id": 381, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 36 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I've changed my mind.", + "id": 88430 + } + } + }, + { + "__struct_id": 382, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Heal up the whole party.", + "id": 88431 + } + } + }, + { + "__struct_id": 383, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 384, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 385, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 386, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 387, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 388, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 389, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 390, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 391, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 58 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can we talk about your items?" + } + } + }, + { + "__struct_id": 392, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "GiveMagicItems" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Give me all the magical items in your inventory.", + "id": 96514 + } + } + }, + { + "__struct_id": 393, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "GiveUnIdentifiedItems" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Give me all your unidentified items.", + "id": 96514 + } + } + }, + { + "__struct_id": 394, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_hen_inven" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want to adjust your equipment.", + "id": 96514 + } + } + }, + { + "__struct_id": 395, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x1_hen_identify" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can you identify our equipment?", + "id": 88341 + } + } + }, + { + "__struct_id": 396, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Scout" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I would like you to scout the area." + } + } + }, + { + "__struct_id": 397, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Objects" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 59 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets discuss how you deal with objects." + } + } + }, + { + "__struct_id": 398, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Bash" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Objects" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 59 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your bashing tactics.", + "id": 96507 + } + } + }, + { + "__struct_id": 399, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Locks" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Objects" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 59 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your lock picking tactics.", + "id": 96507 + } + } + }, + { + "__struct_id": 400, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Traps" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Objects" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 59 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your trap tactics.", + "id": 96502 + } + } + }, + { + "__struct_id": 401, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Search" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change your search tactics.", + "id": 96505 + } + } + }, + { + "__struct_id": 402, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Stealth" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change your stealth tactics.", + "id": 96505 + } + } + }, + { + "__struct_id": 403, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let's change how you use magic in combat." + } + } + }, + { + "__struct_id": 404, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicItems" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you use magic items or not.", + "id": 96498 + } + } + }, + { + "__struct_id": 405, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Dispel" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your dispel tactics.", + "id": 96500 + } + } + }, + { + "__struct_id": 406, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BasicTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stop countering the enemies spells.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 407, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "CounterSpell" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Counter the enemy spells!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 408, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BuffFirst" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change who you cast defensive spells on first.", + "id": 96500 + } + } + }, + { + "__struct_id": 409, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "OffensiveCasting" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Only cast offensive spells for now.", + "id": 96498 + } + } + }, + { + "__struct_id": 410, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "DefensiveCasting" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Only cast defensive spells for now.", + "id": 96498 + } + } + }, + { + "__struct_id": 411, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "NoMagic" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Don't use any magic until I say otherwise.", + "id": 96497 + } + } + }, + { + "__struct_id": 412, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "UseMagic" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use any magic spells you have.", + "id": 96498 + } + } + }, + { + "__struct_id": 413, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your magic more in combat." + } + } + }, + { + "__struct_id": 414, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your magic less in combat." + } + } + }, + { + "__struct_id": 415, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change when you should heal.", + "id": 54985 + } + } + }, + { + "__struct_id": 416, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealOutPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Increase the health an one needs for you to heal out of combat.", + "id": 54990 + } + } + }, + { + "__struct_id": 417, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealOutMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Reduce the health an one needs for you to heal out of combat.", + "id": 54989 + } + } + }, + { + "__struct_id": 418, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealInPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Increase the health an one needs for you to heal during combat.", + "id": 54990 + } + } + }, + { + "__struct_id": 419, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealInMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Reduce the health any one needs for you to heal during combat.", + "id": 54989 + } + } + }, + { + "__struct_id": 420, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealSelf" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you heal yourself.", + "id": 54989 + } + } + }, + { + "__struct_id": 421, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealAllies" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you heal any allies.", + "id": 54989 + } + } + }, + { + "__struct_id": 422, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Pickup" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change if you pickup items and gold." + } + } + }, + { + "__struct_id": 423, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "FollowFarther" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Follow farther away from me.", + "id": 96510 + } + } + }, + { + "__struct_id": 424, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "FollowCloser" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Follow closer to me.", + "id": 96511 + } + } + }, + { + "__struct_id": 425, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets talk about your tactics in combat." + } + } + }, + { + "__struct_id": 426, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AttackTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you fight every opponent during combat.", + "2": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"", + "3": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"" + } + } + }, + { + "__struct_id": 427, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AtkAssociates" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your tactics against familiars, companions, and summons.", + "id": 62531 + } + } + }, + { + "__struct_id": 428, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Ranged" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your ranged combat tactics.", + "id": 62531 + } + } + }, + { + "__struct_id": 429, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "CounterSpell" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to counter spell the enemy!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 430, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Taunt" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to taunt the enemy!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 431, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "PeaceTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Don't engage in combat.", + "2": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"", + "3": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"" + } + } + }, + { + "__struct_id": 432, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AmbushTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use ambush tactics, hide and then strike.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 433, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "DefensiveTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use defensive tactics to protect yourself.", + "id": 62532 + } + } + }, + { + "__struct_id": 434, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BasicTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your best judgement in combat.", + "id": 62531 + } + } + }, + { + "__struct_id": 435, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AmbushTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use ambush tactics, hide and then strike.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 436, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "DefensiveTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use defensive tactics protect yourself.", + "id": 62532 + } + } + }, + { + "__struct_id": 437, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BasicTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use basic combat tactics.", + "id": 62531 + } + } + }, + { + "__struct_id": 438, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x1_hen_identify" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can you identify my equipment?", + "id": 88341 + } + } + }, + { + "__struct_id": 439, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Scout" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I would like you to scout the area." + } + } + } + ] + }, + "StartingList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_ac_st_01" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 62 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 0 + } + } + ] + } +} diff --git a/src/module/dlg/nw_g_fam.dlg.json b/src/module/dlg/nw_g_fam.dlg.json new file mode 100644 index 0000000..5be0aae --- /dev/null +++ b/src/module/dlg/nw_g_fam.dlg.json @@ -0,0 +1,23412 @@ +{ + "__data_type": "DLG ", + "DelayEntry": { + "type": "dword", + "value": 0 + }, + "DelayReply": { + "type": "dword", + "value": 0 + }, + "EndConverAbort": { + "type": "resref", + "value": "" + }, + "EndConversation": { + "type": "resref", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 193 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_scout" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 192 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_identify" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 191 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "nw_d2_intl" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "nw_d2_intl" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What do you require of me ?", + "id": 58490 + } + } + }, + { + "__struct_id": 1, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58491 + } + } + }, + { + "__struct_id": 2, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58492 + } + } + }, + { + "__struct_id": 3, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58493 + } + } + }, + { + "__struct_id": 4, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58494 + } + } + }, + { + "__struct_id": 5, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58495 + } + } + }, + { + "__struct_id": 6, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58496 + } + } + }, + { + "__struct_id": 7, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58497 + } + } + }, + { + "__struct_id": 8, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58498 + } + } + }, + { + "__struct_id": 9, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58499 + } + } + }, + { + "__struct_id": 10, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58500 + } + } + }, + { + "__struct_id": 11, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58501 + } + } + }, + { + "__struct_id": 12, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st-11" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58502 + } + } + }, + { + "__struct_id": 13, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st-11" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58503 + } + } + }, + { + "__struct_id": 14, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58506 + } + } + }, + { + "__struct_id": 15, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58507 + } + } + }, + { + "__struct_id": 16, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58508 + } + } + }, + { + "__struct_id": 17, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58509 + } + } + }, + { + "__struct_id": 18, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_12" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58504 + } + } + }, + { + "__struct_id": 19, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58505 + } + } + }, + { + "__struct_id": 20, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 141 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 59 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + }, + { + "__struct_id": 7, + "Key": { + "type": "cexostring", + "value": "nClass8" + }, + "Value": { + "type": "cexostring", + "value": "46" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "nw_d2_intl" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What would you like me to do, my ?", + "id": 58510 + } + } + }, + { + "__struct_id": 21, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_has_assoc" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Companion" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_assoc" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Familiar" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x2_hen_tomishad3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 21 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "30" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "174" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "175" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "176" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 17 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "177" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "179" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 15 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "180" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 14 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "181" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "182" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "178" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What would you have me summon?" + } + } + }, + { + "__struct_id": 22, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "You sure?", + "id": 87721 + } + } + }, + { + "__struct_id": 23, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 58 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 48 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 38 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What would you like to discuss about my defensive spells?", + "id": 88866 + } + } + }, + { + "__struct_id": 24, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 37 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 36 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "x2_d1_targetall" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 25, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 47 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 46 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 45 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 44 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 43 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 42 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 41 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 40 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "x2_d1_targetall" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 39 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 26, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 57 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 54 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 53 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 52 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 51 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 50 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "x2_d1_targetall" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 49 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 27, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 140 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 139 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 130 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "13" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 129 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "21" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 128 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "419" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 127 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "519" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 126 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "38" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 125 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "41" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 124 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "42" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 123 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "354" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 122 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 121 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "49" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 120 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "50" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 119 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "369" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 116 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 15, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "418" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 115 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 16, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "121" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 114 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 17, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "377" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 113 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 18, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "356" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 112 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 19, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 111 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 20, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "120" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 110 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 21, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "65" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 109 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 22, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "67" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 108 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 23, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "109" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 107 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 24, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "70" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 106 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 25, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "443" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 105 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 26, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "73" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 104 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 27, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "74" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 103 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 28, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "78" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 102 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 29, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "88" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 101 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 30, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "90" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 100 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 31, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "92" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 99 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 32, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "93" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 98 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 33, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "94" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 97 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 34, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "95" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 96 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 35, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "97" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 95 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 36, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "99" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 94 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 37, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "100" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 93 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 38, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "102" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 92 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 39, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "108" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 91 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 40, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "113" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 90 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 41, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "117" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 89 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 42, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "119" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 88 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 43, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "525" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 87 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 44, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "126" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 86 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 45, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "355" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 85 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 46, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "133" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 84 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 47, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "134" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 83 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 48, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "137" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 82 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 49, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "321" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 81 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 50, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "141" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 80 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 51, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "374" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 79 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 52, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "145" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 78 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 53, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "146" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 77 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 54, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "147" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 76 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 55, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "148" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 75 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 56, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "149" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 74 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 57, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "150" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 73 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 58, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "151" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 72 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 59, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "152" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 71 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 60, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "154" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 70 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 61, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "157" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 69 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 62, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "159" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 68 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 63, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "417" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 67 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 64, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "450" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 66 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 65, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "169" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 65 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 66, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "168" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 64 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 67, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "172" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 63 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 68, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "186" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 62 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 69, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "365" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 70, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "441" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 71, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What you want me to cast?", + "id": 87720 + } + } + }, + { + "__struct_id": 28, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 118 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 117 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "You sure?", + "id": 87721 + } + } + }, + { + "__struct_id": 29, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 138 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 137 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 136 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 135 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 134 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 133 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 132 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 131 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Okay. Who shoulds I cast it on?", + "id": 87722 + } + } + }, + { + "__struct_id": 30, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 150 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 149 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 148 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 147 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 146 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 145 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 144 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 143 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 142 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And who should be the target of my healing?", + "id": 87722 + } + } + }, + { + "__struct_id": 31, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 180 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 179 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 178 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_pickuploot" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 177 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 170 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 159 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 158 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 157 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 153 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "nw_d2_intl" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What tactic would you like me to change, ?" + } + } + }, + { + "__struct_id": 32, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 156 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 155 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 154 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " My benignant , how can I change my actions?\"" + } + } + }, + { + "__struct_id": 33, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 169 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 168 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 167 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 166 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 165 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 164 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_cntrspell" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 163 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_cntrspell" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 162 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 161 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 160 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Almighty , how shall I use magic in combat?" + } + } + }, + { + "__struct_id": 34, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 176 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 175 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 174 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 173 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 172 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 171 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "nw_d2_intl" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Let me know when to heal, all knowning .", + "id": 55427 + } + } + }, + { + "__struct_id": 35, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_defensive" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 189 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_ambusher" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_ranged" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 187 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_peaceful" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 186 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_taunt" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 185 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_cntrspell" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 184 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 183 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 182 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 181 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "nw_d2_intl" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Oh powerful ! How would you like to change my tactics?" + } + } + }, + { + "__struct_id": 36, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 194 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 63861 + } + } + }, + { + "__struct_id": 37, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 195 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 63862 + } + } + }, + { + "__struct_id": 38, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 63863 + } + } + }, + { + "__struct_id": 39, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58520 + } + } + } + ] + }, + "NumWords": { + "type": "dword", + "value": 1302 + }, + "PreventZoomIn": { + "type": "byte", + "value": 1 + }, + "ReplyList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58472 + } + } + }, + { + "__struct_id": 1, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58473 + } + } + }, + { + "__struct_id": 2, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58474 + } + } + }, + { + "__struct_id": 3, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "nw_s0_heal" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58475 + } + } + }, + { + "__struct_id": 4, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_04" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 17 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 15 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 14 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58477 + } + } + }, + { + "__struct_id": 5, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_11" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58476 + } + } + }, + { + "__struct_id": 6, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58478 + } + } + }, + { + "__struct_id": 7, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change how you are doing things.", + "id": 58479 + } + } + }, + { + "__struct_id": 8, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58480 + } + } + }, + { + "__struct_id": 9, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58481 + } + } + }, + { + "__struct_id": 10, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 21 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to summon something if you can." + } + } + }, + { + "__struct_id": 11, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "178" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IX.", + "id": 88353 + } + } + }, + { + "__struct_id": 12, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "182" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VIII.", + "id": 88354 + } + } + }, + { + "__struct_id": 13, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "181" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VII.", + "id": 88355 + } + } + }, + { + "__struct_id": 14, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "180" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VI.", + "id": 88356 + } + } + }, + { + "__struct_id": 15, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "179" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature V.", + "id": 88358 + } + } + }, + { + "__struct_id": 16, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "177" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IV.", + "id": 88358 + } + } + }, + { + "__struct_id": 17, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "176" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature III.", + "id": 88359 + } + } + }, + { + "__struct_id": 18, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "175" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature II.", + "id": 88360 + } + } + }, + { + "__struct_id": 19, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "174" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature I.", + "id": 88361 + } + } + }, + { + "__struct_id": 20, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "30" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Create Undead.", + "id": 88425 + } + } + }, + { + "__struct_id": 21, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Animate Dead.", + "id": 88446 + } + } + }, + { + "__struct_id": 22, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, I've changed my mind.", + "id": 88415 + } + } + }, + { + "__struct_id": 23, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes, go ahead.", + "id": 88416 + } + } + }, + { + "__struct_id": 24, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_hen_tomishad4" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Shadow." + } + } + }, + { + "__struct_id": 25, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Familiar" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_summon_assoc" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Your Familiar." + } + } + }, + { + "__struct_id": 26, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Companion" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_summon_assoc" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Your Companion." + } + } + }, + { + "__struct_id": 27, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let us talk about your defensive spells.", + "id": 89061 + } + } + }, + { + "__struct_id": 28, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your defensive spells.", + "id": 89063 + } + } + }, + { + "__struct_id": 29, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 30, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 31, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 32, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 33, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 34, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 35, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 36, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 37, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 38, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your long duration defensive spells.", + "id": 89064 + } + } + }, + { + "__struct_id": 39, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 40, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 41, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 42, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 43, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 44, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 45, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 46, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 47, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 48, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your short duration defensive spells.", + "id": 89065 + } + } + }, + { + "__struct_id": 49, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 50, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 51, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 52, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 53, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 54, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 55, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 56, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 57, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 58, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast long duration spells after resting." + } + } + }, + { + "__struct_id": 59, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a spell.", + "id": 88348 + } + } + }, + { + "__struct_id": 60, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "441" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Wounding Whispers.", + "id": 88350 + } + } + }, + { + "__struct_id": 61, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "365" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ultravision.", + "id": 88351 + } + } + }, + { + "__struct_id": 62, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "186" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "True Seeing.", + "id": 88352 + } + } + }, + { + "__struct_id": 63, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "172" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stoneskin.", + "id": 88362 + } + } + }, + { + "__struct_id": 64, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "168" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance.", + "id": 88363 + } + } + }, + { + "__struct_id": 65, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "169" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Mantle.", + "id": 88364 + } + } + }, + { + "__struct_id": 66, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "450" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield of Faith.", + "id": 88365 + } + } + }, + { + "__struct_id": 67, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "417" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield.", + "id": 88366 + } + } + }, + { + "__struct_id": 68, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "159" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shadow Shield.", + "id": 88367 + } + } + }, + { + "__struct_id": 69, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "157" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "See Invisibility.", + "id": 88368 + } + } + }, + { + "__struct_id": 70, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "154" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Sanctuary.", + "id": 88369 + } + } + }, + { + "__struct_id": 71, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "152" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Restoration.", + "id": 88370 + } + } + }, + { + "__struct_id": 72, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "151" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resistance.", + "id": 88371 + } + } + }, + { + "__struct_id": 73, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "150" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resist Elements.", + "id": 88372 + } + } + }, + { + "__struct_id": 74, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "149" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Paralysis.", + "id": 88373 + } + } + }, + { + "__struct_id": 75, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "148" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Fear.", + "id": 88374 + } + } + }, + { + "__struct_id": 76, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "147" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Disease.", + "id": 88375 + } + } + }, + { + "__struct_id": 77, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "146" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Curse.", + "id": 88376 + } + } + }, + { + "__struct_id": 78, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "145" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Blindness/Deafness.", + "id": 88377 + } + } + }, + { + "__struct_id": 79, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "374" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Regenerate.", + "id": 88378 + } + } + }, + { + "__struct_id": 80, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "141" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Spells.", + "id": 88379 + } + } + }, + { + "__struct_id": 81, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "321" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Evil." + } + } + }, + { + "__struct_id": 82, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "137" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Elements.", + "id": 88380 + } + } + }, + { + "__struct_id": 83, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "134" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Premonition.", + "id": 88381 + } + } + }, + { + "__struct_id": 84, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "133" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Prayer.", + "id": 88382 + } + } + }, + { + "__struct_id": 85, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "355" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Owl's Wisdom.", + "id": 88383 + } + } + }, + { + "__struct_id": 86, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "126" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Neutralize poison.", + "id": 88384 + } + } + }, + { + "__struct_id": 87, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "525" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Monstrous Regeneration.", + "id": 88385 + } + } + }, + { + "__struct_id": 88, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "119" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Minor Globe of Invulnerability.", + "id": 88386 + } + } + }, + { + "__struct_id": 89, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "117" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mind Blank.", + "id": 88387 + } + } + }, + { + "__struct_id": 90, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "113" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mass Haste.", + "id": 88388 + } + } + }, + { + "__struct_id": 91, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "108" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Magical Vestment.", + "id": 88389 + } + } + }, + { + "__struct_id": 92, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "102" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mage Armor.", + "id": 88390 + } + } + }, + { + "__struct_id": 93, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "100" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Light.", + "id": 88391 + } + } + }, + { + "__struct_id": 94, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "99" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Spell Mantle.", + "id": 88392 + } + } + }, + { + "__struct_id": 95, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "97" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Restoration.", + "id": 88393 + } + } + }, + { + "__struct_id": 96, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "95" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Mind Blank", + "id": 88394 + } + } + }, + { + "__struct_id": 97, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "94" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Dispel.", + "id": 88395 + } + } + }, + { + "__struct_id": 98, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "93" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Knock.", + "id": 88396 + } + } + }, + { + "__struct_id": 99, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "92" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility Sphere.", + "id": 88397 + } + } + }, + { + "__struct_id": 100, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "90" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility", + "id": 88398 + } + } + }, + { + "__struct_id": 101, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "88" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Improved Invisibility.", + "id": 88399 + } + } + }, + { + "__struct_id": 102, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "78" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Haste.", + "id": 88400 + } + } + }, + { + "__struct_id": 103, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "74" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Stoneskin.", + "id": 88401 + } + } + }, + { + "__struct_id": 104, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "73" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Spell Mantle.", + "id": 88402 + } + } + }, + { + "__struct_id": 105, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "443" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Sanctuary.", + "id": 88403 + } + } + }, + { + "__struct_id": 106, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "70" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Restoration.", + "id": 88404 + } + } + }, + { + "__struct_id": 107, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "109" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Magic Weapon.", + "id": 88405 + } + } + }, + { + "__struct_id": 108, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "67" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Dispelling.", + "id": 88406 + } + } + }, + { + "__struct_id": 109, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "65" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Globe of Invulnerability.", + "id": 88407 + } + } + }, + { + "__struct_id": 110, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "120" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ghostly Visage.", + "id": 88408 + } + } + }, + { + "__struct_id": 111, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Freedom of Movement.", + "id": 88409 + } + } + }, + { + "__struct_id": 112, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "356" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Fox's Cunning", + "id": 88410 + } + } + }, + { + "__struct_id": 113, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "377" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Find Traps.", + "id": 88411 + } + } + }, + { + "__struct_id": 114, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "121" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ethereal Visage.", + "id": 88412 + } + } + }, + { + "__struct_id": 115, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "418" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Entropic Shield.", + "id": 88413 + } + } + }, + { + "__struct_id": 116, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "369" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Energy Buffer.", + "id": 88414 + } + } + }, + { + "__struct_id": 117, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, I've changed my mind.", + "id": 88415 + } + } + }, + { + "__struct_id": 118, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes, go ahead.", + "id": 88416 + } + } + }, + { + "__struct_id": 119, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "50" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endure Elements.", + "id": 88417 + } + } + }, + { + "__struct_id": 120, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "49" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endurance.", + "id": 88418 + } + } + }, + { + "__struct_id": 121, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Elemental Shield.", + "id": 88419 + } + } + }, + { + "__struct_id": 122, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "354" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Eagle's Splendour.", + "id": 88420 + } + } + }, + { + "__struct_id": 123, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "42" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Power.", + "id": 88421 + } + } + }, + { + "__struct_id": 124, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "41" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Dispel Magic.", + "id": 88422 + } + } + }, + { + "__struct_id": 125, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "38" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Ward.", + "id": 88423 + } + } + }, + { + "__struct_id": 126, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "519" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Armor.", + "id": 88424 + } + } + }, + { + "__struct_id": 127, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "419" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Continual Flame.", + "id": 88426 + } + } + }, + { + "__struct_id": 128, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "21" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Clarity.", + "id": 88427 + } + } + }, + { + "__struct_id": 129, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "13" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cat's Grace.", + "id": 88428 + } + } + }, + { + "__struct_id": 130, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bull's Strength.", + "id": 88429 + } + } + }, + { + "__struct_id": 131, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 132, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 133, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 134, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 135, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 136, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 137, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 138, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 139, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bless.", + "id": 88445 + } + } + }, + { + "__struct_id": 140, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Aid.", + "id": 88447 + } + } + }, + { + "__struct_id": 141, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a healing spell." + } + } + }, + { + "__struct_id": 142, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Heal up the whole party.", + "id": 88431 + } + } + }, + { + "__struct_id": 143, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 144, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 145, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 146, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 147, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 148, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 149, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 150, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 151, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want to discuss your tactics." + } + } + }, + { + "__struct_id": 152, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets talk about something else." + } + } + }, + { + "__struct_id": 153, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Object" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets discuss how you deal with objects." + } + } + }, + { + "__struct_id": 154, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Bash" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Object" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your bashing tactics.", + "id": 96501 + } + } + }, + { + "__struct_id": 155, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Locks" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Object" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your lock picking tactics.", + "id": 96501 + } + } + }, + { + "__struct_id": 156, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Traps" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Object" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your trap tactics.", + "id": 96502 + } + } + }, + { + "__struct_id": 157, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Search" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change your search tactics." + } + } + }, + { + "__struct_id": 158, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Stealth" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change your stealth tactics." + } + } + }, + { + "__struct_id": 159, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let's change how you use magic in combat." + } + } + }, + { + "__struct_id": 160, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicItems" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you use magic items or not.", + "id": 96498 + } + } + }, + { + "__struct_id": 161, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Dispel" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your dispel tactics.", + "id": 96500 + } + } + }, + { + "__struct_id": 162, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BasicTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stop countering the enemies spells.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 163, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "CounterSpell" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to counter spell the enemy!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 164, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BuffFirst" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change who you cast defensive spells on first.", + "id": 96500 + } + } + }, + { + "__struct_id": 165, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "OffensiveCasting" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast offensive spells.", + "id": 96498 + } + } + }, + { + "__struct_id": 166, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "DefensiveCasting" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast defensive spells.", + "id": 96498 + } + } + }, + { + "__struct_id": 167, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "NoMagic" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change how you use magic spells in combat.", + "id": 96498 + } + } + }, + { + "__struct_id": 168, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your magic more in combat." + } + } + }, + { + "__struct_id": 169, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your magic less in combat." + } + } + }, + { + "__struct_id": 170, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change when you decide to heal me.", + "id": 54985 + } + } + }, + { + "__struct_id": 171, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealOutPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Increase the health an one needs for you to heal out of combat.", + "id": 54991 + } + } + }, + { + "__struct_id": 172, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealOutMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Reduce the health an one needs for you to heal out of combat.", + "id": 54991 + } + } + }, + { + "__struct_id": 173, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealInPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Increase the health an one needs for you to heal during combat.", + "id": 54991 + } + } + }, + { + "__struct_id": 174, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealInMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Reduce the health any one needs for you to heal during combat.", + "id": 54991 + } + } + }, + { + "__struct_id": 175, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealSelf" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you heal yourself.", + "id": 54991 + } + } + }, + { + "__struct_id": 176, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealAllies" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you heal any allies.", + "id": 54991 + } + } + }, + { + "__struct_id": 177, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Pickup" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change if you retrieve items and gold." + } + } + }, + { + "__struct_id": 178, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "FollowFarther" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Follow farther away from me.", + "id": 96508 + } + } + }, + { + "__struct_id": 179, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "FollowCloser" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Follow closer to me.", + "id": 96508 + } + } + }, + { + "__struct_id": 180, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets talk about your tactics in combat." + } + } + }, + { + "__struct_id": 181, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AttackTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you fight every opponent during combat." + } + } + }, + { + "__struct_id": 182, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AtkAssociates" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your tactics against familiars, companions, and summons.", + "id": 62531 + } + } + }, + { + "__struct_id": 183, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Ranged" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your ranged combat tactics.", + "id": 62531 + } + } + }, + { + "__struct_id": 184, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "CounterSpell" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to counter spell the enemy!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 185, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Taunt" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to taunt the enemy!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 186, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "PeaceTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Don't engage in combat.", + "2": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"", + "3": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"" + } + } + }, + { + "__struct_id": 187, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "RangedTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use agressive ranged tactics, stay out of melee.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 188, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AmbushTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use ambush tactics, hide and then strike.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 189, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "DefensiveTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use defensive tactics protect yourself.", + "id": 62532 + } + } + }, + { + "__struct_id": 190, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BasicTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use basic combat tactics.", + "id": 62531 + } + } + }, + { + "__struct_id": 191, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x1_hen_identify" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can you identify my equipment?", + "id": 88341 + } + } + }, + { + "__struct_id": 192, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Scout" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I would like you to scout the area." + } + } + }, + { + "__struct_id": 193, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 36 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 63860 + } + } + }, + { + "__struct_id": 194, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 37 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": {} + } + }, + { + "__struct_id": 195, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 38 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": {} + } + } + ] + }, + "StartingList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_01" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 39 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 0 + } + } + ] + } +} diff --git a/src/module/dlg/oc_ai_henchmen.dlg.json b/src/module/dlg/oc_ai_henchmen.dlg.json new file mode 100644 index 0000000..d9ca1b6 --- /dev/null +++ b/src/module/dlg/oc_ai_henchmen.dlg.json @@ -0,0 +1,27180 @@ +{ + "__data_type": "DLG ", + "DelayEntry": { + "type": "dword", + "value": 0 + }, + "DelayReply": { + "type": "dword", + "value": 0 + }, + "EndConverAbort": { + "type": "resref", + "value": "" + }, + "EndConversation": { + "type": "resref", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 38 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_scout" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 247 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_identify" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 246 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_open_inven" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 242 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 202 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 191 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 109 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 77 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + }, + { + "__struct_id": 7, + "Key": { + "type": "cexostring", + "value": "nClass8" + }, + "Value": { + "type": "cexostring", + "value": "46" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 62 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_hen_leave" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_convo" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What would you like to discuss?" + } + } + }, + { + "__struct_id": 1, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Are you sure you want to do that?" + } + } + }, + { + "__struct_id": 2, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_polymorph" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "305" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "304" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 50 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "898" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 44 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "900" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 40 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "901" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 36 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "903" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "902" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "1060" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "1061" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "257" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "x2_d2_haslayon" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "x2_d1_dmight" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "x2_d1_dshield" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let's see what I can do...", + "id": 95904 + } + } + }, + { + "__struct_id": 3, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 17 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 15 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 14 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And who should be the target of my healing?", + "id": 87722 + } + } + }, + { + "__struct_id": 4, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 21 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 5, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 6, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 7, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 8, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 39 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 38 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 37 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 9, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 43 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 42 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 41 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 10, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 49 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 48 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 47 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 46 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 45 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 11, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 54 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 53 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 52 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 51 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 12, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 59 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 58 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 57 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 13, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_has_assoc" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Companion" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 76 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_assoc" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Familiar" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 75 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x2_hen_tomishad3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 74 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 73 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "30" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 72 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "174" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 71 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "175" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 70 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "176" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 69 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "177" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 68 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "179" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 67 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "180" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 66 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "181" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 65 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "182" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 64 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "178" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 63 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 203 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 15, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What would you have me summon?" + } + } + }, + { + "__struct_id": 14, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 108 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 98 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 88 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 78 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 203 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What would you like to discuss about my defensive spells?", + "id": 88866 + } + } + }, + { + "__struct_id": 15, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 87 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 86 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 85 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 84 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 83 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 82 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 81 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 80 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 79 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 203 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 16, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 97 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 96 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 95 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 94 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 93 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 92 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 91 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 90 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 89 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 203 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 17, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 107 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 106 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 105 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 104 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 103 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 102 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 101 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 100 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 99 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 203 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 18, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 189 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 180 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "13" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 179 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "21" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 178 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "419" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 177 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "519" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 176 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "38" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 175 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "41" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 174 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "42" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 173 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "354" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 172 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 171 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "49" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 170 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "50" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 169 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "369" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 166 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 15, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "418" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 165 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 16, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "121" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 164 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 17, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "377" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 163 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 18, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "356" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 162 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 19, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 161 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 20, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "120" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 160 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 21, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "65" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 159 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 22, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "67" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 158 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 23, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "109" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 157 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 24, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "70" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 156 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 25, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "443" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 155 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 26, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "73" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 154 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 27, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "74" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 153 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 28, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "78" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 29, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "88" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 30, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "90" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 150 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 31, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "92" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 149 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 32, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "93" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 148 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 33, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "94" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 147 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 34, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "95" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 146 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 35, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "97" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 145 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 36, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "99" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 144 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 37, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "100" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 143 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 38, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "102" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 142 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 39, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "108" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 141 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 40, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "113" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 140 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 41, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "117" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 139 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 42, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "119" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 138 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 43, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "525" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 137 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 44, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "126" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 136 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 45, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "355" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 135 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 46, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "133" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 134 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 47, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "134" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 133 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 48, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "137" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 132 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 49, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "321" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 131 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 50, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "141" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 130 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 51, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "374" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 129 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 52, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "145" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 128 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 53, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "146" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 127 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 54, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "147" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 126 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 55, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "148" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 125 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 56, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "149" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 124 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 57, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "150" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 123 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 58, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "151" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 122 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 59, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "152" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 121 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 60, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "154" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 120 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 61, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "157" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 119 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 62, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "159" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 118 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 63, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "417" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 117 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 64, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "450" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 116 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 65, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "169" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 115 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 66, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "168" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 114 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 67, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "172" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 113 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 68, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "186" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 112 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 69, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "365" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 111 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 70, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "441" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 110 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 71, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 192 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What you want me to cast?", + "id": 87720 + } + } + }, + { + "__struct_id": 19, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 168 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 167 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "You sure?", + "id": 87721 + } + } + }, + { + "__struct_id": 20, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 187 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 186 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 185 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 184 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 183 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 182 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 181 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 192 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Okay. Who shoulds I cast it on?", + "id": 87722 + } + } + }, + { + "__struct_id": 21, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 201 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 200 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 198 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 197 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 196 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 195 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 194 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 193 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 192 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And who should be the target of my healing?", + "id": 87722 + } + } + }, + { + "__struct_id": 22, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 231 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 230 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 229 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_pickuploot" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 228 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 221 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 210 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 209 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 208 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 204 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 203 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What do you have in mind?" + } + } + }, + { + "__struct_id": 23, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_skillrank" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSkill" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nRank" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 207 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_skillrank" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSkill" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nRank" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 206 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 205 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 202 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Should I do something else?" + } + } + }, + { + "__struct_id": 24, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 220 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 219 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_a_magic_m" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nMode" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 218 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 217 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 216 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 215 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_cntrspell" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 214 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_cntrspell" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 213 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 212 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 211 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 202 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " How would you like me to use magic in combat?" + } + } + }, + { + "__struct_id": 25, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 227 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 226 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 225 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 224 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 223 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 222 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 202 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " When do you think I should heal our allies?", + "id": 55427 + } + } + }, + { + "__struct_id": 26, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 241 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_defensive" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 240 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_ambusher" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 239 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_ranged" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 238 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_peaceful" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 237 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_taunt" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 236 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_cntrspell" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 235 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 234 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 233 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 232 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 202 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What do you think is the best tactic?" + } + } + }, + { + "__struct_id": 27, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 245 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 244 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 243 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 203 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Sure, what would you like me to do?" + } + } + }, + { + "__struct_id": 28, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 29 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 249 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 248 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Wel-met. I think we should work together, what do you say?" + } + } + } + ] + }, + "NumWords": { + "type": "dword", + "value": 1148 + }, + "PreventZoomIn": { + "type": "byte", + "value": 1 + }, + "ReplyList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "That will be all for now." + } + } + }, + { + "__struct_id": 1, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_get_convo" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let us talk about something completely different." + } + } + }, + { + "__struct_id": 2, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "We should part ways." + } + } + }, + { + "__struct_id": 3, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, I like having you around." + } + } + }, + { + "__struct_id": 4, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_fire_henchmen" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes I'm sure, Perhapse we'll meet again." + } + } + }, + { + "__struct_id": 5, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Speaking" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change how much you speak.", + "id": 96511 + } + } + }, + { + "__struct_id": 6, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can you use a special ability?", + "id": 96382 + } + } + }, + { + "__struct_id": 7, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d2_dshield" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Shield.", + "id": 96383 + } + } + }, + { + "__struct_id": 8, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d2_dmight" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Might.", + "id": 96384 + } + } + }, + { + "__struct_id": 9, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lay on Hands.", + "id": 96385 + } + } + }, + { + "__struct_id": 10, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I've changed my mind.", + "id": 88430 + } + } + }, + { + "__struct_id": 11, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 12, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 13, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 14, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 15, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 16, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 17, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 18, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 19, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "257" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_use_feat" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your bard song.", + "id": 88342 + } + } + }, + { + "__struct_id": 20, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your construction shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 21, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "740" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Iron Golem" + } + } + }, + { + "__struct_id": 22, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "739" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Demon Flesh Golem" + } + } + }, + { + "__struct_id": 23, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "738" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stone Golem" + } + } + }, + { + "__struct_id": 24, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your outsider shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 25, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "735" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Slaad" + } + } + }, + { + "__struct_id": 26, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "734" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Rakshasa" + } + } + }, + { + "__struct_id": 27, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "733" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Azer" + } + } + }, + { + "__struct_id": 28, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your humanoid shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 29, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "684" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Kobold Assasin" + } + } + }, + { + "__struct_id": 30, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "683" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lizard folk" + } + } + }, + { + "__struct_id": 31, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "682" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Drow" + } + } + }, + { + "__struct_id": 32, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your greater wild shape V.", + "id": 88342 + } + } + }, + { + "__struct_id": 33, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "691" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mindflayer" + } + } + }, + { + "__struct_id": 34, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "679" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Medusa" + } + } + }, + { + "__struct_id": 35, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "694" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Dire Tiger" + } + } + }, + { + "__struct_id": 36, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your greater wild shape III.", + "id": 88342 + } + } + }, + { + "__struct_id": 37, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "674" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Manticore" + } + } + }, + { + "__struct_id": 38, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "673" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Drider" + } + } + }, + { + "__struct_id": 39, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "670" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Basilisk" + } + } + }, + { + "__struct_id": 40, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your greater wild shape II.", + "id": 88342 + } + } + }, + { + "__struct_id": 41, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "680" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Minotaur" + } + } + }, + { + "__struct_id": 42, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "678" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Gargoyle" + } + } + }, + { + "__struct_id": 43, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "672" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Harpy" + } + } + }, + { + "__struct_id": 44, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your greater wild shape I.", + "id": 88342 + } + } + }, + { + "__struct_id": 45, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "662" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Green Wyrmling" + } + } + }, + { + "__struct_id": 46, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "661" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "White Wyrmling" + } + } + }, + { + "__struct_id": 47, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "660" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Black Wyrmling" + } + } + }, + { + "__struct_id": 48, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "659" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Blue Wyrmling" + } + } + }, + { + "__struct_id": 49, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "658" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Red Wyrmling" + } + } + }, + { + "__struct_id": 50, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your elemental shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 51, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "398" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Water" + } + } + }, + { + "__struct_id": 52, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "397" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Fire" + } + } + }, + { + "__struct_id": 53, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "399" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Earth" + } + } + }, + { + "__struct_id": 54, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "400" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Air" + } + } + }, + { + "__struct_id": 55, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your wild shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 56, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "405" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Badger" + } + } + }, + { + "__struct_id": 57, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "404" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Boar" + } + } + }, + { + "__struct_id": 58, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "403" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Wolf" + } + } + }, + { + "__struct_id": 59, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "402" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Panther" + } + } + }, + { + "__struct_id": 60, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "401" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bear" + } + } + }, + { + "__struct_id": 61, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nEffectType" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_remove_effect" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Transform back into your natural form.", + "id": 96384 + } + } + }, + { + "__struct_id": 62, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to summon something if you can." + } + } + }, + { + "__struct_id": 63, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "178" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IX.", + "id": 88353 + } + } + }, + { + "__struct_id": 64, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "182" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VIII.", + "id": 88354 + } + } + }, + { + "__struct_id": 65, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "181" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VII.", + "id": 88355 + } + } + }, + { + "__struct_id": 66, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "180" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VI.", + "id": 88356 + } + } + }, + { + "__struct_id": 67, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "179" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature V.", + "id": 88358 + } + } + }, + { + "__struct_id": 68, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "177" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IV.", + "id": 88358 + } + } + }, + { + "__struct_id": 69, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "176" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature III.", + "id": 88359 + } + } + }, + { + "__struct_id": 70, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "175" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature II.", + "id": 88360 + } + } + }, + { + "__struct_id": 71, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "174" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature I.", + "id": 88361 + } + } + }, + { + "__struct_id": 72, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "30" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Create Undead.", + "id": 88425 + } + } + }, + { + "__struct_id": 73, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Animate Dead.", + "id": 88446 + } + } + }, + { + "__struct_id": 74, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_hen_tomishad4" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Shadow." + } + } + }, + { + "__struct_id": 75, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Familiar" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_summon_assoc" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Your Familiar." + } + } + }, + { + "__struct_id": 76, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Companion" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_summon_assoc" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Your Companion." + } + } + }, + { + "__struct_id": 77, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 14 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let us talk about your defensive spells.", + "id": 89061 + } + } + }, + { + "__struct_id": 78, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 15 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your defensive spells.", + "id": 89063 + } + } + }, + { + "__struct_id": 79, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 80, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 81, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 82, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 83, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 84, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 85, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 86, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 87, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 88, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your long duration defensive spells.", + "id": 89064 + } + } + }, + { + "__struct_id": 89, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 90, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 91, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 92, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 93, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 94, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 95, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 96, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 97, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 98, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 17 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your short duration defensive spells.", + "id": 89065 + } + } + }, + { + "__struct_id": 99, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 100, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 101, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 102, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 103, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 104, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 105, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 106, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 107, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 108, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 14 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast long duration spells after resting." + } + } + }, + { + "__struct_id": 109, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a spell.", + "id": 88348 + } + } + }, + { + "__struct_id": 110, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "441" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Wounding Whispers.", + "id": 88350 + } + } + }, + { + "__struct_id": 111, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "365" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ultravision.", + "id": 88351 + } + } + }, + { + "__struct_id": 112, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "186" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "True Seeing.", + "id": 88352 + } + } + }, + { + "__struct_id": 113, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "172" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stoneskin.", + "id": 88362 + } + } + }, + { + "__struct_id": 114, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "168" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance.", + "id": 88363 + } + } + }, + { + "__struct_id": 115, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "169" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Mantle.", + "id": 88364 + } + } + }, + { + "__struct_id": 116, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "450" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield of Faith.", + "id": 88365 + } + } + }, + { + "__struct_id": 117, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "417" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield.", + "id": 88366 + } + } + }, + { + "__struct_id": 118, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "159" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shadow Shield.", + "id": 88367 + } + } + }, + { + "__struct_id": 119, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "157" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "See Invisibility.", + "id": 88368 + } + } + }, + { + "__struct_id": 120, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "154" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Sanctuary.", + "id": 88369 + } + } + }, + { + "__struct_id": 121, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "152" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Restoration.", + "id": 88370 + } + } + }, + { + "__struct_id": 122, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "151" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resistance.", + "id": 88371 + } + } + }, + { + "__struct_id": 123, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "150" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resist Elements.", + "id": 88372 + } + } + }, + { + "__struct_id": 124, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "149" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Paralysis.", + "id": 88373 + } + } + }, + { + "__struct_id": 125, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "148" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Fear.", + "id": 88374 + } + } + }, + { + "__struct_id": 126, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "147" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Disease.", + "id": 88375 + } + } + }, + { + "__struct_id": 127, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "146" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Curse.", + "id": 88376 + } + } + }, + { + "__struct_id": 128, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "145" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Blindness/Deafness.", + "id": 88377 + } + } + }, + { + "__struct_id": 129, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "374" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Regenerate.", + "id": 88378 + } + } + }, + { + "__struct_id": 130, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "141" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Spells.", + "id": 88379 + } + } + }, + { + "__struct_id": 131, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "321" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Evil." + } + } + }, + { + "__struct_id": 132, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "137" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Elements.", + "id": 88380 + } + } + }, + { + "__struct_id": 133, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "134" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Premonition.", + "id": 88381 + } + } + }, + { + "__struct_id": 134, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "133" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Prayer.", + "id": 88382 + } + } + }, + { + "__struct_id": 135, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "355" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Owl's Wisdom.", + "id": 88383 + } + } + }, + { + "__struct_id": 136, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "126" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Neutralize poison.", + "id": 88384 + } + } + }, + { + "__struct_id": 137, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "525" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Monstrous Regeneration.", + "id": 88385 + } + } + }, + { + "__struct_id": 138, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "119" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Minor Globe of Invulnerability.", + "id": 88386 + } + } + }, + { + "__struct_id": 139, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "117" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mind Blank.", + "id": 88387 + } + } + }, + { + "__struct_id": 140, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "113" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mass Haste.", + "id": 88388 + } + } + }, + { + "__struct_id": 141, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "108" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Magical Vestment.", + "id": 88389 + } + } + }, + { + "__struct_id": 142, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "102" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mage Armor.", + "id": 88390 + } + } + }, + { + "__struct_id": 143, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "100" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Light.", + "id": 88391 + } + } + }, + { + "__struct_id": 144, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "99" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Spell Mantle.", + "id": 88392 + } + } + }, + { + "__struct_id": 145, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "97" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Restoration.", + "id": 88393 + } + } + }, + { + "__struct_id": 146, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "95" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Mind Blank", + "id": 88394 + } + } + }, + { + "__struct_id": 147, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "94" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Dispel.", + "id": 88395 + } + } + }, + { + "__struct_id": 148, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "93" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Knock.", + "id": 88396 + } + } + }, + { + "__struct_id": 149, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "92" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility Sphere.", + "id": 88397 + } + } + }, + { + "__struct_id": 150, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "90" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility", + "id": 88398 + } + } + }, + { + "__struct_id": 151, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "88" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Improved Invisibility.", + "id": 88399 + } + } + }, + { + "__struct_id": 152, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "78" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Haste.", + "id": 88400 + } + } + }, + { + "__struct_id": 153, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "74" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Stoneskin.", + "id": 88401 + } + } + }, + { + "__struct_id": 154, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "73" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Spell Mantle.", + "id": 88402 + } + } + }, + { + "__struct_id": 155, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "443" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Sanctuary.", + "id": 88403 + } + } + }, + { + "__struct_id": 156, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "70" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Restoration.", + "id": 88404 + } + } + }, + { + "__struct_id": 157, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "109" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Magic Weapon.", + "id": 88405 + } + } + }, + { + "__struct_id": 158, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "67" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Dispelling.", + "id": 88406 + } + } + }, + { + "__struct_id": 159, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "65" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Globe of Invulnerability.", + "id": 88407 + } + } + }, + { + "__struct_id": 160, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "120" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ghostly Visage.", + "id": 88408 + } + } + }, + { + "__struct_id": 161, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Freedom of Movement.", + "id": 88409 + } + } + }, + { + "__struct_id": 162, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "356" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Fox's Cunning", + "id": 88410 + } + } + }, + { + "__struct_id": 163, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "377" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Find Traps.", + "id": 88411 + } + } + }, + { + "__struct_id": 164, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "121" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ethereal Visage.", + "id": 88412 + } + } + }, + { + "__struct_id": 165, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "418" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Entropic Shield.", + "id": 88413 + } + } + }, + { + "__struct_id": 166, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "369" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Energy Buffer.", + "id": 88414 + } + } + }, + { + "__struct_id": 167, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, I've changed my mind.", + "id": 88415 + } + } + }, + { + "__struct_id": 168, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes, go ahead.", + "id": 88416 + } + } + }, + { + "__struct_id": 169, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "50" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endure Elements.", + "id": 88417 + } + } + }, + { + "__struct_id": 170, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "49" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endurance.", + "id": 88418 + } + } + }, + { + "__struct_id": 171, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Elemental Shield.", + "id": 88419 + } + } + }, + { + "__struct_id": 172, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "354" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Eagle's Splendour.", + "id": 88420 + } + } + }, + { + "__struct_id": 173, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "42" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Power.", + "id": 88421 + } + } + }, + { + "__struct_id": 174, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "41" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Dispel Magic.", + "id": 88422 + } + } + }, + { + "__struct_id": 175, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "38" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Ward.", + "id": 88423 + } + } + }, + { + "__struct_id": 176, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "519" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Armor.", + "id": 88424 + } + } + }, + { + "__struct_id": 177, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "419" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Continual Flame.", + "id": 88426 + } + } + }, + { + "__struct_id": 178, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "21" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Clarity.", + "id": 88427 + } + } + }, + { + "__struct_id": 179, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "13" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cat's Grace.", + "id": 88428 + } + } + }, + { + "__struct_id": 180, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bull's Strength.", + "id": 88429 + } + } + }, + { + "__struct_id": 181, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 182, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 183, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 184, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 185, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 186, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 187, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 188, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 189, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bless.", + "id": 88445 + } + } + }, + { + "__struct_id": 190, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Aid.", + "id": 88447 + } + } + }, + { + "__struct_id": 191, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 21 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a healing spell." + } + } + }, + { + "__struct_id": 192, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I've changed my mind.", + "id": 88430 + } + } + }, + { + "__struct_id": 193, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Heal up the whole party.", + "id": 88431 + } + } + }, + { + "__struct_id": 194, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 195, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 196, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 197, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 198, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 199, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 200, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 201, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 202, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want to discuss how we can work together." + } + } + }, + { + "__struct_id": 203, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets talk about something else." + } + } + }, + { + "__struct_id": 204, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Objects" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets discuss how you deal with objects." + } + } + }, + { + "__struct_id": 205, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Bash" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Objects" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your bashing tactics.", + "id": 96507 + } + } + }, + { + "__struct_id": 206, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Locks" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Objects" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your lock picking tactics.", + "id": 96507 + } + } + }, + { + "__struct_id": 207, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Traps" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Objects" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your trap tactics.", + "id": 96502 + } + } + }, + { + "__struct_id": 208, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Search" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change your search tactics.", + "id": 96505 + } + } + }, + { + "__struct_id": 209, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Stealth" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change your stealth tactics.", + "id": 96505 + } + } + }, + { + "__struct_id": 210, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let's change how you use magic in combat." + } + } + }, + { + "__struct_id": 211, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicItems" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you use magic items or not.", + "id": 96498 + } + } + }, + { + "__struct_id": 212, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Dispel" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your dispel tactics.", + "id": 96500 + } + } + }, + { + "__struct_id": 213, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BasicTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stop countering the enemies spells.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 214, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "CounterSpell" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Counter the enemy spells!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 215, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BuffFirst" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change who you cast defensive spells on first.", + "id": 96500 + } + } + }, + { + "__struct_id": 216, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "OffensiveCasting" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast offensive spells.", + "id": 96498 + } + } + }, + { + "__struct_id": 217, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "DefensiveCasting" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast defensive spells.", + "id": 96498 + } + } + }, + { + "__struct_id": 218, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "NMagic" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change how you use magic spells in combat.", + "id": 96498 + } + } + }, + { + "__struct_id": 219, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your magic more in combat." + } + } + }, + { + "__struct_id": 220, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your magic less in combat." + } + } + }, + { + "__struct_id": 221, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change when you should heal.", + "id": 54985 + } + } + }, + { + "__struct_id": 222, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealOutPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Increase the health an one needs for you to heal out of combat.", + "id": 54990 + } + } + }, + { + "__struct_id": 223, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealOutMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Reduce the health an one needs for you to heal out of combat.", + "id": 54989 + } + } + }, + { + "__struct_id": 224, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealInPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Increase the health an one needs for you to heal during combat.", + "id": 54990 + } + } + }, + { + "__struct_id": 225, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealInMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Reduce the health any one needs for you to heal during combat.", + "id": 54989 + } + } + }, + { + "__struct_id": 226, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealSelf" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you heal yourself.", + "id": 54989 + } + } + }, + { + "__struct_id": 227, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealAllies" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you heal any allies.", + "id": 54989 + } + } + }, + { + "__struct_id": 228, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Pickup" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change if you pickup items and gold." + } + } + }, + { + "__struct_id": 229, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "FollowFarther" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Follow farther away from me.", + "id": 96510 + } + } + }, + { + "__struct_id": 230, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "FollowCloser" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Follow closer to me.", + "id": 96511 + } + } + }, + { + "__struct_id": 231, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets talk about your tactics in combat." + } + } + }, + { + "__struct_id": 232, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AttackTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you fight every opponent during combat.", + "2": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"", + "3": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"" + } + } + }, + { + "__struct_id": 233, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AtkAssociates" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your tactics against familiars, companions, and summons.", + "id": 62531 + } + } + }, + { + "__struct_id": 234, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Ranged" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your ranged combat tactics.", + "id": 62531 + } + } + }, + { + "__struct_id": 235, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "CounterSpell" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to counter spell the enemy!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 236, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Taunt" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to taunt the enemy!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 237, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "PeaceTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Don't engage in combat.", + "2": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"", + "3": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"" + } + } + }, + { + "__struct_id": 238, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "RangedTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use agressive ranged tactics, stay out of melee.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 239, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AmbushTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use ambush tactics, hide and then strike.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 240, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "DefensiveTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use defensive tactics to protect yourself.", + "id": 62532 + } + } + }, + { + "__struct_id": 241, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BasicTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your best judgement in combat.", + "id": 62531 + } + } + }, + { + "__struct_id": 242, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can we talk about your items?" + } + } + }, + { + "__struct_id": 243, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "GiveMagicItems" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Give me all the magical items in your inventory.", + "id": 96514 + } + } + }, + { + "__struct_id": 244, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "GiveUnIdentifiedItems" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Give me all your unidentified items.", + "id": 96514 + } + } + }, + { + "__struct_id": 245, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_hen_inven" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want to adjust your equipment.", + "id": 96514 + } + } + }, + { + "__struct_id": 246, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Identify" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can you identify our equipment?", + "id": 88341 + } + } + }, + { + "__struct_id": 247, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Scout" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I would like you to scout the area." + } + } + }, + { + "__struct_id": 248, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Not right now." + } + } + }, + { + "__struct_id": 249, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 45 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_get_henchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yea, thats a good idea." + } + } + } + ] + }, + "StartingList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_not_master" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 0 + } + } + ] + } +} diff --git a/src/module/dlg/rdg_pit.dlg.json b/src/module/dlg/rdg_pit.dlg.json new file mode 100644 index 0000000..8300b7c --- /dev/null +++ b/src/module/dlg/rdg_pit.dlg.json @@ -0,0 +1,475 @@ +{ + "__data_type": "DLG ", + "DelayEntry": { + "type": "dword", + "value": 0 + }, + "DelayReply": { + "type": "dword", + "value": 0 + }, + "EndConverAbort": { + "type": "resref", + "value": "nw_walk_wp" + }, + "EndConversation": { + "type": "resref", + "value": "nw_walk_wp" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "conv_hasrope" + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "You can make out a open area below" + } + } + }, + { + "__struct_id": 1, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "conv_issafe" + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "This is a pit leading below. Someone has fastened a rope here to make the climb down safe." + } + } + } + ] + }, + "NumWords": { + "type": "dword", + "value": 38 + }, + "PreventZoomIn": { + "type": "byte", + "value": 0 + }, + "ReplyList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "conv_jumpdown" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "[Jump In]" + } + } + }, + { + "__struct_id": 1, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "conv_issafe" + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "conv_userope" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "[Tie a rope here.]" + } + } + }, + { + "__struct_id": 2, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "[Leave it]" + } + } + }, + { + "__struct_id": 3, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "conv_takerope" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "[Take Rope]" + } + } + }, + { + "__struct_id": 4, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "conv_climbdown" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "[Climb Down]" + } + } + } + ] + }, + "StartingList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "conv_issafe" + }, + "Index": { + "type": "dword", + "value": 1 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "Index": { + "type": "dword", + "value": 0 + } + } + ] + } +} diff --git a/src/module/fac/repute.fac.json b/src/module/fac/repute.fac.json new file mode 100644 index 0000000..3f630c8 --- /dev/null +++ b/src/module/fac/repute.fac.json @@ -0,0 +1,388 @@ +{ + "__data_type": "FAC ", + "FactionList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "FactionGlobal": { + "type": "word", + "value": 1 + }, + "FactionName": { + "type": "cexostring", + "value": "PC" + }, + "FactionParentID": { + "type": "dword", + "value": 4294967295 + } + }, + { + "__struct_id": 1, + "FactionGlobal": { + "type": "word", + "value": 1 + }, + "FactionName": { + "type": "cexostring", + "value": "Hostile" + }, + "FactionParentID": { + "type": "dword", + "value": 4294967295 + } + }, + { + "__struct_id": 2, + "FactionGlobal": { + "type": "word", + "value": 1 + }, + "FactionName": { + "type": "cexostring", + "value": "Commoner" + }, + "FactionParentID": { + "type": "dword", + "value": 4294967295 + } + }, + { + "__struct_id": 3, + "FactionGlobal": { + "type": "word", + "value": 1 + }, + "FactionName": { + "type": "cexostring", + "value": "Merchant" + }, + "FactionParentID": { + "type": "dword", + "value": 4294967295 + } + }, + { + "__struct_id": 4, + "FactionGlobal": { + "type": "word", + "value": 1 + }, + "FactionName": { + "type": "cexostring", + "value": "Defender" + }, + "FactionParentID": { + "type": "dword", + "value": 4294967295 + } + } + ] + }, + "RepList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "FactionID1": { + "type": "dword", + "value": 0 + }, + "FactionID2": { + "type": "dword", + "value": 1 + }, + "FactionRep": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 1, + "FactionID1": { + "type": "dword", + "value": 0 + }, + "FactionID2": { + "type": "dword", + "value": 2 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 2, + "FactionID1": { + "type": "dword", + "value": 0 + }, + "FactionID2": { + "type": "dword", + "value": 3 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 3, + "FactionID1": { + "type": "dword", + "value": 0 + }, + "FactionID2": { + "type": "dword", + "value": 4 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 4, + "FactionID1": { + "type": "dword", + "value": 1 + }, + "FactionID2": { + "type": "dword", + "value": 1 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 5, + "FactionID1": { + "type": "dword", + "value": 1 + }, + "FactionID2": { + "type": "dword", + "value": 2 + }, + "FactionRep": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 6, + "FactionID1": { + "type": "dword", + "value": 1 + }, + "FactionID2": { + "type": "dword", + "value": 3 + }, + "FactionRep": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 7, + "FactionID1": { + "type": "dword", + "value": 1 + }, + "FactionID2": { + "type": "dword", + "value": 4 + }, + "FactionRep": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 8, + "FactionID1": { + "type": "dword", + "value": 2 + }, + "FactionID2": { + "type": "dword", + "value": 1 + }, + "FactionRep": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 9, + "FactionID1": { + "type": "dword", + "value": 2 + }, + "FactionID2": { + "type": "dword", + "value": 2 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 10, + "FactionID1": { + "type": "dword", + "value": 2 + }, + "FactionID2": { + "type": "dword", + "value": 3 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 11, + "FactionID1": { + "type": "dword", + "value": 2 + }, + "FactionID2": { + "type": "dword", + "value": 4 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 12, + "FactionID1": { + "type": "dword", + "value": 3 + }, + "FactionID2": { + "type": "dword", + "value": 1 + }, + "FactionRep": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 13, + "FactionID1": { + "type": "dword", + "value": 3 + }, + "FactionID2": { + "type": "dword", + "value": 2 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 14, + "FactionID1": { + "type": "dword", + "value": 3 + }, + "FactionID2": { + "type": "dword", + "value": 3 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 15, + "FactionID1": { + "type": "dword", + "value": 3 + }, + "FactionID2": { + "type": "dword", + "value": 4 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 16, + "FactionID1": { + "type": "dword", + "value": 4 + }, + "FactionID2": { + "type": "dword", + "value": 1 + }, + "FactionRep": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 17, + "FactionID1": { + "type": "dword", + "value": 4 + }, + "FactionID2": { + "type": "dword", + "value": 2 + }, + "FactionRep": { + "type": "dword", + "value": 50 + } + }, + { + "__struct_id": 18, + "FactionID1": { + "type": "dword", + "value": 4 + }, + "FactionID2": { + "type": "dword", + "value": 3 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + }, + { + "__struct_id": 19, + "FactionID1": { + "type": "dword", + "value": 4 + }, + "FactionID2": { + "type": "dword", + "value": 4 + }, + "FactionRep": { + "type": "dword", + "value": 100 + } + } + ] + } +} diff --git a/src/module/gic/area.gic.json b/src/module/gic/area.gic.json new file mode 100644 index 0000000..8551157 --- /dev/null +++ b/src/module/gic/area.gic.json @@ -0,0 +1,63 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "Iron Portcullis 2" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Merchants Shingle - 8" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This is a waypoint that can be placed in an area to mark a spot that should be visited by NPCs (to give random walking around some direction). \r\n\r\nThis will affect the animations and behavior of NPCs using the PlayAmbientAnimations functions (see the OnSpawn script nw_c2_default9 and the library x0_i0_anims for details). \r\n\r\nNote that this feature will only work in modules that use the XP1 modified AI. " + } + } + ] + } +} diff --git a/src/module/gic/area001.gic.json b/src/module/gic/area001.gic.json new file mode 100644 index 0000000..86d67c3 --- /dev/null +++ b/src/module/gic/area001.gic.json @@ -0,0 +1,147 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "MineExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters.\r\n\r\nOnly 1 Room Monster Spawn Point is allowed per area." + } + } + ] + } +} diff --git a/src/module/gic/area002.gic.json b/src/module/gic/area002.gic.json new file mode 100644 index 0000000..54c9d9f --- /dev/null +++ b/src/module/gic/area002.gic.json @@ -0,0 +1,196 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "MineExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters.\r\n\r\nOnly 1 Room Monster Spawn Point is allowed per area." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + } +} diff --git a/src/module/gic/area003.gic.json b/src/module/gic/area003.gic.json new file mode 100644 index 0000000..450d9bc --- /dev/null +++ b/src/module/gic/area003.gic.json @@ -0,0 +1,182 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters.\r\n\r\nOnly 1 Room Monster Spawn Point is allowed per area." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + } + ] + } +} diff --git a/src/module/gic/area004.gic.json b/src/module/gic/area004.gic.json new file mode 100644 index 0000000..ef9772a --- /dev/null +++ b/src/module/gic/area004.gic.json @@ -0,0 +1,442 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Flame - Small" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + } +} diff --git a/src/module/gic/area005.gic.json b/src/module/gic/area005.gic.json new file mode 100644 index 0000000..06b2c1c --- /dev/null +++ b/src/module/gic/area005.gic.json @@ -0,0 +1,421 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "BridgeDoor" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CryptExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Mushrooms" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Mushrooms" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Shaft of Light - Green" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Shaft of Light - Green" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Shaft of Light - Green" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Shaft of Light - Orange" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Shaft of Light - Orange" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Shaft of Light - Orange" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Shaft of Light - Orange" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Shaft of Light - Red" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Shaft of Light - Green" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Shaft of Light - Red" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters.\r\n\r\nOnly 1 Room Monster Spawn Point is allowed per area." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + } +} diff --git a/src/module/gic/area006.gic.json b/src/module/gic/area006.gic.json new file mode 100644 index 0000000..351ae32 --- /dev/null +++ b/src/module/gic/area006.gic.json @@ -0,0 +1,560 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "JailExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "Iron Portcullis" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Pull Rope / Chain" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters.\r\n\r\nOnly 1 Room Monster Spawn Point is allowed per area." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + } + ] + } +} diff --git a/src/module/gic/area007.gic.json b/src/module/gic/area007.gic.json new file mode 100644 index 0000000..254742b --- /dev/null +++ b/src/module/gic/area007.gic.json @@ -0,0 +1,295 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CastleExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CastleExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tome" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bear Skin Rug 1" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Candelabra" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Candelabra" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters.\r\n\r\nOnly 1 Room Monster Spawn Point is allowed per area." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + } +} diff --git a/src/module/gic/area008.gic.json b/src/module/gic/area008.gic.json new file mode 100644 index 0000000..1b618f4 --- /dev/null +++ b/src/module/gic/area008.gic.json @@ -0,0 +1,459 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "SewerExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Chair" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters.\r\n\r\nOnly 1 Room Monster Spawn Point is allowed per area." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + } + ] + } +} diff --git a/src/module/gic/area009.gic.json b/src/module/gic/area009.gic.json new file mode 100644 index 0000000..5dc7549 --- /dev/null +++ b/src/module/gic/area009.gic.json @@ -0,0 +1,316 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CorridorDoor" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Altar / Shrine - Good" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters.\r\n\r\nOnly 1 Room Monster Spawn Point is allowed per area." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + } +} diff --git a/src/module/gic/area010.gic.json b/src/module/gic/area010.gic.json new file mode 100644 index 0000000..ca0b663 --- /dev/null +++ b/src/module/gic/area010.gic.json @@ -0,0 +1,330 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CorridorDoor" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Well" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters.\r\n\r\nOnly 1 Room Monster Spawn Point is allowed per area." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + } +} diff --git a/src/module/gic/area011.gic.json b/src/module/gic/area011.gic.json new file mode 100644 index 0000000..b9bed78 --- /dev/null +++ b/src/module/gic/area011.gic.json @@ -0,0 +1,253 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Shaft of Light - Blue" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters.\r\n\r\nOnly 1 Room Monster Spawn Point is allowed per area." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + } +} diff --git a/src/module/gic/area012.gic.json b/src/module/gic/area012.gic.json new file mode 100644 index 0000000..37257be --- /dev/null +++ b/src/module/gic/area012.gic.json @@ -0,0 +1,375 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "ForestExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "ForestExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters.\r\n\r\nOnly 1 Room Monster Spawn Point is allowed per area." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + } +} diff --git a/src/module/gic/area013.gic.json b/src/module/gic/area013.gic.json new file mode 100644 index 0000000..a36ab29 --- /dev/null +++ b/src/module/gic/area013.gic.json @@ -0,0 +1,253 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bear Skin Rug 1" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Throne - Evil" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "x0_cushions" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "x0_cushions" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bones" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters.\r\n\r\nOnly 1 Room Monster Spawn Point is allowed per area." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + } +} diff --git a/src/module/gic/area014.gic.json b/src/module/gic/area014.gic.json new file mode 100644 index 0000000..0f629ce --- /dev/null +++ b/src/module/gic/area014.gic.json @@ -0,0 +1,253 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CryptExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Impaling Spear w/ Human Head" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters.\r\n\r\nOnly 1 Room Monster Spawn Point is allowed per area." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + } + ] + } +} diff --git a/src/module/gic/area015.gic.json b/src/module/gic/area015.gic.json new file mode 100644 index 0000000..e9df8dc --- /dev/null +++ b/src/module/gic/area015.gic.json @@ -0,0 +1,351 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CastleExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CastleExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters.\r\n\r\nOnly 1 Room Monster Spawn Point is allowed per area." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + } +} diff --git a/src/module/gic/area016.gic.json b/src/module/gic/area016.gic.json new file mode 100644 index 0000000..5dbfdeb --- /dev/null +++ b/src/module/gic/area016.gic.json @@ -0,0 +1,273 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Campfire - with Spit" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters.\r\n\r\nOnly 1 Room Monster Spawn Point is allowed per area." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + } + ] + } +} diff --git a/src/module/gic/desolateanddespa.gic.json b/src/module/gic/desolateanddespa.gic.json new file mode 100644 index 0000000..982ca53 --- /dev/null +++ b/src/module/gic/desolateanddespa.gic.json @@ -0,0 +1,212 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "Breach" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Portal" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/gic/ey_dpcon_erewood.gic.json b/src/module/gic/ey_dpcon_erewood.gic.json new file mode 100644 index 0000000..fe341fc --- /dev/null +++ b/src/module/gic/ey_dpcon_erewood.gic.json @@ -0,0 +1,346 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bed - Bedding Rolls" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Campfire" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Normal" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Autumn" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Autumn" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Normal" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Autumn" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Boulder" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Stones" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Water Drip" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Dust Plume" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Altar / Shrine - Evil" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Magic Sparks - Purple" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Butterflies" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Grass Tuft" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Mushrooms" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Moss" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Plant Growth - Shrubs" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Campfire" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bench / Pew" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Autumn" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Autumn" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Normal" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Normal" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Normal" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Autumn" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Normal" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Autumn" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Ivy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Water Drip" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Portal" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__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." + } + } + ] + } +} diff --git a/src/module/gic/frostedpits.gic.json b/src/module/gic/frostedpits.gic.json new file mode 100644 index 0000000..4695d11 --- /dev/null +++ b/src/module/gic/frostedpits.gic.json @@ -0,0 +1,360 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Portal" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__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": { + "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": { + "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." + } + } + ] + } +} diff --git a/src/module/gic/frozentimes.gic.json b/src/module/gic/frozentimes.gic.json new file mode 100644 index 0000000..de2fd84 --- /dev/null +++ b/src/module/gic/frozentimes.gic.json @@ -0,0 +1,427 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "Frost Giant, female" + } + } + ] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Dragon Skull" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Stone patch" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Stone patch" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Stones" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Dead Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Dust Plume" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Portal" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + } +} diff --git a/src/module/gic/limbo001.gic.json b/src/module/gic/limbo001.gic.json new file mode 100644 index 0000000..c18564e --- /dev/null +++ b/src/module/gic/limbo001.gic.json @@ -0,0 +1,90 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Chest - 2 (Low treasure script)" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "This is the trap door that will be created when the Hidden door trigger determins that the door has been found. see comments on the trigger for how to use." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "A storage for manifestation tokens, which are used to keep track of psionic power use interruption." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Chest - 1 (Low treasure script)" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Chest - 1 (Low treasure script)" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__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." + } + } + ] + } +} diff --git a/src/module/gic/mordmagman01.gic.json b/src/module/gic/mordmagman01.gic.json new file mode 100644 index 0000000..95996bc --- /dev/null +++ b/src/module/gic/mordmagman01.gic.json @@ -0,0 +1,47 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/gic/mordmagman02.gic.json b/src/module/gic/mordmagman02.gic.json new file mode 100644 index 0000000..95996bc --- /dev/null +++ b/src/module/gic/mordmagman02.gic.json @@ -0,0 +1,47 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/gic/mordmagman03.gic.json b/src/module/gic/mordmagman03.gic.json new file mode 100644 index 0000000..95996bc --- /dev/null +++ b/src/module/gic/mordmagman03.gic.json @@ -0,0 +1,47 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/gic/mordmagman04.gic.json b/src/module/gic/mordmagman04.gic.json new file mode 100644 index 0000000..95996bc --- /dev/null +++ b/src/module/gic/mordmagman04.gic.json @@ -0,0 +1,47 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/gic/mordmagman05.gic.json b/src/module/gic/mordmagman05.gic.json new file mode 100644 index 0000000..95996bc --- /dev/null +++ b/src/module/gic/mordmagman05.gic.json @@ -0,0 +1,47 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/gic/mordmagman06.gic.json b/src/module/gic/mordmagman06.gic.json new file mode 100644 index 0000000..95996bc --- /dev/null +++ b/src/module/gic/mordmagman06.gic.json @@ -0,0 +1,47 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/gic/prc_epiclab.gic.json b/src/module/gic/prc_epiclab.gic.json new file mode 100644 index 0000000..a59adcf --- /dev/null +++ b/src/module/gic/prc_epiclab.gic.json @@ -0,0 +1,346 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Door List": { + "type": "list", + "value": [] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Magic Sparks - Blue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Alchemist's Apparatus" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Alchemist's Apparatus" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "RugOriental2" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Chandelier" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Chandelier" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 11, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + } +} diff --git a/src/module/gic/prc_maze_01.gic.json b/src/module/gic/prc_maze_01.gic.json new file mode 100644 index 0000000..62358fc --- /dev/null +++ b/src/module/gic/prc_maze_01.gic.json @@ -0,0 +1,1287 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__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": { + "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": { + "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": { + "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": { + "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": { + "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": { + "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": { + "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": { + "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": { + "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": { + "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": { + "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": { + "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." + } + } + ] + } +} diff --git a/src/module/gic/ruinedminds001.gic.json b/src/module/gic/ruinedminds001.gic.json new file mode 100644 index 0000000..c710eda --- /dev/null +++ b/src/module/gic/ruinedminds001.gic.json @@ -0,0 +1,209 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "CorridorDoor" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "BridgeDoor" + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "BridgeDoor" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "NOTE: The circle will not be visible until it is changed to play its ACTIVATE animation either by scripting or setting it from the start in the toolset. \r\n\r\n" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Portal" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/gic/thequietofthemin.gic.json b/src/module/gic/thequietofthemin.gic.json new file mode 100644 index 0000000..aaf4fb5 --- /dev/null +++ b/src/module/gic/thequietofthemin.gic.json @@ -0,0 +1,285 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Campfire" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Fallen Timber" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Normal" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Autumn" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Autumn" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Autumn" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Autumn" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Normal" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Normal" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Normal" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Normal" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Normal" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Grass Tuft" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Fern" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Fern" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Grass Tuft" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Grass Tuft" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Grass Tuft" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Ivy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Mushrooms" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Plant Growth - Shrubs" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Plant Growth - Shrubs" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Snowy Pine Tree" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Normal" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Normal" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Tree - Autumn" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Portal" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/gic/yawningportal.gic.json b/src/module/gic/yawningportal.gic.json new file mode 100644 index 0000000..d77ac47 --- /dev/null +++ b/src/module/gic/yawningportal.gic.json @@ -0,0 +1,764 @@ +{ + "__data_type": "GIC ", + "Creature List": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "Strong Door" + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Well" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Painting on Easel" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Painting" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Low treasure script." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "\r\n" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Maps" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Chest - 3 (Medium treasure script)" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "\r\n" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "\r\n" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Low treasure script." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Low treasure script." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Low treasure script." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Chest - 4 (High treasure script)" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Low treasure script." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Treasure Small" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Combat Dummy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Combat Dummy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Combat Dummy" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Weapon Rack" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Weapon Rack" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Weapon Rack" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Garbage" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Golem Parts Iron" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Ladder" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Window" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sacks of Flour, Grain, etc." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Flame - Small" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Telescope" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Window" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Rune Circle" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Brazier" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Lecturn" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bolts of Cloth" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Globe" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Flame - Small" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Weathering / Scorch Mark" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Weathering / Scorch Mark" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Bread" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Hobby Horse" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Window" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Floor Lever - 1" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Forge" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Anvil" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sacks of Flour, Grain, etc." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Sacks of Flour, Grain, etc." + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Scales" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Oriental Rug" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Merchants Shingle - 3" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Chair" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Chair" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Chair" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Chair" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Chair" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Merchants Shingle - 3" + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "Birdbath" + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "PlayInToolset": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 11, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + } + }, + { + "__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": { + "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": { + "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": { + "type": "cexostring", + "value": "This is a waypoint that can be placed in an interior area to mark it as a tavern. This will affect the animations and behavior of NPCs using the PlayAmbientAnimations functions (see the OnSpawn script nw_c2_default9 and the library x0_i0_anims for details). \r\n\r\nNote that this feature will only work in modules that use the XP1 modified AI. " + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "On the Advanced tab, replace with whatever information you wish to appear on the Map of an area." + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "On the Advanced tab, replace with whatever information you wish to appear on the Map of an area." + } + } + ] + } +} diff --git a/src/module/git/area.git.json b/src/module/git/area.git.json new file mode 100644 index 0000000..6f70e9d --- /dev/null +++ b/src/module/git/area.git.json @@ -0,0 +1,593 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 66 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 66 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 41 + }, + "MusicDay": { + "type": "int", + "value": 50 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 50 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 60 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 9073 + } + }, + "DisarmDC": { + "type": "byte", + "value": 20 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 25 + }, + "GenericType": { + "type": "byte", + "value": 3 + }, + "Hardness": { + "type": "byte", + "value": 10 + }, + "HP": { + "type": "short", + "value": 60 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 1 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_door_death" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 100 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Portcullis2" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_grate2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 2 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 70.0 + }, + "Y": { + "type": "float", + "value": 15.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 145 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "You have been placed in this cell for attempting to cheat the Death System. This character is trapped forever. If you wish to continue playing on this module make a new character.", + "id": 14568 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14561 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "pc_examine" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 503 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MerchantsShingle8" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_billboard8" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 74.9691 + }, + "Y": { + "type": "float", + "value": 16.3396 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 1 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Death Cheater Spawn Point", + "id": 69067 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": { + "0": "Death Cheater Cell" + } + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "DeathCheater" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wp_stop" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 74.9996 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 6.9172 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + } +} diff --git a/src/module/git/area001.git.json b/src/module/git/area001.git.json new file mode 100644 index 0000000..86c01af --- /dev/null +++ b/src/module/git/area001.git.json @@ -0,0 +1,1993 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 63 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 63 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 39 + }, + "MusicDay": { + "type": "int", + "value": 9 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 10 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 1 + }, + "Appearance": { + "type": "dword", + "value": 53 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MineExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_13" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 14.43 + }, + "Y": { + "type": "float", + "value": 25.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 75.0 + }, + "Y": { + "type": "float", + "value": 70.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.9021 + }, + "PointY": { + "type": "float", + "value": -7.4421 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.1157 + }, + "PointY": { + "type": "float", + "value": -7.8368 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.3976 + }, + "PointY": { + "type": "float", + "value": 0.0564 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.3383 + }, + "PointY": { + "type": "float", + "value": -0.3383 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 33.2471 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 45.1253 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -12.3913 + }, + "PointY": { + "type": "float", + "value": -0.1442 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -11.9407 + }, + "PointY": { + "type": "float", + "value": -7.2145 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.2114 + }, + "PointY": { + "type": "float", + "value": -8.629099999999999 + }, + "PointZ": { + "type": "float", + "value": 0.275 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 27.2484 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 36.8999 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.7298 + }, + "PointY": { + "type": "float", + "value": -8.3858 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.2596 + }, + "PointY": { + "type": "float", + "value": -12.8778 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.6251 + }, + "PointY": { + "type": "float", + "value": -6.3893 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.275 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 43.7939 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 31.7902 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -6.8477 + }, + "PointY": { + "type": "float", + "value": 8.4777 + }, + "PointZ": { + "type": "float", + "value": 0.1214 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.1551 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.8931 + }, + "PointY": { + "type": "float", + "value": 8.121700000000001 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5125 + }, + "PointY": { + "type": "float", + "value": 13.424 + }, + "PointZ": { + "type": "float", + "value": 0.275 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 56.5064 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 46.8517 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 51.2051 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 8.7902 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.8315 + }, + "XPosition": { + "type": "float", + "value": 49.4426 + }, + "YOrientation": { + "type": "float", + "value": -0.5556 + }, + "YPosition": { + "type": "float", + "value": 70.2616 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": -0.0 + }, + "XPosition": { + "type": "float", + "value": 9.959899999999999 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 71.4513 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint is used to determine where a secret door should be placed. Note the system will randomly determine if a secret door should be placed. This chance can be adjusted by adjusting the module variable \"SecretDoorsChance\"" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 17.1412 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 60.8055 + }, + "ZPosition": { + "type": "float", + "value": 0.26 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint is used to determine where a secret door should be placed. Note the system will randomly determine if a secret door should be placed. This chance can be adjusted by adjusting the module variable \"SecretDoorsChance\"\n\nThis waypoint should always be facing the wall on which you want it to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.3827 + }, + "XPosition": { + "type": "float", + "value": 69.259 + }, + "YOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 51.8893 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint is used to determine where a secret door should be placed. Note the system will randomly determine if a secret door should be placed. This chance can be adjusted by adjusting the module variable \"SecretDoorsChance\"\n\nThis waypoint should always be facing the wall on which you want it to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 60.0975 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 21.6587 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 18.3736 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 25.2987 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 74.48569999999999 + }, + "YOrientation": { + "type": "float", + "value": -0.5556 + }, + "YPosition": { + "type": "float", + "value": 66.6469 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 62.0565 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 32.6744 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + } +} diff --git a/src/module/git/area002.git.json b/src/module/git/area002.git.json new file mode 100644 index 0000000..ee83ccf --- /dev/null +++ b/src/module/git/area002.git.json @@ -0,0 +1,2779 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 63 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 63 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 39 + }, + "MusicDay": { + "type": "int", + "value": 9 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 10 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 1 + }, + "Appearance": { + "type": "dword", + "value": 53 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MineExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_13" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 35.0 + }, + "Y": { + "type": "float", + "value": 13.99 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 10.0 + }, + "Y": { + "type": "float", + "value": 35.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 75.0 + }, + "Y": { + "type": "float", + "value": 20.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -9.508800000000001 + }, + "PointY": { + "type": "float", + "value": 0.7228 + }, + "PointZ": { + "type": "float", + "value": 0.1193 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -9.392200000000001 + }, + "PointY": { + "type": "float", + "value": 0.2084 + }, + "PointZ": { + "type": "float", + "value": 0.2366 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -7.1586 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.6171 + }, + "PointY": { + "type": "float", + "value": 6.5414 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -8.145899999999999 + }, + "PointY": { + "type": "float", + "value": 6.1712 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 53.8851 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 54.1937 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.9369 + }, + "PointY": { + "type": "float", + "value": 1.7279 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4811 + }, + "PointY": { + "type": "float", + "value": 4.5667 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.8387 + }, + "PointY": { + "type": "float", + "value": 7.7757 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 62.6482 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 36.2973 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -5.6596 + }, + "PointY": { + "type": "float", + "value": 5.1675 + }, + "PointZ": { + "type": "float", + "value": 0.275 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.275 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 7.2314 + }, + "PointY": { + "type": "float", + "value": 5.8561 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4431 + }, + "PointY": { + "type": "float", + "value": 12.5209 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 23.9439 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 18.3458 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.1772 + }, + "PointY": { + "type": "float", + "value": 5.4673 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.6055 + }, + "PointY": { + "type": "float", + "value": 1.9974 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 9.9411 + }, + "PointY": { + "type": "float", + "value": 1.7391 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.9007 + }, + "PointY": { + "type": "float", + "value": 8.2516 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 21.0819 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 46.0888 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.2346 + }, + "PointY": { + "type": "float", + "value": 4.7373 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.275 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.7317 + }, + "PointY": { + "type": "float", + "value": 3.7317 + }, + "PointZ": { + "type": "float", + "value": 0.275 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.2399 + }, + "PointY": { + "type": "float", + "value": 7.3577 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 56.3328 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 18.797 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 39.1127 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 48.9221 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 60.3724 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 28.4388 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 19.5837 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 30.1194 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint is used to determine where a secret door should be placed. Note the system will randomly determine if a secret door should be placed. This chance can be adjusted by adjusting the module variable \"SecretDoorsChance\"\n\nThis waypoint should always be facing the wall on which you want it to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 42.4376 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 61.5511 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 12.855 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 34.943 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 74.4743 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 23.6263 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.1116 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 16.542 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + }, + "XOrientation": { + "type": "float", + "value": -0.5556 + }, + "XPosition": { + "type": "float", + "value": 54.8949 + }, + "YOrientation": { + "type": "float", + "value": -0.8315 + }, + "YPosition": { + "type": "float", + "value": 68.8638 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 58.6374 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 76.477 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.5556 + }, + "XPosition": { + "type": "float", + "value": 58.9353 + }, + "YOrientation": { + "type": "float", + "value": -0.8315 + }, + "YPosition": { + "type": "float", + "value": 62.9613 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.5556 + }, + "XPosition": { + "type": "float", + "value": 44.406 + }, + "YOrientation": { + "type": "float", + "value": -0.8315 + }, + "YPosition": { + "type": "float", + "value": 66.602 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 14.0988 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 49.1634 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.1951 + }, + "XPosition": { + "type": "float", + "value": 53.7525 + }, + "YOrientation": { + "type": "float", + "value": -0.9808 + }, + "YPosition": { + "type": "float", + "value": 12.5174 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.9808 + }, + "XPosition": { + "type": "float", + "value": 68.21080000000001 + }, + "YOrientation": { + "type": "float", + "value": -0.1951 + }, + "YPosition": { + "type": "float", + "value": 40.4055 + }, + "ZPosition": { + "type": "float", + "value": 0.2072 + } + } + ] + } +} diff --git a/src/module/git/area003.git.json b/src/module/git/area003.git.json new file mode 100644 index 0000000..2de9e97 --- /dev/null +++ b/src/module/git/area003.git.json @@ -0,0 +1,2586 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 63 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 63 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 39 + }, + "MusicDay": { + "type": "int", + "value": 9 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 10 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 1 + }, + "Appearance": { + "type": "dword", + "value": 64 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CaveExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_12" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 25.99 + }, + "Y": { + "type": "float", + "value": 15.76 + }, + "Z": { + "type": "float", + "value": -6.01 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 45.0 + }, + "Y": { + "type": "float", + "value": 60.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.1635 + }, + "PointY": { + "type": "float", + "value": -1.807 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.8318 + }, + "PointY": { + "type": "float", + "value": -1.806 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.737 + }, + "PointY": { + "type": "float", + "value": 0.0514 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 44.1363 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 50.373 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0507 + }, + "PointY": { + "type": "float", + "value": -1.7382 + }, + "PointZ": { + "type": "float", + "value": 0.275 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.367 + }, + "PointY": { + "type": "float", + "value": -2.7545 + }, + "PointZ": { + "type": "float", + "value": 0.275 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.084 + }, + "PointY": { + "type": "float", + "value": -3.142 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.1946 + }, + "PointY": { + "type": "float", + "value": -4.5981 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.1546 + }, + "PointY": { + "type": "float", + "value": -2.0258 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.6653 + }, + "PointY": { + "type": "float", + "value": -1.0436 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.8605 + }, + "PointY": { + "type": "float", + "value": -0.8145 + }, + "PointZ": { + "type": "float", + "value": 0.275 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.3199 + }, + "PointY": { + "type": "float", + "value": -0.1392 + }, + "PointZ": { + "type": "float", + "value": 0.275 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.275 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 32.3948 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 39.2 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.7336 + }, + "PointY": { + "type": "float", + "value": -2.6011 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.7503 + }, + "PointY": { + "type": "float", + "value": -4.0451 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.8857 + }, + "PointY": { + "type": "float", + "value": -3.5007 + }, + "PointZ": { + "type": "float", + "value": 0.1057 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.0274 + }, + "PointY": { + "type": "float", + "value": -1.5178 + }, + "PointZ": { + "type": "float", + "value": 0.275 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.2079 + }, + "PointY": { + "type": "float", + "value": -1.0973 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.7565 + }, + "PointY": { + "type": "float", + "value": -0.1763 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 37.7433 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 37.0719 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.064 + }, + "PointY": { + "type": "float", + "value": -3.9856 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.6698 + }, + "PointY": { + "type": "float", + "value": -2.4104 + }, + "PointZ": { + "type": "float", + "value": 0.275 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.7907 + }, + "PointY": { + "type": "float", + "value": 0.3954 + }, + "PointZ": { + "type": "float", + "value": 0.275 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.734 + }, + "PointY": { + "type": "float", + "value": 0.4659 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 37.963 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 24.6868 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.3202 + }, + "PointY": { + "type": "float", + "value": -6.9596 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.0664 + }, + "PointY": { + "type": "float", + "value": -7.173 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.7594 + }, + "PointY": { + "type": "float", + "value": -1.1468 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 23.2947 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 14.617 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 39.4148 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 40.3831 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint is used to determine where a secret door should be placed. Note the system will randomly determine if a secret door should be placed. This chance can be adjusted by adjusting the module variable \"SecretDoorsChance\"\n\nThis waypoint should always be facing the wall on which you want it to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 41.0995 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 48.2685 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": -0.0 + }, + "XPosition": { + "type": "float", + "value": 44.7835 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 57.1755 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.5556 + }, + "XPosition": { + "type": "float", + "value": 26.1156 + }, + "YOrientation": { + "type": "float", + "value": 0.8315 + }, + "YPosition": { + "type": "float", + "value": 21.2572 + }, + "ZPosition": { + "type": "float", + "value": -4.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 18.3386 + }, + "YOrientation": { + "type": "float", + "value": -0.7071 + }, + "YPosition": { + "type": "float", + "value": 28.2725 + }, + "ZPosition": { + "type": "float", + "value": 0.2201 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": -0.7071 + }, + "XPosition": { + "type": "float", + "value": 41.5803 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 7.5183 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.9808 + }, + "XPosition": { + "type": "float", + "value": 12.969 + }, + "YOrientation": { + "type": "float", + "value": 0.1951 + }, + "YPosition": { + "type": "float", + "value": 26.9484 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.3827 + }, + "XPosition": { + "type": "float", + "value": 28.276 + }, + "YOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 36.8383 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.7071 + }, + "XPosition": { + "type": "float", + "value": 15.563 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 12.5423 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.8315 + }, + "XPosition": { + "type": "float", + "value": 21.6372 + }, + "YOrientation": { + "type": "float", + "value": -0.5556 + }, + "YPosition": { + "type": "float", + "value": 35.3849 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 12.755 + }, + "YOrientation": { + "type": "float", + "value": -0.5556 + }, + "YPosition": { + "type": "float", + "value": 20.1676 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.8315 + }, + "XPosition": { + "type": "float", + "value": 46.8222 + }, + "YOrientation": { + "type": "float", + "value": -0.5556 + }, + "YPosition": { + "type": "float", + "value": 18.3513 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.1951 + }, + "XPosition": { + "type": "float", + "value": 33.9449 + }, + "YOrientation": { + "type": "float", + "value": 0.9808 + }, + "YPosition": { + "type": "float", + "value": 43.4272 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + } + ] + } +} diff --git a/src/module/git/area004.git.json b/src/module/git/area004.git.json new file mode 100644 index 0000000..57b958c --- /dev/null +++ b/src/module/git/area004.git.json @@ -0,0 +1,10498 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 66 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 66 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 41 + }, + "MusicDay": { + "type": "int", + "value": 55 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 55 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 10.0 + }, + "Y": { + "type": "float", + "value": 5.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 30.0 + }, + "Y": { + "type": "float", + "value": 5.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 476 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84600 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84594 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_o2_dead" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_STATU_DRA" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_statu_dra" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 20.051 + }, + "Y": { + "type": "float", + "value": 48.139 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 431 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84170 + } + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 83424 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "reshuffle" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 914 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_STATUE_FL" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_statue_fl" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 19.9809 + }, + "Y": { + "type": "float", + "value": 44.5814 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 151 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14627 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14625 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 509 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Flame - Small" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_flamesmall" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 19.97 + }, + "Y": { + "type": "float", + "value": 45.65 + }, + "Z": { + "type": "float", + "value": 3.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 21.7449 + }, + "Y": { + "type": "float", + "value": 37.8638 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 13.3026 + }, + "Y": { + "type": "float", + "value": 46.7085 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.1598 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.0105 + }, + "Y": { + "type": "float", + "value": 42.4483 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.1598 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 13.085 + }, + "Y": { + "type": "float", + "value": 41.0865 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 10.8901 + }, + "Y": { + "type": "float", + "value": 46.6269 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.9635 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 11.4827 + }, + "Y": { + "type": "float", + "value": 43.737 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.5525 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.3684 + }, + "Y": { + "type": "float", + "value": 38.5642 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.5525 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 17.5897 + }, + "Y": { + "type": "float", + "value": 40.252 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 18.1697 + }, + "Y": { + "type": "float", + "value": 37.63 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.589 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 22.0835 + }, + "Y": { + "type": "float", + "value": 40.1186 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.9635 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 24.2864 + }, + "Y": { + "type": "float", + "value": 42.536 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.7671 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 25.9675 + }, + "Y": { + "type": "float", + "value": 46.897 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 28.6499 + }, + "Y": { + "type": "float", + "value": 46.6075 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.1598 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 27.3446 + }, + "Y": { + "type": "float", + "value": 41.1738 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.7671 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 28.5644 + }, + "Y": { + "type": "float", + "value": 43.6776 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.5525 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 25.0816 + }, + "Y": { + "type": "float", + "value": 38.6213 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 418 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84154 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84153 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_o2_dead" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 901 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_STATUE_H" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_statue_h" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 28.7033 + }, + "Y": { + "type": "float", + "value": 16.6678 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 418 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84154 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84153 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_o2_dead" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 901 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_STATUE_H" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_statue_h" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 12.1075 + }, + "Y": { + "type": "float", + "value": 17.0003 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 418 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84154 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84153 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_o2_dead" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 901 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_STATUE_H" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_statue_h" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 12.0176 + }, + "Y": { + "type": "float", + "value": 13.4853 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 418 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84154 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84153 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_o2_dead" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 901 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_STATUE_H" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_statue_h" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 28.7041 + }, + "Y": { + "type": "float", + "value": 13.1678 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 418 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84154 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84153 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_o2_dead" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 901 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_STATUE_H" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_statue_h" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 29.0 + }, + "Y": { + "type": "float", + "value": 23.4683 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 418 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84154 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84153 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_o2_dead" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 901 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_STATUE_H" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_statue_h" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 29.0 + }, + "Y": { + "type": "float", + "value": 26.6918 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 418 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84154 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84153 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_o2_dead" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 901 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_STATUE_H" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_statue_h" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 11.3931 + }, + "Y": { + "type": "float", + "value": 23.4973 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 418 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84154 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84153 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_o2_dead" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 901 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_STATUE_H" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_statue_h" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 11.2703 + }, + "Y": { + "type": "float", + "value": 26.8066 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.2242 + }, + "PointY": { + "type": "float", + "value": 5.2043 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.8687 + }, + "PointY": { + "type": "float", + "value": 0.0324 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.1593 + }, + "PointY": { + "type": "float", + "value": 5.0436 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.0122 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 9.978999999999999 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.7758 + }, + "PointY": { + "type": "float", + "value": 0.0324 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.1004 + }, + "PointY": { + "type": "float", + "value": 5.0036 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.8911 + }, + "PointY": { + "type": "float", + "value": 4.9636 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.8605 + }, + "PointY": { + "type": "float", + "value": 4.45 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.7663 + }, + "PointY": { + "type": "float", + "value": 4.4109 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 19.8807 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 9.978999999999999 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.7901 + }, + "PointY": { + "type": "float", + "value": 0.0653 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.136 + }, + "PointY": { + "type": "float", + "value": 4.4769 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.951 + }, + "PointY": { + "type": "float", + "value": 4.4769 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0075 + }, + "PointY": { + "type": "float", + "value": 4.9537 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.6555 + }, + "PointY": { + "type": "float", + "value": 4.9938 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 24.7761 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 9.9849 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.9796 + }, + "PointY": { + "type": "float", + "value": 0.098 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.2395 + }, + "PointY": { + "type": "float", + "value": 4.9136 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.3412 + }, + "PointY": { + "type": "float", + "value": 4.9537 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 24.808 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 9.9849 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.1497 + }, + "PointY": { + "type": "float", + "value": 5.087 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.9704 + }, + "PointY": { + "type": "float", + "value": 0.09710000000000001 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.07049999999999999 + }, + "PointY": { + "type": "float", + "value": 5.087 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 14.9705 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.8755 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.9956 + }, + "PointY": { + "type": "float", + "value": 0.0345 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.9264 + }, + "PointY": { + "type": "float", + "value": 5.0439 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.0251 + }, + "PointY": { + "type": "float", + "value": 5.1215 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.0043 + }, + "PointY": { + "type": "float", + "value": 4.5048 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.1153 + }, + "PointY": { + "type": "float", + "value": 4.5048 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.0219 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.8749 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.5456 + }, + "PointY": { + "type": "float", + "value": 0.0338 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.146 + }, + "PointY": { + "type": "float", + "value": 4.4901 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.9107 + }, + "PointY": { + "type": "float", + "value": 4.4901 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.9335 + }, + "PointY": { + "type": "float", + "value": 4.9431 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.5089 + }, + "PointY": { + "type": "float", + "value": 4.9052 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 24.7336 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.9528 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.948 + }, + "PointY": { + "type": "float", + "value": 0.0332 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.3653 + }, + "PointY": { + "type": "float", + "value": 5.1523 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.6965 + }, + "PointY": { + "type": "float", + "value": 5.1523 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 27.8085 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.7662 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.8995 + }, + "PointY": { + "type": "float", + "value": 5.049 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.7524 + }, + "PointY": { + "type": "float", + "value": 0.0141 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.7214 + }, + "PointY": { + "type": "float", + "value": 4.8068 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 12.269 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 30.0089 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.6808 + }, + "PointY": { + "type": "float", + "value": 0.1405 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.908 + }, + "PointY": { + "type": "float", + "value": 5.2187 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5458 + }, + "PointY": { + "type": "float", + "value": 4.8652 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 27.6718 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 29.8365 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.5739 + }, + "PointY": { + "type": "float", + "value": 5.0511 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.5172 + }, + "PointY": { + "type": "float", + "value": 0.2367 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0341 + }, + "PointY": { + "type": "float", + "value": 4.6461 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 24.7551 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 29.9098 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.6157 + }, + "PointY": { + "type": "float", + "value": 4.8706 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.4332 + }, + "PointY": { + "type": "float", + "value": 0.2323 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0201 + }, + "PointY": { + "type": "float", + "value": 4.9609 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 19.8388 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 29.8497 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.6412 + }, + "PointY": { + "type": "float", + "value": 2.4455 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.5443 + }, + "PointY": { + "type": "float", + "value": 2.3395 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.06900000000000001 + }, + "PointY": { + "type": "float", + "value": 5.0473 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 20.0556 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 42.5594 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 30.9394 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 42.4316 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 10.5708 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 40.0238 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 17.269 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 55.4436 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 19.6283 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 29.7701 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 20.2038 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 6.4253 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint is used to determine where a secret door should be placed. Note the system will randomly determine if a secret door should be placed. This chance can be adjusted by adjusting the module variable \"SecretDoorsChance\"\n\nThis waypoint should always be facing the wall on which you want it to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 12.301 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.9946 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint is used to determine where a secret door should be placed. Note the system will randomly determine if a secret door should be placed. This chance can be adjusted by adjusting the module variable \"SecretDoorsChance\"\n\nThis waypoint should always be facing the wall on which you want it to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 27.6151 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.998 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint is used to determine where a secret door should be placed. Note the system will randomly determine if a secret door should be placed. This chance can be adjusted by adjusting the module variable \"SecretDoorsChance\"\n\nThis waypoint should always be facing the wall on which you want it to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 37.5191 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 40.0052 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint is used to determine where a secret door should be placed. Note the system will randomly determine if a secret door should be placed. This chance can be adjusted by adjusting the module variable \"SecretDoorsChance\"\n\nThis waypoint should always be facing the wall on which you want it to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 19.9783 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 57.6525 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint is used to determine where a secret door should be placed. Note the system will randomly determine if a secret door should be placed. This chance can be adjusted by adjusting the module variable \"SecretDoorsChance\"\n\nThis waypoint should always be facing the wall on which you want it to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 2.3362 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 39.9831 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 19.8926 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 40.8048 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 21.8915 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 45.983 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 18.1324 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 46.2051 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 13.359 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 5.2106 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 26.8879 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 4.7183 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + } +} diff --git a/src/module/git/area005.git.json b/src/module/git/area005.git.json new file mode 100644 index 0000000..7aaa86f --- /dev/null +++ b/src/module/git/area005.git.json @@ -0,0 +1,8868 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 62 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 90 + }, + "AmbientSndNight": { + "type": "int", + "value": 62 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 90 + }, + "EnvAudio": { + "type": "int", + "value": 8 + }, + "MusicBattle": { + "type": "int", + "value": 70 + }, + "MusicDay": { + "type": "int", + "value": 37 + }, + "MusicDelay": { + "type": "int", + "value": 30000 + }, + "MusicNight": { + "type": "int", + "value": 37 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 99 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BridgeDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_06" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 45.18 + }, + "Y": { + "type": "float", + "value": 45.0 + }, + "Z": { + "type": "float", + "value": 1.87 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 1 + }, + "Appearance": { + "type": "dword", + "value": 59 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CryptExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_14" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 14.65 + }, + "Y": { + "type": "float", + "value": 25.31 + }, + "Z": { + "type": "float", + "value": 2.04 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 1 + }, + "Appearance": { + "type": "dword", + "value": 57 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.8885 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CaveExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_12" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 65.42 + }, + "Y": { + "type": "float", + "value": 4.67 + }, + "Z": { + "type": "float", + "value": 0.08 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 450 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84191 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 83443 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 933 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_MUSHRMS" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_mushrms" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 34.1302 + }, + "Y": { + "type": "float", + "value": 52.2875 + }, + "Z": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 299 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.3744 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68872 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 9188 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_mushrooms" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_mushrooms" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 28.2658 + }, + "Y": { + "type": "float", + "value": 41.4554 + }, + "Z": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 299 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.9817 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68872 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 9188 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_mushrooms" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_mushrooms" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 23.3606 + }, + "Y": { + "type": "float", + "value": 49.8877 + }, + "Z": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 169 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14721 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14719 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 527 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Shaft of Light - Green" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_solgreen" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 35.31 + }, + "Y": { + "type": "float", + "value": 42.66 + }, + "Z": { + "type": "float", + "value": 3.5 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 169 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14721 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14719 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 527 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Shaft of Light - Green" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_solgreen" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 35.36 + }, + "Y": { + "type": "float", + "value": 47.23 + }, + "Z": { + "type": "float", + "value": 3.5 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 169 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14721 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14719 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 527 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ShaftofLightGreen" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_solgreen" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 54.68 + }, + "Y": { + "type": "float", + "value": 42.66 + }, + "Z": { + "type": "float", + "value": 3.5 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 171 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14722 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14719 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 529 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ShaftofLightOrange" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_solorange" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 40.04 + }, + "Y": { + "type": "float", + "value": 47.27 + }, + "Z": { + "type": "float", + "value": 3.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 171 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "A searing shaft of orange light descends from some unseen place above.", + "id": 14722 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14719 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 529 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ShaftofLightOrange" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_solorange" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 49.92 + }, + "Y": { + "type": "float", + "value": 46.99 + }, + "Z": { + "type": "float", + "value": 3.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 171 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14722 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14719 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 529 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ShaftofLightOrange" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_solorange" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 49.9 + }, + "Y": { + "type": "float", + "value": 42.5 + }, + "Z": { + "type": "float", + "value": 3.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 171 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14722 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14719 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 529 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Shaft of Light - Orange" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_solorange" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 39.98 + }, + "Y": { + "type": "float", + "value": 42.48 + }, + "Z": { + "type": "float", + "value": 3.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 172 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14725 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14719 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 530 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ShaftofLightRed" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_solred" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 45.11 + }, + "Y": { + "type": "float", + "value": 42.52 + }, + "Z": { + "type": "float", + "value": 2.02 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 169 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14721 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14719 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 527 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ShaftofLightGreen" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_solgreen" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 54.68 + }, + "Y": { + "type": "float", + "value": 47.43 + }, + "Z": { + "type": "float", + "value": 3.5 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 172 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14725 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14719 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 530 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ShaftofLightRed" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_solred" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 45.36 + }, + "Y": { + "type": "float", + "value": 47.14 + }, + "Z": { + "type": "float", + "value": 1.5 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.1466 + }, + "PointY": { + "type": "float", + "value": 9.853 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.3706 + }, + "PointY": { + "type": "float", + "value": 1.468 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.1917 + }, + "PointY": { + "type": "float", + "value": 11.2139 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 57.828 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 18.6984 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.3404 + }, + "PointY": { + "type": "float", + "value": 9.637700000000001 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.663 + }, + "PointY": { + "type": "float", + "value": 0.01 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.8262 + }, + "PointY": { + "type": "float", + "value": 9.7338 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 61.4389 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.4293 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -7.7457 + }, + "PointY": { + "type": "float", + "value": -3.7056 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -6.4766 + }, + "PointY": { + "type": "float", + "value": -6.8126 + }, + "PointZ": { + "type": "float", + "value": 1.1772 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.979 + }, + "PointY": { + "type": "float", + "value": -1.6073 + }, + "PointZ": { + "type": "float", + "value": 1.096 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 2.1141 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 53.4281 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 13.0876 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.7037 + }, + "PointY": { + "type": "float", + "value": 10.2798 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.947 + }, + "PointY": { + "type": "float", + "value": 3.6394 + }, + "PointZ": { + "type": "float", + "value": 0.8791 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.9993 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0305 + }, + "PointY": { + "type": "float", + "value": -0.321 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.1568 + }, + "PointY": { + "type": "float", + "value": 10.1299 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 56.9868 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 31.5404 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.9988 + }, + "PointY": { + "type": "float", + "value": -0.0347 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.373 + }, + "PointY": { + "type": "float", + "value": 8.825699999999999 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.6396 + }, + "PointY": { + "type": "float", + "value": 10.1742 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 61.5015 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 31.2983 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.3168 + }, + "PointY": { + "type": "float", + "value": 4.5843 + }, + "PointZ": { + "type": "float", + "value": 1.4529 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.5873 + }, + "PointY": { + "type": "float", + "value": 1.0012 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0391 + }, + "PointY": { + "type": "float", + "value": 5.7673 + }, + "PointZ": { + "type": "float", + "value": 1.2317 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 56.2335 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 49.0126 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.0672 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.3241 + }, + "PointY": { + "type": "float", + "value": 0.0347 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.3298 + }, + "PointY": { + "type": "float", + "value": 5.764 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.2162 + }, + "PointY": { + "type": "float", + "value": 5.0178 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 56.1723 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 42.6358 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.6633 + }, + "PointY": { + "type": "float", + "value": 0.6502 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.5185999999999999 + }, + "PointY": { + "type": "float", + "value": 8.594099999999999 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.8195 + }, + "PointY": { + "type": "float", + "value": 8.961600000000001 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 61.7957 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 42.6429 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.6759 + }, + "PointY": { + "type": "float", + "value": 5.9911 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.118 + }, + "PointY": { + "type": "float", + "value": 4.886 + }, + "PointZ": { + "type": "float", + "value": 1.2408 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.1672 + }, + "PointY": { + "type": "float", + "value": 7.9362 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 33.5819 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 50.9862 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.3436 + }, + "PointY": { + "type": "float", + "value": 6.9624 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.6669 + }, + "PointY": { + "type": "float", + "value": -0.08740000000000001 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.2954 + }, + "PointY": { + "type": "float", + "value": 7.489 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 30.3064 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 52.2457 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.9222 + }, + "PointY": { + "type": "float", + "value": 1.2455 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.1267 + }, + "PointY": { + "type": "float", + "value": 7.123 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.0357 + }, + "PointY": { + "type": "float", + "value": 7.2978 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 34.2196 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 41.4822 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.4812 + }, + "PointY": { + "type": "float", + "value": 0.856 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.6883 + }, + "PointY": { + "type": "float", + "value": 7.5977 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.4198 + }, + "PointY": { + "type": "float", + "value": 7.9845 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 30.3506 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 40.9437 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.9165 + }, + "PointY": { + "type": "float", + "value": -6.1534 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 7.5018 + }, + "PointY": { + "type": "float", + "value": -4.8696 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4619 + }, + "PointY": { + "type": "float", + "value": 1.1839 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 31.0789 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 36.7673 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -5.825 + }, + "PointY": { + "type": "float", + "value": 6.0178 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.2001 + }, + "PointY": { + "type": "float", + "value": 1.1664 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.8521 + }, + "PointY": { + "type": "float", + "value": 6.9244 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 38.7915 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 32.4482 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.8583 + }, + "PointY": { + "type": "float", + "value": -1.4054 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 7.5168 + }, + "PointY": { + "type": "float", + "value": 5.0226 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.1407 + }, + "PointY": { + "type": "float", + "value": 5.6724 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 29.9576 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 24.0544 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9216 + }, + "PointY": { + "type": "float", + "value": -0.5342 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 7.6372 + }, + "PointY": { + "type": "float", + "value": 5.3343 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.745 + }, + "PointY": { + "type": "float", + "value": 6.6998 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 31.1808 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 22.2211 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.182 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.3091 + }, + "PointY": { + "type": "float", + "value": 0.6995 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.1546 + }, + "PointY": { + "type": "float", + "value": 2.9711 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 23.518 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 17.0945 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.3468 + }, + "PointY": { + "type": "float", + "value": -2.7351 + }, + "PointZ": { + "type": "float", + "value": 1.0953 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.2481 + }, + "PointY": { + "type": "float", + "value": 0.3985 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 23.3928 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 21.2504 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 41.1388 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 31.4426 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 59.4458 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 23.9929 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 14.4031 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 14.9832 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 48.0057 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 9.4985 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 67.5763 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 7.9777 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": -0.0 + }, + "XPosition": { + "type": "float", + "value": 14.3712 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 20.9646 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + }, + "XOrientation": { + "type": "float", + "value": 0.3827 + }, + "XPosition": { + "type": "float", + "value": 29.0055 + }, + "YOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 51.5619 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 31.1384 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 60.7536 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 60.5505 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 53.4147 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 17.3882 + }, + "YOrientation": { + "type": "float", + "value": -0.5556 + }, + "YPosition": { + "type": "float", + "value": 35.5628 + }, + "ZPosition": { + "type": "float", + "value": 1.01 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 17.812 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 48.7391 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 28.2924 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 62.4575 + }, + "ZPosition": { + "type": "float", + "value": 1.01 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 61.6945 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 35.0128 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 44.6781 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 13.6496 + }, + "ZPosition": { + "type": "float", + "value": 1.3882 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.9808 + }, + "XPosition": { + "type": "float", + "value": 20.8281 + }, + "YOrientation": { + "type": "float", + "value": -0.1951 + }, + "YPosition": { + "type": "float", + "value": 8.076000000000001 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 55.6805 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 26.4659 + }, + "ZPosition": { + "type": "float", + "value": 1.0833 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 61.1104 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 47.3138 + }, + "ZPosition": { + "type": "float", + "value": 1.01 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.7071 + }, + "XPosition": { + "type": "float", + "value": 27.6101 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 38.9206 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 32.5833 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 20.8372 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 33.0253 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 54.9102 + }, + "ZPosition": { + "type": "float", + "value": 1.0935 + } + } + ] + } +} diff --git a/src/module/git/area006.git.json b/src/module/git/area006.git.json new file mode 100644 index 0000000..d029878 --- /dev/null +++ b/src/module/git/area006.git.json @@ -0,0 +1,10402 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 66 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 66 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 41 + }, + "MusicDay": { + "type": "int", + "value": 50 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 50 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 49 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "JailExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_21" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 25.0 + }, + "Y": { + "type": "float", + "value": 55.1 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 60 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 9072 + } + }, + "DisarmDC": { + "type": "byte", + "value": 20 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 25 + }, + "GenericType": { + "type": "byte", + "value": 2 + }, + "Hardness": { + "type": "byte", + "value": 10 + }, + "HP": { + "type": "short", + "value": 60 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Steel Portcullis", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Portcullis" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_grate" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 2 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.0 + }, + "Y": { + "type": "float", + "value": 1.9 + }, + "Z": { + "type": "float", + "value": -0.01 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 31 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14705 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14706 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "reshuffle" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 389 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "PullRopeChain" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_pullrope" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 20.0492 + }, + "Y": { + "type": "float", + "value": 30.1245 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67911 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_cv_millwheel1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "MillWheel" + }, + "TemplateResRef": { + "type": "resref", + "value": "millwheel" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 2.7993 + }, + "YPosition": { + "type": "float", + "value": 15.0415 + }, + "ZPosition": { + "type": "float", + "value": 2.0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67911 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_cv_millwheel1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "MillWheel" + }, + "TemplateResRef": { + "type": "resref", + "value": "millwheel" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 37.7778 + }, + "YPosition": { + "type": "float", + "value": 24.9576 + }, + "ZPosition": { + "type": "float", + "value": 1.7 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67858 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 5.0 + }, + "MinDistance": { + "type": "float", + "value": 0.5 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_na_firesmldr1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "FireSmolder" + }, + "TemplateResRef": { + "type": "resref", + "value": "firesmolder" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 25.1373 + }, + "YPosition": { + "type": "float", + "value": 33.2163 + }, + "ZPosition": { + "type": "float", + "value": 1.6637 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67858 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 5.0 + }, + "MinDistance": { + "type": "float", + "value": 0.5 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_na_firesmldr1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "FireSmolder" + }, + "TemplateResRef": { + "type": "resref", + "value": "firesmolder" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 23.1525 + }, + "YPosition": { + "type": "float", + "value": 24.9607 + }, + "ZPosition": { + "type": "float", + "value": 1.6566 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67858 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 5.0 + }, + "MinDistance": { + "type": "float", + "value": 0.5 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_na_firesmldr1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "FireSmolder" + }, + "TemplateResRef": { + "type": "resref", + "value": "firesmolder" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 16.9332 + }, + "YPosition": { + "type": "float", + "value": 35.1028 + }, + "ZPosition": { + "type": "float", + "value": 1.6566 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67858 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 5.0 + }, + "MinDistance": { + "type": "float", + "value": 0.5 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_na_firesmldr1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "FireSmolder" + }, + "TemplateResRef": { + "type": "resref", + "value": "firesmolder" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 14.8971 + }, + "YPosition": { + "type": "float", + "value": 26.8567 + }, + "ZPosition": { + "type": "float", + "value": 1.662 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68010 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 10.0 + }, + "RandomRangeY": { + "type": "float", + "value": 10.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingm1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingm2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingm3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingm4" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingm5" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingm6" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WailsMen" + }, + "TemplateResRef": { + "type": "resref", + "value": "wailsmen" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 7.6847 + }, + "YPosition": { + "type": "float", + "value": 36.0339 + }, + "ZPosition": { + "type": "float", + "value": 1.5 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68009 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 10.0 + }, + "RandomRangeY": { + "type": "float", + "value": 10.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingcf1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingcf2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingcm1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingcm2" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WailsChildren" + }, + "TemplateResRef": { + "type": "resref", + "value": "wailschildren" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 7.665 + }, + "YPosition": { + "type": "float", + "value": 26.1177 + }, + "ZPosition": { + "type": "float", + "value": 1.5 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68010 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 10.0 + }, + "RandomRangeY": { + "type": "float", + "value": 10.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingm1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingm2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingm3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingm4" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingm5" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingm6" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WailsMen" + }, + "TemplateResRef": { + "type": "resref", + "value": "wailsmen" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 16.3699 + }, + "YPosition": { + "type": "float", + "value": 13.7669 + }, + "ZPosition": { + "type": "float", + "value": 1.5 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68011 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 10.0 + }, + "RandomRangeY": { + "type": "float", + "value": 10.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingf1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingf2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingf3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingf4" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingf5" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_wailingf6" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WailsWomen" + }, + "TemplateResRef": { + "type": "resref", + "value": "wailswomen" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 32.4789 + }, + "YPosition": { + "type": "float", + "value": 34.0249 + }, + "ZPosition": { + "type": "float", + "value": 1.5 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.0217 + }, + "PointY": { + "type": "float", + "value": 0.0546 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.9892 + }, + "PointY": { + "type": "float", + "value": 5.0152 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.075 + }, + "PointY": { + "type": "float", + "value": 4.8322 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 9.898099999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 9.9948 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0142 + }, + "PointY": { + "type": "float", + "value": 4.9427 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -5.0446 + }, + "PointY": { + "type": "float", + "value": 5.0495 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -5.0748 + }, + "PointY": { + "type": "float", + "value": 0.0111 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 19.9946 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 10.0382 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.1166 + }, + "PointY": { + "type": "float", + "value": 4.7802 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.7072 + }, + "PointY": { + "type": "float", + "value": 4.823 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.7242 + }, + "PointY": { + "type": "float", + "value": -0.0407 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 24.7215 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 10.01 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.1977 + }, + "PointY": { + "type": "float", + "value": 4.968 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.254 + }, + "PointY": { + "type": "float", + "value": 5.0039 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5053 + }, + "PointY": { + "type": "float", + "value": 0.0101 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 24.7873 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 9.944599999999999 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0568 + }, + "PointY": { + "type": "float", + "value": 4.8598 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.4865 + }, + "PointY": { + "type": "float", + "value": 4.7759 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -5.1021 + }, + "PointY": { + "type": "float", + "value": 0.2178 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 9.8375 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 10.0501 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.0553 + }, + "PointY": { + "type": "float", + "value": 4.9017 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.3607 + }, + "PointY": { + "type": "float", + "value": 4.8537 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.6014 + }, + "PointY": { + "type": "float", + "value": 3.039 + }, + "PointZ": { + "type": "float", + "value": 0.125 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.3312 + }, + "PointY": { + "type": "float", + "value": -0.162 + }, + "PointZ": { + "type": "float", + "value": 0.125 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 9.249599999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 4.4725 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.3109 + }, + "PointY": { + "type": "float", + "value": 1.2992 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.1188 + }, + "PointY": { + "type": "float", + "value": -1.8004 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.9156 + }, + "PointY": { + "type": "float", + "value": -1.7587 + }, + "PointZ": { + "type": "float", + "value": 0.125 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.125 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 24.3087 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 7.4555 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4723 + }, + "PointY": { + "type": "float", + "value": 3.1055 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.7966 + }, + "PointY": { + "type": "float", + "value": 2.8375 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.8809 + }, + "PointY": { + "type": "float", + "value": -1.8523 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.8993 + }, + "PointY": { + "type": "float", + "value": -2.091 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.141 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 16.8999 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -5.1538 + }, + "PointY": { + "type": "float", + "value": -0.0316 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -5.0639 + }, + "PointY": { + "type": "float", + "value": -4.9115 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.09089999999999999 + }, + "PointY": { + "type": "float", + "value": -4.6675 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.0792 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 20.0374 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.0978 + }, + "PointY": { + "type": "float", + "value": 0.065 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0722 + }, + "PointY": { + "type": "float", + "value": -4.2129 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.8356 + }, + "PointY": { + "type": "float", + "value": -3.2548 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.3516 + }, + "PointY": { + "type": "float", + "value": -4.6265 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.7942 + }, + "PointY": { + "type": "float", + "value": -4.8309 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 9.968299999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.978 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.4536 + }, + "PointY": { + "type": "float", + "value": 0.1755 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.8247 + }, + "PointY": { + "type": "float", + "value": -4.8434 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.2662 + }, + "PointY": { + "type": "float", + "value": -4.9132 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 5.6152 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 24.9456 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.2213 + }, + "PointY": { + "type": "float", + "value": 2.8807 + }, + "PointZ": { + "type": "float", + "value": 0.125 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.3181 + }, + "PointY": { + "type": "float", + "value": 2.7184 + }, + "PointZ": { + "type": "float", + "value": 0.125 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.9358 + }, + "PointY": { + "type": "float", + "value": -0.0175 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 21.8173 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 21.0376 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0396 + }, + "PointY": { + "type": "float", + "value": 4.1835 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.925 + }, + "PointY": { + "type": "float", + "value": 3.5108 + }, + "PointZ": { + "type": "float", + "value": 0.125 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.9602 + }, + "PointY": { + "type": "float", + "value": 3.5874 + }, + "PointZ": { + "type": "float", + "value": 0.125 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.9289 + }, + "PointY": { + "type": "float", + "value": 4.5865 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.0703 + }, + "PointY": { + "type": "float", + "value": -0.337 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.7089 + }, + "PointY": { + "type": "float", + "value": 0.7227 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.9115 + }, + "PointY": { + "type": "float", + "value": 0.6935 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 29.1146 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 28.1566 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.5548 + }, + "PointY": { + "type": "float", + "value": 4.9198 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.08459999999999999 + }, + "PointY": { + "type": "float", + "value": 4.2052 + }, + "PointZ": { + "type": "float", + "value": 0.125 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.6119 + }, + "PointY": { + "type": "float", + "value": 4.1343 + }, + "PointZ": { + "type": "float", + "value": 0.125 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.5377 + }, + "PointY": { + "type": "float", + "value": 5.1979 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.557 + }, + "PointY": { + "type": "float", + "value": 0.1177 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.6993 + }, + "PointY": { + "type": "float", + "value": 0.6669 + }, + "PointZ": { + "type": "float", + "value": 0.125 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.5905 + }, + "PointY": { + "type": "float", + "value": 0.6532 + }, + "PointZ": { + "type": "float", + "value": 0.125 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.125 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 14.3892 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 27.7375 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -5.3412 + }, + "PointY": { + "type": "float", + "value": 0.0835 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.5163 + }, + "PointY": { + "type": "float", + "value": -0.4186 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.1945 + }, + "PointY": { + "type": "float", + "value": -2.8959 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -5.1303 + }, + "PointY": { + "type": "float", + "value": -3.8004 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.1304 + }, + "PointY": { + "type": "float", + "value": -3.9056 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.9292 + }, + "PointY": { + "type": "float", + "value": -3.1646 + }, + "PointZ": { + "type": "float", + "value": 0.125 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.9413 + }, + "PointY": { + "type": "float", + "value": -0.9167999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.125 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 22.765 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 39.3 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.6182 + }, + "PointY": { + "type": "float", + "value": -0.1944 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0249 + }, + "PointY": { + "type": "float", + "value": -4.8297 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.1106 + }, + "PointY": { + "type": "float", + "value": -4.8654 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 30.3535 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 30.0324 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.405 + }, + "PointY": { + "type": "float", + "value": -0.6802 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0645 + }, + "PointY": { + "type": "float", + "value": -5.0723 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.1944 + }, + "PointY": { + "type": "float", + "value": -4.972 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 30.2973 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 40.2357 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.6757 + }, + "PointY": { + "type": "float", + "value": 0.4729 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.309 + }, + "PointY": { + "type": "float", + "value": -5.7986 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0517 + }, + "PointY": { + "type": "float", + "value": -4.9338 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 11.9415 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 38.474 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.8024 + }, + "PointY": { + "type": "float", + "value": 0.7599 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.2649 + }, + "PointY": { + "type": "float", + "value": -4.7397 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0917 + }, + "PointY": { + "type": "float", + "value": -5.3279 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 5.5996 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 38.203 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.1278 + }, + "PointY": { + "type": "float", + "value": 4.9724 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.4853 + }, + "PointY": { + "type": "float", + "value": 5.2053 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.7037 + }, + "PointY": { + "type": "float", + "value": -0.6418 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 33.2151 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 43.1889 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0434 + }, + "PointY": { + "type": "float", + "value": 6.2705 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5651 + }, + "PointY": { + "type": "float", + "value": 6.0152 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.2938 + }, + "PointY": { + "type": "float", + "value": -0.2455 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 29.2896 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 42.1075 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.125 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.9792 + }, + "PointY": { + "type": "float", + "value": 2.7779 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.6848 + }, + "PointY": { + "type": "float", + "value": 2.2556 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.8434 + }, + "PointY": { + "type": "float", + "value": -0.9495 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 34.3956 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 51.7032 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5845 + }, + "PointY": { + "type": "float", + "value": 4.6117 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.6034 + }, + "PointY": { + "type": "float", + "value": 4.4631 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.9228 + }, + "PointY": { + "type": "float", + "value": 0.1063 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 20.8989 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 42.9805 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.1051 + }, + "PointY": { + "type": "float", + "value": 3.2679 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.0365 + }, + "PointY": { + "type": "float", + "value": 4.7593 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.7293 + }, + "PointY": { + "type": "float", + "value": 2.0913 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 16.4533 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 45.2976 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.1106 + }, + "PointY": { + "type": "float", + "value": 1.8004 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.8635 + }, + "PointY": { + "type": "float", + "value": 3.7588 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.9449 + }, + "PointY": { + "type": "float", + "value": 3.0938 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.1595 + }, + "PointY": { + "type": "float", + "value": 1.7725 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.1172 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 42.9271 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0514 + }, + "PointY": { + "type": "float", + "value": 1.6321 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -6.9232 + }, + "PointY": { + "type": "float", + "value": 1.7041 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -6.9406 + }, + "PointY": { + "type": "float", + "value": 0.4518 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 20.6357 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 40.5252 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.4796 + }, + "PointY": { + "type": "float", + "value": 2.2938 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -7.2309 + }, + "PointY": { + "type": "float", + "value": -0.2533 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -6.5537 + }, + "PointY": { + "type": "float", + "value": -1.6659 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 12.1757 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 40.8274 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.8905 + }, + "PointY": { + "type": "float", + "value": 2.1844 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.5252 + }, + "PointY": { + "type": "float", + "value": 3.4025 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -5.2688 + }, + "PointY": { + "type": "float", + "value": 1.8616 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 28.1806 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 38.3875 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.8932 + }, + "PointY": { + "type": "float", + "value": 2.2929 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -5.8003 + }, + "PointY": { + "type": "float", + "value": -2.9489 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.5923 + }, + "PointY": { + "type": "float", + "value": -4.4955 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 31.3972 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 21.6482 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 17.9785 + }, + "YOrientation": { + "type": "float", + "value": -0.3827 + }, + "YPosition": { + "type": "float", + "value": 48.7396 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.8315 + }, + "XPosition": { + "type": "float", + "value": 29.5282 + }, + "YOrientation": { + "type": "float", + "value": -0.5556 + }, + "YPosition": { + "type": "float", + "value": 43.028 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.7071 + }, + "XPosition": { + "type": "float", + "value": 6.7223 + }, + "YOrientation": { + "type": "float", + "value": -0.7071 + }, + "YPosition": { + "type": "float", + "value": 29.4482 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 10.6401 + }, + "YOrientation": { + "type": "float", + "value": -0.3827 + }, + "YPosition": { + "type": "float", + "value": 19.4583 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 28.5382 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 17.6237 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 30.7523 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 23.223 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.9808 + }, + "XPosition": { + "type": "float", + "value": 38.3955 + }, + "YOrientation": { + "type": "float", + "value": 0.1951 + }, + "YPosition": { + "type": "float", + "value": 14.7308 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.317 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 2.5388 + }, + "ZPosition": { + "type": "float", + "value": 0.1 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 4.9702 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 1.7052 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 2.6225 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 17.9878 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 3.648 + }, + "YOrientation": { + "type": "float", + "value": -0.3827 + }, + "YPosition": { + "type": "float", + "value": 38.6283 + }, + "ZPosition": { + "type": "float", + "value": 0.1994 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 3.9387 + }, + "YOrientation": { + "type": "float", + "value": -0.5556 + }, + "YPosition": { + "type": "float", + "value": 28.7663 + }, + "ZPosition": { + "type": "float", + "value": 0.0115 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.7071 + }, + "XPosition": { + "type": "float", + "value": 6.7357 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 43.4352 + }, + "ZPosition": { + "type": "float", + "value": 0.1 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.7071 + }, + "XPosition": { + "type": "float", + "value": 16.9645 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 53.2865 + }, + "ZPosition": { + "type": "float", + "value": 0.1 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.1951 + }, + "XPosition": { + "type": "float", + "value": 35.0859 + }, + "YOrientation": { + "type": "float", + "value": 0.9808 + }, + "YPosition": { + "type": "float", + "value": 55.9741 + }, + "ZPosition": { + "type": "float", + "value": 0.0141 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 38.5464 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 45.568 + }, + "ZPosition": { + "type": "float", + "value": 0.1 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.8315 + }, + "XPosition": { + "type": "float", + "value": 35.8916 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 31.3432 + }, + "ZPosition": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.9808 + }, + "XPosition": { + "type": "float", + "value": 37.5842 + }, + "YOrientation": { + "type": "float", + "value": -0.1951 + }, + "YPosition": { + "type": "float", + "value": 21.9074 + }, + "ZPosition": { + "type": "float", + "value": 0.1 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 33.7054 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 29.6356 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 37.0261 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 45.4637 + }, + "ZPosition": { + "type": "float", + "value": 0.1 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 34.7143 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 55.177 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 36.1185 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 14.4417 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 3.8321 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 3.5895 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 24.9704 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 4.6551 + }, + "ZPosition": { + "type": "float", + "value": 0.1 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.131 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 4.1811 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.0362 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 51.8363 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + } + ] + } +} diff --git a/src/module/git/area007.git.json b/src/module/git/area007.git.json new file mode 100644 index 0000000..e2f1f89 --- /dev/null +++ b/src/module/git/area007.git.json @@ -0,0 +1,4592 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 66 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 66 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 41 + }, + "MusicDay": { + "type": "int", + "value": 50 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 50 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 50 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "door_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CastleExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_22" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 45.0 + }, + "Y": { + "type": "float", + "value": 23.73 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 50 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "door_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CastleExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_22" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 45.0 + }, + "Y": { + "type": "float", + "value": 66.27 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 279 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68934 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68933 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "reshuffle" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "reshuffle" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 756 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x0_tome" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_tome" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 36.2373 + }, + "Y": { + "type": "float", + "value": 41.9064 + }, + "Z": { + "type": "float", + "value": 0.42 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 245 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.3927 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 66687 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 66686 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 805 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x0_bearskinrug1" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_bearskinrug1" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 44.4619 + }, + "Y": { + "type": "float", + "value": 43.0428 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 61 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14589 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5703 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "nw_02_onoff" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 419 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Candelabra" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_candelabra" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 46.6296 + }, + "Y": { + "type": "float", + "value": 47.9208 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 61 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14589 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5703 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "nw_02_onoff" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 419 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Candelabra" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_candelabra" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 39.4662 + }, + "Y": { + "type": "float", + "value": 47.778 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.9953 + }, + "PointY": { + "type": "float", + "value": -0.1765 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 8.8058 + }, + "PointY": { + "type": "float", + "value": 3.9296 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.0455 + }, + "PointY": { + "type": "float", + "value": 5.1811 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 47.0414 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 49.5413 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -7.7914 + }, + "PointY": { + "type": "float", + "value": 2.8268 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.5451 + }, + "PointY": { + "type": "float", + "value": -0.9149 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.1264 + }, + "PointY": { + "type": "float", + "value": 5.4743 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 40.2416 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 50.422 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.9271 + }, + "PointY": { + "type": "float", + "value": 0.1706 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 7.8744 + }, + "PointY": { + "type": "float", + "value": 3.7894 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.973 + }, + "PointY": { + "type": "float", + "value": 5.5585 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.7283 + }, + "PointY": { + "type": "float", + "value": 6.0223 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.572 + }, + "PointY": { + "type": "float", + "value": 3.4751 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 40.8591 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 50.9595 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.3551 + }, + "PointY": { + "type": "float", + "value": -3.3045 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 10.8993 + }, + "PointY": { + "type": "float", + "value": -2.8033 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 11.5332 + }, + "PointY": { + "type": "float", + "value": 1.4195 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 34.9307 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 48.1617 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.794 + }, + "PointY": { + "type": "float", + "value": 5.6912 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.6798 + }, + "PointY": { + "type": "float", + "value": 3.4987 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.8374 + }, + "PointY": { + "type": "float", + "value": 6.6663 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 52.6033 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 42.1243 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 7.6849 + }, + "PointY": { + "type": "float", + "value": -6.3353 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 8.5025 + }, + "PointY": { + "type": "float", + "value": -2.9103 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.9275 + }, + "PointY": { + "type": "float", + "value": 0.3774 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 33.4055 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 44.3761 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.3985 + }, + "PointY": { + "type": "float", + "value": 3.171 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.1226 + }, + "PointY": { + "type": "float", + "value": 6.9869 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.9402 + }, + "PointY": { + "type": "float", + "value": 9.930899999999999 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 49.3093 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 31.5321 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.1533 + }, + "PointY": { + "type": "float", + "value": -2.9141 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 8.281700000000001 + }, + "PointY": { + "type": "float", + "value": 2.7713 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.9363 + }, + "PointY": { + "type": "float", + "value": 4.5371 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 37.9829 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 32.1121 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 64.85209999999999 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 49.6785 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 24.1278 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 50.6533 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 34.8448 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 35.0438 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 55.8833 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 34.8417 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 44.9394 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 65.1735 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 44.9343 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 25.6321 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 45.3597 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 47.6019 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 55.0526 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 65.40170000000001 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.1951 + }, + "XPosition": { + "type": "float", + "value": 34.5635 + }, + "YOrientation": { + "type": "float", + "value": -0.9808 + }, + "YPosition": { + "type": "float", + "value": 24.1577 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.8315 + }, + "XPosition": { + "type": "float", + "value": 55.8178 + }, + "YOrientation": { + "type": "float", + "value": -0.5556 + }, + "YPosition": { + "type": "float", + "value": 24.165 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.9808 + }, + "XPosition": { + "type": "float", + "value": 35.5264 + }, + "YOrientation": { + "type": "float", + "value": -0.1951 + }, + "YPosition": { + "type": "float", + "value": 66.0964 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 22.2296 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 48.8511 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 67.5622 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 49.5182 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 65.85129999999999 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 54.9323 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.9808 + }, + "XPosition": { + "type": "float", + "value": 65.7239 + }, + "YOrientation": { + "type": "float", + "value": -0.1951 + }, + "YPosition": { + "type": "float", + "value": 44.2164 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 27.7742 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 57.3567 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.5556 + }, + "XPosition": { + "type": "float", + "value": 52.7625 + }, + "YOrientation": { + "type": "float", + "value": 0.8315 + }, + "YPosition": { + "type": "float", + "value": 56.2447 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 39.7571 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 55.7463 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 49.402 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 42.7216 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.9808 + }, + "XPosition": { + "type": "float", + "value": 39.3178 + }, + "YOrientation": { + "type": "float", + "value": 0.1951 + }, + "YPosition": { + "type": "float", + "value": 37.5834 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 49.7234 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 29.6261 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.5556 + }, + "XPosition": { + "type": "float", + "value": 39.2807 + }, + "YOrientation": { + "type": "float", + "value": 0.8315 + }, + "YPosition": { + "type": "float", + "value": 42.4671 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + } +} diff --git a/src/module/git/area008.git.json b/src/module/git/area008.git.json new file mode 100644 index 0000000..c4e27aa --- /dev/null +++ b/src/module/git/area008.git.json @@ -0,0 +1,7166 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 47 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 47 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 37 + }, + "MusicDay": { + "type": "int", + "value": 7 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 8 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 55 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "door_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SewerExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_26" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 26.38 + }, + "Y": { + "type": "float", + "value": 45.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Generic" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 30.0 + }, + "Y": { + "type": "float", + "value": 35.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 13.86 + }, + "Y": { + "type": "float", + "value": 15.0 + }, + "Z": { + "type": "float", + "value": -0.8 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 468 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84588 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Control Panel", + "id": 84570 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "reshuffle" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 1004 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_MFDCONT2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_mfdcont2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 55.9295 + }, + "Y": { + "type": "float", + "value": 46.9925 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 179 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14593 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5822 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "on_used_sit" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 537 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Chair" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_chair" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 55.752 + }, + "Y": { + "type": "float", + "value": 45.0429 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67953 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 10.0 + }, + "RandomRangeY": { + "type": "float", + "value": 10.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_cv_sewermisc1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_cv_sewermisc2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_cv_sewermisc3" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "SewerGloops" + }, + "TemplateResRef": { + "type": "resref", + "value": "sewergloops" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 40.7222 + }, + "YPosition": { + "type": "float", + "value": 45.3093 + }, + "ZPosition": { + "type": "float", + "value": 1.5 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67976 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_steamlong1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_steamlong2" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "SteamLongBursts" + }, + "TemplateResRef": { + "type": "resref", + "value": "steamlongbursts" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 35.0125 + }, + "YPosition": { + "type": "float", + "value": 54.7375 + }, + "ZPosition": { + "type": "float", + "value": 1.6182 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67976 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_steamlong1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_steamlong2" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "SteamLongBursts" + }, + "TemplateResRef": { + "type": "resref", + "value": "steamlongbursts" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 48.2838 + }, + "YPosition": { + "type": "float", + "value": 55.4556 + }, + "ZPosition": { + "type": "float", + "value": 1.51 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67976 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_steamlong1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_steamlong2" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "SteamLongBursts" + }, + "TemplateResRef": { + "type": "resref", + "value": "steamlongbursts" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 58.5307 + }, + "YPosition": { + "type": "float", + "value": 55.4659 + }, + "ZPosition": { + "type": "float", + "value": 1.51 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67976 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_steamlong1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_steamlong2" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "SteamLongBursts" + }, + "TemplateResRef": { + "type": "resref", + "value": "steamlongbursts" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 68.258 + }, + "YPosition": { + "type": "float", + "value": 55.3208 + }, + "ZPosition": { + "type": "float", + "value": 1.51 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67976 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_steamlong1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_steamlong2" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "SteamLongBursts" + }, + "TemplateResRef": { + "type": "resref", + "value": "steamlongbursts" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 72.55889999999999 + }, + "YPosition": { + "type": "float", + "value": 56.5806 + }, + "ZPosition": { + "type": "float", + "value": 1.51 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67976 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_steamlong1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_steamlong2" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "SteamLongBursts" + }, + "TemplateResRef": { + "type": "resref", + "value": "steamlongbursts" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 61.8275 + }, + "YPosition": { + "type": "float", + "value": 34.2388 + }, + "ZPosition": { + "type": "float", + "value": 1.7 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67961 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_na_sludggrat2" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "SludgeGrate2" + }, + "TemplateResRef": { + "type": "resref", + "value": "sludgegrate2" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 44.963 + }, + "YPosition": { + "type": "float", + "value": 20.5786 + }, + "ZPosition": { + "type": "float", + "value": 1.4954 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67961 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_na_sludggrat2" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "SludgeGrate2" + }, + "TemplateResRef": { + "type": "resref", + "value": "sludgegrate2" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 35.1894 + }, + "YPosition": { + "type": "float", + "value": 15.398 + }, + "ZPosition": { + "type": "float", + "value": 1.7052 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67961 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_na_sludggrat2" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "SludgeGrate2" + }, + "TemplateResRef": { + "type": "resref", + "value": "sludgegrate2" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 25.3291 + }, + "YPosition": { + "type": "float", + "value": 14.6752 + }, + "ZPosition": { + "type": "float", + "value": 1.5698 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 3.0 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68018 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 8.0 + }, + "MinDistance": { + "type": "float", + "value": 0.8 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_na_waterfall1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WaterfallSmall" + }, + "TemplateResRef": { + "type": "resref", + "value": "waterfallsmal001" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 63 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 34.4918 + }, + "YPosition": { + "type": "float", + "value": 45.2237 + }, + "ZPosition": { + "type": "float", + "value": 2.0 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0065 + }, + "PointY": { + "type": "float", + "value": 0.2294 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.9893 + }, + "PointY": { + "type": "float", + "value": -2.7861 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0425 + }, + "PointY": { + "type": "float", + "value": -2.6966 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 28.4315 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 36.2998 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.1005 + }, + "PointY": { + "type": "float", + "value": -0.0415 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.1265 + }, + "PointY": { + "type": "float", + "value": 3.0356 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0974 + }, + "PointY": { + "type": "float", + "value": 3.0146 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 32.554 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 33.6289 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.1244 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.871 + }, + "PointY": { + "type": "float", + "value": 0.0401 + }, + "PointZ": { + "type": "float", + "value": 0.0273 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.0129 + }, + "PointY": { + "type": "float", + "value": 1.9206 + }, + "PointZ": { + "type": "float", + "value": 0.0371 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.1051 + }, + "PointY": { + "type": "float", + "value": 2.0034 + }, + "PointZ": { + "type": "float", + "value": 0.1438 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.7666 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 12.6274 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.1472 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.6243 + }, + "PointY": { + "type": "float", + "value": -0.0858 + }, + "PointZ": { + "type": "float", + "value": 0.0342 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.786 + }, + "PointY": { + "type": "float", + "value": 1.6745 + }, + "PointZ": { + "type": "float", + "value": 0.0654 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.1947 + }, + "PointY": { + "type": "float", + "value": 2.1652 + }, + "PointZ": { + "type": "float", + "value": 0.1715 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.9185 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 15.0899 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -5.6608 + }, + "PointY": { + "type": "float", + "value": 0.1834 + }, + "PointZ": { + "type": "float", + "value": 0.0308 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -5.5577 + }, + "PointY": { + "type": "float", + "value": -1.9032 + }, + "PointZ": { + "type": "float", + "value": 0.0287 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0169 + }, + "PointY": { + "type": "float", + "value": -1.8893 + }, + "PointZ": { + "type": "float", + "value": 0.1358 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.1679 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.357 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 14.5395 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.5997 + }, + "PointY": { + "type": "float", + "value": 0.1415 + }, + "PointZ": { + "type": "float", + "value": 0.0263 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.5167 + }, + "PointY": { + "type": "float", + "value": -1.8045 + }, + "PointZ": { + "type": "float", + "value": 0.0258 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0583 + }, + "PointY": { + "type": "float", + "value": -1.9408 + }, + "PointZ": { + "type": "float", + "value": 0.1673 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.1945 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 34.3137 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 17.0234 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0804 + }, + "PointY": { + "type": "float", + "value": 6.4379 + }, + "PointZ": { + "type": "float", + "value": 0.1258 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.052 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.7443 + }, + "PointY": { + "type": "float", + "value": 0.0887 + }, + "PointZ": { + "type": "float", + "value": -0.0197 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4783 + }, + "PointY": { + "type": "float", + "value": 6.4552 + }, + "PointZ": { + "type": "float", + "value": 0.1044 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 42.8727 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 18.1713 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.8364 + }, + "PointY": { + "type": "float", + "value": 0.0222 + }, + "PointZ": { + "type": "float", + "value": 0.08939999999999999 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.8183 + }, + "PointY": { + "type": "float", + "value": -6.3422 + }, + "PointZ": { + "type": "float", + "value": -0.021 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.1952 + }, + "PointY": { + "type": "float", + "value": -6.3048 + }, + "PointZ": { + "type": "float", + "value": 0.0688 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.063 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 47.0766 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 24.5009 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0649 + }, + "PointY": { + "type": "float", + "value": -1.3961 + }, + "PointZ": { + "type": "float", + "value": 0.08599999999999999 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.6238 + }, + "PointY": { + "type": "float", + "value": -1.3071 + }, + "PointZ": { + "type": "float", + "value": -0.0449 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.7114 + }, + "PointY": { + "type": "float", + "value": 0.2233 + }, + "PointZ": { + "type": "float", + "value": 0.0359 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.1341 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 42.3364 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 17.367 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.9495 + }, + "PointY": { + "type": "float", + "value": -4.1553 + }, + "PointZ": { + "type": "float", + "value": 0.0372 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4504 + }, + "PointY": { + "type": "float", + "value": -4.0699 + }, + "PointZ": { + "type": "float", + "value": 0.0965 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.618 + }, + "PointY": { + "type": "float", + "value": -2.6138 + }, + "PointZ": { + "type": "float", + "value": 0.0548 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5239 + }, + "PointY": { + "type": "float", + "value": -0.275 + }, + "PointZ": { + "type": "float", + "value": 0.0259 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": -0.0162 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.4162 + }, + "PointY": { + "type": "float", + "value": -1.7045 + }, + "PointZ": { + "type": "float", + "value": -0.06710000000000001 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.9393 + }, + "PointY": { + "type": "float", + "value": -2.4153 + }, + "PointZ": { + "type": "float", + "value": 0.0114 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 45.4776 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 17.2322 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -6.5317 + }, + "PointY": { + "type": "float", + "value": 6.1304 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5755 + }, + "PointY": { + "type": "float", + "value": 0.0053 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.8408 + }, + "PointY": { + "type": "float", + "value": 6.851 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 47.3125 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 27.1627 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -6.3026 + }, + "PointY": { + "type": "float", + "value": 5.0373 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5088 + }, + "PointY": { + "type": "float", + "value": 0.1563 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.8963 + }, + "PointY": { + "type": "float", + "value": 6.0843 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 44.134 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 26.8953 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.8321 + }, + "PointY": { + "type": "float", + "value": 6.1089 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.1199 + }, + "PointY": { + "type": "float", + "value": 1.4839 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.7297 + }, + "PointY": { + "type": "float", + "value": 7.2261 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 37.4047 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 32.2893 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.1486 + }, + "PointY": { + "type": "float", + "value": 6.0024 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5793 + }, + "PointY": { + "type": "float", + "value": 0.6534 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.3815 + }, + "PointY": { + "type": "float", + "value": 7.3109 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 40.4655 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 33.8836 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 67.8605 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 38.0106 + }, + "ZPosition": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.9808 + }, + "XPosition": { + "type": "float", + "value": 54.3221 + }, + "YOrientation": { + "type": "float", + "value": 0.1951 + }, + "YPosition": { + "type": "float", + "value": 45.596 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 68.75239999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 50.5629 + }, + "ZPosition": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.1951 + }, + "XPosition": { + "type": "float", + "value": 38.8999 + }, + "YOrientation": { + "type": "float", + "value": 0.9808 + }, + "YPosition": { + "type": "float", + "value": 35.1028 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.5556 + }, + "XPosition": { + "type": "float", + "value": 52.5445 + }, + "YOrientation": { + "type": "float", + "value": 0.8315 + }, + "YPosition": { + "type": "float", + "value": 30.0105 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 19.3706 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 52.107 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 16.1797 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 37.2038 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 40.286 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 55.8694 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 50.255 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 56.0597 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 75.6373 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 56.1808 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 74.05419999999999 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 56.2638 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 33.5686 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 39.5165 + }, + "ZPosition": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 70.04430000000001 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 33.3801 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 76.58110000000001 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 39.4926 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 73.9906 + }, + "YOrientation": { + "type": "float", + "value": -0.7071 + }, + "YPosition": { + "type": "float", + "value": 36.0379 + }, + "ZPosition": { + "type": "float", + "value": -0.2 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 68.3905 + }, + "YOrientation": { + "type": "float", + "value": -0.5556 + }, + "YPosition": { + "type": "float", + "value": 46.967 + }, + "ZPosition": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 35.8219 + }, + "YOrientation": { + "type": "float", + "value": -0.3827 + }, + "YPosition": { + "type": "float", + "value": 50.5335 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 35.4616 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 29.0445 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 44.9817 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 15.3779 + }, + "ZPosition": { + "type": "float", + "value": -0.0881 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 15.0748 + }, + "YOrientation": { + "type": "float", + "value": -0.7071 + }, + "YPosition": { + "type": "float", + "value": 50.955 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.8315 + }, + "XPosition": { + "type": "float", + "value": 16.6878 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 35.3125 + }, + "ZPosition": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 24.5146 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 45.0712 + }, + "ZPosition": { + "type": "float", + "value": 0.4206 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 15.8021 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 15.0472 + }, + "ZPosition": { + "type": "float", + "value": -0.1672 + } + } + ] + } +} diff --git a/src/module/git/area009.git.json b/src/module/git/area009.git.json new file mode 100644 index 0000000..5efa987 --- /dev/null +++ b/src/module/git/area009.git.json @@ -0,0 +1,5226 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 69 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 69 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 38 + }, + "MusicDay": { + "type": "int", + "value": 11 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 12 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 22 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_transition" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CorriDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_08" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 25.0 + }, + "Y": { + "type": "float", + "value": 15.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 35.0 + }, + "Y": { + "type": "float", + "value": 10.0 + }, + "Z": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 10.0 + }, + "Y": { + "type": "float", + "value": 5.0 + }, + "Z": { + "type": "float", + "value": 0.2 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 44 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.3562 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14542 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14541 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "reshuffle" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 402 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "AltarShrineGood" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_altrgood" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 5.4189 + }, + "Y": { + "type": "float", + "value": 15.182 + }, + "Z": { + "type": "float", + "value": 0.0128 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.8824 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.4371 + }, + "PointY": { + "type": "float", + "value": -0.0034 + }, + "PointZ": { + "type": "float", + "value": 1.0848 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.6795 + }, + "PointY": { + "type": "float", + "value": 1.6186 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0528 + }, + "PointY": { + "type": "float", + "value": 1.6186 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 18.1703 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 2.389 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.7813 + }, + "PointY": { + "type": "float", + "value": 2.3177 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.6268 + }, + "PointY": { + "type": "float", + "value": 0.1545 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.309 + }, + "PointY": { + "type": "float", + "value": 2.1632 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 20.7726 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 4.3939 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.704 + }, + "PointY": { + "type": "float", + "value": 2.2405 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.1632 + }, + "PointY": { + "type": "float", + "value": -0.07729999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.0044 + }, + "PointY": { + "type": "float", + "value": 2.1632 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 31.5887 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 4.4712 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.0848 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.3219 + }, + "PointY": { + "type": "float", + "value": -0.3857 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.5501 + }, + "PointY": { + "type": "float", + "value": 1.4674 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.6915 + }, + "PointY": { + "type": "float", + "value": 1.4674 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 28.5794 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 2.3857 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0044 + }, + "PointY": { + "type": "float", + "value": -1.3906 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.086 + }, + "PointY": { + "type": "float", + "value": -1.3906 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.3177 + }, + "PointY": { + "type": "float", + "value": -0.1545 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 23.0131 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 8.334099999999999 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.1545 + }, + "PointY": { + "type": "float", + "value": -1.0044 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.9358 + }, + "PointY": { + "type": "float", + "value": -1.0044 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.8542 + }, + "PointY": { + "type": "float", + "value": 0.5407999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.5626 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 8.025 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5452 + }, + "PointY": { + "type": "float", + "value": 1.8542 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4679 + }, + "PointY": { + "type": "float", + "value": 1.0816 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.7726 + }, + "PointY": { + "type": "float", + "value": 2.8585 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 23.1676 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 20.8498 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.7726 + }, + "PointY": { + "type": "float", + "value": -1.8542 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.3906 + }, + "PointY": { + "type": "float", + "value": -2.8585 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.4722 + }, + "PointY": { + "type": "float", + "value": -1.3134 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.7943 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 23.6311 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.1236 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0015 + }, + "PointY": { + "type": "float", + "value": -4.4691 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.8024 + }, + "PointY": { + "type": "float", + "value": -4.5467 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.7841 + }, + "PointY": { + "type": "float", + "value": -0.2624 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 20.7742 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 35.0959 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.2895 + }, + "PointY": { + "type": "float", + "value": -4.4394 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.2011 + }, + "PointY": { + "type": "float", + "value": -4.4394 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.3562 + }, + "PointY": { + "type": "float", + "value": -0.0956 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.1763 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 34.8335 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.2492 + }, + "PointY": { + "type": "float", + "value": 3.7856 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.121 + }, + "PointY": { + "type": "float", + "value": -0.1824 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.07729999999999999 + }, + "PointY": { + "type": "float", + "value": 3.1676 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 36.8422 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 32.5158 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.9603 + }, + "PointY": { + "type": "float", + "value": 2.7183 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0087 + }, + "PointY": { + "type": "float", + "value": 1.8542 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0211 + }, + "PointY": { + "type": "float", + "value": 4.6575 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 16.8324 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 20.8498 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.8322 + }, + "PointY": { + "type": "float", + "value": 2.7664 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0189 + }, + "PointY": { + "type": "float", + "value": 2.0141 + }, + "PointZ": { + "type": "float", + "value": 0.0485 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.1281 + }, + "PointY": { + "type": "float", + "value": 4.9296 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 13.4067 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 23.7233 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 34.9937 + }, + "YOrientation": { + "type": "float", + "value": -0.5556 + }, + "YPosition": { + "type": "float", + "value": 34.6554 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 24.7943 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 17.6349 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 24.9543 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 10.2253 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 11.9052 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 4.8947 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 35.4814 + }, + "YOrientation": { + "type": "float", + "value": -0.3827 + }, + "YPosition": { + "type": "float", + "value": 7.0008 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 9.7585 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 19.7452 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 2.2737 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 17.3393 + }, + "ZPosition": { + "type": "float", + "value": 0.2036 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.0 + }, + "XPosition": { + "type": "float", + "value": 7.4682 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 12.6135 + }, + "ZPosition": { + "type": "float", + "value": 0.2036 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.7071 + }, + "XPosition": { + "type": "float", + "value": 13.2651 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 36.7387 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 36.7749 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 36.7515 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.5556 + }, + "XPosition": { + "type": "float", + "value": 34.1461 + }, + "YOrientation": { + "type": "float", + "value": -0.8315 + }, + "YPosition": { + "type": "float", + "value": 26.1839 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.1336 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 31.2181 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 27.9411 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 32.8179 + }, + "ZPosition": { + "type": "float", + "value": 0.0196 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 22.165 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 32.8223 + }, + "ZPosition": { + "type": "float", + "value": 0.055 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.0 + }, + "XPosition": { + "type": "float", + "value": 24.977 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 34.0458 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 15.0947 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 35.0312 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 29.5167 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 25.3771 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.9808 + }, + "XPosition": { + "type": "float", + "value": 16.0833 + }, + "YOrientation": { + "type": "float", + "value": -0.1951 + }, + "YPosition": { + "type": "float", + "value": 28.5839 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.9808 + }, + "XPosition": { + "type": "float", + "value": 20.8245 + }, + "YOrientation": { + "type": "float", + "value": 0.1951 + }, + "YPosition": { + "type": "float", + "value": 25.6092 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 30.8986 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 31.393 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 5.8886 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 20.0986 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.1951 + }, + "XPosition": { + "type": "float", + "value": 11.0844 + }, + "YOrientation": { + "type": "float", + "value": -0.9808 + }, + "YPosition": { + "type": "float", + "value": 16.1845 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + } +} diff --git a/src/module/git/area010.git.json b/src/module/git/area010.git.json new file mode 100644 index 0000000..3bfcb0b --- /dev/null +++ b/src/module/git/area010.git.json @@ -0,0 +1,5528 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 97 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 98 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 40 + }, + "MusicDay": { + "type": "int", + "value": 52 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 52 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 78 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CorriDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_08" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 25.0 + }, + "Y": { + "type": "float", + "value": 15.0 + }, + "Z": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 10.0 + }, + "Y": { + "type": "float", + "value": 35.0 + }, + "Z": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 35.0 + }, + "Y": { + "type": "float", + "value": 10.0 + }, + "Z": { + "type": "float", + "value": 0.4 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 428 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84167 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 10 + }, + "Hardness": { + "type": "byte", + "value": 0 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 83421 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "reshuffle" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 911 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_MIRROR_LG" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_mirror_lg" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.6039 + }, + "Y": { + "type": "float", + "value": 7.7504 + }, + "Z": { + "type": "float", + "value": 0.4 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.6962 + }, + "PointY": { + "type": "float", + "value": 0.0834 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.6121 + }, + "PointY": { + "type": "float", + "value": 1.1838 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.08550000000000001 + }, + "PointY": { + "type": "float", + "value": 1.2679 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 22.4226 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 32.0653 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.3558 + }, + "PointY": { + "type": "float", + "value": 0.1491 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.3558 + }, + "PointY": { + "type": "float", + "value": 2.3503 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0853 + }, + "PointY": { + "type": "float", + "value": 2.6107 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 22.6789 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 33.8076 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4387 + }, + "PointY": { + "type": "float", + "value": 0.5204 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.3546 + }, + "PointY": { + "type": "float", + "value": 1.0724 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.2554 + }, + "PointY": { + "type": "float", + "value": 1.0221 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 22.7641 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 36.6557 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4188 + }, + "PointY": { + "type": "float", + "value": -0.0456 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4188 + }, + "PointY": { + "type": "float", + "value": 1.8748 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.2792 + }, + "PointY": { + "type": "float", + "value": 1.7898 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 29.4355 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 33.1553 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4129 + }, + "PointY": { + "type": "float", + "value": -0.1115 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.258 + }, + "PointY": { + "type": "float", + "value": 1.8497 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0796 + }, + "PointY": { + "type": "float", + "value": 1.9417 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 29.6351 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 35.0615 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.8462 + }, + "PointY": { + "type": "float", + "value": 0.0341 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.7996 + }, + "PointY": { + "type": "float", + "value": 1.2297 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.1921 + }, + "PointY": { + "type": "float", + "value": 1.2108 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 32.153 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 27.2646 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.6899 + }, + "PointY": { + "type": "float", + "value": -0.0115 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5999 + }, + "PointY": { + "type": "float", + "value": 1.2095 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0463 + }, + "PointY": { + "type": "float", + "value": 1.2369 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 34.3262 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 27.3638 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4586 + }, + "PointY": { + "type": "float", + "value": -0.055 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4586 + }, + "PointY": { + "type": "float", + "value": 1.1901 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 1.3066 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 36.2429 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 27.3608 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9172 + }, + "PointY": { + "type": "float", + "value": 0.047 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.6406 + }, + "PointY": { + "type": "float", + "value": 1.3217 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.1425 + }, + "PointY": { + "type": "float", + "value": 1.4409 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 32.9619 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 18.6005 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0912 + }, + "PointY": { + "type": "float", + "value": 1.5892 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.7487 + }, + "PointY": { + "type": "float", + "value": -0.3129 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.3055 + }, + "PointY": { + "type": "float", + "value": 1.9198 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.4283 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 18.5246 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.269 + }, + "PointY": { + "type": "float", + "value": 2.9239 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.6241 + }, + "PointY": { + "type": "float", + "value": 1.4961 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.1293 + }, + "PointY": { + "type": "float", + "value": 4.117 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 14.997 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 6.4385 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0639 + }, + "PointY": { + "type": "float", + "value": 3.8921 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.048 + }, + "PointY": { + "type": "float", + "value": 0.9879 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.1426 + }, + "PointY": { + "type": "float", + "value": 1.1932 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.9988 + }, + "PointY": { + "type": "float", + "value": 4.7833 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 12.4154 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 9.6572 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.2781 + }, + "PointY": { + "type": "float", + "value": -0.924 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.3332 + }, + "PointY": { + "type": "float", + "value": 2.7411 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.7472 + }, + "PointY": { + "type": "float", + "value": 3.3904 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 9.244400000000001 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 16.3625 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.2662 + }, + "PointY": { + "type": "float", + "value": -0.9409 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.7272 + }, + "PointY": { + "type": "float", + "value": 1.4835 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.1612 + }, + "PointY": { + "type": "float", + "value": 2.8437 + }, + "PointZ": { + "type": "float", + "value": 0.425 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 10.4165 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 20.5387 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 26.9253 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 35.3895 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.1587 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 23.3857 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 28.6951 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 14.6906 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 7.3267 + }, + "YOrientation": { + "type": "float", + "value": -0.3827 + }, + "YPosition": { + "type": "float", + "value": 21.1395 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.8315 + }, + "XPosition": { + "type": "float", + "value": 6.4627 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 8.0779 + }, + "ZPosition": { + "type": "float", + "value": 0.42 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 12.721 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 35.6955 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.5341 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 13.0999 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 14.6348 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 14.8903 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.7071 + }, + "XPosition": { + "type": "float", + "value": 7.777 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 26.6088 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.0 + }, + "XPosition": { + "type": "float", + "value": 7.2024 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 2.8826 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 16.1268 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 21.7718 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.7071 + }, + "XPosition": { + "type": "float", + "value": 3.3097 + }, + "YOrientation": { + "type": "float", + "value": -0.7071 + }, + "YPosition": { + "type": "float", + "value": 16.4253 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.7071 + }, + "XPosition": { + "type": "float", + "value": 2.9335 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 13.5698 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 2.4272 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 22.7947 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 22.5523 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 17.4193 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.0 + }, + "XPosition": { + "type": "float", + "value": 22.5304 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 12.326 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 32.7591 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 27.7126 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 34.7858 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 37.7186 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.3827 + }, + "XPosition": { + "type": "float", + "value": 37.1156 + }, + "YOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 25.1683 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 10.6039 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 20.7862 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.9808 + }, + "XPosition": { + "type": "float", + "value": 12.7677 + }, + "YOrientation": { + "type": "float", + "value": 0.1951 + }, + "YPosition": { + "type": "float", + "value": 7.672 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.3827 + }, + "XPosition": { + "type": "float", + "value": 6.2789 + }, + "YOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 11.8136 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.3827 + }, + "XPosition": { + "type": "float", + "value": 18.4092 + }, + "YOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 37.0088 + }, + "ZPosition": { + "type": "float", + "value": 0.4 + } + } + ] + } +} diff --git a/src/module/git/area011.git.json b/src/module/git/area011.git.json new file mode 100644 index 0000000..531fc68 --- /dev/null +++ b/src/module/git/area011.git.json @@ -0,0 +1,4036 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 55 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 100 + }, + "AmbientSndNight": { + "type": "int", + "value": 55 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 100 + }, + "EnvAudio": { + "type": "int", + "value": 27 + }, + "MusicBattle": { + "type": "int", + "value": 71 + }, + "MusicDay": { + "type": "int", + "value": 12 + }, + "MusicDelay": { + "type": "int", + "value": 54000 + }, + "MusicNight": { + "type": "int", + "value": 12 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 10.0 + }, + "Y": { + "type": "float", + "value": 45.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 5.0 + }, + "Y": { + "type": "float", + "value": 10.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 40.0 + }, + "Y": { + "type": "float", + "value": 5.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 45.0 + }, + "Y": { + "type": "float", + "value": 40.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 167 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14718 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14719 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "reshuffle" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 525 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ShaftofLightBlue" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_solblue" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 24.973 + }, + "Y": { + "type": "float", + "value": 24.9492 + }, + "Z": { + "type": "float", + "value": 0.61 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.8531 + }, + "PointY": { + "type": "float", + "value": -2.8304 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.4424 + }, + "PointY": { + "type": "float", + "value": -5.748 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.9519 + }, + "PointY": { + "type": "float", + "value": -3.4236 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 9.4132 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 23.3936 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.2057 + }, + "PointY": { + "type": "float", + "value": -2.9774 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.4011 + }, + "PointY": { + "type": "float", + "value": -7.5615 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.0263 + }, + "PointY": { + "type": "float", + "value": -5.6863 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 16.9921 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 18.8049 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.175 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.836 + }, + "PointY": { + "type": "float", + "value": -1.8272 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.7275 + }, + "PointY": { + "type": "float", + "value": 1.8066 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.3805 + }, + "PointY": { + "type": "float", + "value": 4.4024 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 27.8445 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 14.1416 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.4372 + }, + "PointY": { + "type": "float", + "value": -2.9691 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 7.8474 + }, + "PointY": { + "type": "float", + "value": 0.3096 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.5565 + }, + "PointY": { + "type": "float", + "value": 3.5574 + }, + "PointZ": { + "type": "float", + "value": 0.175 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 31.6307 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.3583 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.2739 + }, + "PointY": { + "type": "float", + "value": -2.2092 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 7.9338 + }, + "PointY": { + "type": "float", + "value": 1.3946 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.1336 + }, + "PointY": { + "type": "float", + "value": 3.9077 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 7.49 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 29.1806 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.4083 + }, + "PointY": { + "type": "float", + "value": -3.1041 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 8.430199999999999 + }, + "PointY": { + "type": "float", + "value": 1.5195 + }, + "PointZ": { + "type": "float", + "value": 0.175 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.741 + }, + "PointY": { + "type": "float", + "value": 3.9375 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 14.0858 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 34.7485 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.0936 + }, + "PointY": { + "type": "float", + "value": -1.9037 + }, + "PointZ": { + "type": "float", + "value": 0.175 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.3442 + }, + "PointY": { + "type": "float", + "value": -6.5223 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.3491 + }, + "PointY": { + "type": "float", + "value": -4.2138 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 28.6045 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 38.783 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.0242 + }, + "PointY": { + "type": "float", + "value": -2.5506 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.5627 + }, + "PointY": { + "type": "float", + "value": -6.6537 + }, + "PointZ": { + "type": "float", + "value": 0.175 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.8928 + }, + "PointY": { + "type": "float", + "value": -4.0129 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 33.9819 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 33.437 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.0707 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 3.0384 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 47.3152 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 25.2091 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 2.7541 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 24.8424 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": -0.0 + }, + "XPosition": { + "type": "float", + "value": 24.5633 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 47.6811 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 12.4994 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 45.2919 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": -0.1951 + }, + "XPosition": { + "type": "float", + "value": 45.0619 + }, + "YOrientation": { + "type": "float", + "value": -0.9808 + }, + "YPosition": { + "type": "float", + "value": 37.7479 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 37.5978 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 4.737 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 5.0067 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 13.0175 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.0894 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 24.6167 + }, + "ZPosition": { + "type": "float", + "value": 0.61 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.5556 + }, + "XPosition": { + "type": "float", + "value": 6.3607 + }, + "YOrientation": { + "type": "float", + "value": 0.8315 + }, + "YPosition": { + "type": "float", + "value": 36.9576 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 33.7702 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 47.1986 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.5556 + }, + "XPosition": { + "type": "float", + "value": 47.0722 + }, + "YOrientation": { + "type": "float", + "value": -0.8315 + }, + "YPosition": { + "type": "float", + "value": 16.6858 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 12.6714 + }, + "YOrientation": { + "type": "float", + "value": -0.5556 + }, + "YPosition": { + "type": "float", + "value": 6.4347 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.5556 + }, + "XPosition": { + "type": "float", + "value": 16.9443 + }, + "YOrientation": { + "type": "float", + "value": -0.8315 + }, + "YPosition": { + "type": "float", + "value": 2.3143 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.7071 + }, + "XPosition": { + "type": "float", + "value": 2.7366 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 33.0942 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 37.784 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 43.2506 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 43.0496 + }, + "YOrientation": { + "type": "float", + "value": -0.7071 + }, + "YPosition": { + "type": "float", + "value": 12.7501 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + } + ] + } +} diff --git a/src/module/git/area012.git.json b/src/module/git/area012.git.json new file mode 100644 index 0000000..befd02f --- /dev/null +++ b/src/module/git/area012.git.json @@ -0,0 +1,5245 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 51 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 53 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 15 + }, + "MusicBattle": { + "type": "int", + "value": 35 + }, + "MusicDay": { + "type": "int", + "value": 4 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 6 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 1 + }, + "Appearance": { + "type": "dword", + "value": 54 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "door_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ForestExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_25" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 20.83 + }, + "Y": { + "type": "float", + "value": 76.06999999999999 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 1 + }, + "Appearance": { + "type": "dword", + "value": 54 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "door_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ForestExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_25" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 28.14 + }, + "Y": { + "type": "float", + "value": 12.64 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 70 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.1781 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This granite headstone was carefully chiseled.", + "id": 14655 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5712 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "reshuffle" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 428 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Headstone" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_headstone" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 33.5654 + }, + "Y": { + "type": "float", + "value": 40.8194 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67980 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_na_cvstream1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "StreamCaveSmall" + }, + "TemplateResRef": { + "type": "resref", + "value": "streamcavesmall" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 12.3756 + }, + "YPosition": { + "type": "float", + "value": 45.1343 + }, + "ZPosition": { + "type": "float", + "value": 0.905 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67980 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_na_cvstream1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "StreamCaveSmall" + }, + "TemplateResRef": { + "type": "resref", + "value": "streamcavesmall" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 27.2061 + }, + "YPosition": { + "type": "float", + "value": 45.2035 + }, + "ZPosition": { + "type": "float", + "value": 1.0153 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68017 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 30.0 + }, + "MinDistance": { + "type": "float", + "value": 3.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_na_wtrflvoid1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WaterfallOverEdgeLarge" + }, + "TemplateResRef": { + "type": "resref", + "value": "waterfalloveredg" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 17.2715 + }, + "YPosition": { + "type": "float", + "value": 72.8395 + }, + "ZPosition": { + "type": "float", + "value": -3.3295 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68017 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 30.0 + }, + "MinDistance": { + "type": "float", + "value": 3.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_na_wtrflvoid1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WaterfallOverEdgeLarge" + }, + "TemplateResRef": { + "type": "resref", + "value": "waterfalloveredg" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 34.1442 + }, + "YPosition": { + "type": "float", + "value": 47.3115 + }, + "ZPosition": { + "type": "float", + "value": -1.9563 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.7093 + }, + "PointY": { + "type": "float", + "value": -1.5931 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.6247 + }, + "PointY": { + "type": "float", + "value": -4.9055 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.8274 + }, + "PointY": { + "type": "float", + "value": -2.7832 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 21.5757 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 62.0834 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5404 + }, + "PointY": { + "type": "float", + "value": -2.3733 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.0412 + }, + "PointY": { + "type": "float", + "value": -4.9334 + }, + "PointZ": { + "type": "float", + "value": -0.0182 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.9925 + }, + "PointY": { + "type": "float", + "value": -2.6819 + }, + "PointZ": { + "type": "float", + "value": 0.1507 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 27.5239 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 58.8133 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.4222 + }, + "PointY": { + "type": "float", + "value": -2.1777 + }, + "PointZ": { + "type": "float", + "value": 0.0224 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 8.4681 + }, + "PointY": { + "type": "float", + "value": -4.4231 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 9.2829 + }, + "PointY": { + "type": "float", + "value": -2.5945 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.1063 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 7.2063 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 33.9931 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.408 + }, + "PointY": { + "type": "float", + "value": -1.0179 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.2648 + }, + "PointY": { + "type": "float", + "value": -10.4072 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.9869 + }, + "PointY": { + "type": "float", + "value": -10.0119 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 18.5095 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 26.6231 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.0251 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.2372 + }, + "PointY": { + "type": "float", + "value": -1.6266 + }, + "PointZ": { + "type": "float", + "value": 0.0251 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 8.984 + }, + "PointY": { + "type": "float", + "value": -1.7126 + }, + "PointZ": { + "type": "float", + "value": 0.0268 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 7.3154 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 42.2603 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.0268 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.0035 + }, + "PointY": { + "type": "float", + "value": -0.3706 + }, + "PointZ": { + "type": "float", + "value": 0.021 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.9335 + }, + "PointY": { + "type": "float", + "value": 1.0942 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 19.2779 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 40.2206 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.2615 + }, + "PointY": { + "type": "float", + "value": -1.218 + }, + "PointZ": { + "type": "float", + "value": 0.021 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.6149 + }, + "PointY": { + "type": "float", + "value": 1.4406 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 26.2013 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 41.158 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.4671 + }, + "PointY": { + "type": "float", + "value": -1.552 + }, + "PointZ": { + "type": "float", + "value": 0.0251 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.6292 + }, + "PointY": { + "type": "float", + "value": -1.6425 + }, + "PointZ": { + "type": "float", + "value": 0.0268 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.0251 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 5.8337 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 49.3813 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.0268 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.1579 + }, + "PointY": { + "type": "float", + "value": -0.8461 + }, + "PointZ": { + "type": "float", + "value": 0.1402 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.0791 + }, + "PointY": { + "type": "float", + "value": 0.8151 + }, + "PointZ": { + "type": "float", + "value": 0.0394 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 12.4629 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 47.7388 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.0268 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0712 + }, + "PointY": { + "type": "float", + "value": -1.6535 + }, + "PointZ": { + "type": "float", + "value": 0.0814 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.903 + }, + "PointY": { + "type": "float", + "value": -0.7951 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 19.275 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 48.589 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 8.0 + }, + "PointY": { + "type": "float", + "value": 0.4581 + }, + "PointZ": { + "type": "float", + "value": -0.3784 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 7.7371 + }, + "PointY": { + "type": "float", + "value": 1.6179 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.7275 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 47.7163 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": -0.9808 + }, + "XPosition": { + "type": "float", + "value": 33.1116 + }, + "YOrientation": { + "type": "float", + "value": -0.1951 + }, + "YPosition": { + "type": "float", + "value": 69.89319999999999 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.5556 + }, + "XPosition": { + "type": "float", + "value": 9.1412 + }, + "YOrientation": { + "type": "float", + "value": 0.8315 + }, + "YPosition": { + "type": "float", + "value": 18.6439 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.3827 + }, + "XPosition": { + "type": "float", + "value": 8.7011 + }, + "YOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 68.9318 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": -0.5556 + }, + "XPosition": { + "type": "float", + "value": 41.6364 + }, + "YOrientation": { + "type": "float", + "value": 0.8315 + }, + "YPosition": { + "type": "float", + "value": 18.2016 + }, + "ZPosition": { + "type": "float", + "value": 0.1774 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 27.7705 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 17.4622 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.3827 + }, + "XPosition": { + "type": "float", + "value": 21.9864 + }, + "YOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 72.5549 + }, + "ZPosition": { + "type": "float", + "value": 0.0147 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 18.7864 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 42.3273 + }, + "ZPosition": { + "type": "float", + "value": 0.04 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.5556 + }, + "XPosition": { + "type": "float", + "value": 41.9034 + }, + "YOrientation": { + "type": "float", + "value": 0.8315 + }, + "YPosition": { + "type": "float", + "value": 31.5486 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 6.5543 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 49.2023 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.5556 + }, + "XPosition": { + "type": "float", + "value": 33.6915 + }, + "YOrientation": { + "type": "float", + "value": -0.8315 + }, + "YPosition": { + "type": "float", + "value": 54.7835 + }, + "ZPosition": { + "type": "float", + "value": 0.2201 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 12.8322 + }, + "YOrientation": { + "type": "float", + "value": -0.7071 + }, + "YPosition": { + "type": "float", + "value": 24.4438 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.8983 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 64.1502 + }, + "ZPosition": { + "type": "float", + "value": 0.0182 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.5556 + }, + "XPosition": { + "type": "float", + "value": 7.799 + }, + "YOrientation": { + "type": "float", + "value": 0.8315 + }, + "YPosition": { + "type": "float", + "value": 73.3749 + }, + "ZPosition": { + "type": "float", + "value": 0.1831 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 6.7346 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 32.149 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.1951 + }, + "XPosition": { + "type": "float", + "value": 19.7322 + }, + "YOrientation": { + "type": "float", + "value": -0.9808 + }, + "YPosition": { + "type": "float", + "value": 15.7148 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.5556 + }, + "XPosition": { + "type": "float", + "value": 43.6252 + }, + "YOrientation": { + "type": "float", + "value": -0.8315 + }, + "YPosition": { + "type": "float", + "value": 16.3309 + }, + "ZPosition": { + "type": "float", + "value": 0.8603 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 29.9816 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 39.3954 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 27.3332 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 54.5446 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.8315 + }, + "XPosition": { + "type": "float", + "value": 14.205 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 49.9884 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 14.7595 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 57.5703 + }, + "ZPosition": { + "type": "float", + "value": 0.1268 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.9808 + }, + "XPosition": { + "type": "float", + "value": 12.696 + }, + "YOrientation": { + "type": "float", + "value": -0.1951 + }, + "YPosition": { + "type": "float", + "value": 38.2384 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 17.2269 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 30.5811 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 27.1511 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 27.7522 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.9808 + }, + "XPosition": { + "type": "float", + "value": 36.5019 + }, + "YOrientation": { + "type": "float", + "value": 0.1951 + }, + "YPosition": { + "type": "float", + "value": 24.3266 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 29.3454 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 63.9732 + }, + "ZPosition": { + "type": "float", + "value": 0.03 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 21.4202 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 50.341 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.8315 + }, + "XPosition": { + "type": "float", + "value": 24.2034 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 34.5587 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + } + ] + } +} diff --git a/src/module/git/area013.git.json b/src/module/git/area013.git.json new file mode 100644 index 0000000..6e715cb --- /dev/null +++ b/src/module/git/area013.git.json @@ -0,0 +1,4362 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 66 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 66 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 41 + }, + "MusicDay": { + "type": "int", + "value": 50 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 50 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 30.0 + }, + "Y": { + "type": "float", + "value": 25.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 5.0 + }, + "Y": { + "type": "float", + "value": 10.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 245 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 66687 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 66686 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "reshuffle" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 805 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x0_bearskinrug1" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_bearskinrug1" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 27.8235 + }, + "Y": { + "type": "float", + "value": 10.001 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 184 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14740 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14741 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 542 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ThroneEvil" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_throneevil" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 31.6073 + }, + "Y": { + "type": "float", + "value": 10.0306 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 253 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68815 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 9322 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x0_cushions" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_cushions" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 30.3122 + }, + "Y": { + "type": "float", + "value": 7.7508 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 253 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.7671 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68815 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 9322 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x0_cushions" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_cushions" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 30.3841 + }, + "Y": { + "type": "float", + "value": 11.7351 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 186 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.9635 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 66888 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 52997 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 549 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Bones" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bones" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 30.2533 + }, + "Y": { + "type": "float", + "value": 11.0751 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -4.7423 + }, + "PointY": { + "type": "float", + "value": -0.6149 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.833 + }, + "PointY": { + "type": "float", + "value": -2.6754 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.6587 + }, + "PointY": { + "type": "float", + "value": -0.2857 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.4187 + }, + "PointY": { + "type": "float", + "value": 2.0347 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 19.9206 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 22.9728 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.7893 + }, + "PointY": { + "type": "float", + "value": 1.5549 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.345 + }, + "PointY": { + "type": "float", + "value": 2.1135 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.172 + }, + "PointY": { + "type": "float", + "value": 2.269 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 17.5432 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 25.0124 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.7558 + }, + "PointY": { + "type": "float", + "value": 2.7737 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.1103 + }, + "PointY": { + "type": "float", + "value": 2.7173 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.4542 + }, + "PointY": { + "type": "float", + "value": 2.3233 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.2988 + }, + "PointY": { + "type": "float", + "value": 5.2368 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 12.7776 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.9838 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.2878 + }, + "PointY": { + "type": "float", + "value": -2.2564 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 4.0299 + }, + "PointY": { + "type": "float", + "value": -0.784 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.358 + }, + "PointY": { + "type": "float", + "value": 0.0205 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 10.1793 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 27.323 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.3752 + }, + "PointY": { + "type": "float", + "value": -2.7302 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0276 + }, + "PointY": { + "type": "float", + "value": -4.4795 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 7.3641 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 22.7174 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.1563 + }, + "PointY": { + "type": "float", + "value": -3.9573 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.1662 + }, + "PointY": { + "type": "float", + "value": -2.1134 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 2.8634 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 22.1527 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.9201 + }, + "PointY": { + "type": "float", + "value": -0.8546 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.1092 + }, + "PointY": { + "type": "float", + "value": -1.7311 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.6921 + }, + "PointY": { + "type": "float", + "value": -1.0199 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 5.0793 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 20.9456 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.055 + }, + "PointY": { + "type": "float", + "value": -0.8637 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0425 + }, + "PointY": { + "type": "float", + "value": -1.7704 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.7225 + }, + "PointY": { + "type": "float", + "value": -0.9159 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 20.1252 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 25.9241 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.8733 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 3.9633 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.8075 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 15.4259 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 4.4353 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 24.3975 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 4.9304 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 11.8964 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 27.8931 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 25.0535 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 17.2138 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 12.538 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.1951 + }, + "XPosition": { + "type": "float", + "value": 20.8717 + }, + "YOrientation": { + "type": "float", + "value": -0.9808 + }, + "YPosition": { + "type": "float", + "value": 2.7969 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 27.1934 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 17.102 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.9808 + }, + "XPosition": { + "type": "float", + "value": 37.6793 + }, + "YOrientation": { + "type": "float", + "value": -0.1951 + }, + "YPosition": { + "type": "float", + "value": 10.5571 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.1951 + }, + "XPosition": { + "type": "float", + "value": 28.2033 + }, + "YOrientation": { + "type": "float", + "value": -0.9808 + }, + "YPosition": { + "type": "float", + "value": 2.6313 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.9808 + }, + "XPosition": { + "type": "float", + "value": 11.9009 + }, + "YOrientation": { + "type": "float", + "value": 0.1951 + }, + "YPosition": { + "type": "float", + "value": 16.9355 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.1951 + }, + "XPosition": { + "type": "float", + "value": 12.4486 + }, + "YOrientation": { + "type": "float", + "value": -0.9808 + }, + "YPosition": { + "type": "float", + "value": 1.78 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.0 + }, + "XPosition": { + "type": "float", + "value": 31.0316 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 1.8803 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 37.7641 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 17.7085 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.5556 + }, + "XPosition": { + "type": "float", + "value": 3.7993 + }, + "YOrientation": { + "type": "float", + "value": 0.8315 + }, + "YPosition": { + "type": "float", + "value": 25.9301 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + } + ] + } +} diff --git a/src/module/git/area014.git.json b/src/module/git/area014.git.json new file mode 100644 index 0000000..3fe1173 --- /dev/null +++ b/src/module/git/area014.git.json @@ -0,0 +1,3060 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 62 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 90 + }, + "AmbientSndNight": { + "type": "int", + "value": 62 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 90 + }, + "EnvAudio": { + "type": "int", + "value": 8 + }, + "MusicBattle": { + "type": "int", + "value": 70 + }, + "MusicDay": { + "type": "int", + "value": 37 + }, + "MusicDelay": { + "type": "int", + "value": 30000 + }, + "MusicNight": { + "type": "int", + "value": 37 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 1 + }, + "Appearance": { + "type": "dword", + "value": 57 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.8885 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CaveExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_12" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.42 + }, + "Y": { + "type": "float", + "value": 4.67 + }, + "Z": { + "type": "float", + "value": 0.08 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 1 + }, + "Appearance": { + "type": "dword", + "value": 59 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CryptExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_14" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 34.87 + }, + "Y": { + "type": "float", + "value": 4.69 + }, + "Z": { + "type": "float", + "value": 0.8100000000000001 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 117 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14659 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14660 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "reshuffle" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 475 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ImpalingSpearwHumanHead" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_impledhead1" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 21.3717 + }, + "Y": { + "type": "float", + "value": 34.5137 + }, + "Z": { + "type": "float", + "value": 1.0 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.1489 + }, + "PointY": { + "type": "float", + "value": -0.7832 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.7684 + }, + "PointY": { + "type": "float", + "value": 5.8075 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.9375 + }, + "PointY": { + "type": "float", + "value": 5.2512 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 9.436 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 33.4253 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9176 + }, + "PointY": { + "type": "float", + "value": -3.8872 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.2268 + }, + "PointY": { + "type": "float", + "value": -5.9385 + }, + "PointZ": { + "type": "float", + "value": 1.0703 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 7.2157 + }, + "PointY": { + "type": "float", + "value": -3.9541 + }, + "PointZ": { + "type": "float", + "value": 0.9127999999999999 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 27.2619 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 38.0405 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.7263 + }, + "PointY": { + "type": "float", + "value": -0.3834 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.773 + }, + "PointY": { + "type": "float", + "value": 2.2495 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.0439 + }, + "PointY": { + "type": "float", + "value": 2.8517 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 17.9643 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 17.01 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.8943 + }, + "PointY": { + "type": "float", + "value": -4.1548 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.6224 + }, + "PointY": { + "type": "float", + "value": -3.559 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.6179 + }, + "PointY": { + "type": "float", + "value": -0.6956 + }, + "PointZ": { + "type": "float", + "value": 1.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 26.3599 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.8609 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 40.3153 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 39.727 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 5.4298 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 40.8263 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.1938 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 6.9501 + }, + "ZPosition": { + "type": "float", + "value": 1.01 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": -0.5556 + }, + "XPosition": { + "type": "float", + "value": 34.297 + }, + "YOrientation": { + "type": "float", + "value": 0.8315 + }, + "YPosition": { + "type": "float", + "value": 6.7616 + }, + "ZPosition": { + "type": "float", + "value": 1.4188 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.5556 + }, + "XPosition": { + "type": "float", + "value": 16.8824 + }, + "YOrientation": { + "type": "float", + "value": 0.8315 + }, + "YPosition": { + "type": "float", + "value": 7.2759 + }, + "ZPosition": { + "type": "float", + "value": 1.0395 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + }, + "XOrientation": { + "type": "float", + "value": 0.3827 + }, + "XPosition": { + "type": "float", + "value": 22.1177 + }, + "YOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 29.3699 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.7071 + }, + "XPosition": { + "type": "float", + "value": 5.0157 + }, + "YOrientation": { + "type": "float", + "value": -0.7071 + }, + "YPosition": { + "type": "float", + "value": 26.9165 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.1951 + }, + "XPosition": { + "type": "float", + "value": 11.1072 + }, + "YOrientation": { + "type": "float", + "value": -0.9808 + }, + "YPosition": { + "type": "float", + "value": 26.1939 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.8315 + }, + "XPosition": { + "type": "float", + "value": 43.2635 + }, + "YOrientation": { + "type": "float", + "value": -0.5556 + }, + "YPosition": { + "type": "float", + "value": 28.7256 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 41.7584 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 33.8082 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 19.9062 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 43.5917 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 7.7115 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 42.8614 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 28.5723 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 32.4332 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.7071 + }, + "XPosition": { + "type": "float", + "value": 11.787 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 31.0839 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.8315 + }, + "XPosition": { + "type": "float", + "value": 16.0079 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 39.3089 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 20.1351 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 16.4691 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 31.4008 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 13.9567 + }, + "ZPosition": { + "type": "float", + "value": 1.1032 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.9808 + }, + "XPosition": { + "type": "float", + "value": 31.4116 + }, + "YOrientation": { + "type": "float", + "value": -0.1951 + }, + "YPosition": { + "type": "float", + "value": 23.5204 + }, + "ZPosition": { + "type": "float", + "value": 1.2375 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 29.9242 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 41.3486 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 17.7722 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 20.7689 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.5556 + }, + "XPosition": { + "type": "float", + "value": 30.3966 + }, + "YOrientation": { + "type": "float", + "value": -0.8315 + }, + "YPosition": { + "type": "float", + "value": 5.9878 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 34.8612 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 28.2428 + }, + "ZPosition": { + "type": "float", + "value": 1.1084 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 34.8832 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 39.3504 + }, + "ZPosition": { + "type": "float", + "value": -0.3 + } + } + ] + } +} diff --git a/src/module/git/area015.git.json b/src/module/git/area015.git.json new file mode 100644 index 0000000..fedc7fe --- /dev/null +++ b/src/module/git/area015.git.json @@ -0,0 +1,5715 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 66 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 66 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 41 + }, + "MusicDay": { + "type": "int", + "value": 50 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 50 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 50 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "door_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CastleExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_22" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 25.0 + }, + "Y": { + "type": "float", + "value": 66.89 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 50 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "door_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CastleExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_22" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 25.0 + }, + "Y": { + "type": "float", + "value": 3.11 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 243 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.7854 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68919 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68918 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "reshuffle" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 803 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SphinxStatue" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_sphinxstatue" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 20.5257 + }, + "Y": { + "type": "float", + "value": 38.2632 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 243 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.7854 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68919 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68918 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 803 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SphinxStatue" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_sphinxstatue" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 29.6999 + }, + "Y": { + "type": "float", + "value": 38.6102 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 243 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.3562 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68919 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68918 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 803 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SphinxStatue" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_sphinxstatue" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 29.4236 + }, + "Y": { + "type": "float", + "value": 29.8937 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 243 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.1598 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68919 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68918 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 803 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SphinxStatue" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_sphinxstatue" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 20.1859 + }, + "Y": { + "type": "float", + "value": 30.0523 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -10.1234 + }, + "PointY": { + "type": "float", + "value": -0.0723 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.3013 + }, + "PointY": { + "type": "float", + "value": 9.993 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -10.0076 + }, + "PointY": { + "type": "float", + "value": 9.9597 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 19.9163 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.9631 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 10.3978 + }, + "PointY": { + "type": "float", + "value": -0.1328 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 10.3634 + }, + "PointY": { + "type": "float", + "value": 9.811299999999999 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0959 + }, + "PointY": { + "type": "float", + "value": 10.0233 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 9.843400000000001 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 30.0355 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -10.2395 + }, + "PointY": { + "type": "float", + "value": -0.0366 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.1723 + }, + "PointY": { + "type": "float", + "value": 9.817299999999999 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -9.9971 + }, + "PointY": { + "type": "float", + "value": 9.972200000000001 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 19.9722 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 39.9592 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 10.0334 + }, + "PointY": { + "type": "float", + "value": 0.0241 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 10.0254 + }, + "PointY": { + "type": "float", + "value": 9.9475 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.07439999999999999 + }, + "PointY": { + "type": "float", + "value": 9.984500000000001 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 29.8472 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.9764 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -10.375 + }, + "PointY": { + "type": "float", + "value": 10.0496 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -10.2645 + }, + "PointY": { + "type": "float", + "value": -0.2028 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.2148 + }, + "PointY": { + "type": "float", + "value": 9.985300000000001 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 40.085 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 30.0465 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -10.361 + }, + "PointY": { + "type": "float", + "value": 0.0756 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.098 + }, + "PointY": { + "type": "float", + "value": 9.9739 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -10.0722 + }, + "PointY": { + "type": "float", + "value": 9.985900000000001 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 40.0762 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 39.8966 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -10.0893 + }, + "PointY": { + "type": "float", + "value": 0.0936 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0604 + }, + "PointY": { + "type": "float", + "value": 9.898400000000001 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -9.8111 + }, + "PointY": { + "type": "float", + "value": 9.928900000000001 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 29.8267 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 39.978 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -9.682600000000001 + }, + "PointY": { + "type": "float", + "value": -0.1036 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.1739 + }, + "PointY": { + "type": "float", + "value": 9.889099999999999 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -9.517300000000001 + }, + "PointY": { + "type": "float", + "value": 9.943 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 29.6418 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 20.0663 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -7.279 + }, + "PointY": { + "type": "float", + "value": 10.0428 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -7.1416 + }, + "PointY": { + "type": "float", + "value": 0.0332 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.1478 + }, + "PointY": { + "type": "float", + "value": 9.9786 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 9.728899999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.8322 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -6.4877 + }, + "PointY": { + "type": "float", + "value": 0.0594 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.1641 + }, + "PointY": { + "type": "float", + "value": 9.9983 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -6.475 + }, + "PointY": { + "type": "float", + "value": 9.8726 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 46.7688 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.962 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -6.6534 + }, + "PointY": { + "type": "float", + "value": 9.9894 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -6.6499 + }, + "PointY": { + "type": "float", + "value": 0.1442 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.3281 + }, + "PointY": { + "type": "float", + "value": 9.9483 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 47.0609 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 39.8934 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.5760999999999999 + }, + "PointY": { + "type": "float", + "value": 1.3648 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.5747 + }, + "PointY": { + "type": "float", + "value": -0.2104 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 5.6398 + }, + "PointY": { + "type": "float", + "value": 10.0655 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.7913 + }, + "PointY": { + "type": "float", + "value": 9.9499 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 3.71 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 40.1095 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 41.6163 + }, + "YOrientation": { + "type": "float", + "value": -0.5556 + }, + "YPosition": { + "type": "float", + "value": 61.1985 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 6.9282 + }, + "YOrientation": { + "type": "float", + "value": -0.7071 + }, + "YPosition": { + "type": "float", + "value": 61.9508 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 7.7322 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 35.0453 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.8315 + }, + "XPosition": { + "type": "float", + "value": 7.7811 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 6.2749 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": -0.7071 + }, + "XPosition": { + "type": "float", + "value": 42.6021 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 7.6396 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.1254 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 5.9809 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": -0.0 + }, + "XPosition": { + "type": "float", + "value": 24.9591 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 65.11960000000001 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 38.8705 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 34.658 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 24.5644 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 31.0071 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 3.7891 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.8067 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 3.1293 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 50.0004 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 46.4807 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 49.8732 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 46.3819 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 19.7657 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.7071 + }, + "XPosition": { + "type": "float", + "value": 47.7422 + }, + "YOrientation": { + "type": "float", + "value": -0.7071 + }, + "YPosition": { + "type": "float", + "value": 2.3762 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 47.3537 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 29.9062 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 47.5328 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 59.9695 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 10.0158 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 67.6108 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 2.4386 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 39.3933 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 2.2562 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 10.6598 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.9808 + }, + "XPosition": { + "type": "float", + "value": 15.3459 + }, + "YOrientation": { + "type": "float", + "value": -0.1951 + }, + "YPosition": { + "type": "float", + "value": 17.7407 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 35.5442 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 27.2937 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 37.4672 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 45.0418 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 17.2333 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 44.8744 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 28.4002 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 52.7789 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.8315 + }, + "XPosition": { + "type": "float", + "value": 14.7475 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 56.1371 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 32.3535 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 15.9995 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + } +} diff --git a/src/module/git/area016.git.json b/src/module/git/area016.git.json new file mode 100644 index 0000000..0a054c5 --- /dev/null +++ b/src/module/git/area016.git.json @@ -0,0 +1,2937 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 63 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 63 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 39 + }, + "MusicDay": { + "type": "int", + "value": 9 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 10 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 5.0 + }, + "Y": { + "type": "float", + "value": 50.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 30.0 + }, + "Y": { + "type": "float", + "value": 75.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 50.0 + }, + "Y": { + "type": "float", + "value": 5.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 75.0 + }, + "Y": { + "type": "float", + "value": 30.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 60 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.1598 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Something roasts over the crackling fire. Grease drippings feed the flames below.", + "id": 14588 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5700 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "reshuffle" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 418 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CampfirewithSpit" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_campfrwspit" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 45.3544 + }, + "Y": { + "type": "float", + "value": 34.9611 + }, + "Z": { + "type": "float", + "value": 0.01 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 49.4809 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 29.8353 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 50.6035 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 49.2941 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.3827 + }, + "XPosition": { + "type": "float", + "value": 29.8503 + }, + "YOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 29.6533 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.5556 + }, + "XPosition": { + "type": "float", + "value": 29.4117 + }, + "YOrientation": { + "type": "float", + "value": 0.8315 + }, + "YPosition": { + "type": "float", + "value": 50.0264 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.9808 + }, + "XPosition": { + "type": "float", + "value": 27.8913 + }, + "YOrientation": { + "type": "float", + "value": -0.1951 + }, + "YPosition": { + "type": "float", + "value": 43.95 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 43.0072 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 33.8755 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.9808 + }, + "XPosition": { + "type": "float", + "value": 44.4974 + }, + "YOrientation": { + "type": "float", + "value": -0.1951 + }, + "YPosition": { + "type": "float", + "value": 26.6064 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + }, + "XOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 52.3448 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 44.996 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.8315 + }, + "XPosition": { + "type": "float", + "value": 36.9611 + }, + "YOrientation": { + "type": "float", + "value": 0.5556 + }, + "YPosition": { + "type": "float", + "value": 33.1746 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 36.694 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 40.1935 + }, + "ZPosition": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 43.6012 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 43.6558 + }, + "ZPosition": { + "type": "float", + "value": 0.1043 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 31.6511 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 41.2158 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + }, + "XOrientation": { + "type": "float", + "value": 0.9808 + }, + "XPosition": { + "type": "float", + "value": 31.9723 + }, + "YOrientation": { + "type": "float", + "value": 0.1951 + }, + "YPosition": { + "type": "float", + "value": 35.4413 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.1951 + }, + "XPosition": { + "type": "float", + "value": 43.4221 + }, + "YOrientation": { + "type": "float", + "value": -0.9808 + }, + "YPosition": { + "type": "float", + "value": 47.3772 + }, + "ZPosition": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 31.6992 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 38.2194 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 76.5663 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 38.9089 + }, + "ZPosition": { + "type": "float", + "value": 0.25 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.8242 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 76.7958 + }, + "ZPosition": { + "type": "float", + "value": -0.0113 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 3.2736 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 43.9213 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 4 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + }, + "XOrientation": { + "type": "float", + "value": -0.1951 + }, + "XPosition": { + "type": "float", + "value": 43.8452 + }, + "YOrientation": { + "type": "float", + "value": -0.9808 + }, + "YPosition": { + "type": "float", + "value": 3.0499 + }, + "ZPosition": { + "type": "float", + "value": -0.0069 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 42.8955 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 39.927 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": -0.9808 + }, + "XPosition": { + "type": "float", + "value": 47.0845 + }, + "YOrientation": { + "type": "float", + "value": -0.1951 + }, + "YPosition": { + "type": "float", + "value": 5.2082 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 38.6059 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 16.1919 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": -0.7071 + }, + "XPosition": { + "type": "float", + "value": 75.2868 + }, + "YOrientation": { + "type": "float", + "value": 0.7071 + }, + "YPosition": { + "type": "float", + "value": 33.1326 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 62.9261 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 40.1983 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.3827 + }, + "XPosition": { + "type": "float", + "value": 34.8588 + }, + "YOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 74.7829 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": -0.0 + }, + "XPosition": { + "type": "float", + "value": 40.2802 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 61.8559 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 16.773 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 39.3931 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.5556 + }, + "XPosition": { + "type": "float", + "value": 5.8459 + }, + "YOrientation": { + "type": "float", + "value": -0.8315 + }, + "YPosition": { + "type": "float", + "value": 44.7388 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + } +} diff --git a/src/module/git/desolateanddespa.git.json b/src/module/git/desolateanddespa.git.json new file mode 100644 index 0000000..3590821 --- /dev/null +++ b/src/module/git/desolateanddespa.git.json @@ -0,0 +1,8196 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 103 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 82 + }, + "AmbientSndNight": { + "type": "int", + "value": 103 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 82 + }, + "EnvAudio": { + "type": "int", + "value": 51 + }, + "MusicBattle": { + "type": "int", + "value": 73 + }, + "MusicDay": { + "type": "int", + "value": 68 + }, + "MusicDelay": { + "type": "int", + "value": 54000 + }, + "MusicNight": { + "type": "int", + "value": 68 + } + } + }, + "Creature List": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 37 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 5 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12439 + } + }, + "Dex": { + "type": "byte", + "value": 11 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 70 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13230 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12441 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 5 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 5 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 175 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_herbivore" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__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": 3 + } + }, + { + "__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": 24 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_DEERSTAG" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_deerstag" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 20.77 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 19.4844 + }, + "ZPosition": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 37 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 5 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12439 + } + }, + "Dex": { + "type": "byte", + "value": 11 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 70 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13230 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12441 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 5 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 5 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 175 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_herbivore" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__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": 3 + } + }, + { + "__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": 24 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_DEERSTAG" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_deerstag" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 29.0504 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 49.7552 + }, + "ZPosition": { + "type": "float", + "value": 5.0215 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 37 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 5 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12439 + } + }, + "Dex": { + "type": "byte", + "value": 11 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 70 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13230 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12441 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 5 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 5 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 175 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_herbivore" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__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": 3 + } + }, + { + "__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": 24 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_DEERSTAG" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_deerstag" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 71.75109999999999 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 53.9209 + }, + "ZPosition": { + "type": "float", + "value": 5.033 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 37 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 5 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12439 + } + }, + "Dex": { + "type": "byte", + "value": 11 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 70 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13230 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12441 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 5 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 5 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 175 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_herbivore" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__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": 3 + } + }, + { + "__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": 24 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_DEERSTAG" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_deerstag" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 36.2436 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 6.9994 + }, + "ZPosition": { + "type": "float", + "value": 0.0814 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 94 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 2.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 3 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 16 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12429 + } + }, + "Dex": { + "type": "byte", + "value": 19 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13265 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32768, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13265 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13253 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS021" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps021" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 131072, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13101 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 54 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREITEM081" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_creitem081" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 42 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 57919 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 16 + }, + "Int": { + "type": "byte", + "value": 13 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 22 + }, + "NaturalAC": { + "type": "byte", + "value": 2 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 164 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__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": 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": 6 + } + }, + { + "__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": 19 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 16 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_CRAGCAT" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cragcat" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 37.5946 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 47.088 + }, + "ZPosition": { + "type": "float", + "value": 10.0233 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 94 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 2.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 3 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 16 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12429 + } + }, + "Dex": { + "type": "byte", + "value": 19 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13265 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32768, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13265 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13253 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS021" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps021" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 131072, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13101 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 54 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREITEM081" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_creitem081" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 42 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 57919 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 16 + }, + "Int": { + "type": "byte", + "value": 13 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 22 + }, + "NaturalAC": { + "type": "byte", + "value": 2 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 164 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__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": 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": 6 + } + }, + { + "__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": 19 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 16 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_CRAGCAT" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cragcat" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 39.9361 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 70.35720000000001 + }, + "ZPosition": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 184 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 5.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 23 + }, + "ClassLevel": { + "type": "short", + "value": 6 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 16 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 33 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12817 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13242 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32768, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13242 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13242 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 131072, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13074 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 22 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 24 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 5 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 20 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREITEM026" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_creitem026" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Winter Wolf", + "id": 12818 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 4 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 33 + }, + "Int": { + "type": "byte", + "value": 9 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 51 + }, + "NaturalAC": { + "type": "byte", + "value": 5 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 320 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__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": 9 + } + }, + { + "__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": 105 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 230 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 6 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 230 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 6 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 230 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 6 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 18 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_WOLFWINT" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wolfwint" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 75.9984 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 50.6872 + }, + "ZPosition": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 103 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 5.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 24 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 4 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "The inner core of your being, that which gives you your psionic powers.", + "id": 12420 + } + }, + "Dex": { + "type": "byte", + "value": 11 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Inner Core", + "id": 12421 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 4 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 4 + }, + "Int": { + "type": "byte", + "value": 6 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 100 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 4 + }, + "NaturalAC": { + "type": "byte", + "value": 4 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 171 + }, + "Race": { + "type": "byte", + "value": 20 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "" + }, + "ScriptDamaged": { + "type": "resref", + "value": "" + }, + "ScriptDeath": { + "type": "resref", + "value": "" + }, + "ScriptDialogue": { + "type": "resref", + "value": "innercore_rest" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "" + }, + "ScriptEndRound": { + "type": "resref", + "value": "" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "" + }, + "ScriptRested": { + "type": "resref", + "value": "" + }, + "ScriptSpawn": { + "type": "resref", + "value": "" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "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": 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 + } + }, + { + "__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": 2 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 1 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 3 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 1 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 3 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 1 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 3 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 1 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 3 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 1 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 3 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 1 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 3 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 222 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 222 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 222 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 222 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 222 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 222 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 3 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_CLANTERN" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_clantern" + }, + "WalkRate": { + "type": "int", + "value": 1 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 9.901999999999999 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 69.86969999999999 + }, + "ZPosition": { + "type": "float", + "value": 0.6 + } + } + ] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 1 + }, + "Appearance": { + "type": "dword", + "value": 68 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_door_death" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Breach" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_27" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 77.01000000000001 + }, + "Y": { + "type": "float", + "value": 12.88 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 28 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "A portal glows softly before you. You wonder where it leads.", + "id": 14533 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Genesis Exit Portal", + "id": 5670 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "psi_gen_exit" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 386 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "GenesisExit02" + }, + "TemplateResRef": { + "type": "resref", + "value": "genesisexit" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 39.6997 + }, + "Y": { + "type": "float", + "value": 49.1889 + }, + "Z": { + "type": "float", + "value": 10.0 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68030 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_wt_gustchasm1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WindGustChasm" + }, + "TemplateResRef": { + "type": "resref", + "value": "windgustchasm" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 35.7732 + }, + "YPosition": { + "type": "float", + "value": 28.9297 + }, + "ZPosition": { + "type": "float", + "value": -1.9 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68030 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_wt_gustchasm1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WindGustChasm" + }, + "TemplateResRef": { + "type": "resref", + "value": "windgustchasm" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 2.9967 + }, + "YPosition": { + "type": "float", + "value": 34.8443 + }, + "ZPosition": { + "type": "float", + "value": 1.5883 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68034 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_wt_guststrng1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WindGustStrong" + }, + "TemplateResRef": { + "type": "resref", + "value": "windguststrong" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 66.0942 + }, + "YPosition": { + "type": "float", + "value": 74.35420000000001 + }, + "ZPosition": { + "type": "float", + "value": 6.7037 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.0 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 10000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 91312 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.3 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb10" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb4" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb5" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb6" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb7" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb8" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb9" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "IceCrumbling" + }, + "TemplateResRef": { + "type": "resref", + "value": "icecrumbling" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 39.0204 + }, + "YPosition": { + "type": "float", + "value": 8.9788 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.0 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 10000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 91312 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.3 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb10" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb4" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb5" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb6" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb7" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb8" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb9" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "IceCrumbling" + }, + "TemplateResRef": { + "type": "resref", + "value": "icecrumbling" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 45.8106 + }, + "YPosition": { + "type": "float", + "value": 55.6346 + }, + "ZPosition": { + "type": "float", + "value": 11.2959 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.0 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 10000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 91311 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.3 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak10" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak4" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak5" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak6" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak7" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak8" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak9" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "IceCracking" + }, + "TemplateResRef": { + "type": "resref", + "value": "icecracking" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 7.4114 + }, + "YPosition": { + "type": "float", + "value": 46.7267 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.0 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 10000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 91311 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.3 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak10" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak4" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak5" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak6" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak7" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak8" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak9" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "IceCracking" + }, + "TemplateResRef": { + "type": "resref", + "value": "icecracking" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 37.9315 + }, + "YPosition": { + "type": "float", + "value": 72.4071 + }, + "ZPosition": { + "type": "float", + "value": 6.0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67845 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_mg_entrmyst1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "EntranceMysterious" + }, + "TemplateResRef": { + "type": "resref", + "value": "entrancemysterio" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 73.24169999999999 + }, + "YPosition": { + "type": "float", + "value": 13.4197 + }, + "ZPosition": { + "type": "float", + "value": 1.5 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67903 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_mg_portal2" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "MagicPortalWater" + }, + "TemplateResRef": { + "type": "resref", + "value": "magicportalwater" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 9.908300000000001 + }, + "YPosition": { + "type": "float", + "value": 69.7017 + }, + "ZPosition": { + "type": "float", + "value": 2.1 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/git/ey_dpcon_erewood.git.json b/src/module/git/ey_dpcon_erewood.git.json new file mode 100644 index 0000000..49e3def --- /dev/null +++ b/src/module/git/ey_dpcon_erewood.git.json @@ -0,0 +1,8262 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 53 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 53 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 15 + }, + "MusicBattle": { + "type": "int", + "value": 35 + }, + "MusicDay": { + "type": "int", + "value": 3 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 3 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 51 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.0189 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14557 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14558 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "x2_plc_used_sit" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 409 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BedBeddingRolls" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bedrolls" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 43.7252 + }, + "Y": { + "type": "float", + "value": 7.3157 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 58 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.5154 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14586 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5700 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 416 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Campfire" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_campfr" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 42.8211 + }, + "Y": { + "type": "float", + "value": 9.7994 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 100 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14746 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Normal" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_tree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 40.364 + }, + "Y": { + "type": "float", + "value": 7.26 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 101 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14747 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 459 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Autumn" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_treeautumn" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 37.4185 + }, + "Y": { + "type": "float", + "value": 9.084 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 101 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14747 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 459 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Autumn" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_treeautumn" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 37.7721 + }, + "Y": { + "type": "float", + "value": 12.3979 + }, + "Z": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 100 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14746 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Normal" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_tree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 43.5147 + }, + "Y": { + "type": "float", + "value": 14.011 + }, + "Z": { + "type": "float", + "value": 0.0415 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 101 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14747 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 459 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Autumn" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_treeautumn" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 42.6358 + }, + "Y": { + "type": "float", + "value": 13.1574 + }, + "Z": { + "type": "float", + "value": -0.0055 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 187 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 66885 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 52998 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 550 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Boulder" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_boulder" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 38.5255 + }, + "Y": { + "type": "float", + "value": 43.9696 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 95 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14736 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5738 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 453 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Stones" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_stones" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 39.4991 + }, + "Y": { + "type": "float", + "value": 42.78 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 176 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14750 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5819 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 534 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "WaterDrip" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_waterdrip" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 44.8222 + }, + "Y": { + "type": "float", + "value": 8.010400000000001 + }, + "Z": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 148 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14609 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5791 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 506 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Dust Plume" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_dustplume" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 23.3109 + }, + "Y": { + "type": "float", + "value": 6.3342 + }, + "Z": { + "type": "float", + "value": 0.043 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 46 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.859 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14540 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Focus", + "id": 14541 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "ey_dpcon_med" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 404 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "AltarShrineEvil" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_altrevil" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 41.1468 + }, + "Y": { + "type": "float", + "value": 41.4217 + }, + "Z": { + "type": "float", + "value": 0.0852 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 165 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14677 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14673 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 523 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Magic Sparks - Purple" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_magicpurple" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 40.9062 + }, + "Y": { + "type": "float", + "value": 41.2088 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 147 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14584 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5790 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 505 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Butterflies" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_butterflies" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.2565 + }, + "Y": { + "type": "float", + "value": 13.3009 + }, + "Z": { + "type": "float", + "value": 0.4138 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 81 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14649 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14650 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 439 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Plant Growth - Grass Tufts" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_grasstuft" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 37.2044 + }, + "Y": { + "type": "float", + "value": 31.953 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 299 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68872 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 9188 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_mushrooms" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_mushrooms" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 27.465 + }, + "Y": { + "type": "float", + "value": 25.7697 + }, + "Z": { + "type": "float", + "value": 0.361 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 335 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68871 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 9207 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 681 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Moss" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_moss" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 27.5428 + }, + "Y": { + "type": "float", + "value": 25.7558 + }, + "Z": { + "type": "float", + "value": 0.3354 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 82 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 67632 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5725 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 440 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PlantGrowthShrubs" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_shrub" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 27.7188 + }, + "Y": { + "type": "float", + "value": 24.6139 + }, + "Z": { + "type": "float", + "value": 0.3464 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 433 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84172 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 83426 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_HOLE_S" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_hole_s" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 10.4329 + }, + "Y": { + "type": "float", + "value": 37.4512 + }, + "Z": { + "type": "float", + "value": 0.0183 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 58 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14586 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5700 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 416 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Campfire" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_campfr" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 10.3958 + }, + "Y": { + "type": "float", + "value": 37.5308 + }, + "Z": { + "type": "float", + "value": 0.0144 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "x2_plc_used_sit" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 10.8876 + }, + "Y": { + "type": "float", + "value": 39.4245 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 178 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.8162 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14559 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5821 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "x2_plc_used_sit" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 536 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BenchPew" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bench" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 8.6675 + }, + "Y": { + "type": "float", + "value": 36.8375 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 101 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14747 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 459 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Autumn" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_treeautumn" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 5.9953 + }, + "Y": { + "type": "float", + "value": 40.4588 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 101 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14747 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 459 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Autumn" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_treeautumn" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 9.184200000000001 + }, + "Y": { + "type": "float", + "value": 43.671 + }, + "Z": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 100 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14746 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Normal" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_tree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 7.7588 + }, + "Y": { + "type": "float", + "value": 42.2201 + }, + "Z": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 100 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14746 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Normal" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_tree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 45.8356 + }, + "Y": { + "type": "float", + "value": 25.527 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 100 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14746 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Normal" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_tree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 43.5498 + }, + "Y": { + "type": "float", + "value": 40.9421 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 101 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14747 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 459 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Autumn" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_treeautumn" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 29.9781 + }, + "Y": { + "type": "float", + "value": 38.6245 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 100 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14746 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Normal" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_tree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 31.1446 + }, + "Y": { + "type": "float", + "value": 27.7922 + }, + "Z": { + "type": "float", + "value": 0.1396 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 101 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14747 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 459 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Autumn" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_treeautumn" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 20.1559 + }, + "Y": { + "type": "float", + "value": 31.7799 + }, + "Z": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 340 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68852 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 9208 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 779 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Ivy" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_ivy" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 30.8323 + }, + "Y": { + "type": "float", + "value": 4.8313 + }, + "Z": { + "type": "float", + "value": 1.4029 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 176 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14750 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5819 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 534 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "WaterDrip" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_waterdrip" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 29.4733 + }, + "Y": { + "type": "float", + "value": 5.4769 + }, + "Z": { + "type": "float", + "value": 0.0413 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 28 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "A portal glows softly before you. You wonder where it leads.", + "id": 14533 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Genesis Exit Portal", + "id": 5670 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "psi_gen_exit" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 386 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "GenesisExit01" + }, + "TemplateResRef": { + "type": "resref", + "value": "genesisexit" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 20.8551 + }, + "Y": { + "type": "float", + "value": 11.5596 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67806 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 8.0 + }, + "MinDistance": { + "type": "float", + "value": 0.8 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_cv_firecamp1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "Campfire" + }, + "TemplateResRef": { + "type": "resref", + "value": "campfire" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 42.7805 + }, + "YPosition": { + "type": "float", + "value": 9.796900000000001 + }, + "ZPosition": { + "type": "float", + "value": 1.5 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67978 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_na_steamlg1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "SteamSmallLoop" + }, + "TemplateResRef": { + "type": "resref", + "value": "steamsmallloop" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 34.605 + }, + "YPosition": { + "type": "float", + "value": 20.6198 + }, + "ZPosition": { + "type": "float", + "value": 0.9752 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68014 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_na_waterfall2" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WaterfallLarge" + }, + "TemplateResRef": { + "type": "resref", + "value": "waterfalllarge" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 36.2186 + }, + "YPosition": { + "type": "float", + "value": 36.7233 + }, + "ZPosition": { + "type": "float", + "value": 2.4008 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68007 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 1 + }, + "RandomRangeX": { + "type": "float", + "value": 10.0 + }, + "RandomRangeY": { + "type": "float", + "value": 10.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_twigsnap1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_twigsnap2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_twigsnap3" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "TwigSnaps" + }, + "TemplateResRef": { + "type": "resref", + "value": "twigsnaps" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 14.5023 + }, + "YPosition": { + "type": "float", + "value": 30.9584 + }, + "ZPosition": { + "type": "float", + "value": 1.5531 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67886 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 6.0 + }, + "MinDistance": { + "type": "float", + "value": 0.6 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 1 + }, + "RandomRangeX": { + "type": "float", + "value": 10.0 + }, + "RandomRangeY": { + "type": "float", + "value": 10.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_leafmove1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_leafmove2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_leafmove3" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "LeafRustles" + }, + "TemplateResRef": { + "type": "resref", + "value": "leafrustles" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 22.1506 + }, + "YPosition": { + "type": "float", + "value": 43.1384 + }, + "ZPosition": { + "type": "float", + "value": 1.5 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67845 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_mg_entrmyst1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "EntranceMysterious" + }, + "TemplateResRef": { + "type": "resref", + "value": "entrancemysterio" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 20.6615 + }, + "YPosition": { + "type": "float", + "value": 11.3499 + }, + "ZPosition": { + "type": "float", + "value": 1.5037 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "_AREASTART_EreWood" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 20.9491 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 11.4037 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + } +} diff --git a/src/module/git/frostedpits.git.json b/src/module/git/frostedpits.git.json new file mode 100644 index 0000000..082db33 --- /dev/null +++ b/src/module/git/frostedpits.git.json @@ -0,0 +1,16452 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 103 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 82 + }, + "AmbientSndNight": { + "type": "int", + "value": 103 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 82 + }, + "EnvAudio": { + "type": "int", + "value": 51 + }, + "MusicBattle": { + "type": "int", + "value": 73 + }, + "MusicDay": { + "type": "int", + "value": 68 + }, + "MusicDelay": { + "type": "int", + "value": 54000 + }, + "MusicNight": { + "type": "int", + "value": 68 + } + } + }, + "Creature List": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 14 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 6.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 8 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 19 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 36 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12388 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13270 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32768, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13270 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13249 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 19 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS017" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps017" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12389 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 36 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 68 + }, + "NaturalAC": { + "type": "byte", + "value": 5 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 149 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__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": 7 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 27 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_BEARPOLAR" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_bearpolar" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 4.0531 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 70.16849999999999 + }, + "ZPosition": { + "type": "float", + "value": 5.0039 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 14 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 6.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 8 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 19 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 36 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12388 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13270 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32768, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13270 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13249 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 19 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS017" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps017" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12389 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 36 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 68 + }, + "NaturalAC": { + "type": "byte", + "value": 5 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 149 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__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": 7 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 27 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_BEARPOLAR" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_bearpolar" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 6.2388 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 9.337300000000001 + }, + "ZPosition": { + "type": "float", + "value": 10.0152 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 14 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 6.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 8 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 19 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 36 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12388 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13270 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32768, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13270 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13249 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 19 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS017" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps017" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12389 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 36 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 68 + }, + "NaturalAC": { + "type": "byte", + "value": 5 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 149 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__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": 7 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 27 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_BEARPOLAR" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_bearpolar" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 67.6966 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 11.916 + }, + "ZPosition": { + "type": "float", + "value": 10.0 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 14 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 6.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 8 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 19 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 36 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12388 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13270 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32768, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13270 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13249 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 19 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS017" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps017" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12389 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 36 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 68 + }, + "NaturalAC": { + "type": "byte", + "value": 5 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 149 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__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": 7 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 27 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_BEARPOLAR" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_bearpolar" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 50.5492 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 71.9165 + }, + "ZPosition": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 184 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 5.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 23 + }, + "ClassLevel": { + "type": "short", + "value": 6 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 16 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 33 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12817 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13242 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32768, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13242 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13242 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 131072, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13074 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 22 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 24 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 5 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 20 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREITEM026" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_creitem026" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12818 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 4 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 33 + }, + "Int": { + "type": "byte", + "value": 9 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 51 + }, + "NaturalAC": { + "type": "byte", + "value": 5 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 320 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__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": 9 + } + }, + { + "__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": 105 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 230 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 6 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 230 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 6 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 230 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 6 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 18 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_WOLFWINT" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wolfwint" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 39.9354 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 68.4714 + }, + "ZPosition": { + "type": "float", + "value": 10.0 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 184 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 5.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 23 + }, + "ClassLevel": { + "type": "short", + "value": 6 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 16 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 33 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12817 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13242 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32768, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13242 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13242 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 131072, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13074 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 22 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 24 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 5 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 20 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREITEM026" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_creitem026" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12818 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 4 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 33 + }, + "Int": { + "type": "byte", + "value": 9 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 51 + }, + "NaturalAC": { + "type": "byte", + "value": 5 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 320 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__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": 9 + } + }, + { + "__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": 105 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 230 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 6 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 230 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 6 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 230 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 6 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 18 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_WOLFWINT" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wolfwint" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 12.0707 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 2.6577 + }, + "ZPosition": { + "type": "float", + "value": 15.0035 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 184 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 5.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 23 + }, + "ClassLevel": { + "type": "short", + "value": 6 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 16 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 33 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12817 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13242 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32768, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13242 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13242 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps010" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 131072, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13074 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 22 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 24 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 5 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 20 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREITEM026" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_creitem026" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12818 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 4 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 33 + }, + "Int": { + "type": "byte", + "value": 9 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 51 + }, + "NaturalAC": { + "type": "byte", + "value": 5 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 320 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__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": 9 + } + }, + { + "__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": 105 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 230 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 6 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 230 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 6 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 230 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 6 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 18 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_WOLFWINT" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wolfwint" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 77.7587 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 45.969 + }, + "ZPosition": { + "type": "float", + "value": 5.2387 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 94 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 2.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 3 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 16 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12429 + } + }, + "Dex": { + "type": "byte", + "value": 19 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13265 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32768, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13265 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13253 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS021" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps021" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 131072, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13101 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 54 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREITEM081" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_creitem081" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 42 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 57919 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 16 + }, + "Int": { + "type": "byte", + "value": 13 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 22 + }, + "NaturalAC": { + "type": "byte", + "value": 2 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 164 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__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": 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": 6 + } + }, + { + "__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": 19 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 16 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_CRAGCAT" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cragcat" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 59.9493 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 77.38079999999999 + }, + "ZPosition": { + "type": "float", + "value": 10.0 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 94 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 2.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 3 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 16 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12429 + } + }, + "Dex": { + "type": "byte", + "value": 19 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13265 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32768, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13265 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13253 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS021" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps021" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 131072, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13101 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 54 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREITEM081" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_creitem081" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 42 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 57919 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 16 + }, + "Int": { + "type": "byte", + "value": 13 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 22 + }, + "NaturalAC": { + "type": "byte", + "value": 2 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 164 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__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": 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": 6 + } + }, + { + "__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": 19 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 16 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_CRAGCAT" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cragcat" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 1.7674 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 40.2016 + }, + "ZPosition": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 94 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 2.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 3 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 16 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12429 + } + }, + "Dex": { + "type": "byte", + "value": 19 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13265 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32768, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13265 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3124 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13253 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS021" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps021" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 131072, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13101 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 54 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREITEM081" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_creitem081" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 42 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 57919 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 16 + }, + "Int": { + "type": "byte", + "value": 13 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 22 + }, + "NaturalAC": { + "type": "byte", + "value": 2 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 164 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__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": 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": 6 + } + }, + { + "__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": 19 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 16 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_CRAGCAT" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cragcat" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 30.1227 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 10.2337 + }, + "ZPosition": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 37 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 5 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12439 + } + }, + "Dex": { + "type": "byte", + "value": 11 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 70 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13230 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12441 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 5 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 5 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 175 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_herbivore" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__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": 3 + } + }, + { + "__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": 24 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_DEERSTAG" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_deerstag" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 44.2585 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 22.7564 + }, + "ZPosition": { + "type": "float", + "value": 0.0226 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 37 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 5 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12439 + } + }, + "Dex": { + "type": "byte", + "value": 11 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 70 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13230 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12441 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 5 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 5 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 175 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_herbivore" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__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": 3 + } + }, + { + "__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": 24 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_DEERSTAG" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_deerstag" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 60.1792 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 54.4536 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 37 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 5 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12439 + } + }, + "Dex": { + "type": "byte", + "value": 11 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 70 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13230 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12441 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 5 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 5 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 175 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_herbivore" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__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": 3 + } + }, + { + "__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": 24 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_DEERSTAG" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_deerstag" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 29.3169 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 46.4936 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 37 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 5 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12439 + } + }, + "Dex": { + "type": "byte", + "value": 11 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 70 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13230 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12441 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 5 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 5 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 175 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_herbivore" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__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": 3 + } + }, + { + "__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": 24 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_DEERSTAG" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_deerstag" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 10.0454 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 30.9927 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 37 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 5 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12439 + } + }, + "Dex": { + "type": "byte", + "value": 11 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 70 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13230 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPP005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpp005" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12441 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 5 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 5 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 175 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "ambient_hb" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_herbivore" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__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": 3 + } + }, + { + "__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": 24 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_DEERSTAG" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_deerstag" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 18.1583 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 77.5626 + }, + "ZPosition": { + "type": "float", + "value": 10.2491 + } + } + ] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 1 + }, + "Appearance": { + "type": "dword", + "value": 57 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_door_death" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CaveExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_12" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 5.26 + }, + "Y": { + "type": "float", + "value": 5.51 + }, + "Z": { + "type": "float", + "value": 9.56 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 1 + }, + "Appearance": { + "type": "dword", + "value": 57 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_door_death" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CaveExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_12" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 4.74 + }, + "Y": { + "type": "float", + "value": 74.48999999999999 + }, + "Z": { + "type": "float", + "value": 4.56 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 28 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "A portal glows softly before you. You wonder where it leads.", + "id": 14533 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Genesis Exit Portal", + "id": 5670 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "psi_gen_exit" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 386 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "GenesisExit03" + }, + "TemplateResRef": { + "type": "resref", + "value": "genesisexit" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 5.4575 + }, + "Y": { + "type": "float", + "value": 6.2323 + }, + "Z": { + "type": "float", + "value": 9.6798 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68026 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 2 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_wt_gustcavrn1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WindCaveLoop" + }, + "TemplateResRef": { + "type": "resref", + "value": "windcaveloop" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 3.7249 + }, + "YPosition": { + "type": "float", + "value": 72.8325 + }, + "ZPosition": { + "type": "float", + "value": 6.5582 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68026 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 2 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_wt_gustcavrn1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WindCaveLoop" + }, + "TemplateResRef": { + "type": "resref", + "value": "windcaveloop" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 5.8019 + }, + "YPosition": { + "type": "float", + "value": 6.9031 + }, + "ZPosition": { + "type": "float", + "value": 11.451 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68027 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 2 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_wt_gustchasm1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WindChasmLoop" + }, + "TemplateResRef": { + "type": "resref", + "value": "windchasmloop" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 37.1442 + }, + "YPosition": { + "type": "float", + "value": 40.0664 + }, + "ZPosition": { + "type": "float", + "value": 1.5 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.0 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 10000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 91311 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.3 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak10" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak4" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak5" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak6" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak7" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak8" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak9" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "IceCracking" + }, + "TemplateResRef": { + "type": "resref", + "value": "icecracking" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 50.9069 + }, + "YPosition": { + "type": "float", + "value": 75.1444 + }, + "ZPosition": { + "type": "float", + "value": 6.0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.0 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 10000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 91311 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.3 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak10" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak4" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak5" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak6" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak7" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak8" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrak9" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "IceCracking" + }, + "TemplateResRef": { + "type": "resref", + "value": "icecracking" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 41.5277 + }, + "YPosition": { + "type": "float", + "value": 3.5193 + }, + "ZPosition": { + "type": "float", + "value": 11.0851 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.0 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 10000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 91312 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.3 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb10" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb4" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb5" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb6" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb7" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb8" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb9" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "IceCrumbling" + }, + "TemplateResRef": { + "type": "resref", + "value": "icecrumbling" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 10.3127 + }, + "YPosition": { + "type": "float", + "value": 50.0286 + }, + "ZPosition": { + "type": "float", + "value": 1.0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.0 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 10000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 91312 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.3 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb10" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb4" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb5" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb6" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb7" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb8" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_na_x2iccrmb9" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "IceCrumbling" + }, + "TemplateResRef": { + "type": "resref", + "value": "icecrumbling" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 76.2628 + }, + "YPosition": { + "type": "float", + "value": 31.3963 + }, + "ZPosition": { + "type": "float", + "value": 6.0993 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67895 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_mg_crystalgd1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "MagicCrystalGood" + }, + "TemplateResRef": { + "type": "resref", + "value": "magiccrystalgood" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 19.8399 + }, + "YPosition": { + "type": "float", + "value": 39.8017 + }, + "ZPosition": { + "type": "float", + "value": 2.1 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67894 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_mg_crystalev1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "MagicCrystalEvil" + }, + "TemplateResRef": { + "type": "resref", + "value": "magiccrystalevil" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 59.0157 + }, + "YPosition": { + "type": "float", + "value": 39.5362 + }, + "ZPosition": { + "type": "float", + "value": 1.8 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68036 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_bearwolf1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_bearwolf2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_bearwolf3" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WolfBearCaveGrunts" + }, + "TemplateResRef": { + "type": "resref", + "value": "wolfbearcavegrun" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 4.1739 + }, + "YPosition": { + "type": "float", + "value": 73.3994 + }, + "ZPosition": { + "type": "float", + "value": 6.3516 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68036 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_bearwolf1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_bearwolf2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_bearwolf3" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WolfBearCaveGrunts" + }, + "TemplateResRef": { + "type": "resref", + "value": "wolfbearcavegrun" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 6.1621 + }, + "YPosition": { + "type": "float", + "value": 6.6516 + }, + "ZPosition": { + "type": "float", + "value": 11.4273 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67839 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 1 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogbark1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogbark2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogbark3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogbark4" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogbark5" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogbark6" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogbark7" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogsbark1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogsbark2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogsbark3" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "DogBarks" + }, + "TemplateResRef": { + "type": "resref", + "value": "dogbarks" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 15.5075 + }, + "YPosition": { + "type": "float", + "value": 8.0929 + }, + "ZPosition": { + "type": "float", + "value": 12.2146 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67839 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 1 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogbark1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogbark2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogbark3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogbark4" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogbark5" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogbark6" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogbark7" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogsbark1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogsbark2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_dogsbark3" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "DogBarks" + }, + "TemplateResRef": { + "type": "resref", + "value": "dogbarks" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 2.6387 + }, + "YPosition": { + "type": "float", + "value": 8.733599999999999 + }, + "ZPosition": { + "type": "float", + "value": 11.8861 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 5000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 2000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67809 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 1 + }, + "RandomRangeX": { + "type": "float", + "value": 10.0 + }, + "RandomRangeY": { + "type": "float", + "value": 10.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_catscrech1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_an_catscrech2" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "CatScreeches" + }, + "TemplateResRef": { + "type": "resref", + "value": "catscreeches" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 60.3027 + }, + "YPosition": { + "type": "float", + "value": 73.9228 + }, + "ZPosition": { + "type": "float", + "value": 6.7624 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.3461 + }, + "PointY": { + "type": "float", + "value": -13.1812 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 10.1088 + }, + "PointY": { + "type": "float", + "value": -12.6299 + }, + "PointZ": { + "type": "float", + "value": 0.3294 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 10.0225 + }, + "PointY": { + "type": "float", + "value": -1.5125 + }, + "PointZ": { + "type": "float", + "value": 0.3294 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0005 + }, + "PointY": { + "type": "float", + "value": -0.0209 + }, + "PointZ": { + "type": "float", + "value": 0.025 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Temptation", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_temp_ent" + }, + "ScriptOnExit": { + "type": "resref", + "value": "prc_temp_exit" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Temptation" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 54.1153 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 47.0125 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -9.353199999999999 + }, + "PointY": { + "type": "float", + "value": -0.0474 + }, + "PointZ": { + "type": "float", + "value": 0.325 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0357 + }, + "PointY": { + "type": "float", + "value": 0.106 + }, + "PointZ": { + "type": "float", + "value": 0.325 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.325 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0121 + }, + "PointY": { + "type": "float", + "value": 9.0082 + }, + "PointZ": { + "type": "float", + "value": 0.325 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -8.777900000000001 + }, + "PointY": { + "type": "float", + "value": 8.9278 + }, + "PointZ": { + "type": "float", + "value": 0.325 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Compassion", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_comp_ent" + }, + "ScriptOnExit": { + "type": "resref", + "value": "prc_comp_exit" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Compassion" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 24.1338 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 35.5665 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Compassion", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "prc_compassion" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": 0.9988 + }, + "XPosition": { + "type": "float", + "value": 19.8762 + }, + "YOrientation": { + "type": "float", + "value": 0.0491 + }, + "YPosition": { + "type": "float", + "value": 39.8879 + }, + "ZPosition": { + "type": "float", + "value": 0.6 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Temptation", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "prc_temptation" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": -0.9973 + }, + "XPosition": { + "type": "float", + "value": 59.2668 + }, + "YOrientation": { + "type": "float", + "value": -0.0736 + }, + "YPosition": { + "type": "float", + "value": 39.8705 + }, + "ZPosition": { + "type": "float", + "value": 0.3 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "TempToCompassion", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "prc_runrunrun" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": -0.9988 + }, + "XPosition": { + "type": "float", + "value": 23.067 + }, + "YOrientation": { + "type": "float", + "value": 0.0491 + }, + "YPosition": { + "type": "float", + "value": 39.7916 + }, + "ZPosition": { + "type": "float", + "value": 0.3 + } + } + ] + } +} diff --git a/src/module/git/frozentimes.git.json b/src/module/git/frozentimes.git.json new file mode 100644 index 0000000..1211d4c --- /dev/null +++ b/src/module/git/frozentimes.git.json @@ -0,0 +1,18564 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 103 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 82 + }, + "AmbientSndNight": { + "type": "int", + "value": 103 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 82 + }, + "EnvAudio": { + "type": "int", + "value": 51 + }, + "MusicBattle": { + "type": "int", + "value": 73 + }, + "MusicDay": { + "type": "int", + "value": 68 + }, + "MusicDelay": { + "type": "int", + "value": 54000 + }, + "MusicNight": { + "type": "int", + "value": 68 + } + } + }, + "Creature List": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 50 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 14 + }, + "ChallengeRating": { + "type": "float", + "value": 20.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 18 + }, + "ClassLevel": { + "type": "short", + "value": 30 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 23 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 195 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12496 + } + }, + "Dex": { + "type": "byte", + "value": 10 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13274 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP015" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp015" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32768, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 72 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13274 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPSP015" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewpsp015" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65536, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13249 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 19 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREWPS017" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_crewps017" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 131072, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13185 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 6 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 22 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 22 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 24 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 5 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 20 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 11 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 39 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 71 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREITEMDRU" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_creitemdru" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12499 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 195 + }, + "Int": { + "type": "byte", + "value": 14 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 4 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58571 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dropable": { + "type": "byte", + "value": 1 + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13499 + } + }, + "ModelPart1": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC17" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc17" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 375 + }, + "NaturalAC": { + "type": "byte", + "value": 29 + }, + "NoPermDeath": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 200 + }, + "Race": { + "type": "byte", + "value": 11 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_dropin9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 25 + } + }, + { + "__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": 30 + } + }, + { + "__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": 30 + } + }, + { + "__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": 29 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 412 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 237 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 237 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 237 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 33 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_DRGWHITE003" + }, + "Tail": { + "type": "byte", + "value": 205 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_drgwhite003" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 205 + }, + "Wis": { + "type": "byte", + "value": 15 + }, + "XOrientation": { + "type": "float", + "value": 0.098 + }, + "XPosition": { + "type": "float", + "value": 60.3233 + }, + "YOrientation": { + "type": "float", + "value": -0.9952 + }, + "YPosition": { + "type": "float", + "value": 59.8287 + }, + "ZPosition": { + "type": "float", + "value": 5.6 + } + }, + { + "__struct_id": 4, + "Appearance_Type": { + "type": "word", + "value": 350 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 11 + }, + "ChallengeRating": { + "type": "float", + "value": 9.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 22 + }, + "ClassLevel": { + "type": "short", + "value": 14 + } + } + ] + }, + "Con": { + "type": "byte", + "value": 21 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": -2 + }, + "CurrentHitPoints": { + "type": "short", + "value": 63 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 40608 + } + }, + "Dex": { + "type": "byte", + "value": 9 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL012" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl012" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 24 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBLHW001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wblhw001" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 131072, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13074 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 22 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 24 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 5 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 20 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_CREITEM026" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_creitem026" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 391 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12560 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 63 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 133 + }, + "NaturalAC": { + "type": "byte", + "value": 9 + }, + "NoPermDeath": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 606 + }, + "Race": { + "type": "byte", + "value": 18 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 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": 6 + } + }, + { + "__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": 306 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 29 + }, + "Subrace": { + "type": "cexostring", + "value": "Frost Giant" + }, + "Tag": { + "type": "cexostring", + "value": "X0_GNTFROSTFEM" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_gntfrostfem" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 32.6384 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 34.8922 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 1 + }, + "Appearance": { + "type": "dword", + "value": 57 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_door_death" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CaveExit" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_12" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 54.74 + }, + "Y": { + "type": "float", + "value": 44.49 + }, + "Z": { + "type": "float", + "value": -0.44 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 451 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84192 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 83445 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_o2_dead" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "x2_plc_used_act" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 934 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_CRYSTAL" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_crystal" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 41.7272 + }, + "Y": { + "type": "float", + "value": 17.6658 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 308 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68828 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68827 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "DragonSkull" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_dragonskull" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 56.248 + }, + "Y": { + "type": "float", + "value": 35.2587 + }, + "Z": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 49.0845 + }, + "Y": { + "type": "float", + "value": 66.03530000000001 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 47.9526 + }, + "Y": { + "type": "float", + "value": 64.01000000000001 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 46.8934 + }, + "Y": { + "type": "float", + "value": 61.6086 + }, + "Z": { + "type": "float", + "value": 4.8689 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 50.7135 + }, + "Y": { + "type": "float", + "value": 63.5281 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 49.4152 + }, + "Y": { + "type": "float", + "value": 61.4674 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 48.5439 + }, + "Y": { + "type": "float", + "value": 60.105 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 50.6854 + }, + "Y": { + "type": "float", + "value": 60.9591 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 46.88 + }, + "Y": { + "type": "float", + "value": 59.2714 + }, + "Z": { + "type": "float", + "value": 4.9947 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 46.6842 + }, + "Y": { + "type": "float", + "value": 64.845 + }, + "Z": { + "type": "float", + "value": 4.9947 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 47.8486 + }, + "Y": { + "type": "float", + "value": 67.1086 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 60.741 + }, + "Y": { + "type": "float", + "value": 72.3836 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 58.797 + }, + "Y": { + "type": "float", + "value": 73.1712 + }, + "Z": { + "type": "float", + "value": 5.1515 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 62.8988 + }, + "Y": { + "type": "float", + "value": 70.3643 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 60.0179 + }, + "Y": { + "type": "float", + "value": 73.53019999999999 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 57.7385 + }, + "Y": { + "type": "float", + "value": 71.8134 + }, + "Z": { + "type": "float", + "value": 5.1726 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 58.8228 + }, + "Y": { + "type": "float", + "value": 70.5115 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 61.0413 + }, + "Y": { + "type": "float", + "value": 69.3456 + }, + "Z": { + "type": "float", + "value": 5.5537 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 64.64190000000001 + }, + "Y": { + "type": "float", + "value": 71.8498 + }, + "Z": { + "type": "float", + "value": 5.0591 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 50.0804 + }, + "Y": { + "type": "float", + "value": 72.41670000000001 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 50.4308 + }, + "Y": { + "type": "float", + "value": 69.24460000000001 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 46.6648 + }, + "Y": { + "type": "float", + "value": 72.3818 + }, + "Z": { + "type": "float", + "value": 5.1118 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 46.8151 + }, + "Y": { + "type": "float", + "value": 68.96299999999999 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 55.7728 + }, + "Y": { + "type": "float", + "value": 70.99420000000001 + }, + "Z": { + "type": "float", + "value": 5.0253 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 52.4445 + }, + "Y": { + "type": "float", + "value": 68.7784 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 54.1059 + }, + "Y": { + "type": "float", + "value": 70.72539999999999 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 70.8479 + }, + "Y": { + "type": "float", + "value": 72.56570000000001 + }, + "Z": { + "type": "float", + "value": 5.0009 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 67.5275 + }, + "Y": { + "type": "float", + "value": 72.3051 + }, + "Z": { + "type": "float", + "value": 5.3824 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 70.10339999999999 + }, + "Y": { + "type": "float", + "value": 69.20659999999999 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 66.91500000000001 + }, + "Y": { + "type": "float", + "value": 68.45699999999999 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 73.58150000000001 + }, + "Y": { + "type": "float", + "value": 69.74209999999999 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 259 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58566 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13494 + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc12" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58565 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13493 + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MSMLMISC11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_msmlmisc11" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 78634 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 795 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepine2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepine2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 72.29470000000001 + }, + "Y": { + "type": "float", + "value": 49.3981 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 256 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68921 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 9270 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 813 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_stonepatch" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_stonepatch" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 23.6661 + }, + "Y": { + "type": "float", + "value": 60.834 + }, + "Z": { + "type": "float", + "value": -0.0044 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 256 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68921 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 9270 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 813 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_stonepatch" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_stonepatch" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 21.7996 + }, + "Y": { + "type": "float", + "value": 60.8242 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 95 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14736 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5738 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 453 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Stones" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_stones" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 28.0696 + }, + "Y": { + "type": "float", + "value": 45.712 + }, + "Z": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 291 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68817 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68816 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_deadtree" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_deadtree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 38.1356 + }, + "Y": { + "type": "float", + "value": 51.0068 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 148 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.8225 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14609 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5791 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 506 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "DustPlume" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_dustplume" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 54.6776 + }, + "Y": { + "type": "float", + "value": 45.0087 + }, + "Z": { + "type": "float", + "value": -0.6046 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 28 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "A portal glows softly before you. You wonder where it leads.", + "id": 14533 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Genesis Exit Portal", + "id": 5670 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "psi_gen_exit" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 386 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "GenesisExit06" + }, + "TemplateResRef": { + "type": "resref", + "value": "genesisexit" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 65.0886 + }, + "Y": { + "type": "float", + "value": 25.1252 + }, + "Z": { + "type": "float", + "value": 0.6 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68034 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_wt_guststrng1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WindGustStrong" + }, + "TemplateResRef": { + "type": "resref", + "value": "windguststrong" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 48.6304 + }, + "YPosition": { + "type": "float", + "value": 47.0526 + }, + "ZPosition": { + "type": "float", + "value": 6.5094 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67998 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_wt_thundercl1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_wt_thundercl2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_wt_thundercl3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_wt_thundercl4" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "ThunderClapsNear" + }, + "TemplateResRef": { + "type": "resref", + "value": "thunderclapsnear" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 48.1833 + }, + "YPosition": { + "type": "float", + "value": 49.4995 + }, + "ZPosition": { + "type": "float", + "value": 6.5772 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67794 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 1 + }, + "RandomRangeX": { + "type": "float", + "value": 10.0 + }, + "RandomRangeY": { + "type": "float", + "value": 10.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_cv_bell1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_cv_bell2" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "BellRings" + }, + "TemplateResRef": { + "type": "resref", + "value": "bellrings" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 60.2303 + }, + "YPosition": { + "type": "float", + "value": 56.6952 + }, + "ZPosition": { + "type": "float", + "value": 6.8 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": {} + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "WP_X0_GNTFROSTFEM_01" + }, + "TemplateResRef": { + "type": "resref", + "value": "" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 24.5338 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 29.5564 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": {} + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "WP_X0_GNTFROSTFEM_02" + }, + "TemplateResRef": { + "type": "resref", + "value": "" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 32.4153 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 48.595 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": {} + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "WP_X0_GNTFROSTFEM_03" + }, + "TemplateResRef": { + "type": "resref", + "value": "" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 19.7248 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 45.4805 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": {} + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "WP_X0_GNTFROSTFEM_04" + }, + "TemplateResRef": { + "type": "resref", + "value": "" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 17.1971 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 57.3154 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": {} + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "WP_X0_GNTFROSTFEM_05" + }, + "TemplateResRef": { + "type": "resref", + "value": "" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 54.2168 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 29.1311 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": {} + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "WP_X0_GNTFROSTFEM_06" + }, + "TemplateResRef": { + "type": "resref", + "value": "" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 64.3753 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 47.9487 + }, + "ZPosition": { + "type": "float", + "value": 4.3887 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": {} + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "WP_X0_GNTFROSTFEM_07" + }, + "TemplateResRef": { + "type": "resref", + "value": "" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 36.1849 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 27.5938 + }, + "ZPosition": { + "type": "float", + "value": 0.0267 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": {} + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "WP_X0_GNTFROSTFEM_08" + }, + "TemplateResRef": { + "type": "resref", + "value": "" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 33.4344 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 32.3061 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + } +} diff --git a/src/module/git/limbo001.git.json b/src/module/git/limbo001.git.json new file mode 100644 index 0000000..067574b --- /dev/null +++ b/src/module/git/limbo001.git.json @@ -0,0 +1,1348 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 37 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 48 + }, + "AmbientSndNight": { + "type": "int", + "value": 37 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 47 + }, + "EnvAudio": { + "type": "int", + "value": 24 + }, + "MusicBattle": { + "type": "int", + "value": 57 + }, + "MusicDay": { + "type": "int", + "value": 58 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 58 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 8 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 1 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10000 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Strange runes and pictographs, likely arcane in nature, have been scorched into the sides of this hide-covered strongbox.", + "id": 14595 + } + }, + "DisarmDC": { + "type": "byte", + "value": 250 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 250 + }, + "Hardness": { + "type": "byte", + "value": 250 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 10000 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "HD_NONEXIST" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Heart of Chaos", + "id": 5348 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "nw_o2_classlow" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "nw_o2_classlow" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 250 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 366 + }, + "Ref": { + "type": "byte", + "value": 250 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HEARTOFCHAOS" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_chest2" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 250 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 7 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 250 + }, + "X": { + "type": "float", + "value": 39.9951 + }, + "Y": { + "type": "float", + "value": 40.0002 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 312 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 75934 + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 4 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68906 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "x0_o2_use_wdoor" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 765 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretStoneDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_sec_door3" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 5 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 40.0166 + }, + "Y": { + "type": "float", + "value": 30.0557 + }, + "Z": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 7 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "", + "id": 14594 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "PRC Manifestation Token Storage", + "id": 5348 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 365 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_MANIFTOKEN_STORE" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_chest1" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 50.0 + }, + "Y": { + "type": "float", + "value": 40.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 7 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14594 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "PRC_CRAFT_STORAGE_CHEST", + "id": 5348 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 365 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_CRAFT_STORAGE_CHEST" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_chest1" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 30.0 + }, + "Y": { + "type": "float", + "value": 41.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 7 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14594 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "\";\\n", + "id": 5348 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 365 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_CRAFT_TEMPORARY_CHEST" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_chest1" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 30.0 + }, + "Y": { + "type": "float", + "value": 39.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "npf_wp_chest_sp" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "npf_wp_chest_sp" + }, + "TemplateResRef": { + "type": "resref", + "value": "npf_wp_chest_sp" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 39.7548 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 59.8898 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "PRC Shifting Template creature spawn location", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_SHIFTING_TEMPLATE_SPAWN" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 20.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 20.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + } +} diff --git a/src/module/git/mordmagman01.git.json b/src/module/git/mordmagman01.git.json new file mode 100644 index 0000000..2fd5f4a --- /dev/null +++ b/src/module/git/mordmagman01.git.json @@ -0,0 +1,342 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 66 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 66 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 41 + }, + "MusicDay": { + "type": "int", + "value": 50 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 50 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Mansion Exit" + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "GenericType": { + "type": "byte", + "value": 8 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "dummy" + }, + "LinkedToFlags": { + "type": "byte", + "value": 1 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Mansion Exit" + } + }, + "OnClick": { + "type": "resref", + "value": "mord_exit" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_door_death" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 558 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MordsMansExit01" + }, + "TemplateResRef": { + "type": "resref", + "value": "mansionexit" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "MMM_ITEM" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.0 + }, + "Y": { + "type": "float", + "value": 40.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_DISABLE_TELEPORTATION_IN_AREA" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 3 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/git/mordmagman02.git.json b/src/module/git/mordmagman02.git.json new file mode 100644 index 0000000..3c2701c --- /dev/null +++ b/src/module/git/mordmagman02.git.json @@ -0,0 +1,342 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 66 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 66 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 41 + }, + "MusicDay": { + "type": "int", + "value": 50 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 50 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Mansion Exit" + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "GenericType": { + "type": "byte", + "value": 8 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "dummy" + }, + "LinkedToFlags": { + "type": "byte", + "value": 1 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Mansion Exit" + } + }, + "OnClick": { + "type": "resref", + "value": "mord_exit" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_door_death" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 558 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MordsMansExit02" + }, + "TemplateResRef": { + "type": "resref", + "value": "mansionexit" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "MMM_ITEM" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.0 + }, + "Y": { + "type": "float", + "value": 40.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_DISABLE_TELEPORTATION_IN_AREA" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 3 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/git/mordmagman03.git.json b/src/module/git/mordmagman03.git.json new file mode 100644 index 0000000..d69b078 --- /dev/null +++ b/src/module/git/mordmagman03.git.json @@ -0,0 +1,342 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 66 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 66 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 41 + }, + "MusicDay": { + "type": "int", + "value": 50 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 50 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Mansion Exit" + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "GenericType": { + "type": "byte", + "value": 8 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "dummy" + }, + "LinkedToFlags": { + "type": "byte", + "value": 1 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Mansion Exit" + } + }, + "OnClick": { + "type": "resref", + "value": "mord_exit" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_door_death" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 558 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MordsMansExit03" + }, + "TemplateResRef": { + "type": "resref", + "value": "mansionexit" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "MMM_ITEM" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.0 + }, + "Y": { + "type": "float", + "value": 40.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_DISABLE_TELEPORTATION_IN_AREA" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 3 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/git/mordmagman04.git.json b/src/module/git/mordmagman04.git.json new file mode 100644 index 0000000..df61455 --- /dev/null +++ b/src/module/git/mordmagman04.git.json @@ -0,0 +1,342 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 66 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 66 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 41 + }, + "MusicDay": { + "type": "int", + "value": 50 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 50 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Mansion Exit" + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "GenericType": { + "type": "byte", + "value": 8 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "dummy" + }, + "LinkedToFlags": { + "type": "byte", + "value": 1 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Mansion Exit" + } + }, + "OnClick": { + "type": "resref", + "value": "mord_exit" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_door_death" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 558 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MordsMansExit04" + }, + "TemplateResRef": { + "type": "resref", + "value": "mansionexit" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "MMM_ITEM" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.0 + }, + "Y": { + "type": "float", + "value": 40.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_DISABLE_TELEPORTATION_IN_AREA" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 3 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/git/mordmagman05.git.json b/src/module/git/mordmagman05.git.json new file mode 100644 index 0000000..1bc7bbf --- /dev/null +++ b/src/module/git/mordmagman05.git.json @@ -0,0 +1,342 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 66 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 66 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 41 + }, + "MusicDay": { + "type": "int", + "value": 50 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 50 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Mansion Exit" + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "GenericType": { + "type": "byte", + "value": 8 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "dummy" + }, + "LinkedToFlags": { + "type": "byte", + "value": 1 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Mansion Exit" + } + }, + "OnClick": { + "type": "resref", + "value": "mord_exit" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_door_death" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 558 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MordsMansExit05" + }, + "TemplateResRef": { + "type": "resref", + "value": "mansionexit" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "MMM_ITEM" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.0 + }, + "Y": { + "type": "float", + "value": 40.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_DISABLE_TELEPORTATION_IN_AREA" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 3 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/git/mordmagman06.git.json b/src/module/git/mordmagman06.git.json new file mode 100644 index 0000000..e2220c1 --- /dev/null +++ b/src/module/git/mordmagman06.git.json @@ -0,0 +1,342 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 66 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 66 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 41 + }, + "MusicDay": { + "type": "int", + "value": 50 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 50 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Mansion Exit" + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "GenericType": { + "type": "byte", + "value": 8 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "dummy" + }, + "LinkedToFlags": { + "type": "byte", + "value": 1 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Mansion Exit" + } + }, + "OnClick": { + "type": "resref", + "value": "mord_exit" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_door_death" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 558 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MordsMansExit06" + }, + "TemplateResRef": { + "type": "resref", + "value": "mansionexit" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "MMM_ITEM" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.0 + }, + "Y": { + "type": "float", + "value": 40.0 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_DISABLE_TELEPORTATION_IN_AREA" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 3 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/git/prc_epiclab.git.json b/src/module/git/prc_epiclab.git.json new file mode 100644 index 0000000..ef8e12a --- /dev/null +++ b/src/module/git/prc_epiclab.git.json @@ -0,0 +1,78978 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 66 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 66 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 70 + }, + "MusicDay": { + "type": "int", + "value": 65 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 65 + } + } + }, + "Creature List": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 11 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 43.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 10 + }, + "ClassLevel": { + "type": "short", + "value": 60 + }, + "MemorizedList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 37 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 100 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 144 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 151 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 86 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 102 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 107 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 371 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 165 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 174 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList2": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 120 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 90 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 93 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 115 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 150 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 175 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList3": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 21 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 59 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 78 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 176 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList4": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 47 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 375 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 368 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 119 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 172 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 191 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList5": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 459 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 23 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 369 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 71 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 99 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 179 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList6": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 14 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 485 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 72 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 448 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 180 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList7": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 39 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 123 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 135 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 141 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 169 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList8": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 69 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 367 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 110 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 117 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 134 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList9": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 44 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 116 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 178 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 185 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 193 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 23 + }, + "Color_Skin": { + "type": "byte", + "value": 40 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "prc_epicmerchant" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 151 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 11 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 19 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 21 + }, + "Cloth2Color": { + "type": "byte", + "value": 22 + }, + "Cost": { + "type": "dword", + "value": 48791 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13853 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 21 + }, + "Leather2Color": { + "type": "byte", + "value": 21 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13852 + } + }, + "Metal1Color": { + "type": "byte", + "value": 5 + }, + "Metal2Color": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 11 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 39 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 4 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_MCLOTH003" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_mcloth003" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 857 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 858 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 859 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 944 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 946 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 618 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 875 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 877 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 990 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 878 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 876 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 874 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 976 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 794 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 795 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 796 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 800 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 401 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 696 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 25 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 29 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 945 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 36 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 303 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 51 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spellbook Merchant" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 151 + }, + "Int": { + "type": "byte", + "value": 31 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 1 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 271 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 1016 + }, + "Race": { + "type": "byte", + "value": 20 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x2_def_attacked" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x2_def_ondamage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_def_ondeath" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x2_def_onconv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x2_def_ondisturb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x2_def_endcombat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x2_def_heartbeat" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x2_def_onblocked" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x2_def_percept" + }, + "ScriptRested": { + "type": "resref", + "value": "x2_def_rested" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_def_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_def_spellcast" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x2_def_userdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 63 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 63 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 63 + } + }, + { + "__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": 63 + } + }, + { + "__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": 63 + } + }, + { + "__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": 415 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 10 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "EpicSpellbookMerchant" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "epicspellbookmer" + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 2 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 9.91 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 7.1 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Door List": { + "type": "list", + "value": [] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookshelf" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 359 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookshelf" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookshelf" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 8.347 + }, + "Y": { + "type": "float", + "value": 37.3529 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 301 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.7118 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookshelf" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 661 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookshelf" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookshelf001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 4.5597 + }, + "Y": { + "type": "float", + "value": 35.7741 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 311 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.9817 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookshelf" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 662 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookshelf" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookshelf002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 16.2969 + }, + "Y": { + "type": "float", + "value": 35.6342 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.6444 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookshelf" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 359 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookshelf" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookshelf" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 17.6552 + }, + "Y": { + "type": "float", + "value": 30.2734 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookshelf" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 359 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookshelf" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookshelf" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 12.1802 + }, + "Y": { + "type": "float", + "value": 37.375 + }, + "Z": { + "type": "float", + "value": 0.0585 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookshelf" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 359 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookshelf" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookshelf" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.8059 + }, + "Y": { + "type": "float", + "value": 32.1799 + }, + "Z": { + "type": "float", + "value": 0.0115 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 301 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookshelf" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 661 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookshelf" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookshelf001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.5755 + }, + "Y": { + "type": "float", + "value": 24.6801 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 311 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookshelf" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 662 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookshelf" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookshelf002" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 18.0739 + }, + "Y": { + "type": "float", + "value": 24.9612 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 464 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84583 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84568 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_BOOK2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_book2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 3.2113 + }, + "Y": { + "type": "float", + "value": 26.9185 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 56 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.54 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookpile" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 414 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookpile" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookpile" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.5667 + }, + "Y": { + "type": "float", + "value": 29.1905 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 56 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.3191 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookpile" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 414 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookpile" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookpile" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 16.5897 + }, + "Y": { + "type": "float", + "value": 31.2367 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 423 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.5236 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Table" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 906 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Table" + }, + "TemplateResRef": { + "type": "resref", + "value": "table" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 6.72 + }, + "Y": { + "type": "float", + "value": 32.6 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 279 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.5236 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Before you can research any epic spell, you need a spell seed. Use a spell seed book to learn the seed.\n\nTo research a spell, you must have the needed gold, XP (above and beyond the minimum for your current level), and a Spellcraft skill high enough. Use any one of the Epic Spell books to learn more about the spell. To research, place the book into the inventory of the Tome of Epic Spell Learning.\n\nAfter you research a spell, you can cast it by first assigning it to the radial menu, via the conversation that pops up when you press the rest button. There is currently a bug in the radial menu coding that prevents any more than 7 spells to be present on the epic spell radial before crashing, so this is a workaround.\n\nYou must also use the Epic Spell System rest to gain Epic Spell Slots for the day. The number of slots you get is equal to your Lore skill, divided by 10 and rounded down. \n" + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Tome of Epic Spell Learning" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "_plc_rsrch_ep_sp" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 756 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "TomeofEpicSpellLearning" + }, + "TemplateResRef": { + "type": "resref", + "value": "tomeofepicspelll" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 6.94 + }, + "Y": { + "type": "float", + "value": 32.17 + }, + "Z": { + "type": "float", + "value": 0.8 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 159 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14672 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14673 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 517 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Magic Sparks - Blue" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_magicblue" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 6.94 + }, + "Y": { + "type": "float", + "value": 32.17 + }, + "Z": { + "type": "float", + "value": 0.8 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 28 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Return Portal" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "prc_epiclab_ret" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 386 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Portal" + }, + "TemplateResRef": { + "type": "resref", + "value": "portal" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 17.0514 + }, + "Y": { + "type": "float", + "value": 20.7939 + }, + "Z": { + "type": "float", + "value": 0.1204 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 301 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.4909 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookshelf" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 661 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookshelf" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookshelf001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 14.219 + }, + "Y": { + "type": "float", + "value": 5.3156 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookshelf" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 359 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookshelf" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookshelf" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 7.8835 + }, + "Y": { + "type": "float", + "value": 2.6684 + }, + "Z": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.0612 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookshelf" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 359 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookshelf" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookshelf" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 4.0157 + }, + "Y": { + "type": "float", + "value": 4.6572 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookshelf" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 359 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookshelf" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookshelf" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.6589 + }, + "Y": { + "type": "float", + "value": 14.0455 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookshelf" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 359 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookshelf" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookshelf" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.6508 + }, + "Y": { + "type": "float", + "value": 15.9937 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 301 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookshelf" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 661 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookshelf" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookshelf001" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.04 + }, + "Y": { + "type": "float", + "value": 14.99 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 43 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14539 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5685 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 401 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Alchemist's Apparatus" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_alchapprtus" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.5185 + }, + "Y": { + "type": "float", + "value": 20.8507 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 43 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14539 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5685 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 401 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Alchemist's Apparatus" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_alchapprtus" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 17.3353 + }, + "Y": { + "type": "float", + "value": 27.839 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 464 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.5035 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84583 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84568 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_BOOK2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_book2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 3.1342 + }, + "Y": { + "type": "float", + "value": 16.0514 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 455 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.8225 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84574 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84561 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_PSHEETS" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_psheets" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 7.5911 + }, + "Y": { + "type": "float", + "value": 6.5812 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 455 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.5154 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84574 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84561 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_PSHEETS" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_psheets" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 4.0228 + }, + "Y": { + "type": "float", + "value": 29.5664 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 464 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.0371 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84583 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84568 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_BOOK2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_book2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 3.0628 + }, + "Y": { + "type": "float", + "value": 16.1311 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookshelf" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 359 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookshelf" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookshelf" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 13.1136 + }, + "Y": { + "type": "float", + "value": 14.0216 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 1 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookshelf" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 359 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookshelf" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookshelf" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 13.1055 + }, + "Y": { + "type": "float", + "value": 15.9698 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 56 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.2763 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Bookpile" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 414 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bookpile" + }, + "TemplateResRef": { + "type": "resref", + "value": "bookpile" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.0633 + }, + "Y": { + "type": "float", + "value": 17.2934 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 464 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84583 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84568 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_BOOK2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_book2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 12.0551 + }, + "Y": { + "type": "float", + "value": 14.3381 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 464 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.2209 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84583 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84568 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_BOOK2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_book2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 12.044 + }, + "Y": { + "type": "float", + "value": 14.2035 + }, + "Z": { + "type": "float", + "value": 0.08550000000000001 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 319 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68896 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68893 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 751 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "RugOriental2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_rugoriental2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 9.9109 + }, + "Y": { + "type": "float", + "value": 9.050700000000001 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 317 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68809 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68808 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Chandelier" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_chandelier" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 10.0149 + }, + "Y": { + "type": "float", + "value": 10.039 + }, + "Z": { + "type": "float", + "value": 0.014 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 317 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68809 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68808 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Chandelier" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_chandelier" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 10.0651 + }, + "Y": { + "type": "float", + "value": 30.0193 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67900 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 20.0 + }, + "MinDistance": { + "type": "float", + "value": 2.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_mg_ballmagic1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "MagicGlowingBall" + }, + "TemplateResRef": { + "type": "resref", + "value": "magicglowingball" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 6.94 + }, + "YPosition": { + "type": "float", + "value": 32.17 + }, + "ZPosition": { + "type": "float", + "value": 1.5 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 7000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67840 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.45 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_wt_gustdraft1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "DraftGustInterior" + }, + "TemplateResRef": { + "type": "resref", + "value": "draftgustinterio" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 93 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 2.1472 + }, + "YPosition": { + "type": "float", + "value": 37.9444 + }, + "ZPosition": { + "type": "float", + "value": 1.5 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 11, + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 0 + }, + "IdentifyPrice": { + "type": "int", + "value": -1 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "UberStore" + } + }, + "MarkDown": { + "type": "int", + "value": 0 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "MaxBuyPrice": { + "type": "int", + "value": -1 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "OnStoreClosed": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "uberstore" + }, + "StoreGold": { + "type": "int", + "value": -1 + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2 + }, + { + "__struct_id": 3 + }, + { + "__struct_id": 1, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Achilles Heel" + } + }, + "ModelPart1": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ACHHEEL" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_achilles" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: All Hope Lost" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ALLHOPE" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_allhope" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Allied Martyr" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "AL_MART" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_allmart" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Anarchy's Call" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ANARCHY" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_anarchy" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Animus Blast" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ANBLAST" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_animblas" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Animus Blizzard" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ANBLIZZ" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_animbliz" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Army Unfallen" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ARMY_UN" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_armyunfa" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Audience of Stone" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "A_STONE" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_audstone" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Champion's Valor" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CHAMP_V" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_champval" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Contingent Resurrection" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CON_RES" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_contresu" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 10, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Contingent Reunion" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CON_REU" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_contreun" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 11, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Deadeye Sense" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "DEADEYE" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_deadeyes" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 12, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Dire Winter" + } + }, + "ModelPart1": { + "type": "byte", + "value": 27 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "DIREWIN" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_direwint" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 13, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Dragon Knight" + } + }, + "ModelPart1": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "DRG_KNI" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_dragonkn" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 14, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Dullblades" + } + }, + "ModelPart1": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "DULBLAD" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_dullblad" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 15, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Dweomer Thief" + } + }, + "ModelPart1": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "DWEO_TH" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_dweomert" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Enslave" + } + }, + "ModelPart1": { + "type": "byte", + "value": 20 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ENSLAVE" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_enslave" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 17, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Epic Mage Armor" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EP_M_AR" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_epmagarm" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 18, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Epic Spell Reflection" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EP_SP_R" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_epspellr" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 19, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Epic Warding" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EP_WARD" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_epwardin" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 20, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Eternal Freedom" + } + }, + "ModelPart1": { + "type": "byte", + "value": 30 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ET_FREE" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_eterfree" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 21, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Fleetness of Foot" + } + }, + "ModelPart1": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "FLEETNS" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_fleetnes" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 22, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Gem Cage" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "GEMCAGE" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_gemcage" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 23, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Godsmite" + } + }, + "ModelPart1": { + "type": "byte", + "value": 28 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "GODSMIT" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_godsmite" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 24, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Greater Ruin" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "GR_RUIN" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_greatrui" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 25, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Greater Spell Resistance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "GR_SP_RE" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_grspellr" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 26, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Greater Timestop" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "GR_TIME" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_grtimest" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 27, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Hellball" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HELBALL" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_hellball" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 28, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Herculean Alliance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HERCALL" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_hercalli" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 29, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Herculean Empowerment" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HERCEMP" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_hercempo" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 30, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Impenetrability" + } + }, + "ModelPart1": { + "type": "byte", + "value": 27 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "IMPENET" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_impenetr" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 31, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Leech Field" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "LEECH_F" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_leechfie" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Magma Burst" + } + }, + "ModelPart1": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MAGMA_B" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_magmabur" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 33, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Mass Penguin" + } + }, + "ModelPart1": { + "type": "byte", + "value": 28 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MASSPEN" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_masspeng" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 34, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Momento Mori" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MORI" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_momentom" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 35, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Mummy Dust" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MUMDUST" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_mummdust" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 36, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Nailed to the Sky" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NAILSKY" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_nailedsk" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 37, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Order Restored" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ORDER_R" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_orderres" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 38, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Paths Become Known" + } + }, + "ModelPart1": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "PATHS_B" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_pathsbec" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 39, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Pestilence" + } + }, + "ModelPart1": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "PESTIL" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_pestilen" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 40, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Planar Cell" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "PLANCEL" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_planarce" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 41, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Psionic Salvo" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "PSION_S" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_psionics" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 42, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Rain of Fire" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "RAINFIR" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_rainfire" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 43, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Ruin" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "RUIN" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_ruin" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 44, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Singular Sunder" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SINGSUN" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_singsund" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 45, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Spell Worm" + } + }, + "ModelPart1": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_WORM" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_spelworm" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 46, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Storm Mantle" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "STORM_M" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_stormman" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 47, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Summon Aberration" + } + }, + "ModelPart1": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SUMABER" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_summaber" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 48, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Superb Dispelling" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SUP_DIS" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_superbdi" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 49, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: The Withering" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "THEWITH" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_thewithe" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 50, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Tolodine's Killing Wind" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "TOLO_KW" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_tolodine" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 51, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Transcendent Vitality" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "TRANVIT" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_transvit" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 52, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Twinfiend" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "TWINF" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_twinfien" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 53, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Unholy Disciple" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "UNHOLYD" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_unholydi" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 54, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Unimpinged" + } + }, + "ModelPart1": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "UNIMPIN" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_unimping" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 55, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Unseen Wanderer" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "UNSEENW" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_unseenwa" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 56, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Whip of Shar" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "WHIP_SH" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_whipshar" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 57, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Affliction, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Affliction" + } + }, + "ModelPart1": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_AFFLICT" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_afflict" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 58, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Animating Dead, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Animating Dead" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_ANIMDEAD" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_animdead" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 59, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Animation, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Animation" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_ANIMATE" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_animate" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 60, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Armor, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Armor" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_ARMOR" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_armor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 61, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Banishment, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Banishment" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_BANISH" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_banish" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 62, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Compelling, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Compelling" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_COMPEL" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_compel" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 63, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Concealment, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Concealment" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_CONCEAL" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_conceal" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 64, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Conjuration, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Conjuration" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_CONJURE" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_conjure" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Contact, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Contact" + } + }, + "ModelPart1": { + "type": "byte", + "value": 28 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 26 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_CONTACT" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_contact" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 66, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Delusion, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Delusion" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 26 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_DELUDE" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_delude" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 67, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Destruction, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Destruction" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 26 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_DESTROY" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_destroy" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 68, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Dispelling, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Dispelling" + } + }, + "ModelPart1": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 26 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_DISPEL" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_dispel" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 69, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Energy, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Energy" + } + }, + "ModelPart1": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 26 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_ENERGY" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_energy" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 70, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Foresight, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Foresight" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 28 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_FORESEE" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_foresee" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 71, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Fortification, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Fortification" + } + }, + "ModelPart1": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 28 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_FORTIFY" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_fortify" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 72, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Healing, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Healing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 30 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 28 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_HEAL" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_heal" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 73, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Life, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Life" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 28 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_LIFE" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_life" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 74, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Light, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Light" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 28 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_LIGHT" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_light" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 75, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Opposition, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Opposition" + } + }, + "ModelPart1": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_OPPOS" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_oppos" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 76, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Reflection, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Reflection" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_REFLECT" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_reflect" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 77, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Revealing, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Revealing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_REVEAL" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_reveal" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 78, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Shadow, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Shadow" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_SHADOW" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_shadow" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 79, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Slaying, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Slaying" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_SLAY" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_slay" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 80, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Summoning, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Summoning" + } + }, + "ModelPart1": { + "type": "byte", + "value": 28 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 32 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_SUMMON" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_summon" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 81, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Time, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Time" + } + }, + "ModelPart1": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 32 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_TIME" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_time" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 82, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Transformation, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Transformation" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 32 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_TRANSFRM" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_transfrm" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 83, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Transportation, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Transportation" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 32 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_TRANSPRT" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_transprt" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 84, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Warding, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Warding" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 32 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_WARD" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_ward" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "UberStore" + }, + "WillNotBuy": { + "type": "list", + "value": [] + }, + "WillOnlyBuy": { + "type": "list", + "value": [ + { + "__struct_id": 97869, + "BaseItem": { + "type": "int", + "value": 74 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 9.91 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 7.1 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 11, + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 0 + }, + "IdentifyPrice": { + "type": "int", + "value": -1 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "HotUStore" + } + }, + "MarkDown": { + "type": "int", + "value": 0 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "MaxBuyPrice": { + "type": "int", + "value": -1 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "OnStoreClosed": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "hotustore" + }, + "StoreGold": { + "type": "int", + "value": -1 + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2 + }, + { + "__struct_id": 3 + }, + { + "__struct_id": 1, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Dragon Knight" + } + }, + "ModelPart1": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "DRG_KNI" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_dragonkn" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Epic Mage Armor" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EP_M_AR" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_epmagarm" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Epic Warding" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EP_WARD" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_epwardin" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Greater Ruin" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "GR_RUIN" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_greatrui" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Hellball" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "HELBALL" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_hellball" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The knowledge contained in this tome would appear to allow a powerful spellcaster to research this spell, and subsequently cast it henceforth. \n\nWhile perusing the pages of this book would not jeopardize its integrity, using it as part of a full-fledged research process would undoubtedly destroy the fragile pages and its bindings.\n\nTo read more about the spell, simply read (USE) the book.\n\nTo research the spell, you must find an appropriate place to study and learn, depending on your magical leanings." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Epic Spell: Mummy Dust" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MUMDUST" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sp_mummdust" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Summoning, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Summoning" + } + }, + "ModelPart1": { + "type": "byte", + "value": 28 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_SUMMON" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_summon" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Armor, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Armor" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_ARMOR" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_armor" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Warding, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Warding" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_WARD" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_ward" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Destruction, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Destruction" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_DESTROY" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_destroy" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 10, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Energy, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Energy" + } + }, + "ModelPart1": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_ENERGY" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_energy" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 11, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This book has a timeless, yet frail quality about it. While the age of the tome itself is uncertain, there is little doubt about the power of the writings within. \n\nThis particular book appears to contain countless passages and teachings of the seed of Animating Dead, as a whole or a part of a spell of epic proportions..." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "The Seed of Animating Dead" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "EPIC_SD_ANIMDEAD" + }, + "TemplateResRef": { + "type": "resref", + "value": "epic_sd_animdead" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "HotUStore" + }, + "WillNotBuy": { + "type": "list", + "value": [] + }, + "WillOnlyBuy": { + "type": "list", + "value": [ + { + "__struct_id": 97869, + "BaseItem": { + "type": "int", + "value": 74 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 9.91 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 7.1 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 11, + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 0 + }, + "IdentifyPrice": { + "type": "int", + "value": -1 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "WizScrollStore" + } + }, + "MarkDown": { + "type": "int", + "value": 100 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "MaxBuyPrice": { + "type": "int", + "value": -1 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "OnStoreClosed": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "prc_wiz_store" + }, + "StoreGold": { + "type": "int", + "value": -1 + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787217 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Acid Orb", + "id": 13585 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1000 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR401" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr401" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787229 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Acid Storm", + "id": 13616 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1012 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR601" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr601" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787424 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Aganazzar's Scorcher", + "id": 13552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1087 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR206" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr206" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787369 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Baleful Transposition", + "id": 13552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1064 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR203" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr203" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1621 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787436 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Beltyn's Burning Blood", + "id": 13552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1098 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR503" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr503" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 36 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787371 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Benign Transposition", + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1065 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR107" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr107" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787237 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Blast of Flame", + "id": 13585 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1019 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR402" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr402" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 48 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787235 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Burning Bolt", + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1016 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR101" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr101" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787219 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cold Orb", + "id": 13585 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1002 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR403" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr403" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787426 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Create Magic Tatoo", + "id": 13552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1089 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR207" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr207" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 10, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787377 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Curse of Impending Blades", + "id": 13552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1070 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR204" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr204" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 11, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787239 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Disintegrate", + "id": 13616 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1021 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR602" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr602" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 12, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787221 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Electric Orb", + "id": 13585 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1004 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR404" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr404" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 13, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787243 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Energy Immunity", + "id": 13616 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1023 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR605" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr605" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 14, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787223 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fire Orb", + "id": 13585 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1006 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR405" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr405" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 15, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787387 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fireburst", + "id": 13552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1075 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR205" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr205" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787428 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Flashburst", + "id": 13573 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1092 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR305" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr305" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 17, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4322 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787430 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Flensing", + "id": 13637 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1093 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR802" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr802" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 18, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787289 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Forceblast", + "id": 13573 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1049 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR301" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr301" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 19, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787291 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Glitterdust", + "id": 13552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1051 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR201" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr201" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 20, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1621 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787389 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Fireburst", + "id": 13552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1077 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR502" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr502" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 21, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1621 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787275 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Heroism", + "id": 13608 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1036 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR501" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr501" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 22, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787458 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hail of Stone", + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1118 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR110" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr110" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 23, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 60 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787273 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heroism", + "id": 13552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1035 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR202" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr202" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 24, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787227 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ice Burst", + "id": 13573 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1010 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR302" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr302" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 25, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787438 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ilyykur's Mantle", + "id": 13585 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1101 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR409" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr409" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 26, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787440 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Improved Mage Armor", + "id": 13573 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1103 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR306" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr306" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 27, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787379 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Legion's Curse of Impending Blades", + "id": 13573 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1071 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR304" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr304" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 28, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 48 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787349 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Acid Orb", + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1054 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR102" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr102" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 29, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 48 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787353 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Cold Orb", + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1056 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR103" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr103" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 30, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 48 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787357 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Electric Orb", + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1058 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR104" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr104" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 31, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 48 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787361 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Fire Orb", + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1060 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR105" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr105" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 48 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787365 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Sonic Orb", + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1062 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR106" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr106" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 33, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787264 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lower Spell Resistance", + "id": 13585 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1031 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR407" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr407" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 34, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4322 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787241 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mantle of Egregious Might", + "id": 13637 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1022 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR801" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr801" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 35, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787250 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Bull's Strength", + "id": 13616 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1024 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR603" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr603" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 36, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787252 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Cat's Grace", + "id": 13616 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1025 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR604" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr604" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 37, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787254 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Eagle's Splendor", + "id": 13616 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1026 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR606" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr606" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 38, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787256 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Endurance", + "id": 13616 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1027 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR607" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr607" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 39, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787258 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Fox's Cunning", + "id": 13616 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1028 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR608" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr608" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 40, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787233 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Hold Monster", + "id": 13645 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1015 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR901" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr901" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 41, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3277 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787231 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Hold Person", + "id": 13627 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1014 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR701" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr704" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 42, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787260 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Owl's Wisdom", + "id": 13616 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1029 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR609" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr609" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 43, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 504 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787262 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Ultravision", + "id": 13585 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1030 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR408" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr408" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 44, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3277 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787346 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mordenkainen's Magnificent Mansion", + "id": 13627 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1053 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR702" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr702" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 45, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 36 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787442 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Nybor's Gentle Reminder", + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1106 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR108" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr108" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 46, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3277 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787444 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Nybor's Stern Reproof", + "id": 13627 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1109 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR705" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr705" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 47, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787266 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Serpent's Sigh", + "id": 13573 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1033 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR303" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr303" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 48, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787432 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shadow Spray", + "id": 13552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1094 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR208" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr208" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 49, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1344 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787446 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sinsabur's Baleful Bolt", + "id": 13585 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1110 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR410" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr410" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 50, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787399 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Slashing Darkness", + "id": 13660 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1085 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPDVSCR303" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_spdvscr303" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 51, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787448 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Snilloc's Snowball", + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1112 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR109" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr109" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 52, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787434 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Snilloc's Snowball Swarm", + "id": 13552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1096 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR209" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr209" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 53, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787225 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sonic Orb", + "id": 13585 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1008 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR406" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr406" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 54, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787452 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sphere of Ultimate Destruction", + "id": 13645 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1115 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR902" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr902" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 55, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787460 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spiderskin", + "id": 13573 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1120 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR307" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr307" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 56, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1344 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 16787462 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Viscid Glob", + "id": 13585 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1122 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SP_IT_SPARSCR411" + }, + "TemplateResRef": { + "type": "resref", + "value": "sp_it_sparscr411" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 57, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6096 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13614 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR603" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr603" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 58, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 24 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 1496 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 383 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 355 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR002" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr002" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 59, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6098 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13607 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR509" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr509" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 60, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 1586 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 502 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 367 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR201" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr201" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 61, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 960 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3854 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3853 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 454 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR501" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr501" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 62, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 1548 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 387 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 361 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPDVSCR601" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_spdvscr601" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 63, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6100 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13595 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR414" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr414" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 64, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4322 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2691 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2686 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 393 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR801" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr801" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2692 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2687 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 394 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR901" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr901" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 66, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2689 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2684 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 391 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR602" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr602" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 67, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3277 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2690 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2685 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 392 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR701" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr701" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 68, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1621 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2688 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2683 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 390 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR502" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr502" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 69, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3738 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3737 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 468 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR901" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr901" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 70, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4322 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3762 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3761 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 476 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR801" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr801" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 71, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6104 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13560 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR211" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr211" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 72, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6105 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13561 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR212" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr212" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 73, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6106 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR112" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr112" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 74, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6109 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13562 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 25 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR213" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr213" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 75, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6110 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13618 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR607" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr607" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 76, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6111 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13586 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 31 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR405" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr405" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 77, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 24 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6112 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13544 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR107" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr107" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 78, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6114 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13621 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR610" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr610" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 79, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6116 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13574 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 43 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR307" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr307" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 80, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6117 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13566 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 46 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR217" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr217" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 81, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1621 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6119 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13600 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 48 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR502" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr502" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 82, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6120 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 49 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR110" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr110" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 83, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3860 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3859 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 456 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR201" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr201" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 84, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6121 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13605 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 50 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR507" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr507" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 85, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6122 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13587 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 52 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR406" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr406" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 86, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6123 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13592 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 54 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR411" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr411" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 87, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 522 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 59 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 350 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPDVSCR301" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_spdvscr301" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 88, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3277 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6124 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13631 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 55 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR707" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr707" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 89, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6126 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 60 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPDVSCR605" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_spdvscr605" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 90, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6132 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13555 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 75 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR206" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr206" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 91, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6133 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13536 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 76 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR003" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr003" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 92, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3862 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3861 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 457 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR202" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr202" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 93, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3277 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6136 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13628 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 78 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR704" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr704" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 94, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6137 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13599 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 81 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR501" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr501" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 95, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6138 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13568 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 84 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR301" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr301" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 96, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2680 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2679 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 389 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR301" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr301" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 97, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6141 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13646 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 88 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR905" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr905" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 98, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6142 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13601 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 89 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR503" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr503" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 99, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6526 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 58581 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 288 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "nw_it_sparscr219" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr219" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 100, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 24 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 1857 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1852 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 370 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR003" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr003" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 101, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6144 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13597 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 92 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR416" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr416" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 102, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6146 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13564 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 95 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR215" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr215" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 103, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6147 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13538 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 98 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR101" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr101" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 104, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6535 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 6335 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 311 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR503" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr503" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 105, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6148 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13649 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 99 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR908" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr908" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 106, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6149 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13593 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 100 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR412" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr412" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 107, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1621 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6498 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13619 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 195 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR608" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr608" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 108, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6542 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 40582 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 324 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR418" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr418" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 109, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3277 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 40158 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 8943 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 428 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPDVSCR509" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_spdvscr509" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 110, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2676 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 40140 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 387 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR101" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr101" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 111, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 58585 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13594 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR413" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr413" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 112, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1621 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6152 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13602 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 104 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR504" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr504" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 113, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6544 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 6343 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 327 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR305" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr305" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 114, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3277 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6153 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13632 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 105 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR708" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr708" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 115, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6155 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13576 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR309" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr309" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 116, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1621 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 1890 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1895 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 371 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR501" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr501" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 117, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6156 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13571 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 110 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR304" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr304" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 118, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3764 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3763 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 515 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR205" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr205" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 119, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 24 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 510 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 56 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 347 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR001" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr001" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 120, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3045 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3044 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 398 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR605" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr605" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 121, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6528 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 58582 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 294 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "nw_it_sparscr220" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr220" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 122, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6160 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13643 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 119 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR902" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr902" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 123, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3864 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3863 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 458 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR203" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr203" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 124, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6217 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13557 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 192 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR208" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr208" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 125, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6161 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13558 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 120 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR209" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr209" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 126, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6162 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13612 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 121 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR601" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr601" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 127, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6163 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13540 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 122 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR103" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr103" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 128, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1920 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3851 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3850 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 453 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR701" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr701" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 129, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1260 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6164 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13613 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 123 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR602" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr602" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 130, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3770 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3769 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 512 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR304" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr304" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 131, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4322 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6166 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13635 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 126 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR803" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr803" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 132, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3277 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2371 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2364 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 374 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPDVSCR602" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_spdvscr602" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 133, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1621 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6168 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13606 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 128 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR508" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr508" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 134, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6169 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13623 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 129 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR612" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr612" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 135, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6170 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13653 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 130 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR912" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr912" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 136, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6171 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13624 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 131 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR613" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr613" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 137, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1080 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2681 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2682 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 410 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR303" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr303" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 138, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6175 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13579 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 137 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR312" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr312" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 139, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6179 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13603 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 143 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR505" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr505" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 140, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6180 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13575 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 144 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR308" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr308" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 141, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3866 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3865 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 459 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR101" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr101" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 142, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4322 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6533 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13641 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 308 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR809" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr809" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 143, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3766 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3765 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 478 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR104" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr104" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 144, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1621 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6534 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 6334 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 310 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR401" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr401" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 145, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6183 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13543 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 147 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR106" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr106" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 146, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6185 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13589 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 149 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR408" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr408" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 147, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4322 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6186 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13636 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 150 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR804" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr804" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 148, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6187 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13556 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 151 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR207" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr207" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 149, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6189 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13581 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 153 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR314" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr314" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 150, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3868 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3867 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 460 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR102" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr102" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 151, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2376 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 66671 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 379 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR603" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr603" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 152, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2375 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2377 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 378 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR401" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr401" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 153, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3758 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3757 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 520 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR303" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr303" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 154, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6190 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13565 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 154 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR216" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr216" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 155, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6543 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 6342 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 326 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR602" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr602" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 156, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6191 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13567 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 155 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR218" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr218" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 157, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1621 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6192 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13609 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 157 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR511" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr511" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 158, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1621 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6193 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13610 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 158 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR512" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr512" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 159, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6195 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13598 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 160 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR417" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr417" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 160, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1621 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6196 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13611 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 161 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR513" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr513" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 161, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6197 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13537 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 162 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR004" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr004" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 162, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6198 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13577 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 164 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR310" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr310" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 163, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6199 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13541 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 167 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR104" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr104" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 164, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6494 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13569 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 286 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR302" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr302" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 165, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 48 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6204 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13546 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 172 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR109" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr109" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 166, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3768 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3767 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 479 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR105" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr105" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 167, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4322 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6207 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13639 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 179 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR807" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr807" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 168, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4322 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6208 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13638 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 180 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR806" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr806" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 169, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6210 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13622 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 182 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR611" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr611" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 170, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6212 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13551 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 184 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR202" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr202" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 171, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3870 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3869 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 461 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR301" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr301" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 172, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 960 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3872 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3871 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 462 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR502" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr502" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 173, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6213 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13647 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 187 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR906" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr906" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 174, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4322 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6214 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13633 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 188 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR801" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr801" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 175, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1621 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6215 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13604 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 189 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR506" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr506" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 176, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6216 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13582 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 190 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR401" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr401" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 177, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6219 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13642 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 197 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR901" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr901" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 178, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3277 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6220 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13629 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 198 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR705" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr705" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 179, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 900 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6536 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 58584 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 314 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "nw_it_sparscr315" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr315" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 180, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 36 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6537 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 58579 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 316 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "nw_it_sparscr113" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr113" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 181, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6527 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 58583 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 291 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "nw_it_sparscr221" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr221" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 182, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6500 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13590 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 205 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR409" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr409" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 183, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6501 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13615 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 206 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR604" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr604" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 184, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6224 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13596 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 208 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR415" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr415" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 185, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6225 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13644 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 209 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR903" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr903" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 186, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3277 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6226 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13626 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 210 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR702" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr702" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 187, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4322 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6228 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13640 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 212 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR808" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr808" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 188, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3277 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6229 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13630 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 213 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR706" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr706" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 189, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6791 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13539 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 284 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR102" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr102" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 190, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 324 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6505 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13570 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 216 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR303" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr303" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 191, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3277 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6235 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13634 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 224 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR802" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr802" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 192, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6237 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13548 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 227 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR111" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr111" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 193, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6238 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13535 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR002" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr002" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 194, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6239 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13658 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 229 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPDVSCR301" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_spdvscr301" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 195, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6240 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13583 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 230 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR402" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr402" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 196, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6507 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 234 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR201" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr201" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 197, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6245 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13534 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 236 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr001" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 198, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6508 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13559 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 241 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR210" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr210" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 199, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3880 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3879 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 464 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR302" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr302" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 200, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6250 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 243 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR205" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr205" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 201, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6251 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13620 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 244 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR609" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr609" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 202, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6252 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13591 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 245 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR410" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr410" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 203, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3277 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6253 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 910 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 246 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR703" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr703" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 204, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6254 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13651 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 247 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR910" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr910" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 205, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3740 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3739 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 469 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR103" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr103" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 206, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 513 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 57 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 348 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR103" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr103" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 207, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6258 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 251 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR108" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr108" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 208, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6259 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13580 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 253 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR313" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr313" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 209, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3277 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6262 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13625 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 257 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR701" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr701" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 210, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6264 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13572 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 259 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR305" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr305" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 211, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2768 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2767 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 465 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR204" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr204" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 212, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 3047 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 3046 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 399 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR604" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr604" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 213, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6265 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13584 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 260 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR403" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr403" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 214, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6267 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 262 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR105" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr105" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 215, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6268 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 264 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR203" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr203" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 216, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 540 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6269 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13573 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 265 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR306" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr306" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 217, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1008 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6270 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13585 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 266 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR404" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr404" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 218, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6513 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13645 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 267 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR904" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr904" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 219, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1621 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6509 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13608 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 268 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR510" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr510" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 220, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6510 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13616 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 269 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR605" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr605" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 221, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3277 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6511 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13627 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 270 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR703" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr703" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 222, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4322 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6512 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13637 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 271 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR805" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr805" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 223, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4322 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 1537 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 385 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 358 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPDVSCR802" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_spdvscr802" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 224, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2677 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2678 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 388 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR202" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr202" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 225, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6516 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 58586 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 273 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "nw_it_sparscr614" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr614" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 226, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 40159 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 8942 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 426 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR902" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr902" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 227, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6517 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13652 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 274 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR911" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr911" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 228, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1621 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6518 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13617 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 275 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR606" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr606" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 229, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 509 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 55 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 346 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_IT_SPARSCR104" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_it_sparscr104" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 230, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2797 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2796 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 466 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_SPARSCR601" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_sparscr601" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 231, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 360 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6519 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13578 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 277 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR311" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr311" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 232, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6521 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13650 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 279 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR909" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr909" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 233, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1296 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6522 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13588 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 280 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR407" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr407" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 234, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6523 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13553 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 281 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR204" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr204" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 235, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5510 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6524 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13648 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 282 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR907" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr907" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + }, + { + "__struct_id": 3 + }, + { + "__struct_id": 1 + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "prc_wiz_store" + }, + "WillNotBuy": { + "type": "list", + "value": [] + }, + "WillOnlyBuy": { + "type": "list", + "value": [ + { + "__struct_id": 97869, + "BaseItem": { + "type": "int", + "value": 75 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 9.91 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 7.1 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "epiclabportal" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "epiclabportal" + }, + "TemplateResRef": { + "type": "resref", + "value": "epiclabportal" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 17.34 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 20.75 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + } +} diff --git a/src/module/git/prc_maze_01.git.json b/src/module/git/prc_maze_01.git.json new file mode 100644 index 0000000..e4c9810 --- /dev/null +++ b/src/module/git/prc_maze_01.git.json @@ -0,0 +1,73705 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 69 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 69 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 38 + }, + "MusicDay": { + "type": "int", + "value": 11 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 12 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0032 + }, + "PointY": { + "type": "float", + "value": -4.0241 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.992 + }, + "PointY": { + "type": "float", + "value": -4.0238 + }, + "PointZ": { + "type": "float", + "value": 0.2708 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.9931 + }, + "PointY": { + "type": "float", + "value": -0.009599999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Northward Entry", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_en_trig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_entry_north" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4096 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 22.8162 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 51.4379 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.235 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0032 + }, + "PointY": { + "type": "float", + "value": -4.0241 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.992 + }, + "PointY": { + "type": "float", + "value": -4.0238 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.9931 + }, + "PointY": { + "type": "float", + "value": -0.009599999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Southward Entry", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_en_trig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_entry_south" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 256 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 153.1847 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 72.5407 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0032 + }, + "PointY": { + "type": "float", + "value": -4.0241 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.992 + }, + "PointY": { + "type": "float", + "value": -4.0238 + }, + "PointZ": { + "type": "float", + "value": 0.3959 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.9931 + }, + "PointY": { + "type": "float", + "value": -0.009599999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.5722 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Westward Entry", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_en_trig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_entry_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 16 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 68.9903 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 6.8062 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0032 + }, + "PointY": { + "type": "float", + "value": -4.0241 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.992 + }, + "PointY": { + "type": "float", + "value": -4.0238 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.9931 + }, + "PointY": { + "type": "float", + "value": -0.009599999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eastward Entry", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_en_trig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_entry_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 7.3821 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 6.9487 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0032 + }, + "PointY": { + "type": "float", + "value": -4.0241 + }, + "PointZ": { + "type": "float", + "value": 0.5848 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.992 + }, + "PointY": { + "type": "float", + "value": -4.0238 + }, + "PointZ": { + "type": "float", + "value": 0.6696 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.9931 + }, + "PointY": { + "type": "float", + "value": -0.009599999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4096 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 3.0115 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 40.9625 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4369 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 45.5067 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 45.9847 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0032 + }, + "PointY": { + "type": "float", + "value": -4.0241 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.992 + }, + "PointY": { + "type": "float", + "value": -4.0238 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.9931 + }, + "PointY": { + "type": "float", + "value": -0.009599999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 86.54089999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 6.9677 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4353 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.509 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 46.1258 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 273 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.5089 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 35.9488 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4368 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.4678 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 45.8826 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 273 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.443 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 55.8722 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4113 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 65.5334 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 86.00539999999999 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.5498 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 36.0515 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.5582 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 55.9352 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 5.6119 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 65.88630000000001 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.4046 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 26.0533 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.3261 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 85.8784 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.4563 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 5.9137 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 273 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.5304 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 15.9213 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 5.5969 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 16.0696 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 5.6108 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 25.8207 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4368 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.2915 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 16.0415 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4353 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.5297 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 26.133 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 45.2369 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 25.6284 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 1.1192 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.2935 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 6.0377 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 55.3904 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 6.119 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 65.60590000000001 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 6.0603 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 55.684 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 25.8455 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 65.60590000000001 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 15.8648 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 95.43770000000001 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 6.0797 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 115.4063 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 16.064 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 105.636 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 15.7787 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 115.335 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 25.763 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4369 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 95.43770000000001 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 26.0482 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 105.5646 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 6.0797 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 85.7388 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 25.763 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 85.3943 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 16.064 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4113 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 75.51990000000001 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 15.9971 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 65.4759 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 26.0867 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 65.32859999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 35.7578 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 45.5411 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 36.0572 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 55.4917 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 46.0163 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4368 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.4037 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 35.9748 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4353 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 5.542 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 45.9191 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4368 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.4668 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 55.9519 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4113 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 125.5949 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 6.0344 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4353 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 125.6747 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 16.0075 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4113 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 145.5045 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 26.0605 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4353 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 125.621 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 25.9807 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 155.3956 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 25.7659 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 155.5576 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 5.983 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 273 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 145.4916 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 45.8891 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 135.6738 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 46.1217 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 155.4341 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 46.1217 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 145.4229 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 66.11 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 135.6767 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 65.803 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4368 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 125.4667 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 36.0487 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4368 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 125.4893 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 56.0899 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4368 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 105.395 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 45.9833 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4368 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 95.43729999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 66.026 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 105.6618 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 36.0898 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 105.2358 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 55.828 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 95.7212 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 45.831 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 95.6387 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 55.9896 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 65.6811 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 46.0442 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 85.572 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 46.1655 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 273 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 75.581 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 45.9283 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 273 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 65.60039999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 55.9257 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 55.7606 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 55.8426 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 45.6689 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 65.7778 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 75.3873 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 56.1101 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 115.7094 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 56.1205 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 105.5534 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 66.02809999999999 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 55.6187 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 76.0864 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 105.5793 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 116.0735 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 115.622 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 126.1162 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 135.4683 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 126.1162 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 145.3516 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 116.1532 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 105.8184 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 155.6688 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 155.3669 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 155.9158 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 145.2889 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 145.7574 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 115.6368 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 145.7574 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 135.3796 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 135.7372 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.7402 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 66.0967 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.3282 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 65.9049 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 65.4555 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 66.1925 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4369 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 75.5887 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 76.0682 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 85.8479 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 65.809 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.6215 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 75.98090000000001 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 5.5854 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 86.017 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.6215 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 95.9799 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 5.6679 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 105.7317 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 5.6679 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 126.0636 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 5.758 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 145.6945 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.3033 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 155.7801 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.659 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 136.1492 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.569 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 106.0725 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4113 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.6635 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 146.1448 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 273 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.4834 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 125.7934 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 273 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.3844 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 125.8835 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 273 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.4745 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 105.7381 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4368 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.3889 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 76.27249999999999 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4368 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.4834 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 105.9891 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.7491 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 85.77290000000001 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4368 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.3844 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 86.2231 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4368 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 115.4203 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 66.05970000000001 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4353 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 105.6073 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 96.0397 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4368 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 155.5029 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 106.1397 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 155.4319 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 86.05159999999999 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 145.4557 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 96.1969 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 135.3675 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 76.0936 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 125.4736 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 86.1262 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 135.7205 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 95.7457 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 145.6965 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 85.7803 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 125.7209 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 75.77330000000001 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4368 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 95.31059999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 76.2684 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.6069 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 76.0472 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 45.4745 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 76.12430000000001 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 45.6287 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 85.7607 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 273 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 55.4192 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 85.9148 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 273 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 65.4273 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 75.7762 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 75.2217 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 85.7174 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 115.85 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 85.56740000000001 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 273 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 45.4966 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 105.8791 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4113 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 55.4629 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 106.0758 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 45.5622 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 96.1095 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 65.1947 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 105.7379 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 75.32769999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 115.662 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4113 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 85.4606 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 96.12730000000001 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4097 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 75.64109999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 96.0228 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 55.7433 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 115.8854 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.692 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 115.8075 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.4237 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 116.1968 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 95.2662 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 95.8417 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 125.3302 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 95.8417 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 273 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 145.4844 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 105.8012 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 273 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 105.4466 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 105.8012 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4353 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 85.6267 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 105.9707 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4113 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 45.491 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 126.0775 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4368 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 65.4006 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 126.0775 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4353 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 85.5557 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 136.0182 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 95.35339999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 135.7022 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 95.24079999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 155.7716 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 55.418 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 155.7716 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 65.75749999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 135.7022 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 75.6306 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 145.8047 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 65.7313 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 155.8001 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 257 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.7515 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 155.7629 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 272 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 45.3383 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 135.7196 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 75.50490000000001 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 136.1658 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 65.4705 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 146.2995 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4112 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 95.34059999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 146.1685 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4113 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 55.6984 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 146.2415 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "South & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_south_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 273 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 85.7076 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 145.5891 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & South & West Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_south_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4368 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.363 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 145.9153 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0254 + }, + "PointY": { + "type": "float", + "value": 1.0064 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.5127 + }, + "PointY": { + "type": "float", + "value": -0.4937 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.519 + }, + "PointY": { + "type": "float", + "value": -1.4811 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0103 + }, + "PointY": { + "type": "float", + "value": -2.9995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0226 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5103 + }, + "PointY": { + "type": "float", + "value": -3.4995 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0103 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0041 + }, + "PointY": { + "type": "float", + "value": -1.9871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.5115 + }, + "PointY": { + "type": "float", + "value": -3.481 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9992 + }, + "PointY": { + "type": "float", + "value": -3.4933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0054 + }, + "PointY": { + "type": "float", + "value": -2.9933 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4992 + }, + "PointY": { + "type": "float", + "value": -1.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.493 + }, + "PointY": { + "type": "float", + "value": -0.4871 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.9999 + }, + "PointY": { + "type": "float", + "value": 1.0154 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 2.0078 + }, + "PointY": { + "type": "float", + "value": 1.5196 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 1.4878 + }, + "PointY": { + "type": "float", + "value": 1.5275 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -0.0165 + }, + "PointY": { + "type": "float", + "value": -0.008399999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -1.0127 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -2.5317 + }, + "PointY": { + "type": "float", + "value": 1.5127 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": -3.0128 + }, + "PointY": { + "type": "float", + "value": 1.519 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "North & West & East Junction", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_mvtrig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_north_west_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4113 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 65.46899999999999 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 116.0966 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0032 + }, + "PointY": { + "type": "float", + "value": -4.0241 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.992 + }, + "PointY": { + "type": "float", + "value": -4.0238 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.9931 + }, + "PointY": { + "type": "float", + "value": -0.009599999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eastward Entry", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_en_trig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_entry_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 7.6838 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 156.9162 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2854 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0032 + }, + "PointY": { + "type": "float", + "value": -4.0241 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.992 + }, + "PointY": { + "type": "float", + "value": -4.0238 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.9931 + }, + "PointY": { + "type": "float", + "value": -0.009599999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eastward Entry", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_en_trig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_entry_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 127.4394 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 136.9551 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0032 + }, + "PointY": { + "type": "float", + "value": -4.0241 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.992 + }, + "PointY": { + "type": "float", + "value": -4.0238 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.9931 + }, + "PointY": { + "type": "float", + "value": -0.009599999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eastward Entry", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_en_trig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_entry_east" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 37.3879 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 146.992 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0032 + }, + "PointY": { + "type": "float", + "value": -4.0241 + }, + "PointZ": { + "type": "float", + "value": 0.3603 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.992 + }, + "PointY": { + "type": "float", + "value": -4.0238 + }, + "PointZ": { + "type": "float", + "value": 0.4688 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.9931 + }, + "PointY": { + "type": "float", + "value": -0.009599999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Northward Entry", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_en_trig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_entry_north" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4096 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 42.9101 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 21.1406 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0032 + }, + "PointY": { + "type": "float", + "value": -4.0241 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.992 + }, + "PointY": { + "type": "float", + "value": -4.0238 + }, + "PointZ": { + "type": "float", + "value": 0.2708 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.9931 + }, + "PointY": { + "type": "float", + "value": -0.009599999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Northward Entry", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_en_trig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_entry_north" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4096 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 92.9928 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 121.4184 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0032 + }, + "PointY": { + "type": "float", + "value": -4.0241 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.992 + }, + "PointY": { + "type": "float", + "value": -4.0238 + }, + "PointZ": { + "type": "float", + "value": 0.3959 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.9931 + }, + "PointY": { + "type": "float", + "value": -0.009599999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.5722 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Westward Entry", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_en_trig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_entry_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 16 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 8.813700000000001 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 67.0005 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0032 + }, + "PointY": { + "type": "float", + "value": -4.0241 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.992 + }, + "PointY": { + "type": "float", + "value": -4.0238 + }, + "PointZ": { + "type": "float", + "value": 0.3959 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.9931 + }, + "PointY": { + "type": "float", + "value": -0.009599999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.5722 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Westward Entry", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_en_trig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_entry_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 16 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 139.1716 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 16.9652 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0032 + }, + "PointY": { + "type": "float", + "value": -4.0241 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.992 + }, + "PointY": { + "type": "float", + "value": -4.0238 + }, + "PointZ": { + "type": "float", + "value": 0.3959 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.9931 + }, + "PointY": { + "type": "float", + "value": -0.009599999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.5722 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Westward Entry", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_en_trig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_entry_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 16 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 18.9271 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 97.0132 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0032 + }, + "PointY": { + "type": "float", + "value": -4.0241 + }, + "PointZ": { + "type": "float", + "value": 0.225 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.992 + }, + "PointY": { + "type": "float", + "value": -4.0238 + }, + "PointZ": { + "type": "float", + "value": 0.3959 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 3.9931 + }, + "PointY": { + "type": "float", + "value": -0.009599999999999999 + }, + "PointZ": { + "type": "float", + "value": 0.5722 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Westward Entry", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "prc_maze_en_trig" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "prc_maze_entry_west" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "directions" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 16 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 48.6684 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 97.0132 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + } + ] + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_Maze_Entries_Count" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 13 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Maze Entry", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_MAZE_ENTRY_WP_1" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 129.0 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 135.0 + }, + "ZPosition": { + "type": "float", + "value": 0.21 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Maze Entry", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_MAZE_ENTRY_WP_2" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 9.0 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 155.0 + }, + "ZPosition": { + "type": "float", + "value": 0.21 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Maze Entry", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_MAZE_ENTRY_WP_3" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 39.0 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 145.0 + }, + "ZPosition": { + "type": "float", + "value": 0.21 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Maze Entry", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_MAZE_ENTRY_WP_4" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 21.0 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 95.0 + }, + "ZPosition": { + "type": "float", + "value": 0.21 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Maze Entry", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_MAZE_ENTRY_WP_5" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 51.0 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 95.0 + }, + "ZPosition": { + "type": "float", + "value": 0.21 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Maze Entry", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_MAZE_ENTRY_WP_6" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 95.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 119.0 + }, + "ZPosition": { + "type": "float", + "value": 0.21 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Maze Entry", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_MAZE_ENTRY_WP_7" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 155.0 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 71.0 + }, + "ZPosition": { + "type": "float", + "value": 0.21 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Maze Entry", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_MAZE_ENTRY_WP_8" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 71.0 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 5.0 + }, + "ZPosition": { + "type": "float", + "value": 0.21 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Maze Entry", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_MAZE_ENTRY_WP_9" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 141.0 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 15.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Maze Entry", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_MAZE_ENTRY_WP_10" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 45.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 19.0 + }, + "ZPosition": { + "type": "float", + "value": 0.21 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Maze Entry", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_MAZE_ENTRY_WP_11" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 49.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Maze Entry", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_MAZE_ENTRY_WP_12" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 11.0 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 65.0 + }, + "ZPosition": { + "type": "float", + "value": 0.21 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Maze Entry", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PRC_MAZE_ENTRY_WP_13" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 9.0 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 5.0 + }, + "ZPosition": { + "type": "float", + "value": 0.2 + } + } + ] + } +} diff --git a/src/module/git/ruinedminds001.git.json b/src/module/git/ruinedminds001.git.json new file mode 100644 index 0000000..39c45d9 --- /dev/null +++ b/src/module/git/ruinedminds001.git.json @@ -0,0 +1,2741 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 97 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 98 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 40 + }, + "MusicDay": { + "type": "int", + "value": 52 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 52 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 78 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_door_death" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "CorriDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_08" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 45.0 + }, + "Y": { + "type": "float", + "value": 15.0 + }, + "Z": { + "type": "float", + "value": 0.2 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 80 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_door_death" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BridgeDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_06" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.0 + }, + "Y": { + "type": "float", + "value": 33.34 + }, + "Z": { + "type": "float", + "value": 0.7 + } + }, + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 80 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_door_death" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BridgeDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_ttr_06" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.0 + }, + "Y": { + "type": "float", + "value": 36.68 + }, + "Z": { + "type": "float", + "value": 0.7 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 4 + }, + "Appearance": { + "type": "dword", + "value": 472 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84596 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84590 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "x2_plc_used_act" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_SCIRCLE" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_scircle" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.049 + }, + "Y": { + "type": "float", + "value": 65.1018 + }, + "Z": { + "type": "float", + "value": 0.6 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 28 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "A portal glows softly before you. You wonder where it leads.", + "id": 14533 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Genesis Exit Portal", + "id": 5670 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "psi_gen_exit" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 386 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "GenesisExit05" + }, + "TemplateResRef": { + "type": "resref", + "value": "genesisexit" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 13.7957 + }, + "Y": { + "type": "float", + "value": 74.52800000000001 + }, + "Z": { + "type": "float", + "value": 0.2 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68020 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_na_waterpool1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WaterPoolSmall" + }, + "TemplateResRef": { + "type": "resref", + "value": "waterpoolsmall" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 65.0552 + }, + "YPosition": { + "type": "float", + "value": 24.8815 + }, + "ZPosition": { + "type": "float", + "value": 3.1296 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67893 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_mg_chntmagic1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "MagicChants" + }, + "TemplateResRef": { + "type": "resref", + "value": "magicchants" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 49.9914 + }, + "YPosition": { + "type": "float", + "value": 59.3934 + }, + "ZPosition": { + "type": "float", + "value": -1.5 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67848 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_mg_entrvscry1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "EntranceVeryScary" + }, + "TemplateResRef": { + "type": "resref", + "value": "entranceveryscar" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 48.0665 + }, + "YPosition": { + "type": "float", + "value": 38.1209 + }, + "ZPosition": { + "type": "float", + "value": 1.5 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67889 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_mg_frstmagic2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_mg_frstmagic3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_mg_frstmagic4" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "MagicalForestNoises" + }, + "TemplateResRef": { + "type": "resref", + "value": "magicalforestnoi" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 64.7787 + }, + "YPosition": { + "type": "float", + "value": 14.5205 + }, + "ZPosition": { + "type": "float", + "value": 1.3887 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67900 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 3 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_mg_ballmagic1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "MagicGlowingBall" + }, + "TemplateResRef": { + "type": "resref", + "value": "magicglowingball" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 15.0516 + }, + "YPosition": { + "type": "float", + "value": 65.1229 + }, + "ZPosition": { + "type": "float", + "value": 2.1 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.0 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 10000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 91303 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.3 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_hr_x2chnratl1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_hr_x2chnratl2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_hr_x2chnratl3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_hr_x2chnratl4" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_hr_x2chnratl5" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "ChainRattles" + }, + "TemplateResRef": { + "type": "resref", + "value": "chainrattles" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 14.9204 + }, + "YPosition": { + "type": "float", + "value": 34.7988 + }, + "ZPosition": { + "type": "float", + "value": 1.3 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.0 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 10000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 91308 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.3 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_hr_x2drnoise1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_hr_x2drnoise2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_hr_x2drnoise3" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_hr_x2drnoise4" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_hr_x2drnoise5" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_hr_x2drnoise6" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_hr_x2drnoise7" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_hr_x2drnoise8" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "DoorNoises" + }, + "TemplateResRef": { + "type": "resref", + "value": "doornoises" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 14.9279 + }, + "YPosition": { + "type": "float", + "value": 19.9703 + }, + "ZPosition": { + "type": "float", + "value": 1.4 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 91329 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 20.0 + }, + "MinDistance": { + "type": "float", + "value": 2.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 2 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_pl_x2wardrum1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WarDrum1" + }, + "TemplateResRef": { + "type": "resref", + "value": "wardrum1" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 34.4832 + }, + "YPosition": { + "type": "float", + "value": 39.7603 + }, + "ZPosition": { + "type": "float", + "value": 1.9 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 91329 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 20.0 + }, + "MinDistance": { + "type": "float", + "value": 2.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 2 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_pl_x2wardrum1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WarDrum1" + }, + "TemplateResRef": { + "type": "resref", + "value": "wardrum1" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 36.6574 + }, + "YPosition": { + "type": "float", + "value": 40.1371 + }, + "ZPosition": { + "type": "float", + "value": 1.5 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 91329 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 20.0 + }, + "MinDistance": { + "type": "float", + "value": 2.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 2 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_pl_x2wardrum1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WarDrum1" + }, + "TemplateResRef": { + "type": "resref", + "value": "wardrum1" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 35.5194 + }, + "YPosition": { + "type": "float", + "value": 38.5721 + }, + "ZPosition": { + "type": "float", + "value": 1.9 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 0 + }, + "IntervalVrtn": { + "type": "dword", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 91329 + } + }, + "Looping": { + "type": "byte", + "value": 1 + }, + "MaxDistance": { + "type": "float", + "value": 20.0 + }, + "MinDistance": { + "type": "float", + "value": 2.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 2 + }, + "Random": { + "type": "byte", + "value": 0 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "al_pl_x2wardrum1" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WarDrum1" + }, + "TemplateResRef": { + "type": "resref", + "value": "wardrum1" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 35.492 + }, + "YPosition": { + "type": "float", + "value": 41.2389 + }, + "ZPosition": { + "type": "float", + "value": 1.9 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 1 + }, + "Continuous": { + "type": "byte", + "value": 1 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67959 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.0 + }, + "Positional": { + "type": "byte", + "value": 0 + }, + "Priority": { + "type": "byte", + "value": 19 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_skriekf1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_skriekf2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_pl_skriekf3" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "ShrieksWomenOutside" + }, + "TemplateResRef": { + "type": "resref", + "value": "shriekswomenouts" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 35.5928 + }, + "YPosition": { + "type": "float", + "value": 39.58 + }, + "ZPosition": { + "type": "float", + "value": 1.8307 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/git/thequietofthemin.git.json b/src/module/git/thequietofthemin.git.json new file mode 100644 index 0000000..b989191 --- /dev/null +++ b/src/module/git/thequietofthemin.git.json @@ -0,0 +1,7891 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 56 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 56 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 89 + }, + "MusicBattle": { + "type": "int", + "value": 34 + }, + "MusicDay": { + "type": "int", + "value": 6 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 6 + } + } + }, + "Creature List": { + "type": "list", + "value": [] + }, + "Door List": { + "type": "list", + "value": [] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 435 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.8345 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84173 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 83428 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_o2_dead" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 918 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_TENT_B" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_tent_b" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 37.3995 + }, + "Y": { + "type": "float", + "value": 52.2161 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 58 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.9327 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "The smell of woodsmoke draws you closer to the dancing fire. The sap of a birch log burns blue at its center.", + "id": 14586 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5700 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 416 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Campfire" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_campfr" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 41.1964 + }, + "Y": { + "type": "float", + "value": 49.7836 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 233 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.9327 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68833 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68832 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "x2_plc_used_sit" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 755 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "FallenTimber" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_fallentimber" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 38.1482 + }, + "Y": { + "type": "float", + "value": 48.8919 + }, + "Z": { + "type": "float", + "value": -0.0425 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 100 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14746 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Normal" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_tree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 43.3395 + }, + "Y": { + "type": "float", + "value": 56.0804 + }, + "Z": { + "type": "float", + "value": 4.8357 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 101 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14747 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 459 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Autumn" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_treeautumn" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 52.5725 + }, + "Y": { + "type": "float", + "value": 13.7801 + }, + "Z": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 101 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14747 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 459 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Autumn" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_treeautumn" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 45.1292 + }, + "Y": { + "type": "float", + "value": 5.9411 + }, + "Z": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 101 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14747 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 459 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Autumn" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_treeautumn" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 59.1773 + }, + "Y": { + "type": "float", + "value": 10.8441 + }, + "Z": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 101 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14747 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 459 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Autumn" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_treeautumn" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 52.9998 + }, + "Y": { + "type": "float", + "value": 7.8681 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 100 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14746 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Normal" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_tree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 47.7391 + }, + "Y": { + "type": "float", + "value": 10.3734 + }, + "Z": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 100 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14746 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Normal" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_tree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 56.73 + }, + "Y": { + "type": "float", + "value": 5.9931 + }, + "Z": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 100 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14746 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Normal" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_tree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 18.3173 + }, + "Y": { + "type": "float", + "value": 1.7628 + }, + "Z": { + "type": "float", + "value": 5.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 100 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14746 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Normal" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_tree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 23.2176 + }, + "Y": { + "type": "float", + "value": 2.5303 + }, + "Z": { + "type": "float", + "value": 5.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 100 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14746 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Normal" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_tree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 7.7539 + }, + "Y": { + "type": "float", + "value": 19.3976 + }, + "Z": { + "type": "float", + "value": 5.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 451 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.9572000000000001 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84192 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 83445 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_o2_dead" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "x2_plc_used_act" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 934 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_CRYSTAL" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_crystal" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 40.0702 + }, + "Y": { + "type": "float", + "value": 52.4971 + }, + "Z": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 81 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14649 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14650 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 439 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Plant Growth - Grass Tufts" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_grasstuft" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 33.9787 + }, + "Y": { + "type": "float", + "value": 29.6197 + }, + "Z": { + "type": "float", + "value": 5.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 188 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 66749 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 52999 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 551 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Fern" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_fern" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 34.2978 + }, + "Y": { + "type": "float", + "value": 35.962 + }, + "Z": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 188 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 66749 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 52999 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 551 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Fern" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_fern" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 35.134 + }, + "Y": { + "type": "float", + "value": 37.0373 + }, + "Z": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 81 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14649 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14650 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 439 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Plant Growth - Grass Tufts" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_grasstuft" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 41.3427 + }, + "Y": { + "type": "float", + "value": 36.9055 + }, + "Z": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 81 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14649 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14650 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 439 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Plant Growth - Grass Tufts" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_grasstuft" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 43.2284 + }, + "Y": { + "type": "float", + "value": 31.988 + }, + "Z": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 81 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14649 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14650 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 439 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Plant Growth - Grass Tufts" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_grasstuft" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 42.4548 + }, + "Y": { + "type": "float", + "value": 32.3346 + }, + "Z": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 340 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68852 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 9208 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 779 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Ivy" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_ivy" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 35.5577 + }, + "Y": { + "type": "float", + "value": 38.9669 + }, + "Z": { + "type": "float", + "value": 1.0467 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 299 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68872 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 9188 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_mushrooms" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_mushrooms" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 37.633 + }, + "Y": { + "type": "float", + "value": 19.4264 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 82 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 67632 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5725 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 440 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PlantGrowthShrubs" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_shrub" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 18.1136 + }, + "Y": { + "type": "float", + "value": 21.9122 + }, + "Z": { + "type": "float", + "value": 5.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 82 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 67632 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5725 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 440 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "PlantGrowthShrubs" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_shrub" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 18.8887 + }, + "Y": { + "type": "float", + "value": 21.0838 + }, + "Z": { + "type": "float", + "value": 5.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 254 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68943 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepinesnowy" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepinesnowy" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 38.2361 + }, + "Y": { + "type": "float", + "value": 16.6268 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 254 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68943 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepinesnowy" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepinesnowy" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 39.7962 + }, + "Y": { + "type": "float", + "value": 18.7338 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 254 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68943 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepinesnowy" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepinesnowy" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 41.8586 + }, + "Y": { + "type": "float", + "value": 17.6189 + }, + "Z": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 254 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68943 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepinesnowy" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepinesnowy" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 41.7235 + }, + "Y": { + "type": "float", + "value": 20.7584 + }, + "Z": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 254 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68943 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepinesnowy" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepinesnowy" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 43.9787 + }, + "Y": { + "type": "float", + "value": 20.2804 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 254 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68944 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68943 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_treepinesnowy" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_treepinesnowy" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 44.685 + }, + "Y": { + "type": "float", + "value": 23.0281 + }, + "Z": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 100 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14746 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Normal" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_tree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 42.8446 + }, + "Y": { + "type": "float", + "value": 23.0924 + }, + "Z": { + "type": "float", + "value": 1.1273 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 100 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14746 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 458 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Normal" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_tree" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 39.0608 + }, + "Y": { + "type": "float", + "value": 20.5948 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 101 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14747 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5743 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 459 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Tree - Autumn" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_treeautumn" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 43.4153 + }, + "Y": { + "type": "float", + "value": 51.2268 + }, + "Z": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 260 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 76388 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68943 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 796 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_smallpine" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_smallpine" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 44.4269 + }, + "Y": { + "type": "float", + "value": 49.7926 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 28 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "A portal glows softly before you. You wonder where it leads.", + "id": 14533 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Genesis Exit Portal", + "id": 5670 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "psi_gen_exit" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 386 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "GenesisExit04" + }, + "TemplateResRef": { + "type": "resref", + "value": "genesisexit" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 18.9938 + }, + "Y": { + "type": "float", + "value": 58.2745 + }, + "Z": { + "type": "float", + "value": 5.01 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [] + }, + "StoreList": { + "type": "list", + "value": [] + }, + "TriggerList": { + "type": "list", + "value": [] + }, + "WaypointList": { + "type": "list", + "value": [] + } +} diff --git a/src/module/git/yawningportal.git.json b/src/module/git/yawningportal.git.json new file mode 100644 index 0000000..098cf36 --- /dev/null +++ b/src/module/git/yawningportal.git.json @@ -0,0 +1,285851 @@ +{ + "__data_type": "GIT ", + "AreaProperties": { + "__struct_id": 100, + "type": "struct", + "value": { + "__struct_id": 100, + "AmbientSndDay": { + "type": "int", + "value": 72 + }, + "AmbientSndDayVol": { + "type": "int", + "value": 32 + }, + "AmbientSndNight": { + "type": "int", + "value": 72 + }, + "AmbientSndNitVol": { + "type": "int", + "value": 32 + }, + "EnvAudio": { + "type": "int", + "value": 0 + }, + "MusicBattle": { + "type": "int", + "value": 40 + }, + "MusicDay": { + "type": "int", + "value": 25 + }, + "MusicDelay": { + "type": "int", + "value": 90000 + }, + "MusicNight": { + "type": "int", + "value": 25 + } + } + }, + "Creature List": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 6 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.25 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 20 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 16 + }, + "Color_Skin": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "npc_town_store" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 2 + }, + "DecayTime": { + "type": "dword", + "value": 0 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 10 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 39 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 11 + }, + "Leather2Color": { + "type": "byte", + "value": 14 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12923 + } + }, + "Metal1Color": { + "type": "byte", + "value": 23 + }, + "Metal2Color": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_CLOTH022" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cloth022" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 6 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 16 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 6 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 16 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 39 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Basic Supplies Merchant" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 2 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 3 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 116 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 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 + } + }, + { + "__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": 129 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Merchant" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "merchant" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "POSTFIX" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "the Merchant" + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + }, + "xAppearance_Head": { + "type": "word", + "value": 6 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.3827 + }, + "XPosition": { + "type": "float", + "value": 4.5077 + }, + "YOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 47.2198 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 11 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 20 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 23 + }, + "Color_Skin": { + "type": "byte", + "value": 0 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "npc_banker" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 2 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 10 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 50 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 58 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 25 + }, + "Leather2Color": { + "type": "byte", + "value": 24 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12904 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_CLOTH003" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cloth003" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 8 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 8 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 3 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 8 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 8 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 3 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 50 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Banker" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 2 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 3 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 95 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 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 + } + }, + { + "__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": 159 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Merchant5" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "merchant005" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "POSTFIX" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "the Banker" + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + }, + "xAppearance_Head": { + "type": "word", + "value": 11 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 10.2084 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 18.1077 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 18 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 20 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 23 + }, + "Color_Skin": { + "type": "byte", + "value": 0 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "npc_junk_merchan" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 2 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 10 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 22 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 14 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 22 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 14 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 11 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 19 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 22 + }, + "Cloth2Color": { + "type": "byte", + "value": 55 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 22 + }, + "Leather2Color": { + "type": "byte", + "value": 43 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12913 + } + }, + "Metal1Color": { + "type": "byte", + "value": 35 + }, + "Metal2Color": { + "type": "byte", + "value": 35 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_CLOTH012" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cloth012" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 8 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 22 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 8 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 14 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 11 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 8 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 22 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 8 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 4 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 14 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 11 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 19 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Junk Merchant" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 2 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 3 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 94 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 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 + } + }, + { + "__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": 173 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Merchant4" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "merchant004" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "TITLE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Scrapper" + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + }, + "xAppearance_Head": { + "type": "word", + "value": 18 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.3827 + }, + "XPosition": { + "type": "float", + "value": 12.1857 + }, + "YOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 45.7387 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 1 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 28.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 10 + }, + "ClassLevel": { + "type": "short", + "value": 40 + }, + "MemorizedList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 37 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 100 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 144 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 151 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 86 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 102 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 107 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 371 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 165 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 174 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList2": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 120 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 90 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 93 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 115 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 150 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 175 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList3": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 21 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 59 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 78 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 176 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList4": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 47 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 375 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 368 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 119 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 172 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList5": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 459 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 23 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 71 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 99 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 179 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList6": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 14 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 485 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 72 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 448 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 180 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList7": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 39 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 123 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 135 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 169 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList8": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 69 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 367 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 110 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 117 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 134 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 141 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList9": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 116 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 178 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 185 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 193 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 1 + }, + "Color_Skin": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "npc_enchanter" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 101 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 19 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 52 + }, + "Cloth2Color": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 37 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12906 + } + }, + "Metal1Color": { + "type": "byte", + "value": 25 + }, + "Metal2Color": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_CLOTH005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cloth005" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 8 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 16 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 8 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 6 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 16 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 19 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSWDG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wswdg001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8192, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 99 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WAMBO001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wambo001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 858 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 944 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 946 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 618 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 875 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 877 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 990 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 878 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 876 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 874 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 976 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 794 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 795 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 401 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 696 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 25 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 29 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 945 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 36 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 303 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 51 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Advanced Merchant" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 101 + }, + "Int": { + "type": "byte", + "value": 26 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 70 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBWXL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wbwxl001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 180 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_TORCH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_torch001" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6791 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13539 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 284 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR102" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr102" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6267 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 262 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR105" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr105" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6258 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 251 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR108" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr108" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 48 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6204 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13546 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 172 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR109" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr109" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 181 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 648 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x2_def_attacked" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x2_def_ondamage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_def_ondeath" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x2_def_onconv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x2_def_ondisturb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x2_def_endcombat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x2_def_heartbeat" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x2_def_onblocked" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x2_def_percept" + }, + "ScriptRested": { + "type": "resref", + "value": "x2_def_rested" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_def_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_def_spellcast" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x2_def_userdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 43 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 43 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 43 + } + }, + { + "__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": 43 + } + }, + { + "__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": 43 + } + }, + { + "__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": 65535 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 10 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "AdvancedMerchant" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "advancedmerchant" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "TITLE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Merchant Lord" + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "xAppearance_Head": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": -0.0 + }, + "XPosition": { + "type": "float", + "value": 35.2417 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 46.8823 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 1 + }, + "Appearance_Type": { + "type": "word", + "value": 2 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 28.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 10 + }, + "ClassLevel": { + "type": "short", + "value": 40 + }, + "MemorizedList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 37 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 100 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 144 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 151 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 86 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 102 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 107 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 371 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 165 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 174 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList2": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 120 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 90 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 93 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 115 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 150 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 175 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList3": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 21 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 59 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 78 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 176 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList4": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 47 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 375 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 368 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 119 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 172 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList5": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 459 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 23 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 71 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 99 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 179 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList6": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 14 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 485 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 72 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 448 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 180 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList7": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 39 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 123 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 135 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 169 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList8": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 141 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 69 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 367 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 110 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 117 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 134 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList9": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 116 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 178 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 185 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 193 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 1 + }, + "Color_Skin": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "craftingmerchant" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 101 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 30498 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 44 + }, + "Cloth2Color": { + "type": "byte", + "value": 45 + }, + "Cost": { + "type": "dword", + "value": 70000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In addition to the powers listed below the robe also gives it's wearer Spell Resistance 17." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 44 + }, + "Leather2Color": { + "type": "byte", + "value": 44 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Robe of the Archmagi" + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc060" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc060" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 12 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 1 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 1 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 12 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 5 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 1 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 1 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8192, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 99 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WAMBO001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wambo001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 858 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 233 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 232 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 242 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 944 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 946 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 618 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 875 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 877 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 990 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 878 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 876 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 874 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 976 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 794 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 795 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 401 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 241 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 696 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 354 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 29 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 945 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 243 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 237 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 375 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 170 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 36 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 303 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 51 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Craftsman Merchant" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 101 + }, + "Int": { + "type": "byte", + "value": 26 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 70 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBWXL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wbwxl001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 180 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_TORCH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_torch001" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6791 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13539 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 284 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR102" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr102" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6267 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 262 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR105" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr105" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6258 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 251 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR108" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr108" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 48 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6204 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13546 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 172 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR109" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr109" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSWDG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wswdg001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 221 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 50 + }, + "Race": { + "type": "byte", + "value": 2 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x2_def_attacked" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x2_def_ondamage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_def_ondeath" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x2_def_onconv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x2_def_ondisturb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x2_def_endcombat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x2_def_heartbeat" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x2_def_onblocked" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x2_def_percept" + }, + "ScriptRested": { + "type": "resref", + "value": "x2_def_rested" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_def_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_def_spellcast" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x2_def_userdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 43 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 43 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 43 + } + }, + { + "__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": 43 + } + }, + { + "__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": 43 + } + }, + { + "__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": 0 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 10 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "CraftsmanMerchant" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "craftsmanmerchan" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "TITLE" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "Craftsman" + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "xAppearance_Head": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.3827 + }, + "XPosition": { + "type": "float", + "value": 32.6347 + }, + "YOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 17.1205 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 7 + }, + "Appearance_Type": { + "type": "word", + "value": 5 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.5 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 0 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 23 + }, + "Color_Skin": { + "type": "byte", + "value": 34 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 12 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 15 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 3 + }, + "Cost": { + "type": "dword", + "value": 15 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 5 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12840 + } + }, + "Metal1Color": { + "type": "byte", + "value": 17 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL008" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl008" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 3 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 13 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 3 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 13 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 38 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 12 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1532 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WAXHN001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waxhn001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 194 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 293 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Barag" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 12 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 180 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_TORCH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_torch001" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Yuwmawdur" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 14 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 137 + }, + "Race": { + "type": "byte", + "value": 5 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__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": 2 + } + }, + { + "__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": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 221 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 18 + }, + "Str": { + "type": "byte", + "value": 16 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Barag" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "barag" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 100 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RND_BARBARIAN" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + }, + "xAppearance_Head": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.8315 + }, + "XPosition": { + "type": "float", + "value": 2.3274 + }, + "YOrientation": { + "type": "float", + "value": -0.5556 + }, + "YPosition": { + "type": "float", + "value": 36.3141 + }, + "ZPosition": { + "type": "float", + "value": 0.0095 + } + }, + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 8 + }, + "Appearance_Type": { + "type": "word", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 8 + }, + "ChallengeRating": { + "type": "float", + "value": 0.5 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 4 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 7 + }, + "Color_Skin": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 10 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 19 + }, + "Cloth2Color": { + "type": "byte", + "value": 16 + }, + "Cost": { + "type": "dword", + "value": 15 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12836 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL002" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl002" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 7 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSWSS001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wswss001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 236 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 235 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 354 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 244 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 245 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 246 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 106 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Belror" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 10 + }, + "Int": { + "type": "byte", + "value": 14 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 180 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_TORCH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_torch001" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Galle" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 12 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 38 + }, + "Race": { + "type": "byte", + "value": 4 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 229 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 23 + }, + "Str": { + "type": "byte", + "value": 16 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Belror" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "eowarar001" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 100 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RND_FIGHTER" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 8 + }, + "xAppearance_Head": { + "type": "word", + "value": 8 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 27.4933 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 27.8332 + }, + "ZPosition": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 6 + }, + "Appearance_Type": { + "type": "word", + "value": 3 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 12 + }, + "ChallengeRating": { + "type": "float", + "value": 0.5 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 8 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 13 + }, + "Color_Skin": { + "type": "byte", + "value": 2 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 6 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 16 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 16 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 1 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl001" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 16 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSWSS001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wswss001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 249 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 250 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 248 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4752 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 237 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 247 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 375 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 221 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 50 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Boibo" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 6 + }, + "Int": { + "type": "byte", + "value": 14 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 180 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_TORCH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_torch001" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 62 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 15 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13523 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 55 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_PICKS001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_picks001" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSWDG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wswdg001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 64 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 7 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13667 + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 17 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 70 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_TRAP001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_trap001" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Swample" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 8 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 62 + }, + "Race": { + "type": "byte", + "value": 3 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 367 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 98 + }, + "Str": { + "type": "byte", + "value": 12 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Boibo" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "boibo" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 100 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RND_ROGUE" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 8 + }, + "xAppearance_Head": { + "type": "word", + "value": 6 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.8315 + }, + "XPosition": { + "type": "float", + "value": 2.7178 + }, + "YOrientation": { + "type": "float", + "value": -0.5556 + }, + "YPosition": { + "type": "float", + "value": 16.2709 + }, + "ZPosition": { + "type": "float", + "value": 0.0121 + } + }, + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 8 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 16 + }, + "ChallengeRating": { + "type": "float", + "value": 1.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 9 + }, + "ClassLevel": { + "type": "short", + "value": 1 + }, + "KnownList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 37 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 100 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 144 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 151 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "KnownList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 102 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 174 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 4 + }, + "Color_Skin": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 4 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 14 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 14 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 19 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 25 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 46 + }, + "Leather2Color": { + "type": "byte", + "value": 46 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12909 + } + }, + "Metal1Color": { + "type": "byte", + "value": 12 + }, + "Metal2Color": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_CLOTH008" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cloth008" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 3 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 3 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 14 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 10 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 3 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 3 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 4 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 14 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 19 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 70 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBWXL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wbwxl001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8192, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 99 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WAMBO001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wambo001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 944 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4759 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4715 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4752 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 303 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Cario" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 4 + }, + "Int": { + "type": "byte", + "value": 12 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 180 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_TORCH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_torch001" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6791 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13539 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 284 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR102" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr102" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6267 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 262 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR105" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr105" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6258 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 251 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR108" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr108" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 48 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6204 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13546 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 172 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR109" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr109" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSWDG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wswdg001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Trantior" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 6 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 70 + }, + "Race": { + "type": "byte", + "value": 202 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__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": 3 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__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": 3 + } + }, + { + "__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": 3 + } + }, + { + "__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": 358 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 99 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Cario" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "cario" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 150 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RND_MAGE" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + }, + "xAppearance_Head": { + "type": "word", + "value": 8 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": -0.3827 + }, + "XPosition": { + "type": "float", + "value": 37.1677 + }, + "YOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 36.007 + }, + "ZPosition": { + "type": "float", + "value": 0.0042 + } + }, + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 9 + }, + "Appearance_Type": { + "type": "word", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 15 + }, + "ChallengeRating": { + "type": "float", + "value": 0.5 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 1 + }, + "ClassLevel": { + "type": "short", + "value": 1 + }, + "KnownList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 33 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 37 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 100 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 151 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 23 + }, + "Color_Skin": { + "type": "byte", + "value": 23 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 6 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 16 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 1 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl001" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 16 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSWDG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wswdg001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8192, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 99 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WAMBO001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wambo001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 257 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 197 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 871 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4682 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4711 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4683 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 236 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 235 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 22 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 240 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4701 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 237 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 238 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 239 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4703 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Choa" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 6 + }, + "Int": { + "type": "byte", + "value": 12 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 70 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBWXL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wbwxl001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 180 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_TORCH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_torch001" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6791 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13539 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 284 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR102" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr102" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6267 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 262 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR105" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr105" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6258 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 251 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR108" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr108" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 48 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6204 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13546 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 172 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR109" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr109" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "De'aktar" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 7 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 1019 + }, + "Race": { + "type": "byte", + "value": 163 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 243 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 106 + }, + "Str": { + "type": "byte", + "value": 12 + }, + "Subrace": { + "type": "cexostring", + "value": "Drow" + }, + "Tag": { + "type": "cexostring", + "value": "Choa" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "choa" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 150 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RND_BARD" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + }, + "xAppearance_Head": { + "type": "word", + "value": 9 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.3827 + }, + "XPosition": { + "type": "float", + "value": 12.4933 + }, + "YOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 12.3686 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 4 + }, + "Appearance_Type": { + "type": "word", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 1.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 10 + }, + "ClassLevel": { + "type": "short", + "value": 1 + }, + "MemorizedList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 37 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 100 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 144 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 102 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 174 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 8 + }, + "Color_Skin": { + "type": "byte", + "value": 0 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 4 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 19 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 52 + }, + "Cloth2Color": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 37 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12906 + } + }, + "Metal1Color": { + "type": "byte", + "value": 25 + }, + "Metal2Color": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_CLOTH005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cloth005" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 8 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 16 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 8 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 6 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 16 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 19 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 70 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBWXL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wbwxl001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8192, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 99 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WAMBO001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wambo001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 944 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 236 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 235 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 240 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 354 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 945 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 237 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 238 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 239 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 303 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 256 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 51 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Eowarar" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 4 + }, + "Int": { + "type": "byte", + "value": 16 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 180 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_TORCH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_torch001" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6791 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13539 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 284 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR102" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr102" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6267 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 262 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR105" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr105" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6258 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 251 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR108" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr108" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 48 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 6204 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13546 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 172 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_SPARSCR109" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_sparscr109" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSWDG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wswdg001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Be'tend" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 5 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 36 + }, + "Race": { + "type": "byte", + "value": 1 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__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": 4 + } + }, + { + "__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": 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": 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": 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": 418 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 100 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Eowarar" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "eowarar" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 100 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RND_MAGE" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + }, + "xAppearance_Head": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 25.5286 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 3.2669 + }, + "ZPosition": { + "type": "float", + "value": 0.0042 + } + }, + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 7 + }, + "Appearance_Type": { + "type": "word", + "value": 0 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 9 + }, + "ChallengeRating": { + "type": "float", + "value": 1.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 4 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 3 + }, + "Color_Skin": { + "type": "byte", + "value": 3 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 16 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 10 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 19 + }, + "Cloth2Color": { + "type": "byte", + "value": 16 + }, + "Cost": { + "type": "dword", + "value": 15 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12836 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL002" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl002" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 7 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSWSS001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wswss001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 233 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 232 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 231 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 229 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 230 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4792 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4757 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4758 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 234 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 227 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 106 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Lemli" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 10 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 180 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_TORCH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_torch001" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Elgen" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 14 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 13 + }, + "Race": { + "type": "byte", + "value": 0 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 229 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 4 + }, + "Str": { + "type": "byte", + "value": 16 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Lemli" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "lemli" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 100 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RND_FIGHTER" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + }, + "xAppearance_Head": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 22.2029 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 3.5733 + }, + "ZPosition": { + "type": "float", + "value": 0.0042 + } + }, + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 5 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 1.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 3 + }, + "ClassLevel": { + "type": "short", + "value": 1 + }, + "MemorizedList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 416 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 151 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 189 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 32 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 53 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 1 + }, + "Color_Skin": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 13 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 8 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 16 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 1 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl001" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 16 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 60 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 12 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSPSC001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wspsc001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 199 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 198 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 34 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 35 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 48 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Merrenton" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 8 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 180 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_TORCH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_torch001" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Goodman" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 9 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 96 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__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": 2 + } + }, + { + "__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": 2 + } + }, + { + "__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": 368 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 93 + }, + "Str": { + "type": "byte", + "value": 14 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Merrenton" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "merrenton" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 100 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RND_DRUID" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 16 + }, + "xAppearance_Head": { + "type": "word", + "value": 5 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 14.6855 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 26.1613 + }, + "ZPosition": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 7 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 14 + }, + "ChallengeRating": { + "type": "float", + "value": 1.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 2 + }, + "ClassLevel": { + "type": "short", + "value": 1 + }, + "MemorizedList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 431 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 431 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 431 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 6 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 32 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 432 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 14 + }, + "Color_Skin": { + "type": "byte", + "value": 2 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 8 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 8 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 19 + }, + "Cloth2Color": { + "type": "byte", + "value": 16 + }, + "Cost": { + "type": "dword", + "value": 15 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12836 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL002" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl002" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 7 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBLML001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wblml001" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_ASHSW001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_ashsw001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 318 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 945 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 322 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 294 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Salen" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 8 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 180 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_TORCH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_torch001" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Steel" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 100 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 10 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 97 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 1 + } + }, + { + "__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": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 222 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 20 + }, + "Str": { + "type": "byte", + "value": 14 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Salen" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "salen" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 100 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RND_CLERIC" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 16 + }, + "xAppearance_Head": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": -0.9239000000000001 + }, + "XPosition": { + "type": "float", + "value": 35.797 + }, + "YOrientation": { + "type": "float", + "value": 0.3827 + }, + "YPosition": { + "type": "float", + "value": 25.3457 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 8 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.5 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 5 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 35 + }, + "Color_Skin": { + "type": "byte", + "value": 10 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 8 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 9 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 10 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 14 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12917 + } + }, + "Metal1Color": { + "type": "byte", + "value": 13 + }, + "Metal2Color": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_CLOTH016" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cloth016" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 6 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 9 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 6 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 9 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 40 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1534 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSPKA001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wspka001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4672 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 206 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 204 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4715 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 21 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 260 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4716 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4702 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 39 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 41 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 49 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Sharoc" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 8 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 180 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_TORCH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_torch001" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Laenir" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 100 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 10 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 89 + }, + "Race": { + "type": "byte", + "value": 223 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 361 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 47 + }, + "Str": { + "type": "byte", + "value": 14 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Sharoc" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "sharoc" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 100 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RND_MONK" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 15 + }, + "xAppearance_Head": { + "type": "word", + "value": 8 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.3827 + }, + "XPosition": { + "type": "float", + "value": 5.1476 + }, + "YOrientation": { + "type": "float", + "value": 0.9239000000000001 + }, + "YPosition": { + "type": "float", + "value": 24.1754 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 4, + "Appearance_Head": { + "type": "byte", + "value": 7 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 15 + }, + "ChallengeRating": { + "type": "float", + "value": 1.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 6 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 9 + }, + "Color_Skin": { + "type": "byte", + "value": 0 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 10 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 9 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 19 + }, + "Cloth2Color": { + "type": "byte", + "value": 16 + }, + "Cost": { + "type": "dword", + "value": 17 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 21 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12847 + } + }, + "Metal1Color": { + "type": "byte", + "value": 2 + }, + "Metal2Color": { + "type": "byte", + "value": 2 + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_ARHE001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_arhe001" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 19 + }, + "Cloth2Color": { + "type": "byte", + "value": 16 + }, + "Cost": { + "type": "dword", + "value": 15 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12836 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL002" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl002" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 7 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSWSS001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wswss001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 217 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 219 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4715 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 299 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4650 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4716 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 428 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 427 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 430 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 237 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 239 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 41 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Slyn" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 10 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 180 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_TORCH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_torch001" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 13410 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13411 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Jard" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 100 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 12 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 101 + }, + "Race": { + "type": "byte", + "value": 198 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 1 + } + }, + { + "__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": 1 + } + }, + { + "__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": 223 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 52 + }, + "Str": { + "type": "byte", + "value": 15 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Slyn" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "slyn" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 150 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RND_PALADIN" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 13 + }, + "xAppearance_Head": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 2.3239 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 4.5412 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Door List": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 9078 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType_New": { + "type": "dword", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "Doesnt_Exist" + }, + "KeyRequired": { + "type": "byte", + "value": 1 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 1 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "x2_door_death" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NormalDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_door_normal" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.0 + }, + "Y": { + "type": "float", + "value": 3.34 + }, + "Z": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "Encounter List": { + "type": "list", + "value": [] + }, + "List": { + "type": "list", + "value": [] + }, + "Placeable List": { + "type": "list", + "value": [ + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 1 + }, + "Appearance": { + "type": "dword", + "value": 426 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This is the well used by Durnan long ago to enter Undermountain years ago. Since his return he built the Yawning Portal Inn over it. Durnan charges a single gold piece to enter and leave Undermountain by the well.", + "id": 84164 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "The Yawning Portal Well", + "id": 83419 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "rdg_yawningwell" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 909 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "YawningPortalWell" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_minewell" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 19.9224 + }, + "Y": { + "type": "float", + "value": 36.3413 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 75 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.7854 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14700 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14701 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 433 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Painting on Easel" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_pntingeasel" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 13.3535 + }, + "Y": { + "type": "float", + "value": 47.3165 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 263 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68879 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68878 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 685 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X0_PAINTING" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_painting" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 20.7 + }, + "Y": { + "type": "float", + "value": 48.57 + }, + "Z": { + "type": "float", + "value": -0.5 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 266 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68880 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68878 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 685 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_painting2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_painting2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 24.81 + }, + "Y": { + "type": "float", + "value": 48.75 + }, + "Z": { + "type": "float", + "value": -0.5 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 258 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 76386 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 76385 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 811 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_hangshield" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_hangshield" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 17.02 + }, + "Y": { + "type": "float", + "value": 48.65 + }, + "Z": { + "type": "float", + "value": -0.25 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 318 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68866 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68865 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Map" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_maps" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 19.9472 + }, + "Y": { + "type": "float", + "value": 44.9551 + }, + "Z": { + "type": "float", + "value": 1.11 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 457 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84576 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84563 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_PSHEET" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_psheet" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 23.7822 + }, + "Y": { + "type": "float", + "value": 45.3701 + }, + "Z": { + "type": "float", + "value": 1.11 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 455 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84574 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84561 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_PSHEETS" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_psheets" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.9329 + }, + "Y": { + "type": "float", + "value": 45.4818 + }, + "Z": { + "type": "float", + "value": 1.09 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 455 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.7854 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84574 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84561 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_PSHEETS" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_psheets" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 18.5726 + }, + "Y": { + "type": "float", + "value": 44.4241 + }, + "Z": { + "type": "float", + "value": 1.11 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 456 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84575 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84562 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_PPSHEETS" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_ppsheets" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 21.29 + }, + "Y": { + "type": "float", + "value": 44.82 + }, + "Z": { + "type": "float", + "value": 1.12 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 9 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This box is used by the junk dealer. Anything you want to sell to him place in the box. Once all the items are in the box, and everyone is positive there is nothing they want, talk to the junk dealer to sell the items. ", + "id": 14596 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Junk Box", + "id": 5348 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 367 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "JunkBox" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_chest3" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.8641 + }, + "Y": { + "type": "float", + "value": 44.2949 + }, + "Z": { + "type": "float", + "value": 1.09 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 258 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 76386 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 76385 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 811 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_hangshield" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_hangshield" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 8.7095 + }, + "Y": { + "type": "float", + "value": 46.6335 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 258 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 76386 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 76385 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 811 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_hangshield" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_hangshield" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 8.7196 + }, + "Y": { + "type": "float", + "value": 43.3753 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 49 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14555 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5691 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "nw_o2_generallow" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "nw_o2_generallow" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 407 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Barrel" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_barrel" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 8.337 + }, + "Y": { + "type": "float", + "value": 43.1185 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 49 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14555 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5691 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "nw_o2_generallow" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "nw_o2_generallow" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 407 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Barrel" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_barrel" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 8.369999999999999 + }, + "Y": { + "type": "float", + "value": 43.49 + }, + "Z": { + "type": "float", + "value": 0.84 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 49 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14555 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5691 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "nw_o2_generallow" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "nw_o2_generallow" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 407 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Barrel" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_barrel" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 8.4133 + }, + "Y": { + "type": "float", + "value": 43.9165 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 10 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14597 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5348 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "nw_o2_classhig" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "nw_o2_classhig" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 368 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Chest4" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_chest4" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 8.083600000000001 + }, + "Y": { + "type": "float", + "value": 47.852 + }, + "Z": { + "type": "float", + "value": 0.87 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 6 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14585 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5650 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "nw_o2_generallow" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "nw_o2_generallow" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 364 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Cabinet" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_cabinet" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 6.6818 + }, + "Y": { + "type": "float", + "value": 48.3044 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 189 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.7854 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14668 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 64112 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "nw_o2_generallow" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "nw_o2_generallow" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 552 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "TreasureSmall" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_treasuresml" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 4.717 + }, + "Y": { + "type": "float", + "value": 48.349 + }, + "Z": { + "type": "float", + "value": 2.19 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 39 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14599 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5681 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 397 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Combat Dummy" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_cmbtdummy" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.1348 + }, + "Y": { + "type": "float", + "value": 41.7892 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 39 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14599 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5681 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 397 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Combat Dummy" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_cmbtdummy" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.0857 + }, + "Y": { + "type": "float", + "value": 42.5152 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 39 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14599 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5681 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 397 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "CombatDummy" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_cmbtdummy" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.0585 + }, + "Y": { + "type": "float", + "value": 43.3906 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 105 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14752 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5748 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 463 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Weapon Rack" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_weaponrack" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.8294 + }, + "Y": { + "type": "float", + "value": 44.8963 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 105 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14752 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5748 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 463 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Weapon Rack" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_weaponrack" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 4.0286 + }, + "Y": { + "type": "float", + "value": 44.9047 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 105 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14752 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5748 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 463 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Weapon Rack" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_weaponrack" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 5.2151 + }, + "Y": { + "type": "float", + "value": 44.8995 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 156 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14645 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5799 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 514 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Garbage" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_garbage" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.9083 + }, + "Y": { + "type": "float", + "value": 48.0403 + }, + "Z": { + "type": "float", + "value": -0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 331 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.3562 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68845 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68840 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 677 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "GolemPartsIron" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_golempartsiro" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.7516 + }, + "Y": { + "type": "float", + "value": 45.2934 + }, + "Z": { + "type": "float", + "value": 0.99 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 290 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68854 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68853 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 771 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_ladder" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_ladder" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 3.3752 + }, + "Y": { + "type": "float", + "value": 47.9136 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 351 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68960 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68959 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 767 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Window" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_window" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 1.61 + }, + "Y": { + "type": "float", + "value": 45.42 + }, + "Z": { + "type": "float", + "value": 0.5 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 457 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.3927 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84576 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84563 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_PSHEET" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_psheet" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 3.322 + }, + "Y": { + "type": "float", + "value": 45.1208 + }, + "Z": { + "type": "float", + "value": 0.99 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 457 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -2.3562 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84576 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84563 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_PSHEET" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_psheet" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 4.9015 + }, + "Y": { + "type": "float", + "value": 45.9162 + }, + "Z": { + "type": "float", + "value": 0.99 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 85 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14708 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14709 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 443 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Sacks of Flour, Grain, etc." + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_sacks" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 2.5499 + }, + "Y": { + "type": "float", + "value": 43.8669 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 151 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14627 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14625 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 509 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Flame - Small" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_flamesmall" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 4.4315 + }, + "Y": { + "type": "float", + "value": 48.1928 + }, + "Z": { + "type": "float", + "value": 2.692 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 293 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.7854 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68928 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68927 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_telescope" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_telescope" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 35.3332 + }, + "Y": { + "type": "float", + "value": 48.207 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 351 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68960 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68959 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 767 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Window" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_window" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 36.29 + }, + "Y": { + "type": "float", + "value": 48.65 + }, + "Z": { + "type": "float", + "value": 0.3 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 243 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68919 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68918 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 803 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "SphinxStatue" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_sphinxstatue" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 31.9287 + }, + "Y": { + "type": "float", + "value": 45.291 + }, + "Z": { + "type": "float", + "value": 0.99 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 237 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68899 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 9195 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 800 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_RuneCircle" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_runecircle" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 35.152 + }, + "Y": { + "type": "float", + "value": 44.4561 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 57 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14579 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5699 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "nw_02_onoff" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 415 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Brazier" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_brazier" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 32.7102 + }, + "Y": { + "type": "float", + "value": 46.8286 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 74 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14665 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5716 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 432 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Lecturn" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_lecturn" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 38.2073 + }, + "Y": { + "type": "float", + "value": 43.5023 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 457 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 0.3927 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84576 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84563 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_PSHEET" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_psheet" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 33.213 + }, + "Y": { + "type": "float", + "value": 45.2201 + }, + "Z": { + "type": "float", + "value": 0.99 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 455 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84574 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84561 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_PSHEETS" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_psheets" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 34.5469 + }, + "Y": { + "type": "float", + "value": 45.311 + }, + "Z": { + "type": "float", + "value": 0.99 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 55 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14573 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5697 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 413 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bolts of Cloth" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_bltofcloth" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 32.6998 + }, + "Y": { + "type": "float", + "value": 44.3166 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 294 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68839 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68838 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_globe" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_globe" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 32.2116 + }, + "Y": { + "type": "float", + "value": 43.2464 + }, + "Z": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 151 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14627 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14625 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 509 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Flame - Small" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_flamesmall" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 31.743 + }, + "Y": { + "type": "float", + "value": 44.5526 + }, + "Z": { + "type": "float", + "value": 1.1883 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 177 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14753 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14754 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 535 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Weathering / Scorch Mark" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_weathmark" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 35.9796 + }, + "Y": { + "type": "float", + "value": 42.5287 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 177 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.9817 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14753 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14754 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 535 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Weathering / Scorch Mark" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_weathmark" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 34.2317 + }, + "Y": { + "type": "float", + "value": 43.0334 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 309 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.9817 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 66884 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 66778 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 665 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Bread" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_bread" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 36.277 + }, + "Y": { + "type": "float", + "value": 45.6537 + }, + "Z": { + "type": "float", + "value": 0.99 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 281 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.7671 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68850 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68849 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_hobbyhorse" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_hobbyhorse" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 37.006 + }, + "Y": { + "type": "float", + "value": 48.2498 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 351 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68960 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4294967295 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68959 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 767 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Window" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_window" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 38.68 + }, + "Y": { + "type": "float", + "value": 45.82 + }, + "Z": { + "type": "float", + "value": 0.3 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 22 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "lever" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "A slender lever rises from the floor, controlling some unseen mechanism below.", + "id": 14632 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Module Restart Lever", + "id": 14633 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "x0_startconv" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 380 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "DebugLever" + }, + "TemplateResRef": { + "type": "resref", + "value": "debuglever" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 28.0814 + }, + "Y": { + "type": "float", + "value": 47.1192 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 63 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14638 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5705 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "rdg_forge" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 421 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Forge" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_forge" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 36.7761 + }, + "Y": { + "type": "float", + "value": 15.1818 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 48 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 2.1598 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14546 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5690 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 406 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Anvil" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_anvil" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 36.5984 + }, + "Y": { + "type": "float", + "value": 17.0314 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 464 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 3.1416 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "The crafting of weapons and armor is an age old tradition. The crafting of weapons and armor is as common as blacksmiths. However weapons of true craft and balance are much rarer.\n\nThru the use of a good forge and proper materials a master work weapon or suit of armor can be crafted. This simply requires gold, the weapon to change, and skill. The DC to create a master work is DC20, dwarves get a special +2 for their stone cunning. This process requires Master Working Material from the craftsman merchant.\n\nThe sign of a true master is one who can enchant masterwork arms and armor. This is an expensive undertaking.\n\nThe craftsman must be at least 2 times the level, and have 2 times the skill, of the bonus they are attempting to apply.\n\nThe cost requirements for a magic property added to an weapon are as follows:\n\n Weapons Armor\n+1 1,000 gold 500 Gold\n+2 4,000 gold 2,000 Gold\n+3 9,000 gold 4,500 Gold\n+4 16,000 gold 8,000 Gold\n+5 25,000 gold 12,500 Gold \n+6 360,000 gold 180,000 Gold\n+7 490,000 gold 245,000 Gold\n+8 640,000 gold 320,000 Gold \n+9 810,000 gold 405,000 Gold\n+10 1,000,000 gold 500,000 Gold\n+11 1,210,000 gold 605,000 Gold\n+12 1,440,000 gold 720,000 Gold\n+13 1,690,000 gold 845,000 Gold\n+14 1,960,000 gold 980,000 Gold\n+15 2,250,000 gold 1,125,000 Gold\n+16 2,560,000 gold 1,280,000 Gold\n+17 2,890,000 gold 1,445,000 Gold\n+18 3,240,000 gold 1,620,000 Gold\n+19 3,610,000 gold 1,805,000 Gold\n+20 4,000,000 gold 2,000,000 Gold\n\nIf a weapon already has a property it is discounted from the total price. Example a +1 weapon turned into a +2 weapon costs 3000 gold, and requires a level 6 craftsman.\n\nThere are numerous magical properties that can be added to a weapon or armor. These properties have an enchantment equivalent. Example 1d6 fire damage added to a sword is a +1 enchantment. Therefore a +1 Long sword with +1d6 fire damage costs a total of 4000 gold, and require a level 6 craftsman.", + "id": 84583 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 84568 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "pc_examine" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 1000 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_PLC_BOOK2" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_plc_book2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 34.6939 + }, + "Y": { + "type": "float", + "value": 11.7452 + }, + "Z": { + "type": "float", + "value": 0.61 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 85 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14708 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14709 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 443 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Sacks of Flour, Grain, etc." + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_sacks" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 36.6392 + }, + "Y": { + "type": "float", + "value": 12.2917 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 85 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.589 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14708 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 14709 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 443 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Sacks of Flour, Grain, etc." + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_sacks" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 36.9757 + }, + "Y": { + "type": "float", + "value": 13.363 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 315 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This set of scales is used to divide up party gold evenly.\n\nWhen used by the party leader. All of the parties gold will be put into a pile then divided back out to each party member evenly.\n\nThis does not affect player bank accounts. Only the gold each character has on their person.", + "id": 68905 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68904 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "on_used_scales" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 753 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Scales" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_scales" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 11.4648 + }, + "Y": { + "type": "float", + "value": 43.8815 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 316 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": 1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68896 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68893 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 750 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "RugOriental" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_rugoriental" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 34.1806 + }, + "Y": { + "type": "float", + "value": 4.9892 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 140 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -1.5708 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Top 15 things you need to know about RDG 9.\n\n1. Read your journals. LOTS of important information in there.\n\n2. This is a party based dungeon soloers will die.\n\n3. Read your journals.\n\n4.Resting rules have changed from RDG 8.\n\n5. Read your journals.\n\n6. PVP flags are turned on for realism in battle not for griefing.\n\n7. Read your journals.\n\n8. Cheating the death system will result in the loss of your character, yes even if the DM isn't around.\n\n9. Read your journals.\n\n10. Pit traps have been added. Ropes are a handy thing to have.\n\n11. Read your journals.\n\n12. Healer's bag are a good thing to have in the party.\n\n13. Read your journals.\n\n14. You can now enchant your own weapons, armor, shields, potions, wands and scrolls. Other items coming soon.\n\n15. Read your journals. ", + "id": 14563 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "New Player's Sign", + "id": 14561 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "pc_examine" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 498 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MerchantsShingle3" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_billboard3" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 37.466 + }, + "Y": { + "type": "float", + "value": 5.1745 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 179 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14593 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5822 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "on_used_sit" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 537 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Chair" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_chair" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 15.9101 + }, + "Y": { + "type": "float", + "value": 48.1853 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 179 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14593 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5822 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "on_used_sit" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 537 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Chair" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_chair" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 17.8487 + }, + "Y": { + "type": "float", + "value": 48.2107 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 179 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14593 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5822 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "on_used_sit" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 537 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Chair" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_chair" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 19.5064 + }, + "Y": { + "type": "float", + "value": 48.2089 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 179 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14593 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5822 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "on_used_sit" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 537 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Chair" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_chair" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 21.5465 + }, + "Y": { + "type": "float", + "value": 48.2675 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 179 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 14593 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 5822 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "on_used_sit" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 537 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Chair" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_chair" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 23.512 + }, + "Y": { + "type": "float", + "value": 48.2855 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 143 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "If you would like to become a member of the RDG community please visit:\n\nhttp:orderoftheblackrose.net/Enigma\n\nNote: No WWW, and address is case sensitive.\n\n", + "id": 14563 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Community Player's Sign", + "id": 14561 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "pc_examine" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 501 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "MerchantsShingle3" + }, + "TemplateResRef": { + "type": "resref", + "value": "plc_billboard3" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 34.9418 + }, + "Y": { + "type": "float", + "value": 7.4596 + }, + "Z": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 9, + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 246 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Bearing": { + "type": "float", + "value": -0.0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 68920 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 9199 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 799 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "x0_stonecircle" + }, + "TemplateResRef": { + "type": "resref", + "value": "x0_stonecircle" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + }, + "X": { + "type": "float", + "value": 20.0973 + }, + "Y": { + "type": "float", + "value": 29.5074 + }, + "Z": { + "type": "float", + "value": 0.01 + } + } + ] + }, + "SoundList": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Active": { + "type": "byte", + "value": 0 + }, + "Continuous": { + "type": "byte", + "value": 0 + }, + "Elevation": { + "type": "float", + "value": 1.5 + }, + "GeneratedType": { + "type": "dword", + "value": 0 + }, + "Hours": { + "type": "dword", + "value": 0 + }, + "Interval": { + "type": "dword", + "value": 25000 + }, + "IntervalVrtn": { + "type": "dword", + "value": 5000 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 67965 + } + }, + "Looping": { + "type": "byte", + "value": 0 + }, + "MaxDistance": { + "type": "float", + "value": 10.0 + }, + "MinDistance": { + "type": "float", + "value": 1.0 + }, + "PitchVariation": { + "type": "float", + "value": 0.2 + }, + "Positional": { + "type": "byte", + "value": 1 + }, + "Priority": { + "type": "byte", + "value": 20 + }, + "Random": { + "type": "byte", + "value": 1 + }, + "RandomPosition": { + "type": "byte", + "value": 0 + }, + "RandomRangeX": { + "type": "float", + "value": 0.0 + }, + "RandomRangeY": { + "type": "float", + "value": 0.0 + }, + "Sounds": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_cv_smithhamr1" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_cv_smithhamr2" + } + }, + { + "__struct_id": 0, + "Sound": { + "type": "resref", + "value": "as_cv_smithhamr3" + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "Tavern_Forge_Sound" + }, + "TemplateResRef": { + "type": "resref", + "value": "smithyhammerings" + }, + "Times": { + "type": "byte", + "value": 3 + }, + "Volume": { + "type": "byte", + "value": 127 + }, + "VolumeVrtn": { + "type": "byte", + "value": 0 + }, + "XPosition": { + "type": "float", + "value": 36.9016 + }, + "YPosition": { + "type": "float", + "value": 14.7616 + }, + "ZPosition": { + "type": "float", + "value": 1.5 + } + } + ] + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 11, + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 10 + }, + "IdentifyPrice": { + "type": "int", + "value": -1 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Basic Merchant" + } + }, + "MarkDown": { + "type": "int", + "value": 50 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "MaxBuyPrice": { + "type": "int", + "value": -1 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "OnStoreClosed": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "townstore" + }, + "StoreGold": { + "type": "int", + "value": -1 + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 39 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 11 + }, + "Leather2Color": { + "type": "byte", + "value": 14 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12923 + } + }, + "Metal1Color": { + "type": "byte", + "value": 23 + }, + "Metal2Color": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_CLOTH022" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cloth022" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 6 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 16 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 6 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 16 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 39 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 37 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 11 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 39 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 14 + }, + "Cloth2Color": { + "type": "byte", + "value": 25 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 25 + }, + "Leather2Color": { + "type": "byte", + "value": 11 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12925 + } + }, + "Metal1Color": { + "type": "byte", + "value": 15 + }, + "Metal2Color": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_CLOTH024" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cloth024" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 11 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 6 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 13 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 37 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 11 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 6 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 13 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 39 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 14 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 14 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 19 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 23 + }, + "Cloth2Color": { + "type": "byte", + "value": 23 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 14 + }, + "Leather2Color": { + "type": "byte", + "value": 23 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90474 + } + }, + "Metal1Color": { + "type": "byte", + "value": 11 + }, + "Metal2Color": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_CLOTH008" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_cloth008" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 3 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 14 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 10 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 3 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 4 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 14 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 19 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 22 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 14 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 22 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 14 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 11 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 19 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 22 + }, + "Cloth2Color": { + "type": "byte", + "value": 55 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 22 + }, + "Leather2Color": { + "type": "byte", + "value": 43 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12913 + } + }, + "Metal1Color": { + "type": "byte", + "value": 35 + }, + "Metal2Color": { + "type": "byte", + "value": 35 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_CLOTH012" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cloth012" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 8 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 22 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 8 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 14 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 11 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 8 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 22 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 8 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 4 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 14 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 11 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 19 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 9 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 10 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 14 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12917 + } + }, + "Metal1Color": { + "type": "byte", + "value": 13 + }, + "Metal2Color": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_CLOTH016" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cloth016" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 6 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 9 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 6 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 9 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 14 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 14 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 39 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 23 + }, + "Cloth2Color": { + "type": "byte", + "value": 23 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 23 + }, + "Leather2Color": { + "type": "byte", + "value": 45 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12927 + } + }, + "Metal1Color": { + "type": "byte", + "value": 57 + }, + "Metal2Color": { + "type": "byte", + "value": 35 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_CLOTH026" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cloth026" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 3 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 3 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 6 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 14 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 3 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 3 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 6 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 5 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 14 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 39 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 13 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 50 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 20 + }, + "Cloth2Color": { + "type": "byte", + "value": 25 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 20 + }, + "Leather2Color": { + "type": "byte", + "value": 25 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12911 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_CLOTH010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cloth010" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 13 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 6 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 16 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 6 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 16 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 50 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 14 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 50 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 10 + }, + "Cloth2Color": { + "type": "byte", + "value": 10 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 15 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12920 + } + }, + "Metal1Color": { + "type": "byte", + "value": 8 + }, + "Metal2Color": { + "type": "byte", + "value": 34 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_CLOTH019" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cloth019" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 6 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 6 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 14 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 6 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 6 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 50 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 19 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 52 + }, + "Cloth2Color": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 37 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12906 + } + }, + "Metal1Color": { + "type": "byte", + "value": 25 + }, + "Metal2Color": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_CLOTH005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_cloth005" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 8 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 16 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 8 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 6 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 16 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 19 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 19 + }, + "Cloth2Color": { + "type": "byte", + "value": 16 + }, + "Cost": { + "type": "dword", + "value": 200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12843 + } + }, + "Metal1Color": { + "type": "byte", + "value": 12 + }, + "Metal2Color": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL011" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl011" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 45 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 10, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 14 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 23 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Cost": { + "type": "dword", + "value": 1500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 21 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 181 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL007" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl007" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 5 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 12 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 10 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 5 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 12 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 10 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 14 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 11, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 30 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 12 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Cost": { + "type": "dword", + "value": 200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 12 + }, + "Leather2Color": { + "type": "byte", + "value": 15 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12838 + } + }, + "Metal1Color": { + "type": "byte", + "value": 14 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL005" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl005" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 30 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 12, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL012" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl012" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 6 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 3 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 6 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 3 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 36 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 13, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 16 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 1 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl001" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 16 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 14, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 28 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 8 + }, + "Cost": { + "type": "dword", + "value": 5 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12841 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL009" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl009" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 9 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 16 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 9 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 16 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 28 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 15, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 19 + }, + "Cloth2Color": { + "type": "byte", + "value": 16 + }, + "Cost": { + "type": "dword", + "value": 15 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12836 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL002" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl002" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 7 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 3 + }, + "Cloth2Color": { + "type": "byte", + "value": 4 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12842 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL010" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl010" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 13 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 13 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 25 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 17, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 10 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 10 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 184 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL004" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl004" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 5 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 5 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 18, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 3 + }, + "Cost": { + "type": "dword", + "value": 15 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 5 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12840 + } + }, + "Metal1Color": { + "type": "byte", + "value": 17 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL008" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl008" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 3 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 13 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 3 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 13 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 19, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 38 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 9 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 11 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12837 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_AARCL003" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_aarcl003" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 5 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 3 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 5 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 3 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 38 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 20, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_ASHLW001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_ashlw001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 21, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_ASHSW001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_ashsw001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 22, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 57 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 30 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1551 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_ASHTO001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_ashto001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 23, + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 33 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 21 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Cost": { + "type": "dword", + "value": 600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Half Plate", + "id": 12839 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hplate001" + }, + "TemplateResRef": { + "type": "resref", + "value": "hplate001" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 9 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 9 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + }, + { + "__struct_id": 4, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 99 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WAMAR001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wamar001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 99 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WAMBO001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wambo001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 27 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1521 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 99 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WAMBU001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wambu001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 18 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 40 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 515 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WAXGR001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waxgr001" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 38 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 12 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1532 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WAXHN001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waxhn001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 2 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 169 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WAXBT001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waxbt001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 3 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 70 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 168 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSWBS001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wswbs001" + }, + "xModelPart1": { + "type": "word", + "value": 41 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSWDG001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wswdg001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 13 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 167 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSWGS001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wswgs001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 30 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 61 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSWLS001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wswls001" + }, + "xModelPart1": { + "type": "word", + "value": 61 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 10, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 51 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 40 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSWRP001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wswrp001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 11, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 53 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 30 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSWSC001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wswsc001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 12, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 28 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1522 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBLCL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wblcl001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 13, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 35 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 30 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1529 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBLFH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wblfh001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 14, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 4 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 176 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBLFL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wblfl001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 15, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 37 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1531 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBLHL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wblhl001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 24 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBLHW001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wblhw001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 17, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBLML001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wblml001" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 18, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 47 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1541 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBLMS001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wblms001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 19, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 32 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 80 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1526 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WDBMA001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wdbma001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 20, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 50 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1544 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WDBQS001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wdbqs001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 21, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 12 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 172 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WDBSW001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wdbsw001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 22, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 40 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1534 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSPKA001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wspka001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 23, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 60 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 12 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WSPSC001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wspsc001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 24, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 111 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 83617 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 37 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X2_IT_WPWHIP" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_wpwhip" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 25, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 10 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 175 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WPLHB001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wplhb001" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 26, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 55 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 36 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WPLSC001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wplsc001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 27, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WPLSS001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wplss001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 28, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 6 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 173 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBWXH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wbwxh001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 29, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 70 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBWXL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wbwxl001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 30, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBWLN001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wbwln001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 31, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 11 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 60 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 171 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBWSH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wbwsh001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 61 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1555 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WBWSL001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wbwsl001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 33, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 31 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1525 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WTHDT001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wthdt001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 34, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 59 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1553 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WTHSH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wthsh001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 35, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 63 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 1557 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_WTHAX001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wthax001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 36, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Short Sword", + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ssword001" + }, + "TemplateResRef": { + "type": "resref", + "value": "ssword001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 37, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 108 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 60 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Waraxe " + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dwaxe001" + }, + "TemplateResRef": { + "type": "resref", + "value": "dwaxe001" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + }, + { + "__struct_id": 2, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 50 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Gives a +5 Fort Save Bonus for 1 hour vs. Poison." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Antitoxin" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Antitoxin" + }, + "TemplateResRef": { + "type": "resref", + "value": "antitoxin" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13450 + } + }, + "ModelPart1": { + "type": "byte", + "value": 56 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 330 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION021" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion021" + }, + "xModelPart1": { + "type": "word", + "value": 56 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 6 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 52940 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13451 + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 332 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION022" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion022" + }, + "xModelPart1": { + "type": "word", + "value": 45 + }, + "xModelPart2": { + "type": "word", + "value": 41 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 4 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 52941 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 13452 + } + }, + "ModelPart1": { + "type": "byte", + "value": 74 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 331 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_MPOTION023" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_it_mpotion023" + }, + "xModelPart1": { + "type": "word", + "value": 74 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 61 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + }, + { + "__struct_id": 3 + }, + { + "__struct_id": 1, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 19 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bundle of 10 Sun Rods" + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "10sunrods" + }, + "TemplateResRef": { + "type": "resref", + "value": "10sunrods" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bundle of 10 Torches" + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "10torches" + }, + "TemplateResRef": { + "type": "resref", + "value": "10torches" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 296 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Can be used on a trap or lock. +2 to Open Lock and Disable Traps Skills.\n\nWhen used on a locked object the PC will attempt to pick the lock.\n\nWhen used on a trap the PC will attempt to disarm the trap. Failing that the PC will Flag the trap for their party.\n\nIn the case of a trapped locked object. The trap must be disarmed before the lock can be picked.\n\nNote attempting to pick a lock on a object with a undiscovered trap is hazardous to your health." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Master Work Thieves' Tools" + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mw_thievestools" + }, + "TemplateResRef": { + "type": "resref", + "value": "mw_thievestools" + }, + "xModelPart1": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "You must eat to get a good rest.\n\n\n\n\nDM Note: Use this item to rest." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rations" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "food" + }, + "TemplateResRef": { + "type": "resref", + "value": "food" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rope" + } + }, + "ModelPart1": { + "type": "byte", + "value": 103 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_rope" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_rope" + }, + "xModelPart1": { + "type": "word", + "value": 103 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 26 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 30 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Can be used on a trap or lock.\n\nWhen used on a locked object the PC will attempt to pick the lock.\n\nWhen used on a trap the PC will attempt to disarm the trap. Failing that the PC will Flag the trap for their party.\n\nIn the case of a trapped locked object. The trap must be disarmed before the lock can be picked.\n\nNote attempting to pick a lock on a object with a undiscovered trap is hazardous to your health." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Thieves' Tools" + } + }, + "ModelPart1": { + "type": "byte", + "value": 38 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "thievestools" + }, + "TemplateResRef": { + "type": "resref", + "value": "thievestools" + }, + "xModelPart1": { + "type": "word", + "value": 38 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Torch", + "id": 180 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_TORCH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "it_torch002" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Once aquired this item will automatically break down into 7 Rations." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Weeks rations" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 11 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 81 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "weeksrations" + }, + "TemplateResRef": { + "type": "resref", + "value": "weeksrations" + }, + "xModelPart1": { + "type": "word", + "value": 23 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 49 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 10 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This kit can be used to stabilize an incapacitated PC.\n\nHeal Skill vs. DC 15" + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Healer's Bag" + } + }, + "ModelPart1": { + "type": "byte", + "value": 108 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "healersbag" + }, + "TemplateResRef": { + "type": "resref", + "value": "healersbag" + }, + "xModelPart1": { + "type": "word", + "value": 108 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 19 + }, + "BaseItem": { + "type": "int", + "value": 81 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2989 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2981 + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 341 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_WMGRENADE001" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_wmgrenade001" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 10, + "AddCost": { + "type": "dword", + "value": 18 + }, + "BaseItem": { + "type": "int", + "value": 81 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2991 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2983 + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 343 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_WMGRENADE003" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_wmgrenade003" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 11, + "AddCost": { + "type": "dword", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 81 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 40 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2992 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2984 + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 339 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_WMGRENADE004" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_wmgrenade004" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 12, + "AddCost": { + "type": "dword", + "value": 27 + }, + "BaseItem": { + "type": "int", + "value": 81 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 30 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2994 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2986 + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 338 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_WMGRENADE005" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_wmgrenade005" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 13, + "AddCost": { + "type": "dword", + "value": 18 + }, + "BaseItem": { + "type": "int", + "value": 81 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2990 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2982 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 336 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_WMGRENADE002" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_wmgrenade002" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 14, + "AddCost": { + "type": "dword", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 81 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 40 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 2997 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 2988 + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 340 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X1_WMGRENADE007" + }, + "TemplateResRef": { + "type": "resref", + "value": "x1_wmgrenade007" + }, + "xModelPart1": { + "type": "word", + "value": 5 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "Merchant_Store" + }, + "WillNotBuy": { + "type": "list", + "value": [] + }, + "WillOnlyBuy": { + "type": "list", + "value": [] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 5.7051 + }, + "YOrientation": { + "type": "float", + "value": -1.0 + }, + "YPosition": { + "type": "float", + "value": 47.5586 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 11, + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 10 + }, + "IdentifyPrice": { + "type": "int", + "value": 100 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Books and Scrolls" + } + }, + "MarkDown": { + "type": "int", + "value": 50 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "MaxBuyPrice": { + "type": "int", + "value": -1 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "OnStoreClosed": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "townstore" + }, + "StoreGold": { + "type": "int", + "value": -1 + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Conjuration\nDescriptor(s): Acid\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Large\nDuration: 1 Round / 2 Level\nAdditional Counter Spells:\nSave: Fortitude\nSpell Resistance: Yes \n\nAcid Fog creates a thick, clinging, greenish cloud. Creatures entering the cloud take 4d6 acid damage. Creatures inside the cloud must make a Fortitude save or have their movement reduced by 50%. Every round a creature spends in the cloud, it suffers 2d6 acid damage.", + "id": 6096 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Acid Fog", + "id": 13614 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll000" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll000" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 13 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 0\nInnate Level: 0\nSchool: Conjuration\nDescriptor(s): Acid\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nThe caster fires a small orb of acid at the target for 1d3 points of acid damage.", + "id": 1496 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Acid Splash", + "id": 383 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 355 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll424" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll424" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 2, Paladin 2, Ranger 3\nInnate Level: 2\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single \nDuration: 1 Turn / Level\nAdditional Counter Spells: Doom\nSave: Harmless\nSpell Resistance: No\n\nThe target gains a +1 bonus to attack rolls, a +1 bonus on saving throws versus fear, and a 1d8 bonus to maximum hit points.", + "id": 6097 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Aid", + "id": 13614 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll001" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll001" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1 \nInnate Level: 1\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster or a target gains a +20 bonus to Listen checks.", + "id": 2370 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amplify", + "id": 2363 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 373 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll442" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll442" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3, Wizard / Sorcerer 5\nInnate Level: 3\nSchool: Necromancy\nDescriptor(s): Evil\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: Sunbeam\nSave: None\nSpell Resistance: No\n\nAnimate Dead summons forth an undead minion. The type of undead summoned is dependent upon the caster level:\nLevels 1 to 5: Tyrantfog zombie\nLevels 6 to 9: Skeletal warrior\nLevel 10 or more: Skeletal Chieftain", + "id": 6098 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Animate Dead", + "id": 13607 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll002" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll002" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Paladin 2 \nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): Divine\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster, Medium\nDuration: 1 turn / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster channels divine power to gain a +4 Charisma bonus. All allies near the caster gain a +5 bonus to their saving throws versus fear.", + "id": 1542 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Aura of Glory", + "id": 386 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 360 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll429" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll429" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 7\nInnate Level: 7\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Colossal\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nAll allies within the area of effect receive a +4 bonus to Strength, Constitution, and Dexterity.", + "id": 6538 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Aura of Vitality", + "id": 58579 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 321 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll372" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll372" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 5\nInnate Level: 5\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Animal Companion\nDuration: Special\nAdditional Counter Spells:\nSave: Harmless\nSpell Resistance: No\n\nThe target animal companion gains +4 Strength, +4 Constitution, +1d10 Wisdom, and +2 to attack rolls for as long as it remains at the Druid's side.", + "id": 6529 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Awake", + "id": 58583 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 303 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll363" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll363" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): Sonic\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nThe caster creates a deep, resonant vibration that shakes all creatures in the area of effect from their feet if they fail a strength check (as if the caster had a strength of 20). Every creature that falls will be knocked down for one round.", + "id": 1586 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Balagarn's Iron Horn", + "id": 502 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 367 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll436" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll436" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1\nInnate Level: 1\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Colossal\nDuration: 1 turn / level\nAdditional Counter Spells: Bless\nSave: Will negates\nSpell Resistance: Yes\n\nBane fills the caster's enemies with fear and doubt. They suffer a -1 penalty on their attack rolls and a -1 penalty on saving throws against fear.", + "id": 2664 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bane", + "id": 2663 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 380 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll449" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll449" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 10, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 6, Wizard / Sorcerer 7\nInnate Level: 6\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells:\nSave: Will negates\nSpell Resistance: Yes\n\nThe caster is able to cause all summoned creatures, familiars, animal companions, and Outsiders in the area of effect to be destroyed. A number of creatures equal to twice the caster's level in HD can be banished.", + "id": 1548 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Banishment", + "id": 387 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 361 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll430" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll430" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 11, + "AddCost": { + "type": "dword", + "value": 6 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 2\nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): None\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nBarkskin hardens the target creature's skin, granting a natural armor bonus to Armor Class based on the caster's level:\nLevel 1-6: +3\nLevel 7-12: +4\nLevels 13+: +5", + "id": 6099 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Barkskin", + "id": 13614 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll003" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll003" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 12, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Wizard / Sorcerer 4\nInnate Level: 3\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Permanent\nAdditional Counter Spells: Remove Curse\nSave: Will Negates\nSpell Resistance: Yes\n\nBestow Curse lowers all of the target creature's ability scores by 2.", + "id": 6100 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bestow Curse", + "id": 13595 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll004" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll004" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 13, + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Single\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: Fortitude\nSpell Resistance: Yes\n\nA giant hand appears and attacks the target, once each round for the duration of the spell. Each hit causes 1d8+11 points of damage to the target and if they fail their saving throw they are stunned for that round as well.", + "id": 2691 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bigby's Clenched Fist", + "id": 2686 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 393 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll462" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll462" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 14, + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Single\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: Fortitude\nSpell Resistance: Yes\n\nA giant hand appears and attacks the target. If it hits and succeeds in a grapple check, the target is held fast for the duration of the spell and suffers 2d6+12 points of damage each round.", + "id": 2692 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bigby's Crushing Hand", + "id": 2687 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 394 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll463" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll463" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 15, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Single\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nA giant hand appears and attempts to bull rush one target. The hand gains a +14 bonus on the Strength check. A target that is bull rushed is knocked down and is dazed for the duration of the spell.", + "id": 2689 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bigby's Forceful Hand", + "id": 2684 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 391 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll460" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll460" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Single\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nA giant hand appears and attacks the target. If the hand hits and succeeds in a grapple check the opponent will be held for the duration of the spell.", + "id": 2690 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bigby's Grasping Hand", + "id": 2685 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 392 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll461" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll461" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 17, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Single\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nA giant hand appears over the target, making it difficult for him to attack. He receives a -10 penalty to all attack rolls for the duration of the spell.", + "id": 2688 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bigby's Interposing Hand", + "id": 2683 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 390 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll459" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll459" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 18, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 6 \nInnate Level: 6\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Wall 30 ft Long\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nBlade Barrier brings into being a 30-ft long and 3-ft wide wall of stabbing blades. All those passing through the wall take 1d6 points of damage per caster level.", + "id": 6101 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Blade Barrier", + "id": 13614 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll005" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll005" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 19, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1, Paladin 1\nInnate Level: 1\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Colossal\nDuration: 1 Turn / Level\nAdditional Counter Spells: Bane\nSave: Harmless\nSpell Resistance: No \n\nAll allies within the area of effect gain a +1 bonus to attack rolls, along with a +1 on Will saves against fear.", + "id": 6102 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bless", + "id": 13614 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll006" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll006" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 20, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 3, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Enchantment\nDescriptor(s): \nComponent(s): Verbal\nRange: Medium\nArea of Effect / Target: Single\nDuration: 1 Round / Level\nAdditional Counter Spells: Remove Blindness/Deafness\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nThe target creature is struck blind and deaf.", + "id": 6104 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Blindness / Deafness", + "id": 13560 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll008" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll008" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 21, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 2 \nInnate Level: 2\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster enters a rage similar to that of a barbarian. The caster gains a +2 bonus to Strength and Constitution and a +1 bonus to Will saves, while suffering a -1 penalty to AC.", + "id": 1425 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Blood Frenzy", + "id": 359 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 353 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll422" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll422" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 22, + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 8\nInnate Level: 8\nSchool: Conjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Huge\nDuration: Instant\nAdditional Counter Spells:\nSave: Reflex 1/2\nSpell Resistance: Yes\n\nRocks fall from the sky, causing 1d8 points of damage per caster level (max 10d8) to all enemies in the area.", + "id": 1489 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bombardment", + "id": 382 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 354 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll423" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll423" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 23, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Druid 2, Paladin 2, Wizard / Sorcerer 2 \nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: Ray of Enfeeblement\nSave: Harmless\nSpell Resistance: No \n\nThe target creature's Strength is increased by 1d4+1.", + "id": 6105 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bull's Strength", + "id": 13561 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll009" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll009" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 24, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Transmutation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: 30 ft\nArea of Effect / Target: Spell Cone\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes \n\nA cone of fire shoots forth from the caster's hands, burning all those within its area of effect for 1d4 damage per caster level, up to a maximum of 5d4.", + "id": 6106 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Burning Hands", + "id": 13549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll010" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll010" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 25, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 3 \nInnate Level: 3\nSchool: Evocation\nDescriptor(s): Electricity\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Large\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nAll enemies within the area of effect take 1d6 points of electrical damage per caster level, to a maximum of 10d6.", + "id": 6107 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Call Lightning", + "id": 13549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll011" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll011" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 26, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 1, Ranger 1 \nInnate Level: 1\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 turn / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster's coloring changes to match the surroundings, gaining a +10 competence bonus to any Hide checks.", + "id": 1064 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Camouflage", + "id": 340 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 352 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll421" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll421" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 27, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Ranger 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe target creature's Dexterity is increased by 1d4+1.", + "id": 6109 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cat's Grace", + "id": 13561 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 25 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll013" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll013" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 28, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Evocation\nDescriptor(s): Electricity\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Colossal, 1 Target / Level\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes \n\nA bolt of electricity arcs through the caster's enemies for 1d6 points of electrical damage per caster level, up to a maximum of 20d6 points of damage to the initial target and half that amount to all secondary targets.", + "id": 6110 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chain Lightning", + "id": 13618 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll014" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll014" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 29, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 4 \nInnate Level: 3\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 3 Rounds + 1 / 2 Levels\nAdditional Counter Spells: Clarity\nSave: Will Negates\nSpell Resistance: Yes\n\nIn the eyes of the target creature, the personal reputation of the caster is improved by 50%.", + "id": 6111 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Charm Monster", + "id": 13586 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 31 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll015" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll015" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 30, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Wizard / Sorcerer 1 \nInnate Level: 1\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 2 Rounds + 1 / 3 Levels\nAdditional Counter Spells: Clarity\nSave: Will Negates\nSpell Resistance: Yes\n\nIn the eyes of the target humanoid, the personal reputation of the caster is improved by 50%.", + "id": 6112 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Charm Person", + "id": 13544 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll016" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll016" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 31, + "AddCost": { + "type": "dword", + "value": 78 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 2\nInnate Level: 2\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 2 Rounds + 1 / 3 Levels\nAdditional Counter Spells: Clarity\nSave: Will Negates\nSpell Resistance: Yes\n\nIn the eyes of the target animal or humanoid, the personal reputation of the caster is improved by 50%.", + "id": 6113 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Charm Person or Animal", + "id": 13655 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 35 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll017" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll017" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32, + "AddCost": { + "type": "dword", + "value": 2150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6 \nInnate Level: 6\nSchool: Necromancy\nDescriptor(s): Death\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: Death Ward\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nA wave of negative energy bursts from the target location. A number of enemy creatures equal to 1d4 per caster level must make a Fortitude save or die, beginning with those creatures with the lowest Hit Dice. Creatures with 9 or more Hit Dice are unaffected.", + "id": 6114 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Circle of Death", + "id": 13621 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll018" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll018" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 33, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 5 \nInnate Level: 5\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: Instant\nAdditional Counter Spells: Healing Circle\nSave: Fortitude 1/2\nSpell Resistance: Yes\n\nAll enemies within the area of effect are struck with negative energy that causes 1d8 points of damage, +1 point per caster level. Negative energy spells have a reverse effect on undead, healing them instead of harming them.", + "id": 6115 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Circle of Doom", + "id": 13621 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll019" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll019" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 34, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Round / Level\nAdditional Counter Spells: Blindness / Deafness\nSave: Harmless\nSpell Resistance: No\n\nFor the duration of the spell, the target creature gains a +10 bonus to all Spot and Listen checks.", + "id": 6116 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Clairaudience & Clairvoyance", + "id": 13574 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 43 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll020" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll020" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 35, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 3, Wizard / Sorcerer 3\nInnate Level: 2\nSchool: Abjuration\nDescriptor(s): Mind-Affecting\nComponent(s): Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 1 Turn\nAdditional Counter Spells: Charm Person\nSave: No\nSpell Resistance: No\n\nThis spell removes the effects of Sleep, Confusion, Stun, and Charm, and protects against all mind-affecting effects until it expires. For every effect removed by the spell, the target creature sustains 1 point of damage.", + "id": 6117 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Clarity", + "id": 13566 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 46 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll021" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll021" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 36, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Long\nArea of Effect / Target: Large\nDuration: 1 Round / 2 Levels\nAdditional Counter Spells:\nSave: Fortitude Special\nSpell Resistance: Yes\n\nA billowing cloud of noxious vapors settles over the area. Its effects vary according to the Hit Dice of the affected creatures:\n1-3 HD: Instant death\n4-6 HD: Fortitude save or death\nOver 6 HD: 1d10 damage/round", + "id": 6119 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloudkill", + "id": 13600 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 48 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll023" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll023" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 37, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Illusion\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Cone, 30ft\nArea of Effect / Target: Spell Cone\nDuration: Instant\nAdditional Counter Spells: \nSave: Will Negates\nSpell Resistance: Yes\n\nColor Spray sends forth a dazzling array of lights to confound all creatures within the area of effect. Its effects vary according to the Hit Dice of the affected creatures:\n1-2 HD: Sleep for 3 + 1d4 rounds\n3-4 HD: Blinded for 2 + 1d4 rounds\nOver 4 HD: Stunned for 1 + 1d4 round", + "id": 6120 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Color Spray", + "id": 13547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 49 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll024" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll024" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 38, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5 \nInnate Level: 5\nSchool: Evocation\nDescriptor(s): Cold\nComponent(s): Verbal, Somatic\nRange: Cone, 30ft\nArea of Effect / Target: Spell Cone\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes \n\nA cone of frost and snow shoots forth from the caster's hands, doing 1d6 points of cold damage per caster level to all those within the area of effect, to a maximum of 15d6.", + "id": 6121 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cone of Cold", + "id": 13605 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 50 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll025" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll025" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 39, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 4\nInnate Level: 3\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Large \nDuration: 1 Round / Level\nAdditional Counter Spells: Clarity\nSave: Will Negates\nSpell Resistance: Yes\n\nAffected creatures either wander randomly, attack a random target, or simply stand still.", + "id": 6122 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Confusion", + "id": 13587 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 52 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll026" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll026" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 40, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3, Druid 3, Wizard / Sorcerer 4\nInnate Level: 3\nSchool: Necromancy\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nCounter Spells: Remove Disease\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nThe target creature is struck down with one of the following debilitating diseases, randomly chosen: Blinding Sickness, Cackle Fever, Mind Fire, Red Ache, Shakes, or Slimy Doom.", + "id": 6123 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Contagion", + "id": 13592 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 54 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll027" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll027" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 41, + "AddCost": { + "type": "dword", + "value": 200 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3, Wizard / Sorcerer 2\nInnate Level: 3\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Permanent\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThis creates a magical flame that burns as bright as a torch until dispelled.", + "id": 522 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Continual Flame", + "id": 59 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 350 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll419" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll419" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 42, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 6, Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Necromancy\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: Sunbeam\nSave: Will Negates\nSpell Resistance: Yes\n\nA single undead creature with up to 2 Hit Dice per caster level falls under the caster's control unless it makes a successful Will save.", + "id": 6124 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Control Undead", + "id": 13631 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 55 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll028" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll028" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 43, + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 8\nInnate Level: 8\nSchool: Necromancy\nDescriptor(s): Evil\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: Sunbeam\nSave: None\nSpell Resistance: None\n\nThe caster brings a powerful undead creature into being. The type of undead is based upon the caster's level:\nUnder level 15: Vampire\nLevel 16-17: Doom knight\nLevel 18-19: Lich\nLevel 20: Greater mummy", + "id": 6125 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Create Greater Undead", + "id": 779 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 57 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll029" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll029" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 44, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 6, Wizard / Sorcerer 8\nInnate Level: \nSchool: Necromancy\nDescriptor(s): Evil\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: Sunbeam\nSave: None\nSpell Resistance: None\n\nThe caster brings an undead creature into being. The type of undead is based upon the caster's level:\nLevel 11 and under: Ghoul\nLevel 12-13: Ghast\nLevel 14-15: Wight\nLevel 16 and over: Spectre", + "id": 6126 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Create Undead", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 60 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll030" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll030" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 45, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 7\nInnate Level: 7\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Large\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a mass of biting and stinging insects which causes 1d6 points of damage. For every subsequent round that a creature remains within the area of effect, the damage inflicted is increased by an increment of 1d6 (ie. 1d6 for the first round, 2d6 for the second, 4d6 for the third, 7d6 for the fourth, and so on). The spell deals damage until its duration expires or it deals 1,000 points of damage.", + "id": 6530 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Creeping Doom", + "id": 58583 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 304 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll364" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll364" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 46, + "AddCost": { + "type": "dword", + "value": 196 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4, Cleric 4, Druid 5\nInnate Level: 4\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Will for 1/2\nSpell Resistance: Yes\n\nThe target creature is healed of 4d8 points of damage, + 1 point per caster level to a maximum of +20. Healing spells have a reverse effect when used on undead, causing the targeted undead to take an amount of damage equal to what the spell normally heals. A successful touch attack must first be made when this spell is used against undead.", + "id": 6127 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cure Critical Wounds", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 63 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll031" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll031" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 47, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Cleric 1, Druid 1, Paladin 1, Ranger 1\nInnate Level: 1\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Ghoul Touch\nSave: Will 1/2\nSpell Resistance: Yes\n\nThe target creature is healed for 1d8 points of damage, +1 point per caster level (to a maximum of +5). Healing spells have a reverse effect on undead, harming instead of healing them. A successful touch attack must first be made when this spell is used against undead.", + "id": 6128 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cure Light Wounds", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll032" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll032" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 48, + "AddCost": { + "type": "dword", + "value": 4 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 0, Cleric 0, Druid 0\nInnate Level: 0\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Ghoul Touch\nSave: None\nSpell Resistance: Yes\n\nThe target creature is healed for 4 points of damage. Healing spells have a reverse effect on undead, harming instead of healing them. A successful touch attack must first be made when this spell is used against undead.", + "id": 6129 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cure Minor Wounds", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 68 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll033" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll033" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 49, + "AddCost": { + "type": "dword", + "value": 90 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Druid 3, Paladin 3, Ranger 3\nInnate Level: 2\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Ghoul Touch\nSave: Will 1/2\nSpell Resistance: \n\nThe target creature is healed for 2d8 points of damage, +1 point per caster level (to a maximum of +10). Healing spells have a reverse effect on undead, harming instead of healing them. A successful touch attack must first be made when this spell is used against undead.", + "id": 6130 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cure Moderate Wounds", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 69 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll034" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll034" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 50, + "AddCost": { + "type": "dword", + "value": 255 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Druid 4, Paladin 4, Ranger 4\nInnate Level: 4\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Ghoul Touch\nSave: Will 1/2\nSpell Resistance: Yes \n\nThe target creature is healed for 3d8 points of damage, +1 point per caster level (to a maximum of +15). Healing spells have a reverse effect on undead, harming instead of healing them. A successful touch attack must first be made when this spell is used against undead.", + "id": 6131 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cure Serious Wounds", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 72 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll035" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll035" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 51, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Evocation\nDescriptor(s): Darkness\nComponent(s): Verbal\nRange: Long\nArea of Effect / Target: Huge\nDuration: 1 Round / Level\nAdditional Counter Spells: Light \nSave: None\nSpell Resistance: Yes\n\nAll creatures within the area of effect are shrouded in a haze of darkness which can only be pierced using Ultravision.", + "id": 6132 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Darkness", + "id": 13555 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 75 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll036" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll036" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 52, + "AddCost": { + "type": "dword", + "value": 13 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 0, Wizard / Sorcerer 0 \nInnate Level: 0\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Single\nDuration: 2 Rounds\nAdditional Counter Spells: Clarity\nSave: Will Negates\nSpell Resistance: Yes\n\nIf the target humanoid creature has 5 Hit Dice or less, they are dazed for 2 rounds.", + "id": 6133 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Daze", + "id": 13536 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 76 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll037" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll037" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 53, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4, Druid 5, Paladin 4 \nInnate Level: 4\nSchool: Necromancy\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: Finger of Death\nSave: Harmless\nSpell Resistance: None\n\nThe target creature becomes immune to any death spells, spell-like abilities, and effects.", + "id": 6135 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Death Ward", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 77 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll038" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll038" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 54, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: 1 Round / 3 Levels\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nThe caster creates a small, magical zone that can detect the passage of enemy creatures. When the field is activated, it explodes, doing 1d6 points of fire damage per caster level to all within the area of effect, to a maximum of 20d6.", + "id": 6136 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Delayed Blast Fireball", + "id": 13628 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 78 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll039" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll039" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 55, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 7\nInnate Level: 7\nSchool: Necromancy\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Close\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Fortitude Partial\nSpell Resistance: Yes\n\nThe target creature must make a Fortitude save or die. A successful save still results in the target taking 10d6 points of damage.", + "id": 6532 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Destruction", + "id": 58583 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 307 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll366" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll366" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 56, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 6\nInnate Level: 6\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Large\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: Fortitude negates\nSpell Resistance: Yes\n\nThe caster's song draws the energies of death and destruction. Any enemies in the area of effect suffer 2 points of Strength and Dexterity ability score damage each round. If the enemy leaves the area of effect, their Strength and Dexterity are restored.", + "id": 2373 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dirge", + "id": 2366 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 376 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll445" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll445" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 57, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4, Cleric 4, Wizard / Sorcerer 5\nInnate Level: 4\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: Gate\nSave: Will Negates\nSpell Resistance: Yes\n\nAll summoned creatures, animal companions, and familiars belonging to enemy spellcasters are unsummoned within the area of effect. ", + "id": 6137 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dismissal", + "id": 13599 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 81 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll040" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll040" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 58, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Druid 4, Paladin 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single or Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: Yes\n\nThis spell attempts to strip all magical effects from a single target. It can also target a group of creatures, attempting to remove the most powerful spell effect from each creature. To remove an effect, the caster makes a dispel check of 1d20 +1 per caster level (to a maximum of +10) against a DC of 11 + the spell effect's caster level.", + "id": 6138 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dispel Magic", + "id": 13568 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 84 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll041" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll041" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 59, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Illusion\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe target gains 50% concealment, displacing the caster's image several feet to the side, similar to the abilities of a displacer beast.", + "id": 2680 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Displacement", + "id": 2679 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 389 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll458" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll458" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 60, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1, Paladin 1 \nInnate Level: 1\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Turn\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster gains a +1 bonus to attack and weapon damage rolls for every three caster levels (at least +1, to a maximum of +5).", + "id": 54 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Divine Favor", + "id": 53 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 345 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll414" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll414" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 61, + "AddCost": { + "type": "dword", + "value": 628 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4\nInnate Level: 4\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: None\n\nThe caster gains the following bonuses: 1 extra Hit Point per caster level, Strength is raised to 18 (if their strength is already 18 or higher, it is not raised further), and base attack bonus improves to that of a Fighter of the same level.", + "id": 6139 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Divine Might", + "id": 2687 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 395 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll464" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll464" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 62, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4\nInnate Level: 4\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: None\n\nThe caster gains the following bonuses: 1 extra Hit Point per caster level, Strength is raised to 18 (if their strength is already 18 or higher, it is not raised further), and base attack bonus improves to that of a Fighter of the same level.", + "id": 6139 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Divine Power", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 86 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll042" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll042" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 63, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4\nInnate Level: 4\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: None\n\nThe caster gains the following bonuses: 1 extra Hit Point per caster level, Strength is raised to 18 (if their strength is already 18 or higher, it is not raised further), and base attack bonus improves to that of a Fighter of the same level.", + "id": 6139 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Divine Shield", + "id": 2687 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 396 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll465" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll465" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 64, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 3\nInnate Level: 3\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 3 Rounds, +1 / Level\nAdditional Counter Spells: Clarity\nSave: Will Negates\nSpell Resistance: Yes\n\nThe target animal temporarily becomes a faithful and loyal servant of the caster.", + "id": 6140 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dominate Animal", + "id": 13568 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 87 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll043" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll043" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65, + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 3 Turns + 1/ Level\nAdditional Counter Spells: \nSave: Will Negates\nSpell Resistance: Yes\n\nThe target monster temporarily becomes a faithful and loyal servant of the caster.", + "id": 6141 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dominate Monster", + "id": 13646 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 88 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll044" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll044" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 66, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4, Wizard / Sorcerer 5\nInnate Level: 4\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 2 Rounds + 1 Round / 3 Caster Levels\nAdditional Counter Spells: Clarity\nSave: Will Negates\nSpell Resistance: Yes\n\nThe target person temporarily becomes a faithful and loyal servant of the caster.", + "id": 6142 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dominate Person", + "id": 13601 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 89 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll045" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll045" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 67, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1\nInnate Level: 1\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: Bless\nSave: Will Negates\nSpell Resistance: Yes\n\nThe target creature receives a -2 modifier to all attack rolls, damage rolls, saving throws, ability checks and skill checks.", + "id": 6143 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Doom", + "id": 13536 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 90 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll046" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll046" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 68, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 6 \nInnate Level: 6\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells:\nSave: Fortitude negates\nSpell Resistance: Yes\n\nThe caster creates water in the lungs of a target creature. Any drowned creature takes 90% of its current hit points as damage. Golems and other nonliving creatures cannot be drowned.", + "id": 1588 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Drown", + "id": 508 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 368 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll437" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll437" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 69, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Paladin 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells:\nSave: Harmless\nSpell Resistance: No \n\nThe target creature's Charisma is increased by 1d4+1.", + "id": 6526 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eagle's Splendor", + "id": 58581 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 288 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll354" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll354" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 70, + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 8, Druid 9\nInnate Level: 8\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells:\nSave: Reflex 1/2\nSpell Resistance: No\n\nThe caster causes a massive earthquake around himself, causing 1d6 points of damage per caster level (to a maximum of 10d6) to all creatures in the area of effect. The caster is not affected by the earthquake.", + "id": 1524 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Earthquake", + "id": 384 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 357 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll426" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll426" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 71, + "AddCost": { + "type": "dword", + "value": 13 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 0 \nInnate Level: 0\nSchool: Evocation\nDescriptor(s): Electricity\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nThe caster does 1d3 points of electrical damage to a target.", + "id": 1857 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Electric Jolt", + "id": 1852 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 370 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll439" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll439" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 72, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Evocation\nDescriptor(s): Cold, Fire\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: None\nSpell Resistance: None\n\nThe caster is surrounded by a ring of fire that damages all opponents who make a successful melee attack on the caster. The damage inflicted is 1d6, +1 point per caster level. The caster also gains 50% immunity to cold and fire.", + "id": 6144 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Elemental Shield", + "id": 13597 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 92 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll047" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll047" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 73, + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 9\nInnate Level: 9\nSchool: Conjuration\nDescriptor(s): Air, Earth, Fire, Water\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: Dismissal \nSave: None\nSpell Resistance: None\n\nThe caster summons a 24 HD air elemental to act as a loyal servant until it dies or until the spell expires. If the air elemental dies before the spell ends, a 24 HD water elemental is automatically summoned to replace it. This process continues with an earth and fire elemental until the spell expires. After the fire elemental, no more are summoned.", + "id": 6145 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Elemental Swarm", + "id": 13597 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 94 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll048" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll048" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 74, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: None\nSpell Resistance: None\n\nThe target creature's Constitution is increased by 1d4+1.", + "id": 6146 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Endurance", + "id": 13564 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 95 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll049" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll049" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 75, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1, Druid 1, Paladin 1, Wizard / Sorcerer 1\nInnate Level: 2\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe target creature gains damage resistance 10/- against all elemental forms of damage. The spell ends after absorbing 20 points of damage from any single elemental type.", + "id": 6147 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Endure Elements", + "id": 13538 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 98 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll050" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll050" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 76, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 6, Druid 6, Sorcerer / Wizard 5\nInnate Level: 5\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Turn / Caster Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe caster gains damage resistance 40/- against all elemental forms of damage. The spell ends after absorbing 60 points of damage from any single elemental type.", + "id": 6535 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Energy Buffer", + "id": 13641 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 311 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll369" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll369" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 77, + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 9, Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: Permanent\nAdditional Counter Spells: \nSave: Fortitude Negates\nSpell Resistance: Yes\n\nThe target creature permanently loses 2d4 character levels.", + "id": 6148 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Energy Drain", + "id": 13649 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 99 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll051" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll051" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 78, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 1 Hour / Caster Level\nAdditional Counter Spells:\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nThe target creature temporarily loses 1d4 character levels.", + "id": 6149 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Enervation", + "id": 13593 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 100 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll052" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll052" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 79, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 1, Ranger 1\nInnate Level: 1\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Large\nDuration: 3 + 1 Round / 2 Levels\nAdditional Counter Spells: \nSave: Reflex, Special\nSpell Resistance: Yes\n\nA mass of clinging vegetation wraps around all creatures in the area of effect. Those affected are immobilized, though still able to fight and cast spells. Victims who make a Reflex save still have their movement reduced by half.", + "id": 6150 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Entangle", + "id": 13593 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 102 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll053" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll053" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 80, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1 \nInnate Level: 1\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 turn / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nA magical field appears around the caster, causing any nearby enemies a 20% chance to miss on ranged attacks.", + "id": 521 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Entropic Shield", + "id": 58 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 349 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll418" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll418" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 81, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 5, Wizard / Sorcerer 6\nInnate Level: 5\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe caster is surrounded by a ghostly nimbus of light that grants damage reduction 20/+3, prevents all spells of level 2 or lower from affecting the caster and provides a 25% concealment bonus.", + "id": 6498 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ethereal Visage", + "id": 13619 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 195 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll121" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll121" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 82, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Large, 1d4 Tentacles, + 1 / Caster Level\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Fortitude Special\nSpell Resistance: No\n\nA field of thick, rubbery tentacles rises from the ground. For every round that a creature is caught within the area of effect, it suffers attacks from 1d4 tentacles, each capable of doing 1d6+4 points bludgeoning damage. If any tentacle attack hits a target, that target must then make a Fortitude saving throw or become paralyzed.", + "id": 6542 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Evard's Black Tentacles", + "id": 40582 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 324 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll375" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll375" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 83, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Wizard / Sorcerer 1 \nInnate Level: 1\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster becomes 150% faster than their normal movement rate, allowing them to flee from dangerous encounters. This spell has no effect if the caster is already hasted.", + "id": 2676 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Expeditious Retreat", + "id": 40140 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 387 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll456" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll456" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 84, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 4\nInnate Level: 3\nSchool: Necromancy\nDescriptor(s): Fear, Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect/ Target: Large\nDuration: 1 Round / Level\nAdditional Counter Spells: Remove Fear\nSave: Will Negates\nSpell Resistance: Yes\n\nAffected creatures are consumed with mind-numbing fear that overrides all other actions. The affected creatures run away from all those they do not consider allies.", + "id": 58585 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fear", + "id": 13594 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll054" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll054" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 85, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Divination\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 1 Round / 2 Levels\nAdditional Counter Spells: Heal\nSave: Will Negates\nSpell Resistance: Yes\n\nWith a successful ranged touch attack, the caster does 1d4 points of Intelligence damage to the creature for every 4 caster levels.", + "id": 6152 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Feeblemind", + "id": 13602 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 104 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll055" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll055" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 86, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 2, Wizard / Sorcerer 3\nInnate Level: 2\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nAll traps within the area of effect become known to the caster of this spell and are disarmed.", + "id": 6544 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Find Traps", + "id": 40582 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 327 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll377" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll377" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 87, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 8, Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Necromancy\nDescriptor(s): Death\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Fortitude Partial\nSpell Resistance: Yes\n\nThe target creature must make a Fortitude save or die. If they succeed, they still take 3d6 points of damage, +1 point per caster level.", + "id": 6153 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Finger of Death", + "id": 13632 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 105 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll056" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll056" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 88, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 8, Druid 7\nInnate Level: 7\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nAll enemies within this spell's area of effect are inundated with a rain of fire and take 1d6 points of damage per caster level (to a maximum of 20d6). Half of the damage is divine and the other half is fire-based. ", + "id": 6154 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fire Storm", + "id": 807 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 106 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll057" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll057" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 89, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Large\nArea of Effect / Target: Huge\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nThe caster unleashes a fiery projectile that explodes upon all within the area of effect for 1d6 points of fire damage per caster level, to a maximum of 10d6.", + "id": 6155 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fireball", + "id": 13576 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll058" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll058" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 90, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells:\nSave: Reflex 1/2\nSpell Resistance: Yes\n\nMasses of flame (one per caster level) appear and randomly target and hit any hostile creature in the area of effect. If there are more creatures than balls of flame, only the closest targets will be damaged. If there are more balls of flame than creatures, the excess balls of flame disappear. Each ball of flame explodes for 1d6 points of damage per caster level (max 15d6).", + "id": 1890 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Firebrand", + "id": 1895 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 371 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll440" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll440" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 91, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 3 \nInnate Level: 3\nSchool: Conjuration\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nThe caster launches 1 conjured fiery arrow at the target creature for every 4 caster levels. Each arrow does 4d6 points of damage.", + "id": 6156 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Flame Arrow", + "id": 13571 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 110 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll059" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll059" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 92, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 2 \nInnate Level: 2\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nThe Druid is able to flay an enemy with flaming brands that do 2d6 points of fire damage, + 1d6 per 3 caster levels above level 3.", + "id": 6157 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Flame Lash", + "id": 810 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 113 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll060" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll060" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 93, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 5, Druid 4\nInnate Level: 4\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Medium\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nA pillar of flame engulfs all within the area of effect, inflicting 1d6 points of damage per caster level (to a maximum of 15d6). Half of the damage caused by the spell is divine and the other half is fire-based. Enemies are struck by both damage types, while allies are struck only by the fire damage.", + "id": 6158 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Flame Strike", + "id": 811 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 115 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll061" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll061" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 94, + "AddCost": { + "type": "dword", + "value": 13 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 0, Druid 0, Wizard / Sorcerer 0 \nInnate Level: 0\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal\nRange: Medium\nArea of Effect / Target: Single\nDuration: 10 rounds\nAdditional Counter Spells:\nSave: Fort negates\nSpell Resistance: Yes\n\nA burst of hot light is fired from the caster to one target, making it suffer a -1 penalty to attack rolls.", + "id": 510 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Flare", + "id": 56 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 347 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll416" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll416" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 95, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Permanent*\nAdditional Counter Spells: Stone to flesh\nSave: Fortitude\nSpell Resistance: Yes\n\nThe subject and all possessions it carries turns into a mindless, inert statue. Only a stone to flesh spell can restore the subject to normal.\n* Under Normal difficulty or easier, the duration is one round per caster level. Higher difficulty settings make the petrification permanent. As well, if the caster rests, any creatures turned to stone by him will be restored, as if the stone to flesh spell had been cast upon them.", + "id": 3045 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Flesh to Stone", + "id": 2687 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 398 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll485" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll485" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 96, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells:\nSave: Harmless\nSpell Resistance: No \n\nThe target creature's Intelligence is increased by 1d4+1.", + "id": 6528 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fox's Cunning", + "id": 58582 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 294 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll356" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll356" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 97, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4, Druid 4, Paladin 4, Ranger 4\nInnate Level: 4\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: Web \nSave: None\nSpell Resistance: No\n\nThe target creature becomes immune to paralysis, slow, and entanglement spells and effects.", + "id": 6159 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Freedom of Movement", + "id": 811 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 118 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll062" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll062" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 98, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe caster is surrounded by a ghostly nimbus of light that grants damage reduction 5/+1, prevents all spells of level 1 or lower from affecting the caster, and grants 10% concealment.", + "id": 6217 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ghostly Visage", + "id": 13614 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 192 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll120" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll120" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 99, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1d6 + 2 Rounds\nAdditional Counter Spells: Cure Light Wounds \nSave: Fortitude Negates\nSpell Resistance: Yes\n\nThe caster's hand glows with an unearthly radiance. The target creature must make a Fortitude save or become paralyzed. Creatures paralyzed by this spell emit a noxious cloud that applies a -2 penalty to skills, saving throws, attack and damage rolls to all creatures within 5 feet.", + "id": 6161 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ghoul Touch", + "id": 13614 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 120 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll012" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll012" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 100, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: Greater Globe of Invulnerability, Greater Spell Breach \nSave: None \nSpell Resistance: Yes\n\nA shimmering field of energy prevents all spells of level 4 or lower from affecting the caster.", + "id": 6162 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Globe of Invulnerability", + "id": 13612 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 121 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll065" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll065" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 101, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Druid 1, Ranger 1, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Medium\nDuration: 2 Rounds + 1 / 3 Levels\nAdditional Counter Spells: Freedom of Movement\nSave: Reflex\nSpell Resistance: Yes\n\nA churning field of oil and grease fills the target area, causing all within to either fall down or move at a reduced speed.", + "id": 6163 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Grease", + "id": 13540 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 122 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll066" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll066" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 102, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Druid 2, Paladin 2, Wizard / Sorcerer 2 \nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: Ray of Enfeeblement\nSave: Harmless\nSpell Resistance: No \n\nThe target creature's Strength is increased by 1d4+1.", + "id": 6105 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Bull's Strength", + "id": 13561 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 300 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll360" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll360" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 103, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Provides a bonus of 2d4 +1 to the listed ability score.\nGreater Bull's Strength increases Strength\nGreater Cat's Grace increases Dexterity\nGreater Eagle's Splendor increases Charisma\nGreater Endurance increases Constitution\nGreater Fox's Cunning increases Intelligence\nGreater Owl's Wisdom increases Wisdom", + "id": 61918 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Cat's Grace", + "id": 13561 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 301 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll361" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll361" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 104, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 5, Cleric 6, Druid 6, Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single or Colossal\nDuration: Instant\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nGreater Dispelling attempts to strip all magical effects from a single target. It can also target a group of creatures, attempting to remove the most powerful spell effect from each creature. To remove an effect, the caster makes a dispel check of 1d20, +1 per caster level (to a maximum of +15) against a DC of 11 + the spell effect's caster level.", + "id": 6164 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Dispelling", + "id": 13613 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 123 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll067" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll067" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 105, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Provides a bonus of 2d4 +1 to the listed ability score.\nGreater Bull's Strength increases Strength\nGreater Cat's Grace increases Dexterity\nGreater Eagle's Splendor increases Charisma\nGreater Endurance increases Constitution\nGreater Fox's Cunning increases Intelligence\nGreater Owl's Wisdom increases Wisdom", + "id": 61918 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Eagle Splendor", + "id": 58582 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 297 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll357" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll357" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 106, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Provides a bonus of 2d4 +1 to the listed ability score.\nGreater Bull's Strength increases Strength\nGreater Cat's Grace increases Dexterity\nGreater Eagle's Splendor increases Charisma\nGreater Endurance increases Constitution\nGreater Fox's Cunning increases Intelligence\nGreater Owl's Wisdom increases Wisdom", + "id": 61918 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Endurance", + "id": 13564 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 302 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll362" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll362" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 107, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Provides a bonus of 2d4 +1 to the listed ability score.\nGreater Bull's Strength increases Strength\nGreater Cat's Grace increases Dexterity\nGreater Eagle's Splendor increases Charisma\nGreater Endurance increases Constitution\nGreater Fox's Cunning increases Intelligence\nGreater Owl's Wisdom increases Wisdom", + "id": 61918 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Fox's Cunning", + "id": 58582 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 299 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll359" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll359" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 108, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 3, Ranger 3 \nInnate Level: 3\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 turn / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThis spell strengthens the caster's animal companion, giving it +1 to hit and +1 to damage for every three levels of the caster (maximum of +5). It also grants the creature an enchantment bonus equal to the hit/damage bonus given.", + "id": 2749 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Magic Fang", + "id": 2923 + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 384 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll453" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll453" + }, + "xModelPart1": { + "type": "word", + "value": 2 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 109, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Provides a bonus of 2d4 +1 to the listed ability score.\nGreater Bull's Strength increases Strength\nGreater Cat's Grace increases Dexterity\nGreater Eagle's Splendor increases Charisma\nGreater Endurance increases Constitution\nGreater Fox's Cunning increases Intelligence\nGreater Owl's Wisdom increases Wisdom", + "id": 61918 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Owl's Wisdom", + "id": 58583 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 298 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll358" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll358" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 110, + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Single\nArea of Effect / Target: Single or Point\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Will (-5) Negates\nSpell Resistance: No\n\nThis spell has two modes of operation: targeting a single outsider, or summoning a planar ally. Targeted outsiders are paralyzed for 1 round per 2 caster levels. The type of summoned ally is based on the caster's alignment:\nEvil: Vrock\nNeutral: Death slaad\nGood: Celestial Avenger", + "id": 6166 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Planar Binding", + "id": 13635 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 126 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll069" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll069" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 111, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 7\nInnate Level: 7\nSchool: Necromancy\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nGreater Restoration removes most temporary and all permanent negative effects from the target character, incuding level drain. It does not remove negative mental effects or the effects of reduced movement speed. It also heals the target creature to full Hit Points.", + "id": 6167 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Restoration", + "id": 13663 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 127 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll070" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll070" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 112, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 6, Wizard / Sorcerer 8 \nInnate Level: 7\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 turn / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster becomes ethereal. No other creature can detect the caster. Attacking or performing a hostile action will make the etherealness vanish.", + "id": 2371 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Sanctuary", + "id": 2364 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 374 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll443" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll443" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 113, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Special\n\nAllows the caster to conjure a shadow variant of one of the following spells: Summon Shadow, Melf's Acid Arrow, Ghostly Visage, Web, or Minor Globe of Invulnerability.", + "id": 6168 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Shadow Conjunction", + "id": 13606 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 128 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll349" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll349" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 114, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Globe of Invulnerability, Greater Spell Mantle\nSave: None\nSpell Resistance: No\n\nThis spell strips an enemy mage of up to four magical defenses, including Spell Mantle, Globes of Invulnerability, Stoneskins, Premonition, Protection from Elements, Ghostly and Ethereal Visage, Mage Armor, Shadow Shield and Elemental Shield. This spell will also lower the target creatures SR rating by 5 for ten rounds.", + "id": 6169 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Spell Breach", + "id": 13623 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 129 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll072" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll072" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 115, + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: Greater Spell Breach \nSave: None\nSpell Resistance: No\n\nCreates a barrier around the caster that absorbs all incoming spells. It can absorb up to 1d12+10 levels of spells before collapsing. ", + "id": 6170 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Spell Mantle", + "id": 13653 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 130 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scoll073" + }, + "TemplateResRef": { + "type": "resref", + "value": "scoll073" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 116, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 6, Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nGrants the caster a damage reduction of 20/+5. The spell absorbs 10 points of melee damage per caster level, to a maximum of 150, before fading.", + "id": 6171 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Stoneskin", + "id": 13624 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 131 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll074" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll074" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 117, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 3 \nInnate Level: 3\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: Instant\nAdditional Counter Spells:\nSave: Fortitude negates\nSpell Resistance: Yes\n\nThis spell creates a blast of air that knocks down any creatures failing their saving throws. It is also powerful enough to disperse any area of effect spells (such as cloudkill) that are in the path of the wind gust.", + "id": 2681 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gust of Wind", + "id": 2682 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 410 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll075" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll075" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 118, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4\nInnate Level: 4\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: Instant\nAdditional Counter Spells: \nSave: Will Partial\nSpell Resistance: Yes \n\nThe caster smites a group of enemies with divine light for 1d8 points of damage for every two caster levels, to a maximum of 5d8. Enemies who fail a Will save are also dazed for 1 to 6 rounds.", + "id": 6173 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hammer of the Gods", + "id": 2682 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 133 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll076" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll076" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 119, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 6, Druid 7\nInnate Level: 6\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Heal\nSave: None\nSpell Resistance: Yes\n\nIf the caster makes a successful melee touch attack, Harm uses negative energy to reduce the target creature to 1d4 Hit Points. This spell has a reverse effect on undead, healing the targeted undead to full health instead of harming it.", + "id": 6174 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Harm", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 136 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll077" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll077" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 120, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 1 Round / Level\nAdditional Counter Spells: Slow \nSave: Harmless\nSpell Resistance: No\n\nThe target of this spell gains, +4 bonus to dodge AC, 1 extra action per round (allowing an additional attack or spell to be cast) and has their movement increased by 50%.", + "id": 6175 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Haste", + "id": 13579 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 137 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll078" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll078" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 121, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 6, Druid 7\nInnate Level: 6\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Harm\nSave: None\nSpell Resistance: Yes\n\nThe target of Heal is restored to full Hit Points. Healing spells have a reverse effect when used on undead, harming instead of healing them (undead are reduced to 1d4 Hit Points with this spell). A successful touch attack must first be made when this spell is used against undead.", + "id": 6176 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heal", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 139 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll079" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll079" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 122, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 5, Cleric 5, Druid 6\nInnate Level: 5\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Medium\nDuration: Instant\nAdditional Counter Spells: Circle of Doom\nSave: Fortitude 1/2\nSpell Resistance: Yes\n\nAll friendly creatures within the area of effect are healed for 1d8 Hit Points, +1 point per caster level. Healing spells have a reverse effect when used on undead, harming instead of healing them.", + "id": 6177 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Healing Circle", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 140 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll080" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll080" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 123, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 2, Ranger 2\nInnate Level: 2\nSchool: Enchantment\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 1 Round / Level\nAdditional Counter Spells: Freedom of Movement \nSave: Will (-4) Negates\nSpell Resistance: Yes\n\nThe target animal is paralyzed for the duration of the spell.", + "id": 6178 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hold Animal", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 142 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll081" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll081" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 124, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4, Druid 4, Wizard / Sorcerer 5\nInnate Level: 4\nSchool: Enchantment\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 1 Round / Level\nAdditional Counter Spells: Freedom of Movement\nSave: Will Negates\nSpell Resistance: Yes\n\nThe target monster is paralyzed for the duration of the spell.", + "id": 6179 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hold Monster", + "id": 13603 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 143 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll082" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll082" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 125, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Wizard / Sorcerer 3\nInnate Level: 2\nSchool: Enchantment\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 1 Round / Level\nAdditional Counter Spells: Freedom of Movement\nSave: Will Negates\nSpell Resistance: Yes\n\nThe target humanoid is paralyzed for the duration of the spell.", + "id": 6180 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hold Person", + "id": 13575 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 144 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll083" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll083" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 126, + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Necromancy\nDescriptor(s): Death\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: Fortitude 1/2\nSpell Resistance: Yes\n\nAll creatures within the area of effect take 1d8 points of withering energy damage per caster level, to a maximum of 25d8.", + "id": 6533 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horrid Wilting", + "id": 13641 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 308 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll367" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll367" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 127, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 6, Druid 5, Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Evocation\nDescriptor(s): Cold\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Huge\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: Yes\n\nAll creatures in the area of effect take 3d6 points of bludgeoning damage and 2d6 points of cold damage. Ice Storm will do an additional 1d6 cold damage per additional 3 caster levels.", + "id": 6534 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ice Storm", + "id": 13641 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 310 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll368" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll368" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 128, + "AddCost": { + "type": "dword", + "value": 125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 2 Rounds\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: \n\nOver the next two rounds, the caster gains a bonus of 10 +1 per caster level to their Lore skill.", + "id": 6183 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Identify", + "id": 13543 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 147 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll086" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll086" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 129, + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 9\nInnate Level: 9\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Medium\nDuration: Instant\nAdditional Counter Spells: \nSave: Fortitude Negates\nSpell Resistance: Yes\n\nThe caster creates a vortex of destruction that tears asunder all living things within its area of effect, killing them instantly unless they make their saving throw.", + "id": 6184 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Implosion", + "id": 13543 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 148 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll086" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll087" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 130, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4, Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: Invisibility Purge\nSave: Harmless\nSpell Resistance: No\n\nThe target creature becomes invisible and impossible to detect using normal vision. After attacking or casting spells the target creature will become partially visible and detectable by enemies, but still retain a 50% cover bonus.", + "id": 6185 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Improved Invisibility", + "id": 13589 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 149 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll088" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll088" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 131, + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Large\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nThe caster creates a cloud of smoke and embers that causes 4d6 points of fire damage each round to all creatures within the area of effect.", + "id": 6186 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Incendiary Cloud", + "id": 13636 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 150 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll089" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll089" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 132, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 5 \nInnate Level: 5\nSchool: Transmutation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nThe caster causes a target to ignite into flame. Each round the target will suffer 2d6 points of fire damage.", + "id": 2374 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Inferno", + "id": 2368 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 377 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll446" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll446" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 133, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4\nInnate Level: 4\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Cure Critical Wounds\nSave: Will 1/2\nSpell Resistance: Yes\n\nIf the caster succeeds in striking an opponent with a touch attack, the target suffers 4d8 points of damage, + 1 point per caster level to a maximum of +20. Inflict spells have a reverse effect when used on undead, causing the targeted undead to take an amount of healing equal to what the spell normally damages.", + "id": 1585 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Inflict Critical Wounds", + "id": 392 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 366 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll435" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll435" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 134, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1\nInnate Level: 1\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Cure Light Wounds\nSave: Will 1/2\nSpell Resistance: Yes\n\nIf the caster succeeds in striking an opponent with a touch attack, the target suffers 1d8 points of damage, + 1 point per caster level to a maximum of +5. Inflict spells have a reverse effect when used on undead, causing the targeted undead to take an amount of healing equal to what the spell normally damages.", + "id": 1571 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Inflict Light Wounds", + "id": 389 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 363 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll432" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll432" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 135, + "AddCost": { + "type": "dword", + "value": 13 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 0\nInnate Level: 0\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Cure Minor Wounds\nSave: Will 1/2\nSpell Resistance: Yes\n\nIf the caster succeeds in striking an opponent with a touch attack, the target suffers 1 point of damage. Inflict spells have a reverse effect when used on undead, causing the targeted undead to take an amount of healing equal to what the spell normally damages.", + "id": 1570 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Inflict Minor Wounds", + "id": 388 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 362 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll431" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll431" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 136, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 2\nInnate Level: 2\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Cure Moderate Wounds\nSave: Will 1/2\nSpell Resistance: Yes\n\nIf the caster succeeds in striking an opponent with a touch attack, the target suffers 2d8 points of damage, + 1 point per caster level to a maximum of +10. Inflict spells have a reverse effect when used on undead, causing the targeted undead to take an amount of healing equal to what the spell normally damages.", + "id": 1574 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Inflict Moderate Wounds", + "id": 390 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 364 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll433" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll433" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 137, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3\nInnate Level: 3\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Cure Serious Wounds\nSave: Will 1/2\nSpell Resistance: Yes\n\nIf the caster succeeds in striking an opponent with a touch attack, the target suffers 3d8 points of damage, + 1 point per caster level to a maximum of +15. Inflict spells have a reverse effect when used on undead, causing the targeted undead to take an amount of healing equal to what the spell normally damages.", + "id": 1575 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Inflict Serious Wounds", + "id": 391 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 365 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll434" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll434" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 138, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: See Invisibility\nSave: Harmless\nSpell Resistance: No\n\nThe target creature becomes invisible and impossible to detect using normal vision. Any attack or spellcasting action taken by the invisible creature will immediately cancel the invisibility.", + "id": 6187 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Invisibility", + "id": 13556 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 151 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll090" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll090" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 139, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3, Ranger 3\nInnate Level: 3\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: 1 Turn / Level\nAdditional Counter Spells: Invisibility\nSave: None\nSpell Resistance: No\n\nThis spell removes the invisibility from all invisible creatures and items.", + "id": 6188 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Invisibility Purge", + "id": 13556 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 152 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll091" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll091" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 140, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster, 15ft Radius\nDuration: 1 Turn / Level\nAdditional Counter Spells: Invisibility Purge\nSave: Harmless\nSpell Resistance: No\n\nThe caster brings into being a zone of invisibility that travels with him for the duration of the spell. All allies within the spell's area of effect are rendered invisible, but not to each other. Those that leave the sphere are visible once more.", + "id": 6189 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Invisibility Sphere", + "id": 13581 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 153 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll092" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll092" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 141, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2377 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6 \nInnate Level: 6\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Gargantuan\nDuration: Instant\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nA number of energy missiles (one per caster level but to a maximum of 20) appear and randomly target and hit any hostile creature in the area of effect. If there are more creatures than missiles, only the closest targets will be damaged. If there are more missiles than creatures, one of the creatures will be hit with multiple missiles. Each missile does 2d6 points of damage.", + "id": 2376 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Isaac's Greater Missile Storm", + "id": 66671 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 379 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll448" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll448" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 142, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4 \nInnate Level: 4\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Gargantuan\nDuration: Instant\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nA number of energy missiles (one per caster level but to a maximum of 10) appear and randomly target and hit any hostile creature in the area of effect. If there are more creatures than missiles, only the closest targets will be damaged. If there are more missiles than creatures, one of the creatures will be hit with multiple missiles. Each missile does 1d6 points of damage.", + "id": 2375 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Isaac's Lesser Missile Storm", + "id": 2377 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 378 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll447" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll447" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 143, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 216 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThis spell will unlock doors and containers sealed by conventional locks in a 150ft radius around the caster. Exceptionally complex locking mechanisms or magically sealed doors and containers are beyond the abilities of this spell.", + "id": 6190 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Knock", + "id": 13565 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 154 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll093" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll093" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 144, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4, Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThis spell grants the caster a +10 bonus to Lore checks, +1 per 2 caster levels.", + "id": 6543 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Legend Lore", + "id": 40582 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 326 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll376" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll376" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 145, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Cleric 2, Druid 2, Wizard / Sorcerer 2\nInnate Level: 1\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Somatic\nRange: Medium\nArea of Effect / Target: Single or Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: No\nSpell Resistance: Yes\n\nThis spell attempts to strip all magical effects from a single target. It can also target a group of creatures, attempting to remove the most powerful spell effect from each creature. To remove an effect from a creature the caster makes a dispel check of 1d20, +1 per caster level (to a maximum of +5) against a DC of 11 + the spell effect's caster level.", + "id": 6191 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Dispel", + "id": 13567 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 155 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll094" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll094" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 146, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: Confusion\nSave: Harmless\nSpell Resistance: No\n\nThis spell renders the target creature immune to mind-affecting spells and spell-like effects, and removes all negative effects caused by such spells.", + "id": 6192 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Mind Blank", + "id": 13609 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 157 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll095" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll095" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 147, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single or Point\nDuration: 1 Round / 2 Levels\nAdditional Counter Spells: Dismissal\nSave: Will Negates\nSpell Resistance: No\n\nThis spell has two modes of operation: targeting a single outsider, or summoning a planar ally. Targeted outsiders are paralyzed for 1 round per 2 caster levels. The type of summoned ally is based on the caster's alignment:\nEvil: Imp\nNeutral: Red slaad\nGood: Lantern archon", + "id": 6193 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Planar Binding", + "id": 13610 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 158 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll096" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll096" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 148, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 2, Druid 2\nInnate Level: 2\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Ghoul Touch\nSave: Harmless\nSpell Resistance: No\n\nRemoves all magical, extraordinary, and supernatural effects that apply a penalty to ability scores, AC, attack and damage rolls, spell resistance, and saving throws. Will not remove the effects of a curse or a disease.", + "id": 6194 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Restoration", + "id": 13654 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 159 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll097" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll097" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 149, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Special\nAdditional Counter Spells: Minor Globe of Invulnerability, Lesser Spell Mantle\nSave: None\nSpell Resistance: No\n\nThis spell strips an enemy mage of up to two magical defenses, including Spell Mantles, Globes of Invulnerability, Stoneskins, Premonition, Protection from Elements, Ghostly and Ethereal Visage, Mage Armor, Shadow Shield and Elemental Shield. This spell will also reduce the target creature's SR by 3 for ten rounds.", + "id": 6195 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Spell Breach", + "id": 13598 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 160 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll098" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll098" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 150, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: Lesser Spell Breach, Lesser Spell Mantle\nSave: Harmless\nSpell Resistance: No\n\nCreates a barrier around the caster that absorbs all incoming spells and spell-like abilities. It can absorb up to 1d4+6 levels of spells before collapsing.", + "id": 6196 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Spell Mantle", + "id": 13611 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 161 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll099" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll099" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 151, + "AddCost": { + "type": "dword", + "value": 13 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 0, Cleric 0, Druid 0, Wizard / Sorcerer 0\nInnate Level: 0\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: Darkness\nSave: Harmless\nSpell Resistance: No\n\nCreates a small light source above the target creature's head. The light travels with the target and is capable of illuminating a small area.", + "id": 6197 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light", + "id": 13537 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 162 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll100" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll100" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 152, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Evocation\nDescriptor(s): Electricity\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Chain of targets in a straight line\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nThe caster fires a bolt of lightning that passes through all creatures in a straight line from the caster. The bolt does 1d6 points of electricity damage per caster level, to a maximum of 10d6.", + "id": 6198 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lightning Bolt", + "id": 13537 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 164 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll101" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll101" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 153, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Conjuration\nDescriptor(s): Force\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe selected target gains the following bonuses to his AC: +1 natural armor, +1 dodge, +1 deflection, and +1 enhancement. The dodge bonus stacks with other dodge bonuses to AC, but the other bonuses do not stack with bonuses of the same type.", + "id": 6199 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mage Armor", + "id": 13541 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 167 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll102" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll102" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 154, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Paladin 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single, Medium\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nWhen this spell is cast, the caster chooses to be protected from either good or evil. The spell target and all allies within 10 feet receive a +2 deflection bonus to Armor Class, +2 to all saving throws, and immunity to any mind-affecting spells and spell-like abilities used by creatures of the chosen alignment.", + "id": 6494 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Magic Circle against Alignment", + "id": 13569 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 286 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll103" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll103" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 155, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 1, Ranger 1 \nInnate Level: 1\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 turn / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThis spell strengthens the caster's animal companion, giving it +1 to hit and +1 to damage. It also grants the creature the ability to strike as if it were a +1 weapon (so it can bypass other creature's damage reduction).", + "id": 2669 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Magic Fang", + "id": 2670 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 383 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll452" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll452" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 156, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Evocation\nDescriptor(s): Force\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: Yes\n\nThe caster creates a shimmering projectile of magical force that unerringly slams into a single selected target. After level 1, the spell creates 1 additional missile every two caster levels, to a maximum of 5 missiles at level 9. Magic missiles do 1D4+1 points of damage each.\n", + "id": 6204 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Magic Missile", + "id": 13546 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 172 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll107" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll107" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 157, + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Medium\nDuration: 1 Round / Level\nAdditional Counter Spells: Remove Blindness / Deafness\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nAll enemies within a 10-ft radius are struck blind and deaf.", + "id": 6207 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Blindness / Deafness", + "id": 13639 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 179 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll110" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll110" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 158, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 4, Ranger 4 \nInnate Level: 4\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Colossal\nDuration: 1 hour / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nAll allies in the area of effect gain a +10 bonus to their hide skill.", + "id": 2673 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Camouflage", + "id": 2674 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 386 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll455" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll455" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 159, + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal\nRange: Short\nArea of Effect / Target: Large\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Will Negates\nSpell Resistance: Yes\n\nIn the eyes of all non-allied creatures within the area of affect, the personal reputation of the caster is improved by 50%. The caster can charm up to twice his hit dice in creatures.", + "id": 6208 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Charm", + "id": 13638 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 180 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll111" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll111" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 160, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 6, Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Enchantment\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Large\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nAll allies within the area of effect gain 1 extra action per round (allowing an additional attack or spell casting) and have their movement speed increased by 50%. ", + "id": 6210 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Haste", + "id": 13622 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 182 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll113" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll113" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 161, + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 8, Druid 9\nInnate Level: 8\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Large\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: Yes\n\nAll allies within the area of effect are restored to full Hit Points. Healing spells have a reverse effect on undead, harming instead of healing them (undead are reduced to 1d4 Hit Points with this spell).", + "id": 6211 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Heal", + "id": 13622 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 183 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll114" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll114" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 162, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Conjuration\nDescriptor(s): Acid\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Single\nDuration: 1 Round, + 1 Round / 3 Levels\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nThe caster targets a single creature with an acid bolt. The initial damage from the spell is 3d6, +1d6 every round until the spell expires.", + "id": 6212 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Melf's Acid Arrow", + "id": 13551 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 184 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll115" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll115" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 163, + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nThe spell causes everything within the area of effect to be pummeled by incoming meteors. All those caught in the destruction take 20d6 points of damage. All creatures within 5 feet of the caster are protected from the spell's effect.", + "id": 6213 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Meteor Swarm", + "id": 13647 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 187 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll116" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll116" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 164, + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Huge\nDuration: 1 Turn / Level\nAdditional Counter Spells: Mass Charm\nSave: Harmless\nSpell Resistance: No\n\nThis spell renders all allies within the area of effect immune to mind-affecting spells and effects. All negative mind-affecting effects are also removed from the target creatures.", + "id": 6214 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mind Blank", + "id": 13633 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 188 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll117" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll117" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 165, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 5, Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Colossal\nDuration: 2 Rounds + 1 / 2 Levels\nAdditional Counter Spells: \nSave: Will Negates\nSpell Resistance: Yes\n\nThis spell creates a bank of blue fog that saps the will of all those who enter it. Victims take a -10 penalty on Will saving throws against mind-affecting spells and effects. This penalty persists for as long as the creature remains in the fog and for an additional 2d6 rounds upon leaving.", + "id": 6215 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mind Fog", + "id": 13604 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 189 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll118" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll118" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 166, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard/Sorcerer 4\nInnate Level: 4\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nA shimmering field of energy prevents all spells of level 3 or lower from affecting the caster.", + "id": 6216 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Minor Globe of Invulnerability", + "id": 13582 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 190 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll119" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll119" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 167, + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal\nRange: Medium\nArea of Effect / Target: Single or Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nMordenkainen's Disjunction attempts to strip all magical effects from a single target. It can also target a group of creatures, attempting to remove the two most powerful spell effects from each creature. To remove an effect, the caster makes a dispel check of 1d20, +1 per caster level (to a maximum of +20) against a DC of 11 + the spell effect's caster level. In addition to its ability to dispel effects, this spell also strips a single enemy of up to 6 magical defenses or a group of enemies of two spell protections each. Finally, the spell will lower the SR of all creatures within the area of effect by 10.\n\nAffected spells include: Spell Mantles, Globes of Invulnerability, Stoneskins, Premonition, Protection from Elements, Ghostly and Ethereal Visage, Mage Armor, Shadow Shield and Elemental Shield.", + "id": 6219 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mordenkainen's Disjunction", + "id": 13642 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 197 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll122" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll122" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 168, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a powerful, sword-wielding helmed horror that acts as a faithful and loyal servant.", + "id": 6220 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mordenkainen's Sword", + "id": 13629 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 198 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll123" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll123" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 169, + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 8\nInnate Level: 8\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Large\nDuration: Instant\nAdditional Counter Spells:\nSave: Will Negates\nSpell Resistance: No\n\nAll enemies within the area of effect have their spell resistance lowered by 1d4 for every 5 caster levels. All allies within the area of effect are healed for 3d6 Hit Points, +1 point per caster level.", + "id": 6221 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Nature's Balance", + "id": 13629 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 200 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll124" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll124" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 170, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: Instant\nAdditional Counter Spells: Negative Energy Protection\nSave: Will 1/2\nSpell Resistance: Yes\n\nAll creatures caught in the area of effect take 1d8 points of negative energy damage, +1 per caster level, to a maximum of +20. All creatures caught in the area also lose 1 point of strength per 4 caster levels. Negative energy spells have a reverse effect on undead, healing instead of harming them.", + "id": 6536 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Negative Energy Burst", + "id": 58584 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 314 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll370" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll370" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 171, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3\nInnate Level: 3\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe target creature is rendered immune to all negative energy attacks, including supernatural ability damage and level drains.", + "id": 6222 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Negative Energy Protection", + "id": 13629 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 201 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll125" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll125" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 172, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 2, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Will 1/2\nSpell Resistance: Yes\n\nA ray of negative energy slams into the target creature, doing 1d6 points of damage. After level 1, the spell does an additional 1d6 points of damage for every 2 caster levels, to a maximum of 5d6 at level 9. Negative energy spells have a reverse effect on undead, healing instead of harming them.", + "id": 6537 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Negative Energy Ray", + "id": 58579 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 316 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll371" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll371" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 173, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4, Cleric 4, Druid 3, Paladin 4, Ranger 3\nInnate Level: 3\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Poison\nSave: Harmless\nSpell Resistance: No\n\nA target creature has all traces of poison removed from their system.", + "id": 6223 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Neutralize Poison", + "id": 13661 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 204 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll126" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll126" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 174, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 2, Ranger 2 \nInnate Level: 2\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 hour / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster forges a strong link with nature, gaining a +4 competence bonus to Animal Empathy, Hide, Move Silently, and Set Trap skills.", + "id": 1011 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "One with the Land", + "id": 283 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 351 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll420" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll420" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 175, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells:\nSave: Harmless\nSpell Resistance: No \n\nThe target creature's Wisdom is increased by 1d4+1.", + "id": 6527 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Owl's Wisdom", + "id": 58583 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 291 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll355" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll355" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 176, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Illusion\nDescriptor(s): Fear, Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: True Seeing\nSave: Will and Fortitude\nSpell Resistance: Yes\n\nThe caster conjures an image of utmost horror to strike down a single creature. The target may attempt a Will save to disbelieve the spell, avoiding all ill effects. Failing that, the target then makes a Fortitude save to avoid instant death. A successful save still inflicts 3d6 points of damage.", + "id": 6500 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Phantasmal Killer", + "id": 13590 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 205 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll127" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll127" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 177, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 6\nInnate Level: 6\nSchool: Conjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 hour / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nAn Outsider is summoned to assist the caster. The type of Outsider varies with the caster's alignment.", + "id": 2668 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Planar Ally", + "id": 2667 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 382 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll451" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll451" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 178, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single or Point\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Will (-2) Negates\nSpell Resistance: No\n\nThis spell has two modes of operation: targeting a single outsider, or summoning a planar ally. Targeted outsiders are paralyzed for 1 round per 2 caster levels. The type of summoned ally is based on the caster's alignment:\nEvil: Succubus\nNeutral: Green slaad\nGood: Hound archon", + "id": 6501 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Planar Binding", + "id": 13615 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 206 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll128" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll128" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 179, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4, Druid 3\nInnate Level: 3\nSchool: Necromancy\nDescriptor(s): Poison\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Neutralize Poison\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nIf the caster succeeds at a melee touch attack, the target must make a Fortitude save or suffer the effects of large scorpion venom (1d6 Strength damage on primary and secondary hits).", + "id": 6502 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Poison", + "id": 13615 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 207 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll129" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll129" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 180, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Ranger 4, Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe caster is able to turn himself into one of the following forms:\nGiant spider\nTroll\nUmber hulk\nPixie\nZombie", + "id": 6224 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Polymorph Self", + "id": 13596 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 208 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll130" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll130" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 181, + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Divination\nDescriptor(s): Death\nComponent(s): Verbal\nRange: Short\nArea of Effect / Target: Large, Single\nDuration: Instant\nAdditional Counter Spells: Death Ward\nSave: None\nSpell Resistance: Yes\n\nThis spell may be cast on a single creature or as an area effect. A targeted creature of up to 100 Hit Points is killed instantly. As an area effect, this spell will kill all creatures with fewer than 20 Hit Points, to a maximum total of 200 Hit Points.", + "id": 6225 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Power Word, Kill", + "id": 13644 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 209 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll131" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll131" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 182, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal\nRange: Short\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Clarity\nSave: None\nSpell Resistance: Yes\n\nAutomatically stuns a single target for a duration based on the target's Hit Points:\nUnder 50 Hit Points: 4d4 rounds\n51-100 Hit Points: 2d4 rounds\n101-150 Hit Points: 1d4 rounds", + "id": 6226 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Power Word, Stun", + "id": 13626 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 210 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll132" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll132" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 183, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3, Paladin 3\nInnate Level: 3\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster, Colossal\nDuration: 1 Round / Level\nAdditional Counter Spells: Bestow Curse\nSave: Harmless\nSpell Resistance: Yes\n\nAll allies within the area of effect gain +1 to attack and damage rolls, skill checks, and saving throws. Enemies receive -1 penalties to the same.", + "id": 6227 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Prayer", + "id": 13615 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 211 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll133" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll133" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 184, + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 8, Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Hour / Level\nAdditional Counter Spells: Feeblemind\nSave: Harmless\nSpell Resistance: No\n\nPremonition allows the caster to see a few moments into the future. This grants him damage reduction 30/+5, and absorbs 10 points of melee damage per caster level before collapsing.", + "id": 6228 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Premonition", + "id": 13615 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 212 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll134" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll134" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 185, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Evocation\nDescriptor(s): Special\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Spell Cone\nDuration: Instant\nAdditional Counter Spells:\nSave: Special\nSpell Resistance: Yes\n\nAll creatures within the area of effect randomly experience 1 or 2 of the following effects:\n20 fire damage\n40 acid damage\n80 electrical damage\nStruck with Bebilith Venom poison\nParalyzed for 10 rounds\nConfused for 10 rounds\nStruck dead", + "id": 6229 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Prismatic Spray", + "id": 13630 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 213 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll135" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll135" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 186, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Cleric 1, Paladin 1, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nWhen this spell is cast, the caster chooses a target to be protected from either good or evil. The target receives a +2 deflection bonus to Armor Class, +2 to all saving throws, and immunity to any mind-affecting spells and spell-like abilities used by creatures of the chosen alignment.", + "id": 6791 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Alignment", + "id": 13539 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 284 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll136" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll136" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 187, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3, Druid 3, Ranger 2, Wizard / Sorcerer 3\nInnate Level: 2\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe target creature gains damage resistance 30/- against all elemental forms of damage. The spell ends after absorbing 40 points of damage from any single elemental type.", + "id": 6505 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Elements", + "id": 13570 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 216 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll137" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll137" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 188, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Enchantment\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Large, 1 Creature / 4 Levels\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nWithin the area of effect, up to one ally per 4 caster levels receives a +8 bonus on all saving throws against spells.", + "id": 6235 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Spells", + "id": 13634 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 224 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll141" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll141" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 189, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 3 \nInnate Level: 3\nSchool: Transmutation\nDescriptor(s): Poison\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells:\nSave: Fortitude Negates (poison only)\nSpell Resistance: No\n\nThe caster throws poisonous quills at a target, doing 1d8 points of damage (+1 per 2 levels of the caster - max +5), plus inflicting Scorpion Venom on the target if they fail a Fortitude save.", + "id": 1814 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quillfire", + "id": 1773 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 356 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll425" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll425" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 190, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 5\nInnate Level: 5\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nReturns one target corpse to life. The raised character returns to life with only 1 Hit Point.", + "id": 6236 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Raise Dead", + "id": 13615 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 226 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll142" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll142" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 191, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Necromancy\nDescriptor(s): Death\nComponent(s): Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 1 Round / Level\nAdditional Counter Spells: Bull's Strength\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nThe target creature takes 1d6 Strength damage, plus 1 per 2 caster levels, to a maximum of 11 damage.", + "id": 6237 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ray of Enfeeblement", + "id": 13548 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 227 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll143" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll143" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 192, + "AddCost": { + "type": "dword", + "value": 8 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 0\nInnate Level: 0\nSchool: Conjuration\nDescriptor(s): Cold\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: Yes\n\nDoes 1d4 + 1 cold damage to a single target creature.", + "id": 6238 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ray of Frost", + "id": 13535 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll144" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll144" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 193, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 7, Druid 6\nInnate Level: 7\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Round / Caster Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nFor the duration of the spell, the target creature gains the ability to regenerate 6 Hit Points every round.", + "id": 6541 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Regenerate", + "id": 58579 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 323 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll374" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll374" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 194, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3, Paladin 3, Wizard / Sorcerer 4\nInnate Level: 3\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Medium\nDuration: Instant\nAdditional Counter Spells: Blindness / Deafness\nSave: Harmless\nSpell Resistance: No\n\nAll allies within the area of effect are cured of blindness and deafness.", + "id": 6239 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Remove Blindness / Deafness", + "id": 13658 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 229 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll145" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll145" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 195, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Wizard / Sorcerer 4\nInnate Level: 3\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nAll curses and curse effects are removed from the target creature.", + "id": 6240 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Remove Curse", + "id": 13583 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 230 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll146" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll146" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 196, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Druid 3, Ranger 3\nInnate Level: 3\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Contagion\nSave: Harmless\nSpell Resistance: No\n\nAll diseases and disease effects are removed from the target creature.", + "id": 6241 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Remove Disease", + "id": 13659 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 231 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll147" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll147" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 197, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1\nInnate Level: 1\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Large, 1 Creature / 4 Levels\nDuration: 10 Turns\nAdditional Counter Spells: Fear\nSave: Harmless\nSpell Resistance: No\n\nAll fear effects are removed from allies within the area of effect. The targets also gain a +4 bonus to saving throws against fear spells and effects for the duration of the spell.", + "id": 6242 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Remove Fear", + "id": 13659 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 232 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll148" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll148" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 198, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 2, Paladin 2\nInnate Level: 2\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Large, 1 Creature / 4 Levels\nDuration: Instant\nAdditional Counter Spells: Hold Person\nSave: Harmless\nSpell Resistance: No\n\nAll paralysis and hold effects are removed from allies within the area of effect.", + "id": 6243 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Remove Paralysis", + "id": 13659 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 233 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll149" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll149" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 199, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 2, Druid 2, Paladin 2, Ranger 1, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe target creature gains damage resistance 20/- against all elemental forms of damage. The spell ends after absorbing 30 points of damage from any single elemental type.", + "id": 6507 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Resist Elements", + "id": 13550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 234 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll150" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll150" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 200, + "AddCost": { + "type": "dword", + "value": 13 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 0, Cleric 0, Druid 0, Paladin 1, Wizard / Sorcerer 0\nInnate Level: 0\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 2 Turns\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nGrants the target creature a +1 bonus to all saving throws.", + "id": 6245 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Resistance", + "id": 13534 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 236 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll151" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll151" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 201, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4\nInnate Level: 4\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nRemoves all magical, extraordinary and supernatural effects that apply a penalty to ability scores, Armor Class, attack and damage rolls, spell resistance, saving throws and damage immunity. This spell also removes all level drain, blindness and deafness effects. Will not remove the effects of a curse or a disease.", + "id": 6246 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Restoration", + "id": 13660 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 238 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll152" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll152" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 202, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 7\nInnate Level: 7\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nReturns a single target corpse to life with full Hit Points.", + "id": 6247 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Resurrection", + "id": 13664 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 239 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll153" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll153" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 203, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1\nInnate Level: 1\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Round / Level\nAdditional Counter Spells:\nSave: Will Negates\nSpell Resistance: No\n\nThe caster's or the person's, touched by the caster, presence is completely ignored by nearby creatures for the duration of the spell.", + "id": 6248 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sanctuary", + "id": 13664 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 240 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll154" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll154" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 204, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Cleric 1, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Necromancy\nDescriptor(s): Fear, Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 1d4 Rounds\nAdditional Counter Spells: Remove Fear\nSave: Will Negates\nSpell Resistance: Yes\n\nA target creature with 5 Hit Dice or less is afflicted with fear and suffers a -2 morale check to attack, damage and saving rolls.", + "id": 6508 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scare", + "id": 13559 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 241 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll155" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll155" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 205, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3\nInnate Level: 3\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: Yes\n\nThe caster directs a beam of white-hot light at a single target. The damage is based on the target's racial type:\nUndead: 1d8 per caster level, to a maximum of 10d8\nConstruct: 1d6 for every 2 caster levels, to a maximum of 5d6\nOther: 1d8 per 2 caster levels, to a maximum of 5d8", + "id": 6249 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Searing Light", + "id": 13559 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 242 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll156" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll156" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 206, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Wizard / Sorcerer 2 \nInnate Level: 2\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe target creature is able to see all invisible creatures within his line of sight.", + "id": 6250 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "See Invisibility", + "id": 13554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 243 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll157" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll157" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 207, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Yes\n\nThe caster conjures a shadow variant of one of the following spells: Cone of Cold, Fireball, Stoneskin, Wall of Fire, or Summon Shadow.", + "id": 6251 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shades", + "id": 13620 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 244 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll324" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll324" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 208, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Yes\n\nThe caster conjures a shadow variant of one of the following spells: Darkness, Invisibility, Mage Armor, Magic Missile, or Summon Shadow.", + "id": 6252 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shadow Conjuration", + "id": 13591 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 245 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll344" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll344" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 209, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe caster is shrouded in a cloak of shadow that protects them with the following effects:\n+5 natural AC bonus\n10 / +3 Damage reduction\nImmunity to instant death effects\nImmunity to Necromancy spells", + "id": 6253 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shadow Shield", + "id": 13554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 246 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll160" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll160" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 210, + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 9, Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe caster is temporarily transformed into one of several fearsome creatures of destruction. Possible forms include: Red Dragon, Fire Giant, Balor, Death Slaad, or Iron Golem.", + "id": 6254 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shapechange", + "id": 13651 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 247 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll161" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll161" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 211, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 turn / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster gains a +4 bonus to AC. As well, the caster is immune to the spell magic missile for the duration of the shield.", + "id": 513 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shield", + "id": 57 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 348 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll417" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll417" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 212, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1\nInnate Level: 1\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 turn / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe target gains a +2 deflection bonus to their armor class, with an additional +1 bonus for every six levels of the caster (maximum of +5).", + "id": 2665 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shield of Faith", + "id": 2666 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 381 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll450" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll450" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 213, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2\nInnate Level: 2\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Large, Single\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Will Negates\nSpell Resistance: Yes\n\nCreates a zone of silence around the target creature, preventing all within the area of effect from casting spells with verbal components. If cast on an ally, no saving throws or spell resistance checks are necessary.", + "id": 6256 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Silence", + "id": 13656 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 249 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll163" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll163" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 214, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 5, Druid 5\nInnate Level: 5\nSchool: Necromancy\nDescriptor(s): Death, Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Death Ward\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nThe target must make a Fortitude save or die. Even if the saving throw is successful, the target takes 3d6 points of negative energy damage, +1 point per caster level.", + "id": 6257 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Slay Living", + "id": 13656 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 250 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll164" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll164" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 215, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Druid 1, Ranger 2, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: 3 Rounds + 1 / Caster Level\nAdditional Counter Spells: Clarity\nSave: Will Negates\nSpell Resistance: Yes\n\nCauses 4 + 1d4 HD of creatures to fall into a comatose slumber, beginning with those with the fewest HD. Creatures with 5 or more HD are unaffected.", + "id": 6258 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sleep", + "id": 13545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 251 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll165" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll165" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 216, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Colossal, 1 Creature / Level\nDuration: 1 Round / Level\nAdditional Counter Spells: Haste\nSave: Will Negates\nSpell Resistance: Yes\n\nAll enemy creatures within the area of effect have their movement lowered by 50% and lose a single attack per round.", + "id": 6259 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Slow", + "id": 13580 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 253 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll166" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll166" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 217, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2\nInnate Level: 2\nSchool: Evocation\nDescriptor(s): Sonic\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Medium\nDuration: Instant\nAdditional Counter Spells: \nSave: Will Special\nSpell Resistance: Yes\n\nAll creatures within the area of effect take 1d8 points of damage and must make a Will save or be stunned for 2 rounds.", + "id": 6260 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sound Burst", + "id": 13657 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 254 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll167" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll167" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 218, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: Spell Breach\nSave: Harmless\nSpell Resistance: No\n\nCreates a barrier around the caster that absorbs all incoming spells and spell-like abilities. It can absorb up to 1d8+8 spell levels before collapsing.", + "id": 6262 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spell Mantle", + "id": 13625 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 257 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll169" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll169" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 219, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 5, Druid 5\nInnate Level: 5\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe target creature has its spell resistance set to 12, +1 per caster level. If the target already had a higher spell resistance, this spell has no effect.", + "id": 6261 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance", + "id": 13657 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 255 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll168" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll168" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 220, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 3 \nInnate Level: 3\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Large\nDuration: 1 hour / level\nAdditional Counter Spells:\nSave: Reflex partial\nSpell Resistance: Yes\n\nCovers the terrain with small spikes. Any creature will suffer 1d4 points of damage each round that they remain within the afflicted area. These spikes can damage the victim's legs, so that even once they are free of the spike growth, their movement rate is slowed for a day.", + "id": 2672 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spike Growth", + "id": 2671 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 385 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll454" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll454" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 221, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Fortitude Negates\nSpell Resistance: Yes\n\nAll creatures caught within the area of effect are dazed. These effects last as long as they remain within the cloud and for 1 round after they leave.", + "id": 6264 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Stinking Cloud", + "id": 13572 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 259 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll171" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll171" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 222, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Permanent\nAdditional Counter Spells: Flesh to Stone\nSave: None\nSpell Resistance: No\n\nThis spell restores a petrified creature to its normal state, restoring life and goods.", + "id": 3047 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Stone to Flesh", + "id": 2687 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 399 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll486" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll486" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 223, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 4, Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThis spell grants the target creature damage reduction 10/+5. The spell absorbs 10 points of melee damage per caster level, to a maximum of 100, before collapsing.", + "id": 6265 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Stoneskin", + "id": 13584 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 260 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll172" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll172" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 224, + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 9, Druid 9\nInnate Level: 9\nSchool: Conjuration\nDescriptor(s): Acid, Electricity\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: 10 Rounds\nAdditional Counter Spells: \nSave: Reflex Special\nSpell Resistance: Yes\n\nThe area around the caster is blasted by lightning and acidic rain. Each round, all enemies within the area of effect take 3d6 points of acid damage. Those who fail a Reflex save take an additional 3d6 points of electrical damage.", + "id": 6266 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Storm of Vengance", + "id": 13584 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 261 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll173" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll173" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 225, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Cleric 1, Druid 1, Ranger 1, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a dire badger to be a faithful and loyal servant.", + "id": 6267 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature I", + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 262 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll174" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll174" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 226, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Druid 2, Ranger 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a dire boar to be a faithful and loyal servant.", + "id": 6268 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature II", + "id": 13552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 264 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll175" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll175" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 227, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Druid 3, Ranger 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a dire wolf to be a faithful and loyal servant.", + "id": 6269 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature III", + "id": 13573 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 265 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll176" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll176" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 228, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4, Cleric 4, Druid 4, Ranger 4, Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a dire spider to be a faithful and loyal servant.", + "id": 6270 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IV", + "id": 13585 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 266 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll177" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll177" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 229, + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 9, Druid 9, Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a random elder elemental to be a faithful and loyal servant.", + "id": 6513 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IX", + "id": 13645 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 267 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll178" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll178" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 230, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 5, Cleric 5, Druid 5, Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a dire bear to be a faithful and loyal servant.", + "id": 6509 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature V", + "id": 13608 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 268 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll179" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll179" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 231, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 6, Cleric 6, Druid 6, Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a dire tiger to be a faithful and loyal servant.", + "id": 6510 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VI", + "id": 13616 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 269 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll180" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll180" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 232, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 7, Druid 7, Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a random huge elemental to be a faithful and loyal servant.", + "id": 6511 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VII", + "id": 13627 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 270 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll181" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll181" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 233, + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 8, Druid 8, Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a random greater elemental to be a faithful and loyal servant.", + "id": 6512 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VIII", + "id": 13637 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 271 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll182" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll182" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 234, + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 8, Wizard / Sorcerer 8 \nInnate Level: 8\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: Instant\nAdditional Counter Spells:\nSave: Reflex\nSpell Resistance: Yes\n\nA brilliant explosion occurs where the caster directs causing 1d6 points of damage per caster level to all undead creatures to a maximum of 25d6 (6d6 points of damage to creatures that are not undead). Vampires are destroyed instantly if they fail a Reflex saving throw. All enemies in the area of effect must also make a successful Reflex saving throw or be blinded permanently (the blindness can only be magically removed).", + "id": 1537 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sunburst", + "id": 385 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 358 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll427" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll427" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 235, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Enchantment\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 1d3 rounds\nAdditional Counter Spells:\nSave: Will negates\nSpell Resistance: Yes\n\nIf the target fails their saving throw they will begin laughing hysterically. They will be unable to defend themselves until the spell wears off. A creature whose racial type is different from the caster's gains a +4 bonus on its saving throw because humor doesn't 'translate' well.", + "id": 2677 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tasha's Hideous Laughter", + "id": 2678 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 388 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll457" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll457" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 236, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe caster becomes an engine of destruction, gaining a +1 attack bonus for every 2 caster levels, a +4 natural armor AC bonus, +2d4 Strength, +2d4 Dexterity, +5 to their Fortitude saving throws, and +1d6 additional Hit Points per caster level.", + "id": 6516 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tenser's Transformation", + "id": 58586 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 273 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll184" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll184" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 237, + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 9 seconds\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster is able to defy the sands of time, casting spells, moving about, and attacking normally while the rest of the world appears suspended, as if in stasis.", + "id": 6517 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Time Stop", + "id": 13652 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 274 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll185" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll185" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 238, + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 5, Druid 7, Wizard / Sorcerer 6\nInnate Level: 5\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: Greater Shadow Conjuration\nSave: Harmless\nSpell Resistance: No\n\nThe target creature can see through Sanctuary and Invisibility effects, and automatically spots hiding opponents.", + "id": 6518 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "True Seeing", + "id": 13617 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 275 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll186" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll186" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 239, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 1 \nInnate Level: 1\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 9 seconds\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThrough magical intuition the caster gains a +20 bonus to attack rolls.", + "id": 509 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "True Strike", + "id": 55 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 346 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll415" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll415" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 240, + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 9\nInnate Level: 9\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Medium\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nAll allies in the area of effect will receive the following bonuses: immunity to negative damage, immunity to level/energy drain, immunity to ability score decreases, immunity to poisons, and immunity to diseases.", + "id": 2372 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Undeath's Eternal Foe", + "id": 2365 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 375 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll444" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll444" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 241, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Negative Energy Protection\nSave: None\nSpell Resistance: Yes\n\nThe target creature takes 1d6 points of damage for every 2 caster levels. This damage is then applied to the caster's Hit Points as a temporary bonus.", + "id": 6519 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Vampiric Touch", + "id": 13578 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 277 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll188" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll188" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 242, + "AddCost": { + "type": "dword", + "value": 13 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 0, Druid 0, Paladin 1\nInnate Level: 0\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe target creature gains 1 temporary hit point above his maximum total.", + "id": 6520 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Virtue", + "id": 13578 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 278 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll189" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll189" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 243, + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Necromancy\nDescriptor(s): Death, Sonic\nComponent(s): Verbal\nRange: Short\nArea of Effect / Target: Colossal, 1 Creature / Level\nDuration: Instant\nAdditional Counter Spells: Silence\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nAll enemies within the area of effect must succeed at a Fortitude save or die, to a maximum of 1 enemy per caster level.", + "id": 6521 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wail of the Banshee", + "id": 13650 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 279 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll190" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll190" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 244, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 5, Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Wall 30 ft Long\nDuration: 1 Round / 2 Levels\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nThis spell creates a curtain of fire that deals 4d6 points of fire damage to any creature that attempts to pass through it.", + "id": 6522 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wall of Fire", + "id": 13588 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 280 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll191" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll191" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 245, + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4\nInnate Level: 4\nSchool: Enchantment\nDescriptor(s): Mind-Affecting, Sonic\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: 1 Round / Level\nAdditional Counter Spells: Silence\nSave: Will Negates\nSpell Resistance: Yes\n\nThe caster lets out a powerful shout that grants the Bard a +2 bonus to attack and damage. All enemies within the area of effect are stricken with fear.", + "id": 6539 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "War Cry", + "id": 58579 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 322 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll373" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll373" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 246, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: 1 Round / Level\nAdditional Counter Spells: Freedom of Movement\nSave: Reflex Partial\nSpell Resistance: Yes\n\nSticky strands cling to all creatures within the area of effect, entangling them. Creatures who make their save can move, but at a reduced rate dependent on their Strength.", + "id": 6523 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Web", + "id": 13553 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 281 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll192" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll192" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 247, + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Illusion\nDescriptor(s): Fear, Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: True Seeing\nSave: Fortitude and Will\nSpell Resistance: Yes\n\nA horrible phantasm rises to stand before enemy creatures in the area of effect, causing them to make a Will save. If they fail, the phantasm touches them and they must now make a Fortitude saving throw. If this saving throw fails, the creature dies. Those who succeed the Fortitude save still take 3d6 points of damage. Creatures with less than 4 HD automatically die, without any saving throws. ", + "id": 6524 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Weird", + "id": 13648 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 282 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll193" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll193" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 248, + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 7\nInnate Level: 7\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: Yes\n\nA wave of divine energy blasts all enemy creatures within the area of effect. All enemies within the area are stunned for 1 round per 2 caster levels. Those with 4 Hit Dice or less are killed instantly. Any hostile summoned creatures are returned to their home planes.", + "id": 6525 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Word of Faith", + "id": 13648 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 283 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll194" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll194" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 249, + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3 \nInnate Level: 3\nSchool: Abjuration\nDescriptor(s): Sonic\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster is surrounded with whispers that injure any creature that hits the caster for 1d6 + 1 / level points of sonic damage.", + "id": 2369 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wounding Whispers", + "id": 2362 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 372 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll441" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll441" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + }, + { + "__struct_id": 3 + }, + { + "__struct_id": 1, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 1117 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Boccob's Blessed Book" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 211 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb025" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb025" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 27499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 27500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to give yourself a permanent +1 consitution bonus." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Bodily Health +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb092" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb092" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 24749 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 55000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to give a permanent +2 to consitution." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Bodily Health +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc045" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc045" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 5059 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 82500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to give a permanent +3 to constitution." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Bodily Health +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc066" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc066" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 11989 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 110000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used for a permanent +4 Constitution." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Bodily Health +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc081" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc081" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 16499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 137500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +5 Constitution." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Bodily Health +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc088" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc088" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 27499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 27500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +1 Strength." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Gainful Exercise +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb093" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb093" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 11439 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 55000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +2 Strength." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Gainful Exercise +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc046" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc046" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 5059 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 82500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +3 Strength." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Gainful Exercise +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc067" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc067" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 11989 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 110000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +4 Strength." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Gainful Exercise +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc082" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc082" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 10, + "AddCost": { + "type": "dword", + "value": 16499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 137500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +5 Strength." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Gainful Exercise +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc089" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc089" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 11, + "AddCost": { + "type": "dword", + "value": 27499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 27500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +1 Charisma." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Leadership and Influence +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb094" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb096" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 12, + "AddCost": { + "type": "dword", + "value": 11439 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 55000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +2 Charisma." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Leadership and Influence +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc049" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc049" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 13, + "AddCost": { + "type": "dword", + "value": 5059 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 82500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +3 Charisma." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Leadership and Influence +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc070" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc070" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 14, + "AddCost": { + "type": "dword", + "value": 11989 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 110000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +4 Charisma." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Leadership and Influence +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc085" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc085" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 15, + "AddCost": { + "type": "dword", + "value": 16499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 137500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +5 Charisma." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Leadership and Influence +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc092" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc092" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 27499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 27500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +1 Dexterity." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Quickness of Action +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb094" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb094" + }, + "xModelPart1": { + "type": "word", + "value": 5 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 17, + "AddCost": { + "type": "dword", + "value": 11439 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 55000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +2 Dexterity." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Quickness of Action +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc047" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc047" + }, + "xModelPart1": { + "type": "word", + "value": 5 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 18, + "AddCost": { + "type": "dword", + "value": 5059 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 82500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +3 Dexterity." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Quickness of Action +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc068" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc068" + }, + "xModelPart1": { + "type": "word", + "value": 5 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 19, + "AddCost": { + "type": "dword", + "value": 11989 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 110000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +4 Dexterity." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Quickness of Action +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc083" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc083" + }, + "xModelPart1": { + "type": "word", + "value": 5 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 20, + "AddCost": { + "type": "dword", + "value": 16499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 137500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +5 Dexterity." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Quickness of Action +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc090" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc090" + }, + "xModelPart1": { + "type": "word", + "value": 5 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 21, + "AddCost": { + "type": "dword", + "value": 27499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 27500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +1 Wisdom." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Understanding +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb097" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb097" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 22, + "AddCost": { + "type": "dword", + "value": 11439 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 55000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +2 Wisdom." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Understanding +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc050" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc050" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 23, + "AddCost": { + "type": "dword", + "value": 5059 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 82500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +3 Wisdom." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Understanding +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc071" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc071" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 24, + "AddCost": { + "type": "dword", + "value": 11989 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 110000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +4 Wisdom." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Understanding +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc086" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc086" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 25, + "AddCost": { + "type": "dword", + "value": 16499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 137500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +5 Wisdom." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Understanding +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc093" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc093" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 26, + "AddCost": { + "type": "dword", + "value": 27499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 27500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +1 Intelligence." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tome of Clear Thought +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb095" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb095" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 27, + "AddCost": { + "type": "dword", + "value": 11439 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 55000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +2 Intelligence." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tome of Clear Thought +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc048" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc048" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 28, + "AddCost": { + "type": "dword", + "value": 5059 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 82500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +3 Intelligence." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tome of Clear Thought +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc069" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc069" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 29, + "AddCost": { + "type": "dword", + "value": 11989 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 110000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +4 Intelligence." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tome of Clear Thought +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc084" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc084" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 30, + "AddCost": { + "type": "dword", + "value": 16499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 137500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +5 Intelligence." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tome of Clear Thought +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc091" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc091" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "BooksNScrolls" + }, + "WillNotBuy": { + "type": "list", + "value": [] + }, + "WillOnlyBuy": { + "type": "list", + "value": [ + { + "__struct_id": 97869, + "BaseItem": { + "type": "int", + "value": 74 + } + }, + { + "__struct_id": 97869, + "BaseItem": { + "type": "int", + "value": 75 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 32.8341 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 47.5559 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 11, + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 10 + }, + "IdentifyPrice": { + "type": "int", + "value": 100 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Town Store" + } + }, + "MarkDown": { + "type": "int", + "value": 75 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "MaxBuyPrice": { + "type": "int", + "value": -1 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "OnStoreClosed": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "townstore" + }, + "StoreGold": { + "type": "int", + "value": -1 + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2 + }, + { + "__struct_id": 3, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 1343 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of Natural Armor +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca033" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca033" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 5075 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of Natural Armor +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb005" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb005" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 11187 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of Natural Armor +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb068" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb068" + }, + "xModelPart1": { + "type": "word", + "value": 24 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 11187 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of Natural Armor +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb069" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb069" + }, + "xModelPart1": { + "type": "word", + "value": 24 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 19679 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of Natural Armor +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc010" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc010" + }, + "xModelPart1": { + "type": "word", + "value": 24 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 30551 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of Natural Armor +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc036" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc036" + }, + "xModelPart1": { + "type": "word", + "value": 24 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 18574 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 80000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of the Planes" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 374 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc062" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc062" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 3390 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 35000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of the Thief" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 149 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 26 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 8 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc012" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc012" + }, + "xModelPart1": { + "type": "word", + "value": 24 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 10996 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 11000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Allows the user to turn undead 4 levels higher than normal.\n\nNote to use this power you must use this item's properties instead of the normal Turn Undead hotkey.", + "id": 48904 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of Undead Turning", + "id": 48903 + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 4 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb034" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb034" + }, + "xModelPart1": { + "type": "word", + "value": 5 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 758 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 7200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hand of Glory" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 350 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 243 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 6 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca097" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca097" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 10, + "AddCost": { + "type": "dword", + "value": 996 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Allows the user to open a unlocked door from a safe distance." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hand of the Mage" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca019" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca019" + }, + "xModelPart1": { + "type": "word", + "value": 25 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 11, + "AddCost": { + "type": "dword", + "value": 9177 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 12000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Medalion of Thoughts" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 12 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb039" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb039" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 12, + "AddCost": { + "type": "dword", + "value": 1889 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 19000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Adaptation" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 201 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb070" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb070" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 13, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Fire I" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca028" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca028" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 14, + "AddCost": { + "type": "dword", + "value": 2700 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 9 + }, + "Cost": { + "type": "dword", + "value": 2700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Fire II" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca052" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca052" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 15, + "AddCost": { + "type": "dword", + "value": 4350 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 19 + }, + "Cost": { + "type": "dword", + "value": 4350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Fire III" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 109 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca074" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca074" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 5400 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 29 + }, + "Cost": { + "type": "dword", + "value": 5400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Fire IV" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca083" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca083" + }, + "xModelPart1": { + "type": "word", + "value": 16 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 17, + "AddCost": { + "type": "dword", + "value": 6150 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 22 + }, + "Cost": { + "type": "dword", + "value": 6150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Fire V" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 109 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca092" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca092" + }, + "xModelPart1": { + "type": "word", + "value": 16 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 18, + "AddCost": { + "type": "dword", + "value": 8100 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 40 + }, + "Cost": { + "type": "dword", + "value": 8100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Fire VI" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 109 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb015" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb015" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 19, + "AddCost": { + "type": "dword", + "value": 9150 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 29 + }, + "Cost": { + "type": "dword", + "value": 9150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Fire VII" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 109 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb023" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb023" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 20, + "AddCost": { + "type": "dword", + "value": 2299 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Prayer Beads (Aiding)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca080" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca080" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 21, + "AddCost": { + "type": "dword", + "value": 99 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Prayer Beads (Blessing)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 11 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca010" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca010" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 22, + "AddCost": { + "type": "dword", + "value": 6439 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This necklace can be used once to call down the wrath of their god, instantly destroying all hostile creatures in the area.\n\nNote no experience or loot will be gained for this using this item." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Prayer Beads (God's Wrath)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 513 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc040" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc040" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 23, + "AddCost": { + "type": "dword", + "value": 1374 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Prayer Beads (Healing)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 72 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 229 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 231 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb029" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb029" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 24, + "AddCost": { + "type": "dword", + "value": 2399 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 15000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Prayer Beads (Smiting)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 115 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb048" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb048" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 25, + "AddCost": { + "type": "dword", + "value": 29999 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 30000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This necklace allows the wearer to fly back out of a pit they have fallen into." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Prayer Beads (Wind Walking)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc004" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc004" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 26, + "AddCost": { + "type": "dword", + "value": 6499 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 7500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Periapt of Health" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 4 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb003" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb003" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 27, + "AddCost": { + "type": "dword", + "value": 197 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Periapt of Proof Against Poison" + } + }, + "ModelPart1": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 13 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca066" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca066" + }, + "xModelPart1": { + "type": "word", + "value": 18 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 28, + "AddCost": { + "type": "dword", + "value": 489 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Periapt of Wisdom +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca072" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca072" + }, + "xModelPart1": { + "type": "word", + "value": 2 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 29, + "AddCost": { + "type": "dword", + "value": 1959 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Periapt of Wisdom +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb064" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb064" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 30, + "AddCost": { + "type": "dword", + "value": 4409 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 36000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This amulet gives it's wearer +6 wisdom." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Periapt of Wisdom +6" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc019" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc019" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 31, + "AddCost": { + "type": "dword", + "value": 14999 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 15000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "While wearing this necklace a person will never bleed to death." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Periapt of Wound Closure " + } + }, + "ModelPart1": { + "type": "byte", + "value": 20 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb049" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb049" + }, + "xModelPart1": { + "type": "word", + "value": 20 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32, + "AddCost": { + "type": "dword", + "value": 359 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Phylactery of the Faithful" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca021" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca021" + }, + "xModelPart1": { + "type": "word", + "value": 2 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 33, + "AddCost": { + "type": "dword", + "value": 9000 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Warning this item should not be handled by non arcane spell casters." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Talisman of Negative Energy" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 5 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 20 + }, + "Subtype": { + "type": "word", + "value": 11 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb021" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb021" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 34, + "AddCost": { + "type": "dword", + "value": 15224 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Acid Resistance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring007" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring007" + }, + "xModelPart1": { + "type": "word", + "value": 23 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 35, + "AddCost": { + "type": "dword", + "value": 16497 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 24000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Acid Resistance Major" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring015" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring015" + }, + "xModelPart1": { + "type": "word", + "value": 23 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 36, + "AddCost": { + "type": "dword", + "value": 19984 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 200000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In addition to everything else this ring also provides the feather fall ability, which prevents damage from pit traps.\n\nIt also allows limited flight to be able to go back to the top of said trap." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Air Command" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 30 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 410 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 20 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 49 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring030" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring030" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 37, + "AddCost": { + "type": "dword", + "value": 9499 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Animal Friendship" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring005" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring005" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 38, + "AddCost": { + "type": "dword", + "value": 29995 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 30000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Allows the user to do a short range teleport." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Blinking" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring022" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring022" + }, + "xModelPart1": { + "type": "word", + "value": 16 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 39, + "AddCost": { + "type": "dword", + "value": 4800 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 12000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Chameleon" + } + }, + "ModelPart1": { + "type": "byte", + "value": 35 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 15 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 5 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring006" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring006" + }, + "xModelPart1": { + "type": "word", + "value": 35 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 40, + "AddCost": { + "type": "dword", + "value": 4609 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Clairvoyance/Audience" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 43 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring020" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring020" + }, + "xModelPart1": { + "type": "word", + "value": 16 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 41, + "AddCost": { + "type": "dword", + "value": 1995 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This ring will allow it's wearer to climb back out of a pit they have fallen into." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Climbing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring034" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring034" + }, + "xModelPart1": { + "type": "word", + "value": 16 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 42, + "AddCost": { + "type": "dword", + "value": 14987 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Cold Resistance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring008" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring008" + }, + "xModelPart1": { + "type": "word", + "value": 24 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 43, + "AddCost": { + "type": "dword", + "value": 14200 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 24000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Cold Resistance Major" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring016" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring016" + }, + "xModelPart1": { + "type": "word", + "value": 24 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 44, + "AddCost": { + "type": "dword", + "value": 2200 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This ring aids the user in attempting counter spell." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Counter Spelling" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 16 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring037" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring037" + }, + "xModelPart1": { + "type": "word", + "value": 16 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 45, + "AddCost": { + "type": "dword", + "value": 7874 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 200000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Earth Command" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 357 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 260 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 20 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 49 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 218 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 220 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 217 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 219 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring031" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring031" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 46, + "AddCost": { + "type": "dword", + "value": 14718 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Electrical Resistance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 9 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring009" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring009" + }, + "xModelPart1": { + "type": "word", + "value": 26 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 47, + "AddCost": { + "type": "dword", + "value": 11597 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 24000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Electrical Resistance Major" + } + }, + "ModelPart1": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 9 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring017" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring017" + }, + "xModelPart1": { + "type": "word", + "value": 26 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 48, + "AddCost": { + "type": "dword", + "value": 13749 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Evasion" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 38 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring021" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring021" + }, + "xModelPart1": { + "type": "word", + "value": 16 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 49, + "AddCost": { + "type": "dword", + "value": 2000 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This ring prevents damage from falling into a trap." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Feather Fall" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring035" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring035" + }, + "xModelPart1": { + "type": "word", + "value": 16 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 50, + "AddCost": { + "type": "dword", + "value": 18768 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 200000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Fire Command" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 111 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 116 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 117 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 280 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 20 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 49 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring032" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring032" + }, + "xModelPart1": { + "type": "word", + "value": 29 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 51, + "AddCost": { + "type": "dword", + "value": 14418 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Fire Resistance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring010" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring010" + }, + "xModelPart1": { + "type": "word", + "value": 25 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 52, + "AddCost": { + "type": "dword", + "value": 8687 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 24000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Fire Resistance Major" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring018" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring018" + }, + "xModelPart1": { + "type": "word", + "value": 25 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 53, + "AddCost": { + "type": "dword", + "value": 2874 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Force Shield" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 348 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring004" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring004" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 54, + "AddCost": { + "type": "dword", + "value": 19999 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 40000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Freedom of Movement" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 75 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring025" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring025" + }, + "xModelPart1": { + "type": "word", + "value": 16 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 55, + "AddCost": { + "type": "dword", + "value": 2874 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 40000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Gates" + } + }, + "ModelPart1": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 382 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc030" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc030" + }, + "xModelPart1": { + "type": "word", + "value": 18 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 56, + "AddCost": { + "type": "dword", + "value": 3124 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Invisibility" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 151 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring013" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring013" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 57, + "AddCost": { + "type": "dword", + "value": 1179 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Protection +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring001" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring001" + }, + "xModelPart1": { + "type": "word", + "value": 2 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 58, + "AddCost": { + "type": "dword", + "value": 4344 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Protection +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring003" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring003" + }, + "xModelPart1": { + "type": "word", + "value": 2 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 59, + "AddCost": { + "type": "dword", + "value": 9484 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Protection +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring012" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring012" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 60, + "AddCost": { + "type": "dword", + "value": 25689 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Protection +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring026" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring026" + }, + "xModelPart1": { + "type": "word", + "value": 5 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 61, + "AddCost": { + "type": "dword", + "value": 16599 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Protection +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring023" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring023" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 62, + "AddCost": { + "type": "dword", + "value": 1799 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 90000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Regeneration" + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 51 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring028" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring028" + }, + "xModelPart1": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 63, + "AddCost": { + "type": "dword", + "value": 12187 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This ring will fire 1 to 4 electrical projectiles at the nearest available targets.\n\nThe damage of these lightning balls is determined by the number of balls fired.\n\n1: 4d6 \n2: 3d6\n3: 2d6\n4: 1d6" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Shooting Stars" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring039" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring039" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 64, + "AddCost": { + "type": "dword", + "value": 14418 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Sonic Resistance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 13 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring011" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring011" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65, + "AddCost": { + "type": "dword", + "value": 8687 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 24000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Sonic Resistance Major" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 13 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring019" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring019" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 66, + "AddCost": { + "type": "dword", + "value": 10885 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 90000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This ring allows the caster to store 3 spells into the ring. All 3 spells will be fired at once on the user so Fireball is not advised.\n\nOnce used the ring must be recharged with new spells." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Spell Storing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 523 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring038" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring038" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 67, + "AddCost": { + "type": "dword", + "value": 2500 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This ring prevents the need for food." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Sustenance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring036" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring036" + }, + "xModelPart1": { + "type": "word", + "value": 16 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 68, + "AddCost": { + "type": "dword", + "value": 1987 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Warmth" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring002" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring002" + }, + "xModelPart1": { + "type": "word", + "value": 2 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 69, + "AddCost": { + "type": "dword", + "value": 21862 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 200000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In addition to its other powers this ring prevents the wearer from needing food." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Water Command" + } + }, + "ModelPart1": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 310 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 419 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 20 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 49 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 201 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring033" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring033" + }, + "xModelPart1": { + "type": "word", + "value": 15 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 70, + "AddCost": { + "type": "dword", + "value": 18199 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Wizardry I" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring014" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring014" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 71, + "AddCost": { + "type": "dword", + "value": 28180 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 40000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Wizardry II" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring024" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring024" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 72, + "AddCost": { + "type": "dword", + "value": 15199 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 80000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Wizardry III" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring027" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring027" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 73, + "AddCost": { + "type": "dword", + "value": 14922 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 100000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Wizardry IV" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring029" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring029" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + }, + { + "__struct_id": 1, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 50 + }, + "BaseItem": { + "type": "int", + "value": 77 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The second lowest quality of gem stones. \n\nBloodstone\nCarnelian\nChalcedony\nChryophase\nCitrine\nIolite\nJasper\nMoonstone\nOnyx\nPeridot\nClear Quartz\nSard\nSardonyx\nRose, Smoky, or Star Rose Quartz \nZircon." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "One of the world's rarest and most coveted gems, alexandrite takes on a brilliant green hue when under indirect sunlight but turns blood-red when exposed to candlelight. Loretellers claim that all alexandrite comes from the body of the oldest son of Silvanus, the Forest Father. A common nursery rhyme goes \"Silvanus' wife went mad one night, murdering her child by candlelight.\"", + "id": 13315 + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Common Gem", + "id": 13314 + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_gem201" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_gem201" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 5000 + }, + "BaseItem": { + "type": "int", + "value": 77 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The second to highest quality of gem stones. \n\nDiamonds" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "One of the world's rarest and most coveted gems, alexandrite takes on a brilliant green hue when under indirect sunlight but turns blood-red when exposed to candlelight. Loretellers claim that all alexandrite comes from the body of the oldest son of Silvanus, the Forest Father. A common nursery rhyme goes \"Silvanus' wife went mad one night, murdering her child by candlelight.\"", + "id": 13315 + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Incredibly Rare Gem", + "id": 13314 + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_gem601" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_gem601" + }, + "xModelPart1": { + "type": "word", + "value": 5 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 500 + }, + "BaseItem": { + "type": "int", + "value": 77 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The fourth quality of gem stones. \n\nAlexandrite\nAquamarine\nViolet Garnet\nBlack Pearl\nDeep Blue Spindel\nGolden Yellow Topaz" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "One of the world's rarest and most coveted gems, alexandrite takes on a brilliant green hue when under indirect sunlight but turns blood-red when exposed to candlelight. Loretellers claim that all alexandrite comes from the body of the oldest son of Silvanus, the Forest Father. A common nursery rhyme goes \"Silvanus' wife went mad one night, murdering her child by candlelight.\"", + "id": 13315 + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Precious Gem", + "id": 13314 + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_gem401" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_gem401" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 100 + }, + "BaseItem": { + "type": "int", + "value": 77 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The second lowest quality of gem stones. \n\nAmber\nAmethyst\nChrysoberyl \nCoral \nRed or Brown-Green Garnet\nJade\nJet \nWhite, Golden, Pink or Silver Pearl\nRed Spindel\nRed-Brownor Deep Green Spindel\nTourmaline" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "One of the world's rarest and most coveted gems, alexandrite takes on a brilliant green hue when under indirect sunlight but turns blood-red when exposed to candlelight. Loretellers claim that all alexandrite comes from the body of the oldest son of Silvanus, the Forest Father. A common nursery rhyme goes \"Silvanus' wife went mad one night, murdering her child by candlelight.\"", + "id": 13315 + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Semi Precious Gem", + "id": 13314 + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_gem301" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_gem301" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 77 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The lowest quality of gem stones. \n\nBanded Eye\nMoss Agate\nBlue Quartz\nHematite\nLapis Lazuli\nMalachite\nObsidian\nRhodochrosite\nTiger Eye\nTurquoise\nIrregular pearls" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "One of the world's rarest and most coveted gems, alexandrite takes on a brilliant green hue when under indirect sunlight but turns blood-red when exposed to candlelight. Loretellers claim that all alexandrite comes from the body of the oldest son of Silvanus, the Forest Father. A common nursery rhyme goes \"Silvanus' wife went mad one night, murdering her child by candlelight.\"", + "id": 13315 + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Very Common Gem", + "id": 13314 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_gem101" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_gem101" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 1000 + }, + "BaseItem": { + "type": "int", + "value": 77 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The second to highest quality of gem stones. \n\nEmerald\nWhite, Black, or Fire Opal\nBlue Sapphire\nFirey Yellow or Rich Corundrum\nBlue or Black Star Sapphire\nStar Ruby" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "One of the world's rarest and most coveted gems, alexandrite takes on a brilliant green hue when under indirect sunlight but turns blood-red when exposed to candlelight. Loretellers claim that all alexandrite comes from the body of the oldest son of Silvanus, the Forest Father. A common nursery rhyme goes \"Silvanus' wife went mad one night, murdering her child by candlelight.\"", + "id": 13315 + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Very Rare Gem", + "id": 13314 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_gem501" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_gem501" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "GemsNJewerlry" + }, + "WillNotBuy": { + "type": "list", + "value": [] + }, + "WillOnlyBuy": { + "type": "list", + "value": [ + { + "__struct_id": 97869, + "BaseItem": { + "type": "int", + "value": 77 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 34.4858 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 47.5255 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 11, + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 10 + }, + "IdentifyPrice": { + "type": "int", + "value": 100 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Clothes" + } + }, + "MarkDown": { + "type": "int", + "value": 10 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "MaxBuyPrice": { + "type": "int", + "value": -1 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "OnStoreClosed": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "townstore" + }, + "StoreGold": { + "type": "int", + "value": -1 + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 21 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 14900 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This belt gives the wearer many of the racial abilities of a dwarf.\n\nIn the hands of a dwarf it has different powers." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Belt of Dwarven Kind" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 26 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb046" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb046" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 9140 + }, + "BaseItem": { + "type": "int", + "value": 21 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 14900 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This belt helps the dwarf to be more charismatic.\n\nIn the hands of a non-dwarf this belt has different powers." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Belt of Dwarven Kind" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 24 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb046b" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb046b" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 1959 + }, + "BaseItem": { + "type": "int", + "value": 21 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Belt of Giant Strength +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb060" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb060" + }, + "xModelPart1": { + "type": "word", + "value": 5 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 4409 + }, + "BaseItem": { + "type": "int", + "value": 21 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 36000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Belt of Giant Strength +6" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc015" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc015" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 2249 + }, + "BaseItem": { + "type": "int", + "value": 21 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In the hands of a monk this belt has different powers." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Monk's Belt" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 17 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb016" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb016" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 2249 + }, + "BaseItem": { + "type": "int", + "value": 21 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In the hands of a non monk this belt has different powers." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Monk's Belt" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 137 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb016" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb016b" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 5496 + }, + "BaseItem": { + "type": "int", + "value": 26 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These boots will allow the wearer to instantly teleport short distances." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Boots of Blink" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "ModelPart2": { + "type": "byte", + "value": 33 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca087" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca087" + }, + "xModelPart1": { + "type": "word", + "value": 23 + }, + "xModelPart2": { + "type": "word", + "value": 33 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 560 + }, + "BaseItem": { + "type": "int", + "value": 26 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Boots of Elven Kind" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 44 + }, + "ModelPart3": { + "type": "byte", + "value": 34 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 8 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca035" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca035" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "xModelPart2": { + "type": "word", + "value": 44 + }, + "xModelPart3": { + "type": "word", + "value": 34 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 1249 + }, + "BaseItem": { + "type": "int", + "value": 26 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Boots of Speed" + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 137 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb006" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb006" + }, + "xModelPart1": { + "type": "word", + "value": 43 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 560 + }, + "BaseItem": { + "type": "int", + "value": 26 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Boots of the Acrobat" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 44 + }, + "ModelPart3": { + "type": "byte", + "value": 34 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 21 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca040" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca040" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "xModelPart2": { + "type": "word", + "value": 44 + }, + "xModelPart3": { + "type": "word", + "value": 34 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 10, + "AddCost": { + "type": "dword", + "value": 2409 + }, + "BaseItem": { + "type": "int", + "value": 26 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Boots of Winterlands" + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca048" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca048" + }, + "xModelPart1": { + "type": "word", + "value": 43 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 11, + "AddCost": { + "type": "dword", + "value": 12000 + }, + "BaseItem": { + "type": "int", + "value": 26 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 12000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These boots have amazing little wings that will prevent the wearer from taking damage from pit traps.\n\nThey also increase base movement speed by 50%." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Winged Boots" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb036" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb036" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "xModelPart2": { + "type": "word", + "value": 41 + }, + "xModelPart3": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 12, + "AddCost": { + "type": "dword", + "value": 2849 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In addition to point blank shot, these bracers offer an additional +1 to hit with a ranged weapon." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracelet of Archery" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca081" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca081" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 13, + "AddCost": { + "type": "dword", + "value": 4548 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 4550 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This will cause the taget to be immediately teleported to the user.\n\nThis is a short range teleport good for getting a friend out of the middle of a bunch of monsters." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracelet of Friends" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca076" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca076" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 14, + "AddCost": { + "type": "dword", + "value": 343 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Armor +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca015" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca015" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 15, + "AddCost": { + "type": "dword", + "value": 1075 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These bracers give a +2 Armor AC Bonus." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Armor +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca060" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca060" + }, + "xModelPart1": { + "type": "word", + "value": 2 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 2187 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These bracers give a +3 Armor AC Bonus." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Armor +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb017" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb017" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 17, + "AddCost": { + "type": "dword", + "value": 3679 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These bracers give a +4 Armor AC Bonus." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Armor +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb057" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb057" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 18, + "AddCost": { + "type": "dword", + "value": 5551 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These bracers give a +5 Armor AC Bonus." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Armor +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb088" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb088" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 19, + "AddCost": { + "type": "dword", + "value": 13477 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 36000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These bracers give a +5 Armor AC Bonus.\n\nWhen equiped you will see an error about effect stacking this is normal." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Armor +6" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc014" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc014" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 20, + "AddCost": { + "type": "dword", + "value": 7240 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 49000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These bracers give a +7 Armor AC Bonus.\n\nWhen equiped this item will cause a notification of stacking effects error this is normal." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Armor +7" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc034" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc034" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 21, + "AddCost": { + "type": "dword", + "value": 15490 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 64000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Armor +8" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc055" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc055" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 22, + "AddCost": { + "type": "dword", + "value": 489 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Health +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca069" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca069" + }, + "xModelPart1": { + "type": "word", + "value": 2 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 23, + "AddCost": { + "type": "dword", + "value": 1959 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Health +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb062" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb062" + }, + "xModelPart1": { + "type": "word", + "value": 5 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 24, + "AddCost": { + "type": "dword", + "value": 4409 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 36000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This bracers gives +4 constitution." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Health +6" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc017" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc017" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 25, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 29701 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dimensional Shackles" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 361 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb089" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb089" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 26, + "AddCost": { + "type": "dword", + "value": 7500 + }, + "BaseItem": { + "type": "int", + "value": 26 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 7500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These boots prevent damage from falling into pit traps.\n\nThey also allow the wear to fly back up thru a pit they have fallen into." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Boots of Levitation" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb001" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb001" + }, + "xModelPart1": { + "type": "word", + "value": 42 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 23 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 27, + "AddCost": { + "type": "dword", + "value": 2500 + }, + "BaseItem": { + "type": "int", + "value": 26 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "There boots allow the wearer to move twice as fast." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Boots of Striding" + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca049" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca049" + }, + "xModelPart1": { + "type": "word", + "value": 43 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 28, + "AddCost": { + "type": "dword", + "value": 1339 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Brooch of Shielding" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 97 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca026" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca026" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 29, + "AddCost": { + "type": "dword", + "value": 2937 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Arachnida" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 167 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 13 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca089" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca089" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 30, + "AddCost": { + "type": "dword", + "value": 23789 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak grants it's wearer a 20% chance to be missed by each physical attack." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Displacement" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb083" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb083" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 31, + "AddCost": { + "type": "dword", + "value": 29109 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 40000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak grants it's wearer a 50% chance to be missed by each attack." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Displacement II" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc037" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc037" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32, + "AddCost": { + "type": "dword", + "value": 560 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Elven Kind" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 5 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca036" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca036" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 33, + "AddCost": { + "type": "dword", + "value": 18249 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 52000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Etherealness" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 196 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc042" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc042" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 34, + "AddCost": { + "type": "dword", + "value": 12956 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 12960 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak will allow the user to make flashy exits... entrances too...\n\nThis cloak allows the wearer to make short range teleports. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Mountebank" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 513 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb041" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb041" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 35, + "AddCost": { + "type": "dword", + "value": 7749 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 38000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak helps the wearer fend off spell attacks.\n\nSpell resistance 17.", + "id": 13768 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Protection", + "id": 13844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc026" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc026" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 36, + "AddCost": { + "type": "dword", + "value": 1000 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak provides a +1 modifier to all saving throws." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Resistance +1" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca016" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca016" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 37, + "AddCost": { + "type": "dword", + "value": 609 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak provides a +2 modifier to all saving throws." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Resistance +2" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca061" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca061" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 38, + "AddCost": { + "type": "dword", + "value": 4859 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Resistance +3" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb018" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb018" + }, + "xModelPart1": { + "type": "word", + "value": 5 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 39, + "AddCost": { + "type": "dword", + "value": 1234 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Resistance +4" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb058" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb058" + }, + "xModelPart1": { + "type": "word", + "value": 2 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 40, + "AddCost": { + "type": "dword", + "value": 7734 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak provides a +5 modifier to all saving throws." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Resistance +5" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb084" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb084" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 41, + "AddCost": { + "type": "dword", + "value": 15531 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 24000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In addition to it's obvious powers the cloak prevents damage from falling." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of the Bat" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 5 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb080" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb080" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 42, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25101 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of the Manta Ray" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 201 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb058" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb071" + }, + "xModelPart1": { + "type": "word", + "value": 5 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 43, + "AddCost": { + "type": "dword", + "value": 12559 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 90000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak gives it's wearer Spell Resistance 21." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mantle of Spell Resistance" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc072" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc072" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 44, + "AddCost": { + "type": "dword", + "value": 489 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "", + "id": 13768 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Nymph Cloak +2", + "id": 13844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca073" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca073" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 45, + "AddCost": { + "type": "dword", + "value": 1959 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak gives +4 charisma.", + "id": 13768 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Nymph Cloak +4", + "id": 13844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb065" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb065" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 46, + "AddCost": { + "type": "dword", + "value": 4409 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 36000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak gives +6 charisma.", + "id": 13768 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Nymph Cloak +6", + "id": 13844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc020" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc020" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 47, + "AddCost": { + "type": "dword", + "value": 16710 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 76000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Vestiments of Faith" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 6 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 22 + }, + "Subtype": { + "type": "word", + "value": 4 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc061" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc061" + }, + "xModelPart1": { + "type": "word", + "value": 2 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 48, + "AddCost": { + "type": "dword", + "value": 4560 + }, + "BaseItem": { + "type": "int", + "value": 36 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Caster's Gloves" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca090" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca090" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 49, + "AddCost": { + "type": "dword", + "value": 489 + }, + "BaseItem": { + "type": "int", + "value": 36 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gauntlets of Dexterity +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca070" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca070" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 50, + "AddCost": { + "type": "dword", + "value": 1959 + }, + "BaseItem": { + "type": "int", + "value": 36 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gauntlets of Dexterity +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb061" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb061" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 51, + "AddCost": { + "type": "dword", + "value": 4409 + }, + "BaseItem": { + "type": "int", + "value": 36 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 36000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gauntlets of Dexterity +6" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc016" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc016" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 52, + "AddCost": { + "type": "dword", + "value": 489 + }, + "BaseItem": { + "type": "int", + "value": 36 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gauntlets of Ogre Power" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca068" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca068" + }, + "xModelPart1": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 53, + "AddCost": { + "type": "dword", + "value": 2049 + }, + "BaseItem": { + "type": "int", + "value": 36 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 11500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gauntlets of Stone" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 260 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb035" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb035" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 54, + "AddCost": { + "type": "dword", + "value": 3121 + }, + "BaseItem": { + "type": "int", + "value": 36 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Despite their name they are actually quite good against anything that goes poke in the night." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gloves of Arrow Deflection" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca062" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca062" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 55, + "AddCost": { + "type": "dword", + "value": 2196 + }, + "BaseItem": { + "type": "int", + "value": 36 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These gloves are very popular with adventurer's and people of less than honest natures.\n\nThey allow the wearer to store just about any item into a extra dimensional pocket, to be recovered later." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gloves of Storing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca044" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca044" + }, + "xModelPart1": { + "type": "word", + "value": 2 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 56, + "AddCost": { + "type": "dword", + "value": 187 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 37 + }, + "Cloth2Color": { + "type": "byte", + "value": 11 + }, + "Cost": { + "type": "dword", + "value": 7000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 3 + }, + "Leather2Color": { + "type": "byte", + "value": 2 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Alchemist's Outfit", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca096" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca096" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 10 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 1 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 1 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 10 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 8 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 4 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 1 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 1 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 57, + "AddCost": { + "type": "dword", + "value": 4240 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 9 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 9 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 18 + }, + "Cloth2Color": { + "type": "byte", + "value": 19 + }, + "Cost": { + "type": "dword", + "value": 10000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This robe gives it's wearer the ability to blend into their surroundings. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 15 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Robe of Blending" + } + }, + "Metal1Color": { + "type": "byte", + "value": 48 + }, + "Metal2Color": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 15 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 5 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb030" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb030" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 9 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 1 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 1 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 9 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 4 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 1 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 1 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 58, + "AddCost": { + "type": "dword", + "value": 17990 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 14 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 34 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 50 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 38 + }, + "Cloth2Color": { + "type": "byte", + "value": 39 + }, + "Cost": { + "type": "dword", + "value": 90000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The robe of eyes allows the wearer to see in a 360 degree arc at all times." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 11 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Robe of Eyes" + } + }, + "Metal1Color": { + "type": "byte", + "value": 49 + }, + "Metal2Color": { + "type": "byte", + "value": 20 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 26 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 15 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 15 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 17 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 71 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc073" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc073" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 14 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 8 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 12 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 34 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 8 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 12 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 4 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 50 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 59, + "AddCost": { + "type": "dword", + "value": 26999 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 11 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 37 + }, + "Cloth2Color": { + "type": "byte", + "value": 25 + }, + "Cost": { + "type": "dword", + "value": 27000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This robe when activated works for 10 rounds. The first five rounds the wearer gets an additional 10% concealment up to 50% which will last the duration of the activation.\n\nEvery round it is activated anyone who is within 30 feet and can see the wearer may become Dazed by the lights cast by this robe. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 37 + }, + "Leather2Color": { + "type": "byte", + "value": 23 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Robe of Scintillating Colors", + "id": 12930 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb091" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb091" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 11 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 1 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 1 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 11 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 6 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 1 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 1 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 60, + "AddCost": { + "type": "dword", + "value": 15784 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 46 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Cost": { + "type": "dword", + "value": 58000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 43 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Robe of Stars" + } + }, + "Metal1Color": { + "type": "byte", + "value": 36 + }, + "Metal2Color": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 374 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc052" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc052" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 12 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 1 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 1 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 12 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 5 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 1 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 1 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 61, + "AddCost": { + "type": "dword", + "value": 30498 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 44 + }, + "Cloth2Color": { + "type": "byte", + "value": 45 + }, + "Cost": { + "type": "dword", + "value": 70000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In addition to the powers listed below the robe also gives it's wearer Spell Resistance 17." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 44 + }, + "Leather2Color": { + "type": "byte", + "value": 44 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Robe of the Archmagi" + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc060" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc060" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 12 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 1 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 1 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 12 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 5 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 1 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 1 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 1 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2 + }, + { + "__struct_id": 3 + }, + { + "__struct_id": 1 + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "Clothes" + }, + "WillNotBuy": { + "type": "list", + "value": [] + }, + "WillOnlyBuy": { + "type": "list", + "value": [] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.906 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 47.5776 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 11, + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 10 + }, + "IdentifyPrice": { + "type": "int", + "value": 100 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Armor and Weapons" + } + }, + "MarkDown": { + "type": "int", + "value": 10 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "MaxBuyPrice": { + "type": "int", + "value": -1 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "OnStoreClosed": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "townstore" + }, + "StoreGold": { + "type": "int", + "value": -1 + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 544 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Cost": { + "type": "dword", + "value": 1400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Banded Mail + 1", + "id": 12843 + } + }, + "Metal1Color": { + "type": "byte", + "value": 10 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "banded101" + }, + "TemplateResRef": { + "type": "resref", + "value": "banded101" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 45 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 1276 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Cost": { + "type": "dword", + "value": 4400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Banded Mail + 2", + "id": 12843 + } + }, + "Metal1Color": { + "type": "byte", + "value": 2 + }, + "Metal2Color": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "banded201" + }, + "TemplateResRef": { + "type": "resref", + "value": "banded201" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 45 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 1388 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Cost": { + "type": "dword", + "value": 8400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Banded Mail + 3", + "id": 12843 + } + }, + "Metal1Color": { + "type": "byte", + "value": 2 + }, + "Metal2Color": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "banded301" + }, + "TemplateResRef": { + "type": "resref", + "value": "banded301" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 45 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 3880 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Cost": { + "type": "dword", + "value": 16400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Banded Mail + 4", + "id": 12843 + } + }, + "Metal1Color": { + "type": "byte", + "value": 11 + }, + "Metal2Color": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "banded401" + }, + "TemplateResRef": { + "type": "resref", + "value": "banded401" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 45 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 5752 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Cost": { + "type": "dword", + "value": 25400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Banded Mail + 5", + "id": 12843 + } + }, + "Metal1Color": { + "type": "byte", + "value": 8 + }, + "Metal2Color": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "banded501" + }, + "TemplateResRef": { + "type": "resref", + "value": "banded501" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 45 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 10988 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Cost": { + "type": "dword", + "value": 18900 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Banded Mail of Luck", + "id": 12843 + } + }, + "Metal1Color": { + "type": "byte", + "value": 2 + }, + "Metal2Color": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 346 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "banded601" + }, + "TemplateResRef": { + "type": "resref", + "value": "banded601" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 45 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 8960 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 21 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 21 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 11 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 23 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 22 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Cost": { + "type": "dword", + "value": 10500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This armor only has a armor check penalty of -4.\n\nArcane spell failure is reduced to 25%.\n\nThis armor must be unequiped to be sold to a merchant." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 3 + }, + "Leather2Color": { + "type": "byte", + "value": 23 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Plate", + "id": 181 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "fplate601" + }, + "TemplateResRef": { + "type": "resref", + "value": "fplate601" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 21 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 5 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 11 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 16 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 9 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 21 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 5 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 11 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 16 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 9 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 23 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 494 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 14 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 23 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Cost": { + "type": "dword", + "value": 2650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 21 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Full Plate +1", + "id": 181 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "fplate101" + }, + "TemplateResRef": { + "type": "resref", + "value": "fplate101" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 5 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 12 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 10 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 5 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 12 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 10 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 14 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 1226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 14 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 23 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Cost": { + "type": "dword", + "value": 5650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 21 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Full Plate +2", + "id": 181 + } + }, + "Metal1Color": { + "type": "byte", + "value": 5 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "fplate201" + }, + "TemplateResRef": { + "type": "resref", + "value": "fplate201" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 5 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 12 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 10 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 5 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 12 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 10 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 14 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 2338 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 14 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 23 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Cost": { + "type": "dword", + "value": 10650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 21 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Full Plate +3", + "id": 181 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "fplate301" + }, + "TemplateResRef": { + "type": "resref", + "value": "fplate301" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 5 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 12 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 10 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 5 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 12 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 10 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 14 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 10, + "AddCost": { + "type": "dword", + "value": 4830 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 14 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 23 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Cost": { + "type": "dword", + "value": 18650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 21 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Full Plate +4", + "id": 181 + } + }, + "Metal1Color": { + "type": "byte", + "value": 11 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "fplate401" + }, + "TemplateResRef": { + "type": "resref", + "value": "fplate401" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 5 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 12 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 10 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 5 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 12 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 10 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 14 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 11, + "AddCost": { + "type": "dword", + "value": 5602 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 14 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 23 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Cost": { + "type": "dword", + "value": 26550 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 21 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Full Plate +5", + "id": 181 + } + }, + "Metal1Color": { + "type": "byte", + "value": 11 + }, + "Metal2Color": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "fplate501" + }, + "TemplateResRef": { + "type": "resref", + "value": "fplate501" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 5 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 12 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 10 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 5 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 12 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 10 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 14 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 12, + "AddCost": { + "type": "dword", + "value": 494 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 33 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 21 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Cost": { + "type": "dword", + "value": 1750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Half Plate +1", + "id": 12839 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hplate101" + }, + "TemplateResRef": { + "type": "resref", + "value": "hplate101" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 9 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 9 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 13, + "AddCost": { + "type": "dword", + "value": 1226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 33 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 21 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Cost": { + "type": "dword", + "value": 4750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Half Plate +2", + "id": 12839 + } + }, + "Metal1Color": { + "type": "byte", + "value": 14 + }, + "Metal2Color": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hplate201" + }, + "TemplateResRef": { + "type": "resref", + "value": "hplate201" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 9 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 9 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 14, + "AddCost": { + "type": "dword", + "value": 2338 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 33 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 21 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Cost": { + "type": "dword", + "value": 9750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Half Plate +3", + "id": 12839 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hplate301" + }, + "TemplateResRef": { + "type": "resref", + "value": "hplate301" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 9 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 9 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 15, + "AddCost": { + "type": "dword", + "value": 3830 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 33 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 21 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Cost": { + "type": "dword", + "value": 16750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Half Plate +4", + "id": 12839 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hplate401" + }, + "TemplateResRef": { + "type": "resref", + "value": "hplate401" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 9 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 9 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 5702 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 33 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 21 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Cost": { + "type": "dword", + "value": 25750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Half Plate +5", + "id": 12839 + } + }, + "Metal1Color": { + "type": "byte", + "value": 49 + }, + "Metal2Color": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hplate501" + }, + "TemplateResRef": { + "type": "resref", + "value": "hplate501" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 9 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 9 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 17, + "AddCost": { + "type": "dword", + "value": 4846 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 20 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 20 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 9 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 20 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 20 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 21 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 23 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Cost": { + "type": "dword", + "value": 16650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 21 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Plate Armor of the Deep", + "id": 181 + } + }, + "Metal1Color": { + "type": "byte", + "value": 45 + }, + "Metal2Color": { + "type": "byte", + "value": 39 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 201 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "fplate602" + }, + "TemplateResRef": { + "type": "resref", + "value": "fplate602" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 8 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 20 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 5 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 12 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 20 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 10 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 9 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 20 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 5 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 12 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 20 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 10 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 18, + "AddCost": { + "type": "dword", + "value": 494 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 30 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 12 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Cost": { + "type": "dword", + "value": 1350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 12 + }, + "Leather2Color": { + "type": "byte", + "value": 15 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Splint Mail +1", + "id": 12838 + } + }, + "Metal1Color": { + "type": "byte", + "value": 22 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "splint101" + }, + "TemplateResRef": { + "type": "resref", + "value": "splint101" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 30 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 19, + "AddCost": { + "type": "dword", + "value": 1226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 30 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 12 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Cost": { + "type": "dword", + "value": 4350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 12 + }, + "Leather2Color": { + "type": "byte", + "value": 15 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Splint Mail +2", + "id": 12838 + } + }, + "Metal1Color": { + "type": "byte", + "value": 22 + }, + "Metal2Color": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "splint201" + }, + "TemplateResRef": { + "type": "resref", + "value": "splint201" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 30 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 20, + "AddCost": { + "type": "dword", + "value": 2338 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 30 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 12 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Cost": { + "type": "dword", + "value": 9350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 12 + }, + "Leather2Color": { + "type": "byte", + "value": 15 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Splint Mail +3", + "id": 12838 + } + }, + "Metal1Color": { + "type": "byte", + "value": 20 + }, + "Metal2Color": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "splint301" + }, + "TemplateResRef": { + "type": "resref", + "value": "splint301" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 30 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 21, + "AddCost": { + "type": "dword", + "value": 3830 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 30 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 12 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Cost": { + "type": "dword", + "value": 16350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 12 + }, + "Leather2Color": { + "type": "byte", + "value": 15 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Splint Mail +4", + "id": 12838 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "splint401" + }, + "TemplateResRef": { + "type": "resref", + "value": "splint401" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 30 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 22, + "AddCost": { + "type": "dword", + "value": 5702 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 30 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 12 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Cost": { + "type": "dword", + "value": 25350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 12 + }, + "Leather2Color": { + "type": "byte", + "value": 15 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Splint Mail +5", + "id": 12838 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "splint501" + }, + "TemplateResRef": { + "type": "resref", + "value": "splint501" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 7 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 15 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 7 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 17 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 30 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 23, + "AddCost": { + "type": "dword", + "value": 6477 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6480 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet projects a divine light.\n\nUndead take 3d8 damage.\nConstructs take 1d6 damage.\nAll other target take 1d8 damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Circlet of Blasting" + } + }, + "Metal1Color": { + "type": "byte", + "value": 19 + }, + "Metal2Color": { + "type": "byte", + "value": 10 + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca094" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca094" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 24, + "AddCost": { + "type": "dword", + "value": 23757 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 23760 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet projects a divine light.\n\nUndead take 40 damage.\nConstructs take 18 damage.\nAll other target take 24 damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Circlet of Blasting (Major)" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 13 + }, + "ModelPart1": { + "type": "byte", + "value": 27 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb079" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb079" + }, + "xModelPart1": { + "type": "word", + "value": 27 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 25, + "AddCost": { + "type": "dword", + "value": 22747 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 45 + }, + "Cloth2Color": { + "type": "byte", + "value": 45 + }, + "Cost": { + "type": "dword", + "value": 56000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Funny how people seem to fall in love with the wearer of this rather ugly helmet." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eyes of Charming" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 34 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc051" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc051" + }, + "xModelPart1": { + "type": "word", + "value": 15 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 26, + "AddCost": { + "type": "dword", + "value": 997 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 24500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet can inspire a feeling of dread to any who view it. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eyes of Doom" + } + }, + "Metal1Color": { + "type": "byte", + "value": 55 + }, + "Metal2Color": { + "type": "byte", + "value": 24 + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 91 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 9 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb082" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb082" + }, + "xModelPart1": { + "type": "word", + "value": 24 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 27, + "AddCost": { + "type": "dword", + "value": 26222 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 98000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eyes of Petrification" + } + }, + "Metal1Color": { + "type": "byte", + "value": 51 + }, + "Metal2Color": { + "type": "byte", + "value": 48 + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 398 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc076" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc076" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 28, + "AddCost": { + "type": "dword", + "value": 638 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet is a good tool for finding things hiding waiting to ambush you." + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eyes of the Eagle" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 28 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 17 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca017" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca017" + }, + "xModelPart1": { + "type": "word", + "value": 28 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 29, + "AddCost": { + "type": "dword", + "value": 26172 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In addition to the powers listed this helm causes 1d6 positive damage to undead nearby.\n\nThe helm can also be used to enchant the weapon of the wearer with a flaming effect adding 1d6 fire damage to the weapon for 1 minute." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Brilliance" + } + }, + "Metal1Color": { + "type": "byte", + "value": 13 + }, + "Metal2Color": { + "type": "byte", + "value": 48 + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 109 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 163 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 213 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 280 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 5 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc097" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc097" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 30, + "AddCost": { + "type": "dword", + "value": 1158 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet grants the wearer an amazing ability to understand the function of magic items." + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Comprehension" + } + }, + "Metal1Color": { + "type": "byte", + "value": 14 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca051" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca051" + }, + "xModelPart1": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 31, + "AddCost": { + "type": "dword", + "value": 2058 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet is useful for finding hidden objects such as secret doors, hidden treasures and traps." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Detection" + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 14 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca058" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca058" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32, + "AddCost": { + "type": "dword", + "value": 558 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet is a fine example that people only see and hear what they want too." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Disguise" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 12 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca037" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca037" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 33, + "AddCost": { + "type": "dword", + "value": 487 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Intellect +2" + } + }, + "Metal1Color": { + "type": "byte", + "value": 11 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca071" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca071" + }, + "xModelPart1": { + "type": "word", + "value": 18 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 34, + "AddCost": { + "type": "dword", + "value": 1957 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet give +4 Intelligence when worn." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 30 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Intellect +4" + } + }, + "Metal1Color": { + "type": "byte", + "value": 10 + }, + "Metal2Color": { + "type": "byte", + "value": 2 + }, + "ModelPart1": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb063" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb063" + }, + "xModelPart1": { + "type": "word", + "value": 19 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 35, + "AddCost": { + "type": "dword", + "value": 4407 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 36000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet give +4 Intelligence when worn." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 30 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Intellect +6" + } + }, + "Metal1Color": { + "type": "byte", + "value": 10 + }, + "Metal2Color": { + "type": "byte", + "value": 2 + }, + "ModelPart1": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc018" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc018" + }, + "xModelPart1": { + "type": "word", + "value": 19 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 36, + "AddCost": { + "type": "dword", + "value": 638 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet is useful for finding hidden objects such as secret doors, hidden treasures and traps." + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Minute Seeing" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 14 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca018" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca018" + }, + "xModelPart1": { + "type": "word", + "value": 17 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 37, + "AddCost": { + "type": "dword", + "value": 6997 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet grants the wearer the ability to se in the dark." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Night" + } + }, + "Metal1Color": { + "type": "byte", + "value": 11 + }, + "Metal2Color": { + "type": "byte", + "value": 12 + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 26 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb014" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb014" + }, + "xModelPart1": { + "type": "word", + "value": 23 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 38, + "AddCost": { + "type": "dword", + "value": 987 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet has a funny way of making people agree with what you say while wearing it." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Persuasion" + } + }, + "Metal1Color": { + "type": "byte", + "value": 11 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca075" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca075" + }, + "xModelPart1": { + "type": "word", + "value": 15 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 39, + "AddCost": { + "type": "dword", + "value": 7958 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 31000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet allows the wearer to be able to take advantage of a merchants thoughts to get the best price." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Telepathy" + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 11 + }, + "ModelPart1": { + "type": "byte", + "value": 28 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 25 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 12 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc008" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc008" + }, + "xModelPart1": { + "type": "word", + "value": 28 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 40, + "AddCost": { + "type": "dword", + "value": 18346 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 48600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet allows the wearer to instantly teleport to a place they can see." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Teleportation" + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 11 + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 513 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc033" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc033" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 41, + "AddCost": { + "type": "dword", + "value": 22875 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 130000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This rather odd looking helmet allows the wearer to breath under water. Including inside the deadly clutches of a water elemental." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helmet of Kwalish" + } + }, + "Metal1Color": { + "type": "byte", + "value": 8 + }, + "Metal2Color": { + "type": "byte", + "value": 33 + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 75 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 5 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 20 + }, + "Subtype": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 201 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc087" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc087" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 42, + "AddCost": { + "type": "dword", + "value": 18237 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 24000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This rather odd looking helmet allows the wearer to breath under water. Including inside the deadly clutches of a water elemental." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helmet of Water Breathing" + } + }, + "Metal1Color": { + "type": "byte", + "value": 18 + }, + "Metal2Color": { + "type": "byte", + "value": 36 + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 201 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb081" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb081" + }, + "xModelPart1": { + "type": "word", + "value": 6 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 43, + "AddCost": { + "type": "dword", + "value": 24997 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 15 + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Once per day this mask can be used to attempt to instantly kill one target. The target must make a Fortitude Save DC20 or die. If the victim makes the saving throw they still take 3d6+13 Negative Energy Damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mask of the Skull" + } + }, + "Metal1Color": { + "type": "byte", + "value": 14 + }, + "Metal2Color": { + "type": "byte", + "value": 14 + }, + "ModelPart1": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb085" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb085" + }, + "xModelPart1": { + "type": "word", + "value": 26 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 44, + "AddCost": { + "type": "dword", + "value": 494 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Cost": { + "type": "dword", + "value": 1250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chain Shirt +1", + "id": 12844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chains101" + }, + "TemplateResRef": { + "type": "resref", + "value": "chains101" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 6 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 3 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 6 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 3 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 36 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 45, + "AddCost": { + "type": "dword", + "value": 1226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Cost": { + "type": "dword", + "value": 4250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chain Shirt +2", + "id": 12844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 20 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chains201" + }, + "TemplateResRef": { + "type": "resref", + "value": "chains201" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 6 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 3 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 6 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 3 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 36 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 46, + "AddCost": { + "type": "dword", + "value": 2338 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Cost": { + "type": "dword", + "value": 9250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chain Shirt +3", + "id": 12844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 10 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chains301" + }, + "TemplateResRef": { + "type": "resref", + "value": "chains301" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 6 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 3 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 6 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 3 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 36 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 47, + "AddCost": { + "type": "dword", + "value": 3830 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Cost": { + "type": "dword", + "value": 16250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chain Shirt +4", + "id": 12844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 10 + }, + "Metal2Color": { + "type": "byte", + "value": 14 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chains401" + }, + "TemplateResRef": { + "type": "resref", + "value": "chains401" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 6 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 3 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 6 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 3 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 36 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 48, + "AddCost": { + "type": "dword", + "value": 5702 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Cost": { + "type": "dword", + "value": 25250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chain Shirt +5", + "id": 12844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chains501" + }, + "TemplateResRef": { + "type": "resref", + "value": "chains501" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 6 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 3 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 6 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 3 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 36 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 49, + "AddCost": { + "type": "dword", + "value": 5785 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 13 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 5800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Allows a person with the Wild Shape ability to use it an additional time per day.\n\nNote: You should use your normal allowance of wild shapes FIRST or this item may malfunction." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 31 + }, + "Leather2Color": { + "type": "byte", + "value": 14 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Druids Vestiment", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 25 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca088" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca088" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 50, + "AddCost": { + "type": "dword", + "value": 494 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 16 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 7 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 1160 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 5 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Leather Armor +1", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 27 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "leather101" + }, + "TemplateResRef": { + "type": "resref", + "value": "leather101" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 16 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 51, + "AddCost": { + "type": "dword", + "value": 1226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 16 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 7 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 4160 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 3 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Leather Armor +2", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 27 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "leather201" + }, + "TemplateResRef": { + "type": "resref", + "value": "leather201" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 16 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 52, + "AddCost": { + "type": "dword", + "value": 2338 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 49 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 7 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 9160 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 3 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Leather Armor +3", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 27 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "leather301" + }, + "TemplateResRef": { + "type": "resref", + "value": "leather301" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 49 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 53, + "AddCost": { + "type": "dword", + "value": 3830 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 49 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 7 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 16160 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 6 + }, + "Leather2Color": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Leather Armor +4", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 27 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "leather401" + }, + "TemplateResRef": { + "type": "resref", + "value": "leather401" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 49 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 54, + "AddCost": { + "type": "dword", + "value": 5702 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 49 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 3 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 25160 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 2 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Leather Armor +5", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "leather501" + }, + "TemplateResRef": { + "type": "resref", + "value": "leather501" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 49 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 55, + "AddCost": { + "type": "dword", + "value": 910 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 15 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Cost": { + "type": "dword", + "value": 1100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This armor has no armor check penalty.\n\nArcane spell failure is reduced to 10%.\n\nThis armor must be unequiped to sell." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mithral Shirt", + "id": 12844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chains601" + }, + "TemplateResRef": { + "type": "resref", + "value": "chains601" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 6 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 3 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 6 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 3 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 36 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 56, + "AddCost": { + "type": "dword", + "value": 494 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 28 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 15 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Cost": { + "type": "dword", + "value": 1155 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Padded Armor +1", + "id": 12841 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "padded101" + }, + "TemplateResRef": { + "type": "resref", + "value": "padded101" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 25 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 25 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 28 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 57, + "AddCost": { + "type": "dword", + "value": 1226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 28 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 36 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Cost": { + "type": "dword", + "value": 4155 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Padded Armor +2", + "id": 12841 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "padded201" + }, + "TemplateResRef": { + "type": "resref", + "value": "padded201" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 25 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 25 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 28 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 58, + "AddCost": { + "type": "dword", + "value": 2338 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 28 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 26 + }, + "Cost": { + "type": "dword", + "value": 9155 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Padded Armor +3", + "id": 12841 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "padded301" + }, + "TemplateResRef": { + "type": "resref", + "value": "padded301" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 25 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 25 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 28 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 59, + "AddCost": { + "type": "dword", + "value": 3830 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 28 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 41 + }, + "Cloth2Color": { + "type": "byte", + "value": 42 + }, + "Cost": { + "type": "dword", + "value": 16155 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Padded Armor +4", + "id": 12841 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 33 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "padded401" + }, + "TemplateResRef": { + "type": "resref", + "value": "padded401" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 25 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 25 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 28 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 60, + "AddCost": { + "type": "dword", + "value": 5702 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 20 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 44 + }, + "Cloth2Color": { + "type": "byte", + "value": 36 + }, + "Cost": { + "type": "dword", + "value": 25155 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Padded Armor +5", + "id": 12841 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 33 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "padded501" + }, + "TemplateResRef": { + "type": "resref", + "value": "padded501" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 25 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 10 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 15 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 25 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 8 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 20 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 61, + "AddCost": { + "type": "dword", + "value": 504 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 6 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 1175 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 3 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Studded Leather Armor +1", + "id": 12836 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 33 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sleather101" + }, + "TemplateResRef": { + "type": "resref", + "value": "sleather101" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 7 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 62, + "AddCost": { + "type": "dword", + "value": 1236 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 6 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 4175 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 2 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Studded Leather Armor +2", + "id": 12836 + } + }, + "Metal1Color": { + "type": "byte", + "value": 12 + }, + "Metal2Color": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 33 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sleather201" + }, + "TemplateResRef": { + "type": "resref", + "value": "sleather201" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 7 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 8 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 9 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 8 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 9 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 63, + "AddCost": { + "type": "dword", + "value": 2348 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 6 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 9175 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 5 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Studded Leather Armor +3", + "id": 12836 + } + }, + "Metal1Color": { + "type": "byte", + "value": 12 + }, + "Metal2Color": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 33 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sleather301" + }, + "TemplateResRef": { + "type": "resref", + "value": "sleather301" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 7 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 8 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 9 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 8 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 9 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 64, + "AddCost": { + "type": "dword", + "value": 3840 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 44 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 6 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 16175 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Studded Leather Armor +4", + "id": 12836 + } + }, + "Metal1Color": { + "type": "byte", + "value": 12 + }, + "Metal2Color": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sleather401" + }, + "TemplateResRef": { + "type": "resref", + "value": "sleather401" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 7 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 8 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 9 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 8 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 9 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 44 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65, + "AddCost": { + "type": "dword", + "value": 5712 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 44 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 6 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 25175 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 15 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Studded Leather Armor +5", + "id": 12836 + } + }, + "Metal1Color": { + "type": "byte", + "value": 12 + }, + "Metal2Color": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sleather501" + }, + "TemplateResRef": { + "type": "resref", + "value": "sleather501" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 7 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 8 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 9 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 8 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 9 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 7 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 44 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 66, + "AddCost": { + "type": "dword", + "value": 1757 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 49 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 7 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This vest has more secret compartments than you will ever find and everyone has a lock pick.\n\nIn addition to adding a bonus to open locks the vest itself can be used as a set of master work thief tools. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Vest of Escape", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 9 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca042" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca042" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 1 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 8 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 49 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 67, + "AddCost": { + "type": "dword", + "value": 2276 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 15 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Cost": { + "type": "dword", + "value": 5350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 14 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Adamantine Breastplate", + "id": 12842 + } + }, + "Metal1Color": { + "type": "byte", + "value": 49 + }, + "Metal2Color": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "breast601" + }, + "TemplateResRef": { + "type": "resref", + "value": "breast601" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 25 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 68, + "AddCost": { + "type": "dword", + "value": 544 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 3 + }, + "Cloth2Color": { + "type": "byte", + "value": 4 + }, + "Cost": { + "type": "dword", + "value": 1350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Breastplate +1", + "id": 12842 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 53 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "breast101" + }, + "TemplateResRef": { + "type": "resref", + "value": "breast101" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 25 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 69, + "AddCost": { + "type": "dword", + "value": 1276 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 3 + }, + "Cloth2Color": { + "type": "byte", + "value": 4 + }, + "Cost": { + "type": "dword", + "value": 4350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Breastplate +2", + "id": 12842 + } + }, + "Metal1Color": { + "type": "byte", + "value": 14 + }, + "Metal2Color": { + "type": "byte", + "value": 53 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "breast201" + }, + "TemplateResRef": { + "type": "resref", + "value": "breast201" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 25 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 70, + "AddCost": { + "type": "dword", + "value": 2188 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 3 + }, + "Cloth2Color": { + "type": "byte", + "value": 4 + }, + "Cost": { + "type": "dword", + "value": 9150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Breastplate +3", + "id": 12842 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "breast301" + }, + "TemplateResRef": { + "type": "resref", + "value": "breast301" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 25 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 71, + "AddCost": { + "type": "dword", + "value": 3880 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 3 + }, + "Cloth2Color": { + "type": "byte", + "value": 4 + }, + "Cost": { + "type": "dword", + "value": 16350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Breastplate +4", + "id": 12842 + } + }, + "Metal1Color": { + "type": "byte", + "value": 13 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "breast401" + }, + "TemplateResRef": { + "type": "resref", + "value": "breast401" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 25 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 72, + "AddCost": { + "type": "dword", + "value": 5752 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 3 + }, + "Cloth2Color": { + "type": "byte", + "value": 4 + }, + "Cost": { + "type": "dword", + "value": 25350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Breastplate +5", + "id": 12842 + } + }, + "Metal1Color": { + "type": "byte", + "value": 13 + }, + "Metal2Color": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "breast501" + }, + "TemplateResRef": { + "type": "resref", + "value": "breast501" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 25 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 73, + "AddCost": { + "type": "dword", + "value": 18526 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 14 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 11 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 14 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 24 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 46 + }, + "Cloth2Color": { + "type": "byte", + "value": 47 + }, + "Cost": { + "type": "dword", + "value": 21600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This distinctive breastplate gives +4 to charisma." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 5 + }, + "Leather2Color": { + "type": "byte", + "value": 4 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Breastplate of Command", + "id": 12842 + } + }, + "Metal1Color": { + "type": "byte", + "value": 11 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "breast602" + }, + "TemplateResRef": { + "type": "resref", + "value": "breast602" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 3 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 11 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 14 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 3 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 11 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 1 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 14 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 4 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 24 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 74, + "AddCost": { + "type": "dword", + "value": 494 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 10 + }, + "Cost": { + "type": "dword", + "value": 1300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 10 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chainmail +1", + "id": 184 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 43 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chain101" + }, + "TemplateResRef": { + "type": "resref", + "value": "chain101" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 5 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 5 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 75, + "AddCost": { + "type": "dword", + "value": 1226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 52 + }, + "Cloth2Color": { + "type": "byte", + "value": 36 + }, + "Cost": { + "type": "dword", + "value": 4300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 5 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chainmail +2", + "id": 184 + } + }, + "Metal1Color": { + "type": "byte", + "value": 2 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 43 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chain201" + }, + "TemplateResRef": { + "type": "resref", + "value": "chain201" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 5 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 5 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 76, + "AddCost": { + "type": "dword", + "value": 2338 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Cost": { + "type": "dword", + "value": 9300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 5 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chainmail +3", + "id": 184 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 43 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chain301" + }, + "TemplateResRef": { + "type": "resref", + "value": "chain301" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 5 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 5 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 77, + "AddCost": { + "type": "dword", + "value": 3830 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Cost": { + "type": "dword", + "value": 16300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 5 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chainmail +4", + "id": 184 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 43 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chain401" + }, + "TemplateResRef": { + "type": "resref", + "value": "chain401" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 5 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 5 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 78, + "AddCost": { + "type": "dword", + "value": 5702 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Cost": { + "type": "dword", + "value": 25300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 5 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chainmail +5", + "id": 184 + } + }, + "Metal1Color": { + "type": "byte", + "value": 15 + }, + "Metal2Color": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 43 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chain501" + }, + "TemplateResRef": { + "type": "resref", + "value": "chain501" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 10 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 5 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 12 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 19 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 5 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 79, + "AddCost": { + "type": "dword", + "value": 494 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 3 + }, + "Cost": { + "type": "dword", + "value": 1165 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hide Armor +1", + "id": 12840 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 46 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hide101" + }, + "TemplateResRef": { + "type": "resref", + "value": "hide101" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 3 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 13 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 3 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 13 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 80, + "AddCost": { + "type": "dword", + "value": 1226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 3 + }, + "Cost": { + "type": "dword", + "value": 4165 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 13 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hide Armor +2", + "id": 12840 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 46 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hide201" + }, + "TemplateResRef": { + "type": "resref", + "value": "hide201" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 3 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 13 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 3 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 13 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 81, + "AddCost": { + "type": "dword", + "value": 2338 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 3 + }, + "Cost": { + "type": "dword", + "value": 9165 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 13 + }, + "Leather2Color": { + "type": "byte", + "value": 15 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hide Armor +3", + "id": 12840 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 46 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hide301" + }, + "TemplateResRef": { + "type": "resref", + "value": "hide301" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 3 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 13 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 3 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 13 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 82, + "AddCost": { + "type": "dword", + "value": 3830 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 12 + }, + "Cloth2Color": { + "type": "byte", + "value": 3 + }, + "Cost": { + "type": "dword", + "value": 16165 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 6 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hide Armor +4", + "id": 12840 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 46 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hide401" + }, + "TemplateResRef": { + "type": "resref", + "value": "hide401" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 3 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 3 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 83, + "AddCost": { + "type": "dword", + "value": 5702 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 12 + }, + "Cloth2Color": { + "type": "byte", + "value": 3 + }, + "Cost": { + "type": "dword", + "value": 25165 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 15 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hide Armor +5", + "id": 12840 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 46 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hide501" + }, + "TemplateResRef": { + "type": "resref", + "value": "hide501" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 0 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 3 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 8 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 4 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 16 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 4 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 3 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 4 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 15 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 3 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 84, + "AddCost": { + "type": "dword", + "value": 444 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 35 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 9 + }, + "Cost": { + "type": "dword", + "value": 1200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 11 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scale Mail +1", + "id": 12837 + } + }, + "Metal1Color": { + "type": "byte", + "value": 6 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scale101" + }, + "TemplateResRef": { + "type": "resref", + "value": "scale101" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 5 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 3 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 5 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 3 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 35 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 85, + "AddCost": { + "type": "dword", + "value": 1176 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 35 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 9 + }, + "Cost": { + "type": "dword", + "value": 4200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 11 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scale Mail +2", + "id": 12837 + } + }, + "Metal1Color": { + "type": "byte", + "value": 2 + }, + "Metal2Color": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scale201" + }, + "TemplateResRef": { + "type": "resref", + "value": "scale201" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 5 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 3 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 5 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 3 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 35 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 86, + "AddCost": { + "type": "dword", + "value": 2188 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 35 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 9 + }, + "Cost": { + "type": "dword", + "value": 9100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 11 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scale Mail +3", + "id": 12837 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scale301" + }, + "TemplateResRef": { + "type": "resref", + "value": "scale301" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 5 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 3 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 5 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 3 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 35 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 87, + "AddCost": { + "type": "dword", + "value": 3780 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 35 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 9 + }, + "Cost": { + "type": "dword", + "value": 16200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 11 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scale Mail +4", + "id": 12837 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scale401" + }, + "TemplateResRef": { + "type": "resref", + "value": "scale401" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 5 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 3 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 5 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 3 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 35 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 88, + "AddCost": { + "type": "dword", + "value": 5652 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 35 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 9 + }, + "Cost": { + "type": "dword", + "value": 25200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 11 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scale Mail +5", + "id": 12837 + } + }, + "Metal1Color": { + "type": "byte", + "value": 12 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scale501" + }, + "TemplateResRef": { + "type": "resref", + "value": "scale501" + }, + "xArmorPart_Belt": { + "type": "word", + "value": 11 + }, + "xArmorPart_LBice": { + "type": "word", + "value": 5 + }, + "xArmorPart_LFArm": { + "type": "word", + "value": 3 + }, + "xArmorPart_LFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_LHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_LShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_LShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_LThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Neck": { + "type": "word", + "value": 1 + }, + "xArmorPart_Pelvi": { + "type": "word", + "value": 6 + }, + "xArmorPart_RBice": { + "type": "word", + "value": 5 + }, + "xArmorPart_RFArm": { + "type": "word", + "value": 3 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 5 + }, + "xArmorPart_RHand": { + "type": "word", + "value": 4 + }, + "xArmorPart_Robe": { + "type": "word", + "value": 0 + }, + "xArmorPart_RShin": { + "type": "word", + "value": 17 + }, + "xArmorPart_RShou": { + "type": "word", + "value": 0 + }, + "xArmorPart_RThig": { + "type": "word", + "value": 6 + }, + "xArmorPart_Torso": { + "type": "word", + "value": 35 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 89, + "AddCost": { + "type": "dword", + "value": 1464 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2140 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Adamanite Shield", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 53 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield602" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield602" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 90, + "AddCost": { + "type": "dword", + "value": 464 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1140 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Large Shield +1", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 53 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield101" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 91, + "AddCost": { + "type": "dword", + "value": 1196 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4140 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Large Shield +2", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 53 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield201" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield201" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 92, + "AddCost": { + "type": "dword", + "value": 2308 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9140 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Large Shield +3", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 53 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield301" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield301" + }, + "xModelPart1": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 93, + "AddCost": { + "type": "dword", + "value": 3800 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16140 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Large Shield +4", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 53 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield401" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield401" + }, + "xModelPart1": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 94, + "AddCost": { + "type": "dword", + "value": 5672 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25140 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Large Shield +5", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 56 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield501" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield501" + }, + "xModelPart1": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 95, + "AddCost": { + "type": "dword", + "value": 6195 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9140 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This shield has the ability to give it's user 1 extra attack per round, up to a maximum of 5 attacks. The effect lasts for 10 rounds and may be used 3 times per day." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lion's Shield", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 56 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield604" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield604" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 96, + "AddCost": { + "type": "dword", + "value": 880 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 990 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This shield has no armor check penalty." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mithral Large Shield", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 56 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield601" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield601" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 97, + "AddCost": { + "type": "dword", + "value": 14300 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50140 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When activated this shield becomes a deadly form of defense. The shield will attempt to destroy any who attack you in melee for 1 round with a large burst of negative energy." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shield of Absorption", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 5 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 20 + }, + "Subtype": { + "type": "word", + "value": 12 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 56 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield606" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield606" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 98, + "AddCost": { + "type": "dword", + "value": 1963 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2640 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This shield has the ability to surround the user with a barrier of thorns. These thorns do 1d6 piercing damage to anyone who hits the attacker with a melee attack.\n\nThe effect may be used 3 times per day and last for 1 minute." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spined Shield", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 56 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield603" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield603" + }, + "xModelPart1": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 99, + "AddCost": { + "type": "dword", + "value": 1547 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 15129 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Winged Shield", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 137 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield605" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield605" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 100, + "AddCost": { + "type": "dword", + "value": 763 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3153 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Caster's Shield", + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 240 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 29 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 31 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 28 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sshield602" + }, + "TemplateResRef": { + "type": "resref", + "value": "sshield602" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 101, + "AddCost": { + "type": "dword", + "value": 238 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 257 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This shield has no armor check penalty." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dark Wood Shield", + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sshield601" + }, + "TemplateResRef": { + "type": "resref", + "value": "sshield601" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 102, + "AddCost": { + "type": "dword", + "value": 494 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1159 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Small Shield +1", + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sshield101" + }, + "TemplateResRef": { + "type": "resref", + "value": "sshield101" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 103, + "AddCost": { + "type": "dword", + "value": 1226 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4159 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Small Shield +2", + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sshield201" + }, + "TemplateResRef": { + "type": "resref", + "value": "sshield201" + }, + "xModelPart1": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 104, + "AddCost": { + "type": "dword", + "value": 2338 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9159 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Small Shield +3", + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sshield301" + }, + "TemplateResRef": { + "type": "resref", + "value": "sshield301" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 105, + "AddCost": { + "type": "dword", + "value": 3830 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16159 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Small Shield +4", + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 62 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sshield401" + }, + "TemplateResRef": { + "type": "resref", + "value": "sshield401" + }, + "xModelPart1": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 106, + "AddCost": { + "type": "dword", + "value": 5702 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25159 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Small Shield +5", + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 62 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sshield501" + }, + "TemplateResRef": { + "type": "resref", + "value": "sshield501" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 107, + "AddCost": { + "type": "dword", + "value": 424 + }, + "BaseItem": { + "type": "int", + "value": 57 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1110 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tower Shield +1", + "id": 1551 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 62 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "tshield101" + }, + "TemplateResRef": { + "type": "resref", + "value": "tshield101" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 108, + "AddCost": { + "type": "dword", + "value": 1156 + }, + "BaseItem": { + "type": "int", + "value": 57 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4110 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tower Shield +2", + "id": 1551 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 62 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "tshield201" + }, + "TemplateResRef": { + "type": "resref", + "value": "tshield201" + }, + "xModelPart1": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 109, + "AddCost": { + "type": "dword", + "value": 2268 + }, + "BaseItem": { + "type": "int", + "value": 57 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9110 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tower Shield +3", + "id": 1551 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 63 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "tshield301" + }, + "TemplateResRef": { + "type": "resref", + "value": "tshield301" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 110, + "AddCost": { + "type": "dword", + "value": 3760 + }, + "BaseItem": { + "type": "int", + "value": 57 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16110 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tower Shield +4", + "id": 1551 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 64 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "tshield401" + }, + "TemplateResRef": { + "type": "resref", + "value": "tshield401" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 111, + "AddCost": { + "type": "dword", + "value": 5632 + }, + "BaseItem": { + "type": "int", + "value": 57 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25110 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tower Shield +5", + "id": 1551 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 64 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "tshield501" + }, + "TemplateResRef": { + "type": "resref", + "value": "tshield501" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + }, + { + "__struct_id": 4, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 126 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 131 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "+ 1 Sleep Arrow", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 26 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 82 + }, + "Subtype": { + "type": "word", + "value": 58 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow601" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow601" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 140 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow +1", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow101" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 1638 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2268 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This arrow is useful for shutting up spell casters." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow +1 of Dragon Slaying", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 34 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 24 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 5 + }, + "Param1Value": { + "type": "byte", + "value": 11 + }, + "PropertyName": { + "type": "word", + "value": 48 + }, + "Subtype": { + "type": "word", + "value": 21 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow602" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow602" + }, + "xModelPart1": { + "type": "word", + "value": 34 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 2842 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4038 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This arrow is useful for shutting up spell casters." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow +1 of Greater Dragon Slaying", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 34 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 24 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 5 + }, + "Param1Value": { + "type": "byte", + "value": 11 + }, + "PropertyName": { + "type": "word", + "value": 48 + }, + "Subtype": { + "type": "word", + "value": 21 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow603" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow603" + }, + "xModelPart1": { + "type": "word", + "value": 34 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 160 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 542 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow +2", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow201" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow201" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 337 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1868 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow +3", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow301" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow301" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 579 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4024 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow +4", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow401" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow401" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 885 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 7010 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow +5", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow501" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow501" + }, + "xModelPart1": { + "type": "word", + "value": 32 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 214 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 257 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "+ 2 Screaming Bolt", + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 26 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 82 + }, + "Subtype": { + "type": "word", + "value": 54 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bolt601" + }, + "TemplateResRef": { + "type": "resref", + "value": "bolt601" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 140 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bolt +1", + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bolt101" + }, + "TemplateResRef": { + "type": "resref", + "value": "bolt101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 10, + "AddCost": { + "type": "dword", + "value": 160 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 542 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bolt +2", + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bolt201" + }, + "TemplateResRef": { + "type": "resref", + "value": "bolt201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 11, + "AddCost": { + "type": "dword", + "value": 337 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1868 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bolt +3", + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bolt301" + }, + "TemplateResRef": { + "type": "resref", + "value": "bolt301" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 12, + "AddCost": { + "type": "dword", + "value": 579 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4024 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bolt +4", + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bolt401" + }, + "TemplateResRef": { + "type": "resref", + "value": "bolt401" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 13, + "AddCost": { + "type": "dword", + "value": 885 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 7010 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bolt +5", + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bolt501" + }, + "TemplateResRef": { + "type": "resref", + "value": "bolt501" + }, + "xModelPart1": { + "type": "word", + "value": 32 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 14, + "AddCost": { + "type": "dword", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 27 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 140 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bullet +1", + "id": 1521 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bullet101" + }, + "TemplateResRef": { + "type": "resref", + "value": "bullet101" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 15, + "AddCost": { + "type": "dword", + "value": 160 + }, + "BaseItem": { + "type": "int", + "value": 27 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 542 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bullet +2", + "id": 1521 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bullet201" + }, + "TemplateResRef": { + "type": "resref", + "value": "bullet201" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 337 + }, + "BaseItem": { + "type": "int", + "value": 27 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1868 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bullet +3", + "id": 1521 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bullet301" + }, + "TemplateResRef": { + "type": "resref", + "value": "bullet301" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 17, + "AddCost": { + "type": "dword", + "value": 579 + }, + "BaseItem": { + "type": "int", + "value": 27 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4024 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bullet +4", + "id": 1521 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bullet401" + }, + "TemplateResRef": { + "type": "resref", + "value": "bullet401" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 18, + "AddCost": { + "type": "dword", + "value": 885 + }, + "BaseItem": { + "type": "int", + "value": 27 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 7010 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bullet +5", + "id": 1521 + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bullet501" + }, + "TemplateResRef": { + "type": "resref", + "value": "bullet501" + }, + "xModelPart1": { + "type": "word", + "value": 23 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 19, + "AddCost": { + "type": "dword", + "value": 662 + }, + "BaseItem": { + "type": "int", + "value": 18 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greataxe +1", + "id": 515 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gaxe101" + }, + "TemplateResRef": { + "type": "resref", + "value": "gaxe101" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 41 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 20, + "AddCost": { + "type": "dword", + "value": 1062 + }, + "BaseItem": { + "type": "int", + "value": 18 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greataxe +2", + "id": 515 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gaxe201" + }, + "TemplateResRef": { + "type": "resref", + "value": "gaxe201" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 41 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 21, + "AddCost": { + "type": "dword", + "value": 1460 + }, + "BaseItem": { + "type": "int", + "value": 18 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greataxe +3", + "id": 515 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gaxe301" + }, + "TemplateResRef": { + "type": "resref", + "value": "gaxe301" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 41 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 22, + "AddCost": { + "type": "dword", + "value": 1860 + }, + "BaseItem": { + "type": "int", + "value": 18 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greataxe +4", + "id": 515 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gaxe401" + }, + "TemplateResRef": { + "type": "resref", + "value": "gaxe401" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 41 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 23, + "AddCost": { + "type": "dword", + "value": 2260 + }, + "BaseItem": { + "type": "int", + "value": 18 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greataxe +5", + "id": 515 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gaxe501" + }, + "TemplateResRef": { + "type": "resref", + "value": "gaxe501" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 41 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 24, + "AddCost": { + "type": "dword", + "value": 1560 + }, + "BaseItem": { + "type": "int", + "value": 18 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 40320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Life Drinker", + "id": 515 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 24 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 48 + }, + "Subtype": { + "type": "word", + "value": 17 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gaxe601" + }, + "TemplateResRef": { + "type": "resref", + "value": "gaxe601" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 41 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 25, + "AddCost": { + "type": "dword", + "value": 676 + }, + "BaseItem": { + "type": "int", + "value": 38 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Handaxe +1", + "id": 1532 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "haxe101" + }, + "TemplateResRef": { + "type": "resref", + "value": "haxe101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 26, + "AddCost": { + "type": "dword", + "value": 1076 + }, + "BaseItem": { + "type": "int", + "value": 38 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Handaxe +2", + "id": 1532 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "haxe201" + }, + "TemplateResRef": { + "type": "resref", + "value": "haxe201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 27, + "AddCost": { + "type": "dword", + "value": 1474 + }, + "BaseItem": { + "type": "int", + "value": 38 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Handaxe +3", + "id": 1532 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "haxe301" + }, + "TemplateResRef": { + "type": "resref", + "value": "haxe301" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 28, + "AddCost": { + "type": "dword", + "value": 1874 + }, + "BaseItem": { + "type": "int", + "value": 38 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Handaxe +4", + "id": 1532 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "haxe401" + }, + "TemplateResRef": { + "type": "resref", + "value": "haxe401" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 41 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 29, + "AddCost": { + "type": "dword", + "value": 2274 + }, + "BaseItem": { + "type": "int", + "value": 38 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Handaxe +5", + "id": 1532 + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "haxe501" + }, + "TemplateResRef": { + "type": "resref", + "value": "haxe501" + }, + "xModelPart1": { + "type": "word", + "value": 42 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 30, + "AddCost": { + "type": "dword", + "value": 2260 + }, + "BaseItem": { + "type": "int", + "value": 2 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8670 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Adamantine Battleaxe", + "id": 169 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "baxe601" + }, + "TemplateResRef": { + "type": "resref", + "value": "baxe601" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 31, + "AddCost": { + "type": "dword", + "value": 672 + }, + "BaseItem": { + "type": "int", + "value": 2 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Battleaxe +1", + "id": 169 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "baxe101" + }, + "TemplateResRef": { + "type": "resref", + "value": "baxe101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32, + "AddCost": { + "type": "dword", + "value": 1072 + }, + "BaseItem": { + "type": "int", + "value": 2 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Battleaxe +2", + "id": 169 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "baxe201" + }, + "TemplateResRef": { + "type": "resref", + "value": "baxe201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 33, + "AddCost": { + "type": "dword", + "value": 1470 + }, + "BaseItem": { + "type": "int", + "value": 2 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Battleaxe +3", + "id": 169 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "baxe301" + }, + "TemplateResRef": { + "type": "resref", + "value": "baxe301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 34, + "AddCost": { + "type": "dword", + "value": 1870 + }, + "BaseItem": { + "type": "int", + "value": 2 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Battleaxe +4", + "id": 169 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "baxe401" + }, + "TemplateResRef": { + "type": "resref", + "value": "baxe401" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 51 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 35, + "AddCost": { + "type": "dword", + "value": 2270 + }, + "BaseItem": { + "type": "int", + "value": 2 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Battleaxe +5", + "id": 169 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "baxe501" + }, + "TemplateResRef": { + "type": "resref", + "value": "baxe501" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 61 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 36, + "AddCost": { + "type": "dword", + "value": 647 + }, + "BaseItem": { + "type": "int", + "value": 3 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bastard Sword +1", + "id": 168 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bsword101" + }, + "TemplateResRef": { + "type": "resref", + "value": "bsword101" + }, + "xModelPart1": { + "type": "word", + "value": 41 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 37, + "AddCost": { + "type": "dword", + "value": 1047 + }, + "BaseItem": { + "type": "int", + "value": 3 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bastard Sword +2", + "id": 168 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bsword201" + }, + "TemplateResRef": { + "type": "resref", + "value": "bsword201" + }, + "xModelPart1": { + "type": "word", + "value": 41 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 38, + "AddCost": { + "type": "dword", + "value": 1445 + }, + "BaseItem": { + "type": "int", + "value": 3 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bastard Sword +3", + "id": 168 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bsword301" + }, + "TemplateResRef": { + "type": "resref", + "value": "bsword301" + }, + "xModelPart1": { + "type": "word", + "value": 41 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 39, + "AddCost": { + "type": "dword", + "value": 1845 + }, + "BaseItem": { + "type": "int", + "value": 3 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bastard Sword +4", + "id": 168 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bsword401" + }, + "TemplateResRef": { + "type": "resref", + "value": "bsword401" + }, + "xModelPart1": { + "type": "word", + "value": 41 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 51 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 40, + "AddCost": { + "type": "dword", + "value": 2245 + }, + "BaseItem": { + "type": "int", + "value": 3 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bastard Sword +5", + "id": 168 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bsword501" + }, + "TemplateResRef": { + "type": "resref", + "value": "bsword501" + }, + "xModelPart1": { + "type": "word", + "value": 41 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 61 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 41, + "AddCost": { + "type": "dword", + "value": 215 + }, + "BaseItem": { + "type": "int", + "value": 3 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 56121 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sun Blade", + "id": 168 + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 62 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 0 + }, + "Param1Value": { + "type": "byte", + "value": 12 + }, + "PropertyName": { + "type": "word", + "value": 18 + }, + "Subtype": { + "type": "word", + "value": 24 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 7 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 6 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bsword601" + }, + "TemplateResRef": { + "type": "resref", + "value": "bsword601" + }, + "xModelPart1": { + "type": "word", + "value": 62 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 62 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 42, + "AddCost": { + "type": "dword", + "value": 1398 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2976 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Adamantine Dagger", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 51 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger601" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger601" + }, + "xModelPart1": { + "type": "word", + "value": 51 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 43, + "AddCost": { + "type": "dword", + "value": 618 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 11842 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Assassin's Dagger", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 74 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger603" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger603" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 61 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 44, + "AddCost": { + "type": "dword", + "value": 680 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dagger +1", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger101" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 45, + "AddCost": { + "type": "dword", + "value": 1080 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dagger +2", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger201" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 46, + "AddCost": { + "type": "dword", + "value": 1880 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32304 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dagger +4", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger401" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger401" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 51 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 47, + "AddCost": { + "type": "dword", + "value": 1480 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18304 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dagger +3", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger301" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 48, + "AddCost": { + "type": "dword", + "value": 2280 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50304 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dagger +5", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger501" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger501" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 61 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 49, + "AddCost": { + "type": "dword", + "value": 7680 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The user of this weapon can once per day cuase it to be coated in venom. This venom only lasts on the blade for 12 seconds but it's effects are nasty. The victim must make a DC 14 save or take 1d10 Constitution damage. In addition if the first save fails a second will be required 1 minute later." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dagger of Venom", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger602" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger602" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 50, + "AddCost": { + "type": "dword", + "value": 1230 + }, + "BaseItem": { + "type": "int", + "value": 13 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 66024 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Frostbrand", + "id": 167 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gsword601" + }, + "TemplateResRef": { + "type": "resref", + "value": "gsword601" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 23 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 51, + "AddCost": { + "type": "dword", + "value": 632 + }, + "BaseItem": { + "type": "int", + "value": 13 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greatsword +1", + "id": 167 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gsword101" + }, + "TemplateResRef": { + "type": "resref", + "value": "gsword101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 52, + "AddCost": { + "type": "dword", + "value": 1032 + }, + "BaseItem": { + "type": "int", + "value": 13 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greatsword +2", + "id": 167 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gsword201" + }, + "TemplateResRef": { + "type": "resref", + "value": "gsword201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 53, + "AddCost": { + "type": "dword", + "value": 1430 + }, + "BaseItem": { + "type": "int", + "value": 13 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greatsword +3", + "id": 167 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gsword301" + }, + "TemplateResRef": { + "type": "resref", + "value": "gsword301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 54, + "AddCost": { + "type": "dword", + "value": 1830 + }, + "BaseItem": { + "type": "int", + "value": 13 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greatsword +4", + "id": 167 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gsword401" + }, + "TemplateResRef": { + "type": "resref", + "value": "gsword401" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 41 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 55, + "AddCost": { + "type": "dword", + "value": 2230 + }, + "BaseItem": { + "type": "int", + "value": 13 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greatsword +5", + "id": 167 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 25 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gsword501" + }, + "TemplateResRef": { + "type": "resref", + "value": "gsword501" + }, + "xModelPart1": { + "type": "word", + "value": 41 + }, + "xModelPart2": { + "type": "word", + "value": 41 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 56, + "AddCost": { + "type": "dword", + "value": 9673 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 48973 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Flame Tongue", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 61 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 74 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 25 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword603" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword603" + }, + "xModelPart1": { + "type": "word", + "value": 61 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 57, + "AddCost": { + "type": "dword", + "value": 25065 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 120315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Holy Avenger", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "ModelPart2": { + "type": "byte", + "value": 52 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 36 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 25 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword605" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword605" + }, + "xModelPart1": { + "type": "word", + "value": 32 + }, + "xModelPart2": { + "type": "word", + "value": 52 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 58, + "AddCost": { + "type": "dword", + "value": 667 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longsword +1", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 61 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 25 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword101" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword101" + }, + "xModelPart1": { + "type": "word", + "value": 61 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 59, + "AddCost": { + "type": "dword", + "value": 1067 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longsword +2", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 61 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 25 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword201" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword201" + }, + "xModelPart1": { + "type": "word", + "value": 61 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 60, + "AddCost": { + "type": "dword", + "value": 1465 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longsword +3", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 61 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 25 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword301" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword301" + }, + "xModelPart1": { + "type": "word", + "value": 61 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 61, + "AddCost": { + "type": "dword", + "value": 1865 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longsword +4", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 61 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 25 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword401" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword401" + }, + "xModelPart1": { + "type": "word", + "value": 61 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 51 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 62, + "AddCost": { + "type": "dword", + "value": 2265 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longsword +5", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 61 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword501" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword501" + }, + "xModelPart1": { + "type": "word", + "value": 61 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 61 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 63, + "AddCost": { + "type": "dword", + "value": 2335 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 27657 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Night Blade", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 64 + }, + "ModelPart2": { + "type": "byte", + "value": 44 + }, + "ModelPart3": { + "type": "byte", + "value": 34 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 43 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 74 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 62 + }, + "Subtype": { + "type": "word", + "value": 5 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword601" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword601" + }, + "xModelPart1": { + "type": "word", + "value": 64 + }, + "xModelPart2": { + "type": "word", + "value": 44 + }, + "xModelPart3": { + "type": "word", + "value": 34 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 64, + "AddCost": { + "type": "dword", + "value": 641 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 30315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sword of Life Stealing", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 64 + }, + "ModelPart2": { + "type": "byte", + "value": 44 + }, + "ModelPart3": { + "type": "byte", + "value": 34 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 67 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword602" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword602" + }, + "xModelPart1": { + "type": "word", + "value": 64 + }, + "xModelPart2": { + "type": "word", + "value": 44 + }, + "xModelPart3": { + "type": "word", + "value": 34 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65, + "AddCost": { + "type": "dword", + "value": 12769 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 52315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sword of Planes", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 61 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 8 + }, + "Subtype": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 8 + }, + "Subtype": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 8 + }, + "Subtype": { + "type": "word", + "value": 24 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 5 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 83 + }, + "Subtype": { + "type": "word", + "value": 4 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword604" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword604" + }, + "xModelPart1": { + "type": "word", + "value": 61 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 66, + "AddCost": { + "type": "dword", + "value": 682 + }, + "BaseItem": { + "type": "int", + "value": 41 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2380 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Katana +1", + "id": 1535 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "katana101" + }, + "TemplateResRef": { + "type": "resref", + "value": "katana101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 67, + "AddCost": { + "type": "dword", + "value": 1082 + }, + "BaseItem": { + "type": "int", + "value": 41 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8380 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Katana +2", + "id": 1535 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "katana201" + }, + "TemplateResRef": { + "type": "resref", + "value": "katana201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 68, + "AddCost": { + "type": "dword", + "value": 1480 + }, + "BaseItem": { + "type": "int", + "value": 41 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18380 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Katana +3", + "id": 1535 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "katana301" + }, + "TemplateResRef": { + "type": "resref", + "value": "katana301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 69, + "AddCost": { + "type": "dword", + "value": 1880 + }, + "BaseItem": { + "type": "int", + "value": 41 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32380 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Katana +4", + "id": 1535 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "katana401" + }, + "TemplateResRef": { + "type": "resref", + "value": "katana401" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 70, + "AddCost": { + "type": "dword", + "value": 2280 + }, + "BaseItem": { + "type": "int", + "value": 41 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50380 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Katana +5", + "id": 1535 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "katana501" + }, + "TemplateResRef": { + "type": "resref", + "value": "katana501" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 71, + "AddCost": { + "type": "dword", + "value": 662 + }, + "BaseItem": { + "type": "int", + "value": 51 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rapier +1", + "id": 1545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 33 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rapier101" + }, + "TemplateResRef": { + "type": "resref", + "value": "rapier101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 72, + "AddCost": { + "type": "dword", + "value": 1062 + }, + "BaseItem": { + "type": "int", + "value": 51 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rapier +2", + "id": 1545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 33 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rapier201" + }, + "TemplateResRef": { + "type": "resref", + "value": "rapier201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 73, + "AddCost": { + "type": "dword", + "value": 1460 + }, + "BaseItem": { + "type": "int", + "value": 51 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rapier +3", + "id": 1545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 33 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rapier301" + }, + "TemplateResRef": { + "type": "resref", + "value": "rapier301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 74, + "AddCost": { + "type": "dword", + "value": 1860 + }, + "BaseItem": { + "type": "int", + "value": 51 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rapier +4", + "id": 1545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 33 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rapier401" + }, + "TemplateResRef": { + "type": "resref", + "value": "rapier401" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 75, + "AddCost": { + "type": "dword", + "value": 2260 + }, + "BaseItem": { + "type": "int", + "value": 51 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rapier +5", + "id": 1545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 33 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rapier501" + }, + "TemplateResRef": { + "type": "resref", + "value": "rapier501" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 76, + "AddCost": { + "type": "dword", + "value": 2258 + }, + "BaseItem": { + "type": "int", + "value": 51 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Three times per day the wielder of this weapon can drain 1d6 constitution from a target.\n\nThis loss is due to blood loss, things without blood are unaffected." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rapier of Puncturing", + "id": 1545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 24 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 48 + }, + "Subtype": { + "type": "word", + "value": 25 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 33 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rapier601" + }, + "TemplateResRef": { + "type": "resref", + "value": "rapier601" + }, + "xModelPart1": { + "type": "word", + "value": 32 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 77, + "AddCost": { + "type": "dword", + "value": 667 + }, + "BaseItem": { + "type": "int", + "value": 53 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scimitar +1", + "id": 1547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 34 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scimitar101" + }, + "TemplateResRef": { + "type": "resref", + "value": "scimitar101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 78, + "AddCost": { + "type": "dword", + "value": 1067 + }, + "BaseItem": { + "type": "int", + "value": 53 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scimitar +2", + "id": 1547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 34 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scimitar201" + }, + "TemplateResRef": { + "type": "resref", + "value": "scimitar201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 79, + "AddCost": { + "type": "dword", + "value": 1465 + }, + "BaseItem": { + "type": "int", + "value": 53 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scimitar +3", + "id": 1547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 34 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scimitar301" + }, + "TemplateResRef": { + "type": "resref", + "value": "scimitar301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 80, + "AddCost": { + "type": "dword", + "value": 1865 + }, + "BaseItem": { + "type": "int", + "value": 53 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scimitar +4", + "id": 1547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 34 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scimitar401" + }, + "TemplateResRef": { + "type": "resref", + "value": "scimitar401" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 51 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 81, + "AddCost": { + "type": "dword", + "value": 2265 + }, + "BaseItem": { + "type": "int", + "value": 53 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scimitar +5", + "id": 1547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scimitar501" + }, + "TemplateResRef": { + "type": "resref", + "value": "scimitar501" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 51 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 82, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 53 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 74144 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sylvan Scimitar", + "id": 1547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scimitar601" + }, + "TemplateResRef": { + "type": "resref", + "value": "scimitar601" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 83, + "AddCost": { + "type": "dword", + "value": 11408 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 170560 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The true power of this blade is that if you die with it in your hand you are teleported back to town with all your possessions intact.\n\nThis blade has a limited number of uses, and as can be expected you will not know when your luck has run out til too late." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Luck Blade", + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 26 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ssword602" + }, + "TemplateResRef": { + "type": "resref", + "value": "ssword602" + }, + "xModelPart1": { + "type": "word", + "value": 43 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 84, + "AddCost": { + "type": "dword", + "value": 2132 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 17098 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Forged by the elves for the orcs wars." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Orc Bane", + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 54 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 8 + }, + "Subtype": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 74 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ssword601" + }, + "TemplateResRef": { + "type": "resref", + "value": "ssword601" + }, + "xModelPart1": { + "type": "word", + "value": 54 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 85, + "AddCost": { + "type": "dword", + "value": 672 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Short Sword +1", + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ssword101" + }, + "TemplateResRef": { + "type": "resref", + "value": "ssword101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 86, + "AddCost": { + "type": "dword", + "value": 1072 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Short Sword +2", + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ssword201" + }, + "TemplateResRef": { + "type": "resref", + "value": "ssword201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 87, + "AddCost": { + "type": "dword", + "value": 1470 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Short Sword +3", + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ssword301" + }, + "TemplateResRef": { + "type": "resref", + "value": "ssword301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 88, + "AddCost": { + "type": "dword", + "value": 1870 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Short Sword +4", + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ssword401" + }, + "TemplateResRef": { + "type": "resref", + "value": "ssword401" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 51 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 89, + "AddCost": { + "type": "dword", + "value": 2270 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Short Sword +5", + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 37 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ssword501" + }, + "TemplateResRef": { + "type": "resref", + "value": "ssword501" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 61 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 90, + "AddCost": { + "type": "dword", + "value": 682 + }, + "BaseItem": { + "type": "int", + "value": 28 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Club +1", + "id": 1522 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 37 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "club101" + }, + "TemplateResRef": { + "type": "resref", + "value": "club101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 91, + "AddCost": { + "type": "dword", + "value": 1082 + }, + "BaseItem": { + "type": "int", + "value": 28 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Club +2", + "id": 1522 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 37 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "club201" + }, + "TemplateResRef": { + "type": "resref", + "value": "club201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 92, + "AddCost": { + "type": "dword", + "value": 1480 + }, + "BaseItem": { + "type": "int", + "value": 28 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Club +3", + "id": 1522 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 37 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "club301" + }, + "TemplateResRef": { + "type": "resref", + "value": "club301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 93, + "AddCost": { + "type": "dword", + "value": 1880 + }, + "BaseItem": { + "type": "int", + "value": 28 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Club +4", + "id": 1522 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "club401" + }, + "TemplateResRef": { + "type": "resref", + "value": "club401" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 94, + "AddCost": { + "type": "dword", + "value": 2280 + }, + "BaseItem": { + "type": "int", + "value": 28 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Club +5", + "id": 1522 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "club501" + }, + "TemplateResRef": { + "type": "resref", + "value": "club501" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 95, + "AddCost": { + "type": "dword", + "value": 667 + }, + "BaseItem": { + "type": "int", + "value": 35 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Flail +1", + "id": 1529 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hflail101" + }, + "TemplateResRef": { + "type": "resref", + "value": "hflail101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 96, + "AddCost": { + "type": "dword", + "value": 1067 + }, + "BaseItem": { + "type": "int", + "value": 35 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Flail +2", + "id": 1529 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hflail201" + }, + "TemplateResRef": { + "type": "resref", + "value": "hflail201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 97, + "AddCost": { + "type": "dword", + "value": 1465 + }, + "BaseItem": { + "type": "int", + "value": 35 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Flail +3", + "id": 1529 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hflail301" + }, + "TemplateResRef": { + "type": "resref", + "value": "hflail301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 98, + "AddCost": { + "type": "dword", + "value": 1865 + }, + "BaseItem": { + "type": "int", + "value": 35 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Flail +4", + "id": 1529 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hflail401" + }, + "TemplateResRef": { + "type": "resref", + "value": "hflail401" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 99, + "AddCost": { + "type": "dword", + "value": 2265 + }, + "BaseItem": { + "type": "int", + "value": 35 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Flail +5", + "id": 1529 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 43 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hflail501" + }, + "TemplateResRef": { + "type": "resref", + "value": "hflail501" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 100, + "AddCost": { + "type": "dword", + "value": 674 + }, + "BaseItem": { + "type": "int", + "value": 4 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Flail +1", + "id": 176 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 44 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lflail101" + }, + "TemplateResRef": { + "type": "resref", + "value": "lflail101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 101, + "AddCost": { + "type": "dword", + "value": 1074 + }, + "BaseItem": { + "type": "int", + "value": 4 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Flail +2", + "id": 176 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 44 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lflail201" + }, + "TemplateResRef": { + "type": "resref", + "value": "lflail201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 102, + "AddCost": { + "type": "dword", + "value": 1472 + }, + "BaseItem": { + "type": "int", + "value": 4 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Flail +3", + "id": 176 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 44 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lflail301" + }, + "TemplateResRef": { + "type": "resref", + "value": "lflail301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 103, + "AddCost": { + "type": "dword", + "value": 1872 + }, + "BaseItem": { + "type": "int", + "value": 4 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Flail +4", + "id": 176 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 44 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lflail401" + }, + "TemplateResRef": { + "type": "resref", + "value": "lflail401" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 104, + "AddCost": { + "type": "dword", + "value": 2272 + }, + "BaseItem": { + "type": "int", + "value": 4 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Flail +5", + "id": 176 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 44 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lflail501" + }, + "TemplateResRef": { + "type": "resref", + "value": "lflail501" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 105, + "AddCost": { + "type": "dword", + "value": 21788 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 63330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In the hands of a dwarf this becomes a truely formidable weapon." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Thrower", + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 0 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 18 + }, + "Subtype": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 26 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 44 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whammer601" + }, + "TemplateResRef": { + "type": "resref", + "value": "whammer601" + }, + "xModelPart1": { + "type": "word", + "value": 42 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 52 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 106, + "AddCost": { + "type": "dword", + "value": 2232 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 64004 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In the hands of a dwarf this becomes a truely formidable weapon." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Thrower", + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 0 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 18 + }, + "Subtype": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 26 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 47 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whammer602" + }, + "TemplateResRef": { + "type": "resref", + "value": "whammer602" + }, + "xModelPart1": { + "type": "word", + "value": 42 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 52 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 107, + "AddCost": { + "type": "dword", + "value": 681 + }, + "BaseItem": { + "type": "int", + "value": 37 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Hammer +1", + "id": 1531 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 38 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lhammer101" + }, + "TemplateResRef": { + "type": "resref", + "value": "lhammer101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 108, + "AddCost": { + "type": "dword", + "value": 1081 + }, + "BaseItem": { + "type": "int", + "value": 37 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Hammer +2", + "id": 1531 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 38 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lhammer201" + }, + "TemplateResRef": { + "type": "resref", + "value": "lhammer201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 109, + "AddCost": { + "type": "dword", + "value": 1479 + }, + "BaseItem": { + "type": "int", + "value": 37 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Hammer +3", + "id": 1531 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 38 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lhammer301" + }, + "TemplateResRef": { + "type": "resref", + "value": "lhammer301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 110, + "AddCost": { + "type": "dword", + "value": 1879 + }, + "BaseItem": { + "type": "int", + "value": 37 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Hammer +4", + "id": 1531 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 38 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lhammer401" + }, + "TemplateResRef": { + "type": "resref", + "value": "lhammer401" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 111, + "AddCost": { + "type": "dword", + "value": 2279 + }, + "BaseItem": { + "type": "int", + "value": 37 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Hammer +5", + "id": 1531 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 44 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lhammer501" + }, + "TemplateResRef": { + "type": "resref", + "value": "lhammer501" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 112, + "AddCost": { + "type": "dword", + "value": 670 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Warhammer +1", + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 47 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whammer101" + }, + "TemplateResRef": { + "type": "resref", + "value": "whammer101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 113, + "AddCost": { + "type": "dword", + "value": 1070 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Warhammer +2", + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 47 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whammer201" + }, + "TemplateResRef": { + "type": "resref", + "value": "whammer201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 114, + "AddCost": { + "type": "dword", + "value": 1468 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Warhammer +3", + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 47 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whammer301" + }, + "TemplateResRef": { + "type": "resref", + "value": "whammer301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 115, + "AddCost": { + "type": "dword", + "value": 1868 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Warhammer +4", + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 47 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whammer401" + }, + "TemplateResRef": { + "type": "resref", + "value": "whammer401" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 51 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 116, + "AddCost": { + "type": "dword", + "value": 2268 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Warhammer +5", + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whammer501" + }, + "TemplateResRef": { + "type": "resref", + "value": "whammer501" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 61 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 117, + "AddCost": { + "type": "dword", + "value": 684 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mace +1", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mace101" + }, + "TemplateResRef": { + "type": "resref", + "value": "mace101" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 118, + "AddCost": { + "type": "dword", + "value": 1084 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mace +2", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mace201" + }, + "TemplateResRef": { + "type": "resref", + "value": "mace201" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 119, + "AddCost": { + "type": "dword", + "value": 1482 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mace +3", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mace301" + }, + "TemplateResRef": { + "type": "resref", + "value": "mace301" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 120, + "AddCost": { + "type": "dword", + "value": 1882 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mace +4", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mace401" + }, + "TemplateResRef": { + "type": "resref", + "value": "mace401" + }, + "xModelPart1": { + "type": "word", + "value": 41 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 121, + "AddCost": { + "type": "dword", + "value": 2282 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mace +5", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mace501" + }, + "TemplateResRef": { + "type": "resref", + "value": "mace501" + }, + "xModelPart1": { + "type": "word", + "value": 41 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 122, + "AddCost": { + "type": "dword", + "value": 3782 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 75312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mace of Smiting", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 8 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 8 + }, + "Subtype": { + "type": "word", + "value": 24 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mace602" + }, + "TemplateResRef": { + "type": "resref", + "value": "mace602" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 44 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 123, + "AddCost": { + "type": "dword", + "value": 5184 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 17812 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mace of Terror", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 144 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mace601" + }, + "TemplateResRef": { + "type": "resref", + "value": "mace601" + }, + "xModelPart1": { + "type": "word", + "value": 42 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 124, + "AddCost": { + "type": "dword", + "value": 674 + }, + "BaseItem": { + "type": "int", + "value": 47 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Morningstar +1", + "id": 1541 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstar101" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstar101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 125, + "AddCost": { + "type": "dword", + "value": 1074 + }, + "BaseItem": { + "type": "int", + "value": 47 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Morningstar +2", + "id": 1541 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 52 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstar201" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstar201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 126, + "AddCost": { + "type": "dword", + "value": 1472 + }, + "BaseItem": { + "type": "int", + "value": 47 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Morningstar +3", + "id": 1541 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 52 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstar301" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstar301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 127, + "AddCost": { + "type": "dword", + "value": 1872 + }, + "BaseItem": { + "type": "int", + "value": 47 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Morningstar +4", + "id": 1541 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 52 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstar401" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstar401" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 128, + "AddCost": { + "type": "dword", + "value": 2272 + }, + "BaseItem": { + "type": "int", + "value": 47 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Morningstar +5", + "id": 1541 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 52 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstar501" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstar501" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 129, + "AddCost": { + "type": "dword", + "value": 992 + }, + "BaseItem": { + "type": "int", + "value": 32 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2690 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dire Mace +1", + "id": 1526 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 52 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dmace101" + }, + "TemplateResRef": { + "type": "resref", + "value": "dmace101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 130, + "AddCost": { + "type": "dword", + "value": 1392 + }, + "BaseItem": { + "type": "int", + "value": 32 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8690 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dire Mace +2", + "id": 1526 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 53 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dmace201" + }, + "TemplateResRef": { + "type": "resref", + "value": "dmace201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 131, + "AddCost": { + "type": "dword", + "value": 1790 + }, + "BaseItem": { + "type": "int", + "value": 32 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18690 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dire Mace +3", + "id": 1526 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 53 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dmace301" + }, + "TemplateResRef": { + "type": "resref", + "value": "dmace301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 132, + "AddCost": { + "type": "dword", + "value": 2190 + }, + "BaseItem": { + "type": "int", + "value": 32 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32690 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dire Mace +4", + "id": 1526 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 33 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 55 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dmace401" + }, + "TemplateResRef": { + "type": "resref", + "value": "dmace401" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 33 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 133, + "AddCost": { + "type": "dword", + "value": 2590 + }, + "BaseItem": { + "type": "int", + "value": 32 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50690 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dire Mace +5", + "id": 1526 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 33 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 55 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dmace501" + }, + "TemplateResRef": { + "type": "resref", + "value": "dmace501" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "xModelPart2": { + "type": "word", + "value": 33 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 134, + "AddCost": { + "type": "dword", + "value": 982 + }, + "BaseItem": { + "type": "int", + "value": 33 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2660 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Double Axe +1", + "id": 1527 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 56 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "daxe101" + }, + "TemplateResRef": { + "type": "resref", + "value": "daxe101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 135, + "AddCost": { + "type": "dword", + "value": 1382 + }, + "BaseItem": { + "type": "int", + "value": 33 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8660 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Double Axe +2", + "id": 1527 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "daxe201" + }, + "TemplateResRef": { + "type": "resref", + "value": "daxe201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 136, + "AddCost": { + "type": "dword", + "value": 1780 + }, + "BaseItem": { + "type": "int", + "value": 33 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18660 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Double Axe +3", + "id": 1527 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "daxe301" + }, + "TemplateResRef": { + "type": "resref", + "value": "daxe301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 137, + "AddCost": { + "type": "dword", + "value": 2180 + }, + "BaseItem": { + "type": "int", + "value": 33 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32660 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Double Axe +4", + "id": 1527 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "daxe401" + }, + "TemplateResRef": { + "type": "resref", + "value": "daxe401" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 138, + "AddCost": { + "type": "dword", + "value": 2580 + }, + "BaseItem": { + "type": "int", + "value": 33 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50660 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Double Axe +5", + "id": 1527 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "daxe501" + }, + "TemplateResRef": { + "type": "resref", + "value": "daxe501" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 139, + "AddCost": { + "type": "dword", + "value": 980 + }, + "BaseItem": { + "type": "int", + "value": 50 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quarterstaff +1", + "id": 1544 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "qstaff101" + }, + "TemplateResRef": { + "type": "resref", + "value": "qstaff101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 140, + "AddCost": { + "type": "dword", + "value": 1380 + }, + "BaseItem": { + "type": "int", + "value": 50 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quarterstaff +2", + "id": 1544 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "qstaff201" + }, + "TemplateResRef": { + "type": "resref", + "value": "qstaff201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 141, + "AddCost": { + "type": "dword", + "value": 1778 + }, + "BaseItem": { + "type": "int", + "value": 50 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quarterstaff +3", + "id": 1544 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 64 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "qstaff301" + }, + "TemplateResRef": { + "type": "resref", + "value": "qstaff301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 142, + "AddCost": { + "type": "dword", + "value": 2178 + }, + "BaseItem": { + "type": "int", + "value": 50 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quarterstaff +4", + "id": 1544 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 64 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "qstaff401" + }, + "TemplateResRef": { + "type": "resref", + "value": "qstaff401" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 143, + "AddCost": { + "type": "dword", + "value": 2578 + }, + "BaseItem": { + "type": "int", + "value": 50 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quarterstaff +5", + "id": 1544 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 64 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "qstaff501" + }, + "TemplateResRef": { + "type": "resref", + "value": "qstaff501" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 144, + "AddCost": { + "type": "dword", + "value": 882 + }, + "BaseItem": { + "type": "int", + "value": 12 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Two-Bladed Sword +1", + "id": 172 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 64 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dsword101" + }, + "TemplateResRef": { + "type": "resref", + "value": "dsword101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 145, + "AddCost": { + "type": "dword", + "value": 1282 + }, + "BaseItem": { + "type": "int", + "value": 12 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Two-Bladed Sword +2", + "id": 172 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 64 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dsword201" + }, + "TemplateResRef": { + "type": "resref", + "value": "dsword201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 146, + "AddCost": { + "type": "dword", + "value": 1280 + }, + "BaseItem": { + "type": "int", + "value": 12 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Two-Bladed Sword +3", + "id": 172 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 64 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dsword301" + }, + "TemplateResRef": { + "type": "resref", + "value": "dsword301" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 147, + "AddCost": { + "type": "dword", + "value": 1680 + }, + "BaseItem": { + "type": "int", + "value": 12 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Two-Bladed Sword +4", + "id": 172 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 70 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dsword401" + }, + "TemplateResRef": { + "type": "resref", + "value": "dsword401" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 148, + "AddCost": { + "type": "dword", + "value": 2480 + }, + "BaseItem": { + "type": "int", + "value": 12 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Two-Bladed Sword +5", + "id": 172 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 70 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dsword501" + }, + "TemplateResRef": { + "type": "resref", + "value": "dsword501" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 149, + "AddCost": { + "type": "dword", + "value": 652 + }, + "BaseItem": { + "type": "int", + "value": 108 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Waraxe +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 57 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dwaxe101" + }, + "TemplateResRef": { + "type": "resref", + "value": "dwaxe101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 150, + "AddCost": { + "type": "dword", + "value": 1052 + }, + "BaseItem": { + "type": "int", + "value": 108 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Waraxe +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 57 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dwaxe201" + }, + "TemplateResRef": { + "type": "resref", + "value": "dwaxe201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 151, + "AddCost": { + "type": "dword", + "value": 1450 + }, + "BaseItem": { + "type": "int", + "value": 108 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Waraxe +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 70 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dwaxe301" + }, + "TemplateResRef": { + "type": "resref", + "value": "dwaxe301" + }, + "xModelPart1": { + "type": "word", + "value": 23 + }, + "xModelPart2": { + "type": "word", + "value": 42 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 152, + "AddCost": { + "type": "dword", + "value": 1850 + }, + "BaseItem": { + "type": "int", + "value": 108 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Waraxe +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 70 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dwaxe401" + }, + "TemplateResRef": { + "type": "resref", + "value": "dwaxe401" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 153, + "AddCost": { + "type": "dword", + "value": 2250 + }, + "BaseItem": { + "type": "int", + "value": 108 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Waraxe +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 52 + }, + "ModelPart2": { + "type": "byte", + "value": 52 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 70 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dwaxe501" + }, + "TemplateResRef": { + "type": "resref", + "value": "dwaxe501" + }, + "xModelPart1": { + "type": "word", + "value": 52 + }, + "xModelPart2": { + "type": "word", + "value": 52 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 154, + "AddCost": { + "type": "dword", + "value": 680 + }, + "BaseItem": { + "type": "int", + "value": 40 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kama +1", + "id": 1534 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 68 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kama101" + }, + "TemplateResRef": { + "type": "resref", + "value": "kama101" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 155, + "AddCost": { + "type": "dword", + "value": 1080 + }, + "BaseItem": { + "type": "int", + "value": 40 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kama +2", + "id": 1534 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 73 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kama201" + }, + "TemplateResRef": { + "type": "resref", + "value": "kama201" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 156, + "AddCost": { + "type": "dword", + "value": 1478 + }, + "BaseItem": { + "type": "int", + "value": 40 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kama +3", + "id": 1534 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 73 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kama301" + }, + "TemplateResRef": { + "type": "resref", + "value": "kama301" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 157, + "AddCost": { + "type": "dword", + "value": 1878 + }, + "BaseItem": { + "type": "int", + "value": 40 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kama +4", + "id": 1534 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 73 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kama401" + }, + "TemplateResRef": { + "type": "resref", + "value": "kama401" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 158, + "AddCost": { + "type": "dword", + "value": 2278 + }, + "BaseItem": { + "type": "int", + "value": 40 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kama +5", + "id": 1534 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 75 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kama401" + }, + "TemplateResRef": { + "type": "resref", + "value": "kama402" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 159, + "AddCost": { + "type": "dword", + "value": 674 + }, + "BaseItem": { + "type": "int", + "value": 42 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kukri +1", + "id": 1536 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 64 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kukri101" + }, + "TemplateResRef": { + "type": "resref", + "value": "kukri101" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 13 + }, + "xModelPart3": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 160, + "AddCost": { + "type": "dword", + "value": 1074 + }, + "BaseItem": { + "type": "int", + "value": 42 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kukri +2", + "id": 1536 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 66 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kukri201" + }, + "TemplateResRef": { + "type": "resref", + "value": "kukri201" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 13 + }, + "xModelPart3": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 161, + "AddCost": { + "type": "dword", + "value": 1472 + }, + "BaseItem": { + "type": "int", + "value": 42 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kukri +3", + "id": 1536 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 68 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kukri301" + }, + "TemplateResRef": { + "type": "resref", + "value": "kukri301" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 13 + }, + "xModelPart3": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 162, + "AddCost": { + "type": "dword", + "value": 1872 + }, + "BaseItem": { + "type": "int", + "value": 42 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kukri +4", + "id": 1536 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 68 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kukri401" + }, + "TemplateResRef": { + "type": "resref", + "value": "kukri401" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 13 + }, + "xModelPart3": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 163, + "AddCost": { + "type": "dword", + "value": 2272 + }, + "BaseItem": { + "type": "int", + "value": 42 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kukri +5", + "id": 1536 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 75 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kukri501" + }, + "TemplateResRef": { + "type": "resref", + "value": "kukri501" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 13 + }, + "xModelPart3": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 164, + "AddCost": { + "type": "dword", + "value": 676 + }, + "BaseItem": { + "type": "int", + "value": 60 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sickle +1", + "id": 1554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 75 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sickle101" + }, + "TemplateResRef": { + "type": "resref", + "value": "sickle101" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 165, + "AddCost": { + "type": "dword", + "value": 1076 + }, + "BaseItem": { + "type": "int", + "value": 60 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sickle +2", + "id": 1554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 75 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sickle201" + }, + "TemplateResRef": { + "type": "resref", + "value": "sickle201" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 166, + "AddCost": { + "type": "dword", + "value": 1474 + }, + "BaseItem": { + "type": "int", + "value": 60 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sickle +3", + "id": 1554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 75 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sickle301" + }, + "TemplateResRef": { + "type": "resref", + "value": "sickle301" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 167, + "AddCost": { + "type": "dword", + "value": 1874 + }, + "BaseItem": { + "type": "int", + "value": 60 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sickle +4", + "id": 1554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 77 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sickle401" + }, + "TemplateResRef": { + "type": "resref", + "value": "sickle401" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 168, + "AddCost": { + "type": "dword", + "value": 2274 + }, + "BaseItem": { + "type": "int", + "value": 60 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sickle +5", + "id": 1554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 77 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sickle501" + }, + "TemplateResRef": { + "type": "resref", + "value": "sickle501" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 169, + "AddCost": { + "type": "dword", + "value": 643 + }, + "BaseItem": { + "type": "int", + "value": 111 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Whip +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 77 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whip101" + }, + "TemplateResRef": { + "type": "resref", + "value": "whip101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 170, + "AddCost": { + "type": "dword", + "value": 1003 + }, + "BaseItem": { + "type": "int", + "value": 111 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Whip +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 77 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whip201" + }, + "TemplateResRef": { + "type": "resref", + "value": "whip201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 171, + "AddCost": { + "type": "dword", + "value": 1363 + }, + "BaseItem": { + "type": "int", + "value": 111 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Whip +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 77 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whip301" + }, + "TemplateResRef": { + "type": "resref", + "value": "whip301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 172, + "AddCost": { + "type": "dword", + "value": 1723 + }, + "BaseItem": { + "type": "int", + "value": 111 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Whip +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 80 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whip401" + }, + "TemplateResRef": { + "type": "resref", + "value": "whip401" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 173, + "AddCost": { + "type": "dword", + "value": 2083 + }, + "BaseItem": { + "type": "int", + "value": 111 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Whip +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 80 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whip501" + }, + "TemplateResRef": { + "type": "resref", + "value": "whip501" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 174, + "AddCost": { + "type": "dword", + "value": 672 + }, + "BaseItem": { + "type": "int", + "value": 10 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Halberd +1", + "id": 175 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 80 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "halberd101" + }, + "TemplateResRef": { + "type": "resref", + "value": "halberd101" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 175, + "AddCost": { + "type": "dword", + "value": 1072 + }, + "BaseItem": { + "type": "int", + "value": 10 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Halberd +2", + "id": 175 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 80 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "halberd201" + }, + "TemplateResRef": { + "type": "resref", + "value": "halberd201" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 176, + "AddCost": { + "type": "dword", + "value": 1470 + }, + "BaseItem": { + "type": "int", + "value": 10 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Halberd +3", + "id": 175 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 80 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "halberd301" + }, + "TemplateResRef": { + "type": "resref", + "value": "halberd301" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 177, + "AddCost": { + "type": "dword", + "value": 1870 + }, + "BaseItem": { + "type": "int", + "value": 10 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Halberd +4", + "id": 175 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 82 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "halberd401" + }, + "TemplateResRef": { + "type": "resref", + "value": "halberd401" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 178, + "AddCost": { + "type": "dword", + "value": 2270 + }, + "BaseItem": { + "type": "int", + "value": 10 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Halberd +5", + "id": 175 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 82 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "halberd501" + }, + "TemplateResRef": { + "type": "resref", + "value": "halberd501" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 179, + "AddCost": { + "type": "dword", + "value": 483 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 751 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item's special power will throw a 5d6 lightning bolt at your target. The javelin is destroyed by this power." + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Javelin of Lightning", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 359 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 85 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear601" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear601" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 13 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 180, + "AddCost": { + "type": "dword", + "value": 664 + }, + "BaseItem": { + "type": "int", + "value": 55 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2318 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scythe +1", + "id": 1549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 85 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scythe101" + }, + "TemplateResRef": { + "type": "resref", + "value": "scythe101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 181, + "AddCost": { + "type": "dword", + "value": 1064 + }, + "BaseItem": { + "type": "int", + "value": 55 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8318 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scythe +2", + "id": 1549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 85 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scythe201" + }, + "TemplateResRef": { + "type": "resref", + "value": "scythe201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 182, + "AddCost": { + "type": "dword", + "value": 1462 + }, + "BaseItem": { + "type": "int", + "value": 55 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18318 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scythe +3", + "id": 1549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 90 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scythe301" + }, + "TemplateResRef": { + "type": "resref", + "value": "scythe301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 183, + "AddCost": { + "type": "dword", + "value": 1862 + }, + "BaseItem": { + "type": "int", + "value": 55 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32318 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scythe +4", + "id": 1549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 90 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scythe401" + }, + "TemplateResRef": { + "type": "resref", + "value": "scythe401" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 184, + "AddCost": { + "type": "dword", + "value": 2262 + }, + "BaseItem": { + "type": "int", + "value": 55 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50318 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scythe +5", + "id": 1549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 90 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scythe501" + }, + "TemplateResRef": { + "type": "resref", + "value": "scythe501" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 185, + "AddCost": { + "type": "dword", + "value": 639 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3815 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spear +1 Animal Command", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 85 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear602" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear602" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 186, + "AddCost": { + "type": "dword", + "value": 685 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2305 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spear +1", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 90 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear101" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 187, + "AddCost": { + "type": "dword", + "value": 1085 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8305 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spear +2", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 90 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear201" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 188, + "AddCost": { + "type": "dword", + "value": 1483 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18305 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spear +3", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 90 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear301" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 189, + "AddCost": { + "type": "dword", + "value": 1883 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32305 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spear +4", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 90 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear401" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear401" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 190, + "AddCost": { + "type": "dword", + "value": 2283 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50305 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spear +5", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 94 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear501" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear501" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 191, + "AddCost": { + "type": "dword", + "value": 655 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9815 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Trident of Warning", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 94 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear603" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear603" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 192, + "AddCost": { + "type": "dword", + "value": 1846 + }, + "BaseItem": { + "type": "int", + "value": 6 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Crossbow +1", + "id": 173 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 94 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hxbow101" + }, + "TemplateResRef": { + "type": "resref", + "value": "hxbow101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 193, + "AddCost": { + "type": "dword", + "value": 6446 + }, + "BaseItem": { + "type": "int", + "value": 6 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Crossbow +2", + "id": 173 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 94 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hxbow201" + }, + "TemplateResRef": { + "type": "resref", + "value": "hxbow201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 194, + "AddCost": { + "type": "dword", + "value": 14046 + }, + "BaseItem": { + "type": "int", + "value": 6 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Crossbow +3", + "id": 173 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 94 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hxbow301" + }, + "TemplateResRef": { + "type": "resref", + "value": "hxbow301" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 195, + "AddCost": { + "type": "dword", + "value": 10646 + }, + "BaseItem": { + "type": "int", + "value": 6 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Crossbow +4", + "id": 173 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 94 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hxbow401" + }, + "TemplateResRef": { + "type": "resref", + "value": "hxbow401" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 23 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 196, + "AddCost": { + "type": "dword", + "value": 32767 + }, + "BaseItem": { + "type": "int", + "value": 6 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 44871 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Crossbow +5", + "id": 173 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 100 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hxbow501" + }, + "TemplateResRef": { + "type": "resref", + "value": "hxbow501" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 197, + "AddCost": { + "type": "dword", + "value": 1861 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Crossbow +1", + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 87 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lxbow101" + }, + "TemplateResRef": { + "type": "resref", + "value": "lxbow101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 198, + "AddCost": { + "type": "dword", + "value": 6461 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Crossbow +2", + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 87 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lxbow201" + }, + "TemplateResRef": { + "type": "resref", + "value": "lxbow201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 199, + "AddCost": { + "type": "dword", + "value": 14061 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Crossbow +3", + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 100 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lxbow301" + }, + "TemplateResRef": { + "type": "resref", + "value": "lxbow301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 200, + "AddCost": { + "type": "dword", + "value": 24661 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Crossbow +4", + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 100 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lxbow401" + }, + "TemplateResRef": { + "type": "resref", + "value": "lxbow401" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 201, + "AddCost": { + "type": "dword", + "value": 32767 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 44841 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Crossbow +5", + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 43 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 100 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lxbow501" + }, + "TemplateResRef": { + "type": "resref", + "value": "lxbow501" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "xModelPart2": { + "type": "word", + "value": 43 + }, + "xModelPart3": { + "type": "word", + "value": 23 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 202, + "AddCost": { + "type": "dword", + "value": 1821 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longbow +1", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 100 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lbow101" + }, + "TemplateResRef": { + "type": "resref", + "value": "lbow101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 203, + "AddCost": { + "type": "dword", + "value": 6421 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longbow +2", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 103 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lbow201" + }, + "TemplateResRef": { + "type": "resref", + "value": "lbow201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 204, + "AddCost": { + "type": "dword", + "value": 14021 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longbow +3", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 103 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lbow301" + }, + "TemplateResRef": { + "type": "resref", + "value": "lbow301" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 205, + "AddCost": { + "type": "dword", + "value": 24621 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longbow +4", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 103 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lbow401" + }, + "TemplateResRef": { + "type": "resref", + "value": "lbow401" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 206, + "AddCost": { + "type": "dword", + "value": 32767 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 44921 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longbow +5", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 104 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lbow501" + }, + "TemplateResRef": { + "type": "resref", + "value": "lbow501" + }, + "xModelPart1": { + "type": "word", + "value": 32 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 207, + "AddCost": { + "type": "dword", + "value": 400 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 550 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This longbow allows the user to add up to a +1 strength bonus to their damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mighty Longbow ", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 45 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 104 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "m1bow001" + }, + "TemplateResRef": { + "type": "resref", + "value": "m1bow001" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 208, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This longbow allows the user to add up to a +2 strength bonus to their damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mighty Longbow ", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 45 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 110 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "m2bow001" + }, + "TemplateResRef": { + "type": "resref", + "value": "m2bow001" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 209, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This longbow allows the user to add up to a +3 strength bonus to their damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mighty Longbow ", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 45 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 110 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "m3bow001" + }, + "TemplateResRef": { + "type": "resref", + "value": "m3bow001" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 210, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This longbow allows the user to add up to a +4 strength bonus to their damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mighty Longbow ", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 45 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 110 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "m4bow001" + }, + "TemplateResRef": { + "type": "resref", + "value": "m4bow001" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 211, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This longbow allows the user to add up to a +5 strength bonus to their damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mighty Longbow ", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 45 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 110 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "m5bow001" + }, + "TemplateResRef": { + "type": "resref", + "value": "m5bow001" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 212, + "AddCost": { + "type": "dword", + "value": 1661 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 27875 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Oathbow", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 57 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 14 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 61 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 62 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 62 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 110 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lbow601" + }, + "TemplateResRef": { + "type": "resref", + "value": "lbow601" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 213, + "AddCost": { + "type": "dword", + "value": 1866 + }, + "BaseItem": { + "type": "int", + "value": 11 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shortbow +1", + "id": 171 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 107 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sbow101" + }, + "TemplateResRef": { + "type": "resref", + "value": "sbow101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 214, + "AddCost": { + "type": "dword", + "value": 8466 + }, + "BaseItem": { + "type": "int", + "value": 11 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shortbow +2", + "id": 171 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 107 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sbow201" + }, + "TemplateResRef": { + "type": "resref", + "value": "sbow201" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 215, + "AddCost": { + "type": "dword", + "value": 14066 + }, + "BaseItem": { + "type": "int", + "value": 11 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shortbow +3", + "id": 171 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 107 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sbow301" + }, + "TemplateResRef": { + "type": "resref", + "value": "sbow301" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 216, + "AddCost": { + "type": "dword", + "value": 24666 + }, + "BaseItem": { + "type": "int", + "value": 11 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shortbow +4", + "id": 171 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 114 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sbow401" + }, + "TemplateResRef": { + "type": "resref", + "value": "sbow401" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 217, + "AddCost": { + "type": "dword", + "value": 32767 + }, + "BaseItem": { + "type": "int", + "value": 11 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 44831 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shortbow +5", + "id": 171 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 114 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sbow501" + }, + "TemplateResRef": { + "type": "resref", + "value": "sbow501" + }, + "xModelPart1": { + "type": "word", + "value": 32 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 218, + "AddCost": { + "type": "dword", + "value": 1894 + }, + "BaseItem": { + "type": "int", + "value": 61 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sling +1", + "id": 1555 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 75 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sling101" + }, + "TemplateResRef": { + "type": "resref", + "value": "sling101" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 219, + "AddCost": { + "type": "dword", + "value": 6494 + }, + "BaseItem": { + "type": "int", + "value": 61 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sling +2", + "id": 1555 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 98 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sling201" + }, + "TemplateResRef": { + "type": "resref", + "value": "sling201" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 220, + "AddCost": { + "type": "dword", + "value": 14094 + }, + "BaseItem": { + "type": "int", + "value": 61 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 18300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sling +3", + "id": 1555 + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 98 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sling301" + }, + "TemplateResRef": { + "type": "resref", + "value": "sling301" + }, + "xModelPart1": { + "type": "word", + "value": 24 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 221, + "AddCost": { + "type": "dword", + "value": 24694 + }, + "BaseItem": { + "type": "int", + "value": 61 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sling +4", + "id": 1555 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 98 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sling401" + }, + "TemplateResRef": { + "type": "resref", + "value": "sling401" + }, + "xModelPart1": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 222, + "AddCost": { + "type": "dword", + "value": 32767 + }, + "BaseItem": { + "type": "int", + "value": 61 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 44773 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sling +5", + "id": 1555 + } + }, + "ModelPart1": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 98 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sling501" + }, + "TemplateResRef": { + "type": "resref", + "value": "sling501" + }, + "xModelPart1": { + "type": "word", + "value": 44 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 223, + "AddCost": { + "type": "dword", + "value": 38 + }, + "BaseItem": { + "type": "int", + "value": 31 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 442 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dart +1", + "id": 1525 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dart101" + }, + "TemplateResRef": { + "type": "resref", + "value": "dart101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 224, + "AddCost": { + "type": "dword", + "value": 130 + }, + "BaseItem": { + "type": "int", + "value": 31 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1934 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dart +2", + "id": 1525 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dart201" + }, + "TemplateResRef": { + "type": "resref", + "value": "dart201" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 225, + "AddCost": { + "type": "dword", + "value": 282 + }, + "BaseItem": { + "type": "int", + "value": 31 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4486 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dart +3", + "id": 1525 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dart301" + }, + "TemplateResRef": { + "type": "resref", + "value": "dart301" + }, + "xModelPart1": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 226, + "AddCost": { + "type": "dword", + "value": 494 + }, + "BaseItem": { + "type": "int", + "value": 31 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8098 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dart +4", + "id": 1525 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dart401" + }, + "TemplateResRef": { + "type": "resref", + "value": "dart401" + }, + "xModelPart1": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 227, + "AddCost": { + "type": "dword", + "value": 766 + }, + "BaseItem": { + "type": "int", + "value": 31 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 12770 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dart +5", + "id": 1525 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dart501" + }, + "TemplateResRef": { + "type": "resref", + "value": "dart501" + }, + "xModelPart1": { + "type": "word", + "value": 41 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 228, + "AddCost": { + "type": "dword", + "value": 38 + }, + "BaseItem": { + "type": "int", + "value": 59 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 442 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shuriken +1", + "id": 1553 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "shuriken101" + }, + "TemplateResRef": { + "type": "resref", + "value": "shuriken101" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 229, + "AddCost": { + "type": "dword", + "value": 130 + }, + "BaseItem": { + "type": "int", + "value": 59 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1934 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shuriken +2", + "id": 1553 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "shuriken201" + }, + "TemplateResRef": { + "type": "resref", + "value": "shuriken201" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 230, + "AddCost": { + "type": "dword", + "value": 282 + }, + "BaseItem": { + "type": "int", + "value": 59 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4487 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shuriken +3", + "id": 1553 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "shuriken301" + }, + "TemplateResRef": { + "type": "resref", + "value": "shuriken301" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 231, + "AddCost": { + "type": "dword", + "value": 494 + }, + "BaseItem": { + "type": "int", + "value": 59 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8099 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shuriken +4", + "id": 1553 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "shuriken401" + }, + "TemplateResRef": { + "type": "resref", + "value": "shuriken401" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 232, + "AddCost": { + "type": "dword", + "value": 766 + }, + "BaseItem": { + "type": "int", + "value": 59 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 12771 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shuriken +5", + "id": 1553 + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 29 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "shuriken501" + }, + "TemplateResRef": { + "type": "resref", + "value": "shuriken501" + }, + "xModelPart1": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 233, + "AddCost": { + "type": "dword", + "value": 38 + }, + "BaseItem": { + "type": "int", + "value": 63 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 442 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Throwing Axe +1", + "id": 1557 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 98 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "taxe101" + }, + "TemplateResRef": { + "type": "resref", + "value": "taxe101" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 13 + }, + "xModelPart3": { + "type": "word", + "value": 23 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 234, + "AddCost": { + "type": "dword", + "value": 130 + }, + "BaseItem": { + "type": "int", + "value": 63 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1934 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Throwing Axe +2", + "id": 1557 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 98 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "taxe201" + }, + "TemplateResRef": { + "type": "resref", + "value": "taxe201" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 13 + }, + "xModelPart3": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 235, + "AddCost": { + "type": "dword", + "value": 282 + }, + "BaseItem": { + "type": "int", + "value": 63 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4487 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Throwing Axe +3", + "id": 1557 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 98 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "taxe301" + }, + "TemplateResRef": { + "type": "resref", + "value": "taxe301" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 13 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 236, + "AddCost": { + "type": "dword", + "value": 494 + }, + "BaseItem": { + "type": "int", + "value": 63 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8099 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Throwing Axe +4", + "id": 1557 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 98 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "taxe401" + }, + "TemplateResRef": { + "type": "resref", + "value": "taxe401" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 41 + }, + "xModelPart3": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 237, + "AddCost": { + "type": "dword", + "value": 766 + }, + "BaseItem": { + "type": "int", + "value": 63 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 12771 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Throwing Axe +5", + "id": 1557 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 98 + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "taxe501" + }, + "TemplateResRef": { + "type": "resref", + "value": "taxe501" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 41 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + }, + { + "__struct_id": 2 + }, + { + "__struct_id": 3 + }, + { + "__struct_id": 1 + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "ArmorNWeapons" + }, + "WillNotBuy": { + "type": "list", + "value": [] + }, + "WillOnlyBuy": { + "type": "list", + "value": [] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 37.2866 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 47.5778 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 11, + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 10 + }, + "IdentifyPrice": { + "type": "int", + "value": 100 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Misc. Oddities" + } + }, + "MarkDown": { + "type": "int", + "value": 50 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "MaxBuyPrice": { + "type": "int", + "value": -1 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "OnStoreClosed": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "townstore" + }, + "StoreGold": { + "type": "int", + "value": -1 + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2 + }, + { + "__struct_id": 3 + }, + { + "__struct_id": 1, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 7735 + }, + "BaseItem": { + "type": "int", + "value": 66 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bag of Holding" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 15 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 32 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb026" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb026" + }, + "xModelPart1": { + "type": "word", + "value": 2 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 899 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 900 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This bag is full of little hairy balls. When 1 is thrown a random creature will be summoned there to fight for you. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bag of Tricks (Grey)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca013" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca013" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 2999 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This bag is full of little hairy balls. When 1 is thrown a random creature will be summoned there to fight for you. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bag of Tricks (Rust)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca053" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca053" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 6299 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This bag is full of little hairy balls. When 1 is thrown a random creature will be summoned there to fight for you. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bag of Tricks (Tan)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca093" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca093" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 16896 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 26000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bands of Bilarro" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 392 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb090" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb090" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 5499 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 14500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "No it's not Parriair." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bottle of Air" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 418 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb044" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb044" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 15097 + }, + "BaseItem": { + "type": "int", + "value": 34 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 15100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This broom will allow it's user to fly back up thru a pit trap they have fallen thru." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Broom of Flying" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb051" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb051" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 7800 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 7800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This candle when burned will give everyone in the user's party +2 to attack rolls, saving throws and skill checks for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Candle of Invocation" + } + }, + "ModelPart1": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb004" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb004" + }, + "xModelPart1": { + "type": "word", + "value": 51 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 1900 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Candle of Truth" + } + }, + "ModelPart1": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 243 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca046" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca046" + }, + "xModelPart1": { + "type": "word", + "value": 51 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 15796 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 15800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This little chime packs a full base tone. The tone is so strong that it can prevent spell casters from being able to cast their spells." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chime of Interruption" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb056" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb056" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 10, + "AddCost": { + "type": "dword", + "value": 2998 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This chime will unlock almost any locked object." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chime of Opening" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca054" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca054" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 11, + "AddCost": { + "type": "dword", + "value": 16125 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 42000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Very useful for spying on merchants to blackmail them for the best prices.\n\n+5 to Appraise and Persuade Skills while you own this." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Crystal Ball" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 44 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc032" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc032" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 12, + "AddCost": { + "type": "dword", + "value": 25125 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 51000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Very useful for spying on merchants to blackmail them for the best prices.\n\n+10 to Appraise and Persuade Skills while you own this." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Crystal Ball -w- Detect Thoughts" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 44 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc041" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc041" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 13, + "AddCost": { + "type": "dword", + "value": 24125 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Very useful for spying on merchants to blackmail them for the best prices.\n\n+5 to Appraise and Persuade Skills while you own this.\n\nThis particular crystal ball also allows the owner to see invisible." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Crystal Ball -w- See Invisibility" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 44 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc038" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc038" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 14, + "AddCost": { + "type": "dword", + "value": 2500 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 70000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Very useful for spying on merchants to blackmail them for the best prices.\n\n+15 to Appraise and Persuade Skills while you own this." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Crystal Ball -w- Telepathy" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 44 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc057" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc057" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 15, + "AddCost": { + "type": "dword", + "value": 11656 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 80000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Very useful for spying on merchants to blackmail them for the best prices.\n\n+5 to Appraise and Persuade Skills while you own this.\n\nThis particular crystal ball also gives the user True seeing, and allows others to see thru the ball as well." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Crystal Ball -w- True Seeing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 44 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 275 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc063" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc063" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 9199 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 34 + }, + "Cost": { + "type": "dword", + "value": 9200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This magic set of cards will summon forth the creature on the card when it is drawn. Only 1 card can be in play at any time and once the magic is activated the card disappears forever." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Deck of Summons" + } + }, + "ModelPart1": { + "type": "byte", + "value": 98 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb024" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb024" + }, + "xModelPart1": { + "type": "word", + "value": 98 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 17, + "AddCost": { + "type": "dword", + "value": 29997 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 30000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this drum is played it will attempt to fear EVERYTHING within 120 feet of the player. Only a small 20ft circle near the player is immune to this effect. A will save of DC 16 negates this efect." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Drum of Fear" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc006" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc006" + }, + "xModelPart1": { + "type": "word", + "value": 2 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 18, + "AddCost": { + "type": "dword", + "value": 599 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dust of Appearance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 152 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca043" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca043" + }, + "xModelPart1": { + "type": "word", + "value": 24 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 19, + "AddCost": { + "type": "dword", + "value": 698 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dust of Disappearance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 27 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 149 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca057" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca057" + }, + "xModelPart1": { + "type": "word", + "value": 27 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 20, + "AddCost": { + "type": "dword", + "value": 899 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 900 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Nothing cleans up a spill like this stuff. Course then you have to get the dust up....\n\nWhere it really shines is when used against a water elemental. The elemental is forced to make a Fortitude save DC:18 or die. Even if it makes the save it takes 5d6 damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dust of Dryness" + } + }, + "ModelPart1": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca014" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca014" + }, + "xModelPart1": { + "type": "word", + "value": 26 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 21, + "AddCost": { + "type": "dword", + "value": 499 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This dust will add +10 to your hide and persuade checks for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dust of Illusion" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca009" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca009" + }, + "xModelPart1": { + "type": "word", + "value": 24 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 22, + "AddCost": { + "type": "dword", + "value": 85 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 90 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Everburning Torch" + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 4 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca003" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca003" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 23, + "AddCost": { + "type": "dword", + "value": 5196 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This bottle will surround the opener with dense cloud of smoke that will blot out all light." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eversmoking Bottle" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca082" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca082" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 24, + "AddCost": { + "type": "dword", + "value": 9999 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a bronze gargoyle. If the gargoyle is killed the item is broken. To safely unsummon the gargoyle take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Bronze Gargoyle)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb027" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb027" + }, + "xModelPart1": { + "type": "word", + "value": 45 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 25, + "AddCost": { + "type": "dword", + "value": 9999 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a ebony manticore. If the manticore is killed the item is broken. To safely unsummon the manticore take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Ebony Manticore)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb028" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb028" + }, + "xModelPart1": { + "type": "word", + "value": 45 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 26, + "AddCost": { + "type": "dword", + "value": 16499 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a golden lion. If the lion is killed the item is broken. To safely unsummon the lion take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Golden Lion)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb066" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb066" + }, + "xModelPart1": { + "type": "word", + "value": 45 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 27, + "AddCost": { + "type": "dword", + "value": 20998 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 9 + }, + "Cost": { + "type": "dword", + "value": 21000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a ivory ox. If the ox is killed the item is broken. To safely unsummon the ox take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Ivory Ox)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb075" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb075" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 28, + "AddCost": { + "type": "dword", + "value": 16999 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 17000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a marble bear. If the bear is killed the item is broken. To safely unsummon the bear take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Marble Bear)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb067" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb067" + }, + "xModelPart1": { + "type": "word", + "value": 45 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 29, + "AddCost": { + "type": "dword", + "value": 28499 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 28500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a obsidian ox. If the ox is killed the item is broken. To safely unsummon the ox take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Obsidian Ox)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb098" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb098" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 30, + "AddCost": { + "type": "dword", + "value": 15499 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 15500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a onyx dog. If the dog is killed the item is broken. To safely unsummon the dog take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Onyx Dog)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb055" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb055" + }, + "xModelPart1": { + "type": "word", + "value": 45 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 31, + "AddCost": { + "type": "dword", + "value": 9099 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a very tough bird. If the bird is killed the item is broken. To safely unsummon the bird take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Silver Owl)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb022" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb022" + }, + "xModelPart1": { + "type": "word", + "value": 45 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32, + "AddCost": { + "type": "dword", + "value": 3799 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a very tough bird. If the bird is killed the item is broken. To safely unsummon the bird take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Silver Raven)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca059" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca059" + }, + "xModelPart1": { + "type": "word", + "value": 45 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 33, + "AddCost": { + "type": "dword", + "value": 3528 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 15200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gem of Brightness" + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 163 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 242 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb053" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb053" + }, + "xModelPart1": { + "type": "word", + "value": 68 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 34, + "AddCost": { + "type": "dword", + "value": 25500 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 93000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gem of Chaos" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 53 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 62 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc075" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc075" + }, + "xModelPart1": { + "type": "word", + "value": 25 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 35, + "AddCost": { + "type": "dword", + "value": 12362 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 100000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gem of Elemental Command" + } + }, + "ModelPart1": { + "type": "byte", + "value": 102 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 269 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 270 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc080" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc080" + }, + "xModelPart1": { + "type": "word", + "value": 102 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 36, + "AddCost": { + "type": "dword", + "value": 26063 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 75000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gem of Seeing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 275 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc059" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc059" + }, + "xModelPart1": { + "type": "word", + "value": 25 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 37, + "AddCost": { + "type": "dword", + "value": 18038 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Gem of Elemental Command" + } + }, + "ModelPart1": { + "type": "byte", + "value": 102 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 267 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc094" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc094" + }, + "xModelPart1": { + "type": "word", + "value": 102 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 38, + "AddCost": { + "type": "dword", + "value": 7497 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 7500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The player of this harp can attempt to charm all nearby listeners into thinking that the player is a good friend.\n\nFailure willresult in all listening to attack the offending player.\n\nEveryone is a critic." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Harp of Charming" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb002" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb002" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 39, + "AddCost": { + "type": "dword", + "value": 985 + }, + "BaseItem": { + "type": "int", + "value": 66 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heward's Handy Haversack" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 15 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 32 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca038" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca038" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 40, + "AddCost": { + "type": "dword", + "value": 11996 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 12000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This horn when blown causes cone of sonic damage, and may stun and deafen targets.", + "id": 62342 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horn of Blasting", + "id": 62341 + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb037" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb037" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 41, + "AddCost": { + "type": "dword", + "value": 1996 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When played properly this horn causes a magical darkness." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horn of Darkness" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca039" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca039" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 42, + "AddCost": { + "type": "dword", + "value": 2162 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 15100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "", + "id": 62342 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horn of Fear", + "id": 62341 + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb052" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb052" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 43, + "AddCost": { + "type": "dword", + "value": 5996 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This horn will produce a circle of protection vs good/evil depending on the blower's own alignment. If the blower is neutral this item will not function.\n\nThis horn can be used by anyone and the circle will last 1 minute. In the hands of a skilled bard it lasts much longer.", + "id": 62342 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horn of Goodness/Evil", + "id": 62341 + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca091" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca091" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 44, + "AddCost": { + "type": "dword", + "value": 16249 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This horn can be used normally to strike fear in the hearts of your enemies. \n\nThe true power lies in it's special ability to summon forth 2d4+2 Level 2 Barbarians to fight for you for 2 minutes.", + "id": 62342 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horn of Valhalla", + "id": 62341 + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc1039" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc1039" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 45, + "AddCost": { + "type": "dword", + "value": 16249 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This horn can be used normally to strike fear in the hearts of your enemies. \n\nThe true power lies in it's special ability to summon forth 2d4+1 Level 3 Barbarians. These barbarians will either fight for you or try to kill you. Either way they will be around for 20 rounds.", + "id": 62342 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horn of Valhalla", + "id": 62341 + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc2038" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc2038" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 46, + "AddCost": { + "type": "dword", + "value": 16249 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This horn can be used normally to strike fear in the hearts of your enemies. \n\nThe true power lies in it's special ability to summon forth 2d4 Level 4 Barbarians. These barbarians will either fight for you or try to kill you. Either way they will be around for 20 rounds.", + "id": 62342 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horn of Valhalla", + "id": 62341 + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc3038" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc3038" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 47, + "AddCost": { + "type": "dword", + "value": 16249 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This horn can be used normally to strike fear in the hearts of your enemies. \n\nThe true power lies in it's special ability to summon forth 1d4+1 Level 5 Barbarians. These barbarians will either fight for you or try to kill you. Either way they will be around for 20 rounds.", + "id": 62342 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horn of Valhalla", + "id": 62341 + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc4038" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc4038" + }, + "xModelPart1": { + "type": "word", + "value": 8 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 48, + "AddCost": { + "type": "dword", + "value": 1900 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1910 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Nice set of magic horse shoes that allow a horse to run at double it's normal speed.\n\nOne problem... Seen a horse recently?\nYou should probably sell these to the first sucker you can find." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horseshoes of Speed" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca032" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca032" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 49, + "AddCost": { + "type": "dword", + "value": 2990 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Nice set of magic horse shoes that allow a horse to run just above the ground even across water.\n\nOne problem... Seen a horse recently?\nYou should probably sell these to the first sucker you can find." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horseshoes of the Zephyr" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca056" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca056" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 50, + "AddCost": { + "type": "dword", + "value": 4299 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4900 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Incense of Meditation" + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 46 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca077" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca077" + }, + "xModelPart1": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 51, + "AddCost": { + "type": "dword", + "value": 4997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Allows the user to rest without need of food." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Clear Spindle)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca079" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca079" + }, + "xModelPart1": { + "type": "word", + "value": 68 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 52, + "AddCost": { + "type": "dword", + "value": 7997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone gives the Alertness feat." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Dark Blue Rhomboid)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 49 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb007" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb007" + }, + "xModelPart1": { + "type": "word", + "value": 49 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 53, + "AddCost": { + "type": "dword", + "value": 7997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone gives +2 Dexterity." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Deep Red Sphere)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 64 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb008" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb008" + }, + "xModelPart1": { + "type": "word", + "value": 64 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 54, + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This stone is burned out and useless." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Dull Grey)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca001" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca001" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 55, + "AddCost": { + "type": "dword", + "value": 3997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This stone give +1 Deflection AC modifier." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Dusty Rose Prism)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 73 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca063" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca063" + }, + "xModelPart1": { + "type": "word", + "value": 73 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 56, + "AddCost": { + "type": "dword", + "value": 7997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone gives +2 Wisdom." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Incandescent Blue Sphere)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb009" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb009" + }, + "xModelPart1": { + "type": "word", + "value": 44 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 57, + "AddCost": { + "type": "dword", + "value": 14997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 15000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "PC rest and food requirements are gone. They can rest whenever they like while using this stone." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Iridecent Spindle)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb047" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb047" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 58, + "AddCost": { + "type": "dword", + "value": 32767 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 32767 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone when activated will shield the user from spells up to level 8. With a total protection of 50 spell levels. \n\nUnlike most Ioun Stones this is a single use item, and it's effects will wear off when you rest." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Lavendar and Green Ellipsoid)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc028" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc028" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 59, + "AddCost": { + "type": "dword", + "value": 7997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone gives +2 Stength." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Pale Blue Rhomboid)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 49 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb010" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb010" + }, + "xModelPart1": { + "type": "word", + "value": 49 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 60, + "AddCost": { + "type": "dword", + "value": 19997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone gives a +1 bonus to all attack rolls, saving throws, and skill checks." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Pale Green Prism)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 27 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb072" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb072" + }, + "xModelPart1": { + "type": "word", + "value": 27 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 61, + "AddCost": { + "type": "dword", + "value": 20000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone when activated will shield the user from spells up to level 4. With a total protection of 20 spell levels. \n\nUnlike most Ioun Stones this is a single use item, and it's effects will wear off when you rest." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Pale Lavender Ellipsoid)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb073" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb073" + }, + "xModelPart1": { + "type": "word", + "value": 44 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 62, + "AddCost": { + "type": "dword", + "value": 19997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 20000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone allows regeneration of hitpoints at the rate of 1 hit point per round." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Pearly White Spindle)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb074" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb074" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 63, + "AddCost": { + "type": "dword", + "value": 7997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone gives +2 Charisma." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Pink and Green Sphere)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb012" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb012" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 64, + "AddCost": { + "type": "dword", + "value": 7997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone gives +2 Constitution." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Pink Rhomboid)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 73 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb011" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb011" + }, + "xModelPart1": { + "type": "word", + "value": 73 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65, + "AddCost": { + "type": "dword", + "value": 7997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone gives +2 Intelligence." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Scarlet and Blue Sphere)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb013" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb013" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 66, + "AddCost": { + "type": "dword", + "value": 11997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 12000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone warns the user of impending danger. Giving them the peace of mind to allow them to rest in the dungeon when they feel like." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Vibrant Purple Prism)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb038" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb038" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 67, + "AddCost": { + "type": "dword", + "value": 24030 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 170000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Iron Flask" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 361 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 267 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc098" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc098" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 68, + "AddCost": { + "type": "dword", + "value": 14799 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 14800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This statue will transform itself into a huge iron ox capible of carrying great loads. If the Ox is destroyed all the items it was carrying are lost. To unsummon this ox safely simply take it's statue out of it's pack." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Iron Ox" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb045" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb045" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 69, + "AddCost": { + "type": "dword", + "value": 3998 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "If applied to a person who is poisoned this will cure it. If applied to a person who is diseased it will be cured. If applied to a person who is hurt they will be healed 1d8+5 damage. If applied to a healthy person it does... nothing.\n\n" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Keoghtom's Ointment" + } + }, + "ModelPart1": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca064" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca064" + }, + "xModelPart1": { + "type": "word", + "value": 19 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 70, + "AddCost": { + "type": "dword", + "value": 9990 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This stone gives a +1 bonus to all skill checks, ability checks, and saving throws.\n\nJust keep it in your pocket." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Luck Stone" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb031" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb031" + }, + "xModelPart1": { + "type": "word", + "value": 2 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 71, + "AddCost": { + "type": "dword", + "value": 2000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Some wizard somewhere got hit with a thunderstone decided to get even and made this little toy. Luckily not many of these were ever made, it's rumored their creator dropped one.... \n\n5d6 sonic damage to anything within 15 feet of the target, reflex save DC 16 for half damage. \n\nIn addition everyone affected must then make a fortitude save DC 16 or be deaf for 3d6 minutes." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Magic Thunderstone" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca034" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca034" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 72, + "AddCost": { + "type": "dword", + "value": 399 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 13000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mandolin of Protection" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 190 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb042" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb042" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 73, + "AddCost": { + "type": "dword", + "value": 23000 + }, + "BaseItem": { + "type": "int", + "value": 34 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 23000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "If you were a giant this would be a mighty weapon. But your not... Maybe you can find one that wants to buy it." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mattock of Titans" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 11 + }, + "Param1Value": { + "type": "byte", + "value": 5 + }, + "PropertyName": { + "type": "word", + "value": 81 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb078" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb078" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 74, + "AddCost": { + "type": "dword", + "value": 3500 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 152000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mirror of Banishing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 361 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc095" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc095" + }, + "xModelPart1": { + "type": "word", + "value": 24 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 75, + "AddCost": { + "type": "dword", + "value": 18416 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 173500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The possessor of this mirror can read the minds of merchants giving them a +15 to both persuade and appraise skills.\n\nThis mirror can be used to create a door to another room of the dungeon." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mirror of Mental Prowness" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 299 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 11 + }, + "Param1Value": { + "type": "byte", + "value": 3 + }, + "PropertyName": { + "type": "word", + "value": 81 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc099" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc099" + }, + "xModelPart1": { + "type": "word", + "value": 24 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 76, + "AddCost": { + "type": "dword", + "value": 8997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This bowl will endless produce Murlynd's Tasteless soup. While tasting alot like a 2x4 it will keep your stomach fooled." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Murlynd's Bottomless Bowl" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb019" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb019" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 77, + "AddCost": { + "type": "dword", + "value": 5498 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This spoon can create enough food per day to feed 4 people. Granted the food tastes like cardboard, but even that is better than an empty stomach." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Murlynd's Spoon" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 11 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca084" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca084" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 78, + "AddCost": { + "type": "dword", + "value": 5499 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 5500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This is a magic paint set. With it you can paint a door to another room in the dungeon." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Nolzur's Marvelous Pigments" + } + }, + "ModelPart1": { + "type": "byte", + "value": 95 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca085" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca085" + }, + "xModelPart1": { + "type": "word", + "value": 95 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 79, + "AddCost": { + "type": "dword", + "value": 14375 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 38000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Orb of Storms" + } + }, + "ModelPart1": { + "type": "byte", + "value": 14 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 21 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 217 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc024" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc024" + }, + "xModelPart1": { + "type": "word", + "value": 14 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 80, + "AddCost": { + "type": "dword", + "value": 14440 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 70000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to 2 level 8 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power (2 Spells)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 522 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc058" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc058" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 81, + "AddCost": { + "type": "dword", + "value": 1000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store a level 1 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power I" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca020" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca020" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 82, + "AddCost": { + "type": "dword", + "value": 4000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to a level 2 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power II" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca065" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca065" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 83, + "AddCost": { + "type": "dword", + "value": 9000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 9000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to a level 2 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power III" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb020" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb020" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 84, + "AddCost": { + "type": "dword", + "value": 16000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to a level 4 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power IV" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb059" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb059" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 85, + "AddCost": { + "type": "dword", + "value": 31440 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 81000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to a level 9 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power IX" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc064" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc064" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 86, + "AddCost": { + "type": "dword", + "value": 25000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to a level 5 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power V" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb087" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb087" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 87, + "AddCost": { + "type": "dword", + "value": 30000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 36000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to a level 6 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power VI" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc022" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc022" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 88, + "AddCost": { + "type": "dword", + "value": 12750 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 49000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to a level 7 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power VII" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc035" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc035" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 89, + "AddCost": { + "type": "dword", + "value": 14440 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 64000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to a level 8 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power VIII" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc056" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc056" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 90, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 16875 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Sirines" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 46 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 232 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb054" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb054" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 91, + "AddCost": { + "type": "dword", + "value": 1999 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 6500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pipes of Haunting" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 241 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca095" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca095" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 92, + "AddCost": { + "type": "dword", + "value": 11996 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 12000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These pipes require the ability to perform to use.When played these pipes put out a odd tune that will attempt to stun every one including the player into listening to it DC14 Will. \n\nOnce the stun effect is over all those affected will be hyper sensitive to sounds. Each round for 2d4 rounds the target will take 1d4 sonic damage due to the sounds of all the heavy breathing around him. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pipes of Pain" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb040" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb040" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 93, + "AddCost": { + "type": "dword", + "value": 1796 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When played properly the sounds of these pipes are so odd that anything that hears it's notes will come to investigate. Of course some creatures are naturally uninvestigative." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pipes of Sounding" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca029" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca029" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 94, + "AddCost": { + "type": "dword", + "value": 1146 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These pipes when played summon rats... Lots of rats and I don't mean your cousin noone mentions type rats. I mean the big, hairy, cheese eating kind... never mind.\n\nOnce summoned the player must make a perform check DC 10. If the player succeeds the Rats will help them. If not not they will attack the poor player." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pipes of the Sewers" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca024" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca024" + }, + "xModelPart1": { + "type": "word", + "value": 7 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 95, + "AddCost": { + "type": "dword", + "value": 13000 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 13000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This hole will make a door to a random room in the dungeon." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Portable Hole" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb043" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb043" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 96, + "AddCost": { + "type": "dword", + "value": 39 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Will render any boat immobile for upto 1 day.\n\n\n\nSince you don't have a boat.. and don't even know a person who has a boat. You should probably sell this for it's item value." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quaal's Feather Token (Anchor)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca002" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca002" + }, + "xModelPart1": { + "type": "word", + "value": 29 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 97, + "AddCost": { + "type": "dword", + "value": 299 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Makes a bird." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quaal's Feather Token (Bird)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca007" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca007" + }, + "xModelPart1": { + "type": "word", + "value": 29 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 98, + "AddCost": { + "type": "dword", + "value": 439 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 450 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item would create a good size boat capible holding your entire party, everyone's gear and your horses.\n\nHowever since there are no boats your just gonna have to sell this for it's item value." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quaal's Feather Token (Boat)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca008" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca008" + }, + "xModelPart1": { + "type": "word", + "value": 29 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 99, + "AddCost": { + "type": "dword", + "value": 189 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Would cause a gentle breeze... If you were not on dry land that is." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quaal's Feather Token (Fan)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca005" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca005" + }, + "xModelPart1": { + "type": "word", + "value": 29 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 100, + "AddCost": { + "type": "dword", + "value": 99 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Makes a tree." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quaal's Feather Token (Tree)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca004" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca004" + }, + "xModelPart1": { + "type": "word", + "value": 29 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 101, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 601 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quaal's Feather Token (Whip)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 113 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca011" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca011" + }, + "xModelPart1": { + "type": "word", + "value": 29 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 102, + "AddCost": { + "type": "dword", + "value": 1797 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Funny but this quiver never seems to run out of arrows." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quiver of Ehlonna" + } + }, + "ModelPart1": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca030" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca030" + }, + "xModelPart1": { + "type": "word", + "value": 47 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 103, + "AddCost": { + "type": "dword", + "value": 2997 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "You can use this rope on a pit to allow it to be entered. It is also useful for getting friends back to the top of it.\n\nThe real advantage of the rope of climbing though is that you can use it to go back up a pit you have fallen into.\n\nAnother advantage of the rope of climbing is that it is not consumed when used." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rope of Climbing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 103 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 11 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 81 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca055" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca055" + }, + "xModelPart1": { + "type": "word", + "value": 103 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 104, + "AddCost": { + "type": "dword", + "value": 9750 + }, + "BaseItem": { + "type": "int", + "value": 34 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 21000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Silly isn't it." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rug of Entanglement" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 102 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 11 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 81 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb076" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb076" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 105, + "AddCost": { + "type": "dword", + "value": 14999 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 15000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This scabbard can be used to magically sharpen any piercing or slashing melee weapon. This effect doubles the normal critical range of the weapon and lasts for 10 minutes.\n\nIf this scabard is used on a PC their primary weapon will be given the effect as long as it fits the rules." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scabard of Keen Edges" + } + }, + "ModelPart1": { + "type": "byte", + "value": 90 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb050" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb050" + }, + "xModelPart1": { + "type": "word", + "value": 90 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 106, + "AddCost": { + "type": "dword", + "value": 2497 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this item is used on a golem the golem loses all of it's normal damage reduction. Making it vulnerable to even the most mundane of weapons." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scarab of Golem Bane (Any)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca050" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca050" + }, + "xModelPart1": { + "type": "word", + "value": 37 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 107, + "AddCost": { + "type": "dword", + "value": 997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this item is used on a golem the golem loses all of it's normal damage reduction. Making it vulnerable to even the most mundane of weapons." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scarab of Golem Bane (Clay)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca022" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca022" + }, + "xModelPart1": { + "type": "word", + "value": 37 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 108, + "AddCost": { + "type": "dword", + "value": 1797 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this item is used on a golem the golem loses all of it's normal damage reduction. Making it vulnerable to even the most mundane of weapons." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scarab of Golem Bane (Flesh & Clay)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca031" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca031" + }, + "xModelPart1": { + "type": "word", + "value": 37 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 109, + "AddCost": { + "type": "dword", + "value": 797 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this item is used on a golem the golem loses all of it's normal damage reduction. Making it vulnerable to even the most mundane of weapons." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scarab of Golem Bane (Flesh)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca012" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca012" + }, + "xModelPart1": { + "type": "word", + "value": 37 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 110, + "AddCost": { + "type": "dword", + "value": 1597 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this item is used on a golem the golem loses all of it's normal damage reduction. Making it vulnerable to even the most mundane of weapons." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scarab of Golem Bane (Iron)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca027" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca027" + }, + "xModelPart1": { + "type": "word", + "value": 37 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 111, + "AddCost": { + "type": "dword", + "value": 1197 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this item is used on a golem the golem loses all of it's normal damage reduction. Making it vulnerable to even the most mundane of weapons." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scarab of Golem Bane (Stone)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca025" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca025" + }, + "xModelPart1": { + "type": "word", + "value": 37 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 112, + "AddCost": { + "type": "dword", + "value": 374 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 2400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Normally Sovereign Glue would stick just about anything together forever but this batch has been diluted and made into grenades." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sovereign Glue" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 281 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca045" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca045" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 113, + "AddCost": { + "type": "dword", + "value": 25000 + }, + "BaseItem": { + "type": "int", + "value": 34 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "If you were a giant this would be a mighty digging tool. But your not... Maybe you can find one that wants to buy it." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spade of Titans" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 11 + }, + "Param1Value": { + "type": "byte", + "value": 5 + }, + "PropertyName": { + "type": "word", + "value": 81 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb086" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb086" + }, + "xModelPart1": { + "type": "word", + "value": 5 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 114, + "AddCost": { + "type": "dword", + "value": 22000 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 22000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This sphere will shield the user from cold attacks. It can take 100 points of damage before the shield collapses. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sphere of Frost Resistance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 14 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb077" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb077" + }, + "xModelPart1": { + "type": "word", + "value": 14 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 115, + "AddCost": { + "type": "dword", + "value": 31062 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 36 + }, + "Cost": { + "type": "dword", + "value": 62000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sphere of Protection" + } + }, + "ModelPart1": { + "type": "byte", + "value": 14 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 286 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 217 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc054" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc054" + }, + "xModelPart1": { + "type": "word", + "value": 14 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 116, + "AddCost": { + "type": "dword", + "value": 1000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this item is used the party's rest counters are reset. Allowing rest in the dungeon 1 time." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Stone of Alarm" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca023" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca023" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 117, + "AddCost": { + "type": "dword", + "value": 10497 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this item is used it will allow the user to pick a destination nearby. The party will then be instanlty teleported to that location. Handy for crossing streams without getting your feet wet." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Stone of Mass Jump" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb033" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb033" + }, + "xModelPart1": { + "type": "word", + "value": 45 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 118, + "AddCost": { + "type": "dword", + "value": 9999 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 10000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This statue will transform itself into a huge stone ox capible of carrying great loads. If the Ox is destoryed all the items it was carrying are lost. To unsummon this ox safely simply take it's statue out of it's pack." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Stone Ox" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb032" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb032" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 119, + "AddCost": { + "type": "dword", + "value": 3999 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This stuff has 2 possible uses. If used on a person who has been petrified, turned to stone or otherwise resembles a statue it will return them to flesh. If used on a fleshy person it will give them Stoneskin as per the spell.\n\n" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Stone Salve" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca067" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca067" + }, + "xModelPart1": { + "type": "word", + "value": 37 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 120, + "AddCost": { + "type": "dword", + "value": 249 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "No you don't get this from shaking a thief... No matter how hard you try.\n\nBut when used it gives +5 to Hide and Move Silent Checks for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Thief's Dust" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca006" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca006" + }, + "xModelPart1": { + "type": "word", + "value": 24 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 121, + "AddCost": { + "type": "dword", + "value": 29995 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 30000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This torch will reveal anything hidden by invisibility or improved invisibility within 20 feet of the holder." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Torch of Revealing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 6 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 25 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc002" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc002" + }, + "xModelPart1": { + "type": "word", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 122, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2802 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This stuff is so slick it will unglue anything. \n\nFor External Use Only." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Universal Solvent" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 118 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 25 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca041" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca041" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 123, + "AddCost": { + "type": "dword", + "value": 1923 + }, + "BaseItem": { + "type": "int", + "value": 66 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Weight Reducing Bag. 40%" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 15 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 32 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 26 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca047" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca047" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 124, + "AddCost": { + "type": "dword", + "value": 3985 + }, + "BaseItem": { + "type": "int", + "value": 66 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Weight Reducing Bag. 60%" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 15 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 32 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 26 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca078" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca078" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 125, + "AddCost": { + "type": "dword", + "value": 5823 + }, + "BaseItem": { + "type": "int", + "value": 66 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 7400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Weight Reducing Bag. 80%" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 15 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 32 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 26 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca098" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca098" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 126, + "AddCost": { + "type": "dword", + "value": 8225 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 80000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Well of souls" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 361 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 27 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc065" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc065" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 127, + "AddCost": { + "type": "dword", + "value": 2499 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wind Fan" + } + }, + "ModelPart1": { + "type": "byte", + "value": 98 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 410 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 28 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca086" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca086" + }, + "xModelPart1": { + "type": "word", + "value": 98 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 128, + "AddCost": { + "type": "dword", + "value": 14560 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 92000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "If you can get a opponent to look into this mirror (ranged touch attack) it will summon a copy of the opponent. The copy is an exact duplicate which will attempt to kill the opponent.\n\nThis mirror can not be used on PCs." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mirror of Opposition" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 11 + }, + "Param1Value": { + "type": "byte", + "value": 4 + }, + "PropertyName": { + "type": "word", + "value": 81 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 28 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc074" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc074" + }, + "xModelPart1": { + "type": "word", + "value": 24 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "MiscMagic" + }, + "WillNotBuy": { + "type": "list", + "value": [] + }, + "WillOnlyBuy": { + "type": "list", + "value": [] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 37.7345 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 45.9889 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 11, + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 10 + }, + "IdentifyPrice": { + "type": "int", + "value": 100 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Potions" + } + }, + "MarkDown": { + "type": "int", + "value": 10 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "MaxBuyPrice": { + "type": "int", + "value": -1 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "OnStoreClosed": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "townstore" + }, + "StoreGold": { + "type": "int", + "value": -1 + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Aid" + } + }, + "ModelPart1": { + "type": "byte", + "value": 54 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion015" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion015" + }, + "xModelPart1": { + "type": "word", + "value": 54 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 220 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Barkskin" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "ModelPart2": { + "type": "byte", + "value": 53 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 5 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion011" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion011" + }, + "xModelPart1": { + "type": "word", + "value": 45 + }, + "xModelPart2": { + "type": "word", + "value": 53 + }, + "xModelPart3": { + "type": "word", + "value": 23 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bull Strength" + } + }, + "ModelPart1": { + "type": "byte", + "value": 14 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 15 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion019" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion019" + }, + "xModelPart1": { + "type": "word", + "value": 14 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cat's Grace" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 25 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion018" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion018" + }, + "xModelPart1": { + "type": "word", + "value": 24 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Clairaudience/Clairvoyance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 18 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 62 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 43 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion007" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion007" + }, + "xModelPart1": { + "type": "word", + "value": 18 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 62 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 30 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cure Light Wounds" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion002" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion002" + }, + "xModelPart1": { + "type": "word", + "value": 21 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 267 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cure Moderate Wounds" + } + }, + "ModelPart1": { + "type": "byte", + "value": 71 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 69 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion014" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion014" + }, + "xModelPart1": { + "type": "word", + "value": 71 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 684 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cure Serious Wounds" + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 72 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion025" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion025" + }, + "xModelPart1": { + "type": "word", + "value": 41 + }, + "xModelPart2": { + "type": "word", + "value": 42 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eagle's Spendor" + } + }, + "ModelPart1": { + "type": "byte", + "value": 53 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 288 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion008" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion008" + }, + "xModelPart1": { + "type": "word", + "value": 53 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Endurance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 55 + }, + "ModelPart2": { + "type": "byte", + "value": 43 + }, + "ModelPart3": { + "type": "byte", + "value": 63 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 95 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion013" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion013" + }, + "xModelPart1": { + "type": "word", + "value": 55 + }, + "xModelPart2": { + "type": "word", + "value": 43 + }, + "xModelPart3": { + "type": "word", + "value": 63 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 10, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "+10 to Spot Checks for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eyes" + } + }, + "ModelPart1": { + "type": "byte", + "value": 38 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion004" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion004" + }, + "xModelPart1": { + "type": "word", + "value": 38 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 11, + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fox's Cunning" + } + }, + "ModelPart1": { + "type": "byte", + "value": 63 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 294 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion009" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion009" + }, + "xModelPart1": { + "type": "word", + "value": 63 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 12, + "AddCost": { + "type": "dword", + "value": 500 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "+30 Persuade Checks for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Glibness" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion020" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion020" + }, + "xModelPart1": { + "type": "word", + "value": 37 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 13, + "AddCost": { + "type": "dword", + "value": 450 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Haste" + } + }, + "ModelPart1": { + "type": "byte", + "value": 44 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 137 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion031" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion031" + }, + "xModelPart1": { + "type": "word", + "value": 44 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 14, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "+10 Hide Skill for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hiding" + } + }, + "ModelPart1": { + "type": "byte", + "value": 56 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion005" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion005" + }, + "xModelPart1": { + "type": "word", + "value": 56 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 15, + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Invisiblity" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 151 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion016" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion016" + }, + "xModelPart1": { + "type": "word", + "value": 16 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 50 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Allows for a short range jump instantly." + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Jump Potion" + } + }, + "ModelPart1": { + "type": "byte", + "value": 64 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion001" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion001" + }, + "xModelPart1": { + "type": "word", + "value": 64 + }, + "xModelPart2": { + "type": "word", + "value": 41 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 17, + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Restoration" + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 159 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion017" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion017" + }, + "xModelPart1": { + "type": "word", + "value": 66 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 18, + "AddCost": { + "type": "dword", + "value": 450 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Neutralize Poison" + } + }, + "ModelPart1": { + "type": "byte", + "value": 55 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 204 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion024" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion024" + }, + "xModelPart1": { + "type": "word", + "value": 55 + }, + "xModelPart2": { + "type": "word", + "value": 42 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 19, + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Owl's Wisdom" + } + }, + "ModelPart1": { + "type": "byte", + "value": 52 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 291 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion010" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion010" + }, + "xModelPart1": { + "type": "word", + "value": 52 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 20, + "AddCost": { + "type": "dword", + "value": 900 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 900 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "+2 Bonus to all attacks, save throws, and skill checks for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Potion of Heroism" + } + }, + "ModelPart1": { + "type": "byte", + "value": 48 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion033" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion033" + }, + "xModelPart1": { + "type": "word", + "value": 48 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 21, + "AddCost": { + "type": "dword", + "value": 750 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Acid" + } + }, + "ModelPart1": { + "type": "byte", + "value": 75 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion029" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion029" + }, + "xModelPart1": { + "type": "word", + "value": 75 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 22, + "AddCost": { + "type": "dword", + "value": 750 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Cold" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion026" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion026" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 42 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 23, + "AddCost": { + "type": "dword", + "value": 750 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Electricity" + } + }, + "ModelPart1": { + "type": "byte", + "value": 74 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion027" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion027" + }, + "xModelPart1": { + "type": "word", + "value": 74 + }, + "xModelPart2": { + "type": "word", + "value": 42 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 24, + "AddCost": { + "type": "dword", + "value": 750 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Fire" + } + }, + "ModelPart1": { + "type": "byte", + "value": 18 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion028" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion028" + }, + "xModelPart1": { + "type": "word", + "value": 18 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 25, + "AddCost": { + "type": "dword", + "value": 750 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Sonic" + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion030" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion030" + }, + "xModelPart1": { + "type": "word", + "value": 43 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 26, + "AddCost": { + "type": "dword", + "value": 450 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Remove Blindness/Deafness" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "ModelPart2": { + "type": "byte", + "value": 43 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 229 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion022" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion022" + }, + "xModelPart1": { + "type": "word", + "value": 23 + }, + "xModelPart2": { + "type": "word", + "value": 43 + }, + "xModelPart3": { + "type": "word", + "value": 32 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 27, + "AddCost": { + "type": "dword", + "value": 550 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Remove Disease" + } + }, + "ModelPart1": { + "type": "byte", + "value": 52 + }, + "ModelPart2": { + "type": "byte", + "value": 43 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 231 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion023" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion023" + }, + "xModelPart1": { + "type": "word", + "value": 52 + }, + "xModelPart2": { + "type": "word", + "value": 43 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 28, + "AddCost": { + "type": "dword", + "value": 630 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Remove Paralysis" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 233 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion021" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion021" + }, + "xModelPart1": { + "type": "word", + "value": 42 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 29, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "+10 Move Silently Skill for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sneaking" + } + }, + "ModelPart1": { + "type": "byte", + "value": 46 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion006" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion006" + }, + "xModelPart1": { + "type": "word", + "value": 46 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 30, + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ultravision" + } + }, + "ModelPart1": { + "type": "byte", + "value": 36 + }, + "ModelPart2": { + "type": "byte", + "value": 72 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 305 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion012" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion012" + }, + "xModelPart1": { + "type": "word", + "value": 36 + }, + "xModelPart2": { + "type": "word", + "value": 72 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 31, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "+10 Search Checks for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Vision" + } + }, + "ModelPart1": { + "type": "byte", + "value": 78 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion003" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion003" + }, + "xModelPart1": { + "type": "word", + "value": 78 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32, + "AddCost": { + "type": "dword", + "value": 750 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This potion gives the imbiber the ability to breath water for 1 hour or until they rest.\n\nThis makes the drinker immune to drown attacks." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Water Breathing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 77 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion035" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion035" + }, + "xModelPart1": { + "type": "word", + "value": 77 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + }, + { + "__struct_id": 3 + }, + { + "__struct_id": 1 + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "Potions" + }, + "WillNotBuy": { + "type": "list", + "value": [] + }, + "WillOnlyBuy": { + "type": "list", + "value": [] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 37.8409 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 44.3962 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 11, + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 25 + }, + "IdentifyPrice": { + "type": "int", + "value": -1 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Wands and Staves" + } + }, + "MarkDown": { + "type": "int", + "value": 50 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "MaxBuyPrice": { + "type": "int", + "value": -1 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "OnStoreClosed": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "merchant4_store" + }, + "StoreGold": { + "type": "int", + "value": -1 + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 5780 + }, + "BaseItem": { + "type": "int", + "value": 50 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 13000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of the Bear" + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 62 + }, + "Subtype": { + "type": "word", + "value": 4 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod103" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod103" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 23 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 3872 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 19000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of the Viper", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 207 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 62 + }, + "Subtype": { + "type": "word", + "value": 5 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod106" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod106" + }, + "xModelPart1": { + "type": "word", + "value": 41 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 37 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 24770 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Thunder and Lightning", + "id": 1531 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 164 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 254 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod107" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod107" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + }, + { + "__struct_id": 2 + }, + { + "__struct_id": 3, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Bull Strength" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand009" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand009" + }, + "xModelPart1": { + "type": "word", + "value": 42 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 3751 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Burning Hands" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand010" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand010" + }, + "xModelPart1": { + "type": "word", + "value": 23 + }, + "xModelPart2": { + "type": "word", + "value": 13 + }, + "xModelPart3": { + "type": "word", + "value": 23 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 9749 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 21000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Charm Monster" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 51 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 31 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand015" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand015" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 51 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 249 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Charm Person" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand016" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand016" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 10249 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 11250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Charm Person" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 34 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand2016" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand2016" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 1501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Color Spray" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 49 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand024" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand024" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 11251 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Contagion" + } + }, + "ModelPart1": { + "type": "byte", + "value": 51 + }, + "ModelPart2": { + "type": "byte", + "value": 61 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 54 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand027" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand027" + }, + "xModelPart1": { + "type": "word", + "value": 51 + }, + "xModelPart2": { + "type": "word", + "value": 61 + }, + "xModelPart3": { + "type": "word", + "value": 61 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 2999 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 21000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Cure Critical Wounds" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 64 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand031" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand031" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 1801 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Cure Light Wounds" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 63 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 67 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand032" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand032" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 63 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 3249 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 4500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Cure Moderate Wounds" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 69 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand034" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand034" + }, + "xModelPart1": { + "type": "word", + "value": 42 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 10, + "AddCost": { + "type": "dword", + "value": 8749 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 11250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Cure Serious Wounds" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 72 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand035" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand035" + }, + "xModelPart1": { + "type": "word", + "value": 42 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 11, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Darkness" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 75 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand036" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand036" + }, + "xModelPart1": { + "type": "word", + "value": 62 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 12, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 11251 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Dispel Magic" + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 53 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 84 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand041" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand041" + }, + "xModelPart1": { + "type": "word", + "value": 43 + }, + "xModelPart2": { + "type": "word", + "value": 13 + }, + "xModelPart3": { + "type": "word", + "value": 53 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 13, + "AddCost": { + "type": "dword", + "value": 19499 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 21000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Enfeeblement" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 61 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 227 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand143" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand143" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "xModelPart2": { + "type": "word", + "value": 61 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 14, + "AddCost": { + "type": "dword", + "value": 9749 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 21000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Fear" + } + }, + "ModelPart1": { + "type": "byte", + "value": 51 + }, + "ModelPart2": { + "type": "byte", + "value": 61 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand054" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand054" + }, + "xModelPart1": { + "type": "word", + "value": 51 + }, + "xModelPart2": { + "type": "word", + "value": 61 + }, + "xModelPart3": { + "type": "word", + "value": 51 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 15, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 27001 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Fire" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 52 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 280 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand191" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand191" + }, + "xModelPart1": { + "type": "word", + "value": 42 + }, + "xModelPart2": { + "type": "word", + "value": 52 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 25 + }, + "Cost": { + "type": "dword", + "value": 11251 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Fireball" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand058" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand058" + }, + "xModelPart1": { + "type": "word", + "value": 62 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 17, + "AddCost": { + "type": "dword", + "value": 2249 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 13500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Fireball" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand2058" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand2058" + }, + "xModelPart1": { + "type": "word", + "value": 62 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 18, + "AddCost": { + "type": "dword", + "value": 1124 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 18000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Fireball" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 109 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand3058" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand3058" + }, + "xModelPart1": { + "type": "word", + "value": 62 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 19, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 22501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Fireball" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 109 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand4058" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand4058" + }, + "xModelPart1": { + "type": "word", + "value": 62 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 20, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Ghoul Touch" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 120 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand012" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand012" + }, + "xModelPart1": { + "type": "word", + "value": 42 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 21 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 21, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 33751 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Ice Storm" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 53 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 310 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand368" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand368" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 53 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 22, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 21001 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Improved Invisibility" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 63 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 149 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand088" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand088" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 63 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 23, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 21001 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Inflict Critical Wounds" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 62 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 366 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand435" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand435" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 62 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 24, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Invisibility" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 63 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 151 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand090" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand090" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 63 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 25, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Knock" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 154 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand093" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand093" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 26, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 1876 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Light" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 163 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand100" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand100" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 27, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 25 + }, + "Cost": { + "type": "dword", + "value": 11251 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Lightning Bolt" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 164 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand101" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand101" + }, + "xModelPart1": { + "type": "word", + "value": 62 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 28, + "AddCost": { + "type": "dword", + "value": 2249 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 13500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Lightning Bolt" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 164 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand2101" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand2101" + }, + "xModelPart1": { + "type": "word", + "value": 62 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 29, + "AddCost": { + "type": "dword", + "value": 1124 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 18000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Lightning Bolt" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 165 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand3101" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand3101" + }, + "xModelPart1": { + "type": "word", + "value": 62 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 30, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 22501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Lightning Bolt" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 165 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand4101" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand4101" + }, + "xModelPart1": { + "type": "word", + "value": 62 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 31, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 25 + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Magic Missile" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 172 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand107" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand107" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 42 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32, + "AddCost": { + "type": "dword", + "value": 1250 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 2250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Magic Missile" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 172 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand2107" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand2107" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 42 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 33, + "AddCost": { + "type": "dword", + "value": 1999 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 3750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Magic Missile" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 173 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand3107" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand3107" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 42 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 34, + "AddCost": { + "type": "dword", + "value": 1499 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 25 + }, + "Cost": { + "type": "dword", + "value": 5250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Magic Missile" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 174 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand4107" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand4107" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 42 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 35, + "AddCost": { + "type": "dword", + "value": 2999 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 6750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Magic Missile" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 174 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand5107" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand5107" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 42 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 36, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Melf's Acid Arrows" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 184 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand115" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand115" + }, + "xModelPart1": { + "type": "word", + "value": 42 + }, + "xModelPart2": { + "type": "word", + "value": 13 + }, + "xModelPart3": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 37, + "AddCost": { + "type": "dword", + "value": 9749 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 21000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Neutralize Poison" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 62 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 204 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand126" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand126" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 62 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 38, + "AddCost": { + "type": "dword", + "value": 9749 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 21000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Poison" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 207 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand129" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand129" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 39, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 21001 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Polymorph Self" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 208 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand130" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand130" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 40, + "AddCost": { + "type": "dword", + "value": 99 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 21100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Restoration" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 52 + }, + "ModelPart3": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 238 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand152" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand152" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 52 + }, + "xModelPart3": { + "type": "word", + "value": 52 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 41, + "AddCost": { + "type": "dword", + "value": 2249 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 13500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Searing Light" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 242 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand156" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand156" + }, + "xModelPart1": { + "type": "word", + "value": 62 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 42, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Silence" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 249 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand163" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand163" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 43, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 11251 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Slow" + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 63 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 253 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand166" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand166" + }, + "xModelPart1": { + "type": "word", + "value": 43 + }, + "xModelPart2": { + "type": "word", + "value": 13 + }, + "xModelPart3": { + "type": "word", + "value": 63 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 44, + "AddCost": { + "type": "dword", + "value": 16699 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 37700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Stone Skin" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 260 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand172" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand172" + }, + "xModelPart1": { + "type": "word", + "value": 62 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 45, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 1501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Summon Monster I" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 262 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand174" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand174" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 46, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Summon Monster II" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 264 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand175" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand175" + }, + "xModelPart1": { + "type": "word", + "value": 22 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 47, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 11251 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Summon Monster III" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 265 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand176" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand176" + }, + "xModelPart1": { + "type": "word", + "value": 62 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 43 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 48, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 21001 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Summon Monster IV" + } + }, + "ModelPart1": { + "type": "byte", + "value": 63 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 266 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand177" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand177" + }, + "xModelPart1": { + "type": "word", + "value": 63 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 61 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 49, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Web" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 281 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand192" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand192" + }, + "xModelPart1": { + "type": "word", + "value": 42 + }, + "xModelPart2": { + "type": "word", + "value": 13 + }, + "xModelPart3": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 50, + "AddCost": { + "type": "dword", + "value": 7999 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 11000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This rod when used against an opponent will attempt to destroy a magic item they are using. \n\nIf successful both that item and this rod are destroyed." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Cancelation" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 359 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod101" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 51, + "AddCost": { + "type": "dword", + "value": 24998 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This rod allows the party to rest in the dungeon without worries of being caught unaware.\n\nReplentishes the parties rest pool.\n\nBasically this rod allows the party to rest in the dungeon when they feel like it, where they feel like it." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Enemy Detection" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod109" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod109" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 52, + "AddCost": { + "type": "dword", + "value": 32072 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 35000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The special power of this weapon is to summon a +3 Dire Flail. Which you will automatically equip.\n\nWhy not just own a +3 Dire flail you ask.. This is lighter.\n\nAttempting to trade this item while the flail exists will result in the loss of both items." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Flailing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 167 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 237 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod111" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod111" + }, + "xModelPart1": { + "type": "word", + "value": 13 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 33 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 53, + "AddCost": { + "type": "dword", + "value": 14399 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 15000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This rod protects the user against all types of fire attacks for 24 hours." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Flame Extinguishing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 359 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod104" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod104" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 54, + "AddCost": { + "type": "dword", + "value": 12622 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 70000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The special power of this weapon is to summon a +2 Mace, +1 Flaming Long Sword, +4 Battle Axe, or a +3 Rapier.\n\nAttempting to trade any of the weapons, or the Rod while a weapon exists will result in the loss of both items." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Lordly Might" + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 144 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 277 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod114" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod114" + }, + "xModelPart1": { + "type": "word", + "value": 43 + }, + "xModelPart2": { + "type": "word", + "value": 42 + }, + "xModelPart3": { + "type": "word", + "value": 13 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 55, + "AddCost": { + "type": "dword", + "value": 10849 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 35000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Replentishes the parties rest pool.\n\nBasically this rod allows the party to rest in the dungeon when they feel like it." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Negation" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 160 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod110" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod110" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "xModelPart2": { + "type": "word", + "value": 23 + }, + "xModelPart3": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 56, + "AddCost": { + "type": "dword", + "value": 5999 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 60000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Rulership" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 33 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 180 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod112" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod112" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 33 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 57, + "AddCost": { + "type": "dword", + "value": 3974 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 60000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Spell Aborption" + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 33 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 121 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 256 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod113" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod113" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 33 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 58, + "AddCost": { + "type": "dword", + "value": 18324 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 23500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Trap Detection" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 327 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod108" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod108" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 22 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 59, + "AddCost": { + "type": "dword", + "value": 13996 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 14000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Deals d4 strength and constitution damage.\n\nThe victim gets a Fortitude save vs. DC 14 to avoid this effect." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Withering" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod105" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod105" + }, + "xModelPart1": { + "type": "word", + "value": 33 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 60, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 13501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The rod of wonder is a strange and unpredictable device whose effects are an odd mixture of beneficial, harmful, and useless. They are often the product of magical experiments in crafting gone awry. ", + "id": 66624 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This rod has an aura of magic that produces a slight sensation of dizziness. It appears to be constructed somewhat haphazardly, of mismatched parts. ", + "id": 66623 + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Wonder", + "id": 9237 + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 414 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod102" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod102" + }, + "xModelPart1": { + "type": "word", + "value": 23 + }, + "xModelPart2": { + "type": "word", + "value": 31 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 61, + "AddCost": { + "type": "dword", + "value": 2943 + }, + "BaseItem": { + "type": "int", + "value": 45 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 12000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Staff of Charming" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 31 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 11 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 76 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstaff101" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstaff101" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 23 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 62, + "AddCost": { + "type": "dword", + "value": 9124 + }, + "BaseItem": { + "type": "int", + "value": 45 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 80000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Staff of Defense" + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 51 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 374 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 167 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 348 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 381 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstaff105" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstaff105" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "xModelPart2": { + "type": "word", + "value": 51 + }, + "xModelPart3": { + "type": "word", + "value": 12 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 63, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 45 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 30564 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Staff of Fire" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 62 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 280 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstaff103" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstaff103" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 62 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 64, + "AddCost": { + "type": "dword", + "value": 17349 + }, + "BaseItem": { + "type": "int", + "value": 45 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 70000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Staff of Frost" + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 50 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 310 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 228 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstaff104" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstaff104" + }, + "xModelPart1": { + "type": "word", + "value": 43 + }, + "xModelPart2": { + "type": "word", + "value": 21 + }, + "xModelPart3": { + "type": "word", + "value": 61 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65, + "AddCost": { + "type": "dword", + "value": 10124 + }, + "BaseItem": { + "type": "int", + "value": 45 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 33000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Staff of Healing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 74 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 159 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 229 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 231 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstaff102" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstaff102" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 12 + }, + "xModelPart3": { + "type": "word", + "value": 61 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 66, + "AddCost": { + "type": "dword", + "value": 12374 + }, + "BaseItem": { + "type": "int", + "value": 45 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 130000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Staff of Life" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "ModelPart2": { + "type": "byte", + "value": 63 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 139 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 239 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 9 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstaff107" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstaff107" + }, + "xModelPart1": { + "type": "word", + "value": 23 + }, + "xModelPart2": { + "type": "word", + "value": 63 + }, + "xModelPart3": { + "type": "word", + "value": 61 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 67, + "AddCost": { + "type": "dword", + "value": 32767 + }, + "BaseItem": { + "type": "int", + "value": 45 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 140488 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Staff of Power" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 51 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 109 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 121 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 143 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 165 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 174 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstaff108" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstaff108" + }, + "xModelPart1": { + "type": "word", + "value": 12 + }, + "xModelPart2": { + "type": "word", + "value": 32 + }, + "xModelPart3": { + "type": "word", + "value": 22 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 68, + "AddCost": { + "type": "dword", + "value": 27561 + }, + "BaseItem": { + "type": "int", + "value": 45 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cost": { + "type": "dword", + "value": 90000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Staff of Woodlands" + } + }, + "ModelPart1": { + "type": "byte", + "value": 53 + }, + "ModelPart2": { + "type": "byte", + "value": 53 + }, + "ModelPart3": { + "type": "byte", + "value": 63 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 87 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 269 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstaff106" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstaff106" + }, + "xModelPart1": { + "type": "word", + "value": 53 + }, + "xModelPart2": { + "type": "word", + "value": 53 + }, + "xModelPart3": { + "type": "word", + "value": 63 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + }, + { + "__struct_id": 1 + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "WandsNStaves" + }, + "WillNotBuy": { + "type": "list", + "value": [] + }, + "WillOnlyBuy": { + "type": "list", + "value": [ + { + "__struct_id": 97869, + "BaseItem": { + "type": "int", + "value": 44 + } + }, + { + "__struct_id": 97869, + "BaseItem": { + "type": "int", + "value": 45 + } + }, + { + "__struct_id": 97869, + "BaseItem": { + "type": "int", + "value": 46 + } + } + ] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 33.7258 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 46.5144 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 11, + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 25 + }, + "IdentifyPrice": { + "type": "int", + "value": -1 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Crafting" + } + }, + "MarkDown": { + "type": "int", + "value": 50 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "MaxBuyPrice": { + "type": "int", + "value": -1 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "OnStoreClosed": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "crafting" + }, + "StoreGold": { + "type": "int", + "value": -1 + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 5 + }, + "BaseItem": { + "type": "int", + "value": 102 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90534 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 76390 + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_cfm_bscrl" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_cfm_bscrl" + }, + "xModelPart1": { + "type": "word", + "value": 2 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 5 + }, + "BaseItem": { + "type": "int", + "value": 101 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90535 + } + }, + "ModelPart1": { + "type": "byte", + "value": 28 + }, + "ModelPart2": { + "type": "byte", + "value": 73 + }, + "ModelPart3": { + "type": "byte", + "value": 71 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_cfm_pbottl" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_cfm_pbottl" + }, + "xModelPart1": { + "type": "word", + "value": 28 + }, + "xModelPart2": { + "type": "word", + "value": 73 + }, + "xModelPart3": { + "type": "word", + "value": 71 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + }, + { + "__struct_id": 3, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 103 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 83774 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 83773 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_cfm_wand" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_cfm_wand" + }, + "xModelPart1": { + "type": "word", + "value": 11 + }, + "xModelPart2": { + "type": "word", + "value": 11 + }, + "xModelPart3": { + "type": "word", + "value": 11 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + }, + { + "__struct_id": 1, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90756 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC23" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec23" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 1, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90752 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC00" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec00" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 2, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90754 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC02" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec02" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 3, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90757 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC25" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec25" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 4, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90771 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC48" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec48" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 5, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90770 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC44" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec44" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 6, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90765 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC35" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec35" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 7, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90767 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC37" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec37" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 8, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90760 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC29" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec29" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 9, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90763 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC33" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec33" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 10, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90758 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC26" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec26" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 11, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90761 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC31" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec31" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 12, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90755 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC20" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec20" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 13, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90764 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC34" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec34" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 14, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90766 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC36" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec36" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 15, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90759 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC28" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec28" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 16, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90768 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC39" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec39" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 17, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90769 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC41" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec41" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 18, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90753 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90762 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 490 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 491 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeC32" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyec32" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 19, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90776 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL23" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel23" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 20, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90772 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL00" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel00" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 21, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90777 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL25" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel25" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 22, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90774 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL02" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel02" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 23, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90791 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL48" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel48" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 24, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90790 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL44" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel44" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 25, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90785 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL35" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel35" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 26, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90787 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL37" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel37" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 27, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL29" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel29" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 28, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90783 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL33" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel33" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 29, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90778 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL26" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel26" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 30, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90781 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL31" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel31" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 31, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90775 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL20" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel20" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 32, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90784 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL34" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel34" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 33, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90786 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL36" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel36" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 34, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90779 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL28" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel28" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 35, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90788 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL39" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel39" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 36, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90789 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL41" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel41" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 37, + "AddCost": { + "type": "dword", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90773 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90782 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 492 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 493 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeL32" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyel32" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 38, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90795 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM03" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem03" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 39, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90792 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM00" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem00" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 40, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90803 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM31" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem31" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 41, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90798 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM16" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem16" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 42, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90807 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM40" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem40" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 43, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90802 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM28" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem28" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 44, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90800 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM24" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem24" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 45, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90804 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM32" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem32" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 46, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90799 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM18" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem18" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 47, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90797 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM10" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem10" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 48, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90808 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM42" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem42" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 49, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90794 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM02" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem02" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 50, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90801 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM25" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem25" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 51, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90806 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM37" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem37" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 52, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90796 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM08" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem08" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 53, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90805 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM36" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem36" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 54, + "AddCost": { + "type": "dword", + "value": 82 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "id": 90793 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 90809 + } + }, + "ModelPart1": { + "type": "byte", + "value": 88 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 494 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 495 + } + } + ] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "x2_it_dyeM48" + }, + "TemplateResRef": { + "type": "resref", + "value": "x2_it_dyem48" + }, + "xModelPart1": { + "type": "word", + "value": 88 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 55, + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add -/10 acid resistance to a suit of armor or shield\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the Resist Elements spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Acid Resistant Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 81 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "acidmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "acidmat" + }, + "xModelPart1": { + "type": "word", + "value": 81 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 56, + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add -/10 cold resistance to a suit of armor or shield\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the Resist Elements spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cold Resistant Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "coldmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "coldmat" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 57, + "AddCost": { + "type": "dword", + "value": 5 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add the ability to become etherial to armor.\n\nAdding this ability costs as much as adding +5 enchantment to the item.\n\nThis material requires the craftsman to be a level 15 spell caster with the Greater Sanctuary spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Etherial Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 94 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ethmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "ethmat" + }, + "xModelPart1": { + "type": "word", + "value": 94 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 58, + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add -/10 fire resistance to a suit of armor or shield\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the Resist Elements spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fire Resistant Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 73 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "firemat" + }, + "TemplateResRef": { + "type": "resref", + "value": "firemat" + }, + "xModelPart1": { + "type": "word", + "value": 73 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 59, + "AddCost": { + "type": "dword", + "value": 5 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add immunity to Sneak Attacks, Critical Hits and Knock Down to armor or shields.\n\nAdding this ability costs as much as adding +5 enchantment to the item.\n\nUnlike most materials this one requires no spells to activate." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Fortification Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 89 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hfortmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "hfortmat" + }, + "xModelPart1": { + "type": "word", + "value": 89 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 60, + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add +1/5 Damage Reduction to a suit of armor.\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nThis material requires the craftsman to be a level 18 spell caster with the Stone Skin spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Invulerability Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 82 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "invulmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "invulmat" + }, + "xModelPart1": { + "type": "word", + "value": 82 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 61, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add light to a suit of armor or shield.\n\nAdding this ability costs as much as adding +1 enchantment to the item.\n\nUnlike most materials this one requires no spells to activate." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Casting Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 73 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lglammat" + }, + "TemplateResRef": { + "type": "resref", + "value": "lglammat" + }, + "xModelPart1": { + "type": "word", + "value": 73 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 62, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add immunity to Sneak Attacks to armor or shields.\n\nAdding this ability costs as much as adding +1 enchantment to the item.\n\nUnlike most materials this one requires no spells to activate." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Fortification Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 89 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lfortmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "lfortmat" + }, + "xModelPart1": { + "type": "word", + "value": 89 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 63, + "AddCost": { + "type": "dword", + "value": 50 + }, + "BaseItem": { + "type": "int", + "value": 109 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material can be combined with a suit of armor / shield in a forge to add a +1 skill bonus to all skills lowered by Armor Check Penalties, effectively lowering the armor check penalty by 1.\n\nA suit of armor / shield must be master worked before it can be enchanted.\n\nMasterworking is a Craft Armor DC 20 check, failure results in the loss of the material." + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Master Work Armor Materials" + } + }, + "ModelPart1": { + "type": "byte", + "value": 105 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wmarmormat" + }, + "TemplateResRef": { + "type": "resref", + "value": "wmarmormat" + }, + "xModelPart1": { + "type": "word", + "value": 105 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 64, + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 109 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material can be combined with a weapon in a forge to add a +1 attack bonus to a weapon. \n\nThis is NOT a magic bonus and will not allow a character to hit a creature with damage reduction.\n\nA weapon must be master worked before it can be enchanted.\n\nMasterworking is a Craft Weapon DC 20 check, failure results in the loss of the material." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Master Work Weapon Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 105 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mwweaponmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "mwweaponmat" + }, + "xModelPart1": { + "type": "word", + "value": 105 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 65, + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add immunity to Critical Hits to armor or shields.\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nUnlike most materials this one requires no spells to activate." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Medium Fortification Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 93 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mfortmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "mfortmat" + }, + "xModelPart1": { + "type": "word", + "value": 93 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 66, + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add True Seeing to armor or shields.\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the True Seeing spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Seeing Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 65 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ghostmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "ghostmat" + }, + "xModelPart1": { + "type": "word", + "value": 65 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 67, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add +10 Hide skill modifier to the armor.\n\nAdding this ability costs as much as adding +1 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the Invisibility spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shadow Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 77 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "shadowmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "shadowmat" + }, + "xModelPart1": { + "type": "word", + "value": 77 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 68, + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add -/10 electrical resistance to a suit of armor or shield\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the Resist Elements spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Electrical Resistant Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 90 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "elecmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "elecmat" + }, + "xModelPart1": { + "type": "word", + "value": 90 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 69, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add +10 Move Silently skill modifier to the armor.\n\nAdding this ability costs as much as adding +1 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the Silent spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Silent Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 89 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "silentmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "silentmat" + }, + "xModelPart1": { + "type": "word", + "value": 89 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 70, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add +10 Tumble skill modifier to the armor.\n\nAdding this ability costs as much as adding +1 enchantment to the item.\n\nThis material requires the craftsman to be a level 4 spell caster with the Grease spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Slick Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 77 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "slickmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "slickmat" + }, + "xModelPart1": { + "type": "word", + "value": 77 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 71, + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add -/10 sonic resistance to a suit of armor or shield\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the Resist Elements spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sonic Resistant Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sonicmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "sonicmat" + }, + "xModelPart1": { + "type": "word", + "value": 19 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 72, + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add 14 Spell Resistance to a armor/shield.\n\nAdding this ability costs as much as adding +2 enchantment to the item.\n\nThis material requires the craftsman to be a level 15 spell caster with the Spell Resistance spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance 14 Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spell14mat" + }, + "TemplateResRef": { + "type": "resref", + "value": "spell14mat" + }, + "xModelPart1": { + "type": "word", + "value": 4 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 73, + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add 16 Spell Resistance to a armor/shield.\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nThis material requires the craftsman to be a level 15 spell caster with the Spell Resistance spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance 16 Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 35 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spell16mat" + }, + "TemplateResRef": { + "type": "resref", + "value": "spell16mat" + }, + "xModelPart1": { + "type": "word", + "value": 35 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 74, + "AddCost": { + "type": "dword", + "value": 4 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add 18 Spell Resistance to a armor/shield.\n\nAdding this ability costs as much as adding +4 enchantment to the item.\n\nThis material requires the craftsman to be a level 15 spell caster with the Spell Resistance spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance 18 Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 70 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spell18mat" + }, + "TemplateResRef": { + "type": "resref", + "value": "spell18mat" + }, + "xModelPart1": { + "type": "word", + "value": 70 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 75, + "AddCost": { + "type": "dword", + "value": 5 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add 20 Spell Resistance to a armor/shield.\n\nAdding this ability costs as much as adding +5 enchantment to the item.\n\nThis material requires the craftsman to be a level 15 spell caster with the Spell Resistance spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance 20 Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 72 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spell20mat" + }, + "TemplateResRef": { + "type": "resref", + "value": "spell20mat" + }, + "xModelPart1": { + "type": "word", + "value": 72 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 76, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used on a shield to give it's user the knock down feat.\n\nAdding this ability costs as much as adding +1 enchantment to the item.\n\nThis material requires the craftsman to be a level 8 spell caster with the Bull Strength spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bashing Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 87 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bashmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "bashmat" + }, + "xModelPart1": { + "type": "word", + "value": 87 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 77, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this material is used on a shield. If the shield is hit in combat it will cast blindness/deafness DC14 on the attacker.\n\nAdding this ability costs as much as adding +1 enchantment to the item.\n\nThis material requires the craftsman to be a level 7 spell caster with either the Blindness/Deafness or Searing Light spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Blinding Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "blindmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "blindmat" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 78, + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used on a shield. When equiped the shield will give it's user -/5 piercing damage resistance.\n\nAdding this ability costs as much as adding +2 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the Shield spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow Defense Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 57 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrdefmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrdefmat" + }, + "xModelPart1": { + "type": "word", + "value": 57 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 79, + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used on a shield. When equiped the shield will give it's user -/10 piercing damage resistance.\n\nAdding this ability costs as much as adding +2 enchantment to the item.\n\nThis material requires the craftsman to be a level 12 spell caster with the Shield spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow Defense 2 Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 58 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrdefmat2" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrdefmat2" + }, + "xModelPart1": { + "type": "word", + "value": 58 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 80, + "AddCost": { + "type": "dword", + "value": 5 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used on a shield. This shield will gain the ability to cast a level 13 version of Spell Mantle on it's user once per day.\n\nAdding this ability costs as much as adding +5 enchantment to the item.\n\nThis material requires the craftsman to be a level 14 spell caster with the Spell Mantle spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spell Mantle Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "reflecmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "reflecmat" + }, + "xModelPart1": { + "type": "word", + "value": 31 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 81, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will add 1d6 acid damage to the weapon.\n\nIf used on a ranged weapon it will allows the weapon to add 1d6 acid damage to it's ammunition. NOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +1 bonus on the item.\n\nThis material requires a 8th level spell caster, with either Melf's Acid Arrow or Mestil's Acid Sheath memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Acidic Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 81 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "acidmat2" + }, + "TemplateResRef": { + "type": "resref", + "value": "acidmat2" + }, + "xModelPart1": { + "type": "word", + "value": 81 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 82, + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will give +2 to hit and +2d6 magical damage to a random type of creature.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 8th level spell caster, with Summon Creature I memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bane Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "banemat" + }, + "TemplateResRef": { + "type": "resref", + "value": "banemat" + }, + "xModelPart1": { + "type": "word", + "value": 25 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 83, + "AddCost": { + "type": "dword", + "value": 4 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material adds 1d6 magical damage to any weapon. This type of damage is unresistable.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +4 bonus on the item.\n\nThis material requires a 16th level spell caster with the Continual Flame spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Brillant Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "brillmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "brillmat" + }, + "xModelPart1": { + "type": "word", + "value": 44 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 84, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will add 1d6 fire damage to the weapon.\n\nIf used on a ranged weapon it will allows the weapon to add 1d6 acid damage to it's ammunition. NOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +1 bonus on the item.\n\nThis material requires a 10th level spell caster, with either Fireball, Flame Weapon, or Flame Strike memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Burning Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "firemat2" + }, + "TemplateResRef": { + "type": "resref", + "value": "firemat2" + }, + "xModelPart1": { + "type": "word", + "value": 51 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 85, + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material can only be added to a weapon by a chaotic aligned character.\n\nIt provides +2d6 divine damage to any lawful creature.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 7th level spell caster with the Cloak of Chaos spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chaotic Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chaoticmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "chaoticmat" + }, + "xModelPart1": { + "type": "word", + "value": 37 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 86, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will grant the user of the weapon the cleave feat.\n\nThis material requires a 8th level spell caster, with Divine Power memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cleaving Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 91 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "cleavemat" + }, + "TemplateResRef": { + "type": "resref", + "value": "cleavemat" + }, + "xModelPart1": { + "type": "word", + "value": 91 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 87, + "AddCost": { + "type": "dword", + "value": 4 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a melee weapon. When this weapon strike an opponent they will be struck by a DC 14 slow spell.\n\nThis is considered a +4 bonus on the item.\n\nThis material requires a 15th bard to apply it." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dancing Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dancemat" + }, + "TemplateResRef": { + "type": "resref", + "value": "dancemat" + }, + "xModelPart1": { + "type": "word", + "value": 42 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 88, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a melee weapon. The weapon will then add it's enchantment bonus (as of time of this materials addition) to the characters Armor Class.\n\nThis material requires a 8th level spell caster, with either Shield or Shield of Faith memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Defensive Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 85 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "defmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "defmat" + }, + "xModelPart1": { + "type": "word", + "value": 85 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 89, + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material can only be added to a bludgeoning melee weapon. When an undead is struck it must make a Fortitude save vs DC 14 or be instantly destroyed. \n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 14th level spell caster, with Heal memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Disruption Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "disrmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "disrmat" + }, + "xModelPart1": { + "type": "word", + "value": 17 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 90, + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a melee weapon. This material will add 1d6 fire damage to a melee weapon. If the weapon scores a critical hit it will do an additional d10 damage.\n\nWhen applied to a ranged weapon the weapon gains unlimited +1d6 fire ammunition. This power is an exception to the ranged weapon special rules in your journal.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 12th level spell caster, with either Fireball, Flame Weapon, or Flame Strike memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Flaming Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "firemat3" + }, + "TemplateResRef": { + "type": "resref", + "value": "firemat3" + }, + "xModelPart1": { + "type": "word", + "value": 51 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 91, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will add 1d6 cold damage to the weapon.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +1 bonus on the item.\n\nThis material requires a 8th level spell caster, with Ice Storm memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Freezing Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "coldmat2" + }, + "TemplateResRef": { + "type": "resref", + "value": "coldmat2" + }, + "xModelPart1": { + "type": "word", + "value": 9 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 92, + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will add 1d6 cold damage to the weapon. If the weapon scores a critical hit it will do an additional d10 damage.\n\nWhen applied to a ranged weapon the weapon gains unlimited +1d6 cold ammunition. This power is an exception to the ranged weapon special rules in your journal.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 10th level spell caster, with Ice Storm memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Frozen Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "coldmat3" + }, + "TemplateResRef": { + "type": "resref", + "value": "coldmat3" + }, + "xModelPart1": { + "type": "word", + "value": 10 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 93, + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material can only be added to a weapon by a good aligned character.\n\nIt provides +2d6 divine damage to any evil creature hit by weapon.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 7th level spell caster, Smite Evil feat." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Holy Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "holymat" + }, + "TemplateResRef": { + "type": "resref", + "value": "holymat" + }, + "xModelPart1": { + "type": "word", + "value": 3 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 94, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material will doube the critical threat range of a slashing melee weapon.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 10th level spell caster, with Keen Edge memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Keen Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "keenmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "keenmat" + }, + "xModelPart1": { + "type": "word", + "value": 2 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 95, + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material can only be added to a weapon by a lawful aligned character.\n\nIt provides +2d6 divine damage to any chaotic creature.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 7th level spell caster with the Shield of Law spell." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lawful Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 38 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lawfulmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "lawfulmat" + }, + "xModelPart1": { + "type": "word", + "value": 38 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 96, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will add 1d6 electrical damage to the weapon.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +1 bonus on the item.\n\nThis material requires a 8th level spell caster, with either Lightning Bolt or Call Lightning memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lightning Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "elecmat2" + }, + "TemplateResRef": { + "type": "resref", + "value": "elecmat2" + }, + "xModelPart1": { + "type": "word", + "value": 29 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 97, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will allow teh weapon to throw bull strength once per day.\n\nThis material requires a 5th level spell caster, with Bull Strength memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Magical Strength Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "throwmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "throwmat" + }, + "xModelPart1": { + "type": "word", + "value": 45 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 98, + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will add 1d6 electrical damage to the weapon. If the weapon scores a critical hit it will do an additional d10 damage.\n\nWhen applied to a ranged weapon the weapon gains unlimited +1d6 electrical ammunition. This power is an exception to the ranged weapon special rules in your journal.\n\nThis material requires a 10th level spell caster, with either Lightning Bolt or Call Lightning memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shocking Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "elecmat3" + }, + "TemplateResRef": { + "type": "resref", + "value": "elecmat3" + }, + "xModelPart1": { + "type": "word", + "value": 29 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 99, + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will add 1d6 sonic damage to the weapon.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +1 bonus on the item.\n\nThis material requires a 8th level spell caster, with Sound Burst memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sonic Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 63 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sonicmat2" + }, + "TemplateResRef": { + "type": "resref", + "value": "sonicmat2" + }, + "xModelPart1": { + "type": "word", + "value": 63 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 100, + "AddCost": { + "type": "dword", + "value": 4 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will give the wielder of the weapon haste.\n\nThis material requires a 7th level spell caster, with Haste memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Speeding Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "speedmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "speedmat" + }, + "xModelPart1": { + "type": "word", + "value": 19 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 101, + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a melee weapon. This material will add 1d6 sonic damage to the weapon. If the weapon scores a critical hit it will do an additional d10 damage.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 10th level spell caster, with Sound Burst memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Thundering Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 63 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sonicmat3" + }, + "TemplateResRef": { + "type": "resref", + "value": "sonicmat3" + }, + "xModelPart1": { + "type": "word", + "value": 63 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 102, + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material can only be added to a weapon by a evil aligned character.\n\nIt provides +2d6 divine damage to any good creature.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 7th level spell caster with the Unholy Aura spell." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Unholy Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 34 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "unholymat" + }, + "TemplateResRef": { + "type": "resref", + "value": "unholymat" + }, + "xModelPart1": { + "type": "word", + "value": 34 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 103, + "AddCost": { + "type": "dword", + "value": 5 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 5 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a melee weapon. This material will give the weapon a chance to instantly kill any oppenent hit by it.\n\nThis is considered a +5 bonus on the item.\n\nThis material requires a 18th level spell caster, with either Keen Edge or Finger of Death memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Vorpal Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 81 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "vorpmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "vorpmat" + }, + "xModelPart1": { + "type": "word", + "value": 81 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + }, + { + "__struct_id": 104, + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a melee weapon. This material can cause a victim to bleed to death, 1 hit point per round.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 10th level spell caster, with Mordenkainen's Sword memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Infinite": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wounding Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 87 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "woundmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "woundmat" + }, + "xModelPart1": { + "type": "word", + "value": 87 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": -1.0 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": -1.0 + }, + "ZPosition": { + "type": "float", + "value": -1.0 + } + } + ] + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "Crafting" + }, + "WillNotBuy": { + "type": "list", + "value": [] + }, + "WillOnlyBuy": { + "type": "list", + "value": [] + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 15.1243 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 21.337 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "TriggerList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Geometry": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.0 + }, + "PointY": { + "type": "float", + "value": 0.0 + }, + "PointZ": { + "type": "float", + "value": 0.0279 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.5929 + }, + "PointY": { + "type": "float", + "value": 0.0776 + }, + "PointZ": { + "type": "float", + "value": 0.0279 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 6.2826 + }, + "PointY": { + "type": "float", + "value": 5.2743 + }, + "PointZ": { + "type": "float", + "value": 0.0279 + } + }, + { + "__struct_id": 3, + "PointX": { + "type": "float", + "value": 0.4654 + }, + "PointY": { + "type": "float", + "value": 5.1192 + }, + "PointZ": { + "type": "float", + "value": 0.0279 + } + } + ] + }, + "HighlightHeight": { + "type": "float", + "value": 0.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Skin Checker", + "id": 14759 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "checkskin" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "SkinChecker" + }, + "TemplateResRef": { + "type": "resref", + "value": "newgeneric" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 0 + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 11.5096 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 3.8365 + }, + "ZOrientation": { + "type": "float", + "value": 0.0 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Town" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "WaypointList": { + "type": "list", + "value": [ + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 2 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 1 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Common Room" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": { + "0": "Common Room" + } + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "None" + }, + "TemplateResRef": { + "type": "resref", + "value": "error" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 18.3648 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 16.3409 + }, + "ZPosition": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 1 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Waypoint", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": { + "0": "Basic Equipment Merchant" + } + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "MN_001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 4.9665 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 44.411 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 1 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Waypoint", + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": { + "0": "Enchanter" + } + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "MN_002" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 35.4015 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 45.096 + }, + "ZPosition": { + "type": "float", + "value": 0.99 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 1 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 14817 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": { + "0": "Party Room" + } + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "MN_003" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_waypoint001" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 19.9357 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 44.6038 + }, + "ZPosition": { + "type": "float", + "value": 1.11 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 3 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 69068 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "NW_TAVERN" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_wp_tavern" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 19.9612 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 23.3714 + }, + "ZPosition": { + "type": "float", + "value": 0.01 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 14.991 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 6.8767 + }, + "ZPosition": { + "type": "float", + "value": 0.0029 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + }, + "XOrientation": { + "type": "float", + "value": -1.0 + }, + "XPosition": { + "type": "float", + "value": 19.5511 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 42.8088 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 1 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 14814 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": { + "0": "New Player Room", + "id": 14815 + } + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "NW_MAPNOTE001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_mapnote001" + }, + "XOrientation": { + "type": "float", + "value": 1.0 + }, + "XPosition": { + "type": "float", + "value": 34.601 + }, + "YOrientation": { + "type": "float", + "value": 0.0 + }, + "YPosition": { + "type": "float", + "value": 5.0048 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + }, + { + "__struct_id": 5, + "Appearance": { + "type": "byte", + "value": 1 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 1 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 14814 + } + }, + "MapNote": { + "type": "cexolocstring", + "value": { + "0": "Crafting Room", + "id": 14815 + } + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "NW_MAPNOTE001" + }, + "TemplateResRef": { + "type": "resref", + "value": "nw_mapnote001" + }, + "XOrientation": { + "type": "float", + "value": 0.0 + }, + "XPosition": { + "type": "float", + "value": 34.4132 + }, + "YOrientation": { + "type": "float", + "value": 1.0 + }, + "YPosition": { + "type": "float", + "value": 14.8735 + }, + "ZPosition": { + "type": "float", + "value": 0.0 + } + } + ] + } +} diff --git a/src/module/ifo/module.ifo.json b/src/module/ifo/module.ifo.json new file mode 100644 index 0000000..3777e09 --- /dev/null +++ b/src/module/ifo/module.ifo.json @@ -0,0 +1,937 @@ +{ + "__data_type": "IFO ", + "Expansion_Pack": { + "type": "word", + "value": 3 + }, + "Mod_Area_list": { + "type": "list", + "value": [ + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "prc_epiclab" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "mordmagman06" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "mordmagman05" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "mordmagman04" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "mordmagman03" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "mordmagman02" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "mordmagman01" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "limbo001" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "yawningportal" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area001" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area002" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area003" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area004" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area005" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area006" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area007" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area008" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area009" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area010" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area011" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area012" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area013" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area014" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area015" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "area016" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "bdd_basinrim" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "bdd_cave" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "bdd_smelter" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "wol_a_bbb" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "wol_a_dymond" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "desolateanddespa" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "ey_dpcon_erewood" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "frostedpits" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "frozentimes" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "prc_maze_01" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "ruinedminds001" + } + }, + { + "__struct_id": 6, + "Area_Name": { + "type": "resref", + "value": "thequietofthemin" + } + } + ] + }, + "Mod_Creator_ID": { + "type": "int", + "value": 2 + }, + "Mod_CustomTlk": { + "type": "cexostring", + "value": "prc8_consortium" + }, + "Mod_CutSceneList": { + "type": "list", + "value": [] + }, + "Mod_DawnHour": { + "type": "byte", + "value": 6 + }, + "Mod_DefaultBic": { + "type": "resref", + "value": "" + }, + "Mod_Description": { + "type": "cexolocstring", + "value": { + "0": "Random Dungeon Generator [PRC8-PEPS-CEP3]\n\nWelcome to the RDG - Undermountain.\n\nThis module is designed to generate a ever changing dungeon. To make easy global modifications to the RDG simply open the script called \"inc_mod_constants\".\n" + } + }, + "Mod_DuskHour": { + "type": "byte", + "value": 18 + }, + "Mod_Entry_Area": { + "type": "resref", + "value": "yawningportal" + }, + "Mod_Entry_Dir_X": { + "type": "float", + "value": 0.0 + }, + "Mod_Entry_Dir_Y": { + "type": "float", + "value": 1.0 + }, + "Mod_Entry_X": { + "type": "float", + "value": 15.0 + }, + "Mod_Entry_Y": { + "type": "float", + "value": 5.0 + }, + "Mod_Entry_Z": { + "type": "float", + "value": 0.0 + }, + "Mod_Expan_List": { + "type": "list", + "value": [] + }, + "Mod_GVar_List": { + "type": "list", + "value": [] + }, + "Mod_HakList": { + "type": "list", + "value": [ + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "peps_prc8" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "rdg_prc8_top" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "prc8_2das" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "prc8_nsb" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "prc8_scripts" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "prc8_spells" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "prc8_epicspells" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "prc8_psionics" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "prc8_race" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "cep3_vfx" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "prc8_textures" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "prc8_misc" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "prc8_craft2das" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "cep3_armor" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "cep3_facelift" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "cep3_heads" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "cep3_reforge" + } + }, + { + "__struct_id": 8, + "Mod_Hak": { + "type": "cexostring", + "value": "cep3_skies" + } + } + ] + }, + "Mod_IsSaveGame": { + "type": "byte", + "value": 0 + }, + "Mod_MinGameVer": { + "type": "cexostring", + "value": "1.89" + }, + "Mod_MinPerHour": { + "type": "byte", + "value": 6 + }, + "Mod_Name": { + "type": "cexolocstring", + "value": { + "0": "Random Dungeon Generator [PRC8-PEPS-CEP3]" + } + }, + "Mod_OnAcquirItem": { + "type": "resref", + "value": "hif_onacquireite" + }, + "Mod_OnActvtItem": { + "type": "resref", + "value": "hif_onactivateit" + }, + "Mod_OnClientEntr": { + "type": "resref", + "value": "hif_onclientente" + }, + "Mod_OnClientLeav": { + "type": "resref", + "value": "prc_onleave" + }, + "Mod_OnCutsnAbort": { + "type": "resref", + "value": "prc_oncutabort" + }, + "Mod_OnHeartbeat": { + "type": "resref", + "value": "hif_onheartbeat" + }, + "Mod_OnModLoad": { + "type": "resref", + "value": "hif_onmoduleload" + }, + "Mod_OnModStart": { + "type": "resref", + "value": "" + }, + "Mod_OnNuiEvent": { + "type": "resref", + "value": "prc_onplayernui" + }, + "Mod_OnPlrChat": { + "type": "resref", + "value": "prc_onplayerchat" + }, + "Mod_OnPlrDeath": { + "type": "resref", + "value": "hif_onplayerdeat" + }, + "Mod_OnPlrDying": { + "type": "resref", + "value": "prc_ondying" + }, + "Mod_OnPlrEqItm": { + "type": "resref", + "value": "hif_onplayerequi" + }, + "Mod_OnPlrGuiEvt": { + "type": "resref", + "value": "" + }, + "Mod_OnPlrLvlUp": { + "type": "resref", + "value": "mod_levelup" + }, + "Mod_OnPlrRest": { + "type": "resref", + "value": "hif_onplayerrest" + }, + "Mod_OnPlrTarget": { + "type": "resref", + "value": "prc_onplaytarget" + }, + "Mod_OnPlrTileAct": { + "type": "resref", + "value": "" + }, + "Mod_OnPlrUnEqItm": { + "type": "resref", + "value": "hif_onplayeruneq" + }, + "Mod_OnSpawnBtnDn": { + "type": "resref", + "value": "hif_onplayerresp" + }, + "Mod_OnUnAqreItem": { + "type": "resref", + "value": "hif_onunaquireit" + }, + "Mod_OnUsrDefined": { + "type": "resref", + "value": "prc_onuserdef" + }, + "Mod_PartyControl": { + "type": "int", + "value": 0 + }, + "Mod_StartDay": { + "type": "byte", + "value": 1 + }, + "Mod_StartHour": { + "type": "byte", + "value": 13 + }, + "Mod_StartMonth": { + "type": "byte", + "value": 6 + }, + "Mod_StartMovie": { + "type": "resref", + "value": "" + }, + "Mod_StartYear": { + "type": "dword", + "value": 1372 + }, + "Mod_Tag": { + "type": "cexostring", + "value": "MODULE" + }, + "Mod_UUID": { + "type": "cexostring", + "value": "" + }, + "Mod_Version": { + "type": "dword", + "value": 3 + }, + "Mod_XPScale": { + "type": "byte", + "value": 0 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "X2_SWITCH_ENABLE_UMD_SCROLLS" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "X2_L_NOTREASURE" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "X2_SWITCH_DISABLE_ITEMCREATION_FEATS" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "X2_SWITCH_EPIC_SPELLS_HURT_CASTER" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "X2_SWITCH_SPELL_CORERULE_DMTOUCH" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "X2_L_STOP_EXPERTISE_ABUSE" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_PNP_SHIFTER_BONUS" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 128 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_XP_USE_SETXP" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_ENABLE_SPELL_SHARING" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_PNP_DISARM" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_BARD_LIGHT_ARMOR_SPELLCASTING" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_CHICKEN_INFESTED" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_MULTISUMMON" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_XP_USE_SIMPLE_LA" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_XP_USE_SIMPLE_RACIAL_HD" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_XP_USE_SIMPLE_RACIAL_HD_NO_FREE_XP" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_PNP_REST_LIMIT" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_PNP_REST_HEALING" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_FAST_TRAVEL_SPEED" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_PNP_SOMATIC_COMPONENTS" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "PRC_PNP_SOMATIC_ITEMS" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + } +} diff --git a/src/module/itp/creaturepalcus.itp.json b/src/module/itp/creaturepalcus.itp.json new file mode 100644 index 0000000..293c109 --- /dev/null +++ b/src/module/itp/creaturepalcus.itp.json @@ -0,0 +1,29846 @@ +{ + "__data_type": "ITP ", + "MAIN": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 48 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "prc_danclighth" + }, + "STRREF": { + "type": "dword", + "value": 16789582 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "prc_danclights" + }, + "STRREF": { + "type": "dword", + "value": 16789582 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Battle Devourer" + }, + "RESREF": { + "type": "resref", + "value": "ep_summonaberat5" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Beholder" + }, + "RESREF": { + "type": "resref", + "value": "ep_summonaberat2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Drider Chief" + }, + "RESREF": { + "type": "resref", + "value": "ep_summonaberat1" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Mind Flayer Darkener" + }, + "RESREF": { + "type": "resref", + "value": "ep_summonaberat3" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Umber Hulk" + }, + "RESREF": { + "type": "resref", + "value": "ep_summonaberat4" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 63235 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 5 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Dire Bear" + }, + "RESREF": { + "type": "resref", + "value": "pseudobeardire" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Skeletal Dire Bear" + }, + "RESREF": { + "type": "resref", + "value": "prc_skelbear" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6695 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 6 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.3333 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "prc_chicken" + }, + "STRREF": { + "type": "dword", + "value": 12416 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6696 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 7 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Hound of Doom" + }, + "RESREF": { + "type": "resref", + "value": "prc_hound_doom" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Dire Wolf" + }, + "RESREF": { + "type": "resref", + "value": "pseudowolfdire" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6697 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 8 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_lion" + }, + "STRREF": { + "type": "dword", + "value": 12632 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Dire Tiger" + }, + "RESREF": { + "type": "resref", + "value": "pseudodiretiger" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6698 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 9 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.3333 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "rdg_bat" + }, + "STRREF": { + "type": "dword", + "value": 12376 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Bat Swarm" + }, + "RESREF": { + "type": "resref", + "value": "prc_bat_swarm" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Dire Badger" + }, + "RESREF": { + "type": "resref", + "value": "pseudobadgerdire" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Dire Boar" + }, + "RESREF": { + "type": "resref", + "value": "pseudoboardire" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Rat Swarm" + }, + "RESREF": { + "type": "resref", + "value": "prc_rat_swarm" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Tenacious Plague" + }, + "RESREF": { + "type": "resref", + "value": "prc_tplagueswarm" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf" + }, + "RESREF": { + "type": "resref", + "value": "acomep_winwolf" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf" + }, + "RESREF": { + "type": "resref", + "value": "acomp_winwolf" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 201 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6694 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 20 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Bone Tyrant" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_bonet" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Bone Warrior" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_bonewar" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Object" + }, + "RESREF": { + "type": "resref", + "value": "anim_armour_0" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Object" + }, + "RESREF": { + "type": "resref", + "value": "anim_armour_1_4" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Object" + }, + "RESREF": { + "type": "resref", + "value": "anim_armour_5_8" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Object" + }, + "RESREF": { + "type": "resref", + "value": "anim_weapon_larg" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Object" + }, + "RESREF": { + "type": "resref", + "value": "anim_weapon_smal" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Object, Gargantuan" + }, + "RESREF": { + "type": "resref", + "value": "prc_shd_animgarg" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Object, Huge" + }, + "RESREF": { + "type": "resref", + "value": "prc_shd_animhuge" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "RESREF": { + "type": "resref", + "value": "sp_sphereofud" + }, + "STRREF": { + "type": "dword", + "value": 16830451 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6712 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 21 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Dragon Cloud" + }, + "RESREF": { + "type": "resref", + "value": "prc_drag_cld" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Juvenile Red Dragon" + }, + "RESREF": { + "type": "resref", + "value": "prc_drgnally" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6713 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 22 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Air Elemental Elder" + }, + "RESREF": { + "type": "resref", + "value": "hen_air_eld" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Air Elemental Elder" + }, + "RESREF": { + "type": "resref", + "value": "hen_air_eld2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Air Elemental Greater" + }, + "RESREF": { + "type": "resref", + "value": "hen_air_gre" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Air Elemental Greater" + }, + "RESREF": { + "type": "resref", + "value": "hen_air_gre2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Air Elemental Huge" + }, + "RESREF": { + "type": "resref", + "value": "hen_air_hug" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Air Elemental Huge" + }, + "RESREF": { + "type": "resref", + "value": "hen_air_hug2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Air Elemental Large" + }, + "RESREF": { + "type": "resref", + "value": "hen_air_lar" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Air Elemental Large" + }, + "RESREF": { + "type": "resref", + "value": "hen_air_lar2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Air Elemental Medium" + }, + "RESREF": { + "type": "resref", + "value": "hen_air_med" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Air Elemental Medium" + }, + "RESREF": { + "type": "resref", + "value": "hen_air_med2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Air Elemental Small" + }, + "RESREF": { + "type": "resref", + "value": "hen_air_small001" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Earth Elemental Elder" + }, + "RESREF": { + "type": "resref", + "value": "hen_earth_eld" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Earth Elemental Elder" + }, + "RESREF": { + "type": "resref", + "value": "hen_earth_eld2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Earth Elemental Greater" + }, + "RESREF": { + "type": "resref", + "value": "hen_earth_gre" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Earth Elemental Greater" + }, + "RESREF": { + "type": "resref", + "value": "hen_earth_gre2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Earth Elemental Huge" + }, + "RESREF": { + "type": "resref", + "value": "bnd_agares_huge" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Earth Elemental Huge" + }, + "RESREF": { + "type": "resref", + "value": "hen_earth_hug" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Earth Elemental Huge" + }, + "RESREF": { + "type": "resref", + "value": "hen_earth_hug2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Earth Elemental Large" + }, + "RESREF": { + "type": "resref", + "value": "bnd_agares_large" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Earth Elemental Large" + }, + "RESREF": { + "type": "resref", + "value": "hen_earth_lar" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Earth Elemental Large" + }, + "RESREF": { + "type": "resref", + "value": "hen_earth_lar2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Earth Elemental Medium" + }, + "RESREF": { + "type": "resref", + "value": "bnd_agares_med" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Earth Elemental Medium" + }, + "RESREF": { + "type": "resref", + "value": "hen_earth_med" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Earth Elemental Medium" + }, + "RESREF": { + "type": "resref", + "value": "hen_earth_med2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.25 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Earth Elemental Small" + }, + "RESREF": { + "type": "resref", + "value": "bnd_agares_small" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Earth Elemental Small" + }, + "RESREF": { + "type": "resref", + "value": "hen_earth_small1" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Fire Elemental Elder" + }, + "RESREF": { + "type": "resref", + "value": "hen_fire_eld" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Fire Elemental Elder" + }, + "RESREF": { + "type": "resref", + "value": "hen_fire_eld2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Fire Elemental Greater" + }, + "RESREF": { + "type": "resref", + "value": "hen_fire_gre" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Fire Elemental Greater" + }, + "RESREF": { + "type": "resref", + "value": "hen_fire_gre2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Fire Elemental Huge" + }, + "RESREF": { + "type": "resref", + "value": "hen_fire_hug" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Fire Elemental Huge" + }, + "RESREF": { + "type": "resref", + "value": "hen_fire_hug2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Fire Elemental Large" + }, + "RESREF": { + "type": "resref", + "value": "hen_fire_lar" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Fire Elemental Large" + }, + "RESREF": { + "type": "resref", + "value": "hen_fire_lar2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Fire Elemental Medium" + }, + "RESREF": { + "type": "resref", + "value": "hen_fire_med" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Fire Elemental Medium" + }, + "RESREF": { + "type": "resref", + "value": "hen_fire_med2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Fire Elemental Small" + }, + "RESREF": { + "type": "resref", + "value": "hen_fire_small01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Elder Air Elemental" + }, + "RESREF": { + "type": "resref", + "value": "pseudoairelder" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Elder Earth Elemental" + }, + "RESREF": { + "type": "resref", + "value": "pseudoearthelder" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Elder Fire Elemental" + }, + "RESREF": { + "type": "resref", + "value": "pseudofireelder" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Elder Water Elemental" + }, + "RESREF": { + "type": "resref", + "value": "pseudowaterelder" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Greater Air Elemental" + }, + "RESREF": { + "type": "resref", + "value": "pseudoairgreat" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Greater Earth Elemental" + }, + "RESREF": { + "type": "resref", + "value": "pseudoearthgreat" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Greater Fire Elemental" + }, + "RESREF": { + "type": "resref", + "value": "pseudofiregreat" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Huge Air Elemental" + }, + "RESREF": { + "type": "resref", + "value": "pseudoairhuge" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Huge Earth Elemental" + }, + "RESREF": { + "type": "resref", + "value": "pseudoearthhuge" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Huge Fire Elemental" + }, + "RESREF": { + "type": "resref", + "value": "pseudofirehuge" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Huge Water Elemental" + }, + "RESREF": { + "type": "resref", + "value": "pseudowaterhuge" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseuonatural Greater Water Elemental" + }, + "RESREF": { + "type": "resref", + "value": "pseudowatergreat" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Shadow Elemental, Elder" + }, + "RESREF": { + "type": "resref", + "value": "shd_shdelem_eldr" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Shadow Elemental, Huge" + }, + "RESREF": { + "type": "resref", + "value": "shd_shdelem_huge" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Shadow Elemental, Med" + }, + "RESREF": { + "type": "resref", + "value": "shd_shdelem_med" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Shadow Familiar 2" + }, + "RESREF": { + "type": "resref", + "value": "shd_shdelem_med2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Shadow Familiar 3" + }, + "RESREF": { + "type": "resref", + "value": "shd_shdelem_med3" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Shadow Familiar 4" + }, + "RESREF": { + "type": "resref", + "value": "shd_shdelem_med4" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Water Elemental Elder" + }, + "RESREF": { + "type": "resref", + "value": "hen_water_eld" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Water Elemental Elder" + }, + "RESREF": { + "type": "resref", + "value": "hen_water_eld2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Water Elemental Greater" + }, + "RESREF": { + "type": "resref", + "value": "hen_water_gre" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Water Elemental Greater" + }, + "RESREF": { + "type": "resref", + "value": "hen_water_gre2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Water Elemental Huge" + }, + "RESREF": { + "type": "resref", + "value": "hen_water_hug" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Water Elemental Huge" + }, + "RESREF": { + "type": "resref", + "value": "hen_water_hug2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Water Elemental Large" + }, + "RESREF": { + "type": "resref", + "value": "hen_water_lar" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Water Elemental Large" + }, + "RESREF": { + "type": "resref", + "value": "hen_water_lar2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Water Elemental Medium" + }, + "RESREF": { + "type": "resref", + "value": "hen_water_med" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Water Elemental Medium" + }, + "RESREF": { + "type": "resref", + "value": "hen_water_med2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Water Elemental Small" + }, + "RESREF": { + "type": "resref", + "value": "hen_water_small1" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6714 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 34 + }, + "STRREF": { + "type": "dword", + "value": 6727 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 35 + }, + "STRREF": { + "type": "dword", + "value": 6728 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 36 + }, + "STRREF": { + "type": "dword", + "value": 6729 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 37 + }, + "STRREF": { + "type": "dword", + "value": 6730 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 541 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 14 + }, + "STRREF": { + "type": "dword", + "value": 6706 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 15 + }, + "STRREF": { + "type": "dword", + "value": 6707 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 16 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.3333 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Hobgoblin Thrall" + }, + "RESREF": { + "type": "resref", + "value": "prc_wrsl_war" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6708 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 17 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.3333 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Kobold" + }, + "RESREF": { + "type": "resref", + "value": "rdg_kobold" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6709 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 18 + }, + "STRREF": { + "type": "dword", + "value": 6710 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 19 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Orc" + }, + "RESREF": { + "type": "resref", + "value": "rdg_orc" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Orc" + }, + "RESREF": { + "type": "resref", + "value": "rdg_orc2" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 537 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 50 + }, + "STRREF": { + "type": "dword", + "value": 201 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6705 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 10 + }, + "STRREF": { + "type": "dword", + "value": 6701 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 11 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Dire Spider" + }, + "RESREF": { + "type": "resref", + "value": "pseudospiddire" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6702 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6700 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 49 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Gargoyle" + }, + "RESREF": { + "type": "resref", + "value": "rdg_gargoyle" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 63246 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 13 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Algoid" + }, + "RESREF": { + "type": "resref", + "value": "prc_algoid" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Earthen Hand" + }, + "RESREF": { + "type": "resref", + "value": "inv_earthenhand" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Myconid" + }, + "RESREF": { + "type": "resref", + "value": "prc_myconid" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Shambling Mound" + }, + "RESREF": { + "type": "resref", + "value": "prc_shambmound" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Stony Hand" + }, + "RESREF": { + "type": "resref", + "value": "inv_stonyhand" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Treant" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_treant" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Twig Blight" + }, + "RESREF": { + "type": "resref", + "value": "wol_twigblight" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 1592 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 23 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Astral Deva" + }, + "RESREF": { + "type": "resref", + "value": "true_deva" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Celestial Avenger" + }, + "RESREF": { + "type": "resref", + "value": "council_npca" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Compassion" + }, + "RESREF": { + "type": "resref", + "value": "prc_compassion" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Greater Soulspark" + }, + "RESREF": { + "type": "resref", + "value": "moi_slspk_greatr" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Hound Archon" + }, + "RESREF": { + "type": "resref", + "value": "council_npcb" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "RESREF": { + "type": "resref", + "value": "hen_clantern" + }, + "STRREF": { + "type": "dword", + "value": 12421 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_clantern" + }, + "STRREF": { + "type": "dword", + "value": 12421 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Least Soulspark" + }, + "RESREF": { + "type": "resref", + "value": "moi_slspk_least" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Lesser Soulspark" + }, + "RESREF": { + "type": "resref", + "value": "moi_slspk_lesser" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Soulspark" + }, + "RESREF": { + "type": "resref", + "value": "moi_slspk_medium" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6716 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 24 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Balor" + }, + "RESREF": { + "type": "resref", + "value": "fiendw_npcb" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Daemon Brute" + }, + "RESREF": { + "type": "resref", + "value": "baalsummon2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Daemoness" + }, + "RESREF": { + "type": "resref", + "value": "baalsummon1" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Erinyes" + }, + "RESREF": { + "type": "resref", + "value": "erinyes" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Monstrous Spider Servant" + }, + "RESREF": { + "type": "resref", + "value": "ch_dj_monstspid1" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Monstrous Spider Servant" + }, + "RESREF": { + "type": "resref", + "value": "ch_dj_monstspid2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Monstrous Spider Servant" + }, + "RESREF": { + "type": "resref", + "value": "ch_dj_monstspid3" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Monstrous Spider Servant" + }, + "RESREF": { + "type": "resref", + "value": "ch_dj_monstspid4" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Myrlochar Servant" + }, + "RESREF": { + "type": "resref", + "value": "ch_dj_myrlochar1" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Myrlochar Servant" + }, + "RESREF": { + "type": "resref", + "value": "ch_dj_myrlochar2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Myrlochar Servant" + }, + "RESREF": { + "type": "resref", + "value": "ch_dj_myrlochar3" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Myrlochar Servant" + }, + "RESREF": { + "type": "resref", + "value": "ch_dj_myrlochar4" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Phase Spider Servant" + }, + "RESREF": { + "type": "resref", + "value": "ch_dj_phasespid1" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Phase Spider Servant" + }, + "RESREF": { + "type": "resref", + "value": "ch_dj_phasespid2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Phase Spider Servant" + }, + "RESREF": { + "type": "resref", + "value": "ch_dj_phasespid3" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Phase Spider Servant" + }, + "RESREF": { + "type": "resref", + "value": "ch_dj_phasespid4" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Succubus" + }, + "RESREF": { + "type": "resref", + "value": "fiendw_npca" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Pit Fiend" + }, + "RESREF": { + "type": "resref", + "value": "twinfiend_demon" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Sword Spider Servant" + }, + "RESREF": { + "type": "resref", + "value": "ch_dj_swordspid1" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Sword Spider Servant" + }, + "RESREF": { + "type": "resref", + "value": "ch_dj_swordspid2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Sword Spider Servant" + }, + "RESREF": { + "type": "resref", + "value": "ch_dj_swordspid3" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Sword Spider Servant" + }, + "RESREF": { + "type": "resref", + "value": "ch_dj_swordspid4" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Temptation" + }, + "RESREF": { + "type": "resref", + "value": "prc_temptation" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6717 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 25 + }, + "STRREF": { + "type": "dword", + "value": 6718 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 47 + }, + "STRREF": { + "type": "dword", + "value": 6699 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 26 + }, + "STRREF": { + "type": "dword", + "value": 6719 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6715 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 12 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "rdg_wererat" + }, + "STRREF": { + "type": "dword", + "value": 12808 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6703 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 27 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Ghoul Ravager" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_grav" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 2058 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 28 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Greater Mummy of Orcus" + }, + "RESREF": { + "type": "resref", + "value": "prc_to_mummy" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "wo_mummy" + }, + "STRREF": { + "type": "dword", + "value": 90421 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6722 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 29 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Blood Warrior" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_vamp1" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 29.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Doombringer" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_dk" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 35.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Doombringer Lord" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_dbl" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 30.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Emperor of Blood" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_vamp2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Grey Warrior " + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_wight" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Mohrg" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_mohrg" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "rdg_curst_ranger" + }, + "STRREF": { + "type": "dword", + "value": 12437 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Enslaved Wight" + }, + "RESREF": { + "type": "resref", + "value": "prc_hench_wight3" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Mohrg of Orcus" + }, + "RESREF": { + "type": "resref", + "value": "prc_to_mohrg" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Nightwing of Orcus" + }, + "RESREF": { + "type": "resref", + "value": "prc_to_nightwing" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Soul Drained Wight" + }, + "RESREF": { + "type": "resref", + "value": "soul_wight_test" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Unholy Disciple" + }, + "RESREF": { + "type": "resref", + "value": "unholy_disciple" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "rdg_vampire" + }, + "STRREF": { + "type": "dword", + "value": 5637 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 201 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 30 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Shadow Fiend" + }, + "RESREF": { + "type": "resref", + "value": "shfiend001" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 2116 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 31 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Skeletal Ravager" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_sklch" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "wo_skel" + }, + "STRREF": { + "type": "dword", + "value": 12763 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6723 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 32 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 36.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Epic Wraith" + }, + "RESREF": { + "type": "resref", + "value": "summonedgreat004" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 37.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Epic Wraith" + }, + "RESREF": { + "type": "resref", + "value": "summonedgreat005" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 42.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Greater Epic Wraith" + }, + "RESREF": { + "type": "resref", + "value": "summonedgreat006" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Greater Wraith" + }, + "RESREF": { + "type": "resref", + "value": "summonedgreat001" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 29.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Greater Wraith" + }, + "RESREF": { + "type": "resref", + "value": "summonedgreat002" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 30.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Greater Wraith" + }, + "RESREF": { + "type": "resref", + "value": "summonedgreat003" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Greater Wraith" + }, + "RESREF": { + "type": "resref", + "value": "summonedgreaterw" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 2155 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 33 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Festering Thug" + }, + "RESREF": { + "type": "resref", + "value": "prc_tn_fthug" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Rotting Lord" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_zlord" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Zombie Bugbear" + }, + "RESREF": { + "type": "resref", + "value": "wo_zombie_bugb" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Zombie Ogre" + }, + "RESREF": { + "type": "resref", + "value": "wo_zombie_ogre" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Zombie Wyvern" + }, + "RESREF": { + "type": "resref", + "value": "wo_zombie_wyv" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6725 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 547 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6693 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 38 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Khofar" + }, + "RESREF": { + "type": "resref", + "value": "wol_khofar" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 23 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 39 + }, + "STRREF": { + "type": "dword", + "value": 25 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 40 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 28.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Craftsman Merchant" + }, + "RESREF": { + "type": "resref", + "value": "craftsmanmerchan" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 27 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 42 + }, + "STRREF": { + "type": "dword", + "value": 31 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 41 + }, + "STRREF": { + "type": "dword", + "value": 29 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 43 + }, + "STRREF": { + "type": "dword", + "value": 33 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 44 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 27.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Advanced Merchant" + }, + "RESREF": { + "type": "resref", + "value": "advancedmerchant" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.3333 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Banker" + }, + "RESREF": { + "type": "resref", + "value": "merchant005" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.25 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Basic Supplies Merchant" + }, + "RESREF": { + "type": "resref", + "value": "merchant" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.3333 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Junk Merchant" + }, + "RESREF": { + "type": "resref", + "value": "merchant004" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Rashemen" + }, + "RESREF": { + "type": "resref", + "value": "prc_hath_rash" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Rashemen Beserker" + }, + "RESREF": { + "type": "resref", + "value": "prc_hath_rash3" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Rashemen Bodyguard" + }, + "RESREF": { + "type": "resref", + "value": "prc_hath_rash6" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Rashemen Brawler" + }, + "RESREF": { + "type": "resref", + "value": "prc_hath_rash2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Rashemen Defender" + }, + "RESREF": { + "type": "resref", + "value": "prc_hath_rash5" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Rashemen Guardian" + }, + "RESREF": { + "type": "resref", + "value": "prc_hath_rash7" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Rashemen Lord" + }, + "RESREF": { + "type": "resref", + "value": "prc_hath_rash4" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 40.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Rashemen Perfected One" + }, + "RESREF": { + "type": "resref", + "value": "prc_hath_rash10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 29.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Rashemen Thunderguard" + }, + "RESREF": { + "type": "resref", + "value": "prc_hath_rash9" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 27.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Rashemen Warlord" + }, + "RESREF": { + "type": "resref", + "value": "prc_hath_rash8" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 35 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 45 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Anti-paladin Mount" + }, + "RESREF": { + "type": "resref", + "value": "x3_palhrs11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Anti-paladin Mount" + }, + "RESREF": { + "type": "resref", + "value": "x3_palhrs12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Anti-paladin Mount" + }, + "RESREF": { + "type": "resref", + "value": "x3_palhrs13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Anti-paladin Mount" + }, + "RESREF": { + "type": "resref", + "value": "x3_palhrs14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Anti-paladin Mount" + }, + "RESREF": { + "type": "resref", + "value": "x3_palhrs15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Anti-paladin Mount" + }, + "RESREF": { + "type": "resref", + "value": "x3_palhrs17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Anti-paladin Mount" + }, + "RESREF": { + "type": "resref", + "value": "x3_palhrs18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Barbarian of Valhalla" + }, + "RESREF": { + "type": "resref", + "value": "miscc1039" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Barbarian of Valhalla" + }, + "RESREF": { + "type": "resref", + "value": "miscc2039" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Barbarian of Valhalla" + }, + "RESREF": { + "type": "resref", + "value": "miscc3039" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Barbarian of Valhalla" + }, + "RESREF": { + "type": "resref", + "value": "miscc4039" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Paladin Mount" + }, + "RESREF": { + "type": "resref", + "value": "x3_palhrs16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Tiny Viper" + }, + "RESREF": { + "type": "resref", + "value": "prc_viper" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "prc_s_wolf002" + }, + "STRREF": { + "type": "dword", + "value": 12816 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "prc_s_wolf003" + }, + "STRREF": { + "type": "dword", + "value": 12816 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "prc_s_wolf004" + }, + "STRREF": { + "type": "dword", + "value": 12816 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Wolf" + }, + "RESREF": { + "type": "resref", + "value": "prc_s_wolf005" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 201 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6731 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 0 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "psi_thrall_wiz" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Adamantium Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_adam" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Adamantium Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_adam_55" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Adamantium Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_adam_60" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Adamantium Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_adam_65" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Adamantium Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_adam_70" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Adamantium Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_adam_75" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Adamantium Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_adam_80" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Aranea Human Form" + }, + "RESREF": { + "type": "resref", + "value": "prc_ara_human" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Aranea Hybrid Form" + }, + "RESREF": { + "type": "resref", + "value": "prc_ara_hybrid" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con1" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con1a" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con2" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con2a" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con3" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con3a" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con4" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con4a" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con4b" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con5" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con5a" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con5b" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con6" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con6a" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con6b" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con7" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con7a" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con7b" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con7c" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con8" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con8a" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con8b" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con8c" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con9" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con9a" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con9b" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 26.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "psi_astral_con9c" + }, + "STRREF": { + "type": "dword", + "value": 16824740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "bagoftricks_badg" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.3333 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "bagoftricks_bat" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "RESREF": { + "type": "resref", + "value": "bagoftricks_blac" + }, + "STRREF": { + "type": "dword", + "value": 12382 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Boar" + }, + "RESREF": { + "type": "resref", + "value": "bagoftricks_boar" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Bralani Eladrin" + }, + "RESREF": { + "type": "resref", + "value": "true_bralan" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "RESREF": { + "type": "resref", + "value": "bagoftricks_brow" + }, + "STRREF": { + "type": "dword", + "value": 12384 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Burning Ember" + }, + "RESREF": { + "type": "resref", + "value": "tob_dw_distembr" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Clay Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_clay" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Clay Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_clay_12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Clay Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_clay_17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Clay Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_clay_22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Clay Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_clay_27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Clay Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_clay_32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.25 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crushing Fist of Spite" + }, + "RESREF": { + "type": "resref", + "value": "prc_crush_fist" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.3333 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "RESREF": { + "type": "resref", + "value": "prc_hex_darkcomp" + }, + "STRREF": { + "type": "dword", + "value": 16825795 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Demonflesh Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_demo" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "bagoftricks_dwol" + }, + "STRREF": { + "type": "dword", + "value": 10526 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.125 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Epic Template" + }, + "RESREF": { + "type": "resref", + "value": "epicshifterliste" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Flesh Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_fles" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Flesh Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_fles_10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Flesh Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_fles_15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Flesh Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_fles_20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Flesh Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_fles_25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 49.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Greater Demilich " + }, + "RESREF": { + "type": "resref", + "value": "prc_pm_mage10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Hamatula" + }, + "RESREF": { + "type": "resref", + "value": "hamatula" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Hamatula" + }, + "RESREF": { + "type": "resref", + "value": "hamatula001" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Axe Battlemaster" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_axe_8" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Axe Commander" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_axe_6" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Axe Legionnaire" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_axe_7" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Axe Myrmidon" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_axe_10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Axe Ravager" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_axe_9" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Axethrower" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_axe_1" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Elite Axetosser" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_axe_4" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Greater Marksman" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_axe_5" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Gruumsh's Axe" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_axe_11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Gruumsh's Chosen Axe" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_axe_12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Marksman" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_axe_3" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Trained Axethrower" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_axe_2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Iron Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_iron" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Iron Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_iron_19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Iron Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_iron_24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Iron Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_iron_29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Iron Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_iron_34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Iron Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_iron_39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Iron Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_iron_44" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Iron Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_iron_49" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Iron Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_iron_54" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "RESREF": { + "type": "resref", + "value": "bagoftricks_jag" + }, + "STRREF": { + "type": "dword", + "value": 12623 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 42.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Lesser Demilich" + }, + "RESREF": { + "type": "resref", + "value": "prc_pm_mage8" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 36.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Lich Magician" + }, + "RESREF": { + "type": "resref", + "value": "prc_pm_mage6" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 38.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Lich War Weaver" + }, + "RESREF": { + "type": "resref", + "value": "prc_pm_mage7" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 31.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Lich Weavewarrior" + }, + "RESREF": { + "type": "resref", + "value": "prc_pm_mage5" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "RESREF": { + "type": "resref", + "value": "bagoftricks_lion" + }, + "STRREF": { + "type": "dword", + "value": 12632 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.125 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Magic Template" + }, + "RESREF": { + "type": "resref", + "value": "shifterlistenero" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Mithril Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_mith" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Mithril Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_mith_37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Mithril Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_mith_42" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Mithril Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_mith_47" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Mithril Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_mith_52" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Mithril Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_mith_57" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Mithril Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_mith_62" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Mithril Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_mith_67" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Mithril Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_mith_72" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 45.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Necromantic Demilich " + }, + "RESREF": { + "type": "resref", + "value": "prc_pm_mage9" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "PnP Bat Familiar" + }, + "RESREF": { + "type": "resref", + "value": "prc_pnpfam_bat" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "PnP Cat Familiar" + }, + "RESREF": { + "type": "resref", + "value": "prc_pnpfam_cat" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "PnP Hawk Familiar" + }, + "RESREF": { + "type": "resref", + "value": "prc_pnpfam_hawk" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "PnP Owl Familiar" + }, + "RESREF": { + "type": "resref", + "value": "prc_pnpfam_owl" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "PnP Rat Familiar" + }, + "RESREF": { + "type": "resref", + "value": "prc_pnpfam_rat" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "PnP Raven Familiar" + }, + "RESREF": { + "type": "resref", + "value": "prc_pnpfam_raven" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "PnP Snake Familiar" + }, + "RESREF": { + "type": "resref", + "value": "prc_pnpfam_snake" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "PnP Weasel Familiar" + }, + "RESREF": { + "type": "resref", + "value": "prc_pnpfam_weasl" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "bagoftricks_pola" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "prc_2da_cache" + }, + "RESREF": { + "type": "resref", + "value": "prc_2da_cache" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.125 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "prc_gen_listener" + }, + "RESREF": { + "type": "resref", + "value": "prc_gen_listener" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.125 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "bagoftricks_rat" + }, + "STRREF": { + "type": "dword", + "value": 3103 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Skeleton Mage" + }, + "RESREF": { + "type": "resref", + "value": "prc_pm_mage1" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 28.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Skeleton Spellweaver" + }, + "RESREF": { + "type": "resref", + "value": "prc_pm_mage4" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Skeleton Warlock" + }, + "RESREF": { + "type": "resref", + "value": "prc_pm_mage3" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Skeleton Wizard" + }, + "RESREF": { + "type": "resref", + "value": "prc_pm_mage2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Spiritual Weapon" + }, + "RESREF": { + "type": "resref", + "value": "prc_spirit_weapn" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Stone Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_ston" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Stone Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_ston_15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Stone Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_ston_20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Stone Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_ston_25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Stone Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_ston_30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Stone Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_ston_35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Stone Golem" + }, + "RESREF": { + "type": "resref", + "value": "prc_con_ston_40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Allip" + }, + "RESREF": { + "type": "resref", + "value": "prc_mos_allip" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Balor" + }, + "RESREF": { + "type": "resref", + "value": "tog_balor" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Bezekira" + }, + "RESREF": { + "type": "resref", + "value": "prc_doa_hellcat" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Cornugon" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_cornugon" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Dretch" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_dretch" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Gelugon" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_gelugon" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Glabrezu" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_glabrezu" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Glabrezu" + }, + "RESREF": { + "type": "resref", + "value": "tog_glabrezu" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Hamatula" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_hamatula" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Lemure" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_lemure" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Marilith" + }, + "RESREF": { + "type": "resref", + "value": "tog_marilith" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Osyluth" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_osyluth" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Spectre" + }, + "RESREF": { + "type": "resref", + "value": "prc_mos_spectre1" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Spectre" + }, + "RESREF": { + "type": "resref", + "value": "prc_mos_spectre2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Succubus" + }, + "RESREF": { + "type": "resref", + "value": "tog_succubus" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Vrock" + }, + "RESREF": { + "type": "resref", + "value": "tog_vrock" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Wraith" + }, + "RESREF": { + "type": "resref", + "value": "prc_mos_wraith" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.25 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Tenser's Floating Disk" + }, + "RESREF": { + "type": "resref", + "value": "floatingdisk" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Thrallherd" + }, + "RESREF": { + "type": "resref", + "value": "psi_thrall_clc" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Thrallherd" + }, + "RESREF": { + "type": "resref", + "value": "psi_thrall_cleri" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Thrallherd" + }, + "RESREF": { + "type": "resref", + "value": "psi_thrall_fgt" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Thrallherd" + }, + "RESREF": { + "type": "resref", + "value": "psi_thrall_fight" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Thrallherd" + }, + "RESREF": { + "type": "resref", + "value": "psi_thrall_rog" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Thrallherd" + }, + "RESREF": { + "type": "resref", + "value": "psi_thrall_rogue" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Thrallherd" + }, + "RESREF": { + "type": "resref", + "value": "psi_thrall_sorc" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 53.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Weave Spawn" + }, + "RESREF": { + "type": "resref", + "value": "prc_pm_mage11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "RESREF": { + "type": "resref", + "value": "bagoftricks_wolf" + }, + "STRREF": { + "type": "dword", + "value": 12816 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Word Archon" + }, + "RESREF": { + "type": "resref", + "value": "true_wordarch" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6688 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 1 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "deck_dragongold" + }, + "STRREF": { + "type": "dword", + "value": 12481 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Adult Red Dragon" + }, + "RESREF": { + "type": "resref", + "value": "deck_drgred" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Bandit Chief" + }, + "RESREF": { + "type": "resref", + "value": "deck_bandit1" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Bandit Cleric" + }, + "RESREF": { + "type": "resref", + "value": "deck_bandit4" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_bandit2" + }, + "STRREF": { + "type": "dword", + "value": 12371 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_bugbear" + }, + "STRREF": { + "type": "dword", + "value": 12411 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_cocktrice" + }, + "STRREF": { + "type": "dword", + "value": 40596 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_dwarfmerc1" + }, + "STRREF": { + "type": "dword", + "value": 12511 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "deck_elfmage" + }, + "STRREF": { + "type": "dword", + "value": 12518 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_elfranger" + }, + "STRREF": { + "type": "dword", + "value": 12520 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_ettin" + }, + "STRREF": { + "type": "dword", + "value": 12524 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Fire Giant" + }, + "RESREF": { + "type": "resref", + "value": "deck_fgiant" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Frost Giant" + }, + "RESREF": { + "type": "resref", + "value": "deck_frostg" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_gnoll" + }, + "STRREF": { + "type": "dword", + "value": 3097 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.25 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_goblin" + }, + "STRREF": { + "type": "dword", + "value": 12567 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Gypsy Mage" + }, + "RESREF": { + "type": "resref", + "value": "deck_gypsy" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_bandit6" + }, + "STRREF": { + "type": "dword", + "value": 12372 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_hillgiant" + }, + "STRREF": { + "type": "dword", + "value": 12562 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.3333 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_hobgoblin" + }, + "STRREF": { + "type": "dword", + "value": 3100 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Bahgtru's Chosen" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_barb_12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Barbarian" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_barb_1" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Battle Charger" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_barb_7" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Beserker" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_barb_4" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Breacher" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_barb_6" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Charger" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_barb_3" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Elf Slayer" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_barb_9" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Greater Rager" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_barb_10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Killer of Bahgtru" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_barb_11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Rager" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_barb_5" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Savage" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_barb_2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Warrior of Hate" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_barb_8" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_humanmerc1" + }, + "STRREF": { + "type": "dword", + "value": 12617 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_humanmerc6" + }, + "STRREF": { + "type": "dword", + "value": 12617 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_goliron" + }, + "STRREF": { + "type": "dword", + "value": 12576 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.3333 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Kobold" + }, + "RESREF": { + "type": "resref", + "value": "deck_kobold" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_lich" + }, + "STRREF": { + "type": "dword", + "value": 12629 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_medusa" + }, + "STRREF": { + "type": "dword", + "value": 2854 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_ogre" + }, + "STRREF": { + "type": "dword", + "value": 12664 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_ogremage" + }, + "STRREF": { + "type": "dword", + "value": 12666 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Orc" + }, + "RESREF": { + "type": "resref", + "value": "deck_orc" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_pixie" + }, + "STRREF": { + "type": "dword", + "value": 6005 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "deck_troll" + }, + "STRREF": { + "type": "dword", + "value": 12786 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6689 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 2 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Bronze Gargoyle" + }, + "RESREF": { + "type": "resref", + "value": "miscb027" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Ebony Manticore" + }, + "RESREF": { + "type": "resref", + "value": "miscb028" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Golden Lion" + }, + "RESREF": { + "type": "resref", + "value": "miscb066" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Golden Lion" + }, + "RESREF": { + "type": "resref", + "value": "miscb068" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Golden Lion" + }, + "RESREF": { + "type": "resref", + "value": "miscb069" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Acolyte" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_sham_1" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Battlepriest of Ilneval" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_sham_10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Deacon" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_sham_2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Elder Witchdoctor" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_sham_8" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc General of Ilneval" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_sham_12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Preacher of Ilneval" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_sham_9" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Priest" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_sham_4" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Shaman" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_sham_3" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Spirit Shaman" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_sham_7" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Tribal Priest" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_sham_6" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Warleader of Ilneval" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_sham_11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Witchdoctor" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_sham_5" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Iron Ox" + }, + "RESREF": { + "type": "resref", + "value": "miscb045" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Ivory Ox" + }, + "RESREF": { + "type": "resref", + "value": "miscb075" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Marble Bear" + }, + "RESREF": { + "type": "resref", + "value": "miscb067" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Obsidian Ox" + }, + "RESREF": { + "type": "resref", + "value": "miscb098" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Onyx Dog" + }, + "RESREF": { + "type": "resref", + "value": "miscb055" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Silver Owl" + }, + "RESREF": { + "type": "resref", + "value": "miscb022" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.125 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Silver Raven" + }, + "RESREF": { + "type": "resref", + "value": "misca059" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Stone Ox" + }, + "RESREF": { + "type": "resref", + "value": "miscb032" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Stone Ox" + }, + "RESREF": { + "type": "resref", + "value": "miscb033" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6690 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 3 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Barag" + }, + "RESREF": { + "type": "resref", + "value": "barag" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Belror" + }, + "RESREF": { + "type": "resref", + "value": "eowarar001" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Boibo" + }, + "RESREF": { + "type": "resref", + "value": "boibo" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Cario" + }, + "RESREF": { + "type": "resref", + "value": "cario" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Choa" + }, + "RESREF": { + "type": "resref", + "value": "choa" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 26.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 26.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 27.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Crag Cat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cragcat40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Eowarar" + }, + "RESREF": { + "type": "resref", + "value": "eowarar" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 26.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 26.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 27.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Krenshar" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_krenshar40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Lemli" + }, + "RESREF": { + "type": "resref", + "value": "lemli" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Merrenton" + }, + "RESREF": { + "type": "resref", + "value": "merrenton" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb01" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb02" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb03" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb04" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb05" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb06" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb07" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb08" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb09" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb10" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb11" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb12" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb13" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb14" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb15" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb16" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb17" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb18" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb19" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb20" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb21" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb22" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb23" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb24" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb25" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb26" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb27" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb28" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb29" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb30" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb31" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb32" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb33" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb34" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb35" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb36" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb37" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb38" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb39" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 26.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_polarb40" + }, + "STRREF": { + "type": "dword", + "value": 12389 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Salen" + }, + "RESREF": { + "type": "resref", + "value": "salen" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Sharoc" + }, + "RESREF": { + "type": "resref", + "value": "sharoc" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Slyn" + }, + "RESREF": { + "type": "resref", + "value": "slyn" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6691 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 4 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.3333 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_quas40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "nw_fm_wwlf40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 01" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 02" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 03" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 04" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 05" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 06" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 07" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 08" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 09" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 10" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 11" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 12" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 13" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 14" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 15" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 16" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 17" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 18" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 19" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 20" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 21" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 22" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 23" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 24" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 25" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 26" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 27" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 28" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 29" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 30" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 31" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 32" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 33" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 34" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 35" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 36" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 37" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 38" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 39" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dire Rat 40" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_direrat40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 01" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 02" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 03" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 04" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 05" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 06" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 07" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 08" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 09" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 10" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 11" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 12" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 13" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 14" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 15" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 16" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 17" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 18" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 19" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 20" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 21" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 22" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 23" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 24" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 25" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 26" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 27" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 28" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 29" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 30" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 31" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 32" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 33" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 34" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 35" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 36" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 37" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 38" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 39" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Dog 40" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dog40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 01" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 02" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 03" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 04" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 05" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 06" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 07" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 08" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 09" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 10" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 11" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 12" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 13" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 14" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 15" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 16" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 17" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 18" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 19" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 20" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 21" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 22" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 23" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 24" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 25" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 26" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 27" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 28" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 29" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 30" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 31" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 32" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 33" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 34" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 35" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 36" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 37" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 38" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 39" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Eagle 40" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_eagle40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 01" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 02" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 03" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 04" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 05" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 06" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 07" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 08" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 09" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 10" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 11" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 12" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 13" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 14" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 15" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 16" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 17" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 18" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 19" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 20" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 21" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 22" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 23" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 24" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 25" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 26" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 27" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 28" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 29" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 30" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 31" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 32" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 33" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 34" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 35" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 36" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 37" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 38" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 39" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Hawk 40" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hawk40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 01" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 02" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 03" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 04" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 05" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 06" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 07" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 08" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 09" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 10" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 11" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 12" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 13" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 14" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 15" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 16" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 17" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 18" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 19" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 20" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 21" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 22" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 23" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 24" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 25" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 26" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 27" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 28" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 29" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 30" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 31" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 32" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 33" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 34" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 35" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 36" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 37" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 38" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 39" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Heavy Horse 40" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_hvhorse40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 01" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 02" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 03" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 04" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 05" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 06" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 07" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 08" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 09" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 10" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 11" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 12" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 13" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 14" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 15" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 16" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 17" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 18" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 19" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 20" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 21" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 22" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 23" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 24" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 25" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 26" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 27" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 28" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 29" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 30" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 31" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 32" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 33" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 34" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 35" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 36" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 37" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 38" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 39" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Light Horse 40" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_lthorse40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 01" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 02" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 03" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 04" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 05" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 06" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 07" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 08" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 09" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 10" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 11" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 12" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 13" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 14" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 15" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 16" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 17" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 18" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 19" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 20" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 21" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 22" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 23" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 24" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 25" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 26" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 27" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 28" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 29" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 30" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 31" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 32" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 33" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 34" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 35" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 36" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 37" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 38" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 39" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Owl 40" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_owl40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 01" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 02" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 03" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 04" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 05" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 06" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 07" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 08" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 09" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 10" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 11" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 12" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 13" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 14" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 15" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 16" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 17" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 18" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 19" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 20" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 21" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 22" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 23" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 24" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 25" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 26" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 27" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 28" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 29" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 30" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 31" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 32" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 33" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 34" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 35" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 36" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 37" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 38" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 39" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Pony 40" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_pony40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 01" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 02" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 03" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 04" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 05" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 06" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 07" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 08" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 09" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 10" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 11" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 12" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 13" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 14" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 15" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 16" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 17" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 18" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 19" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 20" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 21" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 22" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 23" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 24" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 25" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 26" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 27" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 28" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 29" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 30" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 31" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 32" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 33" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 34" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 35" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 36" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 37" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 38" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 39" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Riding Dog 40" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_dogride40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 01" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 02" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 03" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 04" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 05" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 06" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 07" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 08" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 09" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 10" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 11" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 12" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 13" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 14" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 15" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 16" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 17" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 18" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 19" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 20" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 21" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 22" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 23" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 24" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 25" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 26" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 27" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 28" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 29" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 30" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 31" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 32" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 33" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 34" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 35" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 36" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 37" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 38" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 39" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Viper 40" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_mviper40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 01" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 02" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 03" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 04" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 05" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 06" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 07" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 08" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 09" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 10" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 11" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 12" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 13" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 14" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 15" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 16" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 17" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 18" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 19" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 20" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 21" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 22" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 23" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 24" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 25" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 26" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 27" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 28" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 29" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 30" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 31" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 32" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 33" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 34" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 35" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 36" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 37" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 38" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 39" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animal Companion: Wolf 40" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_wolf40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Dire Bear" + }, + "RESREF": { + "type": "resref", + "value": "prc_a_beardire" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Dire Tiger" + }, + "RESREF": { + "type": "resref", + "value": "prc_a_tigerdire" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Animated Dire Wolf" + }, + "RESREF": { + "type": "resref", + "value": "prc_a_wolfdire" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Badger" + }, + "RESREF": { + "type": "resref", + "value": "prc_ac_badger40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Bat" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bat40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_batthorr001" + }, + "STRREF": { + "type": "dword", + "value": 90406 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 39.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_bblade" + }, + "STRREF": { + "type": "dword", + "value": 90406 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 01" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 02" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 03" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 04" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 05" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 06" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 07" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 08" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 09" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 10" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 11" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 12" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 13" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 14" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 15" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 16" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 17" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 18" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 19" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 20" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 21" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 22" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 23" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 24" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 25" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 26" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 27" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 28" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 29" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 30" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 31" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 32" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 33" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 34" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 35" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 36" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 37" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 26.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 38" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 26.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 39" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 27.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Blink Dog, companion 40" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_bdog40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 01" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 02" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 03" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 04" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 05" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 06" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 07" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 08" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 09" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 10" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 11" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 12" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 13" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 14" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 15" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 16" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 17" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 18" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 19" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 20" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 21" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 22" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 23" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 24" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 25" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 26" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 27" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 28" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 29" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 30" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 31" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 32" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 33" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 34" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 35" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 36" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 37" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 38" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 39" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Cobra, companion 40" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_cobra40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Controlled" + }, + "RESREF": { + "type": "resref", + "value": "psi_ctrlobj" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases01" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases02" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases03" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases04" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases05" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases06" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases07" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases08" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases09" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases10" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases11" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases12" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases13" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases14" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases15" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases16" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases17" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases18" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases19" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases20" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases21" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases22" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases23" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases24" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases25" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases26" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases27" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases28" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases29" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases30" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases31" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases32" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases33" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases34" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases35" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases36" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases37" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases38" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases39" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_phases40" + }, + "STRREF": { + "type": "dword", + "value": 12722 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_faerie001" + }, + "STRREF": { + "type": "dword", + "value": 90413 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb01" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb02" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb03" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb04" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb05" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb06" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb07" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb08" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb09" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb10" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb11" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb12" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb13" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb14" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb15" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb16" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb17" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb18" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb19" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb20" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb21" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb22" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb23" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb24" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb25" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb26" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb27" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb28" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb29" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb30" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb31" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb32" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb33" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb34" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb35" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb36" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb37" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb38" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb39" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 26.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_stinkb40" + }, + "STRREF": { + "type": "dword", + "value": 12409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "x1_s_airsmall" + }, + "STRREF": { + "type": "dword", + "value": 40642 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_lich_24" + }, + "STRREF": { + "type": "dword", + "value": 90418 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_lich_26" + }, + "STRREF": { + "type": "dword", + "value": 90419 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_balor" + }, + "STRREF": { + "type": "dword", + "value": 12735 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_balor_evil" + }, + "STRREF": { + "type": "dword", + "value": 12735 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_ctrumpet" + }, + "STRREF": { + "type": "dword", + "value": 12740 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_slaaddeth" + }, + "STRREF": { + "type": "dword", + "value": 12765 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_badgerdire" + }, + "STRREF": { + "type": "dword", + "value": 12734 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_beardire" + }, + "STRREF": { + "type": "dword", + "value": 12736 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_boardire" + }, + "STRREF": { + "type": "dword", + "value": 12737 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_spiddire" + }, + "STRREF": { + "type": "dword", + "value": 12769 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_diretiger" + }, + "STRREF": { + "type": "dword", + "value": 12741 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_wolfdire" + }, + "STRREF": { + "type": "dword", + "value": 12779 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_doomkght" + }, + "STRREF": { + "type": "dword", + "value": 12743 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "x1_s_earthsmall" + }, + "STRREF": { + "type": "dword", + "value": 40643 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_airelder" + }, + "STRREF": { + "type": "dword", + "value": 12732 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_earthelder" + }, + "STRREF": { + "type": "dword", + "value": 12744 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_fireelder" + }, + "STRREF": { + "type": "dword", + "value": 12746 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_waterelder" + }, + "STRREF": { + "type": "dword", + "value": 12776 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_eshadlord" + }, + "STRREF": { + "type": "dword", + "value": 90411 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_vrock" + }, + "STRREF": { + "type": "dword", + "value": 90428 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 36.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Epic Wraith" + }, + "RESREF": { + "type": "resref", + "value": "prc_mos_33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 37.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Epic Wraith" + }, + "RESREF": { + "type": "resref", + "value": "prc_mos_36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "x1_s_firesmall" + }, + "STRREF": { + "type": "dword", + "value": 40644 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_gargoyle" + }, + "STRREF": { + "type": "dword", + "value": 12748 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_ghast" + }, + "STRREF": { + "type": "dword", + "value": 12749 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_ghoul" + }, + "STRREF": { + "type": "dword", + "value": 12750 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_ghoul_16" + }, + "STRREF": { + "type": "dword", + "value": 90415 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Ghoul Lord" + }, + "RESREF": { + "type": "resref", + "value": "s_ghoullord" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Ghoul Ravager" + }, + "RESREF": { + "type": "resref", + "value": "s_ghoulravager" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_airgreat" + }, + "STRREF": { + "type": "dword", + "value": 12728 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_sw_airgreat" + }, + "STRREF": { + "type": "dword", + "value": 12728 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_bodak_14" + }, + "STRREF": { + "type": "dword", + "value": 90409 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_earthgreat" + }, + "STRREF": { + "type": "dword", + "value": 12729 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_sw_earthgreat" + }, + "STRREF": { + "type": "dword", + "value": 12729 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 42.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Greater Epic Wraith" + }, + "RESREF": { + "type": "resref", + "value": "prc_mos_39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_firegreat" + }, + "STRREF": { + "type": "dword", + "value": 12730 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_sw_firegreat" + }, + "STRREF": { + "type": "dword", + "value": 12730 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_mumcleric" + }, + "STRREF": { + "type": "dword", + "value": 12756 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_watergreat" + }, + "STRREF": { + "type": "dword", + "value": 12731 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_sw_watergreat" + }, + "STRREF": { + "type": "dword", + "value": 12731 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Greater Wraith" + }, + "RESREF": { + "type": "resref", + "value": "prc_mos_21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Greater Wraith" + }, + "RESREF": { + "type": "resref", + "value": "prc_mos_24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 29.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Greater Wraith" + }, + "RESREF": { + "type": "resref", + "value": "prc_mos_27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 30.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Merchant" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Greater Wraith" + }, + "RESREF": { + "type": "resref", + "value": "prc_mos_30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_slaadgrn" + }, + "STRREF": { + "type": "dword", + "value": 12766 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_helmhorr" + }, + "STRREF": { + "type": "dword", + "value": 12751 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_chound" + }, + "STRREF": { + "type": "dword", + "value": 12738 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_airhuge" + }, + "STRREF": { + "type": "dword", + "value": 12733 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_earthhuge" + }, + "STRREF": { + "type": "dword", + "value": 12745 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_firehuge" + }, + "STRREF": { + "type": "dword", + "value": 12747 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_waterhuge" + }, + "STRREF": { + "type": "dword", + "value": 12777 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_imp" + }, + "STRREF": { + "type": "dword", + "value": 12752 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Large Air Elemental" + }, + "RESREF": { + "type": "resref", + "value": "prc_s_airlarge" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Large Earth Elemental" + }, + "RESREF": { + "type": "resref", + "value": "prc_s_earthlarge" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Large Fire Elemental" + }, + "RESREF": { + "type": "resref", + "value": "prc_s_firelarge" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Summoned Large Water Elemental" + }, + "RESREF": { + "type": "resref", + "value": "prc_s_waterlarge" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_lich_30" + }, + "STRREF": { + "type": "dword", + "value": 90420 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_lich" + }, + "STRREF": { + "type": "dword", + "value": 12753 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_lich_20" + }, + "STRREF": { + "type": "dword", + "value": 90416 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_lich_22" + }, + "STRREF": { + "type": "dword", + "value": 90417 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_minogon" + }, + "STRREF": { + "type": "dword", + "value": 12755 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_mummy" + }, + "STRREF": { + "type": "dword", + "value": 90421 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_mummy_9" + }, + "STRREF": { + "type": "dword", + "value": 90421 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_dmquasit" + }, + "STRREF": { + "type": "dword", + "value": 12742 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_drgred001" + }, + "STRREF": { + "type": "dword", + "value": 90410 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_slaadred" + }, + "STRREF": { + "type": "dword", + "value": 12767 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_shadow" + }, + "STRREF": { + "type": "dword", + "value": 12760 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "x1_s_shadow" + }, + "STRREF": { + "type": "dword", + "value": 12760 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_shfiend" + }, + "STRREF": { + "type": "dword", + "value": 12761 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "x1_s_shfiend" + }, + "STRREF": { + "type": "dword", + "value": 12761 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_shadlord" + }, + "STRREF": { + "type": "dword", + "value": 12758 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "x1_s_shadlord" + }, + "STRREF": { + "type": "dword", + "value": 12758 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_shadmastif" + }, + "STRREF": { + "type": "dword", + "value": 12759 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 1.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_skeleton" + }, + "STRREF": { + "type": "dword", + "value": 12763 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_bguard_18" + }, + "STRREF": { + "type": "dword", + "value": 90408 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_skelchief" + }, + "STRREF": { + "type": "dword", + "value": 12762 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_skelwarr" + }, + "STRREF": { + "type": "dword", + "value": 12764 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_spectre" + }, + "STRREF": { + "type": "dword", + "value": 12768 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_spectre_10" + }, + "STRREF": { + "type": "dword", + "value": 90423 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_mepsteam" + }, + "STRREF": { + "type": "dword", + "value": 12754 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_succubus" + }, + "STRREF": { + "type": "dword", + "value": 12771 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_spidsword" + }, + "STRREF": { + "type": "dword", + "value": 12770 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_zombtyrant" + }, + "STRREF": { + "type": "dword", + "value": 12782 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_vampire" + }, + "STRREF": { + "type": "dword", + "value": 12773 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_vamp_18" + }, + "STRREF": { + "type": "dword", + "value": 90427 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_vamp_10" + }, + "STRREF": { + "type": "dword", + "value": 90426 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_vrock" + }, + "STRREF": { + "type": "dword", + "value": 12774 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_mummywarr" + }, + "STRREF": { + "type": "dword", + "value": 90422 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_mumfight" + }, + "STRREF": { + "type": "dword", + "value": 12757 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "x1_s_watersmall" + }, + "STRREF": { + "type": "dword", + "value": 40645 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_wight" + }, + "STRREF": { + "type": "dword", + "value": 12778 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_wraith" + }, + "STRREF": { + "type": "dword", + "value": 12780 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "nw_s_zombie" + }, + "STRREF": { + "type": "dword", + "value": 12781 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_tynan0" + }, + "STRREF": { + "type": "dword", + "value": 90424 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_tynan1" + }, + "STRREF": { + "type": "dword", + "value": 90425 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 01" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 02" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 03" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 04" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 05" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 06" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 07" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 08" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 09" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 10" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 11" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 12" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 13" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 14" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 15" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 16" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 17" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 18" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 19" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 20" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 21" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 22" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 23" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 24" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 25" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 26" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 27" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 28" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 29" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 30" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 31" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 32" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 33" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 34" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 35" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 36" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 37" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 38" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 26.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 39" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 26.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Winter Wolf, companion 40" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_wwlf40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 01" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg01" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 02" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg02" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 03" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg03" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 04" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg04" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 05" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg05" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 06" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg06" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 07" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg07" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 08" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg08" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 09" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg09" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 10" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 11" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 12" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 13" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg13" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 11.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 14" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg14" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 15" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg15" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 16" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg16" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 17" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg17" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 18" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg18" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 19" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg19" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 20" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg20" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 16.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 21" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg21" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 22" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg22" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 23" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg23" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 24" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg24" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 18.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 25" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg25" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 19.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 26" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg26" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 27" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg27" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 20.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 28" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg28" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 29" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg29" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 21.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 30" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg30" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 31" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg31" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 22.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 32" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg32" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 23.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 33" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg33" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 34" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg34" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 35" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg35" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 36" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg36" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 25.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 37" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg37" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 26.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 38" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg38" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 26.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 39" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg39" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 27.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Worg, companion 40" + }, + "RESREF": { + "type": "resref", + "value": "nw_ac_worg40" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 6.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "RESREF": { + "type": "resref", + "value": "x2_s_wraith" + }, + "STRREF": { + "type": "dword", + "value": 12822 + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 43.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Defender" + }, + "NAME": { + "type": "cexostring", + "value": "Xag-Ya" + }, + "RESREF": { + "type": "resref", + "value": "xagya2" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6692 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6687 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 46 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.5 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": " " + }, + "RESREF": { + "type": "resref", + "value": "bdd_asherati_chn" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.125 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": " " + }, + "RESREF": { + "type": "resref", + "value": "bdd_asherati_tnt" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Ashen Husk" + }, + "RESREF": { + "type": "resref", + "value": "bdd_ashen_husk" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 3.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Dustblight" + }, + "RESREF": { + "type": "resref", + "value": "bdd_dustblight" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 10.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Battlemaster" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_fght_7" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 5.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Bodyguard" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_fght_3" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 8.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Captain" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_fght_5" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 9.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Centurion" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_fght_6" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 7.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Chieftain" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_fght_4" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 17.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Chosen of Gruumsh" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_fght_12" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 14.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Emperor" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_fght_10" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 2.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Fighter" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_fght_1" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 15.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Gruumsh Hand" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_fght_11" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 13.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc King" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_fght_9" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 12.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc War Leader" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_fght_8" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 4.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Horde Orc Warrior" + }, + "RESREF": { + "type": "resref", + "value": "ow_sum_fght_2" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 24.0 + }, + "FACTION": { + "type": "cexostring", + "value": "Hostile" + }, + "NAME": { + "type": "cexostring", + "value": "Le Cirque Elemental" + }, + "RESREF": { + "type": "resref", + "value": "lecirqueelementa" + } + }, + { + "__struct_id": 0, + "CR": { + "type": "float", + "value": 0.25 + }, + "FACTION": { + "type": "cexostring", + "value": "Commoner" + }, + "NAME": { + "type": "cexostring", + "value": "Leomund's Secret Chest" + }, + "RESREF": { + "type": "resref", + "value": "xchst_cont" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6732 + } + } + ] + } +} diff --git a/src/module/itp/doorpalcus.itp.json b/src/module/itp/doorpalcus.itp.json new file mode 100644 index 0000000..fbc4446 --- /dev/null +++ b/src/module/itp/doorpalcus.itp.json @@ -0,0 +1,169 @@ +{ + "__data_type": "ITP ", + "MAIN": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 0 + }, + "STRREF": { + "type": "dword", + "value": 6688 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 1 + }, + "STRREF": { + "type": "dword", + "value": 6689 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 2 + }, + "STRREF": { + "type": "dword", + "value": 6690 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 3 + }, + "STRREF": { + "type": "dword", + "value": 6691 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 4 + }, + "STRREF": { + "type": "dword", + "value": 6692 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6687 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 5 + }, + "STRREF": { + "type": "dword", + "value": 6734 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 6 + }, + "STRREF": { + "type": "dword", + "value": 6736 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 9 + }, + "STRREF": { + "type": "dword", + "value": 201 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 7 + }, + "STRREF": { + "type": "dword", + "value": 6737 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 8 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Door" + }, + "RESREF": { + "type": "resref", + "value": "rdg_door" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Door" + }, + "RESREF": { + "type": "resref", + "value": "rdg_door001" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6738 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6735 + } + } + ] + } +} diff --git a/src/module/itp/encounterpalcus.itp.json b/src/module/itp/encounterpalcus.itp.json new file mode 100644 index 0000000..2cd3d64 --- /dev/null +++ b/src/module/itp/encounterpalcus.itp.json @@ -0,0 +1,130 @@ +{ + "__data_type": "ITP ", + "MAIN": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 8 + }, + "STRREF": { + "type": "dword", + "value": 5546 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 9 + }, + "STRREF": { + "type": "dword", + "value": 5547 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 6 + }, + "STRREF": { + "type": "dword", + "value": 4817 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 7 + }, + "STRREF": { + "type": "dword", + "value": 5545 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 0 + }, + "STRREF": { + "type": "dword", + "value": 6688 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 1 + }, + "STRREF": { + "type": "dword", + "value": 6689 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 2 + }, + "STRREF": { + "type": "dword", + "value": 6690 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 3 + }, + "STRREF": { + "type": "dword", + "value": 6691 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 4 + }, + "STRREF": { + "type": "dword", + "value": 6692 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6687 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 5 + }, + "STRREF": { + "type": "dword", + "value": 5543 + } + } + ] + } +} diff --git a/src/module/itp/itempalcus.itp.json b/src/module/itp/itempalcus.itp.json new file mode 100644 index 0000000..476610d --- /dev/null +++ b/src/module/itp/itempalcus.itp.json @@ -0,0 +1,37842 @@ +{ + "__data_type": "ITP ", + "MAIN": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 5 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Alchemist's Outfit" + }, + "RESREF": { + "type": "resref", + "value": "misca096" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dungeon Master Robes" + }, + "RESREF": { + "type": "resref", + "value": "dungeonmasterrob" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Erinyes Clothes" + }, + "RESREF": { + "type": "resref", + "value": "erinyesclothes" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "nightwing" + }, + "RESREF": { + "type": "resref", + "value": "nightwing" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "ow_light_1" + }, + "RESREF": { + "type": "resref", + "value": "ow_light_1" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Robe of Blending" + }, + "RESREF": { + "type": "resref", + "value": "miscb030" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Robe of Eyes" + }, + "RESREF": { + "type": "resref", + "value": "miscc073" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Robe of Scintillating Colors" + }, + "RESREF": { + "type": "resref", + "value": "miscb091" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Robe of Stars" + }, + "RESREF": { + "type": "resref", + "value": "miscc052" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Robe of the Archmagi" + }, + "RESREF": { + "type": "resref", + "value": "miscc060" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 186 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 8 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Baal Summon 2 Plate" + }, + "RESREF": { + "type": "resref", + "value": "baalsummon2plate" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Banded Mail" + }, + "RESREF": { + "type": "resref", + "value": "banded001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Banded Mail + 1" + }, + "RESREF": { + "type": "resref", + "value": "banded101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Banded Mail + 2" + }, + "RESREF": { + "type": "resref", + "value": "banded201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Banded Mail + 3" + }, + "RESREF": { + "type": "resref", + "value": "banded301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Banded Mail + 4" + }, + "RESREF": { + "type": "resref", + "value": "banded401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Banded Mail + 5" + }, + "RESREF": { + "type": "resref", + "value": "banded501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Banded Mail of Luck" + }, + "RESREF": { + "type": "resref", + "value": "banded601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dwarven Plate" + }, + "RESREF": { + "type": "resref", + "value": "fplate601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Full Plate" + }, + "RESREF": { + "type": "resref", + "value": "fplate001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Full Plate +1" + }, + "RESREF": { + "type": "resref", + "value": "fplate101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Full Plate +2" + }, + "RESREF": { + "type": "resref", + "value": "fplate201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Full Plate +3" + }, + "RESREF": { + "type": "resref", + "value": "fplate301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Full Plate +4" + }, + "RESREF": { + "type": "resref", + "value": "fplate401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Full Plate +5" + }, + "RESREF": { + "type": "resref", + "value": "fplate501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Half Plate" + }, + "RESREF": { + "type": "resref", + "value": "hplate001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Half Plate +1" + }, + "RESREF": { + "type": "resref", + "value": "hplate101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Half Plate +2" + }, + "RESREF": { + "type": "resref", + "value": "hplate201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Half Plate +3" + }, + "RESREF": { + "type": "resref", + "value": "hplate301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Half Plate +4" + }, + "RESREF": { + "type": "resref", + "value": "hplate401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Half Plate +5" + }, + "RESREF": { + "type": "resref", + "value": "hplate501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Orc Splint Mail" + }, + "RESREF": { + "type": "resref", + "value": "rdg_orc_armor" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Plate Armor of the Deep" + }, + "RESREF": { + "type": "resref", + "value": "fplate602" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Splint Mail" + }, + "RESREF": { + "type": "resref", + "value": "splint001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Splint Mail +1" + }, + "RESREF": { + "type": "resref", + "value": "splint101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Splint Mail +2" + }, + "RESREF": { + "type": "resref", + "value": "splint201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Splint Mail +3" + }, + "RESREF": { + "type": "resref", + "value": "splint301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Splint Mail +4" + }, + "RESREF": { + "type": "resref", + "value": "splint401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Splint Mail +5" + }, + "RESREF": { + "type": "resref", + "value": "splint501" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 4818 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 9 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Baal Summon 2 Head" + }, + "RESREF": { + "type": "resref", + "value": "baalsummon2head" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Circlet of Blasting" + }, + "RESREF": { + "type": "resref", + "value": "misca094" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Circlet of Blasting (Major)" + }, + "RESREF": { + "type": "resref", + "value": "miscb079" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crown of Might" + }, + "RESREF": { + "type": "resref", + "value": "prc_crown_might" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crown of Protection" + }, + "RESREF": { + "type": "resref", + "value": "prc_crown_prot" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eyes of Charming" + }, + "RESREF": { + "type": "resref", + "value": "miscc051" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eyes of Doom" + }, + "RESREF": { + "type": "resref", + "value": "miscb082" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eyes of Petrification" + }, + "RESREF": { + "type": "resref", + "value": "miscc076" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eyes of the Eagle" + }, + "RESREF": { + "type": "resref", + "value": "misca017" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Helm of Brilliance" + }, + "RESREF": { + "type": "resref", + "value": "miscc097" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Helm of Comprehension" + }, + "RESREF": { + "type": "resref", + "value": "misca051" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Helm of Detection" + }, + "RESREF": { + "type": "resref", + "value": "misca058" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Helm of Disguise" + }, + "RESREF": { + "type": "resref", + "value": "misca037" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Helm of Intellect +2" + }, + "RESREF": { + "type": "resref", + "value": "misca071" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Helm of Intellect +4" + }, + "RESREF": { + "type": "resref", + "value": "miscb063" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Helm of Intellect +6" + }, + "RESREF": { + "type": "resref", + "value": "miscc018" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Helm of Minute Seeing" + }, + "RESREF": { + "type": "resref", + "value": "misca018" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Helm of Night" + }, + "RESREF": { + "type": "resref", + "value": "miscb014" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Helm of Persuasion" + }, + "RESREF": { + "type": "resref", + "value": "misca075" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Helm of Telepathy" + }, + "RESREF": { + "type": "resref", + "value": "miscc008" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Helm of Teleportation" + }, + "RESREF": { + "type": "resref", + "value": "miscc033" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Helmet of Kwalish" + }, + "RESREF": { + "type": "resref", + "value": "miscc087" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Helmet of Water Breathing" + }, + "RESREF": { + "type": "resref", + "value": "miscb081" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mask of the Skull" + }, + "RESREF": { + "type": "resref", + "value": "miscb085" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "nightwing" + }, + "RESREF": { + "type": "resref", + "value": "nightwing001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wyrmbane Helm" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_wyrmbane" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6739 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 6 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "BaalSummonPlate" + }, + "RESREF": { + "type": "resref", + "value": "baalsummonplate" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chain Shirt" + }, + "RESREF": { + "type": "resref", + "value": "chains001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chain Shirt +1" + }, + "RESREF": { + "type": "resref", + "value": "chains101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chain Shirt +2" + }, + "RESREF": { + "type": "resref", + "value": "chains201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chain Shirt +3" + }, + "RESREF": { + "type": "resref", + "value": "chains301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chain Shirt +4" + }, + "RESREF": { + "type": "resref", + "value": "chains401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chain Shirt +5" + }, + "RESREF": { + "type": "resref", + "value": "chains501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Druids Vestiment" + }, + "RESREF": { + "type": "resref", + "value": "misca088" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Infiltrator" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_infil" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Leather Armor" + }, + "RESREF": { + "type": "resref", + "value": "leather001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Leather Armor +1" + }, + "RESREF": { + "type": "resref", + "value": "leather101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Leather Armor +2" + }, + "RESREF": { + "type": "resref", + "value": "leather201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Leather Armor +3" + }, + "RESREF": { + "type": "resref", + "value": "leather301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Leather Armor +4" + }, + "RESREF": { + "type": "resref", + "value": "leather401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Leather Armor +5" + }, + "RESREF": { + "type": "resref", + "value": "leather501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mithral Shirt" + }, + "RESREF": { + "type": "resref", + "value": "chains601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Padded Armor" + }, + "RESREF": { + "type": "resref", + "value": "padded001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Padded Armor +1" + }, + "RESREF": { + "type": "resref", + "value": "padded101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Padded Armor +2" + }, + "RESREF": { + "type": "resref", + "value": "padded201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Padded Armor +3" + }, + "RESREF": { + "type": "resref", + "value": "padded301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Padded Armor +4" + }, + "RESREF": { + "type": "resref", + "value": "padded401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Padded Armor +5" + }, + "RESREF": { + "type": "resref", + "value": "padded501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Studded Leather Armor" + }, + "RESREF": { + "type": "resref", + "value": "sleather001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Studded Leather Armor +1" + }, + "RESREF": { + "type": "resref", + "value": "sleather101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Studded Leather Armor +2" + }, + "RESREF": { + "type": "resref", + "value": "sleather201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Studded Leather Armor +3" + }, + "RESREF": { + "type": "resref", + "value": "sleather301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Studded Leather Armor +4" + }, + "RESREF": { + "type": "resref", + "value": "sleather401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Studded Leather Armor +5" + }, + "RESREF": { + "type": "resref", + "value": "sleather501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Vest of Escape" + }, + "RESREF": { + "type": "resref", + "value": "misca042" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 4815 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 7 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Adamantine Breastplate" + }, + "RESREF": { + "type": "resref", + "value": "breast601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Breastplate" + }, + "RESREF": { + "type": "resref", + "value": "breast001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Breastplate +1" + }, + "RESREF": { + "type": "resref", + "value": "breast101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Breastplate +2" + }, + "RESREF": { + "type": "resref", + "value": "breast201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Breastplate +3" + }, + "RESREF": { + "type": "resref", + "value": "breast301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Breastplate +4" + }, + "RESREF": { + "type": "resref", + "value": "breast401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Breastplate +5" + }, + "RESREF": { + "type": "resref", + "value": "breast501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Breastplate of Command" + }, + "RESREF": { + "type": "resref", + "value": "breast602" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chainmail" + }, + "RESREF": { + "type": "resref", + "value": "chain001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chainmail +1" + }, + "RESREF": { + "type": "resref", + "value": "chain101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chainmail +2" + }, + "RESREF": { + "type": "resref", + "value": "chain201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chainmail +3" + }, + "RESREF": { + "type": "resref", + "value": "chain301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chainmail +4" + }, + "RESREF": { + "type": "resref", + "value": "chain401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chainmail +5" + }, + "RESREF": { + "type": "resref", + "value": "chain501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Elven Chainmail" + }, + "RESREF": { + "type": "resref", + "value": "chain601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hide Armor" + }, + "RESREF": { + "type": "resref", + "value": "hide001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hide Armor +1" + }, + "RESREF": { + "type": "resref", + "value": "hide101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hide Armor +2" + }, + "RESREF": { + "type": "resref", + "value": "hide201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hide Armor +3" + }, + "RESREF": { + "type": "resref", + "value": "hide301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hide Armor +4" + }, + "RESREF": { + "type": "resref", + "value": "hide401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hide Armor +5" + }, + "RESREF": { + "type": "resref", + "value": "hide501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rhino Hide Armor" + }, + "RESREF": { + "type": "resref", + "value": "hide601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scale Mail" + }, + "RESREF": { + "type": "resref", + "value": "scale001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scale Mail +1" + }, + "RESREF": { + "type": "resref", + "value": "scale101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scale Mail +2" + }, + "RESREF": { + "type": "resref", + "value": "scale201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scale Mail +3" + }, + "RESREF": { + "type": "resref", + "value": "scale301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scale Mail +4" + }, + "RESREF": { + "type": "resref", + "value": "scale401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scale Mail +5" + }, + "RESREF": { + "type": "resref", + "value": "scale501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wargird's Armor" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_wargirds" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6669 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 58 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Deva Robe" + }, + "RESREF": { + "type": "resref", + "value": "devarobe" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Unarmed Spiritual Weapon \"Fists\"" + }, + "RESREF": { + "type": "resref", + "value": "prc_sprtwp_armor" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6813 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 11 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Adamanite Shield" + }, + "RESREF": { + "type": "resref", + "value": "lshield602" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Large Shield" + }, + "RESREF": { + "type": "resref", + "value": "lshield001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Large Shield +1" + }, + "RESREF": { + "type": "resref", + "value": "lshield101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Large Shield +2" + }, + "RESREF": { + "type": "resref", + "value": "lshield201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Large Shield +3" + }, + "RESREF": { + "type": "resref", + "value": "lshield301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Large Shield +4" + }, + "RESREF": { + "type": "resref", + "value": "lshield401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Large Shield +5" + }, + "RESREF": { + "type": "resref", + "value": "lshield501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lion's Shield" + }, + "RESREF": { + "type": "resref", + "value": "lshield604" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mithral Large Shield" + }, + "RESREF": { + "type": "resref", + "value": "lshield601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quickspur's Ally" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_quickspr" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shield of Absorption" + }, + "RESREF": { + "type": "resref", + "value": "lshield606" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spined Shield" + }, + "RESREF": { + "type": "resref", + "value": "lshield603" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Winged Shield" + }, + "RESREF": { + "type": "resref", + "value": "lshield605" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6822 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 10 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Caster's Shield" + }, + "RESREF": { + "type": "resref", + "value": "sshield602" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dark Wood Shield" + }, + "RESREF": { + "type": "resref", + "value": "sshield601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Small Shield" + }, + "RESREF": { + "type": "resref", + "value": "sshield001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Small Shield +1" + }, + "RESREF": { + "type": "resref", + "value": "sshield101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Small Shield +2" + }, + "RESREF": { + "type": "resref", + "value": "sshield201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Small Shield +3" + }, + "RESREF": { + "type": "resref", + "value": "sshield301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Small Shield +4" + }, + "RESREF": { + "type": "resref", + "value": "sshield401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Small Shield +5" + }, + "RESREF": { + "type": "resref", + "value": "sshield501" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6741 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 12 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tower Shield" + }, + "RESREF": { + "type": "resref", + "value": "tshield001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tower Shield +1" + }, + "RESREF": { + "type": "resref", + "value": "tshield101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tower Shield +2" + }, + "RESREF": { + "type": "resref", + "value": "tshield201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tower Shield +3" + }, + "RESREF": { + "type": "resref", + "value": "tshield301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tower Shield +4" + }, + "RESREF": { + "type": "resref", + "value": "tshield401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tower Shield +5" + }, + "RESREF": { + "type": "resref", + "value": "tshield501" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6742 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6740 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 335 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 55 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Aranea Bite (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ara_bite_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Aranea Bite (diminuative)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ara_bite_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Aranea Bite (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ara_bite_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Aranea Bite (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ara_bite_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Aranea Bite (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ara_bite_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Aranea Bite (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ara_bite_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Aranea Bite (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ara_bite_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Aranea Bite (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ara_bite_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Aranea Bite (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ara_bite_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw0_bite_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw0_bite_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw0_bite_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw0_bite_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw0_bite_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw0_bite_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw0_bite_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw0_bite_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw0_bite_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 10th level (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw2_bite_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 10th level (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw2_bite_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 10th level (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw2_bite_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 10th level (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw2_bite_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 10th level (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw2_bite_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 10th level (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw2_bite_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 10th level (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw2_bite_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 10th level (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw2_bite_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 10th level (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw2_bite_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 15th level (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw3_bite_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 15th level (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw3_bite_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 15th level (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw3_bite_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 15th level (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw3_bite_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 15th level (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw3_bite_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 15th level (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw3_bite_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 15th level (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw3_bite_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 15th level (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw3_bite_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 15th level (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw3_bite_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 20th level (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw4_bite_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 20th level (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw4_bite_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 20th level (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw4_bite_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 20th level (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw4_bite_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 20th level (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw4_bite_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 20th level (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw4_bite_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 20th level (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw4_bite_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 20th level (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw4_bite_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 20th level (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw4_bite_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 5th level (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw1_bite_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 5th level (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw1_bite_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 5th level (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw1_bite_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 5th level (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw1_bite_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 5th level (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw1_bite_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 5th level (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw1_bite_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 5th level (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw1_bite_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 5th level (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw1_bite_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bite of the Wolf 5th level (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_bw1_bite_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bombardier/Stink Beetle Bite" + }, + "RESREF": { + "type": "resref", + "value": "stinkb_c_bite_01" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bombardier/Stink Beetle Bite" + }, + "RESREF": { + "type": "resref", + "value": "stinkb_c_bite_05" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bombardier/Stink Beetle Bite" + }, + "RESREF": { + "type": "resref", + "value": "stinkb_c_bite_10" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bombardier/Stink Beetle Bite" + }, + "RESREF": { + "type": "resref", + "value": "stinkb_c_bite_15" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bombardier/Stink Beetle Bite" + }, + "RESREF": { + "type": "resref", + "value": "stinkb_c_bite_20" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bombardier/Stink Beetle Bite" + }, + "RESREF": { + "type": "resref", + "value": "stinkb_c_bite_25" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bombardier/Stink Beetle Bite" + }, + "RESREF": { + "type": "resref", + "value": "stinkb_c_bite_30" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bombardier/Stink Beetle Bite" + }, + "RESREF": { + "type": "resref", + "value": "stinkb_c_bite_35" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cobra's bite, level 20" + }, + "RESREF": { + "type": "resref", + "value": "cobra_c_bite_20" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cobra's bite, level 25" + }, + "RESREF": { + "type": "resref", + "value": "cobra_c_bite_25" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cobra's bite, level 30" + }, + "RESREF": { + "type": "resref", + "value": "cobra_c_bite_30" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cobra's bite, level 35" + }, + "RESREF": { + "type": "resref", + "value": "cobra_c_bite_35" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cobra's bite, level 40" + }, + "RESREF": { + "type": "resref", + "value": "cobra_c_bite_40" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dire Rat Bite" + }, + "RESREF": { + "type": "resref", + "value": "cr_bite_direrat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Bite (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_bite_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Bite (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_bite_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Bite (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_bite_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Bite (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_bite_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Bite (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_bite_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Bite (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_bite_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Bite (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_bite_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Bite (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_bite_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Bite (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_bite_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Drider Bite (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_drid_bite_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Drider Bite (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_drid_bite_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Drider Bite (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_drid_bite_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Drider Bite (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_drid_bite_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Drider Bite (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_drid_bite_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Drider Bite (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_drid_bite_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dustblight Claw" + }, + "RESREF": { + "type": "resref", + "value": "bdd_dustbl_claw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Giant Spider Companion Bite Level 15" + }, + "RESREF": { + "type": "resref", + "value": "phase_c_15" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Giant Spider Companion Bite Level 20" + }, + "RESREF": { + "type": "resref", + "value": "phase_c_20" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Giant Spider Companion Bite Level 25" + }, + "RESREF": { + "type": "resref", + "value": "phase_c_25" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Giant Spider Companion Bite Level 30" + }, + "RESREF": { + "type": "resref", + "value": "phase_c_30" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Giant Spider Companion Bite Level 35" + }, + "RESREF": { + "type": "resref", + "value": "phase_c_35" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Giant Spider Companion Bite Level 40" + }, + "RESREF": { + "type": "resref", + "value": "phase_c_40" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Wraith Bite lv 21" + }, + "RESREF": { + "type": "resref", + "value": "greaterwraithbit" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Wraith Bite lv 24" + }, + "RESREF": { + "type": "resref", + "value": "greaterwraith001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Wraith Bite lv 27" + }, + "RESREF": { + "type": "resref", + "value": "greaterwraith002" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Wraith Bite lv 30" + }, + "RESREF": { + "type": "resref", + "value": "greaterwraith003" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Wraith Bite lv 33" + }, + "RESREF": { + "type": "resref", + "value": "greaterwraith004" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Wraith Bite lv 36" + }, + "RESREF": { + "type": "resref", + "value": "greaterwraith005" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Wraith Bite lv 39" + }, + "RESREF": { + "type": "resref", + "value": "greaterwraith006" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hell Hound Familiar Bite" + }, + "RESREF": { + "type": "resref", + "value": "wwolf_f_bite_01" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hell Hound Familiar Bite" + }, + "RESREF": { + "type": "resref", + "value": "wwolf_f_bite_05" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hell Hound Familiar Bite" + }, + "RESREF": { + "type": "resref", + "value": "wwolf_f_bite_10" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hell Hound Familiar Bite" + }, + "RESREF": { + "type": "resref", + "value": "wwolf_f_bite_15" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hell Hound Familiar Bite" + }, + "RESREF": { + "type": "resref", + "value": "wwolf_f_bite_20" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hell Hound Familiar Bite" + }, + "RESREF": { + "type": "resref", + "value": "wwolf_f_bite_25" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hell Hound Familiar Bite" + }, + "RESREF": { + "type": "resref", + "value": "wwolf_f_bite_30" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hell Hound Familiar Bite" + }, + "RESREF": { + "type": "resref", + "value": "wwolf_f_bite_35" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hell Hound Familiar Bite" + }, + "RESREF": { + "type": "resref", + "value": "wwolf_f_bite_40" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "hellcat_bite" + }, + "RESREF": { + "type": "resref", + "value": "hellcat_bite" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound Archon Bite(Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_hdarc_bite_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound Archon Bite(Diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_hdarc_bite_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound Archon Bite(Fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_hdarc_bite_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound Archon Bite(Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_hdarc_bite_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound Archon Bite(Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_hdarc_bite_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound Archon Bite(Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_hdarc_bite_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound Archon Bite(Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_hdarc_bite_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound Archon Bite(Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_hdarc_bite_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound Archon Bite(Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_hdarc_bite_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lizardman Bite (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lizf_bite_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lizardman Bite (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lizf_bite_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lizardman Bite (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lizf_bite_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lizardman Bite (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lizf_bite_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lizardman Bite (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lizf_bite_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lizardman Bite (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lizf_bite_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lizardman Bite (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lizf_bite_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lizardman Bite (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lizf_bite_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lizardman Bite (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lizf_bite_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longtooth Shifter Elite Bite(Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lngth_elt_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longtooth Shifter Elite Bite(Fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lngth_elt_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longtooth Shifter Elite Bite(Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lngth_elt_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longtooth Shifter Elite Bite(Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lngth_elt_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longtooth Shifter Elite Bite(Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lngth_elt_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longtooth Shifter Elite Bite(Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lngth_el_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longtooth Shifter Elite Bite(Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lngth_elt_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longtooth Shifter Elite Bite(Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_lngth_elt_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Medium Viper Bite" + }, + "RESREF": { + "type": "resref", + "value": "cr_bite_viper001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Medium Viper Bite (Improved)" + }, + "RESREF": { + "type": "resref", + "value": "cr_bite_viper002" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Morsure de quasit niveau 15" + }, + "RESREF": { + "type": "resref", + "value": "quasit_m_15" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Morsure de quasit niveau 20" + }, + "RESREF": { + "type": "resref", + "value": "quasit_m_20" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Morsure de quasit niveau 25" + }, + "RESREF": { + "type": "resref", + "value": "quasit_m_25" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Morsure de quasit niveau 30" + }, + "RESREF": { + "type": "resref", + "value": "quasit_m_30" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Morsure de quasit niveau 35" + }, + "RESREF": { + "type": "resref", + "value": "quasit_m_35" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Morsure de quasit niveau 40" + }, + "RESREF": { + "type": "resref", + "value": "quasit_m_40" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "nightwing" + }, + "RESREF": { + "type": "resref", + "value": "prc_nightwing" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rakshasa Bite (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_raks_bite_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rakshasa Bite (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_raks_bite_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rakshasa Bite (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_raks_bite_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rakshasa Bite (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_raks_bite_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rakshasa Bite (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_raks_bite_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rakshasa Bite (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_raks_bite_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rakshasa Bite (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_raks_bite_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rakshasa Bite (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_raks_bite_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rakshasa Bite (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_raks_bite_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tanarukk Bite (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_tana_bite_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tanarukk Bite (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_tana_bite_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tanarukk Bite (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_tana_bite_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tanarukk Bite (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_tana_bite_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tanarukk Bite (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_tana_bite_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tanarukk Bite (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_tana_bite_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tanarukk Bite (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_tana_bite_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tanarukk Bite (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_tana_bite_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tanarukk Bite (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_tana_bite_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Troll Bite (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_troll_bite_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Troll Bite (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_troll_bite_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Troll Bite (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_troll_bite_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Troll Bite (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_troll_bite_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Troll Bite (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_troll_bite_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Troll Bite (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_troll_bite_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Troll Bite (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_troll_bite_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Troll Bite (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_troll_bite_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Troll Bite (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_troll_bite_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Useless Bite" + }, + "RESREF": { + "type": "resref", + "value": "prc_nodmgbite" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Viletooth Lizardfolk Bite (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_vtth_bite_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Viletooth Lizardfolk Bite (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_vtth_bite_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Viletooth Lizardfolk Bite (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_vtth_bite_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Viletooth Lizardfolk Bite (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_vtth_bite_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Viletooth Lizardfolk Bite (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_vtth_bite_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Viletooth Lizardfolk Bite (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_vtth_bite_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Viletooth Lizardfolk Bite (Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_vtth_bite_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Werewolf Bite" + }, + "RESREF": { + "type": "resref", + "value": "werewolfbite" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Werewolf Lycanthrope Bite" + }, + "RESREF": { + "type": "resref", + "value": "werewolfbitel" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6810 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 13 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 10d6 (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_6d6m_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d2 (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6l_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d2 (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6m_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d2 (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6l_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d2 (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6m_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d2 (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d8m_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d2 (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6l_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d3 (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d8m_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d3 (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_2d6m_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d3 (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6l_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d3 (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6m_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d4 (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_2d6m_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d4 (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_3d6m_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d4 (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6l_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d4 (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6m_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d4 (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d8m_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d6 (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_3d6m_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d6 (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_4d6m_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d6 (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6l_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d6 (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6m_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d6 (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d8m_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d6 (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_2d6m_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d8 (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_4d6m_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d8 (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_5d6m_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d8 (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6l_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d8 (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6m_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d8 (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d8m_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d8 (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_2d6m_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 1d8 (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_3d6m_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 2d6 (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_5d6m_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 2d6 (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_6d6m_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 2d6 (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6l_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 2d6 (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6m_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 2d6 (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d8m_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 2d6 (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_2d6m_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 2d6 (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_3d6m_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 2d6 (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_4d6m_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 3d6 (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6l_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 3d6 (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_6d6m_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 3d6 (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6m_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 3d6 (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d8m_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 3d6 (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_2d6m_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 3d6 (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_3d6m_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 3d6 (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_4d6m_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 3d6 (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_5d6m_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 4d6 (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d6m_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 4d6 (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d8m_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 4d6 (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_2d6m_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 4d6 (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_3d6m_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 4d6 (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_4d6m_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 4d6 (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_5d6m_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 4d6 (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_6d6m_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 5d6 (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_1d8m_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 5d6 (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_2d6m_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 5d6 (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_3d6m_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 5d6 (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_4d6m_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 5d6 (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_5d6m_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 5d6 (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_6d6m_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 6d6 (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_2d6m_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 6d6 (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_3d6m_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 6d6 (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_4d6m_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 6d6 (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_5d6m_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 6d6 (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_6d6m_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 7d6 (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_3d6m_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 7d6 (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_4d6m_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 7d6 (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_5d6m_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 7d6 (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_6d6m_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 8d6 (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_4d6m_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 8d6 (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_5d6m_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 8d6 (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_6d6m_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 9d6 (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_5d6m_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claw 9d6 (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_claw_6d6m_g" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "tob_dw_embrclaw" + }, + "STRREF": { + "type": "dword", + "value": 13284 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cornugon Claw" + }, + "RESREF": { + "type": "resref", + "value": "prc_corn_claw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_0_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_1_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_2_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_3_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_4_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_5_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_0_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_1_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_2_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_3_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_4_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_5_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_0_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_1_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_2_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_3_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_4_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_5_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_0_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_1_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_2_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_3_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_4_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_5_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_0_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_1_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_2_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_3_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_4_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_5_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_0_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_1_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_2_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_3_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_4_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_5_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_0_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_1_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_2_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_3_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_4_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Claw (Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diaclaw_5_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Draconic Devotee Claw (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_devclaw_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Draconic Devotee Claw (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_devclaw_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Draconic Devotee Claw (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_devclaw_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Draconic Devotee Claw (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_devclaw_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Draconic Devotee Claw (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_devclaw_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Draconic Devotee Claw (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_devclaw_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Draconic Devotee Claw (Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_devclaw_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gelugon Claw" + }, + "RESREF": { + "type": "resref", + "value": "prc_gel_claw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Griffes de quasit niveau 15" + }, + "RESREF": { + "type": "resref", + "value": "quasit_15" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Griffes de quasit niveau 20" + }, + "RESREF": { + "type": "resref", + "value": "quasit_20" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Griffes de quasit niveau 25" + }, + "RESREF": { + "type": "resref", + "value": "quasit_25" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Griffes de quasit niveau 30" + }, + "RESREF": { + "type": "resref", + "value": "quasit_30" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Griffes de quasit niveau 35" + }, + "RESREF": { + "type": "resref", + "value": "quasit_35" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Griffes de quasit niveau 40" + }, + "RESREF": { + "type": "resref", + "value": "quasit_40" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hamatula Claw" + }, + "RESREF": { + "type": "resref", + "value": "prc_ham_claw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Osyluth Claw" + }, + "RESREF": { + "type": "resref", + "value": "prc_osy_claw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "pnp_shft_cweap" + }, + "RESREF": { + "type": "resref", + "value": "pnp_shft_cweap" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "PRC construct Demoflesh claw" + }, + "RESREF": { + "type": "resref", + "value": "prc_cns_dem_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shadow Elemental Elder" + }, + "RESREF": { + "type": "resref", + "value": "shadowelement001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shadow Elemental Huge" + }, + "RESREF": { + "type": "resref", + "value": "shadowelementalh" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shadow Elemental Medium" + }, + "RESREF": { + "type": "resref", + "value": "shd_shdelem_med" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Twig Blight Claw" + }, + "RESREF": { + "type": "resref", + "value": "wol_twigblightcl" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Werewolf Claw" + }, + "RESREF": { + "type": "resref", + "value": "werewolfclaw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Werewolf Lycanthrope Claw" + }, + "RESREF": { + "type": "resref", + "value": "werewolfclawl" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6744 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 63 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gorebrute Horns(Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_shftr_gore_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gorebrute Horns(Diminuitive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_shftr_gore_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gorebrute Horns(Fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_shftr_gore_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gorebrute Horns(Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_shftr_gore_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gorebrute Horns(Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_shftr_gore_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gorebrute Horns(Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_shftr_gore_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gorebrute Horns(Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_shftr_gore_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gorebrute Horns(Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_shftr_gore_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gorebrute Horns(Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_shftr_gore_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Nightshade Bite" + }, + "RESREF": { + "type": "resref", + "value": "grtrnsbite" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ivory Ox Horn 1" + }, + "RESREF": { + "type": "resref", + "value": "ivoryoxhorn1" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ivory Ox Horn 2" + }, + "RESREF": { + "type": "resref", + "value": "ivoryoxhorn2" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lesser Nightshade Bite" + }, + "RESREF": { + "type": "resref", + "value": "lessernightshade" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Minotaur Gore (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_mino_gore_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Minotaur Gore (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_mino_gore_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Minotaur Gore (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_mino_gore_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Minotaur Gore (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_mino_gore_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Minotaur Gore (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_mino_gore_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Minotaur Gore (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_mino_gore_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Minotaur Gore (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_mino_gore_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Minotaur Gore (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_mino_gore_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Minotaur Gore (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_mino_gore_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Minotaur Powerful Charge" + }, + "RESREF": { + "type": "resref", + "value": "prc_mino_char" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Nightshade Bite" + }, + "RESREF": { + "type": "resref", + "value": "lessernightsh002" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6831 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 59 + }, + "STRREF": { + "type": "dword", + "value": 6814 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 14 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "" + }, + "RESREF": { + "type": "resref", + "value": "pc_skin" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Algoid Hide" + }, + "RESREF": { + "type": "resref", + "value": "prc_hide_algoid" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "anim_armour_0" + }, + "RESREF": { + "type": "resref", + "value": "anim_armour_0" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "anim_armour_1_4" + }, + "RESREF": { + "type": "resref", + "value": "anim_armour_1_4" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "anim_armour_5_8" + }, + "RESREF": { + "type": "resref", + "value": "anim_armour_5_8" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "anim_weapon_large" + }, + "RESREF": { + "type": "resref", + "value": "anim_weapon_larg" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "anim_weapon_small" + }, + "RESREF": { + "type": "resref", + "value": "anim_weapon_smal" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "AnimObject Properties" + }, + "RESREF": { + "type": "resref", + "value": "prc_shd_animcon" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ashen Husk Hide" + }, + "RESREF": { + "type": "resref", + "value": "bdd_ashen_hide" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Asherati Taint Changed" + }, + "RESREF": { + "type": "resref", + "value": "bdd_asherati_skn" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "base_prc_skin" + }, + "RESREF": { + "type": "resref", + "value": "base_prc_skin" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bat FM HD 1 Properties" + }, + "RESREF": { + "type": "resref", + "value": "bat_c_hide_01" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bat FM HD 1 Properties" + }, + "RESREF": { + "type": "resref", + "value": "polarb_c_hide01" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bat FM HD 1 Properties" + }, + "RESREF": { + "type": "resref", + "value": "polarb_c_hide05" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bat FM HD 1 Properties" + }, + "RESREF": { + "type": "resref", + "value": "polarb_c_hide10" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bat FM HD 1 Properties" + }, + "RESREF": { + "type": "resref", + "value": "polarb_c_hide15" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bat FM HD 1 Properties" + }, + "RESREF": { + "type": "resref", + "value": "polarb_c_hide20" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bat FM HD 1 Properties" + }, + "RESREF": { + "type": "resref", + "value": "polarb_c_hide25" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bat FM HD 1 Properties" + }, + "RESREF": { + "type": "resref", + "value": "polarb_c_hide30" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bat FM HD 1 Properties" + }, + "RESREF": { + "type": "resref", + "value": "polarb_c_hide35" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "bat_c_hide_20" + }, + "STRREF": { + "type": "dword", + "value": 13121 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bat FM HD 25 Properties" + }, + "RESREF": { + "type": "resref", + "value": "bat_c_hide_25" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bat FM HD 30 Properties" + }, + "RESREF": { + "type": "resref", + "value": "bat_c_hide_30" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "bat_c_hide_05" + }, + "STRREF": { + "type": "dword", + "value": 13118 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bronze Gargoyle Skin" + }, + "RESREF": { + "type": "resref", + "value": "bronzegargoyle" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cornugon Hide" + }, + "RESREF": { + "type": "resref", + "value": "prc_corn_hide" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Deva Hide" + }, + "RESREF": { + "type": "resref", + "value": "devahide" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Earth Elemental Properties" + }, + "RESREF": { + "type": "resref", + "value": "prc_agares_elem" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "tob_dw_embrhide" + }, + "STRREF": { + "type": "dword", + "value": 13193 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gelugon Hide" + }, + "RESREF": { + "type": "resref", + "value": "prc_gel_hide" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Glabrezu Properties" + }, + "RESREF": { + "type": "resref", + "value": "glabrezuproperti" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Glabrezu Skin" + }, + "RESREF": { + "type": "resref", + "value": "prc_glab_hide" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Nightshade Hide" + }, + "RESREF": { + "type": "resref", + "value": "grtrnightshadhid" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Wraith Hide lv 21" + }, + "RESREF": { + "type": "resref", + "value": "greaterwraithhid" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Wraith Hide lv 24" + }, + "RESREF": { + "type": "resref", + "value": "greaterwraith007" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Wraith Hide lv 27" + }, + "RESREF": { + "type": "resref", + "value": "greaterwraith008" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Wraith Hide lv 30" + }, + "RESREF": { + "type": "resref", + "value": "greaterwraith009" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Wraith Hide lv 33" + }, + "RESREF": { + "type": "resref", + "value": "greaterwraith010" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Wraith Hide lv 36" + }, + "RESREF": { + "type": "resref", + "value": "greaterwraith011" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Wraith Hide lv 39" + }, + "RESREF": { + "type": "resref", + "value": "greaterwraith012" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hamatula Hide" + }, + "RESREF": { + "type": "resref", + "value": "prc_ham_hide" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "hellcat_hide" + }, + "RESREF": { + "type": "resref", + "value": "hellcat_hide" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ivory Ox Skin" + }, + "RESREF": { + "type": "resref", + "value": "ivoryoxskin" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lesser Nightshade Hide" + }, + "RESREF": { + "type": "resref", + "value": "lessernightsh001" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "creitemlic002" + }, + "STRREF": { + "type": "dword", + "value": 12937 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Marilith Properties" + }, + "RESREF": { + "type": "resref", + "value": "marilithproperti" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "wo_mummy_prop" + }, + "STRREF": { + "type": "dword", + "value": 12938 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Myconid Hide" + }, + "RESREF": { + "type": "resref", + "value": "prc_hide_myconid" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Nightshade Hide" + }, + "RESREF": { + "type": "resref", + "value": "nightshadehide" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Nightwing Properties" + }, + "RESREF": { + "type": "resref", + "value": "prc_to_nighthide" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Obsidian Ox Skin" + }, + "RESREF": { + "type": "resref", + "value": "obsidianoxskin" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Onyx Dog Skin" + }, + "RESREF": { + "type": "resref", + "value": "onyxdogskin" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Osyluth Hide" + }, + "RESREF": { + "type": "resref", + "value": "prc_osy_hide" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Particularités des méphites à 10 DV" + }, + "RESREF": { + "type": "resref", + "value": "meph_10dv" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Particularités des méphites à 15 DV" + }, + "RESREF": { + "type": "resref", + "value": "meph_15dv" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Particularités des méphites à 20 DV" + }, + "RESREF": { + "type": "resref", + "value": "meph_20dv" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Particularités des méphites à 25 DV" + }, + "RESREF": { + "type": "resref", + "value": "meph_25dv" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Particularités des méphites à 30 DV" + }, + "RESREF": { + "type": "resref", + "value": "meph_30dv" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Particularités des méphites à 5 DV" + }, + "RESREF": { + "type": "resref", + "value": "meph_5dv" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Particularités des méphitesà 1 DV" + }, + "RESREF": { + "type": "resref", + "value": "meph_1dv" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "PC Skin" + }, + "RESREF": { + "type": "resref", + "value": "pcskin" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "PRC Construct Adamantium" + }, + "RESREF": { + "type": "resref", + "value": "prc_cns_ada_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "PRC Construct Clay" + }, + "RESREF": { + "type": "resref", + "value": "prc_cns_cly_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "PRC Construct Demonflesh hide" + }, + "RESREF": { + "type": "resref", + "value": "prc_cns_dem_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "PRC Construct Flesh" + }, + "RESREF": { + "type": "resref", + "value": "prc_cns_fle_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "PRC Construct Iron" + }, + "RESREF": { + "type": "resref", + "value": "prc_cns_irn_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "PRC Construct Mithril" + }, + "RESREF": { + "type": "resref", + "value": "prc_cns_mit_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "PRC Construct Stone" + }, + "RESREF": { + "type": "resref", + "value": "prc_cns_stn_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Dire Badger Hide" + }, + "RESREF": { + "type": "resref", + "value": "pseudonaturaldir" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Dire Bear Hide" + }, + "RESREF": { + "type": "resref", + "value": "pseudonatural002" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Dire Spider Hide" + }, + "RESREF": { + "type": "resref", + "value": "pseudodirespider" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Dire Tiger Hide" + }, + "RESREF": { + "type": "resref", + "value": "pseudonaturaltig" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Dire Wolf Hide" + }, + "RESREF": { + "type": "resref", + "value": "pseudonatural001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Elder Elemental Hide" + }, + "RESREF": { + "type": "resref", + "value": "pseudonaturalel" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Elder Fire Elemental Properties" + }, + "RESREF": { + "type": "resref", + "value": "pseudonaturalfi" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Elder Water Elemental Properties" + }, + "RESREF": { + "type": "resref", + "value": "pseudonaturalwa" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Huge/Greater Elemental Properties" + }, + "RESREF": { + "type": "resref", + "value": "pseudonaturalhu" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Huge/Greater Fire Elemental Properties" + }, + "RESREF": { + "type": "resref", + "value": "pseudonaturalfir" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pseudonatural Huge/Greater Water Elemental Properties" + }, + "RESREF": { + "type": "resref", + "value": "pseudonaturalwat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pseuodnatural Dire Boar Hide" + }, + "RESREF": { + "type": "resref", + "value": "pseuodnaturaldir" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Psuedonatural Huge/Greater Elemental Properties" + }, + "RESREF": { + "type": "resref", + "value": "pseudonaturalhug" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shambling Mound Hide" + }, + "RESREF": { + "type": "resref", + "value": "prc_hide_shambmd" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Silver Raven Skin" + }, + "RESREF": { + "type": "resref", + "value": "silverravenskin" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_skelhide" + }, + "STRREF": { + "type": "dword", + "value": 13204 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Skeleton Properties" + }, + "RESREF": { + "type": "resref", + "value": "wo_skel_prop" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Soulspark" + }, + "RESREF": { + "type": "resref", + "value": "moi_slspk_prop" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spider Servant Properties" + }, + "RESREF": { + "type": "resref", + "value": "servantprops" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spider Servant Properties 12HD" + }, + "RESREF": { + "type": "resref", + "value": "servantprops2" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spider Servant Properties 14HD" + }, + "RESREF": { + "type": "resref", + "value": "servantprops3" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spider Servant Properties 16HD" + }, + "RESREF": { + "type": "resref", + "value": "servantprops4" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spiritual Weapon Properties" + }, + "RESREF": { + "type": "resref", + "value": "prc_sprtwpn_hide" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "TNecro Doom Knight Properties" + }, + "RESREF": { + "type": "resref", + "value": "prc_tn_dk" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Treant Properties" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_treant" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Twig Blight Hide" + }, + "RESREF": { + "type": "resref", + "value": "wol_twigblightci" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "it_creitem003" + }, + "STRREF": { + "type": "dword", + "value": 13205 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Very Young Prismatic Dragon Properties" + }, + "RESREF": { + "type": "resref", + "value": "vy_it_creitem011" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warforged Armor Feats" + }, + "RESREF": { + "type": "resref", + "value": "prc_wf_feats" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Werewolf Skin 0" + }, + "RESREF": { + "type": "resref", + "value": "werewolfskin0" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Werewolf Skin 0 L10" + }, + "RESREF": { + "type": "resref", + "value": "werewolfskin0l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Werewolf Skin 0 S5" + }, + "RESREF": { + "type": "resref", + "value": "werewolfskin0s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Werewolf Skin 1" + }, + "RESREF": { + "type": "resref", + "value": "werewolfskin1" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Werewolf Skin 1 L10" + }, + "RESREF": { + "type": "resref", + "value": "werewolfskin1l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Werewolf Skin 1 S5" + }, + "RESREF": { + "type": "resref", + "value": "werewolfskin1s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Werewolf Skin 2" + }, + "RESREF": { + "type": "resref", + "value": "werewolfskin2" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Werewolf Skin 2 L10" + }, + "RESREF": { + "type": "resref", + "value": "werewolfskin2l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Werewolf Skin 2 S5" + }, + "RESREF": { + "type": "resref", + "value": "werewolfskin2s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Zombie Properties" + }, + "RESREF": { + "type": "resref", + "value": "wo_zombie_prop" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6809 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 56 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Algoid Slam" + }, + "RESREF": { + "type": "resref", + "value": "prc_slam_algoid" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ashen Husk Slam" + }, + "RESREF": { + "type": "resref", + "value": "bdd_ashen_slam" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Centaur Hoof (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_cent_hoof_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Centaur Hoof (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_cent_hoof_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Centaur Hoof (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_cent_hoof_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Centaur Hoof (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_cent_hoof_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Centaur Hoof (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_cent_hoof_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Centaur Hoof (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_cent_hoof_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Centaur Hoof (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_cent_hoof_" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Centaur Hoof (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_cent_hoof_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Centaur Hoof (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_cent_hoof_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_0_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_1_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_2_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_3_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_4_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_5_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_0_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_1_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_2_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_3_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_4_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_5_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_0_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_1_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_2_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_3_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_4_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_5_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_0_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_1_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_2_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_3_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_4_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_5_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_0_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_1_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_2_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_3_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_4_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_5_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_0_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_1_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_2_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_3_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_4_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_5_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_0_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_1_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_2_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_3_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_4_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dragon Tail Slap (Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_diatail_5_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Tail Slap (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_tail_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Tail Slap (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_tail_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Tail Slap (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_tail_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Tail Slap (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_tail_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Wing Slam (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_wing_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Wing Slam (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_wing_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Wing Slam (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_wing_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Wing Slam (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_wing_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Disciple Wing Slam (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_rdd_wing_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Tail Slap (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_kobdratail_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Tail Slap (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_kobdratail_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Tail Slap (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_kobdratail_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Tail Slap (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_kobdratail_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Tail Slap (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_kobdratail_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Tail Slap (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_kobdratail_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Tail Slap (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_kobdratail_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Floating Disk Hit (1d2-5)" + }, + "RESREF": { + "type": "resref", + "value": "fdisk_hit" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Form of Doom Tentacle (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_fod_tent_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Form of Doom Tentacle (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_fod_tent_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Form of Doom Tentacle (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_fod_tent_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Form of Doom Tentacle (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_fod_tent_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Form of Doom Tentacle (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_fod_tent_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Form of Doom Tentacle (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_fod_tent_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Form of Doom Tentacle (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_fod_tent_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Form of Doom Tentacle (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_fod_tent_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Form of Doom Tentacle (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_fod_tent_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound Archon Slam (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_hdarc_slam_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound Archon Slam (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_hdarc_slam_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound Archon Slam (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_hdarc_slam_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound Archon Slam (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_hdarc_slam_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound Archon Slam (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_hdarc_slam_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound Archon Slam (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_hdarc_slam_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound Archon Slam (Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_hdarc_slam_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Illthid Tentacle (colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ill_tent_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Illthid Tentacle (diminutive)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ill_tent_d" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Illthid Tentacle (fine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ill_tent_f" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Illthid Tentacle (gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ill_tent_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Illthid Tentacle (huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ill_tent_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Illthid Tentacle (large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ill_tent_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Illthid Tentacle (medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ill_tent_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Illthid Tentacle (small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ill_tent_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Illthid Tentacle (tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_ill_tent_t" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pony Hoof 01" + }, + "RESREF": { + "type": "resref", + "value": "prc_pony_hoof01" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Slam1d4" + }, + "RESREF": { + "type": "resref", + "value": "slam1d4" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spirtual Weapon Slam" + }, + "RESREF": { + "type": "resref", + "value": "prc_sprtwpn_slam" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "it_crewpb005" + }, + "STRREF": { + "type": "dword", + "value": 13216 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6811 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6743 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 60 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": " 0@P`p€‘¡°ÀÃàðÿGenji's Coloring Book" + }, + "RESREF": { + "type": "resref", + "value": "gen_coloringbook" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boccob's Blessed Book" + }, + "RESREF": { + "type": "resref", + "value": "miscb025" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Achilles Heel" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_achilles" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: All Hope Lost" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_allhope" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Allied Martyr" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_allmart" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Anarchy's Call" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_anarchy" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Animus Blast" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_animblas" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Animus Blizzard" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_animbliz" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Army Unfallen" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_armyunfa" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Audience of Stone" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_audstone" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Battle Bounding" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_batbound" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Celestial Council" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_celcounc" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Champion's Valor" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_champval" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Contingent Resurrection" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_contresu" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Contingent Reunion" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_contreun" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Deadeye Sense" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_deadeyes" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Deathmark" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_deathmrk" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Dire Winter" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_direwint" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Dragon Knight" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_dragonkn" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Dreamscape" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_dreamscp" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Dullblades" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_dullblad" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Dweomer Thief" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_dweomert" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Enslave" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_enslave" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Epic Mage Armor" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_epmagarm" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Epic Repulsion" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_eprepuls" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Epic Spell Reflection" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_epspellr" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Epic Warding" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_epwardin" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Eternal Freedom" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_eterfree" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Fiendish Words" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_fiendwrd" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Fleetness of Foot" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_fleetnes" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Gem Cage" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_gemcage" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Godsmite" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_godsmite" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Greater Ruin" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_greatrui" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Greater Spell Resistance" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_grspellr" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Greater Timestop" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_grtimest" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Hell Send" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_hellsend" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Hellball" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_hellball" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Herculean Alliance" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_hercalli" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Herculean Empowerment" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_hercempo" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Impenetrability" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_impenetr" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Leech Field" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_leechfie" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Legendary Artisan" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_legendar" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Life Force Transfer" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_lifeforc" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Magma Burst" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_magmabur" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Mass Penguin" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_masspeng" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Momento Mori" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_momentom" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Mummy Dust" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_mummdust" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Nailed to the Sky" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_nailedsk" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Night's Undoing" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_nightsun" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Order Restored" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_orderres" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Paths Become Known" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_pathsbec" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Peerless Penitence" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_peerless" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Pestilence" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_pestilen" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Pious Parley" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_piouspar" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Planar Cell" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_planarce" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Psionic Salvo" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_psionics" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Rain of Fire" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_rainfire" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Risen Reunited" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_risenreu" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Ruin" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_ruin" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Singular Sunder" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_singsund" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Spell Worm" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_spelworm" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Storm Mantle" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_stormman" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Summon Aberration" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_summaber" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Superb Dispelling" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_superbdi" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Symrustar's Spellbinding" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_symrusta" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: The Withering" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_thewithe" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Tolodine's Killing Wind" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_tolodine" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Transcendent Vitality" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_transvit" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Twinfiend" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_twinfien" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Unholy Disciple" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_unholydi" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Unimpinged" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_unimping" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Unseen Wanderer" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_unseenwa" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spell: Whip of Shar" + }, + "RESREF": { + "type": "resref", + "value": "epic_sp_whipshar" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Bodily Health +1" + }, + "RESREF": { + "type": "resref", + "value": "miscb092" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Bodily Health +2" + }, + "RESREF": { + "type": "resref", + "value": "miscc045" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Bodily Health +3" + }, + "RESREF": { + "type": "resref", + "value": "miscc066" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Bodily Health +4" + }, + "RESREF": { + "type": "resref", + "value": "miscc081" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Bodily Health +5" + }, + "RESREF": { + "type": "resref", + "value": "miscc088" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Gainful Exercise +1" + }, + "RESREF": { + "type": "resref", + "value": "miscb093" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Gainful Exercise +2" + }, + "RESREF": { + "type": "resref", + "value": "miscc046" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Gainful Exercise +3" + }, + "RESREF": { + "type": "resref", + "value": "miscc067" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Gainful Exercise +4" + }, + "RESREF": { + "type": "resref", + "value": "miscc082" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Gainful Exercise +5" + }, + "RESREF": { + "type": "resref", + "value": "miscc089" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Leadership and Influence +1" + }, + "RESREF": { + "type": "resref", + "value": "miscb096" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Leadership and Influence +2" + }, + "RESREF": { + "type": "resref", + "value": "miscc049" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Leadership and Influence +3" + }, + "RESREF": { + "type": "resref", + "value": "miscc070" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Leadership and Influence +4" + }, + "RESREF": { + "type": "resref", + "value": "miscc085" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Leadership and Influence +5" + }, + "RESREF": { + "type": "resref", + "value": "miscc092" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Quickness of Action +1" + }, + "RESREF": { + "type": "resref", + "value": "miscb094" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Quickness of Action +2" + }, + "RESREF": { + "type": "resref", + "value": "miscc047" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Quickness of Action +3" + }, + "RESREF": { + "type": "resref", + "value": "miscc068" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Quickness of Action +4" + }, + "RESREF": { + "type": "resref", + "value": "miscc083" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Quickness of Action +5" + }, + "RESREF": { + "type": "resref", + "value": "miscc090" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Understanding +1" + }, + "RESREF": { + "type": "resref", + "value": "miscb097" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Understanding +2" + }, + "RESREF": { + "type": "resref", + "value": "miscc050" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Understanding +3" + }, + "RESREF": { + "type": "resref", + "value": "miscc071" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Understanding +4" + }, + "RESREF": { + "type": "resref", + "value": "miscc086" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manual of Understanding +5" + }, + "RESREF": { + "type": "resref", + "value": "miscc093" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Affliction" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_afflict" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Animating Dead" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_animdead" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Animation" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_animate" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Armor" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_armor" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Banishment" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_banish" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Compelling" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_compel" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Concealment" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_conceal" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Conjuration" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_conjure" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Contact" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_contact" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Delusion" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_delude" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Destruction" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_destroy" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Dispelling" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_dispel" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Energy" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_energy" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Foresight" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_foresee" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Fortification" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_fortify" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Healing" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_heal" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Life" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_life" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Light" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_light" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Opposition" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_oppos" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Reflection" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_reflect" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Revealing" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_reveal" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Shadow" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_shadow" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Slaying" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_slay" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Summoning" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_summon" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Time" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_time" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Transformation" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_transfrm" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Transportation" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_transprt" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "The Seed of Warding" + }, + "RESREF": { + "type": "resref", + "value": "epic_sd_ward" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tome of Clear Thought +1" + }, + "RESREF": { + "type": "resref", + "value": "miscb095" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tome of Clear Thought +2" + }, + "RESREF": { + "type": "resref", + "value": "miscc048" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tome of Clear Thought +3" + }, + "RESREF": { + "type": "resref", + "value": "miscc069" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tome of Clear Thought +4" + }, + "RESREF": { + "type": "resref", + "value": "miscc084" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tome of Clear Thought +5" + }, + "RESREF": { + "type": "resref", + "value": "miscc091" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6815 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 16 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Belt of Dwarven Kind" + }, + "RESREF": { + "type": "resref", + "value": "miscb046" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Belt of Dwarven Kind" + }, + "RESREF": { + "type": "resref", + "value": "miscb046b" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Belt of Giant Strength +4" + }, + "RESREF": { + "type": "resref", + "value": "miscb060" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Belt of Giant Strength +6" + }, + "RESREF": { + "type": "resref", + "value": "miscc015" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Monk's Belt" + }, + "RESREF": { + "type": "resref", + "value": "miscb016" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Monk's Belt" + }, + "RESREF": { + "type": "resref", + "value": "miscb016b" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6745 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 15 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boots of Blink" + }, + "RESREF": { + "type": "resref", + "value": "misca087" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boots of Elven Kind" + }, + "RESREF": { + "type": "resref", + "value": "misca035" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boots of Levitation" + }, + "RESREF": { + "type": "resref", + "value": "miscb001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boots of Speed" + }, + "RESREF": { + "type": "resref", + "value": "miscb006" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boots of Striding" + }, + "RESREF": { + "type": "resref", + "value": "misca049" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boots of the Acrobat" + }, + "RESREF": { + "type": "resref", + "value": "misca040" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boots of Winterlands" + }, + "RESREF": { + "type": "resref", + "value": "misca048" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Winged Boots" + }, + "RESREF": { + "type": "resref", + "value": "miscb036" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 1520 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 17 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bracelet of Archery" + }, + "RESREF": { + "type": "resref", + "value": "misca081" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bracelet of Friends" + }, + "RESREF": { + "type": "resref", + "value": "misca076" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bracers of Armor +1" + }, + "RESREF": { + "type": "resref", + "value": "misca015" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bracers of Armor +2" + }, + "RESREF": { + "type": "resref", + "value": "misca060" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bracers of Armor +3" + }, + "RESREF": { + "type": "resref", + "value": "miscb017" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bracers of Armor +4" + }, + "RESREF": { + "type": "resref", + "value": "miscb057" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bracers of Armor +5" + }, + "RESREF": { + "type": "resref", + "value": "miscb088" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bracers of Armor +6" + }, + "RESREF": { + "type": "resref", + "value": "miscc014" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bracers of Armor +7" + }, + "RESREF": { + "type": "resref", + "value": "miscc034" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bracers of Armor +8" + }, + "RESREF": { + "type": "resref", + "value": "miscc055" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bracers of Health +2" + }, + "RESREF": { + "type": "resref", + "value": "misca069" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bracers of Health +4" + }, + "RESREF": { + "type": "resref", + "value": "miscb062" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bracers of Health +6" + }, + "RESREF": { + "type": "resref", + "value": "miscc017" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dimensional Shackles" + }, + "RESREF": { + "type": "resref", + "value": "miscb089" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6746 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 18 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Brooch of Shielding" + }, + "RESREF": { + "type": "resref", + "value": "misca026" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloak of Arachnida" + }, + "RESREF": { + "type": "resref", + "value": "misca089" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloak of Displacement" + }, + "RESREF": { + "type": "resref", + "value": "miscb083" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloak of Displacement II" + }, + "RESREF": { + "type": "resref", + "value": "miscc037" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloak of Elven Kind" + }, + "RESREF": { + "type": "resref", + "value": "misca036" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloak of Etherealness" + }, + "RESREF": { + "type": "resref", + "value": "miscc042" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloak of Mountebank" + }, + "RESREF": { + "type": "resref", + "value": "miscb041" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloak of Protection" + }, + "RESREF": { + "type": "resref", + "value": "miscc026" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloak of Resistance +1" + }, + "RESREF": { + "type": "resref", + "value": "misca016" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloak of Resistance +2" + }, + "RESREF": { + "type": "resref", + "value": "misca061" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloak of Resistance +3" + }, + "RESREF": { + "type": "resref", + "value": "miscb018" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloak of Resistance +4" + }, + "RESREF": { + "type": "resref", + "value": "miscb058" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloak of Resistance +5" + }, + "RESREF": { + "type": "resref", + "value": "miscb084" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloak of the Bat" + }, + "RESREF": { + "type": "resref", + "value": "miscb080" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloak of the Manta Ray" + }, + "RESREF": { + "type": "resref", + "value": "miscb071" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mantle of Spell Resistance" + }, + "RESREF": { + "type": "resref", + "value": "miscc072" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Nymph Cloak +2" + }, + "RESREF": { + "type": "resref", + "value": "misca073" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Nymph Cloak +4" + }, + "RESREF": { + "type": "resref", + "value": "miscb065" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Nymph Cloak +6" + }, + "RESREF": { + "type": "resref", + "value": "miscc020" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Vestiments of Faith" + }, + "RESREF": { + "type": "resref", + "value": "miscc061" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6747 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 19 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bullybasher's Gauntlets" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_bully" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Caster's Gloves" + }, + "RESREF": { + "type": "resref", + "value": "misca090" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gauntlets of Dexterity +2" + }, + "RESREF": { + "type": "resref", + "value": "misca070" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gauntlets of Dexterity +4" + }, + "RESREF": { + "type": "resref", + "value": "miscb061" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gauntlets of Dexterity +6" + }, + "RESREF": { + "type": "resref", + "value": "miscc016" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gauntlets of Ogre Power" + }, + "RESREF": { + "type": "resref", + "value": "misca068" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gauntlets of Stone" + }, + "RESREF": { + "type": "resref", + "value": "miscb035" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gloves of Arrow Deflection" + }, + "RESREF": { + "type": "resref", + "value": "misca062" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gloves of Storing" + }, + "RESREF": { + "type": "resref", + "value": "misca044" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 1530 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 186 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 64 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Blank Scroll" + }, + "RESREF": { + "type": "resref", + "value": "blankscroll" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "PRC Companion Dye" + }, + "RESREF": { + "type": "resref", + "value": "prccompdye" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quality Materials" + }, + "RESREF": { + "type": "resref", + "value": "qualitymaterials" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 83602 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 57 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Archmage's Focus of Power" + }, + "RESREF": { + "type": "resref", + "value": "archfocusofpower" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Common Gem" + }, + "RESREF": { + "type": "resref", + "value": "rdg_gem201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Incredibly Rare Gem" + }, + "RESREF": { + "type": "resref", + "value": "rdg_gem601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Precious Gem" + }, + "RESREF": { + "type": "resref", + "value": "rdg_gem401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Semi Precious Gem" + }, + "RESREF": { + "type": "resref", + "value": "rdg_gem301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Very Common Gem" + }, + "RESREF": { + "type": "resref", + "value": "rdg_gem101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Very Rare Gem" + }, + "RESREF": { + "type": "resref", + "value": "rdg_gem501" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6812 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 21 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Amulet of Natural Armor +1" + }, + "RESREF": { + "type": "resref", + "value": "misca033" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Amulet of Natural Armor +2" + }, + "RESREF": { + "type": "resref", + "value": "miscb005" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Amulet of Natural Armor +3" + }, + "RESREF": { + "type": "resref", + "value": "miscb068" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Amulet of Natural Armor +3" + }, + "RESREF": { + "type": "resref", + "value": "miscb069" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Amulet of Natural Armor +4" + }, + "RESREF": { + "type": "resref", + "value": "miscc010" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Amulet of Natural Armor +5" + }, + "RESREF": { + "type": "resref", + "value": "miscc036" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Amulet of the Planes" + }, + "RESREF": { + "type": "resref", + "value": "miscc062" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Amulet of the Silver Tongue" + }, + "RESREF": { + "type": "resref", + "value": "prc_true_svrtng" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Amulet of the Silver Tongue (Greater)" + }, + "RESREF": { + "type": "resref", + "value": "prc_true_svrtngg" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Amulet of the Thief" + }, + "RESREF": { + "type": "resref", + "value": "miscc012" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Amulet of Undead Turning" + }, + "RESREF": { + "type": "resref", + "value": "miscb034" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Divine Spark" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_divspark" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Divine Spark" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_ravenknd" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hand of Glory" + }, + "RESREF": { + "type": "resref", + "value": "misca097" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hand of the Mage" + }, + "RESREF": { + "type": "resref", + "value": "misca019" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Medalion of Thoughts" + }, + "RESREF": { + "type": "resref", + "value": "miscb039" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necklace of Adaptation" + }, + "RESREF": { + "type": "resref", + "value": "miscb070" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necklace of Fire I" + }, + "RESREF": { + "type": "resref", + "value": "misca028" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necklace of Fire II" + }, + "RESREF": { + "type": "resref", + "value": "misca052" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necklace of Fire III" + }, + "RESREF": { + "type": "resref", + "value": "misca074" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necklace of Fire IV" + }, + "RESREF": { + "type": "resref", + "value": "misca083" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necklace of Fire V" + }, + "RESREF": { + "type": "resref", + "value": "misca092" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necklace of Fire VI" + }, + "RESREF": { + "type": "resref", + "value": "miscb015" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necklace of Fire VII" + }, + "RESREF": { + "type": "resref", + "value": "miscb023" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necklace of Prayer Beads (Aiding)" + }, + "RESREF": { + "type": "resref", + "value": "misca080" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necklace of Prayer Beads (Blessing)" + }, + "RESREF": { + "type": "resref", + "value": "misca010" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necklace of Prayer Beads (God's Wrath)" + }, + "RESREF": { + "type": "resref", + "value": "miscc040" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necklace of Prayer Beads (Healing)" + }, + "RESREF": { + "type": "resref", + "value": "miscb029" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necklace of Prayer Beads (Smiting)" + }, + "RESREF": { + "type": "resref", + "value": "miscb048" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necklace of Prayer Beads (Wind Walking)" + }, + "RESREF": { + "type": "resref", + "value": "miscc004" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Periapt of Health" + }, + "RESREF": { + "type": "resref", + "value": "miscb003" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Periapt of Proof Against Poison" + }, + "RESREF": { + "type": "resref", + "value": "misca066" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Periapt of Wisdom +2" + }, + "RESREF": { + "type": "resref", + "value": "misca072" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Periapt of Wisdom +4" + }, + "RESREF": { + "type": "resref", + "value": "miscb064" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Periapt of Wisdom +6" + }, + "RESREF": { + "type": "resref", + "value": "miscc019" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Periapt of Wound Closure " + }, + "RESREF": { + "type": "resref", + "value": "miscb049" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Phylactery of the Faithful" + }, + "RESREF": { + "type": "resref", + "value": "misca021" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scarab of Aradros" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_aradros" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Talisman of Negative Energy" + }, + "RESREF": { + "type": "resref", + "value": "miscb021" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6750 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 22 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bright Evening Star" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_btevstar" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Acid Resistance" + }, + "RESREF": { + "type": "resref", + "value": "ring007" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Acid Resistance Major" + }, + "RESREF": { + "type": "resref", + "value": "ring015" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Air Command" + }, + "RESREF": { + "type": "resref", + "value": "ring030" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Animal Friendship" + }, + "RESREF": { + "type": "resref", + "value": "ring005" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Blinking" + }, + "RESREF": { + "type": "resref", + "value": "ring022" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Chameleon" + }, + "RESREF": { + "type": "resref", + "value": "ring006" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Clairvoyance/Audience" + }, + "RESREF": { + "type": "resref", + "value": "ring020" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Climbing" + }, + "RESREF": { + "type": "resref", + "value": "ring034" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Cold Resistance" + }, + "RESREF": { + "type": "resref", + "value": "ring008" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Cold Resistance Major" + }, + "RESREF": { + "type": "resref", + "value": "ring016" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Counter Spelling" + }, + "RESREF": { + "type": "resref", + "value": "ring037" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Earth Command" + }, + "RESREF": { + "type": "resref", + "value": "ring031" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Electrical Resistance" + }, + "RESREF": { + "type": "resref", + "value": "ring009" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Electrical Resistance Major" + }, + "RESREF": { + "type": "resref", + "value": "ring017" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Evasion" + }, + "RESREF": { + "type": "resref", + "value": "ring021" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Feather Fall" + }, + "RESREF": { + "type": "resref", + "value": "ring035" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Fire Command" + }, + "RESREF": { + "type": "resref", + "value": "ring032" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Fire Resistance" + }, + "RESREF": { + "type": "resref", + "value": "ring010" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Fire Resistance Major" + }, + "RESREF": { + "type": "resref", + "value": "ring018" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Force Shield" + }, + "RESREF": { + "type": "resref", + "value": "ring004" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Freedom of Movement" + }, + "RESREF": { + "type": "resref", + "value": "ring025" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Gates" + }, + "RESREF": { + "type": "resref", + "value": "miscc030" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Invisibility" + }, + "RESREF": { + "type": "resref", + "value": "ring013" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Protection +1" + }, + "RESREF": { + "type": "resref", + "value": "ring001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Protection +2" + }, + "RESREF": { + "type": "resref", + "value": "ring003" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Protection +3" + }, + "RESREF": { + "type": "resref", + "value": "ring012" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Protection +4" + }, + "RESREF": { + "type": "resref", + "value": "ring023" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Protection +5" + }, + "RESREF": { + "type": "resref", + "value": "ring026" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Regeneration" + }, + "RESREF": { + "type": "resref", + "value": "ring028" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Shooting Stars" + }, + "RESREF": { + "type": "resref", + "value": "ring039" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Sonic Resistance" + }, + "RESREF": { + "type": "resref", + "value": "ring011" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Sonic Resistance Major" + }, + "RESREF": { + "type": "resref", + "value": "ring019" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Spell Storing" + }, + "RESREF": { + "type": "resref", + "value": "ring038" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Sustenance" + }, + "RESREF": { + "type": "resref", + "value": "ring036" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Warmth" + }, + "RESREF": { + "type": "resref", + "value": "ring002" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Water Command" + }, + "RESREF": { + "type": "resref", + "value": "ring033" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Wizardry I" + }, + "RESREF": { + "type": "resref", + "value": "ring014" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Wizardry II" + }, + "RESREF": { + "type": "resref", + "value": "ring024" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Wizardry III" + }, + "RESREF": { + "type": "resref", + "value": "ring027" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring of Wizardry IV" + }, + "RESREF": { + "type": "resref", + "value": "ring029" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6751 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6749 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 20 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bundle of 10 Sun Rods" + }, + "RESREF": { + "type": "resref", + "value": "10sunrods" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bundle of 10 Torches" + }, + "RESREF": { + "type": "resref", + "value": "10torches" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "DM Rest Widget" + }, + "RESREF": { + "type": "resref", + "value": "dmrestwidget" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Healer's Bag" + }, + "RESREF": { + "type": "resref", + "value": "healersbag" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Master Work Thieves' Tools" + }, + "RESREF": { + "type": "resref", + "value": "mw_thievestools" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Murlynd's Soup" + }, + "RESREF": { + "type": "resref", + "value": "murlyndssoup" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "prgt_kit" + }, + "RESREF": { + "type": "resref", + "value": "prgt_kit" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rations" + }, + "RESREF": { + "type": "resref", + "value": "food" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rope" + }, + "RESREF": { + "type": "resref", + "value": "rdg_rope" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sunrod" + }, + "RESREF": { + "type": "resref", + "value": "sunrod" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Supply Kit" + }, + "RESREF": { + "type": "resref", + "value": "supplykit002" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Thieves' Tools" + }, + "RESREF": { + "type": "resref", + "value": "thievestools" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Torch" + }, + "RESREF": { + "type": "resref", + "value": "it_torch002" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Weeks rations" + }, + "RESREF": { + "type": "resref", + "value": "weeksrations" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Woodland Kit" + }, + "RESREF": { + "type": "resref", + "value": "supplykit001" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6748 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 23 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Antitoxin" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_antitox" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bag of Holding" + }, + "RESREF": { + "type": "resref", + "value": "miscb026" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bag of Tricks (Grey)" + }, + "RESREF": { + "type": "resref", + "value": "misca013" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bag of Tricks (Rust)" + }, + "RESREF": { + "type": "resref", + "value": "misca053" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bag of Tricks (Tan)" + }, + "RESREF": { + "type": "resref", + "value": "misca093" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bands of Bilarro" + }, + "RESREF": { + "type": "resref", + "value": "miscb090" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Blend Cream" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_blendcrm" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bottle of Air" + }, + "RESREF": { + "type": "resref", + "value": "miscb044" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Broom of Flying" + }, + "RESREF": { + "type": "resref", + "value": "miscb051" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Candle of Invocation" + }, + "RESREF": { + "type": "resref", + "value": "miscb004" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Candle of Truth" + }, + "RESREF": { + "type": "resref", + "value": "misca046" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chime of Interruption" + }, + "RESREF": { + "type": "resref", + "value": "miscb056" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chime of Opening" + }, + "RESREF": { + "type": "resref", + "value": "misca054" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crackle Powder" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_crcklpdr" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crystal Ball" + }, + "RESREF": { + "type": "resref", + "value": "miscc032" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crystal Ball -w- Detect Thoughts" + }, + "RESREF": { + "type": "resref", + "value": "miscc041" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crystal Ball -w- See Invisibility" + }, + "RESREF": { + "type": "resref", + "value": "miscc038" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crystal Ball -w- Telepathy" + }, + "RESREF": { + "type": "resref", + "value": "miscc057" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crystal Ball -w- True Seeing" + }, + "RESREF": { + "type": "resref", + "value": "miscc063" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Deck of Summons" + }, + "RESREF": { + "type": "resref", + "value": "miscb024" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Drum of Fear" + }, + "RESREF": { + "type": "resref", + "value": "miscc006" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dust of Appearance" + }, + "RESREF": { + "type": "resref", + "value": "misca043" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dust of Disappearance" + }, + "RESREF": { + "type": "resref", + "value": "misca057" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dust of Dryness" + }, + "RESREF": { + "type": "resref", + "value": "misca014" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dust of Illusion" + }, + "RESREF": { + "type": "resref", + "value": "misca009" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Embalming Fire" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_emblmfr" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Everburning Torch" + }, + "RESREF": { + "type": "resref", + "value": "misca003" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eversmoking Bottle" + }, + "RESREF": { + "type": "resref", + "value": "misca082" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fareye Oil" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_fareyeoil" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Figurine of Wonderous Power (Bronze Gargoyle)" + }, + "RESREF": { + "type": "resref", + "value": "miscb027" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Figurine of Wonderous Power (Ebony Manticore)" + }, + "RESREF": { + "type": "resref", + "value": "miscb028" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Figurine of Wonderous Power (Golden Lion)" + }, + "RESREF": { + "type": "resref", + "value": "miscb066" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Figurine of Wonderous Power (Ivory Ox)" + }, + "RESREF": { + "type": "resref", + "value": "miscb075" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Figurine of Wonderous Power (Marble Bear)" + }, + "RESREF": { + "type": "resref", + "value": "miscb067" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Figurine of Wonderous Power (Obsidian Ox)" + }, + "RESREF": { + "type": "resref", + "value": "miscb098" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Figurine of Wonderous Power (Onyx Dog)" + }, + "RESREF": { + "type": "resref", + "value": "miscb055" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Figurine of Wonderous Power (Silver Owl)" + }, + "RESREF": { + "type": "resref", + "value": "miscb022" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Figurine of Wonderous Power (Silver Raven)" + }, + "RESREF": { + "type": "resref", + "value": "misca059" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gem of Brightness" + }, + "RESREF": { + "type": "resref", + "value": "miscb053" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gem of Chaos" + }, + "RESREF": { + "type": "resref", + "value": "miscc075" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gem of Elemental Command" + }, + "RESREF": { + "type": "resref", + "value": "miscc080" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gem of Seeing" + }, + "RESREF": { + "type": "resref", + "value": "miscc059" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Gem of Elemental Command" + }, + "RESREF": { + "type": "resref", + "value": "miscc094" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Harp of Charming" + }, + "RESREF": { + "type": "resref", + "value": "miscb002" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Harper's Flute" + }, + "RESREF": { + "type": "resref", + "value": "mh_it_flute" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Harper's Harp" + }, + "RESREF": { + "type": "resref", + "value": "mh_it_harp" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Harper's Horn" + }, + "RESREF": { + "type": "resref", + "value": "mh_it_cor" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Harper's Lute" + }, + "RESREF": { + "type": "resref", + "value": "mh_it_luth" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Healer's Balm" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_healblm" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heward's Handy Haversack" + }, + "RESREF": { + "type": "resref", + "value": "misca038" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Horn of Blasting" + }, + "RESREF": { + "type": "resref", + "value": "miscb037" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Horn of Darkness" + }, + "RESREF": { + "type": "resref", + "value": "misca039" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Horn of Fear" + }, + "RESREF": { + "type": "resref", + "value": "miscb052" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Horn of Goodness/Evil" + }, + "RESREF": { + "type": "resref", + "value": "misca091" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Horn of Valhalla" + }, + "RESREF": { + "type": "resref", + "value": "miscc1039" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Horn of Valhalla" + }, + "RESREF": { + "type": "resref", + "value": "miscc2039" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Horn of Valhalla" + }, + "RESREF": { + "type": "resref", + "value": "miscc3039" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Horn of Valhalla" + }, + "RESREF": { + "type": "resref", + "value": "miscc4039" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Horseshoes of Speed" + }, + "RESREF": { + "type": "resref", + "value": "misca032" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Horseshoes of the Zephyr" + }, + "RESREF": { + "type": "resref", + "value": "misca056" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Incense of Meditation" + }, + "RESREF": { + "type": "resref", + "value": "misca077" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ioun Stone (Clear Spindle)" + }, + "RESREF": { + "type": "resref", + "value": "misca079" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ioun Stone (Dark Blue Rhomboid)" + }, + "RESREF": { + "type": "resref", + "value": "miscb007" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ioun Stone (Deep Red Sphere)" + }, + "RESREF": { + "type": "resref", + "value": "miscb008" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ioun Stone (Dull Grey)" + }, + "RESREF": { + "type": "resref", + "value": "misca001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ioun Stone (Dusty Rose Prism)" + }, + "RESREF": { + "type": "resref", + "value": "misca063" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ioun Stone (Incandescent Blue Sphere)" + }, + "RESREF": { + "type": "resref", + "value": "miscb009" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ioun Stone (Iridecent Spindle)" + }, + "RESREF": { + "type": "resref", + "value": "miscb047" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ioun Stone (Lavendar and Green Ellipsoid)" + }, + "RESREF": { + "type": "resref", + "value": "miscc028" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ioun Stone (Pale Blue Rhomboid)" + }, + "RESREF": { + "type": "resref", + "value": "miscb010" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ioun Stone (Pale Green Prism)" + }, + "RESREF": { + "type": "resref", + "value": "miscb072" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ioun Stone (Pale Lavender Ellipsoid)" + }, + "RESREF": { + "type": "resref", + "value": "miscb073" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ioun Stone (Pearly White Spindle)" + }, + "RESREF": { + "type": "resref", + "value": "miscb074" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ioun Stone (Pink and Green Sphere)" + }, + "RESREF": { + "type": "resref", + "value": "miscb012" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ioun Stone (Pink Rhomboid)" + }, + "RESREF": { + "type": "resref", + "value": "miscb011" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ioun Stone (Scarlet and Blue Sphere)" + }, + "RESREF": { + "type": "resref", + "value": "miscb013" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ioun Stone (Vibrant Purple Prism)" + }, + "RESREF": { + "type": "resref", + "value": "miscb038" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Iron Flask" + }, + "RESREF": { + "type": "resref", + "value": "miscc098" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Iron Ox" + }, + "RESREF": { + "type": "resref", + "value": "miscb045" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Keenear Powder" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_keenear" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Keoghtom's Ointment" + }, + "RESREF": { + "type": "resref", + "value": "misca064" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lockslip Grease" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_lockslip" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Luck Stone" + }, + "RESREF": { + "type": "resref", + "value": "miscb031" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Magic Thunderstone" + }, + "RESREF": { + "type": "resref", + "value": "misca034" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mandolin of Protection" + }, + "RESREF": { + "type": "resref", + "value": "miscb042" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mattock of Titans" + }, + "RESREF": { + "type": "resref", + "value": "miscb078" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mirror of Banishing" + }, + "RESREF": { + "type": "resref", + "value": "miscc095" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mirror of Mental Prowness" + }, + "RESREF": { + "type": "resref", + "value": "miscc099" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mirror of Opposition" + }, + "RESREF": { + "type": "resref", + "value": "miscc074" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Murlynd's Bottomless Bowl" + }, + "RESREF": { + "type": "resref", + "value": "miscb019" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Murlynd's Spoon" + }, + "RESREF": { + "type": "resref", + "value": "misca084" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Nature's Draught" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_natdrgt" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Nerv" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_nerv" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Nolzur's Marvelous Pigments" + }, + "RESREF": { + "type": "resref", + "value": "misca085" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Orb of Storms" + }, + "RESREF": { + "type": "resref", + "value": "miscc024" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pearl of Power (2 Spells)" + }, + "RESREF": { + "type": "resref", + "value": "miscc058" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pearl of Power I" + }, + "RESREF": { + "type": "resref", + "value": "misca020" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pearl of Power II" + }, + "RESREF": { + "type": "resref", + "value": "misca065" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pearl of Power III" + }, + "RESREF": { + "type": "resref", + "value": "miscb020" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pearl of Power IV" + }, + "RESREF": { + "type": "resref", + "value": "miscb059" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pearl of Power IX" + }, + "RESREF": { + "type": "resref", + "value": "miscc064" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pearl of Power V" + }, + "RESREF": { + "type": "resref", + "value": "miscb087" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pearl of Power VI" + }, + "RESREF": { + "type": "resref", + "value": "miscc022" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pearl of Power VII" + }, + "RESREF": { + "type": "resref", + "value": "miscc035" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pearl of Power VIII" + }, + "RESREF": { + "type": "resref", + "value": "miscc056" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pearl of Sirines" + }, + "RESREF": { + "type": "resref", + "value": "miscb054" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pipes of Haunting" + }, + "RESREF": { + "type": "resref", + "value": "misca095" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pipes of Pain" + }, + "RESREF": { + "type": "resref", + "value": "miscb040" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pipes of Sounding" + }, + "RESREF": { + "type": "resref", + "value": "misca029" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pipes of the Sewers" + }, + "RESREF": { + "type": "resref", + "value": "misca024" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Portable Hole" + }, + "RESREF": { + "type": "resref", + "value": "miscb043" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "prc_it_poist0" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_poist0" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "prc_it_poist1" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_poist1" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "prc_it_poist2" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_poist2" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "prc_it_poist3" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_poist3" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quaal's Feather Token (Anchor)" + }, + "RESREF": { + "type": "resref", + "value": "misca002" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quaal's Feather Token (Bird)" + }, + "RESREF": { + "type": "resref", + "value": "misca007" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quaal's Feather Token (Boat)" + }, + "RESREF": { + "type": "resref", + "value": "misca008" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quaal's Feather Token (Fan)" + }, + "RESREF": { + "type": "resref", + "value": "misca005" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quaal's Feather Token (Tree)" + }, + "RESREF": { + "type": "resref", + "value": "misca004" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quaal's Feather Token (Whip)" + }, + "RESREF": { + "type": "resref", + "value": "misca011" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quiver of Ehlonna" + }, + "RESREF": { + "type": "resref", + "value": "misca030" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rope of Climbing" + }, + "RESREF": { + "type": "resref", + "value": "misca055" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rug of Entanglement" + }, + "RESREF": { + "type": "resref", + "value": "miscb076" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scabard of Keen Edges" + }, + "RESREF": { + "type": "resref", + "value": "miscb050" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scarab of Golem Bane (Any)" + }, + "RESREF": { + "type": "resref", + "value": "misca050" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scarab of Golem Bane (Clay)" + }, + "RESREF": { + "type": "resref", + "value": "misca022" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scarab of Golem Bane (Flesh & Clay)" + }, + "RESREF": { + "type": "resref", + "value": "misca031" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scarab of Golem Bane (Flesh)" + }, + "RESREF": { + "type": "resref", + "value": "misca012" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scarab of Golem Bane (Iron)" + }, + "RESREF": { + "type": "resref", + "value": "misca027" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scarab of Golem Bane (Stone)" + }, + "RESREF": { + "type": "resref", + "value": "misca025" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Screaming Flask" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_scrmflsk" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shedden" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_shedden" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shedden +2" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_shedden2" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shedden +3" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_shedden3" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shedden +4" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_shedden4" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shedden +5" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_shedden5" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Softfoot" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_softfoot" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sovereign Glue" + }, + "RESREF": { + "type": "resref", + "value": "misca045" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spade of Titans" + }, + "RESREF": { + "type": "resref", + "value": "miscb086" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sphere of Frost Resistance" + }, + "RESREF": { + "type": "resref", + "value": "miscb077" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sphere of Protection" + }, + "RESREF": { + "type": "resref", + "value": "miscc054" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Stone of Alarm" + }, + "RESREF": { + "type": "resref", + "value": "misca023" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Stone of Mass Jump" + }, + "RESREF": { + "type": "resref", + "value": "miscb033" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Stone Ox" + }, + "RESREF": { + "type": "resref", + "value": "miscb032" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Stone Salve" + }, + "RESREF": { + "type": "resref", + "value": "misca067" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Summoning Stone" + }, + "RESREF": { + "type": "resref", + "value": "summoningstone" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Thief's Dust" + }, + "RESREF": { + "type": "resref", + "value": "misca006" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Token of Sacrifice" + }, + "RESREF": { + "type": "resref", + "value": "codi_sam_token" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Torch of Revealing" + }, + "RESREF": { + "type": "resref", + "value": "miscc002" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Universal Solvent" + }, + "RESREF": { + "type": "resref", + "value": "misca041" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Vial of Brittlebone" + }, + "RESREF": { + "type": "resref", + "value": "prc_brittlebn" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Weight Reducing Bag. 40%" + }, + "RESREF": { + "type": "resref", + "value": "misca047" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Weight Reducing Bag. 60%" + }, + "RESREF": { + "type": "resref", + "value": "misca078" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Weight Reducing Bag. 80%" + }, + "RESREF": { + "type": "resref", + "value": "misca098" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Well of souls" + }, + "RESREF": { + "type": "resref", + "value": "miscc065" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wind Fan" + }, + "RESREF": { + "type": "resref", + "value": "misca086" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6699 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 24 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Agony" + }, + "RESREF": { + "type": "resref", + "value": "prc_agony" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Aid" + }, + "RESREF": { + "type": "resref", + "value": "potion015" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Antitoxin" + }, + "RESREF": { + "type": "resref", + "value": "antitoxin" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Baccaran" + }, + "RESREF": { + "type": "resref", + "value": "prc_baccaran" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Barkskin" + }, + "RESREF": { + "type": "resref", + "value": "potion011" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Brackish Water" + }, + "RESREF": { + "type": "resref", + "value": "mc_brackishwater" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bull Strength" + }, + "RESREF": { + "type": "resref", + "value": "potion019" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cat's Grace" + }, + "RESREF": { + "type": "resref", + "value": "potion018" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Clairaudience/Clairvoyance" + }, + "RESREF": { + "type": "resref", + "value": "potion007" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cure Light Wounds" + }, + "RESREF": { + "type": "resref", + "value": "potion002" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cure Moderate Wounds" + }, + "RESREF": { + "type": "resref", + "value": "potion014" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cure Serious Wounds" + }, + "RESREF": { + "type": "resref", + "value": "potion025" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Devilweed" + }, + "RESREF": { + "type": "resref", + "value": "prc_devilweed" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eagle's Spendor" + }, + "RESREF": { + "type": "resref", + "value": "potion008" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Endurance" + }, + "RESREF": { + "type": "resref", + "value": "potion013" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eyes" + }, + "RESREF": { + "type": "resref", + "value": "potion004" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fox's Cunning" + }, + "RESREF": { + "type": "resref", + "value": "potion009" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fresh Water" + }, + "RESREF": { + "type": "resref", + "value": "mc_freshwater" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Glibness" + }, + "RESREF": { + "type": "resref", + "value": "potion020" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Green Liquid" + }, + "RESREF": { + "type": "resref", + "value": "mc_greenliquid" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Haste" + }, + "RESREF": { + "type": "resref", + "value": "potion031" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hiding" + }, + "RESREF": { + "type": "resref", + "value": "potion005" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Invisiblity" + }, + "RESREF": { + "type": "resref", + "value": "potion016" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Jump Potion" + }, + "RESREF": { + "type": "resref", + "value": "potion001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lesser Restoration" + }, + "RESREF": { + "type": "resref", + "value": "potion017" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Luhix" + }, + "RESREF": { + "type": "resref", + "value": "prc_luhix" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mushroom Powder" + }, + "RESREF": { + "type": "resref", + "value": "prc_mshrm_pwdr" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Neutralize Poison" + }, + "RESREF": { + "type": "resref", + "value": "potion024" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Oil" + }, + "RESREF": { + "type": "resref", + "value": "mc_oil" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Owl's Wisdom" + }, + "RESREF": { + "type": "resref", + "value": "potion010" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Potion of Heroism" + }, + "RESREF": { + "type": "resref", + "value": "mc_heroismpotion" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Potion of Heroism" + }, + "RESREF": { + "type": "resref", + "value": "potion033" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Protection from Acid" + }, + "RESREF": { + "type": "resref", + "value": "potion029" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Protection from Cold" + }, + "RESREF": { + "type": "resref", + "value": "potion026" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Protection from Electricity" + }, + "RESREF": { + "type": "resref", + "value": "potion027" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Protection from Fire" + }, + "RESREF": { + "type": "resref", + "value": "potion028" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Protection from Sonic" + }, + "RESREF": { + "type": "resref", + "value": "potion030" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Remove Blindness/Deafness" + }, + "RESREF": { + "type": "resref", + "value": "potion022" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Remove Disease" + }, + "RESREF": { + "type": "resref", + "value": "potion023" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Remove Paralysis" + }, + "RESREF": { + "type": "resref", + "value": "potion021" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sannish" + }, + "RESREF": { + "type": "resref", + "value": "prc_sannish" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sneaking" + }, + "RESREF": { + "type": "resref", + "value": "potion006" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Terran Brandy" + }, + "RESREF": { + "type": "resref", + "value": "prc_terran_brndy" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ultravision" + }, + "RESREF": { + "type": "resref", + "value": "potion012" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Vial of Blood" + }, + "RESREF": { + "type": "resref", + "value": "mc_vialofblood" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Vial of Jelly" + }, + "RESREF": { + "type": "resref", + "value": "mc_vialofjelly" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Vial of Poison" + }, + "RESREF": { + "type": "resref", + "value": "mc_vialofpoison" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Vial of Tears" + }, + "RESREF": { + "type": "resref", + "value": "mc_vialoftears" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Vision" + }, + "RESREF": { + "type": "resref", + "value": "potion003" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Vodare" + }, + "RESREF": { + "type": "resref", + "value": "prc_vodare" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Water Breathing" + }, + "RESREF": { + "type": "resref", + "value": "potion035" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6753 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 26 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_546" + }, + "STRREF": { + "type": "dword", + "value": 16778211 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_551" + }, + "STRREF": { + "type": "dword", + "value": 16778213 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_553" + }, + "STRREF": { + "type": "dword", + "value": 16778237 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_554" + }, + "STRREF": { + "type": "dword", + "value": 16778235 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_555" + }, + "STRREF": { + "type": "dword", + "value": 16778239 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_556" + }, + "STRREF": { + "type": "dword", + "value": 16778197 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_557" + }, + "STRREF": { + "type": "dword", + "value": 16778199 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_558" + }, + "STRREF": { + "type": "dword", + "value": 16778201 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_559" + }, + "STRREF": { + "type": "dword", + "value": 16778225 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_560" + }, + "STRREF": { + "type": "dword", + "value": 16778227 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_561" + }, + "STRREF": { + "type": "dword", + "value": 16778229 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_566" + }, + "STRREF": { + "type": "dword", + "value": 16778241 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_567" + }, + "STRREF": { + "type": "dword", + "value": 16778243 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_569" + }, + "STRREF": { + "type": "dword", + "value": 16778353 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Stolen Dweomer" + }, + "RESREF": { + "type": "resref", + "value": "it_dweomerthief" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Aberrate" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr118" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1172" + }, + "STRREF": { + "type": "dword", + "value": 16829466 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Absorb Strength" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr403" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1173" + }, + "STRREF": { + "type": "dword", + "value": 16829468 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Abyssal Might" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr404" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1174" + }, + "STRREF": { + "type": "dword", + "value": 16829470 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Abyssal_Might" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr429" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_0" + }, + "STRREF": { + "type": "dword", + "value": 750 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Acid Fog" + }, + "RESREF": { + "type": "resref", + "value": "scroll000" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1000" + }, + "STRREF": { + "type": "dword", + "value": 16830216 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr401" + }, + "STRREF": { + "type": "dword", + "value": 16830216 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_355" + }, + "STRREF": { + "type": "dword", + "value": 383 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Acid Splash" + }, + "RESREF": { + "type": "resref", + "value": "scroll424" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1012" + }, + "STRREF": { + "type": "dword", + "value": 16830228 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr601" + }, + "STRREF": { + "type": "dword", + "value": 16830228 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Addiction" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr241" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Addiction" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr216" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1291" + }, + "STRREF": { + "type": "dword", + "value": 16829696 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1087" + }, + "STRREF": { + "type": "dword", + "value": 16830423 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr206" + }, + "STRREF": { + "type": "dword", + "value": 16830423 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1" + }, + "STRREF": { + "type": "dword", + "value": 751 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Aid" + }, + "RESREF": { + "type": "resref", + "value": "scroll001" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1431" + }, + "STRREF": { + "type": "dword", + "value": 16827968 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Amber Sarcophagus" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr717" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1267" + }, + "STRREF": { + "type": "dword", + "value": 16829648 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_373" + }, + "STRREF": { + "type": "dword", + "value": 2363 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Amplify" + }, + "RESREF": { + "type": "resref", + "value": "scroll442" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Angry Ache" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr119" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Angry Ache" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr113" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1175" + }, + "STRREF": { + "type": "dword", + "value": 16829472 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Animalistic Power" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr232" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Animalistic Power" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr206" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1323" + }, + "STRREF": { + "type": "dword", + "value": 16825030 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_2" + }, + "STRREF": { + "type": "dword", + "value": 752 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Animate Dead" + }, + "RESREF": { + "type": "resref", + "value": "scroll002" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1136" + }, + "STRREF": { + "type": "dword", + "value": 16826216 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "splscrl_animobj" + }, + "STRREF": { + "type": "dword", + "value": 16826216 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_942" + }, + "STRREF": { + "type": "dword", + "value": 16829180 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Apocalypse from the Sky" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr914" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Apocalypse from the Sky" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr901" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1176" + }, + "STRREF": { + "type": "dword", + "value": 16829474 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1451" + }, + "STRREF": { + "type": "dword", + "value": 16826983 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_981" + }, + "STRREF": { + "type": "dword", + "value": 16825536 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1331" + }, + "STRREF": { + "type": "dword", + "value": 16832080 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1370" + }, + "STRREF": { + "type": "dword", + "value": 16829340 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1369" + }, + "STRREF": { + "type": "dword", + "value": 16829338 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Augment Familiar" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr223" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1292" + }, + "STRREF": { + "type": "dword", + "value": 16825798 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_360" + }, + "STRREF": { + "type": "dword", + "value": 386 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Aura of Glory" + }, + "RESREF": { + "type": "resref", + "value": "scroll429" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_321" + }, + "STRREF": { + "type": "dword", + "value": 6338 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Aura of Vitality" + }, + "RESREF": { + "type": "resref", + "value": "scroll372" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_287" + }, + "STRREF": { + "type": "dword", + "value": 5116 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Avascular Mass" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr810" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_901" + }, + "STRREF": { + "type": "dword", + "value": 16829194 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Avasculate" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr709" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_900" + }, + "STRREF": { + "type": "dword", + "value": 16829192 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Awake" + }, + "RESREF": { + "type": "resref", + "value": "scroll363" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_303" + }, + "STRREF": { + "type": "dword", + "value": 6329 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ayailla's Radiant Burst" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr212" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1253" + }, + "STRREF": { + "type": "dword", + "value": 16829620 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_367" + }, + "STRREF": { + "type": "dword", + "value": 502 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Balagarn's Iron Horn" + }, + "RESREF": { + "type": "resref", + "value": "scroll436" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Baleful Polymorph" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr421" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Baleful Polymorph" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr502" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1301" + }, + "STRREF": { + "type": "dword", + "value": 16825818 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1064" + }, + "STRREF": { + "type": "dword", + "value": 16830368 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr107" + }, + "STRREF": { + "type": "dword", + "value": 16830368 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr203" + }, + "STRREF": { + "type": "dword", + "value": 16830368 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_454" + }, + "STRREF": { + "type": "dword", + "value": 3853 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_380" + }, + "STRREF": { + "type": "dword", + "value": 2663 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bane" + }, + "RESREF": { + "type": "resref", + "value": "scroll449" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_361" + }, + "STRREF": { + "type": "dword", + "value": 387 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Banishment" + }, + "RESREF": { + "type": "resref", + "value": "scroll430" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_5" + }, + "STRREF": { + "type": "dword", + "value": 753 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Barkskin" + }, + "RESREF": { + "type": "resref", + "value": "scroll003" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_455" + }, + "STRREF": { + "type": "dword", + "value": 3857 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1098" + }, + "STRREF": { + "type": "dword", + "value": 16830435 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr503" + }, + "STRREF": { + "type": "dword", + "value": 16830435 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1065" + }, + "STRREF": { + "type": "dword", + "value": 16830370 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_8" + }, + "STRREF": { + "type": "dword", + "value": 754 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bestow Curse" + }, + "RESREF": { + "type": "resref", + "value": "scroll004" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bestow Wound" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr120" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1177" + }, + "STRREF": { + "type": "dword", + "value": 16829479 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_393" + }, + "STRREF": { + "type": "dword", + "value": 2686 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bigby's Clenched Fist" + }, + "RESREF": { + "type": "resref", + "value": "scroll462" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_394" + }, + "STRREF": { + "type": "dword", + "value": 2687 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bigby's Crushing Hand" + }, + "RESREF": { + "type": "resref", + "value": "scroll463" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_391" + }, + "STRREF": { + "type": "dword", + "value": 2684 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bigby's Forceful Hand" + }, + "RESREF": { + "type": "resref", + "value": "scroll460" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_392" + }, + "STRREF": { + "type": "dword", + "value": 2685 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bigby's Grasping Hand" + }, + "RESREF": { + "type": "resref", + "value": "scroll461" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_390" + }, + "STRREF": { + "type": "dword", + "value": 2683 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bigby's Interposing Hand" + }, + "RESREF": { + "type": "resref", + "value": "scroll459" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1328" + }, + "STRREF": { + "type": "dword", + "value": 16825032 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1329" + }, + "STRREF": { + "type": "dword", + "value": 16825034 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_468" + }, + "STRREF": { + "type": "dword", + "value": 3737 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_979" + }, + "STRREF": { + "type": "dword", + "value": 16825540 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_476" + }, + "STRREF": { + "type": "dword", + "value": 3761 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_9" + }, + "STRREF": { + "type": "dword", + "value": 755 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Blade Barrier" + }, + "RESREF": { + "type": "resref", + "value": "scroll005" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Blade of Blood" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr114" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Blade of Blood" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr111" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1294" + }, + "STRREF": { + "type": "dword", + "value": 16826256 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_470" + }, + "STRREF": { + "type": "dword", + "value": 3743 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1346" + }, + "STRREF": { + "type": "dword", + "value": 16832225 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1154" + }, + "STRREF": { + "type": "dword", + "value": 16832004 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Blasphemy" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr705" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1019" + }, + "STRREF": { + "type": "dword", + "value": 16830236 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr402" + }, + "STRREF": { + "type": "dword", + "value": 16830236 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_11" + }, + "STRREF": { + "type": "dword", + "value": 756 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bless" + }, + "RESREF": { + "type": "resref", + "value": "scroll006" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1424" + }, + "STRREF": { + "type": "dword", + "value": 16828325 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_472" + }, + "STRREF": { + "type": "dword", + "value": 3753 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1132" + }, + "STRREF": { + "type": "dword", + "value": 16825357 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "splscrl_blsbah" + }, + "STRREF": { + "type": "dword", + "value": 16825357 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Blinding Glory" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr918" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1268" + }, + "STRREF": { + "type": "dword", + "value": 16829650 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Blindness / Deafness" + }, + "RESREF": { + "type": "resref", + "value": "scroll008" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_14" + }, + "STRREF": { + "type": "dword", + "value": 758 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_353" + }, + "STRREF": { + "type": "dword", + "value": 359 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Blood Frenzy" + }, + "RESREF": { + "type": "resref", + "value": "scroll422" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1139" + }, + "STRREF": { + "type": "dword", + "value": 16825201 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Blood of the Martyr" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr405" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1371" + }, + "STRREF": { + "type": "dword", + "value": 16829342 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1163" + }, + "STRREF": { + "type": "dword", + "value": 16823532 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr210" + }, + "STRREF": { + "type": "dword", + "value": 16823532 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bodak Birth" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr801" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1178" + }, + "STRREF": { + "type": "dword", + "value": 16829481 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_354" + }, + "STRREF": { + "type": "dword", + "value": 382 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bombardment" + }, + "RESREF": { + "type": "resref", + "value": "scroll423" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boneblade" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr306" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1179" + }, + "STRREF": { + "type": "dword", + "value": 16829483 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boneblast" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr208" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1180" + }, + "STRREF": { + "type": "dword", + "value": 16829488 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Break Enchantment" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr422" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Break Enchantment" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr503" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1302" + }, + "STRREF": { + "type": "dword", + "value": 16825820 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Brilliant Emanation" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr213" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1254" + }, + "STRREF": { + "type": "dword", + "value": 16829622 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1383" + }, + "STRREF": { + "type": "dword", + "value": 16847280 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_15" + }, + "STRREF": { + "type": "dword", + "value": 759 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bull's Strength" + }, + "RESREF": { + "type": "resref", + "value": "scroll009" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1016" + }, + "STRREF": { + "type": "dword", + "value": 16830234 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr101" + }, + "STRREF": { + "type": "dword", + "value": 16830234 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_18" + }, + "STRREF": { + "type": "dword", + "value": 760 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Burning Hands" + }, + "RESREF": { + "type": "resref", + "value": "scroll010" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Call Dretch Horde" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr516" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1181" + }, + "STRREF": { + "type": "dword", + "value": 16829490 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Call Faithful Servants" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr621" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Call Faithful Servants" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr605" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1270" + }, + "STRREF": { + "type": "dword", + "value": 16829654 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Call Lemure Horde" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr517" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1182" + }, + "STRREF": { + "type": "dword", + "value": 16829492 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_20" + }, + "STRREF": { + "type": "dword", + "value": 761 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Call Lightning" + }, + "RESREF": { + "type": "resref", + "value": "scroll011" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1425" + }, + "STRREF": { + "type": "dword", + "value": 16828338 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_352" + }, + "STRREF": { + "type": "dword", + "value": 340 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Camouflage" + }, + "RESREF": { + "type": "resref", + "value": "scroll421" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_25" + }, + "STRREF": { + "type": "dword", + "value": 763 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cat's Grace" + }, + "RESREF": { + "type": "resref", + "value": "scroll013" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_241" + }, + "STRREF": { + "type": "dword", + "value": 16789563 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Celestial Blood" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr606" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1271" + }, + "STRREF": { + "type": "dword", + "value": 16829656 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chaav's Laugh" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr510" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1272" + }, + "STRREF": { + "type": "dword", + "value": 16829658 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_28" + }, + "STRREF": { + "type": "dword", + "value": 764 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chain Lightning" + }, + "RESREF": { + "type": "resref", + "value": "scroll014" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Channeled Pyroburst" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr426" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1306" + }, + "STRREF": { + "type": "dword", + "value": 16826296 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_31" + }, + "STRREF": { + "type": "dword", + "value": 765 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Charm Monster" + }, + "RESREF": { + "type": "resref", + "value": "scroll015" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_33" + }, + "STRREF": { + "type": "dword", + "value": 766 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Charm Person" + }, + "RESREF": { + "type": "resref", + "value": "scroll016" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_35" + }, + "STRREF": { + "type": "dword", + "value": 767 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Charm Person or Animal" + }, + "RESREF": { + "type": "resref", + "value": "scroll017" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_997" + }, + "STRREF": { + "type": "dword", + "value": 16990493 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1137" + }, + "STRREF": { + "type": "dword", + "value": 16826218 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "splscrl_chillt" + }, + "STRREF": { + "type": "dword", + "value": 16826218 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_37" + }, + "STRREF": { + "type": "dword", + "value": 768 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Circle of Death" + }, + "RESREF": { + "type": "resref", + "value": "scroll018" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_40" + }, + "STRREF": { + "type": "dword", + "value": 769 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Circle of Doom" + }, + "RESREF": { + "type": "resref", + "value": "scroll019" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Clairaudience & Clairvoyance" + }, + "RESREF": { + "type": "resref", + "value": "scroll020" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_43" + }, + "STRREF": { + "type": "dword", + "value": 770 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_46" + }, + "STRREF": { + "type": "dword", + "value": 771 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Clarity" + }, + "RESREF": { + "type": "resref", + "value": "scroll021" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1116" + }, + "STRREF": { + "type": "dword", + "value": 16830453 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr203" + }, + "STRREF": { + "type": "dword", + "value": 16830453 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claws of the Bebilith" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr518" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1183" + }, + "STRREF": { + "type": "dword", + "value": 16829494 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Claws of the Savage" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr405" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1184" + }, + "STRREF": { + "type": "dword", + "value": 16829496 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1422" + }, + "STRREF": { + "type": "dword", + "value": 16828321 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_486" + }, + "STRREF": { + "type": "dword", + "value": 3794 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloud of the Achaierai" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr601" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1185" + }, + "STRREF": { + "type": "dword", + "value": 16829498 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_48" + }, + "STRREF": { + "type": "dword", + "value": 773 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloudkill" + }, + "RESREF": { + "type": "resref", + "value": "scroll023" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Clutch of Orcus" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr307" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1186" + }, + "STRREF": { + "type": "dword", + "value": 16829500 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1002" + }, + "STRREF": { + "type": "dword", + "value": 16830218 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr403" + }, + "STRREF": { + "type": "dword", + "value": 16830218 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_49" + }, + "STRREF": { + "type": "dword", + "value": 774 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Color Spray" + }, + "RESREF": { + "type": "resref", + "value": "scroll024" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_456" + }, + "STRREF": { + "type": "dword", + "value": 3859 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1436" + }, + "STRREF": { + "type": "dword", + "value": 16822632 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_899" + }, + "STRREF": { + "type": "dword", + "value": 16829190 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr212" + }, + "STRREF": { + "type": "dword", + "value": 16829190 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_50" + }, + "STRREF": { + "type": "dword", + "value": 775 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cone of Cold" + }, + "RESREF": { + "type": "resref", + "value": "scroll025" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_52" + }, + "STRREF": { + "type": "dword", + "value": 776 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Confusion" + }, + "RESREF": { + "type": "resref", + "value": "scroll026" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1138" + }, + "STRREF": { + "type": "dword", + "value": 16825353 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "splscrl_conse" + }, + "STRREF": { + "type": "dword", + "value": 16825353 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_54" + }, + "STRREF": { + "type": "dword", + "value": 777 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Contagion" + }, + "RESREF": { + "type": "resref", + "value": "scroll027" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_350" + }, + "STRREF": { + "type": "dword", + "value": 59 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Continual Flame" + }, + "RESREF": { + "type": "resref", + "value": "scroll419" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_55" + }, + "STRREF": { + "type": "dword", + "value": 778 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Control Undead" + }, + "RESREF": { + "type": "resref", + "value": "scroll028" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1455" + }, + "STRREF": { + "type": "dword", + "value": 16789764 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Convert Wand" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr511" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1273" + }, + "STRREF": { + "type": "dword", + "value": 16829660 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1066" + }, + "STRREF": { + "type": "dword", + "value": 16830372 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr101" + }, + "STRREF": { + "type": "dword", + "value": 16830372 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_959" + }, + "STRREF": { + "type": "dword", + "value": 16789902 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_960" + }, + "STRREF": { + "type": "dword", + "value": 16789904 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_57" + }, + "STRREF": { + "type": "dword", + "value": 779 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Create Greater Undead" + }, + "RESREF": { + "type": "resref", + "value": "scroll029" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1089" + }, + "STRREF": { + "type": "dword", + "value": 16830425 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr207" + }, + "STRREF": { + "type": "dword", + "value": 16830425 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_60" + }, + "STRREF": { + "type": "dword", + "value": 780 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Create Undead" + }, + "RESREF": { + "type": "resref", + "value": "scroll030" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_304" + }, + "STRREF": { + "type": "dword", + "value": 6330 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Creeping Doom" + }, + "RESREF": { + "type": "resref", + "value": "scroll364" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crown of Might" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr320" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crown of Might" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr303" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1307" + }, + "STRREF": { + "type": "dword", + "value": 16826302 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crown of Protection" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr321" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crown of Protection" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr304" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1308" + }, + "STRREF": { + "type": "dword", + "value": 16826304 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_450" + }, + "STRREF": { + "type": "dword", + "value": 3837 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1440" + }, + "STRREF": { + "type": "dword", + "value": 16847572 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crushing Fist of Spite" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr915" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1187" + }, + "STRREF": { + "type": "dword", + "value": 16829502 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_63" + }, + "STRREF": { + "type": "dword", + "value": 781 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cure Critical Wounds" + }, + "RESREF": { + "type": "resref", + "value": "scroll031" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_66" + }, + "STRREF": { + "type": "dword", + "value": 782 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cure Light Wounds" + }, + "RESREF": { + "type": "resref", + "value": "scroll032" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_68" + }, + "STRREF": { + "type": "dword", + "value": 783 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cure Minor Wounds" + }, + "RESREF": { + "type": "resref", + "value": "scroll033" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_69" + }, + "STRREF": { + "type": "dword", + "value": 784 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cure Moderate Wounds" + }, + "RESREF": { + "type": "resref", + "value": "scroll034" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_72" + }, + "STRREF": { + "type": "dword", + "value": 785 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cure Serious Wounds" + }, + "RESREF": { + "type": "resref", + "value": "scroll035" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1070" + }, + "STRREF": { + "type": "dword", + "value": 16830376 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr204" + }, + "STRREF": { + "type": "dword", + "value": 16830376 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1072" + }, + "STRREF": { + "type": "dword", + "value": 16830380 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr302" + }, + "STRREF": { + "type": "dword", + "value": 16830380 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Curse of the Putrid Husk" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr327" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1188" + }, + "STRREF": { + "type": "dword", + "value": 16829504 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_976" + }, + "STRREF": { + "type": "dword", + "value": 16789918 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cursed Blade" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr423" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1303" + }, + "STRREF": { + "type": "dword", + "value": 16825822 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Damning Darkness" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr430" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Damning Darkness" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr406" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1189" + }, + "STRREF": { + "type": "dword", + "value": 16829506 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_956" + }, + "STRREF": { + "type": "dword", + "value": 16789582 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dancing Web" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr437" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dancing Web" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr512" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1274" + }, + "STRREF": { + "type": "dword", + "value": 16829662 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_980" + }, + "STRREF": { + "type": "dword", + "value": 16825538 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_483" + }, + "STRREF": { + "type": "dword", + "value": 3781 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1375" + }, + "STRREF": { + "type": "dword", + "value": 16829350 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_75" + }, + "STRREF": { + "type": "dword", + "value": 786 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Darkness" + }, + "RESREF": { + "type": "resref", + "value": "scroll036" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1380" + }, + "STRREF": { + "type": "dword", + "value": 16832214 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_76" + }, + "STRREF": { + "type": "dword", + "value": 787 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Daze" + }, + "RESREF": { + "type": "resref", + "value": "scroll037" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_975" + }, + "STRREF": { + "type": "dword", + "value": 16789916 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_471" + }, + "STRREF": { + "type": "dword", + "value": 3750 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_457" + }, + "STRREF": { + "type": "dword", + "value": 3861 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Death by Thorns" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr703" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1190" + }, + "STRREF": { + "type": "dword", + "value": 16829508 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Death By Thorns" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr711" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_898" + }, + "STRREF": { + "type": "dword", + "value": 16825554 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_77" + }, + "STRREF": { + "type": "dword", + "value": 788 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Death Ward" + }, + "RESREF": { + "type": "resref", + "value": "scroll038" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Deep Slumber" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr317" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1170" + }, + "STRREF": { + "type": "dword", + "value": 16825812 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1162" + }, + "STRREF": { + "type": "dword", + "value": 16832052 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Deeper Darkness" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr305" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Deflect" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr224" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1293" + }, + "STRREF": { + "type": "dword", + "value": 16825800 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_78" + }, + "STRREF": { + "type": "dword", + "value": 789 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Delayed Blast Fireball" + }, + "RESREF": { + "type": "resref", + "value": "scroll039" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Demoncall" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr205" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1191" + }, + "STRREF": { + "type": "dword", + "value": 16829510 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Demonflesh" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr114" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1192" + }, + "STRREF": { + "type": "dword", + "value": 16829512 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Despoil" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr902" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1193" + }, + "STRREF": { + "type": "dword", + "value": 16829514 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_307" + }, + "STRREF": { + "type": "dword", + "value": 6332 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Destruction" + }, + "RESREF": { + "type": "resref", + "value": "scroll366" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1160" + }, + "STRREF": { + "type": "dword", + "value": 16831994 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Detect Chaos" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr110" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1157" + }, + "STRREF": { + "type": "dword", + "value": 16831988 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Detect Evil" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr107" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1374" + }, + "STRREF": { + "type": "dword", + "value": 16829348 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1158" + }, + "STRREF": { + "type": "dword", + "value": 16831990 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Detect Good" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr108" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1159" + }, + "STRREF": { + "type": "dword", + "value": 16831992 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Detect Law" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr109" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Detect Scrying" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr425" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1305" + }, + "STRREF": { + "type": "dword", + "value": 16825826 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_946" + }, + "STRREF": { + "type": "dword", + "value": 16827770 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Devil's Eye" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr328" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Devil's Eye" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr308" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1195" + }, + "STRREF": { + "type": "dword", + "value": 16829518 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Spray" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr410" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1256" + }, + "STRREF": { + "type": "dword", + "value": 16829626 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1155" + }, + "STRREF": { + "type": "dword", + "value": 16832006 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dictum" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr706" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1149" + }, + "STRREF": { + "type": "dword", + "value": 16825212 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr412" + }, + "STRREF": { + "type": "dword", + "value": 16825212 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dimension Hop" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr228" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1310" + }, + "STRREF": { + "type": "dword", + "value": 16826393 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1167" + }, + "STRREF": { + "type": "dword", + "value": 16825681 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr413" + }, + "STRREF": { + "type": "dword", + "value": 16825681 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr404" + }, + "STRREF": { + "type": "dword", + "value": 16825681 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1168" + }, + "STRREF": { + "type": "dword", + "value": 16825684 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr804" + }, + "STRREF": { + "type": "dword", + "value": 16825684 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr803" + }, + "STRREF": { + "type": "dword", + "value": 16825684 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_376" + }, + "STRREF": { + "type": "dword", + "value": 2366 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dirge" + }, + "RESREF": { + "type": "resref", + "value": "scroll445" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1448" + }, + "STRREF": { + "type": "dword", + "value": 16826977 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1430" + }, + "STRREF": { + "type": "dword", + "value": 16827961 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1021" + }, + "STRREF": { + "type": "dword", + "value": 16830238 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr602" + }, + "STRREF": { + "type": "dword", + "value": 16830238 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_81" + }, + "STRREF": { + "type": "dword", + "value": 790 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dismissal" + }, + "RESREF": { + "type": "resref", + "value": "scroll040" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_84" + }, + "STRREF": { + "type": "dword", + "value": 791 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dispel Magic" + }, + "RESREF": { + "type": "resref", + "value": "scroll041" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dispeling Touch" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr229" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1311" + }, + "STRREF": { + "type": "dword", + "value": 16826395 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_389" + }, + "STRREF": { + "type": "dword", + "value": 2679 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Displacement" + }, + "RESREF": { + "type": "resref", + "value": "scroll458" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1343" + }, + "STRREF": { + "type": "dword", + "value": 16832221 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_345" + }, + "STRREF": { + "type": "dword", + "value": 53 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Divine Favor" + }, + "RESREF": { + "type": "resref", + "value": "scroll414" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Divine Inspiration" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr122" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1255" + }, + "STRREF": { + "type": "dword", + "value": 16829624 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Divine Might" + }, + "RESREF": { + "type": "resref", + "value": "scroll464" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_86" + }, + "STRREF": { + "type": "dword", + "value": 792 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Divine Power" + }, + "RESREF": { + "type": "resref", + "value": "scroll042" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1074" + }, + "STRREF": { + "type": "dword", + "value": 16830384 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr201" + }, + "STRREF": { + "type": "dword", + "value": 16830384 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Divine Sacrifice" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr112" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Divine Sacrifice" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr124" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1275" + }, + "STRREF": { + "type": "dword", + "value": 16829664 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Divine Shield" + }, + "RESREF": { + "type": "resref", + "value": "scroll465" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_87" + }, + "STRREF": { + "type": "dword", + "value": 793 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dominate Animal" + }, + "RESREF": { + "type": "resref", + "value": "scroll043" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_88" + }, + "STRREF": { + "type": "dword", + "value": 794 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dominate Monster" + }, + "RESREF": { + "type": "resref", + "value": "scroll044" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_89" + }, + "STRREF": { + "type": "dword", + "value": 795 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dominate Person" + }, + "RESREF": { + "type": "resref", + "value": "scroll045" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_90" + }, + "STRREF": { + "type": "dword", + "value": 796 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Doom" + }, + "RESREF": { + "type": "resref", + "value": "scroll046" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Doom Scarabs" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr427" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1312" + }, + "STRREF": { + "type": "dword", + "value": 16826397 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1373" + }, + "STRREF": { + "type": "dword", + "value": 16829346 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1332" + }, + "STRREF": { + "type": "dword", + "value": 16832082 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1439" + }, + "STRREF": { + "type": "dword", + "value": 16832490 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dragon Cloud" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr803" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1257" + }, + "STRREF": { + "type": "dword", + "value": 16829628 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dread Word" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr329" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1197" + }, + "STRREF": { + "type": "dword", + "value": 16829522 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_368" + }, + "STRREF": { + "type": "dword", + "value": 508 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Drown" + }, + "RESREF": { + "type": "resref", + "value": "scroll437" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Drug Resistance" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr121" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Drug Resistance" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr115" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1198" + }, + "STRREF": { + "type": "dword", + "value": 16829524 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_288" + }, + "STRREF": { + "type": "dword", + "value": 5371 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eagle's Splendor" + }, + "RESREF": { + "type": "resref", + "value": "scroll354" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_357" + }, + "STRREF": { + "type": "dword", + "value": 384 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Earthquake" + }, + "RESREF": { + "type": "resref", + "value": "scroll426" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ectoplasmic Enhancement" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr617" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1199" + }, + "STRREF": { + "type": "dword", + "value": 16829526 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Elation" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr336" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Elation" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr214" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1276" + }, + "STRREF": { + "type": "dword", + "value": 16829666 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_986" + }, + "STRREF": { + "type": "dword", + "value": 16789943 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_370" + }, + "STRREF": { + "type": "dword", + "value": 1852 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Electric Jolt" + }, + "RESREF": { + "type": "resref", + "value": "scroll439" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1004" + }, + "STRREF": { + "type": "dword", + "value": 16830220 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr404" + }, + "STRREF": { + "type": "dword", + "value": 16830220 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_92" + }, + "STRREF": { + "type": "dword", + "value": 797 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Elemental Shield" + }, + "RESREF": { + "type": "resref", + "value": "scroll047" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_988" + }, + "STRREF": { + "type": "dword", + "value": 16789960 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_94" + }, + "STRREF": { + "type": "dword", + "value": 798 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Elemental Swarm" + }, + "RESREF": { + "type": "resref", + "value": "scroll048" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_95" + }, + "STRREF": { + "type": "dword", + "value": 799 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Endurance" + }, + "RESREF": { + "type": "resref", + "value": "scroll049" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_98" + }, + "STRREF": { + "type": "dword", + "value": 800 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Endure Elements" + }, + "RESREF": { + "type": "resref", + "value": "scroll050" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Energize Potion" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr233" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Energize Potion" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr234" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Energize Potion" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr207" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1277" + }, + "STRREF": { + "type": "dword", + "value": 16829668 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Energy Aegis" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr322" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Energy Aegis" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr305" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1313" + }, + "STRREF": { + "type": "dword", + "value": 16826399 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_311" + }, + "STRREF": { + "type": "dword", + "value": 6335 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Energy Buffer" + }, + "RESREF": { + "type": "resref", + "value": "scroll369" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_99" + }, + "STRREF": { + "type": "dword", + "value": 801 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Energy Drain" + }, + "RESREF": { + "type": "resref", + "value": "scroll051" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Energy Ebb" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr710" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Energy Ebb" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr710" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_912" + }, + "STRREF": { + "type": "dword", + "value": 16829256 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1023" + }, + "STRREF": { + "type": "dword", + "value": 16830242 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr605" + }, + "STRREF": { + "type": "dword", + "value": 16830242 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Energy Surge" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr323" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1314" + }, + "STRREF": { + "type": "dword", + "value": 16826672 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_100" + }, + "STRREF": { + "type": "dword", + "value": 802 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Enervation" + }, + "RESREF": { + "type": "resref", + "value": "scroll052" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_938" + }, + "STRREF": { + "type": "dword", + "value": 16829172 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_101" + }, + "STRREF": { + "type": "dword", + "value": 803 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Entangle" + }, + "RESREF": { + "type": "resref", + "value": "scroll053" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_349" + }, + "STRREF": { + "type": "dword", + "value": 58 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Entropic Shield" + }, + "RESREF": { + "type": "resref", + "value": "scroll418" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_195" + }, + "STRREF": { + "type": "dword", + "value": 871 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ethereal Visage" + }, + "RESREF": { + "type": "resref", + "value": "scroll121" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_324" + }, + "STRREF": { + "type": "dword", + "value": 6341 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Evard's Black Tentacles" + }, + "RESREF": { + "type": "resref", + "value": "scroll375" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_428" + }, + "STRREF": { + "type": "dword", + "value": 8943 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Evil Eye" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr330" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1201" + }, + "STRREF": { + "type": "dword", + "value": 16829530 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Evil Weather" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr802" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1203" + }, + "STRREF": { + "type": "dword", + "value": 16829534 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Exalted Fury" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr903" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1258" + }, + "STRREF": { + "type": "dword", + "value": 16829630 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Exalted Raiment" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr602" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1229" + }, + "STRREF": { + "type": "dword", + "value": 16829698 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_387" + }, + "STRREF": { + "type": "dword", + "value": 2675 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Expeditious Retreat" + }, + "RESREF": { + "type": "resref", + "value": "scroll456" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Extract Drug" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr122" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Extract Drug" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr116" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1204" + }, + "STRREF": { + "type": "dword", + "value": 16829540 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1333" + }, + "STRREF": { + "type": "dword", + "value": 16832084 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eye of the Beholder" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr712" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1202" + }, + "STRREF": { + "type": "dword", + "value": 16829532 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1442" + }, + "STRREF": { + "type": "dword", + "value": 16847576 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eyes of the Avoral" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr129" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eyes of the Avoral" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr126" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1278" + }, + "STRREF": { + "type": "dword", + "value": 16829670 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_994" + }, + "STRREF": { + "type": "dword", + "value": 16793694 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "False Life" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr225" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1295" + }, + "STRREF": { + "type": "dword", + "value": 16825806 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_103" + }, + "STRREF": { + "type": "dword", + "value": 804 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fear" + }, + "RESREF": { + "type": "resref", + "value": "scroll054" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_104" + }, + "STRREF": { + "type": "dword", + "value": 805 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Feeblemind" + }, + "RESREF": { + "type": "resref", + "value": "scroll055" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fiendish Clarity" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr713" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fiendish Clarity" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr704" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1206" + }, + "STRREF": { + "type": "dword", + "value": 16829544 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_327" + }, + "STRREF": { + "type": "dword", + "value": 6343 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Find Traps" + }, + "RESREF": { + "type": "resref", + "value": "scroll377" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_105" + }, + "STRREF": { + "type": "dword", + "value": 806 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Finger of Death" + }, + "RESREF": { + "type": "resref", + "value": "scroll056" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1444" + }, + "STRREF": { + "type": "dword", + "value": 16847580 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1006" + }, + "STRREF": { + "type": "dword", + "value": 16830222 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr405" + }, + "STRREF": { + "type": "dword", + "value": 16830222 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1352" + }, + "STRREF": { + "type": "dword", + "value": 16832237 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_106" + }, + "STRREF": { + "type": "dword", + "value": 807 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fire Storm" + }, + "RESREF": { + "type": "resref", + "value": "scroll057" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1347" + }, + "STRREF": { + "type": "dword", + "value": 16832227 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_108" + }, + "STRREF": { + "type": "dword", + "value": 808 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fireball" + }, + "RESREF": { + "type": "resref", + "value": "scroll058" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_371" + }, + "STRREF": { + "type": "dword", + "value": 1895 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Firebrand" + }, + "RESREF": { + "type": "resref", + "value": "scroll440" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1075" + }, + "STRREF": { + "type": "dword", + "value": 16830386 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr205" + }, + "STRREF": { + "type": "dword", + "value": 16830386 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1345" + }, + "STRREF": { + "type": "dword", + "value": 16832223 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_110" + }, + "STRREF": { + "type": "dword", + "value": 809 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Flame Arrow" + }, + "RESREF": { + "type": "resref", + "value": "scroll059" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_113" + }, + "STRREF": { + "type": "dword", + "value": 810 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Flame Lash" + }, + "RESREF": { + "type": "resref", + "value": "scroll060" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_115" + }, + "STRREF": { + "type": "dword", + "value": 811 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Flame Strike" + }, + "RESREF": { + "type": "resref", + "value": "scroll061" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_477" + }, + "STRREF": { + "type": "dword", + "value": 3763 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_347" + }, + "STRREF": { + "type": "dword", + "value": 56 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Flare" + }, + "RESREF": { + "type": "resref", + "value": "scroll416" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1092" + }, + "STRREF": { + "type": "dword", + "value": 16830427 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr305" + }, + "STRREF": { + "type": "dword", + "value": 16830427 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1093" + }, + "STRREF": { + "type": "dword", + "value": 16830429 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr802" + }, + "STRREF": { + "type": "dword", + "value": 16830429 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Flesh Armor" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr431" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1207" + }, + "STRREF": { + "type": "dword", + "value": 16829546 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Flesh Ripper" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr309" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1208" + }, + "STRREF": { + "type": "dword", + "value": 16829548 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_398" + }, + "STRREF": { + "type": "dword", + "value": 3044 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Flesh to Stone" + }, + "RESREF": { + "type": "resref", + "value": "scroll485" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1382" + }, + "STRREF": { + "type": "dword", + "value": 16827179 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_995" + }, + "STRREF": { + "type": "dword", + "value": 16990488 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1049" + }, + "STRREF": { + "type": "dword", + "value": 16830288 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Forceblast" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr301" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1429" + }, + "STRREF": { + "type": "dword", + "value": 16828346 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_294" + }, + "STRREF": { + "type": "dword", + "value": 5369 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fox's Cunning" + }, + "RESREF": { + "type": "resref", + "value": "scroll356" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_118" + }, + "STRREF": { + "type": "dword", + "value": 812 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Freedom of Movement" + }, + "RESREF": { + "type": "resref", + "value": "scroll062" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_119" + }, + "STRREF": { + "type": "dword", + "value": 813 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_458" + }, + "STRREF": { + "type": "dword", + "value": 3863 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_192" + }, + "STRREF": { + "type": "dword", + "value": 870 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ghostly Visage" + }, + "RESREF": { + "type": "resref", + "value": "scroll120" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ghoul Gauntlet" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr615" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_911" + }, + "STRREF": { + "type": "dword", + "value": 16829214 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_120" + }, + "STRREF": { + "type": "dword", + "value": 814 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ghoul Touch" + }, + "RESREF": { + "type": "resref", + "value": "scroll012" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_947" + }, + "STRREF": { + "type": "dword", + "value": 16828715 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1051" + }, + "STRREF": { + "type": "dword", + "value": 16830290 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr201" + }, + "STRREF": { + "type": "dword", + "value": 16830290 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_121" + }, + "STRREF": { + "type": "dword", + "value": 815 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Globe of Invulnerability" + }, + "RESREF": { + "type": "resref", + "value": "scroll065" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_484" + }, + "STRREF": { + "type": "dword", + "value": 3783 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_122" + }, + "STRREF": { + "type": "dword", + "value": 816 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Grease" + }, + "RESREF": { + "type": "resref", + "value": "scroll066" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_453" + }, + "STRREF": { + "type": "dword", + "value": 3850 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1435" + }, + "STRREF": { + "type": "dword", + "value": 16827530 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_123" + }, + "STRREF": { + "type": "dword", + "value": 817 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Dispelling" + }, + "RESREF": { + "type": "resref", + "value": "scroll067" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1365" + }, + "STRREF": { + "type": "dword", + "value": 16832264 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1077" + }, + "STRREF": { + "type": "dword", + "value": 16830388 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr502" + }, + "STRREF": { + "type": "dword", + "value": 16830388 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_984" + }, + "STRREF": { + "type": "dword", + "value": 16789937 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_933" + }, + "STRREF": { + "type": "dword", + "value": 16824712 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1036" + }, + "STRREF": { + "type": "dword", + "value": 16830274 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr501" + }, + "STRREF": { + "type": "dword", + "value": 16830274 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Luminous Armor" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr412" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1283" + }, + "STRREF": { + "type": "dword", + "value": 16829680 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_384" + }, + "STRREF": { + "type": "dword", + "value": 2923 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Magic Fang" + }, + "RESREF": { + "type": "resref", + "value": "scroll453" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_480" + }, + "STRREF": { + "type": "dword", + "value": 3769 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_962" + }, + "STRREF": { + "type": "dword", + "value": 16789908 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_126" + }, + "STRREF": { + "type": "dword", + "value": 819 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Planar Binding" + }, + "RESREF": { + "type": "resref", + "value": "scroll069" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_992" + }, + "STRREF": { + "type": "dword", + "value": 16790118 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_127" + }, + "STRREF": { + "type": "dword", + "value": 820 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Restoration" + }, + "RESREF": { + "type": "resref", + "value": "scroll070" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_374" + }, + "STRREF": { + "type": "dword", + "value": 2364 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Sanctuary" + }, + "RESREF": { + "type": "resref", + "value": "scroll443" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1447" + }, + "STRREF": { + "type": "dword", + "value": 16826974 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Shadow Conjunction" + }, + "RESREF": { + "type": "resref", + "value": "scroll349" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Shadow Conjunction" + }, + "RESREF": { + "type": "resref", + "value": "scroll350" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Shadow Conjunction" + }, + "RESREF": { + "type": "resref", + "value": "scroll351" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Shadow Conjunction" + }, + "RESREF": { + "type": "resref", + "value": "scroll352" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Shadow Conjunction" + }, + "RESREF": { + "type": "resref", + "value": "scroll353" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_128" + }, + "STRREF": { + "type": "dword", + "value": 821 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_935" + }, + "STRREF": { + "type": "dword", + "value": 16828894 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_129" + }, + "STRREF": { + "type": "dword", + "value": 822 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Spell Breach" + }, + "RESREF": { + "type": "resref", + "value": "scroll072" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_130" + }, + "STRREF": { + "type": "dword", + "value": 823 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Spell Mantle" + }, + "RESREF": { + "type": "resref", + "value": "scoll073" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_131" + }, + "STRREF": { + "type": "dword", + "value": 824 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greater Stoneskin" + }, + "RESREF": { + "type": "resref", + "value": "scroll074" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1150" + }, + "STRREF": { + "type": "dword", + "value": 16825312 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr706" + }, + "STRREF": { + "type": "dword", + "value": 16825312 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_463" + }, + "STRREF": { + "type": "dword", + "value": 16790132 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1125" + }, + "STRREF": { + "type": "dword", + "value": 16830503 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr304" + }, + "STRREF": { + "type": "dword", + "value": 16830503 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Grim Revenge" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr432" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1209" + }, + "STRREF": { + "type": "dword", + "value": 16829550 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_410" + }, + "STRREF": { + "type": "dword", + "value": 2682 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gust of Wind" + }, + "RESREF": { + "type": "resref", + "value": "scroll075" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gut Wrench" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr813" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1210" + }, + "STRREF": { + "type": "dword", + "value": 16829552 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1118" + }, + "STRREF": { + "type": "dword", + "value": 16830457 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr110" + }, + "STRREF": { + "type": "dword", + "value": 16830457 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Halt" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr324" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1315" + }, + "STRREF": { + "type": "dword", + "value": 16826406 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1441" + }, + "STRREF": { + "type": "dword", + "value": 16847574 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hammer of Righteousness" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr319" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1259" + }, + "STRREF": { + "type": "dword", + "value": 16829632 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_133" + }, + "STRREF": { + "type": "dword", + "value": 826 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hammer of the Gods" + }, + "RESREF": { + "type": "resref", + "value": "scroll076" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_136" + }, + "STRREF": { + "type": "dword", + "value": 827 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Harm" + }, + "RESREF": { + "type": "resref", + "value": "scroll077" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_137" + }, + "STRREF": { + "type": "dword", + "value": 828 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Haste" + }, + "RESREF": { + "type": "resref", + "value": "scroll078" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_139" + }, + "STRREF": { + "type": "dword", + "value": 829 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heal" + }, + "RESREF": { + "type": "resref", + "value": "scroll079" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1376" + }, + "STRREF": { + "type": "dword", + "value": 16829352 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_140" + }, + "STRREF": { + "type": "dword", + "value": 830 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Healing Circle" + }, + "RESREF": { + "type": "resref", + "value": "scroll080" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_452" + }, + "STRREF": { + "type": "dword", + "value": 3848 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1334" + }, + "STRREF": { + "type": "dword", + "value": 16832086 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heartache" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr117" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1211" + }, + "STRREF": { + "type": "dword", + "value": 16829554 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heartclutch" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr505" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1212" + }, + "STRREF": { + "type": "dword", + "value": 16829556 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1035" + }, + "STRREF": { + "type": "dword", + "value": 16830272 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr202" + }, + "STRREF": { + "type": "dword", + "value": 16830272 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1384" + }, + "STRREF": { + "type": "dword", + "value": 16847282 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_955" + }, + "STRREF": { + "type": "dword", + "value": 16847570 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_142" + }, + "STRREF": { + "type": "dword", + "value": 831 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hold Animal" + }, + "RESREF": { + "type": "resref", + "value": "scroll081" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_143" + }, + "STRREF": { + "type": "dword", + "value": 832 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hold Monster" + }, + "RESREF": { + "type": "resref", + "value": "scroll082" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_144" + }, + "STRREF": { + "type": "dword", + "value": 833 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hold Person" + }, + "RESREF": { + "type": "resref", + "value": "scroll083" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1427" + }, + "STRREF": { + "type": "dword", + "value": 16828342 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_473" + }, + "STRREF": { + "type": "dword", + "value": 3755 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1153" + }, + "STRREF": { + "type": "dword", + "value": 16832002 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Holy Word" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr704" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_459" + }, + "STRREF": { + "type": "dword", + "value": 3865 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_308" + }, + "STRREF": { + "type": "dword", + "value": 6333 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Horrid Wilting" + }, + "RESREF": { + "type": "resref", + "value": "scroll367" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hound of Doom" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr318" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1299" + }, + "STRREF": { + "type": "dword", + "value": 16825814 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1010" + }, + "STRREF": { + "type": "dword", + "value": 16830226 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr302" + }, + "STRREF": { + "type": "dword", + "value": 16830226 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_478" + }, + "STRREF": { + "type": "dword", + "value": 3765 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1349" + }, + "STRREF": { + "type": "dword", + "value": 16832231 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_310" + }, + "STRREF": { + "type": "dword", + "value": 6334 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ice Storm" + }, + "RESREF": { + "type": "resref", + "value": "scroll368" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_147" + }, + "STRREF": { + "type": "dword", + "value": 836 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Identify" + }, + "RESREF": { + "type": "resref", + "value": "scroll086" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1101" + }, + "STRREF": { + "type": "dword", + "value": 16830437 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr409" + }, + "STRREF": { + "type": "dword", + "value": 16830437 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_148" + }, + "STRREF": { + "type": "dword", + "value": 837 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Implosion" + }, + "RESREF": { + "type": "resref", + "value": "scroll087" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_149" + }, + "STRREF": { + "type": "dword", + "value": 838 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Improved Invisibility" + }, + "RESREF": { + "type": "resref", + "value": "scroll088" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1103" + }, + "STRREF": { + "type": "dword", + "value": 16830439 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr306" + }, + "STRREF": { + "type": "dword", + "value": 16830439 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_150" + }, + "STRREF": { + "type": "dword", + "value": 839 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Incendiary Cloud" + }, + "RESREF": { + "type": "resref", + "value": "scroll089" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_377" + }, + "STRREF": { + "type": "dword", + "value": 2368 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Inferno" + }, + "RESREF": { + "type": "resref", + "value": "scroll446" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_451" + }, + "STRREF": { + "type": "dword", + "value": 3844 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_366" + }, + "STRREF": { + "type": "dword", + "value": 392 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Inflict Critical Wounds" + }, + "RESREF": { + "type": "resref", + "value": "scroll435" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_363" + }, + "STRREF": { + "type": "dword", + "value": 389 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Inflict Light Wounds" + }, + "RESREF": { + "type": "resref", + "value": "scroll432" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_362" + }, + "STRREF": { + "type": "dword", + "value": 388 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Inflict Minor Wounds" + }, + "RESREF": { + "type": "resref", + "value": "scroll431" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_364" + }, + "STRREF": { + "type": "dword", + "value": 390 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Inflict Moderate Wounds" + }, + "RESREF": { + "type": "resref", + "value": "scroll433" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_365" + }, + "STRREF": { + "type": "dword", + "value": 391 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Inflict Serious Wounds" + }, + "RESREF": { + "type": "resref", + "value": "scroll434" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1165" + }, + "STRREF": { + "type": "dword", + "value": 16832059 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr701" + }, + "STRREF": { + "type": "dword", + "value": 16832059 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_151" + }, + "STRREF": { + "type": "dword", + "value": 840 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Invisibility" + }, + "RESREF": { + "type": "resref", + "value": "scroll090" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_152" + }, + "STRREF": { + "type": "dword", + "value": 841 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Invisibility Purge" + }, + "RESREF": { + "type": "resref", + "value": "scroll091" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_153" + }, + "STRREF": { + "type": "dword", + "value": 842 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Invisibility Sphere" + }, + "RESREF": { + "type": "resref", + "value": "scroll092" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_937" + }, + "STRREF": { + "type": "dword", + "value": 16826154 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_460" + }, + "STRREF": { + "type": "dword", + "value": 3867 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_379" + }, + "STRREF": { + "type": "dword", + "value": 2378 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Isaac's Greater Missile Storm" + }, + "RESREF": { + "type": "resref", + "value": "scroll448" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_378" + }, + "STRREF": { + "type": "dword", + "value": 2377 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Isaac's Lesser Missile Storm" + }, + "RESREF": { + "type": "resref", + "value": "scroll447" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_936" + }, + "STRREF": { + "type": "dword", + "value": 16826011 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_474" + }, + "STRREF": { + "type": "dword", + "value": 3757 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1316" + }, + "STRREF": { + "type": "dword", + "value": 16826679 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Kelgore's Fire Orb" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr116" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_154" + }, + "STRREF": { + "type": "dword", + "value": 843 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Knock" + }, + "RESREF": { + "type": "resref", + "value": "scroll093" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lahm's Finger Darts" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr209" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1216" + }, + "STRREF": { + "type": "dword", + "value": 16829564 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lantern Light" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr130" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lantern Light" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr125" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1280" + }, + "STRREF": { + "type": "dword", + "value": 16829674 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Last Judgement" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr815" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Last Judgement" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr804" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1281" + }, + "STRREF": { + "type": "dword", + "value": 16829676 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_326" + }, + "STRREF": { + "type": "dword", + "value": 6342 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Legend Lore" + }, + "RESREF": { + "type": "resref", + "value": "scroll376" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1067" + }, + "STRREF": { + "type": "dword", + "value": 16830374 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr301" + }, + "STRREF": { + "type": "dword", + "value": 16830374 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1071" + }, + "STRREF": { + "type": "dword", + "value": 16830378 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr304" + }, + "STRREF": { + "type": "dword", + "value": 16830378 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1073" + }, + "STRREF": { + "type": "dword", + "value": 16830382 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr503" + }, + "STRREF": { + "type": "dword", + "value": 16830382 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1084" + }, + "STRREF": { + "type": "dword", + "value": 16830396 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr403" + }, + "STRREF": { + "type": "dword", + "value": 16830396 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1054" + }, + "STRREF": { + "type": "dword", + "value": 16830348 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr102" + }, + "STRREF": { + "type": "dword", + "value": 16830348 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1056" + }, + "STRREF": { + "type": "dword", + "value": 16830352 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr103" + }, + "STRREF": { + "type": "dword", + "value": 16830352 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lesser Deflect" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr115" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1309" + }, + "STRREF": { + "type": "dword", + "value": 16826391 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_155" + }, + "STRREF": { + "type": "dword", + "value": 844 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lesser Dispel" + }, + "RESREF": { + "type": "resref", + "value": "scroll094" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1058" + }, + "STRREF": { + "type": "dword", + "value": 16830356 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr104" + }, + "STRREF": { + "type": "dword", + "value": 16830356 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1060" + }, + "STRREF": { + "type": "dword", + "value": 16830360 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr105" + }, + "STRREF": { + "type": "dword", + "value": 16830360 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_157" + }, + "STRREF": { + "type": "dword", + "value": 845 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lesser Mind Blank" + }, + "RESREF": { + "type": "resref", + "value": "scroll095" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_961" + }, + "STRREF": { + "type": "dword", + "value": 16789906 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_158" + }, + "STRREF": { + "type": "dword", + "value": 846 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lesser Planar Binding" + }, + "RESREF": { + "type": "resref", + "value": "scroll096" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_159" + }, + "STRREF": { + "type": "dword", + "value": 847 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lesser Restoration" + }, + "RESREF": { + "type": "resref", + "value": "scroll097" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lesser Shivering Touch" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr125" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lesser Shivering Touch" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr121" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1251" + }, + "STRREF": { + "type": "dword", + "value": 16829616 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1062" + }, + "STRREF": { + "type": "dword", + "value": 16830364 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr106" + }, + "STRREF": { + "type": "dword", + "value": 16830364 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_160" + }, + "STRREF": { + "type": "dword", + "value": 848 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lesser Spell Breach" + }, + "RESREF": { + "type": "resref", + "value": "scroll098" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_161" + }, + "STRREF": { + "type": "dword", + "value": 849 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lesser Spell Mantle" + }, + "RESREF": { + "type": "resref", + "value": "scroll099" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_892" + }, + "STRREF": { + "type": "dword", + "value": 16790124 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1335" + }, + "STRREF": { + "type": "dword", + "value": 16832088 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_162" + }, + "STRREF": { + "type": "dword", + "value": 850 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light" + }, + "RESREF": { + "type": "resref", + "value": "scroll100" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_164" + }, + "STRREF": { + "type": "dword", + "value": 851 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lightning Bolt" + }, + "RESREF": { + "type": "resref", + "value": "scroll101" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1079" + }, + "STRREF": { + "type": "dword", + "value": 16830390 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr102" + }, + "STRREF": { + "type": "dword", + "value": 16830390 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Liquid Pain" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr433" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1217" + }, + "STRREF": { + "type": "dword", + "value": 16829566 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1080" + }, + "STRREF": { + "type": "dword", + "value": 16830392 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr202" + }, + "STRREF": { + "type": "dword", + "value": 16830392 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1449" + }, + "STRREF": { + "type": "dword", + "value": 16826979 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1450" + }, + "STRREF": { + "type": "dword", + "value": 16826981 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1385" + }, + "STRREF": { + "type": "dword", + "value": 16847284 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1031" + }, + "STRREF": { + "type": "dword", + "value": 16830263 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr407" + }, + "STRREF": { + "type": "dword", + "value": 16830263 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Luminous Armor" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr215" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1282" + }, + "STRREF": { + "type": "dword", + "value": 16829678 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_167" + }, + "STRREF": { + "type": "dword", + "value": 852 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mage Armor" + }, + "RESREF": { + "type": "resref", + "value": "scroll102" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_945" + }, + "STRREF": { + "type": "dword", + "value": 16829186 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Magic Circle against Alignment" + }, + "RESREF": { + "type": "resref", + "value": "scroll103" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Magic Circle against Alignment" + }, + "RESREF": { + "type": "resref", + "value": "scroll104" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Magic Circle against Alignment" + }, + "RESREF": { + "type": "resref", + "value": "scroll105" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Magic Circle against Alignment" + }, + "RESREF": { + "type": "resref", + "value": "scroll106" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_168" + }, + "STRREF": { + "type": "dword", + "value": 853 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Magic Circle against Chaos" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr308" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_169" + }, + "STRREF": { + "type": "dword", + "value": 854 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Magic Circle against Evil" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr309" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_170" + }, + "STRREF": { + "type": "dword", + "value": 855 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Magic Circle against Good" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr310" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_171" + }, + "STRREF": { + "type": "dword", + "value": 856 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Magic Circle against Law" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr311" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_383" + }, + "STRREF": { + "type": "dword", + "value": 2670 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Magic Fang" + }, + "RESREF": { + "type": "resref", + "value": "scroll452" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_172" + }, + "STRREF": { + "type": "dword", + "value": 857 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Magic Missile" + }, + "RESREF": { + "type": "resref", + "value": "scroll107" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_954" + }, + "STRREF": { + "type": "dword", + "value": 16789761 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_481" + }, + "STRREF": { + "type": "dword", + "value": 3771 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_479" + }, + "STRREF": { + "type": "dword", + "value": 3767 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1022" + }, + "STRREF": { + "type": "dword", + "value": 16830240 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr801" + }, + "STRREF": { + "type": "dword", + "value": 16830240 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Masochism" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr337" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Masochism" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr320" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1290" + }, + "STRREF": { + "type": "dword", + "value": 16829694 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_888" + }, + "STRREF": { + "type": "dword", + "value": 16790144 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mass Blindness / Deafness" + }, + "RESREF": { + "type": "resref", + "value": "scroll110" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_179" + }, + "STRREF": { + "type": "dword", + "value": 860 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1024" + }, + "STRREF": { + "type": "dword", + "value": 16830249 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr603" + }, + "STRREF": { + "type": "dword", + "value": 16830249 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_386" + }, + "STRREF": { + "type": "dword", + "value": 2674 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mass Camouflage" + }, + "RESREF": { + "type": "resref", + "value": "scroll455" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1025" + }, + "STRREF": { + "type": "dword", + "value": 16830251 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr604" + }, + "STRREF": { + "type": "dword", + "value": 16830251 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_180" + }, + "STRREF": { + "type": "dword", + "value": 861 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mass Charm" + }, + "RESREF": { + "type": "resref", + "value": "scroll111" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1133" + }, + "STRREF": { + "type": "dword", + "value": 16825365 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "splscrl_contag" + }, + "STRREF": { + "type": "dword", + "value": 16825365 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1044" + }, + "STRREF": { + "type": "dword", + "value": 16830282 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr801" + }, + "STRREF": { + "type": "dword", + "value": 16830282 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1037" + }, + "STRREF": { + "type": "dword", + "value": 16830276 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr501" + }, + "STRREF": { + "type": "dword", + "value": 16830276 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1040" + }, + "STRREF": { + "type": "dword", + "value": 16830278 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr601" + }, + "STRREF": { + "type": "dword", + "value": 16830278 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1042" + }, + "STRREF": { + "type": "dword", + "value": 16830280 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr701" + }, + "STRREF": { + "type": "dword", + "value": 16830280 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1117" + }, + "STRREF": { + "type": "dword", + "value": 16830455 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr901" + }, + "STRREF": { + "type": "dword", + "value": 16830455 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1026" + }, + "STRREF": { + "type": "dword", + "value": 16830253 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr606" + }, + "STRREF": { + "type": "dword", + "value": 16830253 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1027" + }, + "STRREF": { + "type": "dword", + "value": 16830255 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr607" + }, + "STRREF": { + "type": "dword", + "value": 16830255 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_939" + }, + "STRREF": { + "type": "dword", + "value": 16829174 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1356" + }, + "STRREF": { + "type": "dword", + "value": 16832245 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1028" + }, + "STRREF": { + "type": "dword", + "value": 16830257 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr608" + }, + "STRREF": { + "type": "dword", + "value": 16830257 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_983" + }, + "STRREF": { + "type": "dword", + "value": 16824714 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_182" + }, + "STRREF": { + "type": "dword", + "value": 863 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mass Haste" + }, + "RESREF": { + "type": "resref", + "value": "scroll113" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_183" + }, + "STRREF": { + "type": "dword", + "value": 864 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mass Heal" + }, + "RESREF": { + "type": "resref", + "value": "scroll114" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1015" + }, + "STRREF": { + "type": "dword", + "value": 16830232 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr901" + }, + "STRREF": { + "type": "dword", + "value": 16830232 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1014" + }, + "STRREF": { + "type": "dword", + "value": 16830230 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr704" + }, + "STRREF": { + "type": "dword", + "value": 16830230 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_932" + }, + "STRREF": { + "type": "dword", + "value": 16824710 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_929" + }, + "STRREF": { + "type": "dword", + "value": 16824704 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_930" + }, + "STRREF": { + "type": "dword", + "value": 16824706 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_931" + }, + "STRREF": { + "type": "dword", + "value": 16824708 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_894" + }, + "STRREF": { + "type": "dword", + "value": 16790136 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1029" + }, + "STRREF": { + "type": "dword", + "value": 16830259 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr609" + }, + "STRREF": { + "type": "dword", + "value": 16830259 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_941" + }, + "STRREF": { + "type": "dword", + "value": 16829178 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_952" + }, + "STRREF": { + "type": "dword", + "value": 16789757 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1030" + }, + "STRREF": { + "type": "dword", + "value": 16830261 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr408" + }, + "STRREF": { + "type": "dword", + "value": 16830261 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1166" + }, + "STRREF": { + "type": "dword", + "value": 16825704 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr803" + }, + "STRREF": { + "type": "dword", + "value": 16825704 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_184" + }, + "STRREF": { + "type": "dword", + "value": 865 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Melf's Acid Arrow" + }, + "RESREF": { + "type": "resref", + "value": "scroll115" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_461" + }, + "STRREF": { + "type": "dword", + "value": 3869 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_462" + }, + "STRREF": { + "type": "dword", + "value": 3871 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_187" + }, + "STRREF": { + "type": "dword", + "value": 866 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Meteor Swarm" + }, + "RESREF": { + "type": "resref", + "value": "scroll116" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_188" + }, + "STRREF": { + "type": "dword", + "value": 867 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mind Blank" + }, + "RESREF": { + "type": "resref", + "value": "scroll117" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_189" + }, + "STRREF": { + "type": "dword", + "value": 868 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mind Fog" + }, + "RESREF": { + "type": "resref", + "value": "scroll118" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_190" + }, + "STRREF": { + "type": "dword", + "value": 869 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Minor Globe of Invulnerability" + }, + "RESREF": { + "type": "resref", + "value": "scroll119" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1164" + }, + "STRREF": { + "type": "dword", + "value": 16823538 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr211" + }, + "STRREF": { + "type": "dword", + "value": 16823538 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_977" + }, + "STRREF": { + "type": "dword", + "value": 16789920 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Morality Undone" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr519" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Morality Undone" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr506" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1218" + }, + "STRREF": { + "type": "dword", + "value": 16829568 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_197" + }, + "STRREF": { + "type": "dword", + "value": 872 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mordenkainen's Disjunction" + }, + "RESREF": { + "type": "resref", + "value": "scroll122" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1053" + }, + "STRREF": { + "type": "dword", + "value": 16830345 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr702" + }, + "STRREF": { + "type": "dword", + "value": 16830345 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_198" + }, + "STRREF": { + "type": "dword", + "value": 873 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mordenkainen's Sword" + }, + "RESREF": { + "type": "resref", + "value": "scroll123" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1130" + }, + "STRREF": { + "type": "dword", + "value": 16825355 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "splscrl_natav" + }, + "STRREF": { + "type": "dword", + "value": 16825355 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_200" + }, + "STRREF": { + "type": "dword", + "value": 874 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Nature's Balance" + }, + "RESREF": { + "type": "resref", + "value": "scroll124" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_903" + }, + "STRREF": { + "type": "dword", + "value": 16829198 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necrotic Bloat" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr316" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necrotic Bloat" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr316" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_905" + }, + "STRREF": { + "type": "dword", + "value": 16829202 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necrotic Burst" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr514" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necrotic Burst" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr514" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_907" + }, + "STRREF": { + "type": "dword", + "value": 16829206 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necrotic Cyst" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr222" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necrotic Cyst" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr222" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_904" + }, + "STRREF": { + "type": "dword", + "value": 16829200 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necrotic Domination" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr419" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necrotic Domination" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr419" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_906" + }, + "STRREF": { + "type": "dword", + "value": 16829204 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necrotic Empowerment" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr811" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necrotic Empowerment" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr811" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_909" + }, + "STRREF": { + "type": "dword", + "value": 16829210 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necrotic Eruption" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr616" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necrotic Eruption" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr616" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_908" + }, + "STRREF": { + "type": "dword", + "value": 16829208 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necrotic Termination" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr913" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Necrotic Termination" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr913" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_910" + }, + "STRREF": { + "type": "dword", + "value": 16829212 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_314" + }, + "STRREF": { + "type": "dword", + "value": 6336 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Negative Energy Burst" + }, + "RESREF": { + "type": "resref", + "value": "scroll370" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_201" + }, + "STRREF": { + "type": "dword", + "value": 875 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Negative Energy Protection" + }, + "RESREF": { + "type": "resref", + "value": "scroll125" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_316" + }, + "STRREF": { + "type": "dword", + "value": 6337 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Negative Energy Ray" + }, + "RESREF": { + "type": "resref", + "value": "scroll371" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_204" + }, + "STRREF": { + "type": "dword", + "value": 876 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Neutralize Poison" + }, + "RESREF": { + "type": "resref", + "value": "scroll126" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Night's Caress" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr515" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Night's Caress" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr515" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_913" + }, + "STRREF": { + "type": "dword", + "value": 16829254 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_943" + }, + "STRREF": { + "type": "dword", + "value": 16829182 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1106" + }, + "STRREF": { + "type": "dword", + "value": 16830441 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr108" + }, + "STRREF": { + "type": "dword", + "value": 16830441 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1109" + }, + "STRREF": { + "type": "dword", + "value": 16830443 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr705" + }, + "STRREF": { + "type": "dword", + "value": 16830443 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1452" + }, + "STRREF": { + "type": "dword", + "value": 16826985 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1434" + }, + "STRREF": { + "type": "dword", + "value": 16832075 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_351" + }, + "STRREF": { + "type": "dword", + "value": 283 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "One with the Land" + }, + "RESREF": { + "type": "resref", + "value": "scroll420" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1355" + }, + "STRREF": { + "type": "dword", + "value": 16832243 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1358" + }, + "STRREF": { + "type": "dword", + "value": 16832251 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Otiluke's Resilient Sphere" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr420" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1344" + }, + "STRREF": { + "type": "dword", + "value": 16829196 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_369" + }, + "STRREF": { + "type": "dword", + "value": 1774 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_291" + }, + "STRREF": { + "type": "dword", + "value": 5370 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Owl's Wisdom" + }, + "RESREF": { + "type": "resref", + "value": "scroll355" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1081" + }, + "STRREF": { + "type": "dword", + "value": 16830394 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr402" + }, + "STRREF": { + "type": "dword", + "value": 16830394 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1147" + }, + "STRREF": { + "type": "dword", + "value": 16826310 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr703" + }, + "STRREF": { + "type": "dword", + "value": 16826310 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr802" + }, + "STRREF": { + "type": "dword", + "value": 16826310 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_205" + }, + "STRREF": { + "type": "dword", + "value": 877 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Phantasmal Killer" + }, + "RESREF": { + "type": "resref", + "value": "scroll127" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Phoenix Fire" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr707" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1261" + }, + "STRREF": { + "type": "dword", + "value": 16829636 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1446" + }, + "STRREF": { + "type": "dword", + "value": 16847584 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_382" + }, + "STRREF": { + "type": "dword", + "value": 2667 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Planar Ally" + }, + "RESREF": { + "type": "resref", + "value": "scroll451" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_206" + }, + "STRREF": { + "type": "dword", + "value": 878 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Planar Binding" + }, + "RESREF": { + "type": "resref", + "value": "scroll128" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_207" + }, + "STRREF": { + "type": "dword", + "value": 879 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Poison" + }, + "RESREF": { + "type": "resref", + "value": "scroll129" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1437" + }, + "STRREF": { + "type": "dword", + "value": 16827427 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_208" + }, + "STRREF": { + "type": "dword", + "value": 880 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Polymorph Self" + }, + "RESREF": { + "type": "resref", + "value": "scroll130" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Power Leech" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr520" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1219" + }, + "STRREF": { + "type": "dword", + "value": 16829570 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_978" + }, + "STRREF": { + "type": "dword", + "value": 16789922 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_209" + }, + "STRREF": { + "type": "dword", + "value": 881 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Power Word, Kill" + }, + "RESREF": { + "type": "resref", + "value": "scroll131" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_210" + }, + "STRREF": { + "type": "dword", + "value": 882 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Power Word, Stun" + }, + "RESREF": { + "type": "resref", + "value": "scroll132" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1145" + }, + "STRREF": { + "type": "dword", + "value": 16826308 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr602" + }, + "STRREF": { + "type": "dword", + "value": 16826308 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_211" + }, + "STRREF": { + "type": "dword", + "value": 883 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Prayer" + }, + "RESREF": { + "type": "resref", + "value": "scroll133" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_212" + }, + "STRREF": { + "type": "dword", + "value": 884 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Premonition" + }, + "RESREF": { + "type": "resref", + "value": "scroll134" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1357" + }, + "STRREF": { + "type": "dword", + "value": 16832247 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1362" + }, + "STRREF": { + "type": "dword", + "value": 16832259 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_213" + }, + "STRREF": { + "type": "dword", + "value": 885 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Prismatic Spray" + }, + "RESREF": { + "type": "resref", + "value": "scroll135" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1360" + }, + "STRREF": { + "type": "dword", + "value": 16832255 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Protection from Alignment" + }, + "RESREF": { + "type": "resref", + "value": "scroll136" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Protection from Alignment" + }, + "RESREF": { + "type": "resref", + "value": "scroll138" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Protection from Alignment" + }, + "RESREF": { + "type": "resref", + "value": "scroll139" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Protection from Alignment" + }, + "RESREF": { + "type": "resref", + "value": "scroll140" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1296" + }, + "STRREF": { + "type": "dword", + "value": 16825808 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Protection From Arrows" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr226" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_215" + }, + "STRREF": { + "type": "dword", + "value": 886 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Protection from Chaos" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr111" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_216" + }, + "STRREF": { + "type": "dword", + "value": 887 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Protection from Elements" + }, + "RESREF": { + "type": "resref", + "value": "scroll137" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_219" + }, + "STRREF": { + "type": "dword", + "value": 888 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Protection from Evil" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr112" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_221" + }, + "STRREF": { + "type": "dword", + "value": 889 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Protection from Good" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr113" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_223" + }, + "STRREF": { + "type": "dword", + "value": 890 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Protection from Law" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr114" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_224" + }, + "STRREF": { + "type": "dword", + "value": 891 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Protection from Spells" + }, + "RESREF": { + "type": "resref", + "value": "scroll141" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1348" + }, + "STRREF": { + "type": "dword", + "value": 16832229 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_356" + }, + "STRREF": { + "type": "dword", + "value": 1773 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quillfire" + }, + "RESREF": { + "type": "resref", + "value": "scroll425" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rain of Black Tulips" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr904" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1284" + }, + "STRREF": { + "type": "dword", + "value": 16829682 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rain of Embers" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr708" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1262" + }, + "STRREF": { + "type": "dword", + "value": 16829638 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rain of Roses" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr905" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1285" + }, + "STRREF": { + "type": "dword", + "value": 16829684 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1336" + }, + "STRREF": { + "type": "dword", + "value": 16832090 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_944" + }, + "STRREF": { + "type": "dword", + "value": 16829184 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_226" + }, + "STRREF": { + "type": "dword", + "value": 892 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Raise Dead" + }, + "RESREF": { + "type": "resref", + "value": "scroll142" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rapture of Rupture" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr705" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1220" + }, + "STRREF": { + "type": "dword", + "value": 16829572 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_227" + }, + "STRREF": { + "type": "dword", + "value": 893 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ray of Enfeeblement" + }, + "RESREF": { + "type": "resref", + "value": "scroll143" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1326" + }, + "STRREF": { + "type": "dword", + "value": 16827582 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_228" + }, + "STRREF": { + "type": "dword", + "value": 894 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ray of Frost" + }, + "RESREF": { + "type": "resref", + "value": "scroll144" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ray of Hope" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr131" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ray of Hope" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr127" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1286" + }, + "STRREF": { + "type": "dword", + "value": 16829686 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_957" + }, + "STRREF": { + "type": "dword", + "value": 16823166 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Reality Blind" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr331" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1221" + }, + "STRREF": { + "type": "dword", + "value": 16829574 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1047" + }, + "STRREF": { + "type": "dword", + "value": 16830286 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr401" + }, + "STRREF": { + "type": "dword", + "value": 16830286 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Red Fester" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr310" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1222" + }, + "STRREF": { + "type": "dword", + "value": 16829576 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_940" + }, + "STRREF": { + "type": "dword", + "value": 16829176 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_323" + }, + "STRREF": { + "type": "dword", + "value": 6340 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Regenerate" + }, + "RESREF": { + "type": "resref", + "value": "scroll374" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_874" + }, + "STRREF": { + "type": "dword", + "value": 16990512 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_865" + }, + "STRREF": { + "type": "dword", + "value": 16990497 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_868" + }, + "STRREF": { + "type": "dword", + "value": 16990502 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_871" + }, + "STRREF": { + "type": "dword", + "value": 16990507 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Regroup" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr325" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1317" + }, + "STRREF": { + "type": "dword", + "value": 16826681 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Remove Blindness / Deafness" + }, + "RESREF": { + "type": "resref", + "value": "scroll145" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_229" + }, + "STRREF": { + "type": "dword", + "value": 895 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_230" + }, + "STRREF": { + "type": "dword", + "value": 896 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Remove Curse" + }, + "RESREF": { + "type": "resref", + "value": "scroll146" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_231" + }, + "STRREF": { + "type": "dword", + "value": 897 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Remove Disease" + }, + "RESREF": { + "type": "resref", + "value": "scroll147" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_232" + }, + "STRREF": { + "type": "dword", + "value": 898 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Remove Fear" + }, + "RESREF": { + "type": "resref", + "value": "scroll148" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_233" + }, + "STRREF": { + "type": "dword", + "value": 899 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Remove Paralysis" + }, + "RESREF": { + "type": "resref", + "value": "scroll149" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1300" + }, + "STRREF": { + "type": "dword", + "value": 16825816 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1426" + }, + "STRREF": { + "type": "dword", + "value": 16828340 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_234" + }, + "STRREF": { + "type": "dword", + "value": 900 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Resist Elements" + }, + "RESREF": { + "type": "resref", + "value": "scroll150" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_236" + }, + "STRREF": { + "type": "dword", + "value": 901 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Resistance" + }, + "RESREF": { + "type": "resref", + "value": "scroll151" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Resonating Resistance" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr521" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Resonating Resistance" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr508" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1223" + }, + "STRREF": { + "type": "dword", + "value": 16829578 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_238" + }, + "STRREF": { + "type": "dword", + "value": 902 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Restoration" + }, + "RESREF": { + "type": "resref", + "value": "scroll152" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_239" + }, + "STRREF": { + "type": "dword", + "value": 903 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Resurrection" + }, + "RESREF": { + "type": "resref", + "value": "scroll153" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1423" + }, + "STRREF": { + "type": "dword", + "value": 16828323 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1046" + }, + "STRREF": { + "type": "dword", + "value": 16830284 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr502" + }, + "STRREF": { + "type": "dword", + "value": 16830284 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Righteous Smite" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr709" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1287" + }, + "STRREF": { + "type": "dword", + "value": 16829688 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1353" + }, + "STRREF": { + "type": "dword", + "value": 16832239 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rotting Curse of Urfestra" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr311" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1224" + }, + "STRREF": { + "type": "dword", + "value": 16829580 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rouse" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr117" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1318" + }, + "STRREF": { + "type": "dword", + "value": 16826683 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_240" + }, + "STRREF": { + "type": "dword", + "value": 904 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sanctuary" + }, + "RESREF": { + "type": "resref", + "value": "scroll154" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1330" + }, + "STRREF": { + "type": "dword", + "value": 16832078 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1421" + }, + "STRREF": { + "type": "dword", + "value": 905 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scare" + }, + "RESREF": { + "type": "resref", + "value": "scroll155" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1361" + }, + "STRREF": { + "type": "dword", + "value": 16832257 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_464" + }, + "STRREF": { + "type": "dword", + "value": 3879 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1325" + }, + "STRREF": { + "type": "dword", + "value": 16827579 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1438" + }, + "STRREF": { + "type": "dword", + "value": 16826972 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_242" + }, + "STRREF": { + "type": "dword", + "value": 906 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Searing Light" + }, + "RESREF": { + "type": "resref", + "value": "scroll156" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_243" + }, + "STRREF": { + "type": "dword", + "value": 907 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "See Invisibility" + }, + "RESREF": { + "type": "resref", + "value": "scroll157" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Seeking Ray" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr230" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1319" + }, + "STRREF": { + "type": "dword", + "value": 16826685 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Seething Eyebane" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr118" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1225" + }, + "STRREF": { + "type": "dword", + "value": 16829582 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1453" + }, + "STRREF": { + "type": "dword", + "value": 16826987 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1386" + }, + "STRREF": { + "type": "dword", + "value": 16847286 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1033" + }, + "STRREF": { + "type": "dword", + "value": 16830265 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr303" + }, + "STRREF": { + "type": "dword", + "value": 16830265 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_244" + }, + "STRREF": { + "type": "dword", + "value": 908 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shades" + }, + "RESREF": { + "type": "resref", + "value": "scroll324" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shades" + }, + "RESREF": { + "type": "resref", + "value": "scroll340" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shades" + }, + "RESREF": { + "type": "resref", + "value": "scroll341" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shades" + }, + "RESREF": { + "type": "resref", + "value": "scroll342" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shades" + }, + "RESREF": { + "type": "resref", + "value": "scroll343" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1377" + }, + "STRREF": { + "type": "dword", + "value": 16829354 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_245" + }, + "STRREF": { + "type": "dword", + "value": 909 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shadow Conjuration" + }, + "RESREF": { + "type": "resref", + "value": "scroll344" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shadow Conjuration" + }, + "RESREF": { + "type": "resref", + "value": "scroll345" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shadow Conjuration" + }, + "RESREF": { + "type": "resref", + "value": "scroll346" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shadow Conjuration" + }, + "RESREF": { + "type": "resref", + "value": "scroll347" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shadow Conjuration" + }, + "RESREF": { + "type": "resref", + "value": "scroll348" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_246" + }, + "STRREF": { + "type": "dword", + "value": 910 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shadow Shield" + }, + "RESREF": { + "type": "resref", + "value": "scroll160" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1094" + }, + "STRREF": { + "type": "dword", + "value": 16830431 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr208" + }, + "STRREF": { + "type": "dword", + "value": 16830431 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_247" + }, + "STRREF": { + "type": "dword", + "value": 911 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shapechange" + }, + "RESREF": { + "type": "resref", + "value": "scroll161" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_469" + }, + "STRREF": { + "type": "dword", + "value": 3739 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_348" + }, + "STRREF": { + "type": "dword", + "value": 57 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shield" + }, + "RESREF": { + "type": "resref", + "value": "scroll417" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_381" + }, + "STRREF": { + "type": "dword", + "value": 2666 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shield of Faith" + }, + "RESREF": { + "type": "resref", + "value": "scroll450" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1454" + }, + "STRREF": { + "type": "dword", + "value": 16832367 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_966" + }, + "STRREF": { + "type": "dword", + "value": 16789914 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shivering Touch" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr333" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shivering Touch" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr317" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1252" + }, + "STRREF": { + "type": "dword", + "value": 16829618 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1324" + }, + "STRREF": { + "type": "dword", + "value": 16827576 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_934" + }, + "STRREF": { + "type": "dword", + "value": 16828892 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shriveling" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr235" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shriveling" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr312" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1226" + }, + "STRREF": { + "type": "dword", + "value": 16829584 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sicken Evil" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr509" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1263" + }, + "STRREF": { + "type": "dword", + "value": 16829640 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_249" + }, + "STRREF": { + "type": "dword", + "value": 913 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Silence" + }, + "RESREF": { + "type": "resref", + "value": "scroll163" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1110" + }, + "STRREF": { + "type": "dword", + "value": 16830445 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr410" + }, + "STRREF": { + "type": "dword", + "value": 16830445 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1085" + }, + "STRREF": { + "type": "dword", + "value": 16830398 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr303" + }, + "STRREF": { + "type": "dword", + "value": 16830398 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Slashing Dispel" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr428" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1320" + }, + "STRREF": { + "type": "dword", + "value": 16826687 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_250" + }, + "STRREF": { + "type": "dword", + "value": 914 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Slay Living" + }, + "RESREF": { + "type": "resref", + "value": "scroll164" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_251" + }, + "STRREF": { + "type": "dword", + "value": 915 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sleep" + }, + "RESREF": { + "type": "resref", + "value": "scroll165" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1354" + }, + "STRREF": { + "type": "dword", + "value": 16832241 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_253" + }, + "STRREF": { + "type": "dword", + "value": 916 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Slow" + }, + "RESREF": { + "type": "resref", + "value": "scroll166" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1378" + }, + "STRREF": { + "type": "dword", + "value": 16829356 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1127" + }, + "STRREF": { + "type": "dword", + "value": 16826070 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "splscrl_majmiss" + }, + "STRREF": { + "type": "dword", + "value": 16826070 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1112" + }, + "STRREF": { + "type": "dword", + "value": 16830447 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr109" + }, + "STRREF": { + "type": "dword", + "value": 16830447 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1096" + }, + "STRREF": { + "type": "dword", + "value": 16830433 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Snilloc's Snowball Swarm" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr209" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Solid Fog" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr424" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1304" + }, + "STRREF": { + "type": "dword", + "value": 16825824 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1443" + }, + "STRREF": { + "type": "dword", + "value": 16847578 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Song of Festering Death" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr236" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1227" + }, + "STRREF": { + "type": "dword", + "value": 16829586 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1008" + }, + "STRREF": { + "type": "dword", + "value": 16830224 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr406" + }, + "STRREF": { + "type": "dword", + "value": 16830224 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sonic Shield" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr326" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1321" + }, + "STRREF": { + "type": "dword", + "value": 16826689 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sorrow" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr124" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sorrow" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr119" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1228" + }, + "STRREF": { + "type": "dword", + "value": 16829588 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1114" + }, + "STRREF": { + "type": "dword", + "value": 16830449 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr504" + }, + "STRREF": { + "type": "dword", + "value": 16830449 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_254" + }, + "STRREF": { + "type": "dword", + "value": 917 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sound Burst" + }, + "RESREF": { + "type": "resref", + "value": "scroll167" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_877" + }, + "STRREF": { + "type": "dword", + "value": 16990517 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_257" + }, + "STRREF": { + "type": "dword", + "value": 919 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spell Mantle" + }, + "RESREF": { + "type": "resref", + "value": "scroll169" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_255" + }, + "STRREF": { + "type": "dword", + "value": 918 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spell Resistance" + }, + "RESREF": { + "type": "resref", + "value": "scroll168" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_928" + }, + "STRREF": { + "type": "dword", + "value": 16828817 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1379" + }, + "STRREF": { + "type": "dword", + "value": 16829358 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1115" + }, + "STRREF": { + "type": "dword", + "value": 16830451 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr902" + }, + "STRREF": { + "type": "dword", + "value": 16830451 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1120" + }, + "STRREF": { + "type": "dword", + "value": 16830459 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr307" + }, + "STRREF": { + "type": "dword", + "value": 16830459 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_385" + }, + "STRREF": { + "type": "dword", + "value": 2671 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spike Growth" + }, + "RESREF": { + "type": "resref", + "value": "scroll454" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_880" + }, + "STRREF": { + "type": "dword", + "value": 16990522 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_881" + }, + "STRREF": { + "type": "dword", + "value": 16990525 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spores of the Vrock" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr210" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1230" + }, + "STRREF": { + "type": "dword", + "value": 16829590 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Starmantle" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr622" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1288" + }, + "STRREF": { + "type": "dword", + "value": 16829690 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_259" + }, + "STRREF": { + "type": "dword", + "value": 921 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Stinking Cloud" + }, + "RESREF": { + "type": "resref", + "value": "scroll171" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_465" + }, + "STRREF": { + "type": "dword", + "value": 2767 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_399" + }, + "STRREF": { + "type": "dword", + "value": 3046 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Stone to Flesh" + }, + "RESREF": { + "type": "resref", + "value": "scroll486" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_482" + }, + "STRREF": { + "type": "dword", + "value": 3778 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_260" + }, + "STRREF": { + "type": "dword", + "value": 922 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Stoneskin" + }, + "RESREF": { + "type": "resref", + "value": "scroll172" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Stop Heart" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr522" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Stop Heart" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr409" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1232" + }, + "STRREF": { + "type": "dword", + "value": 16829594 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Storm of Shards" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr604" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1264" + }, + "STRREF": { + "type": "dword", + "value": 16829642 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Storm of Vengance" + }, + "RESREF": { + "type": "resref", + "value": "scroll173" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_261" + }, + "STRREF": { + "type": "dword", + "value": 923 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Stunning Screech" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr332" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1231" + }, + "STRREF": { + "type": "dword", + "value": 16829592 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_262" + }, + "STRREF": { + "type": "dword", + "value": 924 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Summon Creature I" + }, + "RESREF": { + "type": "resref", + "value": "scroll174" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_264" + }, + "STRREF": { + "type": "dword", + "value": 925 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Summon Creature II" + }, + "RESREF": { + "type": "resref", + "value": "scroll175" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_265" + }, + "STRREF": { + "type": "dword", + "value": 926 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Summon Creature III" + }, + "RESREF": { + "type": "resref", + "value": "scroll176" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_266" + }, + "STRREF": { + "type": "dword", + "value": 927 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Summon Creature IV" + }, + "RESREF": { + "type": "resref", + "value": "scroll177" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_267" + }, + "STRREF": { + "type": "dword", + "value": 932 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Summon Creature IX" + }, + "RESREF": { + "type": "resref", + "value": "scroll178" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_268" + }, + "STRREF": { + "type": "dword", + "value": 928 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Summon Creature V" + }, + "RESREF": { + "type": "resref", + "value": "scroll179" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_269" + }, + "STRREF": { + "type": "dword", + "value": 929 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Summon Creature VI" + }, + "RESREF": { + "type": "resref", + "value": "scroll180" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_270" + }, + "STRREF": { + "type": "dword", + "value": 930 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Summon Creature VII" + }, + "RESREF": { + "type": "resref", + "value": "scroll181" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_271" + }, + "STRREF": { + "type": "dword", + "value": 931 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Summon Creature VIII" + }, + "RESREF": { + "type": "resref", + "value": "scroll182" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1417" + }, + "STRREF": { + "type": "dword", + "value": 16847422 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1418" + }, + "STRREF": { + "type": "dword", + "value": 16847424 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1419" + }, + "STRREF": { + "type": "dword", + "value": 16847426 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1420" + }, + "STRREF": { + "type": "dword", + "value": 16847428 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1416" + }, + "STRREF": { + "type": "dword", + "value": 16847420 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_272" + }, + "STRREF": { + "type": "dword", + "value": 933 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_358" + }, + "STRREF": { + "type": "dword", + "value": 385 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sunburst" + }, + "RESREF": { + "type": "resref", + "value": "scroll427" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sunmantle" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr411" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1265" + }, + "STRREF": { + "type": "dword", + "value": 16829644 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_993" + }, + "STRREF": { + "type": "dword", + "value": 16790121 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sure Strike" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr231" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1322" + }, + "STRREF": { + "type": "dword", + "value": 16826691 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1433" + }, + "STRREF": { + "type": "dword", + "value": 16832072 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_967" + }, + "STRREF": { + "type": "dword", + "value": 16790080 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_968" + }, + "STRREF": { + "type": "dword", + "value": 16790083 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_970" + }, + "STRREF": { + "type": "dword", + "value": 16790086 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_971" + }, + "STRREF": { + "type": "dword", + "value": 16790089 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_972" + }, + "STRREF": { + "type": "dword", + "value": 16790092 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_973" + }, + "STRREF": { + "type": "dword", + "value": 16790095 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_969" + }, + "STRREF": { + "type": "dword", + "value": 16790098 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_974" + }, + "STRREF": { + "type": "dword", + "value": 16790101 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_388" + }, + "STRREF": { + "type": "dword", + "value": 2678 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tasha's Hideous Laughter" + }, + "RESREF": { + "type": "resref", + "value": "scroll457" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1169" + }, + "STRREF": { + "type": "dword", + "value": 16825689 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr504" + }, + "STRREF": { + "type": "dword", + "value": 16825689 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1151" + }, + "STRREF": { + "type": "dword", + "value": 16825707 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr903" + }, + "STRREF": { + "type": "dword", + "value": 16825707 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_948" + }, + "STRREF": { + "type": "dword", + "value": 16789748 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_273" + }, + "STRREF": { + "type": "dword", + "value": 934 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tenser's Transformation" + }, + "RESREF": { + "type": "resref", + "value": "scroll184" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Thousand Needles" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr603" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1233" + }, + "STRREF": { + "type": "dword", + "value": 16829596 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_426" + }, + "STRREF": { + "type": "dword", + "value": 8942 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_274" + }, + "STRREF": { + "type": "dword", + "value": 935 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Time Stop" + }, + "RESREF": { + "type": "resref", + "value": "scroll185" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tomb of Light" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr718" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tomb of Light" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr711" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1289" + }, + "STRREF": { + "type": "dword", + "value": 16829692 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tongue of Baalzebul" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr120" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1234" + }, + "STRREF": { + "type": "dword", + "value": 16829598 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_884" + }, + "STRREF": { + "type": "dword", + "value": 16990530 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Touch of Idiocy" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr227" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1297" + }, + "STRREF": { + "type": "dword", + "value": 16825810 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Touch of Juiblex" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr313" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1235" + }, + "STRREF": { + "type": "dword", + "value": 16829600 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1337" + }, + "STRREF": { + "type": "dword", + "value": 16832092 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_991" + }, + "STRREF": { + "type": "dword", + "value": 16789929 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1387" + }, + "STRREF": { + "type": "dword", + "value": 16847288 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_951" + }, + "STRREF": { + "type": "dword", + "value": 16789755 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1428" + }, + "STRREF": { + "type": "dword", + "value": 16828344 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_275" + }, + "STRREF": { + "type": "dword", + "value": 936 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "True Seeing" + }, + "RESREF": { + "type": "resref", + "value": "scroll186" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_346" + }, + "STRREF": { + "type": "dword", + "value": 55 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "True Strike" + }, + "RESREF": { + "type": "resref", + "value": "scroll415" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Twilight Luck" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr123" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1266" + }, + "STRREF": { + "type": "dword", + "value": 16829646 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_305" + }, + "STRREF": { + "type": "dword", + "value": 6331 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_466" + }, + "STRREF": { + "type": "dword", + "value": 2796 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_375" + }, + "STRREF": { + "type": "dword", + "value": 2365 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Undeath's Eternal Foe" + }, + "RESREF": { + "type": "resref", + "value": "scroll444" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1161" + }, + "STRREF": { + "type": "dword", + "value": 16831996 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Undetectable Alignment" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr204" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Unheavened" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr237" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1236" + }, + "STRREF": { + "type": "dword", + "value": 16829602 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_982" + }, + "STRREF": { + "type": "dword", + "value": 16831998 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Unliving Weapon" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr314" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1237" + }, + "STRREF": { + "type": "dword", + "value": 16829604 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1131" + }, + "STRREF": { + "type": "dword", + "value": 16825359 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "splscrl_unyield" + }, + "STRREF": { + "type": "dword", + "value": 16825359 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Utterdark" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr916" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1238" + }, + "STRREF": { + "type": "dword", + "value": 16829606 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_277" + }, + "STRREF": { + "type": "dword", + "value": 938 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Vampiric Touch" + }, + "RESREF": { + "type": "resref", + "value": "scroll188" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_890" + }, + "STRREF": { + "type": "dword", + "value": 16790128 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_896" + }, + "STRREF": { + "type": "dword", + "value": 16790140 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1445" + }, + "STRREF": { + "type": "dword", + "value": 16847582 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_467" + }, + "STRREF": { + "type": "dword", + "value": 3881 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_278" + }, + "STRREF": { + "type": "dword", + "value": 939 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Virtue" + }, + "RESREF": { + "type": "resref", + "value": "scroll189" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1122" + }, + "STRREF": { + "type": "dword", + "value": 16830461 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_sparscr411" + }, + "STRREF": { + "type": "dword", + "value": 16830461 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1432" + }, + "STRREF": { + "type": "dword", + "value": 16832069 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_279" + }, + "STRREF": { + "type": "dword", + "value": 940 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wail of the Banshee" + }, + "RESREF": { + "type": "resref", + "value": "scroll190" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_280" + }, + "STRREF": { + "type": "dword", + "value": 941 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wall of Fire" + }, + "RESREF": { + "type": "resref", + "value": "scroll191" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1129" + }, + "STRREF": { + "type": "dword", + "value": 16825361 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "splscrl_gwdm" + }, + "STRREF": { + "type": "dword", + "value": 16825361 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_322" + }, + "STRREF": { + "type": "dword", + "value": 6339 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "War Cry" + }, + "RESREF": { + "type": "resref", + "value": "scroll373" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1388" + }, + "STRREF": { + "type": "dword", + "value": 16847290 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wave of Grief" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr238" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wave of Grief" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr211" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1239" + }, + "STRREF": { + "type": "dword", + "value": 16829608 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wave of Pain" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr619" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1240" + }, + "STRREF": { + "type": "dword", + "value": 16829610 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1359" + }, + "STRREF": { + "type": "dword", + "value": 16832253 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1327" + }, + "STRREF": { + "type": "dword", + "value": 16827585 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_965" + }, + "STRREF": { + "type": "dword", + "value": 16789911 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_281" + }, + "STRREF": { + "type": "dword", + "value": 942 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Web" + }, + "RESREF": { + "type": "resref", + "value": "scroll192" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_282" + }, + "STRREF": { + "type": "dword", + "value": 943 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Weird" + }, + "RESREF": { + "type": "resref", + "value": "scroll193" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1351" + }, + "STRREF": { + "type": "dword", + "value": 16832235 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_950" + }, + "STRREF": { + "type": "dword", + "value": 16789752 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1123" + }, + "STRREF": { + "type": "dword", + "value": 16830463 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr702" + }, + "STRREF": { + "type": "dword", + "value": 16830463 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1156" + }, + "STRREF": { + "type": "dword", + "value": 16832008 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Word of Chaos" + }, + "RESREF": { + "type": "resref", + "value": "sp_it_spdvscr707" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Word of Faith" + }, + "RESREF": { + "type": "resref", + "value": "scroll194" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_990" + }, + "STRREF": { + "type": "dword", + "value": 16789970 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_372" + }, + "STRREF": { + "type": "dword", + "value": 2362 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wounding Whispers" + }, + "RESREF": { + "type": "resref", + "value": "scroll441" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wrack" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_sparscr434" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wrack" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr315" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1241" + }, + "STRREF": { + "type": "dword", + "value": 16829612 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wretched Blight" + }, + "RESREF": { + "type": "resref", + "value": "nw_it_spdvscr706" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_scr_1242" + }, + "STRREF": { + "type": "dword", + "value": 16829614 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6754 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 1592 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 54 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_pnp_familiar" + }, + "STRREF": { + "type": "dword", + "value": 42542 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "PRC_CRAFT_TOKEN" + }, + "RESREF": { + "type": "resref", + "value": "prc_craft_token" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "test" + }, + "RESREF": { + "type": "resref", + "value": "test" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6808 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 0 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Black Pearl" + }, + "RESREF": { + "type": "resref", + "value": "mc_blackpearl" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Black stick smeared with Blood" + }, + "RESREF": { + "type": "resref", + "value": "mc_blckstickbld" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Black Tulip" + }, + "RESREF": { + "type": "resref", + "value": "mc_blacktulip" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Bone" + }, + "RESREF": { + "type": "resref", + "value": "mc_bone" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Corpse" + }, + "RESREF": { + "type": "resref", + "value": "mc_corpse" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Corrupted Artifact of Good" + }, + "RESREF": { + "type": "resref", + "value": "mc_corrartofgood" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Diamond" + }, + "RESREF": { + "type": "resref", + "value": "mc_diamond" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Dollop" + }, + "RESREF": { + "type": "resref", + "value": "mc_dollop" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Feather" + }, + "RESREF": { + "type": "resref", + "value": "mc_feather" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Hand" + }, + "RESREF": { + "type": "resref", + "value": "mc_hand" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A handful of copper and iron pellets" + }, + "RESREF": { + "type": "resref", + "value": "mc_pellets" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Leather Strap" + }, + "RESREF": { + "type": "resref", + "value": "mc_leatherstrap" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A loop of copper wire and a magnet" + }, + "RESREF": { + "type": "resref", + "value": "mc_copperwire" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Multicolored Paper Disk" + }, + "RESREF": { + "type": "resref", + "value": "mc_paperdisk" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Pebble" + }, + "RESREF": { + "type": "resref", + "value": "mc_pebble" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A piece of a Tentacle!" + }, + "RESREF": { + "type": "resref", + "value": "mc_tentacle" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A piece of Jade" + }, + "RESREF": { + "type": "resref", + "value": "mc_jade" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A piece of leather" + }, + "RESREF": { + "type": "resref", + "value": "mc_pieceofleathr" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Piece of Straw" + }, + "RESREF": { + "type": "resref", + "value": "mc_straw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Piece of Sunstone" + }, + "RESREF": { + "type": "resref", + "value": "mc_sunstone" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Pinch of Dust" + }, + "RESREF": { + "type": "resref", + "value": "mc_pinchofdust" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Pouch filled with Dead Flies" + }, + "RESREF": { + "type": "resref", + "value": "mc_deadflies" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Silver mirror" + }, + "RESREF": { + "type": "resref", + "value": "mc_silvermirror" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Small Crystal Prism" + }, + "RESREF": { + "type": "resref", + "value": "mc_crystalprism" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Small Heart" + }, + "RESREF": { + "type": "resref", + "value": "mc_smallheart" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Soul" + }, + "RESREF": { + "type": "resref", + "value": "mc_soul" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Sponge" + }, + "RESREF": { + "type": "resref", + "value": "mc_sponge" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Tongue..." + }, + "RESREF": { + "type": "resref", + "value": "mc_tongue" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Adder's Stomach" + }, + "RESREF": { + "type": "resref", + "value": "mc_adderstomach" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Amber Dust" + }, + "RESREF": { + "type": "resref", + "value": "mc_amberdust" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Amber Sphere" + }, + "RESREF": { + "type": "resref", + "value": "mc_ambersphere" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "An Eagle's Feather" + }, + "RESREF": { + "type": "resref", + "value": "mc_eaglefeather" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "An eye of a Hawk" + }, + "RESREF": { + "type": "resref", + "value": "mc_eyeofahawk" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "An Onion" + }, + "RESREF": { + "type": "resref", + "value": "mc_onion" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison023" + }, + "STRREF": { + "type": "dword", + "value": 4669 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Astral Construct Claw" + }, + "RESREF": { + "type": "resref", + "value": "psi_ast_con_claw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Astral Construct Properties" + }, + "RESREF": { + "type": "resref", + "value": "psi_ast_con_skin" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Astral Construct Slam" + }, + "RESREF": { + "type": "resref", + "value": "psi_ast_con_slam" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison135" + }, + "STRREF": { + "type": "dword", + "value": 16826278 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bat fur" + }, + "RESREF": { + "type": "resref", + "value": "mc_batfur" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bat Guano" + }, + "RESREF": { + "type": "resref", + "value": "mc_batguano" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison029" + }, + "STRREF": { + "type": "dword", + "value": 4675 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison011" + }, + "STRREF": { + "type": "dword", + "value": 4657 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison019" + }, + "STRREF": { + "type": "dword", + "value": 4665 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison004" + }, + "STRREF": { + "type": "dword", + "value": 4650 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison008" + }, + "STRREF": { + "type": "dword", + "value": 4654 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bone Dust" + }, + "RESREF": { + "type": "resref", + "value": "mc_bonedust" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bralan Hide" + }, + "RESREF": { + "type": "resref", + "value": "bralanhide" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bralani Longbow" + }, + "RESREF": { + "type": "resref", + "value": "bralanilongbow" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bralani Scimitar" + }, + "RESREF": { + "type": "resref", + "value": "bralaniscimitar" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Brass Mug with Jade Inlay" + }, + "RESREF": { + "type": "resref", + "value": "rdg_art301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bull hair" + }, + "RESREF": { + "type": "resref", + "value": "mc_bullhair" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison142" + }, + "STRREF": { + "type": "dword", + "value": 16826285 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison027" + }, + "STRREF": { + "type": "dword", + "value": 4673 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Can Shift Check" + }, + "RESREF": { + "type": "resref", + "value": "pnp_shft_tstpkup" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison018" + }, + "STRREF": { + "type": "dword", + "value": 4664 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Carved Ram's Horn" + }, + "RESREF": { + "type": "resref", + "value": "mc_ramshorn" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cat Fur" + }, + "RESREF": { + "type": "resref", + "value": "mc_catfur" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison143" + }, + "STRREF": { + "type": "dword", + "value": 16826288 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison028" + }, + "STRREF": { + "type": "dword", + "value": 4674 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Charcoal" + }, + "RESREF": { + "type": "resref", + "value": "mc_charcoal" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Coal" + }, + "RESREF": { + "type": "resref", + "value": "mc_coal" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cocoon" + }, + "RESREF": { + "type": "resref", + "value": "mc_cocoon" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Colored Sand" + }, + "RESREF": { + "type": "resref", + "value": "mc_coloredsand" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison127" + }, + "STRREF": { + "type": "dword", + "value": 16826270 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison133" + }, + "STRREF": { + "type": "dword", + "value": 16826276 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison040" + }, + "STRREF": { + "type": "dword", + "value": 4686 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crown of Ivy leaves" + }, + "RESREF": { + "type": "resref", + "value": "mc_crownofivy" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crystal Bead" + }, + "RESREF": { + "type": "resref", + "value": "mc_crystalbead" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crystal cone" + }, + "RESREF": { + "type": "resref", + "value": "mc_crystalcone" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crystal rod" + }, + "RESREF": { + "type": "resref", + "value": "mc_crystalrod" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cured fur" + }, + "RESREF": { + "type": "resref", + "value": "mc_curedfur" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison025" + }, + "STRREF": { + "type": "dword", + "value": 4671 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison012" + }, + "STRREF": { + "type": "dword", + "value": 4658 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Diamond Dust" + }, + "RESREF": { + "type": "resref", + "value": "mc_diamonddust" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison015" + }, + "STRREF": { + "type": "dword", + "value": 4661 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dretch Hide" + }, + "RESREF": { + "type": "resref", + "value": "prc_dretchhide" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Earth" + }, + "RESREF": { + "type": "resref", + "value": "mc_earth" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Egg shell" + }, + "RESREF": { + "type": "resref", + "value": "mc_eggshell" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Electrum Ceremonial Dagger" + }, + "RESREF": { + "type": "resref", + "value": "rdg_art601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Shifter Powers" + }, + "RESREF": { + "type": "resref", + "value": "epicshifterpower" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison134" + }, + "STRREF": { + "type": "dword", + "value": 16826277 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eyelashes" + }, + "RESREF": { + "type": "resref", + "value": "mc_eyelashes" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Feather of a Hummingbird" + }, + "RESREF": { + "type": "resref", + "value": "mc_hummingbirdf" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fine Lute" + }, + "RESREF": { + "type": "resref", + "value": "rdg_art801" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fine Pendant on a Gold Chain" + }, + "RESREF": { + "type": "resref", + "value": "rdg_art701" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fireflies" + }, + "RESREF": { + "type": "resref", + "value": "mc_fireflies" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Flint" + }, + "RESREF": { + "type": "resref", + "value": "mc_flint" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fox's Hair" + }, + "RESREF": { + "type": "resref", + "value": "mc_foxhair" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fur" + }, + "RESREF": { + "type": "resref", + "value": "mc_fur" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison126" + }, + "STRREF": { + "type": "dword", + "value": 16826269 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison132" + }, + "STRREF": { + "type": "dword", + "value": 16826275 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison039" + }, + "STRREF": { + "type": "dword", + "value": 4685 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ghoul Clothing" + }, + "RESREF": { + "type": "resref", + "value": "mc_ghoulclothing" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison009" + }, + "STRREF": { + "type": "dword", + "value": 4655 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gob of Beeswax" + }, + "RESREF": { + "type": "resref", + "value": "mc_beeswax" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gold Idol" + }, + "RESREF": { + "type": "resref", + "value": "rdg_art501" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison100" + }, + "STRREF": { + "type": "dword", + "value": 16826286 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Granite" + }, + "RESREF": { + "type": "resref", + "value": "mc_granite" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Grasshopper's hind leg" + }, + "RESREF": { + "type": "resref", + "value": "mc_grasshopprhlg" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Grave dirt" + }, + "RESREF": { + "type": "resref", + "value": "mc_gravedirt" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison003" + }, + "STRREF": { + "type": "dword", + "value": 4649 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ground Mica" + }, + "RESREF": { + "type": "resref", + "value": "mc_groundmica" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gum Arabic" + }, + "RESREF": { + "type": "resref", + "value": "mc_gumarabic" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Handful of black ribbons" + }, + "RESREF": { + "type": "resref", + "value": "mc_blackribbons" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Herbs" + }, + "RESREF": { + "type": "resref", + "value": "mc_herbs" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "HideToken" + }, + "RESREF": { + "type": "resref", + "value": "hidetoken" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Holy Arrow" + }, + "RESREF": { + "type": "resref", + "value": "holyarrow" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Holy Parchment" + }, + "RESREF": { + "type": "resref", + "value": "mc_holyparchment" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Horse Hair" + }, + "RESREF": { + "type": "resref", + "value": "mc_horsehair" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison125" + }, + "STRREF": { + "type": "dword", + "value": 16826268 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison131" + }, + "STRREF": { + "type": "dword", + "value": 16826274 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison038" + }, + "STRREF": { + "type": "dword", + "value": 4684 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison021" + }, + "STRREF": { + "type": "dword", + "value": 4667 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Incense" + }, + "RESREF": { + "type": "resref", + "value": "mc_incense" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Incense Sprinkled with diamond dust" + }, + "RESREF": { + "type": "resref", + "value": "mc_dustincense" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Iron Bars Array" + }, + "RESREF": { + "type": "resref", + "value": "mc_ironbarsarray" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Irovy Statuette" + }, + "RESREF": { + "type": "resref", + "value": "rdg_art101" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison141" + }, + "STRREF": { + "type": "dword", + "value": 16826284 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ivory" + }, + "RESREF": { + "type": "resref", + "value": "mc_ivory" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison144" + }, + "STRREF": { + "type": "dword", + "value": 16826290 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Jeweled Statuette" + }, + "RESREF": { + "type": "resref", + "value": "rdg_art1001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Jeweled Statuette" + }, + "RESREF": { + "type": "resref", + "value": "rdg_art1101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Jeweled Statuette" + }, + "RESREF": { + "type": "resref", + "value": "rdg_art1201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Jeweled Statuette" + }, + "RESREF": { + "type": "resref", + "value": "rdg_art901" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lamasu Hide" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_lamhide" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison124" + }, + "STRREF": { + "type": "dword", + "value": 16826267 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison006" + }, + "STRREF": { + "type": "dword", + "value": 4652 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison037" + }, + "STRREF": { + "type": "dword", + "value": 4683 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lemure Hide" + }, + "RESREF": { + "type": "resref", + "value": "prc_lemurhide" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison024" + }, + "STRREF": { + "type": "dword", + "value": 4670 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Licorice Root" + }, + "RESREF": { + "type": "resref", + "value": "mc_licoriceroot" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lime" + }, + "RESREF": { + "type": "resref", + "value": "mc_lime" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Listener Hide" + }, + "RESREF": { + "type": "resref", + "value": "listenerhide" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lodestone" + }, + "RESREF": { + "type": "resref", + "value": "mc_lodestone" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison013" + }, + "STRREF": { + "type": "dword", + "value": 4659 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Maneuver Token" + }, + "RESREF": { + "type": "resref", + "value": "prc_movetoken" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Manifestation Token" + }, + "RESREF": { + "type": "resref", + "value": "prc_maniftoken" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison123" + }, + "STRREF": { + "type": "dword", + "value": 16826266 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison130" + }, + "STRREF": { + "type": "dword", + "value": 16826273 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison036" + }, + "STRREF": { + "type": "dword", + "value": 4682 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Medium Viper Venom" + }, + "RESREF": { + "type": "resref", + "value": "2dapoison147" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mercury" + }, + "RESREF": { + "type": "resref", + "value": "mc_mercury" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_sk_mblade_bs" + }, + "STRREF": { + "type": "dword", + "value": 16824442 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_sk_mblade_ls" + }, + "STRREF": { + "type": "dword", + "value": 16824442 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_sk_mblade_ss" + }, + "STRREF": { + "type": "dword", + "value": 16824442 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_sk_mblade_th" + }, + "STRREF": { + "type": "dword", + "value": 16824442 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Minerals" + }, + "RESREF": { + "type": "resref", + "value": "mc_minerals" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Miniature Brass Hearing Trumpet" + }, + "RESREF": { + "type": "resref", + "value": "mc_brasstrumpet" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Miniature Cloak" + }, + "RESREF": { + "type": "resref", + "value": "mc_mincloak" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Miniature Platinium Sword" + }, + "RESREF": { + "type": "resref", + "value": "mc_minplatsword" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Miniature Platinum Shield" + }, + "RESREF": { + "type": "resref", + "value": "mc_minplatshield" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison140" + }, + "STRREF": { + "type": "dword", + "value": 16826283 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Molasses " + }, + "RESREF": { + "type": "resref", + "value": "mc_molasses" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Nail" + }, + "RESREF": { + "type": "resref", + "value": "mc_nail" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Needles" + }, + "RESREF": { + "type": "resref", + "value": "mc_needles" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison000" + }, + "STRREF": { + "type": "dword", + "value": 4646 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison014" + }, + "STRREF": { + "type": "dword", + "value": 4660 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Nutshells" + }, + "RESREF": { + "type": "resref", + "value": "mc_nutshells" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison020" + }, + "STRREF": { + "type": "dword", + "value": 4666 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ointment for the eyes" + }, + "RESREF": { + "type": "resref", + "value": "mc_ointment" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Onyx" + }, + "RESREF": { + "type": "resref", + "value": "mc_onyx" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Owl feather" + }, + "RESREF": { + "type": "resref", + "value": "mc_owlfeather" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pearl" + }, + "RESREF": { + "type": "resref", + "value": "mc_pearl" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Phosphorus" + }, + "RESREF": { + "type": "resref", + "value": "mc_phosphorus" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Piece of a iron golem" + }, + "RESREF": { + "type": "resref", + "value": "mc_irongolempart" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Piece of a Mirror" + }, + "RESREF": { + "type": "resref", + "value": "mc_pieceofmirror" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Piece of a Spider" + }, + "RESREF": { + "type": "resref", + "value": "mc_pieceofspider" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Piece of an Undead's Bone" + }, + "RESREF": { + "type": "resref", + "value": "mc_undeadsbone" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Piece of Ice" + }, + "RESREF": { + "type": "resref", + "value": "mc_ice" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Piece of Raw Meat" + }, + "RESREF": { + "type": "resref", + "value": "mc_rawmeat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Polished Rod of Silver" + }, + "RESREF": { + "type": "resref", + "value": "mc_silverrod" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pork Rind" + }, + "RESREF": { + "type": "resref", + "value": "mc_porkrind" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Powdered Animal Hoof" + }, + "RESREF": { + "type": "resref", + "value": "mc_panimalhoof" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Powdered Gems" + }, + "RESREF": { + "type": "resref", + "value": "mc_powderedgems" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Powdered Holy Symbol" + }, + "RESREF": { + "type": "resref", + "value": "mc_pholysymbol" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Powdered iron" + }, + "RESREF": { + "type": "resref", + "value": "mc_powderediron" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Powdered Lime and Carbon" + }, + "RESREF": { + "type": "resref", + "value": "mc_limeandcarbon" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Powdered Peas" + }, + "RESREF": { + "type": "resref", + "value": "mc_powderedpeas" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Powdered Silver" + }, + "RESREF": { + "type": "resref", + "value": "mc_silverdust" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Pure Crystal" + }, + "RESREF": { + "type": "resref", + "value": "mc_purecrystal" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison145" + }, + "STRREF": { + "type": "dword", + "value": 16826292 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison005" + }, + "STRREF": { + "type": "dword", + "value": 4651 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quartz Crystal Embedded In Rock" + }, + "RESREF": { + "type": "resref", + "value": "mc_quartzcrystal" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rhubarb" + }, + "RESREF": { + "type": "resref", + "value": "mc_rhubarb" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rotten egg" + }, + "RESREF": { + "type": "resref", + "value": "mc_rottenegg" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ruby Dust" + }, + "RESREF": { + "type": "resref", + "value": "mc_rubydust" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sand" + }, + "RESREF": { + "type": "resref", + "value": "mc_sand" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison137" + }, + "STRREF": { + "type": "dword", + "value": 16826280 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison016" + }, + "STRREF": { + "type": "dword", + "value": 4662 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison010" + }, + "STRREF": { + "type": "dword", + "value": 4656 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shadow Walkers Token" + }, + "RESREF": { + "type": "resref", + "value": "shadowwalkerstok" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shifter Hide" + }, + "RESREF": { + "type": "resref", + "value": "shifterhide" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Silver Chalice" + }, + "RESREF": { + "type": "resref", + "value": "rdg_art201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Silver Comb" + }, + "RESREF": { + "type": "resref", + "value": "rdg_art401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Skull Talisman" + }, + "RESREF": { + "type": "resref", + "value": "prc_skulltalis" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison001" + }, + "STRREF": { + "type": "dword", + "value": 4647 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison129" + }, + "STRREF": { + "type": "dword", + "value": 16826272 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison035" + }, + "STRREF": { + "type": "dword", + "value": 4681 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spark of Life" + }, + "RESREF": { + "type": "resref", + "value": "sparkoflife" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "SparkBox" + }, + "RESREF": { + "type": "resref", + "value": "pnp_shft_sprkbox" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spider Silk" + }, + "RESREF": { + "type": "resref", + "value": "mc_spidersilk" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison022" + }, + "STRREF": { + "type": "dword", + "value": 4668 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison138" + }, + "STRREF": { + "type": "dword", + "value": 16826281 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sulfur" + }, + "RESREF": { + "type": "resref", + "value": "mc_sulfur" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Talc" + }, + "RESREF": { + "type": "resref", + "value": "mc_talc" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tattoo Ink" + }, + "RESREF": { + "type": "resref", + "value": "mc_tattooink" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison017" + }, + "STRREF": { + "type": "dword", + "value": 4663 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison122" + }, + "STRREF": { + "type": "dword", + "value": 16826265 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison128" + }, + "STRREF": { + "type": "dword", + "value": 16826271 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tiny Sliver of Bone" + }, + "RESREF": { + "type": "resref", + "value": "mc_sliverofbone" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison034" + }, + "STRREF": { + "type": "dword", + "value": 4680 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tiny Tarts" + }, + "RESREF": { + "type": "resref", + "value": "mc_tinytarts" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Unarmed Weapon - Bludgeoning" + }, + "RESREF": { + "type": "resref", + "value": "prc_unarmed_b" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Unarmed Weapon - Piercing" + }, + "RESREF": { + "type": "resref", + "value": "prc_unarmed_p" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Unarmed Weapon - Slashing" + }, + "RESREF": { + "type": "resref", + "value": "prc_unarmed_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Unarmed Weapon - Slashing and Piercing" + }, + "RESREF": { + "type": "resref", + "value": "prc_unarmed_sp" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison026" + }, + "STRREF": { + "type": "dword", + "value": 4672 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison146" + }, + "STRREF": { + "type": "dword", + "value": 16826294 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Unicorn Hide" + }, + "RESREF": { + "type": "resref", + "value": "prc_sum_unihide" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison139" + }, + "STRREF": { + "type": "dword", + "value": 16826282 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Utterance Token" + }, + "RESREF": { + "type": "resref", + "value": "prc_invoketoken" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Utterance Token" + }, + "RESREF": { + "type": "resref", + "value": "prc_uttertoken" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Vial filled with Ants" + }, + "RESREF": { + "type": "resref", + "value": "mc_vialwithants" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison136" + }, + "STRREF": { + "type": "dword", + "value": 16826279 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "White rock chip" + }, + "RESREF": { + "type": "resref", + "value": "mc_whiterockchip" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wick Soaked in Oil" + }, + "RESREF": { + "type": "resref", + "value": "mc_soakedwick" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wool" + }, + "RESREF": { + "type": "resref", + "value": "mc_wool" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Word Archon Hammer" + }, + "RESREF": { + "type": "resref", + "value": "wordarchonhammer" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Word Archon Hide" + }, + "RESREF": { + "type": "resref", + "value": "wordhide" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison007" + }, + "STRREF": { + "type": "dword", + "value": 4653 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "2dapoison044" + }, + "STRREF": { + "type": "dword", + "value": 16826264 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6688 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 1 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Acid Resistant Material" + }, + "RESREF": { + "type": "resref", + "value": "acidmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Acidic Material" + }, + "RESREF": { + "type": "resref", + "value": "acidmat2" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Arrow Defense 2 Material" + }, + "RESREF": { + "type": "resref", + "value": "arrdefmat2" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Arrow Defense Material" + }, + "RESREF": { + "type": "resref", + "value": "arrdefmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bane Material" + }, + "RESREF": { + "type": "resref", + "value": "banemat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bashing Material" + }, + "RESREF": { + "type": "resref", + "value": "bashmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Blinding Material" + }, + "RESREF": { + "type": "resref", + "value": "blindmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Brillant Material" + }, + "RESREF": { + "type": "resref", + "value": "brillmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Burning Material" + }, + "RESREF": { + "type": "resref", + "value": "firemat2" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chaotic Material" + }, + "RESREF": { + "type": "resref", + "value": "chaoticmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cleaving Material" + }, + "RESREF": { + "type": "resref", + "value": "cleavemat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cold Resistant Material" + }, + "RESREF": { + "type": "resref", + "value": "coldmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dancing Material" + }, + "RESREF": { + "type": "resref", + "value": "dancemat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Defensive Material" + }, + "RESREF": { + "type": "resref", + "value": "defmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Disruption Material" + }, + "RESREF": { + "type": "resref", + "value": "disrmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Electrical Resistant Material" + }, + "RESREF": { + "type": "resref", + "value": "elecmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Epic Spellcasting" + }, + "RESREF": { + "type": "resref", + "value": "epicspellcasting" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Etherial Material" + }, + "RESREF": { + "type": "resref", + "value": "ethmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fire Resistant Material" + }, + "RESREF": { + "type": "resref", + "value": "firemat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Flaming Material" + }, + "RESREF": { + "type": "resref", + "value": "firemat3" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Freezing Material" + }, + "RESREF": { + "type": "resref", + "value": "coldmat2" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Frozen Material" + }, + "RESREF": { + "type": "resref", + "value": "coldmat3" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heavy Fortification Material" + }, + "RESREF": { + "type": "resref", + "value": "hfortmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Holy Material" + }, + "RESREF": { + "type": "resref", + "value": "holymat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Invulerability Material" + }, + "RESREF": { + "type": "resref", + "value": "invulmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Keen Material" + }, + "RESREF": { + "type": "resref", + "value": "keenmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lawful Material" + }, + "RESREF": { + "type": "resref", + "value": "lawfulmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Casting Material" + }, + "RESREF": { + "type": "resref", + "value": "lglammat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Fortification Material" + }, + "RESREF": { + "type": "resref", + "value": "lfortmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lightning Material" + }, + "RESREF": { + "type": "resref", + "value": "elecmat2" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Magical Strength Material" + }, + "RESREF": { + "type": "resref", + "value": "throwmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Master Work Armor Materials" + }, + "RESREF": { + "type": "resref", + "value": "wmarmormat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Master Work Weapon Material" + }, + "RESREF": { + "type": "resref", + "value": "mwweaponmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Medium Fortification Material" + }, + "RESREF": { + "type": "resref", + "value": "mfortmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Phylactery" + }, + "RESREF": { + "type": "resref", + "value": "lichamulet" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "prc_ipbase" + }, + "RESREF": { + "type": "resref", + "value": "prc_ipbase" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Seeing Material" + }, + "RESREF": { + "type": "resref", + "value": "ghostmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shadow Material" + }, + "RESREF": { + "type": "resref", + "value": "shadowmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shocking Material" + }, + "RESREF": { + "type": "resref", + "value": "elecmat3" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Silent Material" + }, + "RESREF": { + "type": "resref", + "value": "silentmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Slick Material" + }, + "RESREF": { + "type": "resref", + "value": "slickmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sonic Material" + }, + "RESREF": { + "type": "resref", + "value": "sonicmat2" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sonic Resistant Material" + }, + "RESREF": { + "type": "resref", + "value": "sonicmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Soul Gem" + }, + "RESREF": { + "type": "resref", + "value": "soul_gem" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Speeding Material" + }, + "RESREF": { + "type": "resref", + "value": "speedmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spell Mantle Material" + }, + "RESREF": { + "type": "resref", + "value": "reflecmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spell Resistance 14 Material" + }, + "RESREF": { + "type": "resref", + "value": "spell14mat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spell Resistance 16 Material" + }, + "RESREF": { + "type": "resref", + "value": "spell16mat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spell Resistance 18 Material" + }, + "RESREF": { + "type": "resref", + "value": "spell18mat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spell Resistance 20 Material" + }, + "RESREF": { + "type": "resref", + "value": "spell20mat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Thundering Material" + }, + "RESREF": { + "type": "resref", + "value": "sonicmat3" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Unholy Material" + }, + "RESREF": { + "type": "resref", + "value": "unholymat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Vorpal Material" + }, + "RESREF": { + "type": "resref", + "value": "vorpmat" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wounding Material" + }, + "RESREF": { + "type": "resref", + "value": "woundmat" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6689 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 2 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Amulet" + }, + "RESREF": { + "type": "resref", + "value": "craft_amulet" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Belt" + }, + "RESREF": { + "type": "resref", + "value": "craft_belt" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boots" + }, + "RESREF": { + "type": "resref", + "value": "craft_boots" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bracers" + }, + "RESREF": { + "type": "resref", + "value": "craft_bracers" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cloak" + }, + "RESREF": { + "type": "resref", + "value": "craft_cloak" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crafted Rod" + }, + "RESREF": { + "type": "resref", + "value": "craft_rod" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crafted Staff" + }, + "RESREF": { + "type": "resref", + "value": "craft_staff" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gloves" + }, + "RESREF": { + "type": "resref", + "value": "craft_gloves" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Helmet" + }, + "RESREF": { + "type": "resref", + "value": "craft_helmet" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ring" + }, + "RESREF": { + "type": "resref", + "value": "craft_ring" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scroll" + }, + "RESREF": { + "type": "resref", + "value": "craft_scroll" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6690 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 3 + }, + "STRREF": { + "type": "dword", + "value": 6691 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 4 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "A Gem Caged Creature" + }, + "RESREF": { + "type": "resref", + "value": "it_gemcage_gem" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Adamantine Plating" + }, + "RESREF": { + "type": "resref", + "value": "prc_wf_admtbody" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Composite Plating" + }, + "RESREF": { + "type": "resref", + "value": "prc_wf_compbody" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "DeathToken" + }, + "RESREF": { + "type": "resref", + "value": "deathtoken" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ironwood Plating" + }, + "RESREF": { + "type": "resref", + "value": "prc_wf_woodbody" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mithril Plating" + }, + "RESREF": { + "type": "resref", + "value": "prc_wf_mithbody" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Platinum Armor +4" + }, + "RESREF": { + "type": "resref", + "value": "platinumarmor4" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Platinum Armor +6" + }, + "RESREF": { + "type": "resref", + "value": "platinumarmor6" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Platinum Armor +8" + }, + "RESREF": { + "type": "resref", + "value": "platinumarmor8" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Soulknife Shield of Thought" + }, + "RESREF": { + "type": "resref", + "value": "psi_sk_tshield_0" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Unarmored Body" + }, + "RESREF": { + "type": "resref", + "value": "prc_wf_unacbody" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warforged Head" + }, + "RESREF": { + "type": "resref", + "value": "prc_wf_helmhead" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warforged Head (Adamantine)" + }, + "RESREF": { + "type": "resref", + "value": "prc_wf_helmadmt" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warforged Head (Ironwood)" + }, + "RESREF": { + "type": "resref", + "value": "prc_wf_helmwood" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warforged Head (Mithril)" + }, + "RESREF": { + "type": "resref", + "value": "prc_wf_helmmith" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warforged Slam (Colossal)" + }, + "RESREF": { + "type": "resref", + "value": "prc_warf_slam_c" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warforged Slam (Gargantuan)" + }, + "RESREF": { + "type": "resref", + "value": "prc_warf_slam_g" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warforged Slam (Huge)" + }, + "RESREF": { + "type": "resref", + "value": "prc_warf_slam_h" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warforged Slam (Large)" + }, + "RESREF": { + "type": "resref", + "value": "prc_warf_slam_l" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warforged Slam (Medium)" + }, + "RESREF": { + "type": "resref", + "value": "prc_warf_slam_m" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warforged Slam (Small)" + }, + "RESREF": { + "type": "resref", + "value": "prc_warf_slam_s" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warforged Slam (Tiny)" + }, + "RESREF": { + "type": "resref", + "value": "prc_warf_slam_t" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6692 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6687 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 53 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "bagofgold" + }, + "STRREF": { + "type": "dword", + "value": 68948 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "DM Ban Wand" + }, + "RESREF": { + "type": "resref", + "value": "dmbanwand" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "DM Cleaner" + }, + "RESREF": { + "type": "resref", + "value": "dmcleaner" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "itemrecipe" + }, + "STRREF": { + "type": "dword", + "value": 16824436 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "PRC Target Widget" + }, + "RESREF": { + "type": "resref", + "value": "prc_target" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rune Stone" + }, + "RESREF": { + "type": "resref", + "value": "prc_rune_1" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Secret Chest Key" + }, + "RESREF": { + "type": "resref", + "value": "xchst_key" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6732 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 27 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "+ 1 Sleep Arrow" + }, + "RESREF": { + "type": "resref", + "value": "arrow601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Arrow" + }, + "RESREF": { + "type": "resref", + "value": "arrow001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Arrow +1" + }, + "RESREF": { + "type": "resref", + "value": "arrow101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Arrow +1 of Dragon Slaying" + }, + "RESREF": { + "type": "resref", + "value": "arrow602" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Arrow +1 of Greater Dragon Slaying" + }, + "RESREF": { + "type": "resref", + "value": "arrow603" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Arrow +2" + }, + "RESREF": { + "type": "resref", + "value": "arrow201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Arrow +3" + }, + "RESREF": { + "type": "resref", + "value": "arrow301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Arrow +4" + }, + "RESREF": { + "type": "resref", + "value": "arrow401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Arrow +5" + }, + "RESREF": { + "type": "resref", + "value": "arrow501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Arrow of Bone" + }, + "RESREF": { + "type": "resref", + "value": "prc_ab_arrow001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Imbued Arrow" + }, + "RESREF": { + "type": "resref", + "value": "wp_arr_imbue_1" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Serpent Arrow" + }, + "RESREF": { + "type": "resref", + "value": "prc_serparrow" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6757 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 28 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "+ 2 Screaming Bolt" + }, + "RESREF": { + "type": "resref", + "value": "bolt601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bolt" + }, + "RESREF": { + "type": "resref", + "value": "bolt001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bolt +1" + }, + "RESREF": { + "type": "resref", + "value": "bolt101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bolt +2" + }, + "RESREF": { + "type": "resref", + "value": "bolt201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bolt +3" + }, + "RESREF": { + "type": "resref", + "value": "bolt301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bolt +4" + }, + "RESREF": { + "type": "resref", + "value": "bolt401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bolt +5" + }, + "RESREF": { + "type": "resref", + "value": "bolt501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bolt of Bone" + }, + "RESREF": { + "type": "resref", + "value": "prc_ab_bolt" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Serpent Bolt" + }, + "RESREF": { + "type": "resref", + "value": "prc_serpbolt" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6758 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 29 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bullet" + }, + "RESREF": { + "type": "resref", + "value": "bullet001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bullet +1" + }, + "RESREF": { + "type": "resref", + "value": "bullet101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bullet +2" + }, + "RESREF": { + "type": "resref", + "value": "bullet201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bullet +3" + }, + "RESREF": { + "type": "resref", + "value": "bullet301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bullet +4" + }, + "RESREF": { + "type": "resref", + "value": "bullet401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bullet +5" + }, + "RESREF": { + "type": "resref", + "value": "bullet501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bullet of Bone" + }, + "RESREF": { + "type": "resref", + "value": "prc_ab_bullet" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Magic Stone" + }, + "RESREF": { + "type": "resref", + "value": "magicstone" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6759 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6756 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 32 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Doombringer Lord Axe" + }, + "RESREF": { + "type": "resref", + "value": "prc_tn_dbl" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greataxe" + }, + "RESREF": { + "type": "resref", + "value": "gaxe001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greataxe +1" + }, + "RESREF": { + "type": "resref", + "value": "gaxe101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greataxe +2" + }, + "RESREF": { + "type": "resref", + "value": "gaxe201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greataxe +3" + }, + "RESREF": { + "type": "resref", + "value": "gaxe301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greataxe +4" + }, + "RESREF": { + "type": "resref", + "value": "gaxe401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greataxe +5" + }, + "RESREF": { + "type": "resref", + "value": "gaxe501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Life Drinker" + }, + "RESREF": { + "type": "resref", + "value": "gaxe601" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6762 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 30 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Handaxe" + }, + "RESREF": { + "type": "resref", + "value": "haxe001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Handaxe +1" + }, + "RESREF": { + "type": "resref", + "value": "haxe101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Handaxe +2" + }, + "RESREF": { + "type": "resref", + "value": "haxe201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Handaxe +3" + }, + "RESREF": { + "type": "resref", + "value": "haxe301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Handaxe +4" + }, + "RESREF": { + "type": "resref", + "value": "haxe401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Handaxe +5" + }, + "RESREF": { + "type": "resref", + "value": "haxe501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Incarnate Weapon (Chaos)" + }, + "RESREF": { + "type": "resref", + "value": "moi_incarnwpn_ch" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ur" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_ur" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6760 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 31 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Adamantine Battleaxe" + }, + "RESREF": { + "type": "resref", + "value": "baxe601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Battleaxe" + }, + "RESREF": { + "type": "resref", + "value": "baxe001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Battleaxe +1" + }, + "RESREF": { + "type": "resref", + "value": "baxe101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Battleaxe +2" + }, + "RESREF": { + "type": "resref", + "value": "baxe201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Battleaxe +3" + }, + "RESREF": { + "type": "resref", + "value": "baxe301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Battleaxe +4" + }, + "RESREF": { + "type": "resref", + "value": "baxe401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Battleaxe +5" + }, + "RESREF": { + "type": "resref", + "value": "baxe501" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6761 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 490 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 33 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bastard Sword" + }, + "RESREF": { + "type": "resref", + "value": "bsword001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bastard Sword +1" + }, + "RESREF": { + "type": "resref", + "value": "bsword101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bastard Sword +2" + }, + "RESREF": { + "type": "resref", + "value": "bsword201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bastard Sword +3" + }, + "RESREF": { + "type": "resref", + "value": "bsword301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bastard Sword +4" + }, + "RESREF": { + "type": "resref", + "value": "bsword401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bastard Sword +5" + }, + "RESREF": { + "type": "resref", + "value": "bsword501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Kamate" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_kamate" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ramethene Sword" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_ramthene" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sun Blade" + }, + "RESREF": { + "type": "resref", + "value": "bsword601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sunsword" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_sunsword" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6764 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 34 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Adamantine Dagger" + }, + "RESREF": { + "type": "resref", + "value": "dagger601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Assassin's Dagger" + }, + "RESREF": { + "type": "resref", + "value": "dagger603" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dagger" + }, + "RESREF": { + "type": "resref", + "value": "dagger001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dagger +1" + }, + "RESREF": { + "type": "resref", + "value": "dagger101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dagger +2" + }, + "RESREF": { + "type": "resref", + "value": "dagger201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dagger +3" + }, + "RESREF": { + "type": "resref", + "value": "dagger301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dagger +4" + }, + "RESREF": { + "type": "resref", + "value": "dagger401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dagger +5" + }, + "RESREF": { + "type": "resref", + "value": "dagger501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dagger of Venom" + }, + "RESREF": { + "type": "resref", + "value": "dagger602" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Runescarred Dagger" + }, + "RESREF": { + "type": "resref", + "value": "runescarreddagge" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Umbral Awn" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_umbral" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6765 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 35 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Blackrazor" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_blackrzr" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boneblade Greatsword" + }, + "RESREF": { + "type": "resref", + "value": "wswgs071" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boneblade Greatsword" + }, + "RESREF": { + "type": "resref", + "value": "wswgs072" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boneblade Greatsword" + }, + "RESREF": { + "type": "resref", + "value": "wswgs073" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crimson Ruination" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_crimruin" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Faithful Avenger" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_faithful" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Falchion" + }, + "RESREF": { + "type": "resref", + "value": "falchion" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Falchion" + }, + "RESREF": { + "type": "resref", + "value": "prc_wswfa001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Frostbrand" + }, + "RESREF": { + "type": "resref", + "value": "gsword601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greatsword" + }, + "RESREF": { + "type": "resref", + "value": "gsword001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greatsword +1" + }, + "RESREF": { + "type": "resref", + "value": "gsword101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greatsword +2" + }, + "RESREF": { + "type": "resref", + "value": "gsword201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greatsword +3" + }, + "RESREF": { + "type": "resref", + "value": "gsword301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greatsword +4" + }, + "RESREF": { + "type": "resref", + "value": "gsword401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Greatsword +5" + }, + "RESREF": { + "type": "resref", + "value": "gsword501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Unfettered" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_unfetter" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6766 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 36 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Blade of the Last Citadel" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_lastcit" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boneblade Longsword" + }, + "RESREF": { + "type": "resref", + "value": "wswls091" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boneblade Longsword" + }, + "RESREF": { + "type": "resref", + "value": "wswls092" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boneblade Longsword" + }, + "RESREF": { + "type": "resref", + "value": "wswls093" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Durindana" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_durind" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dymondheart" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_dymond" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Exordius" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_exordius" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Flame Tongue" + }, + "RESREF": { + "type": "resref", + "value": "lsword603" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Holy Avenger" + }, + "RESREF": { + "type": "resref", + "value": "lsword605" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Incarnate Weapon (Law)" + }, + "RESREF": { + "type": "resref", + "value": "moi_incarnwpn_lw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longsword" + }, + "RESREF": { + "type": "resref", + "value": "lsword001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longsword +1" + }, + "RESREF": { + "type": "resref", + "value": "lsword101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longsword +2" + }, + "RESREF": { + "type": "resref", + "value": "lsword201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longsword +3" + }, + "RESREF": { + "type": "resref", + "value": "lsword301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longsword +4" + }, + "RESREF": { + "type": "resref", + "value": "lsword401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longsword +5" + }, + "RESREF": { + "type": "resref", + "value": "lsword501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Night Blade" + }, + "RESREF": { + "type": "resref", + "value": "lsword601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sword of Life Stealing" + }, + "RESREF": { + "type": "resref", + "value": "lsword602" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sword of Planes" + }, + "RESREF": { + "type": "resref", + "value": "lsword604" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6767 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 37 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "BaalSummon1Kurki" + }, + "RESREF": { + "type": "resref", + "value": "baalsummon1kurki" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Desert Wind" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_dsrtwind" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Desert Wind" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_dwtob" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eagle Claw" + }, + "RESREF": { + "type": "resref", + "value": "bbd_eagle_claw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eagle Claw" + }, + "RESREF": { + "type": "resref", + "value": "bdd_eagle_claw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Elven Courtblade" + }, + "RESREF": { + "type": "resref", + "value": "prc_wspec001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Elven Lightblade" + }, + "RESREF": { + "type": "resref", + "value": "prc_wspel001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Elven Thinblade" + }, + "RESREF": { + "type": "resref", + "value": "prc_wspet001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Goad" + }, + "RESREF": { + "type": "resref", + "value": "goad" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Goad" + }, + "RESREF": { + "type": "resref", + "value": "prc_wspgd001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heavy Pick" + }, + "RESREF": { + "type": "resref", + "value": "prc_wblph001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Katana" + }, + "RESREF": { + "type": "resref", + "value": "katana001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Katana +1" + }, + "RESREF": { + "type": "resref", + "value": "katana101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Katana +2" + }, + "RESREF": { + "type": "resref", + "value": "katana201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Katana +3" + }, + "RESREF": { + "type": "resref", + "value": "katana301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Katana +4" + }, + "RESREF": { + "type": "resref", + "value": "katana401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Katana +5" + }, + "RESREF": { + "type": "resref", + "value": "katana501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Katar" + }, + "RESREF": { + "type": "resref", + "value": "prc_wswdp001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Pick" + }, + "RESREF": { + "type": "resref", + "value": "prc_wblpl001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Masterwork Katana" + }, + "RESREF": { + "type": "resref", + "value": "codi_mw_katana" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rapier" + }, + "RESREF": { + "type": "resref", + "value": "rapier001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rapier +1" + }, + "RESREF": { + "type": "resref", + "value": "rapier101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rapier +2" + }, + "RESREF": { + "type": "resref", + "value": "rapier201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rapier +3" + }, + "RESREF": { + "type": "resref", + "value": "rapier301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rapier +4" + }, + "RESREF": { + "type": "resref", + "value": "rapier401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rapier +5" + }, + "RESREF": { + "type": "resref", + "value": "rapier501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rapier of Puncturing" + }, + "RESREF": { + "type": "resref", + "value": "rapier601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sai" + }, + "RESREF": { + "type": "resref", + "value": "prc_wswsi001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scimitar" + }, + "RESREF": { + "type": "resref", + "value": "scimitar001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scimitar +1" + }, + "RESREF": { + "type": "resref", + "value": "scimitar101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scimitar +2" + }, + "RESREF": { + "type": "resref", + "value": "scimitar201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scimitar +3" + }, + "RESREF": { + "type": "resref", + "value": "scimitar301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scimitar +4" + }, + "RESREF": { + "type": "resref", + "value": "scimitar401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scimitar +5" + }, + "RESREF": { + "type": "resref", + "value": "scimitar501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Steadfast" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_steadfst" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Supernal Clarity" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_supernal" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sylvan Scimitar" + }, + "RESREF": { + "type": "resref", + "value": "scimitar601" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6699 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 38 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boneblade Shortsword" + }, + "RESREF": { + "type": "resref", + "value": "wswss071" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boneblade Shortsword" + }, + "RESREF": { + "type": "resref", + "value": "wswss072" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Boneblade Shortsword" + }, + "RESREF": { + "type": "resref", + "value": "wswss073" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Caladbolg" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_calad" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Enserric the Rapier" + }, + "RESREF": { + "type": "resref", + "value": "iw_rapier" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eventide's Edge" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_eventide" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Full Moon's Trick" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_fullmoon" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Luck Blade" + }, + "RESREF": { + "type": "resref", + "value": "ssword602" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Masterwork Wakizashi" + }, + "RESREF": { + "type": "resref", + "value": "codi_mw_short" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Orc Bane" + }, + "RESREF": { + "type": "resref", + "value": "ssword601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Short Sword" + }, + "RESREF": { + "type": "resref", + "value": "ssword001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Short Sword +1" + }, + "RESREF": { + "type": "resref", + "value": "ssword101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Short Sword +2" + }, + "RESREF": { + "type": "resref", + "value": "ssword201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Short Sword +3" + }, + "RESREF": { + "type": "resref", + "value": "ssword301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Short Sword +4" + }, + "RESREF": { + "type": "resref", + "value": "ssword401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Short Sword +5" + }, + "RESREF": { + "type": "resref", + "value": "ssword501" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6768 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6763 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 39 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Club" + }, + "RESREF": { + "type": "resref", + "value": "club001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Club +1" + }, + "RESREF": { + "type": "resref", + "value": "club101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Club +2" + }, + "RESREF": { + "type": "resref", + "value": "club201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Club +3" + }, + "RESREF": { + "type": "resref", + "value": "club301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Club +4" + }, + "RESREF": { + "type": "resref", + "value": "club401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Club +5" + }, + "RESREF": { + "type": "resref", + "value": "club501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sap" + }, + "RESREF": { + "type": "resref", + "value": "prc_wspsp001" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6769 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 40 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fiendkiller's Flail" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_fiendkll" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heavy Flail" + }, + "RESREF": { + "type": "resref", + "value": "hflail001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heavy Flail +1" + }, + "RESREF": { + "type": "resref", + "value": "hflail101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heavy Flail +2" + }, + "RESREF": { + "type": "resref", + "value": "hflail201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heavy Flail +3" + }, + "RESREF": { + "type": "resref", + "value": "hflail301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heavy Flail +4" + }, + "RESREF": { + "type": "resref", + "value": "hflail401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heavy Flail +5" + }, + "RESREF": { + "type": "resref", + "value": "hflail501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hillcrusher" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_hillcrus" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Incarnate Weapon (Evil)" + }, + "RESREF": { + "type": "resref", + "value": "moi_incarnwpn_ev" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Flail" + }, + "RESREF": { + "type": "resref", + "value": "lflail001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Flail +1" + }, + "RESREF": { + "type": "resref", + "value": "lflail101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Flail +2" + }, + "RESREF": { + "type": "resref", + "value": "lflail201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Flail +3" + }, + "RESREF": { + "type": "resref", + "value": "lflail301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Flail +4" + }, + "RESREF": { + "type": "resref", + "value": "lflail401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Flail +5" + }, + "RESREF": { + "type": "resref", + "value": "lflail501" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6770 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 41 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dwarven Thrower" + }, + "RESREF": { + "type": "resref", + "value": "whammer601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dwarven Thrower" + }, + "RESREF": { + "type": "resref", + "value": "whammer602" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eurynome's Warhammer" + }, + "RESREF": { + "type": "resref", + "value": "bnd_eury_hammer" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hammer of Witches" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_witches" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Incarnate Weapon (Good)" + }, + "RESREF": { + "type": "resref", + "value": "moi_incarnwpn_gd" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Hammer" + }, + "RESREF": { + "type": "resref", + "value": "lhammer001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Hammer +1" + }, + "RESREF": { + "type": "resref", + "value": "lhammer101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Hammer +2" + }, + "RESREF": { + "type": "resref", + "value": "lhammer201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Hammer +3" + }, + "RESREF": { + "type": "resref", + "value": "lhammer301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Hammer +4" + }, + "RESREF": { + "type": "resref", + "value": "lhammer401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Hammer +5" + }, + "RESREF": { + "type": "resref", + "value": "lhammer501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Maul" + }, + "RESREF": { + "type": "resref", + "value": "prc_wxblma001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warhammer" + }, + "RESREF": { + "type": "resref", + "value": "whammer001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warhammer +1" + }, + "RESREF": { + "type": "resref", + "value": "whammer101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warhammer +2" + }, + "RESREF": { + "type": "resref", + "value": "whammer201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warhammer +3" + }, + "RESREF": { + "type": "resref", + "value": "whammer301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warhammer +4" + }, + "RESREF": { + "type": "resref", + "value": "whammer401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Warhammer +5" + }, + "RESREF": { + "type": "resref", + "value": "whammer501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Whelm" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_whelm" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6771 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 42 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Arik's Vengeance" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_arik" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Deva Mace" + }, + "RESREF": { + "type": "resref", + "value": "devamace" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Eldritch Glaive" + }, + "RESREF": { + "type": "resref", + "value": "prc_eldrtch_glv" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heavy Mace" + }, + "RESREF": { + "type": "resref", + "value": "prc_wxblmh001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mace" + }, + "RESREF": { + "type": "resref", + "value": "mace001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mace +1" + }, + "RESREF": { + "type": "resref", + "value": "mace101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mace +2" + }, + "RESREF": { + "type": "resref", + "value": "mace201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mace +3" + }, + "RESREF": { + "type": "resref", + "value": "mace301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mace +4" + }, + "RESREF": { + "type": "resref", + "value": "mace401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mace +5" + }, + "RESREF": { + "type": "resref", + "value": "mace501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mace of Smiting" + }, + "RESREF": { + "type": "resref", + "value": "mace602" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mace of Terror" + }, + "RESREF": { + "type": "resref", + "value": "mace601" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6772 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 61 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mindsplinter" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_mindspli" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Morningstar" + }, + "RESREF": { + "type": "resref", + "value": "mstar001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Morningstar +1" + }, + "RESREF": { + "type": "resref", + "value": "mstar101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Morningstar +2" + }, + "RESREF": { + "type": "resref", + "value": "mstar201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Morningstar +3" + }, + "RESREF": { + "type": "resref", + "value": "mstar301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Morningstar +4" + }, + "RESREF": { + "type": "resref", + "value": "mstar401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Morningstar +5" + }, + "RESREF": { + "type": "resref", + "value": "mstar501" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6817 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 491 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 46 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Baal Summon 2 Axe" + }, + "RESREF": { + "type": "resref", + "value": "baalsummon2axe" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Defender's Twin" + }, + "RESREF": { + "type": "resref", + "value": "rash5" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Demonspike Cleaver" + }, + "RESREF": { + "type": "resref", + "value": "rash10" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dire Mace" + }, + "RESREF": { + "type": "resref", + "value": "dmace001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dire Mace +1" + }, + "RESREF": { + "type": "resref", + "value": "dmace101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dire Mace +2" + }, + "RESREF": { + "type": "resref", + "value": "dmace201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dire Mace +3" + }, + "RESREF": { + "type": "resref", + "value": "dmace301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dire Mace +4" + }, + "RESREF": { + "type": "resref", + "value": "dmace401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dire Mace +5" + }, + "RESREF": { + "type": "resref", + "value": "dmace501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Double Axe" + }, + "RESREF": { + "type": "resref", + "value": "daxe001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Double Axe +1" + }, + "RESREF": { + "type": "resref", + "value": "daxe101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Double Axe +2" + }, + "RESREF": { + "type": "resref", + "value": "daxe201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Double Axe +3" + }, + "RESREF": { + "type": "resref", + "value": "daxe301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Double Axe +4" + }, + "RESREF": { + "type": "resref", + "value": "daxe401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Double Axe +5" + }, + "RESREF": { + "type": "resref", + "value": "daxe501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Double Scimitar" + }, + "RESREF": { + "type": "resref", + "value": "prc_wxdbsc001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Flesh Reaver" + }, + "RESREF": { + "type": "resref", + "value": "rash8" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quarterstaff" + }, + "RESREF": { + "type": "resref", + "value": "qstaff001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quarterstaff +1" + }, + "RESREF": { + "type": "resref", + "value": "qstaff101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quarterstaff +2" + }, + "RESREF": { + "type": "resref", + "value": "qstaff201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quarterstaff +3" + }, + "RESREF": { + "type": "resref", + "value": "qstaff301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quarterstaff +4" + }, + "RESREF": { + "type": "resref", + "value": "qstaff401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Quarterstaff +5" + }, + "RESREF": { + "type": "resref", + "value": "qstaff501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shattering Crash" + }, + "RESREF": { + "type": "resref", + "value": "rash9" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Southern Ice" + }, + "RESREF": { + "type": "resref", + "value": "rash7" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Star of the Rashemi" + }, + "RESREF": { + "type": "resref", + "value": "rash6" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Two-Bladed Sword" + }, + "RESREF": { + "type": "resref", + "value": "dsword001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Two-Bladed Sword +1" + }, + "RESREF": { + "type": "resref", + "value": "dsword101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Two-Bladed Sword +2" + }, + "RESREF": { + "type": "resref", + "value": "dsword201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Two-Bladed Sword +3" + }, + "RESREF": { + "type": "resref", + "value": "dsword301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Two-Bladed Sword +4" + }, + "RESREF": { + "type": "resref", + "value": "dsword401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Two-Bladed Sword +5" + }, + "RESREF": { + "type": "resref", + "value": "dsword501" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6775 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 47 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bones of Li Peng" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_lipeng" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Caput Mortuum" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_cptmortm" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Devious" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_devious" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dwarven Waraxe " + }, + "RESREF": { + "type": "resref", + "value": "dwaxe001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dwarven Waraxe +1" + }, + "RESREF": { + "type": "resref", + "value": "dwaxe101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dwarven Waraxe +2" + }, + "RESREF": { + "type": "resref", + "value": "dwaxe201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dwarven Waraxe +3" + }, + "RESREF": { + "type": "resref", + "value": "dwaxe301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dwarven Waraxe +4" + }, + "RESREF": { + "type": "resref", + "value": "dwaxe401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dwarven Waraxe +5" + }, + "RESREF": { + "type": "resref", + "value": "dwaxe501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fire Lash" + }, + "RESREF": { + "type": "resref", + "value": "prc_pyro_lash_wh" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Flay" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_flay" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Kama" + }, + "RESREF": { + "type": "resref", + "value": "kama001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Kama +1" + }, + "RESREF": { + "type": "resref", + "value": "kama101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Kama +2" + }, + "RESREF": { + "type": "resref", + "value": "kama201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Kama +3" + }, + "RESREF": { + "type": "resref", + "value": "kama301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Kama +4" + }, + "RESREF": { + "type": "resref", + "value": "kama401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Kama +5" + }, + "RESREF": { + "type": "resref", + "value": "kama402" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Kukri" + }, + "RESREF": { + "type": "resref", + "value": "kukri001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Kukri +1" + }, + "RESREF": { + "type": "resref", + "value": "kukri101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Kukri +2" + }, + "RESREF": { + "type": "resref", + "value": "kukri201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Kukri +3" + }, + "RESREF": { + "type": "resref", + "value": "kukri301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Kukri +4" + }, + "RESREF": { + "type": "resref", + "value": "kukri401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Kukri +5" + }, + "RESREF": { + "type": "resref", + "value": "kukri501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Nunchaku" + }, + "RESREF": { + "type": "resref", + "value": "prc_wblnn001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rive" + }, + "RESREF": { + "type": "resref", + "value": "bdd_sword" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rive" + }, + "RESREF": { + "type": "resref", + "value": "rive" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shishi-O" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_shishio" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sickle" + }, + "RESREF": { + "type": "resref", + "value": "sickle001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sickle +1" + }, + "RESREF": { + "type": "resref", + "value": "sickle101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sickle +2" + }, + "RESREF": { + "type": "resref", + "value": "sickle201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sickle +3" + }, + "RESREF": { + "type": "resref", + "value": "sickle301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sickle +4" + }, + "RESREF": { + "type": "resref", + "value": "sickle401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sickle +5" + }, + "RESREF": { + "type": "resref", + "value": "sickle501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tiger Fang" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_tigerfng" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Vicious" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_vicious" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Whip" + }, + "RESREF": { + "type": "resref", + "value": "whip001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Whip +1" + }, + "RESREF": { + "type": "resref", + "value": "whip101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Whip +2" + }, + "RESREF": { + "type": "resref", + "value": "whip201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Whip +3" + }, + "RESREF": { + "type": "resref", + "value": "whip301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Whip +4" + }, + "RESREF": { + "type": "resref", + "value": "whip401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Whip +5" + }, + "RESREF": { + "type": "resref", + "value": "whip501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Whip of Shar" + }, + "RESREF": { + "type": "resref", + "value": "whipofshar" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6776 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 48 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Cancelation" + }, + "RESREF": { + "type": "resref", + "value": "rod101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Enemy Detection" + }, + "RESREF": { + "type": "resref", + "value": "rod109" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Flailing" + }, + "RESREF": { + "type": "resref", + "value": "rod111" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Flailing" + }, + "RESREF": { + "type": "resref", + "value": "rodw111" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Flame Extinguishing" + }, + "RESREF": { + "type": "resref", + "value": "rod104" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Lordly Might" + }, + "RESREF": { + "type": "resref", + "value": "rod114" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Lordly Might" + }, + "RESREF": { + "type": "resref", + "value": "rodw1114" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Lordly Might" + }, + "RESREF": { + "type": "resref", + "value": "rodw2114" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Lordly Might" + }, + "RESREF": { + "type": "resref", + "value": "rodw3114" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Lordly Might" + }, + "RESREF": { + "type": "resref", + "value": "rodw4114" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Negation" + }, + "RESREF": { + "type": "resref", + "value": "rod110" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Rulership" + }, + "RESREF": { + "type": "resref", + "value": "rod112" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Spell Aborption" + }, + "RESREF": { + "type": "resref", + "value": "rod113" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of the Bear" + }, + "RESREF": { + "type": "resref", + "value": "rod103" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of the Viper" + }, + "RESREF": { + "type": "resref", + "value": "rod106" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Thunder and Lightning" + }, + "RESREF": { + "type": "resref", + "value": "rod107" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Trap Detection" + }, + "RESREF": { + "type": "resref", + "value": "rod108" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Withering" + }, + "RESREF": { + "type": "resref", + "value": "rod105" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rod of Wonder" + }, + "RESREF": { + "type": "resref", + "value": "rod102" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6778 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 49 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Abjuration" + }, + "RESREF": { + "type": "resref", + "value": "jd_wmgst001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Charming" + }, + "RESREF": { + "type": "resref", + "value": "mstaff101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Conjuration" + }, + "RESREF": { + "type": "resref", + "value": "jd_wmgst002" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Defense" + }, + "RESREF": { + "type": "resref", + "value": "mstaff105" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Divination" + }, + "RESREF": { + "type": "resref", + "value": "jd_wmgst003" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Enchantment" + }, + "RESREF": { + "type": "resref", + "value": "jd_wmgst004" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Evocation" + }, + "RESREF": { + "type": "resref", + "value": "jd_wmgst005" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Fire" + }, + "RESREF": { + "type": "resref", + "value": "jd_wmgst006" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Fire" + }, + "RESREF": { + "type": "resref", + "value": "mstaff103" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Frost" + }, + "RESREF": { + "type": "resref", + "value": "jd_wmgst007" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Frost" + }, + "RESREF": { + "type": "resref", + "value": "mstaff104" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Healing" + }, + "RESREF": { + "type": "resref", + "value": "jd_wmgst008" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Healing" + }, + "RESREF": { + "type": "resref", + "value": "mstaff102" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Illumination" + }, + "RESREF": { + "type": "resref", + "value": "jd_wmgst010" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Illusion" + }, + "RESREF": { + "type": "resref", + "value": "jd_wmgst009" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Life" + }, + "RESREF": { + "type": "resref", + "value": "jd_wmgst011" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Life" + }, + "RESREF": { + "type": "resref", + "value": "mstaff107" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Necromancy" + }, + "RESREF": { + "type": "resref", + "value": "jd_wmgst012" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Power" + }, + "RESREF": { + "type": "resref", + "value": "mstaff108" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of the Woodlands" + }, + "RESREF": { + "type": "resref", + "value": "jd_wmgst015" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Transmutation" + }, + "RESREF": { + "type": "resref", + "value": "jd_wmgst014" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of True Defense" + }, + "RESREF": { + "type": "resref", + "value": "jd_wmgst016" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of True Power" + }, + "RESREF": { + "type": "resref", + "value": "jd_wmgst013" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Staff of Woodlands" + }, + "RESREF": { + "type": "resref", + "value": "mstaff106" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6779 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 50 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Bull Strength" + }, + "RESREF": { + "type": "resref", + "value": "wand009" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Burning Hands" + }, + "RESREF": { + "type": "resref", + "value": "wand010" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Charm Monster" + }, + "RESREF": { + "type": "resref", + "value": "wand015" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Charm Person" + }, + "RESREF": { + "type": "resref", + "value": "wand016" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Charm Person" + }, + "RESREF": { + "type": "resref", + "value": "wand2016" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Color Spray" + }, + "RESREF": { + "type": "resref", + "value": "wand024" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Contagion" + }, + "RESREF": { + "type": "resref", + "value": "wand027" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Cure Critical Wounds" + }, + "RESREF": { + "type": "resref", + "value": "prc_cwand_ccw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Cure Critical Wounds" + }, + "RESREF": { + "type": "resref", + "value": "wand031" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Cure Light Wounds" + }, + "RESREF": { + "type": "resref", + "value": "prc_cwand_clw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Cure Light Wounds" + }, + "RESREF": { + "type": "resref", + "value": "wand032" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Cure Minor Wounds" + }, + "RESREF": { + "type": "resref", + "value": "prc_cwand_cmw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Cure Moderate Wounds" + }, + "RESREF": { + "type": "resref", + "value": "prc_cwand_cmdw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Cure Moderate Wounds" + }, + "RESREF": { + "type": "resref", + "value": "wand034" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Cure Serious Wounds" + }, + "RESREF": { + "type": "resref", + "value": "prc_cwand_csw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Cure Serious Wounds" + }, + "RESREF": { + "type": "resref", + "value": "wand035" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Darkness" + }, + "RESREF": { + "type": "resref", + "value": "wand036" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Dispel Magic" + }, + "RESREF": { + "type": "resref", + "value": "wand041" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Enfeeblement" + }, + "RESREF": { + "type": "resref", + "value": "wand143" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Fear" + }, + "RESREF": { + "type": "resref", + "value": "wand054" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Fire" + }, + "RESREF": { + "type": "resref", + "value": "wand191" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Fireball" + }, + "RESREF": { + "type": "resref", + "value": "wand058" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Fireball" + }, + "RESREF": { + "type": "resref", + "value": "wand2058" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Fireball" + }, + "RESREF": { + "type": "resref", + "value": "wand3058" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Fireball" + }, + "RESREF": { + "type": "resref", + "value": "wand4058" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Ghoul Touch" + }, + "RESREF": { + "type": "resref", + "value": "wand012" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Ice Storm" + }, + "RESREF": { + "type": "resref", + "value": "wand368" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Improved Invisibility" + }, + "RESREF": { + "type": "resref", + "value": "wand088" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Inflict Critical Wounds" + }, + "RESREF": { + "type": "resref", + "value": "wand435" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Invisibility" + }, + "RESREF": { + "type": "resref", + "value": "wand090" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Knock" + }, + "RESREF": { + "type": "resref", + "value": "wand093" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Light" + }, + "RESREF": { + "type": "resref", + "value": "wand100" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Lightning Bolt" + }, + "RESREF": { + "type": "resref", + "value": "wand101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Lightning Bolt" + }, + "RESREF": { + "type": "resref", + "value": "wand2101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Lightning Bolt" + }, + "RESREF": { + "type": "resref", + "value": "wand3101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Lightning Bolt" + }, + "RESREF": { + "type": "resref", + "value": "wand4101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Magic Missile" + }, + "RESREF": { + "type": "resref", + "value": "wand107" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Magic Missile" + }, + "RESREF": { + "type": "resref", + "value": "wand2107" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Magic Missile" + }, + "RESREF": { + "type": "resref", + "value": "wand3107" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Magic Missile" + }, + "RESREF": { + "type": "resref", + "value": "wand4107" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Magic Missile" + }, + "RESREF": { + "type": "resref", + "value": "wand5107" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Melf's Acid Arrows" + }, + "RESREF": { + "type": "resref", + "value": "wand115" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Neutralize Poison" + }, + "RESREF": { + "type": "resref", + "value": "wand126" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Poison" + }, + "RESREF": { + "type": "resref", + "value": "wand129" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Polymorph Self" + }, + "RESREF": { + "type": "resref", + "value": "wand130" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Restoration" + }, + "RESREF": { + "type": "resref", + "value": "wand152" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Searing Light" + }, + "RESREF": { + "type": "resref", + "value": "wand156" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Silence" + }, + "RESREF": { + "type": "resref", + "value": "wand163" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Slow" + }, + "RESREF": { + "type": "resref", + "value": "wand166" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Stone Skin" + }, + "RESREF": { + "type": "resref", + "value": "wand172" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Summon Monster I" + }, + "RESREF": { + "type": "resref", + "value": "wand174" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Summon Monster II" + }, + "RESREF": { + "type": "resref", + "value": "wand175" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Summon Monster III" + }, + "RESREF": { + "type": "resref", + "value": "wand176" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Summon Monster IV" + }, + "RESREF": { + "type": "resref", + "value": "wand177" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wand of Web" + }, + "RESREF": { + "type": "resref", + "value": "wand192" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6780 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6777 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 51 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Coral's Bite" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_corals" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Guurgal" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_guurgal" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Halberd" + }, + "RESREF": { + "type": "resref", + "value": "halberd001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Halberd +1" + }, + "RESREF": { + "type": "resref", + "value": "halberd101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Halberd +2" + }, + "RESREF": { + "type": "resref", + "value": "halberd201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Halberd +3" + }, + "RESREF": { + "type": "resref", + "value": "halberd301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Halberd +4" + }, + "RESREF": { + "type": "resref", + "value": "halberd401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Halberd +5" + }, + "RESREF": { + "type": "resref", + "value": "halberd501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Javelin of Lightning" + }, + "RESREF": { + "type": "resref", + "value": "spear601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Notched Spear" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_notched" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scales of Balance" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_scales" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scythe" + }, + "RESREF": { + "type": "resref", + "value": "scythe001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scythe +1" + }, + "RESREF": { + "type": "resref", + "value": "scythe101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scythe +2" + }, + "RESREF": { + "type": "resref", + "value": "scythe201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scythe +3" + }, + "RESREF": { + "type": "resref", + "value": "scythe301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scythe +4" + }, + "RESREF": { + "type": "resref", + "value": "scythe401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Scythe +5" + }, + "RESREF": { + "type": "resref", + "value": "scythe501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spear" + }, + "RESREF": { + "type": "resref", + "value": "spear001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spear +1" + }, + "RESREF": { + "type": "resref", + "value": "spear101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spear +1 Animal Command" + }, + "RESREF": { + "type": "resref", + "value": "spear602" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spear +2" + }, + "RESREF": { + "type": "resref", + "value": "spear201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spear +3" + }, + "RESREF": { + "type": "resref", + "value": "spear301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spear +4" + }, + "RESREF": { + "type": "resref", + "value": "spear401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Spear +5" + }, + "RESREF": { + "type": "resref", + "value": "spear501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Treebrother" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_treebro" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Trident of Warning" + }, + "RESREF": { + "type": "resref", + "value": "spear603" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 489 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 43 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Flamecaster's Bolt" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_flmcstr" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heavy Crossbow" + }, + "RESREF": { + "type": "resref", + "value": "hxbow001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heavy Crossbow +1" + }, + "RESREF": { + "type": "resref", + "value": "hxbow101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heavy Crossbow +2" + }, + "RESREF": { + "type": "resref", + "value": "hxbow201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heavy Crossbow +3" + }, + "RESREF": { + "type": "resref", + "value": "hxbow301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heavy Crossbow +4" + }, + "RESREF": { + "type": "resref", + "value": "hxbow401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Heavy Crossbow +5" + }, + "RESREF": { + "type": "resref", + "value": "hxbow501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Crossbow" + }, + "RESREF": { + "type": "resref", + "value": "lxbow001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Crossbow +1" + }, + "RESREF": { + "type": "resref", + "value": "lxbow101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Crossbow +2" + }, + "RESREF": { + "type": "resref", + "value": "lxbow201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Crossbow +3" + }, + "RESREF": { + "type": "resref", + "value": "lxbow301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Crossbow +4" + }, + "RESREF": { + "type": "resref", + "value": "lxbow401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Light Crossbow +5" + }, + "RESREF": { + "type": "resref", + "value": "lxbow501" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6774 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 44 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bow of the Black Archer" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_blckarch" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Flaming Composite Longbow" + }, + "RESREF": { + "type": "resref", + "value": "flamingcomposite" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longbow" + }, + "RESREF": { + "type": "resref", + "value": "lbow001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longbow +1" + }, + "RESREF": { + "type": "resref", + "value": "lbow101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longbow +2" + }, + "RESREF": { + "type": "resref", + "value": "lbow201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longbow +3" + }, + "RESREF": { + "type": "resref", + "value": "lbow301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longbow +4" + }, + "RESREF": { + "type": "resref", + "value": "lbow401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Longbow +5" + }, + "RESREF": { + "type": "resref", + "value": "lbow501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mighty Longbow " + }, + "RESREF": { + "type": "resref", + "value": "m1bow001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mighty Longbow " + }, + "RESREF": { + "type": "resref", + "value": "m2bow001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mighty Longbow " + }, + "RESREF": { + "type": "resref", + "value": "m3bow001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mighty Longbow " + }, + "RESREF": { + "type": "resref", + "value": "m4bow001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mighty Longbow " + }, + "RESREF": { + "type": "resref", + "value": "m5bow001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Oathbow" + }, + "RESREF": { + "type": "resref", + "value": "lbow601" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Simple Bow" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_simplebw" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Thaas" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_thaas" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6819 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 45 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shortbow" + }, + "RESREF": { + "type": "resref", + "value": "sbow001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shortbow +1" + }, + "RESREF": { + "type": "resref", + "value": "sbow101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shortbow +2" + }, + "RESREF": { + "type": "resref", + "value": "sbow201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shortbow +3" + }, + "RESREF": { + "type": "resref", + "value": "sbow301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shortbow +4" + }, + "RESREF": { + "type": "resref", + "value": "sbow401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shortbow +5" + }, + "RESREF": { + "type": "resref", + "value": "sbow501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Stalker's Bow" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_stalker" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6820 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 62 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sling" + }, + "RESREF": { + "type": "resref", + "value": "sling001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sling +1" + }, + "RESREF": { + "type": "resref", + "value": "sling101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sling +2" + }, + "RESREF": { + "type": "resref", + "value": "sling201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sling +3" + }, + "RESREF": { + "type": "resref", + "value": "sling301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sling +4" + }, + "RESREF": { + "type": "resref", + "value": "sling401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sling +5" + }, + "RESREF": { + "type": "resref", + "value": "sling501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Sling of the Dire Wind" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_direwind" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6821 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6818 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 52 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Acidic Fire" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_acidfire" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Alchemical Sleeping Gas" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_alcslpgas" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Alchemist's Frost" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_alcfrost" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Alchemist's Spark" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_alcspark" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Bile Droppings" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_biledrp" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_cursedwater" + }, + "STRREF": { + "type": "dword", + "value": 16838715 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dart" + }, + "RESREF": { + "type": "resref", + "value": "dart001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dart +1" + }, + "RESREF": { + "type": "resref", + "value": "dart101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dart +2" + }, + "RESREF": { + "type": "resref", + "value": "dart201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dart +3" + }, + "RESREF": { + "type": "resref", + "value": "dart301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dart +4" + }, + "RESREF": { + "type": "resref", + "value": "dart401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dart +5" + }, + "RESREF": { + "type": "resref", + "value": "dart501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dart of Bone" + }, + "RESREF": { + "type": "resref", + "value": "prc_ab_dart" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Energized Potion" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_enrgpot" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Festering Bomb" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_festerbmb" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Flash Pellet" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_flashplt" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Henchy Axe of Doom" + }, + "RESREF": { + "type": "resref", + "value": "ow_taxe_1" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Lorestealer" + }, + "RESREF": { + "type": "resref", + "value": "prc_wol_lorestlr" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Never Ending Bag of Caltrops" + }, + "RESREF": { + "type": "resref", + "value": "ow_caltrops" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Serpent Dart" + }, + "RESREF": { + "type": "resref", + "value": "prc_serpdart" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shuriken" + }, + "RESREF": { + "type": "resref", + "value": "shuriken001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shuriken +1" + }, + "RESREF": { + "type": "resref", + "value": "shuriken101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shuriken +2" + }, + "RESREF": { + "type": "resref", + "value": "shuriken201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shuriken +3" + }, + "RESREF": { + "type": "resref", + "value": "shuriken301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shuriken +4" + }, + "RESREF": { + "type": "resref", + "value": "shuriken401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shuriken +5" + }, + "RESREF": { + "type": "resref", + "value": "shuriken501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Shuriken of Bone" + }, + "RESREF": { + "type": "resref", + "value": "prc_ab_shuriken" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Throwing Axe" + }, + "RESREF": { + "type": "resref", + "value": "taxe001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Throwing Axe +1" + }, + "RESREF": { + "type": "resref", + "value": "taxe101" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Throwing Axe +2" + }, + "RESREF": { + "type": "resref", + "value": "taxe201" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Throwing Axe +3" + }, + "RESREF": { + "type": "resref", + "value": "taxe301" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Throwing Axe +4" + }, + "RESREF": { + "type": "resref", + "value": "taxe401" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Throwing Axe +5" + }, + "RESREF": { + "type": "resref", + "value": "taxe501" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Throwing Axe of Bone" + }, + "RESREF": { + "type": "resref", + "value": "prc_ab_thraxe" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Weeping Stone" + }, + "RESREF": { + "type": "resref", + "value": "prc_it_weepstn" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 494 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 500 + } + } + ] + } +} diff --git a/src/module/itp/placeablepalcus.itp.json b/src/module/itp/placeablepalcus.itp.json new file mode 100644 index 0000000..7fe3958 --- /dev/null +++ b/src/module/itp/placeablepalcus.itp.json @@ -0,0 +1,692 @@ +{ + "__data_type": "ITP ", + "MAIN": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 7 + }, + "STRREF": { + "type": "dword", + "value": 6783 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 22 + }, + "STRREF": { + "type": "dword", + "value": 111663 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 6 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Chest" + }, + "RESREF": { + "type": "resref", + "value": "rdg_chest" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "xchst_plc" + }, + "STRREF": { + "type": "dword", + "value": 5348 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Debug Lever" + }, + "RESREF": { + "type": "resref", + "value": "debuglever" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Null Psionics Field Chest" + }, + "RESREF": { + "type": "resref", + "value": "npf_keep_chest" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Rope" + }, + "RESREF": { + "type": "resref", + "value": "rdg_rope_used" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6782 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 8 + }, + "STRREF": { + "type": "dword", + "value": 6784 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 9 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Altar" + }, + "RESREF": { + "type": "resref", + "value": "codi_sam_altar" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "PC Loot" + }, + "RESREF": { + "type": "resref", + "value": "pclootbag" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Tunnel Opening" + }, + "RESREF": { + "type": "resref", + "value": "bdd_tunnel" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Wall of Iron" + }, + "RESREF": { + "type": "resref", + "value": "prc_walliron" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 1592 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 10 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mordenkainen's Magnificent Mansion" + }, + "RESREF": { + "type": "resref", + "value": "mordsmansent" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Restful Bed" + }, + "RESREF": { + "type": "resref", + "value": "restfulbed" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Restful Bed" + }, + "RESREF": { + "type": "resref", + "value": "restfulbed001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Restful Bed Roll" + }, + "RESREF": { + "type": "resref", + "value": "restfulbedroll" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Restful Campsite" + }, + "RESREF": { + "type": "resref", + "value": "campingbedroll" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Restful Cot" + }, + "RESREF": { + "type": "resref", + "value": "restfulcot" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6785 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 11 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Polyp" + }, + "RESREF": { + "type": "resref", + "value": "bdd_polyp" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6786 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 12 + }, + "STRREF": { + "type": "dword", + "value": 6787 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 14 + }, + "STRREF": { + "type": "dword", + "value": 9122 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 15 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "rdg_pit1" + }, + "STRREF": { + "type": "dword", + "value": 83425 + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "rdg_plc_corpse" + }, + "STRREF": { + "type": "dword", + "value": 68885 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Secret Door " + }, + "RESREF": { + "type": "resref", + "value": "port_door" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "rdg_secret_door" + }, + "STRREF": { + "type": "dword", + "value": 68906 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Secret Door " + }, + "RESREF": { + "type": "resref", + "value": "sec_door2" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "sp_plc_symbol" + }, + "STRREF": { + "type": "dword", + "value": 16790080 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Trap Door" + }, + "RESREF": { + "type": "resref", + "value": "rdg_pit2" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "rdg_pit4" + }, + "STRREF": { + "type": "dword", + "value": 52996 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Trap Door " + }, + "RESREF": { + "type": "resref", + "value": "rdg_pit3" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 9128 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 0 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Deepstone Pillar" + }, + "RESREF": { + "type": "resref", + "value": "prc_dpst_pillar" + } + }, + { + "__struct_id": 0, + "RESREF": { + "type": "resref", + "value": "prc_invisobj" + }, + "STRREF": { + "type": "dword", + "value": 5800 + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "prc_ess_research" + }, + "RESREF": { + "type": "resref", + "value": "prc_ess_research" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "prgt_invis" + }, + "RESREF": { + "type": "resref", + "value": "prgt_invis" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "SkinRemover" + }, + "RESREF": { + "type": "resref", + "value": "skinremover" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6688 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 1 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "LichCrafting" + }, + "RESREF": { + "type": "resref", + "value": "lichcrafting" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6689 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 2 + }, + "STRREF": { + "type": "dword", + "value": 6690 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 3 + }, + "STRREF": { + "type": "dword", + "value": 6691 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 4 + }, + "STRREF": { + "type": "dword", + "value": 6692 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6687 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 13 + }, + "STRREF": { + "type": "dword", + "value": 6788 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 16 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 17 + }, + "STRREF": { + "type": "dword", + "value": 62485 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 19 + }, + "STRREF": { + "type": "dword", + "value": 5836 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 21 + }, + "STRREF": { + "type": "dword", + "value": 67585 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 20 + }, + "STRREF": { + "type": "dword", + "value": 53151 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 18 + }, + "STRREF": { + "type": "dword", + "value": 67132 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 66490 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 5 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Genesis Entrance Portal" + }, + "RESREF": { + "type": "resref", + "value": "genesisportal" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Genesis Exit Portal" + }, + "RESREF": { + "type": "resref", + "value": "genesisexit" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Return Portal" + }, + "RESREF": { + "type": "resref", + "value": "prc_ea_return" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6781 + } + } + ] + } +} diff --git a/src/module/itp/soundpalcus.itp.json b/src/module/itp/soundpalcus.itp.json new file mode 100644 index 0000000..5a8a56a --- /dev/null +++ b/src/module/itp/soundpalcus.itp.json @@ -0,0 +1,141 @@ +{ + "__data_type": "ITP ", + "MAIN": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 6 + }, + "STRREF": { + "type": "dword", + "value": 6694 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 13 + }, + "STRREF": { + "type": "dword", + "value": 63289 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 12 + }, + "STRREF": { + "type": "dword", + "value": 62487 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 7 + }, + "STRREF": { + "type": "dword", + "value": 62483 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 5 + }, + "STRREF": { + "type": "dword", + "value": 62482 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 0 + }, + "STRREF": { + "type": "dword", + "value": 6688 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 1 + }, + "STRREF": { + "type": "dword", + "value": 6689 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 2 + }, + "STRREF": { + "type": "dword", + "value": 6690 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 3 + }, + "STRREF": { + "type": "dword", + "value": 6691 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 4 + }, + "STRREF": { + "type": "dword", + "value": 6692 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6687 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 8 + }, + "STRREF": { + "type": "dword", + "value": 62484 + } + } + ] + } +} diff --git a/src/module/itp/storepalcus.itp.json b/src/module/itp/storepalcus.itp.json new file mode 100644 index 0000000..b39f14c --- /dev/null +++ b/src/module/itp/storepalcus.itp.json @@ -0,0 +1,239 @@ +{ + "__data_type": "ITP ", + "MAIN": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 5 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Crafting" + }, + "RESREF": { + "type": "resref", + "value": "crafting" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Gem Store" + }, + "RESREF": { + "type": "resref", + "value": "merchant8_store" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Merchant2_Store" + }, + "RESREF": { + "type": "resref", + "value": "merchant2_store" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Merchant3_Store" + }, + "RESREF": { + "type": "resref", + "value": "merchant3_store" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Merchant4_Store" + }, + "RESREF": { + "type": "resref", + "value": "merchant4_store" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Merchant5_Store" + }, + "RESREF": { + "type": "resref", + "value": "merchant5_store" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Merchant6_Store" + }, + "RESREF": { + "type": "resref", + "value": "merchant6_store" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Merchant7_Store" + }, + "RESREF": { + "type": "resref", + "value": "merchant7_store" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "MerchantJunk_Store" + }, + "RESREF": { + "type": "resref", + "value": "junkstore" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "prc_scrolls" + }, + "RESREF": { + "type": "resref", + "value": "prc_scrolls" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Town Store" + }, + "RESREF": { + "type": "resref", + "value": "townstore" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6789 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 0 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "prc_epicspells" + }, + "RESREF": { + "type": "resref", + "value": "prc_epicspells" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "prc_magiccraft" + }, + "RESREF": { + "type": "resref", + "value": "prc_magiccraft" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6688 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 1 + }, + "STRREF": { + "type": "dword", + "value": 6689 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 2 + }, + "STRREF": { + "type": "dword", + "value": 6690 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 3 + }, + "STRREF": { + "type": "dword", + "value": 6691 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 4 + }, + "STRREF": { + "type": "dword", + "value": 6692 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6687 + } + } + ] + } +} diff --git a/src/module/itp/triggerpalcus.itp.json b/src/module/itp/triggerpalcus.itp.json new file mode 100644 index 0000000..97c986c --- /dev/null +++ b/src/module/itp/triggerpalcus.itp.json @@ -0,0 +1,465 @@ +{ + "__data_type": "ITP ", + "MAIN": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 5 + }, + "STRREF": { + "type": "dword", + "value": 1082 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 6 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Barracks" + }, + "RESREF": { + "type": "resref", + "value": "bdd_barracks" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Black Archer Creek" + }, + "RESREF": { + "type": "resref", + "value": "wol_a_bbbcreek" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Black Archer Enter" + }, + "RESREF": { + "type": "resref", + "value": "wol_a_bbbenter" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Books" + }, + "RESREF": { + "type": "resref", + "value": "bdd_books" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cave Explore" + }, + "RESREF": { + "type": "resref", + "value": "bdd_cave_exp" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Change" + }, + "RESREF": { + "type": "resref", + "value": "bdd_change" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Courtyard" + }, + "RESREF": { + "type": "resref", + "value": "bdd_courtyard" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dustblight" + }, + "RESREF": { + "type": "resref", + "value": "bdd_blight" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dymondheart Enter" + }, + "RESREF": { + "type": "resref", + "value": "wol_a_dyenter" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Filtrator" + }, + "RESREF": { + "type": "resref", + "value": "bdd_filtrator" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Forge" + }, + "RESREF": { + "type": "resref", + "value": "bdd_forge" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Foyer" + }, + "RESREF": { + "type": "resref", + "value": "bdd_foyer" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hidden Cave" + }, + "RESREF": { + "type": "resref", + "value": "bdd_cave_ent" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hollow Shell" + }, + "RESREF": { + "type": "resref", + "value": "bdd_shell" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Mod Enter" + }, + "RESREF": { + "type": "resref", + "value": "bdd_enter" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Oil" + }, + "RESREF": { + "type": "resref", + "value": "bdd_oil" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Ruins" + }, + "RESREF": { + "type": "resref", + "value": "bdd_ruins" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Schooner" + }, + "RESREF": { + "type": "resref", + "value": "bdd_schooner" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Smelter Office" + }, + "RESREF": { + "type": "resref", + "value": "bdd_office" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Taint" + }, + "RESREF": { + "type": "resref", + "value": "bdd_taint" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Vault" + }, + "RESREF": { + "type": "resref", + "value": "bdd_vault" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Well" + }, + "RESREF": { + "type": "resref", + "value": "bdd_well" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Xeno" + }, + "RESREF": { + "type": "resref", + "value": "bdd_xeno" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6790 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 16 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "RESREF": { + "type": "resref", + "value": "rd_trap" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 9129 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 0 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "PRC NoTeleport Area Trigger " + }, + "RESREF": { + "type": "resref", + "value": "prc_no_teleport" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6688 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 1 + }, + "STRREF": { + "type": "dword", + "value": 6689 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 2 + }, + "STRREF": { + "type": "dword", + "value": 6690 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 3 + }, + "STRREF": { + "type": "dword", + "value": 6691 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 4 + }, + "STRREF": { + "type": "dword", + "value": 6692 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6687 + } + }, + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 11 + }, + "STRREF": { + "type": "dword", + "value": 53181 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 12 + }, + "STRREF": { + "type": "dword", + "value": 2255 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 13 + }, + "STRREF": { + "type": "dword", + "value": 2256 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 14 + }, + "STRREF": { + "type": "dword", + "value": 2257 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 15 + }, + "STRREF": { + "type": "dword", + "value": 53182 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 5563 + } + } + ] + } +} diff --git a/src/module/itp/waypointpalcus.itp.json b/src/module/itp/waypointpalcus.itp.json new file mode 100644 index 0000000..de8cca7 --- /dev/null +++ b/src/module/itp/waypointpalcus.itp.json @@ -0,0 +1,380 @@ +{ + "__data_type": "ITP ", + "MAIN": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 0 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Fall" + }, + "RESREF": { + "type": "resref", + "value": "fall" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "prc_str_lookup" + }, + "RESREF": { + "type": "resref", + "value": "prc_str_lookup" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Transition" + }, + "RESREF": { + "type": "resref", + "value": "transition" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6688 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 1 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Room Monster Spawn" + }, + "RESREF": { + "type": "resref", + "value": "mon_" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6689 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 2 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Hidden Chest Spawn" + }, + "RESREF": { + "type": "resref", + "value": "hiddenchest" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Secret Door" + }, + "RESREF": { + "type": "resref", + "value": "rdg_secretdoor" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6690 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 3 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Decor" + }, + "RESREF": { + "type": "resref", + "value": "decor" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6691 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 4 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Common Room" + }, + "RESREF": { + "type": "resref", + "value": "error" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6692 + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6687 + } + }, + { + "__struct_id": 0, + "ID": { + "type": "byte", + "value": 5 + }, + "LIST": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "BDD Entrance" + }, + "RESREF": { + "type": "resref", + "value": "bdd_enter" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Black Archer Enter" + }, + "RESREF": { + "type": "resref", + "value": "wol_a_bbbwp" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cave Entrance" + }, + "RESREF": { + "type": "resref", + "value": "bdd_foyer_ent002" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Cave Entrance 2" + }, + "RESREF": { + "type": "resref", + "value": "bdd_foyer_ent001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Changed Asherati" + }, + "RESREF": { + "type": "resref", + "value": "bdd_schooner_007" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Climb Up" + }, + "RESREF": { + "type": "resref", + "value": "bdd_foyer_ent003" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Dymondheart Enter" + }, + "RESREF": { + "type": "resref", + "value": "wol_a_dymondwp" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Forge Tainted Asherati" + }, + "RESREF": { + "type": "resref", + "value": "bdd_schooner_003" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Foyer Ashen Hulks" + }, + "RESREF": { + "type": "resref", + "value": "bdd_schooner_001" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Foyer Entrance" + }, + "RESREF": { + "type": "resref", + "value": "bdd_foyer_ent" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "npf_wp_chest_sp" + }, + "RESREF": { + "type": "resref", + "value": "npf_wp_chest_sp" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Office Shadows" + }, + "RESREF": { + "type": "resref", + "value": "bdd_schooner_002" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Schooner Ashen Hulks" + }, + "RESREF": { + "type": "resref", + "value": "bdd_schooner_ash" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Taint Asherati" + }, + "RESREF": { + "type": "resref", + "value": "bdd_schooner_006" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Vault Shadow" + }, + "RESREF": { + "type": "resref", + "value": "bdd_schooner_004" + } + }, + { + "__struct_id": 0, + "NAME": { + "type": "cexostring", + "value": "Xeno Asherati" + }, + "RESREF": { + "type": "resref", + "value": "bdd_schooner_005" + } + } + ] + }, + "STRREF": { + "type": "dword", + "value": 6798 + } + } + ] + } +} diff --git a/src/module/jrl/module.jrl.json b/src/module/jrl/module.jrl.json new file mode 100644 index 0000000..37c4fdf --- /dev/null +++ b/src/module/jrl/module.jrl.json @@ -0,0 +1,773 @@ +{ + "__data_type": "JRL ", + "Categories": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Comment": { + "type": "cexostring", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "End": { + "type": "word", + "value": 0 + }, + "ID": { + "type": "dword", + "value": 1 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lvl XP Needed\n01 0\n02 1000\n03 3000\n04 6000\n05 10000\n06 15000\n07 21000\n08 28000\n09 36000\n10 45000\n11 55000\n12 66000\n13 78000\n14 91000\n15 105000\n16 120000\n17 136000\n18 153000\n19 171000\n20 190000\n21 210000\n22 231000\n23 253000\n24 276000\n25 300000\n26 325000\n27 351000\n28 378000\n29 406000\n30 435000\n31 465000\n32 496000\n33 528000\n34 561000\n35 595000\n36 630000\n37 666000\n38 703000\n39 741000\n40 780000" + } + } + } + ] + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "| D&D 3e XP Chart |" + } + }, + "Picture": { + "type": "word", + "value": 65535 + }, + "Priority": { + "type": "dword", + "value": 4 + }, + "Tag": { + "type": "cexostring", + "value": "JRNL_XPCHART" + }, + "XP": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 1, + "Comment": { + "type": "cexostring", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "End": { + "type": "word", + "value": 0 + }, + "ID": { + "type": "dword", + "value": 1 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Starting LA / Level\n \n01 / 03\n02 / 06 09\n03 / 09 15 18\n04 / 12 21 27 30\n05 / 15 27 36\n06 / 18 33\n07 / 21 39\n08 / 24\n09 / 27\n10 / 30\n11 / 33\n12 / 36\n13 / 39\n\n(Buy-off dialog will be in the PRC menu when you qualify.)" + } + } + } + ] + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "| LA Buy-off Table |" + } + }, + "Picture": { + "type": "word", + "value": 65535 + }, + "Priority": { + "type": "dword", + "value": 4 + }, + "Tag": { + "type": "cexostring", + "value": "JRNL_LA_BUYOFF" + }, + "XP": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 2, + "Comment": { + "type": "cexostring", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "End": { + "type": "word", + "value": 0 + }, + "ID": { + "type": "dword", + "value": 1 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Visit the PRC8 Discord for ruleset information, as well as other PW servers & dozens of single player PRC8 modules.\n\nhttps://discord.gg/FW9V9RKy5U" + } + } + } + ] + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "| PRC8 Discord |" + } + }, + "Picture": { + "type": "word", + "value": 65535 + }, + "Priority": { + "type": "dword", + "value": 4 + }, + "Tag": { + "type": "cexostring", + "value": "JRNL_PRC8" + }, + "XP": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 3, + "Comment": { + "type": "cexostring", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "End": { + "type": "word", + "value": 0 + }, + "ID": { + "type": "dword", + "value": 1 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Detect mode is your best friend in the dungeon. It shows that you are taking the time to examine the area around you closely.\n\nUnless you are in detect mode you will be unable to detect traps, secret doors or hidden treasures. The finding of these objects is based on your search skill.\n\nOnly rogues can find magic traps over DC 20." + } + } + } + ] + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Detect Mode" + } + }, + "Picture": { + "type": "word", + "value": 65535 + }, + "Priority": { + "type": "dword", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Category002" + }, + "XP": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 4, + "Comment": { + "type": "cexostring", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "End": { + "type": "word", + "value": 0 + }, + "ID": { + "type": "dword", + "value": 1 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "DISABLED (1 or 0 HP):\n\nThis means healed to 1 HP and movement slowed by 40%.\n\nDYING (-1 to -9 HP):\nIf a PC is lowered below 0 HP they are dying. Each round they will lose 1 HP per round until they eitehr die or stabilize. Each round there is a 10% chance a character will stabilize, if this happens they will become DISABLED.\n\nDEAD (-10 or lower HP)\nYour dead. You have 2 choices wait for someone to raise you from the dead, or respawn.\nRespawn will restart your character in town as a new level 1 character. Your possessions will be left at the place where you died, and you will be given new starting money.\n\nThis rule is intentionally harsh, a PC that makes it to level 40 here has a good party to thank." + } + } + } + ] + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Disabled, Death and Dying" + } + }, + "Picture": { + "type": "word", + "value": 65535 + }, + "Priority": { + "type": "dword", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Category003" + }, + "XP": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 5, + "Comment": { + "type": "cexostring", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "End": { + "type": "word", + "value": 0 + }, + "ID": { + "type": "dword", + "value": 1 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "One of the handiest tools you can ever buy is the Healer's Bag.\n\nWith it you can attempt to stabilize a Dying PC (See Disabled,Dying and Death), cure poison and disease.\n\nThe DC for each of these functions is 15." + } + } + } + ] + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Healers' Bag" + } + }, + "Picture": { + "type": "word", + "value": 65535 + }, + "Priority": { + "type": "dword", + "value": 2 + }, + "Tag": { + "type": "cexostring", + "value": "Category005" + }, + "XP": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 6, + "Comment": { + "type": "cexostring", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "End": { + "type": "word", + "value": 0 + }, + "ID": { + "type": "dword", + "value": 1 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "It is very dark in most places within the dungeon. Bring light sources. Torches and Sun Rods burn out so carry spares. Putting away most types of torches will cause them to burn out.\n\nThe difficulty of the dungeon is based on the average party level. The higher the average the harder the encounters, the more devious the traps and the better the locks... but there is more loot too.\n\nDo not get in a hurry, the dungeon can be a fatal place. Use your detect mode.\n\nConserve your spells, resting in the dungeon is very limited. Use mundane resources when possible.\n\nThe highest Appraise and Persuade skills affect your selling prices. Normally you sell items at 50% of their value. However for each point of appraise or persuade you have you gain an additional +1% (Max 40%). When using the junk dealer's box he will check the highest party appraise and persuade so that your party gets the absolute best deal for yout loot.\n\nSpend your loot wisely. It is not uncommon for adventuring parties to have to buy their magic weapons.\n\nDon't be afraid to return to town. It may or not be a long walk back but lack of supplies may get you killed. Pride has killed many parties.\n\nLocked door to tough for the rogue? Bash it with a melee weapon, a STR check will be done to see if you can get it open.\n\nStay together, this dungeon is designed for 4 to 6 players working together.\n\nSome monsters such as shadows and specters are incorpreal. They tend to ignore armor and are very hard to hit with weapons. Mage armor and shield spells are effective protections against them however.\n\nHave fun. This is a challenging adventure." + } + } + } + ] + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Hints and Tips" + } + }, + "Picture": { + "type": "word", + "value": 65535 + }, + "Priority": { + "type": "dword", + "value": 3 + }, + "Tag": { + "type": "cexostring", + "value": "Category007" + }, + "XP": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 7, + "Comment": { + "type": "cexostring", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "End": { + "type": "word", + "value": 0 + }, + "ID": { + "type": "dword", + "value": 1 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "RDG ITEM CREATION:\nYou can now not only enchant scrolls, potions and wands. \nYou can also enchant melee weapons, ranged weapons, armor and shields. \nAmmunition can not be enchanted at this time.\nThrown weapons can only have basic enchantments.\n\n\nMASTERWORKING: \n Before a weapon or armor can be enchanted it must first be master worked. This requires a DC 20 crafting check, 18 for dwarves. To master work an item place it and a master working material into the forge. \n Master working adds a +1 to hit bonus to weapons. This is a non-magical bonus and will not allow you to hit creatures with damage reduction. When equiped a +1 to hit will be applied to your character. \n For armor master working lowers the the armor check penalty of the armor by one. A favorite tactic of mine is to master work studded leather for my rogue so that it has no armor check penalty. When equiped you will see you have a skill bonus, all skills affected by armor check penalty have received a +1. You will only recieve this bonus if the armor has a armor check penalty. Example: Leather armor does not, no bonus. Studded leather does +1. Platemail does +1.\n\n\nBASIC ENCHANTING:\n If you have a master worked item, the skill and the gold you can enchant your own armor or weapon. Bonuses on items can go as high as +20. However you can only enchant an item with up to a bonus equal to half your skill AND level. Example to make a +1 Long Sword you must have a Masterwork Long Sword and be at least Level 2 with a Craft Weapon Skill of at least 2 and have 1000 gold. To add a bonus to a item simple put the item and the gold into the forge." + } + } + } + ] + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Item Enchantment - Part 1" + } + }, + "Picture": { + "type": "word", + "value": 65535 + }, + "Priority": { + "type": "dword", + "value": 2 + }, + "Tag": { + "type": "cexostring", + "value": "Category011" + }, + "XP": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 8, + "Comment": { + "type": "cexostring", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "End": { + "type": "word", + "value": 0 + }, + "ID": { + "type": "dword", + "value": 1 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "SPECIAL POWER ENCHANTING: \n You can add special powers to armor and weapons. NOTE: Ranged weapons have special rules, see below. These powers can range from extra fire damage to a weapon that attempts to kill with every strike. Adding these powers require special materials, you can buy these materials from the crafting merchant. Details on each power and how to apply it can be found on the material description. Most special powers require you to have a spell memorized and be a certain caster level to add the power. Because of this and their intelligence bonus wizards make excellent item craftsmen.\n\nRANGED WEAPON SPECIAL RULES:\nIf you plan to add fire, acid, cold, electrical, sonic, brillant, bane, or alignment effects to your ranged weapon read the following CAREFULLY.\nThese affects allow the weapon to modify the ammuntion fired, example adding acid to a short bow makes all arrows fired thru it +1d6 acid damage.\nHowever: \n\n1. You can only have 1 ranged weapon with ANY such an effect. Activating a second WILL cause the first to fail the next tiem you join the RDG.\n2. That weapon can only have ONE one these effects. Attempting to add another will cause the first to be over written. That means no fire & cold bows folks.\n3. The moment you take the weapon out of the forge you MUST activate it (Use it's special power)\n4. When you join the module after logging out you will have to reactivate the weapon (Use it's special power)\n5. If you find a ranged weapon in the dungeon with a Unique Power it has one of these effects and follows the same rules.\n6. You were warned.\n\nEXCEPTION: 3 materials provide unlimited ammo that does the modified damage. These powers do not follow these rules and can be used normally." + } + } + } + ] + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Item Enchantment - Part 2" + } + }, + "Picture": { + "type": "word", + "value": 65535 + }, + "Priority": { + "type": "dword", + "value": 2 + }, + "Tag": { + "type": "cexostring", + "value": "Category012" + }, + "XP": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 9, + "Comment": { + "type": "cexostring", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "End": { + "type": "word", + "value": 0 + }, + "ID": { + "type": "dword", + "value": 1 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "ENCHANTMENT COST TABLE\n Weapons Armor\n+1 1,000 gold 500 Gold\n+2 4,000 gold 2,000 Gold\n+3 9,000 gold 4,500 Gold\n+4 16,000 gold 8,000 Gold\n+5 25,000 gold 12,500 Gold \n+6 360,000 gold 180,000 Gold\n+7 490,000 gold 245,000 Gold\n+8 640,000 gold 320,000 Gold \n+9 810,000 gold 405,000 Gold\n+10 1,000,000 gold 500,000 Gold\n+11 1,210,000 gold 605,000 Gold\n+12 1,440,000 gold 720,000 Gold\n+13 1,690,000 gold 845,000 Gold\n+14 1,960,000 gold 980,000 Gold\n+15 2,250,000 gold 1,125,000 Gold\n+16 2,560,000 gold 1,280,000 Gold\n+17 2,890,000 gold 1,445,000 Gold\n+18 3,240,000 gold 1,620,000 Gold\n+19 3,610,000 gold 1,805,000 Gold\n+20 4,000,000 gold 2,000,000 Gold\n\nIf a weapon already has a property it is discounted from the total price. Example a +1 weapon turned into a +2 weapon costs 3000 gold,.\n\nThere are numerous magical properties that can be added to a weapon or armor. These properties have an enchantment equivalent. Example 1d6 fire damage added to a sword is a +1 enchantment. Therefore a +1 Long sword with +1d6 fire damage costs a total of 4000 gold." + } + } + } + ] + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Item Enchantment - Part 3" + } + }, + "Picture": { + "type": "word", + "value": 65535 + }, + "Priority": { + "type": "dword", + "value": 2 + }, + "Tag": { + "type": "cexostring", + "value": "Category013" + }, + "XP": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 10, + "Comment": { + "type": "cexostring", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "End": { + "type": "word", + "value": 0 + }, + "ID": { + "type": "dword", + "value": 1 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Banking:\nA banker can be found near the dungeon entrance. He will store any gold you have before you enter the dungeon.\n\n\nLoot Spliting:\n1. A simple to use junk box is provided in the party room. Simple have your party toss any unwanted loot into the box.\n\n2. The party leader should then talk to the junk dealer when the party is ready. Chairs have been provided in the party room as a easy graphic signal that you are ready for the loot split.\n\n3. The party leader should use the scales near the junk box to split all gold evenly amongst the party. This affects all the gold in the party inventory NOT what they have stored in the bank.\n\n4. The party should go spend their loot and bank what they don't spend.\n" + } + } + } + ] + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Loot Division Tools" + } + }, + "Picture": { + "type": "word", + "value": 65535 + }, + "Priority": { + "type": "dword", + "value": 3 + }, + "Tag": { + "type": "cexostring", + "value": "Category006" + }, + "XP": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 11, + "Comment": { + "type": "cexostring", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "End": { + "type": "word", + "value": 0 + }, + "ID": { + "type": "dword", + "value": 1 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Welcome to the RDG \"Random Dungeon Generator\" Players Handbook.\n\nWithin the pages below you will find all the changes to the core NWN system I have made, as well as some helpful information.\n\nThe RDG was designed to give me something to do with friends. To be able to at a moments notice toss a game together for a group of friends and participate as a PC and not know everything that was about to happen.\n\nEverything from encounters, traps placement and DCs, locked doors, and even area transitions are randomly generated. All scaled to the party average level. \n\nI am happy to report as the module creator that I am suprised more often than not and if I spend more than an hour in the dungeon I usually get lost.\n\n-Elidrin" + } + } + } + ] + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Players Hand Book" + } + }, + "Picture": { + "type": "word", + "value": 65535 + }, + "Priority": { + "type": "dword", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Category000" + }, + "XP": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 12, + "Comment": { + "type": "cexostring", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "End": { + "type": "word", + "value": 0 + }, + "ID": { + "type": "dword", + "value": 1 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Full heal resting will always be allowed in town. However, in the dungeon you will only heal 1 hit point per level of your character. If the highest person in your party succeeds a heal check DC 15 this is raised to 2 hit points per level. \n\nResting in the dungeon is restricted by 2 things. Food and a Rest Counter.\n\nYou are required to have eaten to rest. To assist with this using food will automatically attempt to rest. If you have food and have not eaten the food will be automaticly used.\n\nWhen you enter the dungeon you are given 1 rest to use when you like. To get another every member of your party must have rested. This simulates 1 rest per day.\n\nWARNING each time you rest in the dungeon there is a chance of a random encounter! The exception to this is if you rest while someone else in the party is already resting. This makes it safer to rest as a group." + } + } + } + ] + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Resting Rules" + } + }, + "Picture": { + "type": "word", + "value": 65535 + }, + "Priority": { + "type": "dword", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "Category001" + }, + "XP": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 13, + "Comment": { + "type": "cexostring", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "End": { + "type": "word", + "value": 0 + }, + "ID": { + "type": "dword", + "value": 1 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "The dungeon features pit traps. While the damage these traps inflict can be bad, being seperated from your party is fatal.\n\nA party member above can lower you a rope. The rope is tied to the pit you fell thru allowing you to climb back out, or for them to safely climb down to join you." + } + } + } + ] + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Ropes" + } + }, + "Picture": { + "type": "word", + "value": 65535 + }, + "Priority": { + "type": "dword", + "value": 2 + }, + "Tag": { + "type": "cexostring", + "value": "Category010" + }, + "XP": { + "type": "dword", + "value": 0 + } + }, + { + "__struct_id": 14, + "Comment": { + "type": "cexostring", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "End": { + "type": "word", + "value": 0 + }, + "ID": { + "type": "dword", + "value": 1 + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "As a rogue, the first item of equipment you should ever buy is a set of thieves' tools.\n\nDO NOT USE THE RADIAL MENU TO DO THIEF FUNCTIONS.\nTraps have a default of DC 99 unless you are using tools.\n\nTraps: The PC will attempt to disarm the trap, if they are unable to do so he will attempt to flag the trap. \nLocks: Most locks in the dungeon can be picked using the thieves' tools, however any unfound traps on the locked object will be activated.\n\nOnly a rogue can safely attempt to disarm a magic trap over DC 25." + } + } + } + ] + }, + "Name": { + "type": "cexolocstring", + "value": { + "0": "Thieves' Tools" + } + }, + "Picture": { + "type": "word", + "value": 65535 + }, + "Priority": { + "type": "dword", + "value": 2 + }, + "Tag": { + "type": "cexostring", + "value": "Category004" + }, + "XP": { + "type": "dword", + "value": 0 + } + } + ] + } +} diff --git a/src/module/nss/0c_assoc_actions.nss b/src/module/nss/0c_assoc_actions.nss new file mode 100644 index 0000000..74975d4 --- /dev/null +++ b/src/module/nss/0c_assoc_actions.nss @@ -0,0 +1,172 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_assoc_actions + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Conversation script that sets modes or allows oAssociate to do actions from a + conversation. + Param "sAction" +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oPC = GetPCSpeaker(); + object oAssociate = OBJECT_SELF; + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + object oArea = GetArea(oAssociate); + string sAction = GetScriptParam("sAction"); + // Scout ahead is done int 0e_ch_1_hb (heartbeat script). + if(sAction == "Scout") + { + ai_ClearCreatureActions(); + ai_HaveCreatureSpeak(oAssociate, 4, ":29:35:46:"); + ai_SetAIMode(oAssociate, AI_MODE_SCOUT_AHEAD, TRUE); + ai_ScoutAhead(oAssociate); + } + else if(sAction == "BasicTactics") + { + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, ""); + ai_SetAssociateAIScript(oAssociate, FALSE); + } + else if(sAction == "AmbushTactics") + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, "ai_a_ambusher"); + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, "ai_a_ambusher"); + } + else if(sAction == "DefensiveTactics") + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, "ai_a_defensive"); + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, "ai_a_defensive"); + } + else if(sAction == "RangedTactics") + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, "ai_a_ranged"); + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, "ai_a_ranged"); + } + else if(sAction == "Taunt") + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, "ai_a_taunter"); + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, "ai_a_taunter"); + } + else if(sAction == "CounterSpell") + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, "ai_a_cntrspell"); + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, "ai_a_cntrspell"); + } + else if(sAction == "PeaceTactics") + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, "ai_a_peaceful"); + } + else if(sAction == "AttackTactics") + { + if(ai_GetAIMode(oAssociate, AI_MODE_CHECK_ATTACK)) + { + ai_SetAIMode(oAssociate, AI_MODE_CHECK_ATTACK, FALSE); + } + else ai_SetAIMode(oAssociate, AI_MODE_CHECK_ATTACK, TRUE); + } + else if(sAction == "FollowCloser") ai_FollowIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sAction == "FollowFarther") ai_FollowIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sAction == "Pickup") ai_Loot(oPC, oAssociate, sAssociateType); + else if(sAction == "HealSelf") ai_Heal_OnOff(oPC, oAssociate, sAssociateType, 1); + else if(sAction == "HealAllies") ai_Heal_OnOff(oPC, oAssociate, sAssociateType, 2); + else if(sAction == "HealOutMinus") ai_Heal_Button(oPC, oAssociate, -5, AI_HEAL_OUT_OF_COMBAT_LIMIT, sAssociateType); + else if(sAction == "HealOutPlus") ai_Heal_Button(oPC, oAssociate, 5, AI_HEAL_OUT_OF_COMBAT_LIMIT, sAssociateType); + else if(sAction == "HealInMinus") ai_Heal_Button(oPC, oAssociate, -5, AI_HEAL_IN_COMBAT_LIMIT, sAssociateType); + else if(sAction == "HealInPlus") ai_Heal_Button(oPC, oAssociate, 5, AI_HEAL_IN_COMBAT_LIMIT, sAssociateType); + else if(sAction == "Traps") ai_Traps(oPC, oAssociate, sAssociateType); + else if(sAction == "Locks") ai_Locks(oPC, oAssociate, sAssociateType, 1); + else if(sAction == "Bash") ai_Locks(oPC, oAssociate, sAssociateType, 2); + else if(sAction == "Search") ai_Search(oPC, oAssociate, sAssociateType); + else if(sAction == "Stealth") ai_Stealth(oPC, oAssociate, sAssociateType); + else if(sAction == "NoMagic") ai_UseMagic(oPC, oAssociate, sAssociateType); + else if(sAction == "DefensiveCasting") ai_UseOffensiveMagic(oPC, oAssociate, TRUE, FALSE, sAssociateType); + else if(sAction == "OffensiveCasting") ai_UseOffensiveMagic(oPC, oAssociate, FALSE, TRUE, sAssociateType); + else if(sAction == "MagicMinus") ai_MagicIncrement(oPC, oAssociate, -1, sAssociateType); + else if(sAction == "MagicPlus") ai_MagicIncrement(oPC, oAssociate, 1, sAssociateType); + else if(sAction == "Speaking") + { + if(ai_GetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK)) + { + ai_SetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK, FALSE); + } + else ai_SetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK, TRUE); + } + else if(sAction == "Ranged") + { + if(ai_GetAIMode(oAssociate, AI_MODE_STOP_RANGED)) + { + ai_SetAIMode(oAssociate, AI_MODE_STOP_RANGED, FALSE); + } + else ai_SetAIMode(oAssociate, AI_MODE_STOP_RANGED, TRUE); + } + else if(sAction == "AtkAssociates") + { + if(ai_GetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES)) + { + ai_SetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES, FALSE); + } + else ai_SetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES, TRUE); + } + else if(sAction == "BuffFirst") + { + if(ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_MASTER)) + { + ai_SetMagicMode(oAssociate, AI_MAGIC_BUFF_MASTER, FALSE); + } + else ai_SetMagicMode(oAssociate, AI_MAGIC_BUFF_MASTER, TRUE); + } + else if(sAction == "RestBuffing") + { + if(ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST)) + { + ai_SetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST, FALSE); + } + else ai_SetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST, TRUE); + } + else if(sAction == "Dispel") + { + if(ai_GetMagicMode(oAssociate, AI_MAGIC_STOP_DISPEL)) + { + ai_SetMagicMode(oAssociate, AI_MAGIC_STOP_DISPEL, FALSE); + } + else ai_SetMagicMode(oAssociate, AI_MAGIC_STOP_DISPEL, TRUE); + } + else if(sAction == "MagicItems") + { + if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS)) + { + ai_SetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS, FALSE); + } + else ai_SetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS, TRUE); + } + else if(sAction == "Identify") + { + ai_IdentifyAllVsKnowledge(oAssociate, oPC, oPC); + return; + } + else if(sAction == "GiveUnIdentifiedItems") + { + ai_ClearCreatureActions(); + object oItem = GetFirstItemInInventory(oAssociate); + while(oItem != OBJECT_INVALID) + { + if(!GetIdentified(oItem)) ActionGiveItem(oItem, oPC); + oItem = GetNextItemInInventory(oAssociate); + } + return; + } + else if(sAction == "GiveMagicItems") + { + ai_ClearCreatureActions(); + itemproperty ipItemProp; + object oItem = GetFirstItemInInventory(oAssociate); + while(oItem != OBJECT_INVALID) + { + ipItemProp = GetFirstItemProperty(oItem); + if(GetIsItemPropertyValid(ipItemProp)) ActionGiveItem(oItem, oPC); + oItem = GetNextItemInInventory(oAssociate); + } + return; + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} diff --git a/src/module/nss/0c_cast_polymorp.nss b/src/module/nss/0c_cast_polymorp.nss new file mode 100644 index 0000000..b06f183 --- /dev/null +++ b/src/module/nss/0c_cast_polymorp.nss @@ -0,0 +1,18 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// + Script Name: 0c_cast_polymorp + Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// + Conversation script to have a henchman cast a polymorph spell. + int nSpell is the spell to cast. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_items" +void main() +{ + object oHenchman = OBJECT_SELF; + int nSpell = StringToInt (GetScriptParam ("nSpell")); + // Save the original form so we can check when we turn back (Add 1 so we don't save a 0!). + SetLocalInt (oHenchman, AI_NORMAL_FORM, GetAppearanceType (oHenchman) + 1); + SetLocalString (oHenchman, AI_COMBAT_SCRIPT, "ai_a_polymorphed"); + ActionCastSpellAtObject (nSpell, oHenchman, 255, TRUE); +} + diff --git a/src/module/nss/0c_fire_henchmen.nss b/src/module/nss/0c_fire_henchmen.nss new file mode 100644 index 0000000..5505be9 --- /dev/null +++ b/src/module/nss/0c_fire_henchmen.nss @@ -0,0 +1,15 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_fire_henchmen + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Action taken script to fire/remove henchman for higher. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oHenchman = OBJECT_SELF; + ai_ClearCreatureActions(); + ai_FireHenchman (GetPCSpeaker(), oHenchman); + PlayVoiceChat (VOICE_CHAT_GOODBYE, oHenchman); +} + diff --git a/src/module/nss/0c_get_convo.nss b/src/module/nss/0c_get_convo.nss new file mode 100644 index 0000000..7cdfd40 --- /dev/null +++ b/src/module/nss/0c_get_convo.nss @@ -0,0 +1,22 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_get_convo + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Action taken script that leaves the current conversation and starts a new + conversation with oCreature using the linked conversation instead of the + ai_Henchman conversation. + + Allows use of ai_conversation for henchman in other modules. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void BeginOriginalHenchmanConversation(string sDialog, object oPC) +{ + BeginConversation(sDialog, oPC); +} +void main() +{ + ai_ClearCreatureActions(); + // Need to check special dialogs for HOTU henchman. + string sDialog = GetDialogFileToUse(GetLastSpeaker()); + DelayCommand(0.0, BeginOriginalHenchmanConversation(sDialog, GetPCSpeaker())); +} diff --git a/src/module/nss/0c_get_henchman.nss b/src/module/nss/0c_get_henchman.nss new file mode 100644 index 0000000..e0952d5 --- /dev/null +++ b/src/module/nss/0c_get_henchman.nss @@ -0,0 +1,25 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_get_henchman + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Action taken script that adds oCreature to oPC's party as a henchman + while giving a random message. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + object oPC = GetPCSpeaker(); + AddHenchman(oPC, oCreature); + int nVoice; + switch(d4()) + { + case 1: nVoice = VOICE_CHAT_CANDO; break; + case 2: nVoice = VOICE_CHAT_CHEER; break; + case 3: nVoice = VOICE_CHAT_GOODIDEA; break; + case 4: nVoice = VOICE_CHAT_LAUGH; break; + } + PlayVoiceChat(nVoice, oCreature); +} + + diff --git a/src/module/nss/0c_h_cast_spell.nss b/src/module/nss/0c_h_cast_spell.nss new file mode 100644 index 0000000..40868d8 --- /dev/null +++ b/src/module/nss/0c_h_cast_spell.nss @@ -0,0 +1,12 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_cast_spell + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Action taken script that sets the specified spell to be cast. + Param + nSpell - the spell to cast. +*/////////////////////////////////////////////////////////////////////////////// +void main() +{ + SetLocalInt (OBJECT_SELF, "0_SPELL_TO_CAST", StringToInt (GetScriptParam ("nSpell"))); +} diff --git a/src/module/nss/0c_henchmenspell.nss b/src/module/nss/0c_henchmenspell.nss new file mode 100644 index 0000000..5e64cba --- /dev/null +++ b/src/module/nss/0c_henchmenspell.nss @@ -0,0 +1,81 @@ +/*/////////////////////////////////////////////////////////////////////////////// + Script: 0c_henchmenspell + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Action script to cast a specific spell for a henchman. + + Script Param + nTarget (INT) : 0 = ALL, 1 PC, 2 Caster, 3-6 = oPC's Henchman, 7 = PC's Familiar + 8 = PC's Animal Companion, 9 = PC's Summon. + nBuffType = 1 all 2 short 3 long, 4 healing, 5 lay on hands. + If nBuffType is 0 then it will cast a specific spell from + Variable "0_SPELL_TO_CAST". Use script: 0c_h_spell_cast spell to set the spell. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +float ai_UseLayOnHands(object oTarget, object oPC, float fDelay, object oCaster); +void main() +{ + object oTarget, oPC = GetPCSpeaker(); + object oCreature = OBJECT_SELF; + float fDelay; + int nTarget = StringToInt(GetScriptParam("nTarget")); + int nBuffType = StringToInt(GetScriptParam("nBuffType")); + // Cast a group of buff spells based on nBuffType and nTarget or a single spell. + if(nBuffType < 4) + { + // Cast a specific spell. + if(nBuffType == 0) + { + int nSpell = GetLocalInt(oCreature, "0_SPELL_TO_CAST"); + // These are buff spells so Acid fog (index 0) is not a valid spell. + if(nSpell > 0) + { + ai_ClearCreatureActions(); + object oTarget = GetLocalObject(oCreature, "AI_ALLY_TARGET_" + IntToString(nTarget)); + if(oTarget != OBJECT_INVALID && ai_CheckAndCastSpell(oCreature, nSpell, 0, 0.0f, oTarget, oPC)) + { + DeleteLocalInt(oCreature, "0_SPELL_TO_CAST"); + } + else + { + if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) PlayVoiceChat(VOICE_CHAT_CANTDO, oCreature); + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + ai_SendMessages("I cannot cast " + sSpellName + ".", AI_COLOR_RED, oPC); + } + } + } + // Cast a creatures buff spells on nTarget. + else ai_CastBuffs(oCreature, nBuffType, nTarget, oPC); + } + // Cast Healing spells. + else if(nBuffType == 4) + { + ai_SetupAllyTargets(oCreature, oPC); + oTarget = GetLocalObject(oCreature, "AI_ALLY_TARGET_" + IntToString(nTarget)); + ai_TryHealing(oCreature, oTarget); + } + // Use lay on hands. + else if(nBuffType == 5) + { + ai_SetupAllyTargets(oCreature, oPC); + oTarget = GetLocalObject(oCreature, "AI_ALLY_TARGET_" + IntToString(nTarget)); + ai_UseLayOnHands(oTarget, oPC, 0.0f, oCreature); + } + else if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) PlayVoiceChat(VOICE_CHAT_CUSS, oCreature); +} +float ai_UseLayOnHands(object oTarget, object oPC, float fDelay, object oCreature) +{ + int nHpLost = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + if(!nHpLost) + { + if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) PlayVoiceChat(VOICE_CHAT_CANTDO, oCreature); + ai_SendMessages(GetName(oTarget) + " does not need healed.", AI_COLOR_RED, oPC); + } + else + { + ai_SendMessages(GetName(oCreature) + " is laying hands on " + GetName(oTarget), AI_COLOR_GREEN, oPC); + ActionUseFeat(FEAT_LAY_ON_HANDS, oTarget); + fDelay += 6.0f; + } + return fDelay; +} diff --git a/src/module/nss/0c_if_a_magic_m.nss b/src/module/nss/0c_if_a_magic_m.nss new file mode 100644 index 0000000..7ef4832 --- /dev/null +++ b/src/module/nss/0c_if_a_magic_m.nss @@ -0,0 +1,16 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_a_magic_m + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if the henchmen has a specific + associate magic mode. + Param: + nMode - The mode to check. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + object oHenchman = OBJECT_SELF; + int nMode = StringToInt(GetScriptParam("nMode")); + return ai_GetMagicMode (oHenchman, nMode); +} diff --git a/src/module/nss/0c_if_ass_convo.nss b/src/module/nss/0c_if_ass_convo.nss new file mode 100644 index 0000000..190a0f7 --- /dev/null +++ b/src/module/nss/0c_if_ass_convo.nss @@ -0,0 +1,132 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_ass_convo + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that has the henchman tell the player what options + have been selected. + + sOption will decide what the henchman says. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + object oPC = GetPCSpeaker(); + object oAssociate = OBJECT_SELF; + string sParam = GetScriptParam("sOption"); + if(sParam == "BaseMode") + { + string sBaseMode = "I'm ready to attack."; + string sVolume = " While shouting when I see things."; + // Lets get which base mode the henchman is in. + if(ai_GetAIMode(oAssociate, AI_MODE_STAND_GROUND)) sBaseMode = "I'm holding here."; + else if(ai_GetAIMode(oAssociate, AI_MODE_DEFEND_MASTER)) sBaseMode = "I'm defending you."; + else if(ai_GetAIMode(oAssociate, AI_MODE_FOLLOW)) sBaseMode = "I'm following you."; + if(GetLocalString(oAssociate, AI_COMBAT_SCRIPT) == "ai_a_peaceful") sBaseMode = "I will not fight the enemy!"; + if(ai_GetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK)) sVolume = " While not speaking unless spoken to."; + SetCustomToken(AI_BASE_CUSTOM_TOKEN, sBaseMode + sVolume); + } + else if(sParam == "CombatTactics") + { + string sRangedUse = "", sCombatTactic = "I'm using my best judgement in combat "; + string sAtkAssociates = ""; + string sTargets = "against all enemies and "; + // Lets get which base mode the henchman is in. + if(ai_GetAIMode(oAssociate, AI_MODE_CHECK_ATTACK)) sTargets = "against enemies I can handle and "; + if(GetLocalString(oAssociate, AI_COMBAT_SCRIPT) == "ai_a_ambusher") sCombatTactic = "I'm using ambush tactics "; + else if(GetLocalString(oAssociate, AI_COMBAT_SCRIPT) == "ai_a_defensive") sCombatTactic = "I'm using defensive tactics "; + else if(GetLocalString(oAssociate, AI_COMBAT_SCRIPT) == "ai_a_taunter") sCombatTactic = "I'm ready to taunt "; + else if(GetLocalString(oAssociate, AI_COMBAT_SCRIPT) == "ai_a_cntrspell") sCombatTactic = "I'm ready to counter spell "; + if(GetLocalString(oAssociate, AI_COMBAT_SCRIPT) == "ai_a_peaceful") + { + sCombatTactic = "I will not fight the enemy!"; + sTargets = ""; + } + else + { + if(ai_GetAIMode(oAssociate, AI_MODE_STOP_RANGED)) sRangedUse = "will not use a ranged weapon."; + else sRangedUse = "will use a ranged weapon."; + if(ai_GetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES)) sAtkAssociates = " I will also ignore familiars, companions, and summons."; + else sAtkAssociates = " I will also attack familiars, companions, and summons."; + } + SetCustomToken(AI_BASE_CUSTOM_TOKEN + 1, sCombatTactic + sTargets + sRangedUse + sAtkAssociates); + } + else if(sParam == "Plans") + { + float fFollowRange = GetLocalFloat(oAssociate, AI_FOLLOW_RANGE); + string sFollowRange = FloatToString(fFollowRange, 0, 0); + string sDistance = "I'm following from " + sFollowRange + " meters away while"; + string sStealth, sSearch, sPickup; + if(ai_GetAIMode(oAssociate, AI_MODE_PICKUP_ITEMS)) sPickup = " picking up items"; + else sPickup = " not picking up any items"; + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_STEALTH)) sStealth = " in stealth"; + else sStealth = ""; + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_SEARCH)) sSearch = " and searching"; + else sSearch = ""; + SetCustomToken(AI_BASE_CUSTOM_TOKEN + 2, sDistance + sPickup + sStealth + sSearch + "."); + } + else if(sParam == "Healing") + { + string sHealingIn = IntToString(GetLocalInt(oAssociate, AI_HEAL_IN_COMBAT_LIMIT)) + "%"; + string sHealingOut = IntToString(GetLocalInt(oAssociate, AI_HEAL_OUT_OF_COMBAT_LIMIT)) + "%"; + SetCustomToken(AI_BASE_CUSTOM_TOKEN + 5, "I'm healing our allies if they go below " + + sHealingIn + " health in combat and " + sHealingOut + " out of combat."); + } + else if(sParam == "Spells") + { + string sCastingLevel = "[" + IntToString(GetLocalInt(oAssociate, AI_DIFFICULTY_ADJUSTMENT)) + "] "; + string sCasting = "I'm casting"; + string sType = " spells I choose."; + string sBuff = " I'll also targeting anyone that needs it "; + string sDispel = "while using Dispel spells."; + string sMagicItems = " Lastly I'll use any magic items I have."; + if(ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_MASTER)) sBuff = " Ofcourse I'll target you first "; + if(ai_GetMagicMode(oAssociate, AI_MAGIC_STOP_DISPEL)) sDispel = "while not using Dispel spells."; + if(GetLocalString(oAssociate, AI_COMBAT_SCRIPT) == "ai_a_cntrspell") + { + sCasting = "I'm ready to counter spell our enemies."; + sType = ""; + sBuff = ""; + sDispel = ""; + } + if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC)) + { + sCasting = "I'm not use any magic."; + sType = ""; + sBuff = ""; + sDispel = ""; + } + else if(ai_GetMagicMode(oAssociate, AI_MAGIC_DEFENSIVE_CASTING)) sType = " defensive spells only."; + else if(ai_GetMagicMode(oAssociate, AI_MAGIC_OFFENSIVE_CASTING)) + { + sType = " offensive spells only."; + sBuff = ""; + } + else if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS)) sMagicItems = " Finally I'll not use magic items."; + SetCustomToken(AI_BASE_CUSTOM_TOKEN + 5, sCastingLevel + sCasting + sType + sBuff + sDispel+ sMagicItems); + } + else if(sParam == "Objects") + { + int bTraps = ai_GetAIMode(oAssociate, AI_MODE_DISARM_TRAPS); + int bLocks = ai_GetAIMode(oAssociate, AI_MODE_PICK_LOCKS); + int bBash = ai_GetAIMode(oAssociate, AI_MODE_BASH_LOCKS); + string sText = "I'm going to ignore all traps and locks."; + if(bTraps && bLocks && bBash) + { + sText = "I'm disarming all the traps and am either picking or bashing any of the locks we find."; + } + else if(bTraps && bLocks) sText = "I'm going to disarm all the traps and I'll pick all the locks we encounter."; + else if(bTraps && bBash) sText = "I shall disarm all the traps and will bash any locks we come across."; + else if(bTraps) sText = "I will disarm all the traps I can but will leave any locks for you to deal with."; + else if(bLocks && bBash) sText = "I will leave the traps for you but will either pick or bash any locks we see."; + else if(bLocks) sText = "I'll keep my distance from any traps we see, but will pick the locks found."; + else if(bBash) sText = "I'll let you mess with the traps, but I'll bash any locks that are out there."; + SetCustomToken(AI_BASE_CUSTOM_TOKEN + 3, sText); + } + else if(sParam == "RestBuffing") + { + string sRestBuffing = ""; + if(!ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST)) sRestBuffing = "not "; + SetCustomToken(AI_BASE_CUSTOM_TOKEN + 10, "After we rest I am " + sRestBuffing + "casting my long buff spells on us."); + } + return TRUE; +} diff --git a/src/module/nss/0c_if_assoc_mode.nss b/src/module/nss/0c_if_assoc_mode.nss new file mode 100644 index 0000000..342bfff --- /dev/null +++ b/src/module/nss/0c_if_assoc_mode.nss @@ -0,0 +1,22 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_assoc_mode + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if the henchmen has a specific + associate mode. + Param: + nMode - The mode to check. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + object oHenchman = OBJECT_SELF; + int nMode = StringToInt(GetScriptParam("nMode")); + // This conversation line turns off picking up any items. + if (nMode == -1) + { + if(ai_SetAIMode (oHenchman, AI_MODE_PICKUP_ITEMS)) return TRUE; + return FALSE; + } + return ai_GetAIMode (oHenchman, nMode); +} diff --git a/src/module/nss/0c_if_cntrspell.nss b/src/module/nss/0c_if_cntrspell.nss new file mode 100644 index 0000000..a0a5c87 --- /dev/null +++ b/src/module/nss/0c_if_cntrspell.nss @@ -0,0 +1,17 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_cntrspell + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that returns TRUE the server allows a henchman to + use counterspell and if they don't have the counterspell ai script set. + Param: + sAIScript - The special combat script to check. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + object oHenchman = OBJECT_SELF; + return (AI_COUNTERSPELLING_ON && + ai_CheckClassType(oHenchman, AI_CLASS_TYPE_CASTER) && + GetLocalString(oHenchman, AI_COMBAT_SCRIPT) != "ai_a_cntrspell"); +} diff --git a/src/module/nss/0c_if_com_script.nss b/src/module/nss/0c_if_com_script.nss new file mode 100644 index 0000000..34d8370 --- /dev/null +++ b/src/module/nss/0c_if_com_script.nss @@ -0,0 +1,16 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_com_script + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that returns TRUE the caller does have an ai combat + script set to sAIScript. + Param: + sAIScript - The special combat script to check. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + string sAIScript = GetScriptParam("sAIScript"); + string sAICombatScript = GetLocalString (OBJECT_SELF, AI_COMBAT_SCRIPT); + return (sAIScript == sAICombatScript); +} diff --git a/src/module/nss/0c_if_convo.nss b/src/module/nss/0c_if_convo.nss new file mode 100644 index 0000000..83e1db4 --- /dev/null +++ b/src/module/nss/0c_if_convo.nss @@ -0,0 +1,21 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_if_convo + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that check if oCreature has a linked conversation. + Only checks for Henchman. + Allows use of ai_conversation for henchman in other modules. +*/////////////////////////////////////////////////////////////////////////////// +#include "nw_inc_gff" +#include "0i_messages" +int StartingConditional() +{ + object oHenchman = OBJECT_SELF; + if(GetAssociateType(oHenchman) == ASSOCIATE_TYPE_HENCHMAN) + { + json jHenchman = ObjectToJson(oHenchman); + string sConversation = JsonGetString(GffGetResRef(jHenchman, "Conversation")); + if(sConversation != "") return TRUE; + } + return FALSE; +} diff --git a/src/module/nss/0c_if_has_assoc.nss b/src/module/nss/0c_if_has_assoc.nss new file mode 100644 index 0000000..cd16680 --- /dev/null +++ b/src/module/nss/0c_if_has_assoc.nss @@ -0,0 +1,18 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_has_assoc + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if caller has the specified feat + to summon either a companion or a familiar and they are not summoned. + Param + sAssociate - "Familiar" or "Companion" +*/////////////////////////////////////////////////////////////////////////////// +int StartingConditional() +{ + object oHenchman = OBJECT_SELF; + string sAssociate = GetScriptParam("sAssociate"); + if(sAssociate == "Familiar" && GetHasFeat(FEAT_SUMMON_FAMILIAR, oHenchman) && + GetAssociate(ASSOCIATE_TYPE_FAMILIAR) == OBJECT_INVALID) return TRUE; + return (sAssociate == "Companion" && GetHasFeat(FEAT_ANIMAL_COMPANION, oHenchman) && + GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION) == OBJECT_INVALID); +} diff --git a/src/module/nss/0c_if_has_class.nss b/src/module/nss/0c_if_has_class.nss new file mode 100644 index 0000000..1251c0a --- /dev/null +++ b/src/module/nss/0c_if_has_class.nss @@ -0,0 +1,28 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_has_class + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if conversation owner has a + specified class. Multiple classes maybe selected. + Param + nClass# - the class to look for use nClass1, nClass2, nClass3 for each one to check. +*/////////////////////////////////////////////////////////////////////////////// +int StartingConditional() +{ + object oHenchman = OBJECT_SELF; + int nCntr = 1; + int nClass; + string sClass; + while(nCntr < 10) + { + sClass = GetScriptParam("nClass" + IntToString(nCntr)); + if(sClass != "") + { + nClass = StringToInt(sClass); + if(GetLevelByClass(nClass, oHenchman)) return TRUE; + nCntr++; + } + else break; + } + return FALSE; +} diff --git a/src/module/nss/0c_if_has_feat.nss b/src/module/nss/0c_if_has_feat.nss new file mode 100644 index 0000000..fc111d8 --- /dev/null +++ b/src/module/nss/0c_if_has_feat.nss @@ -0,0 +1,22 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_has_feat + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if they have a specific feat. + Param: + sTarget - either "OBJECT_SELF", or "PCSpeaker", blanks defaults to "PCSpeaker" + nFeat - the feat number from Feats.2da + bNot - if 1 TRUE then this returns true for the target not having the feat. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_main" +int StartingConditional() +{ + string sTarget = GetScriptParam("sTarget"); + int nFeat = StringToInt(GetScriptParam("nFeat")); + int bNot = StringToInt(GetScriptParam("bNot")); + object oCreature; + if(sTarget == "OBJECT_SELF") oCreature = OBJECT_SELF; + else if(sTarget == "" || sTarget == "PCSpeaker") oCreature = GetPCSpeaker(); + if(bNot) return !GetHasFeat(nFeat, oCreature); + return (GetHasFeat(nFeat ,oCreature) || ai_GetIsDungeonMaster(oCreature)); +} diff --git a/src/module/nss/0c_if_has_spell.nss b/src/module/nss/0c_if_has_spell.nss new file mode 100644 index 0000000..02004ff --- /dev/null +++ b/src/module/nss/0c_if_has_spell.nss @@ -0,0 +1,26 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_has_spell + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if caster can cast the specified spell. + Param + nSpell# - the spell to look for nSpell1, sSpell2, nSpell3 for each spell to check. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_spells" +int StartingConditional() +{ + object oCaster = OBJECT_SELF; + int nCnt = 1; + int nSpell; + string sSpell; + while(nCnt < 20) + { + sSpell = GetScriptParam("nSpell" + IntToString(nCnt)); + if(sSpell == "") return FALSE; + nSpell = StringToInt(sSpell); + if(GetHasSpell(nSpell, oCaster)) return TRUE; + //else if(ai_GetKnownSpell(oCaster, nSpell)) return TRUE; + nCnt++; + } + return FALSE; +} diff --git a/src/module/nss/0c_if_hen_leave.nss b/src/module/nss/0c_if_hen_leave.nss new file mode 100644 index 0000000..e2b2bbd --- /dev/null +++ b/src/module/nss/0c_if_hen_leave.nss @@ -0,0 +1,12 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_hen_leave + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that check if allowing the player to remove a henchman + is activated on this server. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + return AI_REMOVE_HENCHMAN_ON; +} diff --git a/src/module/nss/0c_if_identify.nss b/src/module/nss/0c_if_identify.nss new file mode 100644 index 0000000..b593baf --- /dev/null +++ b/src/module/nss/0c_if_identify.nss @@ -0,0 +1,17 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_identify + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if the henchmen has a better lore + skill than the speaker. + Also checks AI_IDENTIFY_ON to see if the server wants them to help. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + object oHenchman = OBJECT_SELF; + if (!AI_IDENTIFY_ON && !ai_CanISpeak (oHenchman)) return FALSE; + int nHenchmanLore = GetSkillRank(SKILL_LORE, oHenchman); + int nMasterLore = GetSkillRank(SKILL_LORE, GetMaster(oHenchman)); + return (nHenchmanLore > nMasterLore); +} diff --git a/src/module/nss/0c_if_not_master.nss b/src/module/nss/0c_if_not_master.nss new file mode 100644 index 0000000..73cb84e --- /dev/null +++ b/src/module/nss/0c_if_not_master.nss @@ -0,0 +1,11 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_not_master + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks if the speaker is the master of this + henchman. +*/////////////////////////////////////////////////////////////////////////////// +int StartingConditional() +{ + return !GetIsObjectValid(GetMaster()); +} diff --git a/src/module/nss/0c_if_open_inven.nss b/src/module/nss/0c_if_open_inven.nss new file mode 100644 index 0000000..2755c99 --- /dev/null +++ b/src/module/nss/0c_if_open_inven.nss @@ -0,0 +1,13 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_open_equip + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks if opening a henchmans inventory + is activated on this server. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + if(GetAssociateType(OBJECT_SELF) != ASSOCIATE_TYPE_HENCHMAN) return FALSE; + return AI_OPEN_INVENTORY; +} diff --git a/src/module/nss/0c_if_pickuploot.nss b/src/module/nss/0c_if_pickuploot.nss new file mode 100644 index 0000000..f4edfdb --- /dev/null +++ b/src/module/nss/0c_if_pickuploot.nss @@ -0,0 +1,12 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_pickuploot + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that check if having associates picking up loot is + activated on this server. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + return AI_PICKUP_LOOT; +} diff --git a/src/module/nss/0c_if_polymorph.nss b/src/module/nss/0c_if_polymorph.nss new file mode 100644 index 0000000..e2317f6 --- /dev/null +++ b/src/module/nss/0c_if_polymorph.nss @@ -0,0 +1,11 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_polymorph +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if the caller is polymorphed. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + if (GetLocalInt(OBJECT_SELF, AI_NORMAL_FORM) != 0) return TRUE; + return FALSE; +} diff --git a/src/module/nss/0c_if_scout.nss b/src/module/nss/0c_if_scout.nss new file mode 100644 index 0000000..9f7b0a3 --- /dev/null +++ b/src/module/nss/0c_if_scout.nss @@ -0,0 +1,11 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_scout + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that check if scouting is activated on this server. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + return AI_SCOUT_AHEAD_ON; +} diff --git a/src/module/nss/0c_if_skillrank.nss b/src/module/nss/0c_if_skillrank.nss new file mode 100644 index 0000000..e0d7729 --- /dev/null +++ b/src/module/nss/0c_if_skillrank.nss @@ -0,0 +1,18 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_SkillRank + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if the caller's skill ranks + are above or equal to the param value. + Param: + nSkill - the skill number for the skill. See skills.2da. + nRank - the rank required. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_main" +int StartingConditional() +{ + string sSkill = GetScriptParam("nSkill"); + if(sSkill == "") return FALSE; + int nRank = StringToInt(GetScriptParam("nRank")); + return (GetSkillRank(StringToInt(sSkill)) >= nRank); +} diff --git a/src/module/nss/0c_if_taunt.nss b/src/module/nss/0c_if_taunt.nss new file mode 100644 index 0000000..3e0fde6 --- /dev/null +++ b/src/module/nss/0c_if_taunt.nss @@ -0,0 +1,15 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_taunt + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that returns TRUE the server allows a henchman to + taunt and if they have the don't have the taunt ai script set. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + object oHenchman = OBJECT_SELF; + return (AI_TAUNTING_ON && + GetSkillRank(SKILL_TAUNT, oHenchman) > ai_GetCharacterLevels(oHenchman) && + GetLocalString(oHenchman, AI_COMBAT_SCRIPT) != "ai_a_taunter"); +} diff --git a/src/module/nss/0c_listhenchman.nss b/src/module/nss/0c_listhenchman.nss new file mode 100644 index 0000000..802f100 --- /dev/null +++ b/src/module/nss/0c_listhenchman.nss @@ -0,0 +1,19 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// + Script Name: 0c_cast_polymorp + Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// + Conversation script to setup the tokens for the henchman in the speakers party + except for who they are talking to. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +void main() +{ + object oSpeaker = OBJECT_SELF; + object oPC = GetPCSpeaker(); + int nCntr = 1; + object oHenchman = GetHenchman(oPC, nCntr); + while(oHenchman != OBJECT_INVALID) + { + if(oHenchman != oSpeaker) SetCustomToken(77100 + nCntr, GetName(oHenchman)); + oHenchman = GetHenchman(oPC, ++nCntr); + } +} diff --git a/src/module/nss/0c_no_com_script.nss b/src/module/nss/0c_no_com_script.nss new file mode 100644 index 0000000..ca5c386 --- /dev/null +++ b/src/module/nss/0c_no_com_script.nss @@ -0,0 +1,27 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_no_com_script + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that returns TRUE the caller does not have an ai combat + script set to sAIScript. + if sAIScript is blank then if its equal to all of them. + Param: sAIScripts:"ai_a_ambusher", "ai_a_defensive", "ai_a_taunter", "ai_coward". + sAIScript - The special combat script to check. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + string sAIScript = GetScriptParam("sAIScript"); + string sAICombatScript = GetLocalString (OBJECT_SELF, AI_COMBAT_SCRIPT); + // This is the value for do your own thing in combat! + if (sAIScript == "") + { + return (sAICombatScript == "ai_a_ambusher" || + sAICombatScript == "ai_a_defensive" || + sAICombatScript == "ai_a_ranged" || + sAICombatScript == "ai_a_taunter" || + sAICombatScript == "ai_a_cntrspell" || + sAICombatScript == "ai_a_peaceful"); + } + return (sAIScript != sAICombatScript); +} diff --git a/src/module/nss/0c_remove_effect.nss b/src/module/nss/0c_remove_effect.nss new file mode 100644 index 0000000..aa95a0c --- /dev/null +++ b/src/module/nss/0c_remove_effect.nss @@ -0,0 +1,14 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script:0c_remove_effect + Programmer:Philos +//////////////////////////////////////////////////////////////////////////////// + Actions Taken script that removes an effect from OBJECT_SELF. + Param: nEffect - the EFFECT_TYPE_* number to remove. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_spells" +void main () +{ + int nEffect = StringToInt (GetScriptParam ("nEffectType")); + ai_RemoveASpecificEffect (OBJECT_SELF, nEffect); +} + diff --git a/src/module/nss/0c_summon_assoc.nss b/src/module/nss/0c_summon_assoc.nss new file mode 100644 index 0000000..19544de --- /dev/null +++ b/src/module/nss/0c_summon_assoc.nss @@ -0,0 +1,17 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// + Script Name: 0c_summon_assoc + Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// + Conversation script to have the caller summon either an animal companion or + familiar associate. + + Param + sAssociate - which associate to summon. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + string sAssociate = GetScriptParam ("sAssociate"); + if (sAssociate == "Familiar") SummonFamiliar (); + else if (sAssociate == "Companion") SummonAnimalCompanion (); +} diff --git a/src/module/nss/0c_use_feat.nss b/src/module/nss/0c_use_feat.nss new file mode 100644 index 0000000..ec3ddcc --- /dev/null +++ b/src/module/nss/0c_use_feat.nss @@ -0,0 +1,15 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// + Script Name: 0c_summon_assoc + Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// + Conversation script to have the caller use nFeat from the feat.2da. + + Param + nFeat - Feat number from the feat.2da. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + int nFeat = StringToInt (GetScriptParam ("nFeat")); + ActionUseFeat(nFeat, OBJECT_SELF); +} diff --git a/src/module/nss/0e_c2_1_hb.nss b/src/module/nss/0e_c2_1_hb.nss new file mode 100644 index 0000000..05fbfc2 --- /dev/null +++ b/src/module/nss/0e_c2_1_hb.nss @@ -0,0 +1,16 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_c2_1_hb + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnHeartbeat script; + This will usually fire every 6 seconds (1 game round). + + I am reverting the AI script back to the games default scripts for efficiency. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_module" +void main() +{ + SetLocalInt(OBJECT_SELF, AI_ONSPAWN_EVENT, TRUE); + ai_ChangeEventScriptsForMonster(OBJECT_SELF); + ExecuteScript("nw_c2_default1"); +} diff --git a/src/module/nss/0e_c2_7_ondeath.nss b/src/module/nss/0e_c2_7_ondeath.nss new file mode 100644 index 0000000..129e81e --- /dev/null +++ b/src/module/nss/0e_c2_7_ondeath.nss @@ -0,0 +1,32 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_c2_7_ondeath + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnDeath script; + This fires when the creature dies. +*//////////////////////////////////////////////////////////////////////////////// +#include "0i_module" +void main() +{ + object oCreature = OBJECT_SELF; + // Added code to allow for permanent associates in the battle! + object oModule = GetModule(); + if(GetLocalInt(oModule, AI_RULE_PERM_ASSOC)) + { + object oAssociate; + int nIndex; + for(nIndex = 1; nIndex < 5; nIndex++) + { + oAssociate = GetAssociate(nIndex, oCreature); + if(oAssociate != OBJECT_INVALID) + { + SetIsDestroyable(FALSE, FALSE, FALSE); + DelayCommand(0.1, ChangeToStandardFaction(oAssociate, STANDARD_FACTION_HOSTILE)); + } + } + } + if(GetLocalInt(oModule, AI_RULE_CORPSES_STAY)) SetIsDestroyable(FALSE, FALSE, TRUE); + ai_ClearCombatState(oCreature); + ExecuteScript(GetLocalString(oCreature, "AI_ON_DEATH")); +} + diff --git a/src/module/nss/0e_ch_1_hb.nss b/src/module/nss/0e_ch_1_hb.nss new file mode 100644 index 0000000..d04eeb8 --- /dev/null +++ b/src/module/nss/0e_ch_1_hb.nss @@ -0,0 +1,14 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_ch_1_hb + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associate(Summons, Familiar, Companion) OnHeart beat script when out of combat; + This will usually fire every 6 seconds (1 game round). +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_module" +void main() +{ + SetLocalInt(OBJECT_SELF, AI_ONSPAWN_EVENT, TRUE); + ai_ChangeEventScriptsForAssociate(OBJECT_SELF); + ExecuteScript("nw_ch_ac1"); +} diff --git a/src/module/nss/0e_ch_7_ondeath.nss b/src/module/nss/0e_ch_7_ondeath.nss new file mode 100644 index 0000000..76d955d --- /dev/null +++ b/src/module/nss/0e_ch_7_ondeath.nss @@ -0,0 +1,41 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_ch_7_ondeath + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associate OnSpawn script; + This fires when an associate dies. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_module" +void main() +{ + object oCreature = OBJECT_SELF; + // Added code to allow for permanent associates in the battle! + if(AI_DEBUG) ai_Debug("0e_ch_7_ondeath", "13", GetName(oCreature) + " has died!" + + " AI_RULE_PERM_ASSOC: " + IntToString(GetLocalInt(GetModule(), AI_RULE_PERM_ASSOC))); + object oModule = GetModule(); + if(GetLocalInt(oModule, AI_RULE_PERM_ASSOC)) + { + object oAssociate; + int nIndex; + for(nIndex = 2; nIndex < 5; nIndex++) + { + oAssociate = GetAssociate(nIndex, oCreature); + if(oAssociate != OBJECT_INVALID) + { + SetIsDestroyable(FALSE, FALSE, FALSE); + ChangeFaction(oAssociate, oCreature); + } + } + } + // Remove the widget! + object oPC = GetMaster(oCreature); + if(oPC != OBJECT_INVALID) + { + NuiDestroy(oPC, NuiFindWindow(oPC, ai_GetAssociateType(oPC, oCreature) + AI_WIDGET_NUI)); + DelayCommand(0.5, ai_CheckXPPartyScale(oCreature)); + DelayCommand(2.0, ai_ClearCreatureActions(TRUE)); + } + DelayCommand(2.0, ai_ClearCombatState(oCreature)); + ExecuteScript(GetLocalString(oCreature, "AI_ON_DEATH")); +} + diff --git a/src/module/nss/0e_do_combat_rnd.nss b/src/module/nss/0e_do_combat_rnd.nss new file mode 100644 index 0000000..f1cb9c0 --- /dev/null +++ b/src/module/nss/0e_do_combat_rnd.nss @@ -0,0 +1,22 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_do_combat_rnd + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Used to execute a combat round just after the current action is over. + Note: Do not use with an attack action since it will continue until + the attacked enemy is dead. We end attack actions with a ClearAllActions + command and would also end this one so it will not work with attack actions. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + if(AI_DEBUG) ai_Debug("0e_do_combat_rnd", "14", GetName(oCreature) + " is calculating a new round." + + "nAction: " + IntToString(GetCurrentAction(oCreature))); + if(ai_GetIsInCombat(oCreature)) + { + if(GetAssociateType(oCreature) == ASSOCIATE_TYPE_NONE && + !ai_GetIsCharacter(oCreature)) ai_DoMonsterCombatRound(oCreature); + else if(ai_CanIAttack(oCreature)) ai_DoAssociateCombatRound(oCreature); + } +} diff --git a/src/module/nss/0e_gui_events.nss b/src/module/nss/0e_gui_events.nss new file mode 100644 index 0000000..401c825 --- /dev/null +++ b/src/module/nss/0e_gui_events.nss @@ -0,0 +1,60 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: 0e_gui_events + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + OnPlayerGUIEvent event script + Used to allow PEPS to gain control of specific GUI events. + +/*////////////////////////////////////////////////////////////////////////////// +#include "0i_gui_events" +#include "0i_menus" +void main() +{ + object oPC = GetLastGuiEventPlayer(); + int nEventType = GetLastGuiEventType(); + int nEventInt = GetLastGuiEventInteger(); + //object oEventObject = GetLastGuiEventObject(); + switch(nEventType) + { + case GUIEVENT_EFFECTICON_CLICK: + { + if(ai_GetMagicMode(oPC, AI_MAGIC_EFFECT_ICON_REPORT)) + { + ai_CreateEffectChatReport(oPC, nEventInt); + return; + } + int nToken = NuiFindWindow(oPC, AI_EFFECT_ICON_NUI); + json jData; + if(nToken) + { + jData = NuiGetUserData(oPC, nToken); + int nOldEffectIcon = JsonGetInt(JsonArrayGet(jData, 1)); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + if(nOldEffectIcon == nEventInt) return; + } + ai_CreateEffectIconMenu(oPC, nEventInt); + } + case GUIEVENT_PARTYBAR_PORTRAIT_CLICK: + { + object oAssociate = GetLastGuiEventObject(); + if(GetMaster(oAssociate) == oPC) + { + // If all the Command buttons are blocked then don't load the menu. + if(GetLocalInt(GetModule(), sDMWidgetAccessVarname) != 7340028) + { + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + if(IsWindowClosed(oPC, sAssociateType + AI_COMMAND_NUI)) + { + ai_CreateAssociateCommandNUI(oPC, oAssociate); + } + IsWindowClosed(oPC, sAssociateType + AI_NUI); + IsWindowClosed(oPC, sAssociateType + AI_LOOTFILTER_NUI); + IsWindowClosed(oPC, sAssociateType + AI_COPY_NUI); + IsWindowClosed(oPC, sAssociateType + AI_QUICK_WIDGET_NUI); + IsWindowClosed(oPC, sAssociateType + AI_SPELL_MEMORIZE_NUI); + IsWindowClosed(oPC, sAssociateType + AI_SPELL_KNOWN_NUI); + } + } + } + } +} diff --git a/src/module/nss/0e_m1_3_endround.nss b/src/module/nss/0e_m1_3_endround.nss new file mode 100644 index 0000000..e8a0125 --- /dev/null +++ b/src/module/nss/0e_m1_3_endround.nss @@ -0,0 +1,46 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_m1_3_endround + Original Script: m1_combanter_3 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnCombatRoundEnd event script used in the original campaign + for monsters that may do a one liner during combat; + + Fires at the end of each combat round (6 seconds). + This will fire as long as oCreature is in combat (GetIsInCombat()). + This event starts counting once a combat action is started. + Every time a spell is cast it will queue another end combat round so haste with + two spells cast will fire this twice in one round. + It will also fire at the end of a hostile effect that stops actions i.e Stunned, Knockdown etc. + Action modes are also cleared prior to this event executing! + GetAttemptedAttackTarget() & GetAttemptedSpellTarget() also get cleared prior to this event. + This event can be canceled with ClearAllActions(TRUE) and SurrenderToEnemies. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + if(AI_DEBUG) ai_Debug("0e_m1_3_endround", "23", GetName(oCreature) + " ends combat round."); + // Action modes get cleared prior to each OnCombatRoundEnd! + // We do this to keep the action mode going. + int nActionMode = GetLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + if(nActionMode > 0) + { + SetActionMode(oCreature, nActionMode, TRUE); + // We don't want to use up all of the Dwarven Defenders uses! + if(nActionMode == 12) IncrementRemainingFeatUses(oCreature, FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE); + } + if (ai_GetIsBusy(oCreature) || ai_Disabled(oCreature)) return; + if(Random(4) == 0) SpeakOneLinerConversation(); + if(ai_GetIsInCombat(oCreature)) ai_DoMonsterCombatRound(oCreature); + ai_SpellConcentrationCheck(oCreature); + if(ai_GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) ai_DetermineSpecialBehavior(oCreature); + if(GetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(1003)); + } +} + + + + diff --git a/src/module/nss/0e_nui.nss b/src/module/nss/0e_nui.nss new file mode 100644 index 0000000..7d18c65 --- /dev/null +++ b/src/module/nss/0e_nui.nss @@ -0,0 +1,1975 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: 0e_nui + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Menu event script + sEvent: close, click, mousedown, mouseup, watch (if bindwatch is set). +/*////////////////////////////////////////////////////////////////////////////// +#include "nw_inc_gff" +#include "x0_i0_assoc" +#include "0i_menus" +#include "0i_player_target" +// Save a window ID to the database. +void ai_SaveWindowLocation(object oPC, int nToken, string sAssociateType, string sWindowID); +// Sets the Widget Buttons state to sElem Checkbox state. +void ai_SetWidgetButtonToCheckbox(object oPC, int nButton, object oAssociate, string sAssociateType, int nToken, string sElem); +// Flips an AI Buttons state to sElem Checkbox state. +void ai_SetAIButtonToCheckbox(object oPC, int nButton, object oAssociate, string sAssociateType, int nToken, string sElem); +// Flips the flag for the loot filter to sElem Checkbox state. +void ai_SetLootFilterToCheckbox(object oPC, object oAssociate, int nFilterBit, int nToken, string sElem); +// Sets an associates companion type. Cannot set companion for a player! +void ai_SetCompanionType(object oPC, object oAssociate, int nToken, int nCompanionType); +// Sets an associates companion name. Cannot set companion for a player! +void ai_SetCompanionName(object oPC, object oAssociate, int nToken, int nCompanionType); +// Sets an associates AI script via a combo box. +void ai_SetAIScript(object oPC, object oAssociate, int nToken); +// Increments/Decrements the Perception Range use variable for the AI. +void ai_PercRangeIncrement(object oPC, object oAssociate, int nIncrement, string sAssociateType, int nToken); +// Saves an associates perception range changed on the button. +void ai_Perc_Range(object oPC, object oAssociate, int nToken, string sAssociateType); +// Changes Perception Distance Rule for monsters. +void ai_RulePercDistInc(object oPC, object oModule, int nIncrement, int nToken); +// Adds a spell to a json AI restricted spell list then returns jRules. +// bRestrict = TRUE will add to the list FALSE will remove it from the list. +json ai_AddRestrictedSpell(json jRules, int nSpell, int bRestrict = TRUE); +// Turns on oAssociate AI, Setting all event scripts. +void ai_TurnOn(object oPC, object oAssociate, string sAssociateType); +// Turns off oAssociate AI, Setting all event scripts. +void ai_TurnOff(object oPC, object oAssociate, string sAssociateType); +// Adds a henchman back into the players party. +object ai_AddHenchman(object oPC, json jHenchman, location lLocation, int nFamiliar, int nCompanion); + +void ai_SaveWindowLocation(object oPC, int nToken, string sAssociateType, string sWindowID) +{ + json jGeometry = NuiGetBind(oPC, nToken, "window_geometry"); + float fX = JsonGetFloat(JsonObjectGet(jGeometry, "x")); + float fY = JsonGetFloat(JsonObjectGet(jGeometry, "y")); + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) jLocations = JsonObject(); + json jWindow = JsonObjectGet(jLocations, sWindowID); + if(JsonGetType(jWindow) == JSON_TYPE_NULL) jWindow = JsonObject(); + jWindow = JsonObjectSet(jWindow, "x", JsonFloat(fX)); + jWindow = JsonObjectSet(jWindow, "y", JsonFloat(fY)); + jLocations = JsonObjectSet(jLocations, sWindowID, jWindow); + //SendMessageToPC(oPC, "0e_nui, 52, sAssociateType: " + sAssociateType + + // " sWindowID: " + sWindowID + + // " jLocations: " + JsonDump(jLocations, 1)); + ai_SetAssociateDbJson(oPC, sAssociateType, "locations", jLocations); +} +void ai_ToggleAssociateWidgetOnOff(object oPC, int nToken, object oAssociate, string sAssociateType) +{ + string sText, sText2, sName = GetName(oAssociate); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int bWidget = !ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType, bWidget); + NuiSetBind(oPC, nToken, "btn_widget_onoff", JsonBool (!bWidget)); + if(bWidget) + { + sText = "on"; + sText2 = "Off"; + IsWindowClosed(oPC, sAssociateType + AI_WIDGET_NUI); + } + else + { + sText = "off"; + sText2 = "On"; + ai_CreateWidgetNUI(oPC, oAssociate); + } + NuiSetBind(oPC, nToken, "btn_widget_onoff_label", JsonString("Widget " + sText2)); + NuiSetBind(oPC, nToken, "btn_widget_onoff_tooltip", JsonString(" Turn " + sName + " widget " + sText)); +} +void main() +{ + object oPC = NuiGetEventPlayer(); + int nToken = NuiGetEventWindow(); + string sEvent = NuiGetEventType(); + string sElem = NuiGetEventElement(); + int nIndex = NuiGetEventArrayIndex(); + string sWndId = NuiGetWindowId(oPC, nToken); + //SendMessageToPC(oPC, "0e_nui , 64 sWndId: " + sWndId + " sEvent: " + sEvent + " sElem: " + sElem + + // " nToken: " + IntToString(nToken) + " nIndex: " + IntToString(nIndex) + + // " oPC: " + GetName(oPC)); + // Get if the menu has an associate attached. + json jData = NuiGetUserData(oPC, nToken); + object oAssociate = StringToObject(JsonGetString(JsonArrayGet(jData, 0))); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + if(!ai_GetIsCharacter(oAssociate) && !GetLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE") && + (oAssociate == OBJECT_INVALID || GetMaster(oAssociate) != oPC)) + { + ai_SendMessages("This creature is no longer in your party!", AI_COLOR_RED, oPC); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + return; + } + if(sAssociateType == "") return; + //************************************************************************** + // Watch to see if the window moves and save. + if(sElem == "window_geometry" && sEvent == "watch") + { + if(GetLocalInt(oPC, AI_NO_NUI_SAVE)) return; + // If the widget is locked then don't save. + if(sWndId == sAssociateType + AI_WIDGET_NUI && + ai_GetWidgetButton(oPC, BTN_WIDGET_LOCK, oAssociate, sAssociateType)) return; + ai_SaveWindowLocation(oPC, nToken, sAssociateType, sWndId); + return; + } + //************************************************************************** + // Main AI events. + if(sWndId == AI_MAIN_NUI) + { + //if(GetLocalInt(oPC, AI_NO_NUI_SAVE)) return; + if(sEvent == "click") + { + if(sElem == "btn_plugin_manager") + { + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + ai_CreatePluginNUI(oPC); + } + else if(sElem == "btn_action_ghost") + { + // We set ghost mode differently for each AI. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + if(GetLocalInt(oPC, sGhostModeVarname)) + { + DeleteLocalInt(oPC, sGhostModeVarname); + ai_SendMessages("Action Ghost mode is turned off when using commands.", AI_COLOR_YELLOW, oPC); + object oAssociate; + int nIndex; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) + { + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) + { + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + } + } + else + { + SetLocalInt(oPC, sGhostModeVarname, TRUE); + ai_SendMessages("Action Ghost mode is turned on when using commands.", AI_COLOR_YELLOW, oPC); + } + } + else + { + if(ai_GetAIMode(oPC, AI_MODE_ACTION_GHOST)) + { + ai_SetAIMode(oPC, AI_MODE_ACTION_GHOST, FALSE); + ai_SendMessages("Action Ghost mode is turned off when using commands.", AI_COLOR_YELLOW, oPC); + object oAssociate; + int nIndex; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID && !ai_GetAIMode(oAssociate, AI_MODE_GHOST)) + { + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID && !ai_GetAIMode(oAssociate, AI_MODE_GHOST)) + { + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + } + } + else + { + ai_SetAIMode(oPC, AI_MODE_ACTION_GHOST); + ai_SendMessages("Action Ghost mode is turned on when using commands.", AI_COLOR_YELLOW, oPC); + } + aiSaveAssociateModesToDb(oPC, oPC); + } + } + else if(sElem == "btn_toggle_assoc_widget") + { + int bWidgetOff = !ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oPC, "pc"); + string sAssocType; + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oPC, "pc", bWidgetOff); + object oAssoc = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC); + if(oAssoc != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType, bWidgetOff); + if(bWidgetOff) IsWindowClosed(oPC, sAssocType + AI_WIDGET_NUI); + else ai_CreateWidgetNUI(oPC, oAssoc); + } + oAssoc = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC); + if(oAssoc != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType, bWidgetOff); + if(bWidgetOff) IsWindowClosed(oPC, sAssocType + AI_WIDGET_NUI); + else ai_CreateWidgetNUI(oPC, oAssoc); + } + oAssoc = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC); + if(oAssoc != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType, bWidgetOff); + if(bWidgetOff) IsWindowClosed(oPC, sAssocType + AI_WIDGET_NUI); + else ai_CreateWidgetNUI(oPC, oAssoc); + } + oAssoc = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC); + if(oAssoc != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType, bWidgetOff); + if(bWidgetOff) IsWindowClosed(oPC, sAssocType + AI_WIDGET_NUI); + else ai_CreateWidgetNUI(oPC, oAssoc); + } + int nIndex; + object oHenchman; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oHenchman != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oHenchman); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oHenchman, sAssocType, bWidgetOff); + if(bWidgetOff) IsWindowClosed(oPC, sAssocType + AI_WIDGET_NUI); + else ai_CreateWidgetNUI(oPC, oHenchman); + } + } + } + else if(sElem == "btn_effect_icon") + { + if(ai_GetMagicMode(oPC, AI_MAGIC_EFFECT_ICON_REPORT)) + { + ai_SetMagicMode(oPC, AI_MAGIC_EFFECT_ICON_REPORT, FALSE); + ai_SendMessages("All effect icons will be reported in a menu at the top of the screen.", AI_COLOR_YELLOW, oPC); + } + else + { + ai_SetMagicMode(oPC, AI_MAGIC_EFFECT_ICON_REPORT); + ai_SendMessages("All effect icons will be reported in the chat screen.", AI_COLOR_YELLOW, oPC); + } + aiSaveAssociateModesToDb(oPC, oPC); + } + if(sElem == "btn_default_xp") + { + int nDefaultXP = GetLocalInt(GetModule(), AI_RULE_DEFAULT_XP_SCALE); + SetModuleXPScale(nDefaultXP); + NuiSetBind(oPC, nToken, "txt_xp_scale", JsonString(IntToString(nDefaultXP))); + } + } + if(sEvent == "watch") + { + string sPreElem = GetStringLeft(sElem, 4); + if(sPreElem == "txt_") + { + object oModule = GetModule(); + json jRules = ai_GetCampaignDbJson("rules"); + string sText = JsonGetString(NuiGetBind(oPC, nToken, sElem)); + if(sElem == "txt_max_henchman") + { + int nMaxHenchmen = StringToInt(sText); + if(nMaxHenchmen < 1) nMaxHenchmen = 1; + if(nMaxHenchmen > 12) + { + nMaxHenchmen = 12; + ai_SendMessages("The maximum henchmen for this mod is 12!", AI_COLOR_RED, oPC); + } + SetMaxHenchmen(nMaxHenchmen); + SetLocalInt(oModule, AI_RULE_MAX_HENCHMAN, nMaxHenchmen); + jRules = JsonObjectSet(jRules, AI_RULE_MAX_HENCHMAN, JsonInt(nMaxHenchmen)); + ai_SendMessages("Maximum henchmen has been changed to " + IntToString(nMaxHenchmen), AI_COLOR_YELLOW, oPC); + } + else if(sElem == "txt_ai_difficulty") + { + int nChance = StringToInt(sText); + if(nChance < 0) nChance = 0; + else if(nChance > 100) nChance = 100; + SetLocalInt(oModule, AI_RULE_AI_DIFFICULTY, nChance); + jRules = JsonObjectSet(jRules, AI_RULE_AI_DIFFICULTY, JsonInt(nChance)); + } + else if(sElem == "txt_perception_distance") + { + float fDistance = StringToFloat(sText); + if(fDistance < 10.0) fDistance = 10.0; + else if(fDistance > 60.0) fDistance = 60.0; + SetLocalFloat(oModule, AI_RULE_PERCEPTION_DISTANCE, fDistance); + jRules = JsonObjectSet(jRules, AI_RULE_PERCEPTION_DISTANCE, JsonFloat(fDistance)); + } + else if(sElem == "txt_inc_enc") + { + float fNumber = StringToFloat(sText); + if(fNumber < 0.0) fNumber = 0.0; + else if(fNumber > 9.0) fNumber = 9.0; + SetLocalFloat(oModule, AI_INCREASE_ENC_MONSTERS, fNumber); + jRules = JsonObjectSet(jRules, AI_INCREASE_ENC_MONSTERS, JsonFloat(fNumber)); + } + else if(sElem == "txt_inc_hp") + { + int nNumber = StringToInt(sText); + if(nNumber < 0) nNumber = 0; + else if(nNumber > 100) nNumber = 100; + SetLocalInt(oModule, AI_INCREASE_MONSTERS_HP, nNumber); + jRules = JsonObjectSet(jRules, AI_INCREASE_MONSTERS_HP, JsonInt(nNumber)); + } + else if(sElem == "txt_wander_distance") + { + float fDistance = StringToFloat(sText); + if(fDistance < 0.0) fDistance = 0.0; + else if(fDistance > 99.0) fDistance = 99.0; + SetLocalFloat(oModule, AI_RULE_WANDER_DISTANCE, fDistance); + jRules = JsonObjectSet(jRules, AI_RULE_WANDER_DISTANCE, JsonFloat(fDistance)); + } + else if(sElem == "txt_xp_scale") + { + int nNumber = StringToInt(sText); + if(nNumber < 0) nNumber = 0; + else if(nNumber > 200) nNumber = 200; + SetModuleXPScale(nNumber); + return; + } + ai_SetCampaignDbJson("rules", jRules); + } + else if(sPreElem == "chbx") + { + object oModule = GetModule(); + int bCheck = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + json jRules = ai_GetCampaignDbJson("rules"); + if(sElem == "chbx_moral_check") + { + SetLocalInt(oModule, AI_RULE_MORAL_CHECKS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_MORAL_CHECKS, JsonInt(bCheck)); + } + else if(sElem == "chbx_buff_monsters_check") + { + SetLocalInt(oModule, AI_RULE_BUFF_MONSTERS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_BUFF_MONSTERS, JsonInt(bCheck)); + } + else if(sElem == "chbx_buff_summons_check") + { + SetLocalInt(oModule, AI_RULE_PRESUMMON, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_PRESUMMON, JsonInt(bCheck)); + } + else if(sElem == "chbx_ambush_monsters_check") + { + SetLocalInt(oModule, AI_RULE_AMBUSH, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_AMBUSH, JsonInt(bCheck)); + } + else if(sElem == "chbx_companions_check") + { + SetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_SUMMON_COMPANIONS, JsonInt(bCheck)); + } + else if(sElem == "chbx_advanced_movement_check") + { + SetLocalInt(oModule, AI_RULE_ADVANCED_MOVEMENT, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_ADVANCED_MOVEMENT, JsonInt(bCheck)); + } + else if(sElem == "chbx_ilr_check") + { + SetLocalInt(oModule, AI_RULE_ILR, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_ILR, JsonInt(bCheck)); + } + else if(sElem == "chbx_umd_check") + { + SetLocalInt(oModule, AI_RULE_ALLOW_UMD, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_ALLOW_UMD, JsonInt(bCheck)); + } + else if(sElem == "chbx_use_healingkits_check") + { + SetLocalInt(oModule, AI_RULE_HEALERSKITS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_HEALERSKITS, JsonInt(bCheck)); + } + else if(sElem == "chbx_perm_assoc_check") + { + SetLocalInt(oModule, AI_RULE_PERM_ASSOC, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_PERM_ASSOC, JsonInt(bCheck)); + } + else if(sElem == "chbx_corpses_stay_check") + { + SetLocalInt(oModule, AI_RULE_CORPSES_STAY, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_CORPSES_STAY, JsonInt(bCheck)); + } + else if(sElem == "chbx_wander_check") + { + SetLocalInt(oModule, AI_RULE_WANDER, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_WANDER, JsonInt(bCheck)); + NuiSetBind(oPC, nToken, "txt_wander_distance_event", JsonBool(bCheck)); + } + else if(sElem == "chbx_open_doors_check") + { + SetLocalInt(oModule, AI_RULE_OPEN_DOORS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_OPEN_DOORS, JsonInt(bCheck)); + } + else if(sElem == "chbx_party_scale_check") + { + if(bCheck) + { + SetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP, GetModuleXPScale()); + ai_CheckXPPartyScale(oPC); + } + else + { + SetModuleXPScale(GetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE)); + } + SetLocalInt(oModule, AI_RULE_PARTY_SCALE, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_PARTY_SCALE, JsonInt(bCheck)); + string sText = IntToString(GetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP)); + NuiSetBind(oPC, nToken, "chbx_party_scale_tooltip", JsonString(" PEPS adjusts your XP based on party size from (" + sText + ").")); + sText = IntToString(GetModuleXPScale()); + NuiSetBind(oPC, nToken, "txt_xp_scale", JsonString(sText)); + } + else if(sElem == "chbx_darkness_check") + { + if(bCheck) + { + jRules = ai_AddRestrictedSpell(jRules, SPELL_DARKNESS); + jRules = ai_AddRestrictedSpell(jRules, 159); + jRules = ai_AddRestrictedSpell(jRules, SPELLABILITY_AS_DARKNESS); + jRules = ai_AddRestrictedSpell(jRules, 688); // WildShape_Darkness + } + else + { + jRules = ai_AddRestrictedSpell(jRules, SPELL_DARKNESS, FALSE); + jRules = ai_AddRestrictedSpell(jRules, 159, FALSE); + jRules = ai_AddRestrictedSpell(jRules, SPELLABILITY_AS_DARKNESS, FALSE); + jRules = ai_AddRestrictedSpell(jRules, 688, FALSE); // WildShape_Darkness + } + } + else if(sElem == "chbx_dispels_check") + { + if(bCheck) + { + jRules = ai_AddRestrictedSpell(jRules, SPELL_LESSER_DISPEL); + jRules = ai_AddRestrictedSpell(jRules, SPELL_DISPEL_MAGIC); + jRules = ai_AddRestrictedSpell(jRules, SPELL_GREATER_DISPELLING); + jRules = ai_AddRestrictedSpell(jRules, SPELL_MORDENKAINENS_DISJUNCTION); + } + else + { + jRules = ai_AddRestrictedSpell(jRules, SPELL_LESSER_DISPEL, FALSE); + jRules = ai_AddRestrictedSpell(jRules, SPELL_DISPEL_MAGIC, FALSE); + jRules = ai_AddRestrictedSpell(jRules, SPELL_GREATER_DISPELLING, FALSE); + jRules = ai_AddRestrictedSpell(jRules, SPELL_MORDENKAINENS_DISJUNCTION, FALSE); + } + } + else if(sElem == "chbx_timestop_check") + { + if(bCheck) jRules = ai_AddRestrictedSpell(jRules, SPELL_TIME_STOP); + else jRules = ai_AddRestrictedSpell(jRules, SPELL_TIME_STOP, FALSE); + } + ai_SetCampaignDbJson("rules", jRules); + } + } + else if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + if(nMouseScroll == 1.0) // Scroll up + { + // Follow range is only changed on non-pc's + if(sElem == "lbl_perc_dist") ai_RulePercDistInc(oPC, GetModule(), 1, nToken); + } + else if(nMouseScroll == -1.0) // Scroll down + { + // Follow range is only changed on non-pc's + if(sElem == "lbl_perc_dist") ai_RulePercDistInc(oPC, GetModule(), -1, nToken); + } + } + return; + } + //************************************************************************** + // Associate Command events. + if(sWndId == sAssociateType + AI_COMMAND_NUI) + { + if(sEvent == "click") + { + if(sElem == "btn_ai_menu") + { + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + ai_CreateAssociateAINUI(oPC, oAssociate); + } + if(sElem == "btn_vertical_widget") + { + int bVertical = !ai_GetWidgetButton(oPC, BTN_WIDGET_VERTICAL, oAssociate, sAssociateType); + ai_SetWidgetButton(oPC, BTN_WIDGET_VERTICAL, oAssociate, sAssociateType, bVertical); + if(oPC == oAssociate || + (oPC != oAssociate && !ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType))) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssociateType + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + } + } + else if(sElem == "btn_main_menu") + { + if(ai_GetIsCharacter(oAssociate)) ai_CreateAIMainNUI(oPC); + } + else if(sElem == "btn_widget_onoff") + { + ai_ToggleAssociateWidgetOnOff(oPC, nToken, oAssociate, sAssociateType); + } + else if(sElem == "btn_widget_lock") + { + int bLocked = !ai_GetWidgetButton(oPC, BTN_WIDGET_LOCK, oAssociate, sAssociateType); + ai_SetWidgetButton(oPC, BTN_WIDGET_LOCK, oAssociate, sAssociateType, bLocked); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType) || oPC == oAssociate) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssociateType + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + } + } + else if(sElem == "btn_copy_settings") + { + ai_CreateCopySettingsNUI(oPC, oAssociate); + } + else if(sElem == "btn_cmd_action") ai_Action(oPC, oAssociate); + else if(sElem == "btn_cmd_guard") ai_DoCommand(oPC, oAssociate, 1); + else if(sElem == "btn_cmd_hold") ai_DoCommand(oPC, oAssociate, 3); + else if(sElem == "btn_cmd_search") ai_DoCommand(oPC, oAssociate, 5); + else if(sElem == "btn_cmd_stealth") ai_DoCommand(oPC, oAssociate, 6); + else if(sElem == "btn_cmd_attack") ai_DoCommand(oPC, oAssociate, 4); + else if(sElem == "btn_cmd_follow") ai_DoCommand(oPC, oAssociate, 2); + else if(sElem == "btn_follow_target") ai_FollowTarget(oPC, oAssociate); + else if(sElem == "btn_cmd_ai_script") ai_AIScript(oPC, oAssociate, sAssociateType, nToken); + else if(sElem == "btn_cmd_place_trap") ai_HavePCPlaceTrap(oPC, oAssociate); + else if(sElem == "btn_quick_widget") + { + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + ai_CreateQuickWidgetSelectionNUI(oPC, oAssociate); + } + else if(sElem == "btn_spell_memorize") + { + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + ai_CreateSpellMemorizationNUI(oPC, oAssociate); + } + else if(sElem == "btn_spell_known") + { + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + ai_CreateSpellKnownNUI(oPC, oAssociate); + } + else if(sElem == "btn_buff_short") + { + ai_Buff_Button(oPC, oAssociate, 2, sAssociateType); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + } + else if(sElem == "btn_buff_long") + { + ai_Buff_Button(oPC, oAssociate, 3, sAssociateType); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + } + else if(sElem == "btn_buff_all") + { + ai_Buff_Button(oPC, oAssociate, 1, sAssociateType); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + } + else if(sElem == "btn_buff_rest") ai_Buff_Button(oPC, oAssociate, 0, sAssociateType); + else if(sElem == "btn_jump_to") ai_JumpToPC(oPC, oAssociate); + else if(sElem == "btn_ghost_mode") ai_GhostMode(oPC, oAssociate, nToken, sAssociateType); + else if(sElem == "btn_camera") ai_ChangeCameraView(oPC, oAssociate); + else if(sElem == "btn_inventory") ai_OpenInventory(oAssociate, oPC); + else if(sElem == "btn_familiar_name") ai_SetCompanionName(oPC, oAssociate, nToken, ASSOCIATE_TYPE_FAMILIAR); + else if(sElem == "btn_companion_name") ai_SetCompanionName(oPC, oAssociate, nToken, ASSOCIATE_TYPE_ANIMALCOMPANION); + else if(GetStringLeft(sElem, 11) == "btn_plugin_") ai_Plugin_Execute(oPC, sElem); + } + else if(sEvent == "watch") + { + if(sElem == "txt_familiar_name") + { + string sName = JsonGetString(NuiGetBind(oPC, nToken, sElem)); + if(sName != "") NuiSetBind(oPC, nToken, "btn_familiar_name_event", JsonBool(TRUE)); + else NuiSetBind(oPC, nToken, "btn_familiar_name_event", JsonBool(FALSE)); + } + if(GetStringLeft(sElem, 12) == "chbx_plugin_" && GetStringRight(sElem, 6) == "_check") + { + int nIndex = StringToInt(GetSubString(sElem, 12, 1)); + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + json jPlugin = JsonArrayGet(jPlugins, nIndex); + int bCheck = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + jPlugin = JsonArraySet(jPlugin, 1, JsonBool(bCheck)); + jPlugins = JsonArraySet(jPlugins, nIndex, jPlugin); + ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, "pc" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oPC)); + } + else if(sElem == "chbx_buff_rest_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_BUFF_REST, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_action_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_ACTION, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_guard_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_GUARD, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_hold_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_HOLD, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_search_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_SEARCH, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_stealth_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_STEALTH, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_attack_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_ATTACK, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_follow_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_FOLLOW, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_ai_script_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_AI_SCRIPT, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_place_trap_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_PLACE_TRAP, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_quick_widget_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_SPELL_WIDGET, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_follow_target_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_FOLLOW_TARGET, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_buff_short_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_BUFF_SHORT, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_buff_long_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_BUFF_LONG, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_buff_all_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_BUFF_ALL, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_jump_to_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_JUMP_TO, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_ghost_mode_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_GHOST_MODE, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_camera_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_CAMERA, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_inventory_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_INVENTORY, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_familiar_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_FAMILIAR, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_companion_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_COMPANION, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "cmb_familiar_selected") ai_SetCompanionType(oPC, oAssociate, nToken, ASSOCIATE_TYPE_FAMILIAR); + else if(sElem == "cmb_companion_selected") ai_SetCompanionType(oPC, oAssociate, nToken, ASSOCIATE_TYPE_ANIMALCOMPANION); + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssociateType + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + } + else if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + if(nMouseScroll == 1.0) // Scroll up + { + // Follow range is only changed on non-pc's + if(sElem == "btn_cmd_follow" && + oPC != oAssociate) ai_FollowIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_follow_target") ai_FollowIncrement(oPC, oAssociate, 1.0, sAssociateType); + } + else if(nMouseScroll == -1.0) // Scroll down + { + // Follow range is only changed on non-pc's + if(sElem == "btn_cmd_follow" && + oPC != oAssociate) ai_FollowIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_follow_target") ai_FollowIncrement(oPC, oAssociate, -1.0, sAssociateType); + } + } + return; + } + //************************************************************************** + // Associate AI events. + if(sWndId == sAssociateType + AI_NUI) + { + if(sEvent == "click") + { + if(sElem == "btn_command_menu") + { + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + ai_CreateAssociateCommandNUI(oPC, oAssociate); + } + if(sElem == "btn_main_menu") + { + if(ai_GetIsCharacter(oAssociate)) ai_CreateAIMainNUI(oPC); + } + else if(sElem == "btn_loot_filter") + { + ai_CreateLootFilterNUI(oPC, oAssociate); + } + else if(sElem == "btn_ai") + { + if(GetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT) == "xx_pc_1_hb") ai_TurnOff(oPC, oAssociate, sAssociateType); + else ai_TurnOn(oPC, oAssociate, sAssociateType); + } + else if(sElem == "btn_quiet") ai_ReduceSpeech(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_ranged") AssignCommand(oAssociate, ai_Ranged(oPC, oAssociate, sAssociateType)); + else if(sElem == "btn_equip_weapon") ai_EquipWeapons(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_search") ai_Search(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_stealth") ai_Stealth(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_open_door") ai_OpenDoor(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_traps") ai_Traps(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_pick_locks") ai_Locks(oPC, oAssociate, sAssociateType, 1); + else if(sElem == "btn_bash_locks") ai_Locks(oPC, oAssociate, sAssociateType, 2); + else if(sElem == "btn_magic") ai_UseMagic(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_magic_items") ai_UseMagicItems(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_def_magic") ai_UseOffensiveMagic(oPC, oAssociate, TRUE, FALSE, sAssociateType); + else if(sElem == "btn_off_magic") ai_UseOffensiveMagic(oPC, oAssociate, FALSE, TRUE, sAssociateType); + else if(sElem == "btn_spontaneous") ai_Spontaneous(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_heals_onoff") ai_Heal_OnOff(oPC, oAssociate, sAssociateType, 1); + else if(sElem == "btn_healp_onoff") ai_Heal_OnOff(oPC, oAssociate, sAssociateType, 2); + else if(sElem == "btn_cure_onoff") ai_Cure_OnOff(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_loot") ai_Loot(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_ignore_assoc") ai_Ignore_Associates(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_ignore_traps") ai_Ignore_Traps(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_perc_range") ai_Perc_Range(oPC, oAssociate, nToken, sAssociateType); + else if(sElem == "btn_ai_script") ai_SaveAIScript(oPC, oAssociate, nToken); + } + else if(sEvent == "watch") + { + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + if(sElem == "chbx_ai_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_FOR_PC, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_quiet_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_REDUCE_SPEECH, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_ranged_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_USE_RANGED, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_equip_weapon_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_STOP_WEAPON_EQUIP, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_search_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_USE_SEARCH, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_stealth_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_USE_STEALTH, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_open_door_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_OPEN_DOORS, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_traps_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_REMOVE_TRAPS, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_pick_locks_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_PICK_LOCKS, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_bash_locks_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_BASH_LOCKS, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_magic_level_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_MAGIC_LEVEL, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_spontaneous_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_NO_SPONTANEOUS, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_magic_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_NO_MAGIC_USE, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_magic_items_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_NO_MAGIC_ITEM_USE, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_def_magic_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_DEF_MAGIC_USE, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_off_magic_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_OFF_MAGIC_USE, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_heal_out_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_HEAL_OUT, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_heal_in_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_HEAL_IN, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_heals_onoff_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_STOP_SELF_HEALING, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_healp_onoff_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_STOP_PARTY_HEALING, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cure_onoff_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_STOP_CURE_SPELLS, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_loot_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_LOOT, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_ignore_assoc_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_IGNORE_ASSOCIATES, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_ignore_traps_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_IGNORE_TRAPS, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_perc_range_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_PERC_RANGE, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "cmb_ai_script_selected") ai_SetAIScript(oPC, oAssociate, nToken); + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssociateType + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + } + else if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + if(nMouseScroll == 1.0) // Scroll up + { + if(sElem == "btn_magic_level") ai_MagicIncrement(oPC, oAssociate, 1, sAssociateType); + else if(sElem == "btn_open_door") ai_OpenDoorIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_traps") ai_TrapRangeIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_pick_locks") ai_LockRangeIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_bash_locks") ai_LockRangeIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_heal_out") ai_Heal_Button(oPC, oAssociate, 5, AI_HEAL_OUT_OF_COMBAT_LIMIT, sAssociateType); + else if(sElem == "btn_heal_in") ai_Heal_Button(oPC, oAssociate, 5, AI_HEAL_IN_COMBAT_LIMIT, sAssociateType); + else if(sElem == "btn_loot") ai_LootRangeIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_perc_range") ai_PercRangeIncrement(oPC, oAssociate, 1, sAssociateType, nToken); + } + else if(nMouseScroll == -1.0) // Scroll down + { + if(sElem == "btn_magic_level") ai_MagicIncrement(oPC, oAssociate, -1, sAssociateType); + else if(sElem == "btn_open_door") ai_OpenDoorIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_traps") ai_TrapRangeIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_pick_locks") ai_LockRangeIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_bash_locks") ai_LockRangeIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_heal_out") ai_Heal_Button(oPC, oAssociate, -5, AI_HEAL_OUT_OF_COMBAT_LIMIT, sAssociateType); + else if(sElem == "btn_heal_in") ai_Heal_Button(oPC, oAssociate, -5, AI_HEAL_IN_COMBAT_LIMIT, sAssociateType); + else if(sElem == "btn_loot") ai_LootRangeIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_perc_range") ai_PercRangeIncrement(oPC, oAssociate, -1, sAssociateType, nToken); + } + } + return; + } + //************************************************************************** + // Associate Widget events. + if(sWndId == sAssociateType + AI_WIDGET_NUI) + { + if(sEvent == "click") + { + if(sElem == "btn_open_main") + { + // If all the Command buttons are blocked then don't load the menu. + if(GetLocalInt(GetModule(), sDMWidgetAccessVarname) != 7340028) + { + if(IsWindowClosed(oPC, sAssociateType + AI_COMMAND_NUI)) + { + ai_CreateAssociateCommandNUI(oPC, oAssociate); + } + IsWindowClosed(oPC, sAssociateType + AI_NUI); + IsWindowClosed(oPC, sAssociateType + AI_LOOTFILTER_NUI); + IsWindowClosed(oPC, sAssociateType + AI_COPY_NUI); + IsWindowClosed(oPC, sAssociateType + AI_QUICK_WIDGET_NUI); + IsWindowClosed(oPC, sAssociateType + AI_SPELL_MEMORIZE_NUI); + IsWindowClosed(oPC, sAssociateType + AI_SPELL_KNOWN_NUI); + if(ai_GetIsCharacter(oAssociate)) + { + IsWindowClosed(oPC, AI_MAIN_NUI); + IsWindowClosed(oPC, AI_PLUGIN_NUI); + } + } + } + else if(sElem == "btn_ai") + { + if(GetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT) == "xx_pc_1_hb") + { + ai_TurnOff(oPC, oAssociate, sAssociateType); + } + else ai_TurnOn(oPC, oAssociate, sAssociateType); + } + else if(sElem == "btn_quiet") ai_ReduceSpeech(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_ranged") AssignCommand(oAssociate, ai_Ranged(oPC, oAssociate, sAssociateType)); + else if(sElem == "btn_equip_weapon") ai_EquipWeapons(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_search") ai_Search(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_stealth") ai_Stealth(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_open_door") ai_OpenDoor(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_traps") ai_Traps(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_pick_locks") ai_Locks(oPC, oAssociate, sAssociateType, 1); + else if(sElem == "btn_bash_locks") ai_Locks(oPC, oAssociate, sAssociateType, 2); + else if(sElem == "btn_magic_minus") ai_MagicIncrement(oPC, oAssociate, -1, sAssociateType); + else if(sElem == "btn_magic_plus") ai_MagicIncrement(oPC, oAssociate, 1, sAssociateType); + else if(sElem == "btn_magic") ai_UseMagic(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_magic_items") ai_UseMagicItems(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_def_magic") ai_UseOffensiveMagic(oPC, oAssociate, TRUE, FALSE, sAssociateType); + else if(sElem == "btn_off_magic") ai_UseOffensiveMagic(oPC, oAssociate, FALSE, TRUE, sAssociateType); + else if(sElem == "btn_cure_onoff") ai_Cure_OnOff(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_loot") ai_Loot(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_ignore_assoc") ai_Ignore_Associates(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_ignore_traps") ai_Ignore_Traps(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_perc_range") ai_Perc_Range(oPC, oAssociate, nToken, sAssociateType); + else if(sElem == "btn_spontaneous") ai_Spontaneous(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_buff_short") + { + ai_Buff_Button(oPC, oAssociate, 2, sAssociateType); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + } + else if(sElem == "btn_buff_long") + { + ai_Buff_Button(oPC, oAssociate, 3, sAssociateType); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + } + else if(sElem == "btn_buff_all") + { + ai_Buff_Button(oPC, oAssociate, 1, sAssociateType); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + } + else if(sElem == "btn_buff_rest") ai_Buff_Button(oPC, oAssociate, 0, sAssociateType); + else if(sElem == "btn_jump_to") ai_JumpToPC(oPC, oAssociate); + else if(sElem == "btn_ghost_mode") ai_GhostMode(oPC, oAssociate, nToken, sAssociateType); + else if(sElem == "btn_camera") ai_ChangeCameraView(oPC, oAssociate); + else if(sElem == "btn_inventory") ai_OpenInventory(oAssociate, oPC); + else if(sElem == "btn_familiar") + { + if(GetHasFeat(FEAT_SUMMON_FAMILIAR, oAssociate)) + { + DecrementRemainingFeatUses(oAssociate, FEAT_SUMMON_FAMILIAR); + SummonFamiliar(oAssociate); + } + } + else if(sElem == "btn_companion") + { + if(GetHasFeat(FEAT_ANIMAL_COMPANION, oAssociate)) + { + DecrementRemainingFeatUses(oAssociate, FEAT_ANIMAL_COMPANION); + SummonAnimalCompanion(oAssociate); + } + } + else if(sElem == "btn_heals_onoff") ai_Heal_OnOff(oPC, oAssociate, sAssociateType, 1); + else if(sElem == "btn_healp_onoff") ai_Heal_OnOff(oPC, oAssociate, sAssociateType, 2); + else if(sElem == "btn_cmd_action") ai_Action(oPC, oAssociate); + else if(sElem == "btn_cmd_guard") ai_DoCommand(oPC, oAssociate, 1); + else if(sElem == "btn_cmd_hold") ai_DoCommand(oPC, oAssociate, 3); + else if(sElem == "btn_cmd_search") ai_DoCommand(oPC, oAssociate, 5); + else if(sElem == "btn_cmd_stealth") ai_DoCommand(oPC, oAssociate, 6); + else if(sElem == "btn_cmd_attack") ai_DoCommand(oPC, oAssociate, 4); + else if(sElem == "btn_cmd_follow") ai_DoCommand(oPC, oAssociate, 2); + else if(sElem == "btn_cmd_ai_script") ai_AIScript(oPC, oAssociate, sAssociateType, nToken); + else if(sElem == "btn_cmd_place_trap") ai_HavePCPlaceTrap(oPC, oAssociate); + else if(sElem == "btn_follow_target") ai_FollowTarget(oPC, oAssociate); + else if(sElem == "btn_update_widget") ai_UpdateAssociateWidget(oPC, oAssociate); + else if(GetStringLeft(sElem, 15) == "btn_exe_plugin_") ai_Plugin_Execute(oPC, sElem); + else if(GetStringLeft(sElem, 11) == "btn_widget_") ai_SelectWidgetSpellTarget(oPC, oAssociate, sElem); + } + if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + if(nMouseScroll == 1.0) // Scroll up + { + if(sElem == "btn_cmd_follow" && + oPC != oAssociate) ai_FollowIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_follow_target") ai_FollowIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_magic_level") ai_MagicIncrement(oPC, oAssociate, 1, sAssociateType); + else if(sElem == "btn_pick_locks") ai_LockRangeIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_bash_locks") ai_LockRangeIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_traps") ai_TrapRangeIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_open_door") ai_OpenDoorIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_heal_out") ai_Heal_Button(oPC, oAssociate, 5, AI_HEAL_OUT_OF_COMBAT_LIMIT, sAssociateType); + else if(sElem == "btn_heal_in") ai_Heal_Button(oPC, oAssociate, 5, AI_HEAL_IN_COMBAT_LIMIT, sAssociateType); + else if(sElem == "btn_loot") ai_LootRangeIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_perc_range") ai_PercRangeIncrement(oPC, oAssociate, 1, sAssociateType, -1); + } + if(nMouseScroll == -1.0) // Scroll down + { + if(sElem == "btn_cmd_follow" && + oPC != oAssociate) ai_FollowIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_follow_target") ai_FollowIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_magic_plus") ai_MagicIncrement(oPC, oAssociate, -1, sAssociateType); + if(sElem == "btn_magic_level") ai_MagicIncrement(oPC, oAssociate, -1, sAssociateType); + else if(sElem == "btn_pick_locks") ai_LockRangeIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_bash_locks") ai_LockRangeIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_traps") ai_TrapRangeIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_open_door") ai_OpenDoorIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_heal_out") ai_Heal_Button(oPC, oAssociate, -5, AI_HEAL_OUT_OF_COMBAT_LIMIT, sAssociateType); + else if(sElem == "btn_heal_in") ai_Heal_Button(oPC, oAssociate, -5, AI_HEAL_IN_COMBAT_LIMIT, sAssociateType); + else if(sElem == "btn_loot") ai_LootRangeIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_perc_range") ai_PercRangeIncrement(oPC, oAssociate, -1, sAssociateType, -1); + } + } + if(sEvent == "mousedown") + { + int nMouseButton = JsonGetInt(JsonObjectGet(NuiGetEventPayload(), "mouse_btn")); + if(nMouseButton == NUI_MOUSE_BUTTON_RIGHT) + { + AssignCommand(oPC, PlaySound("gui_button")); + if(sElem == "btn_open_main") + { + // If all the AI buttons are blocked then don't load the menu. + if(GetLocalInt(GetModule(), sDMAIAccessVarname) != 203423743) + { + if(IsWindowClosed(oPC, sAssociateType + AI_NUI)) + { + ai_CreateAssociateAINUI(oPC, oAssociate); + } + } + IsWindowClosed(oPC, sAssociateType + AI_COMMAND_NUI); + IsWindowClosed(oPC, sAssociateType + AI_LOOTFILTER_NUI); + IsWindowClosed(oPC, sAssociateType + AI_COPY_NUI); + IsWindowClosed(oPC, sAssociateType + AI_QUICK_WIDGET_NUI); + IsWindowClosed(oPC, sAssociateType + AI_SPELL_MEMORIZE_NUI); + IsWindowClosed(oPC, sAssociateType + AI_SPELL_KNOWN_NUI); + if(ai_GetIsCharacter(oAssociate)) + { + IsWindowClosed(oPC, AI_MAIN_NUI); + IsWindowClosed(oPC, AI_PLUGIN_NUI); + } + } + else if(sElem == "btn_follow_range") ai_FollowIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(GetStringLeft(sElem, 11) == "btn_widget_") + { + if(GetStringLength(sElem) == 13) nIndex = StringToInt(GetStringRight(sElem, 2)); + else nIndex = StringToInt(GetStringRight(sElem, 1)); + json jAIData = ai_GetAssociateDbJson(oPC, ai_GetAssociateType(oPC, oAssociate), "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + json jSpell = JsonArrayGet(jWidget, nIndex); + ai_CreateDescriptionNUI(oPC, jSpell); + } + } + } + return; + } + //************************************************************************** + // Associate Loot events. + if(sWndId == sAssociateType + AI_LOOTFILTER_NUI) + { + if(sEvent == "click") + { + if(sElem == "btn_set_all") + { + SetLocalInt(oPC, "AI_BLOCK_CHECKS", TRUE); + SetLocalInt(oAssociate, sLootFilterVarname, 65535); + int nIndex; + for(nIndex = 2; nIndex < 20; nIndex++) + { + NuiSetBind(oPC, nToken, "chbx_" + IntToString(nIndex) + "_check", JsonBool (TRUE)); + } + json jLootFilter = ai_GetAssociateDbJson(oPC, sAssociateType, "lootfilters"); + jLootFilter = JsonArraySet(jLootFilter, 1, JsonInt(65535)); + ai_SetAssociateDbJson(oPC, sAssociateType, "lootfilters", jLootFilter); + DelayCommand(1.0, DeleteLocalInt(oPC, "AI_BLOCK_CHECKS")); + } + else if(sElem == "btn_clear_all") + { + SetLocalInt(oPC, "AI_BLOCK_CHECKS", TRUE); + SetLocalInt(oAssociate, sLootFilterVarname, 0); + int nIndex; + for(nIndex = 2; nIndex < 20; nIndex++) + { + NuiSetBind(oPC, nToken, "chbx_" + IntToString(nIndex) + "_check", JsonBool (FALSE)); + } + json jLootFilter = ai_GetAssociateDbJson(oPC, sAssociateType, "lootfilters"); + jLootFilter = JsonArraySet(jLootFilter, 1, JsonInt(0)); + ai_SetAssociateDbJson(oPC, sAssociateType, "lootfilters", jLootFilter); + DelayCommand(1.0, DeleteLocalInt(oPC, "AI_BLOCK_CHECKS")); + } + } + else if(sEvent == "watch") + { + if(GetStringLeft(sElem, 5) == "chbx_") + { + if(GetLocalInt(oPC, "AI_BLOCK_CHECKS")) return; + if(sElem == "chbx_give_loot_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_GIVE_TO_PC, nToken, sElem); + else if(sElem == "chbx_2_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_PLOT, nToken, sElem); + else if(sElem == "chbx_3_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_ARMOR, nToken, sElem); + else if(sElem == "chbx_4_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_BELTS, nToken, sElem); + else if(sElem == "chbx_5_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_BOOTS, nToken, sElem); + else if(sElem == "chbx_6_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_CLOAKS, nToken, sElem); + else if(sElem == "chbx_7_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_GEMS, nToken, sElem); + else if(sElem == "chbx_8_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_GLOVES, nToken, sElem); + else if(sElem == "chbx_9_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_HEADGEAR, nToken, sElem); + else if(sElem == "chbx_10_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_JEWELRY, nToken, sElem); + else if(sElem == "chbx_11_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_MISC, nToken, sElem); + else if(sElem == "chbx_12_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_POTIONS, nToken, sElem); + else if(sElem == "chbx_13_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_SCROLLS, nToken, sElem); + else if(sElem == "chbx_14_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_SHIELDS, nToken, sElem); + else if(sElem == "chbx_15_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_WANDS_RODS_STAVES, nToken, sElem); + else if(sElem == "chbx_16_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_WEAPONS, nToken, sElem); + else if(sElem == "chbx_17_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_ARROWS, nToken, sElem); + else if(sElem == "chbx_18_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_BOLTS, nToken, sElem); + else if(sElem == "chbx_19_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_BULLETS, nToken, sElem); + json jLootFilter = ai_GetAssociateDbJson(oPC, sAssociateType, "lootfilters"); + int nLootFilter = GetLocalInt(oAssociate, sLootFilterVarname); + jLootFilter = JsonArraySet(jLootFilter, 1, JsonInt(nLootFilter)); + ai_SetAssociateDbJson(oPC, sAssociateType, "lootfilters", jLootFilter); + } + else if(GetStringLeft(sElem, 4) == "txt_") + { + if(sElem == "txt_max_weight") + { + int nMaxWeight = StringToInt(JsonGetString(NuiGetBind(oPC, nToken, sElem))); + if(nMaxWeight > 1000) nMaxWeight = 1000; + if(nMaxWeight < 1) nMaxWeight = 1; + SetLocalInt(oAssociate, AI_MAX_LOOT_WEIGHT, nMaxWeight); + json jLootFilter = ai_GetAssociateDbJson(oPC, sAssociateType, "lootfilters"); + jLootFilter = JsonArraySet(jLootFilter, 0, JsonInt(nMaxWeight)); + ai_SetAssociateDbJson(oPC, sAssociateType, "lootfilters", jLootFilter); + return; + } + if(GetStringLeft(sElem, 9) == "txt_gold_") + { + int nAmount = StringToInt(JsonGetString(NuiGetBind(oPC, nToken, sElem))); + int nIndex; + if(GetStringLength(sElem) == 11) nIndex = StringToInt(GetStringRight(sElem, 2)); + else nIndex = StringToInt(GetStringRight(sElem, 1)); + SetLocalInt(oAssociate, AI_MIN_GOLD_ + IntToString(nIndex), nAmount); + json jLootFilter = ai_GetAssociateDbJson(oPC, sAssociateType, "lootfilters"); + jLootFilter = JsonArraySet(jLootFilter, nIndex, JsonInt(nAmount)); + ai_SetAssociateDbJson(oPC, sAssociateType, "lootfilters", jLootFilter); + } + } + } + return; + } + //************************************************************************** + // Associate Paste events. + if(sWndId == sAssociateType + AI_COPY_NUI) + { + if(sEvent == "click") + { + int nIndex, nAssociateType = GetAssociateType(oAssociate); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + object oAssoc; + string sAssocType; + json jModes = ai_GetAssociateDbJson(oPC, sAssociateType, "modes"); + json jButtons = ai_GetAssociateDbJson(oPC, sAssociateType, "buttons"); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jLootFilters = ai_GetAssociateDbJson(oPC, sAssociateType, "lootfilters"); + string sCombatScript = GetLocalString(oAssociate, AI_COMBAT_SCRIPT); + string sDefaultScript = GetLocalString(oAssociate, AI_DEFAULT_SCRIPT); + if(sElem == "btn_paste_all") + { + // Check all non-henchman associates. + for(nIndex = 2; nIndex < 6; nIndex++) + { + if(nAssociateType != nIndex) + { + oAssoc = GetAssociate(nIndex, oPC); + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetAssociateDbJson(oPC, sAssocType, "modes", jModes); + ai_SetAssociateDbJson(oPC, sAssocType, "buttons", jButtons); + ai_SetAssociateDbJson(oPC, sAssocType, "aidata", jAIData); + ai_SetAssociateDbJson(oPC, sAssocType, "lootfilters", jLootFilters); + SetLocalString(oAssoc, AI_COMBAT_SCRIPT, sCombatScript); + SetLocalString(oAssoc, AI_DEFAULT_SCRIPT, sDefaultScript); + if(oAssoc != OBJECT_INVALID) + { + // Clear the creatures Perception distance so we can + // repopulate the local variables. + SetLocalFloat(oAssoc, AI_ASSOC_PERCEPTION_DISTANCE, 0.0); + ai_CheckAssociateData(oPC, oAssoc, sAssocType); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType)) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssocType + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssoc)); + } + } + } + } + // Check all of our henchman. + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssoc = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssoc != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetAssociateDbJson(oPC, sAssocType, "modes", jModes); + ai_SetAssociateDbJson(oPC, sAssocType, "buttons", jButtons); + ai_SetAssociateDbJson(oPC, sAssocType, "aidata", jAIData); + ai_SetAssociateDbJson(oPC, sAssocType, "lootfilters", jLootFilters); + SetLocalString(oAssoc, AI_COMBAT_SCRIPT, sCombatScript); + SetLocalString(oAssoc, AI_DEFAULT_SCRIPT, sDefaultScript); + // Clear the creatures Perception distance so we can + // repopulate the local variables. + SetLocalFloat(oAssoc, AI_ASSOC_PERCEPTION_DISTANCE, 0.0); + ai_CheckAssociateData(oPC, oAssoc, sAssocType); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType)) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssocType + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssoc)); + } + } + else break; + } + ai_SendMessages(GetName(oAssociate) + "'s settings have been copied to all associates.", AI_COLOR_GREEN, oPC); + return; + } + else if(GetStringLeft(sElem, 18) == "btn_paste_henchman") + { + int nIndex = StringToInt(GetStringRight(sElem, 1)); + oAssoc = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssoc != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetAssociateDbJson(oPC, sAssocType, "modes", jModes); + ai_SetAssociateDbJson(oPC, sAssocType, "buttons", jButtons); + ai_SetAssociateDbJson(oPC, sAssocType, "aidata", jAIData); + ai_SetAssociateDbJson(oPC, sAssocType, "lootfilters", jLootFilters); + SetLocalString(oAssoc, AI_COMBAT_SCRIPT, sCombatScript); + SetLocalString(oAssoc, AI_DEFAULT_SCRIPT, sDefaultScript); + // Clear the creatures Perception distance so we can + // repopulate the local variables. + SetLocalFloat(oAssoc, AI_ASSOC_PERCEPTION_DISTANCE, 0.0); + ai_CheckAssociateData(oPC, oAssoc, sAssocType); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType)) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssocType + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssoc)); + } + ai_SendMessages(GetName(oAssociate) + "'s settings have been copied to " + GetName(oAssoc) + ".", AI_COLOR_GREEN, oPC); + } + return; + } + else if(sElem == "btn_paste_familiar") nIndex = ASSOCIATE_TYPE_FAMILIAR; + else if(sElem == "btn_paste_companion") nIndex = ASSOCIATE_TYPE_ANIMALCOMPANION; + else if(sElem == "btn_paste_summons") nIndex = ASSOCIATE_TYPE_SUMMONED; + else if(sElem == "btn_paste_dominated") nIndex = ASSOCIATE_TYPE_DOMINATED; + if(nIndex > 1 && nIndex < 6) + { + oAssoc = GetAssociate(nIndex, oPC); + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetAssociateDbJson(oPC, sAssocType, "modes", jModes); + ai_SetAssociateDbJson(oPC, sAssocType, "buttons", jButtons); + ai_SetAssociateDbJson(oPC, sAssocType, "aidata", jAIData); + ai_SetAssociateDbJson(oPC, sAssocType, "lootfilters", jLootFilters); + SetLocalString(oAssoc, AI_COMBAT_SCRIPT, sCombatScript); + SetLocalString(oAssoc, AI_DEFAULT_SCRIPT, sDefaultScript); + if(oAssoc != OBJECT_INVALID) + { + // Clear the creatures Perception distance so we can + // repopulate the local variables. + SetLocalFloat(oAssoc, AI_ASSOC_PERCEPTION_DISTANCE, 0.0); + ai_CheckAssociateData(oPC, oAssoc, sAssocType); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType)) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssocType + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssoc)); + } + ai_SendMessages(GetName(oAssociate) + "'s settings have been copied to " + GetName(oAssoc) + ".", AI_COLOR_GREEN, oPC); + } + } + } + return; + } + //************************************************************************** + // Plugins events. + if(sWndId == AI_PLUGIN_NUI) + { + if(sEvent == "click") + { + if(sElem == "btn_load_plugins") + { + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "pi_buffing"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "pi_forcerest"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "pi_henchmen"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "pi_crafting"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "pi_mod_set"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "pi_debug"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "pi_test"); + ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreatePluginNUI(oPC)); + } + if(sElem == "btn_load_m_mods") + { + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "mm_prc_spells"); + ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreatePluginNUI(oPC)); + } + if(sElem == "btn_check_plugins") + { + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + int nIndex; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + if(JsonGetInt(JsonArrayGet(jPlugin, 1)) < 3) + { + jPlugin = JsonArraySet(jPlugin, 1, JsonBool(TRUE)); + jPlugins = JsonArraySet(jPlugins, nIndex, jPlugin); + } + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreatePluginNUI(oPC)); + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, "pc" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oPC)); + } + if(sElem == "btn_clear_plugins") + { + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + int nIndex; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + if(JsonGetInt(JsonArrayGet(jPlugin, 1)) < 3) + { + jPlugin = JsonArraySet(jPlugin, 1, JsonBool(FALSE)); + jPlugins = JsonArraySet(jPlugins, nIndex, jPlugin); + } + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreatePluginNUI(oPC)); + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, "pc" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oPC)); + } + else if(sElem == "btn_add_plugin") + { + string sScript = JsonGetString(NuiGetBind (oPC, nToken, "txt_plugin")); + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, sScript); + ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreatePluginNUI(oPC)); + } + else if(GetStringLeft(sElem, 18) == "btn_remove_plugin_") + { + int nIndex = StringToInt(GetStringRight(sElem, 1)); + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + jPlugins = JsonArrayDel(jPlugins, nIndex); + ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreatePluginNUI(oPC)); + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, "pc" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oPC)); + } + else if(GetStringLeft(sElem, 11) == "btn_plugin_") ai_Plugin_Execute(oPC, sElem); + } + else if(sEvent == "watch") + { + if(GetStringLeft(sElem, 12) == "chbx_plugin_" && GetStringRight(sElem, 6) == "_check") + { + int nIndex = StringToInt(GetSubString(sElem, 12, 1)); + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + json jPlugin = JsonArrayGet(jPlugins, nIndex); + int bCheck = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + jPlugin = JsonArraySet(jPlugin, 1, JsonBool(bCheck)); + jPlugins = JsonArraySet(jPlugins, nIndex, jPlugin); + ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, "pc" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oPC)); + } + } + return; + } + //************************************************************************** + // Quick Use Widget events. + if(sWndId == sAssociateType + AI_QUICK_WIDGET_NUI) + { + if(sEvent == "click") + { + if(GetStringLeft(sElem, 10) == "btn_class_") // Changes the class. + { + string sClassPosition = GetStringRight(sElem, 1); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + jSpells = JsonArraySet(jSpells, 0, JsonInt(StringToInt(sClassPosition))); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreateQuickWidgetSelectionNUI(oPC, oAssociate)); + } + else if(GetStringLeft(sElem, 10) == "btn_level_") // Changes the level. + { + string sLevel; + if(GetStringLength(sElem) == 12) sLevel = GetStringRight(sElem, 2); + else sLevel = GetStringRight(sElem, 1); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + jSpells = JsonArraySet(jSpells, 1, JsonInt(StringToInt(sLevel))); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreateQuickWidgetSelectionNUI(oPC, oAssociate)); + } + else if(sElem == "btn_text_spell") // Adds abilities to quick use widget. + { + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + if(JsonGetType(jWidget) == JSON_TYPE_NULL) + { + jWidget = JsonArray(); + if(JsonGetLength(jSpells) == 2) jSpells = JsonArrayInsert(jSpells, JsonArray()); + } + if(JsonGetLength(jWidget) < 20) + { + json jData = NuiGetUserData(oPC, nToken); + json jQuickListArray = JsonArrayGet(jData, 1); + json jSpell = JsonArrayGet(jQuickListArray, nIndex); + jWidget = JsonArrayInsert(jWidget, jSpell); + jSpells = JsonArraySet(jSpells, 2, jWidget); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreateQuickWidgetSelectionNUI(oPC, oAssociate)); + } + else ai_SendMessages("The quick widget can only have 20 abilities or spells!", AI_COLOR_RED, oPC); + } + else if(sElem == "btn_info_spell") + { + json jQuickListArray = JsonArrayGet(jData, 1); + json jSpell = JsonArrayGet(jQuickListArray, nIndex); + ai_CreateDescriptionNUI(oPC, jSpell); + } + else if(GetStringLeft(sElem, 11) == "btn_widget_") + { + string sIndex; + if(GetStringLength(sElem) == 13) sIndex = GetStringRight(sElem, 2); + else sIndex = GetStringRight(sElem, 1); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + jWidget = JsonArrayDel(jWidget, StringToInt(sIndex)); + jSpells = JsonArraySet(jSpells, 2, jWidget); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreateQuickWidgetSelectionNUI(oPC, oAssociate)); + } + } + else if(sEvent == "close") + { + int nUIToken = NuiFindWindow(oPC, sAssociateType + AI_QUICK_WIDGET_NUI); + if(nUIToken) + { + DelayCommand(0.0, NuiDestroy(oPC, nUIToken)); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + } + } + return; + } + //************************************************************************** + // Spell Memorization events. + if(sWndId == sAssociateType + AI_SPELL_MEMORIZE_NUI) + { + if(sEvent == "click") + { + if(GetStringLeft(sElem, 10) == "btn_class_") // Changes the class. + { + string sClassPosition = GetStringRight(sElem, 1); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + jSpells = JsonArraySet(jSpells, 0, JsonInt(StringToInt(sClassPosition))); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreateSpellMemorizationNUI(oPC, oAssociate)); + } + else if(GetStringLeft(sElem, 10) == "btn_level_") // Changes the level. + { + string sLevel = GetStringRight(sElem, 1); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + jSpells = JsonArraySet(jSpells, 1, JsonInt(StringToInt(sLevel))); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreateSpellMemorizationNUI(oPC, oAssociate)); + } + else if(sElem == "btn_text_spell") // Adds spell to memorization. + { + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + int nClass = GetClassByPosition(JsonGetInt(JsonArrayGet(jSpells, 0)), oAssociate); + int nLevel = JsonGetInt(JsonArrayGet(jSpells, 1)); + json jSpellArray = JsonArrayGet(jData, 1); + int nMaxMemorizationSlot = GetMemorizedSpellCountByLevel(oAssociate, nClass, nLevel); + int nSlot, nSpell; + while(nSlot < nMaxMemorizationSlot) + { + if(GetMemorizedSpellId(oAssociate, nClass, nLevel, nSlot) == -1) + { + nSpell = JsonGetInt(JsonArrayGet(jSpellArray, nIndex)); + SetMemorizedSpell(oAssociate, nClass, nLevel, nSlot, nSpell, FALSE); + //NuiDestroy(oPC, nToken); + //ai_CreateSpellMemorizationNUI(oPC, oAssociate); + string sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + string sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + string sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + string sIndex = IntToString(nSlot); + NuiSetBind(oPC, nToken, "btn_memorized_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_memorized_" + sIndex + "_image", JsonString(sSpellIcon)); + NuiSetBind(oPC, nToken, "btn_memorized_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + IntToString(nLevel) + ")")); + return; + } + nSlot++; + } + if(nSlot >= nMaxMemorizationSlot) ai_SendMessages("All spell memorization slots are full!", AI_COLOR_RED, oPC); + } + else if(sElem == "btn_info_spell") + { + json jSpellArray = JsonArrayGet(jData, 1); + int nSpell = JsonGetInt(JsonArrayGet(jSpellArray, nIndex)); + ai_CreateDescriptionNUI(oPC, JsonArray(), nSpell); + } + else if(GetStringLeft(sElem, 14) == "btn_memorized_") + { + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + int nClass = GetClassByPosition(JsonGetInt(JsonArrayGet(jSpells, 0)), oAssociate); + int nLevel = JsonGetInt(JsonArrayGet(jSpells, 1)); + string sIndex = GetStringRight(sElem, 1); + ClearMemorizedSpell(oAssociate, nClass, nLevel, StringToInt(sIndex)); + NuiSetBind(oPC, nToken, "btn_memorized_" + sIndex + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "btn_memorized_" + sIndex + "_tooltip", JsonString("")); + NuiSetBind(oPC, nToken, "btn_memorized_" + sIndex + "_event", JsonBool(FALSE)); + //NuiDestroy(oPC, nToken); + //ai_CreateSpellMemorizationNUI(oPC, oAssociate); + } + } + else if(sEvent == "close") + { + int nUIToken = NuiFindWindow(oPC, sAssociateType + AI_QUICK_WIDGET_NUI); + if(nUIToken) + { + DelayCommand(0.0, NuiDestroy(oPC, nUIToken)); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + } + } + return; + } + //************************************************************************** + // Spell Known events. + if(sWndId == sAssociateType + AI_SPELL_KNOWN_NUI) + { + if(sEvent == "click") + { + if(GetStringLeft(sElem, 10) == "btn_class_") // Changes the class. + { + string sClassPosition = GetStringRight(sElem, 1); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + jSpells = JsonArraySet(jSpells, 0, JsonInt(StringToInt(sClassPosition))); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreateSpellKnownNUI(oPC, oAssociate)); + } + else if(GetStringLeft(sElem, 10) == "btn_level_") // Changes the level. + { + string sLevel = GetStringRight(sElem, 1); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + jSpells = JsonArraySet(jSpells, 1, JsonInt(StringToInt(sLevel))); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreateSpellKnownNUI(oPC, oAssociate)); + } + else if(sElem == "btn_text_spell") // Adds spell to known list. + { + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + int nClass = GetClassByPosition(JsonGetInt(JsonArrayGet(jSpells, 0)), oAssociate); + int nLevel = JsonGetInt(JsonArrayGet(jSpells, 1)); + json jSpellArray = JsonArrayGet(jData, 1); + int nSpell = JsonGetInt(JsonArrayGet(jSpellArray, nIndex)); + json jClassList = GetLocalJson(oAssociate, AI_CLASS_LIST_JSON); + // Get the correct class array. + int bAddList, nClassIndex = 0; + json jClass = JsonArrayGet(jClassList, nClassIndex); + while(JsonGetInt(GffGetInt(jClass, "Class")) != nClass) + { + jClass = JsonArrayGet(jClassList, ++nClassIndex); + } + string sLevel = IntToString(nLevel); + json jSpell, jKnownList = GffGetList(jClass, "KnownList" + sLevel); + if(JsonGetType(jKnownList) == JSON_TYPE_NULL) + { + bAddList = TRUE; + jKnownList = JsonArray(); + } + int nMaxKnownSlots, nSlot; + string sSpellKnownTable = Get2DAString("classes", "SpellKnownTable", nClass); + if(sSpellKnownTable != "") nMaxKnownSlots = StringToInt(Get2DAString(sSpellKnownTable, "SpellLevel" + sLevel, GetLevelByClass(nClass, oAssociate) - 1)); + else nMaxKnownSlots = 20; + while(nSlot < nMaxKnownSlots) + { + jSpell = JsonArrayGet(jKnownList, nSlot); + if(JsonGetType(jSpell) == JSON_TYPE_NULL) + { + jSpell = GffAddWord(JsonObject(), "Spell", nSpell); + jSpell = JsonObjectSet(jSpell, "__struct_id", JsonInt(3)); + jKnownList = JsonArrayInsert(jKnownList, jSpell); + string sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + string sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + string sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + string sIndex = IntToString(nSlot); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_image", JsonString(sSpellIcon)); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + sLevel + ")")); + SetLocalInt(oAssociate, "AI_KNOWN_SPELL_CHANGE", TRUE); + break; + } + else if(JsonGetInt(GffGetWord(jSpell, "Spell")) == nSpell) + { + string sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + ai_SendMessages(sName + " is already in the known spell list!", AI_COLOR_RED, oPC); + return; + } + nSlot++; + } + if(nSlot >= nMaxKnownSlots) + { + ai_SendMessages("All known spell slots are full!", AI_COLOR_RED, oPC); + return; + } + if(bAddList) jClass = GffAddList(jClass, "KnownList" + sLevel, jKnownList); + else jClass = GffReplaceList(jClass, "KnownList" + sLevel, jKnownList); + jClassList = JsonArraySet(jClassList, nClassIndex, jClass); + SetLocalJson(oAssociate, AI_CLASS_LIST_JSON, jClassList); + } + else if(sElem == "btn_info_spell") + { + json jSpellArray = JsonArrayGet(jData, 1); + int nSpell = JsonGetInt(JsonArrayGet(jSpellArray, nIndex)); + ai_CreateDescriptionNUI(oPC, JsonArray(), nSpell); + } + else if(GetStringLeft(sElem, 10) == "btn_known_") // Remove a known spell. + { + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + int nClass = GetClassByPosition(JsonGetInt(JsonArrayGet(jSpells, 0)), oAssociate); + int nLevel = JsonGetInt(JsonArrayGet(jSpells, 1)); + string sIndex = GetStringRight(sElem, 1); + // Check to see if there is a spell in this slot. + string sImageName = JsonGetString(NuiGetBind(oPC, nToken, "btn_known_" + sIndex + "_image")); + if(sImageName == "ctl_cg_btn_splvl") return; + json jClassList = GetLocalJson(oAssociate, AI_CLASS_LIST_JSON); + // Get the correct class array. + int nClassIndex = 0; + json jClass = JsonArrayGet(jClassList, nClassIndex); + while(JsonGetInt(GffGetInt(jClass, "Class")) != nClass) + { + jClass = JsonArrayGet(jClassList, ++nClassIndex); + } + string sLevel = IntToString(nLevel); + json jKnownList = GffGetList(jClass, "KnownList" + sLevel); + jKnownList = JsonArrayDel(jKnownList, StringToInt(sIndex)); + jClass = GffReplaceList(jClass, "KnownList" + sLevel, jKnownList); + jClassList = JsonArraySet(jClassList, nClassIndex, jClass); + SetLocalJson(oAssociate, AI_CLASS_LIST_JSON, jClassList); + SetLocalInt(oAssociate, "AI_KNOWN_SPELL_CHANGE", TRUE); + // Relist all known spells so they match the index. + int nMaxKnownSlots, nSpell; + string sName, sSpellIcon, sClass = IntToString(nClass); + string sSpellKnownTable = Get2DAString("classes", "SpellKnownTable", nClass); + json jSpell; + if(sSpellKnownTable != "") nMaxKnownSlots = StringToInt(Get2DAString(sSpellKnownTable, "SpellLevel" + IntToString(nLevel), GetLevelByClass(nClass, oAssociate) - 1)); + else nMaxKnownSlots = 20; + nIndex = 0; + while(nIndex < 20) + { + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_event", JsonBool(TRUE)); + if(nIndex < nMaxKnownSlots) + { + jSpell = JsonArrayGet(jKnownList, nIndex); + if(JsonGetType(jSpell) == JSON_TYPE_NULL) + { + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_tooltip", JsonString(" Empty known spell slot")); + } + else + { + nSpell = JsonGetInt(GffGetWord(jSpell, "Spell")); + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + //nMetaMagic = 255; + //nDomain = 0; + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_image", JsonString(sSpellIcon)); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + IntToString(nLevel) + ")")); + //sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, -1, -1, -1, nMetaMagic, nDomain); + //NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString(sMetaMagicText)); + } + } + else + { + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_image", JsonString("ctl_cg_btn_splvl")); + //NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString("")); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_event", JsonBool(FALSE)); + } + ++nIndex; + } + } + } + else if(sEvent == "close") + { + if(GetLocalInt(oAssociate, "AI_KNOWN_SPELL_CHANGE")) + { + RemoveHenchman(oPC, oAssociate); + json jHenchman = ObjectToJson(oAssociate, TRUE); + json jClassList = GetLocalJson(oAssociate, AI_CLASS_LIST_JSON); + jHenchman = GffReplaceList(jHenchman, "ClassList", jClassList); + location lLocation = GetLocation(oAssociate); + int nFamiliar, nCompanion; + object oCompanion = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oAssociate); + if(oCompanion != OBJECT_INVALID) nFamiliar = TRUE; + oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oAssociate); + if(oCompanion != OBJECT_INVALID) nCompanion = TRUE; + AssignCommand(oAssociate, SetIsDestroyable(TRUE, FALSE, FALSE)); + DestroyObject(oAssociate); + oAssociate = ai_AddHenchman(oPC, jHenchman, lLocation, nFamiliar, nCompanion); + DeleteLocalInt(oAssociate, "AI_KNOWN_SPELL_CHANGE"); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + } + } + return; + } + //************************************************************************** + // Spell Description events. + if(sWndId == AI_SPELL_DESCRIPTION_NUI) + { + if(sEvent == "click" && sElem == "btn_ok") DelayCommand(0.0, NuiDestroy(oPC, nToken)); + } + //************************************************************************** + // Effect Icon NUI events. + if(sWndId == AI_EFFECT_ICON_NUI) + { + if(sEvent == "click") + { + if(GetStringLeft(sElem, 18) == "btn_remove_effect_") + { + int nEffectIndex = StringToInt(GetStringRight(sElem, GetStringLength(sElem) - 18)); + json jEffectID = JsonArrayGet(jData, 2); + string sEffectLinkID = JsonGetString(JsonArrayGet(jEffectID, nEffectIndex)); + int nIndex; + effect eEffect = GetFirstEffect(oPC); + while(GetIsEffectValid(eEffect)) + { + if(GetEffectLinkId(eEffect) == sEffectLinkID) + { + RemoveEffect(oPC, eEffect); + int nEffectIconToken = NuiFindWindow(oPC, AI_EFFECT_ICON_NUI); + if(nEffectIconToken) DelayCommand(0.0, NuiDestroy(oPC, nEffectIconToken)); + } + nIndex++; + eEffect = GetNextEffect(oPC); + } + } + } + else if(sEvent == "mousedown") + { + AssignCommand(oPC, PlaySound("gui_button")); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + } + } +} +void ai_SetWidgetButtonToCheckbox(object oPC, int nButton, object oAssociate, string sAssociateType, int nToken, string sElem) +{ + int bCheck = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + ai_SetWidgetButton(oPC, nButton, oAssociate, sAssociateType, bCheck); +} +void ai_SetAIButtonToCheckbox(object oPC, int nButton, object oAssociate, string sAssociateType, int nToken, string sElem) +{ + int bCheck = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + ai_SetAIButton(oPC, nButton, oAssociate, sAssociateType, bCheck); +} +void ai_SetLootFilterToCheckbox(object oPC, object oAssociate, int nFilterBit, int nToken, string sElem) +{ + int bCheck = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + ai_SetLootFilter(oAssociate, nFilterBit, bCheck); +} +void ai_AddAssociate(object oPC, int nToken, json jAssociate, location lLocation, int nFamiliar, int nCompanion, int nRange = 0) +{ + object oAssociate = JsonToObject(jAssociate, lLocation, OBJECT_INVALID, TRUE); + //ChangeToStandardFaction(oAssociate, STANDARD_FACTION_COMMONER); + //SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 50, oAssociate); + //SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 50, oAssociate); + //SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 50, oAssociate); + //SetStandardFactionReputation(STANDARD_FACTION_HOSTILE, 0, oAssociate); + AddHenchman(oPC, oAssociate); + DeleteLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE"); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + if(nRange) SetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION, nRange); + if(nFamiliar) SummonFamiliar(oAssociate); + if(nCompanion) SummonAnimalCompanion(oAssociate); +} +void ai_SetCompanionType(object oPC, object oAssociate, int nToken, int nAssociateType) +{ + if(ai_GetIsCharacter(oAssociate)) return; + SetLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE", TRUE); + int nSelection; + // Need to remove the henchman before we copy them to keep factions correct. + ai_FireHenchman(oPC, oAssociate); + json jAssociate = ObjectToJson(oAssociate, TRUE); + if(nAssociateType == ASSOCIATE_TYPE_FAMILIAR) + { + nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_familiar_selected")); + jAssociate = GffReplaceInt(jAssociate, "FamiliarType", nSelection); + } + else if(nAssociateType == ASSOCIATE_TYPE_ANIMALCOMPANION) + { + nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_companion_selected")); + jAssociate = GffReplaceInt(jAssociate, "CompanionType", nSelection); + } + //ai_Debug("0e_nui", "916", JsonDump(jAssociate, 1)); + location lLocation = GetLocation(oAssociate); + int nFamiliar, nCompanion; + object oCompanion = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oAssociate); + if(oCompanion != OBJECT_INVALID) nFamiliar = TRUE; + oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oAssociate); + if(oCompanion != OBJECT_INVALID) nCompanion = TRUE; + SetIsDestroyable(TRUE, FALSE, FALSE, oAssociate); + DestroyObject(oAssociate); + DelayCommand(0.1, ai_AddAssociate(oPC, nToken, jAssociate, lLocation, nFamiliar, nCompanion)); +} +void ai_SetCompanionName(object oPC, object oAssociate, int nToken, int nAssociateType) +{ + if(ai_GetIsCharacter(oAssociate)) return; + SetLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE", TRUE); + string sAssociateType; + string sName; + // Need to remove the henchman before we copy them to keep factions correct. + ai_FireHenchman(oPC, oAssociate); + json jAssociate = ObjectToJson(oAssociate, TRUE); + if(nAssociateType == ASSOCIATE_TYPE_FAMILIAR) + { + sName = JsonGetString(NuiGetBind(oPC, nToken, "txt_familiar_name")); + jAssociate = GffReplaceString(jAssociate, "FamiliarName", sName); + } + else if(nAssociateType == ASSOCIATE_TYPE_ANIMALCOMPANION) + { + sAssociateType = "txt_companion_name"; + sName = JsonGetString(NuiGetBind(oPC, nToken, "txt_companion_name")); + jAssociate = GffReplaceString(jAssociate, "FamiliarName", sName); + } + location lLocation = GetLocation(oAssociate); + int nFamiliar, nCompanion; + object oCompanion = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oAssociate); + if(oCompanion != OBJECT_INVALID) nFamiliar = TRUE; + oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oAssociate); + if(oCompanion != OBJECT_INVALID) nCompanion = TRUE; + SetIsDestroyable(TRUE, FALSE, FALSE, oAssociate); + DestroyObject(oAssociate); + DelayCommand(0.1, ai_AddAssociate(oPC, nToken, jAssociate, lLocation, nFamiliar, nCompanion)); +} +void ai_SetAIScript(object oPC, object oAssociate, int nToken) +{ + int nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_ai_script_selected")); + if(nSelection == 0) return; + string sScript = sScript = ResManFindPrefix("ai_a_", RESTYPE_NCS, nSelection); + NuiSetBind(oPC, nToken, "txt_ai_script", JsonString(sScript)); + string sOldScript = GetLocalString(oAssociate, AI_COMBAT_SCRIPT); + if(sScript != sOldScript) + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, sScript); + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + if(JsonGetType(JsonArrayGet(jAIData, 8)) == JSON_TYPE_NULL) jAIData = JsonArrayInsert(jAIData, JsonString(sScript)); + else jAIData = JsonArraySet(jAIData, 8, JsonString(sScript)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + ai_SendMessages(GetName(oAssociate) + " is now using " + sScript + " AI script!", AI_COLOR_GREEN, oPC); + } + else ai_SendMessages(GetName(oAssociate) + " is already using this script! Did not change AI script.", AI_COLOR_RED, oPC); +} +void ai_PercRangeIncrement(object oPC, object oAssociate, int nIncrement, string sAssociateType, int nToken) +{ + int nAdjustment = GetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION + "_MENU"); + nAdjustment += nIncrement; + if(nAdjustment < 8 || nAdjustment > 11) return; + SetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION + "_MENU", nAdjustment); + json jAssociate = ObjectToJson(oAssociate, TRUE); + int nHenchPercRange = JsonGetInt(GffGetByte(jAssociate, "PerceptionRange")); + string sText, sInfo; + if(nAdjustment == nHenchPercRange) + { + if(nAdjustment == 8) sText = " Perception Range Short [10 meters Sight / 10 meters Listen]"; + else if(nAdjustment == 9) sText = " Perception Range Medium [20 meters Sight / 20 meters Listen]"; + else if(nAdjustment == 10) sText = " Perception Range Long [35 meters Sight / 20 meters Listen]"; + else sText = " Perception Range Default [20 meters Sight / 20 meters Listen]"; + sInfo = " "; + } + else + { + if(nAdjustment == 8) sText = " !!! Click the Perception Range button to set to short range !!!"; + else if(nAdjustment == 9) sText = " !!! Click the Perception Range button to set to medium range !!!"; + else if(nAdjustment == 10) sText = " !!! Click the Perception Range button to set to long range !!!"; + else sText = " !!! Click the Perception Range button to set to the default range !!!"; + sInfo = sText; + } + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_perc_range_tooltip", sText); + if(nToken > -1) NuiSetBind (oPC, nToken, "lbl_info_label", JsonString(sInfo)); +} +void ai_Perc_Range(object oPC, object oAssociate, int nToken, string sAssociateType) +{ + if(ai_GetIsCharacter(oAssociate)) return; + SetLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE", TRUE); + int nBtnPercRange = GetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION + "_MENU"); + string sText, sText2; + float fRange = 20.0; + if(nBtnPercRange == 8) + { + sText = "short"; + sText2 = " Perception Range Short [10 meters Sight / 10 meters Listen]"; + fRange = 10.0; + } + else if(nBtnPercRange == 9) + { + sText = "medium"; + sText2 = " Perception Range Medium [20 meters Sight / 20 meters Listen]"; + } + else if(nBtnPercRange == 10) + { + sText = "long"; + sText2 = " Perception Range Long [35 meters Sight / 20 meters Listen]"; + fRange = 35.0; + } + else if(nBtnPercRange == 11) + { + sText = "default"; + sText2 = " Perception Range Default [20 meters Sight / 20 meters Listen]"; + } + SetLocalFloat(oAssociate, AI_ASSOC_PERCEPTION_DISTANCE, fRange); + SetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION, nBtnPercRange); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jAIData = JsonArraySet(jAIData, 7, JsonInt(nBtnPercRange)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + // Need to remove the henchman before we copy them to keep factions correct. + ai_FireHenchman(oPC, oAssociate); + json jAssociate = ObjectToJson(oAssociate, TRUE); + int nHenchPercRange = JsonGetInt(GffGetByte(jAssociate, "PerceptionRange")); + if(nBtnPercRange == nHenchPercRange) + { + ai_SendMessages(GetName(oAssociate) + " already has this perception set.", AI_COLOR_YELLOW, oPC); + AddHenchman(oPC, oAssociate); + DeleteLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE"); + return; + } + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssociateType + AI_NUI))); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_perc_range_tooltip", sText2); + ai_SendMessages(GetName(oAssociate) + " has updated their perception range to " + sText + ".", AI_COLOR_YELLOW, oPC); + location lLocation = GetLocation(oAssociate); + jAssociate = GffReplaceByte(jAssociate, "PerceptionRange", nBtnPercRange); + int nFamiliar, nCompanion; + object oCompanion = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oAssociate); + if(oCompanion != OBJECT_INVALID) nFamiliar = TRUE; + oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oAssociate); + if(oCompanion != OBJECT_INVALID) nCompanion = TRUE; + SetIsDestroyable(TRUE, FALSE, FALSE, oAssociate); + DestroyObject(oAssociate); + DelayCommand(0.1, ai_AddAssociate(oPC, nToken, jAssociate, lLocation, nFamiliar, nCompanion, nBtnPercRange)); +} +void ai_RulePercDistInc(object oPC, object oModule, int nIncrement, int nToken) +{ + int nAdjustment = GetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE) + nIncrement; + if(nAdjustment < 8 || nAdjustment > 11) return; + SetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE, nAdjustment); + string sText; + if(nAdjustment == 8) sText = " Monster perception: Short [10 Sight / 10 Listen]"; + else if(nAdjustment == 9) sText = " Monster perception: Medium [20 Sight / 20 Listen]"; + else if(nAdjustment == 10) sText = " Monster perception: Long [35 Sight / 20 Listen]"; + else sText = " Monster perception: Default [Monster's default values]"; + NuiSetBind(oPC, nToken, "lbl_perc_dist_label", JsonString(sText)); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, AI_RULE_MON_PERC_DISTANCE, JsonInt(nAdjustment)); + ai_SetCampaignDbJson("rules", jRules); +} +json ai_AddRestrictedSpell(json jRules, int nSpell, int bRestrict = TRUE) +{ + object oModule = GetModule(); + json jRSpells = GetLocalJson(oModule, AI_RULE_RESTRICTED_SPELLS); + if(JsonGetType(jRSpells) == JSON_TYPE_NULL) jRSpells = JsonArray(); + int nIndex, nMaxIndex = JsonGetLength(jRSpells); + if(bRestrict) + { + while(nIndex < nMaxIndex) + { + if(JsonGetInt(JsonArrayGet(jRSpells, nIndex)) == nSpell) return jRules; + nIndex++; + } + jRSpells = JsonArrayInsert(jRSpells, JsonInt(nSpell)); + } + else + { + while(nIndex < nMaxIndex) + { + if(JsonGetInt(JsonArrayGet(jRSpells, nIndex)) == nSpell) + { + jRSpells = JsonArrayDel(jRSpells, nIndex); + break; + } + nIndex++; + } + } + SetLocalJson(oModule, AI_RULE_RESTRICTED_SPELLS, jRSpells); + return JsonObjectSet(jRules, AI_RULE_RESTRICTED_SPELLS, jRSpells); +} +void ai_TurnOn(object oPC, object oTarget, string sAssociateType) +{ + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ai_tooltip", " AI On"); + ai_SendMessages("AI turned on for " + GetName(oTarget) + ".", AI_COLOR_YELLOW, oPC); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "xx_pc_1_hb"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_NOTICE, "xx_pc_2_percept"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "xx_pc_3_endround"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "xx_pc_4_convers"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "xx_pc_5_phyatked"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "xx_pc_6_damaged"); + //SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DEATH, ""); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "xx_pc_8_disturb"); + //SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + //SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_RESTED, ""); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "xx_pc_b_castat"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "xx_pc_e_blocked"); + //SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, ""); + // This sets the script for the PC to run AI based on class. + ai_SetAssociateAIScript(oTarget, FALSE); + // Set so PC can hear associates talking in combat. + ai_SetListeningPatterns(oTarget); +} +void ai_TurnOff(object oPC, object oAssociate, string sAssociateType) +{ + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ai_tooltip", " AI Off"); + ai_SendMessages("AI Turned off for " + GetName(oAssociate) + ".", AI_COLOR_YELLOW, oPC); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, ""); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_NOTICE, ""); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, ""); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, ""); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, ""); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_DAMAGED, ""); + //SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_DEATH, ""); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_DISTURBED, ""); + //SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + //SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_RESTED, ""); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, ""); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, ""); + //SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, ""); + DeleteLocalInt(oAssociate, "AI_I_AM_BEING_HEALED"); + DeleteLocalString(oAssociate, "AIScript"); + ai_ClearCreatureActions(); +} +object ai_AddHenchman(object oPC, json jHenchman, location lLocation, int nFamiliar, int nCompanion) +{ + jHenchman = GffReplaceResRef(jHenchman, "ScriptSpawn", ""); + object oHenchman = JsonToObject(jHenchman, lLocation, OBJECT_INVALID, TRUE); + AddHenchman(oPC, oHenchman); + DeleteLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE"); + string sAssociateType = ai_GetAssociateType(oPC, oHenchman); + NuiDestroy(oPC, NuiFindWindow(oPC, sAssociateType + AI_WIDGET_NUI)); + if(nFamiliar) SummonFamiliar(oHenchman); + if(nCompanion) SummonAnimalCompanion(oHenchman); + return oHenchman; +} + diff --git a/src/module/nss/0e_nui_dm.nss b/src/module/nss/0e_nui_dm.nss new file mode 100644 index 0000000..4ffd851 --- /dev/null +++ b/src/module/nss/0e_nui_dm.nss @@ -0,0 +1,700 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: 0e_nui_dm + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Menu event script + sEvent: close, click, mousedown, mouseup, watch (if bindwatch is set). +/*////////////////////////////////////////////////////////////////////////////// +#include "0i_menus_dm" +void ai_SetDMWidgetButtonToCheckbox(object oDM, int nButton, int nToken, string sElem); +void ai_SetDMWAccessButtonToCheckbox(object oDM, int nButton, int nToken, string sElem); +void ai_SetDMAIAccessButtonToCheckbox(object oDM, int nButton, int nToken, string sElem); +void ai_SetDMAIAccessButtonToCheckbox(object oDM, int nButton, int nToken, string sElem); +void ai_RulePercDistInc(object oDM, object oModule, int nIncrement, int nToken); +// Adds a spell to a json AI restricted spell list then returns jRules. +// bRestrict = TRUE will add to the list FALSE will remove it from the list. +json ai_AddRestrictedSpell(json jRules, int nSpell, int bRestrict = TRUE); +// Adds a selected creature to the group. +void ai_SelectToGroup(object oDM, string sElem); +// Does a selected action for nGroup. +void ai_DMSelectAction(object oDM, string sElem); +// Changes if the group will run (nSpeed: 1) or walk (nSpeed: 0). +void ai_DMChangeMoveSpeed(object oDM, string sElem, int nSpeed); +void main() +{ + object oDM = NuiGetEventPlayer(); + int nToken = NuiGetEventWindow(); + string sEvent = NuiGetEventType(); + string sElem = NuiGetEventElement(); + int nIndex = NuiGetEventArrayIndex(); + string sWndId = NuiGetWindowId(oDM, nToken); + //if(AI_DEBUG) ai_Debug ("0e_nui", "58", "sWndId: " + sWndId + " sEvent: " + sEvent + " sElem: " + sElem + + // " nToken: " + IntToString(nToken) + " oPC: " + GetName(oPC)); + //WriteTimestampedLogEntry("0e_nui, 58, sWndId: " + sWndId + " sEvent: " + sEvent + " sElem: " + sElem + + // " nToken: " + IntToString(nToken) + " oDM: " + GetName(oDM)); + //************************************************************************** + string sName = ai_RemoveIllegalCharacters(GetName(oDM)); + // Watch to see if the window moves and save. + if(sElem == "window_geometry" && sEvent == "watch") + { + if(GetLocalInt(oDM, AI_NO_NUI_SAVE)) return; + SaveMenuToCampaignDb(oDM, nToken, sWndId); + } + //************************************************************************** + // Widget events. + if(sWndId == "dm" + AI_WIDGET_NUI) + { + //if(GetLocalInt(oDM, AI_NO_NUI_SAVE)) return; + if(sEvent == "click") + { + if(sElem == "btn_open_main") + { + if(IsWindowClosed(oDM, "dm" + AI_COMMAND_NUI)) ai_CreateDMCommandNUI(oDM); + IsWindowClosed(oDM, "dm" + AI_MAIN_NUI); + } + else if(sElem == "btn_camera") ai_SelectCameraView(oDM); + else if(sElem == "btn_inventory") ai_SelectOpenInventory(oDM); + else if(GetStringLeft(sElem, 13) == "btn_cmd_group") + { + ai_DMSelectAction(oDM, sElem); + } + else if(GetStringLeft(sElem, 15) == "btn_exe_plugin_") ai_Plugin_Execute(oDM, sElem, TRUE); + } + else if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + if(nMouseScroll == 1.0) // Scroll up + { + if(GetStringLeft(sElem, 13) == "btn_cmd_group") ai_DMChangeMoveSpeed(oDM, sElem, 1); + } + if(nMouseScroll == -1.0) // Scroll down + { + if(GetStringLeft(sElem, 13) == "btn_cmd_group") ai_DMChangeMoveSpeed(oDM, sElem, 0); + } + } + else if(sEvent == "mousedown") + { + int nMouseButton = JsonGetInt(JsonObjectGet(NuiGetEventPayload(), "mouse_btn")); + if(nMouseButton == NUI_MOUSE_BUTTON_RIGHT) + { + if(sElem == "btn_open_main") + { + if(IsWindowClosed(oDM, "dm" + AI_MAIN_NUI)) ai_CreateDMOptionsNUI(oDM); + } + else if(GetStringLeft(sElem, 13) == "btn_cmd_group") + { + ai_SelectToGroup(oDM, sElem); + } + } + } + } + else if(sWndId == "dm" + AI_COMMAND_NUI) + { + if(sEvent == "click") + { + if(sElem == "btn_widget_lock") + { + if(ai_GetDMWidgetButton(oDM, BTN_DM_WIDGET_LOCK)) + { + ai_SendMessages(GetName(oDM) + " AI widget unlocked.", AI_COLOR_YELLOW, oDM); + ai_SetDMWidgetButton(oDM, BTN_DM_WIDGET_LOCK, FALSE); + } + else + { + ai_SendMessages(GetName(oDM) + " AI widget locked.", AI_COLOR_YELLOW, oDM); + ai_SetDMWidgetButton(oDM, BTN_DM_WIDGET_LOCK, TRUE); + } + DelayCommand(0.0, NuiDestroy(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateDMWidgetNUI(oDM)); + } + else if(sElem == "btn_main_menu") + { + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMOptionsNUI(oDM)); + } + else if(sElem == "btn_camera") ai_SelectCameraView(oDM); + else if(sElem == "btn_inventory") ai_SelectOpenInventory(oDM); + else if(GetStringLeft(sElem, 13) == "btn_cmd_group") ai_DMSelectAction(oDM, sElem); + else if(GetStringLeft(sElem, 11) == "btn_plugin_") ai_Plugin_Execute(oDM, sElem, 1); + } + else if(sEvent == "watch") + { + if(sElem == "chbx_cmd_group1_check") ai_SetDMWidgetButtonToCheckbox(oDM, BTN_DM_CMD_GROUP1, nToken, sElem); + else if(sElem == "chbx_cmd_group2_check") ai_SetDMWidgetButtonToCheckbox(oDM, BTN_DM_CMD_GROUP2, nToken, sElem); + else if(sElem == "chbx_cmd_group3_check") ai_SetDMWidgetButtonToCheckbox(oDM, BTN_DM_CMD_GROUP3, nToken, sElem); + else if(sElem == "chbx_cmd_group4_check") ai_SetDMWidgetButtonToCheckbox(oDM, BTN_DM_CMD_GROUP4, nToken, sElem); + else if(sElem == "chbx_cmd_group5_check") ai_SetDMWidgetButtonToCheckbox(oDM, BTN_DM_CMD_GROUP5, nToken, sElem); + else if(sElem == "chbx_cmd_group6_check") ai_SetDMWidgetButtonToCheckbox(oDM, BTN_DM_CMD_GROUP6, nToken, sElem); + else if(sElem == "chbx_camera_check") ai_SetDMWidgetButtonToCheckbox(oDM, BTN_DM_CMD_CAMERA, nToken, sElem); + else if(sElem == "chbx_inventory_check") ai_SetDMWidgetButtonToCheckbox(oDM, BTN_DM_CMD_INVENTORY, nToken, sElem); + if(GetStringLeft(sElem, 12) == "chbx_plugin_" && GetStringRight(sElem, 6) == "_check") + { + int nIndex = StringToInt(GetSubString(sElem, 12, 1)); + json jPlugins = ai_GetCampaignDbJson("plugins", sName, AI_DM_TABLE); + json jPlugin = JsonArrayGet(jPlugins, nIndex); + int bCheck = JsonGetInt(NuiGetBind(oDM, nToken, sElem)); + jPlugin = JsonArraySet(jPlugin, 1, JsonBool(bCheck)); + jPlugins = JsonArraySet(jPlugins, nIndex, jPlugin); + ai_SetCampaignDbJson("plugins", jPlugins, sName, AI_DM_TABLE); + } + DelayCommand(0.0, NuiDestroy(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateDMWidgetNUI(oDM)); + } + else if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + if(nMouseScroll == 1.0) // Scroll up + { + if(GetStringLeft(sElem, 13) == "btn_cmd_group") ai_DMChangeMoveSpeed(oDM, sElem, 1); + } + if(nMouseScroll == -1.0) // Scroll down + { + if(GetStringLeft(sElem, 13) == "btn_cmd_group") ai_DMChangeMoveSpeed(oDM, sElem, 0); + } + } + else if(sEvent == "mousedown") + { + int nMouseButton = JsonGetInt(JsonObjectGet(NuiGetEventPayload(), "mouse_btn")); + if(nMouseButton == NUI_MOUSE_BUTTON_RIGHT) + { + if(GetStringLeft(sElem, 13) == "btn_cmd_group") + { + ai_SelectToGroup(oDM, sElem); + } + } + } + else if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + if(nMouseScroll == 1.0) // Scroll up + { + } + else if(nMouseScroll == -1.0) // Scroll down + { + } + } + } + //************************************************************************** + // Main AI events. + if(sWndId == "dm" + AI_MAIN_NUI) + { + if(sEvent == "click") + { + if(sElem == "btn_plugin_manager") + { + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMPluginManagerNUI(oDM)); + } + if(sElem == "btn_widget_manager") + { + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMWidgetManagerNUI(oDM)); + } + } + if(sEvent == "watch") + { + if(sElem == "txt_max_henchman") + { + int nMaxHenchmen = StringToInt(JsonGetString(NuiGetBind(oDM, nToken, sElem))); + if(nMaxHenchmen < 1) nMaxHenchmen = 1; + if(nMaxHenchmen > 12) + { + nMaxHenchmen = 12; + ai_SendMessages("The maximum henchmen for this mod is 12!", AI_COLOR_RED, oDM); + } + SetMaxHenchmen(nMaxHenchmen); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, AI_RULE_MAX_HENCHMAN, JsonInt(nMaxHenchmen)); + ai_SetCampaignDbJson("rules", jRules); + ai_SendMessages("Maximum henchmen has been changed to " + IntToString(nMaxHenchmen), AI_COLOR_YELLOW, oDM); + } + else if(sElem == "txt_ai_difficulty") + { + int nChance = StringToInt(JsonGetString(NuiGetBind(oDM, nToken, sElem))); + if(nChance < 0) nChance = 0; + else if(nChance > 100) nChance = 100; + SetLocalInt(GetModule(), AI_RULE_AI_DIFFICULTY, nChance); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, AI_RULE_AI_DIFFICULTY, JsonInt(nChance)); + ai_SetCampaignDbJson("rules", jRules); + } + else if(sElem == "txt_perception_distance") + { + float fDistance = StringToFloat(JsonGetString(NuiGetBind(oDM, nToken, sElem))); + if(fDistance < 10.0) fDistance = 10.0; + else if(fDistance > 60.0) fDistance = 60.0; + SetLocalFloat(GetModule(), AI_RULE_PERCEPTION_DISTANCE, fDistance); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, AI_RULE_PERCEPTION_DISTANCE, JsonFloat(fDistance)); + ai_SetCampaignDbJson("rules", jRules); + } + else if(sElem == "txt_inc_hp") + { + int nNumber = StringToInt(JsonGetString(NuiGetBind(oDM, nToken, sElem))); + if(nNumber < 0) nNumber = 0; + else if(nNumber > 100) nNumber = 100; + SetLocalInt(GetModule(), AI_INCREASE_MONSTERS_HP, nNumber); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, AI_INCREASE_MONSTERS_HP, JsonInt(nNumber)); + ai_SetCampaignDbJson("rules", jRules); + } + else if(GetStringLeft(sElem, 4) == "chbx") + { + object oModule = GetModule(); + int bCheck = JsonGetInt(NuiGetBind(oDM, nToken, sElem)); + json jRules = ai_GetCampaignDbJson("rules"); + if(sElem == "chbx_moral_check") + { + SetLocalInt(oModule, AI_RULE_MORAL_CHECKS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_MORAL_CHECKS, JsonInt(bCheck)); + } + else if(sElem == "chbx_buff_monsters_check") + { + SetLocalInt(oModule, AI_RULE_BUFF_MONSTERS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_BUFF_MONSTERS, JsonInt(bCheck)); + } + else if(sElem == "chbx_buff_summons_check") + { + SetLocalInt(oModule, AI_RULE_PRESUMMON, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_PRESUMMON, JsonInt(bCheck)); + } + else if(sElem == "chbx_ambush_monsters_check") + { + SetLocalInt(oModule, AI_RULE_AMBUSH, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_AMBUSH, JsonInt(bCheck)); + } + else if(sElem == "chbx_companions_check") + { + SetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_SUMMON_COMPANIONS, JsonInt(bCheck)); + } + else if(sElem == "chbx_advanced_movement_check") + { + SetLocalInt(oModule, AI_RULE_ADVANCED_MOVEMENT, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_ADVANCED_MOVEMENT, JsonInt(bCheck)); + } + else if(sElem == "chbx_ilr_check") + { + SetLocalInt(oModule, AI_RULE_ILR, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_ILR, JsonInt(bCheck)); + } + else if(sElem == "chbx_umd_check") + { + SetLocalInt(oModule, AI_RULE_ALLOW_UMD, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_ALLOW_UMD, JsonInt(bCheck)); + } + else if(sElem == "chbx_use_healingkits_check") + { + SetLocalInt(oModule, AI_RULE_HEALERSKITS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_HEALERSKITS, JsonInt(bCheck)); + } + else if(sElem == "chbx_perm_assoc_check") + { + SetLocalInt(oModule, AI_RULE_PERM_ASSOC, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_PERM_ASSOC, JsonInt(bCheck)); + } + else if(sElem == "chbx_corpses_stay_check") + { + SetLocalInt(oModule, AI_RULE_CORPSES_STAY, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_CORPSES_STAY, JsonInt(bCheck)); + } + else if(sElem == "chbx_wander_check") + { + SetLocalInt(oModule, AI_RULE_WANDER, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_CORPSES_STAY, JsonInt(bCheck)); + } + else if(sElem == "chbx_open_doors_check") + { + SetLocalInt(oModule, AI_RULE_OPEN_DOORS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_OPEN_DOORS, JsonInt(bCheck)); + } + else if(sElem == "chbx_party_scale_check") + { + if(bCheck) + { + SetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP, GetModuleXPScale()); + ai_CheckXPPartyScale(oDM); + } + else + { + SetModuleXPScale(GetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE)); + } + SetLocalInt(oModule, AI_RULE_PARTY_SCALE, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_PARTY_SCALE, JsonInt(bCheck)); + string sText = IntToString(GetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP)); + NuiSetBind(oDM, nToken, "chbx_party_scale_tooltip", JsonString(" PEPS adjusts your XP based on party size from (" + sText + ").")); + sText = IntToString(GetModuleXPScale()); + NuiSetBind(oDM, nToken, "txt_xp_scale", JsonString(sText)); + } + else if(sElem == "chbx_darkness_check") + { + if(bCheck) + { + jRules = ai_AddRestrictedSpell(jRules, SPELL_DARKNESS); + jRules = ai_AddRestrictedSpell(jRules, 159); + jRules = ai_AddRestrictedSpell(jRules, SPELLABILITY_AS_DARKNESS); + jRules = ai_AddRestrictedSpell(jRules, 688); // WildShape_Darkness + } + else + { + jRules = ai_AddRestrictedSpell(jRules, SPELL_DARKNESS, FALSE); + jRules = ai_AddRestrictedSpell(jRules, 159, FALSE); + jRules = ai_AddRestrictedSpell(jRules, SPELLABILITY_AS_DARKNESS, FALSE); + jRules = ai_AddRestrictedSpell(jRules, 688, FALSE); // WildShape_Darkness + } + } + else if(sElem == "chbx_dispels_check") + { + if(bCheck) + { + jRules = ai_AddRestrictedSpell(jRules, SPELL_LESSER_DISPEL); + jRules = ai_AddRestrictedSpell(jRules, SPELL_DISPEL_MAGIC); + jRules = ai_AddRestrictedSpell(jRules, SPELL_GREATER_DISPELLING); + jRules = ai_AddRestrictedSpell(jRules, SPELL_MORDENKAINENS_DISJUNCTION); + } + else + { + jRules = ai_AddRestrictedSpell(jRules, SPELL_LESSER_DISPEL, FALSE); + jRules = ai_AddRestrictedSpell(jRules, SPELL_DISPEL_MAGIC, FALSE); + jRules = ai_AddRestrictedSpell(jRules, SPELL_GREATER_DISPELLING, FALSE); + jRules = ai_AddRestrictedSpell(jRules, SPELL_MORDENKAINENS_DISJUNCTION, FALSE); + } + } + else if(sElem == "chbx_timestop_check") + { + if(bCheck) jRules = ai_AddRestrictedSpell(jRules, SPELL_TIME_STOP); + else jRules = ai_AddRestrictedSpell(jRules, SPELL_TIME_STOP, FALSE); + } + ai_SetCampaignDbJson("rules", jRules); + } + } + else if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + if(nMouseScroll == 1.0) // Scroll up + { + // Follow range is only changed on non-pc's + if(sElem == "lbl_perc_dist") ai_RulePercDistInc(oDM, GetModule(), 1, nToken); + } + else if(nMouseScroll == -1.0) // Scroll down + { + // Follow range is only changed on non-pc's + if(sElem == "lbl_perc_dist") ai_RulePercDistInc(oDM, GetModule(), -1, nToken); + } + } + } + //************************************************************************** + // Plugins events. + if(sWndId == "dmai_plugin_nui") + { + string sName = ai_RemoveIllegalCharacters(GetName(oDM)); + json jPlugins = ai_GetCampaignDbJson("plugins"); + if(sEvent == "click") + { + if(sElem == "btn_load_plugins") + { + string sScript = JsonGetString(NuiGetBind (oDM, nToken, "txt_plugin")); + if(JsonGetType(JsonArrayGet(jPlugins, 0)) == JSON_TYPE_NULL) jPlugins = JsonArray(); + jPlugins = ai_Plugin_Add(oDM, jPlugins, "pi_buffing"); + jPlugins = ai_Plugin_Add(oDM, jPlugins, "pi_forcerest"); + jPlugins = ai_Plugin_Add(oDM, jPlugins, "pi_henchmen"); + jPlugins = ai_Plugin_Add(oDM, jPlugins, "pi_crafting"); + jPlugins = ai_Plugin_Add(oDM, jPlugins, "pi_mod_set"); + jPlugins = ai_Plugin_Add(oDM, jPlugins, "pi_debug"); + jPlugins = ai_Plugin_Add(oDM, jPlugins, "pi_test"); + ai_SetCampaignDbJson("plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMPluginManagerNUI(oDM)); + DelayCommand(0.0, NuiDestroy(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateDMWidgetNUI(oDM)); + } + if(sElem == "btn_check_plugins") + { + int nIndex; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + jPlugin = JsonArraySet(jPlugin, 1, JsonBool(TRUE)); + jPlugins = JsonArraySet(jPlugins, nIndex, jPlugin); + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + ai_SetCampaignDbJson("plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMPluginManagerNUI(oDM)); + DelayCommand(0.0, NuiDestroy(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateDMWidgetNUI(oDM)); + } + if(sElem == "btn_clear_plugins") + { + int nIndex; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + jPlugin = JsonArraySet(jPlugin, 1, JsonBool(FALSE)); + jPlugins = JsonArraySet(jPlugins, nIndex, jPlugin); + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + ai_SetCampaignDbJson("plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMPluginManagerNUI(oDM)); + DelayCommand(0.0, NuiDestroy(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateDMWidgetNUI(oDM)); + } + else if(sElem == "btn_add_plugin") + { + string sScript = JsonGetString(NuiGetBind (oDM, nToken, "txt_plugin")); + if(JsonGetType(JsonArrayGet(jPlugins, 0)) == JSON_TYPE_NULL) jPlugins = JsonArray(); + jPlugins = ai_Plugin_Add(oDM, jPlugins, sScript); + ai_SetCampaignDbJson("plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMPluginManagerNUI(oDM)); + } + else if(GetStringLeft(sElem, 18) == "btn_remove_plugin_") + { + int nIndex = StringToInt(GetStringRight(sElem, 1)); + jPlugins = JsonArrayDel(jPlugins, nIndex); + ai_SetCampaignDbJson("plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMPluginManagerNUI(oDM)); + DelayCommand(0.0, NuiDestroy(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateDMWidgetNUI(oDM)); + } + else if(GetStringLeft(sElem, 11) == "btn_plugin_") ai_Plugin_Execute(oDM, sElem, 2); + } + else if(sEvent == "watch") + { + if(GetStringLeft(sElem, 12) == "chbx_plugin_" && GetStringRight(sElem, 6) == "_check") + { + int nIndex = StringToInt(GetSubString(sElem, 12, 1)); + json jPlugin = JsonArrayGet(jPlugins, nIndex); + int bCheck = JsonGetInt(NuiGetBind(oDM, nToken, sElem)); + jPlugin = JsonArraySet(jPlugin, 1, JsonBool(bCheck)); + jPlugins = JsonArraySet(jPlugins, nIndex, jPlugin); + ai_SetCampaignDbJson("plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateDMWidgetNUI(oDM)); + } + } + } + if(sWndId == "dm_widget_manager_nui") + { + //SendMessageToDM(oDM, "sEvent: " + sEvent + " sElem: " + sElem); + if(sEvent == "click") + { + if(sElem == "btn_clear_buttons") + { + object oModule = GetModule(); + SetLocalInt(oModule, sDMWidgetAccessVarname, 0); + SetLocalInt(oModule, sDMAIAccessVarname, 0); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, sDMWidgetAccessVarname, JsonInt(0)); + jRules = JsonObjectSet(jRules, sDMAIAccessVarname, JsonInt(0)); + ai_SetCampaignDbJson("rules", jRules); + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMWidgetManagerNUI(oDM)); + return; + } + else if(sElem == "btn_check_buttons") + { + object oModule = GetModule(); + SetLocalInt(oModule, sDMWidgetAccessVarname, 7340028); + SetLocalInt(oModule, sDMAIAccessVarname, 203423743); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, sDMWidgetAccessVarname, JsonInt(7340028)); + jRules = JsonObjectSet(jRules, sDMAIAccessVarname, JsonInt(203423743)); + ai_SetCampaignDbJson("rules", jRules); + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMWidgetManagerNUI(oDM)); + return; + } + SetLocalInt(oDM, "CHBX_SKIP", TRUE); + DelayCommand(2.0, DeleteLocalInt(oDM, "CHBX_SKIP")); + if(sElem == "btn_cmd_action") NuiSetBind(oDM, nToken, "chbx_cmd_action_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_ACTION))); + else if(sElem == "btn_cmd_guard") NuiSetBind(oDM, nToken, "chbx_cmd_guard_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_GUARD))); + else if(sElem == "btn_cmd_hold") NuiSetBind(oDM, nToken, "chbx_cmd_hold_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_HOLD))); + else if(sElem == "btn_cmd_attack") NuiSetBind(oDM, nToken, "chbx_cmd_attack_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_ATTACK))); + else if(sElem == "btn_cmd_follow") NuiSetBind(oDM, nToken, "chbx_cmd_follow_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_FOLLOW))); + else if(sElem == "btn_follow_target") NuiSetBind(oDM, nToken, "chbx_follow_target_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_FOLLOW_TARGET))); + else if(sElem == "btn_cmd_search") NuiSetBind(oDM, nToken, "chbx_cmd_search_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_SEARCH))); + else if(sElem == "btn_cmd_stealth") NuiSetBind(oDM, nToken, "chbx_cmd_stealth_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_STEALTH))); + else if(sElem == "btn_cmd_ai_script") NuiSetBind(oDM, nToken, "chbx_cmd_ai_script_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_AI_SCRIPT))); + else if(sElem == "btn_cmd_place_trap") NuiSetBind(oDM, nToken, "chbx_cmd_place_trap_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_PLACE_TRAP))); + else if(sElem == "btn_quick_widget") NuiSetBind(oDM, nToken, "chbx_quick_widget_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_SPELL_WIDGET))); + else if(sElem == "btn_spell_memorize") NuiSetBind(oDM, nToken, "chbx_spell_memorize_check", JsonBool(!ai_GetDMWAccessButton(BTN_DM_CMD_MEMORIZE))); + else if(sElem == "btn_buff_short") NuiSetBind(oDM, nToken, "chbx_buff_short_check", JsonBool(!ai_GetDMWAccessButton(BTN_BUFF_SHORT))); + else if(sElem == "btn_buff_long") NuiSetBind(oDM, nToken, "chbx_buff_long_check", JsonBool(!ai_GetDMWAccessButton(BTN_BUFF_LONG))); + else if(sElem == "btn_buff_all") NuiSetBind(oDM, nToken, "chbx_buff_all_check", JsonBool(!ai_GetDMWAccessButton(BTN_BUFF_ALL))); + else if(sElem == "btn_buff_rest") NuiSetBind(oDM, nToken, "chbx_buff_rest_check", JsonBool(!ai_GetDMWAccessButton(BTN_BUFF_REST))); + else if(sElem == "btn_jump_to") NuiSetBind(oDM, nToken, "chbx_jump_to_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_JUMP_TO))); + else if(sElem == "btn_ghost_mode") NuiSetBind(oDM, nToken, "chbx_ghost_mode_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_GHOST_MODE))); + else if(sElem == "btn_camera") NuiSetBind(oDM, nToken, "chbx_camera_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_CAMERA))); + else if(sElem == "btn_inventory") NuiSetBind(oDM, nToken, "chbx_inventory_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_INVENTORY))); + else if(sElem == "btn_familiar") NuiSetBind(oDM, nToken, "chbx_familiar_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_FAMILIAR))); + else if(sElem == "btn_companion") NuiSetBind(oDM, nToken, "chbx_companion_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_COMPANION))); + else if(sElem == "btn_ai") NuiSetBind(oDM, nToken, "chbx_ai_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_FOR_PC))); + else if(sElem == "btn_quiet") NuiSetBind(oDM, nToken, "chbx_quiet_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_REDUCE_SPEECH))); + else if(sElem == "btn_ranged") NuiSetBind(oDM, nToken, "chbx_ranged_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_USE_RANGED))); + else if(sElem == "btn_search") NuiSetBind(oDM, nToken, "chbx_search_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_USE_SEARCH))); + else if(sElem == "btn_stealth") NuiSetBind(oDM, nToken, "chbx_stealth_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_USE_STEALTH))); + else if(sElem == "btn_open_door") NuiSetBind(oDM, nToken, "chbx_open_door_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_OPEN_DOORS))); + else if(sElem == "btn_traps") NuiSetBind(oDM, nToken, "chbx_traps_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_REMOVE_TRAPS))); + else if(sElem == "btn_pick_locks") NuiSetBind(oDM, nToken, "chbx_pick_locks_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_PICK_LOCKS))); + else if(sElem == "btn_bash_locks") NuiSetBind(oDM, nToken, "chbx_bash_locks_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_BASH_LOCKS))); + else if(sElem == "btn_magic_level") NuiSetBind(oDM, nToken, "chbx_magic_level_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_MAGIC_LEVEL))); + else if(sElem == "btn_spontaneous") NuiSetBind(oDM, nToken, "chbx_spontaneous_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_NO_SPONTANEOUS))); + else if(sElem == "btn_magic") NuiSetBind(oDM, nToken, "chbx_magic_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_NO_MAGIC_USE))); + else if(sElem == "btn_magic_items") NuiSetBind(oDM, nToken, "chbx_magic_items_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_NO_MAGIC_ITEM_USE))); + else if(sElem == "btn_def_magic") NuiSetBind(oDM, nToken, "chbx_def_magic_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_DEF_MAGIC_USE))); + else if(sElem == "btn_off_magic") NuiSetBind(oDM, nToken, "chbx_off_magic_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_OFF_MAGIC_USE))); + else if(sElem == "btn_heal_out") NuiSetBind(oDM, nToken, "chbx_heal_out_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_HEAL_OUT))); + else if(sElem == "btn_heal_in") NuiSetBind(oDM, nToken, "chbx_heal_in_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_HEAL_IN))); + else if(sElem == "btn_heals_onoff") NuiSetBind(oDM, nToken, "chbx_heals_onoff_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_STOP_SELF_HEALING))); + else if(sElem == "btn_healp_onoff") NuiSetBind(oDM, nToken, "chbx_healp_onoff_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_STOP_PARTY_HEALING))); + else if(sElem == "btn_loot") NuiSetBind(oDM, nToken, "chbx_loot_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_LOOT))); + else if(sElem == "btn_ignore_assoc") NuiSetBind(oDM, nToken, "chbx_ignore_assoc_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_IGNORE_ASSOCIATES))); + else if(sElem == "btn_ignore_traps") NuiSetBind(oDM, nToken, "chbx_ignore_traps_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_IGNORE_TRAPS))); + else if(sElem == "btn_perc_range") NuiSetBind(oDM, nToken, "chbx_perc_range_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_PERC_RANGE))); + } + if(sEvent == "watch") + { + if(GetLocalInt(oDM, "CHBX_SKIP")) return; + if(sElem == "chbx_cmd_action_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_ACTION, nToken, sElem); + else if(sElem == "chbx_cmd_guard_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_GUARD, nToken, sElem); + else if(sElem == "chbx_cmd_hold_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_HOLD, nToken, sElem); + else if(sElem == "chbx_cmd_attack_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_ATTACK, nToken, sElem); + else if(sElem == "chbx_cmd_follow_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_FOLLOW, nToken, sElem); + else if(sElem == "chbx_follow_target_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_FOLLOW_TARGET, nToken, sElem); + else if(sElem == "chbx_cmd_search_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_SEARCH, nToken, sElem); + else if(sElem == "chbx_cmd_stealth_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_STEALTH, nToken, sElem); + else if(sElem == "chbx_cmd_ai_script_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_AI_SCRIPT, nToken, sElem); + else if(sElem == "chbx_cmd_place_trap_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_PLACE_TRAP, nToken, sElem); + else if(sElem == "chbx_quick_widget_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_SPELL_WIDGET, nToken, sElem); + else if(sElem == "chbx_spell_memorize_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_DM_CMD_MEMORIZE, nToken, sElem); + else if(sElem == "chbx_buff_short_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_BUFF_SHORT, nToken, sElem); + else if(sElem == "chbx_buff_long_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_BUFF_LONG, nToken, sElem); + else if(sElem == "chbx_buff_all_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_BUFF_ALL, nToken, sElem); + else if(sElem == "chbx_buff_rest_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_BUFF_REST, nToken, sElem); + else if(sElem == "chbx_jump_to_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_JUMP_TO, nToken, sElem); + else if(sElem == "chbx_ghost_mode_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_GHOST_MODE, nToken, sElem); + else if(sElem == "chbx_camera_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_CAMERA, nToken, sElem); + else if(sElem == "chbx_inventory_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_INVENTORY, nToken, sElem); + else if(sElem == "chbx_familiar_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_FAMILIAR, nToken, sElem); + else if(sElem == "chbx_companion_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_COMPANION, nToken, sElem); + else if(sElem == "chbx_ai_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_FOR_PC, nToken, sElem); + else if(sElem == "chbx_quiet_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_REDUCE_SPEECH, nToken, sElem); + else if(sElem == "chbx_ranged_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_USE_RANGED, nToken, sElem); + else if(sElem == "chbx_search_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_USE_SEARCH, nToken, sElem); + else if(sElem == "chbx_stealth_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_USE_STEALTH, nToken, sElem); + else if(sElem == "chbx_open_door_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_OPEN_DOORS, nToken, sElem); + else if(sElem == "chbx_traps_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_REMOVE_TRAPS, nToken, sElem); + else if(sElem == "chbx_pick_locks_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_PICK_LOCKS, nToken, sElem); + else if(sElem == "chbx_bash_locks_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_BASH_LOCKS, nToken, sElem); + else if(sElem == "chbx_magic_level_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_MAGIC_LEVEL, nToken, sElem); + else if(sElem == "chbx_spontaneous_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_NO_SPONTANEOUS, nToken, sElem); + else if(sElem == "chbx_magic_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_NO_MAGIC_USE, nToken, sElem); + else if(sElem == "chbx_magic_items_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_NO_MAGIC_ITEM_USE, nToken, sElem); + else if(sElem == "chbx_def_magic_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_DEF_MAGIC_USE, nToken, sElem); + else if(sElem == "chbx_off_magic_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_OFF_MAGIC_USE, nToken, sElem); + else if(sElem == "chbx_heal_out_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_HEAL_OUT, nToken, sElem); + else if(sElem == "chbx_heal_in_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_HEAL_IN, nToken, sElem); + else if(sElem == "chbx_heals_onoff_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_STOP_SELF_HEALING, nToken, sElem); + else if(sElem == "chbx_healp_onoff_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_STOP_PARTY_HEALING, nToken, sElem); + else if(sElem == "chbx_loot_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_LOOT, nToken, sElem); + else if(sElem == "chbx_ignore_assoc_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_IGNORE_ASSOCIATES, nToken, sElem); + else if(sElem == "chbx_ignore_traps_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_IGNORE_TRAPS, nToken, sElem); + else if(sElem == "chbx_perc_range_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_PERC_RANGE, nToken, sElem); + } + } +} +void ai_SetDMWidgetButtonToCheckbox(object oDM, int nButton, int nToken, string sElem) +{ + int bCheck = JsonGetInt(NuiGetBind(oDM, nToken, sElem)); + ai_SetDMWidgetButton(oDM, nButton, bCheck); +} +void ai_SetDMWAccessButtonToCheckbox(object oDM, int nButton, int nToken, string sElem) +{ + int bCheck = JsonGetInt(NuiGetBind(oDM, nToken, sElem)); + ai_SetDMWAccessButton(nButton, bCheck); +} +void ai_SetDMAIAccessButtonToCheckbox(object oDM, int nButton, int nToken, string sElem) +{ + int bCheck = JsonGetInt(NuiGetBind(oDM, nToken, sElem)); + ai_SetDMAIAccessButton(nButton, bCheck); +} +void ai_RulePercDistInc(object oDM, object oModule, int nIncrement, int nToken) +{ + int nAdjustment = GetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE) + nIncrement; + if(nAdjustment < 8 || nAdjustment > 11) return; + SetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE, nAdjustment); + string sText; + if(nAdjustment == 8) sText = " Monster perception: Short [10 Sight / 10 Listen]"; + else if(nAdjustment == 9) sText = " Monster perception: Medium [20 Sight / 20 Listen]"; + else if(nAdjustment == 10) sText = " Monster perception: Long [35 Sight / 20 Listen]"; + else sText = " Monster perception: Default [Monster's default values]"; + NuiSetBind(oDM, nToken, "lbl_perc_dist_label", JsonString(sText)); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, AI_RULE_MON_PERC_DISTANCE, JsonInt(nAdjustment)); + ai_SetCampaignDbJson("rules", jRules); +} +json ai_AddRestrictedSpell(json jRules, int nSpell, int bRestrict = TRUE) +{ + object oModule = GetModule(); + json jRSpells = GetLocalJson(oModule, AI_RULE_RESTRICTED_SPELLS); + int nIndex, nMaxIndex = JsonGetLength(jRSpells); + if(bRestrict) + { + while(nIndex < nMaxIndex) + { + if(JsonGetInt(JsonArrayGet(jRSpells, nIndex)) == nSpell) return jRules; + nIndex++; + } + jRSpells = JsonArrayInsert(jRSpells, JsonInt(nSpell)); + } + else + { + while(nIndex < nMaxIndex) + { + if(JsonGetInt(JsonArrayGet(jRSpells, nIndex)) == nSpell) + { + jRSpells = JsonArrayDel(jRSpells, nIndex); + break; + } + nIndex++; + } + } + SetLocalJson(oModule, AI_RULE_RESTRICTED_SPELLS, jRSpells); + return JsonObjectSet(jRules, AI_RULE_RESTRICTED_SPELLS, jRSpells); +} +void ai_SelectToGroup(object oDM, string sElem) +{ + string sGroup = GetStringRight(sElem, 1); + SetLocalString(oDM, AI_TARGET_MODE, "DM_SELECT_GROUP" + sGroup); + ai_SendMessages("Select a creature to add to group " + sGroup + ". Selecting yourself will clear group1.", AI_COLOR_YELLOW, oDM); + EnterTargetingMode(oDM, OBJECT_TYPE_CREATURE, MOUSECURSOR_PICKUP, MOUSECURSOR_PICKUP_DOWN); +} +void ai_DMSelectAction(object oDM, string sElem) +{ + string sGroup = GetStringRight(sElem, 1); + SetLocalString(oDM, AI_TARGET_MODE, "DM_ACTION_GROUP" + sGroup); + ai_SendMessages(GetName(oDM) + " select an action for group" + sGroup + ".", AI_COLOR_YELLOW, oDM); + EnterTargetingMode(oDM, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); +} +void ai_DMChangeMoveSpeed(object oDM, string sElem, int nSpeed) +{ + string sGroup = GetStringRight(sElem, 1); + json jGroup = GetLocalJson(oDM, "DM_GROUP" + sGroup); + if(JsonGetType(jGroup) == JSON_TYPE_NULL) + { + ai_SendMessages("This group does not contain any creatures!", AI_COLOR_RED, oDM); + return; + } + jGroup = JsonArraySet(jGroup, 0, JsonInt(nSpeed)); + SetLocalJson(oDM, "DM_GROUP" + sGroup, jGroup); + object oLeader = GetObjectByUUID(JsonGetString(JsonArrayGet(jGroup, 1))); + string sName = GetName(oLeader); + string sText = " " + sName + "'s group"; + if(nSpeed == 0) sText += " [Walk]"; + else sText += " [Run]"; + NuiSetBind(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI), "btn_cmd_group" + sGroup + "_tooltip", JsonString(sText)); + NuiSetBind(oDM, NuiFindWindow(oDM, "dm" + AI_COMMAND_NUI), "btn_cmd_group" + sGroup + "_tooltip", JsonString(sText)); +} diff --git a/src/module/nss/0e_onclientload.nss b/src/module/nss/0e_onclientload.nss new file mode 100644 index 0000000..041d49f --- /dev/null +++ b/src/module/nss/0e_onclientload.nss @@ -0,0 +1,23 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_onclientload + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnClientLoad script; + This will fire when the client is loading. + + If you have your own OnClientLoad event script just take the below + script lines and add them into your OnClientLoad script. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_menus_dm" +#include "0i_module" +void main() +{ + object oCreature = OBJECT_SELF; + // This can be moved to the OnClientLoad script event of your module. + if(ai_GetIsCharacter(oCreature)) ai_CheckPCStart(oCreature); + // If this is a server you can add this as well. + else if(AI_SERVER && (GetIsDM(oCreature) || GetIsPlayerDM(oCreature))) + { + ai_CheckPCStart(oCreature); + } +} diff --git a/src/module/nss/0e_player_target.nss b/src/module/nss/0e_player_target.nss new file mode 100644 index 0000000..16b83fb --- /dev/null +++ b/src/module/nss/0e_player_target.nss @@ -0,0 +1,154 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: 0e_player_target + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + OnPlayerTarget event script + Used to allow player targeting while passing any module player targeting + script through to work as intended. + + We Use a string variable upon the player using the targeting mode to define the + action of the target. + AI_TARGET_MODE is the constant used. + AI_TARGET_ASSOCIATE is the associate that triggered the target mode. +/*////////////////////////////////////////////////////////////////////////////// +#include "0i_player_target" +void main() +{ + object oPC = GetLastPlayerToSelectTarget(); + // Get any plugin target scripts and run it instead of this one. + string sPluginTargetScript = GetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT); + if(sPluginTargetScript != "") + { + DeleteLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT); + ExecuteScript(sPluginTargetScript, oPC); + // Remove the plugin script as it must be set each time the plugin uses the target event. + } + else + { + // Get the targeting mode data + object oTarget = GetTargetingModeSelectedObject(); + vector vTarget = GetTargetingModeSelectedPosition(); + location lLocation = Location(GetArea(oPC), vTarget, GetFacing(oPC)); + object oAssociate = GetLocalObject(oPC, AI_TARGET_ASSOCIATE); + string sTargetMode = GetLocalString(oPC, AI_TARGET_MODE); + // ********************* Exiting Target Actions ************************ + // If the user manually exited targeting mode without selecting a target, return + if(!GetIsObjectValid(oTarget) && vTarget == Vector()) + { + if(sTargetMode == "ASSOCIATE_ACTION_ALL") + { + ai_SendMessages("You have exited selecting an action for the party.", AI_COLOR_YELLOW, oPC); + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + if(GetLocalInt(oPC, sGhostModeVarname)) ai_OriginalRemoveAllActionMode(oPC); + } + else ai_RemoveAllActionMode(oPC); + } + else if(sTargetMode == "ASSOCIATE_ACTION") + { + ai_SendMessages("You have exited selecting an action for " + GetName(oAssociate) + ".", AI_COLOR_YELLOW, oPC); + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + if(GetLocalInt(oPC, sGhostModeVarname)) + { + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + } + else + { + ai_SetAIMode(oAssociate, AI_MODE_COMMANDED, FALSE); + if(ai_GetAIMode(oPC, AI_MODE_ACTION_GHOST) && !ai_GetAIMode(oPC, AI_MODE_GHOST) && + GetLocalInt(oAssociate, sGhostModeVarname)) + { + + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + ExecuteScript("nw_ch_ac1", oAssociate); + } + } + else if(sTargetMode == "ASSOCIATE_GET_TRAP") + { + ai_SendMessages(GetName(oAssociate) + " has exited selecing a trap!", AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "ASSOCIATE_PLACE_TRAP") + { + ai_SendMessages(GetName(oAssociate) + " has exited placing the trap!", AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "DM_SELECT_CAMERA_VIEW") + { + AttachCamera(oPC, oPC); + ai_SendMessages(GetName(oPC) + " has defaulted camera view back to the player!", AI_COLOR_YELLOW, oPC); + } + return; + } + // ************************* Targeted Actions ************************** + else + { + // This action makes an associates move to vTarget. + if(sTargetMode == "ASSOCIATE_ACTION_ALL") + { + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + ai_OriginalActionAllAssociates(oPC, oTarget, lLocation); + } + else ai_ActionAllAssociates(oPC, oTarget, lLocation); + } + else if(sTargetMode == "ASSOCIATE_ACTION") + { + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + AssignCommand(oAssociate, ai_OriginalActionAssociate(oPC, oTarget, lLocation)); + } + else AssignCommand(oAssociate, ai_ActionAssociate(oPC, oTarget, lLocation)); + } + else if(sTargetMode == "ASSOCIATE_FOLLOW_TARGET") ai_SelectFollowTarget(oPC, oAssociate, oTarget); + else if(sTargetMode == "ASSOCIATE_GET_TRAP") ai_SelectTrap(oPC, oAssociate, oTarget); + else if(sTargetMode == "ASSOCIATE_PLACE_TRAP") AssignCommand(oAssociate, ai_PlaceTrap(oPC, lLocation)); + else if(sTargetMode == "ASSOCIATE_USE_ITEM") + { + if(oTarget == GetArea(oPC)) oTarget = OBJECT_INVALID; + ai_UseWidgetItem(oPC, oAssociate, oTarget, lLocation); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + } + else if(sTargetMode == "ASSOCIATE_USE_FEAT") + { + if(oTarget == GetArea(oPC)) oTarget = OBJECT_INVALID; + ai_UseWidgetFeat(oPC, oAssociate, oTarget, lLocation); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + } + else if(sTargetMode == "ASSOCIATE_CAST_SPELL") + { + if(oTarget == GetArea(oPC)) oTarget = OBJECT_INVALID; + ai_CastWidgetSpell(oPC, oAssociate, oTarget, lLocation); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + } + else if(sTargetMode == "DM_SELECT_CAMERA_VIEW") + { + AttachCamera(oPC, oTarget); + ai_SendMessages(GetName(oPC) + " has changed the camera view to " + GetName(oTarget) + ".", AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "DM_SELECT_OPEN_INVENTORY") + { + if(LineOfSightObject(oPC, oTarget)) + { + OpenInventory(oTarget, oPC); + ai_SendMessages("You have opened the inventory of "+ GetName(oTarget) + ".", AI_COLOR_YELLOW, oPC); + } + else ai_SendMessages(GetName(oTarget) + " is not in your line of sight!", AI_COLOR_YELLOW, oPC); + } + else if(GetStringLeft(sTargetMode, 15) == "DM_SELECT_GROUP") + { + ai_AddToGroup(oPC, oTarget, sTargetMode); + } + else if(GetStringLeft(sTargetMode, 15) == "DM_ACTION_GROUP") + { + ai_DMAction(oPC, oTarget, lLocation, sTargetMode); + } + // Get saved module player target script and execute it for pass through compatibility. + string sModuleTargetScript = GetLocalString(GetModule(), AI_MODULE_TARGET_EVENT); + ExecuteScript(sModuleTargetScript); + } + } +} diff --git a/src/module/nss/0e_prc_ch_events.nss b/src/module/nss/0e_prc_ch_events.nss new file mode 100644 index 0000000..3028e9c --- /dev/null +++ b/src/module/nss/0e_prc_ch_events.nss @@ -0,0 +1,78 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0e_prc_ch_events +//////////////////////////////////////////////////////////////////////////////// + associate event handler while using the PRC. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +#include "x0_i0_assoc" +void main() +{ + object oCreature = OBJECT_SELF; + int nEvent = GetCurrentlyRunningEvent(); + //WriteTimestampedLogEntry("0e_prc_ch_events [13] " + GetName(oCreature) + " nEvent: " + IntToString(nEvent)); + switch (nEvent) + { + case EVENT_SCRIPT_CREATURE_ON_HEARTBEAT: + { + if(GetLocalInt(oCreature, "CohortID")) ExecuteScript("prc_ai_coh_hb"); + ExecuteScript("nw_ch_ac1", oCreature); + ExecuteScript("prc_npc_hb", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_NOTICE: + { + ExecuteScript("nw_ch_ac2", oCreature); + ExecuteScript("prc_npc_percep", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_DIALOGUE: + { + //if(GetLocalInt(oCreature, "CohortID")) ExecuteScript("prc_ai_coh_conv"); + ExecuteScript("nw_ch_ac4", oCreature); + //ExecuteScript("prc_npc_conv", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED: + { + ExecuteScript("nw_ch_ac5", oCreature); + ExecuteScript("prc_npc_physatt", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_DAMAGED: + { + ExecuteScript("nw_ch_ac6", oCreature); + ExecuteScript("prc_npc_damaged", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT: + { + ExecuteScript("nw_ch_acb", oCreature); + ExecuteScript("prc_npc_spellat", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND: + { + ExecuteScript("nw_ch_ac3", oCreature); + ExecuteScript("prc_npc_combat", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR: + { + ExecuteScript("nw_ch_ace", oCreature); + ExecuteScript("prc_npc_blocked", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_RESTED: + { + ExecuteScript("nw_ch_aca", oCreature); + //ExecuteScript("prc_npc_rested", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_DISTURBED: + { + ExecuteScript("nw_ch_ac8", oCreature); + ExecuteScript("prc_npc_disturb", oCreature); + break; + } + } +} diff --git a/src/module/nss/0i_actions.nss b/src/module/nss/0i_actions.nss new file mode 100644 index 0000000..7d7d2d7 --- /dev/null +++ b/src/module/nss/0i_actions.nss @@ -0,0 +1,2325 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_actions +////////////////////////////////////////////////////////////////////////////////////////////////////// + Include scripts for action in and out of combat. + + Detect Mode: + Passive(default) mode + * Trap detection radius: 5ft + * Trap detection rate: every 6 seconds + * Trap detection roll: d20 + 1/2 skill + * Spot/Listen roll: d10 + 1/2 skill + + Active(Detect) mode + * Trap detection radius: 10ft + * Trap detection rate: every 3 seconds + * Trap detection roll: d20 + skill + * Spot/Listen roll: d20 + skill + + Stealth checks + * Player detects stealth: 5 times per second. + * Player rolls for hide/move silently & spot/listen: every 6 seconds. + * NPC detects stealth: 4 seconds + * NPC rolls for hide/move silently & spot/listen: every 6 seconds. + + Listen/Move Silently: + * Cannot detect silenced creatures. + * Cannot detect sanctuaried creatures. + * Can only detect invisible (or when your blind) creatures within max attack range. + * Listen checks are made each round for success and failur. + * Outdoors: Objects between you and the target gives a +5 DC for every 40cm of thickness. + * Indoors: No Line of sight and the target is within 40 meters gives a +2 DC. + * +10 DC in combat for the target. + * +5 DC if the target is standing still. + * -5 DC if the listener is standing still. + * +1 DC for every 3 meters of distance to the target. + * Relative size modifiers for both: Tiny +8, Small +4, Medium 0, Larget -4, Huge -8. + * Favored enemy bonuses. + + Spot/Hide: + * Cannot spot invisible creatures. + * Cannot spot any creatures while blinded. + * Night time: Spotter has not light or darkvision +5 DC. + * Night time: Target has a light no them -10 DC. + * +5 DC if target is behind the spotter. + * +10 DC if the spotter are in combat. + * +5 DC if the target is standing still. + * -5 DC if the spotter is standing still. + * Relative size modifiers for both: Tiny +8, Small +4, Medium 0, Larget -4, Huge -8. + * Favored enemy bonuses. + +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_talents" +#include "x0_inc_henai" +#include "X0_I0_ANIMS" +// Chooses an action in combat and executes it for oCreature that is an associate. +void ai_DoAssociateCombatRound(object oCreature, object oTarget = OBJECT_INVALID); +// Sets variables and states for oAssociate to start combat. +void ai_StartAssociateCombat(object oAssociate, object oTarget = OBJECT_INVALID); +// Chooses an action in combat and executes it for oCreature that is a monster. +void ai_DoMonsterCombatRound(object oCreature); +// Sets variables and states for oMonster to start combat. +void ai_StartMonsterCombat(object oMonster); +// Return the distance that is set for how close we should follow our master. +float ai_GetFollowDistance(object oCreature); +// Returns TRUE if the caller's distance is greater than fDistance from who they +// are following. Unless they are cowardly or in stand ground mode. +// This will also force the caller to move towards them. +int ai_StayClose(object oCreature); +// Returns TRUE if oCreature becomes invisible or hides. +int ai_TryToBecomeInvisible(object oCreature); +// Returns TRUE if oCreature continues to bash a door. +int ai_BashDoorCheck(object oCreature); +// Returns TRUE if we find an hidden creature within battle and do an action. +// If oCreature is too far away they will run upto 14 meters of the invisible creature. +// If oCreature is close they will attempt to cast a spell or search for them. +// bMonster needs to be set for monsters otherwise we do associate perception checks. +// fRange is how close we want to get to hidden targets. +int ai_SearchForHiddenCreature(object oCreature, int bMonster, object oHidden = OBJECT_INVALID, float fRange = 1.0); +// Returns TRUE if oCreature fails a moral check. +// We only make moral checks once we are below AI_HEALTH_WOUNDED health percent. +// If we are at AI_HEALTH_BLOODY hp percent then add + AI_MORAL_INC_DC to the Check. +int ai_MoralCheck(object oCreature); +// Returns TRUE if oCreature is in and nSpell is a dangerous Area Of Effect. +// Used in the on spell cast at scripts. [nw_c2_defaultb and nw_ch_acb]. +int ai_GetInAOEReaction(object oCreature, object oCaster, int nSpell); +// Have the associate speak a random voice from VOICE_CHAT_*. +// nRoll is the number to roll. If nRoll is 0 then it will SpeakString(sVoiceChatArray); +// sVoiceChatArray is an array of VOICE_CHAT_* numbers over nRoll. +// example(4, ":3:4:8:7:") will roll a d4() picking from 3,4,8,7 of VOICE_CHAT_*. +// if nRoll is higher than the number of VOICE_CHAT_* then it will not speak. +void ai_HaveCreatureSpeak(object oCreature, int nRoll, string sVoiceChatArray, int bImportant = FALSE); +// Returns if a spell talent was used. +// This is a common set of AI scripts ran on associate spell casters. +int ai_CheckForAssociateSpellTalent(object oAssociate, int nInMelee, int nMaxLevel, int nRound = 0); +// Targets the best creature oCreature it can see. +// This checks all physcal attack talents starting with ranged attacks then melee. +// Using TALENT_CATEGORY_HARMFUL_MELEE [22] talents. +// If no talents are used it will do either a ranged attack or a melee attack. +void ai_DoPhysicalAttackOnBest(object oCreature, int nInMelee, int bAlwaysAtk = TRUE); +// Targets the nearest creature oCreature it can see. +// This checks all physcal attack talents starting with ranged attacks then melee. +// Using TALENT_CATEGORY_HARMFUL_MELEE [22] talents. +// If no talents are used it will do either a ranged attack or a melee attack. +void ai_DoPhysicalAttackOnNearest(object oCreature, int nInMelee, int bAlwaysAtk = TRUE); +// Targets the weakest creature oCreature can see. +// This checks all physcal attack talents starting with ranged attacks then melee. +// Using TALENT_CATEGORY_HARMFUL_MELEE [22] talents. +// If no talents are used it will do either a ranged attack or a melee attack. +void ai_DoPhysicalAttackOnLowestCR(object oCreature, int nInMelee, int bAlwaysAtk = TRUE); +// Returns TRUE if they equip a melee weapon, FALSE if they don't. +// This also calls for the next combat round. +int ai_InCombatEquipBestMeleeWeapon(object oCreature); +// Returns TRUE if they equip a ranged weapon, FALSE if they don't. +// This also calls for the next combat round. +int ai_InCombatEquipBestRangedWeapon(object oCreature); +// Action wrapper for ai_TryHealing. +void ai_ActionTryHealing(object oCreature, object oTarget); +// Returns TRUE if oCreature heals oTarget. +// This uses an action and must use AssignCommand or OBJECT_SELF is the caster! +int ai_TryHealing(object oCreature, object oTarget, int bForce = FALSE); +// oCreature will move into the area looking for creatures. +void ai_ScoutAhead(object oCreature); +// Have oCreature search one object, may continue from that object. +void ai_SearchObject(object oCreature, object oObject, object oMaster, int bOnce = FALSE); +// Returns TRUE if oCreature disarms oTrap. +// bForce if TRUE, oCreature will try to disarm the trap even if they have tried before. +int ai_ReactToTrap(object oCreature, object oTrap, int bForce = FALSE); +// Returns TRUE if oCreature opens oLocked object. +// This will make oCreature open oLocked either by picking or casting a spell. +// bForce if TRUE, oCreature will try to pick the lock even if they have tried before. +int ai_AttemptToByPassLock(object oCreature, object oLocked, int bForce = FALSE); +// Returns TRUE if oCreature opens oDoor. +// bForce if TRUE, oCreature will try to open the door even if they have tried before. +int ai_AttemptToOpenDoor(object oCreature, object oDoor, int bForce = FALSE); +// Action for Checking nearby objects for traps, locks and loot. +void ai_ActionCheckNearbyObjects(object oCreature); +// oCreature will check nearby objects and see what they should do based upon +// selected actions by the player. +int ai_CheckNearbyObjects(object oCreature); +// Used to determine special behaviors for oCeature. +void ai_DetermineSpecialBehavior(object oCreature); +// The target object flees to the specified way point and then destroys itself, +// to be respawned at a later point. For unkillable sign post characters +// who are not meant to fight back. +void ai_ActivateFleeToExit(object oCreature); +// Returns TRUE if oCreature should flee to an exit. +int ai_GetFleeToExit(object oCreature); +// Does random animation in a close distance for creatures. +void ai_AmbientAnimations(); + +void ai_DoAssociateCombatRound(object oCreature, object oTarget = OBJECT_INVALID) +{ + if(ai_StayClose(oCreature)) return; + // Is the target our Player has locked in dead? If so then clear it. + if(GetIsDead(GetLocalObject(oCreature, AI_PC_LOCKED_TARGET))) DeleteLocalObject(oCreature, AI_PC_LOCKED_TARGET); + // Setup the combat state for this round of combat. + object oNearestEnemy = ai_SetCombatState(oCreature); + // If we are in standground mode we only fight if the enemy is near us. + if(ai_GetAIMode(oCreature, AI_MODE_STAND_GROUND) && + ai_GetEnemyAttackingMe(oCreature) == OBJECT_INVALID) oNearestEnemy = OBJECT_INVALID; + // If we found an Enemy or we have a Target then continue into the combat round. + if(oNearestEnemy != OBJECT_INVALID || oTarget != OBJECT_INVALID) + { + // In combat we should stop searching. + if(GetActionMode(oCreature, ACTION_MODE_DETECT) && !GetHasFeat(FEAT_KEEN_SENSE)) + { + SetActionMode(oCreature, ACTION_MODE_DETECT, FALSE); + } + ai_SetCombatRound(oCreature); + string sAI = GetLocalString(oCreature, AI_COMBAT_SCRIPT); + if(AI_DEBUG) ai_Debug("0i_actions", "167", " AI not Coward/Peaceful: " + + IntToString(sAI != "ai_coward" && sAI != "ai_a_peaceful")); + // If we are using a normal AI script and are polymorphed we should use + // the polymorph AI script. + if(sAI != "ai_coward" && sAI != "ai_a_peaceful") + { + if(AI_DEBUG) ai_Debug("0i_actions", "173", "Should we use polymorph? " + + IntToString(GetAppearanceType(oCreature) != ai_GetNormalAppearance(oCreature))); + if(AI_DEBUG) + { + if(ai_GetIsHidden(oCreature)) + { + ai_Debug("0i_actions", "179", "We are hidden!" + + " Can they see us? " + IntToString(ai_GetNearestIndexThatSeesUs(oCreature))); + } + } + if(GetAppearanceType(oCreature) != ai_GetNormalAppearance(oCreature)) + { + sAI = "ai_a_polymorphed"; + } + else if(ai_GetIsHidden(oCreature) && !ai_GetNearestIndexThatSeesUs(oCreature)) sAI = "ai_a_invisible"; + } + if(sAI == "") sAI = "ai_a_default"; + if(AI_DEBUG) ai_Debug("0i_actions", "190", "********** " + GetName (oCreature) + " **********"); + if(AI_DEBUG) ai_Debug("0i_actions", "191", "********** " + sAI + " **********"); + ai_ClearCreatureActions(); + if(AI_DEBUG) ai_Counter_Start(); + // Execute this creatures AI routine. + ExecuteScript(sAI, oCreature); + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + " has finalized round action."); + return; + } + // We have exhausted our check for an enemy. Combat is over. + if(AI_DEBUG) ai_Debug("0i_actions", "200", "---------- " + GetName (OBJECT_SELF) + "'s combat has ended! ----------"); + ai_ClearCombatState(oCreature); + // Run the heartbeat script so we start doing our actions out of combat. + ExecuteScript("nw_ch_ac1", oCreature); +} +void ai_StartAssociateCombat(object oAssociate, object oTarget = OBJECT_INVALID) +{ + if(AI_DEBUG) ai_Debug("0i_actions", "217", "---------- " + GetName(oAssociate) + " is starting combat! ----------"); + ai_SetCreatureTalents(oAssociate, FALSE); + ai_CheckXPPartyScale(oAssociate); + ai_DoAssociateCombatRound(oAssociate, oTarget); +} +void ai_DoMonsterCombatRound(object oMonster) +{ + object oNearestEnemy = ai_SetCombatState(oMonster); + if(oNearestEnemy != OBJECT_INVALID) + { + if(GetActionMode(oMonster, ACTION_MODE_DETECT) && !GetHasFeat(FEAT_KEEN_SENSE, oMonster)) + SetActionMode(oMonster, ACTION_MODE_DETECT, FALSE); + ai_SetCombatRound(oMonster); + string sAI = GetLocalString(oMonster, AI_COMBAT_SCRIPT); + if(sAI != "ai_coward") + { + if(GetAppearanceType(oMonster) != ai_GetNormalAppearance(oMonster)) + { + sAI = "ai_polymorphed"; + } + else if(ai_GetIsHidden(oMonster) && !ai_GetNearestIndexThatSeesUs(oMonster)) sAI = "ai_invisible"; + } + if(sAI == "") sAI = "ai_default"; + if(AI_DEBUG) ai_Debug("0i_actions", "230", "********** " + GetName (oMonster) + " **********"); + if(AI_DEBUG) ai_Debug("0i_actions", "231", "********** " + sAI + " **********"); + // We clear actions here and setup multiple actions to the queue for oCreature. + ai_ClearCreatureActions(); + ai_Counter_Start(); + ExecuteScript(sAI, oMonster); + ai_Counter_End(GetName(oMonster) + " is ending round calculations."); + return; + } + // Check to see if we just didn't see the enemies. + if(GetLocalInt(oMonster, AI_ENEMY_NUMBERS) && + ai_SearchForHiddenCreature(oMonster, TRUE)) return; + // We have exhausted our check for an enemy. Combat is over. + ai_EndCombatRound(oMonster); + ai_ClearCombatState(oMonster); + // Run the heartbeat script so we start doing our actions out of combat. + ExecuteScript("nw_c2_default1", oMonster); + if(AI_DEBUG) ai_Debug("0i_actions", "247", GetName(oMonster) + "'s combat has ended!"); + return; +} +void ai_StartMonsterCombat(object oMonster) +{ + if(AI_DEBUG) ai_Debug("0i_actions", "264", "---------- " + GetName(oMonster) + " is starting combat! ----------"); + ai_SetCreatureTalents(oMonster, TRUE); + ai_DoMonsterCombatRound(oMonster); +} +float ai_GetFollowDistance(object oCreature) +{ + // Also check for size of creature and adjust based on that. + float fDistance = StringToFloat(Get2DAString("appearance", "PREFATCKDIST", GetAppearanceType(oCreature))); + return GetLocalFloat(oCreature, AI_FOLLOW_RANGE) + fDistance; +} +int ai_StayClose(object oCreature) +{ + if(ai_GetIsCharacter(oCreature) || + ai_GetAIMode(oCreature, AI_MODE_STAND_GROUND) || + GetLocalString(oCreature, AI_COMBAT_SCRIPT) == "ai_a_peaceful" || + GetLocalString(oCreature, AI_COMBAT_SCRIPT) == "ai_coward") return FALSE; + object oMaster = GetMaster(oCreature); + // We stay within our perception range of who we are following. + float fPerceptionDistance = GetLocalFloat(oCreature, AI_ASSOC_PERCEPTION_DISTANCE); + if(fPerceptionDistance == 0.0) + { + fPerceptionDistance = GetLocalFloat(oMaster, AI_ASSOC_PERCEPTION_DISTANCE); + if(fPerceptionDistance == 0.0) fPerceptionDistance = 20.0; + } + object oTarget = GetLocalObject(oCreature, AI_FOLLOW_TARGET); + if(oTarget == OBJECT_INVALID) oTarget = oMaster; + if(AI_DEBUG) ai_Debug("0i_associates", "214", "Distance from who we are following in combat." + + " oFollowing: " + FloatToString(GetDistanceBetween(oTarget, oCreature), 0, 2) + " fPerceptionDistance: " + FloatToString(fPerceptionDistance, 0, 2)); + if(GetDistanceBetween(oTarget, oCreature) < fPerceptionDistance) return FALSE; + ai_ClearCreatureActions(); + if(AI_DEBUG) ai_Debug("0i_associates", "218", "We are too far away! Move back to our master."); + ActionMoveToObject(oTarget, TRUE, ai_GetFollowDistance(oCreature)); + return TRUE; +} +int ai_TryToBecomeInvisible(object oCreature) +{ + // If we are invisible then we don't need to check this. + if(!ai_GetIsHidden(oCreature)) return FALSE; + // If we are not invisible lets try. + int nDarkness; + if(GetHasSpell(SPELL_DARKNESS, oCreature) && ai_GetHasEffectType(oCreature, EFFECT_TYPE_ULTRAVISION)) nDarkness = TRUE; + if(GetHasSpell(SPELL_IMPROVED_INVISIBILITY, oCreature) || GetHasSpell(SPELL_INVISIBILITY, oCreature) || + GetHasSpell(SPELL_INVISIBILITY_SPHERE, oCreature) ||(nDarkness) || + GetHasSpell(SPELL_SANCTUARY, oCreature) || GetHasSpell(SPELL_ETHEREALNESS, oCreature) || + GetHasSpell(799/*SPELLABILITY_VAMPIRE_INVISIBILITY*/) || + GetHasFeat(FEAT_HIDE_IN_PLAIN_SIGHT, oCreature) == TRUE) + { + // This bit ported directly from Jasperre + // Can anyone see me?(has spell effects of X) + // The point of this is to see if its even worthwhile to go invisbile + // or will it be immediately dispeled. + object oSeeMe = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oCreature, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_HAS_SPELL_EFFECT, SPELL_TRUE_SEEING); + if(oSeeMe == OBJECT_INVALID) + { + oSeeMe = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oCreature, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_HAS_SPELL_EFFECT, SPELL_SEE_INVISIBILITY); + } + if(oSeeMe == OBJECT_INVALID) + { + // Check non-invisibility options first. Since they can be used + // while near enemies. + if(GetHasFeat(FEAT_HIDE_IN_PLAIN_SIGHT, oCreature)) + { + // Go into stealth mode + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + if(AI_DEBUG) ai_Debug("0i_actions", "207", "Using HIDE_IN_PLAIN_SIGHT!"); + return TRUE; + } + if(nDarkness) + { + ai_SetLastAction(oCreature, SPELL_DARKVISION); + ActionCastSpellAtObject(SPELL_DARKVISION, oCreature); + return TRUE; + } + if(GetHasSpell(SPELL_ETHEREALNESS, oCreature)) + { + ai_SetLastAction(oCreature, SPELL_ETHEREALNESS); + ActionCastSpellAtObject(SPELL_ETHEREALNESS, oCreature); + return TRUE; + } + if(GetHasSpell(SPELL_SANCTUARY, oCreature)) + { + ai_SetLastAction(oCreature, SPELL_SANCTUARY); + ActionCastSpellAtObject(SPELL_SANCTUARY, oCreature); + return TRUE; + } + // Get the nearest Enemy and how close they are. + // Use this to keep invisibility from being spammed in melee. + object oEnemy = ai_GetNearestEnemy(oCreature); + if(GetDistanceBetween(oCreature, oEnemy) > AI_RANGE_MELEE) + { + if(GetHasSpell(SPELL_IMPROVED_INVISIBILITY, oCreature)) + { + ai_SetLastAction(oCreature, SPELL_IMPROVED_INVISIBILITY); + ActionCastSpellAtObject(SPELL_IMPROVED_INVISIBILITY, oCreature); + return TRUE; + } + if(GetHasSpell(SPELL_INVISIBILITY, oCreature)) + { + ai_SetLastAction(oCreature, SPELL_INVISIBILITY); + ActionCastSpellAtObject(SPELL_INVISIBILITY, oCreature); + return TRUE; + } + if(GetHasSpell(SPELL_INVISIBILITY_SPHERE, oCreature)) + { + ai_SetLastAction(oCreature, SPELL_INVISIBILITY_SPHERE); + ActionCastSpellAtObject(SPELL_INVISIBILITY_SPHERE, oCreature); + return TRUE; + } + if(GetHasSpell(799/*SPELLABILITY_VAMPIRE_INVISIBILITY*/, oCreature)) + { + ai_SetLastAction(oCreature, 799/*SPELLABILITY_VAMPIRE_INVISIBILITY*/); + ActionCastSpellAtObject(799/*SPELLABILITY_VAMPIRE_INVISIBILITY*/, oCreature); + return TRUE; + } + } + } + } + return FALSE; +} +int ai_SearchForHiddenCreature(object oCreature, int bMonster, object oInvisible = OBJECT_INVALID, float fRange = 1.0) +{ + if(AI_DEBUG) ai_Debug("0i_actions", "358", GetName(oCreature) + " is searching for an invisible creature (" + + GetName(oInvisible) + ")."); + if(oInvisible == OBJECT_INVALID) + { + // Have we seen anyone go invisible? + oInvisible = GetLocalObject(oCreature, AI_IS_INVISIBLE); + if(oInvisible == OBJECT_INVALID || GetIsDead(oInvisible)) + { + oInvisible = ai_GetNearestEnemy(oCreature, 1, 7, PERCEPTION_HEARD_AND_NOT_SEEN); + if(oInvisible == OBJECT_INVALID) oInvisible = ai_GetNearestEnemy(oCreature); + } + } + float fPerceptionDistance, fDistance; + if(bMonster) + { + GetDistanceBetween(oCreature, oInvisible); + fPerceptionDistance = GetLocalFloat(GetModule(), AI_RULE_PERCEPTION_DISTANCE); + } + else + { + // We want to use the distance between the PC and target not us. + object oMaster = GetMaster(); + if(oMaster != OBJECT_INVALID) fDistance = GetDistanceBetween(oMaster, oInvisible); + else GetDistanceBetween(oCreature, oInvisible); + fPerceptionDistance = GetLocalFloat(oCreature, AI_ASSOC_PERCEPTION_DISTANCE); + if(fPerceptionDistance == 0.0) fPerceptionDistance = 20.0; + } + if(AI_DEBUG) ai_Debug("0i_actions", "383", "Is invisible: " + GetName(oInvisible) + + " fDistance: " + FloatToString(fDistance, 0, 2) + + " fPerceptionDistance: " + FloatToString(fPerceptionDistance, 0, 2)); + // Might need to end combat at this point? + if(fDistance > fPerceptionDistance) return FALSE; + // If we are close enough then lets look for them. + if(fDistance < AI_RANGE_LONG) + { + // nHidden 1 = Invisible effects, 2 = Darkness effects, 3 = Sanctuary effects, 4 Stealth. + int nHidden = ai_GetIsHidden(oInvisible); + if(nHidden) + { + // They have a magical effect! Is there a spell we can use to see? + if(nHidden < 4) + { + if(AI_DEBUG) ai_Debug("0i_actions", "399", " They are using magic to hide: " + + IntToString(nHidden)); + // True Seeing pierces all types of magical hiding. + if(GetHasSpell(SPELL_TRUE_SEEING, oCreature)) + { + ai_SetLastAction(oCreature, SPELL_TRUE_SEEING); + ActionCastSpellAtObject(SPELL_TRUE_SEEING, oCreature); + return TRUE; + } + if(nHidden == 1 || nHidden == 3) // Invisibility or Ethereal effect. + { + if(GetHasSpell(SPELL_SEE_INVISIBILITY, oCreature)) + { + ai_SetLastAction(oCreature, SPELL_SEE_INVISIBILITY); + ActionCastSpellAtObject(SPELL_SEE_INVISIBILITY, oCreature); + return TRUE; + } + if(GetHasSpell(SPELL_INVISIBILITY_PURGE, oCreature)) + { + ai_SetLastAction(oCreature, SPELL_INVISIBILITY_PURGE); + ActionCastSpellAtObject(SPELL_INVISIBILITY_PURGE, oCreature); + return TRUE; + } + } + if(nHidden == 2) // Darkness spell effect. + { + if(GetHasSpell(SPELL_DARKVISION)) + { + ai_SetLastAction(oCreature, SPELL_DARKVISION); + ActionCastSpellAtObject(SPELL_DARKVISION, oCreature); + return TRUE; + } + } + // To be able to attack a magically hidden foe we have to be + // with in melee attack range. Cannot hear Ethereal foes! + // We will automatically hear them once we are within range. + // We also walk so we don't give attacks of opportunity. + if(nHidden < 3) + { + if(AI_DEBUG) ai_Debug("0i_actions", "437", " We have no spells to counter with. Moving up to attack!"); + SetLocalInt(oCreature, AI_AM_I_SEARCHING, TRUE); + ActionMoveToObject(oInvisible); + ActionDoCommand(DeleteLocalInt(oCreature, AI_AM_I_SEARCHING)); + if(ai_GetIsInCombat(oCreature)) ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + } + else // They are using stealth! + { + if(AI_DEBUG) ai_Debug("0i_actions", "447", " Using Detect mode and moving up."); + SetActionMode(oCreature, ACTION_MODE_DETECT, TRUE); + SetLocalInt(oCreature, AI_AM_I_SEARCHING, TRUE); + // We use to move to the object but that is creepy! + //ActionMoveToObject(oInvisible, FALSE, fRange); + ActionMoveToLocation(GetLocation(oInvisible), FALSE); + ActionDoCommand(DeleteLocalInt(oCreature, AI_AM_I_SEARCHING)); + if(ai_GetIsInCombat(oCreature)) ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + } + else // They are not hidden, then that means we can hear them but not see them. + // Probably behind a wall or door. + { + SetLocalInt(oCreature, AI_AM_I_SEARCHING, TRUE); + // We use to move to the object but that is creepy! + //ActionMoveToObject(oInvisible, FALSE, fRange); + ActionMoveToLocation(GetLocation(oInvisible), FALSE); + ActionDoCommand(DeleteLocalInt(oCreature, AI_AM_I_SEARCHING)); + if(ai_GetIsInCombat(oCreature)) ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + } + else // We need to get closer to start looking for them. + { + if(AI_DEBUG) ai_Debug("0i_actions", "469", "Moving towards invisible creature from a distance: " + GetName(oInvisible)); + SetLocalInt(oCreature, AI_AM_I_SEARCHING, TRUE); + // We use to move to the object but that is creepy! + //ActionMoveToObject(oInvisible, TRUE, 14.0); + ActionMoveToLocation(GetLocation(oInvisible), FALSE); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oCreature, AI_AM_I_SEARCHING))); + if(ai_GetIsInCombat(oCreature)) ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + return FALSE; +} +int ai_MoralCheck(object oCreature) +{ + // If we are immune to fear then we are immune to MoralChecks! + // Constructs and Undead are also immune to fear. + int nRaceType = GetRacialType(oCreature); + if(!GetLocalInt(GetModule(), AI_RULE_MORAL_CHECKS) || GetIsImmune(oCreature, IMMUNITY_TYPE_FEAR) || + nRaceType == RACIAL_TYPE_UNDEAD || + nRaceType == RACIAL_TYPE_CONSTRUCT || + ai_GetIsCharacter(oCreature)) return FALSE; + // Moral DC is AI_WOUNDED_MORAL_DC - The number of allies. + // or AI_BLOODY_MORAL_DC - number of allies. + int nDC; + int nHpPercent = ai_GetPercHPLoss(oCreature); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + // We only make moral checks if we are below half hitpoints and the Difficulty should be adjusted to -10 at 0. + if(nHpPercent <= AI_HEALTH_WOUNDED) + { + // Debug code to look for multiple moral checks at once by one creature? + if(GetLocalString(GetModule(), AI_RULE_DEBUG_CREATURE) == "") + { + SetLocalString(GetModule(), AI_RULE_DEBUG_CREATURE, GetName(oCreature)); + ai_Debug("0i_actions", "424", GetName(oCreature) + " starting debug mode to test Moral checks!"); + } + if(nHpPercent <= AI_HEALTH_BLOODY) nDC = AI_BLOODY_MORAL_DC; + else nDC = AI_WOUNDED_MORAL_DC; + nDC = nDC - GetLocalInt(oCreature, AI_ALLY_NUMBERS); + if(nDC < 1) nDC = 1; + if(AI_DEBUG) ai_Debug("0i_talents", "367", "Moral check DC: " + IntToString(nDC) + "."); + //SendMessageToPC(GetFirstPC(), "0i_talents, 431, " + GetName(oCreature) + " Moral check DC: " + IntToString(nDC) + "."); + if(!WillSave(oCreature, nDC, SAVING_THROW_TYPE_FEAR, oNearestEnemy)) + { + if(AI_DEBUG) ai_Debug("0i_talents", "370", "Moral check failed, we are fleeing!"); + SetLocalString(oCreature, AI_COMBAT_SCRIPT, "ai_coward"); + effect eVFX = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVFX, oCreature, 6.0f); + ActionMoveAwayFromObject(oNearestEnemy, TRUE, AI_RANGE_LONG); + if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) + { + int nRoll = d4(); + if(nRoll == 1) PlayVoiceChat(VOICE_CHAT_FLEE, oCreature); + else if(nRoll == 2) PlayVoiceChat(VOICE_CHAT_GUARDME, oCreature); + else if(nRoll == 3) PlayVoiceChat(VOICE_CHAT_HELP, oCreature); + else if(nRoll == 4 && nHpPercent < 100) PlayVoiceChat(VOICE_CHAT_HEALME, oCreature); + } + return TRUE; + } + if(nDC >= 11 && !ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) + { + int nRoll = d6(); + // Cry out when you are overwhelmed! + if(nRoll == 1) PlayVoiceChat(VOICE_CHAT_CUSS, oCreature); + else if(nRoll == 2) PlayVoiceChat(VOICE_CHAT_BADIDEA, oCreature); + else if(nRoll == 3) PlayVoiceChat(VOICE_CHAT_ENEMIES, oCreature); + } + } + return FALSE; +} +int ai_GetInAOEReaction(object oCreature, object oCaster, int nSpell) +{ + switch(nSpell) + { + case SPELL_ACID_FOG: + case SPELL_CLOUDKILL: + case SPELL_CREEPING_DOOM: + { + // Nothing but bad times with these spells. + return TRUE; + } + case SPELL_STORM_OF_VENGEANCE: + { + // This only harms our enemies! + return (oCaster != oCreature && GetIsEnemy(oCaster, oCreature)); + } + // They should only flee Silence if they want to cast a spell! + //case SPELL_SILENCE: + case SPELL_BLADE_BARRIER: + case SPELL_WALL_OF_FIRE: + case SPELL_INCENDIARY_CLOUD: + { + // Check reflex feats and saves. + return (!GetHasFeat(FEAT_EVASION, oCreature) && + !GetHasFeat(FEAT_IMPROVED_EVASION, oCreature) && + GetReflexSavingThrow(oCreature) < 21 + d6()); + } + case SPELL_STINKING_CLOUD: + { + // Do we have a high fortitude save? 20 + 5 + return (GetFortitudeSavingThrow(oCreature) < 20 + d6()); + } + case SPELL_GREASE: + case SPELL_ENTANGLE: + case SPELL_VINE_MINE_ENTANGLE: + case SPELL_WEB: + { + // Do we have a high reflex save? d20 + 1 + return (!GetHasFeat(FEAT_WOODLAND_STRIDE, oCreature) && + !GetLocalInt(oCreature, "X2_L_IS_INCORPOREAL") && + GetReflexSavingThrow(oCreature) < 15 + d6()); + } + case SPELL_EVARDS_BLACK_TENTACLES: + { + // Small creatures are immune and can they hit me? d20 + 8 + caster lvl(7) + return (GetCreatureSize(oCreature) > 2 && + GetAC(oCreature) < 30 + d6()); + } + case SPELL_CLOUD_OF_BEWILDERMENT: + { + // Do we have a high fortitude save? 20 + 2 + return (GetFortitudeSavingThrow(oCreature) < 17 + d6()); + } + case SPELL_MIND_FOG: + case SPELL_STONEHOLD: + { + // Do we have a high enough will save? 20 + 6 + return (GetWillSavingThrow(oCreature) < 21 + d6()); + } + case SPELL_SPIKE_GROWTH: + case SPELL_VINE_MINE_HAMPER_MOVEMENT: + { + // Do we have a high reflex save? d20 + 3 + return (GetReflexSavingThrow(oCreature) < 18 + d6()); + } + } + return FALSE; +} +void ai_HaveCreatureSpeak(object oCreature, int nRoll, string sVoiceChatArray, int bImportant = FALSE) +{ + if(ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK) && !bImportant) return; + if(nRoll == 0) + { + // Some races shouldn't talk. + int nRacialType = GetRacialType(oCreature); + if(nRacialType == RACIAL_TYPE_ANIMAL || nRacialType == RACIAL_TYPE_BEAST || + nRacialType == RACIAL_TYPE_MAGICAL_BEAST || nRacialType == RACIAL_TYPE_OOZE || + nRacialType == RACIAL_TYPE_UNDEAD || nRacialType == RACIAL_TYPE_VERMIN) return; + SpeakString(sVoiceChatArray); + return; + } + nRoll = Random(nRoll); + string sVoice = ai_GetStringArray(sVoiceChatArray, nRoll); + if(sVoice != "") PlayVoiceChat(StringToInt(sVoice), oCreature); +} +int ai_CheckForAssociateSpellTalent(object oAssociate, int nInMelee, int nMaxLevel, int nRound = 0) +{ + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oAssociate, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oAssociate, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return TRUE; + if(ai_UseCreatureTalent(oAssociate, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return TRUE; + } + if(ai_GetMagicMode(oAssociate, AI_MAGIC_OFFENSIVE_CASTING)) return FALSE; + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oAssociate); + return ai_TryDefensiveTalents(oAssociate, nInMelee, nMaxLevel, nRound, oTarget); +} +void ai_DoPhysicalAttackOnBest(object oCreature, int nInMelee, int bAlwaysAtk = TRUE) +{ + talent tUse; + object oTarget; + if(AI_DEBUG) ai_Debug("0i_actions", "496", "Check for ranged attack on nearest enemy!"); + // ************************** Ranged feat attacks ************************** + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) && + !ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && + ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + // Lets pick off the nearest targets first. + if(!nInMelee) + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTarget(oCreature); + } + else + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + if(AI_DEBUG) ai_Debug("0i_actions", "519", "Do ranged attack against nearest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + if(AI_DEBUG) ai_Debug("0i_actions", "525", "Check for melee attack on nearest enemy!"); + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee, bAlwaysAtk)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_PERCEPTION, bAlwaysAtk); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, bAlwaysAtk); + // If we don't find a target then we don't want to fight anyone! + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + if(AI_DEBUG) ai_Debug("0i_actions", "536", "Do melee attack against nearest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} +void ai_DoPhysicalAttackOnNearest(object oCreature, int nInMelee, int bAlwaysAtk = TRUE) +{ + talent tUse; + object oTarget; + if(AI_DEBUG) ai_Debug("0i_actions", "496", "Check for ranged attack on nearest enemy!"); + // ************************** Ranged feat attacks ************************** + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) && + !ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && + ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + // Lets pick off the nearest targets first. + if(!nInMelee) + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTarget(oCreature); + } + else + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + if(AI_DEBUG) ai_Debug("0i_actions", "519", "Do ranged attack against nearest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + if(AI_DEBUG) ai_Debug("0i_actions", "525", "Check for melee attack on nearest enemy!"); + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee, bAlwaysAtk)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_PERCEPTION, bAlwaysAtk); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee, bAlwaysAtk); + // If we don't find a target then we don't want to fight anyone! + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + if(AI_DEBUG) ai_Debug("0i_actions", "536", "Do melee attack against nearest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} +void ai_DoPhysicalAttackOnLowestCR(object oCreature, int nInMelee, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_actions", "533", "Check for ranged attack on weakest enemy!"); + object oTarget; + // ************************** Ranged feat attacks ************************** + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) && + !ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && + ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + // Lets pick off the weaker targets. + if(!nInMelee) + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTarget(oCreature); + } + else + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + if(AI_DEBUG) ai_Debug("0i_actions", "559", GetName(OBJECT_SELF) + " does ranged attack on weakest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + if(AI_DEBUG) ai_Debug("0i_actions", "571", "Check for melee attack on weakest enemy!"); + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee, bAlwaysAtk)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_PERCEPTION, bAlwaysAtk); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTargetForMeleeCombat(oCreature, nInMelee, bAlwaysAtk); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + if(AI_DEBUG) ai_Debug("0i_actions", "577", GetName(OBJECT_SELF) + " does melee attack against weakest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} +int ai_InCombatEquipBestMeleeWeapon(object oCreature) +{ + if(ai_GetIsMeleeWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature))) return FALSE; + if(ai_EquipBestMeleeWeapon(oCreature)) + { + // We delay 1 second since ActionEquip is not an action we can check for. + // This keeps event scripts from clearing before we actually equip. + SetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS, 2); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + return FALSE; +} +int ai_InCombatEquipBestRangedWeapon(object oCreature) +{ + if(ai_EquipBestRangedWeapon(oCreature)) + { + // We delay 1 second since ActionEquip is not an action we can check for. + // This keeps event scripts from clearing before we actually equip. + SetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS, 1); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + return FALSE; +} +int ai_CheckItemForHealing(object oCreature, object oTarget, object oItem, int nHpLost, int bEquiped = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_actions", "629", "Checking Item properties on " + GetName(oItem)); + int nIprpSubType, nSpell, nLevel, nIPType; + itemproperty ipProp = GetFirstItemProperty(oItem); + // Lets skip this if there are no properties. + if(!GetIsItemPropertyValid(ipProp)) return FALSE; + // Check for cast spell property and add them to the talent list. + int nIndex; + ipProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProp)) + { + if(AI_DEBUG) ai_Debug("0i_actions", "639", "ItempropertyType(15): " + IntToString(GetItemPropertyType(ipProp))); + nIPType = GetItemPropertyType(ipProp); + if(nIPType == ITEM_PROPERTY_CAST_SPELL) + { + nIprpSubType = GetItemPropertySubType(ipProp); + nSpell = StringToInt(Get2DAString("iprp_spells", "SpellIndex", nIprpSubType)); + if(ai_ShouldWeCastThisCureSpell(nSpell, nHpLost)) + { + // We have established that we can use the item if it is equiped. + if(!bEquiped) ai_CheckIfCanUseItem(oCreature, oItem); + // Get how they use the item (charges or uses per day). + int nUses = GetItemPropertyCostTableValue(ipProp); + if(nUses > 1 && nUses < 7) + { + int nCharges = GetItemCharges(oItem); + if(AI_DEBUG) ai_Debug("0i_actions", "654", "Item charges: " + IntToString(nCharges)); + if(nUses == 6 && nCharges < 1 || nUses == 5 && nCharges < 3 || + nUses == 4 && nCharges < 5 || nUses == 3 && nCharges < 7 || + nUses == 2 && nCharges < 9) return FALSE; + } + else if(nUses > 7 && nUses < 13) + { + int nPerDay = GetItemPropertyUsesPerDayRemaining(oItem, ipProp); + if(AI_DEBUG) ai_Debug("0i_actions", "662", "Item uses: " + IntToString(nPerDay)); + if(nPerDay == 0) return FALSE; + } + // SubType is the ip spell index for iprp_spells.2da + nIprpSubType = GetItemPropertySubType(ipProp); + if(AI_DEBUG) ai_Debug("0i_actions", "667", GetName(oCreature) + " is using " + GetName(oItem) + " on " + GetName(oTarget) + "."); + ActionUseItemOnObject(oItem, ipProp, oTarget, nIprpSubType); + return TRUE; + } + } + nIndex++; + ipProp = GetNextItemProperty(oItem); + } + return FALSE; +} +int ai_HealSickness(object oCreature, object oTarget, object oPC, int nSickness, int bForce = FALSE) +{ + // If the player is not forcing a check. + if(!bForce) + { + // Is Casting Cure spells off? + if(ai_GetMagicMode(oCreature, AI_MAGIC_CURE_SPELLS_OFF)) return FALSE; + // Do we have no magic on? + if(ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC)) return FALSE; + // Should we ignore associates? + if(ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && + GetAssociateType(oTarget) > 1) return FALSE; + } + // Check for spells. + if(nSickness == AI_ALLY_IS_DISEASED) + { + if(AI_DEBUG) ai_Debug("0i_actions", "717", "Attempting to remove disease."); + if(ai_CheckAndCastSpell(oCreature, SPELL_REMOVE_DISEASE, 0, 0.0, oTarget)) return TRUE; + } + else if(nSickness == AI_ALLY_IS_POISONED) + { + if(AI_DEBUG) ai_Debug("0i_actions", "726", "Attempting to remove poison."); + if(ai_CheckAndCastSpell(oCreature, SPELL_NEUTRALIZE_POISON, 0, 0.0, oTarget)) return TRUE; + } + else if(nSickness == AI_ALLY_IS_WEAK) + { + if(AI_DEBUG) ai_Debug("0i_actions", "735", "Attempting to remove ability score drain."); + if(ai_CheckAndCastSpell(oCreature, SPELL_LESSER_RESTORATION, 0, 0.0, oTarget)) return TRUE; + if(ai_CheckAndCastSpell(oCreature, SPELL_RESTORATION, 0, 0.0, oTarget)) return TRUE; + if(ai_CheckAndCastSpell(oCreature, SPELL_GREATER_RESTORATION, 0, 0.0, oTarget)) return TRUE; + } + else return FALSE; + // Check for healing kits. + if(!GetLocalInt(GetModule(), AI_RULE_HEALERSKITS)) return FALSE; + int nIprpSubType, nSpell; + itemproperty ipProp; + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + if(GetIdentified(oItem)) + { + int nBaseItemType = GetBaseItemType(oItem); + if(nBaseItemType == BASE_ITEM_HEALERSKIT && + (nSickness == AI_ALLY_IS_DISEASED || + nSickness == AI_ALLY_IS_POISONED)) + { + ipProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProp)) + { + if(GetItemPropertyType(ipProp) == ITEM_PROPERTY_HEALERS_KIT) + { + if(AI_DEBUG) ai_Debug("0i_actions", "772", "Attempting to remove (" + IntToString(nSickness) + ") with a healing kit."); + if(ai_GetIsCharacter(oPC)) ai_SendMessages(GetName(oCreature) + " uses " + GetName(oItem) + " on " + GetName(oTarget) + ".", AI_COLOR_YELLOW, oPC); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + ipProp = GetNextItemProperty(oItem); + } + } + else if(nBaseItemType == BASE_ITEM_POTIONS || + nBaseItemType == BASE_ITEM_ENCHANTED_POTION || + nBaseItemType == FEAT_BREW_POTION) + { + ipProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProp)) + { + nIprpSubType = GetItemPropertySubType(ipProp); + nSpell = StringToInt(Get2DAString("iprp_spells", "SpellIndex", nIprpSubType)); + if(AI_DEBUG) ai_Debug("0i_actions", "789", "Checking potion, " + IntToString(nSpell)); + if(nSpell == SPELL_REMOVE_DISEASE && nSickness == AI_ALLY_IS_DISEASED) + { + if(AI_DEBUG) ai_Debug("0i_actions", "786", "Using a potion of Remove Disease."); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + if(nSpell == SPELL_NEUTRALIZE_POISON && nSickness == AI_ALLY_IS_POISONED) + { + if(AI_DEBUG) ai_Debug("0i_actions", "786", "Using a potion of Neturalize Poison."); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + if(nSpell == SPELL_LESSER_RESTORATION && nSickness == AI_ALLY_IS_WEAK) + { + if(AI_DEBUG) ai_Debug("0i_actions", "781", "Using a potion of Lesser Restoration."); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + if(nSpell == SPELL_RESTORATION && nSickness == AI_ALLY_IS_WEAK) + { + if(AI_DEBUG) ai_Debug("0i_actions", "791", "Using a potion of Restoration."); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + ipProp = GetNextItemProperty(oItem); + } + } + else if(nBaseItemType == BASE_ITEM_SCROLL || + nBaseItemType == BASE_ITEM_ENCHANTED_SCROLL || + nBaseItemType == BASE_ITEM_SPELLSCROLL || + nBaseItemType == BASE_ITEM_ENCHANTED_WAND || + nBaseItemType == BASE_ITEM_MAGICWAND || + nBaseItemType == BASE_ITEM_MAGICSTAFF) + { + if(ai_CheckIfCanUseItem(oCreature, oItem)) + { + ipProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProp)) + { + nSpell = StringToInt(Get2DAString("iprp_spells", "SpellIndex", nIprpSubType)); + if(nSpell == SPELL_REMOVE_DISEASE && nSickness == AI_ALLY_IS_DISEASED) + { + if(AI_DEBUG) ai_Debug("0i_actions", "786", "Using a potion of Remove Disease."); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + if(nSpell == SPELL_NEUTRALIZE_POISON && nSickness == AI_ALLY_IS_POISONED) + { + if(AI_DEBUG) ai_Debug("0i_actions", "786", "Using a potion of Neturalize Poison."); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + if(nSpell == SPELL_LESSER_RESTORATION && nSickness == AI_ALLY_IS_WEAK) + { + if(AI_DEBUG) ai_Debug("0i_actions", "781", "Using a potion of Lesser Restoration."); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + if(nSpell == SPELL_RESTORATION && nSickness == AI_ALLY_IS_WEAK) + { + if(AI_DEBUG) ai_Debug("0i_actions", "791", "Using a potion of Restoration."); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + ipProp = GetNextItemProperty(oItem); + } + } + } + } + oItem = GetNextItemInInventory(oCreature); + } + return FALSE; +} +int ai_UseHealingItem(object oCreature, object oTarget, object oPC) +{ + if(ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC_ITEMS)) return FALSE; + string sSlots; + int nDamage = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + itemproperty ipProp; + // Cycle through all the creatures equiped items. + int nSlot; + object oItem = GetItemInSlot(nSlot, oCreature); + while(nSlot < 11) + { + if(oItem != OBJECT_INVALID && + ai_CheckItemForHealing(oCreature, oTarget, oItem, nDamage, TRUE)) return TRUE; + oItem = GetItemInSlot(++nSlot, oCreature); + } + oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + if(GetIdentified(oItem)) + { + // Does the item need to be equiped to use its powers? + sSlots = Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)); + if(AI_DEBUG) ai_Debug("0i_actions", "696", GetName(oItem) + " requires " + Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)) + " slots."); + if(sSlots == "0x00000") + { + int nBaseItemType = GetBaseItemType(oItem); + // Lets not use up our healing kits on minor damage. + if(nBaseItemType == BASE_ITEM_HEALERSKIT) + { + if(!GetLocalInt(GetModule(), AI_RULE_HEALERSKITS)) return FALSE; + ipProp = GetFirstItemProperty(oItem); + if(GetItemPropertyType(ipProp) == ITEM_PROPERTY_HEALERS_KIT) + { + if(ai_GetIsCharacter(oPC)) ai_SendMessages(GetName(oCreature) + " uses " + GetName(oItem) + " on " + GetName(oTarget) + ".", AI_COLOR_YELLOW, oPC); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + } + // Do we want Player AI and Associates to use potions on others? + //else if(nBaseItemType == BASE_ITEM_ENCHANTED_POTION || + // nBaseItemType == BASE_ITEM_POTIONS) + //{ + // if(oCaster == oTarget) + // { + // if(ai_CheckItemForHealing(oCreature, oTarget, oItem, nDamage)) return TRUE; + // } + //} + else if(ai_CheckItemForHealing(oCreature, oTarget, oItem, nDamage)) return TRUE; + } + } + oItem = GetNextItemInInventory(oCreature); + } + return FALSE; +} +void ai_ActionTryHealing(object oCreature, object oTarget) +{ + ai_TryHealing(oCreature, oTarget, TRUE); +} +int ai_TryHealing(object oCreature, object oTarget, int bForce = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_actions", "733", "Try healing: oCreature: " + GetName(oCreature) + + " oTarget: " + GetName(oTarget) + " No Party Healing: " + IntToString(ai_GetAIMode(oCreature, AI_MODE_PARTY_HEALING_OFF)) + + " No Self Healing: " + IntToString(ai_GetAIMode(oCreature, AI_MODE_SELF_HEALING_OFF)) + + " AI_I_AM_BEING_HEALED: " + IntToString(GetLocalInt(oTarget, "AI_I_AM_BEING_HEALED")) + + " Undead: " + IntToString(GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)); + // If the player is not forcing a check. + if(!bForce) + { + // Should we ignore associates? + if(ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && + GetAssociateType(oTarget) > 1) return FALSE; + } + // Limits the number of times a wounded creature will ask for help. + if(GetLocalInt(oCreature, "AI_WOUNDED_SHOUT_LIMIT") > 3) return FALSE; + // This keeps everyone from healing the same character in one round and over healing! + if(oCreature == oTarget) DeleteLocalInt(oTarget, "AI_I_AM_BEING_HEALED"); + else if(GetLocalInt(oTarget, "AI_I_AM_BEING_HEALED")) return FALSE; + if(ai_GetAIMode(oCreature, AI_MODE_PARTY_HEALING_OFF) && + oCreature != oTarget) return FALSE; + if(ai_GetAIMode(oCreature, AI_MODE_SELF_HEALING_OFF) && + oCreature == oTarget) return FALSE; + // Undead don't heal so lets skip this for them, maybe later we can fix this. + if(GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD) return FALSE; + int nHpLost = ai_GetPercHPLoss(oTarget); + if(bForce && nHpLost < 100) nHpLost = 0; + if(AI_DEBUG) ai_Debug("0i_actions", "743", "nHpLost: " + IntToString(nHpLost) + + " limit: " + IntToString(ai_GetHealersHpLimit(oTarget, FALSE))); + if(nHpLost >= ai_GetHealersHpLimit(oTarget, FALSE)) + { + // Check to see if we need poison, disease, or ability drain removed. + int nEffectType; + effect eEffect = GetFirstEffect(oTarget); + while(GetIsEffectValid(eEffect)) + { + nEffectType = GetEffectType(eEffect); + if(AI_DEBUG) ai_Debug("0i_actions", "1094", "Checking to cure(31/32/39) nEffectType: " + IntToString(nEffectType)); + if(nEffectType == EFFECT_TYPE_DISEASE) + { + if(AI_DEBUG) ai_Debug("0i_actions", "1097", "I am diseased!"); + if(ai_HealSickness(oCreature, oTarget, ai_GetPlayerMaster(oCreature), AI_ALLY_IS_DISEASED, bForce)) return TRUE; + if(oCreature == oTarget) + { + if(!d20()) ai_HaveCreatureSpeak(oCreature, 5, ":43:4:14:15:16:"); + SpeakString(AI_I_AM_DISEASED, TALKVOLUME_SILENT_TALK); + } + } + else if(nEffectType == EFFECT_TYPE_POISON) + { + if(AI_DEBUG) ai_Debug("0i_actions", "1107", "I am poisoned!"); + if(ai_HealSickness(oCreature, oTarget, ai_GetPlayerMaster(oCreature), AI_ALLY_IS_POISONED, bForce)) return TRUE; + if(oCreature == oTarget) + { + if(!d20()) ai_HaveCreatureSpeak(oCreature, 6, ":43:4:14:15:16:19:"); + SpeakString(AI_I_AM_POISONED, TALKVOLUME_SILENT_TALK); + } + } + else if(nEffectType == EFFECT_TYPE_ABILITY_DECREASE) + { + if(AI_DEBUG) ai_Debug("0i_actions", "1117", "I am weak!"); + if(ai_HealSickness(oCreature, oTarget, ai_GetPlayerMaster(oCreature), AI_ALLY_IS_WEAK, bForce)) return TRUE; + if(oCreature == oTarget) + { + if(!d20()) ai_HaveCreatureSpeak(oCreature, 3, ":43:4:5:"); + SpeakString(AI_I_AM_WEAK, TALKVOLUME_SILENT_TALK); + } + } + eEffect = GetNextEffect(oTarget); + } + return FALSE; + } + // Do they have Lay on Hands? + if(GetHasFeat(FEAT_LAY_ON_HANDS, oCreature)) + { + int nCanHeal = GetAbilityModifier(ABILITY_CHARISMA, oCreature) * ai_GetCharacterLevels(oCreature); + if(nCanHeal <= nHpLost) + { + ai_UseFeat(oCreature, FEAT_LAY_ON_HANDS, oTarget); + return TRUE; + } + } + object oMaster = ai_GetPlayerMaster(oCreature); + // Do we have no magic on? + if(!ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC)) + { + int nClass, nPosition = 1; + string sMemorized; + while(nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + nClass = GetClassByPosition(nPosition, oCreature); + if(AI_DEBUG) ai_Debug("0i_actions", "753", "nClass: " + IntToString(nClass)); + if(nClass == CLASS_TYPE_INVALID) break; + sMemorized = Get2DAString("classes", "MemorizesSpells", nClass); + // If Memorized column is "" then they are not a caster. + if(sMemorized != "") + { + if(sMemorized == "1") + { + if(ai_CastMemorizedHealing(oCreature, oTarget, oMaster, nClass)) + { + SetLocalInt(oTarget, "AI_I_AM_BEING_HEALED", TRUE); + return TRUE; + } + } + else if(ai_CastKnownHealing(oCreature, oTarget, oMaster, nClass)) + { + SetLocalInt(oTarget, "AI_I_AM_BEING_HEALED", TRUE); + return TRUE; + } + } + nPosition++; + } + } + // We have exhausted all attempts to use normal healing spells. + if(ai_UseHealingItem(oCreature, oTarget, oMaster)) + { + SetLocalInt(oTarget, "AI_I_AM_BEING_HEALED", TRUE); + return TRUE; + } + // Final attempt to heal oTarget, check for Spontaneous cure spells. + if(ai_CastSpontaneousCure(oCreature, oTarget, oMaster)) + { + SetLocalInt(oTarget, "AI_I_AM_BEING_HEALED", TRUE); + return TRUE; + } + // We can't heal ourselves! Can any of our allies? Lets ask. + if(oCreature == oTarget) + { + SetLocalInt(oCreature, "AI_WOUNDED_SHOUT_LIMIT", GetLocalInt(oCreature, "AI_WOUNDED_SHOUT_LIMIT") + 1); + SpeakString(AI_I_AM_WOUNDED, TALKVOLUME_SILENT_TALK); + } + return FALSE; +} +int ai_PerceiveEnemy(object oCreature, object oEnemy) +{ + float fDistance = GetDistanceBetween(oCreature, oEnemy); + if(fDistance < 50.0) + { + // Game is in meters, so 1 foot = 3.333 meter + // penalty is -1 per 10' so divide it by 10 to use 0.3333f + int nDC = 10 + FloatToInt(fDistance * 0.3333f); + // Check to see if the creature is hiding and add the creatures checks. + int nEnemyMoveSilent, nEnemyHide; + if(GetStealthMode(oEnemy)) + { + nEnemyMoveSilent =(d20() + GetSkillRank(SKILL_MOVE_SILENTLY, oEnemy)); + nEnemyHide =(d20() + GetSkillRank(SKILL_HIDE, oEnemy)); + } + if(GetIsSkillSuccessful (oCreature, SKILL_SPOT, nDC + nEnemyHide)) return TRUE; + if(GetIsSkillSuccessful (oCreature, SKILL_LISTEN, nDC + nEnemyMoveSilent)) return TRUE; + } + return FALSE; +} +void ai_ScoutAhead(object oCreature) +{ + object oPerceived; + object oEnemy = ai_GetNearestEnemy(oCreature, 1, -1, -1, -1, -1, TRUE); + // We see them so fight! + if(oEnemy != OBJECT_INVALID) + { + if(ai_PerceiveEnemy(oCreature, oEnemy)) + { + if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) + { + int nRoll = d10(); + if(nRoll == 1) PlayVoiceChat(VOICE_CHAT_ENEMIES, oCreature); + else if(nRoll == 2) PlayVoiceChat(VOICE_CHAT_FOLLOWME, oCreature); + else if(nRoll == 3) PlayVoiceChat(VOICE_CHAT_LOOKHERE, oCreature); + } + ActionMoveToObject(oEnemy, TRUE, AI_RANGE_LONG); + return; + } + // There are enemies here so lets go to them. + else + { + if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) + { + int nRoll = d3(); + if(nRoll == 1) PlayVoiceChat(VOICE_CHAT_BADIDEA, oCreature); + else if(nRoll == 2) PlayVoiceChat(VOICE_CHAT_SEARCH, oCreature); + else if(nRoll == 3) PlayVoiceChat(VOICE_CHAT_FOLLOWME, oCreature); + } + ActionMoveToObject(oEnemy, TRUE, AI_RANGE_CLOSE); + } + } + // There are no more enemies, but we must look like we are patroling so + // go to encounter points. + else + { + if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) + { + int nRoll = d10(); + if(nRoll == 1) PlayVoiceChat(VOICE_CHAT_BADIDEA, oCreature); + else if(nRoll == 2) PlayVoiceChat(VOICE_CHAT_SEARCH, oCreature); + else if(nRoll == 3) PlayVoiceChat(VOICE_CHAT_FOLLOWME, oCreature); + } + // No enemy so lets get a spawn point! + object oSpawnPoint = GetNearestObjectByTag("ip_encounter", oCreature, d6()); + ActionMoveToObject(oSpawnPoint, TRUE, AI_RANGE_CLOSE); + } +} +int ai_ShouldIPickItUp(object oCreature, object oItem) +{ + int nMinGold; + if(GetResRef(oItem) == "nw_it_gold001") return TRUE; + int nBaseItem = GetBaseItemType(oItem); + if(GetPlotFlag(oItem)) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_PLOT)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_2"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_ARMOR) + { + if (ai_GetLootFilter(oCreature, AI_LOOT_ARMOR)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_3"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_BELT) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_BELTS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_4"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_BOOTS) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_BOOTS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_5"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_CLOAK) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_CLOAKS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_6"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_GEM) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_GEMS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_7"); + else return FALSE; + } + else if((nBaseItem == BASE_ITEM_BRACER|| nBaseItem == BASE_ITEM_GLOVES)) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_GLOVES)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_8"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_HELMET) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_HEADGEAR)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_9"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_AMULET || nBaseItem == BASE_ITEM_RING) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_JEWELRY)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_10"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_BLANK_POTION || nBaseItem == BASE_ITEM_POTIONS || + nBaseItem == BASE_ITEM_ENCHANTED_POTION) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_POTIONS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_12"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_BLANK_SCROLL || nBaseItem == BASE_ITEM_SCROLL || + nBaseItem == BASE_ITEM_ENCHANTED_SCROLL || nBaseItem == BASE_ITEM_SPELLSCROLL) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_SCROLLS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_13"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_BLANK_WAND || nBaseItem == BASE_ITEM_ENCHANTED_WAND || + nBaseItem == BASE_ITEM_MAGICWAND || nBaseItem == BASE_ITEM_MAGICROD || + nBaseItem == BASE_ITEM_MAGICSTAFF) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_WANDS_RODS_STAVES)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_15"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_ARROW) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_ARROWS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_17"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_BOLT) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_BOLTS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_18"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_BULLET) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_BULLETS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_19"); + else return FALSE; + } + else if(ai_GetIsWeapon(oItem)) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_WEAPONS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_16"); + else return FALSE; + } + else if(ai_GetIsShield(oItem)) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_SHIELDS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_14"); + else return FALSE; + } + else if(ai_GetLootFilter(oCreature, AI_LOOT_MISC)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_11"); + else return FALSE; + // Check if it is too heavy. + int nItemWeight = GetWeight(oItem); + if(AI_DEBUG) ai_Debug("0i_actions", "1146", GetName(oItem) + " nItemWeight: " + + IntToString(nItemWeight) + " Max Weight: " + IntToString(GetLocalInt(oCreature, AI_MAX_LOOT_WEIGHT) * 10)); + if(nItemWeight > GetLocalInt(oCreature, AI_MAX_LOOT_WEIGHT) * 10) return FALSE; + // Check if it is not valuable enough. + int bID = GetIdentified(oItem); + if(!bID) SetIdentified(oItem, TRUE); + int nItemValue = GetGoldPieceValue(oItem); + if(!bID) SetIdentified(oItem, FALSE); + if(AI_DEBUG) ai_Debug("0i_actions", "998", GetName(oItem) + " nMinGold: " + IntToString(nMinGold) + " nItemValue: " + + IntToString(nItemValue) + " bID: " + IntToString(bID)); + if(nMinGold > nItemValue) return FALSE; + return TRUE; +} +void ai_TakeItemMessage(object oCreature, object oObject, object oItem, object oMaster) +{ + int bId = GetIdentified(oItem); + int nCreatureSkill = GetSkillRank(SKILL_LORE, oCreature); + int nMasterSkill = GetSkillRank(SKILL_LORE, oMaster); + if(nCreatureSkill + nMasterSkill > 0) + { + if(nCreatureSkill > nMasterSkill) ai_IdentifyItemVsKnowledge(oCreature, oItem); + else ai_IdentifyItemVsKnowledge(oMaster, oItem); + } + if(!ai_GetIsCharacter(oCreature)) + { + if(GetIdentified(oItem)) + { + if(bId) ai_SendMessages(GetName(oCreature) + " has found a " + GetName(oItem) + " from the " + GetName(oObject) + ".", AI_COLOR_GRAY, oMaster); + else ai_SendMessages(GetName(oCreature) + " has found and identified " + GetName(oItem) + " from the " + GetName(oObject) + ".", AI_COLOR_GREEN, oMaster); + } + else if(!ai_GetIsCharacter(oCreature)) + { + string sBaseName = GetStringByStrRef(StringToInt(Get2DAString("baseitems", "name", GetBaseItemType(oItem)))); + ai_SendMessages(GetName(oCreature) + " has found a " + sBaseName + " from the " + GetName(oObject) + ".", AI_COLOR_GRAY, oMaster); + } + } + else if(GetIdentified(oItem) && !bId) + { + ai_SendMessages(GetName(oCreature) + " has identified " + GetName(oItem) + " from the " + GetName(oObject) + ".", AI_COLOR_GREEN, oMaster); + } + if(GetPlotFlag(oItem)) + { + if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) PlayVoiceChat(VOICE_CHAT_LOOKHERE, oCreature); + } +} +void ai_SearchObject(object oCreature, object oObject, object oMaster, int bOnce = FALSE) +{ + ai_Debug("0i_actions", "966", GetName(OBJECT_SELF) + " is opening " + GetName(oObject)); + string sTag = GetTag(oCreature); + AssignCommand(oObject, ActionPlayAnimation(ANIMATION_PLACEABLE_OPEN)); + if(GetIsTrapped(oObject)) DoPlaceableObjectAction(oObject, PLACEABLE_ACTION_USE); + SetLocalInt(oObject, "AI_LOOTED_" + sTag, TRUE); + // Big Hack to allow NPC's to loot! + string sLootScript = GetEventScript(oObject, EVENT_SCRIPT_PLACEABLE_ON_OPEN); + //ai_Debug("0i_actions", "972", "Loot script: " + sLootScript); + if(sLootScript != "") + { + // Used in Original Campaign, and SOU for loot scripts to get treasure to work. + SetLocalObject(oObject, "AI_GET_LAST_OPENED_BY", oMaster); + ExecuteScript(sLootScript, oObject); + } + AssignCommand(oObject, ActionWait(2.0f)); + AssignCommand(oObject, ActionPlayAnimation(ANIMATION_PLACEABLE_CLOSE)); + int nItemType, nGold; + object oItem = GetFirstItemInInventory(oObject); + //ai_Debug("0i_actions", "983", "Found: " + GetName(oItem) + " ResRef: " + GetResRef(oItem) + + // " in " + GetName(oObject)); + while(oItem != OBJECT_INVALID) + { + ai_Debug("0i_actions", "987", "Found: " + GetName(oItem) + " ResRef: " + GetResRef(oItem)); + if(ai_ShouldIPickItUp(oCreature, oItem)) + { + ai_Debug("0i_actions", "1002", "Taking: " + GetName(oItem)); + if(GetResRef(oItem) == "nw_it_gold001") + { + if(!ai_GetIsCharacter(oCreature)) + { + int nGold = GetItemStackSize(oItem); + DestroyObject(oItem); + ActionDoCommand(GiveGoldToCreature(oMaster, nGold)); + ActionDoCommand(ai_SendMessages(GetName(oCreature) + " has retrieved " + IntToString(nGold) + + " gold from the " + GetName(oObject) + ".", AI_COLOR_GRAY, oMaster)); + } + else AssignCommand(oCreature, ActionTakeItem(oItem, oObject)); + } + // Check if they are a henchman, companions and familiars give all items to the pc. + else if(!ai_GetLootFilter(oCreature, AI_LOOT_GIVE_TO_PC) && + GetAssociateType(oCreature) == ASSOCIATE_TYPE_HENCHMAN && + !GetPlotFlag(oItem)) + { + if(GetBaseItemFitsInInventory(GetBaseItemType(oItem), oCreature)) + { + ActionDoCommand(ai_TakeItemMessage(oCreature, oObject, oItem, oMaster)); + ActionTakeItem(oItem, oObject); + } + else + { + if(GetIdentified(oItem)) SpeakString("My inventory is full! I cannot pick up the " + GetName(oItem) + "."); + else + { + string sBaseName = GetStringByStrRef(StringToInt(Get2DAString("baseitems", "name", GetBaseItemType(oItem)))); + SpeakString("My inventory is full! I cannot pick up the " + sBaseName + "."); + } + } + } + else + { + if(GetBaseItemFitsInInventory(GetBaseItemType(oItem), oMaster)) + { + //ai_Debug("0i_actions", "1010", "Giving to master: " + GetName(oItem)); + ActionDoCommand(ai_TakeItemMessage(oCreature, oObject, oItem, oMaster)); + AssignCommand(oObject, ActionGiveItem(oItem, oMaster)); + } + else + { + if(GetIdentified(oItem)) SpeakString("Your inventory is full! You cannot take the " + GetName(oItem) + "."); + else + { + string sBaseName = GetStringByStrRef(StringToInt(Get2DAString("baseitems", "name", GetBaseItemType(oItem)))); + SpeakString("Your inventory is full! You cannot take the " + sBaseName + "."); + } + } + } + } + oItem = GetNextItemInInventory(oObject); + //ai_Debug("0i_actions", "1016", GetName(oItem) + " is the next item."); + } + //ai_Debug("0i_actions", "1018", "Setting object as looted. Check for a new Placeable."); + if(!bOnce) ActionDoCommand(ai_ActionCheckNearbyObjects(oCreature)); +} +int ai_IsContainerLootable(object oCreature, object oObject) +{ + string sTag = GetTag(oCreature); + //ai_Debug("0i_actions", "1303", GetName(oObject) + " (sTag " + GetTag(oObject) + ") " + + // "has inventory: " + IntToString(GetHasInventory(oObject)) + " Has been looted: " + + // IntToString(GetLocalInt(oObject, "AI_LOOTED_" + sTag)) + " Is Useable? " + + // IntToString(GetUseableFlag(oObject))); + if(!GetHasInventory(oObject) || !GetUseableFlag(oObject)) return FALSE; + // This associate has already looted this object, skip. + if(GetLocalInt(oObject, "AI_LOOTED_" + sTag) || ai_GetIsCharacter(oObject)) return FALSE; + return TRUE; +} +int ai_AttempToCastKnockSpell(object oCreature, object oLocked) +{ + if(GetHasSpell(SPELL_KNOCK, oCreature) && + (GetIsDoorActionPossible(oLocked, DOOR_ACTION_KNOCK) || + GetIsPlaceableObjectActionPossible(oLocked, PLACEABLE_ACTION_KNOCK)) && + ai_GetIsInLineOfSight(oCreature, oLocked)) + { + SetLocalInt(oLocked, AI_OBJECT_IN_USE, TRUE); + DelayCommand(6.0, DeleteLocalInt(oLocked, AI_OBJECT_IN_USE)); + AssignCommand(oCreature, ai_ClearCreatureActions()); + AssignCommand(oCreature, ActionWait(1.0)); + AssignCommand(oCreature, ActionCastSpellAtObject(SPELL_KNOCK, oLocked)); + AssignCommand(oCreature, ActionWait(1.0)); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oLocked, AI_OBJECT_IN_USE))); + return TRUE; + } + return FALSE; +} +int ai_ReactToTrap(object oCreature, object oTrap, int bForce = FALSE) +{ + int nTrapDC = GetTrapDisarmDC(oTrap); + if(AI_DEBUG) ai_Debug("0i_actions", "1520", "Reacting to trap on " + GetName(oTrap) + + " bForce: " + IntToString(bForce) + " nTrapDC: " + IntToString(nTrapDC) + + " [AI_OBJECT_IN_USE: " + IntToString(GetLocalInt(oTrap, AI_OBJECT_IN_USE)) + "]."); + if(nTrapDC == 0) return FALSE; + string sTag = GetTag(oCreature); + if(bForce || ai_GetAIMode(oCreature, AI_MODE_DISARM_TRAPS)) + { + if(GetTrapDisarmable(oTrap)) + { + if(GetLocalInt(oTrap, AI_OBJECT_IN_USE)) return FALSE; + // We must have ranks in disable traps to actually disable the trap! + if(GetSkillRank(SKILL_DISABLE_TRAP, oCreature, TRUE)) + { + int nSkill = GetSkillRank(SKILL_DISABLE_TRAP, oCreature); + if(AI_DEBUG) ai_Debug("0i_actions", "1534", "nSkill: " + IntToString(nSkill) + + " + 20 = " + IntToString(nSkill + 20) + " nTrapDC: " + IntToString(nTrapDC)); + if(nSkill + 20 >= nTrapDC) + { + SetLocalInt(oTrap, AI_OBJECT_IN_USE, TRUE); + DelayCommand(18.0, DeleteLocalInt(oTrap, AI_OBJECT_IN_USE)); + AssignCommand(oCreature, ai_ClearCreatureActions()); + AssignCommand(oCreature, ActionUseSkill(SKILL_DISABLE_TRAP, oTrap, 0)); + // Let them know we did it! + AssignCommand(oCreature, ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 6, ":44:42:31:35:"))); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oTrap, AI_OBJECT_IN_USE))); + // Continue checking for traps, locks, and loot. + AssignCommand(oCreature, ActionDoCommand(ai_ActionCheckNearbyObjects(oCreature))); + return TRUE; + } + if(GetHasSpell(SPELL_FIND_TRAPS, oCreature)) + { + AssignCommand(oCreature, ai_ClearCreatureActions()); + AssignCommand(oCreature, ActionCastSpellAtObject(SPELL_FIND_TRAPS, oTrap)); + // Continue checking for traps, locks, and loot. + AssignCommand(oCreature, ActionDoCommand(ai_ActionCheckNearbyObjects(oCreature))); + return TRUE; + } + } + if(GetLocalInt(oTrap, "AI_CANNOT_TRAP_" + sTag) && !bForce) return FALSE; + // Let them know we can't get this done!. + //StrRef(40551) "I cannot disarm this trap!" + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, GetStringByStrRef(40551))); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oTrap, "AI_CANNOT_TRAP_" + sTag, TRUE); + return FALSE; + } + if(GetLocalInt(oTrap, "AI_SAW_TRAP_" + sTag) && !bForce) return FALSE; + // Let them know we can't get this done!. + ai_HaveCreatureSpeak(oCreature, 0, "I'm not skilled enough to disable the trap!", TRUE); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oTrap, "AI_SAW_TRAP_" + sTag, TRUE); + return FALSE; + } + if(GetObjectType(oTrap) == OBJECT_TYPE_TRIGGER) + { + object oMaster = ai_GetPlayerMaster(oCreature); + if(oMaster != OBJECT_INVALID && !ai_GetIsCharacter(oCreature) && + !ai_GetAIMode(oCreature, AI_MODE_IGNORE_TRAPS)) + { + ai_SetAIMode(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_SetAIMode(oCreature, AI_MODE_STAND_GROUND, TRUE); + ai_SetAIMode(oCreature, AI_MODE_FOLLOW, FALSE); + ai_SetAIMode(oCreature, AI_MODE_COMMANDED, FALSE); + int nToken = NuiFindWindow(oMaster, ai_GetAssociateType(oMaster, oCreature) + AI_WIDGET_NUI); + ai_HighlightWidgetMode(oMaster, oCreature, nToken); + aiSaveAssociateModesToDb(oMaster, oCreature); + if(ai_IsInCombatRound(oCreature)) ai_ClearCombatState(oCreature); + ai_ClearCreatureActions(TRUE); + ai_SendMessages(GetName(oCreature) + " has went into hold mode after seeing a trap!", AI_COLOR_YELLOW, oMaster); + return TRUE; + } + } + if(ai_GetAIMode(oCreature, AI_MODE_PICKUP_ITEMS)) + { + if(GetLocalInt(oTrap, "AI_SAW_TRAP_" + sTag) && !bForce) return FALSE; + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, "This " + GetName(oTrap) + " is trapped!", TRUE)); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oTrap, "AI_SAW_TRAP_" + sTag, TRUE); + } + return FALSE; +} +int ai_AttemptToByPassLock(object oCreature, object oLocked, int bForce = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_actions", "1446", "Attempting to bypass lock on " + + GetName(oLocked) + " [AI_OBJECT_IN_USE: " + + IntToString(GetLocalInt(oLocked, AI_OBJECT_IN_USE)) + "]" + + " bForce: " + IntToString(bForce)); + if(GetLocalInt(oLocked, AI_OBJECT_IN_USE)) return FALSE; + string sTag = GetTag(oCreature); + // Attempt to cast knock because its always safe to cast it, even on a trapped object. + if(ai_AttempToCastKnockSpell(oLocked, oCreature)) return TRUE; + // First, let's see if we notice that it's trapped + if(GetTrapDetectedBy(oCreature, oLocked)) + { + // Ick! Try and disarm the trap first + if(ai_ReactToTrap(oCreature, oLocked, bForce)) return TRUE; + } + if(GetLockKeyRequired(oLocked)) + { + // We might be able to open this. + string sKeyTag = GetLockKeyTag(oLocked); + // Do we have the key? + object oKey = ai_GetCreatureHasItem(oCreature, sKeyTag, FALSE); + if(AI_DEBUG) ai_Debug("0i_actions", "1469", "Requires a Key! sKeyTag: " + + sKeyTag + " Has key oKey: " + GetName(oKey)); + if(oKey != OBJECT_INVALID) + { + int nObjectType = GetObjectType(oLocked); + if(nObjectType == OBJECT_TYPE_DOOR) return ai_AttemptToOpenDoor(oCreature, oLocked, bForce); + else if (nObjectType == OBJECT_TYPE_PLACEABLE) + { + SetLocalInt(oLocked, AI_OBJECT_IN_USE, TRUE); + DelayCommand(18.0, DeleteLocalInt(oLocked, AI_OBJECT_IN_USE)); + AssignCommand(oCreature, ActionUnlockObject(oLocked)); + // Let them know we did it! + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 6, ":44:42:31:35:")); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oLocked, AI_OBJECT_IN_USE))); + // Continue checking for traps, locks, and loot. + AssignCommand(oCreature, ActionDoCommand(ai_ActionCheckNearbyObjects(oCreature))); + return TRUE; + } + } + else + { + if(GetLocalInt(oLocked, "AI_LOCKED_" + sTag) && !bForce) return FALSE; + // Let them know we can't get this done!. + AssignCommand(oCreature, ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, "This " + GetName(oLocked) + " is special! It requires a special key to open."))); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oLocked, "AI_LOCKED_" + sTag, TRUE); + return FALSE; + } + } + if(bForce || ai_GetAIMode(oCreature, AI_MODE_PICK_LOCKS)) + { + // We must have ranks in open locks to actually open the lock! + if(GetSkillRank(SKILL_OPEN_LOCK, oCreature, TRUE)) + { + int nSkill = GetSkillRank(SKILL_OPEN_LOCK, oCreature); + int nLockDC = GetLockUnlockDC(oLocked); + object oPicks = ai_GetBestPicks(oCreature, nLockDC); + int nPickBonus = GetLocalInt(oPicks, "AI_BONUS"); + if(AI_DEBUG) ai_Debug("0i_actions", "1497", "I have picks: " + GetName(oPicks) + + " nSkill :" + IntToString(nSkill) + " nPickBonus: " + + IntToString(nPickBonus) + " + 20 = " + + IntToString(nSkill + nPickBonus + 20) + + " nLockDC: " + IntToString(nLockDC)); + if(nSkill + 20 + nPickBonus >= nLockDC) + { + SetLocalInt(oLocked, AI_OBJECT_IN_USE, TRUE); + DelayCommand(18.0, DeleteLocalInt(oLocked, AI_OBJECT_IN_USE)); + AssignCommand(oCreature, ai_ClearCreatureActions()); + AssignCommand(oCreature, ActionWait(1.0)); + AssignCommand(oCreature, ActionUseSkill(SKILL_OPEN_LOCK, oLocked, 0, oPicks)); + AssignCommand(oCreature, ActionWait(1.0)); + // Let them know we did it! + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":44:42:26:31:35:")); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oLocked, AI_OBJECT_IN_USE))); + // Continue checking for traps, locks, and loot. + AssignCommand(oCreature, ActionDoCommand(ai_ActionCheckNearbyObjects(oCreature))); + return TRUE; + } + else if(!GetLocalInt(oLocked, "AI_LOCKED_" + sTag)) + { + // Let them know we can't get this done! + AssignCommand(oCreature, ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, "I'm not skilled enough to pick the lock on this " + GetName(oLocked) + "!", TRUE))); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oLocked, "AI_LOCKED_" + sTag, TRUE); + return FALSE; + } + } + } + if(bForce || ai_GetAIMode(oCreature, AI_MODE_BASH_LOCKS)) + { + //AssignCommand(oCreature, ai_ClearCreatureActions()); + // Check to make sure we are not using a ranged weapon. + if(!ai_GetIsRangeWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature))) + { + if(ai_CheckClassType(oCreature, CLASS_TYPE_MONK)) ai_EquipBestMonkMeleeWeapon(oCreature); + else ai_EquipBestMeleeWeapon(oCreature); + AssignCommand(oCreature, ActionWait(1.0)); + if(ai_TryImprovedPowerAttackFeat(oCreature, oLocked)) return TRUE; + if(ai_TryPowerAttackFeat(oCreature, oLocked)) return TRUE; + if(ai_TryFlurryOfBlowsFeat(oCreature, oLocked)) return TRUE; + AssignCommand(oCreature, ActionAttack(oLocked)); + return TRUE; + } + if(GetLocalInt(oLocked, "AI_LOCKED_" + sTag) && !bForce) return FALSE; + // Let them know we can't get this done!. + AssignCommand(oCreature, ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, "I cannot bash this " + GetName(oLocked) + " open!", TRUE))); + SetLocalInt(oLocked, "AI_LOCKED_" + sTag, TRUE); + return FALSE; + } + if(bForce || ai_GetAIMode(oCreature, AI_MODE_PICKUP_ITEMS)) + { + if(GetLocalInt(oLocked, "AI_LOCKED_" + sTag) && !bForce) return FALSE; + AssignCommand(oCreature, ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, "This " + GetName(oLocked) + " is locked!", TRUE))); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oLocked, "AI_LOCKED_" + sTag, TRUE); + } + return FALSE; +} +int ai_AttemptToOpenDoor(object oCreature, object oDoor, int bForce = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_actions", "1542", "Attempting to open " + + GetName(oDoor) + " [AI_OBJECT_IN_USE: " + + IntToString(GetLocalInt(oDoor, AI_OBJECT_IN_USE)) + "] " + + " IsOpen: " + IntToString(GetIsOpen(oDoor)) + + " Plot: " + IntToString(GetPlotFlag(oDoor)) + "."); + if(!ai_GetAIMode(oCreature, AI_MODE_OPEN_DOORS) && !bForce) return FALSE; + if(GetLocalInt(oDoor, AI_OBJECT_IN_USE)) return FALSE; + if(GetIsOpen(oDoor)) return FALSE; + string sTag = GetTag(oCreature); + if(GetIsTrapped(oDoor)) + { + if(GetTrapDetectedBy(oDoor, GetMaster(oCreature))) SetTrapDetectedBy(oDoor, oCreature); + if(GetTrapDetectedBy(oDoor, oCreature)) + { + if(GetLocalInt(oDoor, "AI_SAW_TRAP_" + sTag)) return FALSE; + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, "This " + GetName(oDoor) + " is trapped!", TRUE)); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oDoor, "AI_SAW_TRAP_" + sTag, TRUE); + return FALSE; + } + } + if(GetLocked(oDoor)) + { + if(GetLocalInt(oDoor, "AI_LOCKED_" + sTag)) return FALSE; + AssignCommand(oCreature, ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, "This " + GetName(oDoor) + " is locked!", TRUE))); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oDoor, "AI_LOCKED_" + sTag, TRUE); + return FALSE; + } + SetLocalInt(oDoor, AI_OBJECT_IN_USE, TRUE); + DelayCommand(18.0, DeleteLocalInt(oDoor, AI_OBJECT_IN_USE)); + AssignCommand(oCreature, ActionOpenDoor(oDoor, TRUE)); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oDoor, AI_OBJECT_IN_USE))); + return TRUE; +} +void ai_ActionCheckNearbyObjects(object oCreature) +{ + if(ai_GetIsBusy(oCreature)) return; + ai_CheckNearbyObjects(oCreature); +} +int ai_CheckNearbyObjects(object oCreature) +{ + object oMaster = ai_GetPlayerMaster(oCreature); + location lMaster = GetLocation(oMaster); + int nObjectType, bIgnore; + int nFilter = OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_TRIGGER | OBJECT_TYPE_ITEM; + float fLockRange, fDoorRange, fLootRange, fObjectDistance; + float fTrapRange = GetLocalFloat(oCreature, AI_TRAP_CHECK_RANGE); + if(ai_GetAIMode(oCreature, AI_MODE_PICK_LOCKS) || + ai_GetAIMode(oCreature, AI_MODE_BASH_LOCKS)) fLockRange = GetLocalFloat(oCreature, AI_LOCK_CHECK_RANGE); + if(ai_GetAIMode(oCreature, AI_MODE_PICKUP_ITEMS)) fLootRange = GetLocalFloat(oCreature, AI_LOOT_CHECK_RANGE); + if(ai_GetAIMode(oCreature, AI_MODE_OPEN_DOORS)) fDoorRange = GetLocalFloat(oCreature, AI_OPEN_DOORS_RANGE); + if(AI_DEBUG && fTrapRange != 0.0) ai_Debug("0i_actions", "1579", " Checking " + FloatToString(fTrapRange, 0, 0) + " foot area for traps."); + if(AI_DEBUG && fLootRange != 0.0) ai_Debug("0i_actions", "1580", " Checking " + FloatToString(fLootRange, 0, 0) + " foot area for traps."); + if(AI_DEBUG && fLockRange != 0.0) ai_Debug("0i_actions", "1581", " Checking " + FloatToString(fLockRange, 0, 0) + " foot area for locks."); + if(AI_DEBUG && fDoorRange != 0.0) ai_Debug("0i_actions", "1582", " Checking " + FloatToString(fDoorRange, 0, 0) + " foot area for doors."); + float fLongestRange = fTrapRange; + vector vCreature = GetPositionFromLocation(GetLocation(oCreature)); + if(fLongestRange < fLootRange) fLongestRange = fLootRange; + if(fLongestRange < fLockRange) fLongestRange = fLockRange; + if(fLongestRange < fDoorRange) fLongestRange = fDoorRange; + object oObject = GetFirstObjectInShape(SHAPE_SPHERE, fLongestRange, lMaster, TRUE, nFilter); + while(oObject != OBJECT_INVALID) + { + fObjectDistance = GetDistanceBetween(oMaster, oObject); + if(AI_DEBUG) ai_Debug("0i_actions", "1651", "Checking Nearby Objects: " + + GetName(oObject) + " fDistance: " + FloatToString(fObjectDistance, 0, 2)); + if(GetTrapDetectedBy(oObject, oCreature)) + { + if(fTrapRange >= fObjectDistance) + { + if(ai_ReactToTrap(oCreature, oObject)) return TRUE; + } + } + if(GetLocked(oObject)) + { + if(fLockRange >= fObjectDistance) + { + if(ai_AttemptToByPassLock(oCreature, oObject)) return TRUE; + } + } + nObjectType = GetObjectType(oObject); + if(fDoorRange >= fObjectDistance && nObjectType == OBJECT_TYPE_DOOR) + { + if(ai_AttemptToOpenDoor(oCreature, oObject)) return TRUE; + } + if(fLootRange >= fObjectDistance) + { + if(nObjectType == OBJECT_TYPE_PLACEABLE) + { + if(!GetLocalInt(oObject, AI_OBJECT_IN_USE) && + ai_IsContainerLootable(oCreature, oObject)) + { + if(GetLocked(oObject)) + { + string sTag = GetTag(oCreature); + if(GetLocalInt(oObject, "AI_LOCKED_" + sTag)) return FALSE; + AssignCommand(oCreature, ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, "This " + GetName(oObject) + " is locked!", TRUE))); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oObject, "AI_LOCKED_" + sTag, TRUE); + return FALSE; + } + ai_ClearCreatureActions(); + ActionMoveToObject(oObject, TRUE); + AssignCommand(oCreature, ActionDoCommand(ai_SearchObject(oCreature, oObject, oMaster))); + return TRUE; + } + } + else if(nObjectType == OBJECT_TYPE_ITEM) + { + if(ai_ShouldIPickItUp(oCreature, oObject)) + { + ActionPickUpItem(oObject); + return TRUE; + } + } + } + oObject = GetNextObjectInShape(SHAPE_SPHERE, fLongestRange, lMaster, TRUE, nFilter); + } + return FALSE; +} +void ai_DetermineSpecialBehavior(object oCreature) +{ + object oTarget = ai_GetNearestEnemy(oCreature, 1, 7, 7, -1, -1, TRUE); + if(ai_GetBehaviorState(NW_FLAG_BEHAVIOR_OMNIVORE)) + { + if(ai_GetIsInCombat(oCreature)) ai_DoMonsterCombatRound(oTarget); + // * if not attacking, then wander. + else + { + AssignCommand(oCreature, ai_ClearCreatureActions()); + AssignCommand(oCreature, ActionRandomWalk()); + return; + } + } + else if(ai_GetBehaviorState(NW_FLAG_BEHAVIOR_HERBIVORE)) + { + if(GetIsObjectValid(ai_GetAttackedTarget(oCreature, TRUE, TRUE))) + { + if(oTarget != OBJECT_INVALID && GetDistanceBetween(oCreature, oTarget) <= 6.0) + { + if(!GetIsFriend(oTarget)) + { + if(GetLevelByClass(CLASS_TYPE_DRUID, oTarget) == 0 && GetLevelByClass(CLASS_TYPE_RANGER, oTarget) == 0) + { + SetLocalString(oCreature, AI_COMBAT_SCRIPT, "ai_coward"); + ActionMoveAwayFromObject(oTarget, TRUE, AI_RANGE_LONG); + } + } + } + } + else if(!IsInConversation(OBJECT_SELF)) + { + AssignCommand(oCreature, ai_ClearCreatureActions()); + AssignCommand(oCreature, ActionRandomWalk()); + return; + } + } +} +//This function is used only because ActionDoCommand can only accept void functions +void ai_CreateSignPostNPC(string sTag, location lLocal) +{ + CreateObject(OBJECT_TYPE_CREATURE, sTag, lLocal); +} +void ai_ActivateFleeToExit(object oCreature) +{ + //minor optimizations - only grab these variables when actually needed + //can make for larger code, but it's faster + //object oExitWay = GetWaypointByTag("EXIT_" + GetTag(OBJECT_SELF)); + //location lLocal = GetLocalLocation(OBJECT_SELF, "NW_GENERIC_START_POINT"); + //string sTag = GetTag(OBJECT_SELF); + int nPlot = GetLocalInt(oCreature, "NW_GENERIC_MASTER"); + if(nPlot & NW_FLAG_TELEPORT_RETURN || nPlot & NW_FLAG_TELEPORT_LEAVE) + { + effect eVis = EffectVisualEffect(VFX_IMP_UNSUMMON); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oCreature); + if(nPlot & NW_FLAG_TELEPORT_RETURN) + { + location lLocal = GetLocalLocation(oCreature, "NW_GENERIC_START_POINT"); + string sTag = GetTag(oCreature); + DelayCommand(6.0, AssignCommand(oCreature, ActionDoCommand(ai_CreateSignPostNPC(sTag, lLocal)))); + } + AssignCommand(oCreature, ActionDoCommand(DestroyObject(oCreature, 0.75))); + } + else + { + if(nPlot & NW_FLAG_ESCAPE_LEAVE) + { + object oExitWay = GetWaypointByTag("EXIT_" + GetTag(oCreature)); + ActionMoveToObject(oExitWay, TRUE); + AssignCommand(oCreature, ActionDoCommand(DestroyObject(oCreature, 1.0))); + } + else if(nPlot & NW_FLAG_ESCAPE_RETURN) + { + string sTag = GetTag(oCreature); + object oExitWay = GetWaypointByTag("EXIT_" + sTag); + ActionMoveToObject(oExitWay, TRUE); + location lLocal = GetLocalLocation(oCreature, "NW_GENERIC_START_POINT"); + DelayCommand(6.0, AssignCommand(oCreature, ActionDoCommand(ai_CreateSignPostNPC(sTag, lLocal)))); + AssignCommand(oCreature, ActionDoCommand(DestroyObject(oCreature, 1.0))); + } + } +} +int ai_GetFleeToExit(object oCreature) +{ + int nPlot = GetLocalInt(oCreature, "NW_GENERIC_MASTER"); + if(nPlot & NW_FLAG_ESCAPE_RETURN) return TRUE; + else if(nPlot & NW_FLAG_ESCAPE_LEAVE) return TRUE; + else if(nPlot & NW_FLAG_TELEPORT_RETURN) return TRUE; + else if(nPlot & NW_FLAG_TELEPORT_LEAVE) return TRUE; + return FALSE; +} +void ai_ActionInitialization() +{ + SetAnimationCondition(NW_ANIM_FLAG_IS_ACTIVE); + SetAnimationCondition(NW_ANIM_FLAG_INITIALIZED); + SetLocalLocation(OBJECT_SELF, "ANIM_START_LOCATION", GetLocation(OBJECT_SELF)); +} +// Start interacting with a placeable object +void ai_ActionStartInteracting(object oPlaceable) +{ + SetAnimationCondition(NW_ANIM_FLAG_IS_INTERACTING); + ActionMoveToObject(oPlaceable, FALSE, DISTANCE_TINY); + ActionDoCommand(SetFacingPoint(GetPosition(oPlaceable))); + SetCurrentInteractionTarget(oPlaceable); + AnimActionPlayRandomInteractAnimation(oPlaceable); +} + +void ai_ActionStopInteracting() +{ + AnimActionRandomMoveAway(GetCurrentInteractionTarget(), DISTANCE_LARGE); + SetCurrentInteractionTarget(OBJECT_INVALID); + SetAnimationCondition(NW_ANIM_FLAG_IS_INTERACTING, FALSE); + AnimActionTurnAround(); + AnimActionPlayRandomAnimation(); +} + +// Start talking with a friend +void ai_ActionStartTalking(object oFriend, int nHDiff=0) +{ + object oMe = OBJECT_SELF; + ActionMoveToObject(oFriend, FALSE, DISTANCE_TINY); + AnimActionPlayRandomGreeting(nHDiff); + AssignCommand(oFriend, ActionMoveToObject(oMe, FALSE, DISTANCE_TINY)); + AssignCommand(oFriend, AnimActionPlayRandomGreeting(0 - nHDiff)); + SetCurrentFriend(oFriend); + AssignCommand(oFriend, SetCurrentFriend(oMe)); + ActionDoCommand(SetFacingPoint(GetPosition(oFriend))); + AssignCommand(oFriend, ActionDoCommand(SetFacingPoint(GetPosition(oMe)))); + SetAnimationCondition(NW_ANIM_FLAG_IS_TALKING); + SetAnimationCondition(NW_ANIM_FLAG_IS_TALKING, TRUE, oFriend); +} +void ai_ActionStopTalking(object oFriend, int nHDiff=0) +{ + object oMe = OBJECT_SELF; + AnimActionPlayRandomGoodbye(nHDiff); + AnimActionRandomMoveAway(oFriend, DISTANCE_LARGE); + AssignCommand(oFriend, AnimActionPlayRandomGoodbye(0 - nHDiff)); + AssignCommand(oFriend, AnimActionRandomMoveAway(oMe, DISTANCE_HUGE)); + SetAnimationCondition(NW_ANIM_FLAG_IS_TALKING, FALSE); + SetAnimationCondition(NW_ANIM_FLAG_IS_TALKING, FALSE, oFriend); +} +object ai_GetRandomFriend(float fMaxDistance) +{ + object oCreature = OBJECT_SELF; + location lStartLocation = GetLocalLocation(oCreature, "ANIM_START_LOCATION"); + object oFriend = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_FRIEND, + oCreature, d2(), + CREATURE_TYPE_PERCEPTION, + PERCEPTION_SEEN); + //SendMessageToPC(GetFirstPC(), " 0i_actions, 1748 oFriend: " + GetName(oFriend) + + // " AnimationCondition: " + IntToString(GetAnimationCondition(NW_ANIM_FLAG_IS_ACTIVE, oFriend)) + + // " Conversation: " + IntToString(IsInConversation(oFriend)) + + // " Combat: " + IntToString(GetIsInCombat(oFriend)) + + // " Distance: " + FloatToString(GetDistanceBetweenLocations(GetLocation(oFriend), lStartLocation), 0,0 )); + if(fMaxDistance > 20.0) fMaxDistance = 20.0; + if(GetIsObjectValid(oFriend) + && !GetIsPC(oFriend) + && !GetAnimationCondition(NW_ANIM_FLAG_IS_TALKING, oFriend) + && !IsInConversation(oFriend) + && !GetIsInCombat(oFriend) + && GetDistanceBetweenLocations(GetLocation(oFriend), lStartLocation) <= fMaxDistance) + { + return oFriend; + } + + return OBJECT_INVALID; +} +int ai_ActionFindFriend(float fMaxDistance) +{ + // Try and find a friend to talk to. + object oFriend = ai_GetRandomFriend(fMaxDistance); + //SendMessageToPC(GetFirstPC(), GetName(oFriend) + " TALKING: " + IntToString(GetAnimationCondition(NW_ANIM_FLAG_IS_TALKING, oFriend))); + if(GetIsObjectValid(oFriend) && !GetAnimationCondition(NW_ANIM_FLAG_IS_TALKING, oFriend)) + { + int nHDiff = GetHitDice(OBJECT_SELF) - GetHitDice(oFriend); + ai_ActionStartTalking(oFriend, nHDiff); + return TRUE; + } + return FALSE; +} +object ai_GetRandomObjectbyTag(string sTag, float fMaxDistance) +{ + int nIndex; + if(fMaxDistance < DISTANCE_MEDIUM) nIndex = d4(); + else if (fMaxDistance < DISTANCE_HUGE) nIndex = d8(); + else nIndex = d10(); + location lStartLocation = GetLocalLocation(OBJECT_SELF, "ANIM_START_LOCATION"); + if(fMaxDistance > 20.0) fMaxDistance = 20.0; + object oObject = GetNearestObjectToLocation(OBJECT_TYPE_PLACEABLE, lStartLocation, nIndex); + while(nIndex > 0) + { + if(GetTag(oObject) == sTag && + GetDistanceBetweenLocations(GetLocation(oObject), lStartLocation) <= fMaxDistance) break; + oObject = GetNearestObjectToLocation(OBJECT_TYPE_PLACEABLE, lStartLocation, --nIndex); + } + if(GetIsObjectValid(oObject)) + return oObject; + return OBJECT_INVALID; +} +int ai_ActionSitInChair(float fMaxDistance) +{ + object oChair = GetRandomObjectByTag("Chair", fMaxDistance); + if (GetIsObjectValid(oChair) && + !GetIsObjectValid(GetSittingCreature(oChair))) + { + ActionSit(oChair); + SetAnimationCondition(NW_ANIM_FLAG_IS_INTERACTING); + return TRUE; + } + return FALSE; +} +object ai_GetRandomUseableObject(float fMaxDistance) +{ + int nIndex; + if(fMaxDistance < DISTANCE_MEDIUM) nIndex = d2(); + else if (fMaxDistance < DISTANCE_HUGE) nIndex = d4(); + else nIndex = d6(); + location lStartLocation = GetLocalLocation(OBJECT_SELF, "ANIM_START_LOCATION"); + if(fMaxDistance > 20.0) fMaxDistance = 20.0; + object oObject = GetNearestObjectToLocation(OBJECT_TYPE_PLACEABLE, lStartLocation, nIndex); + while(nIndex > 0) + { + if(GetUseableFlag(oObject) && !GetLocked(oObject) && + GetDistanceBetweenLocations(GetLocation(oObject), lStartLocation) <= fMaxDistance) break; + oObject = GetNearestObjectToLocation(OBJECT_TYPE_PLACEABLE, lStartLocation, --nIndex); + } + if(GetIsObjectValid(oObject)) + return oObject; + return OBJECT_INVALID; +} +int ai_ActionFindPlaceable(float fMaxDistance) +{ + object oPlaceable = ai_GetRandomUseableObject(fMaxDistance); + if(GetIsObjectValid(oPlaceable)) + { + ai_ActionStartInteracting(oPlaceable); + return 1; + } + return 0; +} +int ai_ActionCheckDoor(float fMaxDistance) +{ + int nIndex = 1; + object oCreature = OBJECT_SELF; + location lStartLocation = GetLocalLocation(oCreature, "ANIM_START_LOCATION"); + if(fMaxDistance > 20.0) fMaxDistance = 20.0; + object oDoor = GetNearestObject(OBJECT_TYPE_DOOR, oCreature); + while(oDoor != OBJECT_INVALID) + { + if(GetDistanceBetweenLocations(GetLocation(oDoor), lStartLocation) <= fMaxDistance) + { + // Make sure everyone doesn't run to close or open the same door. + if(!GetLocalInt(oDoor, "DOOR_INTERACTION")) + { + if(GetIsOpen(oDoor)) + { + //SendMessageToPC(GetFirstPC(), GetName(oCreature) + + // " Closing " + GetName(oDoor) + "."); + SetLocalInt(oDoor, "DOOR_INTERACTION", TRUE); + ActionCloseDoor(oDoor); + AssignCommand(oDoor, ActionDoCommand(SetLocalInt(oDoor, "DOOR_INTERACTION", FALSE))); + return TRUE; + } + else if(GetLocalInt(GetModule(), AI_RULE_OPEN_DOORS)) + { + //SendMessageToPC(GetFirstPC(), GetName(oDoor) + " Locked: " + + // IntToString(GetLocked(oDoor)) + " Trapped: " + + // IntToString(GetIsTrapped(oDoor)) + + // " Plot: " + IntToString(GetPlotFlag(oDoor))); + if(!GetLocked(oDoor) && + !GetIsTrapped(oDoor) && + !GetPlotFlag(oDoor)) + { + //SendMessageToPC(GetFirstPC(), GetName(oCreature) + + // " Opening " + GetName(oDoor) + "."); + SetLocalInt(oDoor, "DOOR_INTERACTION", TRUE); + ActionOpenDoor(oDoor); + // If a door has been opened lets not go right behind and close for a minute. + DelayCommand(60.0, SetLocalInt(oDoor, "DOOR_INTERACTION", FALSE)); + return TRUE; + } + } + } + } + oDoor = GetNearestObject(OBJECT_TYPE_DOOR, oCreature, ++nIndex); + } + return FALSE; +} +int ai_ActionInteraction() +{ + // If we're talking, either keep going or stop. + // Low prob of stopping, since both parties have + // a chance and conversations are cool. + if(GetAnimationCondition(NW_ANIM_FLAG_IS_TALKING)) + { + object oFriend = GetCurrentFriend(); + //SendMessageToPC(GetFirstPC(), GetName(OBJECT_SELF) + " Is talking to " + GetName(oFriend)); + int nHDiff = GetHitDice(OBJECT_SELF) - GetHitDice(oFriend); + if(Random(100) < 20) + { + //SendMessageToPC(GetFirstPC(), GetName(OBJECT_SELF) + " I'm done talking!"); + ai_ActionStopTalking(oFriend, nHDiff); + return TRUE; + } + AnimActionPlayRandomTalkAnimation(nHDiff); + return TRUE; + } + // If we're interacting with a placeable, either keep going or stop. + // High probability of stopping, since looks silly to + // constantly turn something on-and-off. + if(GetAnimationCondition(NW_ANIM_FLAG_IS_INTERACTING)) + { + //SendMessageToPC(GetFirstPC(), GetName(OBJECT_SELF) + " Is interacting."); + if(Random(100) < 40) + { + //SendMessageToPC(GetFirstPC(), GetName(OBJECT_SELF) + " I'm done interacting!"); + ai_ActionStopInteracting(); + return TRUE; + } + AnimActionPlayRandomInteractAnimation(GetCurrentInteractionTarget()); + return TRUE; + } + return FALSE; +} +location ai_GetWalkingLocation(object oSource, float fDistance) +{ + location lStart = GetLocation(oSource); + // Try to move in a north/south/east/west direction that will allow better + // movement around the map! + float fFacing = GetFacing(oSource); + if(Random(100) < 25) fFacing = IntToFloat(Random(360)); + float fAngle; + if(fFacing > 315.0 || fFacing < 45.0) fAngle = DIRECTION_EAST; + else if(fFacing < 135.0) fAngle = DIRECTION_NORTH; + else if(fFacing < 225.0) fAngle = DIRECTION_WEST; + else fAngle = DIRECTION_SOUTH; + fAngle += IntToFloat(Random(20) - 10); + float fOrientation = fAngle; + return GenerateNewLocationFromLocation(lStart, fDistance, fAngle, fOrientation); +} +void ai_ActionRandomWalk(float fMaxDistance) +{ + // If we stay within our alloted distance then we can walk to the new location. + location lStartLocation = GetLocalLocation(OBJECT_SELF, "ANIM_START_LOCATION"); + int nRandom = FloatToInt(fMaxDistance); + if(nRandom > 20) nRandom = 20; + float fRandom = IntToFloat(Random(nRandom) + 1); + location lNewLocation = ai_GetWalkingLocation(OBJECT_SELF, fRandom); + if(AI_DEBUG) ai_Debug("0i_actions", "2092", GetName(OBJECT_SELF) + " is walking " + + FloatToString(GetDistanceBetweenLocations(lNewLocation, lStartLocation), 0, 0) + + " distance of fMaxDistance: " + FloatToString(fMaxDistance, 0, 0)); + ActionMoveToLocation(lNewLocation); +} +void ai_Actions() +{ + float fMaxDistance = GetLocalFloat(GetModule(), AI_RULE_WANDER_DISTANCE); + // Are we interacting? If so continue else see what else there is to do. + if(ai_ActionInteraction()) return; + // If we got here, we're not busy + ClearAllActions(); + // Check for chance to do an action to keep things interesting. + int nRoll = Random(100); + if(fMaxDistance < 2.0) + { + if(nRoll < 51) AnimActionPlayRandomAnimation(); + return; + } + int nRace = GetRacialType(OBJECT_SELF); + if(nRace != RACIAL_TYPE_ABERRATION && nRace != RACIAL_TYPE_ANIMAL && + nRace != RACIAL_TYPE_BEAST && nRace != RACIAL_TYPE_MAGICAL_BEAST && + nRace != RACIAL_TYPE_OOZE && nRace != RACIAL_TYPE_VERMIN) + { + if(nRoll < 5) if(ai_ActionSitInChair(fMaxDistance)) return; + // Open or close a door + if(nRoll < 20) if(ai_ActionCheckDoor(fMaxDistance)) return; + // Fiddle with a placeable + if(nRoll < 40) if(ai_ActionFindPlaceable(fMaxDistance)) return; + // Start talking to a friend + if(nRoll < 50) if(ai_ActionFindFriend(fMaxDistance)) return; + } + // Lets walk around. + if(nRoll < 80) + { + ai_ActionRandomWalk(fMaxDistance); + return; + } + // If we find nothing interesting to do then just stay put and look interesting. + AnimActionPlayRandomAnimation(); +} +int ai_CheckCurrentAction() +{ + int nAction = GetCurrentAction(); + if(nAction == ACTION_SIT) + { + // low prob of getting up, so we don't bop up and down constantly + if (Random(10) == 0) + { + AnimActionGetUpFromChair(); + return TRUE; + } + } + else if(nAction != ACTION_INVALID) + { + // Sometimes we cannot do an action so lets break out sometimes. + if((nAction == ACTION_CLOSEDOOR || + nAction == ACTION_OPENDOOR || + nAction == ACTION_MOVETOPOINT) && Random(100) < 20) return FALSE; + // we're doing *something*, don't switch + //AnimDebug("performing action"); + return TRUE; + } + return FALSE; +} +void ai_AmbientAnimations() +{ + if(!GetAnimationCondition(NW_ANIM_FLAG_INITIALIZED)) ai_ActionInitialization(); + // Check if we should turn off + if(!CheckIsAnimActive(OBJECT_SELF)) return; + // Check current actions so we don't interrupt something in progress + if(ai_CheckCurrentAction()) return; + // First check: go back to starting position and rest if we are hurt + //if(AnimActionRest()) return; + // If we get here then lets go see what we can do! + ai_Actions(); +} diff --git a/src/module/nss/0i_associates.nss b/src/module/nss/0i_associates.nss new file mode 100644 index 0000000..2309160 --- /dev/null +++ b/src/module/nss/0i_associates.nss @@ -0,0 +1,2192 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0i_associates + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Scripts used for Associates. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +#include "nw_inc_gff" +// Return TRUE if oCreature can attack based on current modes and actions. +int ai_CanIAttack(object oCreature); +// Returns the nearest locked object from oMaster. +object ai_GetNearestLockedObject(object oCreature); +// Will look for the oTarget or go to the oSpeaker depending on the situation. +void ai_FindTheEnemy(object oCreature, object oSpeaker, object oTarget, int bMonster); +// Selects the correct response base on nCommand from oCommander. +// These are given from either a radial menu option or voice command. +void ai_SelectAssociateCommand(object oCreature, object oCommander, int nCommand); +// Set nAction for the caller to pass to their associates. i.e. For henchmans summons. +void ai_PassActionToAssociates(object oCreature, int nAction, int bStatus = TRUE); +// Set Set the AI Mode to oAssociate and their associates. +void ai_PassAIModeToAssociates(object oAssociate, int nAIMode, int bStatus = TRUE); +// Set oCreature's ai scripts based on its first class or the variable "AI_DEFAULT_SCRIPT". +// bSetBasicAIScript set to TRUE will skip defensive and ambush tactic type scripts. +void ai_SetAssociateAIScript(object oCreature, int bCheckTacticScripts = TRUE); +// Returns TRUE if oCreature can speak. +int ai_CanISpeak(object oCreature); +// Cleansup any henchman actions and then removes them from the PC's faction. +void ai_FireHenchman(object oPC, object oHenchman); +// Will cast defensive spells (Buffs) on oPC's party from oCreature. +void ai_HenchmanCastDefensiveSpells(object oCreature, object oPC); +// Returns TRUE if we are starting combat due to an enemy being near. +// This should be checked after any "is in combat" checks. +int ai_CheckForCombat(object oCreature, int bMonster); +// Checks all perceived creatures to see if we should calculate a combat round +// or start combat for Associates. +void ai_AssociateEvaluateNewThreat(object oCreature, object oLastPerceived, string sPerception); +// Checks all perceived creatures to see if we should calculate a combat round +// or start combat for Monsters. +void ai_MonsterEvaluateNewThreat(object oCreature, object oLastPerceived, string sPerception); +// Copies all int, float, and string variables from oOldObject to oNewObject. +void ai_CopyObjectVariables(object oOldObject, object oNewObject); +//****************************************************************************** +//********************* Creature event scripts ********************************* +//****************************************************************************** + +// Add to nw_ch_aca OnRested event script of henchman. +void ai_OnRested(object oCreature); + +//****************************************************************************** +//******************* Associate AI option scripts ****************************** +//****************************************************************************** + +// Increments/Decrements the following distance of associates. +void ai_FollowIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType); +// Turns on/off Ranged combat for oAssociate. +void ai_Ranged(object oPC, object oAssociate, string sAssociateType); +// Turns on/off Ignore enemy associates for oAssociate. +void ai_Ignore_Associates(object oPC, object oAssociate, string sAssociateType); +// Turns on/off Ignore floor traps for oAssociate. +void ai_Ignore_Traps(object oPC, object oAssociate, string sAssociateType); +// Turns on/off Search for oAssociate. +void ai_Search(object oPC, object oAssociate, string sAssociateType); +// Turns on/off Stealth for oAssociate. +void ai_Stealth(object oPC, object oAssociate, string sAssociateType); +// Turns on/off Open Doors for oAssociate. +void ai_OpenDoor(object oPC, object oAssociate, string sAssociateType); +// Turns on/off Picking/Bashing locks for oAssociate. +void ai_Locks(object oPC, object oAssociate, string sAssociateType, int nMode); +// Turns on/off Disarming of Traps for oAssociate. +void ai_Traps(object oPC, object oAssociate, string sAssociateType); +// Turns on/off the amount of speaking for oAssociate. +void ai_ReduceSpeech(object oPC, object oAssociate, string sAssociateType); +// Turns on/off use of offensive/defensive spells. +void ai_UseOffensiveMagic(object oPC, object oAssociate, int bDefensive, int bOffensive, string sAssociateType); +// Turns on/off magic use. +void ai_UseMagic(object oPC, object oAssociate, string sAssociateType); +// Turn Magic Item use on/off for oAssociates. +void ai_UseMagicItems(object oPC, object oAssociate, string sAssociateType); +// Adjusts loot options for oAssociate +void ai_Loot(object oPC, object oAssociate, string sAssociateType); +// Adjust loot options for oAssociate +void ai_Spontaneous(object oPC, object oAssociate, string sAssociateType); +// Increments/Decrements the magic use variable for the AI. +void ai_MagicIncrement(object oPC, object oAssociate, int nIncrement, string sAssociateType); +// Increments/Decrements the Loot Range use variable for the AI. +void ai_LootRangeIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType); +// Increments/Decrements the Lock Range use variable for the AI. +void ai_LockRangeIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType); +// Increments/Decrements the Trap Range use variable for the AI. +void ai_TrapRangeIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType); +// Increments/Decrements the Open Door Range use variable for the AI. +void ai_OpenDoorIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType); +// Saves a new AI script for oAssociate. +void ai_SaveAIScript(object oPC, object oAssociate, int nToken); +// Button action for buffing a PC. +void ai_Buff_Button(object oPC, object oAssociate, int nOption, string sAssociateType); +// Button action for setting healing ranges. +void ai_Heal_Button(object oPC, object oAssociate, int nIncrement, string sVar, string sAssociateType); +// Button action for turning healing on/off. +void ai_Heal_OnOff(object oPC, object oAssociate, string sAssociateType, int nMode); +// Button action for selecting a target to follow. +void ai_FollowTarget(object oPC, object oAssociate); +// Code to make oCreature guard oMaster. +void ai_Philos_Guard(object oMaster, object oCreature); +// Code to make OBJECT_SELF follow oMaster. +void ai_Philos_Follow(object oMaster); +// Code to make OBJECT_SELF hold at their location. +void ai_Philos_StandGround(object oMaster); +// Code to make oCreature attack the nearest enemy. +void ai_Philos_AttackNearest(object oMaster, object oCreature); +// Code to make oCreature turn search mode on. +void ai_Philos_SetSearch(object oMaster, object oCreature, string sAssociateType, int bTurnOn); +// Code to make oCreature turn stealth mode on. +void ai_Philos_SetStealth(object oMaster, object oCreature, string sAssociateType, int bTurnOn); +// Button action for giving commands to associates. +void ai_DoCommand(object oPC, object oAssociate, int nCommand); +// Button action to have associate do an action based on the target via OnPlayer Target event. +void ai_Action(object oPC, object oAssociate); +// Toggles between normal ai script and special tactic ai scripts. +void ai_AIScript(object oPC, object oAssociate, string sAssociate, int nToken); +// Has the PC select a Trap and then place it on the ground from an associate. +void ai_HavePCPlaceTrap(object oPC, object oAssociate); +// Jumps oAssociate to oPC, if oPC == oAssociate it jumps all oAssocites to oPC. +void ai_JumpToPC(object oPC, object oAssociate); +// Allow oAssociate to use no clipping. +void ai_GhostMode(object oPC, object oAssociate, int nToken, string sAssociateType); +// Changes the camera view from either the player to the associate or back. +void ai_ChangeCameraView(object oPC, object oAssociate); +// Checks that the oAssociate is within sight and then opens the inventory. +void ai_OpenInventory(object oAssociate, object oPC); +// Executes an installed plugin. +void ai_Plugin_Execute(object oPC, string sElem, int bUser = 0); + +int ai_CanIAttack(object oCreature) +{ + if(AI_DEBUG) ai_Debug("0i_associate", "122", "Can I attack? Hold mode: " + + IntToString(ai_GetAIMode(oCreature, AI_MODE_STAND_GROUND)) + + " Follow mode: " + IntToString(ai_GetAIMode(oCreature, AI_MODE_FOLLOW)) + + " Action (19/4): " + IntToString(GetCurrentAction(oCreature))); + if(ai_GetIsCharacter(oCreature)) return TRUE; + int nAction = GetCurrentAction(oCreature); + return (!ai_GetAIMode(oCreature, AI_MODE_STAND_GROUND) && + !ai_GetAIMode(oCreature, AI_MODE_FOLLOW) && + nAction != ACTION_ITEMCASTSPELL && + nAction != ACTION_CASTSPELL); +} +object ai_GetNearestLockedObject(object oCreature) +{ + int nCnt = 1; + object oMaster = GetMaster(oCreature); + float fRange = GetLocalFloat(oCreature, AI_TRAP_CHECK_RANGE); + location lCreature = GetLocation(oCreature); + object oObject = GetNearestObjectToLocation(OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, lCreature, nCnt); + while (oObject != OBJECT_INVALID || GetDistanceBetween(oMaster, oObject) > fRange) + { + if(GetLocked(oObject) && ai_GetIsInLineOfSight(oMaster, oObject)) return oObject; + oObject = GetNearestObjectToLocation(OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, lCreature, ++nCnt); + } + return OBJECT_INVALID; +} +void ai_FindTheEnemy(object oCreature, object oSpeaker, object oTarget, int bMonster) +{ + if(GetLocalInt(oCreature, AI_AM_I_SEARCHING)) return; + if(oSpeaker == oTarget && d100() < 34) + { + // Let them know we heard something in the distance!. + if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) + { + string sSpeak = "I heard something!"; + int nRoll = d8(); + if(nRoll == 1) sSpeak = "Did you hear that?"; + if(nRoll == 2) sSpeak = "What was that noise?"; + if(nRoll == 3) sSpeak = "Something is moving."; + if(nRoll == 4) sSpeak = "Lookout! I heard a noise."; + if(nRoll == 5) sSpeak = "Listen! We have company."; + AssignCommand(oCreature, ai_HaveCreatureSpeak(oCreature, 0, sSpeak)); + } + ai_HaveCreatureSpeak(oCreature, 8, ":43:6:9:10:23:42:"); + } + if(GetLocalString(oCreature, AI_COMBAT_SCRIPT) == "ai_a_peaceful" || + GetLocalString(oCreature, AI_COMBAT_SCRIPT) == "ai_coward") return; + float fDistance, fPerceptionDistance; + if(bMonster) + { + // Check distance from the creature hearing this and the target. + fDistance = GetDistanceBetween(oCreature, oTarget); + fPerceptionDistance = GetLocalFloat(GetModule(), AI_RULE_PERCEPTION_DISTANCE); + } + else + { + // We want to use the distance between the PC and target not us. + fDistance = GetDistanceBetween(GetMaster(), oTarget); + fPerceptionDistance = GetLocalFloat(oCreature, AI_ASSOC_PERCEPTION_DISTANCE); + } + if(AI_DEBUG) ai_Debug("0i_associates", "175", " fDistance: " + FloatToString(fDistance, 0, 2) + + " fPerceptionDistance: " + FloatToString(fPerceptionDistance, 0, 2) + + " Hiding? " + IntToString(GetStealthMode(oTarget))); + if(fDistance <= fPerceptionDistance) + { + SetLocalInt(oCreature, AI_AM_I_SEARCHING, TRUE); + if(LineOfSightObject(oCreature, oTarget)) + { + if(fDistance > AI_RANGE_CLOSE) + { + int bMoveForward = TRUE; + // We check this because if the enemy is moving or has not + // started acting then we don't want to move up on them as they + // might move towards us! Just attack! Only sneak attack if they are busy. + int nAction = GetCurrentAction(oTarget); + if(AI_DEBUG) ai_Debug("0i_associates", "189", GetName(oTarget) + " current action: " + IntToString(nAction)); + if(nAction == ACTION_MOVETOPOINT || + nAction == ACTION_INVALID || + nAction == ACTION_RANDOMWALK) bMoveForward = FALSE; + // If they are attacking make sure it is in melee? + // If not then don't move since they might be moving toward us. + if(nAction == ACTION_ATTACKOBJECT) + { + if(!ai_GetNumOfEnemiesInRange(oTarget)) bMoveForward = FALSE; + } + if(bMoveForward) + { + if(AI_DEBUG) ai_Debug("0i_associates", "201", "Running towards combat to engage " + GetName(oTarget)); + ActionMoveToObject(oTarget, TRUE, AI_RANGE_CLOSE); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oCreature, AI_AM_I_SEARCHING))); + return; + } + if(AI_DEBUG) ai_Debug("0i_associates", "207", "Searching for " + GetName(oTarget) + " while moving towards " + GetName(oSpeaker)); + SetActionMode(oCreature, ACTION_MODE_DETECT, TRUE); + ActionMoveToObject(oSpeaker); + return; + } + if(AI_DEBUG) ai_Debug("0i_associates", "176", "Moving and searching for " + GetName(oTarget)); + SetActionMode(oCreature, ACTION_MODE_DETECT, TRUE); + ActionMoveToLocation(GetLocation(oTarget), FALSE); + //ActionMoveToObject(oTarget, FALSE, AI_RANGE_MELEE); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oCreature, AI_AM_I_SEARCHING))); + return; + } + if(AI_DEBUG) ai_Debug("0i_associates", "218", "No line of sight for " + GetName(oTarget) + ". Moving towards " + GetName(oSpeaker)); + ActionMoveToObject(oSpeaker, TRUE); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oCreature, AI_AM_I_SEARCHING))); + } + +} +void ai_ReactToAssociate(object oCreature, object oCommander, int bMonster) +{ + object oTarget = GetLocalObject(oCommander, AI_MY_TARGET); + if (oTarget == OBJECT_INVALID) return; + if(ai_GetIsInCombat(oCreature)) + { + if(oCommander == GetMaster(oCreature) && ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) + { + ai_DoAssociateCombatRound(oCreature, oTarget); + } + else ai_DoAssociateCombatRound(oCreature); + return; + } + ai_FindTheEnemy(oCreature, oCommander, oTarget, bMonster); +} +void ai_SelectAssociateCommand(object oCreature, object oCommander, int nCommand) +{ + object oMaster = GetMaster(oCreature); + // These nCommands can be issued even when the caller is busy. + switch(nCommand) + { + // Master is being attacked by the enemy. + case ASSOCIATE_COMMAND_MASTERGOINGTOBEATTACKED: + { + object oAttacker = GetGoingToBeAttackedBy(oMaster); + if(AI_DEBUG) ai_Debug("0i_associate", "120", GetName(oMaster) + " has been attack by " + + GetName(GetGoingToBeAttackedBy(oMaster)) + "!"); + // Used to set who monsters are attacking. + int nAction = GetCurrentAction(oAttacker); + if(nAction == ACTION_ATTACKOBJECT) SetLocalObject(oAttacker, AI_ATTACKED_PHYSICAL, oMaster); + else if(nAction == ACTION_CASTSPELL || nAction == ACTION_ITEMCASTSPELL) + { + SetLocalObject(oAttacker, AI_ATTACKED_SPELL, oMaster); + } + if(!ai_GetIsBusy(oCreature) && ai_CanIAttack(oCreature)) + { + if(ai_GetIsInCombat(oCreature)) ai_DoAssociateCombatRound(oCreature); + else ai_FindTheEnemy(oCreature, oCommander, oAttacker, FALSE); + } + return; + } + // Menu used by a player to have the henchman follow them. + case ASSOCIATE_COMMAND_FOLLOWMASTER: + { + if(AI_DEBUG) ai_Debug("0i_associate", "135", GetName(oMaster) + " has commanded " + + GetName(oCreature) + " to FOLLOW."); + AssignCommand(oCreature, ai_Philos_Follow(oMaster)); + return; + } + // Menu used by a player to have the henchman go into NORMAL MODE. + // We also attack the nearest, this keeps henchman going into combat quickly. + case ASSOCIATE_COMMAND_ATTACKNEAREST: + { + if(AI_DEBUG) ai_Debug("0i_associates", "158", GetName(oMaster) + " has commanded " + + GetName(oCreature) + " to attack nearest(NORMAL MODE)."); + ai_Philos_AttackNearest(oMaster, oCreature); + return; + } + // Menu used by a player to have the henchman stay where they are standing. + case ASSOCIATE_COMMAND_STANDGROUND: + { + if(AI_DEBUG) ai_Debug("0i_associate", "189", GetName(oMaster) + " has commanded " + + GetName(OBJECT_SELF) + " to STANDGROUND."); + AssignCommand(oCreature, ai_Philos_StandGround(oMaster)); + return; + } + // Menu used by a player to have the henchman attack anyone who attacks them. + case ASSOCIATE_COMMAND_GUARDMASTER: + { + if(AI_DEBUG) ai_Debug("0i_associate", "211", GetName(oMaster) + " has commanded " + + GetName(oCreature) + " to GAURDMASTER."); + ai_Philos_Guard(oMaster, oCreature); + return; + } + // Menu used by a player to have the henchman heal them as soon as possible. + case ASSOCIATE_COMMAND_HEALMASTER: + { + // Player will be stuck with this variable if they are not using the AI. + DeleteLocalInt(oCommander, "AI_I_AM_BEING_HEALED"); + if(ai_GetIsInCombat(oCreature)) ai_TryHealingTalent(oCreature, ai_GetNumOfEnemiesInRange(oCreature), oCommander); + else AssignCommand(oCreature, ai_ActionTryHealing(oCreature, oCommander)); + return; + } + // Menu used by a player to toggle a henchmans casting options. + case ASSOCIATE_COMMAND_TOGGLECASTING: + { + if(ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC)) + { + ai_SetMagicMode(oCreature, AI_MAGIC_NO_MAGIC, FALSE); + ai_SetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING, TRUE); + ai_SetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING, FALSE); + ai_SendMessages(GetName(oCreature) + " will now cast defensive spells only.", AI_COLOR_GRAY, oCommander); + } + else if(ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + ai_SetMagicMode(oCreature, AI_MAGIC_NO_MAGIC, FALSE); + ai_SetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING, FALSE); + ai_SetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING, TRUE); + ai_SendMessages(GetName(oCreature) + " will now cast offensive spells only.", AI_COLOR_GRAY, oCommander); + } + else if(ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + ai_SetMagicMode(oCreature, AI_MAGIC_NO_MAGIC, FALSE); + ai_SetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING, FALSE); + ai_SetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING, FALSE); + ai_SendMessages(GetName(oCreature) + " will now cast any spell.", AI_COLOR_GRAY, oCommander); + } + else + { + ai_SetMagicMode(oCreature, AI_MAGIC_NO_MAGIC, TRUE); + ai_SetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING, FALSE); + ai_SetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING, FALSE); + ai_SendMessages(GetName(oCreature) + " will not use any magic.", AI_COLOR_GRAY, oCommander); + } + aiSaveAssociateModesToDb(oMaster, oCreature); + return; + } + } + // If we are busy then these nCommands are ignored. + if(!ai_GetIsBusy(oCreature)) + { + // Respond to shouts from friendly non-PCs only. + if (ai_CanIAttack(oCreature)) + { + if(nCommand == AI_ALLY_IS_WOUNDED) + { + if(ai_TryHealing(oCreature, oCommander)) return; + } + else if(nCommand == AI_ALLY_IS_DISEASED || + nCommand == AI_ALLY_IS_POISONED || + nCommand == AI_ALLY_IS_WEAK) + { + if(ai_HealSickness(oCreature, oCommander, oMaster, nCommand)) return; + } + // A friend sees an enemy. If we are not in combat lets seek them out too! + else if(nCommand == AI_ALLY_SEES_AN_ENEMY || + nCommand == AI_ALLY_HEARD_AN_ENEMY) + { + if(AI_DEBUG) ai_Debug("0i_associates", "282", GetName(oCreature) + " receives notice that " + + GetName(oCommander) + " has seen1/heard2(" + IntToString(nCommand) + " an enemy: " + + GetName(GetLocalObject(oCommander, AI_MY_TARGET)) + "!"); + ai_ReactToAssociate(oCreature, oCommander, FALSE); + return; + } + // A friend is in combat. Make some checks to see if we should help. + else if(nCommand == AI_ALLY_ATKED_BY_WEAPON || + nCommand == AI_ALLY_ATKED_BY_SPELL) + { + if(AI_DEBUG) ai_Debug("0i_associates", "291", GetName(oCreature) + " receives notice that " + + GetName(oCommander) + " was attacked by an enemy!" + + GetName(GetLocalObject(oCommander, AI_MY_TARGET)) + "!"); + ai_ReactToAssociate(oCreature, oCommander, FALSE); + return; + } + else if(nCommand == AI_ALLY_IS_DEAD) + { // Nothing at the moment. + if(AI_DEBUG) ai_Debug("0i_associates", "298", GetName(oCreature) + " receives notice that " + + GetName(oCommander) + " has died!"); + return; + } + } + switch(nCommand) + { + case ASSOCIATE_COMMAND_MASTERATTACKEDOTHER: + { + if(AI_DEBUG) ai_Debug("0i_associate", "307", GetName(oMaster) + " has attacked!"); + if(ai_CanIAttack(oCreature)) + { + if(ai_GetIsInCombat(oCreature)) ai_DoAssociateCombatRound(oCreature); + else ai_FindTheEnemy(oCreature, oCommander, ai_GetAttackedTarget(oCommander, TRUE, TRUE), FALSE); + } + return; + } + // Master tried to open a door or chest that is locked. + case ASSOCIATE_COMMAND_MASTERFAILEDLOCKPICK: + { + // In command mode we let the player tell us what to do. + if(ai_CanIAttack(oCreature)) + { + object oLock = ai_GetNearestLockedObject(oMaster); + //Check and see if our master want's us to open locks. + if(ai_GetAIMode(oCreature, AI_MODE_PICK_LOCKS) || + ai_GetAIMode(oCreature, AI_MODE_BASH_LOCKS)) + { + ai_SetAIMode(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_SetAIMode(oCreature, AI_MODE_STAND_GROUND, FALSE); + ai_AttemptToByPassLock(oCreature, oLock); + } + } + return; + } + // Master saw a trap. + case ASSOCIATE_COMMAND_MASTERSAWTRAP: + { + // In command mode we let the player tell us what to do. + if(ai_CanIAttack(oCreature)) + { + object oTrap = GetLastTrapDetected(oMaster); + // Sometimes GetLastTrapDetected seems to fail. + if(oTrap == OBJECT_INVALID) oTrap = GetNearestTrapToObject(oMaster, TRUE); + //Check and see if our master want's us to disarm the trap. + ai_SetAIMode(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_SetAIMode(oCreature, AI_MODE_STAND_GROUND, FALSE); + SetTrapDetectedBy(oTrap, oCreature); + ai_ReactToTrap(oCreature, oTrap); + } + return; + } + // Menu used by a player to toggle henchmans search on and off. + case ASSOCIATE_COMMAND_TOGGLESEARCH: + { + int bTurnOn = !ai_GetAIMode(oCreature, AI_MODE_AGGRESSIVE_SEARCH); + string sAssociateType = ai_GetAssociateType(oMaster, oCreature); + ai_Philos_SetSearch(oMaster, oCreature, sAssociateType, bTurnOn); + return; + } + // Menu used by a player to toggle henchmans stealth on and off. + case ASSOCIATE_COMMAND_TOGGLESTEALTH: + { + int bTurnOn = !ai_GetAIMode(oCreature, AI_MODE_AGGRESSIVE_STEALTH); + string sAssociateType = ai_GetAssociateType(oMaster, oCreature); + ai_Philos_SetStealth(oMaster, oCreature, sAssociateType, bTurnOn); + return; + } + // Menu used by a player to have the henchman try to bypass the nearest lock. + case ASSOCIATE_COMMAND_PICKLOCK: + { + ai_SetAIMode(oCreature, AI_MODE_DEFEND_MASTER, FALSE); + ai_SetAIMode(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_SetAIMode(oCreature, AI_MODE_STAND_GROUND, FALSE); + ai_SetAIMode(oCreature, AI_MODE_FOLLOW, FALSE); + object oLock = ai_GetNearestLockedObject(oMaster); + // Clear locked variable incase we tried already. + string sID = ObjectToString(oCreature); + SetLocalInt(oLock, "AI_LOCKED_" + sID, FALSE); + ai_AttemptToByPassLock(oCreature, oLock); + aiSaveAssociateModesToDb(oMaster, oCreature); + return; + } + // Menu used by a player to have the henchman try to disarm the nearest trap. + case ASSOCIATE_COMMAND_DISARMTRAP: + { + ai_SetAIMode(oCreature, AI_MODE_DEFEND_MASTER, FALSE); + ai_SetAIMode(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_SetAIMode(oCreature, AI_MODE_STAND_GROUND, FALSE); + ai_SetAIMode(oCreature, AI_MODE_FOLLOW, FALSE); + object oTrap = GetNearestTrapToObject(oMaster); + // Clear trapped variable incase we tried already. + string sID = ObjectToString(oCreature); + ai_ReactToTrap(oCreature, oTrap, TRUE); + aiSaveAssociateModesToDb(oMaster, oCreature); + return; + } + // Menu used by a player to open a henchmans inventory to give, move, or take. + case ASSOCIATE_COMMAND_INVENTORY: + { + if(AI_OPEN_INVENTORY) + { + ai_HaveCreatureSpeak(oCreature, 4, ":29:46:35:"); + OpenInventory(oCreature, oCommander); + } + // Can't look at an associate's inventory. + else + { + ai_HaveCreatureSpeak(oCreature, 6, ":47:30:36:8:48:"); + ai_SendMessages("You cannot open " + GetName(oCreature) + "'s inventory.", AI_COLOR_GRAY, oMaster); + } + return; + } + case ASSOCIATE_COMMAND_LEAVEPARTY: + { + if(AI_REMOVE_HENCHMAN_ON) + { + ai_ClearCreatureActions(); + ai_FireHenchman (GetPCSpeaker(), oCreature); + PlayVoiceChat (VOICE_CHAT_GOODBYE, oCreature); + } + } + } + } +} +void ai_PassActionToAssociates(object oCreature, int nAction, int bStatus = TRUE) +{ + int nAssociateType; + object oAssociate; + for(nAssociateType = 2; nAssociateType < 6; nAssociateType ++) + { + oAssociate = GetAssociate(nAssociateType); + if(oAssociate != OBJECT_INVALID) SetActionMode(oAssociate, nAction, bStatus); + } +} +void ai_PassToAssociate(object oAssociate, int nAIMode, int bStatus) +{ + ai_ClearCreatureActions(TRUE); + ai_SetAIMode(oAssociate, nAIMode, bStatus); +} +void ai_PassAIModeToAssociates(object oAssociate, int nAIMode, int bStatus = TRUE) +{ + ai_SetAIMode(oAssociate, nAIMode, bStatus); + int nAssociateType; + object oAssoc; + for(nAssociateType = 2; nAssociateType < 6; nAssociateType ++) + { + oAssoc = GetAssociate(nAssociateType, oAssociate); + if(oAssoc != OBJECT_INVALID) AssignCommand(oAssoc, ai_PassToAssociate(oAssoc, nAIMode, bStatus)); + } +} +void ai_SetAssociateAIScript(object oCreature, int bCheckTacticScripts = TRUE) +{ + string sCombatAI; + object oMaster = GetMaster(); + if(ai_GetIsCharacter(oMaster)) + { + string sAssociateType = ai_GetAssociateType(oMaster, oCreature); + json jAIData = ai_GetAssociateDbJson(oMaster, sAssociateType, "aidata"); + sCombatAI = JsonGetString(JsonArrayGet(jAIData, 8)); + } + else sCombatAI = GetLocalString(oCreature, AI_DEFAULT_SCRIPT); + int nAssociateType = GetAssociateType(oCreature); + if (nAssociateType == ASSOCIATE_TYPE_FAMILIAR && sCombatAI == "") + { + sCombatAI = "ai_a_default"; + } + else if(sCombatAI == "ai_coward") + { + SetLocalString(oCreature, AI_COMBAT_SCRIPT, sCombatAI); + return; + } + else if(bCheckTacticScripts && GetLocalInt(GetModule(), AI_RULE_AMBUSH)) + { + // They should have a skill ranks equal to their level + 1 to use a special AI. + int nSkillNeeded = GetHitDice(oCreature) + 1; + if(sCombatAI == "" || sCombatAI == "ai_a_ambusher") + { + // Ambusher: requires either Improved Invisibility or Invisibility. + if(GetHasSpell(SPELL_IMPROVED_INVISIBILITY, oCreature) || + GetHasSpell(SPELL_INVISIBILITY, oCreature)) + { + int bCast = ai_TryToCastSpell(oCreature, SPELL_IMPROVED_INVISIBILITY, oCreature); + if(!bCast) bCast = ai_TryToCastSpell(oCreature, SPELL_INVISIBILITY, oCreature); + if(bCast) + { + SetLocalString(oCreature, AI_COMBAT_SCRIPT, "ai_a_ambusher"); + return; + } + } + // Ambusher: Requires a Hide and Move silently skill equal to your level + 1. + else if(GetSkillRank(SKILL_HIDE, oCreature) >= nSkillNeeded && + GetSkillRank(SKILL_MOVE_SILENTLY, oCreature) >= nSkillNeeded) + { + SetLocalString(oCreature, AI_COMBAT_SCRIPT, "ai_a_ambusher"); + return; + } + } + // Defensive : requires Parry skill equal to your level or Expertise. + else if(sCombatAI == "ai_a_defensive" || + (sCombatAI == "" && + (GetSkillRank(SKILL_PARRY, oCreature) >= nSkillNeeded || + GetHasFeat(FEAT_EXPERTISE, oCreature) || + GetHasFeat(FEAT_IMPROVED_EXPERTISE, oCreature)))) + { + SetLocalString(oCreature, AI_COMBAT_SCRIPT, "ai_a_defensive"); + return; + } + else if(sCombatAI == "ai_cntrspell" || GetHasSpell(SPELL_LESSER_DISPEL, oCreature) || + GetHasSpell(SPELL_DISPEL_MAGIC, oCreature) || GetHasSpell(SPELL_GREATER_DISPELLING, oCreature)) + { + SetLocalString(oCreature, AI_COMBAT_SCRIPT, "ai_cntrspell"); + return; + } + } + if(sCombatAI == "") + { + // Select the best ai for this henchmen based on class. + int nClass = GetClassByPosition(1, oCreature); + // If they have more than one class use the default ai. + if(GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID) sCombatAI = "ai_a_default"; + else if(nClass == CLASS_TYPE_BARBARIAN) sCombatAI = "ai_a_barbarian"; + else if(nClass == CLASS_TYPE_BARD) sCombatAI = "ai_a_bard"; + else if(nClass == CLASS_TYPE_CLERIC) sCombatAI = "ai_a_cleric"; + else if(nClass == CLASS_TYPE_DRUID) sCombatAI = "ai_a_druid"; + else if(nClass == CLASS_TYPE_FIGHTER) sCombatAI = "ai_a_fighter"; + else if(nClass == CLASS_TYPE_MONK) sCombatAI = "ai_a_monk"; + else if(nClass == CLASS_TYPE_PALADIN) sCombatAI = "ai_a_paladin"; + else if(nClass == CLASS_TYPE_RANGER) sCombatAI = "ai_a_ranger"; + else if(nClass == CLASS_TYPE_ROGUE) sCombatAI = "ai_a_rogue"; + else if(nClass == CLASS_TYPE_SORCERER) sCombatAI = "ai_a_sorcerer"; + else if(nClass == CLASS_TYPE_WIZARD) sCombatAI = "ai_a_wizard"; + //else if(nClass == CLASS_TYPE_ABERRATION) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_ANIMAL) sCombatAI = "ai_a_animal"; + //else if(nClass == CLASS_TYPE_CONSTRUCT) sCombatAI = "ai_a_animal"; + //else if(nClass == CLASS_TYPE_DRAGON) sCombatAI = "ai_a_dragon"; + //else if(nClass == CLASS_TYPE_ELEMENTAL) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_FEY) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_GIANT) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_HUMANOID) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_MAGICAL_BEAST) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_MONSTROUS) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_OOZE) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_OUTSIDER) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_UNDEAD) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_VERMIN) sCombatAI = "ai_a_animal"; + else sCombatAI = "ai_a_default"; + } + if(AI_DEBUG) ai_Debug("0i_associates", "530", GetName(oCreature) + " is setting AI to " + sCombatAI); + SetLocalString(oCreature, AI_COMBAT_SCRIPT, sCombatAI); + SetLocalString(oCreature, AI_DEFAULT_SCRIPT, sCombatAI); +} +int ai_CanISpeak (object oCreature) +{ + int nRace = GetRacialType (oCreature); + if (nRace == RACIAL_TYPE_ANIMAL || nRace == RACIAL_TYPE_BEAST || + nRace == RACIAL_TYPE_CONSTRUCT || nRace == RACIAL_TYPE_OOZE) return FALSE; + return (GetAbilityScore (oCreature, ABILITY_INTELLIGENCE) > 7); +} +void ai_FireHenchman(object oPC, object oHenchman) +{ + if(oPC == OBJECT_INVALID || oHenchman == OBJECT_INVALID) return; + // Now double-check that this is actually our master + if(GetMaster(oHenchman) != oPC) return; + // Turn off stealth mode + SetActionMode(oHenchman, ACTION_MODE_STEALTH, FALSE); + // Remove the henchman + RemoveHenchman (oPC, oHenchman); + ChangeToStandardFaction(oHenchman, STANDARD_FACTION_DEFENDER); +} +void ai_HenchmanCastDefensiveSpells (object oCreature, object oPC) +{ + ai_CastBuffs(oCreature, 3, 0, oPC); +} +int ai_CheckForCombat(object oCreature, int bMonster) +{ + object oEnemy = ai_GetNearestEnemy(oCreature, 1, 7, 7, 7, 5, TRUE); + //object oEnemy = ai_GetNearestEnemy(oCreature, 1, -1, -1, -1, -1, TRUE); + if(AI_DEBUG) ai_Debug("0i_associate", "586", "Checking for Combat: oEnemy is " + GetName(oEnemy) + + " Distance: " + FloatToString(GetDistanceBetween(oEnemy, oCreature), 0, 2)); + if(oEnemy != OBJECT_INVALID) + { + float fPerceptionDistance, fDistance; + if(bMonster) + { + fDistance = GetDistanceBetween(oCreature, oEnemy); + fPerceptionDistance = GetLocalFloat(GetModule(), AI_RULE_PERCEPTION_DISTANCE); + } + else + { + // We want to use the distance between the PC and target not us. + object oMaster = GetMaster(); + if(oMaster != OBJECT_INVALID) fDistance = GetDistanceBetween(oMaster, oEnemy); + else fDistance = GetDistanceBetween(oCreature, oEnemy); + fPerceptionDistance = GetLocalFloat(oCreature, AI_ASSOC_PERCEPTION_DISTANCE); + if(fPerceptionDistance == 0.0) fPerceptionDistance = 20.0; + } + if(fDistance < fPerceptionDistance) + { + ai_HaveCreatureSpeak(oCreature, 5, ":0:1:2:3:6:"); + SetLocalObject (oCreature, AI_MY_TARGET, oEnemy); + SpeakString(AI_I_SEE_AN_ENEMY, TALKVOLUME_SILENT_TALK); + if(bMonster) ai_StartMonsterCombat(oCreature); + else if(ai_CanIAttack(oCreature)) ai_StartAssociateCombat(oCreature); + return TRUE; + } + } + return FALSE; +} +void ai_AssociateEvaluateNewThreat(object oCreature, object oLastPerceived, string sPerception) +{ + if(!ai_CanIAttack(oCreature)) return; + int nAction = GetCurrentAction(oCreature); + if(AI_DEBUG) ai_Debug("0i_associates", "775", "Our current action: " + IntToString(nAction)); + switch(nAction) + { + // These actions are uninteruptable. + case ACTION_CASTSPELL : + case ACTION_ITEMCASTSPELL : + case ACTION_COUNTERSPELL : return; + // Might be doing a special action that is not a defined action. + case ACTION_INVALID : + { + int nCombatWait = GetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + if(AI_DEBUG) ai_Debug("0i_associate", "761", "Doing a special action (nCombatWait): " + IntToString(nCombatWait)); + if(nCombatWait) + { + if(ai_IsInCombatRound(oCreature, nCombatWait)) return; + DeleteLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + } + } + // We need to reevaluate combat during these actions when we see a new enemy. + //case ACTION_ATTACKOBJECT : + //case ACTION_MOVETOPOINT : + } + if(ai_GetIsInCombat(oCreature)) + { + object oTarget = ai_GetAttackedTarget(oCreature); + if(AI_DEBUG) ai_Debug("0i_associates", "775", "Should we recalculate our combat round? oTarget: " + GetName(oTarget) + + " oTarget Distance: " + FloatToString(GetDistanceBetween(oCreature, oTarget), 0, 2) + + " oLastPerceived Distance: " + FloatToString(GetDistanceBetween(oCreature, oLastPerceived), 0, 2)); + // If the LastPerceived is our target then don't recalculate. + if(oTarget == oLastPerceived) return; + // If we don't have a target or the lastperceived is closer than our + // target then recalculate. + if(oTarget == OBJECT_INVALID || + GetDistanceBetween(oCreature, oTarget) > GetDistanceBetween(oCreature, oLastPerceived)) + { + // We should clear any skill cooldowns that are at at max since that means they were skipped. + if(GetLocalInt(oCreature, "AI_EMPATHY_COOLDOWN") == AI_EMPATHY_COOLDOWN) + { DeleteLocalInt(oCreature, "AI_EMPATHY_COOLDOWN"); } + else if (GetLocalInt(oCreature, "AI_TAUNT_COOLDOWN") == AI_TAUNT_COOLDOWN) + { DeleteLocalInt(oCreature, "AI_EMPATHY_COOLDOWN"); } + ai_DoAssociateCombatRound(oCreature); + return; + } + // Lets only reevaluate combat if the new enemy is more powerful + // than the average enemies we already know about. + int nPower = ai_GetCharacterLevels(oLastPerceived) / 2; + int nEnemyPower = GetLocalInt(oCreature, AI_ENEMY_POWER) / (GetLocalInt(oCreature, AI_ENEMY_NUMBERS) + 1); + if(AI_DEBUG) ai_Debug("0i_associates", "797", " Is the new opponent more powerful? " + + GetName(oLastPerceived) + " nPower: " + IntToString(nPower) + + " nEnemyPower: " + IntToString(nEnemyPower)); + if(nEnemyPower < nPower) ai_DoAssociateCombatRound(oCreature); + return; + } + // Heard fires first, but Heard and Seen are both set at the same time. + // So lets skip the hearing code if they are also seen. + if(sPerception == AI_I_SEE_AN_ENEMY || GetObjectSeen(oLastPerceived, oCreature)) + { + // We are not in combat and we see the enemy so alert our allies! + ai_HaveCreatureSpeak(oCreature, 5, ":0:1:2:3:6:"); + SetLocalObject (oCreature, AI_MY_TARGET, oLastPerceived); + SpeakString(sPerception, TALKVOLUME_SILENT_TALK); + ai_StartAssociateCombat(oCreature); + } + else ai_FindTheEnemy(oCreature, oLastPerceived, oLastPerceived, FALSE); +} +void ai_MonsterEvaluateNewThreat(object oCreature, object oLastPerceived, string sPerception) +{ + if(!ai_CanIAttack(oCreature)) return; + int nAction = GetCurrentAction(oCreature); + if(AI_DEBUG) ai_Debug("0i_associates", "672", "nAction: " + IntToString(nAction)); + switch(nAction) + { + // These actions are uninteruptable. + case ACTION_CASTSPELL : + case ACTION_ITEMCASTSPELL : + case ACTION_COUNTERSPELL : return; + // Might be doing a special action that is not a defined action. + case ACTION_INVALID : + { + int nCombatWait = GetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + if(AI_DEBUG) ai_Debug("0i_associates", "683", "nCombatWait: " + IntToString(nCombatWait)); + if(nCombatWait) + { + if(ai_IsInCombatRound(oCreature, nCombatWait)) return; + DeleteLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + } + } + // We need to reevaluate combat during these actions when we see a new enemy. + //case ACTION_ATTACKOBJECT : + //case ACTION_MOVETOPOINT : + } + if(ai_GetIsInCombat(oCreature)) + { + object oTarget = ai_GetAttackedTarget(oCreature); + if(AI_DEBUG) ai_Debug("0i_associates", "697", "oTarget: " + GetName(oTarget) + + " oTarget Distance: " + FloatToString(GetDistanceBetween(oCreature, oTarget), 0, 2) + + " oLastPerceived Distance: " + FloatToString(GetDistanceBetween(oCreature, oLastPerceived), 0, 2)); + // If the LastPerceived is our target then don't recalculate. + if(oTarget == oLastPerceived) return; + // If we don't have a target or the lastperceived is closer than our + // target then recalculate. + if(oTarget == OBJECT_INVALID || + GetDistanceBetween(oCreature, oTarget) > GetDistanceBetween(oCreature, oLastPerceived)) + { + ai_DoMonsterCombatRound(oCreature); + return; + } + // Now only reevaluate combat if the new enemy is more powerful + // than the average enemies we already know about. + int nPower = ai_GetCharacterLevels(oLastPerceived) / 2; + int nEnemyPower = GetLocalInt(oCreature, AI_ENEMY_POWER) / (GetLocalInt(oCreature, AI_ENEMY_NUMBERS) + 1); + if(AI_DEBUG) ai_Debug("0i_associates", "714", GetName(oLastPerceived) + " nPower: " + IntToString(nPower) + + " nEnemyPower: " + IntToString(nEnemyPower)); + if(nEnemyPower < nPower) ai_DoMonsterCombatRound(oCreature); + return; + } + if(sPerception == AI_I_SEE_AN_ENEMY) + { + if(d100() < 34) + { + // We are not in combat so alert our allies! + ai_HaveCreatureSpeak(oCreature, 5, ":0:1:2:3:6:"); + } + SetLocalObject(oCreature, AI_MY_TARGET, oLastPerceived); + SpeakString(sPerception, TALKVOLUME_SILENT_TALK); + ai_StartMonsterCombat(oCreature); + } + else ai_FindTheEnemy(oCreature, oLastPerceived, oLastPerceived, TRUE); +} +void ai_CopyObjectVariables(object oOldObject, object oNewObject) +{ + json jObject = ObjectToJson(oOldObject, TRUE); + json jVarTable = GffGetList(jObject, "VarTable"); + string sVariable, sName; + int nIndex, nVarType; + json jVar = JsonArrayGet(jVarTable, nIndex); + while(JsonGetType(jVar) != JSON_TYPE_NULL) + { + sName = JsonGetString(GffGetString(jVar, "Name")); + nVarType = JsonGetInt(GffGetDword(jVar, "Type")); + if(nVarType == 1) SetLocalInt(oNewObject, sName, JsonGetInt(GffGetInt(jVar, "Value"))); + else if(nVarType == 2) SetLocalFloat(oNewObject, sName, JsonGetFloat(GffGetFloat(jVar, "Value"))); + else if(nVarType == 3) SetLocalString(oNewObject, sName, JsonGetString(GffGetString(jVar, "Value"))); + jVar = JsonArrayGet(jVarTable, ++nIndex); + } +} +//****************************************************************************** +//********************* Creature event scripts ********************************* +//****************************************************************************** + +void ai_OnRested(object oCreature) +{ + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_AFTER_REST)) + { + int nLevel = ai_GetCharacterLevels(oCreature); + float fDelay = StringToFloat(Get2DAString("restduration", "DURATION", nLevel)); + fDelay = (fDelay / 1000.0f) + 2.0f; + DelayCommand(fDelay, ai_HenchmanCastDefensiveSpells(oCreature, GetMaster())); + } +} + +//****************************************************************************** +//******************* Associate AI option scripts ****************************** +//****************************************************************************** +void ai_UpdateToolTipUI(object oPC, string sWindowID1, string sWindowID2, string sToolTipBind, string sText) +{ + int nMenuToken = NuiFindWindow(oPC, sWindowID1); + if(nMenuToken) NuiSetBind (oPC, nMenuToken, sToolTipBind, JsonString (sText)); + if(sWindowID2 != "") + { + int nWidgetToken = NuiFindWindow(oPC, sWindowID2); + if(nWidgetToken) NuiSetBind (oPC, nWidgetToken, sToolTipBind, JsonString (sText)); + } +} +void ai_FollowIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType) +{ + float fAdjustment = GetLocalFloat(oAssociate, AI_FOLLOW_RANGE) + fIncrement; + if(fAdjustment > 10.0) fAdjustment = 10.0; + else if(fAdjustment < 1.0) fAdjustment = 1.0; + SetLocalFloat(oAssociate, AI_FOLLOW_RANGE, fAdjustment); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jAIData = JsonArraySet(jAIData, 6, JsonFloat(fAdjustment)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + string sName; + object oTarget = GetLocalObject(oAssociate, AI_FOLLOW_TARGET); + string sTarget; + if(oTarget != OBJECT_INVALID) sTarget = GetName(oTarget); + else + { + if(ai_GetIsCharacter(oAssociate)) sTarget = "nobody"; + else sTarget = GetName(oPC); + } + float fRange = fAdjustment + + StringToFloat(Get2DAString("appearance", "PREFATCKDIST", GetAppearanceType(oAssociate))); + string sRange = FloatToString(fRange, 0, 0); + if(oPC == oAssociate) + { + sName = " All associates"; + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_follow_tooltip", sName + " enter follow mode "); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_follow_target_tooltip", " " + GetName(oAssociate) + " following " + sTarget + " [" + sRange + " meters]"); + } + else + { + sName = " " + GetName(oAssociate); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_follow_tooltip", sName + " enter follow mode [" + sRange + " meters]"); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_follow_target_tooltip", " " + GetName(oAssociate) + " following " + sTarget + " [" + sRange + " meters]"); + } +} +void ai_Ranged(object oPC, object oAssociate, string sAssociateType) +{ + //ai_ClearCreatureActions(); + if(ai_GetAIMode(oAssociate, AI_MODE_STOP_RANGED)) + { + ai_SendMessages(GetName(oAssociate) + " is using ranged combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ranged_tooltip", " Ranged On"); + ai_SetAIMode(oAssociate, AI_MODE_STOP_RANGED, FALSE); + ai_EquipBestRangedWeapon(oAssociate); + } + else + { + ai_SendMessages(GetName(oAssociate) + " is using melee combat only.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ranged_tooltip", " Ranged Off"); + ai_SetAIMode(oAssociate, AI_MODE_STOP_RANGED, TRUE); + ai_EquipBestMeleeWeapon(oAssociate); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_EquipWeapons(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetAIMode(oAssociate, AI_MODE_EQUIP_WEAPON_OFF)) + { + ai_SendMessages(GetName(oAssociate) + " will be equiping their best weapons.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_equip_weapon_tooltip", " Equiping Best Weapons On"); + ai_SetAIMode(oAssociate, AI_MODE_EQUIP_WEAPON_OFF, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will not equip their best weapons.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_equip_weapon_tooltip", " Equiping Best Weapons Off"); + ai_SetAIMode(oAssociate, AI_MODE_EQUIP_WEAPON_OFF, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Search(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_SEARCH)) + { + ai_SendMessages(GetName(oAssociate) + " is turning search off.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_search_tooltip", " Search mode Off"); + SetActionMode(oAssociate, ACTION_MODE_DETECT, FALSE); + ai_SetAIMode(oAssociate, AI_MODE_AGGRESSIVE_SEARCH, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " is turning search on.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_search_tooltip", " Search mode On"); + SetActionMode(oAssociate, ACTION_MODE_DETECT, TRUE); + ai_SetAIMode(oAssociate, AI_MODE_AGGRESSIVE_SEARCH, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Stealth(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_STEALTH)) + { + ai_SendMessages(GetName(oAssociate) + " is turning stealth off.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_stealth_tooltip", " Stealth mode Off"); + SetActionMode(oAssociate, ACTION_MODE_STEALTH, FALSE); + ai_SetAIMode(oAssociate, AI_MODE_AGGRESSIVE_STEALTH, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " is turning stealth on.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_stealth_tooltip", " Stealth mode On"); + SetActionMode(oAssociate, ACTION_MODE_STEALTH, TRUE); + ai_SetAIMode(oAssociate, AI_MODE_AGGRESSIVE_STEALTH, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_OpenDoor(object oPC, object oAssociate, string sAssociateType) +{ + string sRange = FloatToString(GetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE), 0, 0); + if(ai_GetAIMode(oAssociate, AI_MODE_OPEN_DOORS)) + { + ai_SendMessages(GetName(oAssociate) + " is turning open doors off.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_open_door_tooltip", " Open Doors Off [" + sRange + " meters]"); + ai_SetAIMode(oAssociate, AI_MODE_OPEN_DOORS, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " is turning open doors on.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_open_door_tooltip", " Open Doors On [" + sRange + " meters]"); + ai_SetAIMode(oAssociate, AI_MODE_OPEN_DOORS, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Locks(object oPC, object oAssociate, string sAssociateType, int nMode) +{ + string sRange = FloatToString(GetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE), 0, 0); + if(nMode == 1) + { + if(ai_GetAIMode(oAssociate, AI_MODE_PICK_LOCKS)) + { + ai_SendMessages(GetName(oAssociate) + " will stop picking locks.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_pick_locks_tooltip", " Pick Locks Off [" + sRange + " meters]"); + ai_SetAIMode(oAssociate, AI_MODE_PICK_LOCKS, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will now pick locks.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_pick_locks_tooltip", " Pick Locks On [" + sRange + " meters]"); + ai_SetAIMode(oAssociate, AI_MODE_PICK_LOCKS, TRUE); + } + } + else if(nMode == 2) + { + if(ai_GetAIMode(oAssociate, AI_MODE_BASH_LOCKS)) + { + ai_SendMessages(GetName(oAssociate) + " will stop bashing.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_bash_locks_tooltip", " Bash Locks Off [" + sRange + " meters]"); + ai_SetAIMode(oAssociate, AI_MODE_BASH_LOCKS, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will now bash things.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_bash_locks_tooltip", " Bash Locks On [" + sRange + " meters]"); + ai_SetAIMode(oAssociate, AI_MODE_BASH_LOCKS, TRUE); + } + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Traps(object oPC, object oAssociate, string sAssociateType) +{ + string sRange = FloatToString(GetLocalFloat(oAssociate, AI_TRAP_CHECK_RANGE), 0, 0); + if(ai_GetAIMode(oAssociate, AI_MODE_DISARM_TRAPS)) + { + ai_SendMessages(GetName(oAssociate) + " will stop disarming traps.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_traps_tooltip", " Disable Traps Off [" + sRange + " meters]"); + ai_SetAIMode(oAssociate, AI_MODE_DISARM_TRAPS, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will now disarm traps.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_traps_tooltip", " Disable Traps On [" + sRange + " meters]"); + ai_SetAIMode(oAssociate, AI_MODE_DISARM_TRAPS, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_ReduceSpeech(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK)) + { + ai_SendMessages(GetName(oAssociate) + " will increase speech.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_quiet_tooltip", " Reduced Speech Off"); + ai_SetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will reduce speech.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_quiet_tooltip", " Reduced Speech On"); + ai_SetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_UseOffensiveMagic(object oPC, object oAssociate, int bDefensive, int bOffensive, string sAssociateType) +{ + if(bOffensive) + { + if(ai_GetMagicMode(oAssociate, AI_MAGIC_OFFENSIVE_CASTING)) + { + ai_SendMessages(GetName(oAssociate) + " has stopped using offensive magic in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_off_magic_tooltip", " Offensive Magic Off"); + ai_SetMagicMode(oAssociate, AI_MAGIC_OFFENSIVE_CASTING, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " is now using offensive magic in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_off_magic_tooltip", " Offensive Magic On"); + ai_SetMagicMode(oAssociate, AI_MAGIC_OFFENSIVE_CASTING, TRUE); + } + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_def_magic_tooltip", " Defensive Magic Off"); + ai_SetMagicMode(oAssociate, AI_MAGIC_DEFENSIVE_CASTING, FALSE); + } + else if(bDefensive) + { + if(ai_GetMagicMode(oAssociate, AI_MAGIC_DEFENSIVE_CASTING)) + { + ai_SendMessages(GetName(oAssociate) + " has stopped using defensive magic in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_def_magic_tooltip", " Defensive Magic Off"); + ai_SetMagicMode(oAssociate, AI_MAGIC_DEFENSIVE_CASTING, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " is now using defensive magic in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_def_magic_tooltip", " Defensive Magic On"); + ai_SetMagicMode(oAssociate, AI_MAGIC_DEFENSIVE_CASTING, TRUE); + } + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_off_magic_tooltip", " Offensive Magic Off"); + ai_SetMagicMode(oAssociate, AI_MAGIC_OFFENSIVE_CASTING, FALSE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_UseMagic(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC)) + { + ai_SendMessages(GetName(oAssociate) + " is now using magic in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_magic_tooltip", " Magic On"); + ai_SetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " has stopped using magic in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_magic_tooltip", " Magic Off"); + ai_SetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_UseMagicItems(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS)) + { + ai_SendMessages(GetName(oAssociate) + " is now using magic items in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_magic_items_tooltip", " Magic Items On"); + ai_SetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " has stopped using magic items in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_magic_items_tooltip", " Magic Items Off"); + ai_SetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Loot(object oPC, object oAssociate, string sAssociateType) +{ + int bLooting = !ai_GetAIMode(oAssociate, AI_MODE_PICKUP_ITEMS); + string sRange = FloatToString(GetLocalFloat(oAssociate, AI_LOOT_CHECK_RANGE), 0, 0); + string sMessage, sText; + if(bLooting) + { + sMessage = " is picking up items."; + sText = " Looting On [" + sRange + " meters]"; + } + else + { + sMessage = " is not picking up items."; + sText = " Looting Off [" + sRange + " meters]"; + } + ai_SendMessages(GetName(oAssociate) + sMessage, AI_COLOR_YELLOW, oPC); + ai_SetAIMode(oAssociate, AI_MODE_PICKUP_ITEMS, bLooting); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_loot_tooltip", sText); + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Spontaneous(object oPC, object oAssociate, string sAssociateType) +{ + int bSpontaneous = !ai_GetMagicMode(oAssociate, AI_MAGIC_NO_SPONTANEOUS_CURE); + string sMessage, sText; + + if(bSpontaneous) + { + sMessage = " has stop casting spontaneous healing spells."; + sText = " Spontaneous casting Off"; + } + else + { + sMessage = " will now cast spontaneous healing spells."; + sText = " Spontaneous casting On"; + } + ai_SendMessages(GetName(oAssociate) + sMessage, AI_COLOR_YELLOW, oPC); + ai_SetMagicMode(oAssociate, AI_MAGIC_NO_SPONTANEOUS_CURE, bSpontaneous); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_spontaneous_tooltip", sText); + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_MagicIncrement(object oPC, object oAssociate, int nIncrement, string sAssociateType) +{ + int nAdjustment = GetLocalInt(oAssociate, AI_DIFFICULTY_ADJUSTMENT) + nIncrement; + if(nAdjustment > 100) nAdjustment = 100; + else if(nAdjustment < -100) nAdjustment = -100; + SetLocalInt(oAssociate, AI_DIFFICULTY_ADJUSTMENT, nAdjustment); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jAIData = JsonArraySet(jAIData, 0, JsonInt(nAdjustment)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + string sMagic = IntToString(nAdjustment); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_magic_level_tooltip", " Magic Level [" + sMagic + "]"); +} +void ai_LootRangeIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType) +{ + float fAdjustment = GetLocalFloat(oAssociate, AI_LOOT_CHECK_RANGE) + fIncrement; + if(fAdjustment > 40.0) fAdjustment = 40.0; + else if(fAdjustment < 0.0) fAdjustment = 0.0; + SetLocalFloat(oAssociate, AI_LOOT_CHECK_RANGE, fAdjustment); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jAIData = JsonArraySet(jAIData, 3, JsonFloat(fAdjustment)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + string sRange = FloatToString(fAdjustment, 0, 0); + string sLoot = " Looting Off [" + sRange + " meters]"; + if(ai_GetAIMode(oAssociate, AI_MODE_PICKUP_ITEMS)) sLoot = " Looting On [" + sRange + " meters]"; + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_loot_tooltip", sLoot); +} +void ai_LockRangeIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType) +{ + float fAdjustment = GetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE) + fIncrement; + if(fAdjustment > 40.0) fAdjustment = 40.0; + else if(fAdjustment < 0.0) fAdjustment = 0.0; + SetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE, fAdjustment); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jAIData = JsonArraySet(jAIData, 4, JsonFloat(fAdjustment)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + string sRange = FloatToString(fAdjustment, 0, 0); + string sPick = " Pick Locks Off [" + sRange + " meters]"; + string sBash = " Bash Off [" + sRange + " meters]"; + if(ai_GetAIMode(oAssociate, AI_MODE_PICK_LOCKS)) sPick = " Pick Locks On [" + sRange + " meters]"; + if(ai_GetAIMode(oAssociate, AI_MODE_BASH_LOCKS)) sBash = " Bash On [" + sRange + " meters]"; + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_pick_locks_tooltip", sPick); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_bash_locks_tooltip", sBash); +} +void ai_TrapRangeIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType) +{ + float fAdjustment = GetLocalFloat(oAssociate, AI_TRAP_CHECK_RANGE) + fIncrement; + if(fAdjustment > 40.0) fAdjustment = 40.0; + else if(fAdjustment < 0.0) fAdjustment = 0.0; + SetLocalFloat(oAssociate, AI_TRAP_CHECK_RANGE, fAdjustment); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jAIData = JsonArraySet(jAIData, 5, JsonFloat(fAdjustment)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + string sRange = FloatToString(fAdjustment, 0, 0); + string sText = " Disable Traps Off [" + sRange + " meters]"; + if(ai_GetAIMode(oAssociate, AI_MODE_DISARM_TRAPS)) sText = " Disable Traps On [" + sRange + " meters]"; + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_traps_tooltip", sText); +} +void ai_OpenDoorIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType) +{ + float fAdjustment = GetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE) + fIncrement; + if(fAdjustment > 40.0) fAdjustment = 40.0; + else if(fAdjustment < 0.0) fAdjustment = 0.0; + SetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE, fAdjustment); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jAIData = JsonArraySet(jAIData, 9, JsonFloat(fAdjustment)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + string sRange = FloatToString(fAdjustment, 0, 0); + string sText = " Open Doors Off [" + sRange + " meters]"; + if(ai_GetAIMode(oAssociate, AI_MODE_OPEN_DOORS)) sText = " Open Doors On [" + sRange + " meters]"; + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_open_door_tooltip", sText); +} +void ai_SaveAIScript(object oPC, object oAssociate, int nToken) +{ + string sScript = JsonGetString(NuiGetBind(oPC, nToken, "txt_ai_script")); + string sOldScript = GetLocalString(oAssociate, AI_COMBAT_SCRIPT); + if(GetStringLeft(sScript, 5) != "ai_a_") ai_SendMessages(sScript + " does not have correct prefix it must have ai_a_ for associates! Did not change AI script.", AI_COLOR_RED, oPC); + else if(ResManGetAliasFor(sScript, RESTYPE_NCS) == "") + { + ai_SendMessages(sScript + " not found by ResMan! This is not a valid AI script.", AI_COLOR_RED, oPC); + } + else if(sScript != sOldScript) + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, sScript); + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + if(JsonGetType(JsonArrayGet(jAIData, 8)) == JSON_TYPE_NULL) jAIData = JsonArrayInsert(jAIData, JsonString(sScript)); + else jAIData = JsonArraySet(jAIData, 8, JsonString(sScript)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + ai_SendMessages(GetName(oAssociate) + " is now using " + sScript + " AI script!", AI_COLOR_GREEN, oPC); + } + else ai_SendMessages(GetName(oAssociate) + " is already using this script! Did not change AI script.", AI_COLOR_RED, oPC); +} +void ai_Buff_Button(object oPC, object oAssociate, int nOption, string sAssociateType) +{ + if(nOption == 0) + { + int bRestBuff = !ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST); + ai_SetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST, bRestBuff); + if(bRestBuff) + { + ai_SendMessages(GetName(oAssociate) + " will cast long buffs after resting.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_buff_rest_tooltip", " [On] Turn buffing after resting off."); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will not cast long buffs after resting.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_buff_rest_tooltip", " [Off] Turn buffing after resting on."); + } + aiSaveAssociateModesToDb(oPC, oAssociate); + } + else + { + if(!GetIsPossessedFamiliar(oAssociate)) + { + object oEnemy = GetNearestEnemy(oAssociate); + //ai_Debug("0e_nui", "865", "oEnemy: " + GetName(oEnemy) + " fDistance: " + + // FloatToString(GetDistanceBetween(oAssociate, oEnemy), 0, 2)); + if(GetDistanceBetween(oAssociate, oEnemy) > 30.0 || + oEnemy == OBJECT_INVALID) + { + ai_CastBuffs(oAssociate, nOption, 0, oPC); + } + else ai_SendMessages("You cannot buff while there are enemies nearby.", AI_COLOR_RED, oPC); + } + else ai_SendMessages("You cannot buff while possessing your familiar.", AI_COLOR_RED, oPC); + } +} +void ai_Heal_Button(object oPC, object oAssociate, int nIncrement, string sVar, string sAssociateType) +{ + int nHeal = GetLocalInt(oAssociate, sVar); + if(nIncrement > 0 && nHeal > 100 - nIncrement) nHeal = 100 - nIncrement; + if(nIncrement < 0 && nHeal < abs(nIncrement)) nHeal = abs(nIncrement); + nHeal += nIncrement; + SetLocalInt(oAssociate, sVar, nHeal); + string sHeal = IntToString(nHeal); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + if(sVar == AI_HEAL_OUT_OF_COMBAT_LIMIT) + { + string sText = " Will heal at or below [" + sHeal + "%] health out of combat"; + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_heal_out_tooltip", sText); + jAIData = JsonArraySet(jAIData, 1, JsonInt(nHeal)); + } + else if(sVar == AI_HEAL_IN_COMBAT_LIMIT) + { + string sText = " Will heal at or below [" + sHeal + "%] health in combat"; + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_heal_in_tooltip", sText); + jAIData = JsonArraySet(jAIData, 2, JsonInt(nHeal)); + } + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); +} +void ai_Heal_OnOff(object oPC, object oAssociate, string sAssociateType, int nMode) +{ + string sText, sText2; + if(nMode == 1) + { + if(ai_GetAIMode(oAssociate, AI_MODE_SELF_HEALING_OFF)) + { + ai_SetAIMode(oAssociate, AI_MODE_SELF_HEALING_OFF, FALSE); + sText = " Self healing On"; + sText2 = " will now use healing on themselves."; + } + else + { + ai_SetAIMode(oAssociate, AI_MODE_SELF_HEALING_OFF, TRUE); + sText = " Self healing Off"; + sText2 = " will stop using healing on themselves."; + } + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_heals_onoff_tooltip", sText); + } + else + { + if(ai_GetAIMode(oAssociate, AI_MODE_PARTY_HEALING_OFF)) + { + ai_SetAIMode(oAssociate, AI_MODE_PARTY_HEALING_OFF, FALSE); + sText = " Party healing On"; + sText2 = " will now use healing on party members."; + } + else + { + ai_SetAIMode(oAssociate, AI_MODE_PARTY_HEALING_OFF, TRUE); + sText = " Party healing Off"; + sText2 = " will stop using healing on party members."; + } + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_healp_onoff_tooltip", sText); + } + ai_SendMessages(GetName(oAssociate) + sText2, AI_COLOR_YELLOW, oPC); + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Cure_OnOff(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetMagicMode(oAssociate, AI_MAGIC_CURE_SPELLS_OFF)) + { + ai_SendMessages(GetName(oAssociate) + " will now cast cure spells.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cure_onoff_tooltip", " Cast Cure Spells On"); + ai_SetMagicMode(oAssociate, AI_MAGIC_CURE_SPELLS_OFF, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will stop casting cure spells.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cure_onoff_tooltip", " Cast Cure Spells Off"); + ai_SetMagicMode(oAssociate, AI_MAGIC_CURE_SPELLS_OFF, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Ignore_Associates(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES)) + { + ai_SendMessages(GetName(oAssociate) + " will stop ignoring henchman's associates and enemy associates.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ignore_assoc_tooltip", " Ignore Enemy Associates Off"); + ai_SetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will now ignore henchman's associates and enemy associates.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ignore_assoc_tooltip", " Ignore Enemy Associates On"); + ai_SetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Ignore_Traps(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetAIMode(oAssociate, AI_MODE_IGNORE_TRAPS)) + { + ai_SendMessages(GetName(oAssociate) + " will stop ignoring traps on the floor and will stop moving when one is seen.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ignore_traps_tooltip", " Ignore Floor Traps Off"); + ai_SetAIMode(oAssociate, AI_MODE_IGNORE_TRAPS, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will now ignore traps on the floor and will continue with their actions.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ignore_traps_tooltip", " Ignore Floor Traps On"); + ai_SetAIMode(oAssociate, AI_MODE_IGNORE_TRAPS, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_FollowTarget(object oPC, object oAssociate) +{ + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, oAssociate); + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_FOLLOW_TARGET"); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); +} +void ai_Original_Guard() +{ + ResetHenchmenState(); + //Companions will only attack the Masters Last Attacker + SetAssociateState(NW_ASC_MODE_DEFEND_MASTER); + SetAssociateState(NW_ASC_MODE_STAND_GROUND, FALSE); + object oMaster = GetMaster(); + object oLastAttacker = GetLastHostileActor(oMaster); + // * for some reason this is too often invalid. still the routine + // * works corrrectly + SetLocalInt(OBJECT_SELF, "X0_BATTLEJOINEDMASTER", TRUE); + HenchmenCombatRound(oLastAttacker); + ai_SendMessages(GetName(OBJECT_SELF) + " is now guarding you!", AI_COLOR_YELLOW, oMaster); +} +void ai_Original_Follow() +{ + ResetHenchmenState(); + SetAssociateState(NW_ASC_MODE_STAND_GROUND, FALSE); + DelayCommand(2.5, VoiceCanDo()); + object oMaster = GetMaster(); + ActionForceFollowObject(oMaster, GetFollowDistance()); + SetAssociateState(NW_ASC_IS_BUSY); + DelayCommand(5.0, SetAssociateState(NW_ASC_IS_BUSY, FALSE)); + ai_SendMessages(GetName(OBJECT_SELF) + " is now following You!", AI_COLOR_YELLOW, oMaster); +} +void ai_Original_StandGround() +{ + SetAssociateState(NW_ASC_MODE_STAND_GROUND); + SetAssociateState(NW_ASC_MODE_DEFEND_MASTER, FALSE); + DelayCommand(2.0, VoiceCanDo()); + ActionAttack(OBJECT_INVALID); + ClearActions(CLEAR_X0_INC_HENAI_RespondToShout1); + ai_SendMessages(GetName(OBJECT_SELF) + " is now standing their ground!", AI_COLOR_YELLOW, GetMaster()); +} +void ai_Original_AttackNearest() +{ + ResetHenchmenState(); + SetAssociateState(NW_ASC_MODE_DEFEND_MASTER, FALSE); + SetAssociateState(NW_ASC_MODE_STAND_GROUND, FALSE); + DetermineCombatRound(); + // * bonus feature. If master is attacking a door or container, issues VWE Attack Nearest + // * will make henchman join in on the fun + object oMaster = GetMaster(); + object oTarget = GetAttackTarget(oMaster); + if (GetIsObjectValid(oTarget) == TRUE) + { + if (GetObjectType(oTarget) == OBJECT_TYPE_PLACEABLE || GetObjectType(oTarget) == OBJECT_TYPE_DOOR) + { + ActionAttack(oTarget); + } + } + ai_SendMessages(GetName(OBJECT_SELF) + " is now in normal mode!", AI_COLOR_YELLOW, oMaster); +} +void ai_Original_SetSearch(object oAssociate, int bTurnOn) +{ + if(GetRacialType(oAssociate) != RACIAL_TYPE_ELF) SetActionMode(oAssociate, ACTION_MODE_DETECT, bTurnOn); +} +void ai_Original_SetStealth(object oAssociate, int bTurnOn) +{ + SetActionMode(oAssociate, ACTION_MODE_STEALTH, bTurnOn); +} +void ai_Philos_Guard(object oMaster, object oCreature) +{ + ai_PassAIModeToAssociates(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_DEFEND_MASTER, TRUE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_STAND_GROUND, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_FOLLOW, FALSE); + ai_SetAIMode(oCreature, AI_MODE_COMMANDED, FALSE); + int nToken = NuiFindWindow(oMaster, ai_GetAssociateType(oMaster, oCreature) + AI_WIDGET_NUI); + ai_HighlightWidgetMode(oMaster, oCreature, nToken); + if(!ai_GetIsBusy(oCreature) && ai_GetIsInCombat(oCreature)) + { + object oLastAttacker = GetLastHostileActor(oMaster); + if(oLastAttacker != OBJECT_INVALID) ai_DoAssociateCombatRound(oCreature, oLastAttacker); + else AssignCommand(oCreature, ActionMoveToObject(oMaster, TRUE)); + } + ai_SendMessages(GetName(oCreature) + " is now guarding you!", AI_COLOR_YELLOW, oMaster); + aiSaveAssociateModesToDb(oMaster, oCreature); +} +void ai_Philos_Follow(object oMaster) +{ + object oCreature = OBJECT_SELF; + ai_PassAIModeToAssociates(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_STAND_GROUND, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_FOLLOW, TRUE); + ai_SetAIMode(oCreature, AI_MODE_COMMANDED, FALSE); + int nToken = NuiFindWindow(oMaster, ai_GetAssociateType(oMaster, oCreature) + AI_WIDGET_NUI); + ai_HighlightWidgetMode(oMaster, oCreature, nToken); + aiSaveAssociateModesToDb(oMaster, oCreature); + // To follow we probably should be running and not searching or hiding. + if(GetDetectMode(oCreature) && !GetHasFeat(FEAT_KEEN_SENSE, oCreature)) SetActionMode(oCreature, ACTION_MODE_DETECT, FALSE); + if(GetStealthMode(oCreature)) SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + ai_PassActionToAssociates(oCreature, ACTION_FOLLOW); + if(ai_IsInCombatRound(oCreature)) ai_ClearCombatState(oCreature); + ai_ClearCreatureActions(TRUE); + object oTarget = GetLocalObject(oCreature, AI_FOLLOW_TARGET); + if(oTarget == OBJECT_INVALID) oTarget = oMaster; + ActionMoveToObject(oTarget, TRUE, ai_GetFollowDistance(oCreature)); + ai_SendMessages(GetName(oCreature) + " is now following " + GetName(oTarget) + "!", AI_COLOR_YELLOW, oMaster); +} +void ai_Philos_StandGround(object oMaster) +{ + object oCreature = OBJECT_SELF; + ai_PassAIModeToAssociates(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_STAND_GROUND, TRUE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_DEFEND_MASTER, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_FOLLOW, FALSE); + ai_PassActionToAssociates(oCreature, ACTION_FOLLOW, FALSE); + ai_SetAIMode(oCreature, AI_MODE_COMMANDED, FALSE); + int nToken = NuiFindWindow(oMaster, ai_GetAssociateType(oMaster, oCreature) + AI_WIDGET_NUI); + ai_HighlightWidgetMode(oMaster, oCreature, nToken); + if(ai_IsInCombatRound(oCreature)) + { + ai_ClearCombatState(oCreature); + DeleteLocalObject(oCreature, AI_ATTACKED_PHYSICAL); + DeleteLocalObject(oCreature, AI_ATTACKED_SPELL); + } + ai_ClearCreatureActions(TRUE); + ai_SendMessages(GetName(oCreature) + " is now standing their ground!", AI_COLOR_YELLOW, oMaster); + aiSaveAssociateModesToDb(oMaster, oCreature); +} +void ai_Philos_AttackNearest(object oMaster, object oCreature) +{ + ai_PassAIModeToAssociates(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_STAND_GROUND, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_DEFEND_MASTER, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_FOLLOW, FALSE); + ai_PassActionToAssociates(oCreature, ACTION_FOLLOW, FALSE); + ai_SetAIMode(oCreature, AI_MODE_COMMANDED, FALSE); + int nToken = NuiFindWindow(oMaster, ai_GetAssociateType(oMaster, oCreature) + AI_WIDGET_NUI); + ai_HighlightWidgetMode(oMaster, oCreature, nToken); + // Removes any targets the PC may have given the associate. + DeleteLocalObject(oCreature, AI_PC_LOCKED_TARGET); + // This resets a henchmens failed Moral save in combat. + string sScript = GetLocalString(oCreature, AI_COMBAT_SCRIPT); + if(sScript == "ai_coward") + { + sScript = GetLocalString(oCreature, AI_DEFAULT_SCRIPT); + SetLocalString(oCreature, AI_COMBAT_SCRIPT, sScript); + } + if(!ai_GetIsBusy(oCreature)) + { + object oEnemy = ai_GetNearestEnemy(oCreature, 1, 7, 7); + if(oEnemy != OBJECT_INVALID && GetDistanceBetween(oCreature, oEnemy) < AI_RANGE_BATTLEFIELD) + { + ai_HaveCreatureSpeak(oCreature, 5, ":0:1:2:3:6:"); + // If master is attacking a target we will attack them too! + if(!ai_GetIsInCombat(oCreature)) ai_StartAssociateCombat(oCreature); + object oTarget = ai_GetAttackedTarget(oMaster); + if(oTarget == OBJECT_INVALID) ai_DoAssociateCombatRound(oCreature); + else ai_DoAssociateCombatRound(oCreature, oTarget); + } + else + { + object oTarget = GetLocalObject(oCreature, AI_FOLLOW_TARGET); + if(oTarget == OBJECT_INVALID) oTarget = oMaster; + AssignCommand(oCreature, ActionMoveToObject(oMaster, TRUE, ai_GetFollowDistance(oCreature))); + } + } + ai_SendMessages(GetName(oCreature) + " is now in normal mode!", AI_COLOR_YELLOW, oMaster); + aiSaveAssociateModesToDb(oMaster, oCreature); +} +void ai_Philos_SetSearch(object oMaster, object oCreature, string sAssociateType, int bTurnOn) +{ + if(bTurnOn) + { + ai_SetAIMode(oCreature, AI_MODE_AGGRESSIVE_SEARCH, TRUE); + SetActionMode(oCreature, ACTION_MODE_DETECT, TRUE); + ai_PassActionToAssociates(oCreature, ACTION_MODE_DETECT, TRUE); + //ai_PassActionToAssociates(oCreature, ACTION_MODE_DETECT, TRUE); + ai_UpdateToolTipUI(oMaster, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_search_tooltip", " Search mode On"); + } + else + { + ai_SetAIMode(oCreature, AI_MODE_AGGRESSIVE_SEARCH, FALSE); + SetActionMode(oCreature, ACTION_MODE_DETECT, FALSE); + ai_PassActionToAssociates(oCreature, ACTION_MODE_DETECT, FALSE); + //ai_PassActionToAssociates(oCreature, ACTION_MODE_DETECT, FALSE); + ai_UpdateToolTipUI(oMaster, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_search_tooltip", " Search mode Off"); + } + aiSaveAssociateModesToDb(oMaster, oCreature); +} +void ai_Philos_SetStealth(object oMaster, object oCreature, string sAssociateType, int bTurnOn) +{ + if(bTurnOn) + { + ai_SetAIMode(oCreature, AI_MODE_AGGRESSIVE_STEALTH); + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + ai_PassActionToAssociates(oCreature, ACTION_MODE_STEALTH, TRUE); + ai_UpdateToolTipUI(oMaster, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_stealth_tooltip", " Stealth mode On"); + } + else + { + ai_SetAIMode(oCreature, AI_MODE_AGGRESSIVE_STEALTH, FALSE); + SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + ai_PassActionToAssociates(oCreature, ACTION_MODE_STEALTH, FALSE); + //ai_PassActionToAssociates(oCreature, ACTION_MODE_STEALTH, FALSE); + ai_UpdateToolTipUI(oMaster, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_stealth_tooltip", " Stealth mode Off"); + } + aiSaveAssociateModesToDb(oMaster, oCreature); +} +void ai_DoCommand(object oPC, object oAssociate, int nCommand) +{ + int nIndex = 1; + if(oPC == oAssociate) + { + if(nCommand == 1) // Guard PC. + { + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Original_Guard()); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Original_Guard()); + } + } + // Use Philos AI commands. + else + { + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) ai_Philos_Guard(oPC, oAssociate); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) ai_Philos_Guard(oPC, oAssociate); + } + } + } + else if(nCommand == 2) // Follow PC. + { + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Original_Follow()); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Original_Follow()); + } + } + // Use Philos AI commands. + else + { + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Philos_Follow(oPC)); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Philos_Follow(oPC)); + } + } + } + else if(nCommand == 3) // Standground. + { + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Original_StandGround()); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Original_StandGround()); + } + } + // Use Philos AI commands. + else + { + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Philos_StandGround(oPC)); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Philos_StandGround(oPC)); + } + } + } + else if(nCommand == 4) // Normal mode - i.e. Attack nearest. + { + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Original_AttackNearest()); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Original_AttackNearest()); + } + } + // Use Philos AI commands. + else + { + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) ai_Philos_AttackNearest(oPC, oAssociate); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) ai_Philos_AttackNearest(oPC, oAssociate); + } + } + } + if(nCommand == 5) // All associates toggle search mode + { + int bTurnOn = !ai_GetAIMode(oPC, AI_MODE_AGGRESSIVE_SEARCH); + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + ai_Original_SetSearch(oPC, bTurnOn); + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) ai_Original_SetSearch(oAssociate, bTurnOn); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) ai_Original_SetSearch(oAssociate, bTurnOn); + } + } + else + { + ai_Philos_SetSearch(oPC, oPC, "pc", bTurnOn); + string sAssociateType; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) + { + sAssociateType = ai_GetAssociateType(oPC, oAssociate); + ai_Philos_SetSearch(oPC, oAssociate, sAssociateType, bTurnOn); + } + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) + { + sAssociateType = ai_GetAssociateType(oPC, oAssociate); + ai_Philos_SetSearch(oPC, oAssociate, sAssociateType, bTurnOn); + } + } + } + if(bTurnOn) + { + ai_SendMessages("Everyone is now in search mode!", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, "pc" + AI_COMMAND_NUI, "pc" + AI_WIDGET_NUI, "btn_cmd_search_tooltip", " Everyone leave search mode"); + } + else + { + ai_SendMessages("Everyone has left search mode!", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, "pc" + AI_COMMAND_NUI, "pc" + AI_WIDGET_NUI, "btn_cmd_search_tooltip", " Everyone enter search mode"); + } + } + if(nCommand == 6) // All associate use stealth mode + { + int bTurnOn = !ai_GetAIMode(oPC, AI_MODE_AGGRESSIVE_STEALTH); + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + ai_Original_SetStealth(oPC, bTurnOn); + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) ai_Original_SetStealth(oAssociate, bTurnOn); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) ai_Original_SetStealth(oAssociate, bTurnOn); + } + } + else + { + ai_Philos_SetStealth(oPC, oPC, "pc", bTurnOn); + string sAssociateType; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) + { + sAssociateType = ai_GetAssociateType(oPC, oAssociate); + ai_Philos_SetStealth(oPC, oAssociate, sAssociateType, bTurnOn); + } + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) + { + sAssociateType = ai_GetAssociateType(oPC, oAssociate); + ai_Philos_SetStealth(oPC, oAssociate, sAssociateType, bTurnOn); + } + } + } + if(bTurnOn) + { + ai_SendMessages("Everyone is now in stealth mode.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, "pc" + AI_COMMAND_NUI, "pc" + AI_WIDGET_NUI, "btn_cmd_stealth_tooltip", " Everyone leave stealth mode"); + } + else + { + ai_SendMessages("Everyone has left stealth mode.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, "pc" + AI_COMMAND_NUI, "pc" + AI_WIDGET_NUI, "btn_cmd_stealth_tooltip", " Everyone enter stealth mode"); + } + } + } + else + { + if(nCommand == 1) + { + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + AssignCommand(oAssociate, ai_Original_Guard()); + } + else ai_Philos_Guard(oPC, oAssociate); + } + else if(nCommand == 2) + { + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + AssignCommand(oAssociate, ai_Original_Follow()); + } + else AssignCommand(oAssociate, ai_Philos_Follow(oPC)); + } + else if(nCommand == 3) + { + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + AssignCommand(oAssociate, ai_Original_StandGround()); + } + else AssignCommand(oAssociate, ai_Philos_StandGround(oPC)); + } + else if(nCommand == 4) + { + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + AssignCommand(oAssociate, ai_Original_AttackNearest()); + } + else ai_Philos_AttackNearest(oPC, oAssociate); + } + } +} +void ai_Action(object oPC, object oAssociate) +{ + if(oPC == oAssociate) + { + DeleteLocalObject(oPC, "NW_ASSOCIATE_COMMAND"); + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_ACTION_ALL"); + ai_SendMessages("Select an action for the party.", AI_COLOR_YELLOW, oPC); + } + else + { + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, oAssociate); + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_ACTION"); + ai_SendMessages("Select an action for " + GetName(oAssociate) + ".", AI_COLOR_YELLOW, oPC); + } + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); +} +void ai_AIScript(object oPC, object oAssociate, string sAssociateType, int nToken) +{ + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) != "") + { + string sScript = GetLocalString(oAssociate, AI_COMBAT_SCRIPT); + string sIcon = "ir_scommand"; + if(sScript == "ai_a_ambusher") + { + sScript = "ai_a_flanker"; + sIcon = "ir_invite"; + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, sScript); + ai_SendMessages(GetName(oAssociate) + " is now using flanking tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Flanker: Attacks enemies engaged with allies"); + } + else if(sScript == "ai_a_flanker") + { + sScript = "ai_a_peaceful"; + sIcon = "ir_ignore"; + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, sScript); + ai_SendMessages(GetName(oAssociate) + " is now using peaceful tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Peaceful: Avoids attacking any enemies if possible"); + } + else if(sScript == "ai_a_peaceful") + { + sScript = "ai_a_defensive"; + sIcon = "ir_knockdwn"; + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, sScript); + ai_SendMessages(GetName(oAssociate) + " is now using defensive tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Defensive: Attacks then uses Expertise/Parry"); + } + else if(sScript == "ai_a_defensive") + { + sScript = "ai_a_ranged"; + sIcon = "ir_ranger"; + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, sScript); + ai_SendMessages(GetName(oAssociate) + " is now using ranged tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Ranged: Attacks from range as much as possible"); + } + else if(sScript == "ai_a_ranged") + { + sScript = "ai_a_cntrspell"; + sIcon = "ir_dcaster"; + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, sScript); + ai_SendMessages(GetName(oAssociate) + " is now using counter spell tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Counter Spell: Tries to counter enemy spells"); + } + else if(sScript == "ai_a_cntrspell") + { + DeleteLocalString(oAssociate, AI_DEFAULT_SCRIPT); + ai_SetAssociateAIScript(oAssociate, FALSE); + sScript = GetLocalString(oAssociate, AI_DEFAULT_SCRIPT); + ai_SendMessages(GetName(oAssociate) + " is now using default tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Default tactics: Using the creatures base AI script"); + } + else + { + sScript = "ai_a_ambusher"; + sIcon = "ir_rogue"; + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, sScript); + ai_SendMessages(GetName(oAssociate) + " is now using ambush tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Ambusher: Attacks from a hidden position"); + } + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_image", JsonString(sIcon)); + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_label", JsonString("Tactics: " + sScript)); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + if(JsonGetType(JsonArrayGet(jAIData, 8)) == JSON_TYPE_NULL) jAIData = JsonArrayInsert(jAIData, JsonString(sScript)); + else jAIData = JsonArraySet(jAIData, 8, JsonString(sScript)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + else + { + if(GetCombatCondition(X0_COMBAT_FLAG_AMBUSHER, oAssociate)) + { + SetCombatCondition(X0_COMBAT_FLAG_AMBUSHER, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_COWARDLY, TRUE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_RANGED, FALSE, oAssociate); + ai_SendMessages(GetName(oAssociate) + " is now using coward tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Using coward tactics"); + } + else if(GetCombatCondition(X0_COMBAT_FLAG_COWARDLY, oAssociate)) + { + SetCombatCondition(X0_COMBAT_FLAG_AMBUSHER, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_COWARDLY, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE, TRUE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_RANGED, FALSE, oAssociate); + ai_SendMessages(GetName(oAssociate) + " is now using defensive tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Using defensive tactics"); + } + else if(GetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE, oAssociate)) + { + SetCombatCondition(X0_COMBAT_FLAG_AMBUSHER, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_COWARDLY, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_RANGED, TRUE, oAssociate); + ai_SendMessages(GetName(oAssociate) + " is now using ranged tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Using ranged tactics"); + } + else if(GetCombatCondition(X0_COMBAT_FLAG_RANGED, oAssociate)) + { + SetCombatCondition(X0_COMBAT_FLAG_AMBUSHER, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_COWARDLY, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_RANGED, FALSE, oAssociate); + ai_SendMessages(GetName(oAssociate) + " is now using normal tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Using ambush tactics"); + } + else + { + SetCombatCondition(X0_COMBAT_FLAG_AMBUSHER, TRUE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_COWARDLY, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_RANGED, FALSE, oAssociate); + ai_SendMessages(GetName(oAssociate) + " is now using ambush tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Using ambush tactics"); + } + } +} +void ai_HavePCPlaceTrap(object oPC, object oAssociate) +{ + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, oAssociate); + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_GET_TRAP"); + ai_SendMessages(GetName(oAssociate) + " select a trap to place.", AI_COLOR_YELLOW, oPC); + OpenInventory(oAssociate, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_ITEM, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); +} +void ai_JumpAssociateToPC(object oPC) +{ + ai_ClearCreatureActions(TRUE); + JumpToObject(oPC); +} +void ai_JumpToPC(object oPC, object oAssociate) +{ + int nAssociateType, nHenchman, nHenchAssociate; + object oHenchman, oHenchmanAssociate; + if(oPC != oAssociate) + { + if(nAssociateType == ASSOCIATE_TYPE_HENCHMAN) + { + for(nHenchAssociate = 2; nHenchAssociate <= 5; nHenchAssociate++) + { + oHenchmanAssociate = GetAssociate(nHenchAssociate, oHenchman, 1); + if(oHenchmanAssociate != OBJECT_INVALID) + { + AssignCommand(oHenchmanAssociate, ai_JumpAssociateToPC(oPC)); + } + } + AssignCommand(oHenchman, ai_JumpAssociateToPC(oPC)); + } + else AssignCommand(oAssociate, ai_JumpAssociateToPC(oPC)); + return; + } + for(nAssociateType = 1; nAssociateType <= 5; nAssociateType++) + { + if(nAssociateType == ASSOCIATE_TYPE_HENCHMAN) + { + for(nHenchman = 1; nHenchman <= AI_MAX_HENCHMAN; nHenchman++) + { + oHenchman = GetAssociate(nAssociateType, oPC, nHenchman); + if(oHenchman != OBJECT_INVALID) + { + for(nHenchAssociate = 2; nHenchAssociate <= 5; nHenchAssociate++) + { + oHenchmanAssociate = GetAssociate(nHenchAssociate, oHenchman, 1); + if(oHenchmanAssociate != OBJECT_INVALID) + { + AssignCommand(oHenchmanAssociate, ai_JumpAssociateToPC(oPC)); + } + } + AssignCommand(oHenchman, ai_JumpAssociateToPC(oPC)); + } + } + } + else + { + oHenchman = GetAssociate(nAssociateType, oPC, 1); + if(oHenchman != OBJECT_INVALID) AssignCommand(oHenchman, ai_JumpAssociateToPC(oPC)); + } + } +} +void ai_GhostMode(object oPC, object oAssociate, int nToken, string sAssociateType) +{ + string sText; + if(ai_GetAIMode(oAssociate, AI_MODE_GHOST)) + { + ai_SetAIMode(oAssociate, AI_MODE_GHOST, FALSE); + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + sText = " Turn On clipping through creatures for " + GetName(oAssociate); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ghost_mode_tooltip", sText); + ai_SendMessages(GetName(oAssociate) + " is not in Ghost Mode and will run into creatures.", AI_COLOR_YELLOW, oPC); + } + else + { + ai_SetAIMode(oAssociate, AI_MODE_GHOST, TRUE); + effect eGhost = EffectCutsceneGhost(); + eGhost = UnyieldingEffect(eGhost); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, oAssociate); + sText = " Turn Off clipping through creatures for " + GetName(oAssociate); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ghost_mode_tooltip", sText); + ai_SendMessages(GetName(oAssociate) + " is now in Ghost Mode and will clip through creatures.", AI_COLOR_YELLOW, oPC); + } +} +void ai_ChangeCameraView(object oPC, object oAssociate) +{ + object oCamAssociate = GetLocalObject(oPC, "AI_CAMERA_ON_ASSOCIATE"); + if(oCamAssociate == oAssociate) + { + DeleteLocalObject(oPC, "AI_CAMERA_ON_ASSOCIATE"); + AttachCamera(oPC, oPC); + } + else + { + SetLocalObject(oPC, "AI_CAMERA_ON_ASSOCIATE", oAssociate); + AttachCamera(oPC, oAssociate); + } +} +void ai_SelectCameraView(object oPC) +{ + SetLocalString(oPC, AI_TARGET_MODE, "DM_SELECT_CAMERA_VIEW"); + ai_SendMessages(GetName(oPC) + " select an object to change the camera view to.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_CREATE, MOUSECURSOR_NOCREATE); +} +void ai_OpenInventory(object oAssociate, object oPC) +{ + // Funny things happen when you open associate inventories when they are not + // within sight. + if(LineOfSightObject(oPC, oAssociate)) + { + OpenInventory(oAssociate, oPC); + } + else ai_SendMessages(GetName(oAssociate) + " is not within sight!", AI_COLOR_RED, oPC); +} +void ai_SelectOpenInventory(object oPC) +{ + SetLocalString(oPC, AI_TARGET_MODE, "DM_SELECT_OPEN_INVENTORY"); + ai_SendMessages(GetName(oPC) + " select an object to open its inventory.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); +} +void ai_Plugin_Execute(object oPC, string sElem, int bUser = 0) +{ + int nIndex = StringToInt(GetStringRight(sElem, 1)); + json jPlugins, jPlugin; + if(bUser == 1) // From DM command menu. + { + string sName = ai_RemoveIllegalCharacters(GetName(oPC)); + jPlugins = ai_GetCampaignDbJson("plugins", sName, AI_DM_TABLE); + } + else if(bUser == 2) // From DM plugin menu, master plugin list. + { + jPlugins = ai_GetCampaignDbJson("plugins"); + } + else jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + jPlugin = JsonArrayGet(jPlugins, nIndex); + string sScript = JsonGetString(JsonArrayGet(jPlugin, 0)); + if(ResManGetAliasFor(sScript, RESTYPE_NCS) == "") + { + ai_SendMessages(sScript + " not found by ResMan!", AI_COLOR_RED, oPC); + } + else + { + string sName = JsonGetString(JsonArrayGet(jPlugin, 2)); + ai_SendMessages("Executing plugin " + sName + ".", AI_COLOR_GREEN, oPC); + ExecuteScript(sScript, oPC); + } +} diff --git a/src/module/nss/0i_color.nss b/src/module/nss/0i_color.nss new file mode 100644 index 0000000..b18fe7a --- /dev/null +++ b/src/module/nss/0i_color.nss @@ -0,0 +1,70 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_color +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// + Include scripts that are used to change the color of names and text. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Basic color codes. Message Notes +const string AI_COLOR_BLACK = "000"; // Nothing. +const string AI_COLOR_WHITE = "999"; // _Debug messages. +const string AI_COLOR_GRAY = "666"; // Server messages +const string AI_COLOR_YELLOW = "990"; // Generic messages to players. +const string AI_COLOR_DARK_YELLOW = "660"; // +const string AI_COLOR_RED = "900"; // Negative message to players. +const string AI_COLOR_DARK_RED = "600"; // +const string AI_COLOR_GREEN = "080"; // Positive message to players. +const string AI_COLOR_DARK_GREEN = "060"; // +const string AI_COLOR_BLUE = "009"; // +const string AI_COLOR_DARK_BLUE = "006"; // In game descriptive text. +const string AI_COLOR_CYAN = "099"; // +const string AI_COLOR_DARK_CYAN = "066"; // +const string AI_COLOR_MAGENTA = "909"; // +const string AI_COLOR_DARK_MAGENTA = "606";// +const string AI_COLOR_LIGHT_MAGENTA = "868"; // <âcâ> Combat text: Enemy name color. +const string AI_COLOR_ORANGE = "950"; // +const string AI_COLOR_DARK_ORANGE = "940"; // Combat text: base text color. +const string AI_COLOR_GOLD = "860"; // +// Strips the color codes from sText +string ai_StripColorCodes(string sText); +// This function will make sString be the specified color +// as specified in sRGB. RGB is the Red, Green, and Blue +// Each color can have a value from 0 to 9. +// 1 - 0(20)[ ] 142 - 5(8E)[?] +// 32 - 1(20)[ ] 170 - 6(AA)[ª] +// 57 - 2(39)[9] 198 - 7(C6)[Æ] +// 85 - 3(55)[U] 226 - 8(E2)[â] +// 113 - 4(71)[q] 255 - 9(FE)[ÿ] +string ai_AddColorToText(string sText, string sRGB = AI_COLOR_WHITE); + +string ai_StripColorCodes(string sText) +{ + string sColorCode, sChar; + int nStringLength = GetStringLength(sText); + int i = FindSubString(sText, "" + // End the color token + sText + ""; +} diff --git a/src/module/nss/0i_combat.nss b/src/module/nss/0i_combat.nss new file mode 100644 index 0000000..6c40eb1 --- /dev/null +++ b/src/module/nss/0i_combat.nss @@ -0,0 +1,3498 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_combat +//////////////////////////////////////////////////////////////////////////////// + Include scripts for combat scripts. +*/////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// +#include "0i_messages" +#include "0i_items" +#include "0i_spells" +// This structure is used to represent the number and type of +// enemies that a creature is facing, divided into four main +// categories: FIGHTERS, CLERICS, MAGES, MONSTERS. +struct stClasses +{ + int FIGHTERS; + int FIGHTER_LEVELS; + int CLERICS; + int CLERIC_LEVELS; + int MAGES; + int MAGE_LEVELS; + int MONSTERS; + int MONSTER_LEVELS; + int TOTAL; + int TOTAL_LEVELS; +}; +struct stTarget +{ + object oTarget; + int nValue; + int nBestValue; + int nBestSecondaryValue; + float fNearestRange; + float fNearestSecondaryRange; + int nIndex; + int nSecondaryIndex; + string sTargetType; +}; +//****************************************************************************** +//************ GET TARGETS USING THE OBJECT SEARCH FUNCTIONS ******************* +//****************************************************************************** +// Returns the nearest enemy that is not disabled from oCreature. +// You may pass in any of the CREATURE_TYPE_* constants +// used in GetNearestCreature as nCType1 & nCType2, with +// corresponding values for nCValue1 & nCValue2. +// NOTE: CREATURE_TYPE_PERCEPTION = 7, PERCEPTION_SEEN = 7. +// bDisabled = TRUE will also return any disabled targets that are not dead. +object ai_GetNearestEnemy(object oCreature, int nNth = 1, int nCType1 = -1, int nCValue1 = -1, int nCType2 = -1, int nCValue2 = -1, int bDisabled = FALSE); +// Returns the nearest ally from oCreature. +// You may pass in any of the CREATURE_TYPE_* constants +// used in GetNearestCreature as nCType1 & nCType2, with +// corresponding values for nCValue1 & nCValue2. +// NOTE: CREATURE_TYPE_PERCEPTION = 7, PERCEPTION_SEEN = 7. +object ai_GetNearestAlly(object oCreature, int nNth = 1, int nCType1 = -1, int nCValue1 = -1, int nCType2 = -1, int nCValue2 = -1); +// Returns the number of alive enemies grouped near oCreature within fDistance. +int ai_GetNumOfEnemiesInGroup(object oCreature, float fDistance = AI_RANGE_MELEE); +// Returns the number of alive allies grouped near oCreature within fDistance. +int ai_GetNumOfAlliesInGroup(object oCreature, float fDistance = AI_RANGE_MELEE); +// Returns the number of creatures of nRacial_Type within fDistance that can be seen by oCreature. +int ai_GetRacialTypeCount(object oCreature, int nRacial_Type, float fDistance = AI_RANGE_PERCEPTION); +// Returns the weakest attacker that is in melee or is attacking oCreature's master. +object ai_GetLowestCRAttackerOnMaster(object oCreature); + +//****************************************************************************** +//******************** SET/CLEAR COMBAT STATE FUNCTIONS ************************ +//****************************************************************************** +// Sets oCreatures's combat state by setting variables for AI_ALLIES and AI_ENEMIES. +// Returns the nearest visible enemy. +object ai_SetCombatState(object oCreature); +// Clears all variables that were define for the current round for oCreature. +void ai_ClearCombatState(object oCreature); + +//****************************************************************************** +//*************** GET TARGETS USING COMBAT STATE FUNCTIONS ********************* +//****************************************************************************** +// These functions will find a target or an index to a target based on the +// combat state variables created by the function ai_SetCombatState. + +// Returns the Index of the nearest creature seen within fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetNearestIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the nearest creature seen within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetNearestTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the index of the nearest creature seen with the lowest combat rating +// within fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetLowestCRIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the nearest creature seen with the lowest combat rating within fMaxRange +// in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetLowestCRTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the index of the nearest creature seen with the highest combat rating +// within fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetHighestCRIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the nearest creature seen with the highest combat rating within fMaxRange +// in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetHighestCRTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the index of the creature seen with the lowest enemies to oCreature that +// they are in melee with minus the number of allies to the caller they are in +// melee with within fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetLowestMeleeIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns the index of the creature seen with the most enemies to the caller that +// they are in melee with minus the number of allies to oCreature they are in +// melee with within fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetHighestMeleeIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns a creature of sTargetType where they have the least number of +// allies and the most number of enemies within fMaxRange in the combat state. +// Returns OBJECT_INVALID if there is not a good creature to select. +// sTargetType is either AI_ENEMY, or AI_ALLY. +object ai_GetGroupedTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns the index of the nearest creature with the least % of hitpoints within +// fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetMostWoundedIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the creature with the lowest health seen within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +object ai_GetMostWoundedTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the index of the nearest ally with the least % of hitpoints within +// fMaxRange in the combat state. +// This also filters for AI_MODE_PARTY_HEALING_OFF and AI_MODE_SELF_HEALING_OFF. +// If no ally is found then it will return an index of 0. +int ai_GetAllyToHealIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION); +// Returns the ally with the lowest health seen within fMaxRange in the combat state. +// This also filters for AI_MODE_PARTY_HEALING_OFF and AI_MODE_SELF_HEALING_OFF. +// Returns OBJECT_INVALID if no creature is found. +object ai_GetAllyToHealTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION); +// Returns the creature with the lowest fortitude save seen within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +object ai_GetLowestFortitudeSaveTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION); +// Returns the creature with the lowest reflex save seen within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +object ai_GetLowestReflexSaveTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION); +// Returns the creature with the lowest will save seen within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +object ai_GetLowestWillSaveTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION); +// Returns the creature with the lowest save based on nSpell save type seen +// within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +object ai_GetSpellTargetBasedOnSaves(object oCreature, int nSpell, float fMaxRange = AI_RANGE_PERCEPTION); +// Returns the index of the nearest creature seen that is busy attacking an ally +// within fMaxRange in the combat state. +// If none is found then it will return 0. +int ai_GetSneakAttackIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, int bAlwaysAtk = TRUE); +// Returns the index of the nearest creature seen that is busy attacking an ally +// within fMaxRange in the combat state. +// If none is found then it will return 0. +int ai_GetNearestIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the nearest combat creature seen within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetNearestTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the index of the nearest creature seen with the lowest combat rating +// that is not in a dangerous area of effect within fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetLowestCRIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the lowest combat creature seen within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetLowestTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the index of the nearest creature seen with the highest combat rating +// that is not in a dangerous area of effect within fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetHighestCRIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the highest combat creature seen within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetHighestTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the index of the creature seen with the most enemies to oCreature that +// they are in melee with minus the number of allies to oCreature they are in +// melee with that is not in a dangerous area of effect within fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetHighestMeleeIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns a creature of sTargetType where they have the least number of +// allies and the most number of enemies within fMaxRange that are not in a +// dangerous area of effect in the combat state. +// Returns OBJECT_INVALID if there is not a good creature to select. +// sTargetType is either AI_ENEMY, or AI_ALLY. +object ai_GetGroupedTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns the nearest creature seen of nClassType within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetNearestClassTarget(object oCreature, int nClassType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the creature with the lowest combat rating seen of nClassType within +// fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetLowestCRClassTarget(object oCreature, int nClassType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the creature with the highest combat rating seen of nClassType within +// fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetHighestCRClassTarget(object oCreature, int nClassType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the nearest creature seen of nRacialType within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetNearestRacialTarget(object oCreature, int nRacialType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the creature with the lowest combat rating seen of nRacialType within +// fMaxRange in the combat state. Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetLowestCRRacialTarget(object oCreature, int nRacialType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the creature with the highest combat rating seen of nRacialType within +// fMaxRange in the combat state. Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetHighestCRRacialTarget(object oCreature, int nRacialType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the nearest enemy seen that is attacking an ally with the least +// number of enemies on them within fMaxRange in the combat state. +// If none is found then it will return 0. +object ai_GetFlankTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, int bAlwaysAtk = TRUE); +// Returns the nearest enemy creature seen wihtin fMaxRange that is a favored enemy +// of the caller in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetNearestFavoredEnemyTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, int bAlwaysAtk = TRUE); +// Returns the best target for melee combat based if we are in melee or not. +// If not in melee it will get the nearest target that is not in a dangerous +// area of effect for us to attack in the combat state. +// If in melee it will get the weakest target. +// If it returns OBJECT_INVALID then we should stop the attack. The only way +// to not get a target is if we have been told not to attack strong opponents. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetBestCRTargetForMeleeCombat(object oCreature, int nInMelee, int bAlwaysAtk = TRUE); +// Returns the nearest target for melee combat based if we are in melee or not. +// If not in melee it will get the nearest target that is not in a dangerous +// area of effect for us to attack in the combat state. +// If it returns OBJECT_INVALID then we should stop the attack. The only way +// to not get a target is if we have been told not to attack strong opponents. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetNearestTargetForMeleeCombat(object oCreature, int nInMelee, int bAlwaysAtk = TRUE); +// Returns the target with the lowest combat rating for melee combat based if +// we are in melee or not. If not in melee it will get the nearest target that +// is not in a dangerous area of effect for us to attack in the combat state. +// If it returns OBJECT_INVALID then we should stop the attack. The only way +// to not get a target is if we have been told not to attack strong opponents. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetLowestCRTargetForMeleeCombat(object oCreature, int nInMelee, int bAlwaysAtk = TRUE); +// Returns the target with the highest combat rating for melee combat based if +// we are in melee or not. If not in melee it will get the nearest target that +// is not in a dangerous area of effect for us to attack in the combat state. +// If it returns OBJECT_INVALID then we should stop the attack. +object ai_GetHighestCRTargetForMeleeCombat(object oCreature, int nInMelee); +// Returns the Index of the nearest creature seen within fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_MonsterGetNearestIndex(object oMonster, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the index of the nearest enemy creature that can see oCreature. +int ai_GetNearestIndexThatSeesUs(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION); +// Returns the nearest creature attacking the caller within fMaxRange in the combat state. +// Returns OBJECT_INVALID if oCreature is not being attacked. +object ai_GetEnemyAttackingMe(object oCreature, float fMaxRange = AI_RANGE_MELEE); +// Returns the nearest creature attacking oAlly from oCreature within fMaxRange +// in the combat state. +// Returns OBJECT_INVALID if oAlly is not being attacked. +object ai_GetEnemyAttackingMyAlly(object oCreature, object oAlly, float fMaxRange = AI_RANGE_MELEE); +// Returns the number of enemies within fMaxRange of the caller in the combat state. +int ai_GetNumOfEnemiesInRange(object oCreature, float fMaxRange = AI_RANGE_MELEE); +// Returns the best ally target withing fMaxRange for nSpell to be cast on. +// Uses the ai_spells.2da file to pick a target. +object ai_GetAllyBuffTarget(object oCreature, int nSpell, float fMaxRange = AI_RANGE_BATTLEFIELD); + +//****************************************************************************** +//******************** OTHER COMBAT FUNCTIONS ******************************** +//****************************************************************************** + +// Returns the current round that oCreature is in for this combat. +int ai_GetCurrentRound(object oCreature); +// Returns the difficulty of the battle based on the combat state. +// nDifficulty is Enemy level - Ally level + 20 + Player adjustment. +// 20+ : Impossible - Cannot win. +// 17 to 19 : Overpowering - Use all of our powers. +// 15 to 16 : Very Difficult - Use all of our power (Highest level spells). +// 11 to 14 : Challenging - Use most of our power (Higher level powers). +// 8 to 10 : Moderate - Use half of our power (Mid level powers and less). +// 5 to 7 : Easy - Use our weaker powers (Lowest level powers). +// 2 to 4 : Effortless - Don't waste spells and powers on this. +// 1 or less: Pointless - We probably should ignore these dangers. +int ai_GetDifficulty(object oCreature); +// Returns oCreatures Combat rating. +//(BAB + AC - 10) / 2 +int ai_GetMyCombatRating(object oCreature); +// Returns the last creature oCreature attacked. +// bPhysical checks for creatures attacked in melee or range with a weapon. +// bSpell will look for creatures attacked by a spell. +object ai_GetAttackedTarget(object oCreature, int bPhysical = TRUE, int bSpell = FALSE); +// Returns TRUE if oCreature is of nClassType; +// May also check for general Class types with +// AI_CLASS_TYPE_ARCANE, AI_CLASS_TYPE_DIVINE, AI_CLASS_TYPE_CASTER, AI_CLASS_TYPE_WARRIOR. +int ai_CheckClassType(object oCreature, int nClassType); +// Returns TRUE if oCreature is of nRacialType; +// May also check for general racial types with +// AI_RACIAL_TYPE_ANIMAL_BEAST +int ai_CheckRacialType(object oCreature, int nRacialType); +// Saves oCreatures Normal appearance if they are not polymorphed and it has +// not already been saved. +void ai_SetNormalAppearance(object oCreature); +// Returns the normal appearance of oCreature. +int ai_GetNormalAppearance(object oCreature); +// Return the number and levels of all creatures within fMaxRange. +// They are grouped into Fighters, Clerics, Mages, and Monsters. +struct stClasses ai_GetFactionsClasses(object oCreature, int bEnemy = TRUE, float fMaxRange = AI_RANGE_BATTLEFIELD); +// This will return the class with the most levels. +// Returns a string of "FIGHTER", "CLERIC", "MAGE", or "MONSTER". +// Execute with GetFactionsClasses. +string ai_GetMostDangerousClass(struct stClasses stCount); +// Equips the best weapon, ranged or melee. +// Returns TRUE if equiped, FALSE if not. +// oTarget is the creature the caller is targeting. +void ai_EquipBestWeapons(object oCreature, object oTarget = OBJECT_INVALID); +// Equips a melee weapon AND checks for shield, two weapons, two handed, etc. +// Returns TRUE if equiped, FALSE if not. +// oTarget is the creature the caller is targeting. +int ai_EquipBestMeleeWeapon(object oCreature, object oTarget = OBJECT_INVALID); +// Equips a ranged weapon AND checks for ammo. +// Returns TRUE if equiped, FALSE if not. +// oTarget is the creature the caller is targeting. +int ai_EquipBestRangedWeapon(object oCreature, object oTarget = OBJECT_INVALID); +// Equips the best weapon for a monk character. +// Returns TRUE if equiped, FALSE if not. +// oTarget is the creature the caller is targeting. +int ai_EquipBestMonkMeleeWeapon(object oCreature, object oTarget = OBJECT_INVALID); +// Returns TRUE if oCreature is in a Dangerous Area of Effect in fMaxRange. +// bMove will attempt to move oCreature out of the Dangerous AOE if needed. +int ai_IsInADangerousAOE(object oCreature, float fMaxRange = AI_RANGE_BATTLEFIELD, int bMove = FALSE); +// Returns 1 if oHidden has an Invisiblity effect, Can't be spotted but can be heard. +// Returns 2 if oHidden has a Darkness effect. Can't be spotted but can be heard. +// Returns 3 if oHidden has a Sanctuary effect, Can't be spotted or heard. +// Returns 4 if oHidden is in stealth mode, Can be spotted and heard. +int ai_GetIsHidden(object oHidden); +// Returns TRUE if if oCaster has a good chance of effecting oCreature with nSpell. +int ai_CastOffensiveSpellVsTarget(object oCaster, object oCreature, int nSpell); +// Gets the base DC for a dragon. +int ai_GetDragonDC(object oCreature); +// Set oCreature's ai scripts based on its first class or the variable "AI_DEFAULT_SCRIPT". +void ai_SetCreatureAIScript(object oCreature); +// Returns TRUE if oTarget is immune to sneak attacks. +int ai_IsImmuneToSneakAttacks(object oCreature, object oTarget); +// Returns TRUE if iIndex target has a higher combat rating than oCreature. +int ai_IsStrongerThanMe(object oCreature, int nIndex); +// Returns TRUE if oTarget's CR is within nAdj of oCreature's level, otherwise FALSE. +int ai_StrongOpponent(object oCreature, object oTarget, int nAdj = 2); +// Returns TRUE if attacking oTarget with Power attack is a good option. +int ai_PowerAttackGood(object oCreature, object oTarget, float fAdj); +// Returns TRUE if oTarget's AC - oCreature Atk - nAtkAdj can hit within 25% to 75%. +int ai_AttackPenaltyOk(object oCreature, object oTarget, float fAtkAdj); +// Returns TRUE if oCreature AC - oTarget's Atk is less than 20. +int ai_ACAdjustmentGood(object oCreature, object oTarget, float fACAdj); +// Checks oCreatures melee weapon to see if they can kill oTarget in one hit. +int ai_WillKillInOneHit(object oCreature, object oTarget); +// Returns TRUE if oCreature has Mobility, SpringAttack, or a high Tumble. +int ai_CanIMoveInCombat(object oCreature); +// Returns TRUE if oCreature can safely fire a ranged weapon. +int ai_CanIUseRangedWeapon(object oCreature, int nInMelee); +// Returns TRUE if oCreature moves before the action. FALSE if they do not move. +// and -1 if the action is canceled. +// Checks current combat state to see if oCreature needs to move before using an action. +int ai_CheckCombatPosition(object oCreature, object oTarget, int nInMelee, int nAction, int nBaseItemType = 0); + +//****************************************************************************** +//************ GET TARGETS USING THE OBJECT SEARCH FUNCTIONS ******************* +//****************************************************************************** +object ai_GetNearestEnemy(object oCreature, int nNth = 1, int nCType1 = -1, int nCValue1 = -1, int nCType2 = -1, int nCValue2 = -1, int bDisabled = FALSE) +{ + object oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, + oCreature, nNth, nCType1, nCValue1, nCType2, nCValue2); + if(bDisabled) + { + while(oTarget != OBJECT_INVALID && GetIsDead(oTarget)) + { + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, + oCreature, ++nNth, nCType1, nCValue1, nCType2, nCValue2); + } + } + else + { + while(oTarget != OBJECT_INVALID && ai_Disabled(oTarget)) + { + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, + oCreature, ++nNth, nCType1, nCValue1, nCType2, nCValue2); + } + } + return oTarget; +} +object ai_GetNearestAlly(object oCreature, int nNth = 1, int nCType1 = -1, int nCValue1 = -1, int nCType2 = -1, int nCValue2 = -1) +{ + return GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, + oCreature, ++nNth, nCType1, nCValue1, nCType2, nCValue2); +} +int ai_GetNumOfEnemiesInGroup(object oCreature, float fDistance = AI_RANGE_MELEE) +{ + int nCnt; + location lLocation = GetLocation(oCreature); + object oEnemy = GetFirstObjectInShape(SHAPE_SPHERE, fDistance, lLocation); + while(oEnemy != OBJECT_INVALID) + { + if(GetIsEnemy(oEnemy, oCreature) && !GetIsDead(oEnemy)) nCnt++; + oEnemy = GetNextObjectInShape(SHAPE_SPHERE, fDistance, lLocation); + } + return nCnt; +} +int ai_GetNumOfAlliesInGroup(object oCreature, float fDistance = AI_RANGE_MELEE) +{ + int nCnt; + location lLocation = GetLocation(oCreature); + object oAlly = GetFirstObjectInShape(SHAPE_SPHERE, fDistance, lLocation); + while(oAlly != OBJECT_INVALID) + { + if(GetReputation(oCreature, oAlly) > 89 && oAlly != oCreature && !GetIsDead(oAlly)) + { + nCnt++; + } + oAlly = GetNextObjectInShape(SHAPE_SPHERE, fDistance, lLocation); + } + return nCnt; +} +int ai_GetRacialTypeCount(object oCreature, int nRacial_Type, float fDistance = AI_RANGE_PERCEPTION) +{ + int nCnt = 1; + int nCount = 0; + object oEnemy = ai_GetNearestEnemy(oCreature, nCnt, + CREATURE_TYPE_PERCEPTION, + PERCEPTION_SEEN, + CREATURE_TYPE_RACIAL_TYPE, + nRacial_Type); + while(oEnemy != OBJECT_INVALID && GetDistanceBetween(oEnemy, oCreature) <= fDistance) + { + if(!ai_GetHasEffectType(oEnemy, EFFECT_TYPE_TURNED)) nCount++; + nCnt++; + oEnemy = ai_GetNearestEnemy(oCreature, nCnt, + CREATURE_TYPE_PERCEPTION, + PERCEPTION_SEEN, + CREATURE_TYPE_RACIAL_TYPE, + nRacial_Type); + } + return nCount; +} +object ai_GetLowestCRAttackerOnMaster(object oCreature) +{ + object oTarget = OBJECT_INVALID, oMaster = GetMaster(oCreature); + if(AI_DEBUG) ai_Debug("0i_combat", "419", "Checking for weakest attacker on " + GetName(oMaster)); + int nEnemyCombatRating, nWeakestCombatRating, nCntr = 1; + float fNearest = AI_RANGE_MELEE + 1.0f; + // Get the weakest opponent in melee with our master. + object oEnemy = ai_GetNearestEnemy(oMaster, nCntr, 7, 7); + float fDistance = GetDistanceBetween(oMaster, oEnemy); + while (oEnemy != OBJECT_INVALID && fDistance <= AI_RANGE_MELEE) + { + nEnemyCombatRating = ai_GetMyCombatRating(oEnemy); + if(AI_DEBUG) ai_Debug("0i_combat", "428", GetName(oEnemy) + " nECR: " + IntToString(nEnemyCombatRating)); + if (nEnemyCombatRating < nWeakestCombatRating || + nEnemyCombatRating == nWeakestCombatRating && fDistance < fNearest) + { + fNearest = fDistance; + nWeakestCombatRating = nEnemyCombatRating; + oTarget = oEnemy; + } + oEnemy = ai_GetNearestEnemy(oMaster, ++nCntr, 7, 7); + } + // No targets in melee with our master, lets see if there is a ranged attacker. + if (oTarget == OBJECT_INVALID) oTarget = GetLastHostileActor(oMaster); + return oTarget; +} + +//****************************************************************************** +//******************** SET/CLEAR COMBAT STATE FUNCTIONS ************************ +//****************************************************************************** + +object ai_SetCombatState(object oCreature) +{ + if(AI_DEBUG) ai_Counter_Start(); + object oMaster = GetMaster(); + if(oMaster == OBJECT_INVALID) oMaster = oCreature; + int nEnemyNum, nEnemyPower, nAllyNum, nAllyPower, nInMelee, nMagic; + int nHealth, nNth, nAllies, nPower, nDisabled, bThreat,nObjects; + int nEnemyHighestPower, nAllyHighestPower; + float fNearest = AI_RANGE_BATTLEFIELD; + float fDistance; + float fMaxRange = GetLocalFloat(oCreature, AI_ASSOC_PERCEPTION_DISTANCE); + if(fMaxRange == 0.0) fMaxRange = AI_RANGE_PERCEPTION; + string sCnt, sDebugText; + location lLocation = GetLocation(oMaster); + object oMelee, oNearestEnemy = OBJECT_INVALID; + if(AI_DEBUG) ai_Debug("0i_combat", "491", "************************************************************"); + if(AI_DEBUG) ai_Debug("0i_combat", "492", "******************* CREATING COMBAT DATA *******************"); + if(AI_DEBUG) ai_Debug("0i_combat", "493", GetName(oCreature)); + // We want to include ourselves in the combat state. + object oObject = GetFirstObjectInShape(SHAPE_SPHERE, AI_RANGE_BATTLEFIELD, lLocation); + // Get all creatures within 40 meters(5 meters beyond our perception of 35). + // Centered on either the creature or their master. + while(oObject != OBJECT_INVALID) + { + // Process all enemies. + if(GetIsEnemy(oObject, oCreature)) + { + if(GetObjectSeen(oObject, oCreature) || GetObjectHeard(oObject, oCreature)) + { + fDistance = GetDistanceBetween(oObject, oCreature); + if(fDistance <= fMaxRange) + { + // ********** Get the Total levels of the Enemy ********** + nPower = ai_GetCharacterLevels(oObject); + if(nPower < 1) nPower = 1; + if(nEnemyHighestPower < nPower) nEnemyHighestPower = nPower; + nEnemyPower += nPower; + // ********** Check if the Enemy is disabled ********** + bThreat = TRUE; + nDisabled = ai_Disabled(oObject); + if(nDisabled) + { + if(AI_DEBUG) sDebugText += "**** DISABLED(" + IntToString(nDisabled) + ") ****"; + // Decide if they are still a threat: 1 - dead, 2 - Bleeding. + if(nDisabled == 1 || nDisabled == 2 || + //nDisabled == EFFECT_TYPE_CONFUSED || + //nDisabled == EFFECT_TYPE_FRIGHTENED || + //nDisabled == EFFECT_TYPE_PARALYZE || + nDisabled == EFFECT_TYPE_CHARMED || + nDisabled == EFFECT_TYPE_PETRIFY) + { + bThreat = FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "527", "Enemy: " + GetName(oObject) + sDebugText); + } + } + // If they are using the coward ai then treat them as frightened. + // we place it here as an else so we don't overwrite another disabled effect. + else if(GetLocalString(oObject, AI_COMBAT_SCRIPT) == "ai_coward") + { + nDisabled = EFFECT_TYPE_FRIGHTENED; + // !!!! For /DEBUG CODE !!!! + if(AI_DEBUG) sDebugText += "**** DISABLED(" + IntToString(nDisabled) + ") ****"; + } + if(bThreat) + { + sCnt = IntToString(++nEnemyNum); + // ********** Set if the Enemy is disabled ********** + SetLocalInt(oCreature, AI_ENEMY_DISABLED + sCnt, nDisabled); + // ********** Set the Enemy Object ********** + SetLocalObject(oCreature, AI_ENEMY + sCnt, oObject); + // ********** Set the Enemy Combat Rating ********** + SetLocalInt(oCreature, AI_ENEMY_COMBAT + sCnt, ai_GetMyCombatRating(oObject)); + // ********** Set the Enemy Health Percentage ********** + nHealth = ai_GetPercHPLoss(oObject); + SetLocalInt(oCreature, AI_ENEMY_HEALTH + sCnt, nHealth); + // ********** Set the number of enemies near the enemy ********** + nInMelee = 0; + nNth = 1; + oMelee = GetNearestObject(OBJECT_TYPE_CREATURE, oObject, nNth); + while(oMelee != OBJECT_INVALID && !GetIsDead(oMelee) && + GetDistanceBetween(oMelee, oObject) < AI_RANGE_MELEE) + { + // We add an enemy to the group. + if(GetIsEnemy(oMelee, oCreature)) nInMelee++; + oMelee = GetNearestObject(OBJECT_TYPE_CREATURE, oObject, ++nNth); + } + SetLocalInt(oCreature, AI_ENEMY_MELEE + sCnt, nInMelee); + // ********** Set the Enemies distance ********** + fDistance = GetDistanceBetween(oObject, oCreature); + SetLocalFloat(oCreature, AI_ENEMY_RANGE + sCnt, fDistance); + // ********** Set if the Enemy is perceived ********** + if(GetObjectSeen(oObject, oCreature) || + (GetObjectHeard(oObject, oCreature) && fDistance <= AI_RANGE_MELEE && + ai_GetIsHidden(oObject))) + { + SetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCnt, TRUE); + if(AI_DEBUG) sDebugText += "**** PERCEIVED Seen: " + + IntToString(GetObjectSeen(oObject, oCreature)) + + " Heard: " + IntToString(GetObjectHeard(oObject, oCreature)) + " ****"; + } + else SetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCnt, FALSE); + // ********** Set the Nearest Enemy seen ********** + if(fDistance < fNearest) + { + fNearest = fDistance; + oNearestEnemy = oObject; + } + } + } + // !!! Debug code !!! + if(AI_DEBUG && fDistance < AI_RANGE_MELEE) sDebugText += "**** MELEE ****"; + if(AI_DEBUG) ai_Debug("0i_combat", "587", "Enemy(" + IntToString(nEnemyNum) + "): " + + GetName(oObject) + sDebugText); + if(AI_DEBUG) ai_Debug("0i_combat", "589", "nHealth: " + IntToString(nHealth) + + " nInMelee: " + IntToString(nInMelee) + + " fDistance: " + FloatToString(fDistance, 0, 2) + + " nNum: " + IntToString(nEnemyNum) + + " nPower: " + IntToString(nEnemyPower / 2)); + } + else + { + // ********** Also add the levels of Unknown Enemies *********** + nPower = FloatToInt(ai_GetCharacterLevels(oObject) / 1.5); + if(nPower < 1) nPower = 1; + nEnemyPower += nPower; + if(AI_DEBUG) ai_Debug("0i_combat", "601", "Enemy(NOT PERCEIVED): " + + GetName(oObject) + " fDistance: " + + FloatToString(GetDistanceBetween(oObject, oCreature), 0, 2) + + " nPower: " + IntToString(nEnemyPower)); + } + } + // Process all Allies. + else if(GetFactionEqual(oObject, oCreature)) + { + // ********** Set if the Ally is disabled ********** + nDisabled = ai_Disabled(oObject); + if(nDisabled) + { + sDebugText += "**** DISABLED(" + IntToString(nDisabled) + ") ****"; + SetLocalInt(oCreature, AI_ALLY_DISABLED + sCnt, nDisabled); + } + if(nDisabled != 1) + { + sCnt = IntToString(++nAllyNum); + // ********** Set the Ally Object ********** + SetLocalObject(oCreature, AI_ALLY + sCnt, oObject); + // ********** Set the Ally Combat Rating ********** + SetLocalInt(oCreature, AI_ALLY_COMBAT + sCnt, ai_GetMyCombatRating(oObject)); + // ********** Set the Ally Health Percentage ********** + nHealth = ai_GetPercHPLoss(oObject); + SetLocalInt(oCreature, AI_ALLY_HEALTH + sCnt, nHealth); + // ********** Set the number of enemies near the ally ********** + nInMelee = 0; + nNth = 1; + oMelee = GetNearestObject(OBJECT_TYPE_CREATURE, oObject, nNth); + while(oMelee != OBJECT_INVALID && !GetIsDead(oMelee) && + GetDistanceBetween(oMelee, oObject) < AI_RANGE_MELEE) + { + if(GetIsEnemy(oMelee, oCreature)) nInMelee++; + //else nInMelee--; + oMelee = GetNearestObject(OBJECT_TYPE_CREATURE, oObject, ++nNth); + } + SetLocalInt(oCreature, AI_ALLY_MELEE + sCnt, nInMelee); + // ********** Set the Allies distance ********** + SetLocalFloat(oCreature, AI_ALLY_RANGE + sCnt, GetDistanceBetween(oObject, oCreature)); + // ********** All allies are considered to be seen ********** + SetLocalInt(oCreature, AI_ALLY_PERCEIVED + sCnt, TRUE); + // ********** Get the Total levels of the Allies ********** + nPower = ai_GetCharacterLevels(oObject); + if(nAllyHighestPower < nPower) nAllyHighestPower = nPower; + nAllyPower +=(nPower * nHealth) / 100; + if(AI_DEBUG) ai_Debug("0i_combat", "647", "Ally(" + IntToString(nAllyNum) + "): " + + GetName(oObject) + sDebugText); + if(AI_DEBUG) ai_Debug("0i_combat", "649", "nHealth: " + IntToString(nHealth) + + " nInMelee: " + IntToString(nInMelee) + + " fDistance: " + FloatToString(GetDistanceToObject(oObject), 0, 2) + + " nNum: " + IntToString(nAllyNum) + + " nPower: " + IntToString(nAllyPower / 2)); + } + } + if(AI_DEBUG) sDebugText = ""; + oObject = GetNextObjectInShape(SHAPE_SPHERE, AI_RANGE_BATTLEFIELD, lLocation); + } + if(AI_DEBUG) ai_Debug("0i_combat", "659", "Nearest Enemy: " + GetName(oNearestEnemy)); + if(AI_DEBUG) ai_Debug("0i_combat", "660", "****************** FINISHED COMBAT DATA *******************"); + if(AI_DEBUG) ai_Debug("0i_combat", "661", "************************************************************"); + // Lets save processing by only clearing previous enemy data we don't overwrite. + int nPreviousEnd = GetLocalInt(oCreature, AI_ENEMY_NUMBERS); + int nCnt = nEnemyNum + 1; + if(AI_DEBUG) ai_Debug("0i_combat", "665", "Clearing Enemy Combat Data: nPreviousEnd: " + + IntToString(nPreviousEnd) + " nCurrentEnd: " + IntToString(nCnt - 1)); + while(nPreviousEnd >= nCnt) + { + sCnt = IntToString(nCnt); + if(AI_DEBUG) ai_Debug("0i_combat", "670", "Clearing Enemy Combat Data: " + sCnt + " " + + GetName(GetLocalObject(oCreature, AI_ENEMY + sCnt))); + DeleteLocalObject(oCreature, AI_ENEMY + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCnt); + DeleteLocalFloat(oCreature, AI_ENEMY_RANGE + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_COMBAT + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_MELEE + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_HEALTH + sCnt); + nCnt ++; + } + // Lets save processing by only clearing previous ally data we don't overwrite. + nPreviousEnd = GetLocalInt(oCreature, AI_ALLY_NUMBERS); + nCnt = nAllyNum + 1; + if(AI_DEBUG) ai_Debug("0i_combat", "683", "Clearing Ally Combat Data: nPreviousEnd: " + + IntToString(nPreviousEnd) + " nCurrentEnd: " + IntToString(nCnt - 1)); + while(nPreviousEnd >= nCnt) + { + sCnt = IntToString(nCnt); + if(AI_DEBUG) ai_Debug("0i_combat", "688", "Clearing Ally Combat Data: " + sCnt + " " + + GetName(GetLocalObject(oCreature, AI_ENEMY + sCnt))); + DeleteLocalObject(oCreature, AI_ALLY + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_PERCEIVED + sCnt); + DeleteLocalFloat(oCreature, AI_ALLY_RANGE + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_COMBAT + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_MELEE + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_HEALTH + sCnt); + nCnt ++; + } + // Finally set all group states. + SetLocalInt(oCreature, AI_ENEMY_NUMBERS, nEnemyNum); + // Total enemy power is half the levels of all enemies + the total levels + // of the highest level enemy. + nEnemyPower = (nEnemyPower / 2) + nEnemyHighestPower; + SetLocalInt(oCreature, AI_ENEMY_POWER, nEnemyPower); + SetLocalObject(oCreature, AI_ENEMY_NEAREST, oNearestEnemy); + SetLocalInt(oCreature, AI_ALLY_NUMBERS, nAllyNum); + // Total ally power is half the levels of all allies + the total levels + // of the highest level ally, only used by associates. + nAllyPower = (nAllyPower / 2) + nAllyHighestPower; + SetLocalInt(oCreature, AI_ALLY_POWER, nAllyPower); + if(AI_DEBUG) ai_Debug("0i_combat", "710", "nEnemyPower: " + IntToString(nEnemyPower) + + " nEnemyHighestPower: " + IntToString(nEnemyHighestPower) + + " nAllyPower: " + IntToString(nAllyPower) + + " nAllyHighestPower: " + IntToString(nAllyHighestPower)); + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + " has finished the Combat State"); + return oNearestEnemy; +} +void ai_ClearCombatState(object oCreature) +{ + int bEnemyDone, bAllyDone, nCnt = 1; + int nEnemyNum = GetLocalInt(oCreature, AI_ENEMY_NUMBERS); + int nAllyNum = GetLocalInt(oCreature, AI_ALLY_NUMBERS); + if(AI_DEBUG) ai_Debug("0i_combat", "722", "Clearing " + GetName(oCreature) + "'s combat state." + + " nEnemyNum: " + IntToString(nEnemyNum) + " nAllyNum: " + IntToString(nAllyNum)); + string sCnt; + while(!bEnemyDone || !bAllyDone) + { + sCnt = IntToString(nCnt); + if(nCnt <= nEnemyNum) + { + if(AI_DEBUG) ai_Debug("0i_combat", "730", "Clearing " + GetName(GetLocalObject(oCreature, AI_ENEMY + sCnt)) + "."); + DeleteLocalObject(oCreature, AI_ENEMY + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_DISABLED + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCnt); + DeleteLocalFloat(oCreature, AI_ENEMY_RANGE + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_COMBAT + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_MELEE + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_HEALTH + sCnt); + } + else bEnemyDone = TRUE; + if(nCnt <= nAllyNum) + { + if(AI_DEBUG) ai_Debug("0i_combat", "742", "Clearing " + GetName(GetLocalObject(oCreature, AI_ALLY + sCnt)) + "."); + DeleteLocalObject(oCreature, AI_ALLY + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_DISABLED + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_PERCEIVED + sCnt); + DeleteLocalFloat(oCreature, AI_ALLY_RANGE + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_COMBAT + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_MELEE + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_HEALTH + sCnt); + } + else bAllyDone = TRUE; + nCnt++; + } + DeleteLocalObject(oCreature, AI_ENEMY_NEAREST); + DeleteLocalInt(oCreature, AI_ENEMY_NUMBERS); + DeleteLocalInt(oCreature, AI_ENEMY_POWER); + DeleteLocalInt(oCreature, AI_ALLY_NUMBERS); + DeleteLocalObject(oCreature, AI_ALLY_POWER); + // Also clear these combat variables at the end of combat. + DeleteLocalObject(oCreature, AI_ATTACKED_PHYSICAL); + DeleteLocalObject(oCreature, AI_ATTACKED_SPELL); + // Remove Talent variables. + DeleteLocalJson(oCreature, AI_TALENT_CURE); + DeleteLocalJson(oCreature, AI_TALENT_HEALING); + DeleteLocalJson(oCreature, AI_TALENT_ENHANCEMENT); + DeleteLocalJson(oCreature, AI_TALENT_PROTECTION); + DeleteLocalJson(oCreature, AI_TALENT_SUMMON); + DeleteLocalJson(oCreature, AI_TALENT_DISCRIMINANT_AOE); + DeleteLocalJson(oCreature, AI_TALENT_INDISCRIMINANT_AOE); + DeleteLocalJson(oCreature, AI_TALENT_RANGED); + DeleteLocalJson(oCreature, AI_TALENT_TOUCH); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_CURE); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_HEALING); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_ENHANCEMENT); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_PROTECTION); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_SUMMON); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_DISCRIMINANT_AOE); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_INDISCRIMINANT_AOE); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_RANGED); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_TOUCH); + DeleteLocalInt(oCreature, AI_AM_I_SEARCHING); + DeleteLocalInt(oCreature, AI_TRIED_TO_HIDE); + DeleteLocalObject(oCreature, AI_IS_INVISIBLE); + DeleteLocalInt(oCreature, sLastActionVarname); + DeleteLocalInt(oCreature, AI_TALENTS_SET); + DeleteLocalInt(oCreature, AI_ROUND); + DeleteLocalInt(oCreature, sIPHasHasteVarname); + DeleteLocalInt(oCreature, sIPImmuneVarname); + DeleteLocalInt(oCreature, sIPResistVarname); + DeleteLocalInt(oCreature, sIPReducedVarname); + ai_EndCombatRound(oCreature); +} +//****************************************************************************** +//*********************** GET TARGETS INTERNAL FUNCTIONS *********************** +//****************************************************************************** +// These functions are used by the Get Index/ Get Target functions below. + +int ai_TargetIsInRangeofCreature(object oCreature, string sTargetType, string sCounter, float fMaxRange) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "796", "fMaxRange: " + FloatToString(fMaxRange, 0, 2) + + " fTargetRange: " + FloatToString(GetLocalFloat(oCreature, sTargetType + "_RANGE" + sCounter), 0, 2)); + return fMaxRange >= GetLocalFloat(oCreature, sTargetType + "_RANGE" + sCounter); +} +int ai_TargetIsInRangeofMaster(object oCreature, object oTarget) +{ + object oMaster = GetMaster(); + if(oMaster == OBJECT_INVALID) return TRUE; + float fMaxRange = GetLocalFloat(oCreature, AI_ASSOC_PERCEPTION_DISTANCE); + if(fMaxRange == 0.0) fMaxRange = 20.0; + float fTargetRangefromMaster = GetDistanceBetween(oTarget, oMaster); + if(AI_DEBUG) ai_Debug("0i_combat", "807", "fMaxRangefromMaster: " + FloatToString(fMaxRange, 0, 2) + + " fTargetRangefromMaster: " + FloatToString(fTargetRangefromMaster, 0, 2)); + return fMaxRange >= fTargetRangefromMaster; +} +struct stTarget ai_CheckForNearestTarget(object oCreature, struct stTarget sTarget, int nIndex, string sIndex) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "817", "Getting nearest index: " + sIndex + + " fRange: " + FloatToString(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex), 0, 2) + + " fNearestRange: " + FloatToString(sTarget.fNearestRange, 0, 2) + + " fNearestSecondaryRange: " + FloatToString(sTarget.fNearestSecondaryRange, 0, 2)); + // Lets put any disabled targets and associates if set in a secondary group. + if(GetLocalInt(oCreature, sTarget.sTargetType + "_DISABLED" + sIndex) || + (ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && GetAssociateType(sTarget.oTarget))) + { + if(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestSecondaryRange) + { + sTarget.fNearestSecondaryRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nSecondaryIndex = nIndex; + } + } + else if(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestRange) + { + sTarget.fNearestRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nIndex = nIndex; + } + return sTarget; +} +struct stTarget ai_CheckForLowestValueTarget(object oCreature, struct stTarget sTarget, int nIndex, string sIndex) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "835", "Getting lowest value index: " + sIndex + + " fRange: " + FloatToString(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex), 0, 2) + + " fNearestRange: " + FloatToString(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex), 0, 2) + + " fNearestSecondaryRange: " + FloatToString(sTarget.fNearestSecondaryRange, 0, 2) + + " sTarget.nValue: " + IntToString(sTarget.nValue) + + " sTarget.nBestValue: " + IntToString(sTarget.nBestValue) + + " sTarget.nBestSecondaryValue: " + IntToString(sTarget.nBestSecondaryValue)); + // Lets put any disabled targets and associates if set in a secondary group. + if(GetLocalInt(oCreature, sTarget.sTargetType + "_DISABLED" + sIndex) || + (ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && GetAssociateType(sTarget.oTarget))) + { + if(sTarget.nValue < sTarget.nBestSecondaryValue || + (sTarget.nValue == sTarget.nBestSecondaryValue && + GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestSecondaryRange)) + { + sTarget.fNearestSecondaryRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nBestSecondaryValue = sTarget.nValue; + sTarget.nSecondaryIndex = nIndex; + } + } + // Has less value or equal value and is closer. + else if(sTarget.nValue < sTarget.nBestValue || + (sTarget.nBestValue == sTarget.nValue && + GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestRange)) + { + sTarget.fNearestRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nBestValue = sTarget.nValue; + sTarget.nIndex = nIndex; + } + return sTarget; +} +struct stTarget ai_CheckForHighestValueTarget(object oCreature, struct stTarget sTarget, int nIndex, string sIndex) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "865", "Getting highest value index: " + sIndex + + " fRange: " + FloatToString(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex), 0, 2) + + " fNearestRange: " + FloatToString(sTarget.fNearestRange, 0, 2) + + " fNearestSecondaryRange: " + FloatToString(sTarget.fNearestSecondaryRange, 0, 2) + + " sTarget.nValue: " + IntToString(sTarget.nValue) + + " sTarget.nBestValue: " + IntToString(sTarget.nBestValue) + + " sTarget.nBestSecondaryValue: " + IntToString(sTarget.nBestSecondaryValue)); + // Lets put any disabled targets and associates if set in a secondary group. + if(GetLocalInt(oCreature, sTarget.sTargetType + "_DISABLED" + sIndex) || + (ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && GetAssociateType(sTarget.oTarget))) + { + if(sTarget.nValue > sTarget.nBestSecondaryValue || + (sTarget.nValue == sTarget.nBestSecondaryValue && + GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestSecondaryRange)) + { + sTarget.fNearestSecondaryRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nBestSecondaryValue = sTarget.nValue; + sTarget.nSecondaryIndex = nIndex; + } + } + // Has less value or equal value and is closer. + else if(sTarget.nValue > sTarget.nBestValue || + (sTarget.nBestValue == sTarget.nValue && + GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestRange)) + { + sTarget.fNearestRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nBestValue = sTarget.nValue; + sTarget.nIndex = nIndex; + } + return sTarget; +} +struct stTarget ai_CheckForNearestAllTarget(object oCreature, struct stTarget sTarget, int nIndex, string sIndex) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "895", "Getting nearest (not disabled) index: " + sIndex + + " fRange: " + FloatToString(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex), 0, 2) + + " fNearestRange: " + FloatToString(sTarget.fNearestRange, 0, 2)); + // If we are ignoring associates set then ignore them. + // Has lower value or equal value and is closer. Familiars/Companions/Summons/Dominated. + if(AI_DEBUG) ai_Debug("0i_combat", "911", "Don't Ignore Associate: " + IntToString(!ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES)) + + " Not an Associate? " + IntToString(GetAssociateType(sTarget.oTarget) < 2)); + if((!ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) || GetAssociateType(sTarget.oTarget) < 2) && + GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestRange) + { + sTarget.fNearestRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nIndex = nIndex; + } + return sTarget; +} +struct stTarget ai_CheckForLowestValueAllTarget(object oCreature, struct stTarget sTarget, int nIndex, string sIndex) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "923", "Getting lowest value index: " + sIndex + + " fRange: " + FloatToString(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex), 0, 2) + + " fNearestRange: " + FloatToString(sTarget.fNearestRange, 0, 2) + + " sTarget.nValue: " + IntToString(sTarget.nValue) + + " sTarget.nBestValue: " + IntToString(sTarget.nBestValue)); + // Has less value or equal value and is closer. Ignoring only Familiars/Companions/Summons/Dominated. + if(AI_DEBUG) ai_Debug("0i_combat", "922", "Don't Ignore Associate: " + IntToString(!ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES)) + + " Not an Associate? " + IntToString(GetAssociateType(sTarget.oTarget) < 2)); + if((!ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) || GetAssociateType(sTarget.oTarget) < 2) && + sTarget.nValue < sTarget.nBestValue || + (sTarget.nBestValue == sTarget.nValue && + GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestRange)) + { + sTarget.fNearestRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nBestValue = sTarget.nValue; + sTarget.nIndex = nIndex; + } + return sTarget; +} + +//****************************************************************************** +//************ GET INDEX/TARGETs USING COMBAT STATE FUNCTIONS ****************** +//****************************************************************************** +// These functions will find a target based on the combat state variables created +// by the function ai_SetCombatState for associates. + +int ai_GetNearestIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(GetLocalInt(oCreature, AI_RULE_AI_DIFFICULTY)) + { + return ai_GetLowestCRIndex(oCreature, fMaxRange, sTargetType, bAlwaysAtk); + } + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "911", "Getting the nearest index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "918", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget = ai_CheckForNearestTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "931", "Found nearest [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetNearestTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "936", "Getting the nearest target."); + string sIndex = IntToString(ai_GetNearestIndex(oCreature, fMaxRange, sTargetType, bAlwaysAtk)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetLowestCRIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 100; + sTarget.nBestSecondaryValue = 100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "953", "Getting the lowest CR index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "960", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "974", "Found lowest CR [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetLowestCRTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "979", "Getting the lowest CR target."); + string sIndex = IntToString(ai_GetLowestCRIndex(oCreature, fMaxRange, sTargetType, bAlwaysAtk)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetHighestCRIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = -100; + sTarget.nBestSecondaryValue = -100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "995", "Getting the highest CR index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1002", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForHighestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1016", "Found highest CR [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetHighestCRTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1021", "Getting the highest CR target."); + string sIndex = IntToString(ai_GetHighestCRIndex(oCreature, fMaxRange, sTargetType, bAlwaysAtk)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetLowestMeleeIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 100; + sTarget.nBestSecondaryValue = 100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1037", "Getting the lowest InMelee index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_MELEE" + sCounter); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1058", "Found lowest InMelee [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +int ai_GetHighestMeleeIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = -100; + sTarget.nBestSecondaryValue = -100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1073", "Getting the highest InMelee index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_MELEE" + sCounter); + sTarget = ai_CheckForHighestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1094", "Found highest InMelee [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_CheckForGroupedTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1124", "Getting the highest InMelee target."); + string sIndex = IntToString(ai_GetHighestMeleeIndex(oCreature, fMaxRange, sTargetType)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetMostWoundedIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 200; + sTarget.nBestSecondaryValue = 200; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1113", "Getting the most wounded index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1120", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_HEALTH" + sCounter); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1130", "Found most wounded [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetMostWoundedTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1139", "Getting the most wounded target."); + string sIndex = IntToString(ai_GetMostWoundedIndex(oCreature, fMaxRange, sTargetType, bAlwaysAtk)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetAllyToHealIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.nBestValue = 200; + sTarget.sTargetType = AI_ALLY; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTarget.sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1154", "Getting the most wounded ally to heal index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ALLY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ALLY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, AI_ALLY, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, AI_ALLY_HEALTH + sCounter); + sTarget = ai_CheckForLowestValueAllTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ALLY + sCounter); + } + // If we do not have a normal target then we are done.. + if(AI_DEBUG) ai_Debug("0i_combat", "1187", "Found most wounded ally to heal Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetAllyToHealTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1192", "Getting the most wounded ally to heal target."); + string sIndex = IntToString(ai_GetAllyToHealIndex(oCreature, fMaxRange)); + return GetLocalObject(oCreature, AI_ALLY + sIndex); +} +object ai_GetLowestFortitudeSaveTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 200; + sTarget.nBestSecondaryValue = 200; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1113", "Getting the lowest fortitude save index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) + + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetFortitudeSavingThrow(sTarget.oTarget); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1232", "Found lowest fortitude save Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, AI_ENEMY + IntToString(sTarget.nIndex)); +} +object ai_GetLowestReflexSaveTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 200; + sTarget.nBestSecondaryValue = 200; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1248", "Getting the lowest reflex save index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) + + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetReflexSavingThrow(sTarget.oTarget); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1269", "Found lowest reflex save Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, AI_ENEMY + IntToString(sTarget.nIndex)); +} +object ai_GetLowestWillSaveTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 200; + sTarget.nBestSecondaryValue = 200; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1285", "Getting the lowest will save index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) + + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetWillSavingThrow(sTarget.oTarget); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1306", "Found lowest will save Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, AI_ENEMY + IntToString(sTarget.nIndex)); +} +object ai_GetSpellTargetBasedOnSaves(object oCreature, int nSpell, float fMaxRange = AI_RANGE_PERCEPTION) +{ + // Check the spells save type in "ai_spells.2da" and find the weakest + // creature based on that save. + string sSaveType = Get2DAString("ai_spells", "SaveType", nSpell); + if(sSaveType == "Reflex") return ai_GetLowestReflexSaveTarget(oCreature, fMaxRange); + if(sSaveType == "Fortitude") return ai_GetLowestFortitudeSaveTarget(oCreature, fMaxRange); + if(sSaveType == "Will") return ai_GetLowestWillSaveTarget(oCreature, fMaxRange); + // If there is no save then lets see if we can find an enemy with the lowest health. + return ai_GetMostWoundedTarget(oCreature, fMaxRange); +} +int ai_GetNearestIndexThatSeesUs(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1334", "Getting the nearest creature that sees us index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) + + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1373", GetName(sTarget.oTarget) + " can see us? " + + IntToString(GetObjectSeen(oCreature, sTarget.oTarget))); + if(GetObjectSeen(oCreature, sTarget.oTarget)) + { + sTarget = ai_CheckForNearestAllTarget(oCreature, sTarget, nCounter, sCounter); + } + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(AI_DEBUG) ai_Debug("0i_combat", "1354", "Found nearest creature that sees us Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +int ai_GetBestSneakAttackIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + object oAttacking; + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1372", "Getting the best sneak attack index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget) && + !ai_IsImmuneToSneakAttacks(oCreature, sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) + + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + oAttacking = ai_GetAttackedTarget(sTarget.oTarget); + if(AI_DEBUG) ai_Debug("0i_combat", "1383", "oTarget: " + GetName(sTarget.oTarget) + + " is attacking " + GetName(oAttacking)); + // They are attacking someone besides us or we are hidden? + if((oAttacking != OBJECT_INVALID && oAttacking != oCreature) || + GetActionMode(oCreature, ACTION_MODE_STEALTH)) + { + sTarget = ai_CheckForNearestTarget(oCreature, sTarget, nCounter, sCounter); + } + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1398", "Found best sneak attack Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +int ai_GetNearestIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(GetLocalInt(oCreature, AI_RULE_AI_DIFFICULTY)) + { + ai_GetLowestCRIndexNotInAOE(oCreature, fMaxRange, sTargetType, bAlwaysAtk); + } + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1416", "Getting the nearest not in AOE index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget) && !ai_IsInADangerousAOE(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) + + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget = ai_CheckForNearestTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1434", "Found nearest not in AOE Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetNearestTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1439", "Getting the nearest not in AOE target."); + string sIndex = IntToString(ai_GetNearestIndexNotInAOE(oCreature, fMaxRange, sTargetType, bAlwaysAtk)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetLowestCRIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 100; + sTarget.nBestSecondaryValue = 100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1456", "Getting the lowest CR not in AOE index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && !ai_IsInADangerousAOE(sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1463", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1477", "Found lowest CR not in AOE [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetLowestTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1482", "Getting the lowest cr not in AOE target."); + string sIndex = IntToString(ai_GetLowestCRIndexNotInAOE(oCreature, fMaxRange, sTargetType, bAlwaysAtk)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetHighestCRIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = -100; + sTarget.nBestSecondaryValue = -100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1499", "Getting the highest CR not in AOE index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && !ai_IsInADangerousAOE(sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1506", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForHighestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1520", "Found highest CR not in AOE [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetHighestTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1525", "Getting the highest cr not in AOE target."); + string sIndex = IntToString(ai_GetHighestCRIndexNotInAOE(oCreature, fMaxRange, sTargetType, bAlwaysAtk)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetHighestMeleeIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = -100; + sTarget.nBestSecondaryValue = -100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1542", "Getting the highest InMelee not in AOE index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && !ai_IsInADangerousAOE(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_MELEE" + sCounter); + sTarget = ai_CheckForHighestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1563", "Found highest InMelee not in AOE [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_CheckForGroupedTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1574", "Getting the highest InMelee not in AOE target."); + string sIndex = IntToString(ai_GetHighestMeleeIndexNotInAOE(oCreature, fMaxRange, sTargetType)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +object ai_GetNearestClassTarget(object oCreature, int nClassType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(GetLocalInt(oCreature, AI_RULE_AI_DIFFICULTY)) + { + ai_GetLowestCRClassTarget(oCreature, nClassType, fMaxRange, sTargetType, bAlwaysAtk); + } + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1591", "Getting the nearest class index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && ai_CheckClassType(sTarget.oTarget, nClassType)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1598", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget = ai_CheckForNearestTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1611", "Found nearest class Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, sTargetType + IntToString(sTarget.nIndex)); +} +object ai_GetLowestCRClassTarget(object oCreature, int nClassType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 100; + sTarget.nBestSecondaryValue = 100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1626", "Getting the lowest CR class index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && ai_CheckClassType(sTarget.oTarget, nClassType)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1634", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1648", "Found lowest CR class [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, sTargetType + IntToString(sTarget.nIndex)); +} +object ai_GetHighestCRClassTarget(object oCreature, int nClassType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = -100; + sTarget.nBestSecondaryValue = -100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1664", "Getting the highest CR class index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && ai_CheckClassType(sTarget.oTarget, nClassType)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1671", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForHighestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1685", "Found highest CR class [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, sTargetType + IntToString(sTarget.nIndex)); +} +object ai_GetNearestRacialTarget(object oCreature, int nRacialType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(GetLocalInt(oCreature, AI_RULE_AI_DIFFICULTY)) + { + ai_GetLowestCRRacialTarget(oCreature, nRacialType, fMaxRange, sTargetType, bAlwaysAtk); + } + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1703", "Getting the nearest race index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && ai_CheckRacialType(sTarget.oTarget, nRacialType)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1710", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget = ai_CheckForNearestTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1723", "Found nearest race Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, sTargetType + IntToString(sTarget.nIndex)); +} +object ai_GetLowestCRRacialTarget(object oCreature, int nRacialType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 100; + sTarget.nBestSecondaryValue = 100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1739", "Getting the lowest CR race index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && ai_CheckRacialType(sTarget.oTarget, nRacialType)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1746", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1760", "Found lowest CR race [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, sTargetType + IntToString(sTarget.nIndex)); +} +object ai_GetHighestCRRacialTarget(object oCreature, int nRacialType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = -100; + sTarget.nBestSecondaryValue = -100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1776", "Getting the highest CR race index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && ai_CheckRacialType(sTarget.oTarget, nRacialType)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1783", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForHighestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1797", "Found highest CR race [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, sTargetType + IntToString(sTarget.nIndex)); +} +object ai_GetNearestFavoredEnemyTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = -100; + sTarget.nBestSecondaryValue = -100; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + int nRace, nRacialType; + while(nRace < 24) + { + // Find which favored enemies we have. + if(nRace < 1 && GetHasFeat(FEAT_FAVORED_ENEMY_ABERRATION, oCreature)) + { + nRace = 1; + nRacialType = RACIAL_TYPE_ABERRATION; + } + else if(nRace < 2 && GetHasFeat(FEAT_FAVORED_ENEMY_ANIMAL, oCreature)) + { + nRace = 2; + nRacialType = RACIAL_TYPE_ANIMAL; + } + else if(nRace < 3 && GetHasFeat(FEAT_FAVORED_ENEMY_BEAST, oCreature)) + { + nRace = 3; + nRacialType = RACIAL_TYPE_BEAST; + } + else if(nRace < 4 && GetHasFeat(FEAT_FAVORED_ENEMY_CONSTRUCT, oCreature)) + { + nRace = 4; + nRacialType = RACIAL_TYPE_CONSTRUCT; + } + else if(nRace < 5 && GetHasFeat(FEAT_FAVORED_ENEMY_DRAGON, oCreature)) + { + nRace = 5; + nRacialType = RACIAL_TYPE_DRAGON; + } + else if(nRace < 6 && GetHasFeat(FEAT_FAVORED_ENEMY_DWARF, oCreature)) + { + nRace = 6; + nRacialType = RACIAL_TYPE_DWARF; + } + else if(nRace < 7 && GetHasFeat(FEAT_FAVORED_ENEMY_ELEMENTAL, oCreature)) + { + nRace = 7; + nRacialType = RACIAL_TYPE_ELEMENTAL; + } + else if(nRace < 8 && GetHasFeat(FEAT_FAVORED_ENEMY_ELF, oCreature)) + { + nRace = 8; + nRacialType = RACIAL_TYPE_ELF; + } + else if(nRace < 9 && GetHasFeat(FEAT_FAVORED_ENEMY_FEY, oCreature)) + { + nRace = 9; + nRacialType = RACIAL_TYPE_FEY; + } + else if(nRace < 10 && GetHasFeat(FEAT_FAVORED_ENEMY_GIANT, oCreature)) + { + nRace = 10; + nRacialType = RACIAL_TYPE_GIANT; + } + else if(nRace < 11 && GetHasFeat(FEAT_FAVORED_ENEMY_GNOME, oCreature)) + { + nRace = 11; + nRacialType = RACIAL_TYPE_GNOME; + } + else if(nRace < 12 && GetHasFeat(FEAT_FAVORED_ENEMY_GOBLINOID, oCreature)) + { + nRace = 12; + nRacialType = RACIAL_TYPE_HUMANOID_GOBLINOID; + } + else if(nRace < 13 && GetHasFeat(FEAT_FAVORED_ENEMY_HALFELF, oCreature)) + { + nRace = 13; + nRacialType = RACIAL_TYPE_HALFELF; + } + else if(nRace < 14 && GetHasFeat(FEAT_FAVORED_ENEMY_HALFLING, oCreature)) + { + nRace = 14; + nRacialType = RACIAL_TYPE_HALFLING; + } + else if(nRace < 15 && GetHasFeat(FEAT_FAVORED_ENEMY_HALFORC, oCreature)) + { + nRace = 15; + nRacialType = RACIAL_TYPE_HALFORC; + } + else if(nRace < 16 && GetHasFeat(FEAT_FAVORED_ENEMY_HUMAN, oCreature)) + { + nRace = 16; + nRacialType = RACIAL_TYPE_HUMAN; + } + else if(nRace < 17 && GetHasFeat(FEAT_FAVORED_ENEMY_MAGICAL_BEAST, oCreature)) + { + nRace = 17; + nRacialType = RACIAL_TYPE_MAGICAL_BEAST; + } + else if(nRace < 18 && GetHasFeat(FEAT_FAVORED_ENEMY_MONSTROUS, oCreature)) + { + nRace = 18; + nRacialType = RACIAL_TYPE_HUMANOID_MONSTROUS; + } + else if(nRace < 19 && GetHasFeat(FEAT_FAVORED_ENEMY_ORC, oCreature)) + { + nRace = 19; + nRacialType = RACIAL_TYPE_HUMANOID_ORC; + } + else if(nRace < 20 && GetHasFeat(FEAT_FAVORED_ENEMY_OUTSIDER, oCreature)) + { + nRace = 20; + nRacialType = RACIAL_TYPE_OUTSIDER; + } + else if(nRace < 21 && GetHasFeat(FEAT_FAVORED_ENEMY_REPTILIAN, oCreature)) + { + nRace = 21; + nRacialType = RACIAL_TYPE_HUMANOID_REPTILIAN; + } + else if(nRace < 22 && GetHasFeat(FEAT_FAVORED_ENEMY_SHAPECHANGER, oCreature)) + { + nRace = 22; + nRacialType = RACIAL_TYPE_SHAPECHANGER; + } + else if(nRace < 23 && GetHasFeat(FEAT_FAVORED_ENEMY_UNDEAD, oCreature)) + { + nRace = 23; + nRacialType = RACIAL_TYPE_UNDEAD; + } + else if(nRace < 24 && GetHasFeat(FEAT_FAVORED_ENEMY_VERMIN, oCreature)) + { + nRace = 24; + nRacialType = RACIAL_TYPE_VERMIN; + } + else nRace = 25; + if(nRace < 25) + { + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1940", "Getting the nearest favored race index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget) && ai_CheckRacialType(sTarget.oTarget, nRacialType)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1947", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) + + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget = ai_CheckForNearestTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + } + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1962", "Found nearest favored race Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, AI_ENEMY + IntToString(sTarget.nIndex)); +} +object ai_GetFlankTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, int bAlwaysAtk = TRUE) +{ + int nCnt = 1, nInMelee, nHighestMelee; + string sCnt = "1"; + float fAllyRange; + object oTarget, oAlly = GetLocalObject(oCreature, AI_ALLY + sCnt); + while(oAlly != OBJECT_INVALID) + { + fAllyRange = GetLocalFloat(oCreature, AI_ALLY_RANGE + sCnt); + if(AI_DEBUG) ai_Debug("0i_combat", "1974", "Getting Ally being Flanked Index: " + sCnt + " " + + GetName(oAlly) + " fAllyRange: " + FloatToString(fAllyRange, 0, 2) + + " fMaxRange: " + FloatToString(fMaxRange, 0, 2)); + if(fAllyRange <= fMaxRange) + { + nInMelee = GetLocalInt(oCreature, AI_ALLY_MELEE + sCnt); + if(AI_DEBUG) ai_Debug("0i_combat", "1980", "nInMelee: " + IntToString(nInMelee)); + if(!GetIsDead(oAlly) && nInMelee > nHighestMelee) + { + oTarget = ai_GetEnemyAttackingMyAlly(oCreature, oAlly, fMaxRange); + if(oTarget != OBJECT_INVALID) nHighestMelee = nInMelee; + } + } + sCnt = IntToString(++nCnt); + oAlly = GetLocalObject(oCreature, AI_ALLY + sCnt); + } + // If we do not have a good target then lets see if there are more targets. + if(oTarget == OBJECT_INVALID) + { + // If we just checked within melee then lets check what we can see if + // we can move around in combat. + if (fMaxRange == AI_RANGE_MELEE && ai_CanIMoveInCombat(oCreature)) + { + oTarget = ai_GetFlankTarget(oCreature, AI_RANGE_PERCEPTION, bAlwaysAtk); + } + } + if(AI_DEBUG) ai_Debug("0i_combat", "2000", "oTarget " + GetName(oTarget) + + " is attacking " + GetName(oAlly)); + return oTarget; +} +object ai_GetRangedTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2037", "Getting the nearest ranged index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2044", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + if(ai_GetIsRangeWeapon(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, sTarget.oTarget))) + { + sTarget = ai_CheckForNearestTarget(oCreature, sTarget, nCounter, sCounter); + } + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "2060", "Found nearest ranged Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, AI_ENEMY + IntToString(sTarget.nIndex)); +} +object ai_GetBestTargetForMeleeCombat(object oCreature, int nInMelee, int bAlwaysAtk = TRUE) +{ + object oPCTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + if(oPCTarget != OBJECT_INVALID) return oPCTarget; + string sIndex; + // Are we in melee? If so try to get the weakest enemy in melee. + if(nInMelee > 0) + { + if(ai_CanIMoveInCombat(oCreature)) + { + sIndex = IntToString(ai_GetLowestCRIndex(oCreature, AI_RANGE_MELEE)); + } + else sIndex = IntToString(ai_GetNearestIndex(oCreature, AI_RANGE_MELEE)); + } + // If not then lets go find someone to attack! + else + { + // If we are not in melee then we should get the nearest enemy. + sIndex = IntToString(ai_GetNearestIndexNotInAOE(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk)); + /* Lets stay out of bad AOE's. + // If we didn't get a target then get any target within range. + if(sIndex == "0") + { + sIndex = IntToString(ai_GetLowestCRIndex(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk)); + } */ + } + object oTarget = GetLocalObject(oCreature, AI_ENEMY + sIndex); + // We might not have a target this is fine as sometimes we don't want to attack! + if(AI_DEBUG) ai_Debug("0i_combat", "2048", GetName(oTarget) + " is the best target for melee combat!"); + return oTarget; +} +object ai_GetNearestTargetForMeleeCombat(object oCreature, int nInMelee, int bAlwaysAtk = TRUE) +{ + object oPCTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + if(oPCTarget != OBJECT_INVALID) return oPCTarget; + string sIndex; + // Are we in melee? If so try to get the nearest enemy in melee. + if(nInMelee > 0) sIndex = IntToString(ai_GetNearestIndex(oCreature, AI_RANGE_MELEE)); + // If not then lets go find someone to attack! + else + { + // Get the nearest enemy. + sIndex = IntToString(ai_GetNearestIndexNotInAOE(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk)); + // If we didn't get a target then get any target within range. + if(sIndex == "0") + { + sIndex = IntToString(ai_GetNearestIndex(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk)); + } + } + object oTarget = GetLocalObject(oCreature, AI_ENEMY + sIndex); + // We might not have a target this is fine as sometimes we don't want to attack! + if(AI_DEBUG) ai_Debug("0i_combat", "2024", GetName(oTarget) + " is the nearest target for melee combat!"); + return oTarget; +} +object ai_GetLowestCRTargetForMeleeCombat(object oCreature, int nInMelee, int bAlwaysAtk = TRUE) +{ + object oPCTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + if(oPCTarget != OBJECT_INVALID) return oPCTarget; + string sIndex; + // Are we in melee? If so try to get the weakest enemy in melee. + if(nInMelee > 0) sIndex = IntToString(ai_GetLowestCRIndex(oCreature, AI_RANGE_MELEE)); + // If not then lets go find someone to attack! + else + { + // Get the weakest combat rated enemy. + sIndex = IntToString(ai_GetLowestCRIndexNotInAOE(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk)); + /* Lets stay out of bad AOE's. + // If we didn't get a target then get any target within range. + if(sIndex == "0") + { + sIndex = IntToString(ai_GetLowestCRIndex(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk)); + } */ + } + object oTarget = GetLocalObject(oCreature, AI_ENEMY + sIndex); + // We might not have a target this is fine as sometimes we don't want to attack! + if(AI_DEBUG) ai_Debug("0i_combat", "2048", GetName(oTarget) + " is the weakest target for melee combat!"); + return oTarget; +} +object ai_GetHighestCRTargetForMeleeCombat(object oCreature, int nInMelee) +{ + object oPCTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + if(oPCTarget != OBJECT_INVALID) return oPCTarget; + string sIndex; + // Are we in melee? If so try to get the weakest enemy in melee. + if(nInMelee > 0) sIndex = IntToString(ai_GetHighestCRIndex(oCreature, AI_RANGE_MELEE)); + // If not then lets go find someone to attack! + else + { + // Get the weakest combat rated enemy. + sIndex = IntToString(ai_GetHighestCRIndexNotInAOE(oCreature, AI_RANGE_PERCEPTION)); + /* Lets stay out of bad AOE's. + // If we didn't get a target then get any target within range. + if(sIndex == "0") sIndex = IntToString(ai_GetHighestCRIndex(oCreature)); + */ + } + object oTarget = GetLocalObject(oCreature, AI_ENEMY + sIndex); + // We might not have a target this is fine as sometimes we don't want to attack! + if(AI_DEBUG) ai_Debug("0i_combat", "2070", GetName(oTarget) + " is the strongest target for melee combat!"); + return oTarget; +} +object ai_GetEnemyAttackingMe(object oCreature, float fMaxRange = AI_RANGE_MELEE) +{ + int nCtr = 1; + float fDistance; + string sCtr = "1"; + object oAttacked; + object oEnemy = GetLocalObject(oCreature, AI_ENEMY + "1"); + while(oEnemy != OBJECT_INVALID) + { + if(!ai_Disabled(oEnemy)) + { + fDistance = GetLocalFloat(oCreature, AI_ENEMY_RANGE + sCtr); + if(AI_DEBUG) ai_Debug("0i_combat", "2084", "Getting Enemy Attacking Me: " + sCtr + " " + + GetName(oEnemy) + " fTargetRange: " + FloatToString(fDistance, 0, 2) + + " fMaxRange: " + FloatToString(fMaxRange, 0, 2) + " Attacking: " + + GetName(ai_GetAttackedTarget(oEnemy))); + if(fDistance <= fMaxRange) + { + oAttacked = ai_GetAttackedTarget(oEnemy); + // If an enemy isn't attacking someone we must assume we are next! + if(oAttacked == oCreature || oAttacked == OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2095", "Enemy attacking me: " + GetName(oEnemy) + " has attacked: " + GetName(ai_GetAttackedTarget(oEnemy))); + return oEnemy; + } + } + } + sCtr = IntToString(++nCtr); + oEnemy = GetLocalObject(oCreature, AI_ENEMY + sCtr); + } + return OBJECT_INVALID; +} +object ai_GetEnemyAttackingMyAlly(object oCreature, object oAlly, float fMaxRange = AI_RANGE_MELEE) +{ + int nCtr = 1, nIndex, nDIndex; + int bIngnoreAssociates = ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES); + float fEnemyRange, fNearestEnemyRange = fMaxRange + 1.0; + float fNearestDEnemyRange = fMaxRange + 1.0; + string sCtr = "1"; + object oAttacked; + object oEnemy = GetLocalObject(oCreature, AI_ENEMY + "1"); + while(oEnemy != OBJECT_INVALID) + { + fEnemyRange = GetLocalFloat(oCreature, AI_ENEMY_RANGE + sCtr); + if(AI_DEBUG) ai_Debug("0i_combat", "2117", "Getting Enemy Attacking Ally:" + + GetName(oAlly) + ": " + sCtr + " InMelee:" + + GetName(oEnemy) + " fEnemyRange: " + FloatToString(fEnemyRange, 0, 2) + + " fMaxRange: " + FloatToString(fMaxRange, 0, 2) + " Attacking: " + + GetName(ai_GetAttackedTarget(oEnemy))); + if(fEnemyRange <= fMaxRange) + { + oAttacked = ai_GetAttackedTarget(oEnemy); + if(AI_DEBUG) ai_Debug("0i_combat", "2125", "Enemy attacking " + + GetName(oAlly) + ": " + GetName(oEnemy) + + " has attacked: " + GetName(ai_GetAttackedTarget(oEnemy))); + // If an enemy isn't attacking someone we must assume we are next! + if(oAttacked == oAlly) + { + // Lets put any disabled targets in its own group, if we + // ignore associates lets put them here as well. + if(GetLocalInt(oCreature, AI_ENEMY_DISABLED + sCtr) || + (bIngnoreAssociates && GetAssociateType(oEnemy))) + { + if(fEnemyRange < fNearestDEnemyRange) + { + fNearestDEnemyRange = fEnemyRange; + nDIndex = nCtr; + } + } + else if(fEnemyRange < fNearestEnemyRange) + { + fNearestEnemyRange = fEnemyRange; + nIndex = nCtr; + } + } + } + sCtr = IntToString(++nCtr); + oEnemy = GetLocalObject(oCreature, AI_ENEMY + sCtr); + } + // If we do not have a good target then lets see if there are more targets. + if(nIndex == 0 && nDIndex != 0) + { + // If we just checked within melee then lets check what we can see. + if (fMaxRange == AI_RANGE_MELEE) return ai_GetEnemyAttackingMyAlly(oCreature, oAlly, AI_RANGE_PERCEPTION); + else nIndex = nDIndex; + } + return GetLocalObject(oCreature, AI_ENEMY + IntToString(nIndex)); +} +int ai_GetNumOfEnemiesInRange(object oCreature, float fMaxRange = AI_RANGE_MELEE) +{ + int nNumOfEnemies, nCnt = 1; + float fDistance = GetLocalFloat(oCreature, AI_ENEMY_RANGE + "1"); + while(fDistance != 0.0) + { + if(fDistance < fMaxRange) nNumOfEnemies ++; + fDistance = GetLocalFloat(oCreature, AI_ENEMY_RANGE + IntToString(++nCnt)); + } + if(AI_DEBUG) ai_Debug("0i_combat", "2459", IntToString (nNumOfEnemies) + " enemies within " + FloatToString(fMaxRange, 0, 2) + " meters."); + return nNumOfEnemies; +} +object ai_GetAllyBuffTarget(object oCreature, int nSpell, float fMaxRange = AI_RANGE_BATTLEFIELD) +{ + // Make sure we don't over extend our movement running across the + // battlefield to cast a spell on someone does not look good. + float fNearestEnemy = GetDistanceBetween(oCreature, GetLocalObject(oCreature, AI_ENEMY_NEAREST)) - 3.0f; + // If we are in melee then extend to melee incase an ally is just past the enemy. + if(fNearestEnemy <= AI_RANGE_MELEE) fNearestEnemy = AI_RANGE_MELEE; + if(fMaxRange > fNearestEnemy) fMaxRange = fNearestEnemy; + // Now lets get the best target based on the spell data in ai_spells.2da + string sBuffTarget = Get2DAString("ai_spells", "Buff_Target", nSpell); + if(AI_DEBUG) ai_Debug("0i_combat", "2596", "sBuffTarget: " + sBuffTarget + " fMaxRange: " + FloatToString(fMaxRange, 0, 2)); + if(sBuffTarget == "0") return oCreature; + if(sBuffTarget == "1") + return ai_BuffHighestAbilityScoreTarget(oCreature, nSpell, ABILITY_STRENGTH, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "2") + return ai_BuffHighestAbilityScoreTarget(oCreature, nSpell, ABILITY_DEXTERITY, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "3") + return ai_BuffHighestAbilityScoreTarget(oCreature, nSpell, ABILITY_CONSTITUTION, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "4") + return ai_BuffHighestAbilityScoreTarget(oCreature, nSpell, ABILITY_INTELLIGENCE, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "5") + return ai_BuffHighestAbilityScoreTarget(oCreature, nSpell, ABILITY_WISDOM, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "6") + return ai_BuffHighestAbilityScoreTarget(oCreature, nSpell, ABILITY_CHARISMA, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "7") + return ai_BuffLowestACTarget(oCreature, nSpell, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "8") + return ai_BuffLowestACWithOutACBonus(oCreature, nSpell, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "9") + return ai_BuffHighestAttackTarget(oCreature, nSpell, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "10") + return ai_BuffMostWoundedTarget(oCreature, nSpell, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "11") + return ai_BuffLowestFortitudeSaveTarget(oCreature, nSpell, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "12") + return ai_BuffLowestReflexSaveTarget(oCreature, nSpell, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "13") + return ai_BuffLowestWillSaveTarget(oCreature, nSpell, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "14") + return ai_BuffLowestSaveTarget(oCreature, nSpell, "", fMaxRange, AI_ALLY); + return OBJECT_INVALID; +} + +//****************************************************************************** +//******************** OTHER COMBAT FUNCTIONS ******************************** +//****************************************************************************** + +int ai_GetCurrentRound(object oCreature) +{ + int nRound = GetLocalInt(oCreature, AI_ROUND) + 1; + SetLocalInt(oCreature, AI_ROUND, nRound); + if(AI_DEBUG) ai_Debug("0i_combat", "2471", "nRound: " + IntToString(nRound)); + return nRound; +} +int ai_GetDifficulty(object oCreature) +{ + int nAdjustment = GetLocalInt(oCreature, AI_DIFFICULTY_ADJUSTMENT); + int nDifficulty = GetLocalInt(oCreature, AI_ENEMY_POWER) - GetLocalInt(oCreature, AI_ALLY_POWER) + 13 + nAdjustment; + if(nDifficulty < 1) nDifficulty = 1; + if(AI_DEBUG) ai_Debug("0i_combat", "2474", "(Difficulty: Enemy Power: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_POWER)) + + " - Ally Power: " + IntToString(GetLocalInt(oCreature, AI_ALLY_POWER)) + + ") + 13 + nAdj: " + IntToString(nAdjustment) + + " = " + IntToString(nDifficulty) + "(Min of 1)"); + return nDifficulty; +} +int ai_GetMyCombatRating(object oCreature) +{ + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature); + int nAtkBonus = GetBaseAttackBonus(oCreature); + if(GetHasFeat(FEAT_WEAPON_FINESSE, oCreature) && ai_GetIsFinesseWeapon(oCreature, oWeapon)) + { + nAtkBonus += GetAbilityModifier(ABILITY_DEXTERITY, oCreature); + } + else nAtkBonus += GetAbilityModifier(ABILITY_STRENGTH, oCreature); + if(ai_GetIsMeleeWeapon(oWeapon)) nAtkBonus += ai_GetWeaponAtkBonus(oWeapon); + if(AI_DEBUG) ai_Debug("0i_combat", "2496", "GetMyCombatRating (nAtkBonus: " + IntToString(nAtkBonus) + + " nAC: " + IntToString(GetAC(oCreature)) + " - 10) / 2 = " + + IntToString((nAtkBonus + GetAC(oCreature) - 10) / 2)); + return(nAtkBonus + GetAC(oCreature) - 10) / 2; +} +object ai_GetAttackedTarget(object oCreature, int bPhysical = TRUE, int bSpell = FALSE) +{ + object oTarget = GetAttackTarget(oCreature); + if(!GetIsObjectValid(oTarget) && bPhysical) oTarget = GetLocalObject(oCreature, AI_ATTACKED_PHYSICAL); + if(!GetIsObjectValid(oTarget) && bSpell) oTarget = GetLocalObject(oCreature, AI_ATTACKED_SPELL); + if(!GetIsObjectValid(oTarget) || GetIsDead(oTarget)) return OBJECT_INVALID; + return oTarget; +} +int ai_CheckClassType(object oTarget, int nClassType) +{ + int nCnt = 1, nClass = GetClassByPosition(1, oTarget); + // We check for the group class types. + if(nClassType < 0) + { + while(nCnt <= AI_MAX_CLASSES_PER_CHARACTER) + { + int nCaster = StringToInt(Get2DAString("classes", "SpellCaster", nClass)); + if(nClassType == AI_CLASS_TYPE_WARRIOR && !nCaster) return TRUE; + else if(nClassType == AI_CLASS_TYPE_CASTER && nCaster) return TRUE; + int nSpellType = StringToInt(Get2DAString("classes", "Arcane", nClass)); + if(nClassType == AI_CLASS_TYPE_ARCANE && nSpellType) return TRUE; + else if(nClassType == AI_CLASS_TYPE_DIVINE && !nSpellType) return TRUE; + nClass = GetClassByPosition(++nCnt, oTarget); + } + } + // Checks for normal classes. + else + { + while(nCnt <= AI_MAX_CLASSES_PER_CHARACTER) + { + if(nClass == nClassType) return TRUE; + nClass = GetClassByPosition(++nCnt, oTarget); + } + } + return FALSE; +} +int ai_CheckRacialType(object oTarget, int nRacialType) +{ + int nRace = GetRacialType(oTarget); + if(nRacialType == nRace) return TRUE; + else if(nRacialType == AI_RACIAL_TYPE_ANIMAL_BEAST) + { + if(nRace == RACIAL_TYPE_ANIMAL || + nRace == RACIAL_TYPE_BEAST || + nRace == RACIAL_TYPE_MAGICAL_BEAST) return TRUE; + } + else if(nRacialType == AI_RACIAL_TYPE_HUMANOID) + { + switch (nRace) + { + case RACIAL_TYPE_DWARF : + case RACIAL_TYPE_ELF : + case RACIAL_TYPE_GNOME : + case RACIAL_TYPE_HALFELF : + case RACIAL_TYPE_HALFLING : + case RACIAL_TYPE_HALFORC : + case RACIAL_TYPE_HUMAN : + case RACIAL_TYPE_HUMANOID_GOBLINOID : + case RACIAL_TYPE_HUMANOID_MONSTROUS : + case RACIAL_TYPE_HUMANOID_ORC : + case RACIAL_TYPE_HUMANOID_REPTILIAN : + return TRUE; + } + } + return FALSE; +} +void ai_SetNormalAppearance(object oCreature) +{ + if(!ai_GetHasEffectType(oCreature, EFFECT_TYPE_POLYMORPH)) + { + int nForm = GetAppearanceType(oCreature); + if(AI_DEBUG) ai_Debug("0i_combat", "2729", GetName(oCreature) + " form: " + IntToString(nForm)); + SetLocalInt(oCreature, AI_NORMAL_FORM, nForm + 1); + } +} +int ai_GetNormalAppearance(object oCreature) +{ + int nForm = GetLocalInt(oCreature, AI_NORMAL_FORM) - 1; + if(nForm == -1) + { + ai_SetNormalAppearance(oCreature); + nForm = GetLocalInt(oCreature, AI_NORMAL_FORM) - 1; + } + return nForm; +} +struct stClasses ai_GetFactionsClasses(object oCreature, int bEnemy = TRUE, float fMaxRange = AI_RANGE_BATTLEFIELD) +{ + struct stClasses sCount; + int nCnt = 1, nPosition, nClass, nLevels; + object oTarget; + if(bEnemy) oTarget = ai_GetNearestEnemy(oCreature, 1, 7, 7); + else oTarget = ai_GetNearestAlly(oCreature, 1, 7, 7); + while(oTarget != OBJECT_INVALID && GetDistanceBetween(oTarget, oCreature) <= fMaxRange) + { + for(nPosition = 1; nPosition <= AI_MAX_CLASSES_PER_CHARACTER; nPosition++) + { + nClass = GetClassByPosition(nPosition, oTarget); + nLevels = GetLevelByPosition(nPosition, oTarget); + if(nClass == CLASS_TYPE_ANIMAL || + nClass == CLASS_TYPE_BARBARIAN || + nClass == CLASS_TYPE_COMMONER || + nClass == CLASS_TYPE_CONSTRUCT || + nClass == CLASS_TYPE_ELEMENTAL || + nClass == CLASS_TYPE_FIGHTER || + nClass == CLASS_TYPE_GIANT || + nClass == CLASS_TYPE_HUMANOID || + nClass == CLASS_TYPE_MONSTROUS || + nClass == CLASS_TYPE_PALADIN || + nClass == CLASS_TYPE_RANGER || + nClass == CLASS_TYPE_ROGUE || + nClass == CLASS_TYPE_VERMIN || + nClass == CLASS_TYPE_MONK || + nClass == CLASS_TYPE_SHAPECHANGER) + { + sCount.FIGHTERS += 1; + sCount.FIGHTER_LEVELS += nLevels; + } + else if(nClass == CLASS_TYPE_CLERIC || + nClass == CLASS_TYPE_DRUID) + { + sCount.CLERICS += 1; + sCount.CLERIC_LEVELS += nLevels; + } + else if(nClass == CLASS_TYPE_BARD || + nClass == CLASS_TYPE_FEY || + nClass == CLASS_TYPE_SORCERER || + nClass == CLASS_TYPE_WIZARD) + { + sCount.MAGES += 1; + sCount.MAGE_LEVELS += nLevels; + } + else if(nClass == CLASS_TYPE_ABERRATION || + nClass == CLASS_TYPE_DRAGON || + nClass == 29 || //oozes + nClass == CLASS_TYPE_MAGICAL_BEAST || + nClass == CLASS_TYPE_OUTSIDER) + { + sCount.MONSTERS += 1; + sCount.MONSTER_LEVELS += nLevels; + } + sCount.TOTAL_LEVELS += nLevels; + } + sCount.TOTAL += 1; + if(bEnemy) oTarget = ai_GetNearestEnemy(oCreature, ++nCnt, 7, 7); + else oTarget = ai_GetNearestAlly(oCreature, ++nCnt, 7, 7); + } + if(AI_DEBUG) ai_Debug("0i_combat", "2627", "Enemy: " + IntToString(bEnemy) + " fMaxRange: " + FloatToString(fMaxRange, 0, 2) + + " CLERICS: " + IntToString(sCount.CLERICS) + "(" + IntToString(sCount.CLERIC_LEVELS) + + ") FIGHTERS: " +IntToString(sCount.FIGHTERS) + "(" + IntToString(sCount.FIGHTER_LEVELS) + + ") MAGES: " +IntToString(sCount.MAGES) + "(" + IntToString(sCount.MAGE_LEVELS) + + ") MONSTERS: " +IntToString(sCount.MONSTERS) + "(" + IntToString(sCount.MONSTER_LEVELS) + + ") TOTALS: " +IntToString(sCount.TOTAL) + "(" + IntToString(sCount.TOTAL_LEVELS)); + return sCount; +} +string ai_GetMostDangerousClass(struct stClasses stCount) +{ + string sClass; + // Lets weight the fighter levels 30% higher. + int nFighter =((stCount.FIGHTER_LEVELS) * 13)/10; + if(nFighter >= stCount.CLERIC_LEVELS) + { + if(nFighter >= stCount.MAGE_LEVELS) + { + if(nFighter >= stCount.MONSTER_LEVELS) return "FIGHTER"; + else return "MONSTER"; + } + else if(stCount.MAGE_LEVELS >= stCount.MONSTER_LEVELS) return "MAGE"; + else return "MONSTER"; + } + else if(stCount.CLERIC_LEVELS >= stCount.MAGE_LEVELS) + { + if(stCount.CLERIC_LEVELS >= stCount.MONSTER_LEVELS) return "CLERIC"; + else return "MONSTER"; + } + else if(stCount.MAGE_LEVELS >= stCount.MONSTER_LEVELS) return "MAGE"; + else return "MONSTER"; + return ""; +} +void ai_EquipBestWeapons(object oCreature, object oTarget = OBJECT_INVALID) +{ + // Lets not check for weapons on creatures that can't use them! + int nRacialType = GetRacialType(oCreature); + if(nRacialType == RACIAL_TYPE_ANIMAL || + nRacialType == RACIAL_TYPE_DRAGON || + nRacialType == RACIAL_TYPE_MAGICAL_BEAST || + nRacialType == RACIAL_TYPE_OOZE || + nRacialType == RACIAL_TYPE_VERMIN) return; + //if(Polymorphed()) return; + if(AI_DEBUG) ai_Debug("0i_combat", "2669", GetName(OBJECT_SELF) + " is equiping best weapon!"); + // Determine if I am wielding a ranged weapon, melee weapon, or none. + int bIsWieldingRanged = ai_HasRangedWeaponWithAmmo(oCreature); + int bIsWieldingMelee = ai_GetIsMeleeWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND)); + if(AI_DEBUG) ai_Debug("0i_combat", "2673", "bIsWieldingRanged: " + IntToString(bIsWieldingRanged) + + " bIsWieldingMelee: " + IntToString(bIsWieldingMelee)); + // If we are hidden then change to a melee weapon so we can move in to attack. + if(ai_GetIsHidden(oCreature)) + { + // Equip a melee weapon unless we already have one. + if(!bIsWieldingMelee) ai_EquipBestMeleeWeapon(oCreature, oTarget); + return; + } + // Equip the appropriate weapon for the distance of the enemy. + int nEnemyGroup = ai_GetNumOfEnemiesInGroup(oCreature); + if(AI_DEBUG) ai_Debug("0i_combat", "2684", GetName(oCreature) + " has " + IntToString(nEnemyGroup) + " enemies within 5.0f them! PointBlank: " + + IntToString(GetHasFeat(FEAT_POINT_BLANK_SHOT, oCreature))); + // We are in melee combat. + if(nEnemyGroup > 0) + { + if(bIsWieldingRanged) + { + // We have the point blank shot feat or there are more than one enemy on us. + // Note: Point Blank shot feat is bad once we have more than one enemy on us. + if(!GetHasFeat(FEAT_POINT_BLANK_SHOT, oCreature) || nEnemyGroup > 1) + { + // If I'm not using a melee weapon. + if(!bIsWieldingMelee) + { + ai_EquipBestMeleeWeapon(oCreature); + if(AI_DEBUG) ai_Debug("0i_combat", "2699", GetName(oCreature) + " is equiping melee weapon due to close enemies!"); + } + } + } + } + // We are not in melee range. + else + { + if(AI_DEBUG) ai_Debug("0i_combat", "2707", GetName(oCreature) + " is not in melee combat with an enemy!"); + // If are at range with the enemy then equip a ranged weapon. + if(!bIsWieldingRanged) + { + ai_EquipBestRangedWeapon(oTarget); + // Make sure that they equiped a range weapon. + bIsWieldingRanged = ai_HasRangedWeaponWithAmmo(oCreature); + bIsWieldingMelee = ai_GetIsMeleeWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature)); + if(AI_DEBUG) ai_Debug("0i_combat", "2719", GetName(oCreature) + " is attempting to equip a ranged weapon: " + IntToString(bIsWieldingRanged)); + // If we equiped a ranged weapon then drop out. + } + } + // We don't have a weapon out so equip one! We are in combat! + if(!bIsWieldingRanged && !bIsWieldingMelee) ai_EquipBestMeleeWeapon(OBJECT_INVALID); +} +int ai_EquipBestMeleeWeapon(object oCreature, object oTarget = OBJECT_INVALID) +{ + if(ai_GetAIMode(oCreature, AI_MODE_EQUIP_WEAPON_OFF)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "3049", GetName(oCreature) + " is equiping best melee weapon!"); + float fItemPower, fOffItemPower, fRightPower, fLeftPower, f2HandedPower; + int nItemPower, nShieldPower, nShieldValue, nItemValue, nRightValue; + int n2HandedValue, nLeftValue, bTwoWeaponUser; + int nMaxItemValue = ai_GetMaxItemValueThatCanBeEquiped(GetHitDice(oCreature)); + if(AI_DEBUG) ai_Debug("0i_combat", "3054", "nMaxItemValue: " + IntToString(nMaxItemValue)); + bTwoWeaponUser = GetHasFeat(374/*FEAT_DUAL_WIELD*/, oCreature) || GetHasFeat(FEAT_TWO_WEAPON_FIGHTING, oCreature); + object oShield = OBJECT_INVALID; + object oRight = OBJECT_INVALID; + object oLeft = OBJECT_INVALID; + object o2Handed = OBJECT_INVALID; + object o2HandedHand = OBJECT_INVALID; + object oRightHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND); + if(oRightHand != OBJECT_INVALID) + { + // Setup the item in our right hand's avg dmg and gold value as our base. + if(ai_GetIsTwoHandedWeapon(oRightHand, oCreature)) + { + if(ai_GetIsDoubleWeapon(oRightHand)) + { + f2HandedPower = ai_GetMeleeWeaponAvgDmg(oCreature, oRightHand, TRUE, FALSE, oRightHand); + } + else f2HandedPower = ai_GetMeleeWeaponAvgDmg(oCreature, oRightHand, TRUE); + n2HandedValue = GetGoldPieceValue(oRightHand); + if(AI_DEBUG) ai_Debug("0i_combat", "3073", " 2Handed oRightHand: " + GetName(oRightHand) + + " f2HandPower: " + FloatToString(f2HandedPower, 0, 2) + + " n2HandedValue: " + IntToString(n2HandedValue)); + } + else if(ai_GetIsSingleHandedWeapon(oRightHand, oCreature)) + { + fRightPower = ai_GetMeleeWeaponAvgDmg(oCreature, oRightHand); + nRightValue = GetGoldPieceValue(oRightHand); + if(AI_DEBUG) ai_Debug("0i_combat", "3081", " 1Handed oRightHand: " + GetName(oRightHand) + + " fRightPower: " + FloatToString(fRightPower, 0, 2) + + " nRightValue: " + IntToString(nRightValue)); + } + } + object oLeftHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature); + if(oLeftHand != OBJECT_INVALID) + { + // Setup the item in our left hand's Shield AC and gold value as our base. + if(ai_GetIsShield(oLeftHand)) + { + nShieldPower = ai_SetShieldAC(oCreature, oLeftHand); + nShieldValue = GetGoldPieceValue(oLeftHand); + if(AI_DEBUG) ai_Debug("0i_combat", "3098", " Shield oLeftHand: " + GetName(oLeftHand) + + " fShieldPower: " + IntToString(nShieldPower) + + " nShieldValue: " + IntToString(nShieldValue)); + } + // Setup the item in our left hand's avg dmg and gold value as our base. + else + { + fLeftPower = ai_GetMeleeWeaponAvgDmg(oCreature, oLeftHand, FALSE, TRUE); + nLeftValue = GetGoldPieceValue(oLeftHand); + if(AI_DEBUG) ai_Debug("0i_combat", "3103", " 1Handed oLeftHand: " + GetName(oLeftHand) + + " fLeftPower: " + FloatToString(fLeftPower, 0, 2) + + " nLeftValue: " + IntToString(nLeftValue)); + } + } + int nWeaponSize, nType, nCreatureSize = GetCreatureSize(oCreature); + // Get the best weapons they have in their inventory. + object oItem = GetFirstItemInInventory(oCreature); + // If they don't have any items then lets stop, we can't equip a weapon/shield. + if(oItem == OBJECT_INVALID) return FALSE; + while(oItem != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3114", GetName(oItem) + " MeleeWeapon: " + + IntToString(ai_GetIsMeleeWeapon(oItem)) + " Proficient: " + + IntToString(ai_GetIsProficientWith(oCreature, oItem)) + + " Identified: " + IntToString(GetIdentified(oItem))); + if(ai_GetIsProficientWith(oCreature, oItem) && + GetIdentified(oItem) && ai_CheckIfCanUseItem(oCreature, oItem)) + { + nItemValue = GetGoldPieceValue(oItem); + if(AI_DEBUG) ai_Debug("0i_combat", "3122", " nItemValue: " + IntToString(nItemValue)); + if(!GetLocalInt(GetModule(), AI_RULE_ILR) || nMaxItemValue >= nItemValue) + { + if(ai_GetIsShield(oItem)) + { + nItemPower = ai_SetShieldAC(oCreature, oItem); + if(nItemPower > nShieldPower || + (nItemPower == nShieldPower && nItemValue > nShieldValue)) + { oShield = oItem; nShieldPower = nItemPower; nShieldValue = nItemValue; } + } + else if(ai_GetIsMeleeWeapon(oItem)) + { + // Make sure the creature and weapon are close enough in size. + // Can wield a weapon up to one size larger than their size. + // Can wield a weapon down to two sizes smaller than their size. + nType = GetBaseItemType(oItem); + nWeaponSize = StringToInt(Get2DAString("baseitems", "WeaponSize", nType)); + if(nWeaponSize >= nCreatureSize - 2 && nWeaponSize <= nCreatureSize + 1) + { + // Get item avg damage based on if it is 2handed or 1handed. + if(ai_GetIsSingleHandedWeapon(oItem, oCreature)) + { + fItemPower = ai_GetMeleeWeaponAvgDmg(oCreature, oItem); + fOffItemPower = ai_GetMeleeWeaponAvgDmg(oCreature, oItem, FALSE, TRUE); + // If the new weapon is better than the weapon in our right hand. + if(fItemPower > fRightPower || + (fItemPower == fRightPower && nItemValue > nRightValue)) + { + // We need to check if the weapon in the right hand is + // better than the weapon in the left hand since we are + // replacing our right hand weapon. + // Note: we must find out if we have selected a weapon for the + // right hand i.e. oRight or the best weapon is in our + // right hand i.e. oRightHand! + fOffItemPower = 0.0; + if(oRight != OBJECT_INVALID && ai_GetIsSingleHandedWeapon(oRight, oCreature)) + { + fOffItemPower = ai_GetMeleeWeaponAvgDmg(oCreature, oRight, FALSE, TRUE); + } + else if(oRightHand != OBJECT_INVALID && ai_GetIsSingleHandedWeapon(oRightHand, oCreature)) + { + fOffItemPower = ai_GetMeleeWeaponAvgDmg(oCreature, oRightHand, FALSE, TRUE); + } + // If the right hand weapon is better than the weapon in our left hand. + if(fOffItemPower > fLeftPower || (fOffItemPower > 0.0 && + fOffItemPower == fLeftPower && nRightValue > nLeftValue)) + { + if(oRight != OBJECT_INVALID) oLeft = oRight; + else oLeft = oRightHand; + fLeftPower = fOffItemPower; + nLeftValue = nRightValue; + } + oRight = oItem; + fRightPower = fItemPower; + nRightValue = nItemValue; + } + // If the new weapon is better than the weapon in our left hand. + else if(fOffItemPower > fLeftPower || + (fOffItemPower == fLeftPower && nItemValue > nLeftValue)) + { oLeft = oItem; fLeftPower = fOffItemPower; nLeftValue = nItemValue; } + } + else if(ai_GetIsTwoHandedWeapon(oItem, oCreature)) + { + if(ai_GetIsDoubleWeapon(oItem)) + { + fItemPower = ai_GetMeleeWeaponAvgDmg(oCreature, oItem, TRUE, FALSE, oItem); + } + else fItemPower = ai_GetMeleeWeaponAvgDmg(oCreature, oItem, TRUE); + // If the new weapon is better than the selected weapon. + if(fItemPower > f2HandedPower || + (fItemPower == f2HandedPower && nItemValue > n2HandedValue)) + { + o2Handed = oItem; + f2HandedPower = fItemPower; + n2HandedValue = nItemValue; + } + } + } + } + } + } + oItem = GetNextItemInInventory(); + } + if(AI_DEBUG) ai_Debug("0i_combat", "3197", "oRight: " + GetName(oRight) + " oLeft:" + + GetName(oLeft) + " oShield: " + GetName(oShield) + + "o2Handed: " + GetName(o2Handed)); + // First check for two weapons first. + if(bTwoWeaponUser && oRight != OBJECT_INVALID && oLeft != OBJECT_INVALID) + { + fRightPower = ai_GetMeleeWeaponAvgDmg(oCreature, oRight, FALSE, FALSE, oLeft); + fRightPower += ai_GetMeleeWeaponAvgDmg(oCreature, oLeft, FALSE, TRUE); + if(AI_DEBUG) ai_Debug("0i_combat", "3205", " Right/Left Power: " + + FloatToString(fRightPower, 0, 2) + " 2HandedPower: " + + FloatToString(f2HandedPower, 0, 2)); + if(fRightPower > f2HandedPower) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3210", GetName(oCreature) + " is equiping " + + GetName(oRight) + " in the right hand and " + GetName(oLeft) + + " in the left hand."); + ActionEquipItem(oRight, INVENTORY_SLOT_RIGHTHAND); + ActionEquipItem(oLeft, INVENTORY_SLOT_LEFTHAND); + return TRUE; + } + } + if(f2HandedPower > fRightPower && o2Handed != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3220", GetName(oCreature) + " is equiping " + + GetName(o2Handed) + " in both hands."); + ActionEquipItem(o2Handed, INVENTORY_SLOT_RIGHTHAND); + return TRUE; + } + // Now lets just equip the best weapon for the right hand. + if(oRight != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3228", GetName(oCreature) + " is equiping " + + GetName(oRight) + " in the right hand. "); + ActionEquipItem(oRight, INVENTORY_SLOT_RIGHTHAND); + } + // Make sure we are not equiping a 2handed weapon and + // If not can we equip a shield? + if((oRight == OBJECT_INVALID || ai_GetIsSingleHandedWeapon(oRight, oCreature) || + !ai_GetIsTwoHandedWeapon(oRightHand, oCreature)) && + oShield != OBJECT_INVALID && GetHasFeat(FEAT_SHIELD_PROFICIENCY, oCreature)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3238", GetName(oCreature) + " is equiping " + + GetName(oShield) + " in the left hand."); + ActionEquipItem(oShield, INVENTORY_SLOT_LEFTHAND); + return TRUE; + } + // Finally if we don't have a weapon to equip so check to see if we are + // holding a bow. + else if(oRight == OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3247", GetName(oCreature) + " did not equip a melee weapon"); + // We couldn't find a melee weapon but we are looking to go into melee + // I'm holding a ranged weapon! We better put it up. + if(GetWeaponRanged(oRightHand)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3252", GetName(oCreature) + " is unequiping " + GetName(oRightHand)); + ActionUnequipItem(oRightHand); + return TRUE; + } + } + if(AI_DEBUG) ai_Debug("0i_combat", "3257", GetName(oCreature) + " is not equiping a weapon!"); + return FALSE; +} +int ai_EquipBestRangedWeapon(object oCreature, object oTarget = OBJECT_INVALID) +{ + if(ai_GetAIMode(oCreature, AI_MODE_EQUIP_WEAPON_OFF)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "3267", GetName(oCreature) + " is looking for best ranged weapon!"); + int nAmmo, nAmmoSlot, nBestType1, nBestType2, nType, nFeat, nItemValue, nRangedValue; + int nMaxItemValue = ai_GetMaxItemValueThatCanBeEquiped(GetHitDice(oCreature)); + string sAmmo; + object oRightHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature); + if(oRightHand != OBJECT_INVALID && ai_GetIsRangeWeapon(oRightHand)) + { + // Setup the item in our right hand as our base gold value to check against. + if(ai_GetIsRangeWeapon(oRightHand)) nRangedValue = GetGoldPieceValue(oRightHand); + } + object oRanged = OBJECT_INVALID, oAmmo = OBJECT_INVALID; + // Find the best type of ranged weapon for this player. + if(GetHasFeat(FEAT_WEAPON_FOCUS_LONGBOW, oCreature)) + { nBestType1 = BASE_ITEM_LONGBOW; nAmmo = BASE_ITEM_ARROW; nAmmoSlot = INVENTORY_SLOT_ARROWS; sAmmo = "arrow";} + else if(GetHasFeat(FEAT_WEAPON_FOCUS_SHORTBOW, oCreature)) + { nBestType1 = BASE_ITEM_SHORTBOW; nAmmo = BASE_ITEM_ARROW; nAmmoSlot = INVENTORY_SLOT_ARROWS; sAmmo = "arrow";} + else if(GetHasFeat(FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW, oCreature)) + { nBestType1 = BASE_ITEM_HEAVYCROSSBOW; nAmmo = BASE_ITEM_BOLT; nAmmoSlot = INVENTORY_SLOT_BOLTS; sAmmo = "bolt";} + else if(GetHasFeat(FEAT_WEAPON_FOCUS_LIGHT_CROSSBOW, oCreature)) + { nBestType1 = BASE_ITEM_LIGHTCROSSBOW; nAmmo = BASE_ITEM_BOLT; nAmmoSlot = INVENTORY_SLOT_BOLTS; sAmmo = "bolt";} + else if(GetHasFeat(FEAT_WEAPON_FOCUS_SLING, oCreature)) + { nBestType1 = BASE_ITEM_SLING; nAmmo = BASE_ITEM_BULLET; nAmmoSlot = INVENTORY_SLOT_BULLETS; sAmmo = "bullet";} + else if(GetHasFeat(FEAT_WEAPON_FOCUS_DART, oCreature)) + { nBestType1 = BASE_ITEM_DART; } + else if(GetHasFeat(FEAT_WEAPON_FOCUS_SHURIKEN, oCreature)) + { nBestType1 = BASE_ITEM_SHURIKEN; } + else if(GetHasFeat(FEAT_WEAPON_FOCUS_THROWING_AXE, oCreature)) + { nBestType1 = BASE_ITEM_THROWINGAXE; } + // These feats require a bow. + else if(GetHasFeat(FEAT_RAPID_SHOT, oCreature)) + { nBestType1 = BASE_ITEM_LONGBOW; nBestType2 = BASE_ITEM_SHORTBOW; + nAmmo = BASE_ITEM_ARROW; nAmmoSlot = INVENTORY_SLOT_ARROWS; sAmmo = "arrow"; } + // This feat requires a xbow. + else if(GetHasFeat(FEAT_RAPID_RELOAD, oCreature)) + { nBestType1 = BASE_ITEM_HEAVYCROSSBOW; nBestType2 = BASE_ITEM_LIGHTCROSSBOW; + nAmmo = BASE_ITEM_BOLT; nAmmoSlot = INVENTORY_SLOT_BOLTS; sAmmo = "bolt"; } + if(AI_DEBUG) ai_Debug("0i_combat", "3262", "nBestType1: " + IntToString(nBestType1) + " nBestType2: " + IntToString(nBestType2) + + " nAmmo: " + IntToString(nAmmo)); + int nCreatureSize = GetCreatureSize(oCreature) + 1; + // Cycle through the inventory looking for a ranged weapon. + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + nType = GetBaseItemType(oItem); + if(AI_DEBUG) ai_Debug("0i_combat", "3269", "oItem: " + GetName(oItem) + + " Identified: " + IntToString(GetIdentified(oItem)) + + " Ranged Weapon: " + Get2DAString("baseitems", "RangedWeapon", nType)); + // Make sure it is identified and it is a ranged weapon. + if(GetIdentified(oItem) && Get2DAString("baseitems", "RangedWeapon", nType) != "") + { + if(AI_DEBUG) ai_Debug("0i_combat", "3278", " Proficient: " + + IntToString(ai_GetIsProficientWith(oCreature, oItem)) + + " nMaxItemValue: " + IntToString(nMaxItemValue)); + if(ai_GetIsProficientWith(oCreature, oItem)) + { + if(ai_CheckIfCanUseItem(oCreature, oItem)) + { + nItemValue = GetGoldPieceValue(oItem); + if(AI_DEBUG) ai_Debug("0i_combat", "3284", "nItemValue: " + IntToString(nItemValue)); + if(!GetLocalInt(GetModule(), AI_RULE_ILR) || nMaxItemValue >= nItemValue) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3287", " Creature Size: " + IntToString(nCreatureSize) + + " Weapon Size: " + Get2DAString("baseitems", "WeaponSize", nType)); + // Make sure they are large enough to use it. + if(StringToInt(Get2DAString("baseitems", "WeaponSize", nType)) <= nCreatureSize) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3292", "nItemValue: " + IntToString(nItemValue) + + " nRangedValue: " + IntToString(nRangedValue) + " nType: " + IntToString(nType)); + // Is it of the best range weapon type? 0 is any range weapon. + // Also grab any range weapon until we have a best type. + if(nType == nBestType1 || nType == nBestType2 || + nBestType1 == 0 || oRanged == OBJECT_INVALID) + { + if(nItemValue > nRangedValue) + { + if(ai_GetHasItemProperty(oItem, ITEM_PROPERTY_UNLIMITED_AMMUNITION)) + { + oRanged = oItem; nRangedValue = nItemValue; + if(AI_DEBUG) ai_Debug("0i_combat", "3304", "Selecting oRanged: " + GetName(oRanged) + + " nRangedValue: " + IntToString(nRangedValue) + " and doesn't need ammo!"); + } + else + { + if(nBestType1 == 0) + { + if(nType == BASE_ITEM_LONGBOW || nType == BASE_ITEM_SHORTBOW) + { nAmmo = BASE_ITEM_ARROW; sAmmo = "arrow"; nAmmoSlot = INVENTORY_SLOT_ARROWS; } + else if(nType == BASE_ITEM_HEAVYCROSSBOW || nType == BASE_ITEM_LIGHTCROSSBOW) + { nAmmo = BASE_ITEM_BOLT; sAmmo = "bolt"; nAmmoSlot = INVENTORY_SLOT_BOLTS; } + else if(nType == BASE_ITEM_SLING) + { nAmmo = BASE_ITEM_BULLET; sAmmo = "bullet"; nAmmoSlot = INVENTORY_SLOT_BULLETS; } + else nAmmo = 0; + } + // Now do we have ammo for it? + if(AI_DEBUG) ai_Debug("0i_combat", "3320", "nAmmo: " + IntToString(nAmmo)); + if(nAmmo > 0) + { + if(nAmmo == BASE_ITEM_ARROW || + nAmmo == BASE_ITEM_BOLT || + nAmmo == BASE_ITEM_BULLET) oAmmo = GetItemInSlot(nAmmoSlot); + if(oAmmo == OBJECT_INVALID) + { + // We don't have ammo equiped so lets see if we have any in our inventory. + oAmmo = GetFirstItemInInventory(); + while(oAmmo != OBJECT_INVALID) + { + if(GetBaseItemType(oAmmo) == nAmmo) break; + oAmmo = GetNextItemInInventory(); + } + if(oAmmo != OBJECT_INVALID) ActionEquipItem(oAmmo, nAmmoSlot); + } + } + if(oAmmo != OBJECT_INVALID) + { + oRanged = oItem; nRangedValue = nItemValue; + if(AI_DEBUG) ai_Debug("0i_combat", "3307", "Selecting oRanged: " + GetName(oRanged) + + " nRangedValue: " + IntToString(nRangedValue)); + } + } + } + } + } + } + } + } + } + oItem = GetNextItemInInventory(oCreature); + } + // They don't have a range weapon so lets break out. + if(oRanged == OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3357", GetName(oCreature) + " did not equip a ranged weapon!"); + return FALSE; + } + ActionEquipItem(oRanged, INVENTORY_SLOT_RIGHTHAND); + return TRUE; +} +int ai_EquipBestMonkMeleeWeapon(object oCreature, object oTarget = OBJECT_INVALID) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "2949", GetName(OBJECT_SELF) + " is equiping best monk melee weapon!"); + int nValue, nRightValue; + int nMaxItemValue = ai_GetMaxItemValueThatCanBeEquiped(GetHitDice(oCreature)); + object oRight = OBJECT_INVALID; + object oRightHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature); + if(oRightHand != OBJECT_INVALID) + { + nRightValue = GetGoldPieceValue(oRightHand); + } + // Get the best kama they have in their inventory. + object oItem = GetFirstItemInInventory(oCreature); + // If they don't have any kamas then lets stop, we can't equip a weapon. + if(oItem == OBJECT_INVALID) return FALSE; + while(oItem != OBJECT_INVALID) + { + nValue = GetGoldPieceValue(oItem); + // Make sure they are high enough level to equip this item. + if(nMaxItemValue >= nValue && nValue > 1) + { + // Is it a single handed weapon? + if(GetBaseItemType(oItem) == BASE_ITEM_KAMA) + { + // Replace the lowest value right weapon. + if(nValue > nRightValue) + { + oRight = oItem; nRightValue = nValue; + } + } + } + oItem = GetNextItemInInventory(oCreature); + } + // Finally lets just equip the kama if we have one. + if(oRight == OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2983", GetName(oCreature) + " did not equip a melee weapon!"); + return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_combat", "2986", GetName(oCreature) + " is equiping " + GetName(oRight) + " in the right hand."); + ActionEquipItem(oRight, INVENTORY_SLOT_RIGHTHAND); + return TRUE; +} +int ai_IsInADangerousAOE(object oCreature, float fMaxRange = AI_RANGE_BATTLEFIELD, int bMove = FALSE) +{ + int bDangerous, nSpell, nCnt = 1; + string sAOEType; + object oAOE = GetNearestObject(OBJECT_TYPE_AREA_OF_EFFECT, oCreature, nCnt); + float fRadius, fDistance = GetDistanceBetween(oCreature, oAOE); + while(oAOE != OBJECT_INVALID && fDistance <= fMaxRange) + { + // AOE's have the tag set to the "LABEL" in vfx_persistent.2da + // I check vs those labels to see if the AOE is offensive. + // Below is the list of Offensive AOE effects. + sAOEType = GetTag(oAOE); + if(sAOEType == "VFX_PER_WEB") { fRadius = 6.7; nSpell = SPELL_WEB; } + else if(sAOEType == "VFX_PER_ENTANGLE") { fRadius = 5.0; nSpell = SPELL_ENTANGLE; } + else if(sAOEType == "VFX_PER_GREASE") { fRadius = 6.0; nSpell = SPELL_GREASE; } + else if(sAOEType == "VFX_PER_EVARDS_BLACK_TENTACLES") + { fRadius = 5.0; nSpell = SPELL_EVARDS_BLACK_TENTACLES; } + //else if(sAOEType == "VFX_PER_DARKNESS") { fRadius = 6.7; nSpell = SPELL_DARKNESS; } + //else if(sAOEType == "VFX_MOB_SILENCE") { fRadius = 4.0; nSpell = SPELL_SILENCE; } + else if(sAOEType == "VFX_PER_FOGSTINK") { fRadius = 6.7; nSpell = SPELL_STINKING_CLOUD; } + else if(sAOEType == "VFX_PER_FOGFIRE") { fRadius = 5.0; nSpell = SPELL_INCENDIARY_CLOUD; } + else if(sAOEType == "VFX_PER_FOGKILL") { fRadius = 5.0; nSpell = SPELL_CLOUDKILL; } + else if(sAOEType == "VFX_PER_FOGMIND") { fRadius = 5.0; nSpell = SPELL_MIND_FOG; } + else if(sAOEType == "VFX_PER_CREEPING_DOOM") { fRadius = 6.7; nSpell = SPELL_CREEPING_DOOM; } + else if(sAOEType == "VFX_PER_FOGACID") { fRadius = 5.0; nSpell = SPELL_ACID_FOG; } + else if(sAOEType == "VFX_PER_FOGBEWILDERMENT") { fRadius = 5.0; nSpell = SPELL_CLOUD_OF_BEWILDERMENT; } + else if(sAOEType == "VFX_PER_WALLFIRE") { fRadius = 10.0; nSpell = SPELL_WALL_OF_FIRE; } + else if(sAOEType == "VFX_PER_WALLBLADE") { fRadius = 10.0; nSpell = SPELL_BLADE_BARRIER; } + else if(sAOEType == "VFX_PER_DELAY_BLAST_FIREBALL") { fRadius = 2.0; nSpell = SPELL_DELAYED_BLAST_FIREBALL; } + else if(sAOEType == "VFX_PER_GLYPH") { fRadius = 2.5; nSpell = SPELL_GLYPH_OF_WARDING; } + else fRadius = 0.0; + if(AI_DEBUG) ai_Debug("0i_combat", "3088", GetName(oCreature) + " distance from AOE is " + FloatToString(fDistance, 0, 2) + + " AOE Radius: " + FloatToString(fRadius, 0, 2) + + " AOE Type: " + GetTag(oAOE)); + // fRadius > 0.0 keeps them from tiggering that they are in a dangerous + // AOE due to having an AOE on them. + if(fRadius > 0.0 && fDistance <= fRadius && + !ai_CreatureImmuneToEffect(GetAreaOfEffectCreator(oAOE), oCreature, nSpell)) + { + bDangerous = TRUE; + if(nSpell == SPELL_WEB || nSpell == SPELL_ENTANGLE) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) bDangerous = FALSE; + if(GetReflexSavingThrow(oCreature) + GetAbilityModifier(ABILITY_DEXTERITY, oCreature) >= ai_GetCharacterLevels(oCreature)) + bDangerous = FALSE; + } + break; + } + oAOE = GetNearestObject(OBJECT_TYPE_AREA_OF_EFFECT, oCreature, ++nCnt); + fDistance = GetDistanceBetween(oCreature, oAOE); + } + if(bDangerous && bMove) + { + location lLocation; + object oTarget; + if(ai_GetIsInCombat(oCreature)) + { + object oMaster = GetMaster(oCreature); + // If we have a ranged weapon then backout and use that. + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + lLocation = GetRandomLocation(GetArea(oCreature), oCreature, fRadius + 1.0); + } + else // we must find a target out of the AOE or fight in the AOE. + { + oTarget = ai_GetNearestTargetNotInAOE(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, TRUE); + if(oTarget != OBJECT_INVALID) lLocation = GetLocation(oTarget); + } + } + else lLocation = GetRandomLocation(GetArea(oCreature), oCreature, fRadius + 1.0); + ai_ClearCreatureActions(); + if(AI_DEBUG) ai_Debug("0i_combat", "3035", GetName(oCreature) + " is moving out of area of effect!"); + ActionMoveToLocation(lLocation, TRUE); + return TRUE; + } + else if(bDangerous) return TRUE; + return FALSE; +} +int ai_GetIsHidden(object oHidden) +{ + int nEffectType; + effect eEffect = GetFirstEffect(oHidden); + while(GetIsEffectValid(eEffect)) + { + nEffectType = GetEffectType(eEffect); + if(nEffectType == EFFECT_TYPE_INVISIBILITY) return 1; + else if(nEffectType == EFFECT_TYPE_IMPROVEDINVISIBILITY) return 1; + else if(nEffectType == EFFECT_TYPE_DARKNESS) return 2; + else if(nEffectType == EFFECT_TYPE_SANCTUARY) return 3; + else if(nEffectType == EFFECT_TYPE_ETHEREAL) return 3; + eEffect = GetNextEffect(oHidden); + } + if(GetActionMode(oHidden, ACTION_MODE_STEALTH)) return 4; + return FALSE; +} +int ai_CastOffensiveSpellVsTarget(object oCaster, object oCreature, int nSpell) +{ + // Check saves. + string sSave = Get2DAString("ai_spells", "SaveType", nSpell); + // There is no save! + if(sSave == "") return TRUE; + // Get the level of the spell. + int nSpellLvl = StringToInt(Get2DAString("spells", "Innate", nSpell)); + // Randomize our check. + nSpellLvl += Random(AI_SPELL_CHECK_DIE) + AI_SPELL_CHECK_BONUS; + // Check feats that might increase our DC. + string sSchool = Get2DAString("spells", "School", nSpell); + if(sSchool == "V") + { + if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_EVOCATION, oCaster)) nSpellLvl += 4; + else if(GetHasFeat(FEAT_SPELL_FOCUS_EVOCATION, oCaster)) nSpellLvl += 2; + } + else if(sSchool == "C") + { + if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION, oCaster)) nSpellLvl += 4; + else if(GetHasFeat(FEAT_SPELL_FOCUS_CONJURATION, oCaster)) nSpellLvl += 2; + } + else if(sSchool == "N") + { + if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_NECROMANCY, oCaster)) nSpellLvl += 4; + else if(GetHasFeat(FEAT_SPELL_FOCUS_NECROMANCY, oCaster)) nSpellLvl += 2; + } + else if(sSchool == "E") + { + if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ENCHANTMENT, oCaster)) nSpellLvl += 4; + else if(GetHasFeat(FEAT_SPELL_FOCUS_ENCHANTMENT, oCaster)) nSpellLvl += 2; + } + else if(sSchool == "I") + { + if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ILLUSION, oCaster)) nSpellLvl += 4; + else if(GetHasFeat(FEAT_SPELL_FOCUS_ILLUSION, oCaster)) nSpellLvl += 2; + } + else if(sSave == "Reflex") + { + string sImmunityType = Get2DAString("ai_spells", "ImmunityType", nSpell); + // Give a bonus to our check for half dmg spells unless they can dodge it! + if((sImmunityType == "Fire" || sImmunityType == "Electricity" || sImmunityType == "Acid" || + sImmunityType == "Cold" || sImmunityType == "Sonic") && + !GetHasFeat(FEAT_IMPROVED_EVASION, oCreature)) nSpellLvl += AI_SPELL_CHECK_NO_EVASION_BONUS; + if(AI_DEBUG) ai_Debug("0i_combat", "3050", " nSpellLvl: " + IntToString(nSpellLvl) + + " > nMagic: " + IntToString(GetReflexSavingThrow(oCreature))); + return (nSpellLvl > GetReflexSavingThrow(oCreature)); + } + else if(sSave == "Fortitude") return (nSpellLvl > GetFortitudeSavingThrow(oCreature)); + else if(sSave == "Will") return (nSpellLvl > GetWillSavingThrow(oCreature)); + return TRUE; +} +int ai_GetDragonDC(object oCreature) +{ + int nDC, nHitDice = GetHitDice(oCreature); + if(nHitDice < 4) { nDC = 12; } + else if(nHitDice < 7) { nDC = 13; } + else if(nHitDice < 10) { nDC = 14; } + else if(nHitDice < 13) { nDC = 16; } + else if(nHitDice < 16) { nDC = 18; } + else if(nHitDice < 19) { nDC = 20; } + else if(nHitDice < 22) { nDC = 22; } + else if(nHitDice < 25) { nDC = 24; } + else if(nHitDice < 28) { nDC = 26; } + else if(nHitDice < 31) { nDC = 28; } + else if(nHitDice < 34) { nDC = 30; } + else if(nHitDice < 37) { nDC = 32; } + else if(nHitDice < 39) { nDC = 34; } + else { nDC = 36; } + string sTag = GetTag(oCreature); + if(sTag == "gold_dragon") nDC += 5; + if(sTag == "red_dragon" || sTag == "silver_dragon") return nDC + 4; + else if(sTag == "black_dragon" || sTag == "brass_dragon") return nDC + 3; + else if(sTag == "green_dragon" || sTag == "copper_dragon") return nDC + 2; + else if(sTag == "blue_dragon" || sTag == "bronze_dragon") return nDC + 1; + //else if(sTag == "white_dragon") nDC += 0; + return nDC; +} +void ai_SetCreatureAIScript(object oCreature) +{ + string sCombatAI = GetLocalString(oCreature, AI_DEFAULT_SCRIPT); + // Non-Hostile NPC's do not need to use special tactics by default. + if(sCombatAI == "" && GetLocalInt(GetModule(), AI_RULE_AMBUSH) && d100() < 34) + { + // They should have skill ranks equal to their level + 1 to use a special AI. + int nSkillNeeded = GetHitDice(oCreature) + 1; + /*/ Ambusher: requires either Improved Invisibility or Invisibility. + if(GetHasSpell(SPELL_IMPROVED_INVISIBILITY, oCreature) || + GetHasSpell(SPELL_INVISIBILITY, oCreature)) + { + int bCast = ai_TryToCastSpell(oCreature, SPELL_IMPROVED_INVISIBILITY, oCreature); + if(!bCast) bCast = ai_TryToCastSpell(oCreature, SPELL_INVISIBILITY, oCreature); + if(bCast) sCombatAI = "ai_ambusher"; + } */ + if(GetHasFeat(FEAT_SNEAK_ATTACK, oCreature, TRUE)) + { + sCombatAI = "ai_flanker"; + } + // Ambusher: Requires a Hide and Move silently skill equal to your level + 1. + else if(GetSkillRank(SKILL_HIDE, oCreature) >= nSkillNeeded && + GetSkillRank(SKILL_MOVE_SILENTLY, oCreature) >= nSkillNeeded) + { + sCombatAI = "ai_ambusher"; + } + // Defensive : requires Parry skill equal to your level or Expertise. + else if(GetSkillRank(SKILL_PARRY, oCreature) >= nSkillNeeded || + GetHasFeat(FEAT_EXPERTISE, oCreature) || + GetHasFeat(FEAT_IMPROVED_EXPERTISE, oCreature)) + { + sCombatAI = "ai_defensive"; + } + else if(GetHasSpell(SPELL_LESSER_DISPEL, oCreature) || + GetHasSpell(SPELL_DISPEL_MAGIC, oCreature) || GetHasSpell(SPELL_GREATER_DISPELLING, oCreature)) + { + sCombatAI = "ai_cntrspell"; + } + else if(ai_CheckClassType(oCreature, AI_CLASS_TYPE_ARCANE) && + ai_GetCharacterLevels(oCreature) > 4) sCombatAI = "ai_ranged"; + else if(ai_EquipBestRangedWeapon(oCreature)) sCombatAI = "ai_ranged"; + else if(GetSkillRank(SKILL_TAUNT, oCreature) >= nSkillNeeded) sCombatAI = "ai_taunter"; + } + if(sCombatAI == "") + { + int nAssociateType = GetAssociateType(oCreature); + if (nAssociateType == ASSOCIATE_TYPE_FAMILIAR) + { + sCombatAI = "ai_default"; + } + else + { + // Select the best ai for this henchmen based on class. + int nClass = GetClassByPosition(1, oCreature); + // If they have more than one class use the default ai. + if(GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID) sCombatAI = "ai_default"; + else if(nClass == CLASS_TYPE_BARBARIAN) sCombatAI = "ai_barbarian"; + else if(nClass == CLASS_TYPE_BARD) sCombatAI = "ai_bard"; + else if(nClass == CLASS_TYPE_CLERIC) sCombatAI = "ai_cleric"; + else if(nClass == CLASS_TYPE_DRUID) sCombatAI = "ai_druid"; + else if(nClass == CLASS_TYPE_FIGHTER) sCombatAI = "ai_fighter"; + else if(nClass == CLASS_TYPE_MONK) sCombatAI = "ai_monk"; + else if(nClass == CLASS_TYPE_PALADIN) sCombatAI = "ai_paladin"; + else if(nClass == CLASS_TYPE_RANGER) sCombatAI = "ai_ranger"; + else if(nClass == CLASS_TYPE_ROGUE) sCombatAI = "ai_rogue"; + else if(nClass == CLASS_TYPE_SORCERER) sCombatAI = "ai_sorcerer"; + else if(nClass == CLASS_TYPE_WIZARD) sCombatAI = "ai_wizard"; + //else if(nClass == CLASS_TYPE_ABERRATION) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_ANIMAL) sCombatAI = "ai_animal"; + //else if(nClass == CLASS_TYPE_CONSTRUCT) sCombatAI = "ai_animal"; + else if(nClass == CLASS_TYPE_DRAGON) sCombatAI = "ai_dragon"; + //else if(nClass == CLASS_TYPE_ELEMENTAL) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_FEY) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_GIANT) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_HUMANOID) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_MAGICAL_BEAST) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_MONSTROUS) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_OOZE) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_OUTSIDER) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_UNDEAD) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_VERMIN) sCombatAI = "ai_animal"; + else sCombatAI = "ai_default"; + } + } + if(AI_DEBUG) ai_Debug("0i_combat", "3740", GetName(oCreature) + " is setting AI to " + sCombatAI); + SetLocalString(oCreature, AI_DEFAULT_SCRIPT, sCombatAI); + SetLocalString(oCreature, AI_COMBAT_SCRIPT, sCombatAI); +} +int ai_IsImmuneToSneakAttacks(object oCreature, object oTarget) +{ + if(GetHasFeat(FEAT_UNCANNY_DODGE_2, oTarget) && + GetLevelByClass(CLASS_TYPE_ROGUE, oCreature) + 3 < GetLevelByClass(CLASS_TYPE_ROGUE, oTarget)) return TRUE; + if(GetIsImmune(oTarget, IMMUNITY_TYPE_SNEAK_ATTACK)) return TRUE; + object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oTarget); + if(ai_GetHasItemProperty(oSkin, ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS, IP_CONST_IMMUNITYMISC_BACKSTAB)) return TRUE; + return FALSE; +} +int ai_IsStrongerThanMe(object oCreature, int nIndex) +{ + int nEnemyCombat = GetLocalInt(oCreature, AI_ENEMY_COMBAT + IntToString(nIndex)); + int nCreatureCombat = ai_GetMyCombatRating(oCreature); + if(AI_DEBUG) ai_Debug("0i_combat", "3955", "IsStrongerThanMe: nCreatureCombat: " + + IntToString(nCreatureCombat) + " nEnemyCombat: " + IntToString(nEnemyCombat)); + return (nEnemyCombat > nCreatureCombat); +} +int ai_StrongOpponent(object oCreature, object oTarget, int nAdj = 2) +{ + int nLevel = GetHitDice(oCreature); + if(AI_DEBUG) ai_Debug("0i_combat", "3220", "ai_StrongOpponent"); + nAdj = nAdj *((nAdj + nLevel) / 10); + if(AI_DEBUG) ai_Debug("0i_combat", "3222", "Is the opponent strong? Target CR >= Our level - nAdj(" + + FloatToString(GetChallengeRating(oTarget), 0, 2) + " >= " + IntToString(nLevel - nAdj) + ")"); + return (FloatToInt(GetChallengeRating(oTarget)) >= nLevel - nAdj); +} +int ai_PowerAttackGood(object oCreature, object oTarget, float fAdj) +{ + int nAvgDmg = ai_GetWeaponDamage(oCreature, 2); + if(AI_DEBUG) ai_Debug("0i_combat", "3412", "PowerAttack: (nAvgDmg: " + IntToString(nAvgDmg) + + " > Target HP: " + IntToString(GetCurrentHitPoints(oTarget)) + + ") Skip: " + IntToString(nAvgDmg > GetCurrentHitPoints(oTarget))); + if(nAvgDmg > GetCurrentHitPoints(oTarget)) return FALSE; + float fAvgDmg = IntToFloat(nAvgDmg); + float fTargetAC = IntToFloat(GetAC(oTarget)); + float fCreatureAtk = IntToFloat(ai_GetCreatureAttackBonus(oCreature)); + float fNormalChance = (21.0 - (fTargetAC - fCreatureAtk)) / 20.0; + // Our chance to hit is already minimum of 5% so this doesn't hurt our chance! + if(fNormalChance <= 0.05) return TRUE; + float fAdjDamage = (fAvgDmg + fAdj) * ((21.0-(fTargetAC - fCreatureAtk + fAdj))/20); + if(AI_DEBUG) ai_Debug("0i_combat", "3420", "fNormalDamage: " + FloatToString(fNormalChance * fAvgDmg, 0, 2) + + " < fAdjDamage: " + FloatToString(fAdjDamage, 0, 2) + " = " + IntToString(fNormalChance * fAvgDmg < fAdjDamage)); + return fNormalChance * fAvgDmg < fAdjDamage; +} +int ai_AttackPenaltyOk(object oCreature, object oTarget, float fAtkAdj) +{ + float fTargetAC = IntToFloat(GetAC(oTarget)); + float fCreatureAtk = IntToFloat(ai_GetCreatureAttackBonus(oCreature)); + float fNormalChance = (21.0-(fTargetAC - fCreatureAtk))/20.0; + if(AI_DEBUG) ai_Debug("0i_combat", "3431", "Normal Avg Chance: " + FloatToString(fNormalChance, 0, 2) + " <= 0.05"); + // We already need a 20 to hit so this doesn't hurt our chances! + if(fNormalChance <= 0.05) return TRUE; + float fAdjChance = (21.0-(fTargetAC - fCreatureAtk + fAtkAdj))/20.0; + if(AI_DEBUG) ai_Debug("0i_combat", "3435", "Adjusted Avg Chance: " + FloatToString(fAdjChance, 0, 2) + " > 0.55"); + // if our chance is 55% or better to hit then use it. + return fAdjChance > 0.55; +} +int ai_AttackBonusGood(object oCreature, object oTarget, float fAtkAdj) +{ + float fTargetAC = IntToFloat(GetAC(oTarget)); + float fCreatureAtk = IntToFloat(ai_GetCreatureAttackBonus(oCreature)); + float fNormalChance = (21.0-(fTargetAC - fCreatureAtk))/20.0; + if(AI_DEBUG) ai_Debug("0i_combat", "3450", "Normal Avg Chance: " + FloatToString(fNormalChance, 0, 2) + " > 0.99"); + // We already hit them with any roll so this will not help. + if(fNormalChance > 0.99) return FALSE; + float fAdjChance = (21.0-(fTargetAC - fCreatureAtk - fAtkAdj))/20.0; + if(AI_DEBUG) ai_Debug("0i_combat", "3454", "Adjusted Avg Chance: " + FloatToString(fAdjChance, 0, 2) + " < 0.0"); + // if our chance increases our to hit then this is good. + return fAdjChance > 0.0; +} +int ai_ACAdjustmentGood(object oCreature, object oTarget, float fACAdj) +{ + float fCreatureAC = IntToFloat(GetAC(oCreature)); + float fTargetAtk = IntToFloat(ai_GetCreatureAttackBonus(oTarget)); + float fNormalChance = (21.0-(fCreatureAC - fTargetAtk))/20.0; + if(AI_DEBUG) ai_Debug("0i_combat", "3444", "Normal Chance To Hit: " + FloatToString(fNormalChance, 0, 2) + " <= 0.05"); + // They already need a 20 to hit so adding more AC is worthless. + if(fNormalChance <= 0.05) return FALSE; + float fAdjChance = (21.0-(fCreatureAC - fTargetAtk + fACAdj))/20.0; + if(AI_DEBUG) ai_Debug("0i_combat", "3448", "Adjusted Chance To Hit: " + FloatToString(fAdjChance, 0, 2) + " < 1.00"); + // Anything less than 1 helps are AC! + return fAdjChance < 1.00; +} +int ai_CanIMoveInCombat(object oCreature) +{ + // DC 15 tumble check is required to not give attacks of opportunity. + return (GetHasFeat(FEAT_MOBILITY, oCreature) || GetHasFeat(FEAT_SPRING_ATTACK, oCreature) || + GetSkillRank(SKILL_TUMBLE, oCreature) > 9); +} +int ai_CanIUseRangedWeapon(object oCreature, int nInMelee) +{ + return (!nInMelee || ai_GetEnemyAttackingMe(oCreature) == OBJECT_INVALID); +} +int ai_CheckRangedCombatPosition(object oCreature, object oTarget, int nAction) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "3559", "Ranged attack: See oTarget? " + + IntToString(GetObjectSeen(oTarget, oCreature)) + " Line of Sight? " + + IntToString(LineOfSightObject(oCreature, oTarget))); + if(nAction == AI_LAST_ACTION_RANGED_ATK) + { + // Watch the nearest enemy instead of our target as they could move toward us. + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + float fDistance = GetDistanceBetween(oCreature, oNearestEnemy); + if(AI_DEBUG) ai_Debug("0i_combat", "3337", "oNearestEnemy: " + GetName(oNearestEnemy) + + " fDistance: " + FloatToString(fDistance, 0, 2)); + // If we have sneak attack then we want to be within 30'. + if(GetHasFeat(FEAT_SNEAK_ATTACK, oCreature)) + { + if(fDistance > AI_RANGE_CLOSE) + { + // We check this because if the enemy is moving or has not + // started acting then we don't want to move up on them as they + // might move towards us. Just attack! Only sneak attack if they are busy. + int nAction = GetCurrentAction(oNearestEnemy); + if(AI_DEBUG) ai_Debug("0i_combat", "3353", GetName(oNearestEnemy) + " current action: " + IntToString(nAction)); + if(nAction == ACTION_MOVETOPOINT || + nAction == ACTION_INVALID || + nAction == ACTION_RANDOMWALK) return FALSE; + // If they are attacking make sure it is in melee? + // If not then don't move since they might be moving toward us. + if(nAction == ACTION_ATTACKOBJECT) + { + if(!ai_GetNumOfEnemiesInRange(oNearestEnemy)) return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_combat", "3355", GetName(oCreature) + " is moving closer [8.0] to " + + GetName(oNearestEnemy) + " to sneak attack with a ranged weapon."); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MOVE); + ActionMoveToObject(oNearestEnemy, TRUE, AI_RANGE_CLOSE); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + } + else if(fDistance < AI_RANGE_LONG) + { + // Lets move back a little, too far and we miss attacks! + if(AI_DEBUG) ai_Debug("0i_combat", "3374", GetName(oCreature) + " is moving away from " + + GetName(oNearestEnemy) + "[2.0] to use a ranged weapon."); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MOVE); + ActionMoveAwayFromObject(oNearestEnemy, TRUE, 2.0); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + } + // If we are casting a hostile spell then check positioning. + else if(nAction > -1 && Get2DAString("ai_spells", "HostileSetting", nAction) == "1") + { + // We are out of melee and casting a spell on an ally so don't move. + if(GetReputation(oCreature, oTarget) > 89) return FALSE; + float fSpellRange = ai_GetSpellRange(nAction); + float fTargetRange = GetDistanceBetween(oCreature, oTarget); + if(AI_DEBUG) ai_Debug("0i_combat", "3389", "fSpellRange: " + FloatToString(fSpellRange, 0, 2) + + " fTargetRange: " + FloatToString(fTargetRange, 0, 2)); + // Adjust the ranges to see if we are too close. + if(fSpellRange == 5.0) fSpellRange = 4.5f; + //else if(fSpellRange == 8.0) fSpellRange = 8.0f; + else if(fSpellRange > 10.0f) fSpellRange = 10.0f; + if(AI_DEBUG) ai_Debug("0i_combat", "3395", "Adjusted spell range is " + + FloatToString(fSpellRange, 0, 2) + " : " + GetName(oTarget) + " range is " + + FloatToString(fTargetRange, 0, 2) + "."); + // We are closer than we have to be to cast our spell. + if(fTargetRange < fSpellRange) + { + // Lets move back a little, too far and we miss attacks! + if(AI_DEBUG) ai_Debug("0i_combat", "3402", GetName(oCreature) + " is moving away from " + + GetName(oTarget) + "[2.0] to cast a spell."); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MOVE); + ActionMoveAwayFromObject(oTarget, FALSE, 2.0); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } +} + return FALSE; +} +int ai_CheckMeleeCombatPosition(object oCreature, object oTarget, int nAction, int nBaseItemType = 0) +{ + // If we are not being attacked then we might want to back out of combat. + if(ai_GetEnemyAttackingMe(oCreature) != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3417", "I am being attacked so stand my ground!"); + return FALSE; + } + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + float fDistance = GetDistanceBetween(oCreature, oNearestEnemy); + if(AI_DEBUG) ai_Debug("0i_combat", "3422", "oNearestEnemy: " + GetName(oNearestEnemy) + " fDistance " + FloatToString(fDistance, 0, 2)); + if(nAction == AI_LAST_ACTION_RANGED_ATK) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3425", GetName(oCreature) + " is moving away from " + GetName(oNearestEnemy) + + "[" + FloatToString(AI_RANGE_MELEE - fDistance + 1.0, 0, 2) + "]" + " to use a ranged weapon."); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MOVE); + // Lets move just out of melee range! + int bRun = ai_CanIMoveInCombat(oCreature); + ActionMoveAwayFromObject(oNearestEnemy, bRun, AI_RANGE_MELEE - fDistance + 1.0); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + // If we want to cast a spell this round then back away! + else if(nAction > -1) + { + // Some items we don't need to move on such as wands, staves, and rods. + if(nBaseItemType == BASE_ITEM_ENCHANTED_WAND || + nBaseItemType == BASE_ITEM_MAGICWAND || + nBaseItemType == BASE_ITEM_MAGICSTAFF || + nBaseItemType == BASE_ITEM_MAGICROD) return FALSE; + float fSpellRange = ai_GetSpellRange(nAction); + // A Touch spell means we should not move if we are not the target. + if(fSpellRange <= 5.0 && oCreature != oTarget) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "3446", GetName(oCreature) + " is moving away from " + + GetName(oTarget) + "[" + FloatToString(AI_RANGE_MELEE - fDistance + 1.0, 0, 2) + "] to cast a spell."); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MOVE); + SetActionMode(oCreature, ACTION_MODE_DEFENSIVE_CAST, FALSE); + // Lets move just out of melee range! + int bRun = ai_CanIMoveInCombat(oCreature); + ActionMoveAwayFromObject(oNearestEnemy, bRun, AI_RANGE_MELEE - fDistance + 1.0); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + return FALSE; +} +int ai_CheckCombatPosition(object oCreature, object oTarget, int nInMelee, int nAction, int nBaseItemType = 0) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "3460", "|-----> Checking position in combat: " + + GetName(oCreature) + " nMelee: " + IntToString(nInMelee) + + " Action: " + IntToString(nAction) + + " Hold mode: " + IntToString(ai_GetAIMode(oCreature, AI_MODE_STAND_GROUND)) + + " Use Advanced Movement: " + IntToString(GetLocalInt(GetModule(), AI_RULE_ADVANCED_MOVEMENT))); + // We don't want to move around in combat if we were told to hold. + if(ai_GetAIMode(oCreature, AI_MODE_STAND_GROUND)) return FALSE; + if(!GetLocalInt(GetModule(), AI_RULE_ADVANCED_MOVEMENT)) return FALSE; + if(ai_CompareLastAction(oCreature, AI_LAST_ACTION_MOVE)) return FALSE; + // We are not in melee combat so lets see how close we should get. + if(!nInMelee) return ai_CheckRangedCombatPosition(oCreature, oTarget, nAction); + // If we are in melee we might need to move out of combat. + return ai_CheckMeleeCombatPosition(oCreature, oTarget, nAction, nBaseItemType); +} diff --git a/src/module/nss/0i_constants.nss b/src/module/nss/0i_constants.nss new file mode 100644 index 0000000..5413ac4 --- /dev/null +++ b/src/module/nss/0i_constants.nss @@ -0,0 +1,667 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Name: 0i_constants +// Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Include script for handling all constants for the ai. + These constants are static and can only be changed in the toolset. + Changes to any constants will not take effect until the scripts are recompiled. +*/////////////////////////////////////////////////////////////////////////////// + +const string PHILOS_VERSION = "Philos' Enhancing Player System (PEPS) version:07.12.25"; +// The following constants are designed to be changed to allow the AI to work +// differently based on what a developer wants. +// If you change these constants make sure the database has been removed +// so the ai_SetAIRules() will rewrite the new server rule values. +// File Name: peps_database.sqlite3 +//********************************** SERVER *********************************** +// Turn On/Off Debug. You can only use the debug with the pi_debug/pe_debug scripts. +// This will only work if you are using the PEPS menu system. +const int AI_DEBUG = FALSE; +// Defines if we are compiling for single player or a server. Always on for servers! +const int AI_SERVER = FALSE; +// The number of classes allowed for a creature to take in the server/module. +const int AI_MAX_CLASSES_PER_CHARACTER = 8; +// Taunts cool down time before the AI attemps another Taunt. +const int AI_TAUNT_COOLDOWN = 3; +// Animal Empathy cool down time before the AI attemps another check. +const int AI_EMPATHY_COOLDOWN = 3; +// Arcane Spell failure% or less than, for a caster to still try to cast a spell. +const int AI_ASF_WILL_USE = 15; +// Monsters chance to heal while in combat per round. +const int AI_MONSTER_HEAL_IN_COMBAT_CHANCE = 70; +// Monsters chance to heal when out of combat per heart beat. +const int AI_MONSTER_HEAL_OUT_COMBAT_CHANCE = 70; +// Allows Henchman to have a widget if using the henchman AI. +const int AI_HENCHMAN_WIDGET = TRUE; +// Change the Custom token number if it conflicts with your server. +const int AI_BASE_CUSTOM_TOKEN = 1000; +// Delay between creatures casting Buff spells. Must be minimum of 0.1 seconds. +const float AI_HENCHMAN_BUFF_DELAY = 0.2; + +//******************* These can be changed within the game ******************* +// Moral checks on or off. If wounded they will make Will saves, if they fail the flee. +const int AI_MORAL_CHECKS = FALSE; +// Allows monsters to prebuff before combat starts. +const int AI_PREBUFF = TRUE; +// Allows monsters cast summons spells when prebuffing. +const int AI_PRESUMMONS = TRUE; +// Allows monsters to use tactical AI scripts such as ambush, flanker, ranged. +const int AI_TACTICAL = TRUE; +// Enemies may summon familiars and Animal companions and will be randomized. +const int AI_SUMMON_COMPANIONS = FALSE; +// Allow the AI to move during combat base on the situation and action taking. +const int AI_ADVANCED_MOVEMENT = TRUE; +// Follow Item Level Restrictions for AI. +const int AI_ITEM_LEVEL_RESTRICTIONS = FALSE; +// Allow the AI to use Use Magic Device. +const int AI_USE_MAGIC_DEVICE = TRUE; +// Allow the AI to use healing kits. +const int AI_HEALING_KITS = TRUE; +// Associates are permanent and don't get removed when the master dies. +const int AI_COMPANIONS_PERMANENT = FALSE; +// Monster AI's chance (0 to 100) to attack the weakest target instead of the nearest. +// The higher the number the harder the encounter with monsters! +const int AI_TARGET_WEAKEST = 0; +// Variable that can change the distance creatures will come and attack after +// hearing a shout from an ally that sees or hears an enemy. +// Or when searching for an invisible, heard enemy. +// 10.0 Short, 30.0 Average, 40.0 Long, 60.0 Huge. +const float AI_SEARCH_DISTANCE = 30.0; +// Enemy corpses remain on the floor instead of dissappearing. +const int AI_CORPSE_REMAIN = FALSE; +// Monsters will wander around when not in combat. +const int AI_WANDER = FALSE; +// Variable distance monsters can wander away from their spawn point. +const float AI_WANDER_DISTANCE = 0.0; +// Variable that allows monsters to open doors when wandering around out of combat. +const int AI_OPEN_DOORS = FALSE; +// Monster's actual perception distance. +// 8 Short(10 sight/listen) 9 Medium(20 sight/listen) 10 Long(35 sight/20 listen) +// 11 Default(Based on appearance.2da Most creatures use 9, bosses use 10). +const int AI_MONSTER_PERCEPTION = 11; +// Should the AI auto adjust the XP scale to remove party size penalty? +const int AI_PARTY_SCALE = FALSE; + +//**************************** DM Based Constants **************************** +// The constant the server wants set to allow players to use specific widgets buttons. +// 0 Allows all buttons. See ASSOCIATE_WIDGET_BUTTONS below for values needed to be +// added to block those buttons. +// Example: BTN_CMD_GHOST_MODE = 0x00000800; To remove you would put 2048 below. +// Since Hex 800 is Decimal 2048. +const int AI_DM_WIDGET_ACCESS_BUTTONS = 0; +// The constant the server wants set to allow players to use specific AI buttons. +// 0 Allows all buttons. See ASSOCIATE_AI_BUTTONS below for values needed to be +// added to block those buttons. +// Example: BTN_AI_MAGIC_LEVEL = 0x00000040; To remove you would put 64 below. +// Since Hex 40 is Decimal 64. Adding BTN_AI_LOOT = 0x00001000; to that would be +// 64 + 4096 = 4160 to Block Magic Level and Auto Looting. +const int AI_DM_AI_ACCESS_BUTTONS = 0; +//************************** CONVERSATION CONSTANTS ************************** +// Player's can tell their associates to ignore enemy associates. +const int AI_IGNORE_ASSOCIATES_ON = TRUE; +// Associates with a Taunt skill higher than their level can be told to taunt. +const int AI_TAUNTING_ON = TRUE; +// Associates that cast spells can be told to use counterspell. +const int AI_COUNTERSPELLING_ON = TRUE; +// Associates with lore skill higher than the master can identify items. +const int AI_IDENTIFY_ON = TRUE; +// Associates can be called upon to scout ahead for monsters. +const int AI_SCOUT_AHEAD_ON = TRUE; +// A player can open a henchmen's inventory. +const int AI_OPEN_INVENTORY = TRUE; +// Allows players to have associates pickup loot. +const int AI_PICKUP_LOOT = TRUE; +// Allows players to remove a henchman. +const int AI_REMOVE_HENCHMAN_ON = FALSE; +//***************************** Health Constants ***************************** +// % of health for when a creature is considered wounded. +const int AI_HEALTH_WOUNDED = 50; +// % of health when creature is considered badly wounded. +const int AI_HEALTH_BLOODY = 25; +//***************************** MORAL CONSTANTS ****************************** +// Moral checks are only made once a creature is below AI_HEALTH_WOUNDED. +// The moral DC is AI_MORAL_DC - the number of Allies. Default: 5 +const int AI_WOUNDED_MORAL_DC = 5; +// Once a creature goes below AI_HEALTHY_BLOODY then it uses this moral DC. Default: 15 +const int AI_BLOODY_MORAL_DC = 15; +//******************************* WINDOW CONSTANTS ***************************** +const string AI_MAIN_NUI = "ai_main_nui"; +const string AI_COMMAND_NUI = "_command_nui"; +const string AI_NUI = "_ai_nui"; +const string AI_WIDGET_NUI = "_widget_nui"; +const string AI_LOOTFILTER_NUI = "_lootfilter_nui"; +const string AI_COPY_NUI = "_copy_nui"; +const string AI_PLUGIN_NUI = "ai_plugin_nui"; +const string AI_QUICK_WIDGET_NUI = "_quick_widget_nui"; +const string AI_SPELL_MEMORIZE_NUI = "_spell_memorize_nui"; +const string AI_SPELL_KNOWN_NUI = "_spell_known_nui"; +const string AI_SPELL_DESCRIPTION_NUI = "ai_spell_desc_nui"; +const string AI_EFFECT_ICON_NUI = "ai_effect_icon_nui"; +//******************************* CORE CONSTANTS ******************************* +// The following constants are core constants and changing any of these without +// understanding the whole system could cause unforseen results. +// CHANGE AT YOUR OWN RISK. +// Variable used to asave a monster object for changing. +const string AI_MONSTER_OBJECT = "AI_MONSTER_OBJECT"; +// Variable used to save a monsters json for changing. +const string AI_MONSTER_JSON = "AI_MONSTER_JSON"; +// Variable used to let PEPS know that a monster plugin changed the monster. +const string AI_MONSTER_CHANGED = "AI_MONSTER_CHANGED"; +// Variable used to save an associates class list to change known list json. +const string AI_CLASS_LIST_JSON = "AI_CLASS_LIST_JSON"; +// Startup variable to tell plugins that we have started. +const string AI_STARTING_UP = "AI_STARTING_UP"; +// Add plugin variable to tell plugins that we are adding them to PEPS. +const string AI_ADD_PLUGIN = "AI_ADD_PLUGIN"; +// Startup variable to tell plugins what json array to add their plugin to. +const string AI_JSON_PLUGINS = "AI_JSON_PLUGINS"; +// Plugin variable to have plugins return if they setup the plugin in the json for PEPS. +const string AI_PLUGIN_SET = "AI_PLUGIN_SET"; +// Monster modification variable to let PEPS know what mods are available. +const string AI_MONSTER_MOD_JSON = "AI_MONSTER_MOD_JSON"; +// The maximum number of henchman the code works with. +const int AI_MAX_HENCHMAN = 12; +// Delay between Henchman casting Healing spells. Must be minimum of 0.5 seconds. +const float AI_HENCHMAN_HEALING_DELAY = 6.0; +// A variable that can be set on creatures to stop mobile animations. +const string AI_NO_ANIMATION = "AI_NO_ANIMATION"; +// How many seconds in a combat round. +const int AI_COMBAT_ROUND_IN_SECONDS = 6; +// Used for actions that take x seconds but don't have an action constant. +const string AI_COMBAT_WAIT_IN_SECONDS = "AI_COMBAT_WAIT_IN_SECONDS"; +// Constants used to define the difficulty of the battle for associates. +// 20+ : Impossible - Cannot win. +// 17 to 19 : Overpowering - Use all of our powers. +// 15 to 16 : Very Difficult - Use all of our power (Highest level spells). +// 11 to 14 : Challenging - Use most of our power (Higher level powers). +// 8 to 10 : Moderate - Use half of our power (Mid level powers and less). +// 5 to 7 : Easy - Use our weaker powers (Lowest level powers). +// 2 to 4 : Effortless - Don't waste spells and powers on this. +// 1 or less: Pointless - We probably should ignore these dangers. +const int AI_COMBAT_IMPOSSIBLE = 21; +const int AI_COMBAT_OVERPOWERING = 17; +const int AI_COMBAT_VERY_DIFFICULT = 15; +const int AI_COMBAT_CHALLENGING = 11; +const int AI_COMBAT_MODERATE = 10; +const int AI_COMBAT_EASY = 7; +const int AI_COMBAT_EFFORTLESS = 4; +// Variables used to keep track of enemies in combat. +const string AI_ENEMY = "AI_ENEMY"; // The enemy objects. +const string AI_ENEMY_DISABLED = "AI_ENEMY_DISABLED"; // Int if they are disabled. +const string AI_ENEMY_PERCEIVED = "AI_ENEMY_PERCEIVED"; // TRUE if we have seen or heard them, FALSE if not. +const string AI_ENEMY_RANGE = "AI_ENEMY_RANGE"; // The range from OBJECT_SELF. +const string AI_ENEMY_COMBAT = "AI_ENEMY_COMBAT"; // Combat rating: (BAB + AC - 10) / 2 +const string AI_ENEMY_MELEE = "AI_ENEMY_MELEE"; // Enemies within 5 meters - Allies within 5 meters. +const string AI_ENEMY_HEALTH = "AI_ENEMY_HEALTH"; // % of hitpoints. +const string AI_ENEMY_NUMBERS = "AI_ENEMY_NUM"; // Number of enemies in combat. +const string AI_ENEMY_POWER = "AI_ENEMY_POWER"; // (Level * Health %) / 100 added for each enemy to this. +const string AI_ENEMY_NEAREST = "AI_ENEMY_NEAREST"; // Nearest enemy to OBJECT_SELF. +// Variables used to keep track of allies in combat. +const string AI_ALLY = "AI_ALLY"; // All friendly creatures +const string AI_ALLY_DISABLED = "AI_ALLY_DISABLED"; // Int if they are disabled. +const string AI_ALLY_PERCEIVED = "AI_ALLY_PERCEIVED"; // All allies are set to be seen and heard. +const string AI_ALLY_RANGE = "AI_ALLY_RANGE"; // The range from OBJECT_SELF. +const string AI_ALLY_COMBAT = "AI_ALLY_COMBAT"; // Combat rating: (BAB + AC - 10) / 2 +const string AI_ALLY_MELEE = "AI_ALLY_MELEE"; // Enemies within 5 meters - Allies within 5 meters. +const string AI_ALLY_HEALTH = "AI_ALLY_HEALTH"; // % of hitpoints. +const string AI_ALLY_NUMBERS = "AI_ALLY_NUM"; // Number of allies in combat. +const string AI_ALLY_POWER = "AI_ALLY_POWER"; // (Level * Health %) / 100 added for each enemy to this. +// Variable name used to define the ai scripts being used by creatures. +const string AI_DEFAULT_SCRIPT = "AI_DEFAULT_SCRIPT"; +const string AI_COMBAT_SCRIPT = "AI_COMBAT_SCRIPT"; +// Constants used in a creatures listening patterns. +const string AI_I_SEE_AN_ENEMY = "AI_I_SEE_AN_ENEMY"; +const string AI_I_HEARD_AN_ENEMY = "AI_I_HEARD_AN_ENEMY"; +const string AI_ATKED_BY_WEAPON = "AI_ATK_BY_WEAPON"; +const string AI_ATKED_BY_SPELL = "AI_ATK_BY_SPELL"; +const string AI_I_AM_WOUNDED = "AI_I_AM_WOUNDED"; +const string AI_I_AM_DEAD = "AI_I_AM_DEAD"; +const string AI_I_AM_DISEASED = "AI_I_AM_DISEASED"; +const string AI_I_AM_POISONED = "AI_I_AM_POISONED"; +const string AI_I_AM_WEAK = "AI_I_AM_WEAK"; +const int AI_ALLY_SEES_AN_ENEMY = 1; +const int AI_ALLY_HEARD_AN_ENEMY = 2; +const int AI_ALLY_ATKED_BY_WEAPON = 3; +const int AI_ALLY_ATKED_BY_SPELL = 4; +const int AI_ALLY_IS_WOUNDED = 5; +const int AI_ALLY_IS_DEAD = 6; +const int AI_ALLY_IS_DISEASED = 7; +const int AI_ALLY_IS_POISONED = 8; +const int AI_ALLY_IS_WEAK = 9; +const string AI_MY_TARGET = "AI_MY_TARGET"; +// Constant used by monsters to reduce checks while searching for unseen targets. +const string AI_AM_I_SEARCHING = "AI_AM_I_SEARCHING"; +// Used to keep track of oCreature attempting to hide. +const string AI_TRIED_TO_HIDE = "AI_TRIED_TO_HIDE"; +// Constant used by creatures to keep track of invisible creatures. +const string AI_IS_INVISIBLE = "AI_IS_INVISIBLE"; +// Constants used in combat to keep track of a creatures last action. +// 0+ is the last spell cast from the line number in Spells.2da. +const string sLastActionVarname = "AI_LAST_ACTION"; +const int AI_LAST_ACTION_CAST_SPELL = -1; +const int AI_LAST_ACTION_NONE = -2; +const int AI_LAST_ACTION_MELEE_ATK = -3; +const int AI_LAST_ACTION_RANGED_ATK = -4; +const int AI_LAST_ACTION_USED_FEAT = -5; +const int AI_LAST_ACTION_USED_ITEM = -6; +const int AI_LAST_ACTION_USED_SKILL = -7; +const int AI_LAST_ACTION_MOVE = -8; +// Variable name used to keep track of Action Modes. +const string AI_CURRENT_ACTION_MODE = "AI_CURRENT_ACTION_MODE"; +// Variable name used to keep track of object usage by the AI. +const string AI_OBJECT_IN_USE = "AI_OBJECT_IN_USE"; +// Variable name used to keep a creatures attacked targets. +const string AI_ATTACKED_PHYSICAL = "AI_ATTACKED_PHYSICAL"; +const string AI_ATTACKED_SPELL = "AI_ATTACKED_SPELL"; +// Variable name used to keep track of a creatures normal polymorph form. +const string AI_NORMAL_FORM = "AI_NORMAL_FORM"; +// Variable name used to keep track if a creature has been buffed yet. +const string AI_CASTER_BUFFS_SET = "AI_CASTER_BUFFS_SET"; +// Variable name used to keep track of rounds in combat for a custom ai script. +const string AI_ROUND = "AI_ROUND"; +// Combat Ranges +const float AI_RANGE_MELEE = 5.0f; // Anyone within this is considered to be in melee. +const float AI_RANGE_CLOSE = 8.0f; // For anything requiring to be within 30'. +const float AI_RANGE_LONG = 15.0f; // Mainly used for distance ranged attacks. +const float AI_RANGE_PERCEPTION = 35.0f; // This is the distance for perception in battle. +const float AI_RANGE_BATTLEFIELD = 40.0f; // This is the size of the battlefield area. +// Spell ranges. +const float AI_SHORT_DISTANCE = 8.0f; +const float AI_MEDIUM_DISTANCE = 20.0f; +const float AI_LONG_DISTANCE = 40.0f; +// When computer checks if a creature should cast a specific spell at a target. +// Computer makes a spell check vs the targets saving throw. +// Spell check roll for the caster is +// [Innate spell Level + Random (AI_SPELL_CHECK_DIE) + AI_SPELL_CHECK_BONUS] +// If the spell gives a save for half (i.e. FireBall) and the target does not have +// Evasion then they get an additional bonus of AI_SPELL_CHECK_NO_EVASION_BONUS. +const int AI_SPELL_CHECK_DIE = 6; +const int AI_SPELL_CHECK_BONUS = 3; +const int AI_SPELL_CHECK_NO_EVASION_BONUS = 10; +// When the computer checks if a creature should use defensive casting it looks +// at the spell level + AI_DEFENSIVE_CASTING_DC vs casters concentration +// and feat bonuses (i.e. COMBAT_CASTING) + Random (AI_DEFENSIVE_CASTING_ROLL). +const int AI_DEFENSIVE_CASTING_DC = 19; // 19 will allow them to use it at 50% effectiveness. +const int AI_DEFENSIVE_CASTING_DIE = 10; +// When the computer checks to see if it should cast in melee combat it looks +// at CASTING_IN_MELEE_DC + SpellLevel + (Num of creatures in melee * GetHitDice (NearestEnemy)); +// vs the casters concentration + Random (AI_CASTING_IN_MELEE_ROLL). +const int AI_CASTING_IN_MELEE_DC = 10; +const int AI_CASTING_IN_MELEE_ROLL = 10; +// For getting a specific class the following constants were added to flesh out +// the CLASS_TYPE_* +const int AI_CLASS_TYPE_CASTER = -1; +const int AI_CLASS_TYPE_DIVINE = -2; +const int AI_CLASS_TYPE_ARCANE = -3; +const int AI_CLASS_TYPE_WARRIOR = -4; +// For getting a specific race the following constants were added to flesh out +// the RACIAL_TYPE_* +const int AI_RACIAL_TYPE_ANIMAL_BEAST = -1; +const int AI_RACIAL_TYPE_HUMANOID = -2; +// Bitwise constants for negative conditions we might want to try to cure +const int AI_CONDITION_POISON = 0x00000001; +const int AI_CONDITION_DISEASE = 0x00000002; +const int AI_CONDITION_BLINDDEAF = 0x00000004; +const int AI_CONDITION_ATK_DECREASE = 0x00000008; +const int AI_CONDITION_DMG_DECREASE = 0x00000010; +const int AI_CONDITION_DMG_I_DECREASE = 0x00000020; +const int AI_CONDITION_SKILL_DECREASE = 0x00000040; +const int AI_CONDITION_SAVE_DECREASE = 0x00000080; +const int AI_CONDITION_SR_DECREASE = 0x00000100; +const int AI_CONDITION_AC_DECREASE = 0x00000200; +const int AI_CONDITION_SLOW = 0x00000400; +const int AI_CONDITION_ABILITY_DRAIN = 0x00000800; +const int AI_CONDITION_LEVEL_DRAIN = 0x00001000; +const int AI_CONDITION_CHARMED = 0x00002000; +const int AI_CONDITION_DAZED = 0x00004000; +const int AI_CONDITION_STUNNED = 0x00008000; +const int AI_CONDITION_FRIGHTENED = 0x00010000; +const int AI_CONDITION_CONFUSED = 0x00020000; +const int AI_CONDITION_CURSE = 0x00040000; +const int AI_CONDITION_PARALYZE = 0x00080000; +const int AI_CONDITION_DOMINATED = 0x00100000; +// Database constants for Associate modes. +const string AI_MODE_DB_TABLE = "AI_MODE_DB_TABLE"; +// Bitwise constants for Associate modes that are used with Get/SetAssociateMode(). +const string sAIModeVarname = "ASSOCIATE_MODES"; +//const int AI_MODE_DISTANCE_CLOSE = 0x00000001; // Stays within AI_DISTANCE_CLOSE of master. +//const int AI_MODE_DISTANCE_MEDIUM = 0x00000002; // Stays within AI_DISTANCE_MEDIUM of master. +const int AI_MODE_ACTION_GHOST = 0x00000004; // Defines if the player is using Ghost mode when using associate actions. +const int AI_MODE_SELF_HEALING_OFF = 0x00000008; // Creature will not use healing items or spells on self. +const int AI_MODE_PARTY_HEALING_OFF = 0x00000010; // Creature will not use healing items or spells on party. +const int AI_MODE_GHOST = 0x00000020; // Creature can move through other creatures. +const int AI_MODE_OPEN_DOORS = 0x00000040; // Creature will attempted to open all doors. +const int AI_MODE_EQUIP_WEAPON_OFF = 0x00000080; // The AI will not equip weapons. +const int AI_MODE_BASH_LOCKS = 0x00000100; // Will bash locks if cannot open door/placeable. +const int AI_MODE_AGGRESSIVE_SEARCH = 0x00000200; // Sets associate to continuous search mode. +const int AI_MODE_AGGRESSIVE_STEALTH = 0x00000400; // Sets associate to continuous stealth mode. +const int AI_MODE_PICK_LOCKS = 0x00000800; // Will pick locks if possible. +const int AI_MODE_DISARM_TRAPS = 0x00001000; // Will disarm traps. +const int AI_MODE_SCOUT_AHEAD = 0x00002000; // Will move ahead of master and scout. +const int AI_MODE_DEFEND_MASTER = 0x00004000; // Will attack enemies attacking our master. +const int AI_MODE_STAND_GROUND = 0x00008000; // Will stay in one place until new command. +const int AI_MODE_STOP_RANGED = 0x00010000; // Will not use ranged weapons. +const int AI_MODE_FOLLOW = 0x00020000; // Keeps associate following master ignoring combat. +const int AI_MODE_PICKUP_ITEMS = 0x00040000; // Will pickup up all items for master. +const int AI_MODE_COMMANDED = 0x00080000; // In Command mode then don't follow, search, etc. +const int AI_MODE_IGNORE_TRAPS = 0x00100000; // Creature will ignore traps on the floor. +const int AI_MODE_NO_STEALTH = 0x00200000; // Will not cast invisibilty or use stealth. +const int AI_MODE_DO_NOT_SPEAK = 0x00400000; // Tells the henchmen to be silent and not talk. +const int AI_MODE_CHECK_ATTACK = 0x00800000; // Will only engage in combats they think they can win. +const int AI_MODE_IGNORE_ASSOCIATES = 0x01000000; // Will ignore associates in combat. +//const int AI_MODE_ = 0x02000000; // Not used. +//const int AI_MODE_ = 0x04000000; // Not used. +//const int AI_MODE_ = 0x08000000; // Not used. +//const int AI_MODE_ = 0x10000000; // Not used. +//const int AI_MODE_ = 0x20000000; // Not used. +//const int AI_MODE_ = 0x40000000; // Not used. +//const int AI_MODE_ = 0x80000000; // Not used. +// Bitwise constants for Associate magic modes that are used with Get/SetAssociateMagicMode(). +const string sMagicModeVarname = "ASSOCIATE_MAGIC_MODES"; +const int AI_MAGIC_BUFF_MASTER = 0x00000001; // Buffs master before other allies. +const int AI_MAGIC_NO_MAGIC = 0x00000002; // Will not use any magic (Spells, abilities). +const int AI_MAGIC_DEFENSIVE_CASTING = 0x00000004; // Will only cast defensive spells. +const int AI_MAGIC_OFFENSIVE_CASTING = 0x00000008; // Will only cast offensive spells. +const int AI_MAGIC_STOP_DISPEL = 0x00000010; // Will not cast dispel type spells. +const int AI_MAGIC_BUFF_AFTER_REST = 0x00000020; // Will buff the party after resting. +const int AI_MAGIC_NO_MAGIC_ITEMS = 0x00000040; // Will not use magic items in combat. +const int AI_MAGIC_CURE_SPELLS_OFF = 0x00000080; // Will not cast cure spells. +const int AI_MAGIC_EFFECT_ICON_REPORT = 0x00000100; // Sets each player to report Effect Icons to chat. +//const int = 0x00000200; // Not used. +//const int = 0x00000400; // Not used. +const int AI_MAGIC_NO_SPONTANEOUS_CURE = 0x00000800; // Caster will stop using spontaneous cure spells. +//const int AI_MAGIC_ = 0x00001000; // Not used. +//const int AI_MAGIC_ = 0x00002000; // Not used. +//const int AI_MAGIC_ = 0x00004000; // Not used. +//const int AI_MAGIC_ = 0x00008000; // Not used. +//const int AI_MAGIC_ = 0x00010000; // Not used. +//const int AI_MAGIC_ = 0x00020000; // Not used. +//const int AI_MAGIC_ = 0x00040000; // Not used. +//const int AI_MAGIC_ = 0x00080000; // Not used. +//const int AI_MAGIC_ = 0x00100000; // Not used. +//const int AI_MAGIC_ = 0x00200000; // Not used. +//const int AI_MAGIC_ = 0x00400000; // Not used. +//const int AI_MAGIC_ = 0x00800000; // Not used. +//const int AI_MAGIC_ = 0x01000000; // Not used. +//const int AI_MAGIC_ = 0x02000000; // Not used. +//const int AI_MAGIC_ = 0x04000000; // Not used. +//const int AI_MAGIC_ = 0x08000000; // Not used. +//const int AI_MAGIC_ = 0x10000000; // Not used. +//const int AI_MAGIC_ = 0x20000000; // Not used. +//const int AI_MAGIC_ = 0x40000000; // Not used. +//const int AI_MAGIC_ = 0x80000000; // Not used. +// Use by NUI windows to stop saving move states while loading. +const string AI_NO_NUI_SAVE = "AI_NO_NUI_SAVE"; +// Bitwise menu constants for Widget buttons that are used with Get/SetAssociateWidgetButtons(). +const string sWidgetButtonsVarname = "ASSOCIATE_WIDGET_BUTTONS"; +const int BTN_WIDGET_OFF = 0x00000001; // Removes the widget from the screen, For PC it removes all associates. +const int BTN_WIDGET_LOCK = 0x00000002; // Locks the widget to the current coordinates. +const int BTN_CMD_GUARD = 0x00000004; // Command associates to Guard Me. PC widget only. +const int BTN_CMD_FOLLOW = 0x00000008; // Command associates to Follow. PC widget only. +const int BTN_CMD_HOLD = 0x00000010; // Command associates to Stand Ground. PC widget only. +const int BTN_CMD_ATTACK = 0x00000020; // Command associates to Attack Nearest. PC widget only. +const int BTN_BUFF_REST = 0x00000040; // Buffs with long duration spells after resting. Associate widget only. +const int BTN_BUFF_SHORT = 0x00000080; // Buffs with short duration spells. +const int BTN_BUFF_LONG = 0x00000100; // Buffs with long duration spells. +const int BTN_BUFF_ALL = 0x00000200; // Buffs with all spells. +const int BTN_CMD_ACTION = 0x00000400; // Command associate to do an action. +const int BTN_CMD_GHOST_MODE = 0x00000800; // Toggle's associates ghost mode. +const int BTN_CMD_AI_SCRIPT = 0x00001000; // Toggle's special tactics ai scripts. +const int BTN_CMD_PLACE_TRAP = 0x00002000; // A trapper may place traps. +const int BTN_CMD_CAMERA = 0x00004000; // Places camera view on associate. +const int BTN_CMD_INVENTORY = 0x00008000; // Opens inventory of associate. +const int BTN_CMD_FAMILIAR = 0x00010000; // Summons familiar. +const int BTN_CMD_COMPANION = 0x00020000; // Summons Companion. +const int BTN_CMD_SEARCH = 0x00040000; // Command all associates to use search mode. PC widget only. +const int BTN_CMD_STEALTH = 0x00080000; // Command all associates to use stealth mode. PC widget only. +const int BTN_CMD_SCOUT = 0x00100000; // Command associate to scout ahead of the part. +const int BTN_CMD_SPELL_WIDGET = 0x00200000; // Allows adding or removing spells from Spell Widget. +const int BTN_CMD_JUMP_TO = 0x00400000; // Player can make associates jump to them. +const int BTN_WIDGET_VERTICAL = 0x80000000; // Widget will be displayed vertical. +// Bitwise menu constants for Associate AI buttons that are used with Get/SetAssociateAIButtons(). +const string sAIButtonsVarname = "ASSOCIATE_AI_BUTTONS"; +const int BTN_AI_FOR_PC = 0x00000001; // PC use AI. PC widget only. +const int BTN_AI_USE_RANGED = 0x00000002; // AI uses ranged attacks. +const int BTN_AI_USE_SEARCH = 0x00000004; // AI uses Search. +const int BTN_AI_USE_STEALTH = 0x00000008; // AI uses Stealth. +const int BTN_AI_REMOVE_TRAPS = 0x00000010; // AI seeks out and removes traps. +const int BTN_AI_PICK_LOCKS = 0x00000020; // AI will attempt to pick locks. +const int BTN_AI_MAGIC_LEVEL = 0x00000040; // Increase chance to use magic in battle. +const int BTN_AI_NO_SPONTANEOUS = 0x00000080; // Stops the use of spontaneous spells. +const int BTN_AI_NO_MAGIC_USE = 0x00000100; // Will not use magic in battle. +const int BTN_AI_NO_MAGIC_ITEM_USE = 0x00000200; // Will not use magic items in battle. +const int BTN_AI_DEF_MAGIC_USE = 0x00000400; // Will use Defensive spells only in battle. +const int BTN_AI_OFF_MAGIC_USE = 0x00000800; // Will use Offensive spells only in battle. +const int BTN_AI_LOOT = 0x00001000; // Auto picking up loot on/off. +const int BTN_AI_FOLLOW_TARGET = 0x00002000; // Selects a target to follow. +const int BTN_AI_HEAL_OUT = 0x00004000; // Increase minimum hp required before ai heals out of combat. +const int BTN_AI_PERC_RANGE = 0x00008000; // Adjust the perception range of the henchman. +const int BTN_AI_HEAL_IN = 0x00010000; // Increase minimum hp required before ai heals in combat. +const int BTN_AI_OPEN_DOORS = 0x00020000; // AI will open all closed doors. +const int BTN_AI_STOP_SELF_HEALING = 0x00040000; // Stops AI from using any healing on self. +const int BTN_AI_STOP_PARTY_HEALING = 0x00080000; // Stops AI from using any healing on party. +const int BTN_AI_IGNORE_ASSOCIATES = 0x00100000; // AI will deprioritize enemy associates. +const int BTN_AI_STOP_CURE_SPELLS = 0x00200000; // AI uses cure spells. +const int BTN_AI_STOP_WEAPON_EQUIP = 0x00400000; // AI can equip different weapons. +const int BTN_AI_IGNORE_TRAPS = 0x00800000; // AI will ignore traps on the floor. +//const int BTN_AI = 0x01000000; // Not used. +//const int BTN_AI = 0x02000000; // Not used. +const int BTN_AI_BASH_LOCKS = 0x04000000; // AI will attempt to bash any locks they can't get past. +const int BTN_AI_REDUCE_SPEECH = 0x08000000; // Reduce the associates speaking. +// Bitwise menu constants for DM access for players Widget buttons uses BTN_CMD and BTN_BUFF bitwise see above. +const string sDMWidgetAccessVarname = "AI_RULES_WIDGET_BUTTONS_ACCESS"; +// Bitwise menu constants for DM access for players AI buttons uses BTN_AI bitwise see above. +const string sDMAIAccessVarname = "AI_RULES_AI_BUTTONS_ACCESS"; +// Variable name for DM widget buttons. +const string sDMWidgetButtonVarname = "DM_WIDGET_BUTTONS"; +// DM Widget buttons states. +const int BTN_DM_WIDGET_OFF = 0x00000001; // Removes the widget from the screen, For PC it removes all associates. +const int BTN_DM_WIDGET_LOCK = 0x00000002; // Locks the widget to the current coordinates. +const int BTN_DM_CMD_GROUP1 = 0x00000004; // Does all the group 1 commands. +const int BTN_DM_CMD_GROUP2 = 0x00000008; // Does all the group 2 commands. +const int BTN_DM_CMD_GROUP3 = 0x00000010; // Does all the group 3 commands. +const int BTN_DM_CMD_GROUP4 = 0x00000020; // Does all the group 4 commands. +const int BTN_DM_CMD_GROUP5 = 0x00000040; // Does all the group 5 commands. +const int BTN_DM_CMD_GROUP6 = 0x00000080; // Does all the group 6 commands. +const int BTN_DM_CMD_CAMERA = 0x00000100; // Selects new object to hold the camera view. +const int BTN_DM_CMD_INVENTORY = 0x00000200; // Selects a creature to open the inventory of. +const int BTN_DM_CMD_MEMORIZE = 0x00000400; // Allows associate to change memorized spells. +// Bitwise constants for Associate loot options that are used with Get/SetAssociateLootMode(). +const string sLootFilterVarname = "ASSOCIATE_LOOT_MODES"; +const int AI_LOOT_PLOT = 0x00000001; +const int AI_LOOT_WEAPONS = 0x00000002; +const int AI_LOOT_ARMOR = 0x00000004; +const int AI_LOOT_SHIELDS = 0x00000008; +const int AI_LOOT_HEADGEAR = 0x00000010; +const int AI_LOOT_BELTS = 0x00000020; +const int AI_LOOT_BOOTS = 0x00000040; +const int AI_LOOT_CLOAKS = 0x00000080; +const int AI_LOOT_GLOVES = 0x00000100; +const int AI_LOOT_JEWELRY = 0x00000200; +const int AI_LOOT_POTIONS = 0x00000400; +const int AI_LOOT_SCROLLS = 0x00000800; +const int AI_LOOT_WANDS_RODS_STAVES = 0x00001000; +const int AI_LOOT_GEMS = 0x00002000; +const int AI_LOOT_MISC = 0x00004000; +const int AI_LOOT_ARROWS = 0x00008000; +const int AI_LOOT_BOLTS = 0x00010000; +const int AI_LOOT_BULLETS = 0x00020000; +const int AI_LOOT_GIVE_TO_PC = 0x80000000; +// Default value for all loot filters to be on. +const int AI_LOOT_ALL_ON = 262143; +// Variable to keep track of who is in ghost mode. +const string sGhostModeVarname = "AI_GHOST_MODE_ON"; +// Variables for gold piece value to pickup items. +const string AI_MIN_GOLD_ = "AI_MIN_GOLD_"; +// Variable used to limit the spamming of NUI buttons. +const string AI_DELAY_NUI_USE = "AI_DELAY_NUI_USE"; +// Variable for maximum weight to pickup from looting. +const string AI_MAX_LOOT_WEIGHT = "AI_MAX_LOOT_WEIGHT"; +// Variable to change the size of the widget buttons. +const string AI_WIDGET_BUTTON_SIZE = "AI_WIDGET_BUTTON_SIZE"; +// Variable to change the difficulty so a player can adjust spell usage. +const string AI_DIFFICULTY_ADJUSTMENT = "AI_DIFFICULTY_ADJUSTMENT"; +// Variable to change the Healing % limit for out of combat. +const string AI_HEAL_OUT_OF_COMBAT_LIMIT = "AI_HEAL_OUT_OF_COMBAT_LIMIT"; +// Variable to change the Healing % limit for in combat. +const string AI_HEAL_IN_COMBAT_LIMIT = "AI_HEAL_IN_COMBAT_LIMIT"; +// Variable to change the looting range. +const string AI_LOOT_CHECK_RANGE = "AI_LOOT_CHECK_RANGE"; +// Variable to change the lock checking range. +const string AI_LOCK_CHECK_RANGE = "AI_LOCK_CHECK_RANGE"; +// Variable to change the trap checking range. +const string AI_TRAP_CHECK_RANGE = "AI_TRAP_CHECK_RANGE"; +// Variable to change the range an associate follows the pc. +const string AI_FOLLOW_RANGE = "AI_FOLLOW_RANGE"; +// Variable that holds the target for an associate to follow. +const string AI_FOLLOW_TARGET = "AI_FOLLOW_TARGET"; +// Variable that holds the perception range of associates i.e. 8, 9, 10, 11. +const string AI_ASSOCIATE_PERCEPTION = "AI_PERCEPTION_RANGE"; +// Variable that holds the perception distance of associates i.e. 30.0 meters. +const string AI_ASSOC_PERCEPTION_DISTANCE = "AI_ASSOC_PERCEPTION_DISTANCE"; +// Variable that holds the open doors range of the henchman. +const string AI_OPEN_DOORS_RANGE = "AI_OPEN_DOORS_RANGE"; +// Variable that holds the Spell widgets json data. +const string AI_SPELLS_WIDGET = "AI_SPELLS_WIDGET"; +// The number of Buff Groups +const int AI_BUFF_GROUPS = -17; +// Variable name used to keep track if we have set our talents. +const string AI_TALENTS_SET = "AI_TALENTS_SET"; +// New talent categories +const string AI_TALENT_ENHANCEMENT = "E"; +const string AI_TALENT_PROTECTION = "P"; +const string AI_TALENT_SUMMON = "S"; +const string AI_TALENT_HEALING = "H"; +const string AI_TALENT_CURE = "C"; +const string AI_TALENT_INDISCRIMINANT_AOE = "I"; +const string AI_TALENT_DISCRIMINANT_AOE = "D"; +const string AI_TALENT_RANGED = "R"; +const string AI_TALENT_TOUCH = "T"; +// Talent types. +const int AI_TALENT_TYPE_SPELL = 1; +const int AI_TALENT_TYPE_SP_ABILITY = 2; +const int AI_TALENT_TYPE_FEAT = 3; +const int AI_TALENT_TYPE_ITEM = 4; +// Variable name used to have associates fight the pc's selected target. +const string AI_PC_LOCKED_TARGET = "AI_PC_LOCKED_TARGET"; +// Variable name of json talent immunity. +const string AI_TALENT_IMMUNITY = "AI_TALENT_IMMUNITY"; +// Variables keeps track of the maximum level for the talent category. +const string AI_MAX_TALENT = "AI_MAX_TALENT_"; +// Backward compatability constants. +const int X2_EVENT_CONCENTRATION_BROKEN = 12400; +// Variable set on the module if the module is using PRC. +const string AI_USING_PRC = "AI_USING_PRC"; +// Variable that sets if the rules have been added to the module. +const string AI_RULES_SET = "AI_RULES_SET"; +// Variable that tells us that oCreature has run our OnSpawn event. +const string AI_ONSPAWN_EVENT = "AI_ONSPAWN_EVENT"; +// Variable used to define a creatures unique Tag for widgets. +const string AI_TAG = "AI_TAG"; +// Variable that saves any module target event script so we can pass it along. +const string AI_MODULE_TARGET_EVENT = "AI_MODULE_TARGET_EVENT"; +// Variable for plugins to inject Targeting mode code into PEPS. +const string AI_PLUGIN_TARGET_SCRIPT = "AI_PLUGIN_TARGET_SCRIPT"; +// Variable for PEPS to inject effect icons NUI information. +const string AI_MODULE_GUI_EVENT = "AI_MODULE_GUI_EVENT"; +// Variable used on the player to define the targeting action in the OnPlayerTarget event script. +const string AI_TARGET_MODE = "AI_TARGET_MODE"; +// Variable used on the player to define which associate triggered the OnPlayer Target. +const string AI_TARGET_ASSOCIATE = "AI_TARGET_ASSOCIATE"; +// Bitwise constants for immune damage item properties that is used with Get/SetItemProperty(). +const string sIPImmuneVarname = "AI_IP_IMMUNE"; +// Bitwise constants for resisted damage item properties that is used with Get/SetItemProperty(). +const string sIPResistVarname = "AI_IP_RESIST"; +// Variable name for the Int constant for reduced damage item property set to the bonus of the weapon required. +const string sIPReducedVarname = "AI_IP_REDUCED"; +// Variable name for the Int (Bool) constant for the haste item property. +const string sIPHasHasteVarname = "AI_IP_HAS_HASTE"; +// Variable name used to hold the party xp base needed to adjust party xp. +const string AI_BASE_PARTY_SCALE_XP = "AI_BASE_PARTY_SCALE_XP"; +//***************************** AI RULES CONSTANTS ***************************** +// Variable name set to a creatures full name to set debugging on. +const string AI_RULE_DEBUG_CREATURE = "AI_RULE_DEBUG_CREATURE"; +// Moral checks on or off. +const string AI_RULE_MORAL_CHECKS = "AI_RULE_MORAL_CHECKS"; +// Allows monsters to prebuff before combat starts. +const string AI_RULE_BUFF_MONSTERS = "AI_RULE_BUFF_MONSTERS"; +// Allows monsters to use the ambush AI scripts. +const string AI_RULE_AMBUSH = "AI_RULE_AMBUSH"; +// Enemies may summon familiars and Animal companions and will be randomized. +const string AI_RULE_SUMMON_COMPANIONS = "AI_RULE_SUMMON_COMPANIONS"; +// Allows monsters cast summons spells when prebuffing. +const string AI_RULE_PRESUMMON = "AI_RULE_PRESUMMON"; +// Allow the AI move during combat base on the situation and action taking. +const string AI_RULE_ADVANCED_MOVEMENT = "AI_RULE_ADVANCED_MOVEMENT"; +// Follow Item Level Restrictions for monsters/associates. +// Usually off in Single player and on in Multi player. +const string AI_RULE_ILR = "AI_RULE_ILR"; +// Allow the AI to use Use Magic Device. +const string AI_RULE_ALLOW_UMD = "AI_RULE_ALLOW_UMD"; +// Allow the AI to use healing kits. +const string AI_RULE_HEALERSKITS = "AI_RULE_HEALERSKITS"; +// Summoned associates are permanent and don't disappear when the caster dies. +const string AI_RULE_PERM_ASSOC = "AI_RULE_PERM_ASSOC"; +// Monster AI's chance to attack the weakest target instead of the nearest. +const string AI_RULE_AI_DIFFICULTY = "AI_RULE_AI_DIFFICULTY"; +// Variable that can change the distance creatures will come and attack after +// hearing a shout from an ally that sees or hears an enemy. +// Or when searching for an invisible, heard enemy. +// 10.0 Short, 30.0 Average, 40.0 Long, 60.0 Huge. +const string AI_RULE_PERCEPTION_DISTANCE = "AI_RULE_PERCEPTION_DISTANCE"; +// Enemy corpses remain on the floor instead of dissappearing. +const string AI_RULE_CORPSES_STAY = "AI_RULE_CORPSES_STAY"; +// Monsters will wander around when not in combat. +const string AI_RULE_WANDER = "AI_RULE_WANDER"; +// Increase the number of encounter creatures. +const string AI_INCREASE_ENC_MONSTERS = "AI_INCREASE_ENC_MONSTERS"; +// Increase all monsters hitpoints by this percentage. +const string AI_INCREASE_MONSTERS_HP = "AI_INCREASE_MONSTERS_HP"; +// Variable that can change the distance monsters can hear and see. +const string AI_RULE_MON_PERC_DISTANCE = "AI_RULE_MON_PERC_DISTANCE"; +// Variable name set to hold the maximum number of henchman the player wants. +const string AI_RULE_MAX_HENCHMAN = "AI_RULE_MAX_HENCHMAN"; +// Variable name set to hold the distance monsters can wander away. +const string AI_RULE_WANDER_DISTANCE = "AI_RULE_WANDER_DISTANCE"; +// Variable name set to allow wandering monsters to open doors. +const string AI_RULE_OPEN_DOORS = "AI_RULE_OPEN_DOORS"; +// Variable name set to hold the modules default xp scale for use later. +const string AI_RULE_DEFAULT_XP_SCALE = "AI_RULE_DEFAULT_XP_SCALE"; +// Variable name set to allow the game to regulate experience based on party size. +const string AI_RULE_PARTY_SCALE = "AI_RULE_PARTY_SCALE"; +// Variable name set to restrict the AI's use of Darkness. +const string AI_RULE_RESTRICTED_SPELLS = "AI_RULE_RESTRICTED_SPELLS"; +/*/ Special behavior constants from x0_i0_behavior +const int NW_FLAG_BEHAVIOR_SPECIAL = 0x00000001; +//Will always attack regardless of faction +const int NW_FLAG_BEHAVIOR_CARNIVORE = 0x00000002; +//Will only attack if approached +const int NW_FLAG_BEHAVIOR_OMNIVORE = 0x00000004; +//Will never attack. Will alway flee. +const int NW_FLAG_BEHAVIOR_HERBIVORE = 0x00000008; +// This is the name of the local variable that holds the spawn-in conditions +const string sSpawnCondVarname = "NW_GENERIC_MASTER"; +// The available spawn-in conditions from x0_i0_spawncond +const int NW_FLAG_ESCAPE_RETURN = 0x00000020; //Failed +const int NW_FLAG_ESCAPE_LEAVE = 0x00000040; +const int NW_FLAG_TELEPORT_RETURN = 0x00000080; //Failed +const int NW_FLAG_TELEPORT_LEAVE = 0x00000100; +const int NW_FLAG_END_COMBAT_ROUND_EVENT = 0x00004000; +const int NW_FLAG_ON_DIALOGUE_EVENT = 0x00008000; +const int NW_FLAG_AMBIENT_ANIMATIONS = 0x00080000; +const int NW_FLAG_HEARTBEAT_EVENT = 0x00100000; +const int NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS = 0x00200000; +const int NW_FLAG_DAY_NIGHT_POSTING = 0x00400000; +const int NW_FLAG_AMBIENT_ANIMATIONS_AVIAN = 0x00800000; +const string sWalkwayVarname = "NW_WALK_CONDITION"; +// If set, the creature's waypoints have been initialized. +const int NW_WALK_FLAG_INITIALIZED = 0x00000001; +// If set, the creature will walk its waypoints constantly, +// moving on in each OnHeartbeat event. Otherwise, +// it will walk to the next only when triggered by an +// OnPerception event. +const int NW_WALK_FLAG_CONSTANT = 0x00000002; +// Set when the creature is walking day waypoints. +const int NW_WALK_FLAG_IS_DAY = 0x00000004; +// Set when the creature is walking back +const int NW_WALK_FLAG_BACKWARDS = 0x00000008; diff --git a/src/module/nss/0i_gui_events.nss b/src/module/nss/0i_gui_events.nss new file mode 100644 index 0000000..4628cf3 --- /dev/null +++ b/src/module/nss/0i_gui_events.nss @@ -0,0 +1,1032 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_gui_events +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// + Include scripts for all gui events. See also 0e_gui_events + + GUI Events: + GUIEVENT_EFFECTICON_CLICK: For displaying icon information. + + This was built by DAZ all credit to him. + I just changed it from PostString to a NUI menu. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_constants" +#include "0i_nui" +void ai_SetupModuleGUIEvents(object oCreature) +{ + object oModule = GetModule(); + string sModuleGUIEvents = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_GUIEVENT); + if(sModuleGUIEvents != "" || sModuleGUIEvents != "0e_gui_events") + { + SetLocalString(oModule, AI_MODULE_GUI_EVENT, sModuleGUIEvents); + } + SetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_GUIEVENT, "0e_gui_events"); +} +int EffectIconToEffectType(int nEffectIcon) +{ + switch (nEffectIcon) + { + case EFFECT_ICON_INVALID: return EFFECT_TYPE_INVALIDEFFECT; + + // *** No Extra Stats + case EFFECT_ICON_BLIND: return EFFECT_TYPE_BLINDNESS; + case EFFECT_ICON_CHARMED: return EFFECT_TYPE_CHARMED; + case EFFECT_ICON_CONFUSED: return EFFECT_TYPE_CONFUSED; + case EFFECT_ICON_FRIGHTENED: return EFFECT_TYPE_FRIGHTENED; + case EFFECT_ICON_DOMINATED: return EFFECT_TYPE_DOMINATED; + case EFFECT_ICON_PARALYZE: return EFFECT_TYPE_PARALYZE; + case EFFECT_ICON_DAZED: return EFFECT_TYPE_DAZED; + case EFFECT_ICON_STUNNED: return EFFECT_TYPE_STUNNED; + case EFFECT_ICON_SLEEP: return EFFECT_TYPE_SLEEP; + case EFFECT_ICON_SILENCE: return EFFECT_TYPE_SILENCE; + case EFFECT_ICON_TURNED: return EFFECT_TYPE_TURNED; + case EFFECT_ICON_HASTE: return EFFECT_TYPE_HASTE; + case EFFECT_ICON_SLOW: return EFFECT_TYPE_SLOW; + case EFFECT_ICON_ENTANGLE: return EFFECT_TYPE_ENTANGLE; + case EFFECT_ICON_DEAF: return EFFECT_TYPE_DEAF; + case EFFECT_ICON_DARKNESS: return EFFECT_TYPE_DARKNESS; + case EFFECT_ICON_POLYMORPH: return EFFECT_TYPE_POLYMORPH; + case EFFECT_ICON_SANCTUARY: return EFFECT_TYPE_SANCTUARY; + case EFFECT_ICON_TRUESEEING: return EFFECT_TYPE_TRUESEEING; + case EFFECT_ICON_SEEINVISIBILITY: return EFFECT_TYPE_SEEINVISIBLE; + case EFFECT_ICON_ETHEREALNESS: return EFFECT_TYPE_ETHEREAL; + case EFFECT_ICON_PETRIFIED: return EFFECT_TYPE_PETRIFY; + // *** + + case EFFECT_ICON_DAMAGE_RESISTANCE: return EFFECT_TYPE_DAMAGE_RESISTANCE; + case EFFECT_ICON_REGENERATE: return EFFECT_TYPE_REGENERATE; + case EFFECT_ICON_DAMAGE_REDUCTION: return EFFECT_TYPE_DAMAGE_REDUCTION; + case EFFECT_ICON_TEMPORARY_HITPOINTS: return EFFECT_TYPE_TEMPORARY_HITPOINTS; + case EFFECT_ICON_IMMUNITY: return EFFECT_TYPE_IMMUNITY; + case EFFECT_ICON_POISON: return EFFECT_TYPE_POISON; + case EFFECT_ICON_DISEASE: return EFFECT_TYPE_DISEASE; + case EFFECT_ICON_CURSE: return EFFECT_TYPE_CURSE; + case EFFECT_ICON_ATTACK_INCREASE: return EFFECT_TYPE_ATTACK_INCREASE; + case EFFECT_ICON_ATTACK_DECREASE: return EFFECT_TYPE_ATTACK_DECREASE; + case EFFECT_ICON_DAMAGE_INCREASE: return EFFECT_TYPE_DAMAGE_INCREASE; + case EFFECT_ICON_DAMAGE_DECREASE: return EFFECT_TYPE_DAMAGE_DECREASE; + case EFFECT_ICON_AC_INCREASE: return EFFECT_TYPE_AC_INCREASE; + case EFFECT_ICON_AC_DECREASE: return EFFECT_TYPE_AC_DECREASE; + case EFFECT_ICON_MOVEMENT_SPEED_INCREASE: return EFFECT_TYPE_MOVEMENT_SPEED_INCREASE; + case EFFECT_ICON_MOVEMENT_SPEED_DECREASE: return EFFECT_TYPE_MOVEMENT_SPEED_DECREASE; + case EFFECT_ICON_SAVING_THROW_DECREASE: return EFFECT_TYPE_SAVING_THROW_DECREASE; + case EFFECT_ICON_SPELL_RESISTANCE_INCREASE: return EFFECT_TYPE_SPELL_RESISTANCE_INCREASE; + case EFFECT_ICON_SPELL_RESISTANCE_DECREASE: return EFFECT_TYPE_SPELL_RESISTANCE_DECREASE; + case EFFECT_ICON_SKILL_INCREASE: return EFFECT_TYPE_SKILL_INCREASE; + case EFFECT_ICON_SKILL_DECREASE: return EFFECT_TYPE_SKILL_DECREASE; + case EFFECT_ICON_ELEMENTALSHIELD: return EFFECT_TYPE_ELEMENTALSHIELD; + case EFFECT_ICON_LEVELDRAIN: return EFFECT_TYPE_NEGATIVELEVEL; + case EFFECT_ICON_SPELLLEVELABSORPTION: return EFFECT_TYPE_SPELLLEVELABSORPTION; + case EFFECT_ICON_SPELLIMMUNITY: return EFFECT_TYPE_SPELL_IMMUNITY; + case EFFECT_ICON_CONCEALMENT: return EFFECT_TYPE_CONCEALMENT; + case EFFECT_ICON_EFFECT_SPELL_FAILURE: return EFFECT_TYPE_SPELL_FAILURE; + + case EFFECT_ICON_INVISIBILITY: + case EFFECT_ICON_IMPROVEDINVISIBILITY: return EFFECT_TYPE_INVISIBILITY; + + case EFFECT_ICON_ABILITY_INCREASE_STR: + case EFFECT_ICON_ABILITY_INCREASE_DEX: + case EFFECT_ICON_ABILITY_INCREASE_CON: + case EFFECT_ICON_ABILITY_INCREASE_INT: + case EFFECT_ICON_ABILITY_INCREASE_WIS: + case EFFECT_ICON_ABILITY_INCREASE_CHA: return EFFECT_TYPE_ABILITY_INCREASE; + + case EFFECT_ICON_ABILITY_DECREASE_STR: + case EFFECT_ICON_ABILITY_DECREASE_CHA: + case EFFECT_ICON_ABILITY_DECREASE_DEX: + case EFFECT_ICON_ABILITY_DECREASE_CON: + case EFFECT_ICON_ABILITY_DECREASE_INT: + case EFFECT_ICON_ABILITY_DECREASE_WIS: return EFFECT_TYPE_ABILITY_DECREASE; + + case EFFECT_ICON_IMMUNITY_ALL: + case EFFECT_ICON_IMMUNITY_MIND: + case EFFECT_ICON_IMMUNITY_POISON: + case EFFECT_ICON_IMMUNITY_DISEASE: + case EFFECT_ICON_IMMUNITY_FEAR: + case EFFECT_ICON_IMMUNITY_TRAP: + case EFFECT_ICON_IMMUNITY_PARALYSIS: + case EFFECT_ICON_IMMUNITY_BLINDNESS: + case EFFECT_ICON_IMMUNITY_DEAFNESS: + case EFFECT_ICON_IMMUNITY_SLOW: + case EFFECT_ICON_IMMUNITY_ENTANGLE: + case EFFECT_ICON_IMMUNITY_SILENCE: + case EFFECT_ICON_IMMUNITY_STUN: + case EFFECT_ICON_IMMUNITY_SLEEP: + case EFFECT_ICON_IMMUNITY_CHARM: + case EFFECT_ICON_IMMUNITY_DOMINATE: + case EFFECT_ICON_IMMUNITY_CONFUSE: + case EFFECT_ICON_IMMUNITY_CURSE: + case EFFECT_ICON_IMMUNITY_DAZED: + case EFFECT_ICON_IMMUNITY_ABILITY_DECREASE: + case EFFECT_ICON_IMMUNITY_ATTACK_DECREASE: + case EFFECT_ICON_IMMUNITY_DAMAGE_DECREASE: + case EFFECT_ICON_IMMUNITY_DAMAGE_IMMUNITY_DECREASE: + case EFFECT_ICON_IMMUNITY_AC_DECREASE: + case EFFECT_ICON_IMMUNITY_MOVEMENT_SPEED_DECREASE: + case EFFECT_ICON_IMMUNITY_SAVING_THROW_DECREASE: + case EFFECT_ICON_IMMUNITY_SPELL_RESISTANCE_DECREASE: + case EFFECT_ICON_IMMUNITY_SKILL_DECREASE: + case EFFECT_ICON_IMMUNITY_KNOCKDOWN: + case EFFECT_ICON_IMMUNITY_NEGATIVE_LEVEL: + case EFFECT_ICON_IMMUNITY_SNEAK_ATTACK: + case EFFECT_ICON_IMMUNITY_CRITICAL_HIT: + case EFFECT_ICON_IMMUNITY_DEATH_MAGIC: return EFFECT_TYPE_IMMUNITY; + + case EFFECT_ICON_SAVING_THROW_INCREASE: + case EFFECT_ICON_REFLEX_SAVE_INCREASED: + case EFFECT_ICON_FORT_SAVE_INCREASED: + case EFFECT_ICON_WILL_SAVE_INCREASED: return EFFECT_TYPE_SAVING_THROW_INCREASE; + + case EFFECT_ICON_DAMAGE_IMMUNITY_INCREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_MAGIC: + case EFFECT_ICON_DAMAGE_IMMUNITY_ACID: + case EFFECT_ICON_DAMAGE_IMMUNITY_COLD: + case EFFECT_ICON_DAMAGE_IMMUNITY_DIVINE: + case EFFECT_ICON_DAMAGE_IMMUNITY_ELECTRICAL: + case EFFECT_ICON_DAMAGE_IMMUNITY_FIRE: + case EFFECT_ICON_DAMAGE_IMMUNITY_NEGATIVE: + case EFFECT_ICON_DAMAGE_IMMUNITY_POSITIVE: + case EFFECT_ICON_DAMAGE_IMMUNITY_SONIC: return EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE; + + case EFFECT_ICON_DAMAGE_IMMUNITY_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_MAGIC_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_ACID_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_COLD_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_DIVINE_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_ELECTRICAL_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_FIRE_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_NEGATIVE_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_POSITIVE_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_SONIC_DECREASE: return EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE; + + //case EFFECT_ICON_INVULNERABLE: return EFFECT_TYPE_INVULNERABLE; + //case EFFECT_ICON_WOUNDING: return EFFECT_TYPE_INVALIDEFFECT; + //case EFFECT_ICON_TAUNTED: return EFFECT_TYPE_INVALIDEFFECT; + //case EFFECT_ICON_TIMESTOP: return EFFECT_TYPE_TIMESTOP; + //case EFFECT_ICON_BLINDNESS: return EFFECT_TYPE_BLINDNESS; + //case EFFECT_ICON_DISPELMAGICBEST: return EFFECT_TYPE_INVALIDEFFECT; + //case EFFECT_ICON_DISPELMAGICALL: return EFFECT_TYPE_INVALIDEFFECT; + //case EFFECT_ICON_ENEMY_ATTACK_BONUS: return EFFECT_TYPE_INVALIDEFFECT; + //case EFFECT_ICON_FATIGUE: return EFFECT_TYPE_INVALIDEFFECT; + } + return EFFECT_TYPE_INVALIDEFFECT; +} +int AbilityTypeFromEffectIconAbility(int nEffectIcon) +{ + switch (nEffectIcon) + { + case EFFECT_ICON_ABILITY_INCREASE_STR: + case EFFECT_ICON_ABILITY_DECREASE_STR: + return ABILITY_STRENGTH; + case EFFECT_ICON_ABILITY_INCREASE_DEX: + case EFFECT_ICON_ABILITY_DECREASE_DEX: + return ABILITY_DEXTERITY; + case EFFECT_ICON_ABILITY_INCREASE_CON: + case EFFECT_ICON_ABILITY_DECREASE_CON: + return ABILITY_CONSTITUTION; + case EFFECT_ICON_ABILITY_INCREASE_INT: + case EFFECT_ICON_ABILITY_DECREASE_INT: + return ABILITY_INTELLIGENCE; + case EFFECT_ICON_ABILITY_INCREASE_WIS: + case EFFECT_ICON_ABILITY_DECREASE_WIS: + return ABILITY_WISDOM; + case EFFECT_ICON_ABILITY_INCREASE_CHA: + case EFFECT_ICON_ABILITY_DECREASE_CHA: + return ABILITY_CHARISMA; + } + return -1; +} +int DamageTypeFromEffectIconDamageImmunity(int nEffectIcon) +{ + switch (nEffectIcon) + { + case EFFECT_ICON_DAMAGE_IMMUNITY_MAGIC: + case EFFECT_ICON_DAMAGE_IMMUNITY_MAGIC_DECREASE: + return DAMAGE_TYPE_MAGICAL; + case EFFECT_ICON_DAMAGE_IMMUNITY_ACID: + case EFFECT_ICON_DAMAGE_IMMUNITY_ACID_DECREASE: + return DAMAGE_TYPE_ACID; + case EFFECT_ICON_DAMAGE_IMMUNITY_COLD: + case EFFECT_ICON_DAMAGE_IMMUNITY_COLD_DECREASE: + return DAMAGE_TYPE_COLD; + case EFFECT_ICON_DAMAGE_IMMUNITY_DIVINE: + case EFFECT_ICON_DAMAGE_IMMUNITY_DIVINE_DECREASE: + return DAMAGE_TYPE_DIVINE; + case EFFECT_ICON_DAMAGE_IMMUNITY_ELECTRICAL: + case EFFECT_ICON_DAMAGE_IMMUNITY_ELECTRICAL_DECREASE: + return DAMAGE_TYPE_ELECTRICAL; + case EFFECT_ICON_DAMAGE_IMMUNITY_FIRE: + case EFFECT_ICON_DAMAGE_IMMUNITY_FIRE_DECREASE: + return DAMAGE_TYPE_FIRE; + case EFFECT_ICON_DAMAGE_IMMUNITY_NEGATIVE: + case EFFECT_ICON_DAMAGE_IMMUNITY_NEGATIVE_DECREASE: + return DAMAGE_TYPE_NEGATIVE; + case EFFECT_ICON_DAMAGE_IMMUNITY_POSITIVE: + case EFFECT_ICON_DAMAGE_IMMUNITY_POSITIVE_DECREASE: + return DAMAGE_TYPE_POSITIVE; + case EFFECT_ICON_DAMAGE_IMMUNITY_SONIC: + case EFFECT_ICON_DAMAGE_IMMUNITY_SONIC_DECREASE: + return DAMAGE_TYPE_SONIC; + } + return -1; +} + +int ImmunityTypeFromEffectIconImmunity(int nEffectIcon) +{ + switch (nEffectIcon) + { + case EFFECT_ICON_IMMUNITY_MIND: return IMMUNITY_TYPE_MIND_SPELLS; + case EFFECT_ICON_IMMUNITY_POISON: return IMMUNITY_TYPE_POISON; + case EFFECT_ICON_IMMUNITY_DISEASE: return IMMUNITY_TYPE_DISEASE; + case EFFECT_ICON_IMMUNITY_FEAR: return IMMUNITY_TYPE_FEAR; + case EFFECT_ICON_IMMUNITY_TRAP: return IMMUNITY_TYPE_TRAP; + case EFFECT_ICON_IMMUNITY_PARALYSIS: return IMMUNITY_TYPE_PARALYSIS; + case EFFECT_ICON_IMMUNITY_BLINDNESS: return IMMUNITY_TYPE_BLINDNESS; + case EFFECT_ICON_IMMUNITY_DEAFNESS: return IMMUNITY_TYPE_DEAFNESS; + case EFFECT_ICON_IMMUNITY_SLOW: return IMMUNITY_TYPE_SLOW; + case EFFECT_ICON_IMMUNITY_ENTANGLE: return IMMUNITY_TYPE_ENTANGLE; + case EFFECT_ICON_IMMUNITY_SILENCE: return IMMUNITY_TYPE_SILENCE; + case EFFECT_ICON_IMMUNITY_STUN: return IMMUNITY_TYPE_STUN; + case EFFECT_ICON_IMMUNITY_SLEEP: return IMMUNITY_TYPE_SLEEP; + case EFFECT_ICON_IMMUNITY_CHARM: return IMMUNITY_TYPE_CHARM; + case EFFECT_ICON_IMMUNITY_DOMINATE: return IMMUNITY_TYPE_DOMINATE; + case EFFECT_ICON_IMMUNITY_CONFUSE: return IMMUNITY_TYPE_CONFUSED; + case EFFECT_ICON_IMMUNITY_CURSE: return IMMUNITY_TYPE_CURSED; + case EFFECT_ICON_IMMUNITY_DAZED: return IMMUNITY_TYPE_DAZED; + case EFFECT_ICON_IMMUNITY_ABILITY_DECREASE: return IMMUNITY_TYPE_ABILITY_DECREASE; + case EFFECT_ICON_IMMUNITY_ATTACK_DECREASE: return IMMUNITY_TYPE_ATTACK_DECREASE; + case EFFECT_ICON_IMMUNITY_DAMAGE_DECREASE: return IMMUNITY_TYPE_DAMAGE_DECREASE; + case EFFECT_ICON_IMMUNITY_DAMAGE_IMMUNITY_DECREASE: return IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE; + case EFFECT_ICON_IMMUNITY_AC_DECREASE: return IMMUNITY_TYPE_AC_DECREASE; + case EFFECT_ICON_IMMUNITY_MOVEMENT_SPEED_DECREASE: return IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE; + case EFFECT_ICON_IMMUNITY_SAVING_THROW_DECREASE: return IMMUNITY_TYPE_SAVING_THROW_DECREASE; + case EFFECT_ICON_IMMUNITY_SPELL_RESISTANCE_DECREASE: return IMMUNITY_TYPE_SPELL_RESISTANCE_DECREASE; + case EFFECT_ICON_IMMUNITY_SKILL_DECREASE: return IMMUNITY_TYPE_SKILL_DECREASE; + case EFFECT_ICON_IMMUNITY_KNOCKDOWN: return IMMUNITY_TYPE_KNOCKDOWN; + case EFFECT_ICON_IMMUNITY_NEGATIVE_LEVEL: return IMMUNITY_TYPE_NEGATIVE_LEVEL; + case EFFECT_ICON_IMMUNITY_SNEAK_ATTACK: return IMMUNITY_TYPE_SNEAK_ATTACK; + case EFFECT_ICON_IMMUNITY_CRITICAL_HIT: return IMMUNITY_TYPE_CRITICAL_HIT; + case EFFECT_ICON_IMMUNITY_DEATH_MAGIC: return IMMUNITY_TYPE_DEATH; + } + return -1; +} +void ClearLines(object oPlayer) +{ + int nLine, nLines = GetLocalInt(oPlayer, "BUFFINFO_LAST_NUM_LINES"); + for (nLine = 1; nLine <= nLines; nLine++) + { + PostString(oPlayer, "", 10, nLine + 3, SCREEN_ANCHOR_TOP_RIGHT, 0.1f, 0xFFFFFF00, 0xFFFFFF00, nLine); + } +} +void DisplayLine(object oPlayer, int nLine, string sText, int nColor) +{ + PostString(oPlayer, sText, 10, nLine + 3, SCREEN_ANCHOR_TOP_RIGHT, 10.0f, nColor, 0xFFFFFF00, nLine); +} +string SecondsToTimestamp(int nSeconds) +{ + sqlquery sql; + if (nSeconds > 86400) sql = SqlPrepareQueryObject(GetModule(), "SELECT (@seconds / 3600) || ':' || strftime('%M:%S', @seconds / 86400.0);"); + else sql = SqlPrepareQueryObject(GetModule(), "SELECT time(@seconds, 'unixepoch');"); + SqlBindInt(sql, "@seconds", nSeconds); + SqlStep(sql); + return SqlGetString(sql, 0); +} +string Get2DAStrRef(string s2DA, string sColumn, int nRow) +{ + return GetStringByStrRef(StringToInt(Get2DAString(s2DA, sColumn, nRow))); +} +string GetVersusRacialTypeAndAlignment(int nRacialType, int nLawfulChaotic, int nGoodEvil) +{ + string sRacialType = nRacialType == RACIAL_TYPE_INVALID ? "" : Get2DAStrRef("racialtypes", "NamePlural", nRacialType); + string sLawfulChaotic = nLawfulChaotic == ALIGNMENT_LAWFUL ? "Lawful" : nLawfulChaotic == ALIGNMENT_CHAOTIC ? "Chaotic" : ""; + string sGoodEvil = nGoodEvil == ALIGNMENT_GOOD ? "Good" : nGoodEvil == ALIGNMENT_EVIL ? "Evil" : ""; + string sAlignment = sLawfulChaotic + (sLawfulChaotic == "" ? sGoodEvil : (sGoodEvil == "" ? "" : " " + sGoodEvil)); + return (sRacialType != "" || sAlignment != "") ? (" vs. " + sAlignment + (sAlignment == "" ? sRacialType : (sRacialType == "" ? "" : " " + sRacialType))) : ""; +} +string GetModifierType(int nEffectType, int nPlus, int nMinus) +{ + return nEffectType == nPlus ? "+" : nEffectType == nMinus ? "-" : ""; +} +string ACTypeToString(int nACType) +{ + switch (nACType) + { + case AC_DODGE_BONUS: return "Dodge"; + case AC_NATURAL_BONUS: return "Natural"; + case AC_ARMOUR_ENCHANTMENT_BONUS: return "Armor"; + case AC_SHIELD_ENCHANTMENT_BONUS: return "Shield"; + case AC_DEFLECTION_BONUS: return "Deflection"; + } + return ""; +} + +string SavingThrowToString(int nSavingThrow) +{ + switch (nSavingThrow) + { + case SAVING_THROW_ALL: return "All"; + case SAVING_THROW_FORT: return "Fortitude"; + case SAVING_THROW_REFLEX: return "Reflex"; + case SAVING_THROW_WILL: return "Will"; + } + return ""; +} +string SavingThrowTypeToString(int nSavingThrowType) +{ + switch (nSavingThrowType) + { + case SAVING_THROW_TYPE_MIND_SPELLS: return "Mind Spells"; + case SAVING_THROW_TYPE_POISON: return "Poison"; + case SAVING_THROW_TYPE_DISEASE: return "Disease"; + case SAVING_THROW_TYPE_FEAR: return "Fear"; + case SAVING_THROW_TYPE_SONIC: return "Sonic"; + case SAVING_THROW_TYPE_ACID: return "Acid"; + case SAVING_THROW_TYPE_FIRE: return "Fire"; + case SAVING_THROW_TYPE_ELECTRICITY: return "Electricity"; + case SAVING_THROW_TYPE_POSITIVE: return "Positive"; + case SAVING_THROW_TYPE_NEGATIVE: return "Negative"; + case SAVING_THROW_TYPE_DEATH: return "Death"; + case SAVING_THROW_TYPE_COLD: return "Cold"; + case SAVING_THROW_TYPE_DIVINE: return "Divine"; + case SAVING_THROW_TYPE_TRAP: return "Traps"; + case SAVING_THROW_TYPE_SPELL: return "Spells"; + case SAVING_THROW_TYPE_GOOD: return "Good"; + case SAVING_THROW_TYPE_EVIL: return "Evil"; + case SAVING_THROW_TYPE_LAW: return "Lawful"; + case SAVING_THROW_TYPE_CHAOS: return "Chaotic"; + } + return ""; +} +string AbilityToString(int nAbility) +{ + switch (nAbility) + { + case ABILITY_STRENGTH: return "Strength"; + case ABILITY_DEXTERITY: return "Dexterity"; + case ABILITY_CONSTITUTION: return "Constitution"; + case ABILITY_INTELLIGENCE: return "Intelligence"; + case ABILITY_WISDOM: return "Wisdom"; + case ABILITY_CHARISMA: return "Charisma"; + } + return ""; +} +string DamageTypeToString(int nDamageType) +{ + switch (nDamageType) + { + case DAMAGE_TYPE_BLUDGEONING: return "Bludgeoning"; + case DAMAGE_TYPE_PIERCING: return "Piercing"; + case DAMAGE_TYPE_SLASHING: return "Slashing"; + case DAMAGE_TYPE_MAGICAL: return "Magical"; + case DAMAGE_TYPE_ACID: return "Acid"; + case DAMAGE_TYPE_COLD: return "Cold"; + case DAMAGE_TYPE_DIVINE: return "Divine"; + case DAMAGE_TYPE_ELECTRICAL: return "Electrical"; + case DAMAGE_TYPE_FIRE: return "Fire"; + case DAMAGE_TYPE_NEGATIVE: return "Negative"; + case DAMAGE_TYPE_POSITIVE: return "Positive"; + case DAMAGE_TYPE_SONIC: return "Sonic"; + case DAMAGE_TYPE_BASE_WEAPON: return "Base Weapon"; + } + return ""; +} +string SpellSchoolToString(int nSpellSchool) +{ + switch (nSpellSchool) + { + case SPELL_SCHOOL_GENERAL: return "General"; + case SPELL_SCHOOL_ABJURATION: return "Abjuration"; + case SPELL_SCHOOL_CONJURATION: return "Conjuration"; + case SPELL_SCHOOL_DIVINATION: return "Divination"; + case SPELL_SCHOOL_ENCHANTMENT: return "Enchantment"; + case SPELL_SCHOOL_EVOCATION: return "Evocation"; + case SPELL_SCHOOL_ILLUSION: return "Illusion"; + case SPELL_SCHOOL_NECROMANCY: return "Necromancy"; + case SPELL_SCHOOL_TRANSMUTATION: return "Transmutation"; + } + return ""; +} +string MissChanceToString(int nMissChance) +{ + switch (nMissChance) + { + case MISS_CHANCE_TYPE_VS_RANGED: return "vs. Ranged"; + case MISS_CHANCE_TYPE_VS_MELEE: return "vs. Melee"; + } + return ""; +} +void ai_CreateEffectChatReport(object oPlayer, int nEffectIconID) +{ + int nIconEffectType = EffectIconToEffectType(nEffectIconID); + if(nIconEffectType == EFFECT_TYPE_INVALIDEFFECT) return; + int nLine, nIndex, nEffectIndex; + string sColor = AI_COLOR_YELLOW; + int bSkipDisplay, bHasEffect; + int nEffectType, bIsSpellLevelAbsorptionPretendingToBeSpellImmunity; + string sText; + json jEffectID = JsonArray(); + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 500 / 27 + sText = Get2DAStrRef("effecticons", "StrRef", nEffectIconID); + ai_SendMessages(sText, AI_COLOR_YELLOW, oPlayer); + effect eEffect = GetFirstEffect(oPlayer); + while(GetIsEffectValid(eEffect)) + { + bSkipDisplay = FALSE; + nEffectType = GetEffectType(eEffect); + // Unlimited EffectSpellLevelAbsorption has a SpellImmunity Icon + if (nIconEffectType == EFFECT_TYPE_SPELL_IMMUNITY && GetEffectInteger(eEffect, 3)) + { + bIsSpellLevelAbsorptionPretendingToBeSpellImmunity = TRUE; + nIconEffectType = EFFECT_TYPE_SPELLLEVELABSORPTION; + } + if (nEffectType == nIconEffectType) + { + bHasEffect = TRUE; + int nSpellID = GetEffectSpellId(eEffect); + string sSpellName = nSpellID == -1 ? "" : Get2DAStrRef("spells", "Name", nSpellID); + int bIsPermanentEffect = GetEffectDurationType(eEffect) == DURATION_TYPE_PERMANENT; + int nDurationRemaining = GetEffectDurationRemaining(eEffect); + string sDurationRemaining = bIsPermanentEffect ? "(Permanent)" : "(" + SecondsToTimestamp(nDurationRemaining) + ")"; + if(bIsPermanentEffect) sColor = AI_COLOR_WHITE; + else + { + if(nDurationRemaining < 61) sColor = AI_COLOR_RED; + else if(nDurationRemaining < 300) sColor = AI_COLOR_YELLOW; + else sColor = AI_COLOR_GREEN; + } + string sStats = ""; + string sRacialTypeAlignment = ""; + switch (nEffectType) + { + case EFFECT_TYPE_AC_INCREASE: + case EFFECT_TYPE_AC_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_AC_INCREASE, EFFECT_TYPE_AC_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 1)) + " " + ACTypeToString(GetEffectInteger(eEffect, 0)) + " AC"; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4)); + break; + } + case EFFECT_TYPE_ATTACK_INCREASE: + case EFFECT_TYPE_ATTACK_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_ATTACK_INCREASE, EFFECT_TYPE_ATTACK_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 0)) +" AB"; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4)); + break; + } + case EFFECT_TYPE_SAVING_THROW_INCREASE: + case EFFECT_TYPE_SAVING_THROW_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_SAVING_THROW_INCREASE, EFFECT_TYPE_SAVING_THROW_DECREASE); + string sSavingThrow = SavingThrowToString(GetEffectInteger(eEffect, 1)); + string sSavingThrowType = SavingThrowTypeToString(GetEffectInteger(eEffect, 2)); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 0)) + " " + sSavingThrow + (sSavingThrowType == "" ? "" : " (vs. " + sSavingThrowType + ")"); + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4), GetEffectInteger(eEffect, 5)); + break; + } + case EFFECT_TYPE_ABILITY_INCREASE: + case EFFECT_TYPE_ABILITY_DECREASE: + { + int nAbility = AbilityTypeFromEffectIconAbility(nEffectIconID); + + if (nAbility != GetEffectInteger(eEffect, 0)) + bSkipDisplay = TRUE; + else + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_ABILITY_INCREASE, EFFECT_TYPE_ABILITY_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 1)) + " " + AbilityToString(nAbility); + } + break; + } + case EFFECT_TYPE_DAMAGE_INCREASE: + case EFFECT_TYPE_DAMAGE_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_DAMAGE_INCREASE, EFFECT_TYPE_DAMAGE_DECREASE); + sStats = sModifier + Get2DAStrRef("iprp_damagecost", "Name", GetEffectInteger(eEffect, 0)) + " (" + DamageTypeToString(GetEffectInteger(eEffect, 1)) + ")"; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4)); + break; + } + case EFFECT_TYPE_SKILL_INCREASE: + case EFFECT_TYPE_SKILL_DECREASE: + { + int nSkill = GetEffectInteger(eEffect, 0); + string sSkill = nSkill == 255 ? "All Skills" : Get2DAStrRef("skills", "Name", nSkill); + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_SKILL_INCREASE, EFFECT_TYPE_SKILL_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 1)) + " " + sSkill; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4)); + break; + } + case EFFECT_TYPE_TEMPORARY_HITPOINTS: + { + sStats = "+" + IntToString(GetEffectInteger(eEffect, 0)) + " HitPoints"; + break; + } + case EFFECT_TYPE_DAMAGE_REDUCTION: + { + int nAmount = GetEffectInteger(eEffect, 0); + int nDamagePower = GetEffectInteger(eEffect, 1); + nDamagePower = nDamagePower > 6 ? --nDamagePower : nDamagePower; + int nRemaining = GetEffectInteger(eEffect, 2); + sStats = IntToString(nAmount) + "/+" + IntToString(nDamagePower) + " (" + (nRemaining == 0 ? "Unlimited" : IntToString(nRemaining) + " Damage Remaining") + ")"; + break; + } + case EFFECT_TYPE_DAMAGE_RESISTANCE: + { + int nAmount = GetEffectInteger(eEffect, 1); + int nRemaining = GetEffectInteger(eEffect, 2); + sStats = IntToString(nAmount) + "/- " + DamageTypeToString(GetEffectInteger(eEffect, 0)) + " Resistance (" + (nRemaining == 0 ? "Unlimited" : IntToString(nRemaining) + " Damage Remaining") + ")"; + break; + } + case EFFECT_TYPE_IMMUNITY: + { + int nImmunity = ImmunityTypeFromEffectIconImmunity(nEffectIconID); + + if (nImmunity != GetEffectInteger(eEffect, 0)) + bSkipDisplay = TRUE; + else + { + sStats = Get2DAStrRef("effecticons", "StrRef", nEffectIconID); + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 1), GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3)); + } + break; + } + case EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE: + case EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE: + { + int nDamageType = GetEffectInteger(eEffect, 0); + int nDamageTypeFromIcon = DamageTypeFromEffectIconDamageImmunity(nEffectIconID); + + if (nDamageTypeFromIcon != -1 && nDamageType != nDamageTypeFromIcon) + bSkipDisplay = TRUE; + + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE, EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 1)) + "% " + DamageTypeToString(nDamageType) + " Damage Immunity"; + break; + } + case EFFECT_TYPE_SPELL_IMMUNITY: + { + sStats = "Spell Immunity: " + Get2DAStrRef("spells", "Name", GetEffectInteger(eEffect, 0)); + break; + } + case EFFECT_TYPE_SPELLLEVELABSORPTION: + { + int nMaxSpellLevelAbsorbed = GetEffectInteger(eEffect, 0); + int bUnlimited = GetEffectInteger(eEffect, 3); + string sSpellLevel; + switch (nMaxSpellLevelAbsorbed) + { + case 0: sSpellLevel = "Cantrip"; break; + case 1: sSpellLevel = "1st"; break; + case 2: sSpellLevel = "2nd"; break; + case 3: sSpellLevel = "3rd"; break; + default: sSpellLevel = IntToString(nMaxSpellLevelAbsorbed) + "th"; break; + } + sSpellLevel += " Level" + (nMaxSpellLevelAbsorbed == 0 ? "" : " and Below"); + string sSpellSchool = SpellSchoolToString(GetEffectInteger(eEffect, 2)); + string sRemainingSpellLevels = bUnlimited ? "" : "(" + IntToString(GetEffectInteger(eEffect, 1)) + " Spell Levels Remaining)"; + sStats = sSpellLevel + " " + sSpellSchool + " Spell Immunity " + sRemainingSpellLevels; + + if (bIsSpellLevelAbsorptionPretendingToBeSpellImmunity) + nIconEffectType = EFFECT_TYPE_SPELL_IMMUNITY; + else if (bUnlimited && !bIsSpellLevelAbsorptionPretendingToBeSpellImmunity) + bSkipDisplay = TRUE; + + break; + } + case EFFECT_TYPE_REGENERATE: + { + sStats = "+" + IntToString(GetEffectInteger(eEffect, 0)) + " HP / " + FloatToString((GetEffectInteger(eEffect, 1) / 1000.0f), 0, 2) + "s"; + break; + } + case EFFECT_TYPE_POISON: + { + sStats = "Poison: " + Get2DAStrRef("poison", "Name", GetEffectInteger(eEffect, 0)); + break; + } + case EFFECT_TYPE_DISEASE: + { + sStats = "Disease: " + Get2DAStrRef("disease", "Name", GetEffectInteger(eEffect, 0)); + break; + } + case EFFECT_TYPE_CURSE: + { + int nAbility; + string sAbilityDecrease; + for (nAbility = 0; nAbility < 6; nAbility++) + { + int nAbilityMod = GetEffectInteger(eEffect, nAbility); + if (nAbilityMod > 0) + { + string sAbility = GetStringLeft(AbilityToString(nAbility), 3); + sAbilityDecrease += "-" + IntToString(nAbilityMod) + " " + sAbility + ", "; + } + } + sAbilityDecrease = GetStringLeft(sAbilityDecrease, GetStringLength(sAbilityDecrease) - 2); + sStats = sAbilityDecrease; + break; + } + case EFFECT_TYPE_MOVEMENT_SPEED_INCREASE: + case EFFECT_TYPE_MOVEMENT_SPEED_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_MOVEMENT_SPEED_INCREASE, EFFECT_TYPE_MOVEMENT_SPEED_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 0)) + "% Movement Speed"; + break; + } + case EFFECT_TYPE_ELEMENTALSHIELD: + { + sStats = IntToString(GetEffectInteger(eEffect, 0)) + " + " + Get2DAStrRef("iprp_damagecost", "Name", GetEffectInteger(eEffect, 1)) + " (" + DamageTypeToString(GetEffectInteger(eEffect, 2)) + ")"; + break; + } + case EFFECT_TYPE_NEGATIVELEVEL: + { + sStats = "-" + IntToString(GetEffectInteger(eEffect, 0)) + " Levels"; + break; + } + case EFFECT_TYPE_CONCEALMENT: + { + string sMissChance = MissChanceToString(GetEffectInteger(eEffect, 4) - 1); + sStats = IntToString(GetEffectInteger(eEffect, 0)) + "% Concealment" + (sMissChance == "" ? "" : " (" + sMissChance + ")"); + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 1), GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3)); + break; + } + case EFFECT_TYPE_SPELL_RESISTANCE_INCREASE: + case EFFECT_TYPE_SPELL_RESISTANCE_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_SPELL_RESISTANCE_INCREASE, EFFECT_TYPE_SPELL_RESISTANCE_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 0)) + " Spell Resistance"; + break; + } + case EFFECT_TYPE_SPELL_FAILURE: + { + sStats = IntToString(GetEffectInteger(eEffect, 0)) + "% Spell Failure (Spell School: " + SpellSchoolToString(GetEffectInteger(eEffect, 1)) + ")"; + break; + } + case EFFECT_TYPE_INVISIBILITY: + { + int nInvisibilityType = GetEffectInteger(eEffect, 0); + if (nEffectIconID == EFFECT_ICON_INVISIBILITY) + bSkipDisplay = nInvisibilityType != INVISIBILITY_TYPE_NORMAL; + else if (nEffectIconID == EFFECT_ICON_IMPROVEDINVISIBILITY) + bSkipDisplay = nInvisibilityType != INVISIBILITY_TYPE_IMPROVED; + if (!bSkipDisplay) + { + sStats = (nInvisibilityType == INVISIBILITY_TYPE_IMPROVED ? "Improved " : "") + "Invisibility"; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 1), GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3)); + } + break; + } + case EFFECT_TYPE_HASTE: + { + sStats = "Hasted"; + } + } + if(!bSkipDisplay) + { + sText = sSpellName + " " + sDurationRemaining + (sStats == "" ? "" : " -> " + sStats + sRacialTypeAlignment); + if(sText != "") + { + ai_SendMessages(sText, sColor, oPlayer); + object oSource = GetEffectCreator(eEffect); + if(GetIsObjectValid(oSource)) + { + sText = GetObjectType(oSource) ? GetName(oSource) : ""; + sText = " Creator: " + sText; + float fLength = IntToFloat(GetStringLength(sText) * 8); + ai_SendMessages(sText, AI_COLOR_YELLOW, oPlayer); + } + } + } + } + nIndex++; + eEffect = GetNextEffect(oPlayer); + } +} +void ai_CreateEffectIconMenu(object oPlayer, int nEffectIconID) +{ + int nIconEffectType = EffectIconToEffectType(nEffectIconID); + if(nIconEffectType == EFFECT_TYPE_INVALIDEFFECT) return; + int nLine, nColor, nIndex, nEffectIndex; + int bSkipDisplay, bHasEffect; + int nEffectType, bIsSpellLevelAbsorptionPretendingToBeSpellImmunity; + string sText; + json jEffectID = JsonArray(); + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 500 / 27 + sText = Get2DAStrRef("effecticons", "StrRef", nEffectIconID); + json jRow = CreateLabel(JsonArray(), "Effect: " + sText, "lbl_buff_name", 700.0f, 15.0f, NUI_HALIGN_LEFT, NUI_VALIGN_MIDDLE, 0.0); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + float fHeight = 27.0; + effect eEffect = GetFirstEffect(oPlayer); + while(GetIsEffectValid(eEffect)) + { + bSkipDisplay = FALSE; + nEffectType = GetEffectType(eEffect); + // Unlimited EffectSpellLevelAbsorption has a SpellImmunity Icon + if (nIconEffectType == EFFECT_TYPE_SPELL_IMMUNITY && GetEffectInteger(eEffect, 3)) + { + bIsSpellLevelAbsorptionPretendingToBeSpellImmunity = TRUE; + nIconEffectType = EFFECT_TYPE_SPELLLEVELABSORPTION; + } + if (nEffectType == nIconEffectType) + { + bHasEffect = TRUE; + int nSpellID = GetEffectSpellId(eEffect); + string sSpellName = nSpellID == -1 ? "" : Get2DAStrRef("spells", "Name", nSpellID); + int bIsPermanentEffect = GetEffectDurationType(eEffect) == DURATION_TYPE_PERMANENT; + int nDurationRemaining = GetEffectDurationRemaining(eEffect); + string sDurationRemaining = bIsPermanentEffect ? "(Permanent)" : "(" + SecondsToTimestamp(nDurationRemaining) + ")"; + if(bIsPermanentEffect) nColor = 0x0000FFFF; + else + { + float fPercentage = IntToFloat(nDurationRemaining) / IntToFloat(GetEffectDuration(eEffect)); + if(fPercentage > 0.5f) nColor = 0x00FF00FF; + else if(fPercentage < 0.25f) nColor = 0xFF0000FF; + else nColor = 0xFFFF00FF; + } + string sStats = ""; + string sRacialTypeAlignment = ""; + switch (nEffectType) + { + case EFFECT_TYPE_AC_INCREASE: + case EFFECT_TYPE_AC_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_AC_INCREASE, EFFECT_TYPE_AC_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 1)) + " " + ACTypeToString(GetEffectInteger(eEffect, 0)) + " AC"; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4)); + break; + } + case EFFECT_TYPE_ATTACK_INCREASE: + case EFFECT_TYPE_ATTACK_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_ATTACK_INCREASE, EFFECT_TYPE_ATTACK_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 0)) +" AB"; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4)); + break; + } + case EFFECT_TYPE_SAVING_THROW_INCREASE: + case EFFECT_TYPE_SAVING_THROW_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_SAVING_THROW_INCREASE, EFFECT_TYPE_SAVING_THROW_DECREASE); + string sSavingThrow = SavingThrowToString(GetEffectInteger(eEffect, 1)); + string sSavingThrowType = SavingThrowTypeToString(GetEffectInteger(eEffect, 2)); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 0)) + " " + sSavingThrow + (sSavingThrowType == "" ? "" : " (vs. " + sSavingThrowType + ")"); + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4), GetEffectInteger(eEffect, 5)); + break; + } + case EFFECT_TYPE_ABILITY_INCREASE: + case EFFECT_TYPE_ABILITY_DECREASE: + { + int nAbility = AbilityTypeFromEffectIconAbility(nEffectIconID); + + if (nAbility != GetEffectInteger(eEffect, 0)) + bSkipDisplay = TRUE; + else + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_ABILITY_INCREASE, EFFECT_TYPE_ABILITY_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 1)) + " " + AbilityToString(nAbility); + } + break; + } + case EFFECT_TYPE_DAMAGE_INCREASE: + case EFFECT_TYPE_DAMAGE_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_DAMAGE_INCREASE, EFFECT_TYPE_DAMAGE_DECREASE); + sStats = sModifier + Get2DAStrRef("iprp_damagecost", "Name", GetEffectInteger(eEffect, 0)) + " (" + DamageTypeToString(GetEffectInteger(eEffect, 1)) + ")"; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4)); + break; + } + case EFFECT_TYPE_SKILL_INCREASE: + case EFFECT_TYPE_SKILL_DECREASE: + { + int nSkill = GetEffectInteger(eEffect, 0); + string sSkill = nSkill == 255 ? "All Skills" : Get2DAStrRef("skills", "Name", nSkill); + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_SKILL_INCREASE, EFFECT_TYPE_SKILL_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 1)) + " " + sSkill; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4)); + break; + } + case EFFECT_TYPE_TEMPORARY_HITPOINTS: + { + sStats = "+" + IntToString(GetEffectInteger(eEffect, 0)) + " HitPoints"; + break; + } + case EFFECT_TYPE_DAMAGE_REDUCTION: + { + int nAmount = GetEffectInteger(eEffect, 0); + int nDamagePower = GetEffectInteger(eEffect, 1); + nDamagePower = nDamagePower > 6 ? --nDamagePower : nDamagePower; + int nRemaining = GetEffectInteger(eEffect, 2); + sStats = IntToString(nAmount) + "/+" + IntToString(nDamagePower) + " (" + (nRemaining == 0 ? "Unlimited" : IntToString(nRemaining) + " Damage Remaining") + ")"; + break; + } + case EFFECT_TYPE_DAMAGE_RESISTANCE: + { + int nAmount = GetEffectInteger(eEffect, 1); + int nRemaining = GetEffectInteger(eEffect, 2); + sStats = IntToString(nAmount) + "/- " + DamageTypeToString(GetEffectInteger(eEffect, 0)) + " Resistance (" + (nRemaining == 0 ? "Unlimited" : IntToString(nRemaining) + " Damage Remaining") + ")"; + break; + } + case EFFECT_TYPE_IMMUNITY: + { + int nImmunity = ImmunityTypeFromEffectIconImmunity(nEffectIconID); + + if (nImmunity != GetEffectInteger(eEffect, 0)) + bSkipDisplay = TRUE; + else + { + sStats = Get2DAStrRef("effecticons", "StrRef", nEffectIconID); + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 1), GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3)); + } + break; + } + case EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE: + case EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE: + { + int nDamageType = GetEffectInteger(eEffect, 0); + int nDamageTypeFromIcon = DamageTypeFromEffectIconDamageImmunity(nEffectIconID); + + if (nDamageTypeFromIcon != -1 && nDamageType != nDamageTypeFromIcon) + bSkipDisplay = TRUE; + + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE, EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 1)) + "% " + DamageTypeToString(nDamageType) + " Damage Immunity"; + break; + } + case EFFECT_TYPE_SPELL_IMMUNITY: + { + sStats = "Spell Immunity: " + Get2DAStrRef("spells", "Name", GetEffectInteger(eEffect, 0)); + break; + } + case EFFECT_TYPE_SPELLLEVELABSORPTION: + { + int nMaxSpellLevelAbsorbed = GetEffectInteger(eEffect, 0); + int bUnlimited = GetEffectInteger(eEffect, 3); + string sSpellLevel; + switch (nMaxSpellLevelAbsorbed) + { + case 0: sSpellLevel = "Cantrip"; break; + case 1: sSpellLevel = "1st"; break; + case 2: sSpellLevel = "2nd"; break; + case 3: sSpellLevel = "3rd"; break; + default: sSpellLevel = IntToString(nMaxSpellLevelAbsorbed) + "th"; break; + } + sSpellLevel += " Level" + (nMaxSpellLevelAbsorbed == 0 ? "" : " and Below"); + string sSpellSchool = SpellSchoolToString(GetEffectInteger(eEffect, 2)); + string sRemainingSpellLevels = bUnlimited ? "" : "(" + IntToString(GetEffectInteger(eEffect, 1)) + " Spell Levels Remaining)"; + sStats = sSpellLevel + " " + sSpellSchool + " Spell Immunity " + sRemainingSpellLevels; + + if (bIsSpellLevelAbsorptionPretendingToBeSpellImmunity) + nIconEffectType = EFFECT_TYPE_SPELL_IMMUNITY; + else if (bUnlimited && !bIsSpellLevelAbsorptionPretendingToBeSpellImmunity) + bSkipDisplay = TRUE; + + break; + } + case EFFECT_TYPE_REGENERATE: + { + sStats = "+" + IntToString(GetEffectInteger(eEffect, 0)) + " HP / " + FloatToString((GetEffectInteger(eEffect, 1) / 1000.0f), 0, 2) + "s"; + break; + } + case EFFECT_TYPE_POISON: + { + sStats = "Poison: " + Get2DAStrRef("poison", "Name", GetEffectInteger(eEffect, 0)); + break; + } + case EFFECT_TYPE_DISEASE: + { + sStats = "Disease: " + Get2DAStrRef("disease", "Name", GetEffectInteger(eEffect, 0)); + break; + } + case EFFECT_TYPE_CURSE: + { + int nAbility; + string sAbilityDecrease; + for (nAbility = 0; nAbility < 6; nAbility++) + { + int nAbilityMod = GetEffectInteger(eEffect, nAbility); + if (nAbilityMod > 0) + { + string sAbility = GetStringLeft(AbilityToString(nAbility), 3); + sAbilityDecrease += "-" + IntToString(nAbilityMod) + " " + sAbility + ", "; + } + } + sAbilityDecrease = GetStringLeft(sAbilityDecrease, GetStringLength(sAbilityDecrease) - 2); + sStats = sAbilityDecrease; + break; + } + case EFFECT_TYPE_MOVEMENT_SPEED_INCREASE: + case EFFECT_TYPE_MOVEMENT_SPEED_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_MOVEMENT_SPEED_INCREASE, EFFECT_TYPE_MOVEMENT_SPEED_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 0)) + "% Movement Speed"; + break; + } + case EFFECT_TYPE_ELEMENTALSHIELD: + { + sStats = IntToString(GetEffectInteger(eEffect, 0)) + " + " + Get2DAStrRef("iprp_damagecost", "Name", GetEffectInteger(eEffect, 1)) + " (" + DamageTypeToString(GetEffectInteger(eEffect, 2)) + ")"; + break; + } + case EFFECT_TYPE_NEGATIVELEVEL: + { + sStats = "-" + IntToString(GetEffectInteger(eEffect, 0)) + " Levels"; + break; + } + case EFFECT_TYPE_CONCEALMENT: + { + string sMissChance = MissChanceToString(GetEffectInteger(eEffect, 4) - 1); + sStats = IntToString(GetEffectInteger(eEffect, 0)) + "% Concealment" + (sMissChance == "" ? "" : " (" + sMissChance + ")"); + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 1), GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3)); + break; + } + case EFFECT_TYPE_SPELL_RESISTANCE_INCREASE: + case EFFECT_TYPE_SPELL_RESISTANCE_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_SPELL_RESISTANCE_INCREASE, EFFECT_TYPE_SPELL_RESISTANCE_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 0)) + " Spell Resistance"; + break; + } + case EFFECT_TYPE_SPELL_FAILURE: + { + sStats = IntToString(GetEffectInteger(eEffect, 0)) + "% Spell Failure (Spell School: " + SpellSchoolToString(GetEffectInteger(eEffect, 1)) + ")"; + break; + } + case EFFECT_TYPE_INVISIBILITY: + { + int nInvisibilityType = GetEffectInteger(eEffect, 0); + if (nEffectIconID == EFFECT_ICON_INVISIBILITY) + bSkipDisplay = nInvisibilityType != INVISIBILITY_TYPE_NORMAL; + else if (nEffectIconID == EFFECT_ICON_IMPROVEDINVISIBILITY) + bSkipDisplay = nInvisibilityType != INVISIBILITY_TYPE_IMPROVED; + if (!bSkipDisplay) + { + sStats = (nInvisibilityType == INVISIBILITY_TYPE_IMPROVED ? "Improved " : "") + "Invisibility"; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 1), GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3)); + } + break; + } + case EFFECT_TYPE_HASTE: + { + sStats = "Hasted"; + } + } + if(!bSkipDisplay) + { + sText = sSpellName + " " + sDurationRemaining + (sStats == "" ? "" : " -> " + sStats + sRacialTypeAlignment); + if(sText != "") + { + jRow = CreateLabel(JsonArray(), " " + sText, "lbl_buff_info" + IntToString(nIndex), 700.0f, 10.0f, NUI_HALIGN_LEFT, NUI_VALIGN_TOP, 0.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 10.0; + object oSource = GetEffectCreator(eEffect); + if(GetIsObjectValid(oSource)) + { + sText = GetObjectType(oSource) ? GetName(oSource) : ""; + sText = " Creator: " + sText; + float fLength = IntToFloat(GetStringLength(sText) * 8); + jRow = CreateLabel(JsonArray(), sText, "lbl_buff_source" + IntToString(nIndex), fLength, 15.0f, NUI_HALIGN_LEFT, NUI_VALIGN_BOTTOM, 0.0); + if(oSource == oPlayer) + { + CreateButton(jRow, "Remove", "btn_remove_effect_" + IntToString(nEffectIndex++), 70.0f, 20.0f, 0.0); + jEffectID = JsonArrayInsert(jEffectID, JsonString(GetEffectLinkId(eEffect))); + fHeight += 20.0; + } + else fHeight += 15.0; + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + } + } + } + } + nIndex++; + eEffect = GetNextEffect(oPlayer); + } + float fScale = IntToFloat(GetPlayerDeviceProperty(oPlayer, PLAYER_DEVICE_PROPERTY_GUI_SCALE)) / 100.0; + float fX = IntToFloat(GetPlayerDeviceProperty(oPlayer, PLAYER_DEVICE_PROPERTY_GUI_WIDTH)); + fX = fX - (700.0 * fScale); + float fY = 50 * fScale; + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + int nToken = SetWindow(oPlayer, jLayout, AI_EFFECT_ICON_NUI, "Effect Icon Menu", + fX, fY, 700.0, fHeight * fScale, FALSE, FALSE, FALSE, TRUE, FALSE, "0e_nui"); + // Save the associate to the nui for use in 0e_nui + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oPlayer))); + jData = JsonArrayInsert(jData, JsonInt(nEffectIconID)); + jData = JsonArrayInsert(jData, jEffectID); + NuiSetUserData(oPlayer, nToken, jData); + NuiSetBind(oPlayer, nToken, "lbl_buff_name_event", JsonBool(TRUE)); + while(nIndex >= 0) + { + NuiSetBind(oPlayer, nToken, "lbl_buff_info" + IntToString(nIndex) + "_event", JsonBool(TRUE)); + NuiSetBind(oPlayer, nToken, "lbl_buff_source" + IntToString(nIndex) + "_event", JsonBool(TRUE)); + nIndex--; + } + while(nEffectIndex >= 0) + { + NuiSetBind(oPlayer, nToken, "btn_remove_effect_" + IntToString(nEffectIndex) + "_event", JsonBool(TRUE)); + NuiSetBind(oPlayer, nToken, "btn_remove_effect_" + IntToString(nEffectIndex), JsonInt(TRUE)); + nEffectIndex--; + } +} diff --git a/src/module/nss/0i_items.nss b/src/module/nss/0i_items.nss new file mode 100644 index 0000000..87d3ce7 --- /dev/null +++ b/src/module/nss/0i_items.nss @@ -0,0 +1,1243 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +Script Name: 0i_items +Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// + Include scripts for use with items. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +//#include "0i_main" +#include "0i_messages" +// Returns TRUE if oItem is a weapon. +int ai_GetIsWeapon(object oItem); +// Returns TRUE if oItem is a melee weapon. +int ai_GetIsMeleeWeapon(object oItem); +// Returns TRUE if oItem is a slashing weapon. +int ai_GetIsSlashingWeapon(object oItem); +// Returns TRUE if oItem is a piercing weapon. +int ai_GetIsPiercingWeapon(object oItem); +// Returns TRUE if oItem is a bludgeoning weapon. +int ai_GetIsBludgeoningWeapon(object oItem); +// Returns TRUE if oItem is an ammo. +int ai_GetIsAmmo(object oItem); +// Returns TRUE if oItem is a thrown weapon. +int ai_GetIsThrownWeapon(object oItem); +// Returns TRUE if oItem is able to be used single handed by oCreature. +int ai_GetIsSingleHandedWeapon(object oItem, object oCreature); +// Returns TRUE if oItem is a light weapon for oCreature. +int ai_GetIsLightWeapon(object oItem, object oCreature); +// Returns TRUE if oItem is able to be used two handed by oCreature. +int ai_GetIsTwoHandedWeapon(object oItem, object oCreature); +// Returns TRUE if oItem is a double weapon. +int ai_GetIsDoubleWeapon(object oItem); +// Returns TRUE if oCreature has a ranged weapon equiped and has ammo for it. +int ai_HasRangedWeaponWithAmmo(object oCreature); +// Returns TRUE if oItem is a ranged weapon. +int ai_GetIsRangeWeapon(object oItem); +// Returns the amount of damage the weapon oCreature is holding. +// nDamageAmount tells the function the amount of damage to return; +// 1 - Minimum, 2- Average, 3 Maximum. +// bMelee If it is not a melee weapon then return 0; +int ai_GetWeaponDamage(object oCreature, int nDamageAmount = 3, int bMelee = FALSE); +// Returns TRUE if oItem is a shield. +int ai_GetIsShield(object oItem); +// Returns the size of oItem using 1 = small to 6 = large. +int ai_GetItemSize(object oItem); +// Returns TRUE if the caller has a potion that is identified of nSpell. +int ai_CheckPotionIsIdentified(object oCreature, int nSpell); +// Returns an item from oCreature's inventory with sTag. +// bCheckEquiped will also look through the creatures equiped items. +// Returns OBJECT_INVALID if the items does not exist with sTag. +object ai_GetCreatureHasItem(object oCreature, string sTag, int bCheckEquiped = FALSE); +// Returns TRUE if oCreature can identify oItem based on the file SkillVsItemCost.2da +// Reports the findings to oPC unless oPC = OBJECT_INVALID. +// If the item can be identified by oCreature then it will be identified. +int ai_IdentifyItemVsKnowledge(object oCreature, object oItem, object oPC = OBJECT_INVALID); +// Identifies all items on oObject based on the file SkillVsItemCost.2da +// Reports the findings to oPC unless oPC = OBJECT_INVALID +// bIdentifyAll ignores the chart and does what it says! +void ai_IdentifyAllVsKnowledge(object oCreature, object oContainer, object oPC = OBJECT_INVALID); +// Will (Un)Identify all items on oCreature. +// If bIdentify is TRUE they will all be Identified, FALSE Unidentifies them. +void ai_SetIdentifyAllItems(object oCreature, int bIdentify = TRUE); +// Returns oWeapons attack bonus from either Enhancment or Attack bonus. +int ai_GetWeaponAtkBonus(object oWeapon); +// Returns oArmors armor bonus. +int ai_GetArmorBonus(object oArmor); +// Returns the maximum gold value that an item can have to be equiped. +int ai_GetMaxItemValueThatCanBeEquiped(int nLevel); +// Returns the minimum level that is required to equip this item. +int ai_GetMinimumEquipLevel(object oItem); +// Returns oCreatures total attack bonus with melee weapon (Mostly). +int ai_GetCreatureAttackBonus(object oCreature); +// Returns TRUE if oCreature can use oItem based on Class, Race, and Alignment +// restrictions. Also checks UseMagicDevice of oCreature. +int ai_CheckIfCanUseItem(object oCreature, object oItem); +// Returns TRUE if oCreature can use oItem due to feats. +int ai_GetIsProficientWith(object oCreature, object oItem); +// Gets the Average Damage on the weapon for Main and Off Hand to allow +// us to check which weapon is better for oCreature to equip. +// b2Handed set to TRUE returns only checks main avg damage. +// bOffHand set to TRUE returns the OffHand avg damage. +// if b2Handed & bOffHand are set to TRUE it returns main & offhand added together. +// if oOffWeapon is Set then it will return the Avg Damage assuming oItem is +// the Main weapon and oOffWeapon is in the Offhand. +float ai_GetMeleeWeaponAvgDmg(object oCreature, object oItem, int b2Handed = FALSE, int bOffHand = FALSE, object oOffWeapon = OBJECT_INVALID); +// Sets shield AC on the shield to allow us to check which shield is better +// for oCreature to equip. +int ai_SetShieldAC(object oCreature, object oItem); +// Returns TRUE if oItem has nItemPropertyType. +// nItemPropertySubType will not be used if its below 0. +int ai_GetHasItemProperty(object oItem, int nItemPropertyType, int nItemPropertySubType = -1); +// Returns the highest bonus Lock Picks needed to unlock nLockDC in oCreatures inventory. +object ai_GetBestPicks(object oCreature, int nLockDC); +// Removes all items from oCreature. +void ai_RemoveInventory(object oCreature); +// Copies all equiped and inventory items from oOldHenchman to oNewHenchman. +void ai_MoveInventory(object oOldHenchman, object oNewHenchman); +// Returns if oCreature is proficient with nBaseItem. +// PRC lets the creature use any weapon, but gives -4 penalty if not proficient. +int prc_IsProficient(object oCreature, int nBaseItem); + +int ai_GetIsWeapon(object oItem) +{ + int nType = GetBaseItemType(oItem); + int nWeaponType = StringToInt(Get2DAString("baseitems", "WeaponType", nType)); + if(nWeaponType) return TRUE; + return FALSE; +} +int ai_GetIsMeleeWeapon(object oItem) +{ + int nType = GetBaseItemType(oItem); + if(StringToInt(Get2DAString("baseitems", "WeaponType", nType)) > 0) + { + if(StringToInt(Get2DAString("baseitems", "RangedWeapon", nType)) == 0) return TRUE; + } + return FALSE; +} +int ai_GetIsSingleHandedWeapon(object oItem, object oCreature) +{ + if(!ai_GetIsMeleeWeapon(oItem)) return FALSE; + int nBaseItemType = GetBaseItemType(oItem); + // Weapon Size in the baseitems.2da is 1 = Tiny, 2 = Small, 3 = Medium, 4 = Large. + int nWeaponSize = StringToInt(Get2DAString("baseitems", "WeaponSize", nBaseItemType)); + // Creature size is 1 = Tiny, 2 = Small, 3 = Medium, 4 = Large. + int nCreatureSize = GetCreatureSize(oCreature); + return nWeaponSize <= nCreatureSize; +} +int ai_GetIsLightWeapon(object oItem, object oCreature) +{ + if(!ai_GetIsMeleeWeapon(oItem)) return FALSE; + int nBaseItemType = GetBaseItemType(oItem); + // Weapon Size in the baseitems.2da is 1 = Tiny, 2 = Small, 3 = Medium, 4 = Large. + int nWeaponSize = StringToInt(Get2DAString("baseitems", "WeaponSize", nBaseItemType)); + // Creature size is 1 = Tiny, 2 = Small, 3 = Medium, 4 = Large. + int nCreatureSize = GetCreatureSize(oCreature); + return nWeaponSize < nCreatureSize; +} +int ai_GetIsTwoHandedWeapon(object oItem, object oCreature) +{ + if(!ai_GetIsMeleeWeapon(oItem)) return FALSE; + int nBaseItemType = GetBaseItemType(oItem); + // Weapon Size in the baseitems.2da is 1 = Tiny, 2 = Small, 3 = Medium, 4 = Large. + int nWeaponSize = StringToInt(Get2DAString("baseitems", "WeaponSize", nBaseItemType)); + // Ranged weapons have a value greater than 0 in this field. So melee weapons have 0. + int nWeaponMelee = StringToInt(Get2DAString("baseitems", "RangedWeapon", nBaseItemType)); + // Creature size is 1 = Tiny, 2 = Small, 3 = Medium, 4 = Large. + int nCreatureSize = GetCreatureSize(oCreature); + return (nWeaponMelee == 0 && nWeaponSize > nCreatureSize); +} +int ai_GetIsDoubleWeapon(object oItem) +{ + int iType = GetBaseItemType(oItem); + switch(iType) + { + case BASE_ITEM_DIREMACE: + case BASE_ITEM_DOUBLEAXE: + case BASE_ITEM_TWOBLADEDSWORD: return TRUE; + } + return FALSE; +} +int ai_GetIsSlashingWeapon(object oItem) +{ + int iBaseItemType = GetBaseItemType(oItem); + int iWeaponType = StringToInt(Get2DAString("baseitems", "WeaponType", iBaseItemType)); + // Weapon Type in the baseitems.2da is 1 = Piercing, 2 = Bludgeoning, 3 = Slashing. + return (iWeaponType == 3); +} +int ai_GetIsPiercingWeapon(object oItem) +{ + int iBaseItemType = GetBaseItemType(oItem); + int iWeaponType = StringToInt(Get2DAString("baseitems", "WeaponType", iBaseItemType)); + // Weapon Type in the baseitems.2da is 1 = Piercing, 2 = Bludgeoning, 3 = Slashing. + return (iWeaponType == 1); +} +int ai_GetIsBludgeoningWeapon(object oItem) +{ + int iBaseItemType = GetBaseItemType(oItem); + int iWeaponType = StringToInt(Get2DAString("baseitems", "WeaponType", iBaseItemType)); + // Weapon Type in the baseitems.2da is 1 = Piercing, 2 = Bludgeoning, 3 = Slashing. + return (iWeaponType == 2); +} +int ai_GetIsAmmo(object oItem) +{ + switch(GetBaseItemType(oItem)) + { + case BASE_ITEM_ARROW: return TRUE; + case BASE_ITEM_BOLT: return TRUE; + case BASE_ITEM_BULLET: return TRUE; + } + return FALSE; +} +int ai_GetIsThrownWeapon(object oItem) +{ + switch(GetBaseItemType(oItem)) + { + case BASE_ITEM_DART: return TRUE; + case BASE_ITEM_SHURIKEN: return TRUE; + case BASE_ITEM_THROWINGAXE: return TRUE; + } + return FALSE; +} +int ai_HasRangedWeaponWithAmmo(object oCreature) +{ + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature); + if(!GetWeaponRanged(oWeapon)) return FALSE; + int nAmmoType, nWeaponType = GetBaseItemType(oWeapon); + object oAmmo = OBJECT_INVALID; + if(nWeaponType == BASE_ITEM_LONGBOW || nWeaponType == BASE_ITEM_SHORTBOW) + { + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_UNLIMITED_AMMUNITION)) return TRUE; + if(GetItemInSlot(INVENTORY_SLOT_ARROWS, oCreature) != OBJECT_INVALID) return TRUE; + nAmmoType = BASE_ITEM_ARROW; + } + else if(nWeaponType == BASE_ITEM_LIGHTCROSSBOW || nWeaponType == BASE_ITEM_HEAVYCROSSBOW) + { + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_UNLIMITED_AMMUNITION)) return TRUE; + if(GetItemInSlot(INVENTORY_SLOT_BOLTS, oCreature) != OBJECT_INVALID) return TRUE; + nAmmoType = BASE_ITEM_BOLT; + } + else if(nWeaponType == BASE_ITEM_SLING) + { + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_UNLIMITED_AMMUNITION)) return TRUE; + if(GetItemInSlot(INVENTORY_SLOT_BULLETS, oCreature) != OBJECT_INVALID) return TRUE; + nAmmoType = BASE_ITEM_BULLET; + } + else if(nWeaponType == BASE_ITEM_THROWINGAXE) return TRUE; + else if(nWeaponType == BASE_ITEM_SHURIKEN) return TRUE; + else if(nWeaponType == BASE_ITEM_DART) return TRUE; + // They don't have any ammo in the slot, but do they have ammo in the inventory? + oAmmo = GetFirstItemInInventory(oCreature); + while(oAmmo != OBJECT_INVALID) + { + if(GetBaseItemType(oAmmo) == nAmmoType) + { + if(nAmmoType == BASE_ITEM_ARROW) ActionEquipItem(oAmmo, INVENTORY_SLOT_ARROWS); + else if(nAmmoType == BASE_ITEM_BOLT) ActionEquipItem(oAmmo, INVENTORY_SLOT_BOLTS); + else if(nAmmoType == BASE_ITEM_BULLET) ActionEquipItem(oAmmo, INVENTORY_SLOT_BULLETS); + return TRUE; + } + oAmmo = GetNextItemInInventory(oCreature); + } + //ai_Debug("0i_items", "254", "They are out of ammo!"); + return FALSE; +} +int ai_GetIsRangeWeapon(object oItem) +{ + switch(GetBaseItemType(oItem)) + { + case BASE_ITEM_DART: return TRUE; + case BASE_ITEM_HEAVYCROSSBOW: return TRUE; + case BASE_ITEM_LIGHTCROSSBOW: return TRUE; + case BASE_ITEM_LONGBOW: return TRUE; + case BASE_ITEM_SHORTBOW: return TRUE; + case BASE_ITEM_SHURIKEN: return TRUE; + case BASE_ITEM_SLING: return TRUE; + case BASE_ITEM_THROWINGAXE: return TRUE; + } + return FALSE; +} +int ai_GetIsFinesseWeapon(object oCreature, object oItem) +{ + switch(GetBaseItemType(oItem)) + { + case BASE_ITEM_DAGGER: return TRUE; + case BASE_ITEM_HANDAXE: return TRUE; + case BASE_ITEM_KAMA: return TRUE; + case BASE_ITEM_KUKRI: return TRUE; + case BASE_ITEM_LIGHTHAMMER: return TRUE; + case BASE_ITEM_LIGHTMACE: return TRUE; + case BASE_ITEM_RAPIER: + { + if(GetCreatureSize(oCreature) > CREATURE_SIZE_SMALL) return TRUE; + return FALSE; + } + case BASE_ITEM_SHORTSWORD: return TRUE; + case BASE_ITEM_SICKLE: return TRUE; + case BASE_ITEM_WHIP: return TRUE; + } + return FALSE; +} +int ai_GetWeaponDamage(object oCreature, int nDamageAmount = 3, int bMelee = FALSE) +{ + object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature); + if(bMelee && ai_GetIsRangeWeapon(oItem)) return 0; + int nWeaponDamage = GetLocalInt(oItem, "AI_WEAPON_DAMAGE"); + if(!nWeaponDamage) + { + if(ai_GetIsMeleeWeapon(oItem)) + { + nWeaponDamage = GetAbilityModifier(ABILITY_STRENGTH, oCreature); + if(ai_GetIsTwoHandedWeapon(oItem, oCreature)) nWeaponDamage += nWeaponDamage / 2; + } + int nWeaponDice = StringToInt(Get2DAString("baseitems", "NumDice", GetBaseItemType(oItem))); + int nWeaponDie = StringToInt(Get2DAString("baseitems", "DieToRoll", GetBaseItemType(oItem))); + if(nDamageAmount == 1) + { + nWeaponDamage += nWeaponDice; + } + else if(nDamageAmount == 2) + { + nWeaponDamage += nWeaponDice * nWeaponDie / 2; + } + else + { + nWeaponDamage += nWeaponDice * nWeaponDie; + } + SetLocalInt(oItem, "AI_WEAPON_DAMAGE", nWeaponDamage); + } + return nWeaponDamage; +} +int ai_GetIsShield(object oItem) +{ + switch(GetBaseItemType(oItem)) + { + case BASE_ITEM_SMALLSHIELD: return TRUE; + case BASE_ITEM_LARGESHIELD: return TRUE; + case BASE_ITEM_TOWERSHIELD: return TRUE; + } + return FALSE; + } +int ai_GetItemSize(object oItem) +{ + int nBaseItemType = GetBaseItemType(oItem); + int nWidth = StringToInt(Get2DAString("baseitems", "InvSlotWidth", nBaseItemType)); + int nHeight = StringToInt(Get2DAString("baseitems", "InvSlotHeight", nBaseItemType)); + return nWidth + nHeight - 1; +} +int ai_CheckPotionIsIdentified(object oCreature, int nSpell) +{ + int nPotionSpell; + itemproperty ipPotion; + object oPotion = GetFirstItemInInventory(oCreature); + while(oPotion != OBJECT_INVALID) + { + if(GetIdentified(oPotion)) + { + ipPotion = GetFirstItemProperty(oPotion); + nPotionSpell = GetItemPropertySubType(ipPotion); + nPotionSpell = StringToInt(Get2DAString("iprp_spells", "SpellIndex", nPotionSpell)); + //ai_Debug("0i_talents", "318", "Potion ID'ed? nSpell: " + IntToString(nSpell) + " nPotionSpell: " + IntToString(nPotionSpell)); + if(nSpell == nPotionSpell) return TRUE; + } + oPotion = GetNextItemInInventory(oCreature); + } + return FALSE; +} +object ai_GetCreatureHasItem(object oCreature, string sTag, int bCheckEquiped = FALSE) +{ + // Cycle through the creatures unequiped items. + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + if(GetTag(oItem) == sTag) return oItem; + oItem = GetNextItemInInventory(oCreature); + } + // Should we check the creatures equiped items. + // If we have already found it then stop looking. + int nSlot = 0; + if(bCheckEquiped) + { + // Check all of the creatures slots(0 - 17). + while(nSlot <= 17) + { + oItem = GetItemInSlot(nSlot, oCreature); + if(GetTag(oItem) == sTag) return oItem; + nSlot ++; + } + } + return OBJECT_INVALID; +} +int ai_IdentifyItemVsKnowledge(object oCreature, object oItem, object oPC = OBJECT_INVALID) +{ + if(GetIdentified(oItem)) return FALSE; + int nKnowledge = GetSkillRank(SKILL_LORE, oCreature); + int nItemValue; // gold value of item + string sBaseName; + string sMaxValue = Get2DAString("SkillVsItemCost", "DeviceCostMax", nKnowledge); + int nMaxValue = StringToInt(sMaxValue); + // * Handle overflow(November 2003 - BK) + if(sMaxValue == "") nMaxValue = 0; + // Setting TRUE to get the true value of the item. + SetIdentified(oItem, TRUE); + nItemValue = GetGoldPieceValue(oItem); + if(nMaxValue <= nItemValue) + { + SetIdentified(oItem, FALSE); + if(oPC != OBJECT_INVALID) + { + sBaseName = GetStringByStrRef(StringToInt(Get2DAString("baseitems", "name", GetBaseItemType(oItem)))); + ai_SendMessages(GetName(oCreature) + " cannot identify " + sBaseName, AI_COLOR_RED, oPC); + } + } + else + { + if(oPC != OBJECT_INVALID) ai_SendMessages(GetName(oCreature) + " has identified " + GetName(oItem), AI_COLOR_GREEN, oPC); + return TRUE; + } + return FALSE; +} +void ai_IdentifyAllVsKnowledge(object oCreature, object oContainer, object oPC = OBJECT_INVALID) +{ + // SkillVsItemCost 2da starts 1 at 0 ... go figure! + int nKnowledge = GetSkillRank(SKILL_LORE, oCreature) - 1; + int nItemValue; // gold value of item + string sBaseName; + string sMaxValue = Get2DAString("SkillVsItemCost", "DeviceCostMax", nKnowledge); + int nMaxValue = StringToInt(sMaxValue); + // * Handle overflow(November 2003 - BK) + if(sMaxValue == "") nMaxValue = 0; + object oItem = GetFirstItemInInventory(oContainer); + while(oItem != OBJECT_INVALID) + { + if(!GetIdentified(oItem)) + { + // setting TRUE to get the true value of the item. + SetIdentified(oItem, TRUE); + nItemValue = GetGoldPieceValue(oItem); + if(nMaxValue < nItemValue) + { + SetIdentified(oItem, FALSE); + sBaseName = GetStringByStrRef(StringToInt(Get2DAString("baseitems", "name", GetBaseItemType(oItem)))); + if(oPC != OBJECT_INVALID) ai_SendMessages(GetName(oCreature) + " cannot identify " + sBaseName, AI_COLOR_RED, oPC); + } + else if(oPC != OBJECT_INVALID) ai_SendMessages(GetName(oCreature) + " has identified " + GetName(oItem), AI_COLOR_GREEN, oPC); + } + oItem = GetNextItemInInventory(oContainer); + } +} +void ai_SetIdentifyAllItems(object oCreature, int bIdentify = TRUE) +{ + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + if(!GetIdentified(oItem)) SetIdentified(oItem, bIdentify); + oItem = GetNextItemInInventory(oCreature); + } + int nSlot; + oItem = GetItemInSlot(nSlot, oCreature); + while(nSlot < 11) + { + if(!GetIdentified(oItem)) SetIdentified(oItem, bIdentify); + oItem = GetItemInSlot(++nSlot, oCreature); + } +} +int ai_GetWeaponAtkBonus(object oWeapon) +{ + int nCounter = 1, nPropertyType, nBonus; + // Get first property + itemproperty ipProperty = GetFirstItemProperty(oWeapon); + while(GetIsItemPropertyValid(ipProperty)) + { + // Check to see if the property type matches. + nPropertyType = GetItemPropertyType(ipProperty); + if(nPropertyType == 6/*ITEMPROPERTY_ENHANCEMENT*/ || + nPropertyType == 56/*ITEMPROPERTY_ATTACKBONUS*/) + { + nBonus += GetItemPropertyCostTableValue(ipProperty); + } + // Get the next property. + ipProperty = GetNextItemProperty(oWeapon); + } + //ai_Debug("0i_items", "438", GetName(oWeapon) + " attack bonus is " + IntToString(nBonus)); + return nBonus; +} +int ai_GetArmorBonus(object oArmor) +{ + int nTorsoValue = GetItemAppearance(oArmor, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_TORSO); + //ai_Debug("0i_items", "444", "Armor Bonus: " + Get2DAString("parts_chest.2da", "ACBONUS", nTorsoValue)); + return StringToInt(Get2DAString("parts_chest", "ACBONUS", nTorsoValue)); +} +int ai_GetMaxItemValueThatCanBeEquiped(int nLevel) +{ + return StringToInt(Get2DAString("itemvalue", "MAXSINGLEITEMVALUE", nLevel - 1)); +} +int ai_GetMinimumEquipLevel(object oItem) +{ + int nIndex, nUnIdentified; + if(!GetIdentified(oItem)) + { + nUnIdentified = TRUE; + SetIdentified(oItem, TRUE); + } + int nGoldValue = GetGoldPieceValue(oItem); + if(nUnIdentified) SetIdentified(oItem, FALSE); + int n2daMaxRow = Get2DARowCount("itemvalue"); + while(nIndex < n2daMaxRow) + { + if(nGoldValue <= StringToInt(Get2DAString("itemvalue", "MAXSINGLEITEMVALUE", nIndex))) + { + return nIndex + 1; + } + nIndex++; + } + return nIndex; +} +int ai_GetCreatureAttackBonus(object oCreature) +{ + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature); + int nAtkBonus = GetBaseAttackBonus(oCreature); + if((GetHasFeat(FEAT_WEAPON_FINESSE, oCreature) && ai_GetIsFinesseWeapon(oCreature, oWeapon)) || + ai_GetIsRangeWeapon(oWeapon)) + { + nAtkBonus += GetAbilityModifier(ABILITY_DEXTERITY, oCreature); + } + else nAtkBonus += GetAbilityModifier(ABILITY_STRENGTH, oCreature); + if(ai_GetIsMeleeWeapon(oWeapon)) nAtkBonus += ai_GetWeaponAtkBonus(oWeapon); + return nAtkBonus; + } +int ai_CheckUseMagicDevice(object oCreature, string sColumn, object oItem) +{ + if(!GetLocalInt(GetModule(), AI_RULE_ALLOW_UMD)) return FALSE; + int nUMD = GetSkillRank(SKILL_USE_MAGIC_DEVICE, oCreature); + //ai_Debug("0i_talents", "1600", GetName(oCreature) + " is check UMD: " + IntToString(nUMD)); + if(nUMD < 1) return FALSE; + int nDC, nIndex, nItemValue = GetGoldPieceValue(oItem); + while(nIndex < 55) + { + //ai_Debug("0i_talents", "1605", GetName(oItem) + " has a value of " + + // Get2DAString("skillvsitemcost", "DeviceCostMax", nIndex) + + // " nIndex: " + IntToString(nIndex)); + if(nItemValue < StringToInt(Get2DAString("skillvsitemcost", "DeviceCostMax", nIndex))) + { + //ai_Debug("0i_talents", "1610", "nUMD >= " + Get2DAString("skillvsitemcost", sColumn, nIndex)); + if(nUMD >= StringToInt(Get2DAString("skillvsitemcost", sColumn, nIndex))) return TRUE; + return FALSE; + } + nIndex++; + } + return FALSE; +} +int ai_CheckIfCanUseItem(object oCreature, object oItem) +{ + int bAlign, bClass, bRace, bAlignLimit, bClassLimit, bRaceLimit; + int nIprpSubType, nItemPropertyType; + // Check to see if this item is limited to a specific alignment, class, or race. + int nAlign1 = GetAlignmentLawChaos(oCreature); + int nAlign2 = GetAlignmentGoodEvil(oCreature); + int nRace = GetRacialType(oCreature); + //ai_Debug("0i_items", "615", "nAlign1: " + IntToString(nAlign1) + + // " nAlign2: " + IntToString(nAlign2) + " nRace: " + IntToString(nRace)); + itemproperty ipProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProp)) + { + nItemPropertyType = GetItemPropertyType(ipProp); + //ai_Debug("0i_items", "620", "ItempropertyType(62/63/64/65): " + IntToString(nItemPropertyType)); + if(nItemPropertyType == ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP) + { + bAlignLimit = TRUE; + // SubType is the group index for iprp_aligngrp.2da + nIprpSubType = GetItemPropertySubType(ipProp); + //ai_Debug("0i_items", "626", "nIprpSubType: " + IntToString(nIprpSubType)); + if(nIprpSubType == nAlign1 || nIprpSubType == nAlign2) bAlign = TRUE; + } + else if(nItemPropertyType == ITEM_PROPERTY_USE_LIMITATION_SPECIFIC_ALIGNMENT) + { + bAlignLimit = TRUE; + // SubType is the alignment index for iprp_alignment.2da + nIprpSubType = GetItemPropertySubType(ipProp); + //ai_Debug("0i_items", "634", "nIprpSubType: " + IntToString(nIprpSubType)); + if(nIprpSubType == 0 && nAlign1 == 2 && nAlign2 == 4) bAlign = TRUE; + else if(nIprpSubType == 1 && nAlign1 == 2 && nAlign2 == 1) bAlign = TRUE; + else if(nIprpSubType == 2 && nAlign1 == 2 && nAlign2 == 5) bAlign = TRUE; + else if(nIprpSubType == 3 && nAlign1 == 1 && nAlign2 == 4) bAlign = TRUE; + else if(nIprpSubType == 4 && nAlign1 == 1 && nAlign2 == 1) bAlign = TRUE; + else if(nIprpSubType == 5 && nAlign1 == 1 && nAlign2 == 5) bAlign = TRUE; + else if(nIprpSubType == 6 && nAlign1 == 3 && nAlign2 == 4) bAlign = TRUE; + else if(nIprpSubType == 7 && nAlign1 == 3 && nAlign2 == 1) bAlign = TRUE; + else if(nIprpSubType == 8 && nAlign1 == 3 && nAlign2 == 5) bAlign = TRUE; + } + else if(nItemPropertyType == ITEM_PROPERTY_USE_LIMITATION_CLASS) + { + bClassLimit = TRUE; + // SubType is the class index for classes.2da + nIprpSubType = GetItemPropertySubType(ipProp); + //ai_Debug("0i_items", "650", "nIprpSubType: " + IntToString(nIprpSubType)); + int nClassPosition = 1; + int nClass = GetClassByPosition(nClassPosition, oCreature); + while(nClassPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + if(nIprpSubType == nClass) bClass = TRUE; + nClass = GetClassByPosition(++nClassPosition, oCreature); + } + } + else if(nItemPropertyType == ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE) + { + bRaceLimit = TRUE; + // SubType is the race index for racialtypes.2da + nIprpSubType = GetItemPropertySubType(ipProp); + //ai_Debug("0i_items", "664", "nIprpSubType: " + IntToString(nIprpSubType)); + if(nIprpSubType == nRace) bRace = TRUE; + } + ipProp = GetNextItemProperty(oItem); + } + //ai_Debug("0i_items", "669", "bAlignLimit: " + IntToString(bAlignLimit) + " bAlign: " + IntToString(bAlign) + + // " bClassLimit: " + IntToString(bClassLimit) + " bClass: " + IntToString(bClass) + + // " bRaceLimit: " + IntToString(bRaceLimit) + " bRace: " + IntToString(bRace)); + if(bClassLimit && !bClass && !ai_CheckUseMagicDevice(oCreature, "SkillReq_Class", oItem)) return FALSE; + if(bRaceLimit && !bRace && !ai_CheckUseMagicDevice(oCreature, "SkillReq_Race", oItem)) return FALSE; + if(bAlignLimit && !bAlign && !ai_CheckUseMagicDevice(oCreature, "SkillReq_Align", oItem)) return FALSE; + return TRUE; +} +int ai_GetIsProficientWith(object oCreature, object oItem) +{ + int nWeaponType = GetBaseItemType(oItem); + // In the PRC you can equip any weapon. + if(GetLocalInt(GetModule(), AI_USING_PRC)) return TRUE; + int nFeat = StringToInt(Get2DAString("baseitems", "ReqFeat0", nWeaponType)); + // If it is 0 then it doesn't require a feat or we are at the end of the + // feat requirements. + if(nFeat == 0) return TRUE; + if(GetHasFeat(nFeat, oCreature)) return TRUE; + nFeat = StringToInt(Get2DAString("baseitems", "ReqFeat1", nWeaponType)); + if(nFeat == 0) return FALSE; + if(GetHasFeat(nFeat, oCreature)) return TRUE; + nFeat = StringToInt(Get2DAString("baseitems", "ReqFeat2", nWeaponType)); + if(nFeat == 0) return FALSE; + if(GetHasFeat(nFeat, oCreature)) return TRUE; + nFeat = StringToInt(Get2DAString("baseitems", "ReqFeat3", nWeaponType)); + if(nFeat == 0) return FALSE; + if(GetHasFeat(nFeat, oCreature)) return TRUE; + nFeat = StringToInt(Get2DAString("baseitems", "ReqFeat4", nWeaponType)); + if(nFeat == 0) return FALSE; + if(GetHasFeat(nFeat, oCreature)) return TRUE; + return FALSE; +} +float ai_GetMeleeWeaponAvgDmg(object oCreature, object oItem, int b2Handed = FALSE, int bOffHand = FALSE, object oOffWeapon = OBJECT_INVALID) +{ + // Has this weapon already been calculated for this creature? + if(oCreature == GetLocalObject(oItem, "AI_CREATURE_POSSESSION")) + { + // Return the Main weapons Avg Damage while using a weapon in the off hand. + if(oOffWeapon != OBJECT_INVALID) + { + // We recalculate all OffWeapon avg damage unless its a double weapon. + if(oOffWeapon == oItem) + { + float fMain2WDmg = GetLocalFloat(oItem, "AI_MAIN_2W_HAND_AVG_DMG"); + // If they passed that this is a 2handed weapon then return the total + // Avg Dmg for oItem. Used for double weapons. + if(b2Handed) + { + fMain2WDmg += ai_GetMeleeWeaponAvgDmg(oCreature, oItem, FALSE, TRUE); + } + if(AI_DEBUG) ai_Debug("0i_items", "611", GetName(oItem) + " avg dmg with Offhand weapon (" + GetName(oOffWeapon) + ") " + FloatToString(fMain2WDmg, 0, 2)); + return fMain2WDmg; + } + } + // Return the avg dmg for oItem assuming it is in the OffHand. + else if(bOffHand) + { + float fOffHandDmg = GetLocalFloat(oItem, "AI_OFFHAND_AVG_DMG"); + if(AI_DEBUG) ai_Debug("0i_items", "618", GetName(oItem) + " fOffHandAvgDmg: " + FloatToString(fOffHandDmg, 0, 2)); + return fOffHandDmg; + } + // If we get here then Return the avg dmg for oItem assuming its in the main hand. + else + { + float fMainDmg = GetLocalFloat(oItem, "AI_AVG_DMG"); + if(AI_DEBUG)ai_Debug("0i_items", "623", GetName(oItem) + " fMainDmg: " + FloatToString(fMainDmg, 0, 2)); + return fMainDmg; + } + } + // Set the creature to this item that we are calculationg the avg damages for. + SetLocalObject(oItem, "AI_CREATURE_POSSESSION", oCreature); + int nItemType = GetBaseItemType(oItem); + // Figure average damage for one attack, or two with two weapons. + // We are keeping it simple to reduce time and checks. + // Get the weapons base stats. + int nMinDmg = StringToInt(Get2DAString("baseitems", "NumDice", nItemType)); + int nMaxDmg = nMinDmg * StringToInt(Get2DAString("baseitems", "DieToRoll", nItemType)); + int nThreat = StringToInt(Get2DAString("baseitems", "CritThreat", nItemType)); + int nMultiplier = StringToInt(Get2DAString("baseitems", "CritHitMult", nItemType)); + int nIndex, nBonusMinDmg, nBonusMaxDmg, nItemPropertyType, nNumDice; + // We set ToHit to 10 for a 50% chance to hit without modifiers. + float fCritBonusDmg, fToHit = 10.0; + if(GetLocalInt(GetModule(), AI_USING_PRC)) + { + if(!prc_IsProficient(oCreature, nItemType)) fToHit -= 4.0; + } + // Check oCreature's feats. + if(GetHasFeat(FEAT_WEAPON_FINESSE, oCreature) && + ai_GetIsLightWeapon(oItem, oCreature)) + { + // Add Dexterity modifier to the Attack bonus. + nIndex = GetAbilityModifier(ABILITY_DEXTERITY, oCreature); + } + else + { + // Add Strength modifier to the attack bonus. + nIndex = GetAbilityModifier(ABILITY_STRENGTH, oCreature); + // Add 1/2 strength modifier to damage for 2handed weapons, but not Double weapons. + if(b2Handed && !bOffHand) + { + nMinDmg += nIndex / 2; + nMaxDmg += nIndex / 2; + } + } + fToHit += nIndex; + if(GetHasFeat(StringToInt(Get2DAString("baseitems", "WeaponFocusFeat", nItemType)), oCreature, TRUE)) + { + fToHit += 1.0; + if(GetHasFeat(StringToInt(Get2DAString("baseitems", "WeaponSpecializationFeat", nItemType)), oCreature, TRUE)) + { + nMinDmg += 2; + nMaxDmg += 2; + } + if(GetHasFeat(StringToInt(Get2DAString("baseitems", "EpicWeaponFocusFeat", nItemType)), oCreature, TRUE)) + { + fToHit += 2.0; + if(GetHasFeat(StringToInt(Get2DAString("baseitems", "EpicWeaponSpecializationFeat", nItemType)), oCreature, TRUE)) + { + nMinDmg += 4; + nMaxDmg += 4; + } + } + } + if(GetHasFeat(StringToInt(Get2DAString("baseitems", "WeaponImprovedCriticalFeat", nItemType)), oCreature, TRUE)) + { + nMultiplier += nMultiplier; + if(GetHasFeat(StringToInt(Get2DAString("baseitems", "EpicWeaponOverwhelmingCriticalFeat", nItemType)), oCreature, TRUE)) + { + if(nMultiplier > 3) fCritBonusDmg = 10.5; + else if(nMultiplier == 3) fCritBonusDmg = 7.0; + else fCritBonusDmg = 3.5; + } + } + // Check oItem's properties. + itemproperty ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + nItemPropertyType = GetItemPropertyType(ipProperty); + if(nItemPropertyType == ITEM_PROPERTY_ENHANCEMENT_BONUS) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + nBonusMinDmg += nIndex; + nBonusMaxDmg += nIndex; + fToHit += IntToFloat(nIndex); + } + else if(nItemPropertyType == ITEM_PROPERTY_DAMAGE_BONUS) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + nNumDice = StringToInt(Get2DAString("iprp_damagecost", "NumDice", nIndex)); + nBonusMinDmg += nNumDice; + nBonusMaxDmg += nNumDice * StringToInt(Get2DAString("iprp_damagecost", "Die", nIndex)); + } + else if(nItemPropertyType == ITEM_PROPERTY_ATTACK_BONUS) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + fToHit += IntToFloat(nIndex); + } + else if(nItemPropertyType == ITEM_PROPERTY_KEEN) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + nMultiplier += nMultiplier; + } + else if(nItemPropertyType == ITEM_PROPERTY_HASTE) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + nMinDmg += nMinDmg; + nMaxDmg += nMaxDmg; + nBonusMinDmg += nBonusMinDmg; + nBonusMaxDmg += nBonusMaxDmg; + nMultiplier += nMultiplier; + } + else if(nItemPropertyType == ITEM_PROPERTY_MASSIVE_CRITICALS) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + nNumDice = StringToInt(Get2DAString("iprp_damagecost", "NumDice", nIndex)); + fCritBonusDmg += IntToFloat(nNumDice) + IntToFloat(nNumDice * StringToInt(Get2DAString("iprp_damagecost", "Die", nIndex))) / 2.0; + } + else if(nItemPropertyType == ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + nBonusMinDmg -= nIndex; + nBonusMaxDmg -= nIndex; + fToHit -= IntToFloat(nIndex); + } + else if(nItemPropertyType == ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + fToHit -= IntToFloat(nIndex); + } + else if(nItemPropertyType == ITEM_PROPERTY_DECREASED_DAMAGE) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + nBonusMinDmg -= nIndex; + nBonusMaxDmg -= nIndex; + } + else if(nItemPropertyType == ITEM_PROPERTY_NO_DAMAGE) + { + // A weapon always does a minimum of 1 pnt of damage. + nMinDmg = 1; + nMaxDmg = 1; + } + ipProperty = GetNextItemProperty(oItem); + } + float fAvgDmg = IntToFloat(nMinDmg + nMaxDmg + nBonusMinDmg + nBonusMaxDmg) / 2; + // Set value for Offhand chance to hit. + float fOffHandToHit = fToHit - 10.0; + float fOffHandAvgDmg = fAvgDmg; + // Set value for Main hand chance to hit with a weapon in Off hand. + float fMain2HandToHit = fToHit - 6.0; + float fMain2HandAvgDmg = fAvgDmg; + // Calculate the avg dmg for oItem used in the main hand with no Off hand weapon. + fToHit = fToHit / 20.0; + float fThreatChance = (IntToFloat(nThreat) / 20.0) * fToHit; + fAvgDmg = (fAvgDmg * fToHit) + ((fAvgDmg * IntToFloat(nMultiplier) + fCritBonusDmg) * fThreatChance); + SetLocalFloat(oItem, "AI_AVG_DMG", fAvgDmg); + if(AI_DEBUG) ai_Debug("0i_items", "768", GetName(oItem) + " fSingleAvgDmg: " + FloatToString(fAvgDmg, 0, 2)); + if(!b2Handed || (b2Handed && oOffWeapon != OBJECT_INVALID)) + { + // Calculate chance to hit based on two weapon feats and main hand vs off hand. + if(GetHasFeat(374/*Dual_Wield*/, oCreature)) + { + if(ai_GetArmorBonus(GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature)) < 4) + { + fMain2HandToHit += 2.0; + fOffHandToHit += 6.0; + } + } + else + { + if(GetHasFeat(FEAT_AMBIDEXTERITY, oCreature)) fOffHandToHit += 4.0; + if(GetHasFeat(FEAT_TWO_WEAPON_FIGHTING, oCreature)) + { + fMain2HandToHit += 2.0; + fOffHandToHit += 2.0; + } + } + if(ai_GetIsLightWeapon(oItem, oCreature)) fOffHandToHit += 2.0; + if(oOffWeapon != OBJECT_INVALID && + (ai_GetIsLightWeapon(oOffWeapon, oCreature) || ai_GetIsDoubleWeapon(oItem))) + { + fMain2HandToHit += 2.0; + } + // Calculate the avg dmg for oItem used in the main hand with an off hand weapon. + fMain2HandToHit = fMain2HandToHit / 20.0; + fThreatChance = (IntToFloat(nThreat) / 20.0) * fMain2HandToHit; + fMain2HandAvgDmg = (fMain2HandAvgDmg * fMain2HandToHit) + ((fMain2HandAvgDmg * IntToFloat(nMultiplier) + fCritBonusDmg) * fThreatChance); + SetLocalFloat(oItem, "AI_MAIN_2W_HAND_AVG_DMG", fMain2HandAvgDmg); + if(AI_DEBUG) ai_Debug("0i_items", "768", GetName(oItem) + " fMain2HandAvgDmg: " + FloatToString(fMain2HandAvgDmg, 0, 2)); + // Calculate the avg dmg for oItem used in the off hand. + fOffHandToHit = fOffHandToHit / 20.0; + fThreatChance = (IntToFloat(nThreat) / 20.0) * fOffHandToHit; + fOffHandAvgDmg = (fOffHandAvgDmg * fOffHandToHit) + ((fOffHandAvgDmg * IntToFloat(nMultiplier) + fCritBonusDmg) * fThreatChance); + SetLocalFloat(oItem, "AI_OFFHAND_AVG_DMG", fOffHandAvgDmg); + if(AI_DEBUG) ai_Debug("0i_items", "790", GetName(oItem) + " fOffHandAvgDmg: " + FloatToString(fOffHandAvgDmg, 0, 2)); + // Return the correct value based on params passed. + if(oOffWeapon != OBJECT_INVALID) + { + // This is used only for double weapons! Must pass b2Handed = TRUE and + // oOffWeapon = the double weapon that was passes as oItem. + if(b2Handed) return fMain2HandAvgDmg + fOffHandAvgDmg; + return fMain2HandAvgDmg; + } + if(bOffHand) return fOffHandAvgDmg; + } + return fAvgDmg; +} +int ai_SetShieldAC(object oCreature, object oItem) +{ + if(oCreature == GetLocalObject(oItem, "AI_CREATURE_POSSESSION")) + { + return GetLocalInt(oItem, "AI_SHIELD_AC"); + } + // Set the creature who has this item for setting the power of. + SetLocalObject(oItem, "AI_CREATURE_POSSESSION", oCreature); + int nItemType = GetBaseItemType(oItem); + int nAC, nItemPropertyType; + if(nItemType == BASE_ITEM_SMALLSHIELD) nAC = 1; + else if(nItemType == BASE_ITEM_LARGESHIELD) nAC = 2; + else if(nItemType == BASE_ITEM_TOWERSHIELD) nAC = 3; + itemproperty ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + nItemPropertyType = GetItemPropertyType(ipProperty); + if(nItemPropertyType == ITEM_PROPERTY_AC_BONUS) + { + nAC += GetItemPropertyCostTableValue(ipProperty); + } + else if(nItemPropertyType == ITEM_PROPERTY_DECREASED_AC) + { + nAC -= GetItemPropertyCostTableValue(ipProperty); + } + else if(nItemPropertyType == ITEM_PROPERTY_HASTE) + { + nAC += 4; + } + ipProperty = GetNextItemProperty(oItem); + } + SetLocalInt(oItem, "AI_SHIELD_AC", nAC); + if(AI_DEBUG) ai_Debug("0i_items", "718", GetName(oItem) + " nAC: " + IntToString(nAC)); + return nAC; +} +int ai_GetHasItemProperty(object oItem, int nItemPropertyType, int nItemPropertySubType = -1) +{ + itemproperty ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + if(GetItemPropertyType(ipProperty) == nItemPropertyType) + { + if(nItemPropertySubType > -1) + { + if(GetItemPropertySubType(ipProperty) == nItemPropertySubType) return TRUE; + } + else return TRUE; + } + ipProperty = GetNextItemProperty(oItem); + } + return FALSE; +} +object ai_GetBestPicks(object oCreature, int nLockDC) +{ + int nSkill = GetSkillRank(SKILL_OPEN_LOCK, oCreature); + int nBonus, nBestBonus = 99, nNeededBonus = nLockDC - nSkill - 20; + //ai_Debug("0i_items", "651", "nNeededBonus: " + IntToString(nNeededBonus)); + // We don't need to use any picks! + if(nNeededBonus < 1) return OBJECT_INVALID; + object oBestItem = OBJECT_INVALID; + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + if(GetBaseItemType(oItem) == BASE_ITEM_THIEVESTOOLS) + { + // Get the tools bonus. + itemproperty ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + if(GetItemPropertyType(ipProperty) == ITEM_PROPERTY_THIEVES_TOOLS) + { + nBonus = GetItemPropertyCostTableValue(ipProperty); + if(nBonus >= nNeededBonus && nBonus < nBestBonus) + { + nBestBonus = nBonus; + oBestItem = oItem; + SetLocalInt(oBestItem, "AI_BONUS", nBestBonus); + break; + } + } + ipProperty = GetNextItemProperty(oItem); + } + } + oItem = GetNextItemInInventory(oCreature); + } + return oBestItem; +} +void ai_RemoveInventory(object oCreature) +{ + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + DestroyObject(oItem); + oItem = GetNextItemInInventory(oCreature); + } + int nIndex; + for(nIndex = 0; nIndex <= 13; nIndex++) + { + oItem = GetItemInSlot(nIndex, oCreature); + DestroyObject(oItem); + } +} +void ai_MoveInventory(object oOldHenchman, object oNewHenchman) +{ + // Move all inventory items. + object oItem = GetFirstItemInInventory(oOldHenchman); + while(oItem != OBJECT_INVALID) + { + CopyItem(oItem, oNewHenchman, TRUE); + oItem = GetNextItemInInventory(oOldHenchman); + } + // Move all equiped items and equip on oNewHenchman. + int nIndex; + object oNewItem; + for(nIndex = 0; nIndex <= 13; nIndex++) + { + oItem = GetItemInSlot(nIndex, oOldHenchman); + if(oItem != OBJECT_INVALID) + { + oNewItem = CopyItem(oItem, oNewHenchman, TRUE); + if(!GetIdentified(oNewItem)) SetIdentified(oNewItem, TRUE); + ActionEquipItem(oNewItem, nIndex); + } + } +} +int prc_IsProficient(object oCreature, int nBaseItem) +{ + switch(nBaseItem) + { + //special case: counts as simple for chitine + case BASE_ITEM_SHORTSWORD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature) + || GetHasFeat(3600/*FEAT_MINDBLADE*/, oCreature) + || (GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + && GetRacialType(oCreature) == 76/*RACIAL_TYPE_CHITINE*/) + || GetHasFeat(7901/*FEAT_WEAPON_PROFICIENCY_SHORTSWORD*/, oCreature); + + case BASE_ITEM_LONGSWORD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(3600/*FEAT_MINDBLADE*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oCreature) + || GetHasFeat(7902/*FEAT_WEAPON_PROFICIENCY_LONGSWORD*/, oCreature); + + case BASE_ITEM_BATTLEAXE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || (GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + && GetRacialType(oCreature) == 216/*RACIAL_TYPE_GNOLL*/) + || GetHasFeat(7903/*FEAT_WEAPON_PROFICIENCY_BATTLEAXE*/, oCreature); + + case BASE_ITEM_BASTARDSWORD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature) + || GetHasFeat(3600/*FEAT_MINDBLADE*/, oCreature) + || GetHasFeat(7904/*FEAT_WEAPON_PROFICIENCY_BASTARD_SWORD*/, oCreature); + + case BASE_ITEM_LIGHTFLAIL: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(7905/*FEAT_WEAPON_PROFICIENCY_LIGHT_FLAIL*/, oCreature); + + case BASE_ITEM_WARHAMMER: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(7906/*FEAT_WEAPON_PROFICIENCY_WARHAMMER*/, oCreature); + + case BASE_ITEM_LONGBOW: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oCreature) + || GetHasFeat(7907/*FEAT_WEAPON_PROFICIENCY_LONGBOW*/, oCreature); + + case BASE_ITEM_LIGHTMACE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature) + || GetHasFeat(7908/*FEAT_WEAPON_PROFICIENCY_LIGHT_MACE*/, oCreature); + + case BASE_ITEM_HALBERD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(7909/*FEAT_WEAPON_PROFICIENCY_HALBERD*/, oCreature); + + case BASE_ITEM_SHORTBOW: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oCreature) + || (GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + && GetRacialType(oCreature) == 216/*RACIAL_TYPE_GNOLL*/) + || GetHasFeat(7910/*FEAT_WEAPON_PROFICIENCY_SHORTBOW*/, oCreature); + + case BASE_ITEM_TWOBLADEDSWORD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature) + || GetHasFeat(7911/*FEAT_WEAPON_PROFICIENCY_TWO_BLADED_SWORD*/, oCreature); + + case BASE_ITEM_GREATSWORD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(7912/*FEAT_WEAPON_PROFICIENCY_GREATSWORD*/, oCreature); + + case BASE_ITEM_GREATAXE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(7913/*FEAT_WEAPON_PROFICIENCY_GREATAXE*/, oCreature); + + case BASE_ITEM_DART: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oCreature) + || GetHasFeat(7914/*FEAT_WEAPON_PROFICIENCY_DART*/, oCreature); + + case BASE_ITEM_DIREMACE: + return GetHasFeat(7915/*FEAT_WEAPON_PROFICIENCY_DIRE_MACE*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case BASE_ITEM_DOUBLEAXE: + return GetHasFeat(7916/*FEAT_WEAPON_PROFICIENCY_DOUBLE_AXE*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case BASE_ITEM_HEAVYFLAIL: + return GetHasFeat(7917/*FEAT_WEAPON_PROFICIENCY_HEAVY_FLAIL*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature); + + case BASE_ITEM_LIGHTHAMMER: + return GetHasFeat(7918/*FEAT_WEAPON_PROFICIENCY_LIGHT_HAMMER*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature); + + case BASE_ITEM_HANDAXE: + return GetHasFeat(7919/*FEAT_WEAPON_PROFICIENCY_HANDAXE*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oCreature); + + case BASE_ITEM_KAMA: + return GetHasFeat(7920/*FEAT_WEAPON_PROFICIENCY_KAMA*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case BASE_ITEM_KATANA: + return GetHasFeat(7921/*FEAT_WEAPON_PROFICIENCY_KATANA*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case BASE_ITEM_KUKRI: + return GetHasFeat(7922/*FEAT_WEAPON_PROFICIENCY_KUKRI*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case BASE_ITEM_MORNINGSTAR: + return GetHasFeat(7923/*FEAT_WEAPON_PROFICIENCY_MORNINGSTAR*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature); + + case BASE_ITEM_QUARTERSTAFF: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oCreature); + + case BASE_ITEM_RAPIER: + return GetHasFeat(7924/*FEAT_WEAPON_PROFICIENCY_RAPIER*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oCreature); + + case BASE_ITEM_SCIMITAR: + return GetHasFeat(7925/*FEAT_WEAPON_PROFICIENCY_SCIMITAR*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oCreature); + + case BASE_ITEM_SCYTHE: + return GetHasFeat(7926/*FEAT_WEAPON_PROFICIENCY_SCYTHE*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature); + + case BASE_ITEM_SHORTSPEAR: + return GetHasFeat(7927/*FEAT_WEAPON_PROFICIENCY_SHORTSPEAR*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oCreature); + + case BASE_ITEM_SHURIKEN: + return GetHasFeat(7928/*FEAT_WEAPON_PROFICIENCY_SHURIKEN*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oCreature); + + case BASE_ITEM_SICKLE: + return GetHasFeat(7929/*FEAT_WEAPON_PROFICIENCY_SICKLE*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oCreature); + + case BASE_ITEM_SLING: + return GetHasFeat(7930/*FEAT_WEAPON_PROFICIENCY_SLING*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oCreature); + + case BASE_ITEM_THROWINGAXE: + return GetHasFeat(7931/*FEAT_WEAPON_PROFICIENCY_THROWING_AXE*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(3600/*FEAT_MINDBLADE*/, oCreature); + + case BASE_ITEM_CSLASHWEAPON: + case BASE_ITEM_CPIERCWEAPON: + case BASE_ITEM_CBLUDGWEAPON: + case BASE_ITEM_CSLSHPRCWEAP: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_CREATURE, oCreature); + + case BASE_ITEM_TRIDENT: + return GetHasFeat(7932/*FEAT_WEAPON_PROFICIENCY_TRIDENT*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oCreature); + + case 124://BASE_ITEM_DOUBLE_SCIMITAR: + return GetHasFeat(7948/*FEAT_WEAPON_PROFICIENCY_DOUBLE_SCIMITAR*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case 119://BASE_ITEM_FALCHION: + return GetHasFeat(7943/*FEAT_WEAPON_PROFICIENCY_FALCHION*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature); + + case 125://BASE_ITEM_GOAD: + return GetHasFeat(7949/*FEAT_WEAPON_PROFICIENCY_GOAD*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature); + + case 122://BASE_ITEM_HEAVY_MACE: + return GetHasFeat(7946/*FEAT_WEAPON_PROFICIENCY_HEAVY_MACE*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature); + + case 115://BASE_ITEM_HEAVY_PICK: + return GetHasFeat(7939/*FEAT_WEAPON_PROFICIENCY_HEAVY_PICK*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature); + + case 116://BASE_ITEM_LIGHT_PICK: + return GetHasFeat(7940/*FEAT_WEAPON_PROFICIENCY_LIGHT_PICK*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature); + + case 121://BASE_ITEM_KATAR: + return GetHasFeat(7945/*FEAT_WEAPON_PROFICIENCY_KATAR*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case 123://BASE_ITEM_MAUL: + return GetHasFeat(7947/*FEAT_WEAPON_PROFICIENCY_MAUL*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature); + + case 118://BASE_ITEM_NUNCHAKU: + return GetHasFeat(7942/*FEAT_WEAPON_PROFICIENCY_NUNCHAKU*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case 117://BASE_ITEM_SAI: + return GetHasFeat(7941/*FEAT_WEAPON_PROFICIENCY_SAI*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case 120://BASE_ITEM_SAP: + return GetHasFeat(7944/*FEAT_WEAPON_PROFICIENCY_SAP*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature); + + //special case: counts as martial for dwarves + case BASE_ITEM_DWARVENWARAXE: + return GetHasFeat(7933/*FEAT_WEAPON_PROFICIENCY_DWARVEN_WARAXE*/, oCreature) + || (GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + && GetHasFeat(4710/*FEAT_DWARVEN*/, oCreature)) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case BASE_ITEM_WHIP: + return GetHasFeat(7934/*FEAT_WEAPON_PROFICIENCY_WHIP*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + } + return TRUE; +} +int ai_GetItemUses(object oItem, int nItemPropertySubType) +{ + int nUses; + itemproperty ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + if(GetItemPropertyType(ipProperty) == ITEM_PROPERTY_HEALERS_KIT) return GetItemStackSize(oItem); + if(nItemPropertySubType > -1) + { + if(GetItemPropertySubType(ipProperty) == nItemPropertySubType) + { + // Get how they use the item (charges or uses per day). + nUses = GetItemPropertyCostTableValue(ipProperty); + if(nUses == 1) return GetItemStackSize(oItem); + else if(nUses > 1 && nUses < 7) return GetItemCharges(oItem); + else if(nUses == 7 || nUses == 13) return 999; + else if(nUses > 7 && nUses < 13) return GetItemPropertyUsesPerDayRemaining(oItem, ipProperty); + } + } + else return TRUE; + ipProperty = GetNextItemProperty(oItem); + } + return FALSE; +} + diff --git a/src/module/nss/0i_main.nss b/src/module/nss/0i_main.nss new file mode 100644 index 0000000..a0a4674 --- /dev/null +++ b/src/module/nss/0i_main.nss @@ -0,0 +1,1328 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_main +//////////////////////////////////////////////////////////////////////////////// + Include script for handling main/basic functions not defined by other includes. + + Database structure: Json with indexes. + name (string) - The associatetype to link the data. "pc", "familiar", etc. + modes (jsonarray) - 0-aimodes (int), 1-magicmodes (int) + buttons (jsonarray) - 0-widgetbuttons (int), 1-aibuttons (int) + aidata (jsonarray) - 0-difficulty (int), 1-healoutcombat (int), 2-healincombat (int), + 3-lootrange (float), 4-lockrange (float), 5-traprange (float), + 6-Follow range (float). + lootfilters (jsonarray) - 0-maxweight (int), 1-lootfilters (int), + Item filters in min gold json array; 2-plot, 3-armor, 4-belts, 5-boots, + 6-cloaks, 7-gems, 8-gloves, 9-headgear, 10-jewelry, 11-misc, 12-potions, + 13-scrolls, 14-shields, 15-wands, 16-weapons, 17-arrow, 18-bolt, 19-bullet. + plugins (jsonarray) - 0+ (string). * Only used in the "pc" data. + location (jsonobject) - geometry (json), used in widgets for pc and associates. +*/////////////////////////////////////////////////////////////////////////////// +const string AI_TABLE = "PEPS_TABLE"; +const string AI_CAMPAIGN_DATABASE = "peps_database"; +const string AI_DM_TABLE = "DM_TABLE"; +#include "0i_constants" +#include "0i_messages" +// Sets PEPS RULES from the database to the module. +// Creates default rules if they do not exist. +void ai_SetAIRules(); +// Returns TRUE if oCreature is controlled by a player. +int ai_GetIsCharacter(object oCreature); +// Returns TRUE if oCreature is controlled by a dungeon master. +int ai_GetIsDungeonMaster(object oCreature); +// Returns the Player of oAssociate even if oAssociate is the player. +// If there is no player associated with oAssociate then it returns OBJECT_INVALID. +object ai_GetPlayerMaster(object oAssociate); +// Returns the percentage of hit points oCreature has left. +int ai_GetPercHPLoss(object oCreature); +// Returns a rolled result from sDice string. +// Example: "1d6" will be 1-6 or "3d6" will be 3-18 or 1d6+5 will be 6-11. +int ai_RollDiceString(string sDice); +// Returns the int number of a encoded 0x00000000 hex number from a string. +int ai_HexStringToInt(string sString); +// Returns cosine of the angle between oObject1 and oObject2 +float ai_GetCosAngleBetween(object oObject1, object oObject2); +// Returns a string from sString with only characters in sLegal. +// Used to remove illegal characters for databases. +string ai_RemoveIllegalCharacters(string sString, string sLegal = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"); +// Returns the total levels of oCreature. +int ai_GetCharacterLevels(object oCreature); +// Returns a string where sFind is replaced in any occurrence of sSource with sReplace. +string ai_StringReplaceText(string sSource, string sFind, string sReplace); +// Returns a string of characters between the nIndex of predefined markers of +// sSeperator in sText. +// nIndex is the number of the data we are searching for in the array. +// A 0 nIndex is the first item in the text array. +// sSeperator is the character that seperates the array(Usefull for Multiple arrays). +string ai_GetStringArray(string sText, int nIndex, string sSeperator = ":"); +// Returns a string of characters between the nIndex of predefined markers of +// sSeperator in sText where sField has been set. +// sText is the text holding the array. +// nIndex is the array number in the data we are searching for. +// A 0 nIndex is the first item in the text array. +// sField is the field of characters to replace that index. +// sSeperator is the character that seperates the array(Usefull for Multiple arrays). +string ai_SetStringArray(string sText, int nIndex, string sField, string sSeperator = ":"); +// Returns the number of magical properties oItem has. +int ai_GetNumberOfProperties(object oItem); +// Checks if the campaign database table has been created and initialized. +void ai_CheckCampaignDataAndInitialize(); +// Checks if the dm database table and data has been created and initialized of oDM. +void ai_CheckDMDataAndInitialize(object oDM); +// Sets json to a campaign database. +void ai_SetCampaignDbJson(string sDataField, json jData, string sName = "PEPS_DATA", string sTable = AI_TABLE); +// Gets json from a campaign database. +json ai_GetCampaignDbJson(string sDataField, string sName = "PEPS_DATA", string sTable = AI_TABLE); +// Checks if oMaster has the Table created for Associate data. +// If no table found then the table is created and then initialized. +void ai_CheckAssociateDataAndInitialize(object oPlayer, string sAssociateType); +// Returns the associatetype int string format for oAssociate. +// They are pc, familar, companion, summons, henchman is the henchmans tag +string ai_GetAssociateType(object oPlayer, object oAssociate); +// Sets nData to sDataField for sAssociateType that is on oPlayer. +// sDataField can be modes, magicmodes, lootmodes, widgetbuttons, aibuttons, magic, +// healoutcombat, healincombat, mingold*. +void ai_SetAssociateDbInt(object oPlayer, string sAssociateType, string sDataField, int nData, string sTable = AI_TABLE); +// Returns nData from sDataField for sAssociateType that is on oPlayer. +// sDataField can be modes, magicmodes, lootmodes, widgetbuttons, aibuttons, magic, +// healoutcombat, healincombat, mingold*. +int ai_GetAssociateDbInt(object oPlayer, string sAssociateType, string sDataField, string sTable = AI_TABLE); +// Sets fData to sDataField for sAssociateType that is on oPlayer. +// sDataField can be lootrange, lockrange, traprange. +void ai_SetAssociateDbFloat(object oPlayer, string sAssociatetype, string sDataField, float fData, string sTable = AI_TABLE); +// Returns fData from sDataField for sAssociateType that is on oPlayer. +// sDataField can be lootrange, lockrange, traprange. +float ai_GetAssociateDbFloat(object oPlayer, string sAssociateType, string sDataField, string sTable = AI_TABLE); +// sDataField should be one of the data fields for that table. +// jData is the json data to be saved. +void ai_SetAssociateDbJson(object oPlayer, string sAssociateType, string sDataField, json jData, string sTable = AI_TABLE); +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +json ai_GetAssociateDbJson(object oPlayer, string sAssociateType, string sDataField, string sTable = AI_TABLE); +// Saves Associate AIModes and MagicModes to the database. +void aiSaveAssociateModesToDb(object oPlayer, object oAssociate); +// Checks Associate local data and if none is found will initialize or load the +// correct data for oAssociate. +void ai_CheckAssociateData(object oPlayer, object oAssociate, string sAssociateType, int bLoad = FALSE); +// Checks DM's local data and if none is found will initizlize or load the +// correct data for oPlayer. +void ai_CheckDMData(object oPlayer); +// Adds to jPlugins functions after checking if the plugin can be installed. +json ai_Plugin_Add(object oPC, json jPlugins, string sPluginScript); +// Updates the players Plugin list and saves to the database. +json ai_UpdatePluginsForPC(object oPC); +// Updates the DM's Plugin list and saves to the database. +json ai_UpdatePluginsForDM (object oPC); +// Runs all plugins that are loaded into the database. +void ai_StartupPlugins(object oPC); +void ai_SetAIRules() +{ + object oModule = GetModule(); + ai_CheckCampaignDataAndInitialize(); + json jRules = ai_GetCampaignDbJson("rules"); + if(JsonGetType(JsonObjectGet(jRules, AI_RULE_MORAL_CHECKS)) == JSON_TYPE_NULL) + { + jRules = JsonObject(); + // Variable name set to a creatures full name to set debugging on. + jRules = JsonObjectSet(jRules, AI_RULE_DEBUG_CREATURE, JsonString("")); + // Moral checks on or off. + SetLocalInt(oModule, AI_RULE_MORAL_CHECKS, AI_MORAL_CHECKS); + jRules = JsonObjectSet(jRules, AI_RULE_MORAL_CHECKS, JsonInt(AI_MORAL_CHECKS)); + // Allows monsters to prebuff before combat starts. + SetLocalInt(oModule, AI_RULE_BUFF_MONSTERS, AI_PREBUFF); + jRules = JsonObjectSet(jRules, AI_RULE_BUFF_MONSTERS, JsonInt(AI_PREBUFF)); + // Allows monsters cast summons spells when prebuffing. + SetLocalInt(oModule, AI_RULE_PRESUMMON, AI_PRESUMMONS); + jRules = JsonObjectSet(jRules, AI_RULE_PRESUMMON, JsonInt(AI_PRESUMMONS)); + // Allows monsters to use tactical AI scripts. + SetLocalInt(oModule, AI_RULE_AMBUSH, AI_TACTICAL); + jRules = JsonObjectSet(jRules, AI_RULE_AMBUSH, JsonInt(AI_TACTICAL)); + // Enemies may summon familiars and Animal companions and will be randomized. + SetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS, AI_SUMMON_COMPANIONS); + jRules = JsonObjectSet(jRules, AI_RULE_SUMMON_COMPANIONS, JsonInt(AI_SUMMON_COMPANIONS)); + // Allow the AI to move during combat base on the situation and action taking. + SetLocalInt(oModule, AI_RULE_ADVANCED_MOVEMENT, AI_ADVANCED_MOVEMENT); + jRules = JsonObjectSet(jRules, AI_RULE_ADVANCED_MOVEMENT, JsonInt(AI_ADVANCED_MOVEMENT)); + // Follow Item Level Restrictions for monsters/associates. + SetLocalInt(oModule, AI_RULE_ILR, AI_ITEM_LEVEL_RESTRICTIONS); + jRules = JsonObjectSet(jRules, AI_RULE_ILR, JsonInt(AI_ITEM_LEVEL_RESTRICTIONS)); + // Allow the AI to use Use Magic Device. + SetLocalInt(oModule, AI_RULE_ALLOW_UMD, AI_USE_MAGIC_DEVICE); + jRules = JsonObjectSet(jRules, AI_RULE_ALLOW_UMD, JsonInt(AI_USE_MAGIC_DEVICE)); + // Allow the AI to use healing kits. + SetLocalInt(oModule, AI_RULE_HEALERSKITS, AI_HEALING_KITS); + jRules = JsonObjectSet(jRules, AI_RULE_HEALERSKITS, JsonInt(AI_HEALING_KITS)); + // Associates are permanent and don't get removed when the master dies. + SetLocalInt(oModule, AI_RULE_PERM_ASSOC, AI_COMPANIONS_PERMANENT); + jRules = JsonObjectSet(jRules, AI_RULE_PERM_ASSOC, JsonInt(AI_COMPANIONS_PERMANENT)); + // Monster AI's chance to attack the weakest target instead of the nearest. + SetLocalInt(oModule, AI_RULE_AI_DIFFICULTY, AI_TARGET_WEAKEST); + jRules = JsonObjectSet(jRules, AI_RULE_AI_DIFFICULTY, JsonInt(AI_TARGET_WEAKEST)); + // Monster AI's distance they can search for the enemy. + SetLocalFloat(oModule, AI_RULE_PERCEPTION_DISTANCE, AI_SEARCH_DISTANCE); + jRules = JsonObjectSet(jRules, AI_RULE_PERCEPTION_DISTANCE, JsonFloat(AI_SEARCH_DISTANCE)); + // Enemy corpses remain on the floor instead of dissappearing. + SetLocalInt(oModule, AI_RULE_CORPSES_STAY, AI_CORPSE_REMAIN); + jRules = JsonObjectSet(jRules, AI_RULE_CORPSES_STAY, JsonInt(AI_CORPSE_REMAIN)); + // Monsters will wander around when not in combat. + SetLocalInt(oModule, AI_RULE_WANDER, AI_WANDER); + jRules = JsonObjectSet(jRules, AI_RULE_WANDER, JsonInt(AI_WANDER)); + // Increase the number of encounter creatures. + SetLocalFloat(oModule, AI_INCREASE_ENC_MONSTERS, 0.0); + jRules = JsonObjectSet(jRules, AI_INCREASE_ENC_MONSTERS, JsonFloat(0.0)); + // Increase all monsters hitpoints by this percentage. + SetLocalInt(oModule, AI_INCREASE_MONSTERS_HP, 0); + jRules = JsonObjectSet(jRules, AI_INCREASE_MONSTERS_HP, JsonInt(0)); + // Monster's perception distance. + SetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE, AI_MONSTER_PERCEPTION); + jRules = JsonObjectSet(jRules, AI_RULE_MON_PERC_DISTANCE, JsonInt(AI_MONSTER_PERCEPTION)); + // Variable name set to hold the maximum number of henchman the player wants. + int nMaxHenchmen = GetMaxHenchmen(); + SetLocalInt(oModule, AI_RULE_MAX_HENCHMAN, nMaxHenchmen); + jRules = JsonObjectSet(jRules, AI_RULE_MAX_HENCHMAN, JsonInt(nMaxHenchmen)); + // Monster AI's distance they can wander away from their spawn point. + SetLocalFloat(oModule, AI_RULE_WANDER_DISTANCE, AI_WANDER_DISTANCE); + jRules = JsonObjectSet(jRules, AI_RULE_WANDER_DISTANCE, JsonFloat(AI_WANDER_DISTANCE)); + // Monsters will open doors when wandering around and not in combat. + SetLocalInt(oModule, AI_RULE_OPEN_DOORS, AI_WANDER); + jRules = JsonObjectSet(jRules, AI_RULE_OPEN_DOORS, JsonInt(AI_OPEN_DOORS)); + // If the modules default XP has not been set then we do it here. + int nDefaultXP = GetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE); + if(nDefaultXP == 0) + { + int nValue = GetModuleXPScale(); + if(nValue != 0) SetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE, nValue); + } + // Variable name set to allow the game to regulate experience based on party size. + SetLocalInt(oModule, AI_RULE_PARTY_SCALE, AI_PARTY_SCALE); + jRules = JsonObjectSet(jRules, AI_RULE_PARTY_SCALE, JsonInt(AI_PARTY_SCALE)); + SetLocalJson(oModule, AI_RULE_RESTRICTED_SPELLS, JsonArray()); + jRules = JsonObjectSet(jRules, AI_RULE_RESTRICTED_SPELLS, JsonArray()); + // Variable name set to allow access to widget buttons for the players. + SetLocalInt(oModule, sDMWidgetAccessVarname, AI_DM_WIDGET_ACCESS_BUTTONS); + jRules = JsonObjectSet(jRules, sDMWidgetAccessVarname, JsonInt(AI_DM_WIDGET_ACCESS_BUTTONS)); + // Variable name set to allow access to widget buttons for the players. + SetLocalInt(oModule, sDMAIAccessVarname, AI_DM_AI_ACCESS_BUTTONS); + jRules = JsonObjectSet(jRules, sDMAIAccessVarname, JsonInt(AI_DM_AI_ACCESS_BUTTONS)); + ai_SetCampaignDbJson("rules", jRules); + } + else + { + // Variable name set to a creatures full name to set debugging on. + string sValue = JsonGetString(JsonObjectGet(jRules, AI_RULE_DEBUG_CREATURE)); + SetLocalString(oModule, AI_RULE_DEBUG_CREATURE, sValue); + // Moral checks on or off. + int bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_MORAL_CHECKS)); + SetLocalInt(oModule, AI_RULE_MORAL_CHECKS, bValue); + // Allows monsters to prebuff before combat starts. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_BUFF_MONSTERS)); + SetLocalInt(oModule, AI_RULE_BUFF_MONSTERS, bValue); + // Allows monsters cast summons spells when prebuffing. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_PRESUMMON)); + SetLocalInt(oModule, AI_RULE_PRESUMMON, bValue); + // Allows monsters to use ambush AI scripts. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_AMBUSH)); + SetLocalInt(oModule, AI_RULE_AMBUSH, bValue); + // Enemies may summon familiars and Animal companions and will be randomized. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_SUMMON_COMPANIONS)); + SetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS, bValue); + // Allow the AI to move during combat base on the situation and action taking. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_ADVANCED_MOVEMENT)); + SetLocalInt(oModule, AI_RULE_ADVANCED_MOVEMENT, bValue); + // Follow Item Level Restrictions for monsters/associates. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_ILR)); + SetLocalInt(oModule, AI_RULE_ILR, bValue); + // Allow the AI to use Use Magic Device. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_ALLOW_UMD)); + SetLocalInt(oModule, AI_RULE_ALLOW_UMD, bValue); + // Allow the AI to use healing kits. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_HEALERSKITS)); + SetLocalInt(oModule, AI_RULE_HEALERSKITS, bValue); + // Associates are permanent and don't get removed when the owner dies. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_PERM_ASSOC)); + SetLocalInt(oModule, AI_RULE_PERM_ASSOC, bValue); + // Monster AI's chance to attack the weakest target instead of the nearest. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_AI_DIFFICULTY)); + SetLocalInt(oModule, AI_RULE_AI_DIFFICULTY, bValue); + // Monster AI's perception distance from player. + float fValue = JsonGetFloat(JsonObjectGet(jRules, AI_RULE_PERCEPTION_DISTANCE)); + SetLocalFloat(oModule, AI_RULE_PERCEPTION_DISTANCE, fValue); + // Enemy corpses remain on the floor instead of dissappearing. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_CORPSES_STAY)); + SetLocalInt(oModule, AI_RULE_CORPSES_STAY, bValue); + // Monsters will wander around when not in combat. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_WANDER)); + SetLocalInt(oModule, AI_RULE_WANDER, bValue); + // Increase the number of encounter creatures. + fValue = JsonGetFloat(JsonObjectGet(jRules, AI_INCREASE_ENC_MONSTERS)); + SetLocalFloat(oModule, AI_INCREASE_ENC_MONSTERS, fValue); + // Increase all monsters hitpoints by this percentage. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_INCREASE_MONSTERS_HP)); + SetLocalInt(oModule, AI_INCREASE_MONSTERS_HP, bValue); + // Monster's perception distance. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_MON_PERC_DISTANCE)); + if(bValue < 8 || bValue > 11) bValue = 11; + SetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE, bValue); + // Variable name set to hold the maximum number of henchman the player wants. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_MAX_HENCHMAN)); + if(bValue == 0) bValue = GetMaxHenchmen(); + else SetMaxHenchmen(bValue); + SetLocalInt(oModule, AI_RULE_MAX_HENCHMAN, bValue); + // Monster AI's wander distance from their spawn point. + fValue = JsonGetFloat(JsonObjectGet(jRules, AI_RULE_WANDER_DISTANCE)); + SetLocalFloat(oModule, AI_RULE_WANDER_DISTANCE, fValue); + // Monsters will open doors while wandering around and not in combat. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_OPEN_DOORS)); + SetLocalInt(oModule, AI_RULE_OPEN_DOORS, bValue); + // If the modules default XP has not been set then we do it here. + int nDefaultXP = GetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE); + if(nDefaultXP == 0) + { + bValue = GetModuleXPScale(); + if(bValue != 0) SetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE, bValue); + } + // Variable name set to allow the game to regulate experience based on party size. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_PARTY_SCALE)); + if(bValue) + { + int nBasePartyXP = GetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP); + if(nBasePartyXP == 0) + { + nDefaultXP = GetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE); + SetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP, nDefaultXP); + } + } + SetLocalInt(oModule, AI_RULE_PARTY_SCALE, bValue); + json jRSpells = JsonObjectGet(jRules, AI_RULE_RESTRICTED_SPELLS); + if(JsonGetType(jRSpells) == JSON_TYPE_NULL) + { + jRSpells = JsonArray(); + jRules = JsonObjectSet(jRules, AI_RULE_RESTRICTED_SPELLS, jRSpells); + ai_SetCampaignDbJson("rules", jRules); + } + SetLocalJson(oModule, AI_RULE_RESTRICTED_SPELLS, jRSpells); + // Variable name set to allow access to widget buttons for the players. + bValue = JsonGetInt(JsonObjectGet(jRules, sDMWidgetAccessVarname)); + SetLocalInt(oModule, sDMWidgetAccessVarname, bValue); + // Variable name set to allow access to widget buttons for the players. + bValue = JsonGetInt(JsonObjectGet(jRules, sDMAIAccessVarname)); + SetLocalInt(oModule, sDMAIAccessVarname, bValue); + } +} +int ai_GetIsCharacter(object oCreature) +{ + return (GetIsPC(oCreature) && !GetIsDM(oCreature) && !GetIsDMPossessed(oCreature)); +} +int ai_GetIsDungeonMaster(object oCreature) +{ + return (GetIsDM(oCreature) || GetIsDMPossessed(oCreature)); +} +object ai_GetPlayerMaster(object oAssociate) +{ + if(ai_GetIsCharacter(oAssociate)) return oAssociate; + object oMaster = GetMaster(oAssociate); + if(ai_GetIsCharacter(oMaster)) return oMaster; + return OBJECT_INVALID; +} +int ai_GetPercHPLoss(object oCreature) +{ + int nHP = GetCurrentHitPoints(oCreature); + if(nHP < 1) return 0; + return(nHP * 100) / GetMaxHitPoints(oCreature); +} +int ai_RollDiceString(string sDice) +{ + int nNegativePos, nBonus = 0; + string sRight = GetStringRight(sDice, GetStringLength(sDice) - FindSubString(sDice, "d") - 1); + int nPlusPos = FindSubString(sRight, "+"); + if(nPlusPos != -1) + { + nBonus = StringToInt(GetStringRight(sRight, GetStringLength(sRight) - nPlusPos - 1)); + sRight = GetStringLeft(sRight, nPlusPos); + } + else + { + nNegativePos = FindSubString(sRight, "-"); + if(nNegativePos != -1) + { + nBonus = StringToInt(GetStringRight(sRight, GetStringLength(sRight) - nNegativePos - 1)); + sRight = GetStringLeft(sRight, nNegativePos); + nBonus = nBonus * -1; + } + } + int nDie = StringToInt(sRight); + int nNumOfDie = StringToInt(GetStringLeft(sDice, FindSubString(sDice, "d"))); + int nResult; + while(nNumOfDie > 0) + { + nResult += Random(nDie) + 1; + nNumOfDie --; + } + return nResult + nBonus; +} +int ai_HexStringToInt(string sString) +{ + sString = GetStringLowerCase(sString); + int nInt = 0; + int nLength = GetStringLength(sString); + int i; + for(i = nLength - 1; i >= 0; i--) + { + int n = FindSubString("0123456789abcdef", GetSubString(sString, i, 1)); + if(n == -1) return nInt; + nInt |= n << ((nLength - i - 1) * 4); + } + return nInt; +} +float ai_GetCosAngleBetween(object oObject1, object oObject2) +{ + vector v1 = GetPositionFromLocation(GetLocation(oObject1)); + vector v2 = GetPositionFromLocation(GetLocation(oObject2)); + vector v3 = GetPositionFromLocation(GetLocation(OBJECT_SELF)); + + v1.x -= v3.x; v1.y -= v3.y; v1.z -= v3.z; + v2.x -= v3.x; v2.y -= v3.y; v2.z -= v3.z; + + float dotproduct = v1.x*v2.x+v1.y*v2.y+v1.z*v2.z; + + return dotproduct/(VectorMagnitude(v1)*VectorMagnitude(v2)); +} +string ai_RemoveIllegalCharacters(string sString, string sLegal = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") +{ + string sOut, sValue; + sString = ai_StripColorCodes(sString); + int nLength = GetStringLength(sString); + int Cnt; + for(Cnt = 0; Cnt != nLength; ++Cnt) + { + sValue = GetSubString(sString, Cnt, 1); + if(TestStringAgainstPattern("**" + sValue + "**", sLegal)) + sOut += sValue; + } + return sOut; +} +int ai_GetCharacterLevels(object oCreature) +{ + int nLevels, nPosition = 1; + while(nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + nLevels += GetLevelByPosition(nPosition, oCreature); + nPosition++; + } + return nLevels; +} +string ai_StringReplaceText(string sSource, string sFind, string sReplace) +{ + int nFindLength = GetStringLength(sFind); + int nPosition = 0; + string sReturnValue = ""; + // Locate all occurences of sFind. + int nFound = FindSubString(sSource, sFind); + while(nFound >= 0 ) + { + // Build the return string, replacing this occurence of sFind with sReplace. + sReturnValue += GetSubString(sSource, nPosition, nFound - nPosition) + sReplace; + nPosition = nFound + nFindLength; + nFound = FindSubString(sSource, sFind, nPosition); + } + // Tack on the end of sSource and return. + return sReturnValue + GetStringRight(sSource, GetStringLength(sSource) - nPosition); +} +string ai_GetStringArray(string sArray, int nIndex, string sSeperator = ":") +{ + int nCnt = 0, nMark = 0, nStringLength = GetStringLength(sArray); + string sCharacter; + // Search the string. + while(nCnt < nStringLength) + { + sCharacter = GetSubString(sArray, nCnt, 1); + // Look for the mark. + if(sCharacter == sSeperator) + { + // If we have not found it then lets see if this mark is the one. + if(nMark < 1) + { + // If we are down to 0 in the index then we have found the mark. + if(nIndex > 0) nIndex --; + // Mark the start of the string we need. + else nMark = nCnt + 1; + } + else + { + // We have the first mark so the next mark will mean we have the string we need. + // Now pull it and return. + sArray = GetSubString(sArray, nMark, nCnt - nMark); + return sArray; + } + } + nCnt ++; + } + // If we hit the end without finding it then return "" as an error. + return ""; +} +string ai_SetStringArray(string sArray, int nIndex, string sField, string sSeperator = ":") +{ + int nCnt = 1, nMark = 1, nStringLength = GetStringLength(sArray); + int nIndexCounter = 0; + string sCharacter, sNewArray = sSeperator, sText; + // Check to make sure this is not a new array. + // If it is new then set it with 1 slot. + if(nStringLength < 2) + { + sArray = sSeperator + " " + sSeperator; + nStringLength = 3; + } + // Search the string. + while(nCnt <= nStringLength) + { + sCharacter = GetSubString(sArray, nCnt, 1); + // Look for the mark. + if(sCharacter == sSeperator) + { + // First check to see if this is the index we are replacing. + if(nIndex == nIndexCounter) sText = sField; + else + { + // Get the original text for this field. + sText = GetSubString(sArray, nMark, nCnt - nMark); + } + // Add the field to the new index. + sNewArray = sNewArray + sText + sSeperator; + // Now set the marker to the new starting point. + nMark = nCnt + 1; + // Increase the index counter as well. + nIndexCounter ++; + } + nCnt ++; + } + // if we are at the end of the array and still have not set the data + // then add blank data until we get to the correct index. + while(nIndexCounter <= nIndex) + { + // If they match add the field. + if(nIndexCounter == nIndex) sNewArray = sNewArray + sField + sSeperator; + // Otherwise just add a blank field. + else sNewArray = sNewArray + " " + sSeperator; + nIndexCounter ++; + } + // When done return the new array. + return sNewArray; +} +int ai_GetNumberOfProperties(object oItem) +{ + int nNumOfProperties = 0, nPropertyType, nPropertySubType; + // Get first property + itemproperty ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + // Ignore double type properties such as bane. + nPropertyType = GetItemPropertyType(ipProperty); + switch(nPropertyType) + { + // Skip these properties as they don't count. + case 8 : break; // EnhanceAlignmentGroup + case 44 : break; // Light + case 62 : break; // UseLimitationAlignmentGroup + case 63 : break; // UseLimitationClass + case 64 : break; // UseLimitationRacial + case 65 : break; // UseLimitationSpecificAlignment + case 66 : break; // UseLimitationTerrain + case 86 : break; // Quality + case 150 : break; // UseLimitationGender + case 15 : + { + nPropertySubType = GetItemPropertySubType(ipProperty); + if(nPropertySubType == IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY) break; + if(nPropertySubType == IP_CONST_CASTSPELL_UNIQUE_POWER) break; + } + default : nNumOfProperties ++; + } + // Get the next property + ipProperty = GetNextItemProperty(oItem); + } + // Reduce the number of properties by one on whips. + if(GetBaseItemType(oItem) == BASE_ITEM_WHIP) nNumOfProperties --; + return nNumOfProperties; +} +void ai_CreateCampaignDataTable() +{ + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, + "CREATE TABLE IF NOT EXISTS " + AI_TABLE + "(" + + "name TEXT, " + + "plugins TEXT, " + + "rules TEXT, " + + "PRIMARY KEY(name));"); + SqlStep(sql); + //if(AI_DEBUG) ai_Debug("0i_main", "343", We are creating a campaign table [" + + // AI_TABLE + "] in the database."); +} +void ai_CheckCampaignDataTableAndCreateTable() +{ + string sQuery = "SELECT name FROM sqlite_master WHERE type ='table' " + + "AND name =@table;"; + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, sQuery); + SqlBindString(sql, "@table", AI_TABLE); + if(!SqlStep(sql)) ai_CreateCampaignDataTable(); +} +void ai_InitializeCampaignData() +{ + string sQuery = "INSERT INTO " + AI_TABLE + "(name, plugins, rules) " + + "VALUES(@name, @plugins, @rules);"; + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, sQuery); + SqlBindString(sql, "@name", "PEPS_DATA"); + SqlBindJson(sql, "@plugins", JsonArray()); + SqlBindJson(sql, "@rules", JsonObject()); + SqlStep(sql); +} +void ai_CheckCampaignDataAndInitialize() +{ + ai_CheckCampaignDataTableAndCreateTable(); + string sQuery = "SELECT name FROM " + AI_TABLE + " WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, sQuery); + SqlBindString(sql, "@name", "PEPS_DATA"); + if(!SqlStep(sql)) ai_InitializeCampaignData(); +} +void ai_CreateDMDataTable() +{ + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, + "CREATE TABLE IF NOT EXISTS " + AI_DM_TABLE + "(" + + "name TEXT, " + + "buttons TEXT, " + + "plugins TEXT, " + + "locations TEXT, " + + "options TEXT, " + + "saveslots TEXT, " + + "PRIMARY KEY(name));"); + SqlStep(sql); +} +void ai_CheckDMDataTableAndCreateTable() +{ + string sQuery = "SELECT name FROM sqlite_master WHERE type ='table' " + + "AND name =@table;"; + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, sQuery); + SqlBindString(sql, "@table", AI_DM_TABLE); + if(!SqlStep(sql)) ai_CreateDMDataTable(); +} +void ai_InitializeDMData(string sName) +{ + string sQuery = "INSERT INTO " + AI_DM_TABLE + "(name, buttons, plugins, " + + "locations, options, saveslots) " + + "VALUES(@name, @buttons, @plugins, @locations, @options, @saveslots);"; + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, sQuery); + SqlBindString(sql, "@name", sName); + SqlBindJson(sql, "@buttons", JsonArray()); + SqlBindJson(sql, "@plugins", JsonArray()); + SqlBindJson(sql, "@locations", JsonObject()); + SqlBindJson(sql, "@options", JsonObject()); + SqlBindJson(sql, "@saveslots", JsonObject()); + SqlStep(sql); +} +void ai_CheckDMDataAndInitialize(object oDM) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oDM))); + string sQuery = "SELECT name FROM " + AI_DM_TABLE + " WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, sQuery); + SqlBindString(sql, "@name", sName); + if(!SqlStep(sql)) + { + ai_CheckDMDataTableAndCreateTable(); + ai_InitializeDMData(sName); + } +} +void ai_SetCampaignDbJson(string sDataField, json jData, string sName = "PEPS_DATA", string sTable = AI_TABLE) +{ + string sQuery = "UPDATE " + sTable + " SET " + sDataField + + " = @data WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, sQuery); + SqlBindJson(sql, "@data", jData); + SqlBindString(sql, "@name", sName); + SqlStep(sql); +} +json ai_GetCampaignDbJson(string sDataField, string sName = "PEPS_DATA", string sTable = AI_TABLE) +{ + string sQuery = "SELECT " + sDataField + " FROM " + sTable + " WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, sQuery); + SqlBindString(sql, "@name", sName); + json jReturn; + if(SqlStep(sql)) return SqlGetJson (sql, 0); + else return JsonArray(); + return jReturn; +} +void ai_CreateAssociateDataTable(object oPlayer) +{ + sqlquery sql = SqlPrepareQueryObject(oPlayer, + "CREATE TABLE IF NOT EXISTS " + AI_TABLE + "(" + + "name TEXT, " + + "modes TEXT, " + + "buttons TEXT, " + + "aidata TEXT, " + + "lootfilters TEXT, " + + "plugins TEXT, " + + "locations TEXT, " + + "PRIMARY KEY(name));"); + SqlStep(sql); + //ai_Debug("0i_main", "665", GetName(oPlayer) + " is creating a table [" + + // AI_TABLE + "] in the database."); +} +void ai_CheckDataTableAndCreateTable(object oPlayer) +{ + string sQuery = "SELECT name FROM sqlite_master WHERE type ='table' " + + "AND name =@table;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@table", AI_TABLE); + if(!SqlStep(sql)) ai_CreateAssociateDataTable (oPlayer); + //else SendMessageToPC(oPlayer, "0i_main, 675, " + GetName(oPlayer) + " has a database with table [" + AI_TABLE + "]."); +} +void ai_InitializeAssociateData(object oPlayer, string sAssociateType) +{ + string sQuery = "INSERT INTO " + AI_TABLE + "(name, modes, buttons, " + + "aidata, lootfilters, plugins, locations) " + + "VALUES(@name, @modes, @buttons, @aidata, @lootfilters, @plugins, @locations);"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sAssociateType); + SqlBindJson(sql, "@modes", JsonArray()); + SqlBindJson(sql, "@buttons", JsonArray()); + SqlBindJson(sql, "@aidata", JsonArray()); + SqlBindJson(sql, "@lootfilters", JsonArray()); + SqlBindJson(sql, "@plugins", JsonArray()); + SqlBindJson(sql, "@locations", JsonObject()); + //SendMessageToPC(oPlayer, "0i_main, 690, " + GetName(oPlayer) + " is initializing associate " + + // sAssociateType + " data for table [" + AI_TABLE + "]."); + SqlStep(sql); +} +void ai_CheckAssociateDataAndInitialize(object oPlayer, string sAssociateType) +{ + ai_CheckDataTableAndCreateTable(oPlayer); + string sQuery = "SELECT name FROM " + AI_TABLE + " WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryObject (oPlayer, sQuery); + SqlBindString(sql, "@name", sAssociateType); + if(!SqlStep(sql)) ai_InitializeAssociateData(oPlayer, sAssociateType); + //else SendMessageToPC(oPlayer, "0i_main, 701, sAssociateType: " + sAssociateType + + // " returns: " + SqlGetString(sql, 0)); +} +string ai_GetAssociateType(object oPlayer, object oAssociate) +{ + if(GetIsPC(oAssociate)) return "pc"; + string sAITag = GetLocalString(oAssociate, AI_TAG); + if(sAITag == "") + { + int nAssociateType = GetAssociateType(oAssociate); + if(nAssociateType == ASSOCIATE_TYPE_ANIMALCOMPANION) sAITag = "companion"; + else if(nAssociateType == ASSOCIATE_TYPE_FAMILIAR) sAITag = "familiar"; + else if(nAssociateType == ASSOCIATE_TYPE_SUMMONED) sAITag = "summons"; + else if(nAssociateType == ASSOCIATE_TYPE_DOMINATED) sAITag = "dominated"; + else if(nAssociateType == ASSOCIATE_TYPE_HENCHMAN) sAITag = GetTag(oAssociate); + string sCurrentAITag; + // Check for duplicate tags and change. + int nIndex; + object oCreature; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oCreature = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPlayer, nIndex); + if(oAssociate != oCreature && sAITag == GetTag(oCreature)) sAITag += IntToString(Random(1000)); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oCreature = GetAssociate(nIndex, oPlayer, 1); + if(oAssociate != oCreature && sAITag == GetTag(oCreature)) sAITag += IntToString(Random(1000)); + } + SetLocalString(oAssociate, AI_TAG, sAITag); + } + return sAITag; +} +void ai_SetAssociateDbInt(object oPlayer, string sAssociatetype, string sDataField, int nData, string sTable = AI_TABLE) +{ + string sQuery = "UPDATE " + sTable + " SET " + sDataField + + " = @data WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sAssociatetype); + SqlBindInt(sql, "@data", nData); + //ai_Debug("0i_main", "368", "SETTING DATA: " + GetName(oPlayer) + " sAssociatetype: " + + // sAssociatetype + " sDataField: " + sDataField + " nData: " + IntToString(nData)); + SqlStep(sql); +} +int ai_GetAssociateDbInt(object oPlayer, string sAssociatetype, string sDataField, string sTable = AI_TABLE) +{ + string sQuery = "SELECT " + sDataField + " FROM " + sTable + " WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sAssociatetype); + //ai_Debug("0i_main", "377", "GETTING DATA: " + GetName(oPlayer) + " sAssociatetype: " + + // sAssociatetype + " sDataField: " + sDataField); + if(SqlStep(sql)) return SqlGetInt(sql, 0); + else return 0; +} +void ai_SetAssociateDbFloat(object oPlayer, string sAssociatetype, string sDataField, float fData, string sTable = AI_TABLE) +{ + string sQuery = "UPDATE " + sTable + " SET " + sDataField + + " = @data WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sAssociatetype); + SqlBindFloat(sql, "@data", fData); + //ai_Debug("0i_main", "368", "SETTING DATA: " + GetName(oPlayer) + " sAssociatetype: " + + // sAssociatetype + " sDataField: " + sDataField + " fData: " + FloatToString(fData, 0, 0)); + SqlStep(sql); +} +float ai_GetAssociateDbFloat(object oPlayer, string sAssociatetype, string sDataField, string sTable = AI_TABLE) +{ + string sQuery = "SELECT " + sDataField + " FROM " + sTable + " WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sAssociatetype); + //ai_Debug("0i_main", "377", "GETTING DATA: " + GetName(oPlayer) + " sAssociatetype: " + + // sAssociatetype + " sDataField: " + sDataField); + if(SqlStep(sql)) return SqlGetFloat(sql, 0); + else return 0.0; +} +void ai_SetAssociateDbJson(object oPlayer, string sAssociateType, string sDataField, json jData, string sTable = AI_TABLE) +{ + //SendMessageToPC(oPlayer, "0i_main, 629, Set DbJson - sAssociateType: " + sAssociateType + " sDataField: " + sDataField + " jData: " + JsonDump(jData)); + string sQuery = "UPDATE " + sTable + " SET " + sDataField + + " = @data WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindJson(sql, "@data", jData); + SqlBindString(sql, "@name", sAssociateType); + SqlStep(sql); +} +json ai_GetAssociateDbJson(object oPlayer, string sAssociateType, string sDataField, string sTable = AI_TABLE) +{ + //SendMessageToPC(oPlayer, "0i_main, 638, Get DbJson - sAssociateType: " + sAssociateType + " sDataField: " + sDataField); + string sQuery = "SELECT " + sDataField + " FROM " + sTable + " WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString (sql, "@name", sAssociateType); + if(SqlStep(sql)) + { + json jReturn = SqlGetJson(sql, 0); + //SendMessageToPC(oPlayer, "0i_main, 646 jReturn: " + JsonDump(jReturn, 1)); + if(JsonGetType(jReturn) == JSON_TYPE_NULL) return JsonArray(); + return jReturn; + } + else return JsonNull(); +} +void aiSaveAssociateModesToDb(object oPlayer, object oAssociate) +{ + string sAssociateType = ai_GetAssociateType(oPlayer, oAssociate); + json jModes = ai_GetAssociateDbJson(oPlayer, sAssociateType, "modes"); + int nAIMode = GetLocalInt(oAssociate, sAIModeVarname); + jModes = JsonArraySet(jModes, 0, JsonInt(nAIMode)); + int nMagicMode = GetLocalInt(oAssociate, sMagicModeVarname); + jModes = JsonArraySet(jModes, 1, JsonInt(nMagicMode)); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "modes", jModes); +} +void ai_SetupModes(object oPlayer, object oAssociate, string sAssociateType) +{ + json jModes = JsonArray(); + jModes = JsonArrayInsert(jModes, JsonInt(0)); // AI Modes. + // Set magic modes to use Normal magic, Bit 256. + jModes = JsonArrayInsert(jModes, JsonInt(256)); // Magic Modes. + SetLocalInt(oAssociate, sMagicModeVarname, 256); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "modes", jModes, AI_TABLE); +} +void ai_SetupButtons(object oPlayer, object oAssociate, string sAssociateType) +{ + json jButtons = JsonArray(); + jButtons = JsonArrayInsert(jButtons, JsonInt(0)); // Command buttons. + jButtons = JsonArrayInsert(jButtons, JsonInt(0)); // AI buttons. + jButtons = JsonArrayInsert(jButtons, JsonInt(0)); // AI buttons 2. + ai_SetAssociateDbJson(oPlayer, sAssociateType, "buttons", jButtons, AI_TABLE); +} +void ai_SetupAIData(object oPlayer, object oAssociate, string sAssociateType) +{ + json jAIData = JsonArray(); + jAIData = JsonArrayInsert(jAIData, JsonInt(0)); // 0 - Difficulty adjustment. + jAIData = JsonArrayInsert(jAIData, JsonInt(70)); // 1 - Heal out of combat. + SetLocalInt(oAssociate, AI_HEAL_OUT_OF_COMBAT_LIMIT, 70); + jAIData = JsonArrayInsert(jAIData, JsonInt(50)); // 2 - Heal in combat. + SetLocalInt(oAssociate, AI_HEAL_IN_COMBAT_LIMIT, 50); + jAIData = JsonArrayInsert(jAIData, JsonFloat(20.0)); // 3 - Loot check range. + SetLocalFloat(oAssociate, AI_LOOT_CHECK_RANGE, 20.0); + jAIData = JsonArrayInsert(jAIData, JsonFloat(20.0)); // 4 - Lock check range. + SetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE, 20.0); + jAIData = JsonArrayInsert(jAIData, JsonFloat(20.0)); // 5 - Trap check range. + SetLocalFloat(oAssociate, AI_TRAP_CHECK_RANGE, 20.0); + jAIData = JsonArrayInsert(jAIData, JsonFloat(3.0)); // 6 - Associate Distance. + SetLocalFloat(oAssociate, AI_FOLLOW_RANGE, 3.0); + // This can be replaced as it is not used in the database. + // We keep it for now as we don't want to move other data. + jAIData = JsonArrayInsert(jAIData, JsonInt(11)); // 7 - Associate Perception DistanceDistance. + SetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION, 11); + SetLocalFloat(oAssociate, AI_ASSOC_PERCEPTION_DISTANCE, 20.0); + jAIData = JsonArrayInsert(jAIData, JsonString("")); // 8 - Associate Combat Tactics. + jAIData = JsonArrayInsert(jAIData, JsonFloat(20.0)); // 9 - Open Doors check range. + SetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE, 20.0); + json jSpells = JsonArray(); + jAIData = JsonArrayInsert(jAIData, jSpells); // 10 - Castable spells. + ai_SetAssociateDbJson(oPlayer, sAssociateType, "aidata", jAIData, AI_TABLE); +} +void ai_SetupLootFilters(object oPlayer, object oAssociate, string sAssociateType) +{ + json jLootFilters = JsonArray(); + // Maximum weight to pickup an item. + jLootFilters = JsonArrayInsert(jLootFilters, JsonInt(200)); + SetLocalInt(oAssociate, AI_MAX_LOOT_WEIGHT, 200); + // Bitwise int for checkbox pickup filter. + jLootFilters = JsonArrayInsert(jLootFilters, JsonInt(AI_LOOT_ALL_ON)); + SetLocalInt(oAssociate, sLootFilterVarname, AI_LOOT_ALL_ON); + // Minimum gold value to pickup. + int nIndex; + for(nIndex = 2; nIndex < 20; nIndex++) + { + jLootFilters = JsonArrayInsert(jLootFilters, JsonInt(0)); + } + ai_SetAssociateDbJson(oPlayer, sAssociateType, "lootfilters", jLootFilters, AI_TABLE); +} +void ai_SetupLocations(object oPlayer, object oAssociate, string sAssociateType) +{ + json jLocations = JsonObject(); + json jNUI = JsonObject(); + jNUI = JsonObjectSet(jNUI, "x", JsonFloat(-1.0)); + jNUI = JsonObjectSet(jNUI, "y", JsonFloat(-1.0)); + if(ai_GetIsCharacter(oAssociate)) + { + jLocations = JsonObjectSet(jLocations, AI_MAIN_NUI, jNUI); + jLocations = JsonObjectSet(jLocations, AI_PLUGIN_NUI, jNUI); + } + jLocations = JsonObjectSet(jLocations, sAssociateType + AI_COMMAND_NUI, jNUI); + jLocations = JsonObjectSet(jLocations, sAssociateType + AI_NUI, jNUI); + jLocations = JsonObjectSet(jLocations, sAssociateType + AI_LOOTFILTER_NUI, jNUI); + jLocations = JsonObjectSet(jLocations, sAssociateType + AI_COPY_NUI, jNUI); + jLocations = JsonObjectSet(jLocations, sAssociateType + AI_QUICK_WIDGET_NUI, jNUI); + jLocations = JsonObjectSet(jLocations, sAssociateType + AI_SPELL_MEMORIZE_NUI, jNUI); + jLocations = JsonObjectSet(jLocations, sAssociateType + AI_SPELL_KNOWN_NUI, jNUI); + jNUI = JsonObjectSet(jNUI, "x", JsonFloat(0.0)); + jNUI = JsonObjectSet(jNUI, "y", JsonFloat(0.0)); + jLocations = JsonObjectSet(jLocations, sAssociateType + AI_WIDGET_NUI, jNUI); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "locations", jLocations, AI_TABLE); +} +void ai_SetupAssociateData(object oPlayer, object oAssociate, string sAssociateType) +{ + //ai_Debug("0i_main", "744", GetName(oAssociate) + " is initializing associate data."); + ai_CheckAssociateDataAndInitialize(oPlayer, sAssociateType); + // Default behavior for associates at start. + ai_SetupModes(oPlayer, oAssociate, sAssociateType); + ai_SetupButtons(oPlayer, oAssociate, sAssociateType); + ai_SetupAIData(oPlayer, oAssociate, sAssociateType); + ai_SetupLootFilters(oPlayer, oAssociate, sAssociateType); + // ********** Plugins ************ + // These are pulled straight from the database. + ai_SetupLocations(oPlayer, oAssociate, sAssociateType); +} +void ai_RestoreDatabase(object oPlayer, object oAssociate, string sAssociateType) +{ + // ********** Modes ********** + json jModes = JsonArray(); + // AI Modes (0). + int nValue = GetLocalInt(oAssociate, sAIModeVarname); + jModes = JsonArrayInsert(jModes, JsonInt(nValue)); + // Magic Modes (1). + nValue = GetLocalInt(oAssociate, sMagicModeVarname); + jModes = JsonArrayInsert(jModes, JsonInt(nValue)); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "modes", jModes, AI_TABLE); + // ********** Buttons ********** + json jButtons = JsonArray(); + // Command buttons (0). + nValue = GetLocalInt(oAssociate, sWidgetButtonsVarname); + jButtons = JsonArrayInsert(jButtons, JsonInt(nValue)); + // AI buttons Group 1 (1). + nValue = GetLocalInt(oAssociate, sAIButtonsVarname); + jButtons = JsonArrayInsert(jButtons, JsonInt(nValue)); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "buttons", jButtons, AI_TABLE); + // ********** AI Data ********** + json jAIData = JsonArray(); + nValue = GetLocalInt(oAssociate, AI_DIFFICULTY_ADJUSTMENT); + jAIData = JsonArrayInsert(jAIData, JsonInt(nValue)); + nValue = GetLocalInt(oAssociate, AI_HEAL_OUT_OF_COMBAT_LIMIT); + jAIData = JsonArrayInsert(jAIData, JsonInt(nValue)); + nValue = GetLocalInt(oAssociate, AI_HEAL_IN_COMBAT_LIMIT); + jAIData = JsonArrayInsert(jAIData, JsonInt(nValue)); + float fValue = GetLocalFloat(oAssociate, AI_LOOT_CHECK_RANGE); + jAIData = JsonArrayInsert(jAIData, JsonFloat(fValue)); + fValue = GetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE); + jAIData = JsonArrayInsert(jAIData, JsonFloat(fValue)); + fValue = GetLocalFloat(oAssociate, AI_TRAP_CHECK_RANGE); + jAIData = JsonArrayInsert(jAIData, JsonFloat(fValue)); + fValue = GetLocalFloat(oAssociate, AI_FOLLOW_RANGE); + jAIData = JsonArrayInsert(jAIData, JsonFloat(fValue)); + nValue = GetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION); + jAIData = JsonArrayInsert(jAIData, JsonInt(nValue)); + float fRange = 20.0; + if(nValue == 8) fRange = 10.0; + else if(nValue == 10) fRange = 35.0; + SetLocalFloat(oAssociate, AI_ASSOC_PERCEPTION_DISTANCE, fRange); + string sValue = GetLocalString(oAssociate, AI_DEFAULT_SCRIPT); + jAIData = JsonArrayInsert(jAIData, JsonString(sValue)); + fValue = GetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE); + jAIData = JsonArrayInsert(jAIData, JsonFloat(fValue)); + json jValue = GetLocalJson(oPlayer, AI_SPELLS_WIDGET); + if(JsonGetType(jValue) == JSON_TYPE_NULL) + { + jValue = JsonArray(); + jValue = JsonArrayInsert(jValue, JsonInt(1)); // 0 - Class selected. + jValue = JsonArrayInsert(jValue, JsonInt(10)); // 1 - Level selected. + jValue = JsonArrayInsert(jValue, JsonArray()); // Spell list for widget. + SetLocalJson(oPlayer, AI_SPELLS_WIDGET, jValue); + } + jAIData = JsonArrayInsert(jAIData, jValue); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "aidata", jAIData); + // ********** LootFilters ********** + json jLootFilters = JsonArray(); + nValue = GetLocalInt(oAssociate, AI_MAX_LOOT_WEIGHT); + jLootFilters = JsonArrayInsert(jLootFilters, JsonInt(nValue)); + nValue = GetLocalInt(oAssociate, sLootFilterVarname); + jLootFilters = JsonArrayInsert(jLootFilters, JsonInt(nValue)); + int nIndex; + for(nIndex = 2; nIndex < 20; nIndex++) + { + nValue = GetLocalInt(oAssociate, AI_MIN_GOLD_ + IntToString(nIndex)); + jLootFilters = JsonArrayInsert(jLootFilters, JsonInt(nValue)); + } + ai_SetAssociateDbJson(oPlayer, sAssociateType, "lootfilters", jLootFilters, AI_TABLE); + // ********** Plugins ************ + // These are pulled straight from the database. + // ********** Locations ********** + // These are only in the database. +} +void ai_CheckAssociateData(object oPlayer, object oAssociate, string sAssociateType, int bLoad = FALSE) +{ + //ai_Debug("0i_main", "810", "Checking data for oAssociate: " + GetName(oAssociate)); + // Do quick check to see if they have a variable saved if so then exit. + if(GetLocalFloat(oAssociate, AI_ASSOC_PERCEPTION_DISTANCE) != 0.0) + { + if(!bLoad) return; + // If the database gets destroyed lets drop an error and restore values + // from the locals. + ai_CheckAssociateDataAndInitialize(oPlayer, sAssociateType); + ai_RestoreDatabase(oPlayer, oAssociate, sAssociateType); + return; + } + ai_CheckAssociateDataAndInitialize(oPlayer, sAssociateType); + // ********** Modes ********** + json jModes = ai_GetAssociateDbJson(oPlayer, sAssociateType, "modes"); + if(JsonGetType(JsonArrayGet(jModes, 0)) == JSON_TYPE_NULL) + { + ai_SetupModes(oPlayer, oAssociate, sAssociateType); + } + else + { + SetLocalInt(oAssociate, sAIModeVarname, JsonGetInt(JsonArrayGet(jModes, 0))); + SetLocalInt(oAssociate, sMagicModeVarname, JsonGetInt(JsonArrayGet(jModes, 1))); + } + // ********** Buttons ********** + json jButtons = ai_GetAssociateDbJson(oPlayer, sAssociateType, "buttons"); + if(JsonGetType(JsonArrayGet(jButtons, 0)) == JSON_TYPE_NULL) + { + ai_SetupButtons(oPlayer, oAssociate, sAssociateType); + } + else + { + // ********** Associate Command Buttons ********** + int nWidgetButtons = JsonGetInt(JsonArrayGet(jButtons, 0)); + if(nWidgetButtons) SetLocalInt(oAssociate, sWidgetButtonsVarname, nWidgetButtons); + // ********** Associate AI Buttons ********** + int nAIButtons = JsonGetInt(JsonArrayGet(jButtons, 1)); + if(nAIButtons) SetLocalInt(oAssociate, sAIButtonsVarname, nAIButtons); + } + // ********** AI Data ********** + json jAIData = ai_GetAssociateDbJson(oPlayer, sAssociateType, "aidata"); + if(JsonGetType(JsonArrayGet(jAIData, 0)) == JSON_TYPE_NULL) + { + ai_SetupAIData(oPlayer, oAssociate, sAssociateType); + } + else + { + SetLocalInt(oAssociate, AI_DIFFICULTY_ADJUSTMENT, JsonGetInt(JsonArrayGet(jAIData, 0))); + SetLocalInt(oAssociate, AI_HEAL_OUT_OF_COMBAT_LIMIT, JsonGetInt(JsonArrayGet(jAIData, 1))); + SetLocalInt(oAssociate, AI_HEAL_IN_COMBAT_LIMIT, JsonGetInt(JsonArrayGet(jAIData, 2))); + SetLocalFloat(oAssociate, AI_LOOT_CHECK_RANGE, JsonGetFloat(JsonArrayGet(jAIData, 3))); + SetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE, JsonGetFloat(JsonArrayGet(jAIData, 4))); + SetLocalFloat(oAssociate, AI_TRAP_CHECK_RANGE, JsonGetFloat(JsonArrayGet(jAIData, 5))); + SetLocalFloat(oAssociate, AI_FOLLOW_RANGE, JsonGetFloat(JsonArrayGet(jAIData, 6))); + int nPercRange = JsonGetInt(JsonArrayGet(jAIData, 7)); + if(nPercRange < 8 || nPercRange > 11) nPercRange = 11; + SetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION, nPercRange); + float fRange = 20.0; + if(nPercRange == 8) fRange = 10.0; + else if(nPercRange == 10) fRange = 35.0; + SetLocalFloat(oAssociate, AI_ASSOC_PERCEPTION_DISTANCE, fRange); + string sScript = JsonGetString(JsonArrayGet(jAIData, 8)); + if(sScript != "") SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + json jDoorRange = JsonArrayGet(jAIData, 9); + if(JsonGetType(jDoorRange) == JSON_TYPE_NULL) + { + jAIData = JsonArrayInsert(jAIData, JsonFloat(20.0)); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "aidata", jAIData); + SetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE, 20.0); + } + else SetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE, JsonGetFloat(jDoorRange)); + json jSpellsWidget = JsonArrayGet(jAIData, 10); + if(JsonGetType(jSpellsWidget) == JSON_TYPE_NULL) + { + jSpellsWidget = JsonArray(); + jSpellsWidget = JsonArrayInsert(jSpellsWidget, JsonInt(0)); // 0 - Class selected. + jSpellsWidget = JsonArrayInsert(jSpellsWidget, JsonInt(0)); // 1 - Level selected. + jAIData = JsonArrayInsert(jAIData, jSpellsWidget); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "aidata", jAIData); + SetLocalJson(oPlayer, AI_SPELLS_WIDGET, jSpellsWidget); + } + } + // ********** LootFilters ********** + json jLootFilters = ai_GetAssociateDbJson(oPlayer, sAssociateType, "lootfilters"); + if(JsonGetType(JsonArrayGet(jLootFilters, 0)) == JSON_TYPE_NULL) + { + ai_SetupLootFilters(oPlayer, oAssociate, sAssociateType); + } + else + { + SetLocalInt(oAssociate, AI_MAX_LOOT_WEIGHT, JsonGetInt(JsonArrayGet(jLootFilters, 0))); + SetLocalInt(oAssociate, sLootFilterVarname, JsonGetInt(JsonArrayGet(jLootFilters, 1))); + int nIndex; + for(nIndex = 2; nIndex < 20; nIndex++) + { + SetLocalInt(oAssociate, AI_MIN_GOLD_ + IntToString(nIndex), JsonGetInt(JsonArrayGet(jLootFilters, nIndex))); + } + } + // ********** Plugins ************ + // These are pulled straight from the database. + // ********** Locations ********** + json jLocations = ai_GetAssociateDbJson(oPlayer, sAssociateType, "locations"); + if(JsonGetType(JsonObjectGet(jLocations, AI_WIDGET_NUI)) == JSON_TYPE_NULL) + { + ai_SetupLocations(oPlayer, oAssociate, sAssociateType); + } + // They are always pulled from the database, so no copies to local variables. +} +void ai_SetupDMData(object oPlayer, string sName) +{ + //ai_Debug("0i_main", "870", GetName(oPlayer) + " is initializing DM data."); + ai_CheckDMDataAndInitialize(oPlayer); + // ********** Buttons ********** + json jButtons = JsonArray(); + jButtons = JsonArrayInsert(jButtons, JsonInt(0)); // DM Widget Buttons. + ai_SetCampaignDbJson("buttons", jButtons, sName, AI_DM_TABLE); + // ********** Plugins ************ + // These are pulled straight from the database. + json jPlugins = JsonArray(); + ai_SetCampaignDbJson("plugins", jPlugins, sName, AI_DM_TABLE); + // ********** Locations ********** + json jLocations = JsonObject(); + json jNUI = JsonObject(); + jNUI = JsonObjectSet(jNUI, "x", JsonFloat(-1.0)); + jNUI = JsonObjectSet(jNUI, "y", JsonFloat(-1.0)); + jLocations = JsonObjectSet(jLocations, AI_MAIN_NUI, jNUI); + jLocations = JsonObjectSet(jLocations, AI_PLUGIN_NUI, jNUI); + jNUI = JsonObjectSet(jLocations, "x", JsonFloat(1.0)); + jNUI = JsonObjectSet(jLocations, "y", JsonFloat(1.0)); + jLocations = JsonObjectSet(jLocations, AI_WIDGET_NUI, jNUI); + ai_SetCampaignDbJson("locations", jLocations, sName, AI_DM_TABLE); + // ********** Options ********** + json jOptions = JsonArray(); + ai_SetCampaignDbJson("options", jOptions, sName, AI_DM_TABLE); + // ********** SaveSlots ********** + json jSaveSlots = JsonObject(); + ai_SetCampaignDbJson("saveslots", jSaveSlots, sName, AI_DM_TABLE); +} +void ai_CheckDMData(object oPlayer) +{ + //ai_Debug("0i_main", "898", "Checking data for DM: " + GetName(oPlayer)); + string sName = ai_RemoveIllegalCharacters(GetName(oPlayer)); + // ********** Buttons ********** + json jButtons = ai_GetCampaignDbJson("buttons", sName, AI_DM_TABLE); + // if there is no saved AImodes then set the defaults. + if(JsonGetType(JsonArrayGet(jButtons, 0)) == JSON_TYPE_NULL) + { + ai_SetupDMData(oPlayer, sName); + } + else + { + //ai_Debug("0i_main", "909", GetName(oPlayer) + " is loading DM data from the database."); + // Get data from the database and place on to the associates and player. + // ********** Buttons ********** + json jButtons = ai_GetCampaignDbJson("buttons", sName, AI_DM_TABLE); + if(JsonGetType(JsonArrayGet(jButtons, 0)) == JSON_TYPE_NULL) + { + ai_SetupDMData(oPlayer, sName); + } + SetLocalInt(oPlayer, sDMWidgetButtonVarname, JsonGetInt(JsonArrayGet(jButtons, 0))); + // ********** Associate Command Buttons ********** + int nWidgetButtons = JsonGetInt(JsonArrayGet(jButtons, 0)); + SetLocalInt(oPlayer, sDMWidgetButtonVarname, nWidgetButtons); + // ********** Plugins ************ + // These are pulled straight from the database. + // ********** Locations ********** + // These are pulled straight from the database. + // ********** Options ********** + // ********** SaveSltos ********** + } +} +json ai_Plugin_Add(object oPC, json jPlugins, string sPluginScript) +{ + if(ResManGetAliasFor(sPluginScript, RESTYPE_NCS) == "") + { + ai_SendMessages("The script (" + sPluginScript + ") was not found by ResMan!", AI_COLOR_RED, oPC); + return jPlugins; + } + int nIndex; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + if(JsonGetString(JsonArrayGet(jPlugin, 0)) == sPluginScript) + { + ai_SendMessages("Plugin (" + sPluginScript + ") is already installed!", AI_COLOR_RED, oPC); + return jPlugins; + } + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + SetLocalInt(oPC, AI_ADD_PLUGIN, TRUE); + SetLocalJson(oPC, AI_JSON_PLUGINS, jPlugins); + ExecuteScript(sPluginScript, oPC); + int nPluginSet = GetLocalInt(oPC, AI_PLUGIN_SET); + // Setting AI_PLUGIN_SET to -1 means the plugin failed to load. + if(nPluginSet == -1) return jPlugins; + if(nPluginSet) + { + jPlugin = GetLocalJson(oPC, AI_JSON_PLUGINS); + jPlugins = JsonArrayInsert(jPlugins, jPlugin); + } + else + { + jPlugin = JsonArray(); + jPlugin = JsonArrayInsert(jPlugin, JsonString(sPluginScript)); + jPlugin = JsonArrayInsert(jPlugin, JsonBool(FALSE)); + jPlugin = JsonArrayInsert(jPlugin, JsonString(sPluginScript)); + int nCount = JsonGetLength(jPlugins) + 1; + string sIcon = "is_summon" + IntToString(nCount); + jPlugin = JsonArrayInsert(jPlugin, JsonString(sIcon)); + jPlugins = JsonArrayInsert(jPlugins, jPlugin); + } + DeleteLocalInt(oPC, AI_ADD_PLUGIN); + DeleteLocalInt(oPC, AI_PLUGIN_SET); + DeleteLocalJson(oPC, AI_JSON_PLUGINS); + return jPlugins; +} +// Temporary function to addapt old plugin json to new plugin json. +json ai_CheckOldPluginJson(object oPC) +{ + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + int nIndex; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + // If the first array is not an array then this is the old version. + if(JsonGetType(jPlugin) != JSON_TYPE_ARRAY) + { + string sScript; + json jNewPlugins = JsonArray(); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sScript = JsonGetString(jPlugin); + if(sScript != "") jNewPlugins = ai_Plugin_Add(oPC, jNewPlugins, sScript); + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + + } + ai_SetAssociateDbJson(oPC, "pc", "plugins", jNewPlugins); + return jNewPlugins; + } + return jPlugins; +} +json ai_UpdatePluginsForPC(object oPC) +{ + // Check if the server is running or single player. + if(!AI_SERVER) return ai_CheckOldPluginJson(oPC); + int nJsonType, nCounter, nIndex, bWidget, bAllow; + string sScript, sName, sIcon; + json jServerPlugins = ai_GetCampaignDbJson("plugins"); + json jPCPlugin, jPCPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + json jNewPCPlugins = JsonArray(); + json jServerPlugin = JsonArrayGet(jServerPlugins, nIndex); + while(JsonGetType(jServerPlugin) != JSON_TYPE_NULL) + { + bAllow = JsonGetInt(JsonArrayGet(jServerPlugin, 1)); + if(bAllow) + { + sName = JsonGetString(JsonArrayGet(jServerPlugin, 0)); + nCounter = 0; + jPCPlugin = JsonArrayGet(jPCPlugins, nCounter); + nJsonType = JsonGetType(jPCPlugin); + while(nJsonType != JSON_TYPE_NULL) + { + if(sName == JsonGetString(JsonArrayGet(jPCPlugin, 0))) + { + // Boolean - Add to widget. + bWidget = JsonGetInt(JsonArrayGet(jPCPlugin, 1)); + jServerPlugin = JsonArraySet(jServerPlugin, 1, JsonBool(bWidget)); + break; + } + jPCPlugin = JsonArrayGet(jPCPlugins, ++nCounter); + nJsonType = JsonGetType(jPCPlugin); + } + if(nJsonType == JSON_TYPE_NULL) + { + jServerPlugin = JsonArraySet(jServerPlugin, 1, JsonBool(FALSE)); + } + jNewPCPlugins = JsonArrayInsert(jNewPCPlugins, jServerPlugin); + } + jServerPlugin = JsonArrayGet(jServerPlugins, ++nIndex); + } + ai_SetAssociateDbJson(oPC, "pc", "plugins", jNewPCPlugins); + return jNewPCPlugins; +} +json ai_UpdatePluginsForDM(object oPC) +{ + int nJsonType, nCounter, nIndex, bWidget, bAllow; + string sName, sIcon, sDbName = ai_RemoveIllegalCharacters(GetName(oPC)); + json jServerPlugins = ai_GetCampaignDbJson("plugins"); + ai_CheckDMDataAndInitialize(oPC); + json jDMPlugin, jDMPlugins = ai_GetCampaignDbJson("plugins", sDbName, AI_DM_TABLE); + json jNewDMPlugins = JsonArray(); + json jServerPlugin = JsonArrayGet(jServerPlugins, nIndex); + while(JsonGetType(jServerPlugin) != JSON_TYPE_NULL) + { + sName = JsonGetString(JsonArrayGet(jServerPlugin, 0)); + nCounter = 0; + jDMPlugin = JsonArrayGet(jDMPlugins, nCounter); + nJsonType = JsonGetType(jDMPlugin); + while(nJsonType != JSON_TYPE_NULL) + { + if(sName == JsonGetString(JsonArrayGet(jDMPlugin, 0))) + { + // Boolean - Add to widget. + bWidget = JsonGetInt(JsonArrayGet(jDMPlugin, 1)); + jServerPlugin = JsonArraySet(jServerPlugin, 1, JsonBool(bWidget)); + break; + } + jDMPlugin = JsonArrayGet(jDMPlugins, ++nCounter); + nJsonType = JsonGetType(jDMPlugin); + } + if(nJsonType == JSON_TYPE_NULL) + { + jServerPlugin = JsonArraySet(jServerPlugin, 1, JsonBool(FALSE)); + } + jNewDMPlugins = JsonArrayInsert(jNewDMPlugins, jServerPlugin); + jServerPlugin = JsonArrayGet(jServerPlugins, ++nIndex); + } + ai_SetCampaignDbJson("plugins", jNewDMPlugins, sDbName, AI_DM_TABLE); + return jNewDMPlugins; +} +void ai_StartupPlugins(object oPC) +{ + SetLocalInt(oPC, AI_STARTING_UP, TRUE); + int bUpdatePlugins; + string sScript; + json jPlugins; + if(GetIsDM(oPC)) jPlugins = ai_UpdatePluginsForDM(oPC); + else jPlugins = ai_UpdatePluginsForPC(oPC); + // We delete this so each mod can be added that legally loads. + DeleteLocalJson(GetModule(), AI_MONSTER_MOD_JSON); + int nIndex; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sScript = JsonGetString(JsonArrayGet(jPlugin, 0)); + ExecuteScript(sScript, oPC); + // -1 means if failed to load so lets make sure to remove it from the list. + if(GetLocalInt(oPC, AI_PLUGIN_SET) == -1) + { + jPlugins = JsonArrayDel(jPlugins, nIndex); + bUpdatePlugins = TRUE; + nIndex--; + } + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + if(bUpdatePlugins) ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + DeleteLocalInt(oPC, AI_STARTING_UP); +} diff --git a/src/module/nss/0i_menus.nss b/src/module/nss/0i_menus.nss new file mode 100644 index 0000000..8d6834c --- /dev/null +++ b/src/module/nss/0i_menus.nss @@ -0,0 +1,4823 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_menus +//////////////////////////////////////////////////////////////////////////////// + Include script for handling NUI menus. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +#include "0i_associates" +// Maximum number of Plugins allowed on the players widget. +const int WIDGET_MAX_PLUGINS = 5; + +// Set one of the BTN_* "Widget" bitwise constants on oPlayer to bValid. +void ai_SetWidgetButton(object oPlayer, int nButton, object oAssociate, string sAssociateType, int bOn = TRUE); +// Return if nButton is set on oPlayer. Uses the BTN_* "Widget" bitwise constants. +int ai_GetWidgetButton(object oPlayer, int nButton, object oAssociate, string sAssociateType); +// Set one of the BTN_AI_* bitwise constants on oPlayer to bValid. +void ai_SetAIButton(object oPlayer, int nButton, object oAssociate, string sAssociateType, int bOn = TRUE); +// Return if nButton is set on oPlayer. Uses the BTN_AI_* "Widget" bitwise constants. +int ai_GetAIButton(object oPlayer, int nButton, object oAssociate, string sAssociateType); +// Set one of the BTN2_AI_* bitwise constants on oPlayer to bValid. +void ai_SetAIButton2(object oPlayer, int nButton, object oAssociate, string sAssociateType, int bOn = TRUE); +// Return if nButton is set on oPlayer. Uses the BTN2_AI_* "Widget" bitwise constants. +int ai_GetAIButton2(object oPlayer, int nButton, object oAssociate, string sAssociateType); +// Creates the json array required to build a companion drop down box for +// Animal Companions or Familiars. +// sCompanion2da should be either "hen_companion" or "hen_familiar". +json ai_CreateCompanionJson(object oPC, string sCompanion2da); +// Return any Metamagic or Domain attributes to place on a spell icon image. +string ai_GetSpellIconAttributes(object oCaster, int nMetaMagic, int nDomain); +// Creates the AI options menu. +void ai_CreateAIMainNUI(object oPC); +// Creates the AI options menu. +void ai_CreateAssociateCommandNUI(object oPC, object oAssociate); +// Creates an associates AI NUI. +void ai_CreateAssociateAINUI(object oPC, object oAssociate); +// Creates a widget for the player or associate. +void ai_CreateWidgetNUI(object oPC, object oAssociate); +// Creates the Loot filter menu. +void ai_CreateLootFilterNUI(object oPC, object oAssociate); +// Creates the Plugin Manager menu. +void ai_CreatePluginNUI(object oPC); +// Creates the Spell menu that selects the spells to go on the Spell Widget. +void ai_CreateQuickWidgetSelectionNUI(object oPC, object oAssociate); +// Creates the Spell menu that lets the player to select the associates castable spells. +void ai_CreateSpellMemorizationNUI(object oPC, object oAssociate); +// Creates the spell description menu so a player can see what a spell does. +// If nSpell > 0 then use that value for the spells description. +void ai_CreateDescriptionNUI(object oPC, json jSpell, int nSpell = 0); + +string ai_GetRandomTip() +{ + int nRoll; + if(AI_SERVER) nRoll = Random(26); + else nRoll = Random(46); + return Get2DAString("ai_messages", "Text", nRoll); +} +void ai_SetWidgetButton(object oPlayer, int nButton, object oAssociate, string sAssociateType, int bOn = TRUE) +{ + int nWidgetButtons = GetLocalInt(oAssociate, sWidgetButtonsVarname); + json jButtons = ai_GetAssociateDbJson(oPlayer, sAssociateType, "buttons"); + if(bOn) nWidgetButtons = nWidgetButtons | nButton; + else nWidgetButtons = nWidgetButtons & ~nButton; + SetLocalInt(oAssociate, sWidgetButtonsVarname, nWidgetButtons); + jButtons = JsonArraySet(jButtons, 0, JsonInt(nWidgetButtons)); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "buttons", jButtons); +} +int ai_GetWidgetButton(object oPlayer, int nButton, object oAssociate, string sAssociateType) +{ + // This is the DM access switch that uses the same bitwise as the players + // to control what widget buttons they can use. + if(ai_GetDMWAccessButton(nButton)) return FALSE; + int nWidgetButtons = GetLocalInt(oAssociate, sWidgetButtonsVarname); + return nWidgetButtons & nButton; +} +void ai_SetAIButton(object oPlayer, int nButton, object oAssociate, string sAssociateType, int bOn = TRUE) +{ + int nAIButtons = GetLocalInt(oAssociate, sAIButtonsVarname); + json jButtons = ai_GetAssociateDbJson(oPlayer, sAssociateType, "buttons"); + if(bOn) nAIButtons = nAIButtons | nButton; + else nAIButtons = nAIButtons & ~nButton; + SetLocalInt(oAssociate, sAIButtonsVarname, nAIButtons); + jButtons = JsonArraySet(jButtons, 1, JsonInt(nAIButtons)); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "buttons", jButtons); +} +int ai_GetAIButton(object oPlayer, int nButton, object oAssociate, string sAssociateType) +{ + // This is the DM access switch that uses the same bitwise as the players + // to control what AI widget buttons they can use. + if(ai_GetDMAIAccessButton(nButton)) return FALSE; + int nAIButtons = GetLocalInt(oAssociate, sAIButtonsVarname); + return nAIButtons & nButton; +} +json ai_CreateAIScriptJson(object oPC) +{ + json jScript = JsonArrayInsert(JsonArray(), NuiComboEntry("", 0)); + int nNth = 1; + string sScript = ResManFindPrefix("ai_a_", RESTYPE_NCS, nNth); + while(sScript != "") + { + jScript = JsonArrayInsert(jScript, NuiComboEntry(sScript, nNth)); + sScript = ResManFindPrefix("ai_a_", RESTYPE_NCS, ++nNth); + } + return jScript; +} +json ai_CreateCompanionJson(object oPC, string sCompanion2da) +{ + int nCnt, nMaxRowCount = Get2DARowCount(sCompanion2da); + string sName; + json jCompanion = JsonArray(); + while(nCnt < nMaxRowCount) + { + sName = GetStringByStrRef(StringToInt(Get2DAString(sCompanion2da, "STRREF", nCnt))); + jCompanion = JsonArrayInsert(jCompanion, NuiComboEntry(sName, nCnt++)); + } + return JsonArrayInsert(jCompanion, NuiComboEntry("Random", nCnt)); +} +string ai_GetSpellIconAttributes(object oCaster, int nMetaMagic, int nDomain) +{ + string sAttributeText; + if(nMetaMagic != METAMAGIC_ANY && nMetaMagic != METAMAGIC_NONE) + { + if(nMetaMagic == METAMAGIC_EXTEND) sAttributeText = "X"; + if(nMetaMagic == METAMAGIC_EMPOWER) sAttributeText = "P"; + if(nMetaMagic == METAMAGIC_MAXIMIZE) sAttributeText = "M"; + if(nMetaMagic == METAMAGIC_QUICKEN) sAttributeText = "Q"; + if(nMetaMagic == METAMAGIC_SILENT) sAttributeText = "I"; + if(nMetaMagic == METAMAGIC_STILL) sAttributeText = "T"; + } + else sAttributeText = ""; + if(nDomain > 0) sAttributeText += "D"; + return sAttributeText; +} +void ai_CreateAIMainNUI(object oPC) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + int nMonsterAI = (ResManGetAliasFor("ai_default", RESTYPE_NCS) != ""); + int nAssociateAI = (ResManGetAliasFor("ai_a_default", RESTYPE_NCS) != ""); + string sText = " [Single player]"; + if(AI_SERVER) sText = " [Server]"; + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 500 / 73 + json jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, PHILOS_VERSION + sText, "lbl_version ", 510.0f, 20.0f, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 500 / 101 + jRow = CreateLabel(JsonArray(), "", "lbl_ai_info", 510.0f, 20.0f, NUI_HALIGN_CENTER); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 ******************************************************************* 500 / 129 + jRow = CreateButton(JsonArray(), "Plugin Manager", "btn_plugin_manager", 120.0f, 20.0f, -1.0, "btn_plugin_manager_tooltip"); + if(nAssociateAI) jRow = CreateButtonSelect(jRow, "Associate Widgets", "btn_toggle_assoc_widget", 140.0f, 20.0f, "btn_assoc_widget_tooltip"); + jRow = CreateButtonSelect(jRow, "Action Ghost Mode", "btn_action_ghost", 160.0f, 20.0f, "btn_action_ghost_tooltip"); + jRow = CreateButtonSelect(jRow, "Effect Icons", "btn_effect_icon", 100.0f, 20.0f, "btn_effect_icon_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 ******************************************************************* 500 / 157 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, "MODULE RULES", "lbl_ai_rules", 200.0f, 20.0f, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + float fHeight = 157.0; + // Row 5 ******************************************************************* 500 / --- (28) + // Make the AI options a Group. + json jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_max_henchman", 2, FALSE, 30.0f, 20.0f, "txt_max_henchman_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "Max number of henchmen that is allowed in your party.", "lbl_max_hench", 416.0f, 20.0f, NUI_HALIGN_LEFT, 0, -1.0, "txt_max_henchman_tooltip"); + json jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_xp_scale", 3, FALSE, 40.0f, 20.0f, "txt_xp_scale_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "Modules experience scale.", "lbl_xp_scale", 175.0f, 20.0f, NUI_HALIGN_LEFT, 0, -1.0, "txt_xp_scale_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, " scale to party.", "chbx_party_scale", 150.0, 20.0, "chbx_party_scale_tooltip"); + jGroupRow = CreateButton(jGroupRow, "Default", "btn_default_xp", 70.0f, 20.0f, -1.0, "btn_default_xp_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + fHeight += 78.0; + if(nMonsterAI || nAssociateAI) + { + jGroupRow = CreateCheckBox(JsonArray(), " Creatures will use advanced combat movement.", "chbx_advanced_movement", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Use item level restrictions for creatures [Default is off].", "chbx_ilr", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Creatures can use the skill Use Magic Device.", "chbx_umd", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Creatures can use Healing kits.", "chbx_use_healingkits", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Moral checks, wounded creatures may flee during combat.", "chbx_moral", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), " Spells the AI will not use:", "lbl_restrict_spells", 190.0, 20.0, NUI_HALIGN_LEFT); + jGroupRow = CreateCheckBox(jGroupRow, " Darkness", "chbx_darkness", 90.0, 20.0, "chbx_darkness_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, " Dispels", "chbx_dispels", 90.0, 20.0, "chbx_dispels_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, " Time Stop", "chbx_timestop", 90.0, 20.0, "chbx_timestop_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + fHeight += 196.0; + } + if(nMonsterAI) + { + jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_ai_difficulty", 3, FALSE, 40.0f, 20.0f, "txt_ai_difficulty_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "% chance monsters will attack the weakest target.", "lbl_ai_difficulty", 406.0f, 20.0f, NUI_HALIGN_LEFT, 0, -1.0, "txt_ai_difficulty_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_perception_distance", 2, FALSE, 35.0f, 20.0f, "txt_perception_distance_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "meters is the distance a monster can respond to allies.", "lbl_perception_distance", 411.0f, 20.0f, NUI_HALIGN_LEFT, 0, 0.0, "txt_perception_distance_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can prebuff before combat starts.", "chbx_buff_monsters", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can use summons before combat starts.", "chbx_buff_summons", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can use tactics (ambush, defensive, flanker, etc).", "chbx_ambush_monsters", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "Add ", "lbl_inc_enc", 30.0, 20.0, NUI_HALIGN_LEFT, 0, -1.0); + jGroupRow = CreateTextEditBox(jGroupRow, "sPlaceHolder", "txt_inc_enc", 4, FALSE, 55.0f, 20.0f, "txt_inc_enc_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "monsters per spawned encounter monster.", "lbl_inc_enc", 357.0, 20.0, NUI_HALIGN_LEFT, NUI_VALIGN_MIDDLE, 0.0, "txt_inc_enc_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_inc_hp", 3, FALSE, 40.0f, 20.0f, "txt_inc_hp_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "% increase in all monster's hitpoints.", "lbl_inc_hp", 406.0, 20.0, NUI_HALIGN_LEFT); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "***** WARNING! The options below may break the module! *****", "lbl_warning", 450.0f, 20.0f, NUI_HALIGN_LEFT, 0, 0.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can wander upto ", "chbx_wander", 220.0, 20.0, "chbx_warning_tooltip"); + jGroupRow = CreateTextEditBox(jGroupRow, "sPlaceHolder", "txt_wander_distance", 2, FALSE, 35.0f, 20.0f, "chbx_warning_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "meters and ", "lbl_wander_distance", 80.0f, 20.0f, NUI_HALIGN_LEFT, NUI_VALIGN_MIDDLE, 0.0, "chbx_warning_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, "open doors.", "chbx_open_doors", 100.0, 20.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can summon companions.", "chbx_companions", 450.0, 20.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Summoned associates to remain after masters death.", "chbx_perm_assoc", 450.0, 20.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Make enemy corpses remain.", "chbx_corpses_stay", 450.0, 20.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "", "lbl_perc_dist", 450.0f, 20.0f, NUI_HALIGN_LEFT, 0, 0.0, "lbl_perc_dist_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + fHeight += 336.0; + } + jRow = JsonArrayInsert(JsonArray(), NuiGroup(NuiCol(jGroupCol))); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Get the window location to restore it from the database. + json jLocations = ai_GetAssociateDbJson(oPC, "pc", "locations"); + jLocations = JsonObjectGet(jLocations, AI_MAIN_NUI); + float fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + float fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sName = GetName(oPC); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, AI_MAIN_NUI, sName + " PEPS Main Menu", + fX, fY, 534.0f, fHeight, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Save the associate to the nui for use in 0e_nui + json jData = JsonArray(); + jData = JsonArrayInsert(jData, JsonString(ObjectToString(oPC))); + NuiSetUserData(oPC, nToken, jData); + object oModule = GetModule(); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set all binds, events, and watches. + // Row 1 - Version label. + // Row 2 + int nUsing; + // Check the monster AI. + string sLocation = ResManGetAliasFor("ai_default", RESTYPE_NCS); + if(sLocation != "") + { + nUsing = TRUE; + string sLocation = ResManGetAliasFor("nw_c2_default1", RESTYPE_NCS); + if(sLocation != "OVERRIDE:" && sLocation != "PATCH:peps" && sLocation != "DEVELOPMENT:") nUsing = FALSE; + if(nUsing) sText = "Monster AI working"; + else sText = "Monster AI not working"; + } + else sText = "Monster AI not loaded"; + // Check the associate AI. + sLocation = ResManGetAliasFor("ai_a_default", RESTYPE_NCS); + if(sLocation != "") + { + nUsing = TRUE; + string sLocation = ResManGetAliasFor("nw_ch_ac1", RESTYPE_NCS); + if(sLocation != "OVERRIDE:" && sLocation != "PATCH:peps" && sLocation != "DEVELOPMENT:") nUsing = FALSE; + if(nUsing) sText += ", Associate AI working"; + else sText += ", Associate AI not working"; + } + else sText += ", Associate AI not loaded"; + // Check for PRC. + sLocation = ResManGetAliasFor("prc_ai_fam_percp", RESTYPE_NCS); + if(sLocation != "") sText += ", PRC loaded."; + else + { + // Check the player AI. + sLocation = ResManGetAliasFor("xx_pc_1_hb", RESTYPE_NCS); + if(sLocation != "") sText += ", Player AI loaded."; + else sText += ", Player AI not loaded."; + } + NuiSetBind(oPC, nToken, "lbl_ai_info_label", JsonString(sText)); + // Row 3 + NuiSetBind(oPC, nToken, "btn_plugin_manager_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_plugin_manager_tooltip", JsonString(" Manages external executable scripts.")); + if(nAssociateAI) + { + NuiSetBind(oPC, nToken, "btn_toggle_assoc_widget_event", JsonBool(TRUE)); + int bWidgetOn = !ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, OBJECT_INVALID, "pc"); + NuiSetBind(oPC, nToken, "btn_toggle_assoc_widget", JsonBool(bWidgetOn)); + NuiSetBind(oPC, nToken, "btn_assoc_widget_tooltip", JsonString(" Turns On/Off all associate widgets.")); + } + int bActionGhost = ai_GetAIMode(oPC, AI_MODE_ACTION_GHOST); + NuiSetBind(oPC, nToken, "btn_action_ghost", JsonBool (bActionGhost)); + NuiSetBind(oPC, nToken, "btn_action_ghost_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_action_ghost_tooltip", JsonString(" Allows associates to move through creatures while in command mode.")); + int bEffectIcon = ai_GetMagicMode(oPC, AI_MAGIC_EFFECT_ICON_REPORT); + NuiSetBind(oPC, nToken, "btn_effect_icon", JsonBool (bEffectIcon)); + NuiSetBind(oPC, nToken, "btn_effect_icon_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_effect_icon_tooltip", JsonString(" When on sends effect icon reports to the chat screen.")); + // Row 3 Label for AI RULES + // Row 4 + NuiSetBind(oPC, nToken, "txt_max_henchman", JsonString(IntToString(GetLocalInt(oModule, AI_RULE_MAX_HENCHMAN)))); + NuiSetBindWatch (oPC, nToken, "txt_max_henchman", TRUE); + NuiSetBind(oPC, nToken, "txt_max_henchman_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_max_henchman_tooltip", JsonString(" Set max number of henchman allowed (1-12).")); + NuiSetBind(oPC, nToken, "txt_xp_scale", JsonString(IntToString(GetModuleXPScale()))); + NuiSetBindWatch (oPC, nToken, "txt_xp_scale", TRUE); + NuiSetBind(oPC, nToken, "txt_xp_scale_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_xp_scale_tooltip", JsonString(" Set the modules XP scale (0 - 200) Normal D&D is 10.")); + NuiSetBind(oPC, nToken, "chbx_party_scale_check", JsonBool(GetLocalInt(oModule, AI_RULE_PARTY_SCALE))); + NuiSetBindWatch(oPC, nToken, "chbx_party_scale_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_party_scale_event", JsonBool(TRUE)); + sText = IntToString(GetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP)); + NuiSetBind(oPC, nToken, "chbx_party_scale_tooltip", JsonString(" PEPS adjusts your XP based on party size from (" + sText + ").")); + NuiSetBind(oPC, nToken, "btn_default_xp_event", JsonBool(TRUE)); + sText = IntToString(GetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE)); + NuiSetBind(oPC, nToken, "btn_default_xp_tooltip", JsonString(" Reset the Modules XP to (" + sText + ").")); + NuiSetBind(oPC, nToken, "chbx_warning_tooltip", JsonString(" ** This will break some modules! ** See Readme for issues!")); + if(nMonsterAI) + { + NuiSetBind(oPC, nToken, "txt_ai_difficulty", JsonString(IntToString(GetLocalInt(oModule, AI_RULE_AI_DIFFICULTY)))); + NuiSetBindWatch(oPC, nToken, "txt_ai_difficulty", TRUE); + NuiSetBind(oPC, nToken, "txt_ai_difficulty_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_buff_monsters_check", JsonBool(GetLocalInt(oModule, AI_RULE_BUFF_MONSTERS))); + NuiSetBindWatch(oPC, nToken, "chbx_buff_monsters_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_monsters_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_buff_summons_check", JsonBool(GetLocalInt(oModule, AI_RULE_PRESUMMON))); + NuiSetBindWatch(oPC, nToken, "chbx_buff_summons_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_summons_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_ambush_monsters_check", JsonBool(GetLocalInt(oModule, AI_RULE_AMBUSH))); + NuiSetBindWatch(oPC, nToken, "chbx_ambush_monsters_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ambush_monsters_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_companions_check", JsonBool(GetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS))); + NuiSetBindWatch(oPC, nToken, "chbx_companions_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_companions_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_perm_assoc_check", JsonBool(GetLocalInt(oModule, AI_RULE_PERM_ASSOC))); + string sModuleName = GetModuleName(); + if(!GetLocalInt(oModule, AI_USING_PRC) && + (sModuleName != "Neverwinter Nights - Infinite Dungeons" || + sModuleName != "Infinite Dungeons [PRC8]")) + { + NuiSetBindWatch(oPC, nToken, "chbx_perm_assoc_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_perm_assoc_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_corpses_stay_check", JsonBool(GetLocalInt(oModule, AI_RULE_CORPSES_STAY))); + NuiSetBindWatch(oPC, nToken, "chbx_corpses_stay_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_corpses_stay_event", JsonBool(TRUE)); + } + NuiSetBind(oPC, nToken, "txt_perception_distance", JsonString(FloatToString(GetLocalFloat(oModule, AI_RULE_PERCEPTION_DISTANCE), 0, 0))); + NuiSetBindWatch(oPC, nToken, "txt_perception_distance", TRUE); + NuiSetBind(oPC, nToken, "txt_perception_distance_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_perception_distance_tooltip", JsonString(" Range [10 to 60 meters] from the player.")); + NuiSetBindWatch(oPC, nToken, "lbl_perc_dist", TRUE); + int nPercDist = GetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE); + if(nPercDist < 8 || nPercDist > 11) + { + nPercDist = 11; + SetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE, 11); + } + if(nPercDist == 8) sText = " Monster perception: Short [10 Sight / 10 Listen]"; + else if(nPercDist == 9) sText = " Monster perception: Medium [20 Sight / 20 Listen]"; + else if(nPercDist == 10) sText = " Monster perception: Long [35 Sight / 20 Listen]"; + else sText = " Monster perception: Default [Monster's default values]"; + NuiSetBind(oPC, nToken, "lbl_perc_dist_label", JsonString(sText)); + NuiSetBind(oPC, nToken, "lbl_perc_dist_tooltip", JsonString(" Use the mouse wheel to change values.")); + int bWander = GetLocalInt(oModule, AI_RULE_WANDER); + NuiSetBind(oPC, nToken, "chbx_wander_check", JsonBool(bWander)); + NuiSetBindWatch(oPC, nToken, "chbx_wander_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_wander_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_wander_distance", JsonString(FloatToString(GetLocalFloat(oModule, AI_RULE_WANDER_DISTANCE), 0, 0))); + NuiSetBindWatch(oPC, nToken, "txt_wander_distance", TRUE); + NuiSetBind(oPC, nToken, "txt_wander_distance_event", JsonBool(bWander)); + NuiSetBind(oPC, nToken, "chbx_open_doors_check", JsonBool(GetLocalInt(oModule, AI_RULE_OPEN_DOORS))); + NuiSetBindWatch(oPC, nToken, "chbx_open_doors_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_open_doors_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_open_doors_tooltip", JsonString(" This allows monsters to open doors to hunt you down!")); + NuiSetBind(oPC, nToken, "txt_inc_enc_tooltip", JsonString(" Spawns one extra monster per counter above 1. Adds value to counter per encounter monster spawned.")); + NuiSetBind(oPC, nToken, "txt_inc_enc", JsonString(FloatToString(GetLocalFloat(oModule, AI_INCREASE_ENC_MONSTERS), 0, 2))); + NuiSetBindWatch(oPC, nToken, "txt_inc_enc", TRUE); + NuiSetBind(oPC, nToken, "txt_inc_enc_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_inc_hp", JsonString(IntToString(GetLocalInt(oModule, AI_INCREASE_MONSTERS_HP)))); + NuiSetBindWatch(oPC, nToken, "txt_inc_hp", TRUE); + NuiSetBind(oPC, nToken, "txt_inc_hp_event", JsonBool(TRUE)); + } + if(nMonsterAI || nAssociateAI) + { + NuiSetBind(oPC, nToken, "chbx_moral_check", JsonBool(GetLocalInt(oModule, AI_RULE_MORAL_CHECKS))); + NuiSetBindWatch (oPC, nToken, "chbx_moral_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_moral_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_advanced_movement_check", JsonBool(GetLocalInt(oModule, AI_RULE_ADVANCED_MOVEMENT))); + NuiSetBindWatch (oPC, nToken, "chbx_advanced_movement_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_advanced_movement_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_ilr_check", JsonBool(GetLocalInt(oModule, AI_RULE_ILR))); + NuiSetBindWatch (oPC, nToken, "chbx_ilr_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ilr_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_umd_check", JsonBool(GetLocalInt(oModule, AI_RULE_ALLOW_UMD))); + NuiSetBindWatch (oPC, nToken, "chbx_umd_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_umd_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_use_healingkits_check", JsonBool(GetLocalInt(oModule, AI_RULE_HEALERSKITS))); + NuiSetBindWatch (oPC, nToken, "chbx_use_healingkits_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_use_healingkits_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_darkness_check", JsonBool(ai_SpellRestricted(SPELL_DARKNESS))); + NuiSetBindWatch (oPC, nToken, "chbx_darkness_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_darkness_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_darkness_tooltip", JsonString(" AI will not use the Darkness spell in combat.")); + NuiSetBind(oPC, nToken, "chbx_dispels_check", JsonBool(ai_SpellRestricted(SPELL_DISPEL_MAGIC))); + NuiSetBindWatch (oPC, nToken, "chbx_dispels_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_dispels_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_dispels_tooltip", JsonString(" AI will not use any of the Dispel spells in combat.")); + NuiSetBind(oPC, nToken, "chbx_timestop_check", JsonBool(ai_SpellRestricted(SPELL_TIME_STOP))); + NuiSetBindWatch (oPC, nToken, "chbx_timestop_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_timestop_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_timestop_tooltip", JsonString(" AI will not use the Time Stop spell in combat.")); + } +} +void ai_CreateAssociateCommandNUI(object oPC, object oAssociate) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + int bRight, bLeft; + int bIsPC = ai_GetIsCharacter(oAssociate); + int bUsingPCAI = ResManGetAliasFor("xx_pc_1_hb", RESTYPE_NCS) != ""; + int bUsingHenchAI = ResManGetAliasFor("nw_ch_ac1", RESTYPE_NCS) != ""; + float fHeight = 73.0; + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 500 / 73 + json jRow = JsonArray(); + json jCol = JsonArray(); + // If all the AI buttons are blocked then don't load the menu. + if(GetLocalInt(GetModule(), sDMAIAccessVarname) != 203423743) + { + if(bIsPC) + { + if(bUsingPCAI || !AI_SERVER) + { + if(bUsingPCAI) + { + jRow = CreateButton(jRow, "AI Menu", "btn_ai_menu", 232.0, 20.0, -1.0, "btn_ai_menu_tooltip"); + } + if(!AI_SERVER) + { + jRow = CreateButton(jRow, "Main Menu", "btn_main_menu", 232.0, 20.0, -1.0, "btn_main_menu_tooltip"); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + } + else + { + if(bUsingHenchAI) + { + jRow = CreateButton(jRow, "AI Menu", "btn_ai_menu", 232.0, 20.0, -1.0, "btn_ai_menu_tooltip"); + } + jRow = CreateButtonSelect(jRow, "", "btn_widget_onoff", 232.0, 20.0, "btn_widget_onoff_tooltip"); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + } + // Row 2 ******************************************************************* 500 / 101 + jRow = JsonArray(); + jRow = CreateButtonSelect(jRow, "Lock Widget", "btn_widget_lock", 154.0, 20.0, "btn_widget_lock_tooltip"); + jRow = CreateButton(jRow, "Copy Settings", "btn_copy_settings", 154.0, 20.0, -1.0, "btn_copy_settings_tooltip"); + jRow = CreateButtonSelect(jRow, "Vertical Widget", "btn_vertical_widget", 154.0, 20.0, "btn_vertical_widget_tooltip"); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 ******************************************************************* 500 / 129 + bRight = !ai_GetDMWAccessButton(BTN_CMD_ACTION); + bLeft = !ai_GetDMWAccessButton(BTN_CMD_GUARD); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "", "btn_cmd_action", 200.0, 20.0, -1.0, "btn_cmd_action_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_action", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "", "btn_cmd_guard", 200.0, 20.0, -1.0, "btn_cmd_guard_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_guard", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 4 ******************************************************************* 500 / 157 + jRow = JsonArray(); + bRight = !ai_GetDMWAccessButton(BTN_CMD_HOLD); + bLeft = !ai_GetDMWAccessButton(BTN_CMD_ATTACK); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "", "btn_cmd_hold", 200.0, 20.0, -1.0, "btn_cmd_hold_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_hold", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "", "btn_cmd_attack", 200.0, 20.0, -1.0, "btn_cmd_attack_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_attack", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 5 ******************************************************************* 500 / 213 + bRight = !ai_GetDMWAccessButton(BTN_CMD_FOLLOW); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_FOLLOW_TARGET); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "", "btn_cmd_follow", 200.0, 20.0, -1.0, "btn_cmd_follow_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_follow", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Select follow target", "btn_follow_target", 200.0, 20.0, -1.0, "btn_follow_target_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_follow_target", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 6 ******************************************************************* 500 / 185 + if(bIsPC) + { + bRight = !ai_GetDMWAccessButton(BTN_CMD_SEARCH); + bLeft = !ai_GetDMWAccessButton(BTN_CMD_STEALTH); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "All Search Mode", "btn_cmd_search", 200.0, 20.0, -1.0, "btn_cmd_search_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_search", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "All Stealth Mode", "btn_cmd_stealth", 200.0, 20.0, -1.0, "btn_cmd_stealth_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_stealth", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + } + // Row 7 ******************************************************************* 500 / 241 + bRight = !ai_GetDMWAccessButton(BTN_CMD_AI_SCRIPT); + bLeft = !ai_GetDMWAccessButton(BTN_CMD_PLACE_TRAP); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Combat Tactics", "btn_cmd_ai_script", 200.0, 20.0, -1.0, "btn_cmd_ai_script_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_ai_script", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Place a Trap", "btn_cmd_place_trap", 200.0, 20.0, -1.0, "btn_cmd_place_trap_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_place_trap", 25.0, 20.0); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + // Row 8 ******************************************************************* 500 / --- + int bMemorize = ai_GetIsSpellCaster(oAssociate); + int bSpellbook = ai_GetIsSpellBookRestrictedCaster(oAssociate); + bRight = !ai_GetDMWAccessButton(BTN_CMD_SPELL_WIDGET); + bLeft = !ai_GetDMWAccessButton(BTN_DM_CMD_MEMORIZE); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Set Quick Widget", "btn_quick_widget", 200.0, 20.0, -1.0, "btn_quick_widget_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_quick_widget", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) // Memorizes their spells. + { + if(bMemorize == 2 && bSpellbook) + { + jRow = CreateButton(jRow, "Memorize Spells", "btn_spell_memorize", 114.0, 20.0, -1.0, "btn_spell_memorize_tooltip"); + jRow = CreateButton(jRow, "Known Spells", "btn_spell_known", 110.0, 20.0, -1.0, "btn_spell_known_tooltip"); + } + else if(bMemorize == 2) + { + jRow = CreateButton(jRow, "Set Memorize Spells", "btn_spell_memorize", 200.0, 20.0, -1.0, "btn_spell_memorize_tooltip"); + jRow = CreateLabel(jRow, "", "blank_label_1", 25.0, 20.0); + } + else if(bSpellbook && !ai_GetIsCharacter(oAssociate)) + { + jRow = CreateButton(jRow, "Set Known Spells", "btn_spell_known", 200.0, 20.0, -1.0, "btn_spell_known_tooltip"); + jRow = CreateLabel(jRow, "", "blank_label_1", 25.0, 20.0); + } + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + // Row 9 ******************************************************************* 500 / 269 + bRight = !ai_GetDMWAccessButton(BTN_BUFF_SHORT); + bLeft = !ai_GetDMWAccessButton(BTN_BUFF_LONG); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Cast Short Buff spells", "btn_buff_short", 200.0, 20.0, -1.0, "btn_buff_short_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_buff_short", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Cast Long Buff spells", "btn_buff_long", 200.0, 20.0, -1.0, "btn_buff_long_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_buff_long", 25.0, 20.0); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + // Row 10 ******************************************************************* 500 / 297 + bRight = !ai_GetDMWAccessButton(BTN_BUFF_ALL); + bLeft = !ai_GetDMWAccessButton(BTN_BUFF_REST); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Cast All Buff spells", "btn_buff_all", 200.0, 20.0, -1.0, "btn_buff_all_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_buff_all", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Buff after resting", "btn_buff_rest", 200.0, 20.0, -1.0, "btn_buff_rest_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_buff_rest", 25.0, 20.0); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + // Row 11 ******************************************************************* 500 / 325 + bRight = !ai_GetDMWAccessButton(BTN_CMD_JUMP_TO); + bLeft = !ai_GetDMWAccessButton(BTN_CMD_GHOST_MODE); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "", "btn_jump_to", 200.0, 20.0, -1.0, "btn_jump_to"); + jRow = CreateCheckBox(jRow, "", "chbx_jump_to", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Ghost Mode", "btn_ghost_mode", 200.0, 20.0, -1.0, "btn_ghost_mode_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ghost_mode", 25.0, 20.0); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + // Row 12 ****************************************************************** 500 / 353 + bRight = !ai_GetDMWAccessButton(BTN_CMD_CAMERA); + bLeft = !ai_GetDMWAccessButton(BTN_CMD_INVENTORY); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Toggle Camera Focus", "btn_camera", 200.0, 20.0, -1.0, "btn_camera_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_camera", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Open/Close Inventory", "btn_inventory", 200.0, 20.0, -1.0, "btn_inventory_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_inventory", 25.0, 20.0); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + // Row 13 ******************************************************************* 500 / --- + int bFamiliar = GetHasFeat(FEAT_SUMMON_FAMILIAR, oAssociate, TRUE); + if(!ai_GetDMWAccessButton(BTN_CMD_FAMILIAR) && bFamiliar) + { + jRow = JsonArray(); + jRow = CreateLabel(jRow, "", "lbl_familiar_type", 225.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateLabel(jRow, "", "lbl_familiar_name", 225.0, 20.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + // Row 14 ******************************************************************* 500 / --- + jRow = JsonArray(); + jRow = CreateCombo(jRow, ai_CreateCompanionJson(oPC, "hen_familiar"), "cmb_familiar", 200.0, 20.0); + jRow = CreateCheckBox(jRow, "", "chbx_familiar", 25.0, 20.0); + jRow = CreateTextEditBox(jRow, "txtbox", "txt_familiar_name", 50, FALSE, 178.0, 20.0); + jRow = CreateButton(jRow, "", "btn_familiar_name", 55.0, 20.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + // Row 15 ******************************************************************* 500 / --- + int bCompanion = GetHasFeat(FEAT_ANIMAL_COMPANION, oAssociate, TRUE); + if(!ai_GetDMWAccessButton(BTN_CMD_COMPANION) && bCompanion) + { + jRow = JsonArray(); + jRow = CreateLabel(jRow, "", "lbl_companion_type", 225.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateLabel(jRow, "", "lbl_companion_name", 225.0, 20.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + // Row 16 ******************************************************************* 500 / --- + jRow = JsonArray(); + jRow = CreateCombo(jRow, ai_CreateCompanionJson(oPC, "hen_companion"), "cmb_companion", 200.0, 20.0); + jRow = CreateCheckBox(jRow, "", "chbx_companion", 25.0, 20.0); + jRow = CreateTextEditBox(jRow, "txtbox", "txt_companion_name", 50, FALSE, 178.0, 20.0); + jRow = CreateButton(jRow, "", "btn_companion_name", 55.0, 20.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + // Row 17+ ****************************************************************** 500 / --- + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jPCPlugins; + if(bIsPC) + { + jPCPlugins = ai_UpdatePluginsForPC(oPC); + // Set the plugins the player can use. + int nIndex; + string sButton, sName; + json jPlugin = JsonArrayGet(jPCPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + jRow = JsonArray(); + sButton = IntToString(nIndex); + sName = JsonGetString(JsonArrayGet(jPlugin, 2)); + jRow = CreateButton(jRow, sName, "btn_plugin_" + sButton, 200.0f, 20.0f, -1.0, "btn_plugin_" + sButton + "_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_plugin_" + sButton, 25.0, 20.0, "chbx_plugin_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jPlugin = JsonArrayGet(jPCPlugins, ++nIndex); + if(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + sName = JsonGetString(JsonArrayGet(jPlugin, 2)); + jRow = CreateButton(jRow, sName, "btn_plugin_" + sButton, 200.0f, 20.0f, -1.0, "btn_plugin_" + sButton + "_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_plugin_" + sButton, 25.0, 20.0, "chbx_plugin_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + else + { + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + break; + } + jPlugin = JsonArrayGet(jPCPlugins, ++nIndex); + } + } + // Row 18 ****************************************************************** 500 / --- + jRow = JsonArray(); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateLabel(jRow, "", "lbl_info_1", 475.0, 20.0, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + // Get the window location to restore it from the database. + float fX, fY; + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + jLocations = JsonObjectGet(jLocations, sAssociateType + AI_COMMAND_NUI); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) { fX = -1.0; fY = -1.0; } + else + { + fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + } + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sName = GetName(oAssociate); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, sAssociateType + AI_COMMAND_NUI, sName + " Command Menu", + fX, fY, 500.0, fHeight + 12.0, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Get which buttons are activated. + int bAIWidgetLock = ai_GetWidgetButton(oPC, BTN_WIDGET_LOCK, oAssociate, sAssociateType); + int bCmdAction = ai_GetWidgetButton(oPC, BTN_CMD_ACTION, oAssociate, sAssociateType); + int bCmdGuard = ai_GetWidgetButton(oPC, BTN_CMD_GUARD, oAssociate, sAssociateType); + int bCmdHold = ai_GetWidgetButton(oPC, BTN_CMD_HOLD, oAssociate, sAssociateType); + int bCmdSearch = ai_GetWidgetButton(oPC, BTN_CMD_SEARCH, oAssociate, sAssociateType); + int bCmdStealth = ai_GetWidgetButton(oPC, BTN_CMD_STEALTH, oAssociate, sAssociateType); + int bCmdAttack = ai_GetWidgetButton(oPC, BTN_CMD_ATTACK, oAssociate, sAssociateType); + int bCmdFollow = ai_GetWidgetButton(oPC, BTN_CMD_FOLLOW, oAssociate, sAssociateType); + int bFollowTarget = ai_GetAIButton(oPC, BTN_AI_FOLLOW_TARGET, oAssociate, sAssociateType); + int bCmdAIScript = ai_GetWidgetButton(oPC, BTN_CMD_AI_SCRIPT, oAssociate, sAssociateType); + int bCmdPlacetrap = ai_GetWidgetButton(oPC, BTN_CMD_PLACE_TRAP, oAssociate, sAssociateType); + int bSpellWidget = ai_GetWidgetButton(oPC, BTN_CMD_SPELL_WIDGET, oAssociate, sAssociateType); + int bBuffRest = ai_GetWidgetButton(oPC, BTN_BUFF_REST, oAssociate, sAssociateType); + int bBuffShort = ai_GetWidgetButton(oPC, BTN_BUFF_SHORT, oAssociate, sAssociateType); + int bBuffLong = ai_GetWidgetButton(oPC, BTN_BUFF_LONG, oAssociate, sAssociateType); + int bBuffAll = ai_GetWidgetButton(oPC, BTN_BUFF_ALL, oAssociate, sAssociateType); + int bJumpTo = ai_GetWidgetButton(oPC, BTN_CMD_JUMP_TO, oAssociate, sAssociateType); + int bGhostMode = ai_GetWidgetButton(oPC, BTN_CMD_GHOST_MODE, oAssociate, sAssociateType); + int bCamera = ai_GetWidgetButton(oPC, BTN_CMD_CAMERA, oAssociate, sAssociateType); + int bInventory = ai_GetWidgetButton(oPC, BTN_CMD_INVENTORY, oAssociate, sAssociateType); + int bBtnFamiliar = ai_GetWidgetButton(oPC, BTN_CMD_FAMILIAR, oAssociate, sAssociateType); + int bBtnCompanion = ai_GetWidgetButton(oPC, BTN_CMD_COMPANION, oAssociate, sAssociateType); + int bVertical = ai_GetWidgetButton(oPC, BTN_WIDGET_VERTICAL, oAssociate, sAssociateType); + // Save the associate to the nui for use in 0e_nui + json jData = JsonArray(); + jData = JsonArrayInsert(jData, JsonString(ObjectToString(oAssociate))); + NuiSetUserData(oPC, nToken, jData); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set all binds, events, and watches. + string sText; + // Row 1 + // If all the AI buttons are blocked then don't load the menu. + if(GetLocalInt(GetModule(), sDMAIAccessVarname) != 203423743) + { + if(bIsPC) + { + if(bUsingPCAI) + { + NuiSetBind(oPC, nToken, "btn_ai_menu_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_ai_menu_tooltip", JsonString(" " + sName + " AI options")); + } + NuiSetBind(oPC, nToken, "btn_copy_settings_event", JsonBool (TRUE)); + sText = " Copy AI and command settings for one creature to others."; + NuiSetBind(oPC, nToken, "btn_copy_settings_tooltip", JsonString(sText)); + if(!AI_SERVER) + { + NuiSetBind(oPC, nToken, "btn_main_menu_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_main_menu_tooltip", JsonString(" Module Options")); + } + } + else + { + if(bUsingHenchAI) + { + NuiSetBind(oPC, nToken, "btn_ai_menu_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_ai_menu_tooltip", JsonString(" " + sName + " AI options")); + } + NuiSetBind(oPC, nToken, "btn_copy_settings_event", JsonBool (TRUE)); + sText = " Copy AI and command settings for one creature to others."; + NuiSetBind(oPC, nToken, "btn_copy_settings_tooltip", JsonString(sText)); + string sText2; + if(ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType)) + { + sText = "Off"; sText2 = "on"; + NuiSetBind(oPC, nToken, "btn_widget_onoff", JsonBool(FALSE)); + } + else + { + sText = "On"; sText2 = "off"; + NuiSetBind(oPC, nToken, "btn_widget_onoff", JsonBool(TRUE)); + } + NuiSetBind(oPC, nToken, "btn_widget_onoff_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_onoff_label", JsonString("Widget " + sText)); + NuiSetBind(oPC, nToken, "btn_widget_onoff_tooltip", JsonString( + " Turn " + sName + " widget " + sText2)); + } + } + // Row 2 + NuiSetBind(oPC, nToken, "btn_widget_lock_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_lock", JsonBool(bAIWidgetLock)); + NuiSetBind(oPC, nToken, "btn_widget_lock_tooltip", JsonString( + " Locks " + sName + " widget to the current location.")); + NuiSetBind(oPC, nToken, "btn_widget_size_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_size_tooltip", JsonString( + " Adjusts the size of " + sName + " widget buttons")); + NuiSetBind(oPC, nToken, "btn_vertical_widget_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_vertical_widget", JsonBool(bVertical)); + NuiSetBind(oPC, nToken, "btn_vertical_widget_tooltip", JsonString( + " " + sName + " widget will display vertically")); + // Row 3 + NuiSetBind(oPC, nToken, "chbx_cmd_action_check", JsonBool (bCmdAction)); + NuiSetBindWatch(oPC, nToken, "chbx_cmd_action_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_action_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_action_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_cmd_guard_check", JsonBool (bCmdGuard)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_guard_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_guard_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_guard_event", JsonBool (TRUE)); + // Row 4 + NuiSetBind(oPC, nToken, "chbx_cmd_hold_check", JsonBool (bCmdHold)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_hold_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_hold_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_hold_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_cmd_attack_check", JsonBool (bCmdAttack)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_attack_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_attack_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_attack_event", JsonBool (TRUE)); + // Row 5 + NuiSetBind(oPC, nToken, "chbx_cmd_follow_check", JsonBool (bCmdFollow)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_follow_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_follow_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_follow_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_follow_target_check", JsonBool (bFollowTarget)); + NuiSetBindWatch (oPC, nToken, "chbx_follow_target_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_follow_target_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_follow_target_event", JsonBool (TRUE)); + // Row 6 + if(bIsPC) + { + NuiSetBind(oPC, nToken, "chbx_cmd_search_check", JsonBool (bCmdSearch)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_search_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_search_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_search_event", JsonBool (TRUE)); + if(ai_GetAIMode(oPC, AI_MODE_AGGRESSIVE_SEARCH)) sText = " leave "; + else sText = " enter "; + NuiSetBind(oPC, nToken, "btn_cmd_search_tooltip", JsonString(" Everyone" + sText + "search mode")); + NuiSetBind(oPC, nToken, "chbx_cmd_stealth_check", JsonBool (bCmdStealth)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_stealth_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_stealth_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_stealth_event", JsonBool (TRUE)); + if(ai_GetAIMode(oPC, AI_MODE_AGGRESSIVE_STEALTH)) sText = " leave "; + else sText = " enter "; + NuiSetBind(oPC, nToken, "btn_cmd_stealth_tooltip", JsonString(" Everyone" + sText + "stealth mode")); + } + // Command labels + if(bIsPC) sText = " All "; + else sText = " "; + NuiSetBind(oPC, nToken, "btn_cmd_action_label", JsonString(sText + "Action")); + NuiSetBind(oPC, nToken, "btn_cmd_guard_label", JsonString(sText + "Guard Mode")); + NuiSetBind(oPC, nToken, "btn_cmd_hold_label", JsonString(sText + "Hold Mode")); + NuiSetBind(oPC, nToken, "btn_cmd_attack_label", JsonString(sText + "Normal Mode")); + NuiSetBind(oPC, nToken, "btn_cmd_follow_label", JsonString(sText + "Follow Mode")); + NuiSetBind(oPC, nToken, "btn_follow_target_label", JsonString(" Follow Target")); + float fRange = GetLocalFloat(oAssociate, AI_FOLLOW_RANGE) + + StringToFloat(Get2DAString("appearance", "PREFATCKDIST", GetAppearanceType(oAssociate))); + string sRange = FloatToString(fRange, 0, 0); + if(bIsPC) + { + sText = " All associates"; + NuiSetBind(oPC, nToken, "btn_cmd_follow_tooltip", JsonString(sText + " enter follow mode")); + } + else + { + sText = " " + GetName(oAssociate); + NuiSetBind(oPC, nToken, "btn_cmd_follow_tooltip", JsonString(sText + " enter follow mode [" + sRange + " meters]")); + } + NuiSetBind(oPC, nToken, "btn_cmd_action_tooltip", JsonString(sText + " do actions")); + NuiSetBind(oPC, nToken, "btn_cmd_guard_tooltip", JsonString(sText + " enter guard mode")); + NuiSetBind(oPC, nToken, "btn_cmd_hold_tooltip", JsonString(sText + " enter hold mode")); + NuiSetBind(oPC, nToken, "btn_cmd_attack_tooltip", JsonString(sText + " enter normal mode")); + object oTarget = GetLocalObject(oAssociate, AI_FOLLOW_TARGET); + string sTarget; + if(oTarget != OBJECT_INVALID) sTarget = GetName(oTarget); + else + { + if(ai_GetIsCharacter(oAssociate)) sTarget = "nobody"; + else sTarget = GetName(oPC); + } + NuiSetBind(oPC, nToken, "btn_follow_target_tooltip", JsonString(" " + GetName(oAssociate) + " following " + sTarget + " [" + sRange + " meters]")); + // Row 7 + NuiSetBind(oPC, nToken, "chbx_cmd_ai_script_check", JsonBool (bCmdAIScript)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_ai_script_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_ai_script_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_event", JsonBool (TRUE)); + sText = " Using normal tactics"; + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) != "") + { + string sScript = GetLocalString(oAssociate, AI_COMBAT_SCRIPT); + if(sScript == "ai_a_ambusher") sText = " Ambusher: Attacks from a hidden position"; + else if(sScript == "ai_a_flanker") sText = " Flanker: Attacks enemies engaged with allies"; + else if(sScript == "ai_a_peaceful") sText = " Peaceful: Avoids attacking any enemies if possible"; + else if(sScript == "ai_a_defensive") sText = " Defensive: Attacks then uses Expertise/Parry"; + else if(sScript == "ai_a_ranged") sText = " Ranged: Attacks from range as much as possible"; + else if(sScript == "ai_a_cntrspell") sText = " Counter Spell: Tries to counter enemy spells"; + } + else + { + if(GetCombatCondition(X0_COMBAT_FLAG_AMBUSHER, oAssociate)) sText = "Using ambush tactics"; + else if(GetCombatCondition(X0_COMBAT_FLAG_COWARDLY, oAssociate)) sText = "Using coward tactics"; + else if(GetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE, oAssociate)) sText = "Using defensive tactics"; + else if(GetCombatCondition(X0_COMBAT_FLAG_RANGED, oAssociate)) sText = "Using ranged tactics"; + } + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_tooltip", JsonString(sText)); + if(GetSkillRank(SKILL_SET_TRAP, oAssociate, TRUE) > 0) + { + NuiSetBind(oPC, nToken, "chbx_cmd_place_trap_check", JsonBool (bCmdPlacetrap)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_place_trap_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_place_trap_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_place_trap_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_place_trap_tooltip", JsonString ( + " Place a trap at the location selected")); + } + // Row 8 + NuiSetBind(oPC, nToken, "btn_quick_widget_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_quick_widget_tooltip", JsonString( + " Add/Remove abilities and spells from creatures widget")); + NuiSetBind(oPC, nToken, "chbx_quick_widget_check", JsonBool (bSpellWidget)); + NuiSetBindWatch (oPC, nToken, "chbx_quick_widget_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_quick_widget_event", JsonBool(TRUE)); + if(bMemorize == 2) // Memorizes their spells. + { + NuiSetBind(oPC, nToken, "btn_spell_memorize_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_spell_memorize_tooltip", JsonString( + " Change memorized spell list.")); + } + if(bSpellbook) // Change known spells. + { + NuiSetBind(oPC, nToken, "btn_spell_known_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_spell_known_tooltip", JsonString( + " Change known spell list.")); + } + // Row 9 + NuiSetBind(oPC, nToken, "chbx_buff_short_check", JsonBool (bBuffShort)); + NuiSetBindWatch (oPC, nToken, "chbx_buff_short_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_short_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_short_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_buff_short_tooltip", JsonString ( + " Buff the party with short duration spells")); + NuiSetBind(oPC, nToken, "chbx_buff_long_check", JsonBool (bBuffLong)); + NuiSetBindWatch (oPC, nToken, "chbx_buff_long_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_long_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_long_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_long_tooltip", JsonString ( + " Buff the party with long duration spells")); + // Row 10 + NuiSetBind(oPC, nToken, "chbx_buff_all_check", JsonBool (bBuffAll)); + NuiSetBindWatch (oPC, nToken, "chbx_buff_all_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_all_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_all_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_all_tooltip", JsonString ( + " Buff the party with all our defensive spells")); + if(!bIsPC && ResManGetAliasFor("prc_ai_fam_percp", RESTYPE_NCS) == "") + { + NuiSetBind(oPC, nToken, "chbx_buff_rest_check", JsonBool (bBuffRest)); + NuiSetBindWatch (oPC, nToken, "chbx_buff_rest_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_rest_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_rest_event", JsonBool (TRUE)); + if(ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST)) sText = " [On] Turn buffing after resting off"; + else sText = " [Off] Turn buffing after resting on"; + NuiSetBind (oPC, nToken, "btn_buff_rest_tooltip", JsonString (sText)); + } + // Row 11 + NuiSetBind(oPC, nToken, "chbx_jump_to_check", JsonBool(bJumpTo)); + NuiSetBindWatch (oPC, nToken, "chbx_jump_to_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_jump_to_event", JsonBool(TRUE)); + sText = GetName(oPC); + if(oPC == oAssociate) sName = "everyone"; + else sName = GetName(oAssociate); + NuiSetBind(oPC, nToken, "btn_jump_to_label", JsonString("Jump to " + sText)); + NuiSetBind(oPC, nToken, "btn_jump_to_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_jump_to_tooltip", JsonString ( + " Jump " + sName + " to " + sText)); + + NuiSetBind(oPC, nToken, "chbx_ghost_mode_check", JsonBool (bGhostMode)); + NuiSetBindWatch (oPC, nToken, "chbx_ghost_mode_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ghost_mode_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ghost_mode_event", JsonBool (TRUE)); + sText = "On"; + if(ai_GetAIMode(oAssociate, AI_MODE_GHOST)) sText = "Off"; + NuiSetBind(oPC, nToken, "btn_ghost_mode_tooltip", JsonString ( + " Turn " + sText + " clipping through creatures for " + GetName(oAssociate))); + // Row 12 + NuiSetBind(oPC, nToken, "chbx_camera_check", JsonBool (bCamera)); + NuiSetBindWatch (oPC, nToken, "chbx_camera_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_camera_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_camera_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_camera_tooltip", JsonString ( + " Toggle camera view for " + sName)); + NuiSetBind(oPC, nToken, "chbx_inventory_check", JsonBool (bInventory)); + NuiSetBindWatch (oPC, nToken, "chbx_inventory_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_inventory_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_inventory_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_inventory_tooltip", JsonString ( + " Open " + sName + " inventory")); + // Row 13 & 14 + if(bFamiliar) + { + NuiSetBind(oPC, nToken, "chbx_familiar_check", JsonBool(bBtnFamiliar)); + NuiSetBindWatch (oPC, nToken, "chbx_familiar_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_familiar_event", JsonBool(TRUE)); + int nFamiliar = GetFamiliarCreatureType(oAssociate); + NuiSetBind(oPC, nToken, "cmb_familiar_selected", JsonInt(nFamiliar)); + string sFamiliarName = GetFamiliarName(oAssociate); + NuiSetBind(oPC, nToken, "txt_familiar_name", JsonString(sFamiliarName)); + if(!bIsPC) + { + NuiSetBind(oPC, nToken, "lbl_familiar_type_label", JsonString("Change familiar type")); + NuiSetBind(oPC, nToken, "lbl_familiar_name_label", JsonString("Change familiar name")); + NuiSetBind(oPC, nToken, "cmb_familiar_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "cmb_familiar_selected", TRUE); + NuiSetBind(oPC, nToken, "txt_familiar_name_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "txt_familiar_name", TRUE); + NuiSetBind(oPC, nToken, "btn_familiar_name_label", JsonString("Save")); + } + else + { + NuiSetBind(oPC, nToken, "lbl_familiar_type_label", JsonString("Familiar type")); + NuiSetBind(oPC, nToken, "lbl_familiar_name_label", JsonString("Familiar name")); + } + } + // Row 15 & 16 + if(bCompanion) + { + NuiSetBind(oPC, nToken, "chbx_companion_check", JsonBool(bBtnCompanion)); + NuiSetBindWatch (oPC, nToken, "chbx_companion_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_companion_event", JsonBool(TRUE)); + int nCompanion = GetAnimalCompanionCreatureType(oAssociate); + NuiSetBind(oPC, nToken, "cmb_companion_selected", JsonInt(nCompanion)); + string sCompanionName = GetAnimalCompanionName(oAssociate); + NuiSetBind(oPC, nToken, "txt_companion_name", JsonString(sCompanionName)); + if(!bIsPC) + { + NuiSetBind(oPC, nToken, "lbl_companion_type_label", JsonString("Change Companion type")); + NuiSetBind(oPC, nToken, "lbl_companion_name_label", JsonString("Change Companion name")); + NuiSetBind(oPC, nToken, "cmb_companion_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "cmb_companion_selected", TRUE); + NuiSetBind(oPC, nToken, "txt_companion_name_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "txt_companion_name", TRUE); + NuiSetBind(oPC, nToken, "btn_companion_name_label", JsonString("Save")); + } + else + { + NuiSetBind(oPC, nToken, "lbl_companion_type_label", JsonString("Companion type")); + NuiSetBind(oPC, nToken, "lbl_companion_name_label", JsonString("Companion name")); + } + } + if(bIsPC) + { + // Row 17+ + int nIndex, bWidget; + string sButton, sText; + json jPlugin = JsonArrayGet(jPCPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_plugin_" + sButton + "_event", JsonBool(TRUE)); + bWidget = JsonGetInt(JsonArrayGet(jPlugin, 1)); + if(bWidget < 3) + { + NuiSetBind(oPC, nToken, "chbx_plugin_" + sButton + "_check", JsonBool(bWidget)); + NuiSetBindWatch (oPC, nToken, "chbx_plugin_" + sButton + "_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_plugin_" + sButton + "_event", JsonBool(TRUE)); + } + sText = " " + JsonGetString(JsonArrayGet(jPlugin, 2)); + NuiSetBind(oPC, nToken, "btn_plugin_" + sButton + "_tooltip", JsonString(sText)); + jPlugin = JsonArrayGet(jPCPlugins, ++nIndex); + } + NuiSetBind(oPC, nToken, "chbx_plugin_tooltip", JsonString(" Adds the plugin to your widget.")); + } + // Row 18 + sText = ai_GetRandomTip(); + NuiSetBind(oPC, nToken, "lbl_info_1_label", JsonString(sText)); +} +void ai_CreateAssociateAINUI(object oPC, object oAssociate) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + int bRight, bLeft; + float fHeight = 45.0; + // ************************************************************************* Width / Height + int bIsPC = ai_GetIsCharacter(oAssociate); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jRow = JsonArray(); + json jCol = JsonArray(); + // Row 1 ******************************************************************* 500 / 73 + // If all the AI buttons are blocked then don't load the menu. + if(bIsPC) + { + bRight = GetLocalInt(GetModule(), sDMWidgetAccessVarname) != 7340028; + if(!AI_SERVER || bRight) + { + // If all the Command buttons are blocked then don't load the menu. + if(bRight) + { + jRow = CreateButton(jRow, "Command Menu", "btn_command_menu", 200.0, 20.0, -1.0, "btn_command_menu_tooltip"); + jRow = CreateLabel(jRow, "", "blank_label_2", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(!AI_SERVER) + { + CreateButton(jRow, "Main Menu", "btn_main_menu", 200.0, 20.0, -1.0, "btn_main_menu_tooltip"); + CreateLabel(jRow, "", "blank_label_2", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + } + // Row 2 ******************************************************************* 500 / 73 + bRight = !ai_GetDMAIAccessButton(BTN_AI_LOOT); + if(bRight || !bIsPC) + { + jRow = JsonArray(); + if(!bIsPC) + { + jRow = CreateButton(jRow, "Command Menu", "btn_command_menu", 200.0, 20.0, -1.0, "btn_command_menu_tooltip"); + jRow = CreateLabel(jRow, "", "blank_label_2", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bRight) + { + jRow = CreateButton(jRow, "Loot Filter", "btn_loot_filter", 200.0, 20.0); + jRow = CreateLabel(jRow, "", "blank_label_2", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 3 ******************************************************************* 500 / 101 + bRight = !ai_GetDMAIAccessButton(BTN_AI_FOR_PC); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_REDUCE_SPEECH); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Player AI On/Off", "btn_ai", 200.0, 20.0, -1.0, "btn_ai_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ai", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Reduce Speech", "btn_quiet", 200.0, 20.0, -1.0, "btn_quiet_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_quiet", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 4 ******************************************************************* 500 / 129 + bRight = !ai_GetDMAIAccessButton(BTN_AI_USE_RANGED); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_STOP_WEAPON_EQUIP); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Ranged Combat", "btn_ranged", 200.0, 20.0, -1.0, "btn_ranged_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ranged", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Equip Best Weapons", "btn_equip_weapon", 200.0, 20.0, -1.0, "btn_equip_weapon_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_equip_weapon", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 5 ******************************************************************* 500 / 157 + bRight = !ai_GetDMAIAccessButton(BTN_AI_USE_SEARCH); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_USE_STEALTH); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Search Mode", "btn_search", 200.0, 20.0, -1.0, "btn_search_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_search", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Stealth Mode", "btn_stealth", 200.0, 20.0, -1.0, "btn_stealth_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_stealth", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 6 ******************************************************************* 500 / 185 + bRight = !ai_GetDMAIAccessButton(BTN_AI_OPEN_DOORS); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_REMOVE_TRAPS); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Open Door Mode", "btn_open_door", 200.0, 20.0, -1.0, "btn_open_door_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_open_door", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Disarm Traps Mode", "btn_traps", 200.0, 20.0, -1.0, "btn_traps_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_traps", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 7 ******************************************************************* 500 / 213 + bRight = !ai_GetDMAIAccessButton(BTN_AI_PICK_LOCKS); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_BASH_LOCKS); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Pick Locks Mode", "btn_pick_locks", 200.0, 20.0, -1.0, "btn_pick_locks_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_pick_locks", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Bash Mode", "btn_bash_locks", 200.0, 20.0, -1.0, "btn_bash_locks_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_bash_locks", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 8 ******************************************************************* 500 / 241 + bRight = !ai_GetDMAIAccessButton(BTN_AI_MAGIC_LEVEL); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_NO_SPONTANEOUS); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Magic usage level", "btn_magic_level", 200.0, 20.0f, -1.0, "btn_magic_level_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_magic_level", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Cleric Spontaneous Casting", "btn_spontaneous", 200.0, 20.0, -1.0, "btn_spontaneous_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_spontaneous", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 9 ******************************************************************* 500 / 269 + bRight = !ai_GetDMAIAccessButton(BTN_AI_NO_MAGIC_USE); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_NO_MAGIC_ITEM_USE); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Use Magic", "btn_magic", 200.0, 20.0, -1.0, "btn_magic_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_magic", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Use Magic Items", "btn_magic_items", 200.0, 20.0, -1.0, "btn_magic_items_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_magic_items", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 10 ****************************************************************** 500 / 297 + bRight = !ai_GetDMAIAccessButton(BTN_AI_DEF_MAGIC_USE); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_OFF_MAGIC_USE); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Use Defensive Magic Only", "btn_def_magic", 200.0, 20.0, -1.0, "btn_def_magic_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_def_magic", 25.0, 20.0f); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Use Offensive Magic Only", "btn_off_magic", 200.0, 20.0, -1.0, "btn_off_magic_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_off_magic", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 11 ****************************************************************** 500 / 325 + bRight = !ai_GetDMAIAccessButton(BTN_AI_HEAL_OUT); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_HEAL_IN); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Heal % Out of Combat", "btn_heal_out", 200.0, 20.0, -1.0, "btn_heal_out_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_heal_out", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Heal % in Combat", "btn_heal_in", 200.0, 20.0, -1.0, "btn_heal_in_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_heal_in", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 12 ****************************************************************** 500 / 353 + bRight = !ai_GetDMAIAccessButton(BTN_AI_STOP_SELF_HEALING); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_STOP_PARTY_HEALING); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Self Healing", "btn_heals_onoff", 200.0, 20.0, -1.0, "btn_heals_onoff_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_heals_onoff", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Party Healing", "btn_healp_onoff", 200.0, 20.0, -1.0, "btn_healp_onoff_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_healp_onoff", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 13 ****************************************************************** 500 / 391 + bRight = !ai_GetDMAIAccessButton(BTN_AI_STOP_CURE_SPELLS); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_LOOT); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Cast Cure Spells", "btn_cure_onoff", 200.0, 20.0, -1.0, "btn_cure_onoff_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cure_onoff", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + if(sAssociateType != "summons" && sAssociateType != "dominated") + { + jRow = CreateButton(jRow, "Auto Looting", "btn_loot", 200.0, 20.0, -1.0, "btn_loot_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_loot", 25.0, 20.0); + } + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 14 ****************************************************************** 500 / --- + bRight = !ai_GetDMAIAccessButton(BTN_AI_IGNORE_ASSOCIATES); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_IGNORE_TRAPS); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Ignore Associates", "btn_ignore_assoc", 200.0, 20.0, -1.0, "btn_ignore_assoc_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ignore_assoc", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Ignore floor Traps", "btn_ignore_traps", 200.0, 20.0, -1.0, "btn_ignore_traps_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ignore_traps", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 15 ****************************************************************** 500 / --- + bRight = !ai_GetDMAIAccessButton(BTN_AI_PERC_RANGE); + bLeft = FALSE; //!ai_GetDMAIAccessButton(BTN_AI_PERC_RANGE); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + if(GetAssociateType(oAssociate) == ASSOCIATE_TYPE_HENCHMAN) + { + jRow = CreateButton(jRow, "Perception Range", "btn_perc_range", 200.0, 20.0, -1.0, "btn_perc_range_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_perc_range", 25.0, 20.0); + } + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 16 ****************************************************************** 500 / --- + bRight = !ai_GetDMWAccessButton(BTN_CMD_AI_SCRIPT); + if(bRight) + { + jRow = JsonArray(); + jRow = CreateButton(jRow, "Set Current AI:", "btn_ai_script", 175.0f, 20.0f, -1.0, "btn_ai_script_tooltip"); + jRow = CreateTextEditBox(jRow, "sPlaceHolder", "txt_ai_script", 16, FALSE, 145.0f, 20.0f, "txt_ai_script_tooltip"); + jRow = CreateCombo(jRow, ai_CreateAIScriptJson(oPC), "cmb_ai_script", 146.0, 20.0); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 17 ****************************************************************** 500 / --- + jRow = JsonArray(); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateLabel(jRow, "", "lbl_info", 475.0, 20.0, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + // Get the window location to restore it from the database. + float fX, fY; + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + jLocations = JsonObjectGet(jLocations, sAssociateType + AI_NUI); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) { fX = -1.0; fY = -1.0; } + else + { + fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + } + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sText, sName = GetName(oAssociate); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, sAssociateType + AI_NUI, sName + " AI Menu", + fX, fY, 500.0, fHeight + 12.0, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Get which buttons are activated. + int bAI = ai_GetAIButton(oPC, BTN_AI_FOR_PC, oAssociate, sAssociateType); + int bReduceSpeech = ai_GetAIButton(oPC, BTN_AI_REDUCE_SPEECH, oAssociate, sAssociateType); + int bRanged = ai_GetAIButton(oPC, BTN_AI_USE_RANGED, oAssociate, sAssociateType); + int bEquipWeapons = ai_GetAIButton(oPC, BTN_AI_STOP_WEAPON_EQUIP, oAssociate, sAssociateType); + int bSearch = ai_GetAIButton(oPC, BTN_AI_USE_SEARCH, oAssociate, sAssociateType); + int bStealth = ai_GetAIButton(oPC, BTN_AI_USE_STEALTH, oAssociate, sAssociateType); + int bOpenDoors = ai_GetAIButton(oPC, BTN_AI_OPEN_DOORS, oAssociate, sAssociateType); + int bTraps = ai_GetAIButton(oPC, BTN_AI_REMOVE_TRAPS, oAssociate, sAssociateType); + int bPickLocks = ai_GetAIButton(oPC, BTN_AI_PICK_LOCKS, oAssociate, sAssociateType); + int bBashLocks = ai_GetAIButton(oPC, BTN_AI_BASH_LOCKS, oAssociate, sAssociateType); + int bMagicLevel = ai_GetAIButton(oPC, BTN_AI_MAGIC_LEVEL, oAssociate, sAssociateType); + int bSpontaneous = ai_GetAIButton(oPC, BTN_AI_NO_SPONTANEOUS, oAssociate, sAssociateType); + int bNoMagic = ai_GetAIButton(oPC, BTN_AI_NO_MAGIC_USE, oAssociate, sAssociateType); + int bNoMagicItems = ai_GetAIButton(oPC, BTN_AI_NO_MAGIC_ITEM_USE, oAssociate, sAssociateType); + int bDefMagic = ai_GetAIButton(oPC, BTN_AI_DEF_MAGIC_USE, oAssociate, sAssociateType); + int bOffMagic = ai_GetAIButton(oPC, BTN_AI_OFF_MAGIC_USE, oAssociate, sAssociateType); + int bHealOut = ai_GetAIButton(oPC, BTN_AI_HEAL_OUT, oAssociate, sAssociateType); + int bHealIn = ai_GetAIButton(oPC, BTN_AI_HEAL_IN, oAssociate, sAssociateType); + int bSelfHealOnOff = ai_GetAIButton(oPC, BTN_AI_STOP_SELF_HEALING, oAssociate, sAssociateType); + int bPartyHealOnOff = ai_GetAIButton(oPC, BTN_AI_STOP_PARTY_HEALING, oAssociate, sAssociateType); + int bCureOnOff = ai_GetAIButton(oPC, BTN_AI_STOP_CURE_SPELLS, oAssociate, sAssociateType); + int bIgnoreAssociates = ai_GetAIButton(oPC, BTN_AI_IGNORE_ASSOCIATES, oAssociate, sAssociateType); + int bIgnoreTraps = ai_GetAIButton(oPC, BTN_AI_IGNORE_TRAPS, oAssociate, sAssociateType); + int bLoot = ai_GetAIButton(oPC, BTN_AI_LOOT, oAssociate, sAssociateType); + int bPercRange = ai_GetAIButton(oPC, BTN_AI_PERC_RANGE, oAssociate, sAssociateType); + // Save the associate to the nui for use in 0e_nui + json jData = JsonArray(); + jData = JsonArrayInsert(jData, JsonString(ObjectToString(oAssociate))); + NuiSetUserData(oPC, nToken, jData); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set all binds, events, and watches. + // Row 1 + // If all the AI buttons are blocked then don't load the menu. + if(bIsPC) + { + bRight = GetLocalInt(GetModule(), sDMWidgetAccessVarname) != 7340028; + if(!AI_SERVER || bRight) + { + // If all the Command buttons are blocked then don't load the menu. + if(bRight) + { + NuiSetBind(oPC, nToken, "btn_command_menu_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_command_menu_tooltip", JsonString(" " + sName + " Command options")); + } + if(!AI_SERVER) + { + NuiSetBind(oPC, nToken, "btn_main_menu_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_main_menu_tooltip", JsonString(" Module Options")); + } + fHeight += 28.0; + } + } + // Row 2 + if(!bIsPC) + { + NuiSetBind(oPC, nToken, "btn_command_menu_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_command_menu_tooltip", JsonString(" " + sName + " Command options")); + } + NuiSetBind(oPC, nToken, "btn_loot_filter_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_loot_filter", JsonInt(TRUE)); + // Row 3 + // Only activate ai on/off if this is for the pc. + if(bIsPC && ResManGetAliasFor("prc_ai_fam_percp", RESTYPE_NCS) == "") + { + NuiSetBind(oPC, nToken, "chbx_ai_check", JsonBool(bAI)); + NuiSetBindWatch (oPC, nToken, "chbx_ai_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ai_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ai_event", JsonBool(TRUE)); + if(GetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT) == "xx_pc_1_hb") sText = " AI On"; + else sText = " AI Off"; + NuiSetBind(oPC, nToken, "btn_ai_tooltip", JsonString(sText)); + } + NuiSetBind(oPC, nToken, "chbx_quiet_check", JsonBool(bReduceSpeech)); + NuiSetBindWatch (oPC, nToken, "chbx_quiet_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_quiet_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_quiet_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK)) sText = " Reduced Speech On"; + else sText = " Reduces Speech Off"; + NuiSetBind (oPC, nToken, "btn_quiet_tooltip", JsonString(sText)); + // Row 4 + NuiSetBind(oPC, nToken, "chbx_ranged_check", JsonBool(bRanged)); + NuiSetBindWatch(oPC, nToken, "chbx_ranged_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ranged_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ranged_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_STOP_RANGED)) sText = " Ranged Off"; + else sText = " Ranged On"; + NuiSetBind (oPC, nToken, "btn_ranged_tooltip", JsonString(sText)); + NuiSetBind(oPC, nToken, "chbx_equip_weapon_check", JsonBool(bEquipWeapons)); + NuiSetBindWatch(oPC, nToken, "chbx_equip_weapon_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_equip_weapon_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_equip_weapon_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_EQUIP_WEAPON_OFF)) sText = " Equiping Best Weapons Off"; + else sText = " Equiping Best Weapons On"; + NuiSetBind (oPC, nToken, "btn_equip_weapon_tooltip", JsonString(sText)); + // Row 5 + if(GetRacialType(oAssociate) != RACIAL_TYPE_ELF) + { + NuiSetBind(oPC, nToken, "chbx_search_check", JsonBool(bSearch)); + NuiSetBindWatch (oPC, nToken, "chbx_search_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_search_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_search_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_SEARCH)) sText = " Search mode On"; + else sText = " Search mode Off"; + NuiSetBind (oPC, nToken, "btn_search_tooltip", JsonString(sText)); + } + NuiSetBind(oPC, nToken, "chbx_stealth_check", JsonBool(bStealth)); + NuiSetBindWatch(oPC, nToken, "chbx_stealth_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_stealth_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_stealth_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_STEALTH)) sText = " Stealth mode On"; + else sText = " Stealth mode Off"; + NuiSetBind (oPC, nToken, "btn_stealth_tooltip", JsonString(sText)); + // Row 6 + string sRange = FloatToString(GetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE), 0, 0); + NuiSetBind(oPC, nToken, "chbx_open_door_check", JsonBool(bOpenDoors)); + NuiSetBindWatch (oPC, nToken, "chbx_open_door_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_open_door_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_open_door_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_OPEN_DOORS)) sText = " Open Doors On [" + sRange + " meters]"; + else sText = " Open Doors Off [" + sRange + " meters]"; + NuiSetBind (oPC, nToken, "btn_open_door_tooltip", JsonString(sText)); + sRange = FloatToString(GetLocalFloat(oAssociate, AI_TRAP_CHECK_RANGE), 0, 0); + NuiSetBind(oPC, nToken, "chbx_traps_check", JsonBool(bTraps)); + NuiSetBindWatch (oPC, nToken, "chbx_traps_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_traps_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_traps_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_DISARM_TRAPS)) sText = " Disable Traps On [" + sRange + " meters]"; + else sText = " Disable Traps Off [" + sRange + " meters]"; + NuiSetBind (oPC, nToken, "btn_traps_tooltip", JsonString(sText)); + // Row 7 + sRange = FloatToString(GetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE), 0, 0); + NuiSetBind(oPC, nToken, "chbx_pick_locks_check", JsonBool(bPickLocks)); + NuiSetBindWatch(oPC, nToken, "chbx_pick_locks_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_pick_locks_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_pick_locks_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_PICK_LOCKS)) sText = " Pick locks On [" + sRange + " meters]"; + else sText = " Pick Locks Off [" + sRange + " meters]"; + NuiSetBind (oPC, nToken, "btn_pick_locks_tooltip", JsonString(sText)); + NuiSetBind(oPC, nToken, "chbx_bash_locks_check", JsonBool(bBashLocks)); + NuiSetBindWatch(oPC, nToken, "chbx_bash_locks_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_bash_locks_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_bash_locks_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_BASH_LOCKS)) sText = " Bash On [" + sRange + " meters]"; + else sText = " Bash Off [" + sRange + " meters]"; + NuiSetBind (oPC, nToken, "btn_bash_locks_tooltip", JsonString(sText)); + // Row 8 + string sMagic = IntToString(GetLocalInt(oAssociate, AI_DIFFICULTY_ADJUSTMENT)); + NuiSetBind(oPC, nToken, "chbx_magic_level_check", JsonBool(bMagicLevel)); + NuiSetBindWatch (oPC, nToken, "chbx_magic_level_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_magic_level_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_level_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_magic_level_tooltip", JsonString(" Magic level [" + sMagic + "]")); + sText = " Spontaneous casting On"; + if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_SPONTANEOUS_CURE)) sText = " Spontaneous casting Off"; + NuiSetBind(oPC, nToken, "chbx_spontaneous_check", JsonBool(bSpontaneous)); + NuiSetBindWatch (oPC, nToken, "chbx_spontaneous_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_spontaneous_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_spontaneous_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_spontaneous_tooltip", JsonString(sText)); + // Row 9 + if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC)) sText = " Magic Off"; + else sText = " Magic On"; + NuiSetBind(oPC, nToken, "chbx_magic_check", JsonBool(bNoMagic)); + NuiSetBindWatch (oPC, nToken, "chbx_magic_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_tooltip", JsonString(sText)); + if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS)) sText = " Magic Items Off"; + else sText = " Magic Items On"; + NuiSetBind(oPC, nToken, "chbx_magic_items_check", JsonBool(bNoMagicItems)); + NuiSetBindWatch (oPC, nToken, "chbx_magic_items_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_magic_items_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_items_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_items_tooltip", JsonString(sText)); + // Row 10 + if(ai_GetMagicMode(oAssociate, AI_MAGIC_DEFENSIVE_CASTING)) sText = " Defensive Magic On"; + else sText = " Defensive Magic Off"; + NuiSetBind(oPC, nToken, "chbx_def_magic_check", JsonBool (bDefMagic)); + NuiSetBindWatch (oPC, nToken, "chbx_def_magic_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_def_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_def_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_def_magic_tooltip", JsonString(sText)); + if(ai_GetMagicMode(oAssociate, AI_MAGIC_OFFENSIVE_CASTING)) sText = " Offensive Magic On"; + else sText = " Offensive Magic Off"; + NuiSetBind(oPC, nToken, "chbx_off_magic_check", JsonBool(bOffMagic)); + NuiSetBindWatch (oPC, nToken, "chbx_off_magic_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_off_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_off_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_off_magic_tooltip", JsonString(sText)); + // Row 11 + int nHeal = GetLocalInt(oAssociate, AI_HEAL_OUT_OF_COMBAT_LIMIT); + NuiSetBind(oPC, nToken, "chbx_heal_out_check", JsonBool(bHealOut)); + NuiSetBindWatch (oPC, nToken, "chbx_heal_out_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_heal_out_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heal_out_event", JsonBool(TRUE)); + sText = " Will heal at or below [" + IntToString(nHeal) + "%] health out of combat"; + NuiSetBind(oPC, nToken, "btn_heal_out_tooltip", JsonString(sText)); + nHeal = GetLocalInt(oAssociate, AI_HEAL_IN_COMBAT_LIMIT); + NuiSetBind(oPC, nToken, "chbx_heal_in_check", JsonBool(bHealIn)); + NuiSetBindWatch (oPC, nToken, "chbx_heal_in_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_heal_in_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heal_in_event", JsonBool (TRUE)); + sText = " Will heal at or below [" + IntToString(nHeal) + "%] health in combat"; + NuiSetBind(oPC, nToken, "btn_heal_in_tooltip", JsonString(sText)); + // Row 12 + NuiSetBind(oPC, nToken, "chbx_heals_onoff_check", JsonBool(bSelfHealOnOff)); + NuiSetBindWatch (oPC, nToken, "chbx_heals_onoff_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_heals_onoff_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heals_onoff_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_SELF_HEALING_OFF)) sText = " Self healing Off"; + else sText = " Self healing On"; + NuiSetBind(oPC, nToken, "btn_heals_onoff_tooltip", JsonString(sText)); + NuiSetBind(oPC, nToken, "chbx_healp_onoff_check", JsonBool(bPartyHealOnOff)); + NuiSetBind(oPC, nToken, "chbx_healp_onoff_event", JsonBool(TRUE)); + NuiSetBindWatch (oPC, nToken, "chbx_healp_onoff_check", TRUE); + NuiSetBind(oPC, nToken, "btn_healp_onoff_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_PARTY_HEALING_OFF)) sText = " Party healing Off"; + else sText = " Party healing On"; + NuiSetBind(oPC, nToken, "btn_healp_onoff_tooltip", JsonString(sText)); + // Row 13 + NuiSetBind(oPC, nToken, "btn_cure_onoff_tooltip", JsonString(sText)); + NuiSetBind(oPC, nToken, "chbx_cure_onoff_check", JsonBool(bCureOnOff)); + NuiSetBind(oPC, nToken, "chbx_cure_onoff_event", JsonBool(TRUE)); + NuiSetBindWatch (oPC, nToken, "chbx_cure_onoff_check", TRUE); + NuiSetBind(oPC, nToken, "btn_cure_onoff_event", JsonBool(TRUE)); + if(ai_GetMagicMode(oAssociate, AI_MAGIC_CURE_SPELLS_OFF)) sText = " Cast Cure Spells Off"; + else sText = " Cast Cure Spells On"; + NuiSetBind(oPC, nToken, "btn_cure_onoff_tooltip", JsonString(sText)); + if(sAssociateType != "summons" && sAssociateType != "dominated") + { + sRange = FloatToString(GetLocalFloat(oAssociate, AI_LOOT_CHECK_RANGE), 0, 0); + if(ai_GetAIMode(oAssociate, AI_MODE_PICKUP_ITEMS)) sText = " Looting On [" + sRange + " meters]"; + else sText = " Looting Off [" + sRange + " meters]"; + NuiSetBind(oPC, nToken, "chbx_loot_check", JsonBool(bLoot)); + NuiSetBindWatch (oPC, nToken, "chbx_loot_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_loot_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_loot_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_loot_tooltip", JsonString(sText)); + } + // Row 14 + NuiSetBind(oPC, nToken, "chbx_ignore_assoc_check", JsonBool(bIgnoreAssociates)); + NuiSetBindWatch(oPC, nToken, "chbx_ignore_assoc_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ignore_assoc_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ignore_assoc_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES)) sText = " Ignore Enemy Associates On"; + else sText = " Ignore Enemy Associates Off"; + NuiSetBind (oPC, nToken, "btn_ignore_assoc_tooltip", JsonString(sText)); + NuiSetBind(oPC, nToken, "chbx_ignore_traps_check", JsonBool(bIgnoreTraps)); + NuiSetBindWatch(oPC, nToken, "chbx_ignore_traps_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ignore_traps_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ignore_traps_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_IGNORE_TRAPS)) sText = " Ignore Floor Traps On"; + else sText = " Ignore Floor Traps Off"; + NuiSetBind (oPC, nToken, "btn_ignore_traps_tooltip", JsonString(sText)); + // Row 15 + if(!bIsPC) + { + int nRange = GetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION + "_MENU"); + if(nRange < 8 || nRange > 11) + { + nRange = GetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION); + SetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION + "_MENU", nRange); + } + if(nRange == 8) sText = " Perception Range Short [10 meters Sight / 10 meters Listen]"; + else if(nRange == 9) sText = " Perception Range Medium [20 meters Sight / 20 meters Listen]"; + else if(nRange == 10) sText = " Perception Range Long [35 meters Sight / 20 meters Listen]"; + else sText = " Perception Range Default [20 meters Sight / 20 meters Listen]"; + NuiSetBind(oPC, nToken, "chbx_perc_range_check", JsonBool(bPercRange)); + NuiSetBindWatch (oPC, nToken, "chbx_perc_range_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_perc_range_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_perc_range_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_perc_range_tooltip", JsonString(sText)); + } + // Row 16 + string sScript = GetLocalString(oAssociate, AI_COMBAT_SCRIPT); + if(sScript == "") sScript = GetLocalString(oAssociate, AI_COMBAT_SCRIPT); + NuiSetBind(oPC, nToken, "btn_ai_script_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ai_script_tooltip", JsonString(" Sets " + GetName(oAssociate) + " to use the ai script in the text box.")); + NuiSetBind(oPC, nToken, "txt_ai_script_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_ai_script", JsonString(sScript)); + NuiSetBind(oPC, nToken, "txt_ai_script_tooltip", JsonString(" Associate AI scripts must start with ai_a_")); + NuiSetBind(oPC, nToken, "cmb_ai_script_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "cmb_ai_script_selected", TRUE); + // Row 17 + sText = ai_GetRandomTip(); + NuiSetBind (oPC, nToken, "lbl_info_label", JsonString(sText)); +} +void ai_SetWidgetBinds(object oPC, object oAssociate, string sAssociateType, int nToken, string sName) +{ + int bBool, bIsPC = ai_GetIsCharacter(oAssociate); + string sText, sRange, sHeal; + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set the buttons to show events. + NuiSetBind(oPC, nToken, "btn_open_main_image", JsonString(GetPortraitResRef(oAssociate) + "s")); + NuiSetBind(oPC, nToken, "btn_open_main_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_open_main_tooltip", JsonString(" " + sName + " widget menu")); + if(bIsPC) sText = " All associates"; + else sText = " " + GetName(oAssociate); + if(ai_GetWidgetButton(oPC, BTN_CMD_ACTION, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cmd_action_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_action_tooltip", JsonString(sText + " do actions")); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_GUARD, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cmd_guard_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_guard_tooltip", JsonString(sText + " enter guard mode")); + bBool = ai_GetAIMode(oAssociate, AI_MODE_DEFEND_MASTER); + NuiSetBind(oPC, nToken, "btn_cmd_guard_encouraged", JsonBool(bBool)); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_HOLD, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cmd_hold_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_hold_tooltip", JsonString(sText + " enter hold mode")); + bBool = ai_GetAIMode(oAssociate, AI_MODE_STAND_GROUND); + NuiSetBind(oPC, nToken, "btn_cmd_hold_encouraged", JsonBool(bBool)); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_ATTACK, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cmd_attack_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_attack_tooltip", JsonString(sText + " enter normal mode")); + if(!bIsPC) + { + if(!ai_GetAIMode(oAssociate, AI_MODE_DEFEND_MASTER) && + !ai_GetAIMode(oAssociate, AI_MODE_STAND_GROUND) && + !ai_GetAIMode(oAssociate, AI_MODE_FOLLOW)) bBool = TRUE; + else bBool = FALSE; + if(!bIsPC) NuiSetBind(oPC, nToken, "btn_cmd_attack_encouraged", JsonBool(bBool)); + } + } + if(ai_GetWidgetButton(oPC, BTN_CMD_FOLLOW, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cmd_follow_event", JsonBool(TRUE)); + float fRange = GetLocalFloat(oAssociate, AI_FOLLOW_RANGE) + + StringToFloat(Get2DAString("appearance", "PREFATCKDIST", GetAppearanceType(oAssociate))); + string sRange = FloatToString(fRange, 0, 0); + if(bIsPC) + { + sText = " All associates"; + NuiSetBind(oPC, nToken, "btn_cmd_follow_tooltip", JsonString(sText + " enter follow mode")); + } + else + { + sText = " " + GetName(oAssociate); + NuiSetBind(oPC, nToken, "btn_cmd_follow_tooltip", JsonString(sText + " enter follow mode [" + sRange + " meters]")); + } + bBool = ai_GetAIMode(oAssociate, AI_MODE_FOLLOW); + if(!bIsPC) NuiSetBind(oPC, nToken, "btn_cmd_follow_encouraged", JsonBool(bBool)); + } + if(ai_GetAIButton(oPC, BTN_AI_FOLLOW_TARGET, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_follow_target_event", JsonBool(TRUE)); + object oTarget = GetLocalObject(oAssociate, AI_FOLLOW_TARGET); + string sTarget; + if(oTarget != OBJECT_INVALID) sTarget = GetName(oTarget); + else + { + if(ai_GetIsCharacter(oAssociate)) sTarget = "nobody"; + else sTarget = GetName(oPC); + } + float fRange = GetLocalFloat(oAssociate, AI_FOLLOW_RANGE) + + StringToFloat(Get2DAString("appearance", "PREFATCKDIST", GetAppearanceType(oAssociate))); + string sRange = FloatToString(fRange, 0, 0); + NuiSetBind(oPC, nToken, "btn_follow_target_tooltip", JsonString(" " + GetName(oAssociate) + " following " + sTarget + " [" + sRange + " meters]")); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_SEARCH, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cmd_search_event", JsonBool(TRUE)); + if(ai_GetAIMode(oPC, AI_MODE_AGGRESSIVE_SEARCH)) sText = " leave "; + else sText = " enter "; + NuiSetBind(oPC, nToken, "btn_cmd_search_tooltip", JsonString(" Everyone" + sText + "search mode")); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_STEALTH, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cmd_stealth_event", JsonBool(TRUE)); + if(ai_GetAIMode(oPC, AI_MODE_AGGRESSIVE_STEALTH)) sText = " leave "; + else sText = " enter "; + NuiSetBind(oPC, nToken, "btn_cmd_stealth_tooltip", JsonString(" Everyone" + sText + "stealth mode")); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_AI_SCRIPT, oAssociate, sAssociateType)) + { + sText = " Default tactics: Using the creatures base AI script"; + string sIcon = "ir_scommand"; + if(ResManGetAliasFor("0e_ch_1_hb", RESTYPE_NCS) != "") + { + string sScript = GetLocalString(oAssociate, AI_COMBAT_SCRIPT); + if(sScript == "ai_a_ambusher") + { + sText = " Ambusher: Attacks from a hidden position"; + sIcon = "ir_rogue"; + } + else if(sScript == "ai_a_flanker") + { + sText = " Flanker: Attacks enemies engaged with allies"; + sIcon = "ir_invite"; + } + else if(sScript == "ai_a_peaceful") + { + sText = " Peaceful: Avoids attacking any enemies if possible"; + sIcon = "ir_ignore"; + } + else if(sScript == "ai_a_defensive") + { + sText = " Defensive: Attacks then uses Expertise/Parry"; + sIcon = "ir_knockdwn"; + } + else if(sScript == "ai_a_ranged") + { + sText = " Ranged: Attacks from range as much as possible"; + sIcon = "ir_ranger"; + } + else if(sScript == "ai_a_cntrspell") + { + sText = " Counter Spell: Tries to counter enemy spells"; + sIcon = "ir_dcaster"; + } + } + else + { + if(GetCombatCondition(X0_COMBAT_FLAG_AMBUSHER, oAssociate)) sText = "Using ambush tactics"; + if(GetCombatCondition(X0_COMBAT_FLAG_COWARDLY, oAssociate)) sText = "Using coward tactics"; + if(GetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE, oAssociate)) sText = "Using defensive tactics"; + if(GetCombatCondition(X0_COMBAT_FLAG_RANGED, oAssociate)) sText = "Using ranged tactics"; + } + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_image", JsonString(sIcon)); + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_tooltip", JsonString(sText)); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_PLACE_TRAP, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cmd_place_trap_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_place_trap_tooltip", JsonString(" Place a trap at the location selected")); + } + if(ai_GetWidgetButton(oPC, BTN_BUFF_SHORT, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_buff_short_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_short_tooltip", JsonString(" Buff the party with short duration spells")); + } + if(ai_GetWidgetButton(oPC, BTN_BUFF_LONG, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_buff_long_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_long_tooltip", JsonString(" Buff the party with long duration spells")); + } + if(ai_GetWidgetButton(oPC, BTN_BUFF_ALL, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_buff_all_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_all_tooltip", JsonString(" Buff the party with all our defensive spells")); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_JUMP_TO, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_jump_to_event", JsonBool(TRUE)); + sText = GetName(oPC); + if(oPC == oAssociate) sName = "everyone"; + else sName = GetName(oAssociate); + NuiSetBind(oPC, nToken, "btn_jump_to_tooltip", JsonString(" Jump " + sName + " to " + sText)); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_GHOST_MODE, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_ghost_mode_event", JsonBool (TRUE)); + sText = "On"; + if(ai_GetAIMode(oAssociate, AI_MODE_GHOST)) sText = "Off"; + NuiSetBind(oPC, nToken, "btn_ghost_mode_tooltip", JsonString ( + " Turn " + sText + " clipping through creatures for " + GetName(oAssociate))); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_CAMERA, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_camera_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_camera_tooltip", JsonString(" Toggle camera view for " + sName)); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_INVENTORY, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_inventory_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_inventory_tooltip", JsonString(" Open " + sName + " inventory")); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_FAMILIAR, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_familiar_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_familiar_tooltip", JsonString(" Summon " + sName + " familiar.")); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_COMPANION, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_companion_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_companion_tooltip", JsonString(" Open " + sName + " Animal Companion.")); + } + if(ai_GetWidgetButton(oPC, BTN_BUFF_REST, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_buff_rest_event", JsonBool(TRUE)); + if(ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST)) sText = " Turn buffing after resting off"; + else sText = " Turn buffing after resting on."; + NuiSetBind(oPC, nToken, "btn_buff_rest_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_FOR_PC, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_ai_event", JsonBool(TRUE)); + if(GetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT) == "xx_pc_1_hb") sText = " AI [On] Turn off"; + else sText = " AI [Off] Turn on"; + NuiSetBind(oPC, nToken, "btn_ai_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_REDUCE_SPEECH, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_quiet_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK)) sText = " Reduced Speech On"; + else sText = " Reduced Speech Off"; + NuiSetBind(oPC, nToken, "btn_quiet_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_USE_RANGED, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_ranged_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_STOP_RANGED)) sText = " Ranged Off"; + else sText = " Ranged On"; + NuiSetBind(oPC, nToken, "btn_ranged_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_STOP_WEAPON_EQUIP, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_equip_weapon_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_EQUIP_WEAPON_OFF)) sText = " Equiping Best Weapons Off"; + else sText = " Equiping Best Weapons On"; + NuiSetBind(oPC, nToken, "btn_equip_weapon_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_USE_SEARCH, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_search_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_SEARCH)) sText = " Search On"; + else sText = " Search Off"; + NuiSetBind(oPC, nToken, "btn_search_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_USE_STEALTH, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_stealth_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_STEALTH)) sText = " Stealth On"; + else sText = " Stealth Off"; + NuiSetBind(oPC, nToken, "btn_stealth_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_OPEN_DOORS, oAssociate, sAssociateType)) + { + sRange = FloatToString(GetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE), 0, 0); + NuiSetBind(oPC, nToken, "btn_open_door_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_OPEN_DOORS)) sText = " Open Doors On [" + sRange + " meters]"; + else sText = " Open Doors Off [" + sRange + " meters]"; + NuiSetBind(oPC, nToken, "btn_open_door_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_REMOVE_TRAPS, oAssociate, sAssociateType)) + { + sRange = FloatToString(GetLocalFloat(oAssociate, AI_TRAP_CHECK_RANGE), 0, 0); + NuiSetBind(oPC, nToken, "btn_traps_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_DISARM_TRAPS)) sText = " Disable Traps On [" + sRange + " meters]"; + else sText = " Disable Traps Off [" + sRange + " meters]"; + NuiSetBind(oPC, nToken, "btn_traps_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_PICK_LOCKS, oAssociate, sAssociateType)) + { + sRange = FloatToString(GetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE), 0, 0); + NuiSetBind(oPC, nToken, "btn_pick_locks_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_PICK_LOCKS)) sText = " Pick locks On [" + sRange + " meters]"; + else sText = " Pick Locks Off [" + sRange + " meters]"; + NuiSetBind(oPC, nToken, "btn_pick_locks_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_BASH_LOCKS, oAssociate, sAssociateType)) + { + sRange = FloatToString(GetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE), 0, 0); + NuiSetBind(oPC, nToken, "btn_bash_locks_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_BASH_LOCKS)) sText = " Bash On [" + sRange + " meters]"; + else sText = " Bash Off [" + sRange + " meters]"; + NuiSetBind(oPC, nToken, "btn_bash_locks_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_MAGIC_LEVEL, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_magic_level_event", JsonBool(TRUE)); + string sMagic = IntToString(GetLocalInt(oAssociate, AI_DIFFICULTY_ADJUSTMENT)); + NuiSetBind(oPC, nToken, "btn_magic_level_tooltip", JsonString(" Magic Level [" + sMagic + "]")); + } + if(ai_GetAIButton(oPC, BTN_AI_NO_SPONTANEOUS, oAssociate, sAssociateType)) + { + string sCasting = " Spontaneous casting On"; + if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_SPONTANEOUS_CURE)) sCasting = " Spontaneous casting Off"; + NuiSetBind(oPC, nToken, "btn_spontaneous_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_spontaneous_tooltip", JsonString(sCasting)); + } + if(ai_GetAIButton(oPC, BTN_AI_NO_MAGIC_USE, oAssociate, sAssociateType)) + { + if(ai_GetAIMode(oAssociate, AI_MAGIC_NO_MAGIC)) sText = " Magic Off"; + else sText = " Magic On"; + NuiSetBind(oPC, nToken, "btn_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_NO_MAGIC_ITEM_USE, oAssociate, sAssociateType)) + { + if(ai_GetAIMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS)) sText = " Magic Items Off"; + else sText = " Magic Items On"; + NuiSetBind(oPC, nToken, "btn_magic_items_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_items_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_DEF_MAGIC_USE, oAssociate, sAssociateType)) + { + if(ai_GetAIMode(oAssociate, AI_MAGIC_DEFENSIVE_CASTING)) sText = " Defensive Magic On"; + else sText = " Defensive Magic Off"; + NuiSetBind(oPC, nToken, "btn_def_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_def_magic_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_OFF_MAGIC_USE, oAssociate, sAssociateType)) + { + if(ai_GetAIMode(oAssociate, AI_MAGIC_OFFENSIVE_CASTING)) sText = " Offensive Magic On"; + else sText = " Offensive Magic Off"; + NuiSetBind(oPC, nToken, "btn_off_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_off_magic_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_HEAL_OUT, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_heal_out_event", JsonBool(TRUE)); + sHeal = IntToString(GetLocalInt(oAssociate, AI_HEAL_OUT_OF_COMBAT_LIMIT)); + sText = " Will heal at or below [" + sHeal + "%] health out of combat"; + NuiSetBind(oPC, nToken, "btn_heal_out_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_HEAL_IN, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_heal_in_event", JsonBool(TRUE)); + sHeal = IntToString(GetLocalInt(oAssociate, AI_HEAL_IN_COMBAT_LIMIT)); + sText = " Will heal at or below [" + sHeal + "%] health in combat"; + NuiSetBind(oPC, nToken, "btn_heal_in_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_STOP_SELF_HEALING, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_heals_onoff_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_SELF_HEALING_OFF)) sText = " Self healing Off"; + else sText = " Self healing On"; + NuiSetBind(oPC, nToken, "btn_heals_onoff_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_STOP_PARTY_HEALING, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_healp_onoff_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_PARTY_HEALING_OFF)) sText = " Party healing Off"; + else sText = " Party healing On"; + NuiSetBind(oPC, nToken, "btn_healp_onoff_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_STOP_CURE_SPELLS, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cure_onoff_event", JsonBool(TRUE)); + if(ai_GetMagicMode(oAssociate, AI_MAGIC_CURE_SPELLS_OFF)) sText = " Cast Cure Spells Off"; + else sText = " Cast Cure Spells On"; + NuiSetBind(oPC, nToken, "btn_cure_onoff_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_LOOT, oAssociate, sAssociateType)) + { + sRange = FloatToString(GetLocalFloat(oAssociate, AI_LOOT_CHECK_RANGE), 0, 0); + string sLoot = " Looting Off [" + sRange + " meters]"; + if(ai_GetAIMode(oAssociate, AI_MODE_PICKUP_ITEMS)) sLoot = " Looting On [" + sRange + " meters]"; + NuiSetBind(oPC, nToken, "btn_loot_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_loot_tooltip", JsonString(sLoot)); + } + if(ai_GetAIButton(oPC, BTN_AI_IGNORE_ASSOCIATES, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_ignore_assoc_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES)) sText = " Ignore Enemy Associates On"; + else sText = " Ignore Enemy Associates Off"; + NuiSetBind(oPC, nToken, "btn_ignore_assoc_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_IGNORE_TRAPS, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_ignore_traps_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_IGNORE_TRAPS)) sText = " Ignore Floor Traps On"; + else sText = " Ignore Floor Traps Off"; + NuiSetBind(oPC, nToken, "btn_ignore_traps_tooltip", JsonString(sText)); + } + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + if(ai_GetAIButton(oPC, BTN_AI_PERC_RANGE, oAssociate, sAssociateType)) + { + int nRange = GetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION); + if(nRange < 8 || nRange > 11) + { + nRange = 11; + SetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION, 11); + jAIData = JsonArraySet(jAIData, 7, JsonInt(11)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + if(nRange == 8) sText = " Perception Range Short [10 meters Sight / 10 meters Listen]"; + if(nRange == 9) sText = " Perception Range Medium [20 meters Sight / 20 meters Listen]"; + if(nRange == 10) sText = " Perception Range Long [35 meters Sight / 20 meters Listen]"; + else sText = " Perception Range Default [20 meters Sight / 20 meters Listen]"; + NuiSetBind(oPC, nToken, "btn_perc_range_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_perc_range_tooltip", JsonString(sText)); + } + if(bIsPC) + { + int nIndex, bWidget; + string sButton, sName, sText, sScript; + json jPCPlugins = ai_UpdatePluginsForPC(oPC); + json jPlugin = JsonArrayGet(jPCPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + bWidget = JsonGetInt(JsonArrayGet(jPlugin, 1)); + if(bWidget) + { + sButton = IntToString(nIndex); + sScript = JsonGetString(JsonArrayGet(jPlugin, 0)); + if(ResManGetAliasFor(sScript, RESTYPE_NCS) == "") + { + sText = " " + sScript + " not found by ResMan!"; + } + else sName = " " + JsonGetString(JsonArrayGet(jPlugin, 2)); + NuiSetBind(oPC, nToken, "btn_exe_plugin_" + sButton + "_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_exe_plugin_" + sButton + "_tooltip", JsonString(sName)); + } + jPlugin = JsonArrayGet(jPCPlugins, ++nIndex); + } + } + if(ai_GetWidgetButton(oPC, BTN_CMD_SPELL_WIDGET, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_update_widget_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_update_widget_tooltip", JsonString(" Updates Quick Use Widget")); + json jSpell, jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + object oItem; + if(JsonGetType(jWidget) != JSON_TYPE_NULL) + { + int nLevel, nSpell, nIndex, nClass, nMetaMagic, nDomain, nSubSpell, nFeat; + string sSpellIcon, sMetaMagicText, sSubSpell, sClass, sIndex; + while(nIndex < 10) + { + jSpell = JsonArrayGet(jWidget, nIndex); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + sIndex = IntToString(nIndex); + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + if(nClass == -1) // This is an Item. + { + string sBaseName; + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + int nBaseItemType = JsonGetInt(JsonArrayGet(jSpell, 3)); + int nIprpSubType = JsonGetInt(JsonArrayGet(jSpell, 4)); + if(nSpell == SPELL_HEALINGKIT) + { + sName = "Healer's Kit +" + IntToString(nIprpSubType); + sSpellIcon = "isk_heal"; + sBaseName = "Healer's Kit"; + } + else if(nBaseItemType == BASE_ITEM_ENCHANTED_SCROLL || + nBaseItemType == BASE_ITEM_SCROLL || + nBaseItemType == BASE_ITEM_SPELLSCROLL) + { + sSpellIcon = Get2DAString("iprp_spells", "Icon", nIprpSubType); + sBaseName = "Scroll"; + } + else + { + if(nBaseItemType == BASE_ITEM_ENCHANTED_POTION || + nBaseItemType == BASE_ITEM_POTIONS) sBaseName = "Potion"; + else if(nBaseItemType == BASE_ITEM_ENCHANTED_WAND || + nBaseItemType == BASE_ITEM_MAGICWAND || + nBaseItemType == FEAT_CRAFT_WAND) sBaseName = "Wand"; + else sBaseName = ai_StripColorCodes(GetName(GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + int nUses = ai_GetItemUses(oItem, nIprpSubType); + if(nUses) + { + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + if(nUses == 999) sText = "Unlimited"; + else sText = IntToString(nUses); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sBaseName + " / " + sText + ")")); + } + else NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + else + { + nFeat = JsonGetInt(JsonArrayGet(jSpell, 5)); + if(nFeat) // This is a feat. + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + sSpellIcon = ""; + if(nSpell) + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + if(sSpellIcon == "" || sSpellIcon == "IR_USE") + { + sName = GetStringByStrRef(StringToInt(Get2DAString("feat", "FEAT", nFeat))); + sSpellIcon = Get2DAString("feat", "ICON", nFeat); + } + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + if(GetHasFeat(nFeat, oAssociate)) + { + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName)); + } + else NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + else // This is a spell. + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + nLevel = JsonGetInt(JsonArrayGet(jSpell, 2)); + nDomain = JsonGetInt(JsonArrayGet(jSpell, 4)); + nMetaMagic = JsonGetInt(JsonArrayGet(jSpell, 3)); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, nMetaMagic, nDomain); + NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString(sMetaMagicText)); + if(GetSpellUsesLeft(oAssociate, nClass, nSpell, nMetaMagic, nDomain)) + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + IntToString(nLevel) + ")")); + } + else NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + } + } + else break; + ++nIndex; + } + while(nIndex < 20) + { + jSpell = JsonArrayGet(jWidget, nIndex); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + sIndex = IntToString(nIndex); + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + nFeat = JsonGetInt(JsonArrayGet(jSpell, 5)); + if(nClass == -1) // This is an Item. + { + oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + if(oItem != OBJECT_INVALID) + { + string sBaseName; + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + int nBaseItemType = JsonGetInt(JsonArrayGet(jSpell, 3)); + int nIprpSubType = JsonGetInt(JsonArrayGet(jSpell, 4)); + if(nSpell == SPELL_HEALINGKIT) + { + sName = "Healer's Kit +" + IntToString(nIprpSubType); + sSpellIcon = "isk_heal"; + sBaseName = "Healer's Kit"; + } + else if(nBaseItemType == BASE_ITEM_ENCHANTED_SCROLL || + nBaseItemType == BASE_ITEM_SCROLL || + nBaseItemType == BASE_ITEM_SPELLSCROLL) + { + sSpellIcon = Get2DAString("iprp_spells", "Icon", nIprpSubType); + sBaseName = "Scroll"; + } + else + { + if(nBaseItemType == BASE_ITEM_ENCHANTED_POTION || + nBaseItemType == BASE_ITEM_POTIONS) sBaseName = "Potion"; + else if(nBaseItemType == BASE_ITEM_ENCHANTED_WAND || + nBaseItemType == BASE_ITEM_MAGICWAND || + nBaseItemType == FEAT_CRAFT_WAND) sBaseName = "Wand"; + else sBaseName = ai_StripColorCodes(GetName(GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + int nUses = ai_GetItemUses(oItem, nIprpSubType); + if(nUses) + { + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + if(nUses == 999) sText = "Unlimited"; + else sText = IntToString(nUses); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sBaseName + " / " + sText + ")")); + } + else NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + else jWidget = JsonArrayDel(jWidget, nIndex--); + } + else if(nFeat) // This is a feat. + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + sSpellIcon = ""; + if(nSpell) + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + if(sSpellIcon == "" || sSpellIcon == "IR_USE") + { + sName = GetStringByStrRef(StringToInt(Get2DAString("feat", "FEAT", nFeat))); + sSpellIcon = Get2DAString("feat", "ICON", nFeat); + } + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + if(GetHasFeat(nFeat, oAssociate)) + { + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName)); + } + else NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + else // This is a spell. + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + nDomain = JsonGetInt(JsonArrayGet(jSpell, 4)); + nMetaMagic = JsonGetInt(JsonArrayGet(jSpell, 3)); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + //SendMessageToPC(oPC, GetName(oAssociate) + " nSpell: " + IntToString(nSpell) + + // " nClass: " + IntToString(nClass) + " nMetaMagic: " + IntToString(nMetaMagic) + + // " nDomain: " + IntToString(nDomain) + " nLevel: " + IntToString(nLevel)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, nMetaMagic, nDomain); + NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString(sMetaMagicText)); + sSubSpell = Get2DAString("spells", "Master", nSpell); + if(sSubSpell != "") nSpell = StringToInt(sSubSpell); + if(nDomain == -1 || GetSpellUsesLeft(oAssociate, nClass, nSpell, nMetaMagic, nDomain)) + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(nDomain == -1) NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName)); + else + { + sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + IntToString(nLevel) + ")")); + } + } + else NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + } + else break; + ++nIndex; + } + } + } +} +void ai_CreateWidgetNUI(object oPC, object oAssociate) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + if(sAssociateType == "") return; + int bAIWidgetLock = ai_GetWidgetButton(oPC, BTN_WIDGET_LOCK, oAssociate, sAssociateType); + int bVertical = ai_GetWidgetButton(oPC, BTN_WIDGET_VERTICAL, oAssociate, sAssociateType); + float fButtons; + // ************************************************************************* Width / Height + // Row 1 (buttons)********************************************************** + // Setup the main associate button to use their portrait. + json jButton = NuiEnabled(NuiId (NuiButtonImage(NuiBind("btn_open_main_image")), "btn_open_main"), NuiBind("btn_open_main_event")); + jButton = NuiWidth(jButton, 35.0); + jButton = NuiHeight(jButton, 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind ("btn_open_main_tooltip")); + jButton = NuiImageRegion(jButton, NuiRect(0.0, 0.0, 32.0, 35.0)); + json jRow = JsonArrayInsert(JsonArray(), jButton); + if(ai_GetWidgetButton(oPC, BTN_CMD_ACTION, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_action", "btn_cmd_action", 35.0f, 35.0f, 0.0, "btn_cmd_action_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_GUARD, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_guard", "btn_cmd_guard", 35.0f, 35.0f, 0.0, "btn_cmd_guard_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_HOLD, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_standground", "btn_cmd_hold", 35.0f, 35.0f, 0.0, "btn_cmd_hold_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_ATTACK, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_attacknearest", "btn_cmd_attack", 35.0f, 35.0f, 0.0, "btn_cmd_attack_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_FOLLOW, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_follow", "btn_cmd_follow", 35.0f, 35.0f, 0.0, "btn_cmd_follow_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_FOLLOW_TARGET, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_dmchat", "btn_follow_target", 35.0f, 35.0f, 0.0, "btn_follow_target_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_SEARCH, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ife_foc_search", "btn_cmd_search", 35.0f, 35.0f, 0.0, "btn_cmd_search_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_STEALTH, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ife_foc_hide", "btn_cmd_stealth", 35.0f, 35.0f, 0.0, "btn_cmd_stealth_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_AI_SCRIPT, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "", "btn_cmd_ai_script", 35.0f, 35.0f, 0.0, "btn_cmd_ai_script_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_PLACE_TRAP, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "isk_settrap", "btn_cmd_place_trap", 35.0f, 35.0f, 0.0, "btn_cmd_place_trap_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_BUFF_SHORT, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_cantrips", "btn_buff_short", 35.0f, 35.0f, 0.0, "btn_buff_short_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_BUFF_LONG, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_cast", "btn_buff_long", 35.0f, 35.0f, 0.0, "btn_buff_long_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_BUFF_ALL, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_level789", "btn_buff_all", 35.0f, 35.0f, 0.0, "btn_buff_all_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_BUFF_REST, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_rest", "btn_buff_rest", 35.0f, 35.0f, 0.0, "btn_buff_rest_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_JUMP_TO, oAssociate, sAssociateType)) + { + string sImage; + if(oPC == oAssociate) sImage = "dm_jumpall"; + else sImage = "dm_jump"; + jRow = CreateButtonImage(jRow, sImage, "btn_jump_to", 35.0f, 35.0f, 0.0, "btn_jump_to_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_GHOST_MODE, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "dm_limbo", "btn_ghost_mode", 35.0f, 35.0f, 0.0, "btn_ghost_mode_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_CAMERA, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_examine", "btn_camera", 35.0f, 35.0f, 0.0, "btn_camera_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_INVENTORY, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_pickup", "btn_inventory", 35.0f, 35.0f, 0.0, "btn_inventory_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_FAMILIAR, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ife_familiar", "btn_familiar", 35.0f, 35.0f, 0.0, "btn_familiar_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_COMPANION, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ife_animal", "btn_companion", 35.0f, 35.0f, 0.0, "btn_companion_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_FOR_PC, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "dm_ai", "btn_ai", 35.0f, 35.0f, 0.0, "btn_ai_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_REDUCE_SPEECH, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "isk_movsilent", "btn_quiet", 35.0f, 35.0f, 0.0, "btn_quiet_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_USE_RANGED, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_archer", "btn_ranged", 35.0f, 35.0f, 0.0, "btn_ranged_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_STOP_WEAPON_EQUIP, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "dm_takeitem", "btn_equip_weapon", 35.0f, 35.0f, 0.0, "btn_equip_weapon_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_USE_SEARCH, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "isk_search", "btn_search", 35.0f, 35.0f, 0.0, "btn_search_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_USE_STEALTH, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "isk_hide", "btn_stealth", 35.0f, 35.0f, 0.0, "btn_stealth_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_OPEN_DOORS, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_open", "btn_open_door", 35.0f, 35.0f, 0.0, "btn_open_door_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_REMOVE_TRAPS, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "isk_distrap", "btn_traps", 35.0f, 35.0f, 0.0, "btn_traps_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_PICK_LOCKS, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "isk_olock", "btn_pick_locks", 35.0f, 35.0f, 0.0, "btn_pick_locks_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_BASH_LOCKS, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_bash", "btn_bash_locks", 35.0f, 35.0f, 0.0, "btn_bash_locks_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_MAGIC_LEVEL, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "dm_control", "btn_magic_level", 35.0f, 35.0f, 0.0, "btn_magic_level_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_NO_SPONTANEOUS, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_xability", "btn_spontaneous", 35.0f, 35.0f, 0.0, "btn_spontaneous_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_NO_MAGIC_USE, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_cntrspell", "btn_magic", 35.0f, 35.0f, 0.0, "btn_magic_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_NO_MAGIC_ITEM_USE, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_moreattacks", "btn_magic_items", 35.0f, 35.0f, 0.0, "btn_magic_items_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_DEF_MAGIC_USE, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_orisons", "btn_def_magic", 35.0f, 35.0f, 0.0, "btn_def_magic_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_OFF_MAGIC_USE, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_metamagic", "btn_off_magic", 35.0f, 35.0f, 0.0, "btn_off_magic_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_HEAL_OUT, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "isk_heal", "btn_heal_out", 35.0f, 35.0f, 0.0, "btn_heal_out_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_HEAL_IN, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "dm_heal", "btn_heal_in", 35.0f, 35.0f, 0.0, "btn_heal_in_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_STOP_SELF_HEALING, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_heal", "btn_heals_onoff", 35.0f, 35.0f, 0.0, "btn_heals_onoff_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_STOP_PARTY_HEALING, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_party", "btn_healp_onoff", 35.0f, 35.0f, 0.0, "btn_healp_onoff_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_STOP_CURE_SPELLS, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_accept", "btn_cure_onoff", 35.0f, 35.0f, 0.0, "btn_cure_onoff_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_LOOT, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_barter", "btn_loot", 35.0f, 35.0f, 0.0, "btn_loot_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_IGNORE_ASSOCIATES, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_ignore", "btn_ignore_assoc", 35.0f, 35.0f, 0.0, "btn_ignore_assoc_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_IGNORE_TRAPS, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_abort", "btn_ignore_traps", 35.0f, 35.0f, 0.0, "btn_ignore_traps_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_PERC_RANGE, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_dmchat", "btn_perc_range", 35.0f, 35.0f, 0.0, "btn_perc_range_tooltip"); + fButtons += 1.0; + } + int bIsPC = ai_GetIsCharacter(oAssociate); + if(bIsPC) + { + json jPCPlugins = ai_UpdatePluginsForPC(oPC); + // Plug in buttons ***************************************************** + int nIndex, bWidget; + string sIcon, sButton; + json jPlugin = JsonArrayGet(jPCPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + bWidget = JsonGetInt(JsonArrayGet(jPlugin, 1)); + if(bWidget == 1) + { + sIcon = JsonGetString(JsonArrayGet(jPlugin, 3)); + sButton = IntToString(nIndex); + jRow = CreateButtonImage(jRow, sIcon, "btn_exe_plugin_" + sButton, 35.0f, 35.0f, 0.0, "btn_exe_plugin_" + sButton + "_tooltip"); + fButtons += 1.0; + } + jPlugin = JsonArrayGet(jPCPlugins, ++nIndex); + } + } + float fHeight, fWidth; + if(bAIWidgetLock) + { + fWidth = 50.0f; + fHeight = 50.0; + } + else if(bVertical) + { + fWidth = 88.0f; + fHeight = 55.0f; + } + else + { + fWidth = 55.0f; + fHeight = 88.0f; + } + // Quick Widget. + int nIndex, nSpell, nLevel, nMetaMagic; + float fQuickWidgetColumns; + string sClass, sLevel, sIndex; + object oItem; + json jSpell; + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + json jCol = JsonArray(); + if(ai_GetWidgetButton(oPC, BTN_CMD_SPELL_WIDGET, oAssociate, sAssociateType) && + JsonGetLength(jWidget) > 0) + { + // Row 2 (Widget Row 1)************************************************* + if(JsonGetType(jWidget) != JSON_TYPE_NULL) + { + fQuickWidgetColumns += 1.0; + int bAdd; + float fSpellButtons; + json jButton, jRectangle, jMetaMagic, jDrawList; + // Add row to the column. + if(bVertical) jCol = JsonArrayInsert(jCol, NuiCol(jRow)); + else jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + jRow = CreateButtonImage(JsonArray(), "ir_back", "btn_update_widget", 35.0f, 35.0f, 0.0, "btn_update_widget_tooltip"); + //CreateLabel(jRow, "", "blank_label", 35.0, 35.0, 0, 0, 0.0); + while(nIndex < 10) + { + bAdd = TRUE; + jSpell = JsonArrayGet(jWidget, nIndex); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + if(JsonGetInt(JsonArrayGet(jSpell, 1)) == -1) + { + oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + if(oItem == OBJECT_INVALID) + { + bAdd = FALSE; + jWidget = JsonArrayDel(jWidget, nIndex--); + jSpells = JsonArrayInsert(jSpells, jWidget, 2); + jAIData = JsonArrayInsert(jAIData, jSpells, 10); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + } + if(bAdd) + { + sIndex = IntToString(nIndex); + jButton = NuiButtonImage(NuiBind("btn_widget_" + sIndex + "_image")); + jButton = NuiEnabled(jButton, NuiBind("btn_widget_" + sIndex + "_event")); + jButton = NuiId(jButton, "btn_widget_" + sIndex); + jButton = NuiWidth(NuiHeight(jButton, 35.0), 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind("btn_widget_" + sIndex + "_tooltip")); + jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_" + sIndex + "_text")); + jDrawList = JsonArrayInsert(JsonArray(), jMetaMagic); + jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + jRow = JsonArrayInsert(jRow, jButton); + fSpellButtons += 1.0; + } + } + else break; + ++nIndex; + } + if(fSpellButtons > fButtons) fButtons = fSpellButtons; + // Row 3 (Widget Row 2)************************************************* + if(nIndex > 9 && JsonGetLength(jWidget) > 10) + { + fQuickWidgetColumns += 1.0; + // Add row to the column. + if(bVertical) jCol = JsonArrayInsert(jCol, NuiCol(jRow)); + else jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + jRow = CreateLabel(JsonArray(), "", "blank_label", 35.0, 35.0, 0, 0, 0.0); + while(nIndex < 20) + { + jSpell = JsonArrayGet(jWidget, nIndex); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + if(JsonGetInt(JsonArrayGet(jSpell, 1)) == -1) + { + oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + if(oItem == OBJECT_INVALID) + { + bAdd = FALSE; + jWidget = JsonArrayDel(jWidget, nIndex--); + jSpells = JsonArrayInsert(jSpells, jWidget, 2); + jAIData = JsonArrayInsert(jAIData, jSpells, 10); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + } + if(bAdd) + { + sIndex = IntToString(nIndex); + jButton = NuiButtonImage(NuiBind("btn_widget_" + sIndex + "_image")); + jButton = NuiEnabled(jButton, NuiBind("btn_widget_" + sIndex + "_event")); + jButton = NuiId(jButton, "btn_widget_" + sIndex); + jButton = NuiWidth(NuiHeight(jButton, 35.0), 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind("btn_widget_" + sIndex + "_tooltip")); + jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_" + sIndex + "_text")); + jDrawList = JsonArrayInsert(JsonArray(), jMetaMagic); + jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + jRow = JsonArrayInsert(jRow, jButton); + fSpellButtons += 1.0; + } + } + else break; + ++nIndex; + } + } + } + // Add the row to the column. + if(nIndex > 0) + { + if(bVertical) jCol = JsonArrayInsert(jCol, NuiCol(jRow)); + else jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + } + } + else + { + // Add the row to the column. + if(bVertical) jCol = JsonArrayInsert(jCol, NuiCol(jRow)); + else jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + } + float fScale = GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_SCALE) / 100.0; + float fButtonScale; + // 1.1 = 2.5 2.0 = 6.0 Ranges we need for scales to work correctly. + if(fScale > 1.0) fButtonScale = (fScale - 1.1) / (2.0 - 1.1) * 3.5 + 2.5; + else fButtonScale = 1.0; + if(fButtons > 0.0f) + { + if(bVertical) fWidth = fWidth + fButtons * 35.0f + fButtons * fButtonScale; + else fWidth = fWidth + fButtons * 35.0f; + } + if(fQuickWidgetColumns > 0.0f) + { + if(bVertical) fHeight = fHeight + fQuickWidgetColumns * 39.0f; + else fHeight = fHeight + fQuickWidgetColumns * 39.0f + fQuickWidgetColumns * fButtonScale; + } + // Get the window location to restore it from the database. + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + //SendMessageToPC(oPC, "0i_menu, 2124, sAssociateType: " + sAssociateType + " jLocations: " + JsonDump(jLocations, 1)); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) + { + ai_SetupAssociateData(oPC, oAssociate, sAssociateType); + jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + } + jLocations = JsonObjectGet(jLocations, sAssociateType + AI_WIDGET_NUI); + float fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + float fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + // Keeps the widgets from bunching up in the top corner. + if(fY == 0.0 && fX == 0.0) + { + if(sAssociateType == "pc") fY = 1.0; + else if(sAssociateType == "familiar") fY = 96.0 * fScale; + else if(sAssociateType == "companion") fY = 192.0 * fScale; + else if(sAssociateType == "summons") fY = 288.0 * fScale; + else if(sAssociateType == "dominated") fY = 384.0 * fScale; + else + { + int nIndex = 1; + string sAssociateName = GetName(oAssociate); + while(nIndex < AI_MAX_HENCHMAN) + { + if(sAssociateName == GetName(GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex))) + { + fY = (88.0 + 88.0 * IntToFloat(nIndex - 1)); + break; + } + nIndex++; + } + } + fY = fY * fScale; + } + if(bAIWidgetLock) + { + fX += 4.0f; + // GUI scales are a mess, I just figured them out per scale to keep the widget from moving. + if(fScale == 1.0) fY += 37.0; + else if(fScale == 1.1) fY += 38.0; + else if(fScale == 1.2) fY += 40.0; + else if(fScale == 1.3) fY += 42.0; + else if(fScale == 1.4) fY += 43.0; + else if(fScale == 1.5) fY += 45.0; + else if(fScale == 1.6) fY += 47.0; + else if(fScale == 1.7) fY += 48.0; + else if(fScale == 1.8) fY += 50.0; + else if(fScale == 1.9) fY += 52.0; + else if(fScale == 2.0) fY += 54.0; + } + // Set the layout of the window. + json jLayout; + int nToken, bBool; + string sHeal, sText, sRange; + string sName = GetName(oAssociate); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + if(bVertical) + { + jLayout = NuiRow(jCol); + if(bAIWidgetLock) nToken = SetWindow(oPC, jLayout, sAssociateType + AI_WIDGET_NUI, "AI Widget", fX, fY, fHeight, fWidth, FALSE, FALSE, FALSE, TRUE, FALSE, "0e_nui"); + else nToken = SetWindow(oPC, jLayout, sAssociateType + AI_WIDGET_NUI, sName + " Widget", fX, fY, fHeight, fWidth, FALSE, FALSE, FALSE, TRUE, TRUE, "0e_nui"); +} + else + { + jLayout = NuiCol(jCol); + if(bAIWidgetLock) nToken = SetWindow(oPC, jLayout, sAssociateType + AI_WIDGET_NUI, "AI Widget", fX, fY, fWidth, fHeight, FALSE, FALSE, FALSE, TRUE, FALSE, "0e_nui"); + else nToken = SetWindow(oPC, jLayout, sAssociateType + AI_WIDGET_NUI, sName + " Widget", fX, fY, fWidth, fHeight, FALSE, FALSE, FALSE, TRUE, TRUE, "0e_nui"); + } + // Save the associate to the nui. + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oAssociate))); + NuiSetUserData(oPC, nToken, jData); + ai_SetWidgetBinds(oPC, oAssociate, sAssociateType, nToken, sName); +} +json ai_CreateLootFilterRow(json jRow, string sLabel, int nIndex) +{ + string sIndex = IntToString(nIndex); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateTextEditBox(jRow, "plc_hold", "txt_gold_" + sIndex, 9, FALSE, 90.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateCheckBox(jRow, sLabel, "chbx_" + sIndex, 200.0, 20.0); + return JsonArrayInsert(jRow, NuiSpacer()); +} +void ai_SetupLootElements(object oPC, object oAssociate, int nToken, int nLootBit, int nIndex) +{ + string sIndex = IntToString(nIndex); + int bLoot = ai_GetLootFilter(oAssociate, nLootBit); + NuiSetBind(oPC, nToken, "chbx_" + sIndex + "_check", JsonBool(bLoot)); + NuiSetBindWatch (oPC, nToken, "chbx_" + sIndex + "_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_" + sIndex + "_event", JsonBool(TRUE)); + string sGold = IntToString(GetLocalInt(oAssociate, AI_MIN_GOLD_ + sIndex)); + NuiSetBind(oPC, nToken, "txt_gold_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_gold_" + sIndex, JsonString(sGold)); + NuiSetBindWatch (oPC, nToken, "txt_gold_" + sIndex, TRUE); +} +void ai_CreateLootFilterNUI(object oPC, object oAssociate) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 318 / 73 + int bIsPC = ai_GetIsCharacter(oAssociate); + json jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateCheckBox(jRow, "Give all loot to the player", "chbx_give_loot", 200.0, 20.0, "chbx_give_loot_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 *************************************************************** 388 / 101 + jRow = JsonArray(); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateTextEditBox(jRow, "plc_hold", "txt_max_weight", 9, FALSE, 50.0, 20.0, "txt_max_weight_tooltip"); + jRow = CreateLabel(jRow, "Maximum Weight to pickup", "lbl_weight", 200.0, 20.0, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 *************************************************************** 388 / 129 + jRow = JsonArray(); + jRow = CreateButton(jRow, "Set All", "btn_set_all", 110.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Clear All", "btn_clear_all", 110.0, 20.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 *************************************************************** 388 / 157 + jRow = JsonArray(); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateLabel(jRow, "Minimum Gold", "lbl_min_gold", 100.0, 20.0, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateLabel(jRow, "Items to Pickup", "lbl_pickup", 140.0, 20.0, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5 *************************************************************** 388 / 185 + jRow = ai_CreateLootFilterRow(JsonArray(), "Plot items", 2); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 6 *************************************************************** 388 / 213 + jRow = ai_CreateLootFilterRow(JsonArray(), "Armor", 3); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 7 *************************************************************** 388 / 241 + jRow = ai_CreateLootFilterRow(JsonArray(), "Belts", 4); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 8 *************************************************************** 388 / 269 + jRow = ai_CreateLootFilterRow(JsonArray(), "Boots", 5); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 9 *************************************************************** 388 / 297 + jRow = ai_CreateLootFilterRow(JsonArray(), "Cloaks", 6); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 10 *************************************************************** 388 / 325 + jRow = ai_CreateLootFilterRow(JsonArray(), "Gems", 7); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 11 *************************************************************** 388 / 353 + jRow = ai_CreateLootFilterRow(JsonArray(), "Gloves and Bracers", 8); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 12 *************************************************************** 388 / 381 + jRow = ai_CreateLootFilterRow(JsonArray(), "Headgear", 9); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 13 *************************************************************** 388 / 409 + jRow = ai_CreateLootFilterRow(JsonArray(), "Jewelry", 10); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 14 *************************************************************** 388 / 437 + jRow = ai_CreateLootFilterRow(JsonArray(), "Miscellaneous items", 11); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 15 *************************************************************** 388 / 465 + jRow = ai_CreateLootFilterRow(JsonArray(), "Potions", 12); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 16 *************************************************************** 388 / 493 + jRow = ai_CreateLootFilterRow(JsonArray(), "Scrolls", 13); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 17 *************************************************************** 388 / 521 + jRow = ai_CreateLootFilterRow(JsonArray(), "Shields", 14); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 18 *************************************************************** 388 / 549 + jRow = ai_CreateLootFilterRow(JsonArray(), "Wands, Rods, and Staves", 15); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 19 ************************************************************** 388 / 577 + jRow = ai_CreateLootFilterRow(JsonArray(), "Weapons", 16); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 20 ************************************************************** 388 / 605 + jRow = ai_CreateLootFilterRow(JsonArray(), "Arrows", 17); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 21 ************************************************************** 388 / 633 + jRow = ai_CreateLootFilterRow(JsonArray(), "Bolts", 18); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 22 ************************************************************** 388 / 661 + jRow = ai_CreateLootFilterRow(JsonArray(), "Bullets", 19); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + // Get the window location to restore it from the database. + float fX, fY; + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + jLocations = JsonObjectGet(jLocations, sAssociateType + AI_LOOTFILTER_NUI); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) { fX = -1.0; fY = -1.0; } + else + { + fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + } + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sText, sName = GetName(oAssociate); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, sAssociateType + AI_LOOTFILTER_NUI, sName + " Loot Filter", + fX, fY, 318.0, 673.0, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Save the associate to the nui. + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oAssociate))); + NuiSetUserData(oPC, nToken, jData); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set all binds, events, and watches. + // Row 1 + int bGiveLoot = ai_GetLootFilter(oAssociate, AI_LOOT_GIVE_TO_PC); + NuiSetBind(oPC, nToken, "chbx_give_loot_check", JsonBool (bGiveLoot)); + NuiSetBindWatch (oPC, nToken, "chbx_give_loot_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_give_loot_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_give_loot_tooltip", JsonString( + " Check this to make henchman give any loot picked up to the player.")); + // Row 2 + int nWeight = GetLocalInt(oAssociate, AI_MAX_LOOT_WEIGHT); + if(nWeight == 0) + { + nWeight = 200; + SetLocalInt(oAssociate, AI_MAX_LOOT_WEIGHT, nWeight); + } + NuiSetBind(oPC, nToken, "txt_max_weight_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_max_weight", JsonString(IntToString(nWeight))); + NuiSetBindWatch (oPC, nToken, "txt_max_weight", TRUE); + NuiSetBind(oPC, nToken, "txt_max_weight_tooltip", JsonString(" Max weighted item you will pickup from 1 to 1,000")); + // Row 3 + NuiSetBind(oPC, nToken, "btn_set_all_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_set_all", JsonInt(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_all_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_all", JsonInt(TRUE)); + // Row 4 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_PLOT, 2); + // Row 5 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_ARMOR, 3); + // Row 6 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_BELTS, 4); + // Row 7 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_BOOTS, 5); + // Row 8 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_CLOAKS, 6); + // Row 9 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_GEMS, 7); + // Row 10 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_GLOVES, 8); + // Row 11 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_HEADGEAR, 9); + // Row 12 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_JEWELRY, 10); + // Row 13 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_MISC, 11); + // Row 14 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_POTIONS, 12); + // Row 15 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_SCROLLS, 13); + // Row 16 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_SHIELDS, 14); + // Row 17 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_WANDS_RODS_STAVES, 15); + // Row 18 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_WEAPONS, 16); + // Row 19 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_ARROWS, 17); + // Row 20 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_BOLTS, 18); + // Row 21 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_BULLETS, 19); +} +void ai_CreateCopySettingsNUI(object oPC, object oAssociate) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 244 / 73 + string sName = GetName(oAssociate); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + json jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, "Copy settings to", "lbl_paste", 220.0, 20.0, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 244 / 101 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "All Associates", "btn_paste_all", 220.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 2 ******************************************************************* 244 / 129 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Familiar", "btn_paste_familiar", 220.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 ******************************************************************* 244 / 157 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Companion", "btn_paste_companion", 220.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 ******************************************************************* 244 / 185 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Summons", "btn_paste_summons", 220.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5 ******************************************************************* 244 / 213 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Dominated", "btn_paste_dominated", 220.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5+ ****************************************************************** 244 / 241 + float fHeight = 241.0; + int nIndex; + string sAssocName; + object oAssoc; + for(nIndex = 1; nIndex < AI_MAX_HENCHMAN; nIndex++) + { + oAssoc = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssoc != OBJECT_INVALID) + { + sAssocName = GetName(oAssoc); + if(GetStringRight(sAssocName, 1) == "s") sAssocName = sAssocName + "'"; + else sAssocName = sAssocName + "'s"; + jRow = CreateButton(JsonArray(), sAssocName, "btn_paste_henchman" + IntToString(nIndex), 220.0, 20.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + else break; + } + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + // Get the window location to restore it from the database. + float fX, fY; + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + jLocations = JsonObjectGet(jLocations, sAssociateType + AI_COPY_NUI); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) { fX = -1.0; fY = -1.0; } + else + { + fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + } + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + int nToken = SetWindow(oPC, jLayout, sAssociateType + AI_COPY_NUI, sName + " Copy Settings Menu", + fX, fY, 244.0, fHeight + 12.0, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Save the associate to the nui. + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oAssociate))); + NuiSetUserData(oPC, nToken, jData); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set all binds, events, and watches. + // Row 1 + NuiSetBind(oPC, nToken, "btn_paste_all_event", JsonBool (TRUE)); + oAssoc = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC); + NuiSetBind(oPC, nToken, "btn_paste_familiar_event", JsonBool(oAssoc != oAssociate && oAssoc != OBJECT_INVALID)); + oAssoc = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC); + NuiSetBind(oPC, nToken, "btn_paste_companion_event", JsonBool(oAssoc != oAssociate && oAssoc != OBJECT_INVALID)); + oAssoc = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC); + NuiSetBind(oPC, nToken, "btn_paste_summons_event", JsonBool(oAssoc != oAssociate && oAssoc != OBJECT_INVALID)); + oAssoc = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC); + NuiSetBind(oPC, nToken, "btn_paste_dominated_event", JsonBool(oAssoc != oAssociate && oAssoc != OBJECT_INVALID)); + for(nIndex = 1; nIndex < AI_MAX_HENCHMAN; nIndex++) + { + oAssoc = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssoc != OBJECT_INVALID) + { + NuiSetBind(oPC, nToken, "btn_paste_henchman" + IntToString(nIndex) + "_event", JsonBool(oAssoc != oAssociate)); + } + else break; + } +} +void ai_CreatePluginNUI(object oPC) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + int nIndex, nButton; + string sButton; + // Row 1 ******************************************************************* 500 / 73 + json jRow = CreateButton(JsonArray(), "Load Plugins", "btn_load_plugins", 150.0f, 20.0f, -1.0, "btn_load_plugins_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Load Monster Mods", "btn_load_m_mods", 150.0f, 20.0f, -1.0, "btn_load_m_mods_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Check All", "btn_check_plugins", 80.0f, 20.0f, -1.0, "btn_check_plugins_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Clear All", "btn_clear_plugins", 80.0f, 20.0f, -1.0, "btn_clear_plugins_tooltip"); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 500 / 101 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Add Plugin", "btn_add_plugin", 150.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateTextEditBox(jRow, "sPlaceHolder", "txt_plugin", 16, FALSE, 310.0f, 20.0f, "txt_plugin_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + float fHeight = 101.0; + // Row 3+ ****************************************************************** 500 / --- + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + nIndex = 0; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + string sName; + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Remove Plugin", "btn_remove_plugin_" + sButton, 150.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + sName = JsonGetString(JsonArrayGet(jPlugin, 2)); + jRow = CreateButton(jRow, sName, "btn_plugin_" + sButton, 290.0f, 20.0f, -1.0, "btn_plugin_" + sButton + "_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_plugin_" + sButton, 25.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + // Get the window location to restore it from the database. + json jLocations = ai_GetAssociateDbJson(oPC, "pc", "locations"); + float fX, fY; + jLocations = JsonObjectGet(jLocations, AI_PLUGIN_NUI); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) { fX = -1.0; fY = -1.0; } + else + { + fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + } + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + sName = GetName(oPC); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, AI_PLUGIN_NUI, sName + " PEPS Plugin Manager", + fX, fY, 500.0f, fHeight + 12.0f, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Save the associate to the nui for use in 0e_nui + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oPC))); + NuiSetUserData(oPC, nToken, jData); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Row 1 + NuiSetBind(oPC, nToken, "btn_load_plugins_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_load_plugins_tooltip", JsonString(" Load all known PEPS plugins that are in the game files.")); + NuiSetBind(oPC, nToken, "btn_load_m_mods_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_load_m_mods_tooltip", JsonString(" Load all known PEPS monster mods that are in the game files.")); + NuiSetBind(oPC, nToken, "btn_check_plugins_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_check_plugins_tooltip", JsonString(" Add all plugins to the players widget.")); + NuiSetBind(oPC, nToken, "btn_clear_plugins_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_plugins_tooltip", JsonString(" Remove all plugins from the players widget.")); + // Row 2 + NuiSetBind(oPC, nToken, "btn_add_plugin_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_plugin_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_plugin_tooltip", JsonString(" Enter an executable script name.")); + // Row 3+ + nIndex = 0; + int bCheck; + string sText; + jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_remove_plugin_" + sButton + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_plugin_" + sButton + "_event", JsonBool(TRUE)); + bCheck = JsonGetInt(JsonArrayGet(jPlugin, 1)); + if(bCheck < 3) + { + NuiSetBind(oPC, nToken, "chbx_plugin_" + sButton + "_check", JsonBool(bCheck)); + NuiSetBind(oPC, nToken, "chbx_plugin_" + sButton + "_event", JsonBool(TRUE)); + NuiSetBindWatch (oPC, nToken, "chbx_plugin_" + sButton + "_check", TRUE); + } + sText = " " + JsonGetString(JsonArrayGet(jPlugin, 2)); + NuiSetBind(oPC, nToken, "btn_plugin_" + sButton + "_tooltip", JsonString(sText)); + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } +} +int ai_SpellNotInList(int nSpell, json jSpellArray) +{ + int nMaxArray = JsonGetLength(jSpellArray); + int nIndex; + while(nIndex < nMaxArray) + { + if(nSpell == JsonGetInt(JsonArrayGet(JsonArrayGet(jSpellArray, nIndex), 0))) return FALSE; + nIndex++; + } + return TRUE; +} +json ai_CheckItemAbilities(json jQuickListArray, object oCreature, object oItem, json jSpell_Icon, json jSpell_Text, int bEquiped = FALSE) +{ + // We have established that we can use the item if it is equiped. + if(!bEquiped && !ai_CheckIfCanUseItem(oCreature, oItem)) return jQuickListArray; + int nPerDay, nCharges, nUses, bSaveTalent, nBaseItemType; + int nIprpSubType, nSpell, nLevel, nIPType, nIndex; + string sSpellIcon, sSpellName; + itemproperty ipProp = GetFirstItemProperty(oItem); + json jSpell; + // Lets skip this if there are no properties. + if(!GetIsItemPropertyValid(ipProp)) return jQuickListArray; + // Check for cast spell property and add them to the talent list. + while(GetIsItemPropertyValid(ipProp)) + { + nIPType = GetItemPropertyType(ipProp); + if(nIPType == ITEM_PROPERTY_CAST_SPELL) + { + bSaveTalent = TRUE; + // Get how they use the item (charges or uses per day). + nUses = GetItemPropertyCostTableValue(ipProp); + if(nUses > 1 && nUses < 7) + { + nCharges = GetItemCharges(oItem); + if((nUses == IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE && nCharges < 1) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_2_CHARGES_PER_USE && nCharges < 2) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_3_CHARGES_PER_USE && nCharges < 3) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_4_CHARGES_PER_USE && nCharges < 4) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_5_CHARGES_PER_USE && nCharges < 5)) bSaveTalent = FALSE; + } + else if(nUses > 7 && nUses < 13) + { + nPerDay = GetItemPropertyUsesPerDayRemaining(oItem, ipProp); + if(AI_DEBUG) ai_Debug("0i_talents", "1676", "Item uses: " + IntToString(nPerDay)); + if(nPerDay == 0) bSaveTalent = FALSE; + } + if(bSaveTalent) + { + // SubType is the ip spell index for iprp_spells.2da + nIprpSubType = GetItemPropertySubType(ipProp); + nSpell = StringToInt(Get2DAString("iprp_spells", "SpellIndex", nIprpSubType)); + nBaseItemType = GetBaseItemType(oItem); + if(nBaseItemType == BASE_ITEM_ENCHANTED_SCROLL || + nBaseItemType == BASE_ITEM_SCROLL || + nBaseItemType == BASE_ITEM_SPELLSCROLL) + { + sSpellIcon = Get2DAString("iprp_spells", "Icon", nIprpSubType); + sSpellName = ai_StripColorCodes(GetName(oItem)); + nUses = GetNumStackedItems(oItem); + } + else + { + if(nBaseItemType == BASE_ITEM_ENCHANTED_POTION || + nBaseItemType == BASE_ITEM_POTIONS) + { + sSpellName = ai_StripColorCodes(GetName(oItem)); + nUses = GetNumStackedItems(oItem); + } + else if(nBaseItemType == BASE_ITEM_ENCHANTED_WAND || + nBaseItemType == BASE_ITEM_MAGICWAND || + nBaseItemType == FEAT_CRAFT_WAND) + { + sSpellName = ai_StripColorCodes(GetName(oItem)); + nUses = nCharges; + } + else + { + sSpellName = ai_StripColorCodes(GetName(oItem)) + ": "; + sSpellName += GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(nCharges) nUses = nCharges; + else nUses = nPerDay; + } + sSpellIcon = Get2DAString("spells", "iConResRef", nSpell); + } + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(nSpell)); + jSpell = JsonArrayInsert(jSpell, JsonInt(-1)); // Class is set to -1 for items + jSpell = JsonArrayInsert(jSpell, JsonInt(nUses)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nBaseItemType)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nIprpSubType)); + jSpell = JsonArrayInsert(jSpell, JsonString(GetObjectUUID(oItem))); + jQuickListArray = JsonArrayInsert(jQuickListArray, jSpell); + } + } + else if(nIPType == ITEM_PROPERTY_HEALERS_KIT) + { + // Must also have ranks in healing kits. + if(GetSkillRank(SKILL_HEAL, oCreature) > 0) + { + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString("isk_heal")); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(ai_StripColorCodes(GetName(oItem)))); + json jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(SPELL_HEALINGKIT)); + jSpell = JsonArrayInsert(jSpell, JsonInt(-1)); // Class is set to -1 for items + jSpell = JsonArrayInsert(jSpell, JsonInt(GetNumStackedItems(oItem))); + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); + jSpell = JsonArrayInsert(jSpell, JsonInt(GetItemPropertyCostTableValue(ipProp))); + jSpell = JsonArrayInsert(jSpell, JsonString(GetObjectUUID(oItem))); + jQuickListArray = JsonArrayInsert(jQuickListArray, jSpell); + } + } + nIndex++; + ipProp = GetNextItemProperty(oItem); + } + SetLocalJson(oCreature, "JSPELL_ICON", jSpell_Icon); + SetLocalJson(oCreature, "JSPELL_NAME", jSpell_Text); + return jQuickListArray; +} +void ai_CreateQuickWidgetSelectionNUI(object oPC, object oAssociate) +{ + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + json jRow = JsonArray(); + // Row 1 Classes************************************************************ 414 / 88 + int nClass, nLevel, nIndex; + string sIndex, sClassIcon, sLevelIcon; + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClass = GetClassByPosition(nIndex, oAssociate); + if(nClass != CLASS_TYPE_INVALID) + { + // This saves the class position in the button id so we can get it later. + sIndex = IntToString(nIndex); + sClassIcon = Get2DAString("classes", "Icon", nClass); + jRow = CreateButtonImage(jRow, sClassIcon, "btn_class_" + sIndex, 35.0f, 35.0f, 0.0, "btn_class_" + sIndex + "_tooltip"); + } + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 (Levels) ********************************************************** 414 / 131 + jRow = CreateButtonImage(JsonArray(), "", "btn_level_11" , 35.0f, 35.0f, 0.0, "btn_level_11_tooltip"); + jRow = CreateButtonImage(jRow, "", "btn_level_10" , 35.0f, 35.0f, 0.0, "btn_level_10_tooltip"); + for(nIndex = 0; nIndex <= 9; nIndex++) + { + // This saves the level in the button id so we can get it later. + sIndex = IntToString(nIndex); + jRow = CreateButtonImage(jRow, "", "btn_level_" + sIndex, 35.0f, 35.0f, 0.0, "btn_level_" + sIndex + "_tooltip"); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 (Spell List)******************************************************* 414 / 433 + json jButton = JsonArray(); + jButton = NuiButton(NuiBind("text_spell")); + jButton = NuiId(jButton, "btn_text_spell"); + json jRectangle = NuiRect(4.0, 4.0, 27.0, 27.0); + json jDrawList = JsonArrayInsert(JsonArray(), NuiDrawListImage(JsonBool(TRUE), NuiBind("icon_spell"), jRectangle, JsonInt(NUI_ASPECT_FILL), JsonInt(NUI_HALIGN_CENTER), JsonInt(NUI_VALIGN_MIDDLE))); + jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + json jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_text")); + jDrawList = JsonArrayInsert(jDrawList, jMetaMagic); + jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + json jListTemplate = JsonArrayInsert(JsonArray(), NuiListTemplateCell(jButton, 345.0, FALSE)); + json jInfo = NuiButtonImage(JsonString("gui_cg_qstn_mark")); + jInfo = NuiId(jInfo, "btn_info_spell"); + jListTemplate = JsonArrayInsert(jListTemplate, NuiListTemplateCell(jInfo, 35.0, FALSE)); + jRow = JsonArrayInsert(JsonArray(), NuiHeight(NuiList(jListTemplate, NuiBind("icon_spell"), 35.0), 282.0)); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 (Widget Label)***************************************************** 414 / 461 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, "Quick Widget List", "lbl_quick_list", 150.0, 20.0, 0, 0, 0.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5 (Widget row 1)***************************************************** 414 / 504 + jRow = JsonArray(); + for(nIndex = 0; nIndex < 10; nIndex++) + { + // This saves the index location in the json jWidget in the button id for later use. + sIndex = IntToString(nIndex); + json jButton = NuiButtonImage(NuiBind("btn_widget_" + sIndex + "_image")); + jButton = NuiEnabled(jButton, NuiBind("btn_widget_" + sIndex + "_event")); + jButton = NuiId(jButton, "btn_widget_" + sIndex); + jButton = NuiWidth(NuiHeight(jButton, 35.0), 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind("btn_widget_" + sIndex + "_tooltip")); + json jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + json jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_" + sIndex + "_text")); + jDrawList = JsonArrayInsert(JsonArray(), jMetaMagic); + jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + jRow = JsonArrayInsert(jRow, jButton); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 6 (Widget row 2)***************************************************** 414 / 543 + jRow = JsonArray(); + for(nIndex = 10; nIndex < 20; nIndex++) + { + // This saves the index location in the json jWidget in the button id for later use. + sIndex = IntToString(nIndex); + json jButton = NuiButtonImage(NuiBind("btn_widget_" + sIndex + "_image")); + jButton = NuiEnabled(jButton, NuiBind("btn_widget_" + sIndex + "_event")); + jButton = NuiId(jButton, "btn_widget_" + sIndex); + jButton = NuiWidth(NuiHeight(jButton, 35.0), 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind("btn_widget_" + sIndex + "_tooltip")); + json jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + json jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_" + sIndex + "_text")); + jDrawList = JsonArrayInsert(JsonArray(), jMetaMagic); + jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + jRow = JsonArrayInsert(jRow, jButton); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Get the window location to restore it from the database. + float fX, fY; + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + jLocations = JsonObjectGet(jLocations, sAssociateType + AI_QUICK_WIDGET_NUI); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) { fX = -1.0; fY = -1.0; } + else + { + fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + } + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sText, sName = GetName(oAssociate); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, sAssociateType + AI_QUICK_WIDGET_NUI, sName + " Quick Widget Menu", + fX, fY, 414.0, 543.0 + 12.0, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Set the Layout of the window. + // Save the associate to the nui for use in 0e_nui + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oAssociate))); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + json jSpells; + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + // Temporary fix for error! :/ + if(JsonGetLength(jAIData) == 0) + { + ai_CheckAssociateData(oPC, oAssociate, sAssociateType, TRUE); + jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jSpells = JsonArray(); + jSpells = JsonArrayInsert(jSpells, JsonInt(1)); + jSpells = JsonArrayInsert(jSpells, JsonInt(10)); + jAIData = JsonArrayInsert(jAIData, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + nLevel = 10; + } + if(JsonGetLength(jAIData) == 9) + { + jSpells = JsonArray(); + jSpells = JsonArrayInsert(jSpells, JsonInt(1)); + jSpells = JsonArrayInsert(jSpells, JsonInt(10)); + jSpells = JsonArrayInsert(jSpells, JsonArray()); + jAIData = JsonArrayInsert(jAIData, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + nLevel = 10; + } + else + { + jSpells = JsonArrayGet(jAIData, 10); + if(JsonGetLength(jSpells) == 0) + { + jSpells = JsonArray(); + jSpells = JsonArrayInsert(jSpells, JsonInt(1)); + jSpells = JsonArrayInsert(jSpells, JsonInt(10)); + jSpells = JsonArrayInsert(jSpells, JsonArray()); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + nLevel = 10; + } + else + { + nClass = JsonGetInt(JsonArrayGet(jSpells, 0)); + nLevel = JsonGetInt(JsonArrayGet(jSpells, 1)); + } + } + if(nClass < 1 || nClass > AI_MAX_CLASSES_PER_CHARACTER) nClass = 1; + nClass = GetClassByPosition(nClass, oAssociate); + // Row 1 & 2 Class & Level + int nSpellLevel, nLevelIndex, nClassIndex, nMaxSpellLevel; + string sClass, sLevel, sLevelImage, sLevelIndex; + NuiSetBind(oPC, nToken, "btn_level_11_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_11_tooltip", JsonString(" Item Powers")); + NuiSetBind(oPC, nToken, "btn_level_11_image", JsonString("ir_attack")); + NuiSetBind(oPC, nToken, "btn_level_10_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_10_tooltip", JsonString(" Special Abilities")); + NuiSetBind(oPC, nToken, "btn_level_10_image", JsonString("dm_god")); + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClassIndex = GetClassByPosition(nIndex, oAssociate); + if(nClassIndex != CLASS_TYPE_INVALID) + { + sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClassIndex))); + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_class_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_class_" + sIndex + "_tooltip", JsonString(" " + sClass)); + if(nClass == nClassIndex) + { + if(StringToInt(Get2DAString("classes", "SpellCaster", nClass))) + { + int nClassLevel = GetLevelByClass(nClass, oAssociate); + string sSpellsGained = Get2DAString("classes", "SpellGainTable", nClass); + int nMaxSpellLevel = StringToInt(Get2DAString(sSpellsGained, "NumSpellLevels", nClassLevel - 1)); + for(nLevelIndex = 0; nLevelIndex <= 9; nLevelIndex++) + { + sLevelIndex = IntToString(nLevelIndex); + if(nLevelIndex < nMaxSpellLevel) + { + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_event", JsonBool(TRUE)); + if(nLevelIndex == 0) sLevelImage = "ir_cantrips"; + else if(nLevelIndex < 7)sLevelImage = "ir_level" + sLevelIndex; + else sLevelImage = "ir_level789"; + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_image", JsonString(sLevelImage)); + if(nLevelIndex == 0) sLevel = " Cantrips"; + else if(nLevelIndex == 1) sLevel = " First level"; + else if(nLevelIndex == 2) sLevel = " Second level"; + else if(nLevelIndex == 3) sLevel = " Third level"; + else if(nLevelIndex == 4) sLevel = " Fourth level"; + else if(nLevelIndex == 5) sLevel = " Fifth level"; + else if(nLevelIndex == 6) sLevel = " Sixth level"; + else if(nLevelIndex == 7) sLevel = " Seventh level"; + else if(nLevelIndex == 8) sLevel = " Eighth level"; + else if(nLevelIndex == 9) sLevel = " Ninth level"; + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_tooltip", JsonString(" " + sLevel)); + } + else + { + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_event", JsonBool(FALSE)); + } + } + NuiSetBind(oPC, nToken, "btn_level_" + IntToString(nLevel) + "_encouraged", JsonBool(TRUE)); + } + // Default to the abilities tab since they are not a caster. + else + { + if(nLevel < 10) nLevel = 10; + for(nLevelIndex = 0; nLevelIndex <= 9; nLevelIndex++) + { + sLevelIndex = IntToString(nLevelIndex); + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_event", JsonBool(FALSE)); + } + NuiSetBind(oPC, nToken, "btn_level_10_encouraged", JsonBool(TRUE)); + } + NuiSetBind(oPC, nToken, "btn_class_" + IntToString(nClass) + "_encouraged", JsonBool(TRUE)); + } + } + } + // Row 3 Items/Abilities/Skills/Spells + int nSpell, nMetaMagic, nDomain, nSubSpell, nSubSpellIndex; + int nSpellSlot, nCounter, nMax2daRow, nFeat; + string sSpellIcon, sSpellName, sMetaMagicText, sClassFeats, sSubSpellIndex; + object oItem; + json jQuickListArray = JsonArray(); + json jSpell; + json jSpell_Icon = JsonArray(); + json jSpell_Text = JsonArray(); + SetLocalJson(oAssociate, "JSPELL_ICON", jSpell_Icon); + SetLocalJson(oAssociate, "JSPELL_NAME", jSpell_Text); + json jMetaMagic_Text = JsonArray(); + // Item powers + if(nLevel == 11) + { + string sSlots; + // Cycle through all the creatures inventory items. + oItem = GetFirstItemInInventory(oAssociate); + while(oItem != OBJECT_INVALID) + { + if(GetIdentified(oItem)) + { + // Does the item need to be equiped to use its powers? + sSlots = Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)); + if(sSlots == "0x00000") + { + jQuickListArray = ai_CheckItemAbilities(jQuickListArray, oAssociate, oItem, jSpell_Icon, jSpell_Text, FALSE); + jSpell_Icon = GetLocalJson(oAssociate, "JSPELL_ICON"); + jSpell_Text = GetLocalJson(oAssociate, "JSPELL_NAME"); + WriteTimestampedLogEntry("0i_menus, 3643, oAssociate: " + GetName(oAssociate) + + " jSpell_Text: " + JsonDump(jSpell_Text, 4)); + } + } + oItem = GetNextItemInInventory(oAssociate); + } + int nSlot; + // Cycle through all the creatures equiped items. + oItem = GetItemInSlot(nSlot, oAssociate); + while(nSlot < 11) + { + if(oItem != OBJECT_INVALID) + { + jQuickListArray = ai_CheckItemAbilities(jQuickListArray, oAssociate, oItem, jSpell_Icon, jSpell_Text, TRUE); + jSpell_Icon = GetLocalJson(oAssociate, "JSPELL_ICON"); + jSpell_Text = GetLocalJson(oAssociate, "JSPELL_NAME"); + } + oItem = GetItemInSlot(++nSlot, oAssociate); + } + oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oAssociate); + if(oItem != OBJECT_INVALID) + { + jQuickListArray = ai_CheckItemAbilities(jQuickListArray, oAssociate, oItem, jSpell_Icon, jSpell_Text, TRUE); + jSpell_Icon = GetLocalJson(oAssociate, "JSPELL_ICON"); + jSpell_Text = GetLocalJson(oAssociate, "JSPELL_NAME"); + } + DeleteLocalJson(oAssociate, "JSPELL_ICON"); + DeleteLocalJson(oAssociate, "JSPELL_NAME"); + } + // Special abilities and skills. + else if(nLevel == 10) + { + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClassIndex = GetClassByPosition(nIndex, oAssociate); + if(nClassIndex != CLASS_TYPE_INVALID) + { + nCounter = 0; + sClassFeats = Get2DAString("classes", "FeatsTable", nClassIndex); + nMax2daRow = Get2DARowCount(sClassFeats); + while(nCounter < nMax2daRow) + { + if(Get2DAString(sClassFeats, "OnMenu", nCounter) != "0") + { + nFeat = StringToInt(Get2DAString(sClassFeats, "FeatIndex", nCounter)); + if(GetHasFeat(nFeat, oAssociate, TRUE)) + { + // Check for subfeats. + nSpell = StringToInt(Get2DAString("feat", "SPELLID", nFeat)); + nSubSpell = StringToInt(Get2DAString("spells", "SubRadSpell1", nSpell)); + //SendMessageToPC(oPC, "nFeat: " + IntToString(nFeat) + + // " nSpell: " + IntToString(nSpell) + + // " nSubSpell: " + IntToString(nSubSpell)); + if(nSubSpell) + { + for(nSubSpellIndex = 1; nSubSpellIndex <= 5; nSubSpellIndex++) + { + sSubSpellIndex = IntToString(nSubSpellIndex); + nSubSpell = StringToInt(Get2DAString("spells", "SubRadSpell" + sSubSpellIndex, nSpell)); + //SendMessageToPC(oPC, " nSpell: " + IntToString(nSpell) + + // " nSubSpell: " + IntToString(nSubSpell)); + if(nSubSpell != 0) + { + sSpellIcon = Get2DAString("spells", "iConResRef", nSubSpell); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSubSpell))); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(nSubSpell)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nClass)); + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); + jSpell = JsonArrayInsert(jSpell, JsonInt(255)); + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nFeat)); + jQuickListArray = JsonArrayInsert(jQuickListArray, jSpell); + } + } + } + else if((nFeat < 71 || nFeat > 81)) + { + sSpellIcon = Get2DAString("feat", "ICON", nFeat); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("feat", "FEAT", nFeat))); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(nSpell)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nClass)); + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); + jSpell = JsonArrayInsert(jSpell, JsonInt(255)); + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nFeat)); + jQuickListArray = JsonArrayInsert(jQuickListArray, jSpell); + } + } + } + nCounter++; + } + } + } + // Used in the execution script to get the special abilities. + //jData = JsonArrayInsert(jData, jQuickListArray); + } + else // Anything else is for spells. + { + // Search all memorized spells for the spell. + //SendMessageToPC(oPC, GetName(oAssociate) + " nClass: " + IntToString(nClass) + + // " nLevelSelected: " + IntToString(nLevel) + + // " nMemorizesSpells: " + Get2DAString("classes", "MemorizesSpells", nClass)); + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + int nMaxSlot = GetMemorizedSpellCountByLevel(oAssociate, nClass, nLevel); + while(nSpellSlot < nMaxSlot) + { + nSpell = GetMemorizedSpellId(oAssociate, nClass, nLevel, nSpellSlot); + if(nSpell != -1 && ai_SpellNotInList(nSpell, jQuickListArray)) + { + nMetaMagic = GetMemorizedSpellMetaMagic(oAssociate, nClass, nLevel, nSpellSlot); + nDomain = GetMemorizedSpellIsDomainSpell(oAssociate, nClass, nLevel, nSpellSlot); + // Check for subspells. + nSubSpell = StringToInt(Get2DAString("spells", "SubRadSpell1", nSpell)); + if(nSubSpell) + { + for(nSubSpellIndex = 1; nSubSpellIndex < 6; nSubSpellIndex++) + { + sSubSpellIndex = IntToString(nSubSpellIndex); + nSubSpell = StringToInt(Get2DAString("spells", "SubRadSpell" + sSubSpellIndex, nSpell)); + if(nSubSpell && ai_SpellNotInList(nSubSpell, jQuickListArray)) + { + sSpellIcon = Get2DAString("spells", "IconResRef", nSubSpell); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSubSpell))); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, nMetaMagic, nDomain); + jMetaMagic_Text = JsonArrayInsert(jMetaMagic_Text, JsonString(sMetaMagicText)); + jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(nSubSpell)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nClass)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nLevel)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nMetaMagic)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nDomain)); + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); + jQuickListArray = JsonArrayInsert(jQuickListArray, jSpell); + } + } + } + else + { + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, nMetaMagic, nDomain); + jMetaMagic_Text = JsonArrayInsert(jMetaMagic_Text, JsonString(sMetaMagicText)); + jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(nSpell)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nClass)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nLevel)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nMetaMagic)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nDomain)); + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); + jQuickListArray = JsonArrayInsert(jQuickListArray, jSpell); + //SendMessageToPC(oPC, "nSpell: " + IntToString(nSpell) + + // " sSpellIcon: " + sSpellIcon + + // " sSpellName: " + sSpellName+ + // " nMaxSlot: " + IntToString(nMaxSlot) + + // " nSpellSlot: " + IntToString(nSpellSlot)); + } + } + ++nSpellSlot; + } + } + // Non-memorized spells. + else + { + int nMaxSlot = GetKnownSpellCount(oAssociate, nClass, nLevel); + while(nSpellSlot < nMaxSlot) + { + nSpell = GetKnownSpellId(oAssociate, nClass, nLevel, nSpellSlot); + if(nSpell != -1)// && ai_SpellNotInList(nSpell, jQuickListArray)) + { + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(nSpell)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nClass)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nLevel)); + jSpell = JsonArrayInsert(jSpell, JsonInt(255)); + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); + jQuickListArray = JsonArrayInsert(jQuickListArray, jSpell); + } + ++nSpellSlot; + } + } + } + NuiSetBind(oPC, nToken, "icon_spell", jSpell_Icon); + NuiSetBind(oPC, nToken, "text_spell", jSpell_Text); + NuiSetBind(oPC, nToken, "metamagic_text", jMetaMagic_Text); + jData = JsonArrayInsert(jData, jQuickListArray); + NuiSetUserData(oPC, nToken, jData); + // Row 4 Quick widget list label. + // Row 5 Quick widget List 1 + json jWidget = JsonArrayGet(jSpells, 2); + nIndex = 0; + while(nIndex < 10) + { + jSpell = JsonArrayGet(jWidget, nIndex); + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + nFeat = JsonGetInt(JsonArrayGet(jSpell, 5)); + if(nClass == -1) // This is an Item. + { + string sBaseName; + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + int nBaseItemType = JsonGetInt(JsonArrayGet(jSpell, 3)); + int nIprpSubType = JsonGetInt(JsonArrayGet(jSpell, 4)); + if(nSpell == SPELL_HEALINGKIT) + { + sName = "Healer's Kit +" + IntToString(nIprpSubType); + sSpellIcon = "isk_heal"; + sBaseName = "Healer's Kit"; + } + else if(nBaseItemType == BASE_ITEM_ENCHANTED_SCROLL || + nBaseItemType == BASE_ITEM_SCROLL || + nBaseItemType == BASE_ITEM_SPELLSCROLL) + { + sSpellIcon = Get2DAString("iprp_spells", "Icon", nIprpSubType); + sBaseName = "Scroll"; + } + else + { + if(nBaseItemType == BASE_ITEM_ENCHANTED_POTION || + nBaseItemType == BASE_ITEM_POTIONS) sBaseName = "Potion"; + else if(nBaseItemType == BASE_ITEM_ENCHANTED_WAND || + nBaseItemType == BASE_ITEM_MAGICWAND || + nBaseItemType == FEAT_CRAFT_WAND) sBaseName = "Wand"; + else sBaseName = ai_StripColorCodes(GetName(GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + int nUses = ai_GetItemUses(oItem, nIprpSubType); + if(nUses) + { + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + if(nUses == 999) sText = "Unlimited"; + else sText = IntToString(nUses); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sBaseName + " / " + sText + ")")); + } + } + else if(nFeat) // This is a feat. + { + sSpellIcon = ""; + if(nSpell) + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + if(sSpellIcon == "" || sSpellIcon == "IR_USE") + { + sName = GetStringByStrRef(StringToInt(Get2DAString("feat", "FEAT", nFeat))); + sSpellIcon = Get2DAString("feat", "ICON", nFeat); + } + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName)); + } + else // This is a spell. + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + nLevel = JsonGetInt(JsonArrayGet(jSpell, 2)); + nMetaMagic = JsonGetInt(JsonArrayGet(jSpell, 3)); + nDomain = JsonGetInt(JsonArrayGet(jSpell, 4)); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + IntToString(nLevel) + ")")); + sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, nMetaMagic, nDomain); + NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString(sMetaMagicText)); + } + } + else + { + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString("")); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + ++nIndex; + } + if(nIndex < 10) return; + // Row 6 Quick widget List2 + while(nIndex < 20) + { + jSpell = JsonArrayGet(jWidget, nIndex); + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + nFeat = JsonGetInt(JsonArrayGet(jSpell, 5)); + if(nClass == -1) // This is an Item. + { + string sBaseName; + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + int nBaseItemType = JsonGetInt(JsonArrayGet(jSpell, 3)); + int nIprpSubType = JsonGetInt(JsonArrayGet(jSpell, 4)); + if(nSpell == SPELL_HEALINGKIT) + { + sName = "Healer's Kit +" + IntToString(nIprpSubType); + sSpellIcon = "isk_heal"; + sBaseName = "Healer's Kit"; + } + else if(nBaseItemType == BASE_ITEM_ENCHANTED_SCROLL || + nBaseItemType == BASE_ITEM_SCROLL || + nBaseItemType == BASE_ITEM_SPELLSCROLL) + { + sSpellIcon = Get2DAString("iprp_spells", "Icon", nIprpSubType); + sBaseName = "Scroll"; + } + else + { + if(nBaseItemType == BASE_ITEM_ENCHANTED_POTION || + nBaseItemType == BASE_ITEM_POTIONS) sBaseName = "Potion"; + else if(nBaseItemType == BASE_ITEM_ENCHANTED_WAND || + nBaseItemType == BASE_ITEM_MAGICWAND || + nBaseItemType == FEAT_CRAFT_WAND) sBaseName = "Wand"; + else sBaseName = ai_StripColorCodes(GetName(GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + int nUses = ai_GetItemUses(oItem, nIprpSubType); + if(nUses) + { + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + if(nUses == 999) sText = "Unlimited"; + else sText = IntToString(nUses); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sBaseName + " / " + sText + ")")); + } + } + else if(nFeat) // This is a feat. + { + sSpellIcon = ""; + if(nSpell) + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + if(sSpellIcon == "" || sSpellIcon == "IR_USE") + { + sName = GetStringByStrRef(StringToInt(Get2DAString("feat", "FEAT", nFeat))); + sSpellIcon = Get2DAString("feat", "ICON", nFeat); + } + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName)); + } + else // This is a spell. + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + nLevel = JsonGetInt(JsonArrayGet(jSpell, 2)); + nMetaMagic = JsonGetInt(JsonArrayGet(jSpell, 3)); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + IntToString(nLevel) + ")")); + sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, nMetaMagic, nDomain); + NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString(sMetaMagicText)); + } + } + else + { + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString("")); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + ++nIndex; + } +} +void ai_CreateSpellMemorizationNUI(object oPC, object oAssociate) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jRow = JsonArray(); + // Row 1 Classes************************************************************ 414 / 73 + int nClass, bCaster, nIndex; + string sIndex, sClassIcon, sLevelIcon; + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClass = GetClassByPosition(nIndex, oAssociate); + if(nClass != CLASS_TYPE_INVALID) + { + if(StringToInt(Get2DAString("classes", "MemorizesSpells", nClass))) + { + // This saves the class position in the button id so we can get it later. + sIndex = IntToString(nIndex); + sClassIcon = Get2DAString("classes", "Icon", nClass); + jRow = CreateButtonImage(jRow, sClassIcon, "btn_class_" + sIndex, 35.0f, 35.0f, 0.0, "btn_class_" + sIndex + "_tooltip"); + } + } + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 (Levels) ********************************************************** 414 / 116 + jRow = JsonArray(); + for(nIndex = 0; nIndex <= 9; nIndex++) + { + // This saves the level in the button id so we can get it later. + sIndex = IntToString(nIndex); + jRow = CreateButtonImage(jRow, "", "btn_level_" + sIndex, 35.0f, 35.0f, 0.0, "btn_level_" + sIndex + "_tooltip"); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 (Spell List)******************************************************* 414 / 398 + json jButton = JsonArray(); + jButton = NuiButton(NuiBind("text_spell")); + jButton = NuiId(jButton, "btn_text_spell"); + json jRectangle = NuiRect(4.0, 4.0, 27.0, 27.0); + json jDrawList = JsonArrayInsert(JsonArray(), NuiDrawListImage(JsonBool(TRUE), NuiBind("icon_spell"), jRectangle, JsonInt(NUI_ASPECT_FILL), JsonInt(NUI_HALIGN_CENTER), JsonInt(NUI_VALIGN_MIDDLE))); + //jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + //json jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_text")); + //jDrawList = JsonArrayInsert(jDrawList, jMetaMagic); + jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + json jListTemplate = JsonArrayInsert(JsonArray(), NuiListTemplateCell(jButton, 275.0, FALSE)); + json jInfo = NuiButtonImage(JsonString("gui_cg_qstn_mark")); + jInfo = NuiId(jInfo, "btn_info_spell"); + jListTemplate = JsonArrayInsert(jListTemplate, NuiListTemplateCell(jInfo, 35.0, FALSE)); + jRow = JsonArrayInsert(JsonArray(), NuiHeight(NuiList(jListTemplate, NuiBind("icon_spell"), 35.0), 282.0)); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 (Widget Label)***************************************************** 414 / 426 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + CreateLabel(jRow, "Memorized Spell List", "lbl_spell_list", 150.0, 20.0, 0, 0, 0.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5 (Memorize slots)*************************************************** 414 / 469 + // Get the class and level selected from the database. + int nClassSelected, nLevelSelected; + json jSpells; + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + // Temporary fix for error! :/ + if(JsonGetLength(jAIData) == 0) + { + ai_CheckAssociateData(oPC, oAssociate, sAssociateType, TRUE); + jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + } + if(JsonGetLength(jAIData) == 9) + { + jSpells = JsonArray(); + jSpells = JsonArrayInsert(jSpells, JsonInt(1)); + jSpells = JsonArrayInsert(jSpells, JsonInt(0)); + jAIData = JsonArrayInsert(jAIData, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + else + { + jSpells = JsonArrayGet(jAIData, 10); + if(JsonGetType(jSpells) == JSON_TYPE_NULL) + { + jSpells = JsonArray(); + jSpells = JsonArrayInsert(jSpells, JsonInt(1)); + jSpells = JsonArrayInsert(jSpells, JsonInt(0)); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + else + { + nClassSelected = JsonGetInt(JsonArrayGet(jSpells, 0)); + nLevelSelected = JsonGetInt(JsonArrayGet(jSpells, 1)); + } + } + // If we left the Quick Use widget on Special Abilities (10) or Items (11) goto level 0 + if(nLevelSelected == 10 || nLevelSelected == 11) + { + nLevelSelected = 0; + jSpells = JsonArraySet(jSpells, 1, JsonInt(0)); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + if(nClassSelected < 1 || nClassSelected > AI_MAX_CLASSES_PER_CHARACTER) nClassSelected = 1; + nClass = GetClassByPosition(nClassSelected, oAssociate); + int nMaxMemorizationSlots = GetMemorizedSpellCountByLevel(oAssociate, nClass, nLevelSelected); + jRow = JsonArray(); + for(nIndex = 0; nIndex < nMaxMemorizationSlots; nIndex++) + { + // This saves the index location of the spell in the list. + sIndex = IntToString(nIndex); + json jButton = NuiButtonImage(NuiBind("btn_memorized_" + sIndex + "_image")); + jButton = NuiEnabled(jButton, NuiBind("btn_memorized_" + sIndex + "_event")); + jButton = NuiId(jButton, "btn_memorized_" + sIndex); + jButton = NuiWidth(NuiHeight(jButton, 35.0), 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind("btn_memorized_" + sIndex + "_tooltip")); + //json jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + //json jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_" + sIndex + "_text")); + //jDrawList = JsonArrayInsert(JsonArray(), jMetaMagic); + //jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + jRow = JsonArrayInsert(jRow, jButton); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Get the window location to restore it from the database. + float fX, fY; + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + jLocations = JsonObjectGet(jLocations, sAssociateType + AI_SPELL_MEMORIZE_NUI); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) { fX = -1.0; fY = -1.0; } + else + { + fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + } + string sText, sName = GetName(oAssociate); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + int nToken = SetWindow(oPC, jLayout, sAssociateType + AI_SPELL_MEMORIZE_NUI, sName + " Spell Memorization Menu", + fX, fY, 375.0, 504.0 + 12.0, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Set the Layout of the window. + // Save the associate to the nui for use in 0e_nui + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oAssociate))); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Row 1 & 2 Class & Level + int nSpellLevel, nIndexLevel, nMaxSpellLevel; + string sClass, sLevel, sLevelImage, sIndexLevel; + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClass = GetClassByPosition(nIndex, oAssociate); + if(nClass != CLASS_TYPE_INVALID) + { + bCaster = StringToInt(Get2DAString("classes", "SpellCaster", nClass)); + if(bCaster) + { + sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_class_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_class_" + sIndex + "_tooltip", JsonString(" " + sClass)); + if(nClassSelected == nIndex) + { + int nClassLevel = GetLevelByClass(nClass, oAssociate); + string sSpellsGained = Get2DAString("classes", "SpellGainTable", nClass); + int nMaxSpellLevel = StringToInt(Get2DAString(sSpellsGained, "NumSpellLevels", nClassLevel - 1)); + for(nIndexLevel = 0; nIndexLevel <= 9; nIndexLevel++) + { + sIndexLevel = IntToString(nIndexLevel); + if(nIndexLevel < nMaxSpellLevel) + { + if(nIndexLevel == 0) sLevelImage = "ir_cantrips"; + else if(nIndexLevel < 7)sLevelImage = "ir_level" + sIndexLevel; + else sLevelImage = "ir_level789"; + if(nIndexLevel == 0) sLevel = " Cantrips"; + else if(nIndexLevel == 1) sLevel = " First level"; + else if(nIndexLevel == 2) sLevel = " Second level"; + else if(nIndexLevel == 3) sLevel = " Third level"; + else if(nIndexLevel == 4) sLevel = " Fourth level"; + else if(nIndexLevel == 5) sLevel = " Fifth level"; + else if(nIndexLevel == 6) sLevel = " Sixth level"; + else if(nIndexLevel == 7) sLevel = " Seventh level"; + else if(nIndexLevel == 8) sLevel = " Eighth level"; + else if(nIndexLevel == 9) sLevel = " Ninth level"; + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_tooltip", JsonString(" " + sLevel)); + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_image", JsonString(sLevelImage)); + } + else + { + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_event", JsonBool(FALSE)); + } + } + NuiSetBind(oPC, nToken, "btn_level_" + IntToString(nLevelSelected) + "_encouraged", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_class_" + IntToString(nClassSelected) + "_encouraged", JsonBool(TRUE)); + } + } + } + } + // Row 3 Spells + int nSpellSlot, nSpell, nMetamagic; + json jSpell; + json jWidget = JsonArrayGet(jSpells, 2); + nClass = GetClassByPosition(nClassSelected, oAssociate); + string sSpellIcon, sSpellName, sMetaMagicText; + json jSpellArray = JsonArray(); + json jSpell_Icon = JsonArray(); + json jSpell_Text = JsonArray(); + json jMetaMagic_Text = JsonArray(); + // List the spells they know from their spellbook. + if(Get2DAString("classes", "SpellbookRestricted", nClass) == "1") + { + int nMaxSpells = GetKnownSpellCount(oAssociate, nClass, nLevelSelected); + //WriteTimestampedLogEntry("Maxspells: " + IntToString(nMaxSpells) + + // " nClass: " + IntToString(nClass) + + // " nLevelSelected: " + IntToString(nLevelSelected)); + while(nSpellSlot < nMaxSpells) + { + nSpell = GetKnownSpellId(oAssociate, nClass, nLevelSelected, nSpellSlot); + if(nSpell != -1) + { + jSpellArray = JsonArrayInsert(jSpellArray, JsonInt(nSpell)); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + //SendMessageToPC(oPC, "SpellBook: nSpell: " + IntToString(nSpell) + + // " sSpellIcon: " + sSpellIcon + + // " sSpellName: " + sSpellName+ + // " nMaxSpells: " + IntToString(nMaxSpells) + + // " nSpellSlot: " + IntToString(nSpellSlot)); + //sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, nClass, nLevelSelected, nSpellSlot); + //jMetaMagic_Text = JsonArrayInsert(jMetaMagic_Text, JsonString(sMetaMagicText)); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + } + ++nSpellSlot; + } + } + // List the spells from the spells.2da file (they get to choose from them all!). + else + { + string sSpellTableColumn = Get2DAString("classes", "SpellTableColumn", nClass); + int nMaxSpells = Get2DARowCount("spells"); + while(nSpell < nMaxSpells) + { + sLevel = Get2DAString("spells", sSpellTableColumn, nSpell); + if(sLevel != "") + { + if(StringToInt(sLevel) == nLevelSelected) + { + jSpellArray = JsonArrayInsert(jSpellArray, JsonInt(nSpell)); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + } + } + ++nSpell; + } + } + jData = JsonArrayInsert(jData, jSpellArray); + NuiSetUserData(oPC, nToken, jData); + NuiSetBind(oPC, nToken, "icon_spell", jSpell_Icon); + NuiSetBind(oPC, nToken, "text_spell", jSpell_Text); + NuiSetBind(oPC, nToken, "metamagic_text", jMetaMagic_Text); + // Row 4 Spell memorized list label. + // Row 5 Spell memorized List + int nMetaMagic, nDomain; + nIndex = 0; + while(nIndex < nMaxMemorizationSlots) + { + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_memorized_" + sIndex + "_event", JsonBool(TRUE)); + if(GetMemorizedSpellId(oAssociate, nClass, nLevelSelected, nIndex) > -1) + { + nSpell = GetMemorizedSpellId(oAssociate, nClass, nLevelSelected, nIndex); + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + //nMetaMagic = 255; + //nDomain = 0; + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + NuiSetBind(oPC, nToken, "btn_memorized_" + sIndex + "_image", JsonString(sSpellIcon)); + NuiSetBind(oPC, nToken, "btn_memorized_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + IntToString(nLevelSelected) + ")")); + //sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, -1, -1, -1, nMetaMagic, nDomain); + //NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString(sMetaMagicText)); + } + else + { + NuiSetBind(oPC, nToken, "btn_memorized_" + sIndex + "_image", JsonString("ctl_cg_btn_splvl")); + //NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString("")); + NuiSetBind(oPC, nToken, "btn_memorized_" + sIndex + "_event", JsonBool(FALSE)); + } + ++nIndex; + } +} +void ai_CreateSpellKnownNUI(object oPC, object oAssociate) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jRow = JsonArray(); + // Row 1 Classes************************************************************ 414 / 73 + int nClass, bCaster, nIndex; + string sIndex, sClassIcon, sLevelIcon; + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClass = GetClassByPosition(nIndex, oAssociate); + if(nClass != CLASS_TYPE_INVALID) + { + if(StringToInt(Get2DAString("classes", "SpellbookRestricted", nClass))) + { + // This saves the class position in the button id so we can get it later. + sIndex = IntToString(nIndex); + sClassIcon = Get2DAString("classes", "Icon", nClass); + jRow = CreateButtonImage(jRow, sClassIcon, "btn_class_" + sIndex, 35.0f, 35.0f, 0.0, "btn_class_" + sIndex + "_tooltip"); + } + } + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 (Levels) ********************************************************** 414 / 116 + jRow = JsonArray(); + for(nIndex = 0; nIndex <= 9; nIndex++) + { + // This saves the level in the button id so we can get it later. + sIndex = IntToString(nIndex); + jRow = CreateButtonImage(jRow, "", "btn_level_" + sIndex, 35.0f, 35.0f, 0.0, "btn_level_" + sIndex + "_tooltip"); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 (Spell List)******************************************************* 414 / 398 + json jButton = JsonArray(); + jButton = NuiButton(NuiBind("text_spell")); + jButton = NuiId(jButton, "btn_text_spell"); + json jRectangle = NuiRect(4.0, 4.0, 27.0, 27.0); + json jDrawList = JsonArrayInsert(JsonArray(), NuiDrawListImage(JsonBool(TRUE), NuiBind("icon_spell"), jRectangle, JsonInt(NUI_ASPECT_FILL), JsonInt(NUI_HALIGN_CENTER), JsonInt(NUI_VALIGN_MIDDLE))); + //jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + //json jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_text")); + //jDrawList = JsonArrayInsert(jDrawList, jMetaMagic); + jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + json jListTemplate = JsonArrayInsert(JsonArray(), NuiListTemplateCell(jButton, 275.0, FALSE)); + json jInfo = NuiButtonImage(JsonString("gui_cg_qstn_mark")); + jInfo = NuiId(jInfo, "btn_info_spell"); + jListTemplate = JsonArrayInsert(jListTemplate, NuiListTemplateCell(jInfo, 35.0, FALSE)); + jRow = JsonArrayInsert(JsonArray(), NuiHeight(NuiList(jListTemplate, NuiBind("icon_spell"), 35.0), 282.0)); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 (Widget Label)***************************************************** 414 / 426 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + CreateLabel(jRow, "Known Spell List", "lbl_spell_list", 150.0, 20.0, 0, 0, 0.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5 (Memorize slots)*************************************************** 414 / 469 + // Get the class and level selected from the database. + int nClassSelected, nLevelSelected; + json jSpells; + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + // Temporary fix for error! :/ + if(JsonGetLength(jAIData) == 0) + { + ai_CheckAssociateData(oPC, oAssociate, sAssociateType, TRUE); + jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + } + if(JsonGetLength(jAIData) == 9) + { + jSpells = JsonArray(); + jSpells = JsonArrayInsert(jSpells, JsonInt(1)); + jSpells = JsonArrayInsert(jSpells, JsonInt(0)); + jAIData = JsonArrayInsert(jAIData, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + else + { + jSpells = JsonArrayGet(jAIData, 10); + if(JsonGetType(jSpells) == JSON_TYPE_NULL) + { + jSpells = JsonArray(); + jSpells = JsonArrayInsert(jSpells, JsonInt(1)); + jSpells = JsonArrayInsert(jSpells, JsonInt(0)); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + else + { + nClassSelected = JsonGetInt(JsonArrayGet(jSpells, 0)); + nLevelSelected = JsonGetInt(JsonArrayGet(jSpells, 1)); + } + } + // If we left the Quick Use widget on Special Abilities (10) or Items (11) goto level 0 + if(nLevelSelected == 10 || nLevelSelected == 11) + { + nLevelSelected = 0; + jSpells = JsonArraySet(jSpells, 1, JsonInt(0)); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + if(nClassSelected < 1 || nClassSelected > AI_MAX_CLASSES_PER_CHARACTER) nClassSelected = 1; + nClass = GetClassByPosition(nClassSelected, oAssociate); + jRow = JsonArray(); + for(nIndex = 0; nIndex < 10; nIndex++) + { + // This saves the index location of the spell in the list. + sIndex = IntToString(nIndex); + json jButton = NuiButtonImage(NuiBind("btn_known_" + sIndex + "_image")); + jButton = NuiEnabled(jButton, NuiBind("btn_known_" + sIndex + "_event")); + jButton = NuiId(jButton, "btn_known_" + sIndex); + jButton = NuiWidth(NuiHeight(jButton, 35.0), 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind("btn_known_" + sIndex + "_tooltip")); + //json jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + //json jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_" + sIndex + "_text")); + //jDrawList = JsonArrayInsert(JsonArray(), jMetaMagic); + //jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + jRow = JsonArrayInsert(jRow, jButton); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Do the second row. + jRow = JsonArray(); + for(nIndex = 10; nIndex < 20; nIndex++) + { + // This saves the index location of the spell in the list. + sIndex = IntToString(nIndex); + json jButton = NuiButtonImage(NuiBind("btn_known_" + sIndex + "_image")); + jButton = NuiEnabled(jButton, NuiBind("btn_known_" + sIndex + "_event")); + jButton = NuiId(jButton, "btn_known_" + sIndex); + jButton = NuiWidth(NuiHeight(jButton, 35.0), 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind("btn_known_" + sIndex + "_tooltip")); + //json jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + //json jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_" + sIndex + "_text")); + //jDrawList = JsonArrayInsert(JsonArray(), jMetaMagic); + //jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + jRow = JsonArrayInsert(jRow, jButton); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Get the window location to restore it from the database. + float fX, fY; + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + jLocations = JsonObjectGet(jLocations, sAssociateType + AI_SPELL_KNOWN_NUI); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) { fX = -1.0; fY = -1.0; } + else + { + fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + } + string sText, sName = GetName(oAssociate); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + int nToken = SetWindow(oPC, jLayout, sAssociateType + AI_SPELL_KNOWN_NUI, sName + " Spell Known Menu", + fX, fY, 375.0, 539.0 + 12.0, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Set the Layout of the window. + // Save the associate to the nui for use in 0e_nui + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oAssociate))); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Row 1 & 2 Class & Level + int nSpellLevel, nIndexLevel, nMaxSpellLevel, nClassLevel; + string sClass, sLevel, sLevelImage, sIndexLevel, sSpellsGained; + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClass = GetClassByPosition(nIndex, oAssociate); + if(nClass != CLASS_TYPE_INVALID) + { + bCaster = StringToInt(Get2DAString("classes", "SpellbookRestricted", nClass)); + if(bCaster) + { + sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_class_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_class_" + sIndex + "_tooltip", JsonString(" " + sClass)); + if(nClassSelected == nIndex) + { + nClassLevel = GetLevelByClass(nClass, oAssociate); + sSpellsGained = Get2DAString("classes", "SpellGainTable", nClass); + nMaxSpellLevel = StringToInt(Get2DAString(sSpellsGained, "NumSpellLevels", nClassLevel - 1)); + for(nIndexLevel = 0; nIndexLevel <= 9; nIndexLevel++) + { + sIndexLevel = IntToString(nIndexLevel); + if(nIndexLevel < nMaxSpellLevel) + { + if(nIndexLevel == 0) sLevelImage = "ir_cantrips"; + else if(nIndexLevel < 7)sLevelImage = "ir_level" + sIndexLevel; + else sLevelImage = "ir_level789"; + if(nIndexLevel == 0) sLevel = " Cantrips"; + else if(nIndexLevel == 1) sLevel = " First level"; + else if(nIndexLevel == 2) sLevel = " Second level"; + else if(nIndexLevel == 3) sLevel = " Third level"; + else if(nIndexLevel == 4) sLevel = " Fourth level"; + else if(nIndexLevel == 5) sLevel = " Fifth level"; + else if(nIndexLevel == 6) sLevel = " Sixth level"; + else if(nIndexLevel == 7) sLevel = " Seventh level"; + else if(nIndexLevel == 8) sLevel = " Eighth level"; + else if(nIndexLevel == 9) sLevel = " Ninth level"; + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_tooltip", JsonString(" " + sLevel)); + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_image", JsonString(sLevelImage)); + } + else + { + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_event", JsonBool(FALSE)); + } + } + NuiSetBind(oPC, nToken, "btn_level_" + IntToString(nLevelSelected) + "_encouraged", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_class_" + IntToString(nClassSelected) + "_encouraged", JsonBool(TRUE)); + } + } + } + } + // Row 3 Spells + int nSpellSlot, nSpell, nMetamagic; + json jSpell; + json jWidget = JsonArrayGet(jSpells, 2); + nClass = GetClassByPosition(nClassSelected, oAssociate); + string sSpellIcon, sSpellName, sMetaMagicText; + json jSpellArray = JsonArray(); + json jSpell_Icon = JsonArray(); + json jSpell_Text = JsonArray(); + json jMetaMagic_Text = JsonArray(); + // List the spells from the spells.2da file (they get to choose from them all!). + string sSpellTableColumn = Get2DAString("classes", "SpellTableColumn", nClass); + int nMaxSpells = Get2DARowCount("spells"); + while(nSpell < nMaxSpells) + { + sLevel = Get2DAString("spells", sSpellTableColumn, nSpell); + if(sLevel != "") + { + if(StringToInt(sLevel) == nLevelSelected) + { + jSpellArray = JsonArrayInsert(jSpellArray, JsonInt(nSpell)); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + } + } + ++nSpell; + } + jData = JsonArrayInsert(jData, jSpellArray); + NuiSetUserData(oPC, nToken, jData); + NuiSetBind(oPC, nToken, "icon_spell", jSpell_Icon); + NuiSetBind(oPC, nToken, "text_spell", jSpell_Text); + NuiSetBind(oPC, nToken, "metamagic_text", jMetaMagic_Text); + // Row 4 Spell known list label. + // Row 5 Spell known List + int nMetaMagic, nDomain, nMaxKnownSlots; + json jClassList = GetLocalJson(oAssociate, AI_CLASS_LIST_JSON); + if(JsonGetType(jClassList) == JSON_TYPE_NULL) + { + jClassList = ObjectToJson(oAssociate); + jClassList = GffGetList(jClassList, "ClassList"); + SetLocalJson(oAssociate, AI_CLASS_LIST_JSON, jClassList); + } + // Get the correct class array. + nIndex = 0; + json jClass = JsonArrayGet(jClassList, nIndex); + while(JsonGetInt(GffGetInt(jClass, "Class")) != nClass) + { + jClass = JsonArrayGet(jClassList, ++nIndex); + } + json jKnownList = GffGetList(jClass, "KnownList" + IntToString(nLevelSelected)); + string sSpellKnownTable = Get2DAString("classes", "SpellKnownTable", nClass); + if(sSpellKnownTable != "") nMaxKnownSlots = StringToInt(Get2DAString(sSpellKnownTable, "SpellLevel" + IntToString(nLevelSelected), nClassLevel - 1)); + else nMaxKnownSlots = 20; + nIndex = 0; + while(nIndex < 20) + { + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_event", JsonBool(TRUE)); + if(nIndex < nMaxKnownSlots) + { + jSpell = JsonArrayGet(jKnownList, nIndex); + if(JsonGetType(jSpell) == JSON_TYPE_NULL) + { + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_tooltip", JsonString(" Empty known spell slot")); + } + else + { + nSpell = JsonGetInt(GffGetWord(jSpell, "Spell")); + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + //nMetaMagic = 255; + //nDomain = 0; + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_image", JsonString(sSpellIcon)); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + IntToString(nLevelSelected) + ")")); + //sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, -1, -1, -1, nMetaMagic, nDomain); + //NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString(sMetaMagicText)); + } + } + else + { + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_image", JsonString("ctl_cg_btn_splvl")); + //NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString("")); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_event", JsonBool(FALSE)); + } + ++nIndex; + } +} +void ai_CreateDescriptionNUI(object oPC, json jSpell, int nSpell = 0) +{ + // Row 1 ******************************************************************* 500 / 469 + json jRow = CreateImage(JsonArray(), "", "spell_icon", NUI_ASPECT_FIT, NUI_HALIGN_CENTER, NUI_VALIGN_MIDDLE, 40.0, 40.0); + jRow = CreateTextBox(jRow, "spell_text", 380.0, 400.0, FALSE, NUI_SCROLLBARS_Y); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 1 ******************************************************************* 500 / 522 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "OK", "btn_ok", 150.0f, 45.0f); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sName, sIcon, sDescription; + int nFeat, nDescription; + int nClass; + if(nSpell) nClass = 0; + else + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + } + if(nClass == -1) + { + if(nSpell == SPELL_HEALINGKIT) + { + sName = "Healer's Kit"; + sIcon = "isk_heal"; + sDescription = GetStringByStrRef(1720); + } + else + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sIcon = Get2DAString("spells", "IconResRef", nSpell); + nDescription = StringToInt(Get2DAString("spells", "SpellDesc", nSpell)); + if(nDescription) sDescription = GetStringByStrRef(nDescription); + else + { + object oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + sDescription = GetDescription(oItem); + } + } + } + else + { + nFeat = JsonGetInt(JsonArrayGet(jSpell, 5)); + if(nFeat) + { + if(nSpell) + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sIcon = Get2DAString("spells", "IconResRef", nSpell); + } + else + { + sName = GetStringByStrRef(StringToInt(Get2DAString("feat", "FEAT", nFeat))); + sIcon = Get2DAString("feat", "ICON", nFeat); + } + sDescription = GetStringByStrRef(StringToInt(Get2DAString("feat", "DESCRIPTION", nFeat))); + } + else + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sIcon = Get2DAString("spells", "IconResRef", nSpell); + nDescription = StringToInt(Get2DAString("spells", "SpellDesc", nSpell)); + if(nDescription) sDescription = GetStringByStrRef(nDescription); + else + { + object oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + sDescription = GetDescription(oItem); + } + } + } + int nToken = SetWindow(oPC, jLayout, AI_SPELL_DESCRIPTION_NUI, sName, + -1.0, -1.0, 460.0f, 537.0 + 12.0f, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + json jData = JsonArray(); + jData = JsonArrayInsert(jData, JsonString(ObjectToString(oPC))); + NuiSetUserData(oPC, nToken, jData); + // Row 1 + NuiSetBind(oPC, nToken, "spell_icon_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "spell_icon_image", JsonString(sIcon)); + NuiSetBind(oPC, nToken, "spell_text_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "spell_text", JsonString(sDescription)); + // Row 2 + NuiSetBind(oPC, nToken, "btn_ok_event", JsonBool(TRUE)); +} + diff --git a/src/module/nss/0i_menus_dm.nss b/src/module/nss/0i_menus_dm.nss new file mode 100644 index 0000000..a2a2cfc --- /dev/null +++ b/src/module/nss/0i_menus_dm.nss @@ -0,0 +1,1386 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_menus_dm +//////////////////////////////////////////////////////////////////////////////// + Include script for handling NUI menus for DMs. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +#include "0i_associates" +string ai_GetRandomDMTip() +{ + int nRoll = Random(44); + return Get2DAString("ai_messages", "Text", nRoll); +} +void ai_SetDMWidgetButton(object oPlayer, int nButton, int bOn = TRUE) +{ + int nWidgetButtons = GetLocalInt(oPlayer, sDMWidgetButtonVarname); + string sName = ai_RemoveIllegalCharacters(GetName(oPlayer)); + json jButtons = ai_GetCampaignDbJson("buttons", sName, AI_DM_TABLE); + if(nWidgetButtons == 0) nWidgetButtons = JsonGetInt(JsonArrayGet(jButtons, 0)); + if(bOn) nWidgetButtons = nWidgetButtons | nButton; + else nWidgetButtons = nWidgetButtons & ~nButton; + SetLocalInt(oPlayer, sDMWidgetButtonVarname, nWidgetButtons); + jButtons = JsonArraySet(jButtons, 0, JsonInt(nWidgetButtons)); + ai_SetCampaignDbJson("buttons", jButtons, sName, AI_DM_TABLE); +} +int ai_GetDMWidgetButton(object oPlayer, int nButton) +{ + int nWidgetButtons = GetLocalInt(oPlayer, sDMWidgetButtonVarname); + if(nWidgetButtons == 0) + { + string sName = ai_RemoveIllegalCharacters(GetName(oPlayer)); + json jButtons = ai_GetCampaignDbJson("buttons", sName, AI_DM_TABLE); + nWidgetButtons = JsonGetInt(JsonArrayGet(jButtons, 0)); + } + return nWidgetButtons & nButton; +} +void ai_CreateDMWidgetNUI(object oPC) +{ + // Set window to not save until it has been created. + SetLocalInt(oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand(0.5f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + int bAIWidgetLock = ai_GetDMWidgetButton(oPC, BTN_DM_WIDGET_LOCK); + int bCmdGroup1 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP1); + int bCmdGroup2 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP2); + int bCmdGroup3 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP3); + int bCmdGroup4 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP4); + int bCmdGroup5 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP5); + int bCmdGroup6 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP6); + int bCmdCamera = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_CAMERA); + int bCmdInventory = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_INVENTORY); + // Get which buttons are activated. + float fHeight = 92.0f; + if(bAIWidgetLock) fHeight = 59.0f; + float fButtons, fWidth = 86.0f; + // ************************************************************************* Width / Height + // Row 1 (buttons)********************************************************** + // Setup the main associate button to use their portrait. + json jButton = NuiEnabled(NuiId (NuiButtonImage(NuiBind("btn_open_main_image")), "btn_open_main"), NuiBind("btn_open_main_event")); + jButton = NuiWidth(jButton, 35.0); + jButton = NuiHeight(jButton, 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind ("btn_open_main_tooltip")); + jButton = NuiImageRegion(jButton, NuiRect(0.0, 0.0, 32.0, 35.0)); + json jRow = JsonArrayInsert(JsonArray(), jButton); + if(bCmdGroup1) + { + jRow = CreateButtonImage(jRow, "ir_level1", "btn_cmd_group1", 35.0f, 35.0f, 0.0, "btn_cmd_group1_tooltip"); + fButtons += 1.0; + } + if(bCmdGroup2) + { + jRow = CreateButtonImage(jRow, "ir_level2", "btn_cmd_group2", 35.0f, 35.0f, 0.0, "btn_cmd_group2_tooltip"); + fButtons += 1.0; + } + if(bCmdGroup3) + { + jRow = CreateButtonImage(jRow, "ir_level3", "btn_cmd_group3", 35.0f, 35.0f, 0.0, "btn_cmd_group3_tooltip"); + fButtons += 1.0; + } + if(bCmdGroup4) + { + jRow = CreateButtonImage(jRow, "ir_level4", "btn_cmd_group4", 35.0f, 35.0f, 0.0, "btn_cmd_group4_tooltip"); + fButtons += 1.0; + } + if(bCmdGroup5) + { + jRow = CreateButtonImage(jRow, "ir_level5", "btn_cmd_group5", 35.0f, 35.0f, 0.0, "btn_cmd_group5_tooltip"); + fButtons += 1.0; + } + if(bCmdGroup6) + { + jRow = CreateButtonImage(jRow, "ir_level6", "btn_cmd_group6", 35.0f, 35.0f, 0.0, "btn_cmd_group6_tooltip"); + fButtons += 1.0; + } + if(bCmdCamera) + { + jRow = CreateButtonImage(jRow, "ir_examine", "btn_camera", 35.0f, 35.0f, 0.0, "btn_camera_tooltip"); + fButtons += 1.0; + } + if(bCmdInventory) + { + jRow = CreateButtonImage(jRow, "ir_pickup", "btn_inventory", 35.0f, 35.0f, 0.0, "btn_inventory_tooltip"); + fButtons += 1.0; + } + // Plug in buttons ********************************************************* + int nIndex, bWidget; + string sButton, sIcon; + json jPlugins = ai_UpdatePluginsForDM(oPC); + json jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + bWidget = JsonGetInt(JsonArrayGet(jPlugin, 1)); + if(bWidget) + { + sIcon = JsonGetString(JsonArrayGet(jPlugin, 3)); + sButton = IntToString(nIndex); + jRow = CreateButtonImage(jRow, sIcon, "btn_exe_plugin_" + sButton, 35.0f, 35.0f, 0.0, "btn_exe_plugin_" + sButton + "_tooltip"); + fButtons += 1.0; + } + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + if(fButtons > 1.0f) fWidth = fWidth + ((fButtons - 1.0) * 39.0f); + // Add the row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Get the window location to restore it from the database. + string sName = ai_RemoveIllegalCharacters(GetName(oPC)); + json jLocations = ai_GetCampaignDbJson("locations", sName, AI_DM_TABLE); + jLocations = JsonObjectGet(jLocations, "dm" + AI_WIDGET_NUI); + float fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + float fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + if(bAIWidgetLock) + { + fX = fX + 4.0f; + fY = fY + 37.0f; + } + // Set the layout of the window. + json jLayout = NuiCol(jCol); + int nToken; + string sHeal, sText, sRange; + string sDisplayName = GetName(oPC); + if(GetStringRight(sDisplayName, 1) == "s") sDisplayName = sDisplayName + "'"; + else sDisplayName = sDisplayName + "'s"; + if(bAIWidgetLock) nToken = SetWindow(oPC, jLayout, "dm" + AI_WIDGET_NUI, sDisplayName + " Widget", fX, fY, fWidth + 8.0f, fHeight, FALSE, FALSE, FALSE, TRUE, FALSE, "0e_nui_dm"); + else nToken = SetWindow(oPC, jLayout, "dm" + AI_WIDGET_NUI, sDisplayName + " Widget", fX, fY, fWidth + 12.0f, fHeight, FALSE, FALSE, FALSE, TRUE, TRUE, "0e_nui_dm"); + // Set event watches for window inspector and save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set the buttons to show events. + NuiSetBind(oPC, nToken, "btn_open_main_image", JsonString(GetPortraitResRef(oPC) + "s")); + NuiSetBind(oPC, nToken, "btn_open_main_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_open_main_tooltip", JsonString(" " + sDisplayName + " widget menu")); + string sUUID, sText2, sSpeed; + string sAction = " (Left Action/Right Add)"; + if(bCmdGroup1) + { + NuiSetBind(oPC, nToken, "btn_cmd_group1_event", JsonBool(TRUE)); + json jGroup = GetLocalJson(oPC, "DM_GROUP1"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + string sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 1"; sText2 = sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group1_tooltip", JsonString(" " + sText + sText2)); + } + if(bCmdGroup2) + { + NuiSetBind(oPC, nToken, "btn_cmd_group2_event", JsonBool(TRUE)); + json jGroup = GetLocalJson(oPC, "DM_GROUP2"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + string sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 2"; sText2 = sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group2_tooltip", JsonString(" " + sText + sText2)); + } + if(bCmdGroup3) + { + NuiSetBind(oPC, nToken, "btn_cmd_group3_event", JsonBool(TRUE)); + json jGroup = GetLocalJson(oPC, "DM_GROUP3"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + string sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 3"; sText2 = sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group3_tooltip", JsonString(" " + sText + sText2)); + } + if(bCmdGroup4) + { + NuiSetBind(oPC, nToken, "btn_cmd_group4_event", JsonBool(TRUE)); + json jGroup = GetLocalJson(oPC, "DM_GROUP4"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + string sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 4"; sText2 = sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group4_tooltip", JsonString(" " + sText + sText2)); + } + if(bCmdGroup5) + { + NuiSetBind(oPC, nToken, "btn_cmd_group5_event", JsonBool(TRUE)); + json jGroup = GetLocalJson(oPC, "DM_GROUP5"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + string sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 5"; sText2 = sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group5_tooltip", JsonString(" " + sText + sText2)); + } + if(bCmdGroup6) + { + NuiSetBind(oPC, nToken, "btn_cmd_group6_event", JsonBool(TRUE)); + json jGroup = GetLocalJson(oPC, "DM_GROUP6"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + string sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 6"; sText2 = sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group6_tooltip", JsonString(" " + sText + sText2)); + } + if(bCmdCamera) + { + NuiSetBind(oPC, nToken, "btn_camera_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_camera_tooltip", JsonString(" Select new object to have the camera view.")); + } + if(bCmdInventory) + { + NuiSetBind(oPC, nToken, "btn_inventory_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_inventory_tooltip", JsonString(" Open selected creatures inventory.")); + } + /*if(bSearch) + { + NuiSetBind(oPC, nToken, "btn_search_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_SEARCH)) sText = " Search On"; + else sText = " Search Off"; + NuiSetBind(oPC, nToken, "btn_search_tooltip", JsonString(sText)); + } + if(bStealth) + { + NuiSetBind(oPC, nToken, "btn_stealth_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_STEALTH)) sText = " Stealth On"; + else sText = " Stealth Off"; + NuiSetBind(oPC, nToken, "btn_stealth_tooltip", JsonString(sText)); + } */ + nIndex = 0; + string sScript; + jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + bWidget = JsonGetInt(JsonArrayGet(jPlugin, 1)); + if(bWidget) + { + sButton = IntToString(nIndex); + sScript = JsonGetString(JsonArrayGet(jPlugin, 0)); + if(ResManGetAliasFor(sScript, RESTYPE_NCS) == "") + { + sText = " " + sScript + " not found by ResMan!"; + } + else sName = " " + JsonGetString(JsonArrayGet(jPlugin, 2)); + NuiSetBind(oPC, nToken, "btn_exe_plugin_" + sButton + "_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_exe_plugin_" + sButton + "_tooltip", JsonString(sName)); + } + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } +} +void ai_CreateDMOptionsNUI(object oPC) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + int nMonsterAI = (ResManGetAliasFor("ai_default", RESTYPE_NCS) != ""); + int nAssociateAI = (ResManGetAliasFor("ai_a_default", RESTYPE_NCS) != ""); + string sText = " [Single player]"; + if(AI_SERVER) sText = " [Server]"; + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 500 / 73 + json jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, PHILOS_VERSION + sText, "lbl_version ", 510.0f, 20.0f, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 500 / 101 + jRow = CreateLabel(JsonArray(), "", "lbl_ai_info", 510.0f, 20.0f, NUI_HALIGN_CENTER); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 ******************************************************************* 500 / 129 + jRow = CreateButton(JsonArray(), "Plugin Manager", "btn_plugin_manager", 160.0f, 20.0f, -1.0, "btn_plugin_manager_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Widget Manager", "btn_widget_manager", 160.0f, 20.0f, -1.0, "btn_widget_manager_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 ******************************************************************* 500 / 157 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, "SERVER RULES", "lbl_ai_rules", 100.0f, 20.0f, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + float fHeight = 112.0; + // Row 5 ******************************************************************* 500 / --- (28) + // Make the AI options a Group. + json jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_max_henchman", 2, FALSE, 30.0f, 20.0f, "txt_max_henchman_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "Max number of henchmen that is allowed in your party.", "lbl_max_hench", 416.0f, 20.0f, NUI_HALIGN_LEFT, 0, -1.0, "txt_max_henchman_tooltip"); + json jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_xp_scale", 3, FALSE, 40.0f, 20.0f, "txt_xp_scale_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "Modules experience scale.", "lbl_xp_scale", 175.0f, 20.0f, NUI_HALIGN_LEFT, 0, -1.0, "txt_xp_scale_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, " scale to party.", "chbx_party_scale", 130.0, 20.0, "chbx_party_scale_tooltip"); + jGroupRow = CreateButton(jGroupRow, "Default", "btn_default_xp", 70.0f, 20.0f, -1.0, "btn_default_xp_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + fHeight += 112.0; + if(nMonsterAI || nAssociateAI) + { + jGroupRow = CreateCheckBox(JsonArray(), " Creatures will use advanced combat movement.", "chbx_advanced_movement", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Use item level restrictions for creatures [Default is off].", "chbx_ilr", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Creatures can use the skill Use Magic Device.", "chbx_umd", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Creatures can use Healing kits.", "chbx_use_healingkits", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Moral checks, wounded creatures may flee during combat.", "chbx_moral", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), " Spells the AI will not use:", "lbl_restrict_spells", 190.0, 20.0, NUI_HALIGN_LEFT); + jGroupRow = CreateCheckBox(jGroupRow, " Darkness", "chbx_darkness", 90.0, 20.0, "chbx_darkness_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, " Dispels", "chbx_dispels", 90.0, 20.0, "chbx_dispels_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, " Time Stop", "chbx_timestop", 90.0, 20.0, "chbx_timestop_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + fHeight += 168.0; + } + if(nMonsterAI) + { + jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_ai_difficulty", 3, FALSE, 40.0f, 20.0f, "txt_ai_difficulty_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "% chance monsters will attack the weakest target.", "lbl_ai_difficulty", 406.0f, 20.0f, NUI_HALIGN_LEFT, 0, -1.0, "txt_ai_difficulty_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_perception_distance", 2, FALSE, 35.0f, 20.0f, "txt_perception_distance_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "meters is the distance a monster can respond to allies.", "lbl_perception_distance", 411.0f, 20.0f, NUI_HALIGN_LEFT, 0, 0.0, "txt_perception_distance_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can prebuff before combat starts.", "chbx_buff_monsters", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can use summons before combat starts.", "chbx_buff_summons", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can use tactics (ambush, defensive, flanker, etc).", "chbx_ambush_monsters", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "Add ", "lbl_inc_enc", 30.0, 20.0, NUI_HALIGN_LEFT, 0, -1.0); + jGroupRow = CreateTextEditBox(jGroupRow, "sPlaceHolder", "txt_inc_enc", 4, FALSE, 55.0f, 20.0f, "txt_inc_enc_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "monsters per spawned encounter monster.", "lbl_inc_enc", 357.0, 20.0, NUI_HALIGN_LEFT, NUI_VALIGN_MIDDLE, 0.0, "txt_inc_enc_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_inc_hp", 3, FALSE, 40.0f, 20.0f, "txt_inc_hp_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "% increase in all monster's hitpoints.", "lbl_inc_hp", 406.0, 20.0, NUI_HALIGN_LEFT); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "***** WARNING! The options below may break the module! *****", "lbl_warning", 450.0f, 20.0f, NUI_HALIGN_LEFT, 0, 0.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can wander upto ", "chbx_wander", 220.0, 20.0, "chbx_warning_tooltip"); + jGroupRow = CreateTextEditBox(jGroupRow, "sPlaceHolder", "txt_wander_distance", 2, FALSE, 35.0f, 20.0f, "chbx_warning_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "meters and ", "lbl_wander_distance", 80.0f, 20.0f, NUI_HALIGN_LEFT, NUI_VALIGN_MIDDLE, 0.0, "chbx_warning_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, "open doors.", "chbx_open_doors", 100.0, 20.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can summon companions.", "chbx_companions", 450.0, 20.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Summoned associates to remain after masters death.", "chbx_perm_assoc", 450.0, 20.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Make enemy corpses remain.", "chbx_corpses_stay", 450.0, 20.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "", "lbl_perc_dist", 450.0f, 20.0f, NUI_HALIGN_LEFT, 0, 0.0, "lbl_perc_dist_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + fHeight += 364.0; + } + jRow = JsonArrayInsert(JsonArray(), NuiGroup(NuiCol(jGroupCol))); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Get the window location to restore it from the database. + string sName = ai_RemoveIllegalCharacters(GetName(oPC)); + json jLocations = ai_GetCampaignDbJson("locations", sName, AI_DM_TABLE); + jLocations = JsonObjectGet(jLocations, "dm" + AI_MAIN_NUI); + float fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + float fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + sName = GetName(oPC); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, "dm" + AI_MAIN_NUI, sName + " PEPS Main Menu", + fX, fY, 534.0f, fHeight, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui_dm"); + // Save the associate to the nui for use in 0e_nui + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oPC))); + NuiSetUserData(oPC, nToken, jData); + object oModule = GetModule(); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set all binds, events, and watches. + // Row 1 - Version label. + // Row 2 + int nUsing; + // Check the monster AI. + string sLocation = ResManGetAliasFor("ai_default", RESTYPE_NCS); + if(sLocation != "") + { + nUsing = TRUE; + string sLocation = ResManGetAliasFor("nw_c2_default1", RESTYPE_NCS); + if(sLocation != "OVERRIDE:" && sLocation != "PATCH:peps" && sLocation != "DEVELOPMENT:") nUsing = FALSE; + if(nUsing) sText = "Monster AI working"; + else sText = "Monster AI not working"; + } + else sText = "Monster AI not loaded"; + // Check the associate AI. + sLocation = ResManGetAliasFor("ai_a_default", RESTYPE_NCS); + if(sLocation != "") + { + nUsing = TRUE; + string sLocation = ResManGetAliasFor("nw_ch_ac1", RESTYPE_NCS); + if(sLocation != "OVERRIDE:" && sLocation != "PATCH:peps" && sLocation != "DEVELOPMENT:") nUsing = FALSE; + if(nUsing) sText += ", Associate AI working"; + else sText += ", Associate AI not working"; + } + else sText += ", Associate AI not loaded"; + // Check for PRC. + sLocation = ResManGetAliasFor("prc_ai_fam_percp", RESTYPE_NCS); + if(sLocation != "") sText += ", PRC loaded."; + else + { + // Check the player AI. + sLocation = ResManGetAliasFor("xx_pc_1_hb", RESTYPE_NCS); + if(sLocation != "") sText += ", Player AI loaded."; + else sText += ", Player AI not loaded."; + } + NuiSetBind(oPC, nToken, "lbl_ai_info_label", JsonString(sText)); + // Row 3 + NuiSetBind(oPC, nToken, "btn_plugin_manager_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_plugin_manager_tooltip", JsonString(" Manages external executable scripts.")); + NuiSetBind(oPC, nToken, "btn_widget_manager_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_manager_tooltip", JsonString(" Manages widgets the players have access to.")); + // Row 3 Label for AI RULES + // Row 4 + NuiSetBind(oPC, nToken, "txt_max_henchman_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_max_henchman", JsonString(IntToString(GetLocalInt(oModule, AI_RULE_MAX_HENCHMAN)))); + NuiSetBindWatch (oPC, nToken, "txt_max_henchman", TRUE); + NuiSetBind(oPC, nToken, "txt_max_henchman_tooltip", JsonString(" Set max number of henchman allowed (1-12).")); + NuiSetBind(oPC, nToken, "txt_xp_scale_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_xp_scale", JsonString(IntToString(GetModuleXPScale()))); + NuiSetBindWatch (oPC, nToken, "txt_xp_scale", TRUE); + NuiSetBind(oPC, nToken, "txt_xp_scale_tooltip", JsonString(" Set the modules XP scale (0 - 200) Normal D&D is 10.")); + NuiSetBind(oPC, nToken, "chbx_party_scale_check", JsonBool(GetLocalInt(oModule, AI_RULE_PARTY_SCALE))); + NuiSetBindWatch(oPC, nToken, "chbx_party_scale_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_party_scale_event", JsonBool(TRUE)); + sText = IntToString(GetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP)); + NuiSetBind(oPC, nToken, "chbx_party_scale_tooltip", JsonString(" PEPS adjusts your XP based on party size from (" + sText + ").")); + NuiSetBind(oPC, nToken, "btn_default_xp_event", JsonBool(TRUE)); + sText = IntToString(GetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE)); + NuiSetBind(oPC, nToken, "btn_default_xp_tooltip", JsonString(" Reset the Modules XP to (" + sText + ").")); + if(nMonsterAI) + { + NuiSetBind(oPC, nToken, "txt_ai_difficulty_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_ai_difficulty", JsonString(IntToString(GetLocalInt(oModule, AI_RULE_AI_DIFFICULTY)))); + NuiSetBindWatch(oPC, nToken, "txt_ai_difficulty", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_monsters_check", JsonBool(GetLocalInt(oModule, AI_RULE_BUFF_MONSTERS))); + NuiSetBindWatch(oPC, nToken, "chbx_buff_monsters_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_monsters_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_buff_summons_check", JsonBool(GetLocalInt(oModule, AI_RULE_PRESUMMON))); + NuiSetBindWatch(oPC, nToken, "chbx_buff_summons_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_summons_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_ambush_monsters_check", JsonBool(GetLocalInt(oModule, AI_RULE_AMBUSH))); + NuiSetBindWatch(oPC, nToken, "chbx_ambush_monsters_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ambush_monsters_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_companions_check", JsonBool(GetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS))); + NuiSetBindWatch(oPC, nToken, "chbx_companions_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_companions_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_companions_tooltip", JsonString(" ** This will break some modules! ** See Readme for issues!")); + NuiSetBind(oPC, nToken, "chbx_perm_assoc_check", JsonBool(GetLocalInt(oModule, AI_RULE_PERM_ASSOC))); + NuiSetBindWatch(oPC, nToken, "chbx_perm_assoc_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_perm_assoc_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_corpses_stay_check", JsonBool(GetLocalInt(oModule, AI_RULE_CORPSES_STAY))); + NuiSetBindWatch(oPC, nToken, "chbx_corpses_stay_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_corpses_stay_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_corpses_stay_tooltip", JsonString(" ** This will break some modules! ** See Readme for issues!")); + NuiSetBind(oPC, nToken, "txt_perception_distance_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_perception_distance", JsonString(FloatToString(GetLocalFloat(oModule, AI_RULE_PERCEPTION_DISTANCE), 0, 0))); + NuiSetBindWatch(oPC, nToken, "txt_perception_distance", TRUE); + NuiSetBind(oPC, nToken, "txt_perception_distance_tooltip", JsonString(" Range [10 to 60 meters] from the player.")); + NuiSetBindWatch(oPC, nToken, "lbl_perc_dist", TRUE); + int nPercDist = GetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE); + if(nPercDist < 8 || nPercDist > 11) + { + nPercDist = 11; + SetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE, 11); + } + if(nPercDist == 8) sText = " Monster perception: Short [10 Sight / 10 Listen]"; + else if(nPercDist == 9) sText = " Monster perception: Medium [20 Sight / 20 Listen]"; + else if(nPercDist == 10) sText = " Monster perception: Long [35 Sight / 20 Listen]"; + else sText = " Monster perception: Default [Monster's default values]"; + NuiSetBind(oPC, nToken, "lbl_perc_dist_label", JsonString(sText)); + NuiSetBind(oPC, nToken, "lbl_perc_dist_tooltip", JsonString(" Use the mouse wheel to change values.")); + int bWander = GetLocalInt(oModule, AI_RULE_WANDER); + NuiSetBind(oPC, nToken, "chbx_wander_check", JsonBool(bWander)); + NuiSetBindWatch(oPC, nToken, "chbx_wander_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_wander_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_wander_distance_event", JsonBool(bWander)); + NuiSetBind(oPC, nToken, "txt_wander_distance", JsonString(FloatToString(GetLocalFloat(oModule, AI_RULE_WANDER_DISTANCE), 0, 0))); + NuiSetBindWatch(oPC, nToken, "txt_wander_distance", TRUE); + NuiSetBind(oPC, nToken, "chbx_wander_tooltip", JsonString(" ** This will break some modules! ** See Readme for issues!")); + NuiSetBind(oPC, nToken, "chbx_open_doors_check", JsonBool(GetLocalInt(oModule, AI_RULE_OPEN_DOORS))); + NuiSetBindWatch(oPC, nToken, "chbx_open_doors_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_open_doors_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_open_doors_tooltip", JsonString(" This allows monsters to open doors to hunt you down!")); + NuiSetBind(oPC, nToken, "txt_inc_enc_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_inc_enc_tooltip", JsonString(" Spawns one extra monster per counter above 1. Adds value to counter per encounter monster spawned.")); + NuiSetBind(oPC, nToken, "txt_inc_enc", JsonString(FloatToString(GetLocalFloat(oModule, AI_INCREASE_ENC_MONSTERS), 0, 2))); + NuiSetBindWatch(oPC, nToken, "txt_inc_enc", TRUE); + NuiSetBind(oPC, nToken, "txt_inc_hp_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_inc_hp", JsonString(IntToString(GetLocalInt(oModule, AI_INCREASE_MONSTERS_HP)))); + NuiSetBindWatch(oPC, nToken, "txt_inc_hp", TRUE); + } + if(nMonsterAI || nAssociateAI) + { + NuiSetBind(oPC, nToken, "chbx_moral_check", JsonBool(GetLocalInt(oModule, AI_RULE_MORAL_CHECKS))); + NuiSetBindWatch (oPC, nToken, "chbx_moral_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_moral_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_advanced_movement_check", JsonBool(GetLocalInt(oModule, AI_RULE_ADVANCED_MOVEMENT))); + NuiSetBindWatch (oPC, nToken, "chbx_advanced_movement_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_advanced_movement_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_ilr_check", JsonBool(GetLocalInt(oModule, AI_RULE_ILR))); + NuiSetBindWatch (oPC, nToken, "chbx_ilr_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ilr_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_umd_check", JsonBool(GetLocalInt(oModule, AI_RULE_ALLOW_UMD))); + NuiSetBindWatch (oPC, nToken, "chbx_umd_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_umd_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_use_healingkits_check", JsonBool(GetLocalInt(oModule, AI_RULE_HEALERSKITS))); + NuiSetBindWatch (oPC, nToken, "chbx_use_healingkits_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_use_healingkits_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_darkness_check", JsonBool(ai_SpellRestricted(SPELL_DARKNESS))); + NuiSetBindWatch (oPC, nToken, "chbx_darkness_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_darkness_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_darkness_tooltip", JsonString(" AI will not use the Darkness spell in combat.")); + NuiSetBind(oPC, nToken, "chbx_dispels_check", JsonBool(ai_SpellRestricted(SPELL_DISPEL_MAGIC))); + NuiSetBindWatch (oPC, nToken, "chbx_dispels_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_dispels_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_dispels_tooltip", JsonString(" AI will not use any of the Dispel spells in combat.")); + NuiSetBind(oPC, nToken, "chbx_timestop_check", JsonBool(ai_SpellRestricted(SPELL_TIME_STOP))); + NuiSetBindWatch (oPC, nToken, "chbx_timestop_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_timestop_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_timestop_tooltip", JsonString(" AI will not use the Time Stop spell in combat.")); + } +} +void ai_CreateDMCommandNUI(object oPC) +{ + SetLocalInt(oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand(0.5f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 500 / 73 + json jRow = CreateButtonSelect(JsonArray(), "Lock Widget", "btn_widget_lock", 200.0, 20.0, "btn_widget_lock_tooltip"); + jRow = CreateLabel(jRow, "", "blank_label_1", 25.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Main Menu", "btn_main_menu", 200.0, 20.0, -1.0, "btn_main_menu_tooltip"); + jRow = CreateLabel(jRow, "", "blank_label_2", 25.0, 20.0); + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 500 / 101 + jRow = CreateButton(JsonArray(), "", "btn_cmd_group1", 200.0, 20.0, -1.0, "btn_cmd_group1_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_group1", 25.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "", "btn_cmd_group2", 200.0, 20.0, -1.0, "btn_cmd_group2_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_group2", 25.0, 20.0); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 ******************************************************************* 500 / 129 + jRow = CreateButton(JsonArray(), "", "btn_cmd_group3", 200.0, 20.0, -1.0, "btn_cmd_group3_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_group3", 25.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "", "btn_cmd_group4", 200.0, 20.0, -1.0, "btn_cmd_group4_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_group4", 25.0, 20.0); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 ******************************************************************* 500 / 157 + jRow = CreateButton(JsonArray(), "", "btn_cmd_group5", 200.0, 20.0, -1.0, "btn_cmd_group5_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_group5", 25.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "", "btn_cmd_group6", 200.0, 20.0, -1.0, "btn_cmd_group6_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_group6", 25.0, 20.0); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + float fHeight = 157.0; + // Row 5 ******************************************************************* 500 / --- + jRow = CreateButton(JsonArray(), "Toggle Camera Focus", "btn_camera", 200.0, 20.0, -1.0, "btn_camera_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_camera", 25.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Open/Close Inventory", "btn_inventory", 200.0, 20.0, -1.0, "btn_inventory_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_inventory", 25.0, 20.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + // Row 6+ ****************************************************************** 500 / --- + json jDMPlugins = ai_UpdatePluginsForDM(oPC); + // Set the plugins the dm can use. + int nIndex; + string sButton, sName; + json jPlugin = JsonArrayGet(jDMPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + sName = JsonGetString(JsonArrayGet(jPlugin, 2)); + jRow = CreateButton(JsonArray(), sName, "btn_plugin_" + sButton, 200.0f, 20.0f, -1.0, "btn_plugin_" + sButton + "_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_plugin_" + sButton, 25.0, 20.0, "chbx_plugin_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jPlugin = JsonArrayGet(jDMPlugins, ++nIndex); + if(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + sName = JsonGetString(JsonArrayGet(jPlugin, 2)); + jRow = CreateButton(jRow, sName, "btn_plugin_" + sButton, 200.0f, 20.0f, -1.0, "btn_plugin_" + sButton + "_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_plugin_" + sButton, 25.0, 20.0, "chbx_plugin_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + else + { + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + break; + } + jPlugin = JsonArrayGet(jDMPlugins, ++nIndex); + } + // Row 7 ****************************************************************** 500 / --- + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, "", "lbl_info_1", 475.0, 20.0, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + // Get the window location to restore it from the database. + sName = ai_RemoveIllegalCharacters(GetName(oPC)); + json jLocations = ai_GetCampaignDbJson("locations", sName, AI_DM_TABLE); + jLocations = JsonObjectGet(jLocations, "dm" + AI_COMMAND_NUI); + float fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + float fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sDMName = GetName(oPC); + if(GetStringRight(sDMName, 1) == "s") sDMName = sDMName + "'"; + else sDMName = sDMName + "'s"; + int nToken = SetWindow(oPC, jLayout, "dm" + AI_COMMAND_NUI, sDMName + " Command Menu", + fX, fY, 500.0, fHeight + 12.0, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui_dm"); + // Get which buttons are activated. + int bAIWidgetLock = ai_GetDMWidgetButton(oPC, BTN_DM_WIDGET_LOCK); + int bCmdGroup1 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP1); + int bCmdGroup2 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP2); + int bCmdGroup3 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP3); + int bCmdGroup4 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP4); + int bCmdGroup5 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP5); + int bCmdGroup6 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP6); + int bCmdCamera = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_CAMERA); + int bCmdInventory = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_INVENTORY); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set all binds, events, and watches. + // Row 1 + NuiSetBind(oPC, nToken, "btn_widget_lock_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_lock", JsonBool(bAIWidgetLock)); + NuiSetBind(oPC, nToken, "btn_widget_lock_tooltip", JsonString( + " Locks widget to the current location.")); + NuiSetBind(oPC, nToken, "btn_main_menu_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_main_menu", JsonInt(TRUE)); + NuiSetBind(oPC, nToken, "btn_main_menu_tooltip", JsonString(" Server menu options")); + NuiSetBind(oPC, nToken, "btn_group_options_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_group_options", JsonInt(TRUE)); + //NuiSetBind(oPC, nToken, "btn_empty_button_event", JsonBool (TRUE)); + //NuiSetBind(oPC, nToken, "btn_empty_button", JsonInt(TRUE)); + //sText = " Copy AI and command settings for one creature to others."; + //NuiSetBind(oPC, nToken, "btn_empty_button_tooltip", JsonString(sText)); + // Row 2 + NuiSetBind(oPC, nToken, "chbx_cmd_group1_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_cmd_group1_check", JsonBool (bCmdGroup1)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_group1_check", TRUE); + NuiSetBind(oPC, nToken, "btn_cmd_group1_event", JsonBool (TRUE)); + string sText, sText2, sSpeed; + string sAction = " (Left Action/Right Add)"; + json jGroup = GetLocalJson(oPC, "DM_GROUP1"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + string sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 1"; sText2 = sText + sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sText + sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group1_label", JsonString(sText)); + NuiSetBind(oPC, nToken, "btn_cmd_group1_tooltip", JsonString(" " + sText2)); + NuiSetBind(oPC, nToken, "chbx_cmd_group2_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_cmd_group2_check", JsonBool (bCmdGroup2)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_group2_check", TRUE); + NuiSetBind(oPC, nToken, "btn_cmd_group2_event", JsonBool (TRUE)); + jGroup = GetLocalJson(oPC, "DM_GROUP2"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 2"; sText2 = sText + sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sText + sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group2_label", JsonString(sText)); + NuiSetBind(oPC, nToken, "btn_cmd_group2_tooltip", JsonString(" " + sText2)); + // Row 3 + NuiSetBind(oPC, nToken, "chbx_cmd_group3_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_cmd_group3_check", JsonBool (bCmdGroup3)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_group3_check", TRUE); + NuiSetBind(oPC, nToken, "btn_cmd_group3_event", JsonBool (TRUE)); + jGroup = GetLocalJson(oPC, "DM_GROUP3"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 3"; sText2 = sText + sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sText + sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group3_label", JsonString(sText)); + NuiSetBind(oPC, nToken, "btn_cmd_group3_tooltip", JsonString(" " + sText2)); + NuiSetBind(oPC, nToken, "chbx_cmd_group4_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_cmd_group4_check", JsonBool (bCmdGroup4)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_group4_check", TRUE); + NuiSetBind(oPC, nToken, "btn_cmd_group4_event", JsonBool (TRUE)); + jGroup = GetLocalJson(oPC, "DM_GROUP4"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 4"; sText2 = sText + sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sText + sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group4_label", JsonString(sText)); + NuiSetBind(oPC, nToken, "btn_cmd_group4_tooltip", JsonString(" " + sText2)); + // Row 4 + NuiSetBind(oPC, nToken, "chbx_cmd_group5_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_cmd_group5_check", JsonBool (bCmdGroup5)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_group5_check", TRUE); + NuiSetBind(oPC, nToken, "btn_cmd_group5_event", JsonBool (TRUE)); + jGroup = GetLocalJson(oPC, "DM_GROUP5"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 5"; sText2 = sText + sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sText + sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group5_label", JsonString(sText)); + NuiSetBind(oPC, nToken, "btn_cmd_group5_tooltip", JsonString(" " + sText2)); + NuiSetBind(oPC, nToken, "chbx_cmd_group6_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_cmd_group6_check", JsonBool (bCmdGroup6)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_group6_check", TRUE); + NuiSetBind(oPC, nToken, "btn_cmd_group6_event", JsonBool (TRUE)); + jGroup = GetLocalJson(oPC, "DM_GROUP6"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 6"; sText2 = sText + sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sText + sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group6_label", JsonString(sText)); + NuiSetBind(oPC, nToken, "btn_cmd_group6_tooltip", JsonString(" " + sText2)); + // Row 5 + NuiSetBind(oPC, nToken, "chbx_camera_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_camera_check", JsonBool (bCmdCamera)); + NuiSetBindWatch (oPC, nToken, "chbx_camera_check", TRUE); + NuiSetBind(oPC, nToken, "btn_camera_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_camera_tooltip", JsonString ( + " Toggle camera view for " + sDMName)); + NuiSetBind(oPC, nToken, "chbx_inventory_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_inventory_check", JsonBool (bCmdInventory)); + NuiSetBindWatch (oPC, nToken, "chbx_inventory_check", TRUE); + NuiSetBind(oPC, nToken, "btn_inventory_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_inventory_tooltip", JsonString ( + " Open " + sDMName + " inventory")); + // Row 6+ + nIndex = 0; + int bWidget; + jPlugin = JsonArrayGet(jDMPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_plugin_" + sButton + "_event", JsonBool(TRUE)); + bWidget = JsonGetInt(JsonArrayGet(jPlugin, 1)); + NuiSetBind(oPC, nToken, "chbx_plugin_" + sButton + "_check", JsonBool(bWidget)); + NuiSetBindWatch (oPC, nToken, "chbx_plugin_" + sButton + "_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_plugin_" + sButton + "_event", JsonBool(TRUE)); + sText = " " + JsonGetString(JsonArrayGet(jPlugin, 2)); + NuiSetBind(oPC, nToken, "btn_plugin_" + sButton + "_tooltip", JsonString(sText)); + jPlugin = JsonArrayGet(jDMPlugins, ++nIndex); + } + NuiSetBind(oPC, nToken, "chbx_plugin_tooltip", JsonString(" Adds the plugin to your widget.")); + // Row 7 + sText = ai_GetRandomDMTip(); + NuiSetBind(oPC, nToken, "lbl_info_1_label", JsonString(sText)); +} +void ai_CreateDMPluginManagerNUI(object oPC) +{ + SetLocalInt(oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand(0.5f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + // Row 1 ******************************************************************* 500 / 73 + json jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Load All Plugins", "btn_load_plugins", 150.0f, 20.0f, -1.0, "btn_load_plugins_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Check All", "btn_check_plugins", 150.0f, 20.0f, -1.0, "btn_check_plugins_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Clear All", "btn_clear_plugins", 150.0f, 20.0f, -1.0, "btn_clear_plugins_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 500 / 101 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Add Plugin", "btn_add_plugin", 150.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateTextEditBox(jRow, "sPlaceHolder", "txt_plugin", 16, FALSE, 310.0f, 20.0f, "txt_plugin_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + float fHeight = 101.0; + // Row 3+ ****************************************************************** 500 / --- + json jPlugins = ai_GetCampaignDbJson("plugins"); + int nIndex = 0; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + string sName, sButton; + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Remove Plugin", "btn_remove_plugin_" + sButton, 150.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + sName = JsonGetString(JsonArrayGet(jPlugin, 2)); + jRow = CreateButton(jRow, sName, "btn_plugin_" + sButton, 290.0f, 20.0f, -1.0, "btn_plugin_" + sButton + "_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_plugin_" + sButton, 25.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + // Get the window location to restore it from the database. + sName = ai_RemoveIllegalCharacters(GetName(oPC)); + json jLocations = ai_GetCampaignDbJson("locations", sName, AI_DM_TABLE); + jLocations = JsonObjectGet(jLocations, "dm" + AI_PLUGIN_NUI); + float fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + float fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + sName = GetName(oPC); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, "dm" + AI_PLUGIN_NUI, sName + " PEPS Plugin Manager", + fX, fY, 500.0f, fHeight + 12.0f, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui_dm"); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Row 1 + NuiSetBind(oPC, nToken, "btn_load_plugins_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_load_plugins_tooltip", JsonString(" Load all known PEPS plugins that are in the game files.")); + NuiSetBind(oPC, nToken, "btn_check_plugins_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_check_plugins_tooltip", JsonString(" Add all plugins to the players widget.")); + NuiSetBind(oPC, nToken, "btn_clear_plugins_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_plugins_tooltip", JsonString(" Remove all plugins from the players widget.")); + // Row 2 + NuiSetBind(oPC, nToken, "btn_add_plugin_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_plugin_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_plugin_tooltip", JsonString(" Enter an executable script name.")); + // Row 3+ + nIndex = 0; + int bCheck; + string sText; + jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_remove_plugin_" + sButton + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_plugin_" + sButton + "_event", JsonBool(TRUE)); + bCheck = JsonGetInt(JsonArrayGet(jPlugin, 1)); + NuiSetBind(oPC, nToken, "chbx_plugin_" + sButton + "_check", JsonBool(bCheck)); + NuiSetBind(oPC, nToken, "chbx_plugin_" + sButton + "_event", JsonBool(TRUE)); + NuiSetBindWatch (oPC, nToken, "chbx_plugin_" + sButton + "_check", TRUE); + sText = " " + JsonGetString(JsonArrayGet(jPlugin, 2)); + NuiSetBind(oPC, nToken, "btn_plugin_" + sButton + "_tooltip", JsonString(sText)); + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + NuiSetBind(oPC, nToken, "chbx_plugin_tooltip", JsonString(" Allows players to use this plugin.")); +} +void ai_CreateDMWidgetManagerNUI(object oPC) +{ + SetLocalInt(oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand(0.5f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + // Row 1 ******************************************************************* 575 / 73 + json jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Check All", "btn_check_buttons", 150.0f, 20.0f, -1.0, "btn_check_buttons_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Clear All", "btn_clear_buttons", 150.0f, 20.0f, -1.0, "btn_clear_buttons_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 575 / 96 + jRow = CreateLabel(JsonArray(), "This menu manages the PEPS buttons a player may have access to.", "lbl_info1", 636.0, 15.0); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 ******************************************************************* 575 / 119 + jRow = CreateLabel(JsonArray(), "Having a check next to a button will remove that button from the players menus.", "lbl_info2", 636.0, 15.0); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 ******************************************************************* 575 / 162 + jRow = CreateButtonImage(JsonArray(), "ir_action", "btn_cmd_action", 35.0f, 35.0f, 0.0, "btn_cmd_action_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_action", 25.0, 20.0, "btn_cmd_action_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_guard", "btn_cmd_guard", 35.0f, 35.0f, 0.0, "btn_cmd_guard_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_guard", 25.0, 20.0, "btn_cmd_guard_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_standground", "btn_cmd_hold", 35.0f, 35.0f, 0.0, "btn_cmd_hold_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_hold", 25.0, 20.0, "btn_cmd_hold_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_attacknearest", "btn_cmd_attack", 35.0f, 35.0f, 0.0, "btn_cmd_attack_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_attack", 25.0, 20.0, "btn_cmd_attack_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_follow", "btn_cmd_follow", 35.0f, 35.0f, 0.0, "btn_cmd_follow_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_follow", 25.0, 20.0, "btn_cmd_follow_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_dmchat", "btn_follow_target", 35.0f, 35.0f, 0.0, "btn_follow_target_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_follow_target", 25.0, 20.0, "btn_follow_target_tooltip"); + + jRow = CreateButtonImage(jRow, "ife_foc_search", "btn_cmd_search", 35.0f, 35.0f, 0.0, "btn_cmd_search_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_search", 25.0, 20.0, "btn_cmd_search_tooltip"); + + jRow = CreateButtonImage(jRow, "ife_foc_hide", "btn_cmd_stealth", 35.0f, 35.0f, 0.0, "btn_cmd_stealth_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_stealth", 25.0, 20.0, "btn_cmd_stealth_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_scommand", "btn_cmd_ai_script", 35.0f, 35.0f, 0.0, "btn_cmd_ai_script_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_ai_script", 25.0, 20.0, "btn_cmd_ai_script_tooltip"); + + jRow = CreateButtonImage(jRow, "isk_settrap", "btn_cmd_place_trap", 35.0f, 35.0f, 0.0, "btn_cmd_place_trap_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_place_trap", 25.0, 20.0, "btn_cmd_place_trap_tooltip"); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5 ******************************************************************* 575 / 205 + jRow = CreateButtonImage(JsonArray(), "isk_spellcraft", "btn_quick_widget", 35.0f, 35.0f, 0.0, "btn_quick_widget_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_quick_widget", 25.0, 20.0, "btn_quick_widget_tooltip"); + + jRow = CreateButtonImage(jRow, "isk_lore", "btn_spell_memorize", 35.0f, 35.0f, 0.0, "btn_spell_memorize_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_spell_memorize", 25.0, 20.0, "btn_spell_memorize_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_cantrips", "btn_buff_short", 35.0f, 35.0f, 0.0, "btn_buff_short_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_buff_short", 25.0, 20.0, "btn_buff_short_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_cast", "btn_buff_long", 35.0f, 35.0f, 0.0, "btn_buff_long_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_buff_long", 25.0, 20.0, "btn_buff_long_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_level789", "btn_buff_all", 35.0f, 35.0f, 0.0, "btn_buff_all_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_buff_all", 25.0, 20.0, "btn_buff_all_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_rest", "btn_buff_rest", 35.0f, 35.0f, 0.0, "btn_buff_rest_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_buff_rest", 25.0, 20.0, "btn_buff_rest_tooltip"); + + jRow = CreateButtonImage(jRow, "dm_jump", "btn_jump_to", 35.0f, 35.0f, 0.0, "btn_jump_to_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_jump_to", 25.0, 20.0, "btn_jump_to_tooltip"); + + jRow = CreateButtonImage(jRow, "dm_limbo", "btn_ghost_mode", 35.0f, 35.0f, 0.0, "btn_ghost_mode_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ghost_mode", 25.0, 20.0, "btn_ghost_mode_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_examine", "btn_camera", 35.0f, 35.0f, 0.0, "btn_camera_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_camera", 25.0, 20.0, "btn_camera_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_pickup", "btn_inventory", 35.0f, 35.0f, 0.0, "btn_inventory_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_inventory", 25.0, 20.0, "btn_inventory_tooltip"); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 6 ******************************************************************* 575 / 248 + + jRow = CreateButtonImage(JsonArray(), "ife_familiar", "btn_familiar", 35.0f, 35.0f, 0.0, "btn_familiar_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_familiar", 25.0, 20.0, "btn_familiar_tooltip"); + + jRow = CreateButtonImage(jRow, "ife_animal", "btn_companion", 35.0f, 35.0f, 0.0, "btn_companion_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_companion", 25.0, 20.0, "btn_companion_tooltip"); + + jRow = CreateButtonImage(jRow, "dm_ai", "btn_ai", 35.0f, 35.0f, 0.0, "btn_ai_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ai", 25.0, 20.0, "btn_companion_tooltip"); + + jRow = CreateButtonImage(jRow, "isk_movsilent", "btn_quiet", 35.0f, 35.0f, 0.0, "btn_quiet_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_quiet", 25.0, 20.0, "btn_quiet_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_archer", "btn_ranged", 35.0f, 35.0f, 0.0, "btn_ranged_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ranged", 25.0, 20.0, "btn_ranged_tooltip"); + + jRow = CreateButtonImage(jRow, "dm_takeitem", "btn_equip_weapon", 35.0f, 35.0f, 0.0, "btn_equip_weapon_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_equip_weapon", 25.0, 20.0, "btn_equip_weapon_tooltip"); + + jRow = CreateButtonImage(jRow, "isk_search", "btn_search", 35.0f, 35.0f, 0.0, "btn_search_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_search", 25.0, 20.0, "btn_search_tooltip"); + + jRow = CreateButtonImage(jRow, "isk_hide", "btn_stealth", 35.0f, 35.0f, 0.0, "btn_stealth_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_stealth", 25.0, 20.0, "btn_stealth_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_open", "btn_open_door", 35.0f, 35.0f, 0.0, "btn_open_door_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_open_door", 25.0, 20.0, "btn_open_door_tooltip"); + + jRow = CreateButtonImage(jRow, "isk_distrap", "btn_traps", 35.0f, 35.0f, 0.0, "btn_traps_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_traps", 25.0, 20.0, "btn_traps_tooltip"); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 7 ******************************************************************* 575 / 291 + + jRow = CreateButtonImage(JsonArray(), "isk_olock", "btn_pick_locks", 35.0f, 35.0f, 0.0, "btn_pick_locks_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_pick_locks", 25.0, 20.0, "btn_pick_locks_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_bash", "btn_bash_locks", 35.0f, 35.0f, 0.0, "btn_bash_locks_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_bash_locks", 25.0, 20.0, "btn_bash_locks_tooltip"); + + jRow = CreateButtonImage(jRow, "dm_control", "btn_magic_level", 35.0f, 35.0f, 0.0, "btn_magic_level_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_magic_level", 25.0, 20.0, "btn_magic_level_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_xability", "btn_spontaneous", 35.0f, 35.0f, 0.0, "btn_spontaneous_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_spontaneous", 25.0, 20.0, "btn_spontaneous_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_cntrspell", "btn_magic", 35.0f, 35.0f, 0.0, "btn_magic_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_magic", 25.0, 20.0, "btn_magic_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_moreattacks", "btn_magic_items", 35.0f, 35.0f, 0.0, "btn_magic_items_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_magic_items", 25.0, 20.0, "btn_magic_items_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_orisons", "btn_def_magic", 35.0f, 35.0f, 0.0, "btn_def_magic_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_def_magic", 25.0, 20.0, "btn_def_magic_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_metamagic", "btn_off_magic", 35.0f, 35.0f, 0.0, "btn_off_magic_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_off_magic", 25.0, 20.0, "btn_off_magic_tooltip"); + + jRow = CreateButtonImage(jRow, "isk_heal", "btn_heal_out", 35.0f, 35.0f, 0.0, "btn_heal_out_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_heal_out", 25.0, 20.0, "btn_heal_out_tooltip"); + + jRow = CreateButtonImage(jRow, "dm_heal", "btn_heal_in", 35.0f, 35.0f, 0.0, "btn_heal_in_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_heal_in", 25.0, 20.0, "btn_heal_in_tooltip"); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 8 ******************************************************************* 575 / 334 + jRow = CreateButtonImage(JsonArray(), "ir_heal", "btn_heals_onoff", 35.0f, 35.0f, 0.0, "btn_heals_onoff_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_heals_onoff", 25.0, 20.0, "btn_heals_onoff_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_party", "btn_healp_onoff", 35.0f, 35.0f, 0.0, "btn_healp_onoff_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_healp_onoff", 25.0, 20.0, "btn_healp_onoff_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_accept", "btn_cure_onoff", 35.0f, 35.0f, 0.0, "btn_cure_onoff_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cure_onoff", 25.0, 20.0, "btn_cure_onoff_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_barter", "btn_loot", 35.0f, 35.0f, 0.0, "btn_loot_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_loot", 25.0, 20.0, "btn_loot_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_ignore", "btn_ignore_assoc", 35.0f, 35.0f, 0.0, "btn_ignore_assoc_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ignore_assoc", 25.0, 20.0, "btn_ignore_assoc_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_abort", "btn_ignore_traps", 35.0f, 35.0f, 0.0, "btn_ignore_traps_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ignore_traps", 25.0, 20.0, "btn_ignore_traps_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_dmchat", "btn_perc_range", 35.0f, 35.0f, 0.0, "btn_perc_range_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_perc_range", 25.0, 20.0, "btn_perc_range_tooltip"); + + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + float fHeight = 334.0; + // Get the window location to restore it from the database. + string sName = ai_RemoveIllegalCharacters(GetName(oPC)); + json jLocations = ai_GetCampaignDbJson("locations", sName, AI_DM_TABLE); + jLocations = JsonObjectGet(jLocations, "dm_widget_manager_nui"); + float fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + float fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + sName = GetName(oPC); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, "dm_widget_manager_nui", sName + " PEPS DM Widget Manager", + fX, fY, 660.0f, fHeight + 12.0f, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui_dm"); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Row 1 + NuiSetBind(oPC, nToken, "btn_check_buttons_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_check_buttons_tooltip", JsonString(" Check all buttons, removing them for all players.")); + NuiSetBind(oPC, nToken, "btn_clear_buttons_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_buttons_tooltip", JsonString(" Clear all buttons, allowing use for all players.")); + // Row 2 & 3 Labels. + // Load all the buttons states. + //int bAIWidgetLock = ai_GetDMWAccessButton(BTN_WIDGET_LOCK); + int bCmdAction = ai_GetDMWAccessButton(BTN_CMD_ACTION); + int bCmdGuard = ai_GetDMWAccessButton(BTN_CMD_GUARD); + int bCmdHold = ai_GetDMWAccessButton(BTN_CMD_HOLD); + int bCmdSearch = ai_GetDMWAccessButton(BTN_CMD_SEARCH); + int bCmdStealth = ai_GetDMWAccessButton(BTN_CMD_STEALTH); + int bCmdAttack = ai_GetDMWAccessButton(BTN_CMD_ATTACK); + int bCmdFollow = ai_GetDMWAccessButton(BTN_CMD_FOLLOW); + int bCmdAIScript = ai_GetDMWAccessButton(BTN_CMD_AI_SCRIPT); + int bCmdPlacetrap = ai_GetDMWAccessButton(BTN_CMD_PLACE_TRAP); + int bSpellWidget = ai_GetDMWAccessButton(BTN_CMD_SPELL_WIDGET); + int bMemorizeSpells = ai_GetDMWAccessButton(BTN_DM_CMD_MEMORIZE); + int bBuffShort = ai_GetDMWAccessButton(BTN_BUFF_SHORT); + int bBuffLong = ai_GetDMWAccessButton(BTN_BUFF_LONG); + int bBuffAll = ai_GetDMWAccessButton(BTN_BUFF_ALL); + int bBuffRest = ai_GetDMWAccessButton(BTN_BUFF_REST); + int bJumpTo = ai_GetDMWAccessButton(BTN_CMD_JUMP_TO); + int bGhostMode = ai_GetDMWAccessButton(BTN_CMD_GHOST_MODE); + int bCamera = ai_GetDMWAccessButton(BTN_CMD_CAMERA); + int bInventory = ai_GetDMWAccessButton(BTN_CMD_INVENTORY); + int bFamiliar = ai_GetDMWAccessButton(BTN_CMD_FAMILIAR); + int bCompanion = ai_GetDMWAccessButton(BTN_CMD_COMPANION); + int bFollowTarget = ai_GetDMAIAccessButton(BTN_AI_FOLLOW_TARGET); + int bAI = ai_GetDMAIAccessButton(BTN_AI_FOR_PC); + int bReduceSpeech = ai_GetDMAIAccessButton(BTN_AI_REDUCE_SPEECH); + int bRanged = ai_GetDMAIAccessButton(BTN_AI_USE_RANGED); + int bEquipWeapons = ai_GetDMAIAccessButton(BTN_AI_STOP_WEAPON_EQUIP); + int bSearch = ai_GetDMAIAccessButton(BTN_AI_USE_SEARCH); + int bStealth = ai_GetDMAIAccessButton(BTN_AI_USE_STEALTH); + int bOpenDoors = ai_GetDMAIAccessButton(BTN_AI_OPEN_DOORS); + int bTraps = ai_GetDMAIAccessButton(BTN_AI_REMOVE_TRAPS); + int bPickLocks = ai_GetDMAIAccessButton(BTN_AI_PICK_LOCKS); + int bBashLocks = ai_GetDMAIAccessButton(BTN_AI_BASH_LOCKS); + int bMagicLevel = ai_GetDMAIAccessButton(BTN_AI_MAGIC_LEVEL); + int bSpontaneous = ai_GetDMAIAccessButton(BTN_AI_NO_SPONTANEOUS); + int bNoMagic = ai_GetDMAIAccessButton(BTN_AI_NO_MAGIC_USE); + int bNoMagicItems = ai_GetDMAIAccessButton(BTN_AI_NO_MAGIC_ITEM_USE); + int bDefMagic = ai_GetDMAIAccessButton(BTN_AI_DEF_MAGIC_USE); + int bOffMagic = ai_GetDMAIAccessButton(BTN_AI_OFF_MAGIC_USE); + int bHealOut = ai_GetDMAIAccessButton(BTN_AI_HEAL_OUT); + int bHealIn = ai_GetDMAIAccessButton(BTN_AI_HEAL_IN); + int bSelfHealOnOff = ai_GetDMAIAccessButton(BTN_AI_STOP_SELF_HEALING); + int bPartyHealOnOff = ai_GetDMAIAccessButton(BTN_AI_STOP_PARTY_HEALING); + int bCureOnOff = ai_GetDMAIAccessButton(BTN_AI_STOP_CURE_SPELLS); + int bLoot = ai_GetDMAIAccessButton(BTN_AI_LOOT); + int bIgnoreAssociates = ai_GetDMAIAccessButton(BTN_AI_IGNORE_ASSOCIATES); + int bIgnoreTraps = ai_GetDMAIAccessButton(BTN_AI_IGNORE_TRAPS); + int bPercRange = ai_GetDMAIAccessButton(BTN_AI_PERC_RANGE); + int bBtnFamiliar = ai_GetDMWAccessButton(BTN_CMD_FAMILIAR); + int bBtnCompanion = ai_GetDMWAccessButton(BTN_CMD_COMPANION); + SetLocalInt(oPC, "CHBX_SKIP", TRUE); + DelayCommand(2.0, DeleteLocalInt(oPC, "CHBX_SKIP")); + // Row 4 + NuiSetBind(oPC, nToken, "chbx_cmd_action_check", JsonBool (bCmdAction)); + NuiSetBindWatch(oPC, nToken, "chbx_cmd_action_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_action_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_action_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_action_tooltip", JsonString(" Action button")); + + NuiSetBind(oPC, nToken, "chbx_cmd_guard_check", JsonBool (bCmdGuard)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_guard_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_guard_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_guard_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_guard_tooltip", JsonString(" Guard button")); + + NuiSetBind(oPC, nToken, "chbx_cmd_hold_check", JsonBool (bCmdHold)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_hold_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_hold_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_hold_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_hold_tooltip", JsonString(" Hold button")); + + NuiSetBind(oPC, nToken, "chbx_cmd_attack_check", JsonBool (bCmdAttack)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_attack_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_attack_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_attack_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_attack_tooltip", JsonString(" Attack button")); + + NuiSetBind(oPC, nToken, "chbx_cmd_follow_check", JsonBool (bCmdFollow)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_follow_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_follow_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_follow_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_follow_tooltip", JsonString(" Follow button")); + + NuiSetBind(oPC, nToken, "chbx_follow_target_check", JsonBool (bFollowTarget)); + NuiSetBindWatch (oPC, nToken, "chbx_follow_target_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_follow_target_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_follow_target_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_follow_target_tooltip", JsonString(" Follow Target button")); + + NuiSetBind(oPC, nToken, "chbx_cmd_search_check", JsonBool (bCmdSearch)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_search_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_search_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_search_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_search_tooltip", JsonString(" Search All button")); + + NuiSetBind(oPC, nToken, "chbx_cmd_stealth_check", JsonBool (bCmdStealth)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_stealth_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_stealth_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_stealth_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_stealth_tooltip", JsonString(" Stealth All button")); + + NuiSetBind(oPC, nToken, "chbx_cmd_ai_script_check", JsonBool (bCmdAIScript)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_ai_script_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_ai_script_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_tooltip", JsonString(" Combat Tactics button")); + + NuiSetBind(oPC, nToken, "chbx_cmd_place_trap_check", JsonBool (bCmdPlacetrap)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_place_trap_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_place_trap_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_place_trap_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_place_trap_tooltip", JsonString (" Place Trap button")); + // Row 5 + NuiSetBind(oPC, nToken, "chbx_quick_widget_check", JsonBool (bSpellWidget)); + NuiSetBindWatch (oPC, nToken, "chbx_quick_widget_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_quick_widget_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_quick_widget_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_quick_widget_tooltip", JsonString(" Quick Use button")); + + NuiSetBind(oPC, nToken, "chbx_spell_memorize_check", JsonBool (bMemorizeSpells)); + NuiSetBindWatch (oPC, nToken, "chbx_spell_memorize_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_spell_memorize_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_spell_memorize_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_spell_memorize_tooltip", JsonString(" Memorize Spells button")); + + NuiSetBind(oPC, nToken, "chbx_buff_short_check", JsonBool (bBuffShort)); + NuiSetBindWatch (oPC, nToken, "chbx_buff_short_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_short_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_short_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_buff_short_tooltip", JsonString(" Short Buffing button")); + + NuiSetBind(oPC, nToken, "chbx_buff_long_check", JsonBool (bBuffLong)); + NuiSetBindWatch (oPC, nToken, "chbx_buff_long_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_long_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_long_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_long_tooltip", JsonString(" Long Buffing button")); + + NuiSetBind(oPC, nToken, "chbx_buff_all_check", JsonBool (bBuffAll)); + NuiSetBindWatch (oPC, nToken, "chbx_buff_all_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_all_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_all_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_all_tooltip", JsonString(" All Buffing button")); + + NuiSetBind(oPC, nToken, "chbx_buff_rest_check", JsonBool (bBuffRest)); + NuiSetBindWatch (oPC, nToken, "chbx_buff_rest_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_rest_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_rest_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_buff_rest_tooltip", JsonString(" Rest Buffing button")); + + NuiSetBind(oPC, nToken, "chbx_jump_to_check", JsonBool(bJumpTo)); + NuiSetBindWatch (oPC, nToken, "chbx_jump_to_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_jump_to_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_jump_to_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_jump_to_tooltip", JsonString(" Jump Associates button")); + + NuiSetBind(oPC, nToken, "chbx_ghost_mode_check", JsonBool (bGhostMode)); + NuiSetBindWatch (oPC, nToken, "chbx_ghost_mode_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ghost_mode_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ghost_mode_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_ghost_mode_tooltip", JsonString(" Ghost mode button")); + + NuiSetBind(oPC, nToken, "chbx_camera_check", JsonBool (bCamera)); + NuiSetBindWatch (oPC, nToken, "chbx_camera_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_camera_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_camera_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_camera_tooltip", JsonString(" Change Camera button")); + + NuiSetBind(oPC, nToken, "chbx_inventory_check", JsonBool (bInventory)); + NuiSetBindWatch (oPC, nToken, "chbx_inventory_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_inventory_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_inventory_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_inventory_tooltip", JsonString(" Open Inventory button")); + // Row 6 + NuiSetBind(oPC, nToken, "chbx_familiar_check", JsonBool(bBtnFamiliar)); + NuiSetBindWatch (oPC, nToken, "chbx_familiar_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_familiar_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_familiar_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_familiar_tooltip", JsonString(" Change Familiar buttons")); + + NuiSetBind(oPC, nToken, "chbx_companion_check", JsonBool(bBtnCompanion)); + NuiSetBindWatch (oPC, nToken, "chbx_companion_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_companion_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_companion_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_companion_tooltip", JsonString(" Change Animal Companion buttons")); + + NuiSetBind(oPC, nToken, "chbx_ai_check", JsonBool(bAI)); + NuiSetBindWatch (oPC, nToken, "chbx_ai_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ai_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ai_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ai_tooltip", JsonString(" Player AI button")); + + NuiSetBind(oPC, nToken, "chbx_quiet_check", JsonBool(bReduceSpeech)); + NuiSetBindWatch (oPC, nToken, "chbx_quiet_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_quiet_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_quiet_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_quiet_tooltip", JsonString(" Reduce Speech button")); + + NuiSetBind(oPC, nToken, "chbx_ranged_check", JsonBool(bRanged)); + NuiSetBindWatch(oPC, nToken, "chbx_ranged_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ranged_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ranged_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_ranged_tooltip", JsonString(" Ranged button")); + + NuiSetBind(oPC, nToken, "chbx_equip_weapon_check", JsonBool(bEquipWeapons)); + NuiSetBindWatch(oPC, nToken, "chbx_equip_weapon_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_equip_weapon_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_equip_weapon_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_equip_weapon_tooltip", JsonString(" Auto Equip Weapons button")); + + NuiSetBind(oPC, nToken, "chbx_search_check", JsonBool(bSearch)); + NuiSetBindWatch (oPC, nToken, "chbx_search_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_search_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_search_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_search_tooltip", JsonString(" Search button")); + + NuiSetBind(oPC, nToken, "chbx_stealth_check", JsonBool(bStealth)); + NuiSetBindWatch(oPC, nToken, "chbx_stealth_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_stealth_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_stealth_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_stealth_tooltip", JsonString(" Stealth button")); + + NuiSetBind(oPC, nToken, "chbx_open_door_check", JsonBool(bOpenDoors)); + NuiSetBindWatch (oPC, nToken, "chbx_open_door_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_open_door_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_open_door_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_open_door_tooltip", JsonString(" Open Door button")); + + NuiSetBind(oPC, nToken, "chbx_traps_check", JsonBool(bTraps)); + NuiSetBindWatch (oPC, nToken, "chbx_traps_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_traps_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_traps_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_traps_tooltip", JsonString(" Disable Traps button")); + // Row 7 + NuiSetBind(oPC, nToken, "chbx_pick_locks_check", JsonBool(bPickLocks)); + NuiSetBindWatch(oPC, nToken, "chbx_pick_locks_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_pick_locks_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_pick_locks_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_pick_locks_tooltip", JsonString(" Pick Locks button")); + + NuiSetBind(oPC, nToken, "chbx_bash_locks_check", JsonBool(bBashLocks)); + NuiSetBindWatch(oPC, nToken, "chbx_bash_locks_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_bash_locks_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_bash_locks_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_bash_locks_tooltip", JsonString(" Bash button")); + + NuiSetBind(oPC, nToken, "chbx_magic_level_check", JsonBool(bMagicLevel)); + NuiSetBindWatch (oPC, nToken, "chbx_magic_level_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_magic_level_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_level_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_magic_level_tooltip", JsonString(" Magic Level button")); + + NuiSetBind(oPC, nToken, "chbx_spontaneous_check", JsonBool(bSpontaneous)); + NuiSetBindWatch (oPC, nToken, "chbx_spontaneous_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_spontaneous_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_spontaneous_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_spontaneous_tooltip", JsonString(" Spontaneous Spells button")); + + NuiSetBind(oPC, nToken, "chbx_magic_check", JsonBool(bNoMagic)); + NuiSetBindWatch (oPC, nToken, "chbx_magic_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_tooltip", JsonString(" Use Magic button")); + + NuiSetBind(oPC, nToken, "chbx_magic_items_check", JsonBool(bNoMagicItems)); + NuiSetBindWatch (oPC, nToken, "chbx_magic_items_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_magic_items_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_items_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_items_tooltip", JsonString(" Use Magic Items button")); + + NuiSetBind(oPC, nToken, "chbx_def_magic_check", JsonBool (bDefMagic)); + NuiSetBindWatch (oPC, nToken, "chbx_def_magic_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_def_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_def_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_def_magic_tooltip", JsonString(" Use Defensive Magic button")); + + NuiSetBind(oPC, nToken, "chbx_off_magic_check", JsonBool(bOffMagic)); + NuiSetBindWatch (oPC, nToken, "chbx_off_magic_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_off_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_off_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_off_magic_tooltip", JsonString(" Use Offensive Magic button")); + + NuiSetBind(oPC, nToken, "chbx_heal_out_check", JsonBool(bHealOut)); + NuiSetBindWatch (oPC, nToken, "chbx_heal_out_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_heal_out_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heal_out_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heal_out_tooltip", JsonString(" Heal Out of Combat button")); + + NuiSetBind(oPC, nToken, "chbx_heal_in_check", JsonBool(bHealIn)); + NuiSetBindWatch (oPC, nToken, "chbx_heal_in_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_heal_in_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heal_in_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_heal_in_tooltip", JsonString(" Heal In Combat button")); + // Row 8 + NuiSetBind(oPC, nToken, "chbx_heals_onoff_check", JsonBool(bSelfHealOnOff)); + NuiSetBindWatch (oPC, nToken, "chbx_heals_onoff_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_heals_onoff_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heals_onoff_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heals_onoff_tooltip", JsonString(" Heal Self On/Off button")); + + NuiSetBind(oPC, nToken, "chbx_healp_onoff_check", JsonBool(bPartyHealOnOff)); + NuiSetBind(oPC, nToken, "chbx_healp_onoff_event", JsonBool(TRUE)); + NuiSetBindWatch (oPC, nToken, "chbx_healp_onoff_check", TRUE); + NuiSetBind(oPC, nToken, "btn_healp_onoff_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_healp_onoff_tooltip", JsonString(" Heal Party On/Off button")); + + NuiSetBind(oPC, nToken, "chbx_cure_onoff_check", JsonBool(bCureOnOff)); + NuiSetBind(oPC, nToken, "chbx_cure_onoff_event", JsonBool(TRUE)); + NuiSetBindWatch (oPC, nToken, "chbx_cure_onoff_check", TRUE); + NuiSetBind(oPC, nToken, "btn_cure_onoff_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cure_onoff_tooltip", JsonString(" Cure Spells On/Off button")); + + NuiSetBind(oPC, nToken, "chbx_loot_check", JsonBool(bLoot)); + NuiSetBindWatch (oPC, nToken, "chbx_loot_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_loot_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_loot_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_loot_tooltip", JsonString(" Auto Looting button")); + + NuiSetBind(oPC, nToken, "chbx_ignore_assoc_check", JsonBool(bIgnoreAssociates)); + NuiSetBindWatch(oPC, nToken, "chbx_ignore_assoc_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ignore_assoc_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ignore_assoc_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_ignore_assoc_tooltip", JsonString(" Ignore Associates On/Off button")); + + NuiSetBind(oPC, nToken, "chbx_ignore_traps_check", JsonBool(bIgnoreTraps)); + NuiSetBindWatch(oPC, nToken, "chbx_ignore_traps_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ignore_traps_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ignore_traps_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_ignore_traps_tooltip", JsonString(" Ignore Floor Traps On/Off button")); + + NuiSetBind(oPC, nToken, "chbx_perc_range_check", JsonBool(bPercRange)); + NuiSetBindWatch (oPC, nToken, "chbx_perc_range_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_perc_range_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_perc_range_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_perc_range_tooltip", JsonString(" Perception Range button")); +} + diff --git a/src/module/nss/0i_messages.nss b/src/module/nss/0i_messages.nss new file mode 100644 index 0000000..ff01269 --- /dev/null +++ b/src/module/nss/0i_messages.nss @@ -0,0 +1,88 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_messages +////////////////////////////////////////////////////////////////////////////////////////////////////// + Include script for sending messages to files and players on the server. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_constants" +#include "0i_color" +// Sets up a Message on the module to be sent to the log and/or players. +// sTextColor color of text sent to the players and DM's. +// Use AI_COLOR_*. Where * is WHITE, RED, GREEN, BLUE, GRAY, or YELLOW. +// If nLog is TRUE it will send the message to the log file. +// If nToDMs is TRUE it will send the message to all DM's. +// If oPC is set to a player then they will get the message as well. +// Messages delivered by script should be colored as follows. +// _Debug message = COLOR_WHITE +// Generic messages for the player = AI_COLOR_YELLOW +// Negative messages for the player = AI_COLOR_RED +// Positive messages for the player = AI_COLOR_GREEN +// System messages, things that are not part of Dnd = COLOR_GRAY +// Descriptive in game messages = COLOR_BLUE +void ai_SendMessages(string sMessage, string sTextColor = AI_COLOR_YELLOW, object oPC = OBJECT_INVALID, int nToDMs = FALSE, int nLog = FALSE); +// Used for _debugging. Keeps all the information organized. +// Sends info to first pc if true and sends information to log file. +// sScriptName is the name of the script calling this function. +// sLineNumber is the line number of the code calling this function. +// sMessage is the description of the debug being sent. +void ai_Debug(string sScriptName, string sLineNumber, string sMessage); +// A counter to track microseconds in code. Start saves the counter. +void ai_Counter_Start(); +// A counter to track microseconds in code. End displays the time between Start +// and End to the log file. +void ai_Counter_End(string sMessage = ""); + +void ai_SendMessages(string sMessage, string sTextColor = AI_COLOR_YELLOW, object oPC = OBJECT_INVALID, int nToDMs = FALSE, int nLog = FALSE) +{ + // if nLog is TRUE send the message to the log file. + if(nLog) + { + sMessage = ai_StripColorCodes(sMessage); + // Add PC name to log to know who it belongs to. + string sLogPCName; + if(oPC != OBJECT_INVALID) sLogPCName = "(" + GetName(oPC) + ") "; + WriteTimestampedLogEntry("*** MESSAGE: " + sLogPCName + " " + sMessage); + } + sMessage = ai_AddColorToText(sMessage, sTextColor); + if(oPC != OBJECT_INVALID) SendMessageToPC(oPC, sMessage); + // If nToDMs is true send message to the DM's online. + if(nToDMs) SendMessageToAllDMs(sMessage); +} +void ai_Debug(string sScriptName, string sLineNumber, string sMessage) +{ + string sName = GetName(OBJECT_SELF); + if(sName == GetLocalString(GetModule(), AI_RULE_DEBUG_CREATURE) && + sName != "") + { + sMessage = "(((DEBUG)))[" + sScriptName + " - " + sLineNumber + " ]" + sMessage; + sMessage = ai_StripColorCodes(sMessage); + WriteTimestampedLogEntry(sMessage); + return; + } + //sMessage = "(((DEBUG)))[" + sScriptName + " - " + sLineNumber + " ]" + sMessage; + //sMessage = ai_StripColorCodes(sMessage); + //SendMessageToPC(GetFirstPC(), sMessage); + //WriteTimestampedLogEntry(sMessage); + //if(GetLocalInt(OBJECT_SELF, "AI_DEBUG")) WriteTimestampedLogEntry(sMessage); + //if(GetName(OBJECT_SELF) == "Kirrin") WriteTimestampedLogEntry(sMessage); + //if(GetName(OBJECT_SELF) == "Dorna Trapspringer") WriteTimestampedLogEntry(sMessage); + //if(GetName(OBJECT_SELF) == "Dire Spider") WriteTimestampedLogEntry(sMessage); + //if(GetName(OBJECT_SELF) == "Shadow Priest") WriteTimestampedLogEntry(sMessage); + //if(GetName(OBJECT_SELF) == "Tomi Undergallows") WriteTimestampedLogEntry(sMessage); + //if(GetName(OBJECT_SELF) == "Thello Colds") WriteTimestampedLogEntry(sMessage); + //if(GetName(OBJECT_SELF) == "Gert Sigers") WriteTimestampedLogEntry(sMessage); + //if(GetName(OBJECT_SELF) == "Zombie") WriteTimestampedLogEntry(sMessage); +} +void ai_Counter_Start() +{ + SetLocalInt(GetModule(), "0_MSCounter", GetMicrosecondCounter()); +} +void ai_Counter_End(string sMessage = "") +{ + int nTime = GetMicrosecondCounter(); + nTime = nTime - GetLocalInt(GetModule(), "0_MSCounter"); + float fTime = nTime / 1000000.0; + if(AI_DEBUG) ai_Debug("MICROSECOND_COUNTER", "", "Seconds: " + FloatToString(fTime, 0, 10) + + " Microseconds: " + IntToString(nTime) + " " + sMessage); +} diff --git a/src/module/nss/0i_module.nss b/src/module/nss/0i_module.nss new file mode 100644 index 0000000..6d50182 --- /dev/null +++ b/src/module/nss/0i_module.nss @@ -0,0 +1,544 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_module +//////////////////////////////////////////////////////////////////////////////// + Include script for handling event scripts for injecting the systems into a + module for either single player or a server. +*/////////////////////////////////////////////////////////////////////////////// +#include "x2_inc_switches" +#include "0i_associates" +#include "0i_menus" +#include "0i_player_target" +#include "0i_gui_events" +// Add to nw_c2_default9 OnSpawn event script of monsters and +int ai_OnMonsterSpawn(object oCreature); +// Add to nw_ch_ac9 OnSpawn event script of henchman. +void ai_OnAssociateSpawn(object oCreature); +// Run all of the players starting scripts. +// If oPC is passed as Invalid then it will get the firt PC in the game. +void ai_CheckPCStart(object oPC = OBJECT_INVALID); +// Checks to see if we should change the monster via Json. +int ai_ChangeMonster(object oCreature, object oModule); +// Checks to see if we should change the associate via Json. +object ai_ChangeAssociate(object oCreature, object oModule); +// Sets the events for oCreature that is a Monster while playing Infinite Dungeons. +void ai_SetIDMonsterEventScripts(object oCreature); +// Sets the events for oCreature that is a monster in while using the PRC and +// playing Infinite Dungeons. +void ai_SetPRCIDMonsterEventScripts(object oCreature); +// Sets the events for oCreature that is an associate while using the PRC. +void ai_SetPRCAssociateEventScripts(object oCreature); +// Reverts single player monster event scripts back to their default. +void ai_ChangeEventScriptsForMonster(object oCreature); +// Reverts single player associates event scripts back to their default. +void ai_ChangeEventScriptsForAssociate(object oCreature); +// If using PRC this will replace some spells with PRC variants. +json ai_ReplaceSpellsWithPRCVariants(object oCreature, json jCreature); + +//****************************************************************************** +//********************* Creature event scripts ********************************* +//****************************************************************************** +int ai_OnMonsterSpawn(object oCreature) +{ + if(GetLocalInt(oCreature, AI_ONSPAWN_EVENT)) return FALSE; + SetLocalInt(oCreature, AI_ONSPAWN_EVENT, TRUE); + object oModule = GetModule(); + int nInfiniteDungeons; + int nPRC = GetLocalInt(oModule, AI_USING_PRC); + // If you are running a server this will not affect the module. + if(!AI_SERVER) + { + ai_CheckPCStart(); + string sModuleName = GetModuleName(); + if(sModuleName == "Neverwinter Nights - Infinite Dungeons" || + sModuleName == "Infinite Dungeons [PRC8]") + { + nInfiniteDungeons = TRUE; + if(nPRC) ai_SetPRCIDMonsterEventScripts(oCreature); + else ai_SetIDMonsterEventScripts(oCreature); + // Fix to get plot givers, finishers from getting killed a lot. + if(GetLocalString(oCreature, "sConversation") == "id1_plotgiver " || + GetLocalString(oCreature, "sConversation") == "id1_plotdest") + { + ChangeToStandardFaction(oCreature, STANDARD_FACTION_MERCHANT); + SetStandardFactionReputation(STANDARD_FACTION_HOSTILE, 50, oCreature); + } + } + } + // PRC and Infinite dungeons has issues with Ondeath script so we just leave it alone. + if(!nPRC && !nInfiniteDungeons) + { + // We change this script so we can setup permanent summons on/off. + string sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH); + SetLocalString(oCreature, "AI_ON_DEATH", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH, "0e_c2_7_ondeath"); + } + if(GetCreatureFlag(oCreature, CREATURE_VAR_IS_INCORPOREAL)) + { + string sCombatAI = GetLocalString(oCreature, AI_DEFAULT_SCRIPT); + if (sCombatAI == "") SetLocalString(oCreature, AI_DEFAULT_SCRIPT, "ai_incorporeal"); + } + ai_SetListeningPatterns(oCreature); + ai_SetCreatureAIScript(oCreature); + ai_SetNormalAppearance(oCreature); + ai_SetAura(oCreature); + SetLocalInt(oCreature, AI_HEAL_IN_COMBAT_LIMIT, AI_MONSTER_HEAL_IN_COMBAT_CHANCE); + SetLocalInt(oCreature, AI_HEAL_OUT_OF_COMBAT_LIMIT, AI_MONSTER_HEAL_OUT_COMBAT_CHANCE); + int nMonsterHpIncrease = GetLocalInt(oModule, AI_INCREASE_MONSTERS_HP); + if(nMonsterHpIncrease) + { + int nHp = GetMaxHitPoints(oCreature); + nHp = (nHp * nMonsterHpIncrease) / 100; + effect eHp = EffectTemporaryHitpoints(nHp); + eHp = SupernaturalEffect(eHp); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHp, oCreature); + } + // Check if the monster should change how they search for targets. + if(d100() <= GetLocalInt(GetModule(), AI_RULE_AI_DIFFICULTY)) + { + SetLocalInt(oCreature, AI_RULE_AI_DIFFICULTY, TRUE); + } + // Do json changes after we have setup the creature. + if(ai_ChangeMonster(oCreature, oModule)) return TRUE; + return FALSE; +} +void ai_OnAssociateSpawn(object oCreature) +{ + if(GetLocalInt(oCreature, AI_ONSPAWN_EVENT)) return; + SetLocalInt(oCreature, AI_ONSPAWN_EVENT, TRUE); + int bPRC = GetLocalInt(GetModule(), AI_USING_PRC); + // If you are running a server this will not affect the module. + if(!AI_SERVER) + { + if(bPRC) ai_SetPRCAssociateEventScripts(oCreature); + } + // PRC has issues with Ondeath script so we just leave it alone. + if(!bPRC) + { + // We change this script so we can setup permanent summons on/off. + // If you don't use this you may remove the next three lines. + string sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH); + SetLocalString(oCreature, "AI_ON_DEATH", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH, "0e_ch_7_ondeath"); + } + // Initialize Associate modes for basic use. + ai_SetListeningPatterns(oCreature); + ai_SetNormalAppearance(oCreature); + ai_SetAssociateAIScript(oCreature, FALSE); + ai_SetAura(oCreature); + if(GetLocalInt(GetModule(), AI_RULE_PARTY_SCALE)) ai_CheckXPPartyScale(oCreature); + // Bioware summoned shadows are not incorporeal, also set the ai code. + if (GetTag(OBJECT_SELF) == "NW_S_SHADOW") + { + SetLocalInt(OBJECT_SELF, "X2_L_IS_INCORPOREAL", TRUE); + SetLocalString(OBJECT_SELF, AI_DEFAULT_SCRIPT, "ai_shadow"); + } +} +void ai_CheckPCStart(object oPC = OBJECT_INVALID) +{ + if(oPC == OBJECT_INVALID) oPC = GetFirstPC(); + // There should always be a PC widget. If it doesn't exist then we assume + // that the module is being loaded or started. + if(!NuiFindWindow(oPC, "pc" + AI_WIDGET_NUI)) + { + object oModule = GetModule(); + // Do PRC check and save variable to the module. + if(ResManGetAliasFor("prc_ai_fam_percp", RESTYPE_NCS) != "") + SetLocalInt(oModule, AI_USING_PRC, TRUE); + ai_SetAIRules(); + ai_CheckAssociateData(oPC, oPC, "pc"); + ai_StartupPlugins(oPC); + ai_SetupPlayerTarget(oPC); + ai_SetupModuleGUIEvents(oPC); + ai_CreateWidgetNUI(oPC, oPC); + ai_SetNormalAppearance(oPC); + } +} +void ai_CopyMonster(object oCreature, object oModule) +{ + // After setting the monster lets see if we should copy it. + float fMonsterIncrease = GetLocalFloat(oModule, AI_INCREASE_ENC_MONSTERS); + if(GetIsEncounterCreature(oCreature) && fMonsterIncrease > 0.0) + { + int nMonsterIncrease; + float fMonsterCounter = GetLocalFloat(oModule, "AI_MONSTER_COUNTER"); + fMonsterCounter += fMonsterIncrease; + nMonsterIncrease = FloatToInt(fMonsterCounter); + if(nMonsterIncrease > 0) + { + fMonsterCounter = fMonsterCounter - IntToFloat(nMonsterIncrease); + } + SetLocalFloat(oModule, "AI_MONSTER_COUNTER", fMonsterCounter); + while(nMonsterIncrease > 0) + { + CopyObject(oCreature, GetLocation(oCreature), OBJECT_INVALID, "", TRUE); + nMonsterIncrease = nMonsterIncrease - 1; + } + } +} +void ai_CreateMonster(json jCreature, location lLocation, object oModule) +{ + //WriteTimestampedLogEntry("0i_module, 181, " + JsonDump(jCreature, 1)); + object oCreature = JsonToObject(jCreature, lLocation, OBJECT_INVALID, TRUE); + // Lets set the new version as spawned so we skip the initial setup again. + SetLocalInt(oCreature, AI_ONSPAWN_EVENT, TRUE); + /*if(GetLocalInt(oModule, AI_RULE_CORPSES_STAY)) + { + SetIsDestroyable(FALSE, FALSE, TRUE, oCreature); + SetLootable(oCreature, TRUE); + } */ + if(AI_DEBUG) ai_Debug("0i_module", "187", GetName(oCreature)); + ai_CopyMonster(oCreature, oModule); + return; +} +json ai_SetCompanionSummoning(object oCreature, json jCreature) +{ + if(GetHasFeat(FEAT_SUMMON_FAMILIAR, oCreature, TRUE)) + { + json jFamiliar = JsonObjectGet(jCreature, "FamiliarName"); + jFamiliar = JsonObjectSet(jFamiliar, "value", JsonString("Summoned Familiar")); + jCreature = JsonObjectSet(jCreature, "FamiliarName", jFamiliar); + jFamiliar = JsonObjectGet(jCreature, "FamiliarType"); + jFamiliar = JsonObjectSet(jFamiliar, "value", JsonInt(Random(11))); + return JsonObjectSet(jCreature, "FamiliarType", jFamiliar); + } + if(GetHasFeat(FEAT_ANIMAL_COMPANION , oCreature, TRUE)) + { + json jCompanion = JsonObjectGet(jCreature, "CompanionName"); + jCompanion = JsonObjectSet(jCompanion, "value", JsonString("Summoned Companion")); + jCreature = JsonObjectSet(jCreature, "CompanionName", jCompanion); + jCompanion = JsonObjectGet(jCreature, "CompanionType"); + jCompanion = JsonObjectSet(jCompanion, "value", JsonInt(Random(9))); + return JsonObjectSet(jCreature, "CompanionType", jCompanion); + } + return jCreature; +} +int ai_ChangeMonster(object oCreature, object oModule) +{ + object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, oCreature); + // Lets not mess up the cutscenes with silly RULES. + if(GetCutsceneMode(oPC)) return FALSE; + //float fDistance = GetDistanceBetween(oCreature, oPC); + // Looks bad to see creatures wink in and out plus could cause module errors. + //if(fDistance != 0.0 && fDistance < AI_RANGE_PERCEPTION) return oCreature; + if(IsInConversation(oCreature)) return FALSE; + json jCreature = ObjectToJson(oCreature, TRUE); + // We now use plugins to mod our monsters. + json jMonsterMods = GetLocalJson(oModule, AI_MONSTER_MOD_JSON); + if(JsonGetType(jMonsterMods) != JSON_TYPE_NULL) + { + SetLocalJson(oModule, AI_MONSTER_JSON, jCreature); + SetLocalObject(oModule, AI_MONSTER_OBJECT, oCreature); + int nIndex; + string sMonsterMod = JsonGetString(JsonArrayGet(jMonsterMods, nIndex)); + while(sMonsterMod != "") + { + ExecuteScript(sMonsterMod, oPC); + sMonsterMod = JsonGetString(JsonArrayGet(jMonsterMods, ++nIndex)); + } + jCreature = GetLocalJson(oModule, AI_MONSTER_JSON); + } + int nSummon = GetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS) && + (GetHasFeat(FEAT_SUMMON_FAMILIAR, oCreature, TRUE)) || + GetHasFeat(FEAT_ANIMAL_COMPANION, oCreature, TRUE); + int nPercDist = GetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE) != 11 && + GetReputation(oCreature, oPC) < 11; + //WriteTimestampedLogEntry(GetName(oCreature) + ": fDistance: " + FloatToString(fDistance, 0, 2) + " nSummon: " + IntToString(nSummon) + + // " nPercDist: " + IntToString(nPercDist) + " Reputation: " + IntToString(GetReputation(oCreature, oPC))); + if(nSummon || nPercDist) + { + location lLocation = GetLocation(oCreature); + if(nPercDist) + { + json jPerception = JsonObjectGet(jCreature, "PerceptionRange"); + jPerception = JsonObjectSet(jPerception, "value", JsonInt(GetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE))); + jCreature = JsonObjectSet(jCreature, "PerceptionRange", jPerception); + } + if(nSummon) jCreature = ai_SetCompanionSummoning(oCreature, jCreature); + SetLocalInt(oModule, AI_MONSTER_CHANGED, TRUE); + } + if(GetLocalInt(oModule, AI_MONSTER_CHANGED)) + { + SetIsDestroyable(TRUE, FALSE, FALSE, oCreature); + location lLocation = GetLocation(oCreature); + DestroyObject(oCreature); + AssignCommand(oModule, DelayCommand(1.0, ai_CreateMonster(jCreature, lLocation, oModule))); + DeleteLocalInt(oModule, AI_MONSTER_CHANGED); + return TRUE; + } + else ai_CopyMonster(oCreature, oModule); + DeleteLocalJson(oModule, AI_MONSTER_JSON); + DeleteLocalObject(oModule, AI_MONSTER_OBJECT); + return FALSE; +} +// Special event scripts for Infinite Dungeons! +void ai_SetIDMonsterEventScripts(object oCreature) +{ + //if(AI_DEBUG) ai_Debug("0i_module", "433", "Changing " + GetName(oCreature) + "'s Infinte Dungeons event scripts."); + //********** On Heartbeat ********** + string sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT); + SetLocalString(oCreature, "AI_ON_HEARTBEAT", sScript); + if(sScript == "x2_def_heartbeat") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else if(sScript == "nw_c2_default1") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_HEARTBEAT SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Perception ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE); + SetLocalString(oCreature, "AI_ON_NOTICE", sScript); + if(sScript == "x2_def_percept") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "0e_id_events"); + else if(sScript == "nw_c2_default2") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_NOTICE SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On End Combat Round ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND); + SetLocalString(oCreature, "AI_ON_END_COMBATROUND", sScript); + if(sScript == "x2_def_endcombat") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "0e_id_events"); + else if(sScript == "nw_c2_default3") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_END_COMBATROUND SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Dialogue ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE); + SetLocalString(oCreature, "AI_ON_DIALOGUE", sScript); + if(sScript == "x2_def_onconv") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "0e_id_events"); + else if(sScript == "nw_c2_default4") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_DIALOGUE_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Melee Attacked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED); + SetLocalString(oCreature, "AI_ON_MELEE_ATTACKED", sScript); + if(sScript == "x2_def_attacked") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "0e_id_events"); + else if(sScript == "nw_c2_default5") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_MELEE_ATTACKED_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Damaged ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED); + SetLocalString(oCreature, "AI_ON_DAMAGED", sScript); + if(sScript == "x2_def_ondamage") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "0e_id_events"); + else if(sScript == "nw_c2_default6") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_DAMAGED_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + // We don't set OnDeath for Infinite Dungeons! + //********** On Death ********** + //sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH); + //SetLocalString(oCreature, "AI_ON_DEATH", sScript); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH, "0e_id_events"); + //********** On Disturbed ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED); + SetLocalString(oCreature, "AI_ON_DISTURBED", sScript); + if(sScript == "x2_def_ondisturb") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "0e_id_events"); + else if(sScript == "nw_c2_default8") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_DISTURBED_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + //********** On Rested ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED); + SetLocalString(oCreature, "AI_ON_RESTED", sScript); + if(sScript == "x2_def_rested") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "0e_id_events"); + else if(sScript == "nw_c2_defaulta") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_RESTED SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Spell Cast At ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT); + SetLocalString(oCreature, "AI_ON_SPELLCASTAT", sScript); + if(sScript == "x2_def_spellcast") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "0e_id_events"); + else if(sScript == "nw_c2_defaultb") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_SPELLCASTAT_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Blocked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR); + SetLocalString(oCreature, "AI_ON_BLOCKED_BY_DOOR", sScript); + if(sScript == "x2_def_onblocked") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "0e_id_events"); + else if(sScript == "nw_c2_defaulte") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_BLOCKED_BY_DOOR SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, ""); +} +// Special event scripts for Infinite Dungeons with PRC! +void ai_SetPRCIDMonsterEventScripts(object oCreature) +{ + //if(AI_DEBUG) ai_Debug("0i_module", "433", "Changing " + GetName(oCreature) + "'s Infinte Dungeons event scripts for PRC."); + //********** On Heartbeat ********** + string sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT); + SetLocalString(oCreature, "AI_ON_HEARTBEAT", sScript); + if(sScript == "x2_def_heartbeat") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_prc_id_events"); + else if(sScript == "nw_c2_default1") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_HEARTBEAT SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Perception ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE); + SetLocalString(oCreature, "AI_ON_NOTICE", sScript); + if(sScript == "x2_def_percept") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "0e_prc_id_events"); + else if(sScript == "nw_c2_default2") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_NOTICE SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On End Combat Round ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND); + SetLocalString(oCreature, "AI_ON_END_COMBATROUND", sScript); + if(sScript == "x2_def_endcombat") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "0e_prc_id_events"); + else if(sScript == "nw_c2_default3") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_END_COMBATROUND SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Dialogue ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE); + SetLocalString(oCreature, "AI_ON_DIALOGUE", sScript); + if(sScript == "x2_def_onconv") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "0e_prc_id_events"); + else if(sScript == "nw_c2_default4") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_DIALOGUE_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Melee Attacked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED); + SetLocalString(oCreature, "AI_ON_MELEE_ATTACKED", sScript); + if(sScript == "x2_def_attacked") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "0e_prc_id_events"); + else if(sScript == "nw_c2_default5") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_MELEE_ATTACKED_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Damaged ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED); + SetLocalString(oCreature, "AI_ON_DAMAGED", sScript); + if(sScript == "x2_def_ondamage") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "0e_prc_id_events"); + else if(sScript == "nw_c2_default6") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_DAMAGED_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + // We don't set OnDeath for PRC or Infinite dungeons. + //********** On Death ********** + //sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH); + //SetLocalString(oCreature, "AI_ON_DEATH", sScript); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH, "0e_prc_id_events"); + //********** On Disturbed ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED); + SetLocalString(oCreature, "AI_ON_DISTURBED", sScript); + if(sScript == "x2_def_ondisturb") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "0e_prc_id_events"); + else if(sScript == "nw_c2_default8") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_DISTURBED_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + //********** On Rested ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED); + SetLocalString(oCreature, "AI_ON_RESTED", sScript); + if(sScript == "x2_def_rested") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "0e_prc_id_events"); + else if(sScript == "nw_c2_defaulta") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_RESTED SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Spell Cast At ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT); + SetLocalString(oCreature, "AI_ON_SPELLCASTAT", sScript); + if(sScript == "x2_def_spellcast") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "0e_prc_id_events"); + else if(sScript == "nw_c2_defaultb") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_SPELLCASTAT_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Blocked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR); + SetLocalString(oCreature, "AI_ON_BLOCKED_BY_DOOR", sScript); + if(sScript == "x2_def_onblocked") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "0e_prc_id_events"); + else if(sScript == "nw_c2_defaulte") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_BLOCKED_BY_DOOR SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, ""); +} +// Special event scripts for PRC associates! +void ai_SetPRCAssociateEventScripts(object oCreature) +{ + //if(AI_DEBUG) ai_Debug("0i_module", "433", "Changing " + GetName(oCreature) + "'s Infinte Dungeons event scripts for PRC."); + //********** On Heartbeat ********** + string sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT); + SetLocalString(oCreature, "AI_ON_HEARTBEAT", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_prc_ch_events"); + else if(sScript == "nw_ch_ac1") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_prc_ch_events"); + //********** On Perception ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE); + SetLocalString(oCreature, "AI_ON_NOTICE", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "0e_prc_ch_events"); + else if(sScript == "nw_ch_ac2") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "0e_prc_ch_events"); + //********** On End Combat Round ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND); + SetLocalString(oCreature, "AI_ON_END_COMBATROUND", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "0e_prc_ch_events"); + else if(sScript == "nw_ch_ac3") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "0e_prc_ch_events"); + //********** On Dialogue ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE); + SetLocalString(oCreature, "AI_ON_DIALOGUE", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "0e_prc_ch_events"); + else if(sScript == "nw_ch_ac4") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "0e_prc_ch_events"); + //********** On Melee Attacked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED); + SetLocalString(oCreature, "AI_ON_MELEE_ATTACKED", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "0e_prc_ch_events"); + else if(sScript == "nw_ch_ac5") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "0e_prc_ch_events"); + //********** On Damaged ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED); + SetLocalString(oCreature, "AI_ON_DAMAGED", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "0e_prc_ch_events"); + else if(sScript == "nw_ch_ac6") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "0e_prc_ch_events"); + //********** On Disturbed ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED); + SetLocalString(oCreature, "AI_ON_DISTURBED", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "0e_prc_ch_events"); + else if(sScript == "nw_ch_ac8") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "0e_prc_ch_events"); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + //********** On Rested ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED); + SetLocalString(oCreature, "AI_ON_RESTED", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "0e_prc_ch_events"); + else if(sScript == "nw_ch_aca") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "0e_prc_ch_events"); + //********** On Spell Cast At ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT); + SetLocalString(oCreature, "AI_ON_SPELLCASTAT", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "0e_prc_ch_events"); + else if(sScript == "nw_ch_acb") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "0e_prc_ch_events"); + //********** On Blocked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR); + SetLocalString(oCreature, "AI_ON_BLOCKED_BY_DOOR", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "0e_prc_ch_events"); + else if(sScript == "nw_ch_ace") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "0e_prc_ch_events"); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, ""); + if(!GetCommandable(oCreature)) SetCommandable(TRUE, oCreature); +} +void ai_ChangeEventScriptsForMonster(object oCreature) +{ + //********** On Heartbeat ********** + string sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT); + if(sScript == "0e_c2_1_hb") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "nw_c2_default1"); + //********** On Perception ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE); + if(sScript == "0e_c2_2_percept") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "nw_c2_default2"); + //********** On End Combat Round ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND); + if(sScript == "0e_c2_3_endround") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "nw_c2_default3"); + //********** On Dialogue ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE); + if(sScript == "0e_c2_4_convers") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "nw_c2_default4"); + //********** On Melee Attacked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED); + if(sScript == "0e_c2_5_phyatked") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "nw_c2_default5"); + //********** On Damaged ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED); + if(sScript == "0e_c2_6_damaged") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "nw_c2_default6"); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH, "nw_c2_deafult7"); + //********** On Disturbed ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED); + if(sScript == "0e_c2_8_disturb") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "nw_c2_default8"); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "nw_c2_defaulta"); + //********** On Spell Cast At ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT); + if(sScript == "0e_c2_b_castat") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "nw_c2_defaultb"); + //********** On Blocked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR); + if(sScript == "0e_c2_e_blocked") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "nw_c2_defaulte"); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, "nw_c2_defaulte"); +} +void ai_ChangeEventScriptsForAssociate(object oCreature) +{ + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "nw_ch_ac1"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "nw_ch_ac2"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "nw_ch_ac3"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "nw_ch_ac4"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "nw_ch_ac5"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "nw_ch_ac6"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH, "nw_ch_ac7"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "nw_ch_ac8"); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "nw_ch_aca"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "nw_ch_acb"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "nw_ch_ace"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, "nw_ch_acd"); +} diff --git a/src/module/nss/0i_nui.nss b/src/module/nss/0i_nui.nss new file mode 100644 index 0000000..eab5ee7 --- /dev/null +++ b/src/module/nss/0i_nui.nss @@ -0,0 +1,434 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_nui +//////////////////////////////////////////////////////////////////////////////// + Include script for handling window displays. + + Use the following to get/set window information. + string sBind = NuiGetNthBind (oPlayer, nToken, FALSE, #); + json jMenuInfo = NuiGetBind (oPlayer, nToken, sBind); + # Gets json information for window : + 0 - string - "window_title" + 1 - json - "window_geometry" : "h", "w", "x", "y" + 2 - bool - "window_resizable" + 3 - bool - "window_closable" + 4 - bool - "window_transparent" + 5 - bool - "window_border" + + Layout pixel sizes: + Pixel height Title bar 33. + Pixel height Top border 10, between widgets 8, bottom border 10. + Pixel width Left border 10, between widgets 4, right border 10. + + Group outer lines add 12 to the vertical and horizontal lines. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_main" +#include "nw_inc_nui" +struct stComboBox +{ + json jIndex; + json jCombo; + json jRow; + json jResRefArray; + json jWinArray; + json jCanSummon; // Index of all the summons in summons.2da +}; + +// Saves the menu to the campaign database. +void SaveMenuToCampaignDb(object oPC, int nToken, string sWndId); +// Returns the middle of the screen for the x position. +// oPC using the menu. +// fMenuWidth - the width of the menu to display. +float GetGUIWidthMiddle(object oPC, float fMenuWidth); + +// Returns the middle of the screen for the y position. +// oPC using the menu. +// fMenuHeight - the height of the menu to display. +float GetGUIHeightMiddle(object oPC, float fMenuHeight); + +// Checks to see if sWndId is open. +// If the window is open it removes it and returns FALSE +// If the window is closed it returns TRUE +int IsWindowClosed(object oPC, string sWndId); + +// Returns the Window ID (nToken). +// oPC is the PC using the menu. +// jLayout is the Layout of the menu. +// sWinID is the string ID for this window. +// sTitle is the Title of the menu. +// fX is the X position of the menu (-1.0: Centers, -2.0: UpperRight on Mouse, -3.0: Centers top of mouse). +// fY is the Y position of the menu (-1.0: Centers, -2.0: UpperRight on Mouse, -3.0: Centers top of mouse). +// fWidth is the width of the menu. +// fHeight is the height of the menu. +// bResize - TRUE will all it to be resized. +// bCollapse - TRUE will allow the window to be collapsable. +// bClose - TRUE will allow the window to be closed. +// bTransparent - TRUE makes the menu transparent. +// bBorder - TRUE makes the menu have a border. +// sEventScript will fire this event script for this window. +int SetWindow(object oPC, json jLayout, string sWinID, string sTitle, float fX, float fY, float fWidth, float fHeight, int bResize, int bCollapse, int bClose, int bTransparent, int bBorder, string sEventScript = ""); + +// Creates a label element in jRow. +// jRow is the row the label goes into. +// sLabel is the text placed in the label. +// If "" is passed then it will create a bind of sId + "_label". +// fWidth is the width of the label. +// fHeight is the Height of the label. +// nHAlign is horizonal align [NUI_HALING_*]. +// nVAlign is vertial align [NUI_VALING_*]. +// sId is the bind the event uses sId + "_event". +// sTooltip is the tooltip bind value. +json CreateLabel(json jRow, string sLabel, string sId, float fWidth, float fHeight, int nHAlign = 0, int nVAlign = 0, float fMargin = -1.0, string sTooltip = ""); + +// Creates a basic button element in jRow. +// jRow is the row the label goes into. +// sLabel is the text placed in the button. If "" is passed then it will +// create a bind of sId + "_label". +// sId is the binds for the button and the event uses sId + "_event". +// fWidth is the width of the button. +// fHeight is the Height of the button. +// fMargin is the space around the button. +// sTooltip is the tooltip bind value. +json CreateButton(json jRow, string sLabel, string sId, float fWidth, float fHeight, float fMargin = -1.0, string sTooltip = ""); + +// Creates a basic button select element in jRow. +// jRow is the row the label goes into. +// sLabel is the text placed in the button. If "" is passed then it will +// create a bind of sId + "_label". +// sId is the binds for the button and the event uses sId + "_event". +// fWidth is the width of the button. +// fHeight is the Height of the button. +// sTooltip is the tooltip bind value. +json CreateButtonSelect(json jRow, string sLabel, string sId, float fWidth, float fHeight, string sToolTip = ""); + +// Creates a button element with an image in jRow. +// jRow is the row the label goes into. +// sImage is the resref of the image to use. +// If "" is passed then it will create a bind of sId + "_image". +// sId is the binds for the button and the event uses sId + "_event". +// fWidth is the width of the button. +// fHeight is the Height of the button. +// fMargin is the space around the button. +// sTooltip is the tooltip bind value. +json CreateButtonImage(json jRow, string sResRef, string sId, float fWidth, float fHeight, float fMargin = -1.0, string sTooltip = ""); + +// Creates a basic text box that is not editable element in jRow. +// jRow is the row the TextEdit box goes into. +// sId is the bind variable so we can change the text. +// fWidth the width of the box. +// fHeight the height of the box. +// bBorder will add border TRUE or remove it FALSE. +// nScroll use NUI_SCROLLBARS_* +// sTooltip is the tooltip bind value. +json CreateTextBox(json jRow, string sId, float fWidth, float fHeight, int bBorder = TRUE, int nScroll = NUI_SCROLLBARS_AUTO, string sTooltip = ""); + +// Creates a basic text edit box element in jRow. +// jRow is the row the TextEdit box goes into. +// sPlaceHolderBind is the bind for Placeholder. +// sValueBind is the bind variable so we can change the text. +// nMaxLength is the maximum lenght of the text (1 - 65535) +// bMultiline - True or False that is has multiple lines. +// fWidth the width of the box. +// fHeight the height of the box. +// sTooltip is the tooltip bind value. +json CreateTextEditBox(json jRow, string sPlaceHolderBind, string sValueBind, int nMaxLength, int bMultiline, float fWidth, float fHeight, string sToolTip = ""); + +// Creates a combo box element in jRow. +// jRow is the row the combo goes into. +// jCombo is the elements/list for the combo box. Use NuiComboEntry to add. +// sId is the binds for the combo and the event uses sId + "_event" +// sId + "_selected" is the bind for the selection in the combo box. +// fWidth is the width of the combo. +// fHeight is the Height of the combo. +// sTooltip is the tooltip bind value. +json CreateCombo(json jRow, json jCombo, string sId, float fWidth, float fHeight, string sToolTip = ""); + +// Creates an image element in jRow. +// jRow is the row the Image goes into. +// sImage is the resref of the image to use. If "" is passed then it will +// create a bind of sId + "_image". +// nAspect is the aspect of the image NUI_ASPECT_*. +// nHAlign is the horizontal alignment of the image NUI_HALIGN_*. +// nVAlign is the vertical alignment of the image NUI_VALIGN_*. +// fWidth the width of the box. +// fHeight the height of the box. +// sTooltip is the tooltip bind value. +json CreateImage(json jRow, string sResRef, string sId, int nAspect, int nHAlign, int nVAlign, float fWidth, float fHeight, float fMargin = -1.0, string sToolTip = ""); + +// Creates a check box element in jRow. +// jRow is the row the Checkbox box goes into. +// sLabel is the text placed in the label. +// If "" is passed then it will create a bind of sId + "_label". +// sId is the bind variable so we can change the text. +// sId + "_check" is the Bind:bool for if it is checked or not. +// fWidth is the width of the label. +// fHeight is the Height of the label. +// sTooltip is the tooltip bind value. +json CreateCheckBox(json jRow, string sLabel, string sId, float fWidth, float fHeight, string sToolTip = ""); + +// Creates a slider (Int based) element in jRow +// jRow is the row the Check box goes into. +// sId is the bind name. +// The binds are as follows. +// Value: sId + "_value" +// Minimum: sId + "_min" +// Maximum: sId + "_max" +// Step size: sId + "_stepsize" +// fWidth is the width of the slider. +// fHeight is the Height of the slider. +// sTooltip is the tooltip bind value. +json CreateSlider(json jRow, string sId, float fWidth, float fHeight, string sToolTip = ""); + +// Creates an Options element in jRow. +// jRow is the row the Options will start on. +// sId is the bind name. +// The binds are as follows: +// Value: sId + "_value" +// Event is sId + "_event" +// nDirection: NUI_DIRECTION_* +// fWidth is the width of the options labels. +// fHeight is the height of the options labels. +// sTooltip is the tooltip bind value. +json CreateOptions(json jRow, string sId, int nDirection, json jLabels, float fWidth, float fHeight, string sToolTip = ""); + +// Creates a list element in jRow. +// jRow is the row the list will start on. +// jElements is the list of elements in the list. Use NuiListTemplateCell to add. +// sId is the bind name. +// The binds are Event is sId + "_event". +// Row count is bound to sId + "_count". +// fRowHeight is the height of the rendered rows. +// fWidth is the width of the options labels. +// fHeight is the height of the options labels. +// sTooltip is the tooltip bind value. +json CreateList(json jRow, json jElements, string sId, float fRowHeight, float fWidth, float fHeight, string sTooltip = ""); + +// Placed here temporarily until we can clean up our includes! +void ai_SetDMWAccessButton(int nButton, int bOn = TRUE); +int ai_GetDMWAccessButton(int nButton); +void ai_SetDMAIAccessButton(int nButton, int bOn = TRUE); +int ai_GetDMAIAccessButton(int nButton); + +void SaveMenuToCampaignDb(object oPC, int nToken, string sWndId) +{ + json jGeometry = NuiGetBind(oPC, nToken, "window_geometry"); + float fX = JsonGetFloat(JsonObjectGet(jGeometry, "x")); + float fY = JsonGetFloat(JsonObjectGet(jGeometry, "y")); + string sName = ai_RemoveIllegalCharacters(GetName(oPC)); + json jLocations = ai_GetCampaignDbJson("locations", sName, AI_DM_TABLE); + json jNUI = JsonObjectGet(jLocations, sWndId); + if(JsonGetType(jNUI) == JSON_TYPE_NULL) jNUI = JsonObject(); + jNUI = JsonObjectSet(jNUI, "x", JsonFloat(fX)); + jNUI = JsonObjectSet(jNUI, "y", JsonFloat(fY)); + jLocations = JsonObjectSet(jLocations, sWndId, jNUI); + ai_SetCampaignDbJson("locations", jLocations, sName, AI_DM_TABLE); +} + +float GetGUIWidthMiddle(object oPC, float fMenuWidth) +{ + // Get players window information. + float fGUI_Width = IntToFloat(GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_WIDTH)); + float fGUI_Scale = IntToFloat(GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_SCALE)) / 100.0; + fMenuWidth = fMenuWidth * fGUI_Scale; + return (fGUI_Width / 2.0) - (fMenuWidth / 2.0); +} +float GetGUIHeightMiddle(object oPC, float fMenuHeight) +{ + // Get players window information. + float fGUI_Height = IntToFloat(GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_HEIGHT)); + float fGUI_Scale = IntToFloat(GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_SCALE)) / 100.0; + fMenuHeight = fMenuHeight * fGUI_Scale; + return (fGUI_Height / 2.0) - (fMenuHeight / 2.0); +} +int IsWindowClosed(object oPC, string sWndId) +{ + int nToken = NuiFindWindow(oPC, sWndId); + if(nToken) + { + NuiDestroy(oPC, nToken); + return FALSE; + } + return TRUE; +} +int SetWindow(object oPC, json jLayout, string sWinID, string sTitle, float fX, float fY, float fWidth, float fHeight, int bResize, int bCollapse, int bClose, int bTransparent, int bBorder, string sEventScript = "") +{ + json jWindow; + if (bCollapse) jWindow = NuiWindow (jLayout, NuiBind ("window_title"), NuiBind ("window_geometry"), + NuiBind ("window_resizable"), JsonNull (), NuiBind ("window_closable"), + NuiBind ("window_transparent"), NuiBind ("window_border")); + + else jWindow = NuiWindow (jLayout, NuiBind ("window_title"), NuiBind ("window_geometry"), + NuiBind ("window_resizable"), JsonBool (FALSE), NuiBind ("window_closable"), + NuiBind ("window_transparent"), NuiBind ("window_border")); + + int nToken = NuiCreate (oPC, jWindow, sWinID, sEventScript); + if(!bCollapse && !bClose && !bBorder) NuiSetBind (oPC, nToken, "window_title", JsonBool (FALSE)); + else NuiSetBind (oPC, nToken, "window_title", JsonString (sTitle)); + if (fX == -1.0) fX = GetGUIWidthMiddle (oPC, fWidth); + if (fY == -1.0) fY = GetGUIHeightMiddle (oPC, fHeight); + int nScale = GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_SCALE); + if(nScale != 100) + { + fHeight = fHeight * (IntToFloat(1050 - nScale) / 1000.0); + fWidth = fWidth * (IntToFloat(1200 - nScale) / 1000.0); + } + NuiSetBind (oPC, nToken, "window_geometry", NuiRect (fX, + fY, fWidth, fHeight)); + NuiSetBind (oPC, nToken, "window_resizable", JsonBool (bResize)); + NuiSetBind (oPC, nToken, "window_closable", JsonBool (bClose)); + NuiSetBind (oPC, nToken, "window_transparent", JsonBool (bTransparent)); + NuiSetBind (oPC, nToken, "window_border", JsonBool (bBorder)); + return nToken; +} +json CreateLabel(json jRow, string sLabel, string sId, float fWidth, float fHeight, int nHAlign = 0, int nVAlign = 0, float fMargin = -1.0, string sTooltip = "") +{ + json jLabel; + if(sLabel == "") jLabel = NuiId(NuiLabel(NuiBind(sId + "_label"), JsonInt(nHAlign), JsonInt(nVAlign)), sId); + else jLabel = NuiId(NuiLabel(JsonString(sLabel), JsonInt(nHAlign), JsonInt(nVAlign)), sId); + jLabel = NuiWidth(jLabel, fWidth); + jLabel = NuiHeight(jLabel, fHeight); + if (fMargin > -1.0) jLabel = NuiMargin(jLabel, fMargin); + if(sTooltip != "") jLabel = NuiTooltip (jLabel, NuiBind (sTooltip)); + return JsonArrayInsert(jRow, jLabel); +} +json CreateButton(json jRow, string sLabel, string sId, float fWidth, float fHeight, float fMargin = -1.0, string sTooltip = "") +{ + json jButton; + if(sLabel == "") jButton = NuiEnabled(NuiId(NuiButton(NuiBind (sId + "_label")), sId), NuiBind(sId + "_event")); + else jButton = NuiEnabled(NuiId(NuiButton(JsonString(sLabel)), sId), NuiBind(sId + "_event")); + jButton = NuiWidth(jButton, fWidth); + jButton = NuiHeight(jButton, fHeight); + if (fMargin > -1.0) jButton = NuiMargin(jButton, fMargin); + if (sTooltip != "") jButton = NuiTooltip(jButton, NuiBind (sTooltip)); + return JsonArrayInsert(jRow, jButton); +} +json CreateButtonSelect(json jRow, string sLabel, string sId, float fWidth, float fHeight, string sTooltip = "") +{ + json jButton; + if(sLabel == "") jButton = NuiEnabled(NuiId(NuiButtonSelect(NuiBind (sId + "_label"), NuiBind(sId)), sId), NuiBind(sId + "_event")); + else jButton = NuiEnabled(NuiId(NuiButtonSelect(JsonString(sLabel), NuiBind(sId)), sId), NuiBind(sId + "_event")); + jButton = NuiWidth(jButton, fWidth); + jButton = NuiHeight(jButton, fHeight); + if(sTooltip != "") jButton = NuiTooltip(jButton, NuiBind (sTooltip)); + return JsonArrayInsert(jRow, jButton); +} +json CreateButtonImage(json jRow, string sResRef, string sId, float fWidth, float fHeight, float fMargin = -1.0, string sTooltip = "") +{ + json jButton; + if(sResRef == "") jButton = NuiEnabled(NuiId (NuiButtonImage(NuiBind(sId + "_image")), sId), NuiBind(sId + "_event")); + else jButton = NuiEnabled(NuiId(NuiButtonImage(JsonString(sResRef)), sId), NuiBind(sId + "_event")); + jButton = NuiWidth(jButton, fWidth); + jButton = NuiHeight(jButton, fHeight); + if(fMargin > -1.0) jButton = NuiMargin(jButton, fMargin); + if(sTooltip != "") jButton = NuiTooltip(jButton, NuiBind (sTooltip)); + jButton = NuiEncouraged(jButton, NuiBind(sId + "_encouraged")); + return JsonArrayInsert(jRow, jButton); +} +json CreateTextBox(json jRow, string sId, float fWidth, float fHeight, int bBorder = TRUE, int nScroll = NUI_SCROLLBARS_AUTO, string sTooltip = "") +{ + json jTextBox = NuiEnabled(NuiText(NuiBind(sId), bBorder, nScroll), NuiBind(sId + "_event")); + jTextBox = NuiWidth(jTextBox, fWidth); + jTextBox = NuiHeight(jTextBox, fHeight); + if(sTooltip != "") jTextBox = NuiTooltip(jTextBox, NuiBind (sTooltip)); + return JsonArrayInsert(jRow, JsonObjectSet(jTextBox, "text_color", NuiColor (255, 0, 0))); +} +json CreateTextEditBox(json jRow, string sPlaceHolderBind, string sValueBind, int nMaxLength, int bMultiline, float fWidth, float fHeight, string sTooltip = "") +{ + json jObject = NuiEnabled(NuiTextEdit(NuiBind(sPlaceHolderBind), NuiBind(sValueBind), nMaxLength, bMultiline), NuiBind(sValueBind + "_event")); + jObject = NuiWidth(jObject, fWidth); + jObject = NuiHeight(jObject, fHeight); + if(sTooltip != "") jObject = NuiTooltip(jObject, NuiBind (sTooltip)); + return JsonArrayInsert(jRow, jObject); +} +json CreateCombo(json jRow, json jList, string sId, float fWidth, float fHeight, string sTooltip = "") +{ + json jCombo; + if(JsonGetType(jList) == JSON_TYPE_NULL) + { + jCombo = NuiId(NuiCombo(NuiBind(sId + "_list"), NuiBind(sId + "_selected")), sId + "_event"); + } + jCombo = NuiId(NuiCombo(jList, NuiBind (sId + "_selected")), sId); + jCombo = NuiEnabled(jCombo, NuiBind (sId + "_event")); + jCombo = NuiWidth(jCombo, fWidth); + jCombo = NuiHeight(jCombo, fHeight); + if(sTooltip != "") jCombo = NuiTooltip(jCombo, NuiBind(sTooltip)); + return JsonArrayInsert(jRow, jCombo); +} +json CreateImage(json jRow, string sResRef, string sId, int nAspect, int nHAlign, int nVAlign, float fWidth, float fHeight, float fMargin = -1.0, string sTooltip = "") +{ + json jImage; + if(sResRef == "") jImage = NuiEnabled(NuiId(NuiImage(NuiBind(sId + "_image"), JsonInt(nAspect), JsonInt(nHAlign), JsonInt(nVAlign)), sId), NuiBind(sId + "_event")); + else jImage = NuiEnabled(NuiId(NuiImage(JsonString(sResRef), JsonInt(nAspect), JsonInt(nHAlign), JsonInt(nVAlign)), sId), NuiBind(sId + "_event")); + jImage = NuiWidth(jImage, fWidth); + jImage = NuiHeight(jImage, fHeight); + if (fMargin > -1.0) jImage = NuiMargin(jImage, fMargin); + if(sTooltip != "") jImage = NuiTooltip(jImage, NuiBind(sTooltip)); + return JsonArrayInsert(jRow, jImage); +} +json CreateCheckBox(json jRow, string sLabel, string sId, float fWidth, float fHeight, string sTooltip = "") +{ + json jCheckBox; + if(sLabel == "") jCheckBox = NuiEnabled(NuiId(NuiCheck(NuiBind(sId + "_label"), NuiBind(sId + "_check")), sId), NuiBind(sId + "_event")); + else jCheckBox = NuiEnabled(NuiId(NuiCheck(JsonString(sLabel), NuiBind(sId + "_check")), sId), NuiBind(sId + "_event")); + jCheckBox = NuiWidth(jCheckBox, fWidth); + jCheckBox = NuiHeight(jCheckBox, fHeight); + if (sTooltip != "") jCheckBox = NuiTooltip (jCheckBox, NuiBind (sTooltip)); + return JsonArrayInsert(jRow, jCheckBox); +} +json CreateSlider(json jRow, string sId, float fWidth, float fHeight, string sTooltip = "") +{ + json jSlider; + jSlider = NuiEnabled(NuiId(NuiSlider(NuiBind(sId + "_value"), NuiBind(sId + "_min"), NuiBind(sId + "_max"), NuiBind(sId + "_stepsize")), sId), NuiBind(sId + "_event")); + jSlider = NuiWidth(jSlider, fWidth); + jSlider = NuiHeight(jSlider, fHeight); + if(sTooltip != "") jSlider = NuiTooltip(jSlider, NuiBind(sTooltip)); + return JsonArrayInsert(jRow, jSlider); +} +json CreateOptions(json jRow, string sId, int nDirection, json jLabels, float fWidth, float fHeight, string sTooltip = "") +{ + json jOption; + jOption = NuiEnabled(NuiId(NuiOptions(nDirection, jLabels, NuiBind(sId + "_value")), sId), NuiBind(sId + "_event")); + jOption = NuiWidth(jOption, fWidth); + jOption = NuiHeight(jOption, fHeight); + if(sTooltip != "") jOption = NuiTooltip (jOption, NuiBind (sTooltip)); + return JsonArrayInsert(jRow, jOption); +} +json CreateList(json jRow, json jElements, string sId, float fRowHeight, float fWidth, float fHeight, string sTooltip = "") +{ + json jList; + jList = NuiId(NuiList(jElements, NuiBind(sId), fRowHeight), sId + "_id"); + jList = NuiWidth(jList, fWidth); + jList = NuiHeight(jList, fHeight); + if (sTooltip != "") jList = NuiTooltip(jList, NuiBind(sTooltip)); + return JsonArrayInsert(jRow, jList); +} +void ai_SetDMWAccessButton(int nButton, int bOn = TRUE) +{ + json jRules = ai_GetCampaignDbJson("rules"); + int nWidgetButtons = JsonGetInt(JsonObjectGet(jRules, sDMWidgetAccessVarname)); + if(bOn) nWidgetButtons = nWidgetButtons | nButton; + else nWidgetButtons = nWidgetButtons & ~nButton; + SetLocalInt(GetModule(), sDMWidgetAccessVarname, nWidgetButtons); + jRules = JsonObjectSet(jRules, sDMWidgetAccessVarname, JsonInt(nWidgetButtons)); + ai_SetCampaignDbJson("rules", jRules); +} +int ai_GetDMWAccessButton(int nButton) +{ + int nWidgetButtons = GetLocalInt(GetModule(), sDMWidgetAccessVarname); + return nWidgetButtons & nButton; +} +void ai_SetDMAIAccessButton(int nButton, int bOn = TRUE) +{ + json jRules = ai_GetCampaignDbJson("rules"); + int nWidgetButtons = JsonGetInt(JsonObjectGet(jRules, sDMAIAccessVarname)); + if(bOn) nWidgetButtons = nWidgetButtons | nButton; + else nWidgetButtons = nWidgetButtons & ~nButton; + SetLocalInt(GetModule(), sDMAIAccessVarname, nWidgetButtons); + jRules = JsonObjectSet(jRules, sDMAIAccessVarname, JsonInt(nWidgetButtons)); + ai_SetCampaignDbJson("rules", jRules); +} +int ai_GetDMAIAccessButton(int nButton) +{ + int nWidgetButtons = GetLocalInt(GetModule(), sDMAIAccessVarname); + return nWidgetButtons & nButton; +} + diff --git a/src/module/nss/0i_player_target.nss b/src/module/nss/0i_player_target.nss new file mode 100644 index 0000000..bed4834 --- /dev/null +++ b/src/module/nss/0i_player_target.nss @@ -0,0 +1,793 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_player_target +//////////////////////////////////////////////////////////////////////////////// + Include script for handling player targeting functions. + +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +#include "0i_menus" +// Setup an AI OnPlayerTarget Event script while allowing any module onplayer +// target event script to still work. +void ai_SetupPlayerTarget(object oCreature); +// Selects a target for oAssocite to follow. +void ai_AllSelectTarget(object oPC, object oAssociate, object oTarget); +// Removes the Cutscene ghosts and variables from all associates. For original AI scripts. +void ai_OriginalRemoveAllActionMode(object oPC); +// Removes the Cutscene ghosts and Command mode from all associates. +void ai_RemoveAllActionMode(object oPC); +// Once a trap has been selected from the associates inventory move to placing the trap. +void ai_SelectTrap(object oPC, object oAssociate, object oItem); +// Place the selected trap at the location selected by the player for OBJECT_SELF. +void ai_PlaceTrap(object oPC, location lLocation); +// Adds a creature to nGroup for oDM +void ai_AddToGroup(object oDM, object oTarget, string sTargetMode); +// Has nGroup perform an action based on the selected target or location. +void ai_DMAction(object oDM, object oTarget, location lLocation, string sTargetMode); +// Get oPC to select a spell target for oAssociate. +void ai_SelectWidgetSpellTarget(object oPC, object oAssociate, string sElem); +// Updates oAssociates widget by destroying the current one and rebuilding. +void ai_UpdateAssociateWidget(object oPC, object oAssociate); +// Sets oAssociates action mode for nFeat from the quick widget menu +int ai_SetActionMode(object oAssociate, int nFeat); + +void ai_SetupPlayerTarget(object oCreature) +{ + object oModule = GetModule(); + string sModuleTargetEvent = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_TARGET); + if(sModuleTargetEvent != "") + { + if(sModuleTargetEvent != "0e_player_target") SetLocalString(oModule, AI_MODULE_TARGET_EVENT, sModuleTargetEvent); + } + SetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_TARGET, "0e_player_target"); +} +void ai_OriginalActionAssociate(object oPC, object oTarget, location lLocation) +{ + object oAssociate = OBJECT_SELF; + if(!GetLocalInt(oAssociate, sGhostModeVarname) && GetLocalInt(oPC, sGhostModeVarname)) + { + effect eGhost = EffectCutsceneGhost(); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, oAssociate); + SetLocalInt(oAssociate, sGhostModeVarname, TRUE); + } + int nObjectType = GetObjectType(oTarget); + ai_ClearCreatureActions(TRUE); + if(oTarget == GetArea(oPC)) + { + ActionMoveToLocation(lLocation, TRUE); + if(GetLocalObject(oPC, AI_FOLLOW_TARGET) == oAssociate) + { + float fFollowDistance = 3.0; + AssignCommand(oPC, ai_ClearCreatureActions()); + AssignCommand(oPC, ActionForceFollowObject(oAssociate, fFollowDistance)); + } + } + else if(nObjectType == OBJECT_TYPE_CREATURE) + { + if(oTarget != GetLocalObject(oPC, AI_TARGET_ASSOCIATE)) + { + if(GetMaster(oTarget) == oPC) + { + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_ACTION"); + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, oTarget); + ai_SendMessages(GetName(oTarget) + " is now in Action Mode.", AI_COLOR_YELLOW, oPC); + } + else ActionMoveToObject(oTarget, TRUE); + } + } + else if(nObjectType == OBJECT_TYPE_DOOR) + { + if(GetIsTrapped(oTarget) && GetAssociateState(NW_ASC_DISARM_TRAPS, oAssociate)) + { + if(GetTrapDetectedBy(oTarget, oPC)) SetTrapDetectedBy(oTarget, oAssociate); + if(GetTrapDetectedBy(oTarget, oAssociate)) + { + bkAttemptToDisarmTrap(oTarget); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); + return; + } + } + if(GetLocked(oTarget)) bkAttemptToOpenLock(oTarget); + if(GetIsOpen(oTarget)) + { + ActionCloseDoor(oTarget, TRUE); + } + else ActionOpenDoor(oTarget, TRUE); + } + else if(nObjectType == OBJECT_TYPE_ITEM) + { + ActionPickUpItem(oTarget); + } + else if(nObjectType == OBJECT_TYPE_PLACEABLE) + { + ActionMoveToObject(oTarget, TRUE); + if(GetHasInventory(oTarget)) + { + if(GetIsTrapped(oTarget) && GetAssociateState(NW_ASC_RETRY_OPEN_LOCKS, oAssociate)) + { + if(GetTrapDetectedBy(oTarget, oPC)) SetTrapDetectedBy(oTarget, oAssociate); + if(GetTrapDetectedBy(oTarget, oAssociate)) + { + bkAttemptToDisarmTrap(oTarget); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); + return; + } + if(GetLocked(oTarget)) + { + if(GetAssociateState(NW_ASC_RETRY_OPEN_LOCKS, oAssociate)) + { + bkAttemptToOpenLock(oTarget); + } + else AssignCommand(oAssociate, ai_HaveCreatureSpeak(oAssociate, 0, "This " + GetName(oTarget) + " is locked!")); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); + return; + } + DoPlaceableObjectAction(oTarget, PLACEABLE_ACTION_USE); + } + else if(GetLocked(oTarget)) + { + if(GetAssociateState(NW_ASC_RETRY_OPEN_LOCKS, oAssociate)) + { + bkAttemptToOpenLock(oTarget); + } + else AssignCommand(oAssociate, ai_HaveCreatureSpeak(oAssociate, 0, "This " + GetName(oTarget) + " is locked!")); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); + return; + } + DoPlaceableObjectAction(oTarget, PLACEABLE_ACTION_USE); + } + DoPlaceableObjectAction(oTarget, PLACEABLE_ACTION_USE); + } + else if(nObjectType == OBJECT_TYPE_TRIGGER) + { + if(GetIsTrapped(oTarget) && GetAssociateState(NW_ASC_RETRY_OPEN_LOCKS, oAssociate)) + { + if(GetTrapDetectedBy(oTarget, oPC)) SetTrapDetectedBy(oTarget, oAssociate); + if(GetTrapDetectedBy(oTarget, oAssociate)) bkAttemptToDisarmTrap(oTarget); + } + } + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); +} +void ai_OriginalActionAllAssociates(object oPC, object oTarget, location lLocation) +{ + object oAssociate; + int nIndex; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_OriginalActionAssociate(oPC, oTarget, lLocation)); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_OriginalActionAssociate(oPC, oTarget, lLocation)); + } +} +void ai_ActionAssociate(object oPC, object oTarget, location lLocation) +{ + object oAssociate = OBJECT_SELF; + if(ai_GetAIMode(oPC, AI_MODE_ACTION_GHOST) && + !ai_GetAIMode(oAssociate, AI_MODE_GHOST) && + !GetLocalInt(oAssociate, sGhostModeVarname)) + { + effect eGhost = EffectCutsceneGhost(); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, oAssociate); + SetLocalInt(oAssociate, sGhostModeVarname, TRUE); + } + int nObjectType = GetObjectType(oTarget); + ai_SetAIMode(oAssociate, AI_MODE_COMMANDED, TRUE); + ai_ClearCreatureActions(TRUE); + if(oTarget == GetArea(oPC)) + { + ActionMoveToLocation(lLocation, TRUE); + if(GetLocalObject(oPC, AI_FOLLOW_TARGET) == oAssociate) + { + float fFollowDistance = ai_GetFollowDistance(oPC); + if(GetDistanceBetween(oAssociate, oPC) <= fFollowDistance) + { + DelayCommand(fFollowDistance, AssignCommand(oPC, ActionMoveToObject(oAssociate, TRUE, fFollowDistance))); + } + else AssignCommand(oPC, ActionMoveToObject(oAssociate, TRUE, fFollowDistance)); + } + } + else if(nObjectType == OBJECT_TYPE_CREATURE) + { + if(GetIsDead(oTarget)) + { + AssignCommand(oAssociate, ActionDoCommand(ai_SearchObject(oAssociate, oTarget, oPC, TRUE))); + } + else if(GetIsEnemy(oTarget, oAssociate)) + { + // Lock them into attacking this target only. + SetLocalObject(oAssociate, AI_PC_LOCKED_TARGET, oTarget); + // This resets a henchmens failed Moral save in combat. + if(GetLocalString(oAssociate, AI_COMBAT_SCRIPT) == "ai_coward") + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, GetLocalString(oAssociate, AI_DEFAULT_SCRIPT)); + } + if(ai_GetIsInCombat(oAssociate)) ai_DoAssociateCombatRound(oAssociate, oTarget); + else + { + ai_HaveCreatureSpeak(oAssociate, 5, ":0:1:2:3:6:"); + ai_StartAssociateCombat(oAssociate, oTarget); + } + ai_SendMessages(GetName(oAssociate) + " is attacking " + GetName(oTarget), AI_COLOR_RED, oPC); + } + else + { + ActionMoveToObject(oTarget, TRUE); + // Player will be stuck with this variable if they are not using the AI. + DeleteLocalInt(oTarget, "AI_I_AM_BEING_HEALED"); + ActionDoCommand(ai_ActionTryHealing(oAssociate, oTarget)); + } + } + else if(nObjectType == OBJECT_TYPE_DOOR) + { + if(GetIsTrapped(oTarget)) + { + if(GetTrapDetectedBy(oTarget, oPC)) SetTrapDetectedBy(oTarget, oAssociate); + if(GetTrapDetectedBy(oTarget, oAssociate)) + { + int bStopAction = !GetLocalInt(oTarget, "AI_CANNOT_TRAP_" + GetTag(oAssociate)); + if(ai_ReactToTrap(oAssociate, oTarget, TRUE)) bStopAction = TRUE; + if(bStopAction) + { + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); + return; + } + } + } + if(GetLocked(oTarget)) ai_AttemptToByPassLock(oAssociate, oTarget, TRUE); + else if(GetIsOpen(oTarget)) ActionCloseDoor(oTarget, TRUE); + else ActionOpenDoor(oTarget, TRUE); + } + else if(nObjectType == OBJECT_TYPE_ITEM) + { + ActionPickUpItem(oTarget); + } + else if(nObjectType == OBJECT_TYPE_PLACEABLE) + { + ActionMoveToObject(oTarget, TRUE); + if(GetHasInventory(oTarget)) + { + if(GetIsTrapped(oTarget)) + { + if(GetTrapDetectedBy(oTarget, oPC)) SetTrapDetectedBy(oTarget, oAssociate); + if(GetTrapDetectedBy(oTarget, oAssociate)) + { + if(ai_ReactToTrap(oAssociate, oTarget, TRUE)) + { + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); + return; + } + + } + } + if(GetLocked(oTarget)) ai_AttemptToByPassLock(oAssociate, oTarget, TRUE); + else ActionDoCommand(ai_SearchObject(oAssociate, oTarget, oPC, TRUE)); + } + else + { + if(ai_GetAIMode(oAssociate, AI_MODE_BASH_LOCKS)) + { + AssignCommand(oAssociate, ai_ClearCreatureActions()); + // Check to make sure we are using a melee weapon. + if(ai_GetIsMeleeWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oAssociate)) || + ai_EquipBestMeleeWeapon(oAssociate)) + { + AssignCommand(oAssociate, ActionWait(1.0)); + AssignCommand(oAssociate, ActionAttack(oTarget)); + } + } + else AssignCommand(oAssociate, DoPlaceableObjectAction(oTarget, PLACEABLE_ACTION_USE)); + } + } + else if(nObjectType == OBJECT_TYPE_TRIGGER) + { + if(GetIsTrapped(oTarget)) + { + if(GetTrapDetectedBy(oTarget, oPC)) SetTrapDetectedBy(oTarget, oAssociate); + if(GetTrapDetectedBy(oTarget, oAssociate)) ai_ReactToTrap(oAssociate, oTarget, TRUE); + } + } + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); +} +void ai_ActionAllAssociates(object oPC, object oTarget, location lLocation) +{ + object oAssociate; + int nIndex; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_ActionAssociate(oPC, oTarget, lLocation)); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_ActionAssociate(oPC, oTarget, lLocation)); + } +} +void ai_SelectFollowTarget(object oPC, object oAssociate, object oTarget) +{ + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + int nToken = NuiFindWindow(oPC, sAssociateType + AI_WIDGET_NUI); + float fRange = GetLocalFloat(oAssociate, AI_FOLLOW_RANGE) + + StringToFloat(Get2DAString("appearance", "PREFATCKDIST", GetAppearanceType(oAssociate))); + string sRange = FloatToString(fRange, 0, 0); + if(oAssociate == oTarget) + { + ai_SetAIMode(oAssociate, AI_MODE_FOLLOW, FALSE); + DeleteLocalObject(oAssociate, AI_FOLLOW_TARGET); + string sTarget; + if(ai_GetIsCharacter(oAssociate)) + { + sTarget = "nobody"; + ai_SendMessages(GetName(oAssociate) + " is not following anyone now!", AI_COLOR_YELLOW, oPC); + } + else + { + sTarget = GetName(oPC); + ai_SendMessages(GetName(oAssociate) + " is now following " + sTarget + "!", AI_COLOR_YELLOW, oPC); + } + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_follow_target_tooltip", " " + GetName(oAssociate) + " following " + sTarget + " [" + sRange + " meters]"); + } + else + { + ai_SetAIMode(oAssociate, AI_MODE_FOLLOW, TRUE); + SetLocalObject(oAssociate, AI_FOLLOW_TARGET, oTarget); + ai_SendMessages(GetName(oAssociate) + " is now following " + GetName(oTarget) + ".", AI_COLOR_YELLOW, oPC); + AssignCommand(oAssociate, ActionMoveToObject(oTarget, TRUE, ai_GetFollowDistance(oAssociate))); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_follow_target_tooltip", " " + GetName(oAssociate) + " following " + GetName(oTarget) + " [" + sRange + " meters]"); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_OriginalRemoveAllActionMode(object oPC) +{ + if(!ai_GetAIMode(oPC, AI_MODE_ACTION_GHOST)) return; + object oAssociate; + int nIndex; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID && + !ai_GetAIMode(oAssociate, AI_MODE_GHOST) && + GetLocalInt(oAssociate, sGhostModeVarname)) + { + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID && + !ai_GetAIMode(oAssociate, AI_MODE_GHOST) && + GetLocalInt(oAssociate, sGhostModeVarname)) + { + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + } +} +void ai_RemoveAllActionMode(object oPC) +{ + object oAssociate; + int nIndex; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) + { + ai_SetAIMode(oAssociate, AI_MODE_COMMANDED, FALSE); + if(ai_GetAIMode(oPC, AI_MODE_ACTION_GHOST) && + !ai_GetAIMode(oAssociate, AI_MODE_GHOST) && + GetLocalInt(oAssociate, sGhostModeVarname)) + { + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + ExecuteScript("nw_ch_ac1", oAssociate); + } + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) + { + ai_SetAIMode(oAssociate, AI_MODE_COMMANDED, FALSE); + if(ai_GetAIMode(oPC, AI_MODE_ACTION_GHOST) && + !ai_GetAIMode(oAssociate, AI_MODE_GHOST) && + GetLocalInt(oAssociate, sGhostModeVarname)) + { + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + ExecuteScript("nw_ch_ac1", oAssociate); + } + } +} +void ai_SelectTrap(object oPC, object oAssociate, object oItem) +{ + if(GetBaseItemType(oItem) != BASE_ITEM_TRAPKIT) + { + ai_SendMessages("A trap kit was not selected.", AI_COLOR_YELLOW, oPC); + return; + } + ai_SendMessages("Now select a location to place the trap.", AI_COLOR_YELLOW, oPC); + SetLocalObject(oAssociate, "AI_TRAP_KIT", oItem); + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_PLACE_TRAP"); + OpenInventory(oAssociate, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_TILE, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); +} +void ai_PlaceTrap(object oPC, location lLocation) +{ + object oItem = GetLocalObject(OBJECT_SELF, "AI_TRAP_KIT"); + itemproperty ipTrap = GetFirstItemProperty(oItem); + if(GetItemPropertyType(ipTrap) == ITEM_PROPERTY_TRAP) + { + ActionUseItemAtLocation(oItem, ipTrap, lLocation); + } + else ai_SendMessages("This trap kit does not have a trap property!", AI_COLOR_YELLOW, oPC); +} +void ai_AddToGroup(object oDM, object oTarget, string sTargetMode) +{ + string sGroup = GetStringRight(sTargetMode, 1); + if(oDM == oTarget) + { + ai_SendMessages("Group " + sGroup + " has been cleared.", AI_COLOR_YELLOW, oDM); + string sText = "Group " + sGroup; + NuiSetBind(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI), "btn_cmd_group" + sGroup + "_tooltip", JsonString(sText + " (Left Action/Right Add)")); + NuiSetBind(oDM, NuiFindWindow(oDM, "dm" + AI_COMMAND_NUI), "btn_cmd_group" + sGroup + "_tooltip", JsonString(sText + " (Left Action/Right Add)")); + NuiSetBind(oDM, NuiFindWindow(oDM, "dm" + AI_COMMAND_NUI), "btn_cmd_group" + sGroup + "_label", JsonString(sText)); + DeleteLocalJson(oDM, "DM_GROUP" + sGroup); + return; + } + string sName = GetName(oTarget); + json jGroup = GetLocalJson(oDM, "DM_GROUP" + sGroup); + if(JsonGetType(jGroup) == JSON_TYPE_NULL) + { + string sText = sName + "'s group"; + NuiSetBind(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI), "btn_cmd_group" + sGroup + "_tooltip", JsonString(sText + " [Run]")); + NuiSetBind(oDM, NuiFindWindow(oDM, "dm" + AI_COMMAND_NUI), "btn_cmd_group" + sGroup + "_tooltip", JsonString(sText + " [Run]")); + NuiSetBind(oDM, NuiFindWindow(oDM, "dm" + AI_COMMAND_NUI), "btn_cmd_group" + sGroup + "_label", JsonString(sText)); + jGroup = JsonArrayInsert(JsonArray(), JsonInt(1)); + } + string sUUID = GetObjectUUID(oTarget); + int nIndex = 1; + string sListUUID = JsonGetString(JsonArrayGet(jGroup, nIndex)); + while(sListUUID != "") + { + if(sListUUID == sUUID) + { + ai_SendMessages("This creature is already in the group!", AI_COLOR_RED, oDM); + return; + } + sListUUID = JsonGetString(JsonArrayGet(jGroup, ++nIndex)); + } + jGroup = JsonArrayInsert(jGroup, JsonString(sUUID)); + ai_SendMessages(sName + " has been saved to group" + sGroup, AI_COLOR_YELLOW, oDM); + SetLocalJson(oDM, "DM_GROUP" + sGroup, jGroup); + EnterTargetingMode(oDM, OBJECT_TYPE_CREATURE, MOUSECURSOR_PICKUP, MOUSECURSOR_PICKUP_DOWN); +} +void ai_MonsterAction(object oDM, object oTarget, location lLocation, int bRun, int nIndex) +{ + object oCreature = OBJECT_SELF; + int nObjectType = GetObjectType(oTarget); + ai_ClearCreatureActions(TRUE); + if(oTarget == GetArea(oDM)) + { + ActionMoveToLocation(lLocation, bRun); + } + else if(nObjectType == OBJECT_TYPE_CREATURE) + { + if(GetIsDead(oTarget)) return; + else if(GetIsEnemy(oTarget, oCreature)) + { + // Lock them into attacking this target only. + SetLocalObject(oCreature, AI_PC_LOCKED_TARGET, oTarget); + // This resets a creatures failed Moral save in combat. + if(GetLocalString(oCreature, AI_COMBAT_SCRIPT) == "ai_coward") + { + SetLocalString(oCreature, AI_COMBAT_SCRIPT, GetLocalString(oCreature, AI_DEFAULT_SCRIPT)); + } + if(ai_GetIsInCombat(oCreature)) ai_DoMonsterCombatRound(oCreature); + else + { + ai_HaveCreatureSpeak(oCreature, 5, ":0:1:2:3:6:"); + ai_StartMonsterCombat(oCreature); + } + if(nIndex == 1) + { + ai_SendMessages(GetName(oCreature) + "'s group is attacking " + GetName(oTarget), AI_COLOR_RED, oDM); + } + } + else if(oTarget == oDM) + { + if(GetLocalInt(oCreature, "AI_FOLLOWING_DM")) + { + ClearAllActions(FALSE, oCreature); + DeleteLocalInt(oCreature, "AI_FOLLOWING_DM"); + if(nIndex == 1) + { + ai_SendMessages(GetName(oCreature) + "'s group has stopped following you.", AI_COLOR_RED, oDM); + } + } + else + { + ActionForceFollowObject(oDM, 4.0); + SetLocalInt(oCreature, "AI_FOLLOWING_DM", TRUE); + if(nIndex == 1) + { + ai_SendMessages(GetName(oCreature) + "'s group is following you.", AI_COLOR_RED, oDM); + } + } + } + else + { + ActionMoveToObject(oTarget, TRUE); + // Player will be stuck with this variable if they are not using the AI. + DeleteLocalInt(oTarget, "AI_I_AM_BEING_HEALED"); + ActionDoCommand(ai_ActionTryHealing(oCreature, oTarget)); + if(nIndex == 1) + { + ai_SendMessages(GetName(oCreature) + "'s group is moving to and attempting to heal " + GetName(oTarget), AI_COLOR_RED, oDM); + } + } + } + else if(nObjectType == OBJECT_TYPE_DOOR) + { + if(GetIsTrapped(oTarget)) + { + if(GetTrapDetectedBy(oTarget, oDM)) SetTrapDetectedBy(oTarget, oCreature); + if(GetTrapDetectedBy(oTarget, oCreature)) + { + ai_ReactToTrap(oCreature, oTarget, TRUE); + EnterTargetingMode(oDM, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); + return; + } + else if(GetLocked(oTarget)) ai_AttemptToByPassLock(oCreature, oTarget); + } + else if(GetLocked(oTarget)) ai_AttemptToByPassLock(oCreature, oTarget); + else if(GetIsOpen(oTarget)) + { + ActionCloseDoor(oTarget, TRUE); + } + else ActionOpenDoor(oTarget, TRUE); + } + else if(nObjectType == OBJECT_TYPE_ITEM) + { + ActionPickUpItem(oTarget); + } + else if(nObjectType == OBJECT_TYPE_PLACEABLE) + { + ActionMoveToObject(oTarget, TRUE); + if(GetHasInventory(oTarget)) + { + if(GetIsTrapped(oTarget)) + { + if(GetTrapDetectedBy(oTarget, oDM)) SetTrapDetectedBy(oTarget, oCreature); + if(GetTrapDetectedBy(oTarget, oCreature)) + { + ai_ReactToTrap(oCreature, oTarget, TRUE); + EnterTargetingMode(oDM, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); + return; + } + if(GetLocked(oTarget)) + { + if(!ai_AttemptToByPassLock(oCreature, oTarget)) + { + AssignCommand(oCreature, ai_HaveCreatureSpeak(oCreature, 0, "This " + GetName(oTarget) + " is locked!")); + } + EnterTargetingMode(oDM, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); + return; + } + DoPlaceableObjectAction(oTarget, PLACEABLE_ACTION_USE); + } + else if(GetLocked(oTarget)) + { + if(ai_AttemptToByPassLock(oCreature, oTarget)) + { + AssignCommand(oCreature, ai_HaveCreatureSpeak(oCreature, 0, "This " + GetName(oTarget) + " is locked!")); + } + EnterTargetingMode(oDM, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); + return; + } + ActionDoCommand(ai_SearchObject(oCreature, oTarget, oDM, TRUE)); + } + DoPlaceableObjectAction(oTarget, PLACEABLE_ACTION_USE); + } + else if(nObjectType == OBJECT_TYPE_TRIGGER) + { + if(GetIsTrapped(oTarget)) + { + if(GetTrapDetectedBy(oTarget, oDM)) SetTrapDetectedBy(oTarget, oCreature); + if(GetTrapDetectedBy(oTarget, oCreature)) ai_ReactToTrap(oCreature, oTarget, TRUE); + } + } + EnterTargetingMode(oDM, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); +} +void ai_DMAction(object oDM, object oTarget, location lLocation, string sTargetMode) +{ + string sGroup = GetStringRight(sTargetMode, 1); + json jGroup = GetLocalJson(oDM, "DM_GROUP" + sGroup); + int bRun = JsonGetInt(JsonArrayGet(jGroup, 0)); + int nIndex = 1; + string sUUID = JsonGetString(JsonArrayGet(jGroup, nIndex)); + object oCreature; + while(sUUID != "") + { + oCreature = GetObjectByUUID(sUUID); + AssignCommand(oCreature, ai_MonsterAction(oDM, oTarget, lLocation, bRun, nIndex)); + sUUID = JsonGetString(JsonArrayGet(jGroup, ++nIndex)); + } + if(nIndex == 0) ai_SendMessages("Group" + sGroup + " is empty!", AI_COLOR_RED, oDM); +} +void ai_SelectWidgetSpellTarget(object oPC, object oAssociate, string sElem) +{ + int nIndex; + if(GetStringLength(sElem) == 13) nIndex = StringToInt(GetStringRight(sElem, 2)); + else nIndex = StringToInt(GetStringRight(sElem, 1)); + SetLocalInt(oAssociate, "AI_WIDGET_SPELL_INDEX", nIndex); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + json jSpell = JsonArrayGet(jWidget, nIndex); + int nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + int nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + if(nClass == -1) // This is an Item. + { + object oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + int nBaseItemType = GetBaseItemType(oItem); + if(Get2DAString("spells", "Range", nSpell) == "P" || // Self + nBaseItemType == BASE_ITEM_ENCHANTED_POTION || + nBaseItemType == BASE_ITEM_POTIONS) + { + int nIprpSubType = JsonGetInt(JsonArrayGet(jSpell, 4)); + itemproperty ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + if(nIprpSubType == GetItemPropertySubType(ipProperty)) break; + ipProperty = GetNextItemProperty(oItem); + } + if(ai_GetIsInCombat(oAssociate)) AssignCommand(oAssociate, ai_ClearCreatureActions(TRUE)); + AssignCommand(oAssociate, ActionUseItemOnObject(oItem, ipProperty, oAssociate)); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + return; + } + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_USE_ITEM"); + if(nSpell == SPELL_HEALINGKIT) + { + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_MAGIC, MOUSECURSOR_NOMAGIC); + return; + } + } + else // Feats, Spells, Special Abilities. + { + int nFeat = JsonGetInt(JsonArrayGet(jSpell, 5)); + if(nFeat) + { + if(!nSpell || Get2DAString("spells", "Range", nSpell) == "P" || // Self + nFeat == FEAT_SUMMON_FAMILIAR || nFeat == FEAT_ANIMAL_COMPANION || + nFeat == FEAT_TURN_UNDEAD) + { + if(ai_GetIsInCombat(oAssociate)) AssignCommand(oAssociate, ai_ClearCreatureActions(TRUE)); + // Adjust the spell used for wild shape and other shape feats. + if(nFeat == FEAT_WILD_SHAPE) nSpell += 607; + if(nFeat == FEAT_ELEMENTAL_SHAPE) + { + if(nSpell == 397) nSpell == SUBFEAT_ELEMENTAL_SHAPE_FIRE; + else if(nSpell == 398) nSpell == SUBFEAT_ELEMENTAL_SHAPE_WATER; + else if(nSpell == 399) nSpell == SUBFEAT_ELEMENTAL_SHAPE_EARTH; + else if(nSpell == 400) nSpell == SUBFEAT_ELEMENTAL_SHAPE_AIR; + } + // Do special targeting for attack feats. + if(nFeat == FEAT_STUNNING_FIST || nFeat == FEAT_DIRTY_FIGHTING || + nFeat == FEAT_WHIRLWIND_ATTACK || nFeat == FEAT_QUIVERING_PALM || + nFeat == FEAT_KNOCKDOWN || nFeat == FEAT_IMPROVED_KNOCKDOWN || + nFeat == FEAT_SAP || nFeat == FEAT_KI_DAMAGE || + nFeat == FEAT_DISARM || nFeat == FEAT_IMPROVED_DISARM || + nFeat == FEAT_SMITE_EVIL || nFeat == FEAT_SMITE_GOOD) + { + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_USE_FEAT"); + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, oAssociate); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_ATTACK, MOUSECURSOR_NOATTACK); + } + // Check feat and adjust if it is an action mode feat. + if(ai_SetActionMode(oAssociate, nFeat)) return; + AssignCommand(oAssociate, ActionUseFeat(nFeat, oAssociate, nSpell)); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + return; + } + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_USE_FEAT"); + } + else SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_CAST_SPELL"); + } + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, oAssociate); + int nObjectType; + string sTarget = Get2DAString("spells", "TargetType", nSpell); + int nTarget = ai_HexStringToInt(sTarget); + //SendMessageToPC(GetFirstPC(), "nTarget: " + IntToString(nTarget)); + if((nTarget & 1) && !(nTarget & 2) &&!(nTarget & 4)) + { + if(ai_GetIsInCombat(oAssociate)) AssignCommand(oAssociate, ai_ClearCreatureActions(TRUE)); + ai_CastWidgetSpell(oPC, oAssociate, oAssociate, GetLocation(oAssociate)); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + return; + } + if((nTarget & 1) || (nTarget & 2)) nObjectType += OBJECT_TYPE_CREATURE; + if(nTarget & 4) nObjectType += OBJECT_TYPE_TILE; + if(nTarget & 8) nObjectType += OBJECT_TYPE_ITEM; + if(nTarget & 16) nObjectType += OBJECT_TYPE_DOOR; + if(nTarget & 32) nObjectType += OBJECT_TYPE_PLACEABLE; + if(nTarget & 64) nObjectType += OBJECT_TYPE_TRIGGER; + string sShape = Get2DAString("spells", "TargetShape", nSpell); + int nShape, nSetData; + float fRange; + if(oPC == oAssociate) + { + nSetData = TRUE; + fRange = ai_GetSpellRange(nSpell); + if(fRange == 0.1) fRange = 0.0; + } + if(sShape == "sphere") + { + nShape = SPELL_TARGETING_SHAPE_SPHERE; + nSetData = TRUE; + } + else if(sShape == "rectangle") + { + nShape = SPELL_TARGETING_SHAPE_RECT; + nSetData = TRUE; + } + else if(sShape == "hsphere") + { + nShape = SPELL_TARGETING_SHAPE_HSPHERE; + nSetData = TRUE; + } + else if(sShape == "cone") nShape = SPELL_TARGETING_SHAPE_CONE; + else nShape = SPELL_TARGETING_SHAPE_NONE; + if(nSetData) + { + float fSizeX = StringToFloat(Get2DAString("spells", "TargetSizeX", nSpell)); + float fSizeY = StringToFloat(Get2DAString("spells", "TargetSizeY", nSpell)); + int nFlags = StringToInt(Get2DAString("spells", "TargetFlags", nSpell)); + SetEnterTargetingModeData(oPC, nShape, fSizeX, fSizeY, nFlags, fRange); + } + EnterTargetingMode(oPC, nObjectType, MOUSECURSOR_MAGIC, MOUSECURSOR_NOMAGIC); +} +void ai_UpdateAssociateWidget(object oPC, object oAssociate) +{ + int nUIToken = NuiFindWindow(oPC, ai_GetAssociateType(oPC, oAssociate) + AI_WIDGET_NUI); + if(nUIToken) + { + DelayCommand(0.0, NuiDestroy(oPC, nUIToken)); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + /* Not sure why I did this? + if(oPC != oAssociate) + { + nUIToken = NuiFindWindow(oPC, "pc" + AI_WIDGET_NUI); + if(nUIToken) + { + DelayCommand(0.0, NuiDestroy(oPC, nUIToken)); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oPC)); + } + } */ + } +} +int ai_SetActionMode(object oAssociate, int nFeat) +{ + int nMode; + if(nFeat == FEAT_POWER_ATTACK) nMode = ACTION_MODE_POWER_ATTACK; + else if(nFeat == FEAT_RAPID_SHOT) nMode = ACTION_MODE_RAPID_SHOT; + else if(nFeat == FEAT_FLURRY_OF_BLOWS) nMode = ACTION_MODE_FLURRY_OF_BLOWS; + else if(nFeat == FEAT_IMPROVED_POWER_ATTACK) nMode = ACTION_MODE_IMPROVED_POWER_ATTACK; + else if(nFeat == FEAT_EXPERTISE) nMode = ACTION_MODE_EXPERTISE; + else if(nFeat == FEAT_IMPROVED_EXPERTISE) nMode = ACTION_MODE_IMPROVED_EXPERTISE; + else if(nFeat == FEAT_DIRTY_FIGHTING) nMode = ACTION_MODE_DIRTY_FIGHTING; + if(nMode) + { + SetActionMode(oAssociate, nMode, !GetActionMode(oAssociate, nMode)); + return TRUE; + } + return FALSE; +} diff --git a/src/module/nss/0i_spells.nss b/src/module/nss/0i_spells.nss new file mode 100644 index 0000000..b7b75e2 --- /dev/null +++ b/src/module/nss/0i_spells.nss @@ -0,0 +1,2157 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// + Script Name: 0i_spells + Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// + Include scripts for base spells. + +Category: + Enhancement E + Protection P +Indiscriminant I + Discriminant D + Range R + Touch T + Summon S + Healing H + Cure C + +Buff Duration: +1 - All +2 - Short +3 - Long + +Buff Target: + 0 - Caster only + 1-6 Str, Dex, Con, Int, Wis, Cha: Highest Ability Score + 7 - Lowest AC + 8 - Lowest AC without AC Bonus + 9 - Highest Atk + 10 - Most Wounded + 11 - Lowest Fortitude + 12 - Lowest Reflex + 13 - Lowest Will + 14 - Lowest total saves + 15 - Buffs an Item + +Buff Groups: +-1 - Elemental Resistances. +-2 - Summons +-3 - AC (Non armor) +-4 - AC (for Armor/Shield) +-5 - Chance to Miss (Invisibility) +-6 - Regeneration +-7 - Globes of Invulnerablitity +-8 - Damage Reduction +-9 - Mantles +-10 - Alignment vs Chaos +-11 - Alignment vs Evil +-12 - Alignment vs Good +-13 - Alignment vs Law +-14 - Atk Bonus (for Weapon) +-15 - Light effects +-16 - Haste effects +-17 - Polymorph effects +*///////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_messages" +#include "0i_states_cond" +#include "0i_items" +#include "X0_I0_POSITION" +struct stSpell +{ + object oPC; + object oCaster; + object oTarget; + int nBuffType; + int nTarget; + int nPosition; + int nClass; + int nLevel; + int nMaxSlots; + int nSlot; +}; +// Returns TRUE if oCreature can cast nSpell from nLevel. +int ai_GetCanCastSpell(object oCreature, int nSpell, int nClass, int nLevel, int nMetaMagic = 0, int nDomain = 0); +// Returns TRUE if oCreature is immune to petrification. +int ai_IsImmuneToPetrification(object oCaster, object oCreature); +// Returns TRUE if oCreature has an effect from a mind affecting spell. +int ai_DoIHaveAMindAffectingSpellOnMe(object oCreature); +// Returns TRUE if nSpell is a cure spell. +int ai_IsCureSpell(int nSpell); +// Returns TRUE if nSpell is an inflict spell. +int ai_IsInflictSpell(int nSpell); +// Returns TRUE if nSpell is an area of effect spell. +int ai_IsAreaOfEffectSpell(int nSpell); +// Returns 1(TRUE) if oAssociate is a spellcaster. +// Rturns 2(TRUE) if oAssociate is a memorizing spellcaster. +int ai_GetIsSpellCaster(object oAssociate); +// Returns TRUE if oCreature is immune to nSpells effects. +int ai_CreatureImmuneToEffect(object oCaster, object oCreature, int nSpell); +// Returns the ranged of nSpell from the spells.2da(Column "Range"). +// S = 8.0f, M = 20.0f, L = 40.0f, T = 5.0f, else = 0.1f; +float ai_GetSpellRange(int nSpell); +// Returns TRUE if oTarget has a spell that we would want to dispel. +// Checks for harmful effects as well as buffing effects. +int ai_CreatureHasDispelableEffect(object oCaster, object oCreature); +// Remove nEffectType of Type specified on oCreature; +// nEffectType uses the constants EFFECT_TYPE_* +void ai_RemoveASpecificEffect(object oCreature, int nEffectType); +// Returns TRUE if oCreature has nEffectType. +// nEffectType uses the constants EFFECT_TYPE_* +int ai_GetHasEffectType(object oCreature, int nEffectType); +// Checks oCreature for special abilities have a long duration. +void ai_CheckCreatureSpecialAbilities(object oCreature); +// Checks oCreature for the silence effect and if the spell only has a somatic component. +int ai_IsSilenced(object oCreature, int nSpell); +// Returns TRUE if ArcaneSpellFailure is too high to chance casting the spell. +int ai_ArcaneSpellFailureTooHigh(object oCreature, int nClass, int nLevel, int nSlot); +// Returns TRUE if oCaster casts nSpell on oTarget. +// This will only cast the spell if oTarget DOES NOT already have the spell +// effect, and the caster has the spell ready. +int ai_TryToCastSpell(object oCaster, int nSpell, object oTarget); +// In "Buff_Target" column the value of 0 in the "ai_spells.2da" references the Caster. +// In "Buff_Target" column this is value 1-6(STR, DEX, CON, INT, WIS, CHA) in the "ai_spells.2da". +object ai_BuffHighestAbilityScoreTarget(object oCaster, int nSpell, int nAbilityScore, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 7 in the "ai_spells.2da". +object ai_BuffLowestACTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 8 in the "ai_spells.2da". +object ai_BuffLowestACWithOutACBonus(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 9 in the "ai_spells.2da". +object ai_BuffHighestAttackTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 10 in the "ai_spells.2da". +object ai_BuffMostWoundedTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 11 in the "ai_spells.2da". +object ai_BuffLowestFortitudeSaveTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 12 in the "ai_spells.2da". +object ai_BuffLowestReflexSaveTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 13 in the "ai_spells.2da". +object ai_BuffLowestWillSaveTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 14 in the "ai_spells.2da". +object ai_BuffLowestSaveTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 15 in the "ai_spells.2da". +object ai_BuffItemTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// Returns a target for nSpell cast by oCaster based on ai_spells.2da file. +object ai_GetBuffTarget(object oCaster, int nSpell); +// Casts a memorized spell from oCaster of nClass, nSpellLevel, nSpellSlot on oTarget. +void ai_CastMemorizedSpell(object oCaster, int nClass, int nSpellLevel, int nSpellSlot, object oTarget, int bInstant, object oPC = OBJECT_INVALID); +// Casts a known spell from oCaster of nClass, nSpell on oTarget. +void ai_CastKnownSpell(object oCaster, int nClass, int nSpell, object oTarget, int bInstant, object oPC = OBJECT_INVALID); +// Returns true if the spell is cast. +// Checks if they have the spell and will cast it if possible. +int ai_CheckAndCastSpell(object oCaster, int nSpell, int nSpellGroup, float fDelay, object oTarget, object oPC = OBJECT_INVALID); +// Setup monsters for oCaster to buff in ai_CastSpells. +void ai_SetupMonsterBuffTargets(object oCaster); +// Setup the targets for an NPC to buff one of the PC's members or the whole group. +void ai_SetupAllyTargets(object oCaster, object oPC); +// Setup the targets for an NPC to heal one of the PC's members. +void ai_SetupAllyHealingTargets(object oCaster, object oPC); +// Clears the casters buff targets. +void ai_ClearBuffTargets(object oCaster, string sVariable); +// Cycles through a casters spells casting all buffs via actions. +void ai_ActionCastMemorizedBuff(struct stSpell stSpell); +// Cycles through a casters spells casting all buffs via actions. +void ai_ActionCastKnownBuff(struct stSpell stSpell); +// Checks oCaster for buffing spells and casts them based on nTarget; +// These are cast as actions and will happen at the speed based on +// AI_HENCHMAN_BUFF_DELAY, but are still actions. +// nTarget is 0-9 where 0 is all targets, 1 is oPC, 2 is the caster +// 3 Familiar, 4 is Animal Companion, 5 is Summons, 6 is Dominated, and 7+ is henchman. +// Targets must be defined in variable AI_ALLY_TARGET_* where * is 1 to #. +// nBuffType is the duration 1 - all, 2 - short, 3 - long. +void ai_CastBuffs(object oCaster, int nBuffType, int nTarget, object oPC); +// Returns TRUE if oCaster cast spontaneous cure spell on oTarget. +// This uses an action and must use AssignCommand or OBJECT_SELF is the caster! +int ai_CastSpontaneousCure(object oCreature, object oTarget, object oPC); +// Returns TRUE if oCaster casts a memorized cure spell on oTarget. +// This uses an action and must use AssignCommand or OBJECT_SELF is the caster! +int ai_CastMemorizedHealing(object oCreature, object oTarget, object oPC, int nClass); +// Returns TRUE if oCaster casts a known cure spell on oTarget. +// This uses an action and must use AssignCommand or OBJECT_SELF is the caster! +int ai_CastKnownHealing(object oCreature, object oTarget, object oPC, int nClass); +// Returns TRUE if oCreature has an effect that will break their concentration. +int ai_ConcentrationCondition(object oCreature); +// Check to see if a spell's concentration has been broken, works for summons as well. +void ai_SpellConcentrationCheck(object oCaster); +// Returns TRUE if oCreature can safely cast nSpell defensively or has a good +// chance of casting while in melee. +int ai_CastInMelee(object oCreature, int nSpell, int nInMelee); +// Returns a float range for the caster to search for a target of an offensive spell. +float ai_GetOffensiveSpellSearchRange(object oCreature, int nSpell); +// Returns TRUE if nSpell is a cure spell and will not over heal for nDamage. +int ai_ShouldWeCastThisCureSpell(int nSpell, int nDamage); +// Casts the spell on the current target for oAssociate. +void ai_CastWidgetSpell(object oPC, object oAssociate, object oTarget, location lLocation); +// Uses the feat on the current target for oAssociate. +void ai_UseWidgetFeat(object oPC, object oAssociate, object oTarget, location lLocation); +// Uses the item on the current target for oAssociate. +void ai_UseWidgetItem(object oPC, object oAssociate, object oTarget, location lLocation); +int ai_GetCanCastSpell(object oCreature, int nSpell, int nClass, int nLevel, int nMetaMagic = 0, int nDomain = 0) +{ + int nIndex, nSpellCount, nClassPosition, nSlot, nMaxSlots, nPosition = 1; + while(nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + nClassPosition = GetClassByPosition(nPosition, oCreature); + if(nClassPosition == CLASS_TYPE_INVALID) return FALSE; + if(nClass = nClassPosition) + { + if(Get2DAString("classes", "SpellCaster", nClass) == "1") + { + nSlot = 0; + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + nMaxSlots = GetMemorizedSpellCountByLevel(oCreature, nClass, nLevel); + while(nSlot < nMaxSlots) + { + if(GetMemorizedSpellId(oCreature, nClass, nLevel, nSlot) == nSpell && + GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot)) return TRUE; + nSlot++; + } + } + else return GetSpellUsesLeft(oCreature, nClass, nSpell, nMetaMagic, nDomain); + } + } + nPosition++; + } + return FALSE; +} +int ai_IsImmuneToPetrification(object oCaster, object oCreature) +{ + int nAppearance = GetAppearanceType(oCreature); + switch(nAppearance) + { + case APPEARANCE_TYPE_BASILISK: + case APPEARANCE_TYPE_COCKATRICE: + case APPEARANCE_TYPE_MEDUSA: + case APPEARANCE_TYPE_ALLIP: + case APPEARANCE_TYPE_ELEMENTAL_AIR: + case APPEARANCE_TYPE_ELEMENTAL_AIR_ELDER: + case APPEARANCE_TYPE_ELEMENTAL_EARTH: + case APPEARANCE_TYPE_ELEMENTAL_EARTH_ELDER: + case APPEARANCE_TYPE_ELEMENTAL_FIRE: + case APPEARANCE_TYPE_ELEMENTAL_FIRE_ELDER: + case APPEARANCE_TYPE_ELEMENTAL_WATER: + case APPEARANCE_TYPE_ELEMENTAL_WATER_ELDER: + case APPEARANCE_TYPE_GOLEM_STONE: + case APPEARANCE_TYPE_GOLEM_IRON: + case APPEARANCE_TYPE_GOLEM_CLAY: + case APPEARANCE_TYPE_GOLEM_BONE: + case APPEARANCE_TYPE_GORGON: + case APPEARANCE_TYPE_HEURODIS_LICH: + case APPEARANCE_TYPE_LANTERN_ARCHON: + case APPEARANCE_TYPE_SHADOW: + case APPEARANCE_TYPE_SHADOW_FIEND: + case APPEARANCE_TYPE_SHIELD_GUARDIAN: + case APPEARANCE_TYPE_SKELETAL_DEVOURER: + case APPEARANCE_TYPE_SKELETON_CHIEFTAIN: + case APPEARANCE_TYPE_SKELETON_COMMON: + case APPEARANCE_TYPE_SKELETON_MAGE: + case APPEARANCE_TYPE_SKELETON_PRIEST: + case APPEARANCE_TYPE_SKELETON_WARRIOR: + case APPEARANCE_TYPE_SKELETON_WARRIOR_1: + case APPEARANCE_TYPE_SPECTRE: + case APPEARANCE_TYPE_WILL_O_WISP: + case APPEARANCE_TYPE_WRAITH: + case APPEARANCE_TYPE_BAT_HORROR: + case 405: // Dracolich: + case 415: // Alhoon + case 418: // shadow dragon + case 420: // mithral golem + case 421: // admantium golem + case 430: // Demi Lich + case 469: // animated chest + case 474: // golems + case 475: // golems + return TRUE; + } + // Petrification immunity can also be granted as an item property. + if(ResistSpell(oCaster, oCreature) == 2 ) return TRUE; + // Prevent people from petrifying DM, resulting in GUI even when effect is not successful. + if(!GetPlotFlag(oCreature) && GetIsDM(oCreature)) return TRUE; + return FALSE; +} +int ai_DoIHaveAMindAffectingSpellOnMe(object oCreature) +{ + if(GetHasSpellEffect(SPELL_SLEEP, oCreature) || + GetHasSpellEffect(SPELL_DAZE, oCreature) || + GetHasSpellEffect(SPELL_HOLD_ANIMAL, oCreature) || + GetHasSpellEffect(SPELL_HOLD_MONSTER, oCreature) || + GetHasSpellEffect(SPELL_HOLD_PERSON, oCreature) || + GetHasSpellEffect(SPELL_CHARM_MONSTER, oCreature) || + GetHasSpellEffect(SPELL_CHARM_PERSON, oCreature) || + GetHasSpellEffect(SPELL_CHARM_PERSON_OR_ANIMAL, oCreature) || + GetHasSpellEffect(SPELL_MASS_CHARM, oCreature) || + GetHasSpellEffect(SPELL_DOMINATE_ANIMAL, oCreature) || + GetHasSpellEffect(SPELL_DOMINATE_MONSTER, oCreature) || + GetHasSpellEffect(SPELL_DOMINATE_PERSON, oCreature) || + GetHasSpellEffect(SPELL_CONFUSION, oCreature) || + GetHasSpellEffect(SPELL_MIND_FOG, oCreature) || + GetHasSpellEffect(SPELL_CLOUD_OF_BEWILDERMENT, oCreature) || + GetHasSpellEffect(SPELLABILITY_BOLT_DOMINATE,oCreature) || + GetHasSpellEffect(SPELLABILITY_BOLT_CHARM,oCreature) || + GetHasSpellEffect(SPELLABILITY_BOLT_CONFUSE,oCreature) || + GetHasSpellEffect(SPELLABILITY_BOLT_DAZE,oCreature)) return TRUE; + return FALSE; +} +int ai_IsCureSpell(int nSpell) +{ + switch(nSpell) + { + case SPELL_CURE_CRITICAL_WOUNDS: + case SPELL_CURE_LIGHT_WOUNDS: + case SPELL_CURE_MINOR_WOUNDS: + case SPELL_CURE_MODERATE_WOUNDS: + case SPELL_CURE_SERIOUS_WOUNDS: + case SPELL_HEAL: return TRUE; break; + } + return FALSE; +} +int ai_IsInflictSpell(int nSpell) +{ + switch(nSpell) + { + case SPELL_INFLICT_CRITICAL_WOUNDS: + case SPELL_INFLICT_LIGHT_WOUNDS: + case SPELL_INFLICT_MINOR_WOUNDS: + case SPELL_INFLICT_MODERATE_WOUNDS: + case SPELL_INFLICT_SERIOUS_WOUNDS: + case SPELL_HARM: return TRUE; break; + } + return FALSE; +} +int ai_IsAreaOfEffectSpell(int nSpell) +{ + switch(nSpell) + { + case SPELL_ACID_FOG : + case SPELL_MIND_FOG : + case SPELL_STORM_OF_VENGEANCE: + case SPELL_WEB : + case SPELL_GREASE : + case SPELL_CREEPING_DOOM : +// case SPELL_DARKNESS : + case SPELL_SILENCE : + case SPELL_BLADE_BARRIER : + case SPELL_CLOUDKILL : + case SPELL_STINKING_CLOUD : + case SPELL_WALL_OF_FIRE : + case SPELL_INCENDIARY_CLOUD : + case SPELL_ENTANGLE : + case SPELL_EVARDS_BLACK_TENTACLES: + case SPELL_CLOUD_OF_BEWILDERMENT : + case SPELL_STONEHOLD : + case SPELL_VINE_MINE : + case SPELL_SPIKE_GROWTH : + case SPELL_DIRGE : + case 530 : // vine mine + case 531 : // vine mine + case 532 : // vine mine + case 961 : // Prismatic Sphere + return TRUE; + } + return FALSE; +} +int ai_GetIsSpellCaster(object oAssociate) +{ + int nIndex, nSpellCaster, nClass; + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClass = GetClassByPosition(nIndex, oAssociate); + if(nClass == CLASS_TYPE_INVALID) return nSpellCaster; + if(Get2DAString("classes", "SpellCaster", nClass) == "1") + { + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") return 2; + else nSpellCaster = 1; + } + } + return nSpellCaster; +} +int ai_GetIsSpellBookRestrictedCaster(object oAssociate) +{ + int nIndex, nSpellCaster, nClass; + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClass = GetClassByPosition(nIndex, oAssociate); + if(nClass == CLASS_TYPE_INVALID) return FALSE; + if(Get2DAString("classes", "SpellbookRestricted", nClass) == "1") return TRUE; + } + return FALSE; +} +int ai_CreatureImmuneToEffect(object oCaster, object oCreature, int nSpell) +{ + string sIType = Get2DAString("ai_spells", "ImmunityType", nSpell); + if(sIType != "") + { + if(AI_DEBUG) ai_Debug("0i_spells", "290", "Checking spell immunity type(" + sIType + ")."); + if(sIType == "Death" && GetIsImmune(oCreature, IMMUNITY_TYPE_DEATH)) return TRUE; + else if(sIType == "Level_Drain" && GetIsImmune(oCreature, IMMUNITY_TYPE_NEGATIVE_LEVEL)) return TRUE; + else if(sIType == "Ability_Drain" && GetIsImmune(oCreature, IMMUNITY_TYPE_ABILITY_DECREASE)) return TRUE; + else if(sIType == "Poison" && GetIsImmune(oCreature, IMMUNITY_TYPE_POISON)) return TRUE; + else if(sIType == "Disease" && GetIsImmune(oCreature, IMMUNITY_TYPE_DISEASE)) return TRUE; + else if(sIType == "Curse" && GetIsImmune(oCreature, IMMUNITY_TYPE_CURSED)) return TRUE; + else if(sIType == "Mind_Affecting" && GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS)) return TRUE; + else if(sIType == "Petrification" && ai_IsImmuneToPetrification(oCaster, oCreature)) return TRUE; + else if(sIType == "Fear" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_FEAR) || + GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS))) return TRUE; + else if(sIType == "Sleep" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_SLEEP) || + GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS))) return TRUE; + else if(sIType == "Paralysis" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_PARALYSIS) || + GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS))) return TRUE; + else if(sIType == "Domination" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_DOMINATE) || + GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS))) return TRUE; + else if(sIType == "Confusion" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_CONFUSED) || + GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS))) return TRUE; + else if(sIType == "Blindness" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_BLINDNESS) || + GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS))) return TRUE; + else if(sIType == "Dazed" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_DAZED) || + GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS))) return TRUE; + else if(sIType == "Charm" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_CHARM) || + GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS))) return TRUE; + // Check for damage immunities. + // Negative damage does not work on undead! + else if(sIType == "Negative" && GetRacialType(oCreature) == RACIAL_TYPE_UNDEAD) + { + if(AI_DEBUG) ai_Debug("0i_spell", "325", "Undead are immune to Negative energy!"); + return TRUE; + } + // Elemental damage resistances should be checked. + if(sIType == "Acid" || sIType == "Cold" || sIType == "Fire" || + sIType == "Electricty" || sIType == "Sonic") + { + if(ai_GetHasEffectType(oCreature, EFFECT_TYPE_DAMAGE_RESISTANCE)) + { + if(AI_DEBUG) ai_Debug("0i_spell", "334", GetName(oCreature) + " has damage resistance to my " + sIType + " spell!"); + return TRUE; + } + // Check for resistances and immunities. Treat resistance as immune. + int nIPResist = GetLocalInt(oCreature, sIPResistVarname); + if(AI_DEBUG) ai_Debug("0i_spell", "372", "nIPResist:" + IntToString(nIPResist)); + int nIPImmune = GetLocalInt(oCreature, sIPImmuneVarname) | nIPResist; + if(AI_DEBUG) ai_Debug("0i_spell", "374", "nIPImmune:" + IntToString(nIPImmune)); + if(nIPImmune > 0) + { + if(AI_DEBUG) ai_Debug("0i_spell", "391", GetName(oCreature) + " is immune/resistant to my " + sIType + " spell through an item!"); + if(sIType == "Acid" && (nIPImmune & DAMAGE_TYPE_ACID)) return TRUE; + else if(sIType == "Cold" && (nIPImmune & DAMAGE_TYPE_COLD)) return TRUE; + else if(sIType == "Fire" && (nIPImmune & DAMAGE_TYPE_FIRE)) return TRUE; + else if(sIType == "Electricity" && (nIPImmune & DAMAGE_TYPE_ELECTRICAL)) return TRUE; + else if(sIType == "Sonic" && (nIPImmune & DAMAGE_TYPE_SONIC)) return TRUE; + } + } + } + int nLevel = StringToInt(Get2DAString("spells", "Innate", nSpell)); + // Globe spells should be checked... + if((GetHasSpellEffect(SPELL_MINOR_GLOBE_OF_INVULNERABILITY, oCreature) || + GetHasSpellEffect(SPELL_GREATER_SHADOW_CONJURATION_MINOR_GLOBE, oCreature)) && + nLevel < 4 && d100() < 75) return TRUE; + if(GetHasSpellEffect(SPELL_GLOBE_OF_INVULNERABILITY, oCreature) && + nLevel < 5 && d100() < 75) return TRUE; + // Check creatures items for immunity. + int nIndex; + json jSpellImmunity = GetLocalJson(oCreature, AI_TALENT_IMMUNITY); + json jSpell = JsonArrayGet(jSpellImmunity, nIndex); + while(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + if(nSpell == JsonGetInt(jSpell)) + { + if(AI_DEBUG) ai_Debug("0i_spells", "407", GetName(oCreature) + " is immune to the spell via an Item!"); + return TRUE; + } + jSpell = JsonArrayGet(jSpellImmunity, ++nIndex); + } + if(AI_DEBUG) ai_Debug("0i_spell", "347", GetName(oCreature) + " is not immune to the spell."); + return FALSE; +} +float ai_GetSpellRange(int nSpell) +{ + string sRange = Get2DAString("spells", "Range", nSpell); + if(sRange == "S") return AI_SHORT_DISTANCE; + else if(sRange == "M") return AI_MEDIUM_DISTANCE; + else if(sRange == "L") return AI_LONG_DISTANCE; + else if(sRange == "T") return AI_RANGE_MELEE; + return 0.1; +} +int ai_CreatureHasDispelableEffect(object oCaster, object oCreature) +{ + int nSpellID, nLastSpellID, bSpell, nDispelChance; + // Cycle through the targets effects. + effect eEffect = GetFirstEffect(oCreature); + if(AI_DEBUG) ai_Debug("0i_spells", "485", "nSpell: " + GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", GetEffectSpellId(eEffect)))) + + " oCreature: " + GetName(oCreature)); + while(GetIsEffectValid(eEffect)) + { + nSpellID = GetEffectSpellId(eEffect); + // -1 is not a spell. + if(AI_DEBUG) ai_Debug("0i_spells", "491", "nSpell: (" + IntToString(nSpellID) + ") " + + GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpellID)))); + if(nSpellID > -1 && nLastSpellID != nSpellID) + { + // We check if the spell is Hostile(-1) or Helpful(+1). + if(Get2DAString("ai_spells", "HostileSetting", nSpellID) == "1") nDispelChance--; + else nDispelChance++; + if(AI_DEBUG) ai_Debug("0i_spells", "497", "HostileSetting: " + Get2DAString("ai_spells", "HostileSetting", nSpellID) + + " nDispelChance: " + IntToString(nDispelChance)); + } + nLastSpellID = nSpellID; + eEffect = GetNextEffect(oCreature); + } + // if the target has more Helpful spells than harmful spells effecting them + // then use dispel! + if(AI_DEBUG) ai_Debug("0i_spells", "505", "nDispelChance: " + IntToString(nDispelChance)); + return (nDispelChance > 0); +} +void ai_RemoveASpecificEffect(object oCreature, int nEffectType) +{ + effect eEffect = GetFirstEffect(oCreature); + //Search for the effect. + while(GetIsEffectValid(eEffect)) + { + if(GetEffectType(eEffect) == nEffectType) + { + //Remove effect. + RemoveEffect(oCreature, eEffect); + eEffect = GetFirstEffect(oCreature); + } + else eEffect = GetNextEffect(oCreature); + } +} +int ai_GetHasEffectType(object oCreature, int nEffectType) +{ + effect eEffect = GetFirstEffect(oCreature); + while(GetIsEffectValid(eEffect)) + { + if(GetEffectType(eEffect, TRUE) == nEffectType) return TRUE; + eEffect = GetNextEffect(oCreature); + } + return FALSE; +} +void ai_CheckCreatureSpecialAbilities(object oCreature) +{ + int nMaxSpecialAbilities = GetSpellAbilityCount(oCreature); + if(nMaxSpecialAbilities) + { + int nIndex, bCanCast; + // Struct is id, ready, level. + int nSpell; + while(nIndex < nMaxSpecialAbilities) + { + nSpell = GetSpellAbilitySpell(oCreature, nIndex); + if(GetSpellAbilityReady(oCreature, nSpell)) + { + bCanCast = FALSE; + if(GetSpellAbilityCasterLevel(oCreature, nIndex) > 4) + { + // 1 Min/Lvl spell that is too low of level so it must be cast at 5th lvl or greater. + if(nSpell == SPELL_FLAME_WEAPON) bCanCast = TRUE; + else if(nSpell == SPELL_BLESS) bCanCast = TRUE; + else if(nSpell == SPELL_AID) bCanCast = TRUE; + else if(nSpell == SPELL_DEATH_WARD) bCanCast = TRUE; + } + if(nSpell == SPELL_ENERGY_BUFFER) bCanCast = TRUE; + else if(nSpell == SPELL_PROTECTION_FROM_ELEMENTS) bCanCast = TRUE; + else if(nSpell == SPELL_RESIST_ELEMENTS) bCanCast = TRUE; + else if(nSpell == SPELL_ENDURE_ELEMENTS) bCanCast = TRUE; + else if(nSpell == SPELL_MAGE_ARMOR) bCanCast = TRUE; + else if(nSpell == SPELL_MAGIC_VESTMENT) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_MAGIC_WEAPON) bCanCast = TRUE; + else if(nSpell == SPELL_MAGIC_WEAPON) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_IX) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_VIII) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_VII) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_VI) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_V) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_IV) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_III) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_II) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_I) bCanCast = TRUE; + else if(nSpell == SPELL_BARKSKIN) bCanCast = TRUE; + else if(nSpell == SPELL_SHIELD) bCanCast = TRUE; + else if(nSpell == SPELL_ENTROPIC_SHIELD) bCanCast = TRUE; + else if(nSpell == SPELL_SHIELD_OF_FAITH) bCanCast = TRUE; + else if(nSpell == SPELL_REMOVE_FEAR) bCanCast = TRUE; + else if(nSpell == SPELL_IRONGUTS) bCanCast = TRUE; + else if(nSpell == SPELL_PREMONITION) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_STONESKIN) bCanCast = TRUE; + else if(nSpell == SPELL_GHOSTLY_VISAGE) bCanCast = TRUE; + else if(nSpell == SPELL_IMPROVED_INVISIBILITY) bCanCast = TRUE; + else if(nSpell == SPELL_INVISIBILITY_SPHERE) bCanCast = TRUE; + else if(nSpell == SPELL_INVISIBILITY) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_BULLS_STRENGTH) bCanCast = TRUE; + else if(nSpell == SPELL_BULLS_STRENGTH) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_CATS_GRACE) bCanCast = TRUE; + else if(nSpell == SPELL_CATS_GRACE) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_EAGLE_SPLENDOR) bCanCast = TRUE; + else if(nSpell == SPELL_EAGLE_SPLEDOR) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_ENDURANCE) bCanCast = TRUE; + else if(nSpell == SPELL_ENDURANCE) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_FOXS_CUNNING) bCanCast = TRUE; + else if(nSpell == SPELL_FOXS_CUNNING) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_OWLS_WISDOM) bCanCast = TRUE; + else if(nSpell == SPELL_OWLS_WISDOM) bCanCast = TRUE; + else if(nSpell == SPELL_KEEN_EDGE) bCanCast = TRUE; + else if(nSpell == SPELL_ANIMATE_DEAD) bCanCast = TRUE; + else if(nSpell == SPELL_INVISIBILITY_PURGE) bCanCast = TRUE; + else if(nSpell == SPELL_CLAIRAUDIENCE_AND_CLAIRVOYANCE) bCanCast = TRUE; + else if(nSpell == SPELL_DARKFIRE) bCanCast = TRUE; + else if(nSpell == SPELL_NEGATIVE_ENERGY_PROTECTION) bCanCast = TRUE; + else if(nSpell == SPELL_MAGIC_CIRCLE_AGAINST_GOOD) bCanCast = TRUE; + else if(nSpell == SPELL_FREEDOM_OF_MOVEMENT) bCanCast = TRUE; + else if(nSpell == SPELL_NEUTRALIZE_POISON) bCanCast = TRUE; + else if(nSpell == SPELL_MIND_BLANK) bCanCast = TRUE; + else if(nSpell == SPELL_LESSER_MIND_BLANK) bCanCast = TRUE; + else if(nSpell == SPELL_SPELL_RESISTANCE) bCanCast = TRUE; + else if(nSpell == SPELL_PROTECTION_FROM_GOOD) bCanCast = TRUE; + else if(nSpell == SPELL_CREATE_UNDEAD) bCanCast = TRUE; + else if(nSpell == SPELL_PLANAR_ALLY) bCanCast = TRUE; + else if(nSpell == SPELL_LESSER_PLANAR_BINDING) bCanCast = TRUE; + else if(nSpell == SPELL_ETHEREALNESS) bCanCast = TRUE; + else if(nSpell == SPELL_PROTECTION_FROM_SPELLS) bCanCast = TRUE; + else if(nSpell == SPELL_SHADOW_SHIELD) bCanCast = TRUE; + else if(nSpell == SPELL_CREATE_GREATER_UNDEAD) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_PLANAR_BINDING) bCanCast = TRUE; + if(bCanCast && GetSpellAbilityReady(oCreature, nIndex)) + { + ActionCastSpellAtObject(nSpell, oCreature, 255, 0, 0, 0, TRUE); + } + } + nIndex++; + } + } +} +int ai_IsSilenced(object oCreature, int nSpell) +{ + if(Get2DAString("spells", "VS", nSpell) == "s") return FALSE; + if(ai_GetHasEffectType(oCreature, EFFECT_TYPE_SILENCE)) return TRUE; + return FALSE; +} +int ai_ArcaneSpellFailureTooHigh(object oCreature, int nClass, int nLevel, int nSlot) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "561", "Arcane Spells: " + Get2DAString("classes", "ASF", nClass) + + " Arcane Spell Failure: " + IntToString(GetArcaneSpellFailure(oCreature)) + + " AI_ASF_WILL_USE: " + IntToString(AI_ASF_WILL_USE)); + if(Get2DAString("classes", "ASF", nClass) == "1" && + GetArcaneSpellFailure(oCreature) > AI_ASF_WILL_USE) + { + if(GetMemorizedSpellMetaMagic(oCreature, nClass, nLevel, nSlot) == METAMAGIC_STILL) return FALSE; + return TRUE; + } + return FALSE; +} +int ai_TryToCastSpell(object oCaster, int nSpell, object oTarget) +{ + if(GetHasSpell(nSpell, oCaster) && !GetHasSpellEffect(nSpell, oTarget)) + { + ActionCastSpellAtObject(nSpell, oTarget); + return TRUE; + } + return FALSE; +} +int ai_SpellGroupNotCast(object oCreature, string sBuffGroup) +{ + return !GetLocalInt(oCreature, sBuffGroup); +} +void ai_ClearSpellsCastGroups(object oCreature) +{ + int nCounter; + for(nCounter = -1; nCounter <= AI_BUFF_GROUPS; nCounter--) + { + DeleteLocalInt(oCreature, "AI_USED_SPELL_GROUP_" + IntToString(nCounter)); + } +} +int ai_CanUseSpell(object oCaster, object oTarget, int nSpell, int nTargetType) +{ + // Should we ignore associates? + if(ai_GetAIMode(oCaster, AI_MODE_IGNORE_ASSOCIATES) && + GetAssociateType(oTarget) > 1) return FALSE; + // For ability scores we return a bonus to the ability to be checked against + // the target with the highest ability getting the spell first. + if(nTargetType == 1) // Ability score buff for strength. + { + // We don't want to buff the strength for someone using weapon finesse! + if(GetHasFeat(FEAT_WEAPON_FINESSE, oTarget)) return -5; + return TRUE; + } + if(nTargetType == 7) // Lowest AC. + { + // Stone bones only effects the undead. + if(nSpell == SPELL_STONE_BONES) + { + if(GetRacialType(oTarget) != RACIAL_TYPE_UNDEAD) return FALSE; + } + return TRUE; + } + if(nTargetType == 8) // Lowest AC without AC Bonus. + { + if(nSpell == SPELL_MAGIC_VESTMENT) + { + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget); + if(oArmor == OBJECT_INVALID) return FALSE; + } + return TRUE; + } + if(nTargetType == 9) // Highest Attack. + { + return TRUE; + } + if(nTargetType == 10) // Most wounded, Lowest Hp. + { + return TRUE; + } + if(nTargetType == 11) // Lowest Fortitude save. + { + return TRUE; + } + if(nTargetType == 12) // Lowest Reflex save. + { + return TRUE; + } + if(nTargetType == 13) // Lowest Will save. + { + return TRUE; + } + if(nTargetType == 14) // Lowest Save. + { + return TRUE; + } + if(nSpell == SPELL_MAGIC_FANG) + { + object oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oCaster); + if(oTarget != oCompanion) return FALSE; + } + return TRUE; +} +// Used to check if the targets weapon can be buffed by the spells effects. +int ai_CanItemBeBuffed(int nSpell, object oTarget) +{ + object oWeapon, oArmor; + if(nSpell == SPELL_MAGIC_WEAPON || nSpell == SPELL_GREATER_MAGIC_WEAPON || + nSpell == SPELL_BLADE_THIRST) + { + oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!ai_GetIsMeleeWeapon(oWeapon)) return FALSE; + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_ENHANCEMENT_BONUS)) return FALSE; + } + else if(nSpell == SPELL_MAGIC_VESTMENT) + { + oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget); + if(oArmor == OBJECT_INVALID) return FALSE; + if(ai_GetHasItemProperty(oArmor, ITEM_PROPERTY_AC_BONUS)) return FALSE; + } + else if(nSpell == SPELL_DARKFIRE) + { + oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!ai_GetIsMeleeWeapon(oWeapon)) return FALSE; + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_ON_HIT_PROPERTIES, 127)) return FALSE; + } + else if(nSpell == SPELL_FLAME_WEAPON) + { + oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!ai_GetIsMeleeWeapon(oWeapon)) return FALSE; + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_ON_HIT_PROPERTIES, 124)) return FALSE; + } + else if(nSpell == SPELL_KEEN_EDGE) + { + oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!ai_GetIsSlashingWeapon(oWeapon)) return FALSE; + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_KEEN)) return FALSE; + } + else if(nSpell == SPELL_DEAFENING_CLANG) + { + oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!ai_GetIsMeleeWeapon(oWeapon)) return FALSE; + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_ON_HIT_PROPERTIES, 137)) return FALSE; + } + else if(nSpell == SPELL_BLESS_WEAPON) + { + oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!ai_GetIsMeleeWeapon(oWeapon)) return FALSE; + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP, IP_CONST_RACIALTYPE_UNDEAD)) return FALSE; + } + else if(nSpell == SPELL_HOLY_SWORD) + { + oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!ai_GetIsMeleeWeapon(oWeapon)) return FALSE; + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_HOLY_AVENGER)) return FALSE; + } + else if(nSpell == SPELL_BLACKSTAFF) + { + oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(GetBaseItemType(oWeapon) != BASE_ITEM_QUARTERSTAFF) return FALSE; + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_ON_HIT_PROPERTIES, IP_CONST_ONHIT_DISPELMAGIC)) return FALSE; + } + return TRUE; +} +// In "Buff_Target" column the value of 0 in the "ai_spells.2da" references the Caster. +// In "Buff_Target" column this is value 1-6(STR, DEX, CON, INT, WIS, CHA) in the "ai_spells.2da". +object ai_BuffHighestAbilityScoreTarget(object oCaster, int nSpell, int nAbilityScore, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup)) return oMaster; + } + int nCntr = 1, nAB, nHighAB, nTarget, nUseSpell; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange) + { + nUseSpell = ai_CanUseSpell(oCaster, oTarget, nSpell, nAbilityScore + 1); + if(nUseSpell == 0) {} + else + { + nAB = GetAbilityScore(oTarget, nAbilityScore) + nUseSpell; + if(nAB > nHighAB) + {nHighAB = nAB; nTarget = nCntr; } + } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + else return GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); +} +// In "Buff_Target" column this is value 7 in the "ai_spells.2da". +object ai_BuffLowestACTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + object oMaster = GetMaster(); + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup) && + ai_CanUseSpell(oCaster, oMaster, nSpell, 7)) return oMaster; + } + int nCntr = 1, nAC, nLowAC = 100, nTarget; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && ai_SpellGroupNotCast(oTarget, sBuffGroup)) + { + nAC = GetAC(oTarget); + if(nAC < nLowAC && ai_CanUseSpell(oCaster, oTarget, nSpell, 7)) + {nLowAC = nAC; nTarget = nCntr; } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); + return oTarget; +} +// In "Buff_Target" column this is value 8 in the "ai_spells.2da". +object ai_BuffLowestACWithOutACBonus(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup) && + ai_CanUseSpell(oCaster, oMaster, nSpell, 8)) return oMaster; + } + int nCntr = 1, nAC, nLowAC = 50, nTarget; + object oItem, oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && ai_SpellGroupNotCast(oTarget, sBuffGroup)) + { + nAC = GetAC(oTarget); + oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget); + if(nAC < nLowAC && ai_CanUseSpell(oCaster, oTarget, nSpell, 8) && + !GetItemHasItemProperty(oItem, ITEM_PROPERTY_AC_BONUS)) + { + nLowAC = nAC; + nTarget = nCntr; + } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + else return GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); +} +// In "Buff_Target" column this is value 9 in the "ai_spells.2da". +object ai_BuffHighestAttackTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup) && + ai_CanUseSpell(oCaster, oMaster, nSpell, 9)) return oMaster; + } + int nCntr = 1, nAtk, nHighAtk, nTarget; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && ai_SpellGroupNotCast(oTarget, sBuffGroup)) + { + nAtk = GetBaseAttackBonus(oTarget); + if(nAtk > nHighAtk && ai_CanUseSpell(oCaster, oTarget, nSpell, 9)) + {nHighAtk = nAtk; nTarget = nCntr; } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); + return oTarget; +} +// In "Buff_Target" column this is value 10 in the "ai_spells.2da". +object ai_BuffMostWoundedTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup) && + ai_CanUseSpell(oCaster, oMaster, nSpell, 9)) return oMaster; + } + int nCntr = 1, nDmg, nMostDmg, nHp, nLowHp = 10000, nTarget, nHpTarget; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && + ai_SpellGroupNotCast(oTarget, sBuffGroup) && + ai_CanUseSpell(oCaster, oTarget, nSpell, 10)) + { + nHp = GetCurrentHitPoints(oTarget); + nDmg = GetMaxHitPoints(oTarget) - nHp; + if(nDmg > nMostDmg) { nMostDmg = nDmg; nTarget = nCntr; } + if(nHp < nLowHp) { nLowHp = nHp; nHpTarget = nCntr; } + } + // If no one is damage then put regeneration on the lowest hp target. + if(nMostDmg == 0) nTarget = nHpTarget; + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + else return GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); +} +// In "Buff_Target" column this is value 11 in the "ai_spells.2da". +object ai_BuffLowestFortitudeSaveTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup) && + ai_CanUseSpell(oCaster, oMaster, nSpell, 11)) return oMaster; + } + int nCntr = 1, nSave, nLowSave = 100, nTarget; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && ai_SpellGroupNotCast(oTarget, sBuffGroup)) + { + nSave = GetFortitudeSavingThrow(oTarget); + if(nSave < nLowSave && ai_CanUseSpell(oCaster, oTarget, nSpell, 11)) + {nLowSave = nSave; nTarget = nCntr; } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + else return GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); +} +// In "Buff_Target" column this is value 12 in the "ai_spells.2da". +object ai_BuffLowestReflexSaveTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup) && + ai_CanUseSpell(oCaster, oMaster, nSpell, 12)) return oMaster; + } + int nCntr = 1, nSave, nLowSave = 100, nTarget; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && ai_SpellGroupNotCast(oTarget, sBuffGroup)) + { + nSave = GetReflexSavingThrow(oTarget); + if(nSave < nLowSave && ai_CanUseSpell(oCaster, oTarget, nSpell, 12)) + {nLowSave = nSave; nTarget = nCntr; } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + else return GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); +} +// In "Buff_Target" column this is value 13 in the "ai_spells.2da". +object ai_BuffLowestWillSaveTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup) && + ai_CanUseSpell(oCaster, oMaster, nSpell, 13)) return oMaster; + } + int nCntr = 1, nSave, nLowSave = 100, nTarget; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && ai_SpellGroupNotCast(oTarget, sBuffGroup)) + { + nSave = GetWillSavingThrow(oTarget); + if(nSave < nLowSave && ai_CanUseSpell(oCaster, oTarget, nSpell, 13)) + {nLowSave = nSave; nTarget = nCntr; } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + else return GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); +} +// In "Buff_Target" column this is value 14 in the "ai_spells.2da". +object ai_BuffLowestSaveTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup) && + ai_CanUseSpell(oCaster, oMaster, nSpell, 14)) return oMaster; + } + int nCntr = 1, nSave, nLowSave = 200, nTarget; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && ai_SpellGroupNotCast(oTarget, sBuffGroup)) + { + nSave = GetFortitudeSavingThrow(oTarget) + GetReflexSavingThrow(oTarget) + GetWillSavingThrow(oTarget); + if(nSave < nLowSave && ai_CanUseSpell(oCaster, oTarget, nSpell, 14)) + {nLowSave = nSave; nTarget = nCntr; } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + else return GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); +} +// In "Buff_Target" column this is value 15 in the "ai_spells.2da". +object ai_BuffItemTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(ai_CanItemBeBuffed(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup)) return oMaster; + } + int nCntr = 1, nAtk, nHighAtk = -9999, nTarget; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && ai_CanItemBeBuffed(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && ai_SpellGroupNotCast(oTarget, sBuffGroup)) + { + nAtk = GetBaseAttackBonus(oTarget); + if(nAtk > nHighAtk) + { nHighAtk = nAtk; nTarget = nCntr; } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); + return oTarget; +} +object ai_GetBuffTarget(object oCaster, int nSpell) +{ + object oTarget = OBJECT_INVALID; + string sGroup = Get2DAString("ai_spells", "Buff_Group", nSpell); + if(sGroup == "") sGroup = IntToString(nSpell); + string sBuffGroup = "AI_USED_SPELL_GROUP_" + sGroup; + string sBuffTarget = Get2DAString("ai_spells", "Buff_Target", nSpell); + if(AI_DEBUG) ai_Debug("0i_spells", "769", "BuffTarget: " + sBuffTarget); + if(sBuffTarget == "0") + { + if(ai_SpellGroupNotCast(oCaster, sBuffGroup) && + !GetHasSpellEffect(nSpell, oCaster) && + ai_CanUseSpell(oCaster, oTarget, nSpell, 0)) + { + oTarget = oCaster; + } + } + else if(sBuffTarget == "1") + oTarget = ai_BuffHighestAbilityScoreTarget(oCaster, nSpell, ABILITY_STRENGTH, "", AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "2") + oTarget = ai_BuffHighestAbilityScoreTarget(oCaster, nSpell, ABILITY_DEXTERITY, "", AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "3") + oTarget = ai_BuffHighestAbilityScoreTarget(oCaster, nSpell, ABILITY_CONSTITUTION, "", AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "4") + oTarget = ai_BuffHighestAbilityScoreTarget(oCaster, nSpell, ABILITY_INTELLIGENCE, "", AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "5") + oTarget = ai_BuffHighestAbilityScoreTarget(oCaster, nSpell, ABILITY_WISDOM, "", AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "6") + oTarget = ai_BuffHighestAbilityScoreTarget(oCaster, nSpell, ABILITY_CHARISMA, "", AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "7") + oTarget = ai_BuffLowestACTarget(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "8") + oTarget = ai_BuffLowestACWithOutACBonus(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "9") + oTarget = ai_BuffHighestAttackTarget(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "10") + oTarget = ai_BuffMostWoundedTarget(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "11") + oTarget = ai_BuffLowestFortitudeSaveTarget(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "12") + oTarget = ai_BuffLowestReflexSaveTarget(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "13") + oTarget = ai_BuffLowestWillSaveTarget(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "14") + oTarget = ai_BuffLowestSaveTarget(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "15") + oTarget = ai_BuffItemTarget(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + if(oTarget != OBJECT_INVALID) + { + SetLocalInt(oTarget, sBuffGroup, TRUE); + DelayCommand(6.0, DeleteLocalInt(oTarget, sBuffGroup)); + } + if(AI_DEBUG) ai_Debug("0i_spells", "939", GetName(oCaster) + " is targeting " + GetName(oTarget) + + " with " + GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))) + " spell" + + " sBuffGroup: " + sBuffGroup + "."); + return oTarget; +} +void ai_CastMemorizedSpell(object oCaster, int nClass, int nSpellLevel, int nSpellSlot, object oTarget, int bInstant, object oPC = OBJECT_INVALID) +{ + int nDomain; + int nSpell = GetMemorizedSpellId(oCaster, nClass, nSpellLevel, nSpellSlot); + if(GetMemorizedSpellIsDomainSpell(oCaster, nClass, nSpellLevel, nSpellSlot) == 1) nDomain = nSpellLevel; + else nDomain = 0; + int nMetaMagic = GetMemorizedSpellMetaMagic(oCaster, nClass, nSpellLevel, nSpellSlot); + if(AI_DEBUG) ai_Debug("0i_spells", "951", "nSpell: " + IntToString(nSpell) + " oTarget: " + GetName(oTarget) + + " nMetaMagic: " + IntToString(nMetaMagic) + " nDomain: " + IntToString(nDomain) + + " bInstant: " + IntToString(bInstant) + " nClass: " + IntToString(nClass)); + ActionCastSpellAtObject(nSpell, oTarget, nMetaMagic, FALSE, nDomain, 0, bInstant); + // Right now I cannot get nClass to work here... + //DelayCommand(fDelay, ActionCastSpellAtObject(nSpell, oTarget, nMetaMagic, FALSE, nDomain, 0, TRUE, nClass)); + if(oPC != OBJECT_INVALID) + { + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + ai_SendMessages(GetName(oCaster) + " has cast " + sSpellName + " on " + GetName(oTarget) + ".", AI_COLOR_GREEN, oPC); + } +} +void ai_CastKnownSpell(object oCaster, int nClass, int nSpell, object oTarget, int bInstant, object oPC = OBJECT_INVALID) +{ + if(AI_DEBUG) ai_Debug("0i_Spells", "965", GetName(oCaster) + " is casting " + IntToString(nSpell)); + ActionCastSpellAtObject(nSpell, oTarget, 255, FALSE, 0, 0, bInstant); + // Right now I cannot get nClass to work here... + //ActionCastSpellAtObject(nSpell, oTarget, 255, FALSE, 0, 0, TRUE, nClass); + if(oPC != OBJECT_INVALID) + { + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + ai_SendMessages(GetName(oCaster) + " has cast " + sSpellName + " on " + GetName(oTarget) + ".", AI_COLOR_GREEN, oPC); + } +} +int ai_CheckAndCastSpell(object oCaster, int nSpell, int nSpellGroup, float fDelay, object oTarget, object oPC = OBJECT_INVALID) +{ + int nClassCnt = 1, nClass, nMaxSlot, nSpellLevel, nSpellSlot, nMemorizedSpell, nDomain, nMetaMagic; + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + while(nClassCnt <= AI_MAX_CLASSES_PER_CHARACTER && nClass != CLASS_TYPE_INVALID) + { + nClass = GetClassByPosition(nClassCnt); + // Search all memorized spells for the spell. + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + // Check each level starting with the highest to lowest. + nSpellLevel = 0; + while(nSpellLevel < 10) + { + // Check each slot within each level. + nMaxSlot = GetMemorizedSpellCountByLevel(oCaster, nClass, nSpellLevel); + nSpellSlot = 0; + while(nSpellSlot < nMaxSlot) + { + if(GetMemorizedSpellReady(oCaster, nClass, nSpellLevel, nSpellSlot)) + { + nMemorizedSpell = GetMemorizedSpellId(oCaster, nClass, nSpellLevel, nSpellSlot); + if(nMemorizedSpell == nSpell) + { + ai_CastMemorizedSpell(oCaster, nClass, nSpellLevel, nSpellSlot, oTarget, FALSE, oPC); + return TRUE; + } + } + nSpellSlot++; + } + nSpellLevel++; + } + } + // Check non-memorized known lists for the spell. + else if(GetSpellUsesLeft(oCaster, nClass, nSpell)) + { + ai_CastKnownSpell(oCaster, nClass, nSpell, oTarget, FALSE, oPC); + return TRUE; + } + nClassCnt++; + } + return FALSE; +} +void ai_SetupMonsterBuffTargets(object oCaster) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1020", GetName(oCaster) + " is setting buff targets."); + SetLocalObject (oCaster, "AI_ALLY_TARGET_1" , oCaster); + SetLocalObject (oCaster, "AI_ALLY_TARGET_2", oCaster); + int nCntr = 1; + object oCreature = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oCaster, nCntr); + if(AI_DEBUG) ai_Debug("0i_spells", "864", GetName(oCreature) + " nCntr: " + IntToString(nCntr) + + " Distance: " + FloatToString(GetDistanceBetween(oCaster, oCreature), 0, 2)); + while(oCreature != OBJECT_INVALID && nCntr < 8 && GetDistanceBetween(oCaster, oCreature) < AI_RANGE_CLOSE) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1133", "Setting " + GetName(oCreature) + " as AI_ALLY_TARGET_" + IntToString(nCntr + 2)); + SetLocalObject (oCaster, "AI_ALLY_TARGET_" + IntToString(nCntr + 2), oCreature); + oCreature = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oCaster, ++nCntr); + if(AI_DEBUG) ai_Debug("0i_spells", "1136", GetName(oCreature) + " nCntr: " + IntToString(nCntr) + + " Distance: " + FloatToString(GetDistanceBetween(oCaster, oCreature), 0, 2)); + } +} +void ai_SetupAllyTargets(object oCaster, object oPC) +{ + // Setup our targets. + int nTarget; + if(oCaster != oPC) SetLocalObject (oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oPC); + SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCaster); + object oCreature = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oCaster); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oCaster); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCaster); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oCaster); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCreature); + int nCntr = 1; + int nMaxHenchman = GetMaxHenchmen() + nTarget; + object oHenchman = GetHenchman(oPC, nCntr); + while(oHenchman != OBJECT_INVALID && nCntr <= nMaxHenchman) + { + if(oHenchman == OBJECT_INVALID) break; + if(oHenchman != oCaster) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oHenchman); + oHenchman = GetHenchman(oPC, ++nCntr); + } + nCntr = 1; + while(nCntr <= nMaxHenchman) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1166", "AI_ALLY_TARGET_" + IntToString(nCntr) + ": " + + GetName(GetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(nCntr)))); + nCntr++; + } +} +void ai_SetupAllyHealingTargets(object oCaster, object oPC) +{ + int nMaxHenchman = 1; + if(oPC == OBJECT_INVALID) oPC = oCaster; + if(ai_GetAIMode(oCaster, AI_MODE_PARTY_HEALING_OFF)) + { + if(!ai_GetAIMode(oCaster, AI_MODE_SELF_HEALING_OFF)) SetLocalObject(oCaster, "AI_ALLY_HEAL_1", oCaster); + } + else + { + int nTarget; + if(oCaster != oPC) + { + SetLocalObject (oCaster, "AI_ALLY_HEAL_1", oPC); + nTarget++; + } + if(!ai_GetAIMode(oCaster, AI_MODE_SELF_HEALING_OFF)) + { + SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCaster); + } + object oCreature = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oCaster); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oCaster); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCaster); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oCaster); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCreature); + int nCntr = 1; + nMaxHenchman = GetMaxHenchmen() + nTarget; + object oHenchman = GetHenchman(oPC, nCntr); + while(oHenchman != OBJECT_INVALID && nTarget <= nMaxHenchman) + { + if(oHenchman == OBJECT_INVALID) break; + if(oHenchman != oCaster) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oHenchman); + oHenchman = GetHenchman(oPC, ++nCntr); + } + } + int nCntr = 1; + while(nCntr <= nMaxHenchman) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1211", "AI_ALLY_HEAL_" + IntToString(nCntr) + ": " + + GetName(GetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(nCntr++)))); + } +} +void ai_ClearBuffTargets(object oCaster, string sVariable) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1216", GetName(oCaster) + " is clearing " + sVariable + " targets."); + int nIndex; + int nMaxTargets = GetMaxHenchmen() + 6; + for(nIndex = 1; nIndex < nMaxTargets; nIndex++) + { + DeleteLocalObject (oCaster, sVariable + IntToString(nIndex)); + } +} +void ai_CheckForPerDayProperties(object oCreature, object oItem, int nBuffType, int bEquiped = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1150", "Checking Item properties on " + GetName(oItem)); + // We have established that we can use the item if it is equiped. + if(!bEquiped && !ai_CheckIfCanUseItem(oCreature, oItem)) return; + int nPerDay, nCharges, nUses, nSpellBuffDuration; + int nIprpSubType, nSpell, nLevel, nIPType, nIndex; + object oTarget; + itemproperty ipProp = GetFirstItemProperty(oItem); + // Lets skip this if there are no properties. + if(!GetIsItemPropertyValid(ipProp)) return; + // Check for cast spell property and add them to the talent list. + while(GetIsItemPropertyValid(ipProp)) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1163", "ItempropertyType(15): " + IntToString(GetItemPropertyType(ipProp))); + nIPType = GetItemPropertyType(ipProp); + if(nIPType == ITEM_PROPERTY_CAST_SPELL) + { + // Get how they use the item (charges or uses per day). + nUses = GetItemPropertyCostTableValue(ipProp); + // We only check uses per day. + if(AI_DEBUG) ai_Debug("0i_spells", "1172", "Item uses: " + IntToString(nPerDay)); + if(nUses > 7 && nUses < 13) + { + nPerDay = GetItemPropertyUsesPerDayRemaining(oItem, ipProp); + if(AI_DEBUG) ai_Debug("0i_spells", "1176", "Item uses per day: " + IntToString(nPerDay)); + if(nPerDay > 0) + { + // SubType is the ip spell index for iprp_spells.2da + nIprpSubType = GetItemPropertySubType(ipProp); + nSpell = StringToInt(Get2DAString("iprp_spells", "SpellIndex", nIprpSubType)); + nSpellBuffDuration = StringToInt(Get2DAString("ai_spells", "Buff_Duration", nSpell)); + if(AI_DEBUG) ai_Debug("0i_spells", "1183", "nSpell: " + IntToString(nSpell) + + " nBuffType: " + IntToString(nBuffType) + + " nSpellBuffDuration: " + IntToString(nSpellBuffDuration)); + if(nBuffType == nSpellBuffDuration || nBuffType == 1) + { + oTarget = ai_GetBuffTarget(oCreature, nSpell); + if(oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1190", GetName(oCreature) + " is using" + + GetName(oItem) + " to cast " + IntToString(nSpell) + + " on " + GetName(oTarget)); + ActionUseItemOnObject(oItem, ipProp, oTarget); + } + } + } + } + } + ipProp = GetNextItemProperty(oItem); + } +} +void ai_CheckForPerDayItems(object oCreature, object oPC, int nBuffType) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1198", GetName(oCreature) + ": Checking items for per day buffs."); + if(!ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC_ITEMS)) + { + int bEquiped; + string sSlots; + // Cycle through all the creatures inventory items. + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + if(GetIdentified(oItem)) + { + // Does the item need to be equiped to use its powers? + sSlots = Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)); + if(AI_DEBUG) ai_Debug("0i_talents", "1211", GetName(oItem) + " requires " + Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)) + " slots."); + if(sSlots == "0x00000") ai_CheckForPerDayProperties(oCreature, oItem, nBuffType); + } + oItem = GetNextItemInInventory(oCreature); + } + int nSlot; + // Cycle through all the creatures equiped items. + oItem = GetItemInSlot(nSlot, oCreature); + while(nSlot < 11) + { + if(oItem != OBJECT_INVALID) ai_CheckForPerDayProperties(oCreature, oItem, nBuffType, TRUE); + oItem = GetItemInSlot(++nSlot, oCreature); + } + oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oCreature); + if(oItem != OBJECT_SELF) ai_CheckForPerDayProperties(oCreature, oItem, nBuffType, TRUE); + } + // Clean up our variables. Must be done here since these are actions! + int nCntr; + object oTarget; + while(nCntr < 11) + { + oTarget = GetLocalObject(oCreature, "AI_ALLY_TARGET_" + IntToString(nCntr)); + if(oTarget != OBJECT_INVALID) + { + ai_ClearSpellsCastGroups(oTarget); + DeleteLocalObject(oCreature, "AI_ALLY_TARGET_" + IntToString(nCntr)); + } + nCntr++; + } +} +void ai_CheckForBuffSpells(struct stSpell stSpell) +{ + ai_SetupAllyTargets(stSpell.oCaster, stSpell.oPC); + stSpell.nPosition = 1; + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + stSpell.nSlot = 0; + while(stSpell.nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + if(AI_DEBUG) ai_Debug("0i_spells", "1208", "nClass: " + IntToString(stSpell.nClass)); + if(stSpell.nClass == CLASS_TYPE_INVALID) break; + if(AI_DEBUG) ai_Debug("0i_spells", "1210", "SpellCaster: " + Get2DAString("classes", "SpellCaster", stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + if(AI_DEBUG) ai_Debug("0i_spells", "1214", "Memorizes Spells: " + Get2DAString("classes", "MemorizesSpells", stSpell.nClass)); + if(Get2DAString("classes", "MemorizesSpells", stSpell.nClass) == "1") + { + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + AssignCommand(stSpell.oCaster, ai_ActionCastMemorizedBuff(stSpell)); + return; + } + else + { + stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + AssignCommand(stSpell.oCaster, ai_ActionCastKnownBuff(stSpell)); + return; + } + } + stSpell.nPosition++; + } + ai_CheckForPerDayItems(stSpell.oCaster, stSpell.oPC, stSpell.nBuffType); +} +void ai_ActionCastMemorizedSummons(struct stSpell stSpell) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1122", "Start of ActionCastMemorizedSummons!"); + int nSpell; + string sBuffGroup, sBuffTarget; + object oTarget; + while(stSpell.nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + //ai_Debug("0i_spells", "1128", "SpellCaster: " + Get2DAString("classes", "SpellCaster", stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + //ai_Debug("0i_spells", "1131", "nLevel: " + IntToString(stSpell.nLevel)); + while(stSpell.nLevel > -1) + { + //ai_Debug("0i_spells", "1134", "nMaxSlots: " + IntToString(stSpell.nMaxSlots) + + // " nSlots: " + IntToString(stSpell.nSlot)); + while(stSpell.nSlot < stSpell.nMaxSlots) + { + //ai_Debug("0i_spells", "1238", "Ready: " + IntToString(GetMemorizedSpellReady(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot))); + if(GetMemorizedSpellReady(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot)) + { + nSpell = GetMemorizedSpellId(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot); + //ai_Debug("0i_spells", "1142", "nSpell: " + IntToString(nSpell)); + if(Get2DAString("ai_spells", "Category", nSpell) == "S") + { + SetLocalInt(stSpell.oCaster, "AI_USED_SPELL_GROUP_-2", TRUE); + ai_CastMemorizedSpell(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot, stSpell.oCaster, TRUE, stSpell.oPC); + stSpell.nPosition = 1; + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + stSpell.nSlot = 0; + DelayCommand(2.0, ai_SetupAllyTargets(stSpell.oCaster, stSpell.oPC)); + DelayCommand(2.0 + 0.5, AssignCommand(stSpell.oCaster, ai_ActionCastMemorizedBuff(stSpell))); + return; + } + } + stSpell.nSlot++; + } + stSpell.nLevel--; + //ai_Debug("0i_spells", "1153", "nLevel: " + IntToString(stSpell.nLevel)); + if(stSpell.nLevel > -1) + { + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + stSpell.nSlot = 0; + } + } + } + stSpell.nPosition++; + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + //ai_Debug("0i_spells", "1164", "nClass: " + IntToString(stSpell.nClass)); + if(stSpell.nClass == CLASS_TYPE_INVALID) break; + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + stSpell.nSlot = 0; + if(Get2DAString("classes", "MemorizesSpells", stSpell.nClass) == "1") + { + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + } + else + { + stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + AssignCommand(stSpell.oCaster, ai_ActionCastKnownBuff(stSpell)); + return; + } + } + } + ai_CheckForBuffSpells(stSpell); +} +void ai_ActionCastKnownSummons(struct stSpell stSpell) +{ + //ai_Debug("0i_spells", "1184", "Start of ActionCastKnownSummons!"); + int nSpell; + string sBuffGroup, sBuffTarget; + object oTarget; + while(stSpell.nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + //ai_Debug("0i_spells", "1190", "SpellCaster: " + Get2DAString("classes", "SpellCaster", stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + //ai_Debug("0i_spells", "1193", "nLevel: " + IntToString(stSpell.nLevel)); + while(stSpell.nLevel > -1) + { + if(stSpell.nMaxSlots) + { + //ai_Debug("0i_spells", "1198", "nMaxSlots: " + IntToString(stSpell.nMaxSlots) + + // " nSlots: " + IntToString(stSpell.nSlot)); + while(stSpell.nSlot < stSpell.nMaxSlots) + { + nSpell = GetKnownSpellId(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot); + //ai_Debug("0i_spells", "1203", "Ready: " + IntToString(GetSpellUsesLeft(stSpell.oCaster, stSpell.nClass, nSpell))); + if(GetSpellUsesLeft(stSpell.oCaster, stSpell.nClass, nSpell)) + { + if(Get2DAString("ai_spells", "Category", nSpell) == "S") + { + SetLocalInt(stSpell.oCaster, "AI_USED_SPELL_GROUP_S", TRUE); + //ai_Debug("0i_spells", "1209", "nSpell: " + IntToString(nSpell)); + ai_CastKnownSpell(stSpell.oCaster, stSpell.nClass, nSpell, stSpell.oCaster, TRUE, stSpell.oPC); + stSpell.nPosition = 1; + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + stSpell.nSlot = 0; + ai_SetupAllyTargets(stSpell.oCaster, stSpell.oPC); + DelayCommand(AI_HENCHMAN_BUFF_DELAY, AssignCommand(stSpell.oCaster, ai_ActionCastKnownBuff(stSpell))); + return; + } + } + stSpell.nSlot++; + } + } + stSpell.nLevel--; + //ai_Debug("0i_spells", "1218", "nLevel: " + IntToString(stSpell.nLevel)); + if(stSpell.nLevel > -1) + { + stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + stSpell.nSlot = 0; + } + } + } + stSpell.nPosition++; + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + if(stSpell.nClass == CLASS_TYPE_INVALID) break; + //ai_Debug("0i_spells", "1229", "nClass: " + IntToString(stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + stSpell.nSlot = 0; + if(Get2DAString("classes", "MemorizesSpells", stSpell.nClass) == "1") + { + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + AssignCommand(stSpell.oCaster, ai_ActionCastMemorizedBuff(stSpell)); + return; + } + else stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + } + } + ai_CheckForBuffSpells(stSpell); +} +void ai_ActionCastMemorizedBuff(struct stSpell stSpell) +{ + int nSpell; + string sBuffGroup, sBuffTarget; + object oTarget; + while(stSpell.nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + ai_Debug("0i_spells", "1252", "SpellCaster: " + Get2DAString("classes", "SpellCaster", stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + ai_Debug("0i_spells", "1255", "nLevel: " + IntToString(stSpell.nLevel)); + while(stSpell.nLevel > -1) + { + ai_Debug("0i_spells", "1258", "nMaxSlots: " + IntToString(stSpell.nMaxSlots) + + " nSlots: " + IntToString(stSpell.nSlot)); + while(stSpell.nSlot < stSpell.nMaxSlots) + { + ai_Debug("0i_spells", "1262", "Ready: " + IntToString(GetMemorizedSpellReady(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot))); + if(GetMemorizedSpellReady(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot)) + { + nSpell = GetMemorizedSpellId(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot); + int nSpellBuffDuration = StringToInt(Get2DAString("ai_spells", "Buff_Duration", nSpell)); + ai_Debug("0i_spells", "1267", "nBuffType: " + IntToString(stSpell.nBuffType) + + " nSpellBuffDuration: " + IntToString(nSpellBuffDuration) + + " sBuffGroup: " + Get2DAString("ai_spells", "Buff_Group", nSpell)); + if(stSpell.nBuffType == nSpellBuffDuration || stSpell.nBuffType == 1) + { + if(stSpell.nTarget > 0) + { + sBuffTarget = Get2DAString("ai_spells", "Buff_Target", nSpell); + oTarget = GetLocalObject(stSpell.oCaster, "AI_ALLY_TARGET_" + IntToString(stSpell.nTarget)); + if(sBuffTarget != "0" || (sBuffTarget == "0" && stSpell.oCaster == oTarget)) + { + sBuffGroup = "AI_USED_SPELL_GROUP_" + Get2DAString("ai_spells", "Buff_Group", nSpell); + if(!ai_SpellGroupNotCast(oTarget, sBuffGroup)) oTarget == OBJECT_INVALID; + } + else oTarget == OBJECT_INVALID; + } + else oTarget = ai_GetBuffTarget(stSpell.oCaster, nSpell); + ai_Debug("0i_spells", "1284", "nSpell: " + IntToString(nSpell) + + " oTarget: " + GetName(oTarget)); + if(oTarget != OBJECT_INVALID) + { + ai_CastMemorizedSpell(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot, oTarget, TRUE, stSpell.oPC); + stSpell.nSlot++; + DelayCommand(AI_HENCHMAN_BUFF_DELAY, AssignCommand(stSpell.oCaster, ai_ActionCastMemorizedBuff(stSpell))); + return; + } + } + } + stSpell.nSlot++; + } + stSpell.nLevel--; + ai_Debug("0i_spells", "1298", "nLevel: " + IntToString(stSpell.nLevel)); + if(stSpell.nLevel > -1) + { + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + stSpell.nSlot = 0; + } + } + } + stSpell.nPosition++; + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + if(stSpell.nClass == CLASS_TYPE_INVALID) break; + ai_Debug("0i_spells", "1309", "nClass: " + IntToString(stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + stSpell.nSlot = 0; + if(Get2DAString("classes", "MemorizesSpells", stSpell.nClass) == "1") + { + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + } + else + { + stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + AssignCommand(stSpell.oCaster, ai_ActionCastKnownBuff(stSpell)); + return; + } + } + } + ai_CheckForPerDayItems(stSpell.oCaster, stSpell.oPC, stSpell.nBuffType); +} +void ai_ActionCastKnownBuff(struct stSpell stSpell) +{ + int nSpell; + string sBuffGroup, sBuffTarget; + object oTarget; + while(stSpell.nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + //ai_Debug("0i_spells", "1347", "SpellCaster: " + Get2DAString("classes", "SpellCaster", stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + //ai_Debug("0i_spells", "1350", "nLevel: " + IntToString(stSpell.nLevel)); + while(stSpell.nLevel > -1) + { + if(stSpell.nMaxSlots) + { + //ai_Debug("0i_spells", "1356", "nMaxSlots: " + IntToString(stSpell.nMaxSlots) + + // " nSlots: " + IntToString(stSpell.nSlot)); + while(stSpell.nSlot < stSpell.nMaxSlots) + { + nSpell = GetKnownSpellId(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot); + int nSpellBuffDuration = StringToInt(Get2DAString("ai_spells", "Buff_Duration", nSpell)); + //ai_Debug("0i_spells", "1361", "nBuffType: " + IntToString(stSpell.nBuffType) + + // " nSpellBuffDuration: " + IntToString(nSpellBuffDuration) + + // " sBuffGroup: " + Get2DAString("ai_spells", "Buff_Group", nSpell)); + if(stSpell.nBuffType == nSpellBuffDuration || stSpell.nBuffType == 1) + { + //ai_Debug("0i_spells", "1367", "Ready: " + IntToString(GetSpellUsesLeft(stSpell.oCaster, stSpell.nClass, nSpell))); + if(GetSpellUsesLeft(stSpell.oCaster, stSpell.nClass, nSpell)) + { + if(stSpell.nTarget > 0) + { + sBuffTarget = Get2DAString("ai_spells", "Buff_Target", nSpell); + oTarget = GetLocalObject(stSpell.oCaster, "AI_ALLY_TARGET_" + IntToString(stSpell.nTarget)); + if(sBuffTarget != "0" || (sBuffTarget == "0" && stSpell.oCaster == oTarget)) + { + sBuffGroup = "AI_USED_SPELL_GROUP_" + Get2DAString("ai_spells", "Buff_Group", nSpell); + if(!ai_SpellGroupNotCast(oTarget, sBuffGroup)) oTarget == OBJECT_INVALID; + } + else oTarget == OBJECT_INVALID; + } + else oTarget = ai_GetBuffTarget(stSpell.oCaster, nSpell); + //ai_Debug("0i_spells", "1382", "nSpell: " + IntToString(nSpell) + + // " oTarget: " + GetName(oTarget)); + if(oTarget != OBJECT_INVALID) + { + ai_CastKnownSpell(stSpell.oCaster, stSpell.nClass, nSpell, oTarget, TRUE, stSpell.oPC); + stSpell.nSlot++; + DelayCommand(AI_HENCHMAN_BUFF_DELAY, AssignCommand(stSpell.oCaster, ai_ActionCastKnownBuff(stSpell))); + return; + } + } + } + stSpell.nSlot++; + } + } + stSpell.nLevel--; + //ai_Debug("0i_spells", "1396", "nLevel: " + IntToString(stSpell.nLevel)); + if(stSpell.nLevel > -1) + { + stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + stSpell.nSlot = 0; + } + } + } + stSpell.nPosition++; + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + if(stSpell.nClass == CLASS_TYPE_INVALID) break; + //ai_Debug("0i_spells", "921", "nClass: " + IntToString(stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + stSpell.nSlot = 0; + if(Get2DAString("classes", "MemorizesSpells", stSpell.nClass) == "1") + { + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + AssignCommand(stSpell.oCaster, ai_ActionCastMemorizedBuff(stSpell)); + return; + } + else stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + } + } + ai_CheckForPerDayItems(stSpell.oCaster, stSpell.oPC, stSpell.nBuffType); +} +void ai_CastBuffs(object oCaster, int nBuffType, int nTarget, object oPC) +{ + // buff types: 1 - All, 2 - Short duration, 3 - Long duration + // Buff groups are used to prevent a henchmen to cast spells that have the same effect, + // for example: resist elements and protection from elements are similiar so the henchmen + // would cast only the most powerful among these if he has them both. + if(AI_DEBUG) ai_Debug("0i_spells", "1670", GetName(oCaster) + " is casting buffs: " + IntToString(nBuffType) + + " nTarget: " + IntToString(nTarget) + "!"); + struct stSpell stSpell; + stSpell.oPC = oPC; + stSpell.oCaster = oCaster; + stSpell.nBuffType = nBuffType; + stSpell.nTarget = nTarget; + stSpell.nPosition = 1; + // Look for summons spells on All, Long durations and the whole party. + if((nBuffType == 1 || nBuffType == 3) && nTarget == 0) + { + while(stSpell.nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + if(AI_DEBUG) ai_Debug("0i_spells", "1684", "nClass: " + IntToString(stSpell.nClass)); + if(stSpell.nClass == CLASS_TYPE_INVALID) break; + if(AI_DEBUG) ai_Debug("0i_spells", "1686", "SpellCaster: " + Get2DAString("classes", "SpellCaster", stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + if(AI_DEBUG) ai_Debug("0i_spells", "1692", "MemorizesSpells: " + Get2DAString("classes", "MemorizesSpells", stSpell.nClass)); + if(Get2DAString("classes", "MemorizesSpells", stSpell.nClass) == "1") + { + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + AssignCommand(stSpell.oCaster, ai_ActionCastMemorizedSummons(stSpell)); + return; + } + else + { + stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + AssignCommand(stSpell.oCaster, ai_ActionCastKnownSummons(stSpell)); + return; + } + } + stSpell.nPosition++; + } + // Exit here; if we summoned a monster then it linked off of that spell + // cast to continue the action queue for all buff spell cast actions. + } + ai_CheckForBuffSpells(stSpell); +} +int ai_CastSpontaneousCure(object oCreature, object oTarget, object oPC) +{ + if(ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC)) return FALSE; + if(ai_GetMagicMode(oCreature, AI_MAGIC_NO_SPONTANEOUS_CURE)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_spells", "1643", GetName(oCreature) + " is looking to cast a spontaneous cure spell."); + if(!GetLevelByClass(CLASS_TYPE_CLERIC, oCreature)) return FALSE; + int nDamage = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + int nSpell, nSlot, nMaxSlots, nLevel = 4; + int nSpellSave, nSlotSave, nLevelSave = 5; + string sSpellName; + while(nLevel > -1) + { + // We check CLASS_TYPE_CLERIC as thats the only class with spontaneous cure spells. + nMaxSlots = GetMemorizedSpellCountByLevel(oCreature, CLASS_TYPE_CLERIC, nLevel); + nSlot = 0; + if(AI_DEBUG) ai_Debug("0i_spells", "1653", "nLevel: " + IntToString(nLevel) + " nMaxSlots: " + IntToString(nMaxSlots)); + while(nSlot < nMaxSlots) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1656", "nSlot: " + IntToString(nSlot) + + " Spell Ready: " + IntToString(GetMemorizedSpellReady(oCreature, CLASS_TYPE_CLERIC, nLevel, nSlot))); + if(GetMemorizedSpellReady(oCreature, CLASS_TYPE_CLERIC, nLevel, nSlot)) + { + if(nLevel == 4) nSpell = SPELL_CURE_CRITICAL_WOUNDS; + else if(nLevel == 3) nSpell = SPELL_CURE_SERIOUS_WOUNDS; + else if(nLevel == 2) nSpell = SPELL_CURE_MODERATE_WOUNDS; + else if(nLevel == 1) nSpell = SPELL_CURE_LIGHT_WOUNDS; + else nSpell = 0; + if(AI_DEBUG) ai_Debug("0i_spells", "1665", "nSpell: " + IntToString(nSpell)); + if(nSpell) + { + if(ai_ShouldWeCastThisCureSpell(nSpell, nDamage)) + { + SetMemorizedSpellReady(oCreature, CLASS_TYPE_CLERIC, nLevel, nSlot, FALSE); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + ai_SendMessages(GetName(oCreature) + " has spontaneously cast " + sSpellName + " on " + GetName(oTarget) + ".", AI_COLOR_MAGENTA, oPC); + if(AI_DEBUG) ai_Debug("0i_spells", "1673", GetName(oCreature) + " has spontaneously cast " + sSpellName + " on " + GetName(oTarget) + "."); + ActionCastSpellAtObject(nSpell, oTarget, 255, TRUE); + return TRUE; + } + // Save the lowest level cure spell as we might need to cast it. + else if(nLevel < nLevelSave) + { + nSpellSave = nSpell; + nLevelSave = nLevel; + nSlotSave = nSlot; + } + } + } + nSlot++; + } + nLevel--; + } + // Did we find a cure spell? If we did then use it. + if(nSpellSave) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1693", GetName(oCreature) + " has cast the lowest level cure spell on " + GetName(oTarget) + "."); + SetMemorizedSpellReady(oCreature, CLASS_TYPE_CLERIC, nLevelSave, nSlotSave, FALSE); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpellSave))); + ai_SendMessages(GetName(oCreature) + " has spontaneously cast " + sSpellName + " on " + GetName(oTarget) + ".", AI_COLOR_MAGENTA, oPC); + ActionCastSpellAtObject(nSpellSave, oTarget, 255, TRUE); + return TRUE; + } + return FALSE; +} +int ai_CastMemorizedHealing(object oCreature, object oTarget, object oPC, int nClass) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1702", GetName(oCreature) + " is looking to cast a memorized cure spell."); + int nDamage = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + int nSpell, nSlot, nMaxSlots, nLevel = 9; + int nClassSave, nSlotSave, nLevelSave = 10; + while(nLevel > -1) + { + nMaxSlots = GetMemorizedSpellCountByLevel(oCreature, nClass, nLevel); + nSlot = 0; + if(AI_DEBUG) ai_Debug("0i_spells", "1710", "nLevel: " + IntToString(nLevel) + " nMaxSlots: " + IntToString(nMaxSlots)); + while(nSlot < nMaxSlots) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1713", "nSlot: " + IntToString(nSlot) + + " Spell Ready: " + IntToString(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot))); + if(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot)) + { + nSpell = GetMemorizedSpellId(oCreature, nClass, nLevel, nSlot); + if(ai_ShouldWeCastThisCureSpell(nSpell, nDamage)) + { + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(AI_DEBUG) ai_Debug("0i_spells", "1721", GetName(oCreature) + " has cast " + sSpellName + " on " + GetName(oTarget) + "."); + ai_CastMemorizedSpell(oCreature, nClass, nLevel, nSlot, oTarget, FALSE, oPC); + return TRUE; + } + // Save the lowest level cure spell as we might need to cast it. + else if(nLevel < nLevelSave && (nSpell > 26 && nSpell < 32)) + { + nClassSave = nClass; + nLevelSave = nLevel; + nSlotSave = nSlot; + } + } + nSlot++; + } + nLevel--; + } + // Did we find a cure spell? If we did then use it. + if(nLevelSave < 10) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1740", GetName(oCreature) + " has cast the lowest level cure spell on " + GetName(oTarget) + "."); + ai_CastMemorizedSpell(oCreature, nClassSave, nLevelSave, nSlotSave, oTarget, FALSE, oPC); + return TRUE; + } + return FALSE; +} +int ai_CastKnownHealing(object oCreature, object oTarget, object oPC, int nClass) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1748", GetName(oCreature) + " is looking to cast a known cure spell."); + int nDamage = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + int nSpell, nSlot, nMaxSlots, nLevel = 9; + int nClassSave, nSpellSave, nLevelSave = 10; + while(nLevel > -1) + { + nMaxSlots = GetKnownSpellCount(oCreature, nClass, nLevel); + nSlot = 0; + if(AI_DEBUG) ai_Debug("0i_spells", "1756", "nLevel: " + IntToString(nLevel) + " nMaxSlots: " + IntToString(nMaxSlots)); + while(nSlot < nMaxSlots) + { + nSpell = GetKnownSpellId(oCreature, nClass, nLevel, nSlot); + if(AI_DEBUG) ai_Debug("0i_spells", "1760", "nSlot: " + IntToString(nSlot) + + " Spell Ready: " + IntToString(GetSpellUsesLeft(oCreature, nClass, nSpell))); + if(GetSpellUsesLeft(oCreature, nClass, nSpell)) + { + if(ai_ShouldWeCastThisCureSpell(nSpell, nDamage)) + { + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(AI_DEBUG) ai_Debug("0i_spells", "1767", GetName(oCreature) + " has cast " + sSpellName + " on " + GetName(oTarget) + "."); + ai_CastKnownSpell(oCreature, nClass, nSpell, oTarget, FALSE, oPC); + return TRUE; + } + // Save the lowest level cure spell as we might need to cast it. + else if(nLevel < nLevelSave && (nSpell > 26 && nSpell < 32)) + { + nClassSave = nClass; + nLevelSave = nLevel; + nSpellSave = nSpell; + } + } + nSlot++; + } + nLevel--; + } + return FALSE; + // Did we find a cure spell? If we did then use it. + if(nLevelSave < 10) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1781", GetName(oCreature) + " has cast the lowest level cure spell on " + GetName(oTarget) + "."); + ai_CastKnownSpell(oCreature, nClassSave, nSpellSave, oTarget, FALSE, oPC); + return TRUE; + } +} +int ai_ConcentrationCondition(object oCreature) +{ + int nType; + effect eEffect = GetFirstEffect(oCreature); + while(GetIsEffectValid(eEffect)) + { + nType = GetEffectType(eEffect); + if(nType == EFFECT_TYPE_STUNNED || nType == EFFECT_TYPE_PARALYZE || + nType == EFFECT_TYPE_SLEEP || nType == EFFECT_TYPE_FRIGHTENED || + nType == EFFECT_TYPE_PETRIFY || nType == EFFECT_TYPE_CONFUSED || + nType == EFFECT_TYPE_DOMINATED || nType == EFFECT_TYPE_POLYMORPH) + { + return TRUE; + } + eEffect = GetNextEffect(oCreature); + } + return FALSE; +} +void ai_SpellConcentrationCheck(object oCaster = OBJECT_SELF) +{ + object oMaster = GetMaster(); + if(GetLocalInt(oCaster,"X2_L_CREATURE_NEEDS_CONCENTRATION")) + { + if(GetIsObjectValid(oMaster)) + { + int nAction = GetCurrentAction(oMaster); + // master doing anything that requires attention and breaks concentration + if(nAction == ACTION_DISABLETRAP || nAction == ACTION_TAUNT || + nAction == ACTION_PICKPOCKET || nAction ==ACTION_ATTACKOBJECT || + nAction == ACTION_COUNTERSPELL || nAction == ACTION_FLAGTRAP || + nAction == ACTION_CASTSPELL || nAction == ACTION_ITEMCASTSPELL) + { + SignalEvent(oCaster,EventUserDefined(X2_EVENT_CONCENTRATION_BROKEN)); + } + else if(ai_ConcentrationCondition(oMaster)) + { + SignalEvent(oCaster,EventUserDefined(X2_EVENT_CONCENTRATION_BROKEN)); + } + } + } +} +int ai_CastInMelee(object oCreature, int nSpell, int nInMelee) +{ + // If this is a spell and we are in melee. + if(nInMelee > 0 && !GetHasFeat(FEAT_EPIC_IMPROVED_COMBAT_CASTING, oCreature)) + { + // Using DC 19 so we will use with up to a 50% failure. + int nSpellLevel = StringToInt(Get2DAString("spells", "Innate", nSpell)); + int nDC = AI_DEFENSIVE_CASTING_DC + nSpellLevel; + int nRoll = Random(AI_DEFENSIVE_CASTING_DIE) + 1; + int nConcentration = GetSkillRank(SKILL_CONCENTRATION, oCreature); + if(GetHasFeat(FEAT_COMBAT_CASTING, oCreature)) nConcentration += 4; + if(AI_DEBUG) ai_Debug("0i_spells", "1081", "Use Defensive Casting? nDC: " + IntToString(nDC) + " FEAT_COMBAT_CASTING: " + + IntToString(GetHasFeat(FEAT_COMBAT_CASTING, oCreature)) + + " nConcentration: " + IntToString(nConcentration) + " + nRoll: " + IntToString(nRoll)); + if(nConcentration + nRoll > nDC) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1086", GetName(oCreature) + " is casting defensively!"); + SetActionMode(oCreature, ACTION_MODE_DEFENSIVE_CAST, TRUE); + } + // Defensive casting is a bad idea so maybe casting anyspell is a bad idea. + else + { + object oMelee = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + if(GetIsObjectValid(oMelee)) + { + nRoll = Random(AI_CASTING_IN_MELEE_ROLL) + 1; + nDC = AI_CASTING_IN_MELEE_DC + nSpellLevel + nInMelee * ai_GetCreatureAttackBonus(oMelee); + if(AI_DEBUG) ai_Debug("0i_spells", "1097", "Cast anyway: nConcentration: " + IntToString(nConcentration) + + " nRoll: " + IntToString(nRoll) + " nDC: " + IntToString(nDC) + + " oMelee: " + GetName(oMelee)); + if(nConcentration + nRoll > nDC) return TRUE; + if(AI_DEBUG) ai_Debug("0i_spells", "1101", GetName(oCreature) + " is not casting in melee against " + GetName(oMelee)); + return FALSE; + } + } + } + // We don't need to cast defensively so lets make sure it's off. + else if(GetActionMode(oCreature, ACTION_MODE_DEFENSIVE_CAST)) + { + SetActionMode(oCreature, ACTION_MODE_DEFENSIVE_CAST, FALSE); + } + return TRUE; +} +float ai_GetOffensiveSpellSearchRange(object oCreature, int nSpell) +{ + // Search the spell range + the distance to the closest enemy - 7.5 meters). + // This will keep the caster from running up on an enemy to cast. + // But allow them to move up some if needed. + float fRange = ai_GetSpellRange(nSpell); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + float fEnemyDistance = GetDistanceBetween(oCreature, oNearestEnemy); + // Spell range is less than the nearest enemy. Restrict based on nearest enemy. + // Spell range is less than the nearestenemy. Check enemy action then adjust. + if(fRange < fEnemyDistance) + { + // We check this because if the enemy is moving or has not started acting + // then we don't want to move up on them as they might move towards us! + int nAction = GetCurrentAction(oNearestEnemy); + if(AI_DEBUG) ai_Debug("0i_spells", "1130", GetName(oNearestEnemy) + " current action: " + IntToString(nAction)); + if(nAction != ACTION_MOVETOPOINT || nAction != ACTION_ITEMCASTSPELL || + nAction != ACTION_INVALID || nAction != ACTION_USEOBJECT || + nAction != ACTION_RANDOMWALK) fRange = fEnemyDistance + (fRange - 7.5); + } + if(fRange > AI_RANGE_BATTLEFIELD) return AI_RANGE_BATTLEFIELD; + else if(fRange < 0.1f) return 0.1f; + return fRange; +} +int ai_ShouldWeCastThisCureSpell(int nSpell, int nDamage) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1127", "nSpell: " + IntToString(nSpell) + " nDamage: " + + IntToString(nDamage)); + if(nSpell == SPELL_HEAL && nDamage > 50) return TRUE; + else if(nSpell == SPELL_CURE_CRITICAL_WOUNDS && nDamage > 31) return TRUE; + else if(nSpell == SPELL_CURE_SERIOUS_WOUNDS && nDamage > 23) return TRUE; + else if(nSpell == SPELL_CURE_MODERATE_WOUNDS && nDamage > 15) return TRUE; + else if(nSpell == SPELL_CURE_LIGHT_WOUNDS && nDamage > 6) return TRUE; + else if(nSpell == SPELL_CURE_MINOR_WOUNDS) return TRUE; + return FALSE; +} +void ai_CastWidgetSpell(object oPC, object oAssociate, object oTarget, location lLocation) +{ + int nIndex = GetLocalInt(oAssociate, "AI_WIDGET_SPELL_INDEX"); + DeleteLocalInt(oAssociate, "AI_WIDGET_SPELL_INDEX"); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + json jSpell = JsonArrayGet(jWidget, nIndex); + int nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + int nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + int nMetaMagic = JsonGetInt(JsonArrayGet(jSpell, 3)); + int nDomain = JsonGetInt(JsonArrayGet(jSpell, 4)); + //SendMessageToPC(oPC, "nSpell: " + IntToString(nSpell) + + // " oTarget: " + GetName(oTarget) + + // " nMetaMagic: " + IntToString(nMetaMagic) + + // " nDomain: " + IntToString(nDomain)); + if(GetCurrentAction(oAssociate) != ACTION_CASTSPELL) AssignCommand(oAssociate, ai_ClearCreatureActions(TRUE)); + if(!GetIsObjectValid(oTarget)) + { + AssignCommand(oAssociate, ActionCastSpellAtLocation(nSpell, lLocation, nMetaMagic, FALSE, 0, FALSE, -1, FALSE, nDomain)); + } + else AssignCommand(oAssociate, ActionCastSpellAtObject(nSpell, oTarget, nMetaMagic, FALSE, nDomain)); + +} +void ai_UseWidgetFeat(object oPC, object oAssociate, object oTarget, location lLocation) +{ + int nIndex = GetLocalInt(oAssociate, "AI_WIDGET_SPELL_INDEX"); + DeleteLocalInt(oAssociate, "AI_WIDGET_SPELL_INDEX"); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + json jFeat = JsonArrayGet(jWidget, nIndex); + int nFeat = JsonGetInt(JsonArrayGet(jFeat, 5)); + if(ai_GetIsInCombat(oAssociate)) AssignCommand(oAssociate, ai_ClearCreatureActions(TRUE)); + //SendMessageToPC(oPC, "0i_spells, 2104, nFeat: " + IntToString(nFeat) + " oTarget: " + GetName(oTarget)); + if(!GetIsObjectValid(oTarget)) + { + AssignCommand(oAssociate, ActionUseFeat(nFeat, OBJECT_INVALID, 0, lLocation)); + } + else AssignCommand(oAssociate, ActionUseFeat(nFeat, oTarget)); +} +void ai_UseWidgetItem(object oPC, object oAssociate, object oTarget, location lLocation) +{ + int nIndex = GetLocalInt(oAssociate, "AI_WIDGET_SPELL_INDEX"); + DeleteLocalInt(oAssociate, "AI_WIDGET_SPELL_INDEX"); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + json jItem = JsonArrayGet(jWidget, nIndex); + int nSpell = JsonGetInt(JsonArrayGet(jItem, 0)); + int nIprpSubType = JsonGetInt(JsonArrayGet(jItem, 4)); + object oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jItem, 5))); + itemproperty ipProperty; + if(ai_GetIsInCombat(oAssociate)) AssignCommand(oAssociate, ai_ClearCreatureActions(TRUE)); + if(nSpell == SPELL_HEALINGKIT) + { + ipProperty = GetFirstItemProperty(oItem); + if(GetItemPropertyType(ipProperty) == ITEM_PROPERTY_HEALERS_KIT) + { + if(ai_GetIsCharacter(oPC)) ai_SendMessages(GetName(oAssociate) + " uses " + GetName(oItem) + " on " + GetName(oTarget) + ".", AI_COLOR_YELLOW, oPC); + AssignCommand(oAssociate, ActionUseItemOnObject(oItem, ipProperty, oTarget)); + return; + } + } + ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + if(nIprpSubType == GetItemPropertySubType(ipProperty)) break; + ipProperty = GetNextItemProperty(oItem); + } + if(!GetIsObjectValid(oTarget)) + { + AssignCommand(oAssociate, ActionUseItemAtLocation(oItem, ipProperty, lLocation)); + } + else AssignCommand(oAssociate, ActionUseItemOnObject(oItem, ipProperty, oTarget)); +} diff --git a/src/module/nss/0i_states_cond.nss b/src/module/nss/0i_states_cond.nss new file mode 100644 index 0000000..4c77ccf --- /dev/null +++ b/src/module/nss/0i_states_cond.nss @@ -0,0 +1,423 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_states_cond +////////////////////////////////////////////////////////////////////////////////////////////////////// + Include scripts that handle states and conditions for combat. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_main" +#include "0i_messages" +#include "0i_time" +//#include "X0_I0_COMBAT" +// Wrapper for ClearAllActions - we have added extra vars to be cleared as well. +// Note this references OBJECT_SELF! +void ai_ClearCreatureActions(int bClearCombatState = FALSE); +// Used in combat to keep track of the creatures last rounds action. +// One use is to make sure we don't use the same spell on the next round. +// 0+ is the spell that was cast, other actions use AI_LAST_ACTION_* constants. +void ai_SetLastAction(object oCreature, int nAction = AI_LAST_ACTION_NONE); +// Returns TRUE if oCreatures last rounds action is equal to nAction. +// 0+ is the spell that was cast, other actions use AI_LAST_ACTION_* constants. +int ai_CompareLastAction(object oCreature, int nAction); +// Sets the correct listen checks on oCreature. +void ai_SetListeningPatterns(object oCreature); +// Returns TRUE if oCreature is an elemental, undead, or golem i.e. non-living. +int ai_IsNonliving(int nRacialType); +// Returns TRUE if oCreature is in combat. +int ai_GetIsInCombat(object oCreature); +// Sets the time that this oCreature's current combat round started. +// Using action based combat rounds has an unfortunate side effect: +// Once you attack in melee you will continue to attack in melee do to hardcoded +// logic. This will "PUSH" your end of round back until it decides to stop attacking! +// We avoid this by setting the time and if we check for combat and 6 seconds has +// passed then we assume the current round is over, ClearAllActions, and start the next round. +void ai_SetCombatRound(object oCreature); +// Clears the current combat round timer by deleting the value. +void ai_EndCombatRound(object oCreature); +// Returns TRUE if AI_COMBAT_ROUND_IN_SECONDS has not passed since ai_SetCombatRound. +// If it returns FALSE then it will clear the current combat round timer. +int ai_IsInCombatRound(object oCreature, int nCombatRound = AI_COMBAT_ROUND_IN_SECONDS); +// Returns TRUE if oCreature is busy. +// This checks various actions to see if oCreature is busy; +// in combat, busy mode, Actions: attacking, casting spell, counterspelling, +// disabling trap, item casting spell, opening lock, resting, setting trap. +int ai_GetIsBusy(object oCreature); +// Returns a value based on the disabling effect. +// Dead = 1, Bleeding = 2, Dying = 2, Stunned = 29, Confused = 24, Paralyzed = 27 +// Frightened 25, Turned = 35, Petrified = 79, Charmed = 23, Disappearappear = 75, +// Time Stop = 66, Dazed = 28, Sleep = 30. +// Returns FALSE if not Disabled. +int ai_Disabled(object oCreature); +// Set one of the AI_MODE_* bitwise constants on oAssociate to bOn. +void ai_SetAIMode(object oAssociate, int nBit, int bOn = TRUE); +// Return if nMode is set on oAssociate. Uses the AI_MODE_* bitwise constants. +int ai_GetAIMode(object oAssociate, int nBit); +// Set one of the AI_MAGIC_* bitwise constants on oAssociate to bOn. +void ai_SetMagicMode(object oAssociate, int nBit, int bOn = TRUE); +// Return if nMode is set on oAssociate. Uses the AI_MAGIC_* bitwise constants. +int ai_GetMagicMode(object oAssociate, int nBit); +// This is based off of the PC's settings for an associate and other creatures use a default. +// Set one of the AI_LOOT_* bitwise constants on oAssociate to bOn. +void ai_SetLootFilter(object oAssociate, int nBit, int bOn = TRUE); +// Return if nMode is set on oAssociate. Uses the AI_LOOT_* bitwise constants. +int ai_GetLootFilter(object oAssociate, int nBit); +// Set one of the AI_IP_* bitwise constants on oCreature to bOn. +void ai_SetItemProperty(object oCreature, string sVarname, int nBit, int bOn = TRUE); +// Return if nMode is set on oCreature. Uses the AI_IP_* bitwise constants. +int ai_GetItemProperty(object oCreature, string sVarname, int nBit); +// Returns the number of hitpoints a creature must have to not be healed. +// This is based off of the PC's settings for an associate and other creatures use a default. +int ai_GetHealersHpLimit(object oCreature, int bInCombat = TRUE); +// Returns TRUE if nCondition is within nCurrentConditions. +// nCurrentConditions is setup in ai_GetNegativeConditions. +int ai_GetHasNegativeCondition(int nCondition, int nCurrentConditions); +// Returns an integer with bitwise flags set that represent the current negative +// conditions on oCreature. ai_GetHasNegativeCondition uses this function. +int ai_GetNegativeConditions(object oCreature); +// Returns TRUE if oObject is in the line of sight of oCreature. +// If the creature is close LineOfSight doesn't work well. +int ai_GetIsInLineOfSight(object oCreature, object oObject); +// Add the specified condition flag to the behavior state of the caller +void ai_SetBehaviorState(int nCondition, int bValid = TRUE); +// Returns TRUE if the specified behavior flag is set on the caller +int ai_GetBehaviorState(int nCondition); +// Highlights the current mode for the widget passed. +void ai_HighlightWidgetMode(object oPC, object oAssociate, int nToken); +// Checks to see if the party scale is correctly adjusted. +void ai_CheckXPPartyScale(object oCreature); + +void ai_ClearCreatureActions(int bClearCombatState = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_states_cond", "89", GetName(OBJECT_SELF) + " is clearing actions (" + + IntToString(bClearCombatState) + ")!"); + DeleteLocalInt(OBJECT_SELF, AI_CURRENT_ACTION_MODE); + ClearAllActions(bClearCombatState); +} +void ai_SetLastAction(object oCreature, int nAction = AI_LAST_ACTION_NONE) +{ + SetLocalInt(oCreature, sLastActionVarname, nAction); +} +int ai_CompareLastAction(object oCreature, int nAction) +{ + // Are we checking to see if we cast a spell? + if(nAction == AI_LAST_ACTION_CAST_SPELL && + GetLocalInt(oCreature, sLastActionVarname) > -1) return TRUE; + // Check other last actions. + return (nAction == GetLocalInt(oCreature, sLastActionVarname)); +} +void ai_SetListeningPatterns(object oCreature) +{ + SetListenPattern(oCreature, AI_I_SEE_AN_ENEMY, AI_ALLY_SEES_AN_ENEMY); + SetListenPattern(oCreature, AI_I_HEARD_AN_ENEMY, AI_ALLY_HEARD_AN_ENEMY); + SetListenPattern(oCreature, AI_ATKED_BY_WEAPON, AI_ALLY_ATKED_BY_WEAPON); + SetListenPattern(oCreature, AI_ATKED_BY_SPELL, AI_ALLY_ATKED_BY_SPELL); + SetListenPattern(oCreature, AI_I_AM_WOUNDED, AI_ALLY_IS_WOUNDED); + SetListenPattern(oCreature, AI_I_AM_DEAD, AI_ALLY_IS_DEAD); + SetListenPattern(oCreature, AI_I_AM_DISEASED, AI_ALLY_IS_DISEASED); + SetListenPattern(oCreature, AI_I_AM_POISONED, AI_ALLY_IS_POISONED); + SetListenPattern(oCreature, AI_I_AM_WEAK, AI_ALLY_IS_WEAK); + SetListening(oCreature, TRUE); +} +int ai_IsNonliving(int nRacialType) +{ + switch(nRacialType) + { + case RACIAL_TYPE_CONSTRUCT: + case RACIAL_TYPE_ELEMENTAL: + case RACIAL_TYPE_UNDEAD: return TRUE; + } + return FALSE; +} +int ai_GetIsInCombat(object oCreature) +{ + if(AI_DEBUG) ai_Debug("0i_states_cond", "110", GetName(oCreature) + " is in Combat: Enemy Numbers = " + IntToString(GetLocalInt(oCreature, AI_ENEMY_NUMBERS))); + + return GetLocalInt(oCreature, AI_ENEMY_NUMBERS); +} +void ai_SetCombatRound(object oCreature) +{ + SetLocalInt(oCreature, "AI_COMBAT_ROUND_START", SQLite_GetTimeStamp()); + if(AI_DEBUG) ai_Debug("0i_states_cond", "116", " ===============> " + GetName(oCreature) + " ROUND START:" + IntToString(SQLite_GetTimeStamp()) + " <==============="); +} +void ai_EndCombatRound(object oCreature) +{ + if(AI_DEBUG) ai_Debug("0i_states_cond", "120", " ===============> " + GetName(oCreature) + " ROUND END:" + IntToString(SQLite_GetTimeStamp()) + " <==============="); + DeleteLocalInt(oCreature, "AI_COMBAT_ROUND_START"); +} +int ai_IsInCombatRound(object oCreature, int nCombatRound = AI_COMBAT_ROUND_IN_SECONDS) +{ + int nCombatRoundStart = GetLocalInt(oCreature, "AI_COMBAT_ROUND_START"); + if(AI_DEBUG) ai_Debug("0i_states_cond", "148", " nCombatRoundStart: " + IntToString(nCombatRoundStart)); + if(!nCombatRoundStart) return FALSE; + // New combat round calculator. If 6 seconds has passed then we are on a new round! + int nSQLTime = SQLite_GetTimeStamp(); + int nCombatRoundTime = nSQLTime - nCombatRoundStart; + if(AI_DEBUG) ai_Debug("0i_states_cond", "153", " SQLite_GetTimeStamp: " + IntToString(nSQLTime) + + "(" + IntToString(nSQLTime - nCombatRoundStart) + ")"); + if(nCombatRoundTime < nCombatRound) return TRUE; + ai_EndCombatRound(oCreature); + return FALSE; +} +// Testing to see if we can fix some delaying in combat. +int ai_GetIsBusy(object oCreature) +{ + int nAction = GetCurrentAction(oCreature); + if(AI_DEBUG) ai_Debug("0i_states_cond", "140", GetName(oCreature) + " Get is Busy, action: " + + IntToString(nAction)); + switch(nAction) + { + case ACTION_CASTSPELL : + case ACTION_ITEMCASTSPELL : + case ACTION_OPENLOCK : + case ACTION_REST : + case ACTION_DISABLETRAP : + case ACTION_ATTACKOBJECT : + case ACTION_COUNTERSPELL : + case ACTION_SETTRAP : return TRUE; + case ACTION_WAIT : + case ACTION_INVALID : + { + int nCombatWait = GetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + if(AI_DEBUG) ai_Debug("0i_states_cond", "153", "nCombatWait: " + IntToString(nCombatWait) + + " AI_AM_I_SEARCHING: " + IntToString(GetLocalInt(oCreature, AI_AM_I_SEARCHING))); + if(nCombatWait) + { + if(ai_IsInCombatRound(oCreature, nCombatWait)) return TRUE; + DeleteLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + } + else if(GetLocalInt(oCreature, AI_AM_I_SEARCHING)) DeleteLocalInt(oCreature, AI_AM_I_SEARCHING); + return FALSE; + } + case ACTION_MOVETOPOINT : + { + return ai_GetIsInCombat(oCreature); + } + } + return FALSE; +} +int ai_Disabled(object oCreature) +{ + if(GetIsDead(oCreature)) return 1; + // Check for effects. + effect eEffect = GetFirstEffect(oCreature); + while(GetIsEffectValid(eEffect)) + { + switch(GetEffectType(eEffect)) + { + case EFFECT_TYPE_DOMINATED : + { + if(!GetCommandable(oCreature)) SetCommandable(TRUE, oCreature); + return FALSE; + } + case EFFECT_TYPE_STUNNED : + case EFFECT_TYPE_DAZED : + case EFFECT_TYPE_SLEEP : + case EFFECT_TYPE_CONFUSED : + case EFFECT_TYPE_FRIGHTENED : + case EFFECT_TYPE_PARALYZE : + case EFFECT_TYPE_TURNED : + case EFFECT_TYPE_CHARMED : + case EFFECT_TYPE_PETRIFY : + case EFFECT_TYPE_TIMESTOP : + { + if(AI_DEBUG) ai_Debug("0i_stats_cond", "195", GetName(oCreature) + " is disabled(" + + IntToString(GetEffectType(eEffect)) + ")"); + return GetEffectType(eEffect); + } + } + eEffect = GetNextEffect(oCreature); + } + // Not Commandable is basically disabled as far as the AI is concerned. + if(!GetCommandable(oCreature)) + { + if(AI_DEBUG) ai_Debug("0i_stats_cond", "213", GetName(oCreature) + " is disabled(Not Commandable)!"); + return EFFECT_TYPE_PARALYZE; + } + if(AI_DEBUG) ai_Debug("0i_states_cond", "202", GetName(oCreature) + " is not disabled."); + return FALSE; +} +void ai_SetAIMode(object oAssociate, int nBit, int bOn = TRUE) +{ + int nAIModes = GetLocalInt(oAssociate, sAIModeVarname); + if(bOn) nAIModes = nAIModes | nBit; + else nAIModes = nAIModes & ~nBit; + SetLocalInt(oAssociate, sAIModeVarname, nAIModes); + // Set widget to show the mode they are in. + +} +int ai_GetAIMode(object oAssociate, int nBit) +{ + if(GetLocalInt(oAssociate, sAIModeVarname) & nBit) return TRUE; + return FALSE; +} +void ai_SetMagicMode(object oAssociate, int nBit, int bOn = TRUE) +{ + int nMagicModes = GetLocalInt(oAssociate, sMagicModeVarname); + if(bOn) nMagicModes = nMagicModes | nBit; + else nMagicModes = nMagicModes & ~nBit; + SetLocalInt(oAssociate, sMagicModeVarname, nMagicModes); +} +int ai_GetMagicMode(object oAssociate, int nBit) +{ + if(GetLocalInt(oAssociate, sMagicModeVarname) & nBit) return TRUE; + return FALSE; +} +void ai_SetLootFilter(object oAssociate, int nLootBit, int bOn = TRUE) +{ + int nLootFilter = GetLocalInt(oAssociate, sLootFilterVarname); + if(bOn) nLootFilter = nLootFilter | nLootBit; + else nLootFilter = nLootFilter & ~nLootBit; + SetLocalInt(oAssociate, sLootFilterVarname, nLootFilter); +} +int ai_GetLootFilter(object oAssociate, int nBit) +{ + if(GetLocalInt(oAssociate, sLootFilterVarname) & nBit) return TRUE; + return FALSE; +} +void ai_SetItemProperty(object oCreature, string sVarname, int nBit, int bOn = TRUE) +{ + int nItemProperties = GetLocalInt(oCreature, sVarname); + if(bOn) nItemProperties = nItemProperties | nBit; + else nItemProperties = nItemProperties & ~nBit; + SetLocalInt(oCreature, sVarname, nItemProperties); +} +int ai_GetItemProperty(object oCreature, string sVarname, int nBit) +{ + if(GetLocalInt(oCreature, sVarname) & nBit) return TRUE; + return FALSE; +} +int ai_GetHealersHpLimit(object oCreature, int bInCombat = TRUE) +{ + if(bInCombat) return GetLocalInt(oCreature, AI_HEAL_IN_COMBAT_LIMIT); + else return GetLocalInt(oCreature, AI_HEAL_OUT_OF_COMBAT_LIMIT); +} +int ai_GetHasNegativeCondition(int nCondition, int nCurrentConditions) +{ + return (nCurrentConditions & nCondition); +} +int ai_GetNegativeConditions(object oCreature) +{ + int nCondition, nEffectType; + effect eEffect = GetFirstEffect(oCreature); + while(GetIsEffectValid (eEffect)) + { + // Rage and maybe other abilities might come from the oCreature! + if(GetEffectCreator(eEffect) != oCreature) + { + nEffectType = GetEffectType(eEffect); + switch(nEffectType) + { + case EFFECT_TYPE_DISEASE: nCondition = nCondition | AI_CONDITION_DISEASE; break; + case EFFECT_TYPE_POISON: nCondition = nCondition | AI_CONDITION_POISON; break; + case EFFECT_TYPE_CURSE: nCondition = nCondition | AI_CONDITION_CURSE; break; + case EFFECT_TYPE_BLINDNESS: + case EFFECT_TYPE_DEAF: nCondition = nCondition | AI_CONDITION_BLINDDEAF; break; + case EFFECT_TYPE_ABILITY_DECREASE: nCondition = nCondition | AI_CONDITION_ABILITY_DRAIN; break; + case EFFECT_TYPE_NEGATIVELEVEL: nCondition = nCondition | AI_CONDITION_LEVEL_DRAIN; break; + case EFFECT_TYPE_AC_DECREASE: nCondition = nCondition | AI_CONDITION_AC_DECREASE; break; + case EFFECT_TYPE_ATTACK_DECREASE: nCondition = nCondition | AI_CONDITION_ATK_DECREASE; break; + case EFFECT_TYPE_CHARMED: nCondition = nCondition | AI_CONDITION_CHARMED; break; + case EFFECT_TYPE_CONFUSED: nCondition = nCondition | AI_CONDITION_CONFUSED; break; + case EFFECT_TYPE_DAZED: nCondition = nCondition | AI_CONDITION_DAZED; break; + case EFFECT_TYPE_DAMAGE_DECREASE: nCondition = nCondition | AI_CONDITION_DMG_DECREASE; break; + case EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE: nCondition = nCondition | AI_CONDITION_DMG_I_DECREASE; break; + case EFFECT_TYPE_DOMINATED: nCondition = nCondition | AI_CONDITION_DOMINATED; break; + case EFFECT_TYPE_FRIGHTENED: nCondition = nCondition | AI_CONDITION_FRIGHTENED; break; + case EFFECT_TYPE_PARALYZE: nCondition = nCondition | AI_CONDITION_PARALYZE; break; + case EFFECT_TYPE_SAVING_THROW_DECREASE: nCondition = nCondition | AI_CONDITION_SAVE_DECREASE; break; + case EFFECT_TYPE_SKILL_DECREASE: nCondition = nCondition | AI_CONDITION_SKILL_DECREASE; break; + case EFFECT_TYPE_SLOW: nCondition = nCondition | AI_CONDITION_SLOW; break; + case EFFECT_TYPE_SPELL_RESISTANCE_DECREASE: nCondition = nCondition | AI_CONDITION_SR_DECREASE; break; + case EFFECT_TYPE_STUNNED: nCondition = nCondition | AI_CONDITION_STUNNED; break; + } + } + eEffect = GetNextEffect(oCreature); + } + return nCondition; +} +int ai_GetIsInLineOfSight(object oCreature, object oObject) +{ + // Creatures can block the line of sight so when close we shouldn't check. + if(GetDistanceBetween(oObject, oCreature) <= AI_RANGE_MELEE) return TRUE; + return LineOfSightObject(oCreature, oObject); +} +void ai_SetBehaviorState(int nCondition, int bValid = TRUE) +{ + int nPlot = GetLocalInt(OBJECT_SELF, "NW_BEHAVIOR_MASTER"); + if(bValid) + { + nPlot = nPlot | nCondition; + SetLocalInt(OBJECT_SELF, "NW_BEHAVIOR_MASTER", nPlot); + } + else + { + nPlot = nPlot & ~nCondition; + SetLocalInt(OBJECT_SELF, "NW_BEHAVIOR_MASTER", nPlot); + } +} +int ai_GetBehaviorState(int nCondition) +{ + int nPlot = GetLocalInt(OBJECT_SELF, "NW_BEHAVIOR_MASTER"); + if(nPlot & nCondition) return TRUE; + return FALSE; +} +void ai_HighlightWidgetMode(object oPC, object oAssociate, int nToken) +{ + if(oPC == oAssociate) return; + int bBool; + bBool = ai_GetAIMode(oAssociate,AI_MODE_DEFEND_MASTER); + NuiSetBind(oPC, nToken, "btn_cmd_guard_encouraged", JsonBool(bBool)); + bBool = ai_GetAIMode(oAssociate,AI_MODE_STAND_GROUND); + NuiSetBind(oPC, nToken, "btn_cmd_hold_encouraged", JsonBool(bBool)); + bBool = ai_GetAIMode(oAssociate,AI_MODE_FOLLOW); + NuiSetBind(oPC, nToken, "btn_cmd_follow_encouraged", JsonBool(bBool)); + if(!ai_GetAIMode(oAssociate, AI_MODE_DEFEND_MASTER) && + !ai_GetAIMode(oAssociate, AI_MODE_STAND_GROUND) && + !ai_GetAIMode(oAssociate, AI_MODE_FOLLOW)) bBool = TRUE; + else bBool = FALSE; + NuiSetBind(oPC, nToken, "btn_cmd_attack_encouraged", JsonBool(bBool)); +} +void ai_CheckXPPartyScale(object oCreature) +{ + object oModule = GetModule(); + if(!GetLocalInt(oModule, AI_RULE_PARTY_SCALE)) return; + object oMaster; + if(!ai_GetIsCharacter(oCreature)) + { + oMaster = GetMaster(oCreature); + while(oMaster != OBJECT_INVALID) + { + if(ai_GetIsCharacter(oMaster)) break; + oMaster = GetMaster(oMaster); + } + if(oMaster == OBJECT_INVALID) return; + } + else oMaster = oCreature; + float fDefaultXPScale = IntToFloat(GetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP)); + float fPartySize = 4.0; + int nAssociateType, nHenchman, nHenchAssociate; + object oHenchman; + for(nAssociateType = 1; nAssociateType <= 5; nAssociateType++) + { + if(nAssociateType == ASSOCIATE_TYPE_HENCHMAN) + { + for(nHenchman = 1; nHenchman <= AI_MAX_HENCHMAN; nHenchman++) + { + oHenchman = GetAssociate(nAssociateType, oMaster, nHenchman); + if(oHenchman != OBJECT_INVALID) + { + fPartySize += 1.0; + for(nHenchAssociate = 2; nHenchAssociate <= 5; nHenchAssociate++) + { + if(GetAssociate(nHenchAssociate, oHenchman, 1) != OBJECT_INVALID) fPartySize += 1.0; + } + } + } + } + else if(GetAssociate(nAssociateType, oMaster, 1) != OBJECT_INVALID) fPartySize += 1.0; + } + int nXPScale = FloatToInt(fPartySize / 4.0 * fDefaultXPScale); + //SendMessageToPC(oMaster, GetName(oMaster) + " nXPScale = (3 + fPartySize / 4.0 * fDefaultXPScale)" + + // IntToString(nXPScale) + " = (" + FloatToString(fPartySize, 0, 1) + " / 4.0 * " + + // FloatToString(fDefaultXPScale, 0, 1) + ")"); + SetModuleXPScale(nXPScale); +} + diff --git a/src/module/nss/0i_talents.nss b/src/module/nss/0i_talents.nss new file mode 100644 index 0000000..fa773b9 --- /dev/null +++ b/src/module/nss/0i_talents.nss @@ -0,0 +1,3098 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0i_talents + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Fuctions to use a category of skills, feats, spells, or items. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_combat" +// ***************************************************************************** +// ************************* Try * Defensive Talents *************************** +// ***************************************************************************** +// These functions try to find and use a specific set of talents intelligently. + +// Returns TRUE if oCreature uses a healing talent on oTarge. +// nInMelee is the number of enemies the caller is in melee with. +// If oTarget is set then they will heal that target if they need it. +// Otherwise checks all allies to see who we should heal based on the talent. +int ai_TryHealingTalent(object oCreature, int nInMelee, object oTarget = OBJECT_INVALID); +// Returns TRUE if oCreature uses a cure condition talent on an ally or self. +int ai_TryCureConditionTalent(object oCreature, int nInMelee, object oTarget = OBJECT_INVALID); +// Returns TRUE if oCreature uses a defensive talent. +// Checks for a Defensive talent(Protection, Enhancement, or Summons). +// Randomizes the order to mix up spells in combat. +// if oTarget is set then the defensive talent will be cast on them or OBJECT_SELF. +int ai_TryDefensiveTalents(object oCreature, int nInMelee, int nMaxLevel, int nRound = 0, object oTarget = OBJECT_INVALID); +// Returns TRUE if oCreature uses a defensive talent. +// Checks the enemy faction for most powerful class and picks a buff based on it. +//int ai_TryAdvancedBuffOnSelf(object oCreature, int nInMelee); +// Set any auras this oCreature has instantly. +// This can be done in the OnSpawn script, heart beat, or Perception. +void ai_SetAura(object oCreature); + +// ***************************************************************************** +// ************************ Try Physical Attack Talents ************************ +// ***************************************************************************** +// These functions try to find and use melee attack talents intelligently. + +// Wrapper for ActionAttack, oCreature uses nAction (attack) on oTarget. +// nInMelee is only used in AI_LAST_ACTION_RANGED_ATK actions. +// bPassive TRUE oCreature will not move while attacking. +// nActionMode, pass the action mode if one is being used. +void ai_ActionAttack(object oCreature, int nAction, object oTarget, int nInMelee = 0, int bPassive = FALSE, int nActionMode = 0); +// Returns TRUE if oCreature uses a dragons breath talent +// Check for dragon's attacks under TALENT_CATEGORY_DRAGONS_BREATH(19). +// nRound must be supplied so we can keep track of the breath uses. +int ai_TryDragonBreathAttack(object oCreature, int nRound, object oTarget = OBJECT_INVALID); +// Returns TRUE if oCreature uses a dragons wing attacks. +// Checks to see if a dragon can use its wings on a nearby enemy. +// Checks the right side and then the left side to see if it can attack. +int ai_TryWingAttacks(object oCreature); +// Returns TRUE if oCreature uses a dragons tail slap. +// Looks behind the dragon to see if it can use it's tail slap on an enemy. +int ai_TryTailSlap(object oCreature); +// Returns TRUE if oCreature uses a dragons crush attack. +// Dragon can fly up and crash down on opponents to do bludgeoning damage. +// If 3 times smaller than the dragon they will take extra damage and be +// Knocked Down for 1 round if Reflex save is not made. +int ai_TryCrushAttack(object oCreature, object oTarget); +// Returns TRUE if oCreature uses a dragons tail sweep attack. +// If the enemy is 4 sizes smaller than it the dragon to use its tail to sweep +// behind it doing damage and knocking the opponents down. +int ai_TryTailSweepAttack(object oCreature); +// Returns TRUE if oCreature finds a good target and uses Sneak Attack. +int ai_TrySneakAttack(object oCreature, int nInMelee, int bAlwaysAtk = TRUE); +// Returns TRUE if oCreature finds a good ranged target and uses Sneak Attack. +int ai_TryRangedSneakAttack(object oCreature, int nInMelee); +// Returns TRUE if oCreature uses a harmful melee talent. +int ai_TryMeleeTalents(object oCreature, object oTarget); +// ***************************************************************************** +// ******************************* Try * Skills ******************************** +// ***************************************************************************** +// These functions try to find and use a specific set of skills intelligently. + +// Wrapper to have oCreature use nSkill on oTarget. +void ai_UseSkill(object oCreature, int nSkill, object oTarget); +// Returns TRUE if oCreature uses the parry skill on someone attacking them. +// Checks if doing a parry might be successful. +int ai_TryParry(object oCreature); +// Returns TRUE if oCreature uses the Taunt skill on oTarget. +// Checks if doing a taunt might be successful against oTarget. +int ai_TryTaunt(object oCreature, object oTarget); +// Returns TRUE if oCreature uses the Animial emapthy skill on oTarget. +// For it to work oTarget must be an Animal, Beast, or Magical Beast. +// Checks if doing Animal Empathy might be successful against oTarget. +int ai_TryAnimalEmpathy(object oCreature, object oTarget = OBJECT_INVALID); +// ***************************************************************************** +// ******************************** Try * Feats ******************************** +// ***************************************************************************** +// These functions try to find and use a specific set of feats intelligently. + +// Wrapper to have oCreature use nFeat on oTarget. +void ai_UseFeat(object oCreature, int nFeat, object oTarget, int nSubFeat = 0); +// Wrapper to have oCreature use nActionMode on oTarget. +// nInMelee is only used in AI_LAST_ACTION_RANGED_ATK actions. +// bPassive TRUE oCreature will not move while attacking. +void ai_UseFeatAttackMode(object oCreature, int nActionMode, int nAction, object oTarget, int nInMelee = 0, int bPassive = FALSE); +// Returns TRUE if oCreature uses Rage. +// This checks if they are already in a rage and if they have the Rage feat. +int ai_TryBarbarianRageFeat(object oCreature); +// Returns TRUE if oCreature uses Bard song. +// This checks if they have any uses left, have the feat and if its viable. +int ai_TryBardSongFeat(object oCreature); +// Returns TRUE if oCreature uses Called shot. +// This checks if they have the feat and if its viable. +int ai_TryCalledShotFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Disarm. +// This checks if they have the feat and if its viable. +int ai_TryDisarmFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Divine Might. +// This only checks if they can use the feat and have turn undead uses left. +int ai_TryDivineMightFeat(object oCreature, int nInMelee); +// Returns TRUE if oCreature uses Divine Shield. +// This only checks if they can use the feat and have turn undead uses left. +int ai_TryDivineShieldFeat(object oCreature, int nInMelee); +// Returns TRUE if oCreature uses Expertise. +// This checks if they have the feat and if its viable. +// Also checks to see if the Improved Expertise feat would be better. +int ai_TryExpertiseFeat(object oCreature); +// Returns TRUE if oCreature uses Flurry of Blows. +// This checks if they have the feat and if its viable. +int ai_TryFlurryOfBlowsFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Improved Expertise. +// This checks if they have the feat and if its viable. +// Also checks to see if the Expertise feat would be better. +int ai_TryImprovedExpertiseFeat(object oCreature); +// Returns TRUE if oCreature uses Improved Power Attack. +// This checks if they have the feat and if its viable. +// Also checks to see if the Power Attack feat would be better. +int ai_TryImprovedPowerAttackFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Ki Damage. +// This checks if they have any uses left, have the feat and if its viable. +int ai_TryKiDamageFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Knockdown. +// This checks if they have the feat and if its viable. +int ai_TryKnockdownFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses a polymorph self feat. +// This checks if they have the feat and will use the best one. +int ai_TryPolymorphSelfFeat(object oCreature); +// Returns TRUE if oCreature uses Power Attack. +// This checks if they have the feat and if its viable. +// Also checks to see if the Improved Power Attack would be better. +int ai_TryPowerAttackFeat(object oCreature, object oEnemy); +// Returns TRUE if oCreature uses Quivering palm. +// This checks if they have any uses left, have the feat and if its viable. +int ai_TryQuiveringPalmFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Power Attack. +// This checks if they have the feat and if its viable. +// Using a bow and having arrows should be checked before calling this. +int ai_TryRapidShotFeat(object oCreature, object oTarget, int nInMelee); +// Returns TRUE if oCreature uses Sap. +// This checks if they have the feat and if its viable. +int ai_TrySapFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Smite evil. +// This checks if they have any uses left, have the feat and if its viable. +int ai_TrySmiteEvilFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Smite good. +// This checks if they have any uses left, have the feat and if its viable. +int ai_TrySmiteGoodFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Stunning fists. +// This checks if they have any uses left, have the feat and if its viable. +int ai_TryStunningFistFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses a summon animal companion talent. +int ai_TrySummonAnimalCompanionTalent(object oCreature); +// Returns TRUE if oCreature uses a summon familiar talent. +int ai_TrySummonFamiliarTalent(object oCreature); +// Returns TRUE if oCreature uses the Lay on Hands feat talent. +int ai_TryLayOnHands(object oCreature); +// Returns TRUE if oCreature uses a turning talent. +int ai_TryTurningTalent(object oCreature); +// Returns TRUE if oCreature uses Whirlwind. +// This checks if they have the feat and if its viable. +int ai_TryWhirlwindFeat(object oCreature); +// Returns TRUE if oCreature uses Wholeness of Body. +// This checks if they have any uses left, have the feat and if its viable. +int ai_TryWholenessOfBodyFeat(object oCreature); +// ***************************************************************************** +// ***************************** TALENT SCRIPTS ****************************** +// ***************************************************************************** +// These functions do not fall into another section. + +// Returns the MaxLevel used in GetCreatureTalent for oCreature. +// This checks the intelligence and the level of oCreature. +// Returns either -1 (random) or 10 for all talents. +int ai_GetMonsterTalentMaxLevel(object oCreature); +// Returns the nMaxLevel used in GetCreatureTalent for oCreature. +// This checks the difficulty of the combat and the level of oCreature. +// Return a number equal to 1 and half the level of oCreature upto 10. +// The max spell level used is equal to nMaxLevel or less. +int ai_GetAssociateTalentMaxLevel(object oCreature, int nDifficulty); +// Returns TRUE if oCreature has nTalent. +// nTalent will be a spell in the spells.2da. +int ai_GetHasTalent(object oCreature, int nTalent); +// Saves a talent in JsonArray. +// Array: 0-Type (1-spell, 2-sp ability, 4-feat, 3-item) +// Type 1)spell 0-type, 1-spell, 2-class, 3-level, 4-slot. +// Type 2)sp Ability 0-type, 1-spell, 2-class, 3-level, 4-slot. +// Type 3)feat 0-type, 1-spell, 2- class, 3- level. +// Type 4)item 0-type, 1-spell, 2-item object, 3-level, 4-slot. +// jJsonLevel is the level to place the talent in the json array +// maybe different then the talents actual level which is passed in nLevel. +void ai_SaveTalent(object oCreature, int nClass, int nJsonLevel, int nLevel, int nSlot, int nSpell, int nType, int bBuff, object oItem = OBJECT_INVALID); +// Removes a talent nSlotIndex from jLevel in jCategory. +void ai_RemoveTalent(object oCreature, json jCategory, json jLevel, string sCategory, int nLevel, int nSlotIndex); +// Saves a creatures talents to variables upon them for combat use. +// bMonster will check to see if they should be buffed when we set the talents. +void ai_SetCreatureTalents(object oCreature, int bMonster); +// Return TRUE if oCreature spontaneously casts a cure spell from a talent in sCategory. +int ai_UseSpontaneousCureTalentFromCategory(object oCreature, string sCategory, int nInMelee, int nDamage, object oTarget = OBJECT_INVALID); +// Returns TRUE if oCreature uses jTalent on oTarget. +// also Returns -1 if oCreature uses jTalent on oTarget with a memorized spell. +// This allows the user to remove jTalent from jLevel in jCategory. +int ai_UseCreatureSpellTalent(object oCreature, json jLevel, json jTalent, string sCategory, int nInMelee, object oTarget = OBJECT_INVALID); +// Return TRUE if oCreature uses a jTalent from oItem on oTarget. +int ai_UseCreatureItemTalent(object oCreature, json jLevel, json jTalent, string sCategory, int nInMelee, object oTarget = OBJECT_INVALID); +// Returns TRUE if oCreature uses a talent from sCategory of nLevel or less. +int ai_UseCreatureTalent(object oCreature, string sCategory, int nInMelee, int nLevel = 10, object oTarget = OBJECT_INVALID); +// Return TRUE if oCreature uses nTalent on oTarget. +int ai_UseTalent(object oCreature, int nTalent, object oTarget); +// Returns TRUE if jTalent is used on oTarget by oCaster. +// Checks the talent type and casts the correct spell. For items it checks uses. +int ai_UseTalentOnObject(object oCaster, json jTalent, object oTarget, int nInMelee); +// Returns TRUE if jTalent is used at lTarget location by oCaster. +// Checks the talent type and cast the correct spell. For items it checks uses. +int ai_UseTalentAtLocation(object oCaster, json jTalent, object oTarget, int nInMelee); +// Return TRUE if oCreature uses jTalent on oTarget after checking special cases. +int ai_CheckSpecialTalentsandUse(object oCreature, json jTalent, string sCategory, int nInMelee, object oTarget); + +int ai_TryHealingTalent(object oCreature, int nInMelee, object oTarget = OBJECT_INVALID) +{ + // First lets evaluate oTarget and see how strong of a spell we will need. + if(oTarget != OBJECT_INVALID) + { + if(oTarget == oCreature) + { + if(ai_GetAIMode(oCreature, AI_MODE_SELF_HEALING_OFF)) return FALSE; + } + else if(ai_GetAIMode(oCreature, AI_MODE_PARTY_HEALING_OFF)) return FALSE; + } + // We don't have a target so lets go check for one. + else + { + if(!ai_GetAIMode(oCreature, AI_MODE_PARTY_HEALING_OFF)) + { + // Lets not run past an enemy to heal unless we have the feats, bad tactics! + float fRange; + if(ai_CanIMoveInCombat(oCreature)) fRange = AI_RANGE_PERCEPTION; + else + { + fRange = GetDistanceBetween(oCreature, GetLocalObject(oCreature, AI_ENEMY_NEAREST)) - 3.0f; + // Looks bad when your right next to an ally, but technically the enemy is closer. + if(fRange < AI_RANGE_MELEE) fRange = AI_RANGE_MELEE; + } + oTarget = ai_GetAllyToHealTarget(oCreature, fRange); + } + else oTarget = oCreature; + if(oTarget == OBJECT_INVALID) return FALSE; + } + // Should we ignore associates? + if(ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && + GetAssociateType(oTarget) > 1) return FALSE; + int nHp = ai_GetPercHPLoss(oTarget); + int nHpLimit = ai_GetHealersHpLimit(oCreature); + if(AI_DEBUG) ai_Debug("0i_talents", "256", "nHp: " + IntToString(nHp) + + "< nHpLimit: " + IntToString(nHpLimit)); + if(nHp > nHpLimit) return FALSE; + int nDamage = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "260", GetName(oTarget) + " has lost " + IntToString(nDamage) + " hitpoints!"); + // Do they have Lay on Hands? + int bUseMagic = !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC); + if(bUseMagic && GetHasFeat(FEAT_LAY_ON_HANDS, oCreature)) + { + int nCanHeal = GetAbilityModifier(ABILITY_CHARISMA, oCreature) * ai_GetCharacterLevels(oCreature); + if(nCanHeal <= nDamage) + { + ai_UseFeat(oCreature, FEAT_LAY_ON_HANDS, oTarget); + return TRUE; + } + } + int nMaxLevel = 9; + // If they are about to die then throw caution to the wind and HEAL! + if(nHp <= AI_HEALTH_BLOODY || nHp < 11) nInMelee = 0; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_HEALING, nInMelee, nMaxLevel, oTarget)) return TRUE; + if(AI_DEBUG) ai_Debug("0i_talents", "275", GetName(oCreature) + " has no healing spells!" + + " Cleric lvls: " + IntToString(GetLevelByClass(CLASS_TYPE_CLERIC, oCreature)) + + " Sontaneous casting: " + IntToString(ai_GetMagicMode(oCreature, AI_MAGIC_NO_SPONTANEOUS_CURE))); + if(bUseMagic && GetLevelByClass(CLASS_TYPE_CLERIC, oCreature) && + !ai_GetMagicMode(oCreature, AI_MAGIC_NO_SPONTANEOUS_CURE)) + { + // We need to check our talents and see what spells we can convert. + if(ai_UseSpontaneousCureTalentFromCategory(oCreature, AI_TALENT_ENHANCEMENT, nInMelee, nDamage, oTarget)) return TRUE; + if(ai_UseSpontaneousCureTalentFromCategory(oCreature, AI_TALENT_PROTECTION, nInMelee, nDamage, oTarget)) return TRUE; + if(ai_UseSpontaneousCureTalentFromCategory(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nDamage, oTarget)) return TRUE; + if(ai_UseSpontaneousCureTalentFromCategory(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nDamage, oTarget)) return TRUE; + if(ai_UseSpontaneousCureTalentFromCategory(oCreature, AI_TALENT_TOUCH, nInMelee, nDamage, oTarget)) return TRUE; + if(ai_UseSpontaneousCureTalentFromCategory(oCreature, AI_TALENT_RANGED, nInMelee, nDamage, oTarget)) return TRUE; + if(ai_UseSpontaneousCureTalentFromCategory(oCreature, AI_TALENT_SUMMON, nInMelee, nDamage, oTarget)) return TRUE; + if(ai_UseSpontaneousCureTalentFromCategory(oCreature, AI_TALENT_CURE, nInMelee, nDamage, oTarget)) return TRUE; + } + return FALSE; +} +int ai_CheckTargetVsConditions(object oTarget, json jTalent, int nConditions) +{ + // Check nCondition for any negative effects based on the talent we have. + switch(JsonGetInt(JsonArrayGet(jTalent, 1))) + { + case SPELL_NEUTRALIZE_POISON : + if(ai_GetHasNegativeCondition(AI_CONDITION_POISON, nConditions)) return TRUE; + break; + case SPELL_REMOVE_DISEASE : + if(ai_GetHasNegativeCondition(AI_CONDITION_DISEASE, nConditions)) return TRUE; + break; + case SPELL_REMOVE_BLINDNESS_AND_DEAFNESS : + if(ai_GetHasNegativeCondition(AI_CONDITION_BLINDDEAF, nConditions)) return TRUE; + break; + case SPELL_REMOVE_FEAR : + if(ai_GetHasNegativeCondition(AI_CONDITION_FRIGHTENED, nConditions)) return TRUE; + break; + case SPELL_REMOVE_CURSE : + if(ai_GetHasNegativeCondition(AI_CONDITION_CURSE, nConditions)) return TRUE; + break; + case SPELL_REMOVE_PARALYSIS : + if(ai_GetHasNegativeCondition(AI_CONDITION_PARALYZE, nConditions)) return TRUE; + break; + case SPELL_CLARITY : + if(ai_GetHasNegativeCondition(AI_CONDITION_DAZED, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_CHARMED, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_CONFUSED, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_STUNNED, nConditions)) return TRUE; + break; + case SPELL_GREATER_RESTORATION : + if(ai_GetHasNegativeCondition(AI_CONDITION_DAZED, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_CONFUSED, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_DOMINATED, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_SLOW, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_FRIGHTENED, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_STUNNED, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_CHARMED, nConditions)) return TRUE; + case SPELL_RESTORATION : + if(ai_GetHasNegativeCondition(AI_CONDITION_LEVEL_DRAIN, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_BLINDDEAF, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_PARALYZE, nConditions)) return TRUE; + case SPELL_LESSER_RESTORATION : + if(ai_GetHasNegativeCondition(AI_CONDITION_ABILITY_DRAIN, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_SAVE_DECREASE, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_SR_DECREASE, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_SKILL_DECREASE, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_AC_DECREASE , nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_ATK_DECREASE, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_DMG_DECREASE, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_DMG_I_DECREASE, nConditions)) return TRUE; + } + return FALSE; +} +int ai_CheckTalentsVsConditions(object oCreature, int nConditions, int nInMelee, int nLevel, object oTarget) +{ + // Get the saved category from oCreature. + json jCategory = GetLocalJson(oCreature, AI_TALENT_CURE); + if(AI_DEBUG) ai_Debug("0i_talents", "357", "jCategory: " + AI_TALENT_CURE + " " + JsonDump(jCategory, 2)); + if(JsonGetType(jCategory) == JSON_TYPE_NULL) + { + SetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_CURE, -1); + return FALSE; + } + // Get the max talent level so we can skip the higher ones and save time. + int nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_CURE); + if(AI_DEBUG) ai_Debug("0i_talents", "365", AI_MAX_TALENT + AI_TALENT_CURE + ": " + + IntToString(nMaxTalentLevel) + + " nLevel: " + IntToString(nLevel)); + if(nMaxTalentLevel < nLevel) nLevel = nMaxTalentLevel; + if(nLevel < 0 || nLevel > 10) nLevel = 9; + json jLevel, jTalent; + int nClass, nSlot, nType, nSlotIndex, nMaxSlotIndex, nTalentUsed; + int bUseMagic = !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC); + int bUseMagicItems = !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC_ITEMS); + if(AI_DEBUG) ai_Debug("0i_talents", "374", "bUseMagic: " + IntToString(bUseMagic) + + " bUseMagicItems: " + IntToString(bUseMagicItems)); + // Loop through nLevels down to 0 looking for the first talent (i.e. the highest). + while(nLevel >= 0) + { + // Get the array of nLevel cycling down to 0. + jLevel = JsonArrayGet(jCategory, nLevel); + nMaxSlotIndex = JsonGetLength(jLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "382", "nLevel: " + IntToString(nLevel) + + " nMaxSlotIndex: " + IntToString(nMaxSlotIndex)); + if(nMaxSlotIndex > 0) + { + // Get the talent within nLevel cycling from the first to the last. + nSlotIndex = 0; + while (nSlotIndex <= nMaxSlotIndex) + { + jTalent= JsonArrayGet(jLevel, nSlotIndex); + if(AI_DEBUG) ai_Debug("0i_talents", "391", "nSlotIndex: " + IntToString(nSlotIndex) + + " jTalent Type: " + IntToString(JsonGetType(jTalent))); + // Check to see if the talent matches oTargets nConditionss. + if(ai_CheckTargetVsConditions(oTarget, jTalent, nConditions)) + { + nType = JsonGetInt(JsonArrayGet(jTalent, 0)); + if(bUseMagic) + { + if(nType == AI_TALENT_TYPE_SPELL) + { + if(ai_CastInMelee(oCreature, JsonGetInt(JsonArrayGet(jTalent, 1)), nInMelee)) + { + nTalentUsed = ai_UseCreatureSpellTalent(oCreature, jLevel, jTalent, AI_TALENT_CURE, nInMelee, oTarget); + // -1 means it was a memorized spell and we need to remove it. + if(nTalentUsed == -1) + { + ai_RemoveTalent(oCreature, jCategory, jLevel, AI_TALENT_CURE, nLevel, nSlotIndex); + return TRUE; + } + else if(nTalentUsed) return TRUE; + } + } + else if(nType == AI_TALENT_TYPE_SP_ABILITY) + { + // Special ability spells do not need to concentrate?! + if(ai_CheckSpecialTalentsandUse(oCreature, jTalent, AI_TALENT_CURE, nInMelee, oTarget)) + { + // When the ability is used that slot is now not readied. + // Multiple uses of the same spell are stored in different slots. + ai_RemoveTalent(oCreature, jCategory, jLevel, AI_TALENT_CURE, nLevel, nSlotIndex); + return TRUE; + } + } + } + if(bUseMagicItems && nType == AI_TALENT_TYPE_ITEM) + { + // Items do not need to concentrate. + if(ai_UseCreatureItemTalent(oCreature, jLevel, jTalent, AI_TALENT_CURE, nInMelee, oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_talents", "430", "Checking if Item is used up: " + + IntToString(JsonGetInt(JsonArrayGet(jTalent, 4)))); + if(JsonGetInt(JsonArrayGet(jTalent, 4)) == -1) + { + ai_RemoveTalent(oCreature, jCategory, jLevel, AI_TALENT_CURE, nLevel, nSlotIndex); + } + return TRUE; + } + } + } + nSlotIndex++; + } + } + else SetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_CURE, nLevel - 1); + nLevel--; + } + return FALSE; +} +int ai_TryCureConditionTalent(object oCreature, int nInMelee, object oTarget = OBJECT_INVALID) +{ + // Is Casting Cure spells off? + if(ai_GetMagicMode(oCreature, AI_MAGIC_CURE_SPELLS_OFF)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "450", AI_MAX_TALENT + AI_TALENT_CURE + ": " + + IntToString(GetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_CURE))); + // If the creature doesn't have cure talents then we set it to -1. + if(GetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_CURE) == -1) return FALSE; + // We check targets to see if they need to be cured. + int nNegativeConditions, nTargetNegConds, nIndex, nCnt = 1; + object oTarget; + if(oTarget == OBJECT_INVALID) + { + oTarget = GetLocalObject(oCreature, AI_ALLY + "1"); + while(oTarget != OBJECT_INVALID) + { + nTargetNegConds = ai_GetNegativeConditions(oTarget); + // Should we ignore associates? + if(!ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) || + GetAssociateType(oTarget) < 2) + { + if(nNegativeConditions < nTargetNegConds) + { + nNegativeConditions = nTargetNegConds; + nIndex = nCnt; + } + } + oTarget = GetLocalObject(oCreature, AI_ALLY + IntToString(++nCnt)); + } + // No one has a negative condition then get out. + if(!nNegativeConditions) return FALSE; + oTarget = GetLocalObject(oCreature, AI_ALLY + IntToString(nIndex)); + } + else + { + nNegativeConditions = ai_GetNegativeConditions(oTarget); + if(!nNegativeConditions) return FALSE; + } + if(oTarget == oCreature) + { + if(ai_GetAIMode(oCreature, AI_MODE_SELF_HEALING_OFF)) return FALSE; + } + else if(ai_GetAIMode(oCreature, AI_MODE_PARTY_HEALING_OFF)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "489", "nNegativeConditions: " + IntToString(nNegativeConditions) + + " on " + GetName(oTarget)); + if(ai_CheckTalentsVsConditions(oCreature, nNegativeConditions, nInMelee, 9, oTarget)) return TRUE; + return FALSE; +} +// ***************************************************************************** +// ************************* Try * Defensive Talents *************************** +// ***************************************************************************** +// These functions try to find and use a specific set of talents intelligently. + +int ai_TryDefensiveTalents(object oCreature, int nInMelee, int nMaxLevel, int nRound = 0, object oTarget = OBJECT_INVALID) +{ + // Summons are powerfull and should be used as much as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_SUMMON, nInMelee, nMaxLevel, oTarget)) return TRUE; + // Added to reduce casting defensive talents later in combat and constantly. + if(nRound >= d8()) return FALSE; + // Try to mix them up so we don't always cast spells in the same order. + int nRoll = d2(); + if(AI_DEBUG) ai_Debug("0i_talents", "507", "Lets help someone(Check Talents: " +IntToString(nRoll) + + " nMaxLevel: " + IntToString(nMaxLevel) + ")!"); + if(nRoll == 1) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_ENHANCEMENT, nInMelee, nMaxLevel, oTarget)) return TRUE; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_PROTECTION, nInMelee, nMaxLevel, oTarget)) return TRUE; + } + else if(nRoll == 2) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_PROTECTION, nInMelee, nMaxLevel, oTarget)) return TRUE; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_ENHANCEMENT, nInMelee, nMaxLevel, oTarget)) return TRUE; + } + return FALSE; +} +void ai_SetAura(object oCreature) +{ + // Cycle through a creatures special abilities and use any auras. + int bCanUse, nIndex = 0, nMaxSpAbility = GetSpellAbilityCount(oCreature); + int nSpell = GetSpellAbilitySpell(oCreature, nIndex); + while(nIndex < nMaxSpAbility) + { + bCanUse = FALSE; + if(GetSpellAbilityReady(oCreature, nIndex)) + { + if(nSpell == SPELLABILITY_AURA_BLINDING) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_COLD) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_ELECTRICITY) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_FEAR) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_FIRE) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_HORRIFICAPPEARANCE) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_MENACE) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_HORRIFICAPPEARANCE) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_PROTECTION) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_STUN) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_UNEARTHLY_VISAGE) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_UNNATURAL) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_HORRIFICAPPEARANCE) bCanUse = TRUE; + else if(nSpell == 306 /*SPELLABILITY_AURA_TYRANT_FOG_MIST*/) bCanUse = TRUE; + else if(nSpell == 412 /*SPELLABILITY_AURA_DRAGON_FEAR*/) bCanUse = TRUE; + else if(nSpell == 761 /*SPELLABILITY_AURA_HELLFIRE*/) bCanUse = TRUE; + else if(nSpell == 805/*SPELLABILITY_AURA_TROGLODYTE_STENCH*/) bCanUse = TRUE; + } + if(bCanUse) ActionCastSpellAtObject(nSpell, oCreature, 255, FALSE, 0, 0, TRUE); + nSpell = GetSpellAbilitySpell(oCreature, ++nIndex); + } +} +// ***************************************************************************** +// ************************* Try * Skills ************************************** +// ***************************************************************************** +// These functions try to find and use a specific set of skills intelligently. + +void ai_UseSkill(object oCreature, int nSkill, object oTarget) +{ + ai_SetLastAction(oCreature, AI_LAST_ACTION_USED_SKILL); + if(GetIsEnemy(oTarget, oCreature)) SetLocalObject(oCreature, AI_ATTACKED_PHYSICAL, oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "498", GetName(oCreature) + " is using skill: " + + GetStringByStrRef(StringToInt(Get2DAString("skills", "Name", nSkill))) + + " on " + GetName(oTarget)); + ActionUseSkill(nSkill, oTarget); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); +} +int ai_TryParry(object oCreature) +{ + // Only use parry on an active melee attacker + object oTarget = GetLastHostileActor(oCreature); + // If we are already in parry mode then lets keep it up. + if(GetActionMode(oCreature, ACTION_MODE_PARRY) && + GetCurrentAction(oCreature) == ACTION_ATTACKOBJECT) return TRUE; + if(oTarget == OBJECT_INVALID || + ai_GetAttackedTarget(oTarget) != oCreature || + !ai_GetIsMeleeWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget))) return FALSE; + // Only if our parry skill > their attack bonus + 5 + d10 + // Parry has a -4 atk adjustment. Our chance to hit should be 75% + d10. + // EnemyAtk(20) - OurParrySkill(10) = 0 + d10(75% to 25% chance to hit). + int nParrySkill = GetSkillRank(SKILL_PARRY, oCreature); + int nAtk = ai_GetCreatureAttackBonus(oTarget); + if(nAtk - nParrySkill >= 0 + d10()) return FALSE; + ai_EquipBestMeleeWeapon(oCreature, oTarget); + SetActionMode(oCreature, ACTION_MODE_PARRY, TRUE); + ai_SetLastAction(oCreature, AI_LAST_ACTION_USED_SKILL); + ActionAttack(oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "524", "Using parry against " + GetName(oTarget) + "!"); + return TRUE; +} +int ai_TryTaunt(object oCreature, object oTarget) +{ + int nCoolDown = GetLocalInt(oCreature, "AI_TAUNT_COOLDOWN"); + if(AI_DEBUG) ai_Debug("0i_talents", "530", "Has Taunt Effect? " + + IntToString(ai_GetHasEffectType(oTarget, EFFECT_TYPE_TAUNT)) + + " Cooldown: " + IntToString(nCoolDown)); + if(nCoolDown > 0) + { + SetLocalInt(oCreature, "AI_TAUNT_COOLDOWN", --nCoolDown); + return FALSE; + } + if(!ai_GetHasEffectType(oTarget, EFFECT_TYPE_TAUNT)) return FALSE; + // Check to see if we have a good chance for it to work. + int nTauntRnk = GetSkillRank(SKILL_TAUNT, oCreature); + if(AI_DEBUG) ai_Debug("0i_talents", "542", "Check Taunt: TauntRnk: " + IntToString(nTauntRnk) + + " HitDice + 1: " + IntToString(GetHitDice(oCreature) + 1) + + " Concentration: " + IntToString(GetSkillRank(SKILL_CONCENTRATION, oTarget)) + "."); + int nConcentration = GetSkillRank(SKILL_CONCENTRATION, oTarget); + // Our chance is greater than 50%. + if(nTauntRnk <= nConcentration) return FALSE; + ai_UseSkill(oCreature, SKILL_TAUNT, oTarget); + SetLocalInt(oCreature, "AI_TAUNT_COOLDOWN", AI_TAUNT_COOLDOWN); + return TRUE; +} +int ai_TryAnimalEmpathy(object oCreature, object oTarget = OBJECT_INVALID) +{ + if(!GetSkillRank(SKILL_ANIMAL_EMPATHY, oCreature)) return FALSE; + int nCoolDown = GetLocalInt(oCreature, "AI_EMPATHY_COOLDOWN"); + if(AI_DEBUG) ai_Debug("0i_talents", "556", "Has Dominate Effect? " + + IntToString(ai_GetHasEffectType(oTarget, EFFECT_TYPE_DOMINATED)) + + " Cooldown: " + IntToString(nCoolDown)); + if(nCoolDown > 0) + { + SetLocalInt(oCreature, "AI_EMPATHY_COOLDOWN", --nCoolDown); + return FALSE; + } + if(oTarget == OBJECT_INVALID) + { + oTarget = ai_GetNearestRacialTarget(oCreature, AI_RACIAL_TYPE_ANIMAL_BEAST); + if(oTarget == OBJECT_INVALID) return FALSE; + } + if(!GetObjectSeen(oCreature, oTarget)) return FALSE; + if(ai_GetHasEffectType(oTarget, EFFECT_TYPE_DOMINATED) || + GetIsImmune(oTarget, IMMUNITY_TYPE_MIND_SPELLS) || + GetIsImmune(oTarget, IMMUNITY_TYPE_DOMINATE) || + GetAssociateType(oTarget) != ASSOCIATE_TYPE_NONE) return FALSE; + // Get the race of the target, it only works on Animals, Beasts, and Magical Beasts. + int nRace = GetRacialType(oTarget); + int nDC; + if(nRace == RACIAL_TYPE_ANIMAL) nDC = 5; + else if(nRace == RACIAL_TYPE_BEAST || nRace == RACIAL_TYPE_MAGICAL_BEAST) nDC = 9; + else return FALSE; + // Check to see if we have a good chance for it to work. + int nEmpathyRnk = GetSkillRank(SKILL_ANIMAL_EMPATHY, oCreature); + nDC += GetHitDice(oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "632", "Check Animal Empathy: Rnk: " + IntToString(nEmpathyRnk) + + " nDC: " + IntToString(nDC) + "."); + // Our chance is greater than 50%. + if(nEmpathyRnk <= nDC) return FALSE; + ai_UseSkill(oCreature, SKILL_ANIMAL_EMPATHY, oTarget); + SetLocalInt(oCreature, "AI_EMPATHY_COOLDOWN", AI_EMPATHY_COOLDOWN); + return TRUE; +} +// ***************************************************************************** +// ************************* Try * Feats *************************************** +// ***************************************************************************** +// These functions try to find and use a specific set of feats intelligently. + +void ai_UseFeat(object oCreature, int nFeat, object oTarget, int nSubFeat = 0) +{ + ai_SetLastAction(oCreature, AI_LAST_ACTION_USED_FEAT); + if(GetIsEnemy(oTarget, oCreature)) SetLocalObject(oCreature, AI_ATTACKED_PHYSICAL, oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "600", GetName(oCreature) + " is using feat: " + + GetStringByStrRef(StringToInt(Get2DAString("feat", "FEAT", nFeat))) + + " on " + GetName(oTarget)); + ActionUseFeat(nFeat, oTarget, nSubFeat); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); +} +void ai_UseFeatAttackMode(object oCreature, int nActionMode, int nAction, object oTarget, int nInMelee = 0, int bPassive = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "608", "Action mode (" + IntToString(nActionMode) + ") Is it set?: " + + IntToString(GetActionMode(oCreature, nActionMode))); + if(!GetActionMode(oCreature, nActionMode)) + { + if(AI_DEBUG) ai_Debug("0i_talents", "612", "Setting action mode: " + IntToString(nActionMode)); + SetActionMode(oCreature, nActionMode, TRUE); + SetLocalInt(oCreature, AI_CURRENT_ACTION_MODE, nActionMode); + } + ai_ActionAttack(oCreature, nAction, oTarget, nInMelee, bPassive, nActionMode); +} +int ai_TryBarbarianRageFeat(object oCreature) +{ + // Must not have rage already, must have the feat, and enemy must be strong enough. + if(GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) || + !GetHasFeat(FEAT_BARBARIAN_RAGE, oCreature)) return FALSE; + ai_UseFeat(oCreature, FEAT_BARBARIAN_RAGE, oCreature); + return TRUE; +} +int ai_TryBardSongFeat(object oCreature) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "629", "BardSong Effect: " + IntToString(GetHasSpellEffect(411/*SPELL_BARD_SONG*/)) + + " Level: " + IntToString(GetLevelByClass(CLASS_TYPE_BARD)) + + " HasFeat: " + IntToString(GetHasFeat(FEAT_BARD_SONGS))); + if(GetHasSpellEffect(411/*SPELL_BARD_SONG*/, oCreature) || + !GetHasFeat(FEAT_BARD_SONGS, oCreature)) return FALSE; + ai_UseFeat(oCreature, FEAT_BARD_SONGS, oCreature); + return TRUE; +} +int ai_TryCalledShotFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_CALLED_SHOT, oCreature)) return FALSE; + // Called shot has a -4 to hit adjustment. + if(!ai_AttackPenaltyOk(oCreature, oTarget, -4.0)) return FALSE; + ai_UseFeat(oCreature, FEAT_CALLED_SHOT, oTarget); + return TRUE; +} +int ai_TryDisarmFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_DISARM, oCreature)) return FALSE; + // If we can't disarm them then get out! + if(!GetIsCreatureDisarmable(oTarget)) return FALSE; + int nEAC = GetAC(oTarget); + int nOAtk = ai_GetCreatureAttackBonus(oCreature); + // The combatant with the larger weapon gains +4 per size category. + // Weapon Size in the baseitems.2da is 1 = Tiny, 2 = Small, 3 = Medium, 4 = Large. + int nOWeaponType = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND)); + int nOWeaponSize = StringToInt(Get2DAString("baseitems", "WeaponSize", nOWeaponType)); + int nEWeaponType = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget)); + int nEWeaponSize = StringToInt(Get2DAString("baseitems", "WeaponSize", nEWeaponType)); + nOAtk +=(nOWeaponSize - nEWeaponSize) * 4; + // Do they have Improved Disarm? + if(GetHasFeat(FEAT_IMPROVED_DISARM, oCreature)) nOAtk += 2; + // Disarm has a -6 atk adjustment. + if(!ai_AttackPenaltyOk(oCreature, oTarget, -6.0)) return FALSE; + ai_UseFeat(oCreature, FEAT_DISARM, oTarget); + return TRUE; +} +int ai_TryDivineMightFeat(object oCreature, int nInMelee) +{ + if(!GetHasFeat(FEAT_TURN_UNDEAD)) return FALSE; + if(!GetHasFeat(FEAT_DIVINE_MIGHT)) return FALSE; + if(GetHasFeatEffect(FEAT_DIVINE_MIGHT, oCreature)) return FALSE; + if(!nInMelee) return FALSE; + object oTarget = ai_GetEnemyAttackingMe(oCreature); + if(oTarget == OBJECT_INVALID) return FALSE; + float fAtkAdj = IntToFloat(GetAbilityModifier(ABILITY_CHARISMA, oCreature)); + if(!ai_AttackBonusGood(oCreature, oTarget, fAtkAdj)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "722", "USING DIVINE MIGHT on " + GetName(oCreature) + "."); + ai_UseFeat(oCreature, FEAT_DIVINE_MIGHT, oCreature); + return TRUE; +} +int ai_TryDivineShieldFeat(object oCreature, int nInMelee) +{ + if(!GetHasFeat(FEAT_TURN_UNDEAD)) return FALSE; + if(!GetHasFeat(FEAT_DIVINE_SHIELD)) return FALSE; + if(GetHasFeatEffect(FEAT_DIVINE_SHIELD, oCreature)) return FALSE; + if(!nInMelee) return FALSE; + object oTarget = ai_GetEnemyAttackingMe(oCreature); + if(oTarget == OBJECT_INVALID) return FALSE; + float fACAdj = IntToFloat(GetAbilityModifier(ABILITY_CHARISMA, oCreature)); + if(!ai_ACAdjustmentGood(oCreature, oTarget, fACAdj)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "736", "USING DIVINE SHIELD on " + GetName(oCreature) + "."); + ai_UseFeat(oCreature, FEAT_DIVINE_SHIELD, oCreature); + return TRUE; +} +int ai_TryExpertiseFeat(object oCreature) +{ + if(!GetHasFeat(FEAT_EXPERTISE, oCreature)) return FALSE; + object oTarget = ai_GetEnemyAttackingMe(oCreature); + // Expertise has a -5 atk and a +5 AC adjustment. + if(oTarget == OBJECT_INVALID || + !ai_AttackPenaltyOk(oCreature, oTarget, -5.0) || + !ai_ACAdjustmentGood(oCreature, oTarget, 5.0)) + { + SetActionMode(oCreature, ACTION_MODE_EXPERTISE, FALSE); + DeleteLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_talents", "704", "USING EXPERTISE on " + GetName(oTarget) + "."); + ai_UseFeatAttackMode(oCreature, ACTION_MODE_EXPERTISE, AI_LAST_ACTION_MELEE_ATK, oTarget); + return TRUE; +} +int ai_TryFlurryOfBlowsFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_FLURRY_OF_BLOWS, oCreature)) return FALSE; + // Flurry of Blows has a -2 atk adjustment. + if(!ai_AttackPenaltyOk(oCreature, oTarget, -2.0)) + { + SetActionMode(oCreature, ACTION_MODE_FLURRY_OF_BLOWS, FALSE); + DeleteLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_talents", "718", "USING FLURRY OF BLOWS on " + GetName(oTarget) + "."); + ai_UseFeatAttackMode(oCreature, ACTION_MODE_FLURRY_OF_BLOWS, AI_LAST_ACTION_MELEE_ATK, oTarget, TRUE); + return TRUE; +} +int ai_TryImprovedExpertiseFeat(object oCreature) +{ + if(!GetHasFeat(FEAT_IMPROVED_EXPERTISE, oCreature)) return FALSE; + object oTarget = ai_GetEnemyAttackingMe(oCreature); + // Improved expertise has a -10 atk +10 AC adjustment. + if(oTarget == OBJECT_INVALID || + !ai_AttackPenaltyOk(oCreature, oTarget, -10.0) || + !ai_ACAdjustmentGood(oCreature, oTarget, 10.0)) + { + SetActionMode(oCreature, ACTION_MODE_IMPROVED_EXPERTISE, FALSE); + DeleteLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_talents", "735", "USING IMPROVED EXPERTISE on " + GetName(oTarget) + "."); + ai_UseFeatAttackMode(oCreature, ACTION_MODE_IMPROVED_EXPERTISE, AI_LAST_ACTION_MELEE_ATK, oTarget); + return TRUE; +} +int ai_TryImprovedPowerAttackFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_IMPROVED_POWER_ATTACK, oCreature)) return FALSE; + // Improved Power Attack has a -10 atk adjustment. + // If we cannot hit or will kill in one hit then maybe we should use Power Attack instead. + if(ai_PowerAttackGood(oCreature, oTarget, 10.0)) + { + ai_UseFeatAttackMode(oCreature, ACTION_MODE_IMPROVED_POWER_ATTACK, AI_LAST_ACTION_MELEE_ATK, oTarget); + return TRUE; + } + SetActionMode(oCreature, ACTION_MODE_IMPROVED_POWER_ATTACK, FALSE); + DeleteLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + return ai_TryPowerAttackFeat(oCreature, oTarget); +} +int ai_TryKiDamageFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_KI_DAMAGE, oCreature)) return FALSE; + // Must have > 40 hitpoints AND + // Damage reduction OR damage resistance + // or just have over 200 hitpoints + int bHasDamageReduction = FALSE; + int bHasDamageResistance = FALSE; + int bHasHitpoints = FALSE; + int bHasMassiveHitpoints = FALSE; + int bOutNumbered; + int nCurrentHP = GetCurrentHitPoints(oTarget); + if(nCurrentHP > 40) bHasHitpoints = TRUE; + if(nCurrentHP > 200) bHasMassiveHitpoints = TRUE; + if(ai_GetHasEffectType(oTarget, EFFECT_TYPE_DAMAGE_REDUCTION)) bHasDamageReduction = TRUE; + if(ai_GetHasEffectType(oTarget, EFFECT_TYPE_DAMAGE_RESISTANCE)) bHasDamageResistance = TRUE; + if(ai_GetNearestEnemy(oCreature, 3, 7, 7) != OBJECT_INVALID) bOutNumbered = TRUE; + if((!bHasHitpoints || (!bHasDamageReduction && !bHasDamageResistance)) && + (!bHasMassiveHitpoints) && (!bHasHitpoints || !bOutNumbered)) return FALSE; + ai_UseFeat(oCreature, FEAT_KI_DAMAGE, oTarget); + return TRUE; +} +int ai_TryKnockdownFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_KNOCKDOWN, oCreature)) return FALSE; + int nMySize = GetCreatureSize(oCreature); + if(GetHasFeat(FEAT_IMPROVED_KNOCKDOWN, oCreature)) nMySize++; + // Prevent silly use of knockdown on immune or too-large targets. + // Knockdown has a -4 atk adjustment. + if(GetIsImmune(oTarget, IMMUNITY_TYPE_KNOCKDOWN) || + GetCreatureSize(oTarget) > nMySize + 1 || + !ai_AttackPenaltyOk(oCreature, oTarget, -4.0)) return FALSE; + ai_UseFeat(oCreature, FEAT_KNOCKDOWN, oTarget); + return TRUE; +} +int ai_TryPolymorphSelfFeat(object oCreature) +{ + if(GetHasFeat(FEAT_EPIC_OUTSIDER_SHAPE)) + { + int nSubFeat = Random(3) + 733; // 733 azer, 734 rakshasa, 735 Slaad. + if(ai_UseFeat(oCreature, FEAT_EPIC_OUTSIDER_SHAPE, oCreature, nSubFeat)) return TRUE; + } + else if(GetHasFeat(FEAT_EPIC_CONSTRUCT_SHAPE)) + { + int nSubFeat = Random(3) + 738; // 738 Stone, 739 Flesh, 740 Iron. + if(ai_UseFeat(oCreature, FEAT_EPIC_CONSTRUCT_SHAPE, oCreature, nSubFeat)) return TRUE; + } + else if(GetHasFeat(FEAT_EPIC_WILD_SHAPE_DRAGON)) + { + int nSubFeat = Random(3) + 707; // 707 Red, 708 Blue, 709 Green. + if(ai_UseFeat(oCreature, FEAT_EPIC_WILD_SHAPE_DRAGON, oCreature, nSubFeat)) return TRUE; + } + else if(GetHasFeat(FEAT_EPIC_WILD_SHAPE_UNDEAD)) + { + int nSubFeat = Random(3) + 704; // 704 Risen Lord, 705 Vampire, 706 Spectre. + if(ai_UseFeat(oCreature, FEAT_EPIC_WILD_SHAPE_UNDEAD, oCreature, nSubFeat)) return TRUE; + } + else if(GetHasFeat(FEAT_GREATER_WILDSHAPE_4)) + { + int nSubFeat; + int nRoll = d3(); + if(nRoll == 1) nSubFeat = 679; // Medusa + else if(nRoll == 2) nSubFeat = 691; // Mindflayer + else nSubFeat = 694; // DireTiger + if(ai_UseFeat(oCreature, FEAT_GREATER_WILDSHAPE_4, oCreature, nSubFeat)) return TRUE; + } + else if(GetHasFeat(FEAT_GREATER_WILDSHAPE_3)) + { + int nSubFeat; + int nRoll = d3(); + if(nRoll == 1) nSubFeat = 670; // Basilisk + else if(nRoll == 2) nSubFeat = 673; // Drider + else nSubFeat = 674; // Manticore + if(ai_UseFeat(oCreature, FEAT_GREATER_WILDSHAPE_3, oCreature, nSubFeat)) return TRUE; + } + else if(GetHasFeat(FEAT_GREATER_WILDSHAPE_2)) + { + int nSubFeat; + int nRoll = d3(); + if(nRoll == 1) nSubFeat = 672; // Harpy + else if(nRoll == 2) nSubFeat = 678; // Gargoyle + else nSubFeat = 680; // Minotaur + if(ai_UseFeat(oCreature, FEAT_GREATER_WILDSHAPE_2, oCreature, nSubFeat)) return TRUE; + } + else if(GetHasFeat(FEAT_GREATER_WILDSHAPE_1)) + { + int nSubFeat = Random(5) + 658; // Wyrmling + if(ai_UseFeat(oCreature, FEAT_GREATER_WILDSHAPE_1, oCreature, nSubFeat)) return TRUE; + } + if(GetHasFeat(FEAT_HUMANOID_SHAPE)) + { + int nSubFeat = Random(3) + 682; // 682 Drow, 683 Lizard, 684 Kobold. + if(ai_UseFeat(oCreature, FEAT_HUMANOID_SHAPE, oCreature, nSubFeat)) return TRUE; + } + else if(GetHasFeat(FEAT_ELEMENTAL_SHAPE)) + { + int nSubFeat = Random(4) + SUBFEAT_ELEMENTAL_SHAPE_EARTH; + if(ai_UseFeat(oCreature, FEAT_ELEMENTAL_SHAPE, oCreature, nSubFeat)) return TRUE; + } + else if(GetHasFeat(FEAT_WILD_SHAPE)) + { + int nSubFeat; + int nCompanionType = GetAnimalCompanionCreatureType(oCreature); + if(nCompanionType == ANIMAL_COMPANION_CREATURE_TYPE_NONE) + nSubFeat = Random(5) + SUBFEAT_WILD_SHAPE_BROWN_BEAR; + else + { + if(nCompanionType == ANIMAL_COMPANION_CREATURE_TYPE_BADGER) + nSubFeat = SUBFEAT_WILD_SHAPE_BADGER; + else if(nCompanionType == ANIMAL_COMPANION_CREATURE_TYPE_BOAR) + nSubFeat = SUBFEAT_WILD_SHAPE_BOAR; + else if(nCompanionType == ANIMAL_COMPANION_CREATURE_TYPE_BEAR) + nSubFeat = SUBFEAT_WILD_SHAPE_BROWN_BEAR; + else if(nCompanionType == ANIMAL_COMPANION_CREATURE_TYPE_PANTHER) + nSubFeat = SUBFEAT_WILD_SHAPE_PANTHER; + else if(nCompanionType == ANIMAL_COMPANION_CREATURE_TYPE_WOLF) + nSubFeat = SUBFEAT_WILD_SHAPE_WOLF; + else nSubFeat = Random(5) + SUBFEAT_WILD_SHAPE_BROWN_BEAR; + } + if(AI_DEBUG) ai_Debug("0i_talents", "885", " Using wild shape feat: " + IntToString(nSubFeat)); + ai_UseFeat(oCreature, FEAT_WILD_SHAPE, oCreature, nSubFeat); + return TRUE; + } + return FALSE; +} +int ai_TryPowerAttackFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_POWER_ATTACK, oCreature)) return FALSE; + // Power Attack has a -5 atk adjustment. + if(ai_PowerAttackGood(oCreature, oTarget, 5.0)) + { + ai_UseFeatAttackMode(oCreature, ACTION_MODE_POWER_ATTACK, AI_LAST_ACTION_MELEE_ATK, oTarget); + return TRUE; + } + SetActionMode(oCreature, ACTION_MODE_POWER_ATTACK, FALSE); + DeleteLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + return FALSE; +} +int ai_TryQuiveringPalmFeat(object oCreature, object oTarget) +{ + // Must have the feat, and enemy must be lower level, and not immune to crits. + if(!GetHasFeat(FEAT_QUIVERING_PALM, oCreature) || + GetHitDice(oTarget) >= GetHitDice(oCreature) || + GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT)) return FALSE; + ai_UseFeat(oCreature, FEAT_QUIVERING_PALM, oTarget); + return TRUE; +} +int ai_TryRapidShotFeat(object oCreature, object oTarget, int nInMelee) +{ + if(!GetHasFeat(FEAT_RAPID_SHOT, oCreature)) return FALSE; + // Rapidshot has a -4 atk adjustment. + if(!ai_AttackPenaltyOk(oCreature, oTarget, -4.0)) + { + SetActionMode(oCreature, ACTION_MODE_RAPID_SHOT, FALSE); + DeleteLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + return FALSE; + } + ai_UseFeatAttackMode(oCreature, ACTION_MODE_RAPID_SHOT, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return TRUE; +} +int ai_TrySapFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_SAP, oCreature)) return FALSE; + // Does not work on creatures that cannot be hit by criticals or stunned. + // Sap has a -4 atk adjustment. + if(GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT) || + GetIsImmune(oTarget, IMMUNITY_TYPE_STUN) || + !ai_AttackPenaltyOk(oCreature, oTarget, -4.0)) return FALSE; + ai_UseFeat(oCreature, FEAT_SAP, oTarget); + return TRUE; +} +int ai_TrySmiteEvilFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_SMITE_EVIL, oCreature) || + GetAlignmentGoodEvil(oTarget) != ALIGNMENT_EVIL || + !ai_StrongOpponent(oCreature, oTarget)) return FALSE; + ai_UseFeat(oCreature, FEAT_SMITE_EVIL, oTarget); + return TRUE; +} +int ai_TrySmiteGoodFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_SMITE_GOOD, oCreature) || + GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD || + !ai_StrongOpponent(oCreature, oTarget)) return FALSE; + ai_UseFeat(oCreature, FEAT_SMITE_GOOD, oTarget); + return TRUE; +} +int ai_TryStunningFistFeat(object oCreature, object oTarget) +{ + // Cannot use if we have a weapon equiped. + if(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature) != OBJECT_INVALID) return FALSE; + // Does not work on creatures that cannot be hit by criticals or stunned. + // Stunning Fists has a -4 atk adjustment. + if(!GetHasFeat(FEAT_STUNNING_FIST, oCreature) || + GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT) || + GetIsImmune(oTarget, IMMUNITY_TYPE_STUN) || + !ai_StrongOpponent(oCreature, oTarget) || + !ai_AttackPenaltyOk(oCreature, oTarget, -4.0)) return FALSE; + ai_UseFeat(oCreature, FEAT_STUNNING_FIST, oTarget); + return TRUE; +} +void ai_NameAssociate(object oCreature, int nAssociateType, string sName) +{ + object oAssociate = GetAssociate(nAssociateType, oCreature); + if(GetName(oCreature) != "") return; + SetName(oAssociate, sName); + ChangeFaction(oAssociate, oCreature); +} +int ai_TrySummonAnimalCompanionTalent(object oCreature) +{ + if(!GetHasFeat(FEAT_ANIMAL_COMPANION, oCreature)) return FALSE; + if(GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oCreature) != OBJECT_INVALID) return FALSE; + ai_UseFeat(oCreature, FEAT_ANIMAL_COMPANION, oCreature); + DelayCommand(0.0, ai_NameAssociate(oCreature, ASSOCIATE_TYPE_FAMILIAR, "Animal Companion")); + return TRUE; +} +int ai_TrySummonFamiliarTalent(object oCreature) +{ + if(!GetHasFeat(FEAT_SUMMON_FAMILIAR, oCreature)) return FALSE; + if(GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oCreature) != OBJECT_INVALID) return FALSE; + ai_UseFeat(oCreature, FEAT_SUMMON_FAMILIAR, oCreature); + DelayCommand(0.0, ai_NameAssociate(oCreature, ASSOCIATE_TYPE_FAMILIAR, "Familiar")); + return TRUE; +} +int ai_TryLayOnHands(object oCreature) +{ + if(!GetHasFeat(FEAT_LAY_ON_HANDS, oCreature)) return FALSE; + // Lets not run past an enemy to use touch atk unless we have the feats, bad tactics! + float fRange; + if(ai_CanIMoveInCombat(oCreature)) fRange = AI_RANGE_PERCEPTION; + else + { + fRange = GetDistanceBetween(oCreature, GetLocalObject(oCreature, AI_ENEMY_NEAREST)) - 3.0f; + // Looks bad when your right next to an ally, but technically the enemy is closer. + if(fRange < AI_RANGE_MELEE) fRange = AI_RANGE_MELEE; + } + object oTarget = ai_GetLowestCRRacialTarget(oCreature, RACIAL_TYPE_UNDEAD, fRange); + if(oTarget == OBJECT_INVALID) return FALSE; + ai_UseFeat(oCreature, FEAT_LAY_ON_HANDS, oTarget); + return TRUE; +} +int ai_TryTurningTalent(object oCreature) +{ + if(!GetHasFeat(FEAT_TURN_UNDEAD, oCreature)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1043", "Checking for Turning Targets."); + int nHDCount, nHDCount2, nRacial, nHD; + // Get characters levels. + int nClericLevel = GetLevelByClass(CLASS_TYPE_CLERIC, oCreature); + int nPaladinLevel = GetLevelByClass(CLASS_TYPE_PALADIN, oCreature); + int nBlackguardlevel = GetLevelByClass(CLASS_TYPE_BLACKGUARD, oCreature); + int nTotalLevel = GetHitDice(oCreature); + int nTurnLevel = nClericLevel; + int nClassLevel = nClericLevel; + // GZ: Since paladin levels stack when turning, blackguard levels should stack as well + // GZ: but not with the paladin levels (thus else if). + if(nBlackguardlevel - 2 > 0 && nBlackguardlevel > nPaladinLevel) + { + nClassLevel += (nBlackguardlevel - 2); + nTurnLevel += (nBlackguardlevel - 2); + } + else if(nPaladinLevel - 2 > 0) + { + nClassLevel += (nPaladinLevel - 2); + nTurnLevel += (nPaladinLevel - 2); + } + //Flags for bonus turning types + int nElemental = GetHasFeat(FEAT_AIR_DOMAIN_POWER, oCreature) + + GetHasFeat(FEAT_EARTH_DOMAIN_POWER, oCreature) + + GetHasFeat(FEAT_FIRE_DOMAIN_POWER, oCreature) + + GetHasFeat(FEAT_WATER_DOMAIN_POWER, oCreature); + int nVermin = GetHasFeat(FEAT_PLANT_DOMAIN_POWER, oCreature); + int nConstructs = GetHasFeat(FEAT_DESTRUCTION_DOMAIN_POWER, oCreature); + int nGoodOrEvilDomain = GetHasFeat(FEAT_GOOD_DOMAIN_POWER, oCreature) + + GetHasFeat(FEAT_EVIL_DOMAIN_POWER, oCreature); + int nPlanar = GetHasFeat(854, oCreature); + // Get turning check average, modify if have the Sun Domain + int nChrMod = GetAbilityModifier(ABILITY_CHARISMA, oCreature); + int nTurnCheck = 15 + nChrMod; //The roll to apply to the max HD of undead that can be turned --> nTurnLevel + int nTurnHD = 12 + nChrMod + nClassLevel; //The number of HD of undead that can be turned. + if(GetHasFeat(FEAT_SUN_DOMAIN_POWER, oCreature)) + { + nTurnCheck += 2; + nTurnHD += 3; + } + //Determine the maximum HD of the undead that can be turned using a roll of 15 + ChrMod. + if(nTurnCheck == 15) nTurnLevel += 1; + else if(nTurnCheck >= 16 && nTurnCheck <= 18) nTurnLevel += 2; + else if(nTurnCheck >= 19 && nTurnCheck <= 21) nTurnLevel += 3; + else if(nTurnCheck >= 22) nTurnLevel += 4; + // Collect the number of HitDice we will affect. + int nCnt = 1; + object oEnemy = GetNearestCreature(7, 7, oCreature, nCnt); + while(oEnemy != OBJECT_INVALID && nHDCount < nTurnHD && GetDistanceBetween(oEnemy, oCreature) <= 20.0) + { + if(GetIsEnemy(oEnemy, oCreature) && !ai_Disabled(oEnemy)) + { + nRacial = GetRacialType(oEnemy); + nHD = 0; + if(nRacial == RACIAL_TYPE_UNDEAD) nHD = GetHitDice(oEnemy) + GetTurnResistanceHD(oEnemy); + else if(nRacial == RACIAL_TYPE_OUTSIDER && nGoodOrEvilDomain + nPlanar > 0) + { + //Planar turning decreases spell resistance against turning by 1/2 + if(nPlanar) nHD = GetHitDice(oEnemy) + (GetSpellResistance(oEnemy) / 2); + else nHD = GetHitDice(oEnemy) + GetSpellResistance(oEnemy); + } + else if(nRacial == RACIAL_TYPE_VERMIN && nVermin > 0) nHD = GetHitDice(oEnemy); + else if(nRacial == RACIAL_TYPE_ELEMENTAL && nElemental > 0) nHD = GetHitDice(oEnemy); + else if (nRacial == RACIAL_TYPE_CONSTRUCT && nConstructs > 0) nHD = GetHitDice(oEnemy); + // Only count undead we can defeat! + if(AI_DEBUG) ai_Debug("0i_talents", "1110", " nHD: " + IntToString(nHD) + + " nTurnLevel: " + IntToString(nTurnLevel) + + " nTurnHD: " + IntToString(nTurnHD) + + " nHDCount: " + IntToString(nHDCount)); + if(nHD > 0 && nHD <= nTurnLevel && nHD <= (nTurnHD - nHDCount)) nHDCount += nHD; + } + oEnemy = GetNearestCreature(7, 7, oCreature, ++nCnt); + } + if(AI_DEBUG) ai_Debug("0i_talents", "1089", "Found " + IntToString(nHDCount) + " hitdice to turn from my location."); + // Lets do one more check to see if we can get a better position to use TurnUndead. + nCnt = 1; + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + if(GetDistanceBetween(oCreature, oNearestEnemy) > AI_RANGE_MELEE) + { + oEnemy = oNearestEnemy; + if(AI_DEBUG) ai_Debug("0i_talents", "1126", GetName(oEnemy)); + while(oEnemy != OBJECT_INVALID && nHDCount2 < nTurnHD && GetDistanceBetween(oEnemy, oNearestEnemy) <= 20.0) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1129", GetName(oEnemy)); + if(GetIsEnemy(oEnemy, oCreature) && !ai_Disabled(oEnemy)) + { + nRacial = GetRacialType(oEnemy); + nHD = 0; + if(nRacial == RACIAL_TYPE_UNDEAD) nHD = GetHitDice(oEnemy) + GetTurnResistanceHD(oEnemy); + else if(nRacial == RACIAL_TYPE_OUTSIDER && nGoodOrEvilDomain + nPlanar > 0) + { + //Planar turning decreases spell resistance against turning by 1/2 + if(nPlanar) nHD = GetHitDice(oEnemy) + (GetSpellResistance(oEnemy) / 2); + else nHD = GetHitDice(oEnemy) + GetSpellResistance(oEnemy); + } + else if(nRacial == RACIAL_TYPE_VERMIN && nVermin > 0) nHD = GetHitDice(oEnemy); + else if(nRacial == RACIAL_TYPE_ELEMENTAL && nElemental > 0) nHD = GetHitDice(oEnemy); + else if (nRacial == RACIAL_TYPE_CONSTRUCT && nConstructs > 0) nHD = GetHitDice(oEnemy); + // Only count undead we can defeat! + if(AI_DEBUG) ai_Debug("0i_talents", "1140", " nHD: " + IntToString(nHD) + + " nTurnLevel: " + IntToString(nTurnLevel) + + " nTurnHD: " + IntToString(nTurnHD) + + " nHDCount2: " + IntToString(nHDCount2)); + if(nHD > 0 && nHD <= nTurnLevel && nHD <= (nTurnHD - nHDCount2)) nHDCount2 += nHD; + } + oEnemy = GetNearestCreature(7, 7, oNearestEnemy, ++nCnt); + } + } + if(AI_DEBUG) ai_Debug("0i_talents", "1148", "Found " + IntToString(nHDCount2) + " hitdice to turn from enemy location."); + if(nHDCount > nHDCount2) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1176", " My Location - nHDCount: " + IntToString(nHDCount) + + " >= nTurnHD / 2: " + IntToString(nTurnHD / 2)); + if(nHDCount < nTurnHD / 2) return FALSE; + ai_UseFeat(oCreature, FEAT_TURN_UNDEAD, oCreature); + return TRUE; + } + else + { + if(AI_DEBUG) ai_Debug("0i_talents", "1184", " Better location - nHDCount2: " + IntToString(nHDCount2) + + " >= nTurnHD / 2: " + IntToString(nTurnHD / 2)); + if(nHDCount2 < nTurnHD / 2) return FALSE; + ActionMoveToObject(oNearestEnemy, TRUE, 1.0f); + ai_UseFeat(oCreature, FEAT_TURN_UNDEAD, oCreature); + return TRUE; + } + return FALSE; +} +int ai_TryWhirlwindFeat(object oCreature) +{ + if(!GetHasFeat(FEAT_WHIRLWIND_ATTACK, oCreature)) return FALSE; + // Only worth using if there are 3+ targets. + if(AI_DEBUG) ai_Debug("0i_talents", "860", "WHIRLWIND : NumOfEnemies: " + IntToString(ai_GetNumOfEnemiesInGroup(oCreature, 3.0)) + "."); + // Shortened distance so its more effective(went from 5.0 to 2.0 and up to 3.0) + if(ai_GetNumOfEnemiesInGroup(oCreature, 3.0) < d3() + 1) return FALSE; + // * DO NOT WHIRLWIND if any of the targets are "large" or bigger + // * it seldom works against such large opponents. + // * Though its okay to use Improved Whirlwind against these targets + if((!GetHasFeat(FEAT_IMPROVED_WHIRLWIND, oCreature)) || + (GetCreatureSize(ai_GetNearestEnemy(oCreature, 1, 7, 7)) >= CREATURE_SIZE_LARGE && + GetCreatureSize(ai_GetNearestEnemy(oCreature, 2, 7, 7)) >= CREATURE_SIZE_LARGE)) + ai_UseFeat(oCreature, FEAT_WHIRLWIND_ATTACK, oCreature); + return TRUE; +} +int ai_TryWholenessOfBodyFeat(object oCreature) +{ + if(!GetHasFeat(FEAT_WHOLENESS_OF_BODY, oCreature)) return FALSE; + // Get when we are suppose to heal base off conversation with PC or + // on spawn generation. + int nHp = ai_GetPercHPLoss(oCreature); + if(nHp >= AI_HEALTH_WOUNDED) return FALSE; + ai_UseFeat(oCreature, FEAT_WHOLENESS_OF_BODY, oCreature); + return TRUE; +} +// ***************************************************************************** +// ******************** Try Physical Attack Talents **************************** +// ***************************************************************************** +// These functions try to find and use physical attack talents intelligently. + +void ai_ActionAttack(object oCreature, int nAction, object oTarget, int nInMelee = 0, int bPassive = FALSE, int nActionMode = 0) +{ + // If we are doing a ranged attack then check our position on the battlefield. + if(nAction == AI_LAST_ACTION_RANGED_ATK && ai_CheckCombatPosition(oCreature, oTarget, nInMelee, nAction)) return; + ai_SetLastAction(oCreature, nAction); + SetLocalObject(oCreature, AI_ATTACKED_PHYSICAL, oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "894", GetName(oCreature) + " is attacking(" + IntToString(nAction) + + ") " + GetName(oTarget) + " Current Action: " + IntToString(GetCurrentAction(oCreature)) + + " Lastround Attacked Target: " + GetName(ai_GetAttackedTarget(oCreature)) + + " bPassive: " + IntToString(bPassive) + " nActionMode: " + IntToString(nActionMode)); + ActionAttack(oTarget, bPassive); + if(nActionMode == 0) ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); +} +void ai_FlyToAttacks(object oCreature, object oTarget) +{ + ai_TryWingAttacks(oCreature); + // If we don't do a Tail sweep attack then see if we can do a Tail slap! + if(!ai_TryTailSweepAttack(oCreature)) ai_TryTailSlap(oCreature); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); +} +void ai_FlyToTarget(object oCreature, object oTarget) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "908", GetName(OBJECT_SELF) + " is flying to " + GetName(oTarget) + "!"); + effect eFly = EffectDisappearAppear(GetLocation(oTarget)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eFly, oCreature, 3.0f); + DelayCommand(4.0f, ai_FlyToAttacks(oCreature, oTarget)); + // Used to make creature wait before starting its next round. + SetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS, 5); +} +int ai_TryDragonBreathAttack(object oCreature, int nRound, object oTarget = OBJECT_INVALID) +{ + int nCnt = GetLocalInt(oCreature, "AI_DRAGONS_BREATH"); + if(AI_DEBUG) ai_Debug("0i_talents", "918", "Try Dragon Breath Attack: nRound(" + IntToString(nRound) + ")" + + " <= nCnt(" + IntToString(nCnt) + ")!"); + if(nRound <= nCnt) return FALSE; + talent tUse = GetCreatureTalentBest(TALENT_CATEGORY_DRAGONS_BREATH, 20, oCreature); + if(!GetIsTalentValid(tUse)) return FALSE; + if(oTarget == OBJECT_INVALID) + { + string sIndex = IntToString(ai_GetHighestMeleeIndexNotInAOE(oCreature)); + oTarget = GetLocalObject(oCreature, AI_ENEMY + sIndex); + if(oTarget == OBJECT_INVALID) return FALSE; + } + SetLocalInt(oCreature, "AI_DRAGONS_BREATH", d4() + nRound); + ActionCastSpellAtObject(GetIdFromTalent(tUse), oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "1019", GetName(oCreature) + " breaths on " + GetName(oTarget) + "!"); + return TRUE; +} +void ai_DragonMeleeAttack(object oCreature, object oTarget, string sDmgDice, string sText) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "941", "oAttacker: " + GetName(oCreature) + + " oTarget: " + GetName(oTarget)); + int nDmg, nCheck, nAB = ai_GetCreatureAttackBonus(oCreature) - 5; + int nAC = GetAC(oTarget); + int nRoll = d20(); + string sHit; + // nCheck is a hit if nCheck > -1 and a miss if < 0; + if(nRoll == 20) nCheck = 20; + // We add one to the check so a equal result is still a hit. + else if(nRoll > 1) nCheck = nRoll + nAB - nAC + 1; + else nCheck == 0; + if(nCheck > 0) + { + nDmg = ai_RollDiceString(sDmgDice); + if(nCheck == 20) nDmg = nDmg * 2; + } + if(nCheck > 0) sHit = "*hit*"; + else sHit = "*miss*"; + string sMessage = ai_AddColorToText(GetName(oCreature) + "'s", AI_COLOR_LIGHT_MAGENTA) + + ai_AddColorToText(sText + "attacks " + GetName(oTarget) + " : " + sHit + " :(" + + IntToString(nRoll) + " + " + IntToString(nAB) + + " = " + IntToString(nRoll + nAB) + ")", AI_COLOR_DARK_ORANGE); + if(ai_GetIsCharacter(oTarget)) SendMessageToPC(oCreature, sMessage); + if(ai_GetIsCharacter(oTarget)) SendMessageToPC(oTarget, sMessage); + if(AI_DEBUG) ai_Debug("0i_talents", "965", "nAB: " + IntToString(nAB) + + " nAC: " + IntToString(nAC) + " nRoll: " + IntToString(nRoll) + + " nCheck: " + IntToString(nCheck) + " nDmg: " + IntToString(nDmg)); + if(nCheck <= 0) return; + // Apply any damage to the target! + effect eDmg = EffectDamage(nDmg, DAMAGE_TYPE_BLUDGEONING); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDmg, oTarget); +} +// Checks to see if a dragon can use its wings on a nearby enemy. +// Checks the right side and then the left side to see if it can attack. +int ai_TryWingAttacks(object oCreature) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "977", GetName(oCreature) + " is checking for wing Attacks!"); + // Only Medium size dragons can use thier wings in combat. + // We use HitDice to base size S:1-5, M:6-11, L:12-17, H:18-29, G:30-39, C:40+. + int nHitDice = GetHitDice(oCreature); + if(nHitDice <= 5) return FALSE; + int nDragonSize; + string sDmgDice, sMessage; + float fSize; + // Get the stats based on the size of the dragon. + if(nHitDice < 12) { fSize = 5.0f; nDragonSize = 3; sDmgDice = "1d4"; } // Medium + else if(nHitDice < 18) { fSize = 10.0f; nDragonSize = 4; sDmgDice = "1d6"; } // Large + else if(nHitDice < 30) { fSize = 10.0f; nDragonSize = 5; sDmgDice = "1d8"; } // Huge + else if(nHitDice < 40) { fSize = 15.0f; nDragonSize = 6; sDmgDice = "2d6"; } // Gargantuan + else { fSize = 15.0f; nDragonSize = 7; sDmgDice = "2d8"; } // Colossal + // Add half the dragons strength modifier. + int nDmg = GetAbilityModifier(ABILITY_STRENGTH, oCreature); + if(nDmg > 0) sDmgDice = sDmgDice + "+" + IntToString(nDmg / 2); + if(AI_DEBUG) ai_Debug("0i_talents", "994", "nHitDice: " + IntToString(nHitDice) + + " nDragonSize: " + IntToString(nDragonSize) + + " sDmgDice: " + sDmgDice + " nDmg: " + IntToString(nDmg)); + // Get the closest enemy to our right wing. + location lWing = GetFlankingRightLocation(oCreature); + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fSize, lWing); + while(oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1002", "oTarget: " + GetName(oTarget)); + if(GetIsEnemy(oTarget, oCreature) && !GetIsDead(oTarget)) break; + oTarget = GetNextObjectInShape(SHAPE_SPHERE, fSize, lWing); + } + if(oTarget != OBJECT_INVALID) ai_DragonMeleeAttack(oCreature, oTarget, sDmgDice, " right wing "); + // Get the closest enemy to our left wing. + lWing = GetFlankingLeftLocation(oCreature); + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fSize, lWing); + while(oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1012", "oTarget: " + GetName(oTarget)); + if(GetIsEnemy(oTarget, oCreature) && !GetIsDead(oTarget)) break; + oTarget = GetNextObjectInShape(SHAPE_SPHERE, fSize, lWing); + } + if(oTarget != OBJECT_INVALID) ai_DragonMeleeAttack(oCreature, oTarget, sDmgDice, " left wing "); + return TRUE; +} +// Looks behind the dragon to see if it can use it's tail slap on an enemy. +int ai_TryTailSlap(object oCreature) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1022", GetName(OBJECT_SELF) + " is checking for tail slap Attack!"); + // Only Large size dragons can use thier tail in combat. + // We use HitDice to base size S:1-5, M:6-11, L:12-17, H:18-29, G:30-39, C:40+. + int nHitDice = GetHitDice(oCreature); + if(nHitDice <= 11) return FALSE; + int nDragonSize; + string sDmgDice, sMessage; + float fSize; + // Get the stats based on the size of the dragon. + if(nHitDice < 12) { fSize = 5.0f; nDragonSize = 3; sDmgDice = "1d4"; } // Medium + else if(nHitDice < 18) { fSize = 10.0f; nDragonSize = 4; sDmgDice = "1d6"; } // Large + else if(nHitDice < 30) { fSize = 10.0f; nDragonSize = 5; sDmgDice = "1d8"; } // Huge + else if(nHitDice < 40) { fSize = 15.0f; nDragonSize = 6; sDmgDice = "2d6"; } // Gargantuan + else { fSize = 15.0f; nDragonSize = 7; sDmgDice = "2d8"; } // Colossal + // Add one and a half the dragons strength modifier. + int nDmg = GetAbilityModifier(ABILITY_STRENGTH, oCreature); + if(nDmg > 0) sDmgDice = sDmgDice + "+" + IntToString(nDmg + nDmg / 2); + if(AI_DEBUG) ai_Debug("0i_talents", "1039", "nHitDice: " + IntToString(nHitDice) + + " nDragonSize: " + IntToString(nDragonSize) + + " sDmgDice: " + sDmgDice + " nDmg: " + IntToString(nDmg)); + // Get the closest enemy to our tail. + location lTail = GetBehindLocation(oCreature); + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fSize, lTail); + while(oTarget != OBJECT_INVALID) + { + if(GetIsEnemy(oTarget, oCreature) && !GetIsDead(oTarget)) break; + oTarget = GetNextObjectInShape(SHAPE_SPHERE, fSize, lTail); + } + if(oTarget != OBJECT_INVALID) ai_DragonMeleeAttack(oCreature, oTarget, sDmgDice, " tail ");\ + return TRUE; +} +void ai_CrushEffect(object oCreature, object oBaseTarget, int nHitDice) +{ + int nDragonSize, nAtkValue, nDC = ai_GetDragonDC(oCreature); + string sDmgDice, sMessage; + location lImpact = GetLocation(oBaseTarget); + float fSize; + // Get the stats based on the size of the dragon. + if(nHitDice < 30) { fSize = 15.0f; nDragonSize = 5; sDmgDice = "2d8"; } // Huge + else if(nHitDice < 40) { fSize = 25.0f; nDragonSize = 6; sDmgDice = "4d6"; } // Gargantuan + else { fSize = 45.0f; nDragonSize = 7; sDmgDice = "4d8"; } // Colossal + // Add the dragons strength modifier 1.5 times. + int nDmgBonus = GetAbilityModifier(ABILITY_STRENGTH, oCreature); + if(nDmgBonus > 0) sDmgDice = sDmgDice + "+" + IntToString(nDmgBonus + nDmgBonus / 2); + // Dragon flies up and then crushes the area below it. + effect eDmg, eKnockDown = EffectKnockdown(); + effect eImpact = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE); + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fSize, lImpact); + while(oTarget != OBJECT_INVALID) + { + if(ai_GetIsCharacter(oTarget)) DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oTarget)); + // If they have evasion they automatically dodge the crush attack. + if(!GetHasFeat(FEAT_EVASION, oTarget) && oTarget != oCreature) + { + if(!ReflexSave(oTarget, nDC, SAVING_THROW_TYPE_NONE, oCreature)) + { + eDmg =EffectDamage(ai_RollDiceString(sDmgDice), DAMAGE_TYPE_BLUDGEONING); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDmg, oTarget); + sMessage = ai_AddColorToText(GetName(oCreature), AI_COLOR_LIGHT_MAGENTA) + + ai_AddColorToText(" crushes " + GetName(oTarget) + ".", AI_COLOR_DARK_ORANGE); + if(ai_GetIsCharacter(oTarget)) SendMessageToPC(oTarget, sMessage); + // Must be 3 sizes smaller to be affected by extra damage and knockdown. + if(nDragonSize - 2 < GetCreatureSize(oTarget)) + { + if(!GetIsImmune(oTarget, IMMUNITY_TYPE_KNOCKDOWN)) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDmg, oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnockDown, oTarget, 6.0f); + } + } + } + } + else + { + if(ai_GetIsCharacter(oTarget)) + { + sMessage = ai_AddColorToText(GetName(oTarget), AI_COLOR_LIGHT_MAGENTA) + + ai_AddColorToText(" dodges the crush attack from " + GetName(oTarget) + ".", AI_COLOR_DARK_ORANGE); + if(ai_GetIsCharacter(oTarget)) SendMessageToPC(oTarget, sMessage); + } + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE, fSize, lImpact); + } + // Now do normal attacks! + ai_FlyToAttacks(oCreature, oBaseTarget); +} +int ai_TryCrushAttack(object oCreature, object oTarget) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1110", GetName(OBJECT_SELF) + " is checking for crush Attack!"); + // Only Huge size dragons can use crush attack. + // We use HitDice to base size S:1-5, M:6-11, L:12-17, H:18-29, G:30-39, C:40+. + int nHitDice = GetHitDice(oCreature); + if(nHitDice <= 17) return FALSE; + int nCrush = GetLocalInt(oCreature, "0_DRAGON_CRUSH") - 1; + if(nCrush > 0) + { + SetLocalInt(oCreature, "0_DRAGON_CRUSH", nCrush); + return FALSE; + } + effect eFly = EffectDisappearAppear(GetLocation(oTarget)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eFly, oCreature, 3.0f); + DelayCommand(4.0f, ai_CrushEffect(oCreature, oTarget, nHitDice)); + // Used to make creature wait before starting its next round. + SetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS, 5); + // We only crush every 3 rounds if we can. + SetLocalInt(oCreature, "0_DRAGON_CRUSH", 3); + return TRUE; +} +int ai_TryTailSweepAttack(object oCreature) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1132", GetName(oCreature) + " is checking for tail sweep Attack!"); + // Only Gargantuan size dragons can use tail sweep attack. + // We use HitDice to base size S:1-5, M:6-11, L:12-17, H:18-29, G:30-40, C:40+. + int nHitDice = GetHitDice(oCreature); + if(nHitDice <= 29) return FALSE; + int nSweep = GetLocalInt(oCreature, "0_DRAGON_SWEEP") - 1; + if(nSweep > 0) + { + SetLocalInt(oCreature, "0_DRAGON_SWEEP", nSweep); + return FALSE; + } + int nDragonSize, nAtkValue, nDC = ai_GetDragonDC(oCreature); + string sDmgDice, sMessage; + float fSize; + // Get the stats based on the size of the dragon. + if(nHitDice < 33) { fSize = 15.0f; nDragonSize = 6; sDmgDice = "2d6"; } // Gargantuan + else { fSize = 40.0f; nDragonSize = 7; sDmgDice = "2d8"; } // Colossal + location lImpact = GetBehindLocation(oCreature); + // We always sweep if we have the opportunity. + // Add the dragons strength modifier 1.5 times. + int nDmgBonus = GetAbilityModifier(ABILITY_STRENGTH, oCreature); + if(nDmgBonus > 0) sDmgDice = sDmgDice + "+" + IntToString(nDmgBonus + nDmgBonus / 2); + // Sweeps any creatures behind them. + effect eDmg; + effect eKnockDown = EffectKnockdown(); + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fSize, lImpact); + while(oTarget != OBJECT_INVALID) + { + sMessage = ai_AddColorToText(GetName(oCreature), AI_COLOR_LIGHT_MAGENTA) + + ai_AddColorToText(" sweeps " + GetName(oTarget) + ".", AI_COLOR_ORANGE); + if(ai_GetIsCharacter(oTarget)) SendMessageToPC(oTarget, sMessage); + // If they have evasion they automatically dodge the sweep attack. + if(!GetHasFeat(FEAT_EVASION, oTarget) && oTarget != oCreature) + { + if(!ReflexSave(oTarget, nDC, SAVING_THROW_TYPE_NONE, oCreature)) + { + eDmg = EffectDamage(ai_RollDiceString(sDmgDice), DAMAGE_TYPE_BLUDGEONING); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDmg, oTarget); + // Must be 4 sizes smaller to be affected by extra damage and knockdown. + if(nDragonSize - 3 < GetCreatureSize(oTarget)) + { + if(!GetIsImmune(oTarget, IMMUNITY_TYPE_KNOCKDOWN)) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnockDown, oTarget, 12.0f); + } + } + } + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE, fSize, lImpact); + } + // We only sweep every 3 rounds if we can. + SetLocalInt(oCreature, "0_DRAGON_SWEEP", 3); + return TRUE; +} +int ai_TrySneakAttack(object oCreature, int nInMelee, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1188", GetName(OBJECT_SELF) + " is checking for melee Sneak Attack!"); + if(!GetHasFeat(FEAT_SNEAK_ATTACK, oCreature)) return FALSE; + // Lets get the nearest target that is attacking someone besides me. + object oTarget = OBJECT_INVALID; + oTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + string sIndex; + // Check if we have Mobility, Spring Attack or a good tumble. + // if we do then look for other targets besides who we are in melee with. + if(!nInMelee) sIndex = IntToString(ai_GetBestSneakAttackIndex(oCreature, AI_RANGE_PERCEPTION, bAlwaysAtk)); + // If there are few enemies then we can safely move around. + else if(nInMelee < 3 || ai_CanIMoveInCombat(oCreature)) + { + sIndex = IntToString(ai_GetBestSneakAttackIndex(oCreature, AI_RANGE_MELEE)); + } + // Ok we are in a serious fight so lets not give attack of opportunities. + else sIndex = IntToString(ai_GetNearestIndex(oCreature, AI_RANGE_MELEE)); + oTarget = GetLocalObject(oCreature, AI_ENEMY + sIndex); + } + if(oTarget == OBJECT_INVALID) return FALSE; + int nRacialType = GetRacialType(oTarget); + if(nRacialType == RACIAL_TYPE_CONSTRUCT || nRacialType == RACIAL_TYPE_UNDEAD) return FALSE; + if(ai_GetHasEffectType(oTarget, IMMUNITY_TYPE_CRITICAL_HIT)) return FALSE; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return TRUE; +} +int ai_TryRangedSneakAttack(object oCreature, int nInMelee) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1209", GetName(oCreature) + " is checking for a Ranged Sneak Attack!"); + // If we have Sneak Attack then we should be attacking targets that + // are busy fighting so we can get extra damage. + if(!GetHasFeat(FEAT_SNEAK_ATTACK, oCreature)) return FALSE; + object oTarget = OBJECT_INVALID; + oTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = GetLocalObject(oCreature, AI_ENEMY + IntToString(ai_GetBestSneakAttackIndex(oCreature))); + if(oTarget == OBJECT_INVALID) return FALSE; + int nRacialType = GetRacialType(oTarget); + if(nRacialType == RACIAL_TYPE_CONSTRUCT || nRacialType == RACIAL_TYPE_UNDEAD) return FALSE; + if(ai_GetHasEffectType(oTarget, IMMUNITY_TYPE_CRITICAL_HIT)) return FALSE; + // If we have a target and are not within 30' then move within 30'. + if(GetDistanceToObject(oTarget) > AI_RANGE_CLOSE) ActionMoveToObject(oTarget, TRUE, AI_RANGE_CLOSE); + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return TRUE; +} +int ai_TryMeleeTalents(object oCreature, object oTarget) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1224", "Check category melee talents!"); + talent tUse = GetCreatureTalentBest(TALENT_CATEGORY_HARMFUL_MELEE, 20, oCreature); + if(!GetIsTalentValid(tUse)) return FALSE; + int nId = GetIdFromTalent(tUse); + if(AI_DEBUG) ai_Debug("0i_talents", "1228", "TALENT_CATEGORY_MELEE_TALENTS nId: " + IntToString(nId)); + if(nId == FEAT_POWER_ATTACK) { if(ai_TryPowerAttackFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_EXPERTISE) { if(ai_TryExpertiseFeat(oCreature)) return TRUE; } + else if(nId == FEAT_KNOCKDOWN) { if(ai_TryKnockdownFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_SMITE_EVIL) { if(ai_TrySmiteEvilFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_SMITE_GOOD) { if(ai_TrySmiteGoodFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_IMPROVED_POWER_ATTACK) { if(ai_TryImprovedPowerAttackFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_IMPROVED_EXPERTISE) { if(ai_TryImprovedExpertiseFeat(oCreature)) return TRUE; } + else if(nId == FEAT_FLURRY_OF_BLOWS) { if(ai_TryFlurryOfBlowsFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_STUNNING_FIST) { if(ai_TryStunningFistFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_SAP) { if(ai_TrySapFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_DISARM) { if(ai_TryDisarmFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_KI_DAMAGE) { if(ai_TryKiDamageFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_CALLED_SHOT) { if(ai_TryCalledShotFeat(oCreature, oTarget)) return TRUE; } + return FALSE; +} +// ***************************************************************************** +// ***************************** TALENT SCRIPTS ****************************** +// ***************************************************************************** +// These functions do not fall into another section. + +int ai_GetMonsterTalentMaxLevel(object oCreature) +{ + // Monsters should use either the best spell they have or a random spell so + // they all don't look robotic. Mix it up based on an Intelligence check. + int nMaxLevel = (ai_GetCharacterLevels(oCreature) + 1) / 2; + if(nMaxLevel > 9) nMaxLevel = 9; + if(AI_DEBUG) ai_Debug("0i_talents", "1258", "nMaxLevel: " + IntToString(nMaxLevel)); + return nMaxLevel; +} +int ai_GetAssociateTalentMaxLevel(object oCreature, int nDifficulty) +{ + int nLevel = (ai_GetCharacterLevels(oCreature) + 1) / 2; + if(nLevel > 20) nLevel = 20; + int nMaxLevel = (nLevel * nDifficulty) / 20; + if(nMaxLevel < 1) nMaxLevel = 1; + if(AI_DEBUG) ai_Debug("0i_talents", "1267", "nLevel: " + IntToString(nLevel) + + " nMaxLevel: " + IntToString(nMaxLevel)); + return nMaxLevel; +} +int ai_GetHasTalent(object oCreature, int nTalent) +{ + string sCategory = Get2DAString("ai_spells", "Category", nTalent); + json jCategory = GetLocalJson(oCreature, sCategory); + if(JsonGetType(jCategory) == JSON_TYPE_NULL) return FALSE; + int nLevel, nSlot, nSlotIndex, nMaxSlotIndex, nSpell; + json jLevel, jTalent; + // Loop through nLevels looking for nTalent + while(nLevel <= 9) + { + // Get the array of nLevel. + jLevel = JsonArrayGet(jCategory, nLevel); + nMaxSlotIndex = JsonGetLength(jLevel); + if(nMaxSlotIndex > 0) + { + // Get the talent within nLevel cycling from the first to the last. + nSlotIndex = 0; + while (nSlotIndex < nMaxSlotIndex) + { + jTalent= JsonArrayGet(jLevel, nSlotIndex); + nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + if(nSpell == nTalent) return TRUE; + nSlotIndex++; + } + } + nLevel++; + } + return FALSE; +} +object ai_CheckTalentForBuffing(object oCreature, string sCategory, int nSpell) +{ + // Should we buff this monster caster? Added legacy code just in case. + if((sCategory == "P" || sCategory == "E" || sCategory == "S") && + (GetLocalInt(GetModule(), AI_RULE_BUFF_MONSTERS) || + GetLocalInt(oCreature, "NW_GENERIC_MASTER") & 0x04000000)) return ai_GetBuffTarget(oCreature, nSpell); + //if(sCategory == "S" && GetLocalInt(GetModule(), AI_RULE_PRESUMMON)) return oCreature; + return OBJECT_INVALID; +} +int ai_UseBuffTalent(object oCreature, int nClass, int nLevel, int nSlot, int nSpell, int nType, object oTarget, object oItem) +{ + if(nType == AI_TALENT_TYPE_SPELL) + { + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + if(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot)) + { + ai_CastMemorizedSpell(oCreature, nClass, nLevel, nSlot, oTarget, TRUE); + return TRUE; + } + } + else if(GetSpellUsesLeft(oCreature, nClass, nSpell)) + { + ai_CastKnownSpell(oCreature, nClass, nSpell, oTarget, TRUE); + return TRUE; + } + } + else if(nType == AI_TALENT_TYPE_SP_ABILITY) + { + ActionCastSpellAtObject(nSpell, oTarget, 255, FALSE, 0, 0, TRUE, 255); + } + /* This will not work as there is no cheat option for using an item. + else if(nType == AI_TALENT_TYPE_ITEM) + { + int nBaseItem = GetBaseItemType(oItem); + if(!AI_BUFF_MONSTER_POTIONS && + (nBaseItem == BASE_ITEM_POTIONS || nBaseItem == BASE_ITEM_ENCHANTED_POTION)) return FALSE; + itemproperty ipProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProp)) + { + if(nIndex++ == nSlot) break; + ipProp = GetNextItemProperty(oItem); + } + // Cast items have the following: + // 1)Single_Use. + // 2-6) Charges/Use [Note: 7 is 0 charges per use]. + // 8-12) Uses/Day [Note: 13 is unlimited uses per day]. + // We set the slot to -1 to let the other function know we need this talent removed. + int nUses = GetItemPropertyCostTableValue(ipProp); + if(nUses == 1) jTalent = JsonArrayInsert(jTalent, JsonInt(-1), 4); + else if(nUses > 1 && nUses < 7) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1319", "Item charges: " + IntToString(GetItemCharges(oItem))); + int nCharges = GetItemCharges(oItem); + if(nUses == 6 && nCharges == 1 || nUses == 5 && nCharges < 4 || + nUses == 4 && nCharges < 6 || nUses == 3 && nCharges < 8 || + nUses == 2 && nCharges < 10) return FALSE; + } + else if(nUses > 7 && nUses < 13) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1327", "Item uses: " + IntToString(GetItemPropertyUsesPerDayRemaining(oItem, ipProp))); + int nPerDay = GetItemPropertyUsesPerDayRemaining(oItem, ipProp); + if(nUses == 8 && nPerDay == 1 || nUses == 9 && nPerDay < 4 || + nUses == 10 && nPerDay < 6 || nUses == 11 && nPerDay < 8 || + nUses == 12 && nPerDay < 10) return FASLE; + } + ActionUseItemOnObject(oItem, ipProp, oTarget, nSubIndex); + return TRUE; + } */ + return FALSE; +} +int ai_SpellRestricted(int nSpell) +{ + json jRSpells = GetLocalJson(GetModule(), AI_RULE_RESTRICTED_SPELLS); + int nIndex, nMaxIndex = JsonGetLength(jRSpells); + while(nIndex < nMaxIndex) + { + if(JsonGetInt(JsonArrayGet(jRSpells, nIndex)) == nSpell) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1703", IntToString(nSpell) + " is has been restricted and will be ignored!"); + return TRUE; + } + nIndex++; + } + return FALSE; +} +void ai_SaveTalent(object oCreature, int nClass, int nJsonLevel, int nLevel, int nSlot, int nSpell, int nType, int bMonster, object oItem = OBJECT_INVALID) +{ + // Players/Admins can restrict some spells. + if(ai_SpellRestricted(nSpell)) return; + // Get the talent category, we organize all talents by categories. + string sCategory = Get2DAString("ai_spells", "Category", nSpell); + // If it is a blank talent or it is an Area of Effect talent we skip. + if(sCategory == "" || sCategory == "A") return; + // Check to see if we should be prebuffing. + if(bMonster) + { + int nSpellBuffDuration = StringToInt(Get2DAString("ai_spells", "Buff_Duration", nSpell)); + if(nSpellBuffDuration == 3) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1600", GetName(oCreature) + " is buffing with spell " + IntToString(nSpell)); + object oTarget = ai_CheckTalentForBuffing(oCreature, sCategory, nSpell); + if(oTarget != OBJECT_INVALID && + ai_UseBuffTalent(oCreature, nClass, nLevel, nSlot, nSpell, nType, oTarget, oItem)) return; + } + } + json jCategory = GetLocalJson(oCreature, sCategory); + // With no jCategory then we make one with all 0-9 levels. + if(JsonGetType(jCategory) == JSON_TYPE_NULL) + { + jCategory = JsonArray(); + jCategory = JsonArrayInsert(jCategory, JsonArray(), 0); + int nNewLevel = 9; + while(nNewLevel > 0) + { + jCategory = JsonArrayInsert(jCategory, JsonArray()); + nNewLevel--; + } + } + // Get the current Level so we can save to it. + json jLevel = JsonArrayGet(jCategory, nJsonLevel); + json jTalent = JsonArray(); + if(nType == AI_TALENT_TYPE_SPELL || nType == AI_TALENT_TYPE_SP_ABILITY) + { + jTalent = JsonArrayInsert(jTalent, JsonInt(nType), 0); + jTalent = JsonArrayInsert(jTalent, JsonInt(nSpell)); + jTalent = JsonArrayInsert(jTalent, JsonInt(nClass)); + jTalent = JsonArrayInsert(jTalent, JsonInt(nLevel)); + jTalent = JsonArrayInsert(jTalent, JsonInt(nSlot)); + } + else if(nType == AI_TALENT_TYPE_ITEM) + { + jTalent = JsonArrayInsert(jTalent, JsonInt(nType), 0); + jTalent = JsonArrayInsert(jTalent, JsonInt(nSpell)); + jTalent = JsonArrayInsert(jTalent, JsonString(ObjectToString(oItem))); + jTalent = JsonArrayInsert(jTalent, JsonInt(nLevel)); + jTalent = JsonArrayInsert(jTalent, JsonInt(nSlot)); + } + jLevel = JsonArrayInsert(jLevel, jTalent); + jCategory = JsonArraySet(jCategory, nJsonLevel, jLevel); + SetLocalJson(oCreature, sCategory, jCategory); + if(AI_DEBUG) ai_Debug("0i_talents", "1777", sCategory + ": " + JsonDump(jCategory, 1)); + if(AI_DEBUG) ai_Debug("0i_talents", "1778", "AI_MAX_TALENT: " + + IntToString(GetLocalInt(oCreature, AI_MAX_TALENT + sCategory)) + + " nJsonLevel: " + IntToString(nJsonLevel)); + // Set AI_MAX_TALENT if this talent is higher than the maximum. + if(nJsonLevel > GetLocalInt(oCreature, AI_MAX_TALENT + sCategory)) + { + SetLocalInt(oCreature, AI_MAX_TALENT + sCategory, nJsonLevel); + } +} +// For removing used up spell slots. +void ai_RemoveTalent(object oCreature, json jCategory, json jLevel, string sCategory, int nLevel, int nSlotIndex) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1400", "removing Talent from slot: " + IntToString(nSlotIndex)); + jLevel = JsonArrayDel(jLevel, nSlotIndex); + if(AI_DEBUG) ai_Debug("0i_talents", "1402", "jLevel: " + JsonDump(jLevel, 2)); + jCategory = JsonArraySet(jCategory, nLevel, jLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "1404", "jCategory: " + JsonDump(jCategory, 2)); + SetLocalJson(oCreature, sCategory, jCategory); +} +// For removing Sorcerer/Bard spell levels once used up. +void ai_RemoveTalentLevel(object oCreature, json jCategory, json jLevel, string sCategory, int nLevel) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1410", "removing Talent level: " + IntToString(nLevel)); + jCategory = JsonArrayDel(jCategory, nLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "1412", "jCategory: " + JsonDump(jCategory, 2)); + SetLocalJson(oCreature, sCategory, jCategory); +} +void ai_SetCreatureSpellTalents(object oCreature, int bMonster) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1417", GetName(oCreature) + ": Setting Spell Talents for combat [Buff: " + + IntToString(bMonster) + "]."); + // Cycle through all classes and spells. + int nClassPosition = 1, nMaxSlot, nLevel, nSlot, nSpell, nIndex, nMetaMagic; + int nClass = GetClassByPosition(nClassPosition, oCreature); + while(nClassPosition <= AI_MAX_CLASSES_PER_CHARACTER && nClass != CLASS_TYPE_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1824", "nClass: " + IntToString(nClass) + + " nClassPosition: " + IntToString(nClassPosition) + + " SpellCaster: " + Get2DAString("classes", "SpellCaster", nClass) + + " Memorized: " + Get2DAString("classes", "MemorizesSpells", nClass)); + if(Get2DAString("classes", "SpellCaster", nClass) == "1") + { + // Search all memorized spells for the spell. + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + // Check each level organizing from highest to lowest. + nLevel = (GetLevelByPosition(nClassPosition, oCreature) + 1) / 2; + if(nLevel > 9) nLevel = 9; + while(nLevel > -1) + { + // Check each slot within each level. + nMaxSlot = GetMemorizedSpellCountByLevel(oCreature, nClass, nLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "1434", "nClass: " + IntToString(nClass) + + " nLevel: " + IntToString(nLevel) + " nMaxSlot: " + + IntToString(nMaxSlot)); + nSlot = 0; + while(nSlot < nMaxSlot) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1440", "nSlot: " + IntToString(nSlot) + " nSpell: " + + IntToString(GetMemorizedSpellId(oCreature, nClass, nLevel, nSlot)) + " spell memorized: " + + IntToString(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot))); + if(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot) == 1) + { + nSpell = GetMemorizedSpellId(oCreature, nClass, nLevel, nSlot); + /* Spells are already at the higher level when saved as a talent. + // Move a spell up to a different JsonLevel as higher Jsonlevel + // spells usually get cast first. + nMetaMagic = GetMemorizedSpellMetaMagic(oCreature, nClass, nLevel, nSlot); + if(nMetaMagic > 0) + { + if(nMetaMagic == METAMAGIC_STILL) nMetaMagic = 1; + else if(nMetaMagic == METAMAGIC_EXTEND) nMetaMagic = 1; + else if(nMetaMagic == METAMAGIC_SILENT) nMetaMagic = 1; + else if(nMetaMagic == METAMAGIC_EMPOWER) nMetaMagic = 2; + else if(nMetaMagic == METAMAGIC_MAXIMIZE) nMetaMagic = 3; + else if(nMetaMagic == METAMAGIC_QUICKEN) nMetaMagic = 4; + nAdjLevel = nLevel + nMetaMagic; + if(nAdjLevel > 9) nAdjLevel = 9; + } + else nAdjLevel = nLevel; */ + ai_SaveTalent(oCreature, nClass, nLevel, nLevel, nSlot, nSpell, AI_TALENT_TYPE_SPELL, bMonster); + } + nSlot++; + } + nLevel--; + } + } + // Check non-memorized known lists for the spell. + else + { + // Check each level starting with the highest to lowest. + nLevel = (GetLevelByPosition(nClassPosition, oCreature) + 1) / 2; + if(nLevel > 9) nLevel = 9; + while(nLevel > -1) + { + // Check each slot within each level. + nMaxSlot = GetKnownSpellCount(oCreature, nClass, nLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "1462", "nClass: " + IntToString(nClass) + + " nLevel: " + IntToString(nLevel) + " nMaxSlot: " + + IntToString(nMaxSlot)); + nSlot = 0; + while(nSlot < nMaxSlot) + { + nSpell = GetKnownSpellId(oCreature, nClass, nLevel, nSlot); + if(AI_DEBUG) ai_Debug("0i_talents", "1469", "nSlot: " + IntToString(nSlot) + + " nSpell: " + IntToString(nSpell) + " nUsesLeft: " + + IntToString(GetSpellUsesLeft(oCreature, nClass, nSpell))); + if(GetSpellUsesLeft(oCreature, nClass, nSpell) > 0) + { + ai_SaveTalent(oCreature, nClass, nLevel, nLevel, nSlot, nSpell, AI_TALENT_TYPE_SPELL, bMonster); + } + nSlot++; + } + nLevel--; + } + } + } + nClassPosition++; + nClass = GetClassByPosition(nClassPosition, oCreature); + } +} +void ai_SetCreatureSpecialAbilityTalents(object oCreature, int bMonster) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1488", GetName(oCreature) + ": Setting Special Ability Talents for combat."); + // Cycle through all the creatures special abilities. + int nMaxSpecialAbilities = GetSpellAbilityCount(oCreature); + if(AI_DEBUG) ai_Debug("0i_talents", "1491", IntToString(GetSpellAbilityCount(oCreature)) + " Spell abilities."); + if(nMaxSpecialAbilities) + { + int nIndex, nSpell, nLevel; + while(nIndex < nMaxSpecialAbilities) + { + nSpell = GetSpellAbilitySpell(oCreature, nIndex); + if(GetSpellAbilityReady(oCreature, nSpell)) + { + nLevel = StringToInt(Get2DAString("spells", "Innate", nSpell)); + ai_SaveTalent(oCreature, 255, nLevel, nLevel, nIndex, nSpell, AI_TALENT_TYPE_SP_ABILITY, bMonster); + } + nIndex++; + } + } +} +void ai_CheckItemProperties(object oCreature, object oItem, int bMonster, int bEquiped = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1509", "Checking Item properties on " + GetName(oItem)); + // We have established that we can use the item if it is equiped. + if(!bEquiped && !ai_CheckIfCanUseItem(oCreature, oItem)) return; + // Get or create an Immunity in json so we can check item immunities quickly. + int nSpellImmunity, bHasItemImmunity, nPerDay, nCharges, nUses, bSaveTalent; + json jImmunity = GetLocalJson(oCreature, AI_TALENT_IMMUNITY); + if(JsonGetType(jImmunity) == JSON_TYPE_NULL) jImmunity = JsonArray(); + int nIprpSubType, nSpell, nLevel, nIPType, nIndex; + itemproperty ipProp = GetFirstItemProperty(oItem); + // Lets skip this if there are no properties. + if(!GetIsItemPropertyValid(ipProp)) return; + // Check for cast spell property and add them to the talent list. + while(GetIsItemPropertyValid(ipProp)) + { + nIPType = GetItemPropertyType(ipProp); + if(AI_DEBUG) ai_Debug("0i_talents", "1895", "ItempropertyType(15/80/53): " + IntToString(nIPType)); + if(nIPType == ITEM_PROPERTY_CAST_SPELL) + { + bSaveTalent = TRUE; + // Get how they use the item (charges or uses per day). + nUses = GetItemPropertyCostTableValue(ipProp); + if(nUses > 1 && nUses < 7) + { + nCharges = GetItemCharges(oItem); + if(AI_DEBUG) ai_Debug("0i_talents", "1530", "Charges per use: " + IntToString(nUses) + + " Item charges: " + IntToString(nCharges)); + if((nUses == IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE && nCharges < 1) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_2_CHARGES_PER_USE && nCharges < 2) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_3_CHARGES_PER_USE && nCharges < 3) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_4_CHARGES_PER_USE && nCharges < 4) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_5_CHARGES_PER_USE && nCharges < 5)) bSaveTalent = FALSE; + } + else if(nUses > 7 && nUses < 13) + { + nPerDay = GetItemPropertyUsesPerDayRemaining(oItem, ipProp); + if(AI_DEBUG) ai_Debug("0i_talents", "1676", "Item uses: " + IntToString(nPerDay)); + if(nPerDay == 0) bSaveTalent = FALSE; + } + if(bSaveTalent) + { + // SubType is the ip spell index for iprp_spells.2da + nIprpSubType = GetItemPropertySubType(ipProp); + nSpell = StringToInt(Get2DAString("iprp_spells", "SpellIndex", nIprpSubType)); + nLevel = StringToInt(Get2DAString("iprp_spells", "InnateLvl", nIprpSubType)); + ai_SaveTalent(oCreature, 255, nLevel, nLevel, nIndex, nSpell, AI_TALENT_TYPE_ITEM, bMonster, oItem); + } + } + else if(nIPType == ITEM_PROPERTY_HEALERS_KIT) + { + // Lets set Healing kits as Cure Light Wounds since they heal 1d20 in combat. + nSpell = SPELL_CURE_MINOR_WOUNDS; + // Save the healer kit as level 9 so we can use them first. + // Must also have ranks in healing kits. + if(GetSkillRank(SKILL_HEAL, oCreature) > 0) + { + ai_SaveTalent(oCreature, 255, 7, 0, nIndex, nSpell, AI_TALENT_TYPE_ITEM, bMonster, oItem); + } + } + if(bEquiped) + { + if(nIPType == ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL) + { + bHasItemImmunity = TRUE; + nSpellImmunity = GetItemPropertyCostTableValue(ipProp); + nSpellImmunity = StringToInt(Get2DAString("iprp_spellcost", "SpellIndex", nSpellImmunity)); + //if(AI_DEBUG) ai_Debug("0i_talents", "1950", "SpellImmunity to " + Get2DAString("spells", "Label", nSpellImmunity)); + jImmunity = JsonArrayInsert(jImmunity, JsonInt(nSpellImmunity)); + } + else if(nIPType == ITEM_PROPERTY_HASTE) + { + SetLocalInt(oCreature, sIPHasHasteVarname, TRUE); + } + else if(nIPType == ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE) + { + int nBit, nIpSubType = GetItemPropertySubType(ipProp); + if(AI_DEBUG) ai_Debug("0i_talents", "1957", "nIPSubType: " + IntToString(nIpSubType)); + if(nIpSubType == 0) nBit = DAMAGE_TYPE_BLUDGEONING; + else if(nIpSubType == 1) nBit = DAMAGE_TYPE_PIERCING; + else if(nIpSubType == 2) nBit = DAMAGE_TYPE_SLASHING; + else if(nIpSubType == 5) nBit = DAMAGE_TYPE_MAGICAL; + else if(nIpSubType == 6) nBit = DAMAGE_TYPE_ACID; + else if(nIpSubType == 7) nBit = DAMAGE_TYPE_COLD; + else if(nIpSubType == 8) nBit = DAMAGE_TYPE_DIVINE; + else if(nIpSubType == 9) nBit = DAMAGE_TYPE_ELECTRICAL; + else if(nIpSubType == 10) nBit = DAMAGE_TYPE_FIRE; + else if(nIpSubType == 11) nBit = DAMAGE_TYPE_NEGATIVE; + else if(nIpSubType == 12) nBit = DAMAGE_TYPE_POSITIVE; + else if(nIpSubType == 13) nBit = DAMAGE_TYPE_SONIC; + if(nBit > 0) ai_SetItemProperty(oCreature, sIPImmuneVarname, nBit, TRUE); + } + else if(nIPType == ITEM_PROPERTY_DAMAGE_RESISTANCE) + { + int nBit, nIpSubType = GetItemPropertySubType(ipProp); + if(nIpSubType == 0) nBit = DAMAGE_TYPE_BLUDGEONING; + else if(nIpSubType == 1) nBit = DAMAGE_TYPE_PIERCING; + else if(nIpSubType == 2) nBit = DAMAGE_TYPE_SLASHING; + else if(nIpSubType == 5) nBit = DAMAGE_TYPE_MAGICAL; + else if(nIpSubType == 6) nBit = DAMAGE_TYPE_ACID; + else if(nIpSubType == 7) nBit = DAMAGE_TYPE_COLD; + else if(nIpSubType == 8) nBit = DAMAGE_TYPE_DIVINE; + else if(nIpSubType == 9) nBit = DAMAGE_TYPE_ELECTRICAL; + else if(nIpSubType == 10) nBit = DAMAGE_TYPE_FIRE; + else if(nIpSubType == 11) nBit = DAMAGE_TYPE_NEGATIVE; + else if(nIpSubType == 12) nBit = DAMAGE_TYPE_POSITIVE; + else if(nIpSubType == 13) nBit = DAMAGE_TYPE_SONIC; + if(nBit > 0) ai_SetItemProperty(oCreature, sIPResistVarname, nBit, TRUE); + } + else if(nIPType == ITEM_PROPERTY_DAMAGE_REDUCTION) + { + int nIpSubType = GetItemPropertySubType(ipProp); + SetLocalInt(oCreature, sIPReducedVarname, nIpSubType); + } + } + nIndex++; + ipProp = GetNextItemProperty(oItem); + } + // If nSpellImmunity has been set then we need to save our Immunity json. + if(bHasItemImmunity) SetLocalJson(oCreature, AI_TALENT_IMMUNITY, jImmunity); +} +void ai_SetCreatureItemTalents(object oCreature, int bMonster) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1561", GetName(oCreature) + ": Setting Item Talents for combat."); + int bEquiped; + string sSlots; + // Cycle through all the creatures inventory items. + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + if(GetIdentified(oItem)) + { + // Does the item need to be equiped to use its powers? + sSlots = Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)); + if(AI_DEBUG) ai_Debug("0i_talents", "1572", GetName(oItem) + " requires " + Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)) + " slots."); + if(sSlots == "0x00000") ai_CheckItemProperties(oCreature, oItem, bMonster); + } + oItem = GetNextItemInInventory(oCreature); + } + int nSlot; + // Cycle through all the creatures equiped items. + oItem = GetItemInSlot(nSlot, oCreature); + while(nSlot < 11) + { + if(oItem != OBJECT_INVALID) ai_CheckItemProperties(oCreature, oItem, bMonster, TRUE); + oItem = GetItemInSlot(++nSlot, oCreature); + } + oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oCreature); + if(oItem != OBJECT_INVALID) ai_CheckItemProperties(oCreature, oItem, bMonster, TRUE); +} +void ai_SetCreatureTalents(object oCreature, int bMonster) +{ + json jCreature = ObjectToJson(oCreature); + //if(AI_DEBUG) ai_Debug("0i_talents", "2072", GetName(oCreature) + " jCreature: " + JsonDump(jCreature, 4)); + if(GetLocalInt(oCreature, AI_TALENTS_SET)) return; + SetLocalInt(oCreature, AI_TALENTS_SET, TRUE); + object oModule = GetModule(); + ai_Counter_Start(); + ai_SetCreatureSpellTalents(oCreature, bMonster); + ai_Counter_End(GetName(oCreature) + ": Spell Talents"); + ai_SetCreatureSpecialAbilityTalents(oCreature, bMonster); + ai_Counter_End(GetName(oCreature) + ": Special Ability Talents"); + DeleteLocalJson(oCreature, AI_TALENT_IMMUNITY); + ai_SetCreatureItemTalents(oCreature, bMonster); + ai_Counter_End(GetName(oCreature) + ": Item Talents"); + if(GetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS) && GetLocalInt(oModule, AI_RULE_PRESUMMON) && bMonster) + { + ai_TrySummonFamiliarTalent(oCreature); + ai_TrySummonAnimalCompanionTalent(oCreature); + } + // AI_CAT_CURE is setup differently we save the level as the highest. + //if(JsonGetType(GetLocalJson(oCreature, AI_TALENT_CURE)) != JSON_TYPE_NULL) SetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_CURE, 9); + // With spontaneous cure spells we need to clear this as the number of spells don't count. + //if(GetLevelByClass(CLASS_TYPE_CLERIC, oCreature)) SetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_HEALING, 0); +} +int ai_UseSpontaneousCureTalentFromCategory(object oCreature, string sCategory, int nInMelee, int nDamage, object oTarget = OBJECT_INVALID) +{ + // Get the saved category from oCreature. + json jCategory = GetLocalJson(oCreature, sCategory); + if(AI_DEBUG) ai_Debug("0i_talents", "2095", "jCategory: " + sCategory + " " + JsonDump(jCategory, 2)); + if(JsonGetType(jCategory) == JSON_TYPE_NULL) return FALSE; + int nLevel = 4; + // If there are no talents at lower levels then start at the lower level. + int nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_TALENT + sCategory); + if(AI_DEBUG) ai_Debug("0i_talents", "2100", AI_MAX_TALENT + sCategory + ": " + + IntToString(nMaxTalentLevel) + + " nLevel: " + IntToString(nLevel)); + if(nMaxTalentLevel < nLevel) nLevel = nMaxTalentLevel; + if(nLevel < 0 || nLevel > 5) nLevel = 4; + json jLevel, jTalent, jLevelSave; + int nTalentType, nTalentClass, nTalentSlot, nSpell; + int nSlotIndex, nMaxSlotIndex, nMaxNoTalentLevel, nSpellSave, nLevelSave, nSlotSave; + string sSpellName; + // Loop through nLevels down to nMinNoTalentLevel looking for the first talent + // (i.e. the highest or best?). + while(nLevel > -1) + { + // Get the array of nLevel cycling down to 0. + jLevel = JsonArrayGet(jCategory, nLevel); + nMaxSlotIndex = JsonGetLength(jLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "2116", "nLevel: " + IntToString(nLevel) + + " nMaxSlotIndex: " + IntToString(nMaxSlotIndex)); + if(nMaxSlotIndex > 0) + { + // Get the talent within nLevel cycling from the first to the last. + nSlotIndex = 0; + while (nSlotIndex < nMaxSlotIndex) + { + jTalent= JsonArrayGet(jLevel, nSlotIndex); + if(AI_DEBUG) ai_Debug("0i_talents", "2125", "nSlotIndex: " + IntToString(nSlotIndex) + + " jTalent Type: " + IntToString(JsonGetInt(JsonArrayGet(jTalent, 0)))); + nTalentType = JsonGetInt(JsonArrayGet(jTalent, 0)); + nTalentClass = JsonGetInt(JsonArrayGet(jTalent, 2)); + // We can only convert spells from the cleric class. + if(nTalentType == AI_TALENT_TYPE_SPELL && nTalentClass == CLASS_TYPE_CLERIC) + { + if(nLevel == 4) nSpell = SPELL_CURE_CRITICAL_WOUNDS; + else if(nLevel == 3) nSpell = SPELL_CURE_SERIOUS_WOUNDS; + else if(nLevel == 2) nSpell = SPELL_CURE_MODERATE_WOUNDS; + else if(nLevel == 1) nSpell = SPELL_CURE_LIGHT_WOUNDS; + else nSpell = 0; + if(AI_DEBUG) ai_Debug("0i_talents", "2137", "nSpell: " + IntToString(nSpell)); + if(nSpell) + { + if(ai_ShouldWeCastThisCureSpell(nSpell, nDamage)) + { + + nTalentSlot = JsonGetInt(JsonArrayGet(jTalent, 4)); + SetMemorizedSpellReady(oCreature, nTalentClass, nLevel, nTalentSlot, FALSE); + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(ai_GetIsCharacter(oCreature)) ai_SendMessages(GetName(oCreature) + " has spontaneously cast " + sSpellName + " on " + GetName(oTarget) + ".", AI_COLOR_MAGENTA, oCreature); + if(AI_DEBUG) ai_Debug("0i_talents", "2148", GetName(oCreature) + " has spontaneously cast " + sSpellName + " on " + GetName(oTarget) + "."); + ActionCastSpellAtObject(nSpell, oTarget, 255, TRUE); + return TRUE; + } + // Save the lowest level cure spell as we might need to cast it. + else if(nLevel < nLevelSave) + { + jLevelSave = jLevel; + nLevelSave = nLevel; + nSlotSave = nTalentSlot; + nSpellSave = nSpell; + } + } + } + nSlotIndex++; + } + } + else SetLocalInt(oCreature, AI_MAX_TALENT + sCategory, nLevel - 1); + nLevel--; + } + // Did we find a spell? If we did then use it. + if(nSpellSave) + { + if(AI_DEBUG) ai_Debug("0i_talents", "2171", GetName(oCreature) + " has cast the lowest level cure spell on " + GetName(oTarget) + "."); + SetMemorizedSpellReady(oCreature, CLASS_TYPE_CLERIC, nLevelSave, nSlotSave, FALSE); + ai_RemoveTalent(oCreature, jCategory, jLevelSave, sCategory, nLevelSave, nSlotSave); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpellSave))); + if(ai_GetIsCharacter(oCreature)) ai_SendMessages(GetName(oCreature) + " has spontaneously cast " + sSpellName + " on " + GetName(oTarget) + ".", AI_COLOR_MAGENTA, oCreature); + ActionCastSpellAtObject(nSpellSave, oTarget, 255, TRUE); + return TRUE; + } + return FALSE; +} +int ai_UseCreatureSpellTalent(object oCreature, json jLevel, json jTalent, string sCategory, int nInMelee, object oTarget = OBJECT_INVALID) +{ + // Check for polymorph, spells cannot be used while polymorphed. + if(GetAppearanceType(oCreature) != ai_GetNormalAppearance(oCreature)) return FALSE; + // Get the spells information so we can check if they still have it. + int nClass = JsonGetInt(JsonArrayGet(jTalent, 2)); + int nLevel = JsonGetInt(JsonArrayGet(jTalent, 3)); + int nSlot = JsonGetInt(JsonArrayGet(jTalent, 4)); + if(ai_IsSilenced(oCreature, JsonGetInt(JsonArrayGet(jTalent, 2)))) + { + if(GetMemorizedSpellMetaMagic(oCreature, nClass, nLevel, nSlot) != METAMAGIC_SILENT) + { + object oAOE = GetNearestObjectByTag("VFX_MOB_SILENCE", oCreature); + float fDistance = GetDistanceBetween(oAOE, oCreature); + if(fDistance != 0.0 && fDistance <= 4.0) + { + location lLocation = GetRandomLocation(GetArea(oCreature), oCreature, 5.0); + ai_ClearCreatureActions(); + if(AI_DEBUG) ai_Debug("0i_talents", "2225", GetName(oCreature) + " is moving out of a silence effect!"); + ActionMoveToLocation(lLocation, TRUE); + return TRUE; + } + else return FALSE; + } + } + if(ai_ArcaneSpellFailureTooHigh(oCreature, nClass, nLevel, nSlot)) return FALSE; + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + // Shouldn't need this anymore, we need to do a debug looking at this. + if(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot) < 1) return FALSE; + if(ai_CheckSpecialTalentsandUse(oCreature, jTalent, sCategory, nInMelee, oTarget)) + { + if(ai_CompareLastAction(oCreature, AI_LAST_ACTION_CAST_SPELL)) return -1; + return TRUE; + } + return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_talents", "1629", "Known caster Level: " + IntToString(nLevel) + + " Uses : " + IntToString(GetSpellUsesLeft(oCreature, nClass, JsonGetInt(JsonArrayGet(jTalent, 1))))); + if(!GetSpellUsesLeft(oCreature, nClass, JsonGetInt(JsonArrayGet(jTalent, 1)))) return -2; + return ai_CheckSpecialTalentsandUse(oCreature, jTalent, sCategory, nInMelee, oTarget); +} +int ai_UseCreatureItemTalent(object oCreature, json jLevel, json jTalent, string sCategory, int nInMelee, object oTarget = OBJECT_INVALID) +{ + object oItem = StringToObject(JsonGetString(JsonArrayGet(jTalent, 2))); + int nItemType = GetBaseItemType(oItem); + // Check if the item is a potion since there are some special cases. + if(nItemType == BASE_ITEM_POTIONS || nItemType == BASE_ITEM_ENCHANTED_POTION) + { + // Potions cause attack of opportunities and this could be deadly! + // Removed for healing potions as that is one time you would use potions in melee. + if(sCategory != AI_TALENT_HEALING) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1925", "Using a non-healing potion nInMelee: " + IntToString(nInMelee)); + if(nInMelee > 1) return FALSE; + // Don't use potions on allies that are not within 3 meters. + if(GetDistanceBetween(oCreature, oTarget) > 3.1) return FALSE; + } + // For now we are allowing creatures to use "give" potions to others + // unless the player is using a healing potion and has party healing turned off. + else if(oCreature != oTarget && ai_GetAIMode(oCreature, AI_MODE_PARTY_HEALING_OFF)) return FALSE; + } + // Check for polymorph, only potions can be used while polymorphed. + else if(GetAppearanceType(oCreature) != ai_GetNormalAppearance(oCreature)) return FALSE; + else if(nItemType == BASE_ITEM_HEALERSKIT) + { + if(!GetLocalInt(GetModule(), AI_RULE_HEALERSKITS)) return FALSE; + if(oCreature != oTarget && ai_GetAIMode(oCreature, AI_MODE_PARTY_HEALING_OFF)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1724", "Using " + GetName(oItem) + " nInMelee: " + IntToString(nInMelee) + + " targeting: " + GetName(oTarget)); + ai_SetLastAction(oCreature, AI_LAST_ACTION_USED_ITEM); + ActionUseItemOnObject(oItem, GetFirstItemProperty(oItem), oTarget); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + // We also must check for stack size. + if(GetItemStackSize(oItem) == 1) JsonArrayInsertInplace(jTalent, JsonInt(-1), 4); + return TRUE; + } + if(ai_CheckSpecialTalentsandUse(oCreature, jTalent, sCategory, nInMelee, oTarget)) return TRUE; + return FALSE; +} +int ai_UseCreatureTalent(object oCreature, string sCategory, int nInMelee, int nLevel = 10, object oTarget = OBJECT_INVALID) +{ + // Get the saved category from oCreature. + json jCategory = GetLocalJson(oCreature, sCategory); + if(AI_DEBUG) ai_Debug("0i_talents", "2292", "jCategory: " + sCategory + " " + JsonDump(jCategory, 2)); + if(JsonGetType(jCategory) == JSON_TYPE_NULL) return FALSE; + // If there are no talents at lower levels then start at the lower level. + int nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_TALENT + sCategory); + if(AI_DEBUG) ai_Debug("0i_talents", "2297", AI_MAX_TALENT + sCategory + ": " + + IntToString(nMaxTalentLevel) + + " nLevel: " + IntToString(nLevel)); + if(nMaxTalentLevel < nLevel) nLevel = nMaxTalentLevel; + if(nLevel < 0 || nLevel > 10) nLevel = 9; + json jLevel, jTalent; + int nClass, nSlot, nType, nSlotIndex, nMaxSlotIndex, nTalentUsed, nSpell; + int bUseMagic = !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC); + int bUseMagicItems = !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC_ITEMS); + if(AI_DEBUG) ai_Debug("0i_talents", "2305", "bUseMagic: " + IntToString(bUseMagic) + + " bUseMagicItems: " + IntToString(bUseMagicItems) + + " nLevel: " + IntToString(nLevel)); + // Loop through nLevels down to nMinNoTalentLevel looking for the first talent + // (i.e. the highest or best?). + while(nLevel > -1) + { + // Get the array of nLevel cycling down to 0. + jLevel = JsonArrayGet(jCategory, nLevel); + nMaxSlotIndex = JsonGetLength(jLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "2288", "nLevel: " + IntToString(nLevel) + + " nMaxSlotIndex: " + IntToString(nMaxSlotIndex)); + if(nMaxSlotIndex > 0) + { + // Get the talent within nLevel cycling from the first to the last. + nSlotIndex = 0; + while (nSlotIndex < nMaxSlotIndex) + { + jTalent= JsonArrayGet(jLevel, nSlotIndex); + if(AI_DEBUG) ai_Debug("0i_talents", "2300", "nSlotIndex: " + IntToString(nSlotIndex) + + " jTalent Type: " + IntToString(JsonGetInt(JsonArrayGet(jTalent, 0)))); + nType = JsonGetInt(JsonArrayGet(jTalent, 0)); + if(bUseMagic) + { + if(nType == AI_TALENT_TYPE_SPELL) + { + nTalentUsed = ai_UseCreatureSpellTalent(oCreature, jLevel, jTalent, sCategory, nInMelee, oTarget); + // -1 means it was a memorized spell and we need to remove it. + if(nTalentUsed == -1) + { + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + return TRUE; + } + else if(nTalentUsed == -2) + { + ai_RemoveTalentLevel(oCreature, jCategory, jLevel, sCategory, nLevel); + } + else if(nTalentUsed) return TRUE; + } + else if(nType == AI_TALENT_TYPE_SP_ABILITY) + { + // Special ability spells do not need to concentrate?! + if(ai_CheckSpecialTalentsandUse(oCreature, jTalent, sCategory, nInMelee, oTarget)) + { + // When the ability is used that slot is now not readied. + // Multiple uses of the same spell are stored in different slots. + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + return TRUE; + } + } + } + if(bUseMagicItems && nType == AI_TALENT_TYPE_ITEM) + { + // Items do not need to concentrate. + if(ai_UseCreatureItemTalent(oCreature, jLevel, jTalent, sCategory, nInMelee, oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_talents", "2337", "Checking if Item is used up: " + + IntToString(JsonGetInt(JsonArrayGet(jTalent, 4)))); + if(JsonGetInt(JsonArrayGet(jTalent, 4)) == -1) + { + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + } + return TRUE; + } + } + //else if(nType == AI_TALENT_TYPE_FEAT) {} + nSlotIndex++; + } + } + else SetLocalInt(oCreature, AI_MAX_TALENT + sCategory, nLevel - 1); + nLevel--; + } + return FALSE; +} +int ai_UseTalent(object oCreature, int nTalent, object oTarget) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1912", GetName(oCreature) + " is trying to use " + GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nTalent))) + + " on " + GetName(oTarget)); + // Get the saved category from oCreature. + string sCategory = Get2DAString("ai_spells", "Category", nTalent); + json jCategory = GetLocalJson(oCreature, sCategory); + if(AI_DEBUG) ai_Debug("0i_talents", "1917", "jCategory: " + sCategory + " " + JsonDump(jCategory, 2)); + if(JsonGetType(jCategory) == JSON_TYPE_NULL) return FALSE; + json jLevel, jTalent; + int nLevel, nClass, nSlot, nType, nSlotIndex, nMaxSlotIndex, nTalentUsed, nSpell; + // Loop through nLevels down to nMinNoTalentLevel looking for the first talent + // (i.e. the highest or best?). + while(nLevel <= 9) + { + // Get the array of nLevel. + jLevel = JsonArrayGet(jCategory, nLevel); + nMaxSlotIndex = JsonGetLength(jLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "1925", "nLevel: " + IntToString(nLevel) + + " nMaxSlotIndex: " + IntToString(nMaxSlotIndex)); + if(nMaxSlotIndex > 0) + { + // Get the talent within nLevel cycling from the first to the last. + nSlotIndex = 0; + while (nSlotIndex < nMaxSlotIndex) + { + jTalent= JsonArrayGet(jLevel, nSlotIndex); + if(AI_DEBUG) ai_Debug("0i_talents", "1936", "nSlotIndex: " + IntToString(nSlotIndex) + + " jTalent Type: " + IntToString(JsonGetInt(JsonArrayGet(jTalent, 0)))); + nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + if(nSpell == nTalent) + { + nType = JsonGetInt(JsonArrayGet(jTalent, 0)); + if(nType == AI_TALENT_TYPE_SPELL || nType == AI_TALENT_TYPE_SP_ABILITY) + { + if(ai_UseTalentOnObject(oCreature, jTalent, oTarget, 0)) + { + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + return TRUE; + } + } + else if(nType == AI_TALENT_TYPE_ITEM) + { + // Items do not need to concentrate. + if(ai_UseCreatureItemTalent(oCreature, jLevel, jTalent, sCategory, 0, oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1955", "Checking if Item is used up: " + + IntToString(JsonGetInt(JsonArrayGet(jTalent, 4)))); + if(JsonGetInt(JsonArrayGet(jTalent, 4)) == -1) + { + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + } + return TRUE; + } + } + } + nSlotIndex++; + } + } + nLevel++; + } + return FALSE; +} +int ai_UseTalentOnObject(object oCreature, json jTalent, object oTarget, int nInMelee) +{ + int nClass, nLevel, nSlot, nMetaMagic, nDomain; + int nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + int nType = JsonGetInt(JsonArrayGet(jTalent, 0)); + if(nType == AI_TALENT_TYPE_SPELL) + { + if(!ai_CastInMelee(oCreature, nSpell, nInMelee)) return FALSE; + nClass = JsonGetInt(JsonArrayGet(jTalent, 2)); + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + nLevel = JsonGetInt(JsonArrayGet(jTalent, 3)); + nSlot = JsonGetInt(JsonArrayGet(jTalent, 4)); + if(GetMemorizedSpellIsDomainSpell(oCreature, nClass, nLevel, nSlot) == 1) nDomain = nLevel; + else nDomain = 0; + nMetaMagic = GetMemorizedSpellMetaMagic(oCreature, nClass, nLevel, nSlot); + } + else + { + nMetaMagic = METAMAGIC_NONE; + nDomain = 0; + } + if(ai_CheckCombatPosition(oCreature, oTarget, nInMelee, nSpell)) return TRUE; + } + else if(nType == AI_TALENT_TYPE_SP_ABILITY) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1790", GetName(oCreature) + " is using a special ability!"); + nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + nClass = 255; + if(ai_CheckCombatPosition(oCreature, oTarget, nInMelee, nSpell)) return TRUE; + } + else if(nType == AI_TALENT_TYPE_ITEM) + { + object oItem = StringToObject(JsonGetString(JsonArrayGet(jTalent, 2))); + int nBaseItemType = GetBaseItemType(oItem); + if(ai_CheckCombatPosition(oCreature, oTarget, nInMelee, nSpell, nBaseItemType)) return TRUE; + int nIndex, nSubIndex = 0; + nSlot = JsonGetInt(JsonArrayGet(jTalent, 4)); + itemproperty ipProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProp)) + { + if(nIndex++ == nSlot) break; + ipProp = GetNextItemProperty(oItem); + } + // Cast items have the following: + // 1)Single_Use. + // 2-6) Charges/Use [Note: 7 is 0 charges per use]. + // 8-12) Uses/Day [Note: 13 is unlimited uses per day]. + // We set the slot to -1 to let the other function know we need this talent removed. + int nUses = GetItemPropertyCostTableValue(ipProp); + if(nUses == 1) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1816", "Single Use item."); + if(AI_DEBUG) ai_Debug("0i_talents", "1817", "Stack size: " + IntToString(GetItemStackSize(oItem))); + // We also must check for stack size. + if(GetItemStackSize(oItem) == 1) JsonArrayInsertInplace(jTalent, JsonInt(-1), 4); + } + else if(nUses > 1 && nUses < 7) + { + int nCharges = GetItemCharges(oItem); + // If the item is equipable then do not use the last charge! + if(Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)) != "0x00000") + { + if(nCharges <= 7 - nUses) return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_talents", "1824", "Item charges: " + IntToString(nCharges)); + if(nCharges < (7 - nUses) * 2) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1829", "Stack size: " + IntToString(GetItemStackSize(oItem))); + // We also must check for stack size. + if(GetItemStackSize(oItem) == 1) JsonArrayInsertInplace(jTalent, JsonInt(-1), 4); + } + } + else if(nUses > 7 && nUses < 13) + { + int nPerDay = GetItemPropertyUsesPerDayRemaining(oItem, ipProp); + if(AI_DEBUG) ai_Debug("0i_talents", "1837", "Item uses: " + IntToString(nPerDay)); + if(nPerDay == 1) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1842", "Stack size: " + IntToString(GetItemStackSize(oItem))); + // We also must check for stack size. + if(GetItemStackSize(oItem) == 1) JsonArrayInsertInplace(jTalent, JsonInt(-1), 4); + } + } + // Lets not always use unlimited items! + else if(nUses == 7 || nUses == 13) + { + if(ai_CompareLastAction(oCreature, nSpell)) return FALSE; + } + ai_SetLastAction(oCreature, nSpell); + ActionUseItemOnObject(oItem, ipProp, oTarget, nSubIndex); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + if(AI_DEBUG) ai_Debug("0i_talents", "1850", GetName(oCreature) + " is using " + GetName(oItem) + " on " + GetName(oTarget)); + return TRUE; + } + if(AI_DEBUG) ai_Debug("0i_talents", "1853", "nMetaMagic: " + IntToString(nMetaMagic) + + " nDomain: " + IntToString(nDomain) + " nClass: " + IntToString(nClass)); + ai_SetLastAction(oCreature, nSpell); + ActionCastSpellAtObject(nSpell, oTarget, nMetaMagic, FALSE, nDomain, 0, FALSE, nClass, FALSE); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + if(AI_DEBUG) + { + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + ai_Debug("0i_talents", "1859", GetName(oCreature) + " is casting " + sSpellName + " on " + GetName(oTarget)); + } + return TRUE; +} +int ai_UseTalentAtLocation(object oCreature, json jTalent, object oTarget, int nInMelee) +{ + int nSpell, nClass, nLevel, nSlot, nMetaMagic, nDomain; + int nType = JsonGetInt(JsonArrayGet(jTalent, 0)); + if(nType == AI_TALENT_TYPE_SPELL) + { + if(!ai_CastInMelee(oCreature, nSpell, nInMelee)) return FALSE; + nClass = JsonGetInt(JsonArrayGet(jTalent, 2)); + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + nLevel = JsonGetInt(JsonArrayGet(jTalent, 3)); + nSlot = JsonGetInt(JsonArrayGet(jTalent, 4)); + if(GetMemorizedSpellIsDomainSpell(oCreature, nClass, nLevel, nSlot) == 1) nDomain = nLevel; + else nDomain = 0; + nMetaMagic = GetMemorizedSpellMetaMagic(oCreature, nClass, nLevel, nSlot); + } + else + { + nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + nMetaMagic = METAMAGIC_NONE; + nDomain = 0; + } + } + else if(nType == AI_TALENT_TYPE_SP_ABILITY) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1888", GetName(oCreature) + " is using a special ability!"); + nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + nClass = 255; + } + else if(nType == AI_TALENT_TYPE_ITEM) + { + object oItem = StringToObject(JsonGetString(JsonArrayGet(jTalent, 2))); + int nBaseItemType = GetBaseItemType(oItem); + if(ai_CheckCombatPosition(oCreature, oTarget, nInMelee, nSpell, nBaseItemType)) return TRUE; + int nIndex; + int nSubIndex = JsonGetInt(JsonArrayGet(jTalent, 3));; + nSlot = JsonGetInt(JsonArrayGet(jTalent, 4)); + itemproperty ipProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProp)) + { + if(nIndex++ == nSlot) break; + ipProp = GetNextItemProperty(oItem); + } + // Cast items have the following: + // 1)Single_Use. + // 2-6) Charges/Use [Note: 7 is 0 charges per use]. + // 8-12) Uses/Day [Note: 13 is unlimited uses per day]. + // We set the slot to -1 to let the other function know we need this talent removed. + int nUses = GetItemPropertyCostTableValue(ipProp); + if(nUses == 1) JsonArrayInsertInplace(jTalent, JsonInt(-1), 4); + else if(nUses > 1 && nUses < 7) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1915", "Item charges: " + IntToString(GetItemCharges(oItem))); + int nCharges = GetItemCharges(oItem); + // If the item is equipable then do not use the last charge! + if(Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)) != "0x00000") + { + if(nCharges <= 7 - nUses) return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_talents", "1824", "Item charges: " + IntToString(nCharges)); + if(nCharges < (7 - nUses) * 2) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1829", "Stack size: " + IntToString(GetItemStackSize(oItem))); + // We also must check for stack size. + if(GetItemStackSize(oItem) == 1) JsonArrayInsertInplace(jTalent, JsonInt(-1), 4); + } + } + else if(nUses > 7 && nUses < 13) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1923", "Item uses: " + IntToString(GetItemPropertyUsesPerDayRemaining(oItem, ipProp))); + int nPerDay = GetItemPropertyUsesPerDayRemaining(oItem, ipProp); + if(nUses == 8 && nPerDay == 1 || nUses == 9 && nPerDay < 4 || + nUses == 10 && nPerDay < 6 || nUses == 11 && nPerDay < 8 || + nUses == 12 && nPerDay < 10) JsonArrayInsertInplace(jTalent, JsonInt(-1), 4); + } + // Lets not always use unlimited items! + else if(nUses == 7 || nUses == 13) + { + if(ai_CompareLastAction(oCreature, nSpell)) return FALSE; + } + if(ai_CheckCombatPosition(oCreature, oTarget, nInMelee, nSpell)) return TRUE; + ai_SetLastAction(oCreature, nSpell); + ActionUseItemAtLocation(oItem, ipProp, GetLocation(oTarget), nSubIndex); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + if(AI_DEBUG) ai_Debug("0i_talents", "1934", GetName(oCreature) + " is using " + GetName(oItem) + " at a location."); + return TRUE; + } + if(ai_CheckCombatPosition(oCreature, oTarget, nInMelee, nSpell)) return TRUE; + ai_SetLastAction(oCreature, nSpell); + ActionCastSpellAtLocation(nSpell, GetLocation(oTarget), nMetaMagic, FALSE, 0, FALSE, nClass, FALSE, nDomain); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(AI_DEBUG) ai_Debug("0i_talents", "1943", GetName(oCreature) + " is casting " + sSpellName + " at a location!"); + return TRUE; +} +int ai_CheckSpecialTalentsandUse(object oCreature, json jTalent, string sCategory, int nInMelee, object oTarget) +{ + int nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + if(AI_DEBUG) ai_Debug("0i_talents", "1949", "nSpell: " + GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))) + + " sCategory: " + sCategory); + if(sCategory == AI_TALENT_DISCRIMINANT_AOE) + { + //ai_Debug("0i_talents", "1953", "CompareLastAction: " + + // IntToString(ai_CompareLastAction(oCreature, nSpell))); + // If we used this spell talent last round then don't use it this round. + //if(ai_CompareLastAction(oCreature, nSpell)) return FALSE; + // Check to see if Disjunction should *not* be cast. + if(nSpell == SPELL_MORDENKAINENS_DISJUNCTION) + { + // Our master does not want us using any type of dispel! + if(ai_GetMagicMode(oCreature, AI_MAGIC_STOP_DISPEL)) return FALSE; + float fRange; + if(nInMelee) fRange = AI_RANGE_MELEE; + else fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + // Get the biggest group we can. + string sIndex = IntToString(ai_GetHighestMeleeIndexNotInAOE(oCreature)); + oTarget = GetLocalObject(oCreature, AI_ENEMY + sIndex); + if(!ai_CreatureHasDispelableEffect(oCreature, oTarget)) return FALSE; + // Maybe we should do an area of effect instead? + int nEnemies = ai_GetNumOfEnemiesInRange(oTarget, 5.0); + if(nEnemies > 2) + { + if(ai_UseTalentAtLocation(oCreature, jTalent, oTarget, nInMelee)) return TRUE; + } + } + // These spells have a Range of Personal i.e. cast on themselves, and + // an Area of Effect of Colossal (10.0). + else if(nSpell == SPELL_FIRE_STORM || nSpell == SPELL_STORM_OF_VENGEANCE) + { + // Make sure we have enough enemies to use this on. + int nEnemies = ai_GetNumOfEnemiesInRange(oCreature, 10.0); + if(nEnemies < 2) return FALSE; + // Get the nearest target to check defenses on. + oTarget = ai_GetNearestTarget(oCreature, 10.0); + if(!ai_CastOffensiveSpellVsTarget(oCreature, oTarget, nSpell) || + ai_CreatureImmuneToEffect(oCreature, oTarget, nSpell)) return FALSE; + if(ai_UseTalentAtLocation(oCreature, jTalent, oTarget, nInMelee)) return TRUE; + } + else if(nSpell == SPELL_UNDEATH_TO_DEATH) + { + float fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + int nUndead = ai_GetRacialTypeCount(oCreature, RACIAL_TYPE_UNDEAD, fRange); + if(nUndead < 3) return FALSE; + oTarget = ai_GetLowestCRRacialTarget(oCreature, RACIAL_TYPE_UNDEAD, fRange); + } + // Get a target for discriminant spells if one is not already set. + if(oTarget == OBJECT_INVALID) + { + float fRange; + if(nInMelee) fRange = AI_RANGE_MELEE; + else fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + oTarget = ai_CheckForGroupedTargetNotInAOE(oCreature, fRange); + } + if(oTarget == OBJECT_INVALID || GetHasSpellEffect(nSpell, oTarget) || + !ai_CastOffensiveSpellVsTarget(oCreature, oTarget, nSpell) || + ai_CreatureImmuneToEffect(oCreature, oTarget, nSpell)) return FALSE; + } + else if(sCategory == AI_TALENT_INDISCRIMINANT_AOE) + { + //ai_Debug("0i_talents", "1991", "CompareLastAction: " + + // IntToString(ai_CompareLastAction(oCreature, nSpell))); + // If we used this spell talent last round then don't use it this round. + //if(ai_CompareLastAction(oCreature, nSpell)) return FALSE; + // These spells have a Range of Personal i.e. cast on themselves, and + // an Area of Effect of Colossal (10.0). + if(nSpell == SPELL_METEOR_SWARM) + { + // Make sure we have enough enemies and few allies to hit. + int nAllies = ai_GetNumOfAlliesInGroup(oCreature, 10.0); + int nEnemies = ai_GetNumOfEnemiesInRange(oCreature, 10.0); + if(nAllies > 1 || nEnemies < 2) return FALSE; + // Get the nearest target to check defenses on. + oTarget = ai_GetNearestTarget(oCreature, 10.0); + if(!ai_CastOffensiveSpellVsTarget(oCreature, oTarget, nSpell) || + ai_CreatureImmuneToEffect(oCreature, oTarget, nSpell)) return FALSE; + if(ai_UseTalentAtLocation(oCreature, jTalent, oCreature, nInMelee)) return TRUE; + } + // Get a target for indiscriminant spells if one is not already set. + if(oTarget == OBJECT_INVALID) + { + float fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + oTarget = ai_CheckForGroupedTargetNotInAOE(oCreature, fRange); + // Check for the number of allies, if there are too many then skip. + if(oTarget == OBJECT_INVALID) return FALSE; + int nRoll = d6() + 1; + if(GetAssociateType(oCreature)) nRoll = d3(); + int nAllies = ai_GetNumOfAlliesInGroup(oTarget, AI_RANGE_CLOSE); + if(AI_DEBUG) ai_Debug("0i_talents", "2084", "Num of Allies in range: " + IntToString(nAllies)+ + " < nRoll: " + IntToString(nRoll)); + if(nAllies >= nRoll) return FALSE; + } + if(oTarget == OBJECT_INVALID || GetHasSpellEffect(nSpell, oTarget) || + !ai_CastOffensiveSpellVsTarget(oCreature, oTarget, nSpell) || + ai_CreatureImmuneToEffect(oCreature, oTarget, nSpell)) return FALSE; + //********************************************************************** + //********** These spells are checked after picking a target *********** + //********************************************************************** + // Check if the Sleep spells are being used appropriately. + if(nSpell == SPELL_SLEEP) + { + if(GetHitDice(oTarget) > 4) return FALSE; + } + // Lets only use silence on casters. + else if(nSpell == SPELL_SILENCE) + { + if(!ai_CheckClassType(oTarget, AI_CLASS_TYPE_CASTER)) + { + oTarget = ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER); + if(oTarget == OBJECT_INVALID) return FALSE; + } + } + } + else if(sCategory == AI_TALENT_RANGED) + { + //ai_Debug("0i_talents", "2045", "CompareLastAction: " + + // IntToString(ai_CompareLastAction(oCreature, nSpell))); + // If we used this spell talent last round then don't use it this round. + //if(ai_CompareLastAction(oCreature, nSpell)) return FALSE; + // Check to see if Dispel Magic and similar spells should *not* be cast + if(nSpell == SPELL_DISPEL_MAGIC || nSpell == SPELL_LESSER_DISPEL || + nSpell == SPELL_GREATER_DISPELLING) + { + // Our master does not want us using any type of dispel! + if(ai_GetMagicMode(oCreature, AI_MAGIC_STOP_DISPEL)) return FALSE; + float fRange; + if(nInMelee) fRange = AI_RANGE_MELEE; + else fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + // Lets get a caster as they should have more buffs. + oTarget = ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER, fRange); + // No caster then get the most powerful enemy! + if(oTarget == OBJECT_INVALID) oTarget = ai_GetHighestCRTarget(oCreature, fRange); + if(oTarget != OBJECT_INVALID) + { + if(!ai_CreatureHasDispelableEffect(oCreature, oTarget)) return FALSE; + // Maybe we should do an area of effect instead? + int nEnemies = ai_GetNumOfEnemiesInRange(oTarget, 5.0); + if(nEnemies > 2) + { + if(ai_UseTalentAtLocation(oCreature, jTalent, oTarget, nInMelee)) return TRUE; + } + } + if(oTarget == OBJECT_INVALID) return FALSE; + } + // Make sure the spell will work on the target. + else if(nSpell == SPELL_HOLD_PERSON || nSpell == SPELL_DOMINATE_PERSON || + nSpell == SPELL_CHARM_PERSON) + { + if(oTarget != OBJECT_INVALID) + { + int nRaceType = GetRacialType(oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "2075", " Person Spell race: " + IntToString(nRaceType)); + if((nRaceType > 6 && nRaceType < 12) || nRaceType > 15) oTarget = OBJECT_INVALID; + } + if(oTarget == OBJECT_INVALID) + { + float fRange; + if(nInMelee) fRange = AI_RANGE_MELEE; + else fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + oTarget = ai_GetNearestRacialTarget(oCreature, AI_RACIAL_TYPE_HUMANOID, fRange); + if(oTarget == OBJECT_INVALID) return FALSE; + } + } + else if(nSpell == SPELL_HOLD_ANIMAL || nSpell == SPELL_DOMINATE_ANIMAL) + { + if(oTarget != OBJECT_INVALID) + { + if(GetRacialType(oTarget) != RACIAL_TYPE_ANIMAL) oTarget = OBJECT_INVALID; + } + if(oTarget == OBJECT_INVALID) + { + float fRange; + if(nInMelee) fRange = AI_RANGE_MELEE; + else fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + oTarget = ai_GetNearestRacialTarget(oCreature, AI_RACIAL_TYPE_ANIMAL_BEAST, fRange); + if(oTarget == OBJECT_INVALID) return FALSE; + } + } + // Get a target for ranged spells if one is not already set. + if(oTarget == OBJECT_INVALID) + { + float fRange; + if(nInMelee) fRange = AI_RANGE_MELEE; + else fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + oTarget = ai_GetSpellTargetBasedOnSaves(oCreature, nSpell, fRange); + } + if(oTarget == OBJECT_INVALID || GetHasSpellEffect(nSpell, oTarget) || + !ai_CastOffensiveSpellVsTarget(oCreature, oTarget, nSpell) || + ai_CreatureImmuneToEffect(oCreature, oTarget, nSpell)) return FALSE; + //********************************************************************** + //********** These spells are checked after picking a target *********** + //********************************************************************** + // Don't use Domination spells on players! They don't work. + if((nSpell == SPELL_DOMINATE_MONSTER || nSpell == SPELL_DOMINATE_PERSON)) + { + if(ai_GetIsCharacter(oTarget)) return FALSE; + } + // Check to see if they have the shield spell up. + else if(nSpell == SPELL_MAGIC_MISSILE) + { + if(GetHasSpellEffect(SPELL_SHIELD, oTarget)) return FALSE; + } + // Scare only works on 5 hitdice or less. + else if(nSpell == SPELL_SCARE) + { + if(GetHitDice(oTarget) > 5) return FALSE; + } + // Don't use drown against nonliving opponents. + else if(nSpell == SPELL_DROWN) + { + if(ai_IsNonliving(GetRacialType(oTarget))) return FALSE; + } + // Don't use Power Word Kill on Targets with more than 100hp + else if(nSpell == SPELL_POWER_WORD_KILL) + { + if(GetCurrentHitPoints(oTarget) <= 100) return FALSE; + } + } + else if(sCategory == AI_TALENT_TOUCH) + { + //ai_Debug("0i_talents", "2139", "CompareLastAction: " + + // IntToString(ai_CompareLastAction(oCreature, nSpell))); + // If we used this spell talent last round then don't use it this round. + //if(ai_CompareLastAction(oCreature, nSpell)) return FALSE; + // Get a target for touch spells if one is not already set. + if(oTarget == OBJECT_INVALID) + { + oTarget = ai_GetSpellTargetBasedOnSaves(oCreature, nSpell, AI_RANGE_MELEE); + } + if(oTarget == OBJECT_INVALID || GetHasSpellEffect(nSpell, oTarget) || + !ai_CastOffensiveSpellVsTarget(oCreature, oTarget, nSpell) || + ai_CreatureImmuneToEffect(oCreature, oTarget, nSpell)) return FALSE; + } + else if(sCategory == AI_TALENT_HEALING) + { + int nHpLost = ai_GetPercHPLoss(oTarget); + // If the target is bloody then just use the best we have! + if(nHpLost > AI_HEALTH_BLOODY) + { + // Make sure we should use a mass heal on us or an ally! + // Two allies need healing or one is almost dead to use mass heal! + if(nSpell == SPELL_MASS_HEAL) + { + int bWoundedAlly; + object oAlly = ai_GetNearestAlly(oTarget); + if(oAlly != OBJECT_INVALID) + { + // If we don't have a nearby ally that needs healed then skip. + if(ai_GetPercHPLoss(oAlly) > AI_HEALTH_WOUNDED || + GetDistanceBetween(oCreature, oAlly) > 9.0f) return FALSE; + } + } + // Make sure they have taken enough damage. + int nHpDmg = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + if(!ai_ShouldWeCastThisCureSpell(nSpell, nHpDmg)) return FALSE; + } + } + else if(sCategory == AI_TALENT_ENHANCEMENT) + { + if(AI_DEBUG) ai_Debug("0i_talents", "2713", "CompareLastAction: " + + IntToString(ai_CompareLastAction(oCreature, nSpell))); + // If we used this spell talent last round then don't use it this round. + if(ai_CompareLastAction(oCreature, nSpell)) return FALSE; + if(nSpell == SPELL_INVISIBILITY || nSpell == SPELL_SANCTUARY) + { + // Lets not run past an enemy to cast an enhancement unless we have + // the ability to move in combat, bad tactics! + float fRange; + if(ai_CanIMoveInCombat(oCreature)) fRange = AI_RANGE_PERCEPTION; + else + { + fRange = GetDistanceBetween(oCreature, GetLocalObject(oCreature, AI_ENEMY_NEAREST)) - 3.0f; + // Looks bad when your right next to an ally, but technically the enemy is closer. + if(fRange < AI_RANGE_MELEE) fRange = AI_RANGE_MELEE; + } + oTarget = ai_GetAllyToHealTarget(oCreature, fRange); + if(oTarget != OBJECT_INVALID) + { + int nHp = ai_GetPercHPLoss(oTarget); + int nHpLimit = ai_GetHealersHpLimit(oCreature); + if(nHp > nHpLimit) return FALSE; + } + } + if(nSpell == SPELL_PRAYER) + { + int nEnemies = ai_GetNumOfEnemiesInRange(oCreature, 10.0); + int nAllies = ai_GetNumOfAlliesInGroup(oCreature, 10.0); + if(nEnemies + nAllies < 5) return FALSE; + oTarget = oCreature; + } + // Since haste does not have an effect when it comes from items when we + // check for item properties we set this variable so we know they have it. + else if(nSpell == SPELL_HASTE && GetLocalInt(oCreature, sIPHasHasteVarname)) return FALSE; + // Only reason to cast Ultravision(Darkvision) in combat is if a Darkness + // spell is nearby. + else if(nSpell == SPELL_DARKVISION) + { + int nCnt = 1, bCastSpell; + string sAOEType; + object oAOE = GetNearestObject(OBJECT_TYPE_AREA_OF_EFFECT, oCreature, nCnt); + while(oAOE != OBJECT_INVALID && GetDistanceBetween(oCreature, oAOE) <= AI_RANGE_PERCEPTION) + { + // AOE's have the tag set to the "LABEL" in vfx_persistent.2da + sAOEType = GetTag(oAOE); + if(AI_DEBUG) ai_Debug("0i_talents", "2759", "Ultravision check; AOE tag: " + sAOEType); + if(sAOEType == "VFX_PER_DARKNESS") + { + if(!GetHasFeat(FEAT_DARKVISION)) bCastSpell = TRUE; + break; + } + oAOE = GetNearestObject(OBJECT_TYPE_AREA_OF_EFFECT, oCreature, ++nCnt); + } + if(!bCastSpell) return FALSE; + } + // Get a target for enhancement spells if one is not already set. + if(oTarget == OBJECT_INVALID) + { + // Get talents range and target. + float fRange = ai_GetSpellRange(nSpell); + // Personal spell + if(fRange == 0.1f) oTarget = oCreature; + // Range/Touch spell + else oTarget = ai_GetAllyBuffTarget(oCreature, nSpell, fRange); + } + if(AI_DEBUG) ai_Debug("0i_talents", "2260", " oTarget: " + GetName(oTarget) + + " HasSpellEffect: " + IntToString(GetHasSpellEffect(nSpell, oTarget))); + if(oTarget == OBJECT_INVALID || GetHasSpellEffect(nSpell, oTarget)) return FALSE; + //********************************************************************** + //********** These spells are checked after picking a target *********** + //********************************************************************** + // Weapon enhancing spells only work on melee weapons! + if(nSpell == SPELL_MAGIC_WEAPON || nSpell == SPELL_GREATER_MAGIC_WEAPON || + nSpell == SPELL_BLESS_WEAPON || nSpell == SPELL_FLAME_WEAPON || + nSpell == SPELL_DARKFIRE) + { + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!ai_GetIsMeleeWeapon(oWeapon)) return FALSE; + } + // Should we ignore associates? + if(ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && + GetAssociateType(oTarget) > 1) return FALSE; + } + else if(sCategory == AI_TALENT_PROTECTION) + { + if(AI_DEBUG) ai_Debug("0i_talents", "2281", "CompareLastAction: " + + IntToString(ai_CompareLastAction(oCreature, nSpell))); + // If we used this spell talent last round then don't use it this round. + if(ai_CompareLastAction(oCreature, nSpell)) return FALSE; + // Stone bones only effects the undead. + if(nSpell == SPELL_STONE_BONES) + { + if(oTarget != OBJECT_INVALID) + { + if(GetRacialType(oTarget) != RACIAL_TYPE_UNDEAD) oTarget = OBJECT_INVALID; + } + if(oTarget == OBJECT_INVALID) + { + float fRange; + if(nInMelee) fRange = AI_RANGE_MELEE; + else fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + oTarget = ai_GetNearestRacialTarget(oCreature, RACIAL_TYPE_UNDEAD, fRange); + if(oTarget == OBJECT_INVALID) return FALSE; + } + } + else if(nSpell == SPELL_MAGIC_FANG) + { + oTarget = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oCreature); + if(oTarget == OBJECT_INVALID) return FALSE; + } + // Lets see if we should cast resistances in our current situation, + // lets check for enemy casters that may have energy damaging spells, or energy weapons. + else if(nSpell == SPELL_ENDURE_ELEMENTS || nSpell == SPELL_PROTECTION_FROM_ELEMENTS || + nSpell == SPELL_RESIST_ELEMENTS || nSpell == SPELL_ENERGY_BUFFER) + { + int bCastSpell; + object oEnemy = ai_GetEnemyAttackingMe(oCreature); + if(oEnemy != OBJECT_INVALID) + { + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oEnemy); + if(oWeapon == OBJECT_INVALID) oWeapon = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oEnemy); + if(oWeapon == OBJECT_INVALID) oWeapon = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oEnemy); + if(AI_DEBUG) ai_Debug("0i_talents", "2812", GetName(oEnemy) + " is using weapon: " + GetName(oWeapon)); + if(oWeapon != OBJECT_INVALID) + { + itemproperty nProperty = GetFirstItemProperty(oWeapon); + while(GetIsItemPropertyValid(nProperty)) + { + if(GetItemPropertyType(nProperty) == ITEM_PROPERTY_DAMAGE_BONUS) + { + int nSubType = GetItemPropertySubType(nProperty); + if(AI_DEBUG) ai_Debug("0i_talents", "2821", GetName(oWeapon) + " has PropertySubType: " + + IntToString(nSubType) + " If equals [6,7,9,10,13] don't cast!"); + if(nSubType == 6 || nSubType == 7 || nSubType == 9 || + nSubType == 10 || nSubType == 13) + { + bCastSpell = TRUE; + break; + } + } + nProperty = GetNextItemProperty(oWeapon); + } + } + } + if(ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER) != OBJECT_INVALID) bCastSpell = TRUE; + if(!bCastSpell) return FALSE; + } + // Get a target for protection spells if one is not already set. + if(oTarget == OBJECT_INVALID) + { + // Get talents range and target. + float fRange = ai_GetSpellRange(nSpell); + // Personal spell + if(fRange == 0.1f) oTarget = oCreature; + // Range/Touch spell + else oTarget = ai_GetAllyBuffTarget(oCreature, nSpell, fRange); + } + if(oTarget == OBJECT_INVALID || GetHasSpellEffect(nSpell, oTarget)) return FALSE; + //********************************************************************** + //********** These spells are checked after picking a target *********** + //********************************************************************** + // Don't double up Stoneskin, Ghostly visage, or Ethereal visage. + if(nSpell == SPELL_GHOSTLY_VISAGE || nSpell == SPELL_ETHEREAL_VISAGE || + nSpell == SPELL_STONESKIN) + { + if(GetHasSpellEffect(SPELL_ETHEREAL_VISAGE, oTarget) || + GetHasSpellEffect(SPELL_STONESKIN, oTarget) || + GetHasSpellEffect(SPELL_GHOSTLY_VISAGE, oTarget)) return FALSE; + } + // Don't use displacement if we are invisible! + else if(nSpell == SPELL_DISPLACEMENT) + { + if(GetHasSpellEffect(SPELL_INVISIBILITY, oTarget) || + GetHasSpellEffect(SPELL_IMPROVED_INVISIBILITY, oTarget) || + GetHasSpellEffect(SPELL_INVISIBILITY_SPHERE, oTarget) || + GetHasSpellEffect(SPELL_DISPLACEMENT, oTarget)) return FALSE; + } + // Should we ignore associates? + if(ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && + GetAssociateType(oTarget) > 1) return FALSE; + } + else if(sCategory == AI_TALENT_SUMMON) + { + if(GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCreature) != OBJECT_INVALID) return FALSE; + if(oTarget == OBJECT_INVALID) + { + /* Removed for now, summons creature in location that enemy was... looks bad. + float fRange; + if(nInMelee) fRange = AI_RANGE_MELEE; + else fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + // Select lowest enemy combat target for summons. + oTarget = ai_GetLowestCRTarget(oCreature, fRange); + if(oTarget == OBJECT_INVALID) oTarget = oCreature; + */ + oTarget = oCreature; + if(ai_UseTalentAtLocation(oCreature, jTalent, oTarget, nInMelee)) + { + DelayCommand(4.0, ai_NameAssociate(oCreature, ASSOCIATE_TYPE_SUMMONED, "")); + return TRUE; + } + } + } + else if(sCategory == AI_TALENT_CURE) + { + } + if(ai_UseTalentOnObject(oCreature, jTalent, oTarget, nInMelee)) return TRUE; + return FALSE; +} diff --git a/src/module/nss/0i_time.nss b/src/module/nss/0i_time.nss new file mode 100644 index 0000000..3052ea6 --- /dev/null +++ b/src/module/nss/0i_time.nss @@ -0,0 +1,95 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_time +//////////////////////////////////////////////////////////////////////////////// + Include script for handling all time functions for the server. + + Lokey's functions: +int GetPosixTimestamp(); +string GetCurrentDateTime(); + +*/////////////////////////////////////////////////////////////////////////////// +// RETURNS a Timestamp in seconds since 1970-01-01. +int GetCurrentTimeInSeconds(); +// RETURNS a formated date, good for timestamping logs and text. +string GetCurrentDateTime(); +// Sends a server shutdown message 1800 seconds i.e 30 minutes before. +// nDuration is in seconds. i.e. one hours is 3600 defaults to 24 hours (86400). +// Should be put into the servers OnHeartBeat. +void CheckServerShutdownMessage(int nDuration = 86400); + +int GetCurrentTimeInSeconds() +{ + string stmt = "SELECT strftime('%s','now');"; + sqlquery sqlQuery = SqlPrepareQueryObject(GetModule(), stmt); + SqlStep(sqlQuery); + return SqlGetInt(sqlQuery, 0); +} +string GetCurrentDateTime() +{ + string stmt = "SELECT datetime('now', 'localtime')"; + sqlquery sqlQuery = SqlPrepareQueryObject(GetModule(), stmt); + SqlStep(sqlQuery); + return SqlGetString(sqlQuery, 0); +} +/// @addtogroup time Time +/// @brief Provides various time related functions. +/// @brief Returns the current time formatted according to the provided sqlite date time format string. +/// @param format Format string as used by sqlites STRFTIME(). +/// @return The current time in the requested format. Empty string on error. +string SQLite_GetFormattedSystemTime(string format); +/// @return Returns the number of seconds since midnight on January 1, 1970. +int SQLite_GetTimeStamp(); +/// @return Returns the number of milliseconds since midnight on January 1, 1970. +int SQLite_GetTimeMilliseconds(); +/// @brief A millisecond timestamp +struct SQLite_MillisecondTimeStamp +{ + int seconds; ///< Seconds since epoch + int milliseconds; ///< Milliseconds +}; +/// @remark For mircosecond timestamps use NWNX_Utility_GetHighResTimeStamp(). +/// @return Returns the number of milliseconds since midnight on January 1, 1970. +struct SQLite_MillisecondTimeStamp SQLite_GetMillisecondTimeStamp(); +/// @brief Returns the current date. +/// @return The date in the format (mm/dd/yyyy). +string SQLite_GetSystemDate(); +/// @brief Returns current time. +/// @return The current time in the format (24:mm:ss). +string SQLite_GetSystemTime(); +/// @} +string SQLite_GetFormattedSystemTime(string format) +{ + sqlquery query = SqlPrepareQueryObject(GetModule(), "SELECT STRFTIME(@format, 'now', 'localtime')"); + SqlBindString(query, "@format", format); + SqlStep(query); // sqlite returns NULL for invalid format in STRFTIME() + return SqlGetString(query, 0); +} +int SQLite_GetTimeStamp() +{ + sqlquery query = SqlPrepareQueryObject(GetModule(), "SELECT STRFTIME('%s', 'now')"); + SqlStep(query); + return SqlGetInt(query, 0); +} +int SQLite_GetTimeMillisecond() +{ + sqlquery query = SqlPrepareQueryObject(GetModule(), "select cast((julianday('now') - 2440587.5) * 86400 * 1000 as integer)"); + SqlStep(query); + return SqlGetInt(query, 0); +} +struct SQLite_MillisecondTimeStamp SQLite_GetMillisecondTimeStamp() +{ + sqlquery query = SqlPrepareQueryObject(GetModule(), "SELECT STRFTIME('%s', 'now'), SUBSTR(STRFTIME('%f', 'now'), 4)"); + SqlStep(query); + struct SQLite_MillisecondTimeStamp t; + t.seconds = SqlGetInt(query, 0); + t.milliseconds = SqlGetInt(query, 1); + return t; +} +string SQLite_GetSystemDate() +{ + return SQLite_GetFormattedSystemTime("%m/%d/%Y"); +} +string SQLite_GetSystemTime() +{ + return SQLite_GetFormattedSystemTime("%H:%M:%S"); +} diff --git a/src/module/nss/ai_a_ambusher.nss b/src/module/nss/ai_a_ambusher.nss new file mode 100644 index 0000000..f3f424b --- /dev/null +++ b/src/module/nss/ai_a_ambusher.nss @@ -0,0 +1,105 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_ambusher +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to ambush creatures by hiding or turning invisible. + OBJECT_SELF is the creature running the ai. + * This assumes we are not invisible since the ai_a_invisible script should fire if we are. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + if(AI_DEBUG) ai_Debug("ai_a_ambusher", "19", GetName(oCreature) + " is using ambusher tactics: " + + " oNearestEnemy: " + GetName(oNearestEnemy) + " fDistance: " + + FloatToString(GetDistanceBetween(oNearestEnemy, oCreature), 0, 2)); + if(GetDistanceBetween(oNearestEnemy, oCreature) > AI_RANGE_CLOSE) + { + // Has our master told us to not use magic? + if(!ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC)) + { + // If can turn invisible then we should probably do that! + if(ai_UseTalent(oCreature, SPELL_IMPROVED_INVISIBILITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_INVISIBILITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_INVISIBILITY_SPHERE, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_SANCTUARY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_ETHEREALNESS, oCreature)) return; // Greater Sanctuary + if(ai_UseTalent(oCreature, SPELLABILITY_AS_IMPROVED_INVISIBLITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELLABILITY_AS_INVISIBILITY, oCreature)) return; + } + } + // Check the battle field to see if anyone see us? + int nEnemyIndex = ai_GetNearestIndexThatSeesUs(oCreature); + // If seen, can we try to hide now? + if(nEnemyIndex) + { + // Check for an attacker and can they see through invisibility? + object oAttacker = ai_GetEnemyAttackingMe(oCreature); + int bCanSeeInvisible; + if(oAttacker != OBJECT_INVALID) + { + bCanSeeInvisible = ai_GetHasEffectType(oAttacker, EFFECT_TYPE_SEEINVISIBLE); + if(!bCanSeeInvisible) bCanSeeInvisible = ai_GetHasEffectType(oAttacker, EFFECT_TYPE_TRUESEEING); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_5_FEET, oCreature); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_10_FEET, oCreature); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_60_FEET, oCreature); + } + if(!bCanSeeInvisible) + { + if(GetHasFeat(FEAT_HIDE_IN_PLAIN_SIGHT, oCreature)) + { + if(!GetActionMode(oCreature, ACTION_MODE_STEALTH)) + { + if(AI_DEBUG) ai_Debug("ai_a_ambusher", "55", GetName(oCreature) + " is using hide in plain sight!"); + ClearAllActions(TRUE); + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + return; + } + } + // Does not have hide in plain sight. + else + { + string sEnemyIndex = IntToString(nEnemyIndex); + float fEnemyDistance = GetLocalFloat(oCreature, AI_ENEMY_RANGE + sEnemyIndex); + if(AI_DEBUG) ai_Debug("ai_a_ambusher", "66", "fDistance: " + FloatToString(fEnemyDistance, 0, 2)); + if(fEnemyDistance > 20.0) + { + int bTried = GetLocalInt(oCreature, AI_TRIED_TO_HIDE); + if(!bTried) + { + // Move away so we can hide. + if(AI_DEBUG) ai_Debug("ai_a_ambusher", "73", GetName(oCreature) + " is trying to move away to hide!"); + SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + object oEnemy = GetLocalObject(oCreature, AI_ENEMY + sEnemyIndex); + ActionMoveAwayFromObject(oEnemy, TRUE, AI_RANGE_BATTLEFIELD); + SetLocalInt(oCreature, AI_TRIED_TO_HIDE, 3); + return; + } + else SetLocalInt(oCreature, AI_TRIED_TO_HIDE, GetLocalInt(oCreature, AI_TRIED_TO_HIDE) - 1); + } + // We have been seen by an enemy near us so drop stealth. + else SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + } + } + // The enemy can see through stealth so lets drop it. + else SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + } + // We are not in stealth mode so and no one sees us so lets hide. + else if(!GetActionMode(oCreature, ACTION_MODE_STEALTH)) + { + // Use any hiding talents we have + if(AI_DEBUG) ai_Debug("ai_a_ambusher", "97", GetName(oCreature) + " is trying to hide!"); + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + SetLocalInt(oCreature, AI_TRIED_TO_HIDE, 3); + return; + } + // If we have givin up on stealth do our normal actions. + string sScript = GetLocalString(oCreature, AI_DEFAULT_SCRIPT); + if(sScript == "ai_a_ambusher" || sScript == "") sScript = "ai_a_default"; + if(AI_DEBUG) ai_Debug("ai_a_ambusher", "101", "Executing Script: " + sScript); + ExecuteScript(sScript, oCreature); +} diff --git a/src/module/nss/ai_a_atk_casters.nss b/src/module/nss/ai_a_atk_casters.nss new file mode 100644 index 0000000..362ba4b --- /dev/null +++ b/src/module/nss/ai_a_atk_casters.nss @@ -0,0 +1,159 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_atk_casters +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to the nearest casting creatures. + OBJECT_SELF is the creature running the ai. + Our actions. + 1 - Get nearest enemy. + 2 - Check for healing and curing first. + 3 - Check moral if wounded and this is a simple+ battle. + 4 - Check for a magical ranged attack if not in melee and a difficult+ battle. + 5 - Check for a buff or summons if this is a difficult+ battle. + 6 - Check for a Class ability and an offensive spell if this is a simple+ battle. + 7 - Check for a physical attack. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, 0, oTarget)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + } + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryTurningTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + int bAlwaysAtk = !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK); + if(AI_DEBUG) ai_Debug("ai_a_atk_casters", "80", "Check for ranged attack on nearest casting enemy!"); + // ************************** Ranged feat attacks ************************** + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) && + !ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && + ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + // Lets pick off the nearest targets first. + if(!nInMelee) + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTarget(oCreature); + } + else + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + if(AI_DEBUG) ai_Debug("0i_actions", "519", "Do ranged attack against nearest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + if(AI_DEBUG) ai_Debug("ai_a_atk_casters", "119", "Check for melee attack on nearest enemy!"); + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee, bAlwaysAtk)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_PERCEPTION, bAlwaysAtk); + if(oTarget == OBJECT_INVALID) + { + object oPCTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + if(oPCTarget == OBJECT_INVALID) + { + // Are we in melee? If so try to get the nearest enemy in melee. + if(nInMelee > 0) + { + oTarget = ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER, AI_RANGE_MELEE, AI_ENEMY, bAlwaysAtk); + // If we didn't get a target then get any target within range. + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_MELEE, AI_ENEMY, bAlwaysAtk); + } + // If not then lets go find someone to attack! + else + { + // Get the nearest enemy. + oTarget = ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk); + // If we didn't get a target then get any target within range. + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk); + } + } + } + // We might not have a target this is fine as sometimes we don't want to attack! + if(AI_DEBUG) ai_Debug("ai_a_atk_casters", "149", GetName(oTarget) + " is the nearest target for melee combat!"); + // If we don't find a target then we don't want to fight anyone! + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + if(AI_DEBUG) ai_Debug("ai_a_atk_casters", "154", "Do melee attack against (caster/nearest): " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} + diff --git a/src/module/nss/ai_a_atk_nearest.nss b/src/module/nss/ai_a_atk_nearest.nss new file mode 100644 index 0000000..1261dc7 --- /dev/null +++ b/src/module/nss/ai_a_atk_nearest.nss @@ -0,0 +1,80 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_atk_nearest +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to the nearest target. + OBJECT_SELF is the creature running the ai. + Our actions. + 1 - Get nearest enemy. + 2 - Check for healing and curing first. + 3 - Check moral if wounded and this is a simple+ battle. + 4 - Check for a magical ranged attack if not in melee and a difficult+ battle. + 5 - Check for a buff or summons if this is a difficult+ battle. + 6 - Check for a Class ability and an offensive spell if this is a simple+ battle. + 7 - Check for a physical attack. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, 0, oTarget)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + } + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryTurningTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + ai_DoPhysicalAttackOnNearest(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); +} + diff --git a/src/module/nss/ai_a_atk_warrior.nss b/src/module/nss/ai_a_atk_warrior.nss new file mode 100644 index 0000000..4821e53 --- /dev/null +++ b/src/module/nss/ai_a_atk_warrior.nss @@ -0,0 +1,159 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_atk_warrior +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to the nearest casting creatures. + OBJECT_SELF is the creature running the ai. + Our actions. + 1 - Get nearest enemy. + 2 - Check for healing and curing first. + 3 - Check moral if wounded and this is a simple+ battle. + 4 - Check for a magical ranged attack if not in melee and a difficult+ battle. + 5 - Check for a buff or summons if this is a difficult+ battle. + 6 - Check for a Class ability and an offensive spell if this is a simple+ battle. + 7 - Check for a physical attack. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, 0, oTarget)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + } + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryTurningTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + int bAlwaysAtk = !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK); + if(AI_DEBUG) ai_Debug("0i_actions", "496", "Check for ranged attack on nearest casting enemy!"); + // ************************** Ranged feat attacks ************************** + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) && + !ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && + ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + // Lets pick off the nearest targets first. + if(!nInMelee) + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_WARRIOR); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTarget(oCreature); + } + else + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_WARRIOR, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + if(AI_DEBUG) ai_Debug("0i_actions", "519", "Do ranged attack against nearest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + if(AI_DEBUG) ai_Debug("ai_a_atk_warrior", "119", "Check for melee attack on nearest enemy!"); + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee, bAlwaysAtk)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_PERCEPTION, bAlwaysAtk); + if(oTarget == OBJECT_INVALID) + { + object oPCTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + if(oPCTarget == OBJECT_INVALID) + { + // Are we in melee? If so try to get the nearest enemy in melee. + if(nInMelee > 0) + { + oTarget = ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_WARRIOR, AI_RANGE_MELEE, AI_ENEMY, bAlwaysAtk); + // If we didn't get a target then get any target within range. + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_MELEE, AI_ENEMY, bAlwaysAtk); + } + // If not then lets go find someone to attack! + else + { + // Get the nearest enemy. + oTarget = ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_WARRIOR, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk); + // If we didn't get a target then get any target within range. + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk); + } + } + } + // We might not have a target this is fine as sometimes we don't want to attack! + if(AI_DEBUG) ai_Debug("ai_a_atk_warrior", "149", GetName(oTarget) + " is the nearest target for melee combat!"); + // If we don't find a target then we don't want to fight anyone! + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + if(AI_DEBUG) ai_Debug("ai_a_atk_warrior", "154", "Do melee attack against (caster/nearest): " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} + diff --git a/src/module/nss/ai_a_barbarian.nss b/src/module/nss/ai_a_barbarian.nss new file mode 100644 index 0000000..12521c9 --- /dev/null +++ b/src/module/nss/ai_a_barbarian.nss @@ -0,0 +1,87 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_barbarian +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Barbarian class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oTarget; + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature)) + { + //************************* HEALING & CURES ************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // ************************ CLASS FEATURES ************************* + if(ai_TryBarbarianRageFeat(oCreature)) return; + // ************************* SPELL TALENTS ************************* + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************* SPELL TALENTS ************************* + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ Ranged feat attacks ************************ + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRTarget(oCreature); + else oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + } + // *************************** Melee feat attacks ************************** + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/src/module/nss/ai_a_bard.nss b/src/module/nss/ai_a_bard.nss new file mode 100644 index 0000000..975bac2 --- /dev/null +++ b/src/module/nss/ai_a_bard.nss @@ -0,0 +1,83 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_bard +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Bard class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryBardSongFeat(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget = OBJECT_INVALID; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRTarget(oCreature); + else oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/src/module/nss/ai_a_cleric.nss b/src/module/nss/ai_a_cleric.nss new file mode 100644 index 0000000..5de1cc2 --- /dev/null +++ b/src/module/nss/ai_a_cleric.nss @@ -0,0 +1,102 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_cleric +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Cleric class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + // ************************** CLASS FEATURES *************************** + // Turning is basically a powerful AOE so treat it like one. + if(ai_TryTurningTalent(oCreature)) return; + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, 0, oTarget)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + } + } + // SIMPLE+ - Offensive talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget = OBJECT_INVALID; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRTarget(oCreature); + else oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/src/module/nss/ai_a_cntrspell.nss b/src/module/nss/ai_a_cntrspell.nss new file mode 100644 index 0000000..a1bc9ec --- /dev/null +++ b/src/module/nss/ai_a_cntrspell.nss @@ -0,0 +1,69 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_cntrspell +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the combat mode counter spell. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + // We are not in melee combat then we don't attack. + int bAttack = nInMelee; + if(!bAttack) + { + // If there are no casters, i.e. CLERIC or MAGES in the battle then attack. + struct stClasses stClasses = ai_GetFactionsClasses(oCreature); + if(!stClasses.CLERICS && !stClasses.MAGES) bAttack = TRUE; + } + // If we are not attacking and using magic then setup for counter spelling. + if(!bAttack && !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC)) + { + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + if(AI_DEBUG) ai_Debug("ai_a_cntrspell", "30", " Counterspell Mode? " + + IntToString(GetActionMode(OBJECT_SELF, ACTION_MODE_COUNTERSPELL))); + if(!GetActionMode(oCreature, ACTION_MODE_COUNTERSPELL)) + { + object oTarget = ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER); + // We can only counter spells from a hasted caster if we are hasted as well. + if(ai_GetHasEffectType(oTarget, EFFECT_TYPE_HASTE) && + !ai_GetHasEffectType(oCreature, EFFECT_TYPE_HASTE)) + { + // If we have haste then we should cast it. + if(GetHasSpell(SPELL_HASTE, oCreature)) + { + if(AI_DEBUG) ai_Debug("ai_a_cntrspell", "42", "Opponent is hasted! Casting Haste."); + ActionCastSpellAtObject(SPELL_HASTE, oCreature); + ai_SetLastAction(oCreature, SPELL_HASTE); + return; + } + // If not then we need to go into normal combat. + else + { + if(AI_DEBUG) ai_Debug("ai_cntrspell", "50", "Opponent is hasted! Using ranged AI."); + ExecuteScript("ai_a_ranged"); + return; + } + } + if(oTarget != OBJECT_INVALID) + { + // First a good tactic for counter spelling is to be invisible. + if(ai_TryToBecomeInvisible(oCreature)) return; + // If we have attempted to become invisible or are invisible then + // it is time to counter spell. + if(AI_DEBUG) ai_Debug("ai_a_cntrspell", "61", "Setting Counterspell mode!"); + ActionCounterSpell(oTarget); + return; + } + } + } + if(AI_DEBUG) ai_Debug("ai_a_cntrspell", "67", "Situation is not good for counterspelling! Using ranged AI."); + ExecuteScript("ai_a_ranged"); +} diff --git a/src/module/nss/ai_a_default.nss b/src/module/nss/ai_a_default.nss new file mode 100644 index 0000000..7540340 --- /dev/null +++ b/src/module/nss/ai_a_default.nss @@ -0,0 +1,80 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_no_modes +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to not use any combat modes during combat ai. + OBJECT_SELF is the creature running the ai. + Our actions. + 1 - Get nearest enemy. + 2 - Check for healing and curing first. + 3 - Check moral if wounded and this is a simple+ battle. + 4 - Check for a magical ranged attack if not in melee and a difficult+ battle. + 5 - Check for a buff or summons if this is a difficult+ battle. + 6 - Check for a Class ability and an offensive spell if this is a simple+ battle. + 7 - Check for a physical attack. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, 0, oTarget)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + } + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryTurningTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + ai_DoPhysicalAttackOnBest(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); +} + diff --git a/src/module/nss/ai_a_defensive.nss b/src/module/nss/ai_a_defensive.nss new file mode 100644 index 0000000..f19523c --- /dev/null +++ b/src/module/nss/ai_a_defensive.nss @@ -0,0 +1,77 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_defensive +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates put in to a defensive mode to protect themselves. + OBJECT_SELF is the creature running the ai. + Our actions. + 1 - Get nearest enemy and the difficulty of the battle. + 2 - Check for healing potions if this is a simple+ battle. + 3 - Check moral if wounded and is a simple+ battle. + 4 - Check for a magical ranged attack if not in melee and a difficult+ battle. + 5 - Check for a buff if this is a difficult+ battle. + 6 - Check for defensive ability such as knockdown, expertise or parry. + 7 - If we can't fight defensive then flee. + 8 - If we are out of range with no ability then stand and watch. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + if(AI_DEBUG) ai_Debug("ai_a_defensive", "25", "oNearest Enemy: " + GetName(oNearestEnemy) + + " Distance to Nearest Enemy: " + FloatToString(GetDistanceToObject(oNearestEnemy), 0, 2)); + // ALWAYS - Check for healing and cure talents. + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // SIMPLE+ - Check for moral and get what spell power we should be using. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // DIFFICULT+ - Class talents, Offensive AOE's, Defensive talents, and Potion talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS **************** + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if (ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound, oTarget)) return; + } + } + object oTarget; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + if(nInMelee > 0) + { + if(ai_TryImprovedExpertiseFeat(oCreature)) return; + if(ai_TryExpertiseFeat(oCreature)) return; + // Lets get the strongest melee opponent in melee with us. + oTarget = ai_GetHighestCRTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = oNearestEnemy; + // Use knockdown when appropriate and the target is not immune. + if(ai_TryKnockdownFeat(oCreature, oTarget)) return; + if (ai_TryParry (oCreature)) return; + // We have tried everything to protect ourselves so the only thing left + // to do is man up and attack! + ai_DoPhysicalAttackOnLowestCR(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + return; + } + //********************** PHYSICAL ATTACKS ******************************** + // Even in defensive mode we want to be in battle so go find someone! + ai_DoPhysicalAttackOnBest(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); +} diff --git a/src/module/nss/ai_a_druid.nss b/src/module/nss/ai_a_druid.nss new file mode 100644 index 0000000..6b82c26 --- /dev/null +++ b/src/module/nss/ai_a_druid.nss @@ -0,0 +1,86 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_druid +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Druid class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // ************************** CLASS FEATURES *************************** + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TryPolymorphSelfFeat(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************** Ranged feat attacks ************************** + object oTarget; + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRTarget(oCreature); + else oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/src/module/nss/ai_a_fighter.nss b/src/module/nss/ai_a_fighter.nss new file mode 100644 index 0000000..a5f3720 --- /dev/null +++ b/src/module/nss/ai_a_fighter.nss @@ -0,0 +1,82 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_a_fighter +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Fighter class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget = OBJECT_INVALID; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRTarget(oCreature); + else oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/src/module/nss/ai_a_flanker.nss b/src/module/nss/ai_a_flanker.nss new file mode 100644 index 0000000..fb6845a --- /dev/null +++ b/src/module/nss/ai_a_flanker.nss @@ -0,0 +1,117 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_flanker +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to flank the enemy and not charge into combat. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + oTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + // ************************** Melee feat attacks ************************* + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + // Lets get the nearest target that is attacking someone besides me. We want to flank! + if(oTarget == OBJECT_INVALID) + { + if(!nInMelee) oTarget = ai_GetFlankTarget(oCreature); + // If there are few enemies then we can safely move around. + else if(nInMelee < 3 || ai_CanIMoveInCombat(oCreature)) + { + oTarget = ai_GetFlankTarget(oCreature, AI_RANGE_MELEE); + } + // Ok we are in a serious fight so lets not give attack of opportunities. + else oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_MELEE); + } + // If there are no enemies being attacked then lets stay back. + if(oTarget == OBJECT_INVALID) + { + if(nInMelee) + { + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + // Lets get the strongest melee opponent in melee with us. + object oTarget = ai_GetHighestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + } + // ************************** Ranged feat attacks ************************** + else if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + oTarget = ai_GetLowestCRTarget(oCreature); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + else + { + ai_SearchForHiddenCreature(oCreature, FALSE, OBJECT_INVALID, AI_RANGE_CLOSE); + return; + } + } + } + if(oTarget != OBJECT_INVALID) + { + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + // Are we too far from our master? + object oMaster = GetMaster(); + if(GetDistanceBetween(oMaster, oCreature) > AI_RANGE_LONG) + { + ActionMoveToObject(oMaster, TRUE, AI_RANGE_CLOSE); + return; + } + ai_SearchForHiddenCreature(oCreature, FALSE, OBJECT_INVALID, AI_RANGE_CLOSE); +} diff --git a/src/module/nss/ai_a_invisible.nss b/src/module/nss/ai_a_invisible.nss new file mode 100644 index 0000000..9772b32 --- /dev/null +++ b/src/module/nss/ai_a_invisible.nss @@ -0,0 +1,123 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_invisible +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to use when they are invisible. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + // Has our master told us to not use magic? + int bUseMagic = !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_EASY) + { + // *************************** SPELL TALENTS *************************** + if(ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) return; + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound, oTarget)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Melee feat attacks ************************* + // If we won't loose invisibility then ranged attacks are ok! + // ************************ RANGED ATTACKS ******************************* + if(GetHasSpellEffect(SPELL_IMPROVED_INVISIBILITY) || GetHasSpellEffect(SPELLABILITY_AS_IMPROVED_INVISIBLITY)) + { + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRTarget(oCreature); + else oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + } + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + talent tUse = GetCreatureTalentBest(TALENT_CATEGORY_HARMFUL_MELEE, 20, oCreature); + if(GetIsTalentValid(tUse)) + { + int nId = GetIdFromTalent(tUse); + if(nId == FEAT_POWER_ATTACK) { if(ai_TryPowerAttackFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_KNOCKDOWN) { if(ai_TryKnockdownFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_SMITE_EVIL) { if(ai_TrySmiteEvilFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_SMITE_GOOD) { if(ai_TrySmiteGoodFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_IMPROVED_POWER_ATTACK) { if(ai_TryImprovedPowerAttackFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_FLURRY_OF_BLOWS) { if(ai_TryFlurryOfBlowsFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_STUNNING_FIST) { if(ai_TryStunningFistFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_SAP) { if(ai_TrySapFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_DISARM) { if(ai_TryDisarmFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_KI_DAMAGE) { if(ai_TryKiDamageFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_CALLED_SHOT) { if(ai_TryCalledShotFeat(oCreature, oTarget)) return; } + } + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} + diff --git a/src/module/nss/ai_a_monk.nss b/src/module/nss/ai_a_monk.nss new file mode 100644 index 0000000..607ce4c --- /dev/null +++ b/src/module/nss/ai_a_monk.nss @@ -0,0 +1,82 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_monk +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Monk class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryWholenessOfBodyFeat(oCreature)) return; + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRTarget(oCreature); + else oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/src/module/nss/ai_a_no_cmb_mode.nss b/src/module/nss/ai_a_no_cmb_mode.nss new file mode 100644 index 0000000..1ffedb4 --- /dev/null +++ b/src/module/nss/ai_a_no_cmb_mode.nss @@ -0,0 +1,131 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_o_cmb_modes +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to not use any combat modes during combat ai. + OBJECT_SELF is the creature running the ai. + Our actions. + 1 - Get nearest enemy. + 2 - Check for healing and curing first. + 3 - Check moral if wounded and this is a simple+ battle. + 4 - Check for a magical ranged attack if not in melee and a difficult+ battle. + 5 - Check for a buff or summons if this is a difficult+ battle. + 6 - Check for a Class ability and an offensive spell if this is a simple+ battle. + 7 - Check for a physical attack. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, 0, oTarget)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + } + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryTurningTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + if(AI_DEBUG) ai_Debug("ai_a_no_modes", "78", "Check for ranged attack on weakest enemy!"); + object oTarget; + int bAlwaysAtk = !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK); + // ************************** Ranged feat attacks ************************** + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) && + !ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && + ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + // Lets pick off the weaker targets. + if(!nInMelee) + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTarget(oCreature); + } + else + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + if(AI_DEBUG) ai_Debug("ai_a_no_modes", "105", GetName(OBJECT_SELF) + " does ranged attack on weakest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + if(AI_DEBUG) ai_Debug("ai_a_no_modes", "117", "Check for melee attack on weakest enemy!"); + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee, bAlwaysAtk)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_PERCEPTION, bAlwaysAtk); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTargetForMeleeCombat(oCreature, nInMelee, bAlwaysAtk); + if(oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("ai_a_no_modes", "126", GetName(OBJECT_SELF) + " does melee attack against weakest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} + diff --git a/src/module/nss/ai_a_paladin.nss b/src/module/nss/ai_a_paladin.nss new file mode 100644 index 0000000..24520a7 --- /dev/null +++ b/src/module/nss/ai_a_paladin.nss @@ -0,0 +1,110 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_paladin +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Paladin class. + Paladins always protect their masters and face the strongest opponents first! + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, 0, oTarget)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + } + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryTurningTalent(oCreature)) return; + if(ai_TryLayOnHands(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget = OBJECT_INVALID; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Paladins ALWAYS protect their masters first! + oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Paladins face off against the strongest opponents first. + if(!nInMelee) oTarget = ai_GetHighestCRTarget(oCreature); + else oTarget = ai_GetHighestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + // Paladins ALWAYS protect their masters first! + oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + int bCheckCombat = ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK); + if(bCheckCombat) oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee, FALSE); + // If always attacking Paladins ALWAYS attack the strongest opponent. + else oTarget = ai_GetHighestCRTargetForMeleeCombat(oCreature, nInMelee); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/src/module/nss/ai_a_peaceful.nss b/src/module/nss/ai_a_peaceful.nss new file mode 100644 index 0000000..b9bd310 --- /dev/null +++ b/src/module/nss/ai_a_peaceful.nss @@ -0,0 +1,81 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: ai_a_peaceful +//////////////////////////////////////////////////////////////////////////////// + ai script mode for associates to use when they should remain out of combat. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + float fDistance = GetDistanceBetween(oCreature, oNearestEnemy); + // In Melee combat! + if(nInMelee > 0) + { + // If we are not being attacked then we should back out of combat. + if(ai_GetEnemyAttackingMe(oCreature) == OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("ai_a_peaceful", "23", GetName(oCreature) + " is moving away from " + GetName(oNearestEnemy) + + "[" + FloatToString(AI_RANGE_MELEE - fDistance + 1.0, 0, 2) + "]" + " to use a ranged weapon."); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MOVE); + // Lets move just out of melee range! + int bRun = ai_CanIMoveInCombat(oCreature); + ActionMoveAwayFromObject(oNearestEnemy, bRun, AI_RANGE_CLOSE + 2.0); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return; + } + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryImprovedExpertiseFeat(oCreature)) return; + if(ai_TryExpertiseFeat(oCreature)) return; + // Lets get the strongest melee opponent in melee with us. + object oTarget = ai_GetHighestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget == OBJECT_INVALID) oTarget = oNearestEnemy; + // Use knockdown when appropriate and the target is not immune. + if(ai_TryKnockdownFeat(oCreature, oTarget)) return; + if (ai_TryParry(oCreature)) return; + // We have tried everything to protect ourselves so the only thing left + // to do is man up and attack! + // Physical attacks are under TALENT_CATEGORY_HARMFUL_MELEE(22). + ai_DoPhysicalAttackOnNearest(oCreature, nInMelee); + return; + } + if(fDistance <= AI_RANGE_LONG) + { + if(AI_DEBUG) ai_Debug("ai_a_peaceful", "49", GetName(oCreature) + " is moving away from " + GetName(oNearestEnemy) + + "[" + FloatToString(AI_RANGE_LONG - fDistance, 0, 2) + "]" + "."); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MOVE); + // Lets move out of close range! + ActionMoveAwayFromObject(oNearestEnemy, TRUE, AI_RANGE_LONG + 2.0); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return; + } + //************************* OUT OF COMBAT ************************** + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, 0, oCreature)) return; + if(ai_TryCureConditionTalent(oCreature, 0)) return; + //************************** DEFENSIVE TALENTS *************************** + // Has our master told us to not use magic? + int bUseMagic = !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC); + if(bUseMagic) + { + // If can turn invisible then we should probably do that! + if(ai_UseTalent(oCreature, SPELL_IMPROVED_INVISIBILITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_INVISIBILITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_INVISIBILITY_SPHERE, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_SANCTUARY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_ETHEREALNESS, oCreature)) return; // Greater Sanctuary + if(ai_UseTalent(oCreature, SPELLABILITY_AS_IMPROVED_INVISIBLITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELLABILITY_AS_INVISIBILITY, oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + // Summons are powerfull and should be used as much as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_SUMMON, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_PROTECTION, nInMelee, nMaxLevel)) return; + } + // Stand and watch the battle we don't want to provoke anyone! + if(AI_DEBUG) ai_Debug("ai_a_peaceful", "80", GetName(oCreature) + " is holding here."); +} diff --git a/src/module/nss/ai_a_polymorphed.nss b/src/module/nss/ai_a_polymorphed.nss new file mode 100644 index 0000000..107e6e9 --- /dev/null +++ b/src/module/nss/ai_a_polymorphed.nss @@ -0,0 +1,70 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_polymorphed +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for polymorphed associates. + We check for abilities based on the form we are using and if we should polymorph back. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void ai_DoActions(object oCreature, int nForm) +{ + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(GetPercentageHPLoss(oCreature) <= AI_HEALTH_BLOODY) + { + //ai_Debug("ai_a_polymorphed", "24", "We are wounded and are transforming back!"); + ai_RemoveASpecificEffect(oCreature, EFFECT_TYPE_POLYMORPH); + return; + } + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // When polymorphed we turn back then check moral. + //if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget = ai_GetLowestCRTargetForMeleeCombat(oCreature, nInMelee); + // If we don't find a target then we don't want to fight anyone! + if(oTarget != OBJECT_INVALID) ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + else ai_SearchForHiddenCreature(oCreature, FALSE); +} +void main() +{ + object oCreature = OBJECT_SELF; + // Need to know who we are so we can use thier abilities. + int nForm = GetAppearanceType(oCreature); + // Check to see if we are back to our normal form?(-1 to get the actual form #) + if(nForm == GetLocalInt(oCreature, AI_NORMAL_FORM) - 1) + { + // If we are transformed back then go back to our primary ai. + ai_SetCreatureAIScript(oCreature); + DeleteLocalInt(oCreature, AI_NORMAL_FORM); + string sAI = GetLocalString(oCreature, AI_COMBAT_SCRIPT); + if(sAI == "ai_a_polymorphed" || sAI == "") sAI = "ai_a_default"; + ExecuteScript(sAI, oCreature); + } + else ai_DoActions(oCreature, nForm); +} diff --git a/src/module/nss/ai_a_ranged.nss b/src/module/nss/ai_a_ranged.nss new file mode 100644 index 0000000..477937d --- /dev/null +++ b/src/module/nss/ai_a_ranged.nss @@ -0,0 +1,129 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_ranged +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to use the ranged ai. + OBJECT_SELF is the creature running the ai. + Will attempt to use ranged weapons until surrounded. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + // Turning is basically a powerful AOE so treat it like one. + if(ai_TryTurningTalent(oCreature)) return; + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryTurningTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED)) + { + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) && + nInMelee < 3) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Lets defend master, nearest favored enemy, ranged, sneak, weakest targets. + if(!nInMelee) + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget == ai_GetRangedTarget(oCreature); + if(oTarget == OBJECT_INVALID && ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTarget(oCreature); + } + else + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE, OBJECT_INVALID, AI_RANGE_CLOSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + } + // ************************** Melee feat attacks ************************* + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + if(nInMelee) + { + oTarget = ai_GetEnemyAttackingMe(oCreature); + if(oTarget != OBJECT_INVALID) + { + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + } + } + if(oNearestEnemy != OBJECT_INVALID) + { + float fDistance = GetDistanceBetween(oCreature, oNearestEnemy); + float fRange = AI_RANGE_LONG; + if(GetIsAreaInterior(GetArea(oCreature))) fRange = AI_RANGE_CLOSE; + if(GetHasFeat(FEAT_SNEAK_ATTACK, oCreature)) fRange = AI_RANGE_CLOSE; + if(fDistance < fRange) + { + int bRun = ai_CanIMoveInCombat(oCreature); + ActionMoveAwayFromObject(oNearestEnemy, bRun, fRange - fDistance + 2.0); + } + } + else ai_SearchForHiddenCreature(oCreature, FALSE, OBJECT_INVALID, AI_RANGE_CLOSE); +} + diff --git a/src/module/nss/ai_a_ranger.nss b/src/module/nss/ai_a_ranger.nss new file mode 100644 index 0000000..179298f --- /dev/null +++ b/src/module/nss/ai_a_ranger.nss @@ -0,0 +1,96 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_ranger +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Ranger class. + Rangers will take out favored enemies first! + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) + { + oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTarget(oCreature); + } + else + { + oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + // Our master may have setup to check difficulty before we move into melee. + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_PERCEPTION, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/src/module/nss/ai_a_rogue.nss b/src/module/nss/ai_a_rogue.nss new file mode 100644 index 0000000..10e1ae0 --- /dev/null +++ b/src/module/nss/ai_a_rogue.nss @@ -0,0 +1,83 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_rogue +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Rogue class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRTarget(oCreature); + else oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/src/module/nss/ai_a_sorcerer.nss b/src/module/nss/ai_a_sorcerer.nss new file mode 100644 index 0000000..5e4a3b7 --- /dev/null +++ b/src/module/nss/ai_a_sorcerer.nss @@ -0,0 +1,75 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_sorcerer +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Sorcerer class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRTarget(oCreature); + else oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/src/module/nss/ai_a_taunter.nss b/src/module/nss/ai_a_taunter.nss new file mode 100644 index 0000000..b06fed8 --- /dev/null +++ b/src/module/nss/ai_a_taunter.nss @@ -0,0 +1,53 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: ai_a_taunter +//////////////////////////////////////////////////////////////////////////////// + ai script for creatures using defined to use the taunt skill. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryTurningTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // Taunt the nearest target! + if (ai_TryTaunt (oCreature, ai_GetNearestTargetForMeleeCombat (oCreature, nInMelee))) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + ai_DoPhysicalAttackOnLowestCR(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); +} diff --git a/src/module/nss/ai_a_wizard.nss b/src/module/nss/ai_a_wizard.nss new file mode 100644 index 0000000..dfad8c3 --- /dev/null +++ b/src/module/nss/ai_a_wizard.nss @@ -0,0 +1,77 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_wizard +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Wizard class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // ************************** CLASS FEATURES *************************** + if(ai_TrySummonFamiliarTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRTarget(oCreature); + else oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/src/module/nss/ai_ambusher.nss b/src/module/nss/ai_ambusher.nss new file mode 100644 index 0000000..829a3da --- /dev/null +++ b/src/module/nss/ai_ambusher.nss @@ -0,0 +1,100 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_ambusher +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for ambushing creatures (Any). + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + // Rule used to disable ambush if the player wants to. + if(!GetLocalInt(GetModule(), AI_RULE_AMBUSH)) + { + ExecuteScript("ai_default", oCreature); + return; + } + // If can turn invisible then we should probably do that! + if(ai_UseTalent(oCreature, SPELL_IMPROVED_INVISIBILITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_INVISIBILITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_INVISIBILITY_SPHERE, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_SANCTUARY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_ETHEREALNESS, oCreature)) return; // Greater Sanctuary + if(ai_UseTalent(oCreature, SPELLABILITY_AS_IMPROVED_INVISIBLITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELLABILITY_AS_INVISIBILITY, oCreature)) return; + // Check the battle field to see if anyone see us? + int nEnemyIndex = ai_GetNearestIndexThatSeesUs(oCreature); + // If seen, can we try to hide now? + if(nEnemyIndex) + { + // Check for an attacker and can they see through invisibility? + object oAttacker = ai_GetEnemyAttackingMe(oCreature); + int bCanSeeInvisible; + if(oAttacker != OBJECT_INVALID) + { + bCanSeeInvisible = ai_GetHasEffectType(oAttacker, EFFECT_TYPE_SEEINVISIBLE); + if(!bCanSeeInvisible) bCanSeeInvisible = ai_GetHasEffectType(oAttacker, EFFECT_TYPE_TRUESEEING); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_5_FEET, oCreature); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_10_FEET, oCreature); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_60_FEET, oCreature); + } + if(AI_DEBUG) ai_Debug("ai_ambusher", "43", "bCanSeeInvisible: " + IntToString(bCanSeeInvisible)); + if(!bCanSeeInvisible) + { + if(GetHasFeat(FEAT_HIDE_IN_PLAIN_SIGHT, oCreature)) + { + if(!GetActionMode(oCreature, ACTION_MODE_STEALTH)) + { + if(AI_DEBUG) ai_Debug("ai_ambusher", "50", GetName(oCreature) + " is using hide in plain sight!"); + ClearAllActions(TRUE); + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + return; + } + } + // Does not have hide in plain sight. + else + { + string sEnemyIndex = IntToString(nEnemyIndex); + float fEnemyDistance = GetLocalFloat(oCreature, AI_ENEMY_RANGE + sEnemyIndex); + if(AI_DEBUG) ai_Debug("ai_ambusher", "61", "fDistance: " + FloatToString(fEnemyDistance, 0, 2)); + if(fEnemyDistance >= AI_RANGE_LONG) + { + int bTried = GetLocalInt(oCreature, AI_TRIED_TO_HIDE); + if(!bTried) + { + // Move away so we can hide. + if(AI_DEBUG) ai_Debug("ai_ambusher", "68", GetName(oCreature) + " is trying to move away to hide!"); + SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + object oEnemy = GetLocalObject(oCreature, AI_ENEMY + sEnemyIndex); + ActionMoveAwayFromObject(oEnemy, TRUE, AI_RANGE_BATTLEFIELD); + SetLocalInt(oCreature, AI_TRIED_TO_HIDE, 3); + return; + } + else SetLocalInt(oCreature, AI_TRIED_TO_HIDE, GetLocalInt(oCreature, AI_TRIED_TO_HIDE) - 1); + } + // We have been seen by an enemy too close to us so drop stealth. + else SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + } + } + // The enemy can see through stealth so lets drop it. + else SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + } + // We are not in stealth mode so lets get there. + else if(!GetActionMode(oCreature, ACTION_MODE_STEALTH)) + { + // Use any hiding talents we have + if(AI_DEBUG) ai_Debug("ai_ambusher", "88", GetName(oCreature) + " is trying to hide!"); + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + SetLocalInt(oCreature, AI_TRIED_TO_HIDE, 3); + return; + } + // If we have givin up on stealth do our normal actions. + string sScript = GetLocalString(oCreature, AI_DEFAULT_SCRIPT); + if(sScript == "ai_ambusher" || sScript == "") sScript = "ai_default"; + if(AI_DEBUG) ai_Debug("ai_ambusher", "96", "sScript: " + sScript + " AI_DEFAULT_SCRIPT: " + GetLocalString(oCreature, AI_DEFAULT_SCRIPT)); + ExecuteScript(sScript, oCreature); +} diff --git a/src/module/nss/ai_barbarian.nss b/src/module/nss/ai_barbarian.nss new file mode 100644 index 0000000..69efcb4 --- /dev/null +++ b/src/module/nss/ai_barbarian.nss @@ -0,0 +1,71 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: ai_barbarian +//////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Barbarian. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oTarget; + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature)) + { + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // *************************** RANGED ATTACKS ***************************** + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) oTarget = ai_GetNearestTarget(oCreature); + else oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + } + // ***************************** MELEE ATTACKS *************************** + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/src/module/nss/ai_bard.nss b/src/module/nss/ai_bard.nss new file mode 100644 index 0000000..9dde198 --- /dev/null +++ b/src/module/nss/ai_bard.nss @@ -0,0 +1,67 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: ai_bard +//////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Bard. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryBardSongFeat(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) oTarget = ai_GetNearestTarget(oCreature); + else oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/src/module/nss/ai_cleric.nss b/src/module/nss/ai_cleric.nss new file mode 100644 index 0000000..34bd1e6 --- /dev/null +++ b/src/module/nss/ai_cleric.nss @@ -0,0 +1,68 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: ai_cleric +//////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Cleric. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryTurningTalent(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) oTarget = ai_GetNearestTarget(oCreature); + else oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/src/module/nss/ai_cntrspell.nss b/src/module/nss/ai_cntrspell.nss new file mode 100644 index 0000000..04939c9 --- /dev/null +++ b/src/module/nss/ai_cntrspell.nss @@ -0,0 +1,68 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_cntrspell +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the combat mode counter spell. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + // We are not in melee combat then we don't attack. + int bAttack = nInMelee; + if(!bAttack) + { + // If there are no casters, i.e. CLERIC or MAGES in the battle then attack. + struct stClasses stClasses = ai_GetFactionsClasses(oCreature); + if(!stClasses.CLERICS && !stClasses.MAGES) bAttack = TRUE; + } + // If we are not attacking then setup for counter spelling. + if(!bAttack) + { + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(AI_DEBUG) ai_Debug("ai_cntrspell", "29", " Counterspell Mode? " + + IntToString(GetActionMode(OBJECT_SELF, ACTION_MODE_COUNTERSPELL))); + if(!GetActionMode(oCreature, ACTION_MODE_COUNTERSPELL)) + { + object oTarget = ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER); + // We can only counter spells from a hasted caster if we are hasted as well. + if(ai_GetHasEffectType(oTarget, EFFECT_TYPE_HASTE) && + !ai_GetHasEffectType(oCreature, EFFECT_TYPE_HASTE)) + { + // If we have haste then we should cast it. + if(GetHasSpell(SPELL_HASTE, oCreature)) + { + if(AI_DEBUG) ai_Debug("ai_cntrspell", "41", "Opponent is hasted! Casting Haste."); + ActionCastSpellAtObject(SPELL_HASTE, oCreature); + ai_SetLastAction(oCreature, SPELL_HASTE); + return; + } + // If not then we need to go into normal combat. + else + { + if(AI_DEBUG) ai_Debug("ai_cntrspell", "49", "Opponent is hasted! Using ranged AI."); + ExecuteScript("ai_ranged"); + return; + } + } + if(oTarget != OBJECT_INVALID) + { + // First a good tactic for counter spelling is to be invisible. + if(ai_TryToBecomeInvisible(oCreature)) return; + // If we have attempted to become invisible or are invisible then + // it is time to counter spell. + if(AI_DEBUG) ai_Debug("ai_cntrspell", "60", "Setting Counterspell mode!"); + ActionCounterSpell(oTarget); + return; + } + } + } + if(AI_DEBUG) ai_Debug("ai_cntrspell", "66", "Situation is not good for counterspelling! Using ranged AI."); + ExecuteScript("ai_ranged"); +} diff --git a/src/module/nss/ai_coward.nss b/src/module/nss/ai_coward.nss new file mode 100644 index 0000000..b88e424 --- /dev/null +++ b/src/module/nss/ai_coward.nss @@ -0,0 +1,133 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: ai_coward +//////////////////////////////////////////////////////////////////////////////// + ai script for cowardly creatures (Any) used when they fail a moral check or + when associates are to remain out of combat. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with us. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + // If we have been healed up then get back in there! + if(ai_GetPercHPLoss(oCreature) > AI_HEALTH_WOUNDED) + { + string sDefaultCombatScript = GetLocalString(oCreature, AI_DEFAULT_SCRIPT); + SetLocalString(oCreature, AI_COMBAT_SCRIPT, sDefaultCombatScript); + ExecuteScript(sDefaultCombatScript, oCreature); + return; + } + // In Melee combat! + if(nInMelee) + { + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryImprovedExpertiseFeat(oCreature)) return; + if(ai_TryExpertiseFeat(oCreature)) return; + // Lets get the strongest melee opponent in melee with us. + object oTarget = ai_GetHighestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget == OBJECT_INVALID) oTarget = oNearestEnemy; + // Use knockdown when appropriate and the target is not immune. + if(ai_TryKnockdownFeat(oCreature, oTarget)) return; + if (ai_TryParry(oCreature)) return; + // We have tried everything to protect ourselves so the only thing left + // to do is man up and attack! + // Physical attacks are under TALENT_CATEGORY_HARMFUL_MELEE(22). + ai_DoPhysicalAttackOnNearest(oCreature, nInMelee); + return; + } + else + { + // If can turn invisible then we should probably do that! + if(ai_UseTalent(oCreature, SPELL_IMPROVED_INVISIBILITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_INVISIBILITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_INVISIBILITY_SPHERE, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_SANCTUARY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_ETHEREALNESS, oCreature)) return; // Greater Sanctuary + if(ai_UseTalent(oCreature, SPELLABILITY_AS_IMPROVED_INVISIBLITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELLABILITY_AS_INVISIBILITY, oCreature)) return; + // If we are seen by the enemy we need to move back so we can hide. + int nEnemyIndex = ai_GetNearestIndexThatSeesUs(oCreature); + if(nEnemyIndex) + { + // Check for an attacker and can they see through invisibility? + object oAttacker = ai_GetEnemyAttackingMe(oCreature); + int bCanSeeInvisible; + if(oAttacker != OBJECT_INVALID) + { + bCanSeeInvisible = ai_GetHasEffectType(oAttacker, EFFECT_TYPE_SEEINVISIBLE); + if(!bCanSeeInvisible) bCanSeeInvisible = ai_GetHasEffectType(oAttacker, EFFECT_TYPE_TRUESEEING); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_5_FEET, oCreature); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_10_FEET, oCreature); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_60_FEET, oCreature); + } + if(!bCanSeeInvisible) + { + if(GetHasFeat(FEAT_HIDE_IN_PLAIN_SIGHT, oCreature)) + { + if(!GetActionMode(oCreature, ACTION_MODE_STEALTH)) + { + if(AI_DEBUG) ai_Debug("ai_coward", "74", GetName(oCreature) + " is using hide in plain sight!"); + ClearAllActions(TRUE); + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + return; + } + } + // Does not have hide in plain sight. + else + { + string sEnemyIndex = IntToString(nEnemyIndex); + float fEnemyDistance = GetLocalFloat(oCreature, AI_ENEMY_RANGE + sEnemyIndex); + if(AI_DEBUG) ai_Debug("ai_coward", "85", "fDistance: " + FloatToString(fEnemyDistance, 0, 2)); + if(fEnemyDistance >= AI_RANGE_CLOSE) + { + int bTried = GetLocalInt(oCreature, AI_TRIED_TO_HIDE); + if(!bTried) + { + // Move away so we can hide. + if(AI_DEBUG) ai_Debug("ai_coward", "93", GetName(oCreature) + " is trying to move away to hide!"); + SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + object oEnemy = GetLocalObject(oCreature, AI_ENEMY + sEnemyIndex); + ActionMoveAwayFromObject(oEnemy, TRUE, AI_RANGE_BATTLEFIELD); + SetLocalInt(oCreature, AI_TRIED_TO_HIDE, 3); + return; + } + else SetLocalInt(oCreature, AI_TRIED_TO_HIDE, GetLocalInt(oCreature, AI_TRIED_TO_HIDE) - 1); + } + // We have been seen by an enemy near us so drop stealth. + else SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + } + } + // The enemy can see through stealth so lets drop it. + else SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + } + // We are not in stealth mode so lets get there. + else if(!GetActionMode(oCreature, ACTION_MODE_STEALTH)) + { + // Use any hiding talents we have + if(AI_DEBUG) ai_Debug("ai_coward", "113", GetName(oCreature) + " is trying to hide!"); + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + SetLocalInt(oCreature, AI_TRIED_TO_HIDE, 3); + return; + } + } + // Either we cannot go into stealth or we are in stealth so do something else. + //************************* OUT OF MELEE COMBAT ************************** + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, 0, oCreature)) return; + if(ai_TryCureConditionTalent(oCreature, 0)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //************************** DEFENSIVE TALENTS *************************** + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS)) + { + if(ai_TrySummonFamiliarTalent(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + } + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel)) return; + // Stand and watch the battle we don't want to provoke anyone! + if(AI_DEBUG) ai_Debug("ai_coward", "132", GetName(oCreature) + " is holding here."); +} diff --git a/src/module/nss/ai_default.nss b/src/module/nss/ai_default.nss new file mode 100644 index 0000000..cfe8e8f --- /dev/null +++ b/src/module/nss/ai_default.nss @@ -0,0 +1,49 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_default +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for default creatures(Any). + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** SKILL FEATURES **************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TryTurningTalent(oCreature)) return; + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS)) + { + if(ai_TrySummonFamiliarTalent(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + } + if(ai_TryPolymorphSelfFeat(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + ai_DoPhysicalAttackOnNearest(oCreature, nInMelee); +} diff --git a/src/module/nss/ai_defensive.nss b/src/module/nss/ai_defensive.nss new file mode 100644 index 0000000..15f5275 --- /dev/null +++ b/src/module/nss/ai_defensive.nss @@ -0,0 +1,48 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_defensive +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures put in to a defensive mode to protect themselves(Any). + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //**************************** SKILL FEATURES **************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TryTurningTalent(oCreature)) return; + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS)) + { + if(ai_TrySummonFamiliarTalent(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + } + //************************** DEFENSIVE TALENTS *************************** + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel)) return; + //******************** DEFENSIVE MELEE FEATS ***************************** + if(nInMelee > 0) + { + if(ai_TryImprovedExpertiseFeat(oCreature)) return; + if(ai_TryExpertiseFeat(oCreature)) return; + // Lets get the strongest melee opponent in melee with us. + object oTarget = ai_GetHighestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget == OBJECT_INVALID) oTarget = oNearestEnemy; + // Use knockdown when appropriate and the target is not immune + if(ai_TryKnockdownFeat(oCreature, oTarget)) return; + if(ai_TryParry(oCreature)) return; + } + //********************** PHYSICAL ATTACKS ******************************** + // Even in defensive mode we want to be in battle so go find someone! + ai_DoPhysicalAttackOnNearest(oCreature, nInMelee); +} diff --git a/src/module/nss/ai_dragon.nss b/src/module/nss/ai_dragon.nss new file mode 100644 index 0000000..a82362c --- /dev/null +++ b/src/module/nss/ai_dragon.nss @@ -0,0 +1,51 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_dragon +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for dragons. + OBJECT_SELF is the dragons running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + // Dragons do not flee! if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // ************************ MELEE ATTACKS ******************************** + object oTarget = ai_GetLowestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(GetDistanceBetween(oCreature, oTarget) > AI_RANGE_CLOSE) + { + // Can we do a crush attack(HD 18+)? + if(ai_TryCrushAttack(oCreature, oTarget)) return; + ai_FlyToTarget(oCreature, oTarget); + return; + } + if(ai_TryDragonBreathAttack(oCreature, nRound)) return; + ai_TryWingAttacks(oCreature); + // If we don't do a Tail sweep attack(HD 30+) then see if we can do a Tail slap(HD 12+)! + if(!ai_TryTailSweepAttack(oCreature)) ai_TryTailSlap(oCreature); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/src/module/nss/ai_druid.nss b/src/module/nss/ai_druid.nss new file mode 100644 index 0000000..95cb82b --- /dev/null +++ b/src/module/nss/ai_druid.nss @@ -0,0 +1,70 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_druid +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Druid. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** SKILL FEATURES **************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + //**************************** CLASS FEATURES **************************** + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS) && ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TryPolymorphSelfFeat(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // All else fails lets see if we have any good potions. + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Lets pick off the nearest targets. + if(!nInMelee) oTarget = ai_GetNearestTarget(oCreature); + else oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/src/module/nss/ai_fighter.nss b/src/module/nss/ai_fighter.nss new file mode 100644 index 0000000..04f4ce0 --- /dev/null +++ b/src/module/nss/ai_fighter.nss @@ -0,0 +1,65 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: ai_fighter +//////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Fighter. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange (oCreature); + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //***************** OFFENSIVE AREA OF EFFECT TALENTS ********************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + // *********************** DEFENSIVE TALENTS ***************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //******************* OFFENSIVE TARGETED TALENTS ************************* + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // *************************** RANGED ATTACKS **************************** + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) oTarget = ai_GetNearestTarget(oCreature); + else oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // **************************** MELEE ATTACKS **************************** + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryWhirlwindFeat (oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat (oCreature, nInMelee); + if (oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents (oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/src/module/nss/ai_flanker.nss b/src/module/nss/ai_flanker.nss new file mode 100644 index 0000000..20a6538 --- /dev/null +++ b/src/module/nss/ai_flanker.nss @@ -0,0 +1,102 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_flanker +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for monsters to flank the enemy and not charge into combat. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //***************** OFFENSIVE AREA OF EFFECT TALENTS ********************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + // *********************** DEFENSIVE TALENTS ***************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //******************* OFFENSIVE TARGETED TALENTS ************************* + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + //**************************** SKILL FEATURES **************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TryTurningTalent(oCreature)) return; + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS)) + { + if(ai_TrySummonFamiliarTalent(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Melee feat attacks ************************* + // Lets get the nearest target that is attacking someone besides me. We want to flank! + if(oTarget == OBJECT_INVALID) + { + if(!nInMelee) oTarget = ai_GetFlankTarget(oCreature); + // If there are few enemies then we can safely move around. + else if(nInMelee < 3 || ai_CanIMoveInCombat(oCreature)) + { + oTarget = ai_GetFlankTarget(oCreature, AI_RANGE_MELEE); + } + // Ok we are in a serious fight so lets not give attack of opportunities. + else oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_MELEE); + } + // If there are no enemies being attacked then lets stay back. + if(oTarget == OBJECT_INVALID) + { + if(nInMelee) + { + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + // Lets get the strongest melee opponent in melee with us. + object oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + } + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + oTarget = ai_GetNearestTarget(oCreature); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + else + { + ai_SearchForHiddenCreature(oCreature, FALSE, OBJECT_INVALID, AI_RANGE_CLOSE); + return; + } + } + } + if(oTarget != OBJECT_INVALID) + { + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + ai_SearchForHiddenCreature(oCreature, FALSE, OBJECT_INVALID, AI_RANGE_CLOSE); +} diff --git a/src/module/nss/ai_incorporeal.nss b/src/module/nss/ai_incorporeal.nss new file mode 100644 index 0000000..cdd20bd --- /dev/null +++ b/src/module/nss/ai_incorporeal.nss @@ -0,0 +1,83 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_incorporeal +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures that are incorporeal. + oCreature is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange (oCreature); + if (nInMelee && ai_MoralCheck (oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** SKILL FEATURES **************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TryTurningTalent(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if (!GetHasFeatEffect (FEAT_BARBARIAN_RAGE, oCreature) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if (ai_TryRangedSneakAttack (oCreature, nInMelee)) return; + string sIndex; + if (!nInMelee) oTarget = ai_GetNearestTarget(oCreature); + else oTarget = ai_GetNearestTarget (oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat (oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat (oCreature, nInMelee); + if (oTarget != OBJECT_INVALID) + { + // If we are using our hands then do a touch attack instead. + if (GetItemInSlot (INVENTORY_SLOT_RIGHTHAND) == OBJECT_INVALID) + { + if (GetItemInSlot (INVENTORY_SLOT_CWEAPON_L) != OBJECT_INVALID) + { + // Randomize so they don't appear synchronized. + float fDelay = IntToFloat(Random(2) + 1); + DelayCommand(fDelay, ActionCastSpellAtObject (769/*Shadow_Attack*/, oTarget, METAMAGIC_ANY, TRUE)); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MELEE_ATK); + SetLocalObject (oCreature, AI_ATTACKED_PHYSICAL, oTarget); + } + } + else ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/src/module/nss/ai_invisible.nss b/src/module/nss/ai_invisible.nss new file mode 100644 index 0000000..7d42b21 --- /dev/null +++ b/src/module/nss/ai_invisible.nss @@ -0,0 +1,93 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_invisible +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures(Any) that are invisible. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + // Skill, Class, Offensive AOE's, and Defensive talents. + // *************************** SPELL TALENTS *************************** + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + // ************************** CLASS FEATURES *************************** + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS)) + { + if(ai_TrySummonFamiliarTalent(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + } + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // If we won't loose invisibility then ranged attacks are ok! + // ************************ RANGED ATTACKS ******************************* + if(GetHasSpellEffect(SPELL_IMPROVED_INVISIBILITY) || GetHasSpellEffect(SPELLABILITY_AS_IMPROVED_INVISIBLITY)) + { + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) oTarget = ai_GetNearestTarget(oCreature); + else oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee)) return; + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + talent tUse = GetCreatureTalentBest(TALENT_CATEGORY_HARMFUL_MELEE, 20, oCreature); + if(GetIsTalentValid(tUse)) + { + int nId = GetIdFromTalent(tUse); + if(nId == FEAT_POWER_ATTACK) { if(ai_TryPowerAttackFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_KNOCKDOWN) { if(ai_TryKnockdownFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_SMITE_EVIL) { if(ai_TrySmiteEvilFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_SMITE_GOOD) { if(ai_TrySmiteGoodFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_IMPROVED_POWER_ATTACK) { if(ai_TryImprovedPowerAttackFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_FLURRY_OF_BLOWS) { if(ai_TryFlurryOfBlowsFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_STUNNING_FIST) { if(ai_TryStunningFistFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_SAP) { if(ai_TrySapFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_DISARM) { if(ai_TryDisarmFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_KI_DAMAGE) { if(ai_TryKiDamageFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_CALLED_SHOT) { if(ai_TryCalledShotFeat(oCreature, oTarget)) return; } + } + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/src/module/nss/ai_monk.nss b/src/module/nss/ai_monk.nss new file mode 100644 index 0000000..d6ff1b6 --- /dev/null +++ b/src/module/nss/ai_monk.nss @@ -0,0 +1,65 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_monk +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Monk. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange (oCreature); + //*************************** HEALING & CURES **************************** + if (ai_TryWholenessOfBodyFeat (oCreature)) return; + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck (oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if (!nInMelee) oTarget = ai_GetNearestTarget (oCreature); + else oTarget = ai_GetNearestTarget (oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat (oCreature, nInMelee); + if (oTarget != OBJECT_INVALID) + { + if (ai_TryMeleeTalents (oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/src/module/nss/ai_paladin.nss b/src/module/nss/ai_paladin.nss new file mode 100644 index 0000000..d45d223 --- /dev/null +++ b/src/module/nss/ai_paladin.nss @@ -0,0 +1,71 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_paladin +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Paladin. + Paladins face the strongest opponents on the battlefield first! + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryTurningTalent(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Paladins face the biggest challenges first! + if(!nInMelee) oTarget = ai_GetHighestCRTarget(oCreature); + else oTarget = ai_GetHighestCRTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + // Paladins face the biggest challenges first! + oTarget = ai_GetHighestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/src/module/nss/ai_polymorphed.nss b/src/module/nss/ai_polymorphed.nss new file mode 100644 index 0000000..9a7630a --- /dev/null +++ b/src/module/nss/ai_polymorphed.nss @@ -0,0 +1,55 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_polymorphed +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for polymorphed creatures. + We check for abilities based on the form we are using and if we should polymorph back. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void ai_DoActions(object oCreature, int nForm) +{ + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(GetPercentageHPLoss(oCreature) <= AI_HEALTH_BLOODY) + { + if(AI_DEBUG) ai_Debug("ai_polymorphed", "19", "We are wounded and are transforming back!"); + ai_RemoveASpecificEffect(oCreature, EFFECT_TYPE_POLYMORPH); + return; + } + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + // When polymorphed we turn back then check moral. + // if(nInMelee && ai_MoralCheck(oCreature)) return; + // Skill, Class, Offensive AOE's, and Defensive talents. + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + // Class and Offensive single target talents. + // *************************** SPELL TALENTS *************************** + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + // If we don't find a target then we don't want to fight anyone! + if(oTarget != OBJECT_INVALID) ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + else ai_SearchForHiddenCreature(oCreature, TRUE); +} +void main() +{ + object oCreature = OBJECT_SELF; + // Need to know who we are so we can use thier abilities. + int nForm = GetAppearanceType(oCreature); + // Check to see if we are back to our normal form?(-1 to get the actual form #) + if(nForm == GetLocalInt(oCreature, AI_NORMAL_FORM) - 1) + { + // If we are transformed back then go back to our primary ai. + ai_SetCreatureAIScript(oCreature); + DeleteLocalInt(oCreature, AI_NORMAL_FORM); + string sAI = GetLocalString(oCreature, AI_COMBAT_SCRIPT); + if(sAI == "ai_polymorphed" || sAI == "") sAI = "ai_default"; + ExecuteScript(sAI, oCreature); + } + else ai_DoActions(oCreature, nForm); +} diff --git a/src/module/nss/ai_ranged.nss b/src/module/nss/ai_ranged.nss new file mode 100644 index 0000000..3a46228 --- /dev/null +++ b/src/module/nss/ai_ranged.nss @@ -0,0 +1,116 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_ranged +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for monsters to use the ranged ai. + OBJECT_SELF is the creature running the ai. + Will attempt to use ranged weapons/spells until surrounded. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + // Check for moral and get the maximum spell level we should use. + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** SKILL FEATURES **************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TryTurningTalent(oCreature)) return; + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS)) + { + if(ai_TrySummonFamiliarTalent(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + } + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + // ************************** CLASS FEATURES ******************************* + if(ai_TryTurningTalent(oCreature)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Ranged feat attacks ************************** + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) && + (nInMelee < 3 || ai_GetEnemyAttackingMe(oCreature) == OBJECT_INVALID)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Lets pick off the ranged then nearest targets. + if(!nInMelee) + { + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget == ai_GetRangedTarget(oCreature); + if(oTarget == OBJECT_INVALID && ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTarget(oCreature); + } + else + { + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE, OBJECT_INVALID, AI_RANGE_CLOSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + if(nInMelee) + { + oTarget = ai_GetEnemyAttackingMe(oCreature); + if(oTarget != OBJECT_INVALID) + { + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + } + } + if(oNearestEnemy != OBJECT_INVALID) + { + float fDistance = GetDistanceBetween(oCreature, oNearestEnemy); + float fRange = AI_RANGE_LONG; + if(GetHasFeat(FEAT_SNEAK_ATTACK, oCreature)) fRange = AI_RANGE_CLOSE; + if(fDistance < fRange) + { + int bRun = ai_CanIMoveInCombat(oCreature); + ActionMoveAwayFromObject(oNearestEnemy, bRun, fRange - fDistance + 2.0); + } + } + else ai_SearchForHiddenCreature(oCreature, FALSE, OBJECT_INVALID, AI_RANGE_CLOSE); +} + diff --git a/src/module/nss/ai_ranger.nss b/src/module/nss/ai_ranger.nss new file mode 100644 index 0000000..5878cfb --- /dev/null +++ b/src/module/nss/ai_ranger.nss @@ -0,0 +1,79 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_ranger +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Ranger. + Need to add ---> Rangers will take out favored enemies first! + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** SKILL FEATURES **************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + //**************************** CLASS FEATURES **************************** + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS) && ai_TrySummonAnimalCompanionTalent(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) + { + oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTarget(oCreature); + } + else + { + oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/src/module/nss/ai_rogue.nss b/src/module/nss/ai_rogue.nss new file mode 100644 index 0000000..81c4500 --- /dev/null +++ b/src/module/nss/ai_rogue.nss @@ -0,0 +1,66 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_rogue +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Rogue. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange (oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck (oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if (ai_TryRangedSneakAttack (oCreature, nInMelee)) return; + oTarget = ai_GetNearestTarget (oCreature); + if(oTarget != OBJECT_INVALID) + { + if (ai_TryRapidShotFeat (oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if (ai_TrySneakAttack (oCreature, nInMelee)) return; + oTarget = ai_GetNearestTargetForMeleeCombat (oCreature, nInMelee); + if (oTarget != OBJECT_INVALID) + { + if (ai_TryMeleeTalents (oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/src/module/nss/ai_shadow.nss b/src/module/nss/ai_shadow.nss new file mode 100644 index 0000000..3d6419f --- /dev/null +++ b/src/module/nss/ai_shadow.nss @@ -0,0 +1,77 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_shadow +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures that are incorporeal. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + // Shadows do not flee! if(nInMelee && ai_MoralCheck()) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + string sIndex; + if(!nInMelee) oTarget = ai_GetNearestTarget(oCreature); + else oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + // If we are using our hands then do a touch attack instead. + if(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND) == OBJECT_INVALID) + { + if(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L) != OBJECT_INVALID) + { + // Randomize so they don't appear synchronized. + float fDelay = IntToFloat(Random(2) + 1); + DelayCommand(fDelay, ActionCastSpellAtObject (769/*Shadow_Attack*/, oTarget, METAMAGIC_ANY, TRUE)); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MELEE_ATK); + SetLocalObject (oCreature, AI_ATTACKED_PHYSICAL, oTarget); + } + } + else ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/src/module/nss/ai_sorcerer.nss b/src/module/nss/ai_sorcerer.nss new file mode 100644 index 0000000..f1fdcc3 --- /dev/null +++ b/src/module/nss/ai_sorcerer.nss @@ -0,0 +1,61 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_sorcerer +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Sorcerer. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************* OFFENSIVE TARGETED TALENTS *********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************** RANGED ATTACKS ***************************** + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) oTarget = ai_GetNearestTarget(oCreature); + else oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE, OBJECT_INVALID, AI_RANGE_CLOSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee, FALSE); + // I have a target now lets see if we want to move in! + if(oTarget != OBJECT_INVALID) ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + else ai_SearchForHiddenCreature(oCreature, TRUE, OBJECT_INVALID, AI_RANGE_CLOSE); +} diff --git a/src/module/nss/ai_taunter.nss b/src/module/nss/ai_taunter.nss new file mode 100644 index 0000000..825d025 --- /dev/null +++ b/src/module/nss/ai_taunter.nss @@ -0,0 +1,78 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: ai_taunter +//////////////////////////////////////////////////////////////////////////////// + ai script for creatures using defined to use the taunt skill. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange (oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck (oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** SKILL FEATURES **************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TryTurningTalent(oCreature)) return; + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS)) + { + if(ai_TrySummonFamiliarTalent(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + } + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // *************************** RANGED ATTACKS ***************************** + // We use a bow when we are not in melee, or only 1 enemy with PBS. + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if (!nInMelee) oTarget = ai_GetNearestTarget (oCreature); + else oTarget = ai_GetNearestTarget (oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ***************************** MELEE ATTACKS *************************** + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat (oCreature, nInMelee); + if (oTarget != OBJECT_INVALID) + { + if (ai_TryTaunt (oCreature, oTarget)) return; + if (ai_TryMeleeTalents (oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/src/module/nss/ai_wizard.nss b/src/module/nss/ai_wizard.nss new file mode 100644 index 0000000..6baa4c8 --- /dev/null +++ b/src/module/nss/ai_wizard.nss @@ -0,0 +1,63 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_wizard +//////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Wizard. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + // ************************** CLASS FEATURES **************************** + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS) && ai_TrySummonFamiliarTalent(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************* OFFENSIVE TARGETED TALENTS *********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************** RANGED ATTACKS ***************************** + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) oTarget = ai_GetNearestTarget(oCreature); + else oTarget = ai_GetNearestTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE, OBJECT_INVALID, AI_RANGE_CLOSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee, TRUE); + // I have a target now lets see if we want to move in! + if(oTarget != OBJECT_INVALID) ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + else ai_SearchForHiddenCreature(oCreature, TRUE, OBJECT_INVALID, AI_RANGE_CLOSE); +} diff --git a/src/module/nss/bag_despawn.nss b/src/module/nss/bag_despawn.nss new file mode 100644 index 0000000..dcf69af --- /dev/null +++ b/src/module/nss/bag_despawn.nss @@ -0,0 +1,9 @@ +void main() +{ +object oObject = GetFirstItemInInventory(); +if (!GetIsObjectValid(oObject)) + { + SetPlotFlag(OBJECT_SELF,FALSE); + DestroyObject(OBJECT_SELF); + } +} diff --git a/src/module/nss/bank_cash_bond.nss b/src/module/nss/bank_cash_bond.nss new file mode 100644 index 0000000..ddeff8b --- /dev/null +++ b/src/module/nss/bank_cash_bond.nss @@ -0,0 +1,11 @@ +#include "inc_mod_constant" +void main() + { + object oPC = GetPCSpeaker(); + string sTag; + int iGold = GetCampaignInt(CAMPAIGN,"Bank"+GetName(oPC),oPC); + GiveGoldToCreature(oPC,iGold); + DeleteCampaignVariable(CAMPAIGN,"Bank"+GetName(oPC),oPC); + if (EXPORT_CHARACTERS) + ExportSingleCharacter(oPC); + } diff --git a/src/module/nss/bank_deposit.nss b/src/module/nss/bank_deposit.nss new file mode 100644 index 0000000..05b2666 --- /dev/null +++ b/src/module/nss/bank_deposit.nss @@ -0,0 +1,18 @@ +#include "inc_mod_constant" +void main() + { + object oPC = GetPCSpeaker(); + int iGold = GetGold(oPC); + int iBank; + if (iGold) + { + AssignCommand(oPC,TakeGoldFromCreature(iGold,oPC,TRUE)); + iBank = GetCampaignInt(CAMPAIGN,"Bank"+GetName(oPC),oPC); + if (iBank) + iGold += iBank; + SetCampaignInt(CAMPAIGN,"Bank"+GetName(oPC),iGold,oPC); + SendMessageToPC(oPC,IntToString(iGold) + " gold stored in bank."); + if (EXPORT_CHARACTERS) + ExportSingleCharacter(oPC); + } + } diff --git a/src/module/nss/bank_has_bond.nss b/src/module/nss/bank_has_bond.nss new file mode 100644 index 0000000..f1e0b2c --- /dev/null +++ b/src/module/nss/bank_has_bond.nss @@ -0,0 +1,8 @@ +#include "inc_mod_constant" +int StartingConditional() + { + object oPC = GetPCSpeaker(); + if (GetCampaignInt(CAMPAIGN,"Bank"+GetName(oPC),oPC) > 0) + return TRUE; + return FALSE; + } diff --git a/src/module/nss/bank_has_gold.nss b/src/module/nss/bank_has_gold.nss new file mode 100644 index 0000000..d1ba743 --- /dev/null +++ b/src/module/nss/bank_has_gold.nss @@ -0,0 +1,6 @@ +int StartingConditional() + { + if (GetGold(GetPCSpeaker())>0) + return TRUE; + return FALSE; + } diff --git a/src/module/nss/checkskin.nss b/src/module/nss/checkskin.nss new file mode 100644 index 0000000..e5a28b3 --- /dev/null +++ b/src/module/nss/checkskin.nss @@ -0,0 +1,20 @@ +void main() +{ +object oPC = GetExitingObject(); +if (!GetIsPC(oPC)) + return; +object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC); +if (!GetIsObjectValid(oSkin)) + { + AssignCommand(oPC,ClearAllActions()); + AssignCommand(oPC,ActionEquipItem(CreateItemOnObject("pcskin",oPC),INVENTORY_SLOT_CARMOUR)); + } +// Sometimes an odd PC Skin makes its way into the PCs inventory DESTROY IT. +object oItem = GetFirstItemInInventory(oPC); +while (GetIsObjectValid(oItem)) + { + if (GetBaseItemType(oItem) == BASE_ITEM_CREATUREITEM) + DestroyObject(oItem); + oItem = GetNextItemInInventory(oPC); + } +} diff --git a/src/module/nss/conv_climbdown.nss b/src/module/nss/conv_climbdown.nss new file mode 100644 index 0000000..d99f5d9 --- /dev/null +++ b/src/module/nss/conv_climbdown.nss @@ -0,0 +1,7 @@ +#include "inc_misc_tools" +void main() + { + object oPC = GetPCSpeaker(); + object oDest = GetLocalObject(OBJECT_SELF,"Dest"); + AssignCommand(oPC,Transition(oDest)); + } diff --git a/src/module/nss/conv_hasrope.nss b/src/module/nss/conv_hasrope.nss new file mode 100644 index 0000000..2137f70 --- /dev/null +++ b/src/module/nss/conv_hasrope.nss @@ -0,0 +1,10 @@ +int StartingConditional() + { + object oPC = GetPCSpeaker(); + object oRope = GetItemPossessedBy(oPC,"rdg_rope"); + object oRopeClimbing = GetItemPossessedBy(oPC,"misca055"); + if (GetIsObjectValid(oRope) + || GetIsObjectValid(oRopeClimbing)) + return TRUE; + return FALSE; + } diff --git a/src/module/nss/conv_isleader.nss b/src/module/nss/conv_isleader.nss new file mode 100644 index 0000000..7743e59 --- /dev/null +++ b/src/module/nss/conv_isleader.nss @@ -0,0 +1,4 @@ +int StartingConditional() + { + return (GetFactionLeader(GetPCSpeaker()) == GetPCSpeaker()); + } diff --git a/src/module/nss/conv_issafe.nss b/src/module/nss/conv_issafe.nss new file mode 100644 index 0000000..5f4633f --- /dev/null +++ b/src/module/nss/conv_issafe.nss @@ -0,0 +1,4 @@ +int StartingConditional() +{ + return GetLocalInt(OBJECT_SELF,"Safe"); +} diff --git a/src/module/nss/conv_jumpdown.nss b/src/module/nss/conv_jumpdown.nss new file mode 100644 index 0000000..28e037e --- /dev/null +++ b/src/module/nss/conv_jumpdown.nss @@ -0,0 +1,9 @@ +#include "inc_misc_tools" +void main() + { + int iDanger = GetLocalInt(OBJECT_SELF,"Danger"); + int iReflex = GetLocalInt(OBJECT_SELF,"Reflex"); + int iDepth = GetLocalInt(OBJECT_SELF,"Dice"); + object oDest = GetLocalObject(OBJECT_SELF,"Dest"); + TransitionPit(GetPCSpeaker(),FALSE,TRUE,iReflex,iDepth,OBJECT_SELF,oDest); + } diff --git a/src/module/nss/conv_junkcond.nss b/src/module/nss/conv_junkcond.nss new file mode 100644 index 0000000..4ed8d44 --- /dev/null +++ b/src/module/nss/conv_junkcond.nss @@ -0,0 +1,4 @@ +int StartingConditional() + { + return GetIsObjectValid(GetFirstItemInInventory(GetObjectByTag("JunkBox"))); + } diff --git a/src/module/nss/conv_sell_loot.nss b/src/module/nss/conv_sell_loot.nss new file mode 100644 index 0000000..f04d158 --- /dev/null +++ b/src/module/nss/conv_sell_loot.nss @@ -0,0 +1,39 @@ +#include "inc_item_tools" +int SellItems(object oBox) + { + object oItem = GetFirstItemInInventory(oBox); + int iGold,iSell; + while(GetIsObjectValid(oItem)) + { + if (!GetPlotFlag(oItem) && !GetStolenFlag(oItem)) + { + if (GetIsWeapon(oItem) || GetIsArmor(oItem)) + { + if (!GetIsAmmo(oItem)) + iSell = GetTotalEnchantmentValue(oItem); + else + iSell = GetGoldPieceValue(oItem); //Cludge for ammo + } + else + iSell = GetGoldPieceValue(oItem); + iGold += iSell; + DestroyObject(oItem); + } + oItem = GetNextItemInInventory(oBox); + } + return iGold; + } + +void main() + { + object oBox = GetObjectByTag("JunkBox"); + int iGold = SellItems(oBox); + object oLeader = GetPCSpeaker(); + int iBargin = GetHighestPartySkill(oLeader,SKILL_PERSUADE); + iBargin += GetHighestPartySkill(oLeader,SKILL_APPRAISE); + if (iBargin > 40) + iBargin = 40; + iBargin += 50; // For a total of 50% to 90% of base value. + iGold = (iGold * iBargin) / 100; + GiveGoldToCreature(oLeader,iGold); + } diff --git a/src/module/nss/conv_store1.nss b/src/module/nss/conv_store1.nss new file mode 100644 index 0000000..956d414 --- /dev/null +++ b/src/module/nss/conv_store1.nss @@ -0,0 +1,10 @@ +void main() + { + object oPC = GetPCSpeaker(); + int iBargin = GetSkillRank(SKILL_APPRAISE,oPC) + GetSkillRank(SKILL_PERSUADE,oPC); + object oStore = GetNearestObjectByTag(GetTag(OBJECT_SELF)+"_Store"); + if (iBargin > 40) + iBargin = 40; + OpenStore(GetObjectByTag("ArmorNWeapons"),oPC,0,iBargin); + } + diff --git a/src/module/nss/conv_store2.nss b/src/module/nss/conv_store2.nss new file mode 100644 index 0000000..91ce34a --- /dev/null +++ b/src/module/nss/conv_store2.nss @@ -0,0 +1,9 @@ +void main() + { + object oPC = GetPCSpeaker(); + int iBargin = GetSkillRank(SKILL_APPRAISE,oPC) + GetSkillRank(SKILL_PERSUADE,oPC); + object oStore = GetNearestObjectByTag(GetTag(OBJECT_SELF)+"_Store"); + if (iBargin > 40) + iBargin = 40; + OpenStore(GetObjectByTag("Clothes"),oPC,0,iBargin); + } diff --git a/src/module/nss/conv_store3.nss b/src/module/nss/conv_store3.nss new file mode 100644 index 0000000..f3ceea5 --- /dev/null +++ b/src/module/nss/conv_store3.nss @@ -0,0 +1,10 @@ +void main() + { + object oPC = GetPCSpeaker(); + int iBargin = GetSkillRank(SKILL_APPRAISE,oPC) + GetSkillRank(SKILL_PERSUADE,oPC); + object oStore = GetNearestObjectByTag(GetTag(OBJECT_SELF)+"_Store"); + if (iBargin > 40) + iBargin = 40; + OpenStore(GetObjectByTag("GemsNJewerlry"),oPC,0,iBargin); + } + diff --git a/src/module/nss/conv_store4.nss b/src/module/nss/conv_store4.nss new file mode 100644 index 0000000..c77a4af --- /dev/null +++ b/src/module/nss/conv_store4.nss @@ -0,0 +1,8 @@ +void main() + { + object oPC = GetPCSpeaker(); + int iBargin = GetSkillRank(SKILL_APPRAISE,oPC) + GetSkillRank(SKILL_PERSUADE,oPC); + if (iBargin > 40) + iBargin = 40; + OpenStore(GetObjectByTag("BooksNScrolls"),oPC,0,iBargin); + } diff --git a/src/module/nss/conv_store5.nss b/src/module/nss/conv_store5.nss new file mode 100644 index 0000000..8894f6a --- /dev/null +++ b/src/module/nss/conv_store5.nss @@ -0,0 +1,9 @@ +void main() + { + object oPC = GetPCSpeaker(); + int iBargin = GetSkillRank(SKILL_APPRAISE,oPC) + GetSkillRank(SKILL_PERSUADE,oPC); + object oStore = GetNearestObjectByTag(GetTag(OBJECT_SELF)+"_Store"); + if (iBargin > 40) + iBargin = 40; + OpenStore(GetObjectByTag("Potions"),oPC,0,iBargin); + } diff --git a/src/module/nss/conv_store6.nss b/src/module/nss/conv_store6.nss new file mode 100644 index 0000000..1aa2c04 --- /dev/null +++ b/src/module/nss/conv_store6.nss @@ -0,0 +1,9 @@ +void main() + { + object oPC = GetPCSpeaker(); + int iBargin = GetSkillRank(SKILL_APPRAISE,oPC) + GetSkillRank(SKILL_PERSUADE,oPC); + object oStore = GetNearestObjectByTag(GetTag(OBJECT_SELF)+"_Store"); + if (iBargin > 40) + iBargin = 40; + OpenStore(GetObjectByTag("MiscMagic"),oPC,0,iBargin); + } diff --git a/src/module/nss/conv_store7.nss b/src/module/nss/conv_store7.nss new file mode 100644 index 0000000..d063390 --- /dev/null +++ b/src/module/nss/conv_store7.nss @@ -0,0 +1,8 @@ +void main() + { + object oPC = GetPCSpeaker(); + int iBargin = GetSkillRank(SKILL_APPRAISE,oPC) + GetSkillRank(SKILL_PERSUADE,oPC); + if (iBargin > 40) + iBargin = 40; + OpenStore(GetObjectByTag("WandsNStaves"),oPC,0,iBargin); + } diff --git a/src/module/nss/conv_store8.nss b/src/module/nss/conv_store8.nss new file mode 100644 index 0000000..ddb683f --- /dev/null +++ b/src/module/nss/conv_store8.nss @@ -0,0 +1,9 @@ +void main() + { + object oPC = GetPCSpeaker(); + int iBargin = GetSkillRank(SKILL_APPRAISE,oPC) + GetSkillRank(SKILL_PERSUADE,oPC); + if (iBargin > 40) + iBargin = 40; + OpenStore(GetObjectByTag("Crafting"),oPC,0,iBargin); + } + diff --git a/src/module/nss/conv_takerope.nss b/src/module/nss/conv_takerope.nss new file mode 100644 index 0000000..80177f4 --- /dev/null +++ b/src/module/nss/conv_takerope.nss @@ -0,0 +1,9 @@ +void main() + { + object oPC = GetPCSpeaker(); + object oRope = GetLocalObject(OBJECT_SELF,"Rope"); + DestroyObject(oRope); + DeleteLocalObject(OBJECT_SELF,"Rope"); + DeleteLocalInt(OBJECT_SELF,"Safe"); + CreateItemOnObject("rdg_rope",oPC); + } diff --git a/src/module/nss/conv_userope.nss b/src/module/nss/conv_userope.nss new file mode 100644 index 0000000..893482a --- /dev/null +++ b/src/module/nss/conv_userope.nss @@ -0,0 +1,25 @@ +#include "inc_misc_tools" +// This script is used by the pits created by "CreatePit" function +void main() + { + object oPC = GetPCSpeaker(); + object oDest = GetLocalObject(OBJECT_SELF,"Dest"); + if (!GetIsObjectValid(oDest)) + { + oDest = DetermineDestination(TRUE); + if (!GetIsObjectValid(oDest)) // This should NEVER happen but it seems it is. Destroy the pit if the destination is invalid. + { + DestroyObject(OBJECT_SELF); + return; + } + } + object oRope = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_rope_used",GetLocation(oDest),TRUE); + // LINK THE ROPE TRANSITION + SetLocalInt(OBJECT_SELF,"Safe",TRUE);// Used in Pit conversation + LinkTransitions(oRope,OBJECT_SELF); //Creates the actual link. + LinkTransitions(oDest,OBJECT_SELF); + SetLocalObject(OBJECT_SELF,"Rope",oRope); + if (GetIsObjectValid(GetItemPossessedBy(oPC,"misca055"))) + return; + DestroyObject(GetItemPossessedBy(oPC,"rdg_rope")); + } diff --git a/src/module/nss/doc_instructions.nss b/src/module/nss/doc_instructions.nss new file mode 100644 index 0000000..8fd94ce --- /dev/null +++ b/src/module/nss/doc_instructions.nss @@ -0,0 +1,68 @@ +/* + The purpose of this module is to be able to quickly set up a random dungeon +with no real purpose or goal other than to have fun. There is no end game quest +or goal it's completely open ended. The encounter tables are designed to give +a party a good 4 or 5 encounters before having to rest, of course this assuption +is made that the party will consist of a balanced group of 4 to 6 members. + + The dungeon is randomly generated as the PCs move thru it. It operates on a +simple premise of 90% of the things in a dungeon are controlled by waypoints. +if a waypoint of a specific type is placed a object of a certain type is placed. + + Traps and Secret Door Triggers cannot be placed dynamically so therefore +numerous traps and triggers must be placed so that the system can randomly +deactivate them. In all seriousness each area should have about 10+ traps in it +so as to allow for a greater amount of randomness. Detect mode MUST be activated +to find secret doors/traps in the dungeon. + +The constants for dungeon generation is handled by a file called +"inc_mod_constant". By adjusting this file you can determine how often many +things in the game appear and not appear. Example since we already touched on +traps, the default chance of a trap being present is 5% Therefore for every 20 +traps in your module the PCs will only (on average) encounter 1. The other 19 +are destroyed by the game engine. + +Required naming conventions (ID Codes): +Areas : Area### ### is a unique 3 digit ID code that no other AREA has. + Example Area001, Area002, Area003. + +RDG Toys: + +Doors: 2 Types of Doors have been provided 1 one the area transition door the + other is a generic door. The area transition door is the workhorse of the + RDG it randomly links itself to another door of it's type in the dungeon. + The generic door is a NON-area transition door. These doors are listed under + CUSTOM TILE-SET SPECIFIC DOORS. + + Earlier versions of the RDG required unique tagging of the doors this is no + longer a requirement. + +Traps: A custom trap has been suppled called "Trap" under generic triggers - + custom. This trap generates a random trap effect. From 1: Weak (might get a + mage's attention) to 5 Fatal (Our warrior with 18 CON is a pile of goo!) + ID OPTIONAL. + +Monster Spawn: A custom waypoint "Mon_" will spawn a encounter for the + party +/- 4 levels of the parties level. This spawn should be used in rooms + as it has a higher chance of generating an encounter than Wan_. Note a + safety feature rerolls encounters that would be greater than 1.5 x the level + of the party. Preventing a level 1 party from getting a level 5 encounter. + While allowing a level 10 party to get a level 14 encounter. ID OPTIONAL. + +Secret Doors and Hidden Treasure Spawns: A custom waypoint has been supplied for + each of these types of spawns. Just drag and drop. Modifying the Tags on + these waypoints will break them. The DCs for discovering this items is based + on average PC level. NO ID. + +Decoration: A custom waypoint called "Decor" is included. This will create misc. + debris within the dungeon making each room unique (in theory). + +Dungeon Aging: You can now decorate a dungeon room the way you would like to + have seen it "originally". Simply turn off the static box on each placeable + and the placeable becomes ageable. The party will find the room as you + decorated but with some exceptions. Items will be missing or broken. This + allows you the creator to make rooms that PCs can wonder what it was + originally for as they explore making it a more entertaining experience. +*/ + + diff --git a/src/module/nss/door_break.nss b/src/module/nss/door_break.nss new file mode 100644 index 0000000..1188ad7 --- /dev/null +++ b/src/module/nss/door_break.nss @@ -0,0 +1,49 @@ +#include "inc_misc_tools" +/* +This script handles a PC attemping to break in a door (STR Check). +The DC of this door is the Fortitude Save of the Door + the party average level. +This will mean that as PCs progress it will be harder and harder to bash open +the doors on the first try. + +If the door is NOT bashed open on the first try the door notifies all nearby +monsters of the PCs beating on the door. + +If the door is bashed on the first attempt the monsters will be none the wiser. + +An unlocked door will be immediately opened with no check. +*/ +void main() + { + if (GetPlotFlag()) + return; + object oDoor = OBJECT_SELF; + object oAttacker = GetLastAttacker(); + object oWeapon = GetLastWeaponUsed(oAttacker); + int iDC,iRoll,iPassed; + string sDC,sRoll; + if (!GetWeaponRanged(oWeapon) || oWeapon == OBJECT_INVALID) + { + if (GetLocked(oDoor)) + { + iDC = GetLocalInt(oDoor,"Bash"); + if (!iDC) + { + iDC = GetFortitudeSavingThrow(OBJECT_SELF); + SetLocalInt(oDoor,"Bash",iDC); + } + iRoll = AbilityCheck(oAttacker,ABILITY_STRENGTH,iDC); + sRoll = IntToString(iRoll); + sDC = IntToString(iDC); + } + else + iRoll = TRUE; + } + if (iRoll) + { + SetLocked(oDoor,FALSE); + ActionOpenDoor(oDoor); + AssignCommand(oAttacker,ClearAllActions(TRUE)); + } + else + SpeakString("NW_I_WAS_ATTACKED", TALKVOLUME_SILENT_SHOUT); + } diff --git a/src/module/nss/door_transition.nss b/src/module/nss/door_transition.nss new file mode 100644 index 0000000..fa7da0c --- /dev/null +++ b/src/module/nss/door_transition.nss @@ -0,0 +1,5 @@ +// This is the work horse of the Random Dungeon Generator. +void main() + { + ExecuteScript("rdg_transition",OBJECT_SELF);// Moved functionality to rdg_transition. + } diff --git a/src/module/nss/door_ude.nss b/src/module/nss/door_ude.nss new file mode 100644 index 0000000..4760ff5 --- /dev/null +++ b/src/module/nss/door_ude.nss @@ -0,0 +1,38 @@ +//:://///////////////////////////////////////////// +//:: Custom User Defined Event +//:: FileName +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + +*/ +//::////////////////////////////////////////////// +//:: Created By: +//:: Created On: +//::////////////////////////////////////////////// + +void main() + { + int iUDE = GetUserDefinedEventNumber(); + + if (iUDE == 1) + ActionOpenDoor(OBJECT_SELF); + else if (iUDE == 2) + ActionCloseDoor(OBJECT_SELF); + else if (iUDE == 3) + SetLocked(OBJECT_SELF,FALSE); + else if (iUDE == 4) + SetLocked(OBJECT_SELF,TRUE); + else if (iUDE == 5) + { + if (GetIsOpen(OBJECT_SELF)) + ActionCloseDoor(OBJECT_SELF); + SetLocked(OBJECT_SELF,TRUE); + } + else if (iUDE == 6) + { + SetLocked(OBJECT_SELF,FALSE); + if (!GetIsOpen(OBJECT_SELF)) + ActionOpenDoor(OBJECT_SELF); + } + } diff --git a/src/module/nss/figurine_death.nss b/src/module/nss/figurine_death.nss new file mode 100644 index 0000000..b5eb85a --- /dev/null +++ b/src/module/nss/figurine_death.nss @@ -0,0 +1,9 @@ +void main() + { + string sTag = GetTag(OBJECT_SELF); + location lLoc = GetLocation(OBJECT_SELF); + object oItem = GetItemPossessedBy(OBJECT_SELF,sTag); + object oNew = CopyObject(oItem,lLoc); + DestroyObject(oItem); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_IMP_UNSUMMON),lLoc,3.0); + } diff --git a/src/module/nss/hif_onacquireite.nss b/src/module/nss/hif_onacquireite.nss new file mode 100644 index 0000000..e000512 --- /dev/null +++ b/src/module/nss/hif_onacquireite.nss @@ -0,0 +1,13 @@ +// mod_aquire,prc_onaquire +///////////////////////////////////////////////////////////////////// +// +// This script has been auto-generated by HakInstaller to call +// multiple handlers for the onacquireitem event. +// +///////////////////////////////////////////////////////////////////// + +void main() +{ + ExecuteScript("mod_aquire", OBJECT_SELF); + ExecuteScript("prc_onaquire", OBJECT_SELF); +} diff --git a/src/module/nss/hif_onactivateit.nss b/src/module/nss/hif_onactivateit.nss new file mode 100644 index 0000000..6060a76 --- /dev/null +++ b/src/module/nss/hif_onactivateit.nss @@ -0,0 +1,13 @@ +// mod_onactivate,prc_onactivate +///////////////////////////////////////////////////////////////////// +// +// This script has been auto-generated by HakInstaller to call +// multiple handlers for the onactivateitem event. +// +///////////////////////////////////////////////////////////////////// + +void main() +{ + ExecuteScript("mod_onactivate", OBJECT_SELF); + ExecuteScript("prc_onactivate", OBJECT_SELF); +} diff --git a/src/module/nss/hif_onclientente.nss b/src/module/nss/hif_onclientente.nss new file mode 100644 index 0000000..4384eac --- /dev/null +++ b/src/module/nss/hif_onclientente.nss @@ -0,0 +1,25 @@ +// mod_client_enter,prc_onenter +///////////////////////////////////////////////////////////////////// +// +// This script has been auto-generated by HakInstaller to call +// multiple handlers for the oncliententer event. +// +///////////////////////////////////////////////////////////////////// + +void main() +{ + ExecuteScript("mod_client_enter", OBJECT_SELF); + ExecuteScript("prc_onenter", OBJECT_SELF); + int nPCCount; + object oPC = GetFirstPC(); + while(GetIsObjectValid(oPC)) + { + nPCCount++; + oPC = GetNextPC(); + } + if(nPCCount > 0) + { + int nHenchmen = 5/nPCCount; + SetMaxHenchmen(nHenchmen); + } +} diff --git a/src/module/nss/hif_onheartbeat.nss b/src/module/nss/hif_onheartbeat.nss new file mode 100644 index 0000000..37c8c3c --- /dev/null +++ b/src/module/nss/hif_onheartbeat.nss @@ -0,0 +1,13 @@ +// mod_heartbeat,prc_onheartbeat +///////////////////////////////////////////////////////////////////// +// +// This script has been auto-generated by HakInstaller to call +// multiple handlers for the onheartbeat event. +// +///////////////////////////////////////////////////////////////////// + +void main() +{ + ExecuteScript("mod_heartbeat", OBJECT_SELF); + ExecuteScript("prc_onheartbeat", OBJECT_SELF); +} diff --git a/src/module/nss/hif_onmoduleload.nss b/src/module/nss/hif_onmoduleload.nss new file mode 100644 index 0000000..e26ebdf --- /dev/null +++ b/src/module/nss/hif_onmoduleload.nss @@ -0,0 +1,14 @@ +// mod_onload,prc_onmodload +///////////////////////////////////////////////////////////////////// +// +// This script has been auto-generated by HakInstaller to call +// multiple handlers for the onmoduleload event. +// +///////////////////////////////////////////////////////////////////// + +void main() +{ + ExecuteScript("mod_onload", OBJECT_SELF); + ExecuteScript("prc_onmodload", OBJECT_SELF); + SetMaxHenchmen(5); +} diff --git a/src/module/nss/hif_onplayerdeat.nss b/src/module/nss/hif_onplayerdeat.nss new file mode 100644 index 0000000..6c00c67 --- /dev/null +++ b/src/module/nss/hif_onplayerdeat.nss @@ -0,0 +1,13 @@ +// mod_death,prc_ondeath +///////////////////////////////////////////////////////////////////// +// +// This script has been auto-generated by HakInstaller to call +// multiple handlers for the onplayerdeath event. +// +///////////////////////////////////////////////////////////////////// + +void main() +{ + ExecuteScript("mod_death", OBJECT_SELF); + ExecuteScript("prc_ondeath", OBJECT_SELF); +} diff --git a/src/module/nss/hif_onplayerequi.nss b/src/module/nss/hif_onplayerequi.nss new file mode 100644 index 0000000..9a9f478 --- /dev/null +++ b/src/module/nss/hif_onplayerequi.nss @@ -0,0 +1,13 @@ +// mod_pc_equip,prc_equip +///////////////////////////////////////////////////////////////////// +// +// This script has been auto-generated by HakInstaller to call +// multiple handlers for the onplayerequipitem event. +// +///////////////////////////////////////////////////////////////////// + +void main() +{ + ExecuteScript("mod_pc_equip", OBJECT_SELF); + ExecuteScript("prc_equip", OBJECT_SELF); +} diff --git a/src/module/nss/hif_onplayerresp.nss b/src/module/nss/hif_onplayerresp.nss new file mode 100644 index 0000000..4653118 --- /dev/null +++ b/src/module/nss/hif_onplayerresp.nss @@ -0,0 +1,13 @@ +// mod_respawn,prc_onrespawn +///////////////////////////////////////////////////////////////////// +// +// This script has been auto-generated by HakInstaller to call +// multiple handlers for the onplayerrespawn event. +// +///////////////////////////////////////////////////////////////////// + +void main() +{ + ExecuteScript("mod_respawn", OBJECT_SELF); + ExecuteScript("prc_onrespawn", OBJECT_SELF); +} diff --git a/src/module/nss/hif_onplayerrest.nss b/src/module/nss/hif_onplayerrest.nss new file mode 100644 index 0000000..e9a313d --- /dev/null +++ b/src/module/nss/hif_onplayerrest.nss @@ -0,0 +1,13 @@ +// mod_rest_test,prc_rest +///////////////////////////////////////////////////////////////////// +// +// This script has been auto-generated by HakInstaller to call +// multiple handlers for the onplayerrest event. +// +///////////////////////////////////////////////////////////////////// + +void main() +{ + ExecuteScript("mod_rest_test", OBJECT_SELF); + ExecuteScript("prc_rest", OBJECT_SELF); +} diff --git a/src/module/nss/hif_onplayeruneq.nss b/src/module/nss/hif_onplayeruneq.nss new file mode 100644 index 0000000..b3717a2 --- /dev/null +++ b/src/module/nss/hif_onplayeruneq.nss @@ -0,0 +1,13 @@ +// mod_pc_unequip,prc_unequip +///////////////////////////////////////////////////////////////////// +// +// This script has been auto-generated by HakInstaller to call +// multiple handlers for the onplayerunequipitem event. +// +///////////////////////////////////////////////////////////////////// + +void main() +{ + ExecuteScript("mod_pc_unequip", OBJECT_SELF); + ExecuteScript("prc_unequip", OBJECT_SELF); +} diff --git a/src/module/nss/hif_onunaquireit.nss b/src/module/nss/hif_onunaquireit.nss new file mode 100644 index 0000000..a8a59b0 --- /dev/null +++ b/src/module/nss/hif_onunaquireit.nss @@ -0,0 +1,13 @@ +// mod_unacquire,prc_onunaquire +///////////////////////////////////////////////////////////////////// +// +// This script has been auto-generated by HakInstaller to call +// multiple handlers for the onunaquireitem event. +// +///////////////////////////////////////////////////////////////////// + +void main() +{ + ExecuteScript("mod_unacquire", OBJECT_SELF); + ExecuteScript("prc_onunaquire", OBJECT_SELF); +} diff --git a/src/module/nss/inc_gen_enc.nss b/src/module/nss/inc_gen_enc.nss new file mode 100644 index 0000000..423293b --- /dev/null +++ b/src/module/nss/inc_gen_enc.nss @@ -0,0 +1,747 @@ + + +#include "inc_gen_loot" +//Generates an encounter that should be challenging to the party. +// If iWander is set true the monsters will hunt a PC in the area. +void GenerateEncounter(int iCR, object oWP,int iWander = FALSE); +// Creates the primary or secondary foe. +// If iCR > 0 loot for the encounter will be generated on that monster. +// If iWander is set true the monster will hunt a PC in the area. +object CreateBoss(string sResRef, location lLoc, int iCR = 0, int iWander = FALSE); +// Creates a bunch of peons based on iCR. +// If a second type of Peon is determined both will be used. +// The second Peons should only be used for archer variants. +// If iWander is set true the monsters will hunt a PC in the area. +void CreatePeons (string sPeon1, location lLoc, float fCCR, string sPeon2 = "", int iWander = FALSE); +// Finds out the resref of the peons to be spawned by the CreatePeon function. +string GetPeonResRef(string sResRef); +// Generates an encounter Level +int GetEncounterLevel (int iPartyLevel); +// Causes the caller to walk around the area looking for a PC. +void Hunt(); + +int GetEncounterLevel (int iPartyLevel)// Good + { + int iScaler = iPartyLevel/2; + if (iScaler < 1) + iScaler = 1; + int i = (Random(iScaler*2+1)) - iScaler; + int iEncounterLevel = iPartyLevel + i; // Adds the randomized number to the party level. + if (iEncounterLevel >= 40) iEncounterLevel = 40; + else if (iEncounterLevel <= 1) iEncounterLevel = 1; + return iEncounterLevel; + } + +void GenerateEncounter(int iPartyLevel, object oWP, int iWander) + { + if (GetTag(oWP) == "MON_")// Set the waypoint so that it is not used again. + { + if (GetLocalInt(oWP,"DoOnce")) + return; + SetLocalInt(oWP,"DoOnce",TRUE); + } + location lLoc = GetLocation(oWP); + int i, iEncNumber, iNum, iRoll; + float fCCR,fCR; + string sBoss,sLT,sPeon1,sPeon2; + object oMonster; + int iEncounterLevel = GetEncounterLevel (iPartyLevel); + // Generate Encounter. + switch (iEncounterLevel) + { + case 40: + { + switch(Random(1)+1) + { + case 1: {sBoss = "x2_dracolich001";break;}//Level 43 + } + break; + } + case 39: + case 38: + case 37: + case 36: + case 35://Allow above 20 to turn on. + { + switch(Random(1)+1) + { + case 1: {sBoss = "x2_golem001";break;}//Add Peons + } + break; + } + case 34: + case 33: + case 32: + { + switch(Random(1)+1) + { + case 1: {sBoss = "x2_golem002";break;}//Add Peons + }; + break; + } + case 31: + case 30: + case 29: + case 28://Allow above 20 to turn on. + { + switch(Random(2)+1) + { + case 1: {sBoss = "x2_drider005";break;}//Add Peons + case 2: {sBoss = "nw_lich001";break;}//Add Peons + }; + break; + } + case 26: + case 25://Allow above 20 to turn on. + { + switch(Random(2)+1) + { + case 1: {sBoss = "nw_goldmflesh001";break;} + case 2: {sBoss = "x2_slaadwhite001"; sPeon1 = "nw_slaaddeth";break;} + }; + break; + } + case 24: + { + switch(Random(2)+1) + { + case 1: {sBoss = "nw_drgred003";break;} + case 2: {sBoss = "x2_demilich001";break;} + }; + break; + } + case 23://Allow above 20 to turn on. + { + switch(Random(2)+1) + { + case 1: {sBoss = "x2_drider004"; sPeon1 = "x2_drider003";break;} + case 2: {sBoss = "nw_drgblue003";break;} + }; + break; + } + case 22: + { + switch(Random(2)+1) + { + case 1: {sBoss = "x2_dragonshad001";break;} + case 2: {sBoss = "nw_drggreen003"; break;} //None + }; + break; + } + case 21://Allow above 20 to turn on. + { + switch(Random(3)+1) + { + case 1: {sBoss = "x2_goliron_huge";break;} + case 2: {sBoss = "nw_drgblack003"; break;} //None + case 3: {sBoss = "nw_lichboss"; sPeon1 = "nw_doomkght";break;} + }; + break; + } + case 20: + { + switch(Random(3)+1) + { + case 1: {sBoss = "nw_airelder"; sLT = "nw_airgreat"; sPeon1 ="nw_airhuge";break;} + case 2: {sBoss = "nw_drgwhite003"; break;} //None + case 3: {sBoss = "x2_mindfveneratr"; sPeon1 = "x2_mindflayer001";break;} + case 4: {sBoss = "x0_form_queen"; sLT = "x0_form_myrmarch"; sPeon1 = "x0_form_taskmast"; sPeon2 = "x0_form_warrior";break;} + }; + break; + } + case 19: + { + switch(Random(1)+1) + { + case 1: {sBoss = "nw_drgred002"; break;} //None + case 2: {sBoss = "x2_mindflayer002"; sPeon1 = "x2_mindflayer001";break;} + }; + break; + } + case 18: + { + switch(Random(3)+1) + { + case 1: {sBoss = "nw_airgreat"; sLT = "nw_airhuge"; sPeon1 ="nw_air";break;} + case 2: {sBoss = "nw_ogremageboss"; sPeon1 = "nw_ogre01"; break;} + case 3: + { + switch(Random(2)+1)// Dragons + { + case 1: {sBoss = "nw_drggreen002"; break;} //None + case 2: {sBoss = "nw_drgblue002"; break;} //None //None + } + break; + } + + } + break; + } + case 17: + { + switch(Random(5)+1) + { + case 1: {sBoss = "nw_eartheld"; sLT = "nw_earthgreat"; sPeon1 ="nw_earthhuge";break;} + case 2: {sBoss = "nw_fireelder"; sLT = "nw_firegreat"; sPeon1 ="nw_firehuge";break;} + case 3: {sBoss = "nw_lich003"; sPeon1 = "nw_doomkght";break;} + case 4: {sBoss = "nw_drgblack002"; break;} //None + case 5: {sBoss = "x2_drider003"; sPeon1 = "x2_drider002";break;} + }; + break; + } + case 16: + { + switch(Random(6)+1) + { + case 1: {sBoss = "nw_goliron"; break;} //None + case 2: {sBoss = "nw_watelder"; sLT = "nw_watergreat"; sPeon1 ="nw_waterhuge";break;} + case 3: {sBoss = "nw_balorboss"; sLT = "nw_dmsucubus"; sPeon1 = "nw_slaadred";break;} + case 4: {sBoss = "nw_vampire003"; sPeon1 = "nw_vampire004";;break;} + case 5: {sBoss = "nw_drgwhite002"; break;} //None + case 6: {sBoss = "x2_mindfdarkener"; sPeon1 = "x2_mindflayer001";break;} + }; + break; + } + case 15: + { + switch(Random(11)+1) + { + case 1: {sBoss = "nw_earthgreat"; sLT = "nw_earthhuge"; sPeon1 ="nw_earth";break;} + case 2: {sBoss = "nw_firegreat"; sLT = "nw_firehuge"; sPeon1 ="nw_fire";break;} + case 3: {sBoss = "nw_demon"; sLT = "nw_dmsucubus"; sPeon1 = "nw_slaadred";break;} + case 4: {sBoss = "nw_devil001"; break; sLT = "nw_dmsucubus"; sPeon1 = "nw_slaadred";break;} + case 5: {sBoss = "nw_slaaddthboss"; sPeon1 = "nw_slaadred";break;} + case 6: {sBoss = "nw_slaaddeth"; sPeon1 = "nw_slaadred";break;} + case 7: {sBoss = "nw_doomkghtboss"; sPeon1 = "nw_doomkght";break;} + case 8: {sBoss = "nw_drgred001"; break;} //None + case 9: {sBoss = "nw_beardireboss"; break;} //None + case 10: {sBoss = "nw_duecler020"; sLT = "nw_duemage005"; sPeon1 = "nw_duefight005"; sPeon2 = "nw_duerogue005";break;} + case 11: // Drow Elves + { + switch(d2()) + { + case 1: {sBoss = "nw_drowmage020"; sPeon1 = "nw_drowfight005"; sPeon2 = "nw_drowrogue005";break;} + case 2: {sBoss = "nw_drowfight020"; sPeon1 = "nw_drowfight005"; break;} + } + break; + } + case 12: {sBoss = "x2_beholder003";break;} + }; + break; + } + case 14: + { + switch(Random(5)+1) + { + case 1: {sBoss = "nw_watergreat"; sLT = "nw_waterhuge"; sPeon1 ="nw_water";break;} + case 2: {sBoss = "nw_drgblue001"; break;} //None + case 3: {sBoss = "nw_drggreen001"; break;} //None + case 4: // Duergar Dwarves + { + switch(d2()) + { + case 1: {sBoss = "nw_duemage020"; sPeon1 = "nw_duefight005"; sPeon2 = "nw_duerogue005";break;} + case 2: {sBoss = "nw_duefight020"; sLT = "nw_duecler005"; sPeon1 = "nw_duefight005"; sPeon2 = "nw_duerogue005";break;} + } + break; + } + case 5: {sBoss = "nw_spiderboss"; sPeon1 = "nw_spiddire";break;} + }; + break; + } + case 13: + { + switch(Random(8)+1) + { + case 1: {sBoss = "nw_bathorror"; sPeon1 = "nw_helmhorr";break;} + case 2: {sBoss = "nw_airhuge"; sPeon1 = "nw_air";break;} + case 3: {sBoss = "nw_vampire002"; sPeon1 = "rdg_vampire";break;} + case 4: {sBoss = "nw_vampire004"; sPeon1 = "rdg_vampire";break;} + case 5: {sBoss = "nw_skeldevour"; break;} //None + case 6: {sBoss = "nw_drgblack001"; break;} //None + case 7: {sBoss = "nw_duerogue020"; sLT = "nw_duecler005"; sPeon1 = "nw_duefight005"; sPeon2 = "nw_duerogue005";break;} + case 8: {sBoss = "nw_drowrogue020"; sPeon1 = "nw_drowfight005"; sPeon2 = "nw_drowrogue005";break;} + }; + break; + } + case 12: + { + switch(Random(6)+1) + { + case 1: {sBoss = "nw_golstone"; break;} //None + case 2: {sBoss = "nw_firehuge"; sPeon1 = "nw_fire";break;} + case 3: {sBoss = "nw_gntfire"; sLT = "x0_gntfirefem"; sPeon1 = "nw_ogre01";break;} + case 4: {sBoss = "nw_vampire001"; sPeon1 = "rdg_vampire";break;} + case 5: {sBoss = "nw_mohrg"; sPeon1 = "nw_zombie01"; sPeon2 = "nw_zombie02"; break;} + case 6: {sBoss = "nw_drgwhite001"; break;} //None + }; + break; + } + case 11: + { + switch(Random(13)+1) + { + case 1: {sBoss = "nw_golbone"; break;} //None + case 2: {sBoss = "nw_earthhuge"; sPeon1 = "nw_earth"; break;} + case 3: {sBoss = "nw_helmhorr"; break;} //None + case 4: {sBoss = "nw_slaadgryboss"; sPeon1 = "nw_slaadred";break;} + case 5: {sBoss = "nw_waterhuge"; sPeon1 = "nw_water"; break;} + case 6: {sBoss = "nw_mummyboss"; sLT = "nw_mumcleric"; sPeon1 = "nw_mummy"; break;} + case 7: {sBoss = "nw_goblinboss"; sLT = "nw_gobwizb"; sPeon1 = "nw_goblinb"; sPeon2 ="nw_goblina"; break;} + case 8: {sBoss = "nw_wolfdireboss"; sLT = "nw_direwolf"; sPeon1 = "nw_worg"; break;} + case 9: {sBoss = "nw_diretiger"; break;} + case 10: // Duergar Dwarves + { + switch(d3()) + { + case 1: {sBoss = "nw_duemage015"; sLT = "nw_duecler005"; sPeon1 = "nw_duefight005"; sPeon2 = "nw_duerogue005";break;} + case 2: {sBoss = "nw_duefight015"; sLT = "nw_duecler005"; sPeon1 = "nw_duefight005"; sPeon2 = "nw_duerogue005";break;} + case 3: {sBoss = "nw_duecler015"; sLT = "nw_duemage005"; sPeon1 = "nw_duefight005"; sPeon2 = "nw_duerogue005";break;} + } + break; + } + case 11: // Drow Elves + { + switch(d3()) + { + case 1: {sBoss = "nw_drowcler015"; sLT = "nw_drowmage005"; sPeon1 = "nw_drowfight005"; sPeon2 = "nw_drowrogue005";break;} + case 2: {sBoss = "nw_drowmage015"; sPeon1 = "nw_drowfight005"; sPeon2 = "nw_drowrogue005";break;} + case 3: {sBoss = "nw_drowfight015"; sPeon1 = "nw_drowfight005"; break;} + } + break; + } + case 12: {sBoss = "x2_beholder001";break;} + case 13: {sBoss = "x0_form_myrmarch"; sLT = "x0_form_taskmast"; sPeon1 = "x0_form_warrior";break;} + }; + break; + } + case 10: + { + switch(Random(14)+1) + { + case 1: {sBoss = "nw_golclay"; break;} //None + case 2: {sBoss = "nw_slaadgray"; sPeon1 = "nw_slaadred";break;} + case 3: {sBoss = "nw_dmvrock"; break;} //None + case 4: {sBoss = "nw_gnthill"; sPeon1 = "nw_ogre01";break;} + case 5: {sBoss = "nw_gntmount"; sPeon1 = "nw_ogre01";break;} + case 6: {sBoss = "x0_gntfirefem"; sPeon1 = "nw_ogre01";break;} + case 7: {sBoss = "nw_mumcleric"; sPeon1 = "nw_mummy"; break;} + case 8: {sBoss = "nw_gntfrost"; sLT = "x0_gntfrostfem"; sPeon1 = "nw_ogre01"; sPeon2 = "nw_wolfwint"; break;} + case 9: {sBoss = "nw_mumfight"; sPeon1 = "nw_mummy"; break;} + case 10: {sBoss = "nw_doomkght"; sLT = "nw_skelchief"; sPeon1 = "nw_skelwarr01";break;} + case 11: {sBoss = "nw_orcboss"; sLT = "nw_orcwizb"; sPeon1 = "nw_orcb"; sPeon2 = "nw_orca"; break;} + case 12: {sBoss = "nw_bugbearboss"; sLT = "nw_bugchiefb"; sPeon1 = "nw_bugbearb"; sPeon2 = "nw_bugbeara";break;} + case 13: {sBoss = "nw_duerogue015"; sLT = "nw_duecler005"; sPeon1 = "nw_duefight005"; sPeon2 = "nw_duerogue005";break;} + case 14: // Drow Elves & Driders + { + switch(d2()) + { + case 1: {sBoss = "nw_drowrogue015"; sPeon1 = "nw_drowfight005"; sPeon2 = "nw_drowrogue005";break;} + case 2: {sBoss = "x2_drider002"; sPeon1 = "x2_drider001";break;} + } + break; + } + }; + break; + } + case 9: + { + switch(Random(6)+1) + { + case 1: {sBoss = "nw_umberhulk"; break;} //None + case 2: {sBoss = "x0_gntfrostfem"; sPeon1 = "nw_ogre01"; sPeon2 = "nw_wolfwint"; break;} + case 3: {sBoss = "nw_slaadgrn"; sPeon1 = "nw_slaadred";break;} + case 4: {sBoss = "nw_bodak"; break;} //None + case 5: {sBoss = "nw_halfdra001"; sPeon1 = "nw_tiefling02";break;} + case 6: {sBoss = "x2_mindflayer001";break;} + }; + break; + } + case 8: + { + switch(Random(10)+1) + { + case 1: {sBoss = "nw_ettin"; sPeon1 = "nw_ogre01";break;} + case 2: {sBoss = "nw_halffnd001"; sPeon1 = "nw_tiefling02";break;} + case 3: {sBoss = "nw_golflesh"; break;} //None + case 4: {sBoss = "nw_grayrend"; break;} //None + case 5: {sBoss = "nw_minchief"; sPeon1 = "nw_minotaur"; break;} + case 6: {sBoss = "nw_minogon"; break;} //None + case 7: {sBoss = "nw_willowisp"; break;} //None + case 8: {sBoss = "nw_zombieboss"; sPeon1 = "nw_zombtyrant";break;} + case 9: {sBoss = "nw_duecler010"; sLT = "nw_duemage005"; sPeon1 = "nw_duefight005"; sPeon2 = "nw_duerogue005";break;} + case 10: // Drow Elves & Driders + { + switch(d3()) + { + case 1: {sBoss = "nw_drowcler010"; sLT = "x2_drider001"; sPeon1 = "nw_drowfight005"; sPeon2 = "nw_drowrogue005";break;} + case 2: {sBoss = "nw_drowfight010"; sPeon1 = "nw_drowfight005"; break;} + case 3: {sBoss = "x2_driderw01"; sPeon1 = "x2_drider001";break;} + } + break; + } + }; + break; + } + case 7: + { + switch(Random(17)+1) + { + case 1: {sBoss = "nw_rakshasa"; break;} //None + case 2: {sBoss = "nw_dmsucubus"; break;} //None + case 3: {sBoss = "nw_devour"; break;} //None + case 4: {sBoss = "nw_slaadbl"; sPeon1 = "nw_slaadred";break;} + case 5: {sBoss = "nw_trollchief"; sPeon1 = "nw_troll";break;} + case 6: {sBoss = "nw_btlstag"; sPeon1 = "nw_btlbomb";break;} + case 7: {sBoss = "nw_trollwiz"; sPeon1 = "nw_troll";break;} + case 8: {sBoss = "nw_spiddire"; break; sPeon1 = "nw_spidgiant";break;} + case 9: {sBoss = "x0_gorgon"; break;} //None + case 10: {sBoss = "nw_shfiend"; sPeon1 = "nw_shadow";break;} + case 11: {sBoss = "nw_skelchief"; sPeon1 = "nw_skelwarr01";break;} + case 12: {sBoss = "nw_revenant001"; break;} //None + case 13: {sBoss = "nw_beastmalar001"; break;} + case 14: // Duergar Dwarves + { + switch(d3()) + { + case 1: {sBoss = "nw_duemage010"; sPeon1 = "nw_duefight005"; sPeon2 = "nw_duerogue005";break;} + case 2: {sBoss = "nw_duefight010"; sLT = "nw_duecler005"; sPeon1 = "nw_duefight005"; sPeon2 = "nw_duerogue005";break;} + case 3: {sBoss = "nw_duerogue010"; sLT = "nw_duecler005"; sPeon1 = "nw_duefight005"; sPeon2 = "nw_duerogue005";break;} + } + break; + } + case 15: // Drow Elves & Driders + { + switch(d3()) + { + case 1: {sBoss = "nw_drowmage010"; sPeon1 = "nw_drowfight005"; sPeon2 = "nw_drowrogue005";break;} + case 2: {sBoss = "nw_drowrogue010"; sPeon1 = "nw_drowfight005"; sPeon2 = "nw_drowrogue005";break;} + case 3: {sBoss = "x2_fdrider002"; sPeon1 = "x2_drider001";break;} + } + break; + } + case 16: {sBoss = "x0_stinger_chief"; sLT = "x0_stinger_mage"; sPeon1 = "x0_stinger";break;} + case 17: {sBoss = "x0_form_taskmast"; sPeon1 = "x0_form_warrior"; sPeon2 = "x0_form_worker";break;} + + }; + break; + } + case 6: + { + switch(Random(12)+1) + { + case 1: {sBoss = "nw_invstalk"; break;} //None + case 2: {sBoss = "nw_slaadred"; break;} //None + case 3: {sBoss = "nw_ogrechief01"; sPeon1 = "nw_ogre01"; break;} + case 4: {sBoss = "x0_manticore"; break;} //None + case 5: {sBoss = "nw_skelwarr01"; sPeon1 = "nw_skeleton"; break;} + case 6: {sBoss = "nw_skelwarr02"; sPeon1 = "nw_skeleton"; break;} + case 7: {sBoss = "rdg_vampire"; sPeon1 = "nw_tiefling02";break;} + case 8: {sBoss = "nw_curst002"; break;} //None + case 9: {sBoss = "nw_curst004"; break;} //None + case 10: {sBoss = "nw_spectre"; break;} //None + case 11: + { + switch (Random(2)+1) + { + case 1: {sBoss = "x2_fdrider001";break;} + case 2: {sBoss = "x2_drider001";break;} + }; + break; + } + }; + break; + } + case 5: + { + switch(Random(22)+1) + { + case 1: {sBoss = "x0_basilisk"; break;} //None + case 2: {sBoss = "nw_beastxvim"; break;} //None + case 3: {sBoss = "x0_cockatrice"; break;} //None + case 4: {sBoss = "nw_ettercap"; sPeon1 = "nw_spidgiant";break;} + case 5: {sBoss = "nw_ghoullord"; sPeon1 = "nw_ghoul"; break;} + case 6: {sBoss = "nw_horror"; break;} //None + case 8: {sBoss = "nw_ogremage01"; sPeon1 = "rdg_orc2"; sPeon2 = "rdg_orc"; break;} + case 9: {sBoss = "nw_troll"; break; sPeon1 = "rdg_orc2"; sPeon2 = "rdg_orc"; break;} + case 10: {sBoss = "nw_werecat"; break;} //None + case 11: {sBoss = "x0_wyrmling_blu"; break;} //None + case 12: {sBoss = "x0_wyrmling_red"; break;} //None + case 13: {sBoss = "nw_curst001"; break;} //None + case 14: {sBoss = "rdg_curst_ranger"; break;} //None + case 15: {sBoss = "nw_mummy"; sPeon1 = "nw_zombie01"; sPeon2 = "nw_zombie02"; break;} + case 16: {sBoss = "nw_wraith"; break;} //None + case 17: {sBoss = "nw_bugchiefa"; sPeon1 = "nw_bugbearb"; sPeon2 = "nw_bugbeara";break;} + case 18: {sBoss = "nw_bugchiefb"; sPeon1 = "nw_bugbearb"; sPeon2 = "nw_bugbeara";break;} + case 19: {sBoss = "nw_direwolf"; sPeon1 = "nw_worg"; break;} + case 20: {sBoss = "nw_wolfwint"; break;} //None + case 21: + { + switch(d2()) + { + case 1: {sBoss = "x0_stinger_mage"; sPeon1 = "x0_stinger"; break;} + case 2: {sBoss = "x0_stinger_war"; sPeon1 = "x0_stinger"; break;} + } + break; + } + case 22: {sBoss = "x2_harpy001"; break;} //None + }; + break; + } + case 4: + { + switch(Random(25)+1) + { + case 1: {sBoss = "nw_air"; break;} //None + case 2: {sBoss = "nw_earth"; break;} //None + case 3: {sBoss = "nw_ghast"; sPeon1 = "nw_ghoul"; break;} + case 4: {sBoss = "nw_hellhound"; break;} //None + case 5: {sBoss = "nw_minotaur"; sPeon1 = "rdg_orc"; sPeon2 = "rdg_orc"; break;} + case 6: {sBoss = "nw_shmastif"; break;} //None + case 7: {sBoss = "nw_spidwra"; sPeon1 = "nw_spidgiant";break;} + case 8: {sBoss = "nw_spidswrd"; sPeon1 = "nw_spidgiant";break;} + case 9: {sBoss = "nw_water"; break;} //None + case 10: {sBoss = "x0_wyrmling_grn"; break;} //None + case 11: {sBoss = "nw_yuan_ti001"; sPeon1 = "nw_zombie01"; sPeon2 = "nw_zombie02"; break;} + case 12: {sBoss = "nw_skelpriest"; sPeon1 = "nw_skeleton"; break;} + case 13: {sBoss = "nw_skelmage"; break; sPeon1 = "nw_skeleton"; break;} + case 14: {sBoss = "nw_wight"; break;} //None + case 15: {sBoss = "nw_zombwarr01"; sPeon1 = "nw_zombie01"; sPeon2 = "nw_zombie02"; break;} + case 16: {sBoss = "nw_zombwarr02"; sPeon1 = "nw_zombie01"; sPeon2 = "nw_zombie02"; break;} + case 17: {sBoss = "nw_gobchiefa"; sPeon1 = "nw_goblinb"; sPeon2 = "nw_goblina"; break;} + case 18: {sBoss = "nw_orcwiza"; sPeon1 = "rdg_orc2"; sPeon2 = "rdg_orc"; break;} + case 19: {sBoss = "nw_orcwizb"; sPeon1 = "rdg_orc2"; sPeon2 = "rdg_orc"; break;} + case 20: {sBoss = "nw_bugwiza"; sPeon1 = "nw_bugbearb"; sPeon2 = "nw_bugbeara";break;} + case 21: {sBoss = "nw_bugwizb"; sPeon1 = "nw_bugbearb"; sPeon2 = "nw_bugbeara";break;} + case 22: // Duergar Dwarves + { + switch(d4()) + { + case 1: {sBoss = "nw_duecler005"; sLT = "nw_duemage001"; sPeon1 = "nw_duefight001"; sPeon2 = "nw_duerogue001";break;} + case 2: {sBoss = "nw_duemage005"; sLT = "nw_duecler001"; sPeon1 = "nw_duefight001"; sPeon2 = "nw_duerogue001";break;} + case 3: {sBoss = "nw_duefight005"; sLT = "nw_duecler001"; sPeon1 = "nw_duefight001"; sPeon2 = "nw_duerogue001";break;} + case 4: {sBoss = "nw_duerogue005"; sLT = "nw_duecler001"; sPeon1 = "nw_duefight001"; sPeon2 = "nw_duerogue001";break;} + } + break; + } + case 23: // Drow Elves + { + switch(d3()) + { + case 1: {sBoss = "nw_drowcler005"; sPeon1 = "nw_drowfight001"; sPeon2 = "nw_drowrogue001";break;} + case 2: {sBoss = "nw_drowmage005"; sPeon1 = "nw_drowfight001"; sPeon2 = "nw_drowrogue001";break;} + case 3: {sBoss = "nw_drowfight005"; sPeon1 = "nw_drowfight001"; break;} + } + break; + } + case 24: {sBoss = "snw_seahag"; sLT = "snw_seahag"; sPeon1 = "x0_asabi_warrior";break;} + case 25: {sBoss = "x0_form_warrior"; sPeon1 = "x0_form_worker"; break;} + }; + break; + } + case 3: + { + switch(Random(24)+1) + { + case 1: {sBoss = "nw_btlbomb"; sPeon1 = "nw_btlfire";break;} + case 2: {sBoss = "nw_btlfire02"; sPeon1 = "nw_btlfire";break;} + case 3: {sBoss = "nw_btlstink"; sPeon1 = "nw_btlfire";break;} + case 4: {sBoss = "nw_fire"; break;} //None + case 5: {sBoss = "rdg_gargoyle"; break;} //None + case 6: {sBoss = "nw_ogre01"; sPeon1 = "nw_orcb"; sPeon2 = "nw_orca"; break;} + case 7: {sBoss = "nw_spidgiant"; break;} //None + case 8: {sBoss = "nw_spidphase"; break;} //None + case 9: {sBoss = "x0_wyrmling_blk"; break;} //None + case 10: {sBoss = "x0_wyrmling_wht"; break;} //None + case 11: // Mephits + { + switch(Random(12)+1) + { + case 1: {sBoss = "nw_mepice"; break;} //None + case 2: {sBoss = "nw_mepooze"; break;} //None + case 3: {sBoss = "nw_mepwater"; break;} //None + case 4: {sBoss = "nw_mepsteam"; break;} //None + case 5: {sBoss = "nw_imp"; break;} //None + case 6: {sBoss = "nw_mepmagma"; break;} //None + case 7: {sBoss = "nw_mepfire"; break;} //None + case 8: {sBoss = "nw_mepsalt"; break;} //None + case 9: {sBoss = "nw_dmquasit"; break;} //None + case 10: {sBoss = "nw_mepearth"; break;} //None + case 11: {sBoss = "nw_mepdust"; break;} //None + case 12: {sBoss = "nw_mepair"; break;} //None + } + break; + } + case 12: {sBoss = "nw_shadow"; break;} //None + case 13: {sBoss = "nw_zombtyrant"; sPeon1 = "nw_zombie01"; sPeon2 = "nw_zombie02"; break;} + case 14: {sBoss = "nw_allip"; break;} //None + case 15: {sBoss = "nw_gobchiefb"; sPeon1 = "nw_goblinb"; sPeon2 ="nw_goblina"; break;} + case 16: {sBoss = "nw_gobwiza"; sPeon1 = "nw_goblinb"; sPeon2 ="nw_goblina"; break;} + case 17: {sBoss = "nw_gobwizb"; sPeon1 = "nw_goblinb"; sPeon2 ="nw_goblina"; break;} + case 18: {sBoss = "nw_orcchiefa"; sPeon1 = "rdg_orc2"; sPeon2 = "rdg_orc"; break;} + case 19: {sBoss = "nw_orcchiefb"; sPeon1 = "rdg_orc2"; sPeon2 = "rdg_orc"; break;} + case 20: {sBoss = "nw_worg"; sPeon1 = "nw_goblinb"; sPeon2 ="nw_goblina"; break;} + case 21: {sBoss = "nw_drowrogue005"; sPeon1 = "nw_drowfight001"; sPeon2 = "nw_drowrogue001";break;} + case 22: {sBoss = "x2_beholder002";break;} //None + case 23: {sBoss = "x0_stinger";break;} //None + case 24: {sBoss = "x2_gelcube";break;} //None + + }; + break; + } + case 2: + { + switch(Random(9) + 1) + { + case 1: {sBoss = "x0_asabi_warrior"; sPeon1 = "nw_kobold001"; sPeon2 = "nw_kobold002";break;} + case 2: {sBoss = "nw_bugbearb"; sPeon1 = "nw_bugbeara"; sPeon2 ="nw_goblinb"; break;} + case 3: {sBoss = "nw_oldwara"; sPeon1 = "nw_kobold001"; sPeon2 = "nw_kobold002";break;} + case 4: {sBoss = "nw_ghoul"; break;} //None + case 5: {sBoss = "nw_krenshar"; break;} //None + case 6: {sBoss = "nw_werewolf"; break;} //None + case 7: {sBoss = "nw_hobgoblin002"; sPeon1 = "nw_goblinb"; sPeon2 = "nw_hobgoblin001"; break;} + case 8: // Kobold Bosses + { + switch(Random(12)+1) + { + case 8: {sBoss = "nw_kobold003"; sPeon1 = "nw_kobold001"; sPeon2 = "nw_kobold002";break;} + case 9: {sBoss = "nw_kobold004"; sPeon1 = "nw_kobold001"; sPeon2 = "nw_kobold002";break;} + case 10: {sBoss = "nw_kobold005"; sPeon1 = "nw_kobold001"; sPeon2 = "nw_kobold002";break;} + case 11: {sBoss = "nw_kobold006"; sPeon1 = "nw_kobold001"; sPeon2 = "nw_kobold002";break;} + } + break; + } + case 9: {sBoss = "rdg_wererat"; sPeon1 = "nw_ratdire001"; sPeon2 = "nw_rat001";break;} + }; + break; + } + case 1: + { + switch(Random(16) + 1) + { + case 1: {sBoss = "nw_gnoll001"; break;} //None + case 2: {sBoss = "nw_zombie01"; sPeon1 = "nw_zombie02"; break;} + case 3: {sBoss = "nw_skeleton"; break;} //None + case 4: {sBoss = "nw_tiefling02"; break;} //None + case 5: {sBoss = "rdg_bat"; break;} //None + case 6: {sBoss = "nw_hobgoblin001"; break;} //None + case 7: {sBoss = "nw_kobold001"; sPeon1 = "nw_kobold002"; break;} + case 8: {sBoss = "nw_stirge"; break;} //None + case 9: {sBoss = "nw_btlfire"; break;} //None + case 10: {sBoss = "nw_goblinb"; sPeon1 = "nw_goblina"; break;} + case 11: {sBoss = "rdg_orc2"; sPeon1 = "rdg_orc"; break;} + case 12: {sBoss = "nw_rat001"; break;} //None + case 13: {sBoss = "nw_ratdire001"; sPeon1 = "nw_ratdire001"; sPeon2 = "nw_rat001";break;} + case 14: // Duergar Dwarves + { + switch(d4()) + { + case 1: {sBoss = "nw_duecler001"; sLT = "nw_duemage001"; sPeon1 = "nw_duefight001"; sPeon2 = "nw_duerogue001";break;} + case 2: {sBoss = "nw_duemage001"; sLT = "nw_duecler001"; sPeon1 = "nw_duefight001"; sPeon2 = "nw_duerogue001";break;} + case 3: {sBoss = "nw_duefight001"; sLT = "nw_duecler001"; sPeon1 = "nw_duefight001"; sPeon2 = "nw_duerogue001";break;} + case 4: {sBoss = "nw_duerogue001"; sLT = "nw_duecler001"; sPeon1 = "nw_duefight001"; sPeon2 = "nw_duerogue001";break;} + } + break; + } + case 15: // Drow Elves + { + switch(d4()) + { + case 1: {sBoss = "nw_drowcler001"; sPeon1 = "nw_drowfight001"; sPeon2 = "nw_drowrogue001";break;} + case 2: {sBoss = "nw_drowmage001"; sPeon1 = "nw_drowfight001"; sPeon2 = "nw_drowrogue001";break;} + case 3: {sBoss = "nw_drowfight001"; sPeon1 = "nw_drowfight001"; break;} + case 4: {sBoss = "nw_drowrogue001"; sPeon1 = "nw_drowfight001"; sPeon2 = "nw_drowrogue001";break;} + } + break; + } + case 16: {sBoss = "x0_form_worker"; break;} + } + break; + } + }; + oMonster = CreateBoss(sBoss,lLoc,iPartyLevel,iWander); // Create the first monster. This monster will be carrying the loot. + fCR = IntToFloat(iPartyLevel) - GetChallengeRating(oMonster); // Adjust the remaining CR left for other monsters. + if (fCR > 0.00 && sLT != "") // Create a leutenant for the encounter. + { + oMonster = CreateBoss(sLT,lLoc,0,iWander); + fCR -= GetChallengeRating(oMonster); + } + if (fCR > 0.00) // Create Peons + { + if (sPeon1 == "") + sPeon1 = sBoss; + CreatePeons(sPeon1,lLoc,fCR,sPeon2,iWander); + } + } + +object CreateBoss(string sResRef, location lLoc, int iCR, int iWander) + { + object oMonster = CreateObject(OBJECT_TYPE_CREATURE,sResRef,lLoc,FALSE,"Boss"); + if (iCR > 0) + { + if (iCR > 40) + iCR = 40; + if (iCR > 0) + { + AssignCommand(oMonster,GenerateLoot(oMonster,iCR));// Found an error that was causing this to spawn items on PCs if triggered by one. + SetLocalInt(oMonster,"Boss",iCR); + } + } + if (iWander) + AssignCommand(oMonster,DelayCommand(6.0,Hunt())); + return oMonster; + } + +void CreatePeons (string sPeon1, location lLoc, float fCCR, string sPeon2, int iWander) + { + int i,j,iNum; + object oMonster = CreateObject(OBJECT_TYPE_CREATURE,sPeon1,lLoc); // Create the first Peon + float fCR = GetChallengeRating(oMonster); // Determine CR of the Peons + if (fCR > 0.0) + { + if (fCR < 1.0) + iNum = FloatToInt(fCCR/fCR); + else if (fCR >= 1.0) + { + i = FloatToInt(fCCR/fCR); + if (i < 1) + i = 1; + else if (i >= 6) + i = 5; //CPU SAFETY CAP DO NOT CHANGE UNDER PAIN OF LAG! + switch (i) + { + case 1: {iNum = 2;break;} + case 2: {iNum = 4;break;} + case 3: {iNum = 8;break;} + case 4: {iNum = 16;break;} // WARNING! MAY HICKUP! + case 5: {iNum = 32; break;} // WARNING! MAY CAUSE LAG! + case 6: {iNum = 64; break;} // WARNING WILL CAUSE LAG! + case 7: {iNum = 128; break;} // THIS SHOULD COMPLETELY STOP YOUR SYSTEM FOR A FEW SECONDS! + case 8: {iNum = 256; break;} // Forget it your hopeless. + }; + } + if (iNum > 0) + { + if (sPeon2 =="") j = 1; + else j = 2; + for (i = 1; i <= iNum; i+=j) + { + oMonster = CreateObject(OBJECT_TYPE_CREATURE,sPeon1,lLoc); + if (iWander) + AssignCommand(oMonster,Hunt()); + if (j == 2) + { + oMonster = CreateObject(OBJECT_TYPE_CREATURE,sPeon2,lLoc); + if (iWander) + AssignCommand(oMonster,Hunt()); + } + } + } + } + } + +void Hunt() + { + ClearAllActions(); + ActionMoveToLocation(GetLocation(GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC))); + } diff --git a/src/module/nss/inc_gen_loot.nss b/src/module/nss/inc_gen_loot.nss new file mode 100644 index 0000000..03c07ff --- /dev/null +++ b/src/module/nss/inc_gen_loot.nss @@ -0,0 +1,17 @@ +#include "inc_loot_coin" +#include "inc_loot_goods" +#include "inc_loot_items" +// Generates Loot for an encounter +void GenerateLoot(object oMonster,int iCR,int iCoins = 1, int iGoods = 1, int iItems = 1); + +void GenerateLoot(object oMonster,int iCR, int iCoins = 1, int iGoods = 1, int iItems = 1) + { + if (iCoins > 0) + GenerateCoin(oMonster,iCR,iCoins); + if (iGoods > 0) + GenerateGoods(oMonster,iCR, iGoods); + if (iItems > 0) + GenerateItems(oMonster,iCR, iItems); + } + +//void main (){} diff --git a/src/module/nss/inc_item_effects.nss b/src/module/nss/inc_item_effects.nss new file mode 100644 index 0000000..d53a62b --- /dev/null +++ b/src/module/nss/inc_item_effects.nss @@ -0,0 +1,49 @@ +// This script is still in development and is not live in the RDG yet. +// Its purpose is to use constants stores on items to give item properties. +// This will allow us to use NWN item properties without raising the sell prices +// of the items outside of wanted goals. +// +// Note to builder this script should include a list of all variables tied to +// magic items. To allow for easy modification at a later date. + +// This command will be used to add/remove item properties stored in variables +// on an item. +void AddRemoveItemEffect(object oItem, int iAddRemove = TRUE); + +void RemoveItemProp(object oItem, int iItemPropertyType); + +void AddRemoveItemEffect(object oItem, int iAddRemove) + { + itemproperty ipItem; + int iAmount; + if (GetLocalInt(oItem,"STR")) + { + iAmount = GetLocalInt(oItem,"STR"); + if (iAddRemove) + { + if (iAmount > 0) + ipItem = ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR,iAmount); + else + ipItem = ItemPropertyDecreaseAbility(IP_CONST_ABILITY_STR,iAmount); + AddItemProperty(DURATION_TYPE_PERMANENT,ipItem,oItem); + } + else + { + if (iAmount > 0) + RemoveItemProp(oItem,ITEM_PROPERTY_ABILITY_BONUS); + else + RemoveItemProp(oItem,ITEM_PROPERTY_DECREASED_ABILITY_SCORE); + } + } + } + +void RemoveItemProp(object oItem,int iItemPropertyType) + { + itemproperty ipItem = GetFirstItemProperty(oItem); + while (GetIsItemPropertyValid(ipItem)) + { + if (GetItemPropertyType(ipItem) == iItemPropertyType) + RemoveItemProperty(oItem,ipItem); + ipItem = GetNextItemProperty(oItem); + } + } diff --git a/src/module/nss/inc_item_tools.nss b/src/module/nss/inc_item_tools.nss new file mode 100644 index 0000000..c021db9 --- /dev/null +++ b/src/module/nss/inc_item_tools.nss @@ -0,0 +1,786 @@ +//#include "x2_inc_ws_smith" +#include "prc_x2_itemprop" +#include "inc_misc_tools" +// Handles functions of thieves' tools. +void ThiefTools(object oPC,object oTarget, int iMod = 0); +// Allows easy scripting of item spell uses. +void ItemCastSpellAtObject(object oUser,int iSpell, object oTarget = OBJECT_INVALID); +// Allows easy scripting of item spell uses. +void ItemCastSpellAtLocation(object oUser,int iSpell, location lLoc); +// Handles functions of Figurines of Wonderous Power. +void FigurineWonderousPower(object oPC, object oFigurine, string sResRef,location lLoc); +// Allows a cleric/paladin to turn undead at iMod levels above thri real level. +void TurnUndead(object oPC,int iMod); +// Handles the Horn of Blasting +void HornOfBlasting (location lTarget); +// Effects for Pipes of Pain +void PipesOfPain(); +// Handles special effects for the mask of the skull. +void MaskOfTheSkull(object oTarget); +// This handles the horn of Valhalla summons +void Miscc039(int iNumber, string sResRef, int iFriendly = FALSE); +// This handles the Shield of Absorption rules. +void ShieldOfAbsorption(object oPC); +// Removes Damage Reduction from Golems. +void GolemBane(object oSkin); +// This function returns true is a weapon is a Slashing weapon. +int GetWeaponSlashing(object oWeapon); +// This function returns true is a weapon is a Piercing weapon. +int GetWeaponPiercing(object oWeapon); +// This function returns true is a weapon is a Bludgeoning weapon. +int GetWeaponBludgeoning(object oWeapon); +// Returns TRUE if oItem is a weapon or ammunition. +int GetIsWeapon(object oItem); +// Returns TRUE if oItem is an armor or shield +int GetIsArmor(object oItem); +// Returns TRUE if oItem is a shield +int GetIsShield(object oItem); +// Returns the enchantment bonus on an item +// This function only works on armor and weapons +// This function will not work on RDG Ammo +int GetEnchantmentBonus(object oItem); +// Returns the base armor class of a magic armor. +int GetBaseArmorClass(object oItem); +// Returns the DMG gold piece value of any RDG enchanted item. +// iMod allows you to return a value higher what the item has. +// This function will not work on ammunition. +// WARNING THIS CAN BE A VERY INTENSIVE FUNCTION DO NOT LOOP +int GetTotalEnchantmentValue(object oItem,int iMod = 0); +// Returns TRUE is oItem is an ammunition type. +int GetIsAmmo(object oItem); +// Returns TRUE if the ranged weapon uses ammo. +// Darts as an example will return FALSE. +int GetIsLauncher(object oItem); +// Sets the gold in a container equal to iGold. +// This function will not work on creatures. +void DestroyGold(object oBox = OBJECT_SELF); +// This funtion will cause oDoor to open if it's not locked. +void MageHand (object oDoor); +// Returns the item property race to be a special bonus towards +int GetBaneRace(); +// Returns teh enchantment bonus of a weapon. +// Attack bonus of a ranged weapon. +// AC bonus of armor or shields. +int ReturnItemBonus(object oItem, int ip); +// This funtion is used by items that allow a person to go upwards thru a pit trap. +// Example: Ring of Climbing. +void Fly(); +// THis function will return the XP expense to create an item. +int GetItemXPCost(object oItem,int iMod = 0); +void ThiefTools(object oPC, object oTarget,int iMod) + { + int iDC = GetLocalInt(oTarget,"TrapDC"); + int iRoll,iOOPS; + int iAnim = GetObjectType(oTarget); + int iType = GetLocalInt(oTarget,"TrapType"); + AssignCommand(oPC,ClearAllActions()); + switch(iAnim) + { + case OBJECT_TYPE_DOOR: {AssignCommand(oPC,ActionPlayAnimation(ANIMATION_FIREFORGET_STEAL,6.0));break;} + case OBJECT_TYPE_PLACEABLE: {AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,6.0));break;} + case OBJECT_TYPE_TRIGGER: {AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,6.0));break;} + break; + } + if (GetIsTrapped(oTarget) && GetTrapDetectedBy(oTarget,oPC)) + { + if (!iDC) + iDC = ScaledDC(PartyLevel(oPC)); + if (GetIsInCombat(oPC)) + iRoll = d20() + GetSkillRank(SKILL_DISABLE_TRAP,oPC) + iMod; + else iRoll = 20 + GetSkillRank(SKILL_DISABLE_TRAP,oPC) + iMod; + + if (iType > 1 && iDC >=25 && !GetLevelByClass(CLASS_TYPE_ROGUE,oPC)) + iOOPS = TRUE; + else if (iRoll >= iDC) + { + DeleteLocalInt(oTarget,"Pit");// Had to add this to prevent pit trapped doors from having odd transitions + SetTrapDisabled(oTarget); + AssignCommand(oPC,PlayVoiceChat(VOICE_CHAT_TASKCOMPLETE,oPC)); + } + else if (iRoll >= iDC-5) + { + SetLocalInt(oTarget,"Flagged",TRUE); // Kill trap heartbeat + AssignCommand(oPC,PlayVoiceChat(VOICE_CHAT_CANTDO,oPC)); + oPC = GetFirstFactionMember(oPC); + while (GetIsObjectValid(oPC)) + { + SetTrapDetectedBy(oTarget,oPC); + oPC = GetNextFactionMember(oPC); + FloatingTextStringOnCreature("Trap flagged.",oPC); + SetLocalInt(oTarget,"TrapDC",iDC); + } + } + else if (iDC >= iRoll + 10) + iOOPS = TRUE; + else + { + SetLocalInt(oTarget,"TrapDC",iDC); + AssignCommand(oPC,PlayVoiceChat(VOICE_CHAT_BADIDEA,oPC)); + SendMessageToPC(oPC,"Failed Skill Check: " +IntToString(iRoll) + " vs. DC: " +IntToString(iDC)); + } + } + else if (GetIsTrapped(oTarget)) // Trapped and not detected + iOOPS = TRUE; + else if (GetLocked(oTarget)) + { + iDC = GetLocalInt(oTarget,"LockDC"); + if (!iDC) + { + if (iAnim == OBJECT_TYPE_DOOR && d100() <= JAMMED_DOOR) + iDC = 100; + else + iDC = ScaledDC(PartyLevel(oPC)); + } + if (GetIsInCombat(oPC)) + iRoll = d20() + GetSkillRank(SKILL_OPEN_LOCK,oPC) + iMod; + else + iRoll = 20 + GetSkillRank(SKILL_OPEN_LOCK,oPC) + iMod; + if (iRoll >= iDC) + { + SetLocked(oTarget,FALSE); + AssignCommand(oPC,PlayVoiceChat(VOICE_CHAT_TASKCOMPLETE,oPC)); + } + else + { + SetLocalInt(oTarget,"LockDC",iDC); + AssignCommand(oPC,PlayVoiceChat(VOICE_CHAT_CUSS,oPC)); + } + } + if (iOOPS) // Trap goes off. + { + AssignCommand(oPC,ClearAllActions(TRUE)); + AssignCommand(oTarget,ApplyTrap(oPC)); + AssignCommand(oPC,PlayVoiceChat(VOICE_CHAT_BADIDEA,oPC)); + } + } + +void ItemCastSpellAtObject(object oUser,int iSpell, object oTarget = OBJECT_INVALID) + { + if (!GetIsObjectValid(oTarget)) + oTarget = oUser; + AssignCommand(oUser,ActionCastSpellAtObject(iSpell ,oTarget,METAMAGIC_ANY,TRUE,0,PROJECTILE_PATH_TYPE_DEFAULT,TRUE)); + } + +void ItemCastSpellAtLocation(object oUser,int iSpell, location lLoc) + { + AssignCommand(oUser,ActionCastSpellAtLocation(iSpell ,lLoc ,METAMAGIC_ANY,TRUE,PROJECTILE_PATH_TYPE_DEFAULT,TRUE)); + } + +void FigurineWonderousPower(object oPC, object oItem, string sResRef,location lLoc) + { + object oTemp = CreateObject(OBJECT_TYPE_CREATURE,sResRef,lLoc); + effect eVis; + AddHenchman(oPC,oTemp); + AssignCommand(oTemp,ActionTakeItem(oItem,oPC)); + } + +void TurnUndead(object oPC,int iMod) + { + if (!GetHasFeat(FEAT_TURN_UNDEAD ,oPC)) + return; + effect eTurned = EffectLinkEffects(EffectTurned(),EffectVisualEffect(VFX_IMP_FEAR_S)); + int iLevel = GetLevelByClass(CLASS_TYPE_CLERIC,oPC); //This is the cleric level you want the rod to be based on. + if (!iLevel) + iLevel = GetLevelByClass(CLASS_TYPE_PALADIN,oPC) - 2; + iLevel += iMod; + int iMaxHD; + int iCharisma = GetAbilityModifier(ABILITY_CHARISMA,oPC); + // Determine Max Level of Undead turned. + int iCheck = d20() + iCharisma; + if (iCheck <= 0) iMaxHD = iLevel -4; + else if (iCheck <= 3) iMaxHD = iLevel - 3; + else if (iCheck <= 6) iMaxHD = iLevel - 2; + else if (iCheck <= 9) iMaxHD = iLevel - 1; + else if (iCheck <= 12) iMaxHD = iLevel + 0;//Included for completeness + else if (iCheck <= 15) iMaxHD = iLevel + 1; + else if (iCheck <= 18) iMaxHD = iLevel + 2; + else if (iCheck <= 21) iMaxHD = iLevel + 3; + else iMaxHD = iLevel + 4; + int iTotalHD = d6(2) + iLevel + iCharisma; + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_IMP_RESTORATION_GREATER),oPC,3.0); + object oTarget; + int i; + int j; + for (i = 1; i <= iMaxHD;i++) //Test all undead cycling from 1 HD to iLevel HD + { + j = 1; + object oTarget = GetNearestCreature(CREATURE_TYPE_RACIAL_TYPE,RACIAL_TYPE_UNDEAD,oPC,j); + while (GetIsObjectValid(oTarget) && iLevel > 0) + { + if (GetHitDice(oTarget) == i + && GetDistanceBetween(oPC,oTarget) < FeetToMeters(60.0)) + { + if (i <= iLevel/2) + AssignCommand(oPC,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(TRUE),oTarget)); + else + AssignCommand(oPC,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eTurned,oTarget,RoundsToSeconds(10))); + iTotalHD += -i; + if (iTotalHD < i) + break; // Break while loop if remaining turned levels is less than tested undead + } + oTarget = GetNearestCreature(CREATURE_TYPE_RACIAL_TYPE,RACIAL_TYPE_UNDEAD,oPC,j+=1); + } + if (iTotalHD < i) + break; // Break the for loop and terminate script. + } + DecrementRemainingFeatUses(oPC,FEAT_TURN_UNDEAD); + } + +void HornOfBlasting (location lTarget) + { + effect eDam = EffectLinkEffects(EffectDamage(d10(),DAMAGE_TYPE_SONIC),EffectVisualEffect(VFX_FNF_SOUND_BURST)); + effect eDaze = EffectDazed(); + effect eDeaf = EffectDeaf(); + int iSave; + object oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 11.0, lTarget, TRUE, OBJECT_TYPE_ALL); + while(GetIsObjectValid(oTarget)) + { + iSave = FortitudeSave(oTarget,16,SAVING_THROW_TYPE_SONIC); + if (iSave == 0) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT,eDam,oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eDaze,oTarget,RoundsToSeconds(2)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eDeaf,oTarget,RoundsToSeconds(4)); + } + else if (iSave == 1) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eDaze,oTarget,RoundsToSeconds(1)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eDeaf,oTarget,RoundsToSeconds(2)); + } + oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 11.0, lTarget, TRUE, OBJECT_TYPE_ALL); + } + } + +void PipesOfPain() + { + location lLoc = GetLocation(OBJECT_SELF); + int i,iTemp; + effect eTemp = EffectCurse(0,0,0,0,0,0); + eTemp = EffectLinkEffects(eTemp,EffectAttackDecrease(2)); + eTemp = EffectLinkEffects(eTemp,EffectSkillDecrease(SKILL_ALL_SKILLS,2)); + eTemp = EffectLinkEffects(eTemp,EffectSavingThrowDecrease(SAVING_THROW_ALL,2)); + effect eTemp2; + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE,FeetToMeters(30.0),lLoc,FALSE); + while (GetIsObjectValid(oTarget)) + { + if (!WillSave(oTarget,14,SAVING_THROW_TYPE_MIND_SPELLS)) + { + iTemp = d4(2); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_FNF_HOWL_MIND),oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eTemp,oTarget,RoundsToSeconds(iTemp)); + for (i = 1; i<= iTemp; i++) + { + eTemp2 = EffectLinkEffects(EffectDamage(d4(),DAMAGE_TYPE_SONIC),EffectVisualEffect(VFX_IMP_HEAD_SONIC)); + DelayCommand(RoundsToSeconds(i),CurseDamage(OBJECT_SELF,eTemp2,oTarget)); + } + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE,FeetToMeters(30.0),lLoc,FALSE); + } + } + +void MaskOfTheSkull(object oTarget) + { + if (TouchAttackRanged(oTarget)) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_IMP_MIRV),oTarget); + if (!FortitudeSave(oTarget,20,SAVING_THROW_TYPE_DEATH)) + DelayCommand(1.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectDeath(TRUE),oTarget)); + else + DelayCommand(1.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectDamage(d6(3)+13,DAMAGE_TYPE_NEGATIVE),oTarget)); + } + else + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_IMP_MIRV,TRUE),oTarget); + } + } + +void Miscc039(int iNumber, string sResRef, int iFriendly) + { + PlaySound("as_cv_eulpipe1"); + int i; + object oBarbarian; + for (i = 1; i <= iNumber; i++) + { + oBarbarian = CreateObject(OBJECT_TYPE_CREATURE,sResRef,GetLocation(OBJECT_SELF)); + if (!iFriendly) + ChangeToStandardFaction(oBarbarian,STANDARD_FACTION_HOSTILE); + } + } + +void ShieldOfAbsorption(object oPC) + { + object oTarget; + object oHostile = GetFirstObjectInArea(); + while(GetIsObjectValid(oHostile)) + { + if (GetObjectType(oHostile) == OBJECT_TYPE_CREATURE) + { + oTarget = GetAttackTarget(oHostile); + if (oTarget == oPC && !GetWeaponRanged(GetLastWeaponUsed(oHostile))) + if (GetCreatureSize(oHostile) == CREATURE_SIZE_TINY + | CREATURE_SIZE_SMALL + | CREATURE_SIZE_MEDIUM + | CREATURE_SIZE_LARGE) + { + AssignCommand(oHostile,AwardXPs(oPC)); + AssignCommand(oPC,DestroyObject(oHostile)); + } + } + oHostile = GetNextObjectInArea(); + } + } + +void GolemBane(object oSkin) + { + itemproperty ipItem = GetFirstItemProperty(oSkin); + while (GetIsItemPropertyValid(ipItem)) + { + if (GetItemPropertyType(ipItem) == ITEM_PROPERTY_DAMAGE_RESISTANCE) + { + RemoveItemProperty(oSkin,ipItem); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_FNF_TIME_STOP),GetItemPossessor(oSkin),6.0); + } + ipItem = GetNextItemProperty(oSkin); + } + } + +int GetWeaponSlashing(object oWeapon) + { + int iType = GetBaseItemType(oWeapon); + if (iType == BASE_ITEM_BASTARDSWORD + || iType == BASE_ITEM_BATTLEAXE + || iType == BASE_ITEM_DOUBLEAXE + || iType == BASE_ITEM_DWARVENWARAXE + || iType == BASE_ITEM_GREATAXE + || iType == BASE_ITEM_GREATSWORD + || iType == BASE_ITEM_HALBERD + || iType == BASE_ITEM_HANDAXE + || iType == BASE_ITEM_KAMA + || iType == BASE_ITEM_KATANA + || iType == BASE_ITEM_KUKRI + || iType == BASE_ITEM_LONGSWORD + || iType == BASE_ITEM_SCIMITAR + || iType == BASE_ITEM_SCYTHE + || iType == BASE_ITEM_SICKLE + || iType == BASE_ITEM_TWOBLADEDSWORD + || iType == BASE_ITEM_WHIP) + return TRUE; + return FALSE; + } + +int GetWeaponPiercing(object oWeapon) + { + int iType = GetBaseItemType(oWeapon); + if (iType == BASE_ITEM_ARROW + || iType == BASE_ITEM_BOLT + || iType == BASE_ITEM_CPIERCWEAPON + || iType == BASE_ITEM_DAGGER + || iType == BASE_ITEM_DART + || iType == BASE_ITEM_BASTARDSWORD + || iType == BASE_ITEM_DOUBLEAXE + || iType == BASE_ITEM_GREATSWORD + || iType == BASE_ITEM_HALBERD + || iType == BASE_ITEM_HEAVYCROSSBOW + || iType == BASE_ITEM_KATANA + || iType == BASE_ITEM_LIGHTCROSSBOW + || iType == BASE_ITEM_LONGBOW + || iType == BASE_ITEM_RAPIER + || iType == BASE_ITEM_SCYTHE + || iType == BASE_ITEM_SHORTBOW + || iType == BASE_ITEM_SHORTSPEAR + || iType == BASE_ITEM_SHORTSWORD + || iType == BASE_ITEM_SHURIKEN) + return TRUE; + return FALSE; + } + +int GetWeaponBludgeoning(object oWeapon) + { + int iType = GetBaseItemType(oWeapon); + if (iType == BASE_ITEM_BULLET + || iType == BASE_ITEM_CBLUDGWEAPON + || iType == BASE_ITEM_CLUB + || iType == BASE_ITEM_DIREMACE + || iType == BASE_ITEM_HEAVYFLAIL + || iType == BASE_ITEM_LIGHTFLAIL + || iType == BASE_ITEM_LIGHTHAMMER + || iType == BASE_ITEM_LIGHTMACE + || iType == BASE_ITEM_MORNINGSTAR + || iType == BASE_ITEM_QUARTERSTAFF + || iType == BASE_ITEM_SLING + || iType == BASE_ITEM_WARHAMMER) + return TRUE; + return FALSE; + } + +int GetIsWeapon(object oItem) + { + int iType = GetBaseItemType(oItem); + if (iType == BASE_ITEM_ARROW + || iType == BASE_ITEM_BASTARDSWORD + || iType == BASE_ITEM_BATTLEAXE + || iType == BASE_ITEM_BOLT + || iType == BASE_ITEM_BULLET + || iType == BASE_ITEM_CLUB + || iType == BASE_ITEM_DAGGER + || iType == BASE_ITEM_DART + || iType == BASE_ITEM_DIREMACE + || iType == BASE_ITEM_DOUBLEAXE + || iType == BASE_ITEM_DWARVENWARAXE + || iType == BASE_ITEM_GREATAXE + || iType == BASE_ITEM_GREATSWORD + || iType == BASE_ITEM_GRENADE + || iType == BASE_ITEM_HALBERD + || iType == BASE_ITEM_HANDAXE + || iType == BASE_ITEM_HEAVYCROSSBOW + || iType == BASE_ITEM_HEAVYFLAIL + || iType == BASE_ITEM_KAMA + || iType == BASE_ITEM_KATANA + || iType == BASE_ITEM_KUKRI + || iType == BASE_ITEM_LIGHTCROSSBOW + || iType == BASE_ITEM_LIGHTFLAIL + || iType == BASE_ITEM_LIGHTHAMMER + || iType == BASE_ITEM_LIGHTMACE + || iType == BASE_ITEM_LONGBOW + || iType == BASE_ITEM_LONGSWORD + || iType == BASE_ITEM_MORNINGSTAR + || iType == BASE_ITEM_QUARTERSTAFF + || iType == BASE_ITEM_RAPIER + || iType == BASE_ITEM_SCIMITAR + || iType == BASE_ITEM_SCYTHE + || iType == BASE_ITEM_SHORTBOW + || iType == BASE_ITEM_SHORTSPEAR + || iType == BASE_ITEM_SHORTSWORD + || iType == BASE_ITEM_SHURIKEN + || iType == BASE_ITEM_SICKLE + || iType == BASE_ITEM_SLING + || iType == BASE_ITEM_THROWINGAXE + || iType == BASE_ITEM_TWOBLADEDSWORD + || iType == BASE_ITEM_WARHAMMER + || iType == BASE_ITEM_WHIP) + return TRUE; + return FALSE; + } + +int GetIsArmor(object oItem) + { + int iType = GetBaseItemType(oItem); + if (iType == BASE_ITEM_ARMOR + || iType == BASE_ITEM_LARGESHIELD + || iType == BASE_ITEM_SMALLSHIELD + || iType == BASE_ITEM_TOWERSHIELD) + return TRUE; + return FALSE; + } + +int GetIsShield(object oItem) + { + int iType = GetBaseItemType(oItem); + if (iType == BASE_ITEM_LARGESHIELD + || iType == BASE_ITEM_SMALLSHIELD + || iType == BASE_ITEM_TOWERSHIELD) + return TRUE; + return FALSE; + } + +int GetIsAmmo(object oItem) + { + int iType = GetBaseItemType(oItem); + if (iType == BASE_ITEM_ARROW + || iType == BASE_ITEM_BOLT + || iType == BASE_ITEM_BULLET) + return TRUE; + return FALSE; + } + +int GetIsLauncher(object oItem) + { + { + int iType = GetBaseItemType(oItem); + if (iType == BASE_ITEM_HEAVYCROSSBOW + || iType == BASE_ITEM_LIGHTCROSSBOW + || iType == BASE_ITEM_LONGBOW + || iType == BASE_ITEM_SHORTBOW + || iType == BASE_ITEM_SLING) + return TRUE; + return FALSE; + } + } + +int GetBaseArmorClass(object oItem) + { + return GetItemACValue(oItem) - GetEnchantmentBonus(oItem); + } + +int GetEnchantmentBonus(object oItem) + { + int i; + int iType = GetBaseItemType(oItem); + int ipItem; + if (GetIsArmor(oItem)) + ipItem = ITEM_PROPERTY_AC_BONUS; + else if (GetIsLauncher(oItem)) + ipItem = ITEM_PROPERTY_ATTACK_BONUS; + else + ipItem = ITEM_PROPERTY_ENHANCEMENT_BONUS; + return ReturnItemBonus(oItem,ipItem); + } + +int GetTotalEnchantmentValue(object oItem,int iMod) + { + int iEnc = GetLocalInt(oItem,"Enc"); + int iArmor = GetIsArmor(oItem); + int iWeapon = GetIsWeapon(oItem); + if (!iEnc && (iArmor|| iWeapon)) + { + iEnc = GetEnchantmentBonus(oItem); + if (iEnc > 0)// This seems like a lot of hidden loops runnig back to back. I know it has holes. Need to learn how to do the 2DA look ups properly before I can fix. + { + if (iWeapon) + { + if (GetWeaponRanged(oItem)) + { + if (IPGetItemHasProperty(oItem,ItemPropertyUnlimitedAmmo(IP_CONST_UNLIMITEDAMMO_BASIC),DURATION_TYPE_PERMANENT)) + iEnc+=1; + else if (IPGetItemHasProperty(oItem,ItemPropertyUnlimitedAmmo(IP_CONST_UNLIMITEDAMMO_1D6FIRE),DURATION_TYPE_PERMANENT,TRUE)) + iEnc+=2;// checks for all other unlimited ammo weapons. + if (IPGetItemHasProperty(oItem,ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE),DURATION_TYPE_PERMANENT)) // This property is used for all enchant the ammo weapons. + { + if (GetLocalInt(oItem,"DamageType") == IP_CONST_DAMAGETYPE_MAGICAL) + iEnc += 4; + else + iEnc+= 1; + } + } + else + { + if (IPGetItemHasProperty(oItem,ItemPropertyACBonus(1),DURATION_TYPE_PERMANENT,TRUE)) + iEnc+=1; // Checks for ALL defender weapons. + if (IPGetItemHasProperty(oItem,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6),DURATION_TYPE_PERMANENT)) + iEnc+=4; + else if (IPGetItemHasProperty(oItem,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6),DURATION_TYPE_PERMANENT,TRUE)) + iEnc+=1;// Checks for all all elemental weapons if not brillant + if (IPGetItemHasProperty(oItem,ItemPropertyKeen(),DURATION_TYPE_PERMANENT)) + iEnc+=1; + if (IPGetItemHasProperty(oItem,ItemPropertyBonusFeat(IP_CONST_FEAT_CLEAVE),DURATION_TYPE_PERMANENT)) + iEnc+=1; + if (IPGetItemHasProperty(oItem,ItemPropertyCastSpell(IP_CONST_CASTSPELL_BULLS_STRENGTH_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),DURATION_TYPE_PERMANENT)) + iEnc+=1; + if (IPGetItemHasProperty(oItem,ItemPropertyOnHitProps(IP_CONST_ONHIT_SLAYRACE,IP_CONST_ONHIT_SAVEDC_14,IP_CONST_RACIALTYPE_UNDEAD),DURATION_TYPE_PERMANENT)) + iEnc+=2; + if (IPGetItemHasProperty(oItem,ItemPropertyOnHitProps(IP_CONST_ONHIT_WOUNDING,IP_CONST_ONHIT_SAVEDC_20),DURATION_TYPE_PERMANENT)) + iEnc+=2; + if (IPGetItemHasProperty(oItem,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_SLOW,IP_CONST_SPELLLEVEL_5),DURATION_TYPE_PERMANENT)) + iEnc+=4; + if (IPGetItemHasProperty(oItem,ItemPropertyOnHitProps(IP_CONST_ONHIT_VORPAL,20),DURATION_TYPE_PERMANENT)) + iEnc+=5; + } + if (IPGetItemHasProperty(oItem,ItemPropertyEnhancementBonusVsRace(IP_CONST_RACIALTYPE_ABERRATION,2),DURATION_TYPE_PERMANENT,TRUE)) + iEnc+=2;// Checks for all bane weapons. NOTE This is abuseable but is very expensive for the PC to do so + if (IPGetItemHasProperty(oItem,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6),DURATION_TYPE_PERMANENT,TRUE)) + iEnc+=2;// Checks for all alignment weapons. NOTE This is abuseable but is very expensive for the PC to do so + if (IPGetItemHasProperty(oItem,ItemPropertyHaste(),DURATION_TYPE_PERMANENT)) + iEnc+=4; + } + else // Armor and Shields + { + if (GetIsShield(oItem)) + { + if (IPGetItemHasProperty(oItem,ItemPropertyBonusFeat(IP_CONST_FEAT_KNOCKDOWN),DURATION_TYPE_PERMANENT)) + iEnc+=1; + if (IPGetItemHasProperty(oItem,ItemPropertyOnHitCastSpell(SPELL_BLINDNESS_AND_DEAFNESS,4),DURATION_TYPE_PERMANENT)) + iEnc+=1; + if (IPGetItemHasProperty(oItem,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGESOAK_5_HP),DURATION_TYPE_PERMANENT)) + iEnc+=2; + if (IPGetItemHasProperty(oItem,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGESOAK_10_HP),DURATION_TYPE_PERMANENT)) + iEnc+=2; + } + else + { + if (IPGetItemHasProperty(oItem,ItemPropertySkillBonus(SKILL_TUMBLE,10),DURATION_TYPE_PERMANENT)) + iEnc+=1; + if (IPGetItemHasProperty(oItem,ItemPropertySkillBonus(SKILL_HIDE,10),DURATION_TYPE_PERMANENT)) + iEnc+=1; + if (IPGetItemHasProperty(oItem,ItemPropertySkillBonus(SKILL_MOVE_SILENTLY,10),DURATION_TYPE_PERMANENT)) + iEnc+=1; + if (IPGetItemHasProperty(oItem,ItemPropertyCastSpell(IP_CONST_CASTSPELL_SPELL_MANTLE_13,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),DURATION_TYPE_PERMANENT)) + iEnc+=5; + } + + if (IPGetItemHasProperty(oItem,ItemPropertyLight(IP_CONST_LIGHTBRIGHTNESS_BRIGHT,IP_CONST_LIGHTCOLOR_YELLOW),DURATION_TYPE_PERMANENT,TRUE)) + iEnc+=1; + if (IPGetItemHasProperty(oItem,ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_20),DURATION_TYPE_PERMANENT)) + iEnc+=5; + else if (IPGetItemHasProperty(oItem,ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_18),DURATION_TYPE_PERMANENT)) + iEnc+=4; + else if (IPGetItemHasProperty(oItem,ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_16),DURATION_TYPE_PERMANENT)) + iEnc+=3; + else if (IPGetItemHasProperty(oItem,ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_14),DURATION_TYPE_PERMANENT)) + iEnc+=2; + + if (IPGetItemHasProperty(oItem,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB),DURATION_TYPE_PERMANENT) + && IPGetItemHasProperty(oItem,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS),DURATION_TYPE_PERMANENT) + && IPGetItemHasProperty(oItem,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_KNOCKDOWN),DURATION_TYPE_PERMANENT)) + iEnc+=5; + else if (IPGetItemHasProperty(oItem,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS),DURATION_TYPE_PERMANENT)) + iEnc+=3; + else if (IPGetItemHasProperty(oItem,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB),DURATION_TYPE_PERMANENT)) + iEnc+=1; + + if (IPGetItemHasProperty(oItem,ItemPropertyTrueSeeing(),DURATION_TYPE_PERMANENT)) + iEnc+=3; + if (IPGetItemHasProperty(oItem,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGERESIST_10),DURATION_TYPE_PERMANENT)) + iEnc+=3; + if (IPGetItemHasProperty(oItem,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGERESIST_10),DURATION_TYPE_PERMANENT)) + iEnc+=3; + if (IPGetItemHasProperty(oItem,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGERESIST_10),DURATION_TYPE_PERMANENT)) + iEnc+=3; + if (IPGetItemHasProperty(oItem,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGERESIST_10),DURATION_TYPE_PERMANENT)) + iEnc+=3; + if (IPGetItemHasProperty(oItem,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGERESIST_10),DURATION_TYPE_PERMANENT)) + iEnc+=3; + if (IPGetItemHasProperty(oItem,ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,IP_CONST_DAMAGESOAK_5_HP),DURATION_TYPE_PERMANENT)) + iEnc+=3; + } + } + SetLocalInt(oItem,"Enc",iEnc); // Now that item total enchantment has been found store it for future use. + } + int iMW = GetLocalInt(oItem,"MW"); + if (iEnc > 0) + iMW = TRUE; + iEnc += iMod; + if (iEnc > 20) iEnc = 20; // This should not happen with a player made item but the random item generator CAN blow this limit. + int iGold = GetLocalInt(oItem,"BaseValue"); + int iGold2; + if (!iGold) + iGold = GetGoldPieceValue(oItem); + int iAC; + if (iArmor|| iWeapon) + { + switch (iEnc) + { + case 0: break; + case 1: {iGold2 += 2000;break;} + case 2: {iGold2 += 8000;break;} + case 3: {iGold2 += 18000;break;} + case 4: {iGold2 += 32000;break;} + case 5: {iGold2 += 50000;break;} + case 6: {iGold2 += 720000;break;} + case 7: {iGold2 += 980000;break;} + case 8: {iGold2 += 1280000;break;} + case 9: {iGold2 += 1620000;break;} + case 10: {iGold2 += 2000000;break;} + case 11: {iGold2 += 2420000;break;} + case 12: {iGold2 += 2880000;break;} + case 13: {iGold2 += 3380000;break;} + case 14: {iGold2 += 3920000;break;} + case 15: {iGold2 += 4500000;break;} + case 16: {iGold2 += 5120000;break;} + case 17: {iGold2 += 5780000;break;} + case 18: {iGold2 += 6480000;break;} + case 19: {iGold2 += 7220000;break;} + case 20: {iGold2 += 8000000;break;} + } + if (iArmor) + iGold2 = iGold2/2; + iGold += iGold2; + if (iMW) + { + if (iArmor) iGold += 150; + else iGold +=300; + } + } + return iGold; + } + +void DestroyGold(object oBox = OBJECT_SELF) + { + object oGold = GetFirstItemInInventory(oBox); + while (GetIsObjectValid(oGold)) + { + if (GetBaseItemType(oGold) == BASE_ITEM_GOLD) + DestroyObject(oGold); + oGold = GetNextItemInInventory(oBox); + } + } + +int ReturnItemBonus(object oItem, int ipConstant) + { + itemproperty ipFirst = GetFirstItemProperty(oItem); + int nBonus = 0; + while (GetIsItemPropertyValid(ipFirst) == TRUE) + { + if (GetItemPropertyType(ipFirst) == ipConstant) + { + int nSubType = GetItemPropertyCostTableValue(ipFirst); + //SpeakString("Found an attack bonus! SubType = " + IntToString(nSubType)); + nBonus = nBonus + (nSubType); + return nBonus; // * Quick exit. Got what I need + } + ipFirst = GetNextItemProperty(oItem); + } + //SpeakString("Attack Bonus = " + IntToString(nBonus)); + return nBonus; + } + +int GetBaneRace() + { + int iRace; + int iRoll = d100(); + if (iRoll <= 5) iRace = IP_CONST_RACIALTYPE_ABERRATION; + else if (iRoll <= 8) iRace = IP_CONST_RACIALTYPE_ANIMAL; + else if (iRoll <= 13) iRace = IP_CONST_RACIALTYPE_BEAST; + else if (iRoll <= 20) iRace = IP_CONST_RACIALTYPE_CONSTRUCT; + else if (iRoll <= 25) iRace = IP_CONST_RACIALTYPE_DRAGON; + else if (iRoll <= 30) iRace = IP_CONST_RACIALTYPE_ELEMENTAL; + else if (iRoll <= 35) iRace = IP_CONST_RACIALTYPE_FEY; + else if (iRoll <= 40) iRace = IP_CONST_RACIALTYPE_GIANT; + else if (iRoll <= 45) iRace = IP_CONST_RACIALTYPE_MAGICAL_BEAST; + else if (iRoll <= 50) + { + iRoll = d4(); + if (iRoll = 1) iRace = IP_CONST_RACIALTYPE_HUMANOID_GOBLINOID; + else if (iRoll = 2) iRace = IP_CONST_RACIALTYPE_HUMANOID_MONSTROUS; + else if (iRoll = 3) iRace = IP_CONST_RACIALTYPE_HUMANOID_ORC; + else if (iRoll = 4) iRace = IP_CONST_RACIALTYPE_HUMANOID_REPTILIAN; + } + else if (iRoll <= 77) iRace = IP_CONST_RACIALTYPE_OUTSIDER; + else if (iRoll <= 85) iRace = IP_CONST_RACIALTYPE_SHAPECHANGER; + else if (iRoll <= 92) iRace = IP_CONST_RACIALTYPE_UNDEAD; + else if (iRoll <= 94) iRace = IP_CONST_RACIALTYPE_VERMIN; + else + { + iRoll = Random(7)+1; + if (iRoll = 1) iRace = IP_CONST_RACIALTYPE_DWARF; + else if (iRoll = 2) iRace = IP_CONST_RACIALTYPE_ELF; + else if (iRoll = 3) iRace = IP_CONST_RACIALTYPE_GNOME; + else if (iRoll = 4) iRace = IP_CONST_RACIALTYPE_HALFELF; + else if (iRoll = 5) iRace = IP_CONST_RACIALTYPE_HALFLING; + else if (iRoll = 6) iRace = IP_CONST_RACIALTYPE_HALFORC; + else iRace = IP_CONST_RACIALTYPE_HUMAN; + } + return iRace; + } + +void MageHand (object oDoor) + { + effect eVis = EffectVisualEffect(VFX_DUR_BIGBYS_GRASPING_HAND); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oDoor,6.0); + DelayCommand(3.0,AssignCommand(oDoor,ActionOpenDoor(oDoor))); + } + +void Fly() + { + object oFall = GetNearestObjectByTag("Fall"); + object oTrap = GetLocalObject(oFall,"Dest"); + if (GetDistanceToObject(oFall) <= 5.0) + { + if (GetIsObjectValid(oTrap)) + JumpToLocation(GetLocation(oTrap)); + } + } + +int GetItemXPCost(object oItem,int iMod = 0) + { + return GetTotalEnchantmentValue(oItem,iMod)/25; + } diff --git a/src/module/nss/inc_loot_armor.nss b/src/module/nss/inc_loot_armor.nss new file mode 100644 index 0000000..92a2429 --- /dev/null +++ b/src/module/nss/inc_loot_armor.nss @@ -0,0 +1,742 @@ +#include "prc_x2_itemprop" +object RandomizeArmorColor(object oArmor); +// Returns a randomized appearance suit of armor. +object RandomizeArmor(object oArmor); +// Random Armor Type Table +object Table84(); +// Random Shield Type Table +object Table85(); +//Minor Armor and Shields Table +object Table83a(int iSpecial = 0, object oArmor =OBJECT_INVALID,int iEnc = 0); +//Medium Armor and Shields Table +object Table83b(int iSpecial = 0, object oArmor =OBJECT_INVALID,int iEnc = 0); +//Major Armor and Shields Table +object Table83c(int iSpecial = 0, object oArmor =OBJECT_INVALID,int iEnc = 0); + +int Table86a(int iSpecial, object oArmor, int iEnc); +int Table87a(int iSpecial, object oArmor, int iEnc); +int Table86b(int iSpecial, object oArmor, int iEnc); +int Table87b(int iSpecial, object oArmor, int iEnc); +int Table86c(int iSpecial, object oArmor, int iEnc); +int Table87c(int iSpecial, object oArmor, int iEnc); + +object Table88b(); +object Table88c(); + +object Table89b(); +object Table89c(); + +object Table83a(int iSpecial, object oArmor, int iEnc) + { + int iRoll = d100(); + string sString; + object oArmor; + int iSpecial, iType; + if (iRoll <= 60) {iEnc += 1;IPSafeAddItemProperty(oArmor = Table85(),ItemPropertyACBonus(1));} + else if (iRoll <= 80){iEnc += 1;IPSafeAddItemProperty(oArmor = Table84(),ItemPropertyACBonus(1));} + else if (iRoll <= 85){iEnc += 2;IPSafeAddItemProperty(oArmor = Table85(),ItemPropertyACBonus(2));} + else if (iRoll <= 87){iEnc += 2;IPSafeAddItemProperty(oArmor = Table84(),ItemPropertyACBonus(2));} + else + { + oArmor = Table83a(iSpecial+=1,oArmor,iEnc); + iSpecial = 0;// Reset varible to zero as special properties were set in the subfunction. + } + if (iSpecial) + { + iType = GetBaseItemType(oArmor); + if (iType == BASE_ITEM_LARGESHIELD + || iType == BASE_ITEM_SMALLSHIELD + || iType == BASE_ITEM_TOWERSHIELD) + iEnc = Table87a(iSpecial,oArmor,iEnc); + else + iEnc = Table86a(iSpecial,oArmor,iEnc); + } + SetLocalInt(oArmor,"Enc",iEnc); + SetLocalInt(oArmor,"MW",TRUE); + return oArmor; + } + +object Table83b(int iSpecial,object oArmor, int iEnc) + { + int iRoll = d100(); + string sString; + int iSpecial, iType; + if (iRoll <= 5) {iEnc += 1;IPSafeAddItemProperty(oArmor = Table85(),ItemPropertyACBonus(1));} + else if (iRoll <= 10) {iEnc += 1;IPSafeAddItemProperty(oArmor = Table84(),ItemPropertyACBonus(1));} + else if (iRoll <= 20) {iEnc += 2;IPSafeAddItemProperty(oArmor = Table85(),ItemPropertyACBonus(2));} + else if (iRoll <= 30) {iEnc += 2;IPSafeAddItemProperty(oArmor = Table84(),ItemPropertyACBonus(2));} + else if (iRoll <= 40) {iEnc += 3;IPSafeAddItemProperty(oArmor = Table85(),ItemPropertyACBonus(3));} + else if (iRoll <= 50) {iEnc += 3;IPSafeAddItemProperty(oArmor = Table84(),ItemPropertyACBonus(3));} + else if (iRoll <= 55) {iEnc += 4;IPSafeAddItemProperty(oArmor = Table85(),ItemPropertyACBonus(4));} + else if (iRoll <= 57) {iEnc += 4;IPSafeAddItemProperty(oArmor = Table84(),ItemPropertyACBonus(4));} + else if (iRoll <= 88) {oArmor = Table88b();iSpecial = 0;} + else if (iRoll <= 89) {oArmor = Table89b();iSpecial = 0;} + else + { + oArmor = Table83b(iSpecial+=1,oArmor,iEnc); + iSpecial = 0; + } + if (iSpecial) + { + iType = GetBaseItemType(oArmor); + if (iType == BASE_ITEM_LARGESHIELD + || iType == BASE_ITEM_SMALLSHIELD + || iType == BASE_ITEM_TOWERSHIELD) + iEnc = Table87b(iSpecial,oArmor,iEnc); + else + iEnc = Table86b(iSpecial,oArmor,iEnc); + } + SetLocalInt(oArmor,"Enc",iEnc); + SetLocalInt(oArmor,"MW",TRUE); + return oArmor; + } + +object Table83c(int iSpecial, object oArmor, int iEnc) + { + int iRoll = d100(); + string sString; + int iSpecial, iType; + if (iRoll <= 8) {iEnc += 3;IPSafeAddItemProperty(oArmor = Table85(),ItemPropertyACBonus(3));} + else if (iRoll <= 16) {iEnc += 3;IPSafeAddItemProperty(oArmor = Table84(),ItemPropertyACBonus(3));} + else if (iRoll <= 27) {iEnc += 4;IPSafeAddItemProperty(oArmor = Table85(),ItemPropertyACBonus(4));} + else if (iRoll <= 38) {iEnc += 4;IPSafeAddItemProperty(oArmor = Table84(),ItemPropertyACBonus(4));} + else if (iRoll <= 49) {iEnc += 5;IPSafeAddItemProperty(oArmor = Table85(),ItemPropertyACBonus(5));} + else if (iRoll <= 57) {iEnc += 5;IPSafeAddItemProperty(oArmor = Table84(),ItemPropertyACBonus(5));} + else if (iRoll <= 60) {oArmor = Table88c();iSpecial = 0;} + else if (iRoll <= 63) {oArmor = Table89c();iSpecial = 0;} + else + { + oArmor = Table83c(iSpecial+=1,oArmor,iEnc); + iSpecial = 0; + } + if (iSpecial) + { + iType = GetBaseItemType(oArmor); + if (iType == BASE_ITEM_LARGESHIELD + || iType == BASE_ITEM_SMALLSHIELD + || iType == BASE_ITEM_TOWERSHIELD) + iEnc = Table87c(iSpecial,oArmor,iEnc); + else + iEnc = Table86c(iSpecial,oArmor,iEnc); + } + SetLocalInt(oArmor,"Enc",iEnc); + SetLocalInt(oArmor,"MW",TRUE); + return oArmor; + } + +object Table84() + { + int iRoll = d100(); + string sString; + object oArmor; + if (iRoll <= 1) sString = "nw_aarcl009"; + else if (iRoll <= 2) sString = "nw_aarcl001"; + else if (iRoll <= 12) sString = "nw_aarcl008"; + else if (iRoll <= 27) sString = "nw_aarcl002"; + else if (iRoll <= 42) sString = "nw_aarcl012"; + else if (iRoll <= 43) sString = "nw_aarcl003"; + else if (iRoll <= 44) sString = "nw_aarcl004"; + else if (iRoll <= 57) sString = "nw_aarcl010"; + else if (iRoll <= 58) sString = "nw_aarcl005"; + else if (iRoll <= 59) sString = "nw_aarcl011"; + else if (iRoll <= 60) sString = "nw_aarcl006"; + else sString = "nw_aarcl007"; + oArmor = CreateItemOnObject(sString); + oArmor = RandomizeArmor(oArmor); + return oArmor; + } + +object Table85() + { + int iRoll = d100(); + string sString; + if (iRoll <= 20) sString = "nw_ashsw001"; + else if (iRoll <= 95) sString = "nw_ashlw001"; + else sString = "nw_ashto001"; + object oItem = CreateItemOnObject(sString); + SetLocalInt(oItem,"BaseValue",GetGoldPieceValue(oItem)); + return oItem; + } + +int Table86a(int iSpecial, object oArmor, int iEnc) + { + int i,iRoll,iTemp; + for (i = 1; i<= iSpecial; i+=1) + { + iRoll = d100(); + if (iRoll <= 30) + { + iEnc += 1; + switch(Random(7)+1) + { + case 1: {iTemp = IP_CONST_LIGHTCOLOR_BLUE;break;} + case 2: {iTemp = IP_CONST_LIGHTCOLOR_GREEN;break;} + case 3: {iTemp = IP_CONST_LIGHTCOLOR_ORANGE;break;} + case 4: {iTemp = IP_CONST_LIGHTCOLOR_PURPLE;break;} + case 5: {iTemp = IP_CONST_LIGHTCOLOR_RED;break;} + case 6: {iTemp = IP_CONST_LIGHTCOLOR_WHITE;break;} + case 7: {iTemp = IP_CONST_LIGHTCOLOR_YELLOW;break;} + }; + IPSafeAddItemProperty(oArmor,ItemPropertyLight(IP_CONST_LIGHTBRIGHTNESS_BRIGHT,iTemp)); + } + else if (iRoll <= 52) + { + iEnc += 1; + IPSafeAddItemProperty(oArmor,ItemPropertySkillBonus(SKILL_TUMBLE,10)); + } + else if (iRoll <= 74) + { + iEnc += 1; + IPSafeAddItemProperty(oArmor,ItemPropertySkillBonus(SKILL_HIDE,10)); + } + else if (iRoll <= 96) + { + iEnc += 1; + IPSafeAddItemProperty(oArmor,ItemPropertySkillBonus(SKILL_MOVE_SILENTLY,10)); + } + else if (iRoll <= 98) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS)); + } + else + iSpecial += 2; + } + return iEnc; + } + +int Table86b(int iSpecial, object oArmor, int iEnc) + { + int i,iRoll,iTemp; + for (i = 1; i<= iSpecial; i+=1) + { + iRoll = d100(); + if (iRoll <= 2) + { + iEnc += 1; + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB)); + } + else if (iRoll <= 7) + { + iEnc += 1; + switch(Random(7)+1) + { + case 1: {iTemp = IP_CONST_LIGHTCOLOR_BLUE;break;} + case 2: {iTemp = IP_CONST_LIGHTCOLOR_GREEN;break;} + case 3: {iTemp = IP_CONST_LIGHTCOLOR_ORANGE;break;} + case 4: {iTemp = IP_CONST_LIGHTCOLOR_PURPLE;break;} + case 5: {iTemp = IP_CONST_LIGHTCOLOR_RED;break;} + case 6: {iTemp = IP_CONST_LIGHTCOLOR_WHITE;break;} + case 7: {iTemp = IP_CONST_LIGHTCOLOR_YELLOW;break;} + }; + IPSafeAddItemProperty(oArmor,ItemPropertyLight(IP_CONST_LIGHTBRIGHTNESS_BRIGHT,iTemp)); + } + else if (iRoll <= 19) + { + iEnc += 1; + IPSafeAddItemProperty(oArmor,ItemPropertySkillBonus(SKILL_TUMBLE,10)); + } + else if (iRoll <= 30) + { + iEnc += 1; + IPSafeAddItemProperty(oArmor,ItemPropertySkillBonus(SKILL_HIDE,10)); + } + else if (iRoll <= 49) + { + iEnc += 1; + IPSafeAddItemProperty(oArmor,ItemPropertySkillBonus(SKILL_MOVE_SILENTLY,10)); + } + else if (iRoll <= 50) + { + iEnc += 2; + IPSafeAddItemProperty(oArmor,ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_14)); + } + else if (iRoll <= 60) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyTrueSeeing()); + } + else if (iRoll <= 65) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS)); + } + else if (iRoll <= 66) + { + iEnc += 2; + IPSafeAddItemProperty(oArmor,ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_16)); + } + else if (iRoll <= 71) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 76) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 81) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 86) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 91) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 94) + { + iEnc += 4; + IPSafeAddItemProperty(oArmor,ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_18)); + } + else if (iRoll <= 95) + { + iEnc += 5; + IPSafeAddItemProperty(oArmor,ItemPropertyCastSpell(SPELL_ETHEREALNESS,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY)); + } + else if (iRoll <= 98) + { + iEnc += 5; + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB)); + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS)); + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_KNOCKDOWN)); + } + else + iSpecial += 2; + } + return iEnc; + } + +int Table86c(int iSpecial, object oArmor, int iEnc) + { + int i,iRoll,iTemp; + for (i = 1; i<= iSpecial; i+=1) + { + iRoll = d100(); + if (iRoll <= 2) + { + iEnc += 1; + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB)); + } + else if (iRoll <= 8) + { + iEnc += 1; + switch(Random(7)+1) + { + case 1: {iTemp = IP_CONST_LIGHTCOLOR_BLUE;break;} + case 2: {iTemp = IP_CONST_LIGHTCOLOR_GREEN;break;} + case 3: {iTemp = IP_CONST_LIGHTCOLOR_ORANGE;break;} + case 4: {iTemp = IP_CONST_LIGHTCOLOR_PURPLE;break;} + case 5: {iTemp = IP_CONST_LIGHTCOLOR_RED;break;} + case 6: {iTemp = IP_CONST_LIGHTCOLOR_WHITE;break;} + case 7: {iTemp = IP_CONST_LIGHTCOLOR_YELLOW;break;} + }; + IPSafeAddItemProperty(oArmor,ItemPropertyLight(IP_CONST_LIGHTBRIGHTNESS_BRIGHT,iTemp)); + } + else if (iRoll <= 9) + { + iEnc += 1; + IPSafeAddItemProperty(oArmor,ItemPropertySkillBonus(SKILL_TUMBLE,10)); + } + else if (iRoll <= 11) + { + iEnc += 1; + IPSafeAddItemProperty(oArmor,ItemPropertySkillBonus(SKILL_HIDE,10)); + } + else if (iRoll <= 14) + { + iEnc += 1; + IPSafeAddItemProperty(oArmor,ItemPropertySkillBonus(SKILL_MOVE_SILENTLY,10)); + } + else if (iRoll <= 16) + { + iEnc += 2; + IPSafeAddItemProperty(oArmor,ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_14)); + } + else if (iRoll <= 21) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyTrueSeeing()); + } + else if (iRoll <= 23) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,IP_CONST_DAMAGESOAK_5_HP)); + } + else if (iRoll <= 27) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS)); + } + else if (iRoll <= 29) + { + iEnc += 2; + IPSafeAddItemProperty(oArmor,ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_16)); + } + else if (iRoll <= 31) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 41) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 51) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 61) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 64) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 67) + { + iEnc += 4; + IPSafeAddItemProperty(oArmor,ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_18)); + } + else if (iRoll <= 69) + { + iEnc += 5; + IPSafeAddItemProperty(oArmor,ItemPropertyCastSpell(SPELL_ETHEREALNESS,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY)); + } + else if (iRoll <= 72) + { + iEnc += 5; + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB)); + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS)); + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_KNOCKDOWN)); + } + else if (iRoll <= 74) + { + iEnc += 4; + IPSafeAddItemProperty(oArmor,ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_20)); + } + else + iSpecial += 2; + } + return iEnc; + } + +int Table87a(int iSpecial, object oArmor, int iEnc) + { + int i,iRoll,iTemp; + for (i = 1; i<= iSpecial; i+=1) + { + iRoll = d100(); + if (iRoll <= 30) + { + iEnc += 1; + IPSafeAddItemProperty(oArmor,ItemPropertyBonusFeat(IP_CONST_FEAT_KNOCKDOWN)); + } + else if (iRoll <= 50) + { + iEnc += 1; + IPSafeAddItemProperty(oArmor,ItemPropertyOnHitCastSpell(SPELL_BLINDNESS_AND_DEAFNESS,4)); + } + else if (iRoll <= 60) + { + iEnc += 1; + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB)); + } + else if (iRoll <= 99) + { + iEnc += 2; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGESOAK_5_HP)); + } + else + iSpecial += 2; + } + return iEnc; + } + +int Table87b(int iSpecial, object oArmor, int iEnc) + { + int i,iRoll,iTemp; + for (i = 1; i<= iSpecial; i+=1) + { + iRoll = d100(); + if (iRoll <= 10) + { + iEnc += 2; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGESOAK_5_HP)); + } + else if (iRoll <= 16) + { + iEnc += 2; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGESOAK_10_HP)); + } + else if (iRoll <= 20) + { + iEnc += 2; + IPSafeAddItemProperty(oArmor,ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_14)); + } + else if (iRoll <= 25) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyTrueSeeing()); + } + else if (iRoll <= 30) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS)); + } + else if (iRoll <= 40) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 50) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 60) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 70) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 80) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 90) + { + iEnc += 5; + IPSafeAddItemProperty(oArmor,ItemPropertyCastSpell(IP_CONST_CASTSPELL_SPELL_MANTLE_13,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY)); + } + else + iSpecial += 2; + } + return iEnc; + } + +int Table87c(int iSpecial, object oArmor, int iEnc) + { + int i,iRoll,iTemp; + for (i = 1; i<= iSpecial; i+=1) + { + iRoll = d100(); + if (iRoll <= 15) + { + iEnc += 2; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGESOAK_10_HP)); + } + else if (iRoll <= 20) + { + iEnc += 2; + IPSafeAddItemProperty(oArmor,ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_14)); + } + else if (iRoll <= 25) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyTrueSeeing()); + } + else if (iRoll <= 35) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS)); + } + else if (iRoll <= 38) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 41) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 44) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 47) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 50) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGERESIST_10)); + } + else if (iRoll <= 55) + { + iEnc += 3; + IPSafeAddItemProperty(oArmor,ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_16)); + } + else if (iRoll <= 60) + { + iEnc += 4; + IPSafeAddItemProperty(oArmor,ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_18)); + } + else if (iRoll <= 65) + { + iEnc += 5; + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB)); + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS)); + IPSafeAddItemProperty(oArmor,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_KNOCKDOWN)); + } + else if (iRoll <= 70) + { + iEnc += 5; + IPSafeAddItemProperty(oArmor,ItemPropertyCastSpell(IP_CONST_CASTSPELL_SPELL_MANTLE_13,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY)); + } + else if (iRoll <= 80) + { + iEnc += 4; + IPSafeAddItemProperty(oArmor,ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_20)); + } + else + iSpecial += 2; + } + return iEnc; + } + +object Table88b() + { + int iRoll = d100(); + string sString; + if (iRoll <= 10) + sString = "chains601"; + else if (iRoll <= 25) + sString = "chain601"; + else if (iRoll <= 35) + sString = "hide601"; + else if (iRoll <= 45) + sString = "breast601"; + else if (iRoll <= 70) + sString = "fplate601"; + else if (iRoll <= 80) + sString = "fplate602"; + else if (iRoll <= 90) + sString = "banded601"; + else if (iRoll <= 100) + sString = "breast602"; + return CreateItemOnObject(sString); + } + +object Table88c() + { + int iRoll = d100(); + string sString; + if (iRoll <= 10) + sString = "fplate602"; + else if (iRoll <= 40) + sString = "banded601"; + else if (iRoll <= 60) + sString = "breast602"; + else if (iRoll <= 80) + return Table88c();//Reroll + else if (iRoll <= 100) + return Table88c();//Reroll + return CreateItemOnObject(sString); + } + +object Table89b() + { + int iRoll = d100(); + string sString; + if (iRoll <= 10) + sString = "sshield601"; + else if (iRoll <= 18) + sString = "lshield601"; + else if (iRoll <= 25) + sString = "lshield602"; + else if (iRoll <= 45) + sString = "lshield603"; + else if (iRoll <= 65) + sString = "sshield602"; + else if (iRoll <= 90) + sString = "lshield604"; + else if (iRoll <= 100) + sString = "lshield605"; + return CreateItemOnObject(sString); + } + +object Table89c() + { + int iRoll = d100(); + string sString; + if (iRoll <= 20) + sString = "lshield603"; + else if (iRoll <= 40) + sString = "sshield602"; + else if (iRoll <= 60) + sString = "lshield604"; + else if (iRoll <= 80) + sString = "lshield605"; + else if (iRoll <= 100) + sString = "lshield606"; + return CreateItemOnObject(sString); + } + +object RandomizeArmor(object oArmor) + { + int iLow,iHigh; + int iAC = GetItemACValue(oArmor); + object oArmor2; + switch (iAC) + { + case 0: {iLow = 0; iHigh = 10;break;} + case 1: {iLow = 11; iHigh = 13;break;} + case 2: {iLow = 14; iHigh = 20;break;} + case 3: {iLow = 21; iHigh = 24;break;} + case 4: {iLow = 25; iHigh = 31;break;} + case 5: {iLow = 32; iHigh = 36;break;} + case 6: {iLow = 37; iHigh = 41;break;} + case 7: {iLow = 42; iHigh = 46;break;} + case 8: {iLow = 47; iHigh = 51;break;} + }; + int iRange = iHigh - iLow +1; + int iNum = (Random(iRange)+iLow); + oArmor2 = CopyItemAndModify(oArmor,ITEM_APPR_TYPE_ARMOR_MODEL,ITEM_APPR_ARMOR_MODEL_TORSO ,iNum,TRUE); + DestroyObject(oArmor); + oArmor = RandomizeArmorColor(oArmor2); + return oArmor; + } + +object RandomizeArmorColor(object oArmor) + { + int i,iColor; + object oArmor2; + for (i = 1; i <= 6; i++) + { + switch (i) + { + case 1:{iColor = ITEM_APPR_ARMOR_COLOR_CLOTH1;break;} + case 2:{iColor = ITEM_APPR_ARMOR_COLOR_CLOTH2;break;} + case 3:{iColor = ITEM_APPR_ARMOR_COLOR_LEATHER1;break;} + case 4:{iColor = ITEM_APPR_ARMOR_COLOR_LEATHER2;break;} + case 5:{iColor = ITEM_APPR_ARMOR_COLOR_METAL1;break;} + case 6:{iColor = ITEM_APPR_ARMOR_COLOR_METAL2;break;} + }; + oArmor2 = CopyItemAndModify(oArmor,ITEM_APPR_TYPE_ARMOR_COLOR,iColor,Random(64),TRUE); + DestroyObject(oArmor); + oArmor = oArmor2; + } + return oArmor; + } diff --git a/src/module/nss/inc_loot_coin.nss b/src/module/nss/inc_loot_coin.nss new file mode 100644 index 0000000..c9bc238 --- /dev/null +++ b/src/module/nss/inc_loot_coin.nss @@ -0,0 +1,159 @@ +// Subfunction of GenerateLoot. +// This generates the proper amount of loot for an encounter, determined by the iCR. +// iCoins is a muliplier. +void GenerateCoin(object oContainer,int iCR, int iCoins = 1); +void GenerateCoin(object oMonster,int iCR, int iCoins) + { + int iRoll = d100(); + int iAmount,iRoll2; + if (iCR > 20) + iCR = 20; + switch (iCR) + { + case 1: + { + if (iRoll <= 14) break; + else if (iRoll <= 29) {iAmount = d6()*10;break;} + else if (iRoll <= 52) {iAmount = d8()*10;break;} + else if (iRoll <= 95) {iAmount = d8(2) *10;break;} + else {iAmount = d4()*100;break;} + } + case 2: + { + if (iRoll <= 13) break; + else if (iRoll <= 23) {iAmount = d10()*10;break;} + else if (iRoll <= 43) {iAmount = d10(2)*10;break;} + else if (iRoll <= 95) {iAmount = d10(4)*10;break;} + else {iAmount = d8(2)*100;break;} + } + case 3: + { + if (iRoll <= 11) break; + else if (iRoll <= 21) {iAmount = d10(2)*10;break;} + else if (iRoll <= 41) {iAmount = d8(4)*10;break;} + else if (iRoll <= 95) {iAmount = d4()*100;break;} + else {iAmount = d10()*100;break;} + } + case 4: + { + if (iRoll <= 11) break; + else if (iRoll <= 21) {iAmount = d10(3)*10;break;} + else if (iRoll <= 41) {iAmount = d12(4)*10;break;} + else if (iRoll <= 95) {iAmount = d6()*100;break;} + else {iAmount = d8()*100;break;} + } + case 5: + { + if (iRoll <= 10) break; + else if (iRoll <= 19) {iAmount = d4()*100;break;} + else if (iRoll <= 38) {iAmount = d6()*100;break;} + else if (iRoll <= 95) {iAmount = d8()*100;break;} + else {iAmount = d10()*100;break;} + } + case 6: + { + if (iRoll <= 10) break; + else if (iRoll <= 18) {iAmount = d6()*100;break;} + else if (iRoll <= 37) {iAmount = d8()*100;break;} + else if (iRoll <= 95) {iAmount = d10()*100;break;} + else {iAmount = d12()*100;break;} + } + case 7: + { + if (iRoll <= 11) break; + else if (iRoll <= 18) {iAmount = d10()*100;break;} + else if (iRoll <= 35) {iAmount = d12()*100;break;} + else if (iRoll <= 93) {iAmount = d6(2)*100;break;} + else {iAmount = d4(3)*100;break;} + } + case 8: + { + if (iRoll <= 10) break; + else if (iRoll <= 15) {iAmount = d12()*100;break;} + else if (iRoll <= 29) {iAmount = d6(2)*100;break;} + else if (iRoll <= 87) {iAmount = d8(2)*100;break;} + else {iAmount = d6(3)*100;break;} + } + case 9: + { + if (iRoll <= 10) break; + else if (iRoll <= 15) {iAmount = d6(2)*100;break;} + else if (iRoll <= 29) {iAmount = d8(2)*100;break;} + else if (iRoll <= 85) {iAmount = d4(5)*100;break;} + else {iAmount = d12(2)*100;break;} + } + case 10: + { + if (iRoll <= 10) break; + else if (iRoll <= 24) {iAmount = d10(2)*100;break;} + else if (iRoll <= 79) {iAmount = d4(6)*100;break;} + else {iAmount = d6(5)*100;break;} + } + case 11: + { + if (iRoll <= 8) break; + else if (iRoll <= 14) {iAmount = d10(3)*100;break;} + else if (iRoll <= 75) {iAmount = d8(4)*100;break;} + else {iAmount = d10(4)*100;break;} + } + case 12: + { + if (iRoll <= 8) break; + else if (iRoll <= 14) {iAmount = d12(3)*100;break;} + else if (iRoll <= 75) {iAmount = d4()*1000;break;} + else {iAmount = d4()*1000;break;} + } + case 13: + { + if (iRoll <= 8) break; + else if (iRoll <= 75) {iAmount = d4()*1000;break;} + else {iAmount = d10()*1000;break;} + } + case 14: + { + if (iRoll <= 8) break; + else if (iRoll <= 75) {iAmount = d6()*1000;break;} + else {iAmount = d12()*1000;break;} + } + case 15: + { + if (iRoll <= 3) break; + else if (iRoll <= 74) {iAmount = d8()*1000;break;} + else {iAmount = d4(3)*1000;break;} + } + case 16: + { + if (iRoll <= 3) break; + else if (iRoll <= 74) {iAmount = d12()*1000;break;} + else {iAmount = d4(3)*1000;break;} + } + case 17: + { + if (iRoll <= 3) break; + else if (iRoll <= 68) {iAmount = d4(3)*1000;break;} + else {iAmount = d10(2)*1000;break;} + } + case 18: + { + if (iRoll <= 2) break; + else if (iRoll <= 65) {iAmount = d6(3)*1000;break;} + else {iAmount = d4(5)*1000;break;} + } + case 19: + { + if (iRoll <= 2) break; + else if (iRoll <= 65) {iAmount = d8(3)*1000;break;} + else {iAmount = d10(3)*1000;break;} + } + case 20: + { + if (iRoll <= 2) break; + else if (iRoll <= 65) {iAmount = d8(4)*1000;break;} + else {iAmount = d10(4)*1000;break;} + } + }; + iAmount = iAmount * iCoins; + CreateItemOnObject("nw_it_gold001",oMonster,iAmount); + } + +// void main(){} diff --git a/src/module/nss/inc_loot_goods.nss b/src/module/nss/inc_loot_goods.nss new file mode 100644 index 0000000..c45180f --- /dev/null +++ b/src/module/nss/inc_loot_goods.nss @@ -0,0 +1,184 @@ +// Generates goods as per table 7-4 +void GenerateGoods(object oContainer,int iCR, int iGoods); +// Sub function of Generate Goods +void GenerateGems(int iNumber, object oContainer = OBJECT_SELF, int iGoods = 1); +// Sub function of Generate Goods +void GenerateArt(int iNumber, object oContainer = OBJECT_SELF, int iMulti = 1); + +void GenerateGoods(object oMonster,int iCR, int iGoods) + { + int iRoll = d100(); + int iGem,iArt; + if (iCR > 20) + iCR = 20; + switch (iCR) + { + case 1: + { + if (iRoll <= 90) break; + else if (iRoll <= 95) {iGem = 1;break;} + else {iArt = 1;break;} + } + case 2: + { + if (iRoll <= 81) break; + else if (iRoll <= 95) {iGem = d3();break;} + else {iArt = d3();break;} + } + case 3: + { + if (iRoll <= 77) break; + else if (iRoll <= 95) {iGem = d3();break;} + else {iArt = d3();break;} + } + case 4: + { + if (iRoll <= 70) break; + else if (iRoll <= 95) {iGem = d4();break;} + else {iArt = d3();break;} + } + case 5: + { + if (iRoll <= 60) break; + else if (iRoll <= 95) {iGem = d4();break;} + else {iArt = d4();break;} + } + case 6: + { + if (iRoll <= 56) break; + else if (iRoll <= 92) {iGem = d4();break;} + else {iArt = d4();break;} + } + case 7: + { + if (iRoll <= 48) break; + else if (iRoll <= 88) {iGem = d4();break;} + else {iArt = d4();break;} + } + case 8: + { + if (iRoll <= 45) break; + else if (iRoll <= 85) {iGem = d6();break;} + else {iArt = d4();break;} + } + case 9: + { + if (iRoll <= 40) break; + else if (iRoll <= 80) {iGem = d8();break;} + else {iArt = d4();break;} + } + case 10: + { + if (iRoll <= 35) break; + else if (iRoll <= 79) {iGem = d8();break;} + else {iArt = d6();break;} + } + case 11: + { + if (iRoll <= 24) break; + else if (iRoll <= 74) {iGem = d10();break;} + else {iArt = d6();break;} + } + case 12: + { + if (iRoll <= 17) break; + else if (iRoll <= 70) {iGem = d10();break;} + else {iArt = d8();break;} + } + case 13: + { + if (iRoll <= 11) break; + else if (iRoll <= 66) {iGem = d12();break;} + else {iArt = d10();break;} + } + case 14: + { + if (iRoll <= 11) break; + else if (iRoll <= 66) {iGem = d8(2);break;} + else {iArt = d6(2);break;} + } + case 15: + { + if (iRoll <= 9) break; + else if (iRoll <= 65) {iGem = d10(2);break;} + else {iArt = d8(2);break;} + } + case 16: + { + if (iRoll <= 7) break; + else if (iRoll <= 64) {iGem = d6(4);break;} + else {iArt = d10(2);break;} + } + case 17: + { + if (iRoll <= 4) break; + else if (iRoll <= 63) {iGem = d8(4);break;} + else {iArt = d8(3);break;} + } + case 18: + { + if (iRoll <= 4) break; + else if (iRoll <= 54) {iGem = d12(3);break;} + else {iArt = d10(3);break;} + } + case 19: + { + if (iRoll <= 3) break; + else if (iRoll <= 50) {iGem = d6(6);break;} + else {iArt = d6(6);break;} + } + case 20: + { + if (iRoll <= 2) break; + else if (iRoll <= 38) {iGem = d10(4);break;} + else {iArt = d6(7);break;} + } + }; + if (iGem) + GenerateGems(iGem , oMonster, iGoods); + else if (iArt) + GenerateArt(iArt , oMonster, iGoods); + } + +void GenerateGems(int iNumber, object oContainer, int iMulti) + { + int i,iRoll; + string sResRef; + for (i = 1; i <= iNumber * iMulti; i++) + { + iRoll = d100(); + if (iRoll <= 25) sResRef = "rdg_gem101"; + else if (iRoll <= 50) sResRef = "rdg_gem201"; + else if (iRoll <= 70) sResRef = "rdg_gem301"; + else if (iRoll <= 90) sResRef = "rdg_gem401"; + else if (iRoll <= 99) sResRef = "rdg_gem501"; + else sResRef = "rdg_gem601"; + // Designed for future expandability. + CreateItemOnObject(sResRef, oContainer); + } + } + +void GenerateArt(int iNumber, object oContainer, int iMulti) + { + int i,iRoll; + string sResRef; + for (i = 1; i <= iNumber * iMulti; i++) + { + iRoll = d100(); + if (iRoll <= 10) sResRef = "rdg_art101"; + else if (iRoll <= 25) sResRef = "rdg_art201"; + else if (iRoll <= 40) sResRef = "rdg_art301"; + else if (iRoll <= 50) sResRef = "rdg_art401"; + else if (iRoll <= 60) sResRef = "rdg_art501"; + else if (iRoll <= 70) sResRef = "rdg_art601"; + else if (iRoll <= 80) sResRef = "rdg_art701"; + else if (iRoll <= 85) sResRef = "rdg_art801"; + else if (iRoll <= 90) sResRef = "rdg_art901"; + else if (iRoll <= 95) sResRef = "rdg_art1001"; + else if (iRoll <= 99) sResRef = "rdg_art1101"; + else sResRef = "rdg_art1201"; + // Designed for future expandability. + CreateItemOnObject(sResRef, oContainer); + } + } + diff --git a/src/module/nss/inc_loot_items.nss b/src/module/nss/inc_loot_items.nss new file mode 100644 index 0000000..7c8fdfb --- /dev/null +++ b/src/module/nss/inc_loot_items.nss @@ -0,0 +1,348 @@ +/* Tables 7-7*/ +#include "inc_loot_mund" +/* Table 8-3*/ +#include "inc_loot_armor" +/* Table 8-10*/ +#include "inc_loot_weapons" +/* Table 8-18*/ +#include "inc_loot_potions" +/* Table 8-19*/ +#include "inc_loot_rings" +/* Table 8-20*/ +#include "inc_loot_rod" +/* Table 8-21*/ +#include "inc_loot_scrolls" +/* Table 8-26*/ +#include "inc_loot_staff" +/* Table 8-27*/ +#include "inc_loot_wand" + + +// Subfunction of GenerateLoot +// Determines types and amounts of loot per CR +void GenerateItems(object oMonster,int iCR, int iItems); +// Sub function of GenerateItems +// Generates the actual loot. +void GenerateMagicItem(object oContainer, int iNum, int iCategory); +//Minor Magic Item Table +void Table82a(); +//Medium Magic Item Table +void Table82b(); +//Major Magic Item Table +void Table82c(); +// Minor Misc Magic Item Table +void Table828(); +// Medium Misc Magic Item Table +void Table829(); +// Major Misc Magic Item Table +void Table830(); + +void GenerateItems(object oMonster,int iCR, int iItems) + { + int iRoll = d100(); + int iMundane,iMinor,iMedium,iMajor,iEpic; + if (iCR > 20) + { + iEpic = iCR; + iCR = 20; + } + switch (iCR) + { + case 1: + { + if (iRoll <= 71) break; + else if (iRoll <= 95) {iMundane = 1;break;} + else {iMinor = 1;break;} + } + case 2: + { + if (iRoll <= 49) break; + else if (iRoll <= 95) {iMundane = 1;break;} + else {iMinor = 1;break;} + } + case 3: + { + if (iRoll <= 49) break; + else if (iRoll <= 95) {iMundane = d3();break;} + else {iMinor = 1;break;} + } + case 4: + { + if (iRoll <= 42) break; + else if (iRoll <= 62) {iMundane = d4();break;} + else {iMinor = 1;break;} + } + case 5: + { + if (iRoll <= 57) break; + else if (iRoll <= 67) {iMundane = d4();break;} + else {iMinor = d3();break;} + } + case 6: + { + if (iRoll <= 54) break; + else if (iRoll <= 59) {iMundane = d4();break;} + else if (iRoll <= 99) {iMinor = d3();break;} + else {iMedium = 1;break;} + } + case 7: + { + if (iRoll <= 51) break; + else if (iRoll <= 97) {iMinor = d3();break;} + else {iMedium = 1;break;} + } + case 8: + { + if (iRoll <= 48) break; + else if (iRoll <= 96) {iMinor = d4();break;} + else {iMedium = 1;break;} + } + case 9: + { + if (iRoll <= 43) break; + else if (iRoll <= 91) {iMinor = d4();break;} + else {iMedium = 1;break;} + } + case 10: + { + if (iRoll <= 40) break; + else if (iRoll <= 88) {iMinor = d4();break;} + else if (iRoll <= 99) {iMedium = 1;break;} + else {iMajor = 1;break;} + } + case 11: + { + if (iRoll <= 31) break; + else if (iRoll <= 84) {iMinor = d4();break;} + else if (iRoll <= 98) {iMedium = 1;break;} + else {iMajor = 1;break;} + } + case 12: + { + if (iRoll <= 27) break; + else if (iRoll <= 82) {iMinor = d6();break;} + else if (iRoll <= 97) {iMedium = 1;break;} + else {iMajor = 1;break;} + } + case 13: + { + if (iRoll <= 19) break; + else if (iRoll <= 73) {iMinor = d6();break;} + else if (iRoll <= 95) {iMedium = 1;break;} + else {iMajor = 1;break;} + } + case 14: + { + if (iRoll <= 19) break; + else if (iRoll <= 58) {iMinor = d6();break;} + else if (iRoll <= 92) {iMedium = 1;break;} + else {iMajor = 1;break;} + } + case 15: + { + if (iRoll <= 11) break; + else if (iRoll <= 46) {iMinor = d10();break;} + else if (iRoll <= 90) {iMedium = 1;break;} + else {iMajor = 1;break;} + } + case 16: + { + if (iRoll <= 40) break; + else if (iRoll <= 46) {iMinor = d10();break;} + else if (iRoll <= 90) {iMedium = d3();break;} + else {iMajor = 1;break;} + } + case 17: + { + if (iRoll <= 33) break; + else if (iRoll <= 83) {iMedium = d3();break;} + else {iMajor = 1;break;} + } + case 18: + { + if (iRoll <= 24) break; + else if (iRoll <= 80) {iMedium = d4();break;} + else {iMajor = 1;break;} + } + case 19: + { + if (iRoll <= 4) break; + else if (iRoll <= 70) {iMedium = d4();break;} + else {iMajor = 1;break;} + } + case 20: + { + if (iRoll <= 25) break; + else if (iRoll <= 65) {iMedium = d4();break;} + else {iMajor = d3();break;} + } + }; + if (iEpic) + { + if (iEpic == 21) iMajor += 1; + else if (iEpic == 22) iMajor += 2; + else if (iEpic == 23) iMajor += 4; + else if (iEpic == 24) iMajor += 6; + else if (iEpic == 25) iMajor += 9; + else if (iEpic == 26) iMajor += 12; + else if (iEpic == 27) iMajor += 17; + else if (iEpic == 28) iMajor += 23; + else if (iEpic == 29) iMajor += 31; + else if (iEpic >= 30) iMajor += 42; + } + if (iMundane) + GenerateMundane(iMundane, oMonster, 1); + else if (iMinor) + GenerateMagicItem(oMonster,iMinor,1); + else if (iMedium) + GenerateMagicItem(oMonster,iMedium,2); + else if (iMajor) + GenerateMagicItem(oMonster,iMajor,3); + } + +void GenerateMagicItem(object oContainer, int iNum, int iCategory) + { + int i,iType; + string sResRef; + object oObject; + for (i = 1; i <= iNum; i++) + { + if (iCategory == 1) + Table82a(); + else if (iCategory == 2) + Table82b(); + else if (iCategory == 3) + Table82c(); + oObject = CreateItemOnObject(sResRef,oContainer); + iType = GetBaseItemType(oObject); + if (iType == BASE_ITEM_ARROW + || iType == BASE_ITEM_BOLT + || iType == BASE_ITEM_BULLET) + { + iType = StringToInt(GetStringRight(sResRef,3)); + if (iType <= 600) + CreateItemOnObject(sResRef,oContainer,Random(50)); + } + } + } + +void Table82a() // Converted for 9 + { + int iRoll = d100(); + if (iRoll <= 4) SetIdentified(Table83a(),FALSE); + else if (iRoll <= 9) SetIdentified(Table810a(),FALSE); + else if (iRoll <= 44) Table818a(); + else if (iRoll <= 46) Table819a(); + else if (iRoll <= 81) // 1d3 scrolls + { + for (iRoll = 1; iRoll<= d3(); iRoll +=1) + { + Table821(1); + } + } + else if (iRoll <= 91) Table827(1); + else Table828(); + } + +void Table82b() // Converted for 9 + { + int iRoll = d100(); + if (iRoll <= 10) SetIdentified(Table83b(),FALSE); + else if (iRoll <= 20) SetIdentified(Table810b(),FALSE); + else if (iRoll <= 30) Table818b(); + else if (iRoll <= 40) Table819b(); + else if (iRoll <= 50) Table820b(); + else if (iRoll <= 65) // 1d4 scrolls + { + for (iRoll = 1; iRoll<= d4(); iRoll +=1) + { + Table821(2); + } + } + else if (iRoll <= 68) Table826b(); + else if (iRoll <= 83) Table827(2); + else Table829(); + } + +void Table82c() //Converted for 9 + { + int iRoll = d100(); + string sString; + if (iRoll <= 10) SetIdentified(Table83c(),FALSE); + else if (iRoll <= 20) SetIdentified(Table810c(),FALSE); + else if (iRoll <= 35) Table818c(); + else if (iRoll <= 35) Table819c(); + else if (iRoll <= 45) Table820c(); + else if (iRoll <= 55) // 1d6 scrolls + { + for (iRoll = 1; iRoll<= d6(); iRoll +=1) + { + Table821(3); + } + } + else if (iRoll <= 75) Table826c(); + else if (iRoll <= 80) Table827(3); + else Table830(); + } + + +void Table828() // Converted + { + string sResRef; + int iRoll = d100(); + if (iRoll >= 99) + Table828(); //Reroll + else + CreateItemOnObject("misca"+Convert(iRoll)); + } + +void Table829() // Converted + { + string sResRef; + int iRoll = d100(); + if (iRoll >= 99) + Table829(); //Reroll + else + CreateItemOnObject("miscb"+Convert(iRoll)); + } +void Table830()//Converted + { + string sResRef; + int iRoll = d100(); + if (iRoll <= 2) iRoll = 2; + else if (iRoll <= 4) iRoll = 4; + else if (iRoll <= 6) iRoll = 6; + else if (iRoll <= 8) iRoll = 8; + else if (iRoll <= 10) iRoll = 10; + else if (iRoll <= 12) iRoll = 12; + else if (iRoll <= 14) iRoll = 14; + else if (iRoll <= 20) {} //Dead spot to keep table correct. + else if (iRoll <= 22) iRoll = 22; + else if (iRoll <= 24) iRoll = 24; + else if (iRoll <= 26) iRoll = 26; + else if (iRoll <= 28) iRoll = 28; + else if (iRoll <= 30) iRoll = 30; + else if (iRoll <= 32) iRoll = 32; + else if (iRoll <= 42) {} //Dead spot to keep table correct. + else if (iRoll <= 44) Table830(); //Reroll + else if (iRoll <= 52) {}// Dead Spot to keep table correct. + else if (iRoll <= 54) iRoll = 54; + else if (iRoll <= 76) {} //Dead spot to keep table correct. + else if (iRoll <= 80) iRoll = 80; + else if (iRoll == 96) Table830(); //Reroll + else if (iRoll <= 99) {} //Dead spot to keep table correct. + else if (iRoll == 100) Table830(); //Reroll + + if (iRoll == 38) // Horn of Valhalla + { + iRoll = d100(); + if (iRoll <= 40) sResRef = "miscc1039"; + else if (iRoll <= 75) sResRef = "miscc2039"; + else if (iRoll <= 90) sResRef = "miscc3039"; + else sResRef = "miscc4039"; + } + else + sResRef = "miscc"+Convert(iRoll); + CreateItemOnObject(sResRef); + } +//void main () {} diff --git a/src/module/nss/inc_loot_mund.nss b/src/module/nss/inc_loot_mund.nss new file mode 100644 index 0000000..399350a --- /dev/null +++ b/src/module/nss/inc_loot_mund.nss @@ -0,0 +1,38 @@ +#include "inc_loot_weapons" +// Sub function of GenerateItems +void GenerateMundane(int iNumber, object oContainer, int iMulti); + +void GenerateMundane(int iNumber, object oContainer, int iMulti) + { + int i,iRoll, iAmount; + object oItem; + string sResRef; + for (i = 1; i <= iNumber * iMulti; i++) + { + iRoll = d100(); + iAmount = 1; + if (iRoll <= 5) {sResRef = "x1_wmgrenade002";iAmount = d4();} // Alchemist Fire + else if (iRoll <= 10) {sResRef = "x1_wmgrenade001";iAmount = d4(2);} // Acid + else if (iRoll <= 12) {sResRef = "x1_wmgrenade004";iAmount = d4();} // Choking Powder - SHould be smoke stick + else if (iRoll <= 18) {sResRef = "x1_wmgrenade005";iAmount = d4();} // Holy Water + else if (iRoll <= 20) {sResRef = "x1_wmgrenade007";iAmount = d4();} // Thunder Stones + else if (iRoll <= 22) sResRef = "chains001"; // Chain Shirt + else if (iRoll <= 27) {sResRef = "antitoxin"; iAmount = d4();} // Antitoxin + else if (iRoll <= 29) {sResRef = "x1_wmgrenade006";iAmount = d4();} // Tanglefoot Bags + else if (iRoll <= 34) sResRef = "sleather001"; // Studded Leather + else if (iRoll <= 39) sResRef = "nw_wbwsh001"; // Short Bow + else if (iRoll <= 43) sResRef = "breast001"; // Breastplate + else if (iRoll <= 48) sResRef = "banded001"; // Bandedmail + else if (iRoll <= 66) oItem = Table811_14(1); // Random Common Weapon + else if (iRoll <= 68) oItem = Table811_14(2); // Random Uncommon Weapon + else if (iRoll <= 73) oItem = Table811_14(3); // Random Ranged Weapon + else if (iRoll <= 83) sResRef = "nw_wbwln001"; // Longbow + else if (iRoll <= 93) sResRef = "hplate001"; // Half Plate + else sResRef = "fplate001"; // Full Plate + if (!GetIsObjectValid(oItem)) + { + oItem = CreateItemOnObject(sResRef, oContainer, iAmount); + SetLocalInt(oItem,"BaseValue",GetGoldPieceValue(oItem)); + } + } + } diff --git a/src/module/nss/inc_loot_potions.nss b/src/module/nss/inc_loot_potions.nss new file mode 100644 index 0000000..83b3ae1 --- /dev/null +++ b/src/module/nss/inc_loot_potions.nss @@ -0,0 +1,101 @@ +// Minor Potions Table +object Table818a(); +// Medium Potions Table +object Table818b(); +// Major Potions Table +object Table818c(); + +object Table818a() // Minor Potions + { + int iRoll = d100(); + string sString; + //if (iRoll <= 5) sString = "potion001"; //Jump Potion Deactivated for not working right + if (iRoll <= 20) sString = "potion002"; //Cure Light Wounds + else if (iRoll <= 24) sString = "potion003"; //Vision + else if (iRoll <= 28) sString = "potion004"; //Eyes (replaces swimming) + else if (iRoll <= 32) sString = "potion005"; //Hiding + else if (iRoll <= 36) sString = "potion006"; //Sneaking + else if (iRoll <= 53) sString = "potion007"; //ClairAudience/Vision + else if (iRoll <= 56) sString = "potion008"; // Eagle Splender + else if (iRoll <= 59) sString = "potion009"; // Fox Cunning + else if (iRoll <= 62) sString = "potion010"; // Owl Wisdom + else if (iRoll <= 68) sString = "potion011"; // Barkskin + else if (iRoll <= 71) sString = "potion012"; // Darkvision + else if (iRoll <= 80) sString = "potion013"; //Endurance + else if (iRoll <= 83) sString = "potion014"; //Cure Moderate Wounds + else if (iRoll <= 91) sString = "potion015"; //Aid + else if (iRoll <= 93) sString = "potion016"; //Invisibility + else if (iRoll <= 94) sString = "potion017"; //Lesser Restoration + else if (iRoll <= 95) sString = "potion018"; // Cat's Grace + else if (iRoll <= 96) sString = "potion019"; //Bull Strength + else sString = "potion019"; //More Bull Strength + return CreateItemOnObject(sString); + } + +object Table818b() // Medium Potions + { + int iRoll = d100(); + string sString; + if (iRoll <= 2) sString = "potion003"; //Vision + else if (iRoll <= 3) sString = "potion004"; //Eyes (replaces swimming) + else if (iRoll <= 4) sString = "potion005"; //Hiding + else if (iRoll <= 5) sString = "potion006"; //Sneaking + else if (iRoll <= 10) sString = "potion007"; //ClairAudience/Vision + else if (iRoll <= 12) sString = "potion008"; // Eagle Splender + else if (iRoll <= 14) sString = "potion009"; // Fox Cunning + else if (iRoll <= 16) sString = "potion010"; // Owl Wisdom + else if (iRoll <= 21) sString = "potion011"; // Barkskin + else if (iRoll <= 24) sString = "potion012"; // Darkvision + else if (iRoll <= 32) sString = "potion013"; //Endurance + else if (iRoll <= 40) sString = "potion014"; //Cure Moderate Wounds + else if (iRoll <= 55) sString = "potion015"; //Aid + else if (iRoll <= 60) sString = "potion016"; //Invisibility + else if (iRoll <= 65) sString = "potion017"; //Lesser Restoration + else if (iRoll <= 70) sString = "potion018"; // Cat's Grace + else if (iRoll <= 75) sString = "potion019"; //Bull Strength + else if (iRoll <= 88) sString = "potion020"; //Glibness * + else if (iRoll <= 91) sString = "potion035"; //WaterBreathing * + else if (iRoll <= 92) sString = "potion021"; //Remove Paralysis* + else if (iRoll <= 93) sString = "potion022"; //Remove Blindness/deafness * + else if (iRoll <= 94) sString = "potion023"; //Remove Disease * + else if (iRoll <= 96) sString = "potion024"; //Neutralize Poison * + else if (iRoll <= 98) sString = "potion025"; //Cure Serious Wounds * + else sString = "potion033"; //Heroism * + return CreateItemOnObject(sString); + } + +object Table818c() // Major Potions + { + int iRoll = d100(); + string sString; + if (iRoll <= 1) sString = "potion007"; //ClairAudience/Vision + else if (iRoll <= 2) sString = "potion008"; // Eagle Splender + else if (iRoll <= 3) sString = "potion009"; // Fox Cunning + else if (iRoll <= 4) sString = "potion010"; // Owl Wisdom + else if (iRoll <= 7) sString = "potion011"; // Barkskin + else if (iRoll <= 8) sString = "potion012"; // Darkvision + else if (iRoll <= 13) sString = "potion013"; //Endurance + else if (iRoll <= 16) sString = "potion014"; //Cure Moderate Wounds + else if (iRoll <= 25) sString = "potion015"; //Aid + else if (iRoll <= 30) sString = "potion016"; //Invisibility + else if (iRoll <= 35) sString = "potion017"; //Lesser Restoration + else if (iRoll <= 40) sString = "potion018"; // Cat's Grace + else if (iRoll <= 45) sString = "potion019"; //Bull Strength + else if (iRoll <= 47) sString = "potion020"; //Glibness * + else if (iRoll <= 53) sString = "potion035"; //WaterBreathing * + else if (iRoll <= 55) sString = "potion021"; //Remove Paralysis* + else if (iRoll <= 57) sString = "potion022"; //Remove Blindness/deafness * + else if (iRoll <= 59) sString = "potion023"; //Remove Disease * + else if (iRoll <= 69) sString = "potion024"; //Neutralize Poison * + else if (iRoll <= 75) sString = "potion025"; //Cure Serious Wounds * + else if (iRoll <= 77) sString = "potion026"; //Protection Cold * + else if (iRoll <= 79) sString = "potion027"; //Protection Electricity * + else if (iRoll <= 83) sString = "potion028"; //Protection Fire * + else if (iRoll <= 85) sString = "potion029"; //Protection Acid * + else if (iRoll <= 87) sString = "potion030"; //Protection Sonic * + else if (iRoll <= 90) sString = "potion031"; //Haste * + //else if (iRoll <= 95) sString = "potion032"; //Oil of Slipperiness * Could not make this work + else sString = "potion033"; //Heroism * + //else sString = "potion034"; //Firebreathing * Could not make this work + return CreateItemOnObject(sString); + } diff --git a/src/module/nss/inc_loot_rings.nss b/src/module/nss/inc_loot_rings.nss new file mode 100644 index 0000000..8f2ac58 --- /dev/null +++ b/src/module/nss/inc_loot_rings.nss @@ -0,0 +1,100 @@ +// Minor Rings Table +object Table819a(); +// Medium Rings Table +object Table819b(); +// Major Rings Table +object Table819c(); + +object Table819a() // Minor Rings + { + int iRoll = d100(); + string sString; + if (iRoll <= 10) sString = "ring034"; // Ring of Climbing + else if (iRoll <= 25) sString = "ring001"; //+1 Protection + else if (iRoll <= 30) sString = "ring002"; //Warmth + else if (iRoll <= 40) sString = "ring035"; //Featherfall + else if (iRoll <= 50) sString = "ring036"; //Sustenance + else if (iRoll <= 60) sString = "ring037"; // Ring of Counter Spelling + else if (iRoll <= 70) sString = "ring003"; //+2 Protection + else if (iRoll <= 75) sString = "ring004"; //Shield + else if (iRoll <= 85) sString = "ring005"; //Animal Friendship + else if (iRoll <= 90) sString = "ring006"; // Chameleon + else if (iRoll <= 92) sString = "ring007"; // Acid Resist + else if (iRoll <= 94) sString = "ring008"; //Cold Resist + else if (iRoll <= 96) sString = "ring009"; // Electrical resist + else if (iRoll <= 98) sString = "ring010"; //Fire resist + else sString = "ring011"; //Ring Sonic Resist + return CreateItemOnObject(sString); + } + +object Table819b() // Medium Rings + { + int iRoll = d100(); + string sString; + if (iRoll <= 5) sString = "ring037"; // Ring of Counter Spelling + else if (iRoll <= 20) sString = "ring003"; //+2 Protection + else if (iRoll <= 30) sString = "ring004"; //Shield + else if (iRoll <= 35) sString = "ring005"; //Animal Friendship + else if (iRoll <= 40) sString = "ring006"; // Chameleon + else if (iRoll <= 42) sString = "ring007"; // Acid Resist + else if (iRoll <= 44) sString = "ring008"; //Cold Resist + else if (iRoll <= 46) sString = "ring009"; // Electrical resist + else if (iRoll <= 48) sString = "ring010"; //Fire resist + else if (iRoll <= 50) sString = "ring011"; //Sonic resist + else if (iRoll <= 60) sString = "ring012"; //Protection +3 + else if (iRoll <= 70) sString = "ring013"; //Invisibility + else if (iRoll <= 75) sString = "ring014"; //Wizardary I + else if (iRoll <= 76) sString = "ring015"; // Acid Resist Major + else if (iRoll <= 77) sString = "ring016"; //Cold Resist Major + else if (iRoll <= 78) sString = "ring017"; // Electrical resist major + else if (iRoll <= 79) sString = "ring018"; //Fire resist major + else if (iRoll <= 80) sString = "ring019"; //Sonic resist major + else if (iRoll <= 82) sString = "ring021"; // Clairvoyance/Audience + else if (iRoll <= 84) sString = "ring021"; //Evasion + else if (iRoll <= 86) sString = "ring022"; //Blinking + else if (iRoll <= 88) sString = "ring023"; //Protection +4 + else if (iRoll <= 90) sString = "ring024"; //Wizardry II + else if (iRoll <= 94) sString = "ring025"; //Freedom of Movement + else if (iRoll <= 97) sString = "ring026"; // Protection + 5 + else if (iRoll <= 98) sString = "ring039"; // Shooting Stars + else sString = "ring027"; //Wizardary III + return CreateItemOnObject(sString); + } + +object Table819c() // Major Potions + { + int iRoll = d100(); + string sString; + if (iRoll <= 2) sString = "ring005"; //Animal Friendship + else if (iRoll <= 3) sString = "ring006"; // Chameleon + else if (iRoll <= 4) sString = "ring007"; // Acid Resist + else if (iRoll <= 5) sString = "ring008"; //Cold Resist + else if (iRoll <= 6) sString = "ring009"; // Electrical resist + else if (iRoll <= 7) sString = "ring010"; //Fire resist + else if (iRoll <= 8) sString = "ring011"; //Sonic resist + else if (iRoll <= 10) sString = "ring012"; //Protection +3 + else if (iRoll <= 15) sString = "ring013"; //Invisibility + else if (iRoll <= 20) sString = "ring014"; //Wizardary I + else if (iRoll <= 21) sString = "ring015"; // Acid Resist Major + else if (iRoll <= 22) sString = "ring016"; //Cold Resist Major + else if (iRoll <= 23) sString = "ring017"; // Electrical resist major + else if (iRoll <= 24) sString = "ring018"; //Fire resist major + else if (iRoll <= 25) sString = "ring019"; //Sonic resist major + else if (iRoll <= 30) sString = "ring021"; // Clairvoyance/Audience + else if (iRoll <= 35) sString = "ring021"; //Evasion + else if (iRoll <= 40) sString = "ring022"; //Blinking + else if (iRoll <= 45) sString = "ring023"; //Protection +4 + else if (iRoll <= 50) sString = "ring024"; //Wizardry II + else if (iRoll <= 55) sString = "ring025"; //Freedom of Movement + else if (iRoll <= 65) sString = "ring026"; // Protection + 5 + else if (iRoll <= 70) sString = "ring039"; // Shooting Stars + else if (iRoll <= 80) sString = "ring027"; //Wizardary III + else if (iRoll <= 84) sString = "ring038"; //Spell Storing + else if (iRoll <= 87) sString = "ring028"; //Regeneration + else if (iRoll <= 92) sString = "ring029"; //Wizardary IV + else if (iRoll <= 94) sString = "ring030"; //Air Command + else if (iRoll <= 96) sString = "ring031"; //Earth Command + else if (iRoll <= 98) sString = "ring032"; //Fire Command + else sString = "ring033"; //Water Command + return CreateItemOnObject(sString); + } diff --git a/src/module/nss/inc_loot_rod.nss b/src/module/nss/inc_loot_rod.nss new file mode 100644 index 0000000..f2e1557 --- /dev/null +++ b/src/module/nss/inc_loot_rod.nss @@ -0,0 +1,53 @@ +#include "inc_misc_tools" +// Randomly Generates Magic Rods +// iType 2 = Medium Rod +// iType 3 = Major Rod +// No other value will work. + +object Table820b(); +object Table820c(); + +object Table820b() + { + int iRoll = d100(); + string sString; + if (iRoll <= 6) {Table820b();} //Reroll + else if (iRoll <= 12) {sString = "rod108";} + else if (iRoll <= 20) {sString = "rod101";} + else if (iRoll <= 25) {sString = "rod102";} + else if (iRoll <= 29) {sString = "rod103";} + else if (iRoll <= 34) {sString = "rod104";} + else if (iRoll <= 40) {sString = "rod105";} + else if (iRoll <= 45) {sString = "rod106";} + else if (iRoll <= 52) {sString = "rod107";} + else if (iRoll <= 60) {sString = "rod108";} + else if (iRoll <= 68) {sString = "rod109";} + else if (iRoll <= 78) {sString = "rod110";} + else if (iRoll <= 90) {sString = "rod111";} + else if (iRoll <= 96) {sString = "rod113";} + else if (iRoll <= 99) {sString = "rod112";} + else if (iRoll <= 100) {sString = "rod108";} + return CreateItemOnObject(sString); + } +object Table820c() + { + int iRoll = d100(); + string sString; + if (iRoll <= 5) {sString = "rod101";} + else if (iRoll <= 10) {sString = "rod102";} + else if (iRoll <= 15) {sString = "rod103";} + else if (iRoll <= 20) {sString = "rod104";} + else if (iRoll <= 27) {sString = "rod105";} + else if (iRoll <= 33) {sString = "rod106";} + else if (iRoll <= 40) {sString = "rod107";} + else if (iRoll <= 50) {sString = "rod108";} + else if (iRoll <= 55) {sString = "rod109";} + else if (iRoll <= 65) {sString = "rod110";} + else if (iRoll <= 80) {sString = "rod111";} + else if (iRoll <= 85) {sString = "rod113";} + else if (iRoll <= 90) {sString = "rod112";} + else if (iRoll <= 94) {sString = "rod108";} + else if (iRoll <= 98) {sString = "rod114";} + else if (iRoll <= 100) {sString = "rod108";} + return CreateItemOnObject(sString); + } diff --git a/src/module/nss/inc_loot_scrolls.nss b/src/module/nss/inc_loot_scrolls.nss new file mode 100644 index 0000000..b5d014b --- /dev/null +++ b/src/module/nss/inc_loot_scrolls.nss @@ -0,0 +1,635 @@ +#include "inc_misc_tools" +// Randomly Generates Scroll IDs for ResRefs +// iType 1 = Minor Scrolls +// iType 2 = Medium Scrolls +// iType 3 = Major Scrolls +// No other value will work. +object Table821(int iType); + +int Table824a1(); +int Table824a2(); +int Table824a3(); +int Table824a4(); +int Table824a5(); +int Table824a6(); +int Table824a7(); +int Table824a8(); +int Table824a9(); +int Table824d1(); +int Table824d2(); +int Table824d3(); +int Table824d4(); +int Table824d5(); +int Table824d6(); +int Table824d7(); +int Table824d8(); +int Table824d9(); +object Table821(int iType) + { + int iRoll,i,iArcane; + string sResRef; + if (d100() <= 70) + iArcane = TRUE; + if (iType == 1) + { + iRoll = d100(); + if (iRoll <= 50 && iArcane) {sResRef = "scroll" + Convert(Table824a1());} + else if (iRoll <= 50) {sResRef = "scroll" + Convert(Table824d1());} + else if (iRoll <= 95 && iArcane) {sResRef = "scroll" + Convert(Table824a2());} + else if (iRoll <= 95) {sResRef = "scroll" + Convert(Table824d2());} + else if (iArcane) {sResRef = "scroll" + Convert(Table824a3());} + else {sResRef = "scroll" + Convert(Table824d3());} + } + else if (iType == 2) + { + iRoll = d100(); + if (iRoll <= 5 && iArcane) {sResRef = "scroll" + Convert(Table824a2());} + else if (iRoll <= 5) {sResRef = "scroll" + Convert(Table824d2());} + else if (iRoll <= 65 && iArcane) {sResRef = "scroll" + Convert(Table824a3());} + else if (iRoll <= 65) {sResRef = "scroll" + Convert(Table824d3());} + else if (iRoll <= 95 && iArcane) {sResRef = "scroll" + Convert(Table824a4());} + else if (iRoll <= 95) {sResRef = "scroll" + Convert(Table824d4());} + else if (iArcane) {sResRef = "scroll" + Convert(Table824a5());} + else {sResRef = "scroll" + Convert(Table824d5());} + } + else if (iType == 3) + { + iRoll = d100(); + if (iRoll <= 5 && iArcane) {sResRef = "scroll" + Convert(Table824a4());} + else if (iRoll <= 5) {sResRef = "scroll" + Convert(Table824d4());} + else if (iRoll <= 50 && iArcane) {sResRef = "scroll" + Convert(Table824a5());} + else if (iRoll <= 50) {sResRef = "scroll" + Convert(Table824d5());} + else if (iRoll <= 70 && iArcane) {sResRef = "scroll" + Convert(Table824a6());} + else if (iRoll <= 70) {sResRef = "scroll" + Convert(Table824d6());} + else if (iRoll <= 85 && iArcane) {sResRef = "scroll" + Convert(Table824a7());} + else if (iRoll <= 85) {sResRef = "scroll" + Convert(Table824d7());} + else if (iRoll <= 95 && iArcane) {sResRef = "scroll" + Convert(Table824a8());} + else if (iRoll <= 95) {sResRef = "scroll" + Convert(Table824d8());} + else if (iArcane) {sResRef = "scroll" + Convert(Table824a9());} + else {sResRef = "scroll" + Convert(Table824d9());} + } + return CreateItemOnObject(sResRef); + } + +int Table824a1() + { + int iResult; + int iRoll = d100(); + if (iRoll <= 5) {iResult = SPELL_BURNING_HANDS;} + else if (iRoll <=10) {iResult = SPELL_ACID_SPLASH;} + else if (iRoll <=15) {iResult = SPELL_CHARM_PERSON;} + else if (iRoll <=18) {iResult = SPELL_COLOR_SPRAY;} + else if (iRoll <=22) {iResult = SPELL_DAZE;} + else if (iRoll <=25) {iResult = SPELL_ELECTRIC_JOLT;} + else if (iRoll <=28) {iResult = SPELL_FLARE;} + else if (iRoll <=31) {iResult = SPELL_LIGHT;} + else if (iRoll <=36) {iResult = SPELL_RAY_OF_FROST;} + else if (iRoll <=39) {iResult = SPELL_GREASE;} + else if (iRoll <=44) {iResult = SPELL_IDENTIFY;} + else if (iRoll <=47) {iResult = SPELL_RESISTANCE;} + else if (iRoll <=51) {iResult = SPELL_MAGE_ARMOR;} + else if (iRoll <=54) {iResult = SPELL_MAGIC_MISSILE;} + else if (iRoll <=57) {iResult = SPELL_NEGATIVE_ENERGY_RAY;} + else if (iRoll <=60) {iResult = SPELL_RAY_OF_ENFEEBLEMENT;} + else if (iRoll <=63) {iResult = SPELL_PROTECTION_FROM_EVIL;} + else if (iRoll <=66) {iResult = SPELL_SHIELD;} + else if (iRoll <=69) {iResult = SPELL_SCARE;} + else if (iRoll <=73) {iResult = SPELL_TRUE_STRIKE;} + else if (iRoll <=78) {iResult = SPELL_SLEEP;} + else if (iRoll <=81) {iResult = SPELL_EXPEDITIOUS_RETREAT;} + else if (iRoll <=84) {iResult = SPELL_SUMMON_CREATURE_I;} + else if (iRoll <=87) {iResult = SPELL_CURE_MINOR_WOUNDS;} + else if (iRoll <=92) {iResult = SPELL_LESSER_DISPEL;} + else if (iRoll <=95) {iResult = Table824a1();} + else {iResult = Table824a1();} //Reroll + return iResult; + } + +int Table824a2() + { + /* + Bard spells not in this list: + SPELL_CLARITY + SPELL_CURE_MODERATE_WOUNDS + SPELL_HOLD_PERSON + SPELL_SILENCE + SPELL_SOUND_BURST + SPELL_GHOUL_TOUCH + */ + int iResult; + int iRoll = d100(); + if (iRoll <= 3) {iResult = SPELL_GHOSTLY_VISAGE;} + else if (iRoll <= 8) {iResult = SPELL_BLINDNESS_AND_DEAFNESS;} + else if (iRoll <=13) {iResult = SPELL_DARKNESS;} + else if (iRoll <=18) {iResult = SPELL_BULLS_STRENGTH;} + else if (iRoll <=22) {iResult = SPELL_CATS_GRACE;} + else if (iRoll <=25) {iResult = SPELL_EAGLE_SPLEDOR;} + else if (iRoll <=30) {iResult = SPELL_ENDURANCE;} + else if (iRoll <=33) {iResult = SPELL_FOXS_CUNNING;} + else if (iRoll <=38) {iResult = SPELL_INVISIBILITY;} + else if (iRoll <=41) {iResult = SPELL_KNOCK;} + else if (iRoll <=46) {iResult = SPELL_GHOSTLY_VISAGE;} + else if (iRoll <=51) {iResult = SPELL_GHOUL_TOUCH;} + else if (iRoll <=54) {iResult = SPELL_MELFS_ACID_ARROW;} + else if (iRoll <=59) {iResult = SPELL_LESSER_DISPEL;} + else if (iRoll <=64) {iResult = SPELL_OWLS_WISDOM;} + else if (iRoll <=69) {iResult = SPELL_RESIST_ELEMENTS;} + else if (iRoll <=72) {iResult = SPELL_TASHAS_HIDEOUS_LAUGHTER;} + else if (iRoll <=77) {iResult = SPELL_SEE_INVISIBILITY;} + else if (iRoll <=80) {iResult = SPELL_CONTINUAL_FLAME;} + else if (iRoll <=83) {iResult = SPELL_STINKING_CLOUD;} + else if (iRoll <=87) {iResult = SPELL_SUMMON_CREATURE_II;} + else if (iRoll <=92) {iResult = SPELL_BALAGARNSIRONHORN;} + else if (iRoll <=95) {iResult = SPELL_WEB;} + else iResult = Table824a2(); //Reroll + return iResult; + } + +int Table824a3() + { + /* + Bard spells not in this list: + SPELL_BESTOW_CURSE + SPELL_CHARM_MONSTER + SPELL_CONFUSION + SPELL_CURE_SERIOUS_WOUNDS + SPELL_FEAR + SPELL_FIND_TRAPS + SPELL_REMOVE_CURSE + SPELL_REMOVE_DISEASE + */ + int iResult; + int iRoll = d100(); + if (iRoll <= 5) {iResult = SPELL_ANIMATE_DEAD;} + else if (iRoll <=10) {iResult = SPELL_CLAIRAUDIENCE_AND_CLAIRVOYANCE;} + else if (iRoll <=15) {iResult = SPELL_DISPEL_MAGIC;} + else if (iRoll <=20) {iResult = SPELL_DISPLACEMENT;} + else if (iRoll <=25) {iResult = SPELL_FIREBALL;} + else if (iRoll <=28) {iResult = SPELL_FLAME_ARROW;} + else if (iRoll <=31) {iResult = SPELL_CLARITY;} + else if (iRoll <=33) {iResult = SPELL_FIND_TRAPS;} + else if (iRoll <=36) {iResult = SPELL_NEGATIVE_ENERGY_BURST;} + else if (iRoll <=39) {iResult = SPELL_PROTECTION_FROM_ELEMENTS;} + else if (iRoll <=42) {iResult = SPELL_HASTE;} + else if (iRoll <=45) {iResult = SPELL_HOLD_PERSON;} + else if (iRoll <=47) {iResult = SPELL_INVISIBILITY_SPHERE;} + else if (iRoll <=53) {iResult = SPELL_LIGHTNING_BOLT;} + else if (iRoll <=57) {iResult = SPELL_MAGIC_CIRCLE_AGAINST_CHAOS;}// Actually works for all circle prot. + else if (iRoll <=60) {iResult = SPELL_STINKING_CLOUD;} + else if (iRoll <=65) {iResult = SPELL_SLOW;} + else if (iRoll <=70) {iResult = SPELL_GUST_OF_WIND;} + else if (iRoll <=75) {iResult = SPELL_DISPLACEMENT;} + else if (iRoll <=79) {iResult = SPELL_SUMMON_CREATURE_III;} + else if (iRoll <=84) {iResult = SPELL_WOUNDING_WHISPERS;} + else if (iRoll <=87) {iResult = SPELL_VAMPIRIC_TOUCH;} + else if (iRoll <=90) {iResult = Table824a3();} //Reroll + else iResult = Table824a3(); //Reroll + return iResult; + } + +int Table824a4() + { + /* + Bard spells not in this list: + SPELL_CURE_CRITICAL_WOUNDS + SPELL_DISMISSAL + SPELL_DOMINATE_PERSON + SPELL_NEUTRALIZE_POISON + */ + int iResult; + int iRoll = d100(); + if (iRoll <= 5) {iResult = SPELL_CHARM_MONSTER;} + else if (iRoll <=10) {iResult = SPELL_CONFUSION;} + else if (iRoll <=15) {iResult = SPELL_CONTAGION;} + else if (iRoll <=20) {iResult = SPELL_BESTOW_CURSE;} + else if (iRoll <=23) {iResult = SPELL_LESSER_SPELL_BREACH;} + else if (iRoll <=28) {iResult = SPELL_PHANTASMAL_KILLER;} + else if (iRoll <=33) {iResult = SPELL_REMOVE_BLINDNESS_AND_DEAFNESS;} + else if (iRoll <=36) {iResult = SPELL_ENERVATION;} + else if (iRoll <=39) {iResult = SPELL_EVARDS_BLACK_TENTACLES;} + else if (iRoll <=44) {iResult = SPELL_FEAR;} + else if (iRoll <=47) {iResult = SPELL_ISAACS_LESSER_MISSILE_STORM;} + else if (iRoll <=50) {iResult = SPELL_ICE_STORM;} + else if (iRoll <=55) {iResult = SPELL_IMPROVED_INVISIBILITY;} + else if (iRoll <=58) {iResult = SPELL_HOLD_MONSTER;} + else if (iRoll <=61) {iResult = SPELL_MINOR_GLOBE_OF_INVULNERABILITY;} + else if (iRoll <=67) {iResult = SPELL_PHANTASMAL_KILLER;} + else if (iRoll <=70) {iResult = SPELL_LEGEND_LORE;} + else if (iRoll <=73) {iResult = SPELL_POLYMORPH_SELF;} + else if (iRoll <=76) {iResult = SPELL_REMOVE_CURSE;} + else if (iRoll <=79) {iResult = SPELL_SHADOW_CONJURATION_DARKNESS;}// All shadow conjurations + else if (iRoll <=82) {iResult = SPELL_STONESKIN;} + else if (iRoll <=84) {iResult = SPELL_SUMMON_CREATURE_IV;} + else if (iRoll <=87) {iResult = SPELL_WALL_OF_FIRE;} + else if (iRoll <=90) {iResult = SPELL_WAR_CRY;} + else iResult = Table824a4(); //Reroll + return iResult; + } + +int Table824a5() + { + int iResult; + int iRoll = d100(); + if (iRoll <= 4) {iResult = SPELL_BIGBYS_INTERPOSING_HAND;} + else if (iRoll <=8) {iResult = SPELL_CLOUDKILL;} + else if (iRoll <=13) {iResult = SPELL_CONE_OF_COLD;} + else if (iRoll <=17) {iResult = SPELL_DISMISSAL;} + else if (iRoll <=21) {iResult = SPELL_DOMINATE_PERSON;} + else if (iRoll <=24) {iResult = SPELL_FEEBLEMIND;} + else if (iRoll <=27) {iResult = SPELL_GREATER_SHADOW_CONJURATION_ACID_ARROW;} // All greater Shadow conjurations + else if (iRoll <=31) {iResult = SPELL_HOLD_MONSTER;} + else if (iRoll <=35) {iResult = SPELL_ELEMENTAL_SHIELD;} + else if (iRoll <=40) {iResult = SPELL_MIND_FOG;} + else if (iRoll <=44) {iResult = SPELL_ENERGY_BUFFER;} + else if (iRoll <=49) {iResult = SPELL_LESSER_MIND_BLANK;} + else if (iRoll <=53) {iResult = SPELL_LESSER_PLANAR_BINDING;} + else if (iRoll <=56) {iResult = SPELL_LESSER_SPELL_MANTLE;} + else if (iRoll <=60) {iResult = SPELL_SUMMON_CREATURE_V;} + else if (iRoll <=64) {iResult = SPELL_FIREBRAND;} + else if (iRoll <=69) {iResult = SPELL_ETHEREAL_VISAGE;} + else if (iRoll <=73) {iResult = SPELL_GREATER_DISPELLING;} + else if (iRoll <=77) {iResult = SPELL_HEALING_CIRCLE;} + else if (iRoll <=81) {iResult = Table824a5();} //Reroll + else if (iRoll <=86) {iResult = Table824a5();} //Reroll + else if (iRoll <=90) {iResult = Table824a5();} //Reroll + else iResult = Table824a5(); //Reroll + return iResult; + } + +int Table824a6() + { + int iResult; + int iRoll = d100(); + if (iRoll <= 4) {iResult = SPELL_ACID_FOG;} + else if (iRoll <=7) {iResult = SPELL_ETHEREAL_VISAGE;} + else if (iRoll <=11) {iResult = SPELL_GREATER_DISPELLING;} + else if (iRoll <=15) {iResult = SPELL_BIGBYS_FORCEFUL_HAND;} + else if (iRoll <=19) {iResult = SPELL_CHAIN_LIGHTNING;} + else if (iRoll <=23) {iResult = SPELL_CIRCLE_OF_DEATH;} + else if (iRoll <=26) {iResult = SPELL_GREATER_SPELL_BREACH;} + else if (iRoll <=30) {iResult = SPELL_GREATER_STONESKIN;} + else if (iRoll <=33) {iResult = SPELL_LEGEND_LORE;} + else if (iRoll <=37) {iResult = SPELL_FLESH_TO_STONE;} + else if (iRoll <=41) {iResult = SPELL_GLOBE_OF_INVULNERABILITY;} + else if (iRoll <=45) {iResult = SPELL_MASS_HASTE;} + else if (iRoll <=49) {iResult = SPELL_PLANAR_BINDING;} + else if (iRoll <=52) {iResult = SPELL_TENSERS_TRANSFORMATION;} + else if (iRoll <=57) {iResult = SPELL_ISAACS_GREATER_MISSILE_STORM;} + else if (iRoll <=61) {iResult = SPELL_DIRGE;} + else if (iRoll <=65) {iResult = SPELL_ENERGY_BUFFER;} + else if (iRoll <=70) {iResult = SPELL_ICE_STORM;} + else if (iRoll <=75) {iResult = Table824a6();} //Reroll + else if (iRoll <=78) {iResult = SPELL_SHADES_CONE_OF_COLD;} // All shades spells + else if (iRoll <=82) {iResult = SPELL_STONE_TO_FLESH;} + else if (iRoll <=86) {iResult = SPELL_SUMMON_CREATURE_VI;} + else if (iRoll <=90) {iResult = SPELL_TRUE_SEEING;} + else iResult = Table824a6(); //Reroll + return iResult; + } + +int Table824a7() + { + int iResult; + int iRoll = d100(); + if (iRoll <= 5) {iResult = SPELL_BIGBYS_GRASPING_HAND;} + else if (iRoll <=10) {iResult = SPELL_CONTROL_UNDEAD;} + else if (iRoll <=15) {iResult = SPELL_DELAYED_BLAST_FIREBALL;} + else if (iRoll <=20) {iResult = SPELL_PROTECTION_FROM_SPELLS;} + else if (iRoll <=25) {iResult = SPELL_FINGER_OF_DEATH;} + else if (iRoll <=30) {iResult = SPELL_SHADOW_SHIELD;} + else if (iRoll <=35) {iResult = SPELL_SPELL_MANTLE;} + else if (iRoll <=40) {iResult = SPELL_BANISHMENT;} + else if (iRoll <=45) {iResult = SPELL_MORDENKAINENS_SWORD;} + else if (iRoll <=50) {iResult = SPELL_POWER_WORD_STUN;} + else if (iRoll <=55) {iResult = SPELL_PRISMATIC_SPRAY;} + else if (iRoll <=60) {iResult = Table824a7();} //Reroll + else if (iRoll <=65) {iResult = Table824a7();} //Reroll + else if (iRoll <=70) {iResult = Table824a7();} //Reroll + else if (iRoll <=75) {iResult = SPELL_SUMMON_CREATURE_VII;} + else if (iRoll <=80) {iResult = Table824a7();} //Reroll + else if (iRoll <=85) {iResult = Table824a7();} //Reroll + else if (iRoll <=90) {iResult = Table824a7();} //Reroll + else iResult = Table824a7(); //Reroll + return iResult; + } + +int Table824a8() + { + int iResult; + int iRoll = d100(); + if (iRoll <= 3) {iResult = SPELL_CREATE_UNDEAD;} + else if (iRoll <=8) {iResult = SPELL_BIGBYS_CLENCHED_FIST;} + else if (iRoll <=13) {iResult = SPELL_GREATER_PLANAR_BINDING;} + else if (iRoll <=18) {iResult = SPELL_MASS_BLINDNESS_AND_DEAFNESS;} + else if (iRoll <=23) {iResult = SPELL_HORRID_WILTING;} + else if (iRoll <=28) {iResult = SPELL_INCENDIARY_CLOUD;} + else if (iRoll <=33) {iResult = SPELL_MASS_CHARM;} + else if (iRoll <=38) {iResult = SPELL_MIND_BLANK;} + else if (iRoll <=43) {iResult = SPELL_PREMONITION;} + else if (iRoll <=48) {iResult = SPELL_ETHEREALNESS;} // Greater Sanctuary + else if (iRoll <=53) {iResult = Table824a8();} //Reroll + else if (iRoll <=58) {iResult = Table824a8();} //Reroll + else if (iRoll <=63) {iResult = Table824a8();} //Reroll + else if (iRoll <=68) {iResult = Table824a8();} //Reroll + else if (iRoll <=73) {iResult = Table824a8();} //Reroll + else if (iRoll <=78) {iResult = Table824a8();} //Reroll + else if (iRoll <=83) {iResult = SPELL_SUMMON_CREATURE_VII;} + else if (iRoll <=88) {iResult = SPELL_SUNBURST;} + else if (iRoll <=90) {iResult = Table824a8();} //Reroll + else iResult = Table824a8(); //Reroll + return iResult; + } + +int Table824a9() + { + int iResult; + int iRoll = d100(); + if (iRoll <= 7) {iResult = SPELL_BIGBYS_CRUSHING_HAND;} + else if (iRoll <=14) {iResult = SPELL_ENERGY_DRAIN;} + else if (iRoll <=21) {iResult = SPELL_DOMINATE_MONSTER;} + else if (iRoll <=28) {iResult = SPELL_METEOR_SWARM;} + else if (iRoll <=35) {iResult = SPELL_MORDENKAINENS_DISJUNCTION;} + else if (iRoll <=49) {iResult = SPELL_GATE;} + else if (iRoll <=56) {iResult = SPELL_SHAPECHANGE;} + else if (iRoll <=63) {iResult = SPELL_SUMMON_CREATURE_IX;} + else if (iRoll <=69) {iResult = SPELL_POWER_WORD_KILL;} + else if (iRoll <=76) {iResult = SPELL_WAIL_OF_THE_BANSHEE;} + else if (iRoll <=83) {iResult = SPELL_WEIRD;} + else if (iRoll <=90) {iResult = SPELL_GREATER_SPELL_MANTLE;} + else iResult = Table824a9(); //Reroll + return iResult; + } +/* + + + + +*/ +int Table824d1() + { + int iResult; + int iRoll = d100(); + if (iRoll <= 5) {iResult = SPELL_BLESS;} + else if (iRoll <=10) {iResult = SPELL_PROTECTION_FROM_EVIL;} + else if (iRoll <=14) {iResult = SPELL_REMOVE_FEAR;} + else if (iRoll <=19) {iResult = SPELL_CURE_LIGHT_WOUNDS;} + else if (iRoll <=22) {iResult = SPELL_SCARE;} + else if (iRoll <=25) {iResult = SPELL_CURE_MINOR_WOUNDS;} + else if (iRoll <=28) {iResult = SPELL_LIGHT;} + else if (iRoll <=31) {iResult = SPELL_RESISTANCE;} + else if (iRoll <=34) {iResult = SPELL_FIND_TRAPS;} // Supposed to be detect snares and and pits. + else if (iRoll <=39) {iResult = SPELL_DOOM;} + else if (iRoll <=44) {iResult = SPELL_ENTANGLE;} + else if (iRoll <=49) {iResult = SPELL_VIRTUE;} + else if (iRoll <=54) {iResult = SPELL_INFLICT_LIGHT_WOUNDS;} + else if (iRoll <=59) {iResult = SPELL_MAGIC_FANG;} + else if (iRoll <=64) {iResult = SPELL_CAMOFLAGE;} + else if (iRoll <=67) {iResult = SPELL_MAGIC_FANG;} + else if (iRoll <=70) {iResult = SPELL_ENDURE_ELEMENTS;} + else if (iRoll <=73) {iResult = SPELL_DIVINE_FAVOR;} + else if (iRoll <=77) {iResult = SPELL_SANCTUARY;} + else if (iRoll <=82) {iResult = SPELL_ENTANGLE;} + else if (iRoll <=86) {iResult = SPELL_SUMMON_CREATURE_I;} + else if (iRoll <=90) {iResult = SPELL_SUMMON_CREATURE_I;} + else iResult = Table824d1(); //Reroll + return iResult; + } +/* +Spells not in this table +SPELL_RESIST_ELEMENTS +SPELL_SOUND_BURST +SPELL_FLAME_LASH +SPELL_PROTECTION_FROM_ELEMENTS +SPELL_SLEEP +SPELL_ONE_WITH_THE_LAND +SPELL_AURAOFGLORY +SPELL_BLOOD_FRENZY +*/ +int Table824d2() + { + int iResult; + int iRoll = d100(); + if (iRoll <= 5) {iResult = SPELL_AID;} + else if (iRoll <=10) {iResult = SPELL_DARKNESS;} + else if (iRoll <=15) {iResult = SPELL_BARKSKIN;} + else if (iRoll <=20) {iResult = SPELL_BULLS_STRENGTH;} + else if (iRoll <=25) {iResult = SPELL_CHARM_PERSON_OR_ANIMAL;} + else if (iRoll <=28) {iResult = SPELL_EAGLE_SPLEDOR;} + else if (iRoll <=31) {iResult = SPELL_CURE_MODERATE_WOUNDS;} + else if (iRoll <=36) {iResult = SPELL_ENDURANCE;} + else if (iRoll <=39) {iResult = SPELL_FIND_TRAPS;} + else if (iRoll <=42) {iResult = SPELL_FOXS_CUNNING;} + else if (iRoll <=47) {iResult = SPELL_LESSER_DISPEL;} + else if (iRoll <=50) {iResult = SPELL_HOLD_ANIMAL;} + else if (iRoll <=55) {iResult = SPELL_HOLD_PERSON;} + else if (iRoll <=58) {iResult = SPELL_INFLICT_MODERATE_WOUNDS;} + else if (iRoll <=63) {iResult = SPELL_LESSER_RESTORATION;} + else if (iRoll <=67) {iResult = SPELL_SILENCE;} + else if (iRoll <=70) {iResult = SPELL_NEGATIVE_ENERGY_RAY;} + else if (iRoll <=75) {iResult = SPELL_OWLS_WISDOM;} + else if (iRoll <=79) {iResult = SPELL_SUMMON_CREATURE_II;} + else if (iRoll <=83) {iResult = SPELL_SUMMON_CREATURE_II;} + else if (iRoll <=85) {iResult = SPELL_REMOVE_PARALYSIS;} + else if (iRoll <=90) {iResult = SPELL_SILENCE;} + else iResult = Table824d2(); //Reroll + return iResult; + } +/* +Spells not in this list +SPELL_CURE_MODERATE_WOUNDS +SPELL_POISON +*/ +int Table824d3() + { + int iResult; + int iRoll = d100(); + if (iRoll <= 2) {iResult = SPELL_CALL_LIGHTNING;} + else if (iRoll <=9) {iResult = SPELL_CURE_SERIOUS_WOUNDS;} + else if (iRoll <=13) {iResult = SPELL_DISPEL_MAGIC;} + else if (iRoll <=15) {iResult = SPELL_DOMINATE_ANIMAL;} + else if (iRoll <=17) {iResult = SPELL_GREATER_MAGIC_FANG;} + else if (iRoll <=19) {iResult = SPELL_INFLICT_SERIOUS_WOUNDS;} + else if (iRoll <=22) {iResult = SPELL_INVISIBILITY_PURGE;} + else if (iRoll <=26) {iResult = SPELL_ANIMATE_DEAD;} + else if (iRoll <=28) {iResult = SPELL_MAGIC_CIRCLE_AGAINST_CHAOS;} + else if (iRoll <=30) {iResult = SPELL_MAGIC_CIRCLE_AGAINST_EVIL;} + else if (iRoll <=32) {iResult = SPELL_MAGIC_CIRCLE_AGAINST_GOOD;} + else if (iRoll <=34) {iResult = SPELL_MAGIC_CIRCLE_AGAINST_LAW;} + else if (iRoll <=38) {iResult = SPELL_NEGATIVE_ENERGY_PROTECTION;} + else if (iRoll <=41) {iResult = SPELL_NEUTRALIZE_POISON;} + else if (iRoll <=43) {iResult = SPELL_BESTOW_CURSE;} + else if (iRoll <=46) {iResult = SPELL_PRAYER;} + else if (iRoll <=51) {iResult = SPELL_PROTECTION_FROM_ELEMENTS;} + else if (iRoll <=53) {iResult = SPELL_REMOVE_BLINDNESS_AND_DEAFNESS;} + else if (iRoll <=56) {iResult = SPELL_REMOVE_CURSE;} + else if (iRoll <=59) {iResult = SPELL_REMOVE_DISEASE;} + else if (iRoll <=62) {iResult = SPELL_SEARING_LIGHT;} + else if (iRoll <=65) {iResult = SPELL_BLINDNESS_AND_DEAFNESS;} + else if (iRoll <=67) {iResult = SPELL_SPIKE_GROWTH;} + else if (iRoll <=72) {iResult = SPELL_CLARITY;} + else if (iRoll <=75) {iResult = SPELL_SUMMON_CREATURE_III;} + else if (iRoll <=78) {iResult = SPELL_SUMMON_CREATURE_III;} + else if (iRoll <=80) {iResult = SPELL_CONTAGION;} + else if (iRoll <=90) {iResult = SPELL_CONTINUAL_FLAME;} + else iResult = Table824d3(); //Reroll + return iResult; + } +/* +Spells not in this table + +*/ +int Table824d4() + { + int iResult; + int iRoll = d100(); + if (iRoll <= 2) {iResult = SPELL_DEATH_WARD;} + else if (iRoll <=5) {iResult = SPELL_DISMISSAL;} + else if (iRoll <=12) {iResult = SPELL_CURE_CRITICAL_WOUNDS;} + else if (iRoll <=19) {iResult = SPELL_POISON;} + else if (iRoll <=24) {iResult = SPELL_DISPEL_MAGIC;} + else if (iRoll <=27) {iResult = SPELL_DIVINE_POWER;} + else if (iRoll <=34) {iResult = SPELL_FLAME_STRIKE;} + else if (iRoll <=41) {iResult = SPELL_FREEDOM_OF_MOVEMENT;} + else if (iRoll <=47) {iResult = SPELL_MASS_CAMOFLAGE;} + else if (iRoll <=50) {iResult = SPELL_HAMMER_OF_THE_GODS;} + else if (iRoll <=53) {iResult = SPELL_INFLICT_CRITICAL_WOUNDS;} + else if (iRoll <=55) {iResult = SPELL_HOLD_MONSTER;} + else if (iRoll <=62) {iResult = SPELL_NEUTRALIZE_POISON;} + else if (iRoll <=66) {iResult = SPELL_STONESKIN;} + else if (iRoll <=68) {iResult = SPELL_RESTORATION;} + else if (iRoll <=71) {iResult = SPELL_POLYMORPH_SELF;} + else if (iRoll <=74) {iResult = SPELL_CURE_SERIOUS_WOUNDS;} + else if (iRoll <=76) {iResult = Table824d4();} //Reroll + else if (iRoll <=80) {iResult = SPELL_SUMMON_CREATURE_IV;} + else if (iRoll <=82) {iResult = SPELL_SUMMON_CREATURE_IV;} + else if (iRoll <=90) {iResult = Table824d4();} //Reroll + else iResult = Table824d4(); //Reroll + return iResult; + } +/* +Spells not in this list +SPELL_SUMMON_SHADOW //Unable to make a scroll of this spell + +*/ +int Table824d5() + { + int iResult; + int iRoll = d100(); + if (iRoll <= 7) {iResult = SPELL_AWAKEN;} + else if (iRoll <=13) {iResult = SPELL_DEATH_WARD;} + else if (iRoll <=15) {iResult = SPELL_SPELL_RESISTANCE;} + else if (iRoll <=22) {iResult = SPELL_CURE_CRITICAL_WOUNDS;} + else if (iRoll <=26) {iResult = SPELL_CIRCLE_OF_DOOM;} + else if (iRoll <=29) {iResult = SPELL_INFERNO;} + else if (iRoll <=35) {iResult = SPELL_FLAME_STRIKE;} + else if (iRoll <=38) {iResult = SPELL_GREATER_OWLS_WISDOM;} + else if (iRoll <=40) {iResult = Table824d5();} //Reroll + else if (iRoll <=43) {iResult = SPELL_HEALING_CIRCLE;} + else if (iRoll <=45) {iResult = SPELL_ICE_STORM;} + else if (iRoll <=50) {iResult = Table824d5();} //Reroll + else if (iRoll <=57) {iResult = SPELL_RAISE_DEAD;} + else if (iRoll <=60) {iResult = Table824d5();} //Reroll + else if (iRoll <=63) {iResult = SPELL_SLAY_LIVING;} + else if (iRoll <=65) {iResult = SPELL_SPELL_RESISTANCE;} + else if (iRoll <=67) {iResult = SPELL_SUMMON_CREATURE_V;} + else if (iRoll <=69) {iResult = SPELL_SUMMON_CREATURE_V;} + else if (iRoll <=72) {iResult = Table824d5();} //Reroll + else if (iRoll <=74) {iResult = SPELL_TRUE_SEEING;} + else if (iRoll <=75) {iResult = Table824d5();} //Reroll + else if (iRoll <=78) {iResult = SPELL_WALL_OF_FIRE;} + else if (iRoll <=80) {iResult = Table824d5();} //Reroll + else if (iRoll <=90) {iResult = Table824d5();} //Reroll + else iResult = Table824d5(); //Reroll + return iResult; + } + +int Table824d6() + { + int iResult; + int iRoll = d100(); + if (iRoll <= 8) {iResult = SPELL_CREATE_UNDEAD;} + else if (iRoll <=14) {iResult = SPELL_BLADE_BARRIER;} + else if (iRoll <=19) {iResult = SPELL_GREATER_DISPELLING;} + else if (iRoll <=23) {iResult = SPELL_ENERGY_BUFFER;} + else if (iRoll <=28) {iResult = SPELL_GREATER_STONESKIN;} + else if (iRoll <=34) {iResult = SPELL_HARM;} + else if (iRoll <=41) {iResult = SPELL_HEAL;} + else if (iRoll <=47) {iResult = SPELL_HEALING_CIRCLE;} + else if (iRoll <=55) {iResult = SPELL_PLANAR_ALLY;} + else if (iRoll <=57) {iResult = SPELL_REGENERATE;} + else if (iRoll <=60) {iResult = SPELL_BANISHMENT;} + else if (iRoll <=68) {iResult = SPELL_SUMMON_CREATURE_VI;} + else if (iRoll <=71) {iResult = SPELL_ETHEREALNESS;} + else if (iRoll <=77) {iResult = SPELL_DROWN;} + else if (iRoll <=80) {iResult = Table824d6();} //Reroll + else if (iRoll <=90) {iResult = Table824d6();} //Reroll + else iResult = Table824d6(); //Reroll + return iResult; + } + +int Table824d7() + { + int iResult; + int iRoll = d100(); + if (iRoll <= 11) {iResult = 0;} + else if (iRoll <=18) {iResult = SPELL_CREEPING_DOOM;} + else if (iRoll <=25) {iResult = SPELL_DESTRUCTION;} + else if (iRoll <=32) {iResult = SPELL_WORD_OF_FAITH;} + else if (iRoll <=36) {iResult = SPELL_FIRE_STORM;} + else if (iRoll <=40) {iResult = SPELL_GREATER_RESTORATION;} + else if (iRoll <=47) {iResult = SPELL_AURA_OF_VITALITY;} + else if (iRoll <=54) {iResult = SPELL_REGENERATE;} + else if (iRoll <=61) {iResult = SPELL_FIRE_STORM;} + else if (iRoll <=68) {iResult = SPELL_RESURRECTION;} + else if (iRoll <=72) {iResult = SPELL_SUMMON_CREATURE_VII;} + else if (iRoll <=76) {iResult = SPELL_HARM;} + else if (iRoll <=80) {iResult = SPELL_TRUE_SEEING;} + else if (iRoll <=90) {iResult = SPELL_HEAL;} + else iResult = Table824d7(); //Reroll + return iResult; + } +/* +Aura vs Alignment was unable to find this spell.... +*/ +int Table824d8() + { + int iResult; + int iRoll = d100(); + if (iRoll <= 6) {iResult = SPELL_CREATE_GREATER_UNDEAD;} + else if (iRoll <=12) {iResult = SPELL_CREEPING_DOOM;} + else if (iRoll <=18) {iResult = SPELL_SUNBEAM;} + else if (iRoll <=25) {iResult = SPELL_EARTHQUAKE;} + else if (iRoll <=30) {iResult = SPELL_FINGER_OF_DEATH;} + else if (iRoll <=35) {iResult = SPELL_FIRE_STORM;} + else if (iRoll <=44) {iResult = SPELL_HOLY_AURA;} + else if (iRoll <=50) {iResult = SPELL_MASS_HEAL;} + else if (iRoll <=56) {iResult = SPELL_NATURES_BALANCE;} + else if (iRoll <=62) {iResult = SPELL_PREMONITION;} + else if (iRoll <=68) {iResult = SPELL_SUMMON_CREATURE_VIII;} + else if (iRoll <=74) {iResult = SPELL_SUNBURST;} + else if (iRoll <=80) {iResult = SPELL_UNHOLY_AURA;} + else if (iRoll <=90) {iResult = SPELL_BOMBARDMENT;} + else iResult = Table824d8(); //Reroll + return iResult; + } +/* +Spells not in this list +SPELL_MASS_HEAL +SPELL_UNDEATHS_ETERNAL_FOE +*/ +int Table824d9() + { + int iResult; + int iRoll = d100(); + if (iRoll <= 7) {iResult = SPELL_EARTHQUAKE;} + else if (iRoll <=14) {iResult = SPELL_ELEMENTAL_SWARM;} + else if (iRoll <=26) {iResult = SPELL_ENERGY_DRAIN;} + else if (iRoll <=38) {iResult = SPELL_IMPLOSION;} + else if (iRoll <=50) {iResult = SPELL_GATE;} + else if (iRoll <=57) {iResult = SPELL_SHAPECHANGE;} + else if (iRoll <=68) {iResult = SPELL_STORM_OF_VENGEANCE;} + else if (iRoll <=80) {iResult = SPELL_SUMMON_CREATURE_IX;} + else if (iRoll <=90) {iResult = SPELL_RESURRECTION;} + else iResult = Table824d9(); //Reroll + return iResult; + } diff --git a/src/module/nss/inc_loot_staff.nss b/src/module/nss/inc_loot_staff.nss new file mode 100644 index 0000000..62e89cd --- /dev/null +++ b/src/module/nss/inc_loot_staff.nss @@ -0,0 +1,43 @@ +#include "inc_misc_tools" +// Randomly Generates Magic Staves. +// iType 2 = Medium Staff +// iType 3 = Major Staff +// No other value will work. + +object Table826b(); +object Table826c(); //mstaff008 + +object Table826b() + { + int iRoll = d100(); + string sString; + if (iRoll <= 10) {Table826b();} //Reroll + else if (iRoll <= 20) {sString = "mstaff101";} + else if (iRoll <= 30) {sString = "mstaff102";} + else if (iRoll <= 40) {sString = "mstaff103";} + else if (iRoll <= 50) {Table826b();} //Reroll + else if (iRoll <= 60) {sString = "mstaff104";} + else if (iRoll <= 70) {Table826b();} //Reroll + else if (iRoll <= 80) {sString = "mstaff105";} + else if (iRoll <= 89) {sString = "mstaff106";} + else if (iRoll <= 95) {sString = "mstaff107";} + else if (iRoll <= 100) {Table826b();} //Reroll + return CreateItemOnObject(sString); + } +object Table826c() + { + int iRoll = d100(); + string sString; + if (iRoll <= 5) {sString = "mstaff101";} + else if (iRoll <= 15) {sString = "mstaff102";} + else if (iRoll <= 30) {sString = "mstaff103";} + else if (iRoll <= 40) {Table826b();} //Reroll + else if (iRoll <= 50) {sString = "mstaff104";} + else if (iRoll <= 60) {Table826b();} //Reroll + else if (iRoll <= 70) {sString = "mstaff105";} + else if (iRoll <= 80) {sString = "mstaff106";} + else if (iRoll <= 90) {sString = "mstaff107";} + else if (iRoll <= 96) {Table826b();} //Reroll + else if (iRoll <= 100) {sString = "mstaff108";} //Reroll + return CreateItemOnObject(sString);; + } diff --git a/src/module/nss/inc_loot_wand.nss b/src/module/nss/inc_loot_wand.nss new file mode 100644 index 0000000..f85cc75 --- /dev/null +++ b/src/module/nss/inc_loot_wand.nss @@ -0,0 +1,176 @@ +#include "inc_misc_tools" +// Randomly Generates Scroll IDs for ResRefs +// iType 1 = Minor Wand +// iType 2 = Medium Wand +// iType 3 = Major Wand +// No other value will work. +object Table827(int iType); + +int Table827a(); +int Table827b(); +int Table827c(); + +object Table827(int iType) + { + int iRoll,i,iArcane; + string sResRef; + if (d100() <= 1) + iArcane = TRUE; + if (iType == 1) + i = Table827a(); + else if (iType == 2) + i = Table827b(); + else if (iType == 3) + i = Table827c(); + if (i < 1000) + sResRef = "wand" + Convert(i); + else + sResRef = "wand" + IntToString(i); + return CreateItemOnObject(sResRef); + } + +int Table827a() + { + int iResult; + int iRoll = d100(); + if (iRoll <= 5) {iResult = Table827a();} //Reroll + else if (iRoll <=10) {iResult = SPELL_LIGHT;} + else if (iRoll <=15) {iResult = Table827a();} //Reroll + else if (iRoll <=20) {iResult = SPELL_COLOR_SPRAY;} + else if (iRoll <=25) {iResult = SPELL_BURNING_HANDS;} + else if (iRoll <=30) {iResult = SPELL_CHARM_PERSON;} + else if (iRoll <=35) {iResult = Table827a();} //Reroll + else if (iRoll <=40) {iResult = SPELL_MAGIC_MISSILE;} + else if (iRoll <=45) {iResult = Table827a();} //Reroll + else if (iRoll <=50) {iResult = SPELL_SUMMON_CREATURE_I;} + else if (iRoll <=55) {iResult = SPELL_CURE_LIGHT_WOUNDS;} + else if (iRoll <=58) {iResult = 2000 + SPELL_MAGIC_MISSILE;} + else if (iRoll <=59) {iResult = 3000 + SPELL_MAGIC_MISSILE;} + else if (iRoll <=63) {iResult = Table827a();} //Reroll + else if (iRoll <=66) {iResult = SPELL_SUMMON_CREATURE_II;} + else if (iRoll <=69) {iResult = SPELL_SILENCE;} + else if (iRoll <=72) {iResult = SPELL_KNOCK;} + else if (iRoll <=75) {iResult = Table827a();} //Reroll + else if (iRoll <=78) {iResult = SPELL_INVISIBILITY;} + else if (iRoll <=81) {iResult = Table827a();} //Reroll + else if (iRoll <=84) {iResult = SPELL_BULLS_STRENGTH;} + else if (iRoll <=87) {iResult = Table827a();} //Reroll + else if (iRoll <=90) {iResult = SPELL_GHOUL_TOUCH;} + else if (iRoll <=93) {iResult = SPELL_CURE_MODERATE_WOUNDS;} + else if (iRoll <=96) {iResult = SPELL_HOLD_PERSON;} + else if (iRoll <=98) {iResult = SPELL_MELFS_ACID_ARROW;} + else if (iRoll <=99) {iResult = SPELL_WEB;} + else {iResult = SPELL_DARKNESS;} + return iResult; + } + +int Table827b() + { + int iResult; + int iRoll = d100(); + if (iRoll <=3) {iResult = SPELL_CHARM_PERSON;} + else if (iRoll <=6) {iResult = Table827b();} //Reroll + else if (iRoll <=9) {iResult = SPELL_MAGIC_MISSILE;} + else if (iRoll <=12) {iResult = Table827b();} //Reroll + else if (iRoll <=15) {iResult = SPELL_SUMMON_CREATURE_I;} + else if (iRoll <=18) {iResult = SPELL_CURE_LIGHT_WOUNDS;} + else if (iRoll <=21) {iResult = 2000 + SPELL_MAGIC_MISSILE;} + else if (iRoll <=23) {iResult = 3000 + SPELL_MAGIC_MISSILE;} + else if (iRoll <=26) {iResult = Table827b();} //Reroll + else if (iRoll <=29) {iResult = SPELL_SUMMON_CREATURE_II;} + else if (iRoll <=32) {iResult = SPELL_SILENCE;} + else if (iRoll <=35) {iResult = SPELL_KNOCK;} + else if (iRoll <=38) {iResult = Table827b();} //Reroll + else if (iRoll <=41) {iResult = SPELL_INVISIBILITY;} + else if (iRoll <=44) {iResult = Table827b();} //Reroll + else if (iRoll <=48) {iResult = SPELL_BULLS_STRENGTH;} + else if (iRoll <=50) {iResult = Table827b();} //Reroll + else if (iRoll <=53) {iResult = SPELL_GHOUL_TOUCH;} + else if (iRoll <=60) {iResult = SPELL_CURE_MODERATE_WOUNDS;} + else if (iRoll <=63) {iResult = SPELL_HOLD_PERSON;} + else if (iRoll <=66) {iResult = SPELL_MELFS_ACID_ARROW;} + else if (iRoll <=69) {iResult = SPELL_WEB;} + else if (iRoll <=71) {iResult = SPELL_DARKNESS;} + else if (iRoll <=72) {iResult = 4000 + SPELL_MAGIC_MISSILE;} + else if (iRoll <=75) {iResult = SPELL_FIREBALL;} + else if (iRoll <=80) {iResult = SPELL_LIGHTNING_BOLT;} + else if (iRoll <=82) {iResult = SPELL_SUMMON_CREATURE_III;} + else if (iRoll <=84) {iResult = Table827b();} //Reroll + else if (iRoll <=86) {iResult = Table827b();} //Reroll + else if (iRoll <=88) {iResult = SPELL_SLOW;} + else if (iRoll <=90) {iResult = Table827b();} //Reroll + else if (iRoll <=92) {iResult = SPELL_DISPEL_MAGIC;} + else if (iRoll <=94) {iResult = SPELL_CURE_SERIOUS_WOUNDS;} + else if (iRoll <=95) {iResult = SPELL_CONTAGION;} + else if (iRoll <=96) {iResult = 2000+SPELL_CHARM_PERSON;} + else if (iRoll <=97) {iResult = 2000+SPELL_FIREBALL;} + else if (iRoll <=99) {iResult = SPELL_SEARING_LIGHT;} + else iResult = 2000+SPELL_LIGHTNING_BOLT; + return iResult; + } + +int Table827c() + { + int iResult; + int iRoll = d100(); + if (iRoll <=02) {iResult = 3000 + SPELL_MAGIC_MISSILE;} + else if (iRoll <=3) {iResult = Table827b();} //Reroll + else if (iRoll <=4) {iResult = SPELL_SUMMON_CREATURE_II;} + else if (iRoll <=5) {iResult = SPELL_SILENCE;} + else if (iRoll <=6) {iResult = SPELL_KNOCK;} + else if (iRoll <=7) {iResult = Table827b();} //Reroll + else if (iRoll <=10) {iResult = SPELL_INVISIBILITY;} + else if (iRoll <=12) {iResult = Table827b();} //Reroll + else if (iRoll <=15) {iResult = SPELL_BULLS_STRENGTH;} + else if (iRoll <=17) {iResult = Table827b();} //Reroll + else if (iRoll <=19) {iResult = SPELL_GHOUL_TOUCH;} + else if (iRoll <=21) {iResult = SPELL_CURE_MODERATE_WOUNDS;} + else if (iRoll <=23) {iResult = SPELL_HOLD_PERSON;} + else if (iRoll <=25) {iResult = SPELL_MELFS_ACID_ARROW;} + else if (iRoll <=27) {iResult = SPELL_WEB;} + else if (iRoll <=30) {iResult = SPELL_DARKNESS;} + else if (iRoll <=33) {iResult = 4000 + SPELL_MAGIC_MISSILE;} + else if (iRoll <=36) {iResult = 5000 + SPELL_MAGIC_MISSILE;} + else if (iRoll <=39) {iResult = SPELL_FIREBALL;} + else if (iRoll <=41) {iResult = SPELL_LIGHTNING_BOLT;} + else if (iRoll <=43) {iResult = SPELL_SUMMON_CREATURE_III;} + else if (iRoll <=45) {iResult = Table827b();} //Reroll + else if (iRoll <=47) {iResult = Table827b();} //Reroll + else if (iRoll <=49) {iResult = SPELL_SLOW;} + else if (iRoll <=51) {iResult = Table827b();} //Reroll + else if (iRoll <=53) {iResult = SPELL_DISPEL_MAGIC;} + else if (iRoll <=55) {iResult = SPELL_CURE_SERIOUS_WOUNDS;} + else if (iRoll <=57) {iResult = SPELL_CONTAGION;} + else if (iRoll <=58) {iResult = 2000+SPELL_CHARM_PERSON;} + else if (iRoll <=59) {iResult = 2000+SPELL_FIREBALL;} + else if (iRoll <=61) {iResult = SPELL_SEARING_LIGHT;} + else if (iRoll <=63) {iResult = 2000+SPELL_LIGHTNING_BOLT;} + + else if (iRoll <=65) {iResult = 3000+SPELL_FIREBALL;} + else if (iRoll <=67) {iResult = 3000+SPELL_LIGHTNING_BOLT;} + else if (iRoll <=69) {iResult = SPELL_CHARM_MONSTER;} + else if (iRoll <=71) {iResult = SPELL_FEAR;} + else if (iRoll <=73) {iResult = SPELL_IMPROVED_INVISIBILITY;} + else if (iRoll <=75) {iResult = SPELL_POLYMORPH_SELF;} + else if (iRoll <=77) {iResult = Table827b();} //Reroll + else if (iRoll <=79) {iResult = SPELL_ICE_STORM;} + else if (iRoll <=81) {iResult = SPELL_SUMMON_CREATURE_IV;} + else if (iRoll <=83) {iResult = Table827b();} //Reroll + else if (iRoll <=84) {iResult = SPELL_WALL_OF_FIRE;} + else if (iRoll <=85) {iResult = SPELL_RAY_OF_ENFEEBLEMENT;} + + else if (iRoll <=86) {iResult = SPELL_POISON;} + else if (iRoll <=87) {iResult = Table827b();} //Reroll + else if (iRoll <=89) {iResult = SPELL_NEUTRALIZE_POISON;} + else if (iRoll <=90) {iResult = SPELL_INFLICT_CRITICAL_WOUNDS;} + else if (iRoll <=92) {iResult = SPELL_CURE_CRITICAL_WOUNDS;} + else if (iRoll <=93) {iResult = SPELL_RESTORATION;} + else if (iRoll <=94) {iResult = 4000+SPELL_FIREBALL;} + else if (iRoll <=95) {iResult = 4000+SPELL_LIGHTNING_BOLT;} + else if (iRoll <=96) {iResult = Table827b();} //Reroll + else if (iRoll <=97) {iResult = Table827b();} //Reroll + else if (iRoll <=98) {iResult = Table827b();} //Reroll + else if (iRoll <=99) {iResult = Table827b();} //Reroll + else iResult = SPELL_STONESKIN; + return iResult; + } diff --git a/src/module/nss/inc_loot_weapons.nss b/src/module/nss/inc_loot_weapons.nss new file mode 100644 index 0000000..5445bba --- /dev/null +++ b/src/module/nss/inc_loot_weapons.nss @@ -0,0 +1,1147 @@ +#include "inc_item_tools" + +// Minor Magic Weapon Table +object Table810a(object oWeapon =OBJECT_INVALID,int iEnc = 0); +// Medium Magic Weapon Table +object Table810b(object oWeapon =OBJECT_INVALID,int iEnc = 0); +// Major Magic Weapon Table +object Table810c(object oWeapon =OBJECT_INVALID,int iEnc = 0); +// Generates a random weapon type. +// See Table 8-11, 8-12,8-13,8-14 on page 184 of DMG +// if iType = 0 a random category will be determined. +// if iType = 1 a common weapon type will be returned. +// if iType = 2 a uncommon weapon type will be returned. +// if iType = 3 a ranged weaponwill be returned. +// Note this does not return a complete resref. +object Table811_14(int iType = 0); + +// Melee Weapon Special Properties Table +int Table815a(object oWeapon, int iEnc); +// Melee Weapon Special Properties Table +int Table815b(object oWeapon, int iEnc); +// Melee Weapon Special Properties Table +int Table815c(object oWeapon, int iEnc); + +// Ranged Weapon Special Properties Table +int Table816a(object oWeapon, int iEnc); +// Ranged Weapon Special Properties Table +int Table816b(object oWeapon, int iEnc); +// Ranged Weapon Special Properties Table +int Table816c(object oWeapon, int iEnc); + +object Table817b(); +object Table817c(); + + +object Table811_14(int iType) // Table 8 -11 thru 8 -14 + { + object oItem; + string sString; + int iAmount = 1; + int iRoll = d100(); + if (!iType) + { + if (iRoll <= 70) iType = 1; + else if (iRoll <= 80) iType = 2; + else iType = 3; + iRoll = d100(); + } + switch (iType) + { + case 1:// Table 8 -12 + { + if (iRoll <= 4) sString = "nw_wswdg001"; + else if (iRoll <= 14) sString = "nw_waxgr001"; + else if (iRoll <= 24) sString = "nw_wswgs001"; + else if (iRoll <= 28) sString = "nw_wspka001"; + else if (iRoll <= 41) sString = "nw_wswls001"; + else if (iRoll <= 45) sString = "nw_wblml001"; + else if (iRoll <= 50) sString = "nw_wblml001"; + else if (iRoll <= 54) sString = "nw_waxgr001"; // changed from nunchaku + else if (iRoll <= 57) sString = "nw_wdbqs001"; + else if (iRoll <= 61) sString = "nw_wswrp001"; + else if (iRoll <= 66) sString = "nw_wswsc001"; + else if (iRoll <= 70) sString = "nw_wplss001"; + else if (iRoll <= 74) sString = "nw_waxbt001"; // changed from siangham + else if (iRoll <= 84) sString = "nw_wswbs001"; + else if (iRoll <= 89) sString = "nw_wswss001"; + else sString = "dwaxe001"; + break; + } + case 2:// Table 8 -13 + { + if (iRoll <= 3) sString = "nw_wdbax001"; + else if (iRoll <= 7) sString = "nw_waxbt001"; + else if (iRoll <= 10) sString = "nw_wblms001"; + else if (iRoll <= 12) sString = "nw_wblcl001"; + else if (iRoll <= 16) sString = "nw_wbwxl001"; + else if (iRoll <= 19) sString = "nw_wbwxh001"; + else if (iRoll <= 21) sString = "nw_wswdg001"; + else if (iRoll <= 23) sString = "nw_wswls001"; + else if (iRoll <= 24) sString = "nw_wdbma001"; + else if (iRoll <= 31) sString = "nw_wblfh001"; + else if (iRoll <= 35) sString = "nw_wblfl001"; + else if (iRoll <= 37) sString = "nw_wswdg001"; + else if (iRoll <= 39) sString = "nw_wswdg001"; + else if (iRoll <= 41) sString = "nw_wplhb001"; + else if (iRoll <= 43) sString = "nw_wblcl001"; + else if (iRoll <= 45) sString = "nw_wplhb001"; + else if (iRoll <= 48) sString = "nw_wplhb001"; + else if (iRoll <= 51) sString = "nw_wplss001"; + else if (iRoll <= 54) sString = "nw_wblhw001"; + else if (iRoll <= 56) sString = "nw_wblhl001"; + else if (iRoll <= 58) sString = "nw_waxhn001"; + else if (iRoll <= 61) sString = "nw_wspku001"; + else if (iRoll <= 63) sString = "nw_wplss001"; + else if (iRoll <= 65) sString = "nw_wplss001"; + else if (iRoll <= 67) sString = "nw_wplss001"; + else if (iRoll <= 70) sString = "nw_wblms001"; + else if (iRoll <= 72) sString = "nw_wblms001"; + else if (iRoll <= 74) sString = "nw_waxbt001"; + else if (iRoll <= 76) sString = "nw_waxbt001"; + else if (iRoll <= 78) sString = "nw_wplhb001"; + else if (iRoll <= 80) sString = "nw_wblcl001"; + else if (iRoll <= 82) sString = "nw_wplsc001"; + else if (iRoll <= 84) sString = "nw_wthsh001"; + else if (iRoll <= 86) sString = "nw_wspsc001"; + else if (iRoll <= 87) sString = "nw_wdbsw001"; + else if (iRoll <= 91) sString = "nw_wplss001"; + else if (iRoll <= 94) sString = "nw_wdbma001"; + else if (iRoll <= 97) sString = "nw_wblhw001"; + else sString = "x2_it_wpwhip"; + break; + } + case 3:// Table 8 -14 + { + if (iRoll <= 10) + { + iRoll = d100(); + if (iRoll <= 50) sString = "nw_wamar001"; + else if (iRoll <= 80) sString = "nw_wambo001"; + else sString = "nw_wambu001"; + iAmount = (Random(100)+1)/2; + if (iAmount > 99) iAmount = 99; + if (iAmount < 1) iAmount = 1; + } + else if (iRoll <= 15) sString = "nw_wthax001"; + else if (iRoll <= 25) sString = "nw_wbwxh001"; + else if (iRoll <= 35) sString = "nw_wbwxl001"; + else if (iRoll <= 39) sString = "nw_wthdt001"; + else if (iRoll <= 41) sString = "nw_wthdt001"; + else if (iRoll <= 46) sString = "nw_wbwsh001"; + else if (iRoll <= 51) sString = "nw_wbwsh001"; + else if (iRoll <= 56) sString = "nw_wbwsh001"; + else if (iRoll <= 61) sString = "nw_wbwsh001"; + else if (iRoll <= 65) sString = "nw_wbwsl001"; + else if (iRoll <= 75) sString = "nw_wbwln001"; + else if (iRoll <= 80) sString = "nw_wbwln001"; + else if (iRoll <= 85) sString = "nw_wbwln001"; + else if (iRoll <= 90) sString = "nw_wbwln001"; + else if (iRoll <= 95) sString = "nw_wbwln001"; + else sString = "nw_wbwln001"; + break; + } + }; + oItem = CreateItemOnObject(sString,OBJECT_SELF,iAmount); + SetLocalInt(oItem,"BaseValue",GetGoldPieceValue(oItem)); + return oItem; + } + +object Table810a(object oWeapon,int iEnc) + { + int iRoll = d100(); + if (!GetIsObjectValid(oWeapon)) + oWeapon = Table811_14(); + SetLocalInt(oWeapon,"MW",TRUE); + itemproperty ipItem; + if (GetWeaponRanged(oWeapon)) + { + if (iRoll <= 70) {AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyAttackBonus(1),oWeapon);iEnc += 1;} + else if (iRoll <= 85) {AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyAttackBonus(2),oWeapon);iEnc += 2;} + else + { + iEnc = Table815a(oWeapon,iEnc); //Special Powers + oWeapon = Table810a(oWeapon,iEnc); //Reroll for more powers. + } + } + else + { + if (iRoll <= 70) {AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyEnhancementBonus(1),oWeapon);iEnc += 1;} + else if (iRoll <= 85) {AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyEnhancementBonus(2),oWeapon);iEnc += 2;} + else + { + iEnc = Table815a(oWeapon,iEnc); //Special Powers + oWeapon = Table810a(oWeapon,iEnc); //Reroll for more powers. + } + } + SetLocalInt(oWeapon,"Enc",iEnc); + return oWeapon; + } + +object Table810b(object oWeapon, int iEnc) + { + int iRoll = d100(); + if (!GetIsObjectValid(oWeapon)) + oWeapon = Table811_14(); + SetLocalInt(oWeapon,"MW",TRUE); + if (GetWeaponRanged(oWeapon)) + { + if (iRoll <= 10){AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyAttackBonus(1),oWeapon);iEnc += 1;} + else if (iRoll <= 20){AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyAttackBonus(2),oWeapon);iEnc += 2;} + else if (iRoll <= 58){AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyAttackBonus(3),oWeapon);iEnc += 3;} + else if (iRoll <= 62){AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyAttackBonus(4),oWeapon);iEnc += 4;} + else if (iRoll <= 68) //Specific Weapon + { + DestroyObject(oWeapon); + oWeapon = Table817b(); + iEnc = 0; + SetLocalInt(oWeapon,"MW",TRUE); + } + else + { + iEnc = Table815b(oWeapon,iEnc); //Special Powers + oWeapon = Table810b(oWeapon,iEnc); //Reroll for more powers. + } + } + else + { + if (iRoll <= 10){AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyEnhancementBonus(1),oWeapon);iEnc += 1;} + else if (iRoll <= 20){AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyEnhancementBonus(2),oWeapon);iEnc += 2;} + else if (iRoll <= 58){AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyEnhancementBonus(3),oWeapon);iEnc += 3;} + else if (iRoll <= 62){AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyEnhancementBonus(4),oWeapon);iEnc += 4;} + else if (iRoll <= 68) //Specific Weapon + { + DestroyObject(oWeapon); + oWeapon = Table817b(); + iEnc = 0; + SetLocalInt(oWeapon,"MW",TRUE); + } + else + { + iEnc = Table815b(oWeapon,iEnc); //Special Powers + oWeapon = Table810b(oWeapon,iEnc); //Reroll for more powers. + } + } + SetLocalInt(oWeapon,"Enc",iEnc); + return oWeapon; + } + +object Table810c(object oWeapon, int iEnc) + { + int iTemp; + int iRoll = d100(); + if (!GetIsObjectValid(oWeapon)) + oWeapon = Table811_14(); + SetLocalInt(oWeapon,"MW",TRUE); + if (GetWeaponRanged(oWeapon)) + { + if (iRoll <= 20){AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyAttackBonus(3),oWeapon);iEnc += 3;} + else if (iRoll <= 38){AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyAttackBonus(4),oWeapon);iEnc += 4;} + else if (iRoll <= 49){AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyAttackBonus(5),oWeapon);iEnc += 5;} + else if (iRoll <= 63) //Specfic Weapon + { + DestroyObject(oWeapon); + oWeapon = Table817c(); + iEnc = 0; + SetLocalInt(oWeapon,"MW",TRUE); + } + else + { + iEnc = Table815c(oWeapon,iEnc); //Special Powers + oWeapon = Table810c(oWeapon,iEnc); //Reroll for more powers. + } + } + else + { + if (iRoll <= 20){AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyEnhancementBonus(3),oWeapon);iEnc += 3;} + else if (iRoll <= 38){AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyEnhancementBonus(4),oWeapon);iEnc += 4;} + else if (iRoll <= 49){AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyEnhancementBonus(5),oWeapon);iEnc += 5;} + else if (iRoll <= 63) //Specfic Weapon + { + DestroyObject(oWeapon); + oWeapon = Table817c(); + iEnc = 0; + SetLocalInt(oWeapon,"MW",TRUE); + } + else + { + iEnc = Table815c(oWeapon,iEnc); //Special Powers + oWeapon = Table810c(oWeapon,iEnc); //Reroll for more powers. + } + } + SetLocalInt(oWeapon,"Enc",iEnc); + return oWeapon; + } + +int Table815a(object oWeapon,int iEnc) + { + int iTemp; + int iRoll = d100(); + if (iRoll <= 15) // Defending Weapon + { + iEnc += 1; + iTemp = GetEnchantmentBonus(oWeapon); + if (iTemp < 1) iTemp = 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyACBonus(iTemp)); + } + else if (iRoll <= 25) // Flaming Weapon + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 35) + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 45) + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 55) + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 70) + { + if (GetWeaponSlashing(oWeapon)) + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyKeen()); + } + else + return Table815a(oWeapon,iEnc); + } + else if (iRoll <= 80) + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyBonusFeat(IP_CONST_FEAT_CLEAVE)); + } + else if (iRoll <= 89) // Unable to add spell storing so did acid. + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 99) // Unable to add throwing so did a little damage reduction. + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,IP_CONST_DAMAGESOAK_5_HP)); + } + else//Roll twice + { + iEnc = Table815a(oWeapon,iEnc); + iEnc = Table815a(oWeapon,iEnc); + } + return iEnc; + } + +int Table815b(object oWeapon, int iEnc) + { + int iRoll = d100(); + int iTemp; + if (iRoll <= 10) // Defending Weapon + { + iEnc += 1; + iTemp = GetEnchantmentBonus(oWeapon); + if (iTemp < 1) iTemp = 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyACBonus(iTemp)); + } + else if (iRoll <= 15) // Flaming Weapon + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 20) + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 25) + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 30) + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 40) + { + if (!IPGetIsBludgeoningWeapon(oWeapon)) + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyKeen()); + } + else + return Table815b(oWeapon,iEnc); + } + else if (iRoll <= 50) + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyBonusFeat(IP_CONST_FEAT_CLEAVE)); + } + else if (iRoll <= 51) // Unable to add spell storing so did acid. + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 56) // Unable to add throwing so did a little damage reduction. + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,IP_CONST_DAMAGESOAK_5_HP)); + } + else if (iRoll <= 59) + { + iEnc +=2; + iTemp = GetBaneRace(); + IPSafeAddItemProperty(oWeapon,ItemPropertyEnhancementBonusVsRace(iTemp,GetEnchantmentBonus(oWeapon)+2)); + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsRace(iTemp,IP_CONST_DAMAGETYPE_MAGICAL,IP_CONST_DAMAGEBONUS_2d6)); + } + else if (iRoll <= 62) + { + if (GetWeaponBludgeoning(oWeapon)) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyOnHitProps(IP_CONST_ONHIT_SLAYRACE,IP_CONST_ONHIT_SAVEDC_14,IP_CONST_RACIALTYPE_UNDEAD)); + } + else + iEnc = Table815b(oWeapon,iEnc); + } + else if (iRoll <= 65) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyMassiveCritical(IP_CONST_DAMAGEBONUS_1d10)); + } + else if (iRoll <= 68) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyMassiveCritical(IP_CONST_DAMAGEBONUS_1d10)); + } + else if (iRoll <= 71) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyMassiveCritical(IP_CONST_DAMAGEBONUS_1d10)); + } + else if (iRoll <= 76) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_1d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyMassiveCritical(IP_CONST_DAMAGEBONUS_1d10)); + } + else if (iRoll <= 79) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyOnHitProps(IP_CONST_ONHIT_WOUNDING,IP_CONST_ONHIT_SAVEDC_20)); + } + else if (iRoll <= 82) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_GOOD)); + } + else if (iRoll <= 85) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_GOOD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_EVIL)); + } + else if (iRoll <= 88) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_LAWFUL)); + } + else if (iRoll <= 91) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_LAWFUL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC)); + } + else if (iRoll <= 92) + { + iEnc += 4; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 93) + { + iEnc += 4; + IPSafeAddItemProperty(oWeapon,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_SLOW,IP_CONST_SPELLLEVEL_5)); + } + else if (iRoll <= 95) + { + iEnc += 4; + IPSafeAddItemProperty(oWeapon,ItemPropertyHaste()); + } + else//Roll twice + { + iEnc = Table815b(oWeapon,iEnc); + iEnc = Table815b(oWeapon,iEnc); + } + return iEnc; + } + +int Table815c(object oWeapon, int iEnc) + { + int iRoll = d100(); + int iTemp; + if (iRoll <= 3) // Flaming Weapon + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 6) + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 9) + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 12) + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 17) + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyBonusFeat(IP_CONST_FEAT_CLEAVE)); + } + else if (iRoll <= 19) // Unable to add spell storing so did acid. + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 21) // Unable to add throwing so did a little damage reduction. + { + iEnc += 1; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,IP_CONST_DAMAGESOAK_5_HP)); + } + else if (iRoll <= 26) + { + iEnc +=2; + iTemp = GetBaneRace(); + IPSafeAddItemProperty(oWeapon,ItemPropertyEnhancementBonusVsRace(iTemp,GetEnchantmentBonus(oWeapon)+2)); + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsRace(iTemp,IP_CONST_DAMAGETYPE_MAGICAL,IP_CONST_DAMAGEBONUS_2d6)); + } + else if (iRoll <= 29) + { + if (GetWeaponBludgeoning(oWeapon)) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyOnHitProps(IP_CONST_ONHIT_SLAYRACE,IP_CONST_ONHIT_SAVEDC_14,IP_CONST_RACIALTYPE_UNDEAD)); + } + else + iEnc = Table815b(oWeapon,iEnc); + } + else if (iRoll <= 33) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyMassiveCritical(IP_CONST_DAMAGEBONUS_1d10)); + } + else if (iRoll <= 37) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyMassiveCritical(IP_CONST_DAMAGEBONUS_1d10)); + } + else if (iRoll <= 41) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyMassiveCritical(IP_CONST_DAMAGEBONUS_1d10)); + } + else if (iRoll <= 44) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_1d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyMassiveCritical(IP_CONST_DAMAGEBONUS_1d10)); + } + else if (iRoll <= 47) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyOnHitProps(IP_CONST_ONHIT_WOUNDING,IP_CONST_ONHIT_SAVEDC_20)); + } + else if (iRoll <= 52) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_GOOD)); + } + else if (iRoll <= 57) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_GOOD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_EVIL)); + } + else if (iRoll <= 62) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_LAWFUL)); + } + else if (iRoll <= 67) + { + iEnc += 2; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_LAWFUL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC)); + } + else if (iRoll <= 71) + { + iEnc += 4; + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL,IP_CONST_DAMAGEBONUS_1d6)); + } + else if (iRoll <= 73) + { + iEnc += 4; + IPSafeAddItemProperty(oWeapon,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_SLOW,IP_CONST_SPELLLEVEL_5)); + } + else if (iRoll <= 76) + { + iEnc += 4; + IPSafeAddItemProperty(oWeapon,ItemPropertyHaste()); + } + else if (iRoll <= 80) + { + if (GetWeaponSlashing(oWeapon)) + { + iEnc += 5; + IPSafeAddItemProperty(oWeapon,ItemPropertyOnHitProps(IP_CONST_ONHIT_VORPAL,20)); + } + else + iEnc = Table815c(oWeapon,iEnc); + } + else//Roll twice + { + iEnc = Table815c(oWeapon,iEnc); + iEnc = Table815c(oWeapon,iEnc); + } + return iEnc; + } + +int Table816a(object oWeapon, int iEnc) + { + int iAmmo = GetIsAmmo(oWeapon); + int iRoll = d100(); + if (iRoll <= 20) + { + iEnc += 1; + if (iAmmo) + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_1d6)); + else + IPSafeAddItemProperty(oWeapon,ItemPropertyUnlimitedAmmo(IP_CONST_UNLIMITEDAMMO_BASIC)); + } + else if (iRoll <= 40) + { + iEnc += 1; + if (!iAmmo) + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_1d6)); + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_ACID); + IPSafeAddItemProperty(oWeapon,ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE)); + } + } + else if (iRoll <= 60) + { + iEnc += 1; + if (iAmmo) + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6)); + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_FIRE); + IPSafeAddItemProperty(oWeapon,ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE)); + } + } + else if (iRoll <= 80) + { + iEnc += 1; + if (iAmmo) + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d6)); + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_ELECTRICAL); + IPSafeAddItemProperty(oWeapon,ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE)); + } + } + else + { + iEnc += 1; + if (iAmmo) + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1d6)); + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_COLD); + IPSafeAddItemProperty(oWeapon,ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE)); + } + } + return iEnc; + } + +int Table816b(object oWeapon, int iEnc) + { + int iTemp; + int iAmmo = GetBaseItemType(oWeapon); + if (iAmmo == BASE_ITEM_ARROW + || iAmmo == BASE_ITEM_BULLET + || iAmmo == BASE_ITEM_BOLT) + iAmmo = TRUE; + else + iAmmo = FALSE; + int iRoll = d100(); + if (iRoll <= 15) + { + iEnc += 1; + if (iAmmo) + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_1d6)); + else + IPSafeAddItemProperty(oWeapon,ItemPropertyUnlimitedAmmo(IP_CONST_UNLIMITEDAMMO_BASIC)); + } + else if (iRoll <= 30) + { + iEnc += 1; + if (iAmmo) + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_1d6)); + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_ACID); + IPSafeAddItemProperty(oWeapon,ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE)); + } + } + else if (iRoll <= 35) + { + iEnc += 1; + if (iAmmo) + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6)); + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_FIRE); + IPSafeAddItemProperty(oWeapon,ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE)); + } + } + else if (iRoll <= 40) + { + iEnc += 1; + if (iAmmo) + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d6)); + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_ELECTRICAL); + IPSafeAddItemProperty(oWeapon,ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE)); + } + } + else if (iRoll <= 45) + { + iEnc += 1; + if (iAmmo) + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1d6)); + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_COLD); + IPSafeAddItemProperty(oWeapon,ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE)); + } + } + else if (iRoll <= 50) + { + iEnc += 2; + if (iAmmo) + { + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyMassiveCritical(DAMAGE_BONUS_2d10)); + } + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_FIRE); + IPSafeAddItemProperty(oWeapon,ItemPropertyUnlimitedAmmo(IP_CONST_UNLIMITEDAMMO_1D6FIRE)); + } + } + else if (iRoll <= 55) + { + iEnc += 2; + if (iAmmo) + { + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyMassiveCritical(DAMAGE_BONUS_2d10)); + } + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_COLD); + IPSafeAddItemProperty(oWeapon,ItemPropertyUnlimitedAmmo(IP_CONST_UNLIMITEDAMMO_1D6COLD)); + } + } + else if (iRoll <= 60) + { + iEnc += 2; + if (iAmmo) + { + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyMassiveCritical(DAMAGE_BONUS_2d10)); + } + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_COLD); + IPSafeAddItemProperty(oWeapon,ItemPropertyUnlimitedAmmo(IP_CONST_UNLIMITEDAMMO_1D6LIGHT)); + } + } + else if (iRoll <= 66) + { + iEnc += 2; + if (iAmmo) + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsRace(GetBaneRace(),IP_CONST_DAMAGETYPE_MAGICAL,DAMAGE_BONUS_2d6)); + else + { + iTemp = GetBaneRace(); + SetLocalInt(oWeapon,"Bane",iTemp); + SetLocalInt(oWeapon,"SpecialAmmo",3); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_MAGICAL); + IPSafeAddItemProperty(oWeapon,ItemPropertyAttackBonusVsRace(iTemp,GetEnchantmentBonus(oWeapon)+2)); + } + } + else if (iRoll <= 74) + { + iEnc += 2; + if (iAmmo) + { + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,DAMAGE_BONUS_2d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_GOOD)); + } + else + { + SetLocalInt(oWeapon,"SpecialAmmo",2); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_DIVINE); + SetLocalInt(oWeapon,"AlignmentTarget",IP_CONST_ALIGNMENTGROUP_EVIL); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_GOOD)); + } + } + else if (iRoll <= 82) + { + iEnc += 2; + if (iAmmo) + { + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_GOOD,IP_CONST_DAMAGETYPE_DIVINE,DAMAGE_BONUS_2d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_EVIL)); + } + else + { + SetLocalInt(oWeapon,"SpecialAmmo",2); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_DIVINE); + SetLocalInt(oWeapon,"AlignmentTarget",IP_CONST_ALIGNMENTGROUP_GOOD); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_EVIL)); + } + } + else if (iRoll <= 90) + { + iEnc += 2; + if (iAmmo) + { + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC,IP_CONST_DAMAGETYPE_DIVINE,DAMAGE_BONUS_2d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_LAWFUL)); + } + else + { + SetLocalInt(oWeapon,"SpecialAmmo",2); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_DIVINE); + SetLocalInt(oWeapon,"AlignmentTarget",IP_CONST_ALIGNMENTGROUP_CHAOTIC); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_LAWFUL)); + } + } + else if (iRoll <= 98) + { + iEnc += 2; + if (iAmmo) + { + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_LAWFUL,IP_CONST_DAMAGETYPE_DIVINE,DAMAGE_BONUS_2d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC)); + } + else + { + SetLocalInt(oWeapon,"SpecialAmmo",2); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_DIVINE); + SetLocalInt(oWeapon,"AlignmentTarget",IP_CONST_ALIGNMENTGROUP_LAWFUL); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC)); + } + } + else // Roll again twice + { + iEnc = Table816b(oWeapon, iEnc); + iEnc = Table816b(oWeapon, iEnc); + } + return iEnc; + } + +int Table816c(object oWeapon, int iEnc) + { + int iTemp; + int iAmmo = GetBaseItemType(oWeapon); + if (iAmmo == BASE_ITEM_ARROW + || iAmmo == BASE_ITEM_BULLET + || iAmmo == BASE_ITEM_BOLT) + iAmmo = TRUE; + else + iAmmo = FALSE; + int iRoll = d100(); + if (iRoll <= 10) + { + iEnc += 1; + if (iAmmo) + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6)); + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_FIRE); + IPSafeAddItemProperty(oWeapon,ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE)); + } + } + else if (iRoll <= 20) + { + iEnc += 1; + if (iAmmo) + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d6)); + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_ELECTRICAL); + IPSafeAddItemProperty(oWeapon,ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE)); + } + } + else if (iRoll <= 30) + { + iEnc += 1; + if (iAmmo) + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1d6)); + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_COLD); + IPSafeAddItemProperty(oWeapon,ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE)); + } + } + else if (iRoll <= 40) + { + iEnc += 2; + if (iAmmo) + { + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyMassiveCritical(DAMAGE_BONUS_2d10)); + } + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_FIRE); + IPSafeAddItemProperty(oWeapon,ItemPropertyUnlimitedAmmo(IP_CONST_UNLIMITEDAMMO_1D6FIRE)); + } + } + else if (iRoll <= 50) + { + iEnc += 2; + if (iAmmo) + { + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyMassiveCritical(DAMAGE_BONUS_2d10)); + } + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_COLD); + IPSafeAddItemProperty(oWeapon,ItemPropertyUnlimitedAmmo(IP_CONST_UNLIMITEDAMMO_1D6COLD)); + } + } + else if (iRoll <= 60) + { + iEnc += 2; + if (iAmmo) + { + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyMassiveCritical(DAMAGE_BONUS_2d10)); + } + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_COLD); + IPSafeAddItemProperty(oWeapon,ItemPropertyUnlimitedAmmo(IP_CONST_UNLIMITEDAMMO_1D6LIGHT)); + } + } + else if (iRoll <= 65) + { + iEnc += 2; + if (iAmmo) + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsRace(GetBaneRace(),IP_CONST_DAMAGETYPE_MAGICAL,DAMAGE_BONUS_2d6)); + else + { + iTemp = GetBaneRace(); + SetLocalInt(oWeapon,"Bane",iTemp); + SetLocalInt(oWeapon,"SpecialAmmo",3); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_MAGICAL); + IPSafeAddItemProperty(oWeapon,ItemPropertyAttackBonusVsRace(iTemp,GetEnchantmentBonus(oWeapon)+2)); + } + } + else if (iRoll <= 70) + { + iEnc += 2; + if (iAmmo) + { + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,DAMAGE_BONUS_2d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_GOOD)); + } + else + { + SetLocalInt(oWeapon,"SpecialAmmo",2); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_DIVINE); + SetLocalInt(oWeapon,"AlignmentTarget",IP_CONST_ALIGNMENTGROUP_EVIL); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_GOOD)); + } + } + else if (iRoll <= 75) + { + iEnc += 2; + if (iAmmo) + { + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_GOOD,IP_CONST_DAMAGETYPE_DIVINE,DAMAGE_BONUS_2d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_EVIL)); + } + else + { + SetLocalInt(oWeapon,"SpecialAmmo",2); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_DIVINE); + SetLocalInt(oWeapon,"AlignmentTarget",IP_CONST_ALIGNMENTGROUP_GOOD); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_EVIL)); + } + } + else if (iRoll <= 80) + { + iEnc += 2; + if (iAmmo) + { + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC,IP_CONST_DAMAGETYPE_DIVINE,DAMAGE_BONUS_2d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_LAWFUL)); + } + else + { + SetLocalInt(oWeapon,"SpecialAmmo",2); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_DIVINE); + SetLocalInt(oWeapon,"AlignmentTarget",IP_CONST_ALIGNMENTGROUP_CHAOTIC); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_LAWFUL)); + } + } + else if (iRoll <= 85) + { + iEnc += 2; + if (iAmmo) + { + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_LAWFUL,IP_CONST_DAMAGETYPE_DIVINE,DAMAGE_BONUS_2d6)); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC)); + } + else + { + SetLocalInt(oWeapon,"SpecialAmmo",2); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_DIVINE); + SetLocalInt(oWeapon,"AlignmentTarget",IP_CONST_ALIGNMENTGROUP_LAWFUL); + IPSafeAddItemProperty(oWeapon,ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC)); + } + } + else if (iRoll <= 90) + { + if (iAmmo) + { + iEnc = Table816c(oWeapon, iEnc); //Reroll + } + else + { + iEnc += 4; + IPSafeAddItemProperty(oWeapon,ItemPropertyHaste()); + } + } + else if (iRoll <= 97) + { + iEnc += 5; + if (iAmmo) + IPSafeAddItemProperty(oWeapon,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL,IP_CONST_DAMAGEBONUS_1d6)); + else + { + SetLocalInt(oWeapon,"SpecialAmmo",TRUE); + SetLocalInt(oWeapon,"DamageType",IP_CONST_DAMAGETYPE_MAGICAL); + IPSafeAddItemProperty(oWeapon,ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE)); + } + } + else // Roll again twice + { + iEnc = Table816c(oWeapon, iEnc); + iEnc = Table816c(oWeapon, iEnc); + } + return iEnc; + } + +object Table817b() + { + int iRoll = d100(); + string sString; + if (iRoll <= 20) sString = "arrow601"; + else if (iRoll <= 40) sString = "bolt601"; + else if (iRoll <= 55) sString = "spear601"; + else if (iRoll <= 65) sString = "arrow602"; + else if (iRoll <= 70) sString = "dagger601"; + else if (iRoll <= 72) sString = "spear602"; + else if (iRoll <= 74) sString = "dagger602"; + else if (iRoll <= 76) sString = "baxe601"; + else if (iRoll <= 79) sString = "spear603"; + else if (iRoll <= 82) sString = "dagger603"; + else if (iRoll <= 85) sString = "ssword601"; + else if (iRoll <= 88) sString = "mace601"; + else if (iRoll <= 91) sString = "lsword601"; + else if (iRoll <= 94) sString = "lbow601"; + else if (iRoll <= 96) sString = "lsword602"; + else if (iRoll <= 98) sString = "lsword603"; + else sString = "gaxe601"; + return CreateItemOnObject(sString); + } + +object Table817c() + { + int iRoll = d100(); + string sString; + if (iRoll <= 04) sString = "spear601"; + else if (iRoll <= 09) sString = "arrow602"; + else if (iRoll <= 11) sString = "spear602"; + else if (iRoll <= 13) sString = "arrow603"; + else if (iRoll <= 17) sString = "dagger602"; + else if (iRoll <= 20) sString = "baxe601"; + else if (iRoll <= 25) sString = "spear603"; + else if (iRoll <= 30) sString = "dagger603"; + else if (iRoll <= 35) sString = "ssword601"; + else if (iRoll <= 40) sString = "mace601"; + else if (iRoll <= 45) sString = "lsword601"; + else if (iRoll <= 50) sString = "lbow601"; + else if (iRoll <= 55) sString = "lsword602"; + else if (iRoll <= 60) sString = "lsword603"; + else if (iRoll <= 66) sString = "gaxe601"; + else if (iRoll <= 72) sString = "gsword601"; + else if (iRoll <= 78) sString = "rapier601"; + else if (iRoll <= 81) sString = "bsword601"; + else if (iRoll <= 83) sString = "lsword604"; + else if (iRoll <= 85) sString = "scimitar601"; + else if (iRoll <= 87) sString = "whammer601"; + else if (iRoll <= 90) sString = "mace602"; + else if (iRoll <= 96) sString = "lsword605"; + else sString = "ssword602"; + return CreateItemOnObject(sString); + } diff --git a/src/module/nss/inc_misc_tools.nss b/src/module/nss/inc_misc_tools.nss new file mode 100644 index 0000000..bbaa1d8 --- /dev/null +++ b/src/module/nss/inc_misc_tools.nss @@ -0,0 +1,1416 @@ +#include "inc_mod_constant" +#include "inc_prc_ecl" +//#include "inc_ecl" + +// Returns the ID code attached to the end of a Tag. +// Used in item functions. +string GetID(object oObject = OBJECT_SELF); +string GetID(object oObject) // Confirmed Working + { + string sTag = GetTag(oObject); + int iLen = GetStringLength(sTag)-iLen; + return GetStringRight(sTag,3); + } + +// Converts a positive integer 0 to 999 to a 3 digit string +string Convert(int iNumber); +string Convert(int iNumber) // Confirmed Working + { + string sNum = IntToString(iNumber); + if (iNumber < 1 || iNumber > 999) + return "000"; + if (iNumber < 10) + sNum = "00" + sNum; + else if (iNumber < 100) + sNum = "0" + sNum; + return sNum; + } + +// Checks to see if all PCs are in town. +// A variable "Town" must be set on all areas you wish to distinguish as town. +int AllPCsInTown(); +int AllPCsInTown() + { + object oPC = GetFirstPC(); + while(GetIsObjectValid(oPC)) + { + if (!GetLocalInt(GetArea(oPC),"Town")) + return FALSE; + oPC = GetNextPC(); + } + return TRUE; + } + +// Returns oPC or its master if is an associate. +object GetIsPartyMemberOrAssociate(object oPC); +object GetIsPartyMemberOrAssociate(object oPC) + { + if (!GetIsPC(oPC)) + { + if (GetIsObjectValid(GetMaster(oPC))) + oPC = GetMaster(oPC); + else + return OBJECT_INVALID; // Returns this if a non PC or PC Associate + } + return oPC; + } + +// Determines the number of people in the party oPC belongs too. +int NumberInParty(object oPC); +int NumberInParty(object oPC) + { + int i; + oPC = GetFirstFactionMember(oPC,TRUE); + while (GetIsObjectValid(oPC)) + { + i+=1; + oPC = GetNextFactionMember(oPC,TRUE); + } + return i; + } + +// Returns the average level of the party oPC belongs too +int PartyLevel(object oPC); +int PartyLevel(object oPC) + { + object oParty = GetFirstFactionMember(oPC,TRUE); + int iLevel,iNumber; + while (GetIsObjectValid(oParty)) + { +// iLevel += GetHitDice(oParty); + iLevel += GetECL(oParty); + iNumber+= 1; + oParty = GetNextFactionMember(oPC,TRUE); + } + if (iNumber) + return iLevel/iNumber; + else + return 1; // This should never happen! + } +// Returns a DC scaled to iPartyLevel. +int ScaledDC(int iPartyLevel); +int ScaledDC(int iPartyLevel) + { + int iScaler = iPartyLevel/2; + if (iScaler < 1) + iScaler = 1; + int i = (Random(iScaler*2) + 1) - iScaler; + return 20 + iPartyLevel + i; + } + +// Returns TRUE if oPC is in the same area as the caller. +// Areas must be tagged Area### in order to call this function. +// No tagging convention required for objects within an area. +int SameArea(object oPC); +int SameArea(object oPC) + { + object oArea; + if (GetStringLeft(GetTag(OBJECT_SELF),4) == "Area") + oArea = OBJECT_SELF; + else + oArea = GetArea(OBJECT_SELF); + if (GetArea(oPC) == oArea) + return TRUE; + return FALSE; + } +// Does a standard skill check vs iDC returning TRUE/FALSE. +// If iDC = 0 returns the skill check total. +int SkillCheck(int iSkill, int iDC, object oPC = OBJECT_SELF, int iFeedBack = FALSE, int iTake20 = FALSE); +int SkillCheck(int iSkill, int iDC, object oPC, int iFeedBack, int iTake20) + { + if (GetHasSkill(iSkill)) + { + if (iDC == 0) + return d20() + GetSkillRank(iSkill); + else if (iTake20) + { + if (20 + GetSkillRank(iSkill) >= iDC) + return TRUE; + } + else if (iFeedBack) + { + return GetIsSkillSuccessful(OBJECT_SELF,iSkill,iDC); + } + else if (d20() + GetSkillRank(iSkill) >= iDC) + return TRUE; + } + return FALSE; + } +// Generates a bag at the Dying/Dead PCs location. +// If iDead is FALSE the bag is only created if the PC has a healing kit the +// party may need and then moves the kit. +// iDead TRUE forces the bag to be created. +object GeneratePCLootBag(object oPC,int iDead = FALSE); +object GeneratePCLootBag(object oPC, int iDead) + { + object oBag; + object oItem = GetItemPossessedBy(oPC,"healerskit"); + if (GetIsObjectValid(oItem) || iDead) + oBag = CreateObject(OBJECT_TYPE_PLACEABLE,"pclootbag", GetLocation(oPC)); + else + return OBJECT_INVALID; + if (GetIsObjectValid(oItem)) + { + CopyItem(oItem,oBag); + DestroyObject(oItem); + } + SetLocalObject(oPC,"LootBag",oBag); + return oBag; + } + +// Moves every item in a PC's inventory to the oTarget. +void LootPC(object oPC, object oTarget); +void LootPC(object oPC, object oTarget) + { + int i; + object oItem; + for (i = 0; i <= 13; i ++) + { + oItem = GetItemInSlot(i,oPC); + AssignCommand(GetModule(),ActionUnequipItem(oItem)); + CopyItem(oItem,oTarget,TRUE); + DestroyObject(oItem); + } + oItem = GetFirstItemInInventory(oPC); + while (GetIsObjectValid(oItem)) + { + if (GetTag(oItem) != "DeathToken") + { + CopyItem(oItem,oTarget,TRUE); + DestroyObject(oItem); + } + oItem = GetNextItemInInventory(oPC); + } + AssignCommand(oTarget,TakeGoldFromCreature(GetGold(oPC),oPC,FALSE)); + } + +// Gives 3E Starting Gold. +void StartingGold(object oPC); +void StartingGold(object oPC) + { + int i; + object oNPC, oItem; + if (!GetXP(oPC)) + { + for (i = 0; i <= 14; i++) + { + oItem = GetItemInSlot(i); + DestroyObject(oItem); + } + oItem = GetFirstItemInInventory(oPC); + while (GetIsObjectValid(oItem)) + { + if(GetBaseItemType(oItem) != BASE_ITEM_CBLUDGWEAPON + && GetBaseItemType(oItem) != BASE_ITEM_CPIERCWEAPON + && GetBaseItemType(oItem) != BASE_ITEM_CREATUREITEM + && GetBaseItemType(oItem) != BASE_ITEM_CSLASHWEAPON + && GetBaseItemType(oItem) != BASE_ITEM_CSLSHPRCWEAP) + DestroyObject(oItem); + oItem = GetNextItemInInventory(oPC); + } + i = GetClassByPosition(1,oPC); + switch (i) + { + case CLASS_TYPE_BARBARIAN: {i = d4(4)*10;break;} + case CLASS_TYPE_BARD: {i = d4(4)*10;break;} + case CLASS_TYPE_CLERIC: {i = d4(5)*10;break;} + case CLASS_TYPE_DRUID: {i = d4(2)*10;break;} + case CLASS_TYPE_FIGHTER: {i = d4(6)*10;break;} + case CLASS_TYPE_MONK: {i = d4(5);break;} + case CLASS_TYPE_PALADIN: {i = d4(6)*10;break;} + case CLASS_TYPE_RANGER: {i = d4(6)*10;break;} + case CLASS_TYPE_ROGUE: {i = d4(5)*10;break;} + case CLASS_TYPE_SORCERER: {i = d4(3)*10;break;} + case CLASS_TYPE_WIZARD: {i = d4(3)*10;break;} + default: {i = d4(4)*10;break;} + }; + oNPC = GetObjectByTag("Merchant"); +// AssignCommand(oPC,ActionEquipItem(CreateItemOnObject("pcskin",oPC),INVENTORY_SLOT_CARMOUR)); + AssignCommand(oNPC,TakeGoldFromCreature(GetGold(oPC),oPC,TRUE)); + AssignCommand(oNPC,GiveGoldToCreature(oPC,i)); + AssignCommand(oNPC,GiveXPToCreature(oPC,1)); + } + } + +// Returns TRUE if oTarget has an iEffectType +// If oCreator is true then the effector will be checked for match. +// If iRemove is TRUE the effect will be removed. +// If iEffectType = EFFECT_TYPE_INVALID all effect types will be checked. Useful +// for finding any effect created by oCreator on oTarget. +int FindEffect(object oTarget, int iEffectType, object oCreator= OBJECT_INVALID, int iRemove = FALSE); +int FindEffect(object oTarget, int iEffectType, object oCreator, int iRemove) + { + effect eEffect = GetFirstEffect(oTarget); + while(GetIsEffectValid(eEffect)) + { + if (GetEffectType(eEffect) == iEffectType + || iEffectType == EFFECT_TYPE_INVALIDEFFECT) + { + if ((GetIsObjectValid(oCreator) + && oCreator == GetEffectCreator(eEffect)) + || !GetIsObjectValid(oCreator)) + { + if (iRemove) + RemoveEffect(oTarget,eEffect); + return TRUE; + } + } + eEffect = GetNextEffect(oTarget); + } + return FALSE; + } +// Generates a unique tag for the secret door. +string GetSecretDoorTag(); +string GetSecretDoorTag() + { + int i = GetLocalInt(GetModule(),"SecretDoor"); + SetLocalInt(GetModule(),"SecretDoor",i+=1); + return "SecretDoor"+IntToString (i); + } +// Modified version of CreateObject that can be used as a command. +void CreateObject2(int iObjectType,string sResRef,location lLoc, int iAnim = FALSE, string sTag = ""); +void CreateObject2(int iObjectType,string sResRef,location lLoc, int iAnim = FALSE, string sTag = "") + { + CreateObject(iObjectType,sResRef,lLoc,iAnim,sTag); + } +// Creates a hidden treasure. +void CreateHiddenTreasure(location lLoc); +void CreateHiddenTreasure(location lLoc) + { + int iLocked,iTrapped; + object oObject = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_chest",lLoc,FALSE); + if (d100() <= HIDDEN_TREASURE_LOCKED) + SetLocked(oObject,TRUE); + if (d100() > HIDDEN_TREASURE_TRAPPED) + SetTrapDisabled(oObject); + } + +// Determines if oPC has an effect of iEffectType. +int HasEffect(object oPC, int iEffectType); +int HasEffect(object oPC, int iEffectType) + { + effect eEffect = GetFirstEffect(oPC); + while(GetIsEffectValid(eEffect)) + { + if (GetEffectType(eEffect) == iEffectType) + return TRUE; + eEffect = GetNextEffect(oPC); + } + return FALSE; + } + +// Does a standard ability check vs iDC returning TRUE/FALSE. +// If iDC = 0 returns the skill check total. +int AbilityCheck(object oPC,int iAbility,int iDC); +int AbilityCheck(object oPC,int iAbility,int iDC) + { + int iRoll; + // GetAbility + int iRank = GetAbilityModifier(iAbility,oPC); + if (GetIsObjectValid(GetItemPossessedBy(oPC,"miscb031"))) + iRank+=1; + // Determine Roll + iRoll = d20()+iRank; + // Return Results + if (iDC == 0) + return iRoll; + else if (iDC != 0 && iRoll >= iDC) + return TRUE; + return FALSE; + } +// Returns an effect based Effect Type and Creator +effect GetEffect(object oTarget, int iEffectType, object oCreator = OBJECT_INVALID); +effect GetEffect(object oTarget, int iEffectType, object oCreator) + { + effect eEffect = GetFirstEffect(oTarget); + while(GetIsEffectValid(eEffect)) + { + if (GetEffectType(eEffect) == iEffectType) + { + if (!GetIsObjectValid(oCreator) + || GetEffectCreator(eEffect) == oCreator) + break; + } + eEffect = GetNextEffect(oTarget); + } + return eEffect; + } +// This function is used to add damage for a curse it should be used in a delayed loop. +void CurseDamage (object oCreator,effect eEffect, object oTarget); +void CurseDamage (object oCreator,effect eEffect, object oTarget) + { + effect eTemp = GetEffect(oTarget,EFFECT_TYPE_CURSE,oCreator); + if (GetIsEffectValid(eTemp)) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT,eEffect,oTarget); + } + } +// This command will return true if the pc has a gem of the appropriate type or +// better. It will then decrement the stack of gems by one then return to the +// calling function/script. +int GetHasGem(int iValue, object oPC); +int GetHasGem(int iValue, object oPC) + { + int iPassed; + int i; + string sTag,sResRef; + object oGem; + int iStack; + for (i = iValue; i<= 5; i+=1) + { + sResRef = "rdg_gem"+IntToString(i)+"01"; + sTag = "rdg_gem"+IntToString(i)+"01"; + oGem = GetItemPossessedBy(oPC,sTag); + if (GetIsObjectValid(oGem)) + { + iStack = GetNumStackedItems(oGem); + if (iStack > 1) + CreateItemOnObject(sResRef,oPC,iStack-1); + DestroyObject(oGem); + iPassed = TRUE; + break; + } + } + return iPassed; + } +// MUST be called by a PC. Handles the detection of hidden objects. +void DetectMode(); +void DetectMode() + { + int iDC,iSecretDoors; + int iCntr = 1; + object oDoor,oChest; + object oHidden = GetNearestObjectToLocation(OBJECT_TYPE_DOOR|OBJECT_TYPE_PLACEABLE|OBJECT_TYPE_TRIGGER|OBJECT_TYPE_WAYPOINT,GetLocation(OBJECT_SELF),iCntr); + while(GetIsObjectValid(oHidden)) + { + if (GetDistanceToObject(oHidden) > 10.0) + break; // Search has gone beyond allowed distance shut down loop. + if (LineOfSightObject(OBJECT_SELF,oHidden)) + { + string sTag = GetTag(oHidden); + //--------------------------DETECT TRAPS ------------------------------ + if (GetIsTrapped(oHidden)) + { + if (!GetTrapDetectedBy(oHidden,OBJECT_SELF)) // If trap not detected + { + iDC = GetLocalInt(oHidden,"DC"); + if (!iDC) // If no DC stored on trap make one. + iDC = ScaledDC(PartyLevel(OBJECT_SELF)); + if (!GetLevelByClass(CLASS_TYPE_ROGUE) + && GetLocalInt(oHidden,"TrapType") > 0 + && iDC >= 25) + iDC = 10000; // Only rogues can find non mechanical traps DC 25+ + if (SkillCheck(SKILL_SEARCH,iDC)) + { + SetTrapDetectedBy(oHidden,OBJECT_SELF); + PlayVoiceChat(VOICE_CHAT_SEARCH); + } + } + } + //---------------------------SECRET DOORS ------------------------- + else if (sTag == "SecretDoor") + { + if (GetLocalInt(oHidden,"Active")) + { + iDC = GetLocalInt(oHidden,"DC"); + if (!iDC) + iDC = ScaledDC(PartyLevel(OBJECT_SELF)); + if (SkillCheck(SKILL_SEARCH,iDC)) + { + oDoor = GetNearestObjectByTag("rdg_secret_door"); + if (GetIsObjectValid(oDoor)) + { + if (GetLocation(oDoor) != GetLocation(oHidden))//Attempt to stop double secret door spawning. + { + // CREATE SECRET DOOR AND UPDATE MODULE REGISTRY + oDoor = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_secret_door",GetLocation(oHidden),FALSE); + SetLocalInt(oHidden,"Active",FALSE);//Turn off checks + SetLocalObject(oHidden,"SecretDoor",oDoor); + PlayVoiceChat(VOICE_CHAT_LOOKHERE); + } + } + else + { + // CREATE SECRET DOOR AND UPDATE MODULE REGISTRY + oDoor = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_secret_door",GetLocation(oHidden),FALSE); + SetLocalInt(oHidden,"Active",FALSE);//Turn off checks + SetLocalObject(oHidden,"SecretDoor",oDoor); + PlayVoiceChat(VOICE_CHAT_LOOKHERE); + } + } + } + } + // ------------------------ HIDDEN TREASURE ----------------------- + else if (sTag == "HiddenChest") + { + if (GetLocalInt(oHidden,"Active")) + { + iDC = GetLocalInt(oHidden,"DC"); + if (!iDC) + iDC = ScaledDC(PartyLevel(OBJECT_SELF)); + if (SkillCheck(SKILL_SEARCH,iDC)) + { + oChest = GetNearestObjectByTag("RDG_CHEST");//Check this tag + if (GetIsObjectValid(oChest)) + { + if (GetLocation(oChest) != GetLocation(oHidden))//Attempt to stop double spawning. + { + // CREATE SECRET DOOR AND UPDATE MODULE REGISTRY + oChest = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_chest",GetLocation(oHidden),FALSE); + SetLocalInt(oHidden,"Active",FALSE);//Turn off checks + SetLocalObject(oHidden,"HiddenChest",oChest); + PlayVoiceChat(VOICE_CHAT_LOOKHERE); + } + } + else + { + // CREATE SECRET DOOR AND UPDATE MODULE REGISTRY + oChest = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_chest",GetLocation(oHidden),FALSE); + SetLocalInt(oHidden,"Active",FALSE);//Turn off checks + SetLocalObject(oHidden,"HiddenChest",oChest); + PlayVoiceChat(VOICE_CHAT_LOOKHERE); + } + } + } + } + } + oHidden = GetNearestObjectToLocation(OBJECT_TYPE_DOOR|OBJECT_TYPE_PLACEABLE|OBJECT_TYPE_TRIGGER|OBJECT_TYPE_WAYPOINT,GetLocation(OBJECT_SELF),iCntr+=1); + } + } +// Returns the effects of a poison trap. +effect GetPoisonType(int iDangerLevel,int iAOE); +effect GetPoisonType(int iDamage,int iAOE) + { + effect eDam; + if (iAOE) + { + switch (iDamage) + { + case TRAP_WEAK: {eDam = EffectPoison(POISON_UNGOL_DUST);break;} + case TRAP_AVERAGE: {eDam = EffectPoison(POISON_CHAOS_MIST);break;} + case TRAP_STRONG: {eDam = EffectPoison(POISON_BURNT_OTHUR_FUMES);break;} + case TRAP_DEADLY: {eDam = EffectPoison(POISON_DRAGON_BILE);break;} + case TRAP_FATAL: {eDam = EffectPoison(POISON_BLACK_LOTUS_EXTRACT);break;} + }; + } + else + { + switch (iDamage) + { + case TRAP_WEAK: {eDam = EffectPoison(POISON_GREENBLOOD_OIL);break;} + case TRAP_AVERAGE: {eDam = EffectPoison(POISON_PURPLE_WORM_POISON);break;} + case TRAP_STRONG: {eDam = EffectPoison(POISON_WYVERN_POISON);break;} + case TRAP_DEADLY: {eDam = EffectPoison(POISON_DRAGON_BILE);break;} + case TRAP_FATAL: {eDam = EffectPoison(POISON_BLACK_LOTUS_EXTRACT);break;} + }; + } + return eDam; + } + +// Returns the amount of damage a trap will do. +int GetTrapDamage(int iLevel,int iDangerLevel); +int GetTrapDamage(int iLevel,int iDangerLevel) + { + int iDam,i; + if (iLevel > 0) + { + for (i = 1; i <= iLevel; i++) + { + switch (iDangerLevel) + { + case TRAP_WEAK: {iDam += d6();break;} + case TRAP_AVERAGE: {iDam += d8();break;} + case TRAP_STRONG: {iDam += d10();break;} + case TRAP_DEADLY: {iDam += d12();break;} + case TRAP_FATAL: {iDam += d20();break;} + }; + } + } + return iDam; + } + +// Gets the visual effect for a trap. +effect GetVisualEffect(int iAOE, int iDamageType); +effect GetVisualEffect(int iAOE,int iType) + { + effect eVis; + if (iAOE) + { + switch(iType) + { + case DAMAGE_TYPE_BLUDGEONING: {eVis = EffectAreaOfEffect(AOE_PER_ENTANGLE," ", " ", " ");break;} + case DAMAGE_TYPE_PIERCING: {eVis = EffectVisualEffect(VFX_DUR_CALTROPS);break;} + case DAMAGE_TYPE_SLASHING: {eVis = EffectVisualEffect(VFX_DUR_CALTROPS);break;} + + case DAMAGE_TYPE_ACID: {eVis = EffectAreaOfEffect(AOE_PER_FOGACID," ", " ", " ");break;} + case DAMAGE_TYPE_COLD: {eVis = EffectAreaOfEffect(AOE_PER_FOGKILL," ", " ", " ");break;} + case DAMAGE_TYPE_ELECTRICAL: {eVis = EffectVisualEffect(VFX_BEAM_LIGHTNING);break;} + case DAMAGE_TYPE_FIRE: {eVis = EffectVisualEffect(VFX_FNF_FIREBALL);break;} + case DAMAGE_TYPE_SONIC: {eVis = EffectVisualEffect(VFX_FNF_SOUND_BURST);break;} + + case DAMAGE_TYPE_MAGICAL: {eVis = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_MIND);break;} + case DAMAGE_TYPE_NEGATIVE: {eVis = EffectAreaOfEffect(AOE_PER_GREASE," ", " ", " ");break;} + case DAMAGE_TYPE_POSITIVE: {eVis = EffectVisualEffect(VFX_FNF_STRIKE_HOLY);break;} + + case DAMAGE_TYPE_POISON: {eVis = EffectAreaOfEffect(AOE_PER_FOGSTINK," ", " ", " ");break;} + }; + } + else + { + switch(iType) + { + case DAMAGE_TYPE_BLUDGEONING: {eVis = EffectVisualEffect(VFX_IMP_WALLSPIKE);break;} + case DAMAGE_TYPE_PIERCING: {eVis = EffectVisualEffect(VFX_IMP_SPIKE_TRAP);break;} + case DAMAGE_TYPE_SLASHING: {eVis = EffectVisualEffect(VFX_FNF_SWINGING_BLADE);break;} + + case DAMAGE_TYPE_ACID: {eVis = EffectVisualEffect(VFX_COM_HIT_ACID);break;} + case DAMAGE_TYPE_COLD: {eVis = EffectVisualEffect(VFX_IMP_HEAD_COLD);break;} + case DAMAGE_TYPE_ELECTRICAL: {eVis = EffectVisualEffect(VFX_COM_HIT_ELECTRICAL);break;} + case DAMAGE_TYPE_FIRE: {eVis = EffectVisualEffect(VFX_COM_HIT_FIRE);break;} + case DAMAGE_TYPE_SONIC: {eVis = EffectVisualEffect(VFX_COM_HIT_SONIC);break;} + + case DAMAGE_TYPE_MAGICAL: {eVis = EffectVisualEffect(VFX_DUR_SMOKE);break;} + case DAMAGE_TYPE_NEGATIVE: {eVis = EffectVisualEffect(VFX_COM_HIT_NEGATIVE);break;} + case DAMAGE_TYPE_POSITIVE: {eVis = EffectVisualEffect(VFX_COM_HIT_DIVINE);break;} + + case DAMAGE_TYPE_POISON: {eVis = EffectVisualEffect(VFX_IMP_POISON_L);break;} + }; + } + return eVis; + } +// Returns the Reflex save needed to avoid a trap. +// Not used by poison traps. +int GetReflexSaveDC(int iLevel,int iDangerLevel); +int GetReflexSaveDC(int iLevel,int iDangerLevel) + { + int iDC = iLevel; + if (iDangerLevel == TRAP_WEAK) iDC += 5; + else if (iDangerLevel == TRAP_AVERAGE) iDC += 10; + else if (iDangerLevel == TRAP_STRONG) iDC += 15; + else if (iDangerLevel == TRAP_DEADLY) iDC += 20; + else if (iDangerLevel == TRAP_FATAL) iDC += 25; + if (iDC < 10) + iDC = 10; + return iDC; + } + +// This function will randomly return an unused door. +// If iPit is TRUE will return a "Fall" waypoint instead. +// This function attempts 10 times to find a destination. +// Failure returns OBJECT_INVALID. +object DetermineDestination(int iPit = FALSE, int iSecret = FALSE); +object DetermineDestination(int iPit, int iSecret = FALSE) + { + object oDest; + int iCntr; + int iDoors = GetLocalInt(GetModule(),"Doors"); + int iFalls = GetLocalInt(GetModule(),"Falls"); + int iSecrets = GetLocalInt(GetModule(),"SecretDoorWPs"); + int iType = GetObjectType(OBJECT_SELF); + for (iCntr = 1; iCntr <= 10; iCntr++)// Try 10 times to find a link + { + if (GetLocalInt(OBJECT_SELF,"Pit") || iPit) + oDest = GetLocalObject(GetModule(),"Fall"+IntToString(Random(iFalls)+1)); + else if (iSecret) + oDest = GetLocalObject(GetModule(),"SecretDoor"+IntToString(Random(iSecrets)+1)); + else if (iType == OBJECT_TYPE_DOOR) + oDest = GetLocalObject(GetModule(),"Door"+IntToString(Random(iDoors)+1)); + if (GetArea(OBJECT_SELF) == GetArea(oDest)) + oDest = OBJECT_INVALID; + if (GetIsObjectValid(GetLocalObject(oDest,"Dest"))) + oDest = OBJECT_INVALID; + if (GetIsObjectValid(oDest)) + break; + } + return oDest; + } + +// This function should be used in an AssignCommand to a PC. +// This function will transport the PC and his associates to a place determined +// by the DetermineDestination function. +void Transition(object oDest); +void Transition(object oDest) + { + location lLoc; + if (GetIsTrapped(oDest)) + SetTrapDisabled(oDest); + if (GetLocked(oDest)) + SetLocked(oDest,FALSE); + if (!GetIsOpen(oDest)) + AssignCommand(oDest,ActionOpenDoor(oDest)); + object oTrans = GetNearestObjectByTag("Transition",oDest); + if (GetIsObjectValid(oTrans) + && GetDistanceBetween(oDest,oTrans) < 5.0) + oDest = oTrans; + lLoc = GetLocation(oDest); + ClearAllActions(); + ActionJumpToLocation(lLoc); + // Transition the PCs familiars, henchmen, etc. + object oAssociate = GetFirstFactionMember(OBJECT_SELF,FALSE); + while (GetIsObjectValid(oAssociate)) + { + if (GetMaster(oAssociate) == OBJECT_SELF) + { + AssignCommand(oAssociate,ClearAllActions(TRUE)); + AssignCommand(oAssociate,ActionJumpToLocation(lLoc)); + } + oAssociate = GetNextFactionMember(OBJECT_SELF,FALSE); + } + DelayCommand(2.0,SetFacing(GetFacing(oDest))); + DelayCommand(2.0,SetCameraFacing(GetFacing(oDest))); + } + +// Used to link any 2 transtions. +// Is sometimes used to mark a Fall or Secret Door waypoint as used. +void LinkTransitions(object oDest, object oSelf =OBJECT_SELF); +void LinkTransitions(object oDest,object oSelf) + { + SetLocalObject(oDest,"Dest",oSelf); + SetLocalObject(oSelf,"Dest",oDest); + } + +// Used to create a randomly placed entrance to undermountain. +// iPit determiens if this should be a "Fall" waypoint. +// If set to FALSE this function will link and return a random door inside the +// dungeon. +// sTag is the Tag of the object you want the entrance to be. +// If sTag returns an invalid object the caller will be used. +object CreateDungeonEntrance(int iPit = TRUE, string sTag = "YawningPortalWell"); +object CreateDungeonEntrance(int iPit, string sTag) + { + object oTarget = GetObjectByTag(sTag); + if (!GetIsObjectValid(oTarget)) + oTarget = OBJECT_SELF; + object oDest = DetermineDestination(iPit); + if (iPit) + { + object oRope = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_rope_used",GetLocation(oDest),TRUE); + SetPlotFlag(oRope,TRUE); + LinkTransitions(oDest,oTarget);//Activates the waypoint to prevent reuse + LinkTransitions(oRope,oTarget);//Makes the actual link. + oDest = oRope; + } + else + LinkTransitions(oDest,oTarget); + return oDest; + } + +// This command will clear ALL transition links in the dungeon. +void ClearAllTransitions(); +void ClearAllTransitions() + { + int iDoors = GetLocalInt(GetModule(),"Doors"); + int iSecretDoors = GetLocalInt(GetModule(),"SecretDoorWPs"); + int iFalls = GetLocalInt(GetModule(),"Falls"); + int iDynamic = GetLocalInt(GetModule(),"SecretDoor"); + int i,j; + object oArea,oDoor,oWP,oTrap,oRope; + // Clear all door transitions. + for (i = 1; i <= iDoors; i+=1) + { + oDoor = GetLocalObject(GetModule(),"Door"+IntToString(i)); + DeleteLocalObject(oDoor,"Dest"); + } + // Reset all secret door waypoints to new values. + for (i = 1; i <= iSecretDoors; i += 1) + { + oWP = GetLocalObject(GetModule(),"SecretDoor"+IntToString(i)); + oDoor = GetLocalObject(oWP,"SecretDoor"); + if (d100() <= ROOM_SECRET_DOOR) + SetLocalInt(oWP,"Active",TRUE); + else + DeleteLocalInt(oWP,"Active"); + DeleteLocalObject(oWP,"Dest"); + if (GetIsObjectValid(oDoor)) + { + SetPlotFlag(oDoor,FALSE); + DestroyObject(oDoor); + } + } + // Destroy any player made doors. + for (i = 1; i <= iDynamic; i+=1) + { + oDoor = GetObjectByTag("SecretDoor"+IntToString (i)); + SetPlotFlag(oDoor,FALSE); + oWP = GetNearestObjectByTag("Transition",oDoor); + if (GetLocalString(oWP,"Tag") != "") + DestroyObject (oWP); + DestroyObject (oDoor); + } + // Reset all FALL Waypoints and destroy Ropes. + for (i = 1; i <= iFalls; i+=1) + { + oWP = GetLocalObject(GetModule(),"Fall"+IntToString(i)); + oDoor = GetLocalObject(oWP,"Dest"); + if (GetIsObjectValid(oDoor)) + { + // Find and destroy possible rope attached to trap door. + if (GetObjectType(oDoor) == OBJECT_TYPE_PLACEABLE) + { + oTrap = GetLocalObject(oDoor,"Dest"); + if (GetTag(oTrap) != "YawningPortalWell")// DONT KILL THE WELL! + { + SetPlotFlag(oTrap,FALSE); + DestroyObject(oTrap); + } + } + if (GetTag(oDoor) != "YawningPortalWell")// DONT KILL THE WELL! + { + //Destroy the trap door. + SetPlotFlag(oDoor,FALSE); + DestroyObject(oDoor); + } + } + DeleteLocalObject(oWP,"Dest"); + } + DeleteLocalInt(GetModule(),"AreasExplored"); + CreateDungeonEntrance(); + } + +// This function returns the danger level of a trap. +int GetTrapDangerLevel(); +int GetTrapDangerLevel() + { + int iRoll = d100(); + if (iRoll <= TRAP_WEAK) {return TRAP_WEAK;} + else if (iRoll <= TRAP_AVERAGE) {return TRAP_AVERAGE;} + else if (iRoll <= TRAP_STRONG) {return TRAP_STRONG;} + else if (iRoll <= TRAP_DEADLY) {return TRAP_DEADLY;} + else if (iRoll <= TRAP_FATAL) {return TRAP_FATAL;} + return TRAP_WEAK;//This should never happen. Added for compile reasons only. + } + +// Determines the type of trap. +// Only a rogue can detect traps over DC25 if not mechanical. +int SetTrapType(); +int SetTrapType() + { + int iRoll = d100(); + if (iRoll <= TRAP_MECHANICAL) + return TRAP_MECHANICAL; + else if (iRoll <= TRAP_ELEMENTAL) + return TRAP_ELEMENTAL; + else if (iRoll <= TRAP_SPECIAL) + return TRAP_SPECIAL; + return 1; //This should never happen included for compile reasons + } + +// Determines the damage type of a trap. +int GetDamageType(int iType); +int GetDamageType(int iType) + { + int iRoll,iSave; + if (iType == TRAP_MECHANICAL) // Mechanical Trap + iRoll = d4(); + else if (iType == TRAP_ELEMENTAL) // Elemental Magic Trap + iRoll = Random(5)+5; + else if (iType == TRAP_SPECIAL) // Special Magic Trap + iRoll = Random(3)+10; + // Determine Savign Throw Type + switch (iRoll) + { + //Mechanical + case 1: {iType = DAMAGE_TYPE_BLUDGEONING; iSave = SAVING_THROW_TYPE_TRAP;break;} + case 2: {iType = DAMAGE_TYPE_PIERCING; iSave = SAVING_THROW_TYPE_TRAP;break;} + case 3: {iType = DAMAGE_TYPE_SLASHING; iSave = SAVING_THROW_TYPE_TRAP;break;} + case 4: {iType = DAMAGE_TYPE_POISON; iSave = SAVING_THROW_TYPE_POISON;break;} + //Elemental + case 5: {iType = DAMAGE_TYPE_ACID; iSave = SAVING_THROW_TYPE_ACID;break;} + case 6: {iType = DAMAGE_TYPE_COLD; iSave = SAVING_THROW_TYPE_COLD;break;} + case 7: {iType = DAMAGE_TYPE_ELECTRICAL; iSave = SAVING_THROW_TYPE_ELECTRICITY;break;} + case 8: {iType = DAMAGE_TYPE_FIRE; iSave = SAVING_THROW_TYPE_FIRE;break;} + case 9: {iType = DAMAGE_TYPE_SONIC; iSave = SAVING_THROW_TYPE_SONIC;break;} + //Special + case 10: {iType = DAMAGE_TYPE_NEGATIVE; iSave = SAVING_THROW_TYPE_NEGATIVE;break;} + case 11: {iType = DAMAGE_TYPE_MAGICAL; iSave = SAVING_THROW_TYPE_SPELL;break;} + case 12: {iType = DAMAGE_TYPE_POSITIVE; iSave = SAVING_THROW_TYPE_POSITIVE;break;} + } + SetLocalInt(OBJECT_SELF,"SaveThrow",iSave); + return iType; + } +// This function is used to determine the basic properties of a trap. +void SetUpTrap(object oTrap); +void SetUpTrap(object oTrap) + { + // Determine weak to fatal trap type + int iDangerLevel = GetTrapDangerLevel(); + //Determine if Area of Effect Trap. + int iAOE; + if (d100() <= TRAP_AOE) + iAOE = TRUE; + // Determine if Trap is Mechanical or Magic + int iType = SetTrapType(); + if (iType == TRAP_MECHANICAL + && d100() <= TRAP_PIT) + SetLocalInt(oTrap,"Pit",TRUE);// All Pits are bludgeoning and use special rules. + else + SetLocalInt(oTrap,"DamageType",GetDamageType(iType)); + SetLocalInt(oTrap,"TrapType",iType); + SetLocalInt(oTrap,"AOE",iAOE); + SetLocalInt(oTrap,"Danger",iDangerLevel); + } + +// Sets up the traps in an area. +void SetUpTraps(object oArea); +void SetUpTraps(object oArea) + { + int iCntr,iRoll; + object oObject = GetFirstObjectInArea(oArea); + while (GetIsObjectValid(oObject)) + { + // IF A TRAP + if (GetIsTrapped(oObject)) + { + if (GetObjectType(oObject) == OBJECT_TYPE_TRIGGER) + iRoll = ROOM_TRAP_PERCENTAGE; + else if (GetObjectType(oObject) == OBJECT_TYPE_DOOR) + iRoll = DOOR_TRAPED_PERCENTAGE; + else if (GetObjectType(oObject) == OBJECT_TYPE_PLACEABLE) + iRoll = PLACEABLE_TRAP_PERCENTAGE; + if (d100() <= iRoll) + SetUpTrap(oObject); + else + SetTrapDisabled(oObject); + } + iRoll = 0; //Reset Variable for next object. + oObject = GetNextObjectInArea(oArea); + } + } + + +// This function awards the CR value of XPs to the party of oPC. +void AwardXPs(object oPC); +void AwardXPs(object oPC) + { + if (GetObjectType(oPC) == OBJECT_TYPE_AREA_OF_EFFECT) + { + oPC = GetAreaOfEffectCreator(oPC); + if (!GetIsPC(oPC)) + oPC = GetItemPossessor(oPC); + } + if (!GetIsPC(oPC) && !GetIsPC(GetMaster(oPC))) + return; + int iCR,iXP,iBase; + float fCR; + object oParty; + int iParty = PartyLevel(oPC); + if (!iParty) + return; + if (GetObjectType(OBJECT_SELF) == OBJECT_TYPE_CREATURE) + { + if (GetIsObjectValid(GetMaster())) // Prevent XPs for summoned monsters. + return; + else if (!GetIsObjectValid(oPC)) + return; + else + fCR = GetChallengeRating(OBJECT_SELF); + } + else + fCR = GetLocalFloat(OBJECT_SELF,"CR"); + if (fCR < 1.0) + iCR = 1; + else + iCR = FloatToInt(fCR); + int iStep = iParty - iCR; + if (iStep >= 8) + { + SendMessageToPC(oPC,"CR too low to be awarded XPs."); + return; + } + else if (iStep <= -8) + { + iStep = -7; + } + else if (iParty <=6 && iCR <=1) + iXP = 300; + else if (iParty <=4 && iCR ==2) + iXP = 600; + else + { + iBase = 300 * iParty; + switch(iStep) + { + case -7 : {iXP = iBase*12;break;} + case -6 : {iXP = iBase*8;break;} + case -5 : {iXP = iBase*6;break;} + case -4 : {iXP = iBase*4;break;} + case -3 : {iXP = iBase*3;break;} + case -2 : {iXP = iBase*2;break;} + case -1 : {iXP = iBase/2*3;break;} + case 0 : {iXP = iBase;break;} + case 1 : {iXP = iBase/3*2; break;} + case 2 : {iXP = iBase/2;break;} + case 3 : {iXP = iBase/3;break;} + case 4 : {iXP = iBase/4;break;} + case 5 : {iXP = iBase/6;break;} + case 6 : {iXP = iBase/8;break;} + case 7 : {iXP = iBase/12; break;} + }; + } + if (fCR < 1.0) + iXP = FloatToInt(IntToFloat(iXP)*fCR); + iXP = iXP/NumberInParty(oPC); + oParty = GetFirstFactionMember(oPC); + while(GetIsObjectValid(oParty)) + { + if (GetIsPC(oParty)) + GiveXPToCreature(oParty,iXP); + oParty = GetNextFactionMember(oPC); + } + } +//This function is what does the Rest Resets for the RDG. +// This function will reset the rests for the entire party belonging to oPC. +void CheckSafeRest(object oPC); +void CheckSafeRest(object oPC) + { + if (d100() <= SAFE_AREA_PERCENTAGE) + { + oPC = GetFirstFactionMember(oPC); + while (GetIsObjectValid(oPC)) + { + SetLocalInt(oPC,"Rest",TRUE); + DelayCommand(2.0,FloatingTextStringOnCreature("Rest Reset.",oPC,FALSE)); + SetPanelButtonFlash(oPC,PANEL_BUTTON_REST,FALSE); + oPC = GetNextFactionMember(oPC); + } + } + } +// Will return true if oPC has an item that grants feather fall effects. +int CheckFeatherFall(object oPC); +int CheckFeatherFall(object oPC) + { + object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC); + if (GetLocalInt(oSkin,"miscb036") + || GetLocalInt(oSkin,"miscb080") + || GetLocalInt(oSkin,"ring035") + || GetLocalInt(oSkin,"ring030")) + return TRUE; + return FALSE; + } + +//This function handles pit type transitions. +// The optional parameters can be used to change how a pit works. +void TransitionPit(object oPC,int iFallIn = TRUE,int iJump = FALSE,int iDC = 0,int iDepth = 0, object oPit = OBJECT_SELF, object oDest = OBJECT_INVALID); +void TransitionPit(object oPC,int iFallIn,int iJump,int iDC,int iDepth, object oPit, object oDest) + { + if (!iDC) + iDC = GetLocalInt(oPit,"Reflex"); + if (!iDepth) + iDepth = GetLocalInt(oPit,"Dice"); + if (!GetIsObjectValid(oDest)) + oDest = GetLocalObject(oPit,"Dest"); + if ((iFallIn && !ReflexSave(oPC,iDC)) + || iJump) + { + AssignCommand(oPC,ClearAllActions(TRUE)); + AssignCommand(oPC,Transition(oDest)); + if (!CheckFeatherFall(oPC))// If has feather fall they will never take damage. + { + int iMonk = GetLevelByClass(CLASS_TYPE_MONK,oPC);// Monks dont take as much damage from falls + if (iMonk >= 18) iDepth = 0; + else if (iMonk >= 8)iDepth -= 5; + else if (iMonk >= 6)iDepth -=3; + else if (iMonk >= 4)iDepth -=2; + if (iDepth > 0) + { + int iDam = d6(iDepth); + AssignCommand(oPC,ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(iDam,DAMAGE_TYPE_BLUDGEONING,DAMAGE_POWER_ENERGY),oPC))); + } + } + } + else if (!iFallIn && !iJump) + { + AssignCommand(oPC,ClearAllActions(TRUE)); + AssignCommand(oPC,Transition(oDest)); + } + } + +// Will spawn a pit and transition link it at the PCs feet. +// If iFallIn is TRUE he will fall thru it on a failed Reflex Save. +// If iJump is TRUE he will fall thru and take damage. +void CreatePit(object oPC,int iFallIn = TRUE, int iJump = FALSE, object oTrap = OBJECT_SELF); +void CreatePit(object oPC,int iFallIn, int iJump, object oTrap) + { + //--------------------------DETERMINE PIT SPECIFICS------------------------ + // Create top of pit + object oPit = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_pit" + IntToString(d4()),GetLocation(oPC)); + // Determine bottom of pit + object oDest = DetermineDestination(TRUE); + // Get Danger Level, This is used to determine how hard the pit is to avoid. + int iDanger = GetLocalInt(oTrap,"Danger"); + // Scale Fall Distance + int iDepth = 20 - ScaledDC(PartyLevel(oPC)); + if (iDepth < 1) iDepth = 1; // Pits are always at least 1d6 damage + if (iDepth > 20) iDepth = 20; //Pits are NEVER more than 20 d6 damage. + // -------------------------APPLY PIT SPECIFICS--------------------------- + int iDC = GetReflexSaveDC(PartyLevel(oPC),iDanger); + SetLocalInt(oPit,"Danger",iDanger); + SetLocalInt(oPit,"Reflex",iDC); + SetLocalInt(oPit,"Dice",iDepth); + LinkTransitions(oDest,oPit); // Marks Fall waypoint so not used by RDG again. Establishes a link the rope conversation can use. + if (iFallIn || iJump) + TransitionPit(oPC,iFallIn,iJump,iDC,iDepth,oPit,oDest); + SetTrapDisabled(oTrap); + } + +// Applies trap effects to oTarget. +void ApplyTrap(object oTarget); +void ApplyTrap(object oTarget) + { + //---------------------------- PITS --------------------------------------- + if (GetLocalInt(OBJECT_SELF,"Pit")) + { + DeleteLocalInt(OBJECT_SELF,"Pit");// Had to add this to prevent pit trapped doors from having odd transitions + CreatePit(oTarget,TRUE); + return; + } + //---------------------------- DETERMINE TRAP SPECIFICS ------------------- + object oTrap = OBJECT_SELF; + int iPartyLevel = PartyLevel(oTarget); + location lLoc = GetLocation(oTarget); + //Determine if Area of Effect Trap. + int iAOE = GetLocalInt(oTrap,"AOE"); + // Determine weak to fatal trap type + int iDangerLevel = GetLocalInt(oTrap,"Danger"); + // Determine DamageType + int iType = GetLocalInt(oTrap,"DamageType"); + // Get Saving Throw + int iSave = GetLocalInt(OBJECT_SELF,"SaveThrow"); + //Determine Trap Damage + effect eDam; + int iDam,iDC; + if (iType == DAMAGE_TYPE_POISON) + eDam = GetPoisonType(iDangerLevel,iAOE); + else + { + iDam = GetTrapDamage(iPartyLevel,iDangerLevel); + iDC = GetReflexSaveDC(iPartyLevel,iDangerLevel); + } + // Determine Trap Visual Effect + effect eVis = GetVisualEffect(iAOE,iType); + //--------------------------- APPLY THE TRAP EFFECTS----------------------- + object oObject; + if (iAOE)//----------------------BEGIN AREA EFFECT TRAPS------------------- + { + // ----------------------- APPLY TRAP TO PRIMARY TARGET---------------- + if (iType != DAMAGE_TYPE_ELECTRICAL) + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eVis,lLoc,3.0); + // Apply Trap effect to Target. + if (iType == DAMAGE_TYPE_POISON) // Poison Traps + ApplyEffectToObject(DURATION_TYPE_PERMANENT,eDam,oTarget); + else //Non Poison Traps + { + if (iType == DAMAGE_TYPE_ELECTRICAL) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oTarget,2.0); + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(GetReflexAdjustedDamage(iDam,oTarget,iDC,iSave,OBJECT_SELF),iType),oTarget); + } + // --------------------- APPLY TRAP TO SECONDARY TARGETS--------------- + // Added this due to primary target was getting hit twice by AE effects. + oObject = GetFirstObjectInShape(SHAPE_SPHERE,8.0,lLoc,TRUE); + if (iType == DAMAGE_TYPE_POISON) // Poison Traps + { + while(GetIsObjectValid(oObject)) + { + if (oObject != oTarget) + ApplyEffectToObject(DURATION_TYPE_PERMANENT,eDam,oObject); + oObject = GetNextObjectInShape(SHAPE_SPHERE,8.0,lLoc,TRUE); + } + } + else //Non Poison Traps + { + while(GetIsObjectValid(oObject)) + { + if (oObject != oTarget) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(GetReflexAdjustedDamage(iDam,oTarget,iDC,iSave,OBJECT_SELF),iType),oTarget); + if (iType == DAMAGE_TYPE_ELECTRICAL) + {AssignCommand(oTarget, ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oObject,2.0));} + } + oObject = GetNextObjectInShape(SHAPE_SPHERE,8.0,lLoc,FALSE); + } + } + }// ------------------------END AREA OF EFFECT TRAPS------------------- + else + {// ------------------------BEGIN PERSONAL TRAPS----------------------- + if (iType == DAMAGE_TYPE_POISON) // Poison Traps + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oTarget,2.0); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,eDam,oTarget); + } + else // Non Poison Traps + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oTarget,2.0); + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(GetReflexAdjustedDamage(iDam,oTarget,iDC,iSave,OBJECT_SELF),iType),oTarget); + } + }//-------------------------END PERSONAL TRAPS------------------------- + SetTrapDisabled(OBJECT_SELF); + } + +// This function will reactivate all monster spawns in the dungeon. +void ResetMonsterSpawns(); +void ResetMonsterSpawns() + { + int iMon = GetLocalInt(GetModule(),"RoomMonsterWPs"); + int i; + object oWP, oArea, oMonster, oItem; + for (i = 1; i<= iMon; i+=1) + { + oWP = GetLocalObject(GetModule(),"MonsterWP"+IntToString(i)); + oArea = GetArea(oWP); + oMonster = GetFirstObjectInArea(oArea); + while(GetIsObjectValid(oMonster)) + { + if (GetObjectType(oMonster) == OBJECT_TYPE_CREATURE + && !GetIsPC(oMonster) + && !GetIsPC(GetMaster(oMonster))) + { + AssignCommand(oMonster,SetIsDestroyable(TRUE)); + DestroyObject(oMonster); + } + else if (GetTag(oMonster) == "X0_CORPSE") + { + oItem = GetFirstItemInInventory(oMonster); + while(GetIsObjectValid(oItem)) + { + SetPlotFlag(oItem,FALSE); + DestroyObject(oItem); + oItem = GetNextItemInInventory(oMonster); + } + DestroyObject(oMonster); + } + oMonster = GetNextObjectInArea(oArea); + } + DeleteLocalInt(oWP,"DoOnce"); + DeleteLocalInt(GetArea(oWP),"DoOnce"); + } + } + +// This function will reset the hidden treasure waypoints. +void ResetHiddenWaypoints(); +void ResetHiddenWaypoints() + { + int iCntr; + int iHidden = GetLocalInt(GetModule(),"HiddenTreasureWPs"); + object oHidden, oChest, oItem; + for (iCntr = 1; iCntr <= iHidden; iCntr+=1) + { + oHidden = GetLocalObject(GetModule(),"HiddenTreasure"+IntToString(iCntr)); + oChest = GetLocalObject(oHidden,"HiddenChest"); + if (GetIsObjectValid(oChest)) + { + oItem = GetFirstItemInInventory(oChest); + while(GetIsObjectValid(oItem)) + { + SetPlotFlag(oItem,FALSE); + DestroyObject(oItem); + oItem = GetNextItemInInventory(oChest); + } + SetPlotFlag(oChest,FALSE); + DestroyObject(oChest); + } + if (d100() <= ROOM_HIDDEN_TREASURE) + SetLocalInt(oHidden,"Active",TRUE); + else + DeleteLocalInt(oHidden,"Active"); + } + } +// Returns the highest skill rank in the party. +// This only counts PCs. +// Also only works if teh PC is in the same area as the caller +int GetHighestPartySkill(object oPartyMember,int iSkill); +int GetHighestPartySkill(object oPartyMember,int iSkill) + { + object oPC = GetFirstFactionMember(oPartyMember); + int iRank,iHigh; + while(GetIsObjectValid(oPC)) + { + if (GetIsPC(oPC)) + { + if (GetArea(oPC) == GetArea(OBJECT_SELF)) + { + iRank = GetSkillRank(iSkill,oPC); + if (iRank > iHigh) + iHigh = iRank; + } + oPC = GetNextFactionMember(oPartyMember); + } + } + return iHigh; + } + +// Returns the party member with the highest skill rank. +// This only counts PCs. +// Also only works if teh PC is in the same area as the caller +object GetHighestPartySkillMember(object oPartyMember,int iSkill); +object GetHighestPartySkillMember(object oPartyMember,int iSkill) + { + object oPC = GetFirstFactionMember(oPartyMember); + int iRank,iHigh; + object oHigh; + while(GetIsObjectValid(oPC)) + { + if (GetIsPC(oPC)) + { + if (GetArea(oPC) == GetArea(OBJECT_SELF)) + { + iRank = GetSkillRank(iSkill,oPC); + if (iRank > iHigh) + { + iHigh = iRank; + oHigh = oPC; + } + } + oPC = GetNextFactionMember(oPartyMember); + } + } + return oHigh; + } +//Returns true is a PC has food or a magical replacement. +int GetHasFood(object oPC); +int GetHasFood(object oPC) + { + object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC); + if (GetIsObjectValid(GetItemPossessedBy(oPC,"food"))) + return TRUE; + else if (GetLocalInt(oSkin,"misca079")) + return TRUE; + else if (GetLocalInt(oSkin,"miscb047")) + return TRUE; + else if (GetLocalInt(oSkin,"ring002")) + return TRUE; + else if (GetLocalInt(oSkin,"ring036")) + return TRUE; + else if (GetLocalInt(oSkin,"ring033")) + return TRUE; + else if (GetLocalInt(oPC,"Food")) + return TRUE; + return FALSE; + } +// This script is used for creating LARGE amounts of gold. +// Up to 500,000 gold pieces. +void CreateGold(int iGold, object oBox = OBJECT_SELF); +void CreateGold(int iGold, object oBox) + { + while (iGold > 50000) + { + CreateItemOnObject("nw_it_gold001",oBox,50000); + iGold = iGold - 50000; + } + CreateItemOnObject("nw_it_gold001",oBox,iGold); + } +// Returns TRUE if oPC in in an area with the "Town" variable set to TRUE. +int GetIsInTown(object oPC = OBJECT_SELF); +int GetIsInTown(object oPC) + { + return GetLocalInt(GetArea(oPC),"Town"); + } +// Returns TRUE is oPC has a item activated that gives them a rest. +int HasRestGivingItem(object oPC); +int HasRestGivingItem(object oPC) + { + object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + if (GetLocalInt(oSkin,"miscb038")) return TRUE; + else if (GetLocalInt(oSkin,"miscb047")) return TRUE; + return FALSE; + } + +int HasAvailableRest(object oPC); +int HasAvailableRest(object oPC) + { + if (HasRestGivingItem(oPC)) return TRUE; + else if (GetLocalInt(oPC,"Rest")) return TRUE; + return FALSE; + } + +// Returns true if all the party has rested. +int GetHasAllPartyRested(object oPC); +int GetHasAllPartyRested(object oRester) + { + object oPC = GetFirstFactionMember(oRester); + while(GetIsObjectValid(oPC)) + { + if (!GetIsDead(oPC)) // Dead PC's dont count + { + if (!GetIsInTown(oPC)) // PC's in Town don't count + { + if (!HasRestGivingItem(oPC))// PCs with Free rest ability dont count. + { + if (GetLocalInt(oPC,"Rest")) + return FALSE; + } + } + } + oPC = GetNextFactionMember(oRester); + } + return TRUE; + } + +// Destroys food in a PC inventory if they have any. +void EatFood(object oPC); +void EatFood(object oPC) + { + if (GetLocalInt(oPC,"Food")) + DeleteLocalInt(oPC,"Food"); + else if (GetIsObjectValid(GetItemPossessedBy(oPC,"food"))) + DestroyObject(GetItemPossessedBy(oPC,"food")); + } + +// Resets the rest counter for the party. +void ResetPartyRests(object oRester); +void ResetPartyRests(object oRester) + { + object oPC = GetFirstFactionMember(oRester); + while(GetIsObjectValid(oPC)) + { + SetLocalInt(oPC,"Rest",TRUE); + SetPanelButtonFlash(oPC,PANEL_BUTTON_REST,FALSE); + oPC = GetNextFactionMember(oRester); + } + } + +// Determines if another party member is resting. +int IsAnotherPartyMemberResting(object oRester); +int IsAnotherPartyMemberResting(object oRester) + { + object oPC = GetFirstFactionMember(oRester); + while(GetIsObjectValid(oPC)) + { + if (GetIsResting(oPC)) + return TRUE; + oPC = GetNextFactionMember(oRester); + } + return FALSE; + } + +int GetRandomAbility(); +int GetRandomAbility() + { + int iRoll =d6(); + int iAbility; + switch (iRoll) + { + case 1:{iAbility = ABILITY_STRENGTH;break;} + case 2:{iAbility = ABILITY_DEXTERITY;break;} + case 3:{iAbility = ABILITY_CONSTITUTION;break;} + case 4:{iAbility = ABILITY_INTELLIGENCE;break;} + case 5:{iAbility = ABILITY_WISDOM;break;} + case 6:{iAbility = ABILITY_CHARISMA;break;} + } + return iAbility; + } + +void NotifyPartyAverageLevel(object oPC); +void NotifyPartyAverageLevel(object oPC) + { + object oLeader = GetFactionLeader(oPC); + int iAPL = PartyLevel(oPC); + SendMessageToPC(oLeader,"Average Party Level is: "+IntToString(iAPL)); + } + +int GetMinLevelXP(object oPC,int iLevel = 0); +int GetMinLevelXP(object oPC,int iLevel) + { + int nHD = GetHitDice(oPC) + iLevel; + int nMinXPForLevel = ((nHD * (nHD - 1)) / 2) * 1000; + return nMinXPForLevel; + } diff --git a/src/module/nss/inc_mod_constant.nss b/src/module/nss/inc_mod_constant.nss new file mode 100644 index 0000000..5df0736 --- /dev/null +++ b/src/module/nss/inc_mod_constant.nss @@ -0,0 +1,88 @@ +// This file can be modified to change the over all properties of the dungeon to your taste. + +// This variable will determine if the characters should be exprted often. +// This variable should be set to FALSE if playing a local vault game. +// Variable should be set to TRUE if a Server Vault Game. +const int EXPORT_CHARACTERS = FALSE;//TRUE; + +//Number of Areas in the dungeon. +//Each time a new area is added this number must be changed. +const int NUMBER_OF_AREAS = 16; + +// This will force a module restart if all the party is in the dungeon and the number of explored rooms exceed this number. +// This is used to replentish the traps in the dungeon. +const int RESET_AFTER_X_ROOMS = 10; + +// Chance of the party having its rest cycle reset. +const int SAFE_AREA_PERCENTAGE = 10;// Obsolete as of RDG 9 + +// Database name. +const string CAMPAIGN = "RDG9"; + +// If this variable is set to false XP will be awarded for each monster killed. +// If this variable is set to TRUE only "Boss" monsters will give XPs. +const int SLOW_XP = FALSE; + +// Chances of a special effect on a door. +const int NO_DOOR_PERCENTAGE = 5; // Door is not present (Area transition exists) +const int DOOR_OPEN_PERCENTAGE = 5; // Chance door is standing open and untrapped +const int DOOR_LOCKED_PERCENTAGE = 10; // Chance door is closed and locked. +const int JAMMED_DOOR = 25; // Percentage of doors locked doors that are actually jammed (can not be picked) +const int DOOR_TRAPED_PERCENTAGE = 10; // Chance door is traped. + +// Chances of contents of a room. +const int ROOM_TRAP_PERCENTAGE = 10; //10 Chance a trap placed in a room with be active. +const int ROOM_SECRET_DOOR = 1; //1 Chance of a secret door in the room +const int ROOM_DECOR = 30; //30 Chance of a decor object per decor WP +const int ROOM_HIDDEN_TREASURE = 1; //1 Chance of hidden treasure +const int WANDER_MONSTER_CHANCE = 12; // Chance for wander monster spawn +const int WANDER_MONSTER_TIMER = 600; // Number of seconds between each wandering monster check. +const int ROOM_MONSTER_CHANCE = 90; // Chance for room monster spawn +const int PLACEABLE_TRAP_PERCENTAGE = 20; // Chance that a placeable in the dungeon will be trapped. +// Type of trap chances. +// Note ALL must be determined. +// To turn a trap chance off set to 0. +// Each value must otherwise be 1 to 100. +// A d100 roll will determine trap type. +// If the roll is less than the value that trap power will be use other wise the +// next power will be tested. +const int TRAP_WEAK = 25; // d6 damage per level +const int TRAP_AVERAGE = 65; // d8 damage per level +const int TRAP_STRONG = 85; // d10 damage per level +const int TRAP_DEADLY = 95; // d12 damage per level +const int TRAP_FATAL = 200; // d20 damage per level CHANGING THIS VALUE LESS THAN 100 CAN CAUSE TRAPS TO BREAK +// Determines how many traps are area of effect +const int TRAP_AOE = 5; +// Determines Trap type +const int TRAP_MECHANICAL = 60; //60 These traps can be detected and disarmed by anyone +const int TRAP_ELEMENTAL = 95; // Rogue Only +const int TRAP_SPECIAL = 200; // Most of these traps have no defense if they go off. Should be kept rare. Changing this value less than 100 will result in an error. +// Determines how many mechanical traps are by default Pit Traps +const int TRAP_PIT = 50;// 10 + +// Determines chances that a hidden treasure is locked or trapped. +const int HIDDEN_TREASURE_LOCKED = 95; +const int HIDDEN_TREASURE_TRAPPED = 50; +// Determines base chances of contents of special hidden treasure. +const int CHEST_MODIFY_BY_LEVEL = TRUE; // Determines if Party Level should be added to base chances of loot. +const int CHEST_COIN = 50; // Chance of coin loot. +const int CHEST_GOODS = 50; // Chance of Gems and Art. +const int CHEST_ITEMS = 25; // Chance of Magic Items. +const int GENERATE_COIN = TRUE; // Will generate coin loot if no loot is determined. + + + +// ----Following Constants are used by the game system do not touch---- +/*const int DECOR_RUBBISH = 0; +const int DECOR_BATTLEFIELD = 1; +const int DECOR_TORTURE = 2; +const int DECOR_WIZARD = 4;*/ + +const int MONSTER_PEON = 0; +const int MONSTER_BOSS = 1; + + +const int DAMAGE_TYPE_POISON = 12000; +const int POISON_DEADLY = 12001; + +//void main(){} diff --git a/src/module/nss/inc_prc_ecl.nss b/src/module/nss/inc_prc_ecl.nss new file mode 100644 index 0000000..36edae6 --- /dev/null +++ b/src/module/nss/inc_prc_ecl.nss @@ -0,0 +1,103 @@ +#include "prc_racial_const" +#include "inc_2dacache" +#include "inc_persist_loca" + +int GetTotalLA(object oTarget) +{ + int nLA; + int nRace = GetRacialType(oTarget); + if(GetPRCSwitch(PRC_XP_USE_SIMPLE_LA)) + { + nLA += StringToInt(Get2DACache("ECL", "LA", nRace)); + } + if(GetPRCSwitch(PRC_XP_INCLUDE_RACIAL_HIT_DIE_IN_LA)) + { + nLA += StringToInt(Get2DACache("ECL", "RaceHD", nRace)); + } + nLA += GetPersistantLocalInt(oTarget, "template_LA"); + nLA -= GetPersistantLocalInt(oTarget, "LA_Buyoff"); + return nLA; +} + +int GetECL(object oTarget) +{ + int nLevel; + // we need to use a derivation of the base xp formular to compute the + // pc level based on total XP. + // + // base XP formula (x = pc level, t = total xp): + // + // t = x * (x-1) * 500 + // + // need to use some base math.. + // transform for pq formula use (remove brackets with x inside and zero right side) + // + // x^2 - x - (t / 500) = 0 + // + // use pq formula to solve it [ x^2 + px + q = 0, p = -1, q = -(t/500) ]... + // + // that's our new formula to get the level based on total xp: + // level = 0.5 + sqrt(0.25 + (t/500)) + // + if(GetPRCSwitch(PRC_ECL_USES_XP_NOT_HD) && GetIsPC(oTarget)) + nLevel = FloatToInt(0.5 + sqrt(0.25 + ( IntToFloat(GetXP(oTarget)) / 500 ))); + else + nLevel = GetHitDice(oTarget); + nLevel += GetTotalLA(oTarget); + return nLevel; +} + + +/* int GetECL(object oPC) +{ + int nECL = 0; + int nRace = GetRacialType(oPC); + switch(nRace) + { + case RACIAL_TYPE_DUERGAR: + case RACIAL_TYPE_AASIMAR: + case RACIAL_TYPE_TIEFLING: + case RACIAL_TYPE_HOBGOBLIN: + case RACIAL_TYPE_HALFOGRE: + case RACIAL_TYPE_HALFDROW: + case RACIAL_TYPE_GRAYORC: + case RACIAL_TYPE_AIR_GEN: + case RACIAL_TYPE_EARTH_GEN: + case RACIAL_TYPE_FIRE_GEN: + case RACIAL_TYPE_WATER_GEN: + case RACIAL_TYPE_SHADOWSWYFT: + case RACIAL_TYPE_LIZARDFOLK: + case RACIAL_TYPE_GNOLL: + nECL = 1; + break; + case RACIAL_TYPE_DROW_FEMALE: + case RACIAL_TYPE_DROW_MALE: + case RACIAL_TYPE_GITHYANKI: + case RACIAL_TYPE_GITHZERAI: + case RACIAL_TYPE_OROG: + case RACIAL_TYPE_OGRE: + case RACIAL_TYPE_PURE_YUAN: + case RACIAL_TYPE_THRIKREEN: + nECL = 2; + break; + case RACIAL_TYPE_AVARIEL: + case RACIAL_TYPE_DEEP_GNOME: + case RACIAL_TYPE_FORMIAN: + nECL = 3; + break; + case RACIAL_TYPE_AZER: + case RACIAL_TYPE_PIXIE: + nECL = 4; + break; + case RACIAL_TYPE_TROLL: + nECL = 5; + break; + case RACIAL_TYPE_RAKSHASA: + case RACIAL_TYPE_ABOM_YUAN: + case RACIAL_TYPE_ILLITHID: + nECL = 7; + break; + } + nECL += GetHitDice(oPC); + return nECL; +} */ \ No newline at end of file diff --git a/src/module/nss/inc_room_content.nss b/src/module/nss/inc_room_content.nss new file mode 100644 index 0000000..c89a8fa --- /dev/null +++ b/src/module/nss/inc_room_content.nss @@ -0,0 +1,109 @@ +#include "inc_room_decor" +#include "inc_gen_enc" + +//Sets up contents of areas. +void SetUpContents(object oPartyMember, int iPartyLevel); +// Sets up room encounters +void SetUpEncounters(int iPartyLevel); +// Sets up wandering monster encounters +// They will apear at the second nearest Transition WP. +// If that is not available they will spawn at the nearest. +void SetUpWanderingEncounter(object oPC); + +//Sets up Starting positions and conditions of doors. +void SetUpDoor(object oDoor); +void SetUpDoor(object oDoor) + { + if (d100() <= DOOR_LOCKED_PERCENTAGE) + { + if (GetIsOpen(oDoor) && GetIsTrapped(oDoor)) + AssignCommand(oDoor,ActionCloseDoor(oDoor)); + SetLocked(oDoor,TRUE); + } + else if (d100() <= DOOR_OPEN_PERCENTAGE) + AssignCommand(oDoor,ActionOpenDoor(oDoor)); + else if (d100() <= NO_DOOR_PERCENTAGE + && !GetIsTrapped(oDoor)) + DestroyObject(oDoor); + SetLocalInt(oDoor,"Set",TRUE); + } + +void SetUpContents(object oPartyMember, int iPartyLevel) + { + location lLoc; + int iType; + object oObject = GetFirstObjectInArea(OBJECT_SELF); + string sTag; + effect eStone = EffectPetrify(); + while (GetIsObjectValid(oObject)) + { + iType = GetObjectType(oObject); + lLoc = GetLocation(oObject); + sTag = GetTag(oObject); + switch (iType) + { + case OBJECT_TYPE_DOOR: + { + if (!GetLocalInt(oObject,"Set")) + SetUpDoor(oObject); + break; + } + case OBJECT_TYPE_ITEM: + case OBJECT_TYPE_PLACEABLE: + { + if (d100() > ROOM_DECOR) + { + if (!GetPlotFlag(oObject)) + DestroyObject(oObject); + } + else + ConvertObject(oObject); + break; + } + case OBJECT_TYPE_WAYPOINT: + { + if (sTag == "Decor") // Decor + { + if (d100() <= ROOM_DECOR) + { + GenerateDecor(oObject); + break; + } + else + DestroyObject(oObject); + break; + } + } + }; + oObject = GetNextObjectInArea(OBJECT_SELF); + } + } + +void SetUpEncounters(int iPartyLevel) + { + string sString,sTag; + object oWP = GetFirstObjectInArea(OBJECT_SELF); + while(GetIsObjectValid(oWP)) + { + if (GetTag(oWP) == "MON_" + && !GetLocalInt(oWP,"DoOnce") + && d100() <= ROOM_MONSTER_CHANCE) + { + GenerateEncounter(iPartyLevel,oWP); + break; + } + oWP = GetNextObjectInArea(OBJECT_SELF); + } + } + +void SetUpWanderingEncounter(object oPC) + { + int iPartyLevel = PartyLevel(oPC); + object oWP = GetNearestObjectByTag("Transition",oPC,2); + if (!GetIsObjectValid(oWP) || GetArea(oWP)!=OBJECT_SELF) + oWP = GetNearestObjectByTag("Transition",oPC,1); + if (GetIsObjectValid(oWP)) + GenerateEncounter(iPartyLevel,oWP,TRUE); + } + +//void main(){} diff --git a/src/module/nss/inc_room_decor.nss b/src/module/nss/inc_room_decor.nss new file mode 100644 index 0000000..41ebc2c --- /dev/null +++ b/src/module/nss/inc_room_decor.nss @@ -0,0 +1,81 @@ +#include "inc_misc_tools" +//Work in progress. +object GenerateDecor(object oObject); +//Sub Function of GenerateDecor. +object GenerateRubish(object oWP); + +// New type of Dungeon decor generator. +void ConvertObject(object oObject); +// SubFunction of ConvertObject +void PlaceObject(string sResRef, location lLoc); + +object GenerateDecor(object oWP) + { + return GenerateRubish(oWP); + } + +object GenerateRubish(object oWP) + { + string sResRef = "plc_garbage"; + int iRoll = d100(); + if (iRoll >= 95) sResRef = "x0_fallentimber"; + else if (iRoll >= 90) sResRef = "nw_pl_rubble001"; + else if (iRoll >= 85) sResRef = "x0_cityrubble2"; + else if (iRoll >= 80) sResRef = "x0_cityrubble1"; + else if (iRoll >= 75) sResRef = "plc_rubble"; + else if (iRoll >= 70) sResRef = "x0_desertboulde2"; + else if (iRoll >= 65) sResRef = "x0_desertboulder"; + else if (iRoll >= 60) sResRef = "x0_desertrocks"; + else if (iRoll >= 55) sResRef = "x0_brokenfurnit"; + else if (iRoll >= 50) sResRef = "x0_brokentable"; + else if (iRoll >= 45) sResRef = "x0_brokentable2"; + else if (iRoll >= 40) sResRef = "x0_brokenchair2"; + else if (iRoll >= 30) sResRef = "x0_brokenchair1"; + else if (iRoll >= 25) sResRef = "x0_brokenchair3"; + else if (iRoll >= 20) sResRef = "x0_brokenchair4"; + else if (iRoll >= 15) sResRef = "x0_brokenfurnit2"; + else if (iRoll >= 10) sResRef = "x0_brokenfurnit1"; + else if (iRoll >= 5) sResRef = "plc_waterdrip"; + object oObject = CreateObject(OBJECT_TYPE_PLACEABLE,sResRef,GetLocation(oWP)); + DestroyObject(oWP); + return oObject; + } + +void ConvertObject(object oObject) + { + string sTag = GetTag(oObject); + string sResRef; + int iRoll = d100(); + location lLoc = GetLocation(oObject); + if (GetPlotFlag(oObject)) + return; + if (sTag == "Table") + { + if (iRoll <= 25) + sResRef = "x0_brokentable"; + else if (iRoll <= 50) + sResRef = "x0_brokentable2"; + } + else if (sTag == "Chair") + { + if (iRoll <= 15) + sResRef = "x0_brokenchair1"; + else if (iRoll <= 30) + sResRef = "x0_brokenchair2"; + else if (iRoll <= 45) + sResRef = "x0_brokenchair3"; + else if (iRoll <= 60) + sResRef = "x0_brokenchair4"; + } + if (sResRef != "") // Place the object if a new ResRef has been determined. + { + DestroyObject(oObject); + DelayCommand(0.5,PlaceObject(sResRef,lLoc)); + } + } + +void PlaceObject(string sResRef, location lLoc) + { + object oObject = CreateObject(OBJECT_TYPE_PLACEABLE,sResRef,lLoc); + AssignCommand(oObject,SetFacing(IntToFloat(Random(360)))); + } diff --git a/src/module/nss/mhk_hench_hire.nss b/src/module/nss/mhk_hench_hire.nss new file mode 100644 index 0000000..b5d1ea6 --- /dev/null +++ b/src/module/nss/mhk_hench_hire.nss @@ -0,0 +1,30 @@ +//::////////////////////////////////////////////////// +//:: Filename: mhk_hire_chk +//:: Created By: MacLir (maclir@hotmail.com) +//::////////////////////////////////////////////////// +/* + Handles the hiring/payment of a henchman. +*/ +//::////////////////////////////////////////////////// +//:: Created On: August 12, 2004 +//::////////////////////////////////////////////////// + +#include "x0_i0_henchman" +#include "inc_prc_ecl" + +void main(){ + object oPC = GetPCSpeaker(); + int iCost = GetECL(oPC) * GetLocalInt(OBJECT_SELF, "Cost"); + + //Ensure plot/immortal flags has been turned off + SetPlotFlag(OBJECT_SELF, FALSE); + SetImmortal(OBJECT_SELF, FALSE); + + if (GetGold(oPC) > iCost){ + AssignCommand(OBJECT_SELF, TakeGoldFromCreature(iCost, oPC, TRUE)); + HireHenchman(oPC, OBJECT_SELF, TRUE); + } + else{ + SpeakString("It would seem as though you cannot afford me after all...", TALKVOLUME_TALK); + } +} diff --git a/src/module/nss/mhk_hire_chk.nss b/src/module/nss/mhk_hire_chk.nss new file mode 100644 index 0000000..7a122b4 --- /dev/null +++ b/src/module/nss/mhk_hire_chk.nss @@ -0,0 +1,29 @@ +//::////////////////////////////////////////////////// +//:: Filename: mhk_hire_chk +//:: Created By: MacLir (maclir@hotmail.com) +//::////////////////////////////////////////////////// +/* + Checks henchman availability and whether a player + has enough gold to hire the henchman based from + player level multiplied by 'Cost' variable set on + the henchman. +*/ +//::////////////////////////////////////////////////// +//:: Created On: August 12, 2004 +//::////////////////////////////////////////////////// + +#include "x0_i0_henchman" +#include "inc_prc_ecl" + +int StartingConditional(){ + object oPC = GetPCSpeaker(); + int iCost = GetECL(oPC) * GetLocalInt(OBJECT_SELF, "Cost"); + + SetCustomToken(77009, IntToString(iCost)); + + if(!GetIsHired()) + { + return TRUE; + } + return FALSE; +} diff --git a/src/module/nss/mhk_hire_chk2.nss b/src/module/nss/mhk_hire_chk2.nss new file mode 100644 index 0000000..2dd848c --- /dev/null +++ b/src/module/nss/mhk_hire_chk2.nss @@ -0,0 +1,27 @@ +//::////////////////////////////////////////////////// +//:: Filename: mhk_hire_chk +//:: Created By: MacLir (maclir@hotmail.com) +//::////////////////////////////////////////////////// +/* + Checks henchman availability and whether a player + has enough gold to hire the henchman based from + player level multiplied by 'Cost' variable set on + the henchman. +*/ +//::////////////////////////////////////////////////// +//:: Created On: August 12, 2004 +//::////////////////////////////////////////////////// + +#include "x0_i0_henchman" +#include "inc_prc_ecl" + +int StartingConditional(){ + object oPC = GetPCSpeaker(); + int iCost = GetECL(oPC) * GetLocalInt(OBJECT_SELF, "Cost"); + + if((GetGold(oPC) < iCost)) + { + return TRUE; + } + return FALSE; +} diff --git a/src/module/nss/mhk_hire_chk3.nss b/src/module/nss/mhk_hire_chk3.nss new file mode 100644 index 0000000..03d4b7d --- /dev/null +++ b/src/module/nss/mhk_hire_chk3.nss @@ -0,0 +1,27 @@ +//::////////////////////////////////////////////////// +//:: Filename: mhk_hire_chk +//:: Created By: MacLir (maclir@hotmail.com) +//::////////////////////////////////////////////////// +/* + Checks henchman availability and whether a player + has enough gold to hire the henchman based from + player level multiplied by 'Cost' variable set on + the henchman. +*/ +//::////////////////////////////////////////////////// +//:: Created On: August 12, 2004 +//::////////////////////////////////////////////////// + +#include "x0_i0_henchman" +#include "inc_prc_ecl" + +int StartingConditional(){ + object oPC = GetPCSpeaker(); + int iCost = GetECL(oPC) * GetLocalInt(OBJECT_SELF, "Cost"); + + if(GetGold(oPC) >= iCost) + { + return TRUE; + } + return FALSE; +} diff --git a/src/module/nss/mhk_spell_chk.nss b/src/module/nss/mhk_spell_chk.nss new file mode 100644 index 0000000..3640b6e --- /dev/null +++ b/src/module/nss/mhk_spell_chk.nss @@ -0,0 +1,24 @@ +//:://///////////////////////////////////////////// +//:: Name: Check Casting Class +//:: Filename: mhk_spell_chk +//::////////////////////////////////////////////// +/* + Checks to see if the PC is a Paladin, Ranger, + Cleric, Bard, Druid, Sorcerer or Wizard. +*/ +//::////////////////////////////////////////////// +//:: Created By: MacLir (maclir@hotmail.com) +//:: Created On: August 12, 2004 +//::////////////////////////////////////////////// + +int StartingConditional(){ + int nClass; + nClass = GetLevelByClass(CLASS_TYPE_CLERIC); + nClass += GetLevelByClass(CLASS_TYPE_RANGER); + nClass += GetLevelByClass(CLASS_TYPE_PALADIN); + nClass += GetLevelByClass(CLASS_TYPE_DRUID); + nClass += GetLevelByClass(CLASS_TYPE_BARD); + nClass += GetLevelByClass(CLASS_TYPE_SORCERER); + nClass += GetLevelByClass(CLASS_TYPE_WIZARD); + return nClass; +} diff --git a/src/module/nss/miscb077.nss b/src/module/nss/miscb077.nss new file mode 100644 index 0000000..e29e5d1 --- /dev/null +++ b/src/module/nss/miscb077.nss @@ -0,0 +1,12 @@ +void main() + { + object oPC = GetAreaOfEffectCreator(); + object oObject = GetFirstInPersistentObject(); + effect eEffect = EffectDamageImmunityIncrease(DAMAGE_TYPE_COLD,100); + while (GetIsObjectValid(oObject)) + { + if (oObject != oPC) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eEffect,oObject,6.0); + oObject = GetNextInPersistentObject(); + } + } diff --git a/src/module/nss/miscb091.nss b/src/module/nss/miscb091.nss new file mode 100644 index 0000000..d033e71 --- /dev/null +++ b/src/module/nss/miscb091.nss @@ -0,0 +1,33 @@ +void main() + { + object oItem = OBJECT_SELF; + object oPC = GetItemPossessor(oItem); + if (GetItemInSlot(INVENTORY_SLOT_CHEST,oPC) != oItem) + { + DeleteLocalInt(oItem,"Rounds"); + return;// They have removed the robe shut it down. + } + int i = GetLocalInt(oItem,"Rounds"); + if (i < 1) i = 1; + if (i <= 4) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectLinkEffects(EffectMissChance(i*10),EffectVisualEffect(VFX_FNF_SOUND_BURST_SILENT)),oPC,RoundsToSeconds(1)); + else + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectLinkEffects(EffectMissChance(50),EffectVisualEffect(VFX_FNF_SOUND_BURST_SILENT)),oPC,RoundsToSeconds(1)); + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE,FeetToMeters(30.0),GetLocation(oPC),TRUE); + while (GetIsObjectValid(oTarget)) + { + if (oTarget != oPC) + { + if (!WillSave(oTarget,14,SAVING_THROW_TYPE_MIND_SPELLS,oPC)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectDazed(),oTarget,RoundsToSeconds(d4()+1)); + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE,FeetToMeters(30.0),GetLocation(oPC),TRUE); + } + if (i < 10) + { + SetLocalInt(oItem,"Rounds",i+=1); + DelayCommand(6.0,ExecuteScript("miscb091",oItem)); + } + else + DeleteLocalInt(oItem,"Rounds"); + } diff --git a/src/module/nss/miscc097.nss b/src/module/nss/miscc097.nss new file mode 100644 index 0000000..90d5f8c --- /dev/null +++ b/src/module/nss/miscc097.nss @@ -0,0 +1,25 @@ +// This script handles the area of effect for the Helm of Brilliance. + +void main() + { + object oUndead = GetFirstInPersistentObject(); + object oCreator = GetAreaOfEffectCreator(); + if (!GetIsPC(oCreator)) + oCreator = GetItemPossessor(oCreator); + object oHelm = GetItemPossessedBy(oCreator,"miscc097"); + if (GetItemInSlot(INVENTORY_SLOT_HEAD,oCreator) != oHelm) + { + DestroyObject(OBJECT_SELF); + return; + } + effect eVis = EffectBeam(VFX_BEAM_FIRE,oCreator,BODY_NODE_CHEST); + while (GetIsObjectValid(oUndead)) + { + if (GetRacialType(oUndead) == RACIAL_TYPE_UNDEAD) + { + AssignCommand(oCreator,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(d6(),DAMAGE_TYPE_POSITIVE),oUndead)); + AssignCommand(oCreator,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oUndead,3.0)); + } + oUndead = GetNextInPersistentObject(); + } + } diff --git a/src/module/nss/mm_prc_spells.nss b/src/module/nss/mm_prc_spells.nss new file mode 100644 index 0000000..4aeb8e0 --- /dev/null +++ b/src/module/nss/mm_prc_spells.nss @@ -0,0 +1,161 @@ +#include "0i_menus" +// Does startup check if the game has just been loaded. +int StartingUp(object oPC); +json ai_CheckToReplaceSpell(json jSpellList, int nClass, int nLevel, int nSlot) +{ + //if(d100() > 49) return jSpellList; + string sSpellTableColumn = Get2DAString("classes", "SpellTableColumn", nClass); + int nRoll = d10() + 1 + nLevel * 10; + int nSpell = StringToInt(Get2DAString("prc_add_spells", sSpellTableColumn, nRoll)); + if(nSpell > 0) + { + //WriteTimestampedLogEntry("mm_prc_spells, 13 nSpell: " + IntToString(nSpell) + + // " nLevel: " + IntToString(nLevel) + " nSlot: " + IntToString(nSlot)); + json jSpellArray = JsonArrayGet(jSpellList, nSlot); + json jSpell = JsonObjectGet(jSpellArray, "Spell"); + jSpell = JsonObjectSet(jSpell, "value", JsonInt(nSpell)); + jSpellArray = JsonObjectSet(jSpellArray, "Spell", jSpell); + return JsonArraySet(jSpellList, nSlot, jSpellArray); + } + return jSpellList; +} +void main() +{ + object oPC = OBJECT_SELF; + if(StartingUp(oPC)) return; + int bChanged, bCreatureChanged, nPosition, nClass, nLevel, nSlot, nMaxSlots; + json jClass, jMemorizedList, jKnownList; + object oModule = GetModule(); + json jCreature = GetLocalJson(oModule, AI_MONSTER_JSON); + object oCreature = GetLocalObject(oModule, AI_MONSTER_OBJECT); + json jClassList = GffGetList(jCreature, "ClassList"); + while(nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + nClass = GetClassByPosition(nPosition, oCreature); + if(Get2DAString("classes", "SpellCaster", nClass) == "1") + { + //WriteTimestampedLogEntry("mm_prc_spells, 39 " + GetName(oCreature) + JsonDump(jClassList, 4)); + jClass = JsonArrayGet(jClassList, nPosition - 1); + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + nLevel = 1; + while(nLevel < 9) + { + jMemorizedList = GffGetList(jClass, "MemorizedList" + IntToString(nLevel)); + if(JsonGetType(jMemorizedList) != JSON_TYPE_NULL) + { + nSlot = 0; + nMaxSlots = GetMemorizedSpellCountByLevel(oCreature, nClass, nLevel); + while(nSlot < nMaxSlots) + { + jMemorizedList = ai_CheckToReplaceSpell(jMemorizedList, nClass, nLevel, nSlot); + nSlot++; + } + //WriteTimestampedLogEntry("nClass: " + IntToString(nClass) + " nLevel: " + IntToString(nLevel) + + // " nSlot: " + IntToString(nSlot) + " jMemorizedList " + JsonDump(jMemorizedList, 4)); + jClass = GffReplaceList(jClass, "MemorizedList" + IntToString(nLevel), jMemorizedList); + bChanged = TRUE; + } + nLevel++; + } + } + else + { + nLevel = 1; + while(nLevel < 9) + { + jKnownList = GffGetList(jClass, "KnownList" + IntToString(nLevel)); + if(JsonGetType(jMemorizedList) != JSON_TYPE_NULL) + { + nSlot = 0; + nMaxSlots = GetKnownSpellCount(oCreature, nClass, nLevel); + while(nSlot < nMaxSlots) + { + jKnownList = ai_CheckToReplaceSpell(jKnownList, nClass, nLevel, nSlot); + nSlot++; + } + jClass = GffReplaceList(jClass, "KnownList" + IntToString(nLevel), jKnownList); + bChanged = TRUE; + } + nLevel++; + } + } + if(bChanged) + { + //WriteTimestampedLogEntry("0i_module, 87 " + GetName(oCreature) + " jClass: " + JsonDump(jClass, 4)); + jClassList = JsonArraySet(jClassList, nPosition - 1, jClass); + //if(AI_DEBUG) ai_Debug("0i_module, 89 " + GetName(oCreature) + " jClassList: " + JsonDump(jClassList, 4)); + jCreature = GffReplaceList(jCreature, "ClassList", jClassList); + bCreatureChanged = TRUE; + bChanged = FALSE; + } + } + nPosition++; + } + if(bCreatureChanged) + { + //WriteTimestampedLogEntry("mm_prc_spells, 99 " + GetName(oCreature) + " jClassList: " + JsonDump(jClassList, 4)); + SetLocalJson(oModule, AI_MONSTER_JSON, jCreature); + SetLocalInt(oModule, AI_MONSTER_CHANGED, TRUE); + } +} +int PRCSpellsSetup(object oPC) +{ + // Check to make sure prc_add_spells.2da is loaded. + if(ResManGetAliasFor("prc_add_spells", RESTYPE_2DA) == "") + { + SendMessageToPC(oPC, "prc_add_spells.2da is not loaded! Make sure it is in the override or development folder."); + return FALSE; + } + // Check to make sure PRC is loaded. + if(!GetLocalInt(GetModule(), AI_USING_PRC)) + { + SendMessageToPC(oPC, "PRC is not being used. PRC must be active for this mod to work."); + return FALSE; + } + return TRUE; +} +void SetMonsterModJson(object oPC) +{ + object oModule = GetModule(); + json jMonsterMods = GetLocalJson(oModule, AI_MONSTER_MOD_JSON); + if(JsonGetType(jMonsterMods) == JSON_TYPE_NULL) jMonsterMods = JsonArray(); + int nIndex; + string sMonsterMod = JsonGetString(JsonArrayGet(jMonsterMods, nIndex)); + while(sMonsterMod != "") + { + if(sMonsterMod == "mm_prc_spells") return; + sMonsterMod = JsonGetString(JsonArrayGet(jMonsterMods, ++nIndex)); + } + jMonsterMods = JsonArrayInsert(jMonsterMods, JsonString("mm_prc_spells")); + SetLocalJson(oModule, AI_MONSTER_MOD_JSON, jMonsterMods); + ai_SendMessages("mm_prc_spells loaded! Monsters will be using PRC spells.", AI_COLOR_YELLOW, oPC); +} +int StartingUp(object oPC) +{ + if(!PRCSpellsSetup(oPC)) + { + SendMessageToPC(oPC, "mm_prc_spells monster mod has failed to load due to an error."); + // Return -1 in AI_PLUGIN_SET to tell PEPS that we failed to load. + SetLocalInt(oPC, AI_PLUGIN_SET, -1); + return TRUE; + } + if(GetLocalInt(oPC, AI_ADD_PLUGIN)) + { + json jPlugin = JsonArray(); + jPlugin = JsonArrayInsert(jPlugin, JsonString("mm_prc_spells")); + jPlugin = JsonArrayInsert(jPlugin, JsonInt(3)); + jPlugin = JsonArrayInsert(jPlugin, JsonString("Monsters will use PRC spells!")); + jPlugin = JsonArrayInsert(jPlugin, JsonString("")); + json jPlugins = GetLocalJson(oPC, AI_JSON_PLUGINS); + jPlugins = JsonArrayInsert(jPlugins, jPlugin); + SetLocalJson(oPC, AI_JSON_PLUGINS, jPlugin); + SetLocalInt(oPC, AI_PLUGIN_SET, TRUE); + SetMonsterModJson(oPC); + return TRUE; + } + if(!GetLocalInt(oPC, AI_STARTING_UP)) return FALSE; + SetMonsterModJson(oPC); + return TRUE; +} + diff --git a/src/module/nss/mod_act_armor.nss b/src/module/nss/mod_act_armor.nss new file mode 100644 index 0000000..622e37c --- /dev/null +++ b/src/module/nss/mod_act_armor.nss @@ -0,0 +1,79 @@ +#include "inc_item_tools" +#include "prc_x2_itemprop" +void main() + { + object oItem = GetItemActivated(); + string sTag = GetTag (oItem); + object oPC = GetItemActivator(); + object oTarget = GetItemActivatedTarget(); + location lLoc = GetItemActivatedTargetLocation(); + int iTemp; + itemproperty ipProp; + effect eEffect,eDam,eVis; + if (sTag == "misca042") + { + ClearAllActions(); + if (GetDistanceBetween(oTarget,oPC) >= 1.0) + { + ActionMoveToObject(oTarget); + ActionDoCommand(ThiefTools(oPC,oTarget,2)); + } + else + ThiefTools(oPC,oTarget,2); + } + else if (sTag == "misca088") + { + if (GetHasFeat(FEAT_WILD_SHAPE ,oPC)) + ActionCastSpellAtObject(SPELLABILITY_WILD_SHAPE ,oPC,METAMAGIC_ANY,TRUE,0,PROJECTILE_PATH_TYPE_DEFAULT,TRUE); + } + else if (sTag == "misca094") + { + if (GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD) iTemp = d8(3); + else if (GetRacialType(oTarget) == RACIAL_TYPE_CONSTRUCT) iTemp = d6(); + else iTemp = d8(); + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(iTemp,DAMAGE_TYPE_DIVINE),oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_BEAM_HOLY),oTarget,3.0); + } + else if (sTag == "miscb079") + { + if (GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD) iTemp = 40; + else if (GetRacialType(oTarget) == RACIAL_TYPE_CONSTRUCT) iTemp = 18; + else iTemp = 24; + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_BEAM_HOLY),oTarget,3.0); + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(iTemp,DAMAGE_TYPE_DIVINE),oTarget); + } + else if (sTag == "miscb085") + { + MaskOfTheSkull(oTarget); + } + else if (sTag == "miscb091") + { + ExecuteScript("miscb091",oItem); + } + else if (sTag == "miscc033") + { + JumpToLocation(lLoc); + } + else if (sTag == "lshield603") + { + eDam = EffectDamageShield(0,DAMAGE_BONUS_1d6,DAMAGE_TYPE_PIERCING); + eVis = EffectVisualEffect(VFX_DUR_ENTANGLE); + eEffect = EffectLinkEffects(eVis,eDam); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eEffect,oPC,60.0); + } + else if (sTag == "lshield604") + { + eEffect = EffectModifyAttacks(1); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eEffect,oPC,60.0); + } + else if (sTag == "lshield606") + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_IMP_EVIL_HELP),oPC,6.0); + DelayCommand(6.0,ShieldOfAbsorption(oPC)); + } + else if (sTag == "miscc097") + { + oTarget = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC); + IPSafeAddItemProperty(oTarget,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6),60.0); + } + } diff --git a/src/module/nss/mod_act_book.nss b/src/module/nss/mod_act_book.nss new file mode 100644 index 0000000..4910f12 --- /dev/null +++ b/src/module/nss/mod_act_book.nss @@ -0,0 +1,92 @@ +#include "inc_item_tools" +#include "prc_x2_itemprop" +void main() + { + object oItem = GetItemActivated(); + string sTag = GetTag (oItem); + object oPC = GetItemActivator(); + object oTarget = GetItemActivatedTarget(); + int iBonus,iStat; + string sResRef; + object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC); + // Determine Bonus + if (sTag == "miscb092" + || sTag == "miscb093" + || sTag == "miscb094" + || sTag == "miscb095" + || sTag == "miscb096" + || sTag == "miscb097") + iBonus = 1; + else if (sTag == "miscc045" + || sTag == "miscc046" + || sTag == "miscc047" + || sTag == "miscc048" + || sTag == "miscc049" + || sTag == "miscc050") + iBonus = 2; + else if (sTag == "miscc066" + || sTag == "miscc067" + || sTag == "miscc068" + || sTag == "miscc069" + || sTag == "miscc070" + || sTag == "miscc071") + iBonus = 3; + else if (sTag == "miscc081" + || sTag == "miscc082" + || sTag == "miscc083" + || sTag == "miscc084" + || sTag == "miscc085" + || sTag == "miscc086") + iBonus = 4; + else if (sTag == "miscc088" + || sTag == "miscc089" + || sTag == "miscc090" + || sTag == "miscc091" + || sTag == "miscc092" + || sTag == "miscc093") + iBonus = 5; + else + { + FloatingTextStringOnCreature("ERROR IN BOOK",oPC); + } + //Determine Stat + if (sTag == "miscb092" + || sTag == "miscc045" + || sTag == "miscc066" + || sTag == "miscc081" + || sTag == "miscc088") + iStat = ABILITY_CONSTITUTION; + else if (sTag == "miscb093" + || sTag == "miscc046" + || sTag == "miscc067" + || sTag == "miscc082" + || sTag == "miscc089") + iStat = ABILITY_STRENGTH; + else if (sTag == "miscb094" + || sTag == "miscc047" + || sTag == "miscc068" + || sTag == "miscc083" + || sTag == "miscc090") + iStat = ABILITY_DEXTERITY; + else if (sTag == "miscb095" + || sTag == "miscc048" + || sTag == "miscc069" + || sTag == "miscc084" + || sTag == "miscc091") + iStat = ABILITY_INTELLIGENCE; + else if (sTag == "miscb096" + || sTag == "miscc049" + || sTag == "miscc070" + || sTag == "miscc085" + || sTag == "miscc092") + iStat = ABILITY_CHARISMA; + else if (sTag == "miscb097" + || sTag == "miscc050" + || sTag == "miscc071" + || sTag == "miscc086" + || sTag == "miscc093") + iStat = ABILITY_WISDOM; + // Apply proprerties to PC Skin + itemproperty ipItem = ItemPropertyAbilityBonus(iStat,iBonus); + IPSafeAddItemProperty(oSkin,ipItem); + } diff --git a/src/module/nss/mod_act_clothes.nss b/src/module/nss/mod_act_clothes.nss new file mode 100644 index 0000000..02d1e6f --- /dev/null +++ b/src/module/nss/mod_act_clothes.nss @@ -0,0 +1,50 @@ +#include "inc_item_tools" +void main() + { + object oItem = GetItemActivated(); + string sTag = GetTag (oItem); + object oPC = GetItemActivator(); + object oTarget = GetItemActivatedTarget(); + object oTemp; + location lLoc = GetItemActivatedTargetLocation(); + int iTemp; + if (sTag == "misca044") + { + oTemp = RetrieveCampaignObject(CAMPAIGN,sTag,lLoc,oPC,oPC); + if (!GetIsObjectValid(oTemp)) + { + if (GetObjectType(oTarget) == OBJECT_TYPE_ITEM) + { + if (GetDistanceBetween(oPC,oTarget) <= 3.0) + { + StoreCampaignObject(CAMPAIGN,sTag,oTarget,oPC); + DestroyObject(oTarget); + } + else + SendMessageToPC(oPC,"Must be closer to store items"); + } + else + SendMessageToPC(oPC,"Only items my be stored."); + } + else + DeleteCampaignVariable(CAMPAIGN,sTag,oPC); + } + else if (sTag == "misca076") + { + AssignCommand(oTarget,JumpToLocation(GetLocation(oPC))); + } + else if (sTag == "misca087") + { + JumpToLocation(lLoc); + } + else if (sTag == "miscb001") + { + Fly(); + } + else if (sTag == "miscb041") + { + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_FNF_SMOKE_PUFF),GetLocation(oPC)); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_FNF_SMOKE_PUFF),lLoc); + DelayCommand(1.0,JumpToLocation(lLoc)); + } + } diff --git a/src/module/nss/mod_act_jewelry.nss b/src/module/nss/mod_act_jewelry.nss new file mode 100644 index 0000000..c7ee889 --- /dev/null +++ b/src/module/nss/mod_act_jewelry.nss @@ -0,0 +1,72 @@ +#include "inc_item_tools" +void main() + { + object oItem = GetItemActivated(); + string sTag = GetTag (oItem); + object oPC = GetItemActivator(); + object oTarget = GetItemActivatedTarget(); + location lLoc = GetItemActivatedTargetLocation(); + object oTemp,oFall,oTrap; + effect eEffect; + int i,j,iDam; + if (sTag == "ring005") + { + if (GetRacialType(oTarget) == RACIAL_TYPE_ANIMAL) + ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectDominated(),oTarget); + } + else if (sTag == "ring022") + JumpToLocation(lLoc); + else if (sTag == "ring034" + || sTag == "ring030" + || sTag == "miscc004") + { + Fly(); + } + else if (sTag == "ring039") + { + // Determine number of targets stop at 4. + oTarget = GetNearestObject(OBJECT_TYPE_CREATURE,oPC,i = 1); + while (GetIsObjectValid(oTarget) && j < 4) + { + if (GetIsEnemy(oTarget,oPC)) + j+=1; + oTarget = GetNearestObject(OBJECT_TYPE_CREATURE,oPC,i+=1); + } + iDam = 5 - j; + if (iDam == 5)// No targets shut down + return; + oTarget = GetNearestObject(OBJECT_TYPE_CREATURE,oPC,i = 1); + while (i <= j) + { + if (GetIsEnemy(oTarget,oPC)) + AssignCommand(oPC,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectLinkEffects(EffectDamage(d6(iDam),DAMAGE_TYPE_ELECTRICAL),EffectVisualEffect(VFX_IMP_MIRV)),oTarget)); + oTarget = GetNearestObject(OBJECT_TYPE_CREATURE,oPC,i+=1); + } + } + + else if (sTag == "misca019") + { + if (GetObjectType(oTarget) == OBJECT_TYPE_DOOR + && !GetLocked(oTarget)) + AssignCommand(oPC,MageHand(oTarget)); + } + else if (sTag == "miscb034") + { + TurnUndead(oPC,4); + } + else if (sTag == "miscc040") + { + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_FNF_TIME_STOP),GetLocation(OBJECT_SELF)); + oTarget = GetFirstObjectInArea(); + while (GetIsObjectValid(oTarget)) + { + if (GetIsEnemy(oTarget)) + { + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_FNF_STRIKE_HOLY),lLoc); + DestroyObject(oTarget); + } + oTarget = GetNextObjectInArea(); + } + DestroyObject(oItem); + } + } diff --git a/src/module/nss/mod_act_med.nss b/src/module/nss/mod_act_med.nss new file mode 100644 index 0000000..8237b1f --- /dev/null +++ b/src/module/nss/mod_act_med.nss @@ -0,0 +1,228 @@ +#include "inc_item_tools" +void main() + { + object oItem = GetItemActivated(); + string sTag = GetTag (oItem); + object oPC = GetItemActivator(); + object oTarget = GetItemActivatedTarget(); + location lLoc = GetItemActivatedTargetLocation(); + location lLoc2; + int iType = GetBaseItemType(oItem); + int i,iTemp,iTemp2,iAnim,iPassed,iSkill,iRoll; + effect eTemp,eTemp2; + object oTemp,oTemp2,oFall,oTrap,oRope,oWP; + string sResRef,sTemp,sTemp2; + itemproperty ipItem; + float fTemp; + if (sTag == "healersbag") + { + iTemp = GetCurrentHitPoints(oTarget); + iPassed = SkillCheck(SKILL_HEAL,13,oPC,TRUE,TRUE); + if (iPassed) + { + if (iTemp < 0 && iTemp > -10) + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(1-iTemp),oTarget); + else if (HasEffect(oTarget,EFFECT_TYPE_POISON)) + FindEffect(oTarget,EFFECT_TYPE_POISON,OBJECT_INVALID,TRUE); + else if (HasEffect(oTarget,EFFECT_TYPE_DISEASE)) + FindEffect(oTarget,EFFECT_TYPE_DISEASE,OBJECT_INVALID,TRUE); + else + FloatingTextStringOnCreature("No effect.",oTarget); + } + } + else if (sTag == "misca030") + { + oTemp = CreateItemOnObject("arrow001",oPC,99); + SetPlotFlag(oTemp,TRUE); + } + else if (sTag == "misca085" || sTag == "miscb043" || sTag == "miscc099") + { + // Create the doors + oWP = DetermineDestination(FALSE,TRUE); + sTemp = GetSecretDoorTag(); + sTemp2 = GetSecretDoorTag(); + oTemp = CreateObject(OBJECT_TYPE_PLACEABLE,"port_door",lLoc,FALSE, sTemp); + oTemp2 = CreateObject(OBJECT_TYPE_PLACEABLE,"port_door",GetLocation(oWP),FALSE,sTemp2); + SetPlotFlag(oTemp,TRUE); + SetPlotFlag(oTemp2,TRUE); + AssignCommand(oTemp,SetFacing(GetFacing(oPC))); + // Create Transition Waypoints + SetLocalString(CreateObject(OBJECT_TYPE_WAYPOINT,"transition",GetLocation(oTemp)),"Tag",sTemp); + SetLocalString(CreateObject(OBJECT_TYPE_WAYPOINT,"transition",GetLocation(oTemp2)),"Tag",sTemp2); + // Link the doors + LinkTransitions(oTemp,oTemp2); + } + else if (sTag == "miscb002") + { + if (GetHasSkill(SKILL_PERFORM,oPC)) + iRoll = d20() + GetSkillRank(SKILL_PERFORM,oPC); + if (iRoll >= 15) + { + i = 1; + oTemp = GetNearestObject(OBJECT_TYPE_CREATURE,oPC,i); + while (GetIsObjectValid(oTemp)) + { + if (WillSave(oTemp,14,SAVING_THROW_TYPE_MIND_SPELLS,oPC) == 0) + SetIsTemporaryFriend(oTarget,oPC,TRUE); + else + AssignCommand(oTemp,ActionAttack(oPC)); + oTemp = GetNearestObject(OBJECT_TYPE_CREATURE,oPC,i+=1); + } + } + else if (iRoll <= 1) + { + oTemp = GetNearestObject(OBJECT_TYPE_CREATURE,oPC,i); + while (GetIsObjectValid(oTemp)) + { + AssignCommand(oTemp,ActionAttack(oPC)); + oTemp = GetNearestObject(OBJECT_TYPE_CREATURE,oPC,i+=1); + } + } + else + { + if (GetIsEnemy(oPC,oTemp)) + AssignCommand(oTemp,ActionAttack(oPC)); + } + } + else if (sTag == "miscb024") + { + iTemp = Random(34) +1; + switch(iTemp) + { + case 1: {sResRef = "deck_drgred";break;} + case 2: {sResRef = "deck_bandit1";break;} + case 3: {sResRef = "deck_bandit2";break;} + case 4: {sResRef = "deck_bandit3";break;} + case 5: {sResRef = "deck_fgiant";break;} + case 6: {sResRef = "deck_ettin";break;} + case 7: {sResRef = "deck_bugbear";break;} + case 8: {sResRef = "deck_goblin";break;} + case 9: {sResRef = "deck_dragongold";break;} + case 10: {sResRef = "deck_elfmage";break;} + case 11: {sResRef = "deck_elfranger";break;} + case 12: {sResRef = "deck_cocktrice";break;} + case 13: {sResRef = "deck_bandit6";break;} + case 14: {sResRef = "deck_ogremage";break;} + case 15: {sResRef = "deck_gnoll";break;} + case 16: {sResRef = "deck_kobold";break;} + case 17: {sResRef = "deck_lich";break;} + case 18: {sResRef = "deck_humanmerc1";break;} + case 19: {sResRef = "deck_medusa";break;} + case 20: {sResRef = "deck_dwarfmerc1";break;} + case 21: {sResRef = "deck_frostg";break;} + case 22: {sResRef = "deck_troll";break;} + case 23: {sResRef = "deck_hobgoblin";break;} + case 24: {sResRef = "deck_goblin";break;} + case 25: {sResRef = "deck_goliron";break;} + case 26: {sResRef = "deck_humanmerc6";break;} + case 27: {sResRef = "deck_pixie";break;} + case 28: {sResRef = "deck_gypsy";break;} + case 29: {sResRef = "deck_hillgiant";break;} + case 30: {sResRef = "deck_ogre";break;} + case 31: {sResRef = "deck_orc";break;} + case 32: {sResRef = "deck_kobold";break;} + case 33: {sResRef = "copy";break;} + case 34: {sResRef = "copy";break;} + } + iTemp = GetHitDice(oPC) + 3; + if (sResRef != "copy") + { + eTemp = EffectSummonCreature(sResRef,VFX_FNF_SUMMON_MONSTER_1); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eTemp,oPC,RoundsToSeconds(iTemp)); + } + else + { + oTemp = CopyObject(oPC,lLoc); + ChangeFaction(oTemp,oPC); + AssignCommand(oTemp,ActionForceFollowObject(oPC)); + DelayCommand(RoundsToSeconds(iTemp),DestroyObject(oTemp)); + } + } + else if (sTag == "miscb050") + { + if (GetObjectType(oTarget) == OBJECT_TYPE_ITEM + || GetIsPC(oTarget)) + { + if (GetIsPC(oTarget)) + oTarget = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND ,oTarget); + if (!GetWeaponRanged(oTarget)) + { + if (!GetWeaponBludgeoning(oTarget)) + { + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyKeen(),oTarget,TurnsToSeconds(10)); + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVisualEffect(ITEM_VISUAL_SONIC),oTarget,TurnsToSeconds(10)); + PlaySound("cb_sw_blade1"); + } + else iTemp = TRUE; + } + else + iTemp = TRUE; + } + else + iTemp = TRUE; + if (iTemp) + FloatingTextStringOnCreature("Invalid target",oPC,FALSE); + } + else if (sTag == "miscb051") + { + Fly(); + } + else if (sTag == "miscb077") + { + eTemp = EffectLinkEffects(EffectAreaOfEffect(AOE_MOB_PROTECTION,"****","miscb077","****"),EffectDamageResistance(DAMAGE_TYPE_COLD,100,100)); + eTemp = EffectLinkEffects(EffectVisualEffect(VFX_DUR_AURA_FIRE),eTemp); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,eTemp,oPC); + } + else if (sTag == "miscc006") + { + PlaySound("as_cv_drums2"); + oTemp = GetFirstObjectInShape(SHAPE_SPHERE,FeetToMeters(120.0),lLoc); + while(GetIsObjectValid(oTemp)) + { + if (GetDistanceBetween(oPC,oTemp) > FeetToMeters(20.0)) + { + if (!WillSave(oTemp,16,SAVING_THROW_TYPE_FEAR,oPC)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectFrightened(),oTemp,RoundsToSeconds(GetSkillRank(SKILL_PERFORM,oPC))); + } + oTemp = GetNextObjectInShape(SHAPE_SPHERE,FeetToMeters(120.0),lLoc); + } + } + else if (sTag == "misca055") + { + oFall = GetNearestObjectByTag("Fall"); + oTrap = GetLocalObject(oFall,"Dest"); + if (GetLocalInt(oTrap,"Safe"))// This point already has a rope. + return; + if (GetDistanceToObject(oFall) <= 5.0) + { + if (GetIsObjectValid(oTrap)) + { + oRope = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_rope_used",GetLocation(oFall),TRUE); + SetLocalInt(oTrap,"Safe",TRUE);// Used in Pit conversation + LinkTransitions(oFall,oTrap); // Mark rope for destruction on dungeon reshuffle. + LinkTransitions(oTrap,oRope); + } + } + } + else if (sTag == "miscc074") + { + if (TouchAttackRanged(oTarget)) + { + oTemp = CopyObject(oTarget,lLoc); + SetLocalInt(oTemp,"MirrorOfOppositionCopy",TRUE); + SetLocalObject(oTarget,"MirrorOfOpposition",oTemp); + AssignCommand(oTemp,ActionAttack(oTarget)); + for (i = 0; i <= 17; i++) + { + SetDroppableFlag(GetItemInSlot(i,oTemp),FALSE); + } + oTemp2 = GetFirstItemInInventory(oTemp); + while(GetIsObjectValid(oTemp2)) + { + SetDroppableFlag(oTemp2,FALSE); + oTemp2 = GetNextItemInInventory(oTemp); + } + TakeGoldFromCreature(GetGold(oTemp),oTemp,TRUE); + } + } + } diff --git a/src/module/nss/mod_act_potion.nss b/src/module/nss/mod_act_potion.nss new file mode 100644 index 0000000..7538026 --- /dev/null +++ b/src/module/nss/mod_act_potion.nss @@ -0,0 +1,40 @@ +#include "inc_item_tools" + +void main() + { + object oItem = GetItemActivated(); + string sTag = GetTag (oItem); + object oPC = GetItemActivator(); + if (sTag == "Antitoxin") + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSavingThrowIncrease(SAVING_THROW_FORT,5,SAVING_THROW_TYPE_POISON),oPC,HoursToSeconds(1)); + //else if (sTag == "potion001") + // AssignCommand(oPC,JumpToLocation(lLoc)); Deactivated + else if (sTag == "potion003") + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSkillIncrease(SKILL_SEARCH,10),oPC,HoursToSeconds(1)); + else if (sTag == "potion004") + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSkillIncrease(SKILL_SPOT,10),oPC,HoursToSeconds(1)); + else if (sTag == "potion005") + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSkillIncrease(SKILL_HIDE,10),oPC,HoursToSeconds(1)); + else if (sTag == "potion006") + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSkillIncrease(SKILL_MOVE_SILENTLY,10),oPC,HoursToSeconds(1)); + else if (sTag == "potion020") + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSkillIncrease(SKILL_PERSUADE,30),oPC,HoursToSeconds(1)); + else if (sTag == "potion026") + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectDamageResistance(DAMAGE_TYPE_COLD,12,12),oPC,HoursToSeconds(1)); + else if (sTag == "potion027") + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL,12,12),oPC,HoursToSeconds(1)); + else if (sTag == "potion028") + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectDamageResistance(DAMAGE_TYPE_FIRE,12,12),oPC,HoursToSeconds(1)); + else if (sTag == "potion029") + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectDamageResistance(DAMAGE_TYPE_ACID,12,12),oPC,HoursToSeconds(1)); + else if (sTag == "potion030") + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectDamageResistance(DAMAGE_TYPE_SONIC,12,12),oPC,HoursToSeconds(1)); + else if (sTag == "potion033") + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAttackIncrease(2,ATTACK_BONUS_MISC),oPC,HoursToSeconds(1)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSavingThrowIncrease(SAVING_THROW_TYPE_ALL,2),oPC,HoursToSeconds(1)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSkillIncrease(SKILL_ALL_SKILLS,2),oPC,HoursToSeconds(1)); + } + else if (sTag == "potion035") + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSpellImmunity(SPELL_DROWN),oPC,HoursToSeconds(1)); + } diff --git a/src/module/nss/mod_act_small.nss b/src/module/nss/mod_act_small.nss new file mode 100644 index 0000000..696aa9b --- /dev/null +++ b/src/module/nss/mod_act_small.nss @@ -0,0 +1,171 @@ +#include "inc_item_tools" +void main() + { + object oItem = GetItemActivated(); + string sTag = GetTag (oItem); + object oPC = GetItemActivator(); + object oTarget = GetItemActivatedTarget(); + location lLoc = GetItemActivatedTargetLocation(); + location lLoc2; + int iType = GetBaseItemType(oItem); + int i,iTemp,iTemp2,iAnim,iPassed,iSkill,iRoll; + effect eTemp,eTemp2,eEffect; + object oTemp; + string sResRef; + talent tTalent; + object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC); + float fTemp; + int iHasEffect = FindEffect(oTarget,EFFECT_TYPE_INVALIDEFFECT,oItem,TRUE); + if (sTag == "food") + { + SetLocalInt(oPC,"Food",TRUE); + if (GetLocalInt(oPC,"Rest")) + ActionRest(); + else + SendMessageToPC(oPC,"Your hunger is abated. Now you only need to find someplace to safe to rest."); + } + else if (sTag == "misca012") + { + if (GetAppearanceType(oTarget) == APPEARANCE_TYPE_GOLEM_FLESH + && GetRacialType(oTarget) == RACIAL_TYPE_CONSTRUCT) + GolemBane(GetItemInSlot(INVENTORY_SLOT_CARMOUR,oTarget)); + } + else if (sTag == "misca022") + { + if (GetAppearanceType(oTarget) == APPEARANCE_TYPE_GOLEM_CLAY + && GetRacialType(oTarget) == RACIAL_TYPE_CONSTRUCT) + GolemBane(GetItemInSlot(INVENTORY_SLOT_CARMOUR,oTarget)); + } + else if (sTag == "misca023") + { + oPC = GetFirstFactionMember(oPC); + while (GetIsObjectValid(oPC)) + { + SetLocalInt(oPC,"Rest",TRUE); + oPC = GetNextFactionMember(oPC); + } + } + else if (sTag == "misca025") + { + if (GetAppearanceType(oTarget) == APPEARANCE_TYPE_GOLEM_STONE + && GetRacialType(oTarget) == RACIAL_TYPE_CONSTRUCT) + GolemBane(GetItemInSlot(INVENTORY_SLOT_CARMOUR,oTarget)); + } + else if (sTag == "misca027") + { + if (GetAppearanceType(oTarget) == APPEARANCE_TYPE_GOLEM_IRON + && GetRacialType(oTarget) == RACIAL_TYPE_CONSTRUCT) + GolemBane(GetItemInSlot(INVENTORY_SLOT_CARMOUR,oTarget)); + } + else if (sTag == "misca031") + { + if ((GetAppearanceType(oTarget) == APPEARANCE_TYPE_GOLEM_FLESH + || GetAppearanceType(oTarget) == APPEARANCE_TYPE_GOLEM_CLAY) + && GetRacialType(oTarget) == RACIAL_TYPE_CONSTRUCT) + GolemBane(GetItemInSlot(INVENTORY_SLOT_CARMOUR,oTarget)); + } + else if (sTag == "misca034") + { + oTarget = GetFirstObjectInShape(SHAPE_SPHERE,5.0,lLoc,TRUE,OBJECT_TYPE_ALL); + while(GetIsObjectValid(oTarget)) + { + iTemp = GetReflexAdjustedDamage(d6(5),oTarget,16,SAVING_THROW_TYPE_SONIC); + if (iTemp > 0) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(iTemp,DAMAGE_TYPE_SONIC),oTarget); + if (!FortitudeSave(oTarget,16,SAVING_THROW_TYPE_SONIC)) + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeaf(),oTarget); + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE,5.0,lLoc,TRUE,OBJECT_TYPE_ALL); + } + } + else if (sTag == "misca050") + { + if ((GetAppearanceType(oTarget) == APPEARANCE_TYPE_GOLEM_FLESH + || GetAppearanceType(oTarget) == APPEARANCE_TYPE_GOLEM_CLAY + || GetAppearanceType(oTarget) == APPEARANCE_TYPE_GOLEM_STONE + || GetAppearanceType(oTarget) == APPEARANCE_TYPE_GOLEM_IRON + || GetAppearanceType(oTarget) == APPEARANCE_TYPE_GOLEM_STONE) + && GetRacialType(oTarget) == RACIAL_TYPE_CONSTRUCT) + GolemBane(GetItemInSlot(INVENTORY_SLOT_CARMOUR,oTarget)); + } + else if (sTag == "miscb004") + { + eTemp = EffectVisualEffect(VFX_IMP_RESTORATION_GREATER); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eTemp,lLoc,3.0); + eTemp2 = EffectVisualEffect(VFX_IMP_PULSE_HOLY); + eTemp2 = EffectLinkEffects(eTemp2,EffectAttackIncrease(2)); + eTemp2 = EffectLinkEffects(eTemp2,EffectSkillIncrease(SKILL_ALL_SKILLS,2)); + eTemp2 = EffectLinkEffects(eTemp2,EffectSavingThrowIncrease(SAVING_THROW_ALL,2)); + oTemp = GetFirstFactionMember(oPC); + while (GetIsObjectValid(oTemp)) + { + if(GetDistanceBetween(oPC,oTemp) <= FeetToMeters(30.0)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eTemp2,oTemp,HoursToSeconds(1)); + oTemp = GetNextFactionMember(oPC); + } + } + else if (sTag == "miscb019") + { + CreateItemOnObject("murlyndssoup",oTarget); + } + else if (sTag == "miscb033") + { + oTemp = GetFirstFactionMember(oPC); + while (GetIsObjectValid(oTemp)) + { + AssignCommand(oTemp,JumpToLocation(lLoc)); + oTemp = GetNextFactionMember(oPC); + } + } + // Ioun Stones + else if (sTag == "misca063") + { + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectACIncrease(1,AC_DEFLECTION_BONUS),oPC)); + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectVisualEffect(VFX_DUR_IOUNSTONE_RED),oPC)); + } + else if (sTag == "misca079" + || sTag == "miscb038" + || sTag == "miscb047") + { + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectVisualEffect(VFX_DUR_IOUNSTONE),oPC)); + SetLocalInt(oSkin,"IounStones",TRUE); + SetLocalInt(oSkin,sTag,1); + } + else if (sTag == "miscb007") + { + if (!GetHasFeat(FEAT_ALERTNESS,oPC)) + { + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectLinkEffects(EffectSkillIncrease(SKILL_LISTEN,2),EffectSkillIncrease(SKILL_SPOT,2)),oPC)); + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectVisualEffect(VFX_DUR_IOUNSTONE_BLUE),oPC)); + } + else + SendMessageToPC(oPC,"This item will not work for you."); + } + else if (sTag == "miscb008") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectLinkEffects(EffectAbilityIncrease(ABILITY_DEXTERITY,2),EffectVisualEffect(VFX_DUR_IOUNSTONE_RED)),oPC)); + else if (sTag == "miscb009") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectLinkEffects(EffectAbilityIncrease(ABILITY_WISDOM,2),EffectVisualEffect(VFX_DUR_IOUNSTONE_BLUE)),oPC)); + else if (sTag == "miscb010") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectLinkEffects(EffectAbilityIncrease(ABILITY_STRENGTH,2),EffectVisualEffect(VFX_DUR_IOUNSTONE_BLUE)),oPC)); + else if (sTag == "miscb011") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectLinkEffects(EffectAbilityIncrease(ABILITY_CONSTITUTION,2),EffectVisualEffect(VFX_DUR_IOUNSTONE_RED)),oPC)); + else if (sTag == "miscb012") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectLinkEffects(EffectAbilityIncrease(ABILITY_CHARISMA,2),EffectVisualEffect(VFX_DUR_IOUNSTONE_GREEN)),oPC)); + else if (sTag == "miscb013") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectLinkEffects(EffectAbilityIncrease(ABILITY_INTELLIGENCE,2),EffectVisualEffect(VFX_DUR_IOUNSTONE_BLUE)),oPC)); + else if (sTag == "miscb072") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectLinkEffects(EffectLinkEffects(EffectLinkEffects(EffectAttackIncrease(1,ATTACK_BONUS_MISC),EffectSavingThrowIncrease(SAVING_THROW_ALL,1)),EffectSkillIncrease(SKILL_ALL_SKILLS,1)),EffectVisualEffect(VFX_DUR_IOUNSTONE_GREEN)),oPC)); + else if (sTag == "miscb074") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectLinkEffects(EffectRegenerate(1,60.0),EffectVisualEffect(VFX_DUR_IOUNSTONE_YELLOW)),oPC)); + else if (sTag == "miscb073") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectLinkEffects(eTemp = EffectSpellLevelAbsorption(4,20),EffectVisualEffect(VFX_DUR_IOUNSTONE_BLUE)),oPC); + CreateItemOnObject("misca001",oPC); + } + else if (sTag == "miscc028") + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectLinkEffects(EffectSpellLevelAbsorption(8,50),EffectVisualEffect(VFX_DUR_IOUNSTONE_GREEN)),oPC); + CreateItemOnObject("misca001",oPC); + } + } diff --git a/src/module/nss/mod_act_thin.nss b/src/module/nss/mod_act_thin.nss new file mode 100644 index 0000000..6cc289d --- /dev/null +++ b/src/module/nss/mod_act_thin.nss @@ -0,0 +1,291 @@ +#include "inc_item_tools" +void main() + { + object oItem = GetItemActivated(); + string sTag = GetTag (oItem); + object oPC = GetItemActivator(); + object oTarget = GetItemActivatedTarget(); + location lLoc = GetItemActivatedTargetLocation(); + location lLoc2; + int iType = GetBaseItemType(oItem); + int i,iTemp,iTemp2,iAnim,iPassed,iSkill,iRoll; + effect eTemp,eTemp2; + object oTemp; + string sResRef; + talent tTalent; + float fTemp; + if (sTag == "thievestools" + || sTag == "mw_thievestools") + { + if (sTag == "mw_thievestools") + iTemp = 2; + else + iTemp = 0; + ClearAllActions(); + if (GetDistanceBetween(oTarget,oPC) >= 1.0) + ActionMoveToObject(oTarget); + ActionDoCommand(ThiefTools(oPC,oTarget,iTemp)); + } + else if (GetStringLeft(sTag,4) == "misc") + { + if (sTag == "misca004") + { + CreateObject(OBJECT_TYPE_PLACEABLE,"plc_tree",lLoc); + } + else if (sTag == "misca006") + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSkillIncrease(SKILL_HIDE,5),oPC,HoursToSeconds(1)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSkillIncrease(SKILL_MOVE_SILENTLY,5),oPC,HoursToSeconds(1)); + } + else if (sTag == "misca007") + { + oTemp = CreateObject(OBJECT_TYPE_CREATURE,"nw_raptor001",lLoc); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectDominated()),oTemp); + } + else if (sTag == "misca009") + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSkillIncrease(SKILL_HIDE,10),oPC,HoursToSeconds(1)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSkillIncrease(SKILL_PERSUADE,10),oPC,HoursToSeconds(1)); + } + else if (sTag == "misca013") + { + int iTemp = d100(); + if (iTemp <= 30) sResRef = "bagoftricks_bat"; + else if (iTemp <= 75) sResRef = "bagoftricks_rat"; + else sResRef = "bagoftricks_badg"; + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSummonCreature(sResRef),oPC,HoursToSeconds(1)); + } + else if (sTag == "misca014") + { + if ((GetAppearanceType(oTarget) == APPEARANCE_TYPE_ELEMENTAL_WATER + || GetAppearanceType(oTarget) == APPEARANCE_TYPE_ELEMENTAL_WATER_ELDER) + && GetRacialType(oTarget) == RACIAL_TYPE_ELEMENTAL) + { + iTemp = FortitudeSave(oTarget,18); + if (!iTemp) + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),oTarget); + else if (iTemp == 1) + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(d6(5)),oTarget); + } + } + else if (sTag == "misca024") + { + AssignCommand(oPC,PlaySound("as_cv_flute1")); + iTemp = d100(); + if (iTemp <= 80) {sResRef = "nw_ratdire001"; iTemp = d6(3);} + else {sResRef = "nw_rat"; iTemp = d6(6);} + if (SkillCheck(SKILL_PERFORM,10,oPC,TRUE)) iTemp2 = STANDARD_FACTION_DEFENDER; + else iTemp2 = STANDARD_FACTION_HOSTILE; + for (i = 1;i<=iTemp;i++) + { + oTemp = CreateObject(OBJECT_TYPE_CREATURE,sResRef,GetLocation(oPC)); + ChangeToStandardFaction(oTemp,iTemp2); + if (iTemp == STANDARD_FACTION_HOSTILE) + AssignCommand(oTemp,ActionAttack(oPC)); + AssignCommand(oTemp,DelayCommand(RoundsToSeconds(20),DestroyObject(oTemp))); + } + } + else if (sTag == "misca029") + { + AssignCommand(oPC,PlaySound("as_cv_flute2")); + if (GetHasSkill(SKILL_PERFORM,oPC)) + { + iTemp = 1; + oTemp = GetNearestObjectToLocation(OBJECT_TYPE_CREATURE,lLoc,iTemp); + while (GetIsObjectValid(oTemp)) + { + iTemp2 = GetRacialType(oTemp); + if (iTemp != RACIAL_TYPE_CONSTRUCT + && iTemp != RACIAL_TYPE_ELEMENTAL + && iTemp != RACIAL_TYPE_UNDEAD + && !GetIsPC(oTemp) + && !GetIsInCombat(oTemp)) + { + AssignCommand(oTemp,ClearAllActions()); + AssignCommand(oTemp,ActionMoveToLocation(lLoc,TRUE)); + } + iTemp +=1; + oTemp = GetNearestObjectToLocation(OBJECT_TYPE_CREATURE,lLoc,iTemp); + } + } + else + { + FloatingTextStringOnCreature("Maybe you should learn how to play.",oPC,FALSE); + } + } + else if (sTag == "misca039") + { + AssignCommand(oPC,PlaySound("as_cv_eulpipe1")); + if (!GetHasSkill(SKILL_PERFORM,oPC)) + { + lLoc = GetLocation(oPC); + iTemp = d20(); + } + else + iTemp = GetSkillRank(SKILL_PERFORM,oPC) + d20(); + eTemp = EffectDarkness(); + eTemp = EffectLinkEffects(eTemp,EffectAreaOfEffect(AOE_PER_DARKNESS)); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eTemp,lLoc,RoundsToSeconds(iTemp)); + } + + else if (sTag == "misca053") + { + int iTemp = d100(); + if (iTemp <= 60) sResRef = "bagoftricks_wolf"; + else if (iTemp <= 75) sResRef = "bagoftricks_boar"; + else sResRef = "bagoftricks_blac"; + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSummonCreature(sResRef),oPC,HoursToSeconds(1)); + } + else if (sTag == "misca054") + { + AssignCommand(oPC,PlaySound("as_cv_bell1")); + if (GetLocked(oTarget) + && !GetLockKeyRequired(oTarget) + && !GetPlotFlag(oTarget)) + SetLocked(oTarget,FALSE); + else + SendMessageToPC(oPC,"Chime failed to open this door."); + } + else if (sTag == "misca064") + { + if (FindEffect(oTarget,EFFECT_TYPE_POISON,OBJECT_INVALID,TRUE)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_IMP_HEALING_M),oTarget,1.0); + else if (FindEffect(oTarget,EFFECT_TYPE_DISEASE,OBJECT_INVALID,TRUE)) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_IMP_HEALING_M),oTarget,1.0); + else + { + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(d8()+5),oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_IMP_HEALING_M),oTarget,1.0); + } + } + else if (sTag == "misca067") + { + if (!FindEffect(oTarget,EFFECT_TYPE_PETRIFY,OBJECT_INVALID,TRUE)) + { + AssignCommand(oPC,ActionCastSpellAtObject(SPELL_STONESKIN,oTarget,METAMAGIC_ANY,TRUE,13,PROJECTILE_PATH_TYPE_DEFAULT,TRUE)); + } + } + else if (sTag == "misca082") + { + eTemp = EffectLinkEffects(EffectDarkness(),EffectAreaOfEffect(AOE_PER_DARKNESS)); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eTemp,lLoc,RoundsToSeconds(5)); + } + else if (sTag == "misca084") + { + CreateItemOnObject("murlyndssoup",oTarget); + } + else if (sTag == "misca091") + { + AssignCommand(oPC,PlaySound("as_cv_eulpipe2")); + if (GetAlignmentGoodEvil(oPC) == ALIGNMENT_NEUTRAL) + return; + effect eAOE = EffectAreaOfEffect(AOE_MOB_CIRCGOOD); + effect eVis = EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MINOR); + effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + effect eVis2 = EffectVisualEffect(VFX_IMP_GOOD_HELP); + if (GetAlignmentGoodEvil(oPC) == ALIGNMENT_EVIL) + { + eAOE = EffectAreaOfEffect(AOE_MOB_CIRCEVIL); + eVis = EffectVisualEffect(VFX_DUR_PROTECTION_EVIL_MINOR); + eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE); + eVis2 = EffectVisualEffect(VFX_IMP_EVIL_HELP); + } + effect eLink = EffectLinkEffects(eAOE, eVis); + eLink = EffectLinkEffects(eLink, eDur); + int nDuration = GetSkillRank(SKILL_PERFORM,oPC); + //Make sure duration does no equal 0 + if (nDuration < 1) + nDuration = 1; + //Fire cast spell at event for the specified target + SignalEvent(oPC, EventSpellCastAt(OBJECT_SELF, SPELL_MAGIC_CIRCLE_AGAINST_EVIL, FALSE)); + + //Create an instance of the AOE Object using the Apply Effect function + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oPC); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, TurnsToSeconds(nDuration)); + } + else if (sTag == "misca093") + { + int iTemp = d100(); + if (iTemp <= 30) sResRef = "bagoftricks_jag"; + else if (iTemp <= 60) sResRef = "bagoftricks_lion"; + else if (iTemp <= 90) sResRef = "bagoftricks_brow"; + else if (iTemp <= 90) sResRef = "bagoftricks_dwol"; + else sResRef = "bagoftricks_pola"; + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSummonCreature(sResRef),oPC,HoursToSeconds(1)); + } + else if (sTag == "misca059" + || sTag == "miscb022" + || sTag == "miscb027" + || sTag == "miscb028" + || sTag == "miscb032" + || sTag == "miscb045" + || sTag == "miscb055" + || sTag == "miscb066" + || sTag == "miscb067" + || sTag == "miscb075" + || sTag == "miscb098" + ) + { + FigurineWonderousPower(oPC,oItem,sTag,lLoc); + } + else if (sTag == "miscb037") + { + PlaySound("as_cv_pump1"); + AssignCommand(oPC,HornOfBlasting(lLoc)); + } + else if (sTag == "miscb040") + { + if (!GetHasSkill(SKILL_PERFORM,oPC)) + { + SendMessageToPC(oPC,"You can't hold a tune in a bucket. Well, maybe you can, but you don't have a bucket."); + } + AssignCommand(oPC,PlaySound("as_cv_eulpipe2")); + AssignCommand(oPC,PipesOfPain()); + } + else if (sTag == "miscb056") + { + AssignCommand(oPC,PlaySound("as_cv_belltower1")); + oTemp = GetFirstObjectInShape(SHAPE_SPHERE,30.0,lLoc,FALSE); + while(GetIsObjectValid(oTemp)) + { + if (!WillSave(oTemp,15,SAVING_THROW_TYPE_MIND_SPELLS)) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSilence(),oTemp,RoundsToSeconds(10)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_IMP_SILENCE),oTemp,3.0); + } + oTemp = GetNextObjectInShape(SHAPE_SPHERE,30.0,lLoc,FALSE); + } + } + else if (sTag == "miscc1039") + { + AssignCommand(oPC,Miscc039(d4(2)+2,sTag,TRUE)); + } + else if (sTag == "miscc2039") + { + if (GetLevelByClass(CLASS_TYPE_BARD) >= 2 + || GetLevelByClass(CLASS_TYPE_CLERIC) + || GetLevelByClass(CLASS_TYPE_DRUID) + || GetLevelByClass(CLASS_TYPE_PALADIN) >= 4 + || GetLevelByClass(CLASS_TYPE_RANGER) >= 4 + || GetLevelByClass(CLASS_TYPE_SORCERER) + || GetLevelByClass(CLASS_TYPE_WIZARD)) + iTemp = TRUE; + else + iTemp = FALSE; + AssignCommand(oPC,Miscc039(d4(2)+1,sTag,iTemp)); + } + else if (sTag == "miscc3039" || sTag == "miscc4039") + { + if (GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL) + || GetHasSkill(SKILL_PERFORM)) + iTemp2 = TRUE; + else + iTemp2 = FALSE; + if (sTag == "miscc3039") + iTemp = d4(2); + else + iTemp = d4()+1; + AssignCommand(oPC,Miscc039(iTemp,sTag,iTemp2)); + } + } + } diff --git a/src/module/nss/mod_act_weapons.nss b/src/module/nss/mod_act_weapons.nss new file mode 100644 index 0000000..260852d --- /dev/null +++ b/src/module/nss/mod_act_weapons.nss @@ -0,0 +1,63 @@ +#include "inc_mod_constant" +//#include "inc_misc_tools" + + +void main() + { + object oItem = GetItemActivated(); + string sTag = GetTag (oItem); + object oPC = GetItemActivator(); + object oTarget = GetItemActivatedTarget(); + location lLoc = GetItemActivatedTargetLocation(); + int iAttack,iAC,iAbility,iRace; + if (sTag == "rodw111") + { + SetPlotFlag(oItem,FALSE); + DestroyObject(oItem); + } + else if (sTag == "spear601") + { + AssignCommand(oPC,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectLinkEffects(EffectDamage(GetReflexAdjustedDamage(d6(5),oTarget,14,SAVING_THROW_TYPE_ELECTRICITY,oPC),DAMAGE_TYPE_ELECTRICAL),EffectBeam(VFX_BEAM_LIGHTNING,oPC,BODY_NODE_HAND)),oTarget,3.0)); + DestroyObject(oItem); + } + else if (sTag == "dagger602") + { + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitCastSpell(SPELL_POISON,4),oItem,12.0); + } + else if (sTag == "rapier601") + { + if (GetRacialType(oTarget) != RACIAL_TYPE_CONSTRUCT + && GetRacialType(oTarget) != RACIAL_TYPE_ELEMENTAL + && GetRacialType(oTarget) != RACIAL_TYPE_OOZE + && GetRacialType(oTarget) != RACIAL_TYPE_UNDEAD) + AssignCommand(oPC,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(ABILITY_CONSTITUTION,d6()),oTarget,HoursToSeconds(1))); + } + else if (sTag == "whammer602") + { + iAC = GetAC(oTarget); + iAbility = GetAbilityModifier(ABILITY_DEXTERITY,oPC); + iAttack = GetBaseAttackBonus(oPC); + if (d20() + iAttack + iAbility >= iAC) + { + if (GetRacialType(oTarget) == RACIAL_TYPE_GIANT) + AssignCommand(oPC,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(d8(3),DAMAGE_TYPE_BLUDGEONING,DAMAGE_POWER_PLUS_THREE),oTarget)); + else + AssignCommand(oPC,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(d8(2),DAMAGE_TYPE_BLUDGEONING,DAMAGE_POWER_PLUS_THREE),oTarget)); + AssignCommand(oPC,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_FNF_PWKILL),oTarget)); + } + else + FloatingTextStringOnCreature("Hammer Missed",oPC,FALSE); + } + else if (GetLocalInt(oItem,"SpecialAmmo")) + { + FloatingTextStringOnCreature("This weapon automatically improves the ammunition fired from it.",oPC,FALSE); + DelayCommand(1.0,FloatingTextStringOnCreature("Ownership Set and Weapon Stats Stored.",oPC,FALSE)); + StoreCampaignObject(CAMPAIGN,GetName(oPC),oItem,oPC); + } + else if (GetWeaponRanged(oItem)) + { + FloatingTextStringOnCreature("Retrieving stored missile weapon from DB.",oPC,FALSE); + RetrieveCampaignObject(CAMPAIGN,GetName(oPC),GetLocation(oPC),oPC,oPC); + DestroyObject(oItem); + } + } diff --git a/src/module/nss/mod_act_wiz.nss b/src/module/nss/mod_act_wiz.nss new file mode 100644 index 0000000..cdaf48a --- /dev/null +++ b/src/module/nss/mod_act_wiz.nss @@ -0,0 +1,97 @@ +#include "inc_item_tools" +void main() + { + object oItem = GetItemActivated(); + string sTag = GetTag (oItem); + object oPC = GetItemActivator(); + object oTarget = GetItemActivatedTarget(); + object oTemp; + effect eTemp,eTemp2; + int iTemp; + string sResRef; + if (sTag == "rod101") + { + int iTemp = Random(14); + oTemp = GetItemInSlot(iTemp,oTarget); + if (StringToInt(GetID(oTemp)) > 100 && d20() < 19) + { + DestroyObject(oTemp); + DestroyObject(oItem); + } + } + else if (sTag == "rod103") + { + eTemp = EffectSummonCreature("bagoftricks_pola",VFX_FNF_SUMMON_MONSTER_3); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eTemp , oPC, HoursToSeconds(24)); + } + else if (sTag == "rod104") + { + eTemp = EffectDamageImmunityIncrease(DAMAGE_TYPE_FIRE,100); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eTemp , oPC, HoursToSeconds(24)); + } + else if (sTag == "rod105") + { + if (!FortitudeSave(oTarget,14,SAVING_THROW_TYPE_NEGATIVE,oPC)) + { + eTemp = EffectAbilityDecrease(ABILITY_STRENGTH,d4()); + eTemp2 = EffectAbilityDecrease(ABILITY_CONSTITUTION,d4()); + EffectLinkEffects(eTemp,eTemp2); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eTemp , oTarget, HoursToSeconds(24)); + } + } + else if (sTag == "rod109") + { + oPC = GetFirstFactionMember(oPC); + while (GetIsObjectValid(oPC)) + { + SetPanelButtonFlash(oPC,PANEL_BUTTON_REST,FALSE); + SetLocalInt(oPC,"Rest",TRUE); // Allows PC to rest 1 time in dungeon. + oPC = GetNextFactionMember(oPC); + } + } + else if (sTag == "rod111") + { + oTemp = GetItemPossessedBy(oPC,"rodw111"); + if (!GetIsObjectValid(oTemp)) + { + oTemp = CreateItemOnObject("rodw111",oPC); + SetPlotFlag(oTemp,TRUE); // Prevents selling of the summoned weapon. + AssignCommand(oPC,ActionEquipItem(oTemp,INVENTORY_SLOT_RIGHTHAND)); + } + else + DestroyObject(oTemp); + } + else if (sTag == "rod114") + { + oTemp = GetItemPossessedBy(oPC,"rodw114"); + if (!GetIsObjectValid(oTemp)) + { + oTemp = CreateItemOnObject("rodw1114",oPC); + SetPlotFlag(oTemp,TRUE); // Prevents selling of the summoned weapon. + AssignCommand(oPC,ActionEquipItem(oTemp,INVENTORY_SLOT_RIGHTHAND)); + SetLocalInt(oPC,"RoLM",1); + } + else + { + DestroyObject(oTemp); + iTemp = GetLocalInt(oPC,"RoLM"); + switch(iTemp) + { + case 1: {sResRef = "rodw2114";break;} + case 2: {sResRef = "rodw3114";break;} + case 3: {sResRef = "rodw4114";break;} + case 4: {break;} + break; + }; + if (sResRef != "") + { + oTemp = CreateItemOnObject(sResRef,oPC); + SetPlotFlag(oTemp,TRUE); // Prevents selling of the summoned weapon. + AssignCommand(oPC,ActionEquipItem(oTemp,INVENTORY_SLOT_RIGHTHAND)); + if (iTemp == 4) iTemp = 0; + else iTemp += 1; + SetLocalInt(oPC,"RoLM",iTemp); + } + } + } + } diff --git a/src/module/nss/mod_aquire.nss b/src/module/nss/mod_aquire.nss new file mode 100644 index 0000000..9556862 --- /dev/null +++ b/src/module/nss/mod_aquire.nss @@ -0,0 +1,170 @@ +// This will replace oItem with a new item. +object ReplaceItem(object oOwner, object oItem, string sNewItemResRef); + +void main() + { + int i; + object oItem = GetModuleItemAcquired(); + object oOwner = GetModuleItemAcquiredBy(); + object oFrom = GetModuleItemAcquiredFrom(); + object oPC; + int iStack = GetModuleItemAcquiredStackSize(); + string sTag = GetTag(oItem); + string sName = GetName(oItem); + string sResRef = GetResRef(oItem); + object oHench,oTemp; + if (GetIsPC(oOwner)) + { + // Notify party of aquiring. + if (!GetLocalInt(GetArea(oOwner),"Town") && !GetIsPC(oFrom)) + { + oPC = GetFirstFactionMember(oOwner); + while(GetIsObjectValid(oPC)) + { + if (oPC != oOwner) + { + if (!GetIsObjectValid(oItem)) // An object was aquired but is no longer valid assume gold since I havent destroyed any objects. + SendMessageToPC(oPC, GetName(oOwner) + " has acquired " +IntToString(iStack) + " Gold."); + else if (!GetIdentified(oItem)) + SendMessageToPC(oPC, GetName(oOwner) + " has acquired a magic item."); + else if (iStack > 1) + SendMessageToPC(oPC, GetName(oOwner) + " has acquired " +IntToString(iStack) + " " + sName); + else + SendMessageToPC(oPC, GetName(oOwner) + " has acquired a " + sName); + } + oPC = GetNextFactionMember(oOwner); + } + } + // Handle aquire effects. + if (sTag == "weeksrations") + { + DestroyObject(oItem); + for (i = 1; i<= 7; i++) + { + oItem = CreateItemOnObject("food",oOwner); + } + } + else if (sTag == "10sunrods") + { + DestroyObject(oItem); + for (i = 1; i<= 10; i++) + { + CreateItemOnObject("sunrod",oOwner); + } + } + else if (sTag == "10torches") + { + DestroyObject(oItem); + for (i = 1; i<= 10; i++) + { + oItem = CreateItemOnObject("it_torch002",oOwner); + } + } + else if (sTag == "misca059" + || sTag == "miscb022" + || sTag == "miscb027" + || sTag == "miscb028" + || sTag == "miscb032" + || sTag == "miscb045" + || sTag == "miscb055" + || sTag == "miscb066" + || sTag == "miscb067" + || sTag == "miscb075" + || sTag == "miscb098" + ) + { + oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN ,oOwner,i=1); + while (GetIsObjectValid(oHench)) + { + if (GetTag(oHench) == sTag) + { + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_IMP_UNSUMMON),GetLocation(oHench),5.0); + RemoveHenchman(oOwner,oHench); + SetImmortal(oHench,FALSE); + SetPlotFlag(oHench,FALSE); + DelayCommand(3.0,DestroyObject(oHench)); + } + oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN ,oOwner,i+=1); + } + } + //LuckStone + else if(sTag == "miscb031") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectSavingThrowIncrease(SAVING_THROW_ALL,1)),oOwner)); + // Crystal Balls + else if (sTag == "miscc041") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectLinkEffects(EffectSkillIncrease(SKILL_APPRAISE,10),EffectSkillIncrease(SKILL_PERSUADE,10))),oOwner)); + else if (sTag == "miscc038") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectLinkEffects(EffectLinkEffects(EffectSkillIncrease(SKILL_APPRAISE,5),EffectSkillIncrease(SKILL_PERSUADE,5)),EffectSeeInvisible())),oOwner)); + else if (sTag == "miscc032") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectLinkEffects(EffectSkillIncrease(SKILL_APPRAISE,5),EffectSkillIncrease(SKILL_PERSUADE,5))),oOwner)); + else if (sTag == "miscc057") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectLinkEffects(EffectSkillIncrease(SKILL_APPRAISE,15),EffectSkillIncrease(SKILL_PERSUADE,15))),oOwner)); + else if (sTag == "miscc063") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectLinkEffects(EffectLinkEffects(EffectSkillIncrease(SKILL_APPRAISE,5),EffectSkillIncrease(SKILL_PERSUADE,5)),EffectTrueSeeing())),oOwner)); + // End Crystal Balls + else if (sTag == "miscc099") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectLinkEffects(EffectSkillIncrease(SKILL_APPRAISE,15),EffectSkillIncrease(SKILL_PERSUADE,15))),oOwner)); + // Dwarven Thrower + else if (sTag == "whammer601") + { + if (GetRacialType(oOwner) == RACIAL_TYPE_DWARF) + ReplaceItem(oOwner,oItem,"whammer602"); + } + else if (sTag == "whammer602") + { + if (GetRacialType(oOwner) != RACIAL_TYPE_DWARF) + ReplaceItem(oOwner,oItem,"whammer601"); + } + // End Dwarven Thrower + // Belt of Dwarven Kind + else if (sTag == "miscb046") + { + if (GetRacialType(oOwner) == RACIAL_TYPE_DWARF) + ReplaceItem(oOwner,oItem,"miscb046b"); + } + else if (sTag == "miscb046b") + { + if (GetRacialType(oOwner) != RACIAL_TYPE_DWARF) + ReplaceItem(oOwner,oItem,"miscb046"); + } + // End Belt of Dwarven Kind + // Monks Belt + else if (sTag == "miscb016") + { + if (GetLevelByClass(CLASS_TYPE_MONK,oOwner)) + ReplaceItem(oOwner,oItem,"miscb016b"); + } + else if (sTag == "miscb016b") + { + if (!GetLevelByClass(CLASS_TYPE_MONK,oOwner)) + ReplaceItem(oOwner,oItem,"miscb016"); + } + // Monks Belt + else if (sTag == "ssword602") + { + if (GetLocalInt(oItem,"iUses") < 1 + && GetObjectType(oFrom) == OBJECT_TYPE_STORE) + { + SetLocalInt(oItem,"iUses",Random(6)); + } + } + else if (sTag == "miscb021") + { + if (!GetLevelByClass(CLASS_TYPE_BARD,oOwner) + && !GetLevelByClass(CLASS_TYPE_SORCERER,oOwner) + && !GetLevelByClass(CLASS_TYPE_WIZARD,oOwner)) + { + if (!GetIsSkillSuccessful(oOwner,SKILL_USE_MAGIC_DEVICE,20)) + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(d6(5),DAMAGE_TYPE_NEGATIVE),oOwner)); + } + } + } + } + +object ReplaceItem(object oOwner, object oItem, string sNewItemResRef) + { + object oTemp = CreateItemOnObject(sNewItemResRef,oOwner); + SetIdentified(oTemp,GetIdentified(oItem)); + DestroyObject(oItem); + return oTemp; + } diff --git a/src/module/nss/mod_bleed.nss b/src/module/nss/mod_bleed.nss new file mode 100644 index 0000000..e32fb9e --- /dev/null +++ b/src/module/nss/mod_bleed.nss @@ -0,0 +1,18 @@ +#include "inc_misc_tools" +void main() + { + object oPC = GetLastPlayerDying(); + int iHP = GetCurrentHitPoints(oPC); + GeneratePCLootBag(oPC); + SetLocalInt(oPC,"HP",iHP); + PlayVoiceChat(VOICE_CHAT_NEARDEATH ,oPC); + if (iHP == 0) + SetLocalInt(oPC,"Disabled",TRUE); + if (iHP < 0) + SetLocalInt(oPC,"Unstable",TRUE); + if (!GetLocalInt(oPC,"Minus10Rule")) + { + SetLocalInt(oPC,"Minus10Rule",TRUE); + DelayCommand(RoundsToSeconds(1),AssignCommand(oPC,ExecuteScript("minus10rule",oPC))); + } + } diff --git a/src/module/nss/mod_client_enter.nss b/src/module/nss/mod_client_enter.nss new file mode 100644 index 0000000..de90cbd --- /dev/null +++ b/src/module/nss/mod_client_enter.nss @@ -0,0 +1,49 @@ +#include "inc_misc_tools" +void PHB (object oPC); + +void NotifyOfNewPlayer(object oEntering); + +void main() + { + object oPC = GetEnteringObject(); + + AddJournalQuestEntry("JRNL_XPCHART", 1, oPC, FALSE, FALSE, FALSE); + AddJournalQuestEntry("JRNL_LA_BUYOFF", 1, oPC, FALSE, FALSE, FALSE); + AddJournalQuestEntry("JRNL_PRC8", 1, oPC, FALSE, FALSE, FALSE); + + + if (!GetXP(oPC)) + { + StartingGold(oPC); + } + PHB(oPC); + NotifyOfNewPlayer(oPC); + } + +void PHB (object oPC) + { + string sString; + int i; + for (i = 0; i<=13; i+=1) + { + sString = "Category" + Convert(i); + AddJournalQuestEntry(sString,1,oPC,FALSE); + } + } + +void NotifyOfNewPlayer(object oEntering) + { + object oPC = GetFirstPC(); + while(GetIsObjectValid(oPC)) + { + if (oPC == GetFactionLeader(oPC)) + { + if (oPC != oEntering) + FloatingTextStringOnCreature(GetName(oEntering) + " is available. Level:" +IntToString(GetHitDice(oEntering)) ,oPC,FALSE); + } + if (GetIsDM(oPC)) + AssignCommand(oPC, PlaySound("as_cv_bell1")); + oPC = GetNextPC(); + } + SendMessageToAllDMs("A new player, "+GetName(oEntering)+" is in " + GetName(GetArea(oEntering))); + } diff --git a/src/module/nss/mod_death.nss b/src/module/nss/mod_death.nss new file mode 100644 index 0000000..2aaea79 --- /dev/null +++ b/src/module/nss/mod_death.nss @@ -0,0 +1,24 @@ +#include "inc_misc_tools" +void main() + { + object oPC = GetLastPlayerDied(); + if (!GetIsObjectValid(GetItemPossessedBy(oPC,"DeathToken"))) + SetItemCursedFlag(CreateItemOnObject("deathtoken",oPC),TRUE); + object oLuckBlade = GetItemPossessedBy(oPC,"ssword602"); + if (GetIsObjectValid(oLuckBlade) && GetLocalInt(oLuckBlade,"iUses") > 0) + { + SendMessageToAllDMs(GetName(oPC)+ " " + GetPCPlayerName(oPC) + " " + "has died."); + PopUpDeathGUIPanel(oPC,TRUE,TRUE,TRUE,"You have died wait for a fellow adventurer to Raise you from the dead. Hitting respawn will send you back to town and lower the remaining uses on your luck blade."); + } + else + { + object oBag = GetLocalObject(oPC,"LootBag"); + if (GetDistanceBetween(oPC,oBag) > 1.0 + || GetArea(oPC) != GetArea(oBag) + || !GetIsObjectValid(oBag)) + oBag = GeneratePCLootBag(oPC,TRUE); + AssignCommand(oBag, LootPC(oPC,oBag)); + SendMessageToAllDMs(GetName(oPC)+ " " + GetPCPlayerName(oPC) + " " + "has died."); + PopUpDeathGUIPanel(oPC,TRUE,TRUE,TRUE,"You have died make a new character or wait for a fellow adventurer to Raise you from the dead. Hitting respawn will start you over as a level 1 character."); + } + } diff --git a/src/module/nss/mod_heartbeat.nss b/src/module/nss/mod_heartbeat.nss new file mode 100644 index 0000000..4a9f05f --- /dev/null +++ b/src/module/nss/mod_heartbeat.nss @@ -0,0 +1,10 @@ +void main() + { + object oPC = GetFirstPC(); + while (GetIsObjectValid(oPC)) // PC Heartbeats. + { + if (!GetIsDM(oPC)) + ExecuteScript("pc_heartbeat",oPC); + oPC = GetNextPC(); + } + } diff --git a/src/module/nss/mod_levelup.nss b/src/module/nss/mod_levelup.nss new file mode 100644 index 0000000..6ffc7ca --- /dev/null +++ b/src/module/nss/mod_levelup.nss @@ -0,0 +1,9 @@ + +#include "x0_i0_henchman" +void main() +{ + ExecuteScript("prc_levelup", OBJECT_SELF); + + object oPC = GetPCLevellingUp(); + LevelUpXP1Henchman(oPC); +} diff --git a/src/module/nss/mod_onactivate.nss b/src/module/nss/mod_onactivate.nss new file mode 100644 index 0000000..ae598c6 --- /dev/null +++ b/src/module/nss/mod_onactivate.nss @@ -0,0 +1,164 @@ +#include "inc_item_tools" + +void main() + { + object oItem = GetItemActivated(); + string sTag = GetTag (oItem); + object oPC = GetItemActivator(); + object oTarget = GetItemActivatedTarget(); + location lLoc = GetItemActivatedTargetLocation(); + location lLoc2; + int iType = GetBaseItemType(oItem); + int i,iTemp,iTemp2,iAnim,iPassed,iSkill,iRoll; + effect eTemp,eTemp2; + object oTemp; + string sResRef; + talent tTalent; + float fTemp; + if (GetIsDM(oPC)) + { + if (sTag == "DMCleaner") + { + SetItemCursedFlag(oTarget,FALSE); + SetPlotFlag(oTarget,FALSE); + DestroyObject(oTarget); + return; + } + else if (sTag == "DMBanWand") + { + oTemp = GetObjectByTag("DeathCheater"); + AssignCommand(oTarget,ClearAllActions(TRUE)); + AssignCommand(oTarget,JumpToLocation(GetLocation(oTemp))); + return; + } + } + switch (iType) + { + // Weapons + case BASE_ITEM_ARROW: + case BASE_ITEM_BASTARDSWORD: + case BASE_ITEM_BATTLEAXE: + case BASE_ITEM_BOLT: + case BASE_ITEM_BULLET: + case BASE_ITEM_CLUB: + case BASE_ITEM_DAGGER: + case BASE_ITEM_DART: + case BASE_ITEM_DIREMACE: + case BASE_ITEM_DOUBLEAXE: + case BASE_ITEM_GREATAXE: + case BASE_ITEM_GREATSWORD: + case BASE_ITEM_GRENADE: + case BASE_ITEM_HALBERD: + case BASE_ITEM_HANDAXE: + case BASE_ITEM_HEAVYCROSSBOW: + case BASE_ITEM_HEAVYFLAIL: + case BASE_ITEM_KAMA: + case BASE_ITEM_KATANA: + case BASE_ITEM_KUKRI: + case BASE_ITEM_LIGHTCROSSBOW: + case BASE_ITEM_LIGHTFLAIL: + case BASE_ITEM_LIGHTHAMMER: + case BASE_ITEM_LIGHTMACE: + case BASE_ITEM_LONGBOW: + case BASE_ITEM_LONGSWORD: + case BASE_ITEM_MORNINGSTAR: + case BASE_ITEM_QUARTERSTAFF: + case BASE_ITEM_RAPIER: + case BASE_ITEM_SCIMITAR: + case BASE_ITEM_SCYTHE: + case BASE_ITEM_SHORTBOW: + case BASE_ITEM_SHORTSPEAR: + case BASE_ITEM_SHORTSWORD: + case BASE_ITEM_SHURIKEN: + case BASE_ITEM_SICKLE: + case BASE_ITEM_SLING: + case BASE_ITEM_THROWINGAXE: + case BASE_ITEM_TWOBLADEDSWORD: + case BASE_ITEM_WARHAMMER: + { + ExecuteScript("mod_act_weapons",oPC); + break; + } + case BASE_ITEM_AMULET: + case BASE_ITEM_RING: + { + ExecuteScript("mod_act_jewelry",oPC); + break; + } + case BASE_ITEM_ARMOR: + case BASE_ITEM_HELMET: + case BASE_ITEM_LARGESHIELD: + case BASE_ITEM_SMALLSHIELD: + case BASE_ITEM_TOWERSHIELD: + { + ExecuteScript("mod_act_armor",oPC); + break; + } + case BASE_ITEM_BELT: + case BASE_ITEM_BOOTS: + case BASE_ITEM_BRACER: + case BASE_ITEM_CLOAK: + case BASE_ITEM_GLOVES: + { + ExecuteScript("mod_act_clothes",oPC); + break; + } + + // Wizard Stuff + case BASE_ITEM_MAGICROD: + case BASE_ITEM_MAGICSTAFF: + case BASE_ITEM_MAGICWAND: + { + ExecuteScript("mod_act_wiz",oPC); + break; + } + // Misc + case BASE_ITEM_MISCLARGE: + case BASE_ITEM_MISCMEDIUM: + { + ExecuteScript("mod_act_med",oPC); + break; + } + case BASE_ITEM_MISCSMALL: + { + ExecuteScript("mod_act_small",oPC); + break; + } + case BASE_ITEM_MISCTALL: + case BASE_ITEM_MISCTHIN: + { + ExecuteScript("mod_act_thin",oPC); + break; + } + case BASE_ITEM_MISCWIDE: + {} + // Potions + case BASE_ITEM_POTIONS: + { + ExecuteScript("mod_act_potion",oPC); + break; + } + case BASE_ITEM_BOOK: + { + ExecuteScript("mod_act_book",oPC); + break; + } + // As of this writing these types do nothing. + case BASE_ITEM_CBLUDGWEAPON: + case BASE_ITEM_CPIERCWEAPON: + case BASE_ITEM_CREATUREITEM: + case BASE_ITEM_CSLASHWEAPON: + case BASE_ITEM_CSLSHPRCWEAP: + case BASE_ITEM_GEM: + case BASE_ITEM_GOLD: + case BASE_ITEM_HEALERSKIT: + case BASE_ITEM_KEY: + case BASE_ITEM_LARGEBOX: + case BASE_ITEM_SCROLL: + case BASE_ITEM_SPELLSCROLL: + case BASE_ITEM_THIEVESTOOLS: + case BASE_ITEM_TORCH: + case BASE_ITEM_TRAPKIT: + {} + }; + } diff --git a/src/module/nss/mod_onload.nss b/src/module/nss/mod_onload.nss new file mode 100644 index 0000000..79eeaf2 --- /dev/null +++ b/src/module/nss/mod_onload.nss @@ -0,0 +1,61 @@ +#include "inc_misc_tools" +void main() + { + int i; + int iDoors,iTraps,iSecretDoors,iFalls,iMon,iObjType,iHiddenTreasure; + object oArea,oObject; + string sTag; + for (i = 1; i <= NUMBER_OF_AREAS; i+=1) + { + oArea = GetObjectByTag("Area"+Convert(i)); + // Sadly Traps can not be dynamically spawned. It is because of this fact that module resets are required. + SetUpTraps(oArea); + object oObject = GetFirstObjectInArea(oArea); + while (GetIsObjectValid(oObject)) + { + iObjType = GetObjectType(oObject); + sTag = GetTag(oObject); + switch (iObjType) + { + case OBJECT_TYPE_DOOR: + { + // ---------------------- TRANSITION DOORS ---------------- + if (GetTag(GetTransitionTarget(oObject)) == "None") + SetLocalObject(GetModule(),"Door"+IntToString(iDoors+=1),oObject); + break; + } + case OBJECT_TYPE_WAYPOINT: + { + // -----------------------SECRET DOORS--------------------- + if (sTag == "SecretDoor") + { + if (d100() <= ROOM_SECRET_DOOR) + SetLocalInt(oObject,"Active",TRUE); + SetLocalObject(GetModule(),"SecretDoor"+IntToString(iSecretDoors+=1),oObject); + } + //----------------------- FALL POINTS --------------------- + else if (sTag == "Fall") + SetLocalObject(GetModule(),"Fall"+IntToString(iFalls+=1),oObject); + //------------------ ROOM MONSTER SPAWNS------------------- + else if (sTag == "MON_") + SetLocalObject(GetModule(),"MonsterWP"+IntToString(iMon+=1),oObject); + //------------------ HIDDEN TREASURE POINTS --------------- + else if (sTag == "HiddenChest") + { + if (d100() <= ROOM_HIDDEN_TREASURE) + SetLocalInt(oObject,"Active",TRUE); + SetLocalObject(GetModule(),"HiddenTreasure"+IntToString(iHiddenTreasure+=1),oObject); + } + break; + } + }; + oObject = GetNextObjectInArea(oArea); + } + } + // Save all counters. + SetLocalInt(GetModule(),"Doors",iDoors); + SetLocalInt(GetModule(),"SecretDoorWPs",iSecretDoors); + SetLocalInt(GetModule(),"Falls",iFalls); + SetLocalInt(GetModule(),"RoomMonsterWPs",iMon); + SetLocalInt(GetModule(),"HiddenTreasureWPs",iHiddenTreasure); + } diff --git a/src/module/nss/mod_pc_equip.nss b/src/module/nss/mod_pc_equip.nss new file mode 100644 index 0000000..acb07d7 --- /dev/null +++ b/src/module/nss/mod_pc_equip.nss @@ -0,0 +1,191 @@ +#include "inc_misc_tools" +#include "inc_room_content" +#include "prc_x2_itemprop" +// Gives a bonus to all skills affected by Armor check penalty. +// This function should be applied by the armor. (AssignCommand) +void ACPBonus(object oPC,int iAmount); +// Returns the ammo slot for that weapon. +int GetAmmoSlot(object oWeapon); +// Applies Special Ammo effects from weapons +void SpecialAmmo(object oWeapon,object oAmmo,int iType); +void main () + { + object oPC = GetPCItemLastEquippedBy(); + object oItem = GetPCItemLastEquipped(); + int iType = GetBaseItemType(oItem); + string sTag = GetTag(oItem); + object oTemp; + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND ,oPC); + object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC); + object oAmmo; + int iTemp,iTemp2,iDamageType; + SetLocalInt(oSkin,sTag,TRUE); + switch(iType) + { + case BASE_ITEM_HELMET: + { + if (sTag == "miscc097") + AssignCommand(oPC,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectAreaOfEffect(AOE_MOB_CIRCGOOD," ", "miscc097", " "),oPC)); + break; + } + case BASE_ITEM_CLOAK: + { + if (sTag == "miscb083") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectLinkEffects(EffectConcealment(20,MISS_CHANCE_TYPE_NORMAL),EffectVisualEffect(VFX_DUR_BLUR)),oPC)); + else if (sTag == "miscc037") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectLinkEffects(EffectConcealment(50,MISS_CHANCE_TYPE_NORMAL),EffectVisualEffect(VFX_DUR_BLUR)),oPC)); + else if (sTag == "miscc026") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectSpellResistanceIncrease(17-GetSpellResistance(oPC)),oPC)); + else if (sTag == "miscc072") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectSpellResistanceIncrease(21-GetSpellResistance(oPC)),oPC)); + break; + } + case BASE_ITEM_BRACER: + { + if (GetWeaponRanged(oWeapon) + && sTag == "misca081") // Bracers of Archery + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectAttackIncrease(1),oPC)); + } + case BASE_ITEM_ARMOR: + { + if (sTag == "chains601") + { + AssignCommand(oItem,ACPBonus(oPC,2)); + AssignCommand(oItem,AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_10_PERCENT),oItem)); + SetPlotFlag(oItem,TRUE); + } + else if (sTag == "chain601") + { + AssignCommand(oItem,ACPBonus(oPC,3)); + AssignCommand(oItem,AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_10_PERCENT),oItem)); + SetPlotFlag(oItem,TRUE); + } + else if (sTag == "hide601") + { + AssignCommand(oItem,ACPBonus(oPC,1)); + AssignCommand(oItem,AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyBonusFeat(IP_CONST_FEAT_KNOCKDOWN),oItem)); + SetPlotFlag(oItem,TRUE); + } + else if (sTag == "fplate601") + { + AssignCommand(oItem,ACPBonus(oPC,4)); + AssignCommand(oItem,AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_20_PERCENT),oItem)); + SetPlotFlag(oItem,TRUE); + } + else if (sTag == "breast602") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectAbilityIncrease(ABILITY_CHARISMA,4),oPC)); + else if (sTag == "miscc060") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectSpellResistanceIncrease(17-GetSpellResistance(oPC)),oPC)); + } + case BASE_ITEM_LARGESHIELD: + case BASE_ITEM_SMALLSHIELD: + case BASE_ITEM_TOWERSHIELD: + { + if (sTag == "sshield601") + AssignCommand(oItem,ACPBonus(oPC,1)); + else if (sTag == "lshield601") + AssignCommand(oItem,ACPBonus(oPC,2)); + } + case BASE_ITEM_BOOTS: + { + if (sTag == "misca049") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectMovementSpeedIncrease(99),oPC)); // Odd that the system doesnt allow 100% + else if (sTag == "miscb036") + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectMovementSpeedIncrease(50),oPC)); + } + case BASE_ITEM_ARROW: + case BASE_ITEM_BULLET: + case BASE_ITEM_BOLT: + { + iTemp = GetLocalInt(oWeapon,"SpecialAmmo"); + if (iTemp > 0) + { + SpecialAmmo(oWeapon,oItem,iTemp); + } + } + case BASE_ITEM_DART: + case BASE_ITEM_HEAVYCROSSBOW: + case BASE_ITEM_LIGHTCROSSBOW: + case BASE_ITEM_LONGBOW: + case BASE_ITEM_SHORTBOW: + case BASE_ITEM_SLING: + case BASE_ITEM_THROWINGAXE: + { + if (GetLocalInt(oSkin,"misca081")) // Special code for Barcer of archery do not include in if/else statements + { + oTemp = GetItemInSlot(INVENTORY_SLOT_ARMS,oPC); + AssignCommand(oTemp,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectAttackIncrease(1),oPC)); + } + iTemp = GetLocalInt(oItem,"SpecialAmmo"); + if (iTemp > 0) + { + oAmmo = GetItemInSlot(GetAmmoSlot(oItem),oPC); + SpecialAmmo(oWeapon,oAmmo,iTemp); + } + } + }; + int iMW = GetLocalInt(oItem,"MW"); + int iEnc = GetEnchantmentBonus(oItem); + if (GetIsArmor(oItem) && (iMW || iEnc >= 1)) + { + if (GetItemACValue(oItem) - iEnc > 2) + AssignCommand(oItem,ACPBonus(oPC,1)); + } + else if (GetIsWeapon(oItem) && iMW && !iEnc) + { + if (GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC) == oItem) + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectAttackIncrease(1,ATTACK_BONUS_ONHAND)),oPC)); + else if (GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC) == oItem) + AssignCommand(oItem,ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectAttackIncrease(1,ATTACK_BONUS_OFFHAND)),oPC)); + } + } + +void ACPBonus(object oPC,int iAmount) + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectSkillIncrease(SKILL_HIDE,iAmount)),oPC); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectSkillIncrease(SKILL_MOVE_SILENTLY,iAmount)),oPC); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectSkillIncrease(SKILL_PARRY,iAmount)),oPC); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectSkillIncrease(SKILL_TUMBLE,iAmount)),oPC); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectSkillIncrease(SKILL_PICK_POCKET,iAmount)),oPC); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectSkillIncrease(SKILL_SET_TRAP,iAmount)),oPC); + } + +int GetAmmoSlot(object oWeapon) + { + int iType = GetBaseItemType(oWeapon); + if (iType == BASE_ITEM_LONGBOW + || iType == BASE_ITEM_SHORTBOW) + return INVENTORY_SLOT_ARROWS; + else if (iType == BASE_ITEM_HEAVYCROSSBOW + || iType == BASE_ITEM_LIGHTCROSSBOW) + return INVENTORY_SLOT_BOLTS; + else if (iType == BASE_ITEM_SLING) + return INVENTORY_SLOT_BULLETS; + else if (GetItemInSlot(INVENTORY_SLOT_LEFTHAND) == oWeapon) + return INVENTORY_SLOT_LEFTHAND; + return INVENTORY_SLOT_RIGHTHAND; + } + +void SpecialAmmo(object oWeapon,object oAmmo,int iType) + { + int iDamageType = GetLocalInt(oWeapon,"DamageType"); + int iTemp; + if (iType == 1) + { + IPSafeAddItemProperty(oAmmo,ItemPropertyDamageBonus(iDamageType,DAMAGE_BONUS_1d6)); + SetLocalInt(oAmmo,"TempEnc",ITEM_PROPERTY_DAMAGE_BONUS); + } + else if (iType == 2) + { + iTemp = GetLocalInt(oWeapon,"AlignmentTarget"); + IPSafeAddItemProperty(oAmmo,ItemPropertyDamageBonusVsAlign(iTemp,iDamageType,DAMAGE_BONUS_2d6)); + SetLocalInt(oAmmo,"TempEnc",ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP); + } + else if (iType == 3) + { + iTemp = GetLocalInt(oWeapon,"Bane"); + IPSafeAddItemProperty(oAmmo,ItemPropertyDamageBonusVsRace(iTemp,iDamageType,DAMAGE_BONUS_2d6)); + SetLocalInt(oAmmo,"TempEnc",ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP); + } + } + diff --git a/src/module/nss/mod_pc_levelup.nss b/src/module/nss/mod_pc_levelup.nss new file mode 100644 index 0000000..9b1ae11 --- /dev/null +++ b/src/module/nss/mod_pc_levelup.nss @@ -0,0 +1,5 @@ +#include "inc_misc_tools" +void main() + { + NotifyPartyAverageLevel(GetPCLevellingUp()); + } diff --git a/src/module/nss/mod_pc_unequip.nss b/src/module/nss/mod_pc_unequip.nss new file mode 100644 index 0000000..edcc29b --- /dev/null +++ b/src/module/nss/mod_pc_unequip.nss @@ -0,0 +1,117 @@ +#include "prc_x2_itemprop" +// Removes a ITEM_PROPERTY_* effect from an object. +void RDGRemoveItemProperty(object oItem,int ItemPropertyType); +// Returns the ammo slot for that weapon. +int GetAmmoSlot(object oWeapon); +void main () + { + object oPC = GetPCItemLastUnequippedBy(); + object oItem = GetPCItemLastUnequipped(); + string sTag = GetTag(oItem); + effect eEffect = GetFirstEffect(oPC); + int iType = GetBaseItemType(oItem); + object oTemp; + object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC); + itemproperty ipItem; + object oAmmo; + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC); + int iDamageType,iTemp; + DeleteLocalObject(oSkin,sTag); + while (GetIsEffectValid(eEffect)) + { + if (GetEffectCreator(eEffect) == oItem) + RemoveEffect(oPC,eEffect); + eEffect = GetNextEffect(oPC); + } + if (iType = BASE_ITEM_ARMOR) + { + if (sTag == "chains601" + || sTag == "chain601" + || sTag == "fplate601") + RDGRemoveItemProperty(oItem,ITEM_PROPERTY_ARCANE_SPELL_FAILURE); + if (sTag == "hide601") + RDGRemoveItemProperty(oItem,ITEM_PROPERTY_BONUS_FEAT); + } + if (GetBaseItemType(oItem) == BASE_ITEM_TORCH) + { + if (sTag != "misca003" // Everburning Torch + && sTag != "miscc002")// Torch of Revealing + DestroyObject(oItem); + } + // Bracer of archery rules. + if (GetLocalInt(oSkin,"misca081")) + { + if (GetWeaponRanged(oItem)) + { + oTemp = GetItemInSlot(INVENTORY_SLOT_ARMS,oPC); + eEffect = GetFirstEffect(oPC); + while (GetIsEffectValid(eEffect)) + { + if (GetEffectCreator(eEffect) == oTemp) + RemoveEffect(oPC,eEffect); + eEffect = GetNextEffect(oPC); + } + } + } + // If a ranged weapon is removed change the properties of the ammunition + if (GetLocalInt(oItem,"SpecialAmmo")) + { + oAmmo = GetItemInSlot(GetAmmoSlot(oItem),oPC); + if (!GetIsObjectValid(oAmmo)) + return; + iTemp = GetLocalInt(oAmmo,"TempEnc"); + iDamageType = GetLocalInt(oWeapon,"DamageType"); + if (iTemp == ITEM_PROPERTY_DAMAGE_BONUS + || ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP + || ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP) + { + IPRemoveMatchingItemProperties(oAmmo,iTemp,DURATION_TYPE_PERMANENT,iDamageType); + DeleteLocalInt(oAmmo,"TempEnc"); + } + } + // Remove weapon bonus from ammo if was enchanted by a weapon. + else if (GetLocalInt(oItem,"TempEnc")) + { + iTemp = GetLocalInt(oItem,"TempEnc"); + iDamageType = GetLocalInt(oItem,"DamageType"); + if (iTemp == ITEM_PROPERTY_DAMAGE_BONUS + || ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP + || ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP) + { + IPRemoveMatchingItemProperties(oItem,iTemp,DURATION_TYPE_PERMANENT,iDamageType); + DeleteLocalInt(oItem,"TempEnc"); + DeleteLocalInt(oItem,"DamageType"); + } + } + } + +void RDGRemoveItemProperty(object oItem,int ItemPropertyType) + { + itemproperty ipItem = GetFirstItemProperty(oItem); + while (GetIsItemPropertyValid(ipItem)) + { + if (GetItemPropertyType(ipItem) == ItemPropertyType)// Arcane spell failure is added thru scripting to prevent pricing issues. Must be removed from item before it is sold. + { + RemoveItemProperty(oItem,ipItem); + SetPlotFlag(oItem,FALSE); + } + ipItem = GetNextItemProperty(oItem); + } + } + +int GetAmmoSlot(object oWeapon) + { + int iType = GetBaseItemType(oWeapon); + if (iType == BASE_ITEM_LONGBOW + || iType == BASE_ITEM_SHORTBOW) + return INVENTORY_SLOT_ARROWS; + else if (iType == BASE_ITEM_HEAVYCROSSBOW + || iType == BASE_ITEM_LIGHTCROSSBOW) + return INVENTORY_SLOT_BOLTS; + else if (iType == BASE_ITEM_SLING) + return INVENTORY_SLOT_BULLETS; + else if (GetItemInSlot(INVENTORY_SLOT_LEFTHAND) == oWeapon) + return INVENTORY_SLOT_LEFTHAND; + return INVENTORY_SLOT_RIGHTHAND; + } + diff --git a/src/module/nss/mod_respawn.nss b/src/module/nss/mod_respawn.nss new file mode 100644 index 0000000..a9c9c50 --- /dev/null +++ b/src/module/nss/mod_respawn.nss @@ -0,0 +1,32 @@ +//#include "inc_mod_constant" +#include "inc_misc_tools" +void main() + { + object oPC = GetLastRespawnButtonPresser(); + object oLuckBlade = GetItemPossessedBy(oPC,"ssword602"); + object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC); + object oToken = GetItemPossessedBy(oPC,"DeathToken"); + if (GetIsObjectValid(oLuckBlade) && GetLocalInt(oLuckBlade,"iUses") > 0) + { + SetLocalInt(oLuckBlade,"iUses",GetLocalInt(oLuckBlade,"iUses")-1); + } + else + { + //Erase Bank Account + DeleteCampaignVariable(CAMPAIGN,"Bank"+GetName(oPC),oPC); // Clears the PC's bank account. + //Remove ALL effects + effect eEffect = GetFirstEffect(oPC); + while (GetIsEffectValid(eEffect)) + { + RemoveEffect(oPC,eEffect); + eEffect = GetNextEffect(oPC); + } + // Reset Character to level 1. + //DestroyObject(oSkin,0.1); + SetXP(oPC,0); + } + SetItemCursedFlag(oToken,FALSE); + DestroyObject(oToken); + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPC); + DelayCommand(0.5,AssignCommand(oPC,ActionJumpToLocation(GetStartingLocation()))); + } diff --git a/src/module/nss/mod_rest.nss b/src/module/nss/mod_rest.nss new file mode 100644 index 0000000..07acf38 --- /dev/null +++ b/src/module/nss/mod_rest.nss @@ -0,0 +1,41 @@ +#include "inc_misc_tools" +void main() + { + object oPC = GetLastPCRested(); + if (GetLocalInt(GetArea(oPC),"Town")) + return;// Resting in town is always allowed. + object oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN ,oPC); + object oItem; + if (!GetIsPC(oPC) || GetIsDM(oPC)) + return; + int iType = GetLastRestEventType(); + int iRest = GetLocalInt(oPC,"Rest"); + int iFood = GetLocalInt(oPC,"Food"); + + if (iType == REST_EVENTTYPE_REST_STARTED) + { + if (!iRest) + { + FloatingTextStringOnCreature("You have used your allowed rest.",oPC,FALSE); + AssignCommand(oPC,ClearAllActions()); + return; + } + else if (GetHasFood(OBJECT_SELF)) // Must eat food to rest. + { + FloatingTextStringOnCreature("Hungry.",oPC,FALSE); + AssignCommand(oPC,ClearAllActions()); + return; + } + DelayCommand(1.0,ExecuteScript("rdg_wand_monster",oPC)); + } + else if (iType == REST_EVENTTYPE_REST_FINISHED + || iType == REST_EVENTTYPE_REST_CANCELLED) + { + SetPanelButtonFlash(oPC,PANEL_BUTTON_REST,TRUE); + DeleteLocalInt(oPC,"Rest"); + if (GetLocalInt(oPC,"Food")) + DeleteLocalInt(oPC,"Food"); + else if (GetIsObjectValid(GetItemPossessedBy(oPC,"food"))) + DestroyObject(GetItemPossessedBy(oPC,"food")); + } + } diff --git a/src/module/nss/mod_rest_test.nss b/src/module/nss/mod_rest_test.nss new file mode 100644 index 0000000..76c591c --- /dev/null +++ b/src/module/nss/mod_rest_test.nss @@ -0,0 +1,97 @@ +#include "inc_misc_tools" +void DoHenchAfterRest(object oPC) +{ + int iHeal = GetHitDice(oPC); + if (GetLocalInt(oPC, "LongTermCare")) + iHeal = iHeal *2; + int iBeforeRest = GetLocalInt(oPC,"BeforeRestHPs"); + int iHP = GetCurrentHitPoints(oPC); + if (iHP > iBeforeRest) + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(iHP - iBeforeRest),oPC); + DeleteLocalInt(oPC,"LongTermCare"); +} +void main() + { + object oPC = GetLastPCRested(); + if (GetLocalInt(GetArea(oPC),"Town")) + return;// Resting in town is always allowed. + object oItem; + if (!GetIsPC(oPC) || GetIsDM(oPC)) + return; + int iType = GetLastRestEventType(); + int iRest = HasAvailableRest(oPC); + int iHeal = GetHitDice(oPC); + int iHP = GetCurrentHitPoints(oPC); + int iBeforeRest = GetLocalInt(oPC,"BeforeRestHPs"); + int iLongTermCare = GetLocalInt(oPC,"LongTermCare"); + object oHealer = GetHighestPartySkillMember(oPC,SKILL_HEAL); + if (iType == REST_EVENTTYPE_REST_STARTED) + { + if (!HasAvailableRest(oPC)) + { + if (!GetHasAllPartyRested(oPC)) + { + FloatingTextStringOnCreature("You must wait for the rest of the party to rest.",oPC,FALSE); + AssignCommand(oPC,ClearAllActions()); + SetLocalInt(oPC,"BeforeRestHPs",iHP); + return; + } + else + ResetPartyRests(oPC); + } + else if (GetHasFood(OBJECT_SELF)) // Must eat food to rest. + { + FloatingTextStringOnCreature("Hungry.",oPC,FALSE); + AssignCommand(oPC,ClearAllActions()); + return; + } + SetLocalInt(oPC,"BeforeRestHPs",iHP); + if (GetIsSkillSuccessful(oHealer,SKILL_HEAL,15)) + SetLocalInt(oPC,"LongTermCare",TRUE); + if (!IsAnotherPartyMemberResting(oPC)) + DelayCommand(1.0,ExecuteScript("rdg_wand_monster",oPC)); + int i =1 ; + object oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN ,oPC,i); + while(GetIsObjectValid(oHench)) + { + SetLocalInt(oHench,"BeforeRestHPs",GetCurrentHitPoints(oHench)); + if (GetIsSkillSuccessful(oHealer,SKILL_HEAL,15)) + SetLocalInt(oHench,"LongTermCare",TRUE); + i++; + oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN ,oPC,i); + } + } + else if (iType == REST_EVENTTYPE_REST_FINISHED) + { + if (iLongTermCare) + iHeal = iHeal * 2; + if (iHP > iBeforeRest + iHeal) + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(iHP - (iBeforeRest + iHeal)),oPC); + SetPanelButtonFlash(oPC,PANEL_BUTTON_REST,TRUE); + DeleteLocalInt(oPC,"Rest"); + EatFood(oPC); + DeleteLocalInt(oPC,"LongTermCare"); + int i =1 ; + object oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN ,oPC,i); + while(GetIsObjectValid(oHench)) + { + DoHenchAfterRest(oHench); + i++; + oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN ,oPC,i); + } + } + else if (iType == REST_EVENTTYPE_REST_CANCELLED) + { + if (iHP > iBeforeRest) + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(iHP - iBeforeRest),oPC); + DeleteLocalInt(oPC,"LongTermCare"); + int i =1 ; + object oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN ,oPC,i); + while(GetIsObjectValid(oHench)) + { + DoHenchAfterRest(oHench); + i++; + oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN ,oPC,i); + } + } + } diff --git a/src/module/nss/mod_unacquire.nss b/src/module/nss/mod_unacquire.nss new file mode 100644 index 0000000..4a11c93 --- /dev/null +++ b/src/module/nss/mod_unacquire.nss @@ -0,0 +1,50 @@ +void main() + { + object oPC = GetModuleItemLostBy(); + if (!GetIsPC(oPC)) + return; + object oItem = GetModuleItemLost(); + if (!GetIsObjectValid(oItem)) + return; + location lLoc = GetLocation(oItem); + object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC); + string sTag = GetTag(oItem); + DeleteLocalInt(oSkin,sTag); + // Handles anti cheat for Rod of Flailing + if (sTag == "rodw111") + { + oItem = GetItemPossessedBy(oPC,"rod111"); + DestroyObject(oItem); + } + else if (sTag == "rod111") + { + DestroyObject (oItem); + oItem = GetItemPossessedBy(oPC,"rodw111"); + CopyObject(oItem,lLoc); + DestroyObject(oItem); + } + // End Rod of Flailing + // Handles AnitCheat for Rod of Lordly Might + else if (sTag == "rod114") + { + oItem = GetItemPossessedBy(oPC,"rodw114"); + DestroyObject(oItem); + } + else if (sTag == "rodw114") + { + DestroyObject (oItem); + oItem = GetItemPossessedBy(oPC,"rod114"); + CopyObject(oItem,lLoc); + DestroyObject(oItem); + } + // End Rod of Lordly Might + + // Remove all effects associated with the item. + effect eEffect = GetFirstEffect(oPC); + while (GetIsEffectValid(eEffect)) + { + if (GetEffectCreator(eEffect) == oItem) + RemoveEffect(oPC,eEffect); + eEffect = GetNextEffect(oPC); + } + } diff --git a/src/module/nss/ms_name_inc.nss b/src/module/nss/ms_name_inc.nss new file mode 100644 index 0000000..2b5e011 --- /dev/null +++ b/src/module/nss/ms_name_inc.nss @@ -0,0 +1,1826 @@ +//////////////////////////////////////////////////////////////////////////////// +// // +// Markshire's Nomenclature // +// ms_name_inc.nss // +// // +// By Thrym of Markshire 5/21/06 // +// Updated by: Jaysyn 2021/12/03 // +// // +//////////////////////////////////////////////////////////////////////////////// +/* +// FUNCTION: +// The Nomenclature is an include file placed in the spawn script +// nw_c2_default9 designed to assign a name to a generic NPC who may +// wander towns, roads, shops, etc. +// +// Utilizing both SetName and RandomName the system will name the NPC in +// one of two ways ... +// +// "SET_NAME": By setting the variable "SET_NAME" on the NPC and +// assigning it a string the creature will rename itself upon spawning. +// This is handy for DM's and builders to create more precisely named +// creatures for the palette and then generize them upon spawn. +// +// eg. Ancient White Dragon in the Creator becomes White Dragon on Spawn. +// +// "SET_NAME" = "RANDOM": By setting the same variable to the name "RANDOM" +// the NPC then is given a random name generated by RACE and GENDER using +// the RandomName function. +// +// eg. Male Dwarven Villager in the Aurora Toolset becomes Gloigan on spawn +// this time and perhaps Rufus on the next spawned Villager. +// +// "NAME_TYPE": Setting this int variable to "1" will cause a Full Name +// to be generated if the "SET_NAME" is set to "RANDOM". +// +// eg. Male Dwarven Villager becomes Gloigan Stonecutter or Rufus Mason. +// +// "TITLE": Prepends the defined string to the NPCs name. +// +// eg. "Lord" Brown +// +// "POSTFIX": Appends the defind string after the NPC's name. +// +// eg. Ralph "the Guard" +// + + + "RND_ROGUE" + "RND_BARBARIAN" + "RND_FIGHTER" + "RND_CLERIC" : Setting these to "1" will give the NPC a randomized class + "RND_MAGE" : appropriate postfix + "RND_DRUID" + "RND_RANGER" + + +// +// +//////////////////////////////////////////////////////////////////////////////*/ + +#include "prc_inc_racial" + + + +///// FUNCTION DECLARATIONS //////////////////////////////////////////////////// + +string GetClassLevelTitle(int nClassType, object oNPC = OBJECT_SELF); + +int GetHighestClassLevel(object oCreature = OBJECT_SELF); + +// Generates a Random First Name +// based on Race and Gender +// For all Standard PC Races and Animals +string ms_RandomFirstName(object oNPC = OBJECT_SELF); + +// Generates a Random Last Name +// based on Race For all +// Standard PC Races and Animals +string ms_RandomLastName(object oNPC = OBJECT_SELF); + +// Function designed to read the variable +// "SET_NAME" and assign a new name to the NPC +// If the variable is set to "RANDOM" a +// random name is assigned. +// A second variable can be assigned to +// have the random name be a random Full Name. +void ms_Nomenclature(object oNPC = OBJECT_SELF); + + +///// FUNCTIONS //////////////////////////////////////////////////////////////// + +void ms_Nomenclature(object oNPC = OBJECT_SELF) +{ + string sRandomName = GetLocalString(oNPC, "SET_NAME"); + string sTitle = GetLocalString(oNPC, "TITLE"); + string sPostfix = GetLocalString(oNPC, "POSTFIX"); + string sBaseRace = GetLocalString(oNPC, "BASE_RACE"); + string sClassTitle; + + int bClassTitle = GetLocalInt(oNPC,"CLASS_TITLE"); + + +//:: Handles class level based NPC titles + if (bClassTitle) + { + sClassTitle = GetClassLevelTitle(GetHighestClassLevel(oNPC), oNPC); + } + +//:: Handles class based Henchman titles + int nRndPaladin = GetLocalInt(OBJECT_SELF, "RND_PALADIN"); + if (nRndPaladin == 1) + { + int nResult = Random(30) + 1; // Generate a random number between 1 and 30 + switch (nResult) + { + case 1: sPostfix = "the Righteous"; break; + case 2: sPostfix = "the Just"; break; + case 3: sPostfix = "the Defender"; break; + case 4: sPostfix = "the Virtuous"; break; + case 5: sPostfix = "the Crusader"; break; + case 6: sPostfix = "the Lightbringer"; break; + case 7: sPostfix = "the Faithful"; break; + case 8: sPostfix = "the Zealous"; break; + case 9: sPostfix = "the Beacon"; break; + case 10: sPostfix = "the Redeemer"; break; + case 11: sPostfix = "the Shield of Faith"; break; + case 12: sPostfix = "of the Sacred Flame"; break; + case 13: sPostfix = "the Lawful"; break; + case 14: sPostfix = "the Blessed"; break; + case 15: sPostfix = "the Chosen"; break; + case 16: sPostfix = "of the Holy Vow"; break; + case 17: sPostfix = "the Avenger"; break; + case 18: sPostfix = "the Purifier"; break; + case 19: sPostfix = "the Divine Hand"; break; + case 20: sPostfix = "the Sacred Blade"; break; + case 21: sPostfix = "the Lightforged"; break; + case 22: sPostfix = "the Protector"; break; + case 23: sPostfix = "the Illuminated"; break; + case 24: sPostfix = "of the Silver Oath"; break; + case 25: sPostfix = "the Guardian"; break; + case 26: sPostfix = "the Oathbound"; break; + case 27: sPostfix = "the Valiant"; break; + case 28: sPostfix = "the Seraphic"; break; + case 29: sPostfix = "the Golden Knight"; break; + case 30: sPostfix = "the True"; break; + } + } + + int nRndMonk = GetLocalInt(OBJECT_SELF, "RND_MONK"); + if (nRndMonk == 1) + { + int nResult = Random(30) + 1; + switch (nResult) + { + case 1: sPostfix = "the Disciplined"; break; + case 2: sPostfix = "the Enlightened"; break; + case 3: sPostfix = "of the Open Palm"; break; + case 4: sPostfix = "of the Empty Hand"; break; + case 5: sPostfix = "the Ascetic"; break; + case 6: sPostfix = "the Calm"; break; + case 7: sPostfix = "the Wayfarer"; break; + case 8: sPostfix = "the Iron Fist"; break; + case 9: sPostfix = "the Centered"; break; + case 10: sPostfix = "of the Quiet Mind"; break; + case 11: sPostfix = "the Humble"; break; + case 12: sPostfix = "the Swift Palm"; break; + case 13: sPostfix = "the Inner Flame"; break; + case 14: sPostfix = "the Master"; break; + case 15: sPostfix = "of the Lotus Path"; break; + case 16: sPostfix = "the Patient"; break; + case 17: sPostfix = "the Balanced"; break; + case 18: sPostfix = "the Serene"; break; + case 19: sPostfix = "the Watchful"; break; + case 20: sPostfix = "the Disciple"; break; + case 21: sPostfix = "the Harmonious"; break; + case 22: sPostfix = "the Seeker"; break; + case 23: sPostfix = "the Breathless"; break; + case 24: sPostfix = "the Stilled Hand"; break; + case 25: sPostfix = "of Perfect Form"; break; + case 26: sPostfix = "the Tranquil"; break; + case 27: sPostfix = "the Unbound"; break; + case 28: sPostfix = "the Silent Step"; break; + case 29: sPostfix = "the Mindful"; break; + case 30: sPostfix = "the Flowing One"; break; + } + } + + int nRndRogue = GetLocalInt(OBJECT_SELF,"RND_ROGUE"); + if (nRndRogue == 1) + { + int nResult = Random(30) + 1; // Generate a random number between 1 and 30 + switch (nResult) + { + case 1: + sPostfix = "the Quick"; + break; + case 2: + sPostfix = "the Quiet"; + break; + case 3: + sPostfix = "the Sharp"; + break; + case 4: + sPostfix = "the Sneak"; + break; + case 5: + sPostfix = "the Rogue"; + break; + case 6: + sPostfix = "the Footpad"; + break; + case 7: + sPostfix = "the Shadow"; + break; + case 8: + sPostfix = "the Nimble"; + break; + case 9: + sPostfix = "the Swift"; + break; + case 10: + sPostfix = "the Silent"; + break; + case 11: + sPostfix = "the Sly"; + break; + case 12: + sPostfix = "the Crafty"; + break; + case 13: + sPostfix = "the Cunning"; + break; + case 14: + sPostfix = "the Elusive"; + break; + case 15: + sPostfix = "the Deft"; + break; + case 16: + sPostfix = "the Guileful"; + break; + case 17: + sPostfix = "the Lurker"; + break; + case 18: + sPostfix = "the Trickster"; + break; + case 19: + sPostfix = "the Prowler"; + break; + case 20: + sPostfix = "the Skulker"; + break; + case 21: + sPostfix = "the Phantom"; + break; + case 22: + sPostfix = "the Wily"; + break; + case 23: + sPostfix = "the Mysterious"; + break; + case 24: + sPostfix = "the Furtive"; + break; + case 25: + sPostfix = "the Discreet"; + break; + case 26: + sPostfix = "the Spy"; + break; + case 27: + sPostfix = "the Veiled"; + break; + case 28: + sPostfix = "the Artful"; + break; + case 29: + sPostfix = "the Sleuth"; + break; + case 30: + sPostfix = "the Masked"; + break; + } + } + + int nRndBarb = GetLocalInt(OBJECT_SELF,"RND_BARBARIAN"); + if (nRndBarb == 1) + { + int nResult = Random(30) + 1; // Generate a random number between 1 and 30 + switch (nResult) + { + case 1: + sPostfix = "the Barbarian"; + break; + case 2: + sPostfix = "the Destroyer"; + break; + case 3: + sPostfix = "of the Plains"; + break; + case 4: + sPostfix = "of Bear Clan"; + break; + case 5: + sPostfix = "the Rampager"; + break; + case 6: + sPostfix = "the Reaver"; + break; + case 7: + sPostfix = "the Savage"; + break; + case 8: + sPostfix = "the Berserker"; + break; + case 9: + sPostfix = "the Untamed"; + break; + case 10: + sPostfix = "the Fierce"; + break; + case 11: + sPostfix = "the Warbringer"; + break; + case 12: + sPostfix = "the Wild"; + break; + case 13: + sPostfix = "the Raider"; + break; + case 14: + sPostfix = "the Vicious"; + break; + case 15: + sPostfix = "the Ruthless"; + break; + case 16: + sPostfix = "the Savage"; + break; + case 17: + sPostfix = "the Bloodthirsty"; + break; + case 18: + sPostfix = "the Warlord"; + break; + case 19: + sPostfix = "the Brute"; + break; + case 20: + sPostfix = "the Fierce"; + break; + case 21: + sPostfix = "the Marauder"; + break; + case 22: + sPostfix = "the Howler"; + break; + case 23: + sPostfix = "the Ravager"; + break; + case 24: + sPostfix = "the Crusher"; + break; + case 25: + sPostfix = "the Frenzied"; + break; + case 26: + sPostfix = "the Beast"; + break; + case 27: + sPostfix = "the Juggernaut"; + break; + case 28: + sPostfix = "the Slayer"; + break; + case 29: + sPostfix = "the Rager"; + break; + case 30: + sPostfix = "the Conqueror"; + break; + } + } + + int nRndFight = GetLocalInt(OBJECT_SELF,"RND_FIGHTER"); + if (nRndFight == 1) + { + int nResult = Random(30) + 1; // Generate a random number between 1 and 30 + switch (nResult) + { + case 1: + sPostfix = "the Strong"; + break; + case 2: + sPostfix = "the Stout"; + break; + case 3: + sPostfix = "of Harrowdale"; + break; + case 4: + sPostfix = "of Tyr"; + break; + case 5: + sPostfix = "of Neverwinter"; + break; + case 6: + sPostfix = "the Swordhand"; + break; + case 7: + sPostfix = "the Valiant"; + break; + case 8: + sPostfix = "the Brave"; + break; + case 9: + sPostfix = "the Defender"; + break; + case 10: + sPostfix = "the Just"; + break; + case 11: + sPostfix = "the Noble"; + break; + case 12: + sPostfix = "the Gallant"; + break; + case 13: + sPostfix = "the Protector"; + break; + case 14: + sPostfix = "the Shield"; + break; + case 15: + sPostfix = "the Champion"; + break; + case 16: + sPostfix = "the Guardian"; + break; + case 17: + sPostfix = "the Sentinel"; + break; + case 18: + sPostfix = "the Warrior"; + break; + case 19: + sPostfix = "the Stalwart"; + break; + case 20: + sPostfix = "the Ironclad"; + break; + case 21: + sPostfix = "the Blade"; + break; + case 22: + sPostfix = "the Swordsman"; + break; + case 23: + sPostfix = "the Vanguard"; + break; + case 24: + sPostfix = "the Lancer"; + break; + case 25: + sPostfix = "the Spearhead"; + break; + case 26: + sPostfix = "the Battlemaster"; + break; + case 27: + sPostfix = "the Blademaster"; + break; + case 28: + sPostfix = "the Warlord"; + break; + case 29: + sPostfix = "the Vanquisher"; + break; + case 30: + sPostfix = "the Swordmaster"; + break; + } + } + + int nRndCleric = GetLocalInt(OBJECT_SELF,"RND_CLERIC"); + if (nRndCleric == 1) + { + int nResult = Random(30) + 1; // Generate a random number between 1 and 30 + if (nResult == 1) + { + sPostfix = "the Pious"; + } + else if (nResult == 2) + { + sPostfix = "the Holy"; + } + else if (nResult == 3) + { + sPostfix = "the Priest"; + } + else if (nResult == 4) + { + sPostfix = "the Zealous"; + } + else if (nResult == 5) + { + sPostfix = "of Phlan"; + } + else if (nResult == 6) + { + sPostfix = "the Wise"; + } + else if (nResult == 7) + { + sPostfix = "the Devout"; + } + else if (nResult == 8) + { + sPostfix = "the Faithful"; + } + else if (nResult == 9) + { + sPostfix = "the Righteous"; + } + else if (nResult == 10) + { + sPostfix = "the Blessed"; + } + else if (nResult == 11) + { + sPostfix = "the Pure"; + } + else if (nResult == 12) + { + sPostfix = "the Sacred"; + } + else if (nResult == 13) + { + sPostfix = "the Benevolent"; + } + else if (nResult == 14) + { + sPostfix = "the Virtuous"; + } + else if (nResult == 15) + { + sPostfix = "the Saintly"; + } + else if (nResult == 16) + { + sPostfix = "the Healer"; + } + else if (nResult == 17) + { + sPostfix = "the Anointed"; + } + else if (nResult == 18) + { + sPostfix = "the Protector"; + } + else if (nResult == 19) + { + sPostfix = "the Merciful"; + } + else if (nResult == 20) + { + sPostfix = "the Revered"; + } + else if (nResult == 21) + { + sPostfix = "the Graceful"; + } + else if (nResult == 22) + { + sPostfix = "the Watchful"; + } + else if (nResult == 23) + { + sPostfix = "the Forgiving"; + } + else if (nResult == 24) + { + sPostfix = "the Humble"; + } + else if (nResult == 25) + { + sPostfix = "the Divine"; + } + else if (nResult == 26) + { + sPostfix = "the Preacher"; + } + else if (nResult == 27) + { + sPostfix = "the Illuminated"; + } + else if (nResult == 28) + { + sPostfix = "the Mystic"; + } + else if (nResult == 29) + { + sPostfix = "the Herald"; + } + else // nResult == 30 + { + sPostfix = "the Exalted"; + } + } + + int nRndMage = GetLocalInt(OBJECT_SELF,"RND_MAGE"); + if (nRndMage == 1) + { + int nResult = Random(30) + 1; // Generate a random number between 1 and 30 + switch (nResult) + { + case 1: + sPostfix = "the Mad"; + break; + case 2: + sPostfix = "the Arcane"; + break; + case 3: + sPostfix = "the Black"; + break; + case 4: + sPostfix = "the Wizard"; + break; + case 5: + sPostfix = "of Waterdeep"; + break; + case 6: + sPostfix = "the Mage"; + break; + case 7: + sPostfix = "the Enigmatic"; + break; + case 8: + sPostfix = "the Mystical"; + break; + case 9: + sPostfix = "the Eldritch"; + break; + case 10: + sPostfix = "the Runeweaver"; + break; + case 11: + sPostfix = "the Sorcerous"; + break; + case 12: + sPostfix = "the Seer"; + break; + case 13: + sPostfix = "the Arcanist"; + break; + case 14: + sPostfix = "the Illustrious"; + break; + case 15: + sPostfix = "the Sage"; + break; + case 16: + sPostfix = "the Sorcerous"; + break; + case 17: + sPostfix = "the Occult"; + break; + case 18: + sPostfix = "the Arcane Adept"; + break; + case 19: + sPostfix = "the Spellbinder"; + break; + case 20: + sPostfix = "the Occultist"; + break; + case 21: + sPostfix = "the Conjurer"; + break; + case 22: + sPostfix = "the Seer"; + break; + case 23: + sPostfix = "the Invoker"; + break; + case 24: + sPostfix = "the Mysterious"; + break; + case 25: + sPostfix = "the Shrouded"; + break; + case 26: + sPostfix = "the Visionary"; + break; + case 27: + sPostfix = "the Spellweaver"; + break; + case 28: + sPostfix = "the Willbreaker"; + break; + case 29: + sPostfix = "the Charmer"; + break; + case 30: + sPostfix = "the Elementalist"; + break; + } + } + + int nRndBard = GetLocalInt(OBJECT_SELF,"RND_BARD"); + if (nRndBard == 1) + { + int nResult = Random(25) + 1; // Generate a random number between 1 and 25 + switch (nResult) + { + case 1: + sPostfix = "the Subtle"; + break; + case 2: + sPostfix = "the Veiled"; + break; + case 3: + sPostfix = "the Shadowed"; + break; + case 4: + sPostfix = "the Intriguer"; + break; + case 5: + sPostfix = "of Altaruk"; + break; + case 6: + sPostfix = "the Elusive"; + break; + case 7: + sPostfix = "the Mysterious"; + break; + case 8: + sPostfix = "the Cryptic"; + break; + case 9: + sPostfix = "the Insidious"; + break; + case 10: + sPostfix = "the Quiet"; + break; + case 11: + sPostfix = "the Sly"; + break; + case 12: + sPostfix = "the Covert"; + break; + case 13: + sPostfix = "the Furtive"; + break; + case 14: + sPostfix = "the Discreet"; + break; + case 15: + sPostfix = "the Subversive"; + break; + case 16: + sPostfix = "the Shrouded"; + break; + case 17: + sPostfix = "the Obscured"; + break; + case 18: + sPostfix = "the Clever"; + break; + case 19: + sPostfix = "the Enigmatic"; + break; + case 20: + sPostfix = "of Elventree"; + break; + case 21: + sPostfix = "of Melvaunt"; + break; + case 22: + sPostfix = "of Deepingdale"; + break; + case 23: + sPostfix = "of Skullport"; + break; + case 24: + sPostfix = "the Crafty"; + break; + case 25: + sPostfix = "of Amn"; + break; + } + } + + int nRndDruid = GetLocalInt(OBJECT_SELF,"RND_DRUID"); + if (nRndDruid == 1) + { + int nResult = Random(25) + 1; // Generate a random number between 1 and 25 + switch (nResult) + { + case 1: + sPostfix = "the Druid"; + break; + case 2: + sPostfix = "of the Forest"; + break; + case 3: + sPostfix = "of the Wild"; + break; + case 4: + sPostfix = "the Wolflord"; + break; + case 5: + sPostfix = "the Treelord"; + break; + case 6: + sPostfix = "the Verdant"; + break; + case 7: + sPostfix = "the Earthshaker"; + break; + case 8: + sPostfix = "the Feral"; + break; + case 9: + sPostfix = "of the Glade"; + break; + case 10: + sPostfix = "of the Crystal Forest"; + break; + case 11: + sPostfix = "the Thorned"; + break; + case 12: + sPostfix = "the Greenwarden"; + break; + case 13: + sPostfix = "the Naturebound"; + break; + case 14: + sPostfix = "the Forestborn"; + break; + case 15: + sPostfix = "the Spiritcaller"; + break; + case 16: + sPostfix = "the Leafblade"; + break; + case 17: + sPostfix = "the Mossy"; + break; + case 18: + sPostfix = "the Grovekeeper"; + break; + case 19: + sPostfix = "the Stormbringer"; + break; + case 20: + sPostfix = "the Earthshaper"; + break; + case 21: + sPostfix = "the Bramble"; + break; + case 22: + sPostfix = "of the Black Sands"; + break; + case 23: + sPostfix = "of the Silt Sea"; + break; + case 24: + sPostfix = "the Spiritbinder"; + break; + case 25: + sPostfix = "the Wildheart"; + break; + } + } + + int nRndRanger = GetLocalInt(OBJECT_SELF,"RND_RANGER"); + if (nRndRanger == 1) + { + int nResult = Random(25) + 1; // Generate a random number between 1 and 25 + switch (nResult) + { + case 1: + sPostfix = "the Ranger"; + break; + case 2: + sPostfix = "of the Forest"; + break; + case 3: + sPostfix = "of the Wild"; + break; + case 4: + sPostfix = "the Strider"; + break; + case 5: + sPostfix = "the Venger"; + break; + case 6: + sPostfix = "the Pathfinder"; + break; + case 7: + sPostfix = "the Woodsman"; + break; + case 8: + sPostfix = "the Trailblazer"; + break; + case 9: + sPostfix = "the Hunter"; + break; + case 10: + sPostfix = "the Scout"; + break; + case 11: + sPostfix = "the Wayfarer"; + break; + case 12: + sPostfix = "the Outrider"; + break; + case 13: + sPostfix = "the Seeker"; + break; + case 14: + sPostfix = "the Sentinel"; + break; + case 15: + sPostfix = "the Forestborn"; + break; + case 16: + sPostfix = "the Survivalist"; + break; + case 17: + sPostfix = "the Tracker"; + break; + case 18: + sPostfix = "the Forager"; + break; + case 19: + sPostfix = "the Warder"; + break; + case 20: + sPostfix = "the Greenblade"; + break; + case 21: + sPostfix = "the Beastmaster"; + break; + case 22: + sPostfix = "the Thornhunter"; + break; + case 23: + sPostfix = "of the Deepwood"; + break; + case 24: + sPostfix = "of the Roughlands"; + break; + case 25: + sPostfix = "the Wilderness Guide"; + break; + } + } + + if (sRandomName != "") + { + if (sRandomName == "RANDOM") + { + switch (GetLocalInt(oNPC, "NAME_TYPE")) + { + case 1: sRandomName = sTitle + " " + ms_RandomFirstName(oNPC) + " " + ms_RandomLastName(oNPC)+ " " + sPostfix; break; + default: sRandomName = sTitle + " " + ms_RandomFirstName(oNPC) + " " + sPostfix; break; + } + } + + if (bClassTitle) + { + sRandomName = sBaseRace +" "+ sTitle; + } + + SetName(oNPC, (sRandomName)); + return; + } +} + +string ms_RandomFirstName(object oNPC = OBJECT_SELF) +{ + int Gender = GetGender(oNPC); + int Race = MyPRCGetRacialType(oNPC); + + string Name; + + switch (Race) + { + case RACIAL_TYPE_ANIMAL: Name = RandomName(0); break; + case RACIAL_TYPE_DWARF: + switch (Gender) + { default: Name = RandomName(2); break; + case GENDER_FEMALE: Name = RandomName(3); break; } break; + case RACIAL_TYPE_ELF: + switch (Gender) + { default: Name = RandomName(5); break; + case GENDER_FEMALE: Name = RandomName(6); break; } break; + case RACIAL_TYPE_GNOME: + switch (Gender) + { default: Name = RandomName(8); break; + case GENDER_FEMALE: Name = RandomName(9); break; } break; + case RACIAL_TYPE_HALFELF: + switch (Gender) + { default: Name = RandomName(11); break; + case GENDER_FEMALE: Name = RandomName(12); break; } break; + case RACIAL_TYPE_HALFLING: + switch (Gender) + { default: Name = RandomName(14); break; + case GENDER_FEMALE: Name = RandomName(15); break; } break; + case RACIAL_TYPE_HALFORC: + switch (Gender) + { default: Name = RandomName(17); break; + case GENDER_FEMALE: Name = RandomName(18); break; } break; + case RACIAL_TYPE_HUMAN: + switch (Gender) + { default: Name = RandomName(20); break; + case GENDER_FEMALE: Name = RandomName(21); break; } break; + default: + switch (Gender) + { default: Name = RandomName(-1); break; + case GENDER_FEMALE: Name = RandomName(0); break; } break; + } + + return Name; +} + +string ms_RandomLastName(object oNPC = OBJECT_SELF) +{ + int Race = MyPRCGetRacialType(oNPC); + + string Name; + + switch (Race) + { + case RACIAL_TYPE_DWARF: Name = RandomName(4); break; + case RACIAL_TYPE_ELF: Name = RandomName(7); break; + case RACIAL_TYPE_GNOME: Name = RandomName(10); break; + case RACIAL_TYPE_HALFELF: Name = RandomName(13); break; + case RACIAL_TYPE_HALFLING: Name = RandomName(16); break; + case RACIAL_TYPE_HALFORC: Name = RandomName(19); break; + case RACIAL_TYPE_HUMAN: Name = RandomName(22); break; + default: Name = RandomName(1); break; + } + + return Name; +} + +//:: Function to get the highest class level of an object, excluding racialtype classes +int GetHighestClassLevel(object oCreature) +{ + int nHighestLevel = -1; + int nClassTypes = 254; // Maximum number of class types + int i; + + for (i = 0; i <= nClassTypes; i++) + { + // Check if the class type is excluded + if (i == CLASS_TYPE_ABERRATION || + i == CLASS_TYPE_ANIMAL || + i == CLASS_TYPE_BEAST || + i == CLASS_TYPE_CONSTRUCT || + i == CLASS_TYPE_DRAGON || + i == CLASS_TYPE_ELEMENTAL || + i == CLASS_TYPE_FEY || + i == CLASS_TYPE_GIANT || + i == CLASS_TYPE_HUMANOID || + i == CLASS_TYPE_MAGICAL_BEAST || + i == CLASS_TYPE_MONSTROUS || + i == CLASS_TYPE_OOZE || + i == CLASS_TYPE_OUTSIDER || + i == CLASS_TYPE_PLANT || + i == CLASS_TYPE_SHAPECHANGER || + i == CLASS_TYPE_UNDEAD || + i == CLASS_TYPE_VERMIN) + continue; + + int nLevel = GetLevelByClass(i, oCreature); + if (nLevel > 0) + { + if (nLevel > nHighestLevel) + { + nHighestLevel = nLevel; + } + } + else + { + break; // Reached an invalid class level, exit the loop + } + } + + return nHighestLevel; +} + + +//:: Handles class level based NPC titles +string GetClassLevelTitle(int nClassType, object oNPC = OBJECT_SELF) +{ + string sTitle; + int nHighClass = GetHighestClassLevel(oNPC); + int nLevel = GetLevelByClass(nHighClass, oNPC); + int nGender = GetGender(oNPC); + + switch (nHighClass) + { + case CLASS_TYPE_BARBARIAN: + switch(nLevel) + { + case 1: case 2: case 3: + sTitle = "Brute" ; + break; + + case 4: case 5: + sTitle = "Vandal"; break; + + case 6: + if (nGender == 1) + {sTitle = "Plunderess"; break;} + else + {sTitle = "Plunderer"; break;} + + case 7: + sTitle = "Pillager"; break; + + case 8: + sTitle = "Marauder"; break; + + case 9: + sTitle = "Reaver"; break; + + case 10: + sTitle = "Barbarian"; break; + + case 11: + sTitle = "Mauler"; break; + + case 12: + sTitle = "Ravager"; break; + + case 13: + sTitle = "Slaughterer"; break; + + case 14: + sTitle = "Destroyer"; break; + + case 15: + if (nGender == 1) + {sTitle = "Chieftainess"; break;} + else + {sTitle = "Chieftain"; break;} + + case 16: + sTitle = "Bloodletter"; break; + + case 17: + sTitle = "Rampager"; break; + + case 18: + sTitle = "Slayer"; break; + + case 19: + sTitle = "Warmonger"; break; + + case 20: + if (nGender == 1) + {sTitle = "High Chieftainess"; break;} + else + {sTitle = "High Chieftain"; break;} + + default: + if (nGender == 1) + {sTitle = "Conqueress"; break;} + else + {sTitle = "Conqueror"; break;} + + } + + case CLASS_TYPE_ROGUE: + switch(nLevel) + { + case 1: case 2: case 3: + sTitle = "Lookout" ; + break; + + case 4: case 5: + sTitle = "Outlaw"; break; + + case 6: + sTitle = "Scalawag"; break; + + case 7: + sTitle = "Creeper"; break; + + case 8: + sTitle = "Larker"; break; + + case 9: + sTitle = "Footpad"; break; + + case 10: + sTitle = "Rogue"; break; + + case 11: + sTitle = "Cutpurse"; break; + + case 12: + sTitle = "Thief"; break; + + case 13: + sTitle = "Pilferer"; break; + + case 14: + sTitle = "Robber"; break; + + case 15: + sTitle = "Sharper"; break; + + case 16: + sTitle = "Burglar"; break; + + case 17: + sTitle = "Filcher"; break; + + case 18: + sTitle = "Scoundrel"; break; + + case 19: + sTitle = "Knave"; break; + + case 20: + sTitle = "Prowler"; break; + + default: + sTitle = "Master Rogue"; break; + + } + + case CLASS_TYPE_BARD: + switch(nLevel) + { + case 1: case 2: case 3: + sTitle = "Crier" ; + break; + + case 4: case 5: + if (nGender == 1) + {sTitle = "Chantress"; break;} + else + {sTitle = "Chanter"; break;} + + case 6: + sTitle = "Skop"; break; + + case 7: + sTitle = "Accompanist"; break; + + case 8: + sTitle = "Rhymer"; break; + + case 9: + sTitle = "Singer"; break; + + case 10: + sTitle = "Balladeer"; break; + + case 11: + if (nGender == 1) + {sTitle = "Cantoress"; break;} + else + {sTitle = "Cantor"; break;} + + case 12: + sTitle = "Lutenist"; break; + + case 13: + sTitle = "Melodist"; break; + + case 14: + sTitle = "Lyrist"; break; + + case 15: + sTitle = "Jongleur"; break; + + case 16: + sTitle = "Loreweaver"; break; + + case 17: + sTitle = "Chronicler"; break; + + case 18: + sTitle = "Muse"; break; + + case 19: + if (nGender == 1) + {sTitle = "Rhapsode"; break;} + else + {sTitle = "Rhapsodist"; break;} + + case 20: + sTitle = "Bard"; break; + + case 21: + sTitle = "Raconteur"; break; + + case 22: + sTitle = "Siren"; break; + + case 23: + sTitle = "Songsmith"; break; + + case 24: + sTitle = "Versifer"; break; + + case 25: + sTitle = "Minstrel"; break; + + case 26: + sTitle = "Sonneteer"; break; + + case 27: + if (nGender == 1) + {sTitle = "Trobairitz"; break;} + else + {sTitle = "Troubadour"; break;} + + case 28: + sTitle = "Citharist"; break; + + case 29: + sTitle = "High Minstrel"; break; + + default: + sTitle = "Master Bard"; break; + + } + + case CLASS_TYPE_SORCERER: + case CLASS_TYPE_WIZARD: + switch(nLevel) + { + case 1: case 2: case 3: + sTitle = "Apprentice" ; + break; + + case 4: case 5: + sTitle = "Adept"; break; + + case 6: + sTitle = "Journeymage"; break; + + case 7: + sTitle = "Hedge Mage"; break; + + case 8: + sTitle = "Magician"; break; + + case 9: + sTitle = "Prestidigitator"; break; + + case 10: + sTitle = "Wizard"; break; + + case 11: + sTitle = "Sage"; break; + + case 12: + sTitle = "Visionary"; break; + + case 13: + sTitle = "Loremaster"; break; + + case 14: + sTitle = "Mage"; break; + + case 15: + sTitle = "Fatespinner"; break; + + case 16: + sTitle = "Cabalist"; break; + + case 17: + sTitle = "Thaumaturge"; break; + + case 18: + sTitle = "Theurgist"; break; + + case 19: + sTitle = "Augur"; break; + + case 20: + sTitle = "Spellbinder"; break; + + default: + sTitle = "Archmage"; break; + + } + + case CLASS_TYPE_CLERIC: + switch(nLevel) + { + case 1: case 2: case 3: + sTitle = "Candidate" ; + break; + + case 4: case 5: + sTitle = "Aspirant"; break; + + case 6: + sTitle = "Novice"; break; + + case 7: + sTitle = "Acolyte"; break; + + case 8: + sTitle = "Initiate"; break; + + case 9: + if (nGender == 1) + {sTitle = "Priestess"; break;} + else + {sTitle = "Priest"; break;} + + case 10: + sTitle = "Cleric"; break; + + case 11: + sTitle = "Curate"; break; + + case 12: + sTitle = "Apostle"; break; + + case 13: + sTitle = "Ovate"; break; + + case 14: + sTitle = "Missionary"; break; + + case 15: + if (nGender == 1) + {sTitle = "Canoness"; break;} + else + {sTitle = "Canon"; break;} + + case 16: + if (nGender == 1) + {sTitle = "Abbotess"; break;} + else + {sTitle = "Abbot"; break;} + + case 17: + sTitle = "Bishop"; break; + + case 18: + if (nGender == 1) + {sTitle = "Matriarch"; break;} + else + {sTitle = "Patriarch"; break;} + + case 19: + sTitle = "Preacher"; break; + + default: + if (nGender == 1) + {sTitle = "High Priestess"; break;} + else + {sTitle = "High Priest"; break;} + + } + + case CLASS_TYPE_DRUID: + switch(nLevel) + { + case 1: case 2: case 3: + sTitle = "Initiate" ; + break; + + case 4: case 5: + sTitle = "Devotee"; break; + + case 6: + sTitle = "Beastling"; break; + + case 7: + sTitle = "Grovelurker"; break; + + case 8: + sTitle = "Shaper"; break; + + case 9: + sTitle = "Springwalker"; break; + + case 10: + sTitle = "Druid"; break; + + case 11: + sTitle = "Naturekin"; break; + + case 12: + sTitle = "Treewarden"; break; + + case 13: + sTitle = "Auspex"; break; + + case 14: + sTitle = "Haruspex"; break; + + case 15: + sTitle = "Student of Stones"; break; + + case 16: + sTitle = "Student of Waters"; break; + + case 17: + sTitle = "Student of Forests"; break; + + case 18: + sTitle = "Student of Winds"; break; + + case 19: + sTitle = "Student of Changes"; break; + + case 20: + sTitle = "Pathwarden"; break; + + default: + sTitle = "Archdruid"; break; + + } + + case CLASS_TYPE_FIGHTER: + switch(nLevel) + { + case 1: case 2: case 3: + sTitle = "Guard"; + break; + + case 4: + sTitle = "Elite Guard"; break; + + case 5: case 6: + sTitle = "Warrior"; break; + + case 7: + sTitle = "Elite Warrior"; break; + + case 8: + sTitle = "Soldier"; break; + + case 9: + sTitle = "Enforcer"; break; + + case 10: + sTitle = "Fighter"; break; + + case 11: + sTitle = "Skirmisher"; break; + + case 12: + sTitle = "Veteran"; break; + + case 13: + sTitle = "Armiger"; break; + + case 14: + sTitle = "Myrmidon"; break; + + case 15: + sTitle = "Hero"; break; + + case 16: + sTitle = "Vanguard"; break; + + case 17: + sTitle = "Sentinel"; break; + + case 18: + sTitle = "Dominator"; break; + + case 19: + sTitle = "Warmonger"; break; + + case 20: + sTitle = "Champion"; break; + + default: + sTitle = "Grandmaster"; break; + + } + + case CLASS_TYPE_MONK: + switch(nLevel) + { + case 1: + sTitle = "Trainee"; break; + + case 2: + sTitle = "Initiate"; break; + + case 3: + sTitle = "Novice"; break; + + case 4: + sTitle = "Neophyte"; break; + + case 5: + sTitle = "Aspirant"; break; + + case 6: + sTitle = "Acolyte"; break; + + case 7: + sTitle = "Devotee"; break; + + case 8: + sTitle = "Disciple"; break; + + case 9: + sTitle = "Adept"; break; + + case 10: + sTitle = "Ascetic"; break; + + case 11: + sTitle = "Pilgrim"; break; + + case 12: + sTitle = "Master"; break; + + case 13: + sTitle = "Anchorite"; break; + + case 14: + sTitle = "Mystic"; break; + + case 15: + sTitle = "Meditator"; break; + + case 16: + sTitle = "Seeker"; break; + + case 17: + sTitle = "Guru"; break; + + case 18: + sTitle = "Sensei"; break; + + case 19: + sTitle = "Sannyasi"; break; + + case 20: + sTitle = "Exemplar"; break; + + case 21: + sTitle = "Transcendent"; break; + + default: + sTitle = "High Master"; break; + + } + + case CLASS_TYPE_PALADIN: + switch(nLevel) + { + case 1: + sTitle = "Advocate"; break; + + case 2: + sTitle = "Initiate"; break; + + case 3: + sTitle = "Squire"; break; + + case 4: + sTitle = "Gallant"; break; + + case 5: + sTitle = "Emissary"; break; + + case 6: + sTitle = "Guardian"; break; + + case 7: + sTitle = "Devotee"; break; + + case 8: + sTitle = "Disciple"; break; + + case 9: + sTitle = "Adept"; break; + + case 10: + sTitle = "Ascetic"; break; + + case 11: + sTitle = "Pilgrim"; break; + + case 12: + sTitle = "Master"; break; + + case 13: + sTitle = "Anchorite"; break; + + case 14: + sTitle = "Mystic"; break; + + case 15: + sTitle = "Meditator"; break; + + case 16: + sTitle = "Seeker"; break; + + case 17: + sTitle = "Guru"; break; + + case 18: + sTitle = "Sensei"; break; + + case 19: + sTitle = "Sannyasi"; break; + + case 20: + sTitle = "Exemplar"; break; + + case 21: + sTitle = "Transcendent"; break; + + default: + sTitle = "High Master"; break; + + } + + case CLASS_TYPE_RANGER: + switch(nLevel) + { + case 1: case 2: case 3: + sTitle = "Greenhorn" ; + break; + + case 4: case 5: + sTitle = "Tenderfoot"; break; + + case 6: + sTitle = "Vagrant"; break; + + case 7: + sTitle = "Tramp"; break; + + case 8: + sTitle = "Nomad"; break; + + case 9: + sTitle = "Wanderer"; break; + + case 10: + sTitle = "Ranger"; break; + + case 11: + sTitle = "Rambler"; break; + + case 12: + sTitle = "Traveler"; break; + + case 13: + sTitle = "Sojourner"; break; + + case 14: + sTitle = "Outrider"; break; + + case 15: + sTitle = "Wayfarer"; break; + + case 16: + sTitle = "Excursionist"; break; + + case 17: + sTitle = "Trekker"; break; + + case 18: + sTitle = "Trailblazer"; break; + + case 19: + sTitle = "Woodsman"; break; + + case 20: + sTitle = "High Ranger"; break; + + case 21: + sTitle = "Ranger"; break; + + case 22: + sTitle = "Rambler"; break; + + case 23: + sTitle = "Traveler"; break; + + case 24: + sTitle = "Sojourner"; break; + + case 25: + sTitle = "Outrider"; break; + + case 26: + sTitle = "Wayfarer"; break; + + case 27: + sTitle = "Excursionist"; break; + + case 28: + sTitle = "Trekker"; break; + + case 29: + sTitle = "Trailblazer"; break; + + default: + sTitle = "Ranger Lord"; break; + + } + + } + + return sTitle; +} + +//::void main (){} diff --git a/src/module/nss/no_c2_default7.nss b/src/module/nss/no_c2_default7.nss new file mode 100644 index 0000000..59724bf --- /dev/null +++ b/src/module/nss/no_c2_default7.nss @@ -0,0 +1,963 @@ +/////////////////////////////////////////////////////////////////////////////// +// no_c2_default7 + +/////////////////////////////////////////////////////////////////////////////// +// +// DMG experience rewards modification +/* +ScrewTape's script mimicking the XP Rewards from pp 36-39, DMG v3.5 + - base awards replicate tables on pp 37 of the DMG +*/ +//::////////////////////////////////////////////////// +//:: Modifier: ScrewTape +//:: Original Modification: 02/19/04 +//:: Latest Revision: 05/19/04 +//::////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////// +// *****INSTRUCTIONS***** + +// This script encapsulates all of the DMG XP table functionality in a +// script that can be called from a custom OnDeath script by adding a call, +// ExecuteScript("no_c2_default7", OBJECT_SELF); If your script already has a +// return for oKiller == OBJECT_SELF, then +// ExecuteScript("no_c2_default7", OBJECT_SELF); +// is all you need to add (like Jassper's AI). +// For any other custom OnDeath scripts that DO NOT have the return on +// OBJECT_SELF, after object oKiller = GetLastKiller();, +// add (without the /* */) +/* +// ============================================================================ +// Start of modified behavior + // Per discussions with Sotae, we don't want to run this script the second + // time we get here (since we killed ourself a second time to bypass + // Bioware's XP system). + if (oKiller == OBJECT_SELF) + { + return; + } +// End of modified behavior +// ============================================================================ +*/ + +// There is also a trap exploit fix in OnDeath that you may want. +/* +// ============================================================================ +// Start of modified behavior + // penalize trap creators for killing commoners + // Thanks to *** arQon *** for this idea + // Update - modified so any associate of the trap creator will get the + // alignment shift + if (GetIsObjectValid(GetTrapCreator(oKiller))) + AdjustAlignment(GetTrapCreator(oKiller), ALIGNMENT_EVIL, 5); +// End of modified behavior +// ============================================================================ +*/ + +// And towards the end (any where after early returns is ok, but your custom +// OnDeath may recommend the proper place) add +/* +// ============================================================================ +// Start of modified behavior + ExecuteScript("no_c2_default7", OBJECT_SELF); +// End of modified behavior +// ============================================================================ +*/ + +// All three modifications are preceded by + +// ============================================================================ +// Start of modified behavior +// [modified code] + +// and followed by +// End of modified behavior +// ============================================================================ + +// just to make it obvious what is Bioware code and what is my (ScrewTape's) +// modifications + +// below is an example of Bioware's OnDeath using +// ExecuteScript("no_c2_default7", OBJECT_SELF); to award XP + +/* +// ============================================================================ +// NW_C2_DEFAULT7 default behavior + +#include "x2_inc_compon" +#include "x0_i0_spawncond" + +void main() +{ + int nClass = GetLevelByClass(CLASS_TYPE_COMMONER); + int nAlign = GetAlignmentGoodEvil(OBJECT_SELF); + object oKiller = GetLastKiller(); +// ============================================================================ +// Start of modified behavior + // Per discussions with Sotae, we don't want to run this script the second + // time we get here (since we killed ourself a second time to bypass + // Bioware's XP system). + if (oKiller == OBJECT_SELF) + { + return; + } +// End of modified behavior +// ============================================================================ + + // If we're a good/neutral commoner, + // adjust the killer's alignment evil + if(nClass > 0 && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL)) + { + AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5); +// ============================================================================ +// Start of modified behavior + // penalize trap creators for killing commoners + // Thanks to *** arQon *** for this idea + // Update - modified so any associate of the trap creator will get the + // alignment shift + if (GetIsObjectValid(GetTrapCreator(oKiller))) + AdjustAlignment(GetTrapCreator(oKiller), ALIGNMENT_EVIL, 5); +// End of modified behavior +// ============================================================================ + } + + // Call to allies to let them know we're dead + SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK); + + //Shout Attack my target, only works with the On Spawn In setup + SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK); + + // NOTE: the OnDeath user-defined event does not + // trigger reliably and should probably be removed + if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(1007)); + } + craft_drop_items(oKiller); + +// ============================================================================ +// Start of modified behavior + ExecuteScript("no_c2_default7", OBJECT_SELF); +// End of modified behavior +// ============================================================================ +} +// end of NW_C2_DEFAULT7 default behavior +*/ + +/////////////////////////////////////////////////////////////////////////////// +// no_c2_default7 + +/////////////////////////////////////////////////////////////////////////////// +// +// DMG experience rewards modification +/* +ScrewTape's script mimicking the XP Rewards from pp 36-39, DMG v3.5 + - base awards replicate tables on pp 37 of the DMG +*/ +//::////////////////////////////////////////////////// +//:: Modifier: ScrewTape +//:: Original Modification: 02/19/04 +//:: Latest Revision: 05/19/04 +//::////////////////////////////////////////////////// + +// Below are the tweaking modifiers, used to adjust the amount of XP awarded. +// Recommended N_MODULE_SLIDER settings are 17 for 1st level modules, 10-15 +// for 2nd-5th, and 7-10 for higher level modules. That should keep you in the +// ballpark of the Bioware awards. NOTE: the actual module slider has +// NO EFFECT on these awards and consequently does NOT need to be set to zero. +// (Setting is irrelevant - see below). + +// B_BYPASS_BIOWARE_XP - +// It is not neccessary to set the module's XP slider to zero. I incorporated +// an idea by TethyrDarknight to bypass both the slider and the double +// message for xp. Note: you won't be able to compare this system with the +// default Bioware awards with this implemented. If you want to do that, +// set both module sliders the same (the variable below and the actual module +// slider) and comment out the next line of code and uncomment the one +// following it. +const int B_BYPASS_BIOWARE_XP = TRUE; // recommended setting +// const int B_BYPASS_BIOWARE_XP = FALSE; // for comparison + +// N_MODULE_SLIDER - +// Use this just as you would use a module's xp slider +// set to 10 for normal xp - when using 2da's this will be exactly the +// same, barring other considerations like henchmen, multiplayer, multiclass, +// etc. If your using the DMG tables, 10 equates to 10%, which will be +// slightly higher than the Bioware awards. 100 will match the DMG tables. +const int N_MODULE_SLIDER = 10; + +// B_USE_MULTICLASS_PENALTY - +// This is a boolean (set to TRUE (1) or FALSE (O)) +// to decide whether or not to enforce Bioware's multi class penalty. +// Idea taken from Bioware scripting forum post by Ima Dufus +// FALSE would be like the DMG +const int B_USE_MULTICLASS_PENALTY = FALSE; // DMG accurate setting +// const int B_USE_MULTICLASS_PENALTY = TRUE; // alternate setting + +// B_COUNT_ASSOCIATES - +// Per Trickster's request, I included an option to count the players' other +// associates, summoned/familiar/companion/dominated. In doing so, I realized +// I wasn't adhering to the DMG's notes regarding "creatures that enemies +// summon or otherwise add to their forces with magic powers. An ememy's +// ability to summon or add these creatures is a part of the enemy's CR +// already." pp 37, just below the steps to determine the XP award. So I +// included that in the option. These two options seemed to be tied together, +// that is, if I count the party's associate types when determining total +// party members to divide experience by, I should also award XP for enemies' +// associates and on the other hand, if I don't count the party's associates +// (except henchmen), I shouldn't award XP for enemies' associates. +const int B_COUNT_ASSOCIATES = FALSE; // DMG Accurate +// const int B_COUNT_ASSOCIATES = TRUE; // alternate setting + +// B_COUNT_HENCHMEN - +// And why not allow the same option for henchmen +const int B_COUNT_HENCHMEN = TRUE; // recommended setting +// const int B_COUNT_HENCHMEN = FALSE; // alternate setting + +// B_AWARD_DEAD_PLAYERS +// Allow dead/dying players to receive awards (per DMG, pp 41 'DEATH AND +// EXPERIENCE POINTS') but leave the option to disable. + const int B_AWARD_DEAD_PLAYERS = TRUE; // DMG accurate setting +//const int B_AWARD_DEAD_PLAYERS = FALSE; // alternate setting + +#include "inc_prc_ecl" + +/////////////////////////////////////////////////////////////////////////////// +// GetXPFromTable, inputs: level and CR, output: experience points +int GetXPFromDMGTable(int nLevel, float fCR); + +/////////////////////////////////////////////////////////////////////////////// +// IsPlayerEligible, input: player object, output: TRUE or FALSE +int IsPlayerEligible(object oPlayer) +{ + if (B_AWARD_DEAD_PLAYERS) + return GetArea(GetObjectByTag("NW_DEATH_TEMPLE")) == GetArea(oPlayer) || + GetDistanceBetween(OBJECT_SELF, oPlayer) < 50.0f; + + return GetArea(OBJECT_SELF) == GetArea(oPlayer) && + GetIsInCombat(oPlayer) && GetCurrentHitPoints(oPlayer) > 0; +} + +/////////////////////////////////////////////////////////////////////////////// +// GetHitDiceByXP +// Solve for hd from xp = hd * (hd - 1) * 500 +// hd = 1/50 * (sqrt(5) * sqrt(xp + 125) + 25) +int GetHitDiceByXP(float fXP) +{ + return FloatToInt(0.02 * (sqrt(5.0f) * sqrt(fXP + 125.0f) + 25.0f)); +} + +/////////////////////////////////////////////////////////////////////////////// +// no_c2_default7, inputs: the killing object, outputs: none (returned) +void main() +{ + // We'll start by declaring (and sometimes getting) our variables + // OBJECT_SELF is initialized by the call to ExecuteScript + object oKiller = GetLastKiller(); + int nPartyMembers = 0; + int nIndex = 0; + int nLevel = 0; + int nXP = 0; + int nHoldXP = 0; + int nAssociateType = 0; + float fTotalXP = 0.0f; + float fScale = 1.0f; + float fCR = GetChallengeRating(OBJECT_SELF); + object oMaster = GetMaster(oKiller); + object oMember; + + // Update 5/19/04 - make sure we check the actual master in case we have a + // henchman or other associate who also has an associate (for example, + // henchman is a wizard and has a familiar or has summoned a creature). + // Update 07/12/04 thanks to ***RodneyOrpheus*** fixed nasty bug here + while (GetIsObjectValid(oMaster)) + { + oKiller = oMaster; + oMaster = GetMaster(oKiller); + } + + // This gets rid of the double experience awards (will also override + // module's XP slider, so it doesn't need to be set to zero) + // Thanks to *** TethyrDarknight *** for this idea + if (B_BYPASS_BIOWARE_XP) + { + if (GetIsPC(oKiller) || GetIsPC(GetTrapCreator(oKiller))) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, + EffectResurrection(), OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_INSTANT, + EffectDamage((GetCurrentHitPoints() * 2)), OBJECT_SELF); + } + } + + // Sanity check - should only happen if creature is invalid + // No point in calculating any more if CR is less than or = to 0 + // or if the script's module slider is set to 0 + if (fCR <= 0.0 || N_MODULE_SLIDER == 0) + return; + + // Before we start calculating XP, let's check to see if we are a controlled + // type* of someone else. * summoned/familiar/companion/dominated + // Update 8/5/04 - thanks ***Belial Prime*** - we were hitting this check on + // DM controlled enemies, where we should still be awarding xp. + // Used GetAssociateType instead of GetMaster. + if (B_COUNT_ASSOCIATES == FALSE && + GetAssociateType(OBJECT_SELF) != ASSOCIATE_TYPE_NONE) + return; + + // This will also ensure we award XP for traps. + // Thanks to *** Sotae *** for this idea + if (GetIsObjectValid(GetTrapCreator(oKiller))) + oKiller = GetTrapCreator(oKiller); + + // First let's determine the number of members in the party. The values of + // B_COUNT_HENCHMEN and B_COUNT_ASSOCIATES will determine whether or not + // we count henchman and other associates when determining the total number + // of party members to divide the Total XP award by. Although the DMG + // doesn't specify for players, the DMG does specify for that for enemies, + // we don't count xp separately for their creatures added to their forces. + // Since henchman can play such a big role, I recommend counting them. + // Note: I don't award XP to associates, I just use them in determining + // the factor to divide the total XP if specified. + oMember = GetFirstFactionMember(oKiller); // this only returns PC's + while (GetIsObjectValid(oMember)) + { + // sanity check - first let's see if the PC member is in the same area as + // the creature just killed and if the member was in combat. This way, + // if the member's in the area, but not in combat - we won't include + // him. It should be noted, there's a delay after an enemy is killed and + // before a PC is no longer in combat. (Try resting immediately after + // you've killed an enemy, and also note the music). This delay is + // sufficient for us to count XP. Handy! Note: this delay does NOT occur + // if the player is dead, so dead members will NOT be awarded XP. + if (IsPlayerEligible(oMember)) + { + // add the PC him/herself + nPartyMembers++; + + // We'll treat henchmen separately from the other associates, as, + // since version 1.59, you can have more than one henchman. + if (B_COUNT_HENCHMEN) + { + // Loop through the available henchmen and see if he's got 'em + // Update 08/05/04 - fixed off by one error in the comparison + for (nIndex = 1; nIndex <= GetMaxHenchmen(); nIndex++) + { + if (GetIsObjectValid(GetHenchman(oMember, nIndex))) + nPartyMembers++; // increment by number of henchmen + } + } + + // According to the lexicon, henchman is the only associate type + // that the PC's can have more than one of, so we'll make a simple + // check once for each type. I looked in the nwscript.nss file, and + // the associate types range from 0 - 5 (where 0 is none, 1 is + // henchmen and 2 - 5 are the one's we are interested in) + if (B_COUNT_ASSOCIATES) + { + // loop through each associate type, not including henchmen + for (nAssociateType = ASSOCIATE_TYPE_ANIMALCOMPANION; + nAssociateType <= ASSOCIATE_TYPE_DOMINATED; nAssociateType++) + { + if (GetIsObjectValid(GetAssociate(nAssociateType, oMember))) + nPartyMembers++; // increment by number of associates + } + } + + } // end if (IsPlayerEligible(oMember)) + + // get the next guy in the PC's party + oMember = GetNextFactionMember(oMember); + } // end while (GetIsObjectValid(oMember)) + + // Sanity check - this shouldn't happen, but in case it does... + // this will also prevent a divide by zero below + if (nPartyMembers < 1) + return; + + // According to the DMG, there are 6 steps. The 6th step is a loop, so + // we'll start with that. (why didn't we start yet - because we needed to + // know the total party members first) + oMember = GetFirstFactionMember(oKiller); + while (GetIsObjectValid(oMember)) + { + // same check as before + if (IsPlayerEligible(oMember)) + { + // Step 1. determine character level + // Update 08/05/04 - thanks ***Belial Prime*** We want to get level + // by xp, to discourage pcs from waiting to level +// nLevel = GetHitDiceByXP(IntToFloat(GetXP(oMember))); + nLevel = GetECL(oMember); + + // Step 2. get the monster's fCR + // fCR = GetChallengeRating(OBJECT_SELF); // we've already done this + + // Step 3. consult the table and adjust using N_MODULE_SLIDER + // Update 08/05/04 - go back to using rounding instead of truncation + fScale = IntToFloat(N_MODULE_SLIDER) / 100.0f; + fTotalXP = IntToFloat(GetXPFromDMGTable(nLevel, fCR)) * fScale; + + // Step 4. divide the XP by the number of party members + // we did the sanity check above, so we can't get DIV/0 + nXP = FloatToInt(fTotalXP / IntToFloat(nPartyMembers) + 0.5f); + + // Step 5 is taken care of by calling this script when each + // monster's OnDeath script gets called (this one) + + // Award the XP to the PC - always award at least 1 xp so we know the + // awards are working + if (nXP <= 0) + nXP = 1; + + // use the standard bioware penalty for multi-class characters + if (B_USE_MULTICLASS_PENALTY) + GiveXPToCreature(oMember, nXP); + + // or use get and set to bypass the multi-class penalty + // Thanks to *** Ima Dufus *** for this idea + else + { + // we'll get the current xp + nHoldXP = GetXP(oMember); + + // add them to our newly calculated xp + nXP += nHoldXP; + + // and re-assign the total, + // thus bypassing the multi-class penalty + SetXP(oMember, nXP); + } + + } // end if (IsPlayerEligible(oMember)) + + // Step 6. get the next guy + oMember = GetNextFactionMember(oMember); + } // end while (GetIsObjectValid(oMember)) +} + + +/////////////////////////////////////////////////////////////////////////////// +// GetXPFromDMGTable, inputs: level and CR, outputs: experience points +int GetXPFromDMGTable(int nLevel, float fCR) +{ + // I wanted to try and mimic the DMG tables, including how to + // calculate XP for less than CR 1 and CR above 20, per the DMG's + // notes and to account for character levels above 20, which is NOT in + // the DMG. + + // this is what we'll determine, the final result + int nXP = 0; + + // this is the base XP for defeating an enemy with a CR equal to the + // character's level + int nBaseXP = 300; + + // Let's change the CR to an integer (we'll lose precision here, but it + // should only matter for CR < 1, which we don't want to calculate unless + // we first determine if it's warranted to even award XP + int nCR = FloatToInt(fCR); + + // according to the DMG - the table doesn't support XP for monsters that are + // 8 CR ratings lower or higher than the characters level (see below) + int nAbsDifference = abs(nLevel - nCR); + + // used for CR > 20 + int nMultiplier = 1; + + // used for Level > 20 + float fModifier = 1.0f; + + // if the difference in CR and Level is greater than 7, then we don't reward + // XP. The DMG assume's it's not a challenge for Level > CR and must be + // divine fortune in the case of CR > Level. + // Note: this isn't entirely DMG accurate. The difference is determined + // in this script BEFORE we start treating 1st and 2nd level characters + // as 3rd level characters. According to the DMG, a 1st and 2nd level + // character would be awarded XP for up to a CR 10 monster. Making this + // check prior to treating 1st and 2nd level characters as 3rd removes + // the XP award for both CR 9 and 10 from a 1st level character and + // removes the XP award for CR 10 from a 2nd level character. Originally, + // this was a mistake, however, I thought it a good mistake, so I left it. + // This is an extreme corner case where it is highly unlikely for the + // players to survive anyway. Let me know if you don't agree. I also + // thought leaving this mistake in would help discourage high level party's + // from trying to drag around 1st level characters to exploit the DMG's + // benefits to lower level party members. + if (nAbsDifference > 7) + { + return 0; + } + + // Otherwise, if the CR equals the level, which is the same as the bold + // entries in the table, we can award the base XP and we're done. + else if (nAbsDifference == 0) + { + return nBaseXP * nCR; + } + + // For CR < 1, we'll treat it as 1 and multiply the result by our float CR + // at the end, per our DMG notes. + if (nCR == 0) + { + nCR = 1; + } + + // The table treats 1st - 3rd level characters the same (see notes above) + if (nLevel < 3) + { + nLevel = 3; + } + + // The DMG does not handle character levels above 20, so, rather than always + // returning 0 XP, we'll have a special case to handle player levels > 20. + // The DMG tables ratio of XP to CR/Level increases as levels go up. For + // example, at CR 11, with a 4th level character, the XP is about 3.9 times + // optimum. However, at CR 20, for a 13th level character, XP is nearly 8 + // times as high. So, I've assumed a fixed ratio, based on the CR 20 + // column, with the upper XP based off what the ratio would scale down to + // for the higher levels from the pattern from CR 11 to CR 20. + + // Note: it's not normally good practice to compact lines of code, but in + // this particular case, it's pretty obvious what I'm doing, so I'm going + // to use the compacted style case to reduce the number of visual lines. + if (nLevel > 20) + { + // setup our default value + nXP = nBaseXP * nCR; + + // we've already handled when they are equal and where they are greater + // that 7 levels of difference above + switch (nLevel - nCR) + { + case -7: fModifier = 8.0f; break; + case -6: fModifier = 6.0f; break; + case -5: fModifier = 5.0f; break; + case -4: fModifier = 3.5f; break; + case -3: fModifier = 3.0f; break; + case -2: fModifier = 2.0f; break; + case -1: fModifier = 1.5f; break; + case 0: fModifier = 1.0f; break; + case 1: fModifier = 0.7f; break; + case 2: fModifier = 0.5f; break; + case 3: fModifier = 0.4f; break; + case 4: fModifier = 0.3f; break; + case 5: fModifier = 0.2f; break; + case 6: fModifier = 0.15f; break; + case 7: fModifier = 0.10f; break; + default: fModifier = 1.0f; break; // already taken care of + } + + // return the modified value + return FloatToInt(IntToFloat(nXP) * fModifier); + } + + // This next bit is used for > 20 CR. According to the DMG notes just below + // the tables on page 38 - we double the reward for a CR 2 levels below the + // desired CR, for instance, CR 21 is calculated as CR 19 with a + // multiplier of 2, CR 22 is calculated as CR 20 with a multiplier of 4, + // and CR 26 is calculated as CR 20 with a multiplier of 16 (basically, + // all even CRs will calculate at CR 20 with a multiplier and odd + // CRs will calculate at CR 19 with a multiplier). + if (nCR > 20) + { + while (nCR > 20) + { + nMultiplier *= 2; // this may get excessive - if so, use '+= 2' + nCR -= 2; + } + } + + // Now, we got this far, and it's ok to award XP, let's "lookup" the XP from + // the table - we'll deal with < 1 CR at the end of CR 1 - that's the only + // place we'll need it. The first switch is the CR (table columns) and the + // nested switches are the character level (table rows). CR 1, CR 19 and CR + // 20 have optional manipulations and thus use the standard case, + // statement, and break. The break is not necessary for the other CR cases + // as we can simply return the XP at each case. As I mentioned before, I'm + // using the compacted style case to reduce the number of visual lines. + + // start with column 1, CR 1 + switch (nCR) + { + case 1: // CR 1 (or < 1) + switch (nLevel) // character level (the rows) + { + case 3: // Level 3-6 are the same + case 4: + case 5: + case 6: nXP = 300; break; // this is the bold entry in the table and has + // already been handled, but I'm going to leave it in the tables for + // completeness. + case 7: nXP = 263; break; // Level 7 + case 8: nXP = 200; break; // Level 8 + // we've already handled the case where the CR rating is 8 levels above + // or below, but, it's good practice to always have a default case + default: return 0; + } + + // handle CR < 1 + if (fCR < 1.0f) + { + nXP = FloatToInt(IntToFloat(nXP) * fCR); + } + + // return the XP + return nXP; + + case 2: // CR 2 + switch (nLevel) // each case is the character level + { + case 3: // Level 3-4 are the same + case 4: return 600; // we can return XP at this point + case 5: return 500; + case 6: return 450; + case 7: return 350; + case 8: return 300; + case 9: return 225; + default: return 0; + } + + case 3: // CR 3 + switch (nLevel) // character level + { + case 3: return 900; + case 4: return 800; + case 5: return 750; + case 6: return 600; + case 7: return 525; + case 8: return 400; + case 9: return 338; + case 10: return 250; + default: return 0; + } + + case 4: // CR 4 + switch (nLevel) // character level + { + case 3: return 1350; + case 4: return 1200; + case 5: return 1000; + case 6: return 900; + case 7: return 700; + case 8: return 600; + case 9: return 450; + case 10: return 375; + case 11: return 275; + default: return 0; + } + + case 5: // CR 5 + switch (nLevel) // character level + { + case 3: return 1800; + case 4: return 1600; + case 5: return 1500; + case 6: return 1200; + case 7: return 1050; + case 8: return 800; + case 9: return 675; + case 10: return 500; + case 11: return 413; + case 12: return 300; + default: return 0; + } + + case 6: // CR 6 + switch (nLevel) // character level + { + case 3: return 2700; + case 4: return 2400; + case 5: return 2250; + case 6: return 1800; + case 7: return 1400; + case 8: return 1200; + case 9: return 900; + case 10: return 750; + case 11: return 550; + case 12: return 450; + case 13: return 325; + default: return 0; + } + + case 7: // CR 7 + switch (nLevel) // character level + { + case 3: return 3600; + case 4: return 3200; + case 5: return 3000; + case 6: return 2700; + case 7: return 2100; + case 8: return 1600; + case 9: return 1350; + case 10: return 1000; + case 11: return 825; + case 12: return 600; + case 13: return 488; + case 14: return 350; + default: return 0; + } + + case 8: // CR 8 + switch (nLevel) // character level + { + case 3: return 5400; + case 4: return 4800; + case 5: return 4500; + case 6: return 3600; + case 7: return 3150; + case 8: return 2400; + case 9: return 1800; + case 10: return 1500; + case 11: return 1100; + case 12: return 900; + case 13: return 650; + case 14: return 525; + case 15: return 375; + default: return 0; + } + + case 9: // CR 9 + switch (nLevel) // character level + { + case 3: return 7200; + case 4: return 6400; + case 5: return 6000; + case 6: return 5400; + case 7: return 4200; + case 8: return 3600; + case 9: return 2700; + case 10: return 2000; + case 11: return 1650; + case 12: return 1200; + case 13: return 975; + case 14: return 700; + case 15: return 563; + case 16: return 400; + default: return 0; + } + + case 10: // CR 10 + switch (nLevel) // character level + { + case 3: return 10800; // lucky player!! + case 4: return 9600; + case 5: return 9000; + case 6: return 7200; + case 7: return 6300; + case 8: return 4800; + case 9: return 4050; + case 10: return 3000; + case 11: return 2200; + case 12: return 1800; + case 13: return 1300; + case 14: return 1050; + case 15: return 750; + case 16: return 600; + case 17: return 425; + default: return 0; + } + + case 11: // CR 11 + switch (nLevel) // character level + { + case 4: return 12800; + case 5: return 12000; + case 6: return 10800; + case 7: return 8400; + case 8: return 7200; + case 9: return 5400; + case 10: return 4500; + case 11: return 3300; + case 12: return 2400; + case 13: return 1950; + case 14: return 1400; + case 15: return 1125; + case 16: return 800; + case 17: return 638; + case 18: return 450; + default: return 0; + } + + case 12: // CR 12 + switch (nLevel) // character level + { + case 5: return 18000; + case 6: return 14400; + case 7: return 12600; + case 8: return 9600; + case 9: return 8100; + case 10: return 6000; + case 11: return 4950; + case 12: return 3600; + case 13: return 2600; + case 14: return 2100; + case 15: return 1500; + case 16: return 1200; + case 17: return 850; + case 18: return 675; + case 19: return 475; // 12 + 15 = 27 comparisons + default: return 0; + } + + case 13: // CR 13 + switch (nLevel) // character level + { + case 6: return 21600; + case 7: return 16800; + case 8: return 14400; + case 9: return 10800; + case 10: return 9000; + case 11: return 6600; + case 12: return 5400; + case 13: return 3900; + case 14: return 2800; + case 15: return 2250; + case 16: return 1600; + case 17: return 1275; + case 18: return 900; + case 19: return 713; + case 20: return 500; // worst case, 13 + 15 = 28 comparisons + default: return 0; + } + + case 14: // CR 14 + switch (nLevel) // character level + { + case 7: return 25200; + case 8: return 19200; + case 9: return 16200; + case 10: return 12000; + case 11: return 9900; + case 12: return 7200; + case 13: return 5850; + case 14: return 4200; + case 15: return 3000; + case 16: return 2400; + case 17: return 1700; + case 18: return 1350; + case 19: return 950; + case 20: return 750; // worst case, 14 + 14 = 28 comparisons + default: return 0; + } + + case 15: // CR 15 + switch (nLevel) // character level + { + case 8: return 28800; + case 9: return 21600; + case 10: return 18000; + case 11: return 13200; + case 12: return 10800; + case 13: return 7800; + case 14: return 6300; + case 15: return 4500; + case 16: return 3200; + case 17: return 2550; + case 18: return 1800; + case 19: return 1425; + case 20: return 1000; // worst case, 15 + 13 = 28 comparisons + default: return 0; + } + + case 16: // CR 16 + switch (nLevel) // character level + { + case 9: return 32400; + case 10: return 24000; + case 11: return 19800; + case 12: return 14400; + case 13: return 11700; + case 14: return 8400; + case 15: return 6750; + case 16: return 4800; + case 17: return 3400; + case 18: return 2700; + case 19: return 1900; + case 20: return 1500; // worst case, 16 + 12 = 28 comparisons + default: return 0; + } + + case 17: // CR 17 + switch (nLevel) // character level + { + case 10: return 36000; + case 11: return 26400; + case 12: return 21600; + case 13: return 15600; + case 14: return 12600; + case 15: return 9000; + case 16: return 7200; + case 17: return 5100; + case 18: return 3600; + case 19: return 2850; + case 20: return 2000; // worst case, 17 + 11 = 28 comparisons + default: return 0; + } + + case 18: // CR 18 + switch (nLevel) // character level + { + case 11: return 39600; + case 12: return 28800; + case 13: return 23400; + case 14: return 16800; + case 15: return 13500; + case 16: return 9600; + case 17: return 7650; + case 18: return 5400; + case 19: return 3800; + case 20: return 3000; // worst case, 18 + 10 = 28 comparisons + default: return 0; + } + + case 19: // CR 19 + switch (nLevel) // character level + { + case 12: nXP = 43200; break; + case 13: nXP = 31200; break; + case 14: nXP = 25200; break; + case 15: nXP = 18000; break; + case 16: nXP = 14400; break; + case 17: nXP = 10200; break; + case 18: nXP = 8100; break; + case 19: nXP = 5700; break; + case 20: nXP = 4000; break; // worst case, 19 + 9 = 28 comparisons + default: return 0; + } + + // adjust for > CR 20 + nXP = nMultiplier * nXP; + + // return the total + return nXP; + + case 20: // CR 20 + switch (nLevel) // character level + { + case 13: nXP = 46800; break; + case 14: nXP = 33600; break; + case 15: nXP = 27000; break; + case 16: nXP = 19200; break; + case 17: nXP = 15300; break; + case 18: nXP = 10800; break; + case 19: nXP = 8550; break; + case 20: nXP = 6000; break; // worst case, 20 + 8 = 28 comparisons + default: return 0; + } + + // adjust for > CR 20 + nXP = nMultiplier * nXP; + + // return the total + return nXP; + + } // phew! + + // we should never get here, but to keep the compiler happy, (all paths must + // have a return value), we'll return zero + return 0; +} + +// End of no_c2_default7 +// ============================================================================ diff --git a/src/module/nss/npc_town_store.nss b/src/module/nss/npc_town_store.nss new file mode 100644 index 0000000..3aba69b --- /dev/null +++ b/src/module/nss/npc_town_store.nss @@ -0,0 +1,9 @@ +void main() + { + object oPC = GetPCSpeaker(); + int iBargin = GetSkillRank(SKILL_APPRAISE,oPC) + GetSkillRank(SKILL_PERSUADE,oPC); + object oStore = GetNearestObjectByTag(GetTag(OBJECT_SELF)+"_Store"); + if (iBargin > 40) + iBargin = 40; + OpenStore(oStore,oPC,0,iBargin); + } diff --git a/src/module/nss/npc_town_store2.nss b/src/module/nss/npc_town_store2.nss new file mode 100644 index 0000000..46b4165 --- /dev/null +++ b/src/module/nss/npc_town_store2.nss @@ -0,0 +1,10 @@ + +void main() + { + object oPC = GetPCSpeaker(); + int iBargin = GetSkillRank(SKILL_APPRAISE,oPC) + GetSkillRank(SKILL_PERSUADE,oPC); + object oStore = GetNearestObjectByTag(GetTag(OBJECT_SELF)+"_Store"); + if (iBargin > 10) + iBargin = 10; + OpenStore(oStore,oPC,0,iBargin); + } diff --git a/src/module/nss/nw_c2_default1.nss b/src/module/nss/nw_c2_default1.nss new file mode 100644 index 0000000..d034fc9 --- /dev/null +++ b/src/module/nss/nw_c2_default1.nss @@ -0,0 +1,92 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_c2_default1 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnHeartbeat script; + This will usually fire every 6 seconds (1 game round). +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_module" +void main() +{ + // If not runnning normal or better AI then exit for performance reasons + if (GetAILevel(OBJECT_SELF) == AI_LEVEL_VERY_LOW) return; + + object oCreature = OBJECT_SELF; + if(AI_DEBUG) ai_Debug("nw_c2_default1", "16", GetName(oCreature) + " Heartbeat." + + " OnSpawn: " + IntToString(GetLocalInt(oCreature, AI_ONSPAWN_EVENT))); + // We run our OnSpawn in the heartbeat so the creator can use the original + // OnSpawn for their own use. If we have to recreate the creature then we + // skip the rest of the heartbeat since this version is being destroyed! + if(ai_OnMonsterSpawn(oCreature)) return; + if(AI_DEBUG) ai_Debug("nw_c2_default1", "16", GetName(oCreature) + " Heartbeat." + + " Searching: " + IntToString(GetLocalInt(oCreature, AI_AM_I_SEARCHING))); + if(ai_GetHasEffectType(oCreature, EFFECT_TYPE_SLEEP)) + { + // If we're asleep and this is the result of sleeping + // at night, apply the floating 'z's visual effect + // every so often + if(GetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT)) + { + effect eVis = EffectVisualEffect(VFX_IMP_SLEEP); + if(d10() > 6) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oCreature); + } + } + } + // Send the user-defined event signal if specified here so it doesn't get skipped. + if(GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT)) + { + SignalEvent(oCreature, EventUserDefined(EVENT_HEARTBEAT)); + } + if(ai_GetIsBusy(oCreature) || ai_Disabled(oCreature) || + GetLocalInt(oCreature, AI_AM_I_SEARCHING)) return; + if(ai_GetIsInCombat(oCreature)) + { + if(ai_GetBehaviorState(NW_FLAG_BEHAVIOR_HERBIVORE)) + { + object oTarget = ai_GetNearestEnemy(oCreature, 1, 7, 7, -1, -1, TRUE); + if(GetDistanceBetween(oCreature, oTarget) <= 6.0) + { + if(GetLevelByClass(CLASS_TYPE_DRUID, oTarget) == 0 && GetLevelByClass(CLASS_TYPE_RANGER, oTarget) == 0) + { + SetLocalString(oCreature, AI_COMBAT_SCRIPT, "ai_coward"); + ActionMoveAwayFromObject(oTarget, TRUE, AI_RANGE_LONG); + return; + } + } + } + ai_DoMonsterCombatRound(oCreature); + return; + } + if(ai_CheckForCombat(oCreature, TRUE)) return; + // If we have not set up our talents then we need to check to see if we should. + if(!GetLocalInt(oCreature, AI_TALENTS_SET)) + { + // We setup our talents when a PC gets withing Battlefield range 40.0 meters. + object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, oCreature, 1, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY); + if(oPC != OBJECT_INVALID && GetDistanceBetween(oCreature, oPC) <= AI_RANGE_BATTLEFIELD) + { + if(AI_DEBUG) ai_Debug("nw_c2_default1", "72", GetName(oCreature) + " is " + + FloatToString(GetDistanceBetween(oCreature, oPC), 0, 2) + " from " + GetName(oPC)); + if(AI_DEBUG) ai_Debug("nw_c2_default1", "74", GetName(oCreature) + " is Setting Creature Talents and buffing!"); + ai_SetupMonsterBuffTargets(oCreature); + // To save steps and time we set the talents while we buff! + ai_SetCreatureTalents(oCreature, TRUE); + ai_ClearBuffTargets(oCreature, "AI_ALLY_TARGET_"); + } + } + if(!IsInConversation (oCreature)) + { + if(GetWalkCondition(NW_WALK_FLAG_CONSTANT)) WalkWayPoints(); + if(GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS)) PlayMobileAmbientAnimations_NonAvian(); + else if(GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN)) PlayMobileAmbientAnimations_Avian(); + else if(GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS)) PlayImmobileAmbientAnimations(); + else if(GetLocalInt(GetModule(), AI_RULE_WANDER) && GetStandardFactionReputation(STANDARD_FACTION_HOSTILE, oCreature) > 89) + { + ai_AmbientAnimations(); + } + } + if(ai_TryHealing(oCreature, oCreature)) return; +} + diff --git a/src/module/nss/nw_c2_default2.nss b/src/module/nss/nw_c2_default2.nss new file mode 100644 index 0000000..b7d5e07 --- /dev/null +++ b/src/module/nss/nw_c2_default2.nss @@ -0,0 +1,138 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_c2_default2 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnPerception script when not in combat; + There are 4 types of perception - Heard, Inaudible, Seen, Vanished. + Only one type will ever be true in an event trigger. + The order of trigger is Heard/Seen and Inaudible/Vanished. + There are two states of percepion Heard and Seen. + These states can be set at the same time thus a heard event can see the creature. + Fires when ever one of these states changes from TRUE to FALSE or FALSE to TRUE. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + // * if not runnning normal or better AI then exit for performance reasons + //if (GetAILevel() == AI_LEVEL_VERY_LOW) return; + object oCreature = OBJECT_SELF; + ExecuteScript("prc_npc_percep", OBJECT_SELF); + if(AI_DEBUG) ai_Debug("nw_c2_default2", "19", "AI_ONSPAWN_EVENT: " + IntToString(GetLocalInt(oCreature, AI_ONSPAWN_EVENT))); + if(!GetLocalInt(oCreature, AI_ONSPAWN_EVENT)) return; + if(GetLastPerceptionSeen()) + { + if(AI_DEBUG) ai_Debug("nw_c2_default2", "22", GetName(oCreature) + " sees " + + GetName(GetLastPerceived()) + " Distance: " + + FloatToString(GetDistanceBetween(GetLastPerceived(), oCreature), 0, 2) + "."); + } + if(GetLastPerceptionHeard()) + { + if(AI_DEBUG) ai_Debug("nw_c2_default2", "28", GetName(oCreature) + " heard " + + GetName(GetLastPerceived()) + " Distance: " + + FloatToString(GetDistanceBetween(GetLastPerceived(), oCreature), 0, 2) + "."); + } + if(GetLastPerceptionVanished ()) + { + if(AI_DEBUG) ai_Debug("nw_c2_default2", "34", GetName(oCreature) + " lost sight of " + + GetName(GetLastPerceived ()) + "."); + } + // We do nothing on Inaudibles so drop out early! + if(GetLastPerceptionInaudible()) + { + if(AI_DEBUG) ai_Debug("nw_c2_default2", "41", GetName(oCreature) + " lost sound of " + + GetName(GetLastPerceived()) + "."); + return; + } + object oLastPerceived = GetLastPerceived(); + if(AI_DEBUG) ai_Debug("nw_c2_default2", "45", "Dead? " + IntToString(GetIsDead(oLastPerceived)) + + " Enemy? " + IntToString(GetIsEnemy(oLastPerceived, oCreature))); + if(ai_Disabled(oCreature)) return; + if(GetIsDead(oLastPerceived)) return; + int bSeen = GetLastPerceptionSeen(); + // This will cause all NPC's to speak their one-liner conversation + // on perception even if they are already in combat. + if(GetIsPC(oLastPerceived) && bSeen) + { + if(GetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION)) + { + SpeakOneLinerConversation(); + } + } + if(GetIsEnemy(oLastPerceived, oCreature)) + { + // ************************** ENEMY SEEN ******************************* + if(bSeen) + { + // If the creature we are perceiving was our invisible creature then + // remove that they are invisible. + if(oLastPerceived == GetLocalObject(oCreature, AI_IS_INVISIBLE)) + { + DeleteLocalObject(oCreature, AI_IS_INVISIBLE); + } + ai_MonsterEvaluateNewThreat(oCreature, oLastPerceived, AI_I_SEE_AN_ENEMY); + } + // ************************** ENEMY HEARD ****************************** + else if(GetLastPerceptionHeard()) + { + ai_MonsterEvaluateNewThreat(oCreature, oLastPerceived, AI_I_HEARD_AN_ENEMY); + } + // ************************** ENEMY VANISHED *************************** + else if(GetLastPerceptionVanished()) + { + // Lets keep a mental note of the invisible creature. + SetLocalObject(oCreature, AI_IS_INVISIBLE, oLastPerceived); + if(AI_DEBUG) ai_Debug("0e_c2_2_percept", "82", " We saw " + GetName(oLastPerceived) + " disappear!"); + if(ai_GetIsBusy(oCreature)) return; + // If in combat check to see if our target disappeared. + // If they have and we are not in melee with them then reevaluate combat + // since we lost our target. + if(ai_GetIsInCombat(oCreature)) + { + if(AI_DEBUG) ai_Debug("nw_c2_default2", "89", "Is this our target? " + + IntToString(ai_GetAttackedTarget(oCreature, TRUE, TRUE) == oLastPerceived)); + if(ai_GetAttackedTarget(oCreature, TRUE, TRUE) == oLastPerceived) + { + ai_DoMonsterCombatRound(oCreature); + } + } + // We are not in combat so lets move to that location and check it out. + else ActionMoveToLocation(GetLocation(oLastPerceived), TRUE); + // we use to move to the object but thats a bit creepy! + //else ActionMoveToObject(oLastPerceived, TRUE, AI_RANGE_CLOSE); + } + // ************************ ENEMY INAUDIBLE***************************** + // Not used. + } + else + { + // ************************ NON_ENEMY SEEN ***************************** + if(bSeen) + { + if(ai_GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) ai_DetermineSpecialBehavior(oCreature); + else if(GetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION) && GetIsPC(oLastPerceived)) + { + ActionStartConversation(oCreature); + } + } + } + if(!IsInConversation(oCreature)) + { + if(GetIsPostOrWalking()) + { + WalkWayPoints(); + } + else if(GetIsPC(oLastPerceived) && + (GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS) || + GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN) || + GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS) || + GetIsEncounterCreature())) + { + SetAnimationCondition(NW_ANIM_FLAG_IS_ACTIVE); + } + } + // Send the user-defined event if appropriate + if(GetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT) && bSeen) + { + SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_PERCEIVE)); + } +} diff --git a/src/module/nss/nw_c2_default3.nss b/src/module/nss/nw_c2_default3.nss new file mode 100644 index 0000000..567b327 --- /dev/null +++ b/src/module/nss/nw_c2_default3.nss @@ -0,0 +1,70 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_c2_default3 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnCombatRoundEnd event script; + Fires at the end of each combat round (6 seconds). + This will fire as long as oCreature is in combat (GetIsInCombat()). + This event starts counting once a combat action is started. + Every time a spell is cast it will queue another end combat round so haste with + two spells cast will fire this twice in one round. + It will also fire at the end of a hostile effect that stops actions i.e Stunned, Knockdown etc. + Action modes are also cleared prior to this event executing! + GetAttemptedAttackTarget() & GetAttemptedSpellTarget() also get cleared prior to this event. + This event can be canceled with ClearAllActions(TRUE) and SurrenderToEnemies. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + ExecuteScript("prc_npc_combat", OBJECT_SELF); + if(AI_DEBUG) ai_Debug("nw_c2_default3", "20", GetName(oCreature) + " ends combat round." + + " Current action: " + IntToString(GetCurrentAction(oCreature))); + if(GetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(1003)); + } + if(ai_Disabled(oCreature)) return; + // Action modes get cleared prior to each OnCombatRoundEnd! + // We do this to keep the action mode going. + int nActionMode = GetLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + if(nActionMode > 0) + { + SetActionMode(oCreature, nActionMode, TRUE); + // We don't want to use up all of the Dwarven Defenders uses! + if(nActionMode == 12) IncrementRemainingFeatUses(oCreature, FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE); + } + int nAction = GetCurrentAction(oCreature); + if(AI_DEBUG) ai_Debug("nw_c2_default3", "37", "nAction: " + IntToString(nAction)); + switch(nAction) + { + // These actions are uninteruptable. + case ACTION_MOVETOPOINT : + case ACTION_CASTSPELL : + case ACTION_ITEMCASTSPELL : + case ACTION_COUNTERSPELL : return; + // Might be doing a special action that is not a defined action. + case ACTION_INVALID : + { + int nCombatWait = GetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + if(AI_DEBUG) ai_Debug("nw_c2_default3", "49", "nCombatWait: " + IntToString(nCombatWait)); + if(nCombatWait) + { + if(ai_IsInCombatRound(oCreature, nCombatWait)) return; + DeleteLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + } + } + // We always want to interupt an attack action at the end of a round. + //case ACTION_ATTACKOBJECT : + } + if(ai_GetIsInCombat(oCreature)) + { + ai_DoAssociateCombatRound (oCreature); + return; + } + if(ai_GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) ai_DetermineSpecialBehavior(oCreature); +} + + + + diff --git a/src/module/nss/nw_c2_default4.nss b/src/module/nss/nw_c2_default4.nss new file mode 100644 index 0000000..cd1f616 --- /dev/null +++ b/src/module/nss/nw_c2_default4.nss @@ -0,0 +1,70 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_c2_4_convers + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnConversation; + Fires when oCreature has been clicked on for conversation. + Fires when oCreature hears a shout from another creature. + If SetListening is FALSE then oCreature will not "hear" anything. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void ai_MonsterCommands(object oCreature, object oSpeaker, int nMatch); +void main() +{ + object oCreature = OBJECT_SELF; + ExecuteScript("prc_npc_conv", OBJECT_SELF); + if(AI_DEBUG) ai_Debug("nw_c2_default4", "15", GetName(oCreature) + " listens " + + IntToString(GetListenPatternNumber()) + " to " + GetName(GetLastSpeaker()) + "." + + " AI_AM_I_SEARCHING: " + IntToString(GetLocalInt(oCreature, AI_AM_I_SEARCHING))); + if(ai_GetIsBusy(oCreature) || ai_Disabled(oCreature) || GetLocalInt(oCreature, AI_AM_I_SEARCHING)) return; + if(ai_GetIsInCombat(oCreature)) + { + ai_DoMonsterCombatRound(oCreature); + return; + } + object oLastSpeaker = GetLastSpeaker(); + int nMatch = GetListenPatternNumber(); + if(nMatch != -1) + { + if(GetFactionEqual(oLastSpeaker, oCreature)) ai_MonsterCommands(oCreature, oLastSpeaker, nMatch); + } + else + { + ai_ClearCreatureActions(); + BeginConversation(); + } + // Send the user-defined event if appropriate + if(GetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DIALOGUE)); + } +} +void ai_MonsterCommands(object oCreature, object oSpeaker, int nMatch) +{ + object oTarget = GetLocalObject(oSpeaker, AI_MY_TARGET); + if(nMatch == AI_ALLY_SEES_AN_ENEMY || nMatch == AI_ALLY_HEARD_AN_ENEMY) + { + if(AI_DEBUG) ai_Debug("nw_c2_default4", "46", GetName(oCreature) + " heard " + + GetName(oSpeaker) + " has seen an enemy!"); + if(ai_CanIAttack(oCreature)) ai_FindTheEnemy(oCreature, oSpeaker, oTarget, TRUE); + } + else if(nMatch == AI_ALLY_ATKED_BY_WEAPON || + nMatch == AI_ALLY_ATKED_BY_SPELL) + { + if(AI_DEBUG) ai_Debug("nw_c2_default4", "53", GetName(oCreature) + " heard " + + GetName(oSpeaker) + " has been attacked by " + + GetName(GetLocalObject(oSpeaker, AI_MY_TARGET)) + "!"); + if(ai_CanIAttack(oCreature)) ai_FindTheEnemy(oCreature, oSpeaker, oTarget, TRUE); + } + else if(nMatch == AI_ALLY_IS_WOUNDED) + { + if(AI_DEBUG) ai_Debug("nw_c2_default4", "60", GetName(oCreature) + " heard " + + GetName(oSpeaker) + " is wounded!"); + if(ai_GetIsInCombat(oCreature)) ai_TryHealingTalent(oCreature, ai_GetNumOfEnemiesInRange(oCreature), oSpeaker); + else ai_TryHealing(oCreature, oSpeaker); + } + /*else if(nMatch == AI_ALLY_IS_DEAD) + { + } */ +} + diff --git a/src/module/nss/nw_c2_default5.nss b/src/module/nss/nw_c2_default5.nss new file mode 100644 index 0000000..acc3b3e --- /dev/null +++ b/src/module/nss/nw_c2_default5.nss @@ -0,0 +1,37 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_c2_default5 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnPhysicalAttacked event script; + Fires for all physical attacks, claws, weapons, fists, bow, etc. + Fires for taunt skill, animal empathy skill. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + ExecuteScript("prc_npc_physatt", OBJECT_SELF); + object oAttacker = GetLastAttacker(oCreature); + if(AI_DEBUG) ai_Debug("nw_c2_default5", "14", GetName(oCreature) + " was attacked by " + + GetName(oAttacker) + "."); + SetLocalObject(oAttacker, AI_ATTACKED_PHYSICAL, oCreature); + // Run away! + if(ai_GetFleeToExit(oCreature)) + { + ai_ActivateFleeToExit(oCreature); + return; + } + if(GetSpawnInCondition(NW_FLAG_ATTACK_EVENT)) + { + SignalEvent(oCreature, EventUserDefined(EVENT_ATTACKED)); + } + if(ai_GetIsBusy(oCreature) || ai_Disabled(oCreature)) return; + if(ai_GetIsInCombat(oCreature)) return; + // We only inform others if attacked when not busy, not disabled & not in combat. + if(AI_DEBUG) ai_Debug("nw_c2_default5", "30", "Tell my allies I've been attacked!"); + SetLocalObject (oCreature, AI_MY_TARGET, oAttacker); + SpeakString(AI_ATKED_BY_WEAPON, TALKVOLUME_SILENT_TALK); + // Now move towards the attack in the hopes we can see them. + if(GetDistanceBetween(oCreature, oAttacker) < AI_RANGE_CLOSE) ai_DoMonsterCombatRound(oCreature); + else ActionMoveToObject(oAttacker, TRUE, AI_RANGE_CLOSE); +} diff --git a/src/module/nss/nw_c2_default6.nss b/src/module/nss/nw_c2_default6.nss new file mode 100644 index 0000000..5347842 --- /dev/null +++ b/src/module/nss/nw_c2_default6.nss @@ -0,0 +1,36 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_c2_default6 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnDamaged event script; + Does not fire if the creature dies from the damage. + Does not fire for plot creatures as they take no damage. + May fire before or after OnPhysicalAttacked event. + Fires when EffectDamage is applied to oCreature even if 0 damage. + Fires when a weapon damages a oCreature, but not if resisted. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + + ExecuteScript("prc_npc_damaged", OBJECT_SELF); + + // Send the user-defined event signal + if(GetSpawnInCondition(NW_FLAG_DAMAGED_EVENT)) + { + SignalEvent(oCreature, EventUserDefined(EVENT_DAMAGED)); + return; + } + if(ai_Disabled(oCreature)) return; + // Make sure to clear wounded shout limit if we take damage. See ai_TryHealing. + DeleteLocalInt(oCreature, "AI_WOUNDED_SHOUT_LIMIT"); + object oDamager = GetLastDamager(oCreature); + if(AI_DEBUG) ai_Debug("nw_c2_default6", "23", GetName(oCreature) + " has been damaged by " + GetName(oDamager)); + if(ai_GetFleeToExit(oCreature)) return; + if(GetObjectType(oDamager) == OBJECT_TYPE_AREA_OF_EFFECT && + ai_IsInADangerousAOE(oCreature, AI_RANGE_BATTLEFIELD, TRUE)) return; + if(ai_GetIsBusy(oCreature) || ai_GetIsInCombat(oCreature)) return; + if(GetDistanceBetween(oCreature, oDamager) < AI_RANGE_CLOSE) ai_DoMonsterCombatRound(oCreature); + else ActionMoveToObject(oDamager, TRUE, AI_RANGE_CLOSE - 1.0); +} diff --git a/src/module/nss/nw_c2_default8.nss b/src/module/nss/nw_c2_default8.nss new file mode 100644 index 0000000..fa7ef11 --- /dev/null +++ b/src/module/nss/nw_c2_default8.nss @@ -0,0 +1,26 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_c2_default8 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnDisturbed event script; + Fires when the inventory of oCreature is changed i.e. added or removed. + Creatures can't have items added or removed from its inventory (it's not a + container), then the only way this fires for creatures if something is stolen. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + ExecuteScript("prc_npc_disturb", OBJECT_SELF); + + if(AI_DEBUG) ai_Debug("nw_c2_default8", "13", GetName(OBJECT_SELF) + " is been disturbed!"); + // We do nothing at the moment... lets not mess up our factions ok? + // This should be defined by the server admins and is commented out. + //if(ai_GetIsBusy(OBJECT_SELF, FALSE) || ai_Disabled()) return; + //object oTarget = GetLastDisturbed(); + //if (oTarget != OBJECT_INVALID) ai_DoMonsterCombatRound (); + // Send the disturbed flag if appropriate. + if(GetSpawnInCondition(NW_FLAG_DISTURBED_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DISTURBED)); + } +} diff --git a/src/module/nss/nw_c2_defaulta.nss b/src/module/nss/nw_c2_defaulta.nss new file mode 100644 index 0000000..a457a18 --- /dev/null +++ b/src/module/nss/nw_c2_defaulta.nss @@ -0,0 +1,21 @@ +//:://///////////////////////////////////////////// +//:: Default: On Rested +//:: NW_C2_DEFAULTA +//:: Copyright (c) 2002 Bioware Corp. +//::////////////////////////////////////////////// +/* + Determines the course of action to be taken + after having just rested. +*/ +//::////////////////////////////////////////////// +//:: Created By: Don Moar +//:: Created On: April 28, 2002 +//::////////////////////////////////////////////// +void main() +{ + // enter desired behaviour here + + ExecuteScript("prc_npc_rested", OBJECT_SELF); + return; + +} diff --git a/src/module/nss/nw_c2_defaultb.nss b/src/module/nss/nw_c2_defaultb.nss new file mode 100644 index 0000000..3150026 --- /dev/null +++ b/src/module/nss/nw_c2_defaultb.nss @@ -0,0 +1,42 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_c2_defaultb + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnSpellCastAt event script; + Fires when oCreature becomes the target of a spell via SignalEvent. + Fires when a healing kit is used on a creature. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + object oCaster = GetLastSpellCaster(); + SetLocalObject(oCaster, AI_ATTACKED_SPELL, oCreature); + if(ai_Disabled(oCreature)) return; + ExecuteScript("prc_npc_spellat", OBJECT_SELF); + if(!GetLastSpellHarmful()) return; + // Send the user-defined event as appropriate + if(GetSpawnInCondition(NW_FLAG_SPELL_CAST_AT_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_SPELL_CAST_AT)); + } + // If the spell came from an ally, we don't want to hold it against them. + if(GetFactionEqual(oCaster, oCreature)) ClearPersonalReputation(oCaster, oCreature); + // Lets see what kind of area of effect this is and select an appropriate action. + int nSpell = GetLastSpell(); + if(AI_DEBUG) ai_Debug("nw_c2_defaultb", "26", GetName(oCreature) + " has been hit by a harmful spell(" + + Get2DAString("spells", "Label", nSpell) + ")!"); + if(ai_GetInAOEReaction(oCreature, oCaster, nSpell) && + ai_IsInADangerousAOE(oCreature, AI_RANGE_BATTLEFIELD, TRUE)) return; + if(ai_GetIsBusy(oCreature)) return; + if(ai_CheckForCombat(oCreature, TRUE)) return; + // We have been attacked out of combat, so let our allies know. + SetLocalObject(oCreature, AI_MY_TARGET, oCaster); + SpeakString(AI_ATKED_BY_SPELL, TALKVOLUME_SILENT_TALK); + if(GetDistanceBetween(oCreature, oCaster) < AI_RANGE_CLOSE) + { + if(ai_GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) ai_DetermineSpecialBehavior(oCreature); + else ai_DoMonsterCombatRound(oCreature); + } + else ActionMoveToObject(oCaster, TRUE, AI_RANGE_CLOSE); +} diff --git a/src/module/nss/nw_c2_defaulte.nss b/src/module/nss/nw_c2_defaulte.nss new file mode 100644 index 0000000..76f62db --- /dev/null +++ b/src/module/nss/nw_c2_defaulte.nss @@ -0,0 +1,53 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_c2_defaulte + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monsters OnBlocked event script; + Can be blocked by a creature or door. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + // This actually gets either a Creature or Door that is blocking OBJECT_SELF. + object oObject = GetBlockingDoor(); + if(AI_DEBUG) ai_Debug("nw_c2_defaulte", "14", GetName(oCreature) + " is being blocked by " + GetName(oObject)); + int nObjectType = GetObjectType(oObject); + if(nObjectType == OBJECT_TYPE_CREATURE) + { + if(GetIsEnemy(oObject, oCreature)) + { + if(ai_CanIAttack(oCreature) && ai_GetIsInCombat(oCreature)) + { + ai_DoMonsterCombatRound(oCreature); + return; + } + if(ai_CheckForCombat(oCreature, TRUE)) return; + } + } + // Anything below blocking us is a door. + if(nObjectType != OBJECT_TYPE_DOOR) return; + // Only open the door if the player has turned door opening on. + if(!GetLocalInt(GetModule(), AI_RULE_OPEN_DOORS)) return; + //if(GetLockKeyTag(oObject) != "") return; + else if(GetIsDoorActionPossible(oObject, DOOR_ACTION_OPEN) && + GetAbilityScore(oCreature, ABILITY_INTELLIGENCE) >= 5) + { + if(AI_DEBUG) ai_Debug("nw_c2_defaulte", "33", GetName(oCreature) + " is opening " + GetName(oObject)); + DoDoorAction(oObject, DOOR_ACTION_OPEN); + return; + } + // If we are in combat we should ignore doors that do not easily open. + if(GetIsDoorActionPossible(oObject, DOOR_ACTION_BASH) && + ai_GetWeaponDamage(oCreature, 3, TRUE) > GetHardness(oObject) && + GetLockKeyTag(oObject) == "") + { + ActionWait(1.0); + ActionAttack(oObject); + // Give them 3 rounds to break through a door. + DelayCommand(18.0, ai_ClearCreatureActions(TRUE)); + return; + } +} + + diff --git a/src/module/nss/nw_c2_stnkbtdie.nss b/src/module/nss/nw_c2_stnkbtdie.nss new file mode 100644 index 0000000..904aad0 --- /dev/null +++ b/src/module/nss/nw_c2_stnkbtdie.nss @@ -0,0 +1,51 @@ +#include "x0_i0_corpses" +#include "inc_misc_tools" +//:://///////////////////////////////////////////// +//:: Stink Beetle OnDeath Event +//:: Copyright (c) 2002 Bioware Corp. +//::////////////////////////////////////////////// +/* + Releases the Stink Beetle's Stinking Cloud + special ability OnDeath. +*/ +//::////////////////////////////////////////////// +//:: Created By: Andrew +//:: Created On: Jan 2002 +//::////////////////////////////////////////////// +#include "x0_i0_spawncond" +void main() +{ + //Declare major variables + effect eAOE = EffectAreaOfEffect(AOE_MOB_TYRANT_FOG,"NW_S1_Stink_A"); + location lTarget = GetLocation(OBJECT_SELF); + + //Create the AOE object at the selected location + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eAOE, lTarget, RoundsToSeconds(2)); + if (GetLocalInt(OBJECT_SELF,"MirrorOfOppositionCopy")) + { + SetIsDestroyable(TRUE,FALSE,FALSE); + DestroyObject(OBJECT_SELF); + return; + } + else if (GetIsObjectValid(GetLocalObject(OBJECT_SELF,"MirrorOfOpposition"))) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),GetLocalObject(OBJECT_SELF,"MirrorOfOpposition")); + } + object oKiller = GetLastKiller(); + int iBoss = GetLocalInt(OBJECT_SELF,"Boss"); + if (!GetLocalInt(OBJECT_SELF,"Dead")) + { + if (SLOW_XP && iBoss) + AwardXPs(oKiller); + else + AwardXPs(oKiller); + SetLocalInt(OBJECT_SELF,"Dead",TRUE); + if (iBoss) + KillAndReplaceLootable(OBJECT_SELF,FALSE); + else + KillAndReplaceDecorative(OBJECT_SELF); + } +} + + + diff --git a/src/module/nss/nw_ch_ac1.nss b/src/module/nss/nw_ch_ac1.nss new file mode 100644 index 0000000..6ed2fea --- /dev/null +++ b/src/module/nss/nw_ch_ac1.nss @@ -0,0 +1,158 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_ch_ac1 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associate(Summons, Familiar, Companion) OnHeart beat script when out of combat; + This will usually fire every 6 seconds (1 game round). +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_module" +#include "0i_menus" +void ai_ActionFollow(object oCreature, object oTarget) +{ + if(GetLocalInt(OBJECT_SELF, AI_CURRENT_ACTION_MODE) == AI_LAST_ACTION_MOVE) + { + float fDistance = GetDistanceBetween(oCreature, oTarget); + float fFollowDistance = ai_GetFollowDistance(oCreature); + if(fDistance > fFollowDistance) + { + if(fDistance > fFollowDistance * 5.0 && + ai_GetIsInCombat(oCreature)) AssignCommand(oCreature, JumpToObject(oTarget)); + else + { + ClearAllActions(); + ActionMoveToObject(oTarget, TRUE, fFollowDistance); + } + } + DelayCommand(1.0, ai_ActionFollow(oCreature, oTarget)); + } +} +void main() +{ + if (GetAILevel(OBJECT_SELF) == AI_LEVEL_VERY_LOW) return; + object oCreature = OBJECT_SELF; + if(AI_DEBUG) ai_Counter_Start(); + // We run our OnSpawn in the heartbeat so the creator can use the original + // OnSpawn for their own use. + ai_OnAssociateSpawn(oCreature); + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + ": Heartbeat, ai_OnAssociateSpawn"); + if(AI_DEBUG) ai_Debug("nw_ch_ac1", "37", GetName(oCreature) + " Heartbeat." + + " MODE_FOLLOW: " + IntToString(ai_GetAIMode(oCreature, AI_MODE_FOLLOW)) + + " Action: " + IntToString(GetCurrentAction(oCreature))); + if(ai_GetIsBusy(oCreature) || ai_Disabled(oCreature)) return; + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + ": Heartbeat, ai_GetIsBusy/ai_Disabled"); + // If we are an associate and don't have a master then exit. + object oMaster = GetMaster(oCreature); + if(AI_DEBUG) ai_Debug("nw_ch_ac1", "43", "oMaster: " + GetName(oMaster)); + if(oMaster == OBJECT_INVALID) + { + if(ai_GetIsInCombat(oCreature)) + { + ai_DoAssociateCombatRound(oCreature); + return; + } + ai_CheckForCombat(oCreature, FALSE); + return; + } + // ***** Code for Henchman data and menus ***** + if(ai_GetIsCharacter(oMaster)) + { + string sAssociateType = ai_GetAssociateType(oMaster, oCreature); + ai_CheckAssociateData(oMaster, oCreature, sAssociateType); + ai_CheckPCStart(oMaster); + if(AI_HENCHMAN_WIDGET) + { + // This keeps widgets from disappearing and reappearing. + int nUiToken = NuiFindWindow(oMaster, sAssociateType + AI_WIDGET_NUI); + if(nUiToken) + { + json jData = NuiGetUserData(oMaster, nUiToken); + object oAssociate = StringToObject(JsonGetString(JsonArrayGet(jData, 0))); + if(oAssociate != oCreature) NuiDestroy(oMaster, nUiToken); + } + else + { + if(!ai_GetWidgetButton(oMaster, BTN_WIDGET_OFF, oCreature, sAssociateType)) + { + ai_CreateWidgetNUI(oMaster, oCreature); + } + } + } + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + ": Heartbeat, Get Associate data/Build widget"); + } + // If follow mode we do not want the NPC doing anything but follow. + if(!ai_GetAIMode(oCreature, AI_MODE_FOLLOW)) + { + if(ai_GetAIMode(oCreature, AI_MODE_STAND_GROUND)) + { + ai_TryHealing(oCreature, oCreature); + return; + } + if(ai_GetIsInCombat(oCreature)) + { + ai_DoAssociateCombatRound(oCreature); + return; + } + if(ai_CheckForCombat(oCreature, FALSE)) return; + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + ": Heartbeat, ai_CheckForCombat"); + if(IsInConversation(oCreature)) return; + // In command mode we let the player tell us what to do. + if(!ai_GetAIMode(oCreature, AI_MODE_COMMANDED)) + { + if(ai_TryHealing(oCreature, oCreature)) return; + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + ": Heartbeat: TryHealing"); + if(ai_CheckNearbyObjects(oCreature)) return; + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + ": Heartbeat: CheckNearbyObjects"); + if(ai_GetAIMode(oCreature, AI_MODE_SCOUT_AHEAD)) + { + ai_ScoutAhead(oCreature); + return; + } + } + } + // Finally we check to make sure we are following our master. + if(GetCurrentAction(oCreature) != ACTION_FOLLOW) + { + //ai_Debug("nw_ch_ac1", "66", "Follow master: " + + // " Stealth: " + IntToString(ai_GetAIMode(oCreature, AI_MODE_AGGRESSIVE_STEALTH)) + + // " Search: " + IntToString(ai_GetAIMode(oCreature, AI_MODE_AGGRESSIVE_SEARCH))); + if(ai_GetAIMode(oCreature, AI_MODE_AGGRESSIVE_STEALTH)) + { + if(AI_DEBUG) ai_Debug("nw_ch_ac1", "120", "Going into stealth mode!"); + int nStealth = GetSkillRank(SKILL_HIDE, oCreature); + nStealth += GetSkillRank(SKILL_MOVE_SILENTLY, oCreature); + if(nStealth / 2 >= ai_GetCharacterLevels(oCreature)) + { + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + SetActionMode(oCreature, ACTION_MODE_DETECT, FALSE); + } + } + else + { + SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + if(ai_GetAIMode(oCreature, AI_MODE_AGGRESSIVE_SEARCH)) + { + if(AI_DEBUG) ai_Debug("nw_ch_ac1", "134", "Going into search mode!"); + SetActionMode(oCreature, ACTION_MODE_DETECT, TRUE); + } + else SetActionMode(oCreature, ACTION_MODE_DETECT, FALSE); + } + // Follow master. + if(GetDistanceBetween(oCreature, oMaster) > ai_GetFollowDistance(oCreature)) + { + if(!ai_GetAIMode(oCreature, AI_MODE_COMMANDED)) + { + object oTarget = GetLocalObject(oCreature, AI_FOLLOW_TARGET); + if(oTarget == OBJECT_INVALID) oTarget = oMaster; + //ActionForceFollowObject(oTarget, ai_GetFollowDistance(oCreature)); + //ActionMoveToObject(oTarget, TRUE, ai_GetFollowDistance(oCreature)); + SetLocalInt(oCreature, AI_CURRENT_ACTION_MODE, AI_LAST_ACTION_MOVE); + ai_ActionFollow(oCreature, oTarget); + } + } + } + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + ": Heartbeat, end"); + if(GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(1001)); + } +} diff --git a/src/module/nss/nw_ch_ac2.nss b/src/module/nss/nw_ch_ac2.nss new file mode 100644 index 0000000..04a56f9 --- /dev/null +++ b/src/module/nss/nw_ch_ac2.nss @@ -0,0 +1,107 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_ch_ac2 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associate(Summons, Familiars, Companions) OnPerception script when not in combat; + There are 4 types of perception - Heard, Inaudible, Seen, Vanished. + Only one type will ever be true in an event trigger. + The order of trigger is Heard/Seen and Inaudible/Vanished. + There are two states of percepion Heard and Seen. + These states can be set at the same time thus a heard event can see the creature. + Fires when ever one of these states changes from TRUE to FALSE or FALSE to TRUE. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + object oLastPerceived = GetLastPerceived(); + if(AI_DEBUG) + { + if(GetLastPerceptionHeard ()) + { + ai_Debug("nw_ch_ac2", "21", GetName(oCreature) + " heard " + + GetName(GetLastPerceived()) + " Distance: " + + FloatToString(GetDistanceBetween(GetLastPerceived(), oCreature), 0, 2) + + " Seen: " + IntToString(GetObjectSeen(oLastPerceived, oCreature)) + "."); + } + if(GetLastPerceptionSeen ()) + { + ai_Debug("nw_ch_ac2", "29", GetName(oCreature) + " sees " + + GetName(GetLastPerceived()) + " Distance: " + + FloatToString(GetDistanceBetween(GetLastPerceived(), oCreature), 0, 2) + "."); + } + if(GetLastPerceptionVanished ()) + { + ai_Debug("nw_ch_ac2", "35", GetName(oCreature) + " lost sight of " + + GetName(GetLastPerceived()) + "."); + } + } + // We do nothing on Inaudibles so drop out early! + if(GetLastPerceptionInaudible()) + { + ai_Debug("nw_ch_ac2", "42", GetName(oCreature) + " lost sound of " + + GetName(GetLastPerceived()) + "."); + return; + } + if(AI_DEBUG) ai_Debug("nw_ch_ac2", "46", "Dead? " + IntToString(GetIsDead(oLastPerceived)) + + " Enemy? " + IntToString(GetIsEnemy(oLastPerceived, oCreature))); + if(ai_Disabled(oCreature)) return; + if(GetIsDead(oLastPerceived) || !GetIsEnemy(oLastPerceived, oCreature)) return; + // All code below assumes the perceived creature is an enemy and is alive! + // **************************** ENEMY HEARD ******************************** + if(GetLastPerceptionHeard()) + { + // Since Heard is run before Seen, but the values are set at the same + // time we can skip heard checks on heard & seen creatures! + if(GetObjectSeen(oLastPerceived, oCreature)) + { + // If the creature we are perceiving was our invisible creature then + // remove that they are invisible. + if(oLastPerceived == GetLocalObject(oCreature, AI_IS_INVISIBLE)) + { + DeleteLocalObject(oCreature, AI_IS_INVISIBLE); + } + ai_AssociateEvaluateNewThreat(oCreature, oLastPerceived, AI_I_SEE_AN_ENEMY); + } + else ai_AssociateEvaluateNewThreat(oCreature, oLastPerceived, AI_I_HEARD_AN_ENEMY); + return; + } + // **************************** ENEMY SEEN ********************************* + if(GetLastPerceptionSeen()) + { + // If the creature we are perceiving was our invisible creature then + // remove that they are invisible. + if(oLastPerceived == GetLocalObject(oCreature, AI_IS_INVISIBLE)) + { + DeleteLocalObject(oCreature, AI_IS_INVISIBLE); + } + ai_AssociateEvaluateNewThreat(oCreature, oLastPerceived, AI_I_SEE_AN_ENEMY); + return; + } + // **************************** ENEMY VANISHED ***************************** + if(GetLastPerceptionVanished()) + { + // Lets keep a mental note of the invisible creature. + SetLocalObject(oCreature, AI_IS_INVISIBLE, oLastPerceived); + if(AI_DEBUG) ai_Debug("nw_ch_ac2", "86", " We saw " + GetName(oLastPerceived) + " disappear!"); + if(ai_GetIsBusy(oCreature)) return; + // If in combat check to see if our target disappeared. + // If they have and we are not in melee with them then reevaluate combat + // since we lost our target. + if(ai_GetIsInCombat(oCreature)) + { + if(AI_DEBUG) ai_Debug("nw_ch_ac2", "93", "Is this our target? " + + IntToString(ai_GetAttackedTarget(oCreature, TRUE, TRUE) == oLastPerceived)); + if(ai_GetAttackedTarget(oCreature, TRUE, TRUE) == oLastPerceived) + { + ai_DoAssociateCombatRound(oCreature); + } + return; + } + // If they are not invisible then that means they left our perception + // range and we need follow them. + if(ai_CanIAttack(oCreature)) ActionMoveToObject(oLastPerceived, TRUE, AI_RANGE_CLOSE); + } + // **************************** ENEMY INAUDIBLE***************************** + // Not used. +} diff --git a/src/module/nss/nw_ch_ac3.nss b/src/module/nss/nw_ch_ac3.nss new file mode 100644 index 0000000..9eb3406 --- /dev/null +++ b/src/module/nss/nw_ch_ac3.nss @@ -0,0 +1,56 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_ch_ac3 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associate (Summons, Familiars, Companions) OnCombatRoundEnd event script; + Fires at the end of each combat round (6 seconds). + This will fire as long as oCreature is in combat (GetIsInCombat()). + This event starts counting once a combat action is started. + Every time a spell is cast it will queue another end combat round so haste with + two spells cast will fire this twice in one round. + It will also fire at the end of a hostile effect that stops actions i.e Stunned, Knockdown etc. + Action modes are also cleared prior to this event executing! + GetAttemptedAttackTarget() & GetAttemptedSpellTarget() also get cleared prior to this event. + This event can be canceled with ClearAllActions(TRUE) and SurrenderToEnemies. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + if(AI_DEBUG) ai_Debug("nw_ch_ac3", "20", GetName(oCreature) + " ends combat round."); + if(ai_Disabled(oCreature)) return; + // Action modes get cleared prior to each OnCombatRoundEnd! + // We do this to keep the action mode going. + int nActionMode = GetLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + if(nActionMode > 0) + { + SetActionMode(oCreature, nActionMode, TRUE); + // We don't want to use up all of the Dwarven Defenders uses! + if(nActionMode == 12) IncrementRemainingFeatUses(oCreature, FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE); + } + int nAction = GetCurrentAction(oCreature); + if(AI_DEBUG) ai_Debug("nw_ch_ac3", "32", "nAction: " + IntToString(nAction)); + switch(nAction) + { + // These actions are uninteruptable. + case ACTION_MOVETOPOINT : + case ACTION_CASTSPELL : + case ACTION_ITEMCASTSPELL : + case ACTION_COUNTERSPELL : return; + // Might be doing a special action that is not a defined action. + case ACTION_INVALID : + { + int nCombatWait = GetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + if(AI_DEBUG) ai_Debug("nw_ch_ac3", "44", "nCombatWait: " + IntToString(nCombatWait)); + if(nCombatWait) + { + if(ai_IsInCombatRound(oCreature, nCombatWait)) return; + DeleteLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + } + } + // We always want to interupt an attack action at the end of a round. + //case ACTION_ATTACKOBJECT : + } + if(ai_GetIsInCombat(oCreature)) ai_DoAssociateCombatRound (oCreature); +} + diff --git a/src/module/nss/nw_ch_ac4.nss b/src/module/nss/nw_ch_ac4.nss new file mode 100644 index 0000000..f6c290d --- /dev/null +++ b/src/module/nss/nw_ch_ac4.nss @@ -0,0 +1,45 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_ch_ac4 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associate(Summons, Familiar, Companion) OnDialoge event script; + Fires when oCreature has been clicked on for conversation. + Fires when oCreature hears a shout from another creature. + If SetListening is FALSE then oCreature will not "hear" anything. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +#include "nw_inc_gff" +void main() +{ + object oCreature = OBJECT_SELF; + int nMatch = GetListenPatternNumber(); + if(AI_DEBUG) ai_Debug("nw_ch_ac4", "16", GetName(oCreature) + " listens " + + IntToString(nMatch) + " to " + GetName(GetLastSpeaker()) + "."); + // Skip ASSOCIATE_COMMAND_MASTERUNDERATTACK(11) since it fires for + // every physical attack made on our master. This fires alot! + if(nMatch == ASSOCIATE_COMMAND_MASTERUNDERATTACK) return; + // If we are disabled then we can't listen or talk, Busy is checked in ai_SelectAssociateCommand(). + if(ai_Disabled(oCreature)) return; + object oLastSpeaker = GetLastSpeaker(); + // Some commands override being busy so we check in ai_SelectAssociateCommand. + if(nMatch != -1) + { + if(GetFactionEqual(oLastSpeaker, oCreature)) ai_SelectAssociateCommand(oCreature, oLastSpeaker, nMatch); + } + else + { + if (!ai_GetIsBusy(oCreature)) + { + ai_ClearCreatureActions(); + if(GetAssociateType(oCreature) == ASSOCIATE_TYPE_HENCHMAN) BeginConversation("oc_ai_henchmen", oLastSpeaker); + else + { + json jHenchman = ObjectToJson(oCreature); + string sConversation = JsonGetString(GffGetResRef(jHenchman, "Conversation")); + if(sConversation == "") BeginConversation("oc_ai_henchmen", oLastSpeaker); + BeginConversation(); + } + } + } +} + diff --git a/src/module/nss/nw_ch_ac5.nss b/src/module/nss/nw_ch_ac5.nss new file mode 100644 index 0000000..78f9321 --- /dev/null +++ b/src/module/nss/nw_ch_ac5.nss @@ -0,0 +1,51 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_ch_ac5 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associates (Summons, Familiars, Companions) OnPhysicalAttacked event script; + Fires for all physical attacks, claws, weapons, fists, bow, etc. + Fires for taunt skill, animal empathy skill. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + object oAttacker = GetLastAttacker(); + if(AI_DEBUG) ai_Debug("nw_ch_ac5", "14", GetName(oCreature) + " was attacked by " + + GetName(oAttacker) + "."); + SetLocalObject(oAttacker, AI_ATTACKED_PHYSICAL, oCreature); + if(ai_GetIsBusy(oCreature) || ai_Disabled(oCreature)) return; + if(GetSpawnInCondition(NW_FLAG_ATTACK_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(1005)); + } + if(ai_GetIsInCombat(oCreature)) return; + // We only inform others if attacked when not busy, not disabled, & not in combat. + SetLocalObject(oCreature, AI_MY_TARGET, oAttacker); + SpeakString(AI_ATKED_BY_WEAPON, TALKVOLUME_SILENT_TALK); + // If they are using a melee weapon then make sure we are using our perception range. + // Don't go running towards them just yet, but if its a ranged weapon then react. + if(ai_GetIsMeleeWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oAttacker))) + { + float fDistance = GetDistanceBetween(oCreature, oAttacker); + float fPerceptionDistance = GetLocalFloat(oCreature, AI_ASSOC_PERCEPTION_DISTANCE); + if(fDistance > fPerceptionDistance) return; + } + int nAction = GetCurrentAction(oCreature); + float fDistance = GetDistanceBetween(oCreature, oAttacker); + if(!ai_CanIAttack(oCreature)) + { + // We should defend ourselves if we are in Hold mode. + if(!ai_GetAIMode(oCreature, AI_MODE_STAND_GROUND)) return; + // Only defend against melee attacks. + if(fDistance > AI_RANGE_MELEE) return; + } + // The only way to get here is to not be in combat. + if(fDistance < AI_RANGE_CLOSE) + { + ai_StartAssociateCombat(oCreature); + } + else ActionMoveToObject(oAttacker, TRUE, AI_RANGE_CLOSE - 1.0); +} + + diff --git a/src/module/nss/nw_ch_ac6.nss b/src/module/nss/nw_ch_ac6.nss new file mode 100644 index 0000000..f51e937 --- /dev/null +++ b/src/module/nss/nw_ch_ac6.nss @@ -0,0 +1,32 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_ch_6_damaged + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Player OnDamaged script for PC AI; + Does not fire if the creature dies from the damage. + Does not fire for plot creatures as they take no damage. + May fire before or after OnPhysicalAttacked event. + Fires when EffectDamage is applied to oCreature even if 0 damage. + Fires when a weapon damages a oCreature, but not if resisted. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + if(ai_Disabled(oCreature)) return; + // Make sure to clear wounded shout limit if we take damage. See ai_TryHealing. + DeleteLocalInt(oCreature, "AI_WOUNDED_SHOUT_LIMIT"); + object oDamager = GetLastDamager(oCreature); + if(AI_DEBUG) ai_Debug("nw_ch_ac6", "18", GetName(oCreature) + " has been damaged by " + GetName(oDamager)); + if(GetSpawnInCondition(NW_FLAG_DAMAGED_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(1006)); + } + if(GetObjectType(oDamager) == OBJECT_TYPE_AREA_OF_EFFECT && + ai_IsInADangerousAOE(oCreature, AI_RANGE_BATTLEFIELD, TRUE)) return; + if(ai_GetIsBusy(oCreature) || ai_GetIsInCombat(oCreature)) return; + if(!ai_CanIAttack(oCreature)) return; + if(GetDistanceBetween(oCreature, oDamager) < AI_RANGE_CLOSE) ai_DoAssociateCombatRound(oCreature); + else ActionMoveToObject(oDamager, TRUE, AI_RANGE_CLOSE - 1.0); +} + diff --git a/src/module/nss/nw_ch_ac7.nss b/src/module/nss/nw_ch_ac7.nss new file mode 100644 index 0000000..5896c83 --- /dev/null +++ b/src/module/nss/nw_ch_ac7.nss @@ -0,0 +1,143 @@ +//:://///////////////////////////////////////////// +//:: Henchman Death Script +//:: +//:: NW_CH_AC7.nss +//:: +//:: Copyright (c) 2001-2003 Bioware Corp. +//::////////////////////////////////////////////// +//:: Official Campaign Henchmen Respawn +//::////////////////////////////////////////////// +//:: +//:: Modified by: Brent, April 3 2002 +//:: Removed delay in respawning +//:: the henchman - caused bugs +//: +//:: Georg, Oct 8 2003 +//:: Rewrote teleport to temple routine +//:: because it was broken by +//:: some delicate timing issues in XP2 +//::////////////////////////////////////////////// + +#include "nw_i0_generic" +#include "nw_i0_plot" + + +// ----------------------------------------------------------------------------- +// Georg, 2003-10-08 +// Rewrote that jump part to get rid of the DelayCommand Code that was prone to +// timing problems. If want to see a really back hack, this function is just that. +// ----------------------------------------------------------------------------- +void WrapJump(string sTarget) +{ + if (GetIsDead(OBJECT_SELF)) + { + // * Resurrect and heal again, just in case + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectResurrection(), OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectHeal(GetMaxHitPoints(OBJECT_SELF)), OBJECT_SELF); + + // * recursively call self until we are alive again + DelayCommand(1.0f,WrapJump( sTarget)); + return; + } + // * since the henchmen are teleporting very fast now, we leave a bloodstain on the ground + object oBlood = CreateObject(OBJECT_TYPE_PLACEABLE,"plc_bloodstain", GetLocation(OBJECT_SELF)); + + // * Remove blood after a while + DestroyObject(oBlood,30.0f); + + // * Ensure the action queue is open to modification again + SetCommandable(TRUE,OBJECT_SELF); + + // * Jump to Target + JumpToObject(GetObjectByTag(sTarget), FALSE); + + // * Unset busy state + ActionDoCommand(SetAssociateState(NW_ASC_IS_BUSY, FALSE)); + + // * Make self vulnerable + SetPlotFlag(OBJECT_SELF, FALSE); + + // * Set destroyable flag to leave corpse + DelayCommand(6.0f, SetIsDestroyable(TRUE, TRUE, TRUE)); +} + +// ----------------------------------------------------------------------------- +// Georg, 2003-10-08 +// Changed to run the bad recursive function above. +// ----------------------------------------------------------------------------- +void BringBack() +{ + object oSelf = OBJECT_SELF; + SetLocalObject(oSelf,"NW_L_FORMERMASTER", GetMaster()); + RemoveEffects(oSelf); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectResurrection(), OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectHeal(GetMaxHitPoints(OBJECT_SELF)), OBJECT_SELF); + + object oWay = GetObjectByTag("NW_DEATH_TEMPLE"); + + if (GetIsObjectValid(oWay) == TRUE) + { + // * if in Source stone area, respawn at opening to area + if (GetTag(GetArea(oSelf)) == "M4Q1D2") + { + DelayCommand(1.0, WrapJump("M4QD07_ENTER")); + } + else + { + DelayCommand(1.0, WrapJump(GetTag(oWay))); + } + } + else + { + WriteTimestampedLogEntry("UT: No place to go"); + } + +} +void main() +{ + // * This is used by the advanced henchmen + // * Let Brent know if it interferes with animal + // * companions et cetera + if (GetIsObjectValid(GetMaster()) == TRUE) + { + object oMe = OBJECT_SELF; + if (GetAssociateType(oMe) == ASSOCIATE_TYPE_HENCHMAN + // * this is to prevent 'double hits' from stopping + // * the henchmen from moving to the temple of tyr + // * I.e., henchmen dies 'twice', once after leaving your party + || GetLocalInt(oMe, "NW_L_HEN_I_DIED") == TRUE) + { + // ----------------------------------------------------------------------------- + // Georg, 2003-10-08 + // Rewrote code from here. + // ----------------------------------------------------------------------------- + + SetPlotFlag(oMe, TRUE); + SetAssociateState(NW_ASC_IS_BUSY, TRUE); + AddJournalQuestEntry("Henchman", 99, GetMaster(), FALSE, FALSE, FALSE); + SetIsDestroyable(FALSE, TRUE, TRUE); + SetLocalInt(OBJECT_SELF, "NW_L_HEN_I_DIED", TRUE); + BringBack(); + + // ----------------------------------------------------------------------------- + // End of rewrite + // ----------------------------------------------------------------------------- + + } + else + // * I am a familiar, give 1d6 damage to my master + if (GetAssociate(ASSOCIATE_TYPE_FAMILIAR, GetMaster()) == OBJECT_SELF) + { + // April 2002: Made it so that familiar death can never kill the player + // only wound them. + int nDam =d6(); + if (nDam >= GetCurrentHitPoints(GetMaster())) + { + nDam = GetCurrentHitPoints(GetMaster()) - 1; + } + effect eDam = EffectDamage(nDam); + FloatingTextStrRefOnCreature(63489, GetMaster(), FALSE); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDam, GetMaster()); + } + } +} diff --git a/src/module/nss/nw_ch_ac8.nss b/src/module/nss/nw_ch_ac8.nss new file mode 100644 index 0000000..05b7f85 --- /dev/null +++ b/src/module/nss/nw_ch_ac8.nss @@ -0,0 +1,25 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_ch_ac8 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associates (Summons, Familiars, Companions) OnDisturbed event script. + Fires when the inventory of oCreature is changed i.e. added or removed. + Creatures can't have items added or removed from its inventory (it's not a + container), then the only way this fires for creatures if something is stolen. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + if(AI_DEBUG) ai_Debug("nw_ch_ac8", "13", GetName(OBJECT_SELF) + " is been disturbed!"); + if(GetSpawnInCondition(NW_FLAG_DISTURBED_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(1008)); + } + // We do nothing at the moment... lets not mess up our factions ok? + // This should be defined by the server admins and is commented out. + //if(ai_GetIsBusy(OBJECT_SELF, FALSE) || ai_Disabled()) return; + //object oTarget = GetLastDisturbed(); + //if (oTarget != OBJECT_INVALID) ai_DoMonsterCombatRound (); +} + + diff --git a/src/module/nss/nw_ch_ac9.nss b/src/module/nss/nw_ch_ac9.nss new file mode 100644 index 0000000..9e45368 --- /dev/null +++ b/src/module/nss/nw_ch_ac9.nss @@ -0,0 +1,78 @@ +//:://///////////////////////////////////////////// +//:: Associate: On Spawn In +//:: NW_CH_AC9 +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Nov 19, 2001 +//::////////////////////////////////////////////// + +#include "X0_INC_HENAI" + +void main() +{ + SetAssociateListenPatterns();//Sets up the special henchmen listening patterns + + bkSetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. + + SetAssociateState(NW_ASC_POWER_CASTING); + SetAssociateState(NW_ASC_HEAL_AT_50); + SetAssociateState(NW_ASC_RETRY_OPEN_LOCKS); + SetAssociateState(NW_ASC_DISARM_TRAPS); + SetAssociateState(NW_ASC_MODE_DEFEND_MASTER, FALSE); + SetAssociateState(NW_ASC_USE_RANGED_WEAPON, FALSE); //User ranged weapons by default if true. + SetAssociateState(NW_ASC_DISTANCE_2_METERS); + + // April 2002: Summoned monsters, associates and familiars need to stay + // further back due to their size. + int nType = GetAssociateType(OBJECT_SELF); + switch (nType) + { + case ASSOCIATE_TYPE_ANIMALCOMPANION: + case ASSOCIATE_TYPE_DOMINATED: + case ASSOCIATE_TYPE_FAMILIAR: + case ASSOCIATE_TYPE_SUMMONED: + SetAssociateState(NW_ASC_DISTANCE_4_METERS); + break; + + } + +/* if (GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, GetMaster()) == OBJECT_SELF || + GetAssociate(ASSOCIATE_TYPE_DOMINATED, GetMaster()) == OBJECT_SELF || + GetAssociate(ASSOCIATE_TYPE_FAMILIAR, GetMaster()) == OBJECT_SELF || + GetAssociate(ASSOCIATE_TYPE_SUMMONED, GetMaster()) == OBJECT_SELF) + { + SetAssociateState(NW_ASC_DISTANCE_4_METERS); + } +*/ + // * Feb 2003: Set official campaign henchmen to have no inventory + SetLocalInt(OBJECT_SELF, "X0_L_NOTALLOWEDTOHAVEINVENTORY", 10) ; + + //SetAssociateState(NW_ASC_MODE_DEFEND_MASTER); + SetAssociateStartLocation(); + // SPECIAL CONVERSATION SETTTINGS + //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); + //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); + // This causes the creature to say a special greeting in their conversation file + // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired + // greeting in order to designate it. As the creature is actually saying this to + // himself, don't attach any player responses to the greeting. + + +// CUSTOM USER DEFINED EVENTS +/* + The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the + On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined + events user 1000 - 1010 +*/ + //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 + //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 + //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 + //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 + //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 + //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 + //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 +} + + diff --git a/src/module/nss/nw_ch_aca.nss b/src/module/nss/nw_ch_aca.nss new file mode 100644 index 0000000..99b6d5f --- /dev/null +++ b/src/module/nss/nw_ch_aca.nss @@ -0,0 +1,46 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_ch_aca + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associate OnRested event script; + Fires when the creature attempts to rest via ActionRest or a PC rests. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_menus" +void ai_UpdateAssociateWidget(object oMaster, object oAssociate, int nUIToken) +{ + if(nUIToken) NuiDestroy(oMaster, nUIToken); + ai_CreateWidgetNUI(oMaster, oAssociate); + if(oMaster != oAssociate) + { + nUIToken = NuiFindWindow(oMaster, "pc" + AI_WIDGET_NUI); + if(nUIToken) + { + NuiDestroy(oMaster, nUIToken); + ai_CreateWidgetNUI(oMaster, oMaster); + } + } +} +void main() +{ + object oAssociate = OBJECT_SELF; + ai_ClearCreatureActions(); + ai_OnRested(oAssociate); + object oMaster = GetMaster(oAssociate); + if(ai_GetIsCharacter(oMaster) && AI_HENCHMAN_WIDGET) + { + int nLevel = ai_GetCharacterLevels(oAssociate); + float fDelay = StringToFloat(Get2DAString("restduration", "DURATION", nLevel)); + fDelay = (fDelay / 1000.0f) + 6.0f; + // Update widget for spell widget. + string sAssociateType = ai_GetAssociateType(oMaster, oAssociate); + int nUIToken = NuiFindWindow(oMaster, sAssociateType + AI_WIDGET_NUI); + if(nUIToken) DelayCommand(fDelay, ai_UpdateAssociateWidget(oMaster, oAssociate, nUIToken)); + else + { + if(!ai_GetWidgetButton(oMaster, BTN_WIDGET_OFF, oAssociate, sAssociateType)) + { + DelayCommand(fDelay, ai_UpdateAssociateWidget(oMaster, oAssociate, 0)); + } + } + } +} diff --git a/src/module/nss/nw_ch_acani9.nss b/src/module/nss/nw_ch_acani9.nss new file mode 100644 index 0000000..661d1be --- /dev/null +++ b/src/module/nss/nw_ch_acani9.nss @@ -0,0 +1,48 @@ +//:://///////////////////////////////////////////// +//:: Associate: On Spawn In +//:: NW_CH_AC9 +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + +This must support the OC henchmen and all summoned/companion +creatures. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Nov 19, 2001 +//::////////////////////////////////////////////// + +#include "X0_INC_HENAI" + +void main() +{ + //Sets up the special henchmen listening patterns + SetAssociateListenPatterns(); + + // Set additional henchman listening patterns + bkSetListeningPatterns(); + + // Default behavior for henchmen at start + SetAssociateState(NW_ASC_POWER_CASTING); + SetAssociateState(NW_ASC_HEAL_AT_50); + SetAssociateState(NW_ASC_RETRY_OPEN_LOCKS); + SetAssociateState(NW_ASC_DISARM_TRAPS); + SetAssociateState(NW_ASC_MODE_DEFEND_MASTER, FALSE); + + //Use melee weapons by default + SetAssociateState(NW_ASC_USE_RANGED_WEAPON, FALSE); + + // Distance: make henchmen stick closer + SetAssociateState(NW_ASC_DISTANCE_4_METERS); + if (GetAssociateType(OBJECT_SELF) == ASSOCIATE_TYPE_HENCHMAN) + { + SetAssociateState(NW_ASC_DISTANCE_2_METERS); + } + + // Set starting location + SetAssociateStartLocation(); +} + + diff --git a/src/module/nss/nw_ch_acb.nss b/src/module/nss/nw_ch_acb.nss new file mode 100644 index 0000000..ec96e77 --- /dev/null +++ b/src/module/nss/nw_ch_acb.nss @@ -0,0 +1,42 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_ch_acb + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associates (Summons, Familiars, Companions) OnSpellCastAt event script; + Fires when oCreature becomes the target of a spell via SignalEvent. + Fires when a healing kit is used on a creature. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + object oCaster = GetLastSpellCaster(); + SetLocalObject(oCaster, AI_ATTACKED_SPELL, oCreature); + if(ai_Disabled(oCreature)) return; + if(!GetLastSpellHarmful()) return; + // If the spell came from an ally, we don't want to hold it against them. + if(GetFactionEqual(oCaster, oCreature)) + { + ClearPersonalReputation(oCaster, oCreature); + if(GetSpawnInCondition(NW_FLAG_SPELL_CAST_AT_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_SPELL_CAST_AT)); + } + } + // Lets see what kind of area of effect this is and select an appropriate action. + int nSpell = GetLastSpell(); + if(AI_DEBUG) ai_Debug("nw_ch_acb", "21", GetName(OBJECT_SELF) + " has been hit by a harmful spell(" + + Get2DAString("spells", "Label", nSpell) + ")!"); + if(ai_GetInAOEReaction(oCreature, oCaster, nSpell) && + ai_IsInADangerousAOE(oCreature, AI_RANGE_BATTLEFIELD, TRUE)) return; + if(ai_GetIsBusy(oCreature)) return; + if(ai_CheckForCombat(oCreature, FALSE)) return; + // We were attacked by an enemy out of combat, so let our allies know. + SetLocalObject(oCreature, AI_MY_TARGET, oCaster); + SpeakString(AI_ATKED_BY_SPELL, TALKVOLUME_SILENT_TALK); + if(!ai_CanIAttack(oCreature)) return; + if(GetDistanceBetween(oCreature, oCaster) < AI_RANGE_CLOSE) ai_DoAssociateCombatRound(oCreature); + else ActionMoveToObject(oCaster, TRUE, AI_RANGE_CLOSE - 1.0); +} + + diff --git a/src/module/nss/nw_ch_ace.nss b/src/module/nss/nw_ch_ace.nss new file mode 100644 index 0000000..688ab90 --- /dev/null +++ b/src/module/nss/nw_ch_ace.nss @@ -0,0 +1,60 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_ch_e_blocked + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associates OnBlocked event script; + Can be blocked by a creature or door. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + // This actually gets either a Creature or Door that is blocking OBJECT_SELF. + object oObject = GetBlockingDoor(); + if(AI_DEBUG) ai_Debug("nw_ch_ace", "14", GetName(oCreature) + " is being blocked by " + GetName(oObject)); + int nObjectType = GetObjectType(oObject); + if(nObjectType == OBJECT_TYPE_CREATURE) + { + if(GetIsEnemy(oObject, oCreature)) + { + if(ai_CanIAttack(oCreature) && ai_GetIsInCombat(oCreature)) + { + ai_DoAssociateCombatRound(oCreature); + return; + } + if(ai_CheckForCombat(oCreature, FALSE)) return; + } + } + // Anything below blocking us is a door. + if(nObjectType != OBJECT_TYPE_DOOR) return; + if(!ai_GetAIMode(oCreature, AI_MODE_OPEN_DOORS)) return; + //if(GetLockKeyTag(oObject) != "") return; + else if(GetIsDoorActionPossible(oObject, DOOR_ACTION_OPEN) && + GetAbilityScore(oCreature, ABILITY_INTELLIGENCE) >= 5) + { + DoDoorAction(oObject, DOOR_ACTION_OPEN); + return; + } + // Anything below is ignored in combat. + if(ai_GetIsInCombat(oCreature)) return; + if(GetIsDoorActionPossible(oObject, DOOR_ACTION_BASH) && + ai_GetWeaponDamage(oCreature, 3, TRUE) > GetHardness(oObject) && + GetLockKeyTag(oObject) == "") + { + ActionWait(1.0); + ActionAttack(oObject); + // Give them 3 rounds to break through a door. + DelayCommand(18.0, ai_ClearCreatureActions(TRUE)); + return; + } + else if(GetLocked(oObject)) + { + if(AI_DEBUG) ai_Debug("nw_ch_ace", "49", GetName(oObject) + " is locked!"); + ai_AttemptToByPassLock(oCreature, oObject); + } + // Clear our action so we can move on to something else unless the door is open. + else if(!GetIsOpen(oObject)) + { + ai_ClearCreatureActions(); + } +} diff --git a/src/module/nss/nw_ch_summon_9.nss b/src/module/nss/nw_ch_summon_9.nss new file mode 100644 index 0000000..ca5a87c --- /dev/null +++ b/src/module/nss/nw_ch_summon_9.nss @@ -0,0 +1,40 @@ +//:://///////////////////////////////////////////// +//:: Associate: On Spawn In +//:: nw_ch_summon_9 +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + +This must support the OC henchmen and all summoned/companion +creatures. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Nov 19, 2001 +//::////////////////////////////////////////////// +//:: Updated By: Georg Zoeller, 2003-08-20: Added variable check for spawn in animation +#include "X0_INC_HENAI" +#include "x2_inc_switches" +void main() +{ + //Sets up the special henchmen listening patterns + SetAssociateListenPatterns(); + + // Set additional henchman listening patterns + //bkSetListeningPatterns(); + // * If Incorporeal, apply changes + if (GetCreatureFlag(OBJECT_SELF, CREATURE_VAR_IS_INCORPOREAL) == TRUE) + { + effect eConceal = EffectConcealment(50, MISS_CHANCE_TYPE_NORMAL); + eConceal = ExtraordinaryEffect(eConceal); + effect eGhost = EffectCutsceneGhost(); + eGhost = ExtraordinaryEffect(eGhost); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eConceal, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, OBJECT_SELF); + } + // Set starting location + SetAssociateStartLocation(); +} + + diff --git a/src/module/nss/nw_inc_gff.nss b/src/module/nss/nw_inc_gff.nss new file mode 100644 index 0000000..533cf21 --- /dev/null +++ b/src/module/nss/nw_inc_gff.nss @@ -0,0 +1,623 @@ +// This is a helper library for advanced use: It allows constructing arbitrary gff data. +// You can then spawn your object via JsonToObject(). +// +// The data format is the same as https://github.com/niv/neverwinter.nim@1.4.3+. +// +// Example: +// +// json j = GffCreateObject(OBJECT_TYPE_ITEM); +// j = GffAddInt(j, "BaseItem", BASE_ITEM_BELT); +// j = GffAddInt(j, "ModelPart1", 12); +// j = GffAddLocString(j, "LocalizedName", "hi!"); +// object belt = JsonToObject(j, GetLocation(OBJECT_SELF)); + + +const string GFF_FIELD_TYPE_STRUCT = "struct"; +const string GFF_FIELD_TYPE_LIST = "list"; +const string GFF_FIELD_TYPE_BYTE = "byte"; +const string GFF_FIELD_TYPE_CHAR = "char"; +const string GFF_FIELD_TYPE_WORD = "word"; +const string GFF_FIELD_TYPE_SHORT = "short"; +const string GFF_FIELD_TYPE_DWORD = "dword"; +const string GFF_FIELD_TYPE_INT = "int"; +const string GFF_FIELD_TYPE_DWORD64 = "dword64"; +const string GFF_FIELD_TYPE_INT64 = "int64"; +const string GFF_FIELD_TYPE_FLOAT = "float"; +const string GFF_FIELD_TYPE_DOUBLE = "double"; +const string GFF_FIELD_TYPE_RESREF = "resref"; +const string GFF_FIELD_TYPE_STRING = "cexostring"; +const string GFF_FIELD_TYPE_LOC_STRING = "cexolocstring"; + + +// Create a empty object of the given type. You need to manually fill in all +// GFF data with GffAddXXX. This will require understanding of the GFF file format +// and what data fields each object type requires. +json GffCreateObject(int nObjectType); +// Create a combined area format(CAF) object. You need to manually create the ARE and GIT objects with their required data fields. +json GffCreateArea(json jARE, json jGIT); + +// Returns the OBJECT_TYPE_* of jGff. +// Note: Will return 0 for invalid object types, including areas. +int GffGetObjectType(json jGff); +// Returns TRUE if jGff is a combined area format(CAF) object. +int GffGetIsArea(json jGff); + +// Returns TRUE if a field named sLabel of sType exists in jGff. +// * sLabel: Can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details. +// * sType: An optional GFF_FIELD_TYPE_*, leave empty to check if sLabel exists regardless of type. +int GffGetFieldExists(json jGff, string sLabel, string sType = ""); + + +// Add a new field, will overwrite any existing fields with the same label even if the type is different. +// Returns a json null value on error with GetJsonError() filled in. +// +// sLabel can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details. +// For example, to add the tag of an area to an empty combined area format(CAF) object you can do the following: +// json jArea = GffCreateArea(JsonObject(), JsonObject()); +// jArea = GffAddString(jArea, "ARE/value/Tag", "AREA_TAG"); + +json GffAddStruct(json jGff, string sLabel, json jStruct, int nType = -1); +json GffAddList(json jGff, string sLabel, json jList); +json GffAddByte(json jGff, string sLabel, int v); +json GffAddChar(json jGff, string sLabel, int v); +json GffAddWord(json jGff, string sLabel, int v); +json GffAddShort(json jGff, string sLabel, int v); +// Note: Only data of type int32 will fit, because that's all that NWScript supports. +json GffAddDword(json jGff, string sLabel, int v); +json GffAddInt(json jGff, string sLabel, int v); +// Note: Only data of type int32 will fit, because that's all that NWScript supports. +json GffAddDword64(json jGff, string sLabel, int v); +// Note: Only data of type int32 will fit, because that's all that NWScript supports. +json GffAddInt64(json jGff, string sLabel, int v); +json GffAddFloat(json jGff, string sLabel, float v); +// Note: Only data of type float will fit, because that's all that NWScript supports. +json GffAddDouble(json jGff, string sLabel, float v); +json GffAddResRef(json jGff, string sLabel, string v); +json GffAddString(json jGff, string sLabel, string v); +json GffAddLocString(json jGff, string sLabel, string v, int nStrRef = -1); + + +// Replace a field, the type must match and the field must exist. +// Returns a json null value on error with GetJsonError() filled in. +// +// sLabel can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details. +// For example, to replace the name of an area in a combined area format(CAF) object you can do the following: +// json jArea = ObjectToStruct(GetFirstArea()); +// jArea = GffReplaceLocString(jArea, "ARE/value/Name", "New Area Name"); + +json GffReplaceStruct(json jGff, string sLabel, json jStruct); +json GffReplaceList(json jGff, string sLabel, json jList); +json GffReplaceByte(json jGff, string sLabel, int v); +json GffReplaceChar(json jGff, string sLabel, int v); +json GffReplaceWord(json jGff, string sLabel, int v); +json GffReplaceShort(json jGff, string sLabel, int v); +// Note: Only data of type int32 will fit, because that's all that NWScript supports. +json GffReplaceDword(json jGff, string sLabel, int v); +json GffReplaceInt(json jGff, string sLabel, int v); +// Note: Only data of type int32 will fit, because that's all that NWScript supports. +json GffReplaceDword64(json jGff, string sLabel, int v); +// Note: Only data of type int32 will fit, because that's all that NWScript supports. +json GffReplaceInt64(json jGff, string sLabel, int v); +json GffReplaceFloat(json jGff, string sLabel, float v); +// Note: Only data of type float will fit, because that's all that NWScript supports. +json GffReplaceDouble(json jGff, string sLabel, float v); +json GffReplaceResRef(json jGff, string sLabel, string v); +json GffReplaceString(json jGff, string sLabel, string v); +json GffReplaceLocString(json jGff, string sLabel, string v, int nStrRef = -1); + + +// Remove a field, the type must match and the field must exist. +// Returns a json null value on error with GetJsonError() filled in. +// +// sLabel can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details. +// For example, to remove all placeables from an area in a combined area format(CAF) object you can do the following: +// json jArea = ObjectToStruct(GetFirstArea()); +// jArea = GffRemoveList(jArea, "GIT/value/Placeable List"); + +json GffRemoveStruct(json jGff, string sLabel); +json GffRemoveList(json jGff, string sLabel); +json GffRemoveByte(json jGff, string sLabel); +json GffRemoveChar(json jGff, string sLabel); +json GffRemoveWord(json jGff, string sLabel); +json GffRemoveShort(json jGff, string sLabel); +json GffRemoveDword(json jGff, string sLabel); +json GffRemoveInt(json jGff, string sLabel); +json GffRemoveDword64(json jGff, string sLabel); +json GffRemoveInt64(json jGff, string sLabel); +json GffRemoveFloat(json jGff, string sLabel); +json GffRemoveDouble(json jGff, string sLabel); +json GffRemoveResRef(json jGff, string sLabel); +json GffRemoveString(json jGff, string sLabel); +json GffRemoveLocString(json jGff, string sLabel); + + +// Get a field's value as json object. +// Returns a json null value on error with GetJsonError() filled in. +// +// Note: Json types do not implicitly convert between types, this means you cannot convert a JsonInt to a string with JsonGetString(), etc. +// You may need to check the type with JsonGetType() and then do the appropriate cast yourself. +// For GffGet*() functions the json type returned is noted in the function description. +// +// Example: +// INCORRECT: string s = JsonGetString(GffGetInt()); +// CORRECT: string s = IntToString(JsonGetInt(GffGetInt())); +// +// sLabel can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details. +// For example, to get the resref of an area in a combined area format(CAF) object you can do the following: +// json jResRef = GffGetResRef(ObjectToStruct(GetFirstArea()), "ARE/value/ResRef"); +// if (jResRef != JsonNull()) +// { +// string sResRef = JsonGetString(jResRef); +// } +// else +// WriteTimestampedLogEntry("Failed to get area ResRef: " + JsonGetError(jResRef)); + +// Returns the struct as JsonObject() on success. +json GffGetStruct(json jGff, string sLabel); +// Returns a JsonArray() with all the list elements on success. +json GffGetList(json jGff, string sLabel); +// Returns a JsonInt() on success. +json GffGetByte(json jGff, string sLabel); +// Returns a JsonInt() on success. +json GffGetChar(json jGff, string sLabel); +// Returns a JsonInt() on success. +json GffGetWord(json jGff, string sLabel); +// Returns a JsonInt() on success. +json GffGetShort(json jGff, string sLabel); +// Returns a JsonInt() on success. +json GffGetDword(json jGff, string sLabel); +// Returns a JsonInt() on success. +json GffGetInt(json jGff, string sLabel); +// Returns a JsonInt() on success. +json GffGetDword64(json jGff, string sLabel); +// Returns a JsonInt() on success. +json GffGetInt64(json jGff, string sLabel); +// Returns a JsonFloat() on success. +json GffGetFloat(json jGff, string sLabel); +// Returns a JsonFloat() on success. +json GffGetDouble(json jGff, string sLabel); +// Returns a JsonString() on success. +json GffGetResRef(json jGff, string sLabel); +// Returns a JsonString() on success. +json GffGetString(json jGff, string sLabel); +// Returns a JsonObject() on success. +// Key "0" will have a JsonString() with the string, if set. +// Key "id" will have a JsonInt() with the strref, if set. +json GffGetLocString(json jGff, string sLabel); + + +// *** Internal Helper Functions +json AddPatchOperation(json jPatchArray, string sOp, string sPath, json jValue) +{ + json jOperation = JsonObject(); + jOperation = JsonObjectSet(jOperation, "op", JsonString(sOp)); + jOperation = JsonObjectSet(jOperation, "path", JsonString(sPath)); + jOperation = JsonObjectSet(jOperation, "value", jValue); + return JsonArrayInsert(jPatchArray, jOperation); +} + +json GffAddField(json jGff, string sLabel, string sType, json jValue, int nType = -1) +{ + json jField = JsonObject(); + jField = JsonObjectSet(jField, "type", JsonString(sType)); + jField = JsonObjectSet(jField, "value", jValue); + if (sType == GFF_FIELD_TYPE_STRUCT && nType != -1) + jField = JsonObjectSet(jField, "__struct_id", JsonInt(nType)); + + return JsonPatch(jGff, AddPatchOperation(JsonArray(), "add", "/" + sLabel, jField)); +} + +json GffReplaceField(json jGff, string sLabel, string sType, json jValue) +{ + json jPatch = JsonArray(); + jPatch = AddPatchOperation(jPatch, "test", "/" + sLabel + "/type", JsonString(sType)); + jPatch = AddPatchOperation(jPatch, "replace", "/" + sLabel + "/value", jValue); + return JsonPatch(jGff, jPatch); +} + +json GffRemoveField(json jGff, string sLabel, string sType) +{ + json jPatch = JsonArray(); + jPatch = AddPatchOperation(jPatch, "test", "/" + sLabel + "/type", JsonString(sType)); + jPatch = AddPatchOperation(jPatch, "remove", "/" + sLabel, JsonNull()); + return JsonPatch(jGff, jPatch); +} + +json GffGetFieldType(json jGff, string sLabel) +{ + return JsonPointer(jGff, "/" + sLabel + "/type"); +} + +json GffGetFieldValue(json jGff, string sLabel) +{ + return JsonPointer(jGff, "/" + sLabel + "/value"); +} + +json GffGetField(json jGff, string sLabel, string sType) +{ + json jType = GffGetFieldType(jGff, sLabel); + if (jType == JsonNull()) + return jType; + else if (jType != JsonString(sType)) + return JsonNull("field type does not match"); + else + return GffGetFieldValue(jGff, sLabel); +} + +json GffLocString(string v, int nStrRef = -1) +{ + json jLocString = JsonObject(); + if (v != "") + jLocString = JsonObjectSet(jLocString, "0", JsonString(v)); // english/any + if (nStrRef != -1) + jLocString = JsonObjectSet(jLocString, "id", JsonInt(nStrRef)); + + return jLocString; +} +//*** + +json GffCreateObject(int nObjectType) +{ + string ot; + if (nObjectType == OBJECT_TYPE_CREATURE) ot = "UTC "; + else if (nObjectType == OBJECT_TYPE_ITEM) ot = "UTI "; + else if (nObjectType == OBJECT_TYPE_TRIGGER) ot = "UTT "; + else if (nObjectType == OBJECT_TYPE_DOOR) ot = "UTD "; + else if (nObjectType == OBJECT_TYPE_WAYPOINT) ot = "UTW "; + else if (nObjectType == OBJECT_TYPE_PLACEABLE) ot = "UTP "; + else if (nObjectType == OBJECT_TYPE_STORE) ot = "UTM "; + else if (nObjectType == OBJECT_TYPE_ENCOUNTER) ot = "UTE "; + + if (ot == "") return JsonNull("invalid object type"); + + json ret = JsonObject(); + ret = JsonObjectSet(ret, "__data_type", JsonString(ot)); + return ret; +} + +json GffCreateArea(json jARE, json jGIT) +{ + json jCAF = JsonObject(); + jCAF = JsonObjectSet(jCAF, "__data_type", JsonString("CAF ")); + jCAF = GffAddStruct(jCAF, "ARE", jARE, 0); + jCAF = GffAddStruct(jCAF, "GIT", jGIT, 1); + return jCAF; +} + + +int GffGetObjectType(json jGff) +{ + json jDataType = JsonObjectGet(jGff, "__data_type"); + if (jDataType == JsonNull()) + return 0; + else + { + string sObjectType = JsonGetString(jDataType); + + if (sObjectType == "UTC ") return OBJECT_TYPE_CREATURE; + else if (sObjectType == "UTI ") return OBJECT_TYPE_ITEM; + else if (sObjectType == "UTT ") return OBJECT_TYPE_TRIGGER; + else if (sObjectType == "UTD ") return OBJECT_TYPE_DOOR; + else if (sObjectType == "UTW ") return OBJECT_TYPE_WAYPOINT; + else if (sObjectType == "UTP ") return OBJECT_TYPE_PLACEABLE; + else if (sObjectType == "UTM ") return OBJECT_TYPE_STORE; + else if (sObjectType == "UTE ") return OBJECT_TYPE_ENCOUNTER; + } + + return 0; +} + +int GffGetIsArea(json jGff) +{ + return JsonObjectGet(jGff, "__data_type") == JsonString("CAF "); +} + +int GffGetFieldExists(json jGff, string sLabel, string sType = "") +{ + json jFieldType = GffGetFieldType(jGff, sLabel); + return sType == "" ? jFieldType != JsonNull() : jFieldType == JsonString(sType); +} + + +json GffAddStruct(json jGff, string sLabel, json jStruct, int nType = -1) +{ + return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_STRUCT, jStruct, nType); +} + +json GffAddList(json jGff, string sLabel, json jList) +{ + return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_LIST, jList); +} + +json GffAddByte(json jGff, string sLabel, int v) +{ + return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_BYTE, JsonInt(v)); +} + +json GffAddChar(json jGff, string sLabel, int v) +{ + return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_CHAR, JsonInt(v)); +} + +json GffAddWord(json jGff, string sLabel, int v) +{ + return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_WORD, JsonInt(v)); +} + +json GffAddShort(json jGff, string sLabel, int v) +{ + return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_SHORT, JsonInt(v)); +} + +json GffAddDword(json jGff, string sLabel, int v) +{ + return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_DWORD, JsonInt(v)); +} + +json GffAddInt(json jGff, string sLabel, int v) +{ + return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_INT, JsonInt(v)); +} + +json GffAddDword64(json jGff, string sLabel, int v) +{ + return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_DWORD64, JsonInt(v)); +} + +json GffAddInt64(json jGff, string sLabel, int v) +{ + return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_INT64, JsonInt(v)); +} + +json GffAddFloat(json jGff, string sLabel, float v) +{ + return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_FLOAT, JsonFloat(v)); +} + +json GffAddDouble(json jGff, string sLabel, float v) +{ + return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_DOUBLE, JsonFloat(v)); +} + +json GffAddResRef(json jGff, string sLabel, string v) +{ + return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_RESREF, JsonString(v)); +} + +json GffAddString(json jGff, string sLabel, string v) +{ + return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_STRING, JsonString(v)); +} + +json GffAddLocString(json jGff, string sLabel, string v, int nStrRef = -1) +{ + return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_LOC_STRING, GffLocString(v, nStrRef)); +} + + +json GffReplaceStruct(json jGff, string sLabel, json jStruct) +{ + return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_STRUCT, jStruct); +} + +json GffReplaceList(json jGff, string sLabel, json jList) +{ + return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_LIST, jList); +} + +json GffReplaceByte(json jGff, string sLabel, int v) +{ + return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_BYTE, JsonInt(v)); +} + +json GffReplaceChar(json jGff, string sLabel, int v) +{ + return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_CHAR, JsonInt(v)); +} + +json GffReplaceWord(json jGff, string sLabel, int v) +{ + return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_WORD, JsonInt(v)); +} + +json GffReplaceShort(json jGff, string sLabel, int v) +{ + return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_SHORT, JsonInt(v)); +} + +json GffReplaceDword(json jGff, string sLabel, int v) +{ + return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_DWORD, JsonInt(v)); +} + +json GffReplaceInt(json jGff, string sLabel, int v) +{ + return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_INT, JsonInt(v)); +} + +json GffReplaceDword64(json jGff, string sLabel, int v) +{ + return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_DWORD64, JsonInt(v)); +} + +json GffReplaceInt64(json jGff, string sLabel, int v) +{ + return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_INT64, JsonInt(v)); +} + +json GffReplaceFloat(json jGff, string sLabel, float v) +{ + return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_FLOAT, JsonFloat(v)); +} + +json GffReplaceDouble(json jGff, string sLabel, float v) +{ + return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_DOUBLE, JsonFloat(v)); +} + +json GffReplaceResRef(json jGff, string sLabel, string v) +{ + return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_RESREF, JsonString(v)); +} + +json GffReplaceString(json jGff, string sLabel, string v) +{ + return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_STRING, JsonString(v)); +} + +json GffReplaceLocString(json jGff, string sLabel, string v, int nStrRef = -1) +{ + return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_LOC_STRING, GffLocString(v, nStrRef)); +} + + +json GffRemoveStruct(json jGff, string sLabel) +{ + return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_STRUCT); +} + +json GffRemoveList(json jGff, string sLabel) +{ + return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_LIST); +} + +json GffRemoveByte(json jGff, string sLabel) +{ + return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_BYTE); +} + +json GffRemoveChar(json jGff, string sLabel) +{ + return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_CHAR); +} + +json GffRemoveWord(json jGff, string sLabel) +{ + return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_WORD); +} + +json GffRemoveShort(json jGff, string sLabel) +{ + return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_SHORT); +} + +json GffRemoveDword(json jGff, string sLabel) +{ + return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_DWORD); +} + +json GffRemoveInt(json jGff, string sLabel) +{ + return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_INT); +} + +json GffRemoveDword64(json jGff, string sLabel) +{ + return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_DWORD64); +} + +json GffRemoveInt64(json jGff, string sLabel) +{ + return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_INT64); +} + +json GffRemoveFloat(json jGff, string sLabel) +{ + return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_FLOAT); +} + +json GffRemoveDouble(json jGff, string sLabel) +{ + return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_DOUBLE); +} + +json GffRemoveResRef(json jGff, string sLabel) +{ + return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_RESREF); +} + +json GffRemoveString(json jGff, string sLabel) +{ + return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_STRING); +} + +json GffRemoveLocString(json jGff, string sLabel) +{ + return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_LOC_STRING); +} + + +json GffGetStruct(json jGff, string sLabel) +{ + return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_STRUCT); +} + +json GffGetList(json jGff, string sLabel) +{ + return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_LIST); +} + +json GffGetByte(json jGff, string sLabel) +{ + return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_BYTE); +} + +json GffGetChar(json jGff, string sLabel) +{ + return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_CHAR); +} + +json GffGetWord(json jGff, string sLabel) +{ + return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_WORD); +} + +json GffGetShort(json jGff, string sLabel) +{ + return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_SHORT); +} + +json GffGetDword(json jGff, string sLabel) +{ + return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_DWORD); +} + +json GffGetInt(json jGff, string sLabel) +{ + return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_INT); +} + +json GffGetDword64(json jGff, string sLabel) +{ + return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_DWORD64); +} + +json GffGetInt64(json jGff, string sLabel) +{ + return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_INT64); +} + +json GffGetFloat(json jGff, string sLabel) +{ + return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_FLOAT); +} + +json GffGetDouble(json jGff, string sLabel) +{ + return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_DOUBLE); +} + +json GffGetResRef(json jGff, string sLabel) +{ + return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_RESREF); +} + +json GffGetString(json jGff, string sLabel) +{ + return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_STRING); +} + +json GffGetLocString(json jGff, string sLabel) +{ + return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_LOC_STRING); +} diff --git a/src/module/nss/nw_o2_boss.nss b/src/module/nss/nw_o2_boss.nss new file mode 100644 index 0000000..c42e22e --- /dev/null +++ b/src/module/nss/nw_o2_boss.nss @@ -0,0 +1,37 @@ +//:://///////////////////////////////////////////// +//:: General Treasure Spawn Script BOSS +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Spawns in general purpose treasure, usable + by all classes. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: March 19 2002 +//::////////////////////////////////////////////// +#include "NW_O2_CONINCLUDE" + +void main() + +{ + if (GetLocalInt(OBJECT_SELF,"NW_DO_ONCE") != 0) + { + return; + } + object oLastOpener = GetLastOpener(); + + // * May 13 2002: Must create appropriate treasure for each + // * faction member in the party. + if (GetIsObjectValid(oLastOpener) == TRUE) + { + object oMember = GetFirstFactionMember(oLastOpener, TRUE); + while (GetIsObjectValid(oMember) == TRUE) + { + GenerateBossTreasure(oMember, OBJECT_SELF); + oMember = GetNextFactionMember(oLastOpener, TRUE); + } + SetLocalInt(OBJECT_SELF,"NW_DO_ONCE",1); + } + ShoutDisturbed(); +} diff --git a/src/module/nss/nw_o2_classhig.nss b/src/module/nss/nw_o2_classhig.nss new file mode 100644 index 0000000..d6e51ee --- /dev/null +++ b/src/module/nss/nw_o2_classhig.nss @@ -0,0 +1,17 @@ +//:://///////////////////////////////////////////// +//:: General Treasure Spawn Script HIGH +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Spawns in general purpose treasure, usable + by all classes. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: February 26 2001 +//::////////////////////////////////////////////// + +void main() +{ + ExecuteScript("nw_o2_generalhig", OBJECT_SELF); +} diff --git a/src/module/nss/nw_o2_classlow.nss b/src/module/nss/nw_o2_classlow.nss new file mode 100644 index 0000000..701921f --- /dev/null +++ b/src/module/nss/nw_o2_classlow.nss @@ -0,0 +1,17 @@ +//:://///////////////////////////////////////////// +//:: General Treasure Spawn Script +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Spawns in general purpose treasure, usable + by all classes. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: February 26 2001 +//::////////////////////////////////////////////// + +void main() +{ + ExecuteScript("nw_o2_generallow", OBJECT_SELF); +} diff --git a/src/module/nss/nw_o2_classmed.nss b/src/module/nss/nw_o2_classmed.nss new file mode 100644 index 0000000..732a163 --- /dev/null +++ b/src/module/nss/nw_o2_classmed.nss @@ -0,0 +1,17 @@ +//:://///////////////////////////////////////////// +//:: General Treasure Spawn Script MEDIUM +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Spawns in general purpose treasure, usable + by all classes. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: February 26 2001 +//::////////////////////////////////////////////// + +void main() +{ + ExecuteScript("nw_o2_generalmed", OBJECT_SELF); +} diff --git a/src/module/nss/nw_o2_classweap.nss b/src/module/nss/nw_o2_classweap.nss new file mode 100644 index 0000000..f2954e2 --- /dev/null +++ b/src/module/nss/nw_o2_classweap.nss @@ -0,0 +1,2898 @@ +//:://///////////////////////////////////////////// +//:: Weapon Spawn Script for Martial Classes +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Spawns in a magical SPECIFIC weapon suited for that class. + Will spawn in either a generic or specific, depending on the + value. + + NOTE: Only works on containers +*/ +//::////////////////////////////////////////////// +//:: Created By: Andrew, Brent +//:: Created On: February 2002 +//::////////////////////////////////////////////// + +#include "NW_O2_CONINCLUDE" +#include "prc_class_const" + + +void CreateBastardSword(object oTarget, object oAdventurer) +{ + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmbs002"; break; + } + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmbs002"; break; + } + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmbs002"; break; + case 2: sItem = "nw_wswmbs009"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmbs009"; break; + case 2: sItem = "nw_wswmbs005"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmbs005"; break; + case 2: sItem = "nw_wswmbs010"; break; + case 3: sItem = "nw_wswmbs006"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmbs010"; break; + case 2: sItem = "nw_wswmbs006"; break; + case 3: sItem = "nw_wswmbs007"; break; + case 4: sItem = "nw_wswmbs003"; break; + case 5: sItem = "nw_wswmbs004"; break; + } + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateBattleAxe(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmbt002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmbt002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmbt002"; break; + case 2: sItem = "nw_waxmbt010"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmbt010"; break; + case 2: sItem = "nw_waxmbt011"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmbt011"; break; + case 2: sItem = "nw_waxmbt006"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmbt011"; break; + case 2: sItem = "nw_waxmbt006"; break; + case 3: sItem = "nw_waxmbt003"; break; + case 4: sItem = "nw_waxmbt004"; break; + case 5: sItem = "nw_waxmbt005"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateClub(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmcl002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmcl002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmcl002"; break; + case 2: sItem = "nw_wblmcl010"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmcl010"; break; + case 2: sItem = "nw_wblmcl004"; break; + case 3: sItem = "nw_wblmcl003"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmcl004"; break; + case 2: sItem = "nw_wblmcl003"; break; + case 3: sItem = "nw_wblmcl011"; break; + case 4: sItem = "nw_wblmcl005"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmcl011"; break; + case 2: sItem = "nw_wblmcl005"; break; + case 3: sItem = "nw_wblmcl006"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} + +void CreateDagger(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmdg002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmdg002"; break; + } + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmdg002"; break; + case 2: sItem = "nw_wswmdg008"; break; + case 3: sItem = "nw_wswmdg006"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmdg008"; break; + case 2: sItem = "nw_wswmdg006"; break; + case 3: sItem = "nw_wswmdg009"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmdg009"; break; + case 2: sItem = "nw_wswmdg004"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmdg009"; break; + case 2: sItem = "nw_wswmdg004"; break; + case 3: sItem = "nw_wswmdg003"; break; + case 4: sItem = "nw_wswmdg007"; break; + case 5: sItem = "nw_wswmdg005"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateDart(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmdt002"; break; + case 2: sItem = "nw_wthmdt002"; break; + case 3: sItem = "nw_wthmdt008"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmdt008"; break; + case 2: sItem = "nw_wthmdt009"; break; + case 3: sItem = "nw_wthmdt003"; break; + } + + } + else + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmdt009"; break; + case 2: sItem = "nw_wthmdt003"; break; + case 3: sItem = "nw_wthmdt007"; break; + } + + } + + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, Random(40) + 1); +} +void CreateDireMace(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmma002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmma002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmma002"; break; + case 2: sItem = "nw_wdbmma003"; break; + case 3: sItem = "nw_wdbmma010"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmma003"; break; + case 2: sItem = "nw_wdbmma010"; break; + case 3: sItem = "nw_wdbmma005"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmma005"; break; + case 2: sItem = "nw_wdbmma011"; break; + case 3: sItem = "nw_wdbmma004"; break; + case 4: sItem = "nw_wdbmma006"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmma005"; break; + case 2: sItem = "nw_wdbmma011"; break; + case 3: sItem = "nw_wdbmma004"; break; + case 4: sItem = "nw_wdbmma006"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateDoubleAxe(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmax002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmax002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmax002"; break; + case 2: sItem = "nw_wdbmax010"; break; + case 3: sItem = "nw_wdbmax006"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmax010"; break; + case 2: sItem = "nw_wdbmax006"; break; + case 3: sItem = "nw_wdbmax005"; break; + } + + } + else if (GetRange(5, nHD)) + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmax005"; break; + case 2: sItem = "nw_wdbmax011"; break; + case 3: sItem = "nw_wdbmax004"; break; + case 4: sItem = "nw_wdbmax007"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmax011"; break; + case 2: sItem = "nw_wdbmax004"; break; + case 3: sItem = "nw_wdbmax007"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateGreatAxe(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmgr002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmgr002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmgr002"; break; + case 2: sItem = "nw_waxmgr009"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmgr002"; break; + case 2: sItem = "nw_waxmgr009"; break; + case 3: sItem = "nw_waxmgr003"; break; + case 4: sItem = "nw_waxmgr006"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmgr003"; break; + case 2: sItem = "nw_waxmgr006"; break; + case 3: sItem = "nw_waxmgr011"; break; + } + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmgr011"; break; + case 2: sItem = "nw_waxmgr005"; break; + case 3: sItem = "nw_waxmgr004"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateGreatSword(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmgs002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmgs002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmgs002"; break; + case 2: sItem = "nw_wswmgs011"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmgs011"; break; + case 2: sItem = "nw_wswmgs006"; break; + case 3: sItem = "nw_wswmgs004"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmgs006"; break; + case 2: sItem = "nw_wswmgs004"; break; + case 3: sItem = "nw_wswmgs012"; break; + case 4: sItem = "nw_wswmgs005"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmgs012"; break; + case 2: sItem = "nw_wswmgs005"; break; + case 3: sItem = "nw_wswmgs003"; break; + } + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateHalberd(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmhb002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmhb002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmhb002"; break; + case 2: sItem = "nw_wplmhb010"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmhb010"; break; + case 2: sItem = "nw_wplmhb004"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmhb004"; break; + case 2: sItem = "nw_wplmhb011"; break; + case 3: sItem = "nw_wplmhb003"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmhb011"; break; + case 2: sItem = "nw_wplmhb003"; break; + case 3: sItem = "nw_wplmhb007"; break; + case 4: sItem = "nw_wplmhb006"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateHandAxe(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmhn002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmhn002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmhn002"; break; + case 2: sItem = "nw_waxmhn010"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmhn010"; break; + case 2: sItem = "nw_waxmhn004"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmhn004"; break; + case 2: sItem = "nw_waxmhn011"; break; + case 3: sItem = "nw_waxmhn003"; break; + case 4: sItem = "nw_waxmhn005"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_waxmhn011"; break; + case 2: sItem = "nw_waxmhn003"; break; + case 3: sItem = "nw_waxmhn005"; break; + case 4: sItem = "nw_waxmhn006"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateHeavyCrossbow(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmxh002"; break; + case 2: sItem = "nw_wbwmxh002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmxh002"; break; + case 2: sItem = "nw_wbwmxh008"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmxh002"; break; + case 2: sItem = "nw_wbwmxh008"; break; + case 3: sItem = "nw_wbwmxh009"; break; + case 4: sItem = "nw_wbwmxh005"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmxh009"; break; + case 2: sItem = "nw_wbwmxh005"; break; + case 3: sItem = "nw_wbwmxh003"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmxh003"; break; + case 2: sItem = "nw_wbwmxh004"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmxh004"; break; + case 2: sItem = "nw_wbwmxh007"; break; + case 3: sItem = "nw_wbwmxh006"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateHeavyFlail(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmfh002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmfh002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmfh002"; break; + case 2: sItem = "nw_wblmfh007"; break; + case 3: sItem = "nw_wblmfh010"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmfh002"; break; + case 2: sItem = "nw_wblmfh007"; break; + case 3: sItem = "nw_wblmfh010"; break; + case 4: sItem = "nw_wblmfh004"; break; + case 5: sItem = "nw_wblmfh008"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmfh004"; break; + case 2: sItem = "nw_wblmfh008"; break; + case 3: sItem = "nw_wblmfh011"; break; + case 4: sItem = "nw_wblmfh006"; break; + case 5: sItem = "nw_wblmfh003"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmfh011"; break; + case 2: sItem = "nw_wblmfh006"; break; + case 3: sItem = "nw_wblmfh003"; break; + case 4: sItem = "nw_wblmfh005"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateKama(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmka002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmka002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmka002"; break; + case 2: sItem = "nw_wspmka004"; break; + case 3: sItem = "nw_wspmka007"; break; + case 4: sItem = "nw_wspmka008"; break; + case 5: sItem = "nw_wspmka005"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmka004"; break; + case 2: sItem = "nw_wspmka007"; break; + case 3: sItem = "nw_wspmka008"; break; + case 4: sItem = "nw_wspmka005"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmka005"; break; + case 2: sItem = "nw_wspmka009"; break; + case 3: sItem = "nw_wspmka006"; break; + case 4: sItem = "nw_wspmka003"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmka009"; break; + case 2: sItem = "nw_wspmka006"; break; + case 3: sItem = "nw_wspmka003"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateKatana(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmka002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmka002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmka002"; break; + case 2: sItem = "nw_wswmka005"; break; + case 3: sItem = "nw_wswmka010"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmka005"; break; + case 2: sItem = "nw_wswmka010"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmka011"; break; + case 2: sItem = "nw_wswmka007"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmka011"; break; + case 2: sItem = "nw_wswmka007"; break; + case 3: sItem = "nw_wswmka006"; break; + case 4: sItem = "nw_wswmka004"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateKukri(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmku002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmku002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmku002"; break; + case 2: sItem = "nw_wspmku006"; break; + case 3: sItem = "nw_wspmku008"; break; + case 4: sItem = "nw_wspmku005"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmku006"; break; + case 2: sItem = "nw_wspmku008"; break; + case 3: sItem = "nw_wspmku005"; break; + case 4: sItem = "nw_wspmku004"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmku004"; break; + case 2: sItem = "nw_wspmku009"; break; + case 3: sItem = "nw_wspmku007"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmku009"; break; + case 2: sItem = "nw_wspmku007"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateLightCrossbow(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwxl001"; break; + case 2: sItem = "nw_wbwmxl002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmxl002"; break; + case 2: sItem = "nw_wbwmxl008"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmxl008"; break; + case 2: sItem = "nw_wbwmxl009"; break; + case 3: sItem = "nw_wbwmxl005"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmxl009"; break; + case 2: sItem = "nw_wbwmxl005"; break; + case 3: sItem = "nw_wbwmxl003"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmxl003"; break; + case 2: sItem = "nw_wbwmxl004"; break; + case 3: sItem = "nw_wbwmxl007"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmxl003"; break; + case 2: sItem = "nw_wbwmxl004"; break; + case 3: sItem = "nw_wbwmxl007"; break; + case 4: sItem = "nw_wbwmxl006"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} + +void CreateLightFlail(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmfl002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmfl002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmfl002"; break; + case 2: sItem = "nw_wblmfl010"; break; + case 3: sItem = "nw_wblmfl004"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmfl010"; break; + case 2: sItem = "nw_wblmfl004"; break; + case 3: sItem = "nw_wblmfl005"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmfl005"; break; + case 2: sItem = "nw_wblmfl011"; break; + case 3: sItem = "nw_wblmfl007"; break; + case 4: sItem = "nw_wblmfl006"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmfl011"; break; + case 2: sItem = "nw_wblmfl007"; break; + case 3: sItem = "nw_wblmfl006"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} + +void CreateLightHammer(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmhl002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmhl002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmhl002"; break; + case 2: sItem = "nw_wblmhl010"; break; + case 3: sItem = "nw_wblmhl004"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmhl010"; break; + case 2: sItem = "nw_wblmhl004"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmhl005"; break; + case 2: sItem = "nw_wblmhl011"; break; + case 3: sItem = "nw_wblmhl006"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmhl005"; break; + case 2: sItem = "nw_wblmhl011"; break; + case 3: sItem = "nw_wblmhl006"; break; + case 4: sItem = "nw_wblmhl009"; break; + case 5: sItem = "nw_wblmhl003"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateLightMace(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmml002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmml002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmml002"; break; + case 2: sItem = "nw_wblmml011"; break; + case 3: sItem = "nw_wblmml006"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmml011"; break; + case 2: sItem = "nw_wblmml006"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmml012"; break; + case 2: sItem = "nw_wblmml004"; break; + case 3: sItem = "nw_wblmml005"; break; + case 4: sItem = "nw_wblmml007"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmml012"; break; + case 2: sItem = "nw_wblmml004"; break; + case 3: sItem = "nw_wblmml005"; break; + case 4: sItem = "nw_wblmml007"; break; + case 5: sItem = "nw_wblmml008"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateLongSword(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmls002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmls002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmls002"; break; + case 2: sItem = "nw_wswmls010"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmls010"; break; + case 2: sItem = "nw_wswmls007"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmls007"; break; + case 2: sItem = "nw_wswmls012"; break; + case 3: sItem = "nw_wswmls005"; break; + case 4: sItem = "nw_wswmls006"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmls012"; break; + case 2: sItem = "nw_wswmls005"; break; + case 3: sItem = "nw_wswmls006"; break; + case 4: sItem = "nw_wswmls004"; break; + case 5: sItem = "nw_wswmls013"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateLongbow(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmln002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmln002"; break; + case 2: sItem = "nw_wbwmln002"; break; + case 3: sItem = "nw_wbwmln008"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmln002"; break; + case 2: sItem = "nw_wbwmln008"; break; + case 3: sItem = "nw_wbwmln009"; break; + case 4: sItem = "nw_wbwmln004"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmln009"; break; + case 2: sItem = "nw_wbwmln004"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmln004"; break; + case 2: sItem = "nw_wbwmln007"; break; + case 3: sItem = "nw_wbwmln006"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmln007"; break; + case 2: sItem = "nw_wbwmln006"; break; + case 3: sItem = "nw_wbwmln005"; break; + case 4: sItem = "nw_wbwmln003"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateMorningstar(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmms002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmms002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmms002"; break; + case 2: sItem = "nw_wblmms010"; break; + case 3: sItem = "nw_wblmms007"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmms007"; break; + case 2: sItem = "nw_wblmms003"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmms003"; break; + case 2: sItem = "nw_wblmms011"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmms011"; break; + case 2: sItem = "nw_wblmms006"; break; + case 3: sItem = "nw_wblmms004"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateRapier(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmrp002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmrp002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmrp002"; break; + case 2: sItem = "nw_wswmrp004"; break; + case 3: sItem = "nw_wswmrp010"; break; + case 4: sItem = "nw_wswmrp003"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmrp004"; break; + case 2: sItem = "nw_wswmrp010"; break; + case 3: sItem = "nw_wswmrp003"; break; + case 4: sItem = "nw_wswmrp005"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmrp003"; break; + case 2: sItem = "nw_wswmrp005"; break; + case 3: sItem = "nw_wswmrp011"; break; + case 4: sItem = "nw_wswmrp007"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmrp011"; break; + case 2: sItem = "nw_wswmrp007"; break; + case 3: sItem = "nw_wswmrp006"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateScimitar(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmsc002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmsc002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmsc002"; break; + case 2: sItem = "nw_wswmsc010"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmsc010"; break; + case 2: sItem = "nw_wswmsc004"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmsc004"; break; + case 2: sItem = "nw_wswmsc011"; break; + case 3: sItem = "nw_wswmsc006"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmsc011"; break; + case 2: sItem = "nw_wswmsc006"; break; + case 3: sItem = "nw_wswmsc007"; break; + case 4: sItem = "nw_wswmsc005"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateScythe(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmsc002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmsc002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmsc002"; break; + case 2: sItem = "nw_wplmsc010"; break; + case 3: sItem = "nw_wplmsc003"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmsc010"; break; + case 2: sItem = "nw_wplmsc003"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmsc003"; break; + case 2: sItem = "nw_wplmsc011"; break; + case 3: sItem = "nw_wplmsc006"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmsc011"; break; + case 2: sItem = "nw_wplmsc006"; break; + case 3: sItem = "nw_wplmsc005"; break; + case 4: sItem = "nw_wplmsc004"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateShortsword(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmss002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmss002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmss002"; break; + case 2: sItem = "nw_wswmss009"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmss009"; break; + case 2: sItem = "nw_wswmss011"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmss011"; break; + case 2: sItem = "nw_wswmss005"; break; + case 3: sItem = "nw_wswmss004"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wswmss011"; break; + case 2: sItem = "nw_wswmss005"; break; + case 3: sItem = "nw_wswmss004"; break; + case 4: sItem = "nw_wswmss006"; break; + case 5: sItem = "nw_wswmss003"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateShortbow(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsh002"; break; + case 2: sItem = "nw_wbwmsh002"; break; + } + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsh002"; break; + case 2: sItem = "nw_wbwmsh008"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsh008"; break; + case 2: sItem = "nw_wbwmsh009"; break; + case 3: sItem = "nw_wbwmsh003"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsh009"; break; + case 2: sItem = "nw_wbwmsh003"; break; + case 3: sItem = "nw_wbwmsh006"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsh006"; break; + case 2: sItem = "nw_wbwmsh007"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsh007"; break; + case 2: sItem = "nw_wbwmsh005"; break; + case 3: sItem = "nw_wbwmsh004"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateShuriken(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmsh002"; break; + case 2: sItem = "nw_wthmsh002"; break; + case 3: sItem = "nw_wthmsh003"; break; + case 4: sItem = "nw_wthmsh008"; break; + case 5: sItem = "nw_wthmsh006"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmsh002"; break; + case 2: sItem = "nw_wthmsh003"; break; + case 3: sItem = "nw_wthmsh008"; break; + case 4: sItem = "nw_wthmsh006"; break; + case 5: sItem = "nw_wthmsh009"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmsh006"; break; + case 2: sItem = "nw_wthmsh009"; break; + case 3: sItem = "nw_wthmsh005"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmsh009"; break; + case 2: sItem = "nw_wthmsh005"; break; + case 3: sItem = "nw_wthmsh004"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmsh005"; break; + case 2: sItem = "nw_wthmsh004"; break; + case 3: sItem = "nw_wthmsh007"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmsh005"; break; + case 2: sItem = "nw_wthmsh004"; break; + case 3: sItem = "nw_wthmsh007"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, Random(40) + 1); +} +void CreateSickle(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmsc002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmsc002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmsc002"; break; + case 2: sItem = "nw_wspmsc010"; break; + case 3: sItem = "nw_wspmsc004"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmsc010"; break; + case 2: sItem = "nw_wspmsc004"; break; + case 3: sItem = "nw_wspmsc005"; break; + case 4: sItem = "nw_wspmsc006"; break; + case 5: sItem = "nw_wspmsc003"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmsc005"; break; + case 2: sItem = "nw_wspmsc006"; break; + case 3: sItem = "nw_wspmsc003"; break; + case 4: sItem = "nw_wspmsc011"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wspmsc011"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateSling(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsl001"; break; + case 2: sItem = "nw_wbwmsl001"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsl001"; break; + case 2: sItem = "nw_wbwmsl009"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsl009"; break; + case 2: sItem = "nw_wbwmsl010"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsl010"; break; + case 2: sItem = "nw_wbwmsl003"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsl003"; break; + case 2: sItem = "nw_wbwmsl007"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsl007"; break; + case 2: sItem = "nw_wbwmsl006"; break; + case 3: sItem = "nw_wbwmsl008"; break; + case 4: sItem = "nw_wbwmsl004"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateSpear(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmss002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmss002"; break; + } + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmss002"; break; + case 2: sItem = "nw_wbwmsl005"; break; + case 3: sItem = "nw_wplmss010"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wbwmsl005"; break; + case 2: sItem = "nw_wplmss010"; break; + case 3: sItem = "nw_wplmss005"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmss005"; break; + case 2: sItem = "nw_wplmss011"; break; + case 3: sItem = "nw_wplmss007"; break; + case 4: sItem = "nw_wplmss006"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wplmss011"; break; + case 2: sItem = "nw_wplmss007"; break; + case 3: sItem = "nw_wplmss006"; break; + case 4: sItem = "nw_wplmss004"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateStaff(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmqs002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmqs002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmqs002"; break; + case 2: sItem = "nw_wdbmqs005"; break; + case 3: sItem = "nw_wdbmqs006"; break; + case 4: sItem = "nw_wdbmqs008"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmqs005"; break; + case 2: sItem = "nw_wdbmqs006"; break; + case 3: sItem = "nw_wdbmqs008"; break; + case 4: sItem = "nw_wdbmqs004"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmqs004"; break; + case 2: sItem = "nw_wdbmqs009"; break; + case 3: sItem = "nw_wdbmqs003"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmqs009"; break; + case 2: sItem = "nw_wdbmqs003"; break; + case 3: sItem = "nw_wdbmqs007"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateThrowingAxe(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmax002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmax002"; break; + case 2: sItem = "nw_wthmax008"; break; + case 3: sItem = "nw_wthmax005"; break; + case 4: sItem = "nw_wthmax007"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(5) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmax008"; break; + case 2: sItem = "nw_wthmax005"; break; + case 3: sItem = "nw_wthmax007"; break; + case 4: sItem = "nw_wthmax003"; break; + case 5: sItem = "nw_wthmax004"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmax007"; break; + case 2: sItem = "nw_wthmax003"; break; + case 3: sItem = "nw_wthmax004"; break; + case 4: sItem = "nw_wthmax009"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmax003"; break; + case 2: sItem = "nw_wthmax004"; break; + case 3: sItem = "nw_wthmax009"; break; + case 4: sItem = "nw_wthmax006"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wthmax009"; break; + case 2: sItem = "nw_wthmax006"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, Random(40) + 1); +} +void CreateTwoBladedSword(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmsw002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmsw002"; break; + case 2: sItem = "nw_wdbmsw002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmsw002"; break; + case 2: sItem = "nw_wdbmsw010"; break; + case 3: sItem = "nw_wdbmsw006"; break; + case 4: sItem = "nw_wdbmsw007"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmsw010"; break; + case 2: sItem = "nw_wdbmsw006"; break; + case 3: sItem = "nw_wdbmsw007"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmsw011"; break; + case 2: sItem = "nw_wdbmsw005"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wdbmsw011"; break; + case 2: sItem = "nw_wdbmsw005"; break; + case 3: sItem = "nw_wdbmsw004"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateWarhammer(object oTarget, object oAdventurer) +{ + + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmhw002"; break; + } + + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + int nRandom = Random(1) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmhw002"; break; + } + + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmhw002"; break; + case 2: sItem = "nw_wblmhw011"; break; + case 3: sItem = "nw_wblmhw006"; break; + } + + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmhw011"; break; + case 2: sItem = "nw_wblmhw006"; break; + } + + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + int nRandom = Random(4) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmhw006"; break; + case 2: sItem = "nw_wblmhw005"; break; + case 3: sItem = "nw_wblmhw012"; break; + case 4: sItem = "nw_wblmhw003"; break; + } + + } + else if (GetRange(6, nHD)) // * 16000 and up + { + int nRandom = Random(3) + 1; + switch (nRandom) + { + case 1: sItem = "nw_wblmhw012"; break; + case 2: sItem = "nw_wblmhw003"; break; + case 3: sItem = "nw_wblmhw004"; break; + } + + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} +void CreateWhip(object oTarget, object oAdventurer) +{ + string sItem = ""; + int nHD = GetHitDice(oAdventurer); + + if (GetRange(1, nHD)) // * 800 + { + sItem = "x2_it_wpmwhip1"; + } + else if (GetRange(2, nHD)) // * 200 - 2500 + { + sItem = "x2_it_wpmwhip1"; + } + else if (GetRange(3, nHD)) // * 800 - 10000 + { + int nRandom = Random(2) + 1; + switch (nRandom) + { + case 1: sItem = "x2_it_wpmwhip1"; break; + case 2: sItem = "x2_it_wpmwhip2"; break; + } + } + else if (GetRange(4, nHD)) // * 2500 - 16500 + { + sItem = "x2_it_wpmwhip2"; + } + else if (GetRange(5, nHD)) // * 8000 - 25000 + { + sItem = "x2_it_wpmwhip3"; + } + else if (GetRange(6, nHD)) // * 16000 and up + { + sItem = "x2_it_wpmwhip3"; + } + if (sItem != "") + dbCreateItemOnObject(sItem, oTarget, 1); +} + +//:://///////////////////////////////////////////// +//:: Prefers +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Returns true if oAdventurer prefers using + this weapon. + CRITERIA: They have Weapon Focus + nFeatWeaponType: Uses the feat constants + to differentiate the weapon types +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: March 2002 +//::////////////////////////////////////////////// +int Prefers(int nFeatWeaponType, object oAdventurer) +{ + if (GetHasFeat(nFeatWeaponType, oAdventurer) == TRUE) + return TRUE; + else + return FALSE; +} + +void main() +{ + object oLastOpener = GetLastOpener(); + object oContainer = OBJECT_SELF; + + if (GetLocalInt(OBJECT_SELF, "NW_L_OPENONCE") > 0 || GetIsObjectValid(oLastOpener) == FALSE) + { + return; // * abort treasure if no one opened the container + } + SetLocalInt(OBJECT_SELF, "NW_L_OPENONCE",1); + ShoutDisturbed(); + + // * CHoose the weapon type to create + if (Prefers(FEAT_WEAPON_FOCUS_BASTARD_SWORD, oLastOpener) == TRUE) + { + CreateBastardSword(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_BATTLE_AXE,oLastOpener)) + { + CreateBattleAxe(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_CLUB,oLastOpener)) + { + CreateClub(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_DAGGER,oLastOpener)) + { + CreateDagger(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_DART,oLastOpener)) + { + CreateDart(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_DIRE_MACE,oLastOpener)) + { + CreateDireMace(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_DOUBLE_AXE,oLastOpener)) + { + CreateDoubleAxe(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_GREAT_AXE,oLastOpener)) + { + CreateGreatAxe(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_GREAT_SWORD,oLastOpener)) + { + CreateGreatSword(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_HALBERD,oLastOpener)) + { + CreateHalberd(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_HAND_AXE,oLastOpener)) + { + CreateHandAxe(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW,oLastOpener)) + { + CreateHeavyCrossbow(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_HEAVY_FLAIL,oLastOpener)) + { + CreateHeavyFlail(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_KAMA,oLastOpener)) + { + CreateKama(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_KATANA,oLastOpener)) + { + CreateKatana(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_KUKRI,oLastOpener)) + { + CreateKukri(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_LIGHT_CROSSBOW,oLastOpener)) + { + CreateLightCrossbow(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_LIGHT_FLAIL,oLastOpener)) + { + CreateLightFlail(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_LIGHT_HAMMER,oLastOpener)) + { + CreateLightHammer(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_LIGHT_MACE,oLastOpener)) + { + CreateLightMace(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_LONG_SWORD,oLastOpener)) + { + CreateLongSword(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_LONGBOW,oLastOpener)) + { + CreateLongbow(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_MORNING_STAR,oLastOpener)) + { + CreateMorningstar(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_RAPIER,oLastOpener)) + { + CreateRapier(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_SCIMITAR,oLastOpener)) + { + CreateScimitar(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_SCYTHE,oLastOpener)) + { + CreateScythe(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_SHORT_SWORD,oLastOpener)) + { + CreateShortsword(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_SHORTBOW,oLastOpener)) + { + CreateShortbow(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_SHURIKEN,oLastOpener)) + { + CreateShuriken(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_SICKLE,oLastOpener)) + { + CreateSickle(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_SLING,oLastOpener)) + { + CreateSling(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_SPEAR,oLastOpener)) + { + CreateSpear(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_STAFF,oLastOpener)) + { + CreateStaff(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_THROWING_AXE,oLastOpener)) + { + CreateThrowingAxe(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_TWO_BLADED_SWORD,oLastOpener)) + { + CreateTwoBladedSword(oContainer, oLastOpener); + } + else if (Prefers(FEAT_WEAPON_FOCUS_WAR_HAMMER,oLastOpener)) + { + CreateWarhammer(oContainer, oLastOpener); + } + else + { + // * if get to this point then the PC did not have Weapon Focus + // * in anything then do additional logic to give an appropriate weapon + if (GetLevelByClass(CLASS_TYPE_ALAGHAR, oLastOpener) >= 1) + { + CreateBattleAxe(oContainer, oLastOpener); + } + else + if (GetLevelByClass(CLASS_TYPE_HEARTWARDER, oLastOpener) >= 1 + || GetLevelByClass(CLASS_TYPE_LASHER, oLastOpener) >= 1) + { + CreateWhip(oContainer, oLastOpener); + } + else + if (GetLevelByClass(CLASS_TYPE_STORMLORD, oLastOpener) >= 1) + { + CreateSpear(oContainer, oLastOpener); + } + else + if (GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oLastOpener) >= 1) + { + CreateHalberd(oContainer, oLastOpener); + } + else + if (GetLevelByClass(CLASS_TYPE_HALFLING_WARSLINGER, oLastOpener) >= 1) + { + CreateSling(oContainer, oLastOpener); + } + else + if (GetLevelByClass(CLASS_TYPE_BOWMAN, oLastOpener) >= 1 + || GetLevelByClass(CLASS_TYPE_BLARCHER, oLastOpener) >= 1) + { + CreateLongbow(oContainer, oLastOpener); + } + else + if (GetLevelByClass(CLASS_TYPE_SAMURAI, oLastOpener) >= 1 + || GetLevelByClass(CLASS_TYPE_CW_SAMURAI, oLastOpener) >= 1) + { + CreateKatana(oContainer, oLastOpener); + } + else + if (GetLevelByClass(CLASS_TYPE_SWASHBUCKLER, oLastOpener) >= 1 + || GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oLastOpener) >= 1 + || GetLevelByClass(CLASS_TYPE_DUELIST, oLastOpener) >= 1) + { + CreateRapier(oContainer, oLastOpener); + } + else + if (GetLevelByClass(CLASS_TYPE_WIZARD, oLastOpener) >= 1 + || GetLevelByClass(CLASS_TYPE_PSION, oLastOpener) >= 1 + || GetLevelByClass(CLASS_TYPE_SHADOWCASTER, oLastOpener) >= 1) + { + CreateSpecificWizardWeapon(oContainer, oLastOpener); + } + else + if (GetLevelByClass(CLASS_TYPE_DRUID, oLastOpener) >= 1) + { + CreateScimitar(oContainer, oLastOpener); + } + else + if (GetLevelByClass(CLASS_TYPE_MONK, oLastOpener) >= 1) + { + CreateSpecificMonkWeapon(oContainer, oLastOpener); + } + else + if (GetLevelByClass(CLASS_TYPE_ROGUE, oLastOpener) >= 1 + || GetLevelByClass(CLASS_TYPE_BARD, oLastOpener) >= 1) + { + CreateShortsword(oContainer, oLastOpener); + } + else + if (GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oLastOpener)) + { + CreateBastardSword(oContainer, oLastOpener); + } + else + if (GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oLastOpener)) + { + CreateLongSword(oContainer, oLastOpener); + } + else + if (GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oLastOpener)) + { + CreateMorningstar(oContainer, oLastOpener); + } + } +} + + diff --git a/src/module/nss/nw_o2_feat.nss b/src/module/nss/nw_o2_feat.nss new file mode 100644 index 0000000..d9be1a3 --- /dev/null +++ b/src/module/nss/nw_o2_feat.nss @@ -0,0 +1,20 @@ +//:://///////////////////////////////////////////// +//:: Weapon Spawn Script for Martial Classes +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Spawns in a magical SPECIFIC weapon suited for that class. + Will spawn in either a generic or specific, depending on the + value. + + NOTE: Only works on containers +*/ +//::////////////////////////////////////////////// +//:: Created By: Andrew, Brent +//:: Created On: February 2002 +//::////////////////////////////////////////////// + +void main() +{ + ExecuteScript("nw_o2_classweap", OBJECT_SELF); +} diff --git a/src/module/nss/nw_o2_generalhig.nss b/src/module/nss/nw_o2_generalhig.nss new file mode 100644 index 0000000..5714ef4 --- /dev/null +++ b/src/module/nss/nw_o2_generalhig.nss @@ -0,0 +1,26 @@ +//:://///////////////////////////////////////////// +//:: General Treasure Spawn Script HIGH +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Spawns in general purpose treasure, usable + by all classes. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: February 26 2001 +//::////////////////////////////////////////////// +#include "NW_O2_CONINCLUDE" + +void main() + +{ + if (GetLocalInt(OBJECT_SELF,"NW_DO_ONCE") != 0) + { + return; + } + object oLastOpener = GetLastOpener(); + GenerateHighTreasure(oLastOpener, OBJECT_SELF); + SetLocalInt(OBJECT_SELF,"NW_DO_ONCE",1); + ShoutDisturbed(); +} diff --git a/src/module/nss/nw_o2_generallow.nss b/src/module/nss/nw_o2_generallow.nss new file mode 100644 index 0000000..c028730 --- /dev/null +++ b/src/module/nss/nw_o2_generallow.nss @@ -0,0 +1,25 @@ +//:://///////////////////////////////////////////// +//:: General Treasure Spawn Script +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Spawns in general purpose treasure, usable + by all classes. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: February 26 2001 +//::////////////////////////////////////////////// +#include "NW_O2_CONINCLUDE" + +void main() + +{ + if(GetLocalInt(OBJECT_SELF,"NW_DO_ONCE")) + return; + + object oLastOpener = GetLastOpener(); + GenerateLowTreasure(oLastOpener, OBJECT_SELF); + SetLocalInt(OBJECT_SELF,"NW_DO_ONCE",1); + ShoutDisturbed(); +} \ No newline at end of file diff --git a/src/module/nss/nw_o2_generalmed.nss b/src/module/nss/nw_o2_generalmed.nss new file mode 100644 index 0000000..d447bf0 --- /dev/null +++ b/src/module/nss/nw_o2_generalmed.nss @@ -0,0 +1,27 @@ +//:://///////////////////////////////////////////// +//:: General Treasure Spawn Script Medium +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Spawns in general purpose treasure, usable + by all classes. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: February 26 2001 +//::////////////////////////////////////////////// +#include "NW_O2_CONINCLUDE" + +void main() + +{ + if (GetLocalInt(OBJECT_SELF,"NW_DO_ONCE") != 0) + { + return; + } + object oLastOpener = GetLastOpener(); + GenerateMediumTreasure(oLastOpener, OBJECT_SELF); + SetLocalInt(OBJECT_SELF,"NW_DO_ONCE",1); + + ShoutDisturbed(); +} diff --git a/src/module/nss/nw_o2_generalmid.nss b/src/module/nss/nw_o2_generalmid.nss new file mode 100644 index 0000000..a6b2ef6 --- /dev/null +++ b/src/module/nss/nw_o2_generalmid.nss @@ -0,0 +1,17 @@ +//:://///////////////////////////////////////////// +//:: General Treasure Spawn Script Medium +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Spawns in general purpose treasure, usable + by all classes. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: February 26 2001 +//::////////////////////////////////////////////// + +void main() +{ + ExecuteScript("nw_o2_generalmed", OBJECT_SELF); +} diff --git a/src/module/nss/nw_o2_skeleton.nss b/src/module/nss/nw_o2_skeleton.nss new file mode 100644 index 0000000..f563ba1 --- /dev/null +++ b/src/module/nss/nw_o2_skeleton.nss @@ -0,0 +1,35 @@ +//:://///////////////////////////////////////////// +//:: NW_O2_SKELETON.nss +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Turns the placeable into a skeleton + if a player comes near enough. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: January 17, 2002 +//::////////////////////////////////////////////// +void ActionCreate(string sCreature, location lLoc) +{ + CreateObject(OBJECT_TYPE_CREATURE, sCreature, lLoc); +} +void main() +{ + object oCreature = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); + if (GetIsObjectValid(oCreature) == TRUE && GetDistanceToObject(oCreature) < 10.0) + { + effect eMind = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD); + string sCreature = "nw_skeleton"; + // * 10% chance of a skeleton chief instead + if (Random(100) > 90) + { + sCreature = "nw_skeleton"; + } + location lLoc = GetLocation(OBJECT_SELF); + DelayCommand(0.3, ActionCreate(sCreature, lLoc)); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eMind, GetLocation(OBJECT_SELF)); + SetPlotFlag(OBJECT_SELF, FALSE); + DestroyObject(OBJECT_SELF, 0.5); + } +} diff --git a/src/module/nss/on_used_converse.nss b/src/module/nss/on_used_converse.nss new file mode 100644 index 0000000..2bfb5d2 --- /dev/null +++ b/src/module/nss/on_used_converse.nss @@ -0,0 +1,5 @@ +void main() + { + object oPC = GetLastUsedBy(); + ActionStartConversation(oPC,"",TRUE,FALSE); + } diff --git a/src/module/nss/on_used_scales.nss b/src/module/nss/on_used_scales.nss new file mode 100644 index 0000000..ed8d445 --- /dev/null +++ b/src/module/nss/on_used_scales.nss @@ -0,0 +1,31 @@ +#include "inc_mod_constant" +void main() + { + object oUser = GetLastUsedBy(); + object oScales = OBJECT_SELF; + if (GetFactionLeader(oUser) == oUser) + { + int iPot,iGold,iSplit; + int i,j; + object oPC = GetFirstFactionMember(oUser); + while (GetIsObjectValid(oPC)) + { + j += 1; + iGold = GetGold(oPC); + iPot += iGold; + TakeGoldFromCreature(iGold,oPC,TRUE); + oPC = GetNextFactionMember(oUser); + } + iSplit = iPot/j; + oPC = GetFirstFactionMember(oUser); + while (GetIsObjectValid(oPC)) + { + GiveGoldToCreature(oPC,iSplit); + oPC = GetNextFactionMember(oUser); + } + if (EXPORT_CHARACTERS) + ExportAllCharacters(); + } + else + AssignCommand(oUser,ActionExamine(oScales)); + } diff --git a/src/module/nss/on_used_sit.nss b/src/module/nss/on_used_sit.nss new file mode 100644 index 0000000..3e15e1c --- /dev/null +++ b/src/module/nss/on_used_sit.nss @@ -0,0 +1,6 @@ +void main() + { + object oPC = GetLastUsedBy(); + object oChair = OBJECT_SELF; + AssignCommand(oPC,ActionSit(oChair)); + } diff --git a/src/module/nss/pc_examine.nss b/src/module/nss/pc_examine.nss new file mode 100644 index 0000000..11f80db --- /dev/null +++ b/src/module/nss/pc_examine.nss @@ -0,0 +1,7 @@ +void main() + { + object oPC = GetLastUsedBy(); + object oObject = OBJECT_SELF; + AssignCommand(oPC,ClearAllActions()); + AssignCommand(oPC,ActionExamine(oObject)); + } diff --git a/src/module/nss/pc_heartbeat.nss b/src/module/nss/pc_heartbeat.nss new file mode 100644 index 0000000..46b2806 --- /dev/null +++ b/src/module/nss/pc_heartbeat.nss @@ -0,0 +1,79 @@ +// This script is run by the PCs every 6 seconds. +#include "inc_misc_tools" +void main() + { + int iHP = GetCurrentHitPoints(); + int iVoice, iTimer; + object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); + //--------------------START MINUS TEN RULE-------------------------------- + if (GetIsDead(OBJECT_SELF)) + { + if (iHP < -9) + return;// Hes dead therefore no heartbeat. + if (iHP == 0) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(1+GetCurrentHitPoints()),OBJECT_SELF); + iVoice = VOICE_CHAT_HEALME; + } + else if (d10() == 1) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(1+GetCurrentHitPoints()),OBJECT_SELF); + iVoice = VOICE_CHAT_REST; + } + else if (GetLocalInt(oSkin,"miscb049")) + { + iVoice = VOICE_CHAT_HEALME; + } + else + { + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(1,DAMAGE_TYPE_MAGICAL),OBJECT_SELF); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_COM_BLOOD_CRT_RED),GetLocation(OBJECT_SELF)); + switch(d3()) + { + case 1:{iVoice = VOICE_CHAT_PAIN1;break;} + case 2:{iVoice = VOICE_CHAT_PAIN2;break;} + case 3:{iVoice = VOICE_CHAT_PAIN3;break;} + } + } + PlayVoiceChat(iVoice); + } + else // Else do normal heartbeat functions. + { + if (GetCurrentHitPoints() == 1) + { + if (!GetLocalInt(OBJECT_SELF,"Disabled")) + { + PlayVoiceChat(VOICE_CHAT_HELP); + SetLocalInt(OBJECT_SELF,"Disabled",TRUE); + } + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectMovementSpeedDecrease(40),OBJECT_SELF,10.0); + } + else if (GetLocalInt(OBJECT_SELF,"Disabled")) + DeleteLocalInt(OBJECT_SELF,"Disabled"); +//-------------------- END MINUS TEN RULE------------------------------------- + +//---------------------PARTY LEADER EXTRA FUNCTIONS--------------------------- + if (GetFactionLeader(OBJECT_SELF) == OBJECT_SELF) + { + // Reset party rests. + if (GetHasAllPartyRested(OBJECT_SELF)) + ResetPartyRests(OBJECT_SELF); + // Wandering Monsters Check + ExecuteScript("rdg_wand_monster",OBJECT_SELF); + } +//------------------------- END PARTY LEADER FUNCTIONS---------------------- + // Detect Mode - Searching + if (GetDetectMode(OBJECT_SELF) == DETECT_MODE_ACTIVE) + DetectMode(); + // Check rest counter + if (HasRestGivingItem(OBJECT_SELF)) + SetLocalInt(OBJECT_SELF,"Rest",TRUE); + // Rest Button Flashing + if (HasAvailableRest(OBJECT_SELF) && GetHasFood(OBJECT_SELF)) + SetPanelButtonFlash(OBJECT_SELF,PANEL_BUTTON_REST,FALSE); + else + SetPanelButtonFlash(OBJECT_SELF,PANEL_BUTTON_REST,TRUE); + } + } + + diff --git a/src/module/nss/pc_savebuffs.nss b/src/module/nss/pc_savebuffs.nss new file mode 100644 index 0000000..96b42d0 --- /dev/null +++ b/src/module/nss/pc_savebuffs.nss @@ -0,0 +1,182 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: pc_savebuffs +//////////////////////////////////////////////////////////////////////////////// + Used with pi_buffing to run the buffing plugin for + Philos Single Player Enhancements. + +Note: If a spell saves incorrectly check the spell script to see if the correct +spell is being passed through the SignalEvent correctly. +Known error in Shield of Faith spell as the below code in the shield of faith +script sends Camoflage instead! +"SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, 421, FALSE));" +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +string GetBuffDatabaseString(object oPlayer, string sDataField, string sTag = ""); +// sDataField should be one of the data fields for that table. +// sData is the string data to be saved. +void SetBuffDatabaseString(object oPlayer, string sDataField, string sData, string sTag = ""); +// sDataField should be one of the data fields for that table. +// jData is the json data to be saved. +void SetBuffDatabaseJson(object oPlayer, string sDataField, json jData, string sTag = ""); +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +json GetBuffDatabaseJson(object oPlayer, string sDataField, string sTag = ""); +// Returns the level if this spell has a domain spell on nLevel, or 0. +int GetHasDomainSpell(object oCaster, int nClass, int nLevel, int nSpell); + +// We do some crazy hack to get all the correct information when casting spells. +// GetLastSpellCastClass() will only give the class if this script is running +// on the actual caster, i.e. our PC. +// GetLastSpellLevel() will only give the level if this script is running on +// the actual caster, i.e. our PC. +// So for this to work we run this scrip in the event OnSpellCastAt of our +// target, then we ExecuteScript this script again with the Caster (oPC) +// as OBJECT_SELF for this script on its second pass. This allows us to get the +// information from the above functions! Neat! +void main() +{ + object oTarget = OBJECT_SELF; + // The first pass we get oCaster via GetLastSpellCaster() fails in ExecuteScript! + // The second pass we get oCaster via the variable "AI_BUFF_CASTER". + object oCaster = GetLocalObject(oTarget, "AI_BUFF_CASTER"); + if(oCaster == OBJECT_INVALID) oCaster = GetLastSpellCaster(); + // We setting up the save spells button we saved the PC to itself. + // Here we get the PC to make sure the caster of this spell is our saving PC. + object oPC = GetLocalObject(oCaster, "AI_BUFF_PC"); + // The first pass we get nspell via GetLastSpell() fails in ExecuteScript! + // The second pass we get nSpell via the variable "AI_BUFF_SPELL". + int nSpell = GetLocalInt(oTarget, "AI_BUFF_SPELL"); + if(nSpell == 0) nSpell = GetLastSpell(); + // If this is a harful spell or The caster does not equal our saving PC then + // we need to fix the targets scripts back and run the correct OnSpellCastAt script. + if(GetLastSpellHarmful() || oPC != oCaster) + { + string sScript = GetLocalString(oTarget, "AI_BUFF_CAST_AT_SCRIPT"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + ExecuteScript(sScript, oTarget); + return; + } + // If the oTarget != oCaster then we are casting a spell on one of our + // associates. We must make a second pass to get the correct information. + // We do this by saving the Target, Caster, and Spell so we can get them + // in the second pass as Execute Script makes them impossible to get on a + // second pass. + if(oTarget != oCaster) + { + SetLocalObject(oPC, "AI_BUFF_TARGET", oTarget); + SetLocalObject(oPC, "AI_BUFF_CASTER", oCaster); + SetLocalInt(oPC, "AI_BUFF_SPELL", nSpell); + ExecuteScript("pc_savebuffs", oPC); + return; + } + // If this is the first pass and we get here then oCaster is casting a spell + // on themselves. So oTarget will be invalid and we should use oPC. + // If this is the second pass and we get here then we have saved oTarget + // to oPC and this will get them so we can save the target to the spell! + oTarget = GetLocalObject(oPC, "AI_BUFF_TARGET"); + if(oTarget == OBJECT_INVALID) oTarget = oPC; + // We need to clean up this mess! + DeleteLocalObject(oPC, "AI_BUFF_TARGET"); + DeleteLocalObject(oPC, "AI_BUFF_CASTER"); + DeleteLocalInt(oPC, "AI_BUFF_SPELL"); + // This blocks one spell from saving multiple times due to being an AOE. + if(GetLocalInt(oPC, "AI_ONLY_ONE")) return; + SetLocalInt(oPC, "AI_ONLY_ONE", TRUE); + // We delay this for just less than half a round due to haste. + DelayCommand(2.5, DeleteLocalInt(oPC, "AI_ONLY_ONE")); + // Here is the whole problem and why we must do a second pass if the target + // is not the caster. These only work if this script is run by the caster. + int nClass = GetLastSpellCastClass(); + int nLevel = GetLastSpellLevel(); + // Everything below saves the spell to the database with all our now correct info. + int nDomain = GetHasDomainSpell(oPC, nClass, nLevel, nSpell); + int nMetaMagic = GetMetaMagicFeat(); + string sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(nDomain) sName += " [Domain]"; + if(nMetaMagic > 0 && StringToInt(Get2DAString("classes", "MemorizesSpells", nClass))) + { + // We must add the level of the metamagic to the spells level to get the spells correct level. + if(nMetaMagic == METAMAGIC_EMPOWER) { sName += " (Empowered)"; nLevel += 2; } + else if(nMetaMagic == METAMAGIC_EXTEND) { sName += " (Extended)"; nLevel += 1; } + else if(nMetaMagic == METAMAGIC_MAXIMIZE) { sName += " (Maximized)"; nLevel += 3; } + else if(nMetaMagic == METAMAGIC_QUICKEN) { sName += " (Quickened)"; nLevel += 4; } + else if(nMetaMagic == METAMAGIC_SILENT) { sName += " (Silent)"; nLevel += 1; } + else if(nMetaMagic == METAMAGIC_STILL) { sName += " (Still)"; nLevel += 1; } + } + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + string sList = JsonGetString(JsonArrayGet(jMenuData, 0)); + json jSpells = GetBuffDatabaseJson(oPC, "spells", sList); + json jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(nSpell)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nClass)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nLevel)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nMetaMagic)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nDomain)); + string sTargetName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oTarget, TRUE))); + jSpell = JsonArrayInsert(jSpell, JsonString(sTargetName)); + jSpell = JsonArrayInsert(jSpells, jSpell); + SetBuffDatabaseJson(oPC, "spells", jSpells, sList); + SendMessageToPC(oPC, sName + " has been saved for fast buffing on " + sTargetName + "."); + ExecuteScript("pi_buffing", oPC); +} +string GetBuffDatabaseString(object oPlayer, string sDataField, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "SELECT " + sDataField + " FROM BUFF_TABLE WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + if (SqlStep (sql)) return SqlGetString (sql, 0); + else return ""; +} +void SetBuffDatabaseString(object oPlayer, string sDataField, string sData, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "UPDATE BUFF_TABLE SET " + sDataField + " = @data WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@data", sData); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + SqlStep (sql); +} +void SetBuffDatabaseJson (object oPlayer, string sDataField, json jData, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "UPDATE BUFF_TABLE SET " + sDataField + " = @data WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindJson (sql, "@data", jData); + SqlBindString (sql, "@name", sName); + SqlBindString (sql, "@tag", sTag); + SqlStep (sql); +} +json GetBuffDatabaseJson (object oPlayer, string sDataField, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "SELECT " + sDataField + " FROM BUFF_TABLE WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString (sql, "@name", sName); + SqlBindString (sql, "@tag", sTag); + if (SqlStep (sql)) return SqlGetJson (sql, 0); + else return JsonArray (); +} +int GetHasDomainSpell(object oCaster, int nClass, int nLevel, int nSpell) +{ + int nIndex, nMaxIndex, nMSpell, nMmSpell, bDomain, nSubRadSpell, nSubSpell; + string sSubRadSpell; + if(StringToInt(Get2DAString("classes", "MemorizesSpells", nClass))) + { + nMaxIndex = GetMemorizedSpellCountByLevel(oCaster, nClass, nLevel); + while(nIndex < nMaxIndex) + { + nMSpell = GetMemorizedSpellId(oCaster, nClass, nLevel, nIndex); + if(nSpell == nMSpell) + { + if(GetMemorizedSpellIsDomainSpell(oCaster, nClass, nLevel, nIndex)) return nLevel; + } + nIndex ++; + } + } + return 0; +} diff --git a/src/module/nss/pe_buffing.nss b/src/module/nss/pe_buffing.nss new file mode 100644 index 0000000..a6c4050 --- /dev/null +++ b/src/module/nss/pe_buffing.nss @@ -0,0 +1,534 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: pe_buffing +//////////////////////////////////////////////////////////////////////////////// + Used with pi_buffing to run the buffing plugin for + Philos Single Player Enhancements. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" + +const int BUFF_MAX_SPELLS = 50; +const string FB_NO_MONSTER_CHECK = "FB_NO_MONSTER_CHECK"; + +// sDataField should be one of the data fields for that table. +// sData is the string data to be saved. +void SetBuffDatabaseString(object oPlayer, string sDataField, string sData, string sTag); +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +string GetBuffDatabaseString(object oPlayer, string sDataField, string sTag); +// sDataField should be one of the data fields for that table. +// jData is the json data to be saved. +void SetBuffDatabaseJson(object oPlayer, string sDataField, json jData, string sTag); +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +json GetBuffDatabaseJson(object oPlayer, string sDataField, string sTag); +// Casts all buff spells saved to the widget button. +void CastSavedBuffSpells(object oPC); +// Will check and make sure the spell is memorized and/or ready. +// Returns TRUE if memorized and ready, FALSE if memorized but not ready, +// and -1 if not memorized for classes that memorize. +// nSpell is the spell to find. +// nClass that cast the spell. +// nLevel the level of the spell. +// nMetamagic is if it has metamagic on it. +// nDomain is if it is a domain spell. +int GetSpellReady(object oCaster, int nSpell, int nClass, int nLevel, int nMetamagic, int nDomain); +// Creates the Buffing widget. +void PopupWidgetBuffGUIPanel(object oPC); +void main() +{ + object oPC = NuiGetEventPlayer(); + int nToken = NuiGetEventWindow(); + string sEvent = NuiGetEventType(); + string sElem = NuiGetEventElement(); + string sWndId = NuiGetWindowId (oPC, nToken); + //************************************************************************** + // Watch to see if the window moves and save. + if(sElem == "window_geometry" && sEvent == "watch") + { + if(!GetLocalInt (oPC, AI_NO_NUI_SAVE)) + { + // Get the height, width, x, and y of the window. + json jGeom = NuiGetBind(oPC, nToken, "window_geometry"); + // Save on the player using the sWndId. + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + if(sWndId == "plbuffwin") + { + jMenuData = JsonArraySet(jMenuData, 1, JsonObjectGet(jGeom, "x")); + jMenuData = JsonArraySet(jMenuData, 2, JsonObjectGet(jGeom, "y")); + } + else if(sWndId == "widgetbuffwin") + { + jMenuData = JsonArraySet(jMenuData, 5, JsonObjectGet(jGeom, "x")); + jMenuData = JsonArraySet(jMenuData, 6, JsonObjectGet(jGeom, "y")); + } + SetBuffDatabaseJson(oPC, "spells", jMenuData, "menudata"); + } + return; + } + //************************************************************************** + // Spell Buffing. + if(sWndId == "plbuffwin") + { + if(sEvent == "click") + { + string sList; + if(GetStringLeft(sElem, 10) == "btn_spell_") + { + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + sList = JsonGetString(JsonArrayGet(jMenuData, 0)); + json jSpells = GetBuffDatabaseJson(oPC, "spells", sList); + int nIndex = StringToInt(GetStringRight(sElem, GetStringLength(sElem) - 10)); + int nSpell = JsonGetInt(JsonArrayGet(JsonArrayGet(jSpells, nIndex), 0)); + string sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + jSpells = JsonArrayDel(jSpells, nIndex); + SetBuffDatabaseJson(oPC, "spells", jSpells, sList); + ai_SendMessages(sName + " has been removed from the list.", AI_COLOR_YELLOW, oPC); + ExecuteScript("pi_buffing", oPC); + } + else if(sElem == "btn_save") + { + string sScript; + object oCreature; + if(JsonGetInt(NuiGetBind (oPC, nToken, "btn_save"))) + { + sScript = GetEventScript(oPC, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT); + SetLocalObject(oPC, "AI_BUFF_PC", oPC); + SetLocalString(oPC, "AI_BUFF_CAST_AT_SCRIPT", sScript); + SetEventScript(oPC, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "pc_savebuffs"); + // Setup your followers to allow spells to be saved on them as well. + int nAssociateType = 2; + object oAssociate = GetAssociate(nAssociateType, oPC); + while(nAssociateType < 5) + { + if(oAssociate != OBJECT_INVALID) + { + SetLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT", sScript); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "pc_savebuffs"); + } + oAssociate = GetAssociate(++nAssociateType, oPC); + } + int nIndex = 1; + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + while(nIndex <= AI_MAX_HENCHMAN) + { + if(oAssociate != OBJECT_INVALID) + { + SetLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT", sScript); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "pc_savebuffs"); + } + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, ++nIndex); + } + ai_SendMessages("Cast spells on yourself or an associate to save them to the widget.", AI_COLOR_YELLOW, oPC); + } + else + { + DeleteLocalObject(oPC, "AI_BUFF_PC"); + sScript = GetLocalString(oPC, "AI_BUFF_CAST_AT_SCRIPT"); + SetEventScript(oPC, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + DeleteLocalString(oPC, "AI_BUFF_CAST_AT_SCRIPT"); + // Cleanup your followers to allow spells to be reacted to as normal. + int nAssociateType = 2; + object oAssociate = GetAssociate(nAssociateType, oPC); + while(nAssociateType < 5) + { + if(oAssociate != OBJECT_INVALID) + { + sScript = GetLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + DeleteLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + } + oAssociate = GetAssociate(++nAssociateType, oPC); + } + int nIndex = 1; + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + while(nIndex <= AI_MAX_HENCHMAN) + { + if(oAssociate != OBJECT_INVALID) + { + sScript = GetLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + DeleteLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + } + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, ++nIndex); + } + NuiSetBind(oPC, nToken, "btn_save", JsonBool(FALSE)); + ai_SendMessages("Saving spells to the list has been turned off.", AI_COLOR_YELLOW, oPC); + } + } + else if(sElem == "btn_clear") + { + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + sList = JsonGetString(JsonArrayGet(jMenuData, 0)); + SetBuffDatabaseJson(oPC, "spells", JsonArray(), sList); + ExecuteScript("pi_buffing", oPC); + } + else if(sElem == "btn_buff") CastSavedBuffSpells(oPC); + // Runs all the List 1-4 buttons. + if(GetStringLeft(sElem, 8) == "btn_list") + { + sList = "list" + GetStringRight(sElem, 1); + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + jMenuData = JsonArraySet(jMenuData, 0, JsonString(sList)); + SetBuffDatabaseJson(oPC, "spells", jMenuData, "menudata"); + ExecuteScript("pi_buffing", oPC); + } + } + else if(sEvent == "watch") + { + if(sElem == "buff_widget_check") + { + int bBuffWidget = JsonGetInt(NuiGetBind(oPC, nToken, "buff_widget_check")); + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + jMenuData = JsonArraySet(jMenuData, 3, JsonBool(bBuffWidget)); + SetBuffDatabaseJson(oPC, "spells", jMenuData, "menudata"); + if(bBuffWidget) PopupWidgetBuffGUIPanel(oPC); + else NuiDestroy(oPC, NuiFindWindow(oPC, "widgetbuffwin")); + } + if(sElem == "lock_buff_widget_check") + { + int bBuffLockWidget = JsonGetInt(NuiGetBind(oPC, nToken, "lock_buff_widget_check")); + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + if(bBuffLockWidget) jMenuData = JsonArraySet(jMenuData, 3, JsonBool(TRUE)); + jMenuData = JsonArraySet(jMenuData, 4, JsonBool(bBuffLockWidget)); + SetBuffDatabaseJson(oPC, "spells", jMenuData, "menudata"); + NuiSetBind(oPC, nToken, "buff_widget_check", JsonBool(TRUE)); + PopupWidgetBuffGUIPanel(oPC); + } + if(sElem == "chbx_no_monster_check_check") + { + int bNoCheckMonsters = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + SetLocalInt(oPC, FB_NO_MONSTER_CHECK, bNoCheckMonsters); + } + } + } + //************************************************************************** + // Spell Buffing. + else if(sWndId == "widgetbuffwin") + { + if(sEvent == "click") + { + string sList; + if(sElem == "btn_one") sList = "list1"; + if(sElem == "btn_two") sList = "list2"; + if(sElem == "btn_three") sList = "list3"; + if(sElem == "btn_four") sList = "list4"; + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + jMenuData = JsonArraySet(jMenuData, 0, JsonString(sList)); + SetBuffDatabaseJson(oPC, "spells", jMenuData, "menudata"); + CastSavedBuffSpells(oPC); + } + } +} +void SetBuffDatabaseString(object oPlayer, string sDataField, string sData, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "UPDATE BUFF_TABLE SET " + sDataField + " = @data WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@data", sData); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + SqlStep (sql); +} +string GetBuffDatabaseString(object oPlayer, string sDataField, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "SELECT " + sDataField + " FROM BUFF_TABLE WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + if (SqlStep (sql)) return SqlGetString (sql, 0); + else return ""; +} +void SetBuffDatabaseJson (object oPlayer, string sDataField, json jData, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "UPDATE BUFF_TABLE SET " + sDataField + " = @data WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindJson (sql, "@data", jData); + SqlBindString (sql, "@name", sName); + SqlBindString (sql, "@tag", sTag); + SqlStep (sql); +} +json GetBuffDatabaseJson (object oPlayer, string sDataField, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "SELECT " + sDataField + " FROM BUFF_TABLE WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + if(SqlStep(sql)) return SqlGetJson(sql, 0); + else return JsonArray(); +} +void CastBuffSpell (object oPC, object oTarget, int nSpell, int nClass, int nMetamagic, int nDomain, string sList, string sName) +{ + string sTargetName; + if(oPC == oTarget) sTargetName = "myself."; + else sTargetName = GetName(oTarget); + ai_SendMessages("Quick Buffing: " + sName + " on " + sTargetName, AI_COLOR_GREEN, oPC); + AssignCommand(oPC, ActionCastSpellAtObject(nSpell, oTarget, nMetamagic, FALSE, nDomain, 0, TRUE, nClass)); +} +void CastSavedBuffSpells(object oPC) +{ + // Lets make sure the save button is off! + if(GetEventScript(oPC, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT) == "pc_savebuffs") + { + string sScript = GetLocalString(oPC, "AI_BUFF_CAST_AT_SCRIPT"); + SetEventScript(oPC, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + DeleteLocalString(oPC, "AI_BUFF_CAST_AT_SCRIPT"); + // Cleanup your followers to allow spells to be reacted to as normal. + int nAssociateType = 2; + object oAssociate = GetAssociate(nAssociateType, oPC); + while(nAssociateType < 5) + { + if(oAssociate != OBJECT_INVALID) + { + sScript = GetLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + DeleteLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + } + oAssociate = GetAssociate(++nAssociateType, oPC); + } + int nIndex = 1; + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + while(nIndex <= AI_MAX_HENCHMAN) + { + if(oAssociate != OBJECT_INVALID) + { + sScript = GetLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + DeleteLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + } + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, ++nIndex); + } + int nMainWindow = NuiFindWindow(oPC, "plbuffwin"); + if(nMainWindow) NuiSetBind(oPC, nMainWindow, "btn_save", JsonBool(FALSE)); + ai_SendMessages("Saving spells to the list has been turned off.", AI_COLOR_YELLOW, oPC); + } + float fDistance; + if(!GetLocalInt(oPC, FB_NO_MONSTER_CHECK)) + { + // Check for monsters! We cannot let them buff if they are close to the enemy! + object oEnemy = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oPC); + fDistance = GetDistanceBetween(oPC, oEnemy); + } + if(fDistance > 30.0f || fDistance == 0.0) + { + string sName; + float fDelay = 0.1f; + int nSpell, nClass, nLevel, nMetamagic, nDomain, nSpellReady, nIndex = 0; + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + string sList = JsonGetString(JsonArrayGet(jMenuData, 0)); + json jSpell, jSpells = GetBuffDatabaseJson(oPC, "spells", sList); + while(nIndex <= BUFF_MAX_SPELLS) + { + jSpell = JsonArrayGet(jSpells, nIndex); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + nLevel = JsonGetInt(JsonArrayGet(jSpell, 2)); + nMetamagic = JsonGetInt(JsonArrayGet(jSpell, 3)); + nDomain = JsonGetInt(JsonArrayGet(jSpell, 4)); + // We save the target's name then look them up by it. + string sTargetName = JsonGetString(JsonArrayGet(jSpell, 5)); + object oTarget; + location lLocation = GetLocation(oPC); + if(sTargetName == "" || sTargetName == ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName (oPC)))) oTarget = oPC; + else + { + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 10.0, lLocation, TRUE); + while(oTarget != OBJECT_INVALID) + { + if(sTargetName == ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oTarget)))) break; + oTarget = GetNextObjectInShape(SHAPE_SPHERE, 10.0, lLocation, TRUE); + } + } + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(oTarget == OBJECT_INVALID) + { + DelayCommand(fDelay, ai_SendMessages("Cannot quick cast " + sName + " because the " + sTargetName + " is not here!", AI_COLOR_RED, oPC)); + } + else + { + if(nMetamagic > 0) + { + if(nMetamagic == METAMAGIC_EMPOWER) sName += " (Empowered)"; + else if(nMetamagic == METAMAGIC_EXTEND) sName += " (Extended)"; + else if(nMetamagic == METAMAGIC_MAXIMIZE) sName += " (Maximized)"; + else if(nMetamagic == METAMAGIC_QUICKEN) sName += " (Quickened)"; + else if(nMetamagic == METAMAGIC_SILENT) sName += " (Silent)"; + else if(nMetamagic == METAMAGIC_STILL) sName += " (Still)"; + } + nSpellReady = GetSpellReady(oPC, nSpell, nClass, nLevel, nMetamagic, nDomain); + if(nSpellReady == TRUE) + { + DelayCommand(fDelay, CastBuffSpell(oPC, oTarget, nSpell, nClass, nMetamagic, nDomain, sList, sName)); + } + else if(nSpellReady == -1) + { + DelayCommand(fDelay, ai_SendMessages("Cannot quick cast " + sName + " because it is not ready to cast!", AI_COLOR_RED, oPC)); + } + else if(nSpellReady == -2) + { + DelayCommand (fDelay, ai_SendMessages("Cannot quick cast " + sName + " because it is not memorized!", AI_COLOR_RED, oPC)); + } + else if(nSpellReady == -3) + { + DelayCommand (fDelay, ai_SendMessages("Cannot quick cast " + sName + " because there are no spell slots of that level left!", AI_COLOR_RED, oPC)); + } + else if(nSpellReady == -4) + { + DelayCommand (fDelay, ai_SendMessages("Cannot quick cast " + sName + " because that spell is not known.", AI_COLOR_RED, oPC)); + } + fDelay += 0.1f; + } + } + else break; + nIndex ++; + } + if(nIndex == 0 && !NuiFindWindow(oPC, "plbuffwin")) ExecuteScript("pi_buffing", oPC); + } + else ai_SendMessages("Enemies are too close for you to cast all your buff spells!", AI_COLOR_RED, oPC); +} +int GetSpellReady(object oCaster, int nSpell, int nClass, int nLevel, int nMetamagic, int nDomain) +{ + int nIndex, nMaxIndex, nMSpell, nMmSpell, nDSpell, nSubRadSpell, nSubSpell; + string sSubRadSpell; + if(StringToInt(Get2DAString("classes", "MemorizesSpells", nClass))) + { + int nSpellMemorized; + while(nIndex < nMaxIndex) + { + nMSpell = GetMemorizedSpellId(oCaster, nClass, nLevel, nIndex); + if(nSpell == nMSpell) + { + nMmSpell = GetMemorizedSpellMetaMagic(oCaster, nClass, nLevel, nIndex); + nDSpell = GetMemorizedSpellIsDomainSpell(oCaster, nClass, nLevel, nIndex); + //ai_Debug("pe_buffing", "308", "nMmSpell: " + IntToString(nMmSpell) + + // " nMetamagic: " + IntToString(nMetamagic) + + // " nDomain: " + IntToString(nDomain) + + // " nDSpell: " + IntToString(nDSpell)); + // Cannot save the domain status so we just use the first spell ID. + // Then return the domain statusl. + //if(nMmSpell == nMetamagic && + // ((nDomain > 0 && nDSpell == TRUE) || nDomain == 0 && nDSpell == FALSE)) + if(nMmSpell == nMetamagic) + { + nSpellMemorized = TRUE; + if(GetMemorizedSpellReady(oCaster, nClass, nLevel, nIndex)) + { + if(nDSpell == nDomain) return TRUE; + } + } + } + for(nSubRadSpell = 1; nSubRadSpell < 5; nSubRadSpell++) + { + sSubRadSpell = "SubRadSpell" + IntToString(nSubRadSpell); + if(nSpell == StringToInt(Get2DAString("spells", sSubRadSpell, nMSpell))) + nMmSpell = GetMemorizedSpellMetaMagic(oCaster, nClass, nLevel, nIndex); + nDSpell = GetMemorizedSpellIsDomainSpell(oCaster, nClass, nLevel, nIndex); + ai_Debug("pe_buffing", "421", "nMmSpell: " + IntToString(nMmSpell) + + " nMetamagic: " + IntToString(nMetamagic) + + " nDomain: " + IntToString(nDomain) + + " nDSpell: " + IntToString(nDSpell)); + if(nMmSpell == nMetamagic) + { + nSpellMemorized = TRUE; + if(GetMemorizedSpellReady(oCaster, nClass, nLevel, nIndex)) + { + if(nDSpell == nDomain) return TRUE; + } + } + } + nIndex ++; + } + if(nSpellMemorized) return -1; + return -2; + } + else + { + int nSpellKnown; + nMaxIndex = GetKnownSpellCount(oCaster, nClass, nLevel); + while(nIndex < nMaxIndex) + { + nMSpell = GetKnownSpellId(oCaster, nClass, nLevel, nIndex); + if(nSpell == nMSpell) + { + nSpellKnown = TRUE; + if(GetSpellUsesLeft(oCaster, nClass, nSpell)) return TRUE; + } + for(nSubRadSpell = 1; nSubRadSpell < 5; nSubRadSpell++) + { + sSubRadSpell = "SubRadSpell" + IntToString(nSubRadSpell); + if(nSpell == StringToInt(Get2DAString("spells", sSubRadSpell, nMSpell))) + { + nSpellKnown = TRUE; + if(GetSpellUsesLeft(oCaster, nClass, nSpell)) return TRUE; + } + } + nIndex ++; + } + if(nSpellKnown) return -3; + return -4; + } + return -2; +} +void PopupWidgetBuffGUIPanel(object oPC) +{ + // Set window to not save until it has been created. + SetLocalInt(oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand(0.5f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + // Row 1 (buttons)********************************************************** + + json jRow = CreateButtonImage(JsonArray(), "ir_level1", "btn_one", 35.0f, 35.0f, 0.0); + jRow = CreateButtonImage(jRow, "ir_level2", "btn_two", 35.0f, 35.0f, 0.0); + jRow = CreateButtonImage(jRow, "ir_level3", "btn_three", 35.0f, 35.0f, 0.0); + jRow = CreateButtonImage(jRow, "ir_level4", "btn_four", 35.0f, 35.0f, 0.0); + // Add the row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + int bAIBuffWidgetLock = JsonGetInt(JsonArrayGet(jMenuData, 4)); + // Get the window location to restore it from the database. + float fX = JsonGetFloat(JsonArrayGet(jMenuData, 5)); + float fY = JsonGetFloat(JsonArrayGet(jMenuData, 6)); + if(fX == 0.0f && fY == 0.0f) + { + fX = 10.0f; + fY = 10.0f; + } + float fGUI_Scale = IntToFloat(GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_SCALE)) / 100.0; + if(bAIBuffWidgetLock) + { + fX += 4.0f; + // GUI scales are a mess, I just figured them out per scale to keep the widget from moving. + if(fGUI_Scale == 1.0) fY += 37.0; + else if(fGUI_Scale == 1.1) fY += 38.0; + else if(fGUI_Scale == 1.2) fY += 40.0; + else if(fGUI_Scale == 1.3) fY += 42.0; + else if(fGUI_Scale == 1.4) fY += 43.0; + else if(fGUI_Scale == 1.5) fY += 45.0; + else if(fGUI_Scale == 1.6) fY += 47.0; + else if(fGUI_Scale == 1.7) fY += 48.0; + else if(fGUI_Scale == 1.8) fY += 50.0; + else if(fGUI_Scale == 1.9) fY += 52.0; + else if(fGUI_Scale == 2.0) fY += 54.0; + } + // Set the layout of the window. + json jLayout = NuiCol(jCol); + int nToken; + if(bAIBuffWidgetLock) nToken = SetWindow (oPC, jLayout, "widgetbuffwin", "Fast Buff Widget", fX, fY, 160.0, 62.0, FALSE, FALSE, FALSE, TRUE, FALSE, "pe_buffing"); + else nToken = SetWindow (oPC, jLayout, "widgetbuffwin", "Fast Buff Widget", fX, fY, 160.0, 95.0, FALSE, FALSE, FALSE, TRUE, TRUE, "pe_buffing"); + // Set event watches for window inspector and save window location. + NuiSetBindWatch (oPC, nToken, "collapsed", TRUE); + NuiSetBindWatch (oPC, nToken, "window_geometry", TRUE); + // Set the buttons to show events. + //NuiSetBind (oPC, nToken, "btn_one", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_one_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_two", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_two_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_three", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_three_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_four", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_four_event", JsonBool (TRUE)); +} + diff --git a/src/module/nss/pe_crafting.nss b/src/module/nss/pe_crafting.nss new file mode 100644 index 0000000..388c86a --- /dev/null +++ b/src/module/nss/pe_crafting.nss @@ -0,0 +1,2153 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: pe_crafting +//////////////////////////////////////////////////////////////////////////////// + Used with pi_crafting to run the crafting plugin events for + Philos Single Player Enhancements. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +#include "nw_inc_gff" +#include "0i_main" +#include "0i_items" +// Maximum model number for all items except weapons. +const int CRAFT_MAX_MODEL_NUMBER = 999; + +struct stWeaponAppearance +{ + object oItem; + int nModel; + int nColor; + string sPart; +}; +// Maximum model number for weapons. Note this will be the 100s and 10s places. +// The color number uses the ones place. Thus 25 is actually 250. +const int CRAFT_MAX_WEAPON_MODEL_NUMBER = 99; +const string CRAFT_JSON = "CRAFT_JSON"; +const string CRAFT_ORIGINAL_ITEM = "CRAFT_ORIGINAL_ITEM"; +const string CRAFT_COOL_DOWN = "CRAFT_COOL_DOWN"; +const string CRAFT_ITEM_SELECTION = "CRAFT_ITEM_SELECTION"; +const string CRAFT_MATERIAL_SELECTION = "CRAFT_MATERIAL_SELECTION"; +const string CRAFT_MODEL_SELECTION = "CRAFT_MODEL_SELECTION"; +const string CRAFT_MODEL_SPECIAL = "CRAFT_MODEL_SPECIAL"; +const string CRAFT_ITEM_TYPE = "CRAFT_ITEM_TYPE"; +const string CRAFT_WEAPON_MOD_TOP = "CRAFT_WEAPON_MOD_TOP"; +const string CRAFT_WEAPON_MOD_MID = "CRAFT_WEAPON_MOD_MID"; +const string CRAFT_WEAPON_MOD_BOT = "CRAFT_WEAPON_MOD_BOT"; +const string CRAFT_WEAPON_COL_TOP = "CRAFT_WEAPON_COL_TOP"; +const string CRAFT_WEAPON_COL_MID = "CRAFT_WEAPON_COL_MID"; +const string CRAFT_WEAPON_COL_BOT = "CRAFT_WEAPON_COL_BOT"; +const string CRAFT_COPY_ITEM = "CRAFT_COPY_ITEM"; +const string CRAFT_COPY_ITEM_TYPE = "CRAFT_COPY_ITEM_TYPE"; +const string CRAFT_COPY_MODEL = "CRAFT_COPY_MODEL"; +const string CRAFT_COPY_COLOR = "CRAFT_COPY_COLOR"; +const string CRAFT_COPY_PART_COLOR = "CRAFT_COPY_PART_COLOR"; +const string CRAFT_ARMOR_AC = "CRAFT_ARMOR_AC"; +const string CRAFT_COLOR_PALLET = "CRAFT_COLOR_PALLET"; +const string CRAFT_LEFT_PART_COLOR = "CRAFT_LEFT_PART_COLOR"; +const string CRAFT_ALL_COLOR = "CRAFT_ALL_COLOR"; +const string CRAFT_RIGHT_PART_COLOR = "CRAFT_RIGHT_PART_COLOR"; +const string CRAFT_TARGET = "CRAFT_TARGET"; +// Tag used in lighting effects. +const string CRAFT_HIGHLIGHT = "CRAFT_HIGHLIGHT"; +const string CRAFT_ULTRALIGHT = "CRAFT_ULTRALIGHT"; +// The tags for containers used to do some crafting. +const string CRAFT_TEMPLATE = "x3_plc_basket"; +const string CRAFT_CONTAINER = "CRAFT_CONTAINER"; +// Used in the crafting GUI to copy an item to be pasted to another item later. +void CopyCraftingItem(object oPC, object oItem); +// Used in the crafting GUI to paste a copy of an item to another item. +object PasteCraftingItem(object oPC, object oTarget, object oItem); +int GetItemSelectedEquipSlot(int nItemSelected); +int GetArmorModelSelected(object oPC); +object ChangeItemsAppearance(object oPC, object oTarget, int nToken, object oItem, int nDirection, string sPart); +// Checks to see if the item can be crafted. +// bPasteCheck is a special check when an item is being pasted. +int CanCraftItem(object oPC, object oItem, int nToken, int bPasteCheck = FALSE); +object RandomizeItemsCraftAppearance(object oPlayer, object oTarget, int nToken, object oItem); +// Returns the correct item based on the crafting menu selected item. +object GetSelectedItem(object oTarget, int nItemSelected); +// Cancels the crafted item for the player and restoring the original. +void CancelCraftedItem(object oPlayer, object oTarget); +// Gets the colorId from a image of the color pallet. +// Thanks Zunath for the base code. +int GetColorPalletId(object oPC, int nToken); +// Sets the pointer based on current Item, Part, and Material selected. +void SetColorPalletPointer(object oPC, int nToken, object oItem); +// Locks/Unlocks specific buttons when an item has been changed. +void LockItemInCraftingWindow(object oPC, object oItem, object oTarget, int nToken); +// Locks/Unlocks specific buttons when an item has been cleared. +void ClearItemInCraftingWindow(object oPC, object oItem, int nToken); +// Saves the crafted item for the player removing the original. +void SaveCraftedItem(object oPC, object oTarget, int nToken); +// Remove Effect of type specified from oCreature; +// sEffectTag is the tag of the effect to remove. +// Feat, Class, Racial. +void RemoveTagedEffects(object oCreature, string sEffectTag); +// Returns TRUE/FALSE if item has temporary item property. +int CheckForTemporaryItemProperty(object oItem); +// Updates the model number text in the NUI menu. +void SetModelNumberText(object oPC, object oTarget, int nToken); +// Sets the material buttons for use. +// nMaterial 0,1 Cloth 2,3 Leather 4,5 Metal -1 None. +void SetMaterialButtons(object oPC, int nToken, int nMaterial); +// Creates the item editing menu. +void CreateItemGUIPanel(object oPC, object oTarget); +// Events for ItemGUIPanel +void CraftItemInfoEvents(object oPC, int nToken); +// Creates the save/load menu for items. +//void CreateDresserGUIPanel(object oPC, object oTarget); + +int GetColorIDChange(object oItem, int nType, int nIndex, int nChange) +{ + int nColorId = GetItemAppearance(oItem, nType, nIndex) + nChange; + if(nColorId > 175) return 0; + if(nColorId < 0) return 175; + return nColorId; +} +void main() +{ + // Get the last player to use targeting mode + object oPC = GetLastPlayerToSelectTarget(); + string sTargetMode = GetLocalString(oPC, AI_TARGET_MODE); + if(oPC == OBJECT_SELF && sTargetMode != "") + { + // Get the targeting mode data + object oTarget = GetTargetingModeSelectedObject(); + //vector vTarget = GetTargetingModeSelectedPosition(); + //location lLocation = Location(GetArea(oPC), vTarget, GetFacing(oPC)); + //object oObject = GetLocalObject(oPC, "AI_TARGET_OBJECT"); + // If the user manually exited targeting mode without selecting a target, return + if(!GetIsObjectValid(oTarget))// && vTarget == Vector()) + { + return; + } + // Targeting code here. + if(sTargetMode == "SELECT_TARGET") + { + if(GetAssociateType(oTarget) == ASSOCIATE_TYPE_HENCHMAN || + ai_GetIsCharacter(oTarget)) + { + SetLocalObject(oPC, CRAFT_TARGET, oTarget); + AttachCamera(oPC, oTarget); + ExecuteScript("pi_crafting", oPC); + } + else ai_SendMessages(GetName(oTarget) + " is not the player or a henchmen! Other associates cannot use item crafting.", AI_COLOR_RED, oPC); + } + DeleteLocalString(oPC, AI_TARGET_MODE); + } + else + { + object oPC = NuiGetEventPlayer(); + int nToken = NuiGetEventWindow(); + string sWndId = NuiGetWindowId (oPC, nToken); + if(sWndId == "craft_item_nui") + { + CraftItemInfoEvents(oPC, nToken); + return; + } + string sEvent = NuiGetEventType(); + // We don't use and it causes error windows to go off! Return early! + if(sEvent == "mouseup") return; + string sElem = NuiGetEventElement(); + int nIndex = NuiGetEventArrayIndex(); + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + //SendMessageToPC(oPC, "0e_crafting, 144, sElem: " + sElem + " sEvent: " + sEvent); + //************************************************************************** + // Watch to see if the window moves and save. + if(sElem == "window_geometry" && sEvent == "watch") + { + if(!GetLocalInt (oPC, AI_NO_NUI_SAVE)) + { + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + if(JsonGetType(jCraft) == JSON_TYPE_NULL) jCraft = JsonObject(); + // Get the height, width, x, and y of the window. + json jGeometry = NuiGetBind(oPC, nToken, "window_geometry"); + jCraft = JsonObjectSet(jCraft, "CRAFT_MENU", jGeometry); + SetLocalJson(oPC, CRAFT_JSON, jCraft); + } + return; + } + //************************************************************************** + object oTarget = GetLocalObject(oPC, CRAFT_TARGET); + if(oTarget == OBJECT_INVALID) oTarget = oPC; + // Get the item we are crafting. + int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + object oItem = GetSelectedItem(oTarget, nItemSelected); + object oOriginalItem = GetLocalObject(oPC, CRAFT_ORIGINAL_ITEM); + if(oItem == OBJECT_INVALID) + { + if(sElem != "btn_cancel") + { + ai_SendMessages("The item we are adjusting is not equiped!", AI_COLOR_RED, oPC); + return; + } + } + else if(oOriginalItem != OBJECT_INVALID && GetTag(oItem) != GetTag(oOriginalItem)) + { + ai_SendMessages(GetName(oItem) + " is not the item you have been adjusting!", AI_COLOR_RED, oPC); + return; + } + // Changing the name needs to be before the cooldown. + if(sElem == "txt_item_name" && sEvent == "watch") + { + string sName = JsonGetString(NuiGetBind(oPC, nToken, "txt_item_name")); + SetName(oItem, sName); + int nToken2 = NuiFindWindow(oPC, "craft_item_nui"); + if(nToken2) NuiSetBind(oPC, nToken2, "txt_item_name", JsonString(sName)); + return; + } + // Delay crafting so it has time to equip and unequip as well as remove. + //if(GetLocalInt(oPC, CRAFT_COOL_DOWN)) return; + //SetLocalInt(oPC, CRAFT_COOL_DOWN, TRUE); + //DelayCommand(0.25f, DeleteLocalInt(oPC, CRAFT_COOL_DOWN)); + // They have selected a color. + if(sElem == "color_pallet") + { + int nColorId, nChange; + object oNewItem; + if(sEvent == "mousedown") + { + // Get the color they selected from the color pallet cell. + nColorId = GetColorPalletId(oPC, nToken); + } + else if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + nChange = FloatToInt(nMouseScroll); + } + else return; + if(!CanCraftItem(oPC, oItem, nToken)) return; + int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + int nBaseItemType = GetBaseItemType(oItem); + int nAllColor = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ALL_COLOR)); + if(!nAllColor && nBaseItemType == BASE_ITEM_ARMOR) + { + int nIndex; + int nModelSelected = GetArmorModelSelected(oPC); + int nLeftColor = JsonGetInt(JsonObjectGet(jCraft, CRAFT_LEFT_PART_COLOR)); + int nRightColor = JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR)); + if(nModelSelected == ITEM_APPR_ARMOR_MODEL_NECK || + nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO || + nModelSelected == ITEM_APPR_ARMOR_MODEL_BELT || + nModelSelected == ITEM_APPR_ARMOR_MODEL_PELVIS || + nModelSelected == ITEM_APPR_ARMOR_MODEL_ROBE) + { + nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + if(nChange) nColorId = GetColorIDChange(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nChange); + oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nColorId, TRUE); + DestroyObject(oItem); + } + else + { + if(nRightColor) + { + // Color Right side. + nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + if(nChange) nColorId = GetColorIDChange(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nChange); + oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nColorId, TRUE); + DestroyObject(oItem); + // Fix buttons. + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(TRUE)); + if(nLeftColor) + { + // If we are doing the left side then add one to get the left side. + // Note: Right Thigh and Left Thigh are backwards so this fixes that! + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected = nModelSelected - 1; + else nModelSelected = nModelSelected + 1; + nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + if(nChange) nColorId = GetColorIDChange(oNewItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nChange); + oItem = CopyItemAndModify(oNewItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nColorId, TRUE); + DestroyObject(oNewItem); + oNewItem = oItem; + // Fix buttons. + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(TRUE)); + } + } + else if(nLeftColor) + { + // If we are doing the left side then add one to get the left side. + // Note: Right Thigh and Left Thigh are backwards so this fixes that! + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected = nModelSelected - 1; + else nModelSelected = nModelSelected + 1; + nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + if(nChange) nColorId = GetColorIDChange(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nChange); + oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nColorId, TRUE); + DestroyObject(oItem); + // Fix buttons. + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(TRUE)); + } + } + } + else + { + if(nChange) nColorId = GetColorIDChange(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected, nChange); + oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected, nColorId, TRUE); + DestroyObject(oItem); + } + // Lock the new item so they can't change it on the character. + LockItemInCraftingWindow(oPC, oNewItem, oTarget, nToken); + // Equip new item. + if(nBaseItemType == BASE_ITEM_CLOAK) AssignCommand (oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CLOAK)); + else if(nBaseItemType == BASE_ITEM_HELMET) AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_HEAD)); + else if(nBaseItemType == BASE_ITEM_ARMOR) AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST)); + } + else if(sEvent == "watch") + { + // The player is changing the item they are crafting. + if(sElem == "item_combo_selected") + { + int nSelected = JsonGetInt(NuiGetBind (oPC, nToken, sElem)); + oItem = GetSelectedItem(oTarget, nSelected); + if(oItem == OBJECT_INVALID) + { + ai_SendMessages("There is not an item to modify!", AI_COLOR_RED, oPC); + int nItem = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + NuiSetBind(oPC, nToken, "item_combo_selected", JsonInt(nItem)); + return; + } + jCraft = JsonObjectSet(jCraft, CRAFT_ITEM_SELECTION, JsonInt(nSelected)); + // Set button for cloak and helms. + if(nSelected == 1 || nSelected == 2) + { + int nHidden = GetHiddenWhenEquipped(oItem); + if(nHidden) jCraft = JsonObjectSet(jCraft, CRAFT_MODEL_SELECTION, JsonInt(1)); + else jCraft = JsonObjectSet(jCraft, CRAFT_MODEL_SELECTION, JsonInt(0)); + } + else jCraft = JsonObjectSet(jCraft, CRAFT_MODEL_SELECTION, JsonInt(0)); + SetLocalJson(oPC, CRAFT_JSON, jCraft); + NuiDestroy(oPC, nToken); + ExecuteScript("pi_crafting", oPC); + } + // They have selected a part to change. + else if(sElem == "model_combo_selected") + { + int nSelected = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + jCraft = JsonObjectSet(jCraft, CRAFT_MODEL_SELECTION, JsonInt(nSelected)); + SetLocalJson(oPC, CRAFT_JSON, jCraft); + SetModelNumberText(oPC, oTarget, nToken); + int nItem = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + if(nItem == 1) // Cloak + { + if(!CanCraftItem(oPC, oItem, nToken)) return; + object oItem = GetItemInSlot(INVENTORY_SLOT_CLOAK, oTarget); + if(nSelected == 1) SetHiddenWhenEquipped(oItem, TRUE); + else SetHiddenWhenEquipped(oItem, FALSE); + LockItemInCraftingWindow(oPC, oItem, oTarget, nToken); + } + else if(nItem == 2) // Headgear + { + if(!CanCraftItem(oPC, oItem, nToken)) return; + object oItem = GetItemInSlot(INVENTORY_SLOT_HEAD, oTarget); + if(nSelected == 1) SetHiddenWhenEquipped(oItem, TRUE); + else SetHiddenWhenEquipped(oItem, FALSE); + LockItemInCraftingWindow(oPC, oItem, oTarget, nToken); + } + else if(nItem == 4 && ai_GetIsShield(oItem)) + { + if(!CanCraftItem(oPC, oItem, nToken)) return; + object oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget); + if(nSelected == 1) SetHiddenWhenEquipped(oItem, TRUE); + else SetHiddenWhenEquipped(oItem, FALSE); + LockItemInCraftingWindow(oPC, oItem, oTarget, nToken); + } + if(ai_GetIsWeapon(oItem)) + { + // Clearing sets the module to 0 triggering an extra call. + if(GetLocalInt(oPC, AI_NO_NUI_SAVE)) return; + if(!CanCraftItem(oPC, oItem, nToken)) return; + int nVisual; + itemproperty ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + if(GetItemPropertyType(ipProperty) == ITEM_PROPERTY_VISUALEFFECT) + { + RemoveItemProperty(oItem, ipProperty); + } + ipProperty = GetNextItemProperty(oItem); + } + if(nSelected == 1) nVisual = ITEM_VISUAL_ACID; + else if(nSelected == 2) nVisual = ITEM_VISUAL_COLD; + else if(nSelected == 3) nVisual = ITEM_VISUAL_ELECTRICAL; + else if(nSelected == 4) nVisual = ITEM_VISUAL_EVIL; + else if(nSelected == 5) nVisual = ITEM_VISUAL_FIRE; + else if(nSelected == 6) nVisual = ITEM_VISUAL_HOLY; + else if(nSelected == 7) nVisual = ITEM_VISUAL_SONIC; + if(nVisual) + { + ipProperty = ItemPropertyVisualEffect(nVisual); + AddItemProperty(DURATION_TYPE_PERMANENT, ipProperty, oItem); + } + LockItemInCraftingWindow(oPC, oItem, oTarget, nToken); + } + } + } + else if(sEvent == "click") + { + if(sElem == "btn_info") + { + SetLocalObject(oPC, "CRAFT_INFO_ITEM", oItem); + CreateItemGUIPanel(oPC, oItem); + } + //else if(sElem == "btn_wardrobe") CreateDresserGUIPanel(oPC, oTarget); + // Random button to change items looks randomly. + else if(sElem == "btn_randomize") + { + if(CanCraftItem(oPC, oItem, nToken)) + { + oItem = RandomizeItemsCraftAppearance(oPC, oTarget, nToken, oItem); + LockItemInCraftingWindow(oPC, oItem, oTarget, nToken); + } + } + // Save any changes made to the selected item. + else if(sElem == "btn_save") + { + SaveCraftedItem(oPC, oTarget, nToken); + } + // Selecte target to change clothing on. + else if(sElem == "btn_select_target") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_crafting"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "SELECT_TARGET"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select either your charcter or a henchman to craft their equipment.", AI_COLOR_YELLOW, oPC); + DeleteLocalObject(oPC, CRAFT_ORIGINAL_ITEM); + DeleteLocalObject(oPC, CRAFT_TARGET); + DeleteLocalObject(oPC, "CRAFT_INFO_ITEM"); + if(GetLocalInt(oPC, CRAFT_ULTRALIGHT)) + { + RemoveTagedEffects(oTarget, CRAFT_ULTRALIGHT); + DeleteLocalInt(oPC, CRAFT_ULTRALIGHT); + } + if(GetLocalInt(oPC, CRAFT_HIGHLIGHT)) + { + RemoveTagedEffects(oTarget, CRAFT_HIGHLIGHT); + DeleteLocalInt(oPC, CRAFT_HIGHLIGHT); + } + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE , MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + // Cancel any changes made to the selected item. + else if(sElem == "btn_cancel") + { + // If the button is on cancel then clear the item. + if(JsonGetString(NuiGetBind(oPC, nToken, "btn_cancel_label")) == "Cancel") + { + CancelCraftedItem(oPC, oTarget); + ClearItemInCraftingWindow(oPC, oItem, nToken); + DelayCommand(0.5, NuiDestroy(oPC, nToken)); + DelayCommand(0.5, ExecuteScript("pi_crafting", oPC)); + } + // If the button is on Exit not Cancel then exit. + else + { + AssignCommand(oPC, RestoreCameraFacing()); + AttachCamera(oPC, oPC); + DeleteLocalObject(oPC, CRAFT_ORIGINAL_ITEM); + DeleteLocalObject(oPC, CRAFT_TARGET); + DeleteLocalObject(oPC, "CRAFT_INFO_ITEM"); + NuiDestroy(oPC, nToken); + nToken = NuiFindWindow(oPC, "craft_item_nui"); + if(nToken) NuiDestroy(oPC, nToken); + if(GetLocalInt(oPC, CRAFT_ULTRALIGHT)) + { + RemoveTagedEffects(oTarget, CRAFT_ULTRALIGHT); + DeleteLocalInt(oPC, CRAFT_ULTRALIGHT); + } + if(GetLocalInt(oPC, CRAFT_HIGHLIGHT)) + { + RemoveTagedEffects(oTarget, CRAFT_HIGHLIGHT); + DeleteLocalInt(oPC, CRAFT_HIGHLIGHT); + } + } + } + // Get the previous model of the selected item. + else if(GetStringLeft(sElem, 9) == "btn_prev_") + { + if(CanCraftItem(oPC, oItem, nToken)) + { + oItem = ChangeItemsAppearance(oPC, oTarget, nToken, oItem, -1, GetStringRight(sElem, 1)); + LockItemInCraftingWindow(oPC, oItem, oTarget, nToken); + } + } + // Get the next model of the selected item. + else if(GetStringLeft(sElem, 9) == "btn_next_") + { + if(CanCraftItem(oPC, oItem, nToken)) + { + oItem = ChangeItemsAppearance(oPC, oTarget, nToken, oItem, 1, GetStringRight(sElem, 1)); + LockItemInCraftingWindow(oPC, oItem, oTarget, nToken); + } + } + else if(sElem == "btn_highlight") + { + if(GetLocalInt(oPC, CRAFT_HIGHLIGHT)) + { + RemoveTagedEffects(oTarget, CRAFT_HIGHLIGHT); + DeleteLocalInt(oPC, CRAFT_HIGHLIGHT); + NuiSetBind(oPC, nToken, "btn_highlight", JsonBool(FALSE)); + } + else + { + if(GetLocalInt(oPC, CRAFT_ULTRALIGHT)) + { + RemoveTagedEffects(oTarget, CRAFT_ULTRALIGHT); + DeleteLocalInt(oPC, CRAFT_ULTRALIGHT); + } + SetLocalInt(oPC, CRAFT_HIGHLIGHT, TRUE); + effect eLight = EffectVisualEffect(VFX_DUR_LIGHT_WHITE_20); + eLight = TagEffect(eLight, CRAFT_HIGHLIGHT); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLight, oTarget); + NuiSetBind(oPC, nToken, "btn_highlight", JsonBool(TRUE)); + } + } + else if(sElem == "btn_left_part_color") + { + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(FALSE)); + jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonInt(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(TRUE)); + jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(FALSE)); + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(FALSE)); + SetColorPalletPointer(oPC, nToken, oItem); + } + else if(sElem == "btn_all_color") + { + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(TRUE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(TRUE)); + jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonInt(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE)); + jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(FALSE)); + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(FALSE)); + SetColorPalletPointer(oPC, nToken, oItem); + } + else if(sElem == "btn_right_part_color") + { + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(FALSE)); + jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonInt(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE)); + jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(TRUE)); + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(TRUE)); + SetColorPalletPointer(oPC, nToken, oItem); + } + else if(sElem == "btn_right_part_reset") + { + if(CanCraftItem(oPC, oItem, nToken)) + { + int nIndex; + int nModelSelected = GetArmorModelSelected(oPC); + int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + object oNewItem; + if(nModelSelected == ITEM_APPR_ARMOR_MODEL_NECK || + nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO || + nModelSelected == ITEM_APPR_ARMOR_MODEL_BELT || + nModelSelected == ITEM_APPR_ARMOR_MODEL_PELVIS || + nModelSelected == ITEM_APPR_ARMOR_MODEL_ROBE) + { + nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, 255, TRUE); + DestroyObject(oItem); + } + else + { + nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, 255, TRUE); + DestroyObject(oItem); + } + // Lock the new item so they can't change it on the character. + LockItemInCraftingWindow(oPC, oNewItem, oTarget, nToken); + // Equip new item. + AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST)); + // Fix buttons. + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(FALSE)); + jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(FALSE)); + int nLeft = JsonGetInt(NuiGetBind(oPC, nToken, "btn_left_part_color")); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(!nLeft)); + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(!nLeft)); + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(FALSE)); + nLeft = JsonGetInt(NuiGetBind(oPC, nToken, "btn_left_part_reset_event")); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(nLeft)); + SetColorPalletPointer(oPC, nToken, oNewItem); + } + } + else if(sElem == "btn_all_reset") + { + if(CanCraftItem(oPC, oItem, nToken)) + { + int nIndex, nColor; + json jItem = ObjectToJson(oItem, TRUE); + string sColor, sPartName; + for(nIndex = 0;nIndex < 19;nIndex++) + { + sPartName = "APart_" + IntToString(nIndex) + "_Col_"; + for(nColor = 0;nColor < 6;nColor++) + { + sColor = IntToString(nColor); + if(JsonGetType(GffGetByte(jItem, sPartName + sColor)) != JSON_TYPE_NULL) + { + jItem = GffRemoveByte(jItem, sPartName + sColor); + } + } + } + object oNewItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST)); + DestroyObject(oItem); + // Lock the new item so they can't change it on the character. + LockItemInCraftingWindow(oPC, oNewItem, oTarget, nToken); + // Fix buttons. + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(FALSE)); + jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(TRUE)); + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE)); + jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(FALSE)); + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE)); + SetColorPalletPointer(oPC, nToken, oNewItem); + } + } + else if(sElem == "btn_left_part_reset") + { + if(CanCraftItem(oPC, oItem, nToken)) + { + int nModelSelected = GetArmorModelSelected(oPC); + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected = nModelSelected - 1; + else nModelSelected = nModelSelected + 1; + int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + int nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + object oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, 255, TRUE); + DestroyObject(oItem); + // Lock the new item so they can't change it on the character. + LockItemInCraftingWindow(oPC, oNewItem, oTarget, nToken); + // Equip new item. + AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST)); + // Fix buttons. + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE)); + jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonInt(FALSE)); + int nRight = JsonGetInt(NuiGetBind(oPC, nToken, "btn_right_part_color")); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(!nRight)); + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(!nRight)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE)); + nRight = JsonGetInt(NuiGetBind(oPC, nToken, "btn_right_part_reset_event")); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(nRight)); + SetColorPalletPointer(oPC, nToken, oNewItem); + } + } + // They have changed the material (color item) for the item. + else if(GetStringLeft(sElem, 13) == "btn_material_") + { + int nSelected = StringToInt(GetStringRight(sElem, 1)); + SetMaterialButtons(oPC, nToken, nSelected); + jCraft = JsonObjectSet(jCraft, CRAFT_MATERIAL_SELECTION, JsonInt(nSelected)); + // Change the pallet for the correct material. + string sColorPallet; + if(nSelected < 4) + { + sColorPallet = "gui_pal_tattoo"; + NuiSetBind(oPC, nToken, "armor_block_1", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "armor_block_2", JsonBool(FALSE)); + } + else + { + sColorPallet = "armor_pallet"; + if(ResManGetAliasFor(sColorPallet, RESTYPE_TGA) == "") + { + sColorPallet = "gui_pal_tattoo"; + NuiSetBind(oPC, nToken, "armor_block_1", JsonBool(TRUE)); + } + } + NuiSetBind(oPC, nToken, "color_pallet_image", JsonString (sColorPallet)); + SetLocalString(oPC, CRAFT_COLOR_PALLET, sColorPallet); + SetColorPalletPointer(oPC, nToken, oItem); + } + SetLocalJson(oPC, CRAFT_JSON, jCraft); + } + else if(sEvent == "mousedown") + { + int nMouseButton = JsonGetInt(JsonObjectGet(NuiGetEventPayload(), "mouse_btn")); + if(nMouseButton == NUI_MOUSE_BUTTON_RIGHT) + { + AssignCommand(oPC, PlaySound("gui_button")); + if(sElem == "btn_highlight") + { + if(GetLocalInt(oPC, CRAFT_ULTRALIGHT)) + { + RemoveTagedEffects(oTarget, CRAFT_ULTRALIGHT); + DeleteLocalInt(oPC, CRAFT_ULTRALIGHT); + NuiSetBind(oPC, nToken, "btn_highlight", JsonBool(FALSE)); + } + else + { + if(GetLocalInt(oPC, CRAFT_HIGHLIGHT)) + { + RemoveTagedEffects(oTarget, CRAFT_HIGHLIGHT); + DeleteLocalInt(oPC, CRAFT_HIGHLIGHT); + } + SetLocalInt(oPC, CRAFT_ULTRALIGHT, TRUE); + effect eLight = EffectVisualEffect(VFX_DUR_ULTRAVISION); + eLight = TagEffect(eLight, CRAFT_ULTRALIGHT); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLight, oTarget); + NuiSetBind(oPC, nToken, "btn_highlight", JsonBool(TRUE)); + } + } + } + } + } +} +/*void CopyCraftingItem(object oPC, object oItem) +{ + //ai_Debug("pe_crafting", "295", JsonDump(ObjectToJson(oItem), 2)); + json jItem = ObjectToJson(oItem); + + SetLocalInt(oPC, CRAFT_COPY_ITEM, TRUE); + int nSelected = GetLocalInt(oPC, CRAFT_ITEM_SELECTION); + if (ai_GetIsWeapon(oItem)) + { + // Copy the base item type; + SetLocalInt(oPC, CRAFT_COPY_ITEM_TYPE, GetBaseItemType(oItem)); + // Copy each model/color & save to variables. + int nIndex = 1; + string sIndex; + while(nIndex <= 3) + { + sIndex = IntToString(nIndex); + SetLocalInt(oPC, CRAFT_COPY_MODEL + sIndex, JsonGetInt(GffGetByte(jItem, "ModelPart" + sIndex))); + nIndex++; + } + } + else if (nSelected == 0) + { + // Copy the armors AC so we can check it. + SetLocalInt(oPC, CRAFT_ARMOR_AC, ai_GetArmorBonus(oItem)); + // Copy an per part colors if they exist. + int nPart, nColor, nPartColor; + string sPart, sColor; + while(nPart <= 18) + { + sPart = IntToString(nPart); + nColor = 0; + while(nColor <= 5) + { + sColor = IntToString(nColor); + if(GffGetFieldExists(jItem, "APart_" + sPart + "_Col_" + sColor, GFF_FIELD_TYPE_BYTE)) + { + // Shift the number up by 1 so we can save as a variable and not use 0! + nPartColor = JsonGetInt(GffGetByte(jItem, "APart_" + sPart + "_Col_" + sColor)) + 1; + SetLocalInt(oPC, CRAFT_COPY_PART_COLOR + sPart + sColor, nPartColor); + } + nColor++; + } + nPart++; + } + // Copy each model & save to variables. + SetLocalInt(oPC, "CRAFT_COPY_MODEL0", JsonGetInt(GffGetByte(jItem, "ArmorPart_Belt"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL1", JsonGetInt(GffGetByte(jItem, "ArmorPart_LBicep"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL2", JsonGetInt(GffGetByte(jItem, "ArmorPart_LFArm"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL3", JsonGetInt(GffGetByte(jItem, "ArmorPart_LFoot"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL4", JsonGetInt(GffGetByte(jItem, "ArmorPart_LHand"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL5", JsonGetInt(GffGetByte(jItem, "ArmorPart_LShin"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL6", JsonGetInt(GffGetByte(jItem, "ArmorPart_LShoul"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL7", JsonGetInt(GffGetByte(jItem, "ArmorPart_LThigh"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL8", JsonGetInt(GffGetByte(jItem, "ArmorPart_Neck"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL9", JsonGetInt(GffGetByte(jItem, "ArmorPart_Pelvis"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL10", JsonGetInt(GffGetByte(jItem, "ArmorPart_RBicep"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL11", JsonGetInt(GffGetByte(jItem, "ArmorPart_RFArm"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL12", JsonGetInt(GffGetByte(jItem, "ArmorPart_RFoot"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL13", JsonGetInt(GffGetByte(jItem, "ArmorPart_RHand"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL14", JsonGetInt(GffGetByte(jItem, "ArmorPart_RShin"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL15", JsonGetInt(GffGetByte(jItem, "ArmorPart_RShoul"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL16", JsonGetInt(GffGetByte(jItem, "ArmorPart_RThigh"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL17", JsonGetInt(GffGetByte(jItem, "ArmorPart_Robe"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL18", JsonGetInt(GffGetByte(jItem, "ArmorPart_Torso"))); + // Copy each color and save to variables. + SetLocalInt(oPC, "CRAFT_COPY_COLOR0", JsonGetInt(GffGetByte(jItem, "Cloth1Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR1", JsonGetInt(GffGetByte(jItem, "Cloth2Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR2", JsonGetInt(GffGetByte(jItem, "Leather1Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR3", JsonGetInt(GffGetByte(jItem, "Leather2Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR4", JsonGetInt(GffGetByte(jItem, "Metal1Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR5", JsonGetInt(GffGetByte(jItem, "Metal2Color"))); + } +else + { + // Copy the base item type; + SetLocalInt(oPC, CRAFT_COPY_ITEM_TYPE, GetBaseItemType(oItem)); + // Copy the base item type; + SetLocalInt(oPC, "CRAFT_COPY_MODEL0", JsonGetInt(GffGetByte(jItem, "ModelPart1"))); + // Copy each color and save to variables. + SetLocalInt(oPC, "CRAFT_COPY_COLOR0", JsonGetInt(GffGetByte(jItem, "Cloth1Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR1", JsonGetInt(GffGetByte(jItem, "Cloth2Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR2", JsonGetInt(GffGetByte(jItem, "Leather1Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR3", JsonGetInt(GffGetByte(jItem, "Leather2Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR4", JsonGetInt(GffGetByte(jItem, "Metal1Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR5", JsonGetInt(GffGetByte(jItem, "Metal2Color"))); + } + // Send message that it has been copied. + ai_SendMessages(GetName (oItem) + " appearance has been copied!", AI_COLOR_GREEN, oPC); +} + +// Used in the crafting GUI to paste a copy of an item to another item. +object PasteCraftingItem (object oPC, object oTarget, object oItem) +{ + int nModelPartNum; + object oChestItem; + int nSelected = GetLocalInt(oPC, CRAFT_ITEM_SELECTION); + object oBuildContainer = GetObjectByTag(CRAFT_CONTAINER); + // Move the item to the building container. + oChestItem = CopyItem(oItem, oBuildContainer, TRUE); + DestroyObject(oItem); + json jItem = ObjectToJson(oChestItem, TRUE); + if (ai_GetIsWeapon(oChestItem)) + { + // Copy each model & save to variables. + int nIndex = 1; + string sIndex; + while(nIndex <= 3) + { + sIndex = IntToString(nIndex); + jItem = GffReplaceByte(jItem,"ModelPart" + sIndex, GetLocalInt(oPC, CRAFT_COPY_MODEL + sIndex)); + jItem = GffReplaceWord(jItem,"xModelPart" + sIndex, GetLocalInt(oPC, CRAFT_COPY_MODEL + sIndex)); + DeleteLocalInt(oPC, CRAFT_COPY_MODEL + sIndex); + nIndex++; + } + oItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + // Equip new item. + AssignCommand(oTarget, ActionEquipItem (oItem, INVENTORY_SLOT_RIGHTHAND)); + } + // Armor. + else if (nSelected == 0) + { + // Paste per part colors if they exist. + int nPart, nColor, nPartColor; + string sPart, sColor; + while(nPart <= 18) + { + sPart = IntToString(nPart); + nColor = 0; + while(nColor <= 5) + { + sColor = IntToString(nColor); + nPartColor = GetLocalInt(oPC, CRAFT_COPY_PART_COLOR + sPart + sColor); + if(nPartColor > 0) + { + // Shift the number down by 1 since we can not use 0 in the variable! + nPartColor = nPartColor - 1; + if(GffGetFieldExists(jItem, "APart_" + sPart + "_Col_" + sColor, GFF_FIELD_TYPE_BYTE)) + { + jItem = GffReplaceByte(jItem, "APart_" + sPart + "_Col_" + sColor, nPartColor); + } + else jItem = GffAddByte(jItem, "APart_" + sPart + "_Col_" + sColor, nPartColor); + DeleteLocalInt(oPC, "CRAFT_COPY_PART_COLOR" + sPart + sColor); + } + nColor++; + } + nPart++; + } + jItem = GffReplaceByte(jItem,"ArmorPart_Belt", GetLocalInt(oPC, "CRAFT_COPY_MODEL0")); + jItem = GffReplaceByte(jItem,"ArmorPart_LBicep", GetLocalInt(oPC, "CRAFT_COPY_MODEL1")); + jItem = GffReplaceByte(jItem,"ArmorPart_LFArm", GetLocalInt(oPC, "CRAFT_COPY_MODEL2")); + jItem = GffReplaceByte(jItem,"ArmorPart_LFoot", GetLocalInt(oPC, "CRAFT_COPY_MODEL3")); + jItem = GffReplaceByte(jItem,"ArmorPart_LHand", GetLocalInt(oPC, "CRAFT_COPY_MODEL4")); + jItem = GffReplaceByte(jItem,"ArmorPart_LShin", GetLocalInt(oPC, "CRAFT_COPY_MODEL5")); + jItem = GffReplaceByte(jItem,"ArmorPart_LShoul", GetLocalInt(oPC, "CRAFT_COPY_MODEL6")); + jItem = GffReplaceByte(jItem,"ArmorPart_LThigh", GetLocalInt(oPC, "CRAFT_COPY_MODEL7")); + jItem = GffReplaceByte(jItem,"ArmorPart_Neck", GetLocalInt(oPC, "CRAFT_COPY_MODEL8")); + jItem = GffReplaceByte(jItem,"ArmorPart_Pelvis", GetLocalInt(oPC, "CRAFT_COPY_MODEL9")); + jItem = GffReplaceByte(jItem,"ArmorPart_RBicep", GetLocalInt(oPC, "CRAFT_COPY_MODEL10")); + jItem = GffReplaceByte(jItem,"ArmorPart_RFArm", GetLocalInt(oPC, "CRAFT_COPY_MODEL11")); + jItem = GffReplaceByte(jItem,"ArmorPart_RFoot", GetLocalInt(oPC, "CRAFT_COPY_MODEL12")); + jItem = GffReplaceByte(jItem,"ArmorPart_RHand", GetLocalInt(oPC, "CRAFT_COPY_MODEL13")); + jItem = GffReplaceByte(jItem,"ArmorPart_RShin", GetLocalInt(oPC, "CRAFT_COPY_MODEL14")); + jItem = GffReplaceByte(jItem,"ArmorPart_RShoul", GetLocalInt(oPC, "CRAFT_COPY_MODEL15")); + jItem = GffReplaceByte(jItem,"ArmorPart_RThigh", GetLocalInt(oPC, "CRAFT_COPY_MODEL16")); + jItem = GffReplaceByte(jItem,"ArmorPart_Robe", GetLocalInt(oPC, "CRAFT_COPY_MODEL17")); + jItem = GffReplaceByte(jItem,"ArmorPart_Torso", GetLocalInt(oPC, "CRAFT_COPY_MODEL18")); + jItem = GffReplaceWord(jItem,"xArmorPart_Belt", GetLocalInt(oPC, "CRAFT_COPY_MODEL0")); + jItem = GffReplaceWord(jItem,"xArmorPart_LBice", GetLocalInt(oPC, "CRAFT_COPY_MODEL1")); + jItem = GffReplaceWord(jItem,"xArmorPart_LFArm", GetLocalInt(oPC, "CRAFT_COPY_MODEL2")); + jItem = GffReplaceWord(jItem,"xArmorPart_LFoot", GetLocalInt(oPC, "CRAFT_COPY_MODEL3")); + jItem = GffReplaceWord(jItem,"xArmorPart_LHand", GetLocalInt(oPC, "CRAFT_COPY_MODEL4")); + jItem = GffReplaceWord(jItem,"xArmorPart_LShin", GetLocalInt(oPC, "CRAFT_COPY_MODEL5")); + jItem = GffReplaceWord(jItem,"xArmorPart_LShou", GetLocalInt(oPC, "CRAFT_COPY_MODEL6")); + jItem = GffReplaceWord(jItem,"xArmorPart_LThig", GetLocalInt(oPC, "CRAFT_COPY_MODEL7")); + jItem = GffReplaceWord(jItem,"xArmorPart_Neck", GetLocalInt(oPC, "CRAFT_COPY_MODEL8")); + jItem = GffReplaceWord(jItem,"xArmorPart_Pelvi", GetLocalInt(oPC, "CRAFT_COPY_MODEL9")); + jItem = GffReplaceWord(jItem,"xArmorPart_RBice", GetLocalInt(oPC, "CRAFT_COPY_MODEL10")); + jItem = GffReplaceWord(jItem,"xArmorPart_RFArm", GetLocalInt(oPC, "CRAFT_COPY_MODEL11")); + jItem = GffReplaceWord(jItem,"xArmorPart_RFoot", GetLocalInt(oPC, "CRAFT_COPY_MODEL12")); + jItem = GffReplaceWord(jItem,"xArmorPart_RHand", GetLocalInt(oPC, "CRAFT_COPY_MODEL13")); + jItem = GffReplaceWord(jItem,"xArmorPart_RShin", GetLocalInt(oPC, "CRAFT_COPY_MODEL14")); + jItem = GffReplaceWord(jItem,"xArmorPart_RShou", GetLocalInt(oPC, "CRAFT_COPY_MODEL15")); + jItem = GffReplaceWord(jItem,"xArmorPart_RThig", GetLocalInt(oPC, "CRAFT_COPY_MODEL16")); + jItem = GffReplaceWord(jItem,"xArmorPart_Robe", GetLocalInt(oPC, "CRAFT_COPY_MODEL17")); + jItem = GffReplaceWord(jItem,"xArmorPart_Torso", GetLocalInt(oPC, "CRAFT_COPY_MODEL18")); + jItem = GffReplaceByte(jItem,"Cloth1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR0")); + jItem = GffReplaceByte(jItem,"Cloth2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR1")); + jItem = GffReplaceByte(jItem,"Leather1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR2")); + jItem = GffReplaceByte(jItem,"Leather2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR3")); + jItem = GffReplaceByte(jItem,"Metal1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR4")); + jItem = GffReplaceByte(jItem,"Metal2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR5")); + oItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + int nIndex; + for(nIndex = 0; nIndex <= 18; nIndex++) + { + DeleteLocalInt(oPC, CRAFT_COPY_MODEL + IntToString(nIndex)); + } + for(nIndex = 0; nIndex <= 5; nIndex++) + { + DeleteLocalInt(oPC, CRAFT_COPY_COLOR + IntToString(nIndex)); + } + // Equip new item. + AssignCommand (oTarget, ActionEquipItem (oItem, INVENTORY_SLOT_CHEST)); + } + else if(ai_GetIsShield(oChestItem)) + { + jItem = GffReplaceByte(jItem,"ModelPart1", GetLocalInt(oPC, "CRAFT_COPY_MODEL1")); + jItem = GffReplaceWord(jItem,"xModelPart1", GetLocalInt(oPC, "CRAFT_COPY_MODEL1")); + oItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + // Equip new item. + AssignCommand(oTarget, ActionEquipItem (oItem, INVENTORY_SLOT_LEFTHAND)); + } + else + { + //ai_Debug("pe_crafting", "389", JsonDump(ObjectToJson(oChestItem), 2)); + jItem = GffReplaceByte(jItem,"ModelPart1", GetLocalInt(oPC, "CRAFT_COPY_MODEL0")); + jItem = GffReplaceWord(jItem,"xModelPart1", GetLocalInt(oPC, "CRAFT_COPY_MODEL0")); + jItem = GffReplaceByte(jItem,"Cloth1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR0")); + jItem = GffReplaceByte(jItem,"Cloth2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR1")); + jItem = GffReplaceByte(jItem,"Leather1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR2")); + jItem = GffReplaceByte(jItem,"Leather2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR3")); + jItem = GffReplaceByte(jItem,"Metal1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR4")); + jItem = GffReplaceByte(jItem,"Metal2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR5")); + oItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + DeleteLocalInt(oPC, "CRAFT_COPY_MODEL0"); + int nIndex; + for(nIndex = 0; nIndex <= 5; nIndex++) + { + DeleteLocalInt(oPC, CRAFT_COPY_COLOR + IntToString(nIndex)); + } + // Equip new item. + int nItemType = GetBaseItemType(oChestItem); + if(nItemType == BASE_ITEM_CLOAK) AssignCommand(oTarget, ActionEquipItem (oItem, INVENTORY_SLOT_CLOAK)); + else if(nItemType == BASE_ITEM_HELMET) AssignCommand(oTarget, ActionEquipItem (oItem, INVENTORY_SLOT_HEAD)); + } + // Send message that it has been copied. + AssignCommand(oPC, ai_SendMessages (GetName (oItem) + " appearance has been changed!", AI_COLOR_GREEN, oPC)); + DestroyObject(oChestItem); + return oItem; +} */ +int GetItemSelectedEquipSlot (int nItemSelected) +{ + if (nItemSelected == 0) return INVENTORY_SLOT_CHEST; + if (nItemSelected == 1) return INVENTORY_SLOT_CLOAK; + if (nItemSelected == 2) return INVENTORY_SLOT_HEAD; + if (nItemSelected == 3) return INVENTORY_SLOT_RIGHTHAND; + if (nItemSelected == 4) return INVENTORY_SLOT_LEFTHAND; + return INVENTORY_SLOT_CHEST; +} +int GetArmorModelSelected (object oPC) +{ + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + int nModelSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MODEL_SELECTION)); + if(nModelSelected == 0) return ITEM_APPR_ARMOR_MODEL_NECK; + if(nModelSelected == 1) return ITEM_APPR_ARMOR_MODEL_RSHOULDER; + if(nModelSelected == 2) return ITEM_APPR_ARMOR_MODEL_RBICEP; + if(nModelSelected == 3) return ITEM_APPR_ARMOR_MODEL_RFOREARM; + if(nModelSelected == 4) return ITEM_APPR_ARMOR_MODEL_RHAND; + if(nModelSelected == 5) return ITEM_APPR_ARMOR_MODEL_TORSO; + if(nModelSelected == 6) return ITEM_APPR_ARMOR_MODEL_BELT; + if(nModelSelected == 7) return ITEM_APPR_ARMOR_MODEL_PELVIS; + if(nModelSelected == 8) return ITEM_APPR_ARMOR_MODEL_RTHIGH; + if(nModelSelected == 9) return ITEM_APPR_ARMOR_MODEL_RSHIN; + if(nModelSelected == 10) return ITEM_APPR_ARMOR_MODEL_RFOOT; + return ITEM_APPR_ARMOR_MODEL_ROBE; +} +int GetMaxSimpleItemNumber(object oItem, int nBaseItemType) +{ + int nResType, nMaxNumber, nModelNumber; + string sModelNumber, sModelName = Get2DAString("baseitems", "ItemClass", nBaseItemType) + "_"; + //ai_Debug("pe_crafting", "804", "sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber)); + while(nModelNumber < 999) + { + if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber); + else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + if(nBaseItemType == BASE_ITEM_CLOAK) nResType = RESTYPE_PLT; + else nResType = RESTYPE_MDL; + if(ResManGetAliasFor(sModelName + sModelNumber, nResType) != "") nMaxNumber++; + nModelNumber++; + //ai_Debug("pe_crafting", "841", "sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber)); + } + return nMaxNumber; +} +int GetSimpleItemNumber(object oItem, int nModelNumber, int nBaseItemType) +{ + int nResType, nIndex, nCounter; + string sModelNumber, sModelName = Get2DAString("baseitems", "ItemClass", nBaseItemType) + "_"; + //ai_Debug("pe_crafting", "804", "sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber)); + while(nIndex <= 999) + { + if(nIndex < 10) sModelNumber = "00" + IntToString(nIndex); + else if(nIndex < 100) sModelNumber = "0" + IntToString(nIndex); + else sModelNumber = IntToString(nIndex); + if(nBaseItemType == BASE_ITEM_CLOAK) nResType = RESTYPE_PLT; + else nResType = RESTYPE_MDL; + if(ResManGetAliasFor(sModelName + sModelNumber, nResType) != "") nCounter++; + if(nCounter == nModelNumber) return nIndex; + nIndex++; + //ai_Debug("pe_crafting", "841", "sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber)); + } + return nIndex; +} +int GetMaxWeaponModuleNumber(struct stWeaponAppearance stWA) +{ + int nBaseItemType = GetBaseItemType(stWA.oItem); + stWA.nColor = 1; + stWA.nModel = 99; + stWA.sPart = "t"; + string sModelNumber; + string sModelName = Get2DAString("baseitems", "ItemClass", nBaseItemType) + "_" + stWA.sPart + "_"; + int nModelNumber = (stWA.nModel * 10) + stWA.nColor; + if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber); + else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + //SendMessageToPC(GetFirstPC(), "pe_crafting, 780, sModel: " + sModelName + sModelNumber + + // " nModel: " + IntToString(stWA.nModel) + " nColor: " + IntToString(stWA.nColor)); + while(ResManGetAliasFor(sModelName + sModelNumber, RESTYPE_MDL) == "") + { + stWA.nModel += -1; + // Create the model name. + nModelNumber = (stWA.nModel * 10) + stWA.nColor; + if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + //SendMessageToPC(GetFirstPC(), "pe_crafting, 789, sModel: " + sModelName + sModelNumber + + // " nModel: " + IntToString(stWA.nModel) + " nColor: " + IntToString(stWA.nColor)); + } + return stWA.nModel; +} +struct stWeaponAppearance GetNextWeaponAppearance(struct stWeaponAppearance stWA, int nDirection) +{ + int nBaseItemType = GetBaseItemType(stWA.oItem); + string sModelNumber; + string sModelName = Get2DAString("baseitems", "ItemClass", nBaseItemType) + "_" + stWA.sPart + "_"; + // Get next/previous color/model. + stWA.nColor += nDirection; + if(stWA.nColor > 9) + { + stWA.nColor = 1; + stWA.nModel += nDirection; + if(stWA.nModel > CRAFT_MAX_WEAPON_MODEL_NUMBER) stWA.nModel = 1; + } + else if(stWA.nColor < 1) + { + stWA.nColor = 9; + stWA.nModel += nDirection; + if(stWA.nModel < 1) stWA.nModel = CRAFT_MAX_WEAPON_MODEL_NUMBER; + } + int nModelNumber = (stWA.nModel * 10) + stWA.nColor; + if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber); + else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + //SendMessageToPC(GetFirstPC(), "pe_crafting, 778, sModel: " + sModelName + sModelNumber + + // " nModel: " + IntToString(stWA.nModel) + " nColor: " + IntToString(stWA.nColor)); + while(ResManGetAliasFor(sModelName + sModelNumber, RESTYPE_MDL) == "") + { + // Get next/previous color/model. + stWA.nColor += nDirection; + if(stWA.nColor > 9) + { + stWA.nColor = 1; + stWA.nModel += nDirection; + if(stWA.nModel > CRAFT_MAX_WEAPON_MODEL_NUMBER) stWA.nModel = 1; + } + else if(stWA.nColor < 1) + { + stWA.nColor = 9; + stWA.nModel += nDirection; + if(stWA.nModel < 1) stWA.nModel = CRAFT_MAX_WEAPON_MODEL_NUMBER; + } + // Create the model name. + nModelNumber = (stWA.nModel * 10) + stWA.nColor; + if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + //SendMessageToPC(GetFirstPC(), "pe_crafting, 800, sModel: " + sModelName + sModelNumber + + // " nModel: " + IntToString(stWA.nModel) + " nColor: " + IntToString(stWA.nColor)); + } + return stWA; +} +object ChangeItemsAppearance(object oPC, object oTarget, int nToken, object oItem, int nDirection, string sPart) +{ + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + // Get the item we are changing. + int nModelSelected; + int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + string sModelName, sModelNumber; + object oNewItem; + // Weapons. + if(ai_GetIsWeapon(oItem)) + { + // Freeze animations - vfx 352? + if(sPart == "t") nModelSelected = 2; + else if(sPart == "m") nModelSelected = 1; + else if(sPart == "b") nModelSelected = 0; + sModelName = Get2DAString("baseitems", "ItemClass", GetBaseItemType(oItem)) + "_" + sPart + "_"; + struct stWeaponAppearance stWA; + stWA.oItem = oItem; + stWA.sPart = sPart; + stWA.nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, nModelSelected); + stWA.nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, nModelSelected); + stWA = GetNextWeaponAppearance(stWA, nDirection); + json jItem = ObjectToJson(oItem, TRUE); + int nModelNumber = stWA.nModel * 10 + stWA.nColor; + jItem = GffReplaceByte(jItem, "ModelPart" + IntToString(nModelSelected + 1), nModelNumber); + jItem = GffReplaceWord(jItem, "xModelPart" + IntToString(nModelSelected + 1), nModelNumber); + oNewItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + AssignCommand(oTarget, ClearAllActions(TRUE)); + DestroyObject(oItem); + // Item selected 3 is the right hand, 4 is the left hand. + //SendMessageToPC(oPC, "nItemSelected: " + IntToString(nItemSelected)); + if(nItemSelected == 3) + { + AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_RIGHTHAND)); + } + else AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_LEFTHAND)); + NuiSetBind(oPC, nToken, "txt_model_number_" + sPart, JsonString(IntToString(nModelNumber))); + } + // Armor. + else if(nItemSelected == 0) + { + // Create the model name. + // Get the ModelType. + int nAppearance = GetAppearanceType(oTarget); + string sModelName = Get2DAString("appearance", "MODELTYPE", nAppearance); + // Get gender. + if(GetGender(oTarget) == GENDER_MALE) sModelName += "m"; + else sModelName += "f"; + // Get race. + sModelName += Get2DAString("appearance", "RACE", nAppearance); + // Get Phenotype. + sModelName += IntToString(GetPhenoType(oTarget)) + "_"; + // Get the selected model. + nModelSelected = GetArmorModelSelected(oPC); + //ai_Debug("pe_crafting", "646", "nModelSide: " + IntToString(nModelSide)); + // If we are doing the left side (bottom menu options) then add one to + // get the left side. + // Note: Right Thigh and Left Thigh are backwards so this fixes that! + if(sPart == "b") + { + if(nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected--; + else nModelSelected++; + } + int nModelNumber = StringToInt(JsonGetString(NuiGetBind(oPC, nToken, "txt_model_number_" + sPart))); + //int nModelNumber = GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nModelSelected); + //SendMessageToPC(oPC, "pe_crafting, 826, nModelNumber: " + IntToString(nModelNumber) + + // " sPart: " + sPart + " nModelSelected: " + IntToString(nModelSelected)); + int nBaseModelNumber = nModelNumber; + nModelNumber += nDirection; + if(nModelNumber > CRAFT_MAX_MODEL_NUMBER) nModelNumber = 0; + else if(nModelNumber < 0) nModelNumber = CRAFT_MAX_MODEL_NUMBER; + string sModelNumber; + if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber); + else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + // Check for changes to the torso (base part of the armor linked to AC). + if(nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO) + { + string sCurrentACBonus = Get2DAString("parts_chest", "ACBONUS", nBaseModelNumber); + string sACBonus = Get2DAString ("parts_chest", "ACBONUS", nModelNumber); + sModelName += Get2DAString ("capart", "MDLNAME", nModelSelected); + //SendMessageToPC(oPC, "pe_crafting, 842, sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber) + " sCurrentACBonus: " + sCurrentACBonus + + // " sACBonus: " + sACBonus + " nModelSelected: " + IntToString(nModelSelected)); + while(ResManGetAliasFor(sModelName + sModelNumber, RESTYPE_MDL) == "" || + sACBonus != sCurrentACBonus) + { + nModelNumber += nDirection; + if (nModelNumber > CRAFT_MAX_MODEL_NUMBER) nModelNumber = 0; + else if (nModelNumber < 0) nModelNumber = CRAFT_MAX_MODEL_NUMBER; + if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber); + else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + sACBonus = Get2DAString ("parts_chest", "ACBONUS", nModelNumber); + //SendMessageToPC(oPC, "pe_crafting, 854, sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber) + " sACBonus: " + sACBonus + + // " nModelSelected: " + IntToString(nModelSelected)); + } + // Change the model. + oNewItem = CopyItemAndModify (oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nModelSelected, nModelNumber, TRUE); + DestroyObject (oItem); + AssignCommand (oTarget, ActionEquipItem (oNewItem, INVENTORY_SLOT_CHEST)); + } + // Change all other parts of armor. + else + { + sModelName += Get2DAString("capart", "MDLNAME", nModelSelected); + //SendMessageToPC(oPC, "pe_crafting, 866, sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber) + " nModelSelected: " + IntToString(nModelSelected)); + while(ResManGetAliasFor(sModelName + sModelNumber, RESTYPE_MDL) == "") + { + nModelNumber += nDirection; + if (nModelNumber > CRAFT_MAX_MODEL_NUMBER) nModelNumber = 0; + else if (nModelNumber < 0) nModelNumber = CRAFT_MAX_MODEL_NUMBER; + if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber); + else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + //SendMessageToPC(oPC, "pe_crafting, 705, sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber) + " nModelSelected: " + IntToString(nModelSelected)); + } + oNewItem = CopyItemAndModify (oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nModelSelected, nModelNumber, TRUE); + DestroyObject (oItem); + // If using the linked menu option then change the left side too. + if(sPart == "m" && (nModelSelected != ITEM_APPR_ARMOR_MODEL_NECK && + nModelSelected != ITEM_APPR_ARMOR_MODEL_BELT && + nModelSelected != ITEM_APPR_ARMOR_MODEL_PELVIS && + nModelSelected != ITEM_APPR_ARMOR_MODEL_ROBE)) + { + // Note: Right Thigh and Left Thigh are backwards so this fixes that! + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected--; + else nModelSelected++; + oItem = CopyItemAndModify(oNewItem, ITEM_APPR_TYPE_ARMOR_MODEL, nModelSelected, nModelNumber, TRUE); + DestroyObject(oNewItem); + AssignCommand(oTarget, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST)); + } + else AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST)); + } + string sModelSelected; + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_NECK || + nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO || + nModelSelected == ITEM_APPR_ARMOR_MODEL_BELT || + nModelSelected == ITEM_APPR_ARMOR_MODEL_PELVIS || + nModelSelected == ITEM_APPR_ARMOR_MODEL_ROBE) + { + NuiSetBind(oPC, nToken, "txt_model_number_" + sPart, JsonString(IntToString(nModelNumber))); + } + else + { + if(sPart == "m") + { + // Using labels for Mobile. + //NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString(IntToString(nModelNumber))); + //NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(IntToString(nModelNumber))); + //NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(IntToString(nModelNumber))); + NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString(IntToString(nModelNumber))); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(IntToString(nModelNumber))); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(IntToString(nModelNumber))); + } + else + { + NuiSetBind(oPC, nToken, "txt_model_number_" + sPart, JsonString(IntToString(nModelNumber))); + } + } + } + // All other items. + else + { + int nSlot, nResType, nBaseItemType = GetBaseItemType(oItem); + string sModelName = Get2DAString("baseitems", "ItemClass", nBaseItemType) + "_"; + if(nBaseItemType == BASE_ITEM_CLOAK) + { + nSlot = INVENTORY_SLOT_CLOAK; + nResType = RESTYPE_PLT; + } + else if(nBaseItemType == BASE_ITEM_HELMET) + { + nSlot = INVENTORY_SLOT_HEAD; + nResType = RESTYPE_MDL; + } + else if(nBaseItemType == BASE_ITEM_LARGESHIELD || + nBaseItemType == BASE_ITEM_SMALLSHIELD || + nBaseItemType == BASE_ITEM_TOWERSHIELD) + { + nSlot = INVENTORY_SLOT_LEFTHAND; + nResType = RESTYPE_MDL; + } + int nModelNumber = GetItemAppearance(oItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0); + nModelNumber += nDirection; + if (nModelNumber > CRAFT_MAX_MODEL_NUMBER) nModelNumber = 0; + else if (nModelNumber < 0) nModelNumber = CRAFT_MAX_MODEL_NUMBER; + if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber); + else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + //ai_Debug("pe_crafting", "804", "sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber)); + while(ResManGetAliasFor(sModelName + sModelNumber, nResType) == "") + { + nModelNumber += nDirection; + if (nModelNumber > CRAFT_MAX_MODEL_NUMBER) nModelNumber = 0; + else if (nModelNumber < 0) nModelNumber = CRAFT_MAX_MODEL_NUMBER; + if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber); + else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + //ai_Debug("pe_crafting", "841", "sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber)); + } + oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0, nModelNumber, TRUE); + DestroyObject(oItem); + AssignCommand(oTarget, ActionEquipItem (oNewItem, nSlot)); + NuiSetBind(oPC, nToken, "txt_model_number_" + sPart, JsonString(IntToString(nModelNumber))); + } + return oNewItem; +} +object RandomizeItemsCraftAppearance(object oPC, object oTarget, int nToken, object oItem) +{ + // Get the item we are changing. + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + int nBaseItemType = GetBaseItemType(oItem); + object oNewItem; + if(ai_GetIsWeapon(oItem)) + { + int nRollTop, nRollMid, nRollBottom; + int nColorTop, nColorMid, nColorBottom; + struct stWeaponAppearance stWA; + stWA.oItem = oItem; + int nMaxModuleNumber = GetMaxWeaponModuleNumber(stWA); + nRollTop = Random(nMaxModuleNumber) + 1; + // Check bows as they must randomize to the same top, middle, and bottom otherwise they look bad. + if(nBaseItemType == BASE_ITEM_LONGBOW || nBaseItemType == BASE_ITEM_SHORTBOW) + { + nRollMid = nRollTop; + nRollBottom = nRollTop; + } + // Randomize each item individualy for other weapons. + else + { + nRollMid = Random(nMaxModuleNumber) + 1; + nRollBottom = Random(nMaxModuleNumber) + 1; + } + nColorTop = Random(9) + 1; + nColorMid = Random(9) + 1; + nColorBottom = Random(9) + 1; + // Change weapons model. + stWA.sPart = "t"; + stWA.nModel = nRollTop; + stWA.nColor = nColorTop; + stWA = GetNextWeaponAppearance(stWA, -1); + json jItem = ObjectToJson(oItem, TRUE); + //ai_Debug("pe_crafting", "614", "ModelPart" + IntToString(nModelSelected + 1) + + // " nModelNumber: " + IntToString(nModelNumber)); + jItem = GffReplaceByte(jItem, "ModelPart" + IntToString(3), stWA.nModel * 10 + stWA.nColor); + jItem = GffReplaceWord(jItem, "xModelPart" + IntToString(3), stWA.nModel * 10 + stWA.nColor); + NuiSetBind(oPC, nToken, "txt_model_number_" + stWA.sPart, JsonString(IntToString(stWA.nModel * 10 + stWA.nColor))); + stWA.sPart = "m"; + stWA.nModel = nRollMid; + stWA.nColor = nColorMid; + stWA = GetNextWeaponAppearance(stWA, -1); + jItem = GffReplaceByte(jItem, "ModelPart" + IntToString(2), stWA.nModel * 10 + stWA.nColor); + jItem = GffReplaceWord(jItem, "xModelPart" + IntToString(2), stWA.nModel * 10 + stWA.nColor); + NuiSetBind(oPC, nToken, "txt_model_number_" + stWA.sPart, JsonString(IntToString(stWA.nModel * 10 + stWA.nColor))); + stWA.sPart = "b"; + stWA.nModel = nRollBottom; + stWA.nColor = nColorBottom; + stWA = GetNextWeaponAppearance(stWA, -1); + jItem = GffReplaceByte(jItem, "ModelPart" + IntToString(1), stWA.nModel * 10 + stWA.nColor); + jItem = GffReplaceWord(jItem, "xModelPart" + IntToString(1), stWA.nModel * 10 + stWA.nColor); + NuiSetBind(oPC, nToken, "txt_model_number_" + stWA.sPart, JsonString(IntToString(stWA.nModel * 10 + stWA.nColor))); + oNewItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + AssignCommand(oTarget, ClearAllActions(TRUE)); + DestroyObject(oItem); + // Item selected 3 is the right hand, 4 is the left hand. + if (nItemSelected == 3) AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_RIGHTHAND)); + else AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_LEFTHAND)); + } + // Armor. + else if(nItemSelected == 0) + { + int nRoll, nRoll2; + json jItem = ObjectToJson(oItem, TRUE); + // Randomize the models. + // Randomize Torso + //jItem = GffReplaceByte(jItem, "ArmorPart_Torso", ); + //jItem = GffReplaceWord(jItem, "xArmorPart_Torso", ); + // Randomize the colors. + nRoll = Random(175) + 1; + if(d100() < 50) nRoll2 = nRoll + Random(5) - 3; + else nRoll2 = Random(175) + 1; + jItem = GffReplaceByte(jItem, "Cloth1Color", nRoll); + jItem = GffReplaceByte(jItem, "Cloth2Color", nRoll2); + if(d100() < 50) nRoll = nRoll + Random(5) - 3; + else nRoll = Random(175) + 1; + if(d100() < 50) nRoll2 = nRoll + Random(5) - 3; + else nRoll2 = Random(175) + 1; + jItem = GffReplaceByte(jItem, "Leather1Color", nRoll); + jItem = GffReplaceByte(jItem, "Leather2Color", nRoll2); + if(d100() < 50) nRoll = nRoll + Random(5) - 3; + else nRoll = Random(175) + 1; + if(d100() < 50) nRoll2 = nRoll + Random(5) - 3; + else nRoll2 = Random(175) + 1; + jItem = GffReplaceByte(jItem, "Metal1Color", nRoll); + jItem = GffReplaceByte(jItem, "Metal2Color", nRoll2); + DestroyObject(oItem); + oNewItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST)); + } + // All other items. + else + { + int nSlot; + // Get max models and inventory slot. + int nMaxModel = GetMaxSimpleItemNumber(oItem, nBaseItemType); + if(nBaseItemType == BASE_ITEM_CLOAK) nSlot = INVENTORY_SLOT_CLOAK; + else if(nBaseItemType == BASE_ITEM_HELMET) nSlot = INVENTORY_SLOT_HEAD; + else if(nBaseItemType == BASE_ITEM_LARGESHIELD || nBaseItemType == BASE_ITEM_SMALLSHIELD || + nBaseItemType == BASE_ITEM_TOWERSHIELD) nSlot = INVENTORY_SLOT_LEFTHAND; + int nRoll = Random(nMaxModel) + 1; + int nModel = GetSimpleItemNumber(oItem, nRoll, nBaseItemType); + json jItem = ObjectToJson(oItem, TRUE); + jItem = GffReplaceByte(jItem, "ModelPart1", nModel); + jItem = GffReplaceWord(jItem, "xModelPart1", nModel); + if (nBaseItemType == BASE_ITEM_CLOAK || nBaseItemType == BASE_ITEM_HELMET) + { + jItem = GffReplaceByte(jItem, "Cloth1Color", Random(175) + 1); + jItem = GffReplaceByte(jItem, "Cloth2Color", Random(175) + 1); + jItem = GffReplaceByte(jItem, "Leather1Color", Random(175) + 1); + jItem = GffReplaceByte(jItem, "Leather2Color", Random(175) + 1); + jItem = GffReplaceByte(jItem, "Metal1Color", Random(175) + 1); + jItem = GffReplaceByte(jItem, "Metal2Color", Random(175) + 1); + } + DestroyObject(oItem); + oNewItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + AssignCommand(oTarget, ActionEquipItem(oNewItem, nSlot)); + } + return oNewItem; +} +object GetSelectedItem(object oTarget, int nItemSelected) +{ + if(nItemSelected == 0) return GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget); + else if(nItemSelected == 1) return GetItemInSlot(INVENTORY_SLOT_CLOAK, oTarget); + else if(nItemSelected == 2) return GetItemInSlot(INVENTORY_SLOT_HEAD, oTarget); + else if(nItemSelected == 3) return GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + else if(nItemSelected == 4) return GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget); + return OBJECT_INVALID; +} +void CancelCraftedItem(object oPC, object oTarget) +{ + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + object oItem = GetSelectedItem(oTarget, nItemSelected); + object oOriginalItem = GetLocalObject(oPC, CRAFT_ORIGINAL_ITEM); + if(oOriginalItem != OBJECT_INVALID) + { + DestroyObject(oItem); + int nSlot = GetItemSelectedEquipSlot(nItemSelected); + // Give item Backup to Player + oOriginalItem = CopyItem(oOriginalItem, oTarget, TRUE); + DelayCommand(0.2f, AssignCommand (oTarget, ActionEquipItem(oOriginalItem, nSlot))); + DeleteLocalObject(oPC, CRAFT_ORIGINAL_ITEM); + } +} +// Gets the colorId from a image of the color pallet. +// Thanks Zunath for the base code. +int GetColorPalletId(object oPC, int nToken) +{ + float fScale = IntToFloat(GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_SCALE)) / 100.0f; + json jPayload = NuiGetEventPayload(); + json jMousePosition = JsonObjectGet(jPayload, "mouse_pos"); + json jX = JsonObjectGet(jMousePosition, "x"); + json jY = JsonObjectGet(jMousePosition, "y"); + float fX = StringToFloat(JsonDump (jX)); + float fY = StringToFloat(JsonDump (jY)); + float fCellSize = 20.0f * fScale; + int nCellX = FloatToInt(fX / fCellSize); + int nCellY = FloatToInt(fY / fCellSize); + if(nCellX < 0) nCellX = 0; + else if (nCellX > 16) nCellX = 16; + if(nCellY < 0) nCellY = 0; + else if(nCellY > 11) nCellY = 11; + NuiSetBind(oPC, nToken, "color_pallet_pointer", NuiRect(IntToFloat(nCellX * 20), IntToFloat(nCellY * 20), 20.0, 20.0)); + return nCellX + nCellY * 16; +} +void SetColorPalletPointer(object oPC, int nToken, object oItem) +{ + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + int nColor; + if(!JsonGetInt(NuiGetBind(oPC, nToken, "btn_all_color"))) + { + int nModelSelected = GetArmorModelSelected(oPC); + if(!JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR))) + { + // Note: Right Thigh and Left Thigh are backwards so this fixes that! + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected--; + else nModelSelected++; + } + int nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex); + } + else nColor = 255; + if(nColor == 255) nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected); + float fPointX = IntToFloat((nColor - ((nColor / 16) * 16)) * 20); + float fPointY = IntToFloat((nColor / 16) * 20); + NuiSetBind(oPC, nToken, "color_pallet_pointer", NuiRect(fPointX, fPointY, 20.0, 20.0)); +} +void LockItemInCraftingWindow(object oPC, object oItem, object oTarget, int nToken) +{ + NuiSetBind(oPC, nToken, "item_combo_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_cancel_label", JsonString("Cancel")); + NuiSetBind(oPC, nToken, "btn_cancel_tooltip", JsonString(" Revert back to the original items appearance")); + NuiSetBind(oPC, nToken, "btn_save_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_select_target_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_info_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_wardrobe_event", JsonBool(FALSE)); + // Make sure the item information window is closed. + nToken = NuiFindWindow(oPC, "craft_item_nui"); + if(nToken) NuiDestroy(oPC, nToken); +} +void ClearItemInCraftingWindow(object oPC, object oItem, int nToken) +{ + NuiSetBind(oPC, nToken, "btn_save_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "item_combo_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_select_target_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_info_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_wardrobe_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cancel_label", JsonString("Exit")); + NuiSetBind(oPC, nToken, "btn_cancel_tooltip", JsonString(" Exit the crafting menu")); + if(ai_GetIsWeapon(oItem)) + { + SetLocalInt(oPC, AI_NO_NUI_SAVE, TRUE); + NuiSetBind(oPC, nToken, "model_combo_selected", JsonInt(0)); + DelayCommand(1.0, DeleteLocalInt(oPC, AI_NO_NUI_SAVE)); + } +} +void SaveCraftedItem(object oPC, object oTarget, int nToken) +{ + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + object oItem = GetSelectedItem(oTarget, nItemSelected); + ClearItemInCraftingWindow(oPC, oItem, nToken); + DestroyObject(GetLocalObject(oPC, CRAFT_ORIGINAL_ITEM)); + DeleteLocalObject(oPC, CRAFT_ORIGINAL_ITEM); +} +int CanCraftItem(object oPC, object oItem, int nToken, int bPasteCheck = FALSE) +{ + // Plot items cannot be changed. + if(GetPlotFlag(oItem)) + { + ai_SendMessages(GetName(oItem) + "is a plot item and its appearance cannot be changed!", AI_COLOR_RED, oPC); + return FALSE; + } + // Cannot change temorary enchanted items. + if(CheckForTemporaryItemProperty(oItem)) + { + ai_SendMessages(GetName(oItem) + " cannot be altered while it has a temporary enchantment.", AI_COLOR_RED, oPC); + return FALSE; + } + // Do special paste checks. + if (bPasteCheck) + { + int nOldItemType = GetLocalInt (oPC, CRAFT_COPY_ITEM_TYPE); + int nNewItemType = GetBaseItemType(oItem); + if(nNewItemType == BASE_ITEM_ARMOR) + { + if(GetLocalInt (oPC, CRAFT_ARMOR_AC) != ai_GetArmorBonus(oItem)) + { + ai_SendMessages("The armor you are trying to paste to is not the same type as the copy!", AI_COLOR_RED, oPC); + return FALSE; + } + } + else if(nOldItemType != nNewItemType) + { + string sOldBaseItem = GetStringByStrRef(StringToInt(Get2DAString ("baseitems", "Name", nOldItemType))); + string sNewBaseItem = GetStringByStrRef(StringToInt(Get2DAString ("baseitems", "Name", nNewItemType))); + ai_SendMessages("You copied a " + sOldBaseItem + " and are trying to paste to a " + sNewBaseItem + "!", AI_COLOR_RED, oPC); + return FALSE; + } + } + if(GetLocalObject(oPC, CRAFT_ORIGINAL_ITEM) == OBJECT_INVALID) + { + object oBuildContainer = GetObjectByTag(CRAFT_CONTAINER); + if(!GetIsObjectValid(oBuildContainer)) + { + vector vPosition = GetPositionFromLocation(GetLocation(oPC)); + vPosition.z = vPosition.z -2.0; + location lLocation = Location(GetArea(oPC), vPosition, 0.0); + oBuildContainer = CreateObject(OBJECT_TYPE_PLACEABLE, CRAFT_TEMPLATE, lLocation, FALSE, CRAFT_CONTAINER); + //SetObjectVisualTransform(oBuildContainer, OBJECT_VISUAL_TRANSFORM_TRANSLATE_Z, -5.0); + } + object oBackup = CopyItem(oItem, oBuildContainer, TRUE); + // Save the original item to the PC. + SetLocalObject(oPC, CRAFT_ORIGINAL_ITEM, oBackup); + } + return TRUE; +} +void RemoveTagedEffects(object oCreature, string sEffectTag) +{ + //Search for the effect. + //Debug ("0i_effects", "578", "RemoveTagedEffects: " + sEffectTag); + effect eEffect = GetFirstEffect(oCreature); + while (GetIsEffectValid(eEffect)) + { + //Debug ("0i_effects", "582", "Effect Tag: " + GetEffectTag (eEffect)); + if (GetEffectTag(eEffect) == sEffectTag) RemoveEffect(oCreature, eEffect); + eEffect = GetNextEffect(oCreature); + } +} +int CheckForTemporaryItemProperty (object oItem) +{ + itemproperty ipProperty; + ipProperty = GetFirstItemProperty (oItem); + while (GetIsItemPropertyValid (ipProperty)) + { + // Check to see if the item is temporary enchanted. + if (GetItemPropertyDurationType (ipProperty) == DURATION_TYPE_TEMPORARY) return TRUE; + ipProperty = GetNextItemProperty (oItem); + } + return FALSE; +} +int GetHasPartColor(object oItem, int nPart, string sSide) +{ + json jItem = ObjectToJson(oItem); + string sPartName = "APart_"; + if(sSide == "Left") + { + // Note: Right Thigh and Left Thigh are backwards so this fixes that! + if (nPart == ITEM_APPR_ARMOR_MODEL_RTHIGH) nPart--; + else nPart++; + } + sPartName += IntToString(nPart) + "_Col_"; + int nPartColor = JsonGetInt(GffGetByte(jItem, sPartName + "0")); + nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "1")); + nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "2")); + nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "3")); + nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "4")); + nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "5")); + //SendMessageToPC(GetFirstPC(), "sPartName: " + sPartName + " nPartColor: " + IntToString(nPartColor)); + return nPartColor; +} +void SetModelNumberText(object oPC, object oTarget, int nToken) +{ + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + int nItem = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + object oItem = GetSelectedItem(oTarget, nItem); + int nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MODEL_SELECTION)); + string sModelTop, sModelMiddle, sModelBottom; + // Model Group + if (ai_GetIsWeapon (oItem)) + { + int nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, 0); + int nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, 0); + int nModelNumber = (nModel * 10) + nColor; + sModelTop = IntToString(nModelNumber); + nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, 1); + nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, 1); + nModelNumber = (nModel * 10) + nColor; + sModelMiddle = IntToString(nModelNumber); + nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, 2); + nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, 2); + nModelNumber = (nModel * 10) + nColor; + sModelBottom = IntToString(nModelNumber); + NuiSetBind(oPC, nToken, "top_title_label", JsonString("Top")); + //NuiSetBind(oPC, nToken, "txt_model_number_t_enable", JsonBool(TRUE)); + //NuiSetBindWatch(oPC, nToken, "txt_model_number_t", TRUE); + NuiSetBind(oPC, nToken, "txt_model_name_t", JsonString(sModelTop)); + NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Middle")); + //NuiSetBind(oPC, nToken, "txt_model_number_m_enable", JsonBool(TRUE)); + //NuiSetBindWatch(oPC, nToken, "txt_model_number_m", TRUE); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelMiddle)); + NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("Bottom")); + //NuiSetBind(oPC, nToken, "txt_model_number_b_enable", JsonBool(TRUE)); + //NuiSetBindWatch(oPC, nToken, "txt_model_number_b", TRUE); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(sModelBottom)); + NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(TRUE)); + } + // Armor and clothing + if(nItem == 0) + { + nSelected = GetArmorModelSelected(oPC); + // These models only have one side so make sure we are not linked. + if (nSelected == ITEM_APPR_ARMOR_MODEL_NECK || + nSelected == ITEM_APPR_ARMOR_MODEL_TORSO || + nSelected == ITEM_APPR_ARMOR_MODEL_BELT || + nSelected == ITEM_APPR_ARMOR_MODEL_PELVIS || + nSelected == ITEM_APPR_ARMOR_MODEL_ROBE) + { + sModelMiddle = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nSelected)); + NuiSetBind(oPC, nToken, "top_title_label", JsonString("")); + //NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "txt_model_name_t", JsonString("")); + NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Model")); + //NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelMiddle)); + NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("")); + //NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString("")); + NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(FALSE)); + } + else + { + sModelTop = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nSelected)); + if(nSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nSelected--; + else nSelected++; + sModelBottom = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nSelected)); + NuiSetBind(oPC, nToken, "top_title_label", JsonString("Right")); + //NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString(sModelTop)); + NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Right & Left")); + //NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelTop)); + NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("Left")); + //NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(sModelBottom)); + NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(TRUE)); + } + } + // Cloaks and Helmets. + else + { + sModelMiddle = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0)); + NuiSetBind(oPC, nToken, "top_title_label", JsonString("")); + //NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString("")); + NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(FALSE)); + //NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelMiddle)); + NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Model")); + NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE)); + //NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString("")); + NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("")); + NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(FALSE)); + } + // Color Group + if(ai_GetIsWeapon(oItem) || ai_GetIsShield(oItem)) + { + // Need to disable the color widgets. + // Row 511 + NuiSetBind(oPC, nToken, "color_pallet_image", JsonString("gui_pal_tattoo")); + NuiSetBind(oPC, nToken, "color_pallet_image_event", JsonBool(FALSE)); + // Row 512 - Label Part to Color + // Row 5l3 + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(FALSE)); + // Row 514 - Label Part Color to Reset + // Row 515 + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE)); + // Row 516 - Label Material to Color + // Row 517 + NuiSetBind(oPC, nToken, "btn_material_0", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_material_2", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_material_4", JsonBool(FALSE)); + // Row 518 + NuiSetBind(oPC, nToken, "btn_material_1", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_material_3", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_material_5", JsonBool(FALSE)); + SetMaterialButtons(oPC, nToken, -1); + } + // Armor and clothing + else if(nItem == 0) + { + // Row 511 + string sColorPallet = GetLocalString(oPC, CRAFT_COLOR_PALLET); + if(sColorPallet == "") sColorPallet = "gui_pal_tattoo"; + NuiSetBind(oPC, nToken, "color_pallet_image", JsonString(sColorPallet)); + NuiSetBind(oPC, nToken, "color_pallet_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "color_pallet_tooltip", JsonString(" Select a color or use the mouse wheel")); + NuiSetBindWatch(oPC, nToken, "txt_color_l", TRUE); + int nSelectedRight, nSelectedAll, nSelectedLeft; + int nModelSelected = GetArmorModelSelected(oPC); + int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + string sColorAll = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected)); + // These models only have one side so make sure we are not linked. + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_NECK || + nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO || + nModelSelected == ITEM_APPR_ARMOR_MODEL_BELT || + nModelSelected == ITEM_APPR_ARMOR_MODEL_PELVIS || + nModelSelected == ITEM_APPR_ARMOR_MODEL_ROBE) + { + // Row 512 - Label Part to Color + // Row 5l3 + nSelectedRight = JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR)); + nSelectedAll = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ALL_COLOR)); + if(!nSelectedRight && !nSelectedAll) + { + nSelectedAll = TRUE; + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonBool(TRUE)); + jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonBool(FALSE)); + } + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(nSelectedAll)); + NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(FALSE)); + // Row 514 - Label Part Color to Reset + // Row 5l5 + nSelectedRight = GetHasPartColor(oItem, nModelSelected, "Right"); + nSelectedAll = nSelectedRight; + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(nSelectedAll)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE)); + } + else + { + // Row 511 + string sColorPallet = GetLocalString(oPC, CRAFT_COLOR_PALLET); + if(sColorPallet == "") sColorPallet = "gui_pal_tattoo"; + NuiSetBind(oPC, nToken, "color_pallet_image", JsonString(sColorPallet)); + NuiSetBind(oPC, nToken, "color_pallet_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "color_pallet_tooltip", JsonString(" Select a color or use the mouse wheel")); + // Row 512 - Label Part to Color + // Row 5l3 + nSelectedRight = JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR)); + nSelectedAll = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ALL_COLOR)); + nSelectedLeft = JsonGetInt(JsonObjectGet(jCraft, CRAFT_LEFT_PART_COLOR)); + if(!nSelectedRight && !nSelectedAll && !nSelectedLeft) + { + nSelectedAll = TRUE; + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonBool(TRUE)); + } + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(nSelectedAll)); + NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(nSelectedLeft)); + NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(TRUE)); + // Row 514 - Label Part Color to Reset + // Row 5l5 + nSelectedRight = GetHasPartColor(oItem, nModelSelected, "Right"); + nSelectedLeft = GetHasPartColor(oItem, nModelSelected, "Left"); + nSelectedAll = nSelectedRight || nSelectedLeft; + //SendMessageToPC(oPC, "nSelectedRight: " + IntToString(nSelectedRight) + + // " nSelectedLeft: " + IntToString(nSelectedLeft)); + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(nSelectedAll)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(nSelectedLeft)); + // Row 516 - Label Material to Color + // Row 517 & 518 + nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + SetMaterialButtons(oPC, nToken, nSelected); + } + SetLocalJson(oPC, CRAFT_JSON, jCraft); + } + // Cloaks and Helmets. + else + { + // Row 512 - Label Part to Color + // Row 5l3 + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(FALSE)); + // Row 514 - Label Part Color to Reset + // Row 5l5 + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(FALSE)); + //NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(FALSE)); + // Row 516 - Label Material to Color + // Row 517 & 518 + nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + SetMaterialButtons(oPC, nToken, nSelected); + } +} +void SetMaterialButtons(object oPC, int nToken, int nMaterial) +{ + int nIndex, bBool, bUseable; + string sIndex; + if(nMaterial > -1) bUseable = TRUE; + for(nIndex = 0;nIndex < 6;nIndex++) + { + if(nIndex == nMaterial) bBool = TRUE; + else bBool = FALSE; + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_material_" + sIndex + "_event", JsonBool(bUseable)); + NuiSetBind(oPC, nToken, "btn_material_" + sIndex, JsonBool(bBool)); + } +} +void CreateItemGUIPanel(object oPC, object oItem) +{ + // Row 1 (Name)************************************************************* 73 + json jRow = CreateLabel(JsonArray(), "Name:", "lbl_name_title", 50.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateTextEditBox (jRow, "name_placeholder", "txt_item_name", 60, FALSE, 325.0f, 20.0f); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 (Tag)************************************************************** 101 + jRow = CreateLabel(JsonArray(), "Tag:", "lbl_tag_title", 50.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateTextEditBox(jRow, "name_placeholder", "txt_item_tag", 60, FALSE, 325.0f, 20.0f); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 2 (ResRef)*********************************************************** 129 + jRow = CreateLabel(JsonArray(), "ResRef:", "lbl_resref_title", 50.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateTextEditBox(jRow, "name_placeholder", "txt_item_resref", 60, FALSE, 325.0f, 20.0f); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 (Base Item/Weight)************************************************* 157 + jRow = CreateLabel(JsonArray(), "Base Item: ", "lbl_baseitem_title", 75.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateLabel(jRow, "", "lbl_baseitem", 145.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateLabel(jRow, "Weight: ", "lbl_weight_title", 55.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateLabel(jRow, "", "lbl_weight", 65.0f, 20.0f, NUI_HALIGN_LEFT); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 (Gold Value)******************************************************* 185 + jRow = CreateLabel(JsonArray(), "Gold Value: ", "lbl_gold_title", 85.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateLabel(jRow, "", "lbl_gold_value", 135.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateLabel(jRow, "Minimum Level: ", "lbl_min_lvl_title", 110.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateLabel(jRow, "", "lbl_min_lvl", 20.0f, 20.0f, NUI_HALIGN_LEFT); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5 (Plot/Stolen)****************************************************** 213 + jRow = CreateCheckBox(JsonArray(), " Plot", "chbx_plot", 110.0, 20.0f, "chbx_plot_tooltip"); + jRow = CreateCheckBox(jRow, " Stolen", "chbx_stolen", 110.0, 20.0f, "chbx_stolen_tooltip"); + jRow = CreateCheckBox(jRow, " Cursed", "chbx_cursed", 110.0, 20.0f, "chbx_cursed_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 6 (Identified/Droppable)********************************************* 269 + jRow = CreateCheckBox(JsonArray(), " Identified", "chbx_identified", 110.0, 25.0f, "chbx_identified_tooltip"); + jRow = CreateCheckBox(jRow, " Droppable", "chbx_droppable", 110.0, 25.0f, "chbx_droppable_tooltip"); + jRow = CreateButton(jRow, "Save as UTI", "btn_save_uti", 110.0, 25.0, -1.0, "btn_save_uti_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 9 (Stack/Variables/Destroy/Charges)********************************** 307 + jRow = CreateTextEditBox(JsonArray(), "name_placeholder", "txt_stack", 4, FALSE, 35.0f, 25.0f); + jRow = CreateLabel(jRow, " Stack", "lbl_stack_title", 72.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateTextEditBox(jRow, "name_placeholder", "txt_charges", 4, FALSE, 40.0f, 25.0f); + jRow = CreateLabel(jRow, " Charges", "lbl_charges_title", 68.0f, 25.0f, NUI_HALIGN_LEFT); + jRow = CreateButtonSelect(jRow, "Destroy", "btn_destroy", 110.0, 25.0, "btn_destroy_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 11 (Description)***************************************************** 558 + jRow = CreateTextEditBox(JsonArray(), "desc_placeholder", "txt_desc", 1000, TRUE, 375.0, 243.0, "txt_desc_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + float fHeight = 566.0; + // Row 12 (Item Base Description)* ***************************************** 158 + int nBaseItemType = GetBaseItemType(oItem); + float fWeight; + string sBaseItemDesc; + if(nBaseItemType == BASE_ITEM_ARMOR) + { + int nArmorAC = ai_GetArmorBonus(oItem); + sBaseItemDesc = GetStringByStrRef(StringToInt(Get2DAString("armor", "BASEITEMSTATREF", nArmorAC))); + fWeight = StringToFloat(Get2DAString("armor", "WEIGHT", nArmorAC)); + } + else + { + sBaseItemDesc = GetStringByStrRef(StringToInt(Get2DAString("baseitems", "BaseItemStatRef", nBaseItemType))); + fWeight = StringToFloat(Get2DAString("baseitems", "TenthLBS", nBaseItemType)); + } + if(sBaseItemDesc == "Bad Strref") sBaseItemDesc = ""; + if(sBaseItemDesc != "") + { + jRow = CreateTextBox(JsonArray(), "txt_base_desc", 375.0, 150.0, FALSE, NUI_SCROLLBARS_NONE, "txt_base_desc_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 158.0; + } + // Set the layout of the window. + json jLayout = NuiCol (jCol); + object oOwner = GetItemPossessor(oItem); + string sName = ai_StripColorCodes (GetName(oOwner)); + int nToken = SetWindow (oPC, jLayout, "craft_item_nui", sName + "'s item menu", + -1.0, -1.0, 400.0, fHeight, FALSE, FALSE, TRUE, FALSE, TRUE, "pe_crafting"); + // Set the buttons to show events to 0e_window. + NuiSetBind(oPC, nToken, "txt_item_name_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_item_name", JsonString(GetName(oItem))); + NuiSetBindWatch(oPC, nToken, "txt_item_name", TRUE); + NuiSetBind(oPC, nToken, "txt_item_tag_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_item_tag", JsonString(GetTag(oItem))); + NuiSetBindWatch(oPC, nToken, "txt_item_tag", TRUE); + NuiSetBind(oPC, nToken, "txt_item_resref_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_item_resref", JsonString(GetResRef(oItem))); + NuiSetBindWatch(oPC, nToken, "txt_item_resref", TRUE); + string sValue = GetStringByStrRef(StringToInt(Get2DAString("baseitems", "Name", nBaseItemType))); + NuiSetBind(oPC, nToken, "lbl_baseitem_label", JsonString(sValue)); + sValue = FloatToString(fWeight * 0.1f, 0, 1); + NuiSetBind(oPC, nToken, "lbl_weight_label", JsonString(sValue)); + int nValue = GetGoldPieceValue(oItem); + NuiSetBind (oPC, nToken, "lbl_gold_value_label", JsonString(IntToString(nValue))); + sValue = IntToString (ai_GetMinimumEquipLevel(oItem)); + NuiSetBind(oPC, nToken, "lbl_min_lvl_label", JsonString (sValue)); + nValue = GetPlotFlag (oItem); + NuiSetBind(oPC, nToken, "chbx_plot_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_plot_check", JsonBool(nValue)); + NuiSetBindWatch(oPC, nToken, "chbx_plot_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_plot_tooltip", JsonString (" Plot items cannot be sold or destroyed.")); + nValue = GetStolenFlag(oItem); + NuiSetBind(oPC, nToken, "chbx_stolen_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_stolen_check", JsonBool(nValue)); + NuiSetBindWatch (oPC, nToken, "chbx_stolen_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_stolen_tooltip", JsonString (" Stolen items cannot be sold to some stores.")); + nValue = GetItemCursedFlag(oItem); + NuiSetBind(oPC, nToken, "chbx_cursed_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_cursed_check", JsonBool(nValue)); + NuiSetBindWatch (oPC, nToken, "chbx_cursed_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cursed_tooltip", JsonString (" Cursed items cannot be dropped or sold.")); + nValue = GetIdentified (oItem); + NuiSetBind(oPC, nToken, "chbx_identified_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_identified_check", JsonBool(nValue)); + NuiSetBindWatch(oPC, nToken, "chbx_identified_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_identified_tooltip", JsonString (" Close inventory and open again to refresh identified state.")); + nValue = GetDroppableFlag(oItem); + NuiSetBind(oPC, nToken, "chbx_droppable_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_droppable_check", JsonBool(nValue)); + NuiSetBindWatch(oPC, nToken, "chbx_droppable_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_droppable_tooltip", JsonString (" Droppable items only work on death of an NPC.")); + NuiSetBind(oPC, nToken, "btn_save_uti_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_save_uti_tooltip", JsonString (" Saves item to a UTI file. Update will be used in the game.")); + nValue = GetItemStackSize (oItem); + NuiSetBind(oPC, nToken, "txt_stack_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "txt_stack", JsonString(IntToString (nValue))); + NuiSetBindWatch (oPC, nToken, "txt_stack", TRUE); + nValue = GetItemCharges (oItem); + NuiSetBind(oPC, nToken, "txt_charges_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "txt_charges", JsonString(IntToString (nValue))); + NuiSetBindWatch (oPC, nToken, "txt_charges", TRUE); + NuiSetBind(oPC, nToken, "btn_destroy_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_destroy_tooltip", JsonString(" Destroys the item permanently! Must click twice to destroy the item.")); + // Description + NuiSetBind(oPC, nToken, "txt_desc_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "txt_desc", TRUE); + NuiSetBind(oPC, nToken, "txt_desc_tooltip", JsonString (" Color codes can be used!")); + NuiSetBind(oPC, nToken, "txt_desc", JsonString(GetDescription(oItem))); + // Base Item Description + NuiSetBind(oPC, nToken, "txt_base_desc_event", JsonBool(TRUE)); + //NuiSetBind(oPC, nToken, "txt_desc_tooltip", JsonString ("Color codes can be used!")); + if(sBaseItemDesc != "") NuiSetBind(oPC, nToken, "txt_base_desc", JsonString(sBaseItemDesc)); +} +void CraftItemInfoEvents(object oPC, int nToken) +{ + string sEvent = NuiGetEventType(); + // We don't use and it causes error windows to go off! Return early! + if(sEvent == "mouseup") return; + string sElem = NuiGetEventElement(); + int nIndex = NuiGetEventArrayIndex(); + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + //SendMessageToPC(oPC, "0e_crafting, 1961, sElem: " + sElem + " sEvent: " + sEvent); + object oTarget = GetLocalObject(oPC, CRAFT_TARGET); + if(oTarget == OBJECT_INVALID) oTarget = oPC; + // Get the item we are crafting. + int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + object oItem = GetLocalObject(oPC, "CRAFT_INFO_ITEM"); + if(sEvent == "click") + { + if(sElem == "btn_destroy") + { + if(!JsonGetInt(NuiGetBind(oPC, nToken, "btn_destroy"))) + { + if(!GetPlotFlag(oItem)) + { + DestroyObject(oItem); + ai_SendMessages(GetName(oItem) + " has been permanently destroyed!", AI_COLOR_RED, oPC); + NuiDestroy(oPC, nToken); + } + else + { + ai_SendMessages("The plot flag must be removed before you can destroy " + GetName(oItem) + "!", AI_COLOR_YELLOW, oPC); + } + } + else + { + ai_SendMessages("Click Destroy button again to destroy " + GetName(oItem) + "!", AI_COLOR_RED, oPC); + } + } + // Allows saving the item as a UTI! + else if(sElem == "btn_save_uti") + { + json jItem = ObjectToJson(oItem); + string sResRef = JsonGetString(NuiGetBind(oPC, nToken, "txt_item_resref")); + sResRef = ai_RemoveIllegalCharacters(sResRef); + if(sResRef == "") ai_SendMessages(GetName(oItem) + " has not been saved! ResRef does not have a value.", AI_COLOR_RED, oPC); + else + { + JsonToTemplate(jItem, sResRef, RESTYPE_UTI); + ai_SendMessages(GetName(oItem) + " has been saved as " + sResRef + ".uti in your Neverwinter Nights Temp directory.", AI_COLOR_GREEN, oPC); + ai_SendMessages("This temp directory will be removed when the game is left.", AI_COLOR_GREEN, oPC); + } + } + } + if(sEvent == "watch") + { + // Changing the name needs to be before the cooldown. + if(sElem == "txt_item_name") + { + string sName = JsonGetString(NuiGetBind(oPC, nToken, "txt_item_name")); + SetName(oItem, sName); + int nToken2 = NuiFindWindow(oPC, "crafting_nui"); + if(nToken2) NuiSetBind(oPC, nToken2, "txt_item_name", JsonString(sName)); + } + else if(sElem == "txt_item_tag") + { + string sTag = JsonGetString(NuiGetBind(oPC, nToken, "txt_item_tag")); + SetTag(oItem, sTag); + } + else if(sElem == "txt_stack") + { + int nSize = StringToInt(JsonGetString(NuiGetBind(oPC, nToken, "txt_stack"))); + int nBaseItemType = GetBaseItemType(oItem); + string sMaxSize = Get2DAString("baseitems", "Stacking", nBaseItemType); + if(nSize > StringToInt(sMaxSize)) + { + ai_SendMessages("The maximum stack for this item type is " + sMaxSize + ".", AI_COLOR_RED, oPC); + NuiSetBind(oPC, nToken, "txt_stack", JsonString(sMaxSize)); + } + if(nSize != 0) SetItemStackSize(oItem, nSize); + } + else if(sElem == "txt_charges") + { + int nCharges = StringToInt(JsonGetString(NuiGetBind(oPC, nToken, "txt_charges"))); + if(nCharges > 250) + { + ai_SendMessages("The maximum charges for this item type is 250.", AI_COLOR_RED, oPC); + NuiSetBind(oPC, nToken, "txt_charges", JsonString("250")); + } + if(nCharges != 0) SetItemCharges(oItem, nCharges); + } + else if(sElem == "chbx_plot_check") + { + int nValue = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + SetPlotFlag(oItem, nValue); + } + else if(sElem == "chbx_stolen_check") + { + int nValue = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + SetStolenFlag(oItem, nValue); + } + else if(sElem == "chbx_cursed_check") + { + int nValue = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + SetItemCursedFlag(oItem, nValue); + } + else if(sElem == "chbx_identified_check") + { + int nValue = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + SetIdentified(oItem, nValue); + } + else if(sElem == "chbx_droppable_check") + { + int nValue = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + SetDroppableFlag(oItem, nValue); + } + } +} +/*void CreateDresserGUIPanel(object oPC, object oTarget) +{ +} + diff --git a/src/module/nss/pe_debug.nss b/src/module/nss/pe_debug.nss new file mode 100644 index 0000000..5b6ad1a --- /dev/null +++ b/src/module/nss/pe_debug.nss @@ -0,0 +1,900 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: pe_debug + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + PEPS Plugin to allow use of special Debug scripts +/*////////////////////////////////////////////////////////////////////////////// +#include "0i_main" +#include "0i_module" +#include "0i_menus" +//#include "prc_inc_eventhk" +// Gets a variable from oTarget, if oTarget is OBJECT_INVALID then +// it will get the variable from the Module and Area. +void debug_GetObjectVariable(object oPC, object oTarget, string sDesc = ""); +// Lists the variables from oTarget to the screen. +void debug_ListObjectVariables(object oPC, object oTarget); +// Force event script change to default for oCreature. +void ai_ForceAssociateEventScriptsToDefault(object oPC, object oCreature); +// Reverts event script change from default for oCreature. +void ai_RevertAssociateEventScriptsToDefault(object oPC, object oCreature); +void main() +{ + // Get the last player to use targeting mode + object oPC = GetLastPlayerToSelectTarget(); + string sTargetMode = GetLocalString(oPC, AI_TARGET_MODE); + if(oPC == OBJECT_SELF && sTargetMode != "") + { + // Get the targeting mode data + object oTarget = GetTargetingModeSelectedObject(); + vector vTarget = GetTargetingModeSelectedPosition(); + location lLocation = Location(GetArea(oPC), vTarget, GetFacing(oPC)); + object oObject = GetLocalObject(oPC, "AI_TARGET_OBJECT"); + // If the user manually exited targeting mode without selecting a target, return + if(!GetIsObjectValid(oTarget) && vTarget == Vector()) + { + return; + } + // Targeting code here. + if(sTargetMode == "DEBUG_CREATURE") + { + object oModule = GetModule(); + string sDebugName = GetName(oTarget); + SetLocalString(oModule, AI_RULE_DEBUG_CREATURE, sDebugName); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, AI_RULE_DEBUG_CREATURE, JsonString(sDebugName)); + ai_SetCampaignDbJson("rules", jRules); + SetLocalObject(oPC, "AI_RULE_DEBUG_CREATURE_OBJECT", oTarget); + ExecuteScript("pi_debug", oPC); + } + else if(sTargetMode == "CLEAR_REPUTATION") + { + int nReputation = GetFactionAverageReputation(oTarget, oPC); + object oPCMember = GetFirstFactionMember(oPC, FALSE); + while(GetIsObjectValid(oPCMember)) + { + ClearPersonalReputation(oPCMember, oTarget); + oPCMember = GetNextFactionMember(oPC, FALSE); + } + ai_SendMessages("Your reputation with " + GetName(oTarget) + " has been set to neutral.", AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "SET_REPUTATION") + { + SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 50, oTarget); + SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 50, oTarget); + SetStandardFactionReputation(STANDARD_FACTION_HOSTILE, 50, oTarget); + SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 50, oTarget); + ai_SendMessages(GetName(oTarget) + " has been set to a neutral reputation.", AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "DEBUG_INFO") + { + ai_SendMessages("Information for " + GetName(oTarget), AI_COLOR_WHITE, oPC); + ai_SendMessages("ResRef: " + GetResRef(oTarget), AI_COLOR_GREEN, oPC); + ai_SendMessages("Tag: " + GetTag(oTarget), AI_COLOR_ORANGE, oPC); + ai_SendMessages("UUID: " + GetObjectUUID(oTarget), AI_COLOR_LIGHT_MAGENTA, oPC); + ai_SendMessages("Faction Commoner: " + IntToString(GetStandardFactionReputation(STANDARD_FACTION_COMMONER, oTarget)), AI_COLOR_GREEN, oPC); + ai_SendMessages("Faction Defender: " + IntToString(GetStandardFactionReputation(STANDARD_FACTION_DEFENDER, oTarget)), AI_COLOR_GREEN, oPC); + ai_SendMessages("Faction Merchant: " + IntToString(GetStandardFactionReputation(STANDARD_FACTION_MERCHANT, oTarget)), AI_COLOR_GREEN, oPC); + ai_SendMessages("Faction Hostile: " + IntToString(GetStandardFactionReputation(STANDARD_FACTION_HOSTILE, oTarget)), AI_COLOR_RED, oPC); + int nObjectType = GetObjectType(oTarget); + if(nObjectType == OBJECT_TYPE_CREATURE) + { + json jObject = ObjectToJson(oTarget); + string sConversation = JsonGetString(GffGetResRef(jObject, "Conversation")); + ai_SendMessages("Conversation: " + sConversation, AI_COLOR_CYAN, oPC); + SendMessageToPC(oPC, "Creature Event Scripts:"); + string sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_HEARTBEAT SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_NOTICE); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_NOTICE SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_END_COMBATROUND SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DIALOGUE); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DIALOGUE SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_MELEE_ATTACKED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DAMAGED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DAMAGED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DEATH); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DEATH SCRIPT: " + sScript); + sScript = GetLocalString(oTarget, "AI_ON_DEATH"); + if(sScript != "") + { + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DEATH SECOND SCRIPT: " + sScript); + } + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DISTURBED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DISTURBED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_SPAWN_IN SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_RESTED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_RESTED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_SPELLCASTAT SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_BLOCKED_BY_DOOR SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_USER_DEFINED_EVENT SCRIPT: " + sScript); + } + else if(nObjectType == OBJECT_TYPE_DOOR) + { + SendMessageToPC(oPC, "Door Event Scripts:"); + string sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_CLICKED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_CLICKED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_CLOSE); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_CLOSED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_DAMAGE); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DAMAGE SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_DEATH); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DEATH SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_DIALOGUE); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DIALOGUE SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_DISARM); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DISARM SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_FAIL_TO_OPEN); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_FAIL_TO_OPEN SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_HEARTBEAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_HEARTBEAT SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_LOCK); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_LOCK SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_MELEE_ATTACKED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_MELEE_ATTACKED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_OPEN); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_OPEN SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_SPELLCASTAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_SPELLCASTAT SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_TRAPTRIGGERED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_TRAPTRIGGERED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_UNLOCK); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_UNLOCK SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_USERDEFINED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_USERDEFINED SCRIPT: " + sScript); + } + else if(nObjectType == OBJECT_TYPE_PLACEABLE) + { + SendMessageToPC(oPC, "Placeable Event Scripts:"); + string sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_CLOSED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_CLOSED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_DAMAGED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DAMAGED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_DEATH); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DEATH SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_DIALOGUE); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DIALOGUE SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_DISARM); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DISARM SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_HEARTBEAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_HEARTBEAT SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_INVENTORYDISTURBED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_INVENTORYDISTURBED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_LEFT_CLICK); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_LEFT_CLICK SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_LOCK); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_LOCK SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_MELEEATTACKED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_MELEEATTACKED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_OPEN); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_OPEN SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_SPELLCASTAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_SPELLCASTAT SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_TRAPTRIGGERED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_TRAPTRIGGERED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_UNLOCK); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_UNLOCK SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_USED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_USED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_USER_DEFINED_EVENT SCRIPT: " + sScript); + } + else if(nObjectType == OBJECT_TYPE_TRIGGER) + { + SendMessageToPC(oPC, "Trigger Event Scripts:"); + string sScript = GetEventScript(oTarget, EVENT_SCRIPT_TRIGGER_ON_CLICKED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_CLICKED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_DISARM); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DISARM SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_HEARTBEAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_HEARTBEAT SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_TRIGGER_ON_OBJECT_ENTER); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_OBJECT_ENTER SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_TRIGGER_ON_OBJECT_EXIT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_OBJECT_EXIT SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_TRAPTRIGGERED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_TRAPTRIGGERED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_USER_DEFINED_EVENT SCRIPT: " + sScript); + } + else + { + // Area event scripts. + object oArea = GetArea(oPC); + SendMessageToPC(oPC, "Area Event Scripts:"); + string sScript = GetEventScript(oArea, EVENT_SCRIPT_AREA_ON_ENTER); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_ENTER SCRIPT: " + sScript); + sScript = GetEventScript(oArea, EVENT_SCRIPT_AREA_ON_EXIT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_EXIT SCRIPT: " + sScript); + sScript = GetEventScript(oArea, EVENT_SCRIPT_PLACEABLE_ON_HEARTBEAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_HEARTBEAT SCRIPT: " + sScript); + sScript = GetEventScript(oArea, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_USER_DEFINED_EVENT SCRIPT: " + sScript); + // Module event scripts. + object oModule = GetModule(); + SendMessageToPC(oPC, GetModuleName() + " Module Event Scripts."); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_ACQUIRE_ITEM); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_ACQUIRE_ITEM SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_ACTIVATE_ITEM); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_ACTIVATE_ITEM SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_CLIENT_ENTER); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_CLIENT_ENTER SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_CLIENT_EXIT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_CLIENT_EXIT SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_EQUIP_ITEM); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_EQUIP_ITEM SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_HEARTBEAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_HEARTBEAT SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_LOSE_ITEM); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_LOSE_ITEM SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_MODULE_LOAD); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_MODULE_LOAD SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_MODULE_START); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_MODULE_START SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_NUI_EVENT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_NUI_EVENT SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_CANCEL_CUTSCENE); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_CANCEL_CUTSCENE SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_CHAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_CHAT SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_DEATH); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_DEATH SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_DYING); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_DYING SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_GUIEVENT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_GUIEVENT SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_LEVEL_UP); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_LEVEL_UP SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_REST); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_REST SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_TARGET); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_TARGET SCRIPT: " + sScript); + sScript = GetLocalString(oModule, AI_MODULE_TARGET_EVENT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + if(sScript != "") + { + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_TARGET SECOND SCRIPT: " + sScript); + } + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_TILE_ACTION); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_TILE_ACTION SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_RESPAWN_BUTTON_PRESSED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_RESPAWN_BUTTON_PRESSED SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_UNEQUIP_ITEM); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_UNEQUIP_ITEM SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_USER_DEFINED_EVENT SCRIPT: " + sScript); + } + /* Checks PRC virtual events. See prc_inc_eventhk + int nIndex = 1; + string sEvent = GetFirstEventScript(oTarget, EVENT_VIRTUAL_ONHEARTBEAT, FALSE); + if(sEvent != "") + { + SendMessageToPC(oPC, "HB event script " + IntToString(nIndex) + ": " + sEvent); + for(nIndex = 2; nIndex < 20; nIndex++) + { + sEvent = GetNextEventScript(oTarget, EVENT_VIRTUAL_ONHEARTBEAT, FALSE); + if(sEvent == "") break; + SendMessageToPC(oPC, "HB event script " + IntToString(nIndex) + ": " + sEvent); + } + }*/ + } + else if(sTargetMode == "SET_NPC_SCRIPTS") + { + if(GetLocalString(oTarget, "AI_ON_HEARTBEAT") == "") + { + ai_ForceAssociateEventScriptsToDefault(oPC, oTarget); + } + else ai_RevertAssociateEventScriptsToDefault(oPC, oTarget); + } + else if(sTargetMode == "CLEAR_CREATURE_EVENTS") + { + ai_SendMessages("Set event scripts for " + GetName(oTarget) + " to default.", AI_COLOR_YELLOW, oPC); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_NOTICE, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DEATH, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_RESTED, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, "default"); + DeleteLocalInt(oTarget, "AI_I_AM_BEING_HEALED"); + DeleteLocalString(oTarget, "AIScript"); + ai_ClearCreatureActions(); + } + else if(sTargetMode == "DEBUG_JSON_DUMP") + { + json jObject = ObjectToJson(oTarget, TRUE); + WriteTimestampedLogEntry(GetName(oTarget) + " JsonDump: " + JsonDump(jObject, 1)); + ai_SendMessages(GetName(oTarget) + " has been dumped to the log file!", AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "DEBUG_LIST_VAR") + { + debug_ListObjectVariables(oPC, oTarget); + } + else if(sTargetMode == "DEBUG_SET_VARIABLE") + { + string sVarName = GetLocalString(oPC, "Debug_Var_Name"); + int nVarType = GetLocalInt(oPC, "Debug_Var_Type"); + if(nVarType == 0) // Int + { + string sVarValue = GetLocalString(oPC, "Debug_Var_Value"); + int nVarValue = StringToInt(sVarValue); + SetLocalInt(oTarget, sVarName, nVarValue); + ai_SendMessages(sVarName + " [Int] has been set to " + IntToString(nVarValue) + " for " + GetName(oTarget), AI_COLOR_YELLOW, oPC); + } + else if(nVarType == 1) // Float + { + string sVarValue = GetLocalString(oPC, "Debug_Var_Value"); + DeleteLocalString(oPC, "Debug_Var_Name"); + float fVarValue = StringToFloat(sVarValue); + SetLocalFloat(oTarget, sVarName, fVarValue); + ai_SendMessages(sVarName + " [Float] has been set to " + FloatToString(fVarValue, 0, 2) + " for " + GetName(oTarget), AI_COLOR_YELLOW, oPC); + } + else if(nVarType == 2) // String + { + string sVarValue = GetLocalString(oPC, "Debug_Var_Value"); + SetLocalString(oTarget, sVarName, sVarValue); + ai_SendMessages(sVarName + " [String] has been set to " + sVarValue + " for " + GetName(oTarget), AI_COLOR_YELLOW, oPC); + } + else if(nVarType == 3) // Object + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalObject(oPC, "AI_TARGET_OBJECT", oTarget); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_SET_OBJECT_VARIABLE"); + ai_SendMessages("Select an object to save to " + GetName(oTarget), AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | + OBJECT_TYPE_ITEM | OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_TRIGGER, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(nVarType == 4) // Location + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalObject(oPC, "AI_TARGET_OBJECT", oTarget); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_SET_LOCATION_VARIABLE"); + ai_SendMessages("Select a location to save to " + GetName(oTarget), AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_TILE, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + DeleteLocalString(oPC, "Debug_Var_Name"); + DeleteLocalInt(oPC, "Debug_Var_Type"); + DeleteLocalString(oPC, "Debug_Var_Value"); + } + else if(sTargetMode == "DEBUG_SET_OBJECT_VARIABLE") + { + string sVarName = GetLocalString(oPC, "Debug_Var_Name"); + SetLocalObject(oObject, sVarName, oTarget); + DeleteLocalObject(oPC, "AI_TARGET_OBJECT"); + DeleteLocalString(oPC, "Debug_Var_Name"); + ai_SendMessages(sVarName + " [Object] has been set to " + GetName(oObject) + " for " + GetName(oTarget), AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "DEBUG_SET_LOCATION_VARIABLE") + { + string sVarName = GetLocalString(oPC, "Debug_Var_Name"); + SetLocalLocation(oObject, sVarName, lLocation); + DeleteLocalObject(oPC, "AI_TARGET_OBJECT"); + DeleteLocalString(oPC, "Debug_Var_Name"); + ai_SendMessages(sVarName + " [Location] has been set to " + LocationToString(lLocation) + " for " + GetName(oTarget), AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "DEBUG_DELETE_VARIABLE") + { + string sVarName = GetLocalString(oPC, "Debug_Var_Name"); + int nVarType = GetLocalInt(oPC, "Debug_Var_Type"); + if(nVarType == 0) DeleteLocalInt(oTarget, sVarName); + else if(nVarType == 1) DeleteLocalFloat(oTarget, sVarName); + else if(nVarType == 2) DeleteLocalString(oTarget, sVarName); + else if(nVarType == 4) DeleteLocalObject(oTarget, sVarName); + else if(nVarType == 5) DeleteLocalLocation(oTarget, sVarName); + ai_SendMessages(sVarName + " has been deleted from " + GetName(oTarget), AI_COLOR_YELLOW, oPC); + DeleteLocalString(oPC, "Debug_Var_Name"); + DeleteLocalInt(oPC, "Debug_Var_Type"); + } + else if(sTargetMode == "DEBUG_GET_VARIABLE") + { + debug_GetObjectVariable(oPC, oTarget); + } + } + // Run all non-targeting code here, usually NUI events. + else + { + object oPC = NuiGetEventPlayer(); + int nToken = NuiGetEventWindow(); + string sEvent = NuiGetEventType(); + string sElem = NuiGetEventElement(); + int nIndex = NuiGetEventArrayIndex(); + //string sWndId = NuiGetWindowId(oPC, nToken); + //********************************************************************** + //if(GetLocalInt(oPC, AI_NO_NUI_SAVE)) return; + if(sEvent == "click") + { + if(sElem == "btn_npc_scripts") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "SET_NPC_SCRIPTS"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select an npc to change scripts for.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE , MOUSECURSOR_CREATE, MOUSECURSOR_NOCREATE); + } + else if(sElem == "btn_set_reputation") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "SET_REPUTATION"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select a creature to set all standard reputations to neutral.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_clear_reputation") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "CLEAR_REPUTATION"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select a creature to clear your PC's reputation with that creature's faction.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_info") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_INFO"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select an object to send it's information to the players screen.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL , MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_obj_json") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_JSON_DUMP"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select an object to dump it's json values to the log.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | + OBJECT_TYPE_ITEM | OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_TRIGGER, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_obj_var") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_LIST_VAR"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select an object to list it's variables to the player screen.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_debug_creature") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, OBJECT_SELF); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_CREATURE"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select a creature to start sending debug information to the log for.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_clear_events") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, OBJECT_SELF); + SetLocalString(oPC, AI_TARGET_MODE, "CLEAR_CREATURE_EVENTS"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select a creature to set event scripts to default.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_clear_debug") + { + object oModule = GetModule(); + SetLocalString(oModule, AI_RULE_DEBUG_CREATURE, ""); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, AI_RULE_DEBUG_CREATURE, JsonString("")); + ai_SetCampaignDbJson("rules", jRules); + DeleteLocalObject(oPC, "AI_RULE_DEBUG_CREATURE_OBJECT"); + ai_SendMessages("Creature Debug mode has been cleared.", AI_COLOR_YELLOW, oPC); + NuiDestroy(oPC, nToken); + ExecuteScript("pi_debug", oPC); + } + else if(sElem == "btn_delete_var") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + string sVarName = JsonGetString(NuiGetBind(oPC, nToken, "txt_var_name")); + SetLocalString(oPC, "Debug_Var_Name", sVarName); + SetLocalString(oPC, "Debug_Var_Value", JsonGetString(NuiGetBind(oPC, nToken, "txt_var_value"))); + SetLocalInt(oPC, "Debug_Var_Type", JsonGetInt(NuiGetBind (oPC, nToken, "cmb_var_type_selected"))); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_DELETE_VARIABLE"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select Object to delete (" + sVarName + ") variable from.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_get_var") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + string sVarName = JsonGetString(NuiGetBind(oPC, nToken, "txt_var_name")); + SetLocalString(oPC, "Debug_Var_Name", sVarName); + SetLocalString(oPC, "Debug_Var_Value", JsonGetString(NuiGetBind(oPC, nToken, "txt_var_value"))); + SetLocalInt(oPC, "Debug_Var_Type", JsonGetInt(NuiGetBind (oPC, nToken, "cmb_var_type_selected"))); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_GET_VARIABLE"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select Object to get (" + sVarName + ") variable from.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_set_var") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + string sVarName = JsonGetString(NuiGetBind(oPC, nToken, "txt_var_name")); + SetLocalString(oPC, "Debug_Var_Name", sVarName); + SetLocalString(oPC, "Debug_Var_Value", JsonGetString(NuiGetBind(oPC, nToken, "txt_var_value"))); + SetLocalInt(oPC, "Debug_Var_Type", JsonGetInt(NuiGetBind (oPC, nToken, "cmb_var_type_selected"))); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_SET_VARIABLE"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select Object to set (" + sVarName + ") variable to.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + } + if(sEvent == "watch") + { + if(sElem == "txt_var_name" || sElem == "txt_var_value" || + sElem == "cmb_var_type_selected") + { + if(JsonGetString(NuiGetBind(oPC, nToken, "txt_var_name")) != "") + { + NuiSetBind(oPC, nToken, "btn_get_var_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_delete_var_event", JsonBool(TRUE)); + if(JsonGetInt(NuiGetBind (oPC, nToken, "cmb_var_type_selected")) == 3 || // Objects + JsonGetInt(NuiGetBind (oPC, nToken, "cmb_var_type_selected")) == 4 || // Locations + JsonGetString(NuiGetBind(oPC, nToken, "txt_var_value")) != "") + { + NuiSetBind(oPC, nToken, "btn_set_var_event", JsonBool(TRUE)); + return; + } + } + else + { + NuiSetBind(oPC, nToken, "btn_get_var_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_delete_var_event", JsonBool(FALSE)); + } + NuiSetBind(oPC, nToken, "btn_set_var_event", JsonBool(FALSE)); + } + } + if(sEvent == "mousedown") + { + int nMouseButton = JsonGetInt(JsonObjectGet(NuiGetEventPayload(), "mouse_btn")); + if(nMouseButton == NUI_MOUSE_BUTTON_RIGHT) + { + if(sElem == "btn_delete_var") + { + object oModule = GetModule(); + // Set Targeting variables. + string sVarName = JsonGetString(NuiGetBind(oPC, nToken, "txt_var_name")); + int nVarType = JsonGetInt(NuiGetBind (oPC, nToken, "cmb_var_type_selected")); + if(nVarType == 0) DeleteLocalInt(oModule, sVarName); + else if(nVarType == 1) DeleteLocalFloat(oModule, sVarName); + else if(nVarType == 2) DeleteLocalString(oModule, sVarName); + else if(nVarType == 4) DeleteLocalObject(oModule, sVarName); + else if(nVarType == 5) DeleteLocalLocation(oModule, sVarName); + ai_SendMessages(sVarName + " has been deleted from the Module", AI_COLOR_YELLOW, oPC); + } + else if(sElem == "btn_get_var") + { + // Set Targeting variables. + SetLocalString(oPC, "Debug_Var_Name", JsonGetString(NuiGetBind(oPC, nToken, "txt_var_name"))); + SetLocalInt(oPC, "Debug_Var_Type", JsonGetInt(NuiGetBind (oPC, nToken, "cmb_var_type_selected"))); + debug_GetObjectVariable(oPC, GetModule(), "(Module)"); + } + else if(sElem == "btn_set_var") + { + // Set Targeting variables. + string sVarName = JsonGetString(NuiGetBind(oPC, nToken, "txt_var_name")); + string sVarValue = JsonGetString(NuiGetBind(oPC, nToken, "txt_var_value")); + int nVarType = JsonGetInt(NuiGetBind (oPC, nToken, "cmb_var_type_selected")); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_SET_VARIABLE"); + if(nVarType == 0) // Int + { + int nVarValue = StringToInt(sVarValue); + SetLocalInt(GetModule(), sVarName, nVarValue); + ai_SendMessages(sVarName + " [Int] has been set to " + IntToString(nVarValue) + " on the Module.", AI_COLOR_YELLOW, oPC); + } + else if(nVarType == 1) // Float + { + float fVarValue = StringToFloat(sVarValue); + SetLocalFloat(GetModule(), sVarName, fVarValue); + ai_SendMessages(sVarName + " [Float] has been set to " + FloatToString(fVarValue, 0, 2) + " on the Module.", AI_COLOR_YELLOW, oPC); + } + else if(nVarType == 2) // String + { + SetLocalString(GetModule(), sVarName, sVarValue); + ai_SendMessages(sVarName + " [String] has been set to " + sVarValue + " on the Module.", AI_COLOR_YELLOW, oPC); + } + else if(nVarType == 3) // Object + { + object oModule = GetModule(); + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalString(oPC, "Debug_Var_Name", sVarName); + SetLocalObject(oPC, "AI_TARGET_OBJECT", oModule); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_SET_OBJECT_VARIABLE"); + ai_SendMessages("Select an object to save to " + GetName(oModule), AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | + OBJECT_TYPE_ITEM | OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_TRIGGER, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(nVarType == 4) // Location + { + object oModule = GetModule(); + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalString(oPC, "Debug_Var_Name", sVarName); + SetLocalObject(oPC, "AI_TARGET_OBJECT", oModule); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_SET_LOCATION_VARIABLE"); + ai_SendMessages("Select a location to save to " + GetName(oModule), AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_TILE, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + } + } + } + } +} +void debug_GetObjectVariable(object oPC, object oTarget, string sDesc = "") +{ + string sVar, sVarName = GetLocalString(oPC, "Debug_Var_Name"); + int nVarType = GetLocalInt(oPC, "Debug_Var_Type"); + if(nVarType == 0) sVar = IntToString(GetLocalInt(oTarget, sVarName)); + else if(nVarType == 1) sVar = FloatToString(GetLocalFloat(oTarget, sVarName), 0, 2); + else if(nVarType == 2) sVar = GetLocalString(oTarget, sVarName); + else if(nVarType == 4) sVar = GetName(GetLocalObject(oTarget, sVarName)); + else if(nVarType == 5) sVar = LocationToString(GetLocalLocation(oTarget, sVarName)); + ai_SendMessages(sVarName + " on " + GetName(oTarget) + sDesc + " is set to " + sVar, AI_COLOR_YELLOW, oPC); +} +void debug_ListObjectVariables(object oPC, object oTarget) +{ + string sName = GetName(oTarget); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + ai_SendMessages(sName + " variables:", AI_COLOR_GREEN, oPC); + json jObject = ObjectToJson(oTarget, TRUE); + json jVarTable = GffGetList(jObject, "VarTable"); + string sVariable; + int nIndex, nVarType; + json jVar = JsonArrayGet(jVarTable, nIndex); + while(JsonGetType(jVar) != JSON_TYPE_NULL) + { + sVariable = JsonGetString(GffGetString(jVar, "Name")); + nVarType = JsonGetInt(GffGetDword(jVar, "Type")); + if(nVarType == 1) + { + sVariable += " [int] "; + sVariable += IntToString(JsonGetInt(GffGetInt(jVar, "Value"))); + } + else if(nVarType == 2) + { + sVariable += " [float] "; + sVariable += FloatToString(JsonGetFloat(GffGetFloat(jVar, "Value")), 0, 2); + } + else if(nVarType == 3) + { + sVariable += " [string] "; + sVariable += JsonGetString(GffGetString(jVar, "Value")); + } + else if(nVarType == 4) + { + sName = GetName(GetLocalObject(oTarget, sVariable)); + sVariable += " [object] " + sName; + } + else if(nVarType == 5) + { + sName = LocationToString(GetLocalLocation(oTarget, sVariable)); + sVariable += " [location] " + sName; + } + else if(nVarType == 7) + { + sVariable += " [struct] "; + sVariable += JsonDump(GffGetStruct(jVar, "Value")); + } + sVariable += JsonGetString(JsonObjectGet(jVar, "Value")); + ai_SendMessages(sVariable, AI_COLOR_YELLOW, oPC); + jVar = JsonArrayGet(jVarTable, ++nIndex); + } + if(!nIndex) ai_SendMessages("No variables to list!", AI_COLOR_YELLOW, oPC); +} +void ai_ForceAssociateEventScriptsToDefault(object oPC, object oCreature) +{ + ai_SendMessages("Changing " + GetName(oCreature) + "'s event scripts to default event scripts!", AI_COLOR_YELLOW, oPC); + ai_SendMessages("Use this tool on them again to revert this creatures event scripts back!", AI_COLOR_YELLOW, oPC); + //********** On Heartbeat ********** + string sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT); + if(sScript == "0e_id_events" || sScript == "0e_prc_id_events") + { + ai_SendMessages("You cannot use this on creatures in Infinite Dungeons!"); + return; + } + SetLocalString(oCreature, "AI_ON_HEARTBEAT", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "nw_ch_ac1"); + //********** On Perception ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE); + SetLocalString(oCreature, "AI_ON_NOTICE", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "nw_ch_ac2"); + //********** On End Combat Round ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND); + SetLocalString(oCreature, "AI_ON_END_COMBATROUND", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "nw_ch_ac3"); + //********** On Dialogue ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE); + SetLocalString(oCreature, "AI_ON_DIALOGUE", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "nw_ch_ac4"); + //********** On Melee Attacked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED); + SetLocalString(oCreature, "AI_ON_MELEE_ATTACKED", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "nw_ch_ac5"); + //********** On Damaged ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED); + SetLocalString(oCreature, "AI_ON_DAMAGED", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "nw_ch_ac6"); + //********** On Disturbed ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED); + SetLocalString(oCreature, "AI_ON_DISTURBED", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "nw_ch_ac8"); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + //********** On Rested ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED); + SetLocalString(oCreature, "AI_ON_RESTED", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "nw_ch_aca"); + //********** On Spell Cast At ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT); + SetLocalString(oCreature, "AI_ON_SPELLCASTAT", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "nw_ch_acb"); + //********** On Blocked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR); + SetLocalString(oCreature, "AI_ON_BLOCKED_BY_DOOR", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "nw_ch_acb"); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, ""); + if(!GetCommandable(oCreature)) SetCommandable(TRUE, oCreature); +} +void ai_RevertAssociateEventScriptsToDefault(object oPC, object oCreature) +{ + ai_SendMessages("Changing " + GetName(oCreature) + "'s event scripts back to original!", AI_COLOR_YELLOW, oPC); + //********** On Heartbeat ********** + string sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT); + if(sScript == "0e_id_events" || sScript == "0e_prc_id_events") + { + ai_SendMessages("You cannot use this on creatures in Infinite Dungeons!", AI_COLOR_RED, oPC); + return; + } + sScript = GetLocalString(oCreature, "AI_ON_HEARTBEAT"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, sScript); + //********** On Perception ********** + sScript = GetLocalString(oCreature, "AI_ON_NOTICE"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, sScript); + //********** On End Combat Round ********** + sScript = GetLocalString(oCreature, "AI_ON_END_COMBATROUND"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, sScript); + //********** On Dialogue ********** + sScript = GetLocalString(oCreature, "AI_ON_DIALOGUE"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, sScript); + //********** On Melee Attacked ********** + sScript = GetLocalString(oCreature, "AI_ON_MELEE_ATTACKED"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, sScript); + //********** On Damaged ********** + sScript = GetLocalString(oCreature, "AI_ON_DAMAGED"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, sScript); + //********** On Disturbed ********** + sScript = GetLocalString(oCreature, "AI_ON_DISTURBED"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, sScript); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + //********** On Rested ********** + sScript = GetLocalString(oCreature, "AI_ON_RESTED"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, sScript); + //********** On Spell Cast At ********** + sScript = GetLocalString(oCreature, "AI_ON_SPELLCASTAT"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + //********** On Blocked ********** + sScript = GetLocalString(oCreature, "AI_ON_BLOCKED_BY_DOOR"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, sScript); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, ""); + if(!GetCommandable(oCreature)) SetCommandable(TRUE, oCreature); +} + diff --git a/src/module/nss/pe_henchmen.nss b/src/module/nss/pe_henchmen.nss new file mode 100644 index 0000000..4f6bf42 --- /dev/null +++ b/src/module/nss/pe_henchmen.nss @@ -0,0 +1,589 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: pe_henchmen +//////////////////////////////////////////////////////////////////////////////// + Used with pe_henchmen to run the npc plugin for + Philos Single Player Enhancements. +*/////////////////////////////////////////////////////////////////////////////// +#include "pinc_henchmen" +#include "x0_i0_henchman" +#include "0i_module" +// Creates the Henchman widget. +void PopupWidgetHenchmanGUIPanel(object oPC); +void ResetHenchmanWindows(object oPC, int nToken, object oHenchman) +{ + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, "henchman_nui"))); + DelayCommand(0.1, ExecuteScript("pi_henchmen", oPC)); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.2, CreateCharacterEditGUIPanel(oPC, oHenchman)); +} +void main() +{ + //************************************************************************** + //********************** Henchmen Targeting Execution ********************** + //************************************************************************** + // Get the last player to use targeting mode + object oPC = GetLastPlayerToSelectTarget(); + if(GetLocalInt (oPC, "0_No_Win_Save")) return; + string sTargetMode = GetLocalString(oPC, AI_TARGET_MODE); + if(oPC == OBJECT_SELF && sTargetMode != "") + { + // Get the targeting mode data + object oTarget = GetTargetingModeSelectedObject(); + vector vTarget = GetTargetingModeSelectedPosition(); + location lLocation = Location(GetArea(oPC), vTarget, GetFacing(oPC)); + object oObject = GetLocalObject(oPC, "AI_TARGET_OBJECT"); + // If the user manually exited targeting mode without selecting a target, return + if(!GetIsObjectValid(oTarget) && vTarget == Vector()) + { + return; + } + // Targeting code here. + if(sTargetMode == "MAKE_NPC_HENCHMAN") + { + if(GetAssociateType(oTarget) == ASSOCIATE_TYPE_HENCHMAN) + { + ai_SendMessages(GetName(oTarget) + " is already a henchman!", AI_COLOR_RED, oPC); + return; + } + oTarget = CopyObject(oTarget, GetLocation(oPC), OBJECT_INVALID, "", TRUE); + ai_ClearCombatState(oTarget); + ChangeToStandardFaction(oTarget, STANDARD_FACTION_DEFENDER); + DeleteLocalInt(oTarget, AI_ONSPAWN_EVENT); + ai_ChangeEventScriptsForAssociate(oTarget); + AddHenchman(oPC, oTarget); + // Special check for Infinite Dungeon plot givers to be changed into henchman. + if(GetStringLeft(GetLocalString(oTarget, "sConversation"), 8) == "id1_plot") + { + DeleteLocalString(oTarget, "sConversation"); + } + // Remove this variable so they may get a unique tag associate widget. + DeleteLocalString(oTarget, AI_TAG); + ai_SendMessages(GetName(oTarget) + " has been copied and is now in your party as a henchman.", AI_COLOR_GREEN, oPC); + //ExecuteScript("pi_henchmen", oPC); + } + } + //************************************************************************** + //*********************** Henchmen Elements Execution ********************** + //************************************************************************** + else + { + // Let the inspector handle what it wants. + //HandleWindowInspectorEvent (); + object oPC = NuiGetEventPlayer(); + int nToken = NuiGetEventWindow(); + string sEvent = NuiGetEventType(); + string sElem = NuiGetEventElement(); + int nIndex = NuiGetEventArrayIndex(); + string sWndId = NuiGetWindowId (oPC, nToken); + //SendMessageToPC(oPC, "pe_henchmen , 26 sWndId: " + sWndId + " sEvent: " + sEvent + " sElem: " + sElem + + // " nToken: " + IntToString(nToken) + " nIndex: " + IntToString(nIndex) + + // " oPC: " + GetName(oPC)); + //********************************************************************** + // Watch to see if the window moves and save. + if(sElem == "window_geometry" && sEvent == "watch") + { + if(GetLocalInt(oPC, "AI_NO_NUI_SAVE")) return; + json jGeometry = NuiGetBind(oPC, nToken, "window_geometry"); + json jData = GetHenchmanDbJson(oPC, "henchman", "0"); + if(JsonGetType(jData) == JSON_TYPE_NULL) jData = JsonObject(); + jData = JsonObjectSet(jData, sWndId, jGeometry); + SetHenchmanDbJson(oPC, "henchman", jData, "0"); + } + else if(sWndId == "henchman_nui") + { + //********************************************************************** + // Henchman menu. + if(sEvent == "click") + { + string sParty = GetHenchmanDbString(oPC, "henchname", "0"); + // Change to a different saved party #. + if(GetStringLeft(sElem, 9) == "btn_party") + { + sParty = GetStringRight(sElem, 1); + SetHenchmanDbString(oPC, "henchname", sParty, "0"); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ExecuteScript("pi_henchmen", oPC)); + } + // Add an NPC in the game as a henchman. + else if(sElem == "btn_npc_henchman") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_henchmen"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "MAKE_NPC_HENCHMAN"); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + ai_SendMessages("Select an NPC to copy and make your henchman.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL , MOUSECURSOR_CREATE, MOUSECURSOR_NOCREATE); + } + // ******************* Saved Character buttons ********************* + // Show saved party member. + else if(sElem == "btn_saved_char") + { + string sIndex = IntToString(nIndex); + SetHenchmanDbString(oPC, "henchname", sIndex, sParty); + AddSavedCharacterInfo(oPC, nToken, sParty); + } + // Have any saved henchman not in the party join. + else if(sElem == "btn_join_party") + { + SavedPartyJoin(oPC, nToken, sParty); + } + else if(sElem == "btn_saved_join") + { + SavedCharacterJoin(oPC, nToken, sParty); + } + else if(sElem == "btn_saved_remove") + { + string sIndex = GetHenchmanDbString(oPC, "henchname", sParty); + RemoveHenchmanDb(oPC, sParty + sIndex); + if(GetHenchmanDbString(oPC, "henchname", sParty + "0") == "") + { + SetHenchmanDbString(oPC, "henchname", "", sParty); + } + else SetHenchmanDbString(oPC, "henchname", "0", sParty); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ExecuteScript("pi_henchmen", oPC)); + } + else if(sElem == "btn_clear_party") + { + SavedPartyCleared(oPC, nToken, sParty); + } + // ******************* Current Character buttons ********************* + // Show current party member. + else if(sElem == "btn_cur_char") + { + string sIndex = IntToString(nIndex); + SetHenchmanDbString(oPC, "image", sIndex, sParty); + AddCurrentCharacterInfo(oPC, nToken, sParty); + } + // The edit button, for now we are using it to level up! + else if(sElem == "btn_cur_edit") + { + object oHenchman = GetSelectedHenchman(oPC, sParty); + SetLocalObject(oPC, HENCHMAN_TO_EDIT, oHenchman); + CreateCharacterEditGUIPanel(oPC, oHenchman); + } + else if(sElem == "btn_cur_remove") + { + RemoveYourHenchman(oPC, nToken, sParty); + } + else if(sElem == "btn_remove_party") + { + RemoveWholeParty(oPC, nToken, sParty); + } + else if(sElem == "btn_cur_save") + { + SaveYourHenchman(oPC, nToken, sParty); + SetHenchmanDbString(oPC, "henchname", "0", sParty); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ExecuteScript("pi_henchmen", oPC)); + } + else if(sElem == "btn_save_party") + { + SaveWholeParty(oPC, nToken, sParty); + } + } + /*else if(sEvent == "watch") + { + if(sElem == "henchman_widget_check") + { + int bWidget = JsonGetInt(NuiGetBind(oPC, nToken, "henchman_widget_check")); + SetLocalInt(oPC, "AI_WIDGET_HENCHMAN", bWidget); + if(bWidget) PopupWidgetHenchmanGUIPanel(oPC); + else DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, "widgethenchmanwin"))); + } + if(sElem == "lock_henchman_widget_check") + { + int bBuffLockWidget = JsonGetInt(NuiGetBind(oPC, nToken, "lock_henchman_widget_check")); + SetLocalInt(oPC, "AI_WIDGET_HENCHMAN_LOCK", bBuffLockWidget); + SetLocalInt(oPC, "AI_WIDGET_HENCHMAN", TRUE); + NuiSetBind(oPC, nToken, "henchman_widget_check", JsonBool(TRUE)); + PopupWidgetHenchmanGUIPanel(oPC); + } + } + //************************************************************************** + // Spell Buffing. + else if (sWndId == "widget_henchman") + { + if (sEvent == "click") + { + string sParty; + if (sElem == "btn_one") sParty = "1"; + if (sElem == "btn_two") sParty = "2"; + if (sElem == "btn_three") sParty = "3"; + if (sElem == "btn_four") sParty = "4"; + SetHenchmanDbString (oPC, "henchname", sParty, "0"); + PopupWidgetHenchmanGUIPanel(oPC); + } + } */ + } + else if(sWndId == "henchman_edit_nui") + { + int nChange = 0; + int nID; + string sResRef, sID, sPlot; + object oHenchman = GetLocalObject(oPC, HENCHMAN_TO_EDIT); + if(sEvent == "watch") + { + if(sElem == "char_name") + { + string sName = JsonGetString(NuiGetBind(oPC, nToken, "char_name")); + SetName(oHenchman, sName); + } + if(sElem == "port_name") + { + if(GetLocalInt(oPC, "AI_PORTRAIT_ID_SET")) + { + DeleteLocalInt(oPC, "AI_PORTRAIT_ID_SET"); + //nID = JsonGetInt(NuiGetUserData(oPC, nToken)); + //SetPortraitId(oHenchman, nID); + } + else NuiSetUserData(oPC, nToken, JsonInt(-1)); + sResRef = JsonGetString (NuiGetBind(oPC, nToken, "port_name")); + if(ResManGetAliasFor(sResRef + "l", RESTYPE_TGA) == "" && + ResManGetAliasFor(sResRef + "l", RESTYPE_DDS) == "") + { + if(GetGender(oHenchman)) sResRef = "po_hu_f_99_"; + else sResRef = "po_hu_m_99_"; + } + NuiSetBind (oPC, nToken, "port_resref_image", JsonString (sResRef + "l")); + } + else if(sElem == "cmb_class_selected") + { + int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1; + int nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_class_selected")); + int nClass = GetClassBySelection2DA(nSelection); + SetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nPosition), nClass); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, CreateCharacterEditGUIPanel(oPC, oHenchman)); + } + else if(sElem == "cmb_package_selected") + { + int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1; + string sClass = IntToString(GetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nPosition))); + int nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_package_selected")); + int nPackage = GetPackageBySelection2DA(sClass, nSelection); + SetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nPosition), nPackage); + } + else if(sElem == "cmb_soundset_selected") + { + int nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_soundset_selected")); + int nSoundSet = GetSoundSetBySelection2DA(oHenchman, nSelection); + SetSoundset(oHenchman, nSoundSet); + string sResRef = GetStringLowerCase(Get2DAString("soundset", "RESREF", nSoundSet)); + if(GetStringLeft(sResRef, 4) == "vs_f") + { + DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 11, ":1:2:3:22:34:35:41:42:44:45:46:")); + } + else if(GetStringLeft(sResRef, 4) == "vs_n") + { + DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 10, ":1:2:3:34:35:36:40:42:44:45:")); + } + else + { + DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 7, ":1:2:3:11:12:13:33:")); + } + } + } + if(sEvent == "click") + { + if (sElem == "btn_desc_save") + { + string sDescription = JsonGetString(NuiGetBind(oPC, nToken, "desc_value")); + SetDescription(oHenchman, sDescription); + return; + } + else if(sElem == "btn_level_up") + { + int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1; + int nClass = GetClassByPosition(nPosition, oHenchman); + if(nClass == CLASS_TYPE_INVALID) + { + nClass = GetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nPosition)); + int nIndex = 1; + while(nIndex < 5) + { + if(nClass == GetClassByPosition(nIndex, oHenchman)) + { + ai_SendMessages(GetName(oHenchman) + " already has this class in a different slot! You can only level up this class in its original slot.", AI_COLOR_RED, oPC); + return; + } + nIndex++; + } + } + int nPackage = GetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nPosition)); + if(nPackage == 0) nPackage = GetPackageBySelection2DA(IntToString(nClass), 0); + else if(nPackage == -1) + { + ai_SendMessages("There is not a valid package for this class!", AI_COLOR_RED, oPC); + return; + } + string sLevel = IntToString(GetLevelByClass(nClass, oHenchman) + 1); + json jHenchman = ObjectToJson(oHenchman, TRUE); + //WriteTimestampedLogEntry("pe_henchmen, 318, jHenchman: " + JsonDump(jHenchman, 4)); + // Check to see if this character has a LvlStatList that is required to level. + json jLvlStatList = JsonObjectGet(jHenchman, "LvlStatList"); + //WriteTimestampedLogEntry("pe_henchmen, 321, jLvlStatList: " + JsonDump(jLvlStatList, 4)); + if(JsonGetType(jLvlStatList) == JSON_TYPE_NULL) + { + RemoveHenchman(oPC, oHenchman); + // Make sure to get a clean faction version of the henchman here. + jHenchman = ObjectToJson(oHenchman, TRUE); + jHenchman = CreateLevelStatList(jHenchman, oHenchman, oPC); + location lLocation = GetLocation(oHenchman); + int nFamiliar, nCompanion; + object oCompanion = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oHenchman); + if(oCompanion != OBJECT_INVALID) nFamiliar = TRUE; + oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oHenchman); + if(oCompanion != OBJECT_INVALID) nCompanion = TRUE; + AssignCommand(oHenchman, SetIsDestroyable(TRUE, FALSE, FALSE)); + DestroyObject(oHenchman); + oHenchman = ai_AddHenchman(oPC, jHenchman, lLocation, nFamiliar, nCompanion); + SetLocalObject(oPC, HENCHMAN_TO_EDIT, oHenchman); + // We need to move party button list index to the last one since + // the henchman will move to the last henchman slot. + int nIndex = 1; + object oHench = GetHenchman(oPC, nIndex); + while(oHench != OBJECT_INVALID) + { + oHench = GetHenchman(oPC, ++nIndex); + //SendMessageToPC(oPC, "oHench: " + GetName(oHench) + " nIndex: " + IntToString(nIndex)); + } + string sParty = GetHenchmanDbString(oPC, "henchname", "0"); + SetHenchmanDbString(oPC, "image", IntToString(nIndex - 1), sParty); + } + int nLeveled = LevelUpHenchman(oHenchman, nClass, TRUE, nPackage); + //SendMessageToPC(oPC, "pe_henchmen, 282, nClass: " + IntToString(nClass) + + // " nPackage: " + IntToString(nPackage) + " nPosition: " + IntToString(nPosition) + + // " nLeveled: " + IntToString(nLeveled)); + string sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + if(!nLeveled) + { + //WriteTimestampedLogEntry("pe_henchmen, 306, jLvlStatList: " + JsonDump(jLvlStatList, 1)); + ai_SendMessages(GetName(oHenchman) + " could not level " + sClass + " to level " + sLevel + "!", AI_COLOR_RED, oPC); + } + else + { + ai_SendMessages(GetName(oHenchman) + " has leveled " + sClass + " to " + sLevel + " level!", AI_COLOR_GREEN, oPC); + ResetHenchmanWindows(oPC, nToken, oHenchman); + } + return; + } + else if(sElem == "btn_reset") + { + oHenchman = ResetCharacter(oPC, oHenchman); + SetLocalObject(oPC, HENCHMAN_TO_EDIT, oHenchman); + ai_SendMessages(GetName(oHenchman) + " has been reset to level 1!", AI_COLOR_GREEN, oPC); + // We need to move party button list index to the last one since + // the henchman will move to the last henchman slot. + int nIndex = 1; + object oHench = GetHenchman(oPC, nIndex); + while(oHench != OBJECT_INVALID) + { + oHench = GetHenchman(oPC, ++nIndex); + } + string sParty = GetHenchmanDbString(oPC, "henchname", "0"); + SetHenchmanDbString(oPC, "image", IntToString(nIndex - 1), sParty); + ResetHenchmanWindows(oPC, nToken, oHenchman); + } + else if(sElem == "btn_portrait_next") + { + nID = JsonGetInt(NuiGetUserData(oPC, nToken)) + 1; + nChange = 1; + } + else if(sElem == "btn_portrait_prev") + { + nID = JsonGetInt(NuiGetUserData(oPC, nToken)) - 1; + nChange = -1; + } + else if(sElem == "btn_portrait_ok") + { + nID = JsonGetInt(NuiGetUserData(oPC, nToken)); + if(nID != -1) SetPortraitId(oHenchman, nID); + else + { + sResRef = JsonGetString (NuiGetBind (oPC, nToken, "port_name")); + if(ResManGetAliasFor(sResRef + "l", RESTYPE_TGA) == "" && + ResManGetAliasFor(sResRef + "l", RESTYPE_DDS) == "") + { + if(GetGender(oHenchman)) sResRef = "po_hu_f_99_"; + else sResRef = "po_hu_m_99_"; + SetPortraitResRef(oHenchman, sResRef); + } + } + int nHenchToken = NuiFindWindow(oPC, "henchman_nui"); + if(nHenchToken) + { + string sImage = GetPortraitResRef(oHenchman); + NuiSetBind(oPC, nHenchToken, "img_cur_portrait_image", JsonString(sImage + "l")); + } + } + if (nChange != 0) + { + int nPRace, nPGender; + int nMax2DARow = Get2DARowCount("portraits") - 1; + if(nID > 5000) nID = 1; + if(nID < 0) nID = 5000; + int nGender = GetGender(oHenchman); + int nRace = GetRacialType(oHenchman); + string sPRace = Get2DAString("portraits", "Race", nID); + if(sPRace != "") nPRace = StringToInt(sPRace); + else nPRace = -1; + string sResRef, sPGender = Get2DAString("portraits", "Sex", nID); + if(sPGender != "") nPGender = StringToInt(sPGender); + else nPGender = -1; + //WriteTimestampedLogEntry("pe_henchmen, 367, nGender: " + IntToString(nGender) + + // " nPGender: " + IntToString(nPGender) + + // " nRace: " + IntToString(nRace) + " nPRace: " + IntToString(nPRace) + + // " nID: " + IntToString(nID)); + while((nRace != nPRace && + (nRace != RACIAL_TYPE_HALFELF || + (nPRace != RACIAL_TYPE_ELF || nPRace != RACIAL_TYPE_HUMAN))) || + nGender != nPGender && nPGender != 4) + { + nID += nChange; + //WriteTimestampedLogEntry("pe_henchmen, 382, nCounter: " + IntToString(nCounter) + + // " nMax2DARow: " + IntToString(nMax2DARow)); + if (nID > 5000) nID = 1; + if (nID < 1) nID = 5000; + sPRace = Get2DAString("portraits", "Race", nID); + if(sPRace != "") nPRace = StringToInt(sPRace); + else nPRace = -1; + sPGender = Get2DAString("portraits", "Sex", nID); + if(sPGender != "") nPGender = StringToInt(sPGender); + else nPGender = -1; + //WriteTimestampedLogEntry("pe_henchmen, 385, nGender: " + IntToString(nGender) + + // " nPGender: " + IntToString(nPGender) + " sPGender: " + sPGender + + // " nRace: " + IntToString(nRace) + " nPRace: " + IntToString(nPRace) + + // " sPRace: " + sPRace + " nID: " + IntToString(nID)); + sResRef = "po_" + Get2DAString("portraits", "BaseResRef", nID) + "l"; + if(ResManGetAliasFor(sResRef, RESTYPE_TGA) == "" && + ResManGetAliasFor(sResRef, RESTYPE_DDS) == "") nPRace = 99; + } + sResRef = "po_" + Get2DAString("portraits", "BaseResRef", nID); + NuiSetUserData(oPC, nToken, JsonInt (nID)); + // This is passed to the portrait name txt that actually sets + // the portrait information and tells it we picked an ID. + SetLocalInt(oPC, "AI_PORTRAIT_ID_SET", TRUE); + NuiSetBind(oPC, nToken, "port_name", JsonString (sResRef)); + } + } + if(sEvent == "mousedown") + { + int nMouseButton = JsonGetInt(JsonObjectGet(NuiGetEventPayload(), "mouse_btn")); + if (sElem == "opt_classes" && nMouseButton == NUI_MOUSE_BUTTON_LEFT) + { + int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")); + SetLocalInt(oHenchman, "CLASS_OPTION_POSITION", nPosition); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, CreateCharacterEditGUIPanel(oPC, oHenchman)); + return; + } + if(nMouseButton == NUI_MOUSE_BUTTON_RIGHT) + { + if(sElem == "cmb_class") + { + int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1; + int nClass = GetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nPosition)); + string sName = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + string sDescription = GetStringByStrRef(StringToInt(Get2DAString("classes", "Description", nClass))); + string sIcon = Get2DAString("classes", "Icon", nClass); + CreateCharacterDescriptionNUI(oPC, sName, sIcon, sDescription); + } + else if(sElem == "cmb_package") + { + int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1; + int nClass = GetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nPosition)); + int nPackage = GetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nPosition)); + string sName = GetStringByStrRef(StringToInt(Get2DAString("packages", "Name", nPackage))); + string sDescription = GetStringByStrRef(StringToInt(Get2DAString("packages", "Description", nPackage))); + string sIcon = Get2DAString("classes", "Icon", nClass); + CreateCharacterDescriptionNUI(oPC, sName, sIcon, sDescription); + } + else if(sElem == "cmb_soundset") + { + int nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_soundset_selected")); + int nSoundSet = GetSoundSetBySelection2DA(oHenchman, nSelection); + string sResRef = GetStringLowerCase(Get2DAString("soundset", "RESREF", nSoundSet)); + if(GetStringLeft(sResRef, 4) == "vs_f") + { + DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 11, ":1:2:3:22:34:35:41:42:44:45:46:")); + } + else if(GetStringLeft(sResRef, 4) == "vs_n") + { + DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 10, ":1:2:3:34:35:36:40:42:44:45:")); + } + else + { + DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 7, ":1:2:3:11:12:13:33:")); + } + } + else if(sElem == "opt_classes") + { + int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1; + int nClass = GetClassByPosition(nPosition, oHenchman); + if(nClass != CLASS_TYPE_INVALID) + { + string sName = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + string sDescription = GetStringByStrRef(StringToInt(Get2DAString("classes", "Description", nClass))); + int nPackage = GetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nPosition)); + string sPackageName = GetStringByStrRef(StringToInt(Get2DAString("packages", "Name", nPackage))); + sDescription += "\n\nPACKAGE: \n" + sPackageName + "\n"; + sDescription += GetStringByStrRef(StringToInt(Get2DAString("packages", "Description", nPackage))); + string sIcon = Get2DAString("classes", "Icon", nClass); + CreateCharacterDescriptionNUI(oPC, sName, sIcon, sDescription); + } + } + } + } + } + else if(sWndId == "char_description_nui") + { + if(sEvent == "click" && sElem == "btn_ok") DelayCommand(0.0, NuiDestroy(oPC, nToken)); + } + } +} +void PopupWidgetHenchmanGUIPanel(object oPC) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, "AI_NO_NUI_SAVE", TRUE); + DelayCommand (0.5f, DeleteLocalInt (oPC, "AI_NO_NUI_SAVE")); + // Row 1 (buttons)********************************************************** + json jRow = CreateButtonImage(JsonArray(), "ir_level1", "btn_one", 30.0f, 30.0f); + jRow = CreateButtonImage(jRow, "ir_level2", "btn_two", 30.0f, 30.0f); + jRow = CreateButtonImage(jRow, "ir_level3", "btn_three", 30.0f, 30.0f); + jRow = CreateButtonImage(jRow, "ir_level4", "btn_four", 30.0f, 30.0f); + // Add the row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + int bAINPCWidgetLock = GetLocalInt(oPC, "AI_WIDGET_HENCHMAN_LOCK"); + // Get the window location to restore it from the database. + float fX = GetLocalFloat(oPC, "widget_henchman_X"); + float fY = GetLocalFloat(oPC, "widget_henchman_Y"); + if(fX == 0.0f && fY == 0.0f) + { + fX = 10.0f; + fY = 10.0f; + } + if(bAINPCWidgetLock) + { + fX = fX + 4.0f; + fY = fY + 45.0f; + } + // Set the layout of the window. + json jLayout = NuiCol (jCol); + int nToken; + if(bAINPCWidgetLock) nToken = SetWindow (oPC, jLayout, "widget_henchman", "Henchman Widget", fX, fY, 160.0, 62.0, FALSE, FALSE, FALSE, TRUE, FALSE, "pe_npc"); + else nToken = SetWindow (oPC, jLayout, "widget_henchman", "Henchman Widget", fX, fY, 160.0, 95.0, FALSE, FALSE, FALSE, TRUE, TRUE, "pe_npc"); + // Set event watches for window inspector and save window location. + NuiSetBindWatch (oPC, nToken, "collapsed", TRUE); + NuiSetBindWatch (oPC, nToken, "window_geometry", TRUE); + // Set the buttons to show events. + //NuiSetBind (oPC, nToken, "btn_one", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_one_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_two", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_two_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_three", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_three_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_four", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_four_event", JsonBool (TRUE)); +} diff --git a/src/module/nss/pe_mod_set.nss b/src/module/nss/pe_mod_set.nss new file mode 100644 index 0000000..9c251b9 --- /dev/null +++ b/src/module/nss/pe_mod_set.nss @@ -0,0 +1,119 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: pe_mod_settings + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + PEPS Plugin to set module and area settings. +/*////////////////////////////////////////////////////////////////////////////// +const string AI_MODULE_HEARTBEAT_SCRIPT = "AI_MODULE_HEARTBEAT_SCRIPT"; + +#include "0i_main" +void main() +{ + // Get the last player to use targeting mode + object oPC = GetLastPlayerToSelectTarget(); + string sTargetMode = GetLocalString(oPC, AI_TARGET_MODE); + if(oPC == OBJECT_SELF && sTargetMode != "") + { + // Get the targeting mode data + object oTarget = GetTargetingModeSelectedObject(); + vector vTarget = GetTargetingModeSelectedPosition(); + location lLocation = Location(GetArea(oPC), vTarget, GetFacing(oPC)); + object oAssociate = GetLocalObject(oPC, AI_TARGET_ASSOCIATE); + // If the user manually exited targeting mode without selecting a target, return + if(!GetIsObjectValid(oTarget) && vTarget == Vector()) + { + return; + } + // Targeting code here. + if(sTargetMode == "TEST_LEVEL_TARGET") + { + int nLevel = ai_GetCharacterLevels(oTarget); + int nXPNeeded = StringToInt(Get2DAString("exptable", "XP", nLevel)); + int nXPToGive = nXPNeeded - GetXP(oTarget); + GiveXPToCreature(oTarget, nXPToGive); + ai_SendMessages(GetName(oTarget) + " has gained " + IntToString(nXPToGive) + " experience to gain 1 level.", AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "TEST_GOLD_TARGET") + { + GiveGoldToCreature(oTarget, 10000); + ai_SendMessages(GetName(oTarget) + " has gained 10,000 gold.", AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "TEST_REST_TARGET") + { + ForceRest(oTarget); + ai_SendMessages(GetName(oTarget) + " has rested.", AI_COLOR_GREEN, oPC); + } + else if(sTargetMode == "TEST_HEAL_TARGET") + { + int nHeal = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + if(nHeal > 0) + { + effect eHeal = EffectHeal(nHeal); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget); + ai_SendMessages(GetName(oTarget) + " has been healed.", AI_COLOR_GREEN, oPC); + } + } + else if(sTargetMode == "TEST_ID_TARGET") SetIdentified(oTarget, !GetIdentified(oTarget)); + else if(sTargetMode == "TEST_CLEAR_TARGET") + { + ClearAllActions(TRUE, oTarget); + } + else if(sTargetMode == "TEST_KILL_TARGET") + { + effect eDmg = EffectDamage(10000); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDmg, oTarget); + ai_SendMessages(GetName(oTarget) + " has been killed.", AI_COLOR_RED, oPC); + } + else if(sTargetMode == "TEST_REMOVE_TARGET") + { + SetIsDestroyable(TRUE, FALSE, FALSE, oTarget); + DestroyObject(oTarget); + ai_SendMessages(GetName(oTarget) + " has been removed!", AI_COLOR_RED, oPC); + } + } + // Run all non-targeting code here, usually NUI events. + else + { + object oPC = NuiGetEventPlayer(); + int nToken = NuiGetEventWindow(); + string sEvent = NuiGetEventType(); + string sElem = NuiGetEventElement(); + int nIndex = NuiGetEventArrayIndex(); + //string sWndId = NuiGetWindowId(oPC, nToken); + //********************************************************************** + //if(GetLocalInt(oPC, AI_NO_NUI_SAVE)) return; + if(sEvent == "click") + { + if(sElem == "btn_combat_music_off") + { + object oArea = GetFirstArea(); + while(GetIsObjectValid(oArea)) + { + MusicBattleChange(oArea, 0); + oArea = GetNextArea(); + } + ai_SendMessages(GetModuleName() + " has had the combat music removed. Save your game or you may loose this change!", AI_COLOR_GREEN, oPC); + } + if(sElem == "btn_night_to_day") + { + object oModule = GetModule(); + string sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_HEARTBEAT); + if(sScript == "pc_mod_set") + { + sScript = GetLocalString(oPC, AI_MODULE_HEARTBEAT_SCRIPT); + SetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_HEARTBEAT, sScript); + DeleteLocalString(oPC, AI_MODULE_HEARTBEAT_SCRIPT); + SendMessageToPC(oPC, "Module has been set to use normal time passage!"); + } + else + { + SetLocalString(oPC, AI_MODULE_HEARTBEAT_SCRIPT, sScript); + SetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_HEARTBEAT, "pc_mod_set"); + SendMessageToPC(oPC, "Module has been set to pass through nighttime to make it morning!"); + } + } + } + } +} + + diff --git a/src/module/nss/pe_test.nss b/src/module/nss/pe_test.nss new file mode 100644 index 0000000..7fd799c --- /dev/null +++ b/src/module/nss/pe_test.nss @@ -0,0 +1,227 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: pe_test + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + PEPS Plugin to help test errors. + Gives gold, Heals, etc. +/*////////////////////////////////////////////////////////////////////////////// +#include "0i_main" +void main() +{ + // Get the last player to use targeting mode + object oPC = GetLastPlayerToSelectTarget(); + string sTargetMode = GetLocalString(oPC, AI_TARGET_MODE); + if(oPC == OBJECT_SELF && sTargetMode != "") + { + // Get the targeting mode data + object oTarget = GetTargetingModeSelectedObject(); + vector vTarget = GetTargetingModeSelectedPosition(); + location lLocation = Location(GetArea(oPC), vTarget, GetFacing(oPC)); + object oAssociate = GetLocalObject(oPC, AI_TARGET_ASSOCIATE); + // If the user manually exited targeting mode without selecting a target, return + if(!GetIsObjectValid(oTarget) && vTarget == Vector()) + { + return; + } + // Targeting code here. + if(sTargetMode == "TEST_LEVEL_TARGET") + { + int nLevel = ai_GetCharacterLevels(oTarget); + int nXPNeeded = StringToInt(Get2DAString("exptable", "XP", nLevel)); + int nXPToGive = nXPNeeded - GetXP(oTarget); + GiveXPToCreature(oTarget, nXPToGive); + ai_SendMessages(GetName(oTarget) + " has gained " + IntToString(nXPToGive) + " experience to gain 1 level.", AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "TEST_GOLD_TARGET") + { + GiveGoldToCreature(oTarget, 10000); + ai_SendMessages(GetName(oTarget) + " has gained 10,000 gold.", AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "TEST_REST_TARGET") + { + ForceRest(oTarget); + ai_SendMessages(GetName(oTarget) + " has rested.", AI_COLOR_GREEN, oPC); + } + else if(sTargetMode == "TEST_HEAL_TARGET") + { + int nHeal = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + if(nHeal > 0) + { + effect eHeal = EffectHeal(nHeal); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget); + ai_SendMessages(GetName(oTarget) + " has been healed.", AI_COLOR_GREEN, oPC); + } + } + else if(sTargetMode == "TEST_ID_TARGET") SetIdentified(oTarget, !GetIdentified(oTarget)); + else if(sTargetMode == "TEST_CLEAR_TARGET") + { + ClearAllActions(TRUE, oTarget); + } + else if(sTargetMode == "TEST_KILL_TARGET") + { + effect eDmg = EffectDamage(10000); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDmg, oTarget); + ai_SendMessages(GetName(oTarget) + " has been killed.", AI_COLOR_RED, oPC); + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_test"); + // Set Targeting variables. + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, OBJECT_SELF); + SetLocalString(oPC, AI_TARGET_MODE, "TEST_KILL_TARGET"); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_KILL, MOUSECURSOR_NOKILL); + } + else if(sTargetMode == "TEST_REMOVE_TARGET") + { + SetIsDestroyable(TRUE, FALSE, FALSE, oTarget); + DestroyObject(oTarget); + ai_SendMessages(GetName(oTarget) + " has been removed!", AI_COLOR_RED, oPC); + } + else if(sTargetMode == "TEST_JUMP") + { + JumpToLocation(lLocation); + int nIndex; + object oAssociate; + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, JumpToLocation(lLocation)); + } + for(nIndex = 1; nIndex < AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, JumpToLocation(lLocation)); + } + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_test"); + // Set Targeting variables. + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, OBJECT_SELF); + SetLocalString(oPC, AI_TARGET_MODE, "TEST_JUMP"); + EnterTargetingMode(oPC, OBJECT_TYPE_TILE, MOUSECURSOR_TRANSITION, MOUSECURSOR_NOWALK); + } + else if(sTargetMode == "TEST_KILL_AREA") + { + effect eDmg = EffectDamage(10000); + object oKill = GetFirstObjectInShape(SHAPE_SPHERE, 6.67, lLocation, FALSE); + while(oKill != OBJECT_INVALID) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDmg, oKill); + oKill = GetNextObjectInShape(SHAPE_SPHERE, 6.67, lLocation, FALSE); + } + } + } + // Run all non-targeting code here, usually NUI events. + else + { + object oPC = NuiGetEventPlayer(); + int nToken = NuiGetEventWindow(); + string sEvent = NuiGetEventType(); + string sElem = NuiGetEventElement(); + int nIndex = NuiGetEventArrayIndex(); + //string sWndId = NuiGetWindowId(oPC, nToken); + //********************************************************************** + //if(GetLocalInt(oPC, AI_NO_NUI_SAVE)) return; + if(sEvent == "click") + { + if(sElem == "btn_level") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_test"); + // Set Targeting variables. + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, OBJECT_SELF); + SetLocalString(oPC, AI_TARGET_MODE, "TEST_LEVEL_TARGET"); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE , MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_gold") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_test"); + // Set Targeting variables. + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, OBJECT_SELF); + SetLocalString(oPC, AI_TARGET_MODE, "TEST_GOLD_TARGET"); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE , MOUSECURSOR_CREATE, MOUSECURSOR_NOCREATE); + } + else if(sElem == "btn_rest") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_test"); + // Set Targeting variables. + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, OBJECT_SELF); + SetLocalString(oPC, AI_TARGET_MODE, "TEST_REST_TARGET"); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE , MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_heal") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_test"); + // Set Targeting variables. + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, OBJECT_SELF); + SetLocalString(oPC, AI_TARGET_MODE, "TEST_HEAL_TARGET"); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_HEAL, MOUSECURSOR_NOHEAL); + } + else if(sElem == "btn_id_item") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_test"); + // Set Targeting variables. + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, OBJECT_SELF); + SetLocalString(oPC, AI_TARGET_MODE, "TEST_ID_TARGET"); + EnterTargetingMode(oPC, OBJECT_TYPE_ITEM, MOUSECURSOR_HEAL, MOUSECURSOR_NOHEAL); + } + else if(sElem == "btn_clear") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_test"); + // Set Targeting variables. + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, OBJECT_SELF); + SetLocalString(oPC, AI_TARGET_MODE, "TEST_CLEAR_TARGET"); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_MAGIC, MOUSECURSOR_NOMAGIC); + } + else if(sElem == "btn_kill") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_test"); + // Set Targeting variables. + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, OBJECT_SELF); + SetLocalString(oPC, AI_TARGET_MODE, "TEST_KILL_TARGET"); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_KILL, MOUSECURSOR_NOKILL); + } + else if(sElem == "btn_remove") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_test"); + // Set Targeting variables. + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, OBJECT_SELF); + SetLocalString(oPC, AI_TARGET_MODE, "TEST_REMOVE_TARGET"); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE | + OBJECT_TYPE_DOOR | OBJECT_TYPE_ITEM | + OBJECT_TYPE_PLACEABLE, MOUSECURSOR_KILL, MOUSECURSOR_NOKILL); + } + else if(sElem == "btn_jump") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_test"); + // Set Targeting variables. + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, OBJECT_SELF); + SetLocalString(oPC, AI_TARGET_MODE, "TEST_JUMP"); + EnterTargetingMode(oPC, OBJECT_TYPE_TILE, MOUSECURSOR_TRANSITION, MOUSECURSOR_NOWALK); + } + else if(sElem == "btn_kill_area") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_test"); + // Set Targeting variables. + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, OBJECT_SELF); + SetLocalString(oPC, AI_TARGET_MODE, "TEST_KILL_AREA"); + SetEnterTargetingModeData(oPC, SPELL_TARGETING_SHAPE_SPHERE, 6.67, 0.0, 3); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_KILL, MOUSECURSOR_NOKILL); + } + } + else if(sEvent == "watch") + { + if(sElem == "txt_debug_creature") + { + } + } + } +} + + diff --git a/src/module/nss/pi_buffing.nss b/src/module/nss/pi_buffing.nss new file mode 100644 index 0000000..6ce454e --- /dev/null +++ b/src/module/nss/pi_buffing.nss @@ -0,0 +1,338 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: pi_buffing +//////////////////////////////////////////////////////////////////////////////// + Executable plug in script for Philos Module Extentions. + + Database structure: + Name(string) Tag(String) Spells(Json) + Tag: Widget - 0 = x position, 1 = y position, 2 = On/Off, 3 = Locked + Tag: List (string) set to the list number selected 1,2,3, or 4. + Tag: List# is the list of spells for List number 1,2,3, or 4. + + UI to save a players buff spells to be cast after resting. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +const int BUFF_MAX_SPELLS = 50; +const string FB_NO_MONSTER_CHECK = "FB_NO_MONSTER_CHECK"; + +// Does startup check if the game has just been loaded. +int StartingUp(object oPC); +// Creates the table and initializes if it needs to. +void CheckBuffDataAndInitialize(object oPlayer, string sTag); +// sDataField should be one of the data fields for that table. +// sData is the string data to be saved. +void SetBuffDatabaseString(object oPlayer, string sDataField, string sData, string sTag); +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +string GetBuffDatabaseString(object oPlayer, string sDataField, string sTag); +// sDataField should be one of the data fields for that table. +// jData is the json data to be saved. +void SetBuffDatabaseJson(object oPlayer, string sDataField, json jData, string sTag); +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +json GetBuffDatabaseJson(object oPlayer, string sDataField, string sTag); +// Creates the widget for buffing. +void PopupWidgetBuffGUIPanel(object oPC); + +void main() +{ + object oPC = OBJECT_SELF; + // Check to make sure the database is setup before we do anything. + CheckBuffDataAndInitialize(oPC, "menudata"); + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + if(JsonGetType(JsonArrayGet(jMenuData, 0)) == JSON_TYPE_NULL) + { + jMenuData = JsonArrayInsert(JsonArray(), JsonString("list1")); // 0 Spell List # + jMenuData = JsonArrayInsert(jMenuData, JsonFloat(0.0)); // 1 Main menu X pos. + jMenuData = JsonArrayInsert(jMenuData, JsonFloat(GetGUIHeightMiddle(oPC, 257.0))); // 2 Main menu Y pos. + jMenuData = JsonArrayInsert(jMenuData, JsonBool(FALSE)); // 3 Widget on/off + jMenuData = JsonArrayInsert(jMenuData, JsonBool(FALSE)); // 4 Widget Locked + jMenuData = JsonArrayInsert(jMenuData, JsonFloat(10.0)); // 5 Widget X pos. + jMenuData = JsonArrayInsert(jMenuData, JsonFloat(10.0)); // 6 Widget Y pos. + SetBuffDatabaseJson(oPC, "spells", jMenuData, "menudata"); + } + if(StartingUp(oPC)) return; + // Row 1 (Buttons) ********************************************************* 83 + json jRow = CreateButtonSelect(JsonArray(), "Save", "btn_save", 60.0f, 30.0f, "btn_save_tooltip"); + CreateButton(jRow, "Clear", "btn_clear", 60.0f, 30.0f, -1.0, "btn_clear_tooltip"); + CreateButton(jRow, "Buff", "btn_buff", 60.0f, 30.0f, -1.0, "btn_buff_tooltip"); + CreateButtonSelect(jRow, "List 1", "btn_list1", 60.0f, 30.0f); + CreateButtonSelect(jRow, "List 2", "btn_list2", 60.0f, 30.0f); + CreateButtonSelect(jRow, "List 3", "btn_list3", 60.0f, 30.0f); + CreateButtonSelect(jRow, "List 4", "btn_list4", 60.0f, 30.0f); + // Add the row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 (Buttons) ********************************************************* 121 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateCheckBox(jRow, "Buff Widget", "buff_widget", 110.0, 30.0f, "buff_widget_tooltip"); + jRow = CreateCheckBox(jRow, "Lock Widget", "lock_buff_widget", 110.0, 30.0f, "lock_buff_widget_tooltip"); + if(!AI_SERVER) + { + jRow = CreateCheckBox(jRow, "Don't Check for Monsters", "chbx_no_monster_check", 200.0, 30.0f, "chbx_no_monster_check_tooltip"); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add the row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 (List of Spells) ************************************************** 164 + // Create the button template for the List. + jRow = JsonArray(); + string sList = JsonGetString(JsonArrayGet(jMenuData, 0)); + int nCntr, nIndex; + string sCntr, sIndex; + json jSpell; + CheckBuffDataAndInitialize(oPC, sList); + json jSpells = GetBuffDatabaseJson(oPC, "spells", sList); + while(nCntr <= BUFF_MAX_SPELLS) + { + jSpell = JsonArrayGet(jSpells, nCntr); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + sIndex = IntToString(nIndex++); + jRow = CreateButtonImage(jRow, "", "btn_spell_" + sIndex, 35.0, 35.0, 0.0, "btn_spell_" + sIndex + "_tooltip"); + } + nCntr++; + } + // Add the row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Get the window location to restore it from the database. + float fWidth = IntToFloat(nIndex) * 39; + if(fWidth < 470.0) fWidth = 470.0; + float fX = JsonGetFloat(JsonArrayGet(jMenuData, 1)); + float fY = JsonGetFloat(JsonArrayGet(jMenuData, 2)); + if(fX == 0.0f && fY == 0.0f) + { + fX = 0.0f; + fY = GetGUIHeightMiddle(oPC, 257.0); + } + // Set the layout of the window. + json jLayout = NuiCol(jCol); + int nToken = SetWindow(oPC, jLayout, "plbuffwin", "Fast Buffing Spells", + fX, fY, fWidth, 164.0, FALSE, FALSE, TRUE, FALSE, TRUE, "pe_buffing"); + // Set the elements to show events. + int nSelected = GetEventScript(oPC, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT) == "pc_savebuffs"; + NuiSetBind(oPC, nToken, "btn_save", JsonBool(nSelected)); + NuiSetBind(oPC, nToken, "btn_save_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_save_tooltip", JsonString(" Saves any spells cast on you or your associates.")); + NuiSetBind(oPC, nToken, "btn_clear", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_tooltip", JsonString(" Clears the current list of all saved spells.")); + NuiSetBind(oPC, nToken, "btn_buff", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_tooltip", JsonString(" Casts the current list of saved spells.")); + if(sList == "list1") NuiSetBind (oPC, nToken, "btn_list1", JsonBool (TRUE)); + else NuiSetBind(oPC, nToken, "btn_list1", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_list1_event", JsonBool(TRUE)); + if(sList == "list2") NuiSetBind (oPC, nToken, "btn_list2", JsonBool (TRUE)); + else NuiSetBind(oPC, nToken, "btn_list2", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_list2_event", JsonBool(TRUE)); + if(sList == "list3") NuiSetBind (oPC, nToken, "btn_list3", JsonBool (TRUE)); + else NuiSetBind(oPC, nToken, "btn_list3", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_list3_event", JsonBool(TRUE)); + if(sList == "list4") NuiSetBind (oPC, nToken, "btn_list4", JsonBool (TRUE)); + else NuiSetBind (oPC, nToken, "btn_list4", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_list4_event", JsonBool(TRUE)); + int nValue = JsonGetInt(JsonArrayGet(jMenuData, 3)); + NuiSetBind(oPC, nToken, "buff_widget_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "buff_widget_check", JsonBool(nValue)); + NuiSetBindWatch(oPC, nToken, "buff_widget_check", TRUE); + string sText = " Creates a set of 4 buttons on the screen for quick buffing."; + NuiSetBind(oPC, nToken, "buff_widget_tooltip", JsonString(sText)); + nValue = JsonGetInt(JsonArrayGet(jMenuData, 4)); + NuiSetBind(oPC, nToken, "lock_buff_widget_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "lock_buff_widget_check", JsonBool(nValue)); + NuiSetBindWatch(oPC, nToken, "lock_buff_widget_check", TRUE); + sText = " Locks the buffing widget in place reducing its size."; + NuiSetBind(oPC, nToken, "lock_buff_widget_tooltip", JsonString(sText)); + if(!AI_SERVER) + { + NuiSetBind(oPC, nToken, "chbx_no_monster_check_event", JsonBool(TRUE)); + nValue = GetLocalInt(oPC, FB_NO_MONSTER_CHECK); + NuiSetBind(oPC, nToken, "chbx_no_monster_check_check", JsonBool(nValue)); + NuiSetBindWatch(oPC, nToken, "chbx_no_monster_check_check", TRUE); + sText = " Turns on/off checks for nearby monsters."; + NuiSetBind(oPC, nToken, "chbx_no_monster_check_tooltip", JsonString(sText)); + } + // Create buttons with spells listed. + int nSpell, nClass, nLevel, nMetamagic, nDomain; + string sName, sTargetName, sResRef; + nCntr = 0; + nIndex = 0; + while(nCntr <= BUFF_MAX_SPELLS) + { + jSpell = JsonArrayGet(jSpells, nCntr); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + nLevel = JsonGetInt(JsonArrayGet(jSpell, 2)); + nMetamagic = JsonGetInt(JsonArrayGet(jSpell, 3)); + nDomain = JsonGetInt(JsonArrayGet(jSpell, 4)); + sTargetName = JsonGetString(JsonArrayGet(jSpell, 5)); + sResRef = Get2DAString("spells", "IconResRef", nSpell); + sName = " " + GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sName += " (" + GetStringByStrRef(StringToInt(Get2DAString("classes", "Short", nClass))); + sName += " / " + IntToString (nLevel); + if(nMetamagic > 0) + { + if(nMetamagic == METAMAGIC_EMPOWER) sName += " / Empowered"; + else if(nMetamagic == METAMAGIC_EXTEND) sName += " / Extended"; + else if(nMetamagic == METAMAGIC_MAXIMIZE) sName += " / Maximized"; + else if(nMetamagic == METAMAGIC_QUICKEN) sName += " / Quickened"; + else if(nMetamagic == METAMAGIC_SILENT) sName += " / Silent"; + else if(nMetamagic == METAMAGIC_STILL) sName += " / Still"; + } + if(nDomain > 0) sName += " / Domain"; + sName += ") " + sTargetName; + sIndex = IntToString(nIndex++); + NuiSetBind(oPC, nToken, "btn_spell_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_spell_" + sIndex + "_image", JsonString(sResRef)); + NuiSetBind(oPC, nToken, "btn_spell_" + sIndex + "_tooltip", JsonString(sName)); + } + nCntr++; + } + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); +} +int StartingUp(object oPC) +{ + if(GetLocalInt(oPC, AI_ADD_PLUGIN)) + { + json jPlugin = JsonArray(); + jPlugin = JsonArrayInsert(jPlugin, JsonString("pi_buffing")); + jPlugin = JsonArrayInsert(jPlugin, JsonInt(FALSE)); + jPlugin = JsonArrayInsert(jPlugin, JsonString("Quick Buff")); + jPlugin = JsonArrayInsert(jPlugin, JsonString("dm_appear")); + json jPlugins = GetLocalJson(oPC, AI_JSON_PLUGINS); + jPlugins = JsonArrayInsert(jPlugins, jPlugin); + SetLocalJson(oPC, AI_JSON_PLUGINS, jPlugin); + SetLocalInt(oPC, AI_PLUGIN_SET, TRUE); + return TRUE; + } + if(!GetLocalInt(oPC, AI_STARTING_UP)) return FALSE; + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + int bWidgetOn = JsonGetInt(JsonArrayGet(jMenuData, 3)); + if(bWidgetOn) + { + PopupWidgetBuffGUIPanel(oPC); + ai_SendMessages("Buffing widget has been created.", AI_COLOR_YELLOW, oPC); + } + return TRUE; +} +void CreateBuffDataTable(object oPlayer) +{ + sqlquery sql = SqlPrepareQueryObject(oPlayer, + "CREATE TABLE IF NOT EXISTS BUFF_TABLE (" + + "name TEXT, " + + "tag TEXT, " + + "spells TEXT, " + + "PRIMARY KEY(name, tag));"); + SqlStep(sql); +} +void CheckBuffDataAndInitialize(object oPlayer, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "SELECT name FROM sqlite_master WHERE type ='table' AND name=@tableName;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString (sql, "@tableName", "BUFF_TABLE"); + if(!SqlStep (sql)) CreateBuffDataTable(oPlayer); + sQuery = "SELECT name FROM BUFF_TABLE Where name = @name AND tag = @tag;"; + sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + if(!SqlStep(sql)) + { + sQuery = "INSERT INTO BUFF_TABLE(name, tag, spells) " + + "VALUES (@name, @tag, @spells);"; + sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + SqlBindJson(sql, "@spells", JsonArray()); + SqlStep(sql); + } +} +void SetBuffDatabaseString(object oPlayer, string sDataField, string sData, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "UPDATE BUFF_TABLE SET " + sDataField + " = @data WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@data", sData); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + SqlStep(sql); +} +string GetBuffDatabaseString(object oPlayer, string sDataField, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "SELECT " + sDataField + " FROM BUFF_TABLE WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + if(SqlStep(sql)) return SqlGetString(sql, 0); + else return ""; +} +void SetBuffDatabaseJson (object oPlayer, string sDataField, json jData, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "UPDATE BUFF_TABLE SET " + sDataField + " = @data WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindJson(sql, "@data", jData); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + SqlStep(sql); +} +json GetBuffDatabaseJson(object oPlayer, string sDataField, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "SELECT " + sDataField + " FROM BUFF_TABLE WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + if(SqlStep(sql)) return SqlGetJson(sql, 0); + else return JsonArray(); +} +void PopupWidgetBuffGUIPanel(object oPC) +{ + // Set window to not save until it has been created. + SetLocalInt(oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand(0.5f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + // Row 1 (buttons)********************************************************** + json jRow = JsonArray(); + CreateButtonImage(jRow, "ir_level1", "btn_one", 35.0f, 35.0f, 0.0); + CreateButtonImage(jRow, "ir_level2", "btn_two", 35.0f, 35.0f, 0.0); + CreateButtonImage(jRow, "ir_level3", "btn_three", 35.0f, 35.0f, 0.0); + CreateButtonImage(jRow, "ir_level4", "btn_four", 35.0f, 35.0f, 0.0); + // Add the row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + json jWidget = GetBuffDatabaseJson(oPC, "spells", "menudata"); + int bAIBuffWidgetLock = JsonGetInt(JsonArrayGet(jWidget, 4)); + // Get the window location to restore it from the database. + float fX = JsonGetFloat(JsonArrayGet(jWidget, 5)); + float fY = JsonGetFloat(JsonArrayGet(jWidget, 6)); + if(fX == 0.0f && fY == 0.0f) + { + fX = 10.0f; + fY = 10.0f; + } + if(bAIBuffWidgetLock) + { + fX = fX + 4.0f; + fY = fY + 45.0f; + } + // Set the layout of the window. + json jLayout = NuiCol (jCol); + int nToken; + if(bAIBuffWidgetLock) nToken = SetWindow(oPC, jLayout, "widgetbuffwin", "Fast Buff Widget", fX, fY, 160.0, 62.0, FALSE, FALSE, FALSE, TRUE, FALSE, "pe_buffing"); + else nToken = SetWindow(oPC, jLayout, "widgetbuffwin", "Fast Buff Widget", fX, fY, 160.0, 95.0, FALSE, FALSE, FALSE, TRUE, TRUE, "pe_buffing"); + // Set event watches for window inspector and save window location. + //NuiSetBindWatch(oPC, nToken, "collapsed", TRUE); + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set the buttons to show events. + //NuiSetBind (oPC, nToken, "btn_one", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_one_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_two", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_two_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_three", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_three_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_four", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_four_event", JsonBool(TRUE)); +} + diff --git a/src/module/nss/pi_crafting.nss b/src/module/nss/pi_crafting.nss new file mode 100644 index 0000000..3fa9775 --- /dev/null +++ b/src/module/nss/pi_crafting.nss @@ -0,0 +1,717 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: pi_crafting +//////////////////////////////////////////////////////////////////////////////// + Executable plug in script for Philos Module Extentions + + Crafting UI for players items. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +#include "0i_items" +#include "nw_inc_gff" +const string CRAFT_JSON = "CRAFT_JSON"; +const string CRAFT_COOL_DOWN = "CRAFT_COOL_DOWN"; +const string CRAFT_ITEM_SELECTION = "CRAFT_ITEM_SELECTION"; +const string CRAFT_MATERIAL_SELECTION = "CRAFT_MATERIAL_SELECTION"; +const string CRAFT_MODEL_SELECTION = "CRAFT_MODEL_SELECTION"; +const string CRAFT_COLOR_PALLET = "CRAFT_COLOR_PALLET"; +const string CRAFT_LEFT_PART_COLOR = "CRAFT_LEFT_PART_COLOR"; +const string CRAFT_ALL_COLOR = "CRAFT_ALL_COLOR"; +const string CRAFT_RIGHT_PART_COLOR = "CRAFT_RIGHT_PART_COLOR"; +const string CRAFT_TARGET = "CRAFT_TARGET"; +// Tag used in lighting effects. +const string CRAFT_HIGHLIGHT = "CRAFT_HIGHLIGHT"; +const string CRAFT_ULTRALIGHT = "CRAFT_ULTRALIGHT"; + +json CreateItemCombo(object oPC, json jRow, string sComboBind); +json CreateModelCombo(object oPC, object oTarget, json jRow, string sComboBind); +json CreateMaterialCombo(object oPC, json jRow, string sComboBind); +// Sets the material buttons for use. +// nMaterial 0,1 Cloth 2,3 Leather 4,5 Metal -1 None. +void SetMaterialButtons(object oPC, int nToken, int nMaterial); +// Returns the correct item based on the crafting menu selected item. +object GetSelectedItem(object oTarget, int nItemSelected); +int GetArmorModelSelected(object oPC); +// Returns True if oItem, nPart has a per part color for sSide. +int GetHasPartColor(object oItem, int nPart, string sSide); +// Does startup check if the game has just been loaded. +int StartingUp(object oPC); +void main() +{ + object oPC = OBJECT_SELF; + object oTarget = GetLocalObject(oPC, CRAFT_TARGET); + if(oTarget == OBJECT_INVALID) oTarget = oPC; + if(StartingUp(oPC)) return; + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + // Row 1 (Object Name)****************************************************** 508 / 83 + json jRow = CreateTextEditBox(JsonArray(), "plc_hold_bind", "txt_item_name", 50, FALSE, 486.0f, 30.0f); // 419 + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 (Object Name)****************************************************** 508 / 121 + jRow = JsonArray(); + if(!AI_SERVER) jRow = CreateButton(jRow, "Information", "btn_info", 160.0f, 30.0f, -1.0, "btn_info_tooltip"); + else + { + if(GetIsDM(oTarget)) + { + jRow = CreateButton(jRow, "Information", "btn_info", 160.0f, 30.0f, -1.0, "btn_info_tooltip"); + } + else jRow = JsonArrayInsert(jRow, NuiSpacer()); + } + jRow = CreateButton(jRow, "Wardrobe", "btn_wardrobe", 158.0f, 30.0f, -1.0, "btn_wardrobe_tooltip"); + jRow = CreateButtonSelect(jRow, "Add Light", "btn_highlight", 160.0f, 30.0f, "btn_highlight_tooltip"); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 (Object Name)****************************************************** 508 / 159 + jRow = CreateButton(JsonArray(), "Save", "btn_save", 160.0f, 30.0f, -1.0, "btn_save_tooltip"); + jRow = CreateButton(jRow, "Select Target", "btn_select_target", 158.0f, 30.0f); + jRow = CreateButton(jRow, "", "btn_cancel", 160.0f, 30.0f, -1.0, "btn_cancel_tooltip"); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 (labels)*********************************************************** 508 / 177 + jRow = CreateLabel(JsonArray(), "Model", "module_title", 143.0f, 10.0f); + jRow = CreateLabel(jRow, "Color", "color_title", 339.0f, 10.0f); + jRow = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5 (groups) + // Row 51 (title)*********************************************************** 508 / 195 / 18 + json jGroupRow = CreateLabel(JsonArray(), "Item", "item__cmb_title", 128.0f, 10.0f); + json jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + // Row 52 (combo)*********************************************************** 508 / 233 / 56 + jGroupRow = CreateItemCombo(oPC, JsonArray(), "item_combo"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 53 (title)*********************************************************** 508 / 251 / 74 + jGroupRow = CreateLabel(JsonArray(), "Model", "model_cmb_title",128.0f, 10.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 54 (combo)*********************************************************** 508 / 289 / 112 + jGroupRow = CreateModelCombo(oPC, oTarget, JsonArray(), "model_combo"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 55 (title)*********************************************************** 508 / 307 / 120 + jGroupRow = CreateLabel(JsonArray(), "", "top_title",128.0f, 10.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 56 (top)************************************************************* 508 / 355 / 168 + jGroupRow = CreateButtonImage(JsonArray(), "nui_shld_left", "btn_prev_t", 40.0f, 40.0f); + // Removed TextEditBox for mobile + jGroupRow = CreateTextEditBox(jGroupRow, "place_holder", "txt_model_number_t", 3, FALSE, 40.0, 40.0); + //CreateLabel(jGroupRow, "", "txt_model_number_t", 40.0, 40.0); + jGroupRow = CreateButtonImage(jGroupRow, "nui_shld_right", "btn_next_t", 40.0f, 40.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 57 (title)*********************************************************** 508 / 373 / 186 + jGroupRow = CreateLabel(JsonArray(), "", "middle_title",128.0f, 10.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 58 (middle)********************************************************** 508 / 421 /234 + jGroupRow = CreateButtonImage(JsonArray(), "nui_shld_left", "btn_prev_m", 40.0f, 40.0f); + // Removed TextEditBox for mobile + jGroupRow = CreateTextEditBox(jGroupRow, "place_holder", "txt_model_number_m", 3, FALSE, 40.0, 40.0); + //CreateLabel(jGroupRow, "", "txt_model_number_m", 40.0, 40.0); + jGroupRow = CreateButtonImage(jGroupRow, "nui_shld_right", "btn_next_m", 40.0f, 40.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 59 (title)*********************************************************** 508 / 439 / 252 + jGroupRow = CreateLabel(JsonArray(), "", "bottom_title",128.0f, 10.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 510 (bottom)********************************************************* 508 / 487 /300 + jGroupRow = CreateButtonImage(JsonArray(), "nui_shld_left", "btn_prev_b", 40.0f, 40.0f); + // Removed TextEditBox for mobile + jGroupRow = CreateTextEditBox(jGroupRow, "place_holder", "txt_model_number_b", 3, FALSE, 40.0, 40.0); + //CreateLabel(jGroupRow, "", "txt_model_number_b", 40.0, 40.0); + jGroupRow = CreateButtonImage(jGroupRow, "nui_shld_right", "btn_next_b", 40.0f, 40.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 511 (blank spacer) + jGroupRow = CreateLabel(JsonArray(), "", "blank_space",128.0f, 20.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 512 (light)********************************************************** 508 / 487 /300 + jGroupRow = CreateButtonSelect(JsonArray(), "Randomize", "btn_randomize", 128.0f, 30.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupCol = JsonArrayInsert(jGroupCol, NuiSpacer()); + jRow = JsonArrayInsert(JsonArray(), NuiHeight(NuiWidth(NuiGroup(NuiCol(jGroupCol)), 143.0), 442.0)); + // Make the Color Group. + // Row 550 (groups)********************************************************* 508 / 361 / 184 + json jImage = NuiEnabled(NuiId(NuiImage(NuiBind("color_pallet_image"), JsonInt(0), JsonInt(0), JsonInt(1)), "color_pallet"), NuiBind("color_pallet_event")); + jImage = NuiWidth(jImage, 320.0); // 256 + 64 + jImage = NuiHeight(jImage, 220.0); // 176 + 44 + jImage = NuiTooltip(jImage, NuiBind("color_pallet_tooltip")); + json jIndicator = JsonArrayInsert(JsonArray(), NuiDrawListRect(JsonBool(TRUE), NuiColor(255,255,255), JsonBool(FALSE), JsonFloat(2.0), NuiBind("color_pallet_pointer"))); + jImage = NuiDrawList(jImage, JsonBool(FALSE), jIndicator); + jGroupRow = JsonArrayInsert(JsonArray(), jImage); + jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + // Row 551 (groups)********************************************************* 508 / 379 /202 + jGroupRow = CreateLabel(JsonArray(), "Part To Color", "lbl_color_parts", 320.0f, 10.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 552 (groups)********************************************************* 508 / 417 /240 + jGroupRow = CreateButtonSelect(JsonArray(), "Right", "btn_right_part_color", 98.0, 30.0, "btn_right_part_color_tooltip"); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButtonSelect(jGroupRow, "All", "btn_all_color", 98.0, 30.0, "btn_all_color_tooltip"); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButtonSelect(jGroupRow, "Left", "btn_left_part_color", 98.0, 30.0, "btn_left_part_color_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 553 (groups)********************************************************* 508 / 435 / 258 + jGroupRow = CreateLabel(JsonArray(), "Part Color To Reset", "lbl_reset_parts", 320.0f, 10.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 554 (groups)********************************************************* 508 / 473 /296 + jGroupRow = CreateButton(JsonArray(), "Right", "btn_right_part_reset", 98.0, 30.0, -1.0, "btn_right_part_reset_tooltip"); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButton(jGroupRow, "All", "btn_all_reset", 50.0, 30.0, -1.0, "btn_all_reset_tooltip"); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButton(jGroupRow, "Left", "btn_left_part_reset", 98.0, 30.0, -1.0, "btn_left_part_reset_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 555 (groups)********************************************************* 508 / 491 / 314 + jGroupRow = CreateLabel(JsonArray(), "Material to Color", "lbl_material_color", 320.0f, 10.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 556 (groups)********************************************************* 508 / 529 /352 + jGroupRow = CreateButtonSelect(JsonArray(), "Cloth 1", "btn_material_0", 98.0, 30.0); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButtonSelect(jGroupRow, "Leather 1", "btn_material_2", 98.0, 30.0); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButtonSelect(jGroupRow, "Metal 1", "btn_material_4", 98.0, 30.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 557 (groups)********************************************************* 508 / 567 / 390 + jGroupRow = CreateButtonSelect(JsonArray(), "Cloth 2", "btn_material_1", 98.0, 30.0); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButtonSelect(jGroupRow, "Leather 2", "btn_material_3", 98.0, 30.0); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButtonSelect(jGroupRow, "Metal 2", "btn_material_5", 98.0, 30.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupCol = JsonArrayInsert(jGroupCol, NuiSpacer()); + jRow = JsonArrayInsert(jRow, NuiHeight(NuiWidth(NuiGroup(NuiCol(jGroupCol)), 339.0), 442.0)); // 275 398 + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + json jLayout = NuiCol(jCol); + // Get the window location to restore it from the database. + json jGeometry = JsonObjectGet(jCraft, "CRAFT_MENU"); + float fX = JsonGetFloat(JsonObjectGet(jGeometry, "x")); + float fY = JsonGetFloat(JsonObjectGet(jGeometry, "y")); + string sPCWindow; + int nToken = SetWindow(oPC, jLayout, "crafting_nui", "Crafting", + fX, fY, 508.0, 700.0, FALSE, FALSE, FALSE, FALSE, TRUE, "pe_crafting"); // 444 645 + // Set all binds, events, and watches. + NuiSetBindWatch (oPC, nToken, "window_geometry", TRUE); + int nItem = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + object oItem = GetSelectedItem(oTarget, nItem); + // Row 1 + NuiSetBind(oPC, nToken, "txt_item_name", JsonString(GetName(oItem))); + NuiSetBind(oPC, nToken, "txt_item_name_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "txt_item_name", TRUE); + // Row 2 + NuiSetBind(oPC, nToken, "btn_info_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_info_tooltip", JsonString(" Look at and change item information")); + NuiSetBind(oPC, nToken, "btn_wardrobe_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_wardrobe_tooltip", JsonString(" Use your wardrobe to save/load item appearances")); + int nLight = GetLocalInt(oPC, CRAFT_HIGHLIGHT) + GetLocalInt(oPC, CRAFT_ULTRALIGHT); + NuiSetBind(oPC, nToken, "btn_highlight", JsonBool(nLight)); + NuiSetBind(oPC, nToken, "btn_highlight_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_highlight_tooltip", JsonString(" Left click for White light, Right click for Ultravision")); + // Row 3 + NuiSetBind(oPC, nToken, "btn_save_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_save_tooltip", JsonString(" Save current changes")); + NuiSetBind(oPC, nToken, "btn_select_target_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cancel_label", JsonString("Exit")); + NuiSetBind(oPC, nToken, "btn_cancel_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cancel_tooltip", JsonString(" Exit the crafting menu")); + // Row 4 Labels. + // Row 5 Groups. + // Row 51 title. + // Row 52 + NuiSetBind(oPC, nToken, "item_combo_selected", JsonInt(nItem)); + NuiSetBind(oPC, nToken, "item_combo_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "item_combo_selected", TRUE); + // Row 53 title. + // Row 54 + int nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MODEL_SELECTION)); + if(nItem == 1 || nItem == 2 || nItem == 4) + { + if(GetHiddenWhenEquipped(oItem)) nSelected = 1; + else nSelected = 0; + } + NuiSetBind(oPC, nToken, "model_combo_selected", JsonInt (nSelected)); + NuiSetBind(oPC, nToken, "model_combo_event", JsonBool (TRUE)); + NuiSetBindWatch(oPC, nToken, "model_combo_selected", TRUE); + // Row 55, 56, 57 titles + // Row 58 top, 59 middle, 510 bottom + string sModelTop, sModelMiddle, sModelBottom; + // Model Group + if(ai_GetIsWeapon(oItem)) + { + int nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, 0); + int nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, 0); + int nModelNumber = (nModel * 10) + nColor; + sModelTop = IntToString(nModelNumber); + nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, 1); + nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, 1); + nModelNumber = (nModel * 10) + nColor; + sModelMiddle = IntToString(nModelNumber); + nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, 2); + nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, 2); + nModelNumber = (nModel * 10) + nColor; + sModelBottom = IntToString(nModelNumber); + // Row 55 + NuiSetBind(oPC, nToken, "top_title_label", JsonString("Top")); + // Row 56 + //NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString(sModelTop)); + NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(TRUE)); + // Row 57 + NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Middle")); + // Row 58 + //NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelMiddle)); + NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE)); + // Row 59 + NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("Bottom")); + // Row 510 + //NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(sModelBottom)); + NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(TRUE)); + // Row 511 + NuiSetBind(oPC, nToken, "btn_randomize_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_randomize_tooltip", JsonString(" Randomize the selected weapon")); + } + // Armor and clothing + else if(nItem == 0) + { + nSelected = GetArmorModelSelected(oPC); + // These models only have one side so make sure we are not linked. + if (nSelected == ITEM_APPR_ARMOR_MODEL_NECK || + nSelected == ITEM_APPR_ARMOR_MODEL_TORSO || + nSelected == ITEM_APPR_ARMOR_MODEL_BELT || + nSelected == ITEM_APPR_ARMOR_MODEL_PELVIS || + nSelected == ITEM_APPR_ARMOR_MODEL_ROBE) + { + sModelMiddle = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nSelected)); + // Row 55 + NuiSetBind(oPC, nToken, "top_title_label", JsonString("")); + // Row 56 + //NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "txt_model_name_t", JsonString("")); + NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(FALSE)); + // Row 57 + NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Model")); + // Row 58 + //NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelMiddle)); + NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE)); + // Row 59 + NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("")); + // Row 510 + //NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString("")); + NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(FALSE)); + } + else + { + sModelTop = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nSelected)); + if(nSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nSelected--; + else nSelected++; + sModelBottom = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nSelected)); + // Row 55 + NuiSetBind(oPC, nToken, "top_title_label", JsonString("Right")); + // Row 56 + //NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString(sModelTop)); + NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(TRUE)); + // Row 57 + NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Right & Left")); + // Row 58 + //NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelTop)); + NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE)); + // Row 59 + NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("Left")); + // Row 510 + //NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(sModelBottom)); + NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(TRUE)); + } + // Row 511 + NuiSetBind(oPC, nToken, "btn_randomize_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_randomize_tooltip", JsonString(" Randomize the selected armor")); + } + // Shields, Cloaks, and Helmets. + else + { + sModelMiddle = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0)); + // Row 55 + NuiSetBind(oPC, nToken, "top_title_label", JsonString("")); + // Row 56 + //NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString("")); + NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(FALSE)); + // Row 57 + NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Model")); + // Row 58 + //NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelMiddle)); + NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE)); + // Row 59 + NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("")); + // Row 510 + //NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString("")); + NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(FALSE)); + // Row 511 + NuiSetBind(oPC, nToken, "btn_randomize_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_randomize_tooltip", JsonString(" Randomize the selected item")); + } + // Color Group + if(ai_GetIsWeapon(oItem) || ai_GetIsShield(oItem)) + { + // Need to disable the color widgets. + // Row 511 + NuiSetBind(oPC, nToken, "color_pallet_image", JsonString("gui_pal_tattoo")); + NuiSetBind(oPC, nToken, "color_pallet_image_event", JsonBool(FALSE)); + // Row 512 - Label Part to Color + // Row 5l3 + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(FALSE)); + // Row 514 - Label Part Color to Reset + // Row 515 + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE)); + // Row 516 - Label Material to Color + // Row 517 + NuiSetBind(oPC, nToken, "btn_material_0", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_material_2", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_material_4", JsonBool(FALSE)); + // Row 518 + NuiSetBind(oPC, nToken, "btn_material_1", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_material_3", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_material_5", JsonBool(FALSE)); + SetMaterialButtons(oPC, nToken, -1); + } + // Armor and clothing + else if(nItem == 0) + { + // Row 511 + string sColorPallet = GetLocalString(oPC, CRAFT_COLOR_PALLET); + if(sColorPallet == "") sColorPallet = "gui_pal_tattoo"; + int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + int nModelSelected = GetArmorModelSelected(oPC); + // Row 511 + NuiSetBind(oPC, nToken, "color_pallet_image", JsonString(sColorPallet)); + NuiSetBind(oPC, nToken, "color_pallet_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "color_pallet_tooltip", JsonString(" Select a color or use the mouse wheel")); + int nSelectedRight, nSelectedAll, nSelectedLeft; + string sColorAll = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected)); + // These models only have one side so make sure we are not linked. + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_NECK || + nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO || + nModelSelected == ITEM_APPR_ARMOR_MODEL_BELT || + nModelSelected == ITEM_APPR_ARMOR_MODEL_PELVIS || + nModelSelected == ITEM_APPR_ARMOR_MODEL_ROBE) + { + // Row 512 - Label Part to Color + // Row 5l3 + int nPartColor = GetHasPartColor(oItem, nModelSelected, "Right"); + nSelectedRight = JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR)); + if(!nSelectedRight && nPartColor) + { + nSelectedRight = TRUE; + nSelectedLeft = FALSE; + } + nSelectedAll = !nSelectedRight; + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonBool(nSelectedAll)); + jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(nSelectedAll)); + NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(FALSE)); + // Row 514 - Label Part Color to Reset + // Row 5l5 + nSelectedRight = GetHasPartColor(oItem, nModelSelected, "Right"); + nSelectedAll = nSelectedRight; + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(nSelectedAll)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE)); + } + else + { + // Row 512 - Label Part to Color + // Row 5l3 + int nPartColor = GetHasPartColor(oItem, nModelSelected, "Right"); + nSelectedRight = JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR)); + if(!nSelectedRight && nPartColor) + { + nSelectedRight = TRUE; + nSelectedLeft = FALSE; + } + else + { + nPartColor = GetHasPartColor(oItem, nModelSelected, "Left"); + nSelectedLeft = JsonGetInt(JsonObjectGet(jCraft, CRAFT_LEFT_PART_COLOR)); + if(!nSelectedLeft && nPartColor) + { + nSelectedLeft = TRUE; + nSelectedRight = FALSE; + } + } + nSelectedAll = !nSelectedRight && !nSelectedLeft; + jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonBool(nSelectedLeft)); + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonBool(nSelectedAll)); + jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(nSelectedAll)); + NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(nSelectedLeft)); + NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(TRUE)); + // Row 514 - Label Part Color to Reset + // Row 5l5 + nSelectedRight = GetHasPartColor(oItem, nModelSelected, "Right"); + nSelectedLeft = GetHasPartColor(oItem, nModelSelected, "Left"); + nSelectedAll = nSelectedRight || nSelectedLeft; + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(nSelectedAll)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(nSelectedLeft)); + } + int nColor; + if(!JsonGetInt(NuiGetBind(oPC, nToken, "btn_all_color"))) + { + int nModelSelected = GetArmorModelSelected(oPC); + if(!JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR))) + { + // Note: Right Thigh and Left Thigh are backwards so this fixes that! + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected--; + else nModelSelected++; + } + int nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex); + } + else nColor = 255; + if(nColor == 255) nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected); + float fPointX = IntToFloat((nColor - ((nColor / 16) * 16)) * 20); + float fPointY = IntToFloat((nColor / 16) * 20); + NuiSetBind(oPC, nToken, "color_pallet_pointer", NuiRect(fPointX, fPointY, 20.0, 20.0)); + // Row 516 - Label Material to Color + // Row 517 & 518 + NuiSetBind(oPC, nToken, "btn_right_part_color_tooltip", JsonString(" Select the right part to be uniquely colored")); + NuiSetBind(oPC, nToken, "btn_all_color_tooltip", JsonString(" Select all parts to be colored")); + NuiSetBind(oPC, nToken, "btn_left_part_color_tooltip", JsonString(" Select the left part to be uniquely colored")); + NuiSetBind(oPC, nToken, "btn_right_part_reset_tooltip", JsonString(" Clears the right part's unique color")); + NuiSetBind(oPC, nToken, "btn_all_reset_tooltip", JsonString(" Clears all parts unique colors")); + NuiSetBind(oPC, nToken, "btn_left_part_reset_tooltip", JsonString(" Clears the left part's unique color")); + nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + SetMaterialButtons(oPC, nToken, nSelected); + SetLocalJson(oPC, CRAFT_JSON, jCraft); + } + // Cloaks and Helmets. + else + { + // Row 511 + string sColorPallet = GetLocalString(oPC, CRAFT_COLOR_PALLET); + if(sColorPallet == "") sColorPallet = "gui_pal_tattoo"; + int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + int nModelSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MODEL_SELECTION)); + int nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected); + float fPointX = IntToFloat((nColor - ((nColor / 16) * 16)) * 20); + float fPointY = IntToFloat((nColor / 16) * 20); + NuiSetBind(oPC, nToken, "color_pallet_pointer", NuiRect(fPointX, fPointY, 20.0, 20.0)); + NuiSetBind(oPC, nToken, "color_pallet_image", JsonString(sColorPallet)); + NuiSetBind(oPC, nToken, "color_pallet_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "color_pallet_tooltip", JsonString(" Select a color or use the mouse wheel")); + // Row 512 - Label Part to Color + // Row 5l3 + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE)); + // Row 514 - Label Part Color to Reset + // Row 5l5 + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(FALSE)); + //NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE)); + // Row 516 - Label Material to Color + // Row 517 & 518 + nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + SetMaterialButtons(oPC, nToken, nSelected); + } + // Lets make sure we clean up any cool down variables. + //DeleteLocalInt(oPC, CRAFT_COOL_DOWN); +} +json CreateItemCombo(object oPC, json jRow, string sComboBind) +{ + int nCnt; + // Create the list. + json jCombo = JsonArrayInsert(JsonArray(), NuiComboEntry("Armor", 0)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Cloak", 1)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Headgear", 2)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Right hand", 3)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Left hand", 4)); + return CreateCombo(jRow, jCombo, sComboBind, 128.0, 40.0); +} +json CreateModelCombo(object oPC, object oTarget, json jRow, string sComboBind) +{ + float fFacing = GetFacing(oTarget); + json jCombo, jCraft = GetLocalJson(oPC, CRAFT_JSON); + int nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + // Create the list. + // Armor. + if(nSelected == 0) + { + fFacing += 180.0f; + if (fFacing > 359.0) fFacing -=359.0; + AssignCommand(oPC, SetCameraFacing(fFacing, 4.5f, 75.0, CAMERA_TRANSITION_TYPE_VERY_FAST)); + jCombo = JsonArrayInsert(JsonArray(), NuiComboEntry("Neck", 0)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Shoulder", 1)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Bicep", 2)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Forearm", 3)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Hand", 4)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Torso", 5)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Belt", 6)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Pelvis", 7)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Thigh", 8)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Shin", 9)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Foot", 10)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Robe", 11)); + } + // Cloak. + else if(nSelected == 1) + { + if(fFacing > 359.0) fFacing -=359.0; + AssignCommand (oPC, SetCameraFacing(fFacing, 4.5f, 75.0, CAMERA_TRANSITION_TYPE_VERY_FAST)); + jCombo = JsonArrayInsert(JsonArray(), NuiComboEntry("Cloak", 0)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Invisible", 1)); + } + // Headgear. + else if (nSelected == 2) + { + fFacing += 180.0f; + if(fFacing > 359.0) fFacing -=359.0; + AssignCommand(oPC, SetCameraFacing(fFacing, 2.5f, 75.0, CAMERA_TRANSITION_TYPE_VERY_FAST)); + jCombo = JsonArrayInsert(JsonArray(), NuiComboEntry("Headgear", 0)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Invisible", 1)); + } + // Weapon. + else if (nSelected == 3) + { + // If they are changing a bow then face the opposite side. + object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + int nBaseItemType = GetBaseItemType(oItem); + if(nBaseItemType == BASE_ITEM_LONGBOW || nBaseItemType == BASE_ITEM_SHORTBOW) fFacing -= 90.00; + // This will make the camera face a melee weapon. + else fFacing += 90.0; + if(fFacing > 359.0) fFacing -=359.0; + AssignCommand(oPC, SetCameraFacing(fFacing, 3.5f, 75.0, CAMERA_TRANSITION_TYPE_VERY_FAST)); + jCombo = JsonArrayInsert(JsonArray(), NuiComboEntry("Weapon", 0)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Acidic", 1)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Frost", 2)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Electric", 3)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Unholy", 4)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Flaming", 5)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Holy", 6)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Sonic", 7)); +} + // Weapon/Shield. + else if(nSelected == 4) + { + fFacing += 270.0f; + if(fFacing > 359.0) fFacing -=359.0; + AssignCommand(oPC, SetCameraFacing(fFacing, 3.5f, 75.0, CAMERA_TRANSITION_TYPE_VERY_FAST)); + object oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC); + if(ai_GetIsShield(oItem)) + { + jCombo = JsonArrayInsert(JsonArray(), NuiComboEntry("Shield", 0)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Invisible", 1)); + } + else + { + jCombo = JsonArrayInsert(JsonArray(), NuiComboEntry("Weapon", 0)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Acidic", 1)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Frost", 2)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Electric", 3)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Unholy", 4)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Flaming", 5)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Holy", 6)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Sonic", 7)); + } + } + return CreateCombo(jRow, jCombo, sComboBind, 128.0, 40.0); +} +void SetMaterialButtons(object oPC, int nToken, int nMaterial) +{ + int nIndex, bBool, bUseable; + string sIndex; + if(nMaterial > -1) bUseable = TRUE; + for(nIndex = 0;nIndex < 6;nIndex++) + { + if(nIndex == nMaterial) bBool = TRUE; + else bBool = FALSE; + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_material_" + sIndex + "_event", JsonBool(bUseable)); + NuiSetBind(oPC, nToken, "btn_material_" + sIndex, JsonBool(bBool)); + } +} +object GetSelectedItem(object oTarget, int nItemSelected) +{ + if(nItemSelected == 0) return GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget); + else if(nItemSelected == 1) return GetItemInSlot(INVENTORY_SLOT_CLOAK, oTarget); + else if(nItemSelected == 2) return GetItemInSlot(INVENTORY_SLOT_HEAD, oTarget); + else if(nItemSelected == 3) return GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + else if(nItemSelected == 4) return GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget); + return OBJECT_INVALID; +} +int GetArmorModelSelected(object oPC) +{ + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + int nModelSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MODEL_SELECTION)); + if(nModelSelected == 0) return ITEM_APPR_ARMOR_MODEL_NECK; + if(nModelSelected == 1) return ITEM_APPR_ARMOR_MODEL_RSHOULDER; + if(nModelSelected == 2) return ITEM_APPR_ARMOR_MODEL_RBICEP; + if(nModelSelected == 3) return ITEM_APPR_ARMOR_MODEL_RFOREARM; + if(nModelSelected == 4) return ITEM_APPR_ARMOR_MODEL_RHAND; + if(nModelSelected == 5) return ITEM_APPR_ARMOR_MODEL_TORSO; + if(nModelSelected == 6) return ITEM_APPR_ARMOR_MODEL_BELT; + if(nModelSelected == 7) return ITEM_APPR_ARMOR_MODEL_PELVIS; + if(nModelSelected == 8) return ITEM_APPR_ARMOR_MODEL_RTHIGH; + if(nModelSelected == 9) return ITEM_APPR_ARMOR_MODEL_RSHIN; + if(nModelSelected == 10) return ITEM_APPR_ARMOR_MODEL_RFOOT; + return ITEM_APPR_ARMOR_MODEL_ROBE; +} +int GetHasPartColor(object oItem, int nPart, string sSide) +{ + json jItem = ObjectToJson(oItem); + string sPartName = "APart_"; + if(sSide == "Left") + { + // Note: Right Thigh and Left Thigh are backwards so this fixes that! + if (nPart == ITEM_APPR_ARMOR_MODEL_RTHIGH) nPart--; + else nPart++; + } + sPartName += IntToString(nPart) + "_Col_"; + int nPartColor = JsonGetInt(GffGetByte(jItem, sPartName + "0")); + nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "1")); + nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "2")); + nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "3")); + nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "4")); + nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "5")); + return nPartColor; +} +int StartingUp(object oPC) +{ + if(GetLocalInt(oPC, AI_ADD_PLUGIN)) + { + json jPlugin = JsonArray(); + jPlugin = JsonArrayInsert(jPlugin, JsonString("pi_crafting")); + jPlugin = JsonArrayInsert(jPlugin, JsonInt(FALSE)); + jPlugin = JsonArrayInsert(jPlugin, JsonString("Item Crafting")); + jPlugin = JsonArrayInsert(jPlugin, JsonString("isk_x2cweap")); + json jPlugins = GetLocalJson(oPC, AI_JSON_PLUGINS); + jPlugins = JsonArrayInsert(jPlugins, jPlugin); + SetLocalJson(oPC, AI_JSON_PLUGINS, jPlugin); + SetLocalInt(oPC, AI_PLUGIN_SET, TRUE); + return TRUE; + } + if(!GetLocalInt(oPC, AI_STARTING_UP)) return FALSE; + return TRUE; +} + diff --git a/src/module/nss/pi_debug.nss b/src/module/nss/pi_debug.nss new file mode 100644 index 0000000..6555882 --- /dev/null +++ b/src/module/nss/pi_debug.nss @@ -0,0 +1,200 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: pi_debug + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Plugin for debugging. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +#include "0i_player_target" +// Does startup check if the game has just been loaded. +int StartingUp(object oPC); +void main() +{ + object oPC = OBJECT_SELF; + if(StartingUp(oPC)) return; + // Set window to not save until it has been created. + //SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + //DelayCommand (0.5f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + string sText = " [Single player]"; + if(AI_SERVER) sText = " [Server]"; + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 500 / 73 + json jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, PHILOS_VERSION + sText, "lbl_version", 470.0f, 20.0f, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 500 / 129 + sText = "Module: " + GetModuleName() + " [" + GetTag(GetModule()) + "]"; + jRow = CreateLabel(JsonArray(), sText, "lbl_module_name", 470.0f, 20.0f, NUI_HALIGN_CENTER); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 ******************************************************************* 500 / 101 + sText = "Monster AI (nw_c2_default1): " + ResManGetAliasFor("nw_c2_default1", RESTYPE_NCS); + jRow = CreateLabel(JsonArray(), sText, "monster_1_ai", 470.0f, 20.0f, NUI_HALIGN_CENTER); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 ******************************************************************* 500 / 157 + sText = "Monster AI (j_ai_onheartbeat): " + ResManGetAliasFor("j_ai_onheartbeat", RESTYPE_NCS); + jRow = CreateLabel(JsonArray(), sText, "monster_2_ai", 470.0f, 20.0f, NUI_HALIGN_CENTER); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5 ******************************************************************* 500 / 213 + sText = "Associate AI (nw_ch_ac1): " + ResManGetAliasFor("nw_ch_ac1", RESTYPE_NCS); + jRow = CreateLabel(JsonArray(), sText, "henchman_ai", 470.0f, 20.0f, NUI_HALIGN_CENTER); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 6 ******************************************************************* 500 / 241 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Set NPC's scripts", "btn_npc_scripts", 150.0f, 20.0f, -1.0, "btn_npc_scripts_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Set Reputations", "btn_set_reputation", 150.0f, 20.0f, -1.0, "btn_set_reputation_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Clear Party Rep.", "btn_clear_reputation", 150.0f, 20.0f, -1.0, "btn_clear_reputation_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 7 ******************************************************************* 500 / 269 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Display Target Info", "btn_info", 150.0f, 20.0f, -1.0, "btn_info_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Dump Object to Json", "btn_obj_json", 150.0f, 20.0f, -1.0, "btn_obj_json_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "List Object Variables", "btn_obj_var", 150.0f, 20.0f, -1.0, "btn_obj_var_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 8 ******************************************************************* 500 / 297 jRow = JsonArray(); + jRow = CreateButton(JsonArray(), "Delete Variable", "btn_delete_var", 115.0f, 25.0f, -1.0, "btn_delete_var_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Set Variable", "btn_set_var", 115.0f, 25.0f, -1.0, "btn_set_var_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Get Variable", "btn_get_var", 115.0f, 25.0f, -1.0, "btn_get_var_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + json jCombo = JsonArrayInsert(JsonArray(), NuiComboEntry("int", 0)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("float", 1)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("string", 2)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("object", 3)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("location", 4)); + jRow = CreateCombo(jRow, jCombo, "cmb_var_type", 115.0, 25.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 9 ******************************************************************* 500 / 329 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, "Name:", "lbl_name", 40.0f, 20.0f); + jRow = CreateTextEditBox(jRow, "sPlaceHolder", "txt_var_name", 40, FALSE, 425.0f, 20.0f, "txt_var_name_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 10 ******************************************************************* 500 / 357 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, "Value:", "lbl_value", 40.0f, 20.0f); + jRow = CreateTextEditBox(jRow, "sPlaceHolder", "txt_var_value", 40, FALSE, 425.0f, 20.0f, "txt_var_value_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 11 ******************************************************************* 500 / 385 + // Make the debug creature group. + // Group Row 1 ******************************************************************* 500 / 385 + json jGroupRow = CreateButton(JsonArray(), "Debug Creature", "btn_debug_creature", 120.0f, 20.0f, -1.0, "btn_debug_creature_tooltip"); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButton(jGroupRow, "Clear Event Scripts", "btn_clear_events", 150.0f, 20.0f, -1.0, "btn_clear_events_tooltip"); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButton(jGroupRow, "Clear Debug", "btn_clear_debug", 120.0f, 20.0f, -1.0, "btn_clear_debug_tooltip"); + // Add group row to the group column. + json jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + float fHeight = 431.0; + // Group Row 2 ******************************************************************* 500 / --- + object oDebugCreature = GetLocalObject(oPC, "AI_RULE_DEBUG_CREATURE_OBJECT"); + if(GetIsObjectValid(oDebugCreature)) + { + string sScript = GetEventScript(oDebugCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT); + if(sScript == "nw_c2_default1") sText = GetName(oDebugCreature) + " is using monster AI scripts (" + sScript + ")."; + else if(sScript == "nw_ch_ac1") sText = GetName(oDebugCreature) + " is using associate AI scripts (" + sScript + ")."; + else if(sScript == "xx_pc_1_hb") sText = GetName(oDebugCreature) + " is using player AI scripts (" + sScript + ")."; + else if(sScript == "0e_id_events") sText = GetName(oDebugCreature) + " is using Infinite Dungeons AI scripts (" + sScript + ")."; + else if(sScript == "0e_prc_id_events") sText = GetName(oDebugCreature) + " is using PRC Infinite Dungeons AI scripts (" + sScript + ")."; + else sText = GetName(oDebugCreature) + " is using unknown AI scripts (" + sScript + ")."; + jGroupRow = CreateLabel(JsonArray(), sText, "debug_info", 455.0f, 20.0f, NUI_HALIGN_CENTER); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + fHeight = fHeight + 28; + } + // Group Row 3 ******************************************************************* 500 / --- + sText = GetLocalString(GetModule(), AI_RULE_DEBUG_CREATURE); + if(sText != "") sText = sText + " is sending AI debug to the log file."; + else sText = "Nothing is sending AI debug to the log file."; + jGroupRow = CreateLabel(JsonArray(), sText, "debug_log", 455.0f, 20.0f, NUI_HALIGN_CENTER); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + fHeight = fHeight + 28; + // Add group to the row. + jRow = JsonArrayInsert(JsonArray(), NuiGroup(NuiCol(jGroupCol))); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sName = GetName(oPC); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, "pi_debug_nui", sName + " PEPS Debug Menu", + -1.0, -1.0, 500.0f, fHeight + 12.0f, FALSE, FALSE, TRUE, FALSE, TRUE, "pe_debug"); + // Set all binds, events, and watches. + // Row 1 - Version label. + // Row 2 Module Name. + // Row 3 - 5 Script locations. + // Row 6 + NuiSetBind(oPC, nToken, "btn_npc_scripts_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_npc_scripts_tooltip", JsonString(" Forces NPC to use Philos AI scripts!")); + NuiSetBind(oPC, nToken, "btn_set_reputation_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_set_reputation_tooltip", JsonString(" Sets a creatures faction to neutral for all standard factions.")); + NuiSetBind(oPC, nToken, "btn_clear_reputation_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_reputation_tooltip", JsonString(" Clears the party's reputation with creature's faction.")); + // Row 7 + NuiSetBind(oPC, nToken, "btn_info_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_info_tooltip", JsonString(" Displays a target object's information to the log screen.")); + NuiSetBind(oPC, nToken, "btn_obj_json_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_obj_json_tooltip", JsonString(" Sends a Json Dump to the log file for the targeted object.")); + NuiSetBind(oPC, nToken, "btn_obj_var_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_obj_var_tooltip", JsonString(" Sends a list of variables for the targeted object.")); + // Row 8 + NuiSetBind(oPC, nToken, "btn_delete_var_tooltip", JsonString(" Delete the variable for the targeted object or Right click for the Module.")); + NuiSetBind(oPC, nToken, "btn_set_var_tooltip", JsonString(" Set the variable for the targeted object or Right click for the Module.")); + NuiSetBind(oPC, nToken, "btn_get_var_tooltip", JsonString(" Get the variable for the targeted object or Right click for the Module.")); + NuiSetBind(oPC, nToken, "cmb_var_type_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "cmb_var_type_selected", TRUE); + // Row 9 + NuiSetBind(oPC, nToken, "txt_var_name_event", JsonBool(TRUE)); + NuiSetBindWatch (oPC, nToken, "txt_var_name", TRUE); + NuiSetBind(oPC, nToken, "txt_var_name_tooltip", JsonString(" Name of the variable we are setting.")); + // Row 10 + NuiSetBind(oPC, nToken, "txt_var_value_event", JsonBool(TRUE)); + NuiSetBindWatch (oPC, nToken, "txt_var_value", TRUE); + NuiSetBind(oPC, nToken, "txt_var_value_tooltip", JsonString(" The value to set on the variable, Objects/Locations will need to be selected.")); + // Row 11 + NuiSetBind(oPC, nToken, "btn_debug_creature_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_debug_creature_tooltip", JsonString(" Sets target creature to send AI debug to the log file.")); + NuiSetBind(oPC, nToken, "btn_clear_events_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_events_tooltip", JsonString(" Sets a creature's event scripts to default.")); + NuiSetBind(oPC, nToken, "btn_clear_debug_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_debug_tooltip", JsonString(" Clears a creature from sending AI debug to the log file.")); +} +int StartingUp(object oPC) +{ + if(GetLocalInt(oPC, AI_ADD_PLUGIN)) + { + json jPlugin = JsonArray(); + jPlugin = JsonArrayInsert(jPlugin, JsonString("pi_debug")); + jPlugin = JsonArrayInsert(jPlugin, JsonInt(FALSE)); + jPlugin = JsonArrayInsert(jPlugin, JsonString("Debug Menu")); + jPlugin = JsonArrayInsert(jPlugin, JsonString("dm_tagsearch")); + json jPlugins = GetLocalJson(oPC, AI_JSON_PLUGINS); + jPlugins = JsonArrayInsert(jPlugins, jPlugin); + SetLocalJson(oPC, AI_JSON_PLUGINS, jPlugin); + SetLocalInt(oPC, AI_PLUGIN_SET, TRUE); + return TRUE; + } + if(!GetLocalInt(oPC, AI_STARTING_UP)) return FALSE; + return TRUE; +} + diff --git a/src/module/nss/pi_forcerest.nss b/src/module/nss/pi_forcerest.nss new file mode 100644 index 0000000..dfabb34 --- /dev/null +++ b/src/module/nss/pi_forcerest.nss @@ -0,0 +1,70 @@ +#include "0i_menus" +// Does startup check if the game has just been loaded. +int StartingUp(object oPC); +void ai_UpdateAssociateWidget(object oMaster, object oAssociate, int nUIToken) +{ + if(nUIToken) NuiDestroy(oMaster, nUIToken); + ai_CreateWidgetNUI(oMaster, oAssociate); + if(oMaster != oAssociate) + { + nUIToken = NuiFindWindow(oMaster, "pc" + AI_WIDGET_NUI); + if(nUIToken) + { + NuiDestroy(oMaster, nUIToken); + ai_CreateWidgetNUI(oMaster, oMaster); + } + } +} +void main() +{ + object oPC = OBJECT_SELF; + if(StartingUp(oPC)) return; + ForceRest(oPC); + DeleteLocalInt(oPC, "HF_REST_LAST_TIME"); + int nIndex; + int nMaxHenchman = GetMaxHenchmen(); + object oAssociate; + for(nIndex = 1;nIndex <= nMaxHenchman; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + ForceRest(oAssociate); + DeleteLocalInt(oAssociate, "HF_REST_LAST_TIME"); + if(ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST)) + { + DelayCommand(1.0, ai_HenchmanCastDefensiveSpells(oAssociate, oPC)); + } + if(AI_HENCHMAN_WIDGET) + { + // Update widget for spell widget. + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + int nUIToken = NuiFindWindow(oPC, sAssociateType + AI_WIDGET_NUI); + if(nUIToken) DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate, nUIToken)); + else + { + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType)) + { + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate, 0)); + } + } + } + } +} +int StartingUp(object oPC) +{ + if(GetLocalInt(oPC, AI_ADD_PLUGIN)) + { + json jPlugin = JsonArray(); + jPlugin = JsonArrayInsert(jPlugin, JsonString("pi_forcerest")); + jPlugin = JsonArrayInsert(jPlugin, JsonInt(FALSE)); + jPlugin = JsonArrayInsert(jPlugin, JsonString("Force Rest")); + jPlugin = JsonArrayInsert(jPlugin, JsonString("ir_rest")); + json jPlugins = GetLocalJson(oPC, AI_JSON_PLUGINS); + jPlugins = JsonArrayInsert(jPlugins, jPlugin); + SetLocalJson(oPC, AI_JSON_PLUGINS, jPlugin); + SetLocalInt(oPC, AI_PLUGIN_SET, TRUE); + return TRUE; + } + if(!GetLocalInt(oPC, AI_STARTING_UP)) return FALSE; + return TRUE; +} + diff --git a/src/module/nss/pi_henchmen.nss b/src/module/nss/pi_henchmen.nss new file mode 100644 index 0000000..5119039 --- /dev/null +++ b/src/module/nss/pi_henchmen.nss @@ -0,0 +1,209 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: pi_henchmen +//////////////////////////////////////////////////////////////////////////////// + Executable plug in script for Philos Module Extentions. + + UI to save a players as Henchmen. +*/////////////////////////////////////////////////////////////////////////////// +#include "pinc_henchmen" +// Does startup check if the game has just been loaded. +int StartingUp(object oPC); +// Inserts base classes to an array for a combo box. +json JArrayInsertBaseClasses(); +void main() +{ + object oPC = OBJECT_SELF; + if(StartingUp(oPC)) return; + // Set window to not save until it has been created. + SetLocalInt (oPC, "AI_NO_NUI_SAVE", TRUE); + DelayCommand (0.5f, DeleteLocalInt (oPC, "AI_NO_NUI_SAVE")); + // Row 1 (Buttons) ********************************************************* 775 / 73 + json jRow = CreateButtonSelect(JsonArray(), "Party 1", "btn_party1", 90.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButtonSelect(jRow, "Party 2", "btn_party2", 90.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButtonSelect(jRow, "Party 3", "btn_party3", 90.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButtonSelect(jRow, "Party 4", "btn_party4", 90.0f, 20.0f); + jRow = CreateButtonSelect(jRow, "Party 5", "btn_party5", 90.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButtonSelect(jRow, "Party 6", "btn_party6", 90.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButtonSelect(jRow, "Party 7", "btn_party7", 90.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButtonSelect(jRow, "Party 8", "btn_party8", 90.0f, 20.0f); + // Add the row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 (Options)********************************************************** 775 / 101 + jRow = CreateButton(JsonArray(), "Clear Party", "btn_clear_party", 120.0f, 20.0f, -1.0, "btn_clear_party_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Party Join", "btn_join_party", 120.0f, 20.0f, -1.0, "btn_join_party_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButtonSelect(jRow, "Create NPC Henchman", "btn_npc_henchman", 200.0f, 20.0f, "btn_npc_henchman_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Save Party", "btn_save_party", 120.0f, 20.0f, -1.0, "btn_save_party_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Remove Party", "btn_remove_party", 120.0f, 20.0f, -1.0, "btn_remove_party_tooltip"); + // Add the row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 (Names and List titles) ******************************************* 775 / 124 + jRow = CreateLabel(JsonArray(), "", "lbl_save_char", 150.0, 15.0, 0, 0); + jRow = CreateLabel(jRow, "", "lbl_save_list", 200.0, 15.0, 0, 0); + jRow = CreateLabel(jRow, "In game party", "lbl_game_list", 200.0, 15.0, 0, 0); + jRow = CreateLabel(jRow, "", "lbl_game_char", 150.0, 15.0, 0, 0); + // Add the row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 (List Characters) ************************************************* 775 / 488 (364) + // Saved Characters for Party # + // ***** Adding character saved group next to the button list ************** + json jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jGroupRow = CreateImage(jGroupRow, "", "img_saved_portrait", NUI_ASPECT_EXACTSCALED, NUI_HALIGN_CENTER, NUI_VALIGN_TOP, 128.0, 200.0, 0.0); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + json jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "", "lbl_saved_stats", 150.0, 15.0, 0, 0, 0.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "", "lbl_saved_classes", 150.0, 15.0, 0, 0, 0.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateButton(JsonArray(), "", "btn_saved_join", 75.0, 20.0); + jGroupRow = CreateButton(jGroupRow, "Remove", "btn_saved_remove", 75.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + //jGroupRow = JsonArray(); + //CreateButton(jGroupRow, "Edit", "btn_saved_edit", 150.0, 20.0); + //jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jRow = JsonArrayInsert(JsonArray(), NuiGroup(NuiCol(jGroupCol))); + // Create the button template for the List. + json jButton = NuiId(NuiButton(NuiBind ("btns_saved_char")), "btn_saved_char"); + json jList = JsonArrayInsert(JsonArray (), NuiListTemplateCell(jButton, 170.0, TRUE)); + // Create the list with the template. + jRow = CreateList(jRow, jList, "btns_saved_char", 25.0, 200.0, 325.0); + // Current Characters. + // Create the button template for the List. + jButton = NuiId(NuiButton(NuiBind ("btns_cur_char")), "btn_cur_char"); + jList = JsonArrayInsert(JsonArray (), NuiListTemplateCell(jButton, 170.0, TRUE)); + // Create the list with the template. + jRow = CreateList(jRow, jList, "btns_cur_char", 25.0, 200.0, 325.0); + // ***** Adding character current group next to the button list ************ + jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jGroupRow = CreateImage(jGroupRow, "", "img_cur_portrait", NUI_ASPECT_EXACTSCALED, NUI_HALIGN_CENTER, NUI_VALIGN_TOP, 128.0, 200.0, 0.0); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "", "lbl_cur_stats", 150.0, 15.0, 0, 0, 0.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "", "lbl_cur_classes", 150.0, 15.0, 0, 0, 0.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateButton(JsonArray(), "", "btn_cur_save", 75.0, 20.0); + jGroupRow = CreateButton(jGroupRow, "Remove", "btn_cur_remove", 75.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateButton(JsonArray(), "Edit", "btn_cur_edit", 150.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jRow = JsonArrayInsert(jRow, NuiGroup(NuiCol(jGroupCol))); + // Add the row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Set the layout of the window. + json jLayout = NuiCol(jCol); + // Get the window location to restore it from the database. + CheckHenchmanDataAndInitialize(oPC, "0"); + json jData = GetHenchmanDbJson(oPC, "henchman", "0"); + json jGeometry = JsonObjectGet(jData, "henchman_nui"); + float fX = JsonGetFloat(JsonObjectGet(jGeometry, "x")); + float fY = JsonGetFloat(JsonObjectGet(jGeometry, "y")); + if(fX == 0.0 && fY == 0.0) + { + fX = -1.0; + fY = -1.0; + } + string sName = GetName(oPC); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow (oPC, jLayout, "henchman_nui", sName + " party", + fX, fY, 775.0, 488.0, FALSE, FALSE, TRUE, FALSE, TRUE, "pe_henchmen"); + // Lets set MaxHenchman here. + if(GetMaxHenchmen() < 6) SetMaxHenchmen(6); + // Setup watch for saving location. + NuiSetBindWatch (oPC, nToken, "window_geometry", TRUE); + // Set the elements to show events. + NuiSetBind(oPC, nToken, "btn_save_pc_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_current_party_event", JsonBool (TRUE)); + string sParty = GetHenchmanDbString(oPC, "henchname", "0"); + if(sParty == "") + { + SetHenchmanDbString(oPC, "henchname", "1", "0"); + sParty = "1"; + } + // Set the party # buttons. + int nIndex; + string sIndex; + for(nIndex = 1; nIndex < 9; nIndex++) + { + sIndex = IntToString(nIndex); + if(sParty == sIndex) NuiSetBind(oPC, nToken, "btn_party" + sIndex, JsonBool(TRUE)); + else NuiSetBind(oPC, nToken, "btn_party" + sIndex, JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_party" + sIndex + "_event", JsonBool (TRUE)); + } + NuiSetBind(oPC, nToken, "btn_npc_henchman_event", JsonBool(TRUE)); + string sText = " Select a creature to copy and have them join you."; + NuiSetBind(oPC, nToken, "btn_npc_henchman_tooltip", JsonString(sText)); + // ********** Saved Henchman in party # ********* + nIndex = 0; + int nSlot, nMaxHenchman = AI_MAX_HENCHMAN + 1; + json jButtons = JsonArray(); + string sFirstHenchman, sButtonText; + json jNPCs, jNPC; + // Add saved party members from sParty to the button list. + while(nIndex < nMaxHenchman) + { + sIndex = IntToString(nIndex); + sButtonText = GetHenchmanDbString(oPC, "henchname", sParty + sIndex); + if(sButtonText != "") + { + jButtons = JsonArrayInsert(jButtons, JsonString(sButtonText)); + SetHenchmanDbString(oPC, "slot", sParty + IntToString(nSlot++), sParty + sIndex); + } + nIndex++; + } + // Add the buttons to the list. + NuiSetBind(oPC, nToken, "btns_saved_char", jButtons); + // Set up button lables for henchman. + NuiSetBind(oPC, nToken, "lbl_save_list_label", JsonString("Party Save " + sParty)); + AddSavedCharacterInfo(oPC, nToken, sParty); + // ********** Current Party ********* + NuiSetBind(oPC, nToken, "btn_current_party", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_party", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "lbl_save_char", JsonBool(TRUE)); + // Set up button labels for henchman. + NuiSetBind(oPC, nToken, "btn_join_save_label", JsonString("Save")); + nIndex = 0; + jButtons = JsonArray(); + object oPartyMember, oCharacter = OBJECT_INVALID; + // Add current party members to the button list. + while(nIndex < AI_MAX_HENCHMAN) + { + if(nIndex == 0) oPartyMember = oPC; + else oPartyMember = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oPartyMember != OBJECT_INVALID) jButtons = JsonArrayInsert(jButtons, JsonString(GetName(oPartyMember))); + else break; + nIndex++; + } + // Add the buttons to the list. + NuiSetBind(oPC, nToken, "btns_cur_char", jButtons); + AddCurrentCharacterInfo(oPC, nToken, sParty); +} +int StartingUp(object oPC) +{ + if(GetLocalInt(oPC, AI_ADD_PLUGIN)) + { + json jPlugin = JsonArray(); + jPlugin = JsonArrayInsert(jPlugin, JsonString("pi_henchmen")); + jPlugin = JsonArrayInsert(jPlugin, JsonInt(FALSE)); + jPlugin = JsonArrayInsert(jPlugin, JsonString("Henchmen Menu")); + jPlugin = JsonArrayInsert(jPlugin, JsonString("dm_creator")); + json jPlugins = GetLocalJson(oPC, AI_JSON_PLUGINS); + jPlugins = JsonArrayInsert(jPlugins, jPlugin); + SetLocalJson(oPC, AI_JSON_PLUGINS, jPlugin); + SetLocalInt(oPC, AI_PLUGIN_SET, TRUE); + return TRUE; + } + if(!GetLocalInt(oPC, AI_STARTING_UP)) return FALSE; + return TRUE; +} + diff --git a/src/module/nss/pi_test.nss b/src/module/nss/pi_test.nss new file mode 100644 index 0000000..818da8c --- /dev/null +++ b/src/module/nss/pi_test.nss @@ -0,0 +1,103 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: pi_test + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Plugin for debugging. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +#include "0i_player_target" +// Does startup check if the game has just been loaded. +int StartingUp(object oPC); +void main() +{ + object oPC = OBJECT_SELF; + if(StartingUp(oPC)) return; + string sText; + // Set window to not save until it has been created. + //SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + //DelayCommand (0.5f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 636 / 73 + json jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Level Up Creature", "btn_level", 150.0f, 20.0f, -1.0, "btn_level_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Gold for Creature", "btn_gold", 150.0f, 20.0f, -1.0, "btn_gold_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Force Rest Creature", "btn_rest", 150.0f, 20.0f, -1.0, "btn_rest_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "ID/UnID Item", "btn_id_item", 150.0f, 20.0f, -1.0, "btn_id_item_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 636 / 101 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Heal Creature", "btn_heal", 150.0f, 20.0f, -1.0, "btn_heal_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Clear Creature Actions", "btn_clear", 150.0f, 20.0f, -1.0, "btn_clear_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Kill Creature", "btn_kill", 150.0f, 20.0f, -1.0, "btn_kill_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Remove Object", "btn_remove", 150.0f, 20.0f, -1.0, "btn_remove_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 ******************************************************************* 636 / 101 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Jump To", "btn_jump", 150.0f, 20.0f, -1.0, "btn_jump_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Kill In Area", "btn_kill_area", 150.0f, 20.0f, -1.0, "btn_kill_area_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + float fHeight = 129.0; + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sName = GetName(oPC); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, "pi_test_nui", sName + " PEPS Testing Menu", + -1.0, -1.0, 636.0f, fHeight + 12.0f, FALSE, FALSE, TRUE, FALSE, TRUE, "pe_test"); + // Set all binds, events, and watches. + // Row 1 + NuiSetBind(oPC, nToken, "btn_level_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_tooltip", JsonString(" Give level to target creature.")); + NuiSetBind(oPC, nToken, "btn_gold_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_gold_tooltip", JsonString(" Give Gold to target creature.")); + NuiSetBind(oPC, nToken, "btn_rest_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_rest_tooltip", JsonString(" Force rest target creature.")); + NuiSetBind(oPC, nToken, "btn_id_item_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_id_item_tooltip", JsonString(" Identify or UnIdentify the target item.")); + // Row 2 + NuiSetBind(oPC, nToken, "btn_heal_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heal_tooltip", JsonString(" Heal target creature to max hitpoints.")); + NuiSetBind(oPC, nToken, "btn_clear_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_tooltip", JsonString(" Clears a creature's actions including combat.")); + NuiSetBind(oPC, nToken, "btn_kill_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_kill_tooltip", JsonString(" Kill target creature doing 10,000 magic damage.")); + NuiSetBind(oPC, nToken, "btn_remove_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_remove_tooltip", JsonString(" Remove selected object or the nearest object to ground selection.")); + // Row 3 + NuiSetBind(oPC, nToken, "btn_jump_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_jump_tooltip", JsonString(" Jump to target location.")); + NuiSetBind(oPC, nToken, "btn_kill_area_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_kill_area_tooltip", JsonString(" Kills all creatures in target area.")); +} +int StartingUp(object oPC) +{ + if(GetLocalInt(oPC, AI_ADD_PLUGIN)) + { + json jPlugin = JsonArray(); + jPlugin = JsonArrayInsert(jPlugin, JsonString("pi_test")); + jPlugin = JsonArrayInsert(jPlugin, JsonInt(FALSE)); + jPlugin = JsonArrayInsert(jPlugin, JsonString("Testing Menu")); + jPlugin = JsonArrayInsert(jPlugin, JsonString("ir_charsheet")); + json jPlugins = GetLocalJson(oPC, AI_JSON_PLUGINS); + jPlugins = JsonArrayInsert(jPlugins, jPlugin); + SetLocalJson(oPC, AI_JSON_PLUGINS, jPlugin); + SetLocalInt(oPC, AI_PLUGIN_SET, TRUE); + return TRUE; + } + if(!GetLocalInt(oPC, AI_STARTING_UP)) return FALSE; + return TRUE; +} + diff --git a/src/module/nss/pinc_henchmen.nss b/src/module/nss/pinc_henchmen.nss new file mode 100644 index 0000000..a67141a --- /dev/null +++ b/src/module/nss/pinc_henchmen.nss @@ -0,0 +1,1531 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: pinc_henchmen +//////////////////////////////////////////////////////////////////////////////// + Include file for Henchmen plug in scripts for Philos Module Extentions. + +Database Info: +Slot 0 - henchname = the save slot 1 - 8. +Slots 1 - 8 define the selections: + henchname = Saved character selected. + image = Current character selected. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +#include "nw_inc_gff" + +const string HENCHMAN_DATABASE = "philos_henchman_db"; +const string HENCHMAN_TABLE = "HENCHMAN_TABLE"; +const string HENCHMAN_TO_EDIT = "HENCHMAN_TO_EDIT"; + +// Creates the table and initializes if it needs to. +void CheckHenchmanDataAndInitialize(object oPC, string sSlot); +// Removes a henchan from the current slot. +void RemoveHenchmanDb(object oPC, string sSlot); +// sDataField should be one of the data fields for that table. +// sData is the string data to be saved. +void SetHenchmanDbString(object oPC, string sDataField, string sData, string sSlot); +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +string GetHenchmanDbString(object oPC, string sDataField, string sSlot); +// sDataField should be one of the data fields for that table. +// jData is the json data to be saved. +void SetHenchmanDbJson(object oPC, string sDataField, json jData, string sSlot); +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +json GetHenchmanDbJson(object oPC, string sDataField, string sSlot); +// sSlot is the slot to define this object in the database for this Slot## (# Party button and #1-6). +// oHenchman is the PC/Henchman to be saved. +void SetHenchmanDbObject(object oPC, object oHenchman, string sSlot); +// sSlot is the slot to define this object in the database for this Slot## (# Party button and #1-6). +// lLocationToSpawn will spawn the object at that location. +object GetHenchmanDbObject(object oPC, location lLocationToSpawn, string sSlot); +// Returns TRUE if the henchman with sName can join. +int GetJoinButtonActive(object oPC, string sName); +// Returns a two letter alignment string. +string GetAlignText(object oHenchman); +// Populates the Saved character group. +void AddSavedCharacterInfo(object oPC, int nToken, string sParty); +// Populates the Current character group. +void AddCurrentCharacterInfo(object oPC, int nToken, string sParty); +// Removes a henchman from your party. +void RemoveYourHenchman(object oPC, int nToken, string sParty); +// Removes all henchman from the party. +void RemoveWholeParty(object oPC, int nToken, string sParty); +// Saves a henchman in your party to the saved party #. +void SaveYourHenchman(object oPC, int nToken, string sParty); +// Saves the whole party to the saved party #. +void SaveWholeParty(object oPC, int nToken, string sParty); +// Saves the players current party to party #. +void SavedPartyJoin(object oPC, int nToken, string sParty); +// Saves a character in the players party to party #. +void SavedCharacterJoin(object oPC, int nToken, string sParty); +// Clears the players saved party #. +void SavedPartyCleared(object oPC, int nToken, string sParty); +// Sets oHenchmans scripts to the current AI. +void SetHenchmanScripts(object oHenchman); +// If a henchman does not have a LvlStatList this will create one for them. +// nLevels allows the creation of x levels for LvlStatList using the 1st class. +// 0 on nLevels makes the function build it based on current levels. +json CreateLevelStatList(json jHenchman, object oHenchman, object oPC, int nLevels = 0); +// Resets the character to level one in the first class. +object ResetCharacter(object oPC, object oHenchman); +// Creates a menu to edit a characters information. +void CreateCharacterEditGUIPanel(object oPC, object oAssociate); +// Creates a character description menu. +void CreateCharacterDescriptionNUI(object oPC, string sName, string sIcon, string sDescription); + +void CreateHenchmanDataTable () +{ + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, + "CREATE TABLE IF NOT EXISTS " + HENCHMAN_TABLE + " (" + + "name TEXT, " + + "slot TEXT, " + + "henchname TEXT, " + + "image TEXT, " + + "stats TEXT, " + + "classes TEXT, " + + "henchman TEXT, " + + "PRIMARY KEY(slot));"); + SqlStep (sql); +} +void CheckHenchmanDataAndInitialize(object oPC, string sSlot) +{ + string sPCName = ai_RemoveIllegalCharacters(GetPCPlayerName(oPC)); + string sQuery = "SELECT name FROM sqlite_master WHERE type ='table' AND name=@tableName;"; + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindString(sql, "@tableName", HENCHMAN_TABLE); + if(!SqlStep (sql)) CreateHenchmanDataTable(); + sQuery = "SELECT slot FROM " + HENCHMAN_TABLE + " Where name = @name AND slot = @slot;"; + sql = SqlPrepareQueryCampaign("philos_henchman_db", sQuery); + SqlBindString(sql, "@name", sPCName); + SqlBindString(sql, "@slot", sSlot); + if(!SqlStep(sql)) + { + sQuery = "INSERT INTO " + HENCHMAN_TABLE + "(name, slot, henchname, image, stats, classes " + + ", henchman) VALUES (@name, @slot, @henchname, @image, @stats, @classes, @henchman);"; + sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindString(sql, "@name", sPCName); + SqlBindString(sql, "@slot", sSlot); + SqlBindString(sql, "@henchname", ""); + SqlBindString(sql, "@image", ""); + SqlBindString(sql, "@stats", ""); + SqlBindString(sql, "@classes", ""); + SqlBindJson(sql, "@henchman", JsonObject()); + SqlStep(sql); + } +} +void RemoveHenchmanDb(object oPC, string sSlot) +{ + string sPCName = ai_RemoveIllegalCharacters(GetPCPlayerName(oPC)); + string sQuery = "DELETE FROM " + HENCHMAN_TABLE + " WHERE " + + "name = @name AND slot = @slot;"; + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindString(sql, "@name", sPCName); + SqlBindString(sql, "@slot", sSlot); + SqlStep(sql); +} +void SetHenchmanDbString(object oPC, string sDataField, string sData, string sSlot) +{ + string sPCName = ai_RemoveIllegalCharacters(GetPCPlayerName(oPC)); + string sQuery = "UPDATE " + HENCHMAN_TABLE + " SET " + sDataField + " = @data WHERE " + + "name = @name AND slot = @slot;"; + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindString(sql, "@data", sData); + SqlBindString(sql, "@name", sPCName); + SqlBindString(sql, "@slot", sSlot); + SqlStep(sql); +} +string GetHenchmanDbString(object oPC, string sDataField, string sSlot) +{ + string sPCName = ai_RemoveIllegalCharacters(GetPCPlayerName(oPC)); + string sQuery = "SELECT " + sDataField + " FROM " + HENCHMAN_TABLE + " WHERE " + + "name = @name AND slot = @slot;"; + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindString(sql, "@name", sPCName); + SqlBindString(sql, "@slot", sSlot); + if(SqlStep (sql)) return SqlGetString(sql, 0); + else return ""; +} +void SetHenchmanDbJson(object oPC, string sDataField, json jData, string sSlot) +{ + string sPCName = ai_RemoveIllegalCharacters(GetPCPlayerName(oPC)); + string sQuery = "UPDATE " + HENCHMAN_TABLE + " SET " + sDataField + + " = @data WHERE name = @name AND slot = @slot;"; + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindJson (sql, "@data", jData); + SqlBindString(sql, "@name", sPCName); + SqlBindString (sql, "@slot", sSlot); + SqlStep (sql); +} +json GetHenchmanDbJson(object oPC, string sDataField, string sSlot) +{ + string sPCName = ai_RemoveIllegalCharacters(GetPCPlayerName(oPC)); + string sQuery = "SELECT " + sDataField + " FROM " + HENCHMAN_TABLE + " WHERE " + + "name = @name AND slot = @slot;"; + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindString(sql, "@name", sPCName); + SqlBindString (sql, "@slot", sSlot); + if (SqlStep (sql)) return SqlGetJson (sql, 0); + else return JsonArray (); +} +void SetHenchmanDbObject(object oPC, object oHenchman, string sSlot) +{ + string sPCName = ai_RemoveIllegalCharacters(GetPCPlayerName(oPC)); + string sQuery = "UPDATE " + HENCHMAN_TABLE + " SET henchman = @henchman WHERE " + + "name = @name AND slot = @slot;"; + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindObject(sql, "@henchman", oHenchman); + SqlBindString(sql, "@name", sPCName); + SqlBindString(sql, "@slot", sSlot); + SqlStep(sql); +} +object GetHenchmanDbObject(object oPC, location lLocationToSpawn, string sSlot) +{ + string sPCName = ai_RemoveIllegalCharacters(GetPCPlayerName(oPC)); + string sQuery = "SELECT henchman FROM " + HENCHMAN_TABLE + " WHERE " + + "name = @name AND slot = @slot;"; + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindString(sql, "@name", sPCName); + SqlBindString (sql, "@slot", sSlot); + if (SqlStep (sql)) + { + json jHenchman = SqlGetJson(sql, 0); + string sTag = JsonGetString(GffGetString(jHenchman, "Tag")); + if(sTag == "") jHenchman = GffReplaceString(jHenchman, "Tag", "Hench_" + IntToString(Random(100))); + return JsonToObject(jHenchman, lLocationToSpawn, OBJECT_INVALID, TRUE); + } + return OBJECT_INVALID; +} +int GetJoinButtonActive(object oPC, string sName) +{ + if(sName == GetName(oPC)) return FALSE; + // Look for a free henchman slot, and if this henchman is already joined! + int nIndex = 1; + object oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + while(oHenchman != OBJECT_INVALID) + { + if(GetName(oHenchman) == sName) return FALSE; + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, ++nIndex); + } + return TRUE; +} +string GetAlignText(object oHenchman) +{ + string sAlign1, sAlign2; + switch (GetAlignmentLawChaos(oHenchman)) + { + case ALIGNMENT_LAWFUL : sAlign1 = "L"; break; + case ALIGNMENT_NEUTRAL : sAlign1 = "N"; break; + case ALIGNMENT_CHAOTIC : sAlign1 = "C"; break; + } + switch (GetAlignmentGoodEvil(oHenchman)) + { + case ALIGNMENT_GOOD : sAlign2 = "G"; break; + case ALIGNMENT_NEUTRAL : sAlign2 = "N"; break; + case ALIGNMENT_EVIL : sAlign2 = "E"; break; + } + string sAlign = sAlign1 + sAlign2; + if (sAlign == "NN") sAlign = "TN"; + return sAlign; +} +void AddSavedCharacterInfo(object oPC, int nToken, string sParty) +{ + string sHenchman = GetHenchmanDbString(oPC, "henchname", sParty); + // Add Henchman information. + if(sHenchman != "") + { + NuiSetBind (oPC, nToken, "btn_clear_party_event", JsonBool (TRUE)); + string sText = " Clears all characters from party " + sParty + "'s list!"; + NuiSetBind(oPC, nToken, "btn_clear_party_tooltip", JsonString(sText)); + NuiSetBind(oPC, nToken, "btn_join_party", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_join_party_event", JsonBool (TRUE)); + sText = " Saved characters from party " + sParty + " enter the game and join you."; + NuiSetBind(oPC, nToken, "btn_join_party_tooltip", JsonString(sText)); + // Setup the henchman window. + string sName = GetHenchmanDbString(oPC, "henchname", sParty + sHenchman); + string sImage = GetHenchmanDbString(oPC, "image", sParty + sHenchman); + string sStats = GetHenchmanDbString(oPC, "stats", sParty + sHenchman); + string sClasses = GetHenchmanDbString(oPC, "classes", sParty + sHenchman); + NuiSetBind(oPC, nToken, "lbl_save_char_label", JsonString(sName)); + NuiSetBind(oPC, nToken, "img_saved_portrait_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "img_saved_portrait_image", JsonString(sImage + "l")); + NuiSetBind(oPC, nToken, "lbl_saved_stats_label", JsonString(sStats)); + NuiSetBind(oPC, nToken, "lbl_saved_classes_label", JsonString(sClasses)); + NuiSetBind(oPC, nToken, "btn_saved_join_label", JsonString("Join")); + NuiSetBind(oPC, nToken, "btn_saved_join_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_saved_remove_event", JsonBool(TRUE)); + //NuiSetBind(oPC, nToken, "btn_saved_edit_event", JsonBool(TRUE)); + } + else + { + NuiSetBind(oPC, nToken, "lbl_save_char_label", JsonString("Empty Party")); + NuiSetBind (oPC, nToken, "btn_clear_party_event", JsonBool (FALSE)); + NuiSetBind (oPC, nToken, "btn_join_party", JsonBool (FALSE)); + NuiSetBind (oPC, nToken, "btn_join_party_event", JsonBool (FALSE)); + // Setup the henchman window. + NuiSetBind(oPC, nToken, "img_saved_portrait_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "img_saved_portrait_image", JsonString("po_hu_m_99_l")); + NuiSetBind(oPC, nToken, "lbl_saved_stats_label", JsonString("")); + NuiSetBind(oPC, nToken, "lbl_saved_classes_label", JsonString("")); + NuiSetBind(oPC, nToken, "btn_saved_join_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_saved_join_label", JsonString("Join")); + NuiSetBind(oPC, nToken, "btn_saved_remove_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_saved_edit_event", JsonBool(FALSE)); + } +} +void AddCurrentCharacterInfo(object oPC, int nToken, string sParty) +{ + string sHenchman = GetHenchmanDbString(oPC, "image", sParty); + if(sHenchman == "") + { + CheckHenchmanDataAndInitialize(oPC, sParty); + SetHenchmanDbString(oPC, "image", "0", sParty); + } + int nHenchman = StringToInt(sHenchman); + int nIndex = 0; + object oCharacter; + while(nIndex < AI_MAX_HENCHMAN) + { + if(nIndex == 0) oCharacter = oPC; + else oCharacter = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oCharacter == OBJECT_INVALID) + { + nIndex = 0; + oCharacter = oPC; + break; + } + else if(nHenchman == nIndex) break; + nIndex++; + } + // Adjust the party buttons. + int bParty = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, 1) != OBJECT_INVALID; + //NuiSetBind(oPC, nToken, "btn_save_party", JsonBool (bParty)); + NuiSetBind(oPC, nToken, "btn_save_party_event", JsonBool (bParty)); + //NuiSetBind(oPC, nToken, "btn_remove_party", JsonBool (bParty)); + NuiSetBind(oPC, nToken, "btn_remove_party_event", JsonBool (bParty)); + if(bParty) + { + string sText = " Saves all henchman from your current party to party " + sParty + "."; + NuiSetBind(oPC, nToken, "btn_save_party_tooltip", JsonString(sText)); + sText = " Removes all henchman from your current party!"; + NuiSetBind(oPC, nToken, "btn_remove_party_tooltip", JsonString(sText)); + } + // Setup the henchman window. + string sName = GetName(oCharacter); + string sImage = GetPortraitResRef(oCharacter); + string sStats = GetAlignText(oCharacter) + " "; + if(GetGender(oCharacter) == GENDER_MALE) sStats += "Male "; + else sStats += "Female "; + int nPosition = 1; + sStats += GetStringByStrRef (StringToInt (Get2DAString ("racialtypes", "Name", GetRacialType (oCharacter)))); + string sClasses = GetStringByStrRef (StringToInt (Get2DAString ("classes", "Short", GetClassByPosition (nPosition, oCharacter)))); + sClasses += " " + IntToString (GetLevelByPosition (nPosition, oCharacter)); + int nClass = GetClassByPosition(++nPosition, oCharacter); + while(nClass != CLASS_TYPE_INVALID) + { + sClasses += ", " + GetStringByStrRef (StringToInt (Get2DAString ("classes", "Short", nClass))); + sClasses += " " + IntToString (GetLevelByPosition (nPosition, oCharacter)); + nClass = GetClassByPosition(++nPosition, oCharacter); + } + NuiSetBind(oPC, nToken, "lbl_game_char_label", JsonString(sName)); + NuiSetBind(oPC, nToken, "img_cur_portrait_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "img_cur_portrait_image", JsonString(sImage + "l")); + NuiSetBind(oPC, nToken, "lbl_cur_stats_label", JsonString(sStats)); + NuiSetBind(oPC, nToken, "lbl_cur_classes_label", JsonString(sClasses)); + NuiSetBind(oPC, nToken, "btn_cur_save_label", JsonString("Save")); + NuiSetBind(oPC, nToken, "btn_cur_save_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cur_edit_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cur_remove_event", JsonBool(TRUE)); +} +object GetSelectedHenchman(object oPC, string sParty) +{ + string sHenchman = GetHenchmanDbString(oPC, "image", sParty); + if(sHenchman == "") + { + CheckHenchmanDataAndInitialize(oPC, sParty); + SetHenchmanDbString(oPC, "image", "0", sParty); + } + int nHenchman = StringToInt(sHenchman); + int nIndex = 0; + object oCharacter; + while(nIndex < AI_MAX_HENCHMAN) + { + if(nIndex == 0) oCharacter = oPC; + else oCharacter = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oCharacter == OBJECT_INVALID) + { + nIndex = 0; + oCharacter = oPC; + break; + } + else if(nHenchman == nIndex) break; + nIndex++; + } + return oCharacter; +} +void RemoveYourHenchman(object oPC, int nToken, string sParty) +{ + object oHenchman = GetSelectedHenchman(oPC, sParty); + if(oHenchman == oPC) ai_SendMessages("You cannot remove the player from the party!", AI_COLOR_RED, oPC); + else + { + RemoveHenchman(oPC, oHenchman); + AssignCommand(oHenchman, SetIsDestroyable(TRUE, FALSE, FALSE)); + NuiDestroy(oPC, NuiFindWindow(oPC, ai_GetAssociateType(oPC, oHenchman) + AI_WIDGET_NUI)); + DestroyObject(oHenchman); + } + ai_SendMessages(GetName(oHenchman) + " has been removed from the party!", AI_COLOR_GREEN, oPC); + NuiDestroy(oPC, nToken); + ExecuteScript("pi_henchmen", oPC); +} +void RemoveWholeParty(object oPC, int nToken, string sParty) +{ + int nIndex = AI_MAX_HENCHMAN; + object oHenchman; + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + while(nIndex > 0) + { + if(oHenchman != OBJECT_INVALID) + { + ai_SendMessages(GetName(oHenchman) + " has been remove from your Party.", AI_COLOR_YELLOW, oPC); + RemoveHenchman(oPC, oHenchman); + AssignCommand(oHenchman, SetIsDestroyable(TRUE, FALSE, FALSE)); + NuiDestroy(oPC, NuiFindWindow(oPC, ai_GetAssociateType(oPC, oHenchman) + AI_WIDGET_NUI)); + DestroyObject(oHenchman); + } + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, --nIndex); + } + ai_SendMessages("All of your henchman have been remove from the Party.", AI_COLOR_YELLOW, oPC); + NuiDestroy(oPC, nToken); + ExecuteScript("pi_henchmen", oPC); +} +void SaveYourHenchman(object oPC, int nToken, string sParty) +{ + int bPC, nIndex, nClass, nPosition, nMaxHenchman = AI_MAX_HENCHMAN + 1; + string sName, sIndex, sSlot, sStats, sClasses; + object oHenchman = GetSelectedHenchman(oPC, sParty); + if(oHenchman == oPC) + { + bPC = TRUE; + oHenchman = CopyObject(oPC, GetLocation(oPC), OBJECT_INVALID, "hench_" + IntToString(Random(100)), TRUE); + SetHenchmanScripts(oHenchman); + } + string sHenchmanName = GetName(oHenchman); + while(nIndex < nMaxHenchman) + { + sIndex = IntToString(nIndex); + sName = GetHenchmanDbString(oPC, "henchname", sParty + sIndex); + if(sName == sHenchmanName || sName == "") + { + sSlot = sParty + sIndex; + if(!bPC) RemoveHenchman(oPC, oHenchman); + // Special check for Infinite Dungeon plot givers to be changed into henchman. + if(GetStringLeft(GetLocalString(oHenchman, "sConversation"), 8) == "id1_plot") + { + DeleteLocalString(oHenchman, "sConversation"); + } + ChangeToStandardFaction(oHenchman, STANDARD_FACTION_DEFENDER); + json jHenchman = ObjectToJson(oHenchman, TRUE); + if(!bPC) AddHenchman(oPC, oHenchman); + else DestroyObject(oHenchman); + //string sPatch = "[{\"op\":\"replace\",\"path\":\"/FactionID/value\",\"value\":1}]"; + //json jPatch = JsonParse(sPatch); + //jHenchman = JsonPatch(jHenchman, jPatch); + CheckHenchmanDataAndInitialize(oPC, sSlot); + SetHenchmanDbString(oPC, "image", GetPortraitResRef(oHenchman), sSlot); + SetHenchmanDbString(oPC, "henchname", sHenchmanName, sSlot); + sStats = GetAlignText(oHenchman) + " "; + if(GetGender(oHenchman) == GENDER_MALE) sStats += "Male "; + else sStats += "Female "; + nPosition = 1; + sStats += GetStringByStrRef (StringToInt (Get2DAString ("racialtypes", "Name", GetRacialType (oHenchman)))); + sClasses = GetStringByStrRef (StringToInt (Get2DAString ("classes", "Short", GetClassByPosition (nPosition, oHenchman)))); + sClasses += " " + IntToString (GetLevelByPosition (nPosition, oHenchman)); + nClass = GetClassByPosition(++nPosition, oHenchman); + while(nClass != CLASS_TYPE_INVALID) + { + sClasses += ", " + GetStringByStrRef (StringToInt (Get2DAString ("classes", "Short", GetClassByPosition (nPosition, oHenchman)))); + sClasses += " " + IntToString (GetLevelByPosition (nPosition, oHenchman)); + nClass = GetClassByPosition(++nPosition, oHenchman); + } + SetHenchmanDbString(oPC, "stats", sStats, sSlot); + SetHenchmanDbString(oPC, "classes", sClasses, sSlot); + SetHenchmanDbJson(oPC, "henchman", jHenchman, sSlot); + if(sName == "") ai_SendMessages(sHenchmanName + " has been saved to the party.", AI_COLOR_GREEN, oPC); + else ai_SendMessages(sHenchmanName + " has replaced a copy of themselves in the party.", AI_COLOR_GREEN, oPC); + break; + } + nIndex++; + } +if(nIndex == nMaxHenchman) ai_SendMessages("This party is full!", AI_COLOR_RED, oPC); + NuiDestroy(oPC, nToken); + ExecuteScript("pi_henchmen", oPC); +} +void SaveWholeParty(object oPC, int nToken, string sParty) +{ + int nIndex = AI_MAX_HENCHMAN; + object oHenchman; + while(nIndex > 0) + { + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oHenchman != OBJECT_INVALID) + { + SetHenchmanDbString(oPC, "image", IntToString(nIndex), sParty); + SaveYourHenchman(oPC, nToken, sParty); + } + nIndex--; + } + ai_SendMessages("All of your henchman have been saved to Party " + sParty + ".", AI_COLOR_YELLOW, oPC); + SetHenchmanDbString(oPC, "henchname", "0", sParty); + NuiDestroy(oPC, nToken); + ExecuteScript("pi_henchmen", oPC); +} +void SavedPartyJoin(object oPC, int nToken, string sParty) +{ + int bFound, nIndex, nDBHenchman = 0; + json jHenchman; + object oHenchman, oLoadedHenchman; + string sDBHenchman = IntToString(nDBHenchman); + string sName = GetHenchmanDbString(oPC, "henchname", sParty + sDBHenchman); + while(sName != "") + { + bFound = FALSE; + nIndex = 1; + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + while(oHenchman != OBJECT_INVALID) + { + if(sName == GetName(oPC) || GetName(oHenchman) == sName) + { + bFound = TRUE; + break; + } + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, ++nIndex); + } + if(!bFound) + { + ai_SendMessages(sName + " has joined your party.", AI_COLOR_GREEN, oPC); + jHenchman = GetHenchmanDbJson(oPC, "henchman", sParty + sDBHenchman); + oLoadedHenchman = JsonToObject(jHenchman, GetLocation(oPC), OBJECT_INVALID, TRUE); + AddHenchman(oPC, oLoadedHenchman); + } + else ai_SendMessages(sName + " is already in your party!", AI_COLOR_RED, oPC); + sDBHenchman = IntToString(++nDBHenchman); + sName = GetHenchmanDbString(oPC, "henchname", sParty + sDBHenchman); + } + NuiDestroy(oPC, nToken); + ExecuteScript("pi_henchmen", oPC); +} +void SavedCharacterJoin(object oPC, int nToken, string sParty) +{ + int nIndex, bFound; + object oHenchman, oLoadedHenchman; + string sHenchman = GetHenchmanDbString(oPC, "henchname", sParty); + string sName = GetHenchmanDbString(oPC, "henchname", sParty + sHenchman); + nIndex = 1; + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + while(oHenchman != OBJECT_INVALID) + { + if(sName == GetName(oPC) || GetName(oHenchman) == sName) + { + bFound = TRUE; + break; + } + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, ++nIndex); + } + if(!bFound) + { + ai_SendMessages(sName + " has joined your party!", AI_COLOR_GREEN, oPC); + oLoadedHenchman = GetHenchmanDbObject(oPC, GetLocation(oPC), sParty + sHenchman); + AddHenchman(oPC, oLoadedHenchman); + NuiDestroy(oPC, nToken); + ExecuteScript("pi_henchmen", oPC); + } + else ai_SendMessages(sName + " is already in your party!", AI_COLOR_RED, oPC); +} +void SavedPartyCleared(object oPC, int nToken, string sParty) +{ + int nIndex, nMaxHenchman = AI_MAX_HENCHMAN + 1; + object oHenchman, oLoadedHenchman; + string sIndex = IntToString(nIndex); + string sName = GetHenchmanDbString(oPC, "henchname", sParty + sIndex); + while(nIndex < nMaxHenchman) + { + if(sName != "") + { + RemoveHenchmanDb(oPC, sParty + sIndex); + ai_SendMessages(sName + " has been cleared from the saved party " + sParty + ".", AI_COLOR_YELLOW, oPC); + } + sIndex = IntToString(++nIndex); + sName = GetHenchmanDbString(oPC, "henchname", sParty + sIndex); + } + SetHenchmanDbString(oPC, "henchname", "", sParty); + NuiDestroy(oPC, nToken); + ExecuteScript("pi_henchmen", oPC); +} +json CreateOptionsAlignment(object oHenchman, int nAlignType) +{ + json jAlignNameList = JsonArray(); + if(nAlignType == 0) + { + jAlignNameList = JsonArrayInsert(jAlignNameList, JsonString("Lawful")); + jAlignNameList = JsonArrayInsert(jAlignNameList, JsonString("Neutral")); + jAlignNameList = JsonArrayInsert(jAlignNameList, JsonString("Chaotic")); + } + else + { + jAlignNameList = JsonArrayInsert(jAlignNameList, JsonString("Good")); + jAlignNameList = JsonArrayInsert(jAlignNameList, JsonString("Neutral")); + jAlignNameList = JsonArrayInsert(jAlignNameList, JsonString("Evil")); + } + return jAlignNameList; +} +json CreateOptionsClasses(object oHenchman) +{ + int nIndex = 1, nClass; + string sClassName; + json jClassNameList = JsonArray(); + while(nIndex < 5) + { + nClass = GetClassByPosition(nIndex, oHenchman); + if(nClass == CLASS_TYPE_INVALID) sClassName = "Empty"; + else + { + sClassName = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + sClassName += " " + IntToString(GetLevelByClass(nClass, oHenchman)); + } + jClassNameList = JsonArrayInsert(jClassNameList, JsonString(sClassName)); + nIndex++; + } + return jClassNameList; +} +json jArrayInsertClasses() +{ + int nIndex, nClass, nMaxClass = Get2DARowCount("classes"); + string sClassName; + json jClassNameCombo = JsonArray(); + while(nIndex < nMaxClass) + { + if(Get2DAString("classes", "PlayerClass", nIndex) == "1") + { + sClassName = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nIndex))); + jClassNameCombo = JsonArrayInsert(jClassNameCombo, NuiComboEntry(sClassName, nClass)); + nClass++; + } + nIndex++; + } + return jClassNameCombo; +} +int GetSelectionByClass2DA(int nClass) +{ + int nIndex, nSelection, nMaxClass = Get2DARowCount("classes"); + while(nIndex < nMaxClass) + { + if(Get2DAString("classes", "PlayerClass", nIndex) == "1") + { + if(nClass == nIndex) return nSelection; + nSelection++; + } + nIndex++; + } + return -1; +} +int GetClassBySelection2DA(int nSelection) +{ + int nIndex, nClass, nMaxClass = Get2DARowCount("classes"); + while(nClass < nMaxClass) + { + if(Get2DAString("classes", "PlayerClass", nClass) == "1") + { + if(nSelection == nIndex) return nClass; + nIndex++; + } + nClass++; + } + return -1; +} +json ArrayInsertPackages(string sClass) +{ + int nIndex, nPackage, nMaxPackage = Get2DARowCount("packages"); + string sPackageName; + json jPackageNameCombo = JsonArray(); + while(nIndex < nMaxPackage) + { + if(Get2DAString("packages", "ClassID", nIndex) == sClass) + { + sPackageName = Get2DAString("packages", "Label", nIndex); + //GetStringByStrRef(StringToInt(Get2DAString("packages", "Name", nIndex))); + if(sPackageName != "Bad Strref" && sPackageName != "") + { + jPackageNameCombo = JsonArrayInsert(jPackageNameCombo, NuiComboEntry(sPackageName, nPackage)); + nPackage++; + } + } + nIndex++; + } + return jPackageNameCombo; +} +int GetSelectionByPackage2DA(string sClass, int nPackage) +{ + int nIndex, nSelection, nMaxPackage = Get2DARowCount("packages"); + string sPackageName; + while(nIndex < nMaxPackage) + { + if(Get2DAString("packages", "ClassID", nIndex) == sClass) + { + sPackageName = GetStringByStrRef(StringToInt(Get2DAString("packages", "Name", nIndex))); + if(sPackageName != "Bad Strref" && sPackageName != "") + { + if(nPackage == nIndex) return nSelection; + nSelection++; + } + } + nIndex++; + } + return -1; +} +int GetPackageBySelection2DA(string sClass, int nSelection) +{ + int nIndex, nPackage, nMaxPackage = Get2DARowCount("packages"); + while(nPackage < nMaxPackage) + { + if(Get2DAString("packages", "ClassID", nPackage) == sClass) + { + if(nSelection == nIndex) return nPackage; + nIndex++; + } + nPackage++; + } + return -1; +} +json ArrayInsertSoundSets(object oHenchman) +{ + int nIndex, nSoundSet, nSoundSetType, nMaxSets = Get2DARowCount("soundset"); + string sGender = IntToString(GetGender(oHenchman)); + string sSoundSetName, sResRef; + json jSoundSetNameCombo = JsonArray(); + while(nIndex < nMaxSets) + { + if(Get2DAString("soundset", "GENDER", nIndex) == sGender) + { + nSoundSetType = StringToInt(Get2DAString("soundset", "TYPE", nIndex)); + if(nSoundSetType < 5) + { + sSoundSetName = GetStringByStrRef(StringToInt(Get2DAString("soundset", "STRREF", nIndex))); + sResRef = GetStringLowerCase(Get2DAString("soundset", "RESREF", nIndex)); + if(GetStringLeft(sResRef, 4) == "vs_f") sSoundSetName += " (Full)"; + else if(GetStringLeft(sResRef, 4) == "vs_n") sSoundSetName += " (Part)"; + jSoundSetNameCombo = JsonArrayInsert(jSoundSetNameCombo, NuiComboEntry(sSoundSetName, nSoundSet)); + nSoundSet++; + } + } + nIndex++; + } + return jSoundSetNameCombo; +} +int GetSelectionBySoundSet2DA(object oHenchman, int nSoundSet) +{ + int nIndex, nSelection, nSoundSetType, nMaxSoundSet = Get2DARowCount("soundset"); + string sGender = IntToString(GetGender(oHenchman)); + while(nIndex < nMaxSoundSet) + { + if(Get2DAString("soundset", "GENDER", nIndex) == sGender) + { + nSoundSetType = StringToInt(Get2DAString("soundset", "TYPE", nIndex)); + if(nSoundSetType < 5) + { + if(nSoundSet == nIndex) return nSelection; + nSelection++; + } + } + nIndex++; + } + return -1; +} +int GetSoundSetBySelection2DA(object oHenchman, int nSelection) +{ + int nIndex, nSoundSet, nSoundSetType, nMaxSoundSet = Get2DARowCount("soundset"); + string sGender = IntToString(GetGender(oHenchman)); + while(nSoundSet < nMaxSoundSet) + { + if(Get2DAString("soundset", "GENDER", nSoundSet) == sGender) + { + nSoundSetType = StringToInt(Get2DAString("soundset", "TYPE", nSoundSet)); + if(nSoundSetType < 5) + { + if(nSelection == nIndex) return nSoundSet; + nIndex++; + } + } + nSoundSet++; + } + return -1; +} +void SetHenchmanScripts(object oHenchman) +{ + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "nw_ch_ac1"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_NOTICE, "nw_ch_ac2"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "nw_ch_ac3"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "nw_ch_ac4"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "nw_ch_ac5"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "nw_ch_ac6"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_DEATH, "nw_ch_ac7"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "nw_ch_ac8"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, "nw_ch_ac9"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_RESTED, "nw_ch_aca"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "nw_ch_acb"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "nw_ch_ace"); +} +object ai_AddHenchman(object oPC, json jHenchman, location lLocation, int nFamiliar, int nCompanion) +{ + jHenchman = GffReplaceResRef(jHenchman, "ScriptSpawn", ""); + object oHenchman = JsonToObject(jHenchman, lLocation, OBJECT_INVALID, TRUE); + AddHenchman(oPC, oHenchman); + DeleteLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE"); + string sAssociateType = ai_GetAssociateType(oPC, oHenchman); + NuiDestroy(oPC, NuiFindWindow(oPC, sAssociateType + AI_WIDGET_NUI)); + if(nFamiliar) SummonFamiliar(oHenchman); + if(nCompanion) SummonAnimalCompanion(oHenchman); + return oHenchman; +} +json CreateLevelStatList(json jHenchman, object oHenchman, object oPC, int nLevels = 0) +{ + int nClass = GetClassByPosition(1, oHenchman); + int nHitDie = StringToInt(Get2DAString("classes", "HitDie", nClass)); + SetLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE", TRUE); + json jSkill = JsonObject(); + jSkill = GffAddByte(jSkill, "Rank", 0); + jSkill = JsonObjectSet(jSkill, "__struct_id", JsonInt(0)); + json jSkillArray = JsonArray(); + int nNumOfSkills; + for(nNumOfSkills = Get2DARowCount("skills"); nNumOfSkills > 0; nNumOfSkills--) + { + jSkillArray = JsonArrayInsert(jSkillArray, jSkill); + } + json jLevel = JsonObject(); + jLevel = GffAddByte(jLevel, "EpicLevel", 0); + jLevel = GffAddList(jLevel, "FeatList", JsonArray()); + jLevel = GffAddByte(jLevel, "LvlStatClass", nClass); + jLevel = GffAddByte(jLevel, "LvlStatHitDie", nHitDie); + jLevel = GffAddList(jLevel, "SkillList", jSkillArray); + jLevel = GffAddWord(jLevel, "SkillPoints", 0); + jLevel = JsonObjectSet(jLevel, "__struct_id", JsonInt(0)); + json jLevelArray = JsonArray(); + if(nLevels == 0) nLevels = GetLevelByPosition(1, oHenchman); + for(nLevels; nLevels > 0; nLevels--) + { + jLevelArray = JsonArrayInsert(jLevelArray, jLevel); + } + WriteTimestampedLogEntry("pinc_henchmen, 813, Adding LvlStatList to " + GetName(oHenchman)); + return GffAddList(jHenchman, "LvlStatList", jLevelArray); +} +int CanSelectFeat(json jCreature, object oCreature, int nFeat, int nPosition = 1) +{ + // Check if all classes can use. + int n2DAStat = StringToInt(Get2DAString("feat", "ALLCLASSESCANUSE", nFeat)); + if(n2DAStat == 0) + { + int bPass, nClassFeat, nRow, nClass = GetClassByPosition(nPosition, oCreature); + string sClsFeat2DAName = Get2DAString("classes", "FeatsTable", nClass); + int nMaxRow = Get2DARowCount(sClsFeat2DAName); + while(nRow < nMaxRow) + { + nClassFeat = StringToInt(Get2DAString(sClsFeat2DAName, "FeatIndex", nRow)); + if(nClassFeat == nFeat) + { + bPass = TRUE; + break; + } + nRow++; + } + if(!bPass) return FALSE; + } + n2DAStat = StringToInt(Get2DAString("feat", "MINATTACKBONUS", nFeat)); + if(JsonGetInt(GffGetByte(jCreature, "BaseAttackBonus")) < n2DAStat) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "MINSTR", nFeat)); + if(JsonGetInt(GffGetByte(jCreature, "Str")) < n2DAStat) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "MINDEX", nFeat)); + if(JsonGetInt(GffGetByte(jCreature, "Dex")) < n2DAStat) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "MINCON", nFeat)); + if(JsonGetInt(GffGetByte(jCreature, "Con")) < n2DAStat) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "MININT", nFeat)); + if(JsonGetInt(GffGetByte(jCreature, "Int")) < n2DAStat) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "MINWIS", nFeat)); + if(JsonGetInt(GffGetByte(jCreature, "Wis")) < n2DAStat) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "MINCHA", nFeat)); + if(JsonGetInt(GffGetByte(jCreature, "Cha")) < n2DAStat) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "MINSPELLLVL", nFeat)); + int nSpellLevel = 0, nClass = GetClassByPosition(nPosition, oCreature); + string s2DAName = Get2DAString("classes", "SpellGainTable", nClass); + int nLevel = GetLevelByPosition(nPosition, oCreature); + if(s2DAName != "") + { + nSpellLevel = StringToInt(Get2DAString(s2DAName, "NumSpellLevels", nLevel - 1)) - 1; + } + if(nSpellLevel < n2DAStat) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "PREREQFEAT1", nFeat)); + if(n2DAStat > 0) + { + // ************************************** Add code to search jCreature's feats! + if(!GetHasFeat(n2DAStat, oCreature)) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "PREREQFEAT2", nFeat)); + if(!GetHasFeat(n2DAStat, oCreature)) return FALSE; + } + int nIndex; + while(nIndex < 5) + { + n2DAStat = StringToInt(Get2DAString("feat", "OrReqFeat" + IntToString(nIndex), nFeat)); + if(nIndex == 0 && n2DAStat == 0) break; + if(GetHasFeat(n2DAStat, oCreature)) break; + nIndex++; + if(nIndex == 5) return FALSE; + } + string s2DAStat = Get2DAString("feat", "REQSKILL", nFeat); + if(s2DAStat != "") + { + n2DAStat = StringToInt(s2DAStat); + int bCanUse; + if(Get2DAString("skills", "AllClassesCanUse", n2DAStat) == "1") bCanUse = TRUE; + else + { + string sClsSkill2DA = Get2DAString("classes", "SkillsTable", nClass); + int bPass, nClassSkill, nRow, nMaxRow = Get2DARowCount(sClsSkill2DA); + while(nRow < nMaxRow) + { + nClassSkill = StringToInt(Get2DAString(sClsSkill2DA, "SkillIndex", nRow)); + if(nClassSkill == n2DAStat) + { + bCanUse = TRUE; + break; + } + nRow++; + } + } + if(bCanUse) + { + int nSkillReq = StringToInt(Get2DAString("feat", "ReqSkillMinRanks", n2DAStat)); + // ************************** Add code to check jCreatures skills. + if(GetSkillRank(n2DAStat, oCreature, TRUE) < nSkillReq) return FALSE; + } + else return FALSE; + } + s2DAStat = Get2DAString("feat", "REQSKILL2", nFeat); + if(s2DAStat != "") + { + n2DAStat = StringToInt(s2DAStat); + int bCanUse; + if(Get2DAString("skills", "AllClassesCanUse", n2DAStat) == "1") bCanUse = TRUE; + else + { + string sClsSkill2DA = Get2DAString("classes", "SkillsTable", nClass); + int bPass, nClassSkill, nRow, nMaxRow = Get2DARowCount(sClsSkill2DA); + while(nRow < nMaxRow) + { + nClassSkill = StringToInt(Get2DAString(sClsSkill2DA, "SkillIndex", nRow)); + if(nClassSkill == n2DAStat) + { + bCanUse = TRUE; + break; + } + nRow++; + } + } + if(bCanUse) + { + int nSkillReq = StringToInt(Get2DAString("feat", "ReqSkillMinRanks2", n2DAStat)); + if(GetSkillRank(n2DAStat, oCreature, TRUE) < nSkillReq) return FALSE; + } + else return FALSE; + } + n2DAStat = StringToInt(Get2DAString("feat", "MinLevel", nFeat)); + if(n2DAStat > 0) + { + int bPass, nClassPosition, nPositionClass, nPositionLevel; + int nClassRequired = StringToInt(Get2DAString("feat", "MinLevelClass", nFeat)); + while(nClassPosition < AI_MAX_CLASSES_PER_CHARACTER) + { + // ***************************** Rework to check jCreature class list instead. + nPositionClass = GetClassByPosition(nClassPosition, oCreature); + if(nPositionClass == nClassRequired) + { + nPositionLevel = GetLevelByPosition(nClassPosition, oCreature); + if(nPositionLevel < n2DAStat) return FALSE; + else bPass = TRUE; + } + nClassPosition++; + } + if(!bPass) return FALSE; + } + n2DAStat = StringToInt(Get2DAString("feat", "MinFortSave", nFeat)); + if(JsonGetInt(GffGetChar(jCreature, "FortSaveThrow")) < n2DAStat) return FALSE; + s2DAStat = Get2DAString("feat", "PreReqEpic", nFeat); + if(s2DAStat == "1") return FALSE; + return TRUE; +} +json ResetFeats(json jHenchman, object oHenchman) +{ + int nLevel = 0; + // We remake the Feat list if the character doesn't have a level list! + json jFeatList = JsonArray(); + json jFeat; + int nRace = GetRacialType(oHenchman); + string sRace2DAName = Get2DAString("racialtypes", "FeatsTable", nRace); + // Give racial feats. + int nRaceRow, nRaceFeat; + int nRaceMaxRow = Get2DARowCount(sRace2DAName); + while(nRaceRow < nRaceMaxRow) + { + nRaceFeat = StringToInt(Get2DAString(sRace2DAName, "FeatIndex", nRaceRow)); + jFeat = JsonObject(); + jFeat = GffAddWord(jFeat, "Feat", nRaceFeat); + jFeat = JsonObjectSet(jFeat, "__struct_id", JsonInt(1)); + jFeatList = JsonArrayInsert(jFeatList, jFeat); + WriteTimestampedLogEntry("pinc_henchmen, 973, Adding racial feat: " + + Get2DAString("feat", "LABEL", nRaceFeat)); + nRaceRow++; + } + // Give class feats. + int nClass = GetClassByPosition(1, oHenchman); + string sGranted, sList; + string sClsFeat2DAName = Get2DAString("classes", "FeatsTable", nClass); + int nClassRow, nClassFeat, nClassMaxRow = Get2DARowCount(sClsFeat2DAName); + while(nClassRow < nClassMaxRow) + { + sGranted = Get2DAString(sClsFeat2DAName, "GrantedOnLevel", nClassRow); + if(sGranted == "1") + { + sList = Get2DAString(sClsFeat2DAName, "List", nClassRow); + if(sList == "3") + { + nClassFeat = StringToInt(Get2DAString(sClsFeat2DAName, "FeatIndex", nClassRow)); + jFeat = JsonObject(); + jFeat = GffAddWord(jFeat, "Feat", nClassFeat); + jFeat = JsonObjectSet(jFeat, "__struct_id", JsonInt(1)); + jFeatList = JsonArrayInsert(jFeatList, jFeat); + WriteTimestampedLogEntry("pinc_henchmen, 995, Adding class feat: " + + Get2DAString("feat", "LABEL", nClassFeat)); + } + } + nClassRow++; + } + // Give any bonus feats from package. + int nPackageFeat, nPackageRow; + string sBonusFeat2DAName = Get2DAString("classes", "BonusFeatsTable", nClass); + int nNumOfFeats = StringToInt(Get2DAString(sBonusFeat2DAName, "Bonus", nLevel)); + string sPackage2DAName = Get2DAString("packages", "FeatPref2DA", nClass); + int nPackageMaxRow = Get2DARowCount(sPackage2DAName); + // Give bonus feats based on the package. + nPackageRow = 0; + if(nNumOfFeats > 0) + { + while(nPackageRow < nPackageMaxRow) + { + nPackageFeat = StringToInt(Get2DAString(sPackage2DAName, "FeatIndex", nPackageRow)); + nClassRow = 0; + while(nClassRow < nClassMaxRow) + { + nClassFeat = StringToInt(Get2DAString(sClsFeat2DAName, "FeatIndex", nClassRow)); + if(nClassFeat == nPackageFeat) + { + sList = Get2DAString(sClsFeat2DAName, "List", nClassRow); + if((sList == "1" || sList == "2") && CanSelectFeat(jHenchman, oHenchman, nClassFeat)) + { + jFeat = JsonObject(); + jFeat = GffAddWord(jFeat, "Feat", nClassFeat); + jFeat = JsonObjectSet(jFeat, "__struct_id", JsonInt(1)); + jFeatList = JsonArrayInsert(jFeatList, jFeat); + WriteTimestampedLogEntry("pinc_henchmen, 1028, Adding class bonus feat: " + + Get2DAString("feat", "LABEL", nPackageFeat)); + nNumOfFeats--; + } + } + nClassRow++; + } + if(nNumOfFeats < 1) break; + nPackageRow++; + } + } + // Give picked feats from package. + nNumOfFeats = 1; + if(GetHasFeat(FEAT_QUICK_TO_MASTER, oHenchman)) nNumOfFeats++; + nPackageRow = 0; + while(nPackageRow < nPackageMaxRow) + { + nClassRow = 0; + nPackageFeat = StringToInt(Get2DAString(sPackage2DAName, "FeatIndex", nPackageRow)); + if(CanSelectFeat(jHenchman, oHenchman, nPackageFeat)) + { + jFeat = JsonObject(); + jFeat = GffAddWord(jFeat, "Feat", nPackageFeat); + jFeat = JsonObjectSet(jFeat, "__struct_id", JsonInt(1)); + jFeatList = JsonArrayInsert(jFeatList, jFeat); + WriteTimestampedLogEntry("pinc_henchmen, 1053, Adding character bonus feat: " + + Get2DAString("feat", "LABEL", nPackageFeat)); + nNumOfFeats--; + } + if(nNumOfFeats < 1) break; + nPackageRow++; + } + jHenchman = GffReplaceList(jHenchman, "FeatList", jFeatList); + return jHenchman; +} +json ResetSkills(json jHenchman, object oHenchman) +{ + // We remake the Skill List if the character doesn't have a level list! + int nClass = GetClassByPosition(1, oHenchman); + int nSkillPoints, nIntMod = GetAbilityModifier(ABILITY_INTELLIGENCE, oHenchman); + if(nIntMod > 0) nSkillPoints = nIntMod * 4; + if(GetRacialType(oHenchman) == RACIAL_TYPE_HUMAN) nSkillPoints += 4; + nSkillPoints += StringToInt(Get2DAString("classes", "SkillPointBase", nClass)) * 4; + int nMaxRanks = 5; + json jSkillList = JsonArray(); + json jSkill; + // Setup the Skill List. + int nIndex, nSkillMaxRow = Get2DARowCount("skills"); + for(nIndex = 0; nIndex < nSkillMaxRow; nIndex++) + { + jSkill = JsonObject(); + jSkill = GffAddByte(jSkill, "Rank", 0); + jSkill = JsonObjectSet(jSkill, "__struct_id", JsonInt(0)); + jSkillList = JsonArrayInsert(jSkillList, jSkill); + } + // Give skill points based on the package. + int nPackageSkill, nPackageRow, nCurrentRanks, bCrossClass, nClassRow, nNewRanks; + string sPackage2DAName = Get2DAString("packages", "SkillPref2DA", nClass); + int nPackageMaxRow = Get2DARowCount(sPackage2DAName); + string sClass2DAName = Get2DAString("classes", "SkillsTable", nClass); + int nClassMaxRow = Get2DARowCount(sClass2DAName); + nPackageRow = 0; + while(nPackageRow < nPackageMaxRow && nSkillPoints > 0) + { + nPackageSkill = StringToInt(Get2DAString(sPackage2DAName, "SkillIndex", nPackageRow)); + jSkill = JsonArrayGet(jSkillList, nPackageSkill); + nCurrentRanks = JsonGetInt(GffGetByte(jSkill, "Rank")); + nClassRow = 0; + while(nClassRow < nClassMaxRow) + { + if(nPackageSkill == StringToInt(Get2DAString(sClass2DAName, "SkillIndex", nClassRow))) + { + bCrossClass = Get2DAString(sClass2DAName, "ClassSkill", nClassRow) == "0"; + break; + } + nClassRow++; + } + if(bCrossClass) nNewRanks = (nMaxRanks / 2) - nCurrentRanks; + else nNewRanks = nMaxRanks - nCurrentRanks; + if(nNewRanks > nSkillPoints) nNewRanks = nSkillPoints; + if(nNewRanks > 0) + { + jSkill = GffReplaceByte(jSkill, "Rank", nCurrentRanks + nNewRanks); + jSkillList = JsonArraySet(jSkillList, nPackageSkill, jSkill); + WriteTimestampedLogEntry("pinc_henchmen, 1110, Adding " + IntToString(nNewRanks) + + " ranks to " + Get2DAString("skills", "Label", nPackageSkill)); + nSkillPoints -= nNewRanks; + } + nPackageRow++; + } + jHenchman = GffReplaceList(jHenchman, "SkillList", jSkillList); + return jHenchman; +} +json ResetSpellsKnown(json jClass, object oHenchman) +{ + int nClass = GetClassByPosition(1, oHenchman); + if(Get2DAString("classes", "SpellCaster", nClass) == "0") return jClass; + int nLevel = 0; + // We remake the Known spell list if the character doesn't have a level list! + json jKnownList, jMemorizedList; + json jSpell, jSpellsPerDayList; + int bMemorizesSpells = StringToInt(Get2DAString("classes", "MemorizesSpells", nClass)); + int bSpellBookRestricted = StringToInt(Get2DAString("classes", "SpellBookRestricted", nClass)); + string sSpellKnown2DAName = Get2DAString("classes", "SpellKnownTable", nClass); + string sSpellGained2DAName = Get2DAString("classes", "SpellGainTable", nClass); + string sSpellTableColumn = Get2DAString("classes", "SpellTableColumn", nClass); + string sSpellPackage2DAName = Get2DAString("packages", "SpellPref2DA", nClass); + int nPackageSpell, nPackageRow; + int nPackageMaxRow = Get2DARowCount(sSpellPackage2DAName); + int nKnownSpellIndex, nSpellsKnown, nAbility, nSpellLevel = 0; + string sKnownListName, sSpellLevel, sPackageSpellLevel, sAbility; + // Cycle through all spell levels and reset. + while(nSpellLevel < 10) + { + sSpellLevel = IntToString(nSpellLevel); + WriteTimestampedLogEntry("pinc_henchmen, 1143, Checking Spell Level: " + sSpellLevel); + // Recreate the 0th and 1st level based on the package. + if(nSpellLevel < 2 && bSpellBookRestricted) + { + // Spellbook restricted that don't have a SpellsKnown2DAName + // get to keep all 0th level spells so we skip them. Example:Wizard + if(nSpellLevel != 0 || sSpellKnown2DAName != "") + { + // Classes that are spell book restricted but don't have a SpellKnownTable + // get 3 spells + Ability Modifier worth of spells like a wizard. + if(sSpellKnown2DAName == "") + { + sAbility = Get2DAString("classes", "SpellCastingAbil", nClass); + if(sAbility == "INT") nAbility = ABILITY_INTELLIGENCE; + else if(sAbility == "WIS") nAbility = ABILITY_WISDOM; + else if(sAbility == "CHA") nAbility = ABILITY_CHARISMA; + nSpellsKnown = 3 + GetAbilityModifier(nAbility, oHenchman); + } + else + { + nSpellsKnown = StringToInt(Get2DAString(sSpellKnown2DAName, "SpellLevel" + sSpellLevel, nLevel)); + } + WriteTimestampedLogEntry("pinc_henchmen, 1165, nSpellsKnown: " + IntToString(nSpellsKnown)); + jKnownList = JsonArray(); + nPackageRow = 0; + while(nPackageRow < nPackageMaxRow && nSpellsKnown > 0) + { + nPackageSpell = StringToInt(Get2DAString(sSpellPackage2DAName, "SpellIndex", nPackageRow)); + sPackageSpellLevel = Get2DAString("spells", sSpellTableColumn, nPackageSpell); + if(sPackageSpellLevel == sSpellLevel) + { + jSpell = JsonObject(); + jSpell = GffAddWord(jSpell, "Spell", nPackageSpell); + jSpell = JsonObjectSet(jSpell, "__struct_id", JsonInt(3)); + jKnownList = JsonArrayInsert(jKnownList, jSpell); + WriteTimestampedLogEntry("pinc_henchmen, 1178, Adding known spell: " + + Get2DAString("spells", "LABEL", nPackageSpell)); + nSpellsKnown--; + } + nPackageRow++; + } + if(JsonGetLength(jKnownList) == 0) + { + jClass = GffRemoveList(jClass, "KnownList" + sSpellLevel); + WriteTimestampedLogEntry("pinc_henchmen, 1187, Removing KnownList" + sSpellLevel); + } + else if(JsonGetType(GffGetList(jClass, "KnownList" + sSpellLevel)) != JSON_TYPE_NULL) + { + jClass = GffReplaceList(jClass, "KnownList" + sSpellLevel, jKnownList); + } + else jClass = GffAddList(jClass, "KnownList" + sSpellLevel, jKnownList); + } + } + // Remove all other known spell levels and memorized levels. + else + { + jKnownList = GffGetList(jClass, "KnownList" + sSpellLevel); + if(JsonGetType(jKnownList) != JSON_TYPE_NULL) + { + jClass = GffRemoveList(jClass, "KnownList" + sSpellLevel); + WriteTimestampedLogEntry("pinc_henchmen, 1203, Removing KnownList" + sSpellLevel); + } + } + if(bMemorizesSpells) + { + jMemorizedList = GffGetList(jClass, "MemorizedList" + sSpellLevel); + if(JsonGetType(jMemorizedList) != JSON_TYPE_NULL) + { + jClass = GffRemoveList(jClass, "MemorizedList" + sSpellLevel); + WriteTimestampedLogEntry("pinc_henchmen, 1210, Removing MemorizedList" + sSpellLevel); + } + } + else + { + jSpellsPerDayList = GffGetList(jClass, "SpellsPerDayList"); + nSpellsKnown = StringToInt(Get2DAString(sSpellGained2DAName, "SpellLevel"+ sSpellLevel, nLevel)); + jSpell = JsonArrayGet(jSpellsPerDayList, nSpellLevel); + jSpell = GffReplaceByte(jSpell, "NumSpellsLeft", nSpellsKnown); + jSpellsPerDayList = JsonArraySet(jSpellsPerDayList, nSpellLevel, jSpell); + jClass = GffReplaceList(jClass, "SpellsPerDayList", jSpellsPerDayList); + WriteTimestampedLogEntry("pinc_henchmen, 1223, Setting SpellsPerDay to " + + IntToString(nSpellsKnown)); + } + nSpellLevel++; + } + return jClass; +} +object ResetCharacter(object oPC, object oHenchman) +{ + SetLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE", TRUE); + RemoveHenchman(oPC, oHenchman); + json jHenchman = ObjectToJson(oHenchman, TRUE); + json jClassList = GffGetList(jHenchman, "ClassList"); + json jClass = JsonArrayGet(jClassList, 0); + // Set the Class list to the first class only and put at level 1. + int nClass = JsonGetInt(JsonObjectGet(jClass, "Class")); + jClass = GffReplaceShort(jClass, "ClassLevel", 1); + // Delete extra classes. + int nClassIndex = JsonGetLength(jClassList) - 1; + while(nClassIndex > 0) + { + jClassList = JsonArrayDel(jClassList, nClassIndex--); + } + int nHitPoints = StringToInt(Get2DAString("classes", "HitDie", nClass)); + int nMod = JsonGetInt(GffGetByte(jHenchman, "Con")); + if(nMod > 9) nHitPoints += (nMod - 10) / 2; + else nHitPoints += (nMod - 11) / 2; + jHenchman = GffReplaceShort(jHenchman, "CurrentHitPoints", nHitPoints); + jHenchman = GffReplaceShort(jHenchman, "HitPoints", nHitPoints); + jHenchman = GffReplaceShort(jHenchman, "MaxHitPoints", nHitPoints); + jHenchman = GffReplaceDword(jHenchman, "Experience", 0); + jHenchman = GffReplaceFloat(jHenchman, "ChallengeRating", 1.0); + string s2DA = Get2DAString("classes", "AttackBonusTable", nClass); + int nAtk = StringToInt(Get2DAString(s2DA, "BAB", 0)); + jHenchman = GffReplaceByte(jHenchman, "BaseAttackBonus", nAtk); + s2DA = Get2DAString("classes", "SavingThrowTable", nClass); + int nSave = StringToInt(Get2DAString(s2DA, "FortSave", 0)); + jHenchman = GffReplaceChar(jHenchman, "FortSaveThrow", nSave); + nSave = StringToInt(Get2DAString(s2DA, "RefSave", 0)); + jHenchman = GffReplaceChar(jHenchman, "RefSaveThrow", nSave); + nSave = StringToInt(Get2DAString(s2DA, "WillSave", 0)); + jHenchman = GffReplaceChar(jHenchman, "WillSaveThrow", nSave); + json jLvlStatList = GffGetList(jHenchman, "LvlStatList"); + if(JsonGetType(jLvlStatList) != JSON_TYPE_NULL) + { + WriteTimestampedLogEntry("pinc_henchmen 1275, jLvlStatList: " + JsonDump(jLvlStatList, 4)); + int nLevel = 1, nLevelTrack = 1; + int nAbilityStatIncrease, nAbility; + string sAbility; + json jAbility; + json jLevel = JsonArrayGet(jLvlStatList, nLevel); + while(JsonGetType(jLevel) != JSON_TYPE_NULL) + { + WriteTimestampedLogEntry("inc_henchmen, 1297, Checking level " + IntToString(nLevelTrack)); + // Remove all Ability score increases for each level from ability scores. + jAbility = GffGetByte(jLevel, "LvlStatAbility"); + if(JsonGetType(jAbility) != JSON_TYPE_NULL) + { + nAbilityStatIncrease = JsonGetInt(jAbility); + if(nAbilityStatIncrease == ABILITY_STRENGTH) sAbility = "Str"; + if(nAbilityStatIncrease == ABILITY_DEXTERITY) sAbility = "Dex"; + if(nAbilityStatIncrease == ABILITY_CONSTITUTION) sAbility = "Con"; + if(nAbilityStatIncrease == ABILITY_INTELLIGENCE) sAbility = "Int"; + if(nAbilityStatIncrease == ABILITY_WISDOM) sAbility = "Wis"; + if(nAbilityStatIncrease == ABILITY_CHARISMA) sAbility = "Cha"; + nAbility = JsonGetInt(GffGetByte(jHenchman, sAbility)) - 1; + jHenchman = GffReplaceByte(jHenchman, sAbility, nAbility); + WriteTimestampedLogEntry("pinc_henchmen, 1314, Removing " + sAbility + " level bonus ability score point."); + } + jLvlStatList = JsonArrayDel(jLvlStatList, nLevel); + // Note: nLevel is not incremented since we are removing the previous level. + // there for when we get the same level again its the next level! + jLevel = JsonArrayGet(jLvlStatList, nLevel); + //SendMessageToPC(oPC, "jLvlStatList: " + JsonDump(jLvlStatList, 4)); + nLevelTrack++; + } + jHenchman = GffRemoveList(jHenchman, "LvlStatList"); + } + jHenchman = CreateLevelStatList(jHenchman, oHenchman, oPC, 1); + jHenchman = ResetSkills(jHenchman, oHenchman); + jHenchman = ResetFeats(jHenchman, oHenchman); + jClass = ResetSpellsKnown(jClass, oHenchman); + jClassList = JsonArraySet(jClassList, 0, jClass); + jHenchman = GffReplaceList(jHenchman, "ClassList", jClassList); + //WriteTimestampedLogEntry("pinc_henchmen 1397, jHenchman: " + JsonDump(jHenchman, 4)); + location lLocation = GetLocation(oHenchman); + int nFamiliar, nCompanion; + object oCompanion = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oHenchman); + if(oCompanion != OBJECT_INVALID) nFamiliar = TRUE; + oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oHenchman); + if(oCompanion != OBJECT_INVALID) nCompanion = TRUE; + AssignCommand(oHenchman, SetIsDestroyable(TRUE, FALSE, FALSE)); + DestroyObject(oHenchman); + oHenchman = ai_AddHenchman(oPC, jHenchman, lLocation, nFamiliar, nCompanion); + return oHenchman; +} +// ********* New Henchman windows ********** +void CreateCharacterEditGUIPanel(object oPC, object oHenchman) +{ + // Set window to not save until it has been created. + SetLocalInt(oPC, "0_No_Win_Save", TRUE); + DelayCommand(0.5f, DeleteLocalInt (oPC, "0_No_Win_Save")); + // Group 1 (Portrait)******************************************************* 151 / 73 + // Group 1 Row 1 *********************************************************** 350 / 91 + json jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jGroupRow = CreateTextEditBox (jGroupRow, "name_placeholder", "char_name", 15, FALSE, 140.0, 20.0); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + // Add the group row to the group column. + json jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + // Group 1 Row 1 *********************************************************** 350 / 91 + jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jGroupRow = CreateTextEditBox (jGroupRow, "port_placeholder", "port_name", 15, FALSE, 140.0, 20.0, "port_tooltip"); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + // Add the group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 1 Row 2 *********************************************************** 350 / 259 + jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jGroupRow = CreateImage(jGroupRow, "", "port_resref", NUI_ASPECT_EXACTSCALED, NUI_HALIGN_CENTER, NUI_VALIGN_TOP, 140.0f, 160.0f); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + // Add the group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 1 Row 3 *********************************************************** 350 / 292 + jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jGroupRow = CreateButton (jGroupRow, "<", "btn_portrait_prev", 42.0f, 25.0f); + jGroupRow = CreateButton (jGroupRow, "Set", "btn_portrait_ok", 44.0f, 25.0f); + jGroupRow = CreateButton (jGroupRow, ">", "btn_portrait_next", 42.0f, 25.0f); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 1 Row 4 *********************************************************** 350 / 91 + jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jGroupRow = CreateLabel(jGroupRow, "Sound Set", "lbl_sound_set", 140.0, 10.0f, NUI_HALIGN_CENTER, NUI_VALIGN_BOTTOM); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + // Add the group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 1 Row 5 *********************************************************** 350 / 325 + jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jGroupRow = CreateCombo(jGroupRow, ArrayInsertSoundSets(oHenchman), "cmb_soundset", 140.0, 25.0); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + json jRow = JsonArrayInsert(JsonArray(), NuiGroup(NuiCol(jGroupCol))); + // Group 2 (Stats)********************************************************** 151 / 73 + // Group 2 Row 1 *********************************************************** 350 / 91 + jGroupRow = CreateLabel(JsonArray(), "", "lbl_stats", 150.0, 15.0, 0, NUI_VALIGN_BOTTOM, 0.0); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + + // Group 2 Row 2 *********************************************************** 350 / 243 + //json jAlign = CreateOptionsAlignment(oHenchman, 0); + //jGroupRow = CreateOptions(JsonArray(), "opt_lawchaos", NUI_DIRECTION_HORIZONTAL, jAlign, 60.0, 35.0); + // Add group row to the group column. + //jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 2 Row 3 *********************************************************** 350 / 243 + //jAlign = CreateOptionsAlignment(oHenchman, 1); + //jGroupRow = CreateOptions(JsonArray(), "opt_goodevil", NUI_DIRECTION_HORIZONTAL, jAlign, 60.0, 35.0); + //jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + // Add group row to the group column. + //jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 2 Row 2 *********************************************************** 350 / 243 + json jClasses = CreateOptionsClasses(oHenchman); + jGroupRow = CreateOptions(JsonArray(), "opt_classes", NUI_DIRECTION_VERTICAL, jClasses, 150.0, 144.0); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 2 Row 3 *********************************************************** 350 / 276 + jGroupRow = CreateButton(JsonArray(), "Level Up", "btn_level_up", 150.0f, 25.0f, -1.0, "btn_level_up_tooltip"); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 2 Row 4 *********************************************************** 350 / 309 + jGroupRow = CreateButton (JsonArray(), "Reset Character", "btn_reset", 150.0f, 25.0f, -1.0, "btn_reset_tooltip"); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 2 Row 5 *********************************************************** 350 / 342 + jGroupRow = CreateCombo(JsonArray(), jArrayInsertClasses(), "cmb_class", 150.0, 25.0); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 2 Row 6 *********************************************************** 350 / 375 + int nClassOption = GetLocalInt(oHenchman, "CLASS_OPTION_POSITION"); + int nClass = GetClassByPosition(nClassOption + 1, oHenchman); + int bNoClass = FALSE; + if(nClass == CLASS_TYPE_INVALID) + { + nClass = GetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nClassOption + 1)); + bNoClass = TRUE; + } + string sClass = IntToString(nClass); + jGroupRow = CreateCombo(JsonArray(), ArrayInsertPackages(sClass), "cmb_package", 150.0, 25.0); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jRow = JsonArrayInsert(jRow, NuiGroup(NuiCol(jGroupCol))); + // Add the row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 5 (text edit box)**************************************************** 350 / 518 + jRow = CreateTextEditBox(JsonArray(), "desc_placeholder", "desc_value", 1000, TRUE, 350.0, 150.0, "desc_tooltip"); + // Add the row to the column. + jCol = JsonArrayInsert(jCol, NuiRow (jRow)); + // Row 6 (button)*********************************************************** 350/ 546 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton (jRow, "Save Description", "btn_desc_save", 150.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow (jRow)); + // Set the Layout of the window. + json jLayout = NuiCol (jCol); + // Get the window location to restore it from the database. + CheckHenchmanDataAndInitialize(oPC, "0"); + json jData = GetHenchmanDbJson(oPC, "henchman", "0"); + json jGeometry = JsonObjectGet(jData, "henchman_edit_nui"); + float fX = JsonGetFloat(JsonObjectGet(jGeometry, "x")); + float fY = JsonGetFloat(JsonObjectGet(jGeometry, "y")); + if(fX == 0.0 && fY == 0.0) + { + fX = -1.0; + fY = -1.0; + } + string sName = GetName(oHenchman); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow (oPC, jLayout, "henchman_edit_nui", sName + " Character editor", + fX, fY, 380.0, 588.0, FALSE, FALSE, TRUE, FALSE, TRUE, "pe_henchmen"); + // Set all binds, events, and watches. + int nID = GetPortraitId (oPC); + NuiSetUserData(oPC, nToken, JsonInt(nID)); + string sResRef = GetPortraitResRef(oHenchman); + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + NuiSetBind(oPC, nToken, "char_name", JsonString(GetName(oHenchman))); + NuiSetBindWatch(oPC, nToken, "char_name", TRUE); + NuiSetBind(oPC, nToken, "char_name_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "port_name", JsonString(sResRef)); + NuiSetBindWatch(oPC, nToken, "port_name", TRUE); + NuiSetBind(oPC, nToken, "port_name_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "port_resref_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "port_resref_image", JsonString(sResRef + "l")); + NuiSetBind(oPC, nToken, "port_tooltip", JsonString (" You may also type the portrait file name.")); + // Set buttons active. + NuiSetBind(oPC, nToken, "btn_portrait_prev_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_portrait_next_event", JsonBool(TRUE)); + int nSelection = GetSelectionBySoundSet2DA(oHenchman, GetSoundset(oHenchman)); + NuiSetBind(oPC, nToken, "cmb_soundset_selected", JsonInt(nSelection)); + NuiSetBindWatch(oPC, nToken, "cmb_soundset_selected", TRUE); + NuiSetBind(oPC, nToken, "cmb_soundset_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_desc_save_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_portrait_ok_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "desc_tooltip", JsonString(" You can use color codes!")); + string sDescription = GetDescription(oHenchman); + NuiSetBind(oPC, nToken, "desc_value_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "desc_value", JsonString (sDescription)); + // Setup the henchman window. + string sStats = GetAlignText(oHenchman) + " "; + if(GetGender(oHenchman) == GENDER_MALE) sStats += "Male "; + else sStats += "Female "; + sStats += GetStringByStrRef (StringToInt (Get2DAString ("racialtypes", "Name", GetRacialType (oHenchman)))); + NuiSetBind(oPC, nToken, "lbl_stats_label", JsonString(sStats)); + json jHenchman = ObjectToJson(oHenchman); + NuiSetBind(oPC, nToken, "opt_classes_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "opt_classes_value", JsonInt(nClassOption)); + NuiSetBind(oPC, nToken, "btn_level_up_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_up_tooltip", JsonString(" Levels the character up by one level in selected class.")); + if(ai_GetIsCharacter(oHenchman)) NuiSetBind(oPC, nToken, "btn_reset_event", JsonBool(FALSE)); + else NuiSetBind(oPC, nToken, "btn_reset_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_reset_tooltip", JsonString(" Resets the character to level 1.")); + nSelection = GetSelectionByClass2DA(nClass); + NuiSetBind(oPC, nToken, "cmb_class_selected", JsonInt(nSelection)); + NuiSetBindWatch(oPC, nToken, "cmb_class_selected", bNoClass); + NuiSetBind(oPC, nToken, "cmb_class_event", JsonBool(bNoClass)); + int nPackage = GetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nClassOption + 1)); + if(nPackage == 0) + { + nPackage = GetPackageBySelection2DA(sClass, 0); + SetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nClassOption + 1), nPackage); + } + NuiSetBind(oPC, nToken, "cmb_package_selected", JsonInt(GetSelectionByPackage2DA(sClass, nPackage))); + NuiSetBindWatch(oPC, nToken, "cmb_package_selected", bNoClass); + NuiSetBind(oPC, nToken, "cmb_package_event", JsonBool(bNoClass)); +} +void CreateCharacterDescriptionNUI(object oPC, string sName, string sIcon, string sDescription) +{ + // Row 1 ******************************************************************* 500 / 469 + json jRow = CreateImage(JsonArray(), "", "char_icon", NUI_ASPECT_FIT, NUI_HALIGN_CENTER, NUI_VALIGN_MIDDLE, 40.0, 40.0); + jRow = CreateTextBox(jRow, "char_text", 380.0, 400.0); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 500 / 522 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "OK", "btn_ok", 150.0f, 45.0f); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + int nToken = SetWindow(oPC, jLayout, "char_description_nui", sName, + -1.0, -1.0, 460.0f, 537.0 + 12.0f, FALSE, FALSE, TRUE, FALSE, TRUE, "pe_henchmen"); + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oPC))); + NuiSetUserData(oPC, nToken, jData); + // Row 1 + NuiSetBind(oPC, nToken, "char_icon_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "char_icon_image", JsonString(sIcon)); + NuiSetBind(oPC, nToken, "char_text_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "char_text", JsonString(sDescription)); + // Row 2 + NuiSetBind(oPC, nToken, "btn_ok_event", JsonBool(TRUE)); +} + diff --git a/src/module/nss/pit_setup.nss b/src/module/nss/pit_setup.nss new file mode 100644 index 0000000..8dbf3f2 --- /dev/null +++ b/src/module/nss/pit_setup.nss @@ -0,0 +1,4 @@ +void main() +{ + +} diff --git a/src/module/nss/prc_pw_raisedead.nss b/src/module/nss/prc_pw_raisedead.nss new file mode 100644 index 0000000..a020cec --- /dev/null +++ b/src/module/nss/prc_pw_raisedead.nss @@ -0,0 +1,9 @@ +void main() +{ + object oTarget = GetSpellTargetObject(); + object oToken = GetItemPossessedBy(oTarget,"DeathToken"); + + SetItemCursedFlag(oToken,FALSE); + DestroyObject(oToken); + return; +} \ No newline at end of file diff --git a/src/module/nss/prc_pw_res.nss b/src/module/nss/prc_pw_res.nss new file mode 100644 index 0000000..a020cec --- /dev/null +++ b/src/module/nss/prc_pw_res.nss @@ -0,0 +1,9 @@ +void main() +{ + object oTarget = GetSpellTargetObject(); + object oToken = GetItemPossessedBy(oTarget,"DeathToken"); + + SetItemCursedFlag(oToken,FALSE); + DestroyObject(oToken); + return; +} \ No newline at end of file diff --git a/src/module/nss/prc_pwondeath.nss b/src/module/nss/prc_pwondeath.nss new file mode 100644 index 0000000..7c64923 --- /dev/null +++ b/src/module/nss/prc_pwondeath.nss @@ -0,0 +1,79 @@ +//::////////////////////////////////////////////////// +//:: prc_pwondeath +/* + Catch-all OnDeath event handler for NPCs. + + Handles everything the default PRC8 event script + doesn't. + + */ +//::////////////////////////////////////////////////// +#include "prc_inc_clsfunc" +#include "x0_i0_corpses" +#include "inc_misc_tools" +#include "x2_inc_compon" +#include "x0_i0_spawncond" + +string sHenchSummonedFamiliar = "HenchSummonedFamiliar"; +string sHenchSummonedAniComp = "HenchSummonedAniComp"; +string sHenchLastHeardOrSeen = "LastSeenOrHeard"; + +// Clears the last unheard, unseen enemy location +void ClearEnemyLocation2(); + +void ReplaceEquip(object oItem); + +void main() +{ + int i; + object oItem; + string sTag; + +} + +void ClearEnemyLocation2() +{ + object oKiller = GetLastKiller(); + + DeleteLocalInt(OBJECT_SELF, sHenchLastHeardOrSeen); + DeleteLocalLocation(OBJECT_SELF, sHenchLastHeardOrSeen); + object oInvisTarget = GetLocalObject(OBJECT_SELF, sHenchLastHeardOrSeen); + if (GetIsObjectValid(oInvisTarget)) + { + DestroyObject(oInvisTarget); + DeleteLocalObject(OBJECT_SELF, sHenchLastHeardOrSeen); + } + //Begin CustomDeath + + if (GetLocalInt(OBJECT_SELF,"MirrorOfOppositionCopy")) + { + SetIsDestroyable(TRUE,FALSE,FALSE); + DestroyObject(OBJECT_SELF); + return; + } + else if (GetIsObjectValid(GetLocalObject(OBJECT_SELF,"MirrorOfOpposition"))) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),GetLocalObject(OBJECT_SELF,"MirrorOfOpposition")); + } + int iBoss = GetLocalInt(OBJECT_SELF,"Boss"); + if (!GetLocalInt(OBJECT_SELF,"Dead")) + { + if (SLOW_XP && iBoss) + { + if(oKiller != OBJECT_SELF) + ExecuteScript("no_c2_default7", OBJECT_SELF); + //AwardXPs(oKiller); + } + else + { + if(oKiller != OBJECT_SELF) + ExecuteScript("no_c2_default7", OBJECT_SELF); + //AwardXPs(oKiller); + } + SetLocalInt(OBJECT_SELF,"Dead",TRUE); + if (iBoss) + KillAndReplaceLootable(OBJECT_SELF,FALSE); + else + KillAndReplaceDecorative(OBJECT_SELF); + } +} \ No newline at end of file diff --git a/src/module/nss/prc_pwonspawn.nss b/src/module/nss/prc_pwonspawn.nss new file mode 100644 index 0000000..d4c4e6d --- /dev/null +++ b/src/module/nss/prc_pwonspawn.nss @@ -0,0 +1,68 @@ +#include "x0_i0_anims" +#include "ms_name_inc" + +//#include "x0_i0_walkway" - in x0_i0_anims +//#include "x0_i0_treasure" + +void EquipBest(); +int GetIsInTown(); + +void main() + { + if (!GetIsInTown()) + SetAILevel(OBJECT_SELF,AI_LEVEL_HIGH); + if (!GetIsInTown()) + { + SetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY); + DelayCommand(6.0,EquipBest()); + } + if (!GetIsInTown()) + SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); + + if (!GetIsInTown()) + SetSpawnInCondition(NW_FLAG_STEALTH); + + if (!GetIsInTown()) + SetAnimationCondition(NW_ANIM_FLAG_CONSTANT); + + if (GetIsInTown()) + SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE); + + if (GetHasSkill(SKILL_HIDE)>=5 && !GetIsInTown()) + SetCombatCondition(X0_COMBAT_FLAG_AMBUSHER); + + if (GetLocalInt(OBJECT_SELF,"X2_L_IS_INCORPOREAL")) + SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); + + ms_Nomenclature(OBJECT_SELF); + + // ***** ADD ANY SPECIAL ON-SPAWN CODE HERE ***** // + string sTag = GetTag(OBJECT_SELF); + int iRace = GetRacialType(OBJECT_SELF); + int iAppearance = GetAppearanceType(OBJECT_SELF); + if (iRace == RACIAL_TYPE_ELEMENTAL) + { + if (iAppearance == APPEARANCE_TYPE_ELEMENTAL_FIRE + || iAppearance == APPEARANCE_TYPE_ELEMENTAL_FIRE_ELDER + || iAppearance == APPEARANCE_TYPE_BALOR + || iAppearance == APPEARANCE_TYPE_DEVIL) + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectVisualEffect(VFX_DUR_LIGHT_RED_20)),OBJECT_SELF); + } + if (GetLocalInt(OBJECT_SELF,"X2_L_IS_INCORPOREAL")) + { + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectConcealment(50,MISS_CHANCE_TYPE_NORMAL)),OBJECT_SELF); + } + } + +void EquipBest() + { + ClearAllActions(); + ActionEquipMostEffectiveArmor(); + ActionEquipMostDamagingRanged(); + ActionRandomWalk(); + } + +int GetIsInTown() + { + return GetLocalInt(GetArea(OBJECT_SELF),"Town"); + } diff --git a/src/module/nss/prc_pwonuserdef.nss b/src/module/nss/prc_pwonuserdef.nss new file mode 100644 index 0000000..81a6f60 --- /dev/null +++ b/src/module/nss/prc_pwonuserdef.nss @@ -0,0 +1,32 @@ +#include "x0_i0_corpses" +#include "inc_misc_tools" + +void main() + { + object oPC; + + int iAC,iTemp,iTouchAC,iBonus; + int iUDE = GetUserDefinedEventNumber(); + if (iUDE == 1003) + { + SetIsDestroyable(FALSE); + if (GetLocalInt(OBJECT_SELF,"X2_L_IS_INCORPOREAL")) + { + oPC = GetAttemptedAttackTarget(); + if (GetIsObjectValid(oPC)) + { + iAC = GetAC(oPC); + iTouchAC = 10 + GetAbilityModifier(ABILITY_DEXTERITY,oPC); + if (GetHasSpellEffect(SPELL_SHIELD)) + iTouchAC += 7; + else if (GetHasSpellEffect(SPELL_MAGE_ARMOR)) + iTouchAC += 4; + if (GetHasFeat(FEAT_DODGE)) + iTouchAC += 1; + iBonus = iAC - iTouchAC; + if (iBonus > 0) + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAttackIncrease(iBonus),OBJECT_SELF,7.0); + } + } + } + } diff --git a/src/module/nss/rdg_chest.nss b/src/module/nss/rdg_chest.nss new file mode 100644 index 0000000..28203ce --- /dev/null +++ b/src/module/nss/rdg_chest.nss @@ -0,0 +1,18 @@ +#include "inc_gen_loot" +void main() + { + if (GetLocalInt(OBJECT_SELF,"DO_ONCE")) + return; + object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC); + int iCoins,iGoods,iItems; + if (d100() <= CHEST_COIN) + iCoins = 1; + if (d100() <= CHEST_GOODS) + iGoods = 1; + if (d100() <= CHEST_ITEMS) + iItems = 1; + if (GENERATE_COIN && !iCoins && !iGoods && !iItems) + iCoins = 1; + GenerateLoot(OBJECT_SELF,PartyLevel(oPC),iCoins,iGoods,iItems); + SetLocalInt(OBJECT_SELF,"DO_ONCE",TRUE); + } diff --git a/src/module/nss/rdg_fig_spawn.nss b/src/module/nss/rdg_fig_spawn.nss new file mode 100644 index 0000000..51b40ef --- /dev/null +++ b/src/module/nss/rdg_fig_spawn.nss @@ -0,0 +1,46 @@ +//::////////////////////////////////////////////////// +//:: X0_CH_HEN_SPAWN +//:: Copyright (c) 2002 Floodgate Entertainment +//::////////////////////////////////////////////////// +/* +Henchman-specific OnSpawn handler for XP1. Based on NW_CH_AC9 by Bioware. + */ +//::////////////////////////////////////////////////// +//:: Created By: Naomi Novik +//:: Created On: 10/09/2002 +//::////////////////////////////////////////////////// + +#include "x0_inc_henai" +#include "x2_inc_banter" +#include "x2_inc_globals" + +// * there are only a couple potential interjections henchmen can say in c3 + +void main() +{ + string sAreaTag = GetTag(GetArea(OBJECT_SELF)); + string sModuleTag = GetTag(GetModule()); + string sMyTag = GetTag(OBJECT_SELF); + + //Sets up the special henchmen listening patterns + SetAssociateListenPatterns(); + + // Set additional henchman listening patterns + bkSetListeningPatterns(); + + // Default behavior for henchmen at start + SetAssociateState(NW_ASC_POWER_CASTING); + SetAssociateState(NW_ASC_HEAL_AT_50); + SetAssociateState(NW_ASC_RETRY_OPEN_LOCKS); + SetAssociateState(NW_ASC_DISARM_TRAPS); + + // * July 2003. Set this to true so henchmen + // * will hopefully run off a little less often + // * by default + // * September 2003. Bad decision. Reverted back + // * to original. This mode too often looks like a bug + // * because they hang back and don't help each other out. + //SetAssociateState(NW_ASC_MODE_DEFEND_MASTER, TRUE); + SetAssociateState(NW_ASC_DISTANCE_2_METERS); +} + diff --git a/src/module/nss/rdg_forge.nss b/src/module/nss/rdg_forge.nss new file mode 100644 index 0000000..364cb38 --- /dev/null +++ b/src/module/nss/rdg_forge.nss @@ -0,0 +1,861 @@ +#include "inc_item_tools" +void main() + { + //------------------------SET VARIABLES----------------------------- + object oPC = GetLastDisturbed(); + int iType,iEnc,iEncTemp,iPrice,iValue,i,iSkill,iPassed,iMW,iWeapon,iArmor,iTemp,iHFort,iBurst,iUnlim; + int iSpell = -1; + int iSpell2 = -1; + int iSpell3 = -1; + int iCasterLevel = -1; + int iAlign = -1; + int iBane = -1; + int iSpecial = -1; + int iGold = GetGold(OBJECT_SELF); + int iXP = GetXP(oPC); + int iXPCost,iXPAfterCraft; + itemproperty ipItem; + object oCraftable,oMaterial,oObject; + string sMaterial; + object oSound = GetObjectByTag("Tavern_Forge_Sound"); + int iDC = 20; + if (GetHasFeat(FEAT_STONECUNNING,oPC)) + iDC = 18; + // -----------------Record items in container------------------------ + oObject = GetFirstItemInInventory(OBJECT_SELF); + while(GetIsObjectValid(oObject)) + { + iType = GetBaseItemType(oObject); + iWeapon = GetIsWeapon(oObject); + iArmor = GetIsArmor(oObject); + if (iSkill && (iWeapon || iArmor)) + return; //Can only enchant 1 item at a time. + if (iWeapon && !iSkill) + { + if (GetIsAmmo(oObject)) // DUE TO SCRIPTING LIMITATIONS AMMUNITION CAN NOT BE ENCHANTED. ADD TO THINGS TO DO LIST THIS WILL BE UGLY! + return; + iSkill = SKILL_CRAFT_WEAPON; + oCraftable = oObject; + } + else if (iArmor && !iSkill) + { + iSkill = SKILL_CRAFT_ARMOR; + oCraftable = oObject; + } + else if (iType == BASE_ITEM_CRAFTMATERIALMED + || iType == BASE_ITEM_CRAFTMATERIALSML) + oMaterial = oObject; + oObject = GetNextItemInInventory(OBJECT_SELF); + } + if (!iSkill) + return; // Not an armor or weapon being crafted shut down +//------------------------ Set New Variables based on contents----------- + int iLauncher = GetIsLauncher(oCraftable); + int iIsMasterWork = GetLocalInt(oCraftable,"MW"); + iEnc = GetLocalInt(oCraftable,"Enc"); + if (iEnc == 20) return; + else if (iEnc == 0) iEnc = GetEnchantmentBonus(oCraftable); + iEncTemp = GetEnchantmentBonus(oCraftable); + iValue = GetTotalEnchantmentValue(oCraftable); + if (GetIsObjectValid(oMaterial)) + sMaterial = GetTag(oMaterial); +// -----------------------------BEGIN RECIPES--------------------------------- +// ----------- The Recipes should be listed from complex to easiest.------- + if (GetIsObjectValid(oCraftable)) + { + if (iIsMasterWork || iEncTemp >= 1) + { + if (GetIsObjectValid(oMaterial)) + { + if (iArmor) + { + if (GetIsShield(oCraftable))//Shields + { + if (sMaterial == "bashmat") + { + iSpell = SPELL_BULLS_STRENGTH; + iCasterLevel = 8; + i = 1; + ipItem = ItemPropertyBonusFeat(IP_CONST_FEAT_KNOCKDOWN); + } + else if (sMaterial == "blindmat") + { + iSpell = SPELL_BLINDNESS_AND_DEAFNESS; + iSpell2 = SPELL_SEARING_LIGHT; + iCasterLevel = 7; + i = 1; + ipItem = ItemPropertyOnHitCastSpell(SPELL_BLINDNESS_AND_DEAFNESS,4); + } + else if (sMaterial == "lfortmat") + { + iSpell = -1; + iCasterLevel = -1; + i = 1; + ipItem = ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB); + } + else if (sMaterial == "arrdefmat") + { + iSpell = SPELL_SHIELD; + iCasterLevel = 5; + i = 2; + ipItem = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGESOAK_5_HP); + } + else if (sMaterial == "arrdefmat2") + { + iSpell = SPELL_SHIELD; + iCasterLevel = 12; + i = 2; + ipItem = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGESOAK_10_HP); + } + else if (sMaterial == "spell14mat") + { + iSpell = SPELL_SPELL_RESISTANCE; + iCasterLevel = 15; + i = 2; + ipItem = ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_14); + } + else if (sMaterial == "ghostmat") + { + iSpell = SPELL_TRUE_SEEING; + iCasterLevel = 5; + i = 3; + ipItem = ItemPropertyTrueSeeing(); + } + else if (sMaterial == "mfortmat") + { + iSpell = -1; + iCasterLevel = -1; + i = 3; + ipItem = ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS); + } + else if (sMaterial == "acidmat") + { + iSpell = SPELL_RESIST_ELEMENTS; + iCasterLevel = 5; + i = 3; + ipItem = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGERESIST_10); + } + else if (sMaterial == "coldmat") + { + iSpell = SPELL_RESIST_ELEMENTS; + iCasterLevel = 5; + i = 3; + ipItem = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGERESIST_10); + } + else if (sMaterial == "firemat") + { + iSpell = SPELL_RESIST_ELEMENTS; + iCasterLevel = 5; + i = 3; + ipItem = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGERESIST_10); + } + else if (sMaterial == "elecmat") + { + iSpell = SPELL_RESIST_ELEMENTS; + iCasterLevel = 5; + i = 3; + ipItem = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGERESIST_10); + } + else if (sMaterial == "sonicmat") + { + iSpell = SPELL_RESIST_ELEMENTS; + iCasterLevel = 5; + i = 3; + ipItem = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGERESIST_10); + } + else if (sMaterial == "spell16mat") + { + iSpell = SPELL_SPELL_RESISTANCE; + iCasterLevel = 15; + i = 3; + ipItem = ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_16); + } + else if (sMaterial == "spell18mat") + { + iSpell = SPELL_SPELL_RESISTANCE; + iCasterLevel = 15; + i = 4; + ipItem = ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_18); + } + else if (sMaterial == "hfortmat") + { + iSpell = -1; + iCasterLevel = -1; + i = 5; + iHFort = TRUE; + } + else if (sMaterial == "reflecmat") + { + iSpell = SPELL_SPELL_MANTLE; + iCasterLevel = 14; + i = 5; + ipItem = ItemPropertyCastSpell(IP_CONST_CASTSPELL_SPELL_MANTLE_13,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); + } + else if (sMaterial == "spell20mat") + { + iSpell = SPELL_SPELL_RESISTANCE; + iCasterLevel = 15; + i = 5; + ipItem = ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_20); + } + } + else // Armor + { + if (sMaterial == "lfortmat") + { + iSpell = -1; + iCasterLevel = -1; + i = 1; + ipItem = ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB); + } + else if (sMaterial == "lglammat") + { + i = 1; + switch(Random(7)+1) + { + case 1: {iTemp = IP_CONST_LIGHTCOLOR_BLUE;break;} + case 2: {iTemp = IP_CONST_LIGHTCOLOR_GREEN;break;} + case 3: {iTemp = IP_CONST_LIGHTCOLOR_ORANGE;break;} + case 4: {iTemp = IP_CONST_LIGHTCOLOR_PURPLE;break;} + case 5: {iTemp = IP_CONST_LIGHTCOLOR_RED;break;} + case 6: {iTemp = IP_CONST_LIGHTCOLOR_WHITE;break;} + case 7: {iTemp = IP_CONST_LIGHTCOLOR_YELLOW;break;} + }; + ipItem = ItemPropertyLight(IP_CONST_LIGHTBRIGHTNESS_BRIGHT,iTemp); + } + else if (sMaterial == "slickmat") + { + iSpell = SPELL_GREASE; + iCasterLevel = 4; + i = 1; + ipItem = ItemPropertySkillBonus(SKILL_TUMBLE,10); + } + else if (sMaterial == "shadowmat") + { + iSpell = SPELL_INVISIBILITY; + iCasterLevel = 5; + i = 1; + ipItem = ItemPropertySkillBonus(SKILL_HIDE,10); + } + else if (sMaterial == "silentmat") + { + iSpell = SPELL_SILENCE; + iCasterLevel = 5; + i = 1; + ipItem = ItemPropertySkillBonus(SKILL_MOVE_SILENTLY,10); + } + else if (sMaterial == "spell14mat") + { + iSpell = SPELL_SPELL_RESISTANCE; + iCasterLevel = 15; + i = 2; + ipItem = ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_14); + } + else if (sMaterial == "ghostmat") + { + iSpell = SPELL_TRUE_SEEING; + iCasterLevel = 5; + i = 3; + ipItem = ItemPropertyTrueSeeing(); + } + else if (sMaterial == "invulmat") + { + iSpell = SPELL_STONESKIN; + iCasterLevel = 18; + i = 3; + ipItem = ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,IP_CONST_DAMAGESOAK_5_HP); + } + else if (sMaterial == "mfortmat") + { + iSpell = -1; + iCasterLevel = -1; + i = 3; + ipItem = ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS); + } + else if (sMaterial == "spell16mat") + { + iSpell = SPELL_SPELL_RESISTANCE; + iCasterLevel = 15; + i = 3; + ipItem = ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_16); + } + else if (sMaterial == "acidmat") + { + iSpell = SPELL_RESIST_ELEMENTS; + iCasterLevel = 5; + i = 3; + ipItem = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGERESIST_10); + } + else if (sMaterial == "coldmat") + { + iSpell = SPELL_RESIST_ELEMENTS; + iCasterLevel = 5; + i = 3; + ipItem = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGERESIST_10); + } + else if (sMaterial == "firemat") + { + iSpell = SPELL_RESIST_ELEMENTS; + iCasterLevel = 5; + i = 3; + ipItem = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGERESIST_10); + } + else if (sMaterial == "elecmat") + { + iSpell = SPELL_RESIST_ELEMENTS; + iCasterLevel = 5; + i = 3; + ipItem = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGERESIST_10); + } + else if (sMaterial == "sonicmat") + { + iSpell = SPELL_RESIST_ELEMENTS; + iCasterLevel = 5; + i = 3; + ipItem = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGERESIST_10); + } + else if (sMaterial == "spell18mat") + { + iSpell = SPELL_SPELL_RESISTANCE; + iCasterLevel = 15; + i = 4; + ipItem = ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_18); + } + else if (sMaterial == "ethmat") + { + iSpell = SPELL_ETHEREALNESS; + iCasterLevel = 15; + i = 5; + ipItem = ItemPropertyCastSpell(SPELL_ETHEREALNESS,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); + } + else if (sMaterial == "hfortmat") + { + iSpell = -1; + iCasterLevel = -1; + i = 5; + iHFort = TRUE; + } + else if (sMaterial == "spell20mat") + { + iSpell = SPELL_SPELL_RESISTANCE; + iCasterLevel = 15; + i = 5; + ipItem = ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_20); + } + } + } + else // Weapons + { + if (iLauncher)//Ranged weapons + { + if (sMaterial == "unlimmat") + { + i = 1; + ipItem = ItemPropertyUnlimitedAmmo(IP_CONST_UNLIMITEDAMMO_BASIC); + } + else if (sMaterial == "acidmat2") + { + iSpell = SPELL_MELFS_ACID_ARROW; + iSpell2 = SPELL_MESTILS_ACID_SHEATH; + iCasterLevel = 8; + i = 1; + iSpecial = IP_CONST_DAMAGETYPE_ACID; + ipItem = ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE); + } + else if (sMaterial == "firemat2") + { + iSpell = SPELL_FIREBALL; + iSpell2 = SPELL_FLAME_WEAPON; + iSpell3 = SPELL_FLAME_STRIKE; + iCasterLevel = 10; + i = 1; + iSpecial = IP_CONST_DAMAGETYPE_FIRE; + ipItem = ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE); + } + else if (sMaterial == "elecmat2") + { + iSpell = SPELL_CALL_LIGHTNING; + iSpell2 = SPELL_LIGHTNING_BOLT; + iCasterLevel = 8; + i = 1; + iSpecial = IP_CONST_DAMAGETYPE_ELECTRICAL; + ipItem = ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE); + } + else if (sMaterial == "coldmat2") + { + iSpell = SPELL_ICE_STORM; + iCasterLevel = 8; + i = 1; + iSpecial = IP_CONST_DAMAGETYPE_COLD; + ipItem = ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE); + } + + else if (sMaterial == "firemat3") + { + iSpell = SPELL_FIREBALL; + iSpell2 = SPELL_FLAME_WEAPON; + iSpell3 = SPELL_FLAME_STRIKE; + iCasterLevel = 12; + i = 2; + ipItem = ItemPropertyUnlimitedAmmo(IP_CONST_UNLIMITEDAMMO_1D6FIRE); + } + else if (sMaterial == "coldmat3") + { + iSpell = SPELL_ICE_STORM; + iCasterLevel = 10; + i = 2; + ipItem = ItemPropertyUnlimitedAmmo(IP_CONST_UNLIMITEDAMMO_1D6COLD); + } + else if (sMaterial == "elecmat3") + { + iSpell = SPELL_CALL_LIGHTNING; + iSpell2 = SPELL_LIGHTNING_BOLT; + iCasterLevel = 10; + i = 2; + ipItem = ItemPropertyUnlimitedAmmo(IP_CONST_UNLIMITEDAMMO_1D6LIGHT); + } + else if (sMaterial == "banemat") + { + iSpell = SPELL_SUMMON_CREATURE_I; + iCasterLevel = 8; + i = 2; + iBane = GetBaneRace(); + ipItem = ItemPropertyEnhancementBonusVsRace(iBane,iEncTemp+2); + } + else if (sMaterial == "holymat") + { + if (GetAlignmentGoodEvil(oPC) != ALIGNMENT_GOOD) + { + FloatingTextStringOnCreature("Can only be placed by a person of good alignment.",oPC,FALSE); + return; + } + if (!GetHasFeat(FEAT_SMITE_EVIL)) + { + FloatingTextStringOnCreature("Can only be placed by a person with the smite evil feat.",oPC,FALSE); + return; + } + iCasterLevel = 7; + i = 2; + ipItem = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6); + iAlign = IP_CONST_ALIGNMENTGROUP_GOOD; + } + else if (sMaterial == "unholymat") + { + if (GetAlignmentGoodEvil(oPC) != ALIGNMENT_EVIL) + { + FloatingTextStringOnCreature("Can only be placed by a person of evil alignment.",oPC,FALSE); + return; + } + iSpell = SPELL_UNHOLY_AURA; + iCasterLevel = 7; + i = 2; + ipItem = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_GOOD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6); + iAlign = IP_CONST_ALIGNMENTGROUP_EVIL; + } + else if (sMaterial == "lawfulmat") + { + if (GetAlignmentLawChaos(oPC) != ALIGNMENT_LAWFUL) + { + FloatingTextStringOnCreature("Can only be placed by a person of lawful alignment.",oPC,FALSE); + return; + } + iSpell = SPELL_SHIELD_OF_LAW; + iCasterLevel = 7; + i = 2; + ipItem = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6); + iAlign = IP_CONST_ALIGNMENTGROUP_LAWFUL; + } + else if (sMaterial == "chaosmat") + { + if (GetAlignmentLawChaos(oPC) != ALIGNMENT_CHAOTIC) + { + FloatingTextStringOnCreature("Can only be placed by a person of chaotic alignment.",oPC,FALSE); + return; + } + iSpell = SPELL_CLOAK_OF_CHAOS; + iCasterLevel = 7; + i = 2; + ipItem = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_LAWFUL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6); + iAlign = IP_CONST_ALIGNMENTGROUP_CHAOTIC; + } + else if (sMaterial == "speedmat") + { + iSpell = SPELL_HASTE; + iCasterLevel = 7; + i = 4; + ipItem = ItemPropertyHaste(); + } + else if (sMaterial == "brillmat") + { + iSpell = SPELL_CONTINUAL_FLAME; + iCasterLevel = 16; + i = 4; + iSpecial = IP_CONST_DAMAGETYPE_MAGICAL; + ipItem = ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY,IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE); + } + } + else //Melee + { + if (sMaterial == "defmat") + { + iSpell = SPELL_SHIELD; + iSpell2 = SPELL_SHIELD_OF_FAITH; + iCasterLevel = 8; + i = 1; + ipItem = ItemPropertyACBonus(iEncTemp); + } + else if (sMaterial == "firemat2") + { + iSpell = SPELL_FIREBALL; + iSpell2 = SPELL_FLAME_WEAPON; + iSpell3 = SPELL_FLAME_STRIKE; + iCasterLevel = 10; + i = 1; + ipItem = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6); + } + else if (sMaterial == "coldmat2") + { + iSpell = SPELL_ICE_STORM; + iCasterLevel = 8; + i = 1; + ipItem = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1d6); + } + else if (sMaterial == "elecmat2") + { + iSpell = SPELL_CALL_LIGHTNING; + iSpell2 = SPELL_LIGHTNING_BOLT; + iCasterLevel = 8; + i = 1; + ipItem = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d6); + } + else if (sMaterial == "sonicmat2") + { + iSpell = SPELL_SOUND_BURST; + iCasterLevel = 8; + i = 1; + ipItem = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_1d6); + } + else if (sMaterial == "keenmat") + { + iSpell = SPELL_KEEN_EDGE; + iCasterLevel = 10; + i = 1; + if (GetWeaponSlashing(oCraftable)) + ipItem = ItemPropertyKeen(); + else + { + FloatingTextStringOnCreature("Can only be placed on a slashing weapon.",oPC,FALSE); + return; + } + } + else if (sMaterial == "cleavingmat") + { + iSpell = SPELL_DIVINE_POWER; + iCasterLevel = 8; + i = 1; + ipItem = ItemPropertyBonusFeat(IP_CONST_FEAT_CLEAVE); + } + else if (sMaterial == "acidmat2") + { + iSpell = SPELL_MELFS_ACID_ARROW; + iSpell2 = SPELL_MESTILS_ACID_SHEATH; + iCasterLevel = 8; + i = 1; + ipItem = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_1d6); + } + else if (sMaterial == "throwmat") + { + iSpell = SPELL_BULLS_STRENGTH; + iCasterLevel = 5; + i = 1; + ipItem = ItemPropertyCastSpell(IP_CONST_CASTSPELL_BULLS_STRENGTH_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); + } + else if (sMaterial == "banemat") + { + iSpell = SPELL_SUMMON_CREATURE_I; + iCasterLevel = 8; + i = 2; + iBane = GetBaneRace(); + ipItem = ItemPropertyEnhancementBonusVsRace(iBane,iEncTemp+2); + } + else if (sMaterial == "disrmat") + { + iSpell = SPELL_HEAL; + iCasterLevel = 14; + i = 2; + if (GetWeaponBludgeoning(oCraftable)) + ipItem = ItemPropertyOnHitProps(IP_CONST_ONHIT_SLAYRACE,IP_CONST_ONHIT_SAVEDC_14,IP_CONST_RACIALTYPE_UNDEAD); + else + { + FloatingTextStringOnCreature("Can only be placed on a bludgeoning weapon.",oPC,FALSE); + return; + } + } + else if (sMaterial == "firemat3") + { + iSpell = SPELL_FIREBALL; + iSpell2 = SPELL_FLAME_WEAPON; + iSpell3 = SPELL_FLAME_STRIKE; + iCasterLevel = 12; + i = 2; + ipItem = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6); + iBurst = TRUE; + } + else if (sMaterial == "coldmat3") + { + iSpell = SPELL_ICE_STORM; + iCasterLevel = 10; + i = 2; + ipItem = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1d6); + iBurst = TRUE; + } + else if (sMaterial == "elecmat3") + { + iSpell = SPELL_CALL_LIGHTNING; + iSpell2 = SPELL_LIGHTNING_BOLT; + iCasterLevel = 10; + i = 2; + ipItem = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d6); + iBurst = TRUE; + } + else if (sMaterial == "sonicmat3") + { + iSpell = SPELL_SOUND_BURST; + iCasterLevel = 10; + i = 2; + ipItem = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_1d6); + iBurst = TRUE; + } + else if (sMaterial == "woundmat") + { + iSpell = SPELL_MORDENKAINENS_SWORD; + iCasterLevel = 10; + i = 2; + ipItem = ItemPropertyOnHitProps(IP_CONST_ONHIT_WOUNDING,IP_CONST_ONHIT_SAVEDC_20); + } + else if (sMaterial == "holymat") + { + if (GetAlignmentGoodEvil(oPC) != ALIGNMENT_GOOD) + { + FloatingTextStringOnCreature("Can only be placed by a person of good alignment.",oPC,FALSE); + return; + } + if (!GetHasFeat(FEAT_SMITE_EVIL,oPC)) + { + FloatingTextStringOnCreature("Can only be placed by a person with the smite evil feat.",oPC,FALSE); + return; + } + iCasterLevel = 7; + i = 2; + ipItem = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6); + iAlign = IP_CONST_ALIGNMENTGROUP_GOOD; + } + else if (sMaterial == "unholymat") + { + if (GetAlignmentGoodEvil(oPC) != ALIGNMENT_EVIL) + { + FloatingTextStringOnCreature("Can only be placed by a person of evil alignment.",oPC,FALSE); + return; + } + iSpell = SPELL_UNHOLY_AURA; + iCasterLevel = 7; + i = 2; + ipItem = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_GOOD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6); + iAlign = IP_CONST_ALIGNMENTGROUP_EVIL; + } + else if (sMaterial == "lawfulmat") + { + if (GetAlignmentLawChaos(oPC) != ALIGNMENT_LAWFUL) + { + FloatingTextStringOnCreature("Can only be placed by a person of lawful alignment.",oPC,FALSE); + return; + } + iSpell = SPELL_SHIELD_OF_LAW; + iCasterLevel = 7; + i = 2; + ipItem = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6); + iAlign = IP_CONST_ALIGNMENTGROUP_LAWFUL; + } + else if (sMaterial == "chaosmat") + { + if (GetAlignmentLawChaos(oPC) != ALIGNMENT_CHAOTIC) + { + FloatingTextStringOnCreature("Can only be placed by a person of chaotic alignment.",oPC,FALSE); + return; + } + iSpell = SPELL_CLOAK_OF_CHAOS; + iCasterLevel = 7; + i = 2; + ipItem = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_LAWFUL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d6); + iAlign = IP_CONST_ALIGNMENTGROUP_CHAOTIC; + } + else if (sMaterial == "brillmat") + { + iSpell = SPELL_CONTINUAL_FLAME; + iCasterLevel = 16; + i = 4; + ipItem = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL,IP_CONST_DAMAGEBONUS_1d6); + } + else if (sMaterial == "dancemat") + { + if (GetLevelByClass(CLASS_TYPE_BARD,oPC) < 15) + { + FloatingTextStringOnCreature("Can only be placed by a bard of at least 15th level.",oPC,FALSE); + return; + } + i = 4; + ipItem = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_SLOW,IP_CONST_SPELLLEVEL_5); + } + else if (sMaterial == "speedmat") + { + iSpell = SPELL_HASTE; + iCasterLevel = 7; + i = 4; + ipItem = ItemPropertyHaste(); + } + else if (sMaterial == "vorpmat") + { + iSpell = SPELL_KEEN_EDGE; + iSpell2 = SPELL_FINGER_OF_DEATH; + iCasterLevel = 18; + i = 5; + if (GetWeaponSlashing(oCraftable)) + ipItem = ItemPropertyOnHitProps(IP_CONST_ONHIT_VORPAL,IP_CONST_ONHIT_SAVEDC_20); + else + { + FloatingTextStringOnCreature("Can only be placed on a slashing weapon.",oPC,FALSE); + return; + } + } + } + } + if (iEnc + i > 20) + return; + iPrice = (GetTotalEnchantmentValue(oCraftable,i) - iValue)/2; + iXPCost = GetItemXPCost(oCraftable,i); + if (GetXP(oPC) - iXPCost < GetMinLevelXP(oPC)) + { + FloatingTextStringOnCreature("You lack the experience to spend on crafting this item.",oPC,FALSE); + return; + } + if (iGold >= iPrice) + { + if (GetHitDice(oPC) >= 2*(iEnc+i) + && GetSkillRank(iSkill,oPC) >= 2*(iEnc+i)) + { + if (GetCasterLevel(oPC) < iCasterLevel) + { + if (GetCasterLevel(oPC) == 0) + FloatingTextStringOnCreature("Crafting requires that you cast a spell before begining, so that the forge can determine your caster level.",oPC,FALSE); + else + FloatingTextStringOnCreature("You require more levels before you can add this property.",oPC,FALSE); + return; //Didnt have proper spells ready. + } + if (iSpell != -1) + { + if(GetHasSpell(iSpell,oPC)) + DecrementRemainingSpellUses(oPC,iSpell); + else if(GetHasSpell(iSpell2,oPC) && iSpell2 != -1) + DecrementRemainingSpellUses(oPC,iSpell2); + else if(GetHasSpell(iSpell3,oPC) && iSpell3 != -1) + DecrementRemainingSpellUses(oPC,iSpell3); + else + { + FloatingTextStringOnCreature("Improper spells ready.",oPC,FALSE); + return; //Didnt have proper spells ready. + } + } + if (iHFort) + { + IPSafeAddItemProperty(oCraftable,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB)); + IPSafeAddItemProperty(oCraftable,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS)); + IPSafeAddItemProperty(oCraftable,ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_KNOCKDOWN)); + } + else + IPSafeAddItemProperty(oCraftable,ipItem); + if (iBurst) + IPSafeAddItemProperty(oCraftable,ItemPropertyMassiveCritical(IP_CONST_DAMAGEBONUS_1d10)); + if (iAlign != -1 && !iLauncher) + IPSafeAddItemProperty(oCraftable,ItemPropertyLimitUseByAlign(iAlign)); + else if (iAlign != -1 && iLauncher) + { + SetLocalInt(oCraftable,"SpecialAmmo",2); + SetLocalInt(oCraftable,"DamageType",IP_CONST_DAMAGETYPE_DIVINE); + SetLocalInt(oCraftable,"AlignmentTarget",iAlign); + } + if (iBane != -1 && !iLauncher) + IPSafeAddItemProperty(oCraftable,ItemPropertyDamageBonusVsRace(iBane,IP_CONST_DAMAGETYPE_MAGICAL,IP_CONST_DAMAGEBONUS_2d6)); + else if (iBane != 1 && iLauncher) + { + SetLocalInt(oCraftable,"Bane",iBane); + SetLocalInt(oCraftable,"SpecialAmmo",3); + SetLocalInt(oCraftable,"DamageType",IP_CONST_DAMAGETYPE_MAGICAL); + } + if (iLauncher != 0 && iSpecial != -1) + { + SetLocalInt(oCraftable,"SpecialAmmo",TRUE); + SetLocalInt(oCraftable,"DamageType",iSpecial); + } + SetLocalInt(oCraftable,"Enc",iEnc + i); + DestroyObject(oMaterial); + iPassed = TRUE; + } + } + } + else // Standard +1 to 20 Enchantment + { + iPrice = (GetTotalEnchantmentValue(oCraftable,1) - iValue)/2; + i = iEncTemp + 1; + iXPCost = GetItemXPCost(oCraftable,i); + if (GetXP(oPC) - iXPCost < GetMinLevelXP(oPC)) + { + FloatingTextStringOnCreature("You lack the experience to spend on crafting this item.",oPC,FALSE); + return; + } + if (iGold >= iPrice) + { + if (iLauncher) + ipItem = ItemPropertyAttackBonus(i); + else if (GetIsArmor(oCraftable)) + ipItem = ItemPropertyACBonus(i); + else + ipItem = ItemPropertyEnhancementBonus(i); + if (GetHitDice(oPC) >= 2*i + && GetSkillRank(iSkill,oPC) >= 2*i) + { + IPSafeAddItemProperty(oCraftable,ipItem); + SetLocalInt(oCraftable,"Enc",iEnc += 1); + iPassed = TRUE; + } + } + } + } + else // Master working + { + if (GetIsObjectValid(oMaterial)) + { + if ((iSkill == SKILL_CRAFT_WEAPON + && sMaterial == "mwweaponmat") + || (iSkill == SKILL_CRAFT_ARMOR + && sMaterial == "wmarmormat")) + { + if (GetIsSkillSuccessful(oPC,iSkill,iDC)) + { + SetLocalInt(oCraftable,"MW",TRUE); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_IMP_KNOCK),GetLocation(OBJECT_SELF)); + } + DestroyObject(oMaterial); + } + } + } + } + //---------------------------- END RECIPES------------------------------ + if(iPassed) + { + GiveGoldToCreature(oPC,iGold - iPrice); + SetXP(oPC,iXP - iXPCost); + DestroyGold(); + ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_IMP_KNOCK),GetLocation(OBJECT_SELF)); + } + SoundObjectPlay(oSound); + } diff --git a/src/module/nss/rdg_onenter.nss b/src/module/nss/rdg_onenter.nss new file mode 100644 index 0000000..6c6164a --- /dev/null +++ b/src/module/nss/rdg_onenter.nss @@ -0,0 +1,59 @@ +#include "inc_misc_tools" +#include "inc_room_content" +void main() + { + object oPC = GetEnteringObject(); + if (!GetIsPC(oPC)) + return; + if (GetIsObjectValid(GetItemPossessedBy(oPC,"DeathToken"))) + AssignCommand(oPC,JumpToLocation(GetLocation(GetObjectByTag("DeathCheater")))); + //---------------------------- TOWN FUNCTIONS ----------------------------// + if (GetLocalInt(OBJECT_SELF,"Town")) + { + if (AllPCsInTown()) + { + if (GetLocalInt(GetModule(),"AreasExplored") >= RESET_AFTER_X_ROOMS) + { + oPC = GetFirstPC(); + while (GetIsObjectValid(oPC)) + { + FloatingTextStringOnCreature("In order to replace traps module will be reset in 30 seconds please halt activity.",oPC,FALSE); + DelayCommand(10.0,FloatingTextStringOnCreature("In order to replace traps module will be reset in 20 seconds please halt activity.",oPC,FALSE)); + DelayCommand(20.0,FloatingTextStringOnCreature("In order to replace traps module will be reset in 10 seconds please halt activity.",oPC,FALSE)); + AssignCommand(oPC,PlaySound("as_cv_brickscrp1")); + DelayCommand(10.0,AssignCommand(oPC,PlaySound("as_cv_brickscrp1"))); + DelayCommand(20.0,AssignCommand(oPC,PlaySound("as_cv_brickscrp1"))); + oPC = GetNextPC(); + } + DelayCommand(30.0,ExecuteScript("restartmodule",GetModule())); + return; + } + ClearAllTransitions(); + ResetMonsterSpawns(); + ResetHiddenWaypoints(); + } + if (!GetXP(oPC)) + { + DelayCommand(1.0,StartingGold(oPC)); + } + SetLocalInt(oPC,"Rest",TRUE); + } + else + //--------------------------- DUNGEON FUNCTIONS --------------------------// + { + if (!GetIsDM(oPC) && GetIsPC(oPC)) + { + if (!GetLocalInt(OBJECT_SELF,"DoOnce")) + { + NotifyPartyAverageLevel(oPC); + SetLocalInt(OBJECT_SELF,"DoOnce",TRUE); + int iPartyLevel = PartyLevel(oPC); + SetUpEncounters(iPartyLevel); + SetUpContents(oPC,iPartyLevel); + SetLocalInt(GetModule(),"AreasExplored",GetLocalInt(GetModule(),"AreasExplored")+1); + } + if (EXPORT_CHARACTERS) + ExportSingleCharacter(oPC); + } + } + } diff --git a/src/module/nss/rdg_rope_bottom.nss b/src/module/nss/rdg_rope_bottom.nss new file mode 100644 index 0000000..067ffdf --- /dev/null +++ b/src/module/nss/rdg_rope_bottom.nss @@ -0,0 +1,12 @@ +#include "inc_misc_tools" +void main() + { + object oPC = GetLastUsedBy(); + if (GetIsInCombat(oPC)) + { + FloatingTextStringOnCreature("You can not climb while in combat",oPC); + return; + } + object oDest = GetLocalObject(OBJECT_SELF,"Dest"); + AssignCommand(oPC,Transition(oDest)); + } diff --git a/src/module/nss/rdg_rope_top.nss b/src/module/nss/rdg_rope_top.nss new file mode 100644 index 0000000..bdf1b0f --- /dev/null +++ b/src/module/nss/rdg_rope_top.nss @@ -0,0 +1,14 @@ +//Used to make a two way link out of a pit trap. +#include "inc_misc_tools" +void main() + { + object oPC = GetLastUsedBy(); + int iDanger = GetLocalInt(OBJECT_SELF,"Danger"); + int iReflex = GetLocalInt(OBJECT_SELF,"Reflex"); + int iDepth = GetLocalInt(OBJECT_SELF,"Dice"); + object oDest = GetLocalObject(OBJECT_SELF,"Dest"); + if (GetIsInCombat(oPC)) + TransitionPit(oPC,FALSE,TRUE,iReflex,iDepth,OBJECT_SELF,oDest); + else + ActionStartConversation(oPC,"",TRUE,FALSE); + } diff --git a/src/module/nss/rdg_secret_door.nss b/src/module/nss/rdg_secret_door.nss new file mode 100644 index 0000000..1fb9780 --- /dev/null +++ b/src/module/nss/rdg_secret_door.nss @@ -0,0 +1,37 @@ +#include "inc_misc_tools" +void main() +{ + object oUser = GetLastUsedBy(); + + // Allow for traps and locks + if (GetIsTrapped(OBJECT_SELF)) {ApplyTrap(oUser);} + + if (GetLocked(OBJECT_SELF)) { + // See if we have the key and unlock if so + string sKey = GetTrapKeyTag(OBJECT_SELF); + object oKey = GetItemPossessedBy(oUser, sKey); + if (sKey != "" && GetIsObjectValid(oKey)) { + SendMessageToPC(oUser, GetStringByStrRef(7945)); + SetLocked(OBJECT_SELF, FALSE); + } else { + // Print '*locked*' message and play sound + DelayCommand(0.1, PlaySound("as_dr_locked2")); + FloatingTextStringOnCreature("*" + + GetStringByStrRef(8307) + + "*", + oUser); + SendMessageToPC(oUser, GetStringByStrRef(8296)); + return; + } + } + + // Handle opening/closing + if (!GetLocalInt(OBJECT_SELF,"DoOnce")) { + // play animation of user opening it + AssignCommand(oUser, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID)); + DelayCommand(1.0, ActionPlayAnimation(ANIMATION_PLACEABLE_OPEN)); + SetLocalInt(OBJECT_SELF,"DoOnce", TRUE); + } else { + ExecuteScript("rdg_transition",OBJECT_SELF); + } +} diff --git a/src/module/nss/rdg_spells.nss b/src/module/nss/rdg_spells.nss new file mode 100644 index 0000000..70ad63a --- /dev/null +++ b/src/module/nss/rdg_spells.nss @@ -0,0 +1,133 @@ +#include "prc_x2_itemprop" +#include "x2_inc_switches" +#include "x2_inc_spellhook" +#include "nw_i0_spells" +#include "inc_misc_tools" +void main() + { + if (!X2PreSpellCastCode()) + { + // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell + return; + } + object oCaster = GetLastSpellCaster(); + if (!GetIsObjectValid(oCaster)) + oCaster = GetSpellCastItem(); + int nSpell = GetSpellId(); + int nSpellDC = GetSpellSaveDC(); + int nCastLevel = GetCasterLevel(OBJECT_SELF); + object oTarget = GetSpellTargetObject(); + int nDuration = GetCasterLevel(OBJECT_SELF); + int nMetaMagic = GetMetaMagicFeat(); + effect eVis,eDur,eRemove; + effect eAC1, eAC2, eAC3, eAC4; + int nCnt,i,iPassed; + itemproperty ipItem; + object oTrap; + string sTag; + switch (nSpell) + { + case SPELL_FIND_TRAPS: + { + eVis = EffectVisualEffect(VFX_IMP_KNOCK); + nCnt = 1; + oTrap = GetNearestObject(OBJECT_TYPE_TRIGGER | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, OBJECT_SELF, nCnt); + while(GetIsObjectValid(oTrap) && GetDistanceToObject(oTrap) <= 30.0) + { + if(GetIsTrapped(oTrap)) + { + SetTrapDetectedBy(oTrap, OBJECT_SELF); + ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTrap)); + } + nCnt++; + oTrap = GetNearestObject(OBJECT_TYPE_TRIGGER | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, OBJECT_SELF, nCnt); + } + SetModuleOverrideSpellScriptFinished(); + } + case SPELL_MAGE_ARMOR: + { + //Declare major variables + nDuration = GetCasterLevel(OBJECT_SELF); + nMetaMagic = GetMetaMagicFeat(); + eVis = EffectVisualEffect(VFX_IMP_AC_BONUS); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_MAGE_ARMOR, FALSE)); + //Check for metamagic extend + if (nMetaMagic == METAMAGIC_EXTEND) //Duration is +100% + nDuration = nDuration * 2; + //Set the four unique armor bonuses + int i = GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CHEST,oTarget)) + GetItemACValue(GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oTarget)); + if (i >= 4)return; + else i = 4 - i; + eAC1 = EffectACIncrease(i, AC_ARMOUR_ENCHANTMENT_BONUS); + eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); + RemoveEffectsFromSpell(oTarget, SPELL_MAGE_ARMOR); + //Apply the armor bonuses and the VFX impact + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAC1, oTarget, HoursToSeconds(nDuration)); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + SetModuleOverrideSpellScriptFinished(); + } + case SPELL_CONTINUAL_FLAME: + { + if (!GetIsObjectValid(GetSpellCastItem())) + { + if (!GetHasGem(2,OBJECT_SELF)) + { + if (GetIsPC(OBJECT_SELF)) + SendMessageToPC(OBJECT_SELF,"You require a gem of at least 50 gold value to cast this spell."); + SetModuleOverrideSpellScriptFinished(); + } + return; + } + return; + } + case SPELL_IDENTIFY: + { + if (!GetIsObjectValid(GetSpellCastItem())) + { + if (!GetHasGem(3,OBJECT_SELF)) + { + if (GetIsPC(OBJECT_SELF)) + SendMessageToPC(OBJECT_SELF,"You require a gem of at least 100 gold value to cast this spell."); + SetModuleOverrideSpellScriptFinished(); + return; + } + } + return; + } + case SPELL_REMOVE_CURSE: + { + eRemove = GetFirstEffect(oTarget); + eVis = EffectVisualEffect(VFX_IMP_REMOVE_CONDITION); + //Fire cast spell at event for the specified target + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_REMOVE_CURSE, FALSE)); + //Get the first effect on the target + while(GetIsEffectValid(eRemove)) + { + //Check if the current effect is of correct type + if (GetEffectType(eRemove) == EFFECT_TYPE_CURSE) + { + //Remove the effect and apply VFX impact + RemoveEffect(oTarget, eRemove); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + iPassed = TRUE; + } + //Get the next effect on the target + GetNextEffect(oTarget); + } + if (!iPassed) + { + for (i = 0; i<= 14; i++) + { + if (GetItemCursedFlag(GetItemInSlot(i,oTarget))) + { + SetItemCursedFlag(GetItemInSlot(i,oTarget),FALSE); + break; + } + } + } + SetModuleOverrideSpellScriptFinished(); + return; + } + }; + } diff --git a/src/module/nss/rdg_transition.nss b/src/module/nss/rdg_transition.nss new file mode 100644 index 0000000..8309b11 --- /dev/null +++ b/src/module/nss/rdg_transition.nss @@ -0,0 +1,48 @@ +#include "inc_misc_tools" +void main() + { + // DETERMINE THE PC + object oPC = GetClickingObject(); + if (!GetIsObjectValid(oPC)) + oPC = GetEnteringObject(); + if (!GetIsObjectValid(oPC)) + oPC = GetLastUsedBy(); + // DETERMINE THE DESTINATION + object oDest = GetLocalObject(OBJECT_SELF,"Dest"); + object oDoor; + if (GetIsObjectValid(oDest)) + AssignCommand(oPC,Transition(oDest)); + else if (GetLocalInt(OBJECT_SELF,"DeadEnd")) + FloatingTextStringOnCreature("Dead End",oPC); + else + { + // FIND A TRANSITION TO LINK + if (GetTag(OBJECT_SELF) == "RDG_PIT") + oDest = DetermineDestination(TRUE,FALSE); + else if (GetTag(OBJECT_SELF) == "rdg_secret_door") + { + oDest = DetermineDestination(FALSE,TRUE); + if (GetIsObjectValid(oDest)) + { + oDoor = CreateObject(OBJECT_TYPE_PLACEABLE,"rdg_secret_door",GetLocation(oDest),FALSE); + AssignCommand(oDoor,SetFacing(GetFacing(oDest))); + LinkTransitions (oDoor,oDest); //Marks far side secret door wp as used. + oDest = oDoor; + } + } + else + oDest = DetermineDestination(); + if (GetIsObjectValid(oDest)) + { + LinkTransitions(oDest); + AssignCommand(oPC,Transition(oDest)); + } + else + { + SetLocalInt(OBJECT_SELF,"DeadEnd",TRUE); + FloatingTextStringOnCreature("Dead End",oPC); + } + } + } + + diff --git a/src/module/nss/rdg_trap.nss b/src/module/nss/rdg_trap.nss new file mode 100644 index 0000000..e7072ff --- /dev/null +++ b/src/module/nss/rdg_trap.nss @@ -0,0 +1,8 @@ +#include "inc_misc_tools" +void main() + { + // Determine Target + object oTarget = GetEnteringObject(); + if (!GetIsFriend(oTarget)) // Apply Trap only if not a friend of the trap. + ApplyTrap(oTarget); + } diff --git a/src/module/nss/rdg_wand_monster.nss b/src/module/nss/rdg_wand_monster.nss new file mode 100644 index 0000000..f252e86 --- /dev/null +++ b/src/module/nss/rdg_wand_monster.nss @@ -0,0 +1,37 @@ +#include "inc_room_content" +object GetRestingPartyMember(object oPC); + +void main() + { + object oLeader = OBJECT_SELF; + object oPC = GetRestingPartyMember(oLeader); + int iRest; + if (GetIsObjectValid(oPC)) + iRest = TRUE; + else + oPC = oLeader; + if (GetLocalInt(GetArea(oPC),"Town")) + return; + int iTimer = GetLocalInt(oLeader,"WanderingMonster") + 6; + if (iTimer >= WANDER_MONSTER_TIMER + || iRest == TRUE) + { + if (d100() <= WANDER_MONSTER_CHANCE) + SetUpWanderingEncounter(oPC); + SetLocalInt(oLeader,"WanderingMonster",0); + } + else + SetLocalInt(oLeader,"WanderingMonster",iTimer); + } + +object GetRestingPartyMember(object oPC) + { + object oParty = GetFirstFactionMember(oPC); + while (GetIsObjectValid(oParty)) + { + if (GetIsResting(oParty)) + return oParty; + oParty = GetNextFactionMember(oPC); + } + return OBJECT_INVALID; + } diff --git a/src/module/nss/rdg_yawningwell.nss b/src/module/nss/rdg_yawningwell.nss new file mode 100644 index 0000000..41f5203 --- /dev/null +++ b/src/module/nss/rdg_yawningwell.nss @@ -0,0 +1,10 @@ +#include "inc_misc_tools" +void main() + { + object oPC = GetLastUsedBy(); + object oDest = GetLocalObject(OBJECT_SELF,"Dest"); + if (!GetIsObjectValid(oDest)) + oDest = CreateDungeonEntrance(); + PlaySound("as_cv_winch1"); + DelayCommand(3.0,AssignCommand(oPC,Transition(oDest))); + } diff --git a/src/module/nss/reshuffle.nss b/src/module/nss/reshuffle.nss new file mode 100644 index 0000000..75df7d4 --- /dev/null +++ b/src/module/nss/reshuffle.nss @@ -0,0 +1,132 @@ +//#include "inc_misc_tools" +#include "inc_gen_enc" +void main() + { + if (GetLocalInt(OBJECT_SELF,"DoOnce")) + return; + object oPC = GetLastUsedBy(); + int iLevel = GetHitDice(oPC); + object oTemp; + int iRoll = d20(); + switch(iRoll) + { + case 1: + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_FNF_MYSTICAL_EXPLOSION),oPC,6.0); + GenerateEncounter(PartyLevel(oPC),OBJECT_SELF,FALSE); + break; + } + case 2: + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectPoison(POISON_ARSENIC),oPC); + break; + } + case 3: + { + ActionCastSpellAtLocation(SPELL_BESTOW_CURSE,GetLocation(oPC),METAMAGIC_ANY,TRUE); + break; + } + case 4: + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_FNF_MYSTICAL_EXPLOSION),oPC,6.0); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,SupernaturalEffect(EffectCurse(d10()-5,d10()-5,d10()-5,d10()-5,d10()-5,d10()-5)),oPC,HoursToSeconds(1)); + break; + } + case 5: + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectBeam(VFX_BEAM_EVIL,OBJECT_SELF,BODY_NODE_CHEST),oPC,6.0); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(GetRandomAbility(),d6()),oPC,HoursToSeconds(1)); + break; + } + case 6: + { + SetXP(oPC,GetXP(oPC)+(d10()*100*-1)*iLevel); + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_TORNADO),oPC,6.0); + break; + } + case 7: + { + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(d4(iLevel)),oPC); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_FNF_PWSTUN),oPC,6.0); + break; + } + case 9: + case 10: + case 11: + { + ClearAllTransitions(); + ResetMonsterSpawns(); + ResetHiddenWaypoints(); + object oPC = GetFirstPC(); + while(GetIsObjectValid(oPC)) + { + if (!GetLocalInt(GetArea(oPC),"Town")) + { + AssignCommand(oPC,PlaySound("as_na_rockfallg1")); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_FNF_SCREEN_SHAKE),oPC); + } + oPC = GetNextPC(); + } + break; + } + case 8: + case 12: + { + ResetMonsterSpawns(); + PlaySound("as_an_dragonror3"); + break; + } + + case 13: + { + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(d8(iLevel)),oPC); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_IMP_RESTORATION_LESSER),oPC,6.0); + break; + } + case 14: + { + SetXP(oPC,GetXP(oPC)+(d10()*100)*iLevel); + ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_TORNADO),oPC,6.0); + break; + } + case 15: + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectBeam(VFX_BEAM_HOLY,OBJECT_SELF,BODY_NODE_CHEST),oPC,6.0); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityIncrease(GetRandomAbility(),d6()),oPC,HoursToSeconds(1)); + break; + } + case 16: + { + ActionCastSpellAtObject(SPELL_REMOVE_CURSE,oPC,METAMAGIC_ANY,TRUE); + break; + } + case 17: + { + ActionCastSpellAtLocation(SPELL_BLESS,GetLocation(oPC),METAMAGIC_EXTEND,TRUE); + break; + } + case 18: + { + oTemp = GetFirstFactionMember(oPC,FALSE); + while(GetIsObjectValid(oTemp)) + { + ForceRest(oPC); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_FNF_TIME_STOP),oPC,6.0); + oTemp = GetNextFactionMember(oPC,FALSE); + } + break; + } + case 19: + { + ForceRest(oPC); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_FNF_TIME_STOP),oPC,6.0); + break; + } + case 20: + { + ExecuteScript("restartmodule",GetModule()); + break; + } + }; + SetLocalInt(OBJECT_SELF,"DoOnce",TRUE); + } diff --git a/src/module/nss/restartmodule.nss b/src/module/nss/restartmodule.nss new file mode 100644 index 0000000..a9234f2 --- /dev/null +++ b/src/module/nss/restartmodule.nss @@ -0,0 +1,8 @@ +void main() + { + object oPC = GetLastUsedBy(); + object oMod = GetModule(); + if (oPC == GetFactionLeader(oPC) + || GetIsDM(oPC)) + StartNewModule(GetName(oMod)); + } diff --git a/src/module/nss/scales_1.nss b/src/module/nss/scales_1.nss new file mode 100644 index 0000000..3fc5337 --- /dev/null +++ b/src/module/nss/scales_1.nss @@ -0,0 +1,7 @@ +int StartingConditional() + { + object oPC = GetPCSpeaker(); + if (oPC == GetFactionLeader(oPC)) + return TRUE; + return FALSE; + } diff --git a/src/module/nss/split_loot.nss b/src/module/nss/split_loot.nss new file mode 100644 index 0000000..f5d9c3a --- /dev/null +++ b/src/module/nss/split_loot.nss @@ -0,0 +1,27 @@ +// OBSOLETE AS OF RDG 9. +#include "inc_mod_constant" +void main() + { + int iPot,iGold,iSplit; + int i,j; + object oPC = GetFirstFactionMember(GetPCSpeaker()); + while (GetIsObjectValid(oPC)) + { + j += 1; + iGold = GetGold(oPC); + iPot += iGold; + TakeGoldFromCreature(iGold,oPC,TRUE); + oPC = GetNextFactionMember(GetPCSpeaker()); + } + iSplit = iPot/j; + oPC = GetFirstFactionMember(GetPCSpeaker()); + while (GetIsObjectValid(oPC)) + { + GiveGoldToCreature(oPC,iSplit); + oPC = GetNextFactionMember(GetPCSpeaker()); + } + if (EXPORT_CHARACTERS) + ExportAllCharacters(); + } + + diff --git a/src/module/nss/x0_ch_hen_spawn.nss b/src/module/nss/x0_ch_hen_spawn.nss new file mode 100644 index 0000000..51b40ef --- /dev/null +++ b/src/module/nss/x0_ch_hen_spawn.nss @@ -0,0 +1,46 @@ +//::////////////////////////////////////////////////// +//:: X0_CH_HEN_SPAWN +//:: Copyright (c) 2002 Floodgate Entertainment +//::////////////////////////////////////////////////// +/* +Henchman-specific OnSpawn handler for XP1. Based on NW_CH_AC9 by Bioware. + */ +//::////////////////////////////////////////////////// +//:: Created By: Naomi Novik +//:: Created On: 10/09/2002 +//::////////////////////////////////////////////////// + +#include "x0_inc_henai" +#include "x2_inc_banter" +#include "x2_inc_globals" + +// * there are only a couple potential interjections henchmen can say in c3 + +void main() +{ + string sAreaTag = GetTag(GetArea(OBJECT_SELF)); + string sModuleTag = GetTag(GetModule()); + string sMyTag = GetTag(OBJECT_SELF); + + //Sets up the special henchmen listening patterns + SetAssociateListenPatterns(); + + // Set additional henchman listening patterns + bkSetListeningPatterns(); + + // Default behavior for henchmen at start + SetAssociateState(NW_ASC_POWER_CASTING); + SetAssociateState(NW_ASC_HEAL_AT_50); + SetAssociateState(NW_ASC_RETRY_OPEN_LOCKS); + SetAssociateState(NW_ASC_DISARM_TRAPS); + + // * July 2003. Set this to true so henchmen + // * will hopefully run off a little less often + // * by default + // * September 2003. Bad decision. Reverted back + // * to original. This mode too often looks like a bug + // * because they hang back and don't help each other out. + //SetAssociateState(NW_ASC_MODE_DEFEND_MASTER, TRUE); + SetAssociateState(NW_ASC_DISTANCE_2_METERS); +} + diff --git a/src/module/nss/x0_d1_hen_hired.nss b/src/module/nss/x0_d1_hen_hired.nss new file mode 100644 index 0000000..4956c85 --- /dev/null +++ b/src/module/nss/x0_d1_hen_hired.nss @@ -0,0 +1,22 @@ +//::////////////////////////////////////////////////// +//:: X0_D1_HEN_HIRED +//:: Copyright (c) 2002 Floodgate Entertainment +//::////////////////////////////////////////////////// +/* +Handles the hiring of a henchman. + */ +//::////////////////////////////////////////////////// +//:: Created By: Naomi Novik +//:: Created On: 09/13/2002 +//::////////////////////////////////////////////////// + +#include "x0_i0_henchman" + +void main() +{ + //Ensure plot/immortal flags has been turned off + SetPlotFlag(OBJECT_SELF, FALSE); + SetImmortal(OBJECT_SELF, FALSE); + + HireHenchman(GetPCSpeaker()); +} diff --git a/src/module/nss/x0_d1_hen_rejoin.nss b/src/module/nss/x0_d1_hen_rejoin.nss new file mode 100644 index 0000000..027084f --- /dev/null +++ b/src/module/nss/x0_d1_hen_rejoin.nss @@ -0,0 +1,19 @@ +//::////////////////////////////////////////////////// +//:: X0_D1_HEN_REJOIN +//:: Copyright (c) 2002 Floodgate Entertainment +//::////////////////////////////////////////////////// +/* +Actions taken when a henchman rejoins his/her current +master. + */ +//::////////////////////////////////////////////////// +//:: Created By: Naomi Novik +//:: Created On: 09/13/2002 +//::////////////////////////////////////////////////// + +#include "x0_i0_henchman" + +void main() +{ + HireHenchman(GetPCSpeaker()); +} diff --git a/src/module/nss/x0_i0_corpses.nss b/src/module/nss/x0_i0_corpses.nss new file mode 100644 index 0000000..08b8619 --- /dev/null +++ b/src/module/nss/x0_i0_corpses.nss @@ -0,0 +1,419 @@ +//::////////////////////////////////////////////////// +//:: X0_I0_CORPSES +/* + Include library for creating corpses, blowing things + up, etc. Always a good time. + */ +//::////////////////////////////////////////////////// +//:: Copyright (c) 2002 Floodgate Entertainment +//:: Created By: Naomi Novik +//:: Created On: 12/07/2002 +//::////////////////////////////////////////////////// + +// We use this library to get positions to drop things at +#include "x0_i0_position" + +/********************************************************************** + * CONSTANTS + **********************************************************************/ + +// This blueprint is necessary for lootable corpses. +// It is an invisible object with inventory, named "Corpse" +string sCorpseResRef = "rdg_plc_corpse"; + +// This blueprint is necessary for exploding corpses. +// It is an invisible, non-static object, named "Corpse" +string sBombResRef = "x0_plc_bomb"; + +// Time delay in seconds before decaying corpses vanish +float CORPSE_DECAY_TIME = 120.0f; + +// Time delay in seconds before exploding corpses blow up +float CORPSE_EXPLODE_TIME = 2.0f; + + +/********************************************************************** + * FUNCTION PROTOTYPES + **********************************************************************/ + +// Convenience function to set another object destroyable +void SetObjectIsDestroyable(object oVictim, int bCanDestroy, int bCanRaise=TRUE, int bCanSelect=FALSE); + + +// Loot all the droppable items from the inventory slots of the +// victim into the inventory of the corpse object. +// If bDropWielded is TRUE, the items the victim is wielding in +// its right and left hands will be dropped to either side +// of it, otherwise they will simply be placed into inventory. +void LootInventorySlots(object oVictim, object oCorpse, int bDecay=TRUE, int bDropWielded=TRUE); + +// Strip everything droppable in the regular inventory. +// Use LootInventorySlots to strip equipped items. +void LootInventory(object oVictim, object oCorpse); + +// Die young, leave a lootable corpse. (ha ha ha... okay, been working too long) +// Despite the name, can be used in an OnDeath script; +// it won't kill the victim twice. +// If bDecay is TRUE, the corpse will decay to a bag after a brief delay. +// If bDropWielded is TRUE, the corpse will drop its right/left hand items +// to either side (making the body more decorative, but the items harder +// to see). +void KillAndReplaceLootable(object oVictim, int bDecay=TRUE, int bDropWielded=TRUE); + +// Kill and leave a decorative corpse that will decay +// after a short while. +// Despite the name, can be used in an OnDeath script; +// it won't kill the victim twice. +void KillAndReplaceDecay(object oVictim); + +// Kill and leave a raiseable & selectable corpse +// Despite the name, can be used in an OnDeath script; +// it won't kill the victim twice. +void KillAndReplaceRaiseable(object oVictim); + +// Kill and leave a corpse with the corpse's name +// Despite the name, can be used in an OnDeath script; +// it won't kill the victim twice. +void KillAndReplaceSelectable(object oVictim); + +// Kill and leave a purely decorative corpse (no name, +// not raiseable). +// Despite the name, can be used in an OnDeath script; +// it won't kill the victim twice. +void KillAndReplaceDecorative(object oVictim); + +// Kill and leave an exploding corpse +// Despite the name, can be used in an OnDeath script; +// it won't kill the victim twice. +// Any spell can be used. +void KillAndExplode(object oVictim, int nSpell=SPELL_FIREBALL); + +// Blow up an object with the given spell (actually +// casts the spell, injuring those around the object) +void ExplodeObject(object oOrigin, int nSpell=SPELL_FIREBALL); + +// Blow up the nearest object with a matching tag with the specified +// spell. +// This should be called by the trigger object! It ASSUMES +// that GetEnteringObject() will work for OBJECT_SELF here. +// This destroys the trigger after it is successfully invoked +// by the PC. +void TriggerExplodeObject(int nSpell=SPELL_FIREBALL); + +// Raise a given corpse from the dead with given visual effect. +// Unless bDestroyable is set to FALSE, the newly-raised corpse will +// be changed so it will be destroyed on its next death. +void RaiseCorpse(object oVictim, int nVisualEffect = VFX_IMP_RAISE_DEAD, int bDestroyable=TRUE); + +// Return the nearest corpse object +object GetNearestCorpse(object oSource = OBJECT_SELF); + +// Raise the nearest corpse from the dead. +// This should be called by the trigger object! It ASSUMES +// that GetEnteringObject() will work for OBJECT_SELF here. +void TriggerRaiseCorpse(int nVisualEffect=VFX_IMP_RAISE_DEAD); + + + +/********************************************************************** + * **PRIVATE** FUNCTION DEFINITIONS + * + * These functions are deliberately not prototyped and are only + * intended for use internal to this library. Do not use outside! + **********************************************************************/ + +// Actually kill off a victim, regardless of plot flag. +void DoActualKilling(object oVictim) +{ + if (!GetIsDead(oVictim)) { + SetPlotFlag(oVictim, FALSE); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(TRUE), oVictim); + } +} + + +// This function is used to determine if the victim is the type +// of creature that "wears" its clothing, so we don't strip them +// naked. +int GetIsVictimDressed(object oVictim) +{ + int nAppearance = GetAppearanceType(oVictim); + switch (nAppearance) { + case APPEARANCE_TYPE_DWARF: + case APPEARANCE_TYPE_ELF: + case APPEARANCE_TYPE_GNOME: + case APPEARANCE_TYPE_HALF_ELF: + case APPEARANCE_TYPE_HALF_ORC: + case APPEARANCE_TYPE_HALFLING: + case APPEARANCE_TYPE_HUMAN: + return TRUE; + } + + return FALSE; +} + +/********************************************************************** + * FUNCTION DEFINITIONS + **********************************************************************/ +// * convenience function for copying objects properly +void CopyItem2(object oSource, object oInventory) +{ + int bWasPlot = GetPlotFlag(oSource); + object oNewItem = CopyItem(oSource, oInventory); + if (bWasPlot == TRUE) + { + SetPlotFlag(oNewItem,TRUE); + } + +} + + +// Convenience function to set another object destroyable +void SetObjectIsDestroyable(object oVictim, int bCanDestroy, + int bCanRaise=TRUE, int bCanSelect=FALSE) +{ + AssignCommand(oVictim, SetIsDestroyable(bCanDestroy, bCanRaise, bCanSelect)); +} + + +// If bDropWielded is TRUE, the items the victim is wielding in +// its right and left hands will be dropped to either side +// of it, otherwise they will simply be placed into inventory. +void LootInventorySlots(object oVictim, object oCorpse, int bDecay=TRUE, + int bDropWielded=TRUE) +{ + int i=0; + object oItem = OBJECT_INVALID; + location locItem; + + + int bWasPlot = FALSE; + + + for (i=0; i < NUM_INVENTORY_SLOTS; i++) { + oItem = GetItemInSlot(i, oVictim); + + // See if we're going to allow looting of this item. + if (GetIsObjectValid(oItem) && GetDroppableFlag(oItem)) { + // Handle different items slightly differently. + + if (i == INVENTORY_SLOT_CHEST && GetIsVictimDressed(oVictim)) { + // The victim is wearing the armor. We don't want to destroy + // it while the corpse is around, since that would leave the + // body naked. + CopyItem2(oItem, oCorpse); + if (bDecay) { + // Destroy after we destroy the corpse. + DestroyObject(oItem, CORPSE_DECAY_TIME+1.0); + } + + } else if (i == INVENTORY_SLOT_RIGHTHAND && bDropWielded) { + // This is a wielded item. Drop it nearby. + locItem = GetStepRightLocation(oVictim); + CreateObject(OBJECT_TYPE_ITEM, GetResRef(oItem), locItem); + DestroyObject(oItem, 0.1); + + } else if (i == INVENTORY_SLOT_LEFTHAND && bDropWielded) { + // This is a wielded item. Drop it nearby. + locItem = GetStepLeftLocation(oVictim); + CreateObject(OBJECT_TYPE_ITEM, GetResRef(oItem), locItem); + DestroyObject(oItem, 0.1); + + } else + { + CopyItem2(oItem, oCorpse); + DestroyObject(oItem, 0.1); + } + } + } +} + +// Strip everything droppable in the regular inventory, too. +void LootInventory(object oVictim, object oCorpse) +{ + object oItem = GetFirstItemInInventory(oVictim); + while (GetIsObjectValid(oItem)) { + if (GetDroppableFlag(oItem)) { + // Copy to the corpse and destroy + CopyItem2(oItem, oCorpse); + DestroyObject(oItem, 0.1); + } + oItem = GetNextItemInInventory(oVictim); + } +} + + +// If bDecay is TRUE, the corpse will decay to a bag after a brief delay. +// If bDropWielded is TRUE, the corpse will drop its right/left hand items +// to either side (making the body more decorative, but the items harder +// to see). +void KillAndReplaceLootable(object oVictim, int bDecay=TRUE, int bDropWielded=TRUE) +{ + if (bDecay) { + KillAndReplaceDecay(oVictim); + } else { + KillAndReplaceDecorative(oVictim); + } + + // Create the "corpse" placeholder + object oCorpse = CreateObject(OBJECT_TYPE_PLACEABLE, + sCorpseResRef, + GetLocation(oVictim)); + + // Put everything lootable from the victim into the placeholder + LootInventorySlots(oVictim, oCorpse, bDecay, bDropWielded); + LootInventory(oVictim, oCorpse); + AssignCommand(oCorpse,TakeGoldFromCreature(GetGold(oVictim),oVictim)); + // If we're decaying, destroy the 'corpse' object too, + // which will drop its contents in the standard "bag" form + if (bDecay) { + DelayCommand(CORPSE_DECAY_TIME, SetPlotFlag(oCorpse, FALSE)); + DestroyObject(oCorpse, CORPSE_DECAY_TIME); + } + +} + + +// Kill and leave a decorative corpse that will decay +// after a short while. +void KillAndReplaceDecay(object oVictim) +{ + KillAndReplaceDecorative(oVictim); + DelayCommand(CORPSE_DECAY_TIME, SetObjectIsDestroyable(oVictim, TRUE)); + DestroyObject(oVictim, CORPSE_DECAY_TIME+0.2); +} + +// Kill and leave a raiseable & selectable corpse +void KillAndReplaceRaiseable(object oVictim) +{ + SetObjectIsDestroyable(oVictim, FALSE, TRUE, TRUE); + DoActualKilling(oVictim); +} + +// Kill and leave a corpse with the corpse's name +void KillAndReplaceSelectable(object oVictim) +{ + SetObjectIsDestroyable(oVictim, FALSE, FALSE, TRUE); + DoActualKilling(oVictim); +} + +// Kill and leave a purely decorative corpse (no name, +// not raiseable). +void KillAndReplaceDecorative(object oVictim) +{ + SetObjectIsDestroyable(oVictim, FALSE, FALSE); + DoActualKilling(oVictim); +} + +// Kill and leave an exploding corpse +// Despite the name, can be used in an OnDeath script; +// it won't kill the victim twice. +// Any spell can be used. +void KillAndExplode(object oVictim, int nSpell=SPELL_FIREBALL) +{ + KillAndReplaceDecorative(oVictim); + + DelayCommand(CORPSE_EXPLODE_TIME, SetObjectIsDestroyable(oVictim, TRUE)); + DelayCommand(CORPSE_EXPLODE_TIME, ExplodeObject(oVictim, nSpell)); +} + +// Blow up an object with the given spell (actually +// casts the spell, injuring those around the object) +void ExplodeObject(object oOrigin, int nSpell=SPELL_FIREBALL) +{ + // Create the 'bomb' object + object oBomb = CreateObject(OBJECT_TYPE_PLACEABLE, + sBombResRef, + GetLocation(oOrigin)); + + location locOrigin = GetLocation(oOrigin); + + AssignCommand(oBomb, + DelayCommand(0.5, + ActionCastSpellAtLocation(nSpell, + locOrigin, + METAMAGIC_ANY, + TRUE, + PROJECTILE_PATH_TYPE_DEFAULT, + TRUE))); + + // Destroy the origin spectacularly + if (!GetIsDead(oOrigin)) { + DelayCommand(0.1, DoActualKilling(oOrigin)); + } else { + DestroyObject(oOrigin, 0.1); + } + + // Destroy the bomb + DestroyObject(oBomb, 7.0); +} + +// Blow up the nearest object with a matching tag, +// using the specified spell. +void TriggerExplodeObject(int nSpell=SPELL_FIREBALL) +{ + object oPC = GetEnteringObject(); + if ( ! GetIsPC(oPC) ) { return; } + object oOrigin = GetNearestObjectByTag(GetTag(OBJECT_SELF)); + ExplodeObject(oOrigin, nSpell); + DestroyObject(OBJECT_SELF, 5.0); +} + + +// Raise a given corpse from the dead with given visual effect. +// Unless bDestroyable is set to FALSE, the newly-raised corpse will +// be changed so it will be destroyed on its next death. +void RaiseCorpse(object oVictim, int nVisualEffect = VFX_IMP_RAISE_DEAD, int bDestroyable=TRUE) +{ + effect eVis = EffectVisualEffect(nVisualEffect); + effect eResur = EffectResurrection(); + effect eHeal = EffectHeal(GetMaxHitPoints(oVictim)); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oVictim); + DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_INSTANT, eResur, oVictim)); + DelayCommand(0.7, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oVictim)); + + if (bDestroyable) + DelayCommand(0.9,SetObjectIsDestroyable(oVictim, TRUE)); +} + +// Return the nearest corpse object +object GetNearestCorpse(object oSource = OBJECT_SELF) +{ + return GetNearestCreature(CREATURE_TYPE_IS_ALIVE, FALSE, + oSource); + +/* + February 2003: Old workaround, no longer needed + int nNth = 1; + object oCorpse = GetNearestObject(OBJECT_TYPE_CREATURE, oSource); + while (GetIsObjectValid(oCorpse) + && !GetIsDead(oCorpse) + && GetArea(oCorpse) == GetArea(oSource)) + { + nNth++; + oCorpse = GetNearestObject(OBJECT_TYPE_CREATURE, oSource, nNth); + } + if (GetArea(oCorpse) != GetArea(oSource)) + return OBJECT_INVALID; + + return oCorpse; */ +} + +// Raise the nearest corpse from the dead. +// This should be called by the trigger object! It ASSUMES +// that GetEnteringObject() will work for OBJECT_SELF here. +void TriggerRaiseCorpse(int nVisualEffect=VFX_IMP_RAISE_DEAD) +{ + object oPC = GetEnteringObject(); + if ( ! GetIsPC(oPC) ) { return; } + object oCorpse = GetNearestCorpse(); + RaiseCorpse(oCorpse, nVisualEffect); + DestroyObject(OBJECT_SELF, 5.0); +} + + + +/* Just for testing, don't close this comment. +void main() {} +/* */ diff --git a/src/module/nss/x0_i0_henchman.nss b/src/module/nss/x0_i0_henchman.nss new file mode 100644 index 0000000..b5b9cd6 --- /dev/null +++ b/src/module/nss/x0_i0_henchman.nss @@ -0,0 +1,1584 @@ +//::////////////////////////////////////////////////// +//:: X0_I0_HENCHMAN +//:: Copyright (c) 2002 Floodgate Entertainment +//::////////////////////////////////////////////////// +/* + + * MODIFIED April 2/03 + * Make is so when a henchmen is hired he automatically levels up to + * the level of his master + + * MODIFIED 2/4/2000 + * Added a hack to HireHenchman so that it will skip some problem areas + * that might surface with my 'keeping the henchman' stuff in the death script. + * Felt it was worth it because now you can use potions to bring the henchman back. + + * MODIFIED 1/31/2003 + * Removed the SetAdditionalListeningPatterns function because this + * library will now be included in x0_inc_henai, so we can just include + * that and then use bkSetListeningPatterns in the henchman spawn script. + * + * MODIFIED 1/3/2003 + * Removed personal item code and added code to handle setting up + * henchmen using campaign variables instead of local variables, + * so the information will persist between modules. Also added + * code for storing/retrieving henchman as you move between sequel + * modules. + * + * MODIFIED 12/6/2002 + * Added functions to handle henchman death. Henchmen do not die normally; + * they are insta-resurrected to 1 HP and are kept there, playing the 'dead' + * animation, until time runs out, the master flees the area/dies, or the + * master heals the henchman. + * + * MODIFIED 11/16/2002 + * Added a new function, "SetAdditionalListeningPatterns", to set the + * added listening patterns for the new henchman AI from Bioware. + * Since only our OnSpawn script needs to be different, it's easier to + * duplicate this one function. + * + * IMPORTANT NOTE: + * This include file REPLACES the original henchman include file from + * campaign one; both should not be included in the same script. + * Many functions here have the same names/parameters as functions + * from Bioware's henchman include file to facilitate code reuse, + * so dual includes will result in major compile errors due to + * function redefinition. + * + * ** Function behavior may and does differ from the originals. ** + * + * The primary difference is that X0 henchmen can be hired by + * more than one person during the course of the game. The + * current master of the henchman will be stored in a local var + * on the henchman itself; campaign variables on the player will + * indicate whether the player has ever hired the henchman. + * + */ +//::////////////////////////////////////////////////// +//:: Created By: Naomi Novik +//:: Created On: 09/12/2002 +//::////////////////////////////////////////////////// + +#include "x0_i0_common" +#include "nw_i0_plot" +#include "nw_i0_generic" +#include "nw_i0_spells" +#include "inc_prc_ecl" + + +/********************************************************************** + * CONSTANTS + **********************************************************************/ + +/**** Number of henchmen ****/ +const int X0_NUMBER_HENCHMEN = 3; + +const int X2_NUMBER_HENCHMEN = 2; // This won't be the same as the GetMaxHenchmen() function due to followers + + +/**** XP1 Henchmen tags ****/ +const string sDeekin = "X0_HEN_DEE"; +const string sDorna = "X0_HEN_DOR"; +const string sXandos = "X0_HEN_XAN"; + +/**** variable names and suffixes ****/ +const string sHenchmanDeathVarname = "NW_L_HEN_I_DIED"; +const string sIsHiredVarname = "X0_IS_CURRENTLY_HIRED"; +const string sLastMasterVarname = "X0_LAST_MASTER_TAG"; +const string sHenchmanKilledSuffix = "_GOTKILLED"; +const string sHenchmanResurrectedSuffix = "_RESURRECTED"; +const string sHenchmanDyingVarname = "X0_HEN_IS_DYING"; +const string sStoredHenchmanVarname = "X0_HEN_STORED"; + +// Amount of time to pass between respawn checks +const float DELAY_BETWEEN_RESPAWN_CHECKS = 3.0f; + +// * duration henchmen play their die animations +const float HENCHMEN_DIE_ANIM_DURATION = 6500000000.0f; + +// The maximum length of the wait before respawn +const float MAX_RESPAWN_WAIT = 60.0f; + +/**** Script names ****/ +const string sGoHomeScript = "x0_ch_hen_gohome"; + + + +/********************************************************************** + * FUNCTION PROTOTYPES + **********************************************************************/ + +/**** GENERAL FUNCTIONS ****/ + +// Copy all henchman-related local variables from source to target. +// Used when henchmen level up to keep variables consistent between +// the two copies of the henchman. +// This is a good function to look at to see what the local variables +// used on henchmen are. +void CopyHenchmanLocals(object oSource, object oTarget); + +/**** GREETING & MEETING FUNCTIONS ****/ + +// Use when the player first meets the henchman/NPC +// This uses local variables, not campaign variables. +void SetHasMet(object oPC, object oHench=OBJECT_SELF); + +// Returns TRUE if the player has met this henchman +// This uses local variables, not campaign variables. +int GetHasMet(object oPC, object oHench=OBJECT_SELF); + + +/**** HIRING FUNCTIONS ****/ + +// Can be used for both initial hiring and rejoining. +void HireHenchman(object oPC, object oHench=OBJECT_SELF, int bAdd=TRUE); + +// Use to fire the henchman +void FireHenchman(object oPC, object oHench=OBJECT_SELF); + +// Used when the henchman quits +void QuitHenchman(object oPC, object oHench=OBJECT_SELF); + +// Returns TRUE if the henchman is currently hired +int GetIsHired(object oHench=OBJECT_SELF); + +// Set the last master +void SetLastMaster(object oPC, object oHench=OBJECT_SELF); + +// Returns the last master of this henchman (useful for death situations) +object GetLastMaster(object oHench=OBJECT_SELF); + +// Indicate whether the player has ever hired this henchman +void SetPlayerHasHired(object oPC, object oHench=OBJECT_SELF, int bHired=TRUE); + +// Determine whether the player has ever hired this henchman +int GetPlayerHasHired(object oPC, object oHench=OBJECT_SELF); + +// Indicate whether the player has ever hired this henchman in this +// campaign. +void SetPlayerHasHiredInCampaign(object oPC, object oHench=OBJECT_SELF, int bHired=TRUE); + +// Indicate whether the player has ever hired this henchman in this +// campaign. +int GetPlayerHasHiredInCampaign(object oPC, object oHench=OBJECT_SELF); + +// Determine whether the henchman is currently working +// for this PC. +int GetWorkingForPlayer(object oPC, object oHench=OBJECT_SELF); + +// Set whether the henchman quit this player's employ +void SetDidQuit(object oPC, object oHench=OBJECT_SELF, int bQuit=TRUE); + +// Determine if the henchman quit +int GetDidQuit(object oPC, object oHench=OBJECT_SELF); + +/**** LEVELING UP ****/ + +// Checks to see if the henchman can level up. +// Can only level up if player is 2 or more levels +// higher than henchman. +// MAX = Level 14 +int GetCanLevelUp(object oPC, object oHench = OBJECT_SELF); + +// Levels the henchman up to be one level less than player. +// Returns the new creature. +object DoLevelUp(object oPC, object oHench = OBJECT_SELF); + +// Store all items in the henchman's inventory in the campaign DB, +// skipping those items which have the henchman's tag in their +// name. +// This is paired with RetrieveHenchmanItems for the leveling-up +// process. +void StoreHenchmanItems(object oPC, object oHench); + +// Retrieve (and then delete) all henchman inventory items out of +// the campaign DB, putting them in the inventory of the henchman. +// This is paired with StoreHenchmanItems for the leveling-up +// process. +void RetrieveHenchmanItems(object oPC, object oHench); + +/*** DEATH FUNCTIONS ***/ +// * Wrapper function added to fix bugs in the dying-state +// * process. Need to figure out whenever his value changes. +void SetHenchmanDying(object oHench=OBJECT_SELF, int bIsDying=TRUE); + + +// Set on the henchman to indicate s/he died; can also be used to +// unset this variable. +void SetDidDie(int bDie=TRUE, object oHench=OBJECT_SELF); + +// Returns TRUE if the henchman died. +// UNLIKE original, does NOT reset the value -- use +// SetDidDie(FALSE) to do that. +int GetDidDie(object oHench=OBJECT_SELF); + +// Set got killed +void SetKilled(object oPC, object oHench=OBJECT_SELF, int bKilled=TRUE); + +// Determine if this PC got the henchman killed +int GetKilled(object oPC, object oHench=OBJECT_SELF); + +// Set that this PC resurrected the henchman +void SetResurrected(object oPC, object oHench=OBJECT_SELF, int bResurrected=TRUE); + +// Determine if this PC resurrected the henchman +int GetResurrected(object oPC, object oHench=OBJECT_SELF); + +// Respawn the henchman, by preference at the master's current +// respawn point, or at the henchman's starting location otherwise. +void RespawnHenchman(object oHench=OBJECT_SELF); + +// Keep dead by playing the appropriate death animation for the +// maximum wait until respawn. +void KeepDead(object oHench=OBJECT_SELF); + +// Stop keeping dead by playing the 'woozy' standing animation. +void StopKeepingDead(object oHench=OBJECT_SELF); + +// Raise and freeze henchman to 1 hp so s/he can be stabilized +void RaiseForRespawn(object oPC, object oHench=OBJECT_SELF); + +// See if our maximum wait time has passed +int GetHasMaxWaitPassed(int nChecks); + +// Do the checking to see if we respawn -- this function works +// in a circle with DoRespawnCheck. +void RespawnCheck(object oPC, int nChecks=0, object oHench=OBJECT_SELF); + +// Perform a single respawn check -- this function works +// in a circle with RespawnCheck. +void DoRespawnCheck(object oPC, int nChecks, object oHench=OBJECT_SELF); + +// This function actually invokes the respawn. +void DoRespawn(object oPC, object oHench=OBJECT_SELF); + +// Set up before the respawn +void PreRespawnSetup(object oHench=OBJECT_SELF); + +// Clean up after the respawn. +void PostRespawnCleanup(object oHench=OBJECT_SELF); + +// Determine if this henchman is currently dying +int GetIsHenchmanDying(object oHench=OBJECT_SELF); + +// levels up the henchman assigned to oPC +void LevelUpXP1Henchman(object oPC); + + +/***** MODULE TRANSFER FUNCTIONS *****/ + +// Call this function when the PC is about to leave a module +// to enable restoration of the henchman on re-entry into the +// sequel module. Both modules must use the same campaign db +// for this to work. +void StoreCampaignHenchman(object oPC); + +// Call this function when a PC enters a sequel module to restore +// the henchman (complete with inventory). The function +// StoreCampaignHenchman must have been called first, and both +// modules must use the same campaign db. (See notes in x0_i0_campaign.) +// +// The restored henchman will automatically be re-hired and will be +// created next to the PC. +void RetrieveCampaignHenchman(object oPC); + +// Levels a henchman up to the given level, alternating +// between the first and second classes if they are multiclassed. +void LevelHenchmanUpTo(object oHenchman, int nLevel, int nClass2=CLASS_TYPE_INVALID, int nMaxLevelInSecondClass=0, int nPackageClass1=PACKAGE_INVALID, int nPackageClass2=PACKAGE_INVALID); + +// *returns true if oHench is a follower +int GetIsFollower(object oHench); +// * sets whether oHench is a follower or not +void SetIsFollower(object oHench, int bValue=TRUE); +// * removes all followers +// * if bRemoveAll=TRUe then remove normal hencies too +void RemoveAllFollowers(object oPC, int bRemoveAll = FALSE); + +/********************************************************************** + * FUNCTION DEFINITIONS + **********************************************************************/ + +// * had to add this commandable wrapper to track down a bug in the henchmen +void WrapCommandable(int bCommand, object oHench) +{ +/* string s =""; + if (bCommand) + s = "TRUE"; + else + s = "FALSE"; + SendMessageToPC(GetFirstPC(), GetName(OBJECT_SELF) + " commandable set to " + s);*/ + while (GetCommandable(oHench) != bCommand) + { + SetCommandable(bCommand, oHench); + } +} + +void brentDebug(string s) +{ + // SendMessageToPC(GetFirstPC(), s); +} + +/**** GENERAL FUNCTIONS ****/ + +// Copy all henchman-related local variables from source to target. +// Used when henchmen level up to keep variables consistent between +// the two copies of the henchman. +// This is a good function to look at to see what the local variables +// used on henchmen are. +void CopyHenchmanLocals(object oSource, object oTarget) +{ + if ( !GetIsObjectValid(oTarget) || !GetIsObjectValid(oSource)) + return; + + // This copies over our current associate state, so we + // keep whatever settings we had before. + SetLocalInt(oTarget, + sAssociateMasterConditionVarname, + GetLocalInt(oSource, sAssociateMasterConditionVarname)); + +} + + +/**** GREETING & MEETING FUNCTIONS ****/ + +// Use when the player first meets the henchman +void SetHasMet(object oPC, object oHench=OBJECT_SELF) +{ + SetBooleanValue(oPC, GetTag(oHench) + sHasMetSuffix); +} + +// Returns TRUE if the player has met this henchman +int GetHasMet(object oPC, object oHench=OBJECT_SELF) +{ + return GetBooleanValue(oPC, GetTag(oHench) + sHasMetSuffix); +} + + +/**** HIRING FUNCTIONS ****/ + +// *returns true if oHench is a follower +int GetIsFollower(object oHench) +{ + return GetLocalInt(oHench, "X2_JUST_A_FOLLOWER"); +} +// * sets whether oHench is a follower or not +void SetIsFollower(object oHench, int bValue=TRUE) +{ + SetLocalInt(oHench, "X2_JUST_A_FOLLOWER", bValue); +} + +// * removes all followers +// * if bRemoveAll=true, it removes +// * all henchmen. +void RemoveAllFollowers(object oPC, int bRemoveAll = FALSE) +{ + //int bDone = FALSE; + object oHench = OBJECT_INVALID; + int i = 0; + int j; + + // * have to count down because creatures are being deleted + for (j=10; j>0; j--) + { + oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, j); + if (GetIsObjectValid(oHench) == TRUE) + { + // * if the creature is marked as a follower + // * dump them + if ( (GetIsFollower(oHench) == TRUE) || (bRemoveAll == TRUE)) + { + // * Take them out of stealth mode too (Nov 1 - BK) + SetActionMode(oHench, ACTION_MODE_STEALTH, FALSE); + // * Remove invisibility type effects off of henchmen (Nov 7 - BK) + RemoveSpellEffects(SPELL_INVISIBILITY, oHench, oHench); + RemoveSpellEffects(SPELL_IMPROVED_INVISIBILITY, oHench, oHench); + RemoveSpellEffects(SPELL_SANCTUARY, oHench, oHench); + RemoveSpellEffects(SPELL_ETHEREALNESS, oHench, oHench); + + FireHenchman(oPC, oHench); + //bDone = TRUE; + } + } + } + +} + +// * count number of henchman +// * if nFollowersInstead = TRUE then count the # of +int X2_GetNumberOfHenchmen(object oPC, int bFollowersInstead=FALSE) +{ + int i = 1; + int nCount = 0; + int bDone = FALSE; + object oHench = OBJECT_INVALID; + + do + { + oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, i); + i++; + if (GetIsObjectValid(oHench) == TRUE) + { + // * if the creature is marked as a follower + // * they do not count against the henchman limit + if (bFollowersInstead == FALSE && GetIsFollower(oHench) == FALSE) + nCount++; + else + if (bFollowersInstead == TRUE && GetIsFollower(oHench) == TRUE) + nCount++; + } + else + { + bDone = TRUE; + } + } + while (bDone == FALSE); + + return nCount; + +} + +// * Fires the first henchman who is not +// * a follower +void X2_FireFirstHenchman(object oPC) +{ + int i = 1; + int bDone = FALSE; + object oHench = OBJECT_INVALID; + + do + { + oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, i); + i++; + if (GetIsObjectValid(oHench) == TRUE) + { + // * if the creature is marked as a follower + // * they do not count against the henchman limit + if (GetIsFollower(oHench) == FALSE) + { + FireHenchman(oPC, oHench); + bDone = TRUE; + } + } + else + { + bDone = TRUE; + } + } + while (bDone == FALSE); + + +} +// Can be used for both initial hiring and rejoining. +void HireHenchman(object oPC, object oHench=OBJECT_SELF, int bAdd=TRUE) +{ + if ( !GetIsObjectValid(oPC) || !GetIsObjectValid(oHench) ) + { + return; + } +// SpawnScriptDebugger(); + + // Fire the PC's former henchman if necessary +// object oFormerHench = GetAss*ociate(ASSOCIATE_TYPE_HENCHMAN, oPC, 1); + int nCountHenchmen = X2_GetNumberOfHenchmen(oPC); +// int nNumberOfFollowers = X2_GetNumberOfHenchmen(oPC, TRUE); + // * The true number of henchmen are the number of hired +// nCountHenchmen = nCountHenchmen ; + +// int nMaxHenchmen = X2_NUMBER_HENCHMEN; + int nMaxHenchmen = GetMaxHenchmen(); + + // Adding this henchman would exceed the module imposed + // henchman limit. + // Fire the first henchman + // The third slot is reserved for the follower + if ( (nCountHenchmen >= nMaxHenchmen) && bAdd == TRUE) + { + X2_FireFirstHenchman(oPC); + } + +/* if (GetIsObjectValid(oFormerHench) && bAdd == TRUE) + { + DBG_msg("Firing former henchman"); + FireHenchman(oPC, oFormerHench); + } + else + { + DBG_msg("No valid former henchman"); + } +*/ + // Mark the henchman as working for the given player + if (!GetPlayerHasHired(oPC, oHench)) + { + // This keeps track if the player has EVER hired this henchman + // Floodgate only (XP1). Should never store info to a database as game runs, only between modules or in Persistent setting + if (GetLocalInt(GetModule(), "X2_L_XP2") != 1) + { + SetPlayerHasHiredInCampaign(oPC, oHench); + } + SetPlayerHasHired(oPC, oHench); + } + SetLastMaster(oPC, oHench); + + // Clear the 'quit' setting in case we just persuaded + // the henchman to rejoin us. + SetDidQuit(oPC, oHench, FALSE); + + // If we're hooking back up with the henchman after s/he + // died, clear that. + SetDidDie(FALSE, oHench); + SetKilled(oPC, oHench, FALSE); + SetResurrected(oPC, oHench, FALSE); + + // Turn on standard henchman listening patterns + SetAssociateListenPatterns(oHench); + + // By default, companions come in with Attack Nearest and Follow + // modes enabled. + SetLocalInt(oHench, + "NW_COM_MODE_COMBAT",ASSOCIATE_COMMAND_ATTACKNEAREST); + SetLocalInt(oHench, + "NW_COM_MODE_MOVEMENT",ASSOCIATE_COMMAND_FOLLOWMASTER); + + // Add the henchman + if (bAdd == TRUE) + { + AddHenchman(oPC, oHench); + DelayCommand(1.0, AssignCommand(oHench, LevelUpXP1Henchman(oPC))); + } + +} + +// Use to fire the PC's current henchman +void FireHenchman(object oPC, object oHench=OBJECT_SELF) +{ + if ( !GetIsObjectValid(oPC) || !GetIsObjectValid(oHench) ) + { + //DBG_msg("Invalid PC or henchman!"); + return; + } + // * turn off stealth mode + SetActionMode(oHench, ACTION_MODE_STEALTH, FALSE); + // If we're firing the henchman after s/he died, + // clear that first, since we're not really "hired" + SetDidDie(FALSE, oHench); + SetKilled(oPC, oHench, FALSE); + SetResurrected(oPC, oHench, FALSE); + + // Now double-check that this is actually our master + if (!GetIsHired(oHench) || GetMaster(oHench) != oPC) + { + //DBG_msg("FireHenchman: not hired or this PC isn't her master."); + return; + } + + // Remove the henchman + AssignCommand(oHench, ClearActions(CLEAR_X0_I0_HENCHMAN_Fire)); + RemoveHenchman(oPC, oHench); + + //Store former henchmen for retrieval in Interlude + // April 28 2003. This storage only happens in Chapter 1 + string sModTag = GetTag(GetModule()); + if (sModTag == "x0_module1") + { + if (GetTag(oHench) == "x0_hen_xan") + StoreCampaignObject("dbHenchmen", "xp0_hen_xan", oHench); + else if (GetTag(oHench) == "x0_hen_dor") + StoreCampaignObject("dbHenchmen", "xp0_hen_dor", oHench); + } + + //DBG_msg("Removed henchman"); + // Clear everything that was previously set, EXCEPT + // that the player has hired -- that info we want to + // keep for the future. + + // Clear this out so if the henchman gets killed while + // unhired, she won't think this PC is still her master + SetLastMaster(OBJECT_INVALID, oHench); + + // Clear dialogue events + ClearAllDialogue(oPC, oHench); + + // Send the henchman home + // APril 2003: Cut this. Make them stay where they are. + // ExecuteScript(sGoHomeScript, oHench); +} + +// Used when the henchman quits +void QuitHenchman(object oPC, object oHench=OBJECT_SELF) +{ + SetDidQuit(oPC, oHench, TRUE); + FireHenchman(oPC, oHench); +} + + +// Returns TRUE if the henchman is currently hired +int GetIsHired(object oHench=OBJECT_SELF) +{ + return GetIsObjectValid(GetMaster(oHench)); +} + +// Set the last master +void SetLastMaster(object oPC, object oHench=OBJECT_SELF) +{ + //DBG_msg("Set last master to " + GetName(oPC)); + SetLocalObject(oHench, sLastMasterVarname, oPC); +} + +// Returns the last master of this henchman (useful for death situations) +object GetLastMaster(object oHench=OBJECT_SELF) +{ + //DBG_msg("Getting last master: " + // + GetName(GetLocalObject(oHench, sLastMasterVarname))); + return GetLocalObject(oHench, sLastMasterVarname); +} + +// Indicate whether the player has ever hired this henchman +void SetPlayerHasHired(object oPC, object oHench=OBJECT_SELF, int bHired=TRUE) +{ + if (!GetIsObjectValid(oHench)) {return;} + SetBooleanValue(oPC, GetTag(oHench) + sHasHiredSuffix, bHired); +} + +// Determine whether the player has ever hired this henchman +int GetPlayerHasHired(object oPC, object oHench=OBJECT_SELF) +{ + if (!GetIsObjectValid(oHench)) {return FALSE;} + return GetBooleanValue(oPC, GetTag(oHench) + sHasHiredSuffix); +} + + +// Indicate whether the player has ever hired this henchman in this +// campaign. +void SetPlayerHasHiredInCampaign(object oPC, object oHench=OBJECT_SELF, int bHired=TRUE) +{ + if (!GetIsObjectValid(oHench)) {return;} + SetCampaignBooleanValue(oPC, GetTag(oHench) + sHasHiredSuffix, bHired); +} + +// Indicate whether the player has ever hired this henchman in this +// campaign. +int GetPlayerHasHiredInCampaign(object oPC, object oHench=OBJECT_SELF) +{ + if (!GetIsObjectValid(oHench)) {return FALSE;} + return GetCampaignBooleanValue(oPC, GetTag(oHench) + sHasHiredSuffix); +} + + + +// Determine whether the henchman is currently working +// for this PC. +int GetWorkingForPlayer(object oPC, object oHench=OBJECT_SELF) +{ + if (!GetIsObjectValid(oHench) || !GetIsObjectValid(oPC)) {return FALSE;} + return (GetMaster(oHench) == oPC); +} + +// Set whether the henchman quit this player's employ +void SetDidQuit(object oPC, object oHench=OBJECT_SELF, int bQuit=TRUE) +{ + if (!GetIsObjectValid(oHench)) {return;} + SetBooleanValue(oPC, GetTag(oHench) + sDidQuitSuffix, bQuit); +} + +// Determine if the henchman quit +int GetDidQuit(object oPC, object oHench=OBJECT_SELF) +{ + if (!GetIsObjectValid(oHench)) {return FALSE;} + return GetBooleanValue(oPC, GetTag(oHench) + sDidQuitSuffix); +} + +/**** LEVELING UP ****/ + +// Checks to see if the henchman can level up. +// Can only level up if player is 2 or more levels +// higher than henchman. +// MIN = Level 4 +// MAX = Level 14 +int GetCanLevelUp(object oPC, object oHench = OBJECT_SELF) +{ +// SpeakString("This function no longer does nothing. Should not be called"); + return FALSE; +} + +// Levels the henchman up to be one level less than player. +// Returns the new creature. +object DoLevelUp(object oPC, object oHench = OBJECT_SELF) +{ +// SpeakString("This function no longer does anything. Should not be called"); + return OBJECT_INVALID; +} + +// Store all items in the henchman's inventory in the campaign DB. +void StoreHenchmanItems(object oPC, object oHench) +{ + string sHenchTag = GetTag(oHench); + + string sTag; + object oItem; + int nNth = 0; + string sItemName; string sVarname; + + // Mark and store equipped items + int i; + for (i=0; i < NUM_INVENTORY_SLOTS; i++) { + oItem = GetItemInSlot(i, oHench); + if (GetIsObjectValid(oItem)) { + sItemName = GetTag(oItem); + //DBG_msg("Found equipped item " + sItemName); + + // store the slot number + 1 so when we + // retrieve a 0 can be treated as unequipped + SetLocalInt(oPC, "HENCH_HAS_EQUIPPED_" + sItemName, i+1); + + if (FindSubString(sItemName, sHenchTag) == -1) { + // put it in the db + sVarname = sHenchTag + "_ITEM_" + IntToString(nNth); + //DBG_msg("Storing equipped item: " + sItemName + // + ", varname " + sVarname); + nNth++; + StoreCampaignDBObject(oPC, sVarname, oItem); + } + } + } + + // Store all the henchman inventory in the campaign db + oItem = GetFirstItemInInventory(oHench); + while (GetIsObjectValid(oItem)) { + sItemName = GetTag(oItem); + //DBG_msg("Found item " + sItemName); + if (FindSubString(sItemName, sHenchTag) == -1) { + // put it in the db + sVarname = sHenchTag + "_ITEM_" + IntToString(nNth); + //DBG_msg("Storing item: " + sItemName + ", varname " + sVarname); + nNth++; + StoreCampaignDBObject(oPC, sVarname, oItem); + } + + oItem = GetNextItemInInventory(oHench); + } +} + + +// Retrieve (and then delete) all henchman inventory items out of +// the campaign DB, putting them in the inventory of the henchman. +void RetrieveHenchmanItems(object oPC, object oHench) +{ + location lHench = GetLocation(oHench); + string sHenchTag = GetTag(oHench); + int nNth = 0; int nSlot = -1; + object oCurItem = OBJECT_INVALID; + + string sVarname = sHenchTag + "_ITEM_0"; + + object oItem = RetrieveCampaignDBObject(oPC, sVarname, lHench, oHench); + string sItemName = GetTag(oItem); + + //DBG_msg("Retrieving item " + sItemName + ", varname: " + sVarname); + while (GetIsObjectValid(oItem)) { + DeleteCampaignDBVariable(oPC, sVarname); + nNth++; + sVarname = sHenchTag + "_ITEM_" + IntToString(nNth); + oItem = RetrieveCampaignDBObject(oPC, sVarname, lHench, oHench); + sItemName = GetTag(oItem); + //DBG_msg("Retrieving item " + sItemName + ", varname: " + sVarname); + } + + // Now run through inventory and restore equipped items + oItem = GetFirstItemInInventory(oHench); + while (GetIsObjectValid(oItem)) { + sItemName = GetTag(oItem); + + // Above, we stored the slot + 1 so we could treat a 0 + // as meaning "not equipped". + nSlot = GetLocalInt(oPC, "HENCH_HAS_EQUIPPED_" + sItemName) - 1; + if (nSlot != -1) { + //DBG_msg("Item was equipped in slot " + IntToString(nSlot)); + DeleteLocalInt(oPC, "HENCH_HAS_EQUIPPED_" + sItemName); + oCurItem = GetItemInSlot(nSlot, oHench); + if (GetIsObjectValid(oCurItem)) { + AssignCommand(oHench, ActionUnequipItem(oCurItem)); + } + AssignCommand(oHench, ActionEquipItem(oItem, nSlot)); + } + oItem = GetNextItemInInventory(oHench); + } +} + + +/*** DEATH FUNCTIONS ***/ + +// Set on the henchman to indicate s/he died; can also be used to +// unset this variable. +void SetDidDie(int bDie=TRUE, object oHench=OBJECT_SELF) +{ + SetBooleanValue(oHench, sHenchmanDeathVarname, bDie); +} + +// Returns TRUE if the henchman died +int GetDidDie(object oHench=OBJECT_SELF) +{ + return GetBooleanValue(oHench, sHenchmanDeathVarname); +} + +// Set got killed +void SetKilled(object oPC, object oHench=OBJECT_SELF, int bKilled=TRUE) +{ + SetBooleanValue(oPC, GetTag(oHench) + sHenchmanKilledSuffix, bKilled); +} + +// Determine if this PC got the henchman killed +int GetKilled(object oPC, object oHench=OBJECT_SELF) +{ + return GetBooleanValue(oPC, GetTag(oHench) + sHenchmanKilledSuffix); +} + +// Set that this PC resurrected the henchman +void SetResurrected(object oPC, object oHench=OBJECT_SELF, int bResurrected=TRUE) +{ + SetBooleanValue(oPC, GetTag(oHench) + sHenchmanResurrectedSuffix, bResurrected); +} + +// Determine if this PC resurrected the henchman +int GetResurrected(object oPC, object oHench=OBJECT_SELF) +{ + return GetBooleanValue(oPC, GetTag(oHench) + sHenchmanResurrectedSuffix); +} + + + +// Handle the respawning of the henchman back at either the +// respawn location or the starting location +void RespawnHenchman(object oHench=OBJECT_SELF) +{ + + // : REMINDER: The delay is here for a reason + // Remove effects on the henchman + DelayCommand(0.1, RemoveEffects(oHench)); + + // Resurrect + DelayCommand(0.2, + ApplyEffectToObject(DURATION_TYPE_PERMANENT, + EffectResurrection(), + oHench)); + + // Heal back to full hp + DelayCommand(0.3, + ApplyEffectToObject(DURATION_TYPE_PERMANENT, + EffectHeal(GetMaxHitPoints(oHench)), + oHench)); + + // Set back to destroyable + DelayCommand(5.1, + AssignCommand(oHench, + SetIsDestroyable(TRUE, TRUE, TRUE))); + + + // Handle sending back to respawn point + location lRespawn = GetRespawnLocation(oHench); + + // Check for validity + if (GetIsObjectValid(GetAreaFromLocation(lRespawn))) + { + DelayCommand(0.3, JumpToLocation(lRespawn)); + }// else + //{ + // DelayCommand(0.3, ActionSpeakString("NO VALID RESPAWN POINT FOUND")); + //} +} + + + + +// Keep dead by playing the appropriate death animation for the +// maximum wait until respawn. +void KeepDead(object oHench=OBJECT_SELF) +{ // SpawnScriptDebugger(); + DelayCommand(0.1, WrapCommandable(TRUE, oHench)); + DelayCommand(0.2, + AssignCommand(oHench, + ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT, + 1.0, HENCHMEN_DIE_ANIM_DURATION))); + DelayCommand(0.3, WrapCommandable(FALSE, oHench)); +} + +// Stop keeping dead by playing the 'woozy' standing animation. +void StopKeepingDead(object oHench=OBJECT_SELF) +{ + DelayCommand(0.1, WrapCommandable(TRUE, oHench)); + DelayCommand(0.2, + AssignCommand(oHench, + PlayAnimation(ANIMATION_LOOPING_PAUSE_DRUNK, + 1.0, 6.0))); + DelayCommand(0.3, WrapCommandable(FALSE, oHench)); +} + +// Does a partial restoration to get rid of negative effects +void PartialRes(object oHench) +{ + RemoveEffects(oHench); + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), oHench); +} + +// Raise and freeze henchman to 1 hp so s/he can be stabilized +void RaiseForRespawn(object oPC, object oHench=OBJECT_SELF) +{ + // Resurrect + DelayCommand(0.1, PartialRes(oHench)); + + // * May 13 2003 + // * if something weird has happened and my hitpoints are restored + // * then bring back to life (i.e., a con penalty going away might restore + // * hitpoints). + if (GetCurrentHitPoints(oHench) > 1) + { + DoRespawn(oPC, OBJECT_SELF); + return; + } + KeepDead(oHench); + + //DBG_msg("Henchman " + GetTag(oHench) + " raised for respawn"); +} + + +// See if our maximum wait time has passed +int GetHasMaxWaitPassed(int nChecks) +{ + return ( (nChecks * DELAY_BETWEEN_RESPAWN_CHECKS) >= MAX_RESPAWN_WAIT ) ; +} + + +// Do the checking to see if we respawn -- this function works +// in a circle with DoRespawnCheck. +void RespawnCheck(object oPC, int nChecks=0, object oHench=OBJECT_SELF) +{ + //DBG_msg("Doing respawn check " + IntToString(nChecks + 1)); + DelayCommand(DELAY_BETWEEN_RESPAWN_CHECKS, + DoRespawnCheck(oPC, nChecks+1, oHench)); +} + + +// Perform a single respawn check -- this function works +// in a circle with RespawnCheck. +void DoRespawnCheck(object oPC, int nChecks, object oHench=OBJECT_SELF) +{ + //brentDebug("In RespawnCheck"); + // * if a healing spell has been used on henchmen, they ain't dead no more + if (GetIsHenchmanDying(oHench) == FALSE) + return; + + // SpawnScriptDebugger(); + if ( GetCurrentHitPoints(oHench) == 1 && GetHasMaxWaitPassed(nChecks)) + { + //DBG_msg("Maximum wait reached, respawning"); + DoRespawn(oPC, oHench); + } + else if (GetCurrentHitPoints(oHench) == 1 + && + ( GetArea(oPC) != GetArea(oHench) || GetIsDead(oPC)) ) + { + //DBG_msg("Master left or died, respawning"); + DoRespawn(oPC, oHench); + } + else if (GetCurrentHitPoints(oHench) > 1 && !GetResurrected(oPC)) + { + // We're alive, must have been resurrected + // Do the 'respawn' anyway to clean up after death + //DBG_msg("Master stabilized us, respawning"); + DoRespawn(oPC, oHench); + } + else + { + // We aren't resurrecting yet, but keep checking + RespawnCheck(oPC, nChecks, oHench); + } +} + +// This function actually invokes the respawn. +void DoRespawn(object oPC, object oHench=OBJECT_SELF) +{ +// SpawnScriptDebugger(); + StopKeepingDead(oHench); + + // Set henchman commandable + DelayCommand(0.4, + WrapCommandable(TRUE, oHench)); + + // if (GetCurrentHitPoints(oHench) > 0) + if (GetLocalInt(oHench, "X0_L_WAS_HEALED") == 10) + { + SetLocalInt(oHench, "X0_L_WAS_HEALED",0); + // Hey, we've been stabilized! Good on you, master. + SetResurrected(oPC, oHench); + + // Automatically re-add the henchman BK 2003 Don't rehire them completely since they were never not hired. + HireHenchman(oPC, oHench, FALSE); + } + else + { + + // * only in Chapter 1 will the henchmen respawn + // * somewhere, otherwise they'll stay where they are. + if (GetTag(GetModule()) == "x0_module1") + { + // Indicate that this master got us killed + SetKilled(oPC, oHench); + RemoveHenchman(oPC, oHench); + // Do the respawn + DelayCommand(1.0, RespawnHenchman(oHench)); + } + } + PostRespawnCleanup(oHench); +} + +void PreRespawnSetup(object oHench=OBJECT_SELF) +{ + // Mark us as in the process of dying + SetHenchmanDying(oHench, TRUE); + + // Indicate the henchman died + SetDidDie(TRUE, oHench); + + // Mark henchman PLOT & Busy + SetPlotFlag(oHench, TRUE); + SetAssociateState(NW_ASC_IS_BUSY, TRUE, oHench); + + // Make henchman's corpse stick around, + // be raiseable, and selectable + AssignCommand(oHench, SetIsDestroyable(FALSE, TRUE, TRUE)); + + AssignCommand(oHench, ClearActions(CLEAR_X0_I0_HENCHMAN_PreRespawn, TRUE)); +} + + +void PostRespawnCleanup(object oHench=OBJECT_SELF) +{ + DelayCommand(1.0, + SetHenchmanDying(oHench, FALSE)); + + // Clear henchman being busy + DelayCommand(1.1, + SetAssociateState(NW_ASC_IS_BUSY, FALSE, oHench)); + + // Clear the plot flag + DelayCommand(1.2, SetPlotFlag(oHench, FALSE)); + +} + +// Determine if this henchman is currently dying +int GetIsHenchmanDying(object oHench=OBJECT_SELF) +{ + int bHenchmanDying = GetAssociateState(NW_ASC_MODE_DYING, oHench); + if (bHenchmanDying == TRUE) + { + //brentDebug("henchman is dying"); + return TRUE; + } + else + { + //brentDebug("Henchman is not dying"); + return FALSE; + } +} + +// * Wrapper function added to fix bugs in the dying-state +// * process. Need to figure out whenever his value changes. +void SetHenchmanDying(object oHench=OBJECT_SELF, int bIsDying=TRUE) +{ + SetAssociateState(NW_ASC_MODE_DYING, bIsDying, oHench); + //brentDebug("In SetHenchmanDying. Value for " + GetName(oHench) + " is " + IntToString(bIsDying)); + // GetIsHenchmanDying(); +} +/***** MODULE TRANSFER FUNCTIONS *****/ + +// Call this function when the PC is about to leave a module +// to enable restoration of the henchman on re-entry into the +// sequel module. Both modules must use the same campaign db +// for this to work. +void StoreCampaignHenchman(object oPC) +{ + object oHench = GetHenchman(oPC); + if (!GetIsObjectValid(oHench)) { + //DBG_msg("No valid henchman to store"); + return; + } + + //DBG_msg("Storing henchman: " + GetTag(oHench)); + int ret = StoreCampaignDBObject(oPC, sStoredHenchmanVarname, oHench); +/* if (!ret) { + DBG_msg("Error attempting to store henchman"); + } else { + DBG_msg("Henchman stored successfully"); + }*/ +} + +// Call this function when a PC enters a sequel module to restore +// the henchman (complete with inventory). The function +// StoreCampaignHenchman must have been called first, and both +// modules must use the same campaign db. (See notes in x0_i0_campaign.) +// +// The restored henchman will automatically be re-hired and will be +// created next to the PC. +// +// Any object in the module with the same tag as the henchman will be +// destroyed (to remove duplicates). +void RetrieveCampaignHenchman(object oPC) +{ + location lLoc = GetLocation(oPC); + object oHench = RetrieveCampaignDBObject(oPC, sStoredHenchmanVarname, lLoc); + + // Delete the henchman object from the db + DelayCommand(0.5, DeleteCampaignDBVariable(oPC, sStoredHenchmanVarname)); + + if (GetIsObjectValid(oHench)) { + DelayCommand(0.5, HireHenchman(oPC, oHench)); + + object oHenchDupe = GetNearestObjectByTag(GetTag(oHench), + oHench); + if (GetIsObjectValid(oHenchDupe) && oHenchDupe != oHench) { + DestroyObject(oHenchDupe); + } + }// else { + // DBG_msg("No valid henchman retrieved"); + //} +} + +// Levels a henchman up to the given level, alternating +// between the first and second classes if they are multiclassed. +// 0 as a max level means they will try to keep their levels balanced +void LevelHenchmanUpTo(object oHenchman, int nLevel, int nClass2=CLASS_TYPE_INVALID, + int nMaxLevelInSecondClass=0, int nPackageClass1=PACKAGE_INVALID, int nPackageClass2=PACKAGE_INVALID) +{ + + int nPackageToUse = nPackageClass1; + + + if ( !GetIsObjectValid(oHenchman) || GetHitDice(oHenchman) >= nLevel) + return; + + // * she has 3 rogue levels, decrement nLevel by this + if (GetTag(oHenchman) == "x2_hen_nathyra" && nClass2 == CLASS_TYPE_ASSASSIN) + { + nLevel = nLevel - 3; + } + + int nClass1 = GetClassByPosition(1, oHenchman); + if (nClass2 == CLASS_TYPE_INVALID) + { + nClass2 = GetClassByPosition(2, oHenchman); + } + + int nLevel1 = GetLevelByClass(nClass1, oHenchman); + int nLevel2 = GetLevelByClass(nClass2, oHenchman); + + int nClassToLevelUp; + + while ( (nLevel1 + nLevel2) < nLevel ) + { + if ( nClass2 != CLASS_TYPE_INVALID && (nLevel1 > nLevel2) ) + { + nClassToLevelUp = nClass2; + nLevel2++; + nPackageToUse = nPackageClass2; + } + else + { + nClassToLevelUp = nClass1; + nPackageToUse = nPackageClass1; + nLevel1++; + } + + // * if you have exceeded your max level in the second class + // * only level up in the first class from this point forward + if (nLevel2 > nMaxLevelInSecondClass) + { + nClassToLevelUp = nClass1; + nPackageToUse = nPackageClass1; + } + + // * Additional Rules + // * The player can choose a levelup stratedgy for the henchman + // * 0 = Normal, as per designer rules + // * 1 = Secondary Class: only take levels in your second class + // * 2 = First class: only take levels in your first class + // * Note: This choice overrides the above nMaxLevelInSecondClass + int nRule = GetLocalInt(oHenchman, "X0_L_LEVELRULES"); + + // HACK: If in XP2, reverse the rules + if (GetLocalInt(GetModule(), "X2_L_XP2") == 1) + { + if (nRule == 1) + nRule = 2; + else + if (nRule == 2) + nRule = 1; + } + + if (nRule == 1) + { + nClassToLevelUp = nClass2; + nPackageToUse = nPackageClass2; + } + else + if (nRule == 2) + { + nClassToLevelUp = nClass1; + } + if (!LevelUpHenchman(oHenchman, nClassToLevelUp, FALSE, nPackageToUse)) + { + // * In case the levelup failed (july 2003) for a prestige class + // * try one more time to levelup the primary class. + // * this way classes with an alternate prestige class will attempt + // * always to gain that class but fail until they meet the prereqs + // Feb. 11, 2004 - JE: Made this more generic, to fix evil aribeth + // at high levels. Instead of trying class 1, it tries the OTHER class, + // since it's possible for the first class to fail. + int nClassToLevelUp2; + if(nClassToLevelUp==nClass2) + { + nClassToLevelUp2 = nClass1; + nPackageToUse = nPackageClass1; + } + else + { + nClassToLevelUp2 = nClass2; + nPackageToUse = nPackageClass2; + } + if (nClassToLevelUp2==CLASS_TYPE_INVALID || + !LevelUpHenchman(oHenchman, nClassToLevelUp2, FALSE, nPackageToUse)) + { + SendMessageToPC(GetFirstPC(), "Level Up Failed For " + + GetName(oHenchman) + + " in class " + + IntToString(nClassToLevelUp)); + + return; + } + } + } +} + +// * Adjusts the levels for the henchmen +int AdjustXP2Levels(int nLevel, int nMin=13, int nAdjust=2) +{ + nLevel = nLevel - nAdjust; + if (nLevel < nMin) + nLevel = nMin; + return nLevel; +} +// * levels up the henchman assigned to oPC +// * Modified for XP2 so that it cycles through +// * all the available henchmen and levels them all up +// * +void LevelUpXP1Henchman(object oPC) +{ + if ( !GetIsObjectValid(oPC) ) + return; + + int i = 1; + object oAssociate; + for (i=1; i<= GetMaxHenchmen(); i++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, i); + + if ( GetIsObjectValid(oAssociate) ) + { + // * Followers do not level up + if (GetLocalInt(oAssociate, "X2_JUST_A_FOLLOWER") == FALSE) + { + int nResult; + int nLevel = GetECL(oPC); + string sTag = GetStringLowerCase(GetTag(oAssociate)); + + + + // ******************************** + // XP2 Stuff + // * if a mini henchman + // * nLevel = nLevel - 2; + // * because they are always 2 levels + // * behind the player. + // ******************************** + if (sTag == "x2_hen_deekin") + { + //nLevel = AdjustXP2Levels(nLevel); + LevelHenchmanUpTo(oAssociate, nLevel, 37, 40, 72, 117); + } + else + if (sTag == "x2_hen_daelan") + { + // * druid would have to be exposed + nLevel = AdjustXP2Levels(nLevel); + LevelHenchmanUpTo(oAssociate, nLevel, CLASS_TYPE_DRUID, 0, 105); + } + else + if (sTag == "x2_hen_sharwyn") + { + nLevel = AdjustXP2Levels(nLevel); + LevelHenchmanUpTo(oAssociate, nLevel, CLASS_TYPE_FIGHTER, 40, 106, 114); + } + else + if (sTag == "x2_hen_linu") + { + // * leveling up as a fighter would have to be exposed + nLevel = AdjustXP2Levels(nLevel); + LevelHenchmanUpTo(oAssociate, nLevel,CLASS_TYPE_FIGHTER , 0, 104); + } + else + if (sTag == "x2_hen_tomi") + { //SpawnScriptDebugger(); + nLevel = AdjustXP2Levels(nLevel); + LevelHenchmanUpTo(oAssociate, nLevel, CLASS_TYPE_SHADOWDANCER, 40, 103, 116); + } + else + if (sTag == "x2_hen_nathyra") + { + // After one level of wizard + // she will take one level of rogue. + + if (GetHitDice(oAssociate) <= 6) + { + LevelHenchmanUpTo(oAssociate, 12, CLASS_TYPE_ROGUE, 3, 101, 8); + if (nLevel >= 14) + LevelHenchmanUpTo(oAssociate, nLevel, CLASS_TYPE_ASSASSIN, 40, 101, 115); + } + else + { + LevelHenchmanUpTo(oAssociate, nLevel , CLASS_TYPE_ASSASSIN, 40, 101, 115); + } + } + else + if (sTag == "x2_hen_valen") + { + LevelHenchmanUpTo(oAssociate, nLevel, CLASS_TYPE_WEAPON_MASTER, 40, 102,113); + } + else + // * Aribeth + if (sTag =="h2_aribeth") { + /* Aribeth has special rules + - if she is good, she'll level up as a paladin + - if she is evil, she'll level up as a blackguard + */ + if (GetAlignmentGoodEvil(oAssociate) == ALIGNMENT_GOOD) + { + LevelHenchmanUpTo(oAssociate, nLevel, CLASS_TYPE_INVALID, 0, 129); + } + else + // Blackguard + { + LevelHenchmanUpTo(oAssociate, nLevel, CLASS_TYPE_BLACKGUARD, 40, 129, 130); + } + + } + + + // ******************************** + // XP1 Stuff + // ******************************** + if ( sTag == "x0_hen_xan" ) + { + LevelHenchmanUpTo(oAssociate, nLevel, CLASS_TYPE_BARBARIAN, 2); + } + else if (sTag == "x0_hen_dor") + { + LevelHenchmanUpTo(oAssociate, nLevel, CLASS_TYPE_CLERIC, 20); + } + else if (sTag == "x0_hen_dee") + { + LevelHenchmanUpTo(oAssociate, nLevel, CLASS_TYPE_ROGUE, 0); + } + else if (sTag == "belror") + { + LevelHenchmanUpTo(oAssociate, nLevel, CLASS_TYPE_WEAPON_MASTER, 40, 102,113); + } + else if (sTag == "boibo") + { + LevelHenchmanUpTo(oAssociate, nLevel, CLASS_TYPE_SHADOWDANCER, 20, PACKAGE_ROGUE_SHADOWDANCER,PACKAGE_SHADOWDANCER); + } + else if (sTag == "eowarar") + { + LevelHenchmanUpTo(oAssociate, nLevel, CLASS_TYPE_PALE_MASTER, 40, PACKAGE_WIZARD_PALEMASTER,PACKAGE_PALE_MASTER); + } + else if (sTag == "merrenton") + { + LevelHenchmanUpTo(oAssociate, nLevel, CLASS_TYPE_SHIFTER, 20, PACKAGE_DRUID_SHIFTER,PACKAGE_SHIFTER); + } + else + { + LevelHenchmanUpTo(oAssociate, nLevel); + } + } // Follower + } // valid associate + } // Loop +} + +//:://///////////////////////////////////////////// +//:: LevelUpAribeth +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + Initial Aribeth you meet in Chapter 3. + Levels her up to level 16 Paladin, + Level 6 Blackguard. + + Does some tricky alignment juggling to allow + this. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: +//::////////////////////////////////////////////// +void LevelUpAribeth(object oAribeth) +{ + // * set alignment good + AdjustAlignment(oAribeth, ALIGNMENT_GOOD, 100); + AdjustAlignment(oAribeth, ALIGNMENT_LAWFUL, 100); + // * give 16 levels of paladin + LevelHenchmanUpTo(oAribeth, 16, CLASS_TYPE_INVALID, 0, 129); + + // * set alignment lawful evil + AdjustAlignment(oAribeth, ALIGNMENT_EVIL, 100); + AdjustAlignment(oAribeth, ALIGNMENT_LAWFUL, 100); + + // * give 6 levels of blackguard + LevelHenchmanUpTo(oAribeth, 22, CLASS_TYPE_BLACKGUARD, 40, 129, 130); + + + // * set alignment chaotic neutral +// AdjustAlignment(oAribeth, ALIGNMENT_NEUTRAL, 100); +// AdjustAlignment(oAribeth, ALIGNMENT_LAWFUL, 100); +} + +//:://///////////////////////////////////////////// +//:: SetNumberOfRandom +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + Sets the number of random popups or + interjections that the henchman has + Should be called in henchman + spawn scripts + + In the format + 1|2|3|4| +*/ +//::////////////////////////////////////////////// +//:: Created By: +//:: Created On: +//::////////////////////////////////////////////// +void SetNumberOfRandom(string sVariableName, object oHench, int nNum) +{ + int i = 0; + string s = ""; + + for (i=1; i<= nNum; i++) + { + s = s + IntToString(i) + "|"; + } + + SetLocalString(oHench, sVariableName, s); +} + +// * Oct 14 - added the oHench parameters +string GetDialogFile(object oPC, string sHenchmenDlg, string sPreHenchDlg, object oHench=OBJECT_SELF) +{ + if ( GetPlayerHasHired(oPC, oHench) == TRUE) + { + return sHenchmenDlg; + } + else + { + return sPreHenchDlg; + + } +} + +//:://///////////////////////////////////////////// +//:: GetDialogFileToUse +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Returns the filename for the appropriate + dialog file to be used. + + Henchmen have various dialog files throughout + the game. +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: August 2003 +//::////////////////////////////////////////////// + +string GetDialogFileToUse(object oPC, object oHench = OBJECT_SELF) +{ + string sTag = GetTag(oHench); + string sModuleTag = GetTag(GetModule()); + // * Chapter 2 + + // * Chapter 1 only + if (sModuleTag == "x0_module1") + { + if (sTag == "x2_hen_sharwyn") + { + return GetDialogFile(oPC, "xp2_hen_shar", "q2asharwyn", oHench); + } + else + if (sTag == "x2_hen_daelan") + { + return GetDialogFile(oPC, "xp2_hen_dae", "q2adaelan", oHench); + } + else + if (sTag == "x2_hen_tomi") + { + return GetDialogFile(oPC, "xp2_hen_tomi", "q2atomi", oHench); + } + else + if (sTag == "x2_hen_linu") + { + return GetDialogFile(oPC, "xp2_hen_linu", "q2alinu", oHench); + } + else + if (sTag == "x2_hen_deekin") + { + return GetDialogFile(oPC, "xp2_hen_dee", "pre_deekin", oHench); + } + } + else + if (sModuleTag == "x0_module2" || sModuleTag == "x0_module3") + { + // * valen and nathyrra have area specific dialog + string sAreaTag = GetTag(GetArea(oPC)); + if (sTag == "x2_hen_valen") + { + if (sAreaTag == "q2a1_temple" && !GetIsObjectValid(GetMaster(oHench))) + { + return "xp2_valen"; + } + + return "xp2_hen_val"; + } + else + if (sTag == "x2_hen_nathyra" ) + { + if (sAreaTag == "q2a1_temple" && !GetIsObjectValid(GetMaster(oHench))) + { + return "xp2_nathyrra"; + } + + return "xp2_hen_nat"; + } + } + return ""; +} + +/********************************************************************** + * PRIVATE FUNCTIONS + * + * Note -- these are not really private, it's simply that they're + * unprototyped and therefore won't show up in the function list. + **********************************************************************/ + +// For debugging only. Close the comment below to enable. +// Make sure that the main() function in x0_i0_common is disabled +// or else you'll get duplicate function errors. + +/* void main() {} /* */ diff --git a/src/module/nss/x2_def_spawn.nss b/src/module/nss/x2_def_spawn.nss new file mode 100644 index 0000000..fef64ce --- /dev/null +++ b/src/module/nss/x2_def_spawn.nss @@ -0,0 +1,90 @@ +//:://///////////////////////////////////////////// +//:: Name x2_def_spawn +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + Default On Spawn script + + + 2003-07-28: Georg Zoeller: + + If you set a ninteger on the creature named + "X2_USERDEFINED_ONSPAWN_EVENTS" + The creature will fire a pre and a post-spawn + event on itself, depending on the value of that + variable + 1 - Fire Userdefined Event 1510 (pre spawn) + 2 - Fire Userdefined Event 1511 (post spawn) + 3 - Fire both events + + 2007-12-31: Deva Winblood + Modified to look for X3_HORSE_OWNER_TAG and if + it is defined look for an NPC with that tag + nearby or in the module (checks near first). + It will make that NPC this horse's master. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Keith Warner, Georg Zoeller +//:: Created On: June 11/03 +//::////////////////////////////////////////////// + +const int EVENT_USER_DEFINED_PRESPAWN = 1510; +const int EVENT_USER_DEFINED_POSTSPAWN = 1511; + +#include "x2_inc_switches" + +void main() +{ + string sTag; + object oNPC; + // User defined OnSpawn event requested? + int nSpecEvent = GetLocalInt(OBJECT_SELF,"X2_USERDEFINED_ONSPAWN_EVENTS"); + + // Pre Spawn Event requested + if (nSpecEvent == 1 || nSpecEvent == 3 ) + { + SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_PRESPAWN )); + } + + sTag=GetLocalString(OBJECT_SELF,"X3_HORSE_OWNER_TAG"); + if (GetStringLength(sTag)>0) + { // look for master + oNPC=GetNearestObjectByTag(sTag); + if (GetIsObjectValid(oNPC)&&GetObjectType(oNPC)==OBJECT_TYPE_CREATURE) + { // master found + AddHenchman(oNPC); + } // master found + else + { // look in module + oNPC=GetObjectByTag(sTag); + if (GetIsObjectValid(oNPC)&&GetObjectType(oNPC)==OBJECT_TYPE_CREATURE) + { // master found + AddHenchman(oNPC); + } // master found + else + { // master does not exist - remove X3_HORSE_OWNER_TAG + DeleteLocalString(OBJECT_SELF,"X3_HORSE_OWNER_TAG"); + } // master does not exist - remove X3_HORSE_OWNER_TAG + } // look in module + } // look for master + + /* Fix for the new golems to reduce their number of attacks */ + + int nNumber = GetLocalInt(OBJECT_SELF,CREATURE_VAR_NUMBER_OF_ATTACKS); + if (nNumber >0 ) + { + SetBaseAttackBonus(nNumber); + } + + // Execute default OnSpawn script. + ExecuteScript("nw_c2_default9", OBJECT_SELF); + + + //Post Spawn event requeste + if (nSpecEvent == 2 || nSpecEvent == 3) + { + SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_POSTSPAWN)); + } + +} diff --git a/src/module/nss/x2_hen_spawn.nss b/src/module/nss/x2_hen_spawn.nss new file mode 100644 index 0000000..7f578b0 --- /dev/null +++ b/src/module/nss/x2_hen_spawn.nss @@ -0,0 +1,8 @@ +#include "ms_name_inc" + +void main() +{ + object oCreature = OBJECT_SELF; + + ms_Nomenclature(oCreature); +} \ No newline at end of file diff --git a/src/module/nss/x2_hen_spell.nss b/src/module/nss/x2_hen_spell.nss new file mode 100644 index 0000000..9a746e5 --- /dev/null +++ b/src/module/nss/x2_hen_spell.nss @@ -0,0 +1,185 @@ +//:://///////////////////////////////////////////// +//:: Henchmen: On Spell Cast At +//:: NW_CH_ACB +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + This determines if the spell just cast at the + target is harmful or not. +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Dec 6, 2001 +//::////////////////////////////////////////////// + + +#include "X0_INC_HENAI" +#include "x2_i0_spells" + +void main() +{ + object oCaster = GetLastSpellCaster(); + + + // ************************************** + // * CHAPTER 1 + // * Player brings back a dead henchmen + // * for the first time + // * + // ************************************** + //This should only fire the first time they are raised - when they have + //first been discovered in Undermountain + if (GetLocalInt(OBJECT_SELF, "X2_SavedInUndermountain") == FALSE && GetTag(GetModule()) == "x0_module1") + { + if (GetLastSpell() == SPELL_RAISE_DEAD || GetLastSpell() == SPELL_RESURRECTION) + { + SetLocalInt(OBJECT_SELF, "X2_SavedInUndermountain", 1); + + object oPC = oCaster; + + if (GetTag(OBJECT_SELF) == "x2_hen_sharwyn") + { + AddJournalQuestEntry("q2sharwyn", 20, oPC); + } + else if (GetTag(OBJECT_SELF) == "x2_hen_tomi") + { + AddJournalQuestEntry("q2tomi", 20, oPC); + } + else if (GetTag(OBJECT_SELF) == "x2_hen_daelan") + { + AddJournalQuestEntry("q2daelan", 20, oPC); + } + + + if (GetHitDice(oPC) < 15) + { + Reward_2daXP(oPC, 12, TRUE); //600 xp reward if PC is less than 15th level + } + else + { + Reward_2daXP(oPC, 11, TRUE); //200 xp reward if PC is 15th level or higher + + } + + } + } // special case, first time being raised (if original henches + + if(GetLastSpellHarmful()) + { + + // * GZ Oct 3, 2003 + // * Really, the engine should handle this, but hey, this world is not perfect... + // * If I was hurt by my master or the creature hurting me has + // * the same master + // * Then clear any hostile feelings I have against them + // * After all, we're all just trying to do our job here + // * if we singe some eyebrow hair, oh well. + object oMyMaster = GetMaster(OBJECT_SELF); + if ((oMyMaster != OBJECT_INVALID) && (oMyMaster == oCaster || oMyMaster == GetMaster(oCaster) )) + { + ClearPersonalReputation(oCaster, OBJECT_SELF); + ClearAllActions(TRUE); + DelayCommand(1.2, ActionDoCommand(HenchmenCombatRound(OBJECT_INVALID))); + // Send the user-defined event as appropriate + if(GetSpawnInCondition(NW_FLAG_SPELL_CAST_AT_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_SPELL_CAST_AT)); + } + return; + } + + + SetCommandable(TRUE); + int bAttack = TRUE; + // * AOE Behavior + + if (MatchAreaOfEffectSpell(GetLastSpell()) == TRUE) + { + //* GZ 2003-Oct-02 : New AoE Behavior AI + int nAI = (GetBestAOEBehavior(GetLastSpell())); + switch (nAI) + { + case X2_SPELL_AOEBEHAVIOR_DISPEL_L: + case X2_SPELL_AOEBEHAVIOR_DISPEL_N: + case X2_SPELL_AOEBEHAVIOR_DISPEL_M: + case X2_SPELL_AOEBEHAVIOR_DISPEL_G: + case X2_SPELL_AOEBEHAVIOR_DISPEL_C: + bAttack = FALSE; + ActionCastSpellAtLocation(nAI, GetLocation(OBJECT_SELF)); + ActionDoCommand(SetCommandable(TRUE)); + SetCommandable(FALSE); + break; + + + case X2_SPELL_AOEBEHAVIOR_FLEE: + ClearActions(CLEAR_NW_C2_DEFAULTB_GUSTWIND); + ActionForceMoveToObject(oCaster, TRUE, 2.0); + ActionMoveToObject(GetMaster(), TRUE, 1.1); + DelayCommand(1.2, ActionDoCommand(HenchmenCombatRound(OBJECT_INVALID))); + bAttack = FALSE; + break; + + case X2_SPELL_AOEBEHAVIOR_IGNORE: + // well ... nothing + break; + + case X2_SPELL_AOEBEHAVIOR_GUST: + ActionCastSpellAtLocation(SPELL_GUST_OF_WIND, GetLocation(OBJECT_SELF)); + ActionDoCommand(SetCommandable(TRUE)); + SetCommandable(FALSE); + bAttack = FALSE; + break; + } + + } + + if( + (!GetIsObjectValid(GetAttackTarget()) && + !GetIsObjectValid(GetAttemptedSpellTarget()) && + !GetIsObjectValid(GetAttemptedAttackTarget()) && + !GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN)) && + !GetIsFriend(oCaster)) && bAttack + ) + { + SetCommandable(TRUE); + //Shout Attack my target, only works with the On Spawn In setup + SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK); + //Shout that I was attacked + SpeakString("NW_I_WAS_ATTACKED", TALKVOLUME_SILENT_TALK); + HenchmenCombatRound(oCaster); + } + } + // * Make a henchman initiate with the player if they've just been raised or resurrected + else if(GetLastSpell() == SPELL_RAISE_DEAD || GetLastSpell() == SPELL_RESURRECTION) + { + // * restore merchant faction to neutral + SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 100, oCaster); + SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 100, oCaster); + SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 100, oCaster); + ClearPersonalReputation(oCaster, OBJECT_SELF); + AssignCommand(OBJECT_SELF, SurrenderToEnemies()); + object oHench = OBJECT_SELF; + AssignCommand(oHench, ClearAllActions(TRUE)); + string sFile = GetDialogFileToUse(oCaster); + + // * reset henchmen attack state - Oct 28 (BK) + SetAssociateState(NW_ASC_MODE_DEFEND_MASTER, FALSE, oHench); + SetAssociateState(NW_ASC_MODE_STAND_GROUND, FALSE, oHench); + + // * Oct 30 - If player previously hired this hench + // * then just have them rejoin automatically + if (GetPlayerHasHired(oCaster, oHench) == TRUE) + { + // Feb 11, 2004 - Jon: Don't fire the HireHenchman function if the + // henchman is already oCaster's associate. Fixes a silly little problem + // that occured when you try to raise a henchman who wasn't actually dead. + if(GetMaster(oHench)!=oCaster) HireHenchman(oCaster, oHench, TRUE); + } + // * otherwise, they talk + else + { + AssignCommand(oCaster, ActionStartConversation(oHench, sFile)); + } + } + +} diff --git a/src/module/nss/x2_inc_itemprop.nss b/src/module/nss/x2_inc_itemprop.nss new file mode 100644 index 0000000..1148fbf --- /dev/null +++ b/src/module/nss/x2_inc_itemprop.nss @@ -0,0 +1,1508 @@ +//:://///////////////////////////////////////////// +//:: Item Property Functions +//:: x2_inc_itemprop +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + + Holds item property and item modification + specific code. + + If you look for anything specific to item + properties, your chances are good to find it + in here. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Georg Zoeller +//:: Created On: 2003-06-05 +//:: Last Update: 2003-10-07 +//::////////////////////////////////////////////// + +// * The tag of the ip work container, a placeable which has to be set into each +// * module that is using any of the crafting functions. +const string X2_IP_WORK_CONTAINER_TAG = "x2_plc_ipbox"; +// * 2da for the AddProperty ItemProperty +const string X2_IP_ADDRPOP_2DA = "des_crft_props" ; +// * 2da for the Poison Weapon Itemproperty +const string X2_IP_POISONWEAPON_2DA = "des_crft_poison" ; +// * 2da for armor appearance +const string X2_IP_ARMORPARTS_2DA = "des_crft_aparts" ; +// * 2da for armor appearance +const string X2_IP_ARMORAPPEARANCE_2DA = "des_crft_appear" ; + +// * Base custom token for item modification conversations (do not change unless you want to change the conversation too) +const int XP_IP_ITEMMODCONVERSATION_CTOKENBASE = 12220; +const int X2_IP_ITEMMODCONVERSATION_MODE_TAILOR = 0; +const int X2_IP_ITEMMODCONVERSATION_MODE_CRAFT = 1; + +// * Number of maximum item properties allowed on most items +const int X2_IP_MAX_ITEM_PROPERTIES = 8; + +// * Constants used with the armor modification system +const int X2_IP_ARMORTYPE_NEXT = 0; +const int X2_IP_ARMORTYPE_PREV = 1; +const int X2_IP_ARMORTYPE_RANDOM = 2; +const int X2_IP_WEAPONTYPE_NEXT = 0; +const int X2_IP_WEAPONTYPE_PREV = 1; +const int X2_IP_WEAPONTYPE_RANDOM = 2; + +// * Policy constants for IPSafeAddItemProperty() +const int X2_IP_ADDPROP_POLICY_REPLACE_EXISTING = 0; +const int X2_IP_ADDPROP_POLICY_KEEP_EXISTING = 1; +const int X2_IP_ADDPROP_POLICY_IGNORE_EXISTING =2; + + +// * removes all itemproperties with matching nItemPropertyType and nItemPropertyDuration +void IPRemoveMatchingItemProperties( object oItem, int nItemPropertyType, int nItemPropertyDuration = DURATION_TYPE_TEMPORARY, int nItemPropertySubType = -1 ); + +// * Removes ALL item properties from oItem matching nItemPropertyDuration +void IPRemoveAllItemProperties( object oItem, int nItemPropertyDuration = DURATION_TYPE_TEMPORARY ); + +// * returns TRUE if item can be equipped. +// * Uses Get2DAString, so do not use in a loop! +int IPGetIsItemEquipable( object oItem ); + +// * Changes the color of an item armor +// * oItem - The armor +// * nColorType - ITEM_APPR_ARMOR_COLOR_* constant +// * nColor - color from 0 to 63 +// * Since oItem is destroyed in the process, the function returns +// * the item created with the color changed +object IPDyeArmor( object oItem, int nColorType, int nColor ); + +// * Returns the container used for item property and appearance modifications in the +// * module. If it does not exist, create it. +object IPGetIPWorkContainer( object oCaller = OBJECT_SELF ); + +// * This function needs to be rather extensive and needs to be updated if there are new +// * ip types we want to use, but it goes into the item property include anyway +itemproperty IPGetItemPropertyByID( int nPropID, int nParam1 = 0, int nParam2 = 0, int nParam3 = 0, int nParam4 = 0 ); + +// * returns TRUE if oItem is a ranged weapon +int IPGetIsRangedWeapon( object oItem ); + +// * return TRUE if oItem is a melee weapon +int IPGetIsMeleeWeapon( object oItem ); + +// * return TRUE if oItem is a projectile (bolt, arrow, etc) +int IPGetIsProjectile( object oItem ); + +// * returns true if weapon is blugeoning (used for poison) +// * This uses Get2DAstring, so it is slow. Avoid using in loops! +int IPGetIsBludgeoningWeapon( object oItem ); + +// * Return the IP_CONST_CASTSPELL_* ID matching to the SPELL_* constant given in nSPELL_ID +// * This uses Get2DAstring, so it is slow. Avoid using in loops! +// * returns -1 if there is no matching property for a spell +int IPGetIPConstCastSpellFromSpellID( int nSpellID ); + +// * Returns TRUE if an item has ITEM_PROPERTY_ON_HIT and the specified nSubType +// * possible values for nSubType can be taken from IPRP_ONHIT.2da +// * popular ones: +// * 5 - Daze 19 - ItemPoison 24 - Vorpal +int IPGetItemHasItemOnHitPropertySubType( object oTarget, int nSubType ); + +// * Returns the number of possible armor part variations for the specified part +// * nPart - ITEM_APPR_ARMOR_MODEL_* constant +// * Uses Get2DAstring, so do not use in loops +int IPGetNumberOfAppearances( int nPart ); + + +// * Returns the next valid appearance type for oArmor +// * nPart - ITEM_APPR_ARMOR_MODEL_* constant +// * Uses Get2DAstring, so do not use in loops +int IPGetNextArmorAppearanceType(object oArmor, int nPart); + +// * Returns the previous valid appearance type for oArmor +// * nPart - ITEM_APPR_ARMOR_MODEL_* constant +// * Uses Get2DAstring, so do not use in loops +int IPGetPrevArmorAppearanceType(object oArmor, int nPart); + +// * Returns a random valid appearance type for oArmor +// * nPart - ITEM_APPR_ARMOR_MODEL_* constant +// * Uses Get2DAstring, so do not use in loops +int IPGetRandomArmorAppearanceType(object oArmor, int nPart); + +// * Returns a new armor based of oArmor with nPartModified +// * nPart - ITEM_APPR_ARMOR_MODEL_* constant of the part to be changed +// * nMode - +// * X2_IP_ARMORTYPE_NEXT - next valid appearance +// * X2_IP_ARMORTYPE_PREV - previous valid apperance; +// * X2_IP_ARMORTYPE_RANDOM - random valid appearance; +// * +// * bDestroyOldOnSuccess - Destroy oArmor in process? +// * Uses Get2DAstring, so do not use in loops +object IPGetModifiedArmor(object oArmor, int nPart, int nMode, int bDestroyOldOnSuccess); + +// * Add an item property in a safe fashion, preventing unwanted stacking +// * Parameters: +// * oItem - the item to add the property to +// * ip - the itemproperty to add +// * fDuration - set 0.0f to add the property permanent, anything else is temporary +// * nAddItemPropertyPolicy - How to handle existing properties. Valid values are: +// * X2_IP_ADDPROP_POLICY_REPLACE_EXISTING - remove any property of the same type, subtype, durationtype before adding; +// * X2_IP_ADDPROP_POLICY_KEEP_EXISTING - do not add if any property with same type, subtype and durationtype already exists; +// * X2_IP_ADDPROP_POLICY_IGNORE_EXISTING - add itemproperty in any case - Do not Use with OnHit or OnHitSpellCast props! +// * +// * bIgnoreDurationType - If set to TRUE, an item property will be considered identical even if the DurationType is different. Be careful when using this +// * with X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, as this could lead to a temporary item property removing a permanent one +// * bIgnoreSubType - If set to TRUE an item property will be considered identical even if the SubType is different. +void IPSafeAddItemProperty(object oItem, itemproperty ip, float fDuration =0.0f, int nAddItemPropertyPolicy = X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, int bIgnoreDurationType = FALSE, int bIgnoreSubType = FALSE); + +// * Wrapper for GetItemHasItemProperty that returns true if +// * oItem has an itemproperty that matches ipCompareTo by Type AND DurationType AND SubType +// * nDurationType = Valid DURATION_TYPE_* or -1 to ignore +// * bIgnoreSubType - If set to TRUE an item property will be considered identical even if the SubType is different. +int IPGetItemHasProperty(object oItem, itemproperty ipCompareTo, int nDurationType, int bIgnoreSubType = FALSE); + +// * returns FALSE it the item has no sequencer property +// * returns number of spells that can be stored in any other case +int IPGetItemSequencerProperty(object oItem); + +// * returns TRUE if the item has the OnHit:IntelligentWeapon property. +int IPGetIsIntelligentWeapon(object oItem); + +// * Mapping between numbers and power constants for ITEM_PROPERTY_DAMAGE_BONUS +// * returns the appropriate ITEM_PROPERTY_DAMAGE_POWER_* constant for nNumber +int IPGetDamagePowerConstantFromNumber(int nNumber); + +// * returns the appropriate ITEM_PROPERTY_DAMAGE_BONUS_= constant for nNumber +// * Do not pass in any number <1 ! Will return -1 on error +int IPGetDamageBonusConstantFromNumber(int nNumber); + +// * Special Version of Copy Item Properties for use with greater wild shape +// * oOld - Item equipped before polymorphing (source for item props) +// * oNew - Item equipped after polymorphing (target for item props) +// * bWeapon - Must be set TRUE when oOld is a weapon. +void IPWildShapeCopyItemProperties(object oOld, object oNew, int bWeapon = FALSE); + +// * Returns the current enhancement bonus of a weapon (+1 to +20), 0 if there is +// * no enhancement bonus. You can test for a specific type of enhancement bonus +// * by passing the appropritate ITEM_PROPERTY_ENHANCEMENT_BONUS* constant into +// * nEnhancementBonusType +int IPGetWeaponEnhancementBonus(object oWeapon, int nEnhancementBonusType = ITEM_PROPERTY_ENHANCEMENT_BONUS); + +// * Shortcut function to set the enhancement bonus of a weapon to a certain bonus +// * Specifying bOnlyIfHigher as TRUE will prevent a bonus lower than the requested +// * bonus from being applied. Valid values for nBonus are 1 to 20. +void IPSetWeaponEnhancementBonus(object oWeapon, int nBonus, int bOnlyIfHigher = TRUE); + +// * Shortcut function to upgrade the enhancement bonus of a weapon by the +// * number specified in nUpgradeBy. If the resulting new enhancement bonus +// * would be out of bounds (>+20), it will be set to +20 +void IPUpgradeWeaponEnhancementBonus(object oWeapon, int nUpgradeBy); + +// * Returns TRUE if a character has any item equipped that has the itemproperty +// * defined in nItemPropertyConst in it (ITEM_PROPERTY_* constant) +int IPGetHasItemPropertyOnCharacter(object oPC, int nItemPropertyConst); + +// * Returns an integer with the number of properties present oItem +int IPGetNumberOfItemProperties(object oItem); + + + +//------------------------------------------------------------------------------ +// I M P L E M E N T A T I O N +//------------------------------------------------------------------------------ + +// ---------------------------------------------------------------------------- +// Removes all itemproperties with matching nItemPropertyType and +// nItemPropertyDuration (a DURATION_TYPE_* constant) +// ---------------------------------------------------------------------------- +void IPRemoveMatchingItemProperties(object oItem, int nItemPropertyType, int nItemPropertyDuration = DURATION_TYPE_TEMPORARY, int nItemPropertySubType = -1) +{ + itemproperty ip = GetFirstItemProperty(oItem); + + // valid ip? + while (GetIsItemPropertyValid(ip)) + { + // same property type? + if ((GetItemPropertyType(ip) == nItemPropertyType)) + { + // same duration or duration ignored? + if (GetItemPropertyDurationType(ip) == nItemPropertyDuration || nItemPropertyDuration == -1) + { + // same subtype or subtype ignored + if (GetItemPropertySubType(ip) == nItemPropertySubType || nItemPropertySubType == -1) + { + // Put a warning into the logfile if someone tries to remove a permanent ip with a temporary one! + /*if (nItemPropertyDuration == DURATION_TYPE_TEMPORARY && GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT) + { + WriteTimestampedLogEntry("x2_inc_itemprop:: IPRemoveMatchingItemProperties() - WARNING: Permanent item property removed by temporary on "+GetTag(oItem)); + } + */ + RemoveItemProperty(oItem, ip); + } + } + } + ip = GetNextItemProperty(oItem); + } +} + +// ---------------------------------------------------------------------------- +// Removes ALL item properties from oItem matching nItemPropertyDuration +// ---------------------------------------------------------------------------- +void IPRemoveAllItemProperties(object oItem, int nItemPropertyDuration = DURATION_TYPE_TEMPORARY) +{ + itemproperty ip = GetFirstItemProperty(oItem); + while (GetIsItemPropertyValid(ip)) + { + if (GetItemPropertyDurationType(ip) == nItemPropertyDuration) + { + RemoveItemProperty(oItem, ip); + } + ip = GetNextItemProperty(oItem); + } +} + +// ---------------------------------------------------------------------------- +// returns TRUE if item can be equipped. Uses Get2DAString, so do not use in a loop! +// ---------------------------------------------------------------------------- +int IPGetIsItemEquipable(object oItem) +{ + int nBaseType =GetBaseItemType(oItem); + string sResult = Get2DAString("baseitems","EquipableSlots",nBaseType); + return (sResult != "0x00000"); +} + +// ---------------------------------------------------------------------------- +// Changes the color of an item armor +// oItem - The armor +// nColorType - ITEM_APPR_ARMOR_COLOR_* constant +// nColor - color from 0 to 63 +// Since oItem is destroyed in the process, the function returns +// the item created with the color changed +// ---------------------------------------------------------------------------- +object IPDyeArmor(object oItem, int nColorType, int nColor) +{ + object oRet = CopyItemAndModify(oItem,ITEM_APPR_TYPE_ARMOR_COLOR,nColorType,nColor,TRUE); + DestroyObject(oItem); // remove old item + return oRet; //return new item +} + +// ---------------------------------------------------------------------------- +// Returns the container used for item property and appearance modifications in the +// module. If it does not exist, it is created +// ---------------------------------------------------------------------------- +object IPGetIPWorkContainer(object oCaller = OBJECT_SELF) +{ + object oRet = GetObjectByTag(X2_IP_WORK_CONTAINER_TAG); + if (oRet == OBJECT_INVALID) + { + oRet = CreateObject(OBJECT_TYPE_PLACEABLE,X2_IP_WORK_CONTAINER_TAG,GetLocation(oCaller)); + effect eInvis = EffectVisualEffect( VFX_DUR_CUTSCENE_INVISIBILITY); + eInvis = ExtraordinaryEffect(eInvis); + ApplyEffectToObject(DURATION_TYPE_PERMANENT,eInvis,oRet); + if (oRet == OBJECT_INVALID) + { + WriteTimestampedLogEntry("x2_inc_itemprop - critical: Missing container with tag " +X2_IP_WORK_CONTAINER_TAG + "!!"); + } + } + + + return oRet; +} + +// ---------------------------------------------------------------------------- +// This function needs to be rather extensive and needs to be updated if there are new +// ip types we want to use, but it goes into the item property include anyway +// ---------------------------------------------------------------------------- +itemproperty IPGetItemPropertyByID(int nPropID, int nParam1 = 0, int nParam2 = 0, int nParam3 = 0, int nParam4 = 0) +{ + itemproperty ipRet; + + if (nPropID == ITEM_PROPERTY_ABILITY_BONUS) + { + ipRet = ItemPropertyAbilityBonus(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_AC_BONUS) + { + ipRet = ItemPropertyACBonus(nParam1); + } + else if (nPropID == ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP) + { + ipRet = ItemPropertyACBonusVsAlign(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE) + { + ipRet = ItemPropertyACBonusVsDmgType(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP) + { + ipRet = ItemPropertyACBonusVsRace(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_AC_BONUS_VS_SPECIFIC_ALIGNMENT) + { + ipRet = ItemPropertyACBonusVsSAlign(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_ATTACK_BONUS) + { + ipRet = ItemPropertyAttackBonus(nParam1); + } + else if (nPropID == ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP) + { + ipRet = ItemPropertyAttackBonusVsAlign(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP) + { + ipRet = ItemPropertyAttackBonusVsRace(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT) + { + ipRet = ItemPropertyAttackBonusVsSAlign(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_BASE_ITEM_WEIGHT_REDUCTION) + { + ipRet = ItemPropertyWeightReduction(nParam1); + } + else if (nPropID == ITEM_PROPERTY_BONUS_FEAT) + { + ipRet = ItemPropertyBonusFeat(nParam1); + } + else if (nPropID == ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N) + { + ipRet = ItemPropertyBonusLevelSpell(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_CAST_SPELL) + { + ipRet = ItemPropertyCastSpell(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_DAMAGE_BONUS) + { + ipRet = ItemPropertyDamageBonus(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP) + { + ipRet = ItemPropertyDamageBonusVsAlign(nParam1, nParam2, nParam3); + } + else if (nPropID == ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP) + { + ipRet = ItemPropertyDamageBonusVsRace(nParam1, nParam2, nParam3); + } + else if (nPropID == ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT) + { + ipRet = ItemPropertyDamageBonusVsSAlign(nParam1, nParam2, nParam3); + } + else if (nPropID == ITEM_PROPERTY_DAMAGE_REDUCTION) + { + ipRet = ItemPropertyDamageReduction(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_DAMAGE_RESISTANCE) + { + ipRet = ItemPropertyDamageResistance(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_DAMAGE_VULNERABILITY) + { + ipRet = ItemPropertyDamageResistance(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_DARKVISION) + { + ipRet = ItemPropertyDarkvision(); + } + else if (nPropID == ITEM_PROPERTY_DECREASED_ABILITY_SCORE) + { + ipRet = ItemPropertyDecreaseAbility(nParam1,nParam2); + } + else if (nPropID == ITEM_PROPERTY_DECREASED_AC) + { + ipRet = ItemPropertyDecreaseAC(nParam1,nParam2); + } + else if (nPropID == ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER) + { + ipRet = ItemPropertyAttackPenalty(nParam1); + } + else if (nPropID == ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER) + { + ipRet = ItemPropertyEnhancementPenalty(nParam1); + } + else if (nPropID == ITEM_PROPERTY_DECREASED_SAVING_THROWS) + { + ipRet = ItemPropertyReducedSavingThrow(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC) + { + ipRet = ItemPropertyBonusSavingThrowVsX(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_DECREASED_SKILL_MODIFIER) + { + ipRet = ItemPropertyDecreaseSkill(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_ENHANCED_CONTAINER_REDUCED_WEIGHT) + { + ipRet = ItemPropertyContainerReducedWeight(nParam1); + } + else if (nPropID == ITEM_PROPERTY_ENHANCEMENT_BONUS) + { + ipRet = ItemPropertyEnhancementBonus(nParam1); + } + else if (nPropID == ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP) + { + ipRet = ItemPropertyEnhancementBonusVsAlign(nParam1,nParam2); + } + else if (nPropID == ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT) + { + ipRet = ItemPropertyEnhancementBonusVsSAlign(nParam1,nParam2); + } + else if (nPropID == ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP) + { + ipRet = ItemPropertyEnhancementBonusVsRace(nParam1,nParam2); + } + else if (nPropID == ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE) + { + ipRet = ItemPropertyExtraMeleeDamageType(nParam1); + } + else if (nPropID == ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE) + { + ipRet = ItemPropertyExtraRangeDamageType(nParam1); + } + else if (nPropID == ITEM_PROPERTY_HASTE) + { + ipRet = ItemPropertyHaste(); + } + else if (nPropID == ITEM_PROPERTY_KEEN) + { + ipRet = ItemPropertyKeen(); + } + else if (nPropID == ITEM_PROPERTY_LIGHT) + { + ipRet = ItemPropertyLight(nParam1,nParam2); + } + else if (nPropID == ITEM_PROPERTY_MASSIVE_CRITICALS) + { + ipRet = ItemPropertyMassiveCritical(nParam1); + } + else if (nPropID == ITEM_PROPERTY_NO_DAMAGE) + { + ipRet = ItemPropertyNoDamage(); + } + else if (nPropID == ITEM_PROPERTY_ON_HIT_PROPERTIES) + { + ipRet = ItemPropertyOnHitProps(nParam1, nParam2, nParam3); + } + else if (nPropID == ITEM_PROPERTY_TRAP) + { + ipRet = ItemPropertyTrap(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_TRUE_SEEING) + { + ipRet = ItemPropertyTrueSeeing(); + } + else if (nPropID == ITEM_PROPERTY_UNLIMITED_AMMUNITION) + { + ipRet = ItemPropertyUnlimitedAmmo(nParam1); + } + else if (nPropID == ITEM_PROPERTY_ONHITCASTSPELL) + { + ipRet = ItemPropertyOnHitCastSpell(nParam1, nParam2); + } + else if (nPropID == ITEM_PROPERTY_ARCANE_SPELL_FAILURE) + { + ipRet = ItemPropertyArcaneSpellFailure(nParam1); + } + + + return ipRet; +} + +// ---------------------------------------------------------------------------- +// Returns TRUE if oItem is a projectile +// ---------------------------------------------------------------------------- +int IPGetIsProjectile(object oItem) +{ + int nBT = GetBaseItemType(oItem); + return (nBT == BASE_ITEM_ARROW || nBT == BASE_ITEM_BOLT || nBT == BASE_ITEM_BULLET); +} + +// ---------------------------------------------------------------------------- +// Returns TRUE if oItem is a ranged weapon +// ---------------------------------------------------------------------------- +int IPGetIsRangedWeapon(object oItem) +{ + return GetWeaponRanged(oItem); // doh ! +} + +// ---------------------------------------------------------------------------- +// Returns TRUE if oItem is a melee weapon +// ---------------------------------------------------------------------------- +int IPGetIsMeleeWeapon(object oItem) +{ + //Declare major variables + int nItem = GetBaseItemType(oItem); + + if((nItem == BASE_ITEM_BASTARDSWORD) || + (nItem == BASE_ITEM_BATTLEAXE) || + (nItem == BASE_ITEM_DOUBLEAXE) || + (nItem == BASE_ITEM_GREATAXE) || + (nItem == BASE_ITEM_GREATSWORD) || + (nItem == BASE_ITEM_HALBERD) || + (nItem == BASE_ITEM_HANDAXE) || + (nItem == BASE_ITEM_KAMA) || + (nItem == BASE_ITEM_KATANA) || + (nItem == BASE_ITEM_KUKRI) || + (nItem == BASE_ITEM_LONGSWORD) || + (nItem == BASE_ITEM_SCIMITAR) || + (nItem == BASE_ITEM_SCYTHE) || + (nItem == BASE_ITEM_SICKLE) || + (nItem == BASE_ITEM_TWOBLADEDSWORD) || + (nItem == BASE_ITEM_CLUB) || + (nItem == BASE_ITEM_DAGGER) || + (nItem == BASE_ITEM_DIREMACE) || + (nItem == BASE_ITEM_HEAVYFLAIL) || + (nItem == BASE_ITEM_LIGHTFLAIL) || + (nItem == BASE_ITEM_LIGHTHAMMER) || + (nItem == BASE_ITEM_LIGHTMACE) || + (nItem == BASE_ITEM_MORNINGSTAR) || + (nItem == BASE_ITEM_QUARTERSTAFF) || + (nItem == BASE_ITEM_MAGICSTAFF) || + (nItem == BASE_ITEM_RAPIER) || + (nItem == BASE_ITEM_WHIP) || + (nItem == BASE_ITEM_SHORTSPEAR) || + (nItem == BASE_ITEM_SHORTSWORD) || + (nItem == BASE_ITEM_WARHAMMER) || + (nItem == BASE_ITEM_DWARVENWARAXE)) + { + return TRUE; + } + return FALSE; +} + +// ---------------------------------------------------------------------------- +// Returns TRUE if weapon is a blugeoning weapon +// Uses Get2DAString! +// ---------------------------------------------------------------------------- +int IPGetIsBludgeoningWeapon(object oItem) +{ + int nBT = GetBaseItemType(oItem); + int nWeapon = ( StringToInt(Get2DAString("baseitems","WeaponType",nBT))); + // 2 = bludgeoning + return (nWeapon == 2); +} + +// ---------------------------------------------------------------------------- +// Return the IP_CONST_CASTSPELL_* ID matching to the SPELL_* constant given +// in nSPELL_ID. +// This uses Get2DAstring, so it is slow. Avoid using in loops! +// returns -1 if there is no matching property for a spell +// ---------------------------------------------------------------------------- +int IPGetIPConstCastSpellFromSpellID(int nSpellID) +{ + // look up Spell Property Index + string sTemp = Get2DAString("des_crft_spells","IPRP_SpellIndex",nSpellID); + /* + if (sTemp == "") // invalid nSpellID + { + PrintString("x2_inc_craft.nss::GetIPConstCastSpellFromSpellID called with invalid nSpellID" + IntToString(nSpellID)); + return -1; + } + */ + int nSpellPrpIdx = StringToInt(sTemp); + return nSpellPrpIdx; +} +// ---------------------------------------------------------------------------- +// Returns TRUE if an item has ITEM_PROPERTY_ON_HIT and the specified nSubType +// possible values for nSubType can be taken from IPRP_ONHIT.2da +// popular ones: +// 5 - Daze +// 19 - ItemPoison +// 24 - Vorpal +// ---------------------------------------------------------------------------- +int IPGetItemHasItemOnHitPropertySubType(object oTarget, int nSubType) +{ + if (GetItemHasItemProperty(oTarget,ITEM_PROPERTY_ON_HIT_PROPERTIES)) + { + itemproperty ipTest = GetFirstItemProperty(oTarget); + + // loop over item properties to see if there is already a poison effect + while (GetIsItemPropertyValid(ipTest)) + { + + if (GetItemPropertySubType(ipTest) == nSubType) //19 == onhit poison + { + return TRUE; + } + + ipTest = GetNextItemProperty(oTarget); + + } + } + return FALSE; +} + +// ---------------------------------------------------------------------------- +// Returns the number of possible armor part variations for the specified part +// nPart - ITEM_APPR_ARMOR_MODEL_* constant +// Uses Get2DAstring, so do not use in loops +// ---------------------------------------------------------------------------- +int IPGetNumberOfArmorAppearances(int nPart) +{ + int nRet; + //SpeakString(Get2DAString(X2_IP_ARMORPARTS_2DA ,"NumParts",nPart)); + nRet = StringToInt(Get2DAString(X2_IP_ARMORPARTS_2DA ,"NumParts",nPart)); + return nRet; +} + +// ---------------------------------------------------------------------------- +// (private) +// Returns the previous or next armor appearance type, depending on the specified +// mode (X2_IP_ARMORTYPE_NEXT || X2_IP_ARMORTYPE_PREV) +// ---------------------------------------------------------------------------- +int IPGetArmorAppearanceType(object oArmor, int nPart, int nMode) +{ + string sMode; + + switch (nMode) + { + case X2_IP_ARMORTYPE_NEXT : sMode ="Next"; + break; + case X2_IP_ARMORTYPE_PREV : sMode ="Prev"; + break; + } + + int nCurrApp = GetItemAppearance(oArmor,ITEM_APPR_TYPE_ARMOR_MODEL,nPart); + int nRet; + + if (nPart ==ITEM_APPR_ARMOR_MODEL_TORSO) + { + nRet = StringToInt(Get2DAString(X2_IP_ARMORAPPEARANCE_2DA ,sMode,nCurrApp)); + return nRet; + } + else + { + int nMax = IPGetNumberOfArmorAppearances(nPart)-1; // index from 0 .. numparts -1 + int nMin = 1; // this prevents part 0 from being chosen (naked) + + // return a random valid armor tpze + if (nMode == X2_IP_ARMORTYPE_RANDOM) + { + return Random(nMax)+nMin; + } + + else + { + if (nMode == X2_IP_ARMORTYPE_NEXT) + { + // current appearance is max, return min + if (nCurrApp == nMax) + { + return nMin; + } + // current appearance is min, return max -1 + else if (nCurrApp == nMin) + { + nRet = nMin+1; + return nRet; + } + + //SpeakString("next"); + // next + nRet = nCurrApp +1; + return nRet; + } + else // previous + { + // current appearance is max, return nMax-1 + if (nCurrApp == nMax) + { + nRet = nMax--; + return nRet; + } + // current appearance is min, return max + else if (nCurrApp == nMin) + { + return nMax; + } + + //SpeakString("prev"); + + nRet = nCurrApp -1; + return nRet; + } + } + + } + +} + +// ---------------------------------------------------------------------------- +// Returns the next valid appearance type for oArmor +// Uses Get2DAstring, so do not use in loops +// ---------------------------------------------------------------------------- +int IPGetNextArmorAppearanceType(object oArmor, int nPart) +{ + return IPGetArmorAppearanceType(oArmor, nPart, X2_IP_ARMORTYPE_NEXT ); + +} + +// ---------------------------------------------------------------------------- +// Returns the next valid appearance type for oArmor +// Uses Get2DAstring, so do not use in loops +// ---------------------------------------------------------------------------- +int IPGetPrevArmorAppearanceType(object oArmor, int nPart) +{ + return IPGetArmorAppearanceType(oArmor, nPart, X2_IP_ARMORTYPE_PREV ); +} + +// ---------------------------------------------------------------------------- +// Returns the next valid appearance type for oArmor +// Uses Get2DAstring, so do not use in loops +// ---------------------------------------------------------------------------- +int IPGetRandomArmorAppearanceType(object oArmor, int nPart) +{ + return IPGetArmorAppearanceType(oArmor, nPart, X2_IP_ARMORTYPE_RANDOM ); +} + +// ---------------------------------------------------------------------------- +// Returns a new armor based of oArmor with nPartModified +// nPart - ITEM_APPR_ARMOR_MODEL_* constant of the part to be changed +// nMode - +// X2_IP_ARMORTYPE_NEXT - next valid appearance +// X2_IP_ARMORTYPE_PREV - previous valid apperance; +// X2_IP_ARMORTYPE_RANDOM - random valid appearance (torso is never changed); +// bDestroyOldOnSuccess - Destroy oArmor in process? +// Uses Get2DAstring, so do not use in loops +// ---------------------------------------------------------------------------- +object IPGetModifiedArmor(object oArmor, int nPart, int nMode, int bDestroyOldOnSuccess) +{ + int nNewApp = IPGetArmorAppearanceType(oArmor, nPart, nMode ); + //SpeakString("old: " + IntToString(GetItemAppearance(oArmor,ITEM_APPR_TYPE_ARMOR_MODEL,nPart))); + //SpeakString("new: " + IntToString(nNewApp)); + + object oNew = CopyItemAndModify(oArmor,ITEM_APPR_TYPE_ARMOR_MODEL, nPart, nNewApp,TRUE); + + if (oNew != OBJECT_INVALID) + { + if( bDestroyOldOnSuccess ) + { + DestroyObject(oArmor); + } + return oNew; + } + // Safety fallback, return old armor on failures + return oArmor; +} + +// ---------------------------------------------------------------------------- +// Creates a special ring on oCreature that gives +// all weapon and armor proficiencies to the wearer +// Item is set non dropable +// ---------------------------------------------------------------------------- +object IPCreateProficiencyFeatItemOnCreature(object oCreature) +{ + // create a simple golden ring + object oRing = CreateItemOnObject("nw_it_mring023",oCreature); + + // just in case + SetDroppableFlag(oRing, FALSE); + + itemproperty ip = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_HEAVY); + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oRing); + ip = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_MEDIUM); + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oRing); + ip = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_LIGHT); + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oRing); + ip = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_EXOTIC); + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oRing); + ip = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_MARTIAL); + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oRing); + ip = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_SIMPLE); + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oRing); + + return oRing; +} + +// ---------------------------------------------------------------------------- +// Add an item property in a safe fashion, preventing unwanted stacking +// Parameters: +// oItem - the item to add the property to +// ip - the itemproperty to add +// fDuration - set 0.0f to add the property permanent, anything else is temporary +// nAddItemPropertyPolicy - How to handle existing properties. Valid values are: +// X2_IP_ADDPROP_POLICY_REPLACE_EXISTING - remove any property of the same type, subtype, durationtype before adding; +// X2_IP_ADDPROP_POLICY_KEEP_EXISTING - do not add if any property with same type, subtype and durationtype already exists; +// X2_IP_ADDPROP_POLICY_IGNORE_EXISTING - add itemproperty in any case - Do not Use with OnHit or OnHitSpellCast props! +// bIgnoreDurationType - If set to TRUE, an item property will be considered identical even if the DurationType is different. Be careful when using this +// with X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, as this could lead to a temporary item property removing a permanent one +// bIgnoreSubType - If set to TRUE an item property will be considered identical even if the SubType is different. +// +// * WARNING: This function is used all over the game. Touch it and break it and the wrath +// of the gods will come down on you faster than you can saz "I didn't do it" +// ---------------------------------------------------------------------------- +void IPSafeAddItemProperty(object oItem, itemproperty ip, float fDuration =0.0f, int nAddItemPropertyPolicy = X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, int bIgnoreDurationType = FALSE, int bIgnoreSubType = FALSE) +{ + int nType = GetItemPropertyType(ip); + int nSubType = GetItemPropertySubType(ip); + int nDuration; + // if duration is 0.0f, make the item property permanent + if (fDuration == 0.0f) + { + + nDuration = DURATION_TYPE_PERMANENT; + } else + { + + nDuration = DURATION_TYPE_TEMPORARY; + } + + int nDurationCompare = nDuration; + if (bIgnoreDurationType) + { + nDurationCompare = -1; + } + + if (nAddItemPropertyPolicy == X2_IP_ADDPROP_POLICY_REPLACE_EXISTING) + { + + // remove any matching properties + if (bIgnoreSubType) + { + nSubType = -1; + } + IPRemoveMatchingItemProperties(oItem, nType, nDurationCompare, nSubType ); + } + else if (nAddItemPropertyPolicy == X2_IP_ADDPROP_POLICY_KEEP_EXISTING ) + { + // do not replace existing properties + if(IPGetItemHasProperty(oItem, ip, nDurationCompare, bIgnoreSubType)) + { + return; // item already has property, return + } + } + else //X2_IP_ADDPROP_POLICY_IGNORE_EXISTING + { + + } + + if (nDuration == DURATION_TYPE_PERMANENT) + { + AddItemProperty(nDuration,ip, oItem); + } + else + { + AddItemProperty(nDuration,ip, oItem,fDuration); + } +} + +// ---------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- +int IPGetItemHasProperty(object oItem, itemproperty ipCompareTo, int nDurationCompare, int bIgnoreSubType = FALSE) +{ + itemproperty ip = GetFirstItemProperty(oItem); + + //PrintString ("Filter - T:" + IntToString(GetItemPropertyType(ipCompareTo))+ " S: " + IntToString(GetItemPropertySubType(ipCompareTo)) + " (Ignore: " + IntToString (bIgnoreSubType) + ") D:" + IntToString(nDurationCompare)); + while (GetIsItemPropertyValid(ip)) + { + // PrintString ("Testing - T: " + IntToString(GetItemPropertyType(ip))); + if ((GetItemPropertyType(ip) == GetItemPropertyType(ipCompareTo))) + { + //PrintString ("**Testing - S: " + IntToString(GetItemPropertySubType(ip))); + if (GetItemPropertySubType(ip) == GetItemPropertySubType(ipCompareTo) || bIgnoreSubType) + { + // PrintString ("***Testing - d: " + IntToString(GetItemPropertyDurationType(ip))); + if (GetItemPropertyDurationType(ip) == nDurationCompare || nDurationCompare == -1) + { + //PrintString ("***FOUND"); + return TRUE; // if duration is not ignored and durationtypes are equal, true + } + } + } + ip = GetNextItemProperty(oItem); + } + PrintString ("Not Found"); + return FALSE; +} + + +object IPGetTargetedOrEquippedMeleeWeapon() +{ + object oTarget = GetSpellTargetObject(); + if(GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM) + { + if (IPGetIsMeleeWeapon(oTarget)) + { + return oTarget; + } + else + { + return OBJECT_INVALID; + } + + } + + object oWeapon1 = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if (GetIsObjectValid(oWeapon1) && IPGetIsMeleeWeapon(oWeapon1)) + { + return oWeapon1; + } + + oWeapon1 = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget); + if (GetIsObjectValid(oWeapon1) && IPGetIsMeleeWeapon(oWeapon1)) + { + return oWeapon1; + } + + oWeapon1 = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTarget); + if (GetIsObjectValid(oWeapon1)) + { + return oWeapon1; + } + + oWeapon1 = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTarget); + if (GetIsObjectValid(oWeapon1)) + { + return oWeapon1; + } + + return OBJECT_INVALID; + +} + + + +object IPGetTargetedOrEquippedArmor(int bAllowShields = FALSE) +{ + object oTarget = GetSpellTargetObject(); + if(GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM) + { + if (GetBaseItemType(oTarget) == BASE_ITEM_ARMOR) + { + return oTarget; + } + else + { + if ((bAllowShields) && (GetBaseItemType(oTarget) == BASE_ITEM_LARGESHIELD || + GetBaseItemType(oTarget) == BASE_ITEM_SMALLSHIELD || + GetBaseItemType(oTarget) == BASE_ITEM_TOWERSHIELD)) + { + return oTarget; + } + else + { + return OBJECT_INVALID; + } + } + + } + + object oArmor1 = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget); + if (GetIsObjectValid(oArmor1) && GetBaseItemType(oArmor1) == BASE_ITEM_ARMOR) + { + return oArmor1; + } + if (bAllowShields != FALSE) + { + oArmor1 = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget); + if (GetIsObjectValid(oArmor1) && (GetBaseItemType(oTarget) == BASE_ITEM_LARGESHIELD || + GetBaseItemType(oTarget) == BASE_ITEM_SMALLSHIELD || + GetBaseItemType(oTarget) == BASE_ITEM_TOWERSHIELD)) + { + return oArmor1; + } + } + + + + return OBJECT_INVALID; + +} + +// ---------------------------------------------------------------------------- +// Returns FALSE it the item has no sequencer property +// Returns number of spells that can be stored in any other case +// ---------------------------------------------------------------------------- +int IPGetItemSequencerProperty(object oItem) +{ + if (!GetItemHasItemProperty(oItem, ITEM_PROPERTY_CAST_SPELL)) + { + return FALSE; + } + + int nCnt; + itemproperty ip; + + ip = GetFirstItemProperty(oItem); + + while (GetIsItemPropertyValid(ip) && nCnt ==0) + { + if (GetItemPropertyType(ip) ==ITEM_PROPERTY_CAST_SPELL) + { + if(GetItemPropertySubType(ip) == 523) // sequencer 3 + { + nCnt = 3; + } + else if(GetItemPropertySubType(ip) == 522) // sequencer 2 + { + nCnt = 2; + } + else if(GetItemPropertySubType(ip) == 521) // sequencer 1 + { + nCnt = 1; + } + } + ip = GetNextItemProperty(oItem); + } + + return nCnt; +} + +void IPCopyItemProperties(object oSource, object oTarget, int bIgnoreCraftProps = TRUE) +{ + itemproperty ip = GetFirstItemProperty(oSource); + int nSub; + + while (GetIsItemPropertyValid(ip)) + { + if (GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT) + { + if (bIgnoreCraftProps) + { + if (GetItemPropertyType(ip) ==ITEM_PROPERTY_CAST_SPELL) + { + nSub = GetItemPropertySubType(ip); + // filter crafting properties + if (nSub != 498 && nSub != 499 && nSub != 526 && nSub != 527) + { + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oTarget); + } + } + else + { + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oTarget); + } + } + else + { + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oTarget); + } + } + ip = GetNextItemProperty(oSource); + } +} + +int IPGetIsIntelligentWeapon(object oItem) +{ + int bRet = FALSE ; + itemproperty ip = GetFirstItemProperty(oItem); + while (GetIsItemPropertyValid(ip)) + { + if (GetItemPropertyType(ip) == ITEM_PROPERTY_ONHITCASTSPELL) + { + if (GetItemPropertySubType(ip) == 135) + { + return TRUE; + } + } + ip = GetNextItemProperty(oItem); + } + return bRet; +} + +// ---------------------------------------------------------------------------- +// (private) +// ---------------------------------------------------------------------------- +int IPGetWeaponAppearanceType(object oWeapon, int nPart, int nMode) +{ + string sMode; + + switch (nMode) + { + case X2_IP_WEAPONTYPE_NEXT : sMode ="Next"; + break; + case X2_IP_WEAPONTYPE_PREV : sMode ="Prev"; + break; + } + + int nCurrApp = GetItemAppearance(oWeapon,ITEM_APPR_TYPE_WEAPON_MODEL,nPart); + int nRet; + + int nMax = 9;// IPGetNumberOfArmorAppearances(nPart)-1; // index from 0 .. numparts -1 + int nMin = 1; + + // return a random valid armor tpze + if (nMode == X2_IP_WEAPONTYPE_RANDOM) + { + return Random(nMax)+nMin; + } + + else + { + if (nMode == X2_IP_WEAPONTYPE_NEXT) + { + // current appearance is max, return min + if (nCurrApp == nMax) + { + return nMax; + } + // current appearance is min, return max -1 + else if (nCurrApp == nMin) + { + nRet = nMin +1; + return nRet; + } + + //SpeakString("next"); + // next + nRet = nCurrApp +1; + return nRet; + } + else // previous + { + // current appearance is max, return nMax-1 + if (nCurrApp == nMax) + { + nRet = nMax--; + return nRet; + } + // current appearance is min, return max + else if (nCurrApp == nMin) + { + return nMin; + } + + //SpeakString("prev"); + + nRet = nCurrApp -1; + return nRet; + } + + + } +} + +// ---------------------------------------------------------------------------- +// Returns a new armor based of oArmor with nPartModified +// nPart - ITEM_APPR_WEAPON_MODEL_* constant of the part to be changed +// nMode - +// X2_IP_WEAPONTYPE_NEXT - next valid appearance +// X2_IP_WEAPONTYPE_PREV - previous valid apperance; +// X2_IP_WEAPONTYPE_RANDOM - random valid appearance (torso is never changed); +// bDestroyOldOnSuccess - Destroy oArmor in process? +// Uses Get2DAstring, so do not use in loops +// ---------------------------------------------------------------------------- +object IPGetModifiedWeapon(object oWeapon, int nPart, int nMode, int bDestroyOldOnSuccess) +{ + int nNewApp = IPGetWeaponAppearanceType(oWeapon, nPart, nMode ); + //SpeakString("old: " + IntToString(GetItemAppearance(oWeapon,ITEM_APPR_TYPE_WEAPON_MODEL,nPart))); + //SpeakString("new: " + IntToString(nNewApp)); + object oNew = CopyItemAndModify(oWeapon,ITEM_APPR_TYPE_WEAPON_MODEL, nPart, nNewApp,TRUE); + if (oNew != OBJECT_INVALID) + { + if( bDestroyOldOnSuccess ) + { + DestroyObject(oWeapon); + } + return oNew; + } + // Safety fallback, return old weapon on failures + return oWeapon; +} + + +object IPCreateAndModifyArmorRobe(object oArmor, int nRobeType) +{ + object oRet = CopyItemAndModify(oArmor,ITEM_APPR_TYPE_ARMOR_MODEL,ITEM_APPR_ARMOR_MODEL_ROBE,nRobeType+2,TRUE); + if (GetIsObjectValid(oRet)) + { + return oRet; + } + else // safety net + { + return oArmor; + } +} + +// ---------------------------------------------------------------------------- +// Provide mapping between numbers and power constants for +// ITEM_PROPERTY_DAMAGE_BONUS +// ---------------------------------------------------------------------------- +int IPGetDamagePowerConstantFromNumber(int nNumber) +{ + switch (nNumber) + { + case 0: return DAMAGE_POWER_NORMAL; + case 1: return DAMAGE_POWER_PLUS_ONE; + case 2: return DAMAGE_POWER_PLUS_TWO; + case 3: return DAMAGE_POWER_PLUS_THREE; + case 4: return DAMAGE_POWER_PLUS_FOUR; + case 5: return DAMAGE_POWER_PLUS_FIVE; + case 6: return DAMAGE_POWER_PLUS_SIX; + case 7: return DAMAGE_POWER_PLUS_SEVEN; + case 8: return DAMAGE_POWER_PLUS_EIGHT; + case 9: return DAMAGE_POWER_PLUS_NINE; + case 10: return DAMAGE_POWER_PLUS_TEN; + case 11: return DAMAGE_POWER_PLUS_ELEVEN; + case 12: return DAMAGE_POWER_PLUS_TWELVE; + case 13: return DAMAGE_POWER_PLUS_THIRTEEN; + case 14: return DAMAGE_POWER_PLUS_FOURTEEN; + case 15: return DAMAGE_POWER_PLUS_FIFTEEN; + case 16: return DAMAGE_POWER_PLUS_SIXTEEN; + case 17: return DAMAGE_POWER_PLUS_SEVENTEEN; + case 18: return DAMAGE_POWER_PLUS_EIGHTEEN ; + case 19: return DAMAGE_POWER_PLUS_NINTEEN; + case 20: return DAMAGE_POWER_PLUS_TWENTY; + } + + if (nNumber>20) + { + return DAMAGE_POWER_PLUS_TWENTY; + } + else + { + return DAMAGE_POWER_NORMAL; + } +} + +// ---------------------------------------------------------------------------- +// Provide mapping between numbers and bonus constants for ITEM_PROPERTY_DAMAGE_BONUS +// Note that nNumber should be > 0! +// ---------------------------------------------------------------------------- +int IPGetDamageBonusConstantFromNumber(int nNumber) +{ + switch (nNumber) + { + case 1: return DAMAGE_BONUS_1; + case 2: return DAMAGE_BONUS_2; + case 3: return DAMAGE_BONUS_3; + case 4: return DAMAGE_BONUS_4; + case 5: return DAMAGE_BONUS_5; + case 6: return DAMAGE_BONUS_6; + case 7: return DAMAGE_BONUS_7; + case 8: return DAMAGE_BONUS_8; + case 9: return DAMAGE_BONUS_9; + case 10: return DAMAGE_BONUS_10; + case 11: return DAMAGE_BONUS_11; + case 12: return DAMAGE_BONUS_12; + case 13: return DAMAGE_BONUS_13; + case 14: return DAMAGE_BONUS_14; + case 15: return DAMAGE_BONUS_15; + case 16: return DAMAGE_BONUS_16; + case 17: return DAMAGE_BONUS_17; + case 18: return DAMAGE_BONUS_18; + case 19: return DAMAGE_BONUS_19; + case 20: return DAMAGE_BONUS_20; + + } + + if (nNumber>20) + { + return DAMAGE_BONUS_20; + } + else + { + return -1; + } +} + +// ---------------------------------------------------------------------------- +// GZ, Sept. 30 2003 +// Special Version of Copy Item Properties for use with greater wild shape +// oOld - Item equipped before polymorphing (source for item props) +// oNew - Item equipped after polymorphing (target for item props) +// bWeapon - Must be set TRUE when oOld is a weapon. +// ---------------------------------------------------------------------------- +void IPWildShapeCopyItemProperties(object oOld, object oNew, int bWeapon = FALSE) +{ + if (GetIsObjectValid(oOld) && GetIsObjectValid(oNew)) + { + itemproperty ip = GetFirstItemProperty(oOld); + while (GetIsItemPropertyValid(ip)) + { + if (bWeapon) + { + if (GetWeaponRanged(oOld) == GetWeaponRanged(oNew) ) + { + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oNew); + } + } + else + { + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oNew); + } + ip = GetNextItemProperty(oOld); + + } + } +} + +// ---------------------------------------------------------------------------- +// Returns the current enhancement bonus of a weapon (+1 to +20), 0 if there is +// no enhancement bonus. You can test for a specific type of enhancement bonus +// by passing the appropritate ITEM_PROPERTY_ENHANCEMENT_BONUS* constant into +// nEnhancementBonusType +// ---------------------------------------------------------------------------- +int IPGetWeaponEnhancementBonus(object oWeapon, int nEnhancementBonusType = ITEM_PROPERTY_ENHANCEMENT_BONUS) +{ + itemproperty ip = GetFirstItemProperty(oWeapon); + int nFound = 0; + while (nFound == 0 && GetIsItemPropertyValid(ip)) + { + if (GetItemPropertyType(ip) ==nEnhancementBonusType) + { + nFound = GetItemPropertyCostTableValue(ip); + } + ip = GetNextItemProperty(oWeapon); + } + return nFound; +} + +// ---------------------------------------------------------------------------- +// Shortcut function to set the enhancement bonus of a weapon to a certain bonus +// Specifying bOnlyIfHigher as TRUE will prevent a bonus lower than the requested +// bonus from being applied. Valid values for nBonus are 1 to 20. +// ---------------------------------------------------------------------------- +void IPSetWeaponEnhancementBonus(object oWeapon, int nBonus, int bOnlyIfHigher = TRUE) +{ + itemproperty ip = GetFirstItemProperty(oWeapon); + + int nCurrent = IPGetWeaponEnhancementBonus(oWeapon); + if (bOnlyIfHigher && nCurrent > nBonus) + { + return; + } + + if (nBonus <1 || nBonus > 20) + { + return; + } + + while (GetIsItemPropertyValid(ip)) + { + if (GetItemPropertyType(ip) ==ITEM_PROPERTY_ENHANCEMENT_BONUS) + { + RemoveItemProperty(oWeapon,ip); + } + ip = GetNextItemProperty(oWeapon); + } + + ip = ItemPropertyEnhancementBonus(nBonus); + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oWeapon); +} + + +// ---------------------------------------------------------------------------- +// Shortcut function to upgrade the enhancement bonus of a weapon by the +// number specified in nUpgradeBy. If the resulting new enhancement bonus +// would be out of bounds (>+20), it will be set to +20 +// ---------------------------------------------------------------------------- +void IPUpgradeWeaponEnhancementBonus(object oWeapon, int nUpgradeBy) +{ + itemproperty ip = GetFirstItemProperty(oWeapon); + + int nCurrent = IPGetWeaponEnhancementBonus(oWeapon); + + int nNew = nCurrent + nUpgradeBy; + if (nNew <1 ) + { + nNew = 1; + } + else if (nNew >20) + { + nNew = 20; + } + + while (GetIsItemPropertyValid(ip)) + { + if (GetItemPropertyType(ip) ==ITEM_PROPERTY_ENHANCEMENT_BONUS) + { + RemoveItemProperty(oWeapon,ip); + } + ip = GetNextItemProperty(oWeapon); + } + + ip = ItemPropertyEnhancementBonus(nNew); + AddItemProperty(DURATION_TYPE_PERMANENT,ip,oWeapon); + +} + +int IPGetHasItemPropertyByConst(int nItemProp, object oItem) +{ + itemproperty ip = GetFirstItemProperty(oItem); + while (GetIsItemPropertyValid(ip)) + { + if (GetItemPropertyType(ip) ==nItemProp) + { + return TRUE; + } + ip = GetNextItemProperty(oItem); + } + return FALSE; + +} + +// ---------------------------------------------------------------------------- +// Returns TRUE if a use limitation of any kind is present on oItem +// ---------------------------------------------------------------------------- +int IPGetHasUseLimitation(object oItem) +{ + itemproperty ip = GetFirstItemProperty(oItem); + int nType; + while (GetIsItemPropertyValid(ip)) + { + nType = GetItemPropertyType(ip); + if ( + nType == ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP || + nType == ITEM_PROPERTY_USE_LIMITATION_CLASS || + nType == ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE || + nType == ITEM_PROPERTY_USE_LIMITATION_SPECIFIC_ALIGNMENT ) + { + return TRUE; + } + ip = GetNextItemProperty(oItem); + } + return FALSE; + +} + +//------------------------------------------------------------------------------ +// GZ, Oct 2003 +// Returns TRUE if a character has any item equipped that has the itemproperty +// defined in nItemPropertyConst in it (ITEM_PROPERTY_* constant) +//------------------------------------------------------------------------------ +int IPGetHasItemPropertyOnCharacter(object oPC, int nItemPropertyConst) +{ + object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC); + object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,oPC); + object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,oPC); + object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,oPC); + object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,oPC); + object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,oPC); + object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,oPC); + object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,oPC); + object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,oPC); + object oLeftHand = GetItemInSlot(INVENTORY_SLOT_HEAD,oPC); + + int bHas = IPGetHasItemPropertyByConst(nItemPropertyConst, oWeaponOld); + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oLeftHand); + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oArmorOld); + if (bHas) + return TRUE; + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oRing1Old); + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oRing2Old); + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oAmuletOld); + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oCloakOld); + if (bHas) + return TRUE; + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oBootsOld); + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oBeltOld); + bHas = bHas || IPGetHasItemPropertyByConst(nItemPropertyConst, oHelmetOld); + + return bHas; + +} + +//------------------------------------------------------------------------------ +// GZ, Oct 24, 2003 +// Returns an integer with the number of properties present oItem +//------------------------------------------------------------------------------ +int IPGetNumberOfItemProperties(object oItem) +{ + itemproperty ip = GetFirstItemProperty(oItem); + int nCount = 0; + while (GetIsItemPropertyValid(ip)) + { + nCount++; + ip = GetNextItemProperty(oItem); + } + return nCount; +} diff --git a/src/module/nss/x2_s3_sequencer.nss b/src/module/nss/x2_s3_sequencer.nss new file mode 100644 index 0000000..789aced --- /dev/null +++ b/src/module/nss/x2_s3_sequencer.nss @@ -0,0 +1,132 @@ +//:://///////////////////////////////////////////// +//:: x2_s3_sequencer +//:: Copyright (c) 2003 Bioware Corp. +//::////////////////////////////////////////////// +/* + Fires the spells stored on this sequencer. + GZ: - Also handles clearing off spells if the + item has the clear sequencer property + - added feedback strings +*/ +//::////////////////////////////////////////////// +//:: Created By: Brent +//:: Created On: July 31, 2003 +//:: Updated By: Georg +//::////////////////////////////////////////////// + +// This will return the spell level of the spell being cast +int GetSpellLevel(int nSpell); +// Returns the max spell level of a pearl of power. +// Returns FALSE if not a pearl of power. +int GetIsPearlOfPower(object oItem); + +#include "prc_x2_itemprop" +void main() + { + object oItem = GetSpellCastItem(); + object oPC = OBJECT_SELF; + int iPearl = GetIsPearlOfPower(oItem); + int i = 0; + int nSpellId = -1; + int nMode = GetSpellId(); + + int iMax = IPGetItemSequencerProperty(oItem); + + if (iMax ==0) // Should never happen unless you added clear sequencer to a non sequencer item + { + return; + } + if (nMode == 720 ) // clear seqencer + { + for (i = 1; i <= iMax; i++) + { + DeleteLocalInt(oItem, "X2_L_SPELLTRIGGER" + IntToString(i)); + } + DeleteLocalInt(oItem, "X2_L_NUMTRIGGERS"); + effect eClear = EffectVisualEffect(VFX_IMP_BREACH); + ApplyEffectToObject(DURATION_TYPE_INSTANT,eClear,OBJECT_SELF); + FloatingTextStrRefOnCreature(83882,OBJECT_SELF); // sequencer cleared + } + else + { + int bSuccess = FALSE; + for (i = 1; i <= iMax; i++) + { + nSpellId = GetLocalInt(oItem, "X2_L_SPELLTRIGGER" + IntToString(i)); + if (nSpellId>0) + { + nSpellId --; // I added +1 to the spellID when the sequencer was created, so I have to remove it here + // Begin custom coding for pearls of power. + if (iPearl) + { + if (GetSpellLevel(nSpellId) > iPearl) + { + FloatingTextStringOnCreature("Spell was to high for this pearl",OBJECT_SELF); + return; + } + } + // End Pearl Check + bSuccess = TRUE; + ActionCastSpellAtObject(nSpellId, oPC, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE); + } + // Clear Pearl of Power/Ring of Spell Storing spell. + if (iPearl || GetTag(oItem) == "ring038") + { + for (i = 1; i <= iMax; i++) + { + DeleteLocalInt(oItem, "X2_L_SPELLTRIGGER" + IntToString(i)); + } + DeleteLocalInt(oItem, "X2_L_NUMTRIGGERS"); + // End custom scripting + } + } + if (!bSuccess) + { + FloatingTextStrRefOnCreature(83886,OBJECT_SELF); // no spells stored + } + } +} + +int GetSpellLevel(int nSpell) + { + string sTag; + int iSpellClass = GetLastSpellCastClass(); + switch (iSpellClass) + { + case CLASS_TYPE_BARD: {sTag = "Bard";break;} + case CLASS_TYPE_CLERIC: {sTag = "Cleric";break;} + case CLASS_TYPE_DRUID: {sTag = "Druid";break;} + case CLASS_TYPE_PALADIN: {sTag = "Paladin";break;} + case CLASS_TYPE_RANGER: {sTag = "Ranger";break;} + case CLASS_TYPE_SORCERER: + case CLASS_TYPE_WIZARD: {sTag = "Wiz_Sorc";break;} + case CLASS_TYPE_INVALID: {sTag = "Innate";break;} + }; + sTag = Get2DAString("spells",sTag,nSpell); + return StringToInt(sTag); + } + +int GetIsPearlOfPower(object oItem) + { + string sTag = GetTag(oItem); + if (sTag == "misca020") + return 1; + else if (sTag == "misca065") + return 2; + else if (sTag == "miscb020") + return 3; + else if (sTag == "miscb059") + return 4; + else if (sTag == "miscb087") + return 5; + else if (sTag == "miscc022") + return 6; + else if (sTag == "miscc035") + return 7; + else if (sTag == "miscc056" + || sTag == "miscc058") + return 8; + else if (sTag == "miscc064") + return 9; + return FALSE; + } diff --git a/src/module/nss/xx_pc_1_hb.nss b/src/module/nss/xx_pc_1_hb.nss new file mode 100644 index 0000000..7dac876 --- /dev/null +++ b/src/module/nss/xx_pc_1_hb.nss @@ -0,0 +1,79 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: xx_pc_1_hb + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Player OnHeart beat script for PC AI; + This will usually fire every 6 seconds (1 game round). +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_menus" +void ai_ActionFollow(object oCreature, object oTarget) +{ + if(GetLocalInt(OBJECT_SELF, AI_CURRENT_ACTION_MODE) == AI_LAST_ACTION_MOVE) + { + float fDistance = GetDistanceBetween(oCreature, oTarget); + float fFollowDistance = ai_GetFollowDistance(oCreature); + if(fDistance > fFollowDistance && !ai_GetIsInCombat(oCreature)) + { + if(fDistance > fFollowDistance * 5.0) AssignCommand(oCreature, JumpToObject(oTarget)); + else + { + ClearAllActions(); + ActionMoveToObject(oTarget, TRUE, fFollowDistance); + } + } + DelayCommand(1.0, ai_ActionFollow(oCreature, oTarget)); + } +} +void main() +{ + object oCreature = OBJECT_SELF; + if(AI_DEBUG) ai_Debug("xx_pc_1_hb", "12", GetName(oCreature) + " heartbeat."); + if(ai_GetIsBusy(oCreature) || ai_Disabled(oCreature)) return; + if(ai_GetIsInCombat(oCreature)) + { + ai_DoAssociateCombatRound(oCreature); + return; + } + if(ai_CheckForCombat(oCreature, FALSE)) return; + if(IsInConversation(oCreature)) return; + if(ai_TryHealing(oCreature, oCreature)) return; + if(ai_CheckNearbyObjects(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_AGGRESSIVE_STEALTH)) + { + if(AI_DEBUG) ai_Debug("xx_ch_1_hb", "47", "Going into stealth mode!"); + int nStealth = GetSkillRank(SKILL_HIDE, oCreature); + nStealth += GetSkillRank(SKILL_MOVE_SILENTLY, oCreature); + if(nStealth / 2 >= ai_GetCharacterLevels(oCreature)) + { + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + SetActionMode(oCreature, ACTION_MODE_DETECT, FALSE); + } + } + else + { + SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + if(ai_GetAIMode(oCreature, AI_MODE_AGGRESSIVE_SEARCH)) + { + if(AI_DEBUG) ai_Debug("xx_ch_1_hb", "61", "Going into search mode!"); + SetActionMode(oCreature, ACTION_MODE_DETECT, TRUE); + } + else SetActionMode(oCreature, ACTION_MODE_DETECT, FALSE); + } + // Finally we check to make sure we are following. + if(GetCurrentAction(oCreature) != ACTION_FOLLOW) + { + // Follow associate. + object oAssociate = GetLocalObject(oCreature, AI_FOLLOW_TARGET); + if(oAssociate == OBJECT_INVALID || GetMaster(oAssociate) != oCreature) return; + if(GetDistanceBetween(oCreature, oAssociate) > ai_GetFollowDistance(oCreature)) + { + ai_ClearCreatureActions(); + if(AI_DEBUG) ai_Debug("XX_pc_1_hb", "75", "Follow master: " + + " Stealth: " + IntToString(ai_GetAIMode(oCreature, AI_MODE_AGGRESSIVE_STEALTH)) + + " Search: " + IntToString(ai_GetAIMode(oCreature, AI_MODE_AGGRESSIVE_SEARCH))); + SetLocalInt(oCreature, AI_CURRENT_ACTION_MODE, AI_LAST_ACTION_MOVE); + ai_ActionFollow(oCreature, oAssociate); + //ActionMoveToObject(oAssociate, TRUE, ai_GetFollowDistance(oCreature)); + } + } +} diff --git a/src/module/nss/xx_pc_2_percept.nss b/src/module/nss/xx_pc_2_percept.nss new file mode 100644 index 0000000..9731f70 --- /dev/null +++ b/src/module/nss/xx_pc_2_percept.nss @@ -0,0 +1,107 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: xx_pc_2_percept + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Player OnPerception script for PC AI; + There are 4 types of perception - Heard, Inaudible, Seen, Vanished. + Only one type will ever be true in an event trigger. + The order of trigger is Heard/Seen and Inaudible/Vanished. + There are two states of percepion Heard and Seen. + These states can be set at the same time thus a heard event can see the creature. + Fires when ever one of these states changes from TRUE to FALSE or FALSE to TRUE. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + object oLastPerceived = GetLastPerceived(); + if(AI_DEBUG) + { + if(GetLastPerceptionHeard ()) + { + ai_Debug("xx_pc_2_percept", "22", GetName(oCreature) + " heard " + + GetName(GetLastPerceived()) + " Distance: " + + FloatToString(GetDistanceBetween(GetLastPerceived(), oCreature), 0, 2) + + " Seen: " + IntToString(GetObjectSeen(oLastPerceived, oCreature)) + "."); + } + if(GetLastPerceptionSeen ()) + { + ai_Debug("xx_pc_2_percept", "29", GetName(oCreature) + " sees " + + GetName(GetLastPerceived()) + " Distance: " + + FloatToString(GetDistanceBetween(GetLastPerceived(), oCreature), 0, 2) + "."); + } + if(GetLastPerceptionVanished ()) + { + ai_Debug("xx_pc_2_percept", "35", GetName(oCreature) + " lost sight of " + + GetName(GetLastPerceived()) + "."); + } + } + // We do nothing on Inaudibles so drop out early! + if(GetLastPerceptionInaudible()) + { + ai_Debug("xx_pc_2_percept", "42", GetName(oCreature) + " lost sound of " + + GetName(GetLastPerceived()) + "."); + return; + } + if(AI_DEBUG) ai_Debug("xx_pc_2_percept", "46", "Dead? " + IntToString(GetIsDead(oLastPerceived)) + + " Enemy? " + IntToString(GetIsEnemy(oLastPerceived, oCreature))); + if(ai_Disabled(oCreature)) return; + if(GetIsDead(oLastPerceived) || !GetIsEnemy(oLastPerceived, oCreature)) return; + // All code below assumes the perceived creature is an enemy and is alive! + // **************************** ENEMY HEARD ******************************** + if(GetLastPerceptionHeard()) + { + // Since Heard is run before Seen, but the values are set at the same + // time we can skip heard checks on heard & seen creatures! + if(GetObjectSeen(oLastPerceived, oCreature)) + { + // If the creature we are perceiving was our invisible creature then + // remove that they are invisible. + if(oLastPerceived == GetLocalObject(oCreature, AI_IS_INVISIBLE)) + { + DeleteLocalObject(oCreature, AI_IS_INVISIBLE); + } + ai_AssociateEvaluateNewThreat(oCreature, oLastPerceived, AI_I_SEE_AN_ENEMY); + } + else ai_AssociateEvaluateNewThreat(oCreature, oLastPerceived, AI_I_HEARD_AN_ENEMY); + return; + } + // **************************** ENEMY SEEN ********************************* + if(GetLastPerceptionSeen()) + { + // If the creature we are perceiving was our invisible creature then + // remove that they are invisible. + if(oLastPerceived == GetLocalObject(oCreature, AI_IS_INVISIBLE)) + { + DeleteLocalObject(oCreature, AI_IS_INVISIBLE); + } + ai_AssociateEvaluateNewThreat(oCreature, oLastPerceived, AI_I_SEE_AN_ENEMY); + return; + } + // **************************** ENEMY VANISHED ***************************** + if(GetLastPerceptionVanished()) + { + // Lets keep a mental note of the invisible creature. + SetLocalObject(oCreature, AI_IS_INVISIBLE, oLastPerceived); + if(AI_DEBUG) ai_Debug("xx_pc_2_percept", "86", " We saw " + GetName(oLastPerceived) + " disappear!"); + if(ai_GetIsBusy(oCreature)) return; + // If in combat check to see if our target disappeared. + // If they have and we are not in melee with them then reevaluate combat + // since we lost our target. + if(ai_GetIsInCombat(oCreature)) + { + if(AI_DEBUG) ai_Debug("xx_pc_2_percept", "93", "Is this our target? " + + IntToString(ai_GetAttackedTarget(oCreature, TRUE, TRUE) == oLastPerceived)); + if(ai_GetAttackedTarget(oCreature, TRUE, TRUE) == oLastPerceived) + { + ai_DoAssociateCombatRound(oCreature); + } + return; + } + // If they are not invisible then that means they left our perception + // range and we need follow them. + ActionMoveToObject(oLastPerceived, TRUE, AI_RANGE_CLOSE); + } + // **************************** ENEMY INAUDIBLE***************************** + // Not used. +} diff --git a/src/module/nss/xx_pc_3_endround.nss b/src/module/nss/xx_pc_3_endround.nss new file mode 100644 index 0000000..51126e6 --- /dev/null +++ b/src/module/nss/xx_pc_3_endround.nss @@ -0,0 +1,60 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: xx_pc_3_endround + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Player OnCombatRoundEnd event script for PC AI; + Fires at the end of each combat round (6 seconds). + This will fire as long as oCreature is in combat (GetIsInCombat()). + This event starts counting once a combat action is started. + Every time a spell is cast it will queue another end combat round so haste with + two spells cast will fire this twice in one round. + It will also fire at the end of a hostile effect that stops actions i.e Stunned, Knockdown etc. + Action modes are also cleared prior to this event executing! + GetAttemptedAttackTarget() & GetAttemptedSpellTarget() also get cleared prior to this event. + This event can be canceled with ClearAllActions(TRUE) and SurrenderToEnemies. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + if(AI_DEBUG) ai_Debug("xx_pc_3_endround", "20", GetName(oCreature) + " ends combat round."); + if(ai_Disabled(oCreature)) return; + // Action modes get cleared prior to each OnCombatRoundEnd! + // We do this to keep the action mode going. + int nActionMode = GetLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + if(nActionMode > 0) + { + SetActionMode(oCreature, nActionMode, TRUE); + // We don't want to use up all of the Dwarven Defenders uses! + if(nActionMode == 12) IncrementRemainingFeatUses(oCreature, FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE); + } + int nAction = GetCurrentAction(oCreature); + if(AI_DEBUG) ai_Debug("xx_pc_3_endround", "32", "nAction: " + IntToString(nAction)); + switch(nAction) + { + // These actions are uninteruptable. + case ACTION_MOVETOPOINT : + case ACTION_CASTSPELL : + case ACTION_ITEMCASTSPELL : + case ACTION_COUNTERSPELL : return; + // Might be doing a special action that is not a defined action. + case ACTION_INVALID : + { + int nCombatWait = GetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + if(AI_DEBUG) ai_Debug("xx_pc_3_endround", "47", "nCombatWait: " + IntToString(nCombatWait)); + if(nCombatWait) + { + if(ai_IsInCombatRound(oCreature, nCombatWait)) return; + DeleteLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + } + break; + } + // We always want to interupt an attack action at the end of a round (6 seconds). + case ACTION_ATTACKOBJECT : + { + if(ai_IsInCombatRound(oCreature, AI_COMBAT_ROUND_IN_SECONDS)) return; + } + } + if(ai_GetIsInCombat(oCreature)) ai_DoAssociateCombatRound (oCreature); +} + diff --git a/src/module/nss/xx_pc_4_convers.nss b/src/module/nss/xx_pc_4_convers.nss new file mode 100644 index 0000000..413aef1 --- /dev/null +++ b/src/module/nss/xx_pc_4_convers.nss @@ -0,0 +1,30 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: xx_pc_4_convers + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Player OnDialoge event script for PC AI; + Fires when oCreature has been clicked on for conversation. + Fires when oCreature hears a shout from another creature. + If SetListening is FALSE then oCreature will not "hear" anything. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + int nMatch = GetListenPatternNumber(); + object oLastSpeaker = GetLastSpeaker(); + if(AI_DEBUG) ai_Debug("xx_pc_4_convers", "17", GetName(oCreature) + " listens " + + IntToString(nMatch) + " to " + GetName(oLastSpeaker) + "." + + " Searching: " + IntToString(GetLocalInt(oCreature, AI_AM_I_SEARCHING))); + // If we are disabled then we can't listen or talk, Busy is checked in ai_SelectAssociateCommand(). + // Some modules disable the player then talk to them! So it should be ok + // to keep this remarked out. + // Some commands override being busy so we check in ai_SelectAssociateCommand. + if(nMatch != -1) + { + if(!GetFactionEqual(oLastSpeaker, oCreature)) return; + if(!ai_Disabled(oCreature)) ai_SelectAssociateCommand(oCreature, oLastSpeaker, nMatch); + } + else BeginConversation("", oLastSpeaker); +} + diff --git a/src/module/nss/xx_pc_5_phyatked.nss b/src/module/nss/xx_pc_5_phyatked.nss new file mode 100644 index 0000000..1c6ba79 --- /dev/null +++ b/src/module/nss/xx_pc_5_phyatked.nss @@ -0,0 +1,29 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: xx_pc_5_phyatked + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Player OnPhysicalAttacked event script for PC AI; + Fires for all physical attacks, claws, weapons, fists, bow, etc. + Fires for taunt skill, animal empathy skill. +/*////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + object oAttacker = GetLastAttacker(); + if(AI_DEBUG) ai_Debug("xx_pc_5_phyatked", "14", GetName(oCreature) + " was attacked by " + + GetName(oAttacker) + "."); + SetLocalObject(oAttacker, AI_ATTACKED_PHYSICAL, oCreature); + if(ai_GetIsBusy(oCreature) || ai_Disabled(oCreature)) return; + if(ai_GetIsInCombat(oCreature)) return; + // We only inform others if attacked when not busy, not disabled, & not in combat. + SetLocalObject(oCreature, AI_MY_TARGET, oAttacker); + SpeakString(AI_ATKED_BY_WEAPON, TALKVOLUME_SILENT_TALK); + // The only way to get here is to not be in combat thus we have not + // perceived them so lets look for them. + if(!ai_CanIAttack(oCreature)) return; + if(GetDistanceBetween(oCreature, oAttacker) < AI_RANGE_CLOSE) ai_DoAssociateCombatRound(oCreature); + else ActionMoveToObject(oAttacker, TRUE, AI_RANGE_CLOSE - 1.0); +} + + diff --git a/src/module/nss/xx_pc_6_damaged.nss b/src/module/nss/xx_pc_6_damaged.nss new file mode 100644 index 0000000..c3d6aaa --- /dev/null +++ b/src/module/nss/xx_pc_6_damaged.nss @@ -0,0 +1,27 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: xx_pc_6_damaged + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associate (Summons, Familiars, Companions) OnDamaged script; + Does not fire if the creature dies from the damage. + Does not fire for plot creatures as they take no damage. + May fire before or after OnPhysicalAttacked event. + Fires when EffectDamage is applied to oCreature even if 0 damage. + Fires when a weapon damages a oCreature, but not if resisted. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + if(ai_Disabled(oCreature)) return; + // Make sure to clear wounded shout limit if we take damage. See ai_TryHealing. + DeleteLocalInt(oCreature, "AI_WOUNDED_SHOUT_LIMIT"); + object oDamager = GetLastDamager(oCreature); + if(AI_DEBUG) ai_Debug("xx_pc_6_damaged", "18", GetName(oCreature) + " has been damaged by " + GetName(oDamager)); + if(GetObjectType(oDamager) == OBJECT_TYPE_AREA_OF_EFFECT && + ai_IsInADangerousAOE(oCreature, AI_RANGE_BATTLEFIELD, TRUE)) return; + if(ai_GetIsBusy(oCreature) || ai_GetIsInCombat(oCreature)) return; + if(GetDistanceBetween(oCreature, oDamager) < AI_RANGE_CLOSE) ai_DoAssociateCombatRound(oCreature); + else ActionMoveToObject(oDamager, TRUE, AI_RANGE_CLOSE - 1.0); +} + diff --git a/src/module/nss/xx_pc_8_disturb.nss b/src/module/nss/xx_pc_8_disturb.nss new file mode 100644 index 0000000..6440c03 --- /dev/null +++ b/src/module/nss/xx_pc_8_disturb.nss @@ -0,0 +1,21 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: xx_pc_8_disturb + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Player OnDisturbed event script for PC AI. + Fires when the inventory of oCreature is changed i.e. added or removed. + Creatures can't have items added or removed from its inventory (it's not a + container), then the only way this fires for creatures if something is stolen. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + if(AI_DEBUG) ai_Debug("xx_pc_8_disturb", "14", GetName(OBJECT_SELF) + " is been disturbed!"); + // We do nothing at the moment... lets not mess up our factions ok? + // This should be defined by the server admins and is commented out. + //if(ai_GetIsBusy(OBJECT_SELF, FALSE) || ai_Disabled()) return; + //object oTarget = GetLastDisturbed(); + //if (oTarget != OBJECT_INVALID) ai_DoMonsterCombatRound (); +} + + diff --git a/src/module/nss/xx_pc_b_castat.nss b/src/module/nss/xx_pc_b_castat.nss new file mode 100644 index 0000000..5d4b85f --- /dev/null +++ b/src/module/nss/xx_pc_b_castat.nss @@ -0,0 +1,35 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: xx_pc_b_castat + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Player OnSpellCastAt event script for PC AI; + Fires when oCreature becomes the target of a spell via SignalEvent. + Fires when a healing kit is used on a creature. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + object oCaster = GetLastSpellCaster(); + SetLocalObject(oCaster, AI_ATTACKED_SPELL, oCreature); + if(ai_Disabled(oCreature)) return; + if(!GetLastSpellHarmful()) return; + // If the spell came from an ally, we don't want to hold it against them. + if(GetFactionEqual(oCaster, oCreature)) ClearPersonalReputation(oCaster, oCreature); + // Lets see what kind of area of effect this is and select an appropriate action. + int nSpell = GetLastSpell(); + if(AI_DEBUG) ai_Debug("xx_pc_b_castat", "21", GetName(OBJECT_SELF) + " has been hit by a harmful spell(" + + Get2DAString("spells", "Label", nSpell) + ")!"); + if(ai_GetInAOEReaction(oCreature, oCaster, nSpell) && + ai_IsInADangerousAOE(oCreature, AI_RANGE_BATTLEFIELD, TRUE)) return; + if(ai_GetIsBusy(oCreature)) return; + if(ai_CheckForCombat(oCreature, FALSE)) return; + // We were attacked by an enemy out of combat, so let our allies know. + SetLocalObject(oCreature, AI_MY_TARGET, oCaster); + SpeakString(AI_ATKED_BY_SPELL, TALKVOLUME_SILENT_TALK); + if(!ai_CanIAttack(oCreature)) return; + if(GetDistanceBetween(oCreature, oCaster) < AI_RANGE_CLOSE) ai_DoAssociateCombatRound(oCreature); + else ActionMoveToObject(oCaster, TRUE, AI_RANGE_CLOSE - 1.0); +} + + diff --git a/src/module/nss/xx_pc_e_blocked.nss b/src/module/nss/xx_pc_e_blocked.nss new file mode 100644 index 0000000..604513e --- /dev/null +++ b/src/module/nss/xx_pc_e_blocked.nss @@ -0,0 +1,68 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: xx_pc_e_blocked + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Player OnBlocked event script for PC AI; + Can be blocked by a creature or door. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + // This actually gets either a Creature or Door that is blocking OBJECT_SELF. + object oObject = GetBlockingDoor(); + if(AI_DEBUG) ai_Debug("xx_pc_e_blocked", "14", GetName(oCreature) + " is being blocked by " + GetName(oObject)); + int nObjectType = GetObjectType(oObject); + if(nObjectType == OBJECT_TYPE_CREATURE) + { + if(GetIsEnemy(oObject, oCreature)) + { + if(ai_CanIAttack(oCreature) && ai_GetIsInCombat(oCreature)) + { + ai_DoAssociateCombatRound(oCreature); + return; + } + if(ai_CheckForCombat(oCreature, FALSE)) return; + } + } + // Anything below blocking us is a door. + if(nObjectType != OBJECT_TYPE_DOOR) return; + //if(GetLockKeyTag(oObject) != "") return; + else if(GetIsDoorActionPossible(oObject, DOOR_ACTION_OPEN) && + GetAbilityScore(oCreature, ABILITY_INTELLIGENCE) >= 5) + { + DoDoorAction(oObject, DOOR_ACTION_OPEN); + return; + } + // Anything below is ignored in combat. + if(ai_GetIsInCombat(oCreature)) return; + // If we are in combat we should ignore doors that do not easily open. + if(GetIsDoorActionPossible(oObject, DOOR_ACTION_BASH) && + ai_GetWeaponDamage(oCreature, 3, TRUE) > GetHardness(oObject) && + GetLockKeyTag(oObject) == "") + { + ActionWait(1.0); + ActionAttack(oObject); + // Give them 3 rounds to break through a door. + DelayCommand(18.0, ai_ClearCreatureActions(TRUE)); + return; + } + else if(GetLocked(oObject)) + { + if(AI_DEBUG) ai_Debug("0e_ch_e_blocked", "49", GetName(oObject) + " is locked!"); + string sID = ObjectToString(oCreature); + if(!GetLocalInt(oObject, "AI_STATED_LOCKED_" + sID) && + !ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) SpeakString("That " + GetName(oObject) + " is locked!"); + SetLocalInt(oObject, "AI_STATED_LOCKED_" + sID, TRUE); + if(ai_GetAIMode(oCreature, AI_MODE_PICK_LOCKS) || + ai_GetAIMode(oCreature, AI_MODE_BASH_LOCKS)) + { + ai_AttemptToByPassLock(oCreature, oObject); + } + } + // Clear our action so we can move on to something else unless the door is open. + else if(!GetIsOpen(oObject)) + { + ai_ClearCreatureActions(); + } +} diff --git a/src/module/nss/zzz_debug.nss b/src/module/nss/zzz_debug.nss new file mode 100644 index 0000000..3462d72 --- /dev/null +++ b/src/module/nss/zzz_debug.nss @@ -0,0 +1,5 @@ +#include "inc_misc_tools" +void main() + { + + } diff --git a/src/module/utc/advancedmerchant.utc.json b/src/module/utc/advancedmerchant.utc.json new file mode 100644 index 0000000..9eb682f --- /dev/null +++ b/src/module/utc/advancedmerchant.utc.json @@ -0,0 +1,1736 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 1 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 27.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 10 + }, + "ClassLevel": { + "type": "short", + "value": 40 + }, + "MemorizedList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 37 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 100 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 144 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 151 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 86 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 102 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 107 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 371 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 165 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 174 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList2": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 120 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 90 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 93 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 115 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 150 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 175 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList3": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 21 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 59 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 78 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 176 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList4": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 47 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 375 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 368 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 119 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 172 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList5": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 459 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 23 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 71 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 99 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 179 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList6": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 14 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 485 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 72 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 448 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 180 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList7": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 39 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 123 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 135 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 141 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 169 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList8": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 69 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 367 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 110 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 117 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 134 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList9": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 116 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 178 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 185 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 193 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 1 + }, + "Color_Skin": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "npc_enchanter" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 101 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_cloth005" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wswdg001" + } + }, + { + "__struct_id": 8192, + "EquippedRes": { + "type": "resref", + "value": "nw_wambo001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 858 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 944 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 946 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 618 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 875 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 877 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 990 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 878 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 876 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 874 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 976 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 794 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 795 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 401 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 696 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 25 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 29 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 945 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 36 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 303 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 51 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Advanced Merchant" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 101 + }, + "Int": { + "type": "byte", + "value": 26 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "nw_wbwxl001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "nw_it_torch001" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr102" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr105" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 7, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr108" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 8, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr109" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 181 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 44 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 648 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x2_def_attacked" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x2_def_ondamage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_def_ondeath" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x2_def_onconv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x2_def_ondisturb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x2_def_endcombat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x2_def_heartbeat" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x2_def_onblocked" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x2_def_percept" + }, + "ScriptRested": { + "type": "resref", + "value": "x2_def_rested" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_def_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_def_spellcast" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x2_def_userdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 43 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 43 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 43 + } + }, + { + "__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": 43 + } + }, + { + "__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": 43 + } + }, + { + "__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": 65535 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 10 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "AdvancedMerchant" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "advancedmerchant" + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/bagoftricks_badg.utc.json b/src/module/utc/bagoftricks_badg.utc.json new file mode 100644 index 0000000..5caa0d7 --- /dev/null +++ b/src/module/utc/bagoftricks_badg.utc.json @@ -0,0 +1,531 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 8 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 0.5 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 4 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12365 + } + }, + "Dex": { + "type": "byte", + "value": 7 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp001" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp001" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps014" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 42 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Badger", + "id": 12366 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 4 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 6 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 144 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 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": 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": 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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 4 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 299 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 8 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_BADGER" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "bagoftricks_badg" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/bagoftricks_bat.utc.json b/src/module/utc/bagoftricks_bat.utc.json new file mode 100644 index 0000000..6173585 --- /dev/null +++ b/src/module/utc/bagoftricks_bat.utc.json @@ -0,0 +1,486 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 10 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 4 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 5 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12375 + } + }, + "Dex": { + "type": "byte", + "value": 8 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Bat", + "id": 12376 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 5 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 5 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 145 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 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": 6 + } + }, + { + "__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": 9 + } + }, + { + "__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": 6 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 3 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_BAT" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "bagoftricks_bat" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 14 + } +} diff --git a/src/module/utc/bagoftricks_blac.utc.json b/src/module/utc/bagoftricks_blac.utc.json new file mode 100644 index 0000000..c05c1f1 --- /dev/null +++ b/src/module/utc/bagoftricks_blac.utc.json @@ -0,0 +1,528 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 12 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 2.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 3 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 13 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12381 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp026" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp026" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps005" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 291 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12382 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 13 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 19 + }, + "NaturalAC": { + "type": "byte", + "value": 2 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 147 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 0 + } + }, + { + "__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": 7 + } + }, + { + "__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": 7 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 19 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_BEARBLCK" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "bagoftricks_blac" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/bagoftricks_boar.utc.json b/src/module/utc/bagoftricks_boar.utc.json new file mode 100644 index 0000000..66b0847 --- /dev/null +++ b/src/module/utc/bagoftricks_boar.utc.json @@ -0,0 +1,494 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 21 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 4 + }, + "ChallengeRating": { + "type": "float", + "value": 2.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 3 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 17 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 14 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12396 + } + }, + "Dex": { + "type": "byte", + "value": 10 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpp010" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Boar", + "id": 12397 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 14 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 23 + }, + "NaturalAC": { + "type": "byte", + "value": 6 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 152 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 10 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 15 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_BOAR" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "bagoftricks_boar" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 13 + } +} diff --git a/src/module/utc/bagoftricks_brow.utc.json b/src/module/utc/bagoftricks_brow.utc.json new file mode 100644 index 0000000..5bfbb59 --- /dev/null +++ b/src/module/utc/bagoftricks_brow.utc.json @@ -0,0 +1,528 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 13 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 5.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 6 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 19 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 27 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12383 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp010" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp010" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps017" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 291 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12384 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 27 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 51 + }, + "NaturalAC": { + "type": "byte", + "value": 5 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 148 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 0 + } + }, + { + "__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": 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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 7 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 27 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_BEARBRWN" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "bagoftricks_brow" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/bagoftricks_dwol.utc.json b/src/module/utc/bagoftricks_dwol.utc.json new file mode 100644 index 0000000..3d1f256 --- /dev/null +++ b/src/module/utc/bagoftricks_dwol.utc.json @@ -0,0 +1,514 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 175 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 5.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 6 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 17 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 33 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12449 + } + }, + "Dex": { + "type": "byte", + "value": 15 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps010" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 291 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 10526 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 33 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 51 + }, + "NaturalAC": { + "type": "byte", + "value": 3 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 184 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 5 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__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": 6 + } + }, + { + "__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": 104 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 25 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_DIREWOLF" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "bagoftricks_dwol" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/bagoftricks_jag.utc.json b/src/module/utc/bagoftricks_jag.utc.json new file mode 100644 index 0000000..fd3f73b --- /dev/null +++ b/src/module/utc/bagoftricks_jag.utc.json @@ -0,0 +1,514 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 98 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 3.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 5 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 16 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12622 + } + }, + "Dex": { + "type": "byte", + "value": 19 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp026" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp026" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps010" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 42 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12623 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 16 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 26 + }, + "NaturalAC": { + "type": "byte", + "value": 3 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 555 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 9 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__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": 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": 6 + } + }, + { + "__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": 19 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 16 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_JAGUAR" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "bagoftricks_jag" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/bagoftricks_lion.utc.json b/src/module/utc/bagoftricks_lion.utc.json new file mode 100644 index 0000000..596bf0c --- /dev/null +++ b/src/module/utc/bagoftricks_lion.utc.json @@ -0,0 +1,514 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 97 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 3.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 5 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 22 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12631 + } + }, + "Dex": { + "type": "byte", + "value": 17 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp026" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp026" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps010" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12632 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 22 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 32 + }, + "NaturalAC": { + "type": "byte", + "value": 3 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 167 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 4 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 5 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 11 + } + }, + { + "__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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 18 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 21 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_LION" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "bagoftricks_lion" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/bagoftricks_pola.utc.json b/src/module/utc/bagoftricks_pola.utc.json new file mode 100644 index 0000000..6ec81e5 --- /dev/null +++ b/src/module/utc/bagoftricks_pola.utc.json @@ -0,0 +1,521 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 14 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 6.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 8 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 19 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 36 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12388 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp010" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp010" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps017" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12389 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 36 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 68 + }, + "NaturalAC": { + "type": "byte", + "value": 5 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 149 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__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": 7 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 27 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_BEARPOLAR" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "bagoftricks_pola" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/bagoftricks_rat.utc.json b/src/module/utc/bagoftricks_rat.utc.json new file mode 100644 index 0000000..7b43004 --- /dev/null +++ b/src/module/utc/bagoftricks_rat.utc.json @@ -0,0 +1,500 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 386 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 3 + }, + "ChallengeRating": { + "type": "float", + "value": 0.125 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 1 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 3104 + } + }, + "Dex": { + "type": "byte", + "value": 15 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps014" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 42 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 3103 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 1 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 1 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 602 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 18 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 10 + } + }, + { + "__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": 249 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 3 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_RAT001" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "bagoftricks_rat" + }, + "WalkRate": { + "type": "int", + "value": 5 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/bagoftricks_wolf.utc.json b/src/module/utc/bagoftricks_wolf.utc.json new file mode 100644 index 0000000..a2603dc --- /dev/null +++ b/src/module/utc/bagoftricks_wolf.utc.json @@ -0,0 +1,500 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 181 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 1.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 2 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 11 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12815 + } + }, + "Dex": { + "type": "byte", + "value": 11 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps005" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 42 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12816 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 11 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 15 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 319 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__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": 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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 103 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 13 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_WOLF" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "bagoftricks_wolf" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/barag.utc.json b/src/module/utc/barag.utc.json new file mode 100644 index 0000000..b40783f --- /dev/null +++ b/src/module/utc/barag.utc.json @@ -0,0 +1,775 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 7 + }, + "Appearance_Type": { + "type": "word", + "value": 5 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.5 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 0 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 23 + }, + "Color_Skin": { + "type": "byte", + "value": 34 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 12 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 15 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl008" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_waxhn001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 194 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 293 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Barag" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 12 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "nw_it_torch001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Yuwmawdur" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 14 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 3 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 137 + }, + "Race": { + "type": "byte", + "value": 5 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__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": 2 + } + }, + { + "__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": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 221 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 18 + }, + "Str": { + "type": "byte", + "value": 16 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Barag" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "barag" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 100 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/boibo.utc.json b/src/module/utc/boibo.utc.json new file mode 100644 index 0000000..97e546b --- /dev/null +++ b/src/module/utc/boibo.utc.json @@ -0,0 +1,834 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 6 + }, + "Appearance_Type": { + "type": "word", + "value": 3 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 12 + }, + "ChallengeRating": { + "type": "float", + "value": 0.5 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 8 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 13 + }, + "Color_Skin": { + "type": "byte", + "value": 2 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 6 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 16 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl001" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wswss001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 249 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 250 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 248 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 237 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 247 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4752 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 375 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 221 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 50 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Boibo" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 6 + }, + "Int": { + "type": "byte", + "value": 14 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "nw_it_torch001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "nw_it_picks001" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "nw_wswdg001" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "InventoryRes": { + "type": "resref", + "value": "nw_it_trap001" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Swample" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 8 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 3 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 62 + }, + "Race": { + "type": "byte", + "value": 3 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 367 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 98 + }, + "Str": { + "type": "byte", + "value": 12 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Boibo" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "boibo" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 100 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 8 + } +} diff --git a/src/module/utc/cario.utc.json b/src/module/utc/cario.utc.json new file mode 100644 index 0000000..0febbfc --- /dev/null +++ b/src/module/utc/cario.utc.json @@ -0,0 +1,943 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 8 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 16 + }, + "ChallengeRating": { + "type": "float", + "value": 1.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 9 + }, + "ClassLevel": { + "type": "short", + "value": 1 + }, + "KnownList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 37 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 100 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 144 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 151 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "KnownList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 102 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 174 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 4 + }, + "Color_Skin": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 4 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_cloth008" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wbwxl001" + } + }, + { + "__struct_id": 8192, + "EquippedRes": { + "type": "resref", + "value": "nw_wambo001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 944 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4759 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4715 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4752 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 303 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Cario" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 4 + }, + "Int": { + "type": "byte", + "value": 12 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "nw_it_torch001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr102" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr105" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr108" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 7, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr109" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 8, + "InventoryRes": { + "type": "resref", + "value": "nw_wswdg001" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Trantior" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 6 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 3 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 70 + }, + "Race": { + "type": "byte", + "value": 202 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__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": 3 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__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": 3 + } + }, + { + "__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": 3 + } + }, + { + "__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": 358 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 99 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Cario" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "cario" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 150 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/choa.utc.json b/src/module/utc/choa.utc.json new file mode 100644 index 0000000..5a451c6 --- /dev/null +++ b/src/module/utc/choa.utc.json @@ -0,0 +1,1175 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 9 + }, + "Appearance_Type": { + "type": "word", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 15 + }, + "ChallengeRating": { + "type": "float", + "value": 0.5 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 1 + }, + "ClassLevel": { + "type": "short", + "value": 1 + }, + "KnownList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 33 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 37 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 100 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 151 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 23 + }, + "Color_Skin": { + "type": "byte", + "value": 23 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 6 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl001" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wswdg001" + } + }, + { + "__struct_id": 8192, + "EquippedRes": { + "type": "resref", + "value": "nw_wambo001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 257 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 197 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 871 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4682 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4711 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4683 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 236 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 235 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 22 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 240 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4701 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 237 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 238 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 239 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4703 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Choa" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 6 + }, + "Int": { + "type": "byte", + "value": 12 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "nw_wbwxl001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "nw_it_torch001" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr102" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr105" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 7, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr108" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 8, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr109" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "De'aktar" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 7 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 3 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 1019 + }, + "Race": { + "type": "byte", + "value": 163 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 243 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 1 + }, + "Str": { + "type": "byte", + "value": 12 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Choa" + }, + "Tail_New": { + "type": "dword", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "choa" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 150 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "SET_NAME" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "RANDOM" + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "RND_BARD" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings_New": { + "type": "dword", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + }, + "xAppearance_Head": { + "type": "word", + "value": 9 + }, + "xArmorPart_RFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_Belt": { + "type": "word", + "value": 0 + }, + "xBodyPart_LBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_LFoot": { + "type": "word", + "value": 1 + }, + "xBodyPart_LHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_LShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_LThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Neck": { + "type": "word", + "value": 1 + }, + "xBodyPart_Pelvis": { + "type": "word", + "value": 1 + }, + "xBodyPart_RBicep": { + "type": "word", + "value": 1 + }, + "xBodyPart_RFArm": { + "type": "word", + "value": 1 + }, + "xBodyPart_RHand": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShin": { + "type": "word", + "value": 1 + }, + "xBodyPart_RShoul": { + "type": "word", + "value": 0 + }, + "xBodyPart_RThigh": { + "type": "word", + "value": 1 + }, + "xBodyPart_Torso": { + "type": "word", + "value": 1 + } +} diff --git a/src/module/utc/craftsmanmerchan.utc.json b/src/module/utc/craftsmanmerchan.utc.json new file mode 100644 index 0000000..4a8a0ba --- /dev/null +++ b/src/module/utc/craftsmanmerchan.utc.json @@ -0,0 +1,1793 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 1 + }, + "Appearance_Type": { + "type": "word", + "value": 2 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 28.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 10 + }, + "ClassLevel": { + "type": "short", + "value": 40 + }, + "MemorizedList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 37 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 100 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 144 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 151 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 86 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 102 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 107 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 371 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 165 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 174 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList2": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 120 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 90 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 93 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 115 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 150 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 175 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList3": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 21 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 59 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 78 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 176 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList4": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 47 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 375 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 368 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 119 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 172 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList5": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 459 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 23 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 71 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 99 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 179 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList6": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 14 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 485 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 72 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 448 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 180 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList7": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 39 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 123 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 135 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 141 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 169 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList8": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 69 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 367 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 110 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 117 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 134 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList9": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 116 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 178 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 185 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 193 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 1 + }, + "Color_Skin": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "craftingmerchant" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 101 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "miscc060" + } + }, + { + "__struct_id": 8192, + "EquippedRes": { + "type": "resref", + "value": "nw_wambo001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 858 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 233 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 232 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 242 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 944 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 946 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 618 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 875 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 877 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 990 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 878 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 876 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 874 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 976 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 794 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 795 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 401 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 241 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 696 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 354 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 29 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 945 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 243 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 237 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 375 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 170 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 36 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 303 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 51 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Craftsman Merchant" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 101 + }, + "Int": { + "type": "byte", + "value": 26 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "nw_wbwxl001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "nw_it_torch001" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr102" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr105" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 7, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr108" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 8, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr109" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 9, + "InventoryRes": { + "type": "resref", + "value": "nw_wswdg001" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 221 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 40 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 50 + }, + "Race": { + "type": "byte", + "value": 2 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x2_def_attacked" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x2_def_ondamage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_def_ondeath" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x2_def_onconv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x2_def_ondisturb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x2_def_endcombat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x2_def_heartbeat" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x2_def_onblocked" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x2_def_percept" + }, + "ScriptRested": { + "type": "resref", + "value": "x2_def_rested" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_def_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_def_spellcast" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x2_def_userdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 43 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 43 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 43 + } + }, + { + "__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": 43 + } + }, + { + "__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": 43 + } + }, + { + "__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": 0 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 10 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "CraftsmanMerchant" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "craftsmanmerchan" + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/deck_bandit1.utc.json b/src/module/utc/deck_bandit1.utc.json new file mode 100644 index 0000000..a3ea02c --- /dev/null +++ b/src/module/utc/deck_bandit1.utc.json @@ -0,0 +1,653 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 270 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 8 + }, + "ChallengeRating": { + "type": "float", + "value": 11.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 4 + }, + "ClassLevel": { + "type": "short", + "value": 15 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 12 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 87 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl009" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wswmgs012" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 85 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 63 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 27 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 123 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 101 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 44 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 161 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 139 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Bandit Chief", + "id": 12373 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 87 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 117 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 129 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 16 + } + }, + { + "__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": 16 + } + }, + { + "__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": 177 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 4 + }, + "Str": { + "type": "byte", + "value": 18 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_BANDIT007" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_bandit1" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/deck_bandit2.utc.json b/src/module/utc/deck_bandit2.utc.json new file mode 100644 index 0000000..27028d0 --- /dev/null +++ b/src/module/utc/deck_bandit2.utc.json @@ -0,0 +1,738 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 257 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 8 + }, + "ChallengeRating": { + "type": "float", + "value": 4.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 10 + }, + "ClassLevel": { + "type": "short", + "value": 5 + }, + "MemorizedList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 37 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 100 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 100 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 144 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 102 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 107 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 107 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 165 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList2": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 90 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 192 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList3": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList5": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 10 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 1 + } + } + ] + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 14 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wswdg001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 303 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 51 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12371 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 14 + }, + "Int": { + "type": "byte", + "value": 17 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 29 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 92 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__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": 4 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__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": 4 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__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": 176 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 10 + }, + "Str": { + "type": "byte", + "value": 8 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_BANDIT005" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_bandit2" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/deck_bandit4.utc.json b/src/module/utc/deck_bandit4.utc.json new file mode 100644 index 0000000..d3727f4 --- /dev/null +++ b/src/module/utc/deck_bandit4.utc.json @@ -0,0 +1,742 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 269 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 12 + }, + "ChallengeRating": { + "type": "float", + "value": 3.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 2 + }, + "ClassLevel": { + "type": "short", + "value": 3 + }, + "MemorizedList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 33 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 100 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 151 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 189 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 6 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 32 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 32 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 154 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList2": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 34 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 83 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 163 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 17 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 8 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl009" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wblml001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 294 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Bandit Cleric", + "id": 12370 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 17 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 26 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 129 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__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": 1 + } + }, + { + "__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": 177 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 2 + }, + "Str": { + "type": "byte", + "value": 13 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_BANDIT004" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_bandit4" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 15 + } +} diff --git a/src/module/utc/deck_bandit6.utc.json b/src/module/utc/deck_bandit6.utc.json new file mode 100644 index 0000000..8b645bc --- /dev/null +++ b/src/module/utc/deck_bandit6.utc.json @@ -0,0 +1,620 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 254 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 4 + }, + "ChallengeRating": { + "type": "float", + "value": 7.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 0 + }, + "ClassLevel": { + "type": "short", + "value": 10 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 13 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 70 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl004" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_waxmgr002" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 194 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 195 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 251 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 252 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 111 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12372 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 70 + }, + "Int": { + "type": "byte", + "value": 6 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 80 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 129 + }, + "Race": { + "type": "byte", + "value": 5 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 26 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 13 + } + }, + { + "__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": 7 + } + }, + { + "__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": 113 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 299 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 10 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 299 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 10 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 21 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_BANDIT006" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_bandit6" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/deck_bugbear.utc.json b/src/module/utc/deck_bugbear.utc.json new file mode 100644 index 0000000..6e451d3 --- /dev/null +++ b/src/module/utc/deck_bugbear.utc.json @@ -0,0 +1,521 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 29 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 9 + }, + "ChallengeRating": { + "type": "float", + "value": 2.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 14 + }, + "ClassLevel": { + "type": "short", + "value": 3 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 13 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 13 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12410 + } + }, + "Dex": { + "type": "byte", + "value": 12 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl001" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wblms001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12411 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 13 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 16 + }, + "NaturalAC": { + "type": "byte", + "value": 3 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 158 + }, + "Race": { + "type": "byte", + "value": 12 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__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": 3 + } + }, + { + "__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": 12 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 15 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_BUGBEARA" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_bugbear" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/deck_cocktrice.utc.json b/src/module/utc/deck_cocktrice.utc.json new file mode 100644 index 0000000..161a43f --- /dev/null +++ b/src/module/utc/deck_cocktrice.utc.json @@ -0,0 +1,620 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 368 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 9 + }, + "ChallengeRating": { + "type": "float", + "value": 5.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 23 + }, + "ClassLevel": { + "type": "short", + "value": 5 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "Cockatrice, male" + }, + "Con": { + "type": "byte", + "value": 11 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 27 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 40597 + } + }, + "Dex": { + "type": "byte", + "value": 17 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "x0_cocktrc_touch" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 40596 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 27 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 27 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 624 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__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": 6 + } + }, + { + "__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": 324 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 496 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 496 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 496 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 496 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 496 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 496 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 496 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 6 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "X0_COCKATRICE" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_cocktrice" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 13 + } +} diff --git a/src/module/utc/deck_dragongold.utc.json b/src/module/utc/deck_dragongold.utc.json new file mode 100644 index 0000000..b04cf03 --- /dev/null +++ b/src/module/utc/deck_dragongold.utc.json @@ -0,0 +1,799 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 46 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 20 + }, + "ChallengeRating": { + "type": "float", + "value": 16.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 18 + }, + "ClassLevel": { + "type": "short", + "value": 23 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 21 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 149 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12480 + } + }, + "Dex": { + "type": "byte", + "value": 10 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp010" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp010" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps015" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "nw_it_creitemdr2" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12481 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 149 + }, + "Int": { + "type": "byte", + "value": 20 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_msmlmisc17" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 100 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 264 + }, + "NaturalAC": { + "type": "byte", + "value": 22 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 196 + }, + "Race": { + "type": "byte", + "value": 11 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 22 + } + }, + { + "__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": 23 + } + }, + { + "__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": 23 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 23 + } + }, + { + "__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": 30 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 412 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 8 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 8 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 16 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 16 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 239 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 239 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 239 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 245 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 245 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 245 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 101 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 101 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 107 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 107 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 33 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_DRGGOLD001" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_dragongold" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 21 + } +} diff --git a/src/module/utc/deck_drgred.utc.json b/src/module/utc/deck_drgred.utc.json new file mode 100644 index 0000000..61546ff --- /dev/null +++ b/src/module/utc/deck_drgred.utc.json @@ -0,0 +1,777 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 49 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 16 + }, + "ChallengeRating": { + "type": "float", + "value": 15.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 18 + }, + "ClassLevel": { + "type": "short", + "value": 22 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 21 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 143 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12488 + } + }, + "Dex": { + "type": "byte", + "value": 10 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp015" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp015" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps017" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "nw_it_creitemdrm" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 179 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Adult Red Dragon", + "id": 12489 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 143 + }, + "Int": { + "type": "byte", + "value": 16 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_msmlmisc17" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 253 + }, + "NaturalAC": { + "type": "byte", + "value": 21 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 198 + }, + "Race": { + "type": "byte", + "value": 11 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 20 + } + }, + { + "__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": 22 + } + }, + { + "__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": 5 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 22 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 22 + } + }, + { + "__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": 30 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 412 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 239 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 239 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 239 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 101 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 101 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 107 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 107 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 107 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 115 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 115 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 7 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 33 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_DRGRED001" + }, + "Tail": { + "type": "byte", + "value": 205 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_drgred" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 205 + }, + "Wis": { + "type": "byte", + "value": 19 + } +} diff --git a/src/module/utc/deck_dwarfmerc1.utc.json b/src/module/utc/deck_dwarfmerc1.utc.json new file mode 100644 index 0000000..17dc188 --- /dev/null +++ b/src/module/utc/deck_dwarfmerc1.utc.json @@ -0,0 +1,666 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 249 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 4 + }, + "ChallengeRating": { + "type": "float", + "value": 9.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 4 + }, + "ClassLevel": { + "type": "short", + "value": 13 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 16 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 76 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl006" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wblmfh002" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 233 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 232 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 231 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 229 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 230 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 78 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 27 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 234 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 227 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 116 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 44 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 154 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12511 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 76 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 128 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 129 + }, + "Race": { + "type": "byte", + "value": 0 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 16 + } + }, + { + "__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": 14 + } + }, + { + "__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": 1 + } + }, + { + "__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": 130 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 4 + }, + "Str": { + "type": "byte", + "value": 18 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_DWARFMERC005" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_dwarfmerc1" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/deck_elfmage.utc.json b/src/module/utc/deck_elfmage.utc.json new file mode 100644 index 0000000..534f4bf --- /dev/null +++ b/src/module/utc/deck_elfmage.utc.json @@ -0,0 +1,1098 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 245 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 11.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 10 + }, + "ClassLevel": { + "type": "short", + "value": 15 + }, + "MemorizedList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 37 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 144 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 144 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 144 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 102 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 107 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 107 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 107 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList2": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 94 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 115 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 157 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 157 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList3": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 78 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList4": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 26 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 127 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 172 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 177 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList5": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 2 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 23 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 25 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 25 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList6": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 18 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 67 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 74 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList7": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 56 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 181 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList8": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 367 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 11 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 39 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 16 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wswmdg009" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 2 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 236 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 235 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 22 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 240 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 24 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 237 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 238 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 239 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 169 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 36 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 303 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 90 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 256 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 51 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12518 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 39 + }, + "Int": { + "type": "byte", + "value": 19 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 24 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 92 + }, + "Race": { + "type": "byte", + "value": 1 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 18 + } + }, + { + "__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": 9 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 18 + } + }, + { + "__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": 9 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 18 + } + }, + { + "__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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 180 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 10 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_ELFMAGE015" + }, + "Tail": { + "type": "byte", + "value": 205 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_elfmage" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 205 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/deck_elfranger.utc.json b/src/module/utc/deck_elfranger.utc.json new file mode 100644 index 0000000..99f93c8 --- /dev/null +++ b/src/module/utc/deck_elfranger.utc.json @@ -0,0 +1,798 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 247 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 8 + }, + "ChallengeRating": { + "type": "float", + "value": 11.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 7 + }, + "ClassLevel": { + "type": "short", + "value": 15 + }, + "MemorizedList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 32 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 53 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 53 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 150 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList2": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 13 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList3": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 126 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList4": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 35 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 8 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 87 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 20 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_maarcl087" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wbwmln002" + } + }, + { + "__struct_id": 2048, + "EquippedRes": { + "type": "resref", + "value": "nw_wammar008" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 199 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 268 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 272 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 279 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 273 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 236 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 235 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 63 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 240 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 27 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 237 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 238 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 239 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 201 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 41 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 101 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 256 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12520 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 87 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 57 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 129 + }, + "Race": { + "type": "byte", + "value": 1 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 18 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 18 + } + }, + { + "__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": 18 + } + }, + { + "__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": 18 + } + }, + { + "__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": 171 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 7 + }, + "Str": { + "type": "byte", + "value": 15 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_ELFRANGER015" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_elfranger" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 14 + } +} diff --git a/src/module/utc/deck_ettin.utc.json b/src/module/utc/deck_ettin.utc.json new file mode 100644 index 0000000..cbee4c3 --- /dev/null +++ b/src/module/utc/deck_ettin.utc.json @@ -0,0 +1,542 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 72 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 11 + }, + "ChallengeRating": { + "type": "float", + "value": 8.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 22 + }, + "ClassLevel": { + "type": "short", + "value": 10 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 45 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12523 + } + }, + "Dex": { + "type": "byte", + "value": 8 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewcl003" + } + }, + { + "__struct_id": 32, + "EquippedRes": { + "type": "resref", + "value": "nw_wplss001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 292 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 41 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12524 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 45 + }, + "Int": { + "type": "byte", + "value": 6 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 65 + }, + "NaturalAC": { + "type": "byte", + "value": 7 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 205 + }, + "Race": { + "type": "byte", + "value": 18 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 10 + } + }, + { + "__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": 10 + } + }, + { + "__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": 42 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 23 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_ETTIN" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_ettin" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/deck_fgiant.utc.json b/src/module/utc/deck_fgiant.utc.json new file mode 100644 index 0000000..fc9b64e --- /dev/null +++ b/src/module/utc/deck_fgiant.utc.json @@ -0,0 +1,543 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 80 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 11 + }, + "ChallengeRating": { + "type": "float", + "value": 12.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 22 + }, + "ClassLevel": { + "type": "short", + "value": 15 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 21 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 67 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12557 + } + }, + "Dex": { + "type": "byte", + "value": 9 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl004" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewgs006" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "nw_it_creitem027" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Fire Giant", + "id": 12558 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 67 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 142 + }, + "NaturalAC": { + "type": "byte", + "value": 8 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 215 + }, + "Race": { + "type": "byte", + "value": 18 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 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": 7 + } + }, + { + "__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": 43 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 31 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_GNTFIRE" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_fgiant" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/deck_frostg.utc.json b/src/module/utc/deck_frostg.utc.json new file mode 100644 index 0000000..bb93926 --- /dev/null +++ b/src/module/utc/deck_frostg.utc.json @@ -0,0 +1,550 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 81 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 11 + }, + "ChallengeRating": { + "type": "float", + "value": 10.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 22 + }, + "ClassLevel": { + "type": "short", + "value": 14 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 21 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 63 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12559 + } + }, + "Dex": { + "type": "byte", + "value": 9 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl012" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wblhw001" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "nw_it_creitem026" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Frost Giant", + "id": 12560 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 63 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 133 + }, + "NaturalAC": { + "type": "byte", + "value": 9 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 216 + }, + "Race": { + "type": "byte", + "value": 18 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 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": 6 + } + }, + { + "__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": 43 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 29 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_GNTFROST" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_frostg" + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/deck_gnoll.utc.json b/src/module/utc/deck_gnoll.utc.json new file mode 100644 index 0000000..bca35a5 --- /dev/null +++ b/src/module/utc/deck_gnoll.utc.json @@ -0,0 +1,535 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 388 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 8 + }, + "ChallengeRating": { + "type": "float", + "value": 1.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 14 + }, + "ClassLevel": { + "type": "short", + "value": 2 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 13 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 9 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 3098 + } + }, + "Dex": { + "type": "byte", + "value": 10 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl003" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_waxbt001" + } + }, + { + "__struct_id": 32, + "EquippedRes": { + "type": "resref", + "value": "nw_ashlw001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 3097 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 9 + }, + "Int": { + "type": "byte", + "value": 8 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 11 + }, + "NaturalAC": { + "type": "byte", + "value": 1 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 604 + }, + "Race": { + "type": "byte", + "value": 12 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__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": 3 + } + }, + { + "__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": 251 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 15 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_GNOLL001" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_gnoll" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 11 + } +} diff --git a/src/module/utc/deck_goblin.utc.json b/src/module/utc/deck_goblin.utc.json new file mode 100644 index 0000000..6d5ad00 --- /dev/null +++ b/src/module/utc/deck_goblin.utc.json @@ -0,0 +1,507 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 86 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 8 + }, + "ChallengeRating": { + "type": "float", + "value": 0.25 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 14 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 11 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 4 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12565 + } + }, + "Dex": { + "type": "byte", + "value": 8 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wblms001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12567 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 4 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 4 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 222 + }, + "Race": { + "type": "byte", + "value": 12 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__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": 3 + } + }, + { + "__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": 44 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 8 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_GOBLINA" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_goblin" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 11 + } +} diff --git a/src/module/utc/deck_goliron.utc.json b/src/module/utc/deck_goliron.utc.json new file mode 100644 index 0000000..ed820f3 --- /dev/null +++ b/src/module/utc/deck_goliron.utc.json @@ -0,0 +1,538 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 89 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 3 + }, + "ChallengeRating": { + "type": "float", + "value": 16.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 13 + }, + "ClassLevel": { + "type": "short", + "value": 18 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 99 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12575 + } + }, + "Dex": { + "type": "byte", + "value": 9 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpb017" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "nw_it_creitemco3" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12576 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 99 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 99 + }, + "NaturalAC": { + "type": "byte", + "value": 22 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 229 + }, + "Race": { + "type": "byte", + "value": 10 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 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 + } + }, + { + "__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": 49 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 263 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 9 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 263 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 9 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 33 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_GOLIRON" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_goliron" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 11 + } +} diff --git a/src/module/utc/deck_gypsy.utc.json b/src/module/utc/deck_gypsy.utc.json new file mode 100644 index 0000000..0dd0d66 --- /dev/null +++ b/src/module/utc/deck_gypsy.utc.json @@ -0,0 +1,814 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 260 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 16 + }, + "ChallengeRating": { + "type": "float", + "value": 10.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 8 + }, + "ClassLevel": { + "type": "short", + "value": 7 + } + }, + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 9 + }, + "ClassLevel": { + "type": "short", + "value": 8 + }, + "KnownList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 37 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 100 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 144 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "KnownList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 16 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 24 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 102 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 107 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "KnownList2": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 90 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 94 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 115 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "KnownList3": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 78 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "KnownList4": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 172 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 47 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wswmdg009" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 206 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 221 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 169 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 41 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 195 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 251 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 50 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Gypsy Mage", + "id": 12587 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 47 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 92 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 92 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 10 + } + }, + { + "__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": 10 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 10 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 10 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 10 + } + }, + { + "__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": 10 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 10 + } + }, + { + "__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": 180 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 8 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_GYPSY007" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_gypsy" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/deck_hillgiant.utc.json b/src/module/utc/deck_hillgiant.utc.json new file mode 100644 index 0000000..1ae6ef4 --- /dev/null +++ b/src/module/utc/deck_hillgiant.utc.json @@ -0,0 +1,549 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 78 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 17 + }, + "ChallengeRating": { + "type": "float", + "value": 10.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 22 + }, + "ClassLevel": { + "type": "short", + "value": 12 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 19 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 54 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12561 + } + }, + "Dex": { + "type": "byte", + "value": 8 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl008" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewcl001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 43 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12562 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 54 + }, + "Int": { + "type": "byte", + "value": 6 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 102 + }, + "NaturalAC": { + "type": "byte", + "value": 9 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 217 + }, + "Race": { + "type": "byte", + "value": 18 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 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": 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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 42 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 25 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_GNTHILL" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_hillgiant" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/deck_hobgoblin.utc.json b/src/module/utc/deck_hobgoblin.utc.json new file mode 100644 index 0000000..2c89959 --- /dev/null +++ b/src/module/utc/deck_hobgoblin.utc.json @@ -0,0 +1,542 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 390 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 14 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 13 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 4 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 3101 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl002" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wswls001" + } + }, + { + "__struct_id": 32, + "EquippedRes": { + "type": "resref", + "value": "nw_ashsw001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 3100 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 4 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 100 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 5 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 692 + }, + "Race": { + "type": "byte", + "value": 12 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__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": 3 + } + }, + { + "__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": 253 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 11 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_HOBGOBLIN001" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_hobgoblin" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/deck_humanmerc1.utc.json b/src/module/utc/deck_humanmerc1.utc.json new file mode 100644 index 0000000..da48340 --- /dev/null +++ b/src/module/utc/deck_humanmerc1.utc.json @@ -0,0 +1,1104 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 275 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 12 + }, + "ChallengeRating": { + "type": "float", + "value": 12.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 2 + }, + "ClassLevel": { + "type": "short", + "value": 15 + }, + "MemorizedList2": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 34 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 34 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 34 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 83 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 83 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 163 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList3": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 21 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 21 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 35 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 35 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 91 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 125 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 146 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList4": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 31 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 42 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 62 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 76 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 126 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList5": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 61 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 61 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 142 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 186 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList6": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 5 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 67 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 79 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 79 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList7": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 70 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 153 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 194 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList8": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 57 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 71 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 12 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wblmms011" + } + }, + { + "__struct_id": 32, + "EquippedRes": { + "type": "resref", + "value": "nw_ashmto002" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 169 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 36 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 294 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 95 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12617 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 71 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 116 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 129 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 17 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 10 + } + }, + { + "__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": 7 + } + }, + { + "__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": 123 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 2 + }, + "Str": { + "type": "byte", + "value": 13 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_HUMANMERC005" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_humanmerc1" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 18 + } +} diff --git a/src/module/utc/deck_humanmerc6.utc.json b/src/module/utc/deck_humanmerc6.utc.json new file mode 100644 index 0000000..a809052 --- /dev/null +++ b/src/module/utc/deck_humanmerc6.utc.json @@ -0,0 +1,1266 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 280 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 12 + }, + "ChallengeRating": { + "type": "float", + "value": 15.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 2 + }, + "ClassLevel": { + "type": "short", + "value": 19 + }, + "MemorizedList2": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 1 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 34 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 34 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 34 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 83 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 83 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 163 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList3": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 21 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 21 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 35 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 35 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 91 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 125 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 146 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList4": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 31 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 42 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 62 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 76 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 126 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList5": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 61 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 61 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 80 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 142 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 186 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList6": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 5 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 67 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 79 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 79 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList7": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 70 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 153 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 194 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 194 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 194 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList8": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 57 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 57 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 114 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 182 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList9": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 51 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 87 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 173 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 178 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 89 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 12 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wblmms011" + } + }, + { + "__struct_id": 32, + "EquippedRes": { + "type": "resref", + "value": "nw_ashmto008" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 173 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 169 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 36 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 294 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 95 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12617 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 89 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 146 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 129 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 20 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 12 + } + }, + { + "__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": 8 + } + }, + { + "__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": 123 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 2 + }, + "Str": { + "type": "byte", + "value": 13 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_HUMANMERC006" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_humanmerc6" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 19 + } +} diff --git a/src/module/utc/deck_kobold.utc.json b/src/module/utc/deck_kobold.utc.json new file mode 100644 index 0000000..9100b2f --- /dev/null +++ b/src/module/utc/deck_kobold.utc.json @@ -0,0 +1,557 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 302 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 14 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 11 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 2 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Kobolds are small humanoids, dangerous only in great numbers.", + "id": 2927 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl001" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "dart001" + } + }, + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpb001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Kobold", + "id": 2924 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 2 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "ssword001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 100 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 2 + }, + "NaturalAC": { + "type": "byte", + "value": 1 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 571 + }, + "Race": { + "type": "byte", + "value": 15 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__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": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__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": 246 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 6 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_KOBOLD001" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_kobold" + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/deck_lich.utc.json b/src/module/utc/deck_lich.utc.json new file mode 100644 index 0000000..ea31cd2 --- /dev/null +++ b/src/module/utc/deck_lich.utc.json @@ -0,0 +1,882 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 39 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 12 + }, + "ChallengeRating": { + "type": "float", + "value": 17.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 10 + }, + "ClassLevel": { + "type": "short", + "value": 12 + }, + "MemorizedList2": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 115 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 115 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 115 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 115 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList3": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 58 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 78 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 78 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList4": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 127 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 127 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 191 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 191 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList5": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 23 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 23 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 82 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 82 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList6": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 14 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 67 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 13 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 88 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12628 + } + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_crewplcl" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_crewplcl" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "nw_creitemlic" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 169 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 51 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12629 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 88 + }, + "Int": { + "type": "byte", + "value": 21 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 112 + }, + "NaturalAC": { + "type": "byte", + "value": 5 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 241 + }, + "Race": { + "type": "byte", + "value": 24 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 15 + } + }, + { + "__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": 8 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 15 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 15 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__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": 16 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 15 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 10 + } + }, + { + "__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": 56 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 198 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 10 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 10 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_LICH003" + }, + "Tail": { + "type": "byte", + "value": 205 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_lich" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 205 + }, + "Wis": { + "type": "byte", + "value": 14 + } +} diff --git a/src/module/utc/deck_medusa.utc.json b/src/module/utc/deck_medusa.utc.json new file mode 100644 index 0000000..bda4a79 --- /dev/null +++ b/src/module/utc/deck_medusa.utc.json @@ -0,0 +1,690 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 352 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 15 + }, + "ChallengeRating": { + "type": "float", + "value": 6.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 14 + }, + "ClassLevel": { + "type": "short", + "value": 6 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "Medusa" + }, + "Con": { + "type": "byte", + "value": 12 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 27 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 40616 + } + }, + "Dex": { + "type": "byte", + "value": 15 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wbwmsh002" + } + }, + { + "__struct_id": 2048, + "EquippedRes": { + "type": "resref", + "value": "nw_wammar004" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "x0_medusa_snakes" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 27 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 42 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 102 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 44 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 2854 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 27 + }, + "Int": { + "type": "byte", + "value": 12 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "nw_wswmdg002" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "nw_wammar004" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 100 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 33 + }, + "NaturalAC": { + "type": "byte", + "value": 3 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 608 + }, + "Race": { + "type": "byte", + "value": 13 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 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": 7 + } + }, + { + "__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": 9 + } + }, + { + "__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": 308 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 497 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 497 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 497 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 497 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 497 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 497 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 497 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "X0_MEDUSA" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_medusa" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 13 + } +} diff --git a/src/module/utc/deck_ogre.utc.json b/src/module/utc/deck_ogre.utc.json new file mode 100644 index 0000000..89dd828 --- /dev/null +++ b/src/module/utc/deck_ogre.utc.json @@ -0,0 +1,535 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 127 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 7 + }, + "ChallengeRating": { + "type": "float", + "value": 3.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 22 + }, + "ClassLevel": { + "type": "short", + "value": 4 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 18 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12663 + } + }, + "Dex": { + "type": "byte", + "value": 8 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl008" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewcl001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 43 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12664 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 18 + }, + "Int": { + "type": "byte", + "value": 6 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 26 + }, + "NaturalAC": { + "type": "byte", + "value": 5 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 262 + }, + "Race": { + "type": "byte", + "value": 18 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__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": 2 + } + }, + { + "__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": 70 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 21 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_OGRE01" + }, + "Tail": { + "type": "byte", + "value": 205 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_ogre" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 205 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/deck_ogremage.utc.json b/src/module/utc/deck_ogremage.utc.json new file mode 100644 index 0000000..2cf68fb --- /dev/null +++ b/src/module/utc/deck_ogremage.utc.json @@ -0,0 +1,686 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 129 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 17 + }, + "ChallengeRating": { + "type": "float", + "value": 5.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 22 + }, + "ClassLevel": { + "type": "short", + "value": 5 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 17 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 22 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12663 + } + }, + "Dex": { + "type": "byte", + "value": 10 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl012" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wswmgs002" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12666 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 22 + }, + "Int": { + "type": "byte", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 100 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 37 + }, + "NaturalAC": { + "type": "byte", + "value": 5 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 264 + }, + "Race": { + "type": "byte", + "value": 18 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 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": 4 + } + }, + { + "__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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 72 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 16 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 9 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 25 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 9 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 36 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 9 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 36 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 9 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 36 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 9 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 90 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 9 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 90 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 9 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 90 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 9 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 130 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 9 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 165 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 9 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 21 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_OGREMAGE01" + }, + "Tail": { + "type": "byte", + "value": 205 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_ogremage" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 205 + }, + "Wis": { + "type": "byte", + "value": 14 + } +} diff --git a/src/module/utc/deck_orc.utc.json b/src/module/utc/deck_orc.utc.json new file mode 100644 index 0000000..c1be6b9 --- /dev/null +++ b/src/module/utc/deck_orc.utc.json @@ -0,0 +1,627 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 8 + }, + "Appearance_Type": { + "type": "word", + "value": 5 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 8 + }, + "ChallengeRating": { + "type": "float", + "value": 0.5 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 4 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 15 + }, + "Color_Skin": { + "type": "byte", + "value": 33 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 11 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 10 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 10 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "rdg_orc_armor" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "gaxe001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Orc" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 10 + }, + "Int": { + "type": "byte", + "value": 9 + }, + "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": 10 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 271 + }, + "Race": { + "type": "byte", + "value": 14 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__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": 2 + } + }, + { + "__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": 73 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 4 + }, + "Str": { + "type": "byte", + "value": 15 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Orc" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_orc" + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 8 + } +} diff --git a/src/module/utc/deck_pixie.utc.json b/src/module/utc/deck_pixie.utc.json new file mode 100644 index 0000000..c474961 --- /dev/null +++ b/src/module/utc/deck_pixie.utc.json @@ -0,0 +1,605 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 55 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 16 + }, + "ChallengeRating": { + "type": "float", + "value": 2.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 17 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 11 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 3 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 53076 + } + }, + "Dex": { + "type": "byte", + "value": 18 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wswdg001" + } + }, + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp001" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "nw_it_creitem138" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 27 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 42 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 6005 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 3 + }, + "Int": { + "type": "byte", + "value": 16 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_msmlmisc19" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 3 + }, + "NaturalAC": { + "type": "byte", + "value": 1 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 559 + }, + "Race": { + "type": "byte", + "value": 17 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__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": 6 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 12 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__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": 9 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__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": 37 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 26 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 8 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 41 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 8 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 53 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 8 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 7 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_PIXIE" + }, + "Tail": { + "type": "byte", + "value": 205 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_pixie" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 205 + }, + "Wis": { + "type": "byte", + "value": 15 + } +} diff --git a/src/module/utc/deck_troll.utc.json b/src/module/utc/deck_troll.utc.json new file mode 100644 index 0000000..cbf06b1 --- /dev/null +++ b/src/module/utc/deck_troll.utc.json @@ -0,0 +1,535 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 167 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 5.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 22 + }, + "ClassLevel": { + "type": "short", + "value": 6 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 23 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 27 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12785 + } + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "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" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "nw_it_creitem042" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 22 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12786 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 27 + }, + "Int": { + "type": "byte", + "value": 6 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 63 + }, + "NaturalAC": { + "type": "byte", + "value": 7 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 306 + }, + "Race": { + "type": "byte", + "value": 18 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_ch_ac5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_ch_ac6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_ch_ac7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_ch_ac4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_ch_ac8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_ch_ac3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_ch_ac1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_ch_ace" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_ch_ac2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_ch_aca" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_ch_ac9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_ch_acb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_ch_acd" + }, + "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": 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": 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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 92 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 23 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_TROLL" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "deck_troll" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 9 + } +} diff --git a/src/module/utc/eowarar.utc.json b/src/module/utc/eowarar.utc.json new file mode 100644 index 0000000..711d735 --- /dev/null +++ b/src/module/utc/eowarar.utc.json @@ -0,0 +1,963 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 4 + }, + "Appearance_Type": { + "type": "word", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 1.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 10 + }, + "ClassLevel": { + "type": "short", + "value": 1 + }, + "MemorizedList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 37 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 100 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 144 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 102 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 174 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 8 + }, + "Color_Skin": { + "type": "byte", + "value": 0 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 4 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_cloth005" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wbwxl001" + } + }, + { + "__struct_id": 8192, + "EquippedRes": { + "type": "resref", + "value": "nw_wambo001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 944 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 236 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 235 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 240 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 354 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 945 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 237 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 238 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 239 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 303 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 256 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 51 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Eowarar" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 4 + }, + "Int": { + "type": "byte", + "value": 16 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "nw_it_torch001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr102" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr105" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr108" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 7, + "InventoryRes": { + "type": "resref", + "value": "nw_it_sparscr109" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 8, + "InventoryRes": { + "type": "resref", + "value": "nw_wswdg001" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Be'tend" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 5 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 3 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 36 + }, + "Race": { + "type": "byte", + "value": 1 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__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": 4 + } + }, + { + "__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": 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": 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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 418 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 100 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Eowarar" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "eowarar" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 100 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/eowarar001.utc.json b/src/module/utc/eowarar001.utc.json new file mode 100644 index 0000000..79dda4c --- /dev/null +++ b/src/module/utc/eowarar001.utc.json @@ -0,0 +1,810 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 8 + }, + "Appearance_Type": { + "type": "word", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 8 + }, + "ChallengeRating": { + "type": "float", + "value": 0.5 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 4 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 7 + }, + "Color_Skin": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 10 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl002" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wswss001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 236 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 235 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 354 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 244 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 245 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 246 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 106 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Belror" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 10 + }, + "Int": { + "type": "byte", + "value": 14 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "nw_it_torch001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Galle" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 12 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 3 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 38 + }, + "Race": { + "type": "byte", + "value": 4 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 229 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 23 + }, + "Str": { + "type": "byte", + "value": 16 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Belror" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "eowarar001" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 100 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 8 + } +} diff --git a/src/module/utc/lemli.utc.json b/src/module/utc/lemli.utc.json new file mode 100644 index 0000000..855cd66 --- /dev/null +++ b/src/module/utc/lemli.utc.json @@ -0,0 +1,845 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 7 + }, + "Appearance_Type": { + "type": "word", + "value": 0 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 9 + }, + "ChallengeRating": { + "type": "float", + "value": 0.5 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 4 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 3 + }, + "Color_Skin": { + "type": "byte", + "value": 3 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 16 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 10 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl002" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wswss001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 233 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 232 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 231 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 229 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 230 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 234 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4792 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4757 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4758 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 227 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 106 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Lemli" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 10 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "nw_it_torch001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Elgen" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 14 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 3 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 13 + }, + "Race": { + "type": "byte", + "value": 0 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 229 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 4 + }, + "Str": { + "type": "byte", + "value": 16 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Lemli" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "lemli" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 100 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/merchant.utc.json b/src/module/utc/merchant.utc.json new file mode 100644 index 0000000..5661a6d --- /dev/null +++ b/src/module/utc/merchant.utc.json @@ -0,0 +1,599 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 6 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.25 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 20 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 16 + }, + "Color_Skin": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "npc_town_store" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 2 + }, + "DecayTime": { + "type": "dword", + "value": 0 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 10 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_cloth022" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Basic Supplies Merchant" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 2 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 3 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 44 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 116 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 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 + } + }, + { + "__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": 129 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Merchant" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "merchant" + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/merchant004.utc.json b/src/module/utc/merchant004.utc.json new file mode 100644 index 0000000..cad5209 --- /dev/null +++ b/src/module/utc/merchant004.utc.json @@ -0,0 +1,620 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 18 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 20 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 23 + }, + "Color_Skin": { + "type": "byte", + "value": 0 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "npc_town_store" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 2 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 10 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_cloth012" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Junk Merchant" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 2 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 3 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 44 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 94 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 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 + } + }, + { + "__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": 173 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Merchant4" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "merchant004" + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/merchant005.utc.json b/src/module/utc/merchant005.utc.json new file mode 100644 index 0000000..263bfbf --- /dev/null +++ b/src/module/utc/merchant005.utc.json @@ -0,0 +1,620 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 11 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 20 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 23 + }, + "Color_Skin": { + "type": "byte", + "value": 0 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "npc_banker" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 2 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 10 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_cloth003" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Banker" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 2 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 3 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 44 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 95 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 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 + } + }, + { + "__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": 159 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Merchant5" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "merchant005" + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/merrenton.utc.json b/src/module/utc/merrenton.utc.json new file mode 100644 index 0000000..baa25f4 --- /dev/null +++ b/src/module/utc/merrenton.utc.json @@ -0,0 +1,860 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 5 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 1.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 3 + }, + "ClassLevel": { + "type": "short", + "value": 1 + }, + "MemorizedList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 416 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 151 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 189 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 32 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 53 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 1 + }, + "Color_Skin": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 13 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 8 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl001" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wspsc001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 199 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 198 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 34 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 35 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 48 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Merrenton" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 8 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "nw_it_torch001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Goodman" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 9 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 3 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 96 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 3 + } + }, + { + "__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": 2 + } + }, + { + "__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": 2 + } + }, + { + "__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": 368 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 93 + }, + "Str": { + "type": "byte", + "value": 14 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Merrenton" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "merrenton" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 100 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 16 + } +} diff --git a/src/module/utc/misca059.utc.json b/src/module/utc/misca059.utc.json new file mode 100644 index 0000000..cbc4b1d --- /dev/null +++ b/src/module/utc/misca059.utc.json @@ -0,0 +1,509 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 145 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 0.125 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "Comes from a figurine of wonderous power." + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 1 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "With their cold eyes and glossy black feathers, these airborne scavengers are often considered ill omens or harbingers of death.", + "id": 12686 + } + }, + "Dex": { + "type": "byte", + "value": 15 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp001" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "silverravenskin" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 42 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Silver Raven", + "id": 6008 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 1 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 1 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 2 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 282 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "figurine_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x0_ch_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x0_ch_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__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": 6 + } + }, + { + "__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": 77 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 3 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "misca059" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "misca059" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 14 + } +} diff --git a/src/module/utc/miscb022.utc.json b/src/module/utc/miscb022.utc.json new file mode 100644 index 0000000..bcc0d92 --- /dev/null +++ b/src/module/utc/miscb022.utc.json @@ -0,0 +1,509 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 145 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 4 + }, + "ChallengeRating": { + "type": "float", + "value": 2.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 3 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "Comes from a figurine of wonderous power." + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 12 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "With their cold eyes and glossy black feathers, these airborne scavengers are often considered ill omens or harbingers of death.", + "id": 12686 + } + }, + "Dex": { + "type": "byte", + "value": 17 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp001" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "silverravenskin" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 42 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Silver Owl", + "id": 6008 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 12 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 12 + }, + "NaturalAC": { + "type": "byte", + "value": 2 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 2 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 282 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "figurine_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x0_ch_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x0_ch_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 14 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 20 + } + }, + { + "__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": 6 + } + }, + { + "__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": 65535 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 6 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "miscb022" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb022" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 14 + } +} diff --git a/src/module/utc/miscb027.utc.json b/src/module/utc/miscb027.utc.json new file mode 100644 index 0000000..36dc1fa --- /dev/null +++ b/src/module/utc/miscb027.utc.json @@ -0,0 +1,523 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 73 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 7 + }, + "ChallengeRating": { + "type": "float", + "value": 3.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 23 + }, + "ClassLevel": { + "type": "short", + "value": 4 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 18 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 22 + }, + "DecayTime": { + "type": "dword", + "value": 0 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Gargoyles are vicious predators that enjoy torturing weaker creatures. Their ability to perch indefinitely without moving causes adventurers to frequently mistake them for statues.", + "id": 12549 + } + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp026" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp026" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps005" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "bronzegargoyle" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Bronze Gargoyle", + "id": 12550 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 4 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 22 + }, + "Int": { + "type": "byte", + "value": 6 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 38 + }, + "NaturalAC": { + "type": "byte", + "value": 4 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 2 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 210 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "figurine_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x0_ch_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x0_ch_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 9 + } + }, + { + "__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": 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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 39 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 11 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "miscb027" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb027" + }, + "WalkRate": { + "type": "int", + "value": 5 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 11 + } +} diff --git a/src/module/utc/miscb028.utc.json b/src/module/utc/miscb028.utc.json new file mode 100644 index 0000000..004bf8b --- /dev/null +++ b/src/module/utc/miscb028.utc.json @@ -0,0 +1,605 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 366 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 9 + }, + "ChallengeRating": { + "type": "float", + "value": 6.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 23 + }, + "ClassLevel": { + "type": "short", + "value": 6 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "Manticore" + }, + "Con": { + "type": "byte", + "value": 19 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 33 + }, + "DecayTime": { + "type": "dword", + "value": 0 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "A manticore is a monster in every sense of the word. It has the head of a vaguely humanoid beast, the body of a lion and the wings of a dragon. The creature's back is set with curved barbs, and its long tail ends in a cluster of vicious spikes, which it can hurl to deadly effect. ", + "id": 40615 + } + }, + "Dex": { + "type": "byte", + "value": 15 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp006" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp006" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps010" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "silverravenskin" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 82 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 44 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Ebony Manticore", + "id": 2865 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 33 + }, + "Int": { + "type": "byte", + "value": 7 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 100 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 57 + }, + "NaturalAC": { + "type": "byte", + "value": 6 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 2 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 622 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "figurine_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x0_ch_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x0_ch_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__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": 8 + } + }, + { + "__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": 320 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 498 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 498 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 498 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 498 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 20 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "miscb028" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb028" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/miscb032.utc.json b/src/module/utc/miscb032.utc.json new file mode 100644 index 0000000..afbe391 --- /dev/null +++ b/src/module/utc/miscb032.utc.json @@ -0,0 +1,509 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 142 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 2.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 3 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 13 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This large stone ox will carry just about ANYTHING.", + "id": 12677 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpb005" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpb005" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "silverravenskin" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Stone Ox", + "id": 12678 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 13 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 19 + }, + "NaturalAC": { + "type": "byte", + "value": 2 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 2 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 279 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "figurine_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x0_ch_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x0_ch_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__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": 2 + } + }, + { + "__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": 22 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 35 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "miscb032" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb032" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/miscb033.utc.json b/src/module/utc/miscb033.utc.json new file mode 100644 index 0000000..052d11b --- /dev/null +++ b/src/module/utc/miscb033.utc.json @@ -0,0 +1,509 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 142 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 2.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 3 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 13 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This large stone ox will carry just about ANYTHING.", + "id": 12677 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpb005" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpb005" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "silverravenskin" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Stone Ox", + "id": 12678 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 13 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 19 + }, + "NaturalAC": { + "type": "byte", + "value": 2 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 2 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 279 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "figurine_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x0_ch_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x0_ch_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__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": 2 + } + }, + { + "__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": 22 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 35 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "miscb032" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb033" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/miscb045.utc.json b/src/module/utc/miscb045.utc.json new file mode 100644 index 0000000..2467c14 --- /dev/null +++ b/src/module/utc/miscb045.utc.json @@ -0,0 +1,516 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 142 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 3.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 4 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 17 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 21 + }, + "DecayTime": { + "type": "dword", + "value": 0 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This large stone ox will carry just about ANYTHING.", + "id": 12677 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpb005" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpb005" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps002" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "silverravenskin" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Iron Ox", + "id": 12678 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 21 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 33 + }, + "NaturalAC": { + "type": "byte", + "value": 2 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 2 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 279 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "figurine_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x0_ch_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x0_ch_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__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": 2 + } + }, + { + "__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": 22 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 35 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "miscb045" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb045" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 13 + } +} diff --git a/src/module/utc/miscb055.utc.json b/src/module/utc/miscb055.utc.json new file mode 100644 index 0000000..f60f9a4 --- /dev/null +++ b/src/module/utc/miscb055.utc.json @@ -0,0 +1,523 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 175 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 5.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 6 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 17 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 33 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Dire Wolves are larger, more vicious versions of their common cousins. They are often found in the company of powerful rangers or druids.", + "id": 12449 + } + }, + "Dex": { + "type": "byte", + "value": 15 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps010" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "onyxdogskin" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 291 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Onyx Dog", + "id": 10526 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 33 + }, + "Int": { + "type": "byte", + "value": 8 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 51 + }, + "NaturalAC": { + "type": "byte", + "value": 3 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 2 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 184 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "figurine_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x0_ch_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x0_ch_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 5 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__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": 6 + } + }, + { + "__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": 104 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 25 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "miscb055" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb055" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/miscb066.utc.json b/src/module/utc/miscb066.utc.json new file mode 100644 index 0000000..37bce53 --- /dev/null +++ b/src/module/utc/miscb066.utc.json @@ -0,0 +1,523 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 97 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 5.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 8 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 32 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Known as the King of the Great Cats, the Lion is large, fierce, and regal. A confident hunter, it attacks swiftly and with crushing force.", + "id": 12631 + } + }, + "Dex": { + "type": "byte", + "value": 17 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "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_crewpsp015" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "onyxdogskin" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Golden Lion", + "id": 12632 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 32 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 48 + }, + "NaturalAC": { + "type": "byte", + "value": 3 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 2 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 167 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "figurine_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x0_ch_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x0_ch_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 4 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 5 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 11 + } + }, + { + "__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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 18 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 21 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "miscb066" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb066" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/miscb067.utc.json b/src/module/utc/miscb067.utc.json new file mode 100644 index 0000000..bf7b839 --- /dev/null +++ b/src/module/utc/miscb067.utc.json @@ -0,0 +1,530 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 14 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 8.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 12 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 19 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 48 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Their thick, white fur a product of their northern climate, these graceful and powerful hunters are a rarity, even in their natural habitat.", + "id": 12388 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp015" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp015" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp022" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "onyxdogskin" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Marble Bear", + "id": 12389 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 48 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 96 + }, + "NaturalAC": { + "type": "byte", + "value": 5 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 2 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 149 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "figurine_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x0_ch_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x0_ch_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__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": 7 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 27 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "miscb067" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb067" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/miscb068.utc.json b/src/module/utc/miscb068.utc.json new file mode 100644 index 0000000..9d78068 --- /dev/null +++ b/src/module/utc/miscb068.utc.json @@ -0,0 +1,523 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 97 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 5.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 8 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 32 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Known as the King of the Great Cats, the Lion is large, fierce, and regal. A confident hunter, it attacks swiftly and with crushing force.", + "id": 12631 + } + }, + "Dex": { + "type": "byte", + "value": 17 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "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_crewpsp015" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "onyxdogskin" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Golden Lion", + "id": 12632 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 32 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 48 + }, + "NaturalAC": { + "type": "byte", + "value": 3 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 2 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 167 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "figurine_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x0_ch_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x0_ch_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 4 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 5 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 11 + } + }, + { + "__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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 18 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 21 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "miscb066" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb068" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/miscb069.utc.json b/src/module/utc/miscb069.utc.json new file mode 100644 index 0000000..35bbba1 --- /dev/null +++ b/src/module/utc/miscb069.utc.json @@ -0,0 +1,523 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 97 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 5.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 8 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 15 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 32 + }, + "DecayTime": { + "type": "dword", + "value": 0 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Known as the King of the Great Cats, the Lion is large, fierce, and regal. A confident hunter, it attacks swiftly and with crushing force.", + "id": 12631 + } + }, + "Dex": { + "type": "byte", + "value": 17 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "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_crewpsp015" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "onyxdogskin" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Golden Lion", + "id": 12632 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 32 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 48 + }, + "NaturalAC": { + "type": "byte", + "value": 3 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 2 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 167 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "figurine_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x0_ch_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x0_ch_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 4 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 5 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 11 + } + }, + { + "__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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 18 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 21 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "miscb066" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb069" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/miscb075.utc.json b/src/module/utc/miscb075.utc.json new file mode 100644 index 0000000..e4aff64 --- /dev/null +++ b/src/module/utc/miscb075.utc.json @@ -0,0 +1,585 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 142 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 4.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 4 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 17 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 21 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This large ivory ox will carry just about ANYTHING.", + "id": 12677 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "ivoryoxhorn1" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "ivoryoxhorn2" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "ivoryoxskin" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Ivory Ox", + "id": 12678 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 21 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 33 + }, + "NaturalAC": { + "type": "byte", + "value": 2 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 2 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 279 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "figurine_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x0_ch_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x0_ch_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__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": 2 + } + }, + { + "__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": 22 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 198 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 198 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 198 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 198 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 198 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 35 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "miscb075" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb075" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 13 + } +} diff --git a/src/module/utc/miscb098.utc.json b/src/module/utc/miscb098.utc.json new file mode 100644 index 0000000..e77f407 --- /dev/null +++ b/src/module/utc/miscb098.utc.json @@ -0,0 +1,585 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 142 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 6 + }, + "ChallengeRating": { + "type": "float", + "value": 4.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 4 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 17 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 21 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This large obsidian ox will carry just about ANYTHING.", + "id": 12677 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "ivoryoxhorn1" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "ivoryoxhorn2" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "obsidianoxskin" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Obsidian Ox", + "id": 12678 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 21 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 33 + }, + "NaturalAC": { + "type": "byte", + "value": 2 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 2 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 279 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "figurine_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x0_ch_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x0_ch_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__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": 2 + } + }, + { + "__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": 22 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 198 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 198 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 198 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 198 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 198 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 0 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 35 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "miscb098" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb098" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 13 + } +} diff --git a/src/module/utc/miscc1039.utc.json b/src/module/utc/miscc1039.utc.json new file mode 100644 index 0000000..1095a5c --- /dev/null +++ b/src/module/utc/miscc1039.utc.json @@ -0,0 +1,711 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 8 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 8 + }, + "ChallengeRating": { + "type": "float", + "value": 1.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 0 + }, + "ClassLevel": { + "type": "short", + "value": 2 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 1 + }, + "Color_Skin": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 13 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 16 + }, + "DecayTime": { + "type": "dword", + "value": 0 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "EquippedRes": { + "type": "resref", + "value": "nw_arhe005" + } + }, + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "breast001" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "gaxe001" + } + }, + { + "__struct_id": 2048, + "EquippedRes": { + "type": "resref", + "value": "arrow001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 194 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 293 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 195 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 111 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Barbarian of Valhalla" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 16 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "lbow001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "potion002" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 20 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 45 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 99 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 5 + } + }, + { + "__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": 3 + } + }, + { + "__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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 115 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 18 + }, + "Str": { + "type": "byte", + "value": 15 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "BarbarianofValhalla" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc1039" + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/miscc2039.utc.json b/src/module/utc/miscc2039.utc.json new file mode 100644 index 0000000..b89bb3d --- /dev/null +++ b/src/module/utc/miscc2039.utc.json @@ -0,0 +1,733 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 8 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 8 + }, + "ChallengeRating": { + "type": "float", + "value": 2.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 0 + }, + "ClassLevel": { + "type": "short", + "value": 3 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 1 + }, + "Color_Skin": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 13 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 22 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "EquippedRes": { + "type": "resref", + "value": "nw_arhe005" + } + }, + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "breast001" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "gaxe001" + } + }, + { + "__struct_id": 2048, + "EquippedRes": { + "type": "resref", + "value": "arrow001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 194 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 293 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 195 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 111 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Barbarian of Valhalla" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 22 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "lbow001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "potion014" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "potion014" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 28 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 45 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 99 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 5 + } + }, + { + "__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": 3 + } + }, + { + "__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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 115 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 18 + }, + "Str": { + "type": "byte", + "value": 15 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "BarbarianofValhalla" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc2039" + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/miscc3039.utc.json b/src/module/utc/miscc3039.utc.json new file mode 100644 index 0000000..8149083 --- /dev/null +++ b/src/module/utc/miscc3039.utc.json @@ -0,0 +1,763 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 8 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 8 + }, + "ChallengeRating": { + "type": "float", + "value": 3.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 0 + }, + "ClassLevel": { + "type": "short", + "value": 4 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 1 + }, + "Color_Skin": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 13 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 22 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "EquippedRes": { + "type": "resref", + "value": "nw_arhe005" + } + }, + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "breast001" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "gaxe001" + } + }, + { + "__struct_id": 2048, + "EquippedRes": { + "type": "resref", + "value": "arrow001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 194 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 293 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 195 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 111 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Barbarian of Valhalla" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 22 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "lbow001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "potion014" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "potion011" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "potion017" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "InventoryRes": { + "type": "resref", + "value": "potion014" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 30 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 45 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 99 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 5 + } + }, + { + "__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": 3 + } + }, + { + "__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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 115 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 18 + }, + "Str": { + "type": "byte", + "value": 16 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "BarbarianofValhalla" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc3039" + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/miscc4039.utc.json b/src/module/utc/miscc4039.utc.json new file mode 100644 index 0000000..fbdf0e3 --- /dev/null +++ b/src/module/utc/miscc4039.utc.json @@ -0,0 +1,808 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 8 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 8 + }, + "ChallengeRating": { + "type": "float", + "value": 3.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 0 + }, + "ClassLevel": { + "type": "short", + "value": 5 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 1 + }, + "Color_Skin": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 13 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 33 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "EquippedRes": { + "type": "resref", + "value": "nw_arhe005" + } + }, + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "breast101" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "gaxe001" + } + }, + { + "__struct_id": 2048, + "EquippedRes": { + "type": "resref", + "value": "arrow001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 4 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 194 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 293 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 195 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 111 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Barbarian of Valhalla" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 33 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "lbow001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "potion014" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "potion011" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "potion017" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "InventoryRes": { + "type": "resref", + "value": "potion014" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "InventoryRes": { + "type": "resref", + "value": "potion014" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "InventoryRes": { + "type": "resref", + "value": "potion024" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 7, + "InventoryRes": { + "type": "resref", + "value": "potion017" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 43 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 45 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 99 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 5 + } + }, + { + "__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": 3 + } + }, + { + "__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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 115 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 18 + }, + "Str": { + "type": "byte", + "value": 16 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "BarbarianofValhalla" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc4039" + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/rdg_bat.utc.json b/src/module/utc/rdg_bat.utc.json new file mode 100644 index 0000000..8f3b46f --- /dev/null +++ b/src/module/utc/rdg_bat.utc.json @@ -0,0 +1,485 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 10 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 4 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 12 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 5 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12375 + } + }, + "Dex": { + "type": "byte", + "value": 8 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12376 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 5 + }, + "Int": { + "type": "byte", + "value": 3 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 50 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 5 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 145 + }, + "Race": { + "type": "byte", + "value": 8 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_bat9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 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": 6 + } + }, + { + "__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": 9 + } + }, + { + "__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": 6 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 3 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Bat" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_bat" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 14 + } +} diff --git a/src/module/utc/rdg_curst_ranger.utc.json b/src/module/utc/rdg_curst_ranger.utc.json new file mode 100644 index 0000000..b01b9a4 --- /dev/null +++ b/src/module/utc/rdg_curst_ranger.utc.json @@ -0,0 +1,605 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 289 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 5.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 7 + }, + "ClassLevel": { + "type": "short", + "value": 5 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 8 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 40 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 66927 + } + }, + "Dex": { + "type": "byte", + "value": 20 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wbwln001" + } + }, + { + "__struct_id": 2048, + "EquippedRes": { + "type": "resref", + "value": "nw_wamar001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 279 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 273 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 27 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 201 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 101 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12437 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 40 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "nw_wswss001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "nw_wswls001" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 35 + }, + "NaturalAC": { + "type": "byte", + "value": 3 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 29 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 310 + }, + "Race": { + "type": "byte", + "value": 24 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__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": 8 + } + }, + { + "__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": 23 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 7 + }, + "Str": { + "type": "byte", + "value": 14 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_CURST003" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_curst_ranger" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 13 + } +} diff --git a/src/module/utc/rdg_gargoyle.utc.json b/src/module/utc/rdg_gargoyle.utc.json new file mode 100644 index 0000000..a743374 --- /dev/null +++ b/src/module/utc/rdg_gargoyle.utc.json @@ -0,0 +1,546 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 73 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 7 + }, + "ChallengeRating": { + "type": "float", + "value": 3.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 23 + }, + "ClassLevel": { + "type": "short", + "value": 4 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 18 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 22 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12549 + } + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp026" + } + }, + { + "__struct_id": 32768, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpsp026" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewps005" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "nw_it_creitem030" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Gargoyle", + "id": 12550 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 4 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 22 + }, + "Int": { + "type": "byte", + "value": 6 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Dropable": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "nw_it_msmlmisc14" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 38 + }, + "NaturalAC": { + "type": "byte", + "value": 4 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 49 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 210 + }, + "Race": { + "type": "byte", + "value": 19 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 9 + } + }, + { + "__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": 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 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 39 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 11 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_GARGOYLE" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_gargoyle" + }, + "WalkRate": { + "type": "int", + "value": 5 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 11 + } +} diff --git a/src/module/utc/rdg_kobold.utc.json b/src/module/utc/rdg_kobold.utc.json new file mode 100644 index 0000000..8c119e2 --- /dev/null +++ b/src/module/utc/rdg_kobold.utc.json @@ -0,0 +1,557 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 302 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.3333 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 14 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 11 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 2 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Kobolds are small humanoids, dangerous only in great numbers.", + "id": 2927 + } + }, + "Dex": { + "type": "byte", + "value": 13 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl001" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "dart001" + } + }, + { + "__struct_id": 16384, + "EquippedRes": { + "type": "resref", + "value": "nw_it_crewpb001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Kobold", + "id": 2924 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 2 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "ssword001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 100 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 2 + }, + "NaturalAC": { + "type": "byte", + "value": 1 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 17 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 571 + }, + "Race": { + "type": "byte", + "value": 15 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__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": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__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": 246 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 6 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_KOBOLD001" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_kobold" + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/rdg_orc.utc.json b/src/module/utc/rdg_orc.utc.json new file mode 100644 index 0000000..d0ad834 --- /dev/null +++ b/src/module/utc/rdg_orc.utc.json @@ -0,0 +1,627 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 8 + }, + "Appearance_Type": { + "type": "word", + "value": 5 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 8 + }, + "ChallengeRating": { + "type": "float", + "value": 0.5 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 4 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 15 + }, + "Color_Skin": { + "type": "byte", + "value": 33 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 11 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 10 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 10 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "rdg_orc_armor" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "gaxe001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Orc" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 10 + }, + "Int": { + "type": "byte", + "value": 9 + }, + "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": 10 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 19 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 271 + }, + "Race": { + "type": "byte", + "value": 14 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__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": 2 + } + }, + { + "__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": 73 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 4 + }, + "Str": { + "type": "byte", + "value": 15 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Orc" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_orc" + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 8 + } +} diff --git a/src/module/utc/rdg_orc2.utc.json b/src/module/utc/rdg_orc2.utc.json new file mode 100644 index 0000000..080ae95 --- /dev/null +++ b/src/module/utc/rdg_orc2.utc.json @@ -0,0 +1,654 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 8 + }, + "Appearance_Type": { + "type": "word", + "value": 5 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 8 + }, + "ChallengeRating": { + "type": "float", + "value": 0.5 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 4 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 15 + }, + "Color_Skin": { + "type": "byte", + "value": 33 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 11 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 10 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 10 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "rdg_orc_armor" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "lbow001" + } + }, + { + "__struct_id": 2048, + "EquippedRes": { + "type": "resref", + "value": "arrow001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Orc" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 10 + }, + "Int": { + "type": "byte", + "value": 9 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "gaxe001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Archer" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 10 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 19 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 271 + }, + "Race": { + "type": "byte", + "value": 14 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__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": 2 + } + }, + { + "__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": 73 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 4 + }, + "Str": { + "type": "byte", + "value": 15 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Orc" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_orc2" + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 8 + } +} diff --git a/src/module/utc/rdg_vampire.utc.json b/src/module/utc/rdg_vampire.utc.json new file mode 100644 index 0000000..b15cc00 --- /dev/null +++ b/src/module/utc/rdg_vampire.utc.json @@ -0,0 +1,584 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 289 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 12 + }, + "ChallengeRating": { + "type": "float", + "value": 6.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 19 + }, + "ClassLevel": { + "type": "short", + "value": 5 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "This is the respawn vampire. He is the only vampire to be used with the coffin and vampire_shad. \r\n\r\nIf any of the other vampires are used, when the vampire_shad spawns in a new vampire it will be this one. This would look bad." + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 32 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 17 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wswbs001" + } + }, + { + "__struct_id": 65536, + "EquippedRes": { + "type": "resref", + "value": "nw_crewpvbt" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "nw_creitemvam" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 24 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 26 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 123 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 44 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 161 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 5637 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 32 + }, + "Int": { + "type": "byte", + "value": 12 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 32 + }, + "NaturalAC": { + "type": "byte", + "value": 6 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 29 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 310 + }, + "Race": { + "type": "byte", + "value": 24 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 11 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 17 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 11 + } + }, + { + "__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": 9 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 17 + } + }, + { + "__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": 96 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 45 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 5 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 22 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_VAMPIRE" + }, + "Tail": { + "type": "byte", + "value": 205 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_vampire" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 205 + }, + "Wis": { + "type": "byte", + "value": 16 + } +} diff --git a/src/module/utc/rdg_wererat.utc.json b/src/module/utc/rdg_wererat.utc.json new file mode 100644 index 0000000..38f59df --- /dev/null +++ b/src/module/utc/rdg_wererat.utc.json @@ -0,0 +1,528 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 170 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 2.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 25 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 13 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 1 + }, + "CurrentHitPoints": { + "type": "short", + "value": 4 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12807 + } + }, + "Dex": { + "type": "byte", + "value": 17 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "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_crewps002" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "nw_it_creitem018" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 42 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "id": 12808 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 2 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 4 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 5 + }, + "NaturalAC": { + "type": "byte", + "value": 3 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 12 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 315 + }, + "Race": { + "type": "byte", + "value": 23 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 7 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 6 + } + }, + { + "__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": 8 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__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": 99 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_WERERAT" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_wererat" + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 10 + } +} diff --git a/src/module/utc/salen.utc.json b/src/module/utc/salen.utc.json new file mode 100644 index 0000000..f5459bf --- /dev/null +++ b/src/module/utc/salen.utc.json @@ -0,0 +1,896 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 7 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 14 + }, + "ChallengeRating": { + "type": "float", + "value": 1.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 2 + }, + "ClassLevel": { + "type": "short", + "value": 1 + }, + "MemorizedList0": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 431 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 431 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 431 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + }, + "MemorizedList1": { + "type": "list", + "value": [ + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 6 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 32 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Spell": { + "type": "word", + "value": 432 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + }, + "SpellMetaMagic": { + "type": "byte", + "value": 0 + } + } + ] + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 14 + }, + "Color_Skin": { + "type": "byte", + "value": 2 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 8 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 8 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl002" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wblml001" + } + }, + { + "__struct_id": 32, + "EquippedRes": { + "type": "resref", + "value": "nw_ashsw001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 318 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 258 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 945 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 322 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 294 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Salen" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 50 + }, + "HitPoints": { + "type": "short", + "value": 8 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "nw_it_torch001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Steel" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 100 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 10 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 3 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 97 + }, + "Race": { + "type": "byte", + "value": 6 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 1 + } + }, + { + "__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": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 222 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 20 + }, + "Str": { + "type": "byte", + "value": 14 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Salen" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "salen" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 100 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 16 + } +} diff --git a/src/module/utc/sharoc.utc.json b/src/module/utc/sharoc.utc.json new file mode 100644 index 0000000..1273a13 --- /dev/null +++ b/src/module/utc/sharoc.utc.json @@ -0,0 +1,803 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 8 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 10 + }, + "ChallengeRating": { + "type": "float", + "value": 0.5 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 5 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 35 + }, + "Color_Skin": { + "type": "byte", + "value": 10 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 8 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_cloth016" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wspka001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4672 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 206 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 204 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4715 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 21 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 260 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4716 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4702 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 39 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 41 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 49 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Sharoc" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 1 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 8 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "nw_it_torch001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Laenir" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 100 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 10 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 3 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 89 + }, + "Race": { + "type": "byte", + "value": 223 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 2 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 361 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 47 + }, + "Str": { + "type": "byte", + "value": 14 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Sharoc" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "sharoc" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 100 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 15 + } +} diff --git a/src/module/utc/shfiend001.utc.json b/src/module/utc/shfiend001.utc.json new file mode 100644 index 0000000..658a925 --- /dev/null +++ b/src/module/utc/shfiend001.utc.json @@ -0,0 +1,587 @@ +{ + "__data_type": "UTC ", + "Appearance_Type": { + "type": "word", + "value": 147 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "Cha": { + "type": "byte", + "value": 13 + }, + "ChallengeRating": { + "type": "float", + "value": 7.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 19 + }, + "ClassLevel": { + "type": "short", + "value": 7 + } + } + ] + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 10 + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 45 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 12690 + } + }, + "Dex": { + "type": "byte", + "value": 14 + }, + "Disarmable": { + "type": "byte", + "value": 0 + }, + "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_crewps010" + } + }, + { + "__struct_id": 131072, + "EquippedRes": { + "type": "resref", + "value": "nw_it_creitemun5" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 1 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 289 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Shadow Fiend", + "id": 12691 + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 4 + }, + "GoodEvil": { + "type": "byte", + "value": 0 + }, + "HitPoints": { + "type": "short", + "value": 45 + }, + "Int": { + "type": "byte", + "value": 12 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "LastName": { + "type": "cexolocstring", + "value": {} + }, + "LawfulChaotic": { + "type": "byte", + "value": 0 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 45 + }, + "NaturalAC": { + "type": "byte", + "value": 4 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 30 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 284 + }, + "Race": { + "type": "byte", + "value": 24 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "nw_c2_default5" + }, + "ScriptDamaged": { + "type": "resref", + "value": "nw_c2_default6" + }, + "ScriptDeath": { + "type": "resref", + "value": "nw_c2_default7" + }, + "ScriptDialogue": { + "type": "resref", + "value": "nw_c2_default4" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "nw_c2_default8" + }, + "ScriptEndRound": { + "type": "resref", + "value": "nw_c2_default3" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "nw_c2_default1" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "nw_c2_defaulte" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "nw_c2_default2" + }, + "ScriptRested": { + "type": "resref", + "value": "nw_c2_defaulta" + }, + "ScriptSpawn": { + "type": "resref", + "value": "nw_c2_default9" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "nw_c2_defaultb" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "nw_c2_defaultd" + }, + "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": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 8 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 10 + } + }, + { + "__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": 10 + } + }, + { + "__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": 78 + }, + "SpecAbilityList": { + "type": "list", + "value": [ + { + "__struct_id": 4, + "Spell": { + "type": "word", + "value": 36 + }, + "SpellCasterLevel": { + "type": "byte", + "value": 14 + }, + "SpellFlags": { + "type": "byte", + "value": 1 + } + } + ] + }, + "StartingPackage": { + "type": "byte", + "value": 0 + }, + "Str": { + "type": "byte", + "value": 10 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "NW_SHFIEND" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "shfiend001" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "X2_L_IS_INCORPOREAL" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + }, + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "X2_SPECIAL_COMBAT_AI_SCRIPT" + }, + "Type": { + "type": "dword", + "value": 3 + }, + "Value": { + "type": "cexostring", + "value": "x2_ai_shadow" + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 7 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 12 + } +} diff --git a/src/module/utc/slyn.utc.json b/src/module/utc/slyn.utc.json new file mode 100644 index 0000000..1558f3e --- /dev/null +++ b/src/module/utc/slyn.utc.json @@ -0,0 +1,852 @@ +{ + "__data_type": "UTC ", + "Appearance_Head": { + "type": "byte", + "value": 7 + }, + "Appearance_Type": { + "type": "word", + "value": 6 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 1 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "BodyPart_Belt": { + "type": "byte", + "value": 0 + }, + "BodyPart_LBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_LFoot": { + "type": "byte", + "value": 1 + }, + "BodyPart_LHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_LShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_LThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Neck": { + "type": "byte", + "value": 1 + }, + "BodyPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "BodyPart_RBicep": { + "type": "byte", + "value": 1 + }, + "BodyPart_RFArm": { + "type": "byte", + "value": 1 + }, + "BodyPart_RHand": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShin": { + "type": "byte", + "value": 1 + }, + "BodyPart_RShoul": { + "type": "byte", + "value": 0 + }, + "BodyPart_RThigh": { + "type": "byte", + "value": 1 + }, + "BodyPart_Torso": { + "type": "byte", + "value": 1 + }, + "Cha": { + "type": "byte", + "value": 15 + }, + "ChallengeRating": { + "type": "float", + "value": 1.0 + }, + "ClassList": { + "type": "list", + "value": [ + { + "__struct_id": 2, + "Class": { + "type": "int", + "value": 6 + }, + "ClassLevel": { + "type": "short", + "value": 1 + } + } + ] + }, + "Color_Hair": { + "type": "byte", + "value": 9 + }, + "Color_Skin": { + "type": "byte", + "value": 0 + }, + "Color_Tattoo1": { + "type": "byte", + "value": 1 + }, + "Color_Tattoo2": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Con": { + "type": "byte", + "value": 14 + }, + "Conversation": { + "type": "resref", + "value": "mhk_hench" + }, + "CRAdjust": { + "type": "int", + "value": 0 + }, + "CurrentHitPoints": { + "type": "short", + "value": 10 + }, + "DecayTime": { + "type": "dword", + "value": 5000 + }, + "Deity": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Dex": { + "type": "byte", + "value": 9 + }, + "Disarmable": { + "type": "byte", + "value": 1 + }, + "Equip_ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "EquippedRes": { + "type": "resref", + "value": "nw_arhe001" + } + }, + { + "__struct_id": 2, + "EquippedRes": { + "type": "resref", + "value": "nw_aarcl002" + } + }, + { + "__struct_id": 16, + "EquippedRes": { + "type": "resref", + "value": "nw_wswss001" + } + } + ] + }, + "FactionID": { + "type": "word", + "value": 3 + }, + "FeatList": { + "type": "list", + "value": [ + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 217 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 219 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4715 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3144 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2884 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 299 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4650 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 4716 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 3143 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 428 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 427 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 430 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 2360 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 32 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 237 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 239 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 41 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 1, + "Feat": { + "type": "word", + "value": 46 + } + } + ] + }, + "FirstName": { + "type": "cexolocstring", + "value": { + "0": "Slyn" + } + }, + "fortbonus": { + "type": "short", + "value": 0 + }, + "Gender": { + "type": "byte", + "value": 0 + }, + "GoodEvil": { + "type": "byte", + "value": 100 + }, + "HitPoints": { + "type": "short", + "value": 10 + }, + "Int": { + "type": "byte", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "IsImmortal": { + "type": "byte", + "value": 0 + }, + "IsPC": { + "type": "byte", + "value": 0 + }, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "InventoryRes": { + "type": "resref", + "value": "nw_it_torch001" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "InventoryRes": { + "type": "resref", + "value": "nw_it_mpotion001" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + }, + "LastName": { + "type": "cexolocstring", + "value": { + "0": "Jard" + } + }, + "LawfulChaotic": { + "type": "byte", + "value": 100 + }, + "Lootable": { + "type": "byte", + "value": 0 + }, + "MaxHitPoints": { + "type": "short", + "value": 12 + }, + "NaturalAC": { + "type": "byte", + "value": 0 + }, + "NoPermDeath": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 3 + }, + "PerceptionRange": { + "type": "byte", + "value": 11 + }, + "Phenotype": { + "type": "int", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 101 + }, + "Race": { + "type": "byte", + "value": 198 + }, + "refbonus": { + "type": "short", + "value": 0 + }, + "ScriptAttacked": { + "type": "resref", + "value": "x0_ch_hen_attack" + }, + "ScriptDamaged": { + "type": "resref", + "value": "x0_ch_hen_damage" + }, + "ScriptDeath": { + "type": "resref", + "value": "x2_hen_death" + }, + "ScriptDialogue": { + "type": "resref", + "value": "x0_ch_hen_conv" + }, + "ScriptDisturbed": { + "type": "resref", + "value": "x0_ch_hen_distrb" + }, + "ScriptEndRound": { + "type": "resref", + "value": "x0_ch_hen_combat" + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "x0_ch_hen_heart" + }, + "ScriptOnBlocked": { + "type": "resref", + "value": "x0_ch_hen_block" + }, + "ScriptOnNotice": { + "type": "resref", + "value": "x0_ch_hen_percep" + }, + "ScriptRested": { + "type": "resref", + "value": "x0_ch_hen_rest" + }, + "ScriptSpawn": { + "type": "resref", + "value": "x2_hen_spawn" + }, + "ScriptSpellAt": { + "type": "resref", + "value": "x2_hen_spell" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "x0_ch_hen_usrdef" + }, + "SkillList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 1 + } + }, + { + "__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": 1 + } + }, + { + "__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": 1 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 0, + "Rank": { + "type": "byte", + "value": 0 + } + } + ] + }, + "SoundSetFile": { + "type": "word", + "value": 223 + }, + "SpecAbilityList": { + "type": "list", + "value": [] + }, + "StartingPackage": { + "type": "byte", + "value": 52 + }, + "Str": { + "type": "byte", + "value": 15 + }, + "Subrace": { + "type": "cexostring", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "Slyn" + }, + "Tail": { + "type": "byte", + "value": 0 + }, + "TemplateList": { + "type": "list", + "value": [] + }, + "TemplateResRef": { + "type": "resref", + "value": "slyn" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Cost" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 150 + } + } + ] + }, + "WalkRate": { + "type": "int", + "value": 4 + }, + "willbonus": { + "type": "short", + "value": 0 + }, + "Wings": { + "type": "byte", + "value": 0 + }, + "Wis": { + "type": "byte", + "value": 13 + } +} diff --git a/src/module/utd/rdg_door.utd.json b/src/module/utd/rdg_door.utd.json new file mode 100644 index 0000000..977b66f --- /dev/null +++ b/src/module/utd/rdg_door.utd.json @@ -0,0 +1,212 @@ +{ + "__data_type": "UTD ", + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Generic" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + } +} diff --git a/src/module/utd/rdg_door001.utd.json b/src/module/utd/rdg_door001.utd.json new file mode 100644 index 0000000..73a7081 --- /dev/null +++ b/src/module/utd/rdg_door001.utd.json @@ -0,0 +1,212 @@ +{ + "__data_type": "UTD ", + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 0 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "CaveExit" + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 80 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "GenericType": { + "type": "byte", + "value": 0 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HP": { + "type": "short", + "value": 80 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "None" + }, + "LinkedToFlags": { + "type": "byte", + "value": 2 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Door", + "id": 5349 + } + }, + "OnClick": { + "type": "resref", + "value": "rdg_transition" + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnFailToOpen": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "door_break" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "door_ude" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Door_Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_door001" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Will": { + "type": "byte", + "value": 0 + } +} diff --git a/src/module/uti/10sunrods.uti.json b/src/module/uti/10sunrods.uti.json new file mode 100644 index 0000000..4f93a14 --- /dev/null +++ b/src/module/uti/10sunrods.uti.json @@ -0,0 +1,77 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 19 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bundle of 10 Sun Rods" + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 20 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "10sunrods" + }, + "TemplateResRef": { + "type": "resref", + "value": "10sunrods" + } +} diff --git a/src/module/uti/10torches.uti.json b/src/module/uti/10torches.uti.json new file mode 100644 index 0000000..c92cacf --- /dev/null +++ b/src/module/uti/10torches.uti.json @@ -0,0 +1,79 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bundle of 10 Torches" + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 20 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "10torches" + }, + "TemplateResRef": { + "type": "resref", + "value": "10torches" + } +} diff --git a/src/module/uti/acidmat.uti.json b/src/module/uti/acidmat.uti.json new file mode 100644 index 0000000..19e89b7 --- /dev/null +++ b/src/module/uti/acidmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add -/10 acid resistance to a suit of armor or shield\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the Resist Elements spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Acid Resistant Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 81 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "acidmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "acidmat" + } +} diff --git a/src/module/uti/acidmat2.uti.json b/src/module/uti/acidmat2.uti.json new file mode 100644 index 0000000..e6dc12c --- /dev/null +++ b/src/module/uti/acidmat2.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will add 1d6 acid damage to the weapon.\n\nIf used on a ranged weapon it will allows the weapon to add 1d6 acid damage to it's ammunition. NOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +1 bonus on the item.\n\nThis material requires a 8th level spell caster, with either Melf's Acid Arrow or Mestil's Acid Sheath memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Acidic Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 81 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "acidmat2" + }, + "TemplateResRef": { + "type": "resref", + "value": "acidmat2" + } +} diff --git a/src/module/uti/antitoxin.uti.json b/src/module/uti/antitoxin.uti.json new file mode 100644 index 0000000..f79af6a --- /dev/null +++ b/src/module/uti/antitoxin.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 50 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Gives a +5 Fort Save Bonus for 1 hour vs. Poison." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Antitoxin" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Antitoxin" + }, + "TemplateResRef": { + "type": "resref", + "value": "antitoxin" + } +} diff --git a/src/module/uti/arrdefmat.uti.json b/src/module/uti/arrdefmat.uti.json new file mode 100644 index 0000000..bb55a69 --- /dev/null +++ b/src/module/uti/arrdefmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used on a shield. When equiped the shield will give it's user -/5 piercing damage resistance.\n\nAdding this ability costs as much as adding +2 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the Shield spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow Defense Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 57 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrdefmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrdefmat" + } +} diff --git a/src/module/uti/arrdefmat2.uti.json b/src/module/uti/arrdefmat2.uti.json new file mode 100644 index 0000000..a1e82df --- /dev/null +++ b/src/module/uti/arrdefmat2.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used on a shield. When equiped the shield will give it's user -/10 piercing damage resistance.\n\nAdding this ability costs as much as adding +2 enchantment to the item.\n\nThis material requires the craftsman to be a level 12 spell caster with the Shield spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow Defense 2 Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 58 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrdefmat2" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrdefmat2" + } +} diff --git a/src/module/uti/arrow001.uti.json b/src/module/uti/arrow001.uti.json new file mode 100644 index 0000000..54bf4e3 --- /dev/null +++ b/src/module/uti/arrow001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 27 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 99 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow001" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow001" + } +} diff --git a/src/module/uti/arrow101.uti.json b/src/module/uti/arrow101.uti.json new file mode 100644 index 0000000..ab1adbd --- /dev/null +++ b/src/module/uti/arrow101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 182 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow +1", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 27 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow101" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow101" + } +} diff --git a/src/module/uti/arrow201.uti.json b/src/module/uti/arrow201.uti.json new file mode 100644 index 0000000..a0328b9 --- /dev/null +++ b/src/module/uti/arrow201.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 160 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 542 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow +2", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 27 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow201" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow201" + } +} diff --git a/src/module/uti/arrow301.uti.json b/src/module/uti/arrow301.uti.json new file mode 100644 index 0000000..eaaef29 --- /dev/null +++ b/src/module/uti/arrow301.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 337 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1868 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow +3", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 27 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow301" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow301" + } +} diff --git a/src/module/uti/arrow401.uti.json b/src/module/uti/arrow401.uti.json new file mode 100644 index 0000000..1f8ea8e --- /dev/null +++ b/src/module/uti/arrow401.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 579 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4024 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow +4", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 27 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow401" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow401" + } +} diff --git a/src/module/uti/arrow501.uti.json b/src/module/uti/arrow501.uti.json new file mode 100644 index 0000000..d9fb57c --- /dev/null +++ b/src/module/uti/arrow501.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 885 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 7010 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow +5", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 27 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow501" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow501" + } +} diff --git a/src/module/uti/arrow601.uti.json b/src/module/uti/arrow601.uti.json new file mode 100644 index 0000000..92c82bd --- /dev/null +++ b/src/module/uti/arrow601.uti.json @@ -0,0 +1,149 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 126 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 132 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "+ 1 Sleep Arrow", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 27 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 26 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 82 + }, + "Subtype": { + "type": "word", + "value": 58 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow601" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow601" + } +} diff --git a/src/module/uti/arrow602.uti.json b/src/module/uti/arrow602.uti.json new file mode 100644 index 0000000..59334f5 --- /dev/null +++ b/src/module/uti/arrow602.uti.json @@ -0,0 +1,153 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1638 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2282 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This arrow is useful for shutting up spell casters." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow +1 of Dragon Slaying", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 34 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 27 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 24 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 5 + }, + "Param1Value": { + "type": "byte", + "value": 11 + }, + "PropertyName": { + "type": "word", + "value": 48 + }, + "Subtype": { + "type": "word", + "value": 21 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow602" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow602" + } +} diff --git a/src/module/uti/arrow603.uti.json b/src/module/uti/arrow603.uti.json new file mode 100644 index 0000000..3b3fb52 --- /dev/null +++ b/src/module/uti/arrow603.uti.json @@ -0,0 +1,153 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2842 + }, + "BaseItem": { + "type": "int", + "value": 20 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4057 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This arrow is useful for shutting up spell casters." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Arrow +1 of Greater Dragon Slaying", + "id": 1517 + } + }, + "ModelPart1": { + "type": "byte", + "value": 34 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 27 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 24 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 5 + }, + "Param1Value": { + "type": "byte", + "value": 11 + }, + "PropertyName": { + "type": "word", + "value": 48 + }, + "Subtype": { + "type": "word", + "value": 21 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "arrow603" + }, + "TemplateResRef": { + "type": "resref", + "value": "arrow603" + } +} diff --git a/src/module/uti/banded001.uti.json b/src/module/uti/banded001.uti.json new file mode 100644 index 0000000..128a75d --- /dev/null +++ b/src/module/uti/banded001.uti.json @@ -0,0 +1,174 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 19 + }, + "Cloth2Color": { + "type": "byte", + "value": 16 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Banded Mail", + "id": 12843 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "banded001" + }, + "TemplateResRef": { + "type": "resref", + "value": "banded001" + } +} diff --git a/src/module/uti/banded101.uti.json b/src/module/uti/banded101.uti.json new file mode 100644 index 0000000..54a83d5 --- /dev/null +++ b/src/module/uti/banded101.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 544 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Banded Mail + 1", + "id": 12843 + } + }, + "Metal1Color": { + "type": "byte", + "value": 10 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "banded101" + }, + "TemplateResRef": { + "type": "resref", + "value": "banded101" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + } +} diff --git a/src/module/uti/banded201.uti.json b/src/module/uti/banded201.uti.json new file mode 100644 index 0000000..2d1b722 --- /dev/null +++ b/src/module/uti/banded201.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1276 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Banded Mail + 2", + "id": 12843 + } + }, + "Metal1Color": { + "type": "byte", + "value": 2 + }, + "Metal2Color": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "banded201" + }, + "TemplateResRef": { + "type": "resref", + "value": "banded201" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 2 + } + } + ] + } +} diff --git a/src/module/uti/banded301.uti.json b/src/module/uti/banded301.uti.json new file mode 100644 index 0000000..d11064e --- /dev/null +++ b/src/module/uti/banded301.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1388 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Banded Mail + 3", + "id": 12843 + } + }, + "Metal1Color": { + "type": "byte", + "value": 2 + }, + "Metal2Color": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "banded301" + }, + "TemplateResRef": { + "type": "resref", + "value": "banded301" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 3 + } + } + ] + } +} diff --git a/src/module/uti/banded401.uti.json b/src/module/uti/banded401.uti.json new file mode 100644 index 0000000..2f55326 --- /dev/null +++ b/src/module/uti/banded401.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3880 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Banded Mail + 4", + "id": 12843 + } + }, + "Metal1Color": { + "type": "byte", + "value": 11 + }, + "Metal2Color": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "banded401" + }, + "TemplateResRef": { + "type": "resref", + "value": "banded401" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4 + } + } + ] + } +} diff --git a/src/module/uti/banded501.uti.json b/src/module/uti/banded501.uti.json new file mode 100644 index 0000000..bf04fcb --- /dev/null +++ b/src/module/uti/banded501.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5752 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Banded Mail + 5", + "id": 12843 + } + }, + "Metal1Color": { + "type": "byte", + "value": 8 + }, + "Metal2Color": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "banded501" + }, + "TemplateResRef": { + "type": "resref", + "value": "banded501" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 5 + } + } + ] + } +} diff --git a/src/module/uti/banded601.uti.json b/src/module/uti/banded601.uti.json new file mode 100644 index 0000000..9c44308 --- /dev/null +++ b/src/module/uti/banded601.uti.json @@ -0,0 +1,259 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 10988 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18900 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Banded Mail of Luck", + "id": 12843 + } + }, + "Metal1Color": { + "type": "byte", + "value": 2 + }, + "Metal2Color": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 346 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "banded601" + }, + "TemplateResRef": { + "type": "resref", + "value": "banded601" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4 + } + } + ] + } +} diff --git a/src/module/uti/banemat.uti.json b/src/module/uti/banemat.uti.json new file mode 100644 index 0000000..3987104 --- /dev/null +++ b/src/module/uti/banemat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will give +2 to hit and +2d6 magical damage to a random type of creature.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 8th level spell caster, with Summon Creature I memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bane Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "banemat" + }, + "TemplateResRef": { + "type": "resref", + "value": "banemat" + } +} diff --git a/src/module/uti/bashmat.uti.json b/src/module/uti/bashmat.uti.json new file mode 100644 index 0000000..488b32e --- /dev/null +++ b/src/module/uti/bashmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used on a shield to give it's user the knock down feat.\n\nAdding this ability costs as much as adding +1 enchantment to the item.\n\nThis material requires the craftsman to be a level 8 spell caster with the Bull Strength spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bashing Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 87 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bashmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "bashmat" + } +} diff --git a/src/module/uti/baxe001.uti.json b/src/module/uti/baxe001.uti.json new file mode 100644 index 0000000..c3bc1c1 --- /dev/null +++ b/src/module/uti/baxe001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 2 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Battleaxe", + "id": 169 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "baxe001" + }, + "TemplateResRef": { + "type": "resref", + "value": "baxe001" + } +} diff --git a/src/module/uti/baxe101.uti.json b/src/module/uti/baxe101.uti.json new file mode 100644 index 0000000..610e5c5 --- /dev/null +++ b/src/module/uti/baxe101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 672 + }, + "BaseItem": { + "type": "int", + "value": 2 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Battleaxe +1", + "id": 169 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "baxe101" + }, + "TemplateResRef": { + "type": "resref", + "value": "baxe101" + } +} diff --git a/src/module/uti/baxe201.uti.json b/src/module/uti/baxe201.uti.json new file mode 100644 index 0000000..25fb6b7 --- /dev/null +++ b/src/module/uti/baxe201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1072 + }, + "BaseItem": { + "type": "int", + "value": 2 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Battleaxe +2", + "id": 169 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "baxe201" + }, + "TemplateResRef": { + "type": "resref", + "value": "baxe201" + } +} diff --git a/src/module/uti/baxe301.uti.json b/src/module/uti/baxe301.uti.json new file mode 100644 index 0000000..16ab7dd --- /dev/null +++ b/src/module/uti/baxe301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1470 + }, + "BaseItem": { + "type": "int", + "value": 2 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Battleaxe +3", + "id": 169 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "baxe301" + }, + "TemplateResRef": { + "type": "resref", + "value": "baxe301" + } +} diff --git a/src/module/uti/baxe401.uti.json b/src/module/uti/baxe401.uti.json new file mode 100644 index 0000000..51efaff --- /dev/null +++ b/src/module/uti/baxe401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1870 + }, + "BaseItem": { + "type": "int", + "value": 2 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Battleaxe +4", + "id": 169 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "PaletteID": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "baxe401" + }, + "TemplateResRef": { + "type": "resref", + "value": "baxe401" + } +} diff --git a/src/module/uti/baxe501.uti.json b/src/module/uti/baxe501.uti.json new file mode 100644 index 0000000..fd23444 --- /dev/null +++ b/src/module/uti/baxe501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2270 + }, + "BaseItem": { + "type": "int", + "value": 2 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Battleaxe +5", + "id": 169 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "PaletteID": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "baxe501" + }, + "TemplateResRef": { + "type": "resref", + "value": "baxe501" + } +} diff --git a/src/module/uti/baxe601.uti.json b/src/module/uti/baxe601.uti.json new file mode 100644 index 0000000..f6ae3af --- /dev/null +++ b/src/module/uti/baxe601.uti.json @@ -0,0 +1,180 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2260 + }, + "BaseItem": { + "type": "int", + "value": 2 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Adamantine Battleaxe", + "id": 169 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 31 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "baxe601" + }, + "TemplateResRef": { + "type": "resref", + "value": "baxe601" + } +} diff --git a/src/module/uti/blankscroll.uti.json b/src/module/uti/blankscroll.uti.json new file mode 100644 index 0000000..d29cb82 --- /dev/null +++ b/src/module/uti/blankscroll.uti.json @@ -0,0 +1,77 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 102 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Blank Scroll" + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 64 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "BlankScroll" + }, + "TemplateResRef": { + "type": "resref", + "value": "blankscroll" + } +} diff --git a/src/module/uti/blindmat.uti.json b/src/module/uti/blindmat.uti.json new file mode 100644 index 0000000..ac04305 --- /dev/null +++ b/src/module/uti/blindmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this material is used on a shield. If the shield is hit in combat it will cast blindness/deafness DC14 on the attacker.\n\nAdding this ability costs as much as adding +1 enchantment to the item.\n\nThis material requires the craftsman to be a level 7 spell caster with either the Blindness/Deafness or Searing Light spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Blinding Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "blindmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "blindmat" + } +} diff --git a/src/module/uti/bolt001.uti.json b/src/module/uti/bolt001.uti.json new file mode 100644 index 0000000..7df2405 --- /dev/null +++ b/src/module/uti/bolt001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bolt", + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 28 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 99 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bolt001" + }, + "TemplateResRef": { + "type": "resref", + "value": "bolt001" + } +} diff --git a/src/module/uti/bolt101.uti.json b/src/module/uti/bolt101.uti.json new file mode 100644 index 0000000..60973de --- /dev/null +++ b/src/module/uti/bolt101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 182 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bolt +1", + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 28 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bolt101" + }, + "TemplateResRef": { + "type": "resref", + "value": "bolt101" + } +} diff --git a/src/module/uti/bolt201.uti.json b/src/module/uti/bolt201.uti.json new file mode 100644 index 0000000..d6b212d --- /dev/null +++ b/src/module/uti/bolt201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 160 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 542 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bolt +2", + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 28 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bolt201" + }, + "TemplateResRef": { + "type": "resref", + "value": "bolt201" + } +} diff --git a/src/module/uti/bolt301.uti.json b/src/module/uti/bolt301.uti.json new file mode 100644 index 0000000..5e46463 --- /dev/null +++ b/src/module/uti/bolt301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 337 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1868 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bolt +3", + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 28 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bolt301" + }, + "TemplateResRef": { + "type": "resref", + "value": "bolt301" + } +} diff --git a/src/module/uti/bolt401.uti.json b/src/module/uti/bolt401.uti.json new file mode 100644 index 0000000..407b368 --- /dev/null +++ b/src/module/uti/bolt401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 579 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4024 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bolt +4", + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 28 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bolt401" + }, + "TemplateResRef": { + "type": "resref", + "value": "bolt401" + } +} diff --git a/src/module/uti/bolt501.uti.json b/src/module/uti/bolt501.uti.json new file mode 100644 index 0000000..6c4a1d7 --- /dev/null +++ b/src/module/uti/bolt501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 885 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 7010 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bolt +5", + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 28 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bolt501" + }, + "TemplateResRef": { + "type": "resref", + "value": "bolt501" + } +} diff --git a/src/module/uti/bolt601.uti.json b/src/module/uti/bolt601.uti.json new file mode 100644 index 0000000..3e4c425 --- /dev/null +++ b/src/module/uti/bolt601.uti.json @@ -0,0 +1,149 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 214 + }, + "BaseItem": { + "type": "int", + "value": 25 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 257 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "+ 2 Screaming Bolt", + "id": 1519 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 28 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 26 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 82 + }, + "Subtype": { + "type": "word", + "value": 54 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bolt601" + }, + "TemplateResRef": { + "type": "resref", + "value": "bolt601" + } +} diff --git a/src/module/uti/breast001.uti.json b/src/module/uti/breast001.uti.json new file mode 100644 index 0000000..b4c7b58 --- /dev/null +++ b/src/module/uti/breast001.uti.json @@ -0,0 +1,174 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 3 + }, + "Cloth2Color": { + "type": "byte", + "value": 4 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Breastplate", + "id": 12842 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "breast001" + }, + "TemplateResRef": { + "type": "resref", + "value": "breast001" + } +} diff --git a/src/module/uti/breast101.uti.json b/src/module/uti/breast101.uti.json new file mode 100644 index 0000000..ed7f5a4 --- /dev/null +++ b/src/module/uti/breast101.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 544 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 3 + }, + "Cloth2Color": { + "type": "byte", + "value": 4 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Breastplate +1", + "id": 12842 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 53 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "breast101" + }, + "TemplateResRef": { + "type": "resref", + "value": "breast101" + } +} diff --git a/src/module/uti/breast201.uti.json b/src/module/uti/breast201.uti.json new file mode 100644 index 0000000..de2ef1a --- /dev/null +++ b/src/module/uti/breast201.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1276 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 3 + }, + "Cloth2Color": { + "type": "byte", + "value": 4 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Breastplate +2", + "id": 12842 + } + }, + "Metal1Color": { + "type": "byte", + "value": 14 + }, + "Metal2Color": { + "type": "byte", + "value": 53 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "breast201" + }, + "TemplateResRef": { + "type": "resref", + "value": "breast201" + } +} diff --git a/src/module/uti/breast301.uti.json b/src/module/uti/breast301.uti.json new file mode 100644 index 0000000..a5a5a69 --- /dev/null +++ b/src/module/uti/breast301.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2188 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 3 + }, + "Cloth2Color": { + "type": "byte", + "value": 4 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Breastplate +3", + "id": 12842 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "breast301" + }, + "TemplateResRef": { + "type": "resref", + "value": "breast301" + } +} diff --git a/src/module/uti/breast401.uti.json b/src/module/uti/breast401.uti.json new file mode 100644 index 0000000..ca9e40f --- /dev/null +++ b/src/module/uti/breast401.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3880 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 3 + }, + "Cloth2Color": { + "type": "byte", + "value": 4 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Breastplate +4", + "id": 12842 + } + }, + "Metal1Color": { + "type": "byte", + "value": 13 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "breast401" + }, + "TemplateResRef": { + "type": "resref", + "value": "breast401" + } +} diff --git a/src/module/uti/breast501.uti.json b/src/module/uti/breast501.uti.json new file mode 100644 index 0000000..f9a21d1 --- /dev/null +++ b/src/module/uti/breast501.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5752 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 3 + }, + "Cloth2Color": { + "type": "byte", + "value": 4 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Breastplate +5", + "id": 12842 + } + }, + "Metal1Color": { + "type": "byte", + "value": 13 + }, + "Metal2Color": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "breast501" + }, + "TemplateResRef": { + "type": "resref", + "value": "breast501" + } +} diff --git a/src/module/uti/breast601.uti.json b/src/module/uti/breast601.uti.json new file mode 100644 index 0000000..c4bb0bd --- /dev/null +++ b/src/module/uti/breast601.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2276 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 15 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 5350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 14 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Adamantine Breastplate", + "id": 12842 + } + }, + "Metal1Color": { + "type": "byte", + "value": 49 + }, + "Metal2Color": { + "type": "byte", + "value": 48 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "breast601" + }, + "TemplateResRef": { + "type": "resref", + "value": "breast601" + } +} diff --git a/src/module/uti/breast602.uti.json b/src/module/uti/breast602.uti.json new file mode 100644 index 0000000..3dc9895 --- /dev/null +++ b/src/module/uti/breast602.uti.json @@ -0,0 +1,210 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 18526 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 14 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 11 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 14 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 24 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 46 + }, + "Cloth2Color": { + "type": "byte", + "value": 47 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 21600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This distinctive breastplate gives +4 to charisma." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 5 + }, + "Leather2Color": { + "type": "byte", + "value": 4 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Breastplate of Command", + "id": 12842 + } + }, + "Metal1Color": { + "type": "byte", + "value": 11 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "breast602" + }, + "TemplateResRef": { + "type": "resref", + "value": "breast602" + } +} diff --git a/src/module/uti/brillmat.uti.json b/src/module/uti/brillmat.uti.json new file mode 100644 index 0000000..ed82ae1 --- /dev/null +++ b/src/module/uti/brillmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material adds 1d6 magical damage to any weapon. This type of damage is unresistable.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +4 bonus on the item.\n\nThis material requires a 16th level spell caster with the Continual Flame spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Brillant Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 44 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "brillmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "brillmat" + } +} diff --git a/src/module/uti/bronzegargoyle.uti.json b/src/module/uti/bronzegargoyle.uti.json new file mode 100644 index 0000000..87764b3 --- /dev/null +++ b/src/module/uti/bronzegargoyle.uti.json @@ -0,0 +1,203 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 83265 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bronze Gargoyle Skin", + "id": 13078 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 14 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 6 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 22 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bronzegargoyle" + }, + "TemplateResRef": { + "type": "resref", + "value": "bronzegargoyle" + } +} diff --git a/src/module/uti/bsword001.uti.json b/src/module/uti/bsword001.uti.json new file mode 100644 index 0000000..55c04c9 --- /dev/null +++ b/src/module/uti/bsword001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 3 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 70 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bastard Sword", + "id": 168 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bsword001" + }, + "TemplateResRef": { + "type": "resref", + "value": "bsword001" + } +} diff --git a/src/module/uti/bsword101.uti.json b/src/module/uti/bsword101.uti.json new file mode 100644 index 0000000..41a7d72 --- /dev/null +++ b/src/module/uti/bsword101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 647 + }, + "BaseItem": { + "type": "int", + "value": 3 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bastard Sword +1", + "id": 168 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bsword101" + }, + "TemplateResRef": { + "type": "resref", + "value": "bsword101" + } +} diff --git a/src/module/uti/bsword201.uti.json b/src/module/uti/bsword201.uti.json new file mode 100644 index 0000000..bc4aa91 --- /dev/null +++ b/src/module/uti/bsword201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1047 + }, + "BaseItem": { + "type": "int", + "value": 3 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bastard Sword +2", + "id": 168 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bsword201" + }, + "TemplateResRef": { + "type": "resref", + "value": "bsword201" + } +} diff --git a/src/module/uti/bsword301.uti.json b/src/module/uti/bsword301.uti.json new file mode 100644 index 0000000..17c92ca --- /dev/null +++ b/src/module/uti/bsword301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1445 + }, + "BaseItem": { + "type": "int", + "value": 3 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bastard Sword +3", + "id": 168 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bsword301" + }, + "TemplateResRef": { + "type": "resref", + "value": "bsword301" + } +} diff --git a/src/module/uti/bsword401.uti.json b/src/module/uti/bsword401.uti.json new file mode 100644 index 0000000..ac0ba5d --- /dev/null +++ b/src/module/uti/bsword401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1845 + }, + "BaseItem": { + "type": "int", + "value": 3 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bastard Sword +4", + "id": 168 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "PaletteID": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bsword401" + }, + "TemplateResRef": { + "type": "resref", + "value": "bsword401" + } +} diff --git a/src/module/uti/bsword501.uti.json b/src/module/uti/bsword501.uti.json new file mode 100644 index 0000000..9833313 --- /dev/null +++ b/src/module/uti/bsword501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2245 + }, + "BaseItem": { + "type": "int", + "value": 3 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bastard Sword +5", + "id": 168 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "PaletteID": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bsword501" + }, + "TemplateResRef": { + "type": "resref", + "value": "bsword501" + } +} diff --git a/src/module/uti/bsword601.uti.json b/src/module/uti/bsword601.uti.json new file mode 100644 index 0000000..7567c34 --- /dev/null +++ b/src/module/uti/bsword601.uti.json @@ -0,0 +1,215 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 215 + }, + "BaseItem": { + "type": "int", + "value": 3 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sun Blade", + "id": 168 + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 62 + }, + "PaletteID": { + "type": "byte", + "value": 33 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 0 + }, + "Param1Value": { + "type": "byte", + "value": 12 + }, + "PropertyName": { + "type": "word", + "value": 18 + }, + "Subtype": { + "type": "word", + "value": 24 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 7 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 6 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bsword601" + }, + "TemplateResRef": { + "type": "resref", + "value": "bsword601" + } +} diff --git a/src/module/uti/bullet001.uti.json b/src/module/uti/bullet001.uti.json new file mode 100644 index 0000000..1b515f4 --- /dev/null +++ b/src/module/uti/bullet001.uti.json @@ -0,0 +1,78 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 27 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bullet", + "id": 1521 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 99 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bullet001" + }, + "TemplateResRef": { + "type": "resref", + "value": "bullet001" + } +} diff --git a/src/module/uti/bullet101.uti.json b/src/module/uti/bullet101.uti.json new file mode 100644 index 0000000..c34c471 --- /dev/null +++ b/src/module/uti/bullet101.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 45 + }, + "BaseItem": { + "type": "int", + "value": 27 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 182 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bullet +1", + "id": 1521 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bullet101" + }, + "TemplateResRef": { + "type": "resref", + "value": "bullet101" + } +} diff --git a/src/module/uti/bullet201.uti.json b/src/module/uti/bullet201.uti.json new file mode 100644 index 0000000..052cfe6 --- /dev/null +++ b/src/module/uti/bullet201.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 160 + }, + "BaseItem": { + "type": "int", + "value": 27 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 542 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bullet +2", + "id": 1521 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bullet201" + }, + "TemplateResRef": { + "type": "resref", + "value": "bullet201" + } +} diff --git a/src/module/uti/bullet301.uti.json b/src/module/uti/bullet301.uti.json new file mode 100644 index 0000000..8011cec --- /dev/null +++ b/src/module/uti/bullet301.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 337 + }, + "BaseItem": { + "type": "int", + "value": 27 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1868 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bullet +3", + "id": 1521 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bullet301" + }, + "TemplateResRef": { + "type": "resref", + "value": "bullet301" + } +} diff --git a/src/module/uti/bullet401.uti.json b/src/module/uti/bullet401.uti.json new file mode 100644 index 0000000..480c822 --- /dev/null +++ b/src/module/uti/bullet401.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 579 + }, + "BaseItem": { + "type": "int", + "value": 27 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4024 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bullet +4", + "id": 1521 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bullet401" + }, + "TemplateResRef": { + "type": "resref", + "value": "bullet401" + } +} diff --git a/src/module/uti/bullet501.uti.json b/src/module/uti/bullet501.uti.json new file mode 100644 index 0000000..0f42db5 --- /dev/null +++ b/src/module/uti/bullet501.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 885 + }, + "BaseItem": { + "type": "int", + "value": 27 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 7010 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bullet +5", + "id": 1521 + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "PaletteID": { + "type": "byte", + "value": 29 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "bullet501" + }, + "TemplateResRef": { + "type": "resref", + "value": "bullet501" + } +} diff --git a/src/module/uti/chain001.uti.json b/src/module/uti/chain001.uti.json new file mode 100644 index 0000000..94aea9d --- /dev/null +++ b/src/module/uti/chain001.uti.json @@ -0,0 +1,174 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 10 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 10 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chainmail", + "id": 184 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chain001" + }, + "TemplateResRef": { + "type": "resref", + "value": "chain001" + } +} diff --git a/src/module/uti/chain101.uti.json b/src/module/uti/chain101.uti.json new file mode 100644 index 0000000..c3f1679 --- /dev/null +++ b/src/module/uti/chain101.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 494 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 10 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 10 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chainmail +1", + "id": 184 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chain101" + }, + "TemplateResRef": { + "type": "resref", + "value": "chain101" + } +} diff --git a/src/module/uti/chain201.uti.json b/src/module/uti/chain201.uti.json new file mode 100644 index 0000000..9baaf88 --- /dev/null +++ b/src/module/uti/chain201.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 52 + }, + "Cloth2Color": { + "type": "byte", + "value": 36 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 5 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chainmail +2", + "id": 184 + } + }, + "Metal1Color": { + "type": "byte", + "value": 2 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chain201" + }, + "TemplateResRef": { + "type": "resref", + "value": "chain201" + } +} diff --git a/src/module/uti/chain301.uti.json b/src/module/uti/chain301.uti.json new file mode 100644 index 0000000..8891970 --- /dev/null +++ b/src/module/uti/chain301.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2338 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 5 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chainmail +3", + "id": 184 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chain301" + }, + "TemplateResRef": { + "type": "resref", + "value": "chain301" + } +} diff --git a/src/module/uti/chain401.uti.json b/src/module/uti/chain401.uti.json new file mode 100644 index 0000000..fd5a066 --- /dev/null +++ b/src/module/uti/chain401.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3830 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 5 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chainmail +4", + "id": 184 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chain401" + }, + "TemplateResRef": { + "type": "resref", + "value": "chain401" + } +} diff --git a/src/module/uti/chain501.uti.json b/src/module/uti/chain501.uti.json new file mode 100644 index 0000000..bbb882e --- /dev/null +++ b/src/module/uti/chain501.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5702 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 5 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chainmail +5", + "id": 184 + } + }, + "Metal1Color": { + "type": "byte", + "value": 15 + }, + "Metal2Color": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chain501" + }, + "TemplateResRef": { + "type": "resref", + "value": "chain501" + } +} diff --git a/src/module/uti/chain601.uti.json b/src/module/uti/chain601.uti.json new file mode 100644 index 0000000..aa40271 --- /dev/null +++ b/src/module/uti/chain601.uti.json @@ -0,0 +1,210 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3910 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 32 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 19 + }, + "Cloth2Color": { + "type": "byte", + "value": 31 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This armor only has a armor check penalty of -2.\n\nArcane spell failure is reduced to 20%.\n\nThis armor must be unequiped to sell." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Elven Chainmail", + "id": 184 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chain601" + }, + "TemplateResRef": { + "type": "resref", + "value": "chain601" + } +} diff --git a/src/module/uti/chains001.uti.json b/src/module/uti/chains001.uti.json new file mode 100644 index 0000000..d7364ad --- /dev/null +++ b/src/module/uti/chains001.uti.json @@ -0,0 +1,174 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chain Shirt", + "id": 12844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 51 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chains001" + }, + "TemplateResRef": { + "type": "resref", + "value": "chains001" + } +} diff --git a/src/module/uti/chains101.uti.json b/src/module/uti/chains101.uti.json new file mode 100644 index 0000000..8019160 --- /dev/null +++ b/src/module/uti/chains101.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 494 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chain Shirt +1", + "id": 12844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chains101" + }, + "TemplateResRef": { + "type": "resref", + "value": "chains101" + } +} diff --git a/src/module/uti/chains201.uti.json b/src/module/uti/chains201.uti.json new file mode 100644 index 0000000..85dd4d5 --- /dev/null +++ b/src/module/uti/chains201.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chain Shirt +2", + "id": 12844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 20 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chains201" + }, + "TemplateResRef": { + "type": "resref", + "value": "chains201" + } +} diff --git a/src/module/uti/chains301.uti.json b/src/module/uti/chains301.uti.json new file mode 100644 index 0000000..9691fbc --- /dev/null +++ b/src/module/uti/chains301.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2338 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chain Shirt +3", + "id": 12844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 10 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chains301" + }, + "TemplateResRef": { + "type": "resref", + "value": "chains301" + } +} diff --git a/src/module/uti/chains401.uti.json b/src/module/uti/chains401.uti.json new file mode 100644 index 0000000..f54e1be --- /dev/null +++ b/src/module/uti/chains401.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3830 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chain Shirt +4", + "id": 12844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 10 + }, + "Metal2Color": { + "type": "byte", + "value": 14 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chains401" + }, + "TemplateResRef": { + "type": "resref", + "value": "chains401" + } +} diff --git a/src/module/uti/chains501.uti.json b/src/module/uti/chains501.uti.json new file mode 100644 index 0000000..8d5904a --- /dev/null +++ b/src/module/uti/chains501.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5702 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chain Shirt +5", + "id": 12844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chains501" + }, + "TemplateResRef": { + "type": "resref", + "value": "chains501" + } +} diff --git a/src/module/uti/chains601.uti.json b/src/module/uti/chains601.uti.json new file mode 100644 index 0000000..60f5cd9 --- /dev/null +++ b/src/module/uti/chains601.uti.json @@ -0,0 +1,210 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 910 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 36 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 15 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This armor has no armor check penalty.\n\nArcane spell failure is reduced to 10%.\n\nThis armor must be unequiped to sell." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mithral Shirt", + "id": 12844 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chains601" + }, + "TemplateResRef": { + "type": "resref", + "value": "chains601" + } +} diff --git a/src/module/uti/chaoticmat.uti.json b/src/module/uti/chaoticmat.uti.json new file mode 100644 index 0000000..fca805e --- /dev/null +++ b/src/module/uti/chaoticmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material can only be added to a weapon by a chaotic aligned character.\n\nIt provides +2d6 divine damage to any lawful creature.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 7th level spell caster with the Cloak of Chaos spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chaotic Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "chaoticmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "chaoticmat" + } +} diff --git a/src/module/uti/cleavemat.uti.json b/src/module/uti/cleavemat.uti.json new file mode 100644 index 0000000..e13397a --- /dev/null +++ b/src/module/uti/cleavemat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will grant the user of the weapon the cleave feat.\n\nThis material requires a 8th level spell caster, with Divine Power memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cleaving Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 91 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "cleavemat" + }, + "TemplateResRef": { + "type": "resref", + "value": "cleavemat" + } +} diff --git a/src/module/uti/club001.uti.json b/src/module/uti/club001.uti.json new file mode 100644 index 0000000..a398d96 --- /dev/null +++ b/src/module/uti/club001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 28 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Club", + "id": 1522 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 39 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "club001" + }, + "TemplateResRef": { + "type": "resref", + "value": "club001" + } +} diff --git a/src/module/uti/club101.uti.json b/src/module/uti/club101.uti.json new file mode 100644 index 0000000..e5304ad --- /dev/null +++ b/src/module/uti/club101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 682 + }, + "BaseItem": { + "type": "int", + "value": 28 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Club +1", + "id": 1522 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 39 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "club101" + }, + "TemplateResRef": { + "type": "resref", + "value": "club101" + } +} diff --git a/src/module/uti/club201.uti.json b/src/module/uti/club201.uti.json new file mode 100644 index 0000000..9e48b61 --- /dev/null +++ b/src/module/uti/club201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1082 + }, + "BaseItem": { + "type": "int", + "value": 28 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Club +2", + "id": 1522 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 39 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "club201" + }, + "TemplateResRef": { + "type": "resref", + "value": "club201" + } +} diff --git a/src/module/uti/club301.uti.json b/src/module/uti/club301.uti.json new file mode 100644 index 0000000..a57cd48 --- /dev/null +++ b/src/module/uti/club301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1480 + }, + "BaseItem": { + "type": "int", + "value": 28 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Club +3", + "id": 1522 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 39 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "club301" + }, + "TemplateResRef": { + "type": "resref", + "value": "club301" + } +} diff --git a/src/module/uti/club401.uti.json b/src/module/uti/club401.uti.json new file mode 100644 index 0000000..873e23c --- /dev/null +++ b/src/module/uti/club401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1880 + }, + "BaseItem": { + "type": "int", + "value": 28 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Club +4", + "id": 1522 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 39 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "club401" + }, + "TemplateResRef": { + "type": "resref", + "value": "club401" + } +} diff --git a/src/module/uti/club501.uti.json b/src/module/uti/club501.uti.json new file mode 100644 index 0000000..688a6d9 --- /dev/null +++ b/src/module/uti/club501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2280 + }, + "BaseItem": { + "type": "int", + "value": 28 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Club +5", + "id": 1522 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 39 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "club501" + }, + "TemplateResRef": { + "type": "resref", + "value": "club501" + } +} diff --git a/src/module/uti/coldmat.uti.json b/src/module/uti/coldmat.uti.json new file mode 100644 index 0000000..4aa1b63 --- /dev/null +++ b/src/module/uti/coldmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add -/10 cold resistance to a suit of armor or shield\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the Resist Elements spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cold Resistant Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "coldmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "coldmat" + } +} diff --git a/src/module/uti/coldmat2.uti.json b/src/module/uti/coldmat2.uti.json new file mode 100644 index 0000000..0d1bdf1 --- /dev/null +++ b/src/module/uti/coldmat2.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will add 1d6 cold damage to the weapon.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +1 bonus on the item.\n\nThis material requires a 8th level spell caster, with Ice Storm memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Freezing Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "coldmat2" + }, + "TemplateResRef": { + "type": "resref", + "value": "coldmat2" + } +} diff --git a/src/module/uti/coldmat3.uti.json b/src/module/uti/coldmat3.uti.json new file mode 100644 index 0000000..fb4685e --- /dev/null +++ b/src/module/uti/coldmat3.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will add 1d6 cold damage to the weapon. If the weapon scores a critical hit it will do an additional d10 damage.\n\nWhen applied to a ranged weapon the weapon gains unlimited +1d6 cold ammunition. This power is an exception to the ranged weapon special rules in your journal.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 10th level spell caster, with Ice Storm memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Frozen Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "coldmat3" + }, + "TemplateResRef": { + "type": "resref", + "value": "coldmat3" + } +} diff --git a/src/module/uti/creitemlic002.uti.json b/src/module/uti/creitemlic002.uti.json new file mode 100644 index 0000000..f46eb48 --- /dev/null +++ b/src/module/uti/creitemlic002.uti.json @@ -0,0 +1,512 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3994240 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "id": 12937 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 14 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 6 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 22 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 5 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 20 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 5 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 20 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 73 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "NW_CREITEMLIC" + }, + "TemplateResRef": { + "type": "resref", + "value": "creitemlic002" + } +} diff --git a/src/module/uti/dagger001.uti.json b/src/module/uti/dagger001.uti.json new file mode 100644 index 0000000..0602d75 --- /dev/null +++ b/src/module/uti/dagger001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dagger", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 34 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger001" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger001" + } +} diff --git a/src/module/uti/dagger101.uti.json b/src/module/uti/dagger101.uti.json new file mode 100644 index 0000000..4dac4b8 --- /dev/null +++ b/src/module/uti/dagger101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 680 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dagger +1", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 34 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger101" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger101" + } +} diff --git a/src/module/uti/dagger201.uti.json b/src/module/uti/dagger201.uti.json new file mode 100644 index 0000000..748409d --- /dev/null +++ b/src/module/uti/dagger201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1080 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dagger +2", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 34 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger201" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger201" + } +} diff --git a/src/module/uti/dagger301.uti.json b/src/module/uti/dagger301.uti.json new file mode 100644 index 0000000..0f67cf7 --- /dev/null +++ b/src/module/uti/dagger301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1480 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18304 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dagger +3", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 34 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger301" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger301" + } +} diff --git a/src/module/uti/dagger401.uti.json b/src/module/uti/dagger401.uti.json new file mode 100644 index 0000000..b3bf45c --- /dev/null +++ b/src/module/uti/dagger401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1880 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32304 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dagger +4", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "PaletteID": { + "type": "byte", + "value": 34 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger401" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger401" + } +} diff --git a/src/module/uti/dagger501.uti.json b/src/module/uti/dagger501.uti.json new file mode 100644 index 0000000..d56b74b --- /dev/null +++ b/src/module/uti/dagger501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2280 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50304 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dagger +5", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "PaletteID": { + "type": "byte", + "value": 34 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger501" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger501" + } +} diff --git a/src/module/uti/dagger601.uti.json b/src/module/uti/dagger601.uti.json new file mode 100644 index 0000000..0a5048f --- /dev/null +++ b/src/module/uti/dagger601.uti.json @@ -0,0 +1,151 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1398 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Adamantine Dagger", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 51 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 34 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger601" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger601" + } +} diff --git a/src/module/uti/dagger602.uti.json b/src/module/uti/dagger602.uti.json new file mode 100644 index 0000000..14fbe50 --- /dev/null +++ b/src/module/uti/dagger602.uti.json @@ -0,0 +1,153 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7680 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The user of this weapon can once per day cuase it to be coated in venom. This venom only lasts on the blade for 12 seconds but it's effects are nasty. The victim must make a DC 14 save or take 1d10 Constitution damage. In addition if the first save fails a second will be required 1 minute later." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dagger of Venom", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 34 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger602" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger602" + } +} diff --git a/src/module/uti/dagger603.uti.json b/src/module/uti/dagger603.uti.json new file mode 100644 index 0000000..d513a7d --- /dev/null +++ b/src/module/uti/dagger603.uti.json @@ -0,0 +1,149 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 618 + }, + "BaseItem": { + "type": "int", + "value": 22 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 10302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Assassin's Dagger", + "id": 191 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "PaletteID": { + "type": "byte", + "value": 34 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 74 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dagger603" + }, + "TemplateResRef": { + "type": "resref", + "value": "dagger603" + } +} diff --git a/src/module/uti/dancemat.uti.json b/src/module/uti/dancemat.uti.json new file mode 100644 index 0000000..5567965 --- /dev/null +++ b/src/module/uti/dancemat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a melee weapon. When this weapon strike an opponent they will be struck by a DC 14 slow spell.\n\nThis is considered a +4 bonus on the item.\n\nThis material requires a 15th bard to apply it." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dancing Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dancemat" + }, + "TemplateResRef": { + "type": "resref", + "value": "dancemat" + } +} diff --git a/src/module/uti/dart001.uti.json b/src/module/uti/dart001.uti.json new file mode 100644 index 0000000..c28ea59 --- /dev/null +++ b/src/module/uti/dart001.uti.json @@ -0,0 +1,78 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 31 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dart", + "id": 1525 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dart001" + }, + "TemplateResRef": { + "type": "resref", + "value": "dart001" + } +} diff --git a/src/module/uti/dart101.uti.json b/src/module/uti/dart101.uti.json new file mode 100644 index 0000000..49c8dc5 --- /dev/null +++ b/src/module/uti/dart101.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 38 + }, + "BaseItem": { + "type": "int", + "value": 31 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 442 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dart +1", + "id": 1525 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dart101" + }, + "TemplateResRef": { + "type": "resref", + "value": "dart101" + } +} diff --git a/src/module/uti/dart201.uti.json b/src/module/uti/dart201.uti.json new file mode 100644 index 0000000..3ac82d4 --- /dev/null +++ b/src/module/uti/dart201.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 130 + }, + "BaseItem": { + "type": "int", + "value": 31 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1934 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dart +2", + "id": 1525 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dart201" + }, + "TemplateResRef": { + "type": "resref", + "value": "dart201" + } +} diff --git a/src/module/uti/dart301.uti.json b/src/module/uti/dart301.uti.json new file mode 100644 index 0000000..892a891 --- /dev/null +++ b/src/module/uti/dart301.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 282 + }, + "BaseItem": { + "type": "int", + "value": 31 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4486 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dart +3", + "id": 1525 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dart301" + }, + "TemplateResRef": { + "type": "resref", + "value": "dart301" + } +} diff --git a/src/module/uti/dart401.uti.json b/src/module/uti/dart401.uti.json new file mode 100644 index 0000000..88cb24c --- /dev/null +++ b/src/module/uti/dart401.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 494 + }, + "BaseItem": { + "type": "int", + "value": 31 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8098 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dart +4", + "id": 1525 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dart401" + }, + "TemplateResRef": { + "type": "resref", + "value": "dart401" + } +} diff --git a/src/module/uti/dart501.uti.json b/src/module/uti/dart501.uti.json new file mode 100644 index 0000000..0f976a1 --- /dev/null +++ b/src/module/uti/dart501.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 766 + }, + "BaseItem": { + "type": "int", + "value": 31 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 12770 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dart +5", + "id": 1525 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dart501" + }, + "TemplateResRef": { + "type": "resref", + "value": "dart501" + } +} diff --git a/src/module/uti/daxe001.uti.json b/src/module/uti/daxe001.uti.json new file mode 100644 index 0000000..19592ba --- /dev/null +++ b/src/module/uti/daxe001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 33 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 60 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Double Axe", + "id": 1527 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "daxe001" + }, + "TemplateResRef": { + "type": "resref", + "value": "daxe001" + } +} diff --git a/src/module/uti/daxe101.uti.json b/src/module/uti/daxe101.uti.json new file mode 100644 index 0000000..29fa847 --- /dev/null +++ b/src/module/uti/daxe101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 982 + }, + "BaseItem": { + "type": "int", + "value": 33 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2660 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Double Axe +1", + "id": 1527 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "daxe101" + }, + "TemplateResRef": { + "type": "resref", + "value": "daxe101" + } +} diff --git a/src/module/uti/daxe201.uti.json b/src/module/uti/daxe201.uti.json new file mode 100644 index 0000000..66fdd0d --- /dev/null +++ b/src/module/uti/daxe201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1382 + }, + "BaseItem": { + "type": "int", + "value": 33 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8660 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Double Axe +2", + "id": 1527 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "daxe201" + }, + "TemplateResRef": { + "type": "resref", + "value": "daxe201" + } +} diff --git a/src/module/uti/daxe301.uti.json b/src/module/uti/daxe301.uti.json new file mode 100644 index 0000000..9bedfa5 --- /dev/null +++ b/src/module/uti/daxe301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1780 + }, + "BaseItem": { + "type": "int", + "value": 33 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18660 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Double Axe +3", + "id": 1527 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "daxe301" + }, + "TemplateResRef": { + "type": "resref", + "value": "daxe301" + } +} diff --git a/src/module/uti/daxe401.uti.json b/src/module/uti/daxe401.uti.json new file mode 100644 index 0000000..1f5d490 --- /dev/null +++ b/src/module/uti/daxe401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2180 + }, + "BaseItem": { + "type": "int", + "value": 33 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32660 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Double Axe +4", + "id": 1527 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "daxe401" + }, + "TemplateResRef": { + "type": "resref", + "value": "daxe401" + } +} diff --git a/src/module/uti/daxe501.uti.json b/src/module/uti/daxe501.uti.json new file mode 100644 index 0000000..9b21c6d --- /dev/null +++ b/src/module/uti/daxe501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2580 + }, + "BaseItem": { + "type": "int", + "value": 33 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50660 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Double Axe +5", + "id": 1527 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "daxe501" + }, + "TemplateResRef": { + "type": "resref", + "value": "daxe501" + } +} diff --git a/src/module/uti/deathtoken.uti.json b/src/module/uti/deathtoken.uti.json new file mode 100644 index 0000000..539e563 --- /dev/null +++ b/src/module/uti/deathtoken.uti.json @@ -0,0 +1,77 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "DeathToken" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 4 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "DeathToken" + }, + "TemplateResRef": { + "type": "resref", + "value": "deathtoken" + } +} diff --git a/src/module/uti/defmat.uti.json b/src/module/uti/defmat.uti.json new file mode 100644 index 0000000..a7e7e2d --- /dev/null +++ b/src/module/uti/defmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a melee weapon. The weapon will then add it's enchantment bonus (as of time of this materials addition) to the characters Armor Class.\n\nThis material requires a 8th level spell caster, with either Shield or Shield of Faith memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Defensive Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 85 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "defmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "defmat" + } +} diff --git a/src/module/uti/disrmat.uti.json b/src/module/uti/disrmat.uti.json new file mode 100644 index 0000000..8ccbc28 --- /dev/null +++ b/src/module/uti/disrmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material can only be added to a bludgeoning melee weapon. When an undead is struck it must make a Fortitude save vs DC 14 or be instantly destroyed. \n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 14th level spell caster, with Heal memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Disruption Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 17 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "disrmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "disrmat" + } +} diff --git a/src/module/uti/dmace001.uti.json b/src/module/uti/dmace001.uti.json new file mode 100644 index 0000000..25fb4f6 --- /dev/null +++ b/src/module/uti/dmace001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 32 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 80 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dire Mace", + "id": 1526 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dmace001" + }, + "TemplateResRef": { + "type": "resref", + "value": "dmace001" + } +} diff --git a/src/module/uti/dmace101.uti.json b/src/module/uti/dmace101.uti.json new file mode 100644 index 0000000..32d5d0d --- /dev/null +++ b/src/module/uti/dmace101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 992 + }, + "BaseItem": { + "type": "int", + "value": 32 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2690 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dire Mace +1", + "id": 1526 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dmace101" + }, + "TemplateResRef": { + "type": "resref", + "value": "dmace101" + } +} diff --git a/src/module/uti/dmace201.uti.json b/src/module/uti/dmace201.uti.json new file mode 100644 index 0000000..02004dc --- /dev/null +++ b/src/module/uti/dmace201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1392 + }, + "BaseItem": { + "type": "int", + "value": 32 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8690 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dire Mace +2", + "id": 1526 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dmace201" + }, + "TemplateResRef": { + "type": "resref", + "value": "dmace201" + } +} diff --git a/src/module/uti/dmace301.uti.json b/src/module/uti/dmace301.uti.json new file mode 100644 index 0000000..3f50162 --- /dev/null +++ b/src/module/uti/dmace301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1790 + }, + "BaseItem": { + "type": "int", + "value": 32 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18690 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dire Mace +3", + "id": 1526 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dmace301" + }, + "TemplateResRef": { + "type": "resref", + "value": "dmace301" + } +} diff --git a/src/module/uti/dmace401.uti.json b/src/module/uti/dmace401.uti.json new file mode 100644 index 0000000..3a03cb5 --- /dev/null +++ b/src/module/uti/dmace401.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2190 + }, + "BaseItem": { + "type": "int", + "value": 32 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32690 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dire Mace +4", + "id": 1526 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 33 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dmace401" + }, + "TemplateResRef": { + "type": "resref", + "value": "dmace401" + } +} diff --git a/src/module/uti/dmace501.uti.json b/src/module/uti/dmace501.uti.json new file mode 100644 index 0000000..e460923 --- /dev/null +++ b/src/module/uti/dmace501.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2590 + }, + "BaseItem": { + "type": "int", + "value": 32 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50690 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dire Mace +5", + "id": 1526 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 33 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dmace501" + }, + "TemplateResRef": { + "type": "resref", + "value": "dmace501" + } +} diff --git a/src/module/uti/dmbanwand.uti.json b/src/module/uti/dmbanwand.uti.json new file mode 100644 index 0000000..3a35e1f --- /dev/null +++ b/src/module/uti/dmbanwand.uti.json @@ -0,0 +1,119 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 1 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This wand when used will teleport a PC to the Death Cheater Cell. This cell has no way out except if the DM lets them out." + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "DM Ban Wand" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 53 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "DMBanWand" + }, + "TemplateResRef": { + "type": "resref", + "value": "dmbanwand" + } +} diff --git a/src/module/uti/dmcleaner.uti.json b/src/module/uti/dmcleaner.uti.json new file mode 100644 index 0000000..6cbdc7f --- /dev/null +++ b/src/module/uti/dmcleaner.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This rod will destroy any targetable object or item. This is permanent be careful what you aim at." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "DM Cleaner" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 53 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "DMCleaner" + }, + "TemplateResRef": { + "type": "resref", + "value": "dmcleaner" + } +} diff --git a/src/module/uti/dsword001.uti.json b/src/module/uti/dsword001.uti.json new file mode 100644 index 0000000..3279ab0 --- /dev/null +++ b/src/module/uti/dsword001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 12 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Two-Bladed Sword", + "id": 172 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dsword001" + }, + "TemplateResRef": { + "type": "resref", + "value": "dsword001" + } +} diff --git a/src/module/uti/dsword101.uti.json b/src/module/uti/dsword101.uti.json new file mode 100644 index 0000000..21744a7 --- /dev/null +++ b/src/module/uti/dsword101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 882 + }, + "BaseItem": { + "type": "int", + "value": 12 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Two-Bladed Sword +1", + "id": 172 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dsword101" + }, + "TemplateResRef": { + "type": "resref", + "value": "dsword101" + } +} diff --git a/src/module/uti/dsword201.uti.json b/src/module/uti/dsword201.uti.json new file mode 100644 index 0000000..7570852 --- /dev/null +++ b/src/module/uti/dsword201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1282 + }, + "BaseItem": { + "type": "int", + "value": 12 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Two-Bladed Sword +2", + "id": 172 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dsword201" + }, + "TemplateResRef": { + "type": "resref", + "value": "dsword201" + } +} diff --git a/src/module/uti/dsword301.uti.json b/src/module/uti/dsword301.uti.json new file mode 100644 index 0000000..1b5262c --- /dev/null +++ b/src/module/uti/dsword301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1280 + }, + "BaseItem": { + "type": "int", + "value": 12 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Two-Bladed Sword +3", + "id": 172 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dsword301" + }, + "TemplateResRef": { + "type": "resref", + "value": "dsword301" + } +} diff --git a/src/module/uti/dsword401.uti.json b/src/module/uti/dsword401.uti.json new file mode 100644 index 0000000..04924c8 --- /dev/null +++ b/src/module/uti/dsword401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1680 + }, + "BaseItem": { + "type": "int", + "value": 12 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Two-Bladed Sword +4", + "id": 172 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dsword401" + }, + "TemplateResRef": { + "type": "resref", + "value": "dsword401" + } +} diff --git a/src/module/uti/dsword501.uti.json b/src/module/uti/dsword501.uti.json new file mode 100644 index 0000000..ad3d318 --- /dev/null +++ b/src/module/uti/dsword501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2480 + }, + "BaseItem": { + "type": "int", + "value": 12 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Two-Bladed Sword +5", + "id": 172 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dsword501" + }, + "TemplateResRef": { + "type": "resref", + "value": "dsword501" + } +} diff --git a/src/module/uti/dungeonmasterrob.uti.json b/src/module/uti/dungeonmasterrob.uti.json new file mode 100644 index 0000000..5bee3c2 --- /dev/null +++ b/src/module/uti/dungeonmasterrob.uti.json @@ -0,0 +1,175 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 37 + }, + "Cloth2Color": { + "type": "byte", + "value": 39 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Yes I'm a vain DM. Sue me." + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 3 + }, + "Leather2Color": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dungeon Master Robes" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "DungeonMasterRobes" + }, + "TemplateResRef": { + "type": "resref", + "value": "dungeonmasterrob" + } +} diff --git a/src/module/uti/dwaxe001.uti.json b/src/module/uti/dwaxe001.uti.json new file mode 100644 index 0000000..64b7bfe --- /dev/null +++ b/src/module/uti/dwaxe001.uti.json @@ -0,0 +1,87 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 108 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 60 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Waraxe " + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dwaxe001" + }, + "TemplateResRef": { + "type": "resref", + "value": "dwaxe001" + } +} diff --git a/src/module/uti/dwaxe101.uti.json b/src/module/uti/dwaxe101.uti.json new file mode 100644 index 0000000..bfe84b9 --- /dev/null +++ b/src/module/uti/dwaxe101.uti.json @@ -0,0 +1,119 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 652 + }, + "BaseItem": { + "type": "int", + "value": 108 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Waraxe +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dwaxe101" + }, + "TemplateResRef": { + "type": "resref", + "value": "dwaxe101" + } +} diff --git a/src/module/uti/dwaxe201.uti.json b/src/module/uti/dwaxe201.uti.json new file mode 100644 index 0000000..90562c1 --- /dev/null +++ b/src/module/uti/dwaxe201.uti.json @@ -0,0 +1,119 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1052 + }, + "BaseItem": { + "type": "int", + "value": 108 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 8330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Waraxe +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dwaxe201" + }, + "TemplateResRef": { + "type": "resref", + "value": "dwaxe201" + } +} diff --git a/src/module/uti/dwaxe301.uti.json b/src/module/uti/dwaxe301.uti.json new file mode 100644 index 0000000..eff336d --- /dev/null +++ b/src/module/uti/dwaxe301.uti.json @@ -0,0 +1,119 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1450 + }, + "BaseItem": { + "type": "int", + "value": 108 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 18330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Waraxe +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dwaxe301" + }, + "TemplateResRef": { + "type": "resref", + "value": "dwaxe301" + } +} diff --git a/src/module/uti/dwaxe401.uti.json b/src/module/uti/dwaxe401.uti.json new file mode 100644 index 0000000..9f4fd92 --- /dev/null +++ b/src/module/uti/dwaxe401.uti.json @@ -0,0 +1,119 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1850 + }, + "BaseItem": { + "type": "int", + "value": 108 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 32330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Waraxe +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dwaxe401" + }, + "TemplateResRef": { + "type": "resref", + "value": "dwaxe401" + } +} diff --git a/src/module/uti/dwaxe501.uti.json b/src/module/uti/dwaxe501.uti.json new file mode 100644 index 0000000..ea7563b --- /dev/null +++ b/src/module/uti/dwaxe501.uti.json @@ -0,0 +1,119 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2250 + }, + "BaseItem": { + "type": "int", + "value": 108 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 50330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Waraxe +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 52 + }, + "ModelPart2": { + "type": "byte", + "value": 52 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "dwaxe501" + }, + "TemplateResRef": { + "type": "resref", + "value": "dwaxe501" + } +} diff --git a/src/module/uti/elecmat.uti.json b/src/module/uti/elecmat.uti.json new file mode 100644 index 0000000..c447ea0 --- /dev/null +++ b/src/module/uti/elecmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add -/10 electrical resistance to a suit of armor or shield\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the Resist Elements spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Electrical Resistant Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 90 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "elecmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "elecmat" + } +} diff --git a/src/module/uti/elecmat2.uti.json b/src/module/uti/elecmat2.uti.json new file mode 100644 index 0000000..3a3dfd9 --- /dev/null +++ b/src/module/uti/elecmat2.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will add 1d6 electrical damage to the weapon.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +1 bonus on the item.\n\nThis material requires a 8th level spell caster, with either Lightning Bolt or Call Lightning memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lightning Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "elecmat2" + }, + "TemplateResRef": { + "type": "resref", + "value": "elecmat2" + } +} diff --git a/src/module/uti/elecmat3.uti.json b/src/module/uti/elecmat3.uti.json new file mode 100644 index 0000000..626500f --- /dev/null +++ b/src/module/uti/elecmat3.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will add 1d6 electrical damage to the weapon. If the weapon scores a critical hit it will do an additional d10 damage.\n\nWhen applied to a ranged weapon the weapon gains unlimited +1d6 electrical ammunition. This power is an exception to the ranged weapon special rules in your journal.\n\nThis material requires a 10th level spell caster, with either Lightning Bolt or Call Lightning memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shocking Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "elecmat3" + }, + "TemplateResRef": { + "type": "resref", + "value": "elecmat3" + } +} diff --git a/src/module/uti/ethmat.uti.json b/src/module/uti/ethmat.uti.json new file mode 100644 index 0000000..36539ef --- /dev/null +++ b/src/module/uti/ethmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add the ability to become etherial to armor.\n\nAdding this ability costs as much as adding +5 enchantment to the item.\n\nThis material requires the craftsman to be a level 15 spell caster with the Greater Sanctuary spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Etherial Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 94 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ethmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "ethmat" + } +} diff --git a/src/module/uti/firemat.uti.json b/src/module/uti/firemat.uti.json new file mode 100644 index 0000000..c247173 --- /dev/null +++ b/src/module/uti/firemat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add -/10 fire resistance to a suit of armor or shield\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the Resist Elements spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fire Resistant Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 73 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "firemat" + }, + "TemplateResRef": { + "type": "resref", + "value": "firemat" + } +} diff --git a/src/module/uti/firemat2.uti.json b/src/module/uti/firemat2.uti.json new file mode 100644 index 0000000..4cdce93 --- /dev/null +++ b/src/module/uti/firemat2.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will add 1d6 fire damage to the weapon.\n\nIf used on a ranged weapon it will allows the weapon to add 1d6 acid damage to it's ammunition. NOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +1 bonus on the item.\n\nThis material requires a 10th level spell caster, with either Fireball, Flame Weapon, or Flame Strike memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Burning Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 51 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "firemat2" + }, + "TemplateResRef": { + "type": "resref", + "value": "firemat2" + } +} diff --git a/src/module/uti/firemat3.uti.json b/src/module/uti/firemat3.uti.json new file mode 100644 index 0000000..f5baf15 --- /dev/null +++ b/src/module/uti/firemat3.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a melee weapon. This material will add 1d6 fire damage to a melee weapon. If the weapon scores a critical hit it will do an additional d10 damage.\n\nWhen applied to a ranged weapon the weapon gains unlimited +1d6 fire ammunition. This power is an exception to the ranged weapon special rules in your journal.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 12th level spell caster, with either Fireball, Flame Weapon, or Flame Strike memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Flaming Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 51 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "firemat3" + }, + "TemplateResRef": { + "type": "resref", + "value": "firemat3" + } +} diff --git a/src/module/uti/food.uti.json b/src/module/uti/food.uti.json new file mode 100644 index 0000000..153c428 --- /dev/null +++ b/src/module/uti/food.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "You must eat to get a good rest.\n\n\n\n\nDM Note: Use this item to rest." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rations" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 20 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "food" + }, + "TemplateResRef": { + "type": "resref", + "value": "food" + } +} diff --git a/src/module/uti/fplate001.uti.json b/src/module/uti/fplate001.uti.json new file mode 100644 index 0000000..8e32680 --- /dev/null +++ b/src/module/uti/fplate001.uti.json @@ -0,0 +1,174 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 14 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 23 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 21 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Full Plate", + "id": 181 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "fplate001" + }, + "TemplateResRef": { + "type": "resref", + "value": "fplate001" + } +} diff --git a/src/module/uti/fplate101.uti.json b/src/module/uti/fplate101.uti.json new file mode 100644 index 0000000..0141cc9 --- /dev/null +++ b/src/module/uti/fplate101.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 494 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 14 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 23 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 21 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Full Plate +1", + "id": 181 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "fplate101" + }, + "TemplateResRef": { + "type": "resref", + "value": "fplate101" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + } +} diff --git a/src/module/uti/fplate201.uti.json b/src/module/uti/fplate201.uti.json new file mode 100644 index 0000000..93f8a2c --- /dev/null +++ b/src/module/uti/fplate201.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 14 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 23 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 5650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 21 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Full Plate +2", + "id": 181 + } + }, + "Metal1Color": { + "type": "byte", + "value": 5 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "fplate201" + }, + "TemplateResRef": { + "type": "resref", + "value": "fplate201" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 2 + } + } + ] + } +} diff --git a/src/module/uti/fplate301.uti.json b/src/module/uti/fplate301.uti.json new file mode 100644 index 0000000..fa65c62 --- /dev/null +++ b/src/module/uti/fplate301.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2338 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 14 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 23 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 10650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 21 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Full Plate +3", + "id": 181 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "fplate301" + }, + "TemplateResRef": { + "type": "resref", + "value": "fplate301" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 3 + } + } + ] + } +} diff --git a/src/module/uti/fplate401.uti.json b/src/module/uti/fplate401.uti.json new file mode 100644 index 0000000..0c806d5 --- /dev/null +++ b/src/module/uti/fplate401.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4830 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 14 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 23 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 21 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Full Plate +4", + "id": 181 + } + }, + "Metal1Color": { + "type": "byte", + "value": 11 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "fplate401" + }, + "TemplateResRef": { + "type": "resref", + "value": "fplate401" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4 + } + } + ] + } +} diff --git a/src/module/uti/fplate501.uti.json b/src/module/uti/fplate501.uti.json new file mode 100644 index 0000000..3fd3219 --- /dev/null +++ b/src/module/uti/fplate501.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5602 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 19 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 14 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 23 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 26550 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 21 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Full Plate +5", + "id": 181 + } + }, + "Metal1Color": { + "type": "byte", + "value": 11 + }, + "Metal2Color": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "fplate501" + }, + "TemplateResRef": { + "type": "resref", + "value": "fplate501" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 5 + } + } + ] + } +} diff --git a/src/module/uti/fplate601.uti.json b/src/module/uti/fplate601.uti.json new file mode 100644 index 0000000..06b7216 --- /dev/null +++ b/src/module/uti/fplate601.uti.json @@ -0,0 +1,210 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 8960 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 21 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 21 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 11 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 23 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 22 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 10500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This armor only has a armor check penalty of -4.\n\nArcane spell failure is reduced to 25%.\n\nThis armor must be unequiped to be sold to a merchant." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 3 + }, + "Leather2Color": { + "type": "byte", + "value": 23 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Plate", + "id": 181 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "fplate601" + }, + "TemplateResRef": { + "type": "resref", + "value": "fplate601" + } +} diff --git a/src/module/uti/fplate602.uti.json b/src/module/uti/fplate602.uti.json new file mode 100644 index 0000000..a412414 --- /dev/null +++ b/src/module/uti/fplate602.uti.json @@ -0,0 +1,257 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4846 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 20 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 20 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 9 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 20 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 5 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 20 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 10 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 21 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 23 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 21 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Plate Armor of the Deep", + "id": 181 + } + }, + "Metal1Color": { + "type": "byte", + "value": 45 + }, + "Metal2Color": { + "type": "byte", + "value": 39 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 201 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "fplate602" + }, + "TemplateResRef": { + "type": "resref", + "value": "fplate602" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4 + } + } + ] + } +} diff --git a/src/module/uti/gaxe001.uti.json b/src/module/uti/gaxe001.uti.json new file mode 100644 index 0000000..e9a6de3 --- /dev/null +++ b/src/module/uti/gaxe001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 18 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 40 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greataxe", + "id": 515 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gaxe001" + }, + "TemplateResRef": { + "type": "resref", + "value": "gaxe001" + } +} diff --git a/src/module/uti/gaxe101.uti.json b/src/module/uti/gaxe101.uti.json new file mode 100644 index 0000000..4dffcc1 --- /dev/null +++ b/src/module/uti/gaxe101.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 662 + }, + "BaseItem": { + "type": "int", + "value": 18 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greataxe +1", + "id": 515 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gaxe101" + }, + "TemplateResRef": { + "type": "resref", + "value": "gaxe101" + } +} diff --git a/src/module/uti/gaxe201.uti.json b/src/module/uti/gaxe201.uti.json new file mode 100644 index 0000000..4d6cda3 --- /dev/null +++ b/src/module/uti/gaxe201.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1062 + }, + "BaseItem": { + "type": "int", + "value": 18 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greataxe +2", + "id": 515 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gaxe201" + }, + "TemplateResRef": { + "type": "resref", + "value": "gaxe201" + } +} diff --git a/src/module/uti/gaxe301.uti.json b/src/module/uti/gaxe301.uti.json new file mode 100644 index 0000000..c413cab --- /dev/null +++ b/src/module/uti/gaxe301.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1460 + }, + "BaseItem": { + "type": "int", + "value": 18 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greataxe +3", + "id": 515 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gaxe301" + }, + "TemplateResRef": { + "type": "resref", + "value": "gaxe301" + } +} diff --git a/src/module/uti/gaxe401.uti.json b/src/module/uti/gaxe401.uti.json new file mode 100644 index 0000000..a12ddd4 --- /dev/null +++ b/src/module/uti/gaxe401.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1860 + }, + "BaseItem": { + "type": "int", + "value": 18 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greataxe +4", + "id": 515 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gaxe401" + }, + "TemplateResRef": { + "type": "resref", + "value": "gaxe401" + } +} diff --git a/src/module/uti/gaxe501.uti.json b/src/module/uti/gaxe501.uti.json new file mode 100644 index 0000000..6c67875 --- /dev/null +++ b/src/module/uti/gaxe501.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2260 + }, + "BaseItem": { + "type": "int", + "value": 18 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greataxe +5", + "id": 515 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gaxe501" + }, + "TemplateResRef": { + "type": "resref", + "value": "gaxe501" + } +} diff --git a/src/module/uti/gaxe601.uti.json b/src/module/uti/gaxe601.uti.json new file mode 100644 index 0000000..7613d4c --- /dev/null +++ b/src/module/uti/gaxe601.uti.json @@ -0,0 +1,151 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1560 + }, + "BaseItem": { + "type": "int", + "value": 18 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 40320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Life Drinker", + "id": 515 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 32 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 24 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 48 + }, + "Subtype": { + "type": "word", + "value": 17 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gaxe601" + }, + "TemplateResRef": { + "type": "resref", + "value": "gaxe601" + } +} diff --git a/src/module/uti/ghostmat.uti.json b/src/module/uti/ghostmat.uti.json new file mode 100644 index 0000000..932c00e --- /dev/null +++ b/src/module/uti/ghostmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add True Seeing to armor or shields.\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the True Seeing spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Seeing Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 65 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ghostmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "ghostmat" + } +} diff --git a/src/module/uti/gsword001.uti.json b/src/module/uti/gsword001.uti.json new file mode 100644 index 0000000..03929c6 --- /dev/null +++ b/src/module/uti/gsword001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 13 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greatsword", + "id": 167 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 35 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gsword001" + }, + "TemplateResRef": { + "type": "resref", + "value": "gsword001" + } +} diff --git a/src/module/uti/gsword101.uti.json b/src/module/uti/gsword101.uti.json new file mode 100644 index 0000000..4dfd1ea --- /dev/null +++ b/src/module/uti/gsword101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 632 + }, + "BaseItem": { + "type": "int", + "value": 13 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greatsword +1", + "id": 167 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 35 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gsword101" + }, + "TemplateResRef": { + "type": "resref", + "value": "gsword101" + } +} diff --git a/src/module/uti/gsword201.uti.json b/src/module/uti/gsword201.uti.json new file mode 100644 index 0000000..6e2563a --- /dev/null +++ b/src/module/uti/gsword201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1032 + }, + "BaseItem": { + "type": "int", + "value": 13 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greatsword +2", + "id": 167 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 35 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gsword201" + }, + "TemplateResRef": { + "type": "resref", + "value": "gsword201" + } +} diff --git a/src/module/uti/gsword301.uti.json b/src/module/uti/gsword301.uti.json new file mode 100644 index 0000000..78b5c9e --- /dev/null +++ b/src/module/uti/gsword301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1430 + }, + "BaseItem": { + "type": "int", + "value": 13 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greatsword +3", + "id": 167 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 35 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gsword301" + }, + "TemplateResRef": { + "type": "resref", + "value": "gsword301" + } +} diff --git a/src/module/uti/gsword401.uti.json b/src/module/uti/gsword401.uti.json new file mode 100644 index 0000000..1c32e16 --- /dev/null +++ b/src/module/uti/gsword401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1830 + }, + "BaseItem": { + "type": "int", + "value": 13 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greatsword +4", + "id": 167 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 35 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gsword401" + }, + "TemplateResRef": { + "type": "resref", + "value": "gsword401" + } +} diff --git a/src/module/uti/gsword501.uti.json b/src/module/uti/gsword501.uti.json new file mode 100644 index 0000000..b73f6fa --- /dev/null +++ b/src/module/uti/gsword501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2230 + }, + "BaseItem": { + "type": "int", + "value": 13 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greatsword +5", + "id": 167 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 35 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gsword501" + }, + "TemplateResRef": { + "type": "resref", + "value": "gsword501" + } +} diff --git a/src/module/uti/gsword601.uti.json b/src/module/uti/gsword601.uti.json new file mode 100644 index 0000000..437cda6 --- /dev/null +++ b/src/module/uti/gsword601.uti.json @@ -0,0 +1,180 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1230 + }, + "BaseItem": { + "type": "int", + "value": 13 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 49350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Frostbrand", + "id": 167 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "PaletteID": { + "type": "byte", + "value": 35 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "gsword601" + }, + "TemplateResRef": { + "type": "resref", + "value": "gsword601" + } +} diff --git a/src/module/uti/halberd001.uti.json b/src/module/uti/halberd001.uti.json new file mode 100644 index 0000000..b087c1a --- /dev/null +++ b/src/module/uti/halberd001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 10 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Halberd", + "id": 175 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "halberd001" + }, + "TemplateResRef": { + "type": "resref", + "value": "halberd001" + } +} diff --git a/src/module/uti/halberd101.uti.json b/src/module/uti/halberd101.uti.json new file mode 100644 index 0000000..25e36d7 --- /dev/null +++ b/src/module/uti/halberd101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 672 + }, + "BaseItem": { + "type": "int", + "value": 10 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Halberd +1", + "id": 175 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "halberd101" + }, + "TemplateResRef": { + "type": "resref", + "value": "halberd101" + } +} diff --git a/src/module/uti/halberd201.uti.json b/src/module/uti/halberd201.uti.json new file mode 100644 index 0000000..7476a22 --- /dev/null +++ b/src/module/uti/halberd201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1072 + }, + "BaseItem": { + "type": "int", + "value": 10 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Halberd +2", + "id": 175 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "halberd201" + }, + "TemplateResRef": { + "type": "resref", + "value": "halberd201" + } +} diff --git a/src/module/uti/halberd301.uti.json b/src/module/uti/halberd301.uti.json new file mode 100644 index 0000000..f4c6ba2 --- /dev/null +++ b/src/module/uti/halberd301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1470 + }, + "BaseItem": { + "type": "int", + "value": 10 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Halberd +3", + "id": 175 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "halberd301" + }, + "TemplateResRef": { + "type": "resref", + "value": "halberd301" + } +} diff --git a/src/module/uti/halberd401.uti.json b/src/module/uti/halberd401.uti.json new file mode 100644 index 0000000..ca702e6 --- /dev/null +++ b/src/module/uti/halberd401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1870 + }, + "BaseItem": { + "type": "int", + "value": 10 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Halberd +4", + "id": 175 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "halberd401" + }, + "TemplateResRef": { + "type": "resref", + "value": "halberd401" + } +} diff --git a/src/module/uti/halberd501.uti.json b/src/module/uti/halberd501.uti.json new file mode 100644 index 0000000..c68d73d --- /dev/null +++ b/src/module/uti/halberd501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2270 + }, + "BaseItem": { + "type": "int", + "value": 10 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Halberd +5", + "id": 175 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "halberd501" + }, + "TemplateResRef": { + "type": "resref", + "value": "halberd501" + } +} diff --git a/src/module/uti/haxe001.uti.json b/src/module/uti/haxe001.uti.json new file mode 100644 index 0000000..fa263f4 --- /dev/null +++ b/src/module/uti/haxe001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 38 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 12 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Handaxe", + "id": 1532 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 30 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "haxe001" + }, + "TemplateResRef": { + "type": "resref", + "value": "haxe001" + } +} diff --git a/src/module/uti/haxe101.uti.json b/src/module/uti/haxe101.uti.json new file mode 100644 index 0000000..33c8a65 --- /dev/null +++ b/src/module/uti/haxe101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 676 + }, + "BaseItem": { + "type": "int", + "value": 38 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Handaxe +1", + "id": 1532 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 30 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "haxe101" + }, + "TemplateResRef": { + "type": "resref", + "value": "haxe101" + } +} diff --git a/src/module/uti/haxe201.uti.json b/src/module/uti/haxe201.uti.json new file mode 100644 index 0000000..a1c4350 --- /dev/null +++ b/src/module/uti/haxe201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1076 + }, + "BaseItem": { + "type": "int", + "value": 38 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Handaxe +2", + "id": 1532 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 30 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "haxe201" + }, + "TemplateResRef": { + "type": "resref", + "value": "haxe201" + } +} diff --git a/src/module/uti/haxe301.uti.json b/src/module/uti/haxe301.uti.json new file mode 100644 index 0000000..801d660 --- /dev/null +++ b/src/module/uti/haxe301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1474 + }, + "BaseItem": { + "type": "int", + "value": 38 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Handaxe +3", + "id": 1532 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 30 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "haxe301" + }, + "TemplateResRef": { + "type": "resref", + "value": "haxe301" + } +} diff --git a/src/module/uti/haxe401.uti.json b/src/module/uti/haxe401.uti.json new file mode 100644 index 0000000..4bce6d6 --- /dev/null +++ b/src/module/uti/haxe401.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1874 + }, + "BaseItem": { + "type": "int", + "value": 38 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Handaxe +4", + "id": 1532 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 30 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "haxe401" + }, + "TemplateResRef": { + "type": "resref", + "value": "haxe401" + } +} diff --git a/src/module/uti/haxe501.uti.json b/src/module/uti/haxe501.uti.json new file mode 100644 index 0000000..92debd3 --- /dev/null +++ b/src/module/uti/haxe501.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2274 + }, + "BaseItem": { + "type": "int", + "value": 38 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Handaxe +5", + "id": 1532 + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 30 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "haxe501" + }, + "TemplateResRef": { + "type": "resref", + "value": "haxe501" + } +} diff --git a/src/module/uti/healersbag.uti.json b/src/module/uti/healersbag.uti.json new file mode 100644 index 0000000..ec602cc --- /dev/null +++ b/src/module/uti/healersbag.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 49 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 10 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This kit can be used to stabilize an incapacitated PC.\n\nHeal Skill vs. DC 15" + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Healer's Bag" + } + }, + "ModelPart1": { + "type": "byte", + "value": 108 + }, + "PaletteID": { + "type": "byte", + "value": 20 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "healersbag" + }, + "TemplateResRef": { + "type": "resref", + "value": "healersbag" + } +} diff --git a/src/module/uti/hflail001.uti.json b/src/module/uti/hflail001.uti.json new file mode 100644 index 0000000..afcff6e --- /dev/null +++ b/src/module/uti/hflail001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 35 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 30 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Flail", + "id": 1529 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 40 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hflail001" + }, + "TemplateResRef": { + "type": "resref", + "value": "hflail001" + } +} diff --git a/src/module/uti/hflail101.uti.json b/src/module/uti/hflail101.uti.json new file mode 100644 index 0000000..61c4f07 --- /dev/null +++ b/src/module/uti/hflail101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 667 + }, + "BaseItem": { + "type": "int", + "value": 35 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Flail +1", + "id": 1529 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 40 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hflail101" + }, + "TemplateResRef": { + "type": "resref", + "value": "hflail101" + } +} diff --git a/src/module/uti/hflail201.uti.json b/src/module/uti/hflail201.uti.json new file mode 100644 index 0000000..8748546 --- /dev/null +++ b/src/module/uti/hflail201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1067 + }, + "BaseItem": { + "type": "int", + "value": 35 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Flail +2", + "id": 1529 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 40 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hflail201" + }, + "TemplateResRef": { + "type": "resref", + "value": "hflail201" + } +} diff --git a/src/module/uti/hflail301.uti.json b/src/module/uti/hflail301.uti.json new file mode 100644 index 0000000..c423f6b --- /dev/null +++ b/src/module/uti/hflail301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1465 + }, + "BaseItem": { + "type": "int", + "value": 35 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Flail +3", + "id": 1529 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 40 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hflail301" + }, + "TemplateResRef": { + "type": "resref", + "value": "hflail301" + } +} diff --git a/src/module/uti/hflail401.uti.json b/src/module/uti/hflail401.uti.json new file mode 100644 index 0000000..4ed97e0 --- /dev/null +++ b/src/module/uti/hflail401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1865 + }, + "BaseItem": { + "type": "int", + "value": 35 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Flail +4", + "id": 1529 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 40 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hflail401" + }, + "TemplateResRef": { + "type": "resref", + "value": "hflail401" + } +} diff --git a/src/module/uti/hflail501.uti.json b/src/module/uti/hflail501.uti.json new file mode 100644 index 0000000..1b0a0b8 --- /dev/null +++ b/src/module/uti/hflail501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2265 + }, + "BaseItem": { + "type": "int", + "value": 35 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Flail +5", + "id": 1529 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 40 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hflail501" + }, + "TemplateResRef": { + "type": "resref", + "value": "hflail501" + } +} diff --git a/src/module/uti/hfortmat.uti.json b/src/module/uti/hfortmat.uti.json new file mode 100644 index 0000000..a4d1a75 --- /dev/null +++ b/src/module/uti/hfortmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add immunity to Sneak Attacks, Critical Hits and Knock Down to armor or shields.\n\nAdding this ability costs as much as adding +5 enchantment to the item.\n\nUnlike most materials this one requires no spells to activate." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Fortification Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 93 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hfortmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "hfortmat" + } +} diff --git a/src/module/uti/hide001.uti.json b/src/module/uti/hide001.uti.json new file mode 100644 index 0000000..8dbc21a --- /dev/null +++ b/src/module/uti/hide001.uti.json @@ -0,0 +1,174 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 3 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 15 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 5 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hide Armor", + "id": 12840 + } + }, + "Metal1Color": { + "type": "byte", + "value": 17 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hide001" + }, + "TemplateResRef": { + "type": "resref", + "value": "hide001" + } +} diff --git a/src/module/uti/hide101.uti.json b/src/module/uti/hide101.uti.json new file mode 100644 index 0000000..85af8cd --- /dev/null +++ b/src/module/uti/hide101.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 494 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 3 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1165 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hide Armor +1", + "id": 12840 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hide101" + }, + "TemplateResRef": { + "type": "resref", + "value": "hide101" + } +} diff --git a/src/module/uti/hide201.uti.json b/src/module/uti/hide201.uti.json new file mode 100644 index 0000000..e8d2062 --- /dev/null +++ b/src/module/uti/hide201.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 3 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4165 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 13 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hide Armor +2", + "id": 12840 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hide201" + }, + "TemplateResRef": { + "type": "resref", + "value": "hide201" + } +} diff --git a/src/module/uti/hide301.uti.json b/src/module/uti/hide301.uti.json new file mode 100644 index 0000000..651535c --- /dev/null +++ b/src/module/uti/hide301.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2338 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 13 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 3 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9165 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 13 + }, + "Leather2Color": { + "type": "byte", + "value": 15 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hide Armor +3", + "id": 12840 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hide301" + }, + "TemplateResRef": { + "type": "resref", + "value": "hide301" + } +} diff --git a/src/module/uti/hide401.uti.json b/src/module/uti/hide401.uti.json new file mode 100644 index 0000000..3e1ef5b --- /dev/null +++ b/src/module/uti/hide401.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3830 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 12 + }, + "Cloth2Color": { + "type": "byte", + "value": 3 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16165 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 6 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hide Armor +4", + "id": 12840 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hide401" + }, + "TemplateResRef": { + "type": "resref", + "value": "hide401" + } +} diff --git a/src/module/uti/hide501.uti.json b/src/module/uti/hide501.uti.json new file mode 100644 index 0000000..03d9d58 --- /dev/null +++ b/src/module/uti/hide501.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5702 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 12 + }, + "Cloth2Color": { + "type": "byte", + "value": 3 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25165 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 15 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hide Armor +5", + "id": 12840 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hide501" + }, + "TemplateResRef": { + "type": "resref", + "value": "hide501" + } +} diff --git a/src/module/uti/hide601.uti.json b/src/module/uti/hide601.uti.json new file mode 100644 index 0000000..828bc40 --- /dev/null +++ b/src/module/uti/hide601.uti.json @@ -0,0 +1,210 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 11 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 3 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 22 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 3 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 5165 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This armor has no armor check penalty.\n\nIn addition it gives the knock down feat to the wearer.\n\nThis item must be unequiped to sell." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 13 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rhino Hide Armor", + "id": 12840 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hide601" + }, + "TemplateResRef": { + "type": "resref", + "value": "hide601" + } +} diff --git a/src/module/uti/holymat.uti.json b/src/module/uti/holymat.uti.json new file mode 100644 index 0000000..7870ded --- /dev/null +++ b/src/module/uti/holymat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material can only be added to a weapon by a good aligned character.\n\nIt provides +2d6 divine damage to any evil creature hit by weapon.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 7th level spell caster, Smite Evil feat." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Holy Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "holymat" + }, + "TemplateResRef": { + "type": "resref", + "value": "holymat" + } +} diff --git a/src/module/uti/hplate001.uti.json b/src/module/uti/hplate001.uti.json new file mode 100644 index 0000000..8d8d282 --- /dev/null +++ b/src/module/uti/hplate001.uti.json @@ -0,0 +1,174 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 33 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 21 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Half Plate", + "id": 12839 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hplate001" + }, + "TemplateResRef": { + "type": "resref", + "value": "hplate001" + } +} diff --git a/src/module/uti/hplate101.uti.json b/src/module/uti/hplate101.uti.json new file mode 100644 index 0000000..0f56345 --- /dev/null +++ b/src/module/uti/hplate101.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 494 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 33 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 21 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Half Plate +1", + "id": 12839 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hplate101" + }, + "TemplateResRef": { + "type": "resref", + "value": "hplate101" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + } +} diff --git a/src/module/uti/hplate201.uti.json b/src/module/uti/hplate201.uti.json new file mode 100644 index 0000000..8d3e15e --- /dev/null +++ b/src/module/uti/hplate201.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 33 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 21 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Half Plate +2", + "id": 12839 + } + }, + "Metal1Color": { + "type": "byte", + "value": 14 + }, + "Metal2Color": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hplate201" + }, + "TemplateResRef": { + "type": "resref", + "value": "hplate201" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 2 + } + } + ] + } +} diff --git a/src/module/uti/hplate301.uti.json b/src/module/uti/hplate301.uti.json new file mode 100644 index 0000000..6613a9a --- /dev/null +++ b/src/module/uti/hplate301.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2338 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 33 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 21 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Half Plate +3", + "id": 12839 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hplate301" + }, + "TemplateResRef": { + "type": "resref", + "value": "hplate301" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 3 + } + } + ] + } +} diff --git a/src/module/uti/hplate401.uti.json b/src/module/uti/hplate401.uti.json new file mode 100644 index 0000000..2013d22 --- /dev/null +++ b/src/module/uti/hplate401.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3830 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 33 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 21 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Half Plate +4", + "id": 12839 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hplate401" + }, + "TemplateResRef": { + "type": "resref", + "value": "hplate401" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4 + } + } + ] + } +} diff --git a/src/module/uti/hplate501.uti.json b/src/module/uti/hplate501.uti.json new file mode 100644 index 0000000..018d47d --- /dev/null +++ b/src/module/uti/hplate501.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5702 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 9 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 33 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 21 + }, + "Cloth2Color": { + "type": "byte", + "value": 21 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Half Plate +5", + "id": 12839 + } + }, + "Metal1Color": { + "type": "byte", + "value": 49 + }, + "Metal2Color": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hplate501" + }, + "TemplateResRef": { + "type": "resref", + "value": "hplate501" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 5 + } + } + ] + } +} diff --git a/src/module/uti/hxbow001.uti.json b/src/module/uti/hxbow001.uti.json new file mode 100644 index 0000000..0d32079 --- /dev/null +++ b/src/module/uti/hxbow001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 6 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Crossbow", + "id": 173 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hxbow001" + }, + "TemplateResRef": { + "type": "resref", + "value": "hxbow001" + } +} diff --git a/src/module/uti/hxbow101.uti.json b/src/module/uti/hxbow101.uti.json new file mode 100644 index 0000000..6bcb638 --- /dev/null +++ b/src/module/uti/hxbow101.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1846 + }, + "BaseItem": { + "type": "int", + "value": 6 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Crossbow +1", + "id": 173 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hxbow101" + }, + "TemplateResRef": { + "type": "resref", + "value": "hxbow101" + } +} diff --git a/src/module/uti/hxbow201.uti.json b/src/module/uti/hxbow201.uti.json new file mode 100644 index 0000000..fe713b4 --- /dev/null +++ b/src/module/uti/hxbow201.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 6446 + }, + "BaseItem": { + "type": "int", + "value": 6 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Crossbow +2", + "id": 173 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hxbow201" + }, + "TemplateResRef": { + "type": "resref", + "value": "hxbow201" + } +} diff --git a/src/module/uti/hxbow301.uti.json b/src/module/uti/hxbow301.uti.json new file mode 100644 index 0000000..5dde409 --- /dev/null +++ b/src/module/uti/hxbow301.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14046 + }, + "BaseItem": { + "type": "int", + "value": 6 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Crossbow +3", + "id": 173 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hxbow301" + }, + "TemplateResRef": { + "type": "resref", + "value": "hxbow301" + } +} diff --git a/src/module/uti/hxbow401.uti.json b/src/module/uti/hxbow401.uti.json new file mode 100644 index 0000000..36aa127 --- /dev/null +++ b/src/module/uti/hxbow401.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 10646 + }, + "BaseItem": { + "type": "int", + "value": 6 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Crossbow +4", + "id": 173 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "PaletteID": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hxbow401" + }, + "TemplateResRef": { + "type": "resref", + "value": "hxbow401" + } +} diff --git a/src/module/uti/hxbow501.uti.json b/src/module/uti/hxbow501.uti.json new file mode 100644 index 0000000..131bdc8 --- /dev/null +++ b/src/module/uti/hxbow501.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 32767 + }, + "BaseItem": { + "type": "int", + "value": 6 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 44871 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heavy Crossbow +5", + "id": 173 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "hxbow501" + }, + "TemplateResRef": { + "type": "resref", + "value": "hxbow501" + } +} diff --git a/src/module/uti/invulmat.uti.json b/src/module/uti/invulmat.uti.json new file mode 100644 index 0000000..f4a7a2e --- /dev/null +++ b/src/module/uti/invulmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add +1/5 Damage Reduction to a suit of armor.\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nThis material requires the craftsman to be a level 18 spell caster with the Stone Skin spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Invulerability Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 82 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "invulmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "invulmat" + } +} diff --git a/src/module/uti/it_torch002.uti.json b/src/module/uti/it_torch002.uti.json new file mode 100644 index 0000000..16e132b --- /dev/null +++ b/src/module/uti/it_torch002.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Torch", + "id": 180 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 20 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "NW_IT_TORCH001" + }, + "TemplateResRef": { + "type": "resref", + "value": "it_torch002" + } +} diff --git a/src/module/uti/ivoryoxhorn1.uti.json b/src/module/uti/ivoryoxhorn1.uti.json new file mode 100644 index 0000000..1ad4da6 --- /dev/null +++ b/src/module/uti/ivoryoxhorn1.uti.json @@ -0,0 +1,142 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 70 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 30420 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ivory Ox Horn 1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 63 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 28 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "IvoryOxHorn1" + }, + "TemplateResRef": { + "type": "resref", + "value": "ivoryoxhorn1" + } +} diff --git a/src/module/uti/ivoryoxhorn2.uti.json b/src/module/uti/ivoryoxhorn2.uti.json new file mode 100644 index 0000000..0cb892b --- /dev/null +++ b/src/module/uti/ivoryoxhorn2.uti.json @@ -0,0 +1,140 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 69 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 63844 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ivory Ox Horn 2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 63 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 19 + }, + "CostValue": { + "type": "word", + "value": 18 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 77 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "IvoryOxHorn2" + }, + "TemplateResRef": { + "type": "resref", + "value": "ivoryoxhorn2" + } +} diff --git a/src/module/uti/ivoryoxskin.uti.json b/src/module/uti/ivoryoxskin.uti.json new file mode 100644 index 0000000..538071d --- /dev/null +++ b/src/module/uti/ivoryoxskin.uti.json @@ -0,0 +1,202 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 137475 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ivory Ox Skin" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 14 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 71 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "IvoryOxSkin" + }, + "TemplateResRef": { + "type": "resref", + "value": "ivoryoxskin" + } +} diff --git a/src/module/uti/kama001.uti.json b/src/module/uti/kama001.uti.json new file mode 100644 index 0000000..c485ac2 --- /dev/null +++ b/src/module/uti/kama001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 40 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kama", + "id": 1534 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kama001" + }, + "TemplateResRef": { + "type": "resref", + "value": "kama001" + } +} diff --git a/src/module/uti/kama101.uti.json b/src/module/uti/kama101.uti.json new file mode 100644 index 0000000..9d83bda --- /dev/null +++ b/src/module/uti/kama101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 680 + }, + "BaseItem": { + "type": "int", + "value": 40 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kama +1", + "id": 1534 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kama101" + }, + "TemplateResRef": { + "type": "resref", + "value": "kama101" + } +} diff --git a/src/module/uti/kama201.uti.json b/src/module/uti/kama201.uti.json new file mode 100644 index 0000000..177505d --- /dev/null +++ b/src/module/uti/kama201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1080 + }, + "BaseItem": { + "type": "int", + "value": 40 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kama +2", + "id": 1534 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kama201" + }, + "TemplateResRef": { + "type": "resref", + "value": "kama201" + } +} diff --git a/src/module/uti/kama301.uti.json b/src/module/uti/kama301.uti.json new file mode 100644 index 0000000..2560314 --- /dev/null +++ b/src/module/uti/kama301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1478 + }, + "BaseItem": { + "type": "int", + "value": 40 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kama +3", + "id": 1534 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kama301" + }, + "TemplateResRef": { + "type": "resref", + "value": "kama301" + } +} diff --git a/src/module/uti/kama401.uti.json b/src/module/uti/kama401.uti.json new file mode 100644 index 0000000..879ae86 --- /dev/null +++ b/src/module/uti/kama401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1878 + }, + "BaseItem": { + "type": "int", + "value": 40 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kama +4", + "id": 1534 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kama401" + }, + "TemplateResRef": { + "type": "resref", + "value": "kama401" + } +} diff --git a/src/module/uti/kama402.uti.json b/src/module/uti/kama402.uti.json new file mode 100644 index 0000000..5688189 --- /dev/null +++ b/src/module/uti/kama402.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2278 + }, + "BaseItem": { + "type": "int", + "value": 40 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50302 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kama +5", + "id": 1534 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kama401" + }, + "TemplateResRef": { + "type": "resref", + "value": "kama402" + } +} diff --git a/src/module/uti/katana001.uti.json b/src/module/uti/katana001.uti.json new file mode 100644 index 0000000..d102c2e --- /dev/null +++ b/src/module/uti/katana001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 41 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 80 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Katana", + "id": 1535 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "katana001" + }, + "TemplateResRef": { + "type": "resref", + "value": "katana001" + } +} diff --git a/src/module/uti/katana101.uti.json b/src/module/uti/katana101.uti.json new file mode 100644 index 0000000..020d809 --- /dev/null +++ b/src/module/uti/katana101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 682 + }, + "BaseItem": { + "type": "int", + "value": 41 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2380 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Katana +1", + "id": 1535 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "katana101" + }, + "TemplateResRef": { + "type": "resref", + "value": "katana101" + } +} diff --git a/src/module/uti/katana201.uti.json b/src/module/uti/katana201.uti.json new file mode 100644 index 0000000..fdcbf96 --- /dev/null +++ b/src/module/uti/katana201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1082 + }, + "BaseItem": { + "type": "int", + "value": 41 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8380 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Katana +2", + "id": 1535 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "katana201" + }, + "TemplateResRef": { + "type": "resref", + "value": "katana201" + } +} diff --git a/src/module/uti/katana301.uti.json b/src/module/uti/katana301.uti.json new file mode 100644 index 0000000..5a503eb --- /dev/null +++ b/src/module/uti/katana301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1480 + }, + "BaseItem": { + "type": "int", + "value": 41 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18380 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Katana +3", + "id": 1535 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "katana301" + }, + "TemplateResRef": { + "type": "resref", + "value": "katana301" + } +} diff --git a/src/module/uti/katana401.uti.json b/src/module/uti/katana401.uti.json new file mode 100644 index 0000000..01a0cd4 --- /dev/null +++ b/src/module/uti/katana401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1880 + }, + "BaseItem": { + "type": "int", + "value": 41 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32380 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Katana +4", + "id": 1535 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "katana401" + }, + "TemplateResRef": { + "type": "resref", + "value": "katana401" + } +} diff --git a/src/module/uti/katana501.uti.json b/src/module/uti/katana501.uti.json new file mode 100644 index 0000000..bee4e5a --- /dev/null +++ b/src/module/uti/katana501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2280 + }, + "BaseItem": { + "type": "int", + "value": 41 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50380 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Katana +5", + "id": 1535 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "katana501" + }, + "TemplateResRef": { + "type": "resref", + "value": "katana501" + } +} diff --git a/src/module/uti/keenmat.uti.json b/src/module/uti/keenmat.uti.json new file mode 100644 index 0000000..45838fc --- /dev/null +++ b/src/module/uti/keenmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material will doube the critical threat range of a slashing melee weapon.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 10th level spell caster, with Keen Edge memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Keen Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "keenmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "keenmat" + } +} diff --git a/src/module/uti/kukri001.uti.json b/src/module/uti/kukri001.uti.json new file mode 100644 index 0000000..41bbfc7 --- /dev/null +++ b/src/module/uti/kukri001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 42 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kukri", + "id": 1536 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kukri001" + }, + "TemplateResRef": { + "type": "resref", + "value": "kukri001" + } +} diff --git a/src/module/uti/kukri101.uti.json b/src/module/uti/kukri101.uti.json new file mode 100644 index 0000000..48e7330 --- /dev/null +++ b/src/module/uti/kukri101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 674 + }, + "BaseItem": { + "type": "int", + "value": 42 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kukri +1", + "id": 1536 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kukri101" + }, + "TemplateResRef": { + "type": "resref", + "value": "kukri101" + } +} diff --git a/src/module/uti/kukri201.uti.json b/src/module/uti/kukri201.uti.json new file mode 100644 index 0000000..fe11845 --- /dev/null +++ b/src/module/uti/kukri201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1074 + }, + "BaseItem": { + "type": "int", + "value": 42 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kukri +2", + "id": 1536 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kukri201" + }, + "TemplateResRef": { + "type": "resref", + "value": "kukri201" + } +} diff --git a/src/module/uti/kukri301.uti.json b/src/module/uti/kukri301.uti.json new file mode 100644 index 0000000..3247555 --- /dev/null +++ b/src/module/uti/kukri301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1472 + }, + "BaseItem": { + "type": "int", + "value": 42 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kukri +3", + "id": 1536 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kukri301" + }, + "TemplateResRef": { + "type": "resref", + "value": "kukri301" + } +} diff --git a/src/module/uti/kukri401.uti.json b/src/module/uti/kukri401.uti.json new file mode 100644 index 0000000..27ce52a --- /dev/null +++ b/src/module/uti/kukri401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1872 + }, + "BaseItem": { + "type": "int", + "value": 42 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kukri +4", + "id": 1536 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kukri401" + }, + "TemplateResRef": { + "type": "resref", + "value": "kukri401" + } +} diff --git a/src/module/uti/kukri501.uti.json b/src/module/uti/kukri501.uti.json new file mode 100644 index 0000000..abca453 --- /dev/null +++ b/src/module/uti/kukri501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2272 + }, + "BaseItem": { + "type": "int", + "value": 42 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Kukri +5", + "id": 1536 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "kukri501" + }, + "TemplateResRef": { + "type": "resref", + "value": "kukri501" + } +} diff --git a/src/module/uti/lawfulmat.uti.json b/src/module/uti/lawfulmat.uti.json new file mode 100644 index 0000000..7d39da3 --- /dev/null +++ b/src/module/uti/lawfulmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material can only be added to a weapon by a lawful aligned character.\n\nIt provides +2d6 divine damage to any chaotic creature.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 7th level spell caster with the Shield of Law spell." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lawful Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 38 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lawfulmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "lawfulmat" + } +} diff --git a/src/module/uti/lbow001.uti.json b/src/module/uti/lbow001.uti.json new file mode 100644 index 0000000..2c6e330 --- /dev/null +++ b/src/module/uti/lbow001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longbow", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lbow001" + }, + "TemplateResRef": { + "type": "resref", + "value": "lbow001" + } +} diff --git a/src/module/uti/lbow101.uti.json b/src/module/uti/lbow101.uti.json new file mode 100644 index 0000000..7f24a3d --- /dev/null +++ b/src/module/uti/lbow101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1821 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longbow +1", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lbow101" + }, + "TemplateResRef": { + "type": "resref", + "value": "lbow101" + } +} diff --git a/src/module/uti/lbow201.uti.json b/src/module/uti/lbow201.uti.json new file mode 100644 index 0000000..2bbdf98 --- /dev/null +++ b/src/module/uti/lbow201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 6421 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longbow +2", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lbow201" + }, + "TemplateResRef": { + "type": "resref", + "value": "lbow201" + } +} diff --git a/src/module/uti/lbow301.uti.json b/src/module/uti/lbow301.uti.json new file mode 100644 index 0000000..719d350 --- /dev/null +++ b/src/module/uti/lbow301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14021 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longbow +3", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lbow301" + }, + "TemplateResRef": { + "type": "resref", + "value": "lbow301" + } +} diff --git a/src/module/uti/lbow401.uti.json b/src/module/uti/lbow401.uti.json new file mode 100644 index 0000000..102d4c3 --- /dev/null +++ b/src/module/uti/lbow401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 24621 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longbow +4", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lbow401" + }, + "TemplateResRef": { + "type": "resref", + "value": "lbow401" + } +} diff --git a/src/module/uti/lbow501.uti.json b/src/module/uti/lbow501.uti.json new file mode 100644 index 0000000..305e24c --- /dev/null +++ b/src/module/uti/lbow501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 32767 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 44921 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longbow +5", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lbow501" + }, + "TemplateResRef": { + "type": "resref", + "value": "lbow501" + } +} diff --git a/src/module/uti/lbow601.uti.json b/src/module/uti/lbow601.uti.json new file mode 100644 index 0000000..4cd8ccd --- /dev/null +++ b/src/module/uti/lbow601.uti.json @@ -0,0 +1,242 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1661 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 27875 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Oathbow", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 57 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 14 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 61 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 62 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 62 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lbow601" + }, + "TemplateResRef": { + "type": "resref", + "value": "lbow601" + } +} diff --git a/src/module/uti/leather001.uti.json b/src/module/uti/leather001.uti.json new file mode 100644 index 0000000..1caab5c --- /dev/null +++ b/src/module/uti/leather001.uti.json @@ -0,0 +1,174 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 16 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 7 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Leather Armor", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "leather001" + }, + "TemplateResRef": { + "type": "resref", + "value": "leather001" + } +} diff --git a/src/module/uti/leather101.uti.json b/src/module/uti/leather101.uti.json new file mode 100644 index 0000000..fd51951 --- /dev/null +++ b/src/module/uti/leather101.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 494 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 16 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 7 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1160 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 5 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Leather Armor +1", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "leather101" + }, + "TemplateResRef": { + "type": "resref", + "value": "leather101" + } +} diff --git a/src/module/uti/leather201.uti.json b/src/module/uti/leather201.uti.json new file mode 100644 index 0000000..f1eeef1 --- /dev/null +++ b/src/module/uti/leather201.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 16 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 7 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4160 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 3 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Leather Armor +2", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "leather201" + }, + "TemplateResRef": { + "type": "resref", + "value": "leather201" + } +} diff --git a/src/module/uti/leather301.uti.json b/src/module/uti/leather301.uti.json new file mode 100644 index 0000000..16982ca --- /dev/null +++ b/src/module/uti/leather301.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2338 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 49 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 7 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 9160 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 3 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Leather Armor +3", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "leather301" + }, + "TemplateResRef": { + "type": "resref", + "value": "leather301" + } +} diff --git a/src/module/uti/leather401.uti.json b/src/module/uti/leather401.uti.json new file mode 100644 index 0000000..5e5f27b --- /dev/null +++ b/src/module/uti/leather401.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3830 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 49 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 7 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 16160 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 6 + }, + "Leather2Color": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Leather Armor +4", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "leather401" + }, + "TemplateResRef": { + "type": "resref", + "value": "leather401" + } +} diff --git a/src/module/uti/leather501.uti.json b/src/module/uti/leather501.uti.json new file mode 100644 index 0000000..dcec46c --- /dev/null +++ b/src/module/uti/leather501.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5702 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 16 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 49 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 3 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25160 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 2 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Leather Armor +5", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "leather501" + }, + "TemplateResRef": { + "type": "resref", + "value": "leather501" + } +} diff --git a/src/module/uti/lflail001.uti.json b/src/module/uti/lflail001.uti.json new file mode 100644 index 0000000..dedcdb1 --- /dev/null +++ b/src/module/uti/lflail001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 4 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Flail", + "id": 176 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 40 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lflail001" + }, + "TemplateResRef": { + "type": "resref", + "value": "lflail001" + } +} diff --git a/src/module/uti/lflail101.uti.json b/src/module/uti/lflail101.uti.json new file mode 100644 index 0000000..efec4b7 --- /dev/null +++ b/src/module/uti/lflail101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 674 + }, + "BaseItem": { + "type": "int", + "value": 4 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Flail +1", + "id": 176 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 40 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lflail101" + }, + "TemplateResRef": { + "type": "resref", + "value": "lflail101" + } +} diff --git a/src/module/uti/lflail201.uti.json b/src/module/uti/lflail201.uti.json new file mode 100644 index 0000000..495e49d --- /dev/null +++ b/src/module/uti/lflail201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1074 + }, + "BaseItem": { + "type": "int", + "value": 4 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Flail +2", + "id": 176 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 40 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lflail201" + }, + "TemplateResRef": { + "type": "resref", + "value": "lflail201" + } +} diff --git a/src/module/uti/lflail301.uti.json b/src/module/uti/lflail301.uti.json new file mode 100644 index 0000000..79e0df3 --- /dev/null +++ b/src/module/uti/lflail301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1472 + }, + "BaseItem": { + "type": "int", + "value": 4 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Flail +3", + "id": 176 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 40 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lflail301" + }, + "TemplateResRef": { + "type": "resref", + "value": "lflail301" + } +} diff --git a/src/module/uti/lflail401.uti.json b/src/module/uti/lflail401.uti.json new file mode 100644 index 0000000..47cb1dd --- /dev/null +++ b/src/module/uti/lflail401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1872 + }, + "BaseItem": { + "type": "int", + "value": 4 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Flail +4", + "id": 176 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 40 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lflail401" + }, + "TemplateResRef": { + "type": "resref", + "value": "lflail401" + } +} diff --git a/src/module/uti/lflail501.uti.json b/src/module/uti/lflail501.uti.json new file mode 100644 index 0000000..9b96e91 --- /dev/null +++ b/src/module/uti/lflail501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2272 + }, + "BaseItem": { + "type": "int", + "value": 4 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Flail +5", + "id": 176 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 40 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lflail501" + }, + "TemplateResRef": { + "type": "resref", + "value": "lflail501" + } +} diff --git a/src/module/uti/lfortmat.uti.json b/src/module/uti/lfortmat.uti.json new file mode 100644 index 0000000..e0acdbb --- /dev/null +++ b/src/module/uti/lfortmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add immunity to Sneak Attacks to armor or shields.\n\nAdding this ability costs as much as adding +1 enchantment to the item.\n\nUnlike most materials this one requires no spells to activate." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Fortification Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 89 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lfortmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "lfortmat" + } +} diff --git a/src/module/uti/lglammat.uti.json b/src/module/uti/lglammat.uti.json new file mode 100644 index 0000000..7a0e4a2 --- /dev/null +++ b/src/module/uti/lglammat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add light to a suit of armor or shield.\n\nAdding this ability costs as much as adding +1 enchantment to the item.\n\nUnlike most materials this one requires no spells to activate." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Casting Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 73 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lglammat" + }, + "TemplateResRef": { + "type": "resref", + "value": "lglammat" + } +} diff --git a/src/module/uti/lhammer001.uti.json b/src/module/uti/lhammer001.uti.json new file mode 100644 index 0000000..ac8d61a --- /dev/null +++ b/src/module/uti/lhammer001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 37 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Hammer", + "id": 1531 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lhammer001" + }, + "TemplateResRef": { + "type": "resref", + "value": "lhammer001" + } +} diff --git a/src/module/uti/lhammer101.uti.json b/src/module/uti/lhammer101.uti.json new file mode 100644 index 0000000..86b15c8 --- /dev/null +++ b/src/module/uti/lhammer101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 681 + }, + "BaseItem": { + "type": "int", + "value": 37 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Hammer +1", + "id": 1531 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lhammer101" + }, + "TemplateResRef": { + "type": "resref", + "value": "lhammer101" + } +} diff --git a/src/module/uti/lhammer201.uti.json b/src/module/uti/lhammer201.uti.json new file mode 100644 index 0000000..9fb7d1a --- /dev/null +++ b/src/module/uti/lhammer201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1081 + }, + "BaseItem": { + "type": "int", + "value": 37 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Hammer +2", + "id": 1531 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lhammer201" + }, + "TemplateResRef": { + "type": "resref", + "value": "lhammer201" + } +} diff --git a/src/module/uti/lhammer301.uti.json b/src/module/uti/lhammer301.uti.json new file mode 100644 index 0000000..5e77513 --- /dev/null +++ b/src/module/uti/lhammer301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1479 + }, + "BaseItem": { + "type": "int", + "value": 37 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Hammer +3", + "id": 1531 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lhammer301" + }, + "TemplateResRef": { + "type": "resref", + "value": "lhammer301" + } +} diff --git a/src/module/uti/lhammer401.uti.json b/src/module/uti/lhammer401.uti.json new file mode 100644 index 0000000..9587280 --- /dev/null +++ b/src/module/uti/lhammer401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1879 + }, + "BaseItem": { + "type": "int", + "value": 37 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Hammer +4", + "id": 1531 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lhammer401" + }, + "TemplateResRef": { + "type": "resref", + "value": "lhammer401" + } +} diff --git a/src/module/uti/lhammer501.uti.json b/src/module/uti/lhammer501.uti.json new file mode 100644 index 0000000..f9a5d7e --- /dev/null +++ b/src/module/uti/lhammer501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2279 + }, + "BaseItem": { + "type": "int", + "value": 37 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Hammer +5", + "id": 1531 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lhammer501" + }, + "TemplateResRef": { + "type": "resref", + "value": "lhammer501" + } +} diff --git a/src/module/uti/lshield001.uti.json b/src/module/uti/lshield001.uti.json new file mode 100644 index 0000000..2b030ec --- /dev/null +++ b/src/module/uti/lshield001.uti.json @@ -0,0 +1,78 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Large Shield", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield001" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield001" + } +} diff --git a/src/module/uti/lshield101.uti.json b/src/module/uti/lshield101.uti.json new file mode 100644 index 0000000..6fb67a3 --- /dev/null +++ b/src/module/uti/lshield101.uti.json @@ -0,0 +1,112 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 464 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1170 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Large Shield +1", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield101" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield101" + } +} diff --git a/src/module/uti/lshield201.uti.json b/src/module/uti/lshield201.uti.json new file mode 100644 index 0000000..9381c99 --- /dev/null +++ b/src/module/uti/lshield201.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1196 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4170 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Large Shield +2", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield201" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield201" + } +} diff --git a/src/module/uti/lshield301.uti.json b/src/module/uti/lshield301.uti.json new file mode 100644 index 0000000..c1f2f70 --- /dev/null +++ b/src/module/uti/lshield301.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2308 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9170 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Large Shield +3", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield301" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield301" + } +} diff --git a/src/module/uti/lshield401.uti.json b/src/module/uti/lshield401.uti.json new file mode 100644 index 0000000..b3b7f4d --- /dev/null +++ b/src/module/uti/lshield401.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3800 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16170 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Large Shield +4", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield401" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield401" + } +} diff --git a/src/module/uti/lshield501.uti.json b/src/module/uti/lshield501.uti.json new file mode 100644 index 0000000..8ab5843 --- /dev/null +++ b/src/module/uti/lshield501.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5672 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25170 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Large Shield +5", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield501" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield501" + } +} diff --git a/src/module/uti/lshield601.uti.json b/src/module/uti/lshield601.uti.json new file mode 100644 index 0000000..b58824b --- /dev/null +++ b/src/module/uti/lshield601.uti.json @@ -0,0 +1,114 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 880 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1020 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This shield has no armor check penalty." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mithral Large Shield", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield601" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield601" + } +} diff --git a/src/module/uti/lshield602.uti.json b/src/module/uti/lshield602.uti.json new file mode 100644 index 0000000..c12d843 --- /dev/null +++ b/src/module/uti/lshield602.uti.json @@ -0,0 +1,112 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1464 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2170 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Adamanite Shield", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield602" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield602" + } +} diff --git a/src/module/uti/lshield603.uti.json b/src/module/uti/lshield603.uti.json new file mode 100644 index 0000000..3bb2016 --- /dev/null +++ b/src/module/uti/lshield603.uti.json @@ -0,0 +1,145 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1963 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2670 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This shield has the ability to surround the user with a barrier of thorns. These thorns do 1d6 piercing damage to anyone who hits the attacker with a melee attack.\n\nThe effect may be used 3 times per day and last for 1 minute." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spined Shield", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield603" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield603" + } +} diff --git a/src/module/uti/lshield604.uti.json b/src/module/uti/lshield604.uti.json new file mode 100644 index 0000000..08b0cc7 --- /dev/null +++ b/src/module/uti/lshield604.uti.json @@ -0,0 +1,145 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 6195 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9170 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This shield has the ability to give it's user 1 extra attack per round, up to a maximum of 5 attacks. The effect lasts for 10 rounds and may be used 3 times per day." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lion's Shield", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield604" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield604" + } +} diff --git a/src/module/uti/lshield605.uti.json b/src/module/uti/lshield605.uti.json new file mode 100644 index 0000000..e7f69ef --- /dev/null +++ b/src/module/uti/lshield605.uti.json @@ -0,0 +1,145 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1547 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 15159 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Winged Shield", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 137 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield605" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield605" + } +} diff --git a/src/module/uti/lshield606.uti.json b/src/module/uti/lshield606.uti.json new file mode 100644 index 0000000..67bad62 --- /dev/null +++ b/src/module/uti/lshield606.uti.json @@ -0,0 +1,176 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14300 + }, + "BaseItem": { + "type": "int", + "value": 56 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50170 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When activated this shield becomes a deadly form of defense. The shield will attempt to destroy any who attack you in melee for 1 round with a large burst of negative energy." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shield of Absorption", + "id": 1550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 11 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 5 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 20 + }, + "Subtype": { + "type": "word", + "value": 12 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lshield606" + }, + "TemplateResRef": { + "type": "resref", + "value": "lshield606" + } +} diff --git a/src/module/uti/lsword001.uti.json b/src/module/uti/lsword001.uti.json new file mode 100644 index 0000000..f389a68 --- /dev/null +++ b/src/module/uti/lsword001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 30 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longsword", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 61 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 36 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword001" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword001" + } +} diff --git a/src/module/uti/lsword101.uti.json b/src/module/uti/lsword101.uti.json new file mode 100644 index 0000000..ceffb8b --- /dev/null +++ b/src/module/uti/lsword101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 667 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longsword +1", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 61 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 36 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword101" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword101" + } +} diff --git a/src/module/uti/lsword201.uti.json b/src/module/uti/lsword201.uti.json new file mode 100644 index 0000000..5b27c48 --- /dev/null +++ b/src/module/uti/lsword201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1067 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longsword +2", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 61 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 36 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword201" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword201" + } +} diff --git a/src/module/uti/lsword301.uti.json b/src/module/uti/lsword301.uti.json new file mode 100644 index 0000000..1cf1bbc --- /dev/null +++ b/src/module/uti/lsword301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1465 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longsword +3", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 61 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 36 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword301" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword301" + } +} diff --git a/src/module/uti/lsword401.uti.json b/src/module/uti/lsword401.uti.json new file mode 100644 index 0000000..e9867e0 --- /dev/null +++ b/src/module/uti/lsword401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1865 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longsword +4", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 61 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "PaletteID": { + "type": "byte", + "value": 36 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword401" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword401" + } +} diff --git a/src/module/uti/lsword501.uti.json b/src/module/uti/lsword501.uti.json new file mode 100644 index 0000000..8d0a352 --- /dev/null +++ b/src/module/uti/lsword501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2265 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Longsword +5", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 61 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "PaletteID": { + "type": "byte", + "value": 36 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword501" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword501" + } +} diff --git a/src/module/uti/lsword601.uti.json b/src/module/uti/lsword601.uti.json new file mode 100644 index 0000000..7297f11 --- /dev/null +++ b/src/module/uti/lsword601.uti.json @@ -0,0 +1,213 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2335 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Night Blade", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 64 + }, + "ModelPart2": { + "type": "byte", + "value": 44 + }, + "ModelPart3": { + "type": "byte", + "value": 34 + }, + "PaletteID": { + "type": "byte", + "value": 36 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 43 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 74 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 62 + }, + "Subtype": { + "type": "word", + "value": 5 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword601" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword601" + } +} diff --git a/src/module/uti/lsword602.uti.json b/src/module/uti/lsword602.uti.json new file mode 100644 index 0000000..222c8dd --- /dev/null +++ b/src/module/uti/lsword602.uti.json @@ -0,0 +1,151 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 641 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 30315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sword of Life Stealing", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 64 + }, + "ModelPart2": { + "type": "byte", + "value": 44 + }, + "ModelPart3": { + "type": "byte", + "value": 34 + }, + "PaletteID": { + "type": "byte", + "value": 36 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 67 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword602" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword602" + } +} diff --git a/src/module/uti/lsword603.uti.json b/src/module/uti/lsword603.uti.json new file mode 100644 index 0000000..ecd11e2 --- /dev/null +++ b/src/module/uti/lsword603.uti.json @@ -0,0 +1,211 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9673 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Flame Tongue", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 61 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 36 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 74 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword603" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword603" + } +} diff --git a/src/module/uti/lsword604.uti.json b/src/module/uti/lsword604.uti.json new file mode 100644 index 0000000..a20ea72 --- /dev/null +++ b/src/module/uti/lsword604.uti.json @@ -0,0 +1,273 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 12769 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 52315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sword of Planes", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 61 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 36 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 8 + }, + "Subtype": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 8 + }, + "Subtype": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 8 + }, + "Subtype": { + "type": "word", + "value": 24 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 5 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 83 + }, + "Subtype": { + "type": "word", + "value": 4 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword604" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword604" + } +} diff --git a/src/module/uti/lsword605.uti.json b/src/module/uti/lsword605.uti.json new file mode 100644 index 0000000..293ba24 --- /dev/null +++ b/src/module/uti/lsword605.uti.json @@ -0,0 +1,244 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25065 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 120315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Holy Avenger", + "id": 166 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "ModelPart2": { + "type": "byte", + "value": 52 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 36 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 36 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lsword605" + }, + "TemplateResRef": { + "type": "resref", + "value": "lsword605" + } +} diff --git a/src/module/uti/lxbow001.uti.json b/src/module/uti/lxbow001.uti.json new file mode 100644 index 0000000..66bd82c --- /dev/null +++ b/src/module/uti/lxbow001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 70 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Crossbow", + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lxbow001" + }, + "TemplateResRef": { + "type": "resref", + "value": "lxbow001" + } +} diff --git a/src/module/uti/lxbow101.uti.json b/src/module/uti/lxbow101.uti.json new file mode 100644 index 0000000..34fadba --- /dev/null +++ b/src/module/uti/lxbow101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1861 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Crossbow +1", + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lxbow101" + }, + "TemplateResRef": { + "type": "resref", + "value": "lxbow101" + } +} diff --git a/src/module/uti/lxbow201.uti.json b/src/module/uti/lxbow201.uti.json new file mode 100644 index 0000000..1ce83bc --- /dev/null +++ b/src/module/uti/lxbow201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 6461 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Crossbow +2", + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lxbow201" + }, + "TemplateResRef": { + "type": "resref", + "value": "lxbow201" + } +} diff --git a/src/module/uti/lxbow301.uti.json b/src/module/uti/lxbow301.uti.json new file mode 100644 index 0000000..c269f8a --- /dev/null +++ b/src/module/uti/lxbow301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14061 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Crossbow +3", + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lxbow301" + }, + "TemplateResRef": { + "type": "resref", + "value": "lxbow301" + } +} diff --git a/src/module/uti/lxbow401.uti.json b/src/module/uti/lxbow401.uti.json new file mode 100644 index 0000000..3d3d7bc --- /dev/null +++ b/src/module/uti/lxbow401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 24661 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32335 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Crossbow +4", + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lxbow401" + }, + "TemplateResRef": { + "type": "resref", + "value": "lxbow401" + } +} diff --git a/src/module/uti/lxbow501.uti.json b/src/module/uti/lxbow501.uti.json new file mode 100644 index 0000000..d4d76bc --- /dev/null +++ b/src/module/uti/lxbow501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 32767 + }, + "BaseItem": { + "type": "int", + "value": 7 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 44841 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light Crossbow +5", + "id": 174 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 43 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "PaletteID": { + "type": "byte", + "value": 43 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "lxbow501" + }, + "TemplateResRef": { + "type": "resref", + "value": "lxbow501" + } +} diff --git a/src/module/uti/m1bow001.uti.json b/src/module/uti/m1bow001.uti.json new file mode 100644 index 0000000..d80a242 --- /dev/null +++ b/src/module/uti/m1bow001.uti.json @@ -0,0 +1,122 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 400 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This longbow allows the user to add up to a +1 strength bonus to their damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mighty Longbow ", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 45 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "m1bow001" + }, + "TemplateResRef": { + "type": "resref", + "value": "m1bow001" + } +} diff --git a/src/module/uti/m2bow001.uti.json b/src/module/uti/m2bow001.uti.json new file mode 100644 index 0000000..b615f2c --- /dev/null +++ b/src/module/uti/m2bow001.uti.json @@ -0,0 +1,122 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This longbow allows the user to add up to a +2 strength bonus to their damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mighty Longbow ", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 45 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "m2bow001" + }, + "TemplateResRef": { + "type": "resref", + "value": "m2bow001" + } +} diff --git a/src/module/uti/m3bow001.uti.json b/src/module/uti/m3bow001.uti.json new file mode 100644 index 0000000..0994b72 --- /dev/null +++ b/src/module/uti/m3bow001.uti.json @@ -0,0 +1,122 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This longbow allows the user to add up to a +3 strength bonus to their damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mighty Longbow ", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 45 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "m3bow001" + }, + "TemplateResRef": { + "type": "resref", + "value": "m3bow001" + } +} diff --git a/src/module/uti/m4bow001.uti.json b/src/module/uti/m4bow001.uti.json new file mode 100644 index 0000000..f10718f --- /dev/null +++ b/src/module/uti/m4bow001.uti.json @@ -0,0 +1,122 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2050 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This longbow allows the user to add up to a +4 strength bonus to their damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mighty Longbow ", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 45 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "m4bow001" + }, + "TemplateResRef": { + "type": "resref", + "value": "m4bow001" + } +} diff --git a/src/module/uti/m5bow001.uti.json b/src/module/uti/m5bow001.uti.json new file mode 100644 index 0000000..3112d29 --- /dev/null +++ b/src/module/uti/m5bow001.uti.json @@ -0,0 +1,122 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 8 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This longbow allows the user to add up to a +5 strength bonus to their damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mighty Longbow ", + "id": 170 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 44 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 45 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "m5bow001" + }, + "TemplateResRef": { + "type": "resref", + "value": "m5bow001" + } +} diff --git a/src/module/uti/mace001.uti.json b/src/module/uti/mace001.uti.json new file mode 100644 index 0000000..9f478e5 --- /dev/null +++ b/src/module/uti/mace001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mace", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mace001" + }, + "TemplateResRef": { + "type": "resref", + "value": "mace001" + } +} diff --git a/src/module/uti/mace101.uti.json b/src/module/uti/mace101.uti.json new file mode 100644 index 0000000..b382e95 --- /dev/null +++ b/src/module/uti/mace101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 684 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mace +1", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mace101" + }, + "TemplateResRef": { + "type": "resref", + "value": "mace101" + } +} diff --git a/src/module/uti/mace201.uti.json b/src/module/uti/mace201.uti.json new file mode 100644 index 0000000..d5dfa14 --- /dev/null +++ b/src/module/uti/mace201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1084 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mace +2", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mace201" + }, + "TemplateResRef": { + "type": "resref", + "value": "mace201" + } +} diff --git a/src/module/uti/mace301.uti.json b/src/module/uti/mace301.uti.json new file mode 100644 index 0000000..e7fc11e --- /dev/null +++ b/src/module/uti/mace301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1482 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mace +3", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mace301" + }, + "TemplateResRef": { + "type": "resref", + "value": "mace301" + } +} diff --git a/src/module/uti/mace401.uti.json b/src/module/uti/mace401.uti.json new file mode 100644 index 0000000..79b93a4 --- /dev/null +++ b/src/module/uti/mace401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1882 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mace +4", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mace401" + }, + "TemplateResRef": { + "type": "resref", + "value": "mace401" + } +} diff --git a/src/module/uti/mace501.uti.json b/src/module/uti/mace501.uti.json new file mode 100644 index 0000000..251dc5b --- /dev/null +++ b/src/module/uti/mace501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2282 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mace +5", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mace501" + }, + "TemplateResRef": { + "type": "resref", + "value": "mace501" + } +} diff --git a/src/module/uti/mace601.uti.json b/src/module/uti/mace601.uti.json new file mode 100644 index 0000000..aadfe0f --- /dev/null +++ b/src/module/uti/mace601.uti.json @@ -0,0 +1,153 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5184 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 17812 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mace of Terror", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 144 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mace601" + }, + "TemplateResRef": { + "type": "resref", + "value": "mace601" + } +} diff --git a/src/module/uti/mace602.uti.json b/src/module/uti/mace602.uti.json new file mode 100644 index 0000000..d86e116 --- /dev/null +++ b/src/module/uti/mace602.uti.json @@ -0,0 +1,184 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3782 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 75312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mace of Smiting", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 44 + }, + "PaletteID": { + "type": "byte", + "value": 42 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 8 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 8 + }, + "Subtype": { + "type": "word", + "value": 24 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mace602" + }, + "TemplateResRef": { + "type": "resref", + "value": "mace602" + } +} diff --git a/src/module/uti/mfortmat.uti.json b/src/module/uti/mfortmat.uti.json new file mode 100644 index 0000000..d133cfd --- /dev/null +++ b/src/module/uti/mfortmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add immunity to Critical Hits to armor or shields.\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nUnlike most materials this one requires no spells to activate." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Medium Fortification Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 93 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mfortmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "mfortmat" + } +} diff --git a/src/module/uti/misca001.uti.json b/src/module/uti/misca001.uti.json new file mode 100644 index 0000000..b0aa9c5 --- /dev/null +++ b/src/module/uti/misca001.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This stone is burned out and useless." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Dull Grey)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca001" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca001" + } +} diff --git a/src/module/uti/misca002.uti.json b/src/module/uti/misca002.uti.json new file mode 100644 index 0000000..28dfaff --- /dev/null +++ b/src/module/uti/misca002.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 39 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Will render any boat immobile for upto 1 day.\n\n\n\nSince you don't have a boat.. and don't even know a person who has a boat. You should probably sell this for it's item value." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quaal's Feather Token (Anchor)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca002" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca002" + } +} diff --git a/src/module/uti/misca003.uti.json b/src/module/uti/misca003.uti.json new file mode 100644 index 0000000..c4cd06a --- /dev/null +++ b/src/module/uti/misca003.uti.json @@ -0,0 +1,109 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 85 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 90 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Everburning Torch" + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 4 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca003" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca003" + } +} diff --git a/src/module/uti/misca004.uti.json b/src/module/uti/misca004.uti.json new file mode 100644 index 0000000..2d80f9b --- /dev/null +++ b/src/module/uti/misca004.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 99 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Makes a tree." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quaal's Feather Token (Tree)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca004" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca004" + } +} diff --git a/src/module/uti/misca005.uti.json b/src/module/uti/misca005.uti.json new file mode 100644 index 0000000..d7207a5 --- /dev/null +++ b/src/module/uti/misca005.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 189 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Would cause a gentle breeze... If you were not on dry land that is." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quaal's Feather Token (Fan)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca005" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca005" + } +} diff --git a/src/module/uti/misca006.uti.json b/src/module/uti/misca006.uti.json new file mode 100644 index 0000000..db0c9e8 --- /dev/null +++ b/src/module/uti/misca006.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 249 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "No you don't get this from shaking a thief... No matter how hard you try.\n\nBut when used it gives +5 to Hide and Move Silent Checks for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Thief's Dust" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca006" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca006" + } +} diff --git a/src/module/uti/misca007.uti.json b/src/module/uti/misca007.uti.json new file mode 100644 index 0000000..e0165fb --- /dev/null +++ b/src/module/uti/misca007.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 299 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Makes a bird." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quaal's Feather Token (Bird)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca007" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca007" + } +} diff --git a/src/module/uti/misca008.uti.json b/src/module/uti/misca008.uti.json new file mode 100644 index 0000000..756c6a3 --- /dev/null +++ b/src/module/uti/misca008.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 439 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 450 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item would create a good size boat capible holding your entire party, everyone's gear and your horses.\n\nHowever since there are no boats your just gonna have to sell this for it's item value." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quaal's Feather Token (Boat)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca008" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca008" + } +} diff --git a/src/module/uti/misca009.uti.json b/src/module/uti/misca009.uti.json new file mode 100644 index 0000000..1bdc778 --- /dev/null +++ b/src/module/uti/misca009.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 499 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This dust will add +10 to your hide and persuade checks for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dust of Illusion" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca009" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca009" + } +} diff --git a/src/module/uti/misca010.uti.json b/src/module/uti/misca010.uti.json new file mode 100644 index 0000000..b05642c --- /dev/null +++ b/src/module/uti/misca010.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 99 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Prayer Beads (Blessing)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 11 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca010" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca010" + } +} diff --git a/src/module/uti/misca011.uti.json b/src/module/uti/misca011.uti.json new file mode 100644 index 0000000..4b8b106 --- /dev/null +++ b/src/module/uti/misca011.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 601 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quaal's Feather Token (Whip)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 113 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca011" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca011" + } +} diff --git a/src/module/uti/misca012.uti.json b/src/module/uti/misca012.uti.json new file mode 100644 index 0000000..fa13e63 --- /dev/null +++ b/src/module/uti/misca012.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 797 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this item is used on a golem the golem loses all of it's normal damage reduction. Making it vulnerable to even the most mundane of weapons." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scarab of Golem Bane (Flesh)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca012" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca012" + } +} diff --git a/src/module/uti/misca013.uti.json b/src/module/uti/misca013.uti.json new file mode 100644 index 0000000..b3f9a08 --- /dev/null +++ b/src/module/uti/misca013.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 899 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 900 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This bag is full of little hairy balls. When 1 is thrown a random creature will be summoned there to fight for you. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bag of Tricks (Grey)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca013" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca013" + } +} diff --git a/src/module/uti/misca014.uti.json b/src/module/uti/misca014.uti.json new file mode 100644 index 0000000..488fceb --- /dev/null +++ b/src/module/uti/misca014.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 899 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 900 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Nothing cleans up a spill like this stuff. Course then you have to get the dust up....\n\nWhere it really shines is when used against a water elemental. The elemental is forced to make a Fortitude save DC:18 or die. Even if it makes the save it takes 5d6 damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dust of Dryness" + } + }, + "ModelPart1": { + "type": "byte", + "value": 26 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca014" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca014" + } +} diff --git a/src/module/uti/misca015.uti.json b/src/module/uti/misca015.uti.json new file mode 100644 index 0000000..d934927 --- /dev/null +++ b/src/module/uti/misca015.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 343 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Armor +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca015" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca015" + } +} diff --git a/src/module/uti/misca016.uti.json b/src/module/uti/misca016.uti.json new file mode 100644 index 0000000..99a22cb --- /dev/null +++ b/src/module/uti/misca016.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1000 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak provides a +1 modifier to all saving throws." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Resistance +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca016" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca016" + } +} diff --git a/src/module/uti/misca017.uti.json b/src/module/uti/misca017.uti.json new file mode 100644 index 0000000..d3dfeb6 --- /dev/null +++ b/src/module/uti/misca017.uti.json @@ -0,0 +1,135 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 638 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet is a good tool for finding things hiding waiting to ambush you." + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eyes of the Eagle" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 28 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 17 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca017" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca017" + } +} diff --git a/src/module/uti/misca018.uti.json b/src/module/uti/misca018.uti.json new file mode 100644 index 0000000..8380c5d --- /dev/null +++ b/src/module/uti/misca018.uti.json @@ -0,0 +1,135 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 638 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet is useful for finding hidden objects such as secret doors, hidden treasures and traps." + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Minute Seeing" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 17 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 14 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca018" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca018" + } +} diff --git a/src/module/uti/misca019.uti.json b/src/module/uti/misca019.uti.json new file mode 100644 index 0000000..19ea5c6 --- /dev/null +++ b/src/module/uti/misca019.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 996 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Allows the user to open a unlocked door from a safe distance." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hand of the Mage" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca019" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca019" + } +} diff --git a/src/module/uti/misca020.uti.json b/src/module/uti/misca020.uti.json new file mode 100644 index 0000000..4dbd21d --- /dev/null +++ b/src/module/uti/misca020.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store a level 1 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power I" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca020" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca020" + } +} diff --git a/src/module/uti/misca021.uti.json b/src/module/uti/misca021.uti.json new file mode 100644 index 0000000..7bb72ad --- /dev/null +++ b/src/module/uti/misca021.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 359 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Phylactery of the Faithful" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca021" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca021" + } +} diff --git a/src/module/uti/misca022.uti.json b/src/module/uti/misca022.uti.json new file mode 100644 index 0000000..1d4a346 --- /dev/null +++ b/src/module/uti/misca022.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this item is used on a golem the golem loses all of it's normal damage reduction. Making it vulnerable to even the most mundane of weapons." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scarab of Golem Bane (Clay)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca022" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca022" + } +} diff --git a/src/module/uti/misca023.uti.json b/src/module/uti/misca023.uti.json new file mode 100644 index 0000000..39f7a4c --- /dev/null +++ b/src/module/uti/misca023.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this item is used the party's rest counters are reset. Allowing rest in the dungeon 1 time." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Stone of Alarm" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca023" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca023" + } +} diff --git a/src/module/uti/misca024.uti.json b/src/module/uti/misca024.uti.json new file mode 100644 index 0000000..0ed00cd --- /dev/null +++ b/src/module/uti/misca024.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1146 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These pipes when played summon rats... Lots of rats and I don't mean your cousin noone mentions type rats. I mean the big, hairy, cheese eating kind... never mind.\n\nOnce summoned the player must make a perform check DC 10. If the player succeeds the Rats will help them. If not not they will attack the poor player." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pipes of the Sewers" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca024" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca024" + } +} diff --git a/src/module/uti/misca025.uti.json b/src/module/uti/misca025.uti.json new file mode 100644 index 0000000..fbb501d --- /dev/null +++ b/src/module/uti/misca025.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1197 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this item is used on a golem the golem loses all of it's normal damage reduction. Making it vulnerable to even the most mundane of weapons." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scarab of Golem Bane (Stone)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca025" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca025" + } +} diff --git a/src/module/uti/misca026.uti.json b/src/module/uti/misca026.uti.json new file mode 100644 index 0000000..bb836bd --- /dev/null +++ b/src/module/uti/misca026.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1339 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Brooch of Shielding" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 97 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca026" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca026" + } +} diff --git a/src/module/uti/misca027.uti.json b/src/module/uti/misca027.uti.json new file mode 100644 index 0000000..08b96d0 --- /dev/null +++ b/src/module/uti/misca027.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1597 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this item is used on a golem the golem loses all of it's normal damage reduction. Making it vulnerable to even the most mundane of weapons." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scarab of Golem Bane (Iron)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca027" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca027" + } +} diff --git a/src/module/uti/misca028.uti.json b/src/module/uti/misca028.uti.json new file mode 100644 index 0000000..c3ab188 --- /dev/null +++ b/src/module/uti/misca028.uti.json @@ -0,0 +1,175 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Fire I" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca028" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca028" + } +} diff --git a/src/module/uti/misca029.uti.json b/src/module/uti/misca029.uti.json new file mode 100644 index 0000000..bfd75b8 --- /dev/null +++ b/src/module/uti/misca029.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1796 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When played properly the sounds of these pipes are so odd that anything that hears it's notes will come to investigate. Of course some creatures are naturally uninvestigative." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pipes of Sounding" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca029" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca029" + } +} diff --git a/src/module/uti/misca030.uti.json b/src/module/uti/misca030.uti.json new file mode 100644 index 0000000..9edac60 --- /dev/null +++ b/src/module/uti/misca030.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1797 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Funny but this quiver never seems to run out of arrows." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quiver of Ehlonna" + } + }, + "ModelPart1": { + "type": "byte", + "value": 47 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca030" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca030" + } +} diff --git a/src/module/uti/misca031.uti.json b/src/module/uti/misca031.uti.json new file mode 100644 index 0000000..ff2f0db --- /dev/null +++ b/src/module/uti/misca031.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1797 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this item is used on a golem the golem loses all of it's normal damage reduction. Making it vulnerable to even the most mundane of weapons." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scarab of Golem Bane (Flesh & Clay)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca031" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca031" + } +} diff --git a/src/module/uti/misca032.uti.json b/src/module/uti/misca032.uti.json new file mode 100644 index 0000000..85fe19b --- /dev/null +++ b/src/module/uti/misca032.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1900 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1910 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Nice set of magic horse shoes that allow a horse to run at double it's normal speed.\n\nOne problem... Seen a horse recently?\nYou should probably sell these to the first sucker you can find." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horseshoes of Speed" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca032" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca032" + } +} diff --git a/src/module/uti/misca033.uti.json b/src/module/uti/misca033.uti.json new file mode 100644 index 0000000..6185d89 --- /dev/null +++ b/src/module/uti/misca033.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1343 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of Natural Armor +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca033" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca033" + } +} diff --git a/src/module/uti/misca034.uti.json b/src/module/uti/misca034.uti.json new file mode 100644 index 0000000..6b3fe03 --- /dev/null +++ b/src/module/uti/misca034.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Some wizard somewhere got hit with a thunderstone decided to get even and made this little toy. Luckily not many of these were ever made, it's rumored their creator dropped one.... \n\n5d6 sonic damage to anything within 15 feet of the target, reflex save DC 16 for half damage. \n\nIn addition everyone affected must then make a fortitude save DC 16 or be deaf for 3d6 minutes." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Magic Thunderstone" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca034" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca034" + } +} diff --git a/src/module/uti/misca035.uti.json b/src/module/uti/misca035.uti.json new file mode 100644 index 0000000..a8a80c2 --- /dev/null +++ b/src/module/uti/misca035.uti.json @@ -0,0 +1,117 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 560 + }, + "BaseItem": { + "type": "int", + "value": 26 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Boots of Elven Kind" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 44 + }, + "ModelPart3": { + "type": "byte", + "value": 34 + }, + "PaletteID": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 8 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca035" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca035" + } +} diff --git a/src/module/uti/misca036.uti.json b/src/module/uti/misca036.uti.json new file mode 100644 index 0000000..a1d6d22 --- /dev/null +++ b/src/module/uti/misca036.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 560 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Elven Kind" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 5 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca036" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca036" + } +} diff --git a/src/module/uti/misca037.uti.json b/src/module/uti/misca037.uti.json new file mode 100644 index 0000000..2e1c078 --- /dev/null +++ b/src/module/uti/misca037.uti.json @@ -0,0 +1,168 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 558 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet is a fine example that people only see and hear what they want too." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Disguise" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 12 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca037" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca037" + } +} diff --git a/src/module/uti/misca038.uti.json b/src/module/uti/misca038.uti.json new file mode 100644 index 0000000..6dbdf46 --- /dev/null +++ b/src/module/uti/misca038.uti.json @@ -0,0 +1,140 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 985 + }, + "BaseItem": { + "type": "int", + "value": 66 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heward's Handy Haversack" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 15 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 32 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca038" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca038" + } +} diff --git a/src/module/uti/misca039.uti.json b/src/module/uti/misca039.uti.json new file mode 100644 index 0000000..ec005e7 --- /dev/null +++ b/src/module/uti/misca039.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1996 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When played properly this horn causes a magical darkness." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horn of Darkness" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca039" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca039" + } +} diff --git a/src/module/uti/misca040.uti.json b/src/module/uti/misca040.uti.json new file mode 100644 index 0000000..c4c5677 --- /dev/null +++ b/src/module/uti/misca040.uti.json @@ -0,0 +1,119 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 560 + }, + "BaseItem": { + "type": "int", + "value": 26 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Boots of the Acrobat" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 44 + }, + "ModelPart3": { + "type": "byte", + "value": 34 + }, + "PaletteID": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 21 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca040" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca040" + } +} diff --git a/src/module/uti/misca041.uti.json b/src/module/uti/misca041.uti.json new file mode 100644 index 0000000..dd1a4a4 --- /dev/null +++ b/src/module/uti/misca041.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2802 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This stuff is so slick it will unglue anything. \n\nFor External Use Only." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Universal Solvent" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 118 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca041" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca041" + } +} diff --git a/src/module/uti/misca042.uti.json b/src/module/uti/misca042.uti.json new file mode 100644 index 0000000..8c3726a --- /dev/null +++ b/src/module/uti/misca042.uti.json @@ -0,0 +1,241 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1757 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 49 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 7 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This vest has more secret compartments than you will ever find and everyone has a lock pick.\n\nIn addition to adding a bonus to open locks the vest itself can be used as a set of master work thief tools. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Vest of Escape", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 9 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca042" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca042" + } +} diff --git a/src/module/uti/misca043.uti.json b/src/module/uti/misca043.uti.json new file mode 100644 index 0000000..16bacf0 --- /dev/null +++ b/src/module/uti/misca043.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 599 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dust of Appearance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 152 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca043" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca043" + } +} diff --git a/src/module/uti/misca044.uti.json b/src/module/uti/misca044.uti.json new file mode 100644 index 0000000..052f556 --- /dev/null +++ b/src/module/uti/misca044.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2196 + }, + "BaseItem": { + "type": "int", + "value": 36 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These gloves are very popular with adventurer's and people of less than honest natures.\n\nThey allow the wearer to store just about any item into a extra dimensional pocket, to be recovered later." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gloves of Storing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca044" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca044" + } +} diff --git a/src/module/uti/misca045.uti.json b/src/module/uti/misca045.uti.json new file mode 100644 index 0000000..c46bbdf --- /dev/null +++ b/src/module/uti/misca045.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 374 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Normally Sovereign Glue would stick just about anything together forever but this batch has been diluted and made into grenades." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sovereign Glue" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 281 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca045" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca045" + } +} diff --git a/src/module/uti/misca046.uti.json b/src/module/uti/misca046.uti.json new file mode 100644 index 0000000..6d10f6a --- /dev/null +++ b/src/module/uti/misca046.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1900 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Candle of Truth" + } + }, + "ModelPart1": { + "type": "byte", + "value": 51 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 243 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca046" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca046" + } +} diff --git a/src/module/uti/misca047.uti.json b/src/module/uti/misca047.uti.json new file mode 100644 index 0000000..c030ed2 --- /dev/null +++ b/src/module/uti/misca047.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1923 + }, + "BaseItem": { + "type": "int", + "value": 66 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Weight Reducing Bag. 40%" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 15 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 32 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca047" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca047" + } +} diff --git a/src/module/uti/misca048.uti.json b/src/module/uti/misca048.uti.json new file mode 100644 index 0000000..a0b9871 --- /dev/null +++ b/src/module/uti/misca048.uti.json @@ -0,0 +1,119 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2409 + }, + "BaseItem": { + "type": "int", + "value": 26 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Boots of Winterlands" + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca048" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca048" + } +} diff --git a/src/module/uti/misca049.uti.json b/src/module/uti/misca049.uti.json new file mode 100644 index 0000000..bfd53f6 --- /dev/null +++ b/src/module/uti/misca049.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2500 + }, + "BaseItem": { + "type": "int", + "value": 26 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "There boots allow the wearer to move twice as fast." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Boots of Striding" + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca049" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca049" + } +} diff --git a/src/module/uti/misca050.uti.json b/src/module/uti/misca050.uti.json new file mode 100644 index 0000000..e63d9be --- /dev/null +++ b/src/module/uti/misca050.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2497 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this item is used on a golem the golem loses all of it's normal damage reduction. Making it vulnerable to even the most mundane of weapons." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scarab of Golem Bane (Any)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca050" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca050" + } +} diff --git a/src/module/uti/misca051.uti.json b/src/module/uti/misca051.uti.json new file mode 100644 index 0000000..0d283e3 --- /dev/null +++ b/src/module/uti/misca051.uti.json @@ -0,0 +1,135 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1158 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet grants the wearer an amazing ability to understand the function of magic items." + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Comprehension" + } + }, + "Metal1Color": { + "type": "byte", + "value": 14 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca051" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca051" + } +} diff --git a/src/module/uti/misca052.uti.json b/src/module/uti/misca052.uti.json new file mode 100644 index 0000000..b87705c --- /dev/null +++ b/src/module/uti/misca052.uti.json @@ -0,0 +1,175 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2700 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 9 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Fire II" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca052" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca052" + } +} diff --git a/src/module/uti/misca053.uti.json b/src/module/uti/misca053.uti.json new file mode 100644 index 0000000..e318e1e --- /dev/null +++ b/src/module/uti/misca053.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2999 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This bag is full of little hairy balls. When 1 is thrown a random creature will be summoned there to fight for you. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bag of Tricks (Rust)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca053" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca053" + } +} diff --git a/src/module/uti/misca054.uti.json b/src/module/uti/misca054.uti.json new file mode 100644 index 0000000..83784fd --- /dev/null +++ b/src/module/uti/misca054.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2998 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This chime will unlock almost any locked object." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chime of Opening" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca054" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca054" + } +} diff --git a/src/module/uti/misca055.uti.json b/src/module/uti/misca055.uti.json new file mode 100644 index 0000000..b567d6b --- /dev/null +++ b/src/module/uti/misca055.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2997 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "You can use this rope on a pit to allow it to be entered. It is also useful for getting friends back to the top of it.\n\nThe real advantage of the rope of climbing though is that you can use it to go back up a pit you have fallen into.\n\nAnother advantage of the rope of climbing is that it is not consumed when used." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rope of Climbing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 103 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 11 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 81 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca055" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca055" + } +} diff --git a/src/module/uti/misca056.uti.json b/src/module/uti/misca056.uti.json new file mode 100644 index 0000000..9eef857 --- /dev/null +++ b/src/module/uti/misca056.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2990 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Nice set of magic horse shoes that allow a horse to run just above the ground even across water.\n\nOne problem... Seen a horse recently?\nYou should probably sell these to the first sucker you can find." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horseshoes of the Zephyr" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca056" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca056" + } +} diff --git a/src/module/uti/misca057.uti.json b/src/module/uti/misca057.uti.json new file mode 100644 index 0000000..5b11796 --- /dev/null +++ b/src/module/uti/misca057.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 698 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dust of Disappearance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 27 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 149 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca057" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca057" + } +} diff --git a/src/module/uti/misca058.uti.json b/src/module/uti/misca058.uti.json new file mode 100644 index 0000000..45af4e9 --- /dev/null +++ b/src/module/uti/misca058.uti.json @@ -0,0 +1,137 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2058 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet is useful for finding hidden objects such as secret doors, hidden treasures and traps." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Detection" + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 14 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca058" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca058" + } +} diff --git a/src/module/uti/misca059.uti.json b/src/module/uti/misca059.uti.json new file mode 100644 index 0000000..7169406 --- /dev/null +++ b/src/module/uti/misca059.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3799 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a very tough bird. If the bird is killed the item is broken. To safely unsummon the bird take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Silver Raven)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca059" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca059" + } +} diff --git a/src/module/uti/misca060.uti.json b/src/module/uti/misca060.uti.json new file mode 100644 index 0000000..d9e11b8 --- /dev/null +++ b/src/module/uti/misca060.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1075 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These bracers give a +2 Armor AC Bonus." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Armor +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca060" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca060" + } +} diff --git a/src/module/uti/misca061.uti.json b/src/module/uti/misca061.uti.json new file mode 100644 index 0000000..639b0c1 --- /dev/null +++ b/src/module/uti/misca061.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 609 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak provides a +2 modifier to all saving throws." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Resistance +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca061" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca061" + } +} diff --git a/src/module/uti/misca062.uti.json b/src/module/uti/misca062.uti.json new file mode 100644 index 0000000..40de655 --- /dev/null +++ b/src/module/uti/misca062.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3121 + }, + "BaseItem": { + "type": "int", + "value": 36 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Despite their name they are actually quite good against anything that goes poke in the night." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gloves of Arrow Deflection" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca062" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca062" + } +} diff --git a/src/module/uti/misca063.uti.json b/src/module/uti/misca063.uti.json new file mode 100644 index 0000000..578352b --- /dev/null +++ b/src/module/uti/misca063.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This stone give +1 Deflection AC modifier." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Dusty Rose Prism)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 73 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca063" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca063" + } +} diff --git a/src/module/uti/misca064.uti.json b/src/module/uti/misca064.uti.json new file mode 100644 index 0000000..03acf7f --- /dev/null +++ b/src/module/uti/misca064.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3998 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 5 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "If applied to a person who is poisoned this will cure it. If applied to a person who is diseased it will be cured. If applied to a person who is hurt they will be healed 1d8+5 damage. If applied to a healthy person it does... nothing.\n\n" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Keoghtom's Ointment" + } + }, + "ModelPart1": { + "type": "byte", + "value": 19 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca064" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca064" + } +} diff --git a/src/module/uti/misca065.uti.json b/src/module/uti/misca065.uti.json new file mode 100644 index 0000000..1f325ae --- /dev/null +++ b/src/module/uti/misca065.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to a level 2 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power II" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca065" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca065" + } +} diff --git a/src/module/uti/misca066.uti.json b/src/module/uti/misca066.uti.json new file mode 100644 index 0000000..614ff76 --- /dev/null +++ b/src/module/uti/misca066.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 197 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Periapt of Proof Against Poison" + } + }, + "ModelPart1": { + "type": "byte", + "value": 18 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 13 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca066" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca066" + } +} diff --git a/src/module/uti/misca067.uti.json b/src/module/uti/misca067.uti.json new file mode 100644 index 0000000..7ea70bc --- /dev/null +++ b/src/module/uti/misca067.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3999 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This stuff has 2 possible uses. If used on a person who has been petrified, turned to stone or otherwise resembles a statue it will return them to flesh. If used on a fleshy person it will give them Stoneskin as per the spell.\n\n" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Stone Salve" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca067" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca067" + } +} diff --git a/src/module/uti/misca068.uti.json b/src/module/uti/misca068.uti.json new file mode 100644 index 0000000..52385d9 --- /dev/null +++ b/src/module/uti/misca068.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 489 + }, + "BaseItem": { + "type": "int", + "value": 36 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gauntlets of Ogre Power" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca068" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca068" + } +} diff --git a/src/module/uti/misca069.uti.json b/src/module/uti/misca069.uti.json new file mode 100644 index 0000000..2d18a8a --- /dev/null +++ b/src/module/uti/misca069.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 489 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Health +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca069" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca069" + } +} diff --git a/src/module/uti/misca070.uti.json b/src/module/uti/misca070.uti.json new file mode 100644 index 0000000..bac5064 --- /dev/null +++ b/src/module/uti/misca070.uti.json @@ -0,0 +1,140 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 489 + }, + "BaseItem": { + "type": "int", + "value": 36 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gauntlets of Dexterity +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca070" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca070" + } +} diff --git a/src/module/uti/misca071.uti.json b/src/module/uti/misca071.uti.json new file mode 100644 index 0000000..55698b8 --- /dev/null +++ b/src/module/uti/misca071.uti.json @@ -0,0 +1,168 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 487 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Intellect +2" + } + }, + "Metal1Color": { + "type": "byte", + "value": 11 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 18 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca071" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca071" + } +} diff --git a/src/module/uti/misca072.uti.json b/src/module/uti/misca072.uti.json new file mode 100644 index 0000000..02a9753 --- /dev/null +++ b/src/module/uti/misca072.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 489 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Periapt of Wisdom +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca072" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca072" + } +} diff --git a/src/module/uti/misca073.uti.json b/src/module/uti/misca073.uti.json new file mode 100644 index 0000000..3049a0e --- /dev/null +++ b/src/module/uti/misca073.uti.json @@ -0,0 +1,146 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 489 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "", + "id": 13768 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Nymph Cloak +2", + "id": 13844 + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca073" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca073" + } +} diff --git a/src/module/uti/misca074.uti.json b/src/module/uti/misca074.uti.json new file mode 100644 index 0000000..f927b3b --- /dev/null +++ b/src/module/uti/misca074.uti.json @@ -0,0 +1,175 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4350 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 19 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Fire III" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 109 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca074" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca074" + } +} diff --git a/src/module/uti/misca075.uti.json b/src/module/uti/misca075.uti.json new file mode 100644 index 0000000..c215f03 --- /dev/null +++ b/src/module/uti/misca075.uti.json @@ -0,0 +1,168 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 987 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet has a funny way of making people agree with what you say while wearing it." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Persuasion" + } + }, + "Metal1Color": { + "type": "byte", + "value": 11 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 15 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca075" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca075" + } +} diff --git a/src/module/uti/misca076.uti.json b/src/module/uti/misca076.uti.json new file mode 100644 index 0000000..10b51de --- /dev/null +++ b/src/module/uti/misca076.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4548 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 7 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4550 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This will cause the taget to be immediately teleported to the user.\n\nThis is a short range teleport good for getting a friend out of the middle of a bunch of monsters." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracelet of Friends" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca076" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca076" + } +} diff --git a/src/module/uti/misca077.uti.json b/src/module/uti/misca077.uti.json new file mode 100644 index 0000000..ce4139a --- /dev/null +++ b/src/module/uti/misca077.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4299 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4900 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Incense of Meditation" + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 46 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca077" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca077" + } +} diff --git a/src/module/uti/misca078.uti.json b/src/module/uti/misca078.uti.json new file mode 100644 index 0000000..2b3ef51 --- /dev/null +++ b/src/module/uti/misca078.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3985 + }, + "BaseItem": { + "type": "int", + "value": 66 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Weight Reducing Bag. 60%" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 15 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 32 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca078" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca078" + } +} diff --git a/src/module/uti/misca079.uti.json b/src/module/uti/misca079.uti.json new file mode 100644 index 0000000..efcae73 --- /dev/null +++ b/src/module/uti/misca079.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Allows the user to rest without need of food." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Clear Spindle)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca079" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca079" + } +} diff --git a/src/module/uti/misca080.uti.json b/src/module/uti/misca080.uti.json new file mode 100644 index 0000000..61d742b --- /dev/null +++ b/src/module/uti/misca080.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2299 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Prayer Beads (Aiding)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca080" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca080" + } +} diff --git a/src/module/uti/misca081.uti.json b/src/module/uti/misca081.uti.json new file mode 100644 index 0000000..1b639d8 --- /dev/null +++ b/src/module/uti/misca081.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2849 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In addition to point blank shot, these bracers offer an additional +1 to hit with a ranged weapon." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracelet of Archery" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca081" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca081" + } +} diff --git a/src/module/uti/misca082.uti.json b/src/module/uti/misca082.uti.json new file mode 100644 index 0000000..8c810d8 --- /dev/null +++ b/src/module/uti/misca082.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5196 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This bottle will surround the opener with dense cloud of smoke that will blot out all light." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eversmoking Bottle" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca082" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca082" + } +} diff --git a/src/module/uti/misca083.uti.json b/src/module/uti/misca083.uti.json new file mode 100644 index 0000000..41f2912 --- /dev/null +++ b/src/module/uti/misca083.uti.json @@ -0,0 +1,175 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5400 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 29 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Fire IV" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca083" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca083" + } +} diff --git a/src/module/uti/misca084.uti.json b/src/module/uti/misca084.uti.json new file mode 100644 index 0000000..b0e7c1b --- /dev/null +++ b/src/module/uti/misca084.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5498 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This spoon can create enough food per day to feed 4 people. Granted the food tastes like cardboard, but even that is better than an empty stomach." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Murlynd's Spoon" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 11 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca084" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca084" + } +} diff --git a/src/module/uti/misca085.uti.json b/src/module/uti/misca085.uti.json new file mode 100644 index 0000000..6706c1f --- /dev/null +++ b/src/module/uti/misca085.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5499 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This is a magic paint set. With it you can paint a door to another room in the dungeon." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Nolzur's Marvelous Pigments" + } + }, + "ModelPart1": { + "type": "byte", + "value": 95 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca085" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca085" + } +} diff --git a/src/module/uti/misca086.uti.json b/src/module/uti/misca086.uti.json new file mode 100644 index 0000000..be569f2 --- /dev/null +++ b/src/module/uti/misca086.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2499 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wind Fan" + } + }, + "ModelPart1": { + "type": "byte", + "value": 98 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 410 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca086" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca086" + } +} diff --git a/src/module/uti/misca087.uti.json b/src/module/uti/misca087.uti.json new file mode 100644 index 0000000..1d12092 --- /dev/null +++ b/src/module/uti/misca087.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5496 + }, + "BaseItem": { + "type": "int", + "value": 26 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These boots will allow the wearer to instantly teleport short distances." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Boots of Blink" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "ModelPart2": { + "type": "byte", + "value": 33 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca087" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca087" + } +} diff --git a/src/module/uti/misca088.uti.json b/src/module/uti/misca088.uti.json new file mode 100644 index 0000000..8a7992e --- /dev/null +++ b/src/module/uti/misca088.uti.json @@ -0,0 +1,241 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5785 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 13 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Allows a person with the Wild Shape ability to use it an additional time per day.\n\nNote: You should use your normal allowance of wild shapes FIRST or this item may malfunction." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 31 + }, + "Leather2Color": { + "type": "byte", + "value": 14 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Druids Vestiment", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca088" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca088" + } +} diff --git a/src/module/uti/misca089.uti.json b/src/module/uti/misca089.uti.json new file mode 100644 index 0000000..2e4f48a --- /dev/null +++ b/src/module/uti/misca089.uti.json @@ -0,0 +1,142 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2937 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 6000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Arachnida" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 167 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 13 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca089" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca089" + } +} diff --git a/src/module/uti/misca090.uti.json b/src/module/uti/misca090.uti.json new file mode 100644 index 0000000..8bf9bc0 --- /dev/null +++ b/src/module/uti/misca090.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4560 + }, + "BaseItem": { + "type": "int", + "value": 36 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 6000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Caster's Gloves" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca090" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca090" + } +} diff --git a/src/module/uti/misca091.uti.json b/src/module/uti/misca091.uti.json new file mode 100644 index 0000000..87bbb8d --- /dev/null +++ b/src/module/uti/misca091.uti.json @@ -0,0 +1,115 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5996 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 6000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This horn will produce a circle of protection vs good/evil depending on the blower's own alignment. If the blower is neutral this item will not function.\n\nThis horn can be used by anyone and the circle will last 1 minute. In the hands of a skilled bard it lasts much longer.", + "id": 62342 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horn of Goodness/Evil", + "id": 62341 + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca091" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca091" + } +} diff --git a/src/module/uti/misca092.uti.json b/src/module/uti/misca092.uti.json new file mode 100644 index 0000000..34e44cb --- /dev/null +++ b/src/module/uti/misca092.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 6150 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 22 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 6150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Fire V" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 109 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca092" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca092" + } +} diff --git a/src/module/uti/misca093.uti.json b/src/module/uti/misca093.uti.json new file mode 100644 index 0000000..712e027 --- /dev/null +++ b/src/module/uti/misca093.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 6299 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 6300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This bag is full of little hairy balls. When 1 is thrown a random creature will be summoned there to fight for you. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bag of Tricks (Tan)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca093" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca093" + } +} diff --git a/src/module/uti/misca094.uti.json b/src/module/uti/misca094.uti.json new file mode 100644 index 0000000..eed8703 --- /dev/null +++ b/src/module/uti/misca094.uti.json @@ -0,0 +1,137 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 6477 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 6480 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet projects a divine light.\n\nUndead take 3d8 damage.\nConstructs take 1d6 damage.\nAll other target take 1d8 damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Circlet of Blasting" + } + }, + "Metal1Color": { + "type": "byte", + "value": 19 + }, + "Metal2Color": { + "type": "byte", + "value": 10 + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca094" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca094" + } +} diff --git a/src/module/uti/misca095.uti.json b/src/module/uti/misca095.uti.json new file mode 100644 index 0000000..177eae7 --- /dev/null +++ b/src/module/uti/misca095.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1999 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 6500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pipes of Haunting" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 241 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca095" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca095" + } +} diff --git a/src/module/uti/misca096.uti.json b/src/module/uti/misca096.uti.json new file mode 100644 index 0000000..eda716a --- /dev/null +++ b/src/module/uti/misca096.uti.json @@ -0,0 +1,365 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 187 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 37 + }, + "Cloth2Color": { + "type": "byte", + "value": 11 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 7000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 3 + }, + "Leather2Color": { + "type": "byte", + "value": 2 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Alchemist's Outfit", + "id": 12835 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca096" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca096" + } +} diff --git a/src/module/uti/misca097.uti.json b/src/module/uti/misca097.uti.json new file mode 100644 index 0000000..602723b --- /dev/null +++ b/src/module/uti/misca097.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 758 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 7200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hand of Glory" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 350 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 243 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 6 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca097" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca097" + } +} diff --git a/src/module/uti/misca098.uti.json b/src/module/uti/misca098.uti.json new file mode 100644 index 0000000..ab20aa2 --- /dev/null +++ b/src/module/uti/misca098.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5823 + }, + "BaseItem": { + "type": "int", + "value": 66 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 7400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Weight Reducing Bag. 80%" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 15 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 32 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "misca098" + }, + "TemplateResRef": { + "type": "resref", + "value": "misca098" + } +} diff --git a/src/module/uti/miscb001.uti.json b/src/module/uti/miscb001.uti.json new file mode 100644 index 0000000..62c5727 --- /dev/null +++ b/src/module/uti/miscb001.uti.json @@ -0,0 +1,152 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7500 + }, + "BaseItem": { + "type": "int", + "value": 26 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 7500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These boots prevent damage from falling into pit traps.\n\nThey also allow the wear to fly back up thru a pit they have fallen into." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Boots of Levitation" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "PaletteID": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb001" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb001" + } +} diff --git a/src/module/uti/miscb002.uti.json b/src/module/uti/miscb002.uti.json new file mode 100644 index 0000000..70a436b --- /dev/null +++ b/src/module/uti/miscb002.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7497 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 7500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The player of this harp can attempt to charm all nearby listeners into thinking that the player is a good friend.\n\nFailure willresult in all listening to attack the offending player.\n\nEveryone is a critic." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Harp of Charming" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb002" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb002" + } +} diff --git a/src/module/uti/miscb003.uti.json b/src/module/uti/miscb003.uti.json new file mode 100644 index 0000000..d40b8a2 --- /dev/null +++ b/src/module/uti/miscb003.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 6499 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 7500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Periapt of Health" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 4 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb003" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb003" + } +} diff --git a/src/module/uti/miscb004.uti.json b/src/module/uti/miscb004.uti.json new file mode 100644 index 0000000..1cf1b5a --- /dev/null +++ b/src/module/uti/miscb004.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7800 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 7800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This candle when burned will give everyone in the user's party +2 to attack rolls, saving throws and skill checks for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Candle of Invocation" + } + }, + "ModelPart1": { + "type": "byte", + "value": 51 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb004" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb004" + } +} diff --git a/src/module/uti/miscb005.uti.json b/src/module/uti/miscb005.uti.json new file mode 100644 index 0000000..1b72b88 --- /dev/null +++ b/src/module/uti/miscb005.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5075 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of Natural Armor +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb005" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb005" + } +} diff --git a/src/module/uti/miscb006.uti.json b/src/module/uti/miscb006.uti.json new file mode 100644 index 0000000..ee1f646 --- /dev/null +++ b/src/module/uti/miscb006.uti.json @@ -0,0 +1,119 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1249 + }, + "BaseItem": { + "type": "int", + "value": 26 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Boots of Speed" + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 137 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb006" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb006" + } +} diff --git a/src/module/uti/miscb007.uti.json b/src/module/uti/miscb007.uti.json new file mode 100644 index 0000000..fc1626d --- /dev/null +++ b/src/module/uti/miscb007.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone gives the Alertness feat." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Dark Blue Rhomboid)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 49 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb007" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb007" + } +} diff --git a/src/module/uti/miscb008.uti.json b/src/module/uti/miscb008.uti.json new file mode 100644 index 0000000..0ce1951 --- /dev/null +++ b/src/module/uti/miscb008.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone gives +2 Dexterity." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Deep Red Sphere)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 64 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb008" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb008" + } +} diff --git a/src/module/uti/miscb009.uti.json b/src/module/uti/miscb009.uti.json new file mode 100644 index 0000000..b99fb83 --- /dev/null +++ b/src/module/uti/miscb009.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone gives +2 Wisdom." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Incandescent Blue Sphere)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 44 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb009" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb009" + } +} diff --git a/src/module/uti/miscb010.uti.json b/src/module/uti/miscb010.uti.json new file mode 100644 index 0000000..cfe18cd --- /dev/null +++ b/src/module/uti/miscb010.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone gives +2 Stength." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Pale Blue Rhomboid)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 49 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb010" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb010" + } +} diff --git a/src/module/uti/miscb011.uti.json b/src/module/uti/miscb011.uti.json new file mode 100644 index 0000000..8f78fc2 --- /dev/null +++ b/src/module/uti/miscb011.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone gives +2 Constitution." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Pink Rhomboid)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 73 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb011" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb011" + } +} diff --git a/src/module/uti/miscb012.uti.json b/src/module/uti/miscb012.uti.json new file mode 100644 index 0000000..324923e --- /dev/null +++ b/src/module/uti/miscb012.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone gives +2 Charisma." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Pink and Green Sphere)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb012" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb012" + } +} diff --git a/src/module/uti/miscb013.uti.json b/src/module/uti/miscb013.uti.json new file mode 100644 index 0000000..014f280 --- /dev/null +++ b/src/module/uti/miscb013.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone gives +2 Intelligence." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Scarlet and Blue Sphere)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb013" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb013" + } +} diff --git a/src/module/uti/miscb014.uti.json b/src/module/uti/miscb014.uti.json new file mode 100644 index 0000000..904aa6f --- /dev/null +++ b/src/module/uti/miscb014.uti.json @@ -0,0 +1,137 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 6997 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet grants the wearer the ability to se in the dark." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Night" + } + }, + "Metal1Color": { + "type": "byte", + "value": 11 + }, + "Metal2Color": { + "type": "byte", + "value": 12 + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 26 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb014" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb014" + } +} diff --git a/src/module/uti/miscb015.uti.json b/src/module/uti/miscb015.uti.json new file mode 100644 index 0000000..e304f1d --- /dev/null +++ b/src/module/uti/miscb015.uti.json @@ -0,0 +1,175 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 8100 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 40 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 8100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Fire VI" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 109 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb015" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb015" + } +} diff --git a/src/module/uti/miscb016.uti.json b/src/module/uti/miscb016.uti.json new file mode 100644 index 0000000..0125541 --- /dev/null +++ b/src/module/uti/miscb016.uti.json @@ -0,0 +1,175 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2249 + }, + "BaseItem": { + "type": "int", + "value": 21 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 9000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In the hands of a monk this belt has different powers." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Monk's Belt" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 17 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb016" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb016" + } +} diff --git a/src/module/uti/miscb016b.uti.json b/src/module/uti/miscb016b.uti.json new file mode 100644 index 0000000..29f33dd --- /dev/null +++ b/src/module/uti/miscb016b.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2249 + }, + "BaseItem": { + "type": "int", + "value": 21 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 9000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In the hands of a non monk this belt has different powers." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Monk's Belt" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 137 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb016" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb016b" + } +} diff --git a/src/module/uti/miscb017.uti.json b/src/module/uti/miscb017.uti.json new file mode 100644 index 0000000..6495ccd --- /dev/null +++ b/src/module/uti/miscb017.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2187 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 9000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These bracers give a +3 Armor AC Bonus." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Armor +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "PaletteID": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb017" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb017" + } +} diff --git a/src/module/uti/miscb018.uti.json b/src/module/uti/miscb018.uti.json new file mode 100644 index 0000000..63f5ceb --- /dev/null +++ b/src/module/uti/miscb018.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4859 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 9000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Resistance +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb018" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb018" + } +} diff --git a/src/module/uti/miscb019.uti.json b/src/module/uti/miscb019.uti.json new file mode 100644 index 0000000..94d9eb6 --- /dev/null +++ b/src/module/uti/miscb019.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 8997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 9000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This bowl will endless produce Murlynd's Tasteless soup. While tasting alot like a 2x4 it will keep your stomach fooled." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Murlynd's Bottomless Bowl" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb019" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb019" + } +} diff --git a/src/module/uti/miscb020.uti.json b/src/module/uti/miscb020.uti.json new file mode 100644 index 0000000..eb0ef47 --- /dev/null +++ b/src/module/uti/miscb020.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 9000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to a level 2 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power III" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb020" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb020" + } +} diff --git a/src/module/uti/miscb021.uti.json b/src/module/uti/miscb021.uti.json new file mode 100644 index 0000000..93cff75 --- /dev/null +++ b/src/module/uti/miscb021.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9000 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 9000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Warning this item should not be handled by non arcane spell casters." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Talisman of Negative Energy" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 5 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 20 + }, + "Subtype": { + "type": "word", + "value": 11 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb021" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb021" + } +} diff --git a/src/module/uti/miscb022.uti.json b/src/module/uti/miscb022.uti.json new file mode 100644 index 0000000..4ba2472 --- /dev/null +++ b/src/module/uti/miscb022.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9099 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 9100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a very tough bird. If the bird is killed the item is broken. To safely unsummon the bird take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Silver Owl)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb022" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb022" + } +} diff --git a/src/module/uti/miscb023.uti.json b/src/module/uti/miscb023.uti.json new file mode 100644 index 0000000..7747926 --- /dev/null +++ b/src/module/uti/miscb023.uti.json @@ -0,0 +1,175 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9150 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 29 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 9150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Fire VII" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 109 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb023" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb023" + } +} diff --git a/src/module/uti/miscb024.uti.json b/src/module/uti/miscb024.uti.json new file mode 100644 index 0000000..44badd4 --- /dev/null +++ b/src/module/uti/miscb024.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9199 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 34 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 9200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This magic set of cards will summon forth the creature on the card when it is drawn. Only 1 card can be in play at any time and once the magic is activated the card disappears forever." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Deck of Summons" + } + }, + "ModelPart1": { + "type": "byte", + "value": 98 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb024" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb024" + } +} diff --git a/src/module/uti/miscb025.uti.json b/src/module/uti/miscb025.uti.json new file mode 100644 index 0000000..ddfb21d --- /dev/null +++ b/src/module/uti/miscb025.uti.json @@ -0,0 +1,140 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1117 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 9500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Boccob's Blessed Book" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 211 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb025" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb025" + } +} diff --git a/src/module/uti/miscb026.uti.json b/src/module/uti/miscb026.uti.json new file mode 100644 index 0000000..6adfb6d --- /dev/null +++ b/src/module/uti/miscb026.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7735 + }, + "BaseItem": { + "type": "int", + "value": 66 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 10000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bag of Holding" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 15 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 32 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb026" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb026" + } +} diff --git a/src/module/uti/miscb027.uti.json b/src/module/uti/miscb027.uti.json new file mode 100644 index 0000000..71f3b62 --- /dev/null +++ b/src/module/uti/miscb027.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9999 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 10000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a bronze gargoyle. If the gargoyle is killed the item is broken. To safely unsummon the gargoyle take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Bronze Gargoyle)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb027" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb027" + } +} diff --git a/src/module/uti/miscb028.uti.json b/src/module/uti/miscb028.uti.json new file mode 100644 index 0000000..c42dc21 --- /dev/null +++ b/src/module/uti/miscb028.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9999 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 10000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a ebony manticore. If the manticore is killed the item is broken. To safely unsummon the manticore take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Ebony Manticore)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb028" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb028" + } +} diff --git a/src/module/uti/miscb029.uti.json b/src/module/uti/miscb029.uti.json new file mode 100644 index 0000000..13fa4bd --- /dev/null +++ b/src/module/uti/miscb029.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1374 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 10000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Prayer Beads (Healing)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 72 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 229 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 231 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb029" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb029" + } +} diff --git a/src/module/uti/miscb030.uti.json b/src/module/uti/miscb030.uti.json new file mode 100644 index 0000000..13894ef --- /dev/null +++ b/src/module/uti/miscb030.uti.json @@ -0,0 +1,209 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4240 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 9 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 9 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 18 + }, + "Cloth2Color": { + "type": "byte", + "value": 19 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 10000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This robe gives it's wearer the ability to blend into their surroundings. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 15 + }, + "Leather2Color": { + "type": "byte", + "value": 22 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Robe of Blending" + } + }, + "Metal1Color": { + "type": "byte", + "value": 48 + }, + "Metal2Color": { + "type": "byte", + "value": 52 + }, + "PaletteID": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 15 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 5 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb030" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb030" + } +} diff --git a/src/module/uti/miscb031.uti.json b/src/module/uti/miscb031.uti.json new file mode 100644 index 0000000..93e2622 --- /dev/null +++ b/src/module/uti/miscb031.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9990 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 10000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This stone gives a +1 bonus to all skill checks, ability checks, and saving throws.\n\nJust keep it in your pocket." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Luck Stone" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb031" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb031" + } +} diff --git a/src/module/uti/miscb032.uti.json b/src/module/uti/miscb032.uti.json new file mode 100644 index 0000000..6cc6827 --- /dev/null +++ b/src/module/uti/miscb032.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9999 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 10000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This statue will transform itself into a huge stone ox capible of carrying great loads. If the Ox is destoryed all the items it was carrying are lost. To unsummon this ox safely simply take it's statue out of it's pack." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Stone Ox" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb032" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb032" + } +} diff --git a/src/module/uti/miscb033.uti.json b/src/module/uti/miscb033.uti.json new file mode 100644 index 0000000..f6b1d93 --- /dev/null +++ b/src/module/uti/miscb033.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 10497 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 10500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this item is used it will allow the user to pick a destination nearby. The party will then be instanlty teleported to that location. Handy for crossing streams without getting your feet wet." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Stone of Mass Jump" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb033" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb033" + } +} diff --git a/src/module/uti/miscb034.uti.json b/src/module/uti/miscb034.uti.json new file mode 100644 index 0000000..1c8c600 --- /dev/null +++ b/src/module/uti/miscb034.uti.json @@ -0,0 +1,363 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 10996 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 11000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Allows the user to turn undead 4 levels higher than normal.\n\nNote to use this power you must use this item's properties instead of the normal Turn Undead hotkey.", + "id": 48904 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of Undead Turning", + "id": 48903 + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 65 + }, + "Subtype": { + "type": "word", + "value": 4 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb034" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb034" + } +} diff --git a/src/module/uti/miscb035.uti.json b/src/module/uti/miscb035.uti.json new file mode 100644 index 0000000..2fcccc1 --- /dev/null +++ b/src/module/uti/miscb035.uti.json @@ -0,0 +1,109 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2049 + }, + "BaseItem": { + "type": "int", + "value": 36 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 11500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gauntlets of Stone" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 260 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb035" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb035" + } +} diff --git a/src/module/uti/miscb036.uti.json b/src/module/uti/miscb036.uti.json new file mode 100644 index 0000000..f014cbe --- /dev/null +++ b/src/module/uti/miscb036.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 12000 + }, + "BaseItem": { + "type": "int", + "value": 26 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 12000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These boots have amazing little wings that will prevent the wearer from taking damage from pit traps.\n\nThey also increase base movement speed by 50%." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Winged Boots" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb036" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb036" + } +} diff --git a/src/module/uti/miscb037.uti.json b/src/module/uti/miscb037.uti.json new file mode 100644 index 0000000..f2a013d --- /dev/null +++ b/src/module/uti/miscb037.uti.json @@ -0,0 +1,115 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11996 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 12000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This horn when blown causes cone of sonic damage, and may stun and deafen targets.", + "id": 62342 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horn of Blasting", + "id": 62341 + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb037" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb037" + } +} diff --git a/src/module/uti/miscb038.uti.json b/src/module/uti/miscb038.uti.json new file mode 100644 index 0000000..c89114e --- /dev/null +++ b/src/module/uti/miscb038.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 12000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone warns the user of impending danger. Giving them the peace of mind to allow them to rest in the dungeon when they feel like." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Vibrant Purple Prism)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb038" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb038" + } +} diff --git a/src/module/uti/miscb039.uti.json b/src/module/uti/miscb039.uti.json new file mode 100644 index 0000000..f8d91d2 --- /dev/null +++ b/src/module/uti/miscb039.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9177 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 12000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Medalion of Thoughts" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 12 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb039" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb039" + } +} diff --git a/src/module/uti/miscb040.uti.json b/src/module/uti/miscb040.uti.json new file mode 100644 index 0000000..07a2d87 --- /dev/null +++ b/src/module/uti/miscb040.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11996 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 12000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These pipes require the ability to perform to use.When played these pipes put out a odd tune that will attempt to stun every one including the player into listening to it DC14 Will. \n\nOnce the stun effect is over all those affected will be hyper sensitive to sounds. Each round for 2d4 rounds the target will take 1d4 sonic damage due to the sounds of all the heavy breathing around him. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pipes of Pain" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb040" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb040" + } +} diff --git a/src/module/uti/miscb041.uti.json b/src/module/uti/miscb041.uti.json new file mode 100644 index 0000000..479031f --- /dev/null +++ b/src/module/uti/miscb041.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 12956 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 12960 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak will allow the user to make flashy exits... entrances too...\n\nThis cloak allows the wearer to make short range teleports. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Mountebank" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 513 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb041" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb041" + } +} diff --git a/src/module/uti/miscb042.uti.json b/src/module/uti/miscb042.uti.json new file mode 100644 index 0000000..9860d51 --- /dev/null +++ b/src/module/uti/miscb042.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 399 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 13000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mandolin of Protection" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 190 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb042" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb042" + } +} diff --git a/src/module/uti/miscb043.uti.json b/src/module/uti/miscb043.uti.json new file mode 100644 index 0000000..ec2de21 --- /dev/null +++ b/src/module/uti/miscb043.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 13000 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 13000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This hole will make a door to a random room in the dungeon." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Portable Hole" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb043" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb043" + } +} diff --git a/src/module/uti/miscb044.uti.json b/src/module/uti/miscb044.uti.json new file mode 100644 index 0000000..9c038bd --- /dev/null +++ b/src/module/uti/miscb044.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5499 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 14500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "No it's not Parriair." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bottle of Air" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 418 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb044" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb044" + } +} diff --git a/src/module/uti/miscb045.uti.json b/src/module/uti/miscb045.uti.json new file mode 100644 index 0000000..1945a81 --- /dev/null +++ b/src/module/uti/miscb045.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14799 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 14800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This statue will transform itself into a huge iron ox capible of carrying great loads. If the Ox is destroyed all the items it was carrying are lost. To unsummon this ox safely simply take it's statue out of it's pack." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Iron Ox" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb045" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb045" + } +} diff --git a/src/module/uti/miscb046.uti.json b/src/module/uti/miscb046.uti.json new file mode 100644 index 0000000..f0b9b0f --- /dev/null +++ b/src/module/uti/miscb046.uti.json @@ -0,0 +1,361 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 21 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 14900 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This belt gives the wearer many of the racial abilities of a dwarf.\n\nIn the hands of a dwarf it has different powers." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Belt of Dwarven Kind" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 26 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb046" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb046" + } +} diff --git a/src/module/uti/miscb046b.uti.json b/src/module/uti/miscb046b.uti.json new file mode 100644 index 0000000..c2e5a13 --- /dev/null +++ b/src/module/uti/miscb046b.uti.json @@ -0,0 +1,268 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9140 + }, + "BaseItem": { + "type": "int", + "value": 21 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 14900 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This belt helps the dwarf to be more charismatic.\n\nIn the hands of a non-dwarf this belt has different powers." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Belt of Dwarven Kind" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 24 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb046b" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb046b" + } +} diff --git a/src/module/uti/miscb047.uti.json b/src/module/uti/miscb047.uti.json new file mode 100644 index 0000000..e8f22ac --- /dev/null +++ b/src/module/uti/miscb047.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 15000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "PC rest and food requirements are gone. They can rest whenever they like while using this stone." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Iridecent Spindle)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb047" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb047" + } +} diff --git a/src/module/uti/miscb048.uti.json b/src/module/uti/miscb048.uti.json new file mode 100644 index 0000000..abe8ad8 --- /dev/null +++ b/src/module/uti/miscb048.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2399 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 15000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Prayer Beads (Smiting)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 115 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb048" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb048" + } +} diff --git a/src/module/uti/miscb049.uti.json b/src/module/uti/miscb049.uti.json new file mode 100644 index 0000000..c906614 --- /dev/null +++ b/src/module/uti/miscb049.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14999 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 15000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "While wearing this necklace a person will never bleed to death." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Periapt of Wound Closure " + } + }, + "ModelPart1": { + "type": "byte", + "value": 20 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb049" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb049" + } +} diff --git a/src/module/uti/miscb050.uti.json b/src/module/uti/miscb050.uti.json new file mode 100644 index 0000000..efee3ff --- /dev/null +++ b/src/module/uti/miscb050.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14999 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 15000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This scabbard can be used to magically sharpen any piercing or slashing melee weapon. This effect doubles the normal critical range of the weapon and lasts for 10 minutes.\n\nIf this scabard is used on a PC their primary weapon will be given the effect as long as it fits the rules." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scabard of Keen Edges" + } + }, + "ModelPart1": { + "type": "byte", + "value": 90 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb050" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb050" + } +} diff --git a/src/module/uti/miscb051.uti.json b/src/module/uti/miscb051.uti.json new file mode 100644 index 0000000..f35e336 --- /dev/null +++ b/src/module/uti/miscb051.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 15097 + }, + "BaseItem": { + "type": "int", + "value": 34 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 15100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This broom will allow it's user to fly back up thru a pit trap they have fallen thru." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Broom of Flying" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb051" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb051" + } +} diff --git a/src/module/uti/miscb052.uti.json b/src/module/uti/miscb052.uti.json new file mode 100644 index 0000000..0f67179 --- /dev/null +++ b/src/module/uti/miscb052.uti.json @@ -0,0 +1,115 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2162 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 15100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "", + "id": 62342 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horn of Fear", + "id": 62341 + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb052" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb052" + } +} diff --git a/src/module/uti/miscb053.uti.json b/src/module/uti/miscb053.uti.json new file mode 100644 index 0000000..3a393b9 --- /dev/null +++ b/src/module/uti/miscb053.uti.json @@ -0,0 +1,175 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3528 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 15200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gem of Brightness" + } + }, + "ModelPart1": { + "type": "byte", + "value": 68 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 163 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 242 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb053" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb053" + } +} diff --git a/src/module/uti/miscb054.uti.json b/src/module/uti/miscb054.uti.json new file mode 100644 index 0000000..a925e80 --- /dev/null +++ b/src/module/uti/miscb054.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 16875 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Sirines" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 46 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 232 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb054" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb054" + } +} diff --git a/src/module/uti/miscb055.uti.json b/src/module/uti/miscb055.uti.json new file mode 100644 index 0000000..cfc8521 --- /dev/null +++ b/src/module/uti/miscb055.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 15499 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 15500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a onyx dog. If the dog is killed the item is broken. To safely unsummon the dog take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Onyx Dog)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb055" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb055" + } +} diff --git a/src/module/uti/miscb056.uti.json b/src/module/uti/miscb056.uti.json new file mode 100644 index 0000000..4151771 --- /dev/null +++ b/src/module/uti/miscb056.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 15796 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 15800 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This little chime packs a full base tone. The tone is so strong that it can prevent spell casters from being able to cast their spells." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chime of Interruption" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb056" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb056" + } +} diff --git a/src/module/uti/miscb057.uti.json b/src/module/uti/miscb057.uti.json new file mode 100644 index 0000000..f2248f1 --- /dev/null +++ b/src/module/uti/miscb057.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3679 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These bracers give a +4 Armor AC Bonus." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Armor +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb057" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb057" + } +} diff --git a/src/module/uti/miscb058.uti.json b/src/module/uti/miscb058.uti.json new file mode 100644 index 0000000..4e7776c --- /dev/null +++ b/src/module/uti/miscb058.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1234 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Resistance +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb058" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb058" + } +} diff --git a/src/module/uti/miscb059.uti.json b/src/module/uti/miscb059.uti.json new file mode 100644 index 0000000..f40270b --- /dev/null +++ b/src/module/uti/miscb059.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to a level 4 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power IV" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb059" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb059" + } +} diff --git a/src/module/uti/miscb060.uti.json b/src/module/uti/miscb060.uti.json new file mode 100644 index 0000000..806fa4e --- /dev/null +++ b/src/module/uti/miscb060.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1959 + }, + "BaseItem": { + "type": "int", + "value": 21 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Belt of Giant Strength +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "PaletteID": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb060" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb060" + } +} diff --git a/src/module/uti/miscb061.uti.json b/src/module/uti/miscb061.uti.json new file mode 100644 index 0000000..e6923a2 --- /dev/null +++ b/src/module/uti/miscb061.uti.json @@ -0,0 +1,140 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1959 + }, + "BaseItem": { + "type": "int", + "value": 36 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gauntlets of Dexterity +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb061" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb061" + } +} diff --git a/src/module/uti/miscb062.uti.json b/src/module/uti/miscb062.uti.json new file mode 100644 index 0000000..4e57d91 --- /dev/null +++ b/src/module/uti/miscb062.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1959 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Health +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "PaletteID": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb062" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb062" + } +} diff --git a/src/module/uti/miscb063.uti.json b/src/module/uti/miscb063.uti.json new file mode 100644 index 0000000..1f0731a --- /dev/null +++ b/src/module/uti/miscb063.uti.json @@ -0,0 +1,168 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1957 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet give +4 Intelligence when worn." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 30 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Intellect +4" + } + }, + "Metal1Color": { + "type": "byte", + "value": 10 + }, + "Metal2Color": { + "type": "byte", + "value": 2 + }, + "ModelPart1": { + "type": "byte", + "value": 19 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb063" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb063" + } +} diff --git a/src/module/uti/miscb064.uti.json b/src/module/uti/miscb064.uti.json new file mode 100644 index 0000000..f41f74b --- /dev/null +++ b/src/module/uti/miscb064.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1959 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Periapt of Wisdom +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb064" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb064" + } +} diff --git a/src/module/uti/miscb065.uti.json b/src/module/uti/miscb065.uti.json new file mode 100644 index 0000000..8ad8d4a --- /dev/null +++ b/src/module/uti/miscb065.uti.json @@ -0,0 +1,146 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1959 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak gives +4 charisma.", + "id": 13768 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Nymph Cloak +4", + "id": 13844 + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb065" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb065" + } +} diff --git a/src/module/uti/miscb066.uti.json b/src/module/uti/miscb066.uti.json new file mode 100644 index 0000000..4e64c2a --- /dev/null +++ b/src/module/uti/miscb066.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16499 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 16500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a golden lion. If the lion is killed the item is broken. To safely unsummon the lion take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Golden Lion)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb066" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb066" + } +} diff --git a/src/module/uti/miscb067.uti.json b/src/module/uti/miscb067.uti.json new file mode 100644 index 0000000..447b655 --- /dev/null +++ b/src/module/uti/miscb067.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16999 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 17000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a marble bear. If the bear is killed the item is broken. To safely unsummon the bear take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Marble Bear)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb067" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb067" + } +} diff --git a/src/module/uti/miscb068.uti.json b/src/module/uti/miscb068.uti.json new file mode 100644 index 0000000..641e6ae --- /dev/null +++ b/src/module/uti/miscb068.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11187 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 18000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of Natural Armor +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb068" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb068" + } +} diff --git a/src/module/uti/miscb069.uti.json b/src/module/uti/miscb069.uti.json new file mode 100644 index 0000000..fdcf62e --- /dev/null +++ b/src/module/uti/miscb069.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11187 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "This should have been a carpet of flying couldn't think of a suitable replacement atm." + }, + "Cost": { + "type": "dword", + "value": 18000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of Natural Armor +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb069" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb069" + } +} diff --git a/src/module/uti/miscb070.uti.json b/src/module/uti/miscb070.uti.json new file mode 100644 index 0000000..984669b --- /dev/null +++ b/src/module/uti/miscb070.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1889 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "This should have been a carpet of flying couldn't think of a suitable replacement atm." + }, + "Cost": { + "type": "dword", + "value": 19000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Adaptation" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 201 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb070" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb070" + } +} diff --git a/src/module/uti/miscb071.uti.json b/src/module/uti/miscb071.uti.json new file mode 100644 index 0000000..b9d88c9 --- /dev/null +++ b/src/module/uti/miscb071.uti.json @@ -0,0 +1,142 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25101 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of the Manta Ray" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 201 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb058" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb071" + } +} diff --git a/src/module/uti/miscb072.uti.json b/src/module/uti/miscb072.uti.json new file mode 100644 index 0000000..1f19af2 --- /dev/null +++ b/src/module/uti/miscb072.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 19997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 20000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone gives a +1 bonus to all attack rolls, saving throws, and skill checks." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Pale Green Prism)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 27 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb072" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb072" + } +} diff --git a/src/module/uti/miscb073.uti.json b/src/module/uti/miscb073.uti.json new file mode 100644 index 0000000..f9f90be --- /dev/null +++ b/src/module/uti/miscb073.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 20000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 20000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone when activated will shield the user from spells up to level 4. With a total protection of 20 spell levels. \n\nUnlike most Ioun Stones this is a single use item, and it's effects will wear off when you rest." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Pale Lavender Ellipsoid)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 44 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb073" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb073" + } +} diff --git a/src/module/uti/miscb074.uti.json b/src/module/uti/miscb074.uti.json new file mode 100644 index 0000000..87036f5 --- /dev/null +++ b/src/module/uti/miscb074.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 19997 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 20000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone allows regeneration of hitpoints at the rate of 1 hit point per round." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Pearly White Spindle)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb074" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb074" + } +} diff --git a/src/module/uti/miscb075.uti.json b/src/module/uti/miscb075.uti.json new file mode 100644 index 0000000..a4232e9 --- /dev/null +++ b/src/module/uti/miscb075.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 20998 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 9 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 21000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a ivory ox. If the ox is killed the item is broken. To safely unsummon the ox take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Ivory Ox)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb075" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb075" + } +} diff --git a/src/module/uti/miscb076.uti.json b/src/module/uti/miscb076.uti.json new file mode 100644 index 0000000..ef0ca10 --- /dev/null +++ b/src/module/uti/miscb076.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9750 + }, + "BaseItem": { + "type": "int", + "value": 34 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 21000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Silly isn't it." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rug of Entanglement" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 102 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 11 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 81 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb076" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb076" + } +} diff --git a/src/module/uti/miscb077.uti.json b/src/module/uti/miscb077.uti.json new file mode 100644 index 0000000..2986866 --- /dev/null +++ b/src/module/uti/miscb077.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 22000 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 22000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This sphere will shield the user from cold attacks. It can take 100 points of damage before the shield collapses. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sphere of Frost Resistance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 14 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb077" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb077" + } +} diff --git a/src/module/uti/miscb078.uti.json b/src/module/uti/miscb078.uti.json new file mode 100644 index 0000000..b66284f --- /dev/null +++ b/src/module/uti/miscb078.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 23000 + }, + "BaseItem": { + "type": "int", + "value": 34 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 23000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "If you were a giant this would be a mighty weapon. But your not... Maybe you can find one that wants to buy it." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mattock of Titans" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 11 + }, + "Param1Value": { + "type": "byte", + "value": 5 + }, + "PropertyName": { + "type": "word", + "value": 81 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb078" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb078" + } +} diff --git a/src/module/uti/miscb079.uti.json b/src/module/uti/miscb079.uti.json new file mode 100644 index 0000000..6eb87ce --- /dev/null +++ b/src/module/uti/miscb079.uti.json @@ -0,0 +1,137 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 23757 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 23760 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet projects a divine light.\n\nUndead take 40 damage.\nConstructs take 18 damage.\nAll other target take 24 damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Circlet of Blasting (Major)" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 13 + }, + "ModelPart1": { + "type": "byte", + "value": 27 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb079" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb079" + } +} diff --git a/src/module/uti/miscb080.uti.json b/src/module/uti/miscb080.uti.json new file mode 100644 index 0000000..2cc5eb9 --- /dev/null +++ b/src/module/uti/miscb080.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 15531 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 24000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In addition to it's obvious powers the cloak prevents damage from falling." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of the Bat" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 5 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb080" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb080" + } +} diff --git a/src/module/uti/miscb081.uti.json b/src/module/uti/miscb081.uti.json new file mode 100644 index 0000000..2a14642 --- /dev/null +++ b/src/module/uti/miscb081.uti.json @@ -0,0 +1,137 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 18237 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 24000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This rather odd looking helmet allows the wearer to breath under water. Including inside the deadly clutches of a water elemental." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helmet of Water Breathing" + } + }, + "Metal1Color": { + "type": "byte", + "value": 18 + }, + "Metal2Color": { + "type": "byte", + "value": 36 + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 201 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb081" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb081" + } +} diff --git a/src/module/uti/miscb082.uti.json b/src/module/uti/miscb082.uti.json new file mode 100644 index 0000000..95c1b1b --- /dev/null +++ b/src/module/uti/miscb082.uti.json @@ -0,0 +1,168 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 997 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 24500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet can inspire a feeling of dread to any who view it. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eyes of Doom" + } + }, + "Metal1Color": { + "type": "byte", + "value": 55 + }, + "Metal2Color": { + "type": "byte", + "value": 24 + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 91 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 9 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb082" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb082" + } +} diff --git a/src/module/uti/miscb083.uti.json b/src/module/uti/miscb083.uti.json new file mode 100644 index 0000000..54b45dd --- /dev/null +++ b/src/module/uti/miscb083.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 23789 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak grants it's wearer a 20% chance to be missed by each physical attack." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Displacement" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb083" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb083" + } +} diff --git a/src/module/uti/miscb084.uti.json b/src/module/uti/miscb084.uti.json new file mode 100644 index 0000000..13de49c --- /dev/null +++ b/src/module/uti/miscb084.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7734 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak provides a +5 modifier to all saving throws." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Resistance +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb084" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb084" + } +} diff --git a/src/module/uti/miscb085.uti.json b/src/module/uti/miscb085.uti.json new file mode 100644 index 0000000..27ff20f --- /dev/null +++ b/src/module/uti/miscb085.uti.json @@ -0,0 +1,137 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 24997 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 2 + }, + "Cloth2Color": { + "type": "byte", + "value": 15 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Once per day this mask can be used to attempt to instantly kill one target. The target must make a Fortitude Save DC20 or die. If the victim makes the saving throw they still take 3d6+13 Negative Energy Damage." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mask of the Skull" + } + }, + "Metal1Color": { + "type": "byte", + "value": 14 + }, + "Metal2Color": { + "type": "byte", + "value": 14 + }, + "ModelPart1": { + "type": "byte", + "value": 26 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb085" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb085" + } +} diff --git a/src/module/uti/miscb086.uti.json b/src/module/uti/miscb086.uti.json new file mode 100644 index 0000000..772cdb1 --- /dev/null +++ b/src/module/uti/miscb086.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25000 + }, + "BaseItem": { + "type": "int", + "value": 34 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "If you were a giant this would be a mighty digging tool. But your not... Maybe you can find one that wants to buy it." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spade of Titans" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 11 + }, + "Param1Value": { + "type": "byte", + "value": 5 + }, + "PropertyName": { + "type": "word", + "value": 81 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb086" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb086" + } +} diff --git a/src/module/uti/miscb087.uti.json b/src/module/uti/miscb087.uti.json new file mode 100644 index 0000000..53a5a1b --- /dev/null +++ b/src/module/uti/miscb087.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to a level 5 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power V" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb087" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb087" + } +} diff --git a/src/module/uti/miscb088.uti.json b/src/module/uti/miscb088.uti.json new file mode 100644 index 0000000..62443e1 --- /dev/null +++ b/src/module/uti/miscb088.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5551 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These bracers give a +5 Armor AC Bonus." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Armor +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb088" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb088" + } +} diff --git a/src/module/uti/miscb089.uti.json b/src/module/uti/miscb089.uti.json new file mode 100644 index 0000000..7060e54 --- /dev/null +++ b/src/module/uti/miscb089.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 29701 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dimensional Shackles" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 361 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb089" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb089" + } +} diff --git a/src/module/uti/miscb090.uti.json b/src/module/uti/miscb090.uti.json new file mode 100644 index 0000000..3d7c936 --- /dev/null +++ b/src/module/uti/miscb090.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16896 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 26000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bands of Bilarro" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 392 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb090" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb090" + } +} diff --git a/src/module/uti/miscb091.uti.json b/src/module/uti/miscb091.uti.json new file mode 100644 index 0000000..1b0ae68 --- /dev/null +++ b/src/module/uti/miscb091.uti.json @@ -0,0 +1,210 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 26999 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 11 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 37 + }, + "Cloth2Color": { + "type": "byte", + "value": 25 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 27000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This robe when activated works for 10 rounds. The first five rounds the wearer gets an additional 10% concealment up to 50% which will last the duration of the activation.\n\nEvery round it is activated anyone who is within 30 feet and can see the wearer may become Dazed by the lights cast by this robe. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 37 + }, + "Leather2Color": { + "type": "byte", + "value": 23 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Robe of Scintillating Colors", + "id": 12930 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb091" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb091" + } +} diff --git a/src/module/uti/miscb092.uti.json b/src/module/uti/miscb092.uti.json new file mode 100644 index 0000000..8a1d0e9 --- /dev/null +++ b/src/module/uti/miscb092.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 27499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 27500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to give yourself a permanent +1 consitution bonus." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Bodily Health +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb092" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb092" + } +} diff --git a/src/module/uti/miscb093.uti.json b/src/module/uti/miscb093.uti.json new file mode 100644 index 0000000..6457cca --- /dev/null +++ b/src/module/uti/miscb093.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 27499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 27500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +1 Strength." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Gainful Exercise +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb093" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb093" + } +} diff --git a/src/module/uti/miscb094.uti.json b/src/module/uti/miscb094.uti.json new file mode 100644 index 0000000..f93aee6 --- /dev/null +++ b/src/module/uti/miscb094.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 27499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 27500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +1 Dexterity." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Quickness of Action +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb094" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb094" + } +} diff --git a/src/module/uti/miscb095.uti.json b/src/module/uti/miscb095.uti.json new file mode 100644 index 0000000..4d56cb2 --- /dev/null +++ b/src/module/uti/miscb095.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 27499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 27500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +1 Intelligence." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tome of Clear Thought +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb095" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb095" + } +} diff --git a/src/module/uti/miscb096.uti.json b/src/module/uti/miscb096.uti.json new file mode 100644 index 0000000..ffa391d --- /dev/null +++ b/src/module/uti/miscb096.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 27499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 27500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +1 Charisma." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Leadership and Influence +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb094" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb096" + } +} diff --git a/src/module/uti/miscb097.uti.json b/src/module/uti/miscb097.uti.json new file mode 100644 index 0000000..ea845ec --- /dev/null +++ b/src/module/uti/miscb097.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 27499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 27500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +1 Wisdom." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Understanding +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb097" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb097" + } +} diff --git a/src/module/uti/miscb098.uti.json b/src/module/uti/miscb098.uti.json new file mode 100644 index 0000000..722e871 --- /dev/null +++ b/src/module/uti/miscb098.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 28499 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 28500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This figurine will become a obsidian ox. If the ox is killed the item is broken. To safely unsummon the ox take the figurine back from it's inventory. " + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Figurine of Wonderous Power (Obsidian Ox)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscb098" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscb098" + } +} diff --git a/src/module/uti/miscc002.uti.json b/src/module/uti/miscc002.uti.json new file mode 100644 index 0000000..58a08d5 --- /dev/null +++ b/src/module/uti/miscc002.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 29995 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 30000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This torch will reveal anything hidden by invisibility or improved invisibility within 20 feet of the holder." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Torch of Revealing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 6 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc002" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc002" + } +} diff --git a/src/module/uti/miscc004.uti.json b/src/module/uti/miscc004.uti.json new file mode 100644 index 0000000..972a458 --- /dev/null +++ b/src/module/uti/miscc004.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 29999 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 30000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This necklace allows the wearer to fly back out of a pit they have fallen into." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Prayer Beads (Wind Walking)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc004" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc004" + } +} diff --git a/src/module/uti/miscc006.uti.json b/src/module/uti/miscc006.uti.json new file mode 100644 index 0000000..2cbe262 --- /dev/null +++ b/src/module/uti/miscc006.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 29997 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 30000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "When this drum is played it will attempt to fear EVERYTHING within 120 feet of the player. Only a small 20ft circle near the player is immune to this effect. A will save of DC 16 negates this efect." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Drum of Fear" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc006" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc006" + } +} diff --git a/src/module/uti/miscc008.uti.json b/src/module/uti/miscc008.uti.json new file mode 100644 index 0000000..df172a1 --- /dev/null +++ b/src/module/uti/miscc008.uti.json @@ -0,0 +1,137 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7958 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 31000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet allows the wearer to be able to take advantage of a merchants thoughts to get the best price." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Telepathy" + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 11 + }, + "ModelPart1": { + "type": "byte", + "value": 28 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 25 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 12 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc008" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc008" + } +} diff --git a/src/module/uti/miscc010.uti.json b/src/module/uti/miscc010.uti.json new file mode 100644 index 0000000..19c35a5 --- /dev/null +++ b/src/module/uti/miscc010.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 19679 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "This should have been a carpet of flying couldn't think of a suitable replacement atm." + }, + "Cost": { + "type": "dword", + "value": 32000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of Natural Armor +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc010" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc010" + } +} diff --git a/src/module/uti/miscc012.uti.json b/src/module/uti/miscc012.uti.json new file mode 100644 index 0000000..2413673 --- /dev/null +++ b/src/module/uti/miscc012.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3390 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "This should have been a carpet of flying couldn't think of a suitable replacement atm." + }, + "Cost": { + "type": "dword", + "value": 35000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of the Thief" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 149 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 26 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 8 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc012" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc012" + } +} diff --git a/src/module/uti/miscc014.uti.json b/src/module/uti/miscc014.uti.json new file mode 100644 index 0000000..e90206f --- /dev/null +++ b/src/module/uti/miscc014.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 13477 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 36000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These bracers give a +5 Armor AC Bonus.\n\nWhen equiped you will see an error about effect stacking this is normal." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Armor +6" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc014" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc014" + } +} diff --git a/src/module/uti/miscc015.uti.json b/src/module/uti/miscc015.uti.json new file mode 100644 index 0000000..09c9cb8 --- /dev/null +++ b/src/module/uti/miscc015.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4409 + }, + "BaseItem": { + "type": "int", + "value": 21 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 36000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Belt of Giant Strength +6" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "PaletteID": { + "type": "byte", + "value": 16 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc015" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc015" + } +} diff --git a/src/module/uti/miscc016.uti.json b/src/module/uti/miscc016.uti.json new file mode 100644 index 0000000..ae38a7f --- /dev/null +++ b/src/module/uti/miscc016.uti.json @@ -0,0 +1,142 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4409 + }, + "BaseItem": { + "type": "int", + "value": 36 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 36000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gauntlets of Dexterity +6" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "PaletteID": { + "type": "byte", + "value": 19 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc016" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc016" + } +} diff --git a/src/module/uti/miscc017.uti.json b/src/module/uti/miscc017.uti.json new file mode 100644 index 0000000..8e45330 --- /dev/null +++ b/src/module/uti/miscc017.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4409 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 36000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This bracers gives +4 constitution." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Health +6" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc017" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc017" + } +} diff --git a/src/module/uti/miscc018.uti.json b/src/module/uti/miscc018.uti.json new file mode 100644 index 0000000..95b1922 --- /dev/null +++ b/src/module/uti/miscc018.uti.json @@ -0,0 +1,168 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4407 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 36000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet give +4 Intelligence when worn." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 30 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Intellect +6" + } + }, + "Metal1Color": { + "type": "byte", + "value": 10 + }, + "Metal2Color": { + "type": "byte", + "value": 2 + }, + "ModelPart1": { + "type": "byte", + "value": 19 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc018" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc018" + } +} diff --git a/src/module/uti/miscc019.uti.json b/src/module/uti/miscc019.uti.json new file mode 100644 index 0000000..effd140 --- /dev/null +++ b/src/module/uti/miscc019.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4409 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 36000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This amulet gives it's wearer +6 wisdom." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Periapt of Wisdom +6" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc019" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc019" + } +} diff --git a/src/module/uti/miscc020.uti.json b/src/module/uti/miscc020.uti.json new file mode 100644 index 0000000..92eea4f --- /dev/null +++ b/src/module/uti/miscc020.uti.json @@ -0,0 +1,146 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4409 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 36000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak gives +6 charisma.", + "id": 13768 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Nymph Cloak +6", + "id": 13844 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 1 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 0 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc020" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc020" + } +} diff --git a/src/module/uti/miscc022.uti.json b/src/module/uti/miscc022.uti.json new file mode 100644 index 0000000..2c1ed35 --- /dev/null +++ b/src/module/uti/miscc022.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 30000 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 36000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to a level 6 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power VI" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc022" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc022" + } +} diff --git a/src/module/uti/miscc024.uti.json b/src/module/uti/miscc024.uti.json new file mode 100644 index 0000000..e9eb6c9 --- /dev/null +++ b/src/module/uti/miscc024.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14375 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 38000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Orb of Storms" + } + }, + "ModelPart1": { + "type": "byte", + "value": 14 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 21 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 217 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc024" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc024" + } +} diff --git a/src/module/uti/miscc026.uti.json b/src/module/uti/miscc026.uti.json new file mode 100644 index 0000000..0ffc4fc --- /dev/null +++ b/src/module/uti/miscc026.uti.json @@ -0,0 +1,115 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7749 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 38000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak helps the wearer fend off spell attacks.\n\nSpell resistance 17.", + "id": 13768 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Protection", + "id": 13844 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc026" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc026" + } +} diff --git a/src/module/uti/miscc028.uti.json b/src/module/uti/miscc028.uti.json new file mode 100644 index 0000000..6b91fdd --- /dev/null +++ b/src/module/uti/miscc028.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 32767 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 32767 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This Ioun Stone when activated will shield the user from spells up to level 8. With a total protection of 50 spell levels. \n\nUnlike most Ioun Stones this is a single use item, and it's effects will wear off when you rest." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ioun Stone (Lavendar and Green Ellipsoid)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc028" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc028" + } +} diff --git a/src/module/uti/miscc030.uti.json b/src/module/uti/miscc030.uti.json new file mode 100644 index 0000000..3947761 --- /dev/null +++ b/src/module/uti/miscc030.uti.json @@ -0,0 +1,109 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2874 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 40000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Gates" + } + }, + "ModelPart1": { + "type": "byte", + "value": 18 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 382 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc030" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc030" + } +} diff --git a/src/module/uti/miscc032.uti.json b/src/module/uti/miscc032.uti.json new file mode 100644 index 0000000..450184a --- /dev/null +++ b/src/module/uti/miscc032.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16125 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 42000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Very useful for spying on merchants to blackmail them for the best prices.\n\n+5 to Appraise and Persuade Skills while you own this." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Crystal Ball" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 44 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc032" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc032" + } +} diff --git a/src/module/uti/miscc033.uti.json b/src/module/uti/miscc033.uti.json new file mode 100644 index 0000000..dd0fd03 --- /dev/null +++ b/src/module/uti/miscc033.uti.json @@ -0,0 +1,168 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 18346 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 48600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This helmet allows the wearer to instantly teleport to a place they can see." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Teleportation" + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 11 + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 513 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc033" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc033" + } +} diff --git a/src/module/uti/miscc034.uti.json b/src/module/uti/miscc034.uti.json new file mode 100644 index 0000000..2d34eb3 --- /dev/null +++ b/src/module/uti/miscc034.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7240 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 49000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "These bracers give a +7 Armor AC Bonus.\n\nWhen equiped this item will cause a notification of stacking effects error this is normal." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Armor +7" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc034" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc034" + } +} diff --git a/src/module/uti/miscc035.uti.json b/src/module/uti/miscc035.uti.json new file mode 100644 index 0000000..9dcba16 --- /dev/null +++ b/src/module/uti/miscc035.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 12750 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 49000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to a level 7 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power VII" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc035" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc035" + } +} diff --git a/src/module/uti/miscc036.uti.json b/src/module/uti/miscc036.uti.json new file mode 100644 index 0000000..cc8b27b --- /dev/null +++ b/src/module/uti/miscc036.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 30551 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "This should have been a carpet of flying couldn't think of a suitable replacement atm." + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of Natural Armor +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc036" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc036" + } +} diff --git a/src/module/uti/miscc037.uti.json b/src/module/uti/miscc037.uti.json new file mode 100644 index 0000000..456c2bb --- /dev/null +++ b/src/module/uti/miscc037.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 29109 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 40000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak grants it's wearer a 50% chance to be missed by each attack." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Displacement II" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc037" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc037" + } +} diff --git a/src/module/uti/miscc038.uti.json b/src/module/uti/miscc038.uti.json new file mode 100644 index 0000000..d8cc67a --- /dev/null +++ b/src/module/uti/miscc038.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 24125 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Very useful for spying on merchants to blackmail them for the best prices.\n\n+5 to Appraise and Persuade Skills while you own this.\n\nThis particular crystal ball also allows the owner to see invisible." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Crystal Ball -w- See Invisibility" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 44 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc038" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc038" + } +} diff --git a/src/module/uti/miscc040.uti.json b/src/module/uti/miscc040.uti.json new file mode 100644 index 0000000..068da0e --- /dev/null +++ b/src/module/uti/miscc040.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 6439 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This necklace can be used once to call down the wrath of their god, instantly destroying all hostile creatures in the area.\n\nNote no experience or loot will be gained for this using this item." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Necklace of Prayer Beads (God's Wrath)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 513 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc040" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc040" + } +} diff --git a/src/module/uti/miscc041.uti.json b/src/module/uti/miscc041.uti.json new file mode 100644 index 0000000..e4cd9fc --- /dev/null +++ b/src/module/uti/miscc041.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25125 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 51000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Very useful for spying on merchants to blackmail them for the best prices.\n\n+10 to Appraise and Persuade Skills while you own this." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Crystal Ball -w- Detect Thoughts" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 44 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc041" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc041" + } +} diff --git a/src/module/uti/miscc042.uti.json b/src/module/uti/miscc042.uti.json new file mode 100644 index 0000000..c0161fd --- /dev/null +++ b/src/module/uti/miscc042.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 18249 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 52000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloak of Etherealness" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 196 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc042" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc042" + } +} diff --git a/src/module/uti/miscc045.uti.json b/src/module/uti/miscc045.uti.json new file mode 100644 index 0000000..03ae838 --- /dev/null +++ b/src/module/uti/miscc045.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 24749 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 55000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to give a permanent +2 to consitution." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Bodily Health +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc045" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc045" + } +} diff --git a/src/module/uti/miscc046.uti.json b/src/module/uti/miscc046.uti.json new file mode 100644 index 0000000..2457b7d --- /dev/null +++ b/src/module/uti/miscc046.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11439 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 55000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +2 Strength." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Gainful Exercise +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc046" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc046" + } +} diff --git a/src/module/uti/miscc047.uti.json b/src/module/uti/miscc047.uti.json new file mode 100644 index 0000000..3f2b39a --- /dev/null +++ b/src/module/uti/miscc047.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11439 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 55000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +2 Dexterity." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Quickness of Action +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc047" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc047" + } +} diff --git a/src/module/uti/miscc048.uti.json b/src/module/uti/miscc048.uti.json new file mode 100644 index 0000000..78abfe7 --- /dev/null +++ b/src/module/uti/miscc048.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11439 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 55000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +2 Intelligence." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tome of Clear Thought +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc048" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc048" + } +} diff --git a/src/module/uti/miscc049.uti.json b/src/module/uti/miscc049.uti.json new file mode 100644 index 0000000..8896da2 --- /dev/null +++ b/src/module/uti/miscc049.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11439 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 55000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +2 Charisma." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Leadership and Influence +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc049" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc049" + } +} diff --git a/src/module/uti/miscc050.uti.json b/src/module/uti/miscc050.uti.json new file mode 100644 index 0000000..ce4d35b --- /dev/null +++ b/src/module/uti/miscc050.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11439 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 55000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +2 Wisdom." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Understanding +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc050" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc050" + } +} diff --git a/src/module/uti/miscc051.uti.json b/src/module/uti/miscc051.uti.json new file mode 100644 index 0000000..5336e80 --- /dev/null +++ b/src/module/uti/miscc051.uti.json @@ -0,0 +1,168 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 22747 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 45 + }, + "Cloth2Color": { + "type": "byte", + "value": 45 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 56000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Funny how people seem to fall in love with the wearer of this rather ugly helmet." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eyes of Charming" + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "ModelPart1": { + "type": "byte", + "value": 15 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 34 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc051" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc051" + } +} diff --git a/src/module/uti/miscc052.uti.json b/src/module/uti/miscc052.uti.json new file mode 100644 index 0000000..6e825b2 --- /dev/null +++ b/src/module/uti/miscc052.uti.json @@ -0,0 +1,238 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 15784 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 46 + }, + "Cloth2Color": { + "type": "byte", + "value": 24 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 58000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 43 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Robe of Stars" + } + }, + "Metal1Color": { + "type": "byte", + "value": 36 + }, + "Metal2Color": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 374 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc052" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc052" + } +} diff --git a/src/module/uti/miscc054.uti.json b/src/module/uti/miscc054.uti.json new file mode 100644 index 0000000..fb4644c --- /dev/null +++ b/src/module/uti/miscc054.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 31062 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 36 + }, + "Comment": { + "type": "cexostring", + "value": "This was originally supposed to be the cube of force but could not think of a way to properly script it." + }, + "Cost": { + "type": "dword", + "value": 62000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sphere of Protection" + } + }, + "ModelPart1": { + "type": "byte", + "value": 14 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 286 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 217 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc054" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc054" + } +} diff --git a/src/module/uti/miscc055.uti.json b/src/module/uti/miscc055.uti.json new file mode 100644 index 0000000..eb9d17a --- /dev/null +++ b/src/module/uti/miscc055.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 15490 + }, + "BaseItem": { + "type": "int", + "value": 78 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 64000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bracers of Armor +8" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 17 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc055" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc055" + } +} diff --git a/src/module/uti/miscc056.uti.json b/src/module/uti/miscc056.uti.json new file mode 100644 index 0000000..7987bd4 --- /dev/null +++ b/src/module/uti/miscc056.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14440 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 64000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to a level 8 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power VIII" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc056" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc056" + } +} diff --git a/src/module/uti/miscc057.uti.json b/src/module/uti/miscc057.uti.json new file mode 100644 index 0000000..6888404 --- /dev/null +++ b/src/module/uti/miscc057.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2500 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 70000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Very useful for spying on merchants to blackmail them for the best prices.\n\n+15 to Appraise and Persuade Skills while you own this." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Crystal Ball -w- Telepathy" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 44 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc057" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc057" + } +} diff --git a/src/module/uti/miscc058.uti.json b/src/module/uti/miscc058.uti.json new file mode 100644 index 0000000..cd6cd94 --- /dev/null +++ b/src/module/uti/miscc058.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14440 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 70000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to 2 level 8 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power (2 Spells)" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 522 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc058" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc058" + } +} diff --git a/src/module/uti/miscc059.uti.json b/src/module/uti/miscc059.uti.json new file mode 100644 index 0000000..dd2707c --- /dev/null +++ b/src/module/uti/miscc059.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 26063 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 75000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gem of Seeing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 275 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc059" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc059" + } +} diff --git a/src/module/uti/miscc060.uti.json b/src/module/uti/miscc060.uti.json new file mode 100644 index 0000000..fae9d71 --- /dev/null +++ b/src/module/uti/miscc060.uti.json @@ -0,0 +1,271 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 30498 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 44 + }, + "Cloth2Color": { + "type": "byte", + "value": 45 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 70000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In addition to the powers listed below the robe also gives it's wearer Spell Resistance 17." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 44 + }, + "Leather2Color": { + "type": "byte", + "value": 44 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Robe of the Archmagi" + } + }, + "Metal1Color": { + "type": "byte", + "value": 3 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc060" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc060" + } +} diff --git a/src/module/uti/miscc061.uti.json b/src/module/uti/miscc061.uti.json new file mode 100644 index 0000000..60eea0b --- /dev/null +++ b/src/module/uti/miscc061.uti.json @@ -0,0 +1,142 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16710 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 76000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Vestiments of Faith" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 6 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 22 + }, + "Subtype": { + "type": "word", + "value": 4 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc061" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc061" + } +} diff --git a/src/module/uti/miscc062.uti.json b/src/module/uti/miscc062.uti.json new file mode 100644 index 0000000..126588b --- /dev/null +++ b/src/module/uti/miscc062.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 18574 + }, + "BaseItem": { + "type": "int", + "value": 19 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 80000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amulet of the Planes" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 21 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 374 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc062" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc062" + } +} diff --git a/src/module/uti/miscc063.uti.json b/src/module/uti/miscc063.uti.json new file mode 100644 index 0000000..a128405 --- /dev/null +++ b/src/module/uti/miscc063.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11656 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 80000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Very useful for spying on merchants to blackmail them for the best prices.\n\n+5 to Appraise and Persuade Skills while you own this.\n\nThis particular crystal ball also gives the user True seeing, and allows others to see thru the ball as well." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Crystal Ball -w- True Seeing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 44 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 275 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc063" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc063" + } +} diff --git a/src/module/uti/miscc064.uti.json b/src/module/uti/miscc064.uti.json new file mode 100644 index 0000000..4c886fb --- /dev/null +++ b/src/module/uti/miscc064.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 31440 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 81000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This pearl can store up to a level 9 spell for later use. \n\nNote the pearl must be recharged with another spell after use." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Pearl of Power IX" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 521 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc064" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc064" + } +} diff --git a/src/module/uti/miscc065.uti.json b/src/module/uti/miscc065.uti.json new file mode 100644 index 0000000..a1a3c76 --- /dev/null +++ b/src/module/uti/miscc065.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 8225 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 80000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Well of souls" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 361 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc065" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc065" + } +} diff --git a/src/module/uti/miscc066.uti.json b/src/module/uti/miscc066.uti.json new file mode 100644 index 0000000..30c2d79 --- /dev/null +++ b/src/module/uti/miscc066.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5059 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 82500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to give a permanent +3 to constitution." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Bodily Health +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc066" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc066" + } +} diff --git a/src/module/uti/miscc067.uti.json b/src/module/uti/miscc067.uti.json new file mode 100644 index 0000000..2ed5f92 --- /dev/null +++ b/src/module/uti/miscc067.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5059 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 82500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +3 Strength." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Gainful Exercise +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc067" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc067" + } +} diff --git a/src/module/uti/miscc068.uti.json b/src/module/uti/miscc068.uti.json new file mode 100644 index 0000000..1cc3555 --- /dev/null +++ b/src/module/uti/miscc068.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5059 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 82500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +3 Dexterity." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Quickness of Action +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc068" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc068" + } +} diff --git a/src/module/uti/miscc069.uti.json b/src/module/uti/miscc069.uti.json new file mode 100644 index 0000000..0bd9c37 --- /dev/null +++ b/src/module/uti/miscc069.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5059 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 82500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +3 Intelligence." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tome of Clear Thought +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc069" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc069" + } +} diff --git a/src/module/uti/miscc070.uti.json b/src/module/uti/miscc070.uti.json new file mode 100644 index 0000000..0ef31bb --- /dev/null +++ b/src/module/uti/miscc070.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5059 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 82500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +3 Charisma." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Leadership and Influence +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc070" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc070" + } +} diff --git a/src/module/uti/miscc071.uti.json b/src/module/uti/miscc071.uti.json new file mode 100644 index 0000000..6d90a39 --- /dev/null +++ b/src/module/uti/miscc071.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5059 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 82500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +3 Wisdom." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Understanding +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc071" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc071" + } +} diff --git a/src/module/uti/miscc072.uti.json b/src/module/uti/miscc072.uti.json new file mode 100644 index 0000000..a02554e --- /dev/null +++ b/src/module/uti/miscc072.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 12559 + }, + "BaseItem": { + "type": "int", + "value": 80 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 90000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This cloak gives it's wearer Spell Resistance 21." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mantle of Spell Resistance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 18 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc072" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc072" + } +} diff --git a/src/module/uti/miscc073.uti.json b/src/module/uti/miscc073.uti.json new file mode 100644 index 0000000..9e76a38 --- /dev/null +++ b/src/module/uti/miscc073.uti.json @@ -0,0 +1,395 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 17990 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 14 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 12 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 34 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 12 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 50 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 38 + }, + "Cloth2Color": { + "type": "byte", + "value": 39 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 90000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The robe of eyes allows the wearer to see in a 360 degree arc at all times." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 11 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Robe of Eyes" + } + }, + "Metal1Color": { + "type": "byte", + "value": 49 + }, + "Metal2Color": { + "type": "byte", + "value": 20 + }, + "PaletteID": { + "type": "byte", + "value": 5 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 26 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 15 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 15 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 17 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 71 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc073" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc073" + } +} diff --git a/src/module/uti/miscc074.uti.json b/src/module/uti/miscc074.uti.json new file mode 100644 index 0000000..89c517f --- /dev/null +++ b/src/module/uti/miscc074.uti.json @@ -0,0 +1,175 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14560 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 92000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "If you can get a opponent to look into this mirror (ranged touch attack) it will summon a copy of the opponent. The copy is an exact duplicate which will attempt to kill the opponent.\n\nThis mirror can not be used on PCs." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mirror of Opposition" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 11 + }, + "Param1Value": { + "type": "byte", + "value": 4 + }, + "PropertyName": { + "type": "word", + "value": 81 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc074" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc074" + } +} diff --git a/src/module/uti/miscc075.uti.json b/src/module/uti/miscc075.uti.json new file mode 100644 index 0000000..9e4eed0 --- /dev/null +++ b/src/module/uti/miscc075.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25500 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 93000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gem of Chaos" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 53 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 62 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc075" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc075" + } +} diff --git a/src/module/uti/miscc076.uti.json b/src/module/uti/miscc076.uti.json new file mode 100644 index 0000000..2ee98a9 --- /dev/null +++ b/src/module/uti/miscc076.uti.json @@ -0,0 +1,137 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 26222 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 98000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eyes of Petrification" + } + }, + "Metal1Color": { + "type": "byte", + "value": 51 + }, + "Metal2Color": { + "type": "byte", + "value": 48 + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 398 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc076" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc076" + } +} diff --git a/src/module/uti/miscc080.uti.json b/src/module/uti/miscc080.uti.json new file mode 100644 index 0000000..877cd3c --- /dev/null +++ b/src/module/uti/miscc080.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 12362 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 100000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gem of Elemental Command" + } + }, + "ModelPart1": { + "type": "byte", + "value": 102 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 269 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 270 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc080" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc080" + } +} diff --git a/src/module/uti/miscc081.uti.json b/src/module/uti/miscc081.uti.json new file mode 100644 index 0000000..382815b --- /dev/null +++ b/src/module/uti/miscc081.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11989 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 110000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used for a permanent +4 Constitution." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Bodily Health +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc081" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc081" + } +} diff --git a/src/module/uti/miscc082.uti.json b/src/module/uti/miscc082.uti.json new file mode 100644 index 0000000..bbcbac6 --- /dev/null +++ b/src/module/uti/miscc082.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11989 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 110000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +4 Strength." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Gainful Exercise +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc082" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc082" + } +} diff --git a/src/module/uti/miscc083.uti.json b/src/module/uti/miscc083.uti.json new file mode 100644 index 0000000..336f508 --- /dev/null +++ b/src/module/uti/miscc083.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11989 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 110000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +4 Dexterity." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Quickness of Action +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc083" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc083" + } +} diff --git a/src/module/uti/miscc084.uti.json b/src/module/uti/miscc084.uti.json new file mode 100644 index 0000000..9d4373a --- /dev/null +++ b/src/module/uti/miscc084.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11989 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 110000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +4 Intelligence." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tome of Clear Thought +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc084" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc084" + } +} diff --git a/src/module/uti/miscc085.uti.json b/src/module/uti/miscc085.uti.json new file mode 100644 index 0000000..f68c1b5 --- /dev/null +++ b/src/module/uti/miscc085.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11989 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 110000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +4 Charisma." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Leadership and Influence +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc085" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc085" + } +} diff --git a/src/module/uti/miscc086.uti.json b/src/module/uti/miscc086.uti.json new file mode 100644 index 0000000..7be8a35 --- /dev/null +++ b/src/module/uti/miscc086.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11989 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 110000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +4 Wisdom." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Understanding +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc086" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc086" + } +} diff --git a/src/module/uti/miscc087.uti.json b/src/module/uti/miscc087.uti.json new file mode 100644 index 0000000..7d85d53 --- /dev/null +++ b/src/module/uti/miscc087.uti.json @@ -0,0 +1,230 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 22875 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 130000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This rather odd looking helmet allows the wearer to breath under water. Including inside the deadly clutches of a water elemental." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helmet of Kwalish" + } + }, + "Metal1Color": { + "type": "byte", + "value": 8 + }, + "Metal2Color": { + "type": "byte", + "value": 33 + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 75 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 5 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 20 + }, + "Subtype": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 201 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc087" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc087" + } +} diff --git a/src/module/uti/miscc088.uti.json b/src/module/uti/miscc088.uti.json new file mode 100644 index 0000000..0cdb285 --- /dev/null +++ b/src/module/uti/miscc088.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 137500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +5 Constitution." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Bodily Health +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc088" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc088" + } +} diff --git a/src/module/uti/miscc089.uti.json b/src/module/uti/miscc089.uti.json new file mode 100644 index 0000000..c3adcb2 --- /dev/null +++ b/src/module/uti/miscc089.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 137500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +5 Strength." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Gainful Exercise +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc089" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc089" + } +} diff --git a/src/module/uti/miscc090.uti.json b/src/module/uti/miscc090.uti.json new file mode 100644 index 0000000..ed7a0ad --- /dev/null +++ b/src/module/uti/miscc090.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 137500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +5 Dexterity." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Quickness of Action +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc090" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc090" + } +} diff --git a/src/module/uti/miscc091.uti.json b/src/module/uti/miscc091.uti.json new file mode 100644 index 0000000..f7fe2f5 --- /dev/null +++ b/src/module/uti/miscc091.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 137500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +5 Intelligence." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tome of Clear Thought +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc091" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc091" + } +} diff --git a/src/module/uti/miscc092.uti.json b/src/module/uti/miscc092.uti.json new file mode 100644 index 0000000..d3d4402 --- /dev/null +++ b/src/module/uti/miscc092.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 137500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +5 Charisma." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Leadership and Influence +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc092" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc092" + } +} diff --git a/src/module/uti/miscc093.uti.json b/src/module/uti/miscc093.uti.json new file mode 100644 index 0000000..757f10d --- /dev/null +++ b/src/module/uti/miscc093.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16499 + }, + "BaseItem": { + "type": "int", + "value": 74 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 137500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item can be used to provide a permanent +5 Wisdom." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Manual of Understanding +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 6 + }, + "PaletteID": { + "type": "byte", + "value": 60 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc093" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc093" + } +} diff --git a/src/module/uti/miscc094.uti.json b/src/module/uti/miscc094.uti.json new file mode 100644 index 0000000..5da83fa --- /dev/null +++ b/src/module/uti/miscc094.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 18038 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Gem of Elemental Command" + } + }, + "ModelPart1": { + "type": "byte", + "value": 102 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 267 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc094" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc094" + } +} diff --git a/src/module/uti/miscc095.uti.json b/src/module/uti/miscc095.uti.json new file mode 100644 index 0000000..5175526 --- /dev/null +++ b/src/module/uti/miscc095.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3500 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 152000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mirror of Banishing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 361 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc095" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc095" + } +} diff --git a/src/module/uti/miscc097.uti.json b/src/module/uti/miscc097.uti.json new file mode 100644 index 0000000..28a16aa --- /dev/null +++ b/src/module/uti/miscc097.uti.json @@ -0,0 +1,354 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 26172 + }, + "BaseItem": { + "type": "int", + "value": 17 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Cloth1Color": { + "type": "byte", + "value": 0 + }, + "Cloth2Color": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In addition to the powers listed this helm causes 1d6 positive damage to undead nearby.\n\nThe helm can also be used to enchant the weapon of the wearer with a flaming effect adding 1d6 fire damage to the weapon for 1 minute." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 0 + }, + "Leather2Color": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Helm of Brilliance" + } + }, + "Metal1Color": { + "type": "byte", + "value": 13 + }, + "Metal2Color": { + "type": "byte", + "value": 48 + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 109 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 163 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 213 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 280 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 5 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc097" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc097" + } +} diff --git a/src/module/uti/miscc098.uti.json b/src/module/uti/miscc098.uti.json new file mode 100644 index 0000000..8b294ab --- /dev/null +++ b/src/module/uti/miscc098.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 24030 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 170000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Iron Flask" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 361 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 267 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc098" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc098" + } +} diff --git a/src/module/uti/miscc099.uti.json b/src/module/uti/miscc099.uti.json new file mode 100644 index 0000000..6be43ef --- /dev/null +++ b/src/module/uti/miscc099.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 18416 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 173500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The possessor of this mirror can read the minds of merchants giving them a +15 to both persuade and appraise skills.\n\nThis mirror can be used to create a door to another room of the dungeon." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mirror of Mental Prowness" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 299 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 11 + }, + "Param1Value": { + "type": "byte", + "value": 3 + }, + "PropertyName": { + "type": "word", + "value": 81 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc099" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc099" + } +} diff --git a/src/module/uti/miscc1039.uti.json b/src/module/uti/miscc1039.uti.json new file mode 100644 index 0000000..56da678 --- /dev/null +++ b/src/module/uti/miscc1039.uti.json @@ -0,0 +1,146 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16249 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This horn can be used normally to strike fear in the hearts of your enemies. \n\nThe true power lies in it's special ability to summon forth 2d4+2 Level 2 Barbarians to fight for you for 2 minutes.", + "id": 62342 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horn of Valhalla", + "id": 62341 + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc1039" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc1039" + } +} diff --git a/src/module/uti/miscc2039.uti.json b/src/module/uti/miscc2039.uti.json new file mode 100644 index 0000000..fb084e4 --- /dev/null +++ b/src/module/uti/miscc2039.uti.json @@ -0,0 +1,146 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16249 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This horn can be used normally to strike fear in the hearts of your enemies. \n\nThe true power lies in it's special ability to summon forth 2d4+1 Level 3 Barbarians. These barbarians will either fight for you or try to kill you. Either way they will be around for 20 rounds.", + "id": 62342 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horn of Valhalla", + "id": 62341 + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc2039" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc2039" + } +} diff --git a/src/module/uti/miscc3039.uti.json b/src/module/uti/miscc3039.uti.json new file mode 100644 index 0000000..52d59a2 --- /dev/null +++ b/src/module/uti/miscc3039.uti.json @@ -0,0 +1,146 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16249 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This horn can be used normally to strike fear in the hearts of your enemies. \n\nThe true power lies in it's special ability to summon forth 2d4 Level 4 Barbarians. These barbarians will either fight for you or try to kill you. Either way they will be around for 20 rounds.", + "id": 62342 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horn of Valhalla", + "id": 62341 + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc3039" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc3039" + } +} diff --git a/src/module/uti/miscc4039.uti.json b/src/module/uti/miscc4039.uti.json new file mode 100644 index 0000000..64e2a3d --- /dev/null +++ b/src/module/uti/miscc4039.uti.json @@ -0,0 +1,146 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16249 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This horn can be used normally to strike fear in the hearts of your enemies. \n\nThe true power lies in it's special ability to summon forth 1d4+1 Level 5 Barbarians. These barbarians will either fight for you or try to kill you. Either way they will be around for 20 rounds.", + "id": 62342 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horn of Valhalla", + "id": 62341 + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 23 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "miscc4039" + }, + "TemplateResRef": { + "type": "resref", + "value": "miscc4039" + } +} diff --git a/src/module/uti/mstaff101.uti.json b/src/module/uti/mstaff101.uti.json new file mode 100644 index 0000000..5c74b26 --- /dev/null +++ b/src/module/uti/mstaff101.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2943 + }, + "BaseItem": { + "type": "int", + "value": 45 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 12000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Staff of Charming" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "PaletteID": { + "type": "byte", + "value": 49 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 31 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 11 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 76 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstaff101" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstaff101" + } +} diff --git a/src/module/uti/mstaff102.uti.json b/src/module/uti/mstaff102.uti.json new file mode 100644 index 0000000..316c4fb --- /dev/null +++ b/src/module/uti/mstaff102.uti.json @@ -0,0 +1,212 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 10124 + }, + "BaseItem": { + "type": "int", + "value": 45 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 33000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Staff of Healing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "PaletteID": { + "type": "byte", + "value": 49 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 74 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 159 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 229 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 231 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstaff102" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstaff102" + } +} diff --git a/src/module/uti/mstaff103.uti.json b/src/module/uti/mstaff103.uti.json new file mode 100644 index 0000000..78e295e --- /dev/null +++ b/src/module/uti/mstaff103.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 45 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 30564 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Staff of Fire" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 62 + }, + "PaletteID": { + "type": "byte", + "value": 49 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 280 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstaff103" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstaff103" + } +} diff --git a/src/module/uti/mstaff104.uti.json b/src/module/uti/mstaff104.uti.json new file mode 100644 index 0000000..ca01bc4 --- /dev/null +++ b/src/module/uti/mstaff104.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 17349 + }, + "BaseItem": { + "type": "int", + "value": 45 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 70000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Staff of Frost" + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "PaletteID": { + "type": "byte", + "value": 49 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 50 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 310 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 228 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstaff104" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstaff104" + } +} diff --git a/src/module/uti/mstaff105.uti.json b/src/module/uti/mstaff105.uti.json new file mode 100644 index 0000000..04e030a --- /dev/null +++ b/src/module/uti/mstaff105.uti.json @@ -0,0 +1,212 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9124 + }, + "BaseItem": { + "type": "int", + "value": 45 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 80000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Staff of Defense" + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 51 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 49 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 374 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 167 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 348 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 381 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstaff105" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstaff105" + } +} diff --git a/src/module/uti/mstaff106.uti.json b/src/module/uti/mstaff106.uti.json new file mode 100644 index 0000000..55d9e74 --- /dev/null +++ b/src/module/uti/mstaff106.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 27561 + }, + "BaseItem": { + "type": "int", + "value": 45 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 90000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Staff of Woodlands" + } + }, + "ModelPart1": { + "type": "byte", + "value": 53 + }, + "ModelPart2": { + "type": "byte", + "value": 53 + }, + "ModelPart3": { + "type": "byte", + "value": 63 + }, + "PaletteID": { + "type": "byte", + "value": 49 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 87 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 269 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstaff106" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstaff106" + } +} diff --git a/src/module/uti/mstaff107.uti.json b/src/module/uti/mstaff107.uti.json new file mode 100644 index 0000000..91edf92 --- /dev/null +++ b/src/module/uti/mstaff107.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 12374 + }, + "BaseItem": { + "type": "int", + "value": 45 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 130000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Staff of Life" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "ModelPart2": { + "type": "byte", + "value": 63 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "PaletteID": { + "type": "byte", + "value": 49 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 139 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 239 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 9 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstaff107" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstaff107" + } +} diff --git a/src/module/uti/mstaff108.uti.json b/src/module/uti/mstaff108.uti.json new file mode 100644 index 0000000..79e1357 --- /dev/null +++ b/src/module/uti/mstaff108.uti.json @@ -0,0 +1,336 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 32767 + }, + "BaseItem": { + "type": "int", + "value": 45 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "NWN limitations really hurt this weaopn =(" + }, + "Cost": { + "type": "dword", + "value": 140488 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Staff of Power" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 49 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 51 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 109 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 121 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 143 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 165 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 174 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstaff108" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstaff108" + } +} diff --git a/src/module/uti/mstar001.uti.json b/src/module/uti/mstar001.uti.json new file mode 100644 index 0000000..d70cf68 --- /dev/null +++ b/src/module/uti/mstar001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 47 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Morningstar", + "id": 1541 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstar001" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstar001" + } +} diff --git a/src/module/uti/mstar101.uti.json b/src/module/uti/mstar101.uti.json new file mode 100644 index 0000000..07fceeb --- /dev/null +++ b/src/module/uti/mstar101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 674 + }, + "BaseItem": { + "type": "int", + "value": 47 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Morningstar +1", + "id": 1541 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstar101" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstar101" + } +} diff --git a/src/module/uti/mstar201.uti.json b/src/module/uti/mstar201.uti.json new file mode 100644 index 0000000..9f21e17 --- /dev/null +++ b/src/module/uti/mstar201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1074 + }, + "BaseItem": { + "type": "int", + "value": 47 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Morningstar +2", + "id": 1541 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstar201" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstar201" + } +} diff --git a/src/module/uti/mstar301.uti.json b/src/module/uti/mstar301.uti.json new file mode 100644 index 0000000..d0a65f4 --- /dev/null +++ b/src/module/uti/mstar301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1472 + }, + "BaseItem": { + "type": "int", + "value": 47 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Morningstar +3", + "id": 1541 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstar301" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstar301" + } +} diff --git a/src/module/uti/mstar401.uti.json b/src/module/uti/mstar401.uti.json new file mode 100644 index 0000000..fea5c3d --- /dev/null +++ b/src/module/uti/mstar401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1872 + }, + "BaseItem": { + "type": "int", + "value": 47 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Morningstar +4", + "id": 1541 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstar401" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstar401" + } +} diff --git a/src/module/uti/mstar501.uti.json b/src/module/uti/mstar501.uti.json new file mode 100644 index 0000000..0ccfa97 --- /dev/null +++ b/src/module/uti/mstar501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2272 + }, + "BaseItem": { + "type": "int", + "value": 47 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50308 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Morningstar +5", + "id": 1541 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 61 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mstar501" + }, + "TemplateResRef": { + "type": "resref", + "value": "mstar501" + } +} diff --git a/src/module/uti/murlyndssoup.uti.json b/src/module/uti/murlyndssoup.uti.json new file mode 100644 index 0000000..8642645 --- /dev/null +++ b/src/module/uti/murlyndssoup.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 24 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This stuff has a taste similar to cardboard. \n\n\n\n\nDM Note: Use this item to rest." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Murlynd's Soup" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 20 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "food" + }, + "TemplateResRef": { + "type": "resref", + "value": "murlyndssoup" + } +} diff --git a/src/module/uti/mw_thievestools.uti.json b/src/module/uti/mw_thievestools.uti.json new file mode 100644 index 0000000..2a2c59c --- /dev/null +++ b/src/module/uti/mw_thievestools.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 296 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Can be used on a trap or lock. +2 to Open Lock and Disable Traps Skills.\n\nWhen used on a locked object the PC will attempt to pick the lock.\n\nWhen used on a trap the PC will attempt to disarm the trap. Failing that the PC will Flag the trap for their party.\n\nIn the case of a trapped locked object. The trap must be disarmed before the lock can be picked.\n\nNote attempting to pick a lock on a object with a undiscovered trap is hazardous to your health." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Master Work Thieves' Tools" + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 20 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mw_thievestools" + }, + "TemplateResRef": { + "type": "resref", + "value": "mw_thievestools" + } +} diff --git a/src/module/uti/mwweaponmat.uti.json b/src/module/uti/mwweaponmat.uti.json new file mode 100644 index 0000000..fc0224e --- /dev/null +++ b/src/module/uti/mwweaponmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 109 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material can be combined with a weapon in a forge to add a +1 attack bonus to a weapon. \n\nThis is NOT a magic bonus and will not allow a character to hit a creature with damage reduction.\n\nA weapon must be master worked before it can be enchanted.\n\nMasterworking is a Craft Weapon DC 20 check, failure results in the loss of the material." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Master Work Weapon Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 105 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "mwweaponmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "mwweaponmat" + } +} diff --git a/src/module/uti/obsidianoxskin.uti.json b/src/module/uti/obsidianoxskin.uti.json new file mode 100644 index 0000000..cdaabdc --- /dev/null +++ b/src/module/uti/obsidianoxskin.uti.json @@ -0,0 +1,512 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2230200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Obsidian Ox Skin" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 14 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 35 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 37 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 71 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ObsidianOxSkin" + }, + "TemplateResRef": { + "type": "resref", + "value": "obsidianoxskin" + } +} diff --git a/src/module/uti/onyxdogskin.uti.json b/src/module/uti/onyxdogskin.uti.json new file mode 100644 index 0000000..6f157bf --- /dev/null +++ b/src/module/uti/onyxdogskin.uti.json @@ -0,0 +1,202 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 137475 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Onyx Dog Skin" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 14 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 71 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "OnyxDogSkin" + }, + "TemplateResRef": { + "type": "resref", + "value": "onyxdogskin" + } +} diff --git a/src/module/uti/padded001.uti.json b/src/module/uti/padded001.uti.json new file mode 100644 index 0000000..473da79 --- /dev/null +++ b/src/module/uti/padded001.uti.json @@ -0,0 +1,174 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 28 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 44 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 5 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Padded Armor", + "id": 12841 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "padded001" + }, + "TemplateResRef": { + "type": "resref", + "value": "padded001" + } +} diff --git a/src/module/uti/padded101.uti.json b/src/module/uti/padded101.uti.json new file mode 100644 index 0000000..67e3cdc --- /dev/null +++ b/src/module/uti/padded101.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 494 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 28 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 15 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1155 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Padded Armor +1", + "id": 12841 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "padded101" + }, + "TemplateResRef": { + "type": "resref", + "value": "padded101" + } +} diff --git a/src/module/uti/padded201.uti.json b/src/module/uti/padded201.uti.json new file mode 100644 index 0000000..e0f3b42 --- /dev/null +++ b/src/module/uti/padded201.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 28 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 36 + }, + "Cloth2Color": { + "type": "byte", + "value": 20 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4155 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Padded Armor +2", + "id": 12841 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "padded201" + }, + "TemplateResRef": { + "type": "resref", + "value": "padded201" + } +} diff --git a/src/module/uti/padded301.uti.json b/src/module/uti/padded301.uti.json new file mode 100644 index 0000000..427b4d1 --- /dev/null +++ b/src/module/uti/padded301.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2338 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 28 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 25 + }, + "Cloth2Color": { + "type": "byte", + "value": 26 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9155 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Padded Armor +3", + "id": 12841 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "padded301" + }, + "TemplateResRef": { + "type": "resref", + "value": "padded301" + } +} diff --git a/src/module/uti/padded401.uti.json b/src/module/uti/padded401.uti.json new file mode 100644 index 0000000..59ee344 --- /dev/null +++ b/src/module/uti/padded401.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3830 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 28 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 41 + }, + "Cloth2Color": { + "type": "byte", + "value": 42 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16155 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Padded Armor +4", + "id": 12841 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "padded401" + }, + "TemplateResRef": { + "type": "resref", + "value": "padded401" + } +} diff --git a/src/module/uti/padded501.uti.json b/src/module/uti/padded501.uti.json new file mode 100644 index 0000000..4838245 --- /dev/null +++ b/src/module/uti/padded501.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5702 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 10 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 25 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 8 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 20 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 44 + }, + "Cloth2Color": { + "type": "byte", + "value": 36 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25155 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Padded Armor +5", + "id": 12841 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 54 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "padded501" + }, + "TemplateResRef": { + "type": "resref", + "value": "padded501" + } +} diff --git a/src/module/uti/pcskin.uti.json b/src/module/uti/pcskin.uti.json new file mode 100644 index 0000000..a8b9c03 --- /dev/null +++ b/src/module/uti/pcskin.uti.json @@ -0,0 +1,79 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "PC Skin" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 14 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "PCSkin" + }, + "TemplateResRef": { + "type": "resref", + "value": "pcskin" + } +} diff --git a/src/module/uti/potion001.uti.json b/src/module/uti/potion001.uti.json new file mode 100644 index 0000000..b137d2a --- /dev/null +++ b/src/module/uti/potion001.uti.json @@ -0,0 +1,119 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 50 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Allows for a short range jump instantly." + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Jump Potion" + } + }, + "ModelPart1": { + "type": "byte", + "value": 64 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion001" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion001" + } +} diff --git a/src/module/uti/potion002.uti.json b/src/module/uti/potion002.uti.json new file mode 100644 index 0000000..6db26b1 --- /dev/null +++ b/src/module/uti/potion002.uti.json @@ -0,0 +1,119 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 30 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cure Light Wounds" + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion002" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion002" + } +} diff --git a/src/module/uti/potion003.uti.json b/src/module/uti/potion003.uti.json new file mode 100644 index 0000000..4599a2a --- /dev/null +++ b/src/module/uti/potion003.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "+10 Search Checks for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Vision" + } + }, + "ModelPart1": { + "type": "byte", + "value": 78 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion003" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion003" + } +} diff --git a/src/module/uti/potion004.uti.json b/src/module/uti/potion004.uti.json new file mode 100644 index 0000000..7684afe --- /dev/null +++ b/src/module/uti/potion004.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "+10 to Spot Checks for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eyes" + } + }, + "ModelPart1": { + "type": "byte", + "value": 38 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion004" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion004" + } +} diff --git a/src/module/uti/potion005.uti.json b/src/module/uti/potion005.uti.json new file mode 100644 index 0000000..18cd6c1 --- /dev/null +++ b/src/module/uti/potion005.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "+10 Hide Skill for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hiding" + } + }, + "ModelPart1": { + "type": "byte", + "value": 56 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion005" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion005" + } +} diff --git a/src/module/uti/potion006.uti.json b/src/module/uti/potion006.uti.json new file mode 100644 index 0000000..4a510e7 --- /dev/null +++ b/src/module/uti/potion006.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "+10 Move Silently Skill for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sneaking" + } + }, + "ModelPart1": { + "type": "byte", + "value": 46 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion006" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion006" + } +} diff --git a/src/module/uti/potion007.uti.json b/src/module/uti/potion007.uti.json new file mode 100644 index 0000000..249ed66 --- /dev/null +++ b/src/module/uti/potion007.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Clairaudience/Clairvoyance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 18 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 62 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 43 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion007" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion007" + } +} diff --git a/src/module/uti/potion008.uti.json b/src/module/uti/potion008.uti.json new file mode 100644 index 0000000..1bc186e --- /dev/null +++ b/src/module/uti/potion008.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eagle's Spendor" + } + }, + "ModelPart1": { + "type": "byte", + "value": 53 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 288 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion008" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion008" + } +} diff --git a/src/module/uti/potion009.uti.json b/src/module/uti/potion009.uti.json new file mode 100644 index 0000000..1f1e34b --- /dev/null +++ b/src/module/uti/potion009.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fox's Cunning" + } + }, + "ModelPart1": { + "type": "byte", + "value": 63 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 294 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion009" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion009" + } +} diff --git a/src/module/uti/potion010.uti.json b/src/module/uti/potion010.uti.json new file mode 100644 index 0000000..9f7bd38 --- /dev/null +++ b/src/module/uti/potion010.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Owl's Wisdom" + } + }, + "ModelPart1": { + "type": "byte", + "value": 52 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 291 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion010" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion010" + } +} diff --git a/src/module/uti/potion011.uti.json b/src/module/uti/potion011.uti.json new file mode 100644 index 0000000..5486407 --- /dev/null +++ b/src/module/uti/potion011.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 220 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Barkskin" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "ModelPart2": { + "type": "byte", + "value": 53 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 5 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion011" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion011" + } +} diff --git a/src/module/uti/potion012.uti.json b/src/module/uti/potion012.uti.json new file mode 100644 index 0000000..a118a52 --- /dev/null +++ b/src/module/uti/potion012.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ultravision" + } + }, + "ModelPart1": { + "type": "byte", + "value": 36 + }, + "ModelPart2": { + "type": "byte", + "value": 72 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 305 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion012" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion012" + } +} diff --git a/src/module/uti/potion013.uti.json b/src/module/uti/potion013.uti.json new file mode 100644 index 0000000..c4c9f51 --- /dev/null +++ b/src/module/uti/potion013.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Endurance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 55 + }, + "ModelPart2": { + "type": "byte", + "value": 43 + }, + "ModelPart3": { + "type": "byte", + "value": 63 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 95 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion013" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion013" + } +} diff --git a/src/module/uti/potion014.uti.json b/src/module/uti/potion014.uti.json new file mode 100644 index 0000000..ef11b59 --- /dev/null +++ b/src/module/uti/potion014.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 267 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cure Moderate Wounds" + } + }, + "ModelPart1": { + "type": "byte", + "value": 71 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 69 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion014" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion014" + } +} diff --git a/src/module/uti/potion015.uti.json b/src/module/uti/potion015.uti.json new file mode 100644 index 0000000..4cec177 --- /dev/null +++ b/src/module/uti/potion015.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Aid" + } + }, + "ModelPart1": { + "type": "byte", + "value": 54 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion015" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion015" + } +} diff --git a/src/module/uti/potion016.uti.json b/src/module/uti/potion016.uti.json new file mode 100644 index 0000000..ae74d9d --- /dev/null +++ b/src/module/uti/potion016.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Invisiblity" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 151 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion016" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion016" + } +} diff --git a/src/module/uti/potion017.uti.json b/src/module/uti/potion017.uti.json new file mode 100644 index 0000000..fb3a959 --- /dev/null +++ b/src/module/uti/potion017.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Restoration" + } + }, + "ModelPart1": { + "type": "byte", + "value": 66 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 159 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion017" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion017" + } +} diff --git a/src/module/uti/potion018.uti.json b/src/module/uti/potion018.uti.json new file mode 100644 index 0000000..26b4bb7 --- /dev/null +++ b/src/module/uti/potion018.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cat's Grace" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 25 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion018" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion018" + } +} diff --git a/src/module/uti/potion019.uti.json b/src/module/uti/potion019.uti.json new file mode 100644 index 0000000..01b239e --- /dev/null +++ b/src/module/uti/potion019.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 180 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bull Strength" + } + }, + "ModelPart1": { + "type": "byte", + "value": 14 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 15 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion019" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion019" + } +} diff --git a/src/module/uti/potion020.uti.json b/src/module/uti/potion020.uti.json new file mode 100644 index 0000000..69ecdfb --- /dev/null +++ b/src/module/uti/potion020.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 500 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "+30 Persuade Checks for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Glibness" + } + }, + "ModelPart1": { + "type": "byte", + "value": 37 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion020" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion020" + } +} diff --git a/src/module/uti/potion021.uti.json b/src/module/uti/potion021.uti.json new file mode 100644 index 0000000..326f8ad --- /dev/null +++ b/src/module/uti/potion021.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 630 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Remove Paralysis" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 233 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion021" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion021" + } +} diff --git a/src/module/uti/potion022.uti.json b/src/module/uti/potion022.uti.json new file mode 100644 index 0000000..cee7fc2 --- /dev/null +++ b/src/module/uti/potion022.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 450 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Remove Blindness/Deafness" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "ModelPart2": { + "type": "byte", + "value": 43 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 229 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion022" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion022" + } +} diff --git a/src/module/uti/potion023.uti.json b/src/module/uti/potion023.uti.json new file mode 100644 index 0000000..2522682 --- /dev/null +++ b/src/module/uti/potion023.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 550 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Remove Disease" + } + }, + "ModelPart1": { + "type": "byte", + "value": 52 + }, + "ModelPart2": { + "type": "byte", + "value": 43 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 231 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion023" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion023" + } +} diff --git a/src/module/uti/potion024.uti.json b/src/module/uti/potion024.uti.json new file mode 100644 index 0000000..3ea3668 --- /dev/null +++ b/src/module/uti/potion024.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 450 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Neutralize Poison" + } + }, + "ModelPart1": { + "type": "byte", + "value": 55 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 204 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion024" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion024" + } +} diff --git a/src/module/uti/potion025.uti.json b/src/module/uti/potion025.uti.json new file mode 100644 index 0000000..c41858a --- /dev/null +++ b/src/module/uti/potion025.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 684 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cure Serious Wounds" + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 72 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion025" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion025" + } +} diff --git a/src/module/uti/potion026.uti.json b/src/module/uti/potion026.uti.json new file mode 100644 index 0000000..656bb5e --- /dev/null +++ b/src/module/uti/potion026.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 750 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Cold" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion026" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion026" + } +} diff --git a/src/module/uti/potion027.uti.json b/src/module/uti/potion027.uti.json new file mode 100644 index 0000000..7882fcc --- /dev/null +++ b/src/module/uti/potion027.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 750 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Electricity" + } + }, + "ModelPart1": { + "type": "byte", + "value": 74 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion027" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion027" + } +} diff --git a/src/module/uti/potion028.uti.json b/src/module/uti/potion028.uti.json new file mode 100644 index 0000000..d78f46a --- /dev/null +++ b/src/module/uti/potion028.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 750 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Fire" + } + }, + "ModelPart1": { + "type": "byte", + "value": 18 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion028" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion028" + } +} diff --git a/src/module/uti/potion029.uti.json b/src/module/uti/potion029.uti.json new file mode 100644 index 0000000..e1d515b --- /dev/null +++ b/src/module/uti/potion029.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 750 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Acid" + } + }, + "ModelPart1": { + "type": "byte", + "value": 75 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion029" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion029" + } +} diff --git a/src/module/uti/potion030.uti.json b/src/module/uti/potion030.uti.json new file mode 100644 index 0000000..f622760 --- /dev/null +++ b/src/module/uti/potion030.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 750 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Sonic" + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion030" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion030" + } +} diff --git a/src/module/uti/potion031.uti.json b/src/module/uti/potion031.uti.json new file mode 100644 index 0000000..ca76ab5 --- /dev/null +++ b/src/module/uti/potion031.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 450 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Haste" + } + }, + "ModelPart1": { + "type": "byte", + "value": 44 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 137 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion031" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion031" + } +} diff --git a/src/module/uti/potion033.uti.json b/src/module/uti/potion033.uti.json new file mode 100644 index 0000000..9dd8243 --- /dev/null +++ b/src/module/uti/potion033.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 900 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 900 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "+2 Bonus to all attacks, save throws, and skill checks for 1 hour." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Potion of Heroism" + } + }, + "ModelPart1": { + "type": "byte", + "value": 48 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion033" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion033" + } +} diff --git a/src/module/uti/potion035.uti.json b/src/module/uti/potion035.uti.json new file mode 100644 index 0000000..2b4363e --- /dev/null +++ b/src/module/uti/potion035.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 750 + }, + "BaseItem": { + "type": "int", + "value": 49 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This potion gives the imbiber the ability to breath water for 1 hour or until they rest.\n\nThis makes the drinker immune to drown attacks." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Water Breathing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 77 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 24 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "potion035" + }, + "TemplateResRef": { + "type": "resref", + "value": "potion035" + } +} diff --git a/src/module/uti/qstaff001.uti.json b/src/module/uti/qstaff001.uti.json new file mode 100644 index 0000000..3cd3ebc --- /dev/null +++ b/src/module/uti/qstaff001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 50 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quarterstaff", + "id": 1544 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "qstaff001" + }, + "TemplateResRef": { + "type": "resref", + "value": "qstaff001" + } +} diff --git a/src/module/uti/qstaff101.uti.json b/src/module/uti/qstaff101.uti.json new file mode 100644 index 0000000..5621783 --- /dev/null +++ b/src/module/uti/qstaff101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 980 + }, + "BaseItem": { + "type": "int", + "value": 50 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quarterstaff +1", + "id": 1544 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "qstaff101" + }, + "TemplateResRef": { + "type": "resref", + "value": "qstaff101" + } +} diff --git a/src/module/uti/qstaff201.uti.json b/src/module/uti/qstaff201.uti.json new file mode 100644 index 0000000..f620ddd --- /dev/null +++ b/src/module/uti/qstaff201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1380 + }, + "BaseItem": { + "type": "int", + "value": 50 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quarterstaff +2", + "id": 1544 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "qstaff201" + }, + "TemplateResRef": { + "type": "resref", + "value": "qstaff201" + } +} diff --git a/src/module/uti/qstaff301.uti.json b/src/module/uti/qstaff301.uti.json new file mode 100644 index 0000000..85261ef --- /dev/null +++ b/src/module/uti/qstaff301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1778 + }, + "BaseItem": { + "type": "int", + "value": 50 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quarterstaff +3", + "id": 1544 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "qstaff301" + }, + "TemplateResRef": { + "type": "resref", + "value": "qstaff301" + } +} diff --git a/src/module/uti/qstaff401.uti.json b/src/module/uti/qstaff401.uti.json new file mode 100644 index 0000000..3403faf --- /dev/null +++ b/src/module/uti/qstaff401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2178 + }, + "BaseItem": { + "type": "int", + "value": 50 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quarterstaff +4", + "id": 1544 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "qstaff401" + }, + "TemplateResRef": { + "type": "resref", + "value": "qstaff401" + } +} diff --git a/src/module/uti/qstaff501.uti.json b/src/module/uti/qstaff501.uti.json new file mode 100644 index 0000000..f11b453 --- /dev/null +++ b/src/module/uti/qstaff501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2578 + }, + "BaseItem": { + "type": "int", + "value": 50 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50600 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quarterstaff +5", + "id": 1544 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 46 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "qstaff501" + }, + "TemplateResRef": { + "type": "resref", + "value": "qstaff501" + } +} diff --git a/src/module/uti/qualitymaterials.uti.json b/src/module/uti/qualitymaterials.uti.json new file mode 100644 index 0000000..a348481 --- /dev/null +++ b/src/module/uti/qualitymaterials.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 100 + }, + "BaseItem": { + "type": "int", + "value": 112 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used in the creation of master work items." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quality Materials" + } + }, + "ModelPart1": { + "type": "byte", + "value": 104 + }, + "PaletteID": { + "type": "byte", + "value": 64 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 11 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 81 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "QualityMaterials" + }, + "TemplateResRef": { + "type": "resref", + "value": "qualitymaterials" + } +} diff --git a/src/module/uti/rapier001.uti.json b/src/module/uti/rapier001.uti.json new file mode 100644 index 0000000..4f3e629 --- /dev/null +++ b/src/module/uti/rapier001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 51 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 40 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rapier", + "id": 1545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rapier001" + }, + "TemplateResRef": { + "type": "resref", + "value": "rapier001" + } +} diff --git a/src/module/uti/rapier101.uti.json b/src/module/uti/rapier101.uti.json new file mode 100644 index 0000000..830f906 --- /dev/null +++ b/src/module/uti/rapier101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 662 + }, + "BaseItem": { + "type": "int", + "value": 51 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rapier +1", + "id": 1545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rapier101" + }, + "TemplateResRef": { + "type": "resref", + "value": "rapier101" + } +} diff --git a/src/module/uti/rapier201.uti.json b/src/module/uti/rapier201.uti.json new file mode 100644 index 0000000..f86769f --- /dev/null +++ b/src/module/uti/rapier201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1062 + }, + "BaseItem": { + "type": "int", + "value": 51 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rapier +2", + "id": 1545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rapier201" + }, + "TemplateResRef": { + "type": "resref", + "value": "rapier201" + } +} diff --git a/src/module/uti/rapier301.uti.json b/src/module/uti/rapier301.uti.json new file mode 100644 index 0000000..9c61738 --- /dev/null +++ b/src/module/uti/rapier301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1460 + }, + "BaseItem": { + "type": "int", + "value": 51 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rapier +3", + "id": 1545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rapier301" + }, + "TemplateResRef": { + "type": "resref", + "value": "rapier301" + } +} diff --git a/src/module/uti/rapier401.uti.json b/src/module/uti/rapier401.uti.json new file mode 100644 index 0000000..8399f54 --- /dev/null +++ b/src/module/uti/rapier401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1860 + }, + "BaseItem": { + "type": "int", + "value": 51 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rapier +4", + "id": 1545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rapier401" + }, + "TemplateResRef": { + "type": "resref", + "value": "rapier401" + } +} diff --git a/src/module/uti/rapier501.uti.json b/src/module/uti/rapier501.uti.json new file mode 100644 index 0000000..aada4bd --- /dev/null +++ b/src/module/uti/rapier501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2260 + }, + "BaseItem": { + "type": "int", + "value": 51 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rapier +5", + "id": 1545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rapier501" + }, + "TemplateResRef": { + "type": "resref", + "value": "rapier501" + } +} diff --git a/src/module/uti/rapier601.uti.json b/src/module/uti/rapier601.uti.json new file mode 100644 index 0000000..68baaf4 --- /dev/null +++ b/src/module/uti/rapier601.uti.json @@ -0,0 +1,184 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2258 + }, + "BaseItem": { + "type": "int", + "value": 51 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Three times per day the wielder of this weapon can drain 1d6 constitution from a target.\n\nThis loss is due to blood loss, things without blood are unaffected." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rapier of Puncturing", + "id": 1545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 24 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 48 + }, + "Subtype": { + "type": "word", + "value": 25 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rapier601" + }, + "TemplateResRef": { + "type": "resref", + "value": "rapier601" + } +} diff --git a/src/module/uti/rdg_art1001.uti.json b/src/module/uti/rdg_art1001.uti.json new file mode 100644 index 0000000..8333e87 --- /dev/null +++ b/src/module/uti/rdg_art1001.uti.json @@ -0,0 +1,79 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3499 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Jeweled Statuette" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_art1001" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_art1001" + } +} diff --git a/src/module/uti/rdg_art101.uti.json b/src/module/uti/rdg_art101.uti.json new file mode 100644 index 0000000..0cc6fa4 --- /dev/null +++ b/src/module/uti/rdg_art101.uti.json @@ -0,0 +1,79 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 54 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 55 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Irovy Statuette" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_art101" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_art101" + } +} diff --git a/src/module/uti/rdg_art1101.uti.json b/src/module/uti/rdg_art1101.uti.json new file mode 100644 index 0000000..b516f16 --- /dev/null +++ b/src/module/uti/rdg_art1101.uti.json @@ -0,0 +1,79 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4999 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Jeweled Statuette" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_art1101" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_art1101" + } +} diff --git a/src/module/uti/rdg_art1201.uti.json b/src/module/uti/rdg_art1201.uti.json new file mode 100644 index 0000000..ab0be21 --- /dev/null +++ b/src/module/uti/rdg_art1201.uti.json @@ -0,0 +1,79 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 6999 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 7000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Jeweled Statuette" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_art1201" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_art1201" + } +} diff --git a/src/module/uti/rdg_art201.uti.json b/src/module/uti/rdg_art201.uti.json new file mode 100644 index 0000000..09c57f6 --- /dev/null +++ b/src/module/uti/rdg_art201.uti.json @@ -0,0 +1,79 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 104 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 105 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Silver Chalice" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_art201" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_art201" + } +} diff --git a/src/module/uti/rdg_art301.uti.json b/src/module/uti/rdg_art301.uti.json new file mode 100644 index 0000000..875d1f9 --- /dev/null +++ b/src/module/uti/rdg_art301.uti.json @@ -0,0 +1,79 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 349 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Brass Mug with Jade Inlay" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_art301" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_art301" + } +} diff --git a/src/module/uti/rdg_art401.uti.json b/src/module/uti/rdg_art401.uti.json new file mode 100644 index 0000000..3c1ba64 --- /dev/null +++ b/src/module/uti/rdg_art401.uti.json @@ -0,0 +1,79 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 549 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 550 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Silver Comb" + } + }, + "ModelPart1": { + "type": "byte", + "value": 51 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_art401" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_art401" + } +} diff --git a/src/module/uti/rdg_art501.uti.json b/src/module/uti/rdg_art501.uti.json new file mode 100644 index 0000000..7f6a4ca --- /dev/null +++ b/src/module/uti/rdg_art501.uti.json @@ -0,0 +1,79 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 699 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gold Idol" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_art501" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_art501" + } +} diff --git a/src/module/uti/rdg_art601.uti.json b/src/module/uti/rdg_art601.uti.json new file mode 100644 index 0000000..4cd09b2 --- /dev/null +++ b/src/module/uti/rdg_art601.uti.json @@ -0,0 +1,79 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1049 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1050 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Electrum Ceremonial Dagger" + } + }, + "ModelPart1": { + "type": "byte", + "value": 40 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_art601" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_art601" + } +} diff --git a/src/module/uti/rdg_art701.uti.json b/src/module/uti/rdg_art701.uti.json new file mode 100644 index 0000000..7b8cea1 --- /dev/null +++ b/src/module/uti/rdg_art701.uti.json @@ -0,0 +1,79 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1399 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1400 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fine Pendant on a Gold Chain" + } + }, + "ModelPart1": { + "type": "byte", + "value": 34 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_art701" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_art701" + } +} diff --git a/src/module/uti/rdg_art801.uti.json b/src/module/uti/rdg_art801.uti.json new file mode 100644 index 0000000..af6c70e --- /dev/null +++ b/src/module/uti/rdg_art801.uti.json @@ -0,0 +1,79 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1750 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1751 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fine Lute" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_art801" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_art801" + } +} diff --git a/src/module/uti/rdg_art901.uti.json b/src/module/uti/rdg_art901.uti.json new file mode 100644 index 0000000..a936837 --- /dev/null +++ b/src/module/uti/rdg_art901.uti.json @@ -0,0 +1,79 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1749 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Jeweled Statuette" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_art901" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_art901" + } +} diff --git a/src/module/uti/rdg_gem101.uti.json b/src/module/uti/rdg_gem101.uti.json new file mode 100644 index 0000000..924f707 --- /dev/null +++ b/src/module/uti/rdg_gem101.uti.json @@ -0,0 +1,83 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 10 + }, + "BaseItem": { + "type": "int", + "value": 77 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "Type 1 Gem for the GetHasGem Function." + }, + "Cost": { + "type": "dword", + "value": 10 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The lowest quality of gem stones. \n\nBanded Eye\nMoss Agate\nBlue Quartz\nHematite\nLapis Lazuli\nMalachite\nObsidian\nRhodochrosite\nTiger Eye\nTurquoise\nIrregular pearls" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "One of the world's rarest and most coveted gems, alexandrite takes on a brilliant green hue when under indirect sunlight but turns blood-red when exposed to candlelight. Loretellers claim that all alexandrite comes from the body of the oldest son of Silvanus, the Forest Father. A common nursery rhyme goes \"Silvanus' wife went mad one night, murdering her child by candlelight.\"", + "id": 13315 + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Very Common Gem", + "id": 13314 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 57 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_gem101" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_gem101" + } +} diff --git a/src/module/uti/rdg_gem201.uti.json b/src/module/uti/rdg_gem201.uti.json new file mode 100644 index 0000000..9f00d27 --- /dev/null +++ b/src/module/uti/rdg_gem201.uti.json @@ -0,0 +1,83 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 50 + }, + "BaseItem": { + "type": "int", + "value": 77 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "Type 2 Gem for the GetHasGem Function." + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The second lowest quality of gem stones. \n\nBloodstone\nCarnelian\nChalcedony\nChryophase\nCitrine\nIolite\nJasper\nMoonstone\nOnyx\nPeridot\nClear Quartz\nSard\nSardonyx\nRose, Smoky, or Star Rose Quartz \nZircon." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "One of the world's rarest and most coveted gems, alexandrite takes on a brilliant green hue when under indirect sunlight but turns blood-red when exposed to candlelight. Loretellers claim that all alexandrite comes from the body of the oldest son of Silvanus, the Forest Father. A common nursery rhyme goes \"Silvanus' wife went mad one night, murdering her child by candlelight.\"", + "id": 13315 + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Common Gem", + "id": 13314 + } + }, + "ModelPart1": { + "type": "byte", + "value": 8 + }, + "PaletteID": { + "type": "byte", + "value": 57 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_gem201" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_gem201" + } +} diff --git a/src/module/uti/rdg_gem301.uti.json b/src/module/uti/rdg_gem301.uti.json new file mode 100644 index 0000000..f7008b3 --- /dev/null +++ b/src/module/uti/rdg_gem301.uti.json @@ -0,0 +1,83 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 100 + }, + "BaseItem": { + "type": "int", + "value": 77 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "Type 3 Gem for the GetHasGem Function." + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The second lowest quality of gem stones. \n\nAmber\nAmethyst\nChrysoberyl \nCoral \nRed or Brown-Green Garnet\nJade\nJet \nWhite, Golden, Pink or Silver Pearl\nRed Spindel\nRed-Brownor Deep Green Spindel\nTourmaline" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "One of the world's rarest and most coveted gems, alexandrite takes on a brilliant green hue when under indirect sunlight but turns blood-red when exposed to candlelight. Loretellers claim that all alexandrite comes from the body of the oldest son of Silvanus, the Forest Father. A common nursery rhyme goes \"Silvanus' wife went mad one night, murdering her child by candlelight.\"", + "id": 13315 + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Semi Precious Gem", + "id": 13314 + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "PaletteID": { + "type": "byte", + "value": 57 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_gem301" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_gem301" + } +} diff --git a/src/module/uti/rdg_gem401.uti.json b/src/module/uti/rdg_gem401.uti.json new file mode 100644 index 0000000..e1ed23c --- /dev/null +++ b/src/module/uti/rdg_gem401.uti.json @@ -0,0 +1,83 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 500 + }, + "BaseItem": { + "type": "int", + "value": 77 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "Type 4 Gem for the GetHasGem Function." + }, + "Cost": { + "type": "dword", + "value": 500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The fourth quality of gem stones. \n\nAlexandrite\nAquamarine\nViolet Garnet\nBlack Pearl\nDeep Blue Spindel\nGolden Yellow Topaz" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "One of the world's rarest and most coveted gems, alexandrite takes on a brilliant green hue when under indirect sunlight but turns blood-red when exposed to candlelight. Loretellers claim that all alexandrite comes from the body of the oldest son of Silvanus, the Forest Father. A common nursery rhyme goes \"Silvanus' wife went mad one night, murdering her child by candlelight.\"", + "id": 13315 + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Precious Gem", + "id": 13314 + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 57 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_gem401" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_gem401" + } +} diff --git a/src/module/uti/rdg_gem501.uti.json b/src/module/uti/rdg_gem501.uti.json new file mode 100644 index 0000000..cd2e83a --- /dev/null +++ b/src/module/uti/rdg_gem501.uti.json @@ -0,0 +1,83 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1000 + }, + "BaseItem": { + "type": "int", + "value": 77 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "Type 5 Gem for the GetHasGem Function." + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The second to highest quality of gem stones. \n\nEmerald\nWhite, Black, or Fire Opal\nBlue Sapphire\nFirey Yellow or Rich Corundrum\nBlue or Black Star Sapphire\nStar Ruby" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "One of the world's rarest and most coveted gems, alexandrite takes on a brilliant green hue when under indirect sunlight but turns blood-red when exposed to candlelight. Loretellers claim that all alexandrite comes from the body of the oldest son of Silvanus, the Forest Father. A common nursery rhyme goes \"Silvanus' wife went mad one night, murdering her child by candlelight.\"", + "id": 13315 + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Very Rare Gem", + "id": 13314 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 57 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_gem501" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_gem501" + } +} diff --git a/src/module/uti/rdg_gem601.uti.json b/src/module/uti/rdg_gem601.uti.json new file mode 100644 index 0000000..f9d0fa2 --- /dev/null +++ b/src/module/uti/rdg_gem601.uti.json @@ -0,0 +1,83 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5000 + }, + "BaseItem": { + "type": "int", + "value": 77 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "Type 6 Gem for the GetHasGem Function." + }, + "Cost": { + "type": "dword", + "value": 5000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The second to highest quality of gem stones. \n\nDiamonds" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "One of the world's rarest and most coveted gems, alexandrite takes on a brilliant green hue when under indirect sunlight but turns blood-red when exposed to candlelight. Loretellers claim that all alexandrite comes from the body of the oldest son of Silvanus, the Forest Father. A common nursery rhyme goes \"Silvanus' wife went mad one night, murdering her child by candlelight.\"", + "id": 13315 + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Incredibly Rare Gem", + "id": 13314 + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "PaletteID": { + "type": "byte", + "value": 57 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_gem601" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_gem601" + } +} diff --git a/src/module/uti/rdg_orc_armor.uti.json b/src/module/uti/rdg_orc_armor.uti.json new file mode 100644 index 0000000..bd44709 --- /dev/null +++ b/src/module/uti/rdg_orc_armor.uti.json @@ -0,0 +1,176 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 16 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 9 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 13 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 12 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 1 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 12 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 30 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 45 + }, + "Cloth2Color": { + "type": "byte", + "value": 14 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 13 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Orc Splint Mail", + "id": 12838 + } + }, + "Metal1Color": { + "type": "byte", + "value": 51 + }, + "Metal2Color": { + "type": "byte", + "value": 50 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "splint001" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_orc_armor" + } +} diff --git a/src/module/uti/rdg_rope.uti.json b/src/module/uti/rdg_rope.uti.json new file mode 100644 index 0000000..3c2c74a --- /dev/null +++ b/src/module/uti/rdg_rope.uti.json @@ -0,0 +1,109 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rope" + } + }, + "ModelPart1": { + "type": "byte", + "value": 103 + }, + "PaletteID": { + "type": "byte", + "value": 20 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 11 + }, + "Param1Value": { + "type": "byte", + "value": 1 + }, + "PropertyName": { + "type": "word", + "value": 81 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_rope" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_rope" + } +} diff --git a/src/module/uti/reflecmat.uti.json b/src/module/uti/reflecmat.uti.json new file mode 100644 index 0000000..2f26714 --- /dev/null +++ b/src/module/uti/reflecmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used on a shield. This shield will gain the ability to cast a level 13 version of Spell Mantle on it's user once per day.\n\nAdding this ability costs as much as adding +5 enchantment to the item.\n\nThis material requires the craftsman to be a level 14 spell caster with the Spell Mantle spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spell Mantle Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "reflecmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "reflecmat" + } +} diff --git a/src/module/uti/ring001.uti.json b/src/module/uti/ring001.uti.json new file mode 100644 index 0000000..38f26c4 --- /dev/null +++ b/src/module/uti/ring001.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1179 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Protection +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring001" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring001" + } +} diff --git a/src/module/uti/ring002.uti.json b/src/module/uti/ring002.uti.json new file mode 100644 index 0000000..f270679 --- /dev/null +++ b/src/module/uti/ring002.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1987 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Warmth" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring002" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring002" + } +} diff --git a/src/module/uti/ring003.uti.json b/src/module/uti/ring003.uti.json new file mode 100644 index 0000000..9265d4c --- /dev/null +++ b/src/module/uti/ring003.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4344 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 8000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Protection +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring003" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring003" + } +} diff --git a/src/module/uti/ring004.uti.json b/src/module/uti/ring004.uti.json new file mode 100644 index 0000000..057a8d8 --- /dev/null +++ b/src/module/uti/ring004.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2874 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 8500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Force Shield" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 348 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring004" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring004" + } +} diff --git a/src/module/uti/ring005.uti.json b/src/module/uti/ring005.uti.json new file mode 100644 index 0000000..44e4b35 --- /dev/null +++ b/src/module/uti/ring005.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9499 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 9500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Animal Friendship" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring005" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring005" + } +} diff --git a/src/module/uti/ring006.uti.json b/src/module/uti/ring006.uti.json new file mode 100644 index 0000000..d0cd474 --- /dev/null +++ b/src/module/uti/ring006.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4800 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 12000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Chameleon" + } + }, + "ModelPart1": { + "type": "byte", + "value": 35 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 15 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 5 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring006" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring006" + } +} diff --git a/src/module/uti/ring007.uti.json b/src/module/uti/ring007.uti.json new file mode 100644 index 0000000..1d8a4ea --- /dev/null +++ b/src/module/uti/ring007.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 15224 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Acid Resistance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring007" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring007" + } +} diff --git a/src/module/uti/ring008.uti.json b/src/module/uti/ring008.uti.json new file mode 100644 index 0000000..912c078 --- /dev/null +++ b/src/module/uti/ring008.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14987 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Cold Resistance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring008" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring008" + } +} diff --git a/src/module/uti/ring009.uti.json b/src/module/uti/ring009.uti.json new file mode 100644 index 0000000..8e48bbd --- /dev/null +++ b/src/module/uti/ring009.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14718 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Electrical Resistance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 26 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 9 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring009" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring009" + } +} diff --git a/src/module/uti/ring010.uti.json b/src/module/uti/ring010.uti.json new file mode 100644 index 0000000..7594a8e --- /dev/null +++ b/src/module/uti/ring010.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14418 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Fire Resistance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring010" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring010" + } +} diff --git a/src/module/uti/ring011.uti.json b/src/module/uti/ring011.uti.json new file mode 100644 index 0000000..eabe6b7 --- /dev/null +++ b/src/module/uti/ring011.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14418 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 16000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Sonic Resistance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 13 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring011" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring011" + } +} diff --git a/src/module/uti/ring012.uti.json b/src/module/uti/ring012.uti.json new file mode 100644 index 0000000..80874e7 --- /dev/null +++ b/src/module/uti/ring012.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9484 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 18000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Protection +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 3 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring012" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring012" + } +} diff --git a/src/module/uti/ring013.uti.json b/src/module/uti/ring013.uti.json new file mode 100644 index 0000000..7203435 --- /dev/null +++ b/src/module/uti/ring013.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3124 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 20000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Invisibility" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 151 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring013" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring013" + } +} diff --git a/src/module/uti/ring014.uti.json b/src/module/uti/ring014.uti.json new file mode 100644 index 0000000..f2c26e2 --- /dev/null +++ b/src/module/uti/ring014.uti.json @@ -0,0 +1,266 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 18199 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 20000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Wizardry I" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring014" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring014" + } +} diff --git a/src/module/uti/ring015.uti.json b/src/module/uti/ring015.uti.json new file mode 100644 index 0000000..a355c44 --- /dev/null +++ b/src/module/uti/ring015.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16497 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 24000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Acid Resistance Major" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring015" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring015" + } +} diff --git a/src/module/uti/ring016.uti.json b/src/module/uti/ring016.uti.json new file mode 100644 index 0000000..a376497 --- /dev/null +++ b/src/module/uti/ring016.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14200 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 24000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Cold Resistance Major" + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring016" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring016" + } +} diff --git a/src/module/uti/ring017.uti.json b/src/module/uti/ring017.uti.json new file mode 100644 index 0000000..4a17f7b --- /dev/null +++ b/src/module/uti/ring017.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11597 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 24000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Electrical Resistance Major" + } + }, + "ModelPart1": { + "type": "byte", + "value": 26 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 9 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring017" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring017" + } +} diff --git a/src/module/uti/ring018.uti.json b/src/module/uti/ring018.uti.json new file mode 100644 index 0000000..1db9608 --- /dev/null +++ b/src/module/uti/ring018.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 8687 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 24000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Fire Resistance Major" + } + }, + "ModelPart1": { + "type": "byte", + "value": 25 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring018" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring018" + } +} diff --git a/src/module/uti/ring019.uti.json b/src/module/uti/ring019.uti.json new file mode 100644 index 0000000..6ed14a5 --- /dev/null +++ b/src/module/uti/ring019.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 8687 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 24000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Sonic Resistance Major" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 13 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring019" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring019" + } +} diff --git a/src/module/uti/ring020.uti.json b/src/module/uti/ring020.uti.json new file mode 100644 index 0000000..0b65c63 --- /dev/null +++ b/src/module/uti/ring020.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4609 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Clairvoyance/Audience" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 12 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 43 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring020" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring020" + } +} diff --git a/src/module/uti/ring021.uti.json b/src/module/uti/ring021.uti.json new file mode 100644 index 0000000..d2d5adf --- /dev/null +++ b/src/module/uti/ring021.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 13749 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Evasion" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 38 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring021" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring021" + } +} diff --git a/src/module/uti/ring022.uti.json b/src/module/uti/ring022.uti.json new file mode 100644 index 0000000..805bf9d --- /dev/null +++ b/src/module/uti/ring022.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 29995 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 30000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Allows the user to do a short range teleport." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Blinking" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring022" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring022" + } +} diff --git a/src/module/uti/ring023.uti.json b/src/module/uti/ring023.uti.json new file mode 100644 index 0000000..02cc592 --- /dev/null +++ b/src/module/uti/ring023.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16599 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 32000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Protection +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 9 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring023" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring023" + } +} diff --git a/src/module/uti/ring024.uti.json b/src/module/uti/ring024.uti.json new file mode 100644 index 0000000..599d8a4 --- /dev/null +++ b/src/module/uti/ring024.uti.json @@ -0,0 +1,359 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 28180 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 40000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Wizardry II" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring024" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring024" + } +} diff --git a/src/module/uti/ring025.uti.json b/src/module/uti/ring025.uti.json new file mode 100644 index 0000000..f3a9e9d --- /dev/null +++ b/src/module/uti/ring025.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 19999 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 40000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Freedom of Movement" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 75 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring025" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring025" + } +} diff --git a/src/module/uti/ring026.uti.json b/src/module/uti/ring026.uti.json new file mode 100644 index 0000000..3a1c60f --- /dev/null +++ b/src/module/uti/ring026.uti.json @@ -0,0 +1,111 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25689 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Protection +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 5 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring026" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring026" + } +} diff --git a/src/module/uti/ring027.uti.json b/src/module/uti/ring027.uti.json new file mode 100644 index 0000000..85f19e2 --- /dev/null +++ b/src/module/uti/ring027.uti.json @@ -0,0 +1,483 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 15199 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 80000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Wizardry III" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring027" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring027" + } +} diff --git a/src/module/uti/ring028.uti.json b/src/module/uti/ring028.uti.json new file mode 100644 index 0000000..e3b5169 --- /dev/null +++ b/src/module/uti/ring028.uti.json @@ -0,0 +1,142 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1799 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 90000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Regeneration" + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 51 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring028" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring028" + } +} diff --git a/src/module/uti/ring029.uti.json b/src/module/uti/ring029.uti.json new file mode 100644 index 0000000..89c3b06 --- /dev/null +++ b/src/module/uti/ring029.uti.json @@ -0,0 +1,452 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14922 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 100000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Wizardry IV" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 13 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 13 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring029" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring029" + } +} diff --git a/src/module/uti/ring030.uti.json b/src/module/uti/ring030.uti.json new file mode 100644 index 0000000..001a936 --- /dev/null +++ b/src/module/uti/ring030.uti.json @@ -0,0 +1,268 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 19984 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 200000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In addition to everything else this ring also provides the feather fall ability, which prevents damage from pit traps.\n\nIt also allows limited flight to be able to go back to the top of said trap." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Air Command" + } + }, + "ModelPart1": { + "type": "byte", + "value": 7 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 30 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 410 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 20 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 49 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring030" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring030" + } +} diff --git a/src/module/uti/ring031.uti.json b/src/module/uti/ring031.uti.json new file mode 100644 index 0000000..6871d11 --- /dev/null +++ b/src/module/uti/ring031.uti.json @@ -0,0 +1,328 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7874 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 200000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Earth Command" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 357 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 260 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 20 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 49 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 218 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 220 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 217 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 219 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring031" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring031" + } +} diff --git a/src/module/uti/ring032.uti.json b/src/module/uti/ring032.uti.json new file mode 100644 index 0000000..2a9c1e8 --- /dev/null +++ b/src/module/uti/ring032.uti.json @@ -0,0 +1,328 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 18768 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 200000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Fire Command" + } + }, + "ModelPart1": { + "type": "byte", + "value": 29 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 111 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 116 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 117 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 280 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 20 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 49 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring032" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring032" + } +} diff --git a/src/module/uti/ring033.uti.json b/src/module/uti/ring033.uti.json new file mode 100644 index 0000000..f8d13a8 --- /dev/null +++ b/src/module/uti/ring033.uti.json @@ -0,0 +1,237 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 21862 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 200000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In addition to its other powers this ring prevents the wearer from needing food." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Water Command" + } + }, + "ModelPart1": { + "type": "byte", + "value": 15 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 310 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 9 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 419 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 20 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 49 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 16 + }, + "CostValue": { + "type": "word", + "value": 201 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 53 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring033" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring033" + } +} diff --git a/src/module/uti/ring034.uti.json b/src/module/uti/ring034.uti.json new file mode 100644 index 0000000..41d9325 --- /dev/null +++ b/src/module/uti/ring034.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1995 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This ring will allow it's wearer to climb back out of a pit they have fallen into." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Climbing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring034" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring034" + } +} diff --git a/src/module/uti/ring035.uti.json b/src/module/uti/ring035.uti.json new file mode 100644 index 0000000..6d71f41 --- /dev/null +++ b/src/module/uti/ring035.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2000 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This ring prevents damage from falling into a trap." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Feather Fall" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring035" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring035" + } +} diff --git a/src/module/uti/ring036.uti.json b/src/module/uti/ring036.uti.json new file mode 100644 index 0000000..461a68c --- /dev/null +++ b/src/module/uti/ring036.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2500 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This ring prevents the need for food." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Sustenance" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring036" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring036" + } +} diff --git a/src/module/uti/ring037.uti.json b/src/module/uti/ring037.uti.json new file mode 100644 index 0000000..5bac050 --- /dev/null +++ b/src/module/uti/ring037.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2200 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This ring aids the user in attempting counter spell." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Counter Spelling" + } + }, + "ModelPart1": { + "type": "byte", + "value": 16 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 16 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring037" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring037" + } +} diff --git a/src/module/uti/ring038.uti.json b/src/module/uti/ring038.uti.json new file mode 100644 index 0000000..34bc142 --- /dev/null +++ b/src/module/uti/ring038.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 10885 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 90000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This ring allows the caster to store 3 spells into the ring. All 3 spells will be fired at once on the user so Fireball is not advised.\n\nOnce used the ring must be recharged with new spells." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Spell Storing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 523 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring038" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring038" + } +} diff --git a/src/module/uti/ring039.uti.json b/src/module/uti/ring039.uti.json new file mode 100644 index 0000000..485240c --- /dev/null +++ b/src/module/uti/ring039.uti.json @@ -0,0 +1,144 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 12187 + }, + "BaseItem": { + "type": "int", + "value": 52 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 50000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This ring will fire 1 to 4 electrical projectiles at the nearest available targets.\n\nThe damage of these lightning balls is determined by the number of balls fired.\n\n1: 4d6 \n2: 3d6\n3: 2d6\n4: 1d6" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ring of Shooting Stars" + } + }, + "ModelPart1": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 22 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 151 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ring039" + }, + "TemplateResRef": { + "type": "resref", + "value": "ring039" + } +} diff --git a/src/module/uti/rod101.uti.json b/src/module/uti/rod101.uti.json new file mode 100644 index 0000000..528173c --- /dev/null +++ b/src/module/uti/rod101.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 7999 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 11000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This rod when used against an opponent will attempt to destroy a magic item they are using. \n\nIf successful both that item and this rod are destroyed." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Cancelation" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 359 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod101" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod101" + } +} diff --git a/src/module/uti/rod102.uti.json b/src/module/uti/rod102.uti.json new file mode 100644 index 0000000..6dd8d1e --- /dev/null +++ b/src/module/uti/rod102.uti.json @@ -0,0 +1,124 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 13501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The rod of wonder is a strange and unpredictable device whose effects are an odd mixture of beneficial, harmful, and useless. They are often the product of magical experiments in crafting gone awry. ", + "id": 66624 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This rod has an aura of magic that produces a slight sensation of dizziness. It appears to be constructed somewhat haphazardly, of mismatched parts. ", + "id": 66623 + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Wonder", + "id": 9237 + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 414 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod102" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod102" + } +} diff --git a/src/module/uti/rod103.uti.json b/src/module/uti/rod103.uti.json new file mode 100644 index 0000000..fffc2bf --- /dev/null +++ b/src/module/uti/rod103.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5780 + }, + "BaseItem": { + "type": "int", + "value": 50 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 13000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of the Bear" + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 62 + }, + "Subtype": { + "type": "word", + "value": 4 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod103" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod103" + } +} diff --git a/src/module/uti/rod104.uti.json b/src/module/uti/rod104.uti.json new file mode 100644 index 0000000..1feb738 --- /dev/null +++ b/src/module/uti/rod104.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14399 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 15000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This rod protects the user against all types of fire attacks for 24 hours." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Flame Extinguishing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 359 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod104" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod104" + } +} diff --git a/src/module/uti/rod105.uti.json b/src/module/uti/rod105.uti.json new file mode 100644 index 0000000..df8c58c --- /dev/null +++ b/src/module/uti/rod105.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 13996 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 14000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Deals d4 strength and constitution damage.\n\nThe victim gets a Fortitude save vs. DC 14 to avoid this effect." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Withering" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod105" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod105" + } +} diff --git a/src/module/uti/rod106.uti.json b/src/module/uti/rod106.uti.json new file mode 100644 index 0000000..748a563 --- /dev/null +++ b/src/module/uti/rod106.uti.json @@ -0,0 +1,182 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3872 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 19000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of the Viper", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 207 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 62 + }, + "Subtype": { + "type": "word", + "value": 5 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod106" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod106" + } +} diff --git a/src/module/uti/rod107.uti.json b/src/module/uti/rod107.uti.json new file mode 100644 index 0000000..8d04402 --- /dev/null +++ b/src/module/uti/rod107.uti.json @@ -0,0 +1,180 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 37 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 24770 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Thunder and Lightning", + "id": 1531 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 164 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 254 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod107" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod107" + } +} diff --git a/src/module/uti/rod108.uti.json b/src/module/uti/rod108.uti.json new file mode 100644 index 0000000..c1912b7 --- /dev/null +++ b/src/module/uti/rod108.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 18324 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 23500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Trap Detection" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 327 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod108" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod108" + } +} diff --git a/src/module/uti/rod109.uti.json b/src/module/uti/rod109.uti.json new file mode 100644 index 0000000..ccbc03d --- /dev/null +++ b/src/module/uti/rod109.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 24998 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This rod allows the party to rest in the dungeon without worries of being caught unaware.\n\nReplentishes the parties rest pool.\n\nBasically this rod allows the party to rest in the dungeon when they feel like it, where they feel like it." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Enemy Detection" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod109" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod109" + } +} diff --git a/src/module/uti/rod110.uti.json b/src/module/uti/rod110.uti.json new file mode 100644 index 0000000..7d67a1b --- /dev/null +++ b/src/module/uti/rod110.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 10849 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 35000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Replentishes the parties rest pool.\n\nBasically this rod allows the party to rest in the dungeon when they feel like it." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Negation" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 160 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod110" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod110" + } +} diff --git a/src/module/uti/rod111.uti.json b/src/module/uti/rod111.uti.json new file mode 100644 index 0000000..9f5208b --- /dev/null +++ b/src/module/uti/rod111.uti.json @@ -0,0 +1,183 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 32072 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 35000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The special power of this weapon is to summon a +3 Dire Flail. Which you will automatically equip.\n\nWhy not just own a +3 Dire flail you ask.. This is lighter.\n\nAttempting to trade this item while the flail exists will result in the loss of both items." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Flailing" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 167 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 237 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod111" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod111" + } +} diff --git a/src/module/uti/rod112.uti.json b/src/module/uti/rod112.uti.json new file mode 100644 index 0000000..b7182ee --- /dev/null +++ b/src/module/uti/rod112.uti.json @@ -0,0 +1,121 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5999 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 60000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Rulership" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 33 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 180 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod112" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod112" + } +} diff --git a/src/module/uti/rod113.uti.json b/src/module/uti/rod113.uti.json new file mode 100644 index 0000000..efa9117 --- /dev/null +++ b/src/module/uti/rod113.uti.json @@ -0,0 +1,152 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3974 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 60000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Spell Aborption" + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 33 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 121 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 256 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod113" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod113" + } +} diff --git a/src/module/uti/rod114.uti.json b/src/module/uti/rod114.uti.json new file mode 100644 index 0000000..b8e4d62 --- /dev/null +++ b/src/module/uti/rod114.uti.json @@ -0,0 +1,214 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 12622 + }, + "BaseItem": { + "type": "int", + "value": 44 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 70000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The special power of this weapon is to summon a +2 Mace, +1 Flaming Long Sword, +4 Battle Axe, or a +3 Rapier.\n\nAttempting to trade any of the weapons, or the Rod while a weapon exists will result in the loss of both items." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Lordly Might" + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 144 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 277 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rod114" + }, + "TemplateResRef": { + "type": "resref", + "value": "rod114" + } +} diff --git a/src/module/uti/rodw111.uti.json b/src/module/uti/rodw111.uti.json new file mode 100644 index 0000000..1da0edd --- /dev/null +++ b/src/module/uti/rodw111.uti.json @@ -0,0 +1,153 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 32 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16900 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This is the modified version of the Rod of Failing. Using the special power will destroy this weapon.\n\nAttempting to trade this item will result in loss of the Rod of Flailing and this weapon." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Flailing", + "id": 1526 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 335 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rodw111" + }, + "TemplateResRef": { + "type": "resref", + "value": "rodw111" + } +} diff --git a/src/module/uti/rodw1114.uti.json b/src/module/uti/rodw1114.uti.json new file mode 100644 index 0000000..df8aefc --- /dev/null +++ b/src/module/uti/rodw1114.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 9 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 7228 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Attempting the Rod or Lordly Might while a weapon exists will result in the loss of both items." + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Lordly Might", + "id": 177 + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rodw114" + }, + "TemplateResRef": { + "type": "resref", + "value": "rodw1114" + } +} diff --git a/src/module/uti/rodw2114.uti.json b/src/module/uti/rodw2114.uti.json new file mode 100644 index 0000000..c3df057 --- /dev/null +++ b/src/module/uti/rodw2114.uti.json @@ -0,0 +1,152 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 1 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 10608 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Attempting the Rod or Lordly Might while a weapon exists will result in the loss of both items.", + "id": 14351 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Lordly Might", + "id": 14352 + } + }, + "ModelPart1": { + "type": "byte", + "value": 52 + }, + "ModelPart2": { + "type": "byte", + "value": 82 + }, + "ModelPart3": { + "type": "byte", + "value": 52 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rodw114" + }, + "TemplateResRef": { + "type": "resref", + "value": "rodw2114" + } +} diff --git a/src/module/uti/rodw3114.uti.json b/src/module/uti/rodw3114.uti.json new file mode 100644 index 0000000..813ffff --- /dev/null +++ b/src/module/uti/rodw3114.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1870 + }, + "BaseItem": { + "type": "int", + "value": 2 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Attempting the Rod or Lordly Might while a weapon exists will result in the loss of both items." + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Lordly Might", + "id": 169 + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 52 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rodw114" + }, + "TemplateResRef": { + "type": "resref", + "value": "rodw3114" + } +} diff --git a/src/module/uti/rodw4114.uti.json b/src/module/uti/rodw4114.uti.json new file mode 100644 index 0000000..5a851a1 --- /dev/null +++ b/src/module/uti/rodw4114.uti.json @@ -0,0 +1,122 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1460 + }, + "BaseItem": { + "type": "int", + "value": 51 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18320 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Attempting the Rod or Lordly Might while a weapon exists will result in the loss of both items." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Rod of Lordly Might", + "id": 1545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 48 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rodw114" + }, + "TemplateResRef": { + "type": "resref", + "value": "rodw4114" + } +} diff --git a/src/module/uti/sbow001.uti.json b/src/module/uti/sbow001.uti.json new file mode 100644 index 0000000..18dc920 --- /dev/null +++ b/src/module/uti/sbow001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 11 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 60 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shortbow", + "id": 171 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 45 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sbow001" + }, + "TemplateResRef": { + "type": "resref", + "value": "sbow001" + } +} diff --git a/src/module/uti/sbow101.uti.json b/src/module/uti/sbow101.uti.json new file mode 100644 index 0000000..880055d --- /dev/null +++ b/src/module/uti/sbow101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1866 + }, + "BaseItem": { + "type": "int", + "value": 11 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shortbow +1", + "id": 171 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 45 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sbow101" + }, + "TemplateResRef": { + "type": "resref", + "value": "sbow101" + } +} diff --git a/src/module/uti/sbow201.uti.json b/src/module/uti/sbow201.uti.json new file mode 100644 index 0000000..ce20378 --- /dev/null +++ b/src/module/uti/sbow201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 8466 + }, + "BaseItem": { + "type": "int", + "value": 11 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 10330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shortbow +2", + "id": 171 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 45 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sbow201" + }, + "TemplateResRef": { + "type": "resref", + "value": "sbow201" + } +} diff --git a/src/module/uti/sbow301.uti.json b/src/module/uti/sbow301.uti.json new file mode 100644 index 0000000..e8f9686 --- /dev/null +++ b/src/module/uti/sbow301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14066 + }, + "BaseItem": { + "type": "int", + "value": 11 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shortbow +3", + "id": 171 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 45 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sbow301" + }, + "TemplateResRef": { + "type": "resref", + "value": "sbow301" + } +} diff --git a/src/module/uti/sbow401.uti.json b/src/module/uti/sbow401.uti.json new file mode 100644 index 0000000..82f09fc --- /dev/null +++ b/src/module/uti/sbow401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 24666 + }, + "BaseItem": { + "type": "int", + "value": 11 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32330 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shortbow +4", + "id": 171 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 45 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sbow401" + }, + "TemplateResRef": { + "type": "resref", + "value": "sbow401" + } +} diff --git a/src/module/uti/sbow501.uti.json b/src/module/uti/sbow501.uti.json new file mode 100644 index 0000000..18da339 --- /dev/null +++ b/src/module/uti/sbow501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 32767 + }, + "BaseItem": { + "type": "int", + "value": 11 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 44831 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shortbow +5", + "id": 171 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 45 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sbow501" + }, + "TemplateResRef": { + "type": "resref", + "value": "sbow501" + } +} diff --git a/src/module/uti/scale001.uti.json b/src/module/uti/scale001.uti.json new file mode 100644 index 0000000..9759312 --- /dev/null +++ b/src/module/uti/scale001.uti.json @@ -0,0 +1,176 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 35 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 9 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 11 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scale Mail", + "id": 12837 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scale001" + }, + "TemplateResRef": { + "type": "resref", + "value": "scale001" + } +} diff --git a/src/module/uti/scale101.uti.json b/src/module/uti/scale101.uti.json new file mode 100644 index 0000000..82b121d --- /dev/null +++ b/src/module/uti/scale101.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 444 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 35 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 9 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 11 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scale Mail +1", + "id": 12837 + } + }, + "Metal1Color": { + "type": "byte", + "value": 6 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scale101" + }, + "TemplateResRef": { + "type": "resref", + "value": "scale101" + } +} diff --git a/src/module/uti/scale201.uti.json b/src/module/uti/scale201.uti.json new file mode 100644 index 0000000..4670cf7 --- /dev/null +++ b/src/module/uti/scale201.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1176 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 35 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 9 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 11 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scale Mail +2", + "id": 12837 + } + }, + "Metal1Color": { + "type": "byte", + "value": 2 + }, + "Metal2Color": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scale201" + }, + "TemplateResRef": { + "type": "resref", + "value": "scale201" + } +} diff --git a/src/module/uti/scale301.uti.json b/src/module/uti/scale301.uti.json new file mode 100644 index 0000000..daf8b6b --- /dev/null +++ b/src/module/uti/scale301.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2188 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 35 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 9 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 11 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scale Mail +3", + "id": 12837 + } + }, + "Metal1Color": { + "type": "byte", + "value": 1 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scale301" + }, + "TemplateResRef": { + "type": "resref", + "value": "scale301" + } +} diff --git a/src/module/uti/scale401.uti.json b/src/module/uti/scale401.uti.json new file mode 100644 index 0000000..362509d --- /dev/null +++ b/src/module/uti/scale401.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3780 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 35 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 9 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 11 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scale Mail +4", + "id": 12837 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scale401" + }, + "TemplateResRef": { + "type": "resref", + "value": "scale401" + } +} diff --git a/src/module/uti/scale501.uti.json b/src/module/uti/scale501.uti.json new file mode 100644 index 0000000..6721b19 --- /dev/null +++ b/src/module/uti/scale501.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5652 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 11 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 3 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 5 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 35 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 11 + }, + "Cloth2Color": { + "type": "byte", + "value": 9 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 10 + }, + "Leather2Color": { + "type": "byte", + "value": 11 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scale Mail +5", + "id": 12837 + } + }, + "Metal1Color": { + "type": "byte", + "value": 12 + }, + "Metal2Color": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 7 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scale501" + }, + "TemplateResRef": { + "type": "resref", + "value": "scale501" + } +} diff --git a/src/module/uti/scimitar001.uti.json b/src/module/uti/scimitar001.uti.json new file mode 100644 index 0000000..2bf4b1a --- /dev/null +++ b/src/module/uti/scimitar001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 53 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 30 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scimitar", + "id": 1547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scimitar001" + }, + "TemplateResRef": { + "type": "resref", + "value": "scimitar001" + } +} diff --git a/src/module/uti/scimitar101.uti.json b/src/module/uti/scimitar101.uti.json new file mode 100644 index 0000000..1ed03f1 --- /dev/null +++ b/src/module/uti/scimitar101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 667 + }, + "BaseItem": { + "type": "int", + "value": 53 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scimitar +1", + "id": 1547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scimitar101" + }, + "TemplateResRef": { + "type": "resref", + "value": "scimitar101" + } +} diff --git a/src/module/uti/scimitar201.uti.json b/src/module/uti/scimitar201.uti.json new file mode 100644 index 0000000..71fe217 --- /dev/null +++ b/src/module/uti/scimitar201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1067 + }, + "BaseItem": { + "type": "int", + "value": 53 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scimitar +2", + "id": 1547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scimitar201" + }, + "TemplateResRef": { + "type": "resref", + "value": "scimitar201" + } +} diff --git a/src/module/uti/scimitar301.uti.json b/src/module/uti/scimitar301.uti.json new file mode 100644 index 0000000..4d39451 --- /dev/null +++ b/src/module/uti/scimitar301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1465 + }, + "BaseItem": { + "type": "int", + "value": 53 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scimitar +3", + "id": 1547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scimitar301" + }, + "TemplateResRef": { + "type": "resref", + "value": "scimitar301" + } +} diff --git a/src/module/uti/scimitar401.uti.json b/src/module/uti/scimitar401.uti.json new file mode 100644 index 0000000..bf7f08f --- /dev/null +++ b/src/module/uti/scimitar401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1865 + }, + "BaseItem": { + "type": "int", + "value": 53 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scimitar +4", + "id": 1547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scimitar401" + }, + "TemplateResRef": { + "type": "resref", + "value": "scimitar401" + } +} diff --git a/src/module/uti/scimitar501.uti.json b/src/module/uti/scimitar501.uti.json new file mode 100644 index 0000000..c0c1a64 --- /dev/null +++ b/src/module/uti/scimitar501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2265 + }, + "BaseItem": { + "type": "int", + "value": 53 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50315 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scimitar +5", + "id": 1547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scimitar501" + }, + "TemplateResRef": { + "type": "resref", + "value": "scimitar501" + } +} diff --git a/src/module/uti/scimitar601.uti.json b/src/module/uti/scimitar601.uti.json new file mode 100644 index 0000000..4c3d7ed --- /dev/null +++ b/src/module/uti/scimitar601.uti.json @@ -0,0 +1,182 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 53 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 56210 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sylvan Scimitar", + "id": 1547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 37 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 16 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scimitar601" + }, + "TemplateResRef": { + "type": "resref", + "value": "scimitar601" + } +} diff --git a/src/module/uti/scoll073.uti.json b/src/module/uti/scoll073.uti.json new file mode 100644 index 0000000..663729c --- /dev/null +++ b/src/module/uti/scoll073.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: Greater Spell Breach \nSave: None\nSpell Resistance: No\n\nCreates a barrier around the caster that absorbs all incoming spells. It can absorb up to 1d12+10 levels of spells before collapsing. ", + "id": 6170 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Spell Mantle", + "id": 13653 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 130 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scoll073" + }, + "TemplateResRef": { + "type": "resref", + "value": "scoll073" + } +} diff --git a/src/module/uti/scroll000.uti.json b/src/module/uti/scroll000.uti.json new file mode 100644 index 0000000..4ba75d8 --- /dev/null +++ b/src/module/uti/scroll000.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Conjuration\nDescriptor(s): Acid\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Large\nDuration: 1 Round / 2 Level\nAdditional Counter Spells:\nSave: Fortitude\nSpell Resistance: Yes \n\nAcid Fog creates a thick, clinging, greenish cloud. Creatures entering the cloud take 4d6 acid damage. Creatures inside the cloud must make a Fortitude save or have their movement reduced by 50%. Every round a creature spends in the cloud, it suffers 2d6 acid damage.", + "id": 6096 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Acid Fog", + "id": 13614 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll000" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll000" + } +} diff --git a/src/module/uti/scroll001.uti.json b/src/module/uti/scroll001.uti.json new file mode 100644 index 0000000..c364b12 --- /dev/null +++ b/src/module/uti/scroll001.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 2, Paladin 2, Ranger 3\nInnate Level: 2\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single \nDuration: 1 Turn / Level\nAdditional Counter Spells: Doom\nSave: Harmless\nSpell Resistance: No\n\nThe target gains a +1 bonus to attack rolls, a +1 bonus on saving throws versus fear, and a 1d8 bonus to maximum hit points.", + "id": 6097 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Aid", + "id": 13614 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll001" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll001" + } +} diff --git a/src/module/uti/scroll002.uti.json b/src/module/uti/scroll002.uti.json new file mode 100644 index 0000000..5de5980 --- /dev/null +++ b/src/module/uti/scroll002.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3, Wizard / Sorcerer 5\nInnate Level: 3\nSchool: Necromancy\nDescriptor(s): Evil\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: Sunbeam\nSave: None\nSpell Resistance: No\n\nAnimate Dead summons forth an undead minion. The type of undead summoned is dependent upon the caster level:\nLevels 1 to 5: Tyrantfog zombie\nLevels 6 to 9: Skeletal warrior\nLevel 10 or more: Skeletal Chieftain", + "id": 6098 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Animate Dead", + "id": 13607 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll002" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll002" + } +} diff --git a/src/module/uti/scroll003.uti.json b/src/module/uti/scroll003.uti.json new file mode 100644 index 0000000..00bfee1 --- /dev/null +++ b/src/module/uti/scroll003.uti.json @@ -0,0 +1,146 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 6 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 2\nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): None\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nBarkskin hardens the target creature's skin, granting a natural armor bonus to Armor Class based on the caster's level:\nLevel 1-6: +3\nLevel 7-12: +4\nLevels 13+: +5", + "id": 6099 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Barkskin", + "id": 13614 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll003" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll003" + } +} diff --git a/src/module/uti/scroll004.uti.json b/src/module/uti/scroll004.uti.json new file mode 100644 index 0000000..e2d9f56 --- /dev/null +++ b/src/module/uti/scroll004.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Wizard / Sorcerer 4\nInnate Level: 3\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Permanent\nAdditional Counter Spells: Remove Curse\nSave: Will Negates\nSpell Resistance: Yes\n\nBestow Curse lowers all of the target creature's ability scores by 2.", + "id": 6100 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bestow Curse", + "id": 13595 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll004" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll004" + } +} diff --git a/src/module/uti/scroll005.uti.json b/src/module/uti/scroll005.uti.json new file mode 100644 index 0000000..0df0b13 --- /dev/null +++ b/src/module/uti/scroll005.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 6 \nInnate Level: 6\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Wall 30 ft Long\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nBlade Barrier brings into being a 30-ft long and 3-ft wide wall of stabbing blades. All those passing through the wall take 1d6 points of damage per caster level.", + "id": 6101 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Blade Barrier", + "id": 13614 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll005" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll005" + } +} diff --git a/src/module/uti/scroll006.uti.json b/src/module/uti/scroll006.uti.json new file mode 100644 index 0000000..658d3b9 --- /dev/null +++ b/src/module/uti/scroll006.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1, Paladin 1\nInnate Level: 1\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Colossal\nDuration: 1 Turn / Level\nAdditional Counter Spells: Bane\nSave: Harmless\nSpell Resistance: No \n\nAll allies within the area of effect gain a +1 bonus to attack rolls, along with a +1 on Will saves against fear.", + "id": 6102 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bless", + "id": 13614 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll006" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll006" + } +} diff --git a/src/module/uti/scroll008.uti.json b/src/module/uti/scroll008.uti.json new file mode 100644 index 0000000..30fbeec --- /dev/null +++ b/src/module/uti/scroll008.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 3, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Enchantment\nDescriptor(s): \nComponent(s): Verbal\nRange: Medium\nArea of Effect / Target: Single\nDuration: 1 Round / Level\nAdditional Counter Spells: Remove Blindness/Deafness\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nThe target creature is struck blind and deaf.", + "id": 6104 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Blindness / Deafness", + "id": 13560 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll008" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll008" + } +} diff --git a/src/module/uti/scroll009.uti.json b/src/module/uti/scroll009.uti.json new file mode 100644 index 0000000..c28fda6 --- /dev/null +++ b/src/module/uti/scroll009.uti.json @@ -0,0 +1,332 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Druid 2, Paladin 2, Wizard / Sorcerer 2 \nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: Ray of Enfeeblement\nSave: Harmless\nSpell Resistance: No \n\nThe target creature's Strength is increased by 1d4+1.", + "id": 6105 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bull's Strength", + "id": 13561 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll009" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll009" + } +} diff --git a/src/module/uti/scroll010.uti.json b/src/module/uti/scroll010.uti.json new file mode 100644 index 0000000..a7bc28e --- /dev/null +++ b/src/module/uti/scroll010.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Transmutation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: 30 ft\nArea of Effect / Target: Spell Cone\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes \n\nA cone of fire shoots forth from the caster's hands, burning all those within its area of effect for 1d4 damage per caster level, up to a maximum of 5d4.", + "id": 6106 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Burning Hands", + "id": 13549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll010" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll010" + } +} diff --git a/src/module/uti/scroll011.uti.json b/src/module/uti/scroll011.uti.json new file mode 100644 index 0000000..97fbecf --- /dev/null +++ b/src/module/uti/scroll011.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 3 \nInnate Level: 3\nSchool: Evocation\nDescriptor(s): Electricity\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Large\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nAll enemies within the area of effect take 1d6 points of electrical damage per caster level, to a maximum of 10d6.", + "id": 6107 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Call Lightning", + "id": 13549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll011" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll011" + } +} diff --git a/src/module/uti/scroll012.uti.json b/src/module/uti/scroll012.uti.json new file mode 100644 index 0000000..96a2313 --- /dev/null +++ b/src/module/uti/scroll012.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1d6 + 2 Rounds\nAdditional Counter Spells: Cure Light Wounds \nSave: Fortitude Negates\nSpell Resistance: Yes\n\nThe caster's hand glows with an unearthly radiance. The target creature must make a Fortitude save or become paralyzed. Creatures paralyzed by this spell emit a noxious cloud that applies a -2 penalty to skills, saving throws, attack and damage rolls to all creatures within 5 feet.", + "id": 6161 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ghoul Touch", + "id": 13614 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 120 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll012" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll012" + } +} diff --git a/src/module/uti/scroll013.uti.json b/src/module/uti/scroll013.uti.json new file mode 100644 index 0000000..c6f8285 --- /dev/null +++ b/src/module/uti/scroll013.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Ranger 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe target creature's Dexterity is increased by 1d4+1.", + "id": 6109 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cat's Grace", + "id": 13561 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 25 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll013" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll013" + } +} diff --git a/src/module/uti/scroll014.uti.json b/src/module/uti/scroll014.uti.json new file mode 100644 index 0000000..fc0b2c1 --- /dev/null +++ b/src/module/uti/scroll014.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Evocation\nDescriptor(s): Electricity\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Colossal, 1 Target / Level\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes \n\nA bolt of electricity arcs through the caster's enemies for 1d6 points of electrical damage per caster level, up to a maximum of 20d6 points of damage to the initial target and half that amount to all secondary targets.", + "id": 6110 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Chain Lightning", + "id": 13618 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll014" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll014" + } +} diff --git a/src/module/uti/scroll015.uti.json b/src/module/uti/scroll015.uti.json new file mode 100644 index 0000000..8941a70 --- /dev/null +++ b/src/module/uti/scroll015.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 4 \nInnate Level: 3\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 3 Rounds + 1 / 2 Levels\nAdditional Counter Spells: Clarity\nSave: Will Negates\nSpell Resistance: Yes\n\nIn the eyes of the target creature, the personal reputation of the caster is improved by 50%.", + "id": 6111 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Charm Monster", + "id": 13586 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 31 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll015" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll015" + } +} diff --git a/src/module/uti/scroll016.uti.json b/src/module/uti/scroll016.uti.json new file mode 100644 index 0000000..6b6ea5e --- /dev/null +++ b/src/module/uti/scroll016.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Wizard / Sorcerer 1 \nInnate Level: 1\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 2 Rounds + 1 / 3 Levels\nAdditional Counter Spells: Clarity\nSave: Will Negates\nSpell Resistance: Yes\n\nIn the eyes of the target humanoid, the personal reputation of the caster is improved by 50%.", + "id": 6112 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Charm Person", + "id": 13544 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll016" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll016" + } +} diff --git a/src/module/uti/scroll017.uti.json b/src/module/uti/scroll017.uti.json new file mode 100644 index 0000000..aa8f1a6 --- /dev/null +++ b/src/module/uti/scroll017.uti.json @@ -0,0 +1,146 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 78 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 2\nInnate Level: 2\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 2 Rounds + 1 / 3 Levels\nAdditional Counter Spells: Clarity\nSave: Will Negates\nSpell Resistance: Yes\n\nIn the eyes of the target animal or humanoid, the personal reputation of the caster is improved by 50%.", + "id": 6113 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Charm Person or Animal", + "id": 13655 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 35 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll017" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll017" + } +} diff --git a/src/module/uti/scroll018.uti.json b/src/module/uti/scroll018.uti.json new file mode 100644 index 0000000..23f2348 --- /dev/null +++ b/src/module/uti/scroll018.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6 \nInnate Level: 6\nSchool: Necromancy\nDescriptor(s): Death\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: Death Ward\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nA wave of negative energy bursts from the target location. A number of enemy creatures equal to 1d4 per caster level must make a Fortitude save or die, beginning with those creatures with the lowest Hit Dice. Creatures with 9 or more Hit Dice are unaffected.", + "id": 6114 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Circle of Death", + "id": 13621 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll018" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll018" + } +} diff --git a/src/module/uti/scroll019.uti.json b/src/module/uti/scroll019.uti.json new file mode 100644 index 0000000..8ec933d --- /dev/null +++ b/src/module/uti/scroll019.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 5 \nInnate Level: 5\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: Instant\nAdditional Counter Spells: Healing Circle\nSave: Fortitude 1/2\nSpell Resistance: Yes\n\nAll enemies within the area of effect are struck with negative energy that causes 1d8 points of damage, +1 point per caster level. Negative energy spells have a reverse effect on undead, healing them instead of harming them.", + "id": 6115 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Circle of Doom", + "id": 13621 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll019" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll019" + } +} diff --git a/src/module/uti/scroll020.uti.json b/src/module/uti/scroll020.uti.json new file mode 100644 index 0000000..f0723f1 --- /dev/null +++ b/src/module/uti/scroll020.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Round / Level\nAdditional Counter Spells: Blindness / Deafness\nSave: Harmless\nSpell Resistance: No\n\nFor the duration of the spell, the target creature gains a +10 bonus to all Spot and Listen checks.", + "id": 6116 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Clairaudience & Clairvoyance", + "id": 13574 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 43 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll020" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll020" + } +} diff --git a/src/module/uti/scroll021.uti.json b/src/module/uti/scroll021.uti.json new file mode 100644 index 0000000..a1599cc --- /dev/null +++ b/src/module/uti/scroll021.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 3, Wizard / Sorcerer 3\nInnate Level: 2\nSchool: Abjuration\nDescriptor(s): Mind-Affecting\nComponent(s): Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 1 Turn\nAdditional Counter Spells: Charm Person\nSave: No\nSpell Resistance: No\n\nThis spell removes the effects of Sleep, Confusion, Stun, and Charm, and protects against all mind-affecting effects until it expires. For every effect removed by the spell, the target creature sustains 1 point of damage.", + "id": 6117 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Clarity", + "id": 13566 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 46 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll021" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll021" + } +} diff --git a/src/module/uti/scroll023.uti.json b/src/module/uti/scroll023.uti.json new file mode 100644 index 0000000..9874bdd --- /dev/null +++ b/src/module/uti/scroll023.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Long\nArea of Effect / Target: Large\nDuration: 1 Round / 2 Levels\nAdditional Counter Spells:\nSave: Fortitude Special\nSpell Resistance: Yes\n\nA billowing cloud of noxious vapors settles over the area. Its effects vary according to the Hit Dice of the affected creatures:\n1-3 HD: Instant death\n4-6 HD: Fortitude save or death\nOver 6 HD: 1d10 damage/round", + "id": 6119 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cloudkill", + "id": 13600 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 48 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll023" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll023" + } +} diff --git a/src/module/uti/scroll024.uti.json b/src/module/uti/scroll024.uti.json new file mode 100644 index 0000000..1544150 --- /dev/null +++ b/src/module/uti/scroll024.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Illusion\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Cone, 30ft\nArea of Effect / Target: Spell Cone\nDuration: Instant\nAdditional Counter Spells: \nSave: Will Negates\nSpell Resistance: Yes\n\nColor Spray sends forth a dazzling array of lights to confound all creatures within the area of effect. Its effects vary according to the Hit Dice of the affected creatures:\n1-2 HD: Sleep for 3 + 1d4 rounds\n3-4 HD: Blinded for 2 + 1d4 rounds\nOver 4 HD: Stunned for 1 + 1d4 round", + "id": 6120 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Color Spray", + "id": 13547 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 49 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll024" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll024" + } +} diff --git a/src/module/uti/scroll025.uti.json b/src/module/uti/scroll025.uti.json new file mode 100644 index 0000000..9ad88fa --- /dev/null +++ b/src/module/uti/scroll025.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5 \nInnate Level: 5\nSchool: Evocation\nDescriptor(s): Cold\nComponent(s): Verbal, Somatic\nRange: Cone, 30ft\nArea of Effect / Target: Spell Cone\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes \n\nA cone of frost and snow shoots forth from the caster's hands, doing 1d6 points of cold damage per caster level to all those within the area of effect, to a maximum of 15d6.", + "id": 6121 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cone of Cold", + "id": 13605 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 50 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll025" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll025" + } +} diff --git a/src/module/uti/scroll026.uti.json b/src/module/uti/scroll026.uti.json new file mode 100644 index 0000000..c493a78 --- /dev/null +++ b/src/module/uti/scroll026.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 4\nInnate Level: 3\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Large \nDuration: 1 Round / Level\nAdditional Counter Spells: Clarity\nSave: Will Negates\nSpell Resistance: Yes\n\nAffected creatures either wander randomly, attack a random target, or simply stand still.", + "id": 6122 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Confusion", + "id": 13587 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 52 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll026" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll026" + } +} diff --git a/src/module/uti/scroll027.uti.json b/src/module/uti/scroll027.uti.json new file mode 100644 index 0000000..0b6681f --- /dev/null +++ b/src/module/uti/scroll027.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3, Druid 3, Wizard / Sorcerer 4\nInnate Level: 3\nSchool: Necromancy\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nCounter Spells: Remove Disease\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nThe target creature is struck down with one of the following debilitating diseases, randomly chosen: Blinding Sickness, Cackle Fever, Mind Fire, Red Ache, Shakes, or Slimy Doom.", + "id": 6123 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Contagion", + "id": 13592 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 54 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll027" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll027" + } +} diff --git a/src/module/uti/scroll028.uti.json b/src/module/uti/scroll028.uti.json new file mode 100644 index 0000000..270af9e --- /dev/null +++ b/src/module/uti/scroll028.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 6, Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Necromancy\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: Sunbeam\nSave: Will Negates\nSpell Resistance: Yes\n\nA single undead creature with up to 2 Hit Dice per caster level falls under the caster's control unless it makes a successful Will save.", + "id": 6124 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Control Undead", + "id": 13631 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 55 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll028" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll028" + } +} diff --git a/src/module/uti/scroll029.uti.json b/src/module/uti/scroll029.uti.json new file mode 100644 index 0000000..687017b --- /dev/null +++ b/src/module/uti/scroll029.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 8\nInnate Level: 8\nSchool: Necromancy\nDescriptor(s): Evil\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: Sunbeam\nSave: None\nSpell Resistance: None\n\nThe caster brings a powerful undead creature into being. The type of undead is based upon the caster's level:\nUnder level 15: Vampire\nLevel 16-17: Doom knight\nLevel 18-19: Lich\nLevel 20: Greater mummy", + "id": 6125 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Create Greater Undead", + "id": 779 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 57 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll029" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll029" + } +} diff --git a/src/module/uti/scroll030.uti.json b/src/module/uti/scroll030.uti.json new file mode 100644 index 0000000..62ef5d8 --- /dev/null +++ b/src/module/uti/scroll030.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 6, Wizard / Sorcerer 8\nInnate Level: \nSchool: Necromancy\nDescriptor(s): Evil\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: Sunbeam\nSave: None\nSpell Resistance: None\n\nThe caster brings an undead creature into being. The type of undead is based upon the caster's level:\nLevel 11 and under: Ghoul\nLevel 12-13: Ghast\nLevel 14-15: Wight\nLevel 16 and over: Spectre", + "id": 6126 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Create Undead", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 60 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll030" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll030" + } +} diff --git a/src/module/uti/scroll031.uti.json b/src/module/uti/scroll031.uti.json new file mode 100644 index 0000000..3e3bcfe --- /dev/null +++ b/src/module/uti/scroll031.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 196 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4, Cleric 4, Druid 5\nInnate Level: 4\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Will for 1/2\nSpell Resistance: Yes\n\nThe target creature is healed of 4d8 points of damage, + 1 point per caster level to a maximum of +20. Healing spells have a reverse effect when used on undead, causing the targeted undead to take an amount of damage equal to what the spell normally heals. A successful touch attack must first be made when this spell is used against undead.", + "id": 6127 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cure Critical Wounds", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 63 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll031" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll031" + } +} diff --git a/src/module/uti/scroll032.uti.json b/src/module/uti/scroll032.uti.json new file mode 100644 index 0000000..ab1a32e --- /dev/null +++ b/src/module/uti/scroll032.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Cleric 1, Druid 1, Paladin 1, Ranger 1\nInnate Level: 1\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Ghoul Touch\nSave: Will 1/2\nSpell Resistance: Yes\n\nThe target creature is healed for 1d8 points of damage, +1 point per caster level (to a maximum of +5). Healing spells have a reverse effect on undead, harming instead of healing them. A successful touch attack must first be made when this spell is used against undead.", + "id": 6128 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cure Light Wounds", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 66 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll032" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll032" + } +} diff --git a/src/module/uti/scroll033.uti.json b/src/module/uti/scroll033.uti.json new file mode 100644 index 0000000..e15e9fb --- /dev/null +++ b/src/module/uti/scroll033.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 0, Cleric 0, Druid 0\nInnate Level: 0\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Ghoul Touch\nSave: None\nSpell Resistance: Yes\n\nThe target creature is healed for 4 points of damage. Healing spells have a reverse effect on undead, harming instead of healing them. A successful touch attack must first be made when this spell is used against undead.", + "id": 6129 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cure Minor Wounds", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 68 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll033" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll033" + } +} diff --git a/src/module/uti/scroll034.uti.json b/src/module/uti/scroll034.uti.json new file mode 100644 index 0000000..d74554c --- /dev/null +++ b/src/module/uti/scroll034.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 90 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Druid 3, Paladin 3, Ranger 3\nInnate Level: 2\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Ghoul Touch\nSave: Will 1/2\nSpell Resistance: \n\nThe target creature is healed for 2d8 points of damage, +1 point per caster level (to a maximum of +10). Healing spells have a reverse effect on undead, harming instead of healing them. A successful touch attack must first be made when this spell is used against undead.", + "id": 6130 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cure Moderate Wounds", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 69 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll034" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll034" + } +} diff --git a/src/module/uti/scroll035.uti.json b/src/module/uti/scroll035.uti.json new file mode 100644 index 0000000..2c6c3c4 --- /dev/null +++ b/src/module/uti/scroll035.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 255 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Druid 4, Paladin 4, Ranger 4\nInnate Level: 4\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Ghoul Touch\nSave: Will 1/2\nSpell Resistance: Yes \n\nThe target creature is healed for 3d8 points of damage, +1 point per caster level (to a maximum of +15). Healing spells have a reverse effect on undead, harming instead of healing them. A successful touch attack must first be made when this spell is used against undead.", + "id": 6131 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Cure Serious Wounds", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 72 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll035" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll035" + } +} diff --git a/src/module/uti/scroll036.uti.json b/src/module/uti/scroll036.uti.json new file mode 100644 index 0000000..09ee743 --- /dev/null +++ b/src/module/uti/scroll036.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Evocation\nDescriptor(s): Darkness\nComponent(s): Verbal\nRange: Long\nArea of Effect / Target: Huge\nDuration: 1 Round / Level\nAdditional Counter Spells: Light \nSave: None\nSpell Resistance: Yes\n\nAll creatures within the area of effect are shrouded in a haze of darkness which can only be pierced using Ultravision.", + "id": 6132 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Darkness", + "id": 13555 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 75 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll036" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll036" + } +} diff --git a/src/module/uti/scroll037.uti.json b/src/module/uti/scroll037.uti.json new file mode 100644 index 0000000..1980800 --- /dev/null +++ b/src/module/uti/scroll037.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 13 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 0, Wizard / Sorcerer 0 \nInnate Level: 0\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Single\nDuration: 2 Rounds\nAdditional Counter Spells: Clarity\nSave: Will Negates\nSpell Resistance: Yes\n\nIf the target humanoid creature has 5 Hit Dice or less, they are dazed for 2 rounds.", + "id": 6133 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Daze", + "id": 13536 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 76 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll037" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll037" + } +} diff --git a/src/module/uti/scroll038.uti.json b/src/module/uti/scroll038.uti.json new file mode 100644 index 0000000..4896bc6 --- /dev/null +++ b/src/module/uti/scroll038.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4, Druid 5, Paladin 4 \nInnate Level: 4\nSchool: Necromancy\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: Finger of Death\nSave: Harmless\nSpell Resistance: None\n\nThe target creature becomes immune to any death spells, spell-like abilities, and effects.", + "id": 6135 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Death Ward", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 77 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll038" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll038" + } +} diff --git a/src/module/uti/scroll039.uti.json b/src/module/uti/scroll039.uti.json new file mode 100644 index 0000000..91847f6 --- /dev/null +++ b/src/module/uti/scroll039.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: 1 Round / 3 Levels\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nThe caster creates a small, magical zone that can detect the passage of enemy creatures. When the field is activated, it explodes, doing 1d6 points of fire damage per caster level to all within the area of effect, to a maximum of 20d6.", + "id": 6136 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Delayed Blast Fireball", + "id": 13628 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 78 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll039" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll039" + } +} diff --git a/src/module/uti/scroll040.uti.json b/src/module/uti/scroll040.uti.json new file mode 100644 index 0000000..5a4df03 --- /dev/null +++ b/src/module/uti/scroll040.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4, Cleric 4, Wizard / Sorcerer 5\nInnate Level: 4\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: Gate\nSave: Will Negates\nSpell Resistance: Yes\n\nAll summoned creatures, animal companions, and familiars belonging to enemy spellcasters are unsummoned within the area of effect. ", + "id": 6137 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dismissal", + "id": 13599 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 81 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll040" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll040" + } +} diff --git a/src/module/uti/scroll041.uti.json b/src/module/uti/scroll041.uti.json new file mode 100644 index 0000000..5661ea2 --- /dev/null +++ b/src/module/uti/scroll041.uti.json @@ -0,0 +1,332 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Druid 4, Paladin 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single or Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: Yes\n\nThis spell attempts to strip all magical effects from a single target. It can also target a group of creatures, attempting to remove the most powerful spell effect from each creature. To remove an effect, the caster makes a dispel check of 1d20 +1 per caster level (to a maximum of +10) against a DC of 11 + the spell effect's caster level.", + "id": 6138 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dispel Magic", + "id": 13568 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 84 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll041" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll041" + } +} diff --git a/src/module/uti/scroll042.uti.json b/src/module/uti/scroll042.uti.json new file mode 100644 index 0000000..2a22ed0 --- /dev/null +++ b/src/module/uti/scroll042.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4\nInnate Level: 4\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: None\n\nThe caster gains the following bonuses: 1 extra Hit Point per caster level, Strength is raised to 18 (if their strength is already 18 or higher, it is not raised further), and base attack bonus improves to that of a Fighter of the same level.", + "id": 6139 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Divine Power", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 86 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll042" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll042" + } +} diff --git a/src/module/uti/scroll043.uti.json b/src/module/uti/scroll043.uti.json new file mode 100644 index 0000000..34d0880 --- /dev/null +++ b/src/module/uti/scroll043.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 3\nInnate Level: 3\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 3 Rounds, +1 / Level\nAdditional Counter Spells: Clarity\nSave: Will Negates\nSpell Resistance: Yes\n\nThe target animal temporarily becomes a faithful and loyal servant of the caster.", + "id": 6140 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dominate Animal", + "id": 13568 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 87 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll043" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll043" + } +} diff --git a/src/module/uti/scroll044.uti.json b/src/module/uti/scroll044.uti.json new file mode 100644 index 0000000..af09829 --- /dev/null +++ b/src/module/uti/scroll044.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 3 Turns + 1/ Level\nAdditional Counter Spells: \nSave: Will Negates\nSpell Resistance: Yes\n\nThe target monster temporarily becomes a faithful and loyal servant of the caster.", + "id": 6141 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dominate Monster", + "id": 13646 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 88 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll044" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll044" + } +} diff --git a/src/module/uti/scroll045.uti.json b/src/module/uti/scroll045.uti.json new file mode 100644 index 0000000..dde7070 --- /dev/null +++ b/src/module/uti/scroll045.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4, Wizard / Sorcerer 5\nInnate Level: 4\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 2 Rounds + 1 Round / 3 Caster Levels\nAdditional Counter Spells: Clarity\nSave: Will Negates\nSpell Resistance: Yes\n\nThe target person temporarily becomes a faithful and loyal servant of the caster.", + "id": 6142 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dominate Person", + "id": 13601 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 89 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll045" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll045" + } +} diff --git a/src/module/uti/scroll046.uti.json b/src/module/uti/scroll046.uti.json new file mode 100644 index 0000000..5acde85 --- /dev/null +++ b/src/module/uti/scroll046.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1\nInnate Level: 1\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: Bless\nSave: Will Negates\nSpell Resistance: Yes\n\nThe target creature receives a -2 modifier to all attack rolls, damage rolls, saving throws, ability checks and skill checks.", + "id": 6143 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Doom", + "id": 13536 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 90 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll046" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll046" + } +} diff --git a/src/module/uti/scroll047.uti.json b/src/module/uti/scroll047.uti.json new file mode 100644 index 0000000..2f57c12 --- /dev/null +++ b/src/module/uti/scroll047.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Evocation\nDescriptor(s): Cold, Fire\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: None\nSpell Resistance: None\n\nThe caster is surrounded by a ring of fire that damages all opponents who make a successful melee attack on the caster. The damage inflicted is 1d6, +1 point per caster level. The caster also gains 50% immunity to cold and fire.", + "id": 6144 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Elemental Shield", + "id": 13597 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 92 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll047" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll047" + } +} diff --git a/src/module/uti/scroll048.uti.json b/src/module/uti/scroll048.uti.json new file mode 100644 index 0000000..dd44ece --- /dev/null +++ b/src/module/uti/scroll048.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 9\nInnate Level: 9\nSchool: Conjuration\nDescriptor(s): Air, Earth, Fire, Water\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: Dismissal \nSave: None\nSpell Resistance: None\n\nThe caster summons a 24 HD air elemental to act as a loyal servant until it dies or until the spell expires. If the air elemental dies before the spell ends, a 24 HD water elemental is automatically summoned to replace it. This process continues with an earth and fire elemental until the spell expires. After the fire elemental, no more are summoned.", + "id": 6145 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Elemental Swarm", + "id": 13597 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 94 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll048" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll048" + } +} diff --git a/src/module/uti/scroll049.uti.json b/src/module/uti/scroll049.uti.json new file mode 100644 index 0000000..7a645b0 --- /dev/null +++ b/src/module/uti/scroll049.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: None\nSpell Resistance: None\n\nThe target creature's Constitution is increased by 1d4+1.", + "id": 6146 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Endurance", + "id": 13564 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 95 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll049" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll049" + } +} diff --git a/src/module/uti/scroll050.uti.json b/src/module/uti/scroll050.uti.json new file mode 100644 index 0000000..36d5cef --- /dev/null +++ b/src/module/uti/scroll050.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1, Druid 1, Paladin 1, Wizard / Sorcerer 1\nInnate Level: 2\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe target creature gains damage resistance 10/- against all elemental forms of damage. The spell ends after absorbing 20 points of damage from any single elemental type.", + "id": 6147 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Endure Elements", + "id": 13538 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 98 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll050" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll050" + } +} diff --git a/src/module/uti/scroll051.uti.json b/src/module/uti/scroll051.uti.json new file mode 100644 index 0000000..fb126f1 --- /dev/null +++ b/src/module/uti/scroll051.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 9, Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: Permanent\nAdditional Counter Spells: \nSave: Fortitude Negates\nSpell Resistance: Yes\n\nThe target creature permanently loses 2d4 character levels.", + "id": 6148 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Energy Drain", + "id": 13649 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 99 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll051" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll051" + } +} diff --git a/src/module/uti/scroll052.uti.json b/src/module/uti/scroll052.uti.json new file mode 100644 index 0000000..8fb1264 --- /dev/null +++ b/src/module/uti/scroll052.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 1 Hour / Caster Level\nAdditional Counter Spells:\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nThe target creature temporarily loses 1d4 character levels.", + "id": 6149 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Enervation", + "id": 13593 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 100 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll052" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll052" + } +} diff --git a/src/module/uti/scroll053.uti.json b/src/module/uti/scroll053.uti.json new file mode 100644 index 0000000..d58835c --- /dev/null +++ b/src/module/uti/scroll053.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 1, Ranger 1\nInnate Level: 1\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Large\nDuration: 3 + 1 Round / 2 Levels\nAdditional Counter Spells: \nSave: Reflex, Special\nSpell Resistance: Yes\n\nA mass of clinging vegetation wraps around all creatures in the area of effect. Those affected are immobilized, though still able to fight and cast spells. Victims who make a Reflex save still have their movement reduced by half.", + "id": 6150 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Entangle", + "id": 13593 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 102 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll053" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll053" + } +} diff --git a/src/module/uti/scroll054.uti.json b/src/module/uti/scroll054.uti.json new file mode 100644 index 0000000..aa8fab5 --- /dev/null +++ b/src/module/uti/scroll054.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 4\nInnate Level: 3\nSchool: Necromancy\nDescriptor(s): Fear, Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect/ Target: Large\nDuration: 1 Round / Level\nAdditional Counter Spells: Remove Fear\nSave: Will Negates\nSpell Resistance: Yes\n\nAffected creatures are consumed with mind-numbing fear that overrides all other actions. The affected creatures run away from all those they do not consider allies.", + "id": 58585 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fear", + "id": 13594 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll054" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll054" + } +} diff --git a/src/module/uti/scroll055.uti.json b/src/module/uti/scroll055.uti.json new file mode 100644 index 0000000..4e47594 --- /dev/null +++ b/src/module/uti/scroll055.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Divination\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 1 Round / 2 Levels\nAdditional Counter Spells: Heal\nSave: Will Negates\nSpell Resistance: Yes\n\nWith a successful ranged touch attack, the caster does 1d4 points of Intelligence damage to the creature for every 4 caster levels.", + "id": 6152 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Feeblemind", + "id": 13602 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 104 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll055" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll055" + } +} diff --git a/src/module/uti/scroll056.uti.json b/src/module/uti/scroll056.uti.json new file mode 100644 index 0000000..d913481 --- /dev/null +++ b/src/module/uti/scroll056.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 8, Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Necromancy\nDescriptor(s): Death\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Fortitude Partial\nSpell Resistance: Yes\n\nThe target creature must make a Fortitude save or die. If they succeed, they still take 3d6 points of damage, +1 point per caster level.", + "id": 6153 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Finger of Death", + "id": 13632 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 105 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll056" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll056" + } +} diff --git a/src/module/uti/scroll057.uti.json b/src/module/uti/scroll057.uti.json new file mode 100644 index 0000000..3090667 --- /dev/null +++ b/src/module/uti/scroll057.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 8, Druid 7\nInnate Level: 7\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nAll enemies within this spell's area of effect are inundated with a rain of fire and take 1d6 points of damage per caster level (to a maximum of 20d6). Half of the damage is divine and the other half is fire-based. ", + "id": 6154 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fire Storm", + "id": 807 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 106 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll057" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll057" + } +} diff --git a/src/module/uti/scroll058.uti.json b/src/module/uti/scroll058.uti.json new file mode 100644 index 0000000..d49b7b7 --- /dev/null +++ b/src/module/uti/scroll058.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Large\nArea of Effect / Target: Huge\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nThe caster unleashes a fiery projectile that explodes upon all within the area of effect for 1d6 points of fire damage per caster level, to a maximum of 10d6.", + "id": 6155 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fireball", + "id": 13576 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll058" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll058" + } +} diff --git a/src/module/uti/scroll059.uti.json b/src/module/uti/scroll059.uti.json new file mode 100644 index 0000000..0dcb36f --- /dev/null +++ b/src/module/uti/scroll059.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 3 \nInnate Level: 3\nSchool: Conjuration\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nThe caster launches 1 conjured fiery arrow at the target creature for every 4 caster levels. Each arrow does 4d6 points of damage.", + "id": 6156 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Flame Arrow", + "id": 13571 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 110 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll059" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll059" + } +} diff --git a/src/module/uti/scroll060.uti.json b/src/module/uti/scroll060.uti.json new file mode 100644 index 0000000..2e42576 --- /dev/null +++ b/src/module/uti/scroll060.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 2 \nInnate Level: 2\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nThe Druid is able to flay an enemy with flaming brands that do 2d6 points of fire damage, + 1d6 per 3 caster levels above level 3.", + "id": 6157 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Flame Lash", + "id": 810 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 113 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll060" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll060" + } +} diff --git a/src/module/uti/scroll061.uti.json b/src/module/uti/scroll061.uti.json new file mode 100644 index 0000000..e40a869 --- /dev/null +++ b/src/module/uti/scroll061.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 5, Druid 4\nInnate Level: 4\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Medium\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nA pillar of flame engulfs all within the area of effect, inflicting 1d6 points of damage per caster level (to a maximum of 15d6). Half of the damage caused by the spell is divine and the other half is fire-based. Enemies are struck by both damage types, while allies are struck only by the fire damage.", + "id": 6158 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Flame Strike", + "id": 811 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 115 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll061" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll061" + } +} diff --git a/src/module/uti/scroll062.uti.json b/src/module/uti/scroll062.uti.json new file mode 100644 index 0000000..577d10e --- /dev/null +++ b/src/module/uti/scroll062.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4, Druid 4, Paladin 4, Ranger 4\nInnate Level: 4\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: Web \nSave: None\nSpell Resistance: No\n\nThe target creature becomes immune to paralysis, slow, and entanglement spells and effects.", + "id": 6159 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Freedom of Movement", + "id": 811 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 118 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll062" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll062" + } +} diff --git a/src/module/uti/scroll065.uti.json b/src/module/uti/scroll065.uti.json new file mode 100644 index 0000000..002e90d --- /dev/null +++ b/src/module/uti/scroll065.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: Greater Globe of Invulnerability, Greater Spell Breach \nSave: None \nSpell Resistance: Yes\n\nA shimmering field of energy prevents all spells of level 4 or lower from affecting the caster.", + "id": 6162 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Globe of Invulnerability", + "id": 13612 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 121 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll065" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll065" + } +} diff --git a/src/module/uti/scroll066.uti.json b/src/module/uti/scroll066.uti.json new file mode 100644 index 0000000..a007492 --- /dev/null +++ b/src/module/uti/scroll066.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Druid 1, Ranger 1, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Medium\nDuration: 2 Rounds + 1 / 3 Levels\nAdditional Counter Spells: Freedom of Movement\nSave: Reflex\nSpell Resistance: Yes\n\nA churning field of oil and grease fills the target area, causing all within to either fall down or move at a reduced speed.", + "id": 6163 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Grease", + "id": 13540 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 122 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll066" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll066" + } +} diff --git a/src/module/uti/scroll067.uti.json b/src/module/uti/scroll067.uti.json new file mode 100644 index 0000000..576cc16 --- /dev/null +++ b/src/module/uti/scroll067.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 5, Cleric 6, Druid 6, Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single or Colossal\nDuration: Instant\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nGreater Dispelling attempts to strip all magical effects from a single target. It can also target a group of creatures, attempting to remove the most powerful spell effect from each creature. To remove an effect, the caster makes a dispel check of 1d20, +1 per caster level (to a maximum of +15) against a DC of 11 + the spell effect's caster level.", + "id": 6164 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Dispelling", + "id": 13613 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 123 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll067" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll067" + } +} diff --git a/src/module/uti/scroll069.uti.json b/src/module/uti/scroll069.uti.json new file mode 100644 index 0000000..e0c362e --- /dev/null +++ b/src/module/uti/scroll069.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Single\nArea of Effect / Target: Single or Point\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Will (-5) Negates\nSpell Resistance: No\n\nThis spell has two modes of operation: targeting a single outsider, or summoning a planar ally. Targeted outsiders are paralyzed for 1 round per 2 caster levels. The type of summoned ally is based on the caster's alignment:\nEvil: Vrock\nNeutral: Death slaad\nGood: Celestial Avenger", + "id": 6166 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Planar Binding", + "id": 13635 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 126 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll069" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll069" + } +} diff --git a/src/module/uti/scroll070.uti.json b/src/module/uti/scroll070.uti.json new file mode 100644 index 0000000..b340faf --- /dev/null +++ b/src/module/uti/scroll070.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 7\nInnate Level: 7\nSchool: Necromancy\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nGreater Restoration removes most temporary and all permanent negative effects from the target character, incuding level drain. It does not remove negative mental effects or the effects of reduced movement speed. It also heals the target creature to full Hit Points.", + "id": 6167 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Restoration", + "id": 13663 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 127 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll070" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll070" + } +} diff --git a/src/module/uti/scroll072.uti.json b/src/module/uti/scroll072.uti.json new file mode 100644 index 0000000..5b124cb --- /dev/null +++ b/src/module/uti/scroll072.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Globe of Invulnerability, Greater Spell Mantle\nSave: None\nSpell Resistance: No\n\nThis spell strips an enemy mage of up to four magical defenses, including Spell Mantle, Globes of Invulnerability, Stoneskins, Premonition, Protection from Elements, Ghostly and Ethereal Visage, Mage Armor, Shadow Shield and Elemental Shield. This spell will also lower the target creatures SR rating by 5 for ten rounds.", + "id": 6169 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Spell Breach", + "id": 13623 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 129 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll072" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll072" + } +} diff --git a/src/module/uti/scroll074.uti.json b/src/module/uti/scroll074.uti.json new file mode 100644 index 0000000..a411d96 --- /dev/null +++ b/src/module/uti/scroll074.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 6, Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nGrants the caster a damage reduction of 20/+5. The spell absorbs 10 points of melee damage per caster level, to a maximum of 150, before fading.", + "id": 6171 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Stoneskin", + "id": 13624 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 131 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll074" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll074" + } +} diff --git a/src/module/uti/scroll075.uti.json b/src/module/uti/scroll075.uti.json new file mode 100644 index 0000000..2289534 --- /dev/null +++ b/src/module/uti/scroll075.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 3 \nInnate Level: 3\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: Instant\nAdditional Counter Spells:\nSave: Fortitude negates\nSpell Resistance: Yes\n\nThis spell creates a blast of air that knocks down any creatures failing their saving throws. It is also powerful enough to disperse any area of effect spells (such as cloudkill) that are in the path of the wind gust.", + "id": 2681 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Gust of Wind", + "id": 2682 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 410 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll075" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll075" + } +} diff --git a/src/module/uti/scroll076.uti.json b/src/module/uti/scroll076.uti.json new file mode 100644 index 0000000..1e47525 --- /dev/null +++ b/src/module/uti/scroll076.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4\nInnate Level: 4\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: Instant\nAdditional Counter Spells: \nSave: Will Partial\nSpell Resistance: Yes \n\nThe caster smites a group of enemies with divine light for 1d8 points of damage for every two caster levels, to a maximum of 5d8. Enemies who fail a Will save are also dazed for 1 to 6 rounds.", + "id": 6173 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hammer of the Gods", + "id": 2682 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 133 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll076" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll076" + } +} diff --git a/src/module/uti/scroll077.uti.json b/src/module/uti/scroll077.uti.json new file mode 100644 index 0000000..f2a1d38 --- /dev/null +++ b/src/module/uti/scroll077.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 6, Druid 7\nInnate Level: 6\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Heal\nSave: None\nSpell Resistance: Yes\n\nIf the caster makes a successful melee touch attack, Harm uses negative energy to reduce the target creature to 1d4 Hit Points. This spell has a reverse effect on undead, healing the targeted undead to full health instead of harming it.", + "id": 6174 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Harm", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 136 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll077" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll077" + } +} diff --git a/src/module/uti/scroll078.uti.json b/src/module/uti/scroll078.uti.json new file mode 100644 index 0000000..b6b84ab --- /dev/null +++ b/src/module/uti/scroll078.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 1 Round / Level\nAdditional Counter Spells: Slow \nSave: Harmless\nSpell Resistance: No\n\nThe target of this spell gains, +4 bonus to dodge AC, 1 extra action per round (allowing an additional attack or spell to be cast) and has their movement increased by 50%.", + "id": 6175 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Haste", + "id": 13579 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 137 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll078" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll078" + } +} diff --git a/src/module/uti/scroll079.uti.json b/src/module/uti/scroll079.uti.json new file mode 100644 index 0000000..d457400 --- /dev/null +++ b/src/module/uti/scroll079.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 6, Druid 7\nInnate Level: 6\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Harm\nSave: None\nSpell Resistance: Yes\n\nThe target of Heal is restored to full Hit Points. Healing spells have a reverse effect when used on undead, harming instead of healing them (undead are reduced to 1d4 Hit Points with this spell). A successful touch attack must first be made when this spell is used against undead.", + "id": 6176 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Heal", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 139 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll079" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll079" + } +} diff --git a/src/module/uti/scroll080.uti.json b/src/module/uti/scroll080.uti.json new file mode 100644 index 0000000..94bb1ec --- /dev/null +++ b/src/module/uti/scroll080.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 5, Cleric 5, Druid 6\nInnate Level: 5\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Medium\nDuration: Instant\nAdditional Counter Spells: Circle of Doom\nSave: Fortitude 1/2\nSpell Resistance: Yes\n\nAll friendly creatures within the area of effect are healed for 1d8 Hit Points, +1 point per caster level. Healing spells have a reverse effect when used on undead, harming instead of healing them.", + "id": 6177 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Healing Circle", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 140 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll080" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll080" + } +} diff --git a/src/module/uti/scroll081.uti.json b/src/module/uti/scroll081.uti.json new file mode 100644 index 0000000..ec5bccb --- /dev/null +++ b/src/module/uti/scroll081.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 2, Ranger 2\nInnate Level: 2\nSchool: Enchantment\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 1 Round / Level\nAdditional Counter Spells: Freedom of Movement \nSave: Will (-4) Negates\nSpell Resistance: Yes\n\nThe target animal is paralyzed for the duration of the spell.", + "id": 6178 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hold Animal", + "id": 780 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 142 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll081" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll081" + } +} diff --git a/src/module/uti/scroll082.uti.json b/src/module/uti/scroll082.uti.json new file mode 100644 index 0000000..fd2e625 --- /dev/null +++ b/src/module/uti/scroll082.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4, Druid 4, Wizard / Sorcerer 5\nInnate Level: 4\nSchool: Enchantment\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 1 Round / Level\nAdditional Counter Spells: Freedom of Movement\nSave: Will Negates\nSpell Resistance: Yes\n\nThe target monster is paralyzed for the duration of the spell.", + "id": 6179 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hold Monster", + "id": 13603 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 143 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll082" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll082" + } +} diff --git a/src/module/uti/scroll083.uti.json b/src/module/uti/scroll083.uti.json new file mode 100644 index 0000000..50bc66d --- /dev/null +++ b/src/module/uti/scroll083.uti.json @@ -0,0 +1,268 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Wizard / Sorcerer 3\nInnate Level: 2\nSchool: Enchantment\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: 1 Round / Level\nAdditional Counter Spells: Freedom of Movement\nSave: Will Negates\nSpell Resistance: Yes\n\nThe target humanoid is paralyzed for the duration of the spell.", + "id": 6180 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hold Person", + "id": 13575 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 144 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll083" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll083" + } +} diff --git a/src/module/uti/scroll086.uti.json b/src/module/uti/scroll086.uti.json new file mode 100644 index 0000000..76a6198 --- /dev/null +++ b/src/module/uti/scroll086.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 2 Rounds\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: \n\nOver the next two rounds, the caster gains a bonus of 10 +1 per caster level to their Lore skill.", + "id": 6183 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Identify", + "id": 13543 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 147 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll086" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll086" + } +} diff --git a/src/module/uti/scroll087.uti.json b/src/module/uti/scroll087.uti.json new file mode 100644 index 0000000..99b3523 --- /dev/null +++ b/src/module/uti/scroll087.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 9\nInnate Level: 9\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Medium\nDuration: Instant\nAdditional Counter Spells: \nSave: Fortitude Negates\nSpell Resistance: Yes\n\nThe caster creates a vortex of destruction that tears asunder all living things within its area of effect, killing them instantly unless they make their saving throw.", + "id": 6184 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Implosion", + "id": 13543 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 148 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll086" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll087" + } +} diff --git a/src/module/uti/scroll088.uti.json b/src/module/uti/scroll088.uti.json new file mode 100644 index 0000000..d5ce226 --- /dev/null +++ b/src/module/uti/scroll088.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4, Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: Invisibility Purge\nSave: Harmless\nSpell Resistance: No\n\nThe target creature becomes invisible and impossible to detect using normal vision. After attacking or casting spells the target creature will become partially visible and detectable by enemies, but still retain a 50% cover bonus.", + "id": 6185 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Improved Invisibility", + "id": 13589 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 149 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll088" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll088" + } +} diff --git a/src/module/uti/scroll089.uti.json b/src/module/uti/scroll089.uti.json new file mode 100644 index 0000000..155763a --- /dev/null +++ b/src/module/uti/scroll089.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Large\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nThe caster creates a cloud of smoke and embers that causes 4d6 points of fire damage each round to all creatures within the area of effect.", + "id": 6186 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Incendiary Cloud", + "id": 13636 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 150 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll089" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll089" + } +} diff --git a/src/module/uti/scroll090.uti.json b/src/module/uti/scroll090.uti.json new file mode 100644 index 0000000..a1aac50 --- /dev/null +++ b/src/module/uti/scroll090.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: See Invisibility\nSave: Harmless\nSpell Resistance: No\n\nThe target creature becomes invisible and impossible to detect using normal vision. Any attack or spellcasting action taken by the invisible creature will immediately cancel the invisibility.", + "id": 6187 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Invisibility", + "id": 13556 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 151 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll090" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll090" + } +} diff --git a/src/module/uti/scroll091.uti.json b/src/module/uti/scroll091.uti.json new file mode 100644 index 0000000..c1a1954 --- /dev/null +++ b/src/module/uti/scroll091.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3, Ranger 3\nInnate Level: 3\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: 1 Turn / Level\nAdditional Counter Spells: Invisibility\nSave: None\nSpell Resistance: No\n\nThis spell removes the invisibility from all invisible creatures and items.", + "id": 6188 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Invisibility Purge", + "id": 13556 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 152 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll091" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll091" + } +} diff --git a/src/module/uti/scroll092.uti.json b/src/module/uti/scroll092.uti.json new file mode 100644 index 0000000..be0ac56 --- /dev/null +++ b/src/module/uti/scroll092.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster, 15ft Radius\nDuration: 1 Turn / Level\nAdditional Counter Spells: Invisibility Purge\nSave: Harmless\nSpell Resistance: No\n\nThe caster brings into being a zone of invisibility that travels with him for the duration of the spell. All allies within the spell's area of effect are rendered invisible, but not to each other. Those that leave the sphere are visible once more.", + "id": 6189 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Invisibility Sphere", + "id": 13581 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 153 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll092" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll092" + } +} diff --git a/src/module/uti/scroll093.uti.json b/src/module/uti/scroll093.uti.json new file mode 100644 index 0000000..b223821 --- /dev/null +++ b/src/module/uti/scroll093.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThis spell will unlock doors and containers sealed by conventional locks in a 150ft radius around the caster. Exceptionally complex locking mechanisms or magically sealed doors and containers are beyond the abilities of this spell.", + "id": 6190 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Knock", + "id": 13565 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 154 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll093" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll093" + } +} diff --git a/src/module/uti/scroll094.uti.json b/src/module/uti/scroll094.uti.json new file mode 100644 index 0000000..94f39bd --- /dev/null +++ b/src/module/uti/scroll094.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Cleric 2, Druid 2, Wizard / Sorcerer 2\nInnate Level: 1\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Somatic\nRange: Medium\nArea of Effect / Target: Single or Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: No\nSpell Resistance: Yes\n\nThis spell attempts to strip all magical effects from a single target. It can also target a group of creatures, attempting to remove the most powerful spell effect from each creature. To remove an effect from a creature the caster makes a dispel check of 1d20, +1 per caster level (to a maximum of +5) against a DC of 11 + the spell effect's caster level.", + "id": 6191 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Dispel", + "id": 13567 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 155 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll094" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll094" + } +} diff --git a/src/module/uti/scroll095.uti.json b/src/module/uti/scroll095.uti.json new file mode 100644 index 0000000..63a00c2 --- /dev/null +++ b/src/module/uti/scroll095.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: Confusion\nSave: Harmless\nSpell Resistance: No\n\nThis spell renders the target creature immune to mind-affecting spells and spell-like effects, and removes all negative effects caused by such spells.", + "id": 6192 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Mind Blank", + "id": 13609 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 157 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll095" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll095" + } +} diff --git a/src/module/uti/scroll096.uti.json b/src/module/uti/scroll096.uti.json new file mode 100644 index 0000000..58aa245 --- /dev/null +++ b/src/module/uti/scroll096.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single or Point\nDuration: 1 Round / 2 Levels\nAdditional Counter Spells: Dismissal\nSave: Will Negates\nSpell Resistance: No\n\nThis spell has two modes of operation: targeting a single outsider, or summoning a planar ally. Targeted outsiders are paralyzed for 1 round per 2 caster levels. The type of summoned ally is based on the caster's alignment:\nEvil: Imp\nNeutral: Red slaad\nGood: Lantern archon", + "id": 6193 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Planar Binding", + "id": 13610 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 158 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll096" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll096" + } +} diff --git a/src/module/uti/scroll097.uti.json b/src/module/uti/scroll097.uti.json new file mode 100644 index 0000000..afe54fe --- /dev/null +++ b/src/module/uti/scroll097.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 2, Druid 2\nInnate Level: 2\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Ghoul Touch\nSave: Harmless\nSpell Resistance: No\n\nRemoves all magical, extraordinary, and supernatural effects that apply a penalty to ability scores, AC, attack and damage rolls, spell resistance, and saving throws. Will not remove the effects of a curse or a disease.", + "id": 6194 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Restoration", + "id": 13654 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 159 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll097" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll097" + } +} diff --git a/src/module/uti/scroll098.uti.json b/src/module/uti/scroll098.uti.json new file mode 100644 index 0000000..bc7253f --- /dev/null +++ b/src/module/uti/scroll098.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Special\nAdditional Counter Spells: Minor Globe of Invulnerability, Lesser Spell Mantle\nSave: None\nSpell Resistance: No\n\nThis spell strips an enemy mage of up to two magical defenses, including Spell Mantles, Globes of Invulnerability, Stoneskins, Premonition, Protection from Elements, Ghostly and Ethereal Visage, Mage Armor, Shadow Shield and Elemental Shield. This spell will also reduce the target creature's SR by 3 for ten rounds.", + "id": 6195 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Spell Breach", + "id": 13598 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 160 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll098" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll098" + } +} diff --git a/src/module/uti/scroll099.uti.json b/src/module/uti/scroll099.uti.json new file mode 100644 index 0000000..cf1d74c --- /dev/null +++ b/src/module/uti/scroll099.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: Lesser Spell Breach, Lesser Spell Mantle\nSave: Harmless\nSpell Resistance: No\n\nCreates a barrier around the caster that absorbs all incoming spells and spell-like abilities. It can absorb up to 1d4+6 levels of spells before collapsing.", + "id": 6196 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lesser Spell Mantle", + "id": 13611 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 161 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll099" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll099" + } +} diff --git a/src/module/uti/scroll100.uti.json b/src/module/uti/scroll100.uti.json new file mode 100644 index 0000000..40a5476 --- /dev/null +++ b/src/module/uti/scroll100.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 13 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 0, Cleric 0, Druid 0, Wizard / Sorcerer 0\nInnate Level: 0\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: Darkness\nSave: Harmless\nSpell Resistance: No\n\nCreates a small light source above the target creature's head. The light travels with the target and is capable of illuminating a small area.", + "id": 6197 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Light", + "id": 13537 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 162 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll100" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll100" + } +} diff --git a/src/module/uti/scroll101.uti.json b/src/module/uti/scroll101.uti.json new file mode 100644 index 0000000..0bc77e7 --- /dev/null +++ b/src/module/uti/scroll101.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Evocation\nDescriptor(s): Electricity\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Chain of targets in a straight line\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nThe caster fires a bolt of lightning that passes through all creatures in a straight line from the caster. The bolt does 1d6 points of electricity damage per caster level, to a maximum of 10d6.", + "id": 6198 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Lightning Bolt", + "id": 13537 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 164 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll101" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll101" + } +} diff --git a/src/module/uti/scroll102.uti.json b/src/module/uti/scroll102.uti.json new file mode 100644 index 0000000..f3aed08 --- /dev/null +++ b/src/module/uti/scroll102.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 72 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Conjuration\nDescriptor(s): Force\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe selected target gains the following bonuses to his AC: +1 natural armor, +1 dodge, +1 deflection, and +1 enhancement. The dodge bonus stacks with other dodge bonuses to AC, but the other bonuses do not stack with bonuses of the same type.", + "id": 6199 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mage Armor", + "id": 13541 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 167 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll102" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll102" + } +} diff --git a/src/module/uti/scroll103.uti.json b/src/module/uti/scroll103.uti.json new file mode 100644 index 0000000..a3e1dc6 --- /dev/null +++ b/src/module/uti/scroll103.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Paladin 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single, Medium\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nWhen this spell is cast, the caster chooses to be protected from either good or evil. The spell target and all allies within 10 feet receive a +2 deflection bonus to Armor Class, +2 to all saving throws, and immunity to any mind-affecting spells and spell-like abilities used by creatures of the chosen alignment.", + "id": 6494 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Magic Circle against Alignment", + "id": 13569 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 286 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll103" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll103" + } +} diff --git a/src/module/uti/scroll104.uti.json b/src/module/uti/scroll104.uti.json new file mode 100644 index 0000000..6fe0c11 --- /dev/null +++ b/src/module/uti/scroll104.uti.json @@ -0,0 +1,299 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Paladin 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single, Medium\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nWhen this spell is cast, the caster chooses to be protected from either good or evil. The spell target and all allies within 10 feet receive a +2 deflection bonus to Armor Class, +2 to all saving throws, and immunity to any mind-affecting spells and spell-like abilities used by creatures of the chosen alignment.", + "id": 6494 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Magic Circle against Alignment", + "id": 13569 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 286 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll104" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll104" + } +} diff --git a/src/module/uti/scroll105.uti.json b/src/module/uti/scroll105.uti.json new file mode 100644 index 0000000..48e67a9 --- /dev/null +++ b/src/module/uti/scroll105.uti.json @@ -0,0 +1,299 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Paladin 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single, Medium\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nWhen this spell is cast, the caster chooses to be protected from either good or evil. The spell target and all allies within 10 feet receive a +2 deflection bonus to Armor Class, +2 to all saving throws, and immunity to any mind-affecting spells and spell-like abilities used by creatures of the chosen alignment.", + "id": 6494 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Magic Circle against Alignment", + "id": 13569 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 286 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll105" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll105" + } +} diff --git a/src/module/uti/scroll106.uti.json b/src/module/uti/scroll106.uti.json new file mode 100644 index 0000000..85c8d49 --- /dev/null +++ b/src/module/uti/scroll106.uti.json @@ -0,0 +1,299 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Paladin 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single, Medium\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nWhen this spell is cast, the caster chooses to be protected from either good or evil. The spell target and all allies within 10 feet receive a +2 deflection bonus to Armor Class, +2 to all saving throws, and immunity to any mind-affecting spells and spell-like abilities used by creatures of the chosen alignment.", + "id": 6494 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Magic Circle against Alignment", + "id": 13569 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 286 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll106" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll106" + } +} diff --git a/src/module/uti/scroll107.uti.json b/src/module/uti/scroll107.uti.json new file mode 100644 index 0000000..a3d1de4 --- /dev/null +++ b/src/module/uti/scroll107.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Evocation\nDescriptor(s): Force\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: Yes\n\nThe caster creates a shimmering projectile of magical force that unerringly slams into a single selected target. After level 1, the spell creates 1 additional missile every two caster levels, to a maximum of 5 missiles at level 9. Magic missiles do 1D4+1 points of damage each.\n", + "id": 6204 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Magic Missile", + "id": 13546 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 172 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll107" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll107" + } +} diff --git a/src/module/uti/scroll110.uti.json b/src/module/uti/scroll110.uti.json new file mode 100644 index 0000000..d532254 --- /dev/null +++ b/src/module/uti/scroll110.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Medium\nDuration: 1 Round / Level\nAdditional Counter Spells: Remove Blindness / Deafness\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nAll enemies within a 10-ft radius are struck blind and deaf.", + "id": 6207 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Blindness / Deafness", + "id": 13639 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 179 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll110" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll110" + } +} diff --git a/src/module/uti/scroll111.uti.json b/src/module/uti/scroll111.uti.json new file mode 100644 index 0000000..ab85c34 --- /dev/null +++ b/src/module/uti/scroll111.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal\nRange: Short\nArea of Effect / Target: Large\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Will Negates\nSpell Resistance: Yes\n\nIn the eyes of all non-allied creatures within the area of affect, the personal reputation of the caster is improved by 50%. The caster can charm up to twice his hit dice in creatures.", + "id": 6208 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Charm", + "id": 13638 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 180 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll111" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll111" + } +} diff --git a/src/module/uti/scroll113.uti.json b/src/module/uti/scroll113.uti.json new file mode 100644 index 0000000..e2b66f1 --- /dev/null +++ b/src/module/uti/scroll113.uti.json @@ -0,0 +1,237 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 6, Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Enchantment\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Large\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nAll allies within the area of effect gain 1 extra action per round (allowing an additional attack or spell casting) and have their movement speed increased by 50%. ", + "id": 6210 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Haste", + "id": 13622 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 182 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll113" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll113" + } +} diff --git a/src/module/uti/scroll114.uti.json b/src/module/uti/scroll114.uti.json new file mode 100644 index 0000000..a53b031 --- /dev/null +++ b/src/module/uti/scroll114.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 8, Druid 9\nInnate Level: 8\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Large\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: Yes\n\nAll allies within the area of effect are restored to full Hit Points. Healing spells have a reverse effect on undead, harming instead of healing them (undead are reduced to 1d4 Hit Points with this spell).", + "id": 6211 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Heal", + "id": 13622 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 183 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll114" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll114" + } +} diff --git a/src/module/uti/scroll115.uti.json b/src/module/uti/scroll115.uti.json new file mode 100644 index 0000000..2536d82 --- /dev/null +++ b/src/module/uti/scroll115.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Conjuration\nDescriptor(s): Acid\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Single\nDuration: 1 Round, + 1 Round / 3 Levels\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nThe caster targets a single creature with an acid bolt. The initial damage from the spell is 3d6, +1d6 every round until the spell expires.", + "id": 6212 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Melf's Acid Arrow", + "id": 13551 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 184 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll115" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll115" + } +} diff --git a/src/module/uti/scroll116.uti.json b/src/module/uti/scroll116.uti.json new file mode 100644 index 0000000..506ec35 --- /dev/null +++ b/src/module/uti/scroll116.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nThe spell causes everything within the area of effect to be pummeled by incoming meteors. All those caught in the destruction take 20d6 points of damage. All creatures within 5 feet of the caster are protected from the spell's effect.", + "id": 6213 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Meteor Swarm", + "id": 13647 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 187 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll116" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll116" + } +} diff --git a/src/module/uti/scroll117.uti.json b/src/module/uti/scroll117.uti.json new file mode 100644 index 0000000..4f199bd --- /dev/null +++ b/src/module/uti/scroll117.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Huge\nDuration: 1 Turn / Level\nAdditional Counter Spells: Mass Charm\nSave: Harmless\nSpell Resistance: No\n\nThis spell renders all allies within the area of effect immune to mind-affecting spells and effects. All negative mind-affecting effects are also removed from the target creatures.", + "id": 6214 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mind Blank", + "id": 13633 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 188 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll117" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll117" + } +} diff --git a/src/module/uti/scroll118.uti.json b/src/module/uti/scroll118.uti.json new file mode 100644 index 0000000..401e197 --- /dev/null +++ b/src/module/uti/scroll118.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 5, Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Colossal\nDuration: 2 Rounds + 1 / 2 Levels\nAdditional Counter Spells: \nSave: Will Negates\nSpell Resistance: Yes\n\nThis spell creates a bank of blue fog that saps the will of all those who enter it. Victims take a -10 penalty on Will saving throws against mind-affecting spells and effects. This penalty persists for as long as the creature remains in the fog and for an additional 2d6 rounds upon leaving.", + "id": 6215 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mind Fog", + "id": 13604 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 189 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll118" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll118" + } +} diff --git a/src/module/uti/scroll119.uti.json b/src/module/uti/scroll119.uti.json new file mode 100644 index 0000000..2478918 --- /dev/null +++ b/src/module/uti/scroll119.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard/Sorcerer 4\nInnate Level: 4\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nA shimmering field of energy prevents all spells of level 3 or lower from affecting the caster.", + "id": 6216 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Minor Globe of Invulnerability", + "id": 13582 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 190 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll119" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll119" + } +} diff --git a/src/module/uti/scroll120.uti.json b/src/module/uti/scroll120.uti.json new file mode 100644 index 0000000..a6c1b04 --- /dev/null +++ b/src/module/uti/scroll120.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe caster is surrounded by a ghostly nimbus of light that grants damage reduction 5/+1, prevents all spells of level 1 or lower from affecting the caster, and grants 10% concealment.", + "id": 6217 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ghostly Visage", + "id": 13614 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 192 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll120" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll120" + } +} diff --git a/src/module/uti/scroll121.uti.json b/src/module/uti/scroll121.uti.json new file mode 100644 index 0000000..871a6ac --- /dev/null +++ b/src/module/uti/scroll121.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 5, Wizard / Sorcerer 6\nInnate Level: 5\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe caster is surrounded by a ghostly nimbus of light that grants damage reduction 20/+3, prevents all spells of level 2 or lower from affecting the caster and provides a 25% concealment bonus.", + "id": 6498 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ethereal Visage", + "id": 13619 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 195 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll121" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll121" + } +} diff --git a/src/module/uti/scroll122.uti.json b/src/module/uti/scroll122.uti.json new file mode 100644 index 0000000..7d45664 --- /dev/null +++ b/src/module/uti/scroll122.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal\nRange: Medium\nArea of Effect / Target: Single or Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nMordenkainen's Disjunction attempts to strip all magical effects from a single target. It can also target a group of creatures, attempting to remove the two most powerful spell effects from each creature. To remove an effect, the caster makes a dispel check of 1d20, +1 per caster level (to a maximum of +20) against a DC of 11 + the spell effect's caster level. In addition to its ability to dispel effects, this spell also strips a single enemy of up to 6 magical defenses or a group of enemies of two spell protections each. Finally, the spell will lower the SR of all creatures within the area of effect by 10.\n\nAffected spells include: Spell Mantles, Globes of Invulnerability, Stoneskins, Premonition, Protection from Elements, Ghostly and Ethereal Visage, Mage Armor, Shadow Shield and Elemental Shield.", + "id": 6219 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mordenkainen's Disjunction", + "id": 13642 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 197 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll122" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll122" + } +} diff --git a/src/module/uti/scroll123.uti.json b/src/module/uti/scroll123.uti.json new file mode 100644 index 0000000..7a27c18 --- /dev/null +++ b/src/module/uti/scroll123.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a powerful, sword-wielding helmed horror that acts as a faithful and loyal servant.", + "id": 6220 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mordenkainen's Sword", + "id": 13629 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 198 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll123" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll123" + } +} diff --git a/src/module/uti/scroll124.uti.json b/src/module/uti/scroll124.uti.json new file mode 100644 index 0000000..13ca357 --- /dev/null +++ b/src/module/uti/scroll124.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 8\nInnate Level: 8\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Large\nDuration: Instant\nAdditional Counter Spells:\nSave: Will Negates\nSpell Resistance: No\n\nAll enemies within the area of effect have their spell resistance lowered by 1d4 for every 5 caster levels. All allies within the area of effect are healed for 3d6 Hit Points, +1 point per caster level.", + "id": 6221 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Nature's Balance", + "id": 13629 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 200 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll124" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll124" + } +} diff --git a/src/module/uti/scroll125.uti.json b/src/module/uti/scroll125.uti.json new file mode 100644 index 0000000..c09a8cc --- /dev/null +++ b/src/module/uti/scroll125.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3\nInnate Level: 3\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe target creature is rendered immune to all negative energy attacks, including supernatural ability damage and level drains.", + "id": 6222 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Negative Energy Protection", + "id": 13629 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 201 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll125" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll125" + } +} diff --git a/src/module/uti/scroll126.uti.json b/src/module/uti/scroll126.uti.json new file mode 100644 index 0000000..17e1b92 --- /dev/null +++ b/src/module/uti/scroll126.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4, Cleric 4, Druid 3, Paladin 4, Ranger 3\nInnate Level: 3\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Poison\nSave: Harmless\nSpell Resistance: No\n\nA target creature has all traces of poison removed from their system.", + "id": 6223 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Neutralize Poison", + "id": 13661 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 204 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll126" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll126" + } +} diff --git a/src/module/uti/scroll127.uti.json b/src/module/uti/scroll127.uti.json new file mode 100644 index 0000000..7a65a90 --- /dev/null +++ b/src/module/uti/scroll127.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Illusion\nDescriptor(s): Fear, Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: True Seeing\nSave: Will and Fortitude\nSpell Resistance: Yes\n\nThe caster conjures an image of utmost horror to strike down a single creature. The target may attempt a Will save to disbelieve the spell, avoiding all ill effects. Failing that, the target then makes a Fortitude save to avoid instant death. A successful save still inflicts 3d6 points of damage.", + "id": 6500 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Phantasmal Killer", + "id": 13590 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 205 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll127" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll127" + } +} diff --git a/src/module/uti/scroll128.uti.json b/src/module/uti/scroll128.uti.json new file mode 100644 index 0000000..576fbab --- /dev/null +++ b/src/module/uti/scroll128.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single or Point\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Will (-2) Negates\nSpell Resistance: No\n\nThis spell has two modes of operation: targeting a single outsider, or summoning a planar ally. Targeted outsiders are paralyzed for 1 round per 2 caster levels. The type of summoned ally is based on the caster's alignment:\nEvil: Succubus\nNeutral: Green slaad\nGood: Hound archon", + "id": 6501 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Planar Binding", + "id": 13615 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 206 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll128" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll128" + } +} diff --git a/src/module/uti/scroll129.uti.json b/src/module/uti/scroll129.uti.json new file mode 100644 index 0000000..daf75dc --- /dev/null +++ b/src/module/uti/scroll129.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4, Druid 3\nInnate Level: 3\nSchool: Necromancy\nDescriptor(s): Poison\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Neutralize Poison\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nIf the caster succeeds at a melee touch attack, the target must make a Fortitude save or suffer the effects of large scorpion venom (1d6 Strength damage on primary and secondary hits).", + "id": 6502 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Poison", + "id": 13615 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 207 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll129" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll129" + } +} diff --git a/src/module/uti/scroll130.uti.json b/src/module/uti/scroll130.uti.json new file mode 100644 index 0000000..7487bf7 --- /dev/null +++ b/src/module/uti/scroll130.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Ranger 4, Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe caster is able to turn himself into one of the following forms:\nGiant spider\nTroll\nUmber hulk\nPixie\nZombie", + "id": 6224 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Polymorph Self", + "id": 13596 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 208 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll130" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll130" + } +} diff --git a/src/module/uti/scroll131.uti.json b/src/module/uti/scroll131.uti.json new file mode 100644 index 0000000..3a62a45 --- /dev/null +++ b/src/module/uti/scroll131.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Divination\nDescriptor(s): Death\nComponent(s): Verbal\nRange: Short\nArea of Effect / Target: Large, Single\nDuration: Instant\nAdditional Counter Spells: Death Ward\nSave: None\nSpell Resistance: Yes\n\nThis spell may be cast on a single creature or as an area effect. A targeted creature of up to 100 Hit Points is killed instantly. As an area effect, this spell will kill all creatures with fewer than 20 Hit Points, to a maximum total of 200 Hit Points.", + "id": 6225 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Power Word, Kill", + "id": 13644 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 209 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll131" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll131" + } +} diff --git a/src/module/uti/scroll132.uti.json b/src/module/uti/scroll132.uti.json new file mode 100644 index 0000000..169940b --- /dev/null +++ b/src/module/uti/scroll132.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal\nRange: Short\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Clarity\nSave: None\nSpell Resistance: Yes\n\nAutomatically stuns a single target for a duration based on the target's Hit Points:\nUnder 50 Hit Points: 4d4 rounds\n51-100 Hit Points: 2d4 rounds\n101-150 Hit Points: 1d4 rounds", + "id": 6226 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Power Word, Stun", + "id": 13626 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 210 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll132" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll132" + } +} diff --git a/src/module/uti/scroll133.uti.json b/src/module/uti/scroll133.uti.json new file mode 100644 index 0000000..1da0293 --- /dev/null +++ b/src/module/uti/scroll133.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3, Paladin 3\nInnate Level: 3\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster, Colossal\nDuration: 1 Round / Level\nAdditional Counter Spells: Bestow Curse\nSave: Harmless\nSpell Resistance: Yes\n\nAll allies within the area of effect gain +1 to attack and damage rolls, skill checks, and saving throws. Enemies receive -1 penalties to the same.", + "id": 6227 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Prayer", + "id": 13615 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 211 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll133" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll133" + } +} diff --git a/src/module/uti/scroll134.uti.json b/src/module/uti/scroll134.uti.json new file mode 100644 index 0000000..769020c --- /dev/null +++ b/src/module/uti/scroll134.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 8, Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Hour / Level\nAdditional Counter Spells: Feeblemind\nSave: Harmless\nSpell Resistance: No\n\nPremonition allows the caster to see a few moments into the future. This grants him damage reduction 30/+5, and absorbs 10 points of melee damage per caster level before collapsing.", + "id": 6228 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Premonition", + "id": 13615 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 212 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll134" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll134" + } +} diff --git a/src/module/uti/scroll135.uti.json b/src/module/uti/scroll135.uti.json new file mode 100644 index 0000000..563711b --- /dev/null +++ b/src/module/uti/scroll135.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Evocation\nDescriptor(s): Special\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Spell Cone\nDuration: Instant\nAdditional Counter Spells:\nSave: Special\nSpell Resistance: Yes\n\nAll creatures within the area of effect randomly experience 1 or 2 of the following effects:\n20 fire damage\n40 acid damage\n80 electrical damage\nStruck with Bebilith Venom poison\nParalyzed for 10 rounds\nConfused for 10 rounds\nStruck dead", + "id": 6229 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Prismatic Spray", + "id": 13630 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 213 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll135" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll135" + } +} diff --git a/src/module/uti/scroll136.uti.json b/src/module/uti/scroll136.uti.json new file mode 100644 index 0000000..dad093f --- /dev/null +++ b/src/module/uti/scroll136.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Cleric 1, Paladin 1, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nWhen this spell is cast, the caster chooses a target to be protected from either good or evil. The target receives a +2 deflection bonus to Armor Class, +2 to all saving throws, and immunity to any mind-affecting spells and spell-like abilities used by creatures of the chosen alignment.", + "id": 6791 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Alignment", + "id": 13539 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 284 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll136" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll136" + } +} diff --git a/src/module/uti/scroll137.uti.json b/src/module/uti/scroll137.uti.json new file mode 100644 index 0000000..58e0fb2 --- /dev/null +++ b/src/module/uti/scroll137.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3, Druid 3, Ranger 2, Wizard / Sorcerer 3\nInnate Level: 2\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe target creature gains damage resistance 30/- against all elemental forms of damage. The spell ends after absorbing 40 points of damage from any single elemental type.", + "id": 6505 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Elements", + "id": 13570 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 216 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll137" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll137" + } +} diff --git a/src/module/uti/scroll138.uti.json b/src/module/uti/scroll138.uti.json new file mode 100644 index 0000000..701afe2 --- /dev/null +++ b/src/module/uti/scroll138.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Cleric 1, Paladin 1, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nWhen this spell is cast, the caster chooses a target to be protected from either good or evil. The target receives a +2 deflection bonus to Armor Class, +2 to all saving throws, and immunity to any mind-affecting spells and spell-like abilities used by creatures of the chosen alignment.", + "id": 6791 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Alignment", + "id": 13539 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 284 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll138" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll138" + } +} diff --git a/src/module/uti/scroll139.uti.json b/src/module/uti/scroll139.uti.json new file mode 100644 index 0000000..4c951a1 --- /dev/null +++ b/src/module/uti/scroll139.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Cleric 1, Paladin 1, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nWhen this spell is cast, the caster chooses a target to be protected from either good or evil. The target receives a +2 deflection bonus to Armor Class, +2 to all saving throws, and immunity to any mind-affecting spells and spell-like abilities used by creatures of the chosen alignment.", + "id": 6791 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Alignment", + "id": 13539 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 284 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll139" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll139" + } +} diff --git a/src/module/uti/scroll140.uti.json b/src/module/uti/scroll140.uti.json new file mode 100644 index 0000000..329f928 --- /dev/null +++ b/src/module/uti/scroll140.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Cleric 1, Paladin 1, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nWhen this spell is cast, the caster chooses a target to be protected from either good or evil. The target receives a +2 deflection bonus to Armor Class, +2 to all saving throws, and immunity to any mind-affecting spells and spell-like abilities used by creatures of the chosen alignment.", + "id": 6791 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Alignment", + "id": 13539 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 284 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll140" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll140" + } +} diff --git a/src/module/uti/scroll141.uti.json b/src/module/uti/scroll141.uti.json new file mode 100644 index 0000000..cec3995 --- /dev/null +++ b/src/module/uti/scroll141.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Enchantment\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Large, 1 Creature / 4 Levels\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nWithin the area of effect, up to one ally per 4 caster levels receives a +8 bonus on all saving throws against spells.", + "id": 6235 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Protection from Spells", + "id": 13634 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 224 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll141" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll141" + } +} diff --git a/src/module/uti/scroll142.uti.json b/src/module/uti/scroll142.uti.json new file mode 100644 index 0000000..43a2b09 --- /dev/null +++ b/src/module/uti/scroll142.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 5\nInnate Level: 5\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nReturns one target corpse to life. The raised character returns to life with only 1 Hit Point.", + "id": 6236 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Raise Dead", + "id": 13615 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 226 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll142" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll142" + } +} diff --git a/src/module/uti/scroll143.uti.json b/src/module/uti/scroll143.uti.json new file mode 100644 index 0000000..e2d2715 --- /dev/null +++ b/src/module/uti/scroll143.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Necromancy\nDescriptor(s): Death\nComponent(s): Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 1 Round / Level\nAdditional Counter Spells: Bull's Strength\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nThe target creature takes 1d6 Strength damage, plus 1 per 2 caster levels, to a maximum of 11 damage.", + "id": 6237 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ray of Enfeeblement", + "id": 13548 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 227 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll143" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll143" + } +} diff --git a/src/module/uti/scroll144.uti.json b/src/module/uti/scroll144.uti.json new file mode 100644 index 0000000..6dd7225 --- /dev/null +++ b/src/module/uti/scroll144.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 8 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 0\nInnate Level: 0\nSchool: Conjuration\nDescriptor(s): Cold\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: Yes\n\nDoes 1d4 + 1 cold damage to a single target creature.", + "id": 6238 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ray of Frost", + "id": 13535 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 228 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll144" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll144" + } +} diff --git a/src/module/uti/scroll145.uti.json b/src/module/uti/scroll145.uti.json new file mode 100644 index 0000000..7b0f5a5 --- /dev/null +++ b/src/module/uti/scroll145.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3, Paladin 3, Wizard / Sorcerer 4\nInnate Level: 3\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Medium\nDuration: Instant\nAdditional Counter Spells: Blindness / Deafness\nSave: Harmless\nSpell Resistance: No\n\nAll allies within the area of effect are cured of blindness and deafness.", + "id": 6239 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Remove Blindness / Deafness", + "id": 13658 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 229 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll145" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll145" + } +} diff --git a/src/module/uti/scroll146.uti.json b/src/module/uti/scroll146.uti.json new file mode 100644 index 0000000..45aa2c4 --- /dev/null +++ b/src/module/uti/scroll146.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Wizard / Sorcerer 4\nInnate Level: 3\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nAll curses and curse effects are removed from the target creature.", + "id": 6240 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Remove Curse", + "id": 13583 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 230 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll146" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll146" + } +} diff --git a/src/module/uti/scroll147.uti.json b/src/module/uti/scroll147.uti.json new file mode 100644 index 0000000..924dc9e --- /dev/null +++ b/src/module/uti/scroll147.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Druid 3, Ranger 3\nInnate Level: 3\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Contagion\nSave: Harmless\nSpell Resistance: No\n\nAll diseases and disease effects are removed from the target creature.", + "id": 6241 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Remove Disease", + "id": 13659 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 231 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll147" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll147" + } +} diff --git a/src/module/uti/scroll148.uti.json b/src/module/uti/scroll148.uti.json new file mode 100644 index 0000000..9fe604c --- /dev/null +++ b/src/module/uti/scroll148.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1\nInnate Level: 1\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Large, 1 Creature / 4 Levels\nDuration: 10 Turns\nAdditional Counter Spells: Fear\nSave: Harmless\nSpell Resistance: No\n\nAll fear effects are removed from allies within the area of effect. The targets also gain a +4 bonus to saving throws against fear spells and effects for the duration of the spell.", + "id": 6242 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Remove Fear", + "id": 13659 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 232 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll148" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll148" + } +} diff --git a/src/module/uti/scroll149.uti.json b/src/module/uti/scroll149.uti.json new file mode 100644 index 0000000..fd7eeda --- /dev/null +++ b/src/module/uti/scroll149.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 2, Paladin 2\nInnate Level: 2\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Large, 1 Creature / 4 Levels\nDuration: Instant\nAdditional Counter Spells: Hold Person\nSave: Harmless\nSpell Resistance: No\n\nAll paralysis and hold effects are removed from allies within the area of effect.", + "id": 6243 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Remove Paralysis", + "id": 13659 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 233 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll149" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll149" + } +} diff --git a/src/module/uti/scroll150.uti.json b/src/module/uti/scroll150.uti.json new file mode 100644 index 0000000..a6f0a09 --- /dev/null +++ b/src/module/uti/scroll150.uti.json @@ -0,0 +1,332 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 2, Druid 2, Paladin 2, Ranger 1, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe target creature gains damage resistance 20/- against all elemental forms of damage. The spell ends after absorbing 30 points of damage from any single elemental type.", + "id": 6507 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Resist Elements", + "id": 13550 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 234 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll150" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll150" + } +} diff --git a/src/module/uti/scroll151.uti.json b/src/module/uti/scroll151.uti.json new file mode 100644 index 0000000..083f49c --- /dev/null +++ b/src/module/uti/scroll151.uti.json @@ -0,0 +1,332 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 13 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 0, Cleric 0, Druid 0, Paladin 1, Wizard / Sorcerer 0\nInnate Level: 0\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 2 Turns\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nGrants the target creature a +1 bonus to all saving throws.", + "id": 6245 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Resistance", + "id": 13534 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 236 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll151" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll151" + } +} diff --git a/src/module/uti/scroll152.uti.json b/src/module/uti/scroll152.uti.json new file mode 100644 index 0000000..bca9446 --- /dev/null +++ b/src/module/uti/scroll152.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4\nInnate Level: 4\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nRemoves all magical, extraordinary and supernatural effects that apply a penalty to ability scores, Armor Class, attack and damage rolls, spell resistance, saving throws and damage immunity. This spell also removes all level drain, blindness and deafness effects. Will not remove the effects of a curse or a disease.", + "id": 6246 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Restoration", + "id": 13660 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 238 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll152" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll152" + } +} diff --git a/src/module/uti/scroll153.uti.json b/src/module/uti/scroll153.uti.json new file mode 100644 index 0000000..def997c --- /dev/null +++ b/src/module/uti/scroll153.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 7\nInnate Level: 7\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nReturns a single target corpse to life with full Hit Points.", + "id": 6247 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Resurrection", + "id": 13664 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 239 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll153" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll153" + } +} diff --git a/src/module/uti/scroll154.uti.json b/src/module/uti/scroll154.uti.json new file mode 100644 index 0000000..eaa6011 --- /dev/null +++ b/src/module/uti/scroll154.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1\nInnate Level: 1\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Round / Level\nAdditional Counter Spells:\nSave: Will Negates\nSpell Resistance: No\n\nThe caster's or the person's, touched by the caster, presence is completely ignored by nearby creatures for the duration of the spell.", + "id": 6248 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sanctuary", + "id": 13664 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 240 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll154" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll154" + } +} diff --git a/src/module/uti/scroll155.uti.json b/src/module/uti/scroll155.uti.json new file mode 100644 index 0000000..58b4310 --- /dev/null +++ b/src/module/uti/scroll155.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Cleric 1, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Necromancy\nDescriptor(s): Fear, Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 1d4 Rounds\nAdditional Counter Spells: Remove Fear\nSave: Will Negates\nSpell Resistance: Yes\n\nA target creature with 5 Hit Dice or less is afflicted with fear and suffers a -2 morale check to attack, damage and saving rolls.", + "id": 6508 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scare", + "id": 13559 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 241 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll155" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll155" + } +} diff --git a/src/module/uti/scroll156.uti.json b/src/module/uti/scroll156.uti.json new file mode 100644 index 0000000..02422a7 --- /dev/null +++ b/src/module/uti/scroll156.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3\nInnate Level: 3\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: Yes\n\nThe caster directs a beam of white-hot light at a single target. The damage is based on the target's racial type:\nUndead: 1d8 per caster level, to a maximum of 10d8\nConstruct: 1d6 for every 2 caster levels, to a maximum of 5d6\nOther: 1d8 per 2 caster levels, to a maximum of 5d8", + "id": 6249 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Searing Light", + "id": 13559 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 242 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll156" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll156" + } +} diff --git a/src/module/uti/scroll157.uti.json b/src/module/uti/scroll157.uti.json new file mode 100644 index 0000000..a60734a --- /dev/null +++ b/src/module/uti/scroll157.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Wizard / Sorcerer 2 \nInnate Level: 2\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe target creature is able to see all invisible creatures within his line of sight.", + "id": 6250 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "See Invisibility", + "id": 13554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 243 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll157" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll157" + } +} diff --git a/src/module/uti/scroll160.uti.json b/src/module/uti/scroll160.uti.json new file mode 100644 index 0000000..df5f30b --- /dev/null +++ b/src/module/uti/scroll160.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe caster is shrouded in a cloak of shadow that protects them with the following effects:\n+5 natural AC bonus\n10 / +3 Damage reduction\nImmunity to instant death effects\nImmunity to Necromancy spells", + "id": 6253 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shadow Shield", + "id": 13554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 246 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll160" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll160" + } +} diff --git a/src/module/uti/scroll161.uti.json b/src/module/uti/scroll161.uti.json new file mode 100644 index 0000000..3584289 --- /dev/null +++ b/src/module/uti/scroll161.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 9, Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe caster is temporarily transformed into one of several fearsome creatures of destruction. Possible forms include: Red Dragon, Fire Giant, Balor, Death Slaad, or Iron Golem.", + "id": 6254 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shapechange", + "id": 13651 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 247 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll161" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll161" + } +} diff --git a/src/module/uti/scroll163.uti.json b/src/module/uti/scroll163.uti.json new file mode 100644 index 0000000..0309a02 --- /dev/null +++ b/src/module/uti/scroll163.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2\nInnate Level: 2\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Large, Single\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Will Negates\nSpell Resistance: Yes\n\nCreates a zone of silence around the target creature, preventing all within the area of effect from casting spells with verbal components. If cast on an ally, no saving throws or spell resistance checks are necessary.", + "id": 6256 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Silence", + "id": 13656 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 249 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll163" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll163" + } +} diff --git a/src/module/uti/scroll164.uti.json b/src/module/uti/scroll164.uti.json new file mode 100644 index 0000000..ce5c8da --- /dev/null +++ b/src/module/uti/scroll164.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 5, Druid 5\nInnate Level: 5\nSchool: Necromancy\nDescriptor(s): Death, Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Death Ward\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nThe target must make a Fortitude save or die. Even if the saving throw is successful, the target takes 3d6 points of negative energy damage, +1 point per caster level.", + "id": 6257 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Slay Living", + "id": 13656 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 250 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll164" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll164" + } +} diff --git a/src/module/uti/scroll165.uti.json b/src/module/uti/scroll165.uti.json new file mode 100644 index 0000000..2eac725 --- /dev/null +++ b/src/module/uti/scroll165.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Druid 1, Ranger 2, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: 3 Rounds + 1 / Caster Level\nAdditional Counter Spells: Clarity\nSave: Will Negates\nSpell Resistance: Yes\n\nCauses 4 + 1d4 HD of creatures to fall into a comatose slumber, beginning with those with the fewest HD. Creatures with 5 or more HD are unaffected.", + "id": 6258 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sleep", + "id": 13545 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 251 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll165" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll165" + } +} diff --git a/src/module/uti/scroll166.uti.json b/src/module/uti/scroll166.uti.json new file mode 100644 index 0000000..51c56be --- /dev/null +++ b/src/module/uti/scroll166.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Colossal, 1 Creature / Level\nDuration: 1 Round / Level\nAdditional Counter Spells: Haste\nSave: Will Negates\nSpell Resistance: Yes\n\nAll enemy creatures within the area of effect have their movement lowered by 50% and lose a single attack per round.", + "id": 6259 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Slow", + "id": 13580 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 253 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll166" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll166" + } +} diff --git a/src/module/uti/scroll167.uti.json b/src/module/uti/scroll167.uti.json new file mode 100644 index 0000000..9caba68 --- /dev/null +++ b/src/module/uti/scroll167.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2\nInnate Level: 2\nSchool: Evocation\nDescriptor(s): Sonic\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Medium\nDuration: Instant\nAdditional Counter Spells: \nSave: Will Special\nSpell Resistance: Yes\n\nAll creatures within the area of effect take 1d8 points of damage and must make a Will save or be stunned for 2 rounds.", + "id": 6260 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sound Burst", + "id": 13657 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 254 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll167" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll167" + } +} diff --git a/src/module/uti/scroll168.uti.json b/src/module/uti/scroll168.uti.json new file mode 100644 index 0000000..c4b0231 --- /dev/null +++ b/src/module/uti/scroll168.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 5, Druid 5\nInnate Level: 5\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe target creature has its spell resistance set to 12, +1 per caster level. If the target already had a higher spell resistance, this spell has no effect.", + "id": 6261 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance", + "id": 13657 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 255 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll168" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll168" + } +} diff --git a/src/module/uti/scroll169.uti.json b/src/module/uti/scroll169.uti.json new file mode 100644 index 0000000..04e0429 --- /dev/null +++ b/src/module/uti/scroll169.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: Spell Breach\nSave: Harmless\nSpell Resistance: No\n\nCreates a barrier around the caster that absorbs all incoming spells and spell-like abilities. It can absorb up to 1d8+8 spell levels before collapsing.", + "id": 6262 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spell Mantle", + "id": 13625 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 257 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll169" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll169" + } +} diff --git a/src/module/uti/scroll171.uti.json b/src/module/uti/scroll171.uti.json new file mode 100644 index 0000000..d184f7d --- /dev/null +++ b/src/module/uti/scroll171.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Fortitude Negates\nSpell Resistance: Yes\n\nAll creatures caught within the area of effect are dazed. These effects last as long as they remain within the cloud and for 1 round after they leave.", + "id": 6264 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Stinking Cloud", + "id": 13572 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 259 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll171" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll171" + } +} diff --git a/src/module/uti/scroll172.uti.json b/src/module/uti/scroll172.uti.json new file mode 100644 index 0000000..50051ce --- /dev/null +++ b/src/module/uti/scroll172.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 4, Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThis spell grants the target creature damage reduction 10/+5. The spell absorbs 10 points of melee damage per caster level, to a maximum of 100, before collapsing.", + "id": 6265 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Stoneskin", + "id": 13584 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 260 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll172" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll172" + } +} diff --git a/src/module/uti/scroll173.uti.json b/src/module/uti/scroll173.uti.json new file mode 100644 index 0000000..f75f6c4 --- /dev/null +++ b/src/module/uti/scroll173.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 9, Druid 9\nInnate Level: 9\nSchool: Conjuration\nDescriptor(s): Acid, Electricity\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: 10 Rounds\nAdditional Counter Spells: \nSave: Reflex Special\nSpell Resistance: Yes\n\nThe area around the caster is blasted by lightning and acidic rain. Each round, all enemies within the area of effect take 3d6 points of acid damage. Those who fail a Reflex save take an additional 3d6 points of electrical damage.", + "id": 6266 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Storm of Vengance", + "id": 13584 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 261 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll173" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll173" + } +} diff --git a/src/module/uti/scroll174.uti.json b/src/module/uti/scroll174.uti.json new file mode 100644 index 0000000..89d8b24 --- /dev/null +++ b/src/module/uti/scroll174.uti.json @@ -0,0 +1,332 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Cleric 1, Druid 1, Ranger 1, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a dire badger to be a faithful and loyal servant.", + "id": 6267 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature I", + "id": 13542 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 262 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll174" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll174" + } +} diff --git a/src/module/uti/scroll175.uti.json b/src/module/uti/scroll175.uti.json new file mode 100644 index 0000000..eb769bb --- /dev/null +++ b/src/module/uti/scroll175.uti.json @@ -0,0 +1,332 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Druid 2, Ranger 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a dire boar to be a faithful and loyal servant.", + "id": 6268 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature II", + "id": 13552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 264 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll175" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll175" + } +} diff --git a/src/module/uti/scroll176.uti.json b/src/module/uti/scroll176.uti.json new file mode 100644 index 0000000..4c0d313 --- /dev/null +++ b/src/module/uti/scroll176.uti.json @@ -0,0 +1,332 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 3, Druid 3, Ranger 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a dire wolf to be a faithful and loyal servant.", + "id": 6269 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature III", + "id": 13573 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 265 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll176" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll176" + } +} diff --git a/src/module/uti/scroll177.uti.json b/src/module/uti/scroll177.uti.json new file mode 100644 index 0000000..5dbc323 --- /dev/null +++ b/src/module/uti/scroll177.uti.json @@ -0,0 +1,332 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4, Cleric 4, Druid 4, Ranger 4, Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a dire spider to be a faithful and loyal servant.", + "id": 6270 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IV", + "id": 13585 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 266 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll177" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll177" + } +} diff --git a/src/module/uti/scroll178.uti.json b/src/module/uti/scroll178.uti.json new file mode 100644 index 0000000..fd4c544 --- /dev/null +++ b/src/module/uti/scroll178.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 9, Druid 9, Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a random elder elemental to be a faithful and loyal servant.", + "id": 6513 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IX", + "id": 13645 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 267 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll178" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll178" + } +} diff --git a/src/module/uti/scroll179.uti.json b/src/module/uti/scroll179.uti.json new file mode 100644 index 0000000..b1f6e23 --- /dev/null +++ b/src/module/uti/scroll179.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 5, Cleric 5, Druid 5, Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a dire bear to be a faithful and loyal servant.", + "id": 6509 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature V", + "id": 13608 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 268 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll179" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll179" + } +} diff --git a/src/module/uti/scroll180.uti.json b/src/module/uti/scroll180.uti.json new file mode 100644 index 0000000..e14478e --- /dev/null +++ b/src/module/uti/scroll180.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 6, Cleric 6, Druid 6, Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a dire tiger to be a faithful and loyal servant.", + "id": 6510 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VI", + "id": 13616 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 269 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll180" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll180" + } +} diff --git a/src/module/uti/scroll181.uti.json b/src/module/uti/scroll181.uti.json new file mode 100644 index 0000000..177d739 --- /dev/null +++ b/src/module/uti/scroll181.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 7, Druid 7, Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a random huge elemental to be a faithful and loyal servant.", + "id": 6511 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VII", + "id": 13627 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 270 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll181" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll181" + } +} diff --git a/src/module/uti/scroll182.uti.json b/src/module/uti/scroll182.uti.json new file mode 100644 index 0000000..5c8c154 --- /dev/null +++ b/src/module/uti/scroll182.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 8, Druid 8, Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Point\nDuration: 24 Hours\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a random greater elemental to be a faithful and loyal servant.", + "id": 6512 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VIII", + "id": 13637 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 271 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll182" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll182" + } +} diff --git a/src/module/uti/scroll184.uti.json b/src/module/uti/scroll184.uti.json new file mode 100644 index 0000000..27e14c8 --- /dev/null +++ b/src/module/uti/scroll184.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe caster becomes an engine of destruction, gaining a +1 attack bonus for every 2 caster levels, a +4 natural armor AC bonus, +2d4 Strength, +2d4 Dexterity, +5 to their Fortitude saving throws, and +1d6 additional Hit Points per caster level.", + "id": 6516 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tenser's Transformation", + "id": 58586 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 273 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll184" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll184" + } +} diff --git a/src/module/uti/scroll185.uti.json b/src/module/uti/scroll185.uti.json new file mode 100644 index 0000000..7b71169 --- /dev/null +++ b/src/module/uti/scroll185.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 9 seconds\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster is able to defy the sands of time, casting spells, moving about, and attacking normally while the rest of the world appears suspended, as if in stasis.", + "id": 6517 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Time Stop", + "id": 13652 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 274 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll185" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll185" + } +} diff --git a/src/module/uti/scroll186.uti.json b/src/module/uti/scroll186.uti.json new file mode 100644 index 0000000..5c513aa --- /dev/null +++ b/src/module/uti/scroll186.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 5, Druid 7, Wizard / Sorcerer 6\nInnate Level: 5\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: Greater Shadow Conjuration\nSave: Harmless\nSpell Resistance: No\n\nThe target creature can see through Sanctuary and Invisibility effects, and automatically spots hiding opponents.", + "id": 6518 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "True Seeing", + "id": 13617 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 275 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll186" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll186" + } +} diff --git a/src/module/uti/scroll188.uti.json b/src/module/uti/scroll188.uti.json new file mode 100644 index 0000000..23dd566 --- /dev/null +++ b/src/module/uti/scroll188.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Negative Energy Protection\nSave: None\nSpell Resistance: Yes\n\nThe target creature takes 1d6 points of damage for every 2 caster levels. This damage is then applied to the caster's Hit Points as a temporary bonus.", + "id": 6519 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Vampiric Touch", + "id": 13578 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 277 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll188" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll188" + } +} diff --git a/src/module/uti/scroll189.uti.json b/src/module/uti/scroll189.uti.json new file mode 100644 index 0000000..8b636a1 --- /dev/null +++ b/src/module/uti/scroll189.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 13 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 0, Druid 0, Paladin 1\nInnate Level: 0\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe target creature gains 1 temporary hit point above his maximum total.", + "id": 6520 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Virtue", + "id": 13578 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 278 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll189" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll189" + } +} diff --git a/src/module/uti/scroll190.uti.json b/src/module/uti/scroll190.uti.json new file mode 100644 index 0000000..ec8c94d --- /dev/null +++ b/src/module/uti/scroll190.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Necromancy\nDescriptor(s): Death, Sonic\nComponent(s): Verbal\nRange: Short\nArea of Effect / Target: Colossal, 1 Creature / Level\nDuration: Instant\nAdditional Counter Spells: Silence\nSave: Fortitude Negates\nSpell Resistance: Yes\n\nAll enemies within the area of effect must succeed at a Fortitude save or die, to a maximum of 1 enemy per caster level.", + "id": 6521 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wail of the Banshee", + "id": 13650 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 279 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll190" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll190" + } +} diff --git a/src/module/uti/scroll191.uti.json b/src/module/uti/scroll191.uti.json new file mode 100644 index 0000000..b7c4381 --- /dev/null +++ b/src/module/uti/scroll191.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 5, Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Wall 30 ft Long\nDuration: 1 Round / 2 Levels\nAdditional Counter Spells: \nSave: Reflex 1/2\nSpell Resistance: Yes\n\nThis spell creates a curtain of fire that deals 4d6 points of fire damage to any creature that attempts to pass through it.", + "id": 6522 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wall of Fire", + "id": 13588 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 280 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll191" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll191" + } +} diff --git a/src/module/uti/scroll192.uti.json b/src/module/uti/scroll192.uti.json new file mode 100644 index 0000000..2276bc6 --- /dev/null +++ b/src/module/uti/scroll192.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: 1 Round / Level\nAdditional Counter Spells: Freedom of Movement\nSave: Reflex Partial\nSpell Resistance: Yes\n\nSticky strands cling to all creatures within the area of effect, entangling them. Creatures who make their save can move, but at a reduced rate dependent on their Strength.", + "id": 6523 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Web", + "id": 13553 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 281 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll192" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll192" + } +} diff --git a/src/module/uti/scroll193.uti.json b/src/module/uti/scroll193.uti.json new file mode 100644 index 0000000..3083b1f --- /dev/null +++ b/src/module/uti/scroll193.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Illusion\nDescriptor(s): Fear, Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: True Seeing\nSave: Fortitude and Will\nSpell Resistance: Yes\n\nA horrible phantasm rises to stand before enemy creatures in the area of effect, causing them to make a Will save. If they fail, the phantasm touches them and they must now make a Fortitude saving throw. If this saving throw fails, the creature dies. Those who succeed the Fortitude save still take 3d6 points of damage. Creatures with less than 4 HD automatically die, without any saving throws. ", + "id": 6524 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Weird", + "id": 13648 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 282 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll193" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll193" + } +} diff --git a/src/module/uti/scroll194.uti.json b/src/module/uti/scroll194.uti.json new file mode 100644 index 0000000..45d2cad --- /dev/null +++ b/src/module/uti/scroll194.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 7\nInnate Level: 7\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: Yes\n\nA wave of divine energy blasts all enemy creatures within the area of effect. All enemies within the area are stunned for 1 round per 2 caster levels. Those with 4 Hit Dice or less are killed instantly. Any hostile summoned creatures are returned to their home planes.", + "id": 6525 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Word of Faith", + "id": 13648 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 283 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll194" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll194" + } +} diff --git a/src/module/uti/scroll324.uti.json b/src/module/uti/scroll324.uti.json new file mode 100644 index 0000000..1667c5f --- /dev/null +++ b/src/module/uti/scroll324.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Yes\n\nThe caster conjures a shadow variant of one of the following spells: Cone of Cold, Fireball, Stoneskin, Wall of Fire, or Summon Shadow.", + "id": 6251 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shades", + "id": 13620 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 244 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll324" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll324" + } +} diff --git a/src/module/uti/scroll340.uti.json b/src/module/uti/scroll340.uti.json new file mode 100644 index 0000000..2091f47 --- /dev/null +++ b/src/module/uti/scroll340.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Yes\n\nThe caster conjures a shadow variant of one of the following spells: Cone of Cold, Fireball, Stoneskin, Wall of Fire, or Summon Shadow.", + "id": 6251 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shades", + "id": 13620 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 244 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll340" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll340" + } +} diff --git a/src/module/uti/scroll341.uti.json b/src/module/uti/scroll341.uti.json new file mode 100644 index 0000000..363e36d --- /dev/null +++ b/src/module/uti/scroll341.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Yes\n\nThe caster conjures a shadow variant of one of the following spells: Cone of Cold, Fireball, Stoneskin, Wall of Fire, or Summon Shadow.", + "id": 6251 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shades", + "id": 13620 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 244 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll341" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll341" + } +} diff --git a/src/module/uti/scroll342.uti.json b/src/module/uti/scroll342.uti.json new file mode 100644 index 0000000..8d843fd --- /dev/null +++ b/src/module/uti/scroll342.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Yes\n\nThe caster conjures a shadow variant of one of the following spells: Cone of Cold, Fireball, Stoneskin, Wall of Fire, or Summon Shadow.", + "id": 6251 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shades", + "id": 13620 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 244 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll342" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll342" + } +} diff --git a/src/module/uti/scroll343.uti.json b/src/module/uti/scroll343.uti.json new file mode 100644 index 0000000..ddce3a2 --- /dev/null +++ b/src/module/uti/scroll343.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Yes\n\nThe caster conjures a shadow variant of one of the following spells: Cone of Cold, Fireball, Stoneskin, Wall of Fire, or Summon Shadow.", + "id": 6251 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shades", + "id": 13620 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 244 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll343" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll343" + } +} diff --git a/src/module/uti/scroll344.uti.json b/src/module/uti/scroll344.uti.json new file mode 100644 index 0000000..cd07cb4 --- /dev/null +++ b/src/module/uti/scroll344.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Yes\n\nThe caster conjures a shadow variant of one of the following spells: Darkness, Invisibility, Mage Armor, Magic Missile, or Summon Shadow.", + "id": 6252 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shadow Conjuration", + "id": 13591 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 245 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll344" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll344" + } +} diff --git a/src/module/uti/scroll345.uti.json b/src/module/uti/scroll345.uti.json new file mode 100644 index 0000000..b3a97d8 --- /dev/null +++ b/src/module/uti/scroll345.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Yes\n\nThe caster conjures a shadow variant of one of the following spells: Darkness, Invisibility, Mage Armor, Magic Missile, or Summon Shadow.", + "id": 6252 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shadow Conjuration", + "id": 13591 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 245 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll345" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll345" + } +} diff --git a/src/module/uti/scroll346.uti.json b/src/module/uti/scroll346.uti.json new file mode 100644 index 0000000..eb7eed5 --- /dev/null +++ b/src/module/uti/scroll346.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Yes\n\nThe caster conjures a shadow variant of one of the following spells: Darkness, Invisibility, Mage Armor, Magic Missile, or Summon Shadow.", + "id": 6252 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shadow Conjuration", + "id": 13591 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 245 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll346" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll346" + } +} diff --git a/src/module/uti/scroll347.uti.json b/src/module/uti/scroll347.uti.json new file mode 100644 index 0000000..1f325f3 --- /dev/null +++ b/src/module/uti/scroll347.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Yes\n\nThe caster conjures a shadow variant of one of the following spells: Darkness, Invisibility, Mage Armor, Magic Missile, or Summon Shadow.", + "id": 6252 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shadow Conjuration", + "id": 13591 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 245 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll347" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll347" + } +} diff --git a/src/module/uti/scroll348.uti.json b/src/module/uti/scroll348.uti.json new file mode 100644 index 0000000..6f6ce8c --- /dev/null +++ b/src/module/uti/scroll348.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Yes\n\nThe caster conjures a shadow variant of one of the following spells: Darkness, Invisibility, Mage Armor, Magic Missile, or Summon Shadow.", + "id": 6252 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shadow Conjuration", + "id": 13591 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 245 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll348" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll348" + } +} diff --git a/src/module/uti/scroll349.uti.json b/src/module/uti/scroll349.uti.json new file mode 100644 index 0000000..ba4e91a --- /dev/null +++ b/src/module/uti/scroll349.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Special\n\nAllows the caster to conjure a shadow variant of one of the following spells: Summon Shadow, Melf's Acid Arrow, Ghostly Visage, Web, or Minor Globe of Invulnerability.", + "id": 6168 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Shadow Conjunction", + "id": 13606 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 128 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll349" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll349" + } +} diff --git a/src/module/uti/scroll350.uti.json b/src/module/uti/scroll350.uti.json new file mode 100644 index 0000000..c770c78 --- /dev/null +++ b/src/module/uti/scroll350.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Special\n\nAllows the caster to conjure a shadow variant of one of the following spells: Summon Shadow, Melf's Acid Arrow, Ghostly Visage, Web, or Minor Globe of Invulnerability.", + "id": 6168 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Shadow Conjunction", + "id": 13606 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 128 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll350" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll350" + } +} diff --git a/src/module/uti/scroll351.uti.json b/src/module/uti/scroll351.uti.json new file mode 100644 index 0000000..b9d151d --- /dev/null +++ b/src/module/uti/scroll351.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Special\n\nAllows the caster to conjure a shadow variant of one of the following spells: Summon Shadow, Melf's Acid Arrow, Ghostly Visage, Web, or Minor Globe of Invulnerability.", + "id": 6168 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Shadow Conjunction", + "id": 13606 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 128 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll351" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll351" + } +} diff --git a/src/module/uti/scroll352.uti.json b/src/module/uti/scroll352.uti.json new file mode 100644 index 0000000..1ae8a11 --- /dev/null +++ b/src/module/uti/scroll352.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Special\n\nAllows the caster to conjure a shadow variant of one of the following spells: Summon Shadow, Melf's Acid Arrow, Ghostly Visage, Web, or Minor Globe of Invulnerability.", + "id": 6168 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Shadow Conjunction", + "id": 13606 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 128 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll352" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll352" + } +} diff --git a/src/module/uti/scroll353.uti.json b/src/module/uti/scroll353.uti.json new file mode 100644 index 0000000..6f2d8cb --- /dev/null +++ b/src/module/uti/scroll353.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Special\nArea of Effect / Target: Special\nDuration: Special\nAdditional Counter Spells: \nSave: Special\nSpell Resistance: Special\n\nAllows the caster to conjure a shadow variant of one of the following spells: Summon Shadow, Melf's Acid Arrow, Ghostly Visage, Web, or Minor Globe of Invulnerability.", + "id": 6168 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Shadow Conjunction", + "id": 13606 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 128 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll353" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll353" + } +} diff --git a/src/module/uti/scroll354.uti.json b/src/module/uti/scroll354.uti.json new file mode 100644 index 0000000..9c91858 --- /dev/null +++ b/src/module/uti/scroll354.uti.json @@ -0,0 +1,301 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Paladin 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells:\nSave: Harmless\nSpell Resistance: No \n\nThe target creature's Charisma is increased by 1d4+1.", + "id": 6526 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Eagle's Splendor", + "id": 58581 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 288 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll354" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll354" + } +} diff --git a/src/module/uti/scroll355.uti.json b/src/module/uti/scroll355.uti.json new file mode 100644 index 0000000..f5b1aac --- /dev/null +++ b/src/module/uti/scroll355.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells:\nSave: Harmless\nSpell Resistance: No \n\nThe target creature's Wisdom is increased by 1d4+1.", + "id": 6527 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Owl's Wisdom", + "id": 58583 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 291 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll355" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll355" + } +} diff --git a/src/module/uti/scroll356.uti.json b/src/module/uti/scroll356.uti.json new file mode 100644 index 0000000..f913dae --- /dev/null +++ b/src/module/uti/scroll356.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Cleric 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic \nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Hour / Level\nAdditional Counter Spells:\nSave: Harmless\nSpell Resistance: No \n\nThe target creature's Intelligence is increased by 1d4+1.", + "id": 6528 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fox's Cunning", + "id": 58582 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 294 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll356" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll356" + } +} diff --git a/src/module/uti/scroll363.uti.json b/src/module/uti/scroll363.uti.json new file mode 100644 index 0000000..66f67bc --- /dev/null +++ b/src/module/uti/scroll363.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 5\nInnate Level: 5\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Animal Companion\nDuration: Special\nAdditional Counter Spells:\nSave: Harmless\nSpell Resistance: No\n\nThe target animal companion gains +4 Strength, +4 Constitution, +1d10 Wisdom, and +2 to attack rolls for as long as it remains at the Druid's side.", + "id": 6529 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Awake", + "id": 58583 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 303 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll363" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll363" + } +} diff --git a/src/module/uti/scroll364.uti.json b/src/module/uti/scroll364.uti.json new file mode 100644 index 0000000..a511c3c --- /dev/null +++ b/src/module/uti/scroll364.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 7\nInnate Level: 7\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Large\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: None\nSpell Resistance: No\n\nThe caster summons a mass of biting and stinging insects which causes 1d6 points of damage. For every subsequent round that a creature remains within the area of effect, the damage inflicted is increased by an increment of 1d6 (ie. 1d6 for the first round, 2d6 for the second, 4d6 for the third, 7d6 for the fourth, and so on). The spell deals damage until its duration expires or it deals 1,000 points of damage.", + "id": 6530 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Creeping Doom", + "id": 58583 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 304 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll364" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll364" + } +} diff --git a/src/module/uti/scroll366.uti.json b/src/module/uti/scroll366.uti.json new file mode 100644 index 0000000..51d03fd --- /dev/null +++ b/src/module/uti/scroll366.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 7\nInnate Level: 7\nSchool: Necromancy\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Close\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Fortitude Partial\nSpell Resistance: Yes\n\nThe target creature must make a Fortitude save or die. A successful save still results in the target taking 10d6 points of damage.", + "id": 6532 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Destruction", + "id": 58583 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 307 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll366" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll366" + } +} diff --git a/src/module/uti/scroll367.uti.json b/src/module/uti/scroll367.uti.json new file mode 100644 index 0000000..f22fe40 --- /dev/null +++ b/src/module/uti/scroll367.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Necromancy\nDescriptor(s): Death\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: Fortitude 1/2\nSpell Resistance: Yes\n\nAll creatures within the area of effect take 1d8 points of withering energy damage per caster level, to a maximum of 25d8.", + "id": 6533 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Horrid Wilting", + "id": 13641 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 308 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll367" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll367" + } +} diff --git a/src/module/uti/scroll368.uti.json b/src/module/uti/scroll368.uti.json new file mode 100644 index 0000000..1684000 --- /dev/null +++ b/src/module/uti/scroll368.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 6, Druid 5, Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Evocation\nDescriptor(s): Cold\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Huge\nDuration: Instant\nAdditional Counter Spells: \nSave: None\nSpell Resistance: Yes\n\nAll creatures in the area of effect take 3d6 points of bludgeoning damage and 2d6 points of cold damage. Ice Storm will do an additional 1d6 cold damage per additional 3 caster levels.", + "id": 6534 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Ice Storm", + "id": 13641 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 310 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll368" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll368" + } +} diff --git a/src/module/uti/scroll369.uti.json b/src/module/uti/scroll369.uti.json new file mode 100644 index 0000000..104ec1d --- /dev/null +++ b/src/module/uti/scroll369.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 6, Druid 6, Sorcerer / Wizard 5\nInnate Level: 5\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Turn / Caster Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThe caster gains damage resistance 40/- against all elemental forms of damage. The spell ends after absorbing 60 points of damage from any single elemental type.", + "id": 6535 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Energy Buffer", + "id": 13641 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 311 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll369" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll369" + } +} diff --git a/src/module/uti/scroll370.uti.json b/src/module/uti/scroll370.uti.json new file mode 100644 index 0000000..a9190cb --- /dev/null +++ b/src/module/uti/scroll370.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: Instant\nAdditional Counter Spells: Negative Energy Protection\nSave: Will 1/2\nSpell Resistance: Yes\n\nAll creatures caught in the area of effect take 1d8 points of negative energy damage, +1 per caster level, to a maximum of +20. All creatures caught in the area also lose 1 point of strength per 4 caster levels. Negative energy spells have a reverse effect on undead, healing instead of harming them.", + "id": 6536 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Negative Energy Burst", + "id": 58584 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 314 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll370" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll370" + } +} diff --git a/src/module/uti/scroll371.uti.json b/src/module/uti/scroll371.uti.json new file mode 100644 index 0000000..209c461 --- /dev/null +++ b/src/module/uti/scroll371.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 2, Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: \nSave: Will 1/2\nSpell Resistance: Yes\n\nA ray of negative energy slams into the target creature, doing 1d6 points of damage. After level 1, the spell does an additional 1d6 points of damage for every 2 caster levels, to a maximum of 5d6 at level 9. Negative energy spells have a reverse effect on undead, healing instead of harming them.", + "id": 6537 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Negative Energy Ray", + "id": 58579 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 316 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 255 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll371" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll371" + } +} diff --git a/src/module/uti/scroll372.uti.json b/src/module/uti/scroll372.uti.json new file mode 100644 index 0000000..44fa2ed --- /dev/null +++ b/src/module/uti/scroll372.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 7\nInnate Level: 7\nSchool: Transmutation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Colossal\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nAll allies within the area of effect receive a +4 bonus to Strength, Constitution, and Dexterity.", + "id": 6538 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Aura of Vitality", + "id": 58579 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 321 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll372" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll372" + } +} diff --git a/src/module/uti/scroll373.uti.json b/src/module/uti/scroll373.uti.json new file mode 100644 index 0000000..a4e16e4 --- /dev/null +++ b/src/module/uti/scroll373.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4\nInnate Level: 4\nSchool: Enchantment\nDescriptor(s): Mind-Affecting, Sonic\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: 1 Round / Level\nAdditional Counter Spells: Silence\nSave: Will Negates\nSpell Resistance: Yes\n\nThe caster lets out a powerful shout that grants the Bard a +2 bonus to attack and damage. All enemies within the area of effect are stricken with fear.", + "id": 6539 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "War Cry", + "id": 58579 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 322 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll373" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll373" + } +} diff --git a/src/module/uti/scroll374.uti.json b/src/module/uti/scroll374.uti.json new file mode 100644 index 0000000..2e5a2e1 --- /dev/null +++ b/src/module/uti/scroll374.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 7, Druid 6\nInnate Level: 7\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 Round / Caster Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nFor the duration of the spell, the target creature gains the ability to regenerate 6 Hit Points every round.", + "id": 6541 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Regenerate", + "id": 58579 + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 323 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll374" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll374" + } +} diff --git a/src/module/uti/scroll375.uti.json b/src/module/uti/scroll375.uti.json new file mode 100644 index 0000000..8153c23 --- /dev/null +++ b/src/module/uti/scroll375.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4\nInnate Level: 4\nSchool: Conjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Large, 1d4 Tentacles, + 1 / Caster Level\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Fortitude Special\nSpell Resistance: No\n\nA field of thick, rubbery tentacles rises from the ground. For every round that a creature is caught within the area of effect, it suffers attacks from 1d4 tentacles, each capable of doing 1d6+4 points bludgeoning damage. If any tentacle attack hits a target, that target must then make a Fortitude saving throw or become paralyzed.", + "id": 6542 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Evard's Black Tentacles", + "id": 40582 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 324 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll375" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll375" + } +} diff --git a/src/module/uti/scroll376.uti.json b/src/module/uti/scroll376.uti.json new file mode 100644 index 0000000..68a9a74 --- /dev/null +++ b/src/module/uti/scroll376.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 4, Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Turn / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nThis spell grants the caster a +10 bonus to Lore checks, +1 per 2 caster levels.", + "id": 6543 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Legend Lore", + "id": 40582 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 326 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll376" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll376" + } +} diff --git a/src/module/uti/scroll377.uti.json b/src/module/uti/scroll377.uti.json new file mode 100644 index 0000000..b1d9c50 --- /dev/null +++ b/src/module/uti/scroll377.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Cleric 2, Wizard / Sorcerer 3\nInnate Level: 2\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: No\n\nAll traps within the area of effect become known to the caster of this spell and are disarmed.", + "id": 6544 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Find Traps", + "id": 40582 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 327 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll377" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll377" + } +} diff --git a/src/module/uti/scroll414.uti.json b/src/module/uti/scroll414.uti.json new file mode 100644 index 0000000..6be2a47 --- /dev/null +++ b/src/module/uti/scroll414.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1, Paladin 1 \nInnate Level: 1\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Turn\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster gains a +1 bonus to attack and weapon damage rolls for every three caster levels (at least +1, to a maximum of +5).", + "id": 54 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Divine Favor", + "id": 53 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 345 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll414" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll414" + } +} diff --git a/src/module/uti/scroll415.uti.json b/src/module/uti/scroll415.uti.json new file mode 100644 index 0000000..e23774e --- /dev/null +++ b/src/module/uti/scroll415.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 1 \nInnate Level: 1\nSchool: Divination\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 9 seconds\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThrough magical intuition the caster gains a +20 bonus to attack rolls.", + "id": 509 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "True Strike", + "id": 55 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 346 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll415" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll415" + } +} diff --git a/src/module/uti/scroll416.uti.json b/src/module/uti/scroll416.uti.json new file mode 100644 index 0000000..67e504c --- /dev/null +++ b/src/module/uti/scroll416.uti.json @@ -0,0 +1,270 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 13 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 0, Druid 0, Wizard / Sorcerer 0 \nInnate Level: 0\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal\nRange: Medium\nArea of Effect / Target: Single\nDuration: 10 rounds\nAdditional Counter Spells:\nSave: Fort negates\nSpell Resistance: Yes\n\nA burst of hot light is fired from the caster to one target, making it suffer a -1 penalty to attack rolls.", + "id": 510 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Flare", + "id": 56 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 347 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll416" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll416" + } +} diff --git a/src/module/uti/scroll417.uti.json b/src/module/uti/scroll417.uti.json new file mode 100644 index 0000000..1c4f599 --- /dev/null +++ b/src/module/uti/scroll417.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 1\nInnate Level: 1\nSchool: Abjuration\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 turn / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster gains a +4 bonus to AC. As well, the caster is immune to the spell magic missile for the duration of the shield.", + "id": 513 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shield", + "id": 57 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 348 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll417" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll417" + } +} diff --git a/src/module/uti/scroll418.uti.json b/src/module/uti/scroll418.uti.json new file mode 100644 index 0000000..a993182 --- /dev/null +++ b/src/module/uti/scroll418.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1 \nInnate Level: 1\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 turn / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nA magical field appears around the caster, causing any nearby enemies a 20% chance to miss on ranged attacks.", + "id": 521 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Entropic Shield", + "id": 58 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 349 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll418" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll418" + } +} diff --git a/src/module/uti/scroll419.uti.json b/src/module/uti/scroll419.uti.json new file mode 100644 index 0000000..e3d0b44 --- /dev/null +++ b/src/module/uti/scroll419.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 200 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3, Wizard / Sorcerer 2\nInnate Level: 3\nSchool: Illusion\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Permanent\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThis creates a magical flame that burns as bright as a torch until dispelled.", + "id": 522 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Continual Flame", + "id": 59 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 350 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll419" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll419" + } +} diff --git a/src/module/uti/scroll420.uti.json b/src/module/uti/scroll420.uti.json new file mode 100644 index 0000000..e151b4e --- /dev/null +++ b/src/module/uti/scroll420.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 2, Ranger 2 \nInnate Level: 2\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 hour / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster forges a strong link with nature, gaining a +4 competence bonus to Animal Empathy, Hide, Move Silently, and Set Trap skills.", + "id": 1011 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "One with the Land", + "id": 283 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 351 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll420" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll420" + } +} diff --git a/src/module/uti/scroll421.uti.json b/src/module/uti/scroll421.uti.json new file mode 100644 index 0000000..d8c2537 --- /dev/null +++ b/src/module/uti/scroll421.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 1, Ranger 1 \nInnate Level: 1\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 turn / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster's coloring changes to match the surroundings, gaining a +10 competence bonus to any Hide checks.", + "id": 1064 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Camouflage", + "id": 340 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 352 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll421" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll421" + } +} diff --git a/src/module/uti/scroll422.uti.json b/src/module/uti/scroll422.uti.json new file mode 100644 index 0000000..76fe7fa --- /dev/null +++ b/src/module/uti/scroll422.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 2 \nInnate Level: 2\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster enters a rage similar to that of a barbarian. The caster gains a +2 bonus to Strength and Constitution and a +1 bonus to Will saves, while suffering a -1 penalty to AC.", + "id": 1425 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Blood Frenzy", + "id": 359 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 353 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll422" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll422" + } +} diff --git a/src/module/uti/scroll423.uti.json b/src/module/uti/scroll423.uti.json new file mode 100644 index 0000000..9ec1464 --- /dev/null +++ b/src/module/uti/scroll423.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 8\nInnate Level: 8\nSchool: Conjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Huge\nDuration: Instant\nAdditional Counter Spells:\nSave: Reflex 1/2\nSpell Resistance: Yes\n\nRocks fall from the sky, causing 1d8 points of damage per caster level (max 10d8) to all enemies in the area.", + "id": 1489 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bombardment", + "id": 382 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 354 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll423" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll423" + } +} diff --git a/src/module/uti/scroll424.uti.json b/src/module/uti/scroll424.uti.json new file mode 100644 index 0000000..4dfc100 --- /dev/null +++ b/src/module/uti/scroll424.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 13 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 0\nInnate Level: 0\nSchool: Conjuration\nDescriptor(s): Acid\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nThe caster fires a small orb of acid at the target for 1d3 points of acid damage.", + "id": 1496 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Acid Splash", + "id": 383 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 355 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll424" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll424" + } +} diff --git a/src/module/uti/scroll425.uti.json b/src/module/uti/scroll425.uti.json new file mode 100644 index 0000000..74fa33c --- /dev/null +++ b/src/module/uti/scroll425.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 3 \nInnate Level: 3\nSchool: Transmutation\nDescriptor(s): Poison\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells:\nSave: Fortitude Negates (poison only)\nSpell Resistance: No\n\nThe caster throws poisonous quills at a target, doing 1d8 points of damage (+1 per 2 levels of the caster - max +5), plus inflicting Scorpion Venom on the target if they fail a Fortitude save.", + "id": 1814 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Quillfire", + "id": 1773 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 356 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll425" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll425" + } +} diff --git a/src/module/uti/scroll426.uti.json b/src/module/uti/scroll426.uti.json new file mode 100644 index 0000000..6331bb4 --- /dev/null +++ b/src/module/uti/scroll426.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 8, Druid 9\nInnate Level: 8\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells:\nSave: Reflex 1/2\nSpell Resistance: No\n\nThe caster causes a massive earthquake around himself, causing 1d6 points of damage per caster level (to a maximum of 10d6) to all creatures in the area of effect. The caster is not affected by the earthquake.", + "id": 1524 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Earthquake", + "id": 384 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 357 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll426" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll426" + } +} diff --git a/src/module/uti/scroll427.uti.json b/src/module/uti/scroll427.uti.json new file mode 100644 index 0000000..162d82e --- /dev/null +++ b/src/module/uti/scroll427.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 8, Wizard / Sorcerer 8 \nInnate Level: 8\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Huge\nDuration: Instant\nAdditional Counter Spells:\nSave: Reflex\nSpell Resistance: Yes\n\nA brilliant explosion occurs where the caster directs causing 1d6 points of damage per caster level to all undead creatures to a maximum of 25d6 (6d6 points of damage to creatures that are not undead). Vampires are destroyed instantly if they fail a Reflex saving throw. All enemies in the area of effect must also make a successful Reflex saving throw or be blinded permanently (the blindness can only be magically removed).", + "id": 1537 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sunburst", + "id": 385 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 358 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll427" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll427" + } +} diff --git a/src/module/uti/scroll429.uti.json b/src/module/uti/scroll429.uti.json new file mode 100644 index 0000000..7371c76 --- /dev/null +++ b/src/module/uti/scroll429.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Paladin 2 \nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): Divine\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster, Medium\nDuration: 1 turn / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster channels divine power to gain a +4 Charisma bonus. All allies near the caster gain a +5 bonus to their saving throws versus fear.", + "id": 1542 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Aura of Glory", + "id": 386 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 360 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll429" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll429" + } +} diff --git a/src/module/uti/scroll430.uti.json b/src/module/uti/scroll430.uti.json new file mode 100644 index 0000000..a14c6e8 --- /dev/null +++ b/src/module/uti/scroll430.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 6, Wizard / Sorcerer 7\nInnate Level: 6\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells:\nSave: Will negates\nSpell Resistance: Yes\n\nThe caster is able to cause all summoned creatures, familiars, animal companions, and Outsiders in the area of effect to be destroyed. A number of creatures equal to twice the caster's level in HD can be banished.", + "id": 1548 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Banishment", + "id": 387 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 361 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll430" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll430" + } +} diff --git a/src/module/uti/scroll431.uti.json b/src/module/uti/scroll431.uti.json new file mode 100644 index 0000000..6e73656 --- /dev/null +++ b/src/module/uti/scroll431.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 13 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 0\nInnate Level: 0\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Cure Minor Wounds\nSave: Will 1/2\nSpell Resistance: Yes\n\nIf the caster succeeds in striking an opponent with a touch attack, the target suffers 1 point of damage. Inflict spells have a reverse effect when used on undead, causing the targeted undead to take an amount of healing equal to what the spell normally damages.", + "id": 1570 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Inflict Minor Wounds", + "id": 388 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 362 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll431" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll431" + } +} diff --git a/src/module/uti/scroll432.uti.json b/src/module/uti/scroll432.uti.json new file mode 100644 index 0000000..f6a997f --- /dev/null +++ b/src/module/uti/scroll432.uti.json @@ -0,0 +1,175 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1\nInnate Level: 1\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Cure Light Wounds\nSave: Will 1/2\nSpell Resistance: Yes\n\nIf the caster succeeds in striking an opponent with a touch attack, the target suffers 1d8 points of damage, + 1 point per caster level to a maximum of +5. Inflict spells have a reverse effect when used on undead, causing the targeted undead to take an amount of healing equal to what the spell normally damages.", + "id": 1571 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Inflict Light Wounds", + "id": 389 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 363 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll432" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll432" + } +} diff --git a/src/module/uti/scroll433.uti.json b/src/module/uti/scroll433.uti.json new file mode 100644 index 0000000..521564a --- /dev/null +++ b/src/module/uti/scroll433.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 2\nInnate Level: 2\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Cure Moderate Wounds\nSave: Will 1/2\nSpell Resistance: Yes\n\nIf the caster succeeds in striking an opponent with a touch attack, the target suffers 2d8 points of damage, + 1 point per caster level to a maximum of +10. Inflict spells have a reverse effect when used on undead, causing the targeted undead to take an amount of healing equal to what the spell normally damages.", + "id": 1574 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Inflict Moderate Wounds", + "id": 390 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 364 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll433" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll433" + } +} diff --git a/src/module/uti/scroll434.uti.json b/src/module/uti/scroll434.uti.json new file mode 100644 index 0000000..3480721 --- /dev/null +++ b/src/module/uti/scroll434.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 3\nInnate Level: 3\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Cure Serious Wounds\nSave: Will 1/2\nSpell Resistance: Yes\n\nIf the caster succeeds in striking an opponent with a touch attack, the target suffers 3d8 points of damage, + 1 point per caster level to a maximum of +15. Inflict spells have a reverse effect when used on undead, causing the targeted undead to take an amount of healing equal to what the spell normally damages.", + "id": 1575 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Inflict Serious Wounds", + "id": 391 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 365 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll434" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll434" + } +} diff --git a/src/module/uti/scroll435.uti.json b/src/module/uti/scroll435.uti.json new file mode 100644 index 0000000..2a1cd65 --- /dev/null +++ b/src/module/uti/scroll435.uti.json @@ -0,0 +1,175 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4\nInnate Level: 4\nSchool: Necromancy\nDescriptor(s): Negative\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells: Cure Critical Wounds\nSave: Will 1/2\nSpell Resistance: Yes\n\nIf the caster succeeds in striking an opponent with a touch attack, the target suffers 4d8 points of damage, + 1 point per caster level to a maximum of +20. Inflict spells have a reverse effect when used on undead, causing the targeted undead to take an amount of healing equal to what the spell normally damages.", + "id": 1585 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Inflict Critical Wounds", + "id": 392 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 366 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll435" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll435" + } +} diff --git a/src/module/uti/scroll436.uti.json b/src/module/uti/scroll436.uti.json new file mode 100644 index 0000000..cd92733 --- /dev/null +++ b/src/module/uti/scroll436.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Transmutation\nDescriptor(s): Sonic\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nThe caster creates a deep, resonant vibration that shakes all creatures in the area of effect from their feet if they fail a strength check (as if the caster had a strength of 20). Every creature that falls will be knocked down for one round.", + "id": 1586 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Balagarn's Iron Horn", + "id": 502 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 367 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll436" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll436" + } +} diff --git a/src/module/uti/scroll437.uti.json b/src/module/uti/scroll437.uti.json new file mode 100644 index 0000000..1143082 --- /dev/null +++ b/src/module/uti/scroll437.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 6 \nInnate Level: 6\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells:\nSave: Fortitude negates\nSpell Resistance: Yes\n\nThe caster creates water in the lungs of a target creature. Any drowned creature takes 90% of its current hit points as damage. Golems and other nonliving creatures cannot be drowned.", + "id": 1588 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Drown", + "id": 508 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 368 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll437" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll437" + } +} diff --git a/src/module/uti/scroll439.uti.json b/src/module/uti/scroll439.uti.json new file mode 100644 index 0000000..f38fbe8 --- /dev/null +++ b/src/module/uti/scroll439.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 13 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 13 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 0 \nInnate Level: 0\nSchool: Evocation\nDescriptor(s): Electricity\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Instant\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nThe caster does 1d3 points of electrical damage to a target.", + "id": 1857 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Electric Jolt", + "id": 1852 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 370 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll439" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll439" + } +} diff --git a/src/module/uti/scroll440.uti.json b/src/module/uti/scroll440.uti.json new file mode 100644 index 0000000..b0e9540 --- /dev/null +++ b/src/module/uti/scroll440.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Evocation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Colossal\nDuration: Instant\nAdditional Counter Spells:\nSave: Reflex 1/2\nSpell Resistance: Yes\n\nMasses of flame (one per caster level) appear and randomly target and hit any hostile creature in the area of effect. If there are more creatures than balls of flame, only the closest targets will be damaged. If there are more balls of flame than creatures, the excess balls of flame disappear. Each ball of flame explodes for 1d6 points of damage per caster level (max 15d6).", + "id": 1890 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Firebrand", + "id": 1895 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 371 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll440" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll440" + } +} diff --git a/src/module/uti/scroll441.uti.json b/src/module/uti/scroll441.uti.json new file mode 100644 index 0000000..4e45e6e --- /dev/null +++ b/src/module/uti/scroll441.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3 \nInnate Level: 3\nSchool: Abjuration\nDescriptor(s): Sonic\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster is surrounded with whispers that injure any creature that hits the caster for 1d6 + 1 / level points of sonic damage.", + "id": 2369 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wounding Whispers", + "id": 2362 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 372 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll441" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll441" + } +} diff --git a/src/module/uti/scroll442.uti.json b/src/module/uti/scroll442.uti.json new file mode 100644 index 0000000..9cd7126 --- /dev/null +++ b/src/module/uti/scroll442.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1 \nInnate Level: 1\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster or a target gains a +20 bonus to Listen checks.", + "id": 2370 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Amplify", + "id": 2363 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 373 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll442" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll442" + } +} diff --git a/src/module/uti/scroll443.uti.json b/src/module/uti/scroll443.uti.json new file mode 100644 index 0000000..3f18e5a --- /dev/null +++ b/src/module/uti/scroll443.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 6, Wizard / Sorcerer 8 \nInnate Level: 7\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 turn / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster becomes ethereal. No other creature can detect the caster. Attacking or performing a hostile action will make the etherealness vanish.", + "id": 2371 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Sanctuary", + "id": 2364 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 374 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll443" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll443" + } +} diff --git a/src/module/uti/scroll444.uti.json b/src/module/uti/scroll444.uti.json new file mode 100644 index 0000000..8cbc52d --- /dev/null +++ b/src/module/uti/scroll444.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 9\nInnate Level: 9\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Medium\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nAll allies in the area of effect will receive the following bonuses: immunity to negative damage, immunity to level/energy drain, immunity to ability score decreases, immunity to poisons, and immunity to diseases.", + "id": 2372 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Undeath's Eternal Foe", + "id": 2365 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 375 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll444" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll444" + } +} diff --git a/src/module/uti/scroll445.uti.json b/src/module/uti/scroll445.uti.json new file mode 100644 index 0000000..0d9f683 --- /dev/null +++ b/src/module/uti/scroll445.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 6\nInnate Level: 6\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Large\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: Fortitude negates\nSpell Resistance: Yes\n\nThe caster's song draws the energies of death and destruction. Any enemies in the area of effect suffer 2 points of Strength and Dexterity ability score damage each round. If the enemy leaves the area of effect, their Strength and Dexterity are restored.", + "id": 2373 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dirge", + "id": 2366 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 376 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll445" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll445" + } +} diff --git a/src/module/uti/scroll446.uti.json b/src/module/uti/scroll446.uti.json new file mode 100644 index 0000000..71ee5a3 --- /dev/null +++ b/src/module/uti/scroll446.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 5 \nInnate Level: 5\nSchool: Transmutation\nDescriptor(s): Fire\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nThe caster causes a target to ignite into flame. Each round the target will suffer 2d6 points of fire damage.", + "id": 2374 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Inferno", + "id": 2368 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 377 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll446" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll446" + } +} diff --git a/src/module/uti/scroll447.uti.json b/src/module/uti/scroll447.uti.json new file mode 100644 index 0000000..41aaf7d --- /dev/null +++ b/src/module/uti/scroll447.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 4 \nInnate Level: 4\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Gargantuan\nDuration: Instant\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nA number of energy missiles (one per caster level but to a maximum of 10) appear and randomly target and hit any hostile creature in the area of effect. If there are more creatures than missiles, only the closest targets will be damaged. If there are more missiles than creatures, one of the creatures will be hit with multiple missiles. Each missile does 1d6 points of damage.", + "id": 2375 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Isaac's Lesser Missile Storm", + "id": 2377 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 378 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll447" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll447" + } +} diff --git a/src/module/uti/scroll448.uti.json b/src/module/uti/scroll448.uti.json new file mode 100644 index 0000000..b6b5c1c --- /dev/null +++ b/src/module/uti/scroll448.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6 \nInnate Level: 6\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Gargantuan\nDuration: Instant\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nA number of energy missiles (one per caster level but to a maximum of 20) appear and randomly target and hit any hostile creature in the area of effect. If there are more creatures than missiles, only the closest targets will be damaged. If there are more missiles than creatures, one of the creatures will be hit with multiple missiles. Each missile does 2d6 points of damage.", + "id": 2376 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Isaac's Greater Missile Storm", + "id": 66671 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 379 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll448" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll448" + } +} diff --git a/src/module/uti/scroll449.uti.json b/src/module/uti/scroll449.uti.json new file mode 100644 index 0000000..d9ca646 --- /dev/null +++ b/src/module/uti/scroll449.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1\nInnate Level: 1\nSchool: Enchantment\nDescriptor(s): Mind-Affecting\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Colossal\nDuration: 1 turn / level\nAdditional Counter Spells: Bless\nSave: Will negates\nSpell Resistance: Yes\n\nBane fills the caster's enemies with fear and doubt. They suffer a -1 penalty on their attack rolls and a -1 penalty on saving throws against fear.", + "id": 2664 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bane", + "id": 2663 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 380 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll449" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll449" + } +} diff --git a/src/module/uti/scroll450.uti.json b/src/module/uti/scroll450.uti.json new file mode 100644 index 0000000..f403e3a --- /dev/null +++ b/src/module/uti/scroll450.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 1\nInnate Level: 1\nSchool: Abjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 turn / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe target gains a +2 deflection bonus to their armor class, with an additional +1 bonus for every six levels of the caster (maximum of +5).", + "id": 2665 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shield of Faith", + "id": 2666 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 381 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll450" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll450" + } +} diff --git a/src/module/uti/scroll451.uti.json b/src/module/uti/scroll451.uti.json new file mode 100644 index 0000000..d593866 --- /dev/null +++ b/src/module/uti/scroll451.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 6\nInnate Level: 6\nSchool: Conjuration\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 hour / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nAn Outsider is summoned to assist the caster. The type of Outsider varies with the caster's alignment.", + "id": 2668 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Planar Ally", + "id": 2667 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 382 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll451" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll451" + } +} diff --git a/src/module/uti/scroll452.uti.json b/src/module/uti/scroll452.uti.json new file mode 100644 index 0000000..ce5b5c4 --- /dev/null +++ b/src/module/uti/scroll452.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 1, Ranger 1 \nInnate Level: 1\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 turn / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThis spell strengthens the caster's animal companion, giving it +1 to hit and +1 to damage. It also grants the creature the ability to strike as if it were a +1 weapon (so it can bypass other creature's damage reduction).", + "id": 2669 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Magic Fang", + "id": 2670 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 383 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll452" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll452" + } +} diff --git a/src/module/uti/scroll453.uti.json b/src/module/uti/scroll453.uti.json new file mode 100644 index 0000000..ce8f1a4 --- /dev/null +++ b/src/module/uti/scroll453.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 3, Ranger 3 \nInnate Level: 3\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 turn / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThis spell strengthens the caster's animal companion, giving it +1 to hit and +1 to damage for every three levels of the caster (maximum of +5). It also grants the creature an enchantment bonus equal to the hit/damage bonus given.", + "id": 2749 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Greater Magic Fang", + "id": 2923 + } + }, + "ModelPart1": { + "type": "byte", + "value": 2 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 384 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll453" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll453" + } +} diff --git a/src/module/uti/scroll454.uti.json b/src/module/uti/scroll454.uti.json new file mode 100644 index 0000000..13f7060 --- /dev/null +++ b/src/module/uti/scroll454.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 3 \nInnate Level: 3\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Large\nDuration: 1 hour / level\nAdditional Counter Spells:\nSave: Reflex partial\nSpell Resistance: Yes\n\nCovers the terrain with small spikes. Any creature will suffer 1d4 points of damage each round that they remain within the afflicted area. These spikes can damage the victim's legs, so that even once they are free of the spike growth, their movement rate is slowed for a day.", + "id": 2672 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spike Growth", + "id": 2671 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 385 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll454" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll454" + } +} diff --git a/src/module/uti/scroll455.uti.json b/src/module/uti/scroll455.uti.json new file mode 100644 index 0000000..d97db8a --- /dev/null +++ b/src/module/uti/scroll455.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Druid 4, Ranger 4 \nInnate Level: 4\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Colossal\nDuration: 1 hour / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nAll allies in the area of effect gain a +10 bonus to their hide skill.", + "id": 2673 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Mass Camouflage", + "id": 2674 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 386 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll455" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll455" + } +} diff --git a/src/module/uti/scroll456.uti.json b/src/module/uti/scroll456.uti.json new file mode 100644 index 0000000..b29c472 --- /dev/null +++ b/src/module/uti/scroll456.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 25 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 25 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 1, Wizard / Sorcerer 1 \nInnate Level: 1\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe caster becomes 150% faster than their normal movement rate, allowing them to flee from dangerous encounters. This spell has no effect if the caster is already hasted.", + "id": 2676 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Expeditious Retreat", + "id": 40140 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 387 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll456" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll456" + } +} diff --git a/src/module/uti/scroll457.uti.json b/src/module/uti/scroll457.uti.json new file mode 100644 index 0000000..6593be3 --- /dev/null +++ b/src/module/uti/scroll457.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 150 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 150 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 2, Wizard / Sorcerer 2\nInnate Level: 2\nSchool: Enchantment\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Short\nArea of Effect / Target: Single\nDuration: 1d3 rounds\nAdditional Counter Spells:\nSave: Will negates\nSpell Resistance: Yes\n\nIf the target fails their saving throw they will begin laughing hysterically. They will be unable to defend themselves until the spell wears off. A creature whose racial type is different from the caster's gains a +4 bonus on its saving throw because humor doesn't 'translate' well.", + "id": 2677 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tasha's Hideous Laughter", + "id": 2678 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 388 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll457" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll457" + } +} diff --git a/src/module/uti/scroll458.uti.json b/src/module/uti/scroll458.uti.json new file mode 100644 index 0000000..00d3159 --- /dev/null +++ b/src/module/uti/scroll458.uti.json @@ -0,0 +1,239 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 375 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 375 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Bard 3, Wizard / Sorcerer 3\nInnate Level: 3\nSchool: Illusion\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Touch\nArea of Effect / Target: Single\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: No\n\nThe target gains 50% concealment, displacing the caster's image several feet to the side, similar to the abilities of a displacer beast.", + "id": 2680 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Displacement", + "id": 2679 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 389 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll458" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll458" + } +} diff --git a/src/module/uti/scroll459.uti.json b/src/module/uti/scroll459.uti.json new file mode 100644 index 0000000..f3758d8 --- /dev/null +++ b/src/module/uti/scroll459.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1125 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1125 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 5\nInnate Level: 5\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Single\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nA giant hand appears over the target, making it difficult for him to attack. He receives a -10 penalty to all attack rolls for the duration of the spell.", + "id": 2688 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bigby's Interposing Hand", + "id": 2683 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 390 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll459" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll459" + } +} diff --git a/src/module/uti/scroll460.uti.json b/src/module/uti/scroll460.uti.json new file mode 100644 index 0000000..5864757 --- /dev/null +++ b/src/module/uti/scroll460.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Single\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nA giant hand appears and attempts to bull rush one target. The hand gains a +14 bonus on the Strength check. A target that is bull rushed is knocked down and is dazed for the duration of the spell.", + "id": 2689 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bigby's Forceful Hand", + "id": 2684 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 391 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll460" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll460" + } +} diff --git a/src/module/uti/scroll461.uti.json b/src/module/uti/scroll461.uti.json new file mode 100644 index 0000000..696d9a3 --- /dev/null +++ b/src/module/uti/scroll461.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2275 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2275 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 7\nInnate Level: 7\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Single\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: None\nSpell Resistance: Yes\n\nA giant hand appears and attacks the target. If the hand hits and succeeds in a grapple check the opponent will be held for the duration of the spell.", + "id": 2690 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bigby's Grasping Hand", + "id": 2685 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 392 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll461" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll461" + } +} diff --git a/src/module/uti/scroll462.uti.json b/src/module/uti/scroll462.uti.json new file mode 100644 index 0000000..703be61 --- /dev/null +++ b/src/module/uti/scroll462.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3000 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 8\nInnate Level: 8\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Single\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: Fortitude\nSpell Resistance: Yes\n\nA giant hand appears and attacks the target, once each round for the duration of the spell. Each hit causes 1d8+11 points of damage to the target and if they fail their saving throw they are stunned for that round as well.", + "id": 2691 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bigby's Clenched Fist", + "id": 2686 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 393 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll462" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll462" + } +} diff --git a/src/module/uti/scroll463.uti.json b/src/module/uti/scroll463.uti.json new file mode 100644 index 0000000..367d9db --- /dev/null +++ b/src/module/uti/scroll463.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3825 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3825 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 9\nInnate Level: 9\nSchool: Evocation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Long\nArea of Effect / Target: Single\nDuration: 1 round / level\nAdditional Counter Spells:\nSave: Fortitude\nSpell Resistance: Yes\n\nA giant hand appears and attacks the target. If it hits and succeeds in a grapple check, the target is held fast for the duration of the spell and suffers 2d6+12 points of damage each round.", + "id": 2692 + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Bigby's Crushing Hand", + "id": 2687 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 394 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll463" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll463" + } +} diff --git a/src/module/uti/scroll464.uti.json b/src/module/uti/scroll464.uti.json new file mode 100644 index 0000000..884f016 --- /dev/null +++ b/src/module/uti/scroll464.uti.json @@ -0,0 +1,146 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 628 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4\nInnate Level: 4\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: None\n\nThe caster gains the following bonuses: 1 extra Hit Point per caster level, Strength is raised to 18 (if their strength is already 18 or higher, it is not raised further), and base attack bonus improves to that of a Fighter of the same level.", + "id": 6139 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Divine Might", + "id": 2687 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 395 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll464" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll464" + } +} diff --git a/src/module/uti/scroll465.uti.json b/src/module/uti/scroll465.uti.json new file mode 100644 index 0000000..815e1b9 --- /dev/null +++ b/src/module/uti/scroll465.uti.json @@ -0,0 +1,177 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 700 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Cleric 4\nInnate Level: 4\nSchool: Evocation\nDescriptor(s): \nComponent(s): Verbal, Somatic\nRange: Personal\nArea of Effect / Target: Caster\nDuration: 1 Round / Level\nAdditional Counter Spells: \nSave: Harmless\nSpell Resistance: None\n\nThe caster gains the following bonuses: 1 extra Hit Point per caster level, Strength is raised to 18 (if their strength is already 18 or higher, it is not raised further), and base attack bonus improves to that of a Fighter of the same level.", + "id": 6139 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Divine Shield", + "id": 2687 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 396 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll465" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll465" + } +} diff --git a/src/module/uti/scroll485.uti.json b/src/module/uti/scroll485.uti.json new file mode 100644 index 0000000..527b667 --- /dev/null +++ b/src/module/uti/scroll485.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Permanent*\nAdditional Counter Spells: Stone to flesh\nSave: Fortitude\nSpell Resistance: Yes\n\nThe subject and all possessions it carries turns into a mindless, inert statue. Only a stone to flesh spell can restore the subject to normal.\n* Under Normal difficulty or easier, the duration is one round per caster level. Higher difficulty settings make the petrification permanent. As well, if the caster rests, any creatures turned to stone by him will be restored, as if the stone to flesh spell had been cast upon them.", + "id": 3045 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Flesh to Stone", + "id": 2687 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 398 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll485" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll485" + } +} diff --git a/src/module/uti/scroll486.uti.json b/src/module/uti/scroll486.uti.json new file mode 100644 index 0000000..5ae14b9 --- /dev/null +++ b/src/module/uti/scroll486.uti.json @@ -0,0 +1,208 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1650 + }, + "BaseItem": { + "type": "int", + "value": 75 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1650 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Caster Level(s): Wizard / Sorcerer 6\nInnate Level: 6\nSchool: Transmutation\nDescriptor(s):\nComponent(s): Verbal, Somatic\nRange: Medium\nArea of Effect / Target: Single\nDuration: Permanent\nAdditional Counter Spells: Flesh to Stone\nSave: None\nSpell Resistance: No\n\nThis spell restores a petrified creature to its normal state, restoring life and goods.", + "id": 3047 + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Stone to Flesh", + "id": 2687 + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 26 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 152 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 399 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scroll486" + }, + "TemplateResRef": { + "type": "resref", + "value": "scroll486" + } +} diff --git a/src/module/uti/scythe001.uti.json b/src/module/uti/scythe001.uti.json new file mode 100644 index 0000000..600b01c --- /dev/null +++ b/src/module/uti/scythe001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 55 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 36 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scythe", + "id": 1549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scythe001" + }, + "TemplateResRef": { + "type": "resref", + "value": "scythe001" + } +} diff --git a/src/module/uti/scythe101.uti.json b/src/module/uti/scythe101.uti.json new file mode 100644 index 0000000..5797d29 --- /dev/null +++ b/src/module/uti/scythe101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 664 + }, + "BaseItem": { + "type": "int", + "value": 55 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2318 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scythe +1", + "id": 1549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scythe101" + }, + "TemplateResRef": { + "type": "resref", + "value": "scythe101" + } +} diff --git a/src/module/uti/scythe201.uti.json b/src/module/uti/scythe201.uti.json new file mode 100644 index 0000000..e16ed7d --- /dev/null +++ b/src/module/uti/scythe201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1064 + }, + "BaseItem": { + "type": "int", + "value": 55 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8318 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scythe +2", + "id": 1549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scythe201" + }, + "TemplateResRef": { + "type": "resref", + "value": "scythe201" + } +} diff --git a/src/module/uti/scythe301.uti.json b/src/module/uti/scythe301.uti.json new file mode 100644 index 0000000..01d9bf0 --- /dev/null +++ b/src/module/uti/scythe301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1462 + }, + "BaseItem": { + "type": "int", + "value": 55 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18318 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scythe +3", + "id": 1549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scythe301" + }, + "TemplateResRef": { + "type": "resref", + "value": "scythe301" + } +} diff --git a/src/module/uti/scythe401.uti.json b/src/module/uti/scythe401.uti.json new file mode 100644 index 0000000..4a96edf --- /dev/null +++ b/src/module/uti/scythe401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1862 + }, + "BaseItem": { + "type": "int", + "value": 55 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32318 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scythe +4", + "id": 1549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scythe401" + }, + "TemplateResRef": { + "type": "resref", + "value": "scythe401" + } +} diff --git a/src/module/uti/scythe501.uti.json b/src/module/uti/scythe501.uti.json new file mode 100644 index 0000000..da4b075 --- /dev/null +++ b/src/module/uti/scythe501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2262 + }, + "BaseItem": { + "type": "int", + "value": 55 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50318 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Scythe +5", + "id": 1549 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "scythe501" + }, + "TemplateResRef": { + "type": "resref", + "value": "scythe501" + } +} diff --git a/src/module/uti/shadowmat.uti.json b/src/module/uti/shadowmat.uti.json new file mode 100644 index 0000000..f77e8ab --- /dev/null +++ b/src/module/uti/shadowmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add +10 Hide skill modifier to the armor.\n\nAdding this ability costs as much as adding +1 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the Invisibility spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shadow Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 77 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "shadowmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "shadowmat" + } +} diff --git a/src/module/uti/shuriken001.uti.json b/src/module/uti/shuriken001.uti.json new file mode 100644 index 0000000..55cb2ab --- /dev/null +++ b/src/module/uti/shuriken001.uti.json @@ -0,0 +1,78 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 59 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shuriken", + "id": 1553 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "shuriken001" + }, + "TemplateResRef": { + "type": "resref", + "value": "shuriken001" + } +} diff --git a/src/module/uti/shuriken101.uti.json b/src/module/uti/shuriken101.uti.json new file mode 100644 index 0000000..f38637a --- /dev/null +++ b/src/module/uti/shuriken101.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 38 + }, + "BaseItem": { + "type": "int", + "value": 59 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 442 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shuriken +1", + "id": 1553 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "shuriken101" + }, + "TemplateResRef": { + "type": "resref", + "value": "shuriken101" + } +} diff --git a/src/module/uti/shuriken201.uti.json b/src/module/uti/shuriken201.uti.json new file mode 100644 index 0000000..1269b32 --- /dev/null +++ b/src/module/uti/shuriken201.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 130 + }, + "BaseItem": { + "type": "int", + "value": 59 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1934 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shuriken +2", + "id": 1553 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "shuriken201" + }, + "TemplateResRef": { + "type": "resref", + "value": "shuriken201" + } +} diff --git a/src/module/uti/shuriken301.uti.json b/src/module/uti/shuriken301.uti.json new file mode 100644 index 0000000..fc1298b --- /dev/null +++ b/src/module/uti/shuriken301.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 282 + }, + "BaseItem": { + "type": "int", + "value": 59 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4487 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shuriken +3", + "id": 1553 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "shuriken301" + }, + "TemplateResRef": { + "type": "resref", + "value": "shuriken301" + } +} diff --git a/src/module/uti/shuriken401.uti.json b/src/module/uti/shuriken401.uti.json new file mode 100644 index 0000000..7d60dc3 --- /dev/null +++ b/src/module/uti/shuriken401.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 494 + }, + "BaseItem": { + "type": "int", + "value": 59 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8099 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shuriken +4", + "id": 1553 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "shuriken401" + }, + "TemplateResRef": { + "type": "resref", + "value": "shuriken401" + } +} diff --git a/src/module/uti/shuriken501.uti.json b/src/module/uti/shuriken501.uti.json new file mode 100644 index 0000000..39dc7a4 --- /dev/null +++ b/src/module/uti/shuriken501.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 766 + }, + "BaseItem": { + "type": "int", + "value": 59 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 12771 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Shuriken +5", + "id": 1553 + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "shuriken501" + }, + "TemplateResRef": { + "type": "resref", + "value": "shuriken501" + } +} diff --git a/src/module/uti/sickle001.uti.json b/src/module/uti/sickle001.uti.json new file mode 100644 index 0000000..283743c --- /dev/null +++ b/src/module/uti/sickle001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 60 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 12 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sickle", + "id": 1554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sickle001" + }, + "TemplateResRef": { + "type": "resref", + "value": "sickle001" + } +} diff --git a/src/module/uti/sickle101.uti.json b/src/module/uti/sickle101.uti.json new file mode 100644 index 0000000..e0a9ec7 --- /dev/null +++ b/src/module/uti/sickle101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 676 + }, + "BaseItem": { + "type": "int", + "value": 60 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sickle +1", + "id": 1554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sickle101" + }, + "TemplateResRef": { + "type": "resref", + "value": "sickle101" + } +} diff --git a/src/module/uti/sickle201.uti.json b/src/module/uti/sickle201.uti.json new file mode 100644 index 0000000..e968fc9 --- /dev/null +++ b/src/module/uti/sickle201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1076 + }, + "BaseItem": { + "type": "int", + "value": 60 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sickle +2", + "id": 1554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sickle201" + }, + "TemplateResRef": { + "type": "resref", + "value": "sickle201" + } +} diff --git a/src/module/uti/sickle301.uti.json b/src/module/uti/sickle301.uti.json new file mode 100644 index 0000000..ee831ef --- /dev/null +++ b/src/module/uti/sickle301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1474 + }, + "BaseItem": { + "type": "int", + "value": 60 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sickle +3", + "id": 1554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sickle301" + }, + "TemplateResRef": { + "type": "resref", + "value": "sickle301" + } +} diff --git a/src/module/uti/sickle401.uti.json b/src/module/uti/sickle401.uti.json new file mode 100644 index 0000000..5eb0a74 --- /dev/null +++ b/src/module/uti/sickle401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1874 + }, + "BaseItem": { + "type": "int", + "value": 60 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sickle +4", + "id": 1554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sickle401" + }, + "TemplateResRef": { + "type": "resref", + "value": "sickle401" + } +} diff --git a/src/module/uti/sickle501.uti.json b/src/module/uti/sickle501.uti.json new file mode 100644 index 0000000..657b24d --- /dev/null +++ b/src/module/uti/sickle501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2274 + }, + "BaseItem": { + "type": "int", + "value": 60 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50306 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sickle +5", + "id": 1554 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sickle501" + }, + "TemplateResRef": { + "type": "resref", + "value": "sickle501" + } +} diff --git a/src/module/uti/silentmat.uti.json b/src/module/uti/silentmat.uti.json new file mode 100644 index 0000000..973b62f --- /dev/null +++ b/src/module/uti/silentmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add +10 Move Silently skill modifier to the armor.\n\nAdding this ability costs as much as adding +1 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the Silent spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Silent Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 89 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "silentmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "silentmat" + } +} diff --git a/src/module/uti/silverravenskin.uti.json b/src/module/uti/silverravenskin.uti.json new file mode 100644 index 0000000..fd2c3e1 --- /dev/null +++ b/src/module/uti/silverravenskin.uti.json @@ -0,0 +1,171 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 73 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 31640 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Silver Raven Skin" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 14 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 7 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 23 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SilverRavenSkin" + }, + "TemplateResRef": { + "type": "resref", + "value": "silverravenskin" + } +} diff --git a/src/module/uti/sleather001.uti.json b/src/module/uti/sleather001.uti.json new file mode 100644 index 0000000..a527dbe --- /dev/null +++ b/src/module/uti/sleather001.uti.json @@ -0,0 +1,174 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 6 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 15 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 7 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Studded Leather Armor", + "id": 12836 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sleather001" + }, + "TemplateResRef": { + "type": "resref", + "value": "sleather001" + } +} diff --git a/src/module/uti/sleather101.uti.json b/src/module/uti/sleather101.uti.json new file mode 100644 index 0000000..39c7010 --- /dev/null +++ b/src/module/uti/sleather101.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 504 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 6 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1175 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 3 + }, + "Leather2Color": { + "type": "byte", + "value": 6 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Studded Leather Armor +1", + "id": 12836 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sleather101" + }, + "TemplateResRef": { + "type": "resref", + "value": "sleather101" + } +} diff --git a/src/module/uti/sleather201.uti.json b/src/module/uti/sleather201.uti.json new file mode 100644 index 0000000..3e6baa8 --- /dev/null +++ b/src/module/uti/sleather201.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1236 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 6 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4175 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 1 + }, + "Leather2Color": { + "type": "byte", + "value": 2 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Studded Leather Armor +2", + "id": 12836 + } + }, + "Metal1Color": { + "type": "byte", + "value": 12 + }, + "Metal2Color": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sleather201" + }, + "TemplateResRef": { + "type": "resref", + "value": "sleather201" + } +} diff --git a/src/module/uti/sleather301.uti.json b/src/module/uti/sleather301.uti.json new file mode 100644 index 0000000..36369b3 --- /dev/null +++ b/src/module/uti/sleather301.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2348 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 43 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 6 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9175 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 5 + }, + "Leather2Color": { + "type": "byte", + "value": 3 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Studded Leather Armor +3", + "id": 12836 + } + }, + "Metal1Color": { + "type": "byte", + "value": 12 + }, + "Metal2Color": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sleather301" + }, + "TemplateResRef": { + "type": "resref", + "value": "sleather301" + } +} diff --git a/src/module/uti/sleather401.uti.json b/src/module/uti/sleather401.uti.json new file mode 100644 index 0000000..ff092c1 --- /dev/null +++ b/src/module/uti/sleather401.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3840 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 44 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 6 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16175 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 2 + }, + "Leather2Color": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Studded Leather Armor +4", + "id": 12836 + } + }, + "Metal1Color": { + "type": "byte", + "value": 12 + }, + "Metal2Color": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sleather401" + }, + "TemplateResRef": { + "type": "resref", + "value": "sleather401" + } +} diff --git a/src/module/uti/sleather501.uti.json b/src/module/uti/sleather501.uti.json new file mode 100644 index 0000000..158dcdf --- /dev/null +++ b/src/module/uti/sleather501.uti.json @@ -0,0 +1,206 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5712 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 8 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 9 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 44 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 6 + }, + "Cloth2Color": { + "type": "byte", + "value": 7 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25175 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 15 + }, + "Leather2Color": { + "type": "byte", + "value": 7 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Studded Leather Armor +5", + "id": 12836 + } + }, + "Metal1Color": { + "type": "byte", + "value": 12 + }, + "Metal2Color": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sleather501" + }, + "TemplateResRef": { + "type": "resref", + "value": "sleather501" + } +} diff --git a/src/module/uti/slickmat.uti.json b/src/module/uti/slickmat.uti.json new file mode 100644 index 0000000..a08ae75 --- /dev/null +++ b/src/module/uti/slickmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add +10 Tumble skill modifier to the armor.\n\nAdding this ability costs as much as adding +1 enchantment to the item.\n\nThis material requires the craftsman to be a level 4 spell caster with the Grease spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Slick Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 77 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "slickmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "slickmat" + } +} diff --git a/src/module/uti/sling001.uti.json b/src/module/uti/sling001.uti.json new file mode 100644 index 0000000..988f618 --- /dev/null +++ b/src/module/uti/sling001.uti.json @@ -0,0 +1,78 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 61 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sling", + "id": 1555 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 62 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sling001" + }, + "TemplateResRef": { + "type": "resref", + "value": "sling001" + } +} diff --git a/src/module/uti/sling101.uti.json b/src/module/uti/sling101.uti.json new file mode 100644 index 0000000..a0c395c --- /dev/null +++ b/src/module/uti/sling101.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1894 + }, + "BaseItem": { + "type": "int", + "value": 61 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sling +1", + "id": 1555 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 62 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sling101" + }, + "TemplateResRef": { + "type": "resref", + "value": "sling101" + } +} diff --git a/src/module/uti/sling201.uti.json b/src/module/uti/sling201.uti.json new file mode 100644 index 0000000..944da26 --- /dev/null +++ b/src/module/uti/sling201.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 6494 + }, + "BaseItem": { + "type": "int", + "value": 61 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sling +2", + "id": 1555 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 62 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sling201" + }, + "TemplateResRef": { + "type": "resref", + "value": "sling201" + } +} diff --git a/src/module/uti/sling301.uti.json b/src/module/uti/sling301.uti.json new file mode 100644 index 0000000..ca55c76 --- /dev/null +++ b/src/module/uti/sling301.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 14094 + }, + "BaseItem": { + "type": "int", + "value": 61 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sling +3", + "id": 1555 + } + }, + "ModelPart1": { + "type": "byte", + "value": 24 + }, + "PaletteID": { + "type": "byte", + "value": 62 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sling301" + }, + "TemplateResRef": { + "type": "resref", + "value": "sling301" + } +} diff --git a/src/module/uti/sling401.uti.json b/src/module/uti/sling401.uti.json new file mode 100644 index 0000000..a631e76 --- /dev/null +++ b/src/module/uti/sling401.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 24694 + }, + "BaseItem": { + "type": "int", + "value": 61 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32300 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sling +4", + "id": 1555 + } + }, + "ModelPart1": { + "type": "byte", + "value": 32 + }, + "PaletteID": { + "type": "byte", + "value": 62 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sling401" + }, + "TemplateResRef": { + "type": "resref", + "value": "sling401" + } +} diff --git a/src/module/uti/sling501.uti.json b/src/module/uti/sling501.uti.json new file mode 100644 index 0000000..c0d700e --- /dev/null +++ b/src/module/uti/sling501.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 32767 + }, + "BaseItem": { + "type": "int", + "value": 61 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 44773 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sling +5", + "id": 1555 + } + }, + "ModelPart1": { + "type": "byte", + "value": 44 + }, + "PaletteID": { + "type": "byte", + "value": 62 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 56 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sling501" + }, + "TemplateResRef": { + "type": "resref", + "value": "sling501" + } +} diff --git a/src/module/uti/sonicmat.uti.json b/src/module/uti/sonicmat.uti.json new file mode 100644 index 0000000..eaa5a4d --- /dev/null +++ b/src/module/uti/sonicmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add -/10 sonic resistance to a suit of armor or shield\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nThis material requires the craftsman to be a level 5 spell caster with the Resist Elements spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sonic Resistant Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 19 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sonicmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "sonicmat" + } +} diff --git a/src/module/uti/sonicmat2.uti.json b/src/module/uti/sonicmat2.uti.json new file mode 100644 index 0000000..ef7dd8c --- /dev/null +++ b/src/module/uti/sonicmat2.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will add 1d6 sonic damage to the weapon.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +1 bonus on the item.\n\nThis material requires a 8th level spell caster, with Sound Burst memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sonic Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 63 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sonicmat2" + }, + "TemplateResRef": { + "type": "resref", + "value": "sonicmat2" + } +} diff --git a/src/module/uti/sonicmat3.uti.json b/src/module/uti/sonicmat3.uti.json new file mode 100644 index 0000000..0918ae6 --- /dev/null +++ b/src/module/uti/sonicmat3.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a melee weapon. This material will add 1d6 sonic damage to the weapon. If the weapon scores a critical hit it will do an additional d10 damage.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 10th level spell caster, with Sound Burst memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Thundering Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 63 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sonicmat3" + }, + "TemplateResRef": { + "type": "resref", + "value": "sonicmat3" + } +} diff --git a/src/module/uti/spear001.uti.json b/src/module/uti/spear001.uti.json new file mode 100644 index 0000000..18b4734 --- /dev/null +++ b/src/module/uti/spear001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spear", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear001" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear001" + } +} diff --git a/src/module/uti/spear101.uti.json b/src/module/uti/spear101.uti.json new file mode 100644 index 0000000..915773c --- /dev/null +++ b/src/module/uti/spear101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 685 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2305 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spear +1", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear101" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear101" + } +} diff --git a/src/module/uti/spear201.uti.json b/src/module/uti/spear201.uti.json new file mode 100644 index 0000000..244380f --- /dev/null +++ b/src/module/uti/spear201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1085 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8305 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spear +2", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear201" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear201" + } +} diff --git a/src/module/uti/spear301.uti.json b/src/module/uti/spear301.uti.json new file mode 100644 index 0000000..d62de3e --- /dev/null +++ b/src/module/uti/spear301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1483 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18305 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spear +3", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear301" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear301" + } +} diff --git a/src/module/uti/spear401.uti.json b/src/module/uti/spear401.uti.json new file mode 100644 index 0000000..ceb03a7 --- /dev/null +++ b/src/module/uti/spear401.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1883 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32305 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spear +4", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 21 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear401" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear401" + } +} diff --git a/src/module/uti/spear501.uti.json b/src/module/uti/spear501.uti.json new file mode 100644 index 0000000..d699eb0 --- /dev/null +++ b/src/module/uti/spear501.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2283 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50305 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spear +5", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear501" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear501" + } +} diff --git a/src/module/uti/spear601.uti.json b/src/module/uti/spear601.uti.json new file mode 100644 index 0000000..e76759c --- /dev/null +++ b/src/module/uti/spear601.uti.json @@ -0,0 +1,120 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 483 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 751 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This item's special power will throw a 5d6 lightning bolt at your target. The javelin is destroyed by this power." + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Javelin of Lightning", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 359 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear601" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear601" + } +} diff --git a/src/module/uti/spear602.uti.json b/src/module/uti/spear602.uti.json new file mode 100644 index 0000000..42209b3 --- /dev/null +++ b/src/module/uti/spear602.uti.json @@ -0,0 +1,151 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 639 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3815 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spear +1 Animal Command", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear602" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear602" + } +} diff --git a/src/module/uti/spear603.uti.json b/src/module/uti/spear603.uti.json new file mode 100644 index 0000000..670281d --- /dev/null +++ b/src/module/uti/spear603.uti.json @@ -0,0 +1,151 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 655 + }, + "BaseItem": { + "type": "int", + "value": 58 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9815 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Trident of Warning", + "id": 1552 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 51 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 25 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 52 + }, + "Subtype": { + "type": "word", + "value": 6 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spear603" + }, + "TemplateResRef": { + "type": "resref", + "value": "spear603" + } +} diff --git a/src/module/uti/speedmat.uti.json b/src/module/uti/speedmat.uti.json new file mode 100644 index 0000000..a981d6b --- /dev/null +++ b/src/module/uti/speedmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will give the wielder of the weapon haste.\n\nThis material requires a 7th level spell caster, with Haste memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Speeding Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 19 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "speedmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "speedmat" + } +} diff --git a/src/module/uti/spell14mat.uti.json b/src/module/uti/spell14mat.uti.json new file mode 100644 index 0000000..9c73a78 --- /dev/null +++ b/src/module/uti/spell14mat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add 14 Spell Resistance to a armor/shield.\n\nAdding this ability costs as much as adding +2 enchantment to the item.\n\nThis material requires the craftsman to be a level 15 spell caster with the Spell Resistance spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance 14 Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 4 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spell14mat" + }, + "TemplateResRef": { + "type": "resref", + "value": "spell14mat" + } +} diff --git a/src/module/uti/spell16mat.uti.json b/src/module/uti/spell16mat.uti.json new file mode 100644 index 0000000..888a916 --- /dev/null +++ b/src/module/uti/spell16mat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add 16 Spell Resistance to a armor/shield.\n\nAdding this ability costs as much as adding +3 enchantment to the item.\n\nThis material requires the craftsman to be a level 15 spell caster with the Spell Resistance spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance 16 Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 35 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spell16mat" + }, + "TemplateResRef": { + "type": "resref", + "value": "spell16mat" + } +} diff --git a/src/module/uti/spell18mat.uti.json b/src/module/uti/spell18mat.uti.json new file mode 100644 index 0000000..757f3a8 --- /dev/null +++ b/src/module/uti/spell18mat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 4 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add 18 Spell Resistance to a armor/shield.\n\nAdding this ability costs as much as adding +4 enchantment to the item.\n\nThis material requires the craftsman to be a level 15 spell caster with the Spell Resistance spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance 18 Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 70 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spell18mat" + }, + "TemplateResRef": { + "type": "resref", + "value": "spell18mat" + } +} diff --git a/src/module/uti/spell20mat.uti.json b/src/module/uti/spell20mat.uti.json new file mode 100644 index 0000000..72ae268 --- /dev/null +++ b/src/module/uti/spell20mat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is used to add 20 Spell Resistance to a armor/shield.\n\nAdding this ability costs as much as adding +5 enchantment to the item.\n\nThis material requires the craftsman to be a level 15 spell caster with the Spell Resistance spell memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance 20 Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 72 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "spell20mat" + }, + "TemplateResRef": { + "type": "resref", + "value": "spell20mat" + } +} diff --git a/src/module/uti/splint001.uti.json b/src/module/uti/splint001.uti.json new file mode 100644 index 0000000..42a7bde --- /dev/null +++ b/src/module/uti/splint001.uti.json @@ -0,0 +1,174 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 30 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 12 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 200 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "Leather1Color": { + "type": "byte", + "value": 12 + }, + "Leather2Color": { + "type": "byte", + "value": 15 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Splint Mail", + "id": 12838 + } + }, + "Metal1Color": { + "type": "byte", + "value": 54 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "splint001" + }, + "TemplateResRef": { + "type": "resref", + "value": "splint001" + } +} diff --git a/src/module/uti/splint101.uti.json b/src/module/uti/splint101.uti.json new file mode 100644 index 0000000..70a954c --- /dev/null +++ b/src/module/uti/splint101.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 494 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 30 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 12 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 12 + }, + "Leather2Color": { + "type": "byte", + "value": 15 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Splint Mail +1", + "id": 12838 + } + }, + "Metal1Color": { + "type": "byte", + "value": 22 + }, + "Metal2Color": { + "type": "byte", + "value": 55 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "splint101" + }, + "TemplateResRef": { + "type": "resref", + "value": "splint101" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + } +} diff --git a/src/module/uti/splint201.uti.json b/src/module/uti/splint201.uti.json new file mode 100644 index 0000000..8e4428f --- /dev/null +++ b/src/module/uti/splint201.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1226 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 30 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 12 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 12 + }, + "Leather2Color": { + "type": "byte", + "value": 15 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Splint Mail +2", + "id": 12838 + } + }, + "Metal1Color": { + "type": "byte", + "value": 22 + }, + "Metal2Color": { + "type": "byte", + "value": 5 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "splint201" + }, + "TemplateResRef": { + "type": "resref", + "value": "splint201" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 2 + } + } + ] + } +} diff --git a/src/module/uti/splint301.uti.json b/src/module/uti/splint301.uti.json new file mode 100644 index 0000000..55856fb --- /dev/null +++ b/src/module/uti/splint301.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2338 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 30 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 12 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 12 + }, + "Leather2Color": { + "type": "byte", + "value": 15 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Splint Mail +3", + "id": 12838 + } + }, + "Metal1Color": { + "type": "byte", + "value": 20 + }, + "Metal2Color": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "splint301" + }, + "TemplateResRef": { + "type": "resref", + "value": "splint301" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 3 + } + } + ] + } +} diff --git a/src/module/uti/splint401.uti.json b/src/module/uti/splint401.uti.json new file mode 100644 index 0000000..1d48c03 --- /dev/null +++ b/src/module/uti/splint401.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3830 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 30 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 12 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 12 + }, + "Leather2Color": { + "type": "byte", + "value": 15 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Splint Mail +4", + "id": 12838 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "splint401" + }, + "TemplateResRef": { + "type": "resref", + "value": "splint401" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 4 + } + } + ] + } +} diff --git a/src/module/uti/splint501.uti.json b/src/module/uti/splint501.uti.json new file mode 100644 index 0000000..f809b47 --- /dev/null +++ b/src/module/uti/splint501.uti.json @@ -0,0 +1,226 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5702 + }, + "ArmorPart_Belt": { + "type": "byte", + "value": 10 + }, + "ArmorPart_LBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_LFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_LShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_LShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_LThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Neck": { + "type": "byte", + "value": 1 + }, + "ArmorPart_Pelvis": { + "type": "byte", + "value": 6 + }, + "ArmorPart_RBicep": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RFArm": { + "type": "byte", + "value": 15 + }, + "ArmorPart_RFoot": { + "type": "byte", + "value": 4 + }, + "ArmorPart_RHand": { + "type": "byte", + "value": 4 + }, + "ArmorPart_Robe": { + "type": "byte", + "value": 0 + }, + "ArmorPart_RShin": { + "type": "byte", + "value": 7 + }, + "ArmorPart_RShoul": { + "type": "byte", + "value": 17 + }, + "ArmorPart_RThigh": { + "type": "byte", + "value": 6 + }, + "ArmorPart_Torso": { + "type": "byte", + "value": 30 + }, + "BaseItem": { + "type": "int", + "value": 16 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Cloth1Color": { + "type": "byte", + "value": 12 + }, + "Cloth2Color": { + "type": "byte", + "value": 13 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25350 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "Leather1Color": { + "type": "byte", + "value": 12 + }, + "Leather2Color": { + "type": "byte", + "value": 15 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Splint Mail +5", + "id": 12838 + } + }, + "Metal1Color": { + "type": "byte", + "value": 0 + }, + "Metal2Color": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 8 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "splint501" + }, + "TemplateResRef": { + "type": "resref", + "value": "splint501" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iBonus" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 5 + } + } + ] + } +} diff --git a/src/module/uti/sshield001.uti.json b/src/module/uti/sshield001.uti.json new file mode 100644 index 0000000..9eb2366 --- /dev/null +++ b/src/module/uti/sshield001.uti.json @@ -0,0 +1,78 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Small Shield", + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sshield001" + }, + "TemplateResRef": { + "type": "resref", + "value": "sshield001" + } +} diff --git a/src/module/uti/sshield101.uti.json b/src/module/uti/sshield101.uti.json new file mode 100644 index 0000000..2677100 --- /dev/null +++ b/src/module/uti/sshield101.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 494 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1159 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Small Shield +1", + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sshield101" + }, + "TemplateResRef": { + "type": "resref", + "value": "sshield101" + } +} diff --git a/src/module/uti/sshield201.uti.json b/src/module/uti/sshield201.uti.json new file mode 100644 index 0000000..0b65591 --- /dev/null +++ b/src/module/uti/sshield201.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1226 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4159 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Small Shield +2", + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sshield201" + }, + "TemplateResRef": { + "type": "resref", + "value": "sshield201" + } +} diff --git a/src/module/uti/sshield301.uti.json b/src/module/uti/sshield301.uti.json new file mode 100644 index 0000000..356a399 --- /dev/null +++ b/src/module/uti/sshield301.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2338 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9159 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Small Shield +3", + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sshield301" + }, + "TemplateResRef": { + "type": "resref", + "value": "sshield301" + } +} diff --git a/src/module/uti/sshield401.uti.json b/src/module/uti/sshield401.uti.json new file mode 100644 index 0000000..3c89582 --- /dev/null +++ b/src/module/uti/sshield401.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3830 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16159 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Small Shield +4", + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sshield401" + }, + "TemplateResRef": { + "type": "resref", + "value": "sshield401" + } +} diff --git a/src/module/uti/sshield501.uti.json b/src/module/uti/sshield501.uti.json new file mode 100644 index 0000000..fb3dcad --- /dev/null +++ b/src/module/uti/sshield501.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5702 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25159 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Small Shield +5", + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sshield501" + }, + "TemplateResRef": { + "type": "resref", + "value": "sshield501" + } +} diff --git a/src/module/uti/sshield601.uti.json b/src/module/uti/sshield601.uti.json new file mode 100644 index 0000000..9b55636 --- /dev/null +++ b/src/module/uti/sshield601.uti.json @@ -0,0 +1,114 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 238 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 257 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This shield has no armor check penalty." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dark Wood Shield", + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sshield601" + }, + "TemplateResRef": { + "type": "resref", + "value": "sshield601" + } +} diff --git a/src/module/uti/sshield602.uti.json b/src/module/uti/sshield602.uti.json new file mode 100644 index 0000000..3e3280b --- /dev/null +++ b/src/module/uti/sshield602.uti.json @@ -0,0 +1,455 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 763 + }, + "BaseItem": { + "type": "int", + "value": 14 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 3153 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Caster's Shield", + "id": 179 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 10 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 240 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 29 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 31 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 28 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "sshield602" + }, + "TemplateResRef": { + "type": "resref", + "value": "sshield602" + } +} diff --git a/src/module/uti/ssword001.uti.json b/src/module/uti/ssword001.uti.json new file mode 100644 index 0000000..5bf8523 --- /dev/null +++ b/src/module/uti/ssword001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 20 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Short Sword", + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 38 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ssword001" + }, + "TemplateResRef": { + "type": "resref", + "value": "ssword001" + } +} diff --git a/src/module/uti/ssword101.uti.json b/src/module/uti/ssword101.uti.json new file mode 100644 index 0000000..3c2fa35 --- /dev/null +++ b/src/module/uti/ssword101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 672 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Short Sword +1", + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 38 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ssword101" + }, + "TemplateResRef": { + "type": "resref", + "value": "ssword101" + } +} diff --git a/src/module/uti/ssword201.uti.json b/src/module/uti/ssword201.uti.json new file mode 100644 index 0000000..a9e386d --- /dev/null +++ b/src/module/uti/ssword201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1072 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Short Sword +2", + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 38 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ssword201" + }, + "TemplateResRef": { + "type": "resref", + "value": "ssword201" + } +} diff --git a/src/module/uti/ssword301.uti.json b/src/module/uti/ssword301.uti.json new file mode 100644 index 0000000..ec3d08f --- /dev/null +++ b/src/module/uti/ssword301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1470 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Short Sword +3", + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 38 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ssword301" + }, + "TemplateResRef": { + "type": "resref", + "value": "ssword301" + } +} diff --git a/src/module/uti/ssword401.uti.json b/src/module/uti/ssword401.uti.json new file mode 100644 index 0000000..3125f61 --- /dev/null +++ b/src/module/uti/ssword401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1870 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Short Sword +4", + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "PaletteID": { + "type": "byte", + "value": 38 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ssword401" + }, + "TemplateResRef": { + "type": "resref", + "value": "ssword401" + } +} diff --git a/src/module/uti/ssword501.uti.json b/src/module/uti/ssword501.uti.json new file mode 100644 index 0000000..9a84b67 --- /dev/null +++ b/src/module/uti/ssword501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2270 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Short Sword +5", + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "PaletteID": { + "type": "byte", + "value": 38 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ssword501" + }, + "TemplateResRef": { + "type": "resref", + "value": "ssword501" + } +} diff --git a/src/module/uti/ssword601.uti.json b/src/module/uti/ssword601.uti.json new file mode 100644 index 0000000..3ba2903 --- /dev/null +++ b/src/module/uti/ssword601.uti.json @@ -0,0 +1,184 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2132 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 15310 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Forged by the elves for the orcs wars." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Orc Bane", + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 54 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 38 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 8 + }, + "Subtype": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 7 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 74 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ssword601" + }, + "TemplateResRef": { + "type": "resref", + "value": "ssword601" + } +} diff --git a/src/module/uti/ssword602.uti.json b/src/module/uti/ssword602.uti.json new file mode 100644 index 0000000..cd328e2 --- /dev/null +++ b/src/module/uti/ssword602.uti.json @@ -0,0 +1,607 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 11408 + }, + "BaseItem": { + "type": "int", + "value": 0 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 170560 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "The true power of this blade is that if you die with it in your hand you are teleported back to town with all your possessions intact.\n\nThis blade has a limited number of uses, and as can be expected you will not know when your luck has run out til too late." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Luck Blade", + "id": 106 + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 38 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 26 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 40 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "ssword602" + }, + "TemplateResRef": { + "type": "resref", + "value": "ssword602" + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "iUses" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": -1 + } + } + ] + } +} diff --git a/src/module/uti/sunrod.uti.json b/src/module/uti/sunrod.uti.json new file mode 100644 index 0000000..833ad78 --- /dev/null +++ b/src/module/uti/sunrod.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 15 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Much brighter than your average torch." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Sunrod" + } + }, + "ModelPart1": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 20 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 18 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 9 + }, + "Param1Value": { + "type": "byte", + "value": 6 + }, + "PropertyName": { + "type": "word", + "value": 44 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Sunrod" + }, + "TemplateResRef": { + "type": "resref", + "value": "sunrod" + } +} diff --git a/src/module/uti/taxe001.uti.json b/src/module/uti/taxe001.uti.json new file mode 100644 index 0000000..969e370 --- /dev/null +++ b/src/module/uti/taxe001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 63 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Throwing Axe", + "id": 1557 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "taxe001" + }, + "TemplateResRef": { + "type": "resref", + "value": "taxe001" + } +} diff --git a/src/module/uti/taxe101.uti.json b/src/module/uti/taxe101.uti.json new file mode 100644 index 0000000..e88b924 --- /dev/null +++ b/src/module/uti/taxe101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 38 + }, + "BaseItem": { + "type": "int", + "value": 63 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 442 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Throwing Axe +1", + "id": 1557 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "taxe101" + }, + "TemplateResRef": { + "type": "resref", + "value": "taxe101" + } +} diff --git a/src/module/uti/taxe201.uti.json b/src/module/uti/taxe201.uti.json new file mode 100644 index 0000000..f1e86c3 --- /dev/null +++ b/src/module/uti/taxe201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 130 + }, + "BaseItem": { + "type": "int", + "value": 63 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1934 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Throwing Axe +2", + "id": 1557 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "taxe201" + }, + "TemplateResRef": { + "type": "resref", + "value": "taxe201" + } +} diff --git a/src/module/uti/taxe301.uti.json b/src/module/uti/taxe301.uti.json new file mode 100644 index 0000000..aab018f --- /dev/null +++ b/src/module/uti/taxe301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 282 + }, + "BaseItem": { + "type": "int", + "value": 63 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4487 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Throwing Axe +3", + "id": 1557 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "taxe301" + }, + "TemplateResRef": { + "type": "resref", + "value": "taxe301" + } +} diff --git a/src/module/uti/taxe401.uti.json b/src/module/uti/taxe401.uti.json new file mode 100644 index 0000000..ef5aa18 --- /dev/null +++ b/src/module/uti/taxe401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 494 + }, + "BaseItem": { + "type": "int", + "value": 63 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8099 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Throwing Axe +4", + "id": 1557 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "taxe401" + }, + "TemplateResRef": { + "type": "resref", + "value": "taxe401" + } +} diff --git a/src/module/uti/taxe501.uti.json b/src/module/uti/taxe501.uti.json new file mode 100644 index 0000000..5e40a2e --- /dev/null +++ b/src/module/uti/taxe501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 766 + }, + "BaseItem": { + "type": "int", + "value": 63 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 12771 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Throwing Axe +5", + "id": 1557 + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 41 + }, + "ModelPart3": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 52 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 50 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "taxe501" + }, + "TemplateResRef": { + "type": "resref", + "value": "taxe501" + } +} diff --git a/src/module/uti/test.uti.json b/src/module/uti/test.uti.json new file mode 100644 index 0000000..faef798 --- /dev/null +++ b/src/module/uti/test.uti.json @@ -0,0 +1,140 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 29 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 0 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "test" + } + }, + "ModelPart1": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 54 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 21 + }, + "CostValue": { + "type": "word", + "value": 10 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 42 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "test" + }, + "TemplateResRef": { + "type": "resref", + "value": "test" + } +} diff --git a/src/module/uti/thievestools.uti.json b/src/module/uti/thievestools.uti.json new file mode 100644 index 0000000..bd482cd --- /dev/null +++ b/src/module/uti/thievestools.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 26 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 30 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Can be used on a trap or lock.\n\nWhen used on a locked object the PC will attempt to pick the lock.\n\nWhen used on a trap the PC will attempt to disarm the trap. Failing that the PC will Flag the trap for their party.\n\nIn the case of a trapped locked object. The trap must be disarmed before the lock can be picked.\n\nNote attempting to pick a lock on a object with a undiscovered trap is hazardous to your health." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Thieves' Tools" + } + }, + "ModelPart1": { + "type": "byte", + "value": 38 + }, + "PaletteID": { + "type": "byte", + "value": 20 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "thievestools" + }, + "TemplateResRef": { + "type": "resref", + "value": "thievestools" + } +} diff --git a/src/module/uti/throwmat.uti.json b/src/module/uti/throwmat.uti.json new file mode 100644 index 0000000..96a9e8c --- /dev/null +++ b/src/module/uti/throwmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material will allow teh weapon to throw bull strength once per day.\n\nThis material requires a 5th level spell caster, with Bull Strength memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Magical Strength Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 45 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "throwmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "throwmat" + } +} diff --git a/src/module/uti/tshield001.uti.json b/src/module/uti/tshield001.uti.json new file mode 100644 index 0000000..8a76e8e --- /dev/null +++ b/src/module/uti/tshield001.uti.json @@ -0,0 +1,78 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 57 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tower Shield", + "id": 1551 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "tshield001" + }, + "TemplateResRef": { + "type": "resref", + "value": "tshield001" + } +} diff --git a/src/module/uti/tshield101.uti.json b/src/module/uti/tshield101.uti.json new file mode 100644 index 0000000..168e9d9 --- /dev/null +++ b/src/module/uti/tshield101.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 424 + }, + "BaseItem": { + "type": "int", + "value": 57 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 1180 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tower Shield +1", + "id": 1551 + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "PaletteID": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "tshield101" + }, + "TemplateResRef": { + "type": "resref", + "value": "tshield101" + } +} diff --git a/src/module/uti/tshield201.uti.json b/src/module/uti/tshield201.uti.json new file mode 100644 index 0000000..771db90 --- /dev/null +++ b/src/module/uti/tshield201.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1156 + }, + "BaseItem": { + "type": "int", + "value": 57 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 4180 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tower Shield +2", + "id": 1551 + } + }, + "ModelPart1": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "tshield201" + }, + "TemplateResRef": { + "type": "resref", + "value": "tshield201" + } +} diff --git a/src/module/uti/tshield301.uti.json b/src/module/uti/tshield301.uti.json new file mode 100644 index 0000000..87a4dd9 --- /dev/null +++ b/src/module/uti/tshield301.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2268 + }, + "BaseItem": { + "type": "int", + "value": 57 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 9180 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tower Shield +3", + "id": 1551 + } + }, + "ModelPart1": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "tshield301" + }, + "TemplateResRef": { + "type": "resref", + "value": "tshield301" + } +} diff --git a/src/module/uti/tshield401.uti.json b/src/module/uti/tshield401.uti.json new file mode 100644 index 0000000..3c20e79 --- /dev/null +++ b/src/module/uti/tshield401.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3760 + }, + "BaseItem": { + "type": "int", + "value": 57 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 16180 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tower Shield +4", + "id": 1551 + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "tshield401" + }, + "TemplateResRef": { + "type": "resref", + "value": "tshield401" + } +} diff --git a/src/module/uti/tshield501.uti.json b/src/module/uti/tshield501.uti.json new file mode 100644 index 0000000..4ba0b48 --- /dev/null +++ b/src/module/uti/tshield501.uti.json @@ -0,0 +1,110 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5632 + }, + "BaseItem": { + "type": "int", + "value": 57 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 25180 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Tower Shield +5", + "id": 1551 + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 12 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 1 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "tshield501" + }, + "TemplateResRef": { + "type": "resref", + "value": "tshield501" + } +} diff --git a/src/module/uti/unholymat.uti.json b/src/module/uti/unholymat.uti.json new file mode 100644 index 0000000..fe7a9c1 --- /dev/null +++ b/src/module/uti/unholymat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a weapon. This material can only be added to a weapon by a evil aligned character.\n\nIt provides +2d6 divine damage to any good creature.\n\nNOTE: Read your journal before applying this effect to a ranged weapon.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 7th level spell caster with the Unholy Aura spell." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Unholy Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 34 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "unholymat" + }, + "TemplateResRef": { + "type": "resref", + "value": "unholymat" + } +} diff --git a/src/module/uti/vorpmat.uti.json b/src/module/uti/vorpmat.uti.json new file mode 100644 index 0000000..758dded --- /dev/null +++ b/src/module/uti/vorpmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 5 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a melee weapon. This material will give the weapon a chance to instantly kill any oppenent hit by it.\n\nThis is considered a +5 bonus on the item.\n\nThis material requires a 18th level spell caster, with either Keen Edge or Finger of Death memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Vorpal Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 81 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "vorpmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "vorpmat" + } +} diff --git a/src/module/uti/wand009.uti.json b/src/module/uti/wand009.uti.json new file mode 100644 index 0000000..f297ef5 --- /dev/null +++ b/src/module/uti/wand009.uti.json @@ -0,0 +1,243 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Bull Strength" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand009" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand009" + } +} diff --git a/src/module/uti/wand010.uti.json b/src/module/uti/wand010.uti.json new file mode 100644 index 0000000..2b60a87 --- /dev/null +++ b/src/module/uti/wand010.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3751 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Burning Hands" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 23 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand010" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand010" + } +} diff --git a/src/module/uti/wand012.uti.json b/src/module/uti/wand012.uti.json new file mode 100644 index 0000000..a2bac3d --- /dev/null +++ b/src/module/uti/wand012.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Ghoul Touch" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 120 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand012" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand012" + } +} diff --git a/src/module/uti/wand015.uti.json b/src/module/uti/wand015.uti.json new file mode 100644 index 0000000..44599c7 --- /dev/null +++ b/src/module/uti/wand015.uti.json @@ -0,0 +1,212 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9749 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 21000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Charm Monster" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 51 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 31 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand015" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand015" + } +} diff --git a/src/module/uti/wand016.uti.json b/src/module/uti/wand016.uti.json new file mode 100644 index 0000000..9aa3087 --- /dev/null +++ b/src/module/uti/wand016.uti.json @@ -0,0 +1,212 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 249 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Charm Person" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand016" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand016" + } +} diff --git a/src/module/uti/wand024.uti.json b/src/module/uti/wand024.uti.json new file mode 100644 index 0000000..e88ab10 --- /dev/null +++ b/src/module/uti/wand024.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Color Spray" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 49 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand024" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand024" + } +} diff --git a/src/module/uti/wand027.uti.json b/src/module/uti/wand027.uti.json new file mode 100644 index 0000000..52a4a8b --- /dev/null +++ b/src/module/uti/wand027.uti.json @@ -0,0 +1,243 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 11251 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Contagion" + } + }, + "ModelPart1": { + "type": "byte", + "value": 51 + }, + "ModelPart2": { + "type": "byte", + "value": 61 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 54 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand027" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand027" + } +} diff --git a/src/module/uti/wand031.uti.json b/src/module/uti/wand031.uti.json new file mode 100644 index 0000000..488b840 --- /dev/null +++ b/src/module/uti/wand031.uti.json @@ -0,0 +1,212 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2999 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 21000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Cure Critical Wounds" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 64 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand031" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand031" + } +} diff --git a/src/module/uti/wand032.uti.json b/src/module/uti/wand032.uti.json new file mode 100644 index 0000000..5a76849 --- /dev/null +++ b/src/module/uti/wand032.uti.json @@ -0,0 +1,274 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1801 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Cure Light Wounds" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 63 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 67 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand032" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand032" + } +} diff --git a/src/module/uti/wand034.uti.json b/src/module/uti/wand034.uti.json new file mode 100644 index 0000000..76a8250 --- /dev/null +++ b/src/module/uti/wand034.uti.json @@ -0,0 +1,274 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3249 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Cure Moderate Wounds" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 69 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand034" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand034" + } +} diff --git a/src/module/uti/wand035.uti.json b/src/module/uti/wand035.uti.json new file mode 100644 index 0000000..f62fce0 --- /dev/null +++ b/src/module/uti/wand035.uti.json @@ -0,0 +1,274 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 8749 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 11250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Cure Serious Wounds" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 72 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand035" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand035" + } +} diff --git a/src/module/uti/wand036.uti.json b/src/module/uti/wand036.uti.json new file mode 100644 index 0000000..947ade3 --- /dev/null +++ b/src/module/uti/wand036.uti.json @@ -0,0 +1,243 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Darkness" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 75 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand036" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand036" + } +} diff --git a/src/module/uti/wand041.uti.json b/src/module/uti/wand041.uti.json new file mode 100644 index 0000000..9800684 --- /dev/null +++ b/src/module/uti/wand041.uti.json @@ -0,0 +1,305 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 11251 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Dispel Magic" + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 53 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 84 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand041" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand041" + } +} diff --git a/src/module/uti/wand054.uti.json b/src/module/uti/wand054.uti.json new file mode 100644 index 0000000..ab5e825 --- /dev/null +++ b/src/module/uti/wand054.uti.json @@ -0,0 +1,212 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9749 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 21000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Fear" + } + }, + "ModelPart1": { + "type": "byte", + "value": 51 + }, + "ModelPart2": { + "type": "byte", + "value": 61 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 103 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand054" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand054" + } +} diff --git a/src/module/uti/wand058.uti.json b/src/module/uti/wand058.uti.json new file mode 100644 index 0000000..bc726b5 --- /dev/null +++ b/src/module/uti/wand058.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 25 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 11251 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Fireball" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand058" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand058" + } +} diff --git a/src/module/uti/wand088.uti.json b/src/module/uti/wand088.uti.json new file mode 100644 index 0000000..f918900 --- /dev/null +++ b/src/module/uti/wand088.uti.json @@ -0,0 +1,212 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 21001 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Improved Invisibility" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 63 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 149 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand088" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand088" + } +} diff --git a/src/module/uti/wand090.uti.json b/src/module/uti/wand090.uti.json new file mode 100644 index 0000000..5ede5af --- /dev/null +++ b/src/module/uti/wand090.uti.json @@ -0,0 +1,212 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Invisibility" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 63 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 151 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand090" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand090" + } +} diff --git a/src/module/uti/wand093.uti.json b/src/module/uti/wand093.uti.json new file mode 100644 index 0000000..6ba3153 --- /dev/null +++ b/src/module/uti/wand093.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Knock" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 154 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand093" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand093" + } +} diff --git a/src/module/uti/wand100.uti.json b/src/module/uti/wand100.uti.json new file mode 100644 index 0000000..fdfaf63 --- /dev/null +++ b/src/module/uti/wand100.uti.json @@ -0,0 +1,274 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1876 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Light" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 163 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand100" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand100" + } +} diff --git a/src/module/uti/wand101.uti.json b/src/module/uti/wand101.uti.json new file mode 100644 index 0000000..ba08f2b --- /dev/null +++ b/src/module/uti/wand101.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 25 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 11251 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Lightning Bolt" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 164 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand101" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand101" + } +} diff --git a/src/module/uti/wand107.uti.json b/src/module/uti/wand107.uti.json new file mode 100644 index 0000000..2bd12c7 --- /dev/null +++ b/src/module/uti/wand107.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 25 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Magic Missile" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 172 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand107" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand107" + } +} diff --git a/src/module/uti/wand115.uti.json b/src/module/uti/wand115.uti.json new file mode 100644 index 0000000..a19c258 --- /dev/null +++ b/src/module/uti/wand115.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Melf's Acid Arrows" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 184 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand115" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand115" + } +} diff --git a/src/module/uti/wand126.uti.json b/src/module/uti/wand126.uti.json new file mode 100644 index 0000000..adcf1d0 --- /dev/null +++ b/src/module/uti/wand126.uti.json @@ -0,0 +1,274 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9749 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 21000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Neutralize Poison" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 62 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 204 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand126" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand126" + } +} diff --git a/src/module/uti/wand129.uti.json b/src/module/uti/wand129.uti.json new file mode 100644 index 0000000..4cade52 --- /dev/null +++ b/src/module/uti/wand129.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 9749 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 21000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Poison" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 23 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 207 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand129" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand129" + } +} diff --git a/src/module/uti/wand130.uti.json b/src/module/uti/wand130.uti.json new file mode 100644 index 0000000..f3173db --- /dev/null +++ b/src/module/uti/wand130.uti.json @@ -0,0 +1,212 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 21001 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Polymorph Self" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 13 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 208 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand130" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand130" + } +} diff --git a/src/module/uti/wand143.uti.json b/src/module/uti/wand143.uti.json new file mode 100644 index 0000000..5ba271b --- /dev/null +++ b/src/module/uti/wand143.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 19499 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 21000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Enfeeblement" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 61 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 227 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand143" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand143" + } +} diff --git a/src/module/uti/wand152.uti.json b/src/module/uti/wand152.uti.json new file mode 100644 index 0000000..d147ca1 --- /dev/null +++ b/src/module/uti/wand152.uti.json @@ -0,0 +1,150 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 99 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 21100 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Restoration" + } + }, + "ModelPart1": { + "type": "byte", + "value": 13 + }, + "ModelPart2": { + "type": "byte", + "value": 52 + }, + "ModelPart3": { + "type": "byte", + "value": 52 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 238 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand152" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand152" + } +} diff --git a/src/module/uti/wand156.uti.json b/src/module/uti/wand156.uti.json new file mode 100644 index 0000000..dacebd2 --- /dev/null +++ b/src/module/uti/wand156.uti.json @@ -0,0 +1,150 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2249 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 13500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Searing Light" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 32 + }, + "ModelPart3": { + "type": "byte", + "value": 42 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 242 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand156" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand156" + } +} diff --git a/src/module/uti/wand163.uti.json b/src/module/uti/wand163.uti.json new file mode 100644 index 0000000..079cb8a --- /dev/null +++ b/src/module/uti/wand163.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Silence" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 249 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand163" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand163" + } +} diff --git a/src/module/uti/wand166.uti.json b/src/module/uti/wand166.uti.json new file mode 100644 index 0000000..24dc9f8 --- /dev/null +++ b/src/module/uti/wand166.uti.json @@ -0,0 +1,212 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 11251 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Slow" + } + }, + "ModelPart1": { + "type": "byte", + "value": 43 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 63 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 253 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand166" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand166" + } +} diff --git a/src/module/uti/wand172.uti.json b/src/module/uti/wand172.uti.json new file mode 100644 index 0000000..215651e --- /dev/null +++ b/src/module/uti/wand172.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 16699 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 37700 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Stone Skin" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 260 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand172" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand172" + } +} diff --git a/src/module/uti/wand174.uti.json b/src/module/uti/wand174.uti.json new file mode 100644 index 0000000..8990ae8 --- /dev/null +++ b/src/module/uti/wand174.uti.json @@ -0,0 +1,305 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 1501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Summon Monster I" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 262 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand174" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand174" + } +} diff --git a/src/module/uti/wand175.uti.json b/src/module/uti/wand175.uti.json new file mode 100644 index 0000000..79e2908 --- /dev/null +++ b/src/module/uti/wand175.uti.json @@ -0,0 +1,305 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Summon Monster II" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 264 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand175" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand175" + } +} diff --git a/src/module/uti/wand176.uti.json b/src/module/uti/wand176.uti.json new file mode 100644 index 0000000..2b59e26 --- /dev/null +++ b/src/module/uti/wand176.uti.json @@ -0,0 +1,305 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 11251 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Summon Monster III" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 265 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand176" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand176" + } +} diff --git a/src/module/uti/wand177.uti.json b/src/module/uti/wand177.uti.json new file mode 100644 index 0000000..e66d15e --- /dev/null +++ b/src/module/uti/wand177.uti.json @@ -0,0 +1,305 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 21001 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Summon Monster IV" + } + }, + "ModelPart1": { + "type": "byte", + "value": 63 + }, + "ModelPart2": { + "type": "byte", + "value": 31 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 266 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand177" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand177" + } +} diff --git a/src/module/uti/wand191.uti.json b/src/module/uti/wand191.uti.json new file mode 100644 index 0000000..d3635cd --- /dev/null +++ b/src/module/uti/wand191.uti.json @@ -0,0 +1,212 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 27001 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Fire" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 52 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 280 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand191" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand191" + } +} diff --git a/src/module/uti/wand192.uti.json b/src/module/uti/wand192.uti.json new file mode 100644 index 0000000..9917a71 --- /dev/null +++ b/src/module/uti/wand192.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Web" + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 13 + }, + "ModelPart3": { + "type": "byte", + "value": 33 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 281 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand192" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand192" + } +} diff --git a/src/module/uti/wand2016.uti.json b/src/module/uti/wand2016.uti.json new file mode 100644 index 0000000..d161652 --- /dev/null +++ b/src/module/uti/wand2016.uti.json @@ -0,0 +1,212 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 10249 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 11250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Charm Person" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 22 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 34 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand2016" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand2016" + } +} diff --git a/src/module/uti/wand2058.uti.json b/src/module/uti/wand2058.uti.json new file mode 100644 index 0000000..39e41dc --- /dev/null +++ b/src/module/uti/wand2058.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2249 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 13500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Fireball" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 108 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand2058" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand2058" + } +} diff --git a/src/module/uti/wand2101.uti.json b/src/module/uti/wand2101.uti.json new file mode 100644 index 0000000..32145d5 --- /dev/null +++ b/src/module/uti/wand2101.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2249 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 13500 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Lightning Bolt" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 164 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand2101" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand2101" + } +} diff --git a/src/module/uti/wand2107.uti.json b/src/module/uti/wand2107.uti.json new file mode 100644 index 0000000..6d3de88 --- /dev/null +++ b/src/module/uti/wand2107.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1250 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Magic Missile" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 172 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand2107" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand2107" + } +} diff --git a/src/module/uti/wand3058.uti.json b/src/module/uti/wand3058.uti.json new file mode 100644 index 0000000..8aa2f1b --- /dev/null +++ b/src/module/uti/wand3058.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1124 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 18000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Fireball" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 109 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand3058" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand3058" + } +} diff --git a/src/module/uti/wand3101.uti.json b/src/module/uti/wand3101.uti.json new file mode 100644 index 0000000..2e660d0 --- /dev/null +++ b/src/module/uti/wand3101.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1124 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 18000 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Lightning Bolt" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 165 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand3101" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand3101" + } +} diff --git a/src/module/uti/wand3107.uti.json b/src/module/uti/wand3107.uti.json new file mode 100644 index 0000000..6e7afbf --- /dev/null +++ b/src/module/uti/wand3107.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1999 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 3750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Magic Missile" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 173 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand3107" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand3107" + } +} diff --git a/src/module/uti/wand368.uti.json b/src/module/uti/wand368.uti.json new file mode 100644 index 0000000..9d5041c --- /dev/null +++ b/src/module/uti/wand368.uti.json @@ -0,0 +1,212 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 33751 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Ice Storm" + } + }, + "ModelPart1": { + "type": "byte", + "value": 33 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 53 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 310 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand368" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand368" + } +} diff --git a/src/module/uti/wand4058.uti.json b/src/module/uti/wand4058.uti.json new file mode 100644 index 0000000..e60ff1c --- /dev/null +++ b/src/module/uti/wand4058.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 22501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Fireball" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 109 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand4058" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand4058" + } +} diff --git a/src/module/uti/wand4101.uti.json b/src/module/uti/wand4101.uti.json new file mode 100644 index 0000000..1955778 --- /dev/null +++ b/src/module/uti/wand4101.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 22501 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Lightning Bolt" + } + }, + "ModelPart1": { + "type": "byte", + "value": 62 + }, + "ModelPart2": { + "type": "byte", + "value": 22 + }, + "ModelPart3": { + "type": "byte", + "value": 43 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 165 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand4101" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand4101" + } +} diff --git a/src/module/uti/wand4107.uti.json b/src/module/uti/wand4107.uti.json new file mode 100644 index 0000000..3efa181 --- /dev/null +++ b/src/module/uti/wand4107.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1499 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 25 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 5250 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Magic Missile" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 174 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand4107" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand4107" + } +} diff --git a/src/module/uti/wand435.uti.json b/src/module/uti/wand435.uti.json new file mode 100644 index 0000000..508e7d1 --- /dev/null +++ b/src/module/uti/wand435.uti.json @@ -0,0 +1,150 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 21001 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Inflict Critical Wounds" + } + }, + "ModelPart1": { + "type": "byte", + "value": 12 + }, + "ModelPart2": { + "type": "byte", + "value": 12 + }, + "ModelPart3": { + "type": "byte", + "value": 62 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 366 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 2 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand435" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand435" + } +} diff --git a/src/module/uti/wand5107.uti.json b/src/module/uti/wand5107.uti.json new file mode 100644 index 0000000..174ddfd --- /dev/null +++ b/src/module/uti/wand5107.uti.json @@ -0,0 +1,181 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2999 + }, + "BaseItem": { + "type": "int", + "value": 46 + }, + "Charges": { + "type": "byte", + "value": 50 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 6750 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wand of Magic Missile" + } + }, + "ModelPart1": { + "type": "byte", + "value": 22 + }, + "ModelPart2": { + "type": "byte", + "value": 42 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 50 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 6 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 174 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 63 + }, + "Subtype": { + "type": "word", + "value": 10 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wand5107" + }, + "TemplateResRef": { + "type": "resref", + "value": "wand5107" + } +} diff --git a/src/module/uti/weeksrations.uti.json b/src/module/uti/weeksrations.uti.json new file mode 100644 index 0000000..44f7f4f --- /dev/null +++ b/src/module/uti/weeksrations.uti.json @@ -0,0 +1,113 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 3 + }, + "BaseItem": { + "type": "int", + "value": 79 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 4 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "Once aquired this item will automatically break down into 7 Rations." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Weeks rations" + } + }, + "ModelPart1": { + "type": "byte", + "value": 23 + }, + "PaletteID": { + "type": "byte", + "value": 20 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 11 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 81 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "weeksrations" + }, + "TemplateResRef": { + "type": "resref", + "value": "weeksrations" + } +} diff --git a/src/module/uti/whammer001.uti.json b/src/module/uti/whammer001.uti.json new file mode 100644 index 0000000..80731a0 --- /dev/null +++ b/src/module/uti/whammer001.uti.json @@ -0,0 +1,86 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 24 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Warhammer", + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whammer001" + }, + "TemplateResRef": { + "type": "resref", + "value": "whammer001" + } +} diff --git a/src/module/uti/whammer101.uti.json b/src/module/uti/whammer101.uti.json new file mode 100644 index 0000000..36b89fa --- /dev/null +++ b/src/module/uti/whammer101.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 670 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 2312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Warhammer +1", + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 21 + }, + "PaletteID": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whammer101" + }, + "TemplateResRef": { + "type": "resref", + "value": "whammer101" + } +} diff --git a/src/module/uti/whammer201.uti.json b/src/module/uti/whammer201.uti.json new file mode 100644 index 0000000..24f42e6 --- /dev/null +++ b/src/module/uti/whammer201.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1070 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 8312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Warhammer +2", + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 31 + }, + "PaletteID": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whammer201" + }, + "TemplateResRef": { + "type": "resref", + "value": "whammer201" + } +} diff --git a/src/module/uti/whammer301.uti.json b/src/module/uti/whammer301.uti.json new file mode 100644 index 0000000..4c1634c --- /dev/null +++ b/src/module/uti/whammer301.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1468 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 18312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Warhammer +3", + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 41 + }, + "PaletteID": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whammer301" + }, + "TemplateResRef": { + "type": "resref", + "value": "whammer301" + } +} diff --git a/src/module/uti/whammer401.uti.json b/src/module/uti/whammer401.uti.json new file mode 100644 index 0000000..82a64f5 --- /dev/null +++ b/src/module/uti/whammer401.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1868 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 32312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Warhammer +4", + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 51 + }, + "PaletteID": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whammer401" + }, + "TemplateResRef": { + "type": "resref", + "value": "whammer401" + } +} diff --git a/src/module/uti/whammer501.uti.json b/src/module/uti/whammer501.uti.json new file mode 100644 index 0000000..be4cb81 --- /dev/null +++ b/src/module/uti/whammer501.uti.json @@ -0,0 +1,118 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2268 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 50312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Warhammer +5", + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 61 + }, + "PaletteID": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whammer501" + }, + "TemplateResRef": { + "type": "resref", + "value": "whammer501" + } +} diff --git a/src/module/uti/whammer601.uti.json b/src/module/uti/whammer601.uti.json new file mode 100644 index 0000000..79ae885 --- /dev/null +++ b/src/module/uti/whammer601.uti.json @@ -0,0 +1,215 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 21788 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 60312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In the hands of a dwarf this becomes a truely formidable weapon." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Thrower", + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 52 + }, + "PaletteID": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 0 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 18 + }, + "Subtype": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 26 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whammer601" + }, + "TemplateResRef": { + "type": "resref", + "value": "whammer601" + } +} diff --git a/src/module/uti/whammer602.uti.json b/src/module/uti/whammer602.uti.json new file mode 100644 index 0000000..43868fc --- /dev/null +++ b/src/module/uti/whammer602.uti.json @@ -0,0 +1,277 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2232 + }, + "BaseItem": { + "type": "int", + "value": 5 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "1" + }, + "Cost": { + "type": "dword", + "value": 60312 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "In the hands of a dwarf this becomes a truely formidable weapon." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Dwarven Thrower", + "id": 178 + } + }, + "ModelPart1": { + "type": "byte", + "value": 42 + }, + "ModelPart2": { + "type": "byte", + "value": 21 + }, + "ModelPart3": { + "type": "byte", + "value": 52 + }, + "PaletteID": { + "type": "byte", + "value": 41 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 10 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 11 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 3 + }, + "CostValue": { + "type": "word", + "value": 13 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 15 + }, + "Subtype": { + "type": "word", + "value": 329 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 4 + }, + "CostValue": { + "type": "word", + "value": 8 + }, + "Param1": { + "type": "byte", + "value": 0 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 18 + }, + "Subtype": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 26 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 64 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whammer602" + }, + "TemplateResRef": { + "type": "resref", + "value": "whammer602" + } +} diff --git a/src/module/uti/whip001.uti.json b/src/module/uti/whip001.uti.json new file mode 100644 index 0000000..b9b810e --- /dev/null +++ b/src/module/uti/whip001.uti.json @@ -0,0 +1,119 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 0 + }, + "BaseItem": { + "type": "int", + "value": 111 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Whip" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 37 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whip001" + }, + "TemplateResRef": { + "type": "resref", + "value": "whip001" + } +} diff --git a/src/module/uti/whip101.uti.json b/src/module/uti/whip101.uti.json new file mode 100644 index 0000000..56fe105 --- /dev/null +++ b/src/module/uti/whip101.uti.json @@ -0,0 +1,150 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 643 + }, + "BaseItem": { + "type": "int", + "value": 111 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Whip +1" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 1 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whip101" + }, + "TemplateResRef": { + "type": "resref", + "value": "whip101" + } +} diff --git a/src/module/uti/whip201.uti.json b/src/module/uti/whip201.uti.json new file mode 100644 index 0000000..d295fec --- /dev/null +++ b/src/module/uti/whip201.uti.json @@ -0,0 +1,150 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1003 + }, + "BaseItem": { + "type": "int", + "value": 111 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 8301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Whip +2" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 2 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whip201" + }, + "TemplateResRef": { + "type": "resref", + "value": "whip201" + } +} diff --git a/src/module/uti/whip301.uti.json b/src/module/uti/whip301.uti.json new file mode 100644 index 0000000..744e91f --- /dev/null +++ b/src/module/uti/whip301.uti.json @@ -0,0 +1,150 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1363 + }, + "BaseItem": { + "type": "int", + "value": 111 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 18301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Whip +3" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 3 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whip301" + }, + "TemplateResRef": { + "type": "resref", + "value": "whip301" + } +} diff --git a/src/module/uti/whip401.uti.json b/src/module/uti/whip401.uti.json new file mode 100644 index 0000000..f1a52b6 --- /dev/null +++ b/src/module/uti/whip401.uti.json @@ -0,0 +1,150 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 1723 + }, + "BaseItem": { + "type": "int", + "value": 111 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 32301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Whip +4" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 4 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whip401" + }, + "TemplateResRef": { + "type": "resref", + "value": "whip401" + } +} diff --git a/src/module/uti/whip501.uti.json b/src/module/uti/whip501.uti.json new file mode 100644 index 0000000..18947f8 --- /dev/null +++ b/src/module/uti/whip501.uti.json @@ -0,0 +1,150 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2083 + }, + "BaseItem": { + "type": "int", + "value": 111 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 50301 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": {} + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Whip +5" + } + }, + "ModelPart1": { + "type": "byte", + "value": 11 + }, + "ModelPart2": { + "type": "byte", + "value": 11 + }, + "ModelPart3": { + "type": "byte", + "value": 11 + }, + "PaletteID": { + "type": "byte", + "value": 47 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 0 + }, + "CostValue": { + "type": "word", + "value": 0 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 12 + }, + "Subtype": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 0, + "ChanceAppear": { + "type": "byte", + "value": 100 + }, + "CostTable": { + "type": "byte", + "value": 2 + }, + "CostValue": { + "type": "word", + "value": 5 + }, + "Param1": { + "type": "byte", + "value": 255 + }, + "Param1Value": { + "type": "byte", + "value": 0 + }, + "PropertyName": { + "type": "word", + "value": 6 + }, + "Subtype": { + "type": "word", + "value": 0 + } + } + ] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "whip501" + }, + "TemplateResRef": { + "type": "resref", + "value": "whip501" + } +} diff --git a/src/module/uti/wmarmormat.uti.json b/src/module/uti/wmarmormat.uti.json new file mode 100644 index 0000000..92a14a2 --- /dev/null +++ b/src/module/uti/wmarmormat.uti.json @@ -0,0 +1,79 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 50 + }, + "BaseItem": { + "type": "int", + "value": 109 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 50 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material can be combined with a suit of armor / shield in a forge to add a +1 skill bonus to all skills lowered by Armor Check Penalties, effectively lowering the armor check penalty by 1.\n\nA suit of armor / shield must be master worked before it can be enchanted.\n\nMasterworking is a Craft Armor DC 20 check, failure results in the loss of the material." + } + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Master Work Armor Materials" + } + }, + "ModelPart1": { + "type": "byte", + "value": 105 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "wmarmormat" + }, + "TemplateResRef": { + "type": "resref", + "value": "wmarmormat" + } +} diff --git a/src/module/uti/woundmat.uti.json b/src/module/uti/woundmat.uti.json new file mode 100644 index 0000000..f9c2c11 --- /dev/null +++ b/src/module/uti/woundmat.uti.json @@ -0,0 +1,81 @@ +{ + "__data_type": "UTI ", + "AddCost": { + "type": "dword", + "value": 2 + }, + "BaseItem": { + "type": "int", + "value": 110 + }, + "Charges": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cost": { + "type": "dword", + "value": 2 + }, + "Cursed": { + "type": "byte", + "value": 0 + }, + "DescIdentified": { + "type": "cexolocstring", + "value": { + "0": "This material is added to a melee weapon. This material can cause a victim to bleed to death, 1 hit point per round.\n\nThis is considered a +2 bonus on the item.\n\nThis material requires a 10th level spell caster, with Mordenkainen's Sword memorized." + } + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "Identified": { + "type": "byte", + "value": 1 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Wounding Material" + } + }, + "ModelPart1": { + "type": "byte", + "value": 87 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PropertiesList": { + "type": "list", + "value": [] + }, + "StackSize": { + "type": "word", + "value": 1 + }, + "Stolen": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "woundmat" + }, + "TemplateResRef": { + "type": "resref", + "value": "woundmat" + } +} diff --git a/src/module/utm/crafting.utm.json b/src/module/utm/crafting.utm.json new file mode 100644 index 0000000..b142f34 --- /dev/null +++ b/src/module/utm/crafting.utm.json @@ -0,0 +1,1206 @@ +{ + "__data_type": "UTM ", + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 25 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "ID": { + "type": "byte", + "value": 5 + }, + "IdentifyPrice": { + "type": "int", + "value": -1 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Crafting" + } + }, + "MarkDown": { + "type": "int", + "value": 50 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "MaxBuyPrice": { + "type": "int", + "value": -1 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "OnStoreClosed": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "crafting" + }, + "StoreGold": { + "type": "int", + "value": -1 + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_cfm_bscrl" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_cfm_pbottl" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + } + }, + { + "__struct_id": 3, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_cfm_wand" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + } + }, + { + "__struct_id": 1, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec23" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec00" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec02" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec25" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec48" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec44" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec35" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 7, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec37" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 8, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec29" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 9, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec33" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 10, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec26" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 11, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec31" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 12, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec20" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 13, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec34" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 14, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec36" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 15, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec28" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 16, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec39" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 17, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec41" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 18, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyec32" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 19, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel23" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 20, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel00" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 21, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel25" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 22, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel02" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 23, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel48" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 24, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel44" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 25, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel35" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 26, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel37" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 27, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel29" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 28, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel33" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 29, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel26" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 30, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel31" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 31, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel20" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 32, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel34" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 33, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel36" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 34, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel28" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 35, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel39" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 36, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel41" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 37, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyel32" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 38, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem03" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 39, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem00" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 40, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem31" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 41, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem16" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 42, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem40" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 43, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem28" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 44, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem24" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 45, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem32" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 46, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem18" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 47, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem10" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 48, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem42" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 49, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem02" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 50, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem25" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 51, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem37" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 52, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem08" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 53, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem36" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 54, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "x2_it_dyem48" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + } + ] + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "Crafting" + }, + "WillNotBuy": { + "type": "list", + "value": [] + }, + "WillOnlyBuy": { + "type": "list", + "value": [] + } +} diff --git a/src/module/utm/junkstore.utm.json b/src/module/utm/junkstore.utm.json new file mode 100644 index 0000000..cfcc368 --- /dev/null +++ b/src/module/utm/junkstore.utm.json @@ -0,0 +1,65 @@ +{ + "__data_type": "UTM ", + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 25 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "ID": { + "type": "byte", + "value": 5 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "MerchantJunk_Store" + } + }, + "MarkDown": { + "type": "int", + "value": 50 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "junkstore" + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2 + }, + { + "__struct_id": 3 + }, + { + "__struct_id": 1 + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "MerchantJunk_Store" + } +} diff --git a/src/module/utm/merchant2_store.utm.json b/src/module/utm/merchant2_store.utm.json new file mode 100644 index 0000000..ad04114 --- /dev/null +++ b/src/module/utm/merchant2_store.utm.json @@ -0,0 +1,5110 @@ +{ + "__data_type": "UTM ", + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 25 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "ID": { + "type": "byte", + "value": 5 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Merchant2_Store" + } + }, + "MarkDown": { + "type": "int", + "value": 50 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "merchant2_store" + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "banded101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "banded201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "banded301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "banded401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "banded501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "fplate101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 6, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "fplate201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 7, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "fplate301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 8, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "fplate401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 9, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "fplate501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 10, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hplate101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 11, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hplate201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 12, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hplate301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 13, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hplate401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 14, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hplate501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 15, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "splint101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 16, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "splint201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 17, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "splint301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 18, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "splint401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 19, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "splint501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 20, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "chains101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 21, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "chains201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 22, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "chains301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 23, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "chains401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 24, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "chains501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 25, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "leather101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 26, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "leather201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 27, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "leather301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 28, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "leather401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 29, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "leather501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 30, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "padded101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 31, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "padded201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 32, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "padded301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 33, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "padded401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 34, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "padded501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 35, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sleather101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 36, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sleather201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 37, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sleather301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 38, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sleather401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 39, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sleather501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 40, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "breast101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 26 + } + }, + { + "__struct_id": 41, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "breast201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 26 + } + }, + { + "__struct_id": 42, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "breast301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 26 + } + }, + { + "__struct_id": 43, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "breast401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 26 + } + }, + { + "__struct_id": 44, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "breast501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 26 + } + }, + { + "__struct_id": 45, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "chain101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + } + }, + { + "__struct_id": 46, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "chain201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + } + }, + { + "__struct_id": 47, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "chain301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + } + }, + { + "__struct_id": 48, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "chain401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + } + }, + { + "__struct_id": 49, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "chain501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + } + }, + { + "__struct_id": 50, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hide101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 51, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hide201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 52, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hide301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 53, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hide401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 54, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hide501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 33 + } + }, + { + "__struct_id": 55, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scale101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + } + }, + { + "__struct_id": 56, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scale201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + } + }, + { + "__struct_id": 57, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scale301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + } + }, + { + "__struct_id": 58, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scale401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + } + }, + { + "__struct_id": 59, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scale501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + } + }, + { + "__struct_id": 60, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lshield101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 61, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lshield201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 62, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lshield301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 63, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lshield401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 64, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lshield501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 65, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sshield101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 43 + } + }, + { + "__struct_id": 66, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sshield201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 43 + } + }, + { + "__struct_id": 67, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sshield301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 43 + } + }, + { + "__struct_id": 68, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sshield401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 43 + } + }, + { + "__struct_id": 69, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sshield501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 43 + } + }, + { + "__struct_id": 70, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "tshield101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 71, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "tshield201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 72, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "tshield301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 73, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "tshield401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 45 + } + }, + { + "__struct_id": 74, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "tshield501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 45 + } + } + ] + } + }, + { + "__struct_id": 4, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "arrow101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "arrow201" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "arrow301" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "arrow401" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "arrow501" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bolt101" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bolt201" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 7, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bolt301" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 8, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bolt401" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 9, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bolt501" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 10, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bullet101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 11, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bullet201" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 12, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bullet301" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 13, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bullet401" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 14, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bullet501" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 15, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "gaxe101" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 16, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "gaxe201" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 17, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "gaxe301" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 18, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "gaxe401" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 19, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "gaxe501" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 20, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "haxe101" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 21, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "haxe201" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 22, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "haxe301" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 23, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "haxe401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 24, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "haxe501" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 25, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "baxe101" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 26, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "baxe201" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 27, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "baxe301" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 28, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "baxe401" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 29, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "baxe501" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 30, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bsword101" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 31, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bsword201" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 32, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bsword301" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 33, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bsword401" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 34, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "bsword501" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 35, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dagger101" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 36, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dagger201" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 37, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dagger301" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 38, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dagger401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 39, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dagger501" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 40, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "gsword101" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 41, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "gsword201" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 42, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "gsword301" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 43, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "gsword401" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 44, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "gsword501" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 45, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lsword101" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 46, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lsword201" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 47, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lsword301" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 48, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lsword401" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 49, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lsword501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 50, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "rapier101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + } + }, + { + "__struct_id": 51, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "rapier201" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + } + }, + { + "__struct_id": 52, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "rapier301" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + } + }, + { + "__struct_id": 53, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "rapier401" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + } + }, + { + "__struct_id": 54, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "rapier501" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 55, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scimitar101" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 56, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scimitar201" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + } + }, + { + "__struct_id": 57, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scimitar301" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + } + }, + { + "__struct_id": 58, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scimitar401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + } + }, + { + "__struct_id": 59, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scimitar501" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + } + }, + { + "__struct_id": 60, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ssword101" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + } + }, + { + "__struct_id": 61, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ssword201" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 25 + } + }, + { + "__struct_id": 62, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ssword301" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 25 + } + }, + { + "__struct_id": 63, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ssword401" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 25 + } + }, + { + "__struct_id": 64, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ssword501" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 25 + } + }, + { + "__struct_id": 65, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "club101" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 26 + } + }, + { + "__struct_id": 66, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "club201" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 26 + } + }, + { + "__struct_id": 67, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "club301" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 27 + } + }, + { + "__struct_id": 68, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "club401" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 27 + } + }, + { + "__struct_id": 69, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "club501" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 27 + } + }, + { + "__struct_id": 70, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hflail101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + } + }, + { + "__struct_id": 71, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hflail201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + } + }, + { + "__struct_id": 72, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hflail301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + } + }, + { + "__struct_id": 73, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hflail401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + } + }, + { + "__struct_id": 74, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hflail501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 30 + } + }, + { + "__struct_id": 75, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lflail101" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 27 + } + }, + { + "__struct_id": 76, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lflail201" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 27 + } + }, + { + "__struct_id": 77, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lflail301" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 27 + } + }, + { + "__struct_id": 78, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lflail401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 27 + } + }, + { + "__struct_id": 79, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lflail501" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 27 + } + }, + { + "__struct_id": 80, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lhammer101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 34 + } + }, + { + "__struct_id": 81, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lhammer201" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 34 + } + }, + { + "__struct_id": 82, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lhammer301" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 34 + } + }, + { + "__struct_id": 83, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lhammer401" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 34 + } + }, + { + "__struct_id": 84, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lhammer501" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 34 + } + }, + { + "__struct_id": 85, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "whammer101" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 34 + } + }, + { + "__struct_id": 86, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "whammer201" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 34 + } + }, + { + "__struct_id": 87, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "whammer301" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + } + }, + { + "__struct_id": 88, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "whammer401" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + } + }, + { + "__struct_id": 89, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "whammer501" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 90, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "mace101" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 34 + } + }, + { + "__struct_id": 91, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "mace201" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 36 + } + }, + { + "__struct_id": 92, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "mace301" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 93, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "mace401" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 94, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "mace501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 37 + } + }, + { + "__struct_id": 95, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "mstar101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 96, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "mstar201" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 97, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "mstar301" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 98, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "mstar401" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 99, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "mstar501" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 100, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dmace101" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 101, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dmace201" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 102, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dmace301" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 43 + } + }, + { + "__struct_id": 103, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dmace401" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 43 + } + }, + { + "__struct_id": 104, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dmace501" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 44 + } + }, + { + "__struct_id": 105, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "daxe101" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 44 + } + }, + { + "__struct_id": 106, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "daxe201" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 44 + } + }, + { + "__struct_id": 107, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "daxe301" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + } + }, + { + "__struct_id": 108, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "daxe401" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + } + }, + { + "__struct_id": 109, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "daxe501" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + } + }, + { + "__struct_id": 110, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "qstaff101" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 40 + } + }, + { + "__struct_id": 111, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "qstaff201" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + } + }, + { + "__struct_id": 112, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "qstaff301" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + } + }, + { + "__struct_id": 113, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "qstaff401" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + } + }, + { + "__struct_id": 114, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "qstaff501" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 50 + } + }, + { + "__struct_id": 115, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dsword101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 54 + } + }, + { + "__struct_id": 116, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dsword201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 54 + } + }, + { + "__struct_id": 117, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dsword301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 54 + } + }, + { + "__struct_id": 118, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dsword401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 54 + } + }, + { + "__struct_id": 119, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dsword501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 54 + } + }, + { + "__struct_id": 120, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "kama101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 47 + } + }, + { + "__struct_id": 121, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "kama201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 47 + } + }, + { + "__struct_id": 122, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "kama301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 48 + } + }, + { + "__struct_id": 123, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "kama401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 48 + } + }, + { + "__struct_id": 124, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "kama402" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 48 + } + }, + { + "__struct_id": 125, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "kukri101" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 38 + } + }, + { + "__struct_id": 126, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "kukri201" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + } + }, + { + "__struct_id": 127, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "kukri301" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + } + }, + { + "__struct_id": 128, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "kukri401" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + } + }, + { + "__struct_id": 129, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "kukri501" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + } + }, + { + "__struct_id": 130, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sickle101" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + } + }, + { + "__struct_id": 131, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sickle201" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + } + }, + { + "__struct_id": 132, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sickle301" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 60 + } + }, + { + "__struct_id": 133, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sickle401" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 62 + } + }, + { + "__struct_id": 134, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sickle501" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 62 + } + }, + { + "__struct_id": 135, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "halberd101" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 62 + } + }, + { + "__struct_id": 136, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "halberd201" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 62 + } + }, + { + "__struct_id": 137, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "halberd301" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 62 + } + }, + { + "__struct_id": 138, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "halberd401" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 64 + } + }, + { + "__struct_id": 139, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "halberd501" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 64 + } + }, + { + "__struct_id": 140, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scythe101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 70 + } + }, + { + "__struct_id": 141, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scythe201" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 70 + } + }, + { + "__struct_id": 142, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scythe301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 70 + } + }, + { + "__struct_id": 143, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scythe401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 70 + } + }, + { + "__struct_id": 144, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scythe501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 70 + } + }, + { + "__struct_id": 145, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "spear101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 74 + } + }, + { + "__struct_id": 146, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "spear201" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 74 + } + }, + { + "__struct_id": 147, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "spear301" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 74 + } + }, + { + "__struct_id": 148, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "spear401" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 74 + } + }, + { + "__struct_id": 149, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "spear501" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 74 + } + }, + { + "__struct_id": 150, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hxbow101" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 74 + } + }, + { + "__struct_id": 151, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hxbow201" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 74 + } + }, + { + "__struct_id": 152, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hxbow301" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 80 + } + }, + { + "__struct_id": 153, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hxbow401" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 80 + } + }, + { + "__struct_id": 154, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "hxbow501" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 80 + } + }, + { + "__struct_id": 155, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lxbow101" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 67 + } + }, + { + "__struct_id": 156, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lxbow201" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 67 + } + }, + { + "__struct_id": 157, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lxbow301" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 67 + } + }, + { + "__struct_id": 158, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lxbow401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 80 + } + }, + { + "__struct_id": 159, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lxbow501" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 80 + } + }, + { + "__struct_id": 160, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lbow101" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 83 + } + }, + { + "__struct_id": 161, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lbow201" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 83 + } + }, + { + "__struct_id": 162, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lbow301" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 84 + } + }, + { + "__struct_id": 163, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lbow401" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 84 + } + }, + { + "__struct_id": 164, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "lbow501" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 84 + } + }, + { + "__struct_id": 165, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sbow101" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 87 + } + }, + { + "__struct_id": 166, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sbow201" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 87 + } + }, + { + "__struct_id": 167, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sbow301" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 90 + } + }, + { + "__struct_id": 168, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sbow401" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 90 + } + }, + { + "__struct_id": 169, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sbow501" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 90 + } + }, + { + "__struct_id": 170, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sling101" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 74 + } + }, + { + "__struct_id": 171, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sling201" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 76 + } + }, + { + "__struct_id": 172, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sling301" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 78 + } + }, + { + "__struct_id": 173, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sling401" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 78 + } + }, + { + "__struct_id": 174, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "sling501" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 78 + } + }, + { + "__struct_id": 175, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dart101" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 176, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dart201" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 177, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dart301" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 178, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dart401" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 179, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "dart501" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 180, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "shuriken101" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 181, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "shuriken201" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 182, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "shuriken301" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 183, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "shuriken401" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 29 + } + }, + { + "__struct_id": 184, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "shuriken501" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 29 + } + }, + { + "__struct_id": 185, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "taxe101" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 78 + } + }, + { + "__struct_id": 186, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "taxe201" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 78 + } + }, + { + "__struct_id": 187, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "taxe301" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 78 + } + }, + { + "__struct_id": 188, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "taxe401" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 78 + } + }, + { + "__struct_id": 189, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "taxe501" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 78 + } + } + ] + } + }, + { + "__struct_id": 2 + }, + { + "__struct_id": 3 + }, + { + "__struct_id": 1 + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "Merchant2_Store" + } +} diff --git a/src/module/utm/merchant3_store.utm.json b/src/module/utm/merchant3_store.utm.json new file mode 100644 index 0000000..d272c14 --- /dev/null +++ b/src/module/utm/merchant3_store.utm.json @@ -0,0 +1,4669 @@ +{ + "__data_type": "UTM ", + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 25 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "ID": { + "type": "byte", + "value": 5 + }, + "IdentifyPrice": { + "type": "int", + "value": 100 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Merchant3_Store" + } + }, + "MarkDown": { + "type": "int", + "value": 50 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "MaxBuyPrice": { + "type": "int", + "value": -1 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "OnStoreClosed": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "merchant3_store" + }, + "StoreGold": { + "type": "int", + "value": -1 + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll000" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll424" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll001" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll442" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll002" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll429" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll372" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 7, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll363" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 8, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll436" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 9, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll449" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 10, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll430" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 11, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll003" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 12, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll004" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 13, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll462" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 14, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll463" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 15, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll460" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 16, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll461" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 17, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll459" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 18, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll005" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 19, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll006" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 20, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll008" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 21, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll422" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 22, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll423" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 23, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll009" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 24, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll010" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 25, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll011" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 26, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll421" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 27, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll013" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 28, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll014" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 29, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll015" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 30, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll016" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 31, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll017" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 32, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll018" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 33, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll019" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 34, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll020" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 35, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll021" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 36, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll023" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 37, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll024" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 38, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll025" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 39, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll026" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 40, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll027" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 41, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll419" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 42, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll028" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 43, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll029" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 44, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll030" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 45, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll364" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 46, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll031" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 47, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll032" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 48, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll033" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 49, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll034" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 50, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll035" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 51, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll036" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 52, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll037" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 53, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll038" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 54, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll039" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 55, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll366" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 56, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll445" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 57, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll040" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 58, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll041" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 59, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll458" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 5 + } + }, + { + "__struct_id": 60, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll414" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 61, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll464" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 62, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll042" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 63, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll465" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 64, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll043" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 65, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll044" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 66, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll045" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 67, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll046" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 68, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll437" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 69, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll354" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 70, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll426" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 71, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll439" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 72, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll047" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 73, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll048" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 74, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll049" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 75, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll050" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 76, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll369" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 77, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll051" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 78, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll052" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 79, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll053" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 7 + } + }, + { + "__struct_id": 80, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll418" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 81, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll121" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 82, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll375" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 83, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll456" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 84, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll054" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 85, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll055" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 86, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll377" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 87, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll056" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 88, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll057" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 89, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll058" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 90, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll440" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 91, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll059" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 92, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll060" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 93, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll061" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 94, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll416" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 95, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll485" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 96, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll356" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 97, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll062" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 98, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll065" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 99, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll066" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 9 + } + }, + { + "__struct_id": 100, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll067" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 101, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll453" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 102, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll069" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 103, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll070" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 104, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll443" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 105, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll349" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 106, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll072" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 107, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scoll073" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 108, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll074" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 109, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll075" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 10 + } + }, + { + "__struct_id": 110, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll076" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 111, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll077" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 112, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll078" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 113, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll079" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 114, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll080" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 115, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll081" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 116, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll082" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 117, + "InventoryRes": { + "type": "resref", + "value": "scroll083" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 118, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll367" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 119, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll368" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 11 + } + }, + { + "__struct_id": 120, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll086" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 121, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll087" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 122, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll088" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 123, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll089" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 124, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll446" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 125, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll435" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 126, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll432" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 127, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll431" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 128, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll433" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 129, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll434" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 12 + } + }, + { + "__struct_id": 130, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll090" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 131, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll091" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 132, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll092" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 133, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll448" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 134, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll447" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 135, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll093" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 136, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll376" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 137, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll094" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 138, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll095" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 139, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll096" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 13 + } + }, + { + "__struct_id": 140, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll097" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 141, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll098" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 142, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll099" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 143, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll100" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 144, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll101" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 145, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll102" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 146, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll103" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 147, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll452" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 148, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll107" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 149, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll110" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 14 + } + }, + { + "__struct_id": 150, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll455" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 151, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll111" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 152, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll113" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 153, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll114" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 154, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll115" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 155, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll116" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 156, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll117" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 157, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll118" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 158, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll119" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 159, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll122" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 15 + } + }, + { + "__struct_id": 160, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll123" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 161, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll124" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 162, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll370" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 163, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll125" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 164, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll371" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 165, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll126" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 166, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll420" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 167, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll355" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 168, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll127" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 169, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll451" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 16 + } + }, + { + "__struct_id": 170, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll128" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + } + }, + { + "__struct_id": 171, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll129" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + } + }, + { + "__struct_id": 172, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll130" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + } + }, + { + "__struct_id": 173, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll131" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + } + }, + { + "__struct_id": 174, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll132" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + } + }, + { + "__struct_id": 175, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll133" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + } + }, + { + "__struct_id": 176, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll134" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + } + }, + { + "__struct_id": 177, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll135" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + } + }, + { + "__struct_id": 178, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll136" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + } + }, + { + "__struct_id": 179, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll137" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 17 + } + }, + { + "__struct_id": 180, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll425" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 181, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll142" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 182, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll143" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 183, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll144" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 184, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll374" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 185, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll145" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 186, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll146" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 187, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll147" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 188, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll148" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 189, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll149" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 18 + } + }, + { + "__struct_id": 190, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll150" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 191, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll151" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 192, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll152" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 193, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll153" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 194, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll154" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 195, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll155" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 196, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll156" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 197, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll157" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 198, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll324" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 199, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll345" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 19 + } + }, + { + "__struct_id": 200, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll160" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 201, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll161" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 202, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll417" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 203, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll450" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 204, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll163" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 205, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll164" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 206, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll165" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 207, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll166" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 208, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll167" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 209, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll169" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 20 + } + }, + { + "__struct_id": 210, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll168" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + } + }, + { + "__struct_id": 211, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll454" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + } + }, + { + "__struct_id": 212, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll171" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + } + }, + { + "__struct_id": 213, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll486" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + } + }, + { + "__struct_id": 214, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll172" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + } + }, + { + "__struct_id": 215, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll173" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + } + }, + { + "__struct_id": 216, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll174" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + } + }, + { + "__struct_id": 217, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll175" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + } + }, + { + "__struct_id": 218, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll176" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + } + }, + { + "__struct_id": 219, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll177" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 21 + } + }, + { + "__struct_id": 220, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll178" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + } + }, + { + "__struct_id": 221, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll179" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + } + }, + { + "__struct_id": 222, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll180" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + } + }, + { + "__struct_id": 223, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll181" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + } + }, + { + "__struct_id": 224, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll182" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + } + }, + { + "__struct_id": 225, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll427" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + } + }, + { + "__struct_id": 226, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll457" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + } + }, + { + "__struct_id": 227, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll184" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + } + }, + { + "__struct_id": 228, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll185" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + } + }, + { + "__struct_id": 229, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll186" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 22 + } + }, + { + "__struct_id": 230, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll415" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 231, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll444" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 232, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll188" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 233, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll189" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 234, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll190" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 235, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll191" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 236, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll373" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 237, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll192" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 238, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll193" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 239, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll194" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 23 + } + }, + { + "__struct_id": 240, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "scroll441" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 24 + } + } + ] + } + }, + { + "__struct_id": 3 + }, + { + "__struct_id": 1 + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "Merchant3_Store" + }, + "WillNotBuy": { + "type": "list", + "value": [] + }, + "WillOnlyBuy": { + "type": "list", + "value": [] + } +} diff --git a/src/module/utm/merchant4_store.utm.json b/src/module/utm/merchant4_store.utm.json new file mode 100644 index 0000000..5a1cf67 --- /dev/null +++ b/src/module/utm/merchant4_store.utm.json @@ -0,0 +1,1020 @@ +{ + "__data_type": "UTM ", + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 25 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "ID": { + "type": "byte", + "value": 5 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Merchant4_Store" + } + }, + "MarkDown": { + "type": "int", + "value": 50 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "merchant4_store" + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2 + }, + { + "__struct_id": 3, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand009" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand010" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand015" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand016" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand2016" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand024" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand027" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 7, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand031" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 8, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand032" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 9, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand034" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 10, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand035" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 11, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand036" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 12, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand041" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 13, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand143" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 14, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand054" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 15, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand191" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 16, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand058" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 17, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand2058" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 18, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand3058" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 19, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand4058" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 20, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand012" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 21, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand368" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 22, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand088" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 23, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand435" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 24, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand090" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 25, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand093" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 26, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand100" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 27, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand101" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 28, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand2101" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 29, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand3101" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 30, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand4101" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 31, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand107" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 32, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand2107" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 33, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand3107" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 34, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand4107" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 35, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand5107" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 36, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand115" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 37, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand126" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 38, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand129" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 39, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand130" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 40, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand152" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 41, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand156" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 42, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand163" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 43, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand166" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 44, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand172" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 45, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand174" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 46, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand175" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 47, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand176" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 48, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand177" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + }, + { + "__struct_id": 49, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "wand192" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 8 + } + } + ] + } + }, + { + "__struct_id": 1 + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "Merchant4_Store" + } +} diff --git a/src/module/utm/merchant5_store.utm.json b/src/module/utm/merchant5_store.utm.json new file mode 100644 index 0000000..848fc32 --- /dev/null +++ b/src/module/utm/merchant5_store.utm.json @@ -0,0 +1,89 @@ +{ + "__data_type": "UTM ", + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 25 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "ID": { + "type": "byte", + "value": 5 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Merchant5_Store" + } + }, + "MarkDown": { + "type": "int", + "value": 50 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "merchant5_store" + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2 + }, + { + "__struct_id": 3 + }, + { + "__struct_id": 1, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "misca003" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "Merchant5_Store" + } +} diff --git a/src/module/utm/merchant6_store.utm.json b/src/module/utm/merchant6_store.utm.json new file mode 100644 index 0000000..f099bca --- /dev/null +++ b/src/module/utm/merchant6_store.utm.json @@ -0,0 +1,721 @@ +{ + "__data_type": "UTM ", + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 25 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "ID": { + "type": "byte", + "value": 5 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Merchant6_Store" + } + }, + "MarkDown": { + "type": "int", + "value": 50 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "merchant6_store" + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion015" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "antitoxin" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion011" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion019" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion018" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion007" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion002" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 7, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion014" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 8, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion025" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 9, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion008" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 10, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion013" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 11, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion004" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 12, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion009" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 13, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion020" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 14, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion031" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 15, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion005" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 16, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion016" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 17, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion001" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 18, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion017" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 19, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion024" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 20, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion010" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 21, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion033" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 22, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion029" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 23, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion026" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 24, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion027" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 25, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion028" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 26, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion030" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 27, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion022" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 28, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion023" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 29, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion021" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 4 + } + }, + { + "__struct_id": 30, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion006" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 31, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion012" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + }, + { + "__struct_id": 32, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "potion003" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 6 + } + } + ] + } + }, + { + "__struct_id": 3 + }, + { + "__struct_id": 1, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "misca003" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "Merchant6_Store" + } +} diff --git a/src/module/utm/merchant7_store.utm.json b/src/module/utm/merchant7_store.utm.json new file mode 100644 index 0000000..ff7467f --- /dev/null +++ b/src/module/utm/merchant7_store.utm.json @@ -0,0 +1,697 @@ +{ + "__data_type": "UTM ", + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 25 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "ID": { + "type": "byte", + "value": 5 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Merchant7_Store" + } + }, + "MarkDown": { + "type": "int", + "value": 50 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "merchant7_store" + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2 + }, + { + "__struct_id": 3, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring007" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring015" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring030" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring005" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring022" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring006" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 6, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring020" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 7, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring008" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 8, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring016" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 9, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring031" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 10, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring009" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 11, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring017" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 12, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring021" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 13, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring032" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 14, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring010" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 15, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring018" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 16, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring004" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 17, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring025" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 18, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring013" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 19, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring001" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 1 + } + }, + { + "__struct_id": 20, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring003" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 21, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring012" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 22, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring023" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 23, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring026" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 24, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring028" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 25, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring011" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 26, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring019" + }, + "Repos_PosX": { + "type": "word", + "value": 6 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 27, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring002" + }, + "Repos_PosX": { + "type": "word", + "value": 7 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 28, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring033" + }, + "Repos_PosX": { + "type": "word", + "value": 8 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 29, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring014" + }, + "Repos_PosX": { + "type": "word", + "value": 9 + }, + "Repos_Posy": { + "type": "word", + "value": 2 + } + }, + { + "__struct_id": 30, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring024" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 31, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring027" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + }, + { + "__struct_id": 32, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "ring029" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 3 + } + } + ] + } + }, + { + "__struct_id": 1 + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "Merchant7_Store" + } +} diff --git a/src/module/utm/merchant8_store.utm.json b/src/module/utm/merchant8_store.utm.json new file mode 100644 index 0000000..00ffa5f --- /dev/null +++ b/src/module/utm/merchant8_store.utm.json @@ -0,0 +1,217 @@ +{ + "__data_type": "UTM ", + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 25 + }, + "Comment": { + "type": "cexostring", + "value": "Chapter 1" + }, + "ID": { + "type": "byte", + "value": 5 + }, + "IdentifyPrice": { + "type": "int", + "value": -1 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Gem Store", + "id": 14810 + } + }, + "MarkDown": { + "type": "int", + "value": 50 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "MaxBuyPrice": { + "type": "int", + "value": -1 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "OnStoreClosed": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "merchant8_store" + }, + "StoreGold": { + "type": "int", + "value": -1 + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2 + }, + { + "__struct_id": 3 + }, + { + "__struct_id": 1, + "ItemList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "rdg_gem201" + }, + "Repos_PosX": { + "type": "word", + "value": 0 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 1, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "rdg_gem601" + }, + "Repos_PosX": { + "type": "word", + "value": 1 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 2, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "rdg_gem401" + }, + "Repos_PosX": { + "type": "word", + "value": 2 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 3, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "rdg_gem301" + }, + "Repos_PosX": { + "type": "word", + "value": 3 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 4, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "rdg_gem101" + }, + "Repos_PosX": { + "type": "word", + "value": 4 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + }, + { + "__struct_id": 5, + "Infinite": { + "type": "byte", + "value": 1 + }, + "InventoryRes": { + "type": "resref", + "value": "rdg_gem501" + }, + "Repos_PosX": { + "type": "word", + "value": 5 + }, + "Repos_Posy": { + "type": "word", + "value": 0 + } + } + ] + } + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "Merchant8_Store" + }, + "WillNotBuy": { + "type": "list", + "value": [] + }, + "WillOnlyBuy": { + "type": "list", + "value": [ + { + "__struct_id": 97869, + "BaseItem": { + "type": "int", + "value": 77 + } + } + ] + } +} diff --git a/src/module/utm/townstore.utm.json b/src/module/utm/townstore.utm.json new file mode 100644 index 0000000..4bedc2c --- /dev/null +++ b/src/module/utm/townstore.utm.json @@ -0,0 +1,65 @@ +{ + "__data_type": "UTM ", + "BlackMarket": { + "type": "byte", + "value": 0 + }, + "BM_MarkDown": { + "type": "int", + "value": 10 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "ID": { + "type": "byte", + "value": 5 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Town Store" + } + }, + "MarkDown": { + "type": "int", + "value": 10 + }, + "MarkUp": { + "type": "int", + "value": 100 + }, + "OnOpenStore": { + "type": "resref", + "value": "" + }, + "ResRef": { + "type": "resref", + "value": "townstore" + }, + "StoreList": { + "type": "list", + "value": [ + { + "__struct_id": 0 + }, + { + "__struct_id": 4 + }, + { + "__struct_id": 2 + }, + { + "__struct_id": 3 + }, + { + "__struct_id": 1 + } + ] + }, + "Tag": { + "type": "cexostring", + "value": "TownStore" + } +} diff --git a/src/module/utp/debuglever.utp.json b/src/module/utp/debuglever.utp.json new file mode 100644 index 0000000..c81225d --- /dev/null +++ b/src/module/utp/debuglever.utp.json @@ -0,0 +1,217 @@ +{ + "__data_type": "UTP ", + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 22 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "Floor Lever - 1" + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "A slender lever rises from the floor, controlling some unseen mechanism below.", + "id": 14632 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Debug Lever", + "id": 14633 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "debug" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 380 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "DebugLever" + }, + "TemplateResRef": { + "type": "resref", + "value": "debuglever" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + } +} diff --git a/src/module/utp/pclootbag.utp.json b/src/module/utp/pclootbag.utp.json new file mode 100644 index 0000000..e7ee208 --- /dev/null +++ b/src/module/utp/pclootbag.utp.json @@ -0,0 +1,215 @@ +{ + "__data_type": "UTP ", + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 14 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "PC Loot" + } + }, + "OnClosed": { + "type": "resref", + "value": "bag_despawn" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 9 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 372 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "PCLoot" + }, + "TemplateResRef": { + "type": "resref", + "value": "pclootbag" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + } +} diff --git a/src/module/utp/port_door.utp.json b/src/module/utp/port_door.utp.json new file mode 100644 index 0000000..a704100 --- /dev/null +++ b/src/module/utp/port_door.utp.json @@ -0,0 +1,217 @@ +{ + "__data_type": "UTP ", + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 252 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 30 + }, + "Comment": { + "type": "cexostring", + "value": "This door is generated when a PC usees a door creation item. It links to a door in town." + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "You have found a secret door. This is bound to lead somewhere interesting.", + "id": 75934 + } + }, + "DisarmDC": { + "type": "byte", + "value": 20 + }, + "Faction": { + "type": "dword", + "value": 4 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door ", + "id": 68906 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "door_transition" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 815 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretStoneDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "port_door" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 10 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + } +} diff --git a/src/module/utp/rdg_chest.utp.json b/src/module/utp/rdg_chest.utp.json new file mode 100644 index 0000000..12da05d --- /dev/null +++ b/src/module/utp/rdg_chest.utp.json @@ -0,0 +1,217 @@ +{ + "__data_type": "UTP ", + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 10 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "Chest - 4 (High treasure script)" + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Low and flat, this chest seems to have been designed for the storage and filing of a merchant's accounts.", + "id": 14597 + } + }, + "DisarmDC": { + "type": "byte", + "value": 40 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Chest", + "id": 5348 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "rdg_chest" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "rdg_chest" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 40 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 368 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "RDG_CHEST" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_chest" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 40 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + } +} diff --git a/src/module/utp/rdg_pit1.utp.json b/src/module/utp/rdg_pit1.utp.json new file mode 100644 index 0000000..f3b0611 --- /dev/null +++ b/src/module/utp/rdg_pit1.utp.json @@ -0,0 +1,235 @@ +{ + "__data_type": "UTP ", + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 432 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "Sphinx Statue" + }, + "Conversation": { + "type": "resref", + "value": "rdg_pit" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "id": 84171 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 83425 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "rdg_rope_top" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "PaletteID": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 915 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "RDG_PIT" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_pit1" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "Will": { + "type": "byte", + "value": 0 + } +} diff --git a/src/module/utp/rdg_pit2.utp.json b/src/module/utp/rdg_pit2.utp.json new file mode 100644 index 0000000..8a2075b --- /dev/null +++ b/src/module/utp/rdg_pit2.utp.json @@ -0,0 +1,237 @@ +{ + "__data_type": "UTP ", + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 248 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "This is the trap door that will be created when the Hidden door trigger determins that the door has been found. see comments on the trigger for how to use." + }, + "Conversation": { + "type": "resref", + "value": "rdg_pit" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "You have found a secret grate. This is bound to lead somewhere interesting.", + "id": 76380 + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Trap Door", + "id": 68907 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "rdg_rope_top" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 807 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "RDG_PIT" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_pit2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 5 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "Will": { + "type": "byte", + "value": 0 + } +} diff --git a/src/module/utp/rdg_pit3.utp.json b/src/module/utp/rdg_pit3.utp.json new file mode 100644 index 0000000..68a2337 --- /dev/null +++ b/src/module/utp/rdg_pit3.utp.json @@ -0,0 +1,237 @@ +{ + "__data_type": "UTP ", + "AnimationState": { + "type": "byte", + "value": 1 + }, + "Appearance": { + "type": "dword", + "value": 247 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "This is the trap door that will be created when the Hidden door trigger determins that the door has been found. see comments on the trigger for how to use." + }, + "Conversation": { + "type": "resref", + "value": "rdg_pit" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "You have found a secret trap door. This is bound to lead somewhere interesting.", + "id": 76379 + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Trap Door ", + "id": 68909 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "rdg_rope_top" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 806 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "RDG_PIT" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_pit3" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 5 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "Will": { + "type": "byte", + "value": 0 + } +} diff --git a/src/module/utp/rdg_pit4.utp.json b/src/module/utp/rdg_pit4.utp.json new file mode 100644 index 0000000..180d11a --- /dev/null +++ b/src/module/utp/rdg_pit4.utp.json @@ -0,0 +1,236 @@ +{ + "__data_type": "UTP ", + "AnimationState": { + "type": "byte", + "value": 1 + }, + "Appearance": { + "type": "dword", + "value": 185 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "Trap Door" + }, + "Conversation": { + "type": "resref", + "value": "rdg_pit" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "A trap door set in the floor.", + "id": 67631 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 2 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 52996 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "rdg_rope_top" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "PaletteID": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 548 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "RDG_PIT" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_pit4" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 1 + } + } + ] + }, + "Will": { + "type": "byte", + "value": 0 + } +} diff --git a/src/module/utp/rdg_plc_corpse.utp.json b/src/module/utp/rdg_plc_corpse.utp.json new file mode 100644 index 0000000..35e8069 --- /dev/null +++ b/src/module/utp/rdg_plc_corpse.utp.json @@ -0,0 +1,216 @@ +{ + "__data_type": "UTP ", + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 327 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "BodyBag": { + "type": "byte", + "value": 5 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "Invisible Object" + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "Death comes to us all... ", + "id": 68886 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68885 + } + }, + "OnClosed": { + "type": "resref", + "value": "bag_despawn" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "PaletteID": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 675 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "X0_CORPSE" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_plc_corpse" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + } +} diff --git a/src/module/utp/rdg_rope_used.utp.json b/src/module/utp/rdg_rope_used.utp.json new file mode 100644 index 0000000..33ac0b4 --- /dev/null +++ b/src/module/utp/rdg_rope_used.utp.json @@ -0,0 +1,217 @@ +{ + "__data_type": "UTP ", + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 446 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "This rope is created by either the well in the Yawning Portal Inn or by PCs using a rope on a pit trap." + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 15 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "A strong rope made from hemp, dangling from some place above you.", + "id": 84185 + } + }, + "DisarmDC": { + "type": "byte", + "value": 15 + }, + "Faction": { + "type": "dword", + "value": 4 + }, + "Fort": { + "type": "byte", + "value": 16 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 15 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Rope", + "id": 83440 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "rdg_rope_bottom" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 18 + }, + "PaletteID": { + "type": "byte", + "value": 6 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 389 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_rope" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_rope_used" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + } +} diff --git a/src/module/utp/rdg_secret_door.utp.json b/src/module/utp/rdg_secret_door.utp.json new file mode 100644 index 0000000..c9a9db5 --- /dev/null +++ b/src/module/utp/rdg_secret_door.utp.json @@ -0,0 +1,216 @@ +{ + "__data_type": "UTP ", + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 252 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "This is a modified secret door spawned at custom \"Secret Door\" waypoints. " + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "You have found a secret door. This is bound to lead somewhere interesting.", + "id": 75934 + } + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 4 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 0 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "id": 68906 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "rdg_secret_door" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 99 + }, + "PaletteID": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 815 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "rdg_secret_door" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secret_door" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 5 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + } +} diff --git a/src/module/utp/sec_door2.utp.json b/src/module/utp/sec_door2.utp.json new file mode 100644 index 0000000..2a1ce2f --- /dev/null +++ b/src/module/utp/sec_door2.utp.json @@ -0,0 +1,217 @@ +{ + "__data_type": "UTP ", + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 252 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 30 + }, + "Comment": { + "type": "cexostring", + "value": "This is the trap door that will be created when the Hidden door trigger determins that the door has been found. see comments on the trigger for how to use." + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "You have found a secret door. This is bound to lead somewhere interesting.", + "id": 75934 + } + }, + "DisarmDC": { + "type": "byte", + "value": 20 + }, + "Faction": { + "type": "dword", + "value": 4 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 0 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door ", + "id": 68906 + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "door_transition" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 10 + }, + "PaletteID": { + "type": "byte", + "value": 15 + }, + "Plot": { + "type": "byte", + "value": 1 + }, + "PortraitId": { + "type": "word", + "value": 815 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SecretStoneDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "sec_door2" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 10 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + } +} diff --git a/src/module/utp/skinremover.utp.json b/src/module/utp/skinremover.utp.json new file mode 100644 index 0000000..413b154 --- /dev/null +++ b/src/module/utp/skinremover.utp.json @@ -0,0 +1,213 @@ +{ + "__data_type": "UTP ", + "AnimationState": { + "type": "byte", + "value": 0 + }, + "Appearance": { + "type": "dword", + "value": 157 + }, + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "BodyBag": { + "type": "byte", + "value": 0 + }, + "CloseLockDC": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Conversation": { + "type": "resref", + "value": "" + }, + "CurrentHP": { + "type": "short", + "value": 10 + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "DisarmDC": { + "type": "byte", + "value": 0 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "Fort": { + "type": "byte", + "value": 5 + }, + "Hardness": { + "type": "byte", + "value": 5 + }, + "HasInventory": { + "type": "byte", + "value": 1 + }, + "HP": { + "type": "short", + "value": 10 + }, + "Interruptable": { + "type": "byte", + "value": 1 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "KeyRequired": { + "type": "byte", + "value": 0 + }, + "Lockable": { + "type": "byte", + "value": 1 + }, + "Locked": { + "type": "byte", + "value": 0 + }, + "LocName": { + "type": "cexolocstring", + "value": { + "0": "SkinRemover" + } + }, + "OnClosed": { + "type": "resref", + "value": "" + }, + "OnDamaged": { + "type": "resref", + "value": "" + }, + "OnDeath": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnHeartbeat": { + "type": "resref", + "value": "" + }, + "OnInvDisturbed": { + "type": "resref", + "value": "" + }, + "OnLock": { + "type": "resref", + "value": "" + }, + "OnMeleeAttacked": { + "type": "resref", + "value": "" + }, + "OnOpen": { + "type": "resref", + "value": "" + }, + "OnSpellCastAt": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "" + }, + "OnUnlock": { + "type": "resref", + "value": "" + }, + "OnUsed": { + "type": "resref", + "value": "" + }, + "OnUserDefined": { + "type": "resref", + "value": "" + }, + "OpenLockDC": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Plot": { + "type": "byte", + "value": 0 + }, + "PortraitId": { + "type": "word", + "value": 515 + }, + "Ref": { + "type": "byte", + "value": 0 + }, + "Static": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "SkinRemover" + }, + "TemplateResRef": { + "type": "resref", + "value": "skinremover" + }, + "TrapDetectable": { + "type": "byte", + "value": 1 + }, + "TrapDetectDC": { + "type": "byte", + "value": 0 + }, + "TrapDisarmable": { + "type": "byte", + "value": 1 + }, + "TrapFlag": { + "type": "byte", + "value": 0 + }, + "TrapOneShot": { + "type": "byte", + "value": 1 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "byte", + "value": 0 + }, + "Useable": { + "type": "byte", + "value": 1 + }, + "Will": { + "type": "byte", + "value": 0 + } +} diff --git a/src/module/utt/rd_trap.utt.json b/src/module/utt/rd_trap.utt.json new file mode 100644 index 0000000..3297664 --- /dev/null +++ b/src/module/utt/rd_trap.utt.json @@ -0,0 +1,141 @@ +{ + "__data_type": "UTT ", + "AutoRemoveKey": { + "type": "byte", + "value": 0 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Cursor": { + "type": "byte", + "value": 0 + }, + "DisarmDC": { + "type": "byte", + "value": 99 + }, + "Faction": { + "type": "dword", + "value": 1 + }, + "HighlightHeight": { + "type": "float", + "value": 3.0 + }, + "KeyName": { + "type": "cexostring", + "value": "" + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LinkedToFlags": { + "type": "byte", + "value": 0 + }, + "LoadScreenID": { + "type": "word", + "value": 0 + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "RDG_Trap" + } + }, + "OnClick": { + "type": "resref", + "value": "" + }, + "OnDisarm": { + "type": "resref", + "value": "" + }, + "OnTrapTriggered": { + "type": "resref", + "value": "rdg_trap" + }, + "PaletteID": { + "type": "byte", + "value": 16 + }, + "PortraitId": { + "type": "word", + "value": 0 + }, + "ScriptHeartbeat": { + "type": "resref", + "value": "" + }, + "ScriptOnEnter": { + "type": "resref", + "value": "" + }, + "ScriptOnExit": { + "type": "resref", + "value": "" + }, + "ScriptUserDefine": { + "type": "resref", + "value": "" + }, + "Tag": { + "type": "cexostring", + "value": "RDG_Trap" + }, + "TemplateResRef": { + "type": "resref", + "value": "rd_trap" + }, + "TrapDetectable": { + "type": "byte", + "value": 0 + }, + "TrapDetectDC": { + "type": "byte", + "value": 99 + }, + "TrapDisarmable": { + "type": "byte", + "value": 0 + }, + "TrapFlag": { + "type": "byte", + "value": 1 + }, + "TrapOneShot": { + "type": "byte", + "value": 0 + }, + "TrapType": { + "type": "byte", + "value": 0 + }, + "Type": { + "type": "int", + "value": 2 + }, + "VarTable": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Name": { + "type": "cexostring", + "value": "Pit" + }, + "Type": { + "type": "dword", + "value": 1 + }, + "Value": { + "type": "int", + "value": 0 + } + } + ] + } +} diff --git a/src/module/utw/decor.utw.json b/src/module/utw/decor.utw.json new file mode 100644 index 0000000..7425ea8 --- /dev/null +++ b/src/module/utw/decor.utw.json @@ -0,0 +1,49 @@ +{ + "__data_type": "UTW ", + "Appearance": { + "type": "byte", + "value": 4 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": {} + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Decor" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 3 + }, + "Tag": { + "type": "cexostring", + "value": "Decor" + }, + "TemplateResRef": { + "type": "resref", + "value": "decor" + } +} diff --git a/src/module/utw/error.utw.json b/src/module/utw/error.utw.json new file mode 100644 index 0000000..322c013 --- /dev/null +++ b/src/module/utw/error.utw.json @@ -0,0 +1,53 @@ +{ + "__data_type": "UTW ", + "Appearance": { + "type": "byte", + "value": 2 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 1 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Common Room" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": { + "0": "Common Room" + } + }, + "MapNoteEnabled": { + "type": "byte", + "value": 1 + }, + "PaletteID": { + "type": "byte", + "value": 4 + }, + "Tag": { + "type": "cexostring", + "value": "ERROR" + }, + "TemplateResRef": { + "type": "resref", + "value": "error" + } +} diff --git a/src/module/utw/fall.utw.json b/src/module/utw/fall.utw.json new file mode 100644 index 0000000..dff5dd7 --- /dev/null +++ b/src/module/utw/fall.utw.json @@ -0,0 +1,51 @@ +{ + "__data_type": "UTW ", + "Appearance": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint determiens where victims of pit traps land. It is also used by the well entrance of the Yawning Portal Inn." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Fall" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Fall" + }, + "TemplateResRef": { + "type": "resref", + "value": "fall" + } +} diff --git a/src/module/utw/hiddenchest.utw.json b/src/module/utw/hiddenchest.utw.json new file mode 100644 index 0000000..d55cc90 --- /dev/null +++ b/src/module/utw/hiddenchest.utw.json @@ -0,0 +1,51 @@ +{ + "__data_type": "UTW ", + "Appearance": { + "type": "byte", + "value": 3 + }, + "Comment": { + "type": "cexostring", + "value": "This waypoint should face the opposite direction you want the chest to face." + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Hidden Chest Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 2 + }, + "Tag": { + "type": "cexostring", + "value": "HiddenChest" + }, + "TemplateResRef": { + "type": "resref", + "value": "hiddenchest" + } +} diff --git a/src/module/utw/mon_.utw.json b/src/module/utw/mon_.utw.json new file mode 100644 index 0000000..33f6db2 --- /dev/null +++ b/src/module/utw/mon_.utw.json @@ -0,0 +1,51 @@ +{ + "__data_type": "UTW ", + "Appearance": { + "type": "byte", + "value": 2 + }, + "Comment": { + "type": "cexostring", + "value": "This waypoint is used to populate an area with monsters.\r\n\r\nOnly 1 Room Monster Spawn Point is allowed per area." + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Room Monster Spawn" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 1 + }, + "Tag": { + "type": "cexostring", + "value": "MON_" + }, + "TemplateResRef": { + "type": "resref", + "value": "mon_" + } +} diff --git a/src/module/utw/rdg_secretdoor.utw.json b/src/module/utw/rdg_secretdoor.utw.json new file mode 100644 index 0000000..0d08db3 --- /dev/null +++ b/src/module/utw/rdg_secretdoor.utw.json @@ -0,0 +1,51 @@ +{ + "__data_type": "UTW ", + "Appearance": { + "type": "byte", + "value": 4 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "This waypoint should always be facing the wall on which you want the secret door to appear. It's staff should be as close to the wall as you can place it." + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Secret Door" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 2 + }, + "Tag": { + "type": "cexostring", + "value": "SecretDoor" + }, + "TemplateResRef": { + "type": "resref", + "value": "rdg_secretdoor" + } +} diff --git a/src/module/utw/transition.utw.json b/src/module/utw/transition.utw.json new file mode 100644 index 0000000..dd7ec0a --- /dev/null +++ b/src/module/utw/transition.utw.json @@ -0,0 +1,51 @@ +{ + "__data_type": "UTW ", + "Appearance": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "This waypoint should ALWAYS be placed near area transitions. It pervents PCs from spawning behind the zone line of doors." + }, + "Description": { + "type": "cexolocstring", + "value": { + "0": "" + } + }, + "HasMapNote": { + "type": "byte", + "value": 0 + }, + "LinkedTo": { + "type": "cexostring", + "value": "" + }, + "LocalizedName": { + "type": "cexolocstring", + "value": { + "0": "Transition" + } + }, + "MapNote": { + "type": "cexolocstring", + "value": {} + }, + "MapNoteEnabled": { + "type": "byte", + "value": 0 + }, + "PaletteID": { + "type": "byte", + "value": 0 + }, + "Tag": { + "type": "cexostring", + "value": "Transition" + }, + "TemplateResRef": { + "type": "resref", + "value": "transition" + } +}